@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,57 @@
1
+ /**
2
+ * Custom ID generation system for C15T entities
3
+ *
4
+ * Provides prefixed, time-ordered, unique identifiers for all system entities.
5
+ * Each entity type has a specific prefix to make IDs self-descriptive about
6
+ * their origin and purpose.
7
+ */
8
+ import baseX from 'base-x';
9
+
10
+ /**
11
+ * Base-58 encoder for generating short, URL-friendly identifiers
12
+ * Uses a character set that avoids visually ambiguous characters.
13
+ */
14
+ const b58 = baseX('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');
15
+
16
+ /**
17
+ * Generates a unique ID with the specified prefix
18
+ *
19
+ * Creates time-ordered, prefixed, base58-encoded identifiers that:
20
+ * - Start with the provided prefix for clear identification
21
+ * - Embed a timestamp for chronological ordering
22
+ * - Include random data for uniqueness
23
+ *
24
+ * @param prefix - The prefix to use for the ID
25
+ * @returns A unique, prefixed identifier
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const subjectId = generateId("sub"); // "sub_3hK4G..."
30
+ * const consentId = generateId("cns"); // "cns_5RtX9..."
31
+ * ```
32
+ */
33
+ export function generateId(prefix: string): string {
34
+ const buf = crypto.getRandomValues(new Uint8Array(20));
35
+
36
+ /**
37
+ * Epoch starts more recently to extend timestamp lifetime.
38
+ * From 2023-11-14T22:13:20.000Z (1700000000000) to ~2159.
39
+ */
40
+ const EPOCH_TIMESTAMP = 1_700_000_000_000;
41
+
42
+ const t = Date.now() - EPOCH_TIMESTAMP;
43
+
44
+ // Use 8 bytes for the timestamp (0..7) and shift accordingly:
45
+ const high = Math.floor(t / 0x100000000);
46
+ const low = t >>> 0;
47
+ buf[0] = (high >>> 24) & 255;
48
+ buf[1] = (high >>> 16) & 255;
49
+ buf[2] = (high >>> 8) & 255;
50
+ buf[3] = high & 255;
51
+ buf[4] = (low >>> 24) & 255;
52
+ buf[5] = (low >>> 16) & 255;
53
+ buf[6] = (low >>> 8) & 255;
54
+ buf[7] = low & 255;
55
+
56
+ return `${prefix}_${b58.encode(buf)}`;
57
+ }
@@ -0,0 +1,56 @@
1
+ // Export core types
2
+ export type {
3
+ FieldType,
4
+ Field,
5
+ FieldConfig,
6
+ Primitive,
7
+ JsonValue,
8
+ } from './field-types';
9
+
10
+ // Export field options
11
+ export type {
12
+ NumberFieldOptions,
13
+ StringFieldOptions,
14
+ JsonFieldOptions,
15
+ TimezoneFieldOptions,
16
+ DateFieldOptions,
17
+ } from './field-factory';
18
+
19
+ // Export factory functions
20
+ export {
21
+ createField,
22
+ stringField,
23
+ numberField,
24
+ booleanField,
25
+ dateField,
26
+ jsonField,
27
+ stringArrayField,
28
+ numberArrayField,
29
+ timezoneField,
30
+ COMMON_TIMEZONES,
31
+ } from './field-factory';
32
+
33
+ // Export Zod utilities
34
+ export {
35
+ validateField,
36
+ createFieldValueSchema,
37
+ } from './zod-fields';
38
+
39
+ // Export field inference utilities
40
+ export type {
41
+ InferFieldOutput,
42
+ InferFieldInput,
43
+ InferFieldsOutput,
44
+ InferFieldsInput,
45
+ TransformOutputFn,
46
+ } from './field-inference';
47
+
48
+ // Export SuperJSON utilities
49
+ export {
50
+ getDatabaseType,
51
+ transformForDb,
52
+ parseFromDb,
53
+ } from './superjson-utils';
54
+
55
+ // Export ID generator
56
+ export { generateId } from './id-generator';
@@ -0,0 +1,155 @@
1
+ import superjson from 'superjson';
2
+
3
+ /**
4
+ * Database type enumeration
5
+ * Used to identify the current database type for data handling decisions
6
+ */
7
+ export type DatabaseType = 'sqlite' | 'postgresql' | 'mysql' | 'unknown';
8
+
9
+ /**
10
+ * Get the current database type from a provider string
11
+ *
12
+ * @param provider - The database provider string
13
+ * @returns The normalized database type
14
+ */
15
+ export function normalizeDatabaseType(provider?: string): DatabaseType {
16
+ if (!provider) {
17
+ return 'unknown';
18
+ }
19
+
20
+ // Normalize provider names
21
+ switch (provider.toLowerCase()) {
22
+ case 'pg':
23
+ case 'postgres':
24
+ case 'postgresql':
25
+ return 'postgresql';
26
+ case 'mysql':
27
+ case 'mariadb':
28
+ return 'mysql';
29
+ case 'sqlite':
30
+ case 'sqlite3':
31
+ return 'sqlite';
32
+ default:
33
+ return 'unknown';
34
+ }
35
+ }
36
+
37
+ // Global database type setting that can be configured at startup
38
+ const currentDatabaseType: DatabaseType = 'unknown';
39
+
40
+ /**
41
+ * Get the current database type
42
+ *
43
+ * @returns The current database type
44
+ */
45
+ export function getDatabaseType(): DatabaseType {
46
+ return currentDatabaseType;
47
+ }
48
+
49
+ /**
50
+ * Apply database-specific transformations for JSON data
51
+ *
52
+ * @param value - The value to transform
53
+ * @param dbType - The database type (defaults to current global setting)
54
+ * @returns Transformed value appropriate for the database
55
+ */
56
+ export function transformForDb<T>(
57
+ value: T,
58
+ dbType: DatabaseType = currentDatabaseType
59
+ ): T | string {
60
+ // For SQLite, always use SuperJSON
61
+ if (dbType === 'sqlite') {
62
+ return superjson.stringify(value);
63
+ }
64
+
65
+ // For MySQL, use SuperJSON for complex types
66
+ if (dbType === 'mysql') {
67
+ // Check if value contains complex types
68
+ const containsComplexTypes = containsComplexJsTypes(value);
69
+
70
+ if (containsComplexTypes) {
71
+ return superjson.stringify(value);
72
+ }
73
+ }
74
+
75
+ // For PostgreSQL, use native JSON
76
+ return value;
77
+ }
78
+
79
+ /**
80
+ * Parse a value from the database using the global database type.
81
+ *
82
+ * @param value - The value from the database
83
+ * @returns Parsed value
84
+ */
85
+ export function parseFromDb(value: unknown) {
86
+ // If the value is a string and might be SuperJSON format
87
+ if (typeof value === 'string' && isSuperJsonString(value)) {
88
+ try {
89
+ return superjson.parse(value);
90
+ } catch {
91
+ // If parsing fails, return the original value
92
+ return value;
93
+ }
94
+ }
95
+
96
+ return value;
97
+ }
98
+
99
+ /**
100
+ * Check if a string looks like it might be in SuperJSON format
101
+ *
102
+ * @param str - The string to check
103
+ * @returns Whether the string appears to be SuperJSON
104
+ */
105
+ function isSuperJsonString(str: string): boolean {
106
+ try {
107
+ const parsed = JSON.parse(str);
108
+ // SuperJSON format has 'json' and 'meta' properties
109
+ return (
110
+ typeof parsed === 'object' &&
111
+ parsed !== null &&
112
+ 'json' in parsed &&
113
+ 'meta' in parsed
114
+ );
115
+ } catch {
116
+ return false;
117
+ }
118
+ }
119
+
120
+ /**
121
+ * Check if a value contains complex JavaScript types
122
+ * that might not be properly handled by standard JSON
123
+ *
124
+ * @param value - The value to check
125
+ * @returns Whether the value contains complex types
126
+ */
127
+ function containsComplexJsTypes(value: unknown): boolean {
128
+ if (value === null || value === undefined) {
129
+ return false;
130
+ }
131
+
132
+ // Check for Date, Map, Set, BigInt, or other non-standard JSON types
133
+ if (
134
+ value instanceof Date ||
135
+ value instanceof Map ||
136
+ value instanceof Set ||
137
+ typeof value === 'bigint' ||
138
+ ArrayBuffer.isView(value)
139
+ ) {
140
+ return true;
141
+ }
142
+
143
+ // Recursively check objects and arrays
144
+ if (Array.isArray(value)) {
145
+ return value.some((item) => containsComplexJsTypes(item));
146
+ }
147
+
148
+ if (typeof value === 'object') {
149
+ return Object.values(value as Record<string, unknown>).some((item) =>
150
+ containsComplexJsTypes(item)
151
+ );
152
+ }
153
+
154
+ return false;
155
+ }
@@ -0,0 +1,269 @@
1
+ import { z } from 'zod';
2
+ import type {
3
+ Field,
4
+ FieldType,
5
+ InferValueType,
6
+ JsonValue,
7
+ } from './field-types';
8
+
9
+ /**
10
+ * Base Zod schema for field configuration options
11
+ */
12
+ const fieldConfigSchema = z.object({
13
+ required: z.boolean().default(true),
14
+ returned: z.boolean().default(true),
15
+ input: z.boolean().default(true),
16
+ defaultValue: z.union([z.any(), z.function().returns(z.any())]).optional(),
17
+ transform: z
18
+ .object({
19
+ input: z
20
+ .function()
21
+ .args(z.any())
22
+ .returns(z.union([z.any(), z.promise(z.any())]))
23
+ .optional(),
24
+ output: z
25
+ .function()
26
+ .args(z.any())
27
+ .returns(z.union([z.any(), z.promise(z.any())]))
28
+ .optional(),
29
+ })
30
+ .optional(),
31
+ validator: z
32
+ .function()
33
+ .args(z.any())
34
+ .returns(z.union([z.string(), z.null()]))
35
+ .optional(),
36
+ unique: z.boolean().optional(),
37
+ indexed: z.boolean().optional(),
38
+ sortable: z.boolean().default(true),
39
+ fieldName: z.string().optional(),
40
+ bigint: z.boolean().default(false),
41
+ });
42
+
43
+ /**
44
+ * Zod schema for string field configuration
45
+ */
46
+ export const stringFieldSchema = fieldConfigSchema.extend({
47
+ type: z.literal('string'),
48
+ minLength: z.number().optional(),
49
+ maxLength: z.number().optional(),
50
+ pattern: z.string().optional(),
51
+ });
52
+
53
+ /**
54
+ * Zod schema for number field configuration
55
+ */
56
+ export const numberFieldSchema = fieldConfigSchema.extend({
57
+ type: z.literal('number'),
58
+ min: z.number().optional(),
59
+ max: z.number().optional(),
60
+ });
61
+
62
+ /**
63
+ * Zod schema for boolean field configuration
64
+ */
65
+ export const booleanFieldSchema = fieldConfigSchema.extend({
66
+ type: z.literal('boolean'),
67
+ });
68
+
69
+ /**
70
+ * Zod schema for date field configuration
71
+ */
72
+ export const dateFieldSchema = fieldConfigSchema.extend({
73
+ type: z.literal('date'),
74
+ minDate: z.date().optional(),
75
+ maxDate: z.date().optional(),
76
+ dateOnly: z.boolean().default(false),
77
+ format: z.record(z.unknown()).optional(),
78
+ });
79
+
80
+ /**
81
+ * Zod schema for timezone field configuration
82
+ */
83
+ export const timezoneFieldSchema = fieldConfigSchema.extend({
84
+ type: z.literal('timezone'),
85
+ validateTimezone: z.boolean().default(true),
86
+ suggestedValues: z.array(z.string()).optional(),
87
+ restrictToSuggestedValues: z.boolean().default(false),
88
+ });
89
+
90
+ /**
91
+ * Zod schema for JSON field configuration
92
+ */
93
+ export const jsonFieldSchema = fieldConfigSchema.extend({
94
+ type: z.literal('json'),
95
+ validateJson: z.boolean().default(true),
96
+ });
97
+
98
+ /**
99
+ * Zod schema for string array field configuration
100
+ */
101
+ export const stringArrayFieldSchema = fieldConfigSchema.extend({
102
+ type: z.literal('string[]'),
103
+ });
104
+
105
+ /**
106
+ * Zod schema for number array field configuration
107
+ */
108
+ export const numberArrayFieldSchema = fieldConfigSchema.extend({
109
+ type: z.literal('number[]'),
110
+ });
111
+
112
+ /**
113
+ * Union type of all field schemas
114
+ */
115
+ export const fieldSchema = z.discriminatedUnion('type', [
116
+ stringFieldSchema,
117
+ numberFieldSchema,
118
+ booleanFieldSchema,
119
+ dateFieldSchema,
120
+ timezoneFieldSchema,
121
+ jsonFieldSchema,
122
+ stringArrayFieldSchema,
123
+ numberArrayFieldSchema,
124
+ ]);
125
+
126
+ /**
127
+ * Type for a validated field configuration
128
+ */
129
+ export type ValidatedField<TFieldType extends FieldType> = z.infer<
130
+ typeof fieldSchema
131
+ > & {
132
+ type: TFieldType;
133
+ };
134
+
135
+ /**
136
+ * Creates a Zod schema for a field's value based on its type
137
+ */
138
+ export function createFieldValueSchema<TFieldType extends FieldType>(
139
+ field: ValidatedField<TFieldType>
140
+ ): z.ZodType<InferValueType<TFieldType>> {
141
+ type ValueType = InferValueType<TFieldType>;
142
+
143
+ const baseSchema = (() => {
144
+ switch (field.type) {
145
+ case 'string': {
146
+ let schema = z.string();
147
+ if ('minLength' in field && field.minLength !== undefined) {
148
+ schema = schema.min(field.minLength);
149
+ }
150
+ if ('maxLength' in field && field.maxLength !== undefined) {
151
+ schema = schema.max(field.maxLength);
152
+ }
153
+ if ('pattern' in field && field.pattern) {
154
+ schema = schema.regex(new RegExp(field.pattern));
155
+ }
156
+ return schema;
157
+ }
158
+
159
+ case 'number': {
160
+ let schema = z.number();
161
+ if ('min' in field && field.min !== undefined) {
162
+ schema = schema.min(field.min);
163
+ }
164
+ if ('max' in field && field.max !== undefined) {
165
+ schema = schema.max(field.max);
166
+ }
167
+ return schema;
168
+ }
169
+
170
+ case 'boolean':
171
+ return z.boolean();
172
+
173
+ case 'date': {
174
+ let schema = z.date();
175
+ if ('minDate' in field && field.minDate) {
176
+ schema = schema.min(field.minDate);
177
+ }
178
+ if ('maxDate' in field && field.maxDate) {
179
+ schema = schema.max(field.maxDate);
180
+ }
181
+ return schema;
182
+ }
183
+
184
+ case 'timezone': {
185
+ let schema: z.ZodType<string> = z.string();
186
+ if ('validateTimezone' in field && field.validateTimezone) {
187
+ schema = schema.superRefine((val, ctx) => {
188
+ try {
189
+ Intl.DateTimeFormat(undefined, { timeZone: val });
190
+ } catch {
191
+ ctx.addIssue({
192
+ code: z.ZodIssueCode.custom,
193
+ message: 'Invalid timezone',
194
+ });
195
+ }
196
+ });
197
+ }
198
+ if (
199
+ 'restrictToSuggestedValues' in field &&
200
+ field.restrictToSuggestedValues &&
201
+ 'suggestedValues' in field &&
202
+ field.suggestedValues
203
+ ) {
204
+ const suggestedValues = field.suggestedValues;
205
+ schema = schema.superRefine((val, ctx) => {
206
+ if (!suggestedValues.includes(val)) {
207
+ ctx.addIssue({
208
+ code: z.ZodIssueCode.custom,
209
+ message: 'Timezone not in allowed values',
210
+ });
211
+ }
212
+ });
213
+ }
214
+ return schema;
215
+ }
216
+
217
+ case 'json': {
218
+ let schema: z.ZodType<JsonValue> = z.any();
219
+ if ('validateJson' in field && field.validateJson) {
220
+ schema = schema.superRefine((val, ctx) => {
221
+ try {
222
+ JSON.stringify(val);
223
+ } catch {
224
+ ctx.addIssue({
225
+ code: z.ZodIssueCode.custom,
226
+ message: 'Invalid JSON',
227
+ });
228
+ }
229
+ });
230
+ }
231
+ return schema;
232
+ }
233
+
234
+ case 'string[]':
235
+ return z.array(z.string());
236
+
237
+ case 'number[]':
238
+ return z.array(z.number());
239
+
240
+ default:
241
+ throw new Error(`Unsupported field type: ${field.type}`);
242
+ }
243
+ })() as z.ZodType<ValueType>;
244
+
245
+ // Apply custom validation if provided
246
+ if (field.validator) {
247
+ const validator = field.validator;
248
+ return baseSchema.superRefine((val, ctx) => {
249
+ const result = validator(val);
250
+ if (result !== null) {
251
+ ctx.addIssue({
252
+ code: z.ZodIssueCode.custom,
253
+ message: result,
254
+ });
255
+ }
256
+ }) as z.ZodType<ValueType>;
257
+ }
258
+
259
+ return baseSchema;
260
+ }
261
+
262
+ /**
263
+ * Validates a field configuration against its schema
264
+ */
265
+ export function validateField<TFieldType extends FieldType>(
266
+ field: Field<TFieldType>
267
+ ): ValidatedField<TFieldType> {
268
+ return fieldSchema.parse(field) as ValidatedField<TFieldType>;
269
+ }
@@ -0,0 +1,102 @@
1
+ import type { Field } from '~/db/core/fields';
2
+ import type { EntityName } from '~/db/core/types';
3
+ import type { C15TOptions } from '~/types';
4
+ import { getConsentTables } from '../index';
5
+
6
+ /**
7
+ * A schema entry representing a processed entity definition.
8
+ * Contains fields and creation/sorting order information.
9
+ *
10
+ * @internal
11
+ * @interface SchemaEntry
12
+ * @property {Record<string, Field>} fields - Map of field names to their definitions
13
+ * @property {number} order - Order priority for entity creation (lower numbers first)
14
+ */
15
+ interface SchemaEntry {
16
+ fields: Record<string, Field>;
17
+ order: number;
18
+ }
19
+
20
+ /**
21
+ * Processes entity definitions from configuration into a standardized schema format.
22
+ *
23
+ * This function takes raw configuration and builds a complete schema with properly
24
+ * structured field definitions, handling field name mapping, references between
25
+ * entities, and merging duplicate entity definitions.
26
+ *
27
+ * @param {C15TOptions} config - The application configuration
28
+ * @returns {Record<string, SchemaEntry>} A map of entity names to their schema entries
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const schema = getSchema(config);
33
+ *
34
+ * // Access subject entity definition
35
+ * const subjectFields = schema.subject.fields;
36
+ * ```
37
+ */
38
+ export function getSchema(config: C15TOptions) {
39
+ const entities = getConsentTables(config);
40
+ const schema: Record<string, SchemaEntry> = {};
41
+
42
+ for (const [key, entity] of Object.entries(entities)) {
43
+ if (!entity) {
44
+ continue; // Skip if entity is undefined
45
+ }
46
+
47
+ const fields = entity.fields || {}; // Default to empty object if fields is undefined
48
+ const processedFields: Record<string, Field> = {};
49
+
50
+ // Process each field
51
+ for (const [fieldKey, field] of Object.entries(fields)) {
52
+ if (!field) {
53
+ continue; // Skip if field is undefined
54
+ }
55
+
56
+ const fieldName = field.fieldName || fieldKey;
57
+ // Cast field to Field to ensure it has the right type
58
+ const typedField = field as Field;
59
+ processedFields[fieldName] = typedField;
60
+
61
+ // Handle references - first check if the field has a references property
62
+ if (typedField && 'references' in typedField && typedField.references) {
63
+ const entityName = typedField.references.model as EntityName;
64
+ const referencedEntity = entities[entityName];
65
+ if (referencedEntity) {
66
+ // Create a new object for references to avoid modifying the original
67
+ processedFields[fieldName] = {
68
+ ...typedField,
69
+ references: {
70
+ model: referencedEntity.entityName,
71
+ entity: referencedEntity.entityName,
72
+ field: typedField.references.field,
73
+ onDelete: typedField.references.onDelete,
74
+ },
75
+ };
76
+ }
77
+ }
78
+ }
79
+
80
+ // Update or create schema entry
81
+ const entityName = entity.entityName || key;
82
+ if (entityName in schema) {
83
+ const existingEntry = schema[entityName];
84
+
85
+ schema[entityName] = {
86
+ ...existingEntry,
87
+ order: existingEntry?.order ?? Number.POSITIVE_INFINITY,
88
+ fields: {
89
+ ...existingEntry?.fields,
90
+ ...processedFields,
91
+ },
92
+ };
93
+ } else {
94
+ schema[entityName] = {
95
+ fields: processedFields,
96
+ order: entity.order ?? Number.POSITIVE_INFINITY,
97
+ };
98
+ }
99
+ }
100
+
101
+ return schema;
102
+ }
@@ -0,0 +1,52 @@
1
+ import type { C15TDBSchema } from '../schema/definition';
2
+ import type { Field } from './fields';
3
+
4
+ /**
5
+ * Plugin-provided schema type with proper typing.
6
+ * Defines the structure of schemas that plugins can provide to extend the system.
7
+ *
8
+ * @template TEntityKey - The entity key in the schema
9
+ */
10
+ export type PluginSchema = Record<
11
+ string,
12
+ {
13
+ fields: Record<string, Field>;
14
+ entityName?: string;
15
+ }
16
+ >;
17
+
18
+ /**
19
+ * Maps entity keys to their corresponding data structures.
20
+ * Provides type access to all entities defined in the database schema.
21
+ *
22
+ * @template TKey - Entity key in the database schema
23
+ */
24
+ export type EntityTypeMap = {
25
+ [TKey in keyof C15TDBSchema]: C15TDBSchema[TKey];
26
+ };
27
+
28
+ /**
29
+ * All valid entity names in the database schema.
30
+ * This type represents the keys of all entities that can be used in queries.
31
+ */
32
+ export type EntityName = keyof C15TDBSchema;
33
+
34
+ /**
35
+ * Input type for entity operations, allowing partial fields and additional properties.
36
+ * Used when creating or updating entity records.
37
+ *
38
+ * @template TEntity - The entity type being operated on
39
+ */
40
+ export type EntityInput<TEntity extends EntityName> = Partial<
41
+ EntityTypeMap[TEntity]
42
+ > &
43
+ Record<string, unknown>;
44
+
45
+ /**
46
+ * Output type for entity operations returned from the database.
47
+ * Represents the full structure of an entity as returned from queries.
48
+ *
49
+ * @template TEntity - The entity type being returned
50
+ */
51
+ export type EntityOutput<TEntity extends EntityName> = EntityTypeMap[TEntity] &
52
+ Record<string, unknown>;