@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
@@ -22,32 +22,20 @@ const COMMON_TIMEZONES = {
22
22
  };
23
23
  (0, __WEBPACK_EXTERNAL_MODULE_base_x_aeb88370__["default"])('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');
24
24
  const fieldConfigSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
25
- required: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
26
- returned: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
27
- input: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
28
- defaultValue: __WEBPACK_EXTERNAL_MODULE_zod__.z.union([
29
- __WEBPACK_EXTERNAL_MODULE_zod__.z.any(),
30
- __WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.any())
31
- ]).optional(),
25
+ required: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
26
+ returned: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
27
+ input: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
28
+ defaultValue: __WEBPACK_EXTERNAL_MODULE_zod__.z.any().optional(),
32
29
  transform: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
33
- input: __WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().args(__WEBPACK_EXTERNAL_MODULE_zod__.z.any()).returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.union([
34
- __WEBPACK_EXTERNAL_MODULE_zod__.z.any(),
35
- __WEBPACK_EXTERNAL_MODULE_zod__.z.promise(__WEBPACK_EXTERNAL_MODULE_zod__.z.any())
36
- ])).optional(),
37
- output: __WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().args(__WEBPACK_EXTERNAL_MODULE_zod__.z.any()).returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.union([
38
- __WEBPACK_EXTERNAL_MODULE_zod__.z.any(),
39
- __WEBPACK_EXTERNAL_MODULE_zod__.z.promise(__WEBPACK_EXTERNAL_MODULE_zod__.z.any())
40
- ])).optional()
30
+ input: __WEBPACK_EXTERNAL_MODULE_zod__.z.any().optional(),
31
+ output: __WEBPACK_EXTERNAL_MODULE_zod__.z.any().optional()
41
32
  }).optional(),
42
- validator: __WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().args(__WEBPACK_EXTERNAL_MODULE_zod__.z.any()).returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.union([
43
- __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
44
- __WEBPACK_EXTERNAL_MODULE_zod__.z["null"]()
45
- ])).optional(),
33
+ validator: __WEBPACK_EXTERNAL_MODULE_zod__.z.any().optional(),
46
34
  unique: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().optional(),
47
35
  indexed: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().optional(),
48
- sortable: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
36
+ sortable: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
49
37
  fieldName: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
50
- bigint: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false)
38
+ bigint: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false)
51
39
  });
52
40
  const stringFieldSchema = fieldConfigSchema.extend({
53
41
  type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('string'),
@@ -67,18 +55,18 @@ const dateFieldSchema = fieldConfigSchema.extend({
67
55
  type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('date'),
68
56
  minDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().optional(),
69
57
  maxDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().optional(),
70
- dateOnly: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false),
71
- format: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional()
58
+ dateOnly: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false),
59
+ format: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional()
72
60
  });
73
61
  const timezoneFieldSchema = fieldConfigSchema.extend({
74
62
  type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('timezone'),
75
- validateTimezone: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
63
+ validateTimezone: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
76
64
  suggestedValues: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional(),
77
- restrictToSuggestedValues: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false)
65
+ restrictToSuggestedValues: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false)
78
66
  });
79
67
  const jsonFieldSchema = fieldConfigSchema.extend({
80
68
  type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('json'),
81
- validateJson: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true)
69
+ validateJson: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true)
82
70
  });
83
71
  const stringArrayFieldSchema = fieldConfigSchema.extend({
84
72
  type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('string[]')
@@ -396,6 +384,27 @@ class error_class_DoubleTieError extends __WEBPACK_EXTERNAL_MODULE__orpc_server_
396
384
  return formattedMessage;
397
385
  }
398
386
  }
