@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,235 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import type { DatabaseConfiguration } from './db/adapters/kysely-adapter';
3
+ import { memoryAdapter } from './db/adapters/memory-adapter';
4
+ import { init } from './init';
5
+ import type { C15TPlugin } from './types';
6
+
7
+ describe('init', () => {
8
+ beforeEach(() => {
9
+ vi.unstubAllEnvs();
10
+ });
11
+
12
+ it('should initialize with basic config', async () => {
13
+ const result = await init({
14
+ baseURL: 'http://localhost:3000',
15
+ database: memoryAdapter({}),
16
+ });
17
+
18
+ expect(result.isOk()).toBe(true);
19
+ if (result.isOk()) {
20
+ const ctx = result.value;
21
+ expect(ctx.options.baseURL).toBe('http://localhost:3000');
22
+ expect(ctx.options.basePath).toBe('/api/c15t');
23
+ expect(ctx.appName).toBe('c15t Consent Manager');
24
+ }
25
+ });
26
+
27
+ it('should infer base URL from environment', async () => {
28
+ vi.stubEnv('C15T_URL', 'http://localhost:5147');
29
+
30
+ const result = await init({
31
+ database: memoryAdapter({}),
32
+ });
33
+
34
+ expect(result.isOk()).toBe(true);
35
+ if (result.isOk()) {
36
+ const ctx = result.value;
37
+ expect(ctx.options.baseURL).toBe('http://localhost:5147');
38
+ }
39
+
40
+ vi.unstubAllEnvs();
41
+ });
42
+
43
+ it('should respect custom base path', async () => {
44
+ const result = await init({
45
+ baseURL: 'http://localhost:3000',
46
+ basePath: '/custom-path',
47
+ database: memoryAdapter({}),
48
+ });
49
+
50
+ expect(result.isOk()).toBe(true);
51
+ if (result.isOk()) {
52
+ const ctx = result.value;
53
+ expect(ctx.options.basePath).toBe('/custom-path');
54
+ }
55
+ });
56
+
57
+ it('should initialize plugins', async () => {
58
+ const newBaseURL = 'http://test.test';
59
+ const result = await init({
60
+ baseURL: 'http://localhost:3000',
61
+ database: memoryAdapter({}),
62
+ plugins: [
63
+ {
64
+ id: 'test-plugin',
65
+ name: 'Test Plugin',
66
+ type: 'test',
67
+ init: () => ({
68
+ context: {
69
+ baseURL: newBaseURL,
70
+ },
71
+ }),
72
+ } as C15TPlugin,
73
+ ],
74
+ });
75
+
76
+ expect(result.isOk()).toBe(true);
77
+ if (result.isOk()) {
78
+ const ctx = result.value;
79
+ expect(ctx.baseURL).toBe(newBaseURL);
80
+ }
81
+ });
82
+
83
+ it('should allow plugins to modify options', async () => {
84
+ const result = await init({
85
+ baseURL: 'http://localhost:3000',
86
+ database: memoryAdapter({}),
87
+ plugins: [
88
+ {
89
+ id: 'test-plugin',
90
+ name: 'Test Plugin',
91
+ type: 'test',
92
+ init: () => ({
93
+ options: {
94
+ baseURL: 'http://test.test',
95
+ },
96
+ }),
97
+ } as C15TPlugin,
98
+ ],
99
+ });
100
+
101
+ expect(result.isOk()).toBe(true);
102
+ if (result.isOk()) {
103
+ const ctx = result.value;
104
+ expect(ctx.options.baseURL).toBe('http://test.test');
105
+ }
106
+ });
107
+
108
+ it('should handle plugin initialization errors', async () => {
109
+ const result = await init({
110
+ baseURL: 'http://localhost:3000',
111
+ database: memoryAdapter({}),
112
+ plugins: [
113
+ {
114
+ id: 'error-plugin',
115
+ name: 'Error Plugin',
116
+ type: 'test',
117
+ init: () => {
118
+ throw new Error('Plugin initialization failed');
119
+ },
120
+ } as C15TPlugin,
121
+ ],
122
+ });
123
+
124
+ expect(result.isErr()).toBe(true);
125
+ if (result.isErr()) {
126
+ expect(result.error.message).toContain('Plugin initialization failed');
127
+ }
128
+ });
129
+
130
+ it('should handle storage adapter errors', async () => {
131
+ const result = await init({
132
+ baseURL: 'http://localhost:3000',
133
+ database: null as unknown as DatabaseConfiguration,
134
+ });
135
+
136
+ expect(result.isErr()).toBe(false);
137
+ if (result.isErr()) {
138
+ expect(result.error.message).toContain(
139
+ 'Failed to initialize consent system'
140
+ );
141
+ }
142
+ });
143
+
144
+ it('should handle secret from environment', async () => {
145
+ vi.stubEnv('C15T_SECRET', 'test-secret');
146
+
147
+ const result = await init({
148
+ baseURL: 'http://localhost:3000',
149
+ database: memoryAdapter({}),
150
+ });
151
+
152
+ expect(result.isOk()).toBe(true);
153
+ if (result.isOk()) {
154
+ const ctx = result.value;
155
+ expect(ctx.secret).toBe('test-secret');
156
+ }
157
+
158
+ vi.unstubAllEnvs();
159
+ });
160
+
161
+ it('should handle multiple plugins in sequence', async () => {
162
+ const result = await init({
163
+ baseURL: 'http://localhost:3000',
164
+ database: memoryAdapter({}),
165
+ plugins: [
166
+ {
167
+ id: 'plugin-1',
168
+ name: 'Plugin 1',
169
+ type: 'test',
170
+ init: () => ({
171
+ options: {
172
+ baseURL: 'http://plugin1.test',
173
+ },
174
+ }),
175
+ } as C15TPlugin,
176
+ {
177
+ id: 'plugin-2',
178
+ name: 'Plugin 2',
179
+ type: 'test',
180
+ init: () => ({
181
+ options: {
182
+ baseURL: 'http://plugin2.test',
183
+ },
184
+ }),
185
+ } as C15TPlugin,
186
+ ],
187
+ });
188
+
189
+ expect(result.isOk()).toBe(true);
190
+ if (result.isOk()) {
191
+ const ctx = result.value;
192
+ expect(ctx.options.baseURL).toBe('http://plugin2.test');
193
+ }
194
+ });
195
+
196
+ it('should configure trusted origins', async () => {
197
+ const result = await init({
198
+ baseURL: 'http://localhost:3000',
199
+ database: memoryAdapter({}),
200
+ trustedOrigins: ['http://trusted.test'],
201
+ });
202
+
203
+ expect(result.isOk()).toBe(true);
204
+ if (result.isOk()) {
205
+ const ctx = result.value;
206
+ expect(ctx.trustedOrigins).toContain('http://localhost:3000');
207
+ expect(ctx.trustedOrigins).toContain('http://trusted.test');
208
+ }
209
+ });
210
+
211
+ it('should handle plugin context modifications', async () => {
212
+ const result = await init({
213
+ baseURL: 'http://localhost:3000',
214
+ database: memoryAdapter({}),
215
+ plugins: [
216
+ {
217
+ id: 'context-plugin',
218
+ name: 'Context Plugin',
219
+ type: 'test',
220
+ init: () => ({
221
+ context: {
222
+ appName: 'Modified App Name',
223
+ },
224
+ }),
225
+ } as C15TPlugin,
226
+ ],
227
+ });
228
+
229
+ expect(result.isOk()).toBe(true);
230
+ if (result.isOk()) {
231
+ const ctx = result.value;
232
+ expect(ctx.appName).toBe('Modified App Name');
233
+ }
234
+ });
235
+ });
package/src/init.ts ADDED
@@ -0,0 +1,261 @@
1
+ import { defu } from 'defu';
2
+ import { getConsentTables } from './db';
3
+ import { generateId } from './db/core/fields/id-generator';
4
+ import type { EntityName } from './db/core/types';
5
+ import { createRegistry } from './db/create-registry';
6
+ import { getAdapter } from './db/utils';
7
+ import {
8
+ BASE_ERROR_CODES,
9
+ type C15TError,
10
+ failAsync,
11
+ fromPromise,
12
+ } from './error';
13
+ import { type C15TResult, fail, ok } from './error/results';
14
+ /**
15
+ * c15t Initialization Module
16
+ *
17
+ * This module handles the initialization of the c15t consent management system.
18
+ * It sets up the consent context, configures storage adapters, initializes plugins,
19
+ * and establishes security settings like secrets and trusted origins.
20
+ *
21
+ * The initialization process includes:
22
+ * - Setting up storage adapters for consent data
23
+ * - Configuring security credentials and trusted origins
24
+ * - Initializing core and custom plugins
25
+ * - Creating the consent context object that serves as the foundation for the system
26
+ *
27
+ * This is an internal module typically not used directly by consumers of the c15t library.
28
+ */
29
+ import type {
30
+ C15TContext,
31
+ C15TOptions,
32
+ C15TPlugin,
33
+ RegistryContext,
34
+ } from './types';
35
+ import { createLogger, env, getBaseURL, isProduction } from './utils';
36
+
37
+ /**
38
+ * Helper function to convert a Promise to a C15T-specific ResultAsync
39
+ *
40
+ * @param promise - The promise to convert to a ResultAsync
41
+ * @returns A ResultAsync that captures errors as C15TError objects
42
+ */
43
+ const fromC15TPromise = <T>(promise: Promise<T>) => {
44
+ return fromPromise(
45
+ promise,
46
+ (error): C15TError => ({
47
+ message: error instanceof Error ? error.message : String(error),
48
+ code: BASE_ERROR_CODES.UNKNOWN_ERROR,
49
+ name: 'C15TError',
50
+ data: { error },
51
+ })
52
+ );
53
+ };
54
+
55
+ /**
56
+ * Default secret used when no secret is provided
57
+ * This should only be used in development environments
58
+ */
59
+ const DEFAULT_SECRET = 'c15t-default-secret-please-change-in-production';
60
+
61
+ /**
62
+ * Initializes the c15t consent management system using Result pattern
63
+ *
64
+ * This function creates and configures the consent context based on the provided options.
65
+ * It sets up storage adapters, initializes plugins, configures security settings,
66
+ * and establishes the foundation for the consent management system.
67
+ *
68
+ * This version uses the neverthrow Result pattern for error handling.
69
+ *
70
+ * @template P - The plugin types used in the configuration
71
+ * @param options - Configuration options for the c15t instance
72
+ * @returns A Promise resolving to a Result containing the initialized consent context
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * const contextResult = await init({
77
+ * secret: process.env.CONSENT_SECRET,
78
+ * storage: memoryAdapter(),
79
+ * plugins: [geoPlugin()]
80
+ * });
81
+ *
82
+ * // Handle success and error cases explicitly
83
+ * contextResult.match(
84
+ * (context) => {
85
+ * // Use the successfully initialized context
86
+ * },
87
+ * (error) => {
88
+ * // Handle the initialization error
89
+ * console.error('Failed to initialize:', error.message);
90
+ * }
91
+ * );
92
+ * ```
93
+ */
94
+ export const init = async <P extends C15TPlugin[]>(
95
+ options: C15TOptions<P>
96
+ ): Promise<C15TResult<C15TContext>> => {
97
+ try {
98
+ // Initialize core components
99
+ const adapterResult = await fromC15TPromise(getAdapter(options));
100
+
101
+ return adapterResult.andThen((adapter) => {
102
+ const logger = createLogger(options.logger);
103
+ const baseURL = getBaseURL(options.baseURL, options.basePath);
104
+ const secret =
105
+ options.secret ||
106
+ env.C15T_SECRET ||
107
+ env.CONSENT_SECRET ||
108
+ DEFAULT_SECRET;
109
+
110
+ // Secret warning
111
+ if (secret === DEFAULT_SECRET && isProduction) {
112
+ logger.error(
113
+ 'Using default secret in production. Set C15T_SECRET or pass secret in config.'
114
+ );
115
+ }
116
+
117
+ // Create normalized options
118
+ const finalOptions = {
119
+ ...options,
120
+ secret,
121
+ baseURL: baseURL ? new URL(baseURL).origin : '',
122
+ basePath: options.basePath || '/api/c15t',
123
+ plugins: [...(options.plugins || []), ...getInternalPlugins(options)],
124
+ };
125
+
126
+ // Create ID generator
127
+ const generateIdFunc = ({
128
+ model,
129
+ size = 16,
130
+ }: { model: EntityName; size?: number }) => {
131
+ return (
132
+ finalOptions?.advanced?.generateId?.({ model, size }) ||
133
+ generateId(getConsentTables(finalOptions)[model].entityPrefix)
134
+ );
135
+ };
136
+
137
+ // Create registry context - just what registries need
138
+ const registryContext: RegistryContext = {
139
+ adapter,
140
+ options: finalOptions,
141
+ logger,
142
+ hooks: options.databaseHooks || [],
143
+ generateId: generateIdFunc,
144
+ };
145
+
146
+ // Create full application context
147
+ const ctx: C15TContext = {
148
+ appName: finalOptions.appName || 'c15t Consent Manager',
149
+ options: finalOptions,
150
+ trustedOrigins: getTrustedOrigins(finalOptions),
151
+ baseURL: baseURL || '',
152
+ secret,
153
+ logger,
154
+ generateId: generateIdFunc,
155
+ adapter,
156
+ registry: createRegistry(registryContext),
157
+ tables: getConsentTables(options),
158
+ };
159
+
160
+ // Initialize plugins and return
161
+ return runPluginInit(ctx);
162
+ });
163
+ } catch (error) {
164
+ return failAsync(
165
+ `Failed to initialize consent system: ${error instanceof Error ? error.message : String(error)}`,
166
+ {
167
+ code: BASE_ERROR_CODES.INITIALIZATION_FAILED,
168
+ data: { error },
169
+ }
170
+ );
171
+ }
172
+ };
173
+
174
+ /**
175
+ * Initializes all registered plugins using the Result pattern
176
+ *
177
+ * This function runs the init method of each plugin in sequence,
178
+ * collecting any context or options modifications they provide.
179
+ *
180
+ * @param ctx - The current consent context
181
+ * @returns A Result with the updated context after plugin initialization
182
+ */
183
+ function runPluginInit(ctx: C15TContext): C15TResult<C15TContext> {
184
+ try {
185
+ let options = ctx.options;
186
+ const plugins = options.plugins || [];
187
+ let context: C15TContext = ctx;
188
+
189
+ for (const plugin of plugins) {
190
+ if (plugin.init) {
191
+ const result = plugin.init(ctx);
192
+ if (typeof result === 'object') {
193
+ if (result.options) {
194
+ options = defu(result.options, options);
195
+ }
196
+ if (result.context) {
197
+ context = {
198
+ ...context,
199
+ ...(result.context as Partial<C15TContext>),
200
+ };
201
+ }
202
+ }
203
+ }
204
+ }
205
+
206
+ context.options = options;
207
+ return ok(context);
208
+ } catch (error) {
209
+ return fail(
210
+ `Plugin initialization failed: ${error instanceof Error ? error.message : String(error)}`,
211
+ {
212
+ code: BASE_ERROR_CODES.PLUGIN_INITIALIZATION_FAILED,
213
+ data: { error },
214
+ }
215
+ );
216
+ }
217
+ }
218
+
219
+ /**
220
+ * Retrieves internal plugins based on configuration options
221
+ *
222
+ * This function determines which internal plugins should be automatically
223
+ * included based on the provided options.
224
+ *
225
+ * @param options - The c15t configuration options
226
+ * @returns An array of internal plugins to include
227
+ */
228
+ function getInternalPlugins(_options: C15TOptions): C15TPlugin[] {
229
+ const plugins: C15TPlugin[] = [];
230
+
231
+ return plugins;
232
+ }
233
+
234
+ /**
235
+ * Builds a list of trusted origins for CORS
236
+ *
237
+ * This function determines which origins should be trusted for
238
+ * cross-origin requests based on configuration and environment.
239
+ *
240
+ * @param options - The c15t configuration options
241
+ * @returns An array of trusted origin URLs
242
+ */
243
+ function getTrustedOrigins(options: C15TOptions): string[] {
244
+ const baseURL = getBaseURL(options.baseURL, options.basePath);
245
+ if (!baseURL) {
246
+ return [];
247
+ }
248
+
249
+ const trustedOrigins = [new URL(baseURL).origin];
250
+
251
+ if (options.trustedOrigins && Array.isArray(options.trustedOrigins)) {
252
+ trustedOrigins.push(...options.trustedOrigins);
253
+ }
254
+
255
+ const envTrustedOrigins = env.C15T_TRUSTED_ORIGINS;
256
+ if (envTrustedOrigins) {
257
+ trustedOrigins.push(...envTrustedOrigins.split(','));
258
+ }
259
+
260
+ return trustedOrigins;
261
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * c15t Framework Integrations
3
+ * This module exports integrations with various frameworks and libraries
4
+ */
5
+
6
+ // Export Next.js integration
7
+ export * from './next';
8
+
9
+ // Export React integration
10
+ export * from './react';
@@ -0,0 +1,136 @@
1
+ import type { C15TInstance } from '~/core';
2
+ import { BASE_ERROR_CODES } from '~/error/codes';
3
+ import type { C15TContext } from '~/types';
4
+
5
+ /**
6
+ * Convert a c15t handler to a Next.js API route handler.
7
+ *
8
+ * This function adapts a c15t instance to work with Next.js App Router API routes,
9
+ * providing GET and POST handler functions. It handles the conversion between
10
+ * c15t's Result types and Next.js Response objects.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * // app/api/c15t/route.ts
15
+ * import { toNextJsHandler } from '@c15t/integrations/next';
16
+ * import { c15t } from '@/lib/c15t';
17
+ *
18
+ * // Pass the entire c15t instance, not just the handler
19
+ * export const { GET, POST } = toNextJsHandler(c15t);
20
+ *
21
+ * // ❌ Don't do this:
22
+ * // export const { GET, POST } = toNextJsHandler(c15t.handler);
23
+ * ```
24
+ *
25
+ * @param instance - The complete c15t instance (not just the handler)
26
+ * @returns Next.js API route handler functions for GET and POST
27
+ */
28
+ export function toNextJsHandler(instance: C15TInstance) {
29
+ const handler = async (initialRequest: Request) => {
30
+ try {
31
+ const request = initialRequest;
32
+
33
+ // For POST requests, validate JSON body
34
+ if (request.method === 'POST') {
35
+ try {
36
+ const clonedRequest = request.clone();
37
+ await clonedRequest.json();
38
+ } catch (error) {
39
+ return new Response(
40
+ JSON.stringify({
41
+ error: true,
42
+ code: BASE_ERROR_CODES.REQUEST_HANDLER_ERROR,
43
+ message: 'Invalid JSON in request body',
44
+ details: error instanceof Error ? error.message : 'Unknown error',
45
+ }),
46
+ {
47
+ status: 400,
48
+ headers: {
49
+ 'Content-Type': 'application/json',
50
+ },
51
+ }
52
+ );
53
+ }
54
+ }
55
+
56
+ // Ensure the baseURL is set correctly for the c15t instance
57
+ if (instance.$context) {
58
+ const contextPromise = instance.$context;
59
+ try {
60
+ const contextResult = await contextPromise;
61
+
62
+ // Extract context safely using match pattern
63
+ contextResult.match(
64
+ (context: C15TContext) => {
65
+ // If baseURL is not set, initialize it from the request URL
66
+ if (!context.baseURL || context.baseURL.trim() === '') {
67
+ const url = new URL(request.url);
68
+ const basePath = context.options?.basePath || '/api/c15t';
69
+ const baseURL = `${url.origin}${basePath}`;
70
+
71
+ context.baseURL = baseURL;
72
+ if (context.options) {
73
+ context.options.baseURL = baseURL;
74
+ }
75
+ }
76
+ },
77
+ () => {
78
+ // Handle context error silently - the handler will deal with it
79
+ }
80
+ );
81
+ } catch {
82
+ // Handle promise rejection silently - the handler will deal with it
83
+ }
84
+ }
85
+
86
+ // Handle the request and unwrap the Result
87
+ const result = await instance.handler(request);
88
+ return await result.match(
89
+ (response) => response,
90
+ (error) => {
91
+ // Convert c15t errors to Response objects
92
+ const status = error.status || 500;
93
+ const message =
94
+ error.message || BASE_ERROR_CODES.INTERNAL_SERVER_ERROR;
95
+ return new Response(
96
+ JSON.stringify({
97
+ error: true,
98
+ code: error.code || BASE_ERROR_CODES.INTERNAL_SERVER_ERROR,
99
+ message,
100
+ data: error.data,
101
+ }),
102
+ {
103
+ status,
104
+ headers: {
105
+ 'Content-Type': 'application/json',
106
+ },
107
+ }
108
+ );
109
+ }
110
+ );
111
+ } catch (error) {
112
+ // Handle any unexpected errors
113
+ // biome-ignore lint/suspicious/noConsole: This is a logging error
114
+ console.error('Unexpected error in c15t handler:', error);
115
+ return new Response(
116
+ JSON.stringify({
117
+ error: true,
118
+ code: BASE_ERROR_CODES.INTERNAL_SERVER_ERROR,
119
+ message: 'An unexpected error occurred',
120
+ data: { error: String(error) },
121
+ }),
122
+ {
123
+ status: 500,
124
+ headers: {
125
+ 'Content-Type': 'application/json',
126
+ },
127
+ }
128
+ );
129
+ }
130
+ };
131
+
132
+ return {
133
+ GET: handler,
134
+ POST: handler,
135
+ };
136
+ }