@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,148 @@
1
+ import type { Field } from '~/db/core/fields';
2
+ import type { C15TOptions } from '~/types';
3
+ import { geoLocationSchema } from './schema';
4
+
5
+ /**
6
+ * Generates the database table configuration for the geo-location entity.
7
+ *
8
+ * This function creates a schema definition that includes all standard geo-location 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 geo-location table customizations
13
+ * @param geoLocationFields - Additional fields from plugins to include in the geo-location table
14
+ * @returns A complete table schema definition with fields, model name, and metadata
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const locationTableSchema = getGeoLocationTable(c15tOptions);
19
+ * // Use the schema for migrations or data access
20
+ * const migrationPlans = generateMigrations(locationTableSchema);
21
+ * ```
22
+ */
23
+ export function getGeoLocationTable(
24
+ options: C15TOptions,
25
+ geoLocationFields?: Record<string, Field>
26
+ ) {
27
+ const geoLocationConfig = options.tables?.geoLocation;
28
+ return {
29
+ /**
30
+ * The name of the geo-location table in the database, configurable through options
31
+ */
32
+ entityName: geoLocationConfig?.entityName || 'geoLocation',
33
+
34
+ /**
35
+ * The ID prefix for the geo-location table
36
+ * Used to generate unique prefixed IDs for geo-locations
37
+ */
38
+ entityPrefix: geoLocationConfig?.entityPrefix || 'geo',
39
+
40
+ /**
41
+ * The schema for the geo-location table
42
+ */
43
+ schema: geoLocationSchema,
44
+
45
+ /**
46
+ * Field definitions for the geo-location table
47
+ */
48
+ fields: {
49
+ /**
50
+ * Country code (e.g., 'US', 'DE', 'FR')
51
+ */
52
+ countryCode: {
53
+ type: 'string',
54
+ required: true,
55
+ fieldName: geoLocationConfig?.fields?.countryCode || 'countryCode',
56
+ },
57
+
58
+ /**
59
+ * Full country name (e.g., 'United States', 'Germany', 'France')
60
+ */
61
+ countryName: {
62
+ type: 'string',
63
+ required: true,
64
+ fieldName: geoLocationConfig?.fields?.countryName || 'countryName',
65
+ },
66
+
67
+ /**
68
+ * Region or state code (e.g., 'CA', 'NY', 'BY')
69
+ */
70
+ regionCode: {
71
+ type: 'string',
72
+ required: false,
73
+ fieldName: geoLocationConfig?.fields?.regionCode || 'regionCode',
74
+ },
75
+
76
+ /**
77
+ * Full region or state name (e.g., 'California', 'New York', 'Bavaria')
78
+ */
79
+ regionName: {
80
+ type: 'string',
81
+ required: false,
82
+ fieldName: geoLocationConfig?.fields?.regionName || 'regionName',
83
+ },
84
+
85
+ /**
86
+ * Array of regulatory zones that apply to this location (e.g., 'GDPR', 'CCPA')
87
+ * Stored as a JSON string in the database
88
+ */
89
+ regulatoryZones: {
90
+ type: 'json',
91
+ required: false,
92
+ fieldName:
93
+ geoLocationConfig?.fields?.regulatoryZones || 'regulatoryZones',
94
+ transformer: {
95
+ input: (value: string[]) => JSON.stringify(value),
96
+ output: (value: string) => {
97
+ try {
98
+ return JSON.parse(value);
99
+ } catch {
100
+ return [];
101
+ }
102
+ },
103
+ },
104
+ },
105
+
106
+ /**
107
+ * When the geo-location record was created
108
+ * Automatically set to current time by default
109
+ */
110
+ createdAt: {
111
+ type: 'date',
112
+ defaultValue: () => new Date(),
113
+ required: true,
114
+ fieldName: geoLocationConfig?.fields?.createdAt || 'createdAt',
115
+ },
116
+
117
+ // Include additional fields from plugins
118
+ ...(geoLocationFields || {}),
119
+
120
+ // Include additional fields from configuration
121
+ ...(geoLocationConfig?.additionalFields || {}),
122
+ },
123
+
124
+ /**
125
+ * Add indexes for better query performance
126
+ */
127
+ indexes: [
128
+ {
129
+ name: 'country_code_index',
130
+ fields: ['countryCode'],
131
+ },
132
+ {
133
+ name: 'region_code_index',
134
+ fields: ['regionCode'],
135
+ },
136
+ {
137
+ name: 'created_at_index',
138
+ fields: ['createdAt'],
139
+ },
140
+ ],
141
+
142
+ /**
143
+ * Execution order during migrations (lower numbers run first)
144
+ * Geo-location is a base entity that doesn't depend on other tables
145
+ */
146
+ order: 1,
147
+ };
148
+ }
@@ -0,0 +1,18 @@
1
+ import type { BaseEntityConfig } from '../types';
2
+
3
+ /**
4
+ * Geo location entity configuration
5
+ * @default entityName: "geoLocation", entityPrefix: "geo"
6
+ */
7
+ export interface GeoLocationEntityConfig extends BaseEntityConfig {
8
+ fields?: Record<string, string> & {
9
+ id?: string;
10
+ countryCode?: string;
11
+ countryName?: string;
12
+ regionCode?: string;
13
+ regionName?: string;
14
+ // For comma-separated values
15
+ regulatoryZones?: string;
16
+ createdAt?: string;
17
+ };
18
+ }
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Schema Module for c15t Consent Management System
3
+ *
4
+ * This module serves as the central hub for database schema definitions, validation,
5
+ * and transformation utilities used throughout the c15t system. It defines the structure
6
+ * of all database tables and provides tools to work with schema-compliant data.
7
+ *
8
+ * @remarks
9
+ * The Schema Module is organized into three main components:
10
+ *
11
+ * 1. Table Definitions - Individual table schemas (subject, consent, consentPurpose, etc.)
12
+ * 2. Schema Utilities - Functions for retrieving and working with the complete schema
13
+ * 3. Data Parsing - Validation and transformation of input/output data
14
+ *
15
+ * These components work together to provide a type-safe, consistent interface for
16
+ * interacting with the database, regardless of which database adapter is used.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * import {
21
+ * getConsentTables,
22
+ * parseInputData,
23
+ * type C15TDBSchema
24
+ * } from '@c15t/core/db/schema';
25
+ *
26
+ * // Get the complete schema
27
+ * const tables = getConsentTables(options);
28
+ *
29
+ * // Validate input data against the subject table schema
30
+ * const validSubjectData = parseInputData(
31
+ * inputData,
32
+ * { fields: tables.subject.fields }
33
+ * );
34
+ * ```
35
+ */
36
+
37
+ // Table Definition Exports
38
+ /**
39
+ * Table definitions for core c15t entities
40
+ *
41
+ * These exports provide the schema definitions for each table in the c15t database.
42
+ * Each table definition includes field specifications, relationships, and metadata.
43
+ */
44
+ export * from './audit-log';
45
+ export * from './consent-geo-location';
46
+ export * from './consent-policy';
47
+ export * from './consent-purpose-junction';
48
+ export * from './consent-purpose';
49
+ export * from './consent-record';
50
+ export * from './consent-withdrawal';
51
+ export * from './consent';
52
+ export * from './domain';
53
+ export * from './geo-location';
54
+ export * from './subject';
55
+
56
+ // Schema Type Exports
57
+ /**
58
+ * Type definitions for database schema configuration
59
+ *
60
+ * These exports provide interfaces for configuring database entities
61
+ * and are used throughout the application for type-safe schema definition.
62
+ *
63
+ * @see {@link BaseEntityConfig} - Base configuration for all entities
64
+ * @see {@link TablesConfig} - Configuration for all database tables
65
+ */
66
+ export * from './types';
67
+
68
+ // Schema Utility Exports
69
+ /**
70
+ * Schema utilities for working with the complete database schema
71
+ *
72
+ * These exports provide functions for retrieving the complete schema and
73
+ * working with table definitions at a higher level.
74
+ *
75
+ * @see {@link getConsentTables} - Main function to get the complete schema
76
+ * @see {@link C15TDBSchema} - Type representing the complete database schema
77
+ */
78
+ export { getConsentTables, type C15TDBSchema } from './definition';
79
+
80
+ // Data Parsing Exports
81
+ /**
82
+ * Data parsing and validation utilities
83
+ *
84
+ * These exports provide functions for validating and transforming data
85
+ * according to the schema definitions. They ensure type safety and data integrity
86
+ * when working with database records.
87
+ *
88
+ * @see {@link parseInputData} - Validates input data against a table schema
89
+ * @see {@link parseEntityOutputData} - Validates output data against a table schema
90
+ * @see {@link getAllFields} - Retrieves all fields from a schema
91
+ */
92
+ export {
93
+ parseInputData,
94
+ parseEntityOutputData,
95
+ getAllFields,
96
+ } from './parser';
@@ -0,0 +1,417 @@
1
+ import { BASE_ERROR_CODES, C15TError } from '~/error';
2
+ import type { C15TOptions, C15TPluginSchema } from '~/types';
3
+ import type { Field } from '../core/fields';
4
+
5
+ /**
6
+ * Parses and transforms output data according to schema field definitions.
7
+ *
8
+ * This function filters and processes entity data being returned from the database,
9
+ * ensuring that only fields marked as returnable are included in the output.
10
+ *
11
+ * @typeParam EntityType - The type of entity being processed
12
+ *
13
+ * @param data - The raw data object retrieved from the database
14
+ * @param schema - The schema containing field definitions
15
+ * @param schema.fields - Record of field definitions for the entity
16
+ *
17
+ * @returns The processed data object with appropriate fields included or excluded
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * // Get subject data from database
22
+ * const subjectData = { id: 'sub_x1pftyoufsm7xgo1kv', };
23
+ *
24
+ * // Define schema with password field marked as not returnable
25
+ * const subjectSchema = {
26
+ * fields: {
27
+ * id: { name: 'id', type: 'string', returned: true },
28
+ * }
29
+ * };
30
+ *
31
+ * // Process the data - password will be excluded
32
+ * const processedData = parseEntityOutputData(subjectData, subjectSchema);
33
+ * // Result: { id: 'sub_x1pftyoufsm7xgo1kv',}
34
+ * ```
35
+ *
36
+ * @remarks
37
+ * - Fields marked with `returned: false` will be excluded from the output
38
+ * - Fields not found in the schema will be passed through unchanged
39
+ * - The function preserves the original type of the input data
40
+ */
41
+ export function parseEntityOutputData<
42
+ EntityType extends Record<string, unknown>,
43
+ >(
44
+ data: EntityType,
45
+ schema: {
46
+ fields: Record<string, Field>;
47
+ }
48
+ ) {
49
+ const fields = schema.fields;
50
+ const parsedData: Record<string, unknown> = {};
51
+
52
+ for (const key in data) {
53
+ if (Object.hasOwn(data, key)) {
54
+ const field = fields[key];
55
+ if (!field) {
56
+ parsedData[key] = data[key];
57
+ continue;
58
+ }
59
+ if (field.returned === false) {
60
+ continue;
61
+ }
62
+ parsedData[key] = data[key];
63
+ }
64
+ }
65
+ return parsedData as EntityType;
66
+ }
67
+
68
+ /**
69
+ * Type representing a field conflict resolution strategy
70
+ */
71
+ export type FieldConflictResolution = {
72
+ /**
73
+ * How to handle conflicting field definitions
74
+ * - 'error': Throw an error when conflicts are detected
75
+ * - 'warn': Log a warning and use the last definition
76
+ * - 'silent': Silently use the last definition
77
+ */
78
+ strategy: 'error' | 'warn' | 'silent';
79
+
80
+ /**
81
+ * Optional callback for logging warnings
82
+ * Only used when strategy is 'warn'
83
+ */
84
+ onWarning?: (message: string) => void;
85
+ };
86
+
87
+ /**
88
+ * Retrieves all fields for a specific table, combining base configuration and plugin fields
89
+ *
90
+ * @param options - The C15T configuration options
91
+ * @param table - The table name to get fields for
92
+ * @param conflictResolution - How to handle conflicting field definitions
93
+ * @returns Combined fields from configuration and plugins
94
+ *
95
+ * @throws {C15TError} When field conflicts are detected and strategy is 'error'
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * // Get fields with conflict resolution
100
+ * const fields = getAllFields(options, 'subject', {
101
+ * strategy: 'warn',
102
+ * onWarning: (msg) => console.warn(msg)
103
+ * });
104
+ * ```
105
+ */
106
+ export function getAllFields(
107
+ options: C15TOptions,
108
+ table: string,
109
+ conflictResolution: FieldConflictResolution = { strategy: 'error' }
110
+ ) {
111
+ const schema: Record<string, Field> = {};
112
+ const fieldOrigins = new Map<string, string[]>();
113
+
114
+ // Helper to track field origins and handle conflicts
115
+ const addFields = (fields: Record<string, Field>, source: string) => {
116
+ for (const [key, field] of Object.entries(fields)) {
117
+ if (schema[key]) {
118
+ const origins = fieldOrigins.get(key) || [];
119
+ origins.push(source);
120
+ fieldOrigins.set(key, origins);
121
+
122
+ // Handle conflict based on strategy
123
+ if (conflictResolution.strategy === 'error') {
124
+ throw new C15TError(
125
+ 'A field conflict was detected in the schema. Multiple definitions exist for the same field.',
126
+ {
127
+ code: BASE_ERROR_CODES.CONFLICT,
128
+ status: 500,
129
+ data: {
130
+ field: key,
131
+ table,
132
+ definedIn: origins.join(', '),
133
+ },
134
+ }
135
+ );
136
+ }
137
+ if (
138
+ conflictResolution.strategy === 'warn' &&
139
+ conflictResolution.onWarning
140
+ ) {
141
+ conflictResolution.onWarning(
142
+ `Field conflict detected for '${key}' in table '${table}'. Using last definition from ${source}.`
143
+ );
144
+ }
145
+ }
146
+ schema[key] = field;
147
+ }
148
+ };
149
+
150
+ // Get additional fields from the tables configuration if available
151
+ if (options.tables && table in options.tables) {
152
+ const tableConfig = options.tables[table as keyof typeof options.tables];
153
+ if (tableConfig?.additionalFields) {
154
+ addFields(tableConfig.additionalFields, 'table configuration');
155
+ }
156
+ }
157
+
158
+ // Add fields from plugins
159
+ for (const plugin of options.plugins || []) {
160
+ const pluginSchema = plugin.schema as C15TPluginSchema | undefined;
161
+ if (pluginSchema?.[table]) {
162
+ addFields(
163
+ pluginSchema[table].fields,
164
+ `plugin: ${plugin.name || 'unnamed'}`
165
+ );
166
+ }
167
+ }
168
+
169
+ return schema;
170
+ }
171
+
172
+ /**
173
+ * Configuration for handling extra fields in input data
174
+ */
175
+ export type ExtraFieldsConfig = {
176
+ /**
177
+ * How to handle fields not defined in the schema
178
+ * - 'error': Throw an error when extra fields are detected
179
+ * - 'warn': Log a warning and include the fields
180
+ * - 'silent': Silently include the fields
181
+ * - 'drop': Silently drop the fields
182
+ */
183
+ strategy: 'error' | 'warn' | 'silent' | 'drop';
184
+
185
+ /**
186
+ * Optional callback for logging warnings
187
+ * Only used when strategy is 'warn'
188
+ */
189
+ onWarning?: (message: string) => void;
190
+
191
+ /**
192
+ * Optional list of field names that are always allowed
193
+ * regardless of schema definition
194
+ */
195
+ allowedExtraFields?: string[];
196
+ };
197
+
198
+ /**
199
+ * Parses and validates input data according to schema field definitions.
200
+ *
201
+ * This function processes data being sent to the database, ensuring it meets
202
+ * schema requirements by:
203
+ * - Validating required fields
204
+ * - Applying transformations
205
+ * - Setting default values
206
+ * - Handling field-specific validation
207
+ *
208
+ * @typeParam EntityType - The type of entity being processed
209
+ *
210
+ * @param data - The input data to validate and transform
211
+ * @param schema - The schema to validate against
212
+ * @param schema.fields - Record of field definitions
213
+ * @param schema.action - The current operation ('create' or 'update')
214
+ * @param extraFieldsConfig - How to handle fields not defined in the schema
215
+ *
216
+ * @returns The validated and transformed data
217
+ *
218
+ * @throws {C15TError} When a required field is missing during creation
219
+ * @throws {C15TError} When extra fields are detected and strategy is 'error'
220
+ *
221
+ * @example
222
+ * ```typescript
223
+ * // Input data from client
224
+ * const inputData = {
225
+ * email: 'subject@example.com',
226
+ * role: 'subject',
227
+ * extraField: 'value' // Field not in schema
228
+ * };
229
+ *
230
+ * // Schema with field definitions
231
+ * const subjectSchema = {
232
+ * fields: {
233
+ * id: {
234
+ * name: 'id',
235
+ * type: 'string',
236
+ * defaultValue: () => crypto.randomUUID()
237
+ * },
238
+ * email: {
239
+ * name: 'email',
240
+ * type: 'string',
241
+ * required: true,
242
+ * transform: {
243
+ * input: (value) => value.toLowerCase()
244
+ * }
245
+ * },
246
+ * role: {
247
+ * name: 'role',
248
+ * type: 'string',
249
+ * defaultValue: 'subject'
250
+ * },
251
+ * createdAt: {
252
+ * name: 'created_at',
253
+ * type: 'date',
254
+ * defaultValue: () => new Date(),
255
+ * input: false
256
+ * }
257
+ * },
258
+ * action: 'create'
259
+ * };
260
+ *
261
+ * // Process the data with extra fields config
262
+ * const validatedData = parseInputData(inputData, subjectSchema, {
263
+ * strategy: 'warn',
264
+ * onWarning: (msg) => console.warn(msg),
265
+ * allowedExtraFields: ['metadata']
266
+ * });
267
+ * ```
268
+ *
269
+ * @remarks
270
+ * - During 'create' operations, required fields must be present or an error is thrown
271
+ * - Default values are only applied during 'create' operations
272
+ * - Fields marked with `input: false` are excluded unless they have a default value
273
+ * - The function handles both modern transform functions and legacy validators
274
+ */
275
+ export function parseInputData<EntityType extends Record<string, unknown>>(
276
+ data: EntityType,
277
+ schema: {
278
+ fields: Record<string, Field>;
279
+ action?: 'create' | 'update';
280
+ },
281
+ extraFieldsConfig: ExtraFieldsConfig = { strategy: 'error' }
282
+ ) {
283
+ const action = schema.action || 'create';
284
+ const fields = schema.fields;
285
+ const parsedData: Record<string, unknown> = {};
286
+
287
+ // Track extra fields for potential errors/warnings
288
+ const extraFields = new Set<string>();
289
+
290
+ // Process schema-defined fields
291
+ for (const key in fields) {
292
+ if (Object.hasOwn(fields, key)) {
293
+ if (key in data) {
294
+ if (fields[key]?.input === false) {
295
+ if (fields[key]?.defaultValue) {
296
+ parsedData[key] = fields[key]?.defaultValue;
297
+ continue;
298
+ }
299
+ continue;
300
+ }
301
+ // Check if validator exists and is an object with input property (old style)
302
+ function isLegacyValidator(
303
+ validator: unknown
304
+ ): validator is { input?: { parse: (value: unknown) => unknown } } {
305
+ return (
306
+ typeof validator === 'object' &&
307
+ validator !== null &&
308
+ 'input' in validator
309
+ );
310
+ }
311
+
312
+ if (
313
+ fields[key]?.validator &&
314
+ isLegacyValidator(fields[key]?.validator) &&
315
+ fields[key]?.validator.input &&
316
+ data[key] !== undefined
317
+ ) {
318
+ parsedData[key] = fields[key]?.validator.input.parse(data[key]);
319
+ continue;
320
+ }
321
+ if (fields[key]?.transform?.input && data[key] !== undefined) {
322
+ const inputValue = data[key] as
323
+ | string
324
+ | number
325
+ | boolean
326
+ | Date
327
+ | string[]
328
+ | number[];
329
+ parsedData[key] = fields[key]?.transform?.input(inputValue);
330
+ continue;
331
+ }
332
+ parsedData[key] = data[key];
333
+ continue;
334
+ }
335
+
336
+ if (fields[key]?.defaultValue && action === 'create') {
337
+ parsedData[key] = fields[key]?.defaultValue;
338
+ continue;
339
+ }
340
+
341
+ if (fields[key]?.required && action === 'create') {
342
+ throw new C15TError('Missing required field', {
343
+ code: BASE_ERROR_CODES.BAD_REQUEST,
344
+ status: 400,
345
+ data: {
346
+ message: `${key} is required`,
347
+ },
348
+ });
349
+ }
350
+ }
351
+ }
352
+
353
+ // Handle extra fields
354
+ for (const key in data) {
355
+ if (Object.hasOwn(data, key) && !(key in fields)) {
356
+ extraFields.add(key);
357
+ }
358
+ }
359
+
360
+ // Process extra fields based on configuration
361
+ if (extraFields.size > 0) {
362
+ const allowedFields = new Set(extraFieldsConfig.allowedExtraFields || []);
363
+ const unallowedFields = Array.from(extraFields).filter(
364
+ (field) => !allowedFields.has(field)
365
+ );
366
+
367
+ if (unallowedFields.length > 0) {
368
+ switch (extraFieldsConfig.strategy) {
369
+ case 'error':
370
+ throw new C15TError('Unexpected fields found', {
371
+ code: BASE_ERROR_CODES.BAD_REQUEST,
372
+ status: 400,
373
+ data: {
374
+ message: `Unexpected fields found: ${unallowedFields.join(', ')}`,
375
+ },
376
+ });
377
+ case 'warn': {
378
+ if (extraFieldsConfig.onWarning) {
379
+ extraFieldsConfig.onWarning(
380
+ `Unexpected fields found: ${unallowedFields.join(', ')}`
381
+ );
382
+ }
383
+ // Include all extra fields
384
+ for (const key of extraFields) {
385
+ parsedData[key] = data[key];
386
+ }
387
+ break;
388
+ }
389
+ case 'silent':
390
+ // Include all extra fields
391
+ for (const key of extraFields) {
392
+ parsedData[key] = data[key];
393
+ }
394
+ break;
395
+ case 'drop':
396
+ // Fields are already dropped, no action needed
397
+ break;
398
+ default:
399
+ // Default to error strategy for type safety
400
+ throw new C15TError('Unexpected fields found', {
401
+ code: BASE_ERROR_CODES.BAD_REQUEST,
402
+ status: 400,
403
+ data: {
404
+ message: `Unexpected fields found: ${unallowedFields.join(', ')}`,
405
+ },
406
+ });
407
+ }
408
+ } else {
409
+ // Include allowed extra fields
410
+ for (const key of extraFields) {
411
+ parsedData[key] = data[key];
412
+ }
413
+ }
414
+ }
415
+
416
+ return parsedData as Partial<EntityType>;
417
+ }
@@ -0,0 +1,35 @@
1
+ import type { z } from 'zod';
2
+ import {
3
+ auditLogSchema,
4
+ consentGeoLocationSchema,
5
+ consentPolicySchema,
6
+ consentPurposeJunctionSchema,
7
+ consentRecordSchema,
8
+ consentSchema,
9
+ consentWithdrawalSchema,
10
+ domainSchema,
11
+ geoLocationSchema,
12
+ purposeSchema,
13
+ subjectSchema,
14
+ } from './index';
15
+
16
+ // Export all schemas
17
+ export const schemas = {
18
+ auditLog: auditLogSchema,
19
+ consent: consentSchema,
20
+ consentGeoLocation: consentGeoLocationSchema,
21
+ consentPolicy: consentPolicySchema,
22
+ consentPurpose: purposeSchema,
23
+ consentPurposeJunction: consentPurposeJunctionSchema,
24
+ consentRecord: consentRecordSchema,
25
+ consentWithdrawal: consentWithdrawalSchema,
26
+ domain: domainSchema,
27
+ geoLocation: geoLocationSchema,
28
+ subject: subjectSchema,
29
+ } as const;
30
+
31
+ // Type for all table names
32
+ export type TableName = keyof typeof schemas;
33
+
34
+ // Type for inferring the shape of any table
35
+ export type InferTableShape<T extends TableName> = z.infer<(typeof schemas)[T]>;