@c15t/backend 1.0.0 → 1.1.0-canary.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 (478) hide show
  1. package/.turbo/turbo-build.log +33 -39
  2. package/.turbo/turbo-fmt.log +7 -0
  3. package/.turbo/turbo-test.log +531 -0
  4. package/README.md +19 -7
  5. package/coverage/coverage-final.json +84 -0
  6. package/coverage/coverage-summary.json +85 -0
  7. package/coverage/html/backend/index.html +116 -0
  8. package/coverage/html/backend/rslib.config.ts.html +415 -0
  9. package/coverage/html/backend/src/contracts/consent/index.html +161 -0
  10. package/coverage/html/backend/src/contracts/consent/index.ts.html +112 -0
  11. package/coverage/html/backend/src/contracts/consent/post.contract.ts.html +559 -0
  12. package/coverage/html/backend/src/contracts/consent/show-banner.contract.ts.html +220 -0
  13. package/coverage/html/backend/src/contracts/consent/verify.contract.ts.html +463 -0
  14. package/coverage/html/backend/src/contracts/index.html +116 -0
  15. package/coverage/html/backend/src/contracts/index.ts.html +139 -0
  16. package/coverage/html/backend/src/contracts/meta/index.html +131 -0
  17. package/coverage/html/backend/src/contracts/meta/index.ts.html +100 -0
  18. package/coverage/html/backend/src/contracts/meta/status.contract.ts.html +196 -0
  19. package/coverage/html/backend/src/contracts/shared/index.html +116 -0
  20. package/coverage/html/backend/src/contracts/shared/jurisdiction.schema.ts.html +175 -0
  21. package/coverage/html/backend/src/core.ts.html +1624 -0
  22. package/coverage/html/backend/src/handlers/consent/index.html +161 -0
  23. package/coverage/html/backend/src/handlers/consent/index.ts.html +112 -0
  24. package/coverage/html/backend/src/handlers/consent/post.handler.ts.html +889 -0
  25. package/coverage/html/backend/src/handlers/consent/show-banner.handler.ts.html +535 -0
  26. package/coverage/html/backend/src/handlers/consent/verify.handler.ts.html +1000 -0
  27. package/coverage/html/backend/src/handlers/meta/index.html +131 -0
  28. package/coverage/html/backend/src/handlers/meta/index.ts.html +100 -0
  29. package/coverage/html/backend/src/handlers/meta/status.handler.ts.html +226 -0
  30. package/coverage/html/backend/src/index.html +161 -0
  31. package/coverage/html/backend/src/init.ts.html +1018 -0
  32. package/coverage/html/backend/src/pkgs/api-router/hooks/index.html +116 -0
  33. package/coverage/html/backend/src/pkgs/api-router/hooks/processor.ts.html +544 -0
  34. package/coverage/html/backend/src/pkgs/api-router/index.html +116 -0
  35. package/coverage/html/backend/src/pkgs/api-router/telemetry.ts.html +334 -0
  36. package/coverage/html/backend/src/pkgs/api-router/utils/cors.ts.html +304 -0
  37. package/coverage/html/backend/src/pkgs/api-router/utils/index.html +131 -0
  38. package/coverage/html/backend/src/pkgs/api-router/utils/ip.ts.html +361 -0
  39. package/coverage/html/backend/src/pkgs/data-model/fields/field-factory.ts.html +709 -0
  40. package/coverage/html/backend/src/pkgs/data-model/fields/id-generator.ts.html +256 -0
  41. package/coverage/html/backend/src/pkgs/data-model/fields/index.html +161 -0
  42. package/coverage/html/backend/src/pkgs/data-model/fields/superjson-utils.ts.html +136 -0
  43. package/coverage/html/backend/src/pkgs/data-model/fields/zod-fields.ts.html +496 -0
  44. package/coverage/html/backend/src/pkgs/data-model/hooks/create-hooks.ts.html +349 -0
  45. package/coverage/html/backend/src/pkgs/data-model/hooks/index.html +176 -0
  46. package/coverage/html/backend/src/pkgs/data-model/hooks/update-hooks.ts.html +358 -0
  47. package/coverage/html/backend/src/pkgs/data-model/hooks/update-many-hooks.ts.html +613 -0
  48. package/coverage/html/backend/src/pkgs/data-model/hooks/utils.ts.html +538 -0
  49. package/coverage/html/backend/src/pkgs/data-model/hooks/with-hooks-factory.ts.html +289 -0
  50. package/coverage/html/backend/src/pkgs/db-adapters/adapter-factory.ts.html +289 -0
  51. package/coverage/html/backend/src/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.ts.html +2203 -0
  52. package/coverage/html/backend/src/pkgs/db-adapters/adapters/drizzle-adapter/index.html +116 -0
  53. package/coverage/html/backend/src/pkgs/db-adapters/adapters/index.html +116 -0
  54. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/dialect.ts.html +670 -0
  55. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/index.html +131 -0
  56. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.ts.html +3634 -0
  57. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/tests/index.html +116 -0
  58. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.ts.html +1417 -0
  59. package/coverage/html/backend/src/pkgs/db-adapters/adapters/memory-adapter/index.html +116 -0
  60. package/coverage/html/backend/src/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.ts.html +2071 -0
  61. package/coverage/html/backend/src/pkgs/db-adapters/adapters/prisma-adapter/index.html +116 -0
  62. package/coverage/html/backend/src/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.ts.html +1834 -0
  63. package/coverage/html/backend/src/pkgs/db-adapters/adapters/test.ts.html +316 -0
  64. package/coverage/html/backend/src/pkgs/db-adapters/index.html +131 -0
  65. package/coverage/html/backend/src/pkgs/db-adapters/utils.ts.html +238 -0
  66. package/coverage/html/backend/src/pkgs/migrations/get-migration.ts.html +343 -0
  67. package/coverage/html/backend/src/pkgs/migrations/get-schema/get-schema.ts.html +217 -0
  68. package/coverage/html/backend/src/pkgs/migrations/get-schema/index.html +146 -0
  69. package/coverage/html/backend/src/pkgs/migrations/get-schema/process-fields.ts.html +280 -0
  70. package/coverage/html/backend/src/pkgs/migrations/get-schema/process-tables.ts.html +289 -0
  71. package/coverage/html/backend/src/pkgs/migrations/index.html +176 -0
  72. package/coverage/html/backend/src/pkgs/migrations/migration-builders.ts.html +595 -0
  73. package/coverage/html/backend/src/pkgs/migrations/migration-execution.ts.html +301 -0
  74. package/coverage/html/backend/src/pkgs/migrations/schema-comparison.ts.html +694 -0
  75. package/coverage/html/backend/src/pkgs/migrations/type-mapping.ts.html +817 -0
  76. package/coverage/html/backend/src/pkgs/results/core/error-class.ts.html +976 -0
  77. package/coverage/html/backend/src/pkgs/results/core/error-codes.ts.html +703 -0
  78. package/coverage/html/backend/src/pkgs/results/core/index.html +146 -0
  79. package/coverage/html/backend/src/pkgs/results/core/tracing.ts.html +280 -0
  80. package/coverage/html/backend/src/pkgs/results/create-telemetry-options.ts.html +271 -0
  81. package/coverage/html/backend/src/pkgs/results/index.html +131 -0
  82. package/coverage/html/backend/src/pkgs/results/orpc-error-handler.ts.html +496 -0
  83. package/coverage/html/backend/src/pkgs/results/results/index.html +131 -0
  84. package/coverage/html/backend/src/pkgs/results/results/recovery-utils.ts.html +628 -0
  85. package/coverage/html/backend/src/pkgs/results/results/result-helpers.ts.html +1234 -0
  86. package/coverage/html/backend/src/pkgs/utils/env.ts.html +337 -0
  87. package/coverage/html/backend/src/pkgs/utils/index.html +146 -0
  88. package/coverage/html/backend/src/pkgs/utils/logger.ts.html +199 -0
  89. package/coverage/html/backend/src/pkgs/utils/url.ts.html +400 -0
  90. package/coverage/html/backend/src/router.ts.html +109 -0
  91. package/coverage/html/backend/src/schema/audit-log/index.html +146 -0
  92. package/coverage/html/backend/src/schema/audit-log/registry.ts.html +436 -0
  93. package/coverage/html/backend/src/schema/audit-log/schema.ts.html +223 -0
  94. package/coverage/html/backend/src/schema/audit-log/table.ts.html +640 -0
  95. package/coverage/html/backend/src/schema/consent/index.html +146 -0
  96. package/coverage/html/backend/src/schema/consent/registry.ts.html +616 -0
  97. package/coverage/html/backend/src/schema/consent/schema.ts.html +238 -0
  98. package/coverage/html/backend/src/schema/consent/table.ts.html +748 -0
  99. package/coverage/html/backend/src/schema/consent-policy/index.html +146 -0
  100. package/coverage/html/backend/src/schema/consent-policy/registry.ts.html +1063 -0
  101. package/coverage/html/backend/src/schema/consent-policy/schema.ts.html +265 -0
  102. package/coverage/html/backend/src/schema/consent-policy/table.ts.html +535 -0
  103. package/coverage/html/backend/src/schema/consent-purpose/index.html +146 -0
  104. package/coverage/html/backend/src/schema/consent-purpose/registry.ts.html +589 -0
  105. package/coverage/html/backend/src/schema/consent-purpose/schema.ts.html +259 -0
  106. package/coverage/html/backend/src/schema/consent-purpose/table.ts.html +547 -0
  107. package/coverage/html/backend/src/schema/consent-record/index.html +131 -0
  108. package/coverage/html/backend/src/schema/consent-record/schema.ts.html +211 -0
  109. package/coverage/html/backend/src/schema/consent-record/table.ts.html +457 -0
  110. package/coverage/html/backend/src/schema/create-registry.ts.html +148 -0
  111. package/coverage/html/backend/src/schema/definition.ts.html +685 -0
  112. package/coverage/html/backend/src/schema/domain/index.html +146 -0
  113. package/coverage/html/backend/src/schema/domain/registry.ts.html +973 -0
  114. package/coverage/html/backend/src/schema/domain/schema.ts.html +214 -0
  115. package/coverage/html/backend/src/schema/domain/table.ts.html +496 -0
  116. package/coverage/html/backend/src/schema/index.html +146 -0
  117. package/coverage/html/backend/src/schema/schemas.ts.html +166 -0
  118. package/coverage/html/backend/src/schema/subject/index.html +146 -0
  119. package/coverage/html/backend/src/schema/subject/registry.ts.html +973 -0
  120. package/coverage/html/backend/src/schema/subject/schema.ts.html +208 -0
  121. package/coverage/html/backend/src/schema/subject/table.ts.html +499 -0
  122. package/coverage/html/backend/src/server.ts.html +475 -0
  123. package/coverage/html/backend/src/testing/contract-testing.ts.html +1348 -0
  124. package/coverage/html/backend/src/testing/index.html +116 -0
  125. package/coverage/html/base.css +224 -0
  126. package/coverage/html/block-navigation.js +87 -0
  127. package/coverage/html/favicon.png +0 -0
  128. package/coverage/html/index.html +626 -0
  129. package/coverage/html/prettify.css +1 -0
  130. package/coverage/html/prettify.js +2 -0
  131. package/coverage/html/sort-arrow-sprite.png +0 -0
  132. package/coverage/html/sorter.js +196 -0
  133. package/dist/contracts/consent/index.d.ts +401 -0
  134. package/dist/contracts/consent/index.d.ts.map +1 -0
  135. package/dist/contracts/consent/index.test.d.ts +2 -0
  136. package/dist/contracts/consent/index.test.d.ts.map +1 -0
  137. package/dist/contracts/consent/post.contract.d.ts +212 -0
  138. package/dist/contracts/consent/post.contract.d.ts.map +1 -0
  139. package/dist/contracts/consent/post.contract.test.d.ts +2 -0
  140. package/dist/contracts/consent/post.contract.test.d.ts.map +1 -0
  141. package/dist/contracts/consent/show-banner.contract.d.ts +45 -0
  142. package/dist/contracts/consent/show-banner.contract.d.ts.map +1 -0
  143. package/dist/contracts/consent/show-banner.contract.test.d.ts +2 -0
  144. package/dist/contracts/consent/show-banner.contract.test.d.ts.map +1 -0
  145. package/dist/contracts/consent/verify.contract.d.ts +147 -0
  146. package/dist/contracts/consent/verify.contract.d.ts.map +1 -0
  147. package/dist/contracts/consent/verify.contract.test.d.ts +2 -0
  148. package/dist/contracts/consent/verify.contract.test.d.ts.map +1 -0
  149. package/dist/contracts/index.d.ts +963 -0
  150. package/dist/contracts/index.d.ts.map +1 -0
  151. package/dist/contracts/meta/index.d.ts +78 -0
  152. package/dist/contracts/meta/index.d.ts.map +1 -0
  153. package/dist/contracts/meta/index.test.d.ts +2 -0
  154. package/dist/contracts/meta/index.test.d.ts.map +1 -0
  155. package/dist/contracts/meta/status.contract.d.ts +77 -0
  156. package/dist/contracts/meta/status.contract.d.ts.map +1 -0
  157. package/dist/contracts/meta/status.contract.test.d.ts +2 -0
  158. package/dist/contracts/meta/status.contract.test.d.ts.map +1 -0
  159. package/dist/contracts/shared/jurisdiction.schema.d.ts +24 -0
  160. package/dist/contracts/shared/jurisdiction.schema.d.ts.map +1 -0
  161. package/dist/core.cjs +3584 -0
  162. package/dist/core.d.ts +533 -78
  163. package/dist/core.d.ts.map +1 -1
  164. package/dist/{index.js → core.js} +1164 -1292
  165. package/dist/handlers/consent/index.d.ts +401 -0
  166. package/dist/handlers/consent/index.d.ts.map +1 -0
  167. package/dist/handlers/consent/post.handler.d.ts +234 -0
  168. package/dist/handlers/consent/post.handler.d.ts.map +1 -0
  169. package/dist/handlers/consent/show-banner.handler.d.ts +57 -0
  170. package/dist/handlers/consent/show-banner.handler.d.ts.map +1 -0
  171. package/dist/handlers/consent/show-banner.handler.test.d.ts +2 -0
  172. package/dist/handlers/consent/show-banner.handler.test.d.ts.map +1 -0
  173. package/dist/handlers/consent/verify.handler.d.ts +169 -0
  174. package/dist/handlers/consent/verify.handler.d.ts.map +1 -0
  175. package/dist/handlers/meta/index.d.ts +78 -0
  176. package/dist/handlers/meta/index.d.ts.map +1 -0
  177. package/dist/handlers/meta/status.handler.d.ts +76 -0
  178. package/dist/handlers/meta/status.handler.d.ts.map +1 -0
  179. package/dist/init.d.ts +0 -1
  180. package/dist/init.d.ts.map +1 -1
  181. package/dist/pkgs/api-router/hooks/processor.d.ts.map +1 -1
  182. package/dist/pkgs/api-router/types/router-props.d.ts +1 -1
  183. package/dist/pkgs/api-router/types/router-props.d.ts.map +1 -1
  184. package/dist/pkgs/api-router/utils/cors.d.ts +1 -1
  185. package/dist/pkgs/api-router/utils/cors.d.ts.map +1 -1
  186. package/dist/pkgs/data-model/fields/field-types.d.ts +1 -1
  187. package/dist/pkgs/data-model/fields/zod-fields.d.ts +32 -32
  188. package/dist/pkgs/data-model/index.cjs +1433 -1799
  189. package/dist/pkgs/data-model/index.js +20 -385
  190. package/dist/pkgs/data-model/schema/index.cjs +1402 -1768
  191. package/dist/pkgs/data-model/schema/index.js +20 -385
  192. package/dist/pkgs/db-adapters/adapter-factory.d.ts +2 -2
  193. package/dist/pkgs/db-adapters/adapter-factory.d.ts.map +1 -1
  194. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.d.ts +4 -7
  195. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.d.ts.map +1 -1
  196. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/index.cjs +19 -151
  197. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/index.js +19 -151
  198. package/dist/pkgs/db-adapters/adapters/kysely-adapter/dialect.d.ts +1 -3
  199. package/dist/pkgs/db-adapters/adapters/kysely-adapter/dialect.d.ts.map +1 -1
  200. package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.cjs +17 -149
  201. package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.js +17 -149
  202. package/dist/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.d.ts +0 -1
  203. package/dist/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.d.ts.map +1 -1
  204. package/dist/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.d.ts +2 -2
  205. package/dist/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.d.ts.map +1 -1
  206. package/dist/pkgs/db-adapters/adapters/kysely-adapter/types.d.ts +0 -2
  207. package/dist/pkgs/db-adapters/adapters/kysely-adapter/types.d.ts.map +1 -1
  208. package/dist/pkgs/db-adapters/adapters/memory-adapter/index.cjs +17 -149
  209. package/dist/pkgs/db-adapters/adapters/memory-adapter/index.js +17 -149
  210. package/dist/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.d.ts +0 -1
  211. package/dist/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.d.ts.map +1 -1
  212. package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.cjs +19 -151
  213. package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.js +19 -151
  214. package/dist/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.d.ts +0 -1
  215. package/dist/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.d.ts.map +1 -1
  216. package/dist/pkgs/db-adapters/index.cjs +31 -153
  217. package/dist/pkgs/db-adapters/index.js +31 -153
  218. package/dist/pkgs/migrations/get-schema/get-schema.d.ts +2 -2
  219. package/dist/pkgs/migrations/get-schema/index.d.ts +1 -1
  220. package/dist/pkgs/migrations/index.cjs +30 -153
  221. package/dist/pkgs/migrations/index.js +30 -153
  222. package/dist/pkgs/migrations/schema-comparison.d.ts.map +1 -1
  223. package/dist/pkgs/results/core/error-class.d.ts +23 -21
  224. package/dist/pkgs/results/core/error-class.d.ts.map +1 -1
  225. package/dist/pkgs/results/index.cjs +17 -150
  226. package/dist/pkgs/results/index.d.ts +0 -3
  227. package/dist/pkgs/results/index.d.ts.map +1 -1
  228. package/dist/pkgs/results/index.js +17 -138
  229. package/dist/pkgs/results/orpc-error-handler.d.ts +65 -0
  230. package/dist/pkgs/results/orpc-error-handler.d.ts.map +1 -0
  231. package/dist/pkgs/results/types.d.ts +7 -7
  232. package/dist/pkgs/results/types.d.ts.map +1 -1
  233. package/dist/pkgs/types/context.d.ts +15 -8
  234. package/dist/pkgs/types/context.d.ts.map +1 -1
  235. package/dist/pkgs/types/endpoints.d.ts +3 -4
  236. package/dist/pkgs/types/endpoints.d.ts.map +1 -1
  237. package/dist/pkgs/types/options.d.ts +2 -4
  238. package/dist/pkgs/types/options.d.ts.map +1 -1
  239. package/dist/pkgs/types/plugins.d.ts +2 -3
  240. package/dist/pkgs/types/plugins.d.ts.map +1 -1
  241. package/dist/pkgs/utils/index.d.ts +1 -0
  242. package/dist/pkgs/utils/index.d.ts.map +1 -1
  243. package/dist/pkgs/utils/logger.d.ts +16 -0
  244. package/dist/pkgs/utils/logger.d.ts.map +1 -0
  245. package/dist/router.cjs +1213 -0
  246. package/dist/router.d.ts +480 -0
  247. package/dist/router.d.ts.map +1 -0
  248. package/dist/router.js +1169 -0
  249. package/dist/schema/audit-log/table.d.ts +1 -1
  250. package/dist/schema/consent/table.d.ts +1 -1
  251. package/dist/schema/consent-policy/registry.d.ts +12 -12
  252. package/dist/schema/consent-policy/schema.d.ts +6 -6
  253. package/dist/schema/consent-policy/table.d.ts +7 -7
  254. package/dist/schema/consent-purpose/registry.d.ts +6 -6
  255. package/dist/schema/consent-purpose/schema.d.ts +6 -6
  256. package/dist/schema/consent-purpose/table.d.ts +7 -7
  257. package/dist/schema/consent-record/table.d.ts +1 -1
  258. package/dist/schema/create-registry.d.ts +32 -32
  259. package/dist/schema/definition.d.ts +19 -19
  260. package/dist/schema/domain/registry.d.ts +10 -10
  261. package/dist/schema/domain/schema.d.ts +5 -5
  262. package/dist/schema/domain/table.d.ts +6 -6
  263. package/dist/schema/index.cjs +1409 -1775
  264. package/dist/schema/index.js +20 -385
  265. package/dist/schema/schemas.d.ts +19 -19
  266. package/dist/schema/subject/registry.d.ts +4 -4
  267. package/dist/schema/subject/schema.d.ts +2 -2
  268. package/dist/schema/subject/table.d.ts +3 -3
  269. package/dist/server.d.ts +2 -0
  270. package/dist/server.d.ts.map +1 -0
  271. package/dist/testing/contract-testing.d.ts +37 -0
  272. package/dist/testing/contract-testing.d.ts.map +1 -0
  273. package/dist/types/context.d.ts +1 -1
  274. package/dist/types/index.d.ts +2 -2
  275. package/dist/types/options.d.ts +33 -3
  276. package/dist/types/options.d.ts.map +1 -1
  277. package/dist/types/plugins.d.ts +3 -4
  278. package/dist/types/plugins.d.ts.map +1 -1
  279. package/package.json +20 -28
  280. package/rslib.config.ts +2 -5
  281. package/src/contracts/consent/index.test.ts +5 -0
  282. package/src/contracts/consent/index.ts +9 -0
  283. package/src/contracts/consent/post.contract.test.ts +526 -0
  284. package/src/contracts/consent/post.contract.ts +160 -0
  285. package/src/contracts/consent/show-banner.contract.test.ts +214 -0
  286. package/src/contracts/consent/show-banner.contract.ts +45 -0
  287. package/src/contracts/consent/verify.contract.test.ts +185 -0
  288. package/src/contracts/consent/verify.contract.ts +126 -0
  289. package/src/contracts/index.ts +18 -0
  290. package/src/contracts/meta/index.test.ts +5 -0
  291. package/src/contracts/meta/index.ts +5 -0
  292. package/src/contracts/meta/status.contract.test.ts +338 -0
  293. package/src/contracts/meta/status.contract.ts +37 -0
  294. package/src/contracts/shared/jurisdiction.schema.ts +30 -0
  295. package/src/core.ts +451 -161
  296. package/src/handlers/consent/index.ts +9 -0
  297. package/src/handlers/consent/post.handler.ts +273 -0
  298. package/src/handlers/consent/show-banner.handler.test.ts +148 -0
  299. package/src/handlers/consent/show-banner.handler.ts +150 -0
  300. package/src/handlers/consent/verify.handler.ts +305 -0
  301. package/src/handlers/meta/index.ts +5 -0
  302. package/src/handlers/meta/status.handler.ts +47 -0
  303. package/src/init.ts +8 -26
  304. package/src/pkgs/api-router/hooks/__tests__/processor.test.ts +6 -0
  305. package/src/pkgs/api-router/hooks/processor.ts +2 -0
  306. package/src/pkgs/api-router/types/router-props.ts +1 -1
  307. package/src/pkgs/api-router/utils/cors.ts +1 -1
  308. package/src/pkgs/data-model/fields/field-types.ts +1 -1
  309. package/src/pkgs/data-model/fields/id-generator.ts +1 -1
  310. package/src/pkgs/db-adapters/README.md +3 -3
  311. package/src/pkgs/db-adapters/adapter-factory.ts +8 -4
  312. package/src/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.ts +13 -16
  313. package/src/pkgs/db-adapters/adapters/kysely-adapter/dialect.ts +1 -3
  314. package/src/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.ts +0 -1
  315. package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/postgres.test.ts +1 -1
  316. package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/sqlite.test.ts +1 -1
  317. package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.ts +2 -2
  318. package/src/pkgs/db-adapters/adapters/kysely-adapter/types.ts +0 -2
  319. package/src/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.ts +0 -1
  320. package/src/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.ts +0 -1
  321. package/src/pkgs/migrations/get-migration.ts +3 -3
  322. package/src/pkgs/migrations/get-schema/get-schema.ts +2 -2
  323. package/src/pkgs/migrations/get-schema/index.ts +1 -1
  324. package/src/pkgs/migrations/migration-builders.ts +2 -2
  325. package/src/pkgs/migrations/migration-execution.ts +2 -2
  326. package/src/pkgs/migrations/schema-comparison.ts +5 -4
  327. package/src/pkgs/results/__tests__/error-class.test.ts +8 -7
  328. package/src/pkgs/results/core/error-class.ts +31 -43
  329. package/src/pkgs/results/index.ts +0 -10
  330. package/src/pkgs/results/orpc-error-handler.ts +137 -0
  331. package/src/pkgs/results/types.ts +8 -7
  332. package/src/pkgs/types/context.ts +18 -9
  333. package/src/pkgs/types/endpoints.ts +3 -5
  334. package/src/pkgs/types/options.ts +2 -4
  335. package/src/pkgs/types/plugins.ts +2 -3
  336. package/src/pkgs/utils/index.ts +1 -0
  337. package/src/pkgs/utils/logger.ts +38 -0
  338. package/src/router.ts +8 -0
  339. package/src/schema/audit-log/table.ts +1 -1
  340. package/src/schema/consent/table.ts +1 -1
  341. package/src/schema/consent-policy/table.ts +1 -1
  342. package/src/schema/consent-purpose/table.ts +1 -1
  343. package/src/schema/consent-record/table.ts +1 -1
  344. package/src/schema/definition.ts +2 -2
  345. package/src/schema/domain/table.ts +1 -1
  346. package/src/schema/subject/table.ts +1 -1
  347. package/src/server.ts +130 -0
  348. package/src/testing/contract-testing.ts +437 -0
  349. package/src/types/context.ts +1 -1
  350. package/src/types/index.ts +2 -2
  351. package/src/types/options.ts +38 -3
  352. package/src/types/plugins.ts +3 -4
  353. package/dist/index.cjs +0 -3706
  354. package/dist/index.d.ts +0 -11
  355. package/dist/index.d.ts.map +0 -1
  356. package/dist/init.test.d.ts +0 -2
  357. package/dist/init.test.d.ts.map +0 -1
  358. package/dist/integrations/cloudflare.cjs +0 -312
  359. package/dist/integrations/cloudflare.d.ts +0 -32
  360. package/dist/integrations/cloudflare.d.ts.map +0 -1
  361. package/dist/integrations/cloudflare.js +0 -278
  362. package/dist/integrations/next.cjs +0 -276
  363. package/dist/integrations/next.d.ts +0 -68
  364. package/dist/integrations/next.d.ts.map +0 -1
  365. package/dist/integrations/next.js +0 -239
  366. package/dist/integrations/node.cjs +0 -257
  367. package/dist/integrations/node.d.ts +0 -29
  368. package/dist/integrations/node.d.ts.map +0 -1
  369. package/dist/integrations/node.js +0 -223
  370. package/dist/pkgs/api-router/index.d.ts +0 -9
  371. package/dist/pkgs/api-router/index.d.ts.map +0 -1
  372. package/dist/pkgs/api-router/utils/define-route.d.ts +0 -87
  373. package/dist/pkgs/api-router/utils/define-route.d.ts.map +0 -1
  374. package/dist/pkgs/logger/__tests__/console-formatter.test.d.ts +0 -2
  375. package/dist/pkgs/logger/__tests__/console-formatter.test.d.ts.map +0 -1
  376. package/dist/pkgs/logger/__tests__/integration.test.d.ts +0 -2
  377. package/dist/pkgs/logger/__tests__/integration.test.d.ts.map +0 -1
  378. package/dist/pkgs/logger/__tests__/log-levels.test.d.ts +0 -2
  379. package/dist/pkgs/logger/__tests__/log-levels.test.d.ts.map +0 -1
  380. package/dist/pkgs/logger/__tests__/logger-factory.test.d.ts +0 -2
  381. package/dist/pkgs/logger/__tests__/logger-factory.test.d.ts.map +0 -1
  382. package/dist/pkgs/logger/__tests__/result-logging.test.d.ts +0 -2
  383. package/dist/pkgs/logger/__tests__/result-logging.test.d.ts.map +0 -1
  384. package/dist/pkgs/logger/__tests__/types.test.d.ts +0 -2
  385. package/dist/pkgs/logger/__tests__/types.test.d.ts.map +0 -1
  386. package/dist/pkgs/logger/console-formatter.d.ts +0 -56
  387. package/dist/pkgs/logger/console-formatter.d.ts.map +0 -1
  388. package/dist/pkgs/logger/index.cjs +0 -240
  389. package/dist/pkgs/logger/index.d.ts +0 -35
  390. package/dist/pkgs/logger/index.d.ts.map +0 -1
  391. package/dist/pkgs/logger/index.js +0 -185
  392. package/dist/pkgs/logger/log-levels.d.ts +0 -29
  393. package/dist/pkgs/logger/log-levels.d.ts.map +0 -1
  394. package/dist/pkgs/logger/logger-factory.d.ts +0 -42
  395. package/dist/pkgs/logger/logger-factory.d.ts.map +0 -1
  396. package/dist/pkgs/logger/result-logging.d.ts +0 -71
  397. package/dist/pkgs/logger/result-logging.d.ts.map +0 -1
  398. package/dist/pkgs/logger/telemetry.d.ts +0 -14
  399. package/dist/pkgs/logger/telemetry.d.ts.map +0 -1
  400. package/dist/pkgs/logger/types.d.ts +0 -121
  401. package/dist/pkgs/logger/types.d.ts.map +0 -1
  402. package/dist/pkgs/results/__tests__/retrieval-pipeline.test.d.ts +0 -2
  403. package/dist/pkgs/results/__tests__/retrieval-pipeline.test.d.ts.map +0 -1
  404. package/dist/pkgs/results/__tests__/validation-pipeline.test.d.ts +0 -2
  405. package/dist/pkgs/results/__tests__/validation-pipeline.test.d.ts.map +0 -1
  406. package/dist/pkgs/results/h3-integration.d.ts +0 -52
  407. package/dist/pkgs/results/h3-integration.d.ts.map +0 -1
  408. package/dist/pkgs/results/pipeline/retrieval-pipeline.d.ts +0 -101
  409. package/dist/pkgs/results/pipeline/retrieval-pipeline.d.ts.map +0 -1
  410. package/dist/pkgs/results/pipeline/validation-pipeline.d.ts +0 -89
  411. package/dist/pkgs/results/pipeline/validation-pipeline.d.ts.map +0 -1
  412. package/dist/response-types.d.ts +0 -19
  413. package/dist/response-types.d.ts.map +0 -1
  414. package/dist/routes/__test__/index.test.d.ts +0 -17
  415. package/dist/routes/__test__/index.test.d.ts.map +0 -1
  416. package/dist/routes/__test__/set-consent.test.d.ts +0 -2
  417. package/dist/routes/__test__/set-consent.test.d.ts.map +0 -1
  418. package/dist/routes/__test__/show-consent-banner.test.d.ts +0 -2
  419. package/dist/routes/__test__/show-consent-banner.test.d.ts.map +0 -1
  420. package/dist/routes/__test__/status.test.d.ts +0 -2
  421. package/dist/routes/__test__/status.test.d.ts.map +0 -1
  422. package/dist/routes/__test__/verify-consent.test.d.ts +0 -2
  423. package/dist/routes/__test__/verify-consent.test.d.ts.map +0 -1
  424. package/dist/routes/index.d.ts +0 -3
  425. package/dist/routes/index.d.ts.map +0 -1
  426. package/dist/routes/set-consent.d.ts +0 -89
  427. package/dist/routes/set-consent.d.ts.map +0 -1
  428. package/dist/routes/show-consent-banner.d.ts +0 -15
  429. package/dist/routes/show-consent-banner.d.ts.map +0 -1
  430. package/dist/routes/status.d.ts +0 -44
  431. package/dist/routes/status.d.ts.map +0 -1
  432. package/dist/routes/types.d.ts +0 -7
  433. package/dist/routes/types.d.ts.map +0 -1
  434. package/dist/routes/verify-consent.d.ts +0 -38
  435. package/dist/routes/verify-consent.d.ts.map +0 -1
  436. package/src/docs/ADVANCED_JSON_HANDLING.md +0 -99
  437. package/src/docs/neverthrow.md +0 -171
  438. package/src/index.ts +0 -34
  439. package/src/init.test.ts +0 -236
  440. package/src/integrations/cloudflare.ts +0 -269
  441. package/src/integrations/next.ts +0 -204
  442. package/src/integrations/node.ts +0 -141
  443. package/src/pkgs/api-router/index.ts +0 -148
  444. package/src/pkgs/api-router/types/h3.d.ts +0 -42
  445. package/src/pkgs/api-router/utils/define-route.ts +0 -410
  446. package/src/pkgs/logger/README.md +0 -213
  447. package/src/pkgs/logger/__tests__/console-formatter.test.ts +0 -67
  448. package/src/pkgs/logger/__tests__/integration.test.ts +0 -184
  449. package/src/pkgs/logger/__tests__/log-levels.test.ts +0 -77
  450. package/src/pkgs/logger/__tests__/logger-factory.test.ts +0 -156
  451. package/src/pkgs/logger/__tests__/result-logging.test.ts +0 -209
  452. package/src/pkgs/logger/__tests__/types.test.ts +0 -94
  453. package/src/pkgs/logger/console-formatter.ts +0 -75
  454. package/src/pkgs/logger/doc.md +0 -569
  455. package/src/pkgs/logger/index.ts +0 -59
  456. package/src/pkgs/logger/log-levels.ts +0 -46
  457. package/src/pkgs/logger/logger-factory.ts +0 -121
  458. package/src/pkgs/logger/result-logging.ts +0 -134
  459. package/src/pkgs/logger/telemetry.ts +0 -96
  460. package/src/pkgs/logger/types.ts +0 -138
  461. package/src/pkgs/results/__tests__/retrieval-pipeline.test.ts +0 -157
  462. package/src/pkgs/results/__tests__/validation-pipeline.test.ts +0 -151
  463. package/src/pkgs/results/h3-integration.ts +0 -142
  464. package/src/pkgs/results/pipeline/retrieval-pipeline.ts +0 -188
  465. package/src/pkgs/results/pipeline/validation-pipeline.ts +0 -164
  466. package/src/plugins/.keep +0 -0
  467. package/src/response-types.ts +0 -29
  468. package/src/routes/__test__/index.test.ts +0 -112
  469. package/src/routes/__test__/set-consent.test.ts +0 -242
  470. package/src/routes/__test__/show-consent-banner.test.ts +0 -98
  471. package/src/routes/__test__/status.test.ts +0 -64
  472. package/src/routes/__test__/verify-consent.test.ts +0 -266
  473. package/src/routes/index.ts +0 -12
  474. package/src/routes/set-consent.ts +0 -249
  475. package/src/routes/show-consent-banner.ts +0 -131
  476. package/src/routes/status.ts +0 -61
  477. package/src/routes/types.ts +0 -7
  478. package/src/routes/verify-consent.ts +0 -206
