@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
@@ -106,32 +106,20 @@ function getDatabaseType() {
106
106
  }
107
107
  const external_zod_namespaceObject = require("zod");
108
108
  const fieldConfigSchema = external_zod_namespaceObject.z.object({
109
- required: external_zod_namespaceObject.z.boolean().default(true),
110
- returned: external_zod_namespaceObject.z.boolean().default(true),
111
- input: external_zod_namespaceObject.z.boolean().default(true),
112
- defaultValue: external_zod_namespaceObject.z.union([
113
- external_zod_namespaceObject.z.any(),
114
- external_zod_namespaceObject.z["function"]().returns(external_zod_namespaceObject.z.any())
115
- ]).optional(),
109
+ required: external_zod_namespaceObject.z.boolean().prefault(true),
110
+ returned: external_zod_namespaceObject.z.boolean().prefault(true),
111
+ input: external_zod_namespaceObject.z.boolean().prefault(true),
112
+ defaultValue: external_zod_namespaceObject.z.any().optional(),
116
113
  transform: external_zod_namespaceObject.z.object({
117
- input: external_zod_namespaceObject.z["function"]().args(external_zod_namespaceObject.z.any()).returns(external_zod_namespaceObject.z.union([
118
- external_zod_namespaceObject.z.any(),
119
- external_zod_namespaceObject.z.promise(external_zod_namespaceObject.z.any())
120
- ])).optional(),
121
- output: external_zod_namespaceObject.z["function"]().args(external_zod_namespaceObject.z.any()).returns(external_zod_namespaceObject.z.union([
122
- external_zod_namespaceObject.z.any(),
123
- external_zod_namespaceObject.z.promise(external_zod_namespaceObject.z.any())
124
- ])).optional()
114
+ input: external_zod_namespaceObject.z.any().optional(),
115
+ output: external_zod_namespaceObject.z.any().optional()
125
116
  }).optional(),
126
- validator: external_zod_namespaceObject.z["function"]().args(external_zod_namespaceObject.z.any()).returns(external_zod_namespaceObject.z.union([
127
- external_zod_namespaceObject.z.string(),
128
- external_zod_namespaceObject.z["null"]()
129
- ])).optional(),
117
+ validator: external_zod_namespaceObject.z.any().optional(),
130
118
  unique: external_zod_namespaceObject.z.boolean().optional(),
131
119
  indexed: external_zod_namespaceObject.z.boolean().optional(),
132
- sortable: external_zod_namespaceObject.z.boolean().default(true),
120
+ sortable: external_zod_namespaceObject.z.boolean().prefault(true),
133
121
  fieldName: external_zod_namespaceObject.z.string().optional(),
134
- bigint: external_zod_namespaceObject.z.boolean().default(false)
122
+ bigint: external_zod_namespaceObject.z.boolean().prefault(false)
135
123
  });
