@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,188 @@
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 { ConsentPurpose } from './schema';
6
+
7
+ /**
8
+ * Creates and returns a set of consent consentPurpose-related adapter methods to interact with the database.
9
+ * These methods provide a consistent interface for creating, finding, and updating
10
+ * consent consentPurpose records 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 consentPurpose operations
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const purposeAdapter = createConsentPurposeAdapter(
19
+ * databaseAdapter,
20
+ * createWithHooks,
21
+ * updateWithHooks,
22
+ * c15tOptions
23
+ * );
24
+ *
25
+ * // Create a new consent consentPurpose
26
+ * const consentPurpose = await purposeAdapter.createConsentPurpose({
27
+ * code: 'pur_e8zyhgozr3im7xj59it',
28
+ * name: 'Marketing Communications',
29
+ * description: 'Allow us to send you marketing materials',
30
+ * isEssential: false
31
+ * });
32
+ * ```
33
+ */
34
+ export function consentPurposeRegistry({ adapter, ...ctx }: RegistryContext) {
35
+ const { createWithHooks, updateWithHooks } = getWithHooks(adapter, ctx);
36
+ return {
37
+ /**
38
+ * Creates a new consent consentPurpose record in the database.
39
+ * Automatically sets creation and update timestamps and applies any
40
+ * configured hooks during the creation process.
41
+ *
42
+ * @param consentPurpose - ConsentPurpose data to create (without id and timestamps)
43
+ * @param context - Optional endpoint context for hooks
44
+ * @returns The created consentPurpose with all fields populated
45
+ * @throws May throw an error if hooks prevent creation or if database operations fail
46
+ */
47
+ createConsentPurpose: async (
48
+ consentPurpose: Omit<ConsentPurpose, 'id' | 'createdAt' | 'updatedAt'> &
49
+ Partial<ConsentPurpose>,
50
+ context?: GenericEndpointContext
51
+ ) => {
52
+ const createdPurpose = await createWithHooks({
53
+ data: {
54
+ id: consentPurpose.id || '',
55
+ createdAt: new Date(),
56
+ updatedAt: new Date(),
57
+ ...consentPurpose,
58
+ },
59
+ model: 'consentPurpose',
60
+ context,
61
+ });
62
+
63
+ if (!createdPurpose) {
64
+ throw new Error(
65
+ 'Failed to create consent consentPurpose - operation returned null'
66
+ );
67
+ }
68
+
69
+ return validateEntityOutput(
70
+ 'consentPurpose',
71
+ createdPurpose,
72
+ ctx.options
73
+ );
74
+ },
75
+
76
+ /**
77
+ * Finds all consent purposes, optionally including inactive ones.
78
+ * Returns purposes with processed output fields according to the schema configuration.
79
+ *
80
+ * @param includeInactive - Whether to include inactive purposes (default: false)
81
+ * @returns Array of consent purposes matching the criteria
82
+ */
83
+ findConsentPurposes: async (includeInactive?: boolean) => {
84
+ const whereConditions: Where<'consentPurpose'> = [];
85
+
86
+ if (!includeInactive) {
87
+ whereConditions.push({
88
+ field: 'isActive',
89
+ value: true,
90
+ });
91
+ }
92
+
93
+ const purposes = await adapter.findMany({
94
+ model: 'consentPurpose',
95
+ where: whereConditions,
96
+ sortBy: {
97
+ field: 'createdAt',
98
+ direction: 'asc',
99
+ },
100
+ });
101
+
102
+ return purposes.map((consentPurpose) =>
103
+ validateEntityOutput('consentPurpose', consentPurpose, ctx.options)
104
+ );
105
+ },
106
+
107
+ /**
108
+ * Finds a consent consentPurpose by its unique ID.
109
+ * Returns the consentPurpose with processed output fields according to the schema configuration.
110
+ *
111
+ * @param purposeId - The unique identifier of the consentPurpose
112
+ * @returns The consentPurpose object if found, null otherwise
113
+ */
114
+ findConsentPurposeById: async (purposeId: string) => {
115
+ const consentPurpose = await adapter.findOne({
116
+ model: 'consentPurpose',
117
+ where: [
118
+ {
119
+ field: 'id',
120
+ value: purposeId,
121
+ },
122
+ ],
123
+ });
124
+ return consentPurpose
125
+ ? validateEntityOutput('consentPurpose', consentPurpose, ctx.options)
126
+ : null;
127
+ },
128
+
129
+ /**
130
+ * Finds a consent consentPurpose by its unique code.
131
+ * Returns the consentPurpose with processed output fields according to the schema configuration.
132
+ *
133
+ * @param code - The unique code of the consentPurpose
134
+ * @returns The consentPurpose object if found, null otherwise
135
+ */
136
+ findConsentPurposeByCode: async (code: string) => {
137
+ const consentPurpose = await adapter.findOne({
138
+ model: 'consentPurpose',
139
+ where: [
140
+ {
141
+ field: 'code',
142
+ value: code,
143
+ },
144
+ ],
145
+ });
146
+ return consentPurpose
147
+ ? validateEntityOutput('consentPurpose', consentPurpose, ctx.options)
148
+ : null;
149
+ },
150
+
151
+ /**
152
+ *
153
+ /**
154
+ *
155
+ * Updates an existing consent consentPurpose record by ID.
156
+ * Applies any configured hooks during the update process and
157
+ * processes the output according to schema configuration.
158
+ *
159
+ * @param purposeId - The unique identifier of the consentPurpose to update
160
+ * @param data - The fields to update on the consentPurpose record
161
+ * @param context - Optional endpoint context for hooks
162
+ * @returns The updated consentPurpose if successful, null if not found or hooks prevented update
163
+ */
164
+ updateConsentPurpose: async (
165
+ purposeId: string,
166
+ data: Partial<ConsentPurpose>,
167
+ context?: GenericEndpointContext
168
+ ) => {
169
+ const consentPurpose = await updateWithHooks({
170
+ data: {
171
+ ...data,
172
+ updatedAt: new Date(),
173
+ },
174
+ where: [
175
+ {
176
+ field: 'id',
177
+ value: purposeId,
178
+ },
179
+ ],
180
+ model: 'consentPurpose',
181
+ context,
182
+ });
183
+ return consentPurpose
184
+ ? validateEntityOutput('consentPurpose', consentPurpose, ctx.options)
185
+ : null;
186
+ },
187
+ };
188
+ }
@@ -0,0 +1,58 @@
1
+ import { z } from 'zod';
2
+
3
+ /**
4
+ * Zod schema for validating consent consentPurpose entities.
5
+ *
6
+ * This defines the structure and validation rules for consent consentPurpose records:
7
+ * - Required fields: code, name, description
8
+ * - Default value of false for isEssential
9
+ * - Default value of true for isActive
10
+ * - Optional fields for dataCategory and legalBasis
11
+ * - Default current date/time for creation and update timestamps
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const purposeData = {
16
+ * id: 'pur_e8zyhgozr3im7xj59it',
17
+ * code: 'marketing',
18
+ * name: 'Marketing Communications',
19
+ * description: 'Allow us to send you marketing materials',
20
+ * isEssential: false
21
+ * };
22
+ *
23
+ * // Validate and parse the consentPurpose data
24
+ * const validPurpose = purposeSchema.parse(purposeData);
25
+ *
26
+ * // Example with missing fields (defaults will be applied)
27
+ * const minimalPurposeData = {
28
+ * id: 'pur_e8zyhgozr3im7xj59it',
29
+ * code: 'marketing',
30
+ * name: 'Marketing Communications',
31
+ * description: 'Allow us to send you marketing materials',
32
+ * };
33
+ *
34
+ * // isEssential will default to false, isActive to true, etc.
35
+ * const purposeWithDefaults = purposeSchema.parse(minimalPurposeData);
36
+ * ```
37
+ */
38
+ export const purposeSchema = z.object({
39
+ id: z.string(),
40
+ code: z.string(),
41
+ name: z.string(),
42
+ description: z.string(),
43
+ isEssential: z.boolean().default(false),
44
+ dataCategory: z.string().optional(),
45
+ legalBasis: z.string().optional(),
46
+ isActive: z.boolean().default(true),
47
+ createdAt: z.date().default(() => new Date()),
48
+ updatedAt: z.date().default(() => new Date()),
49
+ });
50
+
51
+ /**
52
+ * Type definition for ConsentPurpose
53
+ *
54
+ * This type represents the structure of a consent consentPurpose record
55
+ * as defined by the purposeSchema. It includes all fields
56
+ * that are part of the consent consentPurpose entity.
57
+ */
58
+ export type ConsentPurpose = z.infer<typeof purposeSchema>;
@@ -0,0 +1,154 @@
1
+ import type { Field } from '~/db/core/fields';
2
+ import type { C15TOptions } from '~/types';
3
+ import { purposeSchema } from './schema';
4
+
5
+ /**
6
+ * Generates the database table configuration for the consent consentPurpose entity.
7
+ *
8
+ * This function creates a schema definition that includes all standard consent consentPurpose 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 consentPurpose table customizations
13
+ * @param purposeFields - Additional fields from plugins to include in the consentPurpose table
14
+ * @returns A complete table schema definition with fields, model name, and metadata
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const purposeTableSchema = getPurposeTable(c15tOptions);
19
+ * // Use the schema for migrations or data access
20
+ * const migrationPlans = generateMigrations(purposeTableSchema);
21
+ * ```
22
+ */
23
+ export function getPurposeTable(
24
+ options: C15TOptions,
25
+ purposeFields?: Record<string, Field>
26
+ ) {
27
+ const purposeConfig = options.tables?.consentPurpose;
28
+
29
+ return {
30
+ /**
31
+ * The name of the consentPurpose table in the database, configurable through options
32
+ */
33
+ entityName: purposeConfig?.entityName || 'consentPurpose',
34
+
35
+ /**
36
+ * The ID prefix for the consentPurpose table
37
+ * Used to generate unique prefixed IDs for purposes
38
+ */
39
+ entityPrefix: purposeConfig?.entityPrefix || 'pur',
40
+
41
+ /**
42
+ * The schema for the consentPurpose table
43
+ */
44
+ schema: purposeSchema,
45
+
46
+ /**
47
+ * Field definitions for the consent consentPurpose table
48
+ */
49
+ fields: {
50
+ /**
51
+ * Unique code for the consentPurpose, used for programmatic identification
52
+ */
53
+ code: {
54
+ type: 'string',
55
+ required: true,
56
+ fieldName: purposeConfig?.fields?.code || 'code',
57
+ },
58
+
59
+ /**
60
+ * Human-readable name of the consentPurpose
61
+ */
62
+ name: {
63
+ type: 'string',
64
+ required: true,
65
+ fieldName: purposeConfig?.fields?.name || 'name',
66
+ },
67
+
68
+ /**
69
+ * Detailed description of the consentPurpose, shown to subjects
70
+ */
71
+ description: {
72
+ type: 'string',
73
+ required: true,
74
+ fieldName: purposeConfig?.fields?.description || 'description',
75
+ },
76
+
77
+ /**
78
+ * Whether this is an essential consentPurpose that doesn't require explicit consent
79
+ * Default: false
80
+ */
81
+ isEssential: {
82
+ type: 'boolean',
83
+ defaultValue: () => false,
84
+ required: true,
85
+ fieldName: purposeConfig?.fields?.isEssential || 'isEssential',
86
+ },
87
+
88
+ /**
89
+ * Category of data this consentPurpose processes (e.g., 'personal', 'profile')
90
+ * Optional field
91
+ */
92
+ dataCategory: {
93
+ type: 'string',
94
+ required: false,
95
+ fieldName: purposeConfig?.fields?.dataCategory || 'dataCategory',
96
+ },
97
+
98
+ /**
99
+ * Legal basis for data processing (e.g., 'consent', 'legitimate interest')
100
+ * Optional field
101
+ */
102
+ legalBasis: {
103
+ type: 'string',
104
+ required: false,
105
+ fieldName: purposeConfig?.fields?.legalBasis || 'legalBasis',
106
+ },
107
+
108
+ /**
109
+ * Whether this consentPurpose is currently active
110
+ * Default: true
111
+ */
112
+ isActive: {
113
+ type: 'boolean',
114
+ defaultValue: true,
115
+ required: true,
116
+ fieldName: purposeConfig?.fields?.isActive || 'isActive',
117
+ },
118
+
119
+ /**
120
+ * When the consentPurpose record was created
121
+ * Automatically set to current time by default
122
+ */
123
+ createdAt: {
124
+ type: 'date',
125
+ defaultValue: () => new Date(),
126
+ required: true,
127
+ fieldName: purposeConfig?.fields?.createdAt || 'createdAt',
128
+ },
129
+
130
+ /**
131
+ * When the consentPurpose record was last updated
132
+ * Automatically updated on each modification
133
+ */
134
+ updatedAt: {
135
+ type: 'date',
136
+ defaultValue: () => new Date(),
137
+ required: true,
138
+ fieldName: purposeConfig?.fields?.updatedAt || 'updatedAt',
139
+ },
140
+
141
+ // Include additional fields from plugins
142
+ ...(purposeFields || {}),
143
+
144
+ // Include additional fields from configuration
145
+ ...(purposeConfig?.additionalFields || {}),
146
+ },
147
+
148
+ /**
149
+ * Execution order during migrations (lower numbers run first)
150
+ * ConsentPurpose table needs to be created relatively early as other tables reference it
151
+ */
152
+ order: 1,
153
+ };
154
+ }
@@ -0,0 +1,16 @@
1
+ import type { ActiveEntityConfig } from '../types';
2
+
3
+ /**
4
+ * ConsentPurpose entity configuration
5
+ * @default entityName: "consentPurpose", entityPrefix: "pur"
6
+ */
7
+ export interface ConsentPurposeEntityConfig extends ActiveEntityConfig {
8
+ fields?: Record<string, string> & {
9
+ id?: string;
10
+ name?: string;
11
+ description?: string;
12
+ isActive?: string;
13
+ createdAt?: string;
14
+ updatedAt?: string;
15
+ };
16
+ }
@@ -0,0 +1,3 @@
1
+ export * from './registry';
2
+ export * from './schema';
3
+ export * from './table';
@@ -0,0 +1,189 @@
1
+ import type { GenericEndpointContext, RegistryContext } from '~/types';
2
+ import type { PurposeJunction } from './schema';
3
+
4
+ import { getWithHooks } from '~/db/hooks';
5
+ import { validateEntityOutput } from '../definition';
6
+
7
+ /**
8
+ * Creates and returns a set of consent-purpose junction adapter methods to interact with the database.
9
+ * These methods provide a consistent interface for creating, finding, and managing
10
+ * relationships between consents and purposes 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-purpose junction operations
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const junctionAdapter = createConsentPurposeJunctionAdapter(
19
+ * databaseAdapter,
20
+ * createWithHooks,
21
+ * updateWithHooks,
22
+ * c15tOptions
23
+ * );
24
+ *
25
+ * // Create a new junction record
26
+ * const junction = await junctionAdapter.createConsentPurposeJunction({
27
+ * consentId: 'cns_hadt8w7nngm7xmx2bn',
28
+ * purposeId: 'pol_tioiyf19tbkm7xn5vpx',
29
+ * status: 'active'
30
+ * });
31
+ * ```
32
+ */
33
+ export function consentPurposeJunctionRegistry({
34
+ adapter,
35
+ ...ctx
36
+ }: RegistryContext) {
37
+ const { createWithHooks, updateWithHooks } = getWithHooks(adapter, ctx);
38
+ return {
39
+ /**
40
+ * Creates a new consent-purpose junction record in the database.
41
+ * Automatically sets creation timestamp and applies any
42
+ * configured hooks during the creation process.
43
+ *
44
+ * @param junction - Junction data to create (without id and timestamp)
45
+ * @param context - Optional endpoint context for hooks
46
+ * @returns The created junction record with all fields populated
47
+ * @throws May throw an error if hooks prevent creation or if database operations fail
48
+ */
49
+ createConsentPurposeJunction: async (
50
+ junction: Omit<PurposeJunction, 'id' | 'createdAt' | 'status'> &
51
+ Partial<PurposeJunction>,
52
+ context?: GenericEndpointContext
53
+ ) => {
54
+ const createdJunction = await createWithHooks({
55
+ data: {
56
+ createdAt: new Date(),
57
+
58
+ ...junction,
59
+ status: 'active',
60
+ },
61
+ model: 'consentPurposeJunction',
62
+ customFn: undefined,
63
+ context,
64
+ });
65
+
66
+ if (!createdJunction) {
67
+ throw new Error(
68
+ 'Failed to create consent-purpose junction - operation returned null'
69
+ );
70
+ }
71
+
72
+ return createdJunction as PurposeJunction;
73
+ },
74
+
75
+ /**
76
+ * Finds all junction records for a specific consent.
77
+ * Returns junctions with processed output fields according to the schema configuration.
78
+ *
79
+ * @param consentId - The consent ID to find purposes for
80
+ * @returns Array of junction records associated with the consent
81
+ */
82
+ findConsentPurposesByConsentId: async (consentId: string) => {
83
+ const junctions = await adapter.findMany({
84
+ model: 'consentPurposeJunction',
85
+ where: [
86
+ {
87
+ field: 'consentId',
88
+ value: consentId,
89
+ },
90
+ ],
91
+ sortBy: {
92
+ field: 'createdAt',
93
+ direction: 'desc',
94
+ },
95
+ });
96
+
97
+ return junctions.map((junction) =>
98
+ validateEntityOutput('consentPurposeJunction', junction, ctx.options)
99
+ );
100
+ },
101
+
102
+ /**
103
+ * Finds all junction records for a specific consentPurpose.
104
+ * Returns junctions with processed output fields according to the schema configuration.
105
+ *
106
+ * @param purposeId - The consentPurpose ID to find consents for
107
+ * @returns Array of junction records associated with the consentPurpose
108
+ */
109
+ findConsentPurposesByPurposeId: async (purposeId: string) => {
110
+ const junctions = await adapter.findMany({
111
+ model: 'consentPurposeJunction',
112
+ where: [
113
+ {
114
+ field: 'purposeId',
115
+ value: purposeId,
116
+ },
117
+ ],
118
+ sortBy: {
119
+ field: 'createdAt',
120
+ direction: 'desc',
121
+ },
122
+ });
123
+
124
+ return junctions.map((junction) =>
125
+ validateEntityOutput('consentPurposeJunction', junction, ctx.options)
126
+ );
127
+ },
128
+
129
+ /**
130
+ * Updates a junction record's status.
131
+ * Applies any configured hooks during the update process and
132
+ * processes the output according to schema configuration.
133
+ *
134
+ * @param junctionId - The unique identifier of the junction to update
135
+ * @param status - The new status value ('active' or 'withdrawn')
136
+ * @param context - Optional endpoint context for hooks
137
+ * @returns The updated junction if successful, null if not found or hooks prevented update
138
+ */
139
+ updateConsentPurposeJunction: async (
140
+ junctionId: string,
141
+ status: 'active' | 'withdrawn',
142
+ context?: GenericEndpointContext
143
+ ) => {
144
+ const junction = await updateWithHooks({
145
+ data: {
146
+ status,
147
+ updatedAt: new Date(),
148
+ },
149
+ where: [
150
+ {
151
+ field: 'id',
152
+ value: junctionId,
153
+ },
154
+ ],
155
+ model: 'consentPurposeJunction',
156
+ customFn: undefined,
157
+ context,
158
+ });
159
+ return junction
160
+ ? validateEntityOutput('consentPurposeJunction', junction, ctx.options)
161
+ : null;
162
+ },
163
+
164
+ /**
165
+ * Deletes all junction records for a specific consent.
166
+ * This effectively removes all consentPurpose connections for the consent.
167
+ *
168
+ * @param consentId - The ID of the consent to remove all consentPurpose connections for
169
+ * @returns True if successful, false otherwise
170
+ */
171
+ deleteConsentPurposeJunctionsByConsentId: async (consentId: string) => {
172
+ try {
173
+ await adapter.deleteMany({
174
+ model: 'consentPurposeJunction',
175
+ where: [
176
+ {
177
+ field: 'consentId',
178
+ value: consentId,
179
+ },
180
+ ],
181
+ });
182
+ return true;
183
+ } catch (error) {
184
+ ctx.logger.error('Error deleting consent-purpose junctions:', error);
185
+ return false;
186
+ }
187
+ },
188
+ };
189
+ }
@@ -0,0 +1,49 @@
1
+ import { z } from 'zod';
2
+
3
+ /**
4
+ * Zod schema for validating consent-purpose junction entities.
5
+ *
6
+ * This defines the structure and validation rules for junction records:
7
+ * - Required fields: consentId, purposeId
8
+ * - Default value of 'active' for status
9
+ * - Default current date/time for creation and update timestamps
10
+ * - Default current date/time for update timestamp
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const junctionData = {
15
+ * id: 'pjx_w5qufx2a66m7xkn3ty',
16
+ * consentId: 'cns_hadt8w7nngm7xmx2bn',
17
+ * purposeId: 'pur_e8zyhgozr3im7xj59it',
18
+ * status: 'active'
19
+ * };
20
+ *
21
+ * // Validate and parse the junction data
22
+ * const validJunction = consentPurposeJunctionSchema.parse(junctionData);
23
+ * ```
24
+ */
25
+ export const consentPurposeJunctionSchema = z.object({
26
+ id: z.string(),
27
+ consentId: z.string(),
28
+ consentPurposeId: z.string(),
29
+ status: z
30
+ .enum(['active', 'withdrawn'], {
31
+ errorMap: () => ({
32
+ message: "Status must be either 'active' or 'withdrawn'",
33
+ }),
34
+ })
35
+ .default('active'),
36
+
37
+ metadata: z.record(z.union([z.string(), z.number(), z.boolean()])).optional(),
38
+ createdAt: z.date().default(() => new Date()),
39
+ updatedAt: z.date().default(() => new Date()),
40
+ });
41
+
42
+ /**
43
+ * Type definition for PurposeJunction
44
+ *
45
+ * This type represents the structure of a consent-purpose junction record
46
+ * as defined by the consentPurposeJunctionSchema. It includes all fields
47
+ * that are part of the junction entity.
48
+ */
49
+ export type PurposeJunction = z.infer<typeof consentPurposeJunctionSchema>;