@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,185 @@
1
+ import { COMMON_TIMEZONES, type Field } from '~/db/core/fields';
2
+ import type { C15TOptions } from '~/types';
3
+ import { auditLogSchema } from './schema';
4
+
5
+ /**
6
+ * Generates the database table configuration for the consent audit log entity.
7
+ *
8
+ * This function creates a schema definition that includes all standard audit log 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 audit log table customizations
13
+ * @param auditLogFields - Additional fields from plugins to include in the audit log table
14
+ * @returns A complete table schema definition with fields, model name, and metadata
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const auditLogTableSchema = getAuditLogTable(c15tOptions);
19
+ * // Use the schema for migrations or data access
20
+ * const migrationPlans = generateMigrations(auditLogTableSchema);
21
+ * ```
22
+ */
23
+ export function getAuditLogTable(
24
+ options: C15TOptions,
25
+ auditLogFields?: Record<string, Field>
26
+ ) {
27
+ const auditLogConfig = options.tables?.auditLog;
28
+ const subjectConfig = options.tables?.subject;
29
+
30
+ return {
31
+ /**
32
+ * The name of the audit log table in the database, configurable through options
33
+ */
34
+ entityName: auditLogConfig?.entityName || 'auditLog',
35
+
36
+ /**
37
+ * The ID prefix for the audit log table
38
+ * Used to generate unique prefixed IDs
39
+ */
40
+ entityPrefix: auditLogConfig?.entityPrefix || 'log',
41
+
42
+ /**
43
+ * The schema for the audit log table
44
+ */
45
+ schema: auditLogSchema,
46
+
47
+ /**
48
+ * Field definitions for the consent audit log table
49
+ */
50
+ fields: {
51
+ /**
52
+ * Type of entity this audit log entry is about (e.g., 'consent', 'subject', 'consentPurpose')
53
+ */
54
+ entityType: {
55
+ type: 'string',
56
+ required: true,
57
+ fieldName: auditLogConfig?.fields?.entityType || 'entityType',
58
+ },
59
+
60
+ /**
61
+ * ID of the entity this audit log entry is about
62
+ */
63
+ entityId: {
64
+ type: 'string',
65
+ required: true,
66
+ fieldName: auditLogConfig?.fields?.entityId || 'entityId',
67
+ },
68
+
69
+ /**
70
+ * Type of action that was performed on the entity
71
+ * Common values: 'create', 'update', 'delete', 'view'
72
+ */
73
+ actionType: {
74
+ type: 'string',
75
+ required: true,
76
+ fieldName: auditLogConfig?.fields?.actionType || 'actionType',
77
+ },
78
+
79
+ /**
80
+ * Optional ID of the subject who performed the action
81
+ */
82
+ subjectId: {
83
+ type: 'string',
84
+ required: false,
85
+ fieldName: auditLogConfig?.fields?.subjectId || 'subjectId',
86
+ references: {
87
+ model: subjectConfig?.entityName || 'subject',
88
+ field: 'id',
89
+ },
90
+ },
91
+
92
+ /**
93
+ * IP address from which the action was performed
94
+ */
95
+ ipAddress: {
96
+ type: 'string',
97
+ required: false,
98
+ fieldName: auditLogConfig?.fields?.ipAddress || 'ipAddress',
99
+ },
100
+
101
+ /**
102
+ * Subject agent (browser/device) from which the action was performed
103
+ */
104
+ userAgent: {
105
+ type: 'string',
106
+ required: false,
107
+ fieldName: auditLogConfig?.fields?.userAgent || 'userAgent',
108
+ },
109
+
110
+ /**
111
+ * Detailed changes made to the entity
112
+ * For updates, this typically contains before/after values
113
+ */
114
+ changes: {
115
+ type: 'json',
116
+ required: false,
117
+ fieldName: auditLogConfig?.fields?.changes || 'changes',
118
+ },
119
+
120
+ /**
121
+ * Additional metadata about the action
122
+ */
123
+ metadata: {
124
+ type: 'json',
125
+ required: false,
126
+ fieldName: auditLogConfig?.fields?.metadata || 'metadata',
127
+ },
128
+
129
+ /**
130
+ * When the audit log entry 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: auditLogConfig?.fields?.createdAt || 'createdAt',
138
+ },
139
+
140
+ /**
141
+ * Timezone where the audit event occurred
142
+ */
143
+ eventTimezone: {
144
+ type: 'timezone',
145
+ required: true,
146
+ defaultValue: COMMON_TIMEZONES.UTC,
147
+ fieldName: auditLogConfig?.fields?.eventTimezone || 'eventTimezone',
148
+ },
149
+
150
+ // Include additional fields from plugins
151
+ ...(auditLogFields || {}),
152
+
153
+ // Include additional fields from configuration
154
+ ...(auditLogConfig?.additionalFields || {}),
155
+ },
156
+
157
+ /**
158
+ * Add indexes for better query performance
159
+ */
160
+ indexes: [
161
+ {
162
+ name: 'entity_index',
163
+ fields: ['entityType', 'entityId'],
164
+ },
165
+ {
166
+ name: 'action_type_index',
167
+ fields: ['actionType'],
168
+ },
169
+ {
170
+ name: 'subject_id_index',
171
+ fields: ['subjectId'],
172
+ },
173
+ {
174
+ name: 'created_at_index',
175
+ fields: ['createdAt'],
176
+ },
177
+ ],
178
+
179
+ /**
180
+ * Execution order during migrations (lower numbers run first)
181
+ * Audit log table needs to be created after the subject table it references
182
+ */
183
+ order: 5,
184
+ };
185
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Audit Log Entity Type Definitions
3
+ *
4
+ * This module contains type definitions specific to the audit log entity.
5
+ */
6
+ import type { BaseEntityConfig } from '../types';
7
+
8
+ /**
9
+ * Audit log entity configuration
10
+ * @default {entityName: "auditLog", entityPrefix: "log"}
11
+ *
12
+ * These defaults are applied when creating an audit log entity if not explicitly specified.
13
+ * See the entity creation utilities for implementation details.
14
+ */
15
+ export interface AuditLogEntityConfig extends BaseEntityConfig {
16
+ fields?: Record<string, string> & {
17
+ id?: string;
18
+ timestamp: string;
19
+ action: string;
20
+ subjectId?: string;
21
+ resourceType: string;
22
+ resourceId?: string;
23
+ actor?: string;
24
+ changes?: string;
25
+ deviceInfo?: string;
26
+ ipAddress?: string;
27
+ createdAt?: string;
28
+ };
29
+ }
@@ -0,0 +1,3 @@
1
+ export * from './registry';
2
+ export * from './schema';
3
+ export * from './table';
@@ -0,0 +1,381 @@
1
+ import type { Where } from '~/db/adapters/types';
2
+ import { getWithHooks } from '~/db/hooks';
3
+ import type { GenericEndpointContext, RegistryContext } from '~/types';
4
+ import { validateEntityOutput } from '../definition';
5
+ import type { Consent } from './schema';
6
+
7
+ export interface FindConsentsParams {
8
+ subjectId?: string;
9
+ domainId?: string;
10
+ status?: string;
11
+ purposeIds?: string[];
12
+ includeInactive?: boolean;
13
+ }
14
+
15
+ export interface RevokeConsentParams {
16
+ consentId: string;
17
+ reason: string;
18
+ actor: string;
19
+ metadata?: Record<string, unknown>;
20
+ context?: GenericEndpointContext;
21
+ }
22
+
23
+ /**
24
+ * Creates and returns a set of consent-related adapter methods to interact with the database.
25
+ * These methods provide a consistent interface for creating, finding, and updating
26
+ * consent records while applying hooks and enforcing data validation rules.
27
+ *
28
+ * @param adapter - The database adapter used for direct database operations
29
+ * @param ctx - The context object containing the database adapter, hooks, and options
30
+ * @returns An object containing type-safe consent operations
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const consentAdapter = createConsentAdapter(
35
+ * databaseAdapter,
36
+ * createWithHooks,
37
+ * updateWithHooks,
38
+ * c15tOptions
39
+ * );
40
+ *
41
+ * // Create a new consent record
42
+ * const consent = await consentAdapter.createConsent({
43
+ * subjectId: 'sub_x1pftyoufsm7xgo1kv',
44
+ * domainId: 'dom_x1pftyoufsm7xgo1kv',
45
+ * purposeIds: ['pur_e8zyhgozr3im7xj59it'],
46
+ * status: 'active'
47
+ * });
48
+ * ```
49
+ */
50
+ export function consentRegistry({ adapter, ...ctx }: RegistryContext) {
51
+ const { createWithHooks, updateWithHooks } = getWithHooks(adapter, ctx);
52
+ const registry = {
53
+ /**
54
+ * Creates a new consent record in the database.
55
+ * Automatically sets creation timestamp and applies any
56
+ * configured hooks during the creation process.
57
+ *
58
+ * @param consent - Consent data to create (without id and timestamp)
59
+ * @param context - Optional endpoint context for hooks
60
+ * @returns The created consent with all fields populated
61
+ * @throws May throw an error if hooks prevent creation or if database operations fail
62
+ */
63
+ createConsent: async (
64
+ consent: Omit<Consent, 'id' | 'createdAt'> & Partial<Consent>,
65
+ context?: GenericEndpointContext
66
+ ) => {
67
+ const createdConsent = await createWithHooks({
68
+ data: {
69
+ createdAt: new Date(),
70
+ ...consent,
71
+ },
72
+ model: 'consent',
73
+ context,
74
+ });
75
+
76
+ if (!createdConsent) {
77
+ throw new Error('Failed to create consent - operation returned null');
78
+ }
79
+
80
+ return createdConsent as Consent;
81
+ },
82
+
83
+ /**
84
+ * Finds all consents matching specified filters.
85
+ * Returns consents with processed output fields according to the schema configuration.
86
+ *
87
+ * @param params - Filter parameters
88
+ * @returns Array of consents matching the criteria
89
+ */
90
+ findConsents: async (params: FindConsentsParams = {}) => {
91
+ const whereConditions: Where<'consent'> = [];
92
+
93
+ if (!params.includeInactive) {
94
+ whereConditions.push({
95
+ field: 'isActive',
96
+ value: true,
97
+ });
98
+ }
99
+
100
+ if (params.subjectId) {
101
+ whereConditions.push({
102
+ field: 'subjectId',
103
+ value: params.subjectId,
104
+ });
105
+ }
106
+
107
+ if (params.domainId) {
108
+ whereConditions.push({
109
+ field: 'domainId',
110
+ value: params.domainId,
111
+ });
112
+ }
113
+
114
+ if (params.status) {
115
+ whereConditions.push({
116
+ field: 'status',
117
+ value: params.status,
118
+ });
119
+ }
120
+
121
+ if (params.purposeIds && params.purposeIds.length > 0) {
122
+ whereConditions.push({
123
+ field: 'purposeIds',
124
+ operator: 'contains',
125
+ value: params.purposeIds,
126
+ });
127
+ }
128
+
129
+ const consents = await adapter.findMany({
130
+ model: 'consent',
131
+ where: whereConditions,
132
+ sortBy: {
133
+ field: 'givenAt',
134
+ direction: 'desc',
135
+ },
136
+ });
137
+
138
+ return consents.map((consent) =>
139
+ validateEntityOutput('consent', consent, ctx.options)
140
+ );
141
+ },
142
+
143
+ /**
144
+ * Finds a consent by its unique ID.
145
+ * Returns the consent with processed output fields according to the schema configuration.
146
+ *
147
+ * @param consentId - The unique identifier of the consent
148
+ * @returns The consent object if found, null otherwise
149
+ */
150
+ findConsentById: async (consentId: string) => {
151
+ const consent = await adapter.findOne({
152
+ model: 'consent',
153
+ where: [
154
+ {
155
+ field: 'id',
156
+ value: consentId,
157
+ },
158
+ ],
159
+ });
160
+ return consent
161
+ ? validateEntityOutput('consent', consent, ctx.options)
162
+ : null;
163
+ },
164
+
165
+ /**
166
+ * Finds all consents for a specific subject.
167
+ * Returns consents with processed output fields according to the schema configuration.
168
+ *
169
+ * @param subjectId - The subject ID to find consents for
170
+ * @returns Array of consents associated with the subject
171
+ */
172
+ findConsentsBySubjectId: async (subjectId: string) => {
173
+ const consents = await adapter.findMany({
174
+ model: 'consent',
175
+ where: [
176
+ {
177
+ field: 'subjectId',
178
+ value: subjectId,
179
+ },
180
+ ],
181
+ sortBy: {
182
+ field: 'givenAt',
183
+ direction: 'desc',
184
+ },
185
+ });
186
+ return consents.map((consent) =>
187
+ validateEntityOutput('consent', consent, ctx.options)
188
+ );
189
+ },
190
+
191
+ /**
192
+ * Finds all consents for a specific domain.
193
+ * Returns consents with processed output fields according to the schema configuration.
194
+ *
195
+ * @param domainId - The domain ID to find consents for
196
+ * @returns Array of consents associated with the domain
197
+ */
198
+ findConsentsByDomainId: async (domainId: string) => {
199
+ const consents = await adapter.findMany({
200
+ model: 'consent',
201
+ where: [
202
+ {
203
+ field: 'domainId',
204
+ value: domainId,
205
+ },
206
+ ],
207
+ sortBy: {
208
+ field: 'givenAt',
209
+ direction: 'desc',
210
+ },
211
+ });
212
+ return consents.map((consent) =>
213
+ validateEntityOutput('consent', consent, ctx.options)
214
+ );
215
+ },
216
+
217
+ /**
218
+ * Updates an existing consent record by ID.
219
+ * Applies any configured hooks during the update process and
220
+ * processes the output according to schema configuration.
221
+ *
222
+ * @param consentId - The unique identifier of the consent to update
223
+ * @param data - The fields to update on the consent record
224
+ * @param context - Optional endpoint context for hooks
225
+ * @returns The updated consent if successful, null if not found or hooks prevented update
226
+ */
227
+ updateConsent: async (
228
+ consentId: string,
229
+ data: Partial<Consent>,
230
+ context?: GenericEndpointContext
231
+ ) => {
232
+ const consent = await updateWithHooks<Consent>({
233
+ data: {
234
+ ...data,
235
+ },
236
+ where: [
237
+ {
238
+ field: 'id',
239
+ value: consentId,
240
+ },
241
+ ],
242
+ model: 'consent',
243
+ context,
244
+ });
245
+ return consent
246
+ ? validateEntityOutput('consent', consent, ctx.options)
247
+ : null;
248
+ },
249
+
250
+ /**
251
+ * Updates consent status to withdrawn.
252
+ * Also records the withdrawal reason if provided.
253
+ *
254
+ * @param consentId - The unique identifier of the consent to update
255
+ * @param withdrawalReason - Optional reason for consentWithdrawal
256
+ * @param context - Optional endpoint context for hooks
257
+ * @returns The updated consent with withdrawn status
258
+ */
259
+ updateWithdrawal: async (
260
+ consentId: string,
261
+ withdrawalReason?: string,
262
+ context?: GenericEndpointContext
263
+ ) => {
264
+ const updateData: Partial<Consent> = {
265
+ status: 'withdrawn',
266
+ };
267
+
268
+ if (withdrawalReason) {
269
+ updateData.withdrawalReason = withdrawalReason;
270
+ }
271
+
272
+ const consent = await updateWithHooks<Consent>({
273
+ data: updateData,
274
+ where: [
275
+ {
276
+ field: 'id',
277
+ value: consentId,
278
+ },
279
+ ],
280
+ model: 'consent',
281
+ context,
282
+ });
283
+
284
+ return consent
285
+ ? validateEntityOutput('consent', consent, ctx.options)
286
+ : null;
287
+ },
288
+
289
+ /**
290
+ * Revokes a consent and records the revocation details.
291
+ *
292
+ * @param params - Revocation parameters including reason and actor
293
+ * @returns The updated consent with revocation details
294
+ */
295
+ revokeConsent: async ({
296
+ consentId,
297
+ reason,
298
+ actor,
299
+ metadata,
300
+ context,
301
+ }: RevokeConsentParams) => {
302
+ const consent = await registry.findConsentById(consentId);
303
+ if (!consent) {
304
+ throw new Error('Consent not found');
305
+ }
306
+
307
+ const updateData: Partial<Consent> = {
308
+ status: 'withdrawn',
309
+ withdrawalReason: reason,
310
+ metadata: {
311
+ ...(consent.metadata as Record<string, unknown>),
312
+ consentWithdrawal: {
313
+ actor,
314
+ timestamp: new Date().toISOString(),
315
+ ...metadata,
316
+ },
317
+ },
318
+ };
319
+
320
+ return registry.updateConsent(consentId, updateData, context);
321
+ },
322
+
323
+ /**
324
+ * Gets all records associated with a consent.
325
+ *
326
+ * @param consentId - The ID of the consent
327
+ * @returns Array of records associated with the consent
328
+ */
329
+ getRecords: async (consentId: string) => {
330
+ const records = await adapter.findMany({
331
+ model: 'consentRecord',
332
+ where: [
333
+ {
334
+ field: 'consentId',
335
+ value: consentId,
336
+ },
337
+ ],
338
+ sortBy: {
339
+ field: 'createdAt',
340
+ direction: 'desc',
341
+ },
342
+ });
343
+
344
+ return records.map((record) =>
345
+ validateEntityOutput('consentRecord', record, ctx.options)
346
+ );
347
+ },
348
+
349
+ /**
350
+ * Gets all consentWithdrawals associated with a consent.
351
+ *
352
+ * @param consentId - The ID of the consent
353
+ * @returns Array of consentWithdrawals associated with the consent
354
+ */
355
+ getWithdrawals: async (consentId: string) => {
356
+ const consentWithdrawals = await adapter.findMany({
357
+ model: 'consentWithdrawal',
358
+ where: [
359
+ {
360
+ field: 'consentId',
361
+ value: consentId,
362
+ },
363
+ ],
364
+ sortBy: {
365
+ field: 'createdAt',
366
+ direction: 'desc',
367
+ },
368
+ });
369
+
370
+ return consentWithdrawals.map((consentWithdrawal) =>
371
+ validateEntityOutput(
372
+ 'consentWithdrawal',
373
+ consentWithdrawal,
374
+ ctx.options
375
+ )
376
+ );
377
+ },
378
+ };
379
+
380
+ return registry;
381
+ }
@@ -0,0 +1,65 @@
1
+ import { z } from 'zod';
2
+
3
+ /**
4
+ * Zod schema for validating consent entities.
5
+ *
6
+ * This defines the structure and validation rules for consent records:
7
+ * - Required fields: subjectId, domainId, purposeIds
8
+ * - Default value of 'active' for status
9
+ * - Default current date/time for creation timestamp
10
+ * - Includes audit trail of all changes
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const consentData = {
15
+ * id: 'cns_w5qufx2a66m7xkn3ty',
16
+ * subjectId: 'sub_x1pftyoufsm7xgo1kv',
17
+ * domainId: 'dom_x1pftyoufsm7xgo1kv',
18
+ * purposeIds: ['pur_e8zyhgozr3im7xj59it'],
19
+ * status: 'active',
20
+ * givenAt: new Date(),
21
+ * isActive: true,
22
+ * history: [
23
+ * {
24
+ * actionType: 'given',
25
+ * timestamp: new Date(),
26
+ * details: { ip: '192.168.1.1' }
27
+ * }
28
+ * ]
29
+ * };
30
+ * ```
31
+ */
32
+ export const consentHistorySchema = z.object({
33
+ actionType: z.enum(['given', 'withdrawn', 'updated', 'expired']),
34
+ timestamp: z.date(),
35
+ details: z.record(z.unknown()).optional(),
36
+ previousState: z.record(z.unknown()).optional(),
37
+ newState: z.record(z.unknown()).optional(),
38
+ });
39
+
40
+ export const consentSchema = z.object({
41
+ id: z.string(),
42
+ subjectId: z.string(),
43
+ domainId: z.string(),
44
+ purposeIds: z.array(z.string()),
45
+ metadata: z.record(z.unknown()).optional(),
46
+ policyId: z.string().optional(),
47
+ ipAddress: z.string().optional(),
48
+ userAgent: z.string().optional(),
49
+ status: z.enum(['active', 'withdrawn', 'expired']).default('active'),
50
+ withdrawalReason: z.string().optional(),
51
+ givenAt: z.date().default(() => new Date()),
52
+ validUntil: z.date().optional(),
53
+ isActive: z.boolean().default(true),
54
+ history: z.array(consentHistorySchema).default([]),
55
+ });
56
+
57
+ /**
58
+ * Type definition for Consent
59
+ *
60
+ * This type represents the structure of a consent record
61
+ * as defined by the consentSchema. It includes all fields
62
+ * that are part of the consent entity and its history.
63
+ */
64
+ export type Consent = z.infer<typeof consentSchema>;
65
+ export type ConsentHistory = z.infer<typeof consentHistorySchema>;