@heavybit/shared-lib 1.3.2 → 2.7.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 (366) hide show
  1. package/README.md +261 -0
  2. package/dist/cjs/access/index.js +9 -1
  3. package/dist/cjs/access/index.js.map +1 -1
  4. package/dist/cjs/approvals/index.js +137 -0
  5. package/dist/cjs/approvals/index.js.map +1 -0
  6. package/dist/cjs/audit/index.js +74 -0
  7. package/dist/cjs/audit/index.js.map +1 -0
  8. package/dist/cjs/cache/index.js +90 -16
  9. package/dist/cjs/cache/index.js.map +1 -1
  10. package/dist/cjs/cache/keyspace.js +101 -0
  11. package/dist/cjs/cache/keyspace.js.map +1 -0
  12. package/dist/cjs/common/circuit-breaker.js +74 -0
  13. package/dist/cjs/common/circuit-breaker.js.map +1 -0
  14. package/dist/cjs/common/errors.js +44 -5
  15. package/dist/cjs/common/errors.js.map +1 -1
  16. package/dist/cjs/common/index.js +4 -0
  17. package/dist/cjs/common/index.js.map +1 -1
  18. package/dist/cjs/common/internal-client.js +177 -0
  19. package/dist/cjs/common/internal-client.js.map +1 -0
  20. package/dist/cjs/common/internal-constants.js +12 -0
  21. package/dist/cjs/common/internal-constants.js.map +1 -0
  22. package/dist/cjs/common/internal-service-auth.js +160 -0
  23. package/dist/cjs/common/internal-service-auth.js.map +1 -0
  24. package/dist/cjs/common/money.js +215 -0
  25. package/dist/cjs/common/money.js.map +1 -0
  26. package/dist/cjs/common/phone.js +63 -11
  27. package/dist/cjs/common/phone.js.map +1 -1
  28. package/dist/cjs/common/response.js +78 -5
  29. package/dist/cjs/common/response.js.map +1 -1
  30. package/dist/cjs/common/time.js +28 -2
  31. package/dist/cjs/common/time.js.map +1 -1
  32. package/dist/cjs/config/index.js +140 -20
  33. package/dist/cjs/config/index.js.map +1 -1
  34. package/dist/cjs/context/index.js +49 -0
  35. package/dist/cjs/context/index.js.map +1 -0
  36. package/dist/cjs/contracts/index.js +0 -2
  37. package/dist/cjs/contracts/index.js.map +1 -1
  38. package/dist/cjs/contracts/notification-dispatch.js +87 -63
  39. package/dist/cjs/contracts/notification-dispatch.js.map +1 -1
  40. package/dist/cjs/database/db.js +37 -0
  41. package/dist/cjs/database/db.js.map +1 -0
  42. package/dist/cjs/database/index.js +22 -51
  43. package/dist/cjs/database/index.js.map +1 -1
  44. package/dist/cjs/database/pagination.js +88 -0
  45. package/dist/cjs/database/pagination.js.map +1 -0
  46. package/dist/cjs/database/pool.js +60 -0
  47. package/dist/cjs/database/pool.js.map +1 -0
  48. package/dist/cjs/database/scoped-repository.js +132 -0
  49. package/dist/cjs/database/scoped-repository.js.map +1 -0
  50. package/dist/cjs/database/scopes.js +166 -0
  51. package/dist/cjs/database/scopes.js.map +1 -0
  52. package/dist/cjs/database/table-names.js +14 -0
  53. package/dist/cjs/database/table-names.js.map +1 -0
  54. package/dist/cjs/database/tables.js +71 -0
  55. package/dist/cjs/database/tables.js.map +1 -0
  56. package/dist/cjs/express/auth.js +88 -41
  57. package/dist/cjs/express/auth.js.map +1 -1
  58. package/dist/cjs/express/index.js +3 -0
  59. package/dist/cjs/express/index.js.map +1 -1
  60. package/dist/cjs/express/internal-caller.js +52 -0
  61. package/dist/cjs/express/internal-caller.js.map +1 -0
  62. package/dist/cjs/express/middleware.js +154 -34
  63. package/dist/cjs/express/middleware.js.map +1 -1
  64. package/dist/cjs/express/respond.js +47 -0
  65. package/dist/cjs/express/respond.js.map +1 -0
  66. package/dist/cjs/express/step-up.js +41 -0
  67. package/dist/cjs/express/step-up.js.map +1 -0
  68. package/dist/cjs/http/index.js +3 -71
  69. package/dist/cjs/http/index.js.map +1 -1
  70. package/dist/cjs/identity/index.js +269 -67
  71. package/dist/cjs/identity/index.js.map +1 -1
  72. package/dist/cjs/identity/step-up.js +52 -0
  73. package/dist/cjs/identity/step-up.js.map +1 -0
  74. package/dist/cjs/index.js +7 -0
  75. package/dist/cjs/index.js.map +1 -1
  76. package/dist/cjs/knex/columns.js +36 -0
  77. package/dist/cjs/knex/columns.js.map +1 -0
  78. package/dist/cjs/knex/index.js +26 -43
  79. package/dist/cjs/knex/index.js.map +1 -1
  80. package/dist/cjs/knex/migration-helpers.js +57 -0
  81. package/dist/cjs/knex/migration-helpers.js.map +1 -0
  82. package/dist/cjs/logging/index.js +76 -40
  83. package/dist/cjs/logging/index.js.map +1 -1
  84. package/dist/cjs/logging/redact.js +112 -0
  85. package/dist/cjs/logging/redact.js.map +1 -0
  86. package/dist/cjs/messaging/base-consumer.js +36 -0
  87. package/dist/cjs/messaging/base-consumer.js.map +1 -0
  88. package/dist/cjs/messaging/consumer.js +142 -73
  89. package/dist/cjs/messaging/consumer.js.map +1 -1
  90. package/dist/cjs/messaging/envelope.js +53 -10
  91. package/dist/cjs/messaging/envelope.js.map +1 -1
  92. package/dist/cjs/messaging/idempotency.js +95 -8
  93. package/dist/cjs/messaging/idempotency.js.map +1 -1
  94. package/dist/cjs/messaging/index.js +3 -1
  95. package/dist/cjs/messaging/index.js.map +1 -1
  96. package/dist/cjs/messaging/outbox.js +97 -55
  97. package/dist/cjs/messaging/outbox.js.map +1 -1
  98. package/dist/cjs/messaging/publisher.js +86 -38
  99. package/dist/cjs/messaging/publisher.js.map +1 -1
  100. package/dist/cjs/messaging/staff-notifier.js +36 -44
  101. package/dist/cjs/messaging/staff-notifier.js.map +1 -1
  102. package/dist/cjs/messaging/staff-recipients.js +57 -0
  103. package/dist/cjs/messaging/staff-recipients.js.map +1 -0
  104. package/dist/cjs/messaging/topology.js +41 -5
  105. package/dist/cjs/messaging/topology.js.map +1 -1
  106. package/dist/cjs/rate-limit/index.js +57 -6
  107. package/dist/cjs/rate-limit/index.js.map +1 -1
  108. package/dist/cjs/rate-limit/keys.js +47 -0
  109. package/dist/cjs/rate-limit/keys.js.map +1 -0
  110. package/dist/cjs/socket/index.js +127 -16
  111. package/dist/cjs/socket/index.js.map +1 -1
  112. package/dist/cjs/socket/ticket.js +124 -0
  113. package/dist/cjs/socket/ticket.js.map +1 -0
  114. package/dist/cjs/testing/index.js +23 -14
  115. package/dist/cjs/testing/index.js.map +1 -1
  116. package/dist/cjs/validation/index.js +27 -3
  117. package/dist/cjs/validation/index.js.map +1 -1
  118. package/dist/esm/access/index.js +9 -1
  119. package/dist/esm/access/index.js.map +1 -1
  120. package/dist/esm/approvals/index.js +127 -0
  121. package/dist/esm/approvals/index.js.map +1 -0
  122. package/dist/esm/audit/index.js +70 -0
  123. package/dist/esm/audit/index.js.map +1 -0
  124. package/dist/esm/cache/index.js +70 -13
  125. package/dist/esm/cache/index.js.map +1 -1
  126. package/dist/esm/cache/keyspace.js +95 -0
  127. package/dist/esm/cache/keyspace.js.map +1 -0
  128. package/dist/esm/common/circuit-breaker.js +70 -0
  129. package/dist/esm/common/circuit-breaker.js.map +1 -0
  130. package/dist/esm/common/errors.js +42 -4
  131. package/dist/esm/common/errors.js.map +1 -1
  132. package/dist/esm/common/index.js +4 -0
  133. package/dist/esm/common/index.js.map +1 -1
  134. package/dist/esm/common/internal-client.js +173 -0
  135. package/dist/esm/common/internal-client.js.map +1 -0
  136. package/dist/esm/common/internal-constants.js +9 -0
  137. package/dist/esm/common/internal-constants.js.map +1 -0
  138. package/dist/esm/common/internal-service-auth.js +150 -0
  139. package/dist/esm/common/internal-service-auth.js.map +1 -0
  140. package/dist/esm/common/money.js +207 -0
  141. package/dist/esm/common/money.js.map +1 -0
  142. package/dist/esm/common/phone.js +63 -11
  143. package/dist/esm/common/phone.js.map +1 -1
  144. package/dist/esm/common/response.js +75 -5
  145. package/dist/esm/common/response.js.map +1 -1
  146. package/dist/esm/common/time.js +27 -2
  147. package/dist/esm/common/time.js.map +1 -1
  148. package/dist/esm/config/index.js +136 -19
  149. package/dist/esm/config/index.js.map +1 -1
  150. package/dist/esm/context/index.js +44 -0
  151. package/dist/esm/context/index.js.map +1 -0
  152. package/dist/esm/contracts/index.js +0 -2
  153. package/dist/esm/contracts/index.js.map +1 -1
  154. package/dist/esm/contracts/notification-dispatch.js +85 -62
  155. package/dist/esm/contracts/notification-dispatch.js.map +1 -1
  156. package/dist/esm/database/db.js +32 -0
  157. package/dist/esm/database/db.js.map +1 -0
  158. package/dist/esm/database/index.js +9 -45
  159. package/dist/esm/database/index.js.map +1 -1
  160. package/dist/esm/database/pagination.js +81 -0
  161. package/dist/esm/database/pagination.js.map +1 -0
  162. package/dist/esm/database/pool.js +51 -0
  163. package/dist/esm/database/pool.js.map +1 -0
  164. package/dist/esm/database/scoped-repository.js +128 -0
  165. package/dist/esm/database/scoped-repository.js.map +1 -0
  166. package/dist/esm/database/scopes.js +157 -0
  167. package/dist/esm/database/scopes.js.map +1 -0
  168. package/dist/esm/database/table-names.js +11 -0
  169. package/dist/esm/database/table-names.js.map +1 -0
  170. package/dist/esm/database/tables.js +61 -0
  171. package/dist/esm/database/tables.js.map +1 -0
  172. package/dist/esm/express/auth.js +87 -40
  173. package/dist/esm/express/auth.js.map +1 -1
  174. package/dist/esm/express/index.js +3 -0
  175. package/dist/esm/express/index.js.map +1 -1
  176. package/dist/esm/express/internal-caller.js +49 -0
  177. package/dist/esm/express/internal-caller.js.map +1 -0
  178. package/dist/esm/express/middleware.js +146 -27
  179. package/dist/esm/express/middleware.js.map +1 -1
  180. package/dist/esm/express/respond.js +42 -0
  181. package/dist/esm/express/respond.js.map +1 -0
  182. package/dist/esm/express/step-up.js +38 -0
  183. package/dist/esm/express/step-up.js.map +1 -0
  184. package/dist/esm/http/index.js +3 -70
  185. package/dist/esm/http/index.js.map +1 -1
  186. package/dist/esm/identity/index.js +246 -64
  187. package/dist/esm/identity/index.js.map +1 -1
  188. package/dist/esm/identity/step-up.js +47 -0
  189. package/dist/esm/identity/step-up.js.map +1 -0
  190. package/dist/esm/index.js +7 -0
  191. package/dist/esm/index.js.map +1 -1
  192. package/dist/esm/knex/columns.js +28 -0
  193. package/dist/esm/knex/columns.js.map +1 -0
  194. package/dist/esm/knex/index.js +8 -34
  195. package/dist/esm/knex/index.js.map +1 -1
  196. package/dist/esm/knex/migration-helpers.js +51 -0
  197. package/dist/esm/knex/migration-helpers.js.map +1 -0
  198. package/dist/esm/logging/index.js +68 -39
  199. package/dist/esm/logging/index.js.map +1 -1
  200. package/dist/esm/logging/redact.js +106 -0
  201. package/dist/esm/logging/redact.js.map +1 -0
  202. package/dist/esm/messaging/base-consumer.js +32 -0
  203. package/dist/esm/messaging/base-consumer.js.map +1 -0
  204. package/dist/esm/messaging/consumer.js +139 -71
  205. package/dist/esm/messaging/consumer.js.map +1 -1
  206. package/dist/esm/messaging/envelope.js +50 -10
  207. package/dist/esm/messaging/envelope.js.map +1 -1
  208. package/dist/esm/messaging/idempotency.js +91 -7
  209. package/dist/esm/messaging/idempotency.js.map +1 -1
  210. package/dist/esm/messaging/index.js +3 -1
  211. package/dist/esm/messaging/index.js.map +1 -1
  212. package/dist/esm/messaging/outbox.js +97 -54
  213. package/dist/esm/messaging/outbox.js.map +1 -1
  214. package/dist/esm/messaging/publisher.js +86 -38
  215. package/dist/esm/messaging/publisher.js.map +1 -1
  216. package/dist/esm/messaging/staff-notifier.js +36 -43
  217. package/dist/esm/messaging/staff-notifier.js.map +1 -1
  218. package/dist/esm/messaging/staff-recipients.js +53 -0
  219. package/dist/esm/messaging/staff-recipients.js.map +1 -0
  220. package/dist/esm/messaging/topology.js +39 -4
  221. package/dist/esm/messaging/topology.js.map +1 -1
  222. package/dist/esm/rate-limit/index.js +41 -6
  223. package/dist/esm/rate-limit/index.js.map +1 -1
  224. package/dist/esm/rate-limit/keys.js +43 -0
  225. package/dist/esm/rate-limit/keys.js.map +1 -0
  226. package/dist/esm/socket/index.js +112 -17
  227. package/dist/esm/socket/index.js.map +1 -1
  228. package/dist/esm/socket/ticket.js +117 -0
  229. package/dist/esm/socket/ticket.js.map +1 -0
  230. package/dist/esm/testing/index.js +24 -15
  231. package/dist/esm/testing/index.js.map +1 -1
  232. package/dist/esm/validation/index.js +27 -2
  233. package/dist/esm/validation/index.js.map +1 -1
  234. package/dist/types/access/index.d.ts +9 -3
  235. package/dist/types/access/index.d.ts.map +1 -1
  236. package/dist/types/alerting/index.d.ts +1 -1
  237. package/dist/types/alerting/index.d.ts.map +1 -1
  238. package/dist/types/approvals/index.d.ts +99 -0
  239. package/dist/types/approvals/index.d.ts.map +1 -0
  240. package/dist/types/audit/index.d.ts +82 -0
  241. package/dist/types/audit/index.d.ts.map +1 -0
  242. package/dist/types/cache/index.d.ts +64 -14
  243. package/dist/types/cache/index.d.ts.map +1 -1
  244. package/dist/types/cache/keyspace.d.ts +84 -0
  245. package/dist/types/cache/keyspace.d.ts.map +1 -0
  246. package/dist/types/common/circuit-breaker.d.ts +51 -0
  247. package/dist/types/common/circuit-breaker.d.ts.map +1 -0
  248. package/dist/types/common/errors.d.ts +48 -7
  249. package/dist/types/common/errors.d.ts.map +1 -1
  250. package/dist/types/common/index.d.ts +4 -0
  251. package/dist/types/common/index.d.ts.map +1 -1
  252. package/dist/types/common/internal-client.d.ts +116 -0
  253. package/dist/types/common/internal-client.d.ts.map +1 -0
  254. package/dist/types/common/internal-constants.d.ts +9 -0
  255. package/dist/types/common/internal-constants.d.ts.map +1 -0
  256. package/dist/types/common/internal-service-auth.d.ts +102 -0
  257. package/dist/types/common/internal-service-auth.d.ts.map +1 -0
  258. package/dist/types/common/money.d.ts +104 -0
  259. package/dist/types/common/money.d.ts.map +1 -0
  260. package/dist/types/common/phone.d.ts +45 -6
  261. package/dist/types/common/phone.d.ts.map +1 -1
  262. package/dist/types/common/response.d.ts +66 -5
  263. package/dist/types/common/response.d.ts.map +1 -1
  264. package/dist/types/common/time.d.ts +20 -2
  265. package/dist/types/common/time.d.ts.map +1 -1
  266. package/dist/types/config/index.d.ts +252 -28
  267. package/dist/types/config/index.d.ts.map +1 -1
  268. package/dist/types/context/index.d.ts +39 -0
  269. package/dist/types/context/index.d.ts.map +1 -0
  270. package/dist/types/contracts/index.d.ts +0 -2
  271. package/dist/types/contracts/index.d.ts.map +1 -1
  272. package/dist/types/contracts/notification-dispatch.d.ts +204 -86
  273. package/dist/types/contracts/notification-dispatch.d.ts.map +1 -1
  274. package/dist/types/database/db.d.ts +46 -0
  275. package/dist/types/database/db.d.ts.map +1 -0
  276. package/dist/types/database/index.d.ts +9 -22
  277. package/dist/types/database/index.d.ts.map +1 -1
  278. package/dist/types/database/pagination.d.ts +68 -0
  279. package/dist/types/database/pagination.d.ts.map +1 -0
  280. package/dist/types/database/pool.d.ts +39 -0
  281. package/dist/types/database/pool.d.ts.map +1 -0
  282. package/dist/types/database/scoped-repository.d.ts +92 -0
  283. package/dist/types/database/scoped-repository.d.ts.map +1 -0
  284. package/dist/types/database/scopes.d.ts +159 -0
  285. package/dist/types/database/scopes.d.ts.map +1 -0
  286. package/dist/types/database/table-names.d.ts +13 -0
  287. package/dist/types/database/table-names.d.ts.map +1 -0
  288. package/dist/types/database/tables.d.ts +748 -0
  289. package/dist/types/database/tables.d.ts.map +1 -0
  290. package/dist/types/express/auth.d.ts +63 -11
  291. package/dist/types/express/auth.d.ts.map +1 -1
  292. package/dist/types/express/index.d.ts +3 -0
  293. package/dist/types/express/index.d.ts.map +1 -1
  294. package/dist/types/express/internal-caller.d.ts +53 -0
  295. package/dist/types/express/internal-caller.d.ts.map +1 -0
  296. package/dist/types/express/middleware.d.ts +86 -7
  297. package/dist/types/express/middleware.d.ts.map +1 -1
  298. package/dist/types/express/respond.d.ts +41 -0
  299. package/dist/types/express/respond.d.ts.map +1 -0
  300. package/dist/types/express/step-up.d.ts +38 -0
  301. package/dist/types/express/step-up.d.ts.map +1 -0
  302. package/dist/types/http/index.d.ts +3 -31
  303. package/dist/types/http/index.d.ts.map +1 -1
  304. package/dist/types/identity/index.d.ts +159 -21
  305. package/dist/types/identity/index.d.ts.map +1 -1
  306. package/dist/types/identity/step-up.d.ts +41 -0
  307. package/dist/types/identity/step-up.d.ts.map +1 -0
  308. package/dist/types/index.d.ts +7 -0
  309. package/dist/types/index.d.ts.map +1 -1
  310. package/dist/types/knex/columns.d.ts +15 -0
  311. package/dist/types/knex/columns.d.ts.map +1 -0
  312. package/dist/types/knex/index.d.ts +3 -11
  313. package/dist/types/knex/index.d.ts.map +1 -1
  314. package/dist/types/knex/migration-helpers.d.ts +28 -0
  315. package/dist/types/knex/migration-helpers.d.ts.map +1 -0
  316. package/dist/types/logging/index.d.ts +30 -4
  317. package/dist/types/logging/index.d.ts.map +1 -1
  318. package/dist/types/logging/redact.d.ts +54 -0
  319. package/dist/types/logging/redact.d.ts.map +1 -0
  320. package/dist/types/messaging/base-consumer.d.ts +33 -0
  321. package/dist/types/messaging/base-consumer.d.ts.map +1 -0
  322. package/dist/types/messaging/consumer.d.ts +59 -21
  323. package/dist/types/messaging/consumer.d.ts.map +1 -1
  324. package/dist/types/messaging/envelope.d.ts +50 -11
  325. package/dist/types/messaging/envelope.d.ts.map +1 -1
  326. package/dist/types/messaging/idempotency.d.ts +60 -3
  327. package/dist/types/messaging/idempotency.d.ts.map +1 -1
  328. package/dist/types/messaging/index.d.ts +8 -0
  329. package/dist/types/messaging/index.d.ts.map +1 -1
  330. package/dist/types/messaging/outbox.d.ts +62 -22
  331. package/dist/types/messaging/outbox.d.ts.map +1 -1
  332. package/dist/types/messaging/publisher.d.ts +54 -21
  333. package/dist/types/messaging/publisher.d.ts.map +1 -1
  334. package/dist/types/messaging/staff-notifier.d.ts +69 -38
  335. package/dist/types/messaging/staff-notifier.d.ts.map +1 -1
  336. package/dist/types/messaging/staff-recipients.d.ts +50 -0
  337. package/dist/types/messaging/staff-recipients.d.ts.map +1 -0
  338. package/dist/types/messaging/topology.d.ts +40 -8
  339. package/dist/types/messaging/topology.d.ts.map +1 -1
  340. package/dist/types/rate-limit/index.d.ts +40 -4
  341. package/dist/types/rate-limit/index.d.ts.map +1 -1
  342. package/dist/types/rate-limit/keys.d.ts +52 -0
  343. package/dist/types/rate-limit/keys.d.ts.map +1 -0
  344. package/dist/types/socket/index.d.ts +86 -2
  345. package/dist/types/socket/index.d.ts.map +1 -1
  346. package/dist/types/socket/ticket.d.ts +90 -0
  347. package/dist/types/socket/ticket.d.ts.map +1 -0
  348. package/dist/types/testing/index.d.ts +31 -10
  349. package/dist/types/testing/index.d.ts.map +1 -1
  350. package/dist/types/types/index.d.ts +62 -15
  351. package/dist/types/types/index.d.ts.map +1 -1
  352. package/dist/types/validation/index.d.ts +33 -2
  353. package/dist/types/validation/index.d.ts.map +1 -1
  354. package/package.json +3 -1
  355. package/dist/cjs/contracts/editorial-draft.js +0 -120
  356. package/dist/cjs/contracts/editorial-draft.js.map +0 -1
  357. package/dist/cjs/contracts/upload-import.js +0 -54
  358. package/dist/cjs/contracts/upload-import.js.map +0 -1
  359. package/dist/esm/contracts/editorial-draft.js +0 -117
  360. package/dist/esm/contracts/editorial-draft.js.map +0 -1
  361. package/dist/esm/contracts/upload-import.js +0 -51
  362. package/dist/esm/contracts/upload-import.js.map +0 -1
  363. package/dist/types/contracts/editorial-draft.d.ts +0 -610
  364. package/dist/types/contracts/editorial-draft.d.ts.map +0 -1
  365. package/dist/types/contracts/upload-import.d.ts +0 -96
  366. package/dist/types/contracts/upload-import.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket.d.ts","sourceRoot":"","sources":["../../../src/socket/ticket.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,qEAAqE;AACrE,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAChD,wCAAwC;AACxC,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAKlD,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,GAAG,EAAE,MAAM,CAAC;IACZ,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,8BAA8B;AAC9B,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,0DAA0D;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,yCAAyC;AACzC,MAAM,WAAW,sBAAsB;IACrC,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,gCAAgC;AAChC,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,GAAG,gBAAgB,CAAC;AAE7G,4CAA4C;AAC5C,MAAM,MAAM,kBAAkB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAA;CAAE,CAAC;AAazH;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,sBAAsB,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAoB5H;AAcD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,sBAAsB,GAAG;IAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAA;CAAE,GAAG,kBAAkB,CAelJ;AAED,6DAA6D;AAC7D,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,EAAE,SAAS,MAAM,WAA0B,CAAC;AAEnF;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAIzH"}
