@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
@@ -42,32 +42,20 @@ function getDatabaseType() {
42
42
  return currentDatabaseType;
43
43
  }
44
44
  const fieldConfigSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
45
- required: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
46
- returned: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
47
- input: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
48
- defaultValue: __WEBPACK_EXTERNAL_MODULE_zod__.z.union([
49
- __WEBPACK_EXTERNAL_MODULE_zod__.z.any(),
50
- __WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.any())
51
- ]).optional(),
45
+ required: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
46
+ returned: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
47
+ input: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
48
+ defaultValue: __WEBPACK_EXTERNAL_MODULE_zod__.z.any().optional(),
52
49
  transform: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
53
- input: __WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().args(__WEBPACK_EXTERNAL_MODULE_zod__.z.any()).returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.union([
54
- __WEBPACK_EXTERNAL_MODULE_zod__.z.any(),
55
- __WEBPACK_EXTERNAL_MODULE_zod__.z.promise(__WEBPACK_EXTERNAL_MODULE_zod__.z.any())
56
- ])).optional(),
57
- output: __WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().args(__WEBPACK_EXTERNAL_MODULE_zod__.z.any()).returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.union([
58
- __WEBPACK_EXTERNAL_MODULE_zod__.z.any(),
59
- __WEBPACK_EXTERNAL_MODULE_zod__.z.promise(__WEBPACK_EXTERNAL_MODULE_zod__.z.any())
60
- ])).optional()
50
+ input: __WEBPACK_EXTERNAL_MODULE_zod__.z.any().optional(),
51
+ output: __WEBPACK_EXTERNAL_MODULE_zod__.z.any().optional()
61
52
  }).optional(),
62
- validator: __WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().args(__WEBPACK_EXTERNAL_MODULE_zod__.z.any()).returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.union([
63
- __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
64
- __WEBPACK_EXTERNAL_MODULE_zod__.z["null"]()
65
- ])).optional(),
53
+ validator: __WEBPACK_EXTERNAL_MODULE_zod__.z.any().optional(),
66
54
  unique: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().optional(),
67
55
  indexed: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().optional(),
68
- sortable: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
56
+ sortable: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
69
57
  fieldName: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
70
- bigint: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false)
58
+ bigint: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false)
71
59
  });
72
60
  const stringFieldSchema = fieldConfigSchema.extend({
73
61
  type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('string'),
@@ -87,18 +75,18 @@ const dateFieldSchema = fieldConfigSchema.extend({
87
75
  type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('date'),
88
76
  minDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().optional(),
89
77
  maxDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().optional(),
90
- dateOnly: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false),
91
- format: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional()
78
+ dateOnly: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false),
79
+ format: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional()
92
80
  });
93
81
  const timezoneFieldSchema = fieldConfigSchema.extend({
94
82
  type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('timezone'),
95
- validateTimezone: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
83
+ validateTimezone: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
96
84
  suggestedValues: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional(),
97
- restrictToSuggestedValues: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false)
85
+ restrictToSuggestedValues: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false)
98
86
  });
99
87
  const jsonFieldSchema = fieldConfigSchema.extend({
100
88
  type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('json'),
101
- validateJson: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true)
89
+ validateJson: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true)
102
90
  });
103
91
  const stringArrayFieldSchema = fieldConfigSchema.extend({
104
92
  type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('string[]')
@@ -419,6 +407,27 @@ class error_class_DoubleTieError extends __WEBPACK_EXTERNAL_MODULE__orpc_server_
419
407
  return formattedMessage;
420
408
  }
421
409
  }