387
+ function auditLogRegistry({ adapter, ...ctx }) {
388
+ const { createWithHooks } = getWithHooks(adapter, ctx);
389
+ return {
390
+ createAuditLog: async (auditLog, context)=>{
391
+ const createdLog = await createWithHooks({
392
+ data: {
393
+ createdAt: new Date(),
394
+ ...auditLog
395
+ },
396
+ model: 'auditLog',
397
+ customFn: void 0,
398
+ context
399
+ });
400
+ if (!createdLog) throw new error_class_DoubleTieError('Failed to create audit log - operation returned null', {
401
+ code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
402
+ status: 500
403
+ });
404
+ return createdLog;
405
+ }
406
+ };
407
+ }
399
408
  const auditLogSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
400
409
  id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
401
410
  entityType: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
@@ -404,9 +413,9 @@ const auditLogSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
404
413
  subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
405
414
  ipAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
406
415
  userAgent: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
407
- changes: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
408
- metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
409
- createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
416
+ changes: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
417
+ metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
418
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
410
419
  });
411
420
  function getAuditLogTable(options, auditLogFields) {
412
421
  const auditLogConfig = options.tables?.auditLog;
@@ -505,6 +514,128 @@ function getAuditLogTable(options, auditLogFields) {
505
514
  order: 5
506
515
  };
507
516
  }
517
+ const consentSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
518
+ id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
519
+ subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
520
+ domainId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
521
+ purposeIds: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()),
522
+ metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).nullable().optional(),
523
+ policyId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
524
+ ipAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
525
+ userAgent: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
526
+ status: __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
527
+ 'active',
528
+ 'withdrawn',
529
+ 'expired'
530
+ ]).prefault('active'),
531
+ withdrawalReason: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
532
+ givenAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
533
+ validUntil: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().nullable().optional(),
534
+ isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true)
535
+ });
536
+ function getConsentTable(options, consentFields) {
537
+ const consentConfig = options.tables?.consent;
538
+ const subjectConfig = options.tables?.subject;
539
+ const domainConfig = options.tables?.domain;
540
+ const policyConfig = options.tables?.consentPolicy;
541
+ return {
542
+ entityName: consentConfig?.entityName || 'consent',
543
+ entityPrefix: consentConfig?.entityPrefix || 'cns',
544
+ schema: consentSchema,
545
+ fields: {
546
+ subjectId: {
547
+ type: 'string',
548
+ required: true,
549
+ fieldName: consentConfig?.fields?.subjectId || 'subjectId',
550
+ references: {
551
+ model: subjectConfig?.entityName || 'subject',
552
+ field: 'id'
553
+ }
554
+ },
555
+ domainId: {
556
+ type: 'string',
557
+ required: true,
558
+ fieldName: consentConfig?.fields?.domainId || 'domainId',
559
+ references: {
560
+ model: domainConfig?.entityName || 'domain',
561
+ field: 'id'
562
+ }
563
+ },
564
+ purposeIds: {
565
+ type: 'json',
566
+ required: false,
567
+ fieldName: consentConfig?.fields?.purposeIds || 'purposeIds'
568
+ },
569
+ metadata: {
570
+ type: 'json',
571
+ required: false,
572
+ fieldName: consentConfig?.fields?.metadata || 'metadata'
573
+ },
574
+ policyId: {
575
+ type: 'string',
576
+ required: false,
577
+ fieldName: consentConfig?.fields?.policyId || 'policyId',
578
+ references: {
579
+ model: policyConfig?.entityName || 'consentPolicy',
580
+ field: 'id'
581
+ }
582
+ },
583
+ ipAddress: {
584
+ type: 'string',
585
+ required: false,
586
+ fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
587
+ },
588
+ userAgent: {
589
+ type: 'string',
590
+ required: false,
591
+ fieldName: consentConfig?.fields?.userAgent || 'userAgent'
592
+ },
593
+ status: {
594
+ type: 'string',
595
+ defaultValue: ()=>'active',
596
+ required: true,
597
+ fieldName: consentConfig?.fields?.status || 'status'
598
+ },
599
+ withdrawalReason: {
600
+ type: 'string',
601
+ required: false,
602
+ fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
603
+ },
604
+ givenAt: {
605
+ type: 'date',
606
+ defaultValue: ()=>new Date(),
607
+ required: true,
608
+ fieldName: consentConfig?.fields?.givenAt || 'givenAt'
609
+ },
610
+ validUntil: {
611
+ type: 'date',
612
+ required: false,
613
+ fieldName: consentConfig?.fields?.validUntil || 'validUntil',
614
+ transform: {
615
+ input: (val, data)=>{
616
+ if (val) return val;
617
+ const expiresIn = consentConfig?.expiresIn || 31536000;
618
+ const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
619
+ if (expiresIn > 0) {
620
+ const validUntil = new Date(givenAt);
621
+ validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
622
+ return validUntil;
623
+ }
624
+ }
625
+ }
626
+ },
627
+ isActive: {
628
+ type: 'boolean',
629
+ defaultValue: true,
630
+ required: true,
631
+ fieldName: consentConfig?.fields?.isActive || 'isActive'
632
+ },
633
+ ...consentFields || {},
634
+ ...consentConfig?.additionalFields || {}
635
+ },
636
+ order: 3
637
+ };
638
+ }
508
639
  const PolicyTypeSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