@@ -1,6 +1,8 @@
1
+ import { type IdentityProtocol } from '../identity/index.js';
1
2
  import { type EnvelopeMeta } from '../messaging/envelope.js';
2
- import type { CommandBus, EventBus, QueueSendOptions, QueueSender } from '../messaging/publisher.js';
3
+ import type { CommandBus, DelayedSender, EventBus, QueueSendOptions, QueueSender } from '../messaging/publisher.js';
3
4
  import type { AuthUser, EventEnvelope, Logger } from '../types/index.js';
5
+ /** One line captured by {@link RecordingLogger}. */
4
6
  export interface LogLine {
5
7
  level: keyof Logger;
6
8
  message: string;
@@ -16,11 +18,22 @@ export declare class RecordingLogger implements Logger {
16
18
  }
17
19
  /** An AuthUser for tests. */
18
20
  export declare function makeAuthUser(overrides?: Partial<AuthUser>): AuthUser;
19
- /** Gateway-signed identity headers for route tests (use with supertest `.set()`). */
20
- export declare function identityHeaders(user: AuthUser, secret: string): Record<string, string>;
21
- /** Records everything published/sent so tests can assert on events, commands and direct queue sends. */
22
- export declare class RecordingBus implements EventBus, CommandBus, QueueSender {
23
- private readonly source;
21
+ /**
22
+ * Gateway-signed (v2) identity headers for route tests (use with supertest `.set()`). The method and path
23
+ * must match the request the test sends.
24
+ *
25
+ * @example request(app).get('/v1/items').set(identityHeaders({ user, secret, protocol, method: 'GET', path: '/v1/items' }));
26
+ */
27
+ export declare function identityHeaders(input: {
28
+ user: AuthUser;
29
+ secret: string;
30
+ protocol: IdentityProtocol;
31
+ method: string;
32
+ path: string;
33
+ now?: number;
34
+ }): Record<string, string>;
35
+ /** Records everything published/sent so tests can assert on events, commands, queue sends and delayed sends. */
36
+ export declare class RecordingBus implements EventBus, CommandBus, QueueSender, DelayedSender {
24
37
  readonly events: EventEnvelope[];
25
38
  readonly commands: EventEnvelope[];
26
39
  readonly queued: Array<{
@@ -28,14 +41,22 @@ export declare class RecordingBus implements EventBus, CommandBus, QueueSender {
28
41
  payload: unknown;
29
42
  options: QueueSendOptions;
30
43
  }>;
44
+ readonly delayed: Array<{
45
+ queue: string;
46
+ payload: unknown;
47
+ delayMs: number;
48
+ options: QueueSendOptions;
49
+ }>;
31
50
  failWith: Error | null;
32
- constructor(source?: string);
33
- publish<T>(type: string, data: T, meta?: EnvelopeMeta): Promise<EventEnvelope<T>>;
51
+ publish<T extends object>(routingKey: string, data: T, meta?: EnvelopeMeta): Promise<EventEnvelope<T>>;
34
52
  publishEnvelope(envelope: EventEnvelope): Promise<void>;
35
- send<T>(command: string, data: T, meta?: EnvelopeMeta): Promise<EventEnvelope<T>>;
53
+ send<T extends object>(command: string, data: T, meta?: EnvelopeMeta): Promise<EventEnvelope<T>>;
36
54
  sendEnvelope(envelope: EventEnvelope): Promise<void>;
37
55
  sendToQueue(queue: string, payload: unknown, options?: QueueSendOptions): Promise<void>;
38
- eventsOfType(type: string): EventEnvelope[];
56
+ scheduleDelayed(queue: string, payload: unknown, delayMs: number, options?: QueueSendOptions): Promise<void>;
57
+ /** Published events with this routing key. */
58
+ eventsOfType(routingKey: string): EventEnvelope[];
59
+ /** Sent commands with this name. */
39
60
  commandsOfType(command: string): EventEnvelope[];
40
61
  }
41
62
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACrG,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEzE,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,kGAAkG;AAClG,qBAAa,eAAgB,YAAW,MAAM;IAC5C,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,CAAM;IAC/B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI;IAChE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI;IAC/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI;IAC/D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI;CACjE;AAED,6BAA6B;AAC7B,wBAAgB,YAAY,CAAC,SAAS,GAAE,OAAO,CAAC,QAAQ,CAAM,GAAG,QAAQ,CAExE;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEtF;AAED,wGAAwG;AACxG,qBAAa,YAAa,YAAW,QAAQ,EAAE,UAAU,EAAE,WAAW;IAMxD,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,CAAM;IACtC,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAM;IACxC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAAM;IAC5F,QAAQ,EAAE,KAAK,GAAG,IAAI,CAAQ;gBAED,MAAM,SAAS;IAEtC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAOjF,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAOjF,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE;IAI3C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE;CAGjD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,14 @@ export interface AuthUser {
12
12
  scopes: Record<string, string[]>;
13
13
  attrs: Record<string, unknown>;
14
14
  sessionId?: string;
15
+ /** Platform super admin: satisfies every permission check. Set only from the gateway-signed identity. */
16
+ isSuperAdmin?: boolean;
17
+ /** True when the session completed its one-time-code (second factor) check. */
18
+ otpVerified?: boolean;
19
+ /** Epoch milliseconds of the caller's last step-up verification, as verified by the gateway. */
20
+ stepUpAt?: number;
15
21
  }
22
+ /** Offset pagination metadata (page/limit with totals). For large or growing lists prefer {@link CursorPageMeta}. */
16
23
  export interface PaginationMeta {
17
24
  page: number;
18
25
  limit: number;
@@ -21,39 +28,79 @@ export interface PaginationMeta {
21
28
  hasNext: boolean;
22
29
  hasPrev: boolean;
23
30
  }
31
+ /**
32
+ * Cursor (keyset) pagination metadata: no totals or page numbers, so it stays cheap on large tables.
33
+ * `nextCursor` is opaque to clients (it encodes the sort key + an id tie-breaker); `null` on the last page.
34
+ */
35
+ export interface CursorPageMeta {
36
+ limit: number;
37
+ nextCursor: string | null;
38
+ hasMore: boolean;
39
+ }
40
+ /** One page of a cursor-paginated list, as a repository or service returns it. */
41
+ export interface CursorPage<T> {
42
+ data: T[];
43
+ meta: CursorPageMeta;
44
+ }
45
+ /**
46
+ * The standard response envelope. Success: `{ success: true, message, data, meta? }`.
47
+ * Error: see {@link ErrorBody}.
48
+ */
24
49
  export interface ApiResponse<T = unknown> {
25
50
  success: boolean;
26
51
  message: string;
27
52
  code?: string;
28
53
  data?: T;
29
- meta?: PaginationMeta;
54
+ meta?: PaginationMeta | CursorPageMeta;
55
+ errors?: Record<string, string[]>;
56
+ /** Correlation id of the failed request (error bodies only), so support can find the log lines. */
57
+ requestId?: string;
58
+ }
59
+ /**
60
+ * The error body every service returns: `{ success: false, code, message, errors?, requestId? }`.
61
+ * `code` is UPPER_SNAKE_CASE; `errors` maps field paths to messages (validation only); 5xx bodies
62
+ * always carry a generic message.
63
+ */
64
+ export interface ErrorBody {
65
+ success: false;
66
+ code: string;
67
+ message: string;
30
68
  errors?: Record<string, string[]>;
69
+ requestId?: string;
31
70
  }
71
+ /** One page of an offset-paginated list, as a repository or service returns it. */
32
72
  export interface PaginatedResult<T> {
33
73
  data: T[];
34
74
  meta: PaginationMeta;
35
75
  }
76
+ /** Parsed offset-pagination query: 1-based `page` and page size `limit`. */
36
77
  export interface PageQuery {
37
78
  page: number;
38
79
  limit: number;
39
80
  }
40
81
  /** Envelope carried by every domain event. */
41
- export interface EventEnvelope<T = Record<string, unknown>> {
82
+ /**
83
+ * Fields every envelope's `data` carries next to the payload. Payloads must not use these names.
84
+ */
85
+ export interface EnvelopeData {
86
+ /** ULID; the AMQP `messageId` and the consumers' dedupe key. */
42
87
  eventId: string;
43
- type: string;
88
+ /** Payload schema version (starts at 1). */
44
89
  version: number;
45
- occurredAt: string;
46
- source: string;
47
- correlationId?: string;
48
- actor?: {
49
- userId: string | null;
50
- };
51
- aggregate?: {
52
- type: string;
53
- id: string;
54
- version?: number;
55
- };
56
- data: T;
90
+ /** The user whose action raised the message; `null` for the system, absent when unknown. */
91
+ actorUserId?: string | null;
92
+ }
93
+ /**
94
+ * Message envelope `{ routingKey, data, timestamp }`. `data` is the payload plus {@link EnvelopeData};
95
+ * app-specific fields (for example the tenant id) are payload fields the app's schemas define.
96
+ *
97
+ * @example { routingKey: 'thing.created', data: { eventId: '01J…', version: 1, actorUserId: '01J…', thingId: '01J…' }, timestamp: '2026-01-01T00:00:00.000Z' }
98
+ */
99
+ export interface EventEnvelope<T extends object = Record<string, unknown>> {
100
+ routingKey: string;
101
+ data: T & EnvelopeData;
102
+ /** ISO-8601 time the envelope was built. */
103
+ timestamp: string;
57
104
  }
58
105
  /** Minimal logger contract every module accepts (winston, pino and console all satisfy it). */
59
106
  export interface Logger {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,8CAA8C;AAC9C,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAClC,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,IAAI,EAAE,CAAC,CAAC;CACT;AAED,+FAA+F;AAC/F,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { z } from 'zod';
2
+ /** A ULID in canonical form (26 upper-case Crockford base32 chars), as `newId()` makes and `CHAR(26)` stores. */
2
3
  export declare const idSchema: z.ZodString;
4
+ /** Route params `{ id }` where `id` is a canonical ULID. Use with `validate({ params: idParamSchema })`. */
3
5
  export declare const idParamSchema: z.ZodObject<{
4
6
  id: z.ZodString;
5
7
  }, "strip", z.ZodTypeAny, {
@@ -7,6 +9,18 @@ export declare const idParamSchema: z.ZodObject<{
7
9
  }, {
8
10
  id: string;
9
11
  }>;
12
+ /**
13
+ * Alias of {@link idParamSchema} for `validate({ params: idParam })`. Stricter than `z.string().ulid()`:
14
+ * lower-case ULIDs are rejected, so a lookup never misses a stored upper-case id.
15
+ */
16
+ export declare const idParam: z.ZodObject<{
17
+ id: z.ZodString;
18
+ }, "strip", z.ZodTypeAny, {
19
+ id: string;
20
+ }, {
21
+ id: string;
22
+ }>;
23
+ /** Offset pagination query: `page` ≥ 1 (default 1), `limit` 1–100 (default 20). Prefer cursor pagination (D6). */
10
24
  export declare const paginationSchema: z.ZodObject<{
11
25
  page: z.ZodDefault<z.ZodNumber>;
12
26
  limit: z.ZodDefault<z.ZodNumber>;
@@ -17,8 +31,11 @@ export declare const paginationSchema: z.ZodObject<{
17
31
  page?: number | undefined;
18
32
  limit?: number | undefined;
19
33
  }>;
34
+ /** `asc` or `desc`, default `desc`. */
20
35
  export declare const sortOrderSchema: z.ZodDefault<z.ZodEnum<["asc", "desc"]>>;
36
+ /** Trimmed, lower-cased email address, max 191 chars. */
21
37
  export declare const emailSchema: z.ZodString;
38
+ /** Lower-case kebab-case slug, 1–120 chars. */
22
39
  export declare const slugSchema: z.ZodString;
23
40
  /** Length-first password rule (NIST 800-63B): 8–128 chars, no composition rules. Tighten per app if needed. */
24
41
  export declare const passwordSchema: z.ZodString;
@@ -26,9 +43,23 @@ export declare const passwordSchema: z.ZodString;
26
43
  export declare const booleanish: z.ZodEffects<z.ZodUnion<[z.ZodBoolean, z.ZodEnum<["true", "false", "1", "0", "yes", "no"]>]>, boolean, boolean | "0" | "1" | "true" | "false" | "yes" | "no">;
27
44
  /** Comma list or repeated query param → string[]. */
28
45
  export declare const csvList: z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>, string[], string | string[]>;
29
- /** Converts Zod issues into the `{ field: [messages] }` shape used by the error envelope. */
46
+ /**
47
+ * Converts Zod issues into the `{ field: [messages] }` shape used by the error envelope.
48
+ *
49
+ * @param error A Zod error.
50
+ * @returns Messages keyed by dotted field path (`_` for the root).
51
+ * @example zodIssuesToErrors(result.error) // { 'items.0': ['Expected string'] }
52
+ */
30
53
  export declare function zodIssuesToErrors(error: z.ZodError): Record<string, string[]>;
31
- /** Parses `input` or throws a ValidationError (422). */
54
+ /**
55
+ * Parses `input` or throws a ValidationError (422).
56
+ *
57
+ * @param schema Zod schema.
58
+ * @param input Untrusted value.
59
+ * @returns The parsed value.
60
+ * @example const dto = parseOrThrow(createSchema, payload);
61
+ */
32
62
  export declare function parseOrThrow<S extends z.ZodTypeAny>(schema: S, input: unknown): z.infer<S>;
63
+ /** Zod re-exported so services build schemas on the same zod instance as the library. */
33
64
  export { z };
34
65
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,QAAQ,aAA6C,CAAC;AAEnE,eAAO,MAAM,aAAa;;;;;;EAA6B,CAAC;AAExD,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AAEH,eAAO,MAAM,eAAe,0CAA0C,CAAC;AAEvE,eAAO,MAAM,WAAW,aAA0E,CAAC;AAEnG,eAAO,MAAM,UAAU,aAAwF,CAAC;AAEhH,+GAA+G;AAC/G,eAAO,MAAM,cAAc,aAA+F,CAAC;AAE3H,0DAA0D;AAC1D,eAAO,MAAM,UAAU,+JAAoJ,CAAC;AAE5K,qDAAqD;AACrD,eAAO,MAAM,OAAO,uGAA0I,CAAC;AAE/J,6FAA6F;AAC7F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAO7E;AAED,wDAAwD;AACxD,wBAAgB,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAI1F;AAED,OAAO,EAAE,CAAC,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,iHAAiH;AACjH,eAAO,MAAM,QAAQ,aAA6C,CAAC;AAEnE,4GAA4G;AAC5G,eAAO,MAAM,aAAa;;;;;;EAA6B,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,OAAO;;;;;;EAAgB,CAAC;AAErC,kHAAkH;AAClH,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AAEH,uCAAuC;AACvC,eAAO,MAAM,eAAe,0CAA0C,CAAC;AAEvE,yDAAyD;AACzD,eAAO,MAAM,WAAW,aAA0E,CAAC;AAEnG,+CAA+C;AAC/C,eAAO,MAAM,UAAU,aAAwF,CAAC;AAEhH,+GAA+G;AAC/G,eAAO,MAAM,cAAc,aAA+F,CAAC;AAE3H,0DAA0D;AAC1D,eAAO,MAAM,UAAU,+JAAoJ,CAAC;AAE5K,qDAAqD;AACrD,eAAO,MAAM,OAAO,uGAA0I,CAAC;AAE/J;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAO7E;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAI1F;AAED,yFAAyF;AACzF,OAAO,EAAE,CAAC,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heavybit/shared-lib",
3
- "version": "1.3.2",
3
+ "version": "2.7.0",
4
4
  "description": "App-agnostic building blocks for Express/TypeScript microservices: gateway identity, access scoping, RabbitMQ events/commands/RPC with retries and DLQs, outbox, cache-aside, rate limiting, sockets, signing, logging and config.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -137,6 +137,8 @@
137
137
  "argon2": "^0.44.0",
138
138
  "bcryptjs": "^3.0.2",
139
139
  "cors": "^2.8.5",
140
+ "decimal.js": "^10.6.0",
141
+ "drizzle-orm": "^0.45.4",
140
142
  "google-libphonenumber": "^3.2.40",
141
143
  "helmet": "^8.1.0",
142
144
  "ioredis": "^5.4.2",
@@ -1,120 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.editorialDraftSubmitSchema = exports.FACT_KINDS = exports.QUALITY_GATE_NAMES = exports.GATE_VERDICTS = exports.DRAFT_RISKS = exports.DRAFT_SOURCE_ROLES = exports.EDITORIAL_DRAFT_LIMITS = exports.EDITORIAL_DRAFT_SUBMIT = void 0;
4
- const zod_1 = require("zod");
5
- const index_js_1 = require("../validation/index.js");
6
- /**
7
- * The newswire → editorial draft hand-off (design Appendix A.4 plus `paragraphFactIds` and
8
- * `image.uploadId`, decision R14). newswire-service stages it through its outbox; editorial-service
9
- * validates it with the same schema before creating the story. One contract for both sides.
10
- */
11
- exports.EDITORIAL_DRAFT_SUBMIT = 'editorial:draft.submit';
12
- /** Field limits of the contract (editorial's story columns). */
13
- exports.EDITORIAL_DRAFT_LIMITS = {
14
- headline: 200,
15
- excerpt: 400,
16
- tags: 6,
17
- seoTitle: 70,
18
- seoDescription: 170,
19
- /** Reader-facing update note ("Updated with …"), shown under the article byline. */
20
- updateNote: 300,
21
- };
22
- exports.DRAFT_SOURCE_ROLES = ['primary', 'corroborating'];
23
- exports.DRAFT_RISKS = ['low', 'medium', 'high'];
24
- exports.GATE_VERDICTS = ['pass', 'review', 'block'];
25
- /**
26
- * Every quality gate newswire runs on a draft, in design order. A submitted draft carries one result per
27
- * gate; editorial treats a missing one as not passed (auto-publish never runs on an unchecked draft).
28
- */
29
- exports.QUALITY_GATE_NAMES = [
30
- 'originality', 'grounding', 'quote_limits', 'corroboration', 'conflicts',
31
- 'sensitivity', 'category', 'freshness', 'duplicate_of_published', 'length_format',
32
- ];
33
- exports.FACT_KINDS = ['event', 'person', 'date', 'place', 'number', 'quote', 'context'];
34
- const text = zod_1.z.string().trim().min(1);
35
- const httpsUrl = zod_1.z
36
- .string()
37
- .url()
38
- .refine((u) => u.startsWith('https://'), 'Source URL must use https');
39
- const draftSourceSchema = zod_1.z.object({
40
- name: text.max(160),
41
- url: httpsUrl,
42
- publishedAt: zod_1.z.string().datetime({ offset: true }).optional(),
43
- role: zod_1.z.enum(exports.DRAFT_SOURCE_ROLES),
44
- });
45
- const gateResultSchema = zod_1.z.object({
46
- gate: text,
47
- verdict: zod_1.z.enum(exports.GATE_VERDICTS),
48
- reasons: zod_1.z.array(zod_1.z.string()),
49
- metrics: zod_1.z.record(zod_1.z.string(), zod_1.z.number()).optional(),
50
- });
51
- const factSupportSchema = zod_1.z.object({ itemId: index_js_1.idSchema, paragraph: zod_1.z.number().int().min(1) });
52
- const factSchema = zod_1.z.object({
53
- id: text,
54
- statement: text,
55
- kind: zod_1.z.enum(exports.FACT_KINDS),
56
- entities: zod_1.z.array(zod_1.z.string()),
57
- supportedBy: zod_1.z.array(factSupportSchema).min(1),
58
- conflictsWith: zod_1.z.array(zod_1.z.string()),
59
- independentSources: zod_1.z.number().int().min(0),
60
- });
61
- const quoteSchema = factSupportSchema.extend({ text, speaker: text });
62
- const conflictSchema = zod_1.z.object({ description: text, factIds: zod_1.z.array(zod_1.z.string()) });
63
- exports.editorialDraftSubmitSchema = zod_1.z
64
- .object({
65
- draftId: index_js_1.idSchema,
66
- clusterId: index_js_1.idSchema,
67
- headline: text.max(exports.EDITORIAL_DRAFT_LIMITS.headline),
68
- excerpt: text.max(exports.EDITORIAL_DRAFT_LIMITS.excerpt),
69
- paragraphs: zod_1.z.array(text).min(1),
70
- /** The fact-sheet fact ids each paragraph asserts (same length as `paragraphs`). */
71
- paragraphFactIds: zod_1.z.array(zod_1.z.array(zod_1.z.string())),
72
- category: text.max(60),
73
- tags: zod_1.z.array(text.max(40)).max(exports.EDITORIAL_DRAFT_LIMITS.tags),
74
- seo: zod_1.z.object({
75
- title: text.max(exports.EDITORIAL_DRAFT_LIMITS.seoTitle),
76
- description: text.max(exports.EDITORIAL_DRAFT_LIMITS.seoDescription),
77
- }),
78
- social: zod_1.z.object({ facebook: text, x: text, whatsapp: text, instagram: text }),
79
- sources: zod_1.z.array(draftSourceSchema).min(1),
80
- /** An imported or profile cover (upload-service id), or null when the draft has none. */
81
- image: zod_1.z.object({ uploadId: index_js_1.idSchema, credit: text.max(160), alt: text.max(255) }).nullable(),
82
- relatedProfileIds: zod_1.z.array(index_js_1.idSchema),
83
- suggestedProfileIds: zod_1.z.array(index_js_1.idSchema),
84
- review: zod_1.z.object({
85
- confidence: zod_1.z.number().min(0).max(1),
86
- risk: zod_1.z.enum(exports.DRAFT_RISKS),
87
- riskReasons: zod_1.z.array(zod_1.z.string()),
88
- gates: zod_1.z.array(gateResultSchema),
89
- factSheet: zod_1.z.object({
90
- facts: zod_1.z.array(factSchema),
91
- quotes: zod_1.z.array(quoteSchema),
92
- conflicts: zod_1.z.array(conflictSchema),
93
- }),
94
- /** Prompt slug → version used to produce the draft. */
95
- promptVersions: zod_1.z.record(zod_1.z.string(), zod_1.z.number().int().positive()),
96
- }),
97
- /**
98
- * Present when the draft updates a story editorial has already published (Phase 21.2): editorial
99
- * stores it as a pending update on that story instead of creating a new one. Additive and optional.
100
- */
101
- updateOf: zod_1.z
102
- .object({ storyId: index_js_1.idSchema, note: text.max(exports.EDITORIAL_DRAFT_LIMITS.updateNote) })
103
- .optional(),
104
- })
105
- .superRefine((draft, ctx) => {
106
- if (draft.paragraphFactIds.length !== draft.paragraphs.length) {
107
- ctx.addIssue({ code: zod_1.z.ZodIssueCode.custom, path: ['paragraphFactIds'], message: 'Must have one entry per paragraph' });
108
- }
109
- const factIds = new Set(draft.review.factSheet.facts.map((f) => f.id));
110
- draft.paragraphFactIds.forEach((ids, i) => {
111
- for (const id of ids) {
112
- if (!factIds.has(id))
113
- ctx.addIssue({ code: zod_1.z.ZodIssueCode.custom, path: ['paragraphFactIds', i], message: `Unknown fact id ${id}` });
114
- }
115
- });
116
- if (draft.sources.filter((s) => s.role === 'primary').length !== 1) {
117
- ctx.addIssue({ code: zod_1.z.ZodIssueCode.custom, path: ['sources'], message: 'Exactly one source must be primary' });
118
- }
119
- });
120
- //# sourceMappingURL=editorial-draft.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"editorial-draft.js","sourceRoot":"","sources":["../../../src/contracts/editorial-draft.ts"],"names":[],"mappings":"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"}
@@ -1,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.uploadImportFailedSchema = exports.uploadImportCompletedSchema = exports.uploadImportCommandSchema = exports.UPLOAD_IMPORT_LIMITS = exports.UPLOAD_IMPORT_POLICIES = exports.UPLOAD_IMPORT_EVENTS = exports.UPLOAD_IMPORT = void 0;
4
- const zod_1 = require("zod");
5
- const index_js_1 = require("../validation/index.js");
6
- /**
7
- * Licensed image import by URL (Newswire R5, decision R39). newswire-service (and later
8
- * editorial-service) sends `upload:import`; upload-service fetches the file and answers with an
9
- * `upload.import.completed` or `upload.import.failed` event. One contract for both sides.
10
- */
11
- exports.UPLOAD_IMPORT = 'upload:import';
12
- exports.UPLOAD_IMPORT_EVENTS = {
13
- COMPLETED: 'upload.import.completed',
14
- FAILED: 'upload.import.failed',
15
- };
16
- /** Upload policies an import may use. */
17
- exports.UPLOAD_IMPORT_POLICIES = ['news_image'];
18
- /** Field limits of the contract (upload-service's `uploads` columns). */
19
- exports.UPLOAD_IMPORT_LIMITS = {
20
- url: 2048,
21
- ownerType: 50,
22
- licenceHolder: 160,
23
- licenceBasis: 255,
24
- reason: 255,
25
- };
26
- /**
27
- * `upload:import` data. The URL is only length-checked here: upload-service rejects a non-https or
28
- * unsafe URL itself, so the sender hears about it through a `failed` event instead of a dead letter.
29
- */
30
- exports.uploadImportCommandSchema = zod_1.z.object({
31
- /** ULID the outcome event echoes back; upload-service is idempotent on it. */
32
- importId: index_js_1.idSchema,
33
- url: zod_1.z.string().min(1).max(exports.UPLOAD_IMPORT_LIMITS.url),
34
- policy: zod_1.z.enum(exports.UPLOAD_IMPORT_POLICIES),
35
- /** Echoed in the outcome only; the imported upload is a system row with no owner. */
36
- ownerType: zod_1.z.string().min(1).max(exports.UPLOAD_IMPORT_LIMITS.ownerType),
37
- ownerId: index_js_1.idSchema,
38
- licence: zod_1.z.object({
39
- holder: zod_1.z.string().trim().min(1).max(exports.UPLOAD_IMPORT_LIMITS.licenceHolder),
40
- basis: zod_1.z.string().trim().min(1).max(exports.UPLOAD_IMPORT_LIMITS.licenceBasis),
41
- }),
42
- });
43
- exports.uploadImportCompletedSchema = zod_1.z.object({
44
- importId: index_js_1.idSchema,
45
- uploadId: index_js_1.idSchema,
46
- ownerType: zod_1.z.string().min(1).max(exports.UPLOAD_IMPORT_LIMITS.ownerType),
47
- ownerId: index_js_1.idSchema,
48
- });
49
- /** `reason` is a machine code (`too_large`, `http_404`, …; see upload-service `ImportFailureReason`). */
50
- exports.uploadImportFailedSchema = zod_1.z.object({
51
- importId: index_js_1.idSchema,
52
- reason: zod_1.z.string().min(1).max(exports.UPLOAD_IMPORT_LIMITS.reason),
53
- });
54
- //# sourceMappingURL=upload-import.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"upload-import.js","sourceRoot":"","sources":["../../../src/contracts/upload-import.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,qDAAkD;AAElD;;;;GAIG;AACU,QAAA,aAAa,GAAG,eAAe,CAAC;AAEhC,QAAA,oBAAoB,GAAG;IAClC,SAAS,EAAE,yBAAyB;IACpC,MAAM,EAAE,sBAAsB;CACtB,CAAC;AAEX,yCAAyC;AAC5B,QAAA,sBAAsB,GAAG,CAAC,YAAY,CAAU,CAAC;AAG9D,yEAAyE;AAC5D,QAAA,oBAAoB,GAAG;IAClC,GAAG,EAAE,IAAI;IACT,SAAS,EAAE,EAAE;IACb,aAAa,EAAE,GAAG;IAClB,YAAY,EAAE,GAAG;IACjB,MAAM,EAAE,GAAG;CACH,CAAC;AAEX;;;GAGG;AACU,QAAA,yBAAyB,GAAG,OAAC,CAAC,MAAM,CAAC;IAChD,8EAA8E;IAC9E,QAAQ,EAAE,mBAAQ;IAClB,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,4BAAoB,CAAC,GAAG,CAAC;IACpD,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,8BAAsB,CAAC;IACtC,qFAAqF;IACrF,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,4BAAoB,CAAC,SAAS,CAAC;IAChE,OAAO,EAAE,mBAAQ;IACjB,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC;QAChB,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,4BAAoB,CAAC,aAAa,CAAC;QACxE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,4BAAoB,CAAC,YAAY,CAAC;KACvE,CAAC;CACH,CAAC,CAAC;AAEU,QAAA,2BAA2B,GAAG,OAAC,CAAC,MAAM,CAAC;IAClD,QAAQ,EAAE,mBAAQ;IAClB,QAAQ,EAAE,mBAAQ;IAClB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,4BAAoB,CAAC,SAAS,CAAC;IAChE,OAAO,EAAE,mBAAQ;CAClB,CAAC,CAAC;AAEH,yGAAyG;AAC5F,QAAA,wBAAwB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC/C,QAAQ,EAAE,mBAAQ;IAClB,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,4BAAoB,CAAC,MAAM,CAAC;CAC3D,CAAC,CAAC"}
@@ -1,117 +0,0 @@
1
- import { z } from 'zod';
2
- import { idSchema } from '../validation/index.js';
3
- /**
4
- * The newswire → editorial draft hand-off (design Appendix A.4 plus `paragraphFactIds` and
5
- * `image.uploadId`, decision R14). newswire-service stages it through its outbox; editorial-service
6
- * validates it with the same schema before creating the story. One contract for both sides.
7
- */
8
- export const EDITORIAL_DRAFT_SUBMIT = 'editorial:draft.submit';
9
- /** Field limits of the contract (editorial's story columns). */
10
- export const EDITORIAL_DRAFT_LIMITS = {
11
- headline: 200,
12
- excerpt: 400,
13
- tags: 6,
14
- seoTitle: 70,
15
- seoDescription: 170,
16
- /** Reader-facing update note ("Updated with …"), shown under the article byline. */
17
- updateNote: 300,
18
- };
19
- export const DRAFT_SOURCE_ROLES = ['primary', 'corroborating'];
20
- export const DRAFT_RISKS = ['low', 'medium', 'high'];
21
- export const GATE_VERDICTS = ['pass', 'review', 'block'];
22
- /**
23
- * Every quality gate newswire runs on a draft, in design order. A submitted draft carries one result per
24
- * gate; editorial treats a missing one as not passed (auto-publish never runs on an unchecked draft).
25
- */
26
- export const QUALITY_GATE_NAMES = [
27
- 'originality', 'grounding', 'quote_limits', 'corroboration', 'conflicts',
28
- 'sensitivity', 'category', 'freshness', 'duplicate_of_published', 'length_format',
29
- ];
30
- export const FACT_KINDS = ['event', 'person', 'date', 'place', 'number', 'quote', 'context'];
31
- const text = z.string().trim().min(1);
32
- const httpsUrl = z
33
- .string()
34
- .url()
35
- .refine((u) => u.startsWith('https://'), 'Source URL must use https');
36
- const draftSourceSchema = z.object({
37
- name: text.max(160),
38
- url: httpsUrl,
39
- publishedAt: z.string().datetime({ offset: true }).optional(),
40
- role: z.enum(DRAFT_SOURCE_ROLES),
41
- });
42
- const gateResultSchema = z.object({
43
- gate: text,
44
- verdict: z.enum(GATE_VERDICTS),
45
- reasons: z.array(z.string()),
46
- metrics: z.record(z.string(), z.number()).optional(),
47
- });
48
- const factSupportSchema = z.object({ itemId: idSchema, paragraph: z.number().int().min(1) });
49
- const factSchema = z.object({
50
- id: text,
51
- statement: text,
52
- kind: z.enum(FACT_KINDS),
53
- entities: z.array(z.string()),
54
- supportedBy: z.array(factSupportSchema).min(1),
55
- conflictsWith: z.array(z.string()),
56
- independentSources: z.number().int().min(0),
57
- });
58
- const quoteSchema = factSupportSchema.extend({ text, speaker: text });
59
- const conflictSchema = z.object({ description: text, factIds: z.array(z.string()) });
60
- export const editorialDraftSubmitSchema = z
61
- .object({
62
- draftId: idSchema,
63
- clusterId: idSchema,
64
- headline: text.max(EDITORIAL_DRAFT_LIMITS.headline),
65
- excerpt: text.max(EDITORIAL_DRAFT_LIMITS.excerpt),
66
- paragraphs: z.array(text).min(1),
67
- /** The fact-sheet fact ids each paragraph asserts (same length as `paragraphs`). */
68
- paragraphFactIds: z.array(z.array(z.string())),
69
- category: text.max(60),
70
- tags: z.array(text.max(40)).max(EDITORIAL_DRAFT_LIMITS.tags),
71
- seo: z.object({
72
- title: text.max(EDITORIAL_DRAFT_LIMITS.seoTitle),
73
- description: text.max(EDITORIAL_DRAFT_LIMITS.seoDescription),
74
- }),
75
- social: z.object({ facebook: text, x: text, whatsapp: text, instagram: text }),
76
- sources: z.array(draftSourceSchema).min(1),
77
- /** An imported or profile cover (upload-service id), or null when the draft has none. */
78
- image: z.object({ uploadId: idSchema, credit: text.max(160), alt: text.max(255) }).nullable(),
79
- relatedProfileIds: z.array(idSchema),
80
- suggestedProfileIds: z.array(idSchema),
81
- review: z.object({
82
- confidence: z.number().min(0).max(1),
83
- risk: z.enum(DRAFT_RISKS),
84
- riskReasons: z.array(z.string()),
85
- gates: z.array(gateResultSchema),
86
- factSheet: z.object({
87
- facts: z.array(factSchema),
88
- quotes: z.array(quoteSchema),
89
- conflicts: z.array(conflictSchema),
90
- }),
91
- /** Prompt slug → version used to produce the draft. */
92
- promptVersions: z.record(z.string(), z.number().int().positive()),
93
- }),
94
- /**
95
- * Present when the draft updates a story editorial has already published (Phase 21.2): editorial
96
- * stores it as a pending update on that story instead of creating a new one. Additive and optional.
97
- */
98
- updateOf: z
99
- .object({ storyId: idSchema, note: text.max(EDITORIAL_DRAFT_LIMITS.updateNote) })
100
- .optional(),
101
- })
102
- .superRefine((draft, ctx) => {
103
- if (draft.paragraphFactIds.length !== draft.paragraphs.length) {
104
- ctx.addIssue({ code: z.ZodIssueCode.custom, path: ['paragraphFactIds'], message: 'Must have one entry per paragraph' });
105
- }
106
- const factIds = new Set(draft.review.factSheet.facts.map((f) => f.id));
107
- draft.paragraphFactIds.forEach((ids, i) => {
108
- for (const id of ids) {
109
- if (!factIds.has(id))
110
- ctx.addIssue({ code: z.ZodIssueCode.custom, path: ['paragraphFactIds', i], message: `Unknown fact id ${id}` });
111
- }
112
- });
113
- if (draft.sources.filter((s) => s.role === 'primary').length !== 1) {
114
- ctx.addIssue({ code: z.ZodIssueCode.custom, path: ['sources'], message: 'Exactly one source must be primary' });
115
- }
116
- });
117
- //# sourceMappingURL=editorial-draft.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"editorial-draft.js","sourceRoot":"","sources":["../../../src/contracts/editorial-draft.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAE/D,gEAAgE;AAChE,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,IAAI,EAAE,CAAC;IACP,QAAQ,EAAE,EAAE;IACZ,cAAc,EAAE,GAAG;IACnB,oFAAoF;IACpF,UAAU,EAAE,GAAG;CACP,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,eAAe,CAAU,CAAC;AACxE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAC9D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AAClE;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW;IACxE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,wBAAwB,EAAE,eAAe;CACzE,CAAC;AAEX,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAU,CAAC;AAEtG,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEtC,MAAM,QAAQ,GAAG,CAAC;KACf,MAAM,EAAE;KACR,GAAG,EAAE;KACL,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,2BAA2B,CAAC,CAAC;AAExE,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACnB,GAAG,EAAE,QAAQ;IACb,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC7D,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE7F,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,EAAE,EAAE,IAAI;IACR,SAAS,EAAE,IAAI;IACf,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IACxB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7B,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC5C,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAEtE,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAErF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,MAAM,CAAC;IACN,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,QAAQ;IACnB,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,QAAQ,CAAC;IACnD,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,OAAO,CAAC;IACjD,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,oFAAoF;IACpF,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACtB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC;IAC5D,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;QACZ,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,QAAQ,CAAC;QAChD,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,cAAc,CAAC;KAC7D,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC9E,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,yFAAyF;IACzF,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC7F,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;IACpC,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QACzB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAChC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;YAClB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;YAC1B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;YAC5B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;SACnC,CAAC;QACF,uDAAuD;QACvD,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;KAClE,CAAC;IACF;;;OAGG;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;SAChF,QAAQ,EAAE;CACd,CAAC;KACD,WAAW,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC1B,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,KAAK,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QAC9D,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,CAAC;IAC1H,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACxC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAAC,CAAC;QACvI,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC,CAAC;IAClH,CAAC;AACH,CAAC,CAAC,CAAC"}