410
+ function auditLogRegistry({ adapter, ...ctx }) {
411
+ const { createWithHooks } = getWithHooks(adapter, ctx);
412
+ return {
413
+ createAuditLog: async (auditLog, context)=>{
414
+ const createdLog = await createWithHooks({
415
+ data: {
416
+ createdAt: new Date(),
417
+ ...auditLog
418
+ },
419
+ model: 'auditLog',
420
+ customFn: void 0,
421
+ context
422
+ });
423
+ if (!createdLog) throw new error_class_DoubleTieError('Failed to create audit log - operation returned null', {
424
+ code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
425
+ status: 500
426
+ });
427
+ return createdLog;
428
+ }
429
+ };
430
+ }
422
431
  const auditLogSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
423
432
  id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
424
433
  entityType: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
@@ -427,9 +436,9 @@ const auditLogSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
427
436
  subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
428
437
  ipAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
429
438
  userAgent: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
430
- changes: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
431
- metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
432
- createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
439
+ changes: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
440
+ metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
441
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
433
442
  });
434
443
  function getAuditLogTable(options, auditLogFields) {
435
444
  const auditLogConfig = options.tables?.auditLog;
@@ -528,6 +537,128 @@ function getAuditLogTable(options, auditLogFields) {
528
537
  order: 5
529
538
  };
530
539
  }
540
+ const consentSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
541
+ id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
542
+ subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
543
+ domainId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
544
+ purposeIds: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()),
545
+ metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).nullable().optional(),
546
+ policyId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
547
+ ipAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
548
+ userAgent: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
549
+ status: __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
550
+ 'active',
551
+ 'withdrawn',
552
+ 'expired'
553
+ ]).prefault('active'),
554
+ withdrawalReason: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
555
+ givenAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
556
+ validUntil: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().nullable().optional(),
557
+ isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true)
558
+ });
559
+ function getConsentTable(options, consentFields) {
560
+ const consentConfig = options.tables?.consent;
561
+ const subjectConfig = options.tables?.subject;
562
+ const domainConfig = options.tables?.domain;
563
+ const policyConfig = options.tables?.consentPolicy;
564
+ return {
565
+ entityName: consentConfig?.entityName || 'consent',
566
+ entityPrefix: consentConfig?.entityPrefix || 'cns',
567
+ schema: consentSchema,
568
+ fields: {
569
+ subjectId: {
570
+ type: 'string',
571
+ required: true,
572
+ fieldName: consentConfig?.fields?.subjectId || 'subjectId',
573
+ references: {
574
+ model: subjectConfig?.entityName || 'subject',
575
+ field: 'id'
576
+ }
577
+ },
578
+ domainId: {
579
+ type: 'string',
580
+ required: true,
581
+ fieldName: consentConfig?.fields?.domainId || 'domainId',
582
+ references: {
583
+ model: domainConfig?.entityName || 'domain',
584
+ field: 'id'
585
+ }
586
+ },
587
+ purposeIds: {
588
+ type: 'json',
589
+ required: false,
590
+ fieldName: consentConfig?.fields?.purposeIds || 'purposeIds'
591
+ },
592
+ metadata: {
593
+ type: 'json',
594
+ required: false,
595
+ fieldName: consentConfig?.fields?.metadata || 'metadata'
596
+ },
597
+ policyId: {
598
+ type: 'string',
599
+ required: false,
600
+ fieldName: consentConfig?.fields?.policyId || 'policyId',
601
+ references: {
602
+ model: policyConfig?.entityName || 'consentPolicy',
603
+ field: 'id'
604
+ }
605
+ },
606
+ ipAddress: {
607
+ type: 'string',
608
+ required: false,
609
+ fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
610
+ },
611
+ userAgent: {
612
+ type: 'string',
613
+ required: false,
614
+ fieldName: consentConfig?.fields?.userAgent || 'userAgent'
615
+ },
616
+ status: {
617
+ type: 'string',
618
+ defaultValue: ()=>'active',
619
+ required: true,
620
+ fieldName: consentConfig?.fields?.status || 'status'
621
+ },
622
+ withdrawalReason: {
623
+ type: 'string',
624
+ required: false,
625
+ fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
626
+ },
627
+ givenAt: {
628
+ type: 'date',
629
+ defaultValue: ()=>new Date(),
630
+ required: true,
631
+ fieldName: consentConfig?.fields?.givenAt || 'givenAt'
632
+ },
633
+ validUntil: {
634
+ type: 'date',
635
+ required: false,
636
+ fieldName: consentConfig?.fields?.validUntil || 'validUntil',
637
+ transform: {
638
+ input: (val, data)=>{
639
+ if (val) return val;
640
+ const expiresIn = consentConfig?.expiresIn || 31536000;
641
+ const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
642
+ if (expiresIn > 0) {
643
+ const validUntil = new Date(givenAt);
644
+ validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
645
+ return validUntil;
646
+ }
647
+ }
648
+ }
649
+ },
650
+ isActive: {
651
+ type: 'boolean',
652
+ defaultValue: true,
653
+ required: true,
654
+ fieldName: consentConfig?.fields?.isActive || 'isActive'
655
+ },
656
+ ...consentFields || {},
657
+ ...consentConfig?.additionalFields || {}
658
+ },
659
+ order: 3
660
+ };
661
+ }
531
662
  const PolicyTypeSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
