@c15t/backend 1.5.0 → 1.6.0

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 (489) hide show
  1. package/.turbo/turbo-build.log +63 -37
  2. package/CHANGELOG.md +4 -209
  3. package/README.md +86 -164
  4. package/dist/contracts/consent/index.d.ts +103 -615
  5. package/dist/contracts/consent/index.d.ts.map +1 -1
  6. package/dist/contracts/consent/post.contract.d.ts +42 -140
  7. package/dist/contracts/consent/post.contract.d.ts.map +1 -1
  8. package/dist/contracts/consent/show-banner.contract.d.ts +28 -376
  9. package/dist/contracts/consent/show-banner.contract.d.ts.map +1 -1
  10. package/dist/contracts/consent/verify.contract.d.ts +33 -99
  11. package/dist/contracts/consent/verify.contract.d.ts.map +1 -1
  12. package/dist/contracts/index.d.ts +222 -1356
  13. package/dist/contracts/index.d.ts.map +1 -1
  14. package/dist/contracts/meta/index.d.ts +8 -63
  15. package/dist/contracts/meta/index.d.ts.map +1 -1
  16. package/dist/contracts/meta/status.contract.d.ts +8 -63
  17. package/dist/contracts/meta/status.contract.d.ts.map +1 -1
  18. package/dist/contracts/shared/jurisdiction.schema.d.ts +21 -9
  19. package/dist/contracts/shared/jurisdiction.schema.d.ts.map +1 -1
  20. package/dist/contracts.cjs +100 -106
  21. package/dist/contracts.js +100 -106
  22. package/dist/core.cjs +681 -681
  23. package/dist/core.d.ts +118 -678
  24. package/dist/core.d.ts.map +1 -1
  25. package/dist/core.js +634 -637
  26. package/dist/handlers/consent/index.d.ts +103 -615
  27. package/dist/handlers/consent/index.d.ts.map +1 -1
  28. package/dist/handlers/consent/post.handler.d.ts +42 -140
  29. package/dist/handlers/consent/post.handler.d.ts.map +1 -1
  30. package/dist/handlers/consent/show-banner/handler.d.ts +28 -376
  31. package/dist/handlers/consent/show-banner/handler.d.ts.map +1 -1
  32. package/dist/handlers/consent/show-banner/translations.d.ts.map +1 -1
  33. package/dist/handlers/consent/verify.handler.d.ts +33 -99
  34. package/dist/handlers/consent/verify.handler.d.ts.map +1 -1
  35. package/dist/handlers/meta/index.d.ts +8 -63
  36. package/dist/handlers/meta/index.d.ts.map +1 -1
  37. package/dist/handlers/meta/status.handler.d.ts +8 -63
  38. package/dist/handlers/meta/status.handler.d.ts.map +1 -1
  39. package/dist/init.d.ts.map +1 -1
  40. package/dist/middleware/openapi/index.d.ts +2 -2
  41. package/dist/middleware/openapi/index.d.ts.map +1 -1
  42. package/dist/pkgs/data-model/fields/index.cjs +14 -26
  43. package/dist/pkgs/data-model/fields/index.d.ts +4 -4
  44. package/dist/pkgs/data-model/fields/index.d.ts.map +1 -1
  45. package/dist/pkgs/data-model/fields/index.js +14 -26
  46. package/dist/pkgs/data-model/fields/zod-fields.d.ts +195 -871
  47. package/dist/pkgs/data-model/fields/zod-fields.d.ts.map +1 -1
  48. package/dist/pkgs/data-model/hooks/index.d.ts +2 -2
  49. package/dist/pkgs/data-model/hooks/index.d.ts.map +1 -1
  50. package/dist/pkgs/data-model/index.cjs +346 -358
  51. package/dist/pkgs/data-model/index.d.ts +1 -1
  52. package/dist/pkgs/data-model/index.d.ts.map +1 -1
  53. package/dist/pkgs/data-model/index.js +345 -357
  54. package/dist/pkgs/data-model/schema/index.cjs +346 -358
  55. package/dist/pkgs/data-model/schema/index.d.ts +1 -1
  56. package/dist/pkgs/data-model/schema/index.d.ts.map +1 -1
  57. package/dist/pkgs/data-model/schema/index.js +345 -357
  58. package/dist/pkgs/data-model/schema/schemas.d.ts +2 -2
  59. package/dist/pkgs/data-model/schema/schemas.d.ts.map +1 -1
  60. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.d.ts +3 -0
  61. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.d.ts.map +1 -1
  62. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/index.cjs +158 -170
  63. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/index.js +157 -169
  64. package/dist/pkgs/db-adapters/adapters/index.d.ts +2 -2
  65. package/dist/pkgs/db-adapters/adapters/index.d.ts.map +1 -1
  66. package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.cjs +215 -227
  67. package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.d.ts +2 -2
  68. package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.d.ts.map +1 -1
  69. package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.js +213 -225
  70. package/dist/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.d.ts +2 -0
  71. package/dist/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.d.ts.map +1 -1
  72. package/dist/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.d.ts +1 -1
  73. package/dist/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.d.ts.map +1 -1
  74. package/dist/pkgs/db-adapters/adapters/memory-adapter/index.cjs +158 -170
  75. package/dist/pkgs/db-adapters/adapters/memory-adapter/index.js +157 -169
  76. package/dist/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.d.ts +3 -0
  77. package/dist/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.d.ts.map +1 -1
  78. package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.cjs +243 -255
  79. package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.d.ts +1 -1
  80. package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.d.ts.map +1 -1
  81. package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.js +241 -253
  82. package/dist/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.d.ts +3 -0
  83. package/dist/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.d.ts.map +1 -1
  84. package/dist/pkgs/db-adapters/index.cjs +714 -726
  85. package/dist/pkgs/db-adapters/index.d.ts +6 -6
  86. package/dist/pkgs/db-adapters/index.d.ts.map +1 -1
  87. package/dist/pkgs/db-adapters/index.js +708 -720
  88. package/dist/pkgs/migrations/get-migration.d.ts.map +1 -1
  89. package/dist/pkgs/migrations/get-schema/get-schema.d.ts.map +1 -1
  90. package/dist/pkgs/migrations/get-schema/process-tables.d.ts.map +1 -1
  91. package/dist/pkgs/migrations/index.cjs +236 -248
  92. package/dist/pkgs/migrations/index.d.ts +4 -4
  93. package/dist/pkgs/migrations/index.d.ts.map +1 -1
  94. package/dist/pkgs/migrations/index.js +235 -247
  95. package/dist/pkgs/results/index.cjs +67 -67
  96. package/dist/pkgs/results/index.d.ts +5 -5
  97. package/dist/pkgs/results/index.d.ts.map +1 -1
  98. package/dist/pkgs/results/index.js +67 -67
  99. package/dist/pkgs/results/orpc-error-handler.d.ts +1 -1
  100. package/dist/pkgs/results/orpc-error-handler.d.ts.map +1 -1
  101. package/dist/pkgs/types/index.d.ts +1 -2
  102. package/dist/pkgs/types/index.d.ts.map +1 -1
  103. package/dist/pkgs/types/options.d.ts +9 -2
  104. package/dist/pkgs/types/options.d.ts.map +1 -1
  105. package/dist/pkgs/utils/index.d.ts +1 -1
  106. package/dist/pkgs/utils/index.d.ts.map +1 -1
  107. package/dist/pkgs/utils/logger.d.ts +1 -1
  108. package/dist/pkgs/utils/logger.d.ts.map +1 -1
  109. package/dist/router.cjs +114 -117
  110. package/dist/router.d.ts +111 -678
  111. package/dist/router.d.ts.map +1 -1
  112. package/dist/router.js +114 -117
  113. package/dist/schema/audit-log/schema.d.ts +2 -24
  114. package/dist/schema/audit-log/schema.d.ts.map +1 -1
  115. package/dist/schema/audit-log/table.d.ts +2 -24
  116. package/dist/schema/audit-log/table.d.ts.map +1 -1
  117. package/dist/schema/consent/registry.d.ts +8 -8
  118. package/dist/schema/consent/schema.d.ts +9 -33
  119. package/dist/schema/consent/schema.d.ts.map +1 -1
  120. package/dist/schema/consent/table.d.ts +9 -33
  121. package/dist/schema/consent/table.d.ts.map +1 -1
  122. package/dist/schema/consent-policy/registry.d.ts +20 -20
  123. package/dist/schema/consent-policy/schema.d.ts +22 -30
  124. package/dist/schema/consent-policy/schema.d.ts.map +1 -1
  125. package/dist/schema/consent-policy/table.d.ts +13 -29
  126. package/dist/schema/consent-policy/table.d.ts.map +1 -1
  127. package/dist/schema/consent-purpose/registry.d.ts +6 -6
  128. package/dist/schema/consent-purpose/schema.d.ts +5 -27
  129. package/dist/schema/consent-purpose/schema.d.ts.map +1 -1
  130. package/dist/schema/consent-purpose/table.d.ts +5 -27
  131. package/dist/schema/consent-purpose/table.d.ts.map +1 -1
  132. package/dist/schema/consent-record/schema.d.ts +3 -19
  133. package/dist/schema/consent-record/schema.d.ts.map +1 -1
  134. package/dist/schema/consent-record/table.d.ts +3 -19
  135. package/dist/schema/consent-record/table.d.ts.map +1 -1
  136. package/dist/schema/create-registry.d.ts +58 -58
  137. package/dist/schema/definition.d.ts +42 -176
  138. package/dist/schema/definition.d.ts.map +1 -1
  139. package/dist/schema/domain/registry.d.ts +20 -20
  140. package/dist/schema/domain/schema.d.ts +6 -24
  141. package/dist/schema/domain/schema.d.ts.map +1 -1
  142. package/dist/schema/domain/table.d.ts +6 -24
  143. package/dist/schema/domain/table.d.ts.map +1 -1
  144. package/dist/schema/index.cjs +426 -438
  145. package/dist/schema/index.d.ts +12 -12
  146. package/dist/schema/index.d.ts.map +1 -1
  147. package/dist/schema/index.js +426 -438
  148. package/dist/schema/schemas.d.ts +42 -176
  149. package/dist/schema/schemas.d.ts.map +1 -1
  150. package/dist/schema/subject/registry.d.ts +4 -4
  151. package/dist/schema/subject/schema.d.ts +4 -20
  152. package/dist/schema/subject/schema.d.ts.map +1 -1
  153. package/dist/schema/subject/table.d.ts +4 -20
  154. package/dist/schema/subject/table.d.ts.map +1 -1
  155. package/dist/schema/types.d.ts +1 -1
  156. package/dist/schema/types.d.ts.map +1 -1
  157. package/dist/testing/contract-testing.d.ts +3 -2
  158. package/dist/testing/contract-testing.d.ts.map +1 -1
  159. package/dist/types/index.d.ts +5 -4
  160. package/dist/types/index.d.ts.map +1 -1
  161. package/dist/types/options.d.ts +2 -2
  162. package/dist/types/options.d.ts.map +1 -1
  163. package/dist/v2/contracts/consent/index.d.ts +260 -0
  164. package/dist/v2/contracts/consent/index.d.ts.map +1 -0
  165. package/dist/v2/contracts/consent/index.test.d.ts +2 -0
  166. package/dist/v2/contracts/consent/index.test.d.ts.map +1 -0
  167. package/dist/v2/contracts/consent/post.contract.d.ts +114 -0
  168. package/dist/v2/contracts/consent/post.contract.d.ts.map +1 -0
  169. package/dist/v2/contracts/consent/post.contract.test.d.ts +2 -0
  170. package/dist/v2/contracts/consent/post.contract.test.d.ts.map +1 -0
  171. package/dist/v2/contracts/consent/show-banner.contract.d.ts +68 -0
  172. package/dist/v2/contracts/consent/show-banner.contract.d.ts.map +1 -0
  173. package/dist/v2/contracts/consent/show-banner.contract.test.d.ts +2 -0
  174. package/dist/v2/contracts/consent/show-banner.contract.test.d.ts.map +1 -0
  175. package/dist/v2/contracts/consent/verify.contract.d.ts +81 -0
  176. package/dist/v2/contracts/consent/verify.contract.d.ts.map +1 -0
  177. package/dist/v2/contracts/consent/verify.contract.test.d.ts +2 -0
  178. package/dist/v2/contracts/consent/verify.contract.test.d.ts.map +1 -0
  179. package/dist/v2/contracts/index.cjs +644 -0
  180. package/dist/v2/contracts/index.d.ts +563 -0
  181. package/dist/v2/contracts/index.d.ts.map +1 -0
  182. package/dist/v2/contracts/index.js +607 -0
  183. package/dist/v2/contracts/meta/index.d.ts +19 -0
  184. package/dist/v2/contracts/meta/index.d.ts.map +1 -0
  185. package/dist/v2/contracts/meta/index.test.d.ts +2 -0
  186. package/dist/v2/contracts/meta/index.test.d.ts.map +1 -0
  187. package/dist/v2/contracts/meta/status.contract.d.ts +18 -0
  188. package/dist/v2/contracts/meta/status.contract.d.ts.map +1 -0
  189. package/dist/v2/contracts/meta/status.contract.test.d.ts +2 -0
  190. package/dist/v2/contracts/meta/status.contract.test.d.ts.map +1 -0
  191. package/dist/v2/contracts/shared/jurisdiction.schema.d.ts +36 -0
  192. package/dist/v2/contracts/shared/jurisdiction.schema.d.ts.map +1 -0
  193. package/dist/v2/contracts/test.utils.d.ts +38 -0
  194. package/dist/v2/contracts/test.utils.d.ts.map +1 -0
  195. package/dist/v2/core.cjs +2181 -0
  196. package/dist/v2/core.d.ts +364 -0
  197. package/dist/v2/core.d.ts.map +1 -0
  198. package/dist/v2/core.js +2130 -0
  199. package/dist/v2/db/adapters/drizzle.cjs +36 -0
  200. package/dist/v2/db/adapters/drizzle.d.ts +2 -0
  201. package/dist/v2/db/adapters/drizzle.d.ts.map +1 -0
  202. package/dist/v2/db/adapters/drizzle.js +3 -0
  203. package/dist/v2/db/adapters/index.cjs +18 -0
  204. package/dist/v2/db/adapters/index.d.ts +2 -0
  205. package/dist/v2/db/adapters/index.d.ts.map +1 -0
  206. package/dist/v2/db/adapters/index.js +0 -0
  207. package/dist/v2/db/adapters/kysely.cjs +36 -0
  208. package/dist/v2/db/adapters/kysely.d.ts +2 -0
  209. package/dist/v2/db/adapters/kysely.d.ts.map +1 -0
  210. package/dist/v2/db/adapters/kysely.js +3 -0
  211. package/dist/v2/db/adapters/mongo.cjs +36 -0
  212. package/dist/v2/db/adapters/mongo.d.ts +2 -0
  213. package/dist/v2/db/adapters/mongo.d.ts.map +1 -0
  214. package/dist/v2/db/adapters/mongo.js +3 -0
  215. package/dist/v2/db/adapters/prisma.cjs +36 -0
  216. package/dist/v2/db/adapters/prisma.d.ts +2 -0
  217. package/dist/v2/db/adapters/prisma.d.ts.map +1 -0
  218. package/dist/v2/db/adapters/prisma.js +3 -0
  219. package/dist/v2/db/adapters/typeorm.cjs +36 -0
  220. package/dist/v2/db/adapters/typeorm.d.ts +2 -0
  221. package/dist/v2/db/adapters/typeorm.d.ts.map +1 -0
  222. package/dist/v2/db/adapters/typeorm.js +3 -0
  223. package/dist/v2/db/migrator/index.cjs +61 -0
  224. package/dist/v2/db/migrator/index.d.ts +29 -0
  225. package/dist/v2/db/migrator/index.d.ts.map +1 -0
  226. package/dist/v2/db/migrator/index.js +27 -0
  227. package/dist/v2/db/registry/audit-log.d.ts +21 -0
  228. package/dist/v2/db/registry/audit-log.d.ts.map +1 -0
  229. package/dist/v2/db/registry/audit-log.test.d.ts +2 -0
  230. package/dist/v2/db/registry/audit-log.test.d.ts.map +1 -0
  231. package/dist/v2/db/registry/consent-policy.d.ts +29 -0
  232. package/dist/v2/db/registry/consent-policy.d.ts.map +1 -0
  233. package/dist/v2/db/registry/consent-policy.test.d.ts +2 -0
  234. package/dist/v2/db/registry/consent-policy.test.d.ts.map +1 -0
  235. package/dist/v2/db/registry/consent-purpose.d.ts +16 -0
  236. package/dist/v2/db/registry/consent-purpose.d.ts.map +1 -0
  237. package/dist/v2/db/registry/consent-purpose.test.d.ts +2 -0
  238. package/dist/v2/db/registry/consent-purpose.test.d.ts.map +1 -0
  239. package/dist/v2/db/registry/consent.d.ts +20 -0
  240. package/dist/v2/db/registry/consent.d.ts.map +1 -0
  241. package/dist/v2/db/registry/consent.test.d.ts +2 -0
  242. package/dist/v2/db/registry/consent.test.d.ts.map +1 -0
  243. package/dist/v2/db/registry/domain.d.ts +24 -0
  244. package/dist/v2/db/registry/domain.d.ts.map +1 -0
  245. package/dist/v2/db/registry/domain.test.d.ts +2 -0
  246. package/dist/v2/db/registry/domain.test.d.ts.map +1 -0
  247. package/dist/v2/db/registry/index.d.ts +102 -0
  248. package/dist/v2/db/registry/index.d.ts.map +1 -0
  249. package/dist/v2/db/registry/subject.d.ts +18 -0
  250. package/dist/v2/db/registry/subject.d.ts.map +1 -0
  251. package/dist/v2/db/registry/subject.test.d.ts +2 -0
  252. package/dist/v2/db/registry/subject.test.d.ts.map +1 -0
  253. package/dist/v2/db/registry/types.d.ts +10 -0
  254. package/dist/v2/db/registry/types.d.ts.map +1 -0
  255. package/dist/v2/db/registry/utils/generate-id.d.ts +25 -0
  256. package/dist/v2/db/registry/utils/generate-id.d.ts.map +1 -0
  257. package/dist/v2/db/registry/utils/generate-id.test.d.ts +2 -0
  258. package/dist/v2/db/registry/utils/generate-id.test.d.ts.map +1 -0
  259. package/dist/v2/db/registry/utils.d.ts +25 -0
  260. package/dist/v2/db/registry/utils.d.ts.map +1 -0
  261. package/dist/v2/db/schema/1.0.0/audit-log.d.ts +29 -0
  262. package/dist/v2/db/schema/1.0.0/audit-log.d.ts.map +1 -0
  263. package/dist/v2/db/schema/1.0.0/consent-policy.d.ts +45 -0
  264. package/dist/v2/db/schema/1.0.0/consent-policy.d.ts.map +1 -0
  265. package/dist/v2/db/schema/1.0.0/consent-purpose.d.ts +27 -0
  266. package/dist/v2/db/schema/1.0.0/consent-purpose.d.ts.map +1 -0
  267. package/dist/v2/db/schema/1.0.0/consent-record.d.ts +19 -0
  268. package/dist/v2/db/schema/1.0.0/consent-record.d.ts.map +1 -0
  269. package/dist/v2/db/schema/1.0.0/consent.d.ts +42 -0
  270. package/dist/v2/db/schema/1.0.0/consent.d.ts.map +1 -0
  271. package/dist/v2/db/schema/1.0.0/domain.d.ts +23 -0
  272. package/dist/v2/db/schema/1.0.0/domain.d.ts.map +1 -0
  273. package/dist/v2/db/schema/1.0.0/index.d.ts +1513 -0
  274. package/dist/v2/db/schema/1.0.0/index.d.ts.map +1 -0
  275. package/dist/v2/db/schema/1.0.0/subject.d.ts +23 -0
  276. package/dist/v2/db/schema/1.0.0/subject.d.ts.map +1 -0
  277. package/dist/v2/db/schema/index.cjs +326 -0
  278. package/dist/v2/db/schema/index.d.ts +1507 -0
  279. package/dist/v2/db/schema/index.d.ts.map +1 -0
  280. package/dist/v2/db/schema/index.js +241 -0
  281. package/dist/v2/define-config.cjs +36 -0
  282. package/dist/v2/define-config.d.ts +5 -0
  283. package/dist/v2/define-config.d.ts.map +1 -0
  284. package/dist/v2/define-config.js +2 -0
  285. package/dist/v2/handlers/consent/index.d.ts +260 -0
  286. package/dist/v2/handlers/consent/index.d.ts.map +1 -0
  287. package/dist/v2/handlers/consent/post.handler.d.ts +136 -0
  288. package/dist/v2/handlers/consent/post.handler.d.ts.map +1 -0
  289. package/dist/v2/handlers/consent/show-banner/geo.d.ts +10 -0
  290. package/dist/v2/handlers/consent/show-banner/geo.d.ts.map +1 -0
  291. package/dist/v2/handlers/consent/show-banner/geo.test.d.ts +2 -0
  292. package/dist/v2/handlers/consent/show-banner/geo.test.d.ts.map +1 -0
  293. package/dist/v2/handlers/consent/show-banner/handler.d.ts +71 -0
  294. package/dist/v2/handlers/consent/show-banner/handler.d.ts.map +1 -0
  295. package/dist/v2/handlers/consent/show-banner/handler.test.d.ts +2 -0
  296. package/dist/v2/handlers/consent/show-banner/handler.test.d.ts.map +1 -0
  297. package/dist/v2/handlers/consent/show-banner/translations.d.ts +13 -0
  298. package/dist/v2/handlers/consent/show-banner/translations.d.ts.map +1 -0
  299. package/dist/v2/handlers/consent/show-banner/translations.test.d.ts +2 -0
  300. package/dist/v2/handlers/consent/show-banner/translations.test.d.ts.map +1 -0
  301. package/dist/v2/handlers/consent/verify.handler.d.ts +103 -0
  302. package/dist/v2/handlers/consent/verify.handler.d.ts.map +1 -0
  303. package/dist/v2/handlers/meta/index.d.ts +19 -0
  304. package/dist/v2/handlers/meta/index.d.ts.map +1 -0
  305. package/dist/v2/handlers/meta/status.handler.d.ts +17 -0
  306. package/dist/v2/handlers/meta/status.handler.d.ts.map +1 -0
  307. package/dist/v2/init.d.ts +3 -0
  308. package/dist/v2/init.d.ts.map +1 -0
  309. package/dist/v2/init.test.d.ts +2 -0
  310. package/dist/v2/init.test.d.ts.map +1 -0
  311. package/dist/v2/middleware/cors/cors.d.ts +37 -0
  312. package/dist/v2/middleware/cors/cors.d.ts.map +1 -0
  313. package/dist/v2/middleware/cors/cors.test.d.ts +2 -0
  314. package/dist/v2/middleware/cors/cors.test.d.ts.map +1 -0
  315. package/dist/v2/middleware/cors/index.d.ts +30 -0
  316. package/dist/v2/middleware/cors/index.d.ts.map +1 -0
  317. package/dist/v2/middleware/cors/is-origin-trusted.d.ts +49 -0
  318. package/dist/v2/middleware/cors/is-origin-trusted.d.ts.map +1 -0
  319. package/dist/v2/middleware/cors/is-origin-trusted.test.d.ts +2 -0
  320. package/dist/v2/middleware/cors/is-origin-trusted.test.d.ts.map +1 -0
  321. package/dist/v2/middleware/cors/process-cors.d.ts +31 -0
  322. package/dist/v2/middleware/cors/process-cors.d.ts.map +1 -0
  323. package/dist/v2/middleware/openapi/config.d.ts +28 -0
  324. package/dist/v2/middleware/openapi/config.d.ts.map +1 -0
  325. package/dist/v2/middleware/openapi/handlers.d.ts +29 -0
  326. package/dist/v2/middleware/openapi/handlers.d.ts.map +1 -0
  327. package/dist/v2/middleware/openapi/index.d.ts +11 -0
  328. package/dist/v2/middleware/openapi/index.d.ts.map +1 -0
  329. package/dist/v2/middleware/process-ip/index.d.ts +3 -0
  330. package/dist/v2/middleware/process-ip/index.d.ts.map +1 -0
  331. package/dist/v2/router.cjs +1275 -0
  332. package/dist/v2/router.d.ts +280 -0
  333. package/dist/v2/router.d.ts.map +1 -0
  334. package/dist/v2/router.js +1231 -0
  335. package/dist/v2/types/api.d.ts +27 -0
  336. package/dist/v2/types/api.d.ts.map +1 -0
  337. package/dist/v2/types/index.cjs +40 -0
  338. package/dist/v2/types/index.d.ts +104 -0
  339. package/dist/v2/types/index.d.ts.map +1 -0
  340. package/dist/v2/types/index.js +6 -0
  341. package/dist/v2/utils/create-telemetry-options.d.ts +28 -0
  342. package/dist/v2/utils/create-telemetry-options.d.ts.map +1 -0
  343. package/dist/v2/utils/env.d.ts +60 -0
  344. package/dist/v2/utils/env.d.ts.map +1 -0
  345. package/dist/v2/utils/index.d.ts +3 -0
  346. package/dist/v2/utils/index.d.ts.map +1 -0
  347. package/dist/v2/utils/logger.d.ts +16 -0
  348. package/dist/v2/utils/logger.d.ts.map +1 -0
  349. package/dist/version.d.ts +1 -1
  350. package/package.json +106 -15
  351. package/readme.json +30 -0
  352. package/rslib.config.ts +13 -14
  353. package/src/__tests__/server.test.ts +1 -1
  354. package/src/contracts/consent/post.contract.test.ts +3 -8
  355. package/src/contracts/consent/post.contract.ts +13 -13
  356. package/src/contracts/consent/show-banner.contract.test.ts +9 -0
  357. package/src/contracts/consent/show-banner.contract.ts +2 -0
  358. package/src/contracts/consent/verify.contract.ts +19 -23
  359. package/src/core.ts +7 -0
  360. package/src/handlers/consent/show-banner/handler.ts +12 -9
  361. package/src/handlers/consent/show-banner/translations.ts +2 -2
  362. package/src/init.ts +9 -6
  363. package/src/middleware/openapi/index.ts +2 -2
  364. package/src/pkgs/api-router/hooks/__tests__/processor.test.ts +1 -1
  365. package/src/pkgs/data-model/fields/index.ts +17 -22
  366. package/src/pkgs/data-model/fields/zod-fields.ts +14 -26
  367. package/src/pkgs/data-model/hooks/index.ts +3 -2
  368. package/src/pkgs/data-model/index.ts +2 -4
  369. package/src/pkgs/data-model/schema/index.ts +6 -7
  370. package/src/pkgs/data-model/schema/schemas.ts +3 -3
  371. package/src/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.ts +4 -1
  372. package/src/pkgs/db-adapters/adapters/index.ts +2 -2
  373. package/src/pkgs/db-adapters/adapters/kysely-adapter/index.ts +4 -4
  374. package/src/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.ts +4 -5
  375. package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/postgres.test.ts +2 -4
  376. package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/sqlite.test.ts +2 -3
  377. package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.ts +1 -6
  378. package/src/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.ts +4 -1
  379. package/src/pkgs/db-adapters/adapters/prisma-adapter/index.ts +1 -1
  380. package/src/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.ts +5 -2
  381. package/src/pkgs/db-adapters/index.ts +12 -13
  382. package/src/pkgs/migrations/get-migration.ts +4 -2
  383. package/src/pkgs/migrations/get-schema/get-schema.ts +0 -1
  384. package/src/pkgs/migrations/get-schema/process-fields.ts +1 -1
  385. package/src/pkgs/migrations/get-schema/process-tables.ts +0 -2
  386. package/src/pkgs/migrations/index.ts +7 -8
  387. package/src/pkgs/results/__tests__/error-codes.test.ts +2 -2
  388. package/src/pkgs/results/index.ts +22 -27
  389. package/src/pkgs/results/orpc-error-handler.ts +1 -1
  390. package/src/pkgs/results/results/result-helpers.ts +1 -1
  391. package/src/pkgs/types/index.ts +4 -4
  392. package/src/pkgs/types/options.ts +10 -3
  393. package/src/pkgs/utils/index.ts +1 -1
  394. package/src/pkgs/utils/logger.ts +1 -1
  395. package/src/schema/audit-log/schema.ts +3 -3
  396. package/src/schema/consent/schema.ts +4 -4
  397. package/src/schema/consent-policy/schema.ts +3 -3
  398. package/src/schema/consent-purpose/schema.ts +4 -4
  399. package/src/schema/consent-record/schema.ts +3 -3
  400. package/src/schema/definition.ts +1 -1
  401. package/src/schema/domain/schema.ts +5 -5
  402. package/src/schema/index.ts +14 -17
  403. package/src/schema/subject/schema.ts +3 -3
  404. package/src/schema/types.ts +1 -1
  405. package/src/testing/contract-testing.ts +15 -52
  406. package/src/types/index.ts +8 -8
  407. package/src/types/options.ts +2 -3
  408. package/src/v2/contracts/consent/index.test.ts +5 -0
  409. package/src/v2/contracts/consent/index.ts +9 -0
  410. package/src/v2/contracts/consent/post.contract.test.ts +521 -0
  411. package/src/v2/contracts/consent/post.contract.ts +155 -0
  412. package/src/v2/contracts/consent/show-banner.contract.test.ts +252 -0
  413. package/src/v2/contracts/consent/show-banner.contract.ts +73 -0
  414. package/src/v2/contracts/consent/verify.contract.test.ts +185 -0
  415. package/src/v2/contracts/consent/verify.contract.ts +122 -0
  416. package/src/v2/contracts/index.ts +20 -0
  417. package/src/v2/contracts/meta/index.test.ts +5 -0
  418. package/src/v2/contracts/meta/index.ts +5 -0
  419. package/src/v2/contracts/meta/status.contract.test.ts +226 -0
  420. package/src/v2/contracts/meta/status.contract.ts +34 -0
  421. package/src/v2/contracts/shared/jurisdiction.schema.ts +30 -0
  422. package/src/v2/contracts/test.utils.ts +400 -0
  423. package/src/v2/core.ts +379 -0
  424. package/src/v2/db/adapters/drizzle.ts +1 -0
  425. package/src/v2/db/adapters/index.ts +1 -0
  426. package/src/v2/db/adapters/kysely.ts +1 -0
  427. package/src/v2/db/adapters/mongo.ts +1 -0
  428. package/src/v2/db/adapters/prisma.ts +1 -0
  429. package/src/v2/db/adapters/typeorm.ts +1 -0
  430. package/src/v2/db/migrator/index.ts +80 -0
  431. package/src/v2/db/registry/audit-log.test.ts +77 -0
  432. package/src/v2/db/registry/audit-log.ts +46 -0
  433. package/src/v2/db/registry/consent-policy.test.ts +778 -0
  434. package/src/v2/db/registry/consent-policy.ts +74 -0
  435. package/src/v2/db/registry/consent-purpose.test.ts +485 -0
  436. package/src/v2/db/registry/consent-purpose.ts +41 -0
  437. package/src/v2/db/registry/consent.test.ts +843 -0
  438. package/src/v2/db/registry/consent.ts +42 -0
  439. package/src/v2/db/registry/domain.test.ts +463 -0
  440. package/src/v2/db/registry/domain.ts +51 -0
  441. package/src/v2/db/registry/index.ts +18 -0
  442. package/src/v2/db/registry/subject.test.ts +497 -0
  443. package/src/v2/db/registry/subject.ts +101 -0
  444. package/src/v2/db/registry/types.ts +10 -0
  445. package/src/v2/db/registry/utils/generate-id.test.ts +217 -0
  446. package/src/v2/db/registry/utils/generate-id.ts +134 -0
  447. package/src/v2/db/registry/utils.ts +134 -0
  448. package/src/v2/db/schema/1.0.0/audit-log.ts +32 -0
  449. package/src/v2/db/schema/1.0.0/consent-policy.ts +41 -0
  450. package/src/v2/db/schema/1.0.0/consent-purpose.ts +30 -0
  451. package/src/v2/db/schema/1.0.0/consent-record.ts +22 -0
  452. package/src/v2/db/schema/1.0.0/consent.ts +38 -0
  453. package/src/v2/db/schema/1.0.0/domain.ts +26 -0
  454. package/src/v2/db/schema/1.0.0/index.ts +56 -0
  455. package/src/v2/db/schema/1.0.0/subject.ts +26 -0
  456. package/src/v2/db/schema/index.ts +9 -0
  457. package/src/v2/define-config.ts +5 -0
  458. package/src/v2/handlers/consent/index.ts +9 -0
  459. package/src/v2/handlers/consent/post.handler.ts +254 -0
  460. package/src/v2/handlers/consent/show-banner/geo.test.ts +281 -0
  461. package/src/v2/handlers/consent/show-banner/geo.ts +96 -0
  462. package/src/v2/handlers/consent/show-banner/handler.test.ts +374 -0
  463. package/src/v2/handlers/consent/show-banner/handler.ts +123 -0
  464. package/src/v2/handlers/consent/show-banner/translations.test.ts +121 -0
  465. package/src/v2/handlers/consent/show-banner/translations.ts +79 -0
  466. package/src/v2/handlers/consent/verify.handler.ts +288 -0
  467. package/src/v2/handlers/meta/index.ts +5 -0
  468. package/src/v2/handlers/meta/status.handler.ts +43 -0
  469. package/src/v2/init.test.ts +114 -0
  470. package/src/v2/init.ts +126 -0
  471. package/src/v2/middleware/cors/cors.test.ts +111 -0
  472. package/src/v2/middleware/cors/cors.ts +192 -0
  473. package/src/v2/middleware/cors/index.ts +30 -0
  474. package/src/v2/middleware/cors/is-origin-trusted.test.ts +104 -0
  475. package/src/v2/middleware/cors/is-origin-trusted.ts +126 -0
  476. package/src/v2/middleware/cors/process-cors.ts +91 -0
  477. package/src/v2/middleware/openapi/config.ts +27 -0
  478. package/src/v2/middleware/openapi/handlers.ts +132 -0
  479. package/src/v2/middleware/openapi/index.ts +11 -0
  480. package/src/v2/middleware/process-ip/index.ts +39 -0
  481. package/src/v2/router.ts +8 -0
  482. package/src/v2/types/api.ts +32 -0
  483. package/src/v2/types/index.ts +121 -0
  484. package/src/v2/utils/create-telemetry-options.ts +115 -0
  485. package/src/v2/utils/env.ts +84 -0
  486. package/src/v2/utils/index.ts +2 -0
  487. package/src/v2/utils/logger.ts +38 -0
  488. package/src/version.ts +1 -1
  489. package/vitest.config.ts +11 -2
