@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,142 @@
1
+ import type { Field } from '~/db/core/fields';
2
+ import type { C15TOptions } from '~/types';
3
+ import { consentPurposeJunctionSchema } from './schema';
4
+
5
+ /**
6
+ * Generates the database table configuration for the consent-purpose junction entity.
7
+ *
8
+ * This function creates a schema definition that implements a many-to-many relationship
9
+ * between consents and purposes. The resulting schema is used for database migrations,
10
+ * schema validation, and query building.
11
+ *
12
+ * @param options - C15T configuration options that may contain junction table customizations
13
+ * @param junctionFields - Additional fields from plugins to include in the junction table
14
+ * @returns A complete table schema definition with fields, model name, and metadata
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const junctionTableSchema = getPurposeJunctionTable(c15tOptions);
19
+ * // Use the schema for migrations or data access
20
+ * const migrationPlans = generateMigrations(junctionTableSchema);
21
+ * ```
22
+ */
23
+ export function getPurposeJunctionTable(
24
+ options: C15TOptions,
25
+ junctionFields?: Record<string, Field>
26
+ ) {
27
+ const purposeJunctionConfig = options.tables?.consentPurposeJunction;
28
+ const consentConfig = options.tables?.consent;
29
+ const purposeConfig = options.tables?.consentPurpose;
30
+
31
+ return {
32
+ /**
33
+ * The name of the junction table in the database, configurable through options
34
+ */
35
+ entityName: purposeJunctionConfig?.entityName || 'consentPurposeJunction',
36
+
37
+ /**
38
+ * The ID prefix for the consentPurpose junction table
39
+ * Used to generate unique prefixed IDs for consentPurpose junctions
40
+ */
41
+ entityPrefix: purposeJunctionConfig?.entityPrefix || 'pjx',
42
+
43
+ /**
44
+ * The schema for the consentPurpose junction table
45
+ */
46
+ schema: consentPurposeJunctionSchema,
47
+
48
+ /**
49
+ * Field definitions for the consent-purpose junction table
50
+ */
51
+ fields: {
52
+ /**
53
+ * Reference to the consent record this junction is associated with
54
+ */
55
+ consentId: {
56
+ type: 'string',
57
+ required: true,
58
+ fieldName: purposeJunctionConfig?.fields?.consentId || 'consentId',
59
+ references: {
60
+ model: consentConfig?.entityName || 'consent',
61
+ field: 'id',
62
+ },
63
+ },
64
+
65
+ /**
66
+ * Reference to the consentPurpose record this junction is associated with
67
+ */
68
+ purposeId: {
69
+ type: 'string',
70
+ required: true,
71
+ fieldName: purposeJunctionConfig?.fields?.purposeId || 'purposeId',
72
+ references: {
73
+ model: purposeConfig?.entityName || 'consentPurpose',
74
+ field: 'id',
75
+ },
76
+ },
77
+
78
+ /**
79
+ * Status of this specific consent-purpose relationship
80
+ * Default: 'active'
81
+ */
82
+ status: {
83
+ type: 'string',
84
+ defaultValue: () => 'active',
85
+ required: true,
86
+ fieldName: purposeJunctionConfig?.fields?.status || 'status',
87
+ },
88
+
89
+ /**
90
+ * Additional metadata about this specific consent-purpose relationship
91
+ */
92
+ metadata: {
93
+ type: 'json',
94
+ required: false,
95
+ fieldName: purposeJunctionConfig?.fields?.metadata || 'metadata',
96
+ },
97
+
98
+ /**
99
+ * When the junction record was created
100
+ * Automatically set to current time by default
101
+ */
102
+ createdAt: {
103
+ type: 'date',
104
+ defaultValue: () => new Date(),
105
+ required: true,
106
+ fieldName: purposeJunctionConfig?.fields?.createdAt || 'createdAt',
107
+ },
108
+
109
+ /**
110
+ * When the junction record was last updated
111
+ * Optional, set during updates
112
+ */
113
+ updatedAt: {
114
+ type: 'date',
115
+ required: false,
116
+ fieldName: purposeJunctionConfig?.fields?.updatedAt || 'updatedAt',
117
+ },
118
+
119
+ // Include additional fields from plugins
120
+ ...(junctionFields || {}),
121
+
122
+ // Include additional fields from configuration
123
+ ...(purposeJunctionConfig?.additionalFields || {}),
124
+ },
125
+
126
+ /**
127
+ * Add unique constraint to ensure a consentPurpose can only be associated with a consent once
128
+ */
129
+ uniqueConstraints: [
130
+ {
131
+ name: 'unique_consent_purpose',
132
+ fields: ['consentId', 'purposeId'],
133
+ },
134
+ ],
135
+
136
+ /**
137
+ * Execution order during migrations (lower numbers run first)
138
+ * Junction table needs to be created after the consent and consentPurpose tables it references
139
+ */
140
+ order: 4,
141
+ };
142
+ }
@@ -0,0 +1,14 @@
1
+ import type { BaseEntityConfig } from '../types';
2
+
3
+ /**
4
+ * ConsentPurpose junction entity configuration
5
+ * @default entityName: "consentPurposeJunction", entityPrefix: "pjx"
6
+ */
7
+ export interface ConsentPurposeJunctionEntityConfig extends BaseEntityConfig {
8
+ fields?: Record<string, string> & {
9
+ id?: string;
10
+ consentId?: string;
11
+ purposeId?: string;
12
+ isAccepted?: string;
13
+ };
14
+ }
@@ -0,0 +1,3 @@
1
+ export * from './registry';
2
+ export * from './schema';
3
+ export * from './table';
@@ -0,0 +1,209 @@
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 { ConsentRecord } from './schema';
6
+
7
+ /**
8
+ * Creates and returns a set of consent record-related adapter methods to interact with the database.
9
+ * These methods provide a consistent interface for creating and querying consent records
10
+ * while applying hooks and enforcing data validation rules.
11
+ *
12
+ * @param adapter - The database adapter used for direct database operations
13
+ * @param ctx - The context object containing the database adapter, hooks, and options
14
+ * @returns An object containing type-safe consent record operations
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const recordAdapter = createRecordAdapter(
19
+ * databaseAdapter,
20
+ * createWithHooks,
21
+ * c15tOptions
22
+ * );
23
+ *
24
+ * // Create a new consent record
25
+ * const record = await recordAdapter.createConsentRecord({
26
+ * subjectId: 'sub_x1pftyoufsm7xgo1kv',
27
+ * consentId: 'cns_hadt8w7nngm7xmx2bn',
28
+ * actionType: 'given',
29
+ * details: { ip: '192.168.1.1', userAgent: 'Mozilla/5.0...' }
30
+ * });
31
+ * ```
32
+ */
33
+ export function consentRecordRegistry({ adapter, ...ctx }: RegistryContext) {
34
+ const { createWithHooks } = getWithHooks(adapter, ctx);
35
+ return {
36
+ /**
37
+ * Creates a new consent record in the database.
38
+ * Automatically sets creation timestamp and applies any
39
+ * configured hooks during the creation process.
40
+ *
41
+ * @param record - Consent record data to create (without id and timestamp)
42
+ * @param context - Optional endpoint context for hooks
43
+ * @returns The created consent record with all fields populated
44
+ * @throws May throw an error if hooks prevent creation or if database operations fail
45
+ */
46
+ createConsentRecord: async (
47
+ record: Omit<ConsentRecord, 'id' | 'createdAt' | 'updatedAt'> &
48
+ Partial<ConsentRecord>,
49
+ context?: GenericEndpointContext
50
+ ) => {
51
+ const createdRecord = await createWithHooks({
52
+ data: {
53
+ createdAt: record.createdAt || new Date(),
54
+ updatedAt: record.updatedAt || new Date(),
55
+ ...record,
56
+ },
57
+ model: 'consentRecord',
58
+ customFn: undefined,
59
+ context,
60
+ });
61
+
62
+ if (!createdRecord) {
63
+ throw new Error(
64
+ 'Failed to create consent record - operation returned null'
65
+ );
66
+ }
67
+
68
+ return createdRecord as ConsentRecord;
69
+ },
70
+
71
+ /**
72
+ * Finds all consent records matching specified filters.
73
+ * Returns records with processed output fields according to the schema configuration.
74
+ *
75
+ * @param subjectId - Optional subject ID to filter records
76
+ * @param consentId - Optional consent ID to filter records
77
+ * @param actionType - Optional action type to filter records
78
+ * @param limit - Optional maximum number of records to return
79
+ * @returns Array of consent records matching the criteria
80
+ */
81
+ findConsentRecords: async (
82
+ subjectId?: string,
83
+ consentId?: string,
84
+ actionType?: string,
85
+ limit?: number
86
+ ) => {
87
+ const whereConditions: Where<'consentRecord'> = [];
88
+
89
+ if (subjectId) {
90
+ whereConditions.push({
91
+ field: 'subjectId',
92
+ value: subjectId,
93
+ });
94
+ }
95
+
96
+ if (consentId) {
97
+ whereConditions.push({
98
+ field: 'consentId',
99
+ value: consentId,
100
+ });
101
+ }
102
+
103
+ if (actionType) {
104
+ whereConditions.push({
105
+ field: 'actionType',
106
+ value: actionType,
107
+ });
108
+ }
109
+
110
+ const records = await adapter.findMany({
111
+ model: 'consentRecord',
112
+ where: whereConditions,
113
+ sortBy: {
114
+ field: 'createdAt',
115
+ direction: 'desc',
116
+ },
117
+ limit,
118
+ });
119
+
120
+ return records.map((record) =>
121
+ validateEntityOutput('consentRecord', record, ctx.options)
122
+ );
123
+ },
124
+
125
+ /**
126
+ * Finds a consent record by its unique ID.
127
+ * Returns the record with processed output fields according to the schema configuration.
128
+ *
129
+ * @param recordId - The unique identifier of the consent record
130
+ * @returns The consent record object if found, null otherwise
131
+ */
132
+ findConsentRecordById: async (recordId: string) => {
133
+ const record = await adapter.findOne({
134
+ model: 'consentRecord',
135
+ where: [
136
+ {
137
+ field: 'id',
138
+ value: recordId,
139
+ },
140
+ ],
141
+ });
142
+ return record
143
+ ? validateEntityOutput('consentRecord', record, ctx.options)
144
+ : null;
145
+ },
146
+
147
+ /**
148
+ * Finds all consent records for a specific subject.
149
+ * Returns records with processed output fields according to the schema configuration.
150
+ *
151
+ * @param subjectId - The subject ID to find consent records for
152
+ * @param limit - Optional maximum number of records to return
153
+ * @returns Array of consent records associated with the subject
154
+ */
155
+ findConsentRecordsBySubjectId: async (
156
+ subjectId: string,
157
+ limit?: number
158
+ ) => {
159
+ const records = await adapter.findMany({
160
+ model: 'consentRecord',
161
+ where: [
162
+ {
163
+ field: 'subjectId',
164
+ value: subjectId,
165
+ },
166
+ ],
167
+ sortBy: {
168
+ field: 'createdAt',
169
+ direction: 'desc',
170
+ },
171
+ limit,
172
+ });
173
+ return records.map((record) =>
174
+ validateEntityOutput('consentRecord', record, ctx.options)
175
+ );
176
+ },
177
+
178
+ /**
179
+ * Finds all consent records for a specific consent.
180
+ * Returns records with processed output fields according to the schema configuration.
181
+ *
182
+ * @param consentId - The consent ID to find records for
183
+ * @param limit - Optional maximum number of records to return
184
+ * @returns Array of consent records associated with the consent
185
+ */
186
+ findConsentRecordsByConsentId: async (
187
+ consentId: string,
188
+ limit?: number
189
+ ) => {
190
+ const records = await adapter.findMany({
191
+ model: 'consentRecord',
192
+ where: [
193
+ {
194
+ field: 'consentId',
195
+ value: consentId,
196
+ },
197
+ ],
198
+ sortBy: {
199
+ field: 'createdAt',
200
+ direction: 'desc',
201
+ },
202
+ limit,
203
+ });
204
+ return records.map((record) =>
205
+ validateEntityOutput('consentRecord', record, ctx.options)
206
+ );
207
+ },
208
+ };
209
+ }
@@ -0,0 +1,42 @@
1
+ import { z } from 'zod';
2
+
3
+ /**
4
+ * Zod schema for validating consent record entities.
5
+ *
6
+ * This defines the structure and validation rules for consent records:
7
+ * - Required fields: subjectId, actionType (given, withdrawn, updated, etc.)
8
+ * - Optional fields: consentId, details
9
+ * - Default current date/time for creation and update timestamps
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const recordData = {
14
+ * id: 'rec_w5qufx2a66m7xkn3ty',
15
+ * subjectId: 'sub_x1pftyoufsm7xgo1kv',
16
+ * consentId: 'cns_hadt8w7nngm7xmx2bn',
17
+ * actionType: 'given',
18
+ * details: { ip: '192.168.1.1', userAgent: 'Mozilla/5.0...' }
19
+ * };
20
+ *
21
+ * // Validate and parse the record data
22
+ * const validRecord = consentRecordSchema.parse(recordData);
23
+ * ```
24
+ */
25
+ export const consentRecordSchema = z.object({
26
+ id: z.string(),
27
+ subjectId: z.string(),
28
+ consentId: z.string().optional(),
29
+ actionType: z.string(),
30
+ details: z.record(z.unknown()).optional(),
31
+ createdAt: z.date().default(() => new Date()),
32
+ updatedAt: z.date().default(() => new Date()),
33
+ });
34
+
35
+ /**
36
+ * Type definition for Record
37
+ *
38
+ * This type represents the structure of a consent record
39
+ * as defined by the consentRecordSchema. It includes all fields
40
+ * that are part of the consent record entity.
41
+ */
42
+ export type ConsentRecord = z.infer<typeof consentRecordSchema>;
@@ -0,0 +1,124 @@
1
+ import type { Field } from '~/db/core/fields';
2
+ import type { C15TOptions } from '~/types';
3
+ import { consentRecordSchema } from './schema';
4
+
5
+ /**
6
+ * Generates the database table configuration for the consent record entity.
7
+ *
8
+ * This function creates a schema definition that includes all standard consent record 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 consent record table customizations
13
+ * @param recordFields - Additional fields from plugins to include in the consent record table
14
+ * @returns A complete table schema definition with fields, model name, and metadata
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const recordTableSchema = getConsentRecordTable(c15tOptions);
19
+ * // Use the schema for migrations or data access
20
+ * const migrationPlans = generateMigrations(recordTableSchema);
21
+ * ```
22
+ */
23
+ export function getConsentRecordTable(
24
+ options: C15TOptions,
25
+ recordFields?: Record<string, Field>
26
+ ) {
27
+ // Get record config, supporting both the new tables.record and legacy record format
28
+ const recordConfig = options.tables?.record;
29
+ const subjectConfig = options.tables?.subject;
30
+ const consentConfig = options.tables?.consent;
31
+
32
+ return {
33
+ /**
34
+ * The name of the consent record table in the database, configurable through options
35
+ */
36
+ entityName: recordConfig?.entityName || 'consentRecord',
37
+
38
+ /**
39
+ * The ID prefix for the consent record table
40
+ * Used to generate unique prefixed IDs for records
41
+ */
42
+ entityPrefix: recordConfig?.entityPrefix || 'rec',
43
+
44
+ /**
45
+ * The schema for the consent record table
46
+ */
47
+ schema: consentRecordSchema,
48
+
49
+ /**
50
+ * Field definitions for the consent record table
51
+ */
52
+ fields: {
53
+ /**
54
+ * Reference to the subject associated with this consent record
55
+ */
56
+ subjectId: {
57
+ type: 'string',
58
+ required: true,
59
+ fieldName: recordConfig?.fields?.subjectId || 'subjectId',
60
+ references: {
61
+ model: subjectConfig?.entityName || 'subject',
62
+ field: 'id',
63
+ },
64
+ },
65
+
66
+ /**
67
+ * Optional reference to the specific consent this record is about
68
+ * May be null for general consent actions not related to a specific consent
69
+ */
70
+ consentId: {
71
+ type: 'string',
72
+ required: false,
73
+ fieldName: recordConfig?.fields?.consentId || 'consentId',
74
+ references: {
75
+ model: consentConfig?.entityName || 'consent',
76
+ field: 'id',
77
+ },
78
+ },
79
+
80
+ /**
81
+ * Type of consent action this record represents
82
+ * Common values: 'given', 'withdrawn', 'updated', 'expired', 'requested'
83
+ */
84
+ actionType: {
85
+ type: 'string',
86
+ required: true,
87
+ fieldName: recordConfig?.fields?.actionType || 'actionType',
88
+ },
89
+
90
+ /**
91
+ * Additional details about the consent action
92
+ * May include IP address, subject agent, reason for withdrawal, etc.
93
+ */
94
+ details: {
95
+ type: 'json',
96
+ required: false,
97
+ fieldName: recordConfig?.fields?.details || 'details',
98
+ },
99
+
100
+ /**
101
+ * When the consent record was created
102
+ * Automatically set to current time by default
103
+ */
104
+ createdAt: {
105
+ type: 'date',
106
+ defaultValue: () => new Date(),
107
+ required: true,
108
+ fieldName: recordConfig?.fields?.createdAt || 'createdAt',
109
+ },
110
+
111
+ // Include additional fields from plugins
112
+ ...(recordFields || {}),
113
+
114
+ // Include additional fields from configuration
115
+ ...(recordConfig?.additionalFields || {}),
116
+ },
117
+
118
+ /**
119
+ * Execution order during migrations (lower numbers run first)
120
+ * Consent record table needs to be created after the subject and consent tables it references
121
+ */
122
+ order: 4,
123
+ };
124
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Record Entity Type Definitions
3
+ *
4
+ * This module contains type definitions specific to the record entity.
5
+ */
6
+ import type { BaseEntityConfig } from '../types';
7
+
8
+ /**
9
+ * Record entity configuration
10
+ * @default entityName: "record", entityPrefix: "rec"
11
+ */
12
+ export interface ConsentRecordEntityConfig extends BaseEntityConfig {
13
+ fields?: Record<string, string> & {
14
+ id?: string;
15
+ subjectId?: string;
16
+ consentId?: string;
17
+ actionType?: string;
18
+ details?: string;
19
+ createdAt?: string;
20
+ };
21
+ }
@@ -0,0 +1,3 @@
1
+ export * from './registry';
2
+ export * from './schema';
3
+ export * from './table';