532
663
  'cookie_banner',
533
664
  'privacy_policy',
@@ -546,9 +677,9 @@ const consentPolicySchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
546
677
  expirationDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().nullable().optional(),
547
678
  content: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
548
679
  contentHash: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
549
- isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
550
- createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
551
- updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
680
+ isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
681
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
682
+ updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
552
683
  });
553
684
  function getConsentPolicyTable(options, policyFields) {
554
685
  const consentPolicyConfig = options.tables?.consentPolicy;
@@ -615,12 +746,12 @@ const purposeSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
615
746
  code: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
616
747
  name: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
617
748
  description: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
618
- isEssential: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false),
749
+ isEssential: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false),
619
750
  dataCategory: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullish(),
620
751
  legalBasis: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullish(),
621
- isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
622
- createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
623
- updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
752
+ isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
753
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
754
+ updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
624
755
  });
625
756
  function getPurposeTable(options, purposeFields) {
626
757
  const purposeConfig = options.tables?.consentPurpose;
@@ -689,9 +820,9 @@ const consentRecordSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
689
820
  subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
690
821
  consentId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
691
822
  actionType: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
692
- details: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
693
- createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
694
- updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
823
+ details: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
824
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
825
+ updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
695
826
  });
696
827
  function getConsentRecordTable(options, recordFields) {
697
828
  const recordConfig = options.tables?.record;
@@ -742,184 +873,62 @@ function getConsentRecordTable(options, recordFields) {
742
873
  order: 4
743
874
  };
744
875
  }
745
- const consentSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
876
+ const domainSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
746
877
  id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
747
- subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
748
- domainId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
749
- purposeIds: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()),
750
- metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).nullable().optional(),
751
- policyId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
752
- ipAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
753
- userAgent: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
754
- status: __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
755
- 'active',
756
- 'withdrawn',
757
- 'expired'
758
- ]).default('active'),
759
- withdrawalReason: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
760
- givenAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
761
- validUntil: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().nullable().optional(),
762
- isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true)
878
+ name: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().min(1),
879
+ description: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
880
+ allowedOrigins: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional().prefault([]),
881
+ isVerified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
882
+ isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
883
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
884
+ updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
763
885
  });