package/dist/core.cjs CHANGED
@@ -33,6 +33,7 @@ var __webpack_require__ = {};
33
33
  var __webpack_exports__ = {};
34
34
  __webpack_require__.r(__webpack_exports__);
35
35
  __webpack_require__.d(__webpack_exports__, {
36
+ version: ()=>version,
36
37
  c15tInstance: ()=>c15tInstance
37
38
  });
38
39
  const logger_namespaceObject = require("@doubletie/logger");
@@ -224,6 +225,19 @@ class error_class_DoubleTieError extends server_namespaceObject.ORPCError {
224
225
  return formattedMessage;
225
226
  }
226
227
  }
228
+ function createTelemetryOptions(appName = 'c15t', telemetryConfig) {
229
+ const serviceVersion = process.env.npm_package_version || '1.0.0';
230
+ const config = {
231
+ disabled: telemetryConfig?.disabled ?? false,
232
+ tracer: telemetryConfig?.tracer,
233
+ defaultAttributes: {
234
+ ...telemetryConfig?.defaultAttributes || {},
235
+ 'service.name': String(appName),
236
+ 'service.version': serviceVersion
237
+ }
238
+ };
239
+ return config;
240
+ }
227
241
  function fail(message, options) {
228
242
  const error = new error_class_DoubleTieError(message, options);
229
243
  tracing_withSpan('create_error_result', async (span)=>{
@@ -274,32 +288,22 @@ function promiseToResult(promise, errorCode = error_codes_ERROR_CODES.UNKNOWN_ER
274
288
  return result;
275
289
  });
276
290
  }
277
- function createTelemetryOptions(appName = 'c15t', telemetryConfig) {
278
- const serviceVersion = process.env.npm_package_version || '1.0.0';
279
- const config = {
280
- disabled: telemetryConfig?.disabled ?? false,
281
- tracer: telemetryConfig?.tracer,
282
- defaultAttributes: {
283
- ...telemetryConfig?.defaultAttributes || {},
284
- 'service.name': String(appName),
285
- 'service.version': serviceVersion
286
- }
287
- };
288
- return config;
289
- }
290
291
  const resources_namespaceObject = require("@opentelemetry/resources");
291
292
  const sdk_node_namespaceObject = require("@opentelemetry/sdk-node");
292
293
  const sdk_trace_base_namespaceObject = require("@opentelemetry/sdk-trace-base");
293
- function utils_applyDefaultValue(inputValue, field, operation) {
294
- if ('update' === operation) return inputValue;
295
- if (null == inputValue && field.defaultValue) {
296
- if ('function' == typeof field.defaultValue) return field.defaultValue();
297
- return field.defaultValue;
298
- }
299
- return inputValue;
294
+ let globalLogger;
295
+ function getLogger(options) {
296
+ if (!globalLogger) globalLogger = (0, logger_namespaceObject.createLogger)({
297
+ level: 'info',
298
+ appName: 'c15t',
299
+ ...options
300
+ });
301
+ return globalLogger;
302
+ }
303
+ function initLogger(options) {
304
+ globalLogger = (0, logger_namespaceObject.createLogger)(options);
305
+ return globalLogger;
300
306
  }
301
- const external_superjson_namespaceObject = require("superjson");
302
- var external_superjson_default = /*#__PURE__*/ __webpack_require__.n(external_superjson_namespaceObject);
303
307
  const COMMON_TIMEZONES = {
304
308
  UTC: 'UTC',
305
309
  GMT: 'GMT',
@@ -337,32 +341,20 @@ function id_generator_generateId(prefix) {
337
341
  }
338
342
  const external_zod_namespaceObject = require("zod");
339
343
  const fieldConfigSchema = external_zod_namespaceObject.z.object({
340
- required: external_zod_namespaceObject.z.boolean().default(true),
341
- returned: external_zod_namespaceObject.z.boolean().default(true),
342
- input: external_zod_namespaceObject.z.boolean().default(true),
343
- defaultValue: external_zod_namespaceObject.z.union([
344
- external_zod_namespaceObject.z.any(),
345
- external_zod_namespaceObject.z["function"]().returns(external_zod_namespaceObject.z.any())
346
- ]).optional(),
344
+ required: external_zod_namespaceObject.z.boolean().prefault(true),
345
+ returned: external_zod_namespaceObject.z.boolean().prefault(true),
346
+ input: external_zod_namespaceObject.z.boolean().prefault(true),
347
+ defaultValue: external_zod_namespaceObject.z.any().optional(),
347
348
  transform: external_zod_namespaceObject.z.object({
348
- input: external_zod_namespaceObject.z["function"]().args(external_zod_namespaceObject.z.any()).returns(external_zod_namespaceObject.z.union([
349
- external_zod_namespaceObject.z.any(),
350
- external_zod_namespaceObject.z.promise(external_zod_namespaceObject.z.any())
351
- ])).optional(),
352
- output: external_zod_namespaceObject.z["function"]().args(external_zod_namespaceObject.z.any()).returns(external_zod_namespaceObject.z.union([
353
- external_zod_namespaceObject.z.any(),
354
- external_zod_namespaceObject.z.promise(external_zod_namespaceObject.z.any())
355
- ])).optional()
349
+ input: external_zod_namespaceObject.z.any().optional(),
350
+ output: external_zod_namespaceObject.z.any().optional()
356
351
  }).optional(),
357
- validator: external_zod_namespaceObject.z["function"]().args(external_zod_namespaceObject.z.any()).returns(external_zod_namespaceObject.z.union([
358
- external_zod_namespaceObject.z.string(),
359
- external_zod_namespaceObject.z["null"]()
360
- ])).optional(),
352
+ validator: external_zod_namespaceObject.z.any().optional(),
361
353
  unique: external_zod_namespaceObject.z.boolean().optional(),
362
354
  indexed: external_zod_namespaceObject.z.boolean().optional(),
363
- sortable: external_zod_namespaceObject.z.boolean().default(true),
355
+ sortable: external_zod_namespaceObject.z.boolean().prefault(true),
364
356
  fieldName: external_zod_namespaceObject.z.string().optional(),
365
- bigint: external_zod_namespaceObject.z.boolean().default(false)
357
+ bigint: external_zod_namespaceObject.z.boolean().prefault(false)
366
358
  });
367
359
  const stringFieldSchema = fieldConfigSchema.extend({
368
360
  type: external_zod_namespaceObject.z.literal('string'),
@@ -382,18 +374,18 @@ const dateFieldSchema = fieldConfigSchema.extend({
382
374
  type: external_zod_namespaceObject.z.literal('date'),
383
375
  minDate: external_zod_namespaceObject.z.date().optional(),
384
376
  maxDate: external_zod_namespaceObject.z.date().optional(),
385
- dateOnly: external_zod_namespaceObject.z.boolean().default(false),
386
- format: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional()
377
+ dateOnly: external_zod_namespaceObject.z.boolean().prefault(false),
378
+ format: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional()
387
379
  });
388
380
  const timezoneFieldSchema = fieldConfigSchema.extend({
389
381
  type: external_zod_namespaceObject.z.literal('timezone'),
390
- validateTimezone: external_zod_namespaceObject.z.boolean().default(true),
382
+ validateTimezone: external_zod_namespaceObject.z.boolean().prefault(true),
391
383
  suggestedValues: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional(),
392
- restrictToSuggestedValues: external_zod_namespaceObject.z.boolean().default(false)
384
+ restrictToSuggestedValues: external_zod_namespaceObject.z.boolean().prefault(false)
393
385
  });
394
386
  const jsonFieldSchema = fieldConfigSchema.extend({
395
387
  type: external_zod_namespaceObject.z.literal('json'),
396
- validateJson: external_zod_namespaceObject.z.boolean().default(true)
388
+ validateJson: external_zod_namespaceObject.z.boolean().prefault(true)
397
389
  });
398
390
  const stringArrayFieldSchema = fieldConfigSchema.extend({
399
391
  type: external_zod_namespaceObject.z.literal('string[]')
@@ -411,6 +403,125 @@ external_zod_namespaceObject.z.discriminatedUnion('type', [
411
403
  stringArrayFieldSchema,
412
404
  numberArrayFieldSchema
413
405
  ]);
406
+ async function processHooks(data, model, operation, phase, hooks, context) {
407
+ let currentData = {
408
+ ...data
409
+ };
410
+ for (const hookSet of hooks){
411
+ const modelHooks = hookSet[model];
412
+ if (!modelHooks) continue;
413
+ const operationHooks = modelHooks[operation];
414
+ if (!operationHooks) continue;
415
+ const hookFn = operationHooks[phase];
416
+ if (hookFn) if ('before' === phase) {
417
+ const result = await hookFn(currentData, context);
418
+ if (result && 'object' == typeof result && 'kind' in result) switch(result.kind){
419
+ case 'abort':
420
+ return null;
421
+ case 'transform':
422
+ {
423
+ const transformData = result.data;
424
+ currentData = {
425
+ ...currentData,
426
+ ...transformData
427
+ };
428
+ break;
429
+ }
430
+ default:
431
+ break;
432
+ }
433
+ } else await hookFn(currentData, context);
434
+ }
435
+ return currentData;
436
+ }
437
+ async function processAfterHooksForMany(records, model, hooks, context) {
438
+ if (!records.length) return;
439
+ for (const record of records)await processHooks(record, model, 'update', 'after', hooks, context);
440
+ }
441
+ async function create_hooks_createWithHooks(adapter, ctx, props) {
442
+ const { data, model, customFn, context } = props;
443
+ const hooks = ctx.hooks || [];
444
+ const transformedData = await processHooks(data, model, 'create', 'before', hooks, context);
445
+ if (null === transformedData) return null;
446
+ let created = null;
447
+ if (customFn) {
448
+ created = await customFn.fn(transformedData);
449
+ if (!customFn.executeMainFn && created) return created;
450
+ }
451
+ if (!created) created = await adapter.create({
452
+ model: model,
453
+ data: transformedData
454
+ });
455
+ if (created) await processHooks(created, model, 'create', 'after', hooks, context);
456
+ return created;
457
+ }
458
+ async function update_hooks_updateWithHooks(adapter, ctx, props) {
459
+ const { data, where, model, customFn, context } = props;
460
+ const hooks = ctx.hooks || [];
461
+ const transformedData = await processHooks(data, model, 'update', 'before', hooks, context);
462
+ if (null === transformedData) return null;
463
+ let updated = null;
464
+ if (customFn) {
465
+ const result = await customFn.fn(transformedData);
466
+ updated = result;
467
+ if (!customFn.executeMainFn && updated) return updated;
468
+ }
469
+ if (!updated) updated = await adapter.update({
470
+ model: model,
471
+ update: transformedData,
472
+ where
473
+ });
474
+ if (updated) await processHooks(updated, model, 'update', 'after', hooks, context);
475
+ return updated;
476
+ }
477
+ async function executeCustomFunction(data, customFn) {
478
+ if (!customFn) return {
479
+ result: null,
480
+ shouldContinue: true
481
+ };
482
+ const result = await customFn.fn(data);
483
+ const shouldContinue = !result || !!customFn.executeMainFn;
484
+ return {
485
+ result,
486
+ shouldContinue
487
+ };
488
+ }
489
+ function processUpdateManyResult(result) {
490
+ if (Array.isArray(result)) return result;
491
+ if ('number' == typeof result && result > 0) return [];
492
+ return null;
493
+ }
494
+ async function updateManyWithHooks(adapter, ctx, props) {
495
+ const { data, where, model, customFn, context } = props;
496
+ const hooks = ctx.hooks || [];
497
+ const transformedData = await processHooks(data, model, 'update', 'before', hooks, context);
498
+ if (null === transformedData) return null;
499
+ const { result: customResult, shouldContinue } = await executeCustomFunction(transformedData, customFn);
500
+ if (customResult && !shouldContinue) return customResult;
501
+ let updated = customResult;
502
+ if (!updated) {
503
+ const adapterResult = await adapter.updateMany({
504
+ model: model,
505
+ update: transformedData,
506
+ where
507
+ });
508
+ updated = processUpdateManyResult(adapterResult);
509
+ }
510
+ if (updated && updated.length > 0) await processAfterHooksForMany(updated, model, hooks, context);
511
+ return updated;
512
+ }
513
+ function getWithHooks(adapter, ctx) {
514
+ return {
515
+ createWithHooks: ({ data, model, customFn, context })=>create_hooks_createWithHooks(adapter, ctx, {
516
+ data,
517
+ model,
518
+ customFn,
519
+ context
520
+ }),
521
+ updateWithHooks: (props)=>update_hooks_updateWithHooks(adapter, ctx, props),
522
+ updateManyWithHooks: (props)=>updateManyWithHooks(adapter, ctx, props)
523
+ };
524
+ }
414
525
  const schema_auditLogSchema = external_zod_namespaceObject.z.object({
415
526
  id: external_zod_namespaceObject.z.string(),
416
527
  entityType: external_zod_namespaceObject.z.string(),
@@ -419,9 +530,9 @@ const schema_auditLogSchema = external_zod_namespaceObject.z.object({
419
530
  subjectId: external_zod_namespaceObject.z.string().optional(),
420
531
  ipAddress: external_zod_namespaceObject.z.string().optional(),
421
532
  userAgent: external_zod_namespaceObject.z.string().optional(),
422
- changes: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
423
- metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
424
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date())
533
+ changes: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional(),
534
+ metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional(),
535
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
425
536
  });
426
537
  function getAuditLogTable(options, auditLogFields) {
427
538
  const auditLogConfig = options.tables?.auditLog;
@@ -520,66 +631,188 @@ function getAuditLogTable(options, auditLogFields) {
520
631
  order: 5
521
632
  };
522
633
  }
523
- const PolicyTypeSchema = external_zod_namespaceObject.z["enum"]([
524
- 'cookie_banner',
525
- 'privacy_policy',
526
- 'dpa',
527
- 'terms_and_conditions',
528
- 'marketing_communications',
529
- 'age_verification',
530
- 'other'
531
- ]);
532
- const schema_consentPolicySchema = external_zod_namespaceObject.z.object({
634
+ const schema_consentSchema = external_zod_namespaceObject.z.object({
533
635
  id: external_zod_namespaceObject.z.string(),
534
- version: external_zod_namespaceObject.z.string(),
535
- type: PolicyTypeSchema,
536
- name: external_zod_namespaceObject.z.string(),
537
- effectiveDate: external_zod_namespaceObject.z.date(),
538
- expirationDate: external_zod_namespaceObject.z.date().nullable().optional(),
539
- content: external_zod_namespaceObject.z.string(),
540
- contentHash: external_zod_namespaceObject.z.string(),
541
- isActive: external_zod_namespaceObject.z.boolean().default(true),
542
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
543
- updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
636
+ subjectId: external_zod_namespaceObject.z.string(),
637
+ domainId: external_zod_namespaceObject.z.string(),
638
+ purposeIds: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()),
639
+ metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).nullable().optional(),
640
+ policyId: external_zod_namespaceObject.z.string().optional(),
641
+ ipAddress: external_zod_namespaceObject.z.string().nullable().optional(),
642
+ userAgent: external_zod_namespaceObject.z.string().nullable().optional(),
643
+ status: external_zod_namespaceObject.z["enum"]([
644
+ 'active',
645
+ 'withdrawn',
646
+ 'expired'
647
+ ]).prefault('active'),
648
+ withdrawalReason: external_zod_namespaceObject.z.string().nullable().optional(),
649
+ givenAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
650
+ validUntil: external_zod_namespaceObject.z.date().nullable().optional(),
651
+ isActive: external_zod_namespaceObject.z.boolean().prefault(true)
544
652
  });
545
- function getConsentPolicyTable(options, policyFields) {
546
- const consentPolicyConfig = options.tables?.consentPolicy;
653
+ function getConsentTable(options, consentFields) {
654
+ const consentConfig = options.tables?.consent;
655
+ const subjectConfig = options.tables?.subject;
656
+ const domainConfig = options.tables?.domain;
657
+ const policyConfig = options.tables?.consentPolicy;
547
658
  return {
548
- entityName: consentPolicyConfig?.entityName || 'consentPolicy',
549
- entityPrefix: consentPolicyConfig?.entityPrefix || 'pol',
550
- schema: schema_consentPolicySchema,
659
+ entityName: consentConfig?.entityName || 'consent',
660
+ entityPrefix: consentConfig?.entityPrefix || 'cns',
661
+ schema: schema_consentSchema,
551
662
  fields: {
552
- version: {
553
- type: 'string',
554
- required: true,
555
- fieldName: consentPolicyConfig?.fields?.version || 'version'
556
- },
557
- type: {
663
+ subjectId: {
558
664
  type: 'string',
559
665
  required: true,
560
- fieldName: consentPolicyConfig?.fields?.type || 'type'
666
+ fieldName: consentConfig?.fields?.subjectId || 'subjectId',
667
+ references: {
668
+ model: subjectConfig?.entityName || 'subject',
669
+ field: 'id'
670
+ }
561
671
  },
562
- name: {
672
+ domainId: {
563
673
  type: 'string',
564
674
  required: true,
565
- fieldName: consentPolicyConfig?.fields?.name || 'name'
675
+ fieldName: consentConfig?.fields?.domainId || 'domainId',
676
+ references: {
677
+ model: domainConfig?.entityName || 'domain',
678
+ field: 'id'
679
+ }
566
680
  },
567
- effectiveDate: {
568
- type: 'date',
569
- required: true,
570
- fieldName: consentPolicyConfig?.fields?.effectiveDate || 'effectiveDate'
681
+ purposeIds: {
682
+ type: 'json',
683
+ required: false,
684
+ fieldName: consentConfig?.fields?.purposeIds || 'purposeIds'
571
685
  },
572
- expirationDate: {
573
- type: 'date',
686
+ metadata: {
687
+ type: 'json',
574
688
  required: false,
575
- fieldName: consentPolicyConfig?.fields?.expirationDate || 'expirationDate'
689
+ fieldName: consentConfig?.fields?.metadata || 'metadata'
576
690
  },
577
- content: {
691
+ policyId: {
578
692
  type: 'string',
579
- required: true,
580
- fieldName: consentPolicyConfig?.fields?.content || 'content'
693
+ required: false,
694
+ fieldName: consentConfig?.fields?.policyId || 'policyId',
695
+ references: {
696
+ model: policyConfig?.entityName || 'consentPolicy',
697
+ field: 'id'
698
+ }
581
699
  },
582
- contentHash: {
700
+ ipAddress: {
701
+ type: 'string',
702
+ required: false,
703
+ fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
704
+ },
705
+ userAgent: {
706
+ type: 'string',
707
+ required: false,
708
+ fieldName: consentConfig?.fields?.userAgent || 'userAgent'
709
+ },
710
+ status: {
711
+ type: 'string',
712
+ defaultValue: ()=>'active',
713
+ required: true,
714
+ fieldName: consentConfig?.fields?.status || 'status'
715
+ },
716
+ withdrawalReason: {
717
+ type: 'string',
718
+ required: false,
719
+ fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
720
+ },
721
+ givenAt: {
722
+ type: 'date',
723
+ defaultValue: ()=>new Date(),
724
+ required: true,
725
+ fieldName: consentConfig?.fields?.givenAt || 'givenAt'
726
+ },
727
+ validUntil: {
728
+ type: 'date',
729
+ required: false,
730
+ fieldName: consentConfig?.fields?.validUntil || 'validUntil',
731
+ transform: {
732
+ input: (val, data)=>{
733
+ if (val) return val;
734
+ const expiresIn = consentConfig?.expiresIn || 31536000;
735
+ const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
736
+ if (expiresIn > 0) {
737
+ const validUntil = new Date(givenAt);
738
+ validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
739
+ return validUntil;
740
+ }
741
+ }
742
+ }
743
+ },
744
+ isActive: {
745
+ type: 'boolean',
746
+ defaultValue: true,
747
+ required: true,
748
+ fieldName: consentConfig?.fields?.isActive || 'isActive'
749
+ },
750
+ ...consentFields || {},
751
+ ...consentConfig?.additionalFields || {}
752
+ },
753
+ order: 3
754
+ };
755
+ }
756
+ const PolicyTypeSchema = external_zod_namespaceObject.z["enum"]([
757
+ 'cookie_banner',
758
+ 'privacy_policy',
759
+ 'dpa',
760
+ 'terms_and_conditions',
761
+ 'marketing_communications',
762
+ 'age_verification',
763
+ 'other'
764
+ ]);
765
+ const schema_consentPolicySchema = external_zod_namespaceObject.z.object({
766
+ id: external_zod_namespaceObject.z.string(),
767
+ version: external_zod_namespaceObject.z.string(),
768
+ type: PolicyTypeSchema,
769
+ name: external_zod_namespaceObject.z.string(),
770
+ effectiveDate: external_zod_namespaceObject.z.date(),
771
+ expirationDate: external_zod_namespaceObject.z.date().nullable().optional(),
772
+ content: external_zod_namespaceObject.z.string(),
773
+ contentHash: external_zod_namespaceObject.z.string(),
774
+ isActive: external_zod_namespaceObject.z.boolean().prefault(true),
775
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
776
+ updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
777
+ });
778
+ function getConsentPolicyTable(options, policyFields) {
779
+ const consentPolicyConfig = options.tables?.consentPolicy;
780
+ return {
781
+ entityName: consentPolicyConfig?.entityName || 'consentPolicy',
782
+ entityPrefix: consentPolicyConfig?.entityPrefix || 'pol',
783
+ schema: schema_consentPolicySchema,
784
+ fields: {
785
+ version: {
786
+ type: 'string',
787
+ required: true,
788
+ fieldName: consentPolicyConfig?.fields?.version || 'version'
789
+ },
790
+ type: {
791
+ type: 'string',
792
+ required: true,
793
+ fieldName: consentPolicyConfig?.fields?.type || 'type'
794
+ },
795
+ name: {
796
+ type: 'string',
797
+ required: true,
798
+ fieldName: consentPolicyConfig?.fields?.name || 'name'
799
+ },
800
+ effectiveDate: {
801
+ type: 'date',
802
+ required: true,
803
+ fieldName: consentPolicyConfig?.fields?.effectiveDate || 'effectiveDate'
804
+ },
805
+ expirationDate: {
806
+ type: 'date',
807
+ required: false,
808
+ fieldName: consentPolicyConfig?.fields?.expirationDate || 'expirationDate'
809
+ },
810
+ content: {
811
+ type: 'string',
812
+ required: true,
813
+ fieldName: consentPolicyConfig?.fields?.content || 'content'
814
+ },
815
+ contentHash: {
583
816
  type: 'string',
584
817
  required: true,
585
818
  fieldName: consentPolicyConfig?.fields?.contentHash || 'contentHash'
@@ -607,12 +840,12 @@ const schema_purposeSchema = external_zod_namespaceObject.z.object({
607
840
  code: external_zod_namespaceObject.z.string(),
608
841
  name: external_zod_namespaceObject.z.string(),
609
842
  description: external_zod_namespaceObject.z.string(),
610
- isEssential: external_zod_namespaceObject.z.boolean().default(false),
843
+ isEssential: external_zod_namespaceObject.z.boolean().prefault(false),
611
844
  dataCategory: external_zod_namespaceObject.z.string().nullish(),
612
845
  legalBasis: external_zod_namespaceObject.z.string().nullish(),
613
- isActive: external_zod_namespaceObject.z.boolean().default(true),
614
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
615
- updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
846
+ isActive: external_zod_namespaceObject.z.boolean().prefault(true),
847
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
848
+ updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
616
849
  });
617
850
  function getPurposeTable(options, purposeFields) {
618
851
  const purposeConfig = options.tables?.consentPurpose;
@@ -681,9 +914,9 @@ const schema_consentRecordSchema = external_zod_namespaceObject.z.object({
681
914
  subjectId: external_zod_namespaceObject.z.string(),
682
915
  consentId: external_zod_namespaceObject.z.string().optional(),
683
916
  actionType: external_zod_namespaceObject.z.string(),
684
- details: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
685
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
686
- updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
917
+ details: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional(),
918
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
919
+ updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
687
920
  });
688
921
  function getConsentRecordTable(options, recordFields) {
689
922
  const recordConfig = options.tables?.record;
@@ -734,137 +967,15 @@ function getConsentRecordTable(options, recordFields) {
734
967
  order: 4
735
968
  };
736
969
  }
737
- const schema_consentSchema = external_zod_namespaceObject.z.object({
738
- id: external_zod_namespaceObject.z.string(),
739
- subjectId: external_zod_namespaceObject.z.string(),
740
- domainId: external_zod_namespaceObject.z.string(),
741
- purposeIds: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()),
742
- metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).nullable().optional(),
743
- policyId: external_zod_namespaceObject.z.string().optional(),
744
- ipAddress: external_zod_namespaceObject.z.string().nullable().optional(),
745
- userAgent: external_zod_namespaceObject.z.string().nullable().optional(),
746
- status: external_zod_namespaceObject.z["enum"]([
747
- 'active',
748
- 'withdrawn',
749
- 'expired'
750
- ]).default('active'),
751
- withdrawalReason: external_zod_namespaceObject.z.string().nullable().optional(),
752
- givenAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
753
- validUntil: external_zod_namespaceObject.z.date().nullable().optional(),
754
- isActive: external_zod_namespaceObject.z.boolean().default(true)
755
- });
756
- function getConsentTable(options, consentFields) {
757
- const consentConfig = options.tables?.consent;
758
- const subjectConfig = options.tables?.subject;
759
- const domainConfig = options.tables?.domain;
760
- const policyConfig = options.tables?.consentPolicy;
761
- return {
762
- entityName: consentConfig?.entityName || 'consent',
763
- entityPrefix: consentConfig?.entityPrefix || 'cns',
764
- schema: schema_consentSchema,
765
- fields: {
766
- subjectId: {
767
- type: 'string',
768
- required: true,
769
- fieldName: consentConfig?.fields?.subjectId || 'subjectId',
770
- references: {
771
- model: subjectConfig?.entityName || 'subject',
772
- field: 'id'
773
- }
774
- },
775
- domainId: {
776
- type: 'string',
777
- required: true,
778
- fieldName: consentConfig?.fields?.domainId || 'domainId',
779
- references: {
780
- model: domainConfig?.entityName || 'domain',
781
- field: 'id'
782
- }
783
- },
784
- purposeIds: {
785
- type: 'json',
786
- required: false,
787
- fieldName: consentConfig?.fields?.purposeIds || 'purposeIds'
788
- },
789
- metadata: {
790
- type: 'json',
791
- required: false,
792
- fieldName: consentConfig?.fields?.metadata || 'metadata'
793
- },
794
- policyId: {
795
- type: 'string',
796
- required: false,
797
- fieldName: consentConfig?.fields?.policyId || 'policyId',
798
- references: {
799
- model: policyConfig?.entityName || 'consentPolicy',
800
- field: 'id'
801
- }
802
- },
803
- ipAddress: {
804
- type: 'string',
805
- required: false,
806
- fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
807
- },
808
- userAgent: {
809
- type: 'string',
810
- required: false,
811
- fieldName: consentConfig?.fields?.userAgent || 'userAgent'
812
- },
813
- status: {
814
- type: 'string',
815
- defaultValue: ()=>'active',
816
- required: true,
817
- fieldName: consentConfig?.fields?.status || 'status'
818
- },
819
- withdrawalReason: {
820
- type: 'string',
821
- required: false,
822
- fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
823
- },
824
- givenAt: {
825
- type: 'date',
826
- defaultValue: ()=>new Date(),
827
- required: true,
828
- fieldName: consentConfig?.fields?.givenAt || 'givenAt'
829
- },
830
- validUntil: {
831
- type: 'date',
832
- required: false,
833
- fieldName: consentConfig?.fields?.validUntil || 'validUntil',
834
- transform: {
835
- input: (val, data)=>{
836
- if (val) return val;
837
- const expiresIn = consentConfig?.expiresIn || 31536000;
838
- const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
839
- if (expiresIn > 0) {
840
- const validUntil = new Date(givenAt);
841
- validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
842
- return validUntil;
843
- }
844
- }
845
- }
846
- },
847
- isActive: {
848
- type: 'boolean',
849
- defaultValue: true,
850
- required: true,
851
- fieldName: consentConfig?.fields?.isActive || 'isActive'
852
- },
853
- ...consentFields || {},
854
- ...consentConfig?.additionalFields || {}
855
- },
856
- order: 3
857
- };
858
- }
859
970
  const schema_domainSchema = external_zod_namespaceObject.z.object({
860
971
  id: external_zod_namespaceObject.z.string(),
861
972
  name: external_zod_namespaceObject.z.string().min(1),
862
973
  description: external_zod_namespaceObject.z.string().optional(),
863
- allowedOrigins: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional().default([]),
864
- isVerified: external_zod_namespaceObject.z.boolean().default(true),
865
- isActive: external_zod_namespaceObject.z.boolean().default(true),
866
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
867
- updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
974
+ allowedOrigins: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional().prefault([]),
975
+ isVerified: external_zod_namespaceObject.z.boolean().prefault(true),
976
+ isActive: external_zod_namespaceObject.z.boolean().prefault(true),
977
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
978
+ updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
868
979
  });
869
980
  function getDomainTable(options, domainFields) {
870
981
  const domainConfig = options.tables?.domain;
@@ -921,12 +1032,12 @@ function getDomainTable(options, domainFields) {
921
1032
  }
922
1033
  const schema_subjectSchema = external_zod_namespaceObject.z.object({
923
1034
  id: external_zod_namespaceObject.z.string(),
924
- isIdentified: external_zod_namespaceObject.z.boolean().default(false),
1035
+ isIdentified: external_zod_namespaceObject.z.boolean().prefault(false),
925
1036
  externalId: external_zod_namespaceObject.z.string().nullable().optional(),
926
1037
  identityProvider: external_zod_namespaceObject.z.string().optional(),
927
1038
  lastIpAddress: external_zod_namespaceObject.z.string().optional(),
928
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
929
- updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
1039
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
1040
+ updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
930
1041
  });
931
1042
  function getSubjectTable(options, subjectFields) {
932
1043
  const subjectConfig = options.tables?.subject;
@@ -966,213 +1077,62 @@ function getSubjectTable(options, subjectFields) {
966
1077
  type: 'date',
967
1078
  defaultValue: ()=>new Date(),
968
1079
  required: true,
969
- fieldName: subjectConfig?.fields?.updatedAt || 'updatedAt'
970
- },
971
- subjectTimezone: {
972
- type: 'timezone',
973
- required: false,
974
- defaultValue: COMMON_TIMEZONES.UTC,
975
- fieldName: subjectConfig?.fields?.subjectTimezone || 'subjectTimezone'
976
- },
977
- ...subjectFields || {},
978
- ...subjectConfig?.additionalFields || {}
979
- },
980
- order: 1
981
- };
982
- }
983
- const definition_getConsentTables = (options)=>{
984
- const pluginSchema = options.plugins?.reduce((acc, plugin)=>{
985
- const schema = plugin.schema;
986
- if (!schema) return acc;
987
- for (const [key, value] of Object.entries(schema))acc[key] = {
988
- fields: {
989
- ...acc[key]?.fields,
990
- ...value.fields
991
- },
992
- entityName: key
993
- };
994
- return acc;
995
- }, {});
996
- const { subject, consentPurpose, consentPolicy, domain, geoLocation, consent, consentPurposeJunction, record, consentGeoLocation, consentWithdrawal, auditLog, ...pluginTables } = pluginSchema || {};
997
- return {
998
- subject: getSubjectTable(options, subject?.fields),
999
- consentPurpose: getPurposeTable(options, consentPurpose?.fields),
1000
- consentPolicy: getConsentPolicyTable(options, consentPolicy?.fields),
1001
- domain: getDomainTable(options, domain?.fields),
1002
- consent: getConsentTable(options, consent?.fields),
1003
- consentRecord: getConsentRecordTable(options, record?.fields),
1004
- auditLog: getAuditLogTable(options, auditLog?.fields),
1005
- ...pluginTables
1006
- };
1007
- };
1008
- function validateEntityOutput(tableName, data, options) {
1009
- const tables = definition_getConsentTables(options);
1010
- const table = tables[tableName];
1011
- if (!table) throw new Error(`Table ${tableName} not found`);
1012
- const processedData = {
1013
- ...data
1014
- };
1015
- for (const [field, def] of Object.entries(table.fields))if ('date' === def.type && 'string' == typeof processedData[field]) processedData[field] = new Date(processedData[field]);
1016
- try {
1017
- return table.schema.parse(processedData);
1018
- } catch (error) {
1019
- if (error instanceof external_zod_namespaceObject.ZodError) logger_namespaceObject.logger.error(`[validateEntityOutput] Validation failed for table ${String(tableName)}`, {
1020
- table,
1021
- issues: error.issues
1022
- });
1023
- throw error;
1024
- }
1025
- }
1026
- function subjectRegistry({ adapter, ...ctx }) {
1027
- const { createWithHooks } = getWithHooks(adapter, ctx);
1028
- return {
1029
- createSubject: async (subject, context)=>{
1030
- const createdSubject = await createWithHooks({
1031
- data: {
1032
- createdAt: new Date(),
1033
- updatedAt: new Date(),
1034
- ...subject
1035
- },
1036
- model: 'subject',
1037
- customFn: void 0,
1038
- context
1039
- });
1040
- return createdSubject ? validateEntityOutput('subject', createdSubject, ctx.options) : null;
1041
- },
1042
- findOrCreateSubject: async function({ subjectId, externalSubjectId, ipAddress = 'unknown', context }) {
1043
- if (subjectId && externalSubjectId) {
1044
- const [subjectById, subjectByExternalId] = await Promise.all([
1045
- this.findSubjectById(subjectId),
1046
- this.findSubjectByExternalId(externalSubjectId)
1047
- ]);
1048
- if (!subjectById || !subjectByExternalId) {
1049
- ctx.logger?.error('Subject validation failed: One or both subjects not found', {
1050
- providedSubjectId: subjectId,
1051
- providedExternalId: externalSubjectId,
1052
- subjectByIdFound: !!subjectById,
1053
- subjectByExternalIdFound: !!subjectByExternalId
1054
- });
1055
- throw new error_class_DoubleTieError('The specified subject could not be found. Please verify the subject identifiers and try again.', {
1056
- code: error_codes_ERROR_CODES.NOT_FOUND,
1057
- status: 404,
1058
- meta: {
1059
- providedSubjectId: subjectId,
1060
- providedExternalId: externalSubjectId
1061
- }
1062
- });
1063
- }
1064
- if (subjectById.id !== subjectByExternalId.id) {
1065
- ctx.logger?.warn('Subject validation failed: IDs do not match the same subject', {
1066
- providedSubjectId: subjectId,
1067
- providedExternalId: externalSubjectId,
1068
- subjectByIdId: subjectById.id,
1069
- subjectByExternalIdId: subjectByExternalId.id
1070
- });
1071
- throw new error_class_DoubleTieError('The provided subjectId and externalSubjectId do not match the same subject. Please ensure both identifiers refer to the same subject.', {
1072
- code: error_codes_ERROR_CODES.CONFLICT,
1073
- status: 409,
1074
- meta: {
1075
- providedSubjectId: subjectId,
1076
- providedExternalId: externalSubjectId,
1077
- subjectByIdId: subjectById.id,
1078
- subjectByExternalIdId: subjectByExternalId.id
1079
- }
1080
- });
1081
- }
1082
- return subjectById;
1083
- }
1084
- if (subjectId) {
1085
- const subject = await this.findSubjectById(subjectId);
1086
- if (subject) return subject;
1087
- throw new error_class_DoubleTieError('Subject not found by subjectId', {
1088
- code: error_codes_ERROR_CODES.NOT_FOUND,
1089
- status: 404
1090
- });
1091
- }
1092
- if (externalSubjectId) try {
1093
- const subject = await this.findSubjectByExternalId(externalSubjectId);
1094
- if (subject) {
1095
- ctx.logger?.debug('Found existing subject by external ID', {
1096
- externalSubjectId
1097
- });
1098
- return subject;
1099
- }
1100
- ctx.logger?.info('Creating new subject with external ID', {
1101
- externalSubjectId
1102
- });
1103
- return await this.createSubject({
1104
- externalId: externalSubjectId,
1105
- identityProvider: 'external',
1106
- lastIpAddress: ipAddress,
1107
- isIdentified: true
1108
- }, context);
1109
- } catch (error) {
1110
- if (error instanceof Error && error.message.includes('unique constraint')) {
1111
- ctx.logger?.info('Handling duplicate key violation for external ID', {
1112
- externalSubjectId
1113
- });
1114
- const subject = await this.findSubjectByExternalId(externalSubjectId);
1115
- if (subject) return subject;
1116
- }
1117
- ctx.logger?.error('Failed to create or find subject with external ID', {
1118
- externalSubjectId,
1119
- error: error instanceof Error ? error.message : 'Unknown error'
1120
- });
1121
- throw new error_class_DoubleTieError('Failed to create or find subject with external ID', {
1122
- code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1123
- status: 500,
1124
- meta: {
1125
- error: error instanceof Error ? error.message : 'Unknown error'
1126
- }
1127
- });
1128
- }
1129
- try {
1130
- ctx.logger?.info('Creating new anonymous subject');
1131
- return await this.createSubject({
1132
- externalId: null,
1133
- identityProvider: 'anonymous',
1134
- lastIpAddress: ipAddress,
1135
- isIdentified: false
1136
- }, context);
1137
- } catch (error) {
1138
- ctx.logger?.error('Failed to create anonymous subject', {
1139
- ipAddress,
1140
- error: error instanceof Error ? error.message : 'Unknown error'
1141
- });
1142
- throw new error_class_DoubleTieError('Failed to create anonymous subject', {
1143
- code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1144
- status: 500,
1145
- meta: {
1146
- error: error instanceof Error ? error.message : 'Unknown error'
1147
- }
1148
- });
1149
- }
1150
- },
1151
- findSubjectById: async (subjectId)=>{
1152
- const subject = await adapter.findOne({
1153
- model: 'subject',
1154
- where: [
1155
- {
1156
- field: 'id',
1157
- value: subjectId
1158
- }
1159
- ]
1160
- });
1161
- return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1080
+ fieldName: subjectConfig?.fields?.updatedAt || 'updatedAt'
1081
+ },
1082
+ subjectTimezone: {
1083
+ type: 'timezone',
1084
+ required: false,
1085
+ defaultValue: COMMON_TIMEZONES.UTC,
1086
+ fieldName: subjectConfig?.fields?.subjectTimezone || 'subjectTimezone'
1087
+ },
1088
+ ...subjectFields || {},
1089
+ ...subjectConfig?.additionalFields || {}
1162
1090
  },
1163
- findSubjectByExternalId: async (externalId)=>{
1164
- const subject = await adapter.findOne({
1165
- model: 'subject',
1166
- where: [
1167
- {
1168
- field: 'externalId',
1169
- value: externalId
1170
- }
1171
- ]
1172
- });
1173
- return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1174
- }
1091
+ order: 1
1092
+ };
1093
+ }
1094
+ const definition_getConsentTables = (options)=>{
1095
+ const pluginSchema = options.plugins?.reduce((acc, plugin)=>{
1096
+ const schema = plugin.schema;
1097
+ if (!schema) return acc;
1098
+ for (const [key, value] of Object.entries(schema))acc[key] = {
1099
+ fields: {
1100
+ ...acc[key]?.fields,
1101
+ ...value.fields
1102
+ },
1103
+ entityName: key
1104
+ };
1105
+ return acc;
1106
+ }, {});
1107
+ const { subject, consentPurpose, consentPolicy, domain, geoLocation, consent, consentPurposeJunction, record, consentGeoLocation, consentWithdrawal, auditLog, ...pluginTables } = pluginSchema || {};
1108
+ return {
1109
+ subject: getSubjectTable(options, subject?.fields),
1110
+ consentPurpose: getPurposeTable(options, consentPurpose?.fields),
1111
+ consentPolicy: getConsentPolicyTable(options, consentPolicy?.fields),
1112
+ domain: getDomainTable(options, domain?.fields),
1113
+ consent: getConsentTable(options, consent?.fields),
1114
+ consentRecord: getConsentRecordTable(options, record?.fields),
1115
+ auditLog: getAuditLogTable(options, auditLog?.fields),
1116
+ ...pluginTables
1175
1117
  };
1118
+ };
1119
+ function validateEntityOutput(tableName, data, options) {
1120
+ const tables = definition_getConsentTables(options);
1121
+ const table = tables[tableName];
1122
+ if (!table) throw new Error(`Table ${tableName} not found`);
1123
+ const processedData = {
1124
+ ...data
1125
+ };
1126
+ for (const [field, def] of Object.entries(table.fields))if ('date' === def.type && 'string' == typeof processedData[field]) processedData[field] = new Date(processedData[field]);
1127
+ try {
1128
+ return table.schema.parse(processedData);
1129
+ } catch (error) {
1130
+ if (error instanceof external_zod_namespaceObject.ZodError) logger_namespaceObject.logger.error(`[validateEntityOutput] Validation failed for table ${String(tableName)}`, {
1131
+ table,
1132
+ issues: error.issues
1133
+ });
1134
+ throw error;
1135
+ }
1176
1136
  }
1177
1137
  function consentRegistry({ adapter, ...ctx }) {
1178
1138
  const { createWithHooks, updateWithHooks } = getWithHooks(adapter, ctx);
@@ -1449,146 +1409,236 @@ function domainRegistry({ adapter, ...ctx }) {
1449
1409
  };
1450
1410
  return registry;
1451
1411
  }
1452
- function auditLogRegistry({ adapter, ...ctx }) {
1412
+ function subjectRegistry({ adapter, ...ctx }) {
1453
1413
  const { createWithHooks } = getWithHooks(adapter, ctx);
1454
1414
  return {
1455
- createAuditLog: async (auditLog, context)=>{
1456
- const createdLog = await createWithHooks({
1415
+ createSubject: async (subject, context)=>{
1416
+ const createdSubject = await createWithHooks({
1457
1417
  data: {
1458
1418
  createdAt: new Date(),
1459
- ...auditLog
1419
+ updatedAt: new Date(),
1420
+ ...subject
1460
1421
  },
1461
- model: 'auditLog',
1422
+ model: 'subject',
1462
1423
  customFn: void 0,
1463
1424
  context
1464
1425
  });
1465
- if (!createdLog) throw new error_class_DoubleTieError('Failed to create audit log - operation returned null', {
1466
- code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1467
- status: 500
1468
- });
1469
- return createdLog;
1470
- }
1471
- };
1472
- }
1473
- async function processHooks(data, model, operation, phase, hooks, context) {
1474
- let currentData = {
1475
- ...data
1476
- };
1477
- for (const hookSet of hooks){
1478
- const modelHooks = hookSet[model];
1479
- if (!modelHooks) continue;
1480
- const operationHooks = modelHooks[operation];
1481
- if (!operationHooks) continue;
1482
- const hookFn = operationHooks[phase];
1483
- if (hookFn) if ('before' === phase) {
1484
- const result = await hookFn(currentData, context);
1485
- if (result && 'object' == typeof result && 'kind' in result) switch(result.kind){
1486
- case 'abort':
1487
- return null;
1488
- case 'transform':
1489
- {
1490
- const transformData = result.data;
1491
- currentData = {
1492
- ...currentData,
1493
- ...transformData
1494
- };
1495
- break;
1426
+ return createdSubject ? validateEntityOutput('subject', createdSubject, ctx.options) : null;
1427
+ },
1428
+ findOrCreateSubject: async function({ subjectId, externalSubjectId, ipAddress = 'unknown', context }) {
1429
+ if (subjectId && externalSubjectId) {
1430
+ const [subjectById, subjectByExternalId] = await Promise.all([
1431
+ this.findSubjectById(subjectId),
1432
+ this.findSubjectByExternalId(externalSubjectId)
1433
+ ]);
1434
+ if (!subjectById || !subjectByExternalId) {
1435
+ ctx.logger?.error('Subject validation failed: One or both subjects not found', {
1436
+ providedSubjectId: subjectId,
1437
+ providedExternalId: externalSubjectId,
1438
+ subjectByIdFound: !!subjectById,
1439
+ subjectByExternalIdFound: !!subjectByExternalId
1440
+ });
1441
+ throw new error_class_DoubleTieError('The specified subject could not be found. Please verify the subject identifiers and try again.', {
1442
+ code: error_codes_ERROR_CODES.NOT_FOUND,
1443
+ status: 404,
1444
+ meta: {
1445
+ providedSubjectId: subjectId,
1446
+ providedExternalId: externalSubjectId
1447
+ }
1448
+ });
1449
+ }
1450
+ if (subjectById.id !== subjectByExternalId.id) {
1451
+ ctx.logger?.warn('Subject validation failed: IDs do not match the same subject', {
1452
+ providedSubjectId: subjectId,
1453
+ providedExternalId: externalSubjectId,
1454
+ subjectByIdId: subjectById.id,
1455
+ subjectByExternalIdId: subjectByExternalId.id
1456
+ });
1457
+ throw new error_class_DoubleTieError('The provided subjectId and externalSubjectId do not match the same subject. Please ensure both identifiers refer to the same subject.', {
1458
+ code: error_codes_ERROR_CODES.CONFLICT,
1459
+ status: 409,
1460
+ meta: {
1461
+ providedSubjectId: subjectId,
1462
+ providedExternalId: externalSubjectId,
1463
+ subjectByIdId: subjectById.id,
1464
+ subjectByExternalIdId: subjectByExternalId.id
1465
+ }
1466
+ });
1467
+ }
1468
+ return subjectById;
1469
+ }
1470
+ if (subjectId) {
1471
+ const subject = await this.findSubjectById(subjectId);
1472
+ if (subject) return subject;
1473
+ throw new error_class_DoubleTieError('Subject not found by subjectId', {
1474
+ code: error_codes_ERROR_CODES.NOT_FOUND,
1475
+ status: 404
1476
+ });
1477
+ }
1478
+ if (externalSubjectId) try {
1479
+ const subject = await this.findSubjectByExternalId(externalSubjectId);
1480
+ if (subject) {
1481
+ ctx.logger?.debug('Found existing subject by external ID', {
1482
+ externalSubjectId
1483
+ });
1484
+ return subject;
1485
+ }
1486
+ ctx.logger?.info('Creating new subject with external ID', {
1487
+ externalSubjectId
1488
+ });
1489
+ return await this.createSubject({
1490
+ externalId: externalSubjectId,
1491
+ identityProvider: 'external',
1492
+ lastIpAddress: ipAddress,
1493
+ isIdentified: true
1494
+ }, context);
1495
+ } catch (error) {
1496
+ if (error instanceof Error && error.message.includes('unique constraint')) {
1497
+ ctx.logger?.info('Handling duplicate key violation for external ID', {
1498
+ externalSubjectId
1499
+ });
1500
+ const subject = await this.findSubjectByExternalId(externalSubjectId);
1501
+ if (subject) return subject;
1502
+ }
1503
+ ctx.logger?.error('Failed to create or find subject with external ID', {
1504
+ externalSubjectId,
1505
+ error: error instanceof Error ? error.message : 'Unknown error'
1506
+ });
1507
+ throw new error_class_DoubleTieError('Failed to create or find subject with external ID', {
1508
+ code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1509
+ status: 500,
1510
+ meta: {
1511
+ error: error instanceof Error ? error.message : 'Unknown error'
1496
1512
  }
1497
- default:
1498
- break;
1513
+ });
1499
1514
  }
1500
- } else await hookFn(currentData, context);
1501
- }
1502
- return currentData;
1503
- }
1504
- async function processAfterHooksForMany(records, model, hooks, context) {
1505
- if (!records.length) return;
1506
- for (const record of records)await processHooks(record, model, 'update', 'after', hooks, context);
1507
- }
1508
- async function create_hooks_createWithHooks(adapter, ctx, props) {
1509
- const { data, model, customFn, context } = props;
1510
- const hooks = ctx.hooks || [];
1511
- const transformedData = await processHooks(data, model, 'create', 'before', hooks, context);
1512
- if (null === transformedData) return null;
1513
- let created = null;
1514
- if (customFn) {
1515
- created = await customFn.fn(transformedData);
1516
- if (!customFn.executeMainFn && created) return created;
1517
- }
1518
- if (!created) created = await adapter.create({
1519
- model: model,
1520
- data: transformedData
1521
- });
1522
- if (created) await processHooks(created, model, 'create', 'after', hooks, context);
1523
- return created;
1524
- }
1525
- async function update_hooks_updateWithHooks(adapter, ctx, props) {
1526
- const { data, where, model, customFn, context } = props;
1527
- const hooks = ctx.hooks || [];
1528
- const transformedData = await processHooks(data, model, 'update', 'before', hooks, context);
1529
- if (null === transformedData) return null;
1530
- let updated = null;
1531
- if (customFn) {
1532
- const result = await customFn.fn(transformedData);
1533
- updated = result;
1534
- if (!customFn.executeMainFn && updated) return updated;
1535
- }
1536
- if (!updated) updated = await adapter.update({
1537
- model: model,
1538
- update: transformedData,
1539
- where
1540
- });
1541
- if (updated) await processHooks(updated, model, 'update', 'after', hooks, context);
1542
- return updated;
1543
- }
1544
- async function executeCustomFunction(data, customFn) {
1545
- if (!customFn) return {
1546
- result: null,
1547
- shouldContinue: true
1515
+ try {
1516
+ ctx.logger?.info('Creating new anonymous subject');
1517
+ return await this.createSubject({
1518
+ externalId: null,
1519
+ identityProvider: 'anonymous',
1520
+ lastIpAddress: ipAddress,
1521
+ isIdentified: false
1522
+ }, context);
1523
+ } catch (error) {
1524
+ ctx.logger?.error('Failed to create anonymous subject', {
1525
+ ipAddress,
1526
+ error: error instanceof Error ? error.message : 'Unknown error'
1527
+ });
1528
+ throw new error_class_DoubleTieError('Failed to create anonymous subject', {
1529
+ code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1530
+ status: 500,
1531
+ meta: {
1532
+ error: error instanceof Error ? error.message : 'Unknown error'
1533
+ }
1534
+ });
1535
+ }
1536
+ },
1537
+ findSubjectById: async (subjectId)=>{
1538
+ const subject = await adapter.findOne({
1539
+ model: 'subject',
1540
+ where: [
1541
+ {
1542
+ field: 'id',
1543
+ value: subjectId
1544
+ }
1545
+ ]
1546
+ });
1547
+ return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1548
+ },
1549
+ findSubjectByExternalId: async (externalId)=>{
1550
+ const subject = await adapter.findOne({
1551
+ model: 'subject',
1552
+ where: [
1553
+ {
1554
+ field: 'externalId',
1555
+ value: externalId
1556
+ }
1557
+ ]
1558
+ });
1559
+ return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1560
+ }
1548
1561
  };
1549
- const result = await customFn.fn(data);
1550
- const shouldContinue = !result || !!customFn.executeMainFn;
1562
+ }
1563
+ function auditLogRegistry({ adapter, ...ctx }) {
1564
+ const { createWithHooks } = getWithHooks(adapter, ctx);
1551
1565
  return {
1552
- result,
1553
- shouldContinue
1566
+ createAuditLog: async (auditLog, context)=>{
1567
+ const createdLog = await createWithHooks({
1568
+ data: {
1569
+ createdAt: new Date(),
1570
+ ...auditLog
1571
+ },
1572
+ model: 'auditLog',
1573
+ customFn: void 0,
1574
+ context
1575
+ });
1576
+ if (!createdLog) throw new error_class_DoubleTieError('Failed to create audit log - operation returned null', {
1577
+ code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1578
+ status: 500
1579
+ });
1580
+ return createdLog;
1581
+ }
1554
1582
  };
1555
1583
  }
1556
- function processUpdateManyResult(result) {
1557
- if (Array.isArray(result)) return result;
1558
- if ('number' == typeof result && result > 0) return [];
1584
+ const external_kysely_namespaceObject = require("kysely");
1585
+ function getDatabaseType(db) {
1586
+ if (!db) return null;
1587
+ if ('dialect' in db) return getDatabaseType(db.dialect);
1588
+ if (db && 'object' == typeof db && 'createDriver' in db) {
1589
+ if (db instanceof external_kysely_namespaceObject.SqliteDialect) return 'sqlite';
1590
+ if (db instanceof external_kysely_namespaceObject.MysqlDialect) return 'mysql';
1591
+ if (db instanceof external_kysely_namespaceObject.PostgresDialect) return 'postgres';
1592
+ if (db instanceof external_kysely_namespaceObject.MssqlDialect) return 'mssql';
1593
+ }
1594
+ if (db && 'object' == typeof db && 'aggregate' in db) return 'sqlite';
1595
+ if (db && 'object' == typeof db && 'getConnection' in db) return 'mysql';
1596
+ if (db && 'object' == typeof db && 'connect' in db) return 'postgres';
1559
1597
  return null;
1560
1598
  }
1561
- async function updateManyWithHooks(adapter, ctx, props) {
1562
- const { data, where, model, customFn, context } = props;
1563
- const hooks = ctx.hooks || [];
1564
- const transformedData = await processHooks(data, model, 'update', 'before', hooks, context);
1565
- if (null === transformedData) return null;
1566
- const { result: customResult, shouldContinue } = await executeCustomFunction(transformedData, customFn);
1567
- if (customResult && !shouldContinue) return customResult;
1568
- let updated = customResult;
1569
- if (!updated) {
1570
- const adapterResult = await adapter.updateMany({
1571
- model: model,
1572
- update: transformedData,
1573
- where
1574
- });
1575
- updated = processUpdateManyResult(adapterResult);
1599
+ const createKyselyAdapter = async (config)=>{
1600
+ const db = config.database;
1601
+ if (!db) return {
1602
+ kysely: null,
1603
+ databaseType: null
1604
+ };
1605
+ if (db && 'object' == typeof db && 'db' in db) {
1606
+ const kyselyConfig = db;
1607
+ return {
1608
+ kysely: kyselyConfig.db,
1609
+ databaseType: kyselyConfig.type
1610
+ };
1576
1611
  }
1577
- if (updated && updated.length > 0) await processAfterHooksForMany(updated, model, hooks, context);
1578
- return updated;
1579
- }
1580
- function getWithHooks(adapter, ctx) {
1581
- return {
1582
- createWithHooks: ({ data, model, customFn, context })=>create_hooks_createWithHooks(adapter, ctx, {
1583
- data,
1584
- model,
1585
- customFn,
1586
- context
1612
+ if (db && 'object' == typeof db && 'dialect' in db) {
1613
+ const dialectConfig = db;
1614
+ return {
1615
+ kysely: new external_kysely_namespaceObject.Kysely({
1616
+ dialect: dialectConfig.dialect
1587
1617
  }),
1588
- updateWithHooks: (props)=>update_hooks_updateWithHooks(adapter, ctx, props),
1589
- updateManyWithHooks: (props)=>updateManyWithHooks(adapter, ctx, props)
1618
+ databaseType: dialectConfig.type
1619
+ };
1620
+ }
1621
+ let dialect;
1622
+ const databaseType = getDatabaseType(db);
1623
+ if (db && 'object' == typeof db && 'createDriver' in db) dialect = db;
1624
+ if (db && 'object' == typeof db && 'aggregate' in db) dialect = new external_kysely_namespaceObject.SqliteDialect({
1625
+ database: db
1626
+ });
1627
+ if (db && 'object' == typeof db && 'getConnection' in db) dialect = new external_kysely_namespaceObject.MysqlDialect({
1628
+ pool: db
1629
+ });
1630
+ if (db && 'object' == typeof db && 'connect' in db) dialect = new external_kysely_namespaceObject.PostgresDialect({
1631
+ pool: db
1632
+ });
1633
+ return {
1634
+ kysely: dialect ? new external_kysely_namespaceObject.Kysely({
1635
+ dialect
1636
+ }) : null,
1637
+ databaseType
1590
1638
  };
1591
- }
1639
+ };
1640
+ const external_superjson_namespaceObject = require("superjson");
1641
+ var external_superjson_default = /*#__PURE__*/ __webpack_require__.n(external_superjson_namespaceObject);
1592
1642
  const createEntityTransformer = (db, options, config)=>{
1593
1643
  const schema = definition_getConsentTables(options);
1594
1644
  function getField(model, field) {
@@ -1927,62 +1977,14 @@ const kyselyAdapter = (db, config)=>(opts)=>{
1927
1977
  options: config
1928
1978
  };
1929
1979
  };
1930
- const external_kysely_namespaceObject = require("kysely");
1931
- function getDatabaseType(db) {
1932
- if (!db) return null;
1933
- if ('dialect' in db) return getDatabaseType(db.dialect);
1934
- if (db && 'object' == typeof db && 'createDriver' in db) {
1935
- if (db instanceof external_kysely_namespaceObject.SqliteDialect) return 'sqlite';
1936
- if (db instanceof external_kysely_namespaceObject.MysqlDialect) return 'mysql';
1937
- if (db instanceof external_kysely_namespaceObject.PostgresDialect) return 'postgres';
1938
- if (db instanceof external_kysely_namespaceObject.MssqlDialect) return 'mssql';
1980
+ function utils_applyDefaultValue(inputValue, field, operation) {
1981
+ if ('update' === operation) return inputValue;
1982
+ if (null == inputValue && field.defaultValue) {
1983
+ if ('function' == typeof field.defaultValue) return field.defaultValue();
1984
+ return field.defaultValue;
1939
1985
  }
1940
- if (db && 'object' == typeof db && 'aggregate' in db) return 'sqlite';
1941
- if (db && 'object' == typeof db && 'getConnection' in db) return 'mysql';
1942
- if (db && 'object' == typeof db && 'connect' in db) return 'postgres';
1943
- return null;
1986
+ return inputValue;
1944
1987
  }
1945
- const createKyselyAdapter = async (config)=>{
1946
- const db = config.database;
1947
- if (!db) return {
1948
- kysely: null,
1949
- databaseType: null
1950
- };
1951
- if (db && 'object' == typeof db && 'db' in db) {
1952
- const kyselyConfig = db;
1953
- return {
1954
- kysely: kyselyConfig.db,
1955
- databaseType: kyselyConfig.type
1956
- };
1957
- }
1958
- if (db && 'object' == typeof db && 'dialect' in db) {
1959
- const dialectConfig = db;
1960
- return {
1961
- kysely: new external_kysely_namespaceObject.Kysely({
1962
- dialect: dialectConfig.dialect
1963
- }),
1964
- databaseType: dialectConfig.type
1965
- };
1966
- }
1967
- let dialect;
1968
- const databaseType = getDatabaseType(db);
1969
- if (db && 'object' == typeof db && 'createDriver' in db) dialect = db;
1970
- if (db && 'object' == typeof db && 'aggregate' in db) dialect = new external_kysely_namespaceObject.SqliteDialect({
1971
- database: db
1972
- });
1973
- if (db && 'object' == typeof db && 'getConnection' in db) dialect = new external_kysely_namespaceObject.MysqlDialect({
1974
- pool: db
1975
- });
1976
- if (db && 'object' == typeof db && 'connect' in db) dialect = new external_kysely_namespaceObject.PostgresDialect({
1977
- pool: db
1978
- });
1979
- return {
1980
- kysely: dialect ? new external_kysely_namespaceObject.Kysely({
1981
- dialect
1982
- }) : null,
1983
- databaseType
1984
- };
1985
- };
1986
1988
  const memory_adapter_createEntityTransformer = (options)=>{
1987
1989
  const schema = definition_getConsentTables(options);
1988
1990
  function getField(model, field) {
@@ -2163,20 +2165,6 @@ const memoryAdapter = (db)=>(options)=>{
2163
2165
  }
2164
2166
  };
2165
2167
  };
2166
- require("drizzle-orm");
2167
- let globalLogger;
2168
- function getLogger(options) {
2169
- if (!globalLogger) globalLogger = (0, logger_namespaceObject.createLogger)({
2170
- level: 'info',
2171
- appName: 'c15t',
2172
- ...options
2173
- });
2174
- return globalLogger;
2175
- }
2176
- function initLogger(options) {
2177
- globalLogger = (0, logger_namespaceObject.createLogger)(options);
2178
- return globalLogger;
2179
- }
2180
2168
  async function getAdapter(options) {
2181
2169
  const logger = getLogger({
2182
2170
  appName: options.appName ?? 'c15t',
@@ -2201,6 +2189,7 @@ async function getAdapter(options) {
2201
2189
  type: databaseType || 'sqlite'
2202
2190
  })(options);
2203
2191
  }
2192
+ require("drizzle-orm");
2204
2193
  const env = 'undefined' != typeof process ? process.env : {};
2205
2194
  'undefined' != typeof process && process.env.NODE_ENV;
2206
2195
  function toBoolean(val) {
@@ -2235,7 +2224,7 @@ function getBaseURL(url, path) {
2235
2224
  if (fromEnv) return withPath(fromEnv, path);
2236
2225
  }
2237
2226
  var package_namespaceObject = {
2238
- i8: "1.5.0"
2227
+ i8: "1.6.0"
2239
2228
  };
2240
2229
  const createRegistry = (ctx)=>({
2241
2230
  ...auditLogRegistry(ctx),
@@ -2267,7 +2256,7 @@ const init = async (options)=>{
2267
2256
  logger.info('Telemetry is disabled by configuration');
2268
2257
  telemetryInitialized = false;
2269
2258
  } else {
2270
- const resource = new resources_namespaceObject.Resource({
2259
+ const resource = (0, resources_namespaceObject.resourceFromAttributes)({
2271
2260
  'service.name': String(appName),
2272
2261
  'service.version': String(package_namespaceObject.i8 || '1.0.0'),
2273
2262
  ...telemetryOptions?.defaultAttributes || {}
@@ -2515,7 +2504,7 @@ const processCors = (request, context, trustedOrigins)=>{
2515
2504
  }
2516
2505
  return context;
2517
2506
  };
2518
- const version = '1.5.0';
2507
+ const version = '1.6.0';
2519
2508
  const createOpenAPIConfig = (options)=>{
2520
2509
  const basePath = options.basePath || '';
2521
2510
  return {
@@ -2550,11 +2539,11 @@ const baseConsentSchema = external_zod_namespaceObject.z.object({
2550
2539
  externalSubjectId: external_zod_namespaceObject.z.string().optional(),
2551
2540
  domain: external_zod_namespaceObject.z.string(),
2552
2541
  type: PolicyTypeSchema,
2553
- metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional()
2542
+ metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional()
2554
2543
  });
2555
2544
  const cookieBannerSchema = baseConsentSchema.extend({
2556
2545
  type: external_zod_namespaceObject.z.literal('cookie_banner'),
2557
- preferences: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.boolean())
2546
+ preferences: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.boolean())
2558
2547
  });
2559
2548
  const policyBasedSchema = baseConsentSchema.extend({
2560
2549
  type: external_zod_namespaceObject.z["enum"]([
@@ -2563,7 +2552,7 @@ const policyBasedSchema = baseConsentSchema.extend({
2563
2552
  'terms_and_conditions'
2564
2553
  ]),
2565
2554
  policyId: external_zod_namespaceObject.z.string().optional(),
2566
- preferences: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.boolean()).optional()
2555
+ preferences: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.boolean()).optional()
2567
2556
  });
2568
2557
  const otherConsentSchema = baseConsentSchema.extend({
2569
2558
  type: external_zod_namespaceObject.z["enum"]([
@@ -2571,7 +2560,7 @@ const otherConsentSchema = baseConsentSchema.extend({
2571
2560
  'age_verification',
2572
2561
  'other'
2573
2562
  ]),
2574
- preferences: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.boolean()).optional()
2563
+ preferences: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.boolean()).optional()
2575
2564
  });
2576
2565
  const postConsentContract = contract_namespaceObject.oc.route({
2577
2566
  method: 'POST',
@@ -2610,64 +2599,64 @@ Use this endpoint to record user consent and maintain a compliant consent manage
2610
2599
  }).errors({
2611
2600
  INPUT_VALIDATION_FAILED: {
2612
2601
  status: 422,
2613
- message: 'Invalid input parameters',
2614
2602
  data: external_zod_namespaceObject.z.object({
2615
2603
  formErrors: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()),
2616
2604
  fieldErrors: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()))
2617
- })
2605
+ }),
2606
+ error: 'Invalid input parameters'
2618
2607
  },
2619
2608
  SUBJECT_CREATION_FAILED: {
2620
2609
  status: 400,
2621
- message: 'Failed to create or find subject',
2622
2610
  data: external_zod_namespaceObject.z.object({
2623
2611
  subjectId: external_zod_namespaceObject.z.string().optional(),
2624
2612
  externalSubjectId: external_zod_namespaceObject.z.string().optional()
2625
- })
2613
+ }),
2614
+ error: 'Failed to create or find subject'
2626
2615
  },
2627
2616
  DOMAIN_CREATION_FAILED: {
2628
2617
  status: 500,
2629
- message: 'Failed to create or find domain',
2630
2618
  data: external_zod_namespaceObject.z.object({
2631
2619
  domain: external_zod_namespaceObject.z.string()
2632
- })
2620
+ }),
2621
+ error: 'Failed to create or find domain'
2633
2622
  },
2634
2623
  POLICY_NOT_FOUND: {
2635
2624
  status: 404,
2636
- message: 'Policy not found',
2637
2625
  data: external_zod_namespaceObject.z.object({
2638
2626
  policyId: external_zod_namespaceObject.z.string(),
2639
2627
  type: external_zod_namespaceObject.z.string()
2640
- })
2628
+ }),
2629
+ error: 'Policy not found'
2641
2630
  },
2642
2631
  POLICY_INACTIVE: {
2643
2632
  status: 409,
2644
- message: 'Policy is not active',
2645
2633
  data: external_zod_namespaceObject.z.object({
2646
2634
  policyId: external_zod_namespaceObject.z.string(),
2647
2635
  type: external_zod_namespaceObject.z.string()
2648
- })
2636
+ }),
2637
+ error: 'Policy is not active'
2649
2638
  },
2650
2639
  POLICY_CREATION_FAILED: {
2651
2640
  status: 500,
2652
- message: 'Failed to create or find policy',
2653
2641
  data: external_zod_namespaceObject.z.object({
2654
2642
  type: external_zod_namespaceObject.z.string()
2655
- })
2643
+ }),
2644
+ error: 'Failed to create or find policy'
2656
2645
  },
2657
2646
  PURPOSE_CREATION_FAILED: {
2658
2647
  status: 500,
2659
- message: 'Failed to create consent purpose',
2660
2648
  data: external_zod_namespaceObject.z.object({
2661
2649
  purposeCode: external_zod_namespaceObject.z.string()
2662
- })
2650
+ }),
2651
+ error: 'Failed to create consent purpose'
2663
2652
  },
2664
2653
  CONSENT_CREATION_FAILED: {
2665
2654
  status: 500,
2666
- message: 'Failed to create consent record',
2667
2655
  data: external_zod_namespaceObject.z.object({
2668
2656
  subjectId: external_zod_namespaceObject.z.string(),
2669
2657
  domain: external_zod_namespaceObject.z.string()
2670
- })
2658
+ }),
2659
+ error: 'Failed to create consent record'
2671
2660
  }
2672
2661
  }).input(external_zod_namespaceObject.z.discriminatedUnion('type', [
2673
2662
  cookieBannerSchema,
@@ -2682,9 +2671,14 @@ Use this endpoint to record user consent and maintain a compliant consent manage
2682
2671
  type: PolicyTypeSchema,
2683
2672
  status: external_zod_namespaceObject.z.string(),
2684
2673
  recordId: external_zod_namespaceObject.z.string(),
2685
- metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
2674
+ metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional(),
2686
2675
  givenAt: external_zod_namespaceObject.z.date()
2687
2676
  }));
2677
+ const types_branding = [
2678
+ 'c15t',
2679
+ 'consent',
2680
+ 'none'
2681
+ ];
2688
2682
  const JurisdictionMessages = {
2689
2683
  GDPR: 'GDPR or equivalent regulations require a cookie banner.',
2690
2684
  CH: 'Switzerland requires similar data protection measures.',
@@ -2770,20 +2764,21 @@ Use this endpoint to implement geo-targeted consent banners and ensure complianc
2770
2764
  translations: external_zod_namespaceObject.z.object({
2771
2765
  language: external_zod_namespaceObject.z.string(),
2772
2766
  translations: TranslationsSchema
2773
- })
2767
+ }),
2768
+ branding: external_zod_namespaceObject.z["enum"](types_branding)
2774
2769
  }));
2775
- const verifyConsentInputSchema = external_zod_namespaceObject.z.object({
2770
+ const verifyConsentInputSchema = external_zod_namespaceObject.z.strictObject({
2776
2771
  subjectId: external_zod_namespaceObject.z.string().optional(),
2777
2772
  externalSubjectId: external_zod_namespaceObject.z.string().optional(),
2778
2773
  domain: external_zod_namespaceObject.z.string(),
2779
2774
  type: PolicyTypeSchema,
2780
2775
  policyId: external_zod_namespaceObject.z.string().optional(),
2781
2776
  preferences: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional()
2782
- }).strict();
2783
- const verify_contract_consentSchema = external_zod_namespaceObject.z.object({
2777
+ });
2778
+ const verify_contract_consentSchema = external_zod_namespaceObject.z.looseObject({
2784
2779
  id: external_zod_namespaceObject.z.string(),
2785
2780
  purposeIds: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string())
2786
- }).passthrough();
2781
+ });
2787
2782
  const verifyConsentContract = contract_namespaceObject.oc.route({
2788
2783
  method: 'POST',
2789
2784
  path: '/consent/verify',
@@ -2811,58 +2806,58 @@ Use this endpoint to ensure compliance with privacy regulations and to verify us
2811
2806
  }).errors({
2812
2807
  INPUT_VALIDATION_FAILED: {
2813
2808
  status: 422,
2814
- message: 'Invalid input parameters',
2815
2809
  data: external_zod_namespaceObject.z.object({
2816
2810
  formErrors: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()),
2817
2811
  fieldErrors: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional())
2818
- })
2812
+ }),
2813
+ error: 'Invalid input parameters'
2819
2814
  },
2820
2815
  SUBJECT_NOT_FOUND: {
2821
2816
  status: 404,
2822
- message: 'Subject not found',
2823
2817
  data: external_zod_namespaceObject.z.object({
2824
2818
  subjectId: external_zod_namespaceObject.z.string().optional(),
2825
2819
  externalSubjectId: external_zod_namespaceObject.z.string().optional()
2826
- })
2820
+ }),
2821
+ error: 'Subject not found'
2827
2822
  },
2828
2823
  DOMAIN_NOT_FOUND: {
2829
2824
  status: 404,
2830
- message: 'Domain not found',
2831
2825
  data: external_zod_namespaceObject.z.object({
2832
2826
  domain: external_zod_namespaceObject.z.string()
2833
- })
2827
+ }),
2828
+ error: 'Domain not found'
2834
2829
  },
2835
2830
  POLICY_NOT_FOUND: {
2836
2831
  status: 404,
2837
- message: 'Policy not found or invalid',
2838
2832
  data: external_zod_namespaceObject.z.object({
2839
2833
  policyId: external_zod_namespaceObject.z.string(),
2840
2834
  type: external_zod_namespaceObject.z.string()
2841
- })
2835
+ }),
2836
+ error: 'Policy not found or invalid'
2842
2837
  },
2843
2838
  PURPOSES_NOT_FOUND: {
2844
2839
  status: 404,
2845
- message: 'Could not find all specified purposes',
2846
2840
  data: external_zod_namespaceObject.z.object({
2847
2841
  preferences: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()),
2848
2842
  foundPurposes: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string())
2849
- })
2843
+ }),
2844
+ error: 'Could not find all specified purposes'
2850
2845
  },
2851
2846
  COOKIE_BANNER_PREFERENCES_REQUIRED: {
2852
2847
  status: 400,
2853
- message: 'Preferences are required for cookie banner consent',
2854
2848
  data: external_zod_namespaceObject.z.object({
2855
2849
  type: external_zod_namespaceObject.z.literal('cookie_banner')
2856
- })
2850
+ }),
2851
+ error: 'Preferences are required for cookie banner consent'
2857
2852
  },
