@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,189 @@
1
+ import type { C15TMiddleware } from '~/api/call';
2
+ /**
3
+ * c15t Consent Management System Configuration Types
4
+ *
5
+ * This module defines the configuration options for the c15t consent management system.
6
+ * It includes types for setting up storage, API endpoints, cookies, rate limiting,
7
+ * analytics, geo-targeting, plugins, logging, and other advanced features.
8
+ */
9
+ import type { Logger } from '../utils/logger';
10
+ import type { C15TContext, C15TPlugin } from './index';
11
+
12
+ import type { DatabaseConfiguration } from '~/db/adapters/kysely-adapter/types';
13
+ import type { EntityName } from '~/db/core/types';
14
+ import type { DatabaseHook } from '~/db/hooks/types';
15
+
16
+ // Import table configuration types from the schema module
17
+ import type { TablesConfig } from '~/db/schema/types';
18
+
19
+ /**
20
+ * Main configuration options for the c15t consent management system
21
+ *
22
+ * This interface provides a comprehensive set of options for configuring
23
+ * all aspects of the consent management system, including core functionality,
24
+ * database settings, UI components, and plugin extensions.
25
+ *
26
+ * @typeParam P - Array of plugin types to be used with this configuration
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * // Basic configuration
31
+ * const config: C15TOptions = {
32
+ * appName: 'My Application',
33
+ * baseURL: 'https://example.com',
34
+ * secret: 'strong-secret-key',
35
+ * plugins: [geoPlugin, analyticsPlugin]
36
+ * };
37
+ * ```
38
+ */
39
+ export interface C15TOptions<P extends C15TPlugin[] = C15TPlugin[]> {
40
+ /**
41
+ * The base URL for the API (optional if running in a browser)
42
+ * @example "https://example.com"
43
+ */
44
+ baseURL?: string;
45
+
46
+ /**
47
+ * The base path for API endpoints
48
+ * @default "/api/c15t"
49
+ * @example "/api/c15t"
50
+ */
51
+ basePath?: string;
52
+
53
+ /**
54
+ * Application name shown in consent dialogs
55
+ * @example "My App"
56
+ */
57
+ appName?: string;
58
+
59
+ /**
60
+ * Secret used for signing cookies and tokens
61
+ * Should be a strong, unique string in production environments
62
+ */
63
+ secret?: string;
64
+
65
+ /**
66
+ * Database configuration
67
+ */
68
+ database?: DatabaseConfiguration;
69
+
70
+ /**
71
+ * Enable CORS support
72
+ * @default true
73
+ */
74
+ cors?: boolean;
75
+
76
+ /**
77
+ * Trusted origins for CORS
78
+ * Can be an array of origin strings or a function that returns origins based on the request
79
+ * @example ["https://example.com", "https://www.example.com"]
80
+ */
81
+ trustedOrigins?: string[] | ((request: Request) => string[]);
82
+
83
+ /**
84
+ * Plugins to extend functionality
85
+ * Array of plugin objects that add features to the consent system
86
+ */
87
+ plugins?: P;
88
+
89
+ /**
90
+ * Logger configuration
91
+ * Controls how events are logged
92
+ */
93
+ logger?: Logger;
94
+
95
+ /**
96
+ * allows you to define custom hooks that can be
97
+ * executed during lifecycle of core database
98
+ * operations.
99
+ */
100
+ databaseHooks?: DatabaseHook[];
101
+ /*
102
+ * Advanced configuration options
103
+ * Settings for specialized use cases
104
+ */
105
+ advanced?: {
106
+ /**
107
+ * Ip address configuration
108
+ */
109
+ ipAddress?: {
110
+ /**
111
+ * List of headers to use for ip address
112
+ *
113
+ * Ip address is used for rate limiting and session tracking
114
+ *
115
+ * @example ["x-client-ip", "x-forwarded-for"]
116
+ *
117
+ * @default
118
+ * @link https://github.com/c15t/c15t/blob/main/packages/c15t/src/utils/get-request-ip.ts#L8
119
+ */
120
+ ipAddressHeaders?: string[];
121
+ /**
122
+ * Disable ip tracking
123
+ *
124
+ * ⚠︎ This is a security risk and it may expose your application to abuse
125
+ */
126
+ disableIpTracking?: boolean;
127
+ };
128
+
129
+ /**
130
+ * Disable trusted origins check
131
+ *
132
+ * ⚠︎ This is a security risk and it may expose your application to CSRF attacks
133
+ */
134
+ disableCSRFCheck?: boolean;
135
+
136
+ /**
137
+ * Function to generate IDs
138
+ * Custom ID generation for consent records and other entities
139
+ */
140
+ generateId?: (options: { model: EntityName; size?: number }) => string;
141
+
142
+ /**
143
+ * Disable database transactions
144
+ *
145
+ * When true, operations will execute directly without transaction support.
146
+ * Useful for databases that don't support transactions or when you want to bypass transaction overhead.
147
+ *
148
+ * @default false
149
+ */
150
+ disableTransactions?: boolean;
151
+ };
152
+ /**
153
+ * API error handling
154
+ */
155
+ onAPIError?: {
156
+ /**
157
+ * Throw an error on API error
158
+ *
159
+ * @default false
160
+ */
161
+ throw?: boolean;
162
+ /**
163
+ * Custom error handler
164
+ *
165
+ * @param error
166
+ * @param ctx - Auth context
167
+ */
168
+ onError?: (error: unknown, ctx: C15TContext) => void | Promise<void>;
169
+ };
170
+ /**
171
+ * Hooks
172
+ */
173
+ hooks?: {
174
+ /**
175
+ * Before a request is processed
176
+ */
177
+ before?: C15TMiddleware;
178
+ /**
179
+ * After a request is processed
180
+ */
181
+ after?: C15TMiddleware;
182
+ };
183
+
184
+ /**
185
+ * Database tables configuration
186
+ * Contains all entity table configurations
187
+ */
188
+ tables?: TablesConfig;
189
+ }
@@ -0,0 +1,538 @@
1
+ import type { UnionToIntersection } from '@better-fetch/fetch';
2
+ /**
3
+ * Plugin System for c15t Consent Management
4
+ *
5
+ * This module defines the plugin system architecture for the c15t consent management system.
6
+ * Plugins provide a way to extend functionality with additional features like analytics,
7
+ * geolocation, custom consent flows, and more.
8
+ */
9
+ import type { Endpoint } from 'better-call';
10
+ import type { Migration } from 'kysely';
11
+ import type { C15TMiddleware } from '~/api/call';
12
+ import type { Field } from '~/db/core/fields';
13
+ import type {
14
+ C15TContext,
15
+ C15TOptions,
16
+ DeepPartial,
17
+ HookEndpointContext,
18
+ LiteralString,
19
+ } from './index';
20
+
21
+ /**
22
+ * Context object provided to plugin hooks
23
+ *
24
+ * This extends the standard endpoint context with additional properties
25
+ * specific to plugin hooks, such as the request path and geolocation data.
26
+ */
27
+ export interface PluginHookContext {
28
+ /**
29
+ * The path of the current request
30
+ */
31
+ path: string;
32
+
33
+ /**
34
+ * Geolocation information (added by the geo plugin)
35
+ */
36
+ geo?: {
37
+ /**
38
+ * IP address of the request
39
+ */
40
+ ip: string;
41
+
42
+ /**
43
+ * Country code (ISO 3166-1 alpha-2)
44
+ */
45
+ country?: string;
46
+
47
+ /**
48
+ * Region or state code
49
+ */
50
+ region?: string;
51
+
52
+ /**
53
+ * Source of the geolocation data
54
+ */
55
+ source: string;
56
+ };
57
+ }
58
+
59
+ /**
60
+ * Plugin hook definition
61
+ *
62
+ * Hooks are used to run custom logic at specific points in the request lifecycle.
63
+ * Each hook includes a matcher function to determine when it should run and
64
+ * a handler function that contains the actual logic.
65
+ */
66
+ export interface PluginHook {
67
+ /**
68
+ * A function to determine if this hook should run for the current request
69
+ *
70
+ * @param context - The hook context with request details
71
+ * @returns True if the hook should run, false otherwise
72
+ */
73
+ matcher: (context: PluginHookContext) => boolean;
74
+
75
+ /**
76
+ * The hook handler that runs if matcher returns true
77
+ *
78
+ * @param context - The hook context with request details
79
+ * @returns A Promise that resolves when the hook completes, or void
80
+ */
81
+ handler: (context: PluginHookContext) => Promise<void> | void;
82
+ }
83
+
84
+ /**
85
+ * c15t Plugin Definition
86
+ *
87
+ * This interface defines the structure of a plugin for the c15t consent management system.
88
+ * Plugins can add endpoints, hooks, error codes, and custom functionality.
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * const myPlugin: C15TPlugin = {
93
+ * id: 'my-plugin',
94
+ * init: (context) => {
95
+ * // Initialize plugin
96
+ * },
97
+ * endpoints: {
98
+ * myEndpoint: createEndpoint('/my-endpoint', async (ctx) => {
99
+ * return ctx.json({ success: true });
100
+ * })
101
+ * }
102
+ * };
103
+ * ```
104
+ */
105
+ export interface C15TPlugin {
106
+ /**
107
+ * Unique identifier for the plugin
108
+ * Must be a string literal for type safety
109
+ */
110
+ id: LiteralString;
111
+
112
+ /**
113
+ * Name of the plugin
114
+ */
115
+ name: string;
116
+
117
+ /**
118
+ * Type of plugin for classification and type guards
119
+ */
120
+ type: string;
121
+
122
+ /**
123
+ * The init function is called when the plugin is initialized.
124
+ * You can return a new context or modify the existing context.
125
+ *
126
+ * @param ctx - The c15t context
127
+ * @returns An object with context or options modifications, or undefined
128
+ */
129
+ init?: (ctx: C15TContext) =>
130
+ | {
131
+ context?: DeepPartial<Omit<C15TContext, 'options'>>;
132
+ options?: Partial<C15TOptions>;
133
+ }
134
+ | undefined;
135
+
136
+ /**
137
+ * Custom API endpoints provided by this plugin
138
+ * Each key is the endpoint name, and the value is the endpoint handler
139
+ */
140
+ endpoints?: {
141
+ [key: string]: Endpoint;
142
+ };
143
+
144
+ /**
145
+ * Middleware functions to process requests for specific paths
146
+ * Each middleware includes a path pattern and the middleware function
147
+ */
148
+ middlewares?: {
149
+ path: string;
150
+ middleware: Endpoint;
151
+ }[];
152
+
153
+ /**
154
+ * Handler for intercepting and potentially modifying incoming requests
155
+ *
156
+ * @param request - The incoming HTTP request
157
+ * @param ctx - The c15t context
158
+ * @returns A modified request, a response to short-circuit handling, or undefined to continue
159
+ */
160
+ onRequest?: (
161
+ request: Request,
162
+ ctx: C15TContext
163
+ ) => Promise<
164
+ | {
165
+ response: Response;
166
+ }
167
+ | {
168
+ request: Request;
169
+ }
170
+ | undefined
171
+ >;
172
+
173
+ /**
174
+ * Handler for intercepting and potentially modifying outgoing responses
175
+ *
176
+ * @param response - The outgoing HTTP response
177
+ * @param ctx - The c15t context
178
+ * @returns A modified response or undefined to continue with the original
179
+ */
180
+ onResponse?: (
181
+ response: Response,
182
+ ctx: C15TContext
183
+ ) => Promise<
184
+ | {
185
+ response: Response;
186
+ }
187
+ | undefined
188
+ >;
189
+
190
+ /**
191
+ * Request lifecycle hooks for executing code before or after endpoint handling
192
+ */
193
+ hooks?: {
194
+ /**
195
+ * Hooks that run before the endpoint handler
196
+ * Each hook has a matcher to determine when it should run
197
+ */
198
+ before?: {
199
+ matcher: (context: HookEndpointContext) => boolean;
200
+ handler: C15TMiddleware;
201
+ }[];
202
+
203
+ /**
204
+ * Hooks that run after the endpoint handler has completed
205
+ * Each hook has a matcher to determine when it should run
206
+ */
207
+ after?: {
208
+ matcher: (context: HookEndpointContext) => boolean;
209
+ handler: C15TMiddleware;
210
+ }[];
211
+ };
212
+
213
+ /**
214
+ * Schema the plugin needs
215
+ *
216
+ * This will also be used to migrate the database. If the fields are dynamic from the plugins
217
+ * configuration each time the configuration is changed a new migration will be created.
218
+ *
219
+ * NOTE: If you want to create migrations manually using
220
+ * migrations option or any other way you
221
+ * can disable migration per table basis.
222
+ *
223
+ * @example
224
+ * ```ts
225
+ * schema: {
226
+ * subject: {
227
+ * fields: {
228
+ * email: {
229
+ * type: "string",
230
+ * },
231
+ * emailVerified: {
232
+ * type: "boolean",
233
+ * defaultValue: false,
234
+ * },
235
+ * },
236
+ * }
237
+ * } as AuthPluginSchema
238
+ * ```
239
+ */
240
+ schema?: C15TPluginSchema;
241
+
242
+ /**
243
+ * The migrations of the plugin. If you define schema that will automatically create
244
+ * migrations for you.
245
+ *
246
+ * ⚠️ Only uses this if you dont't want to use the schema option and you disabled migrations for
247
+ * the tables.
248
+ */
249
+ migrations?: Record<string, Migration>;
250
+
251
+ /**
252
+ * The options of the plugin
253
+ */
254
+ options?: Record<string, unknown>;
255
+
256
+ /**
257
+ * Types to be inferred by the type system
258
+ * Used for type information in the plugin system
259
+ */
260
+ $Infer?: Record<string, unknown>;
261
+
262
+ /**
263
+ * The error codes returned by the plugin
264
+ * Used for consistent error handling across the system
265
+ */
266
+ $ERROR_CODES?: Record<string, string>;
267
+
268
+ /**
269
+ * Type information for context extensions provided by this plugin
270
+ * This will be used to properly type the context in hooks and methods
271
+ */
272
+ $InferContext?: Record<string, unknown>;
273
+ }
274
+
275
+ /**
276
+ * Improved type inference for plugin types
277
+ *
278
+ * This type utility extracts all plugin type definitions from configuration options,
279
+ * allowing for comprehensive type checking of plugin features.
280
+ *
281
+ * @typeParam TOptions - The c15t configuration options type
282
+ *
283
+ * @example
284
+ * ```ts
285
+ * // Get all plugin types from configuration
286
+ * type AllPluginTypes = ExtractPluginTypeDefinitions<MyAppOptions>;
287
+ *
288
+ * // Types will include all properties from all plugins' $Infer fields
289
+ * ```
290
+ */
291
+ export type ExtractPluginTypeDefinitions<TOptions extends C15TOptions> =
292
+ TOptions['plugins'] extends Array<infer Plugin>
293
+ ? Plugin extends C15TPlugin
294
+ ? Plugin extends { $Infer: infer PluginTypes }
295
+ ? PluginTypes extends Record<string, unknown>
296
+ ? PluginTypes
297
+ : Record<string, never>
298
+ : Record<string, never>
299
+ : Record<string, never>
300
+ : Record<string, never>;
301
+
302
+ /**
303
+ * Helper to extract specific plugin type from options
304
+ *
305
+ * This type utility finds plugins of a specific type from a configuration
306
+ * object, enabling type-safe access to plugin instances.
307
+ *
308
+ * @typeParam O - The c15t configuration options type
309
+ * @typeParam T - The plugin type string to extract
310
+ *
311
+ * @example
312
+ * ```ts
313
+ * // Extract all analytics plugins from configuration
314
+ * type MyAnalyticsPlugins = ExtractPluginType<MyAppOptions, 'analytics'>;
315
+ * ```
316
+ */
317
+ export type ExtractPluginType<
318
+ O extends C15TOptions,
319
+ T extends string,
320
+ > = O['plugins'] extends Array<infer P>
321
+ ? P extends C15TPlugin
322
+ ? P extends { type: T }
323
+ ? P
324
+ : never
325
+ : never
326
+ : never;
327
+
328
+ /**
329
+ * Type-safe plugin factory function
330
+ *
331
+ * A type definition for functions that create plugin instances with proper typing.
332
+ *
333
+ * @typeParam T - The specific plugin type being created
334
+ *
335
+ * @example
336
+ * ```ts
337
+ * // Create a type-safe plugin factory
338
+ * const createAnalyticsPlugin: PluginFactory<AnalyticsPlugin> =
339
+ * (options) => ({
340
+ * id: options?.id || 'analytics',
341
+ * type: 'analytics',
342
+ * // Other plugin properties
343
+ * analyticsOptions: options?.analyticsOptions
344
+ * });
345
+ * ```
346
+ */
347
+ export type PluginFactory<T extends C15TPlugin> = (
348
+ options?: Omit<T, 'id' | 'type'> & { id?: string }
349
+ ) => T;
350
+
351
+ /**
352
+ * Infer plugin error codes from configuration options
353
+ *
354
+ * This type utility extracts the error codes defined by plugins from a configuration object,
355
+ * allowing TypeScript to understand the possible error codes.
356
+ *
357
+ * @typeParam O - The c15t configuration options type
358
+ *
359
+ * @example
360
+ * ```ts
361
+ * // Get all error codes from plugins
362
+ * type AllErrorCodes = InferPluginErrorCodes<MyAppOptions>;
363
+ * ```
364
+ */
365
+ export type InferPluginErrorCodes<O extends C15TOptions> =
366
+ O['plugins'] extends Array<infer P>
367
+ ? P extends C15TPlugin
368
+ ? P['$ERROR_CODES'] extends infer EC
369
+ ? EC extends Record<string, unknown>
370
+ ? EC
371
+ : Record<string, never>
372
+ : Record<string, never>
373
+ : Record<string, never>
374
+ : Record<string, never>;
375
+
376
+ /**
377
+ * Schema type for plugin database extensions
378
+ *
379
+ * This defines the structure for database schema extensions provided by plugins,
380
+ * including table definitions, fields, and migration controls.
381
+ */
382
+ export type C15TPluginSchema = {
383
+ [table in string]: {
384
+ /**
385
+ * Field definitions for this table
386
+ */
387
+ fields: {
388
+ [field in string]: Field;
389
+ };
390
+
391
+ /**
392
+ * Whether to disable automatic migration generation for this table
393
+ */
394
+ disableMigration?: boolean;
395
+
396
+ /**
397
+ * Custom entity name for this table
398
+ */
399
+ entityName?: string;
400
+ };
401
+ };
402
+
403
+ /**
404
+ * Analytics plugin type definition
405
+ *
406
+ * Specialized plugin type for analytics functionality with type-safe options.
407
+ *
408
+ * @example
409
+ * ```ts
410
+ * // Create an analytics plugin
411
+ * const analytics: AnalyticsPlugin = {
412
+ * id: 'google-analytics',
413
+ * type: 'analytics',
414
+ * analyticsOptions: {
415
+ * trackingEvents: ['consent_given', 'consent_withdrawn'],
416
+ * anonymizeData: true
417
+ * }
418
+ * };
419
+ * ```
420
+ */
421
+ export interface AnalyticsPlugin extends C15TPlugin {
422
+ type: 'analytics';
423
+ analyticsOptions?: {
424
+ /**
425
+ * List of events to track
426
+ */
427
+ trackingEvents: string[];
428
+
429
+ /**
430
+ * Whether to anonymize subject data
431
+ */
432
+ anonymizeData?: boolean;
433
+ };
434
+ }
435
+
436
+ /**
437
+ * Geolocation plugin type definition
438
+ *
439
+ * Specialized plugin type for geolocation functionality with type-safe options.
440
+ *
441
+ * @example
442
+ * ```ts
443
+ * // Create a geolocation plugin
444
+ * const geo: GeoPlugin = {
445
+ * id: 'maxmind',
446
+ * type: 'geo',
447
+ * geoOptions: {
448
+ * defaultJurisdiction: 'EU',
449
+ * ipLookupService: 'https://geo.example.com'
450
+ * }
451
+ * };
452
+ * ```
453
+ */
454
+ export interface GeoPlugin extends C15TPlugin {
455
+ type: 'geo';
456
+ geoOptions?: {
457
+ /**
458
+ * Default jurisdiction to use when geolocation fails
459
+ */
460
+ defaultJurisdiction?: string;
461
+
462
+ /**
463
+ * Service URL for IP address lookups
464
+ */
465
+ ipLookupService?: string;
466
+ };
467
+ }
468
+
469
+ /**
470
+ * Type guard to check if a plugin is an analytics plugin
471
+ *
472
+ * @param plugin - The plugin to check
473
+ * @returns True if the plugin is an analytics plugin
474
+ *
475
+ * @example
476
+ * ```ts
477
+ * if (isAnalyticsPlugin(plugin)) {
478
+ * // Can safely access analyticsOptions
479
+ * const events = plugin.analyticsOptions?.trackingEvents;
480
+ * }
481
+ * ```
482
+ */
483
+ export function isAnalyticsPlugin(
484
+ plugin: C15TPlugin
485
+ ): plugin is AnalyticsPlugin {
486
+ return plugin.type === 'analytics';
487
+ }
488
+
489
+ /**
490
+ * Type guard to check if a plugin is a geo plugin
491
+ *
492
+ * @param plugin - The plugin to check
493
+ * @returns True if the plugin is a geo plugin
494
+ *
495
+ * @example
496
+ * ```ts
497
+ * if (isGeoPlugin(plugin)) {
498
+ * // Can safely access geoOptions
499
+ * const defaultRegion = plugin.geoOptions?.defaultJurisdiction;
500
+ * }
501
+ * ```
502
+ */
503
+ export function isGeoPlugin(plugin: C15TPlugin): plugin is GeoPlugin {
504
+ return plugin.type === 'geo';
505
+ }
506
+
507
+ /**
508
+ * Helper to extract plugin context types from plugin array
509
+ *
510
+ * This utility combines all context extensions from an array of plugins
511
+ * into a single type, allowing for proper typing of the complete context.
512
+ *
513
+ * @typeParam PluginArray - Array of plugin types
514
+ *
515
+ * @example
516
+ * ```ts
517
+ * // Given plugins array with plugins that extend context
518
+ * const plugins = [authPlugin, geoPlugin, analyticsPlugin];
519
+ *
520
+ * // Get combined context type from all plugins
521
+ * type MyAppContext = InferPluginContexts<typeof plugins>;
522
+ *
523
+ * // Context will have auth, geo, and analytics properties with correct types
524
+ * ```
525
+ */
526
+ export type InferPluginContexts<PluginArray extends C15TPlugin[]> =
527
+ UnionToIntersection<
528
+ PluginArray extends Array<infer SinglePlugin>
529
+ ? SinglePlugin extends C15TPlugin
530
+ ? SinglePlugin extends { $InferContext: infer ContextType }
531
+ ? ContextType extends Record<string, unknown>
532
+ ? ContextType
533
+ : Record<string, never>
534
+ : Record<string, never>
535
+ : Record<string, never>
536
+ : Record<string, never>
537
+ > &
538
+ Record<string, unknown>;