509
640
  'cookie_banner',
510
641
  'privacy_policy',
@@ -523,9 +654,9 @@ const consentPolicySchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
523
654
  expirationDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().nullable().optional(),
524
655
  content: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
525
656
  contentHash: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
526
- isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
527
- createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
528
- updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
657
+ isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
658
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
659
+ updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
529
660
  });
530
661
  function getConsentPolicyTable(options, policyFields) {
531
662
  const consentPolicyConfig = options.tables?.consentPolicy;
@@ -592,12 +723,12 @@ const purposeSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
592
723
  code: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
593
724
  name: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
594
725
  description: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
595
- isEssential: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false),
726
+ isEssential: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false),
596
727
  dataCategory: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullish(),
597
728
  legalBasis: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullish(),
598
- isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
599
- createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
600
- updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
729
+ isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
730
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
731
+ updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
601
732
  });
602
733
  function getPurposeTable(options, purposeFields) {
603
734
  const purposeConfig = options.tables?.consentPurpose;
@@ -666,9 +797,9 @@ const consentRecordSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
666
797
  subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
667
798
  consentId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
668
799
  actionType: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
669
- details: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
670
- createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
671
- updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
800
+ details: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
801
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
802
+ updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
672
803
  });
673
804
  function getConsentRecordTable(options, recordFields) {
674
805
  const recordConfig = options.tables?.record;
@@ -719,184 +850,62 @@ function getConsentRecordTable(options, recordFields) {
719
850
  order: 4
720
851
  };
721
852
  }
722
- const consentSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
853
+ const domainSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
723
854
  id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
724
- subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
725
- domainId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
726
- purposeIds: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()),
727
- metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).nullable().optional(),
728
- policyId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
729
- ipAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
730
- userAgent: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
731
- status: __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
732
- 'active',
733
- 'withdrawn',
734
- 'expired'
735
- ]).default('active'),
736
- withdrawalReason: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
737
- givenAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
738
- validUntil: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().nullable().optional(),
739
- isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true)
855
+ name: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().min(1),
856
+ description: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
857
+ allowedOrigins: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional().prefault([]),
858
+ isVerified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
859
+ isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
860
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
861
+ updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
740
862
  });
