@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,563 @@
1
+ // /**
2
+ // * Geo Plugin for c15t
3
+ // *
4
+ // * This plugin provides geolocation detection and jurisdiction-based consent management.
5
+ // * It identifies subjects' locations based on their IP addresses and applies appropriate
6
+ // * jurisdiction-specific consent rules based on their geography.
7
+ // *
8
+ // * Features:
9
+ // * - IP-based location detection using various headers or geolocation services
10
+ // * - Jurisdiction mapping based on country/region
11
+ // * - Automatic application of required consent purposes based on jurisdiction
12
+ // * - Client and server APIs for accessing location information
13
+ // *
14
+ // * @example
15
+ // * ```typescript
16
+ // * import { geo, geoClient } from '@c15t/plugins/geo';
17
+ // *
18
+ // * // Server-side setup
19
+ // * const c15t = createc15t({
20
+ // * plugins: [
21
+ // * geo({
22
+ // * jurisdictions: [
23
+ // * {
24
+ // * code: 'GDPR',
25
+ // * countries: ['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE'],
26
+ // * requiredPurposes: ['essential'],
27
+ // * defaultPurposes: []
28
+ // * },
29
+ // * {
30
+ // * code: 'CCPA',
31
+ // * countries: ['US'],
32
+ // * regions: { 'US': ['CA'] },
33
+ // * requiredPurposes: ['essential'],
34
+ // * defaultPurposes: ['analytics']
35
+ // * }
36
+ // * ]
37
+ // * })
38
+ // * ]
39
+ // * });
40
+ // *
41
+ // * // Client-side usage
42
+ // * const client = createc15tClient({
43
+ // * plugins: [geoClient()]
44
+ // * });
45
+ // *
46
+ // * // Get the subject's jurisdiction
47
+ // * const { jurisdiction, country } = await client.geo.getJurisdiction();
48
+ // * console.log(`Subject is in ${country} under ${jurisdiction} jurisdiction`);
49
+ // * ```
50
+ // */
51
+
52
+ // import type { c15tClient } from '~/client';
53
+ // import { createAuthEndpoint, createAuthMiddleware } from '../../api/call';
54
+ // import type {
55
+ // C15TPlugin,
56
+ // LoggerMetadata,
57
+ // C15TContext,
58
+ // EndpointContext,
59
+ // } from '~/types';
60
+ // import type { MiddlewareContext, MiddlewareOptions } from 'better-call';
61
+
62
+ // /**
63
+ // * Extension of the request context with geolocation information
64
+ // *
65
+ // * This interface adds geographic information to request contexts
66
+ // * when using the geo middleware.
67
+ // */
68
+ // interface GeoContext {
69
+ // /**
70
+ // * Geolocation information for the current request
71
+ // */
72
+ // geo?: {
73
+ // /**
74
+ // * IP address of the visitor, used for geolocation
75
+ // */
76
+ // ip: string;
77
+
78
+ // /**
79
+ // * ISO 3166-1 alpha-2 country code (e.g., 'US', 'GB', 'DE')
80
+ // */
81
+ // country?: string;
82
+
83
+ // /**
84
+ // * Region or state code within the country
85
+ // * For the US, this would be the two-letter state code (e.g., 'CA' for California)
86
+ // */
87
+ // region?: string;
88
+
89
+ // /**
90
+ // * Source of the geolocation data (e.g., 'cloudflare-headers', 'ipapi', 'ip-only')
91
+ // */
92
+ // source: string;
93
+ // };
94
+ // }
95
+
96
+ // /**
97
+ // * Configuration options for the geo plugin
98
+ // */
99
+ // interface GeoPluginOptions {
100
+ // /**
101
+ // * Enable geo-targeting functionality
102
+ // * When disabled, no geolocation detection will occur
103
+ // *
104
+ // * @default true
105
+ // */
106
+ // enabled?: boolean;
107
+
108
+ // /**
109
+ // * HTTP headers to check for the client's IP address, in order of preference
110
+ // * The first header that contains a value will be used
111
+ // *
112
+ // * @default ['cf-connecting-ip', 'x-forwarded-for', 'x-real-ip']
113
+ // */
114
+ // ipHeaders?: string[];
115
+
116
+ // /**
117
+ // * Jurisdiction rules for different geographic regions
118
+ // * Used to map countries and regions to specific consent requirements
119
+ // */
120
+ // jurisdictions?: Array<{
121
+ // /**
122
+ // * Unique identifier for the jurisdiction (e.g., 'GDPR', 'CCPA', 'LGPD')
123
+ // */
124
+ // code: string;
125
+
126
+ // /**
127
+ // * Array of ISO 3166-1 alpha-2 country codes this jurisdiction applies to
128
+ // * For example: ['US'] for United States or ['DE', 'FR', 'IT'] for multiple EU countries
129
+ // */
130
+ // countries: string[];
131
+
132
+ // /**
133
+ // * Specific regions within countries where this jurisdiction applies
134
+ // * Useful for state/province-specific regulations like CCPA in California
135
+ // *
136
+ // * @example
137
+ // * ```
138
+ // * regions: { 'US': ['CA', 'VA'] } // For California and Virginia
139
+ // * ```
140
+ // */
141
+ // regions?: Record<string, string[]>;
142
+
143
+ // /**
144
+ // * Consent purposes that must always be accepted in this jurisdiction
145
+ // * These will be automatically set to true regardless of subject choice
146
+ // */
147
+ // requiredPurposes?: string[];
148
+
149
+ // /**
150
+ // * Consent purposes that are enabled by default in this jurisdiction
151
+ // * Subjects can still opt out of these purposes
152
+ // */
153
+ // defaultPurposes?: string[];
154
+ // }>;
155
+
156
+ // /**
157
+ // * Configuration for IP geolocation service
158
+ // */
159
+ // geoService?: {
160
+ // /**
161
+ // * Type of geolocation service to use
162
+ // * - 'cloudflare': Use Cloudflare's country headers (automatically used if available)
163
+ // * - 'maxmind': Use MaxMind GeoIP database (requires separate setup)
164
+ // * - 'ipapi': Use ipapi.co service
165
+ // * - 'custom': Use a custom function to resolve locations
166
+ // */
167
+ // type: 'cloudflare' | 'maxmind' | 'ipapi' | 'custom';
168
+
169
+ // /**
170
+ // * Custom function for geolocation lookup when type is 'custom'
171
+ // *
172
+ // * @param ip - The IP address to look up
173
+ // * @returns Promise resolving to location data or null if not found
174
+ // */
175
+ // getLocation?: (ip: string) => Promise<{
176
+ // country?: string;
177
+ // region?: string;
178
+ // city?: string;
179
+ // } | null>;
180
+
181
+ // /**
182
+ // * API key for services that require authentication
183
+ // */
184
+ // apiKey?: string;
185
+ // };
186
+ // }
187
+
188
+ // /**
189
+ // * Creates a geo plugin instance for c15t
190
+ // *
191
+ // * This plugin adds geolocation capabilities to the consent management system,
192
+ // * allowing for jurisdiction-specific consent rules based on subject location.
193
+ // *
194
+ // * @param options - Configuration options for the geo plugin
195
+ // * @returns A configured geo plugin instance
196
+ // */
197
+ // export const geo = (options?: GeoPluginOptions): C15TPlugin => {
198
+ // const ipHeaders = options?.ipHeaders || [
199
+ // 'cf-connecting-ip',
200
+ // 'x-forwarded-for',
201
+ // 'x-real-ip',
202
+ // ];
203
+
204
+ // // Type for the extended context with geo information
205
+ // type GeoEndpointContext = EndpointContext & GeoContext;
206
+
207
+ // /**
208
+ // * Middleware that detects visitor location from IP address
209
+ // * Adds geo information to the request context
210
+ // */
211
+ // const geoMiddleware = createAuthMiddleware(
212
+ // async (ctx: MiddlewareContext<MiddlewareOptions>) => {
213
+ // // Skip if disabled
214
+ // if (options?.enabled === false) {
215
+ // return { geo: null };
216
+ // }
217
+
218
+ // // Get IP address safely
219
+ // let ip = 'unknown';
220
+ // for (const header of ipHeaders) {
221
+ // const headerValue = ctx.headers?.get?.(header);
222
+ // if (headerValue) {
223
+ // // Handle null or undefined headerValue
224
+ // ip = headerValue.split(',')[0]?.trim() || 'unknown';
225
+ // break;
226
+ // }
227
+ // }
228
+
229
+ // // Get country from Cloudflare headers if available
230
+ // const cfCountry = ctx.headers?.get?.('cf-ipcountry');
231
+ // const cfRegion = ctx.headers?.get?.('cf-region');
232
+
233
+ // if (cfCountry) {
234
+ // return {
235
+ // geo: {
236
+ // ip,
237
+ // country: cfCountry,
238
+ // region: cfRegion || undefined,
239
+ // source: 'cloudflare-headers',
240
+ // },
241
+ // };
242
+ // }
243
+
244
+ // // Otherwise use configured geo service
245
+ // if (options?.geoService) {
246
+ // try {
247
+ // let location = null;
248
+
249
+ // if (
250
+ // options.geoService.type === 'custom' &&
251
+ // options.geoService.getLocation
252
+ // ) {
253
+ // location = await options.geoService.getLocation(ip);
254
+ // } else if (options.geoService.type === 'ipapi') {
255
+ // // Simple IP API implementation
256
+ // const response = await fetch(`https://ipapi.co/${ip}/json/`);
257
+ // if (response.ok) {
258
+ // const data = await response.json();
259
+ // location = {
260
+ // country: data.country_code,
261
+ // region: data.region_code,
262
+ // city: data.city,
263
+ // };
264
+ // }
265
+ // }
266
+ // // Add other geo service implementations as needed
267
+
268
+ // if (location) {
269
+ // return {
270
+ // geo: {
271
+ // ip,
272
+ // ...location,
273
+ // source: options.geoService.type,
274
+ // },
275
+ // };
276
+ // }
277
+ // } catch (error) {
278
+ // ctx.context.logger?.error(
279
+ // 'Error getting geolocation',
280
+ // error as LoggerMetadata
281
+ // );
282
+ // }
283
+ // }
284
+
285
+ // // Fallback - no location data
286
+ // return {
287
+ // geo: {
288
+ // ip,
289
+ // source: 'ip-only',
290
+ // },
291
+ // };
292
+ // }
293
+ // );
294
+
295
+ // return {
296
+ // id: 'geo',
297
+
298
+ // /**
299
+ // * Initialize the geo plugin
300
+ // *
301
+ // * Sets up the plugin configuration and registers it with the c15t instance
302
+ // *
303
+ // * @param context - The c15t consent context
304
+ // * @returns Object containing modifications to options
305
+ // */
306
+ // init(context: C15TContext) {
307
+ // // Add the geo configuration to the global options
308
+ // context.options.geo = {
309
+ // ...context.options.geo,
310
+ // enabled: options?.enabled !== false,
311
+ // };
312
+
313
+ // // Return an object with options to satisfy the return type
314
+ // return {
315
+ // options: {
316
+ // geo: {
317
+ // enabled: options?.enabled !== false,
318
+ // },
319
+ // },
320
+ // };
321
+ // },
322
+
323
+ // endpoints: {
324
+ // /**
325
+ // * Endpoint that returns the detected jurisdiction for the current subject
326
+ // *
327
+ // * This endpoint uses geolocation to determine which jurisdiction's rules
328
+ // * should apply to the current subject, based on their country and region.
329
+ // *
330
+ // * @example
331
+ // * GET /geo/jurisdiction
332
+ // * Response:
333
+ // * {
334
+ // * "jurisdiction": "GDPR",
335
+ // * "country": "DE",
336
+ // * "region": null,
337
+ // * "requiredPurposes": ["essential"],
338
+ // * "defaultPurposes": []
339
+ // * }
340
+ // */
341
+ // getJurisdiction: createAuthEndpoint(
342
+ // '/jurisdiction',
343
+ // {
344
+ // method: 'GET',
345
+ // use: [geoMiddleware],
346
+ // },
347
+ // async (ctx) => {
348
+ // const geo = (ctx as unknown as GeoEndpointContext).geo;
349
+
350
+ // if (!geo || !geo.country) {
351
+ // return ctx.json({
352
+ // jurisdiction: 'UNKNOWN',
353
+ // country: geo?.country || 'UNKNOWN',
354
+ // region: geo?.region,
355
+ // requiredPurposes: [],
356
+ // defaultPurposes: [],
357
+ // });
358
+ // }
359
+
360
+ // // Find applicable jurisdiction
361
+ // let jurisdiction = 'UNKNOWN';
362
+ // let requiredPurposes: string[] = [];
363
+ // let defaultPurposes: string[] = [];
364
+
365
+ // if (options?.jurisdictions && options.jurisdictions.length > 0) {
366
+ // for (const j of options.jurisdictions) {
367
+ // // Check if country matches
368
+ // if (j.countries.includes(geo.country)) {
369
+ // // If regions are specified, check if region matches
370
+ // let regionMatch = true;
371
+ // if (j.regions && geo.region && j.regions[geo.country]) {
372
+ // // Make sure we safely check if regions[country] exists before using includes
373
+ // regionMatch =
374
+ // j.regions[geo.country]?.includes(geo.region) ?? false;
375
+ // }
376
+
377
+ // if (regionMatch) {
378
+ // jurisdiction = j.code;
379
+ // requiredPurposes = j.requiredPurposes || [];
380
+ // defaultPurposes = j.defaultPurposes || [];
381
+ // break;
382
+ // }
383
+ // }
384
+ // }
385
+ // }
386
+
387
+ // return ctx.json({
388
+ // jurisdiction,
389
+ // country: geo.country,
390
+ // region: geo.region,
391
+ // requiredPurposes,
392
+ // defaultPurposes,
393
+ // });
394
+ // }
395
+ // ),
396
+
397
+ // /**
398
+ // * Endpoint that returns geolocation information for the current subject
399
+ // *
400
+ // * This endpoint provides raw geolocation data, including IP address
401
+ // * and detected country/region.
402
+ // *
403
+ // * @example
404
+ // * GET /geo/location
405
+ // * Response:
406
+ // * {
407
+ // * "ip": "203.0.113.195",
408
+ // * "country": "US",
409
+ // * "region": "CA",
410
+ // * "source": "cloudflare-headers"
411
+ // * }
412
+ // */
413
+ // getGeoInfo: createAuthEndpoint(
414
+ // '/location',
415
+ // {
416
+ // method: 'GET',
417
+ // use: [geoMiddleware],
418
+ // },
419
+ // async (ctx) => {
420
+ // // Return the geo information that was added by the middleware
421
+ // const geo = (ctx as unknown as GeoEndpointContext).geo;
422
+
423
+ // return ctx.json({
424
+ // ip: geo?.ip,
425
+ // country: geo?.country,
426
+ // region: geo?.region,
427
+ // source: geo?.source,
428
+ // });
429
+ // }
430
+ // ),
431
+ // },
432
+
433
+ // hooks: {
434
+ // /**
435
+ // * Before-request hooks to apply jurisdiction rules
436
+ // *
437
+ // * These hooks are executed before processing consent-related requests
438
+ // * and automatically apply jurisdiction-specific rules.
439
+ // */
440
+ // before: [
441
+ // {
442
+ // /**
443
+ // * Hook matcher for consent update requests
444
+ // *
445
+ // * @param context - Request context
446
+ // * @returns Whether this hook should run for the given request
447
+ // */
448
+ // matcher(context) {
449
+ // return context.path === '/update-consent';
450
+ // },
451
+
452
+ // /**
453
+ // * Hook handler that applies jurisdiction-specific consent rules
454
+ // *
455
+ // * This enforces required consent purposes based on the subject's jurisdiction.
456
+ // * For example, in GDPR regions, essential cookies would be required.
457
+ // *
458
+ // * @param ctx - Request context
459
+ // */
460
+ // async handler(ctx) {
461
+ // // If geo plugin is enabled, apply jurisdiction-specific rules
462
+ // if (options?.enabled === false) {
463
+ // return;
464
+ // }
465
+
466
+ // // Get geo information from middleware
467
+ // await geoMiddleware(ctx);
468
+
469
+ // // Access the geo object directly from the context after middleware has run
470
+ // const geoInfo = (ctx as unknown as GeoEndpointContext).geo;
471
+
472
+ // if (!geoInfo?.country) {
473
+ // return;
474
+ // }
475
+
476
+ // // Find applicable jurisdiction
477
+ // if (options?.jurisdictions) {
478
+ // for (const j of options.jurisdictions) {
479
+ // const countryMatch = j.countries.includes(geoInfo.country);
480
+ // let regionMatch = true;
481
+
482
+ // // Check region if specified
483
+ // if (countryMatch && geoInfo.region && j.regions) {
484
+ // // Use optional chaining and nullish coalescing to safely check for region match
485
+ // regionMatch =
486
+ // j.regions[geoInfo.country]?.includes(geoInfo.region) ??
487
+ // false;
488
+ // }
489
+
490
+ // if (countryMatch && regionMatch) {
491
+ // // Apply jurisdiction-specific rules
492
+ // if (j.requiredPurposes && j.requiredPurposes.length > 0) {
493
+ // // Ensure required purposes have consent
494
+ // const body = ctx.body as Record<string, unknown>;
495
+ // if (body.preferences) {
496
+ // for (const purposeId of j.requiredPurposes) {
497
+ // (body.preferences as Record<string, boolean>)[
498
+ // purposeId
499
+ // ] = true;
500
+ // }
501
+ // }
502
+ // }
503
+ // break;
504
+ // }
505
+ // }
506
+ // }
507
+ // },
508
+ // },
509
+ // ],
510
+ // },
511
+ // };
512
+ // };
513
+
514
+ // /**
515
+ // * Creates a client-side geo plugin
516
+ // *
517
+ // * This plugin adds geolocation methods to the c15t client instance,
518
+ // * allowing client-side code to access subject location and jurisdiction information.
519
+ // *
520
+ // * @example
521
+ // * ```typescript
522
+ // * const client = createc15tClient({
523
+ // * plugins: [geoClient()]
524
+ // * });
525
+ // *
526
+ // * // Get jurisdiction information
527
+ // * const { jurisdiction, country, requiredPurposes } = await client.geo.getJurisdiction();
528
+ // *
529
+ // * // Get raw location data
530
+ // * const { ip, country, region } = await client.geo.getLocation();
531
+ // * ```
532
+ // *
533
+ // * @returns A client plugin with geo methods
534
+ // */
535
+ // export const geoClient = () => {
536
+ // return {
537
+ // id: 'geo',
538
+ // methods: {
539
+ // /**
540
+ // * Gets the detected jurisdiction for the current subject
541
+ // *
542
+ // * @returns Promise resolving to jurisdiction information
543
+ // */
544
+ // getJurisdiction: async function (this: c15tClient) {
545
+ // return this.$fetch('/geo/jurisdiction', {
546
+ // method: 'GET',
547
+ // });
548
+ // },
549
+
550
+ // /**
551
+ // * Gets geolocation information for the current subject
552
+ // *
553
+ // * @returns Promise resolving to location data
554
+ // */
555
+ // getLocation: async function (this: c15tClient) {
556
+ // return this.$fetch('/geo/location', {
557
+ // method: 'GET',
558
+ // });
559
+ // },
560
+ // },
561
+ // $InferServerPlugin: {} as ReturnType<typeof geo>,
562
+ // };
563
+ // };