@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
@@ -76,32 +76,20 @@ var external_base_x_default = /*#__PURE__*/ __webpack_require__.n(external_base_
76
76
  external_base_x_default()('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');
77
77
  const external_zod_namespaceObject = require("zod");
78
78
  const fieldConfigSchema = external_zod_namespaceObject.z.object({
79
- required: external_zod_namespaceObject.z.boolean().default(true),
80
- returned: external_zod_namespaceObject.z.boolean().default(true),
81
- input: external_zod_namespaceObject.z.boolean().default(true),
82
- defaultValue: external_zod_namespaceObject.z.union([
83
- external_zod_namespaceObject.z.any(),
84
- external_zod_namespaceObject.z["function"]().returns(external_zod_namespaceObject.z.any())
85
- ]).optional(),
79
+ required: external_zod_namespaceObject.z.boolean().prefault(true),
80
+ returned: external_zod_namespaceObject.z.boolean().prefault(true),
81
+ input: external_zod_namespaceObject.z.boolean().prefault(true),
82
+ defaultValue: external_zod_namespaceObject.z.any().optional(),
86
83
  transform: external_zod_namespaceObject.z.object({
87
- input: external_zod_namespaceObject.z["function"]().args(external_zod_namespaceObject.z.any()).returns(external_zod_namespaceObject.z.union([
88
- external_zod_namespaceObject.z.any(),
89
- external_zod_namespaceObject.z.promise(external_zod_namespaceObject.z.any())
90
- ])).optional(),
91
- output: external_zod_namespaceObject.z["function"]().args(external_zod_namespaceObject.z.any()).returns(external_zod_namespaceObject.z.union([
92
- external_zod_namespaceObject.z.any(),
93
- external_zod_namespaceObject.z.promise(external_zod_namespaceObject.z.any())
94
- ])).optional()
84
+ input: external_zod_namespaceObject.z.any().optional(),
85
+ output: external_zod_namespaceObject.z.any().optional()
95
86
  }).optional(),
96
- validator: external_zod_namespaceObject.z["function"]().args(external_zod_namespaceObject.z.any()).returns(external_zod_namespaceObject.z.union([
97
- external_zod_namespaceObject.z.string(),
98
- external_zod_namespaceObject.z["null"]()
99
- ])).optional(),
87
+ validator: external_zod_namespaceObject.z.any().optional(),
100
88
  unique: external_zod_namespaceObject.z.boolean().optional(),
101
89
  indexed: external_zod_namespaceObject.z.boolean().optional(),
102
- sortable: external_zod_namespaceObject.z.boolean().default(true),
90
+ sortable: external_zod_namespaceObject.z.boolean().prefault(true),
103
91
  fieldName: external_zod_namespaceObject.z.string().optional(),
104
- bigint: external_zod_namespaceObject.z.boolean().default(false)
92
+ bigint: external_zod_namespaceObject.z.boolean().prefault(false)
105
93
  });
106
94
  const stringFieldSchema = fieldConfigSchema.extend({
107
95
  type: external_zod_namespaceObject.z.literal('string'),
@@ -121,18 +109,18 @@ const dateFieldSchema = fieldConfigSchema.extend({
121
109
  type: external_zod_namespaceObject.z.literal('date'),
122
110
  minDate: external_zod_namespaceObject.z.date().optional(),
123
111
  maxDate: external_zod_namespaceObject.z.date().optional(),
124
- dateOnly: external_zod_namespaceObject.z.boolean().default(false),
125
- format: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional()
112
+ dateOnly: external_zod_namespaceObject.z.boolean().prefault(false),
113
+ format: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional()
126
114
  });
127
115
  const timezoneFieldSchema = fieldConfigSchema.extend({
128
116
  type: external_zod_namespaceObject.z.literal('timezone'),
129
- validateTimezone: external_zod_namespaceObject.z.boolean().default(true),
117
+ validateTimezone: external_zod_namespaceObject.z.boolean().prefault(true),
130
118
  suggestedValues: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional(),
131
- restrictToSuggestedValues: external_zod_namespaceObject.z.boolean().default(false)
119
+ restrictToSuggestedValues: external_zod_namespaceObject.z.boolean().prefault(false)
132
120
  });
133
121
  const jsonFieldSchema = fieldConfigSchema.extend({
134
122
  type: external_zod_namespaceObject.z.literal('json'),
135
- validateJson: external_zod_namespaceObject.z.boolean().default(true)
123
+ validateJson: external_zod_namespaceObject.z.boolean().prefault(true)
136
124
  });
137
125
  const stringArrayFieldSchema = fieldConfigSchema.extend({
138
126
  type: external_zod_namespaceObject.z.literal('string[]')
@@ -453,7 +441,27 @@ class error_class_DoubleTieError extends server_namespaceObject.ORPCError {
453
441
  return formattedMessage;
454
442
  }
455
443
  }
456
- const logger_namespaceObject = require("@doubletie/logger");
444
+ function auditLogRegistry({ adapter, ...ctx }) {
445
+ const { createWithHooks } = getWithHooks(adapter, ctx);
446
+ return {
447
+ createAuditLog: async (auditLog, context)=>{
448
+ const createdLog = await createWithHooks({
449
+ data: {
450
+ createdAt: new Date(),
451
+ ...auditLog
452
+ },
453
+ model: 'auditLog',
454
+ customFn: void 0,
455
+ context
456
+ });
457
+ if (!createdLog) throw new error_class_DoubleTieError('Failed to create audit log - operation returned null', {
458
+ code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
459
+ status: 500
460
+ });
461
+ return createdLog;
462
+ }
463
+ };
464
+ }
457
465
  const auditLogSchema = external_zod_namespaceObject.z.object({
458
466
  id: external_zod_namespaceObject.z.string(),
459
467
  entityType: external_zod_namespaceObject.z.string(),
@@ -462,9 +470,9 @@ const auditLogSchema = external_zod_namespaceObject.z.object({
462
470
  subjectId: external_zod_namespaceObject.z.string().optional(),
463
471
  ipAddress: external_zod_namespaceObject.z.string().optional(),
464
472
  userAgent: external_zod_namespaceObject.z.string().optional(),
465
- changes: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
466
- metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
467
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date())
473
+ changes: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional(),
474
+ metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional(),
475
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
468
476
  });
469
477
  function getAuditLogTable(options, auditLogFields) {
470
478
  const auditLogConfig = options.tables?.auditLog;
@@ -563,6 +571,129 @@ function getAuditLogTable(options, auditLogFields) {
563
571
  order: 5
564
572
  };
565
573
  }
574
+ const logger_namespaceObject = require("@doubletie/logger");
575
+ const consentSchema = external_zod_namespaceObject.z.object({
576
+ id: external_zod_namespaceObject.z.string(),
577
+ subjectId: external_zod_namespaceObject.z.string(),
578
+ domainId: external_zod_namespaceObject.z.string(),
579
+ purposeIds: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()),
580
+ metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).nullable().optional(),
581
+ policyId: external_zod_namespaceObject.z.string().optional(),
582
+ ipAddress: external_zod_namespaceObject.z.string().nullable().optional(),
583
+ userAgent: external_zod_namespaceObject.z.string().nullable().optional(),
584
+ status: external_zod_namespaceObject.z["enum"]([
585
+ 'active',
586
+ 'withdrawn',
587
+ 'expired'
588
+ ]).prefault('active'),
589
+ withdrawalReason: external_zod_namespaceObject.z.string().nullable().optional(),
590
+ givenAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
591
+ validUntil: external_zod_namespaceObject.z.date().nullable().optional(),
592
+ isActive: external_zod_namespaceObject.z.boolean().prefault(true)
593
+ });
594
+ function getConsentTable(options, consentFields) {
595
+ const consentConfig = options.tables?.consent;
596
+ const subjectConfig = options.tables?.subject;
597
+ const domainConfig = options.tables?.domain;
598
+ const policyConfig = options.tables?.consentPolicy;
599
+ return {
600
+ entityName: consentConfig?.entityName || 'consent',
601
+ entityPrefix: consentConfig?.entityPrefix || 'cns',
602
+ schema: consentSchema,
603
+ fields: {
604
+ subjectId: {
605
+ type: 'string',
606
+ required: true,
607
+ fieldName: consentConfig?.fields?.subjectId || 'subjectId',
608
+ references: {
609
+ model: subjectConfig?.entityName || 'subject',
610
+ field: 'id'
611
+ }
612
+ },
613
+ domainId: {
614
+ type: 'string',
615
+ required: true,
616
+ fieldName: consentConfig?.fields?.domainId || 'domainId',
617
+ references: {
618
+ model: domainConfig?.entityName || 'domain',
619
+ field: 'id'
620
+ }
621
+ },
622
+ purposeIds: {
623
+ type: 'json',
624
+ required: false,
625
+ fieldName: consentConfig?.fields?.purposeIds || 'purposeIds'
626
+ },
627
+ metadata: {
628
+ type: 'json',
629
+ required: false,
630
+ fieldName: consentConfig?.fields?.metadata || 'metadata'
631
+ },
632
+ policyId: {
633
+ type: 'string',
634
+ required: false,
635
+ fieldName: consentConfig?.fields?.policyId || 'policyId',
636
+ references: {
637
+ model: policyConfig?.entityName || 'consentPolicy',
638
+ field: 'id'
639
+ }
640
+ },
641
+ ipAddress: {
642
+ type: 'string',
643
+ required: false,
644
+ fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
645
+ },
646
+ userAgent: {
647
+ type: 'string',
648
+ required: false,
649
+ fieldName: consentConfig?.fields?.userAgent || 'userAgent'
650
+ },
651
+ status: {
652
+ type: 'string',
653
+ defaultValue: ()=>'active',
654
+ required: true,
655
+ fieldName: consentConfig?.fields?.status || 'status'
656
+ },
657
+ withdrawalReason: {
658
+ type: 'string',
659
+ required: false,
660
+ fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
661
+ },
662
+ givenAt: {
663
+ type: 'date',
664
+ defaultValue: ()=>new Date(),
665
+ required: true,
666
+ fieldName: consentConfig?.fields?.givenAt || 'givenAt'
667
+ },
668
+ validUntil: {
669
+ type: 'date',
670
+ required: false,
671
+ fieldName: consentConfig?.fields?.validUntil || 'validUntil',
672
+ transform: {
673
+ input: (val, data)=>{
674
+ if (val) return val;
675
+ const expiresIn = consentConfig?.expiresIn || 31536000;
676
+ const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
677
+ if (expiresIn > 0) {
678
+ const validUntil = new Date(givenAt);
679
+ validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
680
+ return validUntil;
681
+ }
682
+ }
683
+ }
684
+ },
685
+ isActive: {
686
+ type: 'boolean',
687
+ defaultValue: true,
688
+ required: true,
689
+ fieldName: consentConfig?.fields?.isActive || 'isActive'
690
+ },
691
+ ...consentFields || {},
692
+ ...consentConfig?.additionalFields || {}
693
+ },
694
+ order: 3
695
+ };
696
+ }
566
697
  const PolicyTypeSchema = external_zod_namespaceObject.z["enum"]([
567
698
  'cookie_banner',
568
699
  'privacy_policy',
@@ -581,9 +712,9 @@ const consentPolicySchema = external_zod_namespaceObject.z.object({
581
712
  expirationDate: external_zod_namespaceObject.z.date().nullable().optional(),
582
713
  content: external_zod_namespaceObject.z.string(),
583
714
  contentHash: external_zod_namespaceObject.z.string(),
584
- isActive: external_zod_namespaceObject.z.boolean().default(true),
585
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
586
- updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
715
+ isActive: external_zod_namespaceObject.z.boolean().prefault(true),
716
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
717
+ updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
587
718
  });
588
719
  function getConsentPolicyTable(options, policyFields) {
589
720
  const consentPolicyConfig = options.tables?.consentPolicy;
@@ -650,12 +781,12 @@ const purposeSchema = external_zod_namespaceObject.z.object({
650
781
  code: external_zod_namespaceObject.z.string(),
651
782
  name: external_zod_namespaceObject.z.string(),
652
783
  description: external_zod_namespaceObject.z.string(),
653
- isEssential: external_zod_namespaceObject.z.boolean().default(false),
784
+ isEssential: external_zod_namespaceObject.z.boolean().prefault(false),
654
785
  dataCategory: external_zod_namespaceObject.z.string().nullish(),
655
786
  legalBasis: external_zod_namespaceObject.z.string().nullish(),
656
- isActive: external_zod_namespaceObject.z.boolean().default(true),
657
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
658
- updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
787
+ isActive: external_zod_namespaceObject.z.boolean().prefault(true),
788
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
789
+ updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
659
790
  });
660
791
  function getPurposeTable(options, purposeFields) {
661
792
  const purposeConfig = options.tables?.consentPurpose;
@@ -724,9 +855,9 @@ const consentRecordSchema = external_zod_namespaceObject.z.object({
724
855
  subjectId: external_zod_namespaceObject.z.string(),
725
856
  consentId: external_zod_namespaceObject.z.string().optional(),
726
857
  actionType: external_zod_namespaceObject.z.string(),
727
- details: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
728
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
729
- updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
858
+ details: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional(),
859
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
860
+ updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
730
861
  });
731
862
  function getConsentRecordTable(options, recordFields) {
732
863
  const recordConfig = options.tables?.record;
@@ -777,184 +908,62 @@ function getConsentRecordTable(options, recordFields) {
777
908
  order: 4
778
909
  };
779
910
  }
780
- const consentSchema = external_zod_namespaceObject.z.object({
911
+ const domainSchema = external_zod_namespaceObject.z.object({
781
912
  id: external_zod_namespaceObject.z.string(),
782
- subjectId: external_zod_namespaceObject.z.string(),
783
- domainId: external_zod_namespaceObject.z.string(),
784
- purposeIds: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()),
785
- metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).nullable().optional(),
786
- policyId: external_zod_namespaceObject.z.string().optional(),
787
- ipAddress: external_zod_namespaceObject.z.string().nullable().optional(),
788
- userAgent: external_zod_namespaceObject.z.string().nullable().optional(),
789
- status: external_zod_namespaceObject.z["enum"]([
790
- 'active',
791
- 'withdrawn',
792
- 'expired'
793
- ]).default('active'),
794
- withdrawalReason: external_zod_namespaceObject.z.string().nullable().optional(),
795
- givenAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
796
- validUntil: external_zod_namespaceObject.z.date().nullable().optional(),
797
- isActive: external_zod_namespaceObject.z.boolean().default(true)
913
+ name: external_zod_namespaceObject.z.string().min(1),
914
+ description: external_zod_namespaceObject.z.string().optional(),
915
+ allowedOrigins: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional().prefault([]),
916
+ isVerified: external_zod_namespaceObject.z.boolean().prefault(true),
917
+ isActive: external_zod_namespaceObject.z.boolean().prefault(true),
918
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
919
+ updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
798
920
  });
799
- function getConsentTable(options, consentFields) {
800
- const consentConfig = options.tables?.consent;
801
- const subjectConfig = options.tables?.subject;
921
+ function getDomainTable(options, domainFields) {
802
922
  const domainConfig = options.tables?.domain;
803
- const policyConfig = options.tables?.consentPolicy;
804
923
  return {
805
- entityName: consentConfig?.entityName || 'consent',
806
- entityPrefix: consentConfig?.entityPrefix || 'cns',
807
- schema: consentSchema,
924
+ entityName: domainConfig?.entityName || 'domain',
925
+ entityPrefix: domainConfig?.entityPrefix || 'dom',
926
+ schema: domainSchema,
808
927
  fields: {
809
- subjectId: {
928
+ name: {
810
929
  type: 'string',
811
930
  required: true,
812
- fieldName: consentConfig?.fields?.subjectId || 'subjectId',
813
- references: {
814
- model: subjectConfig?.entityName || 'subject',
815
- field: 'id'
816
- }
931
+ unique: true,
932
+ fieldName: domainConfig?.fields?.name || 'name'
817
933
  },
818
- domainId: {
934
+ description: {
819
935
  type: 'string',
820
- required: true,
821
- fieldName: consentConfig?.fields?.domainId || 'domainId',
822
- references: {
823
- model: domainConfig?.entityName || 'domain',
824
- field: 'id'
825
- }
826
- },
827
- purposeIds: {
828
- type: 'json',
829
936
  required: false,
830
- fieldName: consentConfig?.fields?.purposeIds || 'purposeIds'
937
+ fieldName: domainConfig?.fields?.description || "description"
831
938
  },
832
- metadata: {
939
+ allowedOrigins: {
833
940
  type: 'json',
941
+ defaultValue: ()=>[],
834
942
  required: false,
835
- fieldName: consentConfig?.fields?.metadata || 'metadata'
836
- },
837
- policyId: {
838
- type: 'string',
839
- required: false,
840
- fieldName: consentConfig?.fields?.policyId || 'policyId',
841
- references: {
842
- model: policyConfig?.entityName || 'consentPolicy',
843
- field: 'id'
844
- }
845
- },
846
- ipAddress: {
847
- type: 'string',
848
- required: false,
849
- fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
850
- },
851
- userAgent: {
852
- type: 'string',
853
- required: false,
854
- fieldName: consentConfig?.fields?.userAgent || 'userAgent'
943
+ fieldName: domainConfig?.fields?.allowedOrigins || 'allowedOrigins'
855
944
  },
856
- status: {
857
- type: 'string',
858
- defaultValue: ()=>'active',
945
+ isVerified: {
946
+ type: 'boolean',
947
+ defaultValue: true,
859
948
  required: true,
860
- fieldName: consentConfig?.fields?.status || 'status'
949
+ fieldName: domainConfig?.fields?.isVerified || 'isVerified'
861
950
  },
862
- withdrawalReason: {
863
- type: 'string',
864
- required: false,
865
- fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
951
+ isActive: {
952
+ type: 'boolean',
953
+ defaultValue: true,
954
+ required: true,
955
+ fieldName: domainConfig?.fields?.isActive || 'isActive'
866
956
  },
867
- givenAt: {
957
+ createdAt: {
868
958
  type: 'date',
869
959
  defaultValue: ()=>new Date(),
870
960
  required: true,
871
- fieldName: consentConfig?.fields?.givenAt || 'givenAt'
961
+ fieldName: domainConfig?.fields?.createdAt || 'createdAt'
872
962
  },
873
- validUntil: {
963
+ updatedAt: {
874
964
  type: 'date',
875
965
  required: false,
876
- fieldName: consentConfig?.fields?.validUntil || 'validUntil',
877
- transform: {
878
- input: (val, data)=>{
879
- if (val) return val;
880
- const expiresIn = consentConfig?.expiresIn || 31536000;
881
- const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
882
- if (expiresIn > 0) {
883
- const validUntil = new Date(givenAt);
884
- validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
885
- return validUntil;
886
- }
887
- }
888
- }
889
- },
890
- isActive: {
891
- type: 'boolean',
892
- defaultValue: true,
893
- required: true,
894
- fieldName: consentConfig?.fields?.isActive || 'isActive'
895
- },
896
- ...consentFields || {},
897
- ...consentConfig?.additionalFields || {}
898
- },
899
- order: 3
900
- };
901
- }
902
- const domainSchema = external_zod_namespaceObject.z.object({
903
- id: external_zod_namespaceObject.z.string(),
904
- name: external_zod_namespaceObject.z.string().min(1),
905
- description: external_zod_namespaceObject.z.string().optional(),
906
- allowedOrigins: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional().default([]),
907
- isVerified: external_zod_namespaceObject.z.boolean().default(true),
908
- isActive: external_zod_namespaceObject.z.boolean().default(true),
909
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
910
- updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
911
- });
912
- function getDomainTable(options, domainFields) {
913
- const domainConfig = options.tables?.domain;
914
- return {
915
- entityName: domainConfig?.entityName || 'domain',
916
- entityPrefix: domainConfig?.entityPrefix || 'dom',
917
- schema: domainSchema,
918
- fields: {
919
- name: {
920
- type: 'string',
921
- required: true,
922
- unique: true,
923
- fieldName: domainConfig?.fields?.name || 'name'
924
- },
925
- description: {
926
- type: 'string',
927
- required: false,
928
- fieldName: domainConfig?.fields?.description || "description"
929
- },
930
- allowedOrigins: {
931
- type: 'json',
932
- defaultValue: ()=>[],
933
- required: false,
934
- fieldName: domainConfig?.fields?.allowedOrigins || 'allowedOrigins'
935
- },
936
- isVerified: {
937
- type: 'boolean',
938
- defaultValue: true,
939
- required: true,
940
- fieldName: domainConfig?.fields?.isVerified || 'isVerified'
941
- },
942
- isActive: {
943
- type: 'boolean',
944
- defaultValue: true,
945
- required: true,
946
- fieldName: domainConfig?.fields?.isActive || 'isActive'
947
- },
948
- createdAt: {
949
- type: 'date',
950
- defaultValue: ()=>new Date(),
951
- required: true,
952
- fieldName: domainConfig?.fields?.createdAt || 'createdAt'
953
- },
954
- updatedAt: {
955
- type: 'date',
956
- required: false,
957
- fieldName: domainConfig?.fields?.updatedAt || 'updatedAt'
966
+ fieldName: domainConfig?.fields?.updatedAt || 'updatedAt'
958
967
  },
959
968
  ...domainFields || {},
960
969
  ...domainConfig?.additionalFields || {}
@@ -964,12 +973,12 @@ function getDomainTable(options, domainFields) {
964
973
  }
965
974
  const subjectSchema = external_zod_namespaceObject.z.object({
966
975
  id: external_zod_namespaceObject.z.string(),
967
- isIdentified: external_zod_namespaceObject.z.boolean().default(false),
976
+ isIdentified: external_zod_namespaceObject.z.boolean().prefault(false),
968
977
  externalId: external_zod_namespaceObject.z.string().nullable().optional(),
969
978
  identityProvider: external_zod_namespaceObject.z.string().optional(),
970
979
  lastIpAddress: external_zod_namespaceObject.z.string().optional(),
971
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
972
- updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
980
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
981
+ updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
973
982
  });
974
983
  function getSubjectTable(options, subjectFields) {
975
984
  const subjectConfig = options.tables?.subject;
@@ -1066,157 +1075,6 @@ function validateEntityOutput(tableName, data, options) {
1066
1075
  throw error;
1067
1076
  }
1068
1077
  }
1069
- function subjectRegistry({ adapter, ...ctx }) {
1070
- const { createWithHooks } = getWithHooks(adapter, ctx);
1071
- return {
1072
- createSubject: async (subject, context)=>{
1073
- const createdSubject = await createWithHooks({
1074
- data: {
1075
- createdAt: new Date(),
1076
- updatedAt: new Date(),
1077
- ...subject
1078
- },
1079
- model: 'subject',
1080
- customFn: void 0,
1081
- context
1082
- });
1083
- return createdSubject ? validateEntityOutput('subject', createdSubject, ctx.options) : null;
1084
- },
1085
- findOrCreateSubject: async function({ subjectId, externalSubjectId, ipAddress = 'unknown', context }) {
1086
- if (subjectId && externalSubjectId) {
1087
- const [subjectById, subjectByExternalId] = await Promise.all([
1088
- this.findSubjectById(subjectId),
1089
- this.findSubjectByExternalId(externalSubjectId)
1090
- ]);
1091
- if (!subjectById || !subjectByExternalId) {
1092
- ctx.logger?.error('Subject validation failed: One or both subjects not found', {
1093
- providedSubjectId: subjectId,
1094
- providedExternalId: externalSubjectId,
1095
- subjectByIdFound: !!subjectById,
1096
- subjectByExternalIdFound: !!subjectByExternalId
1097
- });
1098
- throw new error_class_DoubleTieError('The specified subject could not be found. Please verify the subject identifiers and try again.', {
1099
- code: error_codes_ERROR_CODES.NOT_FOUND,
1100
- status: 404,
1101
- meta: {
1102
- providedSubjectId: subjectId,
1103
- providedExternalId: externalSubjectId
1104
- }
1105
- });
1106
- }
1107
- if (subjectById.id !== subjectByExternalId.id) {
1108
- ctx.logger?.warn('Subject validation failed: IDs do not match the same subject', {
1109
- providedSubjectId: subjectId,
1110
- providedExternalId: externalSubjectId,
1111
- subjectByIdId: subjectById.id,
1112
- subjectByExternalIdId: subjectByExternalId.id
1113
- });
1114
- 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.', {
1115
- code: error_codes_ERROR_CODES.CONFLICT,
1116
- status: 409,
1117
- meta: {
1118
- providedSubjectId: subjectId,
1119
- providedExternalId: externalSubjectId,
1120
- subjectByIdId: subjectById.id,
1121
- subjectByExternalIdId: subjectByExternalId.id
1122
- }
1123
- });
1124
- }
1125
- return subjectById;
1126
- }
1127
- if (subjectId) {
1128
- const subject = await this.findSubjectById(subjectId);
1129
- if (subject) return subject;
1130
- throw new error_class_DoubleTieError('Subject not found by subjectId', {
1131
- code: error_codes_ERROR_CODES.NOT_FOUND,
1132
- status: 404
1133
- });
1134
- }
1135
- if (externalSubjectId) try {
1136
- const subject = await this.findSubjectByExternalId(externalSubjectId);
1137
- if (subject) {
1138
- ctx.logger?.debug('Found existing subject by external ID', {
1139
- externalSubjectId
1140
- });
1141
- return subject;
1142
- }
1143
- ctx.logger?.info('Creating new subject with external ID', {
1144
- externalSubjectId
1145
- });
1146
- return await this.createSubject({
1147
- externalId: externalSubjectId,
1148
- identityProvider: 'external',
1149
- lastIpAddress: ipAddress,
1150
- isIdentified: true
1151
- }, context);
1152
- } catch (error) {
1153
- if (error instanceof Error && error.message.includes('unique constraint')) {
1154
- ctx.logger?.info('Handling duplicate key violation for external ID', {
1155
- externalSubjectId
1156
- });
1157
- const subject = await this.findSubjectByExternalId(externalSubjectId);
1158
- if (subject) return subject;
1159
- }
1160
- ctx.logger?.error('Failed to create or find subject with external ID', {
1161
- externalSubjectId,
1162
- error: error instanceof Error ? error.message : 'Unknown error'
1163
- });
1164
- throw new error_class_DoubleTieError('Failed to create or find subject with external ID', {
1165
- code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1166
- status: 500,
1167
- meta: {
1168
- error: error instanceof Error ? error.message : 'Unknown error'
1169
- }
1170
- });
1171
- }
1172
- try {
1173
- ctx.logger?.info('Creating new anonymous subject');
1174
- return await this.createSubject({
1175
- externalId: null,
1176
- identityProvider: 'anonymous',
1177
- lastIpAddress: ipAddress,
1178
- isIdentified: false
1179
- }, context);
1180
- } catch (error) {
1181
- ctx.logger?.error('Failed to create anonymous subject', {
1182
- ipAddress,
1183
- error: error instanceof Error ? error.message : 'Unknown error'
1184
- });
1185
- throw new error_class_DoubleTieError('Failed to create anonymous subject', {
1186
- code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1187
- status: 500,
1188
- meta: {
1189
- error: error instanceof Error ? error.message : 'Unknown error'
1190
- }
1191
- });
1192
- }
1193
- },
1194
- findSubjectById: async (subjectId)=>{
1195
- const subject = await adapter.findOne({
1196
- model: 'subject',
1197
- where: [
1198
- {
1199
- field: 'id',
1200
- value: subjectId
1201
- }
1202
- ]
1203
- });
1204
- return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1205
- },
1206
- findSubjectByExternalId: async (externalId)=>{
1207
- const subject = await adapter.findOne({
1208
- model: 'subject',
1209
- where: [
1210
- {
1211
- field: 'externalId',
1212
- value: externalId
1213
- }
1214
- ]
1215
- });
1216
- return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1217
- }
1218
- };
1219
- }
1220
1078
  function consentRegistry({ adapter, ...ctx }) {
1221
1079
  const { createWithHooks, updateWithHooks } = getWithHooks(adapter, ctx);
1222
1080
  const registry = {
@@ -1492,24 +1350,154 @@ function domainRegistry({ adapter, ...ctx }) {
1492
1350
  };
1493
1351
  return registry;
1494
1352
  }
1495
- function auditLogRegistry({ adapter, ...ctx }) {
1353
+ function subjectRegistry({ adapter, ...ctx }) {
1496
1354
  const { createWithHooks } = getWithHooks(adapter, ctx);
1497
1355
  return {
1498
- createAuditLog: async (auditLog, context)=>{
1499
- const createdLog = await createWithHooks({
1356
+ createSubject: async (subject, context)=>{
1357
+ const createdSubject = await createWithHooks({
1500
1358
  data: {
1501
1359
  createdAt: new Date(),
1502
- ...auditLog
1360
+ updatedAt: new Date(),
1361
+ ...subject
1503
1362
  },
1504
- model: 'auditLog',
1363
+ model: 'subject',
1505
1364
  customFn: void 0,
1506
1365
  context
1507
1366
  });
1508
- if (!createdLog) throw new error_class_DoubleTieError('Failed to create audit log - operation returned null', {
1509
- code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1510
- status: 500
1367
+ return createdSubject ? validateEntityOutput('subject', createdSubject, ctx.options) : null;
1368
+ },
1369
+ findOrCreateSubject: async function({ subjectId, externalSubjectId, ipAddress = 'unknown', context }) {
1370
+ if (subjectId && externalSubjectId) {
1371
+ const [subjectById, subjectByExternalId] = await Promise.all([
1372
+ this.findSubjectById(subjectId),
1373
+ this.findSubjectByExternalId(externalSubjectId)
1374
+ ]);
1375
+ if (!subjectById || !subjectByExternalId) {
1376
+ ctx.logger?.error('Subject validation failed: One or both subjects not found', {
1377
+ providedSubjectId: subjectId,
1378
+ providedExternalId: externalSubjectId,
1379
+ subjectByIdFound: !!subjectById,
1380
+ subjectByExternalIdFound: !!subjectByExternalId
1381
+ });
1382
+ throw new error_class_DoubleTieError('The specified subject could not be found. Please verify the subject identifiers and try again.', {
1383
+ code: error_codes_ERROR_CODES.NOT_FOUND,
1384
+ status: 404,
1385
+ meta: {
1386
+ providedSubjectId: subjectId,
1387
+ providedExternalId: externalSubjectId
1388
+ }
1389
+ });
1390
+ }
1391
+ if (subjectById.id !== subjectByExternalId.id) {
1392
+ ctx.logger?.warn('Subject validation failed: IDs do not match the same subject', {
1393
+ providedSubjectId: subjectId,
1394
+ providedExternalId: externalSubjectId,
1395
+ subjectByIdId: subjectById.id,
1396
+ subjectByExternalIdId: subjectByExternalId.id
1397
+ });
1398
+ 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.', {
1399
+ code: error_codes_ERROR_CODES.CONFLICT,
1400
+ status: 409,
1401
+ meta: {
1402
+ providedSubjectId: subjectId,
1403
+ providedExternalId: externalSubjectId,
1404
+ subjectByIdId: subjectById.id,
1405
+ subjectByExternalIdId: subjectByExternalId.id
1406
+ }
1407
+ });
1408
+ }
1409
+ return subjectById;
1410
+ }
1411
+ if (subjectId) {
1412
+ const subject = await this.findSubjectById(subjectId);
1413
+ if (subject) return subject;
1414
+ throw new error_class_DoubleTieError('Subject not found by subjectId', {
1415
+ code: error_codes_ERROR_CODES.NOT_FOUND,
1416
+ status: 404
1417
+ });
1418
+ }
1419
+ if (externalSubjectId) try {
1420
+ const subject = await this.findSubjectByExternalId(externalSubjectId);
1421
+ if (subject) {
1422
+ ctx.logger?.debug('Found existing subject by external ID', {
1423
+ externalSubjectId
1424
+ });
1425
+ return subject;
1426
+ }
1427
+ ctx.logger?.info('Creating new subject with external ID', {
1428
+ externalSubjectId
1429
+ });
1430
+ return await this.createSubject({
1431
+ externalId: externalSubjectId,
1432
+ identityProvider: 'external',
1433
+ lastIpAddress: ipAddress,
1434
+ isIdentified: true
1435
+ }, context);
1436
+ } catch (error) {
1437
+ if (error instanceof Error && error.message.includes('unique constraint')) {
1438
+ ctx.logger?.info('Handling duplicate key violation for external ID', {
1439
+ externalSubjectId
1440
+ });
1441
+ const subject = await this.findSubjectByExternalId(externalSubjectId);
1442
+ if (subject) return subject;
1443
+ }
1444
+ ctx.logger?.error('Failed to create or find subject with external ID', {
1445
+ externalSubjectId,
1446
+ error: error instanceof Error ? error.message : 'Unknown error'
1447
+ });
1448
+ throw new error_class_DoubleTieError('Failed to create or find subject with external ID', {
1449
+ code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1450
+ status: 500,
1451
+ meta: {
1452
+ error: error instanceof Error ? error.message : 'Unknown error'
1453
+ }
1454
+ });
1455
+ }
1456
+ try {
1457
+ ctx.logger?.info('Creating new anonymous subject');
1458
+ return await this.createSubject({
1459
+ externalId: null,
1460
+ identityProvider: 'anonymous',
1461
+ lastIpAddress: ipAddress,
1462
+ isIdentified: false
1463
+ }, context);
1464
+ } catch (error) {
1465
+ ctx.logger?.error('Failed to create anonymous subject', {
1466
+ ipAddress,
1467
+ error: error instanceof Error ? error.message : 'Unknown error'
1468
+ });
1469
+ throw new error_class_DoubleTieError('Failed to create anonymous subject', {
1470
+ code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1471
+ status: 500,
1472
+ meta: {
1473
+ error: error instanceof Error ? error.message : 'Unknown error'
1474
+ }
1475
+ });
1476
+ }
1477
+ },
1478
+ findSubjectById: async (subjectId)=>{
1479
+ const subject = await adapter.findOne({
1480
+ model: 'subject',
1481
+ where: [
1482
+ {
1483
+ field: 'id',
1484
+ value: subjectId
1485
+ }
1486
+ ]
1511
1487
  });
1512
- return createdLog;
1488
+ return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1489
+ },
1490
+ findSubjectByExternalId: async (externalId)=>{
1491
+ const subject = await adapter.findOne({
1492
+ model: 'subject',
1493
+ where: [
1494
+ {
1495
+ field: 'externalId',
1496
+ value: externalId
1497
+ }
1498
+ ]
1499
+ });
1500
+ return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1513
1501
  }
1514
1502
  };
1515
1503
  }