741
- function getConsentTable(options, consentFields) {
742
- const consentConfig = options.tables?.consent;
743
- const subjectConfig = options.tables?.subject;
863
+ function getDomainTable(options, domainFields) {
744
864
  const domainConfig = options.tables?.domain;
745
- const policyConfig = options.tables?.consentPolicy;
746
865
  return {
747
- entityName: consentConfig?.entityName || 'consent',
748
- entityPrefix: consentConfig?.entityPrefix || 'cns',
749
- schema: consentSchema,
866
+ entityName: domainConfig?.entityName || 'domain',
867
+ entityPrefix: domainConfig?.entityPrefix || 'dom',
868
+ schema: domainSchema,
750
869
  fields: {
751
- subjectId: {
870
+ name: {
752
871
  type: 'string',
753
872
  required: true,
754
- fieldName: consentConfig?.fields?.subjectId || 'subjectId',
755
- references: {
756
- model: subjectConfig?.entityName || 'subject',
757
- field: 'id'
758
- }
873
+ unique: true,
874
+ fieldName: domainConfig?.fields?.name || 'name'
759
875
  },
760
- domainId: {
876
+ description: {
761
877
  type: 'string',
762
- required: true,
763
- fieldName: consentConfig?.fields?.domainId || 'domainId',
764
- references: {
765
- model: domainConfig?.entityName || 'domain',
766
- field: 'id'
767
- }
768
- },
769
- purposeIds: {
770
- type: 'json',
771
878
  required: false,
772
- fieldName: consentConfig?.fields?.purposeIds || 'purposeIds'
879
+ fieldName: domainConfig?.fields?.description || "description"
773
880
  },
774
- metadata: {
881
+ allowedOrigins: {
775
882
  type: 'json',
883
+ defaultValue: ()=>[],
776
884
  required: false,
777
- fieldName: consentConfig?.fields?.metadata || 'metadata'
778
- },
779
- policyId: {
780
- type: 'string',
781
- required: false,
782
- fieldName: consentConfig?.fields?.policyId || 'policyId',
783
- references: {
784
- model: policyConfig?.entityName || 'consentPolicy',
785
- field: 'id'
786
- }
787
- },
788
- ipAddress: {
789
- type: 'string',
790
- required: false,
791
- fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
792
- },
793
- userAgent: {
794
- type: 'string',
795
- required: false,
796
- fieldName: consentConfig?.fields?.userAgent || 'userAgent'
885
+ fieldName: domainConfig?.fields?.allowedOrigins || 'allowedOrigins'
797
886
  },
798
- status: {
799
- type: 'string',
800
- defaultValue: ()=>'active',
887
+ isVerified: {
888
+ type: 'boolean',
889
+ defaultValue: true,
801
890
  required: true,
802
- fieldName: consentConfig?.fields?.status || 'status'
891
+ fieldName: domainConfig?.fields?.isVerified || 'isVerified'
803
892
  },
804
- withdrawalReason: {
805
- type: 'string',
806
- required: false,
807
- fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
893
+ isActive: {
894
+ type: 'boolean',
895
+ defaultValue: true,
896
+ required: true,
897
+ fieldName: domainConfig?.fields?.isActive || 'isActive'
808
898
  },
809
- givenAt: {
899
+ createdAt: {
810
900
  type: 'date',
811
901
  defaultValue: ()=>new Date(),
812
902
  required: true,
813
- fieldName: consentConfig?.fields?.givenAt || 'givenAt'
903
+ fieldName: domainConfig?.fields?.createdAt || 'createdAt'
814
904
  },
815
- validUntil: {
905
+ updatedAt: {
816
906
  type: 'date',
817
907
  required: false,
818
- fieldName: consentConfig?.fields?.validUntil || 'validUntil',
819
- transform: {
820
- input: (val, data)=>{
821
- if (val) return val;
822
- const expiresIn = consentConfig?.expiresIn || 31536000;
823
- const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
824
- if (expiresIn > 0) {
825
- const validUntil = new Date(givenAt);
826
- validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
827
- return validUntil;
828
- }
829
- }
830
- }
831
- },
832
- isActive: {
833
- type: 'boolean',
834
- defaultValue: true,
835
- required: true,
836
- fieldName: consentConfig?.fields?.isActive || 'isActive'
837
- },
838
- ...consentFields || {},
839
- ...consentConfig?.additionalFields || {}
840
- },
841
- order: 3
842
- };
843
- }
844
- const domainSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
845
- id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
846
- name: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().min(1),
847
- description: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
848
- allowedOrigins: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional().default([]),
849
- isVerified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
850
- isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
851
- createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
852
- updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
853
- });
854
- function getDomainTable(options, domainFields) {
855
- const domainConfig = options.tables?.domain;
856
- return {
857
- entityName: domainConfig?.entityName || 'domain',
858
- entityPrefix: domainConfig?.entityPrefix || 'dom',
859
- schema: domainSchema,
860
- fields: {
861
- name: {
862
- type: 'string',
863
- required: true,
864
- unique: true,
865
- fieldName: domainConfig?.fields?.name || 'name'
866
- },
867
- description: {
868
- type: 'string',
869
- required: false,
870
- fieldName: domainConfig?.fields?.description || "description"
871
- },
872
- allowedOrigins: {
873
- type: 'json',
874
- defaultValue: ()=>[],
875
- required: false,
876
- fieldName: domainConfig?.fields?.allowedOrigins || 'allowedOrigins'
877
- },
878
- isVerified: {
879
- type: 'boolean',
880
- defaultValue: true,
881
- required: true,
882
- fieldName: domainConfig?.fields?.isVerified || 'isVerified'
883
- },
884
- isActive: {
885
- type: 'boolean',
886
- defaultValue: true,
887
- required: true,
888
- fieldName: domainConfig?.fields?.isActive || 'isActive'
889
- },
890
- createdAt: {
891
- type: 'date',
892
- defaultValue: ()=>new Date(),
893
- required: true,
894
- fieldName: domainConfig?.fields?.createdAt || 'createdAt'
895
- },
896
- updatedAt: {
897
- type: 'date',
898
- required: false,
899
- fieldName: domainConfig?.fields?.updatedAt || 'updatedAt'
908
+ fieldName: domainConfig?.fields?.updatedAt || 'updatedAt'
900
909
  },
901
910
  ...domainFields || {},
902
911
  ...domainConfig?.additionalFields || {}
@@ -906,12 +915,12 @@ function getDomainTable(options, domainFields) {
906
915
  }
907
916
  const subjectSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
908
917
  id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
909
- isIdentified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false),
918
+ isIdentified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false),
910
919
  externalId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
911
920
  identityProvider: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
912
921
  lastIpAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
913
- createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
914
- updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
922
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
923
+ updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
915
924
  });
916
925
  function getSubjectTable(options, subjectFields) {
917
926
  const subjectConfig = options.tables?.subject;
@@ -1008,157 +1017,6 @@ function validateEntityOutput(tableName, data, options) {
1008
1017
  throw error;
1009
1018
  }
1010
1019
  }
1011
- function subjectRegistry({ adapter, ...ctx }) {
1012
- const { createWithHooks } = getWithHooks(adapter, ctx);
1013
- return {
1014
- createSubject: async (subject, context)=>{
1015
- const createdSubject = await createWithHooks({
1016
- data: {
1017
- createdAt: new Date(),
1018
- updatedAt: new Date(),
1019
- ...subject
1020
- },
1021
- model: 'subject',
1022
- customFn: void 0,
1023
- context
1024
- });
1025
- return createdSubject ? validateEntityOutput('subject', createdSubject, ctx.options) : null;
1026
- },
1027
- findOrCreateSubject: async function({ subjectId, externalSubjectId, ipAddress = 'unknown', context }) {
1028
- if (subjectId && externalSubjectId) {
1029
- const [subjectById, subjectByExternalId] = await Promise.all([
1030
- this.findSubjectById(subjectId),
1031
- this.findSubjectByExternalId(externalSubjectId)
1032
- ]);
1033
- if (!subjectById || !subjectByExternalId) {
1034
- ctx.logger?.error('Subject validation failed: One or both subjects not found', {
1035
- providedSubjectId: subjectId,
1036
- providedExternalId: externalSubjectId,
1037
- subjectByIdFound: !!subjectById,
1038
- subjectByExternalIdFound: !!subjectByExternalId
1039
- });
1040
- throw new error_class_DoubleTieError('The specified subject could not be found. Please verify the subject identifiers and try again.', {
1041
- code: error_codes_ERROR_CODES.NOT_FOUND,
1042
- status: 404,
1043
- meta: {
1044
- providedSubjectId: subjectId,
1045
- providedExternalId: externalSubjectId
1046
- }
1047
- });
1048
- }
1049
- if (subjectById.id !== subjectByExternalId.id) {
1050
- ctx.logger?.warn('Subject validation failed: IDs do not match the same subject', {
1051
- providedSubjectId: subjectId,
1052
- providedExternalId: externalSubjectId,
1053
- subjectByIdId: subjectById.id,
1054
- subjectByExternalIdId: subjectByExternalId.id
1055
- });
1056
- 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.', {
1057
- code: error_codes_ERROR_CODES.CONFLICT,
1058
- status: 409,
1059
- meta: {
1060
- providedSubjectId: subjectId,
1061
- providedExternalId: externalSubjectId,
1062
- subjectByIdId: subjectById.id,
1063
- subjectByExternalIdId: subjectByExternalId.id
1064
- }
1065
- });
1066
- }
1067
- return subjectById;
1068
- }
1069
- if (subjectId) {
1070
- const subject = await this.findSubjectById(subjectId);
1071
- if (subject) return subject;
1072
- throw new error_class_DoubleTieError('Subject not found by subjectId', {
1073
- code: error_codes_ERROR_CODES.NOT_FOUND,
1074
- status: 404
1075
- });
1076
- }
1077
- if (externalSubjectId) try {
1078
- const subject = await this.findSubjectByExternalId(externalSubjectId);
1079
- if (subject) {
1080
- ctx.logger?.debug('Found existing subject by external ID', {
1081
- externalSubjectId
1082
- });
1083
- return subject;
1084
- }
1085
- ctx.logger?.info('Creating new subject with external ID', {
1086
- externalSubjectId
1087
- });
1088
- return await this.createSubject({
1089
- externalId: externalSubjectId,
1090
- identityProvider: 'external',
1091
- lastIpAddress: ipAddress,
1092
- isIdentified: true
1093
- }, context);
1094
- } catch (error) {
1095
- if (error instanceof Error && error.message.includes('unique constraint')) {
1096
- ctx.logger?.info('Handling duplicate key violation for external ID', {
1097
- externalSubjectId
1098
- });
1099
- const subject = await this.findSubjectByExternalId(externalSubjectId);
1100
- if (subject) return subject;
1101
- }
1102
- ctx.logger?.error('Failed to create or find subject with external ID', {
1103
- externalSubjectId,
1104
- error: error instanceof Error ? error.message : 'Unknown error'
1105
- });
1106
- throw new error_class_DoubleTieError('Failed to create or find subject with external ID', {
1107
- code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1108
- status: 500,
1109
- meta: {
1110
- error: error instanceof Error ? error.message : 'Unknown error'
1111
- }
1112
- });
1113
- }
1114
- try {
1115
- ctx.logger?.info('Creating new anonymous subject');
1116
- return await this.createSubject({
1117
- externalId: null,
1118
- identityProvider: 'anonymous',
1119
- lastIpAddress: ipAddress,
1120
- isIdentified: false
1121
- }, context);
1122
- } catch (error) {
1123
- ctx.logger?.error('Failed to create anonymous subject', {
1124
- ipAddress,
1125
- error: error instanceof Error ? error.message : 'Unknown error'
1126
- });
1127
- throw new error_class_DoubleTieError('Failed to create anonymous subject', {
1128
- code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1129
- status: 500,
1130
- meta: {
1131
- error: error instanceof Error ? error.message : 'Unknown error'
1132
- }
1133
- });
1134
- }
1135
- },
1136
- findSubjectById: async (subjectId)=>{
1137
- const subject = await adapter.findOne({
1138
- model: 'subject',
1139
- where: [
1140
- {
1141
- field: 'id',
1142
- value: subjectId
1143
- }
1144
- ]
1145
- });
1146
- return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1147
- },
1148
- findSubjectByExternalId: async (externalId)=>{
1149
- const subject = await adapter.findOne({
1150
- model: 'subject',
1151
- where: [
1152
- {
1153
- field: 'externalId',
1154
- value: externalId
1155
- }
1156
- ]
1157
- });
1158
- return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1159
- }
1160
- };
1161
- }
1162
1020
  function consentRegistry({ adapter, ...ctx }) {
1163
1021
  const { createWithHooks, updateWithHooks } = getWithHooks(adapter, ctx);
1164
1022
  const registry = {
@@ -1434,24 +1292,154 @@ function domainRegistry({ adapter, ...ctx }) {
1434
1292
  };
1435
1293
  return registry;
1436
1294
  }
1437
- function auditLogRegistry({ adapter, ...ctx }) {
1295
+ function subjectRegistry({ adapter, ...ctx }) {
1438
1296
  const { createWithHooks } = getWithHooks(adapter, ctx);
1439
1297
  return {
1440
- createAuditLog: async (auditLog, context)=>{
1441
- const createdLog = await createWithHooks({
1298
+ createSubject: async (subject, context)=>{
1299
+ const createdSubject = await createWithHooks({
1442
1300
  data: {
1443
1301
  createdAt: new Date(),
1444
- ...auditLog
1302
+ updatedAt: new Date(),
1303
+ ...subject
1445
1304
  },
1446
- model: 'auditLog',
1305
+ model: 'subject',
1447
1306
  customFn: void 0,
1448
1307
  context
1449
1308
  });
1450
- if (!createdLog) throw new error_class_DoubleTieError('Failed to create audit log - operation returned null', {
1451
- code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1452
- status: 500
1309
+ return createdSubject ? validateEntityOutput('subject', createdSubject, ctx.options) : null;
1310
+ },
1311
+ findOrCreateSubject: async function({ subjectId, externalSubjectId, ipAddress = 'unknown', context }) {
1312
+ if (subjectId && externalSubjectId) {
1313
+ const [subjectById, subjectByExternalId] = await Promise.all([
1314
+ this.findSubjectById(subjectId),
1315
+ this.findSubjectByExternalId(externalSubjectId)
1316
+ ]);
1317
+ if (!subjectById || !subjectByExternalId) {
1318
+ ctx.logger?.error('Subject validation failed: One or both subjects not found', {
1319
+ providedSubjectId: subjectId,
1320
+ providedExternalId: externalSubjectId,
1321
+ subjectByIdFound: !!subjectById,
1322
+ subjectByExternalIdFound: !!subjectByExternalId
1323
+ });
1324
+ throw new error_class_DoubleTieError('The specified subject could not be found. Please verify the subject identifiers and try again.', {
1325
+ code: error_codes_ERROR_CODES.NOT_FOUND,
1326
+ status: 404,
1327
+ meta: {
1328
+ providedSubjectId: subjectId,
1329
+ providedExternalId: externalSubjectId
1330
+ }
1331
+ });
1332
+ }
1333
+ if (subjectById.id !== subjectByExternalId.id) {
1334
+ ctx.logger?.warn('Subject validation failed: IDs do not match the same subject', {
1335
+ providedSubjectId: subjectId,
1336
+ providedExternalId: externalSubjectId,
1337
+ subjectByIdId: subjectById.id,
1338
+ subjectByExternalIdId: subjectByExternalId.id
1339
+ });
1340
+ 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.', {
1341
+ code: error_codes_ERROR_CODES.CONFLICT,
1342
+ status: 409,
1343
+ meta: {
1344
+ providedSubjectId: subjectId,
1345
+ providedExternalId: externalSubjectId,
1346
+ subjectByIdId: subjectById.id,
1347
+ subjectByExternalIdId: subjectByExternalId.id
1348
+ }
1349
+ });
1350
+ }
1351
+ return subjectById;
1352
+ }
1353
+ if (subjectId) {
1354
+ const subject = await this.findSubjectById(subjectId);
1355
+ if (subject) return subject;
1356
+ throw new error_class_DoubleTieError('Subject not found by subjectId', {
1357
+ code: error_codes_ERROR_CODES.NOT_FOUND,
1358
+ status: 404
1359
+ });
1360
+ }
1361
+ if (externalSubjectId) try {
1362
+ const subject = await this.findSubjectByExternalId(externalSubjectId);
1363
+ if (subject) {
1364
+ ctx.logger?.debug('Found existing subject by external ID', {
1365
+ externalSubjectId
1366
+ });
1367
+ return subject;
1368
+ }
1369
+ ctx.logger?.info('Creating new subject with external ID', {
1370
+ externalSubjectId
1371
+ });
1372
+ return await this.createSubject({
1373
+ externalId: externalSubjectId,
1374
+ identityProvider: 'external',
1375
+ lastIpAddress: ipAddress,
1376
+ isIdentified: true
1377
+ }, context);
1378
+ } catch (error) {
1379
+ if (error instanceof Error && error.message.includes('unique constraint')) {
1380
+ ctx.logger?.info('Handling duplicate key violation for external ID', {
1381
+ externalSubjectId
1382
+ });
1383
+ const subject = await this.findSubjectByExternalId(externalSubjectId);
1384
+ if (subject) return subject;
1385
+ }
1386
+ ctx.logger?.error('Failed to create or find subject with external ID', {
1387
+ externalSubjectId,
1388
+ error: error instanceof Error ? error.message : 'Unknown error'
1389
+ });
1390
+ throw new error_class_DoubleTieError('Failed to create or find subject with external ID', {
1391
+ code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1392
+ status: 500,
1393
+ meta: {
1394
+ error: error instanceof Error ? error.message : 'Unknown error'
1395
+ }
1396
+ });
1397
+ }
1398
+ try {
1399
+ ctx.logger?.info('Creating new anonymous subject');
1400
+ return await this.createSubject({
1401
+ externalId: null,
1402
+ identityProvider: 'anonymous',
1403
+ lastIpAddress: ipAddress,
1404
+ isIdentified: false
1405
+ }, context);
1406
+ } catch (error) {
1407
+ ctx.logger?.error('Failed to create anonymous subject', {
1408
+ ipAddress,
1409
+ error: error instanceof Error ? error.message : 'Unknown error'
1410
+ });
1411
+ throw new error_class_DoubleTieError('Failed to create anonymous subject', {
1412
+ code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1413
+ status: 500,
1414
+ meta: {
1415
+ error: error instanceof Error ? error.message : 'Unknown error'
1416
+ }
1417
+ });
1418
+ }
1419
+ },
1420
+ findSubjectById: async (subjectId)=>{
1421
+ const subject = await adapter.findOne({
1422
+ model: 'subject',
1423
+ where: [
1424
+ {
1425
+ field: 'id',
1426
+ value: subjectId
1427
+ }
1428
+ ]
1453
1429
  });
1454
- return createdLog;
1430
+ return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1431
+ },
1432
+ findSubjectByExternalId: async (externalId)=>{
1433
+ const subject = await adapter.findOne({
1434
+ model: 'subject',
1435
+ where: [
1436
+ {
1437
+ field: 'externalId',
1438
+ value: externalId
1439
+ }
1440
+ ]
1441
+ });
1442
+ return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1455
1443
  }
1456
1444
  };
1457
1445
  }