@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,255 @@
1
+ import type { Field, FieldType } from '~/db/core/fields';
2
+ /**
3
+ * Database type mapping functionality
4
+ *
5
+ * This module handles mapping between abstract field types and
6
+ * database-specific column types. It provides utilities for:
7
+ * 1. Converting between c15t field types and database-specific types
8
+ * 2. Checking type compatibility across different databases
9
+ * 3. Determining appropriate database types based on field attributes
10
+ *
11
+ * @module migration/type-mapping
12
+ */
13
+ import type { KyselyDatabaseType } from '../adapters/kysely-adapter/types';
14
+
15
+ /**
16
+ * Type mappings for PostgreSQL
17
+ * Maps c15t field types to PostgreSQL-specific column types
18
+ */
19
+ const postgresMap = {
20
+ string: ['character varying', 'text'],
21
+ number: [
22
+ 'int4',
23
+ 'integer',
24
+ 'bigint',
25
+ 'smallint',
26
+ 'numeric',
27
+ 'real',
28
+ 'double precision',
29
+ ],
30
+ boolean: ['bool', 'boolean'],
31
+ date: ['timestamp', 'date'],
32
+ json: ['json', 'jsonb'],
33
+ timezone: ['text', 'character varying'], // Timezone stored as text in PostgreSQL
34
+ };
35
+
36
+ /**
37
+ * Type mappings for MySQL
38
+ * Maps c15t field types to MySQL-specific column types
39
+ */
40
+ const mysqlMap = {
41
+ string: ['varchar(255)', 'varchar(36)', 'text'], // Common MySQL string variants
42
+ number: [
43
+ 'integer',
44
+ 'int',
45
+ 'bigint',
46
+ 'smallint',
47
+ 'decimal',
48
+ 'float',
49
+ 'double',
50
+ ],
51
+ boolean: ['boolean', 'tinyint'],
52
+ date: ['timestamp', 'datetime', 'date'],
53
+ json: ['json'],
54
+ timezone: ['varchar(50)'], // Fixed length for timezone strings
55
+ };
56
+
57
+ /**
58
+ * Type mappings for SQLite
59
+ * Maps c15t field types to SQLite-specific column types
60
+ */
61
+ const sqliteMap = {
62
+ string: ['TEXT'],
63
+ number: ['INTEGER', 'REAL'],
64
+ boolean: ['INTEGER', 'BOOLEAN'], // 0 or 1
65
+ date: ['DATE', 'INTEGER'],
66
+ json: ['TEXT'], // SQLite doesn't have native JSON, stored as TEXT
67
+ timezone: ['TEXT'], // Timezone stored as text in SQLite
68
+ };
69
+ /**
70
+ * Type mappings for Microsoft SQL Server
71
+ * Maps c15t field types to MSSQL-specific column types
72
+ *
73
+ * @remarks
74
+ * For double-precision floating point values, MSSQL uses FLOAT(53) which is
75
+ * equivalent to DOUBLE PRECISION in other databases. We map both 'double' and
76
+ * 'float' to the appropriate MSSQL types.
77
+ */
78
+ const mssqlMap = {
79
+ string: ['text', 'varchar'],
80
+ number: ['int', 'bigint', 'smallint', 'decimal', 'float(53)', 'float(24)'],
81
+ boolean: ['bit', 'smallint'],
82
+ date: ['datetime', 'date'],
83
+ json: ['nvarchar(max)'], // MSSQL uses nvarchar for JSON storage
84
+ timezone: ['varchar', 'text'], // Timezone stored as text in MSSQL
85
+ };
86
+
87
+ /**
88
+ * All database type mappings
89
+ * Provides a unified interface to access type mappings for all supported databases
90
+ */
91
+ const map = {
92
+ postgres: postgresMap,
93
+ mysql: mysqlMap,
94
+ sqlite: sqliteMap,
95
+ mssql: mssqlMap,
96
+ } as const;
97
+
98
+ /**
99
+ * Determines MySQL string type based on field attributes
100
+ *
101
+ * @param field - Field attributes including unique and references properties
102
+ * @returns The appropriate MySQL type for the string field
103
+ *
104
+ * @example
105
+ * ```typescript
106
+ * // Returns 'varchar(255)' for unique fields
107
+ * getMySqlStringType({ type: 'string', unique: true });
108
+ *
109
+ * // Returns 'varchar(36)' for reference fields
110
+ * getMySqlStringType({ type: 'string', references: 'subjects' });
111
+ *
112
+ * // Returns 'text' for regular string fields
113
+ * getMySqlStringType({ type: 'string' });
114
+ * ```
115
+ */
116
+ export function getMySqlStringType(field: Field): string {
117
+ if (field.unique) {
118
+ return 'varchar(255)';
119
+ }
120
+ if (field.references) {
121
+ return 'varchar(36)';
122
+ }
123
+ return 'text';
124
+ }
125
+
126
+ /**
127
+ * Checks if a database column type matches the expected field type
128
+ *
129
+ * @param columnDataType - The actual column type in the database
130
+ * @param fieldType - The expected field type from c15t
131
+ * @param dbType - The database type (postgres, mysql, etc.)
132
+ * @returns True if types match, false otherwise
133
+ *
134
+ * @remarks
135
+ * This function handles type compatibility across different databases,
136
+ * accounting for the fact that the same logical type may have different
137
+ * names in different database systems.
138
+ *
139
+ * Array types (string[] and number[]) are treated specially and matched
140
+ * against JSON-compatible column types.
141
+ *
142
+ * @example
143
+ * ```typescript
144
+ * // Returns true because 'text' is compatible with 'string' in PostgreSQL
145
+ * matchType('text', 'string', 'postgres');
146
+ *
147
+ * // Returns true because 'jsonb' is compatible with array types
148
+ * matchType('jsonb', 'string[]', 'postgres');
149
+ * ```
150
+ */
151
+ export function matchType(
152
+ columnDataType: string,
153
+ fieldType: FieldType,
154
+ dbType: KyselyDatabaseType
155
+ ): boolean {
156
+ if (fieldType === 'string[]' || fieldType === 'number[]') {
157
+ return columnDataType.toLowerCase().includes('json');
158
+ }
159
+ const types = map[dbType];
160
+ const type = Array.isArray(fieldType)
161
+ ? types.string.map((t) => t.toLowerCase())
162
+ : types[fieldType].map((t) => t.toLowerCase());
163
+ const matches = type.includes(columnDataType.toLowerCase());
164
+ return matches;
165
+ }
166
+
167
+ /**
168
+ * Gets the appropriate database type for a field
169
+ *
170
+ * @param field - Field attributes including type and other properties
171
+ * @param dbType - Database type to get the appropriate type for
172
+ * @returns The appropriate database-specific type
173
+ *
174
+ * @remarks
175
+ * This function determines the most appropriate database type for a given field,
176
+ * taking into account:
177
+ * - The field's base type (string, number, boolean, etc.)
178
+ * - Special attributes (unique, references, bigint)
179
+ * - Database-specific requirements and best practices
180
+ *
181
+ * @example
182
+ * ```typescript
183
+ * // Returns 'text' for a regular string field in SQLite
184
+ * getType({ type: 'string' }, 'sqlite');
185
+ *
186
+ * // Returns 'jsonb' for a JSON field in PostgreSQL
187
+ * getType({ type: 'json' }, 'postgres');
188
+ *
189
+ * // Returns 'bigint' for a number field with bigint flag
190
+ * getType({ type: 'number', bigint: true }, 'mysql');
191
+ * ```
192
+ */
193
+ export function getType(field: Field, dbType: KyselyDatabaseType = 'sqlite') {
194
+ const type = field.type;
195
+ const typeMap = {
196
+ string: {
197
+ sqlite: 'text',
198
+ postgres: 'text',
199
+ mysql: getMySqlStringType(field),
200
+ mssql: getMySqlStringType(field),
201
+ },
202
+ boolean: {
203
+ sqlite: 'integer',
204
+ postgres: 'boolean',
205
+ mysql: 'boolean',
206
+ mssql: 'smallint',
207
+ },
208
+ number: {
209
+ sqlite: field.bigint ? 'bigint' : 'integer',
210
+ postgres: field.bigint ? 'bigint' : 'integer',
211
+ mysql: field.bigint ? 'bigint' : 'integer',
212
+ mssql: field.bigint ? 'bigint' : 'integer',
213
+ },
214
+ date: {
215
+ sqlite: 'date',
216
+ postgres: 'timestamp',
217
+ mysql: 'datetime',
218
+ mssql: 'datetime',
219
+ },
220
+ timezone: {
221
+ sqlite: 'text',
222
+ postgres: 'text',
223
+ mysql: 'varchar(50)',
224
+ mssql: 'nvarchar(50)',
225
+ },
226
+ json: {
227
+ sqlite: 'text', // SQLite doesn't have native JSON
228
+ postgres: 'jsonb', // PostgreSQL prefers jsonb for better performance
229
+ mysql: 'json',
230
+ mssql: 'nvarchar(max)', // SQL Server stores JSON as nvarchar
231
+ },
232
+ } as const;
233
+
234
+ if (dbType === 'sqlite' && (type === 'string[]' || type === 'number[]')) {
235
+ return 'text';
236
+ }
237
+ if (type === 'string[]' || type === 'number[]') {
238
+ switch (dbType) {
239
+ case 'postgres':
240
+ return 'jsonb';
241
+ case 'mysql':
242
+ case 'mssql':
243
+ return 'json';
244
+ default:
245
+ return 'text';
246
+ }
247
+ }
248
+
249
+ // Handle json type
250
+ if (type === 'json') {
251
+ return typeMap.json[dbType];
252
+ }
253
+
254
+ return typeMap[type][dbType];
255
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Types used throughout the migration system
3
+ *
4
+ * @module migration/types
5
+ */
6
+
7
+ import type {
8
+ AlterTableColumnAlteringBuilder,
9
+ CreateTableBuilder,
10
+ } from 'kysely';
11
+ import type { Field } from '~/db/core/fields';
12
+
13
+ /**
14
+ * Type representing a table to be created during migration
15
+ */
16
+ export interface TableToCreate {
17
+ table: string;
18
+ fields: Record<string, Field>;
19
+ order: number;
20
+ }
21
+
22
+ /**
23
+ * Type representing table columns to be added during migration
24
+ */
25
+ export interface ColumnsToAdd {
26
+ table: string;
27
+ fields: Record<string, Field>;
28
+ order: number;
29
+ }
30
+
31
+ /**
32
+ * Type for migration operations
33
+ */
34
+ export type MigrationOperation =
35
+ | AlterTableColumnAlteringBuilder
36
+ | CreateTableBuilder<string, string>;
37
+
38
+ /**
39
+ * Result of migration generation
40
+ */
41
+ export interface MigrationResult {
42
+ toBeCreated: TableToCreate[];
43
+ toBeAdded: ColumnsToAdd[];
44
+ runMigrations: () => Promise<void>;
45
+ compileMigrations: () => Promise<string>;
46
+ }
@@ -0,0 +1,3 @@
1
+ export * from './registry';
2
+ export * from './schema';
3
+ export * from './table';
@@ -0,0 +1,228 @@
1
+ import type { Where } from '~/db/adapters/types';
2
+ import { getWithHooks } from '~/db/hooks';
3
+ import type { GenericEndpointContext } from '~/types';
4
+ import type { RegistryContext } from '~/types/context';
5
+ import { validateEntityOutput } from '../definition';
6
+ import type { AuditLog } from './schema';
7
+ /**
8
+ * Creates and returns a set of consent audit log adapter methods to interact with the database.
9
+ * These methods provide a consistent interface for creating and querying audit logs
10
+ * while applying hooks and enforcing data validation rules.
11
+ *
12
+ * @param adapter - The database adapter used for direct database operations
13
+ * @param ctx - The context object containing the database adapter, hooks, and options
14
+ * @returns An object containing type-safe consent audit log operations
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const auditLogAdapter = createAuditLogAdapter({
19
+ * adapter: databaseAdapter,
20
+ * createWithHooks,
21
+ * options: c15tOptions
22
+ * });
23
+ *
24
+ * // Create a new audit log entry
25
+ * const log = await auditLogAdapter.createAuditLog({
26
+ * entityType: 'consent',
27
+ * entityId: 'cns_hadt8w7nngm7xmx2bn',
28
+ * actionType: 'update',
29
+ * subjectId: 'sub_x1pftyoufsm7xgo1kv',
30
+ * changes: { status: { from: 'active', to: 'withdrawn' } }
31
+ * });
32
+ * ```
33
+ */
34
+ export function auditLogRegistry({ adapter, ...ctx }: RegistryContext) {
35
+ const { createWithHooks } = getWithHooks(adapter, ctx);
36
+
37
+ return {
38
+ /**
39
+ * Creates a new consent audit log entry in the database.
40
+ * Automatically sets creation timestamp and applies any
41
+ * configured hooks during the creation process.
42
+ *
43
+ * @param auditLog - Audit log data to create (without id and timestamp)
44
+ * @param context - Optional endpoint context for hooks
45
+ * @returns The created audit log entry with all fields populated
46
+ * @throws May throw an error if hooks prevent creation or if database operations fail
47
+ */
48
+ createAuditLog: async (
49
+ auditLog: Omit<AuditLog, 'id' | 'createdAt'> & Partial<AuditLog>,
50
+ context?: GenericEndpointContext
51
+ ) => {
52
+ const createdLog = await createWithHooks({
53
+ data: {
54
+ createdAt: new Date(),
55
+ ...auditLog,
56
+ },
57
+ model: 'auditLog',
58
+ customFn: undefined,
59
+ context,
60
+ });
61
+
62
+ if (!createdLog) {
63
+ throw new Error(
64
+ 'Failed to create consent audit log - operation returned null'
65
+ );
66
+ }
67
+
68
+ return createdLog as AuditLog;
69
+ },
70
+
71
+ /**
72
+ * Finds all audit log entries matching specified filters.
73
+ * Returns logs with processed output fields according to the schema configuration.
74
+ *
75
+ * @param entityType - Optional entity type to filter logs (e.g., 'consent', 'subject')
76
+ * @param entityId - Optional entity ID to filter logs
77
+ * @param actionType - Optional action type to filter logs (e.g., 'create', 'update')
78
+ * @param limit - Optional maximum number of logs to return
79
+ * @param offset - Optional number of logs to skip for pagination
80
+ * @returns Array of audit log entries matching the criteria
81
+ */
82
+ findAuditLogs: async (
83
+ entityType?: string,
84
+ entityId?: string,
85
+ actionType?: string,
86
+ limit?: number,
87
+ offset?: number
88
+ ) => {
89
+ const whereConditions: Where<'auditLog'> = [];
90
+
91
+ if (entityType) {
92
+ whereConditions.push({
93
+ field: 'entityType',
94
+ value: entityType,
95
+ });
96
+ }
97
+
98
+ if (entityId) {
99
+ whereConditions.push({
100
+ field: 'entityId',
101
+ value: entityId,
102
+ });
103
+ }
104
+
105
+ if (actionType) {
106
+ whereConditions.push({
107
+ field: 'actionType',
108
+ value: actionType,
109
+ });
110
+ }
111
+
112
+ const logs = await adapter.findMany({
113
+ model: 'auditLog',
114
+ where: whereConditions,
115
+ sortBy: {
116
+ field: 'createdAt',
117
+ direction: 'desc',
118
+ },
119
+ limit,
120
+ offset,
121
+ });
122
+
123
+ return logs.map((log) =>
124
+ validateEntityOutput('auditLog', log, ctx.options)
125
+ );
126
+ },
127
+
128
+ /**
129
+ * Finds a specific audit log entry by its ID.
130
+ * Returns the log with processed output fields according to the schema configuration.
131
+ *
132
+ * @param auditLogId - The unique identifier of the audit log entry
133
+ * @returns The audit log entry if found, null otherwise
134
+ */
135
+ findAuditLogById: async (auditLogId: string) => {
136
+ const log = await adapter.findOne({
137
+ model: 'auditLog',
138
+ where: [
139
+ {
140
+ field: 'id',
141
+ value: auditLogId,
142
+ },
143
+ ],
144
+ });
145
+ return log ? validateEntityOutput('auditLog', log, ctx.options) : null;
146
+ },
147
+
148
+ /**
149
+ * Finds all audit log entries for a specific entity.
150
+ * Returns logs with processed output fields according to the schema configuration.
151
+ *
152
+ * @param entityType - The type of entity (e.g., 'consent', 'subject')
153
+ * @param entityId - The unique identifier of the entity
154
+ * @param limit - Optional maximum number of logs to return
155
+ * @returns Array of audit log entries for the specified entity
156
+ */
157
+ findAuditLogsByEntity: async (
158
+ entityType: string,
159
+ entityId: string,
160
+ limit?: number
161
+ ) => {
162
+ const logs = await adapter.findMany({
163
+ model: 'auditLog',
164
+ where: [
165
+ {
166
+ field: 'entityType',
167
+ value: entityType,
168
+ },
169
+ {
170
+ field: 'entityId',
171
+ value: entityId,
172
+ },
173
+ ],
174
+ sortBy: {
175
+ field: 'createdAt',
176
+ direction: 'desc',
177
+ },
178
+ limit,
179
+ });
180
+ return logs.map((log) =>
181
+ validateEntityOutput('auditLog', log, ctx.options)
182
+ );
183
+ },
184
+
185
+ /**
186
+ * Counts the total number of audit log entries matching specified filters.
187
+ * Useful for pagination and reporting.
188
+ *
189
+ * @param entityType - Optional entity type to filter logs
190
+ * @param entityId - Optional entity ID to filter logs
191
+ * @param actionType - Optional action type to filter logs
192
+ * @returns The total count of matching audit log entries
193
+ */
194
+ countAuditLogs: async (
195
+ entityType?: string,
196
+ entityId?: string,
197
+ actionType?: string
198
+ ) => {
199
+ const whereConditions: Where<'auditLog'> = [];
200
+
201
+ if (entityType) {
202
+ whereConditions.push({
203
+ field: 'entityType',
204
+ value: entityType,
205
+ });
206
+ }
207
+
208
+ if (entityId) {
209
+ whereConditions.push({
210
+ field: 'entityId',
211
+ value: entityId,
212
+ });
213
+ }
214
+
215
+ if (actionType) {
216
+ whereConditions.push({
217
+ field: 'actionType',
218
+ value: actionType,
219
+ });
220
+ }
221
+
222
+ return adapter.count({
223
+ model: 'auditLog',
224
+ where: whereConditions,
225
+ });
226
+ },
227
+ };
228
+ }
@@ -0,0 +1,46 @@
1
+ import { z } from 'zod';
2
+
3
+ /**
4
+ * Zod schema for validating consent audit log entities.
5
+ *
6
+ * This defines the structure and validation rules for audit log entries:
7
+ * - Required fields: entityType, entityId, actionType
8
+ * - Optional fields: subjectId, ipAddress, changes, metadata
9
+ * - Default current date/time for creation timestamp
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const auditLogData = {
14
+ * id: 'log_w5qufx2a66m7xkn3ty',
15
+ * entityType: 'consent',
16
+ * entityId: 'cns_hadt8w7nngm7xmx2bn',
17
+ * actionType: 'update',
18
+ * subjectId: 'sub_x1pftyoufsm7xgo1kv',
19
+ * changes: { status: { from: 'active', to: 'withdrawn' } }
20
+ * };
21
+ *
22
+ * // Validate and parse the audit log data
23
+ * const validAuditLog = auditLogSchema.parse(auditLogData);
24
+ * ```
25
+ */
26
+ export const auditLogSchema = z.object({
27
+ id: z.string(),
28
+ entityType: z.string(),
29
+ entityId: z.string(),
30
+ actionType: z.string(),
31
+ subjectId: z.string().optional(),
32
+ ipAddress: z.string().optional(),
33
+ userAgent: z.string().optional(),
34
+ changes: z.record(z.unknown()).optional(),
35
+ metadata: z.record(z.unknown()).optional(),
36
+ createdAt: z.date().default(() => new Date()),
37
+ });
38
+
39
+ /**
40
+ * Type definition for AuditLog
41
+ *
42
+ * This type represents the structure of a consent audit log entry
43
+ * as defined by the auditLogSchema. It includes all fields
44
+ * that are part of the audit log entity.
45
+ */
46
+ export type AuditLog = z.infer<typeof auditLogSchema>;