@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,272 @@
1
+ import type { Where } from '~/db/adapters/types';
2
+ import { getWithHooks } from '~/db/hooks';
3
+ import { BASE_ERROR_CODES, C15TError } from '~/error';
4
+ import type { GenericEndpointContext, RegistryContext } from '~/types';
5
+ import { validateEntityOutput } from '../definition';
6
+ import type { Domain } from './schema';
7
+
8
+ export interface FindDomainParams {
9
+ name?: string;
10
+ includeInactive?: boolean;
11
+ }
12
+
13
+ /**
14
+ * Creates and returns a set of domain-related adapter methods to interact with the database.
15
+ * These methods provide a consistent interface for creating, finding, and updating
16
+ * domain records while applying hooks and enforcing data validation rules.
17
+ *
18
+ * @param adapter - The database adapter used for direct database operations
19
+ * @param ctx - The context object containing the database adapter, hooks, and options
20
+ * @returns An object containing type-safe domain operations
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const domainAdapter = createDomainAdapter(
25
+ * databaseAdapter,
26
+ * createWithHooks,
27
+ * updateWithHooks,
28
+ * c15tOptions
29
+ * );
30
+ *
31
+ * // Create a new domain
32
+ * const domain = await domainAdapter.createDomain({
33
+ * name: 'example.com',
34
+ * description: 'Example company website',
35
+ * isVerified: true
36
+ * });
37
+ * ```
38
+ */
39
+ export function domainRegistry({ adapter, ...ctx }: RegistryContext) {
40
+ const { createWithHooks, updateWithHooks } = getWithHooks(adapter, ctx);
41
+ const registry = {
42
+ /**
43
+ * Creates a new domain record in the database.
44
+ * Automatically sets creation timestamp and applies any
45
+ * configured hooks during the creation process.
46
+ *
47
+ * @param domain - Domain data to create (without id and timestamp)
48
+ * @param context - Optional endpoint context for hooks
49
+ * @returns The created domain with all fields populated
50
+ * @throws May throw an error if hooks prevent creation or if database operations fail
51
+ */
52
+ createDomain: async (
53
+ domain: Omit<Domain, 'id' | 'createdAt' | 'updatedAt'> & Partial<Domain>,
54
+ context?: GenericEndpointContext
55
+ ) => {
56
+ const createdDomain = await createWithHooks({
57
+ data: {
58
+ ...domain,
59
+ createdAt: new Date(),
60
+ updatedAt: new Date(),
61
+ },
62
+ model: 'domain',
63
+ customFn: undefined,
64
+ context,
65
+ });
66
+
67
+ if (!createdDomain) {
68
+ throw new Error('Failed to create domain - operation returned null');
69
+ }
70
+
71
+ return createdDomain as Domain;
72
+ },
73
+
74
+ /**
75
+ * Finds an existing domain or creates a new one if needed.
76
+ *
77
+ * @param name - The domain name to find or create
78
+ * @param context - Optional endpoint context for hooks
79
+ * @returns The existing or newly created domain
80
+ * @throws APIError if domain creation fails
81
+ */
82
+ findOrCreateDomain: async function (
83
+ name: string,
84
+ context?: GenericEndpointContext
85
+ ) {
86
+ // Try to find existing domain
87
+ const existingDomain = await this.findDomainByName(name);
88
+ if (existingDomain) {
89
+ return existingDomain;
90
+ }
91
+
92
+ // Create new domain if not found
93
+ const domain = await this.createDomain(
94
+ {
95
+ name,
96
+ description: `Auto-created domain for ${name}`,
97
+ isActive: true,
98
+ isVerified: true,
99
+ allowedOrigins: [],
100
+ },
101
+ context
102
+ );
103
+
104
+ if (!domain) {
105
+ throw new C15TError('Failed to create domain', {
106
+ code: BASE_ERROR_CODES.INTERNAL_SERVER_ERROR,
107
+ status: 503,
108
+ });
109
+ }
110
+
111
+ return domain;
112
+ },
113
+
114
+ /**
115
+ * Finds all domains, optionally including inactive ones.
116
+ * Returns domains with processed output fields according to the schema configuration.
117
+ *
118
+ * @param params - Optional parameters to filter the results
119
+ * @returns Array of domains matching the criteria
120
+ */
121
+ findDomains: async (params: FindDomainParams = {}) => {
122
+ const whereConditions: Where<'domain'> = [];
123
+
124
+ if (!params.includeInactive) {
125
+ whereConditions.push({
126
+ field: 'isActive',
127
+ value: true,
128
+ });
129
+ }
130
+
131
+ if (params.name) {
132
+ whereConditions.push({
133
+ field: 'name',
134
+ value: params.name,
135
+ });
136
+ }
137
+
138
+ const domains = await adapter.findMany({
139
+ model: 'domain',
140
+ where: whereConditions,
141
+ sortBy: {
142
+ field: 'name',
143
+ direction: 'asc',
144
+ },
145
+ });
146
+
147
+ return domains.map((domain) =>
148
+ validateEntityOutput('domain', domain, ctx.options)
149
+ );
150
+ },
151
+
152
+ /**
153
+ * Finds a domain by its name.
154
+ * Returns the domain with processed output fields according to the schema configuration.
155
+ *
156
+ * @param name - The domain name to search for
157
+ * @returns The domain object if found, null otherwise
158
+ */
159
+ findDomain: async (name: string) => {
160
+ const domains = await registry.findDomains({
161
+ name,
162
+ includeInactive: false,
163
+ });
164
+ return domains[0] || null;
165
+ },
166
+
167
+ /**
168
+ * Finds a domain by its unique ID.
169
+ * Returns the domain with processed output fields according to the schema configuration.
170
+ *
171
+ * @param domainId - The unique identifier of the domain
172
+ * @returns The domain object if found, null otherwise
173
+ */
174
+ findDomainById: async (domainId: string) => {
175
+ const domain = await adapter.findOne({
176
+ model: 'domain',
177
+ where: [
178
+ {
179
+ field: 'id',
180
+ value: domainId,
181
+ },
182
+ ],
183
+ });
184
+ return domain
185
+ ? validateEntityOutput('domain', domain, ctx.options)
186
+ : null;
187
+ },
188
+
189
+ /**
190
+ * Finds a domain by its name.
191
+ * Returns the domain with processed output fields according to the schema configuration.
192
+ *
193
+ * @param name - The domain name to search for
194
+ * @returns The domain object if found, null otherwise
195
+ */
196
+ findDomainByName: async (name: string) => {
197
+ const domain = await adapter.findOne({
198
+ model: 'domain',
199
+ where: [
200
+ {
201
+ field: 'name',
202
+ value: name,
203
+ },
204
+ ],
205
+ });
206
+ return domain
207
+ ? validateEntityOutput('domain', domain, ctx.options)
208
+ : null;
209
+ },
210
+
211
+ /**
212
+ * Updates an existing domain record by ID.
213
+ * Applies any configured hooks during the update process and
214
+ * processes the output according to schema configuration.
215
+ *
216
+ * @param domainId - The unique identifier of the domain to update
217
+ * @param data - The fields to update on the domain record
218
+ * @param context - Optional endpoint context for hooks
219
+ * @returns The updated domain if successful, null if not found or hooks prevented update
220
+ */
221
+ updateDomain: async (
222
+ domainId: string,
223
+ data: Partial<Domain>,
224
+ context?: GenericEndpointContext
225
+ ) => {
226
+ const domain = await updateWithHooks({
227
+ data: {
228
+ ...data,
229
+ updatedAt: new Date(),
230
+ },
231
+ where: [
232
+ {
233
+ field: 'id',
234
+ value: domainId,
235
+ },
236
+ ],
237
+ model: 'domain',
238
+ customFn: undefined,
239
+ context,
240
+ });
241
+ return domain
242
+ ? validateEntityOutput('domain', domain as Domain, ctx.options)
243
+ : null;
244
+ },
245
+
246
+ /**
247
+ * Verifies if a domain exists and is active.
248
+ * Useful for checking domain validity during API requests.
249
+ *
250
+ * @param domainName - The domain name to verify
251
+ * @returns True if the domain exists and is active, false otherwise
252
+ */
253
+ verifyDomain: async (domainName: string) => {
254
+ const domain = await adapter.findOne({
255
+ model: 'domain',
256
+ where: [
257
+ {
258
+ field: 'name',
259
+ value: domainName,
260
+ },
261
+ {
262
+ field: 'isActive',
263
+ value: true,
264
+ },
265
+ ],
266
+ });
267
+ return !!domain;
268
+ },
269
+ };
270
+
271
+ return registry;
272
+ }
@@ -0,0 +1,43 @@
1
+ import { z } from 'zod';
2
+
3
+ /**
4
+ * Zod schema for validating domain entities.
5
+ *
6
+ * This defines the structure and validation rules for domain records:
7
+ * - Required fields: name
8
+ * - Optional fields: description, allowedOrigins
9
+ * - Default value of true for isActive and isVerified
10
+ * - Default current date/time for creation timestamp
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const domainData = {
15
+ * id: 'dom_x1pftyoufsm7xgo1kv',
16
+ * name: 'example.com',
17
+ * description: 'Company website',
18
+ * allowedOrigins: ['https://app.example.com', 'https://admin.example.com']
19
+ * };
20
+ *
21
+ * // Validate and parse the domain data
22
+ * const validDomain = domainSchema.parse(domainData);
23
+ * ```
24
+ */
25
+ export const domainSchema = z.object({
26
+ id: z.string(),
27
+ name: z.string().min(1),
28
+ description: z.string().optional(),
29
+ allowedOrigins: z.array(z.string()).optional().default([]),
30
+ isVerified: z.boolean().default(true),
31
+ isActive: z.boolean().default(true),
32
+ createdAt: z.date().default(() => new Date()),
33
+ updatedAt: z.date().default(() => new Date()),
34
+ });
35
+
36
+ /**
37
+ * Type definition for Domain
38
+ *
39
+ * This type represents the structure of a domain record
40
+ * as defined by the domainSchema. It includes all fields
41
+ * that are part of the domain entity.
42
+ */
43
+ export type Domain = z.infer<typeof domainSchema>;
@@ -0,0 +1,137 @@
1
+ import type { Field } from '~/db/core/fields';
2
+ import type { C15TOptions } from '~/types';
3
+ import { domainSchema } from './schema';
4
+
5
+ /**
6
+ * Generates the database table configuration for the domain entity.
7
+ *
8
+ * This function creates a schema definition that includes all standard domain 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 domain table customizations
13
+ * @param domainFields - Additional fields from plugins to include in the domain table
14
+ * @returns A complete table schema definition with fields, model name, and metadata
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const domainTableSchema = getDomainTable(c15tOptions);
19
+ * // Use the schema for migrations or data access
20
+ * const migrationPlans = generateMigrations(domainTableSchema);
21
+ * ```
22
+ */
23
+ export function getDomainTable(
24
+ options: C15TOptions,
25
+ domainFields?: Record<string, Field>
26
+ ) {
27
+ const domainConfig = options.tables?.domain;
28
+
29
+ return {
30
+ /**
31
+ * The name of the domain table in the database, configurable through options
32
+ */
33
+ entityName: domainConfig?.entityName || 'domain',
34
+
35
+ /**
36
+ * The ID prefix for the domain table
37
+ * Used to generate unique prefixed IDs for domains
38
+ */
39
+ entityPrefix: domainConfig?.entityPrefix || 'dom',
40
+
41
+ /**
42
+ * The schema for the domain table
43
+ */
44
+ schema: domainSchema,
45
+
46
+ /**
47
+ * Field definitions for the domain table
48
+ */
49
+ fields: {
50
+ /**
51
+ * Domain name (e.g., "example.com")
52
+ * This is the primary identifier for the domain in addition to its ID
53
+ */
54
+ name: {
55
+ type: 'string',
56
+ required: true,
57
+ unique: true,
58
+ fieldName: domainConfig?.fields?.name || 'name',
59
+ },
60
+
61
+ /**
62
+ * Optional human-readable description of the domain
63
+ */
64
+ description: {
65
+ type: 'string',
66
+ required: false,
67
+ fieldName: domainConfig?.fields?.description || 'description',
68
+ },
69
+
70
+ /**
71
+ * List of additional origins that are allowed to access resources for this domain
72
+ * Stored as a JSON array of strings
73
+ */
74
+ allowedOrigins: {
75
+ type: 'json',
76
+ defaultValue: () => [],
77
+ required: false,
78
+ fieldName: domainConfig?.fields?.allowedOrigins || 'allowedOrigins',
79
+ },
80
+
81
+ /**
82
+ * Whether domain ownership has been verified
83
+ * Default: true
84
+ */
85
+ isVerified: {
86
+ type: 'boolean',
87
+ defaultValue: true,
88
+ required: true,
89
+ fieldName: domainConfig?.fields?.isVerified || 'isVerified',
90
+ },
91
+
92
+ /**
93
+ * Whether this domain is currently active
94
+ * Default: true
95
+ */
96
+ isActive: {
97
+ type: 'boolean',
98
+ defaultValue: true,
99
+ required: true,
100
+ fieldName: domainConfig?.fields?.isActive || 'isActive',
101
+ },
102
+
103
+ /**
104
+ * When the domain record was created
105
+ * Automatically set to current time by default
106
+ */
107
+ createdAt: {
108
+ type: 'date',
109
+ defaultValue: () => new Date(),
110
+ required: true,
111
+ fieldName: domainConfig?.fields?.createdAt || 'createdAt',
112
+ },
113
+
114
+ /**
115
+ * When the domain record was last updated
116
+ * Optional, set during updates
117
+ */
118
+ updatedAt: {
119
+ type: 'date',
120
+ required: false,
121
+ fieldName: domainConfig?.fields?.updatedAt || 'updatedAt',
122
+ },
123
+
124
+ // Include additional fields from plugins
125
+ ...(domainFields || {}),
126
+
127
+ // Include additional fields from configuration
128
+ ...(domainConfig?.additionalFields || {}),
129
+ },
130
+
131
+ /**
132
+ * Execution order during migrations (lower numbers run first)
133
+ * Domain table needs to be created before tables that reference it
134
+ */
135
+ order: 1,
136
+ };
137
+ }
@@ -0,0 +1,27 @@
1
+ import type { ActiveEntityConfig } from '../types';
2
+
3
+ /**
4
+ * Domain entity configuration
5
+ * @default entityName: "domain", entityPrefix: "dom"
6
+ */
7
+ export interface DomainEntityConfig extends ActiveEntityConfig {
8
+ fields?: Record<string, string> & {
9
+ id?: string;
10
+ domain: string;
11
+ /**
12
+ * Indicates if the domain is a pattern (e.g., "true"/"false")
13
+ * When true, the domain string will be interpreted as a pattern
14
+ */
15
+ isPattern?: string;
16
+ /**
17
+ * The type of pattern matching to apply
18
+ * Valid values: "regex", "wildcard", "prefix", "suffix", "exact"
19
+ */
20
+ patternType?: string;
21
+ parentDomainId?: string;
22
+ description?: string;
23
+ isActive?: string;
24
+ createdAt?: string;
25
+ updatedAt?: string;
26
+ };
27
+ }
@@ -0,0 +1,3 @@
1
+ export * from './registry';
2
+ export * from './schema';
3
+ export * from './table';
@@ -0,0 +1,159 @@
1
+ import type { Where } from '~/db/adapters/types';
2
+ import { getWithHooks } from '~/db/hooks/with-hooks-factory';
3
+ import type { GenericEndpointContext, RegistryContext } from '~/types';
4
+ import { validateEntityOutput } from '../definition';
5
+ import type { GeoLocation } from './schema';
6
+ /**
7
+ * Creates and returns a set of 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 geo-location operations
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const locationAdapter = createGeoLocationAdapter(
18
+ * databaseAdapter,
19
+ * createWithHooks,
20
+ * c15tOptions
21
+ * );
22
+ *
23
+ * // Create a new geo-location record
24
+ * const location = await locationAdapter.createGeoLocation({
25
+ * countryCode: 'US',
26
+ * countryName: 'United States',
27
+ * regionCode: 'CA',
28
+ * regionName: 'California',
29
+ * regulatoryZones: ['CCPA', 'CPRA']
30
+ * });
31
+ * ```
32
+ */
33
+ export function geoLocationRegistry({ adapter, ...ctx }: RegistryContext) {
34
+ const { createWithHooks } = getWithHooks(adapter, ctx);
35
+ return {
36
+ /**
37
+ * Creates a new geo-location record in the database.
38
+ * Automatically sets creation timestamp and applies any
39
+ * configured hooks during the creation process.
40
+ *
41
+ * @param location - Geo-location data to create (without id and timestamp)
42
+ * @param context - Optional endpoint context for hooks
43
+ * @returns The created geo-location record with all fields populated
44
+ * @throws May throw an error if hooks prevent creation or if database operations fail
45
+ */
46
+ createGeoLocation: async (
47
+ location: Omit<GeoLocation, 'id' | 'createdAt'> & Partial<GeoLocation>,
48
+ context?: GenericEndpointContext
49
+ ) => {
50
+ const createdLocation = await createWithHooks({
51
+ data: {
52
+ createdAt: new Date(),
53
+ ...location,
54
+ },
55
+ model: 'consentGeoLocation',
56
+ customFn: undefined,
57
+ context,
58
+ });
59
+
60
+ if (!createdLocation) {
61
+ throw new Error(
62
+ 'Failed to create geo-location - operation returned null'
63
+ );
64
+ }
65
+
66
+ return createdLocation as GeoLocation;
67
+ },
68
+
69
+ /**
70
+ * Finds all geo-location records matching the given criteria.
71
+ * Returns geo-locations with processed output fields according to the schema configuration.
72
+ *
73
+ * @param filter - Optional filter parameters for the query
74
+ * @returns Array of geo-location records matching the criteria
75
+ */
76
+ findGeoLocations: async (filter?: {
77
+ countryCode?: string;
78
+ regionCode?: string;
79
+ }) => {
80
+ const whereConditions: Where<'geoLocation'> = [];
81
+
82
+ if (filter?.countryCode) {
83
+ whereConditions.push({
84
+ field: 'countryCode',
85
+ value: filter.countryCode,
86
+ });
87
+ }
88
+
89
+ if (filter?.regionCode) {
90
+ whereConditions.push({
91
+ field: 'regionCode',
92
+ value: filter.regionCode,
93
+ });
94
+ }
95
+
96
+ const locations = await adapter.findMany({
97
+ model: 'geoLocation',
98
+ where: whereConditions,
99
+ sortBy: {
100
+ field: 'countryName',
101
+ direction: 'asc',
102
+ },
103
+ });
104
+
105
+ return locations.map((location) =>
106
+ validateEntityOutput('consentGeoLocation', location, ctx.options)
107
+ );
108
+ },
109
+
110
+ /**
111
+ * Finds a geo-location record by its unique ID.
112
+ * Returns the geo-location with processed output fields according to the schema configuration.
113
+ *
114
+ * @param locationId - The unique identifier of the geo-location record
115
+ * @returns The geo-location object if found, null otherwise
116
+ */
117
+ findGeoLocationById: async (locationId: string) => {
118
+ const location = await adapter.findOne({
119
+ model: 'geoLocation',
120
+ where: [
121
+ {
122
+ field: 'id',
123
+ value: locationId,
124
+ },
125
+ ],
126
+ });
127
+ return location
128
+ ? validateEntityOutput('consentGeoLocation', location, ctx.options)
129
+ : null;
130
+ },
131
+
132
+ /**
133
+ * Finds geo-location records by country code.
134
+ * Returns geo-locations with processed output fields according to the schema configuration.
135
+ *
136
+ * @param countryCode - The country code to search for
137
+ * @returns Array of geo-location records for the specified country
138
+ */
139
+ findGeoLocationsByCountry: async (countryCode: string) => {
140
+ const locations = await adapter.findMany({
141
+ model: 'geoLocation',
142
+ where: [
143
+ {
144
+ field: 'countryCode',
145
+ value: countryCode,
146
+ },
147
+ ],
148
+ sortBy: {
149
+ field: 'regionName',
150
+ direction: 'asc',
151
+ },
152
+ });
153
+
154
+ return locations.map((location) =>
155
+ validateEntityOutput('consentGeoLocation', location, ctx.options)
156
+ );
157
+ },
158
+ };
159
+ }
@@ -0,0 +1,45 @@
1
+ import { z } from 'zod';
2
+
3
+ /**
4
+ * Zod schema for validating geo-location entities.
5
+ *
6
+ * This defines the structure and validation rules for geographic location records:
7
+ * - Required fields: countryCode, countryName
8
+ * - Optional fields: regionCode, regionName, regulatoryZones
9
+ * - Default current date/time for creation timestamp
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const locationData = {
14
+ * id: 'geo_x1pftyoufsm7xgo1kv',
15
+ * countryCode: 'US',
16
+ * countryName: 'United States',
17
+ * regionCode: 'CA',
18
+ * regionName: 'California',
19
+ * regulatoryZones: ['CCPA', 'CPRA']
20
+ * };
21
+ *
22
+ * // Validate and parse the geo-location data
23
+ * const validLocation = geoLocationSchema.parse(locationData);
24
+ * ```
25
+ */
26
+ export const geoLocationSchema = z.object({
27
+ id: z.string(),
28
+ countryCode: z.string().length(2).toUpperCase(),
29
+ countryName: z.string(),
30
+ regionCode: z.string().optional(),
31
+ regionName: z.string().optional(),
32
+ regulatoryZones: z
33
+ .array(z.enum(['GDPR', 'CCPA', 'CPRA', 'LGPD', 'PIPEDA']))
34
+ .optional(), // Add your actual regulatory zones
35
+ createdAt: z.date().default(() => new Date()),
36
+ });
37
+
38
+ /**
39
+ * Type definition for GeoLocation
40
+ *
41
+ * This type represents the structure of a geo-location entity
42
+ * as defined by the geoLocationSchema. It includes all fields
43
+ * that are part of the geo-location entity.
44
+ */
45
+ export type GeoLocation = z.infer<typeof geoLocationSchema>;