@c15t/backend 1.0.5 → 1.2.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 (462) hide show
  1. package/.turbo/turbo-build.log +33 -39
  2. package/.turbo/turbo-fmt.log +3 -3
  3. package/.turbo/turbo-test.log +531 -0
  4. package/coverage/coverage-final.json +84 -0
  5. package/coverage/coverage-summary.json +85 -0
  6. package/coverage/html/backend/index.html +116 -0
  7. package/coverage/html/backend/rslib.config.ts.html +415 -0
  8. package/coverage/html/backend/src/contracts/consent/index.html +161 -0
  9. package/coverage/html/backend/src/contracts/consent/index.ts.html +112 -0
  10. package/coverage/html/backend/src/contracts/consent/post.contract.ts.html +559 -0
  11. package/coverage/html/backend/src/contracts/consent/show-banner.contract.ts.html +220 -0
  12. package/coverage/html/backend/src/contracts/consent/verify.contract.ts.html +463 -0
  13. package/coverage/html/backend/src/contracts/index.html +116 -0
  14. package/coverage/html/backend/src/contracts/index.ts.html +139 -0
  15. package/coverage/html/backend/src/contracts/meta/index.html +131 -0
  16. package/coverage/html/backend/src/contracts/meta/index.ts.html +100 -0
  17. package/coverage/html/backend/src/contracts/meta/status.contract.ts.html +196 -0
  18. package/coverage/html/backend/src/contracts/shared/index.html +116 -0
  19. package/coverage/html/backend/src/contracts/shared/jurisdiction.schema.ts.html +175 -0
  20. package/coverage/html/backend/src/core.ts.html +1624 -0
  21. package/coverage/html/backend/src/handlers/consent/index.html +161 -0
  22. package/coverage/html/backend/src/handlers/consent/index.ts.html +112 -0
  23. package/coverage/html/backend/src/handlers/consent/post.handler.ts.html +889 -0
  24. package/coverage/html/backend/src/handlers/consent/show-banner.handler.ts.html +535 -0
  25. package/coverage/html/backend/src/handlers/consent/verify.handler.ts.html +1000 -0
  26. package/coverage/html/backend/src/handlers/meta/index.html +131 -0
  27. package/coverage/html/backend/src/handlers/meta/index.ts.html +100 -0
  28. package/coverage/html/backend/src/handlers/meta/status.handler.ts.html +226 -0
  29. package/coverage/html/backend/src/index.html +161 -0
  30. package/coverage/html/backend/src/init.ts.html +1018 -0
  31. package/coverage/html/backend/src/pkgs/api-router/hooks/index.html +116 -0
  32. package/coverage/html/backend/src/pkgs/api-router/hooks/processor.ts.html +544 -0
  33. package/coverage/html/backend/src/pkgs/api-router/index.html +116 -0
  34. package/coverage/html/backend/src/pkgs/api-router/telemetry.ts.html +334 -0
  35. package/coverage/html/backend/src/pkgs/api-router/utils/cors.ts.html +304 -0
  36. package/coverage/html/backend/src/pkgs/api-router/utils/index.html +131 -0
  37. package/coverage/html/backend/src/pkgs/api-router/utils/ip.ts.html +361 -0
  38. package/coverage/html/backend/src/pkgs/data-model/fields/field-factory.ts.html +709 -0
  39. package/coverage/html/backend/src/pkgs/data-model/fields/id-generator.ts.html +256 -0
  40. package/coverage/html/backend/src/pkgs/data-model/fields/index.html +161 -0
  41. package/coverage/html/backend/src/pkgs/data-model/fields/superjson-utils.ts.html +136 -0
  42. package/coverage/html/backend/src/pkgs/data-model/fields/zod-fields.ts.html +496 -0
  43. package/coverage/html/backend/src/pkgs/data-model/hooks/create-hooks.ts.html +349 -0
  44. package/coverage/html/backend/src/pkgs/data-model/hooks/index.html +176 -0
  45. package/coverage/html/backend/src/pkgs/data-model/hooks/update-hooks.ts.html +358 -0
  46. package/coverage/html/backend/src/pkgs/data-model/hooks/update-many-hooks.ts.html +613 -0
  47. package/coverage/html/backend/src/pkgs/data-model/hooks/utils.ts.html +538 -0
  48. package/coverage/html/backend/src/pkgs/data-model/hooks/with-hooks-factory.ts.html +289 -0
  49. package/coverage/html/backend/src/pkgs/db-adapters/adapter-factory.ts.html +289 -0
  50. package/coverage/html/backend/src/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.ts.html +2203 -0
  51. package/coverage/html/backend/src/pkgs/db-adapters/adapters/drizzle-adapter/index.html +116 -0
  52. package/coverage/html/backend/src/pkgs/db-adapters/adapters/index.html +116 -0
  53. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/dialect.ts.html +670 -0
  54. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/index.html +131 -0
  55. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.ts.html +3634 -0
  56. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/tests/index.html +116 -0
  57. package/coverage/html/backend/src/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.ts.html +1417 -0
  58. package/coverage/html/backend/src/pkgs/db-adapters/adapters/memory-adapter/index.html +116 -0
  59. package/coverage/html/backend/src/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.ts.html +2071 -0
  60. package/coverage/html/backend/src/pkgs/db-adapters/adapters/prisma-adapter/index.html +116 -0
  61. package/coverage/html/backend/src/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.ts.html +1834 -0
  62. package/coverage/html/backend/src/pkgs/db-adapters/adapters/test.ts.html +316 -0
  63. package/coverage/html/backend/src/pkgs/db-adapters/index.html +131 -0
  64. package/coverage/html/backend/src/pkgs/db-adapters/utils.ts.html +238 -0
  65. package/coverage/html/backend/src/pkgs/migrations/get-migration.ts.html +343 -0
  66. package/coverage/html/backend/src/pkgs/migrations/get-schema/get-schema.ts.html +217 -0
  67. package/coverage/html/backend/src/pkgs/migrations/get-schema/index.html +146 -0
  68. package/coverage/html/backend/src/pkgs/migrations/get-schema/process-fields.ts.html +280 -0
  69. package/coverage/html/backend/src/pkgs/migrations/get-schema/process-tables.ts.html +289 -0
  70. package/coverage/html/backend/src/pkgs/migrations/index.html +176 -0
  71. package/coverage/html/backend/src/pkgs/migrations/migration-builders.ts.html +595 -0
  72. package/coverage/html/backend/src/pkgs/migrations/migration-execution.ts.html +301 -0
  73. package/coverage/html/backend/src/pkgs/migrations/schema-comparison.ts.html +694 -0
  74. package/coverage/html/backend/src/pkgs/migrations/type-mapping.ts.html +817 -0
  75. package/coverage/html/backend/src/pkgs/results/core/error-class.ts.html +976 -0
  76. package/coverage/html/backend/src/pkgs/results/core/error-codes.ts.html +703 -0
  77. package/coverage/html/backend/src/pkgs/results/core/index.html +146 -0
  78. package/coverage/html/backend/src/pkgs/results/core/tracing.ts.html +280 -0
  79. package/coverage/html/backend/src/pkgs/results/create-telemetry-options.ts.html +271 -0
  80. package/coverage/html/backend/src/pkgs/results/index.html +131 -0
  81. package/coverage/html/backend/src/pkgs/results/orpc-error-handler.ts.html +496 -0
  82. package/coverage/html/backend/src/pkgs/results/results/index.html +131 -0
  83. package/coverage/html/backend/src/pkgs/results/results/recovery-utils.ts.html +628 -0
  84. package/coverage/html/backend/src/pkgs/results/results/result-helpers.ts.html +1234 -0
  85. package/coverage/html/backend/src/pkgs/utils/env.ts.html +337 -0
  86. package/coverage/html/backend/src/pkgs/utils/index.html +146 -0
  87. package/coverage/html/backend/src/pkgs/utils/logger.ts.html +199 -0
  88. package/coverage/html/backend/src/pkgs/utils/url.ts.html +400 -0
  89. package/coverage/html/backend/src/router.ts.html +109 -0
  90. package/coverage/html/backend/src/schema/audit-log/index.html +146 -0
  91. package/coverage/html/backend/src/schema/audit-log/registry.ts.html +436 -0
  92. package/coverage/html/backend/src/schema/audit-log/schema.ts.html +223 -0
  93. package/coverage/html/backend/src/schema/audit-log/table.ts.html +640 -0
  94. package/coverage/html/backend/src/schema/consent/index.html +146 -0
  95. package/coverage/html/backend/src/schema/consent/registry.ts.html +616 -0
  96. package/coverage/html/backend/src/schema/consent/schema.ts.html +238 -0
  97. package/coverage/html/backend/src/schema/consent/table.ts.html +748 -0
  98. package/coverage/html/backend/src/schema/consent-policy/index.html +146 -0
  99. package/coverage/html/backend/src/schema/consent-policy/registry.ts.html +1063 -0
  100. package/coverage/html/backend/src/schema/consent-policy/schema.ts.html +265 -0
  101. package/coverage/html/backend/src/schema/consent-policy/table.ts.html +535 -0
  102. package/coverage/html/backend/src/schema/consent-purpose/index.html +146 -0
  103. package/coverage/html/backend/src/schema/consent-purpose/registry.ts.html +589 -0
  104. package/coverage/html/backend/src/schema/consent-purpose/schema.ts.html +259 -0
  105. package/coverage/html/backend/src/schema/consent-purpose/table.ts.html +547 -0
  106. package/coverage/html/backend/src/schema/consent-record/index.html +131 -0
  107. package/coverage/html/backend/src/schema/consent-record/schema.ts.html +211 -0
  108. package/coverage/html/backend/src/schema/consent-record/table.ts.html +457 -0
  109. package/coverage/html/backend/src/schema/create-registry.ts.html +148 -0
  110. package/coverage/html/backend/src/schema/definition.ts.html +685 -0
  111. package/coverage/html/backend/src/schema/domain/index.html +146 -0
  112. package/coverage/html/backend/src/schema/domain/registry.ts.html +973 -0
  113. package/coverage/html/backend/src/schema/domain/schema.ts.html +214 -0
  114. package/coverage/html/backend/src/schema/domain/table.ts.html +496 -0
  115. package/coverage/html/backend/src/schema/index.html +146 -0
  116. package/coverage/html/backend/src/schema/schemas.ts.html +166 -0
  117. package/coverage/html/backend/src/schema/subject/index.html +146 -0
  118. package/coverage/html/backend/src/schema/subject/registry.ts.html +973 -0
  119. package/coverage/html/backend/src/schema/subject/schema.ts.html +208 -0
  120. package/coverage/html/backend/src/schema/subject/table.ts.html +499 -0
  121. package/coverage/html/backend/src/server.ts.html +475 -0
  122. package/coverage/html/backend/src/testing/contract-testing.ts.html +1348 -0
  123. package/coverage/html/backend/src/testing/index.html +116 -0
  124. package/coverage/html/base.css +224 -0
  125. package/coverage/html/block-navigation.js +87 -0
  126. package/coverage/html/favicon.png +0 -0
  127. package/coverage/html/index.html +626 -0
  128. package/coverage/html/prettify.css +1 -0
  129. package/coverage/html/prettify.js +2 -0
  130. package/coverage/html/sort-arrow-sprite.png +0 -0
  131. package/coverage/html/sorter.js +196 -0
  132. package/dist/contracts/consent/index.d.ts +401 -0
  133. package/dist/contracts/consent/index.d.ts.map +1 -0
  134. package/dist/contracts/consent/index.test.d.ts +2 -0
  135. package/dist/contracts/consent/index.test.d.ts.map +1 -0
  136. package/dist/contracts/consent/post.contract.d.ts +212 -0
  137. package/dist/contracts/consent/post.contract.d.ts.map +1 -0
  138. package/dist/contracts/consent/post.contract.test.d.ts +2 -0
  139. package/dist/contracts/consent/post.contract.test.d.ts.map +1 -0
  140. package/dist/contracts/consent/show-banner.contract.d.ts +45 -0
  141. package/dist/contracts/consent/show-banner.contract.d.ts.map +1 -0
  142. package/dist/contracts/consent/show-banner.contract.test.d.ts +2 -0
  143. package/dist/contracts/consent/show-banner.contract.test.d.ts.map +1 -0
  144. package/dist/contracts/consent/verify.contract.d.ts +147 -0
  145. package/dist/contracts/consent/verify.contract.d.ts.map +1 -0
  146. package/dist/contracts/consent/verify.contract.test.d.ts +2 -0
  147. package/dist/contracts/consent/verify.contract.test.d.ts.map +1 -0
  148. package/dist/contracts/index.d.ts +963 -0
  149. package/dist/contracts/index.d.ts.map +1 -0
  150. package/dist/contracts/meta/index.d.ts +78 -0
  151. package/dist/contracts/meta/index.d.ts.map +1 -0
  152. package/dist/contracts/meta/index.test.d.ts +2 -0
  153. package/dist/contracts/meta/index.test.d.ts.map +1 -0
  154. package/dist/contracts/meta/status.contract.d.ts +77 -0
  155. package/dist/contracts/meta/status.contract.d.ts.map +1 -0
  156. package/dist/contracts/meta/status.contract.test.d.ts +2 -0
  157. package/dist/contracts/meta/status.contract.test.d.ts.map +1 -0
  158. package/dist/contracts/shared/jurisdiction.schema.d.ts +24 -0
  159. package/dist/contracts/shared/jurisdiction.schema.d.ts.map +1 -0
  160. package/dist/core.cjs +3584 -0
  161. package/dist/core.d.ts +533 -76
  162. package/dist/core.d.ts.map +1 -1
  163. package/dist/{index.js → core.js} +1163 -1286
  164. package/dist/handlers/consent/index.d.ts +401 -0
  165. package/dist/handlers/consent/index.d.ts.map +1 -0
  166. package/dist/handlers/consent/post.handler.d.ts +234 -0
  167. package/dist/handlers/consent/post.handler.d.ts.map +1 -0
  168. package/dist/handlers/consent/show-banner.handler.d.ts +57 -0
  169. package/dist/handlers/consent/show-banner.handler.d.ts.map +1 -0
  170. package/dist/handlers/consent/show-banner.handler.test.d.ts +2 -0
  171. package/dist/handlers/consent/show-banner.handler.test.d.ts.map +1 -0
  172. package/dist/handlers/consent/verify.handler.d.ts +169 -0
  173. package/dist/handlers/consent/verify.handler.d.ts.map +1 -0
  174. package/dist/handlers/meta/index.d.ts +78 -0
  175. package/dist/handlers/meta/index.d.ts.map +1 -0
  176. package/dist/handlers/meta/status.handler.d.ts +76 -0
  177. package/dist/handlers/meta/status.handler.d.ts.map +1 -0
  178. package/dist/init.d.ts.map +1 -1
  179. package/dist/pkgs/api-router/hooks/processor.d.ts.map +1 -1
  180. package/dist/pkgs/api-router/types/router-props.d.ts +1 -1
  181. package/dist/pkgs/api-router/types/router-props.d.ts.map +1 -1
  182. package/dist/pkgs/api-router/utils/cors.d.ts +1 -1
  183. package/dist/pkgs/api-router/utils/cors.d.ts.map +1 -1
  184. package/dist/pkgs/data-model/fields/field-types.d.ts +1 -1
  185. package/dist/pkgs/data-model/fields/zod-fields.d.ts +32 -32
  186. package/dist/pkgs/data-model/index.cjs +1433 -1799
  187. package/dist/pkgs/data-model/index.js +20 -385
  188. package/dist/pkgs/data-model/schema/index.cjs +1402 -1768
  189. package/dist/pkgs/data-model/schema/index.js +20 -385
  190. package/dist/pkgs/db-adapters/adapter-factory.d.ts +2 -2
  191. package/dist/pkgs/db-adapters/adapter-factory.d.ts.map +1 -1
  192. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.d.ts +4 -4
  193. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/index.cjs +19 -151
  194. package/dist/pkgs/db-adapters/adapters/drizzle-adapter/index.js +19 -151
  195. package/dist/pkgs/db-adapters/adapters/kysely-adapter/dialect.d.ts +1 -1
  196. package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.cjs +17 -149
  197. package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.js +17 -149
  198. package/dist/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.d.ts +2 -2
  199. package/dist/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.d.ts.map +1 -1
  200. package/dist/pkgs/db-adapters/adapters/memory-adapter/index.cjs +17 -149
  201. package/dist/pkgs/db-adapters/adapters/memory-adapter/index.js +17 -149
  202. package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.cjs +19 -151
  203. package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.js +19 -151
  204. package/dist/pkgs/db-adapters/index.cjs +31 -153
  205. package/dist/pkgs/db-adapters/index.js +31 -153
  206. package/dist/pkgs/migrations/get-schema/get-schema.d.ts +2 -2
  207. package/dist/pkgs/migrations/get-schema/index.d.ts +1 -1
  208. package/dist/pkgs/migrations/index.cjs +30 -153
  209. package/dist/pkgs/migrations/index.js +30 -153
  210. package/dist/pkgs/migrations/schema-comparison.d.ts.map +1 -1
  211. package/dist/pkgs/results/core/error-class.d.ts +23 -21
  212. package/dist/pkgs/results/core/error-class.d.ts.map +1 -1
  213. package/dist/pkgs/results/index.cjs +17 -150
  214. package/dist/pkgs/results/index.d.ts +0 -3
  215. package/dist/pkgs/results/index.d.ts.map +1 -1
  216. package/dist/pkgs/results/index.js +17 -138
  217. package/dist/pkgs/results/orpc-error-handler.d.ts +65 -0
  218. package/dist/pkgs/results/orpc-error-handler.d.ts.map +1 -0
  219. package/dist/pkgs/results/types.d.ts +7 -7
  220. package/dist/pkgs/results/types.d.ts.map +1 -1
  221. package/dist/pkgs/types/context.d.ts +15 -4
  222. package/dist/pkgs/types/context.d.ts.map +1 -1
  223. package/dist/pkgs/types/endpoints.d.ts +3 -4
  224. package/dist/pkgs/types/endpoints.d.ts.map +1 -1
  225. package/dist/pkgs/types/options.d.ts +2 -3
  226. package/dist/pkgs/types/options.d.ts.map +1 -1
  227. package/dist/pkgs/types/plugins.d.ts +2 -3
  228. package/dist/pkgs/types/plugins.d.ts.map +1 -1
  229. package/dist/pkgs/utils/index.d.ts +1 -0
  230. package/dist/pkgs/utils/index.d.ts.map +1 -1
  231. package/dist/pkgs/utils/logger.d.ts +16 -0
  232. package/dist/pkgs/utils/logger.d.ts.map +1 -0
  233. package/dist/router.cjs +1213 -0
  234. package/dist/router.d.ts +480 -0
  235. package/dist/router.d.ts.map +1 -0
  236. package/dist/router.js +1169 -0
  237. package/dist/schema/audit-log/table.d.ts +1 -1
  238. package/dist/schema/consent/table.d.ts +1 -1
  239. package/dist/schema/consent-policy/registry.d.ts +12 -12
  240. package/dist/schema/consent-policy/schema.d.ts +6 -6
  241. package/dist/schema/consent-policy/table.d.ts +7 -7
  242. package/dist/schema/consent-purpose/registry.d.ts +6 -6
  243. package/dist/schema/consent-purpose/schema.d.ts +6 -6
  244. package/dist/schema/consent-purpose/table.d.ts +7 -7
  245. package/dist/schema/consent-record/table.d.ts +1 -1
  246. package/dist/schema/create-registry.d.ts +32 -32
  247. package/dist/schema/definition.d.ts +19 -19
  248. package/dist/schema/domain/registry.d.ts +10 -10
  249. package/dist/schema/domain/schema.d.ts +5 -5
  250. package/dist/schema/domain/table.d.ts +6 -6
  251. package/dist/schema/index.cjs +1409 -1775
  252. package/dist/schema/index.js +20 -385
  253. package/dist/schema/schemas.d.ts +19 -19
  254. package/dist/schema/subject/registry.d.ts +4 -4
  255. package/dist/schema/subject/schema.d.ts +2 -2
  256. package/dist/schema/subject/table.d.ts +3 -3
  257. package/dist/server.d.ts +2 -0
  258. package/dist/server.d.ts.map +1 -0
  259. package/dist/testing/contract-testing.d.ts +37 -0
  260. package/dist/testing/contract-testing.d.ts.map +1 -0
  261. package/dist/types/context.d.ts +1 -1
  262. package/dist/types/index.d.ts +2 -2
  263. package/dist/types/options.d.ts +33 -2
  264. package/dist/types/options.d.ts.map +1 -1
  265. package/dist/types/plugins.d.ts +3 -4
  266. package/dist/types/plugins.d.ts.map +1 -1
  267. package/package.json +22 -30
  268. package/rslib.config.ts +2 -5
  269. package/src/contracts/consent/index.test.ts +5 -0
  270. package/src/contracts/consent/index.ts +9 -0
  271. package/src/contracts/consent/post.contract.test.ts +526 -0
  272. package/src/contracts/consent/post.contract.ts +160 -0
  273. package/src/contracts/consent/show-banner.contract.test.ts +214 -0
  274. package/src/contracts/consent/show-banner.contract.ts +45 -0
  275. package/src/contracts/consent/verify.contract.test.ts +185 -0
  276. package/src/contracts/consent/verify.contract.ts +126 -0
  277. package/src/contracts/index.ts +18 -0
  278. package/src/contracts/meta/index.test.ts +5 -0
  279. package/src/contracts/meta/index.ts +5 -0
  280. package/src/contracts/meta/status.contract.test.ts +338 -0
  281. package/src/contracts/meta/status.contract.ts +37 -0
  282. package/src/contracts/shared/jurisdiction.schema.ts +30 -0
  283. package/src/core.ts +451 -159
  284. package/src/handlers/consent/index.ts +9 -0
  285. package/src/handlers/consent/post.handler.ts +273 -0
  286. package/src/handlers/consent/show-banner.handler.test.ts +148 -0
  287. package/src/handlers/consent/show-banner.handler.ts +150 -0
  288. package/src/handlers/consent/verify.handler.ts +305 -0
  289. package/src/handlers/meta/index.ts +5 -0
  290. package/src/handlers/meta/status.handler.ts +47 -0
  291. package/src/init.ts +8 -5
  292. package/src/pkgs/api-router/hooks/__tests__/processor.test.ts +6 -0
  293. package/src/pkgs/api-router/hooks/processor.ts +2 -0
  294. package/src/pkgs/api-router/types/router-props.ts +1 -1
  295. package/src/pkgs/api-router/utils/cors.ts +1 -1
  296. package/src/pkgs/data-model/fields/field-types.ts +1 -1
  297. package/src/pkgs/data-model/fields/id-generator.ts +1 -1
  298. package/src/pkgs/db-adapters/README.md +3 -3
  299. package/src/pkgs/db-adapters/adapter-factory.ts +8 -4
  300. package/src/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.ts +13 -13
  301. package/src/pkgs/db-adapters/adapters/kysely-adapter/dialect.ts +1 -1
  302. package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/postgres.test.ts +1 -1
  303. package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/sqlite.test.ts +1 -1
  304. package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.ts +2 -2
  305. package/src/pkgs/migrations/get-migration.ts +3 -3
  306. package/src/pkgs/migrations/get-schema/get-schema.ts +2 -2
  307. package/src/pkgs/migrations/get-schema/index.ts +1 -1
  308. package/src/pkgs/migrations/migration-builders.ts +2 -2
  309. package/src/pkgs/migrations/migration-execution.ts +2 -2
  310. package/src/pkgs/migrations/schema-comparison.ts +5 -4
  311. package/src/pkgs/results/__tests__/error-class.test.ts +8 -7
  312. package/src/pkgs/results/core/error-class.ts +31 -43
  313. package/src/pkgs/results/index.ts +0 -10
  314. package/src/pkgs/results/orpc-error-handler.ts +137 -0
  315. package/src/pkgs/results/types.ts +8 -7
  316. package/src/pkgs/types/context.ts +18 -4
  317. package/src/pkgs/types/endpoints.ts +3 -5
  318. package/src/pkgs/types/options.ts +2 -3
  319. package/src/pkgs/types/plugins.ts +2 -3
  320. package/src/pkgs/utils/index.ts +1 -0
  321. package/src/pkgs/utils/logger.ts +38 -0
  322. package/src/router.ts +8 -0
  323. package/src/schema/audit-log/table.ts +1 -1
  324. package/src/schema/consent/table.ts +1 -1
  325. package/src/schema/consent-policy/table.ts +1 -1
  326. package/src/schema/consent-purpose/table.ts +1 -1
  327. package/src/schema/consent-record/table.ts +1 -1
  328. package/src/schema/definition.ts +2 -2
  329. package/src/schema/domain/table.ts +1 -1
  330. package/src/schema/subject/table.ts +1 -1
  331. package/src/server.ts +130 -0
  332. package/src/testing/contract-testing.ts +437 -0
  333. package/src/types/context.ts +1 -1
  334. package/src/types/index.ts +2 -2
  335. package/src/types/options.ts +38 -2
  336. package/src/types/plugins.ts +3 -4
  337. package/dist/index.cjs +0 -3701
  338. package/dist/index.d.ts +0 -11
  339. package/dist/index.d.ts.map +0 -1
  340. package/dist/init.test.d.ts +0 -2
  341. package/dist/init.test.d.ts.map +0 -1
  342. package/dist/integrations/cloudflare.cjs +0 -312
  343. package/dist/integrations/cloudflare.d.ts +0 -32
  344. package/dist/integrations/cloudflare.d.ts.map +0 -1
  345. package/dist/integrations/cloudflare.js +0 -278
  346. package/dist/integrations/next.cjs +0 -276
  347. package/dist/integrations/next.d.ts +0 -68
  348. package/dist/integrations/next.d.ts.map +0 -1
  349. package/dist/integrations/next.js +0 -239
  350. package/dist/integrations/node.cjs +0 -257
  351. package/dist/integrations/node.d.ts +0 -29
  352. package/dist/integrations/node.d.ts.map +0 -1
  353. package/dist/integrations/node.js +0 -223
  354. package/dist/pkgs/api-router/index.d.ts +0 -9
  355. package/dist/pkgs/api-router/index.d.ts.map +0 -1
  356. package/dist/pkgs/api-router/utils/define-route.d.ts +0 -87
  357. package/dist/pkgs/api-router/utils/define-route.d.ts.map +0 -1
  358. package/dist/pkgs/logger/__tests__/console-formatter.test.d.ts +0 -2
  359. package/dist/pkgs/logger/__tests__/console-formatter.test.d.ts.map +0 -1
  360. package/dist/pkgs/logger/__tests__/integration.test.d.ts +0 -2
  361. package/dist/pkgs/logger/__tests__/integration.test.d.ts.map +0 -1
  362. package/dist/pkgs/logger/__tests__/log-levels.test.d.ts +0 -2
  363. package/dist/pkgs/logger/__tests__/log-levels.test.d.ts.map +0 -1
  364. package/dist/pkgs/logger/__tests__/logger-factory.test.d.ts +0 -2
  365. package/dist/pkgs/logger/__tests__/logger-factory.test.d.ts.map +0 -1
  366. package/dist/pkgs/logger/__tests__/result-logging.test.d.ts +0 -2
  367. package/dist/pkgs/logger/__tests__/result-logging.test.d.ts.map +0 -1
  368. package/dist/pkgs/logger/__tests__/types.test.d.ts +0 -2
  369. package/dist/pkgs/logger/__tests__/types.test.d.ts.map +0 -1
  370. package/dist/pkgs/logger/console-formatter.d.ts +0 -56
  371. package/dist/pkgs/logger/console-formatter.d.ts.map +0 -1
  372. package/dist/pkgs/logger/index.cjs +0 -240
  373. package/dist/pkgs/logger/index.d.ts +0 -35
  374. package/dist/pkgs/logger/index.d.ts.map +0 -1
  375. package/dist/pkgs/logger/index.js +0 -185
  376. package/dist/pkgs/logger/log-levels.d.ts +0 -29
  377. package/dist/pkgs/logger/log-levels.d.ts.map +0 -1
  378. package/dist/pkgs/logger/logger-factory.d.ts +0 -42
  379. package/dist/pkgs/logger/logger-factory.d.ts.map +0 -1
  380. package/dist/pkgs/logger/result-logging.d.ts +0 -71
  381. package/dist/pkgs/logger/result-logging.d.ts.map +0 -1
  382. package/dist/pkgs/logger/telemetry.d.ts +0 -14
  383. package/dist/pkgs/logger/telemetry.d.ts.map +0 -1
  384. package/dist/pkgs/logger/types.d.ts +0 -121
  385. package/dist/pkgs/logger/types.d.ts.map +0 -1
  386. package/dist/pkgs/results/__tests__/retrieval-pipeline.test.d.ts +0 -2
  387. package/dist/pkgs/results/__tests__/retrieval-pipeline.test.d.ts.map +0 -1
  388. package/dist/pkgs/results/__tests__/validation-pipeline.test.d.ts +0 -2
  389. package/dist/pkgs/results/__tests__/validation-pipeline.test.d.ts.map +0 -1
  390. package/dist/pkgs/results/h3-integration.d.ts +0 -52
  391. package/dist/pkgs/results/h3-integration.d.ts.map +0 -1
  392. package/dist/pkgs/results/pipeline/retrieval-pipeline.d.ts +0 -101
  393. package/dist/pkgs/results/pipeline/retrieval-pipeline.d.ts.map +0 -1
  394. package/dist/pkgs/results/pipeline/validation-pipeline.d.ts +0 -89
  395. package/dist/pkgs/results/pipeline/validation-pipeline.d.ts.map +0 -1
  396. package/dist/response-types.d.ts +0 -19
  397. package/dist/response-types.d.ts.map +0 -1
  398. package/dist/routes/__test__/index.test.d.ts +0 -17
  399. package/dist/routes/__test__/index.test.d.ts.map +0 -1
  400. package/dist/routes/__test__/set-consent.test.d.ts +0 -2
  401. package/dist/routes/__test__/set-consent.test.d.ts.map +0 -1
  402. package/dist/routes/__test__/show-consent-banner.test.d.ts +0 -2
  403. package/dist/routes/__test__/show-consent-banner.test.d.ts.map +0 -1
  404. package/dist/routes/__test__/status.test.d.ts +0 -2
  405. package/dist/routes/__test__/status.test.d.ts.map +0 -1
  406. package/dist/routes/__test__/verify-consent.test.d.ts +0 -2
  407. package/dist/routes/__test__/verify-consent.test.d.ts.map +0 -1
  408. package/dist/routes/index.d.ts +0 -3
  409. package/dist/routes/index.d.ts.map +0 -1
  410. package/dist/routes/set-consent.d.ts +0 -89
  411. package/dist/routes/set-consent.d.ts.map +0 -1
  412. package/dist/routes/show-consent-banner.d.ts +0 -15
  413. package/dist/routes/show-consent-banner.d.ts.map +0 -1
  414. package/dist/routes/status.d.ts +0 -44
  415. package/dist/routes/status.d.ts.map +0 -1
  416. package/dist/routes/types.d.ts +0 -7
  417. package/dist/routes/types.d.ts.map +0 -1
  418. package/dist/routes/verify-consent.d.ts +0 -38
  419. package/dist/routes/verify-consent.d.ts.map +0 -1
  420. package/src/docs/ADVANCED_JSON_HANDLING.md +0 -99
  421. package/src/docs/neverthrow.md +0 -171
  422. package/src/index.ts +0 -34
  423. package/src/init.test.ts +0 -219
  424. package/src/integrations/cloudflare.ts +0 -269
  425. package/src/integrations/next.ts +0 -204
  426. package/src/integrations/node.ts +0 -141
  427. package/src/pkgs/api-router/index.ts +0 -148
  428. package/src/pkgs/api-router/types/h3.d.ts +0 -42
  429. package/src/pkgs/api-router/utils/define-route.ts +0 -410
  430. package/src/pkgs/logger/README.md +0 -213
  431. package/src/pkgs/logger/__tests__/console-formatter.test.ts +0 -67
  432. package/src/pkgs/logger/__tests__/integration.test.ts +0 -184
  433. package/src/pkgs/logger/__tests__/log-levels.test.ts +0 -77
  434. package/src/pkgs/logger/__tests__/logger-factory.test.ts +0 -156
  435. package/src/pkgs/logger/__tests__/result-logging.test.ts +0 -209
  436. package/src/pkgs/logger/__tests__/types.test.ts +0 -94
  437. package/src/pkgs/logger/console-formatter.ts +0 -75
  438. package/src/pkgs/logger/doc.md +0 -569
  439. package/src/pkgs/logger/index.ts +0 -59
  440. package/src/pkgs/logger/log-levels.ts +0 -46
  441. package/src/pkgs/logger/logger-factory.ts +0 -121
  442. package/src/pkgs/logger/result-logging.ts +0 -134
  443. package/src/pkgs/logger/telemetry.ts +0 -96
  444. package/src/pkgs/logger/types.ts +0 -138
  445. package/src/pkgs/results/__tests__/retrieval-pipeline.test.ts +0 -157
  446. package/src/pkgs/results/__tests__/validation-pipeline.test.ts +0 -151
  447. package/src/pkgs/results/h3-integration.ts +0 -142
  448. package/src/pkgs/results/pipeline/retrieval-pipeline.ts +0 -188
  449. package/src/pkgs/results/pipeline/validation-pipeline.ts +0 -164
  450. package/src/plugins/.keep +0 -0
  451. package/src/response-types.ts +0 -29
  452. package/src/routes/__test__/index.test.ts +0 -112
  453. package/src/routes/__test__/set-consent.test.ts +0 -242
  454. package/src/routes/__test__/show-consent-banner.test.ts +0 -98
  455. package/src/routes/__test__/status.test.ts +0 -64
  456. package/src/routes/__test__/verify-consent.test.ts +0 -266
  457. package/src/routes/index.ts +0 -12
  458. package/src/routes/set-consent.ts +0 -249
  459. package/src/routes/show-consent-banner.ts +0 -131
  460. package/src/routes/status.ts +0 -61
  461. package/src/routes/types.ts +0 -7
  462. package/src/routes/verify-consent.ts +0 -206