764
- function getConsentTable(options, consentFields) {
765
- const consentConfig = options.tables?.consent;
766
- const subjectConfig = options.tables?.subject;
886
+ function getDomainTable(options, domainFields) {
767
887
  const domainConfig = options.tables?.domain;
768
- const policyConfig = options.tables?.consentPolicy;
769
888
  return {
770
- entityName: consentConfig?.entityName || 'consent',
771
- entityPrefix: consentConfig?.entityPrefix || 'cns',
772
- schema: consentSchema,
889
+ entityName: domainConfig?.entityName || 'domain',
890
+ entityPrefix: domainConfig?.entityPrefix || 'dom',
891
+ schema: domainSchema,
773
892
  fields: {
774
- subjectId: {
893
+ name: {
775
894
  type: 'string',
776
895
  required: true,
777
- fieldName: consentConfig?.fields?.subjectId || 'subjectId',
778
- references: {
779
- model: subjectConfig?.entityName || 'subject',
780
- field: 'id'
781
- }
896
+ unique: true,
897
+ fieldName: domainConfig?.fields?.name || 'name'
782
898
  },
783
- domainId: {
899
+ description: {
784
900
  type: 'string',
785
- required: true,
786
- fieldName: consentConfig?.fields?.domainId || 'domainId',
787
- references: {
788
- model: domainConfig?.entityName || 'domain',
789
- field: 'id'
790
- }
791
- },
792
- purposeIds: {
793
- type: 'json',
794
901
  required: false,
795
- fieldName: consentConfig?.fields?.purposeIds || 'purposeIds'
902
+ fieldName: domainConfig?.fields?.description || "description"
796
903
  },
797
- metadata: {
904
+ allowedOrigins: {
798
905
  type: 'json',
906
+ defaultValue: ()=>[],
799
907
  required: false,
800
- fieldName: consentConfig?.fields?.metadata || 'metadata'
801
- },
802
- policyId: {
803
- type: 'string',
804
- required: false,
805
- fieldName: consentConfig?.fields?.policyId || 'policyId',
806
- references: {
807
- model: policyConfig?.entityName || 'consentPolicy',
808
- field: 'id'
809
- }
810
- },
811
- ipAddress: {
812
- type: 'string',
813
- required: false,
814
- fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
815
- },
816
- userAgent: {
817
- type: 'string',
818
- required: false,
819
- fieldName: consentConfig?.fields?.userAgent || 'userAgent'
908
+ fieldName: domainConfig?.fields?.allowedOrigins || 'allowedOrigins'
820
909
  },
821
- status: {
822
- type: 'string',
823
- defaultValue: ()=>'active',
910
+ isVerified: {
911
+ type: 'boolean',
912
+ defaultValue: true,
824
913
  required: true,
825
- fieldName: consentConfig?.fields?.status || 'status'
914
+ fieldName: domainConfig?.fields?.isVerified || 'isVerified'
826
915
  },
827
- withdrawalReason: {
828
- type: 'string',
829
- required: false,
830
- fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
916
+ isActive: {
917
+ type: 'boolean',
918
+ defaultValue: true,
919
+ required: true,
920
+ fieldName: domainConfig?.fields?.isActive || 'isActive'
831
921
  },
832
- givenAt: {
922
+ createdAt: {
833
923
  type: 'date',
834
924
  defaultValue: ()=>new Date(),
835
925
  required: true,
836
- fieldName: consentConfig?.fields?.givenAt || 'givenAt'
926
+ fieldName: domainConfig?.fields?.createdAt || 'createdAt'
837
927
  },
838
- validUntil: {
928
+ updatedAt: {
839
929
  type: 'date',
840
930
  required: false,
841
- fieldName: consentConfig?.fields?.validUntil || 'validUntil',
842
- transform: {
843
- input: (val, data)=>{
844
- if (val) return val;
845
- const expiresIn = consentConfig?.expiresIn || 31536000;
846
- const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
847
- if (expiresIn > 0) {
848
- const validUntil = new Date(givenAt);
849
- validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
850
- return validUntil;
851
- }
852
- }
853
- }
854
- },
855
- isActive: {
856
- type: 'boolean',
857
- defaultValue: true,
858
- required: true,
859
- fieldName: consentConfig?.fields?.isActive || 'isActive'
860
- },
861
- ...consentFields || {},
862
- ...consentConfig?.additionalFields || {}
863
- },
864
- order: 3
865
- };
866
- }
867
- const domainSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
868
- id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
869
- name: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().min(1),
870
- description: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
871
- allowedOrigins: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional().default([]),
872
- isVerified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
873
- isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
874
- createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
875
- updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
876
- });
877
- function getDomainTable(options, domainFields) {
878
- const domainConfig = options.tables?.domain;
879
- return {
880
- entityName: domainConfig?.entityName || 'domain',
881
- entityPrefix: domainConfig?.entityPrefix || 'dom',
882
- schema: domainSchema,
883
- fields: {
884
- name: {
885
- type: 'string',
886
- required: true,
887
- unique: true,
888
- fieldName: domainConfig?.fields?.name || 'name'
889
- },
890
- description: {
891
- type: 'string',
892
- required: false,
893
- fieldName: domainConfig?.fields?.description || "description"
894
- },
895
- allowedOrigins: {
896
- type: 'json',
897
- defaultValue: ()=>[],
898
- required: false,
899
- fieldName: domainConfig?.fields?.allowedOrigins || 'allowedOrigins'
900
- },
901
- isVerified: {
902
- type: 'boolean',
903
- defaultValue: true,
904
- required: true,
905
- fieldName: domainConfig?.fields?.isVerified || 'isVerified'
906
- },
907
- isActive: {
908
- type: 'boolean',
909
- defaultValue: true,
910
- required: true,
911
- fieldName: domainConfig?.fields?.isActive || 'isActive'
912
- },
913
- createdAt: {
914
- type: 'date',
915
- defaultValue: ()=>new Date(),
916
- required: true,
917
- fieldName: domainConfig?.fields?.createdAt || 'createdAt'
918
- },
919
- updatedAt: {
920
- type: 'date',
921
- required: false,
922
- fieldName: domainConfig?.fields?.updatedAt || 'updatedAt'
931
+ fieldName: domainConfig?.fields?.updatedAt || 'updatedAt'
923
932
  },
924
933
  ...domainFields || {},
925
934
  ...domainConfig?.additionalFields || {}
@@ -929,12 +938,12 @@ function getDomainTable(options, domainFields) {
929
938
  }
930
939
  const subjectSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
931
940
  id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
932
- isIdentified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false),
941
+ isIdentified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false),
933
942
  externalId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
934
943
  identityProvider: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
935
944
  lastIpAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
936
- createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
937
- updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
945
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
946
+ updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
938
947
  });
939
948
  function getSubjectTable(options, subjectFields) {
940
949
  const subjectConfig = options.tables?.subject;
@@ -1031,157 +1040,6 @@ function validateEntityOutput(tableName, data, options) {
1031
1040
  throw error;
1032
1041
  }
1033
1042
  }
1034
- function subjectRegistry({ adapter, ...ctx }) {
1035
- const { createWithHooks } = getWithHooks(adapter, ctx);
1036
- return {
1037
- createSubject: async (subject, context)=>{
1038
- const createdSubject = await createWithHooks({
1039
- data: {
1040
- createdAt: new Date(),
1041
- updatedAt: new Date(),
1042
- ...subject
1043
- },
1044
- model: 'subject',
1045
- customFn: void 0,
1046
- context
1047
- });
1048
- return createdSubject ? validateEntityOutput('subject', createdSubject, ctx.options) : null;
1049
- },
1050
- findOrCreateSubject: async function({ subjectId, externalSubjectId, ipAddress = 'unknown', context }) {
1051
- if (subjectId && externalSubjectId) {
1052
- const [subjectById, subjectByExternalId] = await Promise.all([
1053
- this.findSubjectById(subjectId),
1054
- this.findSubjectByExternalId(externalSubjectId)
1055
- ]);
1056
- if (!subjectById || !subjectByExternalId) {
1057
- ctx.logger?.error('Subject validation failed: One or both subjects not found', {
1058
- providedSubjectId: subjectId,
1059
- providedExternalId: externalSubjectId,
1060
- subjectByIdFound: !!subjectById,
1061
- subjectByExternalIdFound: !!subjectByExternalId
1062
- });
1063
- throw new error_class_DoubleTieError('The specified subject could not be found. Please verify the subject identifiers and try again.', {
1064
- code: error_codes_ERROR_CODES.NOT_FOUND,
1065
- status: 404,
1066
- meta: {
1067
- providedSubjectId: subjectId,
1068
- providedExternalId: externalSubjectId
1069
- }
1070
- });
1071
- }
1072
- if (subjectById.id !== subjectByExternalId.id) {
1073
- ctx.logger?.warn('Subject validation failed: IDs do not match the same subject', {
1074
- providedSubjectId: subjectId,
1075
- providedExternalId: externalSubjectId,
1076
- subjectByIdId: subjectById.id,
1077
- subjectByExternalIdId: subjectByExternalId.id
1078
- });
1079
- 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.', {
1080
- code: error_codes_ERROR_CODES.CONFLICT,
1081
- status: 409,
1082
- meta: {
1083
- providedSubjectId: subjectId,
1084
- providedExternalId: externalSubjectId,
1085
- subjectByIdId: subjectById.id,
1086
- subjectByExternalIdId: subjectByExternalId.id
1087
- }
1088
- });
1089
- }
1090
- return subjectById;
1091
- }
1092
- if (subjectId) {
1093
- const subject = await this.findSubjectById(subjectId);
1094
- if (subject) return subject;
1095
- throw new error_class_DoubleTieError('Subject not found by subjectId', {
1096
- code: error_codes_ERROR_CODES.NOT_FOUND,
1097
- status: 404
1098
- });
1099
- }
1100
- if (externalSubjectId) try {
1101
- const subject = await this.findSubjectByExternalId(externalSubjectId);
1102
- if (subject) {
1103
- ctx.logger?.debug('Found existing subject by external ID', {
1104
- externalSubjectId
1105
- });
1106
- return subject;
1107
- }
1108
- ctx.logger?.info('Creating new subject with external ID', {
1109
- externalSubjectId
1110
- });
1111
- return await this.createSubject({
1112
- externalId: externalSubjectId,
1113
- identityProvider: 'external',
1114
- lastIpAddress: ipAddress,
1115
- isIdentified: true
1116
- }, context);
1117
- } catch (error) {
1118
- if (error instanceof Error && error.message.includes('unique constraint')) {
1119
- ctx.logger?.info('Handling duplicate key violation for external ID', {
1120
- externalSubjectId
1121
- });
1122
- const subject = await this.findSubjectByExternalId(externalSubjectId);
1123
- if (subject) return subject;
1124
- }
1125
- ctx.logger?.error('Failed to create or find subject with external ID', {
1126
- externalSubjectId,
1127
- error: error instanceof Error ? error.message : 'Unknown error'
1128
- });
1129
- throw new error_class_DoubleTieError('Failed to create or find subject with external ID', {
1130
- code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1131
- status: 500,
1132
- meta: {
1133
- error: error instanceof Error ? error.message : 'Unknown error'
1134
- }
1135
- });
1136
- }
1137
- try {
1138
- ctx.logger?.info('Creating new anonymous subject');
1139
- return await this.createSubject({
1140
- externalId: null,
1141
- identityProvider: 'anonymous',
1142
- lastIpAddress: ipAddress,
1143
- isIdentified: false
1144
- }, context);
1145
- } catch (error) {
1146
- ctx.logger?.error('Failed to create anonymous subject', {
1147
- ipAddress,
1148
- error: error instanceof Error ? error.message : 'Unknown error'
1149
- });
1150
- throw new error_class_DoubleTieError('Failed to create anonymous subject', {
1151
- code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1152
- status: 500,
1153
- meta: {
1154
- error: error instanceof Error ? error.message : 'Unknown error'
1155
- }
1156
- });
1157
- }
1158
- },
1159
- findSubjectById: async (subjectId)=>{
1160
- const subject = await adapter.findOne({
1161
- model: 'subject',
1162
- where: [
1163
- {
1164
- field: 'id',
1165
- value: subjectId
1166
- }
1167
- ]
1168
- });
1169
- return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1170
- },
1171
- findSubjectByExternalId: async (externalId)=>{
1172
- const subject = await adapter.findOne({
1173
- model: 'subject',
1174
- where: [
1175
- {
1176
- field: 'externalId',
1177
- value: externalId
1178
- }
1179
- ]
1180
- });
1181
- return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1182
- }
1183
- };
1184
- }
1185
1043
  function consentRegistry({ adapter, ...ctx }) {
1186
1044
  const { createWithHooks, updateWithHooks } = getWithHooks(adapter, ctx);
1187
1045
  const registry = {
@@ -1457,24 +1315,154 @@ function domainRegistry({ adapter, ...ctx }) {
1457
1315
  };
1458
1316
  return registry;
1459
1317
  }
1460
- function auditLogRegistry({ adapter, ...ctx }) {
1318
+ function subjectRegistry({ adapter, ...ctx }) {
1461
1319
  const { createWithHooks } = getWithHooks(adapter, ctx);
1462
1320
  return {
1463
- createAuditLog: async (auditLog, context)=>{
1464
- const createdLog = await createWithHooks({
1321
+ createSubject: async (subject, context)=>{
1322
+ const createdSubject = await createWithHooks({
1465
1323
  data: {
1466
1324
  createdAt: new Date(),
1467
- ...auditLog
1325
+ updatedAt: new Date(),
1326
+ ...subject
1468
1327
  },
1469
- model: 'auditLog',
1328
+ model: 'subject',
1470
1329
  customFn: void 0,
1471
1330
  context
1472
1331
  });
1473
- if (!createdLog) throw new error_class_DoubleTieError('Failed to create audit log - operation returned null', {
1474
- code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1475
- status: 500
1332
+ return createdSubject ? validateEntityOutput('subject', createdSubject, ctx.options) : null;
1333
+ },
1334
+ findOrCreateSubject: async function({ subjectId, externalSubjectId, ipAddress = 'unknown', context }) {
1335
+ if (subjectId && externalSubjectId) {
1336
+ const [subjectById, subjectByExternalId] = await Promise.all([
1337
+ this.findSubjectById(subjectId),
1338
+ this.findSubjectByExternalId(externalSubjectId)
1339
+ ]);
1340
+ if (!subjectById || !subjectByExternalId) {
1341
+ ctx.logger?.error('Subject validation failed: One or both subjects not found', {
1342
+ providedSubjectId: subjectId,
1343
+ providedExternalId: externalSubjectId,
1344
+ subjectByIdFound: !!subjectById,
1345
+ subjectByExternalIdFound: !!subjectByExternalId
1346
+ });
1347
+ throw new error_class_DoubleTieError('The specified subject could not be found. Please verify the subject identifiers and try again.', {
1348
+ code: error_codes_ERROR_CODES.NOT_FOUND,
1349
+ status: 404,
1350
+ meta: {
1351
+ providedSubjectId: subjectId,
1352
+ providedExternalId: externalSubjectId
1353
+ }
1354
+ });
1355
+ }
1356
+ if (subjectById.id !== subjectByExternalId.id) {
1357
+ ctx.logger?.warn('Subject validation failed: IDs do not match the same subject', {
1358
+ providedSubjectId: subjectId,
1359
+ providedExternalId: externalSubjectId,
1360
+ subjectByIdId: subjectById.id,
1361
+ subjectByExternalIdId: subjectByExternalId.id
1362
+ });
1363
+ 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.', {
1364
+ code: error_codes_ERROR_CODES.CONFLICT,
1365
+ status: 409,
1366
+ meta: {
1367
+ providedSubjectId: subjectId,
1368
+ providedExternalId: externalSubjectId,
1369
+ subjectByIdId: subjectById.id,
1370
+ subjectByExternalIdId: subjectByExternalId.id
1371
+ }
1372
+ });
1373
+ }
1374
+ return subjectById;
1375
+ }
1376
+ if (subjectId) {
1377
+ const subject = await this.findSubjectById(subjectId);
1378
+ if (subject) return subject;
1379
+ throw new error_class_DoubleTieError('Subject not found by subjectId', {
1380
+ code: error_codes_ERROR_CODES.NOT_FOUND,
1381
+ status: 404
1382
+ });
1383
+ }
1384
+ if (externalSubjectId) try {
1385
+ const subject = await this.findSubjectByExternalId(externalSubjectId);
1386
+ if (subject) {
1387
+ ctx.logger?.debug('Found existing subject by external ID', {
1388
+ externalSubjectId
1389
+ });
1390
+ return subject;
1391
+ }
1392
+ ctx.logger?.info('Creating new subject with external ID', {
1393
+ externalSubjectId
1394
+ });
1395
+ return await this.createSubject({
1396
+ externalId: externalSubjectId,
1397
+ identityProvider: 'external',
1398
+ lastIpAddress: ipAddress,
1399
+ isIdentified: true
1400
+ }, context);
1401
+ } catch (error) {
1402
+ if (error instanceof Error && error.message.includes('unique constraint')) {
1403
+ ctx.logger?.info('Handling duplicate key violation for external ID', {
1404
+ externalSubjectId
1405
+ });
1406
+ const subject = await this.findSubjectByExternalId(externalSubjectId);
1407
+ if (subject) return subject;
1408
+ }
1409
+ ctx.logger?.error('Failed to create or find subject with external ID', {
1410
+ externalSubjectId,
1411
+ error: error instanceof Error ? error.message : 'Unknown error'
1412
+ });
1413
+ throw new error_class_DoubleTieError('Failed to create or find subject with external ID', {
1414
+ code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1415
+ status: 500,
1416
+ meta: {
1417
+ error: error instanceof Error ? error.message : 'Unknown error'
1418
+ }
1419
+ });
1420
+ }
1421
+ try {
1422
+ ctx.logger?.info('Creating new anonymous subject');
1423
+ return await this.createSubject({
1424
+ externalId: null,
1425
+ identityProvider: 'anonymous',
1426
+ lastIpAddress: ipAddress,
1427
+ isIdentified: false
1428
+ }, context);
1429
+ } catch (error) {
1430
+ ctx.logger?.error('Failed to create anonymous subject', {
1431
+ ipAddress,
1432
+ error: error instanceof Error ? error.message : 'Unknown error'
1433
+ });
1434
+ throw new error_class_DoubleTieError('Failed to create anonymous subject', {
1435
+ code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1436
+ status: 500,
1437
+ meta: {
1438
+ error: error instanceof Error ? error.message : 'Unknown error'
1439
+ }
1440
+ });
1441
+ }
1442
+ },
1443
+ findSubjectById: async (subjectId)=>{
1444
+ const subject = await adapter.findOne({
1445
+ model: 'subject',
1446
+ where: [
1447
+ {
1448
+ field: 'id',
1449
+ value: subjectId
1450
+ }
1451
+ ]
1476
1452
  });
1477
- return createdLog;
1453
+ return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1454
+ },
1455
+ findSubjectByExternalId: async (externalId)=>{
1456
+ const subject = await adapter.findOne({
1457
+ model: 'subject',
1458
+ where: [
1459
+ {
1460
+ field: 'externalId',
1461
+ value: externalId
1462
+ }
1463
+ ]
1464
+ });
1465
+ return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1478
1466
  }
1479
1467
  };
1480
1468
  }