@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,586 @@
1
+ //@ts-nocheck
2
+
3
+ import { BASE_ERROR_CODES, C15TError } from '~/error';
4
+ import type { C15TOptions } from '~/types';
5
+
6
+ import { getConsentTables } from '~/db';
7
+ import { generateId } from '~/db/core/fields';
8
+ import type { EntityName } from '~/db/core/types';
9
+ import type { Adapter, Where } from '../types';
10
+ import { applyDefaultValue } from '../utils';
11
+
12
+ /**
13
+ * Configuration options for the Prisma adapter
14
+ *
15
+ * This interface defines the configuration options for the Prisma adapter,
16
+ * including which database provider to use.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const config: PrismaConfig = {
21
+ * provider: 'postgresql'
22
+ * };
23
+ * ```
24
+ */
25
+ export interface PrismaConfig {
26
+ /**
27
+ * Database provider.
28
+ *
29
+ * Specifies which database engine the Prisma client is configured to use.
30
+ * This affects how queries are constructed and executed.
31
+ */
32
+ provider:
33
+ | 'sqlite'
34
+ | 'cockroachdb'
35
+ | 'mysql'
36
+ | 'postgresql'
37
+ | 'sqlserver'
38
+ | 'mongodb';
39
+ }
40
+
41
+ /**
42
+ * Type alias for a Prisma client instance
43
+ *
44
+ * This represents a generic Prisma client that can be used with the adapter.
45
+ * The actual shape will depend on your specific Prisma schema.
46
+ */
47
+ type PrismaClient = Record<string, unknown>;
48
+
49
+ /**
50
+ * Internal type representing the expected structure of a Prisma client
51
+ *
52
+ * This interface defines the expected methods and properties that the
53
+ * adapter will use when interacting with the Prisma client.
54
+ *
55
+ * @internal
56
+ */
57
+ interface PrismaClientInternal {
58
+ [model: string]: {
59
+ create: (data: data) => Promise<data>;
60
+ findFirst: (data: data) => Promise<data>;
61
+ findMany: (data: data) => Promise<data>;
62
+ update: (data: data) => Promise<data>;
63
+ delete: (data: data) => Promise<data>;
64
+ [key: string]: data;
65
+ };
66
+ }
67
+
68
+ /**
69
+ * Type alias for generic data objects
70
+ *
71
+ * @internal
72
+ */
73
+ type data = Record<string, unknown>;
74
+
75
+ /**
76
+ * Creates entity transformation utilities for the Prisma adapter
77
+ *
78
+ * This function creates helper methods for converting between c15t's
79
+ * data format and Prisma's query format, handling field mapping,
80
+ * value transformation, and query building.
81
+ *
82
+ * @internal This function is used internally by the prismaAdapter
83
+ * @param _config - The Prisma adapter configuration
84
+ * @param options - The c15t options
85
+ * @returns An object containing entity transformation utilities
86
+ */
87
+ const createEntityTransformer = (
88
+ _config: PrismaConfig,
89
+ options: C15TOptions
90
+ ) => {
91
+ const schema = getConsentTables(options);
92
+
93
+ /**
94
+ * Gets the database field name for a model field
95
+ *
96
+ * @internal
97
+ * @param model - The model name
98
+ * @param field - The field name in the c15t model
99
+ * @returns The corresponding field name in the database schema
100
+ */
101
+ function getField(model: string, field: string) {
102
+ if (field === 'id') {
103
+ return field;
104
+ }
105
+ const f = schema[model].fields[field];
106
+ return f.fieldName || field;
107
+ }
108
+
109
+ /**
110
+ * Converts c15t operators to Prisma operators
111
+ *
112
+ * @internal
113
+ * @param operator - The c15t operator
114
+ * @returns The equivalent Prisma operator
115
+ */
116
+ function operatorToPrismaOperator(operator: string) {
117
+ switch (operator) {
118
+ case 'starts_with':
119
+ return 'startsWith';
120
+ case 'ends_with':
121
+ return 'endsWith';
122
+ default:
123
+ return operator;
124
+ }
125
+ }
126
+
127
+ /**
128
+ * Gets the database entity name for a model
129
+ *
130
+ * @internal
131
+ * @param model - The model name
132
+ * @returns The database table/collection name
133
+ */
134
+ function getEntityName(model: string) {
135
+ return schema[model].entityName;
136
+ }
137
+
138
+ const useDatabaseGeneratedId = options?.advanced?.generateId === false;
139
+ return {
140
+ /**
141
+ * Transforms input data from c15t format to Prisma format
142
+ *
143
+ * @internal
144
+ * @param data - The data to transform
145
+ * @param model - The model name
146
+ * @param action - Whether this is a create or update operation
147
+ * @returns Transformed data for Prisma operations
148
+ */
149
+ transformInput(
150
+ data: Record<string, unknown>,
151
+ model: string,
152
+ action: 'create' | 'update'
153
+ ) {
154
+ const transformedData: Record<string, unknown> =
155
+ useDatabaseGeneratedId || action === 'update'
156
+ ? {}
157
+ : {
158
+ id: options.advanced?.generateId
159
+ ? options.advanced.generateId({
160
+ model,
161
+ })
162
+ : data.id || generateId(schema[model].entityPrefix),
163
+ };
164
+ const fields = schema[model].fields;
165
+ for (const field in fields) {
166
+ if (Object.hasOwn(fields, field)) {
167
+ const value = data[field];
168
+ if (
169
+ value === undefined &&
170
+ (!fields[field].defaultValue || action === 'update')
171
+ ) {
172
+ continue;
173
+ }
174
+ transformedData[fields[field].fieldName || field] = applyDefaultValue(
175
+ value,
176
+ fields[field],
177
+ action
178
+ );
179
+ }
180
+ }
181
+ return transformedData;
182
+ },
183
+
184
+ /**
185
+ * Transforms output data from Prisma format to c15t format
186
+ *
187
+ * @internal
188
+ * @param data - The data from Prisma
189
+ * @param model - The model name
190
+ * @param select - Optional array of fields to select
191
+ * @returns Transformed data for c15t or null if no data
192
+ */
193
+ transformOutput(
194
+ data: Record<string, unknown>,
195
+ model: string,
196
+ select: string[] = []
197
+ ) {
198
+ if (!data) {
199
+ return null;
200
+ }
201
+
202
+ let transformedData: Record<string, unknown> = {};
203
+
204
+ if (
205
+ (data.id || data._id) &&
206
+ (select.length === 0 || select.includes('id'))
207
+ ) {
208
+ transformedData = { id: data.id };
209
+ }
210
+
211
+ const tableSchema = schema[model].fields;
212
+ for (const key in tableSchema) {
213
+ if (select.length && !select.includes(key)) {
214
+ continue;
215
+ }
216
+ const field = tableSchema[key];
217
+ if (field) {
218
+ transformedData[key] = data[field.fieldName || key];
219
+ }
220
+ }
221
+ return transformedData as unknown;
222
+ },
223
+
224
+ /**
225
+ * Converts c15t where clauses to Prisma query conditions
226
+ *
227
+ * @internal
228
+ * @typeParam EntityType - The entity type
229
+ * @param model - The model name
230
+ * @param where - The where conditions
231
+ * @returns Prisma-compatible where clause object
232
+ */
233
+ convertWhereClause<EntityType extends EntityName>(
234
+ model: EntityType,
235
+ where?: Where<EntityType>[]
236
+ ) {
237
+ if (!where) {
238
+ return {};
239
+ }
240
+ if (where.length === 1) {
241
+ const w = where[0];
242
+ if (!w) {
243
+ return;
244
+ }
245
+ return {
246
+ [getField(model as string, w.field as string)]:
247
+ w.operator === 'eq' || !w.operator
248
+ ? w.value
249
+ : {
250
+ [operatorToPrismaOperator(w.operator)]: w.value,
251
+ },
252
+ };
253
+ }
254
+ const and = where.filter((w) => w.connector === 'AND' || !w.connector);
255
+ const or = where.filter((w) => w.connector === 'OR');
256
+ const andClause = and.map((w) => {
257
+ return {
258
+ [getField(model as string, w.field as string)]:
259
+ w.operator === 'eq' || !w.operator
260
+ ? w.value
261
+ : {
262
+ [operatorToPrismaOperator(w.operator)]: w.value,
263
+ },
264
+ };
265
+ });
266
+ const orClause = or.map((w) => {
267
+ return {
268
+ [getField(model as string, w.field as string)]: {
269
+ [w.operator || 'eq']: w.value,
270
+ },
271
+ };
272
+ });
273
+
274
+ return {
275
+ ...(andClause.length ? { AND: andClause } : {}),
276
+ ...(orClause.length ? { OR: orClause } : {}),
277
+ };
278
+ },
279
+
280
+ /**
281
+ * Converts c15t select array to Prisma select object
282
+ *
283
+ * @internal
284
+ * @param select - Array of fields to select
285
+ * @param model - The model name
286
+ * @returns Prisma-compatible select object or undefined
287
+ */
288
+ convertSelect: (select?: string[], model?: string) => {
289
+ if (!select || !model) {
290
+ return undefined;
291
+ }
292
+ return select.reduce((prev, cur) => {
293
+ const field = getField(model, cur);
294
+ return Object.assign({}, prev, { [field]: true });
295
+ }, {});
296
+ },
297
+ getEntityName,
298
+ getField,
299
+ };
300
+ };
301
+
302
+ /**
303
+ * Creates a c15t adapter for Prisma ORM
304
+ *
305
+ * This factory function creates an adapter that allows c15t to use Prisma ORM
306
+ * as its database layer. It translates c15t operations into Prisma queries.
307
+ *
308
+ * @param prisma - The Prisma client instance
309
+ * @param config - Configuration for the Prisma adapter
310
+ * @returns A c15t adapter factory function
311
+ *
312
+ * @example
313
+ * ```typescript
314
+ * import { PrismaClient } from '@prisma/client';
315
+ * import { c15tInstance } from '@c15t/backend';
316
+ * import { prismaAdapter } from '@c15t/db/adapters/prisma';
317
+ *
318
+ * // Create a Prisma client
319
+ * const prisma = new PrismaClient();
320
+ *
321
+ * // Create the c15t instance with Prisma adapter
322
+ * const c15t = c15tInstance({
323
+ * storage: prismaAdapter(prisma, { provider: 'postgresql' }),
324
+ * secret: process.env.SECRET_KEY
325
+ * });
326
+ *
327
+ * // Use in your application
328
+ * export default c15tInstance.handler;
329
+ * ```
330
+ */
331
+ export const prismaAdapter =
332
+ (prisma: PrismaClient, config: PrismaConfig) => (options: C15TOptions) => {
333
+ const db = prisma as PrismaClientInternal;
334
+ const {
335
+ transformInput,
336
+ transformOutput,
337
+ convertWhereClause,
338
+ convertSelect,
339
+ getEntityName,
340
+ getField,
341
+ } = createEntityTransformer(config, options);
342
+ return {
343
+ id: 'prisma',
344
+ /**
345
+ * Creates a new record in the database
346
+ *
347
+ * @param data - The data for the create operation
348
+ * @returns The created record
349
+ * @throws {C15TError} When the model does not exist in the database
350
+ */
351
+ async create(data) {
352
+ const { model, data: values, select } = data;
353
+ const transformed = transformInput(values, model, 'create');
354
+ if (!db[getEntityName(model)]) {
355
+ throw new C15TError(
356
+ `The model "${model}" does not exist in the Prisma client. Please verify the model name and ensure it is defined in your Prisma schema.`,
357
+ {
358
+ code: BASE_ERROR_CODES.DATABASE_QUERY_ERROR,
359
+ status: 500,
360
+ data: {
361
+ model,
362
+ availableModels: Object.keys(prisma).filter(
363
+ (key) => !key.startsWith('$') && !key.startsWith('_')
364
+ ),
365
+ },
366
+ }
367
+ );
368
+ }
369
+ const result = await db[getEntityName(model)].create({
370
+ data: transformed,
371
+ select: convertSelect(select, model),
372
+ });
373
+ return transformOutput(result, model, select);
374
+ },
375
+
376
+ /**
377
+ * Finds a single record matching the where conditions
378
+ *
379
+ * @param data - The data for the find operation
380
+ * @returns The found record or null if not found
381
+ * @throws {C15TError} When the model does not exist in the database
382
+ */
383
+ async findOne(data) {
384
+ const { model, where, select } = data;
385
+ const whereClause = convertWhereClause(model, where);
386
+ if (!db[getEntityName(model)]) {
387
+ throw new C15TError(
388
+ `The model "${model}" does not exist in the Prisma client. Please verify the model name and ensure it is defined in your Prisma schema.`,
389
+ {
390
+ code: BASE_ERROR_CODES.DATABASE_QUERY_ERROR,
391
+ status: 500,
392
+ data: {
393
+ model,
394
+ availableModels: Object.keys(prisma).filter(
395
+ (key) => !key.startsWith('$') && !key.startsWith('_')
396
+ ),
397
+ },
398
+ }
399
+ );
400
+ }
401
+ const result = await db[getEntityName(model)].findFirst({
402
+ where: whereClause,
403
+ select: convertSelect(select, model),
404
+ });
405
+ return transformOutput(result, model, select);
406
+ },
407
+
408
+ /**
409
+ * Finds multiple records matching the where conditions
410
+ *
411
+ * @param data - The data for the find operation
412
+ * @returns Array of matching records
413
+ * @throws {C15TError} When the model does not exist in the database
414
+ */
415
+ async findMany(data) {
416
+ const { model, where, limit, offset, sortBy } = data;
417
+ const whereClause = convertWhereClause(model, where);
418
+ if (!db[getEntityName(model)]) {
419
+ throw new C15TError(
420
+ `The model "${model}" does not exist in the Prisma client. Please verify the model name and ensure it is defined in your Prisma schema.`,
421
+ {
422
+ code: BASE_ERROR_CODES.DATABASE_QUERY_ERROR,
423
+ status: 500,
424
+ data: {
425
+ model,
426
+ availableModels: Object.keys(prisma).filter(
427
+ (key) => !key.startsWith('$') && !key.startsWith('_')
428
+ ),
429
+ },
430
+ }
431
+ );
432
+ }
433
+
434
+ const result = (await db[getEntityName(model)].findMany({
435
+ where: whereClause,
436
+ take: limit || 100,
437
+ skip: offset || 0,
438
+ ...(sortBy?.field
439
+ ? {
440
+ orderBy: {
441
+ [getField(model, sortBy.field)]:
442
+ sortBy.direction === 'desc' ? 'desc' : 'asc',
443
+ },
444
+ }
445
+ : {}),
446
+ })) as unknown[];
447
+ return result.map((r) => transformOutput(r, model));
448
+ },
449
+
450
+ /**
451
+ * Counts records matching the where conditions
452
+ *
453
+ * @param data - The data for the count operation
454
+ * @returns The count of matching records
455
+ * @throws {C15TError} When the model does not exist in the database
456
+ */
457
+ async count(data) {
458
+ const { model, where } = data;
459
+ const whereClause = convertWhereClause(model, where);
460
+ if (!db[getEntityName(model)]) {
461
+ throw new C15TError(
462
+ `The model "${model}" does not exist in the Prisma client. Please verify the model name and ensure it is defined in your Prisma schema.`,
463
+ {
464
+ code: BASE_ERROR_CODES.DATABASE_QUERY_ERROR,
465
+ status: 500,
466
+ data: {
467
+ model,
468
+ availableModels: Object.keys(prisma).filter(
469
+ (key) => !key.startsWith('$') && !key.startsWith('_')
470
+ ),
471
+ },
472
+ }
473
+ );
474
+ }
475
+ const result = await db[getEntityName(model)].count({
476
+ where: whereClause,
477
+ });
478
+ return result;
479
+ },
480
+
481
+ /**
482
+ * Updates a single record matching the where conditions
483
+ *
484
+ * @param data - The data for the update operation
485
+ * @returns The updated record or null if not found
486
+ * @throws {C15TError} When the model does not exist in the database
487
+ */
488
+ async update(data) {
489
+ const { model, where, update } = data;
490
+ const whereClause = convertWhereClause(model, where);
491
+ const transformed = transformInput(update, model, 'update');
492
+ try {
493
+ const result = await db[getEntityName(model)].update({
494
+ where: whereClause,
495
+ data: transformed,
496
+ });
497
+ return transformOutput(result, model);
498
+ } catch {
499
+ // Prisma throws an error if no records match the where clause
500
+ return null;
501
+ }
502
+ },
503
+
504
+ /**
505
+ * Updates multiple records matching the where conditions
506
+ *
507
+ * @param data - The data for the update operation
508
+ * @returns The number of records updated
509
+ * @throws {C15TError} When the model does not exist in the database
510
+ */
511
+ async updateMany(data) {
512
+ const { model, where, update } = data;
513
+ const whereClause = convertWhereClause(model, where);
514
+ const transformed = transformInput(update, model, 'update');
515
+ const result = await db[getEntityName(model)].updateMany({
516
+ where: whereClause,
517
+ data: transformed,
518
+ });
519
+ return result ? (result.count as number) : 0;
520
+ },
521
+
522
+ /**
523
+ * Deletes a single record matching the where conditions
524
+ *
525
+ * @param data - The data for the delete operation
526
+ * @throws {C15TError} When the model does not exist in the database (but catches and ignores if record not found)
527
+ */
528
+ async delete(data) {
529
+ const { model, where } = data;
530
+ const whereClause = convertWhereClause(model, where);
531
+ try {
532
+ await db[getEntityName(model)].delete({
533
+ where: whereClause,
534
+ });
535
+ } catch {
536
+ // If the record doesn't exist, we don't want to throw an error
537
+ }
538
+ },
539
+
540
+ /**
541
+ * Deletes multiple records matching the where conditions
542
+ *
543
+ * @param data - The data for the delete operation
544
+ * @returns The number of records deleted
545
+ * @throws {C15TError} When the model does not exist in the database
546
+ */
547
+ async deleteMany(data) {
548
+ const { model, where } = data;
549
+ const whereClause = convertWhereClause(model, where);
550
+ const result = await db[getEntityName(model)].deleteMany({
551
+ where: whereClause,
552
+ });
553
+ return result ? (result.count as number) : 0;
554
+ },
555
+
556
+ /**
557
+ * Executes a function within a database transaction
558
+ *
559
+ * This method wraps Prisma's transaction functionality to provide a consistent interface
560
+ * for executing multiple database operations atomically.
561
+ *
562
+ * @typeParam ResultType - The type of data returned by the transaction
563
+ * @param data - The transaction data containing the callback function
564
+ * @returns A promise that resolves with the result of the callback function
565
+ * @throws {Error} If the transaction fails to complete
566
+ */
567
+ async transaction<ResultType>(data: {
568
+ callback: (transactionAdapter: Adapter) => Promise<ResultType>;
569
+ }): Promise<ResultType> {
570
+ const { callback } = data;
571
+
572
+ return db.$transaction(async (tx) => {
573
+ // Create a prisma client instance that uses the transaction context
574
+ const txClient = tx as unknown as PrismaClient;
575
+
576
+ // Create a new adapter instance that uses the transaction client
577
+ const transactionAdapter = prismaAdapter(txClient, config)(options);
578
+
579
+ // Execute the callback function with the transaction adapter
580
+ return await callback(transactionAdapter);
581
+ });
582
+ },
583
+
584
+ options: config,
585
+ };
586
+ };