package/dist/router.js ADDED
@@ -0,0 +1,1169 @@
1
+ import * as __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__ from "@orpc/server";
2
+ import * as __WEBPACK_EXTERNAL_MODULE__orpc_contract_5a058524__ from "@orpc/contract";
3
+ import * as __WEBPACK_EXTERNAL_MODULE_zod__ from "zod";
4
+ import * as __WEBPACK_EXTERNAL_MODULE_base_x_aeb88370__ from "base-x";
5
+ import "neverthrow";
6
+ import * as __WEBPACK_EXTERNAL_MODULE__opentelemetry_api_87359e78__ from "@opentelemetry/api";
7
+ import "@doubletie/logger";
8
+ import "node:crypto";
9
+ (0, __WEBPACK_EXTERNAL_MODULE_base_x_aeb88370__["default"])('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');
10
+ const fieldConfigSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
11
+ required: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
12
+ returned: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
13
+ input: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
14
+ defaultValue: __WEBPACK_EXTERNAL_MODULE_zod__.z.union([
15
+ __WEBPACK_EXTERNAL_MODULE_zod__.z.any(),
16
+ __WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.any())
17
+ ]).optional(),
18
+ transform: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
19
+ input: __WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().args(__WEBPACK_EXTERNAL_MODULE_zod__.z.any()).returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.union([
20
+ __WEBPACK_EXTERNAL_MODULE_zod__.z.any(),
21
+ __WEBPACK_EXTERNAL_MODULE_zod__.z.promise(__WEBPACK_EXTERNAL_MODULE_zod__.z.any())
22
+ ])).optional(),
23
+ output: __WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().args(__WEBPACK_EXTERNAL_MODULE_zod__.z.any()).returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.union([
24
+ __WEBPACK_EXTERNAL_MODULE_zod__.z.any(),
25
+ __WEBPACK_EXTERNAL_MODULE_zod__.z.promise(__WEBPACK_EXTERNAL_MODULE_zod__.z.any())
26
+ ])).optional()
27
+ }).optional(),
28
+ validator: __WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().args(__WEBPACK_EXTERNAL_MODULE_zod__.z.any()).returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.union([
29
+ __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
30
+ __WEBPACK_EXTERNAL_MODULE_zod__.z["null"]()
31
+ ])).optional(),
32
+ unique: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().optional(),
33
+ indexed: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().optional(),
34
+ sortable: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
35
+ fieldName: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
36
+ bigint: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false)
37
+ });
38
+ const stringFieldSchema = fieldConfigSchema.extend({
39
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('string'),
40
+ minLength: __WEBPACK_EXTERNAL_MODULE_zod__.z.number().optional(),
41
+ maxLength: __WEBPACK_EXTERNAL_MODULE_zod__.z.number().optional(),
42
+ pattern: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional()
43
+ });
44
+ const numberFieldSchema = fieldConfigSchema.extend({
45
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('number'),
46
+ min: __WEBPACK_EXTERNAL_MODULE_zod__.z.number().optional(),
47
+ max: __WEBPACK_EXTERNAL_MODULE_zod__.z.number().optional()
48
+ });
49
+ const booleanFieldSchema = fieldConfigSchema.extend({
50
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('boolean')
51
+ });
52
+ const dateFieldSchema = fieldConfigSchema.extend({
53
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('date'),
54
+ minDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().optional(),
55
+ maxDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().optional(),
56
+ dateOnly: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false),
57
+ format: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional()
58
+ });
59
+ const timezoneFieldSchema = fieldConfigSchema.extend({
60
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('timezone'),
61
+ validateTimezone: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
62
+ suggestedValues: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional(),
63
+ restrictToSuggestedValues: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false)
64
+ });
65
+ const jsonFieldSchema = fieldConfigSchema.extend({
66
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('json'),
67
+ validateJson: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true)
68
+ });
69
+ const stringArrayFieldSchema = fieldConfigSchema.extend({
70
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('string[]')
71
+ });
72
+ const numberArrayFieldSchema = fieldConfigSchema.extend({
73
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('number[]')
74
+ });
75
+ __WEBPACK_EXTERNAL_MODULE_zod__.z.discriminatedUnion('type', [
76
+ stringFieldSchema,
77
+ numberFieldSchema,
78
+ booleanFieldSchema,
79
+ dateFieldSchema,
80
+ timezoneFieldSchema,
81
+ jsonFieldSchema,
82
+ stringArrayFieldSchema,
83
+ numberArrayFieldSchema
84
+ ]);
85
+ const error_codes_ERROR_CODES = Object.freeze({
86
+ NOT_FOUND: 'Resource not found',
87
+ BAD_REQUEST: 'Bad request',
88
+ CONFLICT: 'Conflict with current state',
89
+ MISSING_REQUIRED_PARAMETER: 'Missing required parameter',
90
+ UNAUTHORIZED: 'Unauthorized',
91
+ FORBIDDEN: 'Forbidden',
92
+ INTERNAL_SERVER_ERROR: 'Internal server error',
93
+ INITIALIZATION_FAILED: 'Initialization failed',
94
+ DATABASE_CONNECTION_ERROR: 'Database connection error',
95
+ DATABASE_QUERY_ERROR: 'Database query error',
96
+ INVALID_CONFIGURATION: 'Invalid configuration',
97
+ REQUEST_HANDLER_ERROR: 'Request handler error',
98
+ INVALID_REQUEST: 'Invalid request',
99
+ UNKNOWN_ERROR: 'Unknown error',
100
+ NETWORK_ERROR: 'Network error',
101
+ PLUGIN_INITIALIZATION_FAILED: 'Plugin initialization failed',
102
+ API_RETRIEVAL_ERROR: 'API retrieval error',
103
+ VALIDATION_ERROR: 'Validation error',
104
+ UNEXPECTED: 'Unexpected error'
105
+ });
106
+ const ERROR_CATEGORIES = Object.freeze({
107
+ VALIDATION: 'validation',
108
+ AUTHORIZATION: 'authorization',
109
+ STORAGE: 'storage',
110
+ NETWORK: 'network',
111
+ PLUGIN: 'plugin',
112
+ CONFIGURATION: 'configuration',
113
+ UNEXPECTED: 'unexpected'
114
+ });
115
+ __WEBPACK_EXTERNAL_MODULE__opentelemetry_api_87359e78__.trace.getTracer('@doubletie/results');
116
+ class error_class_DoubleTieError extends __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError {
117
+ category;
118
+ meta;
119
+ statusCode;
120
+ constructor(message, options = {
121
+ code: error_codes_ERROR_CODES.UNKNOWN_ERROR,
122
+ status: 500,
123
+ category: ERROR_CATEGORIES.UNEXPECTED,
124
+ cause: void 0,
125
+ meta: {}
126
+ }){
127
+ super(options.code ?? error_codes_ERROR_CODES.UNKNOWN_ERROR, {
128
+ message,
129
+ cause: options.cause,
130
+ data: options.meta ?? {}
131
+ });
132
+ this.name = 'DoubleTieError';
133
+ this.category = options.category ?? ERROR_CATEGORIES.UNEXPECTED;
134
+ this.meta = options.meta ?? {};
135
+ this.statusCode = options.status ?? 500;
136
+ tracing_withSpan('create_doubletie_error', async (span)=>{
137
+ span.setAttributes({
138
+ 'error.name': this.constructor.name,
139
+ 'error.message': message,
140
+ 'error.code': this.code,
141
+ 'error.status': this.statusCode,
142
+ 'error.category': this.category,
143
+ 'error.has_cause': !!this.cause,
144
+ 'error.cause_type': this.cause instanceof Error ? this.cause.constructor.name : typeof this.cause,
145
+ 'error.has_meta': !!this.meta
146
+ });
147
+ if (this.cause instanceof Error) span.recordException(this.cause);
148
+ });
149
+ if (Error.captureStackTrace) Error.captureStackTrace(this, this.constructor);
150
+ }
151
+ static isDoubleTieError(error) {
152
+ return error instanceof error_class_DoubleTieError;
153
+ }
154
+ toJSON() {
155
+ const validationErrorMessage = this.meta?.validationErrors ? String(this.meta.validationErrors) : void 0;
156
+ const stackTrace = this.stack ? this.stack.split('\n').map((line)=>line.trim()).filter((line)=>line && !line.includes('Error: ')) : [];
157
+ return {
158
+ code: this.code,
159
+ message: validationErrorMessage || this.message,
160
+ status: this.statusCode,
161
+ defined: true,
162
+ data: {
163
+ category: this.category,
164
+ meta: this.meta,
165
+ ...'production' === process.env.NODE_ENV ? {} : {
166
+ stack: stackTrace
167
+ },
168
+ ...validationErrorMessage && this.message ? {
169
+ originalMessage: this.message
170
+ } : {},
171
+ ...this.cause ? {
172
+ cause: this.cause instanceof Error ? {
173
+ name: this.cause.name,
174
+ message: this.cause.message,
175
+ stack: this.cause.stack ? this.cause.stack.split('\n').map((line)=>line.trim()) : void 0
176
+ } : this.cause
177
+ } : {}
178
+ }
179
+ };
180
+ }
181
+ static fromResponse(response, data) {
182
+ let message = `HTTP error ${response.status}`;
183
+ let errorCode = `HTTP ${response.status}`;
184
+ let errorMeta = {};
185
+ if (data && 'object' == typeof data && null !== data) {
186
+ const errorObj = data;
187
+ if ('string' == typeof errorObj.message) message = errorObj.message;
188
+ if ('string' == typeof errorObj.code) errorCode = errorObj.code;
189
+ if ('object' == typeof errorObj.data && null !== errorObj.data) errorMeta = errorObj.data;
190
+ }
191
+ return new error_class_DoubleTieError(message, {
192
+ code: errorCode,
193
+ status: response.status,
194
+ meta: errorMeta
195
+ });
196
+ }
197
+ withMeta(additionalMeta) {
198
+ return new error_class_DoubleTieError(this.message, {
199
+ code: this.code,
200
+ status: this.statusCode,
201
+ category: this.category,
202
+ cause: this.cause instanceof Error ? this.cause : void 0,
203
+ meta: {
204
+ ...this.meta,
205
+ ...additionalMeta
206
+ }
207
+ });
208
+ }
209
+ static createSubclass(name) {
210
+ const ErrorSubclass = class extends error_class_DoubleTieError {
211
+ constructor(message, options){
212
+ super(message, options);
213
+ Object.defineProperty(this, 'name', {
214
+ value: name
215
+ });
216
+ }
217
+ };
218
+ Object.defineProperty(ErrorSubclass, 'name', {
219
+ value: name
220
+ });
221
+ return ErrorSubclass;
222
+ }
223
+ static formatValidationError(error) {
224
+ if (!error.meta) return error.message;
225
+ let formattedMessage = `${error.message} (${error.code})`;
226
+ if (error.meta.validationErrors) formattedMessage += `\nValidation Errors: ${JSON.stringify(error.meta.validationErrors, null, 2)}`;
227
+ const otherMeta = Object.fromEntries(Object.entries(error.meta).filter(([key])=>'validationErrors' !== key));
228
+ if (Object.keys(otherMeta).length > 0) formattedMessage += `\nAdditional Context: ${JSON.stringify(otherMeta, null, 2)}`;
229
+ return formattedMessage;
230
+ }
231
+ }
232
+ __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
233
+ id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
234
+ entityType: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
235
+ entityId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
236
+ actionType: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
237
+ subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
238
+ ipAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
239
+ userAgent: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
240
+ changes: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
241
+ metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
242
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
243
+ });
244
+ const PolicyTypeSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
245
+ 'cookie_banner',
246
+ 'privacy_policy',
247
+ 'dpa',
248
+ 'terms_and_conditions',
249
+ 'marketing_communications',
250
+ 'age_verification',
251
+ 'other'
252
+ ]);
253
+ __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
254
+ id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
255
+ version: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
256
+ type: PolicyTypeSchema,
257
+ name: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
258
+ effectiveDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date(),
259
+ expirationDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().nullable().optional(),
260
+ content: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
261
+ contentHash: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
262
+ isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
263
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
264
+ updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
265
+ });
266
+ __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
267
+ id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
268
+ code: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
269
+ name: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
270
+ description: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
271
+ isEssential: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false),
272
+ dataCategory: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
273
+ legalBasis: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
274
+ isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
275
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
276
+ updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
277
+ });
278
+ __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
279
+ id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
280
+ subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
281
+ consentId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
282
+ actionType: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
283
+ details: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
284
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
285
+ updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
286
+ });
287
+ __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
288
+ id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
289
+ subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
290
+ domainId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
291
+ purposeIds: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()),
292
+ metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).nullable().optional(),
293
+ policyId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
294
+ ipAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
295
+ userAgent: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
296
+ status: __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
297
+ 'active',
298
+ 'withdrawn',
299
+ 'expired'
300
+ ]).default('active'),
301
+ withdrawalReason: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
302
+ givenAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
303
+ validUntil: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().nullable().optional(),
304
+ isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true)
305
+ });
306
+ __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
307
+ id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
308
+ name: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().min(1),
309
+ description: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
310
+ allowedOrigins: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional().default([]),
311
+ isVerified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
312
+ isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
313
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
314
+ updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
315
+ });
316
+ __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
317
+ id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
318
+ isIdentified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false),
319
+ externalId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
320
+ identityProvider: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
321
+ lastIpAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
322
+ createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
323
+ updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
324
+ });
325
+ const baseConsentSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
326
+ subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
327
+ externalSubjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
328
+ domain: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().regex(/^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$/i, 'invalid domain'),
329
+ type: PolicyTypeSchema,
330
+ metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional()
331
+ });
332
+ const cookieBannerSchema = baseConsentSchema.extend({
333
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('cookie_banner'),
334
+ preferences: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.boolean())
335
+ });
336
+ const policyBasedSchema = baseConsentSchema.extend({
337
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
338
+ 'privacy_policy',
339
+ 'dpa',
340
+ 'terms_and_conditions'
341
+ ]),
342
+ policyId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
343
+ preferences: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.boolean()).optional()
344
+ });
345
+ const otherConsentSchema = baseConsentSchema.extend({
346
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
347
+ 'marketing_communications',
348
+ 'age_verification',
349
+ 'other'
350
+ ]),
351
+ preferences: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.boolean()).optional()
352
+ });
353
+ const postConsentContract = __WEBPACK_EXTERNAL_MODULE__orpc_contract_5a058524__.oc.route({
354
+ method: 'POST',
355
+ path: '/consent/set',
356
+ description: `Records a user's consent preferences and creates necessary consent records.
357
+ This endpoint handles various types of consent submissions:
358
+
359
+ 1. Cookie Banner Consent:
360
+ - Records granular cookie preferences
361
+ - Supports multiple consent purposes
362
+ - Creates audit trail for compliance
363
+
364
+ 2. Policy-Based Consent:
365
+ - Privacy Policy acceptance
366
+ - Data Processing Agreement (DPA) consent
367
+ - Terms and Conditions acceptance
368
+ - Links consent to specific policy versions
369
+
370
+ 3. Other Consent Types:
371
+ - Marketing communications preferences
372
+ - Age verification consent
373
+ - Custom consent types
374
+
375
+ The endpoint performs the following operations:
376
+ - Creates or retrieves subject records
377
+ - Validates domain and policy information
378
+ - Creates consent records with audit trails
379
+ - Records consent purposes and preferences
380
+ - Generates audit logs for compliance
381
+
382
+ Use this endpoint to record user consent and maintain a compliant consent management system.`,
383
+ tags: [
384
+ 'consent',
385
+ 'cookie-banner'
386
+ ]
387
+ }).errors({
388
+ INPUT_VALIDATION_FAILED: {
389
+ status: 422,
390
+ message: 'Invalid input parameters',
391
+ data: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
392
+ formErrors: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()),
393
+ fieldErrors: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()))
394
+ })
395
+ },
396
+ SUBJECT_CREATION_FAILED: {
397
+ status: 400,
398
+ message: 'Failed to create or find subject',
399
+ data: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
400
+ subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
401
+ externalSubjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional()
402
+ })
403
+ },
404
+ DOMAIN_CREATION_FAILED: {
405
+ status: 500,
406
+ message: 'Failed to create or find domain',
407
+ data: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
408
+ domain: __WEBPACK_EXTERNAL_MODULE_zod__.z.string()
409
+ })
410
+ },
411
+ POLICY_NOT_FOUND: {
412
+ status: 404,
413
+ message: 'Policy not found',
414
+ data: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
415
+ policyId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
416
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z.string()
417
+ })
418
+ },
419
+ POLICY_INACTIVE: {
420
+ status: 409,
421
+ message: 'Policy is not active',
422
+ data: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
423
+ policyId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
424
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z.string()
425
+ })
426
+ },
427
+ POLICY_CREATION_FAILED: {
428
+ status: 500,
429
+ message: 'Failed to create or find policy',
430
+ data: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
431
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z.string()
432
+ })
433
+ },
434
+ PURPOSE_CREATION_FAILED: {
435
+ status: 500,
436
+ message: 'Failed to create consent purpose',
437
+ data: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
438
+ purposeCode: __WEBPACK_EXTERNAL_MODULE_zod__.z.string()
439
+ })
440
+ },
441
+ CONSENT_CREATION_FAILED: {
442
+ status: 500,
443
+ message: 'Failed to create consent record',
444
+ data: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
445
+ subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
446
+ domain: __WEBPACK_EXTERNAL_MODULE_zod__.z.string()
447
+ })
448
+ }
449
+ }).input(__WEBPACK_EXTERNAL_MODULE_zod__.z.discriminatedUnion('type', [
450
+ cookieBannerSchema,
451
+ policyBasedSchema,
452
+ otherConsentSchema
453
+ ])).output(__WEBPACK_EXTERNAL_MODULE_zod__.z.object({
454
+ id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
455
+ subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
456
+ externalSubjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
457
+ domainId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
458
+ domain: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
459
+ type: PolicyTypeSchema,
460
+ status: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
461
+ recordId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
462
+ metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
463
+ givenAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date()
464
+ }));
465
+ const JurisdictionMessages = {
466
+ GDPR: 'GDPR or equivalent regulations require a cookie banner.',
467
+ CH: 'Switzerland requires similar data protection measures.',
468
+ BR: "Brazil's LGPD requires consent for cookies.",
469
+ PIPEDA: 'PIPEDA requires consent for data collection.',
470
+ AU: "Australia's Privacy Act mandates transparency about data collection.",
471
+ APPI: "Japan's APPI requires consent for data collection.",
472
+ PIPA: "South Korea's PIPA requires consent for data collection.",
473
+ NONE: 'No specific requirements'
474
+ };
475
+ const JurisdictionCodeSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
476
+ 'GDPR',
477
+ 'CH',
478
+ 'BR',
479
+ 'PIPEDA',
480
+ 'AU',
481
+ 'APPI',
482
+ 'PIPA',
483
+ 'NONE'
484
+ ]);
485
+ const JurisdictionInfoSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
486
+ code: JurisdictionCodeSchema,
487
+ message: __WEBPACK_EXTERNAL_MODULE_zod__.z.string()
488
+ });
489
+ const showConsentBannerContract = __WEBPACK_EXTERNAL_MODULE__orpc_contract_5a058524__.oc.route({
490
+ method: 'GET',
491
+ path: '/show-consent-banner',
492
+ description: `Determines if a user should see a consent banner based on their location and applicable privacy regulations.
493
+ This endpoint performs the following checks:
494
+
495
+ 1. Detects the user's location using various header information:
496
+ - Cloudflare country headers
497
+ - Vercel IP country headers
498
+ - AWS CloudFront headers
499
+ - Custom country code headers
500
+
501
+ 2. Determines the applicable jurisdiction based on the location:
502
+ - GDPR (EU/EEA/UK)
503
+ - Swiss Data Protection Act
504
+ - LGPD (Brazil)
505
+ - PIPEDA (Canada)
506
+ - Australian Privacy Principles
507
+ - APPI (Japan)
508
+ - PIPA (South Korea)
509
+
510
+ 3. Returns detailed information about:
511
+ - Whether to show the consent banner
512
+ - The applicable jurisdiction and its requirements
513
+ - The user's detected location (country and region)
514
+
515
+ Use this endpoint to implement geo-targeted consent banners and ensure compliance with regional privacy regulations.`,
516
+ tags: [
517
+ 'cookie-banner'
518
+ ]
519
+ }).output(__WEBPACK_EXTERNAL_MODULE_zod__.z.object({
520
+ showConsentBanner: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean(),
521
+ jurisdiction: JurisdictionInfoSchema,
522
+ location: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
523
+ countryCode: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable(),
524
+ regionCode: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable()
525
+ })
526
+ }));
527
+ const verifyConsentInputSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
528
+ subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
529
+ externalSubjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
530
+ domain: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
531
+ type: PolicyTypeSchema,
532
+ policyId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
533
+ preferences: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional()
534
+ }).strict();
535
+ const verify_contract_consentSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
536
+ id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
537
+ purposeIds: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string())
538
+ }).passthrough();
539
+ const verifyConsentContract = __WEBPACK_EXTERNAL_MODULE__orpc_contract_5a058524__.oc.route({
540
+ method: 'POST',
541
+ path: '/consent/verify',
542
+ description: `Verifies if a user has given valid consent for a specific policy and domain.
543
+ This endpoint performs comprehensive consent verification by:
544
+
545
+ 1. Validating the subject's identity (using subjectId or externalSubjectId)
546
+ 2. Verifying the domain's existence and validity
547
+ 3. Checking if the specified policy exists and is active
548
+ 4. Validating that all required purposes have been consented to
549
+ 5. Ensuring the consent record is current and valid
550
+
551
+ The endpoint supports different types of consent verification:
552
+ - Cookie banner consent verification
553
+ - Privacy policy consent verification
554
+ - Terms and conditions verification
555
+ - Marketing communications consent verification
556
+ - Age verification
557
+ - Custom consent types
558
+
559
+ Use this endpoint to ensure compliance with privacy regulations and to verify user consent before processing personal data.`,
560
+ tags: [
561
+ 'consent'
562
+ ]
563
+ }).errors({
564
+ INPUT_VALIDATION_FAILED: {
565
+ status: 422,
566
+ message: 'Invalid input parameters',
567
+ data: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
568
+ formErrors: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()),
569
+ fieldErrors: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional())
570
+ })
571
+ },
572
+ SUBJECT_NOT_FOUND: {
573
+ status: 404,
574
+ message: 'Subject not found',
575
+ data: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
576
+ subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
577
+ externalSubjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional()
578
+ })
579
+ },
580
+ DOMAIN_NOT_FOUND: {
581
+ status: 404,
582
+ message: 'Domain not found',
583
+ data: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
584
+ domain: __WEBPACK_EXTERNAL_MODULE_zod__.z.string()
585
+ })
586
+ },
587
+ POLICY_NOT_FOUND: {
588
+ status: 404,
589
+ message: 'Policy not found or invalid',
590
+ data: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
591
+ policyId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
592
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z.string()
593
+ })
594
+ },
595
+ PURPOSES_NOT_FOUND: {
596
+ status: 404,
597
+ message: 'Could not find all specified purposes',
598
+ data: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
599
+ preferences: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()),
600
+ foundPurposes: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string())
601
+ })
602
+ },
603
+ COOKIE_BANNER_PREFERENCES_REQUIRED: {
604
+ status: 400,
605
+ message: 'Preferences are required for cookie banner consent',
606
+ data: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
607
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('cookie_banner')
608
+ })
609
+ },
610
+ NO_CONSENT_FOUND: {
611
+ status: 404,
612
+ message: 'No consent found for the given policy',
613
+ data: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
614
+ policyId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
615
+ subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
616
+ domainId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string()
617
+ })
618
+ }
619
+ }).input(verifyConsentInputSchema).output(__WEBPACK_EXTERNAL_MODULE_zod__.z.object({
620
+ isValid: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean(),
621
+ reasons: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional(),
622
+ consent: verify_contract_consentSchema.optional()
623
+ }));
624
+ const consentContracts = {
625
+ post: postConsentContract,
626
+ showBanner: showConsentBannerContract,
627
+ verify: verifyConsentContract
628
+ };
629
+ const statusContract = __WEBPACK_EXTERNAL_MODULE__orpc_contract_5a058524__.oc.route({
630
+ method: 'GET',
631
+ path: '/status',
632
+ description: `Returns the current operational status and health metrics of the service.
633
+ This endpoint provides real-time information about:
634
+ - Overall service status (ok/error)
635
+ - Current API version
636
+ - Server timestamp
637
+ - Storage system status and availability
638
+ - Client information (IP, User Agent, Region)
639
+
640
+ Use this endpoint for health checks, monitoring, and service status verification.`,
641
+ tags: [
642
+ 'meta'
643
+ ]
644
+ }).output(__WEBPACK_EXTERNAL_MODULE_zod__.z.object({
645
+ status: __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
646
+ 'ok',
647
+ 'error'
648
+ ]),
649
+ version: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
650
+ timestamp: __WEBPACK_EXTERNAL_MODULE_zod__.z.date(),
651
+ storage: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
652
+ type: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
653
+ available: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean()
654
+ }),
655
+ client: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
656
+ ip: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable(),
657
+ userAgent: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable(),
658
+ region: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
659
+ countryCode: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable(),
660
+ regionCode: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable()
661
+ })
662
+ })
663
+ }));
664
+ const metaContracts = {
665
+ status: statusContract
666
+ };
667
+ const contracts_config = {
668
+ consent: consentContracts,
669
+ meta: metaContracts
670
+ };
671
+ const os = (0, __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.implement)(contracts_config);
672
+ const postConsent = os.consent.post.handler(async ({ input, context })=>{
673
+ const typedContext = context;
674
+ const logger = typedContext.logger;
675
+ logger.info('Handling post-consent request');
676
+ const { type, subjectId, externalSubjectId, domain, metadata, preferences } = input;
677
+ logger.debug('Request parameters', {
678
+ type,
679
+ subjectId,
680
+ externalSubjectId,
681
+ domain
682
+ });
683
+ try {
684
+ const subject = await typedContext.registry.findOrCreateSubject({
685
+ subjectId,
686
+ externalSubjectId,
687
+ ipAddress: typedContext.ipAddress || 'unknown'
688
+ });
689
+ if (!subject) throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('SUBJECT_CREATION_FAILED', {
690
+ data: {
691
+ subjectId,
692
+ externalSubjectId
693
+ }
694
+ });
695
+ logger.debug('Subject found/created', {
696
+ subjectId: subject.id
697
+ });
698
+ const domainRecord = await typedContext.registry.findOrCreateDomain(domain);
699
+ if (!domainRecord) throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('DOMAIN_CREATION_FAILED', {
700
+ data: {
701
+ domain
702
+ }
703
+ });
704
+ const now = new Date();
705
+ let policyId;
706
+ let purposeIds = [];
707
+ if ('policyId' in input && input.policyId) {
708
+ policyId = input.policyId;
709
+ const policy = await typedContext.registry.findConsentPolicyById(policyId);
710
+ if (!policy) throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('POLICY_NOT_FOUND', {
711
+ data: {
712
+ policyId,
713
+ type
714
+ }
715
+ });
716
+ if (!policy.isActive) throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('POLICY_INACTIVE', {
717
+ data: {
718
+ policyId,
719
+ type
720
+ }
721
+ });
722
+ } else {
723
+ const policy = await typedContext.registry.findOrCreatePolicy(type);
724
+ if (!policy) throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('POLICY_CREATION_FAILED', {
725
+ data: {
726
+ type
727
+ }
728
+ });
729
+ policyId = policy.id;
730
+ }
731
+ if (preferences) {
732
+ const consentedPurposes = Object.entries(preferences).filter(([_, isConsented])=>isConsented).map(([purposeCode])=>purposeCode);
733
+ const existingPurposes = await Promise.all(consentedPurposes.map((purposeCode)=>typedContext.registry.findConsentPurposeByCode(purposeCode)));
734
+ const purposesToCreate = consentedPurposes.filter((_purposeCode, index)=>!existingPurposes[index]);
735
+ const createdPurposes = await Promise.all(purposesToCreate.map((purposeCode)=>typedContext.registry.createConsentPurpose({
736
+ code: purposeCode,
737
+ name: purposeCode,
738
+ description: `Auto-created consentPurpose for ${purposeCode}`,
739
+ isActive: true,
740
+ isEssential: false,
741
+ legalBasis: 'consent',
742
+ createdAt: now,
743
+ updatedAt: now
744
+ })));
745
+ purposeIds = [
746
+ ...existingPurposes.filter((p)=>null !== p).map((p)=>p.id),
747
+ ...createdPurposes.filter((p)=>null !== p).map((p)=>p.id)
748
+ ];
749
+ if (purposeIds.length !== consentedPurposes.length) throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('PURPOSE_CREATION_FAILED', {
750
+ data: {
751
+ purposeCode: purposesToCreate[purposeIds.length - consentedPurposes.length]
752
+ }
753
+ });
754
+ }
755
+ const result = await typedContext.adapter.transaction({
756
+ callback: async (tx)=>{
757
+ const consentRecord = await tx.create({
758
+ model: 'consent',
759
+ data: {
760
+ subjectId: subject.id,
761
+ domainId: domainRecord.id,
762
+ policyId,
763
+ purposeIds,
764
+ status: 'active',
765
+ isActive: true,
766
+ givenAt: now,
767
+ ipAddress: typedContext.ipAddress || 'unknown',
768
+ agent: typedContext.userAgent || 'unknown',
769
+ history: []
770
+ }
771
+ });
772
+ const record = await tx.create({
773
+ model: 'consentRecord',
774
+ data: {
775
+ subjectId: subject.id,
776
+ consentId: consentRecord.id,
777
+ actionType: 'consent_given',
778
+ details: metadata,
779
+ createdAt: now
780
+ }
781
+ });
782
+ await tx.create({
783
+ model: 'auditLog',
784
+ data: {
785
+ subjectId: subject.id,
786
+ entityType: 'consent',
787
+ entityId: consentRecord.id,
788
+ actionType: 'consent_given',
789
+ details: {
790
+ consentId: consentRecord.id,
791
+ type
792
+ },
793
+ timestamp: now,
794
+ ipAddress: typedContext.ipAddress || 'unknown',
795
+ agent: typedContext.userAgent || 'unknown'
796
+ }
797
+ });
798
+ return {
799
+ consent: consentRecord,
800
+ record
801
+ };
802
+ }
803
+ });
804
+ if (!result || !result.consent || !result.record) throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('CONSENT_CREATION_FAILED', {
805
+ data: {
806
+ subjectId: subject.id,
807
+ domain
808
+ }
809
+ });
810
+ return {
811
+ id: result.consent.id,
812
+ subjectId: subject.id,
813
+ externalSubjectId: subject.externalId ?? void 0,
814
+ domainId: domainRecord.id,
815
+ domain: domainRecord.name,
816
+ type,
817
+ status: result.consent.status,
818
+ recordId: result.record.id,
819
+ metadata,
820
+ givenAt: result.consent.givenAt
821
+ };
822
+ } catch (error) {
823
+ logger.error('Error in post-consent handler', {
824
+ error: error instanceof Error ? error.message : String(error),
825
+ errorType: error instanceof Error ? error.constructor.name : typeof error
826
+ });
827
+ if (error instanceof __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError) throw error;
828
+ throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('INTERNAL_SERVER_ERROR', {
829
+ message: error instanceof Error ? error.message : String(error)
830
+ });
831
+ }
832
+ });
833
+ const show_banner_handler_showConsentBanner = os.consent.showBanner.handler(({ context })=>{
834
+ const typedContext = context;
835
+ const headers = typedContext.headers;
836
+ if (!headers) throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('LOCATION_DETECTION_FAILED', {
837
+ data: {
838
+ reason: 'No headers found in request context'
839
+ }
840
+ });
841
+ const normalizeHeader = (value)=>{
842
+ if (!value) return null;
843
+ return Array.isArray(value) ? value[0] ?? null : value;
844
+ };
845
+ const countryCode = normalizeHeader(headers.get('cf-ipcountry')) ?? normalizeHeader(headers.get('x-vercel-ip-country')) ?? normalizeHeader(headers.get('x-amz-cf-ipcountry')) ?? normalizeHeader(headers.get('x-country-code'));
846
+ const regionCode = normalizeHeader(headers.get('x-vercel-ip-country-region')) ?? normalizeHeader(headers.get('x-region-code'));
847
+ const { showConsentBanner, jurisdictionCode, message } = checkJurisdiction(countryCode);
848
+ return {
849
+ showConsentBanner,
850
+ jurisdiction: {
851
+ code: jurisdictionCode,
852
+ message
853
+ },
854
+ location: {
855
+ countryCode,
856
+ regionCode
857
+ }
858
+ };
859
+ });
860
+ function checkJurisdiction(countryCode) {
861
+ const jurisdictions = {
862
+ EU: new Set([
863
+ 'AT',
864
+ 'BE',
865
+ 'BG',
866
+ 'HR',
867
+ 'CY',
868
+ 'CZ',
869
+ 'DK',
870
+ 'EE',
871
+ 'FI',
872
+ 'FR',
873
+ 'DE',
874
+ 'GR',
875
+ 'HU',
876
+ 'IE',
877
+ 'IT',
878
+ 'LV',
879
+ 'LT',
880
+ 'LU',
881
+ 'MT',
882
+ 'NL',
883
+ 'PL',
884
+ 'PT',
885
+ 'RO',
886
+ 'SK',
887
+ 'SI',
888
+ 'ES',
889
+ 'SE'
890
+ ]),
891
+ EEA: new Set([
892
+ 'IS',
893
+ 'NO',
894
+ 'LI'
895
+ ]),
896
+ UK: new Set([
897
+ 'GB'
898
+ ]),
899
+ CH: new Set([
900
+ 'CH'
901
+ ]),
902
+ BR: new Set([
903
+ 'BR'
904
+ ]),
905
+ CA: new Set([
906
+ 'CA'
907
+ ]),
908
+ AU: new Set([
909
+ 'AU'
910
+ ]),
911
+ JP: new Set([
912
+ 'JP'
913
+ ]),
914
+ KR: new Set([
915
+ 'KR'
916
+ ])
917
+ };
918
+ let showConsentBanner = false;
919
+ let jurisdictionCode = 'NONE';
920
+ if (countryCode) {
921
+ const jurisdictionMap = [
922
+ {
923
+ sets: [
924
+ jurisdictions.EU,
925
+ jurisdictions.EEA,
926
+ jurisdictions.UK
927
+ ],
928
+ code: 'GDPR'
929
+ },
930
+ {
931
+ sets: [
932
+ jurisdictions.CH
933
+ ],
934
+ code: 'CH'
935
+ },
936
+ {
937
+ sets: [
938
+ jurisdictions.BR
939
+ ],
940
+ code: 'BR'
941
+ },
942
+ {
943
+ sets: [
944
+ jurisdictions.CA
945
+ ],
946
+ code: 'PIPEDA'
947
+ },
948
+ {
949
+ sets: [
950
+ jurisdictions.AU
951
+ ],
952
+ code: 'AU'
953
+ },
954
+ {
955
+ sets: [
956
+ jurisdictions.JP
957
+ ],
958
+ code: 'APPI'
959
+ },
960
+ {
961
+ sets: [
962
+ jurisdictions.KR
963
+ ],
964
+ code: 'PIPA'
965
+ }
966
+ ];
967
+ for (const { sets, code } of jurisdictionMap)if (sets.some((set)=>set.has(countryCode))) {
968
+ showConsentBanner = true;
969
+ jurisdictionCode = code;
970
+ break;
971
+ }
972
+ }
973
+ const message = JurisdictionMessages[jurisdictionCode];
974
+ return {
975
+ showConsentBanner,
976
+ jurisdictionCode,
977
+ message
978
+ };
979
+ }
980
+ const verifyConsent = os.consent.verify.handler(async ({ input, context })=>{
981
+ const typedContext = context;
982
+ const logger = typedContext.logger;
983
+ logger.info('Handling verify-consent request');
984
+ const { type, subjectId, externalSubjectId, domain, policyId, preferences } = input;
985
+ logger.debug('Request parameters', {
986
+ type,
987
+ subjectId,
988
+ externalSubjectId,
989
+ domain,
990
+ policyId,
991
+ preferences
992
+ });
993
+ try {
994
+ const subject = await typedContext.registry.findOrCreateSubject({
995
+ subjectId,
996
+ externalSubjectId,
997
+ ipAddress: typedContext.ipAddress || 'unknown'
998
+ });
999
+ if (!subject) throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('SUBJECT_NOT_FOUND', {
1000
+ data: {
1001
+ subjectId,
1002
+ externalSubjectId
1003
+ }
1004
+ });
1005
+ const domainRecord = await typedContext.registry.findDomain(domain);
1006
+ if (!domainRecord) throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('DOMAIN_NOT_FOUND', {
1007
+ data: {
1008
+ domain
1009
+ }
1010
+ });
1011
+ if ('cookie_banner' === type && (!preferences || 0 === preferences.length)) throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('COOKIE_BANNER_PREFERENCES_REQUIRED', {
1012
+ data: {
1013
+ type: 'cookie_banner'
1014
+ }
1015
+ });
1016
+ const purposePromises = preferences?.map((purpose)=>typedContext.registry.findConsentPurposeByCode(purpose));
1017
+ const rawPurposes = await Promise.all(purposePromises ?? []);
1018
+ const purposeIds = rawPurposes.filter((purpose)=>null !== purpose).map((purpose)=>purpose.id);
1019
+ if (purposeIds.length !== (preferences?.length ?? 0)) throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('PURPOSES_NOT_FOUND', {
1020
+ data: {
1021
+ preferences: preferences ?? [],
1022
+ foundPurposes: rawPurposes.filter((p)=>null !== p).map((p)=>p.code)
1023
+ }
1024
+ });
1025
+ if (policyId) {
1026
+ const policy = await typedContext.registry.findConsentPolicyById(policyId);
1027
+ if (!policy || policy.type !== type) throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('POLICY_NOT_FOUND', {
1028
+ data: {
1029
+ policyId,
1030
+ type
1031
+ }
1032
+ });
1033
+ return await checkPolicyConsent({
1034
+ policyId: policy.id,
1035
+ subjectId: subject.id,
1036
+ domainId: domainRecord.id,
1037
+ purposeIds,
1038
+ type,
1039
+ context: typedContext
1040
+ });
1041
+ }
1042
+ const latestPolicy = await typedContext.registry.findOrCreatePolicy(type);
1043
+ if (!latestPolicy) throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('POLICY_NOT_FOUND', {
1044
+ data: {
1045
+ policyId: 'latest',
1046
+ type
1047
+ }
1048
+ });
1049
+ return await checkPolicyConsent({
1050
+ policyId: latestPolicy.id,
1051
+ subjectId: subject.id,
1052
+ domainId: domainRecord.id,
1053
+ purposeIds,
1054
+ type,
1055
+ context: typedContext
1056
+ });
1057
+ } catch (error) {
1058
+ logger.error('Error in verify-consent handler', {
1059
+ error: error instanceof Error ? error.message : String(error),
1060
+ errorType: error instanceof Error ? error.constructor.name : typeof error
1061
+ });
1062
+ if (error instanceof __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError) throw error;
1063
+ throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('INTERNAL_SERVER_ERROR', {
1064
+ message: error instanceof Error ? error.message : String(error)
1065
+ });
1066
+ }
1067
+ });
1068
+ async function checkPolicyConsent({ policyId, subjectId, domainId, purposeIds, type, context }) {
1069
+ const { registry, adapter } = context;
1070
+ const rawConsents = await adapter.findMany({
1071
+ model: 'consent',
1072
+ where: [
1073
+ {
1074
+ field: 'subjectId',
1075
+ value: subjectId
1076
+ },
1077
+ {
1078
+ field: 'policyId',
1079
+ value: policyId
1080
+ },
1081
+ {
1082
+ field: 'domainId',
1083
+ value: domainId
1084
+ }
1085
+ ],
1086
+ sortBy: {
1087
+ field: 'givenAt',
1088
+ direction: 'desc'
1089
+ }
1090
+ });
1091
+ const filteredConsents = rawConsents.filter((consent)=>{
1092
+ if (!purposeIds) return true;
1093
+ return purposeIds.every((id)=>consent.purposeIds.some((purposeId)=>purposeId === id));
1094
+ });
1095
+ await registry.createAuditLog({
1096
+ subjectId,
1097
+ entityType: 'consent_policy',
1098
+ entityId: policyId,
1099
+ actionType: 'verify_consent',
1100
+ metadata: {
1101
+ type,
1102
+ policyId,
1103
+ purposeIds,
1104
+ success: 0 !== filteredConsents.length,
1105
+ ...filteredConsents.length > 0 ? {
1106
+ consentId: filteredConsents[0]?.id
1107
+ } : {}
1108
+ }
1109
+ });
1110
+ if (0 === rawConsents.length) throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('NO_CONSENT_FOUND', {
1111
+ data: {
1112
+ policyId,
1113
+ subjectId,
1114
+ domainId
1115
+ }
1116
+ });
1117
+ if (0 === filteredConsents.length) throw new __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__.ORPCError('NO_CONSENT_FOUND', {
1118
+ data: {
1119
+ policyId,
1120
+ subjectId,
1121
+ domainId
1122
+ }
1123
+ });
1124
+ return {
1125
+ isValid: true,
1126
+ consent: filteredConsents[0]
1127
+ };
1128
+ }
1129
+ const consentHandlers = {
1130
+ post: postConsent,
1131
+ showBanner: show_banner_handler_showConsentBanner,
1132
+ verify: verifyConsent
1133
+ };
1134
+ var package_namespaceObject = JSON.parse('{"i8":"1.1.0-canary.0"}');
1135
+ const statusHandler = os.meta.status.handler(({ context })=>{
1136
+ const typedContext = context;
1137
+ const headers = typedContext.headers;
1138
+ const normalizeHeader = (value)=>{
1139
+ if (!value) return null;
1140
+ return Array.isArray(value) ? value[0] ?? null : value;
1141
+ };
1142
+ const countryCode = normalizeHeader(headers?.get('cf-ipcountry')) ?? normalizeHeader(headers?.get('x-vercel-ip-country')) ?? normalizeHeader(headers?.get('x-amz-cf-ipcountry')) ?? normalizeHeader(headers?.get('x-country-code'));
1143
+ const regionCode = normalizeHeader(headers?.get('x-vercel-ip-country-region')) ?? normalizeHeader(headers?.get('x-region-code'));
1144
+ return {
1145
+ status: 'ok',
1146
+ version: package_namespaceObject.i8,
1147
+ timestamp: new Date(),
1148
+ storage: {
1149
+ type: typedContext.adapter?.id ?? 'MemoryAdapter',
1150
+ available: !!typedContext.adapter
1151
+ },
1152
+ client: {
1153
+ ip: typedContext.ipAddress ?? null,
1154
+ userAgent: typedContext.userAgent ?? null,
1155
+ region: {
1156
+ countryCode,
1157
+ regionCode
1158
+ }
1159
+ }
1160
+ };
1161
+ });
1162
+ const metaHandlers = {
1163
+ status: statusHandler
1164
+ };
1165
+ const router = os.router({
1166
+ consent: consentHandlers,
1167
+ meta: metaHandlers
1168
+ });
1169
+ export { router };