@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,36 @@
1
+ import { beforeEach, describe, expect, it } from 'vitest';
2
+ import { createMockContext } from '~/test/utils';
3
+ import type { C15TContext } from '~/types';
4
+ import { status } from '../status';
5
+
6
+ describe('Status Endpoint', () => {
7
+ let mockContext: C15TContext;
8
+
9
+ beforeEach(() => {
10
+ mockContext = createMockContext();
11
+ });
12
+
13
+ it('should return status response', async () => {
14
+ const response = await status({
15
+ context: mockContext,
16
+ params: undefined,
17
+ query: undefined,
18
+ body: undefined,
19
+ });
20
+
21
+ expect(response.status).toBe('ok');
22
+ });
23
+
24
+ it('should include version in context', async () => {
25
+ const response = await status({
26
+ context: mockContext,
27
+ params: undefined,
28
+ query: undefined,
29
+ body: undefined,
30
+ });
31
+
32
+ expect(response.status).toBe('ok');
33
+ expect(response.version).toBeDefined();
34
+ expect(typeof response.version).toBe('string');
35
+ });
36
+ });
@@ -0,0 +1,130 @@
1
+ import { HIDE_METADATA } from '~/utils/hide-metadata';
2
+ import { createAuthEndpoint } from '../call';
3
+
4
+ function sanitize(input: string): string {
5
+ return input
6
+ .replace(/&/g, '&')
7
+ .replace(/</g, '&lt;')
8
+ .replace(/>/g, '&gt;')
9
+ .replace(/"/g, '&quot;')
10
+ .replace(/'/g, '&#39;');
11
+ }
12
+
13
+ const html = (errorCode = 'Unknown') => `<!DOCTYPE html>
14
+ <html lang="en">
15
+ <head>
16
+ <meta charset="UTF-8">
17
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
18
+ <title>Authentication Error</title>
19
+ <style>
20
+ :root {
21
+ --bg-color: #f8f9fa;
22
+ --text-color: #212529;
23
+ --accent-color: #000000;
24
+ --error-color: #dc3545;
25
+ --border-color: #e9ecef;
26
+ }
27
+ body {
28
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
29
+ background-color: var(--bg-color);
30
+ color: var(--text-color);
31
+ display: flex;
32
+ justify-content: center;
33
+ align-items: center;
34
+ height: 100vh;
35
+ margin: 0;
36
+ line-height: 1.5;
37
+ }
38
+ .error-container {
39
+ background-color: #ffffff;
40
+ border-radius: 12px;
41
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
42
+ padding: 2.5rem;
43
+ text-align: center;
44
+ max-width: 90%;
45
+ width: 400px;
46
+ }
47
+ h1 {
48
+ color: var(--error-color);
49
+ font-size: 1.75rem;
50
+ margin-bottom: 1rem;
51
+ font-weight: 600;
52
+ }
53
+ p {
54
+ margin-bottom: 1.5rem;
55
+ color: #495057;
56
+ }
57
+ .btn {
58
+ background-color: var(--accent-color);
59
+ color: #ffffff;
60
+ text-decoration: none;
61
+ padding: 0.75rem 1.5rem;
62
+ border-radius: 6px;
63
+ transition: all 0.3s ease;
64
+ display: inline-block;
65
+ font-weight: 500;
66
+ border: 2px solid var(--accent-color);
67
+ }
68
+ .btn:hover {
69
+ background-color: #131721;
70
+ }
71
+ .error-code {
72
+ font-size: 0.875rem;
73
+ color: #6c757d;
74
+ margin-top: 1.5rem;
75
+ padding-top: 1.5rem;
76
+ border-top: 1px solid var(--border-color);
77
+ }
78
+ .icon {
79
+ font-size: 3rem;
80
+ margin-bottom: 1rem;
81
+ }
82
+ </style>
83
+ </head>
84
+ <body>
85
+ <div class="error-container">
86
+ <div class="icon">⚠️</div>
87
+ <h1>C15T Error</h1>
88
+ <p>We encountered an issue while processing your request. Please try again or contact the application owner if the problem persists.</p>
89
+ <a href="/" id="returnLink" class="btn">Return to Application</a>
90
+ <div class="error-code">Error Code: <span id="errorCode">${sanitize(
91
+ errorCode
92
+ )}</span></div>
93
+ </div>
94
+ </body>
95
+ </html>`;
96
+
97
+ export const error = createAuthEndpoint(
98
+ '/error',
99
+ {
100
+ method: 'GET',
101
+ metadata: {
102
+ ...HIDE_METADATA,
103
+ openapi: {
104
+ description: 'Displays an error page',
105
+ responses: {
106
+ '400': {
107
+ description: 'Error page displayed',
108
+ content: {
109
+ 'text/html': {
110
+ schema: {
111
+ type: 'string',
112
+ },
113
+ },
114
+ },
115
+ },
116
+ },
117
+ },
118
+ },
119
+ },
120
+ async (c) => {
121
+ const query =
122
+ new URL(c.request?.url || '').searchParams.get('error') || 'Unknown';
123
+ return new Response(html(query), {
124
+ status: 400,
125
+ headers: {
126
+ 'Content-Type': 'text/html',
127
+ },
128
+ });
129
+ }
130
+ );
@@ -0,0 +1,244 @@
1
+ import crypto from 'node:crypto';
2
+ import { z } from 'zod';
3
+ import type { ConsentRecord } from '~/db/schema/consent-record/schema';
4
+ import { BASE_ERROR_CODES, C15TError } from '~/error';
5
+ import type { C15TContext } from '../../types';
6
+ import { createAuthEndpoint } from '../call';
7
+
8
+ // Define the schema for validating request parameters
9
+ const generateConsentReceiptSchema = z.object({
10
+ consentId: z.string(),
11
+ includeSignature: z.boolean().default(true),
12
+ });
13
+
14
+ /**
15
+ * Endpoint for generating a standardized consent receipt.
16
+ *
17
+ * This endpoint generates a detailed receipt document that provides formal proof of consent,
18
+ * following industry standards for consent documentation. The receipt includes comprehensive
19
+ * information about who gave consent, what they consented to, and all metadata associated
20
+ * with the consent event.
21
+ *
22
+ * Optionally, the receipt can include a cryptographic signature for verification purposes.
23
+ *
24
+ * @endpoint GET /consent/receipt
25
+ */
26
+ export const generateConsentReceipt = createAuthEndpoint(
27
+ '/consent/receipt',
28
+ {
29
+ method: 'GET',
30
+ query: generateConsentReceiptSchema,
31
+ },
32
+ async (ctx) => {
33
+ try {
34
+ const validatedData = generateConsentReceiptSchema.safeParse(ctx.query);
35
+
36
+ if (!validatedData.success) {
37
+ throw new C15TError(
38
+ 'The request parameters are invalid. Please ensure all required fields are correctly filled and formatted.',
39
+ {
40
+ code: BASE_ERROR_CODES.BAD_REQUEST,
41
+ status: 400,
42
+ data: {
43
+ details: validatedData.error.errors,
44
+ },
45
+ }
46
+ );
47
+ }
48
+
49
+ const params = validatedData.data;
50
+ const { registry } = ctx.context as C15TContext;
51
+
52
+ if (!registry) {
53
+ throw new C15TError(
54
+ 'The registry service is currently unavailable. Please check the service status and try again later.',
55
+ {
56
+ code: BASE_ERROR_CODES.INITIALIZATION_FAILED,
57
+ status: 503,
58
+ }
59
+ );
60
+ }
61
+
62
+ // Get the consent record with related information
63
+ const consentResult = await registry.findConsentById(params.consentId);
64
+ //@ts-expect-error
65
+ if (!consentResult || !consentResult.consent) {
66
+ throw new C15TError(
67
+ 'The specified consent record could not be found. Please verify the consent ID and try again.',
68
+ {
69
+ code: BASE_ERROR_CODES.CONSENT_NOT_FOUND,
70
+ status: 404,
71
+ data: {
72
+ consentId: params.consentId,
73
+ },
74
+ }
75
+ );
76
+ }
77
+ //@ts-expect-error
78
+ const record = consentResult.consent;
79
+ //@ts-expect-error
80
+ const subjectRecord = consentResult.subject;
81
+
82
+ if (!subjectRecord) {
83
+ throw new C15TError(
84
+ 'The subject associated with this consent record could not be found. Please verify the subject exists and is correctly linked.',
85
+ {
86
+ code: BASE_ERROR_CODES.NOT_FOUND,
87
+ status: 404,
88
+ data: {
89
+ consentId: params.consentId,
90
+ },
91
+ }
92
+ );
93
+ }
94
+
95
+ // Get consent records related to this consent
96
+ let records: ConsentRecord[] = [];
97
+
98
+ try {
99
+ if (registry.getRecords) {
100
+ //@ts-expect-error
101
+ records = await registry.getRecords(consentResult.consent.id);
102
+ }
103
+ } catch (error) {
104
+ // Log error but continue processing
105
+ if (ctx.context?.logger) {
106
+ ctx.context.logger.error(
107
+ `Error retrieving records for consent ${params.consentId}:`,
108
+ error
109
+ );
110
+ }
111
+ }
112
+
113
+ // Get domain information
114
+ const domain = {
115
+ id: record.domainId,
116
+ domain: record.domainId,
117
+ name: `Domain for ${record.domainId}`,
118
+ };
119
+
120
+ // Generate a unique receipt ID
121
+ const receiptId = `CR${Date.now().toString().slice(-7)}${Math.floor(Math.random() * 1000)}`;
122
+
123
+ // Map consent preferences to services and purposes
124
+ const services = Object.entries(record.preferences || {}).map(
125
+ ([key, value]) => {
126
+ // Convert key to a more readable service name
127
+ const serviceName = key.charAt(0).toUpperCase() + key.slice(1);
128
+
129
+ return {
130
+ service: serviceName,
131
+ purposes: [
132
+ {
133
+ consentPurpose: key,
134
+ purposeDescription: `${value ? 'Enabled' : 'Disabled'} ${key} tracking and functionality`,
135
+ consentType: 'EXPLICIT',
136
+ purposeCategory: [serviceName],
137
+ termination: record.policyId
138
+ ? `As specified in policy ${record.policyId}`
139
+ : 'Until consent is withdrawn',
140
+ thirdPartyDisclosure: false,
141
+ },
142
+ ],
143
+ };
144
+ }
145
+ );
146
+
147
+ // Extract metadata from consent records
148
+ const metadata = {
149
+ deviceInfo:
150
+ //@ts-expect-error
151
+ records.length > 0 && records[0]?.recordMetadata?.deviceInfo
152
+ ? //@ts-expect-error
153
+ records[0].recordMetadata.deviceInfo
154
+ : 'Not recorded',
155
+ ipAddress: record.ipAddress || 'Not recorded',
156
+ policyId: record.policyId,
157
+ ...record.metadata,
158
+ };
159
+
160
+ // Create the receipt object
161
+ const receipt = {
162
+ version: '1.0.0',
163
+ jurisdiction: 'GDPR', // Default to GDPR
164
+ consentTimestamp: record.givenAt || new Date(),
165
+ collectionMethod:
166
+ //@ts-expect-error
167
+ records.length > 0 && records[0]?.recordTypeDetail
168
+ ? //@ts-expect-error
169
+ records[0].recordTypeDetail
170
+ : 'API',
171
+ consentReceiptID: receiptId,
172
+ publicKey: process.env.CONSENT_RECEIPT_PUBLIC_KEY || 'not-configured',
173
+ subject: {
174
+ id: subjectRecord.id,
175
+ idType: 'UUID',
176
+ },
177
+ dataController: {
178
+ id: domain.domain,
179
+ name: domain.name || domain.domain,
180
+ on_behalf: [],
181
+ },
182
+ policyURL: `https://${domain.domain}/privacy`,
183
+ services,
184
+ sensitive: false,
185
+ spiCat: [],
186
+ metadata,
187
+ };
188
+
189
+ // Add signature if requested
190
+ if (params.includeSignature) {
191
+ // Create a hash of the receipt data as a signature
192
+ const receiptString = JSON.stringify(receipt);
193
+ const signature = crypto
194
+ .createHash('sha256')
195
+ .update(receiptString)
196
+ .digest('hex');
197
+
198
+ //@ts-expect-error
199
+ receipt.signature = signature;
200
+ }
201
+
202
+ // Return the completed receipt
203
+ return {
204
+ success: true,
205
+ data: {
206
+ receipt,
207
+ receiptId,
208
+ timestamp: new Date().toISOString(),
209
+ },
210
+ };
211
+ } catch (error) {
212
+ const context = ctx.context as C15TContext;
213
+ context.logger?.error?.('Error generating consent receipt:', error);
214
+
215
+ if (error instanceof C15TError) {
216
+ throw error;
217
+ }
218
+ if (error instanceof z.ZodError) {
219
+ throw new C15TError(
220
+ 'The request parameters are invalid. Please ensure all required fields are correctly filled and formatted.',
221
+ {
222
+ code: BASE_ERROR_CODES.BAD_REQUEST,
223
+ status: 400,
224
+ data: {
225
+ details: error.errors,
226
+ },
227
+ }
228
+ );
229
+ }
230
+
231
+ throw new C15TError(
232
+ 'Failed to generate consent receipt. Please try again later or contact support if the issue persists.',
233
+ {
234
+ code: BASE_ERROR_CODES.INTERNAL_SERVER_ERROR,
235
+ status: 500,
236
+ data: {
237
+ details:
238
+ error instanceof Error ? { message: error.message } : { error },
239
+ },
240
+ }
241
+ );
242
+ }
243
+ }
244
+ );
@@ -0,0 +1,128 @@
1
+ import { z } from 'zod';
2
+ import type { EntityOutputFields } from '~/db/schema/definition';
3
+ import { logger } from '~/utils';
4
+ import { APIError } from '..';
5
+ import { createAuthEndpoint } from '../call';
6
+
7
+ // Define the schema for validating request parameters
8
+ const getConsentHistorySchema = z.object({
9
+ subjectId: z.string(),
10
+ domain: z.string().optional(),
11
+ limit: z.coerce.number().int().positive().max(1000).default(100),
12
+ offset: z.coerce.number().int().min(0).default(0),
13
+ });
14
+
15
+ /**
16
+ * Endpoint for retrieving a subject's complete consent history.
17
+ *
18
+ * This endpoint returns comprehensive information about a subject's consent records,
19
+ * including all consent entries, withdrawals, related evidence records, and audit logs.
20
+ * It supports optional domain filtering and pagination to manage large result sets.
21
+ *
22
+ * @endpoint GET /consent/history
23
+ */
24
+ export const getConsentHistory = createAuthEndpoint(
25
+ '/consent/history',
26
+ {
27
+ method: 'GET',
28
+ query: getConsentHistorySchema,
29
+ },
30
+ async (ctx) => {
31
+ try {
32
+ const params = getConsentHistorySchema.parse(ctx.query);
33
+ const { registry } = ctx.context;
34
+
35
+ if (!registry) {
36
+ throw new APIError('INTERNAL_SERVER_ERROR', {
37
+ message: 'Registry not available',
38
+ status: 503,
39
+ });
40
+ }
41
+
42
+ let subjectConsents = await registry.findConsents({
43
+ subjectId: params.subjectId,
44
+ });
45
+ if (params.domain) {
46
+ subjectConsents = subjectConsents.filter(
47
+ (consent) => consent.domainId === params.domain
48
+ );
49
+ }
50
+
51
+ // Sort consents by givenAt date
52
+ subjectConsents.sort((a, b) => b.givenAt.getTime() - a.givenAt.getTime());
53
+
54
+ // Apply pagination
55
+ const start = params.offset;
56
+ const end = start + params.limit;
57
+ const paginatedConsents = subjectConsents.slice(start, end);
58
+
59
+ // Process each consent to include withdrawals and records
60
+ const processedConsents = await Promise.all(
61
+ paginatedConsents.map(async (consent) => {
62
+ const consentWithdrawals = await registry.getWithdrawals(consent.id);
63
+ const records = await registry.getRecords(consent.id);
64
+
65
+ return {
66
+ id: consent.id,
67
+ domainId: consent.domainId,
68
+ status: consent.status as string,
69
+ givenAt: consent.givenAt.toISOString(),
70
+ consentWithdrawals: consentWithdrawals.map((consentWithdrawal) => ({
71
+ id: consentWithdrawal.id,
72
+ createdAt: consentWithdrawal.createdAt.toISOString(),
73
+ reason: consentWithdrawal.withdrawalReason,
74
+ method: consentWithdrawal.withdrawalMethod,
75
+ actor:
76
+ (consentWithdrawal.metadata as Record<string, unknown>)
77
+ ?.actor || 'system',
78
+ metadata: consentWithdrawal.metadata,
79
+ })),
80
+ consentRecords: records.map(
81
+ (record: EntityOutputFields<'consentRecord'>) => ({
82
+ id: record.id,
83
+ createdAt: record.createdAt.toISOString(),
84
+ type: record.actionType,
85
+ details: record.id,
86
+ })
87
+ ),
88
+ };
89
+ })
90
+ );
91
+
92
+ // Get audit logs if available
93
+ let auditLogs: Array<{
94
+ id: string;
95
+ createdAt: string;
96
+ actionType: string;
97
+ details: Record<string, unknown>;
98
+ }> = [];
99
+ if ('findAuditLogs' in registry) {
100
+ const logs = await registry.findAuditLogs(params.subjectId);
101
+ auditLogs = logs.map((log: EntityOutputFields<'auditLog'>) => ({
102
+ id: log.id,
103
+ createdAt: log.createdAt.toISOString(),
104
+ actionType: log.actionType as string,
105
+ details: log.changes as Record<string, unknown>,
106
+ }));
107
+ }
108
+
109
+ const response = {
110
+ success: true,
111
+ data: {
112
+ consents: processedConsents,
113
+ auditLogs,
114
+ pagination: {
115
+ total: subjectConsents.length,
116
+ offset: params.offset,
117
+ limit: params.limit,
118
+ },
119
+ },
120
+ };
121
+
122
+ return response;
123
+ } catch (error) {
124
+ logger.error('Error getting consent history:', error);
125
+ throw error;
126
+ }
127
+ }
128
+ );