@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,327 @@
1
+ import { z } from 'zod';
2
+ import type { EntityOutputFields } from '~/db/schema/definition';
3
+ import { BASE_ERROR_CODES, C15TError } from '~/error';
4
+ import type { C15TContext } from '../../types';
5
+ import { createAuthEndpoint } from '../call';
6
+
7
+ // Define the schema for the base parameters (domain is always required)
8
+ const baseParamsSchema = z.object({
9
+ domain: z.string(),
10
+ version: z.string().optional(),
11
+ includePreferences: z.boolean().optional().default(true),
12
+ });
13
+
14
+ // Define schemas for the different identification methods (all optional)
15
+ const subjectIdentifierSchema = z.object({
16
+ subjectId: z.string().optional(),
17
+ externalId: z.string().optional(),
18
+ ipAddress: z.string().optional(),
19
+ });
20
+
21
+ // Combine the schemas
22
+ const getPolicySchema = baseParamsSchema.merge(subjectIdentifierSchema);
23
+
24
+ export interface GetPolicyResponse {
25
+ success: boolean;
26
+ data: {
27
+ policy: {
28
+ id: string;
29
+ domain: string;
30
+ version: string;
31
+ content: string;
32
+ availablePreferences?: Record<string, unknown>;
33
+ createdAt: string;
34
+ };
35
+ subjectConsentStatus?: {
36
+ hasConsent: boolean;
37
+ currentPreferences: Record<string, string | null> | null;
38
+ consentedAt: string | null;
39
+ needsRenewal: boolean;
40
+ identifiedBy: string | null;
41
+ };
42
+ };
43
+ }
44
+
45
+ /**
46
+ * Endpoint for retrieving consent policy information.
47
+ *
48
+ * This endpoint allows clients to retrieve the consent policy for a domain.
49
+ * It supports retrieving the latest policy or a specific version.
50
+ * It can also return personalized policy information if subject identifiers are provided.
51
+ *
52
+ * @endpoint GET /consent/policy
53
+ * @requestExample
54
+ * ```
55
+ * // Basic policy request
56
+ * GET /api/consent/policy?domain=example.com
57
+ * ```
58
+ *
59
+ * @requestExample
60
+ * ```
61
+ * // Specific version
62
+ * GET /api/consent/policy?domain=example.com&version=1.2
63
+ * ```
64
+ *
65
+ * @requestExample
66
+ * ```
67
+ * // With subject context
68
+ * GET /api/consent/policy?domain=example.com&subjectId=550e8400-e29b-41d4-a716-446655440000
69
+ * ```
70
+ *
71
+ * @responseExample
72
+ * ```json
73
+ * {
74
+ * "success": true,
75
+ * "data": {
76
+ * "policy": {
77
+ * "id": 1,
78
+ * "domain": "example.com",
79
+ * "version": "1.0",
80
+ * "content": {
81
+ * "title": "Privacy Policy",
82
+ * "description": "How we use your data",
83
+ * "lastUpdated": "2023-04-01"
84
+ * },
85
+ * "availablePreferences": {
86
+ * "marketing": {
87
+ * "title": "Marketing",
88
+ * "description": "Allow us to send you marketing communications",
89
+ * "default": false
90
+ * },
91
+ * "analytics": {
92
+ * "title": "Analytics",
93
+ * "description": "Allow us to collect usage data to improve our service",
94
+ * "default": true
95
+ * }
96
+ * },
97
+ * "createdAt": "2023-04-01T12:34:56.789Z"
98
+ * },
99
+ * "subjectConsentStatus": {
100
+ * "hasConsent": true,
101
+ * "currentPreferences": {
102
+ * "marketing": null,
103
+ * "analytics": "2023-04-02T10:30:00.000Z"
104
+ * },
105
+ * "consentedAt": "2023-04-02T10:30:00.000Z",
106
+ * "needsRenewal": false
107
+ * }
108
+ * }
109
+ * }
110
+ * ```
111
+ *
112
+ * @returns {Object} Result of getting policy
113
+ * @returns {boolean} success - Whether the request was successful
114
+ * @returns {Object} data - The policy data
115
+ * @returns {Object} data.policy - The consent policy information
116
+ * @returns {Object} [data.subjectConsentStatus] - Subject's consent status if subject identifiers were provided
117
+ *
118
+ * @throws {C15TError} BAD_REQUEST - When request parameters are invalid
119
+ * @throws {C15TError} NOT_FOUND - When the domain or policy version doesn't exist
120
+ */
121
+ export const getConsentPolicy = createAuthEndpoint(
122
+ '/consent/policy',
123
+ {
124
+ method: 'GET',
125
+ query: getPolicySchema,
126
+ },
127
+ async (ctx) => {
128
+ try {
129
+ const validatedData = getPolicySchema.safeParse(ctx.query);
130
+
131
+ if (!validatedData.success) {
132
+ throw new C15TError('BAD_REQUEST', {
133
+ code: BASE_ERROR_CODES.BAD_REQUEST,
134
+ status: 400,
135
+ data: {
136
+ message: 'Invalid request data',
137
+ details: validatedData.error.errors,
138
+ },
139
+ });
140
+ }
141
+
142
+ const params = validatedData.data;
143
+ const { registry } = ctx.context as C15TContext;
144
+
145
+ if (!registry) {
146
+ throw new C15TError('INTERNAL_SERVER_ERROR', {
147
+ code: BASE_ERROR_CODES.INTERNAL_SERVER_ERROR,
148
+ status: 503,
149
+ data: {
150
+ message: 'Registry not available',
151
+ },
152
+ });
153
+ }
154
+
155
+ // Find domain
156
+ let domain: EntityOutputFields<'domain'> | null = null;
157
+ try {
158
+ if (registry.findDomain) {
159
+ domain = await registry.findDomain(params.domain);
160
+ }
161
+ } catch {
162
+ throw new C15TError(
163
+ 'The specified domain could not be found. Please verify the domain name and try again.',
164
+ {
165
+ code: BASE_ERROR_CODES.NOT_FOUND,
166
+ status: 404,
167
+ data: {
168
+ domain: params.domain,
169
+ },
170
+ }
171
+ );
172
+ }
173
+
174
+ if (!domain) {
175
+ throw new C15TError(
176
+ 'The specified domain could not be found. Please verify the domain name and try again.',
177
+ {
178
+ code: BASE_ERROR_CODES.NOT_FOUND,
179
+ status: 404,
180
+ data: {
181
+ domain: params.domain,
182
+ },
183
+ }
184
+ );
185
+ }
186
+
187
+ // Find the policy
188
+ let policy: EntityOutputFields<'consentPolicy'> | null = null;
189
+ try {
190
+ if (registry.findPolicy) {
191
+ policy = await registry.findPolicy(domain.id, params.version);
192
+ }
193
+ } catch {
194
+ throw new C15TError(
195
+ params.version
196
+ ? `The specified policy version ${params.version} for domain ${params.domain} could not be found. Please verify the version number and domain name, and try again.`
197
+ : `No policy could be found for the domain ${params.domain}. Please ensure the domain name is correct and try again.`,
198
+ {
199
+ code: BASE_ERROR_CODES.NOT_FOUND,
200
+ status: 404,
201
+ data: {
202
+ domain: params.domain,
203
+ version: params.version,
204
+ },
205
+ }
206
+ );
207
+ }
208
+
209
+ if (!policy) {
210
+ throw new C15TError(
211
+ params.version
212
+ ? `The specified policy version ${params.version} for domain ${params.domain} could not be found. Please verify the version number and domain name, and try again.`
213
+ : `No policy could be found for the domain ${params.domain}. Please ensure the domain name is correct and try again.`,
214
+ {
215
+ code: BASE_ERROR_CODES.NOT_FOUND,
216
+ status: 404,
217
+ data: {
218
+ domain: params.domain,
219
+ version: params.version,
220
+ },
221
+ }
222
+ );
223
+ }
224
+
225
+ // Format basic response
226
+ const response: GetPolicyResponse = {
227
+ success: true,
228
+ data: {
229
+ policy: {
230
+ id: policy.id,
231
+ domain: params.domain,
232
+ version: policy.version,
233
+ content: policy.content,
234
+ availablePreferences: params.includePreferences
235
+ ? //@ts-expect-error
236
+ policy.availablePreferences
237
+ : undefined,
238
+ createdAt: policy.createdAt.toISOString(),
239
+ },
240
+ },
241
+ };
242
+
243
+ // If subject identifiers were provided, try to find the subject's consent status
244
+ if (params.subjectId || params.externalId || params.ipAddress) {
245
+ let subjectRecord: EntityOutputFields<'subject'> | null = null;
246
+ let identifierUsed: string | null = null;
247
+
248
+ // Try to find subject by subjectId
249
+ if (params.subjectId) {
250
+ subjectRecord = await registry.findSubjectById(params.subjectId);
251
+ if (subjectRecord) {
252
+ identifierUsed = 'subjectId';
253
+ }
254
+ }
255
+
256
+ // If not found and externalId provided, try that
257
+ if (!subjectRecord && params.externalId) {
258
+ subjectRecord = await registry.findSubjectByExternalId(
259
+ params.externalId
260
+ );
261
+ if (subjectRecord) {
262
+ identifierUsed = 'externalId';
263
+ }
264
+ }
265
+
266
+ // If we found a subject, get their consent status
267
+ if (subjectRecord) {
268
+ // Get subject's active consents for this domain
269
+ const subjectConsents = await registry.findConsents({
270
+ subjectId: subjectRecord.id,
271
+ domainId: domain.id,
272
+ status: 'active',
273
+ });
274
+
275
+ // Get the latest active consent
276
+ const subjectConsent =
277
+ subjectConsents.length > 0 ? subjectConsents[0] : null;
278
+
279
+ // Add subject consent info to response
280
+ response.data.subjectConsentStatus = {
281
+ hasConsent: !!subjectConsent,
282
+ currentPreferences: subjectConsent
283
+ ? // @ts-expect-error
284
+ subjectConsent.preferences
285
+ : null,
286
+ consentedAt: subjectConsent
287
+ ? subjectConsent.givenAt.toISOString() || null
288
+ : null,
289
+ needsRenewal: subjectConsent
290
+ ? subjectConsent.policyId !== policy.id
291
+ : true,
292
+ identifiedBy: identifierUsed,
293
+ };
294
+ }
295
+ }
296
+
297
+ return response;
298
+ } catch (error) {
299
+ const context = ctx.context as C15TContext;
300
+ context.logger?.error?.('Error getting consent policy:', error);
301
+
302
+ if (error instanceof C15TError) {
303
+ throw error;
304
+ }
305
+ if (error instanceof z.ZodError) {
306
+ throw new C15TError('BAD_REQUEST', {
307
+ code: BASE_ERROR_CODES.BAD_REQUEST,
308
+ status: 400,
309
+ data: {
310
+ message: 'Invalid request data',
311
+ details: error.errors,
312
+ },
313
+ });
314
+ }
315
+
316
+ throw new C15TError('INTERNAL_SERVER_ERROR', {
317
+ code: BASE_ERROR_CODES.INTERNAL_SERVER_ERROR,
318
+ status: 503,
319
+ data: {
320
+ message: 'Failed to get consent policy',
321
+ details:
322
+ error instanceof Error ? { message: error.message } : { error },
323
+ },
324
+ });
325
+ }
326
+ }
327
+ );
@@ -0,0 +1,230 @@
1
+ import { z } from 'zod';
2
+ import type { EntityOutputFields } from '~/db/schema/definition';
3
+ import { BASE_ERROR_CODES, C15TError } from '~/error';
4
+ import type { C15TContext } from '../../types';
5
+ import { createAuthEndpoint } from '../call';
6
+
7
+ // Define schemas for the different identification methods
8
+ const getBySubjectIdSchema = z.object({
9
+ subjectId: z.string(),
10
+ domain: z.string().optional(),
11
+ identifierType: z.literal('subjectId'),
12
+ });
13
+
14
+ const getByExternalIdSchema = z.object({
15
+ externalId: z.string(),
16
+ domain: z.string().optional(),
17
+ identifierType: z.literal('externalId'),
18
+ });
19
+
20
+ const getByIpAddressSchema = z.object({
21
+ ipAddress: z.string(),
22
+ domain: z.string(),
23
+ identifierType: z.literal('ipAddress'),
24
+ });
25
+
26
+ // Combined schema using discriminated union
27
+ const getConsentSchema = z.discriminatedUnion('identifierType', [
28
+ getBySubjectIdSchema,
29
+ getByExternalIdSchema,
30
+ getByIpAddressSchema,
31
+ ]);
32
+
33
+ export interface GetConsentResponse {
34
+ success: boolean;
35
+ data: {
36
+ hasActiveConsent: boolean;
37
+ records: Array<{
38
+ id: string;
39
+ subjectId: string;
40
+ domain: string;
41
+ status: string;
42
+ givenAt: string;
43
+ policyId: string;
44
+ preferences: Record<string, string | null>;
45
+ }>;
46
+ identifiedBy: string | null;
47
+ };
48
+ }
49
+
50
+ /**
51
+ * Endpoint for retrieving active consent records.
52
+ *
53
+ * This endpoint allows clients to retrieve a subject's active consent records by specifying:
54
+ * 1. The subject ID (internal UUID) and an optional domain
55
+ * 2. The external ID and an optional domain
56
+ * 3. The IP address and a required domain (since IP alone is too broad)
57
+ *
58
+ * @endpoint GET /consent/get
59
+ */
60
+ export const getConsent = createAuthEndpoint(
61
+ '/consent/get',
62
+ {
63
+ method: 'GET',
64
+ query: getConsentSchema,
65
+ },
66
+ async (ctx) => {
67
+ try {
68
+ const validatedData = getConsentSchema.safeParse(ctx.query);
69
+
70
+ if (!validatedData.success) {
71
+ throw new C15TError(
72
+ 'The request data is invalid. Please ensure all required fields are correctly filled and formatted.',
73
+ {
74
+ code: BASE_ERROR_CODES.BAD_REQUEST,
75
+ status: 400,
76
+ data: {
77
+ details: validatedData.error.errors,
78
+ },
79
+ }
80
+ );
81
+ }
82
+
83
+ const params = validatedData.data;
84
+ const { registry } = ctx.context as C15TContext;
85
+
86
+ if (!registry) {
87
+ throw new C15TError(
88
+ 'The registry service is currently unavailable. Please check the service status and try again later.',
89
+ {
90
+ code: BASE_ERROR_CODES.INITIALIZATION_FAILED,
91
+ status: 503,
92
+ }
93
+ );
94
+ }
95
+
96
+ // Find subject based on identifier type
97
+ let subjects: EntityOutputFields<'subject'>[] = [];
98
+
99
+ // biome-ignore lint/style/useDefaultSwitchClause: <explanation>
100
+ switch (params.identifierType) {
101
+ case 'subjectId': {
102
+ const subjectRecord = await registry.findSubjectById(
103
+ params.subjectId
104
+ );
105
+ if (subjectRecord) {
106
+ subjects = [subjectRecord];
107
+ }
108
+ break;
109
+ }
110
+ case 'externalId': {
111
+ const externalSubject = await registry.findSubjectByExternalId(
112
+ params.externalId
113
+ );
114
+ if (externalSubject) {
115
+ subjects = [externalSubject];
116
+ }
117
+ break;
118
+ }
119
+ case 'ipAddress': {
120
+ // For IP address lookups, we require a domain
121
+ if (!params.domain) {
122
+ throw new C15TError(
123
+ 'A domain must be specified when using an IP address for identification. Please include a valid domain in your request.',
124
+ {
125
+ code: BASE_ERROR_CODES.MISSING_REQUIRED_PARAMETER,
126
+ status: 400,
127
+ data: {
128
+ ipAddress: params.ipAddress,
129
+ },
130
+ }
131
+ );
132
+ }
133
+
134
+ // This is a simplification - in a real implementation, we would need
135
+ // a method to look up subjects by IP address, possibly by scanning recent consent records
136
+ // For now, we'll use an empty array as this would require a custom query
137
+ subjects = [];
138
+ break;
139
+ }
140
+ }
141
+
142
+ if (subjects.length === 0) {
143
+ return {
144
+ success: true,
145
+ data: {
146
+ hasActiveConsent: false,
147
+ records: [],
148
+ identifiedBy: params.identifierType,
149
+ },
150
+ };
151
+ }
152
+
153
+ // Get active consent records for these subjects
154
+ const consentResults: Array<{
155
+ id: string;
156
+ subjectId: string;
157
+ domain: string;
158
+ status: string;
159
+ givenAt: string;
160
+ }> = [];
161
+
162
+ for (const subject of subjects) {
163
+ // Use the adapter to find subject consents
164
+ const subjectConsents = await registry.findConsents({
165
+ subjectId: subject.id,
166
+ domainId: params.domain,
167
+ });
168
+
169
+ // Filter for active consents only
170
+ const activeConsents = subjectConsents.filter(
171
+ (consent) => consent.status === 'active'
172
+ );
173
+
174
+ // Include subject identification in the results
175
+ for (const consent of activeConsents) {
176
+ consentResults.push({
177
+ id: consent.id,
178
+ subjectId: subject.id,
179
+ // domain: consent.domainId,
180
+ // status: consent.status,
181
+ givenAt: consent.givenAt.toISOString(),
182
+ // policyId: consent.policyId || '',
183
+ //@ts-expect-error
184
+ preferences: consent.preferences || {},
185
+ });
186
+ }
187
+ }
188
+
189
+ return {
190
+ success: true,
191
+ data: {
192
+ hasActiveConsent: consentResults.length > 0,
193
+ records: consentResults,
194
+ identifiedBy: params.identifierType,
195
+ },
196
+ };
197
+ } catch (error) {
198
+ const context = ctx.context as C15TContext;
199
+ context.logger?.error?.('Error getting consent:', error);
200
+
201
+ if (error instanceof C15TError) {
202
+ throw error;
203
+ }
204
+ if (error instanceof z.ZodError) {
205
+ throw new C15TError(
206
+ 'The request data is invalid. Please ensure all required fields are correctly filled and formatted.',
207
+ {
208
+ code: BASE_ERROR_CODES.BAD_REQUEST,
209
+ status: 400,
210
+ data: {
211
+ details: error.errors,
212
+ },
213
+ }
214
+ );
215
+ }
216
+
217
+ throw new C15TError(
218
+ 'Failed to retrieve consent information. Please try again later or contact support if the issue persists.',
219
+ {
220
+ code: BASE_ERROR_CODES.FAILED_TO_GET_CONSENT,
221
+ status: 503,
222
+ data: {
223
+ details:
224
+ error instanceof Error ? { message: error.message } : { error },
225
+ },
226
+ }
227
+ );
228
+ }
229
+ }
230
+ );
@@ -0,0 +1,12 @@
1
+ import { setConsent } from './set-consent';
2
+ import { status } from './status';
3
+ import { showConsentBanner } from './show-consent-banner';
4
+
5
+ export * from './error';
6
+ export * from './ok';
7
+
8
+ export const baseEndpoints = {
9
+ setConsent,
10
+ showConsentBanner,
11
+ status,
12
+ };
@@ -0,0 +1,45 @@
1
+ import { HIDE_METADATA } from '~/utils/hide-metadata';
2
+ import { createAuthEndpoint } from '../call';
3
+
4
+ export const ok = createAuthEndpoint(
5
+ '/ok',
6
+ {
7
+ method: 'GET',
8
+ metadata: {
9
+ ...HIDE_METADATA,
10
+ openapi: {
11
+ description: 'Check if the API is working',
12
+ responses: {
13
+ '200': {
14
+ description: 'Success',
15
+ content: {
16
+ 'application/json': {
17
+ schema: {
18
+ type: 'object',
19
+ properties: {
20
+ ok: {
21
+ type: 'boolean',
22
+ },
23
+ version: {
24
+ type: 'string',
25
+ },
26
+ timestamp: {
27
+ type: 'string',
28
+ },
29
+ },
30
+ },
31
+ },
32
+ },
33
+ },
34
+ },
35
+ },
36
+ },
37
+ },
38
+ async (ctx) => {
39
+ return ctx.json({
40
+ ok: true,
41
+ version: process.env.API_VERSION || '1.0.0',
42
+ timestamp: new Date().toISOString(),
43
+ });
44
+ }
45
+ );