136
124
  const stringFieldSchema = fieldConfigSchema.extend({
137
125
  type: external_zod_namespaceObject.z.literal('string'),
@@ -151,18 +139,18 @@ const dateFieldSchema = fieldConfigSchema.extend({
151
139
  type: external_zod_namespaceObject.z.literal('date'),
152
140
  minDate: external_zod_namespaceObject.z.date().optional(),
153
141
  maxDate: external_zod_namespaceObject.z.date().optional(),
154
- dateOnly: external_zod_namespaceObject.z.boolean().default(false),
155
- format: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional()
142
+ dateOnly: external_zod_namespaceObject.z.boolean().prefault(false),
143
+ format: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional()
156
144
  });
157
145
  const timezoneFieldSchema = fieldConfigSchema.extend({
158
146
  type: external_zod_namespaceObject.z.literal('timezone'),
159
- validateTimezone: external_zod_namespaceObject.z.boolean().default(true),
147
+ validateTimezone: external_zod_namespaceObject.z.boolean().prefault(true),
160
148
  suggestedValues: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional(),
161
- restrictToSuggestedValues: external_zod_namespaceObject.z.boolean().default(false)
149
+ restrictToSuggestedValues: external_zod_namespaceObject.z.boolean().prefault(false)
162
150
  });
163
151
  const jsonFieldSchema = fieldConfigSchema.extend({
164
152
  type: external_zod_namespaceObject.z.literal('json'),
165
- validateJson: external_zod_namespaceObject.z.boolean().default(true)
153
+ validateJson: external_zod_namespaceObject.z.boolean().prefault(true)
166
154
  });
167
155
  const stringArrayFieldSchema = fieldConfigSchema.extend({
168
156
  type: external_zod_namespaceObject.z.literal('string[]')
@@ -486,7 +474,27 @@ class error_class_DoubleTieError extends server_namespaceObject.ORPCError {
486
474
  return formattedMessage;
487
475
  }
488
476
  }
489
- const logger_namespaceObject = require("@doubletie/logger");
477
+ function auditLogRegistry({ adapter, ...ctx }) {
478
+ const { createWithHooks } = getWithHooks(adapter, ctx);
479
+ return {
480
+ createAuditLog: async (auditLog, context)=>{
481
+ const createdLog = await createWithHooks({
482
+ data: {
483
+ createdAt: new Date(),
484
+ ...auditLog
485
+ },
486
+ model: 'auditLog',
487
+ customFn: void 0,
488
+ context
489
+ });
490
+ if (!createdLog) throw new error_class_DoubleTieError('Failed to create audit log - operation returned null', {
491
+ code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
492
+ status: 500
493
+ });
494
+ return createdLog;
495
+ }
496
+ };
497
+ }
490
498
  const auditLogSchema = external_zod_namespaceObject.z.object({
491
499
  id: external_zod_namespaceObject.z.string(),
492
500
  entityType: external_zod_namespaceObject.z.string(),
@@ -495,9 +503,9 @@ const auditLogSchema = external_zod_namespaceObject.z.object({
495
503
  subjectId: external_zod_namespaceObject.z.string().optional(),
496
504
  ipAddress: external_zod_namespaceObject.z.string().optional(),
497
505
  userAgent: external_zod_namespaceObject.z.string().optional(),
498
- changes: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
499
- metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
500
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date())
506
+ changes: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional(),
507
+ metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional(),
508
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
501
509
  });
502
510
  function getAuditLogTable(options, auditLogFields) {
503
511
  const auditLogConfig = options.tables?.auditLog;
@@ -596,6 +604,129 @@ function getAuditLogTable(options, auditLogFields) {
596
604
  order: 5
597
605
  };
598
606
  }
607
+ const logger_namespaceObject = require("@doubletie/logger");
608
+ const consentSchema = external_zod_namespaceObject.z.object({
609
+ id: external_zod_namespaceObject.z.string(),
610
+ subjectId: external_zod_namespaceObject.z.string(),
611
+ domainId: external_zod_namespaceObject.z.string(),
612
+ purposeIds: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()),
613
+ metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).nullable().optional(),
614
+ policyId: external_zod_namespaceObject.z.string().optional(),
615
+ ipAddress: external_zod_namespaceObject.z.string().nullable().optional(),
616
+ userAgent: external_zod_namespaceObject.z.string().nullable().optional(),
617
+ status: external_zod_namespaceObject.z["enum"]([
618
+ 'active',
619
+ 'withdrawn',
620
+ 'expired'
621
+ ]).prefault('active'),
622
+ withdrawalReason: external_zod_namespaceObject.z.string().nullable().optional(),
623
+ givenAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
624
+ validUntil: external_zod_namespaceObject.z.date().nullable().optional(),
625
+ isActive: external_zod_namespaceObject.z.boolean().prefault(true)
626
+ });
627
+ function getConsentTable(options, consentFields) {
628
+ const consentConfig = options.tables?.consent;
629
+ const subjectConfig = options.tables?.subject;
630
+ const domainConfig = options.tables?.domain;
631
+ const policyConfig = options.tables?.consentPolicy;
632
+ return {
633
+ entityName: consentConfig?.entityName || 'consent',
634
+ entityPrefix: consentConfig?.entityPrefix || 'cns',
635
+ schema: consentSchema,
636
+ fields: {
637
+ subjectId: {
638
+ type: 'string',
639
+ required: true,
640
+ fieldName: consentConfig?.fields?.subjectId || 'subjectId',
641
+ references: {
642
+ model: subjectConfig?.entityName || 'subject',
643
+ field: 'id'
644
+ }
645
+ },
646
+ domainId: {
647
+ type: 'string',
648
+ required: true,
649
+ fieldName: consentConfig?.fields?.domainId || 'domainId',
650
+ references: {
651
+ model: domainConfig?.entityName || 'domain',
652
+ field: 'id'
653
+ }
654
+ },
655
+ purposeIds: {
656
+ type: 'json',
657
+ required: false,
658
+ fieldName: consentConfig?.fields?.purposeIds || 'purposeIds'
659
+ },
660
+ metadata: {
661
+ type: 'json',
662
+ required: false,
663
+ fieldName: consentConfig?.fields?.metadata || 'metadata'
664
+ },
665
+ policyId: {
666
+ type: 'string',
667
+ required: false,
668
+ fieldName: consentConfig?.fields?.policyId || 'policyId',
669
+ references: {
670
+ model: policyConfig?.entityName || 'consentPolicy',
671
+ field: 'id'
672
+ }
673
+ },
674
+ ipAddress: {
675
+ type: 'string',
676
+ required: false,
677
+ fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
678
+ },
679
+ userAgent: {
680
+ type: 'string',
681
+ required: false,
682
+ fieldName: consentConfig?.fields?.userAgent || 'userAgent'
683
+ },
684
+ status: {
685
+ type: 'string',
686
+ defaultValue: ()=>'active',
687
+ required: true,
688
+ fieldName: consentConfig?.fields?.status || 'status'
689
+ },
690
+ withdrawalReason: {
691
+ type: 'string',
692
+ required: false,
693
+ fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
694
+ },
695
+ givenAt: {
696
+ type: 'date',
697
+ defaultValue: ()=>new Date(),
698
+ required: true,
699
+ fieldName: consentConfig?.fields?.givenAt || 'givenAt'
700
+ },
701
+ validUntil: {
702
+ type: 'date',
703
+ required: false,
704
+ fieldName: consentConfig?.fields?.validUntil || 'validUntil',
705
+ transform: {
706
+ input: (val, data)=>{
707
+ if (val) return val;
708
+ const expiresIn = consentConfig?.expiresIn || 31536000;
709
+ const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
710
+ if (expiresIn > 0) {
711
+ const validUntil = new Date(givenAt);
712
+ validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
713
+ return validUntil;
714
+ }
715
+ }
716
+ }
717
+ },
718
+ isActive: {
719
+ type: 'boolean',
720
+ defaultValue: true,
721
+ required: true,
722
+ fieldName: consentConfig?.fields?.isActive || 'isActive'
723
+ },
724
+ ...consentFields || {},
725
+ ...consentConfig?.additionalFields || {}
726
+ },
727
+ order: 3
728
+ };
729
+ }
599
730
  const PolicyTypeSchema = external_zod_namespaceObject.z["enum"]([
600
731
  'cookie_banner',
601
732
  'privacy_policy',
@@ -614,9 +745,9 @@ const consentPolicySchema = external_zod_namespaceObject.z.object({
614
745
  expirationDate: external_zod_namespaceObject.z.date().nullable().optional(),
615
746
  content: external_zod_namespaceObject.z.string(),
616
747
  contentHash: external_zod_namespaceObject.z.string(),
617
- isActive: external_zod_namespaceObject.z.boolean().default(true),
618
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
619
- updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
748
+ isActive: external_zod_namespaceObject.z.boolean().prefault(true),
749
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
750
+ updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
620
751
  });
621
752
  function getConsentPolicyTable(options, policyFields) {
622
753
  const consentPolicyConfig = options.tables?.consentPolicy;
@@ -683,12 +814,12 @@ const purposeSchema = external_zod_namespaceObject.z.object({
683
814
  code: external_zod_namespaceObject.z.string(),
684
815
  name: external_zod_namespaceObject.z.string(),
685
816
  description: external_zod_namespaceObject.z.string(),
686
- isEssential: external_zod_namespaceObject.z.boolean().default(false),
817
+ isEssential: external_zod_namespaceObject.z.boolean().prefault(false),
687
818
  dataCategory: external_zod_namespaceObject.z.string().nullish(),
688
819
  legalBasis: external_zod_namespaceObject.z.string().nullish(),
689
- isActive: external_zod_namespaceObject.z.boolean().default(true),
690
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
691
- updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
820
+ isActive: external_zod_namespaceObject.z.boolean().prefault(true),
821
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
822
+ updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
692
823
  });
693
824
  function getPurposeTable(options, purposeFields) {
694
825
  const purposeConfig = options.tables?.consentPurpose;
@@ -757,9 +888,9 @@ const consentRecordSchema = external_zod_namespaceObject.z.object({
757
888
  subjectId: external_zod_namespaceObject.z.string(),
758
889
  consentId: external_zod_namespaceObject.z.string().optional(),
759
890
  actionType: external_zod_namespaceObject.z.string(),
760
- details: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
761
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
762
- updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
891
+ details: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional(),
892
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
893
+ updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
763
894
  });
764
895
  function getConsentRecordTable(options, recordFields) {
765
896
  const recordConfig = options.tables?.record;
@@ -810,184 +941,62 @@ function getConsentRecordTable(options, recordFields) {
810
941
  order: 4
811
942
  };
812
943
  }
813
- const consentSchema = external_zod_namespaceObject.z.object({
944
+ const domainSchema = external_zod_namespaceObject.z.object({
814
945
  id: external_zod_namespaceObject.z.string(),
815
- subjectId: external_zod_namespaceObject.z.string(),
816
- domainId: external_zod_namespaceObject.z.string(),
817
- purposeIds: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()),
818
- metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).nullable().optional(),
819
- policyId: external_zod_namespaceObject.z.string().optional(),
820
- ipAddress: external_zod_namespaceObject.z.string().nullable().optional(),
821
- userAgent: external_zod_namespaceObject.z.string().nullable().optional(),
822
- status: external_zod_namespaceObject.z["enum"]([
823
- 'active',
824
- 'withdrawn',
825
- 'expired'
826
- ]).default('active'),
827
- withdrawalReason: external_zod_namespaceObject.z.string().nullable().optional(),
828
- givenAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
829
- validUntil: external_zod_namespaceObject.z.date().nullable().optional(),
830
- isActive: external_zod_namespaceObject.z.boolean().default(true)
946
+ name: external_zod_namespaceObject.z.string().min(1),
947
+ description: external_zod_namespaceObject.z.string().optional(),
948
+ allowedOrigins: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional().prefault([]),
949
+ isVerified: external_zod_namespaceObject.z.boolean().prefault(true),
950
+ isActive: external_zod_namespaceObject.z.boolean().prefault(true),
951
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
952
+ updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
831
953
  });
832
- function getConsentTable(options, consentFields) {
833
- const consentConfig = options.tables?.consent;
834
- const subjectConfig = options.tables?.subject;
954
+ function getDomainTable(options, domainFields) {
835
955
  const domainConfig = options.tables?.domain;
836
- const policyConfig = options.tables?.consentPolicy;
837
956
  return {
838
- entityName: consentConfig?.entityName || 'consent',
839
- entityPrefix: consentConfig?.entityPrefix || 'cns',
840
- schema: consentSchema,
957
+ entityName: domainConfig?.entityName || 'domain',
958
+ entityPrefix: domainConfig?.entityPrefix || 'dom',
959
+ schema: domainSchema,
841
960
  fields: {
842
- subjectId: {
961
+ name: {
843
962
  type: 'string',
844
963
  required: true,
845
- fieldName: consentConfig?.fields?.subjectId || 'subjectId',
846
- references: {
847
- model: subjectConfig?.entityName || 'subject',
848
- field: 'id'
849
- }
964
+ unique: true,
965
+ fieldName: domainConfig?.fields?.name || 'name'
850
966
  },
851
- domainId: {
967
+ description: {
852
968
  type: 'string',
853
- required: true,
854
- fieldName: consentConfig?.fields?.domainId || 'domainId',
855
- references: {
856
- model: domainConfig?.entityName || 'domain',
857
- field: 'id'
858
- }
859
- },
860
- purposeIds: {
861
- type: 'json',
862
969
  required: false,
863
- fieldName: consentConfig?.fields?.purposeIds || 'purposeIds'
970
+ fieldName: domainConfig?.fields?.description || "description"
864
971
  },
865
- metadata: {
972
+ allowedOrigins: {
866
973
  type: 'json',
974
+ defaultValue: ()=>[],
867
975
  required: false,
868
- fieldName: consentConfig?.fields?.metadata || 'metadata'
869
- },
870
- policyId: {
871
- type: 'string',
872
- required: false,
873
- fieldName: consentConfig?.fields?.policyId || 'policyId',
874
- references: {
875
- model: policyConfig?.entityName || 'consentPolicy',
876
- field: 'id'
877
- }
878
- },
879
- ipAddress: {
880
- type: 'string',
881
- required: false,
882
- fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
883
- },
884
- userAgent: {
885
- type: 'string',
886
- required: false,
887
- fieldName: consentConfig?.fields?.userAgent || 'userAgent'
976
+ fieldName: domainConfig?.fields?.allowedOrigins || 'allowedOrigins'
888
977
  },
889
- status: {
890
- type: 'string',
891
- defaultValue: ()=>'active',
978
+ isVerified: {
979
+ type: 'boolean',
980
+ defaultValue: true,
892
981
  required: true,
893
- fieldName: consentConfig?.fields?.status || 'status'
982
+ fieldName: domainConfig?.fields?.isVerified || 'isVerified'
894
983
  },
895
- withdrawalReason: {
896
- type: 'string',
897
- required: false,
898
- fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
984
+ isActive: {
985
+ type: 'boolean',
986
+ defaultValue: true,
987
+ required: true,
988
+ fieldName: domainConfig?.fields?.isActive || 'isActive'
899
989
  },
900
- givenAt: {
990
+ createdAt: {
901
991
  type: 'date',
902
992
  defaultValue: ()=>new Date(),
903
993
  required: true,
904
- fieldName: consentConfig?.fields?.givenAt || 'givenAt'
994
+ fieldName: domainConfig?.fields?.createdAt || 'createdAt'
905
995
  },
906
- validUntil: {
996
+ updatedAt: {
907
997
  type: 'date',
908
998
  required: false,
909
- fieldName: consentConfig?.fields?.validUntil || 'validUntil',
910
- transform: {
911
- input: (val, data)=>{
912
- if (val) return val;
913
- const expiresIn = consentConfig?.expiresIn || 31536000;
914
- const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
915
- if (expiresIn > 0) {
916
- const validUntil = new Date(givenAt);
917
- validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
918
- return validUntil;
919
- }
920
- }
921
- }
922
- },
923
- isActive: {
924
- type: 'boolean',
925
- defaultValue: true,
926
- required: true,
927
- fieldName: consentConfig?.fields?.isActive || 'isActive'
928
- },
929
- ...consentFields || {},
930
- ...consentConfig?.additionalFields || {}
931
- },
932
- order: 3
933
- };
934
- }
935
- const domainSchema = external_zod_namespaceObject.z.object({
936
- id: external_zod_namespaceObject.z.string(),
937
- name: external_zod_namespaceObject.z.string().min(1),
938
- description: external_zod_namespaceObject.z.string().optional(),
939
- allowedOrigins: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional().default([]),
940
- isVerified: external_zod_namespaceObject.z.boolean().default(true),
941
- isActive: external_zod_namespaceObject.z.boolean().default(true),
942
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
943
- updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
944
- });
945
- function getDomainTable(options, domainFields) {
946
- const domainConfig = options.tables?.domain;
947
- return {
948
- entityName: domainConfig?.entityName || 'domain',
949
- entityPrefix: domainConfig?.entityPrefix || 'dom',
950
- schema: domainSchema,
951
- fields: {
952
- name: {
953
- type: 'string',
954
- required: true,
955
- unique: true,
956
- fieldName: domainConfig?.fields?.name || 'name'
957
- },
958
- description: {
959
- type: 'string',
960
- required: false,
961
- fieldName: domainConfig?.fields?.description || "description"
962
- },
963
- allowedOrigins: {
964
- type: 'json',
965
- defaultValue: ()=>[],
966
- required: false,
967
- fieldName: domainConfig?.fields?.allowedOrigins || 'allowedOrigins'
968
- },
969
- isVerified: {
970
- type: 'boolean',
971
- defaultValue: true,
972
- required: true,
973
- fieldName: domainConfig?.fields?.isVerified || 'isVerified'
974
- },
975
- isActive: {
976
- type: 'boolean',
977
- defaultValue: true,
978
- required: true,
979
- fieldName: domainConfig?.fields?.isActive || 'isActive'
980
- },
981
- createdAt: {
982
- type: 'date',
983
- defaultValue: ()=>new Date(),
984
- required: true,
985
- fieldName: domainConfig?.fields?.createdAt || 'createdAt'
986
- },
987
- updatedAt: {
988
- type: 'date',
989
- required: false,
990
- fieldName: domainConfig?.fields?.updatedAt || 'updatedAt'
999
+ fieldName: domainConfig?.fields?.updatedAt || 'updatedAt'
991
1000
  },
992
1001
  ...domainFields || {},
993
1002
  ...domainConfig?.additionalFields || {}
@@ -997,12 +1006,12 @@ function getDomainTable(options, domainFields) {
997
1006
  }
998
1007
  const subjectSchema = external_zod_namespaceObject.z.object({
999
1008
  id: external_zod_namespaceObject.z.string(),
1000
- isIdentified: external_zod_namespaceObject.z.boolean().default(false),
1009
+ isIdentified: external_zod_namespaceObject.z.boolean().prefault(false),
1001
1010
  externalId: external_zod_namespaceObject.z.string().nullable().optional(),
1002
1011
  identityProvider: external_zod_namespaceObject.z.string().optional(),
1003
1012
  lastIpAddress: external_zod_namespaceObject.z.string().optional(),
1004
- createdAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
1005
- updatedAt: external_zod_namespaceObject.z.date().default(()=>new Date())
1013
+ createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
1014
+ updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
1006
1015
  });
1007
1016
  function getSubjectTable(options, subjectFields) {
1008
1017
  const subjectConfig = options.tables?.subject;
@@ -1099,157 +1108,6 @@ function validateEntityOutput(tableName, data, options) {
1099
1108
  throw error;
1100
1109
  }
1101
1110
  }
1102
- function subjectRegistry({ adapter, ...ctx }) {
1103
- const { createWithHooks } = getWithHooks(adapter, ctx);
1104
- return {
1105
- createSubject: async (subject, context)=>{
1106
- const createdSubject = await createWithHooks({
1107
- data: {
1108
- createdAt: new Date(),
1109
- updatedAt: new Date(),
1110
- ...subject
1111
- },
1112
- model: 'subject',
1113
- customFn: void 0,
1114
- context
1115
- });
1116
- return createdSubject ? validateEntityOutput('subject', createdSubject, ctx.options) : null;
1117
- },
1118
- findOrCreateSubject: async function({ subjectId, externalSubjectId, ipAddress = 'unknown', context }) {
1119
- if (subjectId && externalSubjectId) {
1120
- const [subjectById, subjectByExternalId] = await Promise.all([
1121
- this.findSubjectById(subjectId),
1122
- this.findSubjectByExternalId(externalSubjectId)
1123
- ]);
1124
- if (!subjectById || !subjectByExternalId) {
1125
- ctx.logger?.error('Subject validation failed: One or both subjects not found', {
1126
- providedSubjectId: subjectId,
1127
- providedExternalId: externalSubjectId,
1128
- subjectByIdFound: !!subjectById,
1129
- subjectByExternalIdFound: !!subjectByExternalId
1130
- });
1131
- throw new error_class_DoubleTieError('The specified subject could not be found. Please verify the subject identifiers and try again.', {
1132
- code: error_codes_ERROR_CODES.NOT_FOUND,
1133
- status: 404,
1134
- meta: {
1135
- providedSubjectId: subjectId,
1136
- providedExternalId: externalSubjectId
1137
- }
1138
- });
1139
- }
1140
- if (subjectById.id !== subjectByExternalId.id) {
1141
- ctx.logger?.warn('Subject validation failed: IDs do not match the same subject', {
1142
- providedSubjectId: subjectId,
1143
- providedExternalId: externalSubjectId,
1144
- subjectByIdId: subjectById.id,
1145
- subjectByExternalIdId: subjectByExternalId.id
1146
- });
1147
- 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.', {
1148
- code: error_codes_ERROR_CODES.CONFLICT,
1149
- status: 409,
1150
- meta: {
1151
- providedSubjectId: subjectId,
1152
- providedExternalId: externalSubjectId,
1153
- subjectByIdId: subjectById.id,
1154
- subjectByExternalIdId: subjectByExternalId.id
1155
- }
1156
- });
1157
- }
1158
- return subjectById;
1159
- }
1160
- if (subjectId) {
1161
- const subject = await this.findSubjectById(subjectId);
1162
- if (subject) return subject;
1163
- throw new error_class_DoubleTieError('Subject not found by subjectId', {
1164
- code: error_codes_ERROR_CODES.NOT_FOUND,
1165
- status: 404
1166
- });
1167
- }
1168
- if (externalSubjectId) try {
1169
- const subject = await this.findSubjectByExternalId(externalSubjectId);
1170
- if (subject) {
1171
- ctx.logger?.debug('Found existing subject by external ID', {
1172
- externalSubjectId
1173
- });
1174
- return subject;
1175
- }
1176
- ctx.logger?.info('Creating new subject with external ID', {
1177
- externalSubjectId
1178
- });
1179
- return await this.createSubject({
1180
- externalId: externalSubjectId,
1181
- identityProvider: 'external',
1182
- lastIpAddress: ipAddress,
1183
- isIdentified: true
1184
- }, context);
1185
- } catch (error) {
1186
- if (error instanceof Error && error.message.includes('unique constraint')) {
1187
- ctx.logger?.info('Handling duplicate key violation for external ID', {
1188
- externalSubjectId
1189
- });
1190
- const subject = await this.findSubjectByExternalId(externalSubjectId);
1191
- if (subject) return subject;
1192
- }
1193
- ctx.logger?.error('Failed to create or find subject with external ID', {
1194
- externalSubjectId,
1195
- error: error instanceof Error ? error.message : 'Unknown error'
1196
- });
1197
- throw new error_class_DoubleTieError('Failed to create or find subject with external ID', {
1198
- code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1199
- status: 500,
1200
- meta: {
1201
- error: error instanceof Error ? error.message : 'Unknown error'
1202
- }
1203
- });
1204
- }
1205
- try {
1206
- ctx.logger?.info('Creating new anonymous subject');
1207
- return await this.createSubject({
1208
- externalId: null,
1209
- identityProvider: 'anonymous',
1210
- lastIpAddress: ipAddress,
1211
- isIdentified: false
1212
- }, context);
1213
- } catch (error) {
1214
- ctx.logger?.error('Failed to create anonymous subject', {
1215
- ipAddress,
1216
- error: error instanceof Error ? error.message : 'Unknown error'
1217
- });
1218
- throw new error_class_DoubleTieError('Failed to create anonymous subject', {
1219
- code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1220
- status: 500,
1221
- meta: {
1222
- error: error instanceof Error ? error.message : 'Unknown error'
1223
- }
1224
- });
1225
- }
1226
- },
1227
- findSubjectById: async (subjectId)=>{
1228
- const subject = await adapter.findOne({
1229
- model: 'subject',
1230
- where: [
1231
- {
1232
- field: 'id',
1233
- value: subjectId
1234
- }
1235
- ]
1236
- });
1237
- return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1238
- },
1239
- findSubjectByExternalId: async (externalId)=>{
1240
- const subject = await adapter.findOne({
1241
- model: 'subject',
1242
- where: [
1243
- {
1244
- field: 'externalId',
1245
- value: externalId
1246
- }
1247
- ]
1248
- });
1249
- return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1250
- }
1251
- };
1252
- }
1253
1111
  function consentRegistry({ adapter, ...ctx }) {
1254
1112
  const { createWithHooks, updateWithHooks } = getWithHooks(adapter, ctx);
1255
1113
  const registry = {
@@ -1525,24 +1383,154 @@ function domainRegistry({ adapter, ...ctx }) {
1525
1383
  };
1526
1384
  return registry;
1527
1385
  }
1528
- function auditLogRegistry({ adapter, ...ctx }) {
1386
+ function subjectRegistry({ adapter, ...ctx }) {
1529
1387
  const { createWithHooks } = getWithHooks(adapter, ctx);
1530
1388
  return {
1531
- createAuditLog: async (auditLog, context)=>{
1532
- const createdLog = await createWithHooks({
1389
+ createSubject: async (subject, context)=>{
1390
+ const createdSubject = await createWithHooks({
1533
1391
  data: {
1534
1392
  createdAt: new Date(),
1535
- ...auditLog
1393
+ updatedAt: new Date(),
1394
+ ...subject
1536
1395
  },
1537
- model: 'auditLog',
1396
+ model: 'subject',
1538
1397
  customFn: void 0,
1539
1398
  context
1540
1399
  });
1541
- if (!createdLog) throw new error_class_DoubleTieError('Failed to create audit log - operation returned null', {
1542
- code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1543
- status: 500
1400
+ return createdSubject ? validateEntityOutput('subject', createdSubject, ctx.options) : null;
1401
+ },
1402
+ findOrCreateSubject: async function({ subjectId, externalSubjectId, ipAddress = 'unknown', context }) {
1403
+ if (subjectId && externalSubjectId) {
1404
+ const [subjectById, subjectByExternalId] = await Promise.all([
1405
+ this.findSubjectById(subjectId),
1406
+ this.findSubjectByExternalId(externalSubjectId)
1407
+ ]);
1408
+ if (!subjectById || !subjectByExternalId) {
1409
+ ctx.logger?.error('Subject validation failed: One or both subjects not found', {
1410
+ providedSubjectId: subjectId,
1411
+ providedExternalId: externalSubjectId,
1412
+ subjectByIdFound: !!subjectById,
1413
+ subjectByExternalIdFound: !!subjectByExternalId
1414
+ });
1415
+ throw new error_class_DoubleTieError('The specified subject could not be found. Please verify the subject identifiers and try again.', {
1416
+ code: error_codes_ERROR_CODES.NOT_FOUND,
1417
+ status: 404,
1418
+ meta: {
1419
+ providedSubjectId: subjectId,
1420
+ providedExternalId: externalSubjectId
1421
+ }
1422
+ });
1423
+ }
1424
+ if (subjectById.id !== subjectByExternalId.id) {
1425
+ ctx.logger?.warn('Subject validation failed: IDs do not match the same subject', {
1426
+ providedSubjectId: subjectId,
1427
+ providedExternalId: externalSubjectId,
1428
+ subjectByIdId: subjectById.id,
1429
+ subjectByExternalIdId: subjectByExternalId.id
1430
+ });
1431
+ 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.', {
1432
+ code: error_codes_ERROR_CODES.CONFLICT,
1433
+ status: 409,
1434
+ meta: {
1435
+ providedSubjectId: subjectId,
1436
+ providedExternalId: externalSubjectId,
1437
+ subjectByIdId: subjectById.id,
1438
+ subjectByExternalIdId: subjectByExternalId.id
1439
+ }
1440
+ });
1441
+ }
1442
+ return subjectById;
1443
+ }
1444
+ if (subjectId) {
1445
+ const subject = await this.findSubjectById(subjectId);
1446
+ if (subject) return subject;
1447
+ throw new error_class_DoubleTieError('Subject not found by subjectId', {
1448
+ code: error_codes_ERROR_CODES.NOT_FOUND,
1449
+ status: 404
1450
+ });
1451
+ }
1452
+ if (externalSubjectId) try {
1453
+ const subject = await this.findSubjectByExternalId(externalSubjectId);
1454
+ if (subject) {
1455
+ ctx.logger?.debug('Found existing subject by external ID', {
1456
+ externalSubjectId
1457
+ });
1458
+ return subject;
1459
+ }
1460
+ ctx.logger?.info('Creating new subject with external ID', {
1461
+ externalSubjectId
1462
+ });
1463
+ return await this.createSubject({
1464
+ externalId: externalSubjectId,
1465
+ identityProvider: 'external',
1466
+ lastIpAddress: ipAddress,
1467
+ isIdentified: true
1468
+ }, context);
1469
+ } catch (error) {
1470
+ if (error instanceof Error && error.message.includes('unique constraint')) {
1471
+ ctx.logger?.info('Handling duplicate key violation for external ID', {
1472
+ externalSubjectId
1473
+ });
1474
+ const subject = await this.findSubjectByExternalId(externalSubjectId);
1475
+ if (subject) return subject;
1476
+ }
1477
+ ctx.logger?.error('Failed to create or find subject with external ID', {
1478
+ externalSubjectId,
1479
+ error: error instanceof Error ? error.message : 'Unknown error'
1480
+ });
1481
+ throw new error_class_DoubleTieError('Failed to create or find subject with external ID', {
1482
+ code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1483
+ status: 500,
1484
+ meta: {
1485
+ error: error instanceof Error ? error.message : 'Unknown error'
1486
+ }
1487
+ });
1488
+ }
1489
+ try {
1490
+ ctx.logger?.info('Creating new anonymous subject');
1491
+ return await this.createSubject({
1492
+ externalId: null,
1493
+ identityProvider: 'anonymous',
1494
+ lastIpAddress: ipAddress,
1495
+ isIdentified: false
1496
+ }, context);
1497
+ } catch (error) {
1498
+ ctx.logger?.error('Failed to create anonymous subject', {
1499
+ ipAddress,
1500
+ error: error instanceof Error ? error.message : 'Unknown error'
1501
+ });
1502
+ throw new error_class_DoubleTieError('Failed to create anonymous subject', {
1503
+ code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
1504
+ status: 500,
1505
+ meta: {
1506
+ error: error instanceof Error ? error.message : 'Unknown error'
1507
+ }
1508
+ });
1509
+ }
1510
+ },
1511
+ findSubjectById: async (subjectId)=>{
1512
+ const subject = await adapter.findOne({
1513
+ model: 'subject',
1514
+ where: [
1515
+ {
1516
+ field: 'id',
1517
+ value: subjectId
1518
+ }
1519
+ ]
1544
1520
  });
1545
- return createdLog;
1521
+ return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1522
+ },
1523
+ findSubjectByExternalId: async (externalId)=>{
1524
+ const subject = await adapter.findOne({
1525
+ model: 'subject',
1526
+ where: [
1527
+ {
1528
+ field: 'externalId',
1529
+ value: externalId
1530
+ }
1531
+ ]
1532
+ });
1533
+ return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
1546
1534
  }
1547
1535
  };
1548
1536
  }