@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,220 @@
1
+ import type { Field } from '~/db/core/fields';
2
+ import type { C15TOptions } from '~/types';
3
+ import { consentSchema } from './schema';
4
+ /**
5
+ * Generates the database table configuration for the consent entity.
6
+ *
7
+ * This function creates a schema definition that includes all standard consent fields
8
+ * and any additional fields from plugins or configuration. The resulting schema is used
9
+ * for database migrations, schema validation, and query building.
10
+ *
11
+ * @param options - C15T configuration options that may contain consent table customizations
12
+ * @param consentFields - Additional fields from plugins to include in the consent table
13
+ * @returns A complete table schema definition with fields, model name, and metadata
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const consentTableSchema = getConsentTable(c15tOptions);
18
+ * // Use the schema for migrations or data access
19
+ * const migrationPlans = generateMigrations(consentTableSchema);
20
+ * ```
21
+ */
22
+ export function getConsentTable(
23
+ options: C15TOptions,
24
+ consentFields?: Record<string, Field>
25
+ ) {
26
+ // Get consent config from the tables structure
27
+ const consentConfig = options.tables?.consent;
28
+ const subjectConfig = options.tables?.subject;
29
+ const domainConfig = options.tables?.domain;
30
+ const policyConfig = options.tables?.consentPolicy;
31
+ const purposeConfig = options.tables?.consentPurpose;
32
+
33
+ return {
34
+ /**
35
+ * The name of the consent table in the database, configurable through options
36
+ */
37
+ entityName: consentConfig?.entityName || 'consent',
38
+
39
+ /**
40
+ * The ID prefix for the consent table
41
+ * Used to generate unique prefixed IDs for consents
42
+ */
43
+ entityPrefix: consentConfig?.entityPrefix || 'cns',
44
+
45
+ /**
46
+ * The schema for the consent table
47
+ */
48
+ schema: consentSchema,
49
+
50
+ /**
51
+ * Field definitions for the consent table
52
+ */
53
+ fields: {
54
+ /**
55
+ * Reference to the subject who gave consent
56
+ */
57
+ subjectId: {
58
+ type: 'string',
59
+ required: true,
60
+ fieldName: consentConfig?.fields?.subjectId || 'subjectId',
61
+ references: {
62
+ model: subjectConfig?.entityName || 'subject',
63
+ field: 'id',
64
+ },
65
+ },
66
+
67
+ /**
68
+ * Reference to the domain this consent applies to
69
+ */
70
+ domainId: {
71
+ type: 'string',
72
+ required: true,
73
+ fieldName: consentConfig?.fields?.domainId || 'domainId',
74
+ references: {
75
+ model: domainConfig?.entityName || 'domain',
76
+ field: 'id',
77
+ },
78
+ },
79
+
80
+ /**
81
+ * Array of consentPurpose IDs that this consent applies to
82
+ * Represents the many-to-many relationship between consent and purposes
83
+ */
84
+ purposeIds: {
85
+ type: 'json',
86
+ required: false,
87
+ fieldName: consentConfig?.fields?.purposeIds || 'purposeIds',
88
+ references: {
89
+ model: purposeConfig?.entityName || 'consentPurpose',
90
+ field: 'id',
91
+ type: 'array', // Indicates this is an array of references
92
+ },
93
+ },
94
+
95
+ /**
96
+ * Additional metadata about the consent
97
+ */
98
+ metadata: {
99
+ type: 'json',
100
+ required: false,
101
+ fieldName: consentConfig?.fields?.metadata || 'metadata',
102
+ },
103
+
104
+ /**
105
+ * Reference to the policy version that was accepted
106
+ */
107
+ policyId: {
108
+ type: 'string',
109
+ required: false,
110
+ fieldName: consentConfig?.fields?.policyId || 'policyId',
111
+ references: {
112
+ model: policyConfig?.entityName || 'consentPolicy',
113
+ field: 'id',
114
+ },
115
+ },
116
+
117
+ /**
118
+ * IP address when consent was given
119
+ */
120
+ ipAddress: {
121
+ type: 'string',
122
+ required: false,
123
+ fieldName: consentConfig?.fields?.ipAddress || 'ipAddress',
124
+ },
125
+
126
+ /**
127
+ * Subject agent information when consent was given
128
+ */
129
+ userAgent: {
130
+ type: 'string',
131
+ required: false,
132
+ fieldName: consentConfig?.fields?.userAgent || 'userAgent',
133
+ },
134
+
135
+ /**
136
+ * Status of the consent (active, expired, withdrawn)
137
+ * Default: 'active'
138
+ */
139
+ status: {
140
+ type: 'string',
141
+ defaultValue: () => 'active',
142
+ required: true,
143
+ fieldName: consentConfig?.fields?.status || 'status',
144
+ },
145
+
146
+ /**
147
+ * Reason for consentWithdrawal, if consent was withdrawn
148
+ */
149
+ withdrawalReason: {
150
+ type: 'string',
151
+ required: false,
152
+ fieldName:
153
+ consentConfig?.fields?.withdrawalReason || 'withdrawalReason',
154
+ },
155
+
156
+ /**
157
+ * When the consent was given
158
+ * Automatically set to current time
159
+ */
160
+ givenAt: {
161
+ type: 'date',
162
+ defaultValue: () => new Date(),
163
+ required: true,
164
+ fieldName: consentConfig?.fields?.givenAt || 'givenAt',
165
+ },
166
+
167
+ /**
168
+ * When the consent expires
169
+ * Calculated based on givenAt + expiresIn setting
170
+ */
171
+ validUntil: {
172
+ type: 'date',
173
+ required: false,
174
+ fieldName: consentConfig?.fields?.validUntil || 'validUntil',
175
+ transform: {
176
+ input: (val: Date | undefined, data: Record<string, unknown>) => {
177
+ if (val) {
178
+ return val;
179
+ }
180
+
181
+ const expiresIn = consentConfig?.expiresIn || 31536000; // Default: 1 year
182
+ const givenAt =
183
+ data.givenAt instanceof Date ? data.givenAt : new Date();
184
+
185
+ if (expiresIn > 0) {
186
+ const validUntil = new Date(givenAt);
187
+ validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
188
+ return validUntil;
189
+ }
190
+
191
+ return undefined; // No expiration
192
+ },
193
+ },
194
+ },
195
+
196
+ /**
197
+ * Whether the consent is active
198
+ * Default: true
199
+ */
200
+ isActive: {
201
+ type: 'boolean',
202
+ defaultValue: true,
203
+ required: true,
204
+ fieldName: consentConfig?.fields?.isActive || 'isActive',
205
+ },
206
+
207
+ // Include additional fields from plugins
208
+ ...(consentFields || {}),
209
+
210
+ // Include additional fields from configuration
211
+ ...(consentConfig?.additionalFields || {}),
212
+ },
213
+
214
+ /**
215
+ * Execution order during migrations (lower numbers run first)
216
+ * Consent table needs to be created after the subject, domain, and policy tables it references
217
+ */
218
+ order: 3,
219
+ };
220
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Consent Entity Type Definitions
3
+ *
4
+ * This module contains type definitions specific to the consent entity.
5
+ */
6
+ import type { BaseEntityConfig } from '../types';
7
+
8
+ /**
9
+ * Consent entity configuration
10
+ * @default entityName: "consent", entityPrefix: "cns"
11
+ */
12
+ export interface ConsentEntityConfig extends BaseEntityConfig {
13
+ /**
14
+ * Default expiration for consent in seconds
15
+ * @default 31536000 (1 year)
16
+ */
17
+ expiresIn?: number;
18
+
19
+ /**
20
+ * Time in seconds before refreshing consent data
21
+ * @default 86400 (24 hours)
22
+ */
23
+ updateAge?: number;
24
+
25
+ fields?: Record<string, string> & {
26
+ id?: string;
27
+ subjectId?: string;
28
+ domainId?: string;
29
+ purposeIds?: string;
30
+ metadata?: string;
31
+ policyId?: string;
32
+ ipAddress?: string;
33
+ userAgent?: string;
34
+ status?: string;
35
+ withdrawalReason?: string;
36
+ givenAt?: string;
37
+ validUntil?: string;
38
+ };
39
+ }
@@ -0,0 +1,3 @@
1
+ export * from './registry';
2
+ export * from './schema';
3
+ export * from './table';
@@ -0,0 +1,124 @@
1
+ import { getWithHooks } from '~/db/hooks';
2
+ import type { GenericEndpointContext, RegistryContext } from '~/types';
3
+ import { validateEntityOutput } from '../definition';
4
+ import type { ConsentGeoLocation } from './schema';
5
+
6
+ /**
7
+ * Creates and returns a set of consent geo-location-related adapter methods to interact with the database.
8
+ * These methods provide a consistent interface for creating and finding
9
+ * geo-location records while applying hooks and enforcing data validation rules.
10
+ *
11
+ * @param adapter - The database adapter used for direct database operations
12
+ * @param ctx - The context object containing the database adapter, hooks, and options
13
+ * @returns An object containing type-safe consent geo-location operations
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const geoLocationAdapter = createConsentGeoLocationAdapter(
18
+ * databaseAdapter,
19
+ * createWithHooks,
20
+ * c15tOptions
21
+ * );
22
+ *
23
+ * // Create a new geo-location record
24
+ * const geoLocation = await geoLocationAdapter.createConsentGeoLocation({
25
+ * consentId: 'cns_hadt8w7nngm7xmx2bn',
26
+ * ip: '192.168.1.1',
27
+ * country: 'US',
28
+ * city: 'New York',
29
+ * latitude: 40.7128,
30
+ * longitude: -74.0060
31
+ * });
32
+ * ```
33
+ */
34
+ export function consentGeoLocationRegistry({
35
+ adapter,
36
+ ...ctx
37
+ }: RegistryContext) {
38
+ const { createWithHooks } = getWithHooks(adapter, ctx);
39
+
40
+ return {
41
+ /**
42
+ * Creates a new consent geo-location record in the database.
43
+ * Automatically sets creation timestamp and applies any
44
+ * configured hooks during the creation process.
45
+ *
46
+ * @param geoLocation - Geo-location data to create (without id and timestamp)
47
+ * @param context - Optional endpoint context for hooks
48
+ * @returns The created geo-location record with all fields populated
49
+ * @throws May throw an error if hooks prevent creation or if database operations fail
50
+ */
51
+ createConsentGeoLocation: async (
52
+ geoLocation: Omit<ConsentGeoLocation, 'id' | 'createdAt'> &
53
+ Partial<ConsentGeoLocation>,
54
+ context?: GenericEndpointContext
55
+ ) => {
56
+ const createdGeoLocation = await createWithHooks({
57
+ data: {
58
+ createdAt: new Date(),
59
+ ...geoLocation,
60
+ },
61
+ model: 'consentGeoLocation',
62
+ customFn: undefined,
63
+ context,
64
+ });
65
+
66
+ if (!createdGeoLocation) {
67
+ throw new Error(
68
+ 'Failed to create consent geo-location - operation returned null'
69
+ );
70
+ }
71
+
72
+ return createdGeoLocation as ConsentGeoLocation;
73
+ },
74
+
75
+ /**
76
+ * Finds geo-location records associated with a specific consent ID.
77
+ * Returns geo-locations with processed output fields according to the schema configuration.
78
+ *
79
+ * @param consentId - The ID of the consent record to find geo-locations for
80
+ * @returns Array of geo-location records associated with the consent
81
+ */
82
+ findConsentGeoLocationsByConsentId: async (consentId: string) => {
83
+ const geoLocations = await adapter.findMany({
84
+ model: 'consentGeoLocation',
85
+ where: [
86
+ {
87
+ field: 'consentId',
88
+ value: consentId,
89
+ },
90
+ ],
91
+ sortBy: {
92
+ field: 'createdAt',
93
+ direction: 'desc',
94
+ },
95
+ });
96
+
97
+ return geoLocations.map((geoLocation) =>
98
+ validateEntityOutput('consentGeoLocation', geoLocation, ctx.options)
99
+ );
100
+ },
101
+
102
+ /**
103
+ * Finds a geo-location record by its unique ID.
104
+ * Returns the geo-location with processed output fields according to the schema configuration.
105
+ *
106
+ * @param geoLocationId - The unique identifier of the geo-location record
107
+ * @returns The geo-location object if found, null otherwise
108
+ */
109
+ findConsentGeoLocationById: async (geoLocationId: string) => {
110
+ const geoLocation = await adapter.findOne({
111
+ model: 'consentGeoLocation',
112
+ where: [
113
+ {
114
+ field: 'id',
115
+ value: geoLocationId,
116
+ },
117
+ ],
118
+ });
119
+ return geoLocation
120
+ ? validateEntityOutput('consentGeoLocation', geoLocation, ctx.options)
121
+ : null;
122
+ },
123
+ };
124
+ }
@@ -0,0 +1,51 @@
1
+ import { z } from 'zod';
2
+
3
+ /**
4
+ * Zod schema for validating consent geo-location entities.
5
+ *
6
+ * This defines the structure and validation rules for geo-location records:
7
+ * - Required fields: consentId, ip (IP address)
8
+ * - Optional fields: country, region, city, latitude, longitude, timezone
9
+ * - Default current date/time for creation and update timestamps
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const geoLocationData = {
14
+ * id: 'cgl_w5qufx2a66m7xkn3ty',
15
+ * consentId: 'cns_hadt8w7nngm7xmx2bn',
16
+ * ip: '192.168.1.1',
17
+ * country: 'US',
18
+ * city: 'New York',
19
+ * latitude: 40.7128,
20
+ * longitude: -74.0060
21
+ * };
22
+ *
23
+ * // Validate and parse the geo-location data
24
+ * const validGeoLocation = consentGeoLocationSchema.parse(geoLocationData);
25
+ * ```
26
+ */
27
+ export const consentGeoLocationSchema = z.object({
28
+ id: z.string(),
29
+ consentId: z.string(),
30
+ ip: z.string().ip(),
31
+ country: z.string().optional(),
32
+ region: z.string().optional(),
33
+ city: z.string().optional(),
34
+ latitude: z.number().min(-90).max(90).optional(),
35
+ longitude: z.number().min(-180).max(180).optional(),
36
+ timezone: z
37
+ .string()
38
+ .regex(/^[A-Za-z_]+\/[A-Za-z_]+$/)
39
+ .optional(), // Basic IANA timezone format check
40
+ createdAt: z.date().default(() => new Date()),
41
+ updatedAt: z.date().default(() => new Date()),
42
+ });
43
+
44
+ /**
45
+ * Type definition for ConsentGeoLocation
46
+ *
47
+ * This type represents the structure of a consent geo-location record
48
+ * as defined by the consentGeoLocationSchema. It includes all fields
49
+ * that are part of the consent geo-location entity.
50
+ */
51
+ export type ConsentGeoLocation = z.infer<typeof consentGeoLocationSchema>;
@@ -0,0 +1,169 @@
1
+ import type { Field } from '~/db/core/fields';
2
+ import type { C15TOptions } from '~/types';
3
+ import { consentGeoLocationSchema } from './schema';
4
+
5
+ /**
6
+ * Generates the database table configuration for the consent 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 geoLocationTableSchema = getConsentGeoLocationTable(c15tOptions);
19
+ * // Use the schema for migrations or data access
20
+ * const migrationPlans = generateMigrations(geoLocationTableSchema);
21
+ * ```
22
+ */
23
+ export function getConsentGeoLocationTable(
24
+ options: C15TOptions,
25
+ geoLocationFields?: Record<string, Field>
26
+ ) {
27
+ const consentGeoLocationConfig = options.tables?.consentGeoLocation;
28
+ const consentConfig = options.tables?.consent;
29
+
30
+ return {
31
+ /**
32
+ * The name of the geo-location table in the database, configurable through options
33
+ */
34
+ entityName: consentGeoLocationConfig?.entityName || 'consentGeoLocation',
35
+
36
+ /**
37
+ * The ID prefix for the consent geo-location table
38
+ * Used to generate unique prefixed IDs for consent geo-locations
39
+ */
40
+ entityPrefix: consentGeoLocationConfig?.entityPrefix || 'cgl',
41
+
42
+ /**
43
+ * The schema for the consent geo-location table
44
+ */
45
+ schema: consentGeoLocationSchema,
46
+
47
+ /**
48
+ * Field definitions for the consent geo-location table
49
+ */
50
+ fields: {
51
+ /**
52
+ * Reference to the consent record this geo-location is associated with
53
+ */
54
+ consentId: {
55
+ type: 'string',
56
+ required: true,
57
+ fieldName: consentGeoLocationConfig?.fields?.consentId || 'consentId',
58
+ references: {
59
+ model: consentConfig?.entityName || 'consent',
60
+ field: 'id',
61
+ },
62
+ },
63
+
64
+ /**
65
+ * IP address from which the consent was given
66
+ */
67
+ ip: {
68
+ type: 'string',
69
+ required: true,
70
+ fieldName: consentGeoLocationConfig?.fields?.ip || 'ip',
71
+ },
72
+
73
+ /**
74
+ * Country code (e.g., 'US', 'DE', 'FR')
75
+ */
76
+ country: {
77
+ type: 'string',
78
+ required: false,
79
+ fieldName: consentGeoLocationConfig?.fields?.country || 'country',
80
+ },
81
+
82
+ /**
83
+ * Region or state (e.g., 'California', 'Bavaria')
84
+ */
85
+ region: {
86
+ type: 'string',
87
+ required: false,
88
+ fieldName: consentGeoLocationConfig?.fields?.region || 'region',
89
+ },
90
+
91
+ /**
92
+ * City name (e.g., 'New York', 'Berlin')
93
+ */
94
+ city: {
95
+ type: 'string',
96
+ required: false,
97
+ fieldName: consentGeoLocationConfig?.fields?.city || 'city',
98
+ },
99
+
100
+ /**
101
+ * Latitude coordinate
102
+ */
103
+ latitude: {
104
+ type: 'number',
105
+ required: false,
106
+ fieldName: consentGeoLocationConfig?.fields?.latitude || 'latitude',
107
+ },
108
+
109
+ /**
110
+ * Longitude coordinate
111
+ */
112
+ longitude: {
113
+ type: 'number',
114
+ required: false,
115
+ fieldName: consentGeoLocationConfig?.fields?.longitude || 'longitude',
116
+ },
117
+
118
+ /**
119
+ * Timezone identifier (e.g., 'America/New_York', 'Europe/Berlin')
120
+ */
121
+ timezone: {
122
+ type: 'string',
123
+ required: false,
124
+ fieldName: consentGeoLocationConfig?.fields?.timezone || 'timezone',
125
+ },
126
+
127
+ /**
128
+ * When the geo-location record was created
129
+ * Automatically set to current time by default
130
+ */
131
+ createdAt: {
132
+ type: 'date',
133
+ defaultValue: () => new Date(),
134
+ required: true,
135
+ fieldName: consentGeoLocationConfig?.fields?.createdAt || 'createdAt',
136
+ },
137
+
138
+ // Include additional fields from plugins
139
+ ...(geoLocationFields || {}),
140
+
141
+ // Include additional fields from configuration
142
+ ...(consentGeoLocationConfig?.additionalFields || {}),
143
+ },
144
+
145
+ /**
146
+ * Add indexes for better query performance
147
+ */
148
+ indexes: [
149
+ {
150
+ name: 'consent_id_index',
151
+ fields: ['consentId'],
152
+ },
153
+ {
154
+ name: 'country_index',
155
+ fields: ['country'],
156
+ },
157
+ {
158
+ name: 'created_at_index',
159
+ fields: ['createdAt'],
160
+ },
161
+ ],
162
+
163
+ /**
164
+ * Execution order during migrations (lower numbers run first)
165
+ * Geo-location table needs to be created after the consent table it references
166
+ */
167
+ order: 4,
168
+ };
169
+ }
@@ -0,0 +1,21 @@
1
+ import type { BaseEntityConfig } from '../types';
2
+
3
+ /**
4
+ * Consent geo location entity configuration
5
+ * @default entityName: "consentGeoLocation", entityPrefix: "cgl"
6
+ */
7
+ export interface ConsentGeoLocationEntityConfig extends BaseEntityConfig {
8
+ fields?: Record<string, string> & {
9
+ id?: string;
10
+ /**
11
+ * Indicates if the domain is a pattern (e.g., "true"/"false")
12
+ * When true, the domain string will be interpreted as a pattern
13
+ */
14
+ consentId?: string;
15
+ /**
16
+ * Foreign key to geo-location entity (should be indexed)
17
+ */
18
+ geoLocationId?: string;
19
+ createdAt?: string;
20
+ };
21
+ }
@@ -0,0 +1,3 @@
1
+ export * from './registry';
2
+ export * from './schema';
3
+ export * from './table';