2858
2853
  NO_CONSENT_FOUND: {
2859
2854
  status: 404,
2860
- message: 'No consent found for the given policy',
2861
2855
  data: external_zod_namespaceObject.z.object({
2862
2856
  policyId: external_zod_namespaceObject.z.string(),
2863
2857
  subjectId: external_zod_namespaceObject.z.string(),
2864
2858
  domainId: external_zod_namespaceObject.z.string()
2865
- })
2859
+ }),
2860
+ error: 'No consent found for the given policy'
2866
2861
  }
2867
2862
  }).input(verifyConsentInputSchema).output(external_zod_namespaceObject.z.object({
2868
2863
  isValid: external_zod_namespaceObject.z.boolean(),
@@ -3227,11 +3222,11 @@ function getTranslations(acceptLanguage, customTranslations) {
3227
3222
  };
3228
3223
  }
3229
3224
  function getHeaders(headers) {
3230
- if (!headers) throw new server_namespaceObject.ORPCError('LOCATION_DETECTION_FAILED', {
3231
- data: {
3232
- reason: 'No headers found in request context'
3233
- }
3234
- });
3225
+ if (!headers) return {
3226
+ countryCode: null,
3227
+ regionCode: null,
3228
+ acceptLanguage: null
3229
+ };
3235
3230
  const normalizeHeader = (value)=>{
3236
3231
  if (!value) return null;
3237
3232
  return Array.isArray(value) ? value[0] ?? null : value;
@@ -3245,17 +3240,18 @@ function getHeaders(headers) {
3245
3240
  acceptLanguage
3246
3241
  };
3247
3242
  }
3248
- function buildResponse({ shouldShowBanner, jurisdiction, location, acceptLanguage, customTranslations }) {
3243
+ function buildResponse({ shouldShowBanner, jurisdiction, location, acceptLanguage, customTranslations, branding = 'c15t' }) {
3249
3244
  return {
3250
3245
  showConsentBanner: shouldShowBanner,
3251
3246
  jurisdiction,
3252
3247
  location,
3253
- translations: getTranslations(acceptLanguage, customTranslations)
3248
+ translations: getTranslations(acceptLanguage, customTranslations),
3249
+ branding
3254
3250
  };
3255
3251
  }
3256
3252
  const handler_showConsentBanner = os.consent.showBanner.handler(({ context })=>{
3257
3253
  const typedContext = context;
3258
- const { customTranslations, disableGeoLocation } = typedContext.options.advanced ?? {};
3254
+ const { customTranslations, disableGeoLocation, branding } = typedContext.options.advanced ?? {};
3259
3255
  const { countryCode, regionCode, acceptLanguage } = getHeaders(typedContext.headers);
3260
3256
  if (disableGeoLocation) return buildResponse({
3261
3257
  shouldShowBanner: true,
@@ -3268,7 +3264,8 @@ const handler_showConsentBanner = os.consent.showBanner.handler(({ context })=>{
3268
3264
  regionCode: null
3269
3265
  },
3270
3266
  acceptLanguage,
3271
- customTranslations
3267
+ customTranslations,
3268
+ branding
3272
3269
  });
3273
3270
  const { showConsentBanner, jurisdictionCode, message } = checkJurisdiction(countryCode);
3274
3271
  return buildResponse({
@@ -3282,7 +3279,8 @@ const handler_showConsentBanner = os.consent.showBanner.handler(({ context })=>{
3282
3279
  regionCode
3283
3280
  },
3284
3281
  acceptLanguage,
3285
- customTranslations
3282
+ customTranslations,
3283
+ branding
3286
3284
  });
3287
3285
  });
3288
3286
  const verifyConsent = os.consent.verify.handler(async ({ input, context })=>{
@@ -3824,8 +3822,10 @@ const c15tInstance = (options)=>{
3824
3822
  };
3825
3823
  };
3826
3824
  exports.c15tInstance = __webpack_exports__.c15tInstance;
3825
+ exports.version = __webpack_exports__.version;
3827
3826
  for(var __webpack_i__ in __webpack_exports__)if (-1 === [
3828
- "c15tInstance"
3827
+ "c15tInstance",
3828
+ "version"
3829
3829
  ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
3830
3830
  Object.defineProperty(exports, '__esModule', {
3831
3831
  value: true