@@ -1,8 +1,8 @@
1
1
  import { type Kysely, type Migration, sql } from 'kysely';
2
2
  import { beforeEach, expect, test } from 'vitest';
3
3
 
4
+ import type { Logger } from '@doubletie/logger';
4
5
  import type { Adapter } from '~/pkgs/db-adapters';
5
- import type { Logger } from '~/pkgs/logger';
6
6
  import type { C15TOptions } from '~/types';
7
7
  import type { KyselyDatabaseType } from '../index';
8
8
  import type { Database } from '../types';
@@ -36,7 +36,7 @@ export const expectedTables = [
36
36
  ];
37
37
 
38
38
  /**
39
- * Helper to create C15T options for a database
39
+ * Helper to create c15t options for a database
40
40
  */
41
41
  export function createOptions(dbConfig: DbConfig): C15TOptions {
42
42
  return {
@@ -1,5 +1,5 @@
1
1
  import { createKyselyAdapter } from '~/pkgs/db-adapters';
2
- import { createLogger } from '~/pkgs/logger';
2
+ import { getLogger } from '~/pkgs/utils/logger';
3
3
  import type { C15TOptions } from '~/types';
4
4
  import { buildColumnAddMigrations } from './migration-builders';
5
5
  import { buildTableCreateMigrations } from './migration-builders';
@@ -12,7 +12,7 @@ import type { MigrationResult } from './types';
12
12
  * This is the main entry point for the migration system. It orchestrates
13
13
  * the entire process from connecting to the database to generating migrations.
14
14
  *
15
- * @param config - C15T configuration containing database connection and schema details
15
+ * @param config - c15t configuration containing database connection and schema details
16
16
  *
17
17
  * @returns MigrationResult containing:
18
18
  * - toBeCreated: Tables that need to be created
@@ -37,7 +37,7 @@ import type { MigrationResult } from './types';
37
37
  export async function getMigrations(
38
38
  config: C15TOptions
39
39
  ): Promise<MigrationResult> {
40
- const logger = createLogger(config.logger);
40
+ const logger = getLogger(config.logger);
41
41
 
42
42
  // Initialize database connection
43
43
  let { kysely: db, databaseType: dbType } = await createKyselyAdapter(config);
@@ -4,13 +4,13 @@ import { processTablesIntoSchema } from './process-tables';
4
4
  import type { SchemaDefinition } from './types';
5
5
 
6
6
  /**
7
- * Generates a complete database schema from the C15T configuration
7
+ * Generates a complete database schema from the c15t configuration
8
8
  *
9
9
  * This function serves as the main entry point for schema generation.
10
10
  * It retrieves table definitions from the consent module and processes
11
11
  * them into a structured schema representation.
12
12
  *
13
- * @param config - The complete C15T configuration
13
+ * @param config - The complete c15t configuration
14
14
  * @returns A structured schema definition with fields and table properties
15
15
  *
16
16
  * @example
@@ -2,7 +2,7 @@
2
2
  * Schema Generation Module
3
3
  *
4
4
  * This module handles the generation and processing of database schemas
5
- * based on the C15T configuration. It transforms table definitions into
5
+ * based on the c15t configuration. It transforms table definitions into
6
6
  * a structured schema representation that can be used for database operations.
7
7
  *
8
8
  * Example usage:
@@ -3,7 +3,7 @@ import type {
3
3
  Database,
4
4
  KyselyDatabaseType,
5
5
  } from '~/pkgs/db-adapters/adapters/kysely-adapter/types';
6
- import { createLogger } from '~/pkgs/logger';
6
+ import { getLogger } from '~/pkgs/utils/logger';
7
7
  import type { C15TOptions } from '~/types';
8
8
  import { getType } from './type-mapping';
9
9
  import type { ColumnsToAdd, MigrationOperation, TableToCreate } from './types';
@@ -83,7 +83,7 @@ export function buildTableCreateMigrations(
83
83
  toBeCreated: TableToCreate[],
84
84
  dbType: KyselyDatabaseType
85
85
  ): MigrationOperation[] {
86
- const logger = createLogger();
86
+ const logger = getLogger();
87
87
  const migrations: MigrationOperation[] = [];
88
88
 
89
89
  // Process each table that needs to be created
@@ -1,4 +1,4 @@
1
- import { createLogger } from '~/pkgs/logger';
1
+ import { getLogger } from '~/pkgs/utils/logger';
2
2
  import type { MigrationOperation } from './types';
3
3
 
4
4
  /**
@@ -8,7 +8,7 @@ import type { MigrationOperation } from './types';
8
8
  * @returns Object with runMigrations and compileMigrations functions
9
9
  */
10
10
  export function createMigrationExecutors(migrations: MigrationOperation[]) {
11
- const logger = createLogger();
11
+ const logger = getLogger();
12
12
 
13
13
  /**
14
14
  * Executes all migration operations against the database
@@ -1,9 +1,10 @@
1
+ import type { LoggerOptions } from '@doubletie/logger';
1
2
  import type { TableMetadata } from 'kysely';
2
3
  import type { Field } from '~/pkgs/data-model';
3
4
  import type { KyselyDatabaseType } from '~/pkgs/db-adapters/adapters/kysely-adapter/types';
4
- import { createLogger } from '~/pkgs/logger';
5
+ import { getLogger } from '~/pkgs/utils/logger';
5
6
  import type { C15TOptions } from '~/types';
6
- import type { LoggerOptions } from '../logger';
7
+
7
8
  import { getSchema } from './get-schema';
8
9
  import { matchType } from './type-mapping';
9
10
  import type {
@@ -44,7 +45,7 @@ export function analyzeSchemaChanges(
44
45
  dbType: KyselyDatabaseType
45
46
  ): { toBeCreated: TableToCreate[]; toBeAdded: ColumnsToAdd[] } {
46
47
  const betterAuthSchema = getSchema(config);
47
- const logger = createLogger(config.logger as LoggerOptions);
48
+ const logger = getLogger(config.logger as LoggerOptions);
48
49
  const toBeCreated: TableToCreate[] = [];
49
50
  const toBeAdded: ColumnsToAdd[] = [];
50
51
 
@@ -160,7 +161,7 @@ function handleExistingTable(
160
161
  table: TableMetadata,
161
162
  toBeAdded: ColumnsToAdd[],
162
163
  dbType: KyselyDatabaseType,
163
- logger: ReturnType<typeof createLogger>
164
+ logger: ReturnType<typeof getLogger>
164
165
  ): void {
165
166
  // Collection of fields that need to be added to the existing table
166
167
  const toBeAddedFields: Record<string, Field> = {};
@@ -59,7 +59,7 @@ describe('DoubleTieError', () => {
59
59
  expect(error.message).toContain('HTTP error 404');
60
60
  });
61
61
 
62
- it('should extract error details from response data', async () => {
62
+ it('should extract error details from response data', () => {
63
63
  const responseData = {
64
64
  message: 'Resource not found',
65
65
  code: ERROR_CODES.NOT_FOUND,
@@ -101,7 +101,7 @@ describe('DoubleTieError', () => {
101
101
  });
102
102
 
103
103
  describe('toJSON', () => {
104
- it('should serialize error to JSON with H3 compatible structure', () => {
104
+ it('should serialize error to JSON with oRPC compatible structure', () => {
105
105
  const error = new DoubleTieError('Test error', {
106
106
  code: ERROR_CODES.BAD_REQUEST,
107
107
  status: 400,
@@ -111,11 +111,12 @@ describe('DoubleTieError', () => {
111
111
 
112
112
  const errorJson = error.toJSON();
113
113
 
114
- expect(errorJson.statusCode).toBe(400);
114
+ expect(errorJson.status).toBe(400);
115
115
  expect(errorJson.message).toBe('Test error');
116
- expect(errorJson.data?.code).toBe(ERROR_CODES.BAD_REQUEST);
117
- expect(errorJson.data?.category).toBe(ERROR_CATEGORIES.VALIDATION);
118
- expect(errorJson.data?.meta).toEqual({ field: 'username' });
116
+ expect(errorJson.code).toBe(ERROR_CODES.BAD_REQUEST);
117
+ expect(errorJson.data.category).toBe(ERROR_CATEGORIES.VALIDATION);
118
+ expect(errorJson.data.meta).toEqual({ field: 'username' });
119
+ expect(errorJson.defined).toBe(true);
119
120
  });
120
121
 
121
122
  it('should include validation error message when present', () => {
@@ -128,7 +129,7 @@ describe('DoubleTieError', () => {
128
129
  const errorJson = error.toJSON();
129
130
 
130
131
  expect(errorJson.message).toBe('Field X is required');
131
- expect(errorJson.data?.originalMessage).toBe('Validation failed');
132
+ expect(errorJson.data.originalMessage).toBe('Validation failed');
132
133
  });
133
134
  });
134
135
 
@@ -1,12 +1,12 @@
1
- import { H3Error } from 'h3';
1
+ import { ORPCError } from '@orpc/server';
2
2
  import type { DoubleTieErrorOptions, ErrorMessageType } from '../types';
3
3
  import { ERROR_CATEGORIES, ERROR_CODES } from './error-codes';
4
4
  import { withSpan } from './tracing';
5
5
 
6
6
  /**
7
- * Custom error class for DoubleTie errors that extends H3Error.
7
+ * Custom error class for DoubleTie errors that extends ORPCError.
8
8
  *
9
- * This class directly extends H3Error to provide seamless integration with H3.js
9
+ * This class directly extends ORPCError to provide seamless integration with oRPC
10
10
  * while adding application-specific error properties and context.
11
11
  *
12
12
  * @remarks
@@ -32,18 +32,7 @@ import { withSpan } from './tracing';
32
32
  * }
33
33
  * ```
34
34
  */
35
- export class DoubleTieError extends H3Error<{
36
- code: ErrorMessageType;
37
- category?: string;
38
- meta?: Record<string, unknown>;
39
- originalMessage?: string;
40
- }> {
41
- /**
42
- * Error code as defined in ERROR_CODES or custom error codes.
43
- * Used to uniquely identify the error type.
44
- */
45
- readonly code: ErrorMessageType;
46
-
35
+ export class DoubleTieError extends ORPCError<string, Record<string, unknown>> {
47
36
  /**
48
37
  * Error category that groups related errors.
49
38
  * Defaults to 'unexpected' if not specified.
@@ -58,6 +47,11 @@ export class DoubleTieError extends H3Error<{
58
47
  */
59
48
  readonly meta: Record<string, unknown>;
60
49
 
50
+ /**
51
+ * HTTP status code for the error
52
+ */
53
+ readonly statusCode: number;
54
+
61
55
  /**
62
56
  * Creates a new DoubleTieError instance.
63
57
  *
@@ -89,26 +83,25 @@ export class DoubleTieError extends H3Error<{
89
83
  meta: {},
90
84
  }
91
85
  ) {
92
- super(message, { cause: options.cause });
86
+ // Call ORPCError constructor with code and options
87
+ super(options.code ?? ERROR_CODES.UNKNOWN_ERROR, {
88
+ message,
89
+ cause: options.cause,
90
+ data: options.meta ?? {},
91
+ });
93
92
 
94
- // Initialize properties
95
- this.name = this.constructor.name;
96
- this.code = options.code ?? ERROR_CODES.UNKNOWN_ERROR;
97
- this.statusCode = options.status ?? 500;
93
+ // Set name explicitly
94
+ this.name = 'DoubleTieError';
95
+
96
+ // Initialize additional properties
98
97
  this.category = options.category ?? ERROR_CATEGORIES.UNEXPECTED;
99
98
  this.meta = options.meta ?? {};
100
-
101
- // Set H3Error data property with our structured data
102
- this.data = {
103
- code: this.code,
104
- category: this.category,
105
- meta: this.meta,
106
- };
99
+ this.statusCode = options.status ?? 500;
107
100
 
108
101
  // Add tracing after initialization
109
102
  withSpan('create_doubletie_error', async (span) => {
110
103
  span.setAttributes({
111
- 'error.name': this.name,
104
+ 'error.name': this.constructor.name,
112
105
  'error.message': message,
113
106
  'error.code': this.code,
114
107
  'error.status': this.statusCode,
@@ -143,17 +136,10 @@ export class DoubleTieError extends H3Error<{
143
136
  }
144
137
 
145
138
  /**
146
- * Convert the error to a JSON-serializable object.
139
+ * Convert the error to a JSON-serializable object matching oRPC's error format.
140
+ * Override of the parent ORPCError toJSON method.
147
141
  */
148
- toJSON(): Pick<
149
- H3Error<{
150
- code: string;
151
- category?: string;
152
- meta?: Record<string, unknown>;
153
- originalMessage?: string;
154
- }>,
155
- 'message' | 'data' | 'statusCode' | 'statusMessage'
156
- > {
142
+ toJSON() {
157
143
  // Extract validation error details if present
158
144
  const validationErrorMessage = this.meta?.validationErrors
159
145
  ? String(this.meta.validationErrors)
@@ -167,13 +153,15 @@ export class DoubleTieError extends H3Error<{
167
153
  .filter((line) => line && !line.includes('Error: '))
168
154
  : [];
169
155
 
170
- // Create the result object with proper structure matching H3Error toJSON return type
156
+ // Create the result object with proper structure matching oRPC error format
171
157
  return {
172
- statusCode: this.statusCode,
158
+ code: this.code,
173
159
  message: validationErrorMessage || this.message,
174
- statusMessage: this.statusMessage,
160
+ // oRPC expects a status field rather than statusCode
161
+ status: this.statusCode,
162
+ // Required field in ORPCErrorJSON
163
+ defined: true,
175
164
  data: {
176
- code: this.code,
177
165
  category: this.category,
178
166
  meta: this.meta,
179
167
  ...(process.env.NODE_ENV === 'production' ? {} : { stack: stackTrace }),
@@ -268,7 +256,7 @@ export class DoubleTieError extends H3Error<{
268
256
  const ErrorSubclass = class extends DoubleTieError {
269
257
  constructor(message: string, options: DoubleTieErrorOptions) {
270
258
  super(message, options);
271
- this.name = name;
259
+ Object.defineProperty(this, 'name', { value: name });
272
260
  }
273
261
  };
274
262
 
@@ -113,16 +113,6 @@ export {
113
113
  withFallbackForCategory,
114
114
  } from './results/recovery-utils';
115
115
 
116
- // Export pipeline utilities
117
- export { validationPipeline } from './pipeline/validation-pipeline';
118
- export { retrievalPipeline } from './pipeline/retrieval-pipeline';
119
-
120
- // Export H3.js integration helpers
121
- export {
122
- createH3ErrorHandler,
123
- withH3ErrorHandling,
124
- } from './h3-integration';
125
-
126
116
  // Export telemetry options
127
117
  export {
128
118
  createTelemetryOptions,
@@ -0,0 +1,137 @@
1
+ import { ORPCError } from '@orpc/server';
2
+ import { DoubleTieError } from './core/error-class';
3
+ import { ERROR_CODES } from './core/error-codes';
4
+
5
+ /**
6
+ * Creates an oRPC error handler middleware that properly handles DoubleTieError instances
7
+ *
8
+ * This utility ensures consistent error handling across your oRPC application and
9
+ * properly converts DoubleTieError objects to oRPC-compatible error responses.
10
+ *
11
+ * @returns An oRPC request handler middleware for error handling
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { createORPCErrorHandler } from '@doubletie/results';
16
+ * import { OpenAPIHandler } from '@orpc/server';
17
+ *
18
+ * const handler = new OpenAPIHandler(router);
19
+ *
20
+ * // Register the error handler middleware
21
+ * handler.use(createORPCErrorHandler());
22
+ *
23
+ * // Your routes...
24
+ * ```
25
+ */
26
+ export function createORPCErrorHandler() {
27
+ return (
28
+ request: Request,
29
+ context: { logger?: { error: (message: string, data?: object) => void } }
30
+ ) => {
31
+ // Add error handler to context
32
+ return {
33
+ context: {
34
+ _onError: (error: unknown) => {
35
+ context.logger?.error('Error in oRPC error handler', { error });
36
+
37
+ // Handle DoubleTieError instances
38
+ if (error instanceof DoubleTieError) {
39
+ context.logger?.error('Handling DoubleTieError', {
40
+ code: error.code,
41
+ message: error.message,
42
+ });
43
+
44
+ // Convert DoubleTieError to ORPCError
45
+ throw new ORPCError(error.code, {
46
+ message: error.message,
47
+ cause: error.cause instanceof Error ? error.cause : undefined,
48
+ data: error.meta,
49
+ });
50
+ }
51
+
52
+ // For other errors, create a new ORPCError
53
+ context.logger?.error('Handling generic error', { error });
54
+ throw new ORPCError(ERROR_CODES.INTERNAL_SERVER_ERROR, {
55
+ message: error instanceof Error ? error.message : String(error),
56
+ cause: error instanceof Error ? error : undefined,
57
+ });
58
+ },
59
+ },
60
+ };
61
+ };
62
+ }
63
+
64
+ /**
65
+ * Wraps an oRPC handler with error handling for DoubleTieError
66
+ *
67
+ * @param handler - The handler function to wrap
68
+ * @returns A wrapped handler that automatically handles DoubleTieError instances
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * import { withORPCErrorHandling } from '@doubletie/results';
73
+ * import { os } from '@orpc/server';
74
+ *
75
+ * const getUserHandler = os.handler(async ({ input }) => {
76
+ * // Your handler code that might throw DoubleTieError
77
+ * throw new DoubleTieError('User not found', {
78
+ * code: ERROR_CODES.NOT_FOUND,
79
+ * status: 404
80
+ * });
81
+ * });
82
+ *
83
+ * // Wrap the handler with error handling
84
+ * const safeGetUserHandler = withORPCErrorHandling(getUserHandler);
85
+ * ```
86
+ */
87
+ export function withORPCErrorHandling<TInput, TOutput>(
88
+ handler: (
89
+ input: TInput,
90
+ context: {
91
+ logger?: { error: (message: string, data?: object) => void };
92
+ _onError?: (error: unknown) => unknown;
93
+ }
94
+ ) => Promise<TOutput> | TOutput
95
+ ) {
96
+ return async (
97
+ input: TInput,
98
+ context: {
99
+ logger?: { error: (message: string, data?: object) => void };
100
+ _onError?: (error: unknown) => unknown;
101
+ }
102
+ ) => {
103
+ try {
104
+ return await handler(input, context);
105
+ } catch (error) {
106
+ context.logger?.error('Error caught in withORPCErrorHandling', {
107
+ error,
108
+ });
109
+
110
+ // Handle DoubleTieError instances
111
+ if (error instanceof DoubleTieError) {
112
+ context.logger?.error('Handling DoubleTieError in wrapper', {
113
+ code: error.code,
114
+ message: error.message,
115
+ });
116
+
117
+ // Convert DoubleTieError to ORPCError
118
+ throw new ORPCError(error.code, {
119
+ message: error.message,
120
+ cause: error.cause instanceof Error ? error.cause : undefined,
121
+ data: error.meta,
122
+ });
123
+ }
124
+
125
+ // Use the context error handler if available
126
+ if (context._onError && typeof context._onError === 'function') {
127
+ return context._onError(error);
128
+ }
129
+
130
+ // Create and throw a new ORPCError
131
+ throw new ORPCError(ERROR_CODES.INTERNAL_SERVER_ERROR, {
132
+ message: error instanceof Error ? error.message : String(error),
133
+ cause: error instanceof Error ? error : undefined,
134
+ });
135
+ }
136
+ };
137
+ }
@@ -1,4 +1,4 @@
1
- import type { H3Error } from 'h3';
1
+ import type { ORPCError } from '@orpc/server';
2
2
  import type { Result, ResultAsync } from 'neverthrow';
3
3
 
4
4
  /**
@@ -46,17 +46,13 @@ export type ErrorMessageType = string;
46
46
  *
47
47
  * @remarks
48
48
  * This interface defines the public API of the DoubleTieError class.
49
- * It extends the H3Error class with additional properties and methods
49
+ * It extends the ORPCError class with additional properties and methods
50
50
  * specific to the DoubleTie error handling system.
51
51
  *
52
52
  * @see DoubleTieErrorOptions for the options used to construct a DoubleTieError
53
53
  */
54
54
  export interface DoubleTieError
55
- extends H3Error<{
56
- code: ErrorMessageType;
57
- category?: ErrorCategory;
58
- meta?: Record<string, unknown>;
59
- }> {
55
+ extends ORPCError<string, Record<string, unknown>> {
60
56
  /**
61
57
  * Error code identifying the error type
62
58
  */
@@ -72,6 +68,11 @@ export interface DoubleTieError
72
68
  */
73
69
  readonly meta: Record<string, unknown>;
74
70
 
71
+ /**
72
+ * HTTP status code for the error
73
+ */
74
+ readonly statusCode: number;
75
+
75
76
  /**
76
77
  * Creates a new error instance with additional metadata
77
78
  */
@@ -1,7 +1,6 @@
1
- import type { H3Event } from 'h3';
1
+ import type { createLogger } from '@doubletie/logger';
2
2
  import type { DatabaseHook, EntityName } from '~/pkgs/data-model';
3
3
  import type { Adapter } from '~/pkgs/db-adapters/types';
4
- import type { createLogger } from '~/pkgs/logger';
5
4
  import type { createRegistry } from '~/schema/create-registry';
6
5
  import type { getConsentTables } from '~/schema/definition';
7
6
  import type { DoubleTieOptions } from './options';
@@ -12,7 +11,12 @@ import type { DoubleTieOptions } from './options';
12
11
  * This type extends the standard endpoint context with additional properties
13
12
  * specific to DoubleTie hooks, allowing hooks to access the complete DoubleTie context.
14
13
  */
15
- export type HookEndpointContext = H3Event & {
14
+ export type HookEndpointContext = {
15
+ /**
16
+ * The request object
17
+ */
18
+ request: Request;
19
+
16
20
  /**
17
21
  * The DoubleTie context with possible hook-specific extensions
18
22
  */
@@ -35,7 +39,12 @@ export type HookEndpointContext = H3Event & {
35
39
  * A simplified context type for endpoint handlers that don't need
36
40
  * access to input-specific context properties.
37
41
  */
38
- export type GenericEndpointContext = H3Event & {
42
+ export type GenericEndpointContext = {
43
+ /**
44
+ * The request object
45
+ */
46
+ request: Request;
47
+
39
48
  /**
40
49
  * The DoubleTie application context
41
50
  */
@@ -149,6 +158,11 @@ export interface BaseDoubleTieContext {
149
158
  * User agent of the client
150
159
  */
151
160
  userAgent?: string | null;
161
+
162
+ /**
163
+ * Headers of the request
164
+ */
165
+ headers?: Headers;
152
166
  }
153
167
 
154
168
  /**
@@ -1,5 +1,3 @@
1
- import type { H3Event } from 'h3';
2
-
3
1
  export interface EndpointOptions {
4
2
  /**
5
3
  * Whether authentication is required for this endpoint
@@ -12,12 +10,12 @@ export interface EndpointOptions {
12
10
  middleware?: EndpointMiddleware[];
13
11
  }
14
12
 
15
- export type EndpointMiddleware = (event: H3Event) => Promise<void>;
13
+ export type EndpointMiddleware = (request: Request) => Promise<void>;
16
14
 
17
- export type EndpointHandler = (event: H3Event) => Promise<unknown>;
15
+ export type EndpointHandler = (request: Request) => Promise<unknown>;
18
16
 
19
17
  /**
20
- * Native H3 endpoint interface
18
+ * Native endpoint interface
21
19
  */
22
20
  export interface Endpoint {
23
21
  /**
@@ -1,11 +1,10 @@
1
1
  import type { DatabaseHook } from '~/pkgs/data-model';
2
2
  import type { DatabaseConfiguration } from '~/pkgs/db-adapters/adapters/kysely-adapter/types';
3
3
 
4
+ import type { LoggerOptions } from '@doubletie/logger';
4
5
  import type { Tracer } from '@opentelemetry/api';
5
- import type { H3Event } from 'h3';
6
6
  // Import table configuration types from the schema module
7
7
  import type { TablesConfig } from '~/schema/types';
8
- import type { LoggerOptions } from '../logger';
9
8
  import type { DoubleTiePlugin } from './plugins';
10
9
 
11
10
  /**
@@ -228,6 +227,6 @@ export interface DoubleTieOptions {
228
227
  * Middleware function for processing API requests
229
228
  */
230
229
  export type DoubleTieMiddleware = (
231
- event: H3Event,
230
+ request: Request,
232
231
  next: () => Promise<unknown>
233
232
  ) => Promise<unknown>;
@@ -1,4 +1,3 @@
1
- import type { H3Event } from 'h3';
2
1
  import type { Migration } from 'kysely';
3
2
  import type { Field } from '~/pkgs/data-model';
4
3
  import type { DoubleTieContext, HookEndpointContext } from './context';
@@ -75,12 +74,12 @@ export interface DoubleTiePlugin {
75
74
  /**
76
75
  * Handler for intercepting and potentially modifying incoming requests
77
76
  */
78
- onRequest?: (event: H3Event, ctx: DoubleTieContext) => Promise<unknown>;
77
+ onRequest?: (request: Request, ctx: DoubleTieContext) => Promise<unknown>;
79
78
 
80
79
  /**
81
80
  * Handler for intercepting and potentially modifying outgoing responses
82
81
  */
83
- onResponse?: (event: H3Event, ctx: DoubleTieContext) => Promise<unknown>;
82
+ onResponse?: (response: Response, ctx: DoubleTieContext) => Promise<unknown>;
84
83
 
85
84
  /**
86
85
  * Request lifecycle hooks for executing code before or after endpoint handling
@@ -1,2 +1,3 @@
1
1
  export { env, isProduction, isTest } from './env';
2
2
  export { getBaseURL } from './url';
3
+ export * from './logger';
@@ -0,0 +1,38 @@
1
+ import {
2
+ type LoggerOptions,
3
+ createLogger as createDTLogger,
4
+ } from '@doubletie/logger';
5
+
6
+ let globalLogger: ReturnType<typeof createDTLogger>;
7
+
8
+ /**
9
+ * Gets or creates a global logger instance
10
+ *
11
+ * @param options - Optional logger configuration options
12
+ * @returns The global logger instance
13
+ */
14
+ export function getLogger(
15
+ options?: LoggerOptions
16
+ ): ReturnType<typeof createDTLogger> {
17
+ if (!globalLogger) {
18
+ globalLogger = createDTLogger({
19
+ level: 'info',
20
+ appName: 'c15t',
21
+ ...options,
22
+ });
23
+ }
24
+ return globalLogger;
25
+ }
26
+
27
+ /**
28
+ * Initializes the global logger with specific options
29
+ *
30
+ * @param options - Logger configuration options
31
+ * @returns The initialized global logger instance
32
+ */
33
+ export function initLogger(
34
+ options: LoggerOptions
35
+ ): ReturnType<typeof createDTLogger> {
36
+ globalLogger = createDTLogger(options);
37
+ return globalLogger;
38
+ }
package/src/router.ts ADDED
@@ -0,0 +1,8 @@
1
+ import { os } from './contracts';
2
+ import { consentHandlers } from './handlers/consent';
3
+ import { metaHandlers } from './handlers/meta';
4
+
5
+ export const router = os.router({
6
+ consent: consentHandlers,
7
+ meta: metaHandlers,
8
+ });