@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
@@ -1,12 +1,73 @@
1
- import type { ApiResponse, PaginationMeta, PaginatedResult } from '../types/index.js';
2
- /** Standard success envelope: `{ success, message, data }`. */
1
+ import type { ApiResponse, CursorPage, CursorPageMeta, ErrorBody, PaginationMeta, PaginatedResult } from '../types/index.js';
2
+ /**
3
+ * Standard success envelope: `{ success, message, data }`.
4
+ *
5
+ * @param data Payload placed under `data`.
6
+ * @param message Human-readable message (default `Success`).
7
+ * @returns The envelope, ready for `res.json`.
8
+ * @example res.json(successResponse(order, 'Order placed'));
9
+ */
3
10
  export declare function successResponse<T>(data: T, message?: string): ApiResponse<T>;
4
- /** Standard error envelope: `{ success: false, message, code?, errors? }`. */
5
- export declare function errorResponse(message: string, errors?: Record<string, string[]>, code?: string): ApiResponse<never>;
11
+ /**
12
+ * Standard error envelope: `{ success: false, message, code?, errors?, requestId? }`.
13
+ * Prefer throwing an AppError and letting the error middleware answer; use this only where a
14
+ * middleware must answer directly. For a body with a guaranteed `code`, use {@link errorBody}.
15
+ *
16
+ * @param message Message for the caller (never an internal error message).
17
+ * @param errors Optional field errors.
18
+ * @param code Optional UPPER_SNAKE_CASE code.
19
+ * @param requestId Optional correlation id of the request.
20
+ * @returns An envelope with `success: false`.
21
+ */
22
+ export declare function errorResponse(message: string, errors?: Record<string, string[]>, code?: string, requestId?: string): ApiResponse<never>;
23
+ /**
24
+ * The error body with a required `code`, as the error middleware sends it.
25
+ *
26
+ * @param code UPPER_SNAKE_CASE machine-readable code.
27
+ * @param message Message for the caller (generic for 5xx).
28
+ * @param options `errors` (field errors) and `requestId` (correlation id), both omitted when absent.
29
+ * @returns `{ success: false, code, message, errors?, requestId? }`.
30
+ *
31
+ * @example res.status(404).json(errorBody('NOT_FOUND', 'Resource not found', { requestId }));
32
+ */
33
+ export declare function errorBody(code: string, message: string, options?: {
34
+ errors?: Record<string, string[]>;
35
+ requestId?: string;
36
+ }): ErrorBody;
37
+ /**
38
+ * Offset pagination meta. `totalPages` is at least 1 so an empty list still reads as "page 1 of 1".
39
+ *
40
+ * @param total Total matching rows.
41
+ * @param page 1-based page that was returned.
42
+ * @param limit Page size.
43
+ * @returns `{ page, limit, total, totalPages, hasNext, hasPrev }`.
44
+ * @example buildPaginationMeta(45, 2, 20) // { page: 2, totalPages: 3, hasNext: true, hasPrev: true, … }
45
+ */
6
46
  export declare function buildPaginationMeta(total: number, page: number, limit: number): PaginationMeta;
7
- /** Paginated envelope: `{ success, message, data: T[], meta }`. */
47
+ /**
48
+ * Offset-paginated envelope: `{ success, message, data: T[], meta }`.
49
+ *
50
+ * @returns The envelope with meta from {@link buildPaginationMeta}.
51
+ * @example res.json(paginatedResponse(rows, total, page, limit));
52
+ */
8
53
  export declare function paginatedResponse<T>(data: T[], total: number, page: number, limit: number, message?: string): ApiResponse<T[]>;
54
+ /**
55
+ * Offset page as a service returns it (data + meta, no envelope).
56
+ *
57
+ * @returns `{ data, meta }`.
58
+ * @example return buildPaginatedResult(rows, total, page, limit);
59
+ */
9
60
  export declare function buildPaginatedResult<T>(data: T[], total: number, page: number, limit: number): PaginatedResult<T>;
10
61
  /** SQL offset for 1-based pages. */
11
62
  export declare function pageOffset(page: number, limit: number): number;
63
+ /**
64
+ * Cursor pagination meta. `hasMore` is derived from `nextCursor`, so the two can never disagree.
65
+ *
66
+ * @param limit The page size that was applied.
67
+ * @param nextCursor Opaque cursor for the next page, or null on the last page.
68
+ * @example buildCursorPageMeta(20, rows.length > 20 ? encodeCursor(rows[19]) : null)
69
+ */
70
+ export declare function buildCursorPageMeta(limit: number, nextCursor: string | null): CursorPageMeta;
71
+ /** Cursor-paginated envelope: `{ success, message, data: T[], meta: { limit, nextCursor, hasMore } }`. */
72
+ export declare function cursorPaginatedResponse<T>(page: CursorPage<T>, message?: string): ApiResponse<T[]>;
12
73
  //# sourceMappingURL=response.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../src/common/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEtF,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,SAAY,GAAG,WAAW,CAAC,CAAC,CAAC,CAE/E;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAEnH;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAG9F;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,SAAY,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAEjI;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAEjH;AAED,oCAAoC;AACpC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9D"}
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../src/common/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE7H;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,SAAY,GAAG,WAAW,CAAC,CAAC,CAAC,CAE/E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAEvI;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,SAAS,CAQ3I;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAG9F;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,SAAY,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAEjI;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAEjH;AAED,oCAAoC;AACpC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAE5F;AAED,0GAA0G;AAC1G,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,SAAY,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAErG"}
@@ -1,4 +1,4 @@
1
- /** True for IANA zones the runtime knows (`Africa/Nairobi`), false for garbage. */
1
+ /** True for IANA zones the runtime knows (`Europe/Berlin`), false for garbage. */
2
2
  export declare function isValidTimeZone(zone: string): boolean;
3
3
  /** Formats an instant in a zone, e.g. `30 Sep 2026, 14:05 EAT`. Falls back to UTC for invalid zones. */
4
4
  export declare function formatInTimeZone(date: Date | string | number, zone: string, locale?: string): string;
@@ -27,7 +27,16 @@ export declare function parseClockTime(value: string): number;
27
27
  * time skipped by a spring-forward resolves to the nearest valid instant.
28
28
  */
29
29
  export declare function zonedWallTimeToInstant(year: number, month: number, day: number, minutesOfDay: number, zone: string): Date;
30
- /** The local calendar day containing `at` in `zone`, as a half-open `[start, end)` UTC range (23–25 h on DST days). */
30
+ /**
31
+ * The local calendar day containing `at` in `zone`, as a half-open `[start, end)` UTC range (23–25 h on
32
+ * DST days). Use it for "today" in reports, business days and daily limits.
33
+ *
34
+ * @param at Any instant in the day.
35
+ * @param zone IANA zone (required; no app default).
36
+ * @returns `{ start, end }` with `start` inclusive and `end` exclusive.
37
+ * @throws RangeError for an unknown zone.
38
+ * @example zonedDayBounds(new Date('2026-10-11T22:30:00Z'), 'Asia/Riyadh') // 2026-10-11T21:00Z → 2026-10-12T21:00Z
39
+ */
31
40
  export declare function zonedDayBounds(at: Date, zone: string): {
32
41
  start: Date;
33
42
  end: Date;
@@ -37,4 +46,13 @@ export declare function zonedDayBounds(at: Date, zone: string): {
37
46
  * cross midnight), the instant that window ends; otherwise null. `start === end` means no window.
38
47
  */
39
48
  export declare function quietWindowEndAt(at: Date, zone: string, start: string, end: string): Date | null;
49
+ /**
50
+ * The instant as a UTC ISO-8601 string (`2026-11-13T09:00:00.000Z`), the form every timestamp travels in.
51
+ *
52
+ * @param instant A Date, an epoch-milliseconds number or a string `Date` can parse.
53
+ * @returns The `toISOString()` form.
54
+ * @throws RangeError when the input is not a valid instant (never returns `"Invalid Date"`).
55
+ * @example toUtcIso('2026-11-13T12:00:00+03:00') // '2026-11-13T09:00:00.000Z'
56
+ */
57
+ export declare function toUtcIso(instant: Date | string | number): string;
40
58
  //# sourceMappingURL=time.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../../src/common/time.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOrD;AAED,wGAAwG;AACxG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAU,GAAG,MAAM,CAWrG;AAED,MAAM,WAAW,SAAS;IACxB,wGAAwG;IACxG,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,SAAQ,EAAE,MAAM,SAAU,GAAG,SAAS,CAKrI;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,IAAiB,GAAG,MAAM,CAOjF;AAED,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,EAAE,SAAS,MAAM,KAAG,IAAiD,CAAC;AAC3G,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,EAAE,SAAS,MAAM,KAAG,IAAsC,CAAC;AAMhG,uGAAuG;AACvG,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AASD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIzH;AAED,uHAAuH;AACvH,wBAAgB,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,CAGjF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAchG"}
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../../src/common/time.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOrD;AAED,wGAAwG;AACxG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAU,GAAG,MAAM,CAWrG;AAED,MAAM,WAAW,SAAS;IACxB,wGAAwG;IACxG,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,SAAQ,EAAE,MAAM,SAAU,GAAG,SAAS,CAKrI;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,IAAiB,GAAG,MAAM,CAOjF;AAED,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,EAAE,SAAS,MAAM,KAAG,IAAiD,CAAC;AAC3G,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,EAAE,SAAS,MAAM,KAAG,IAAsC,CAAC;AAMhG,uGAAuG;AACvG,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AASD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIzH;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,CAIjF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAchG;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAIhE"}
@@ -1,40 +1,53 @@
1
1
  import { z } from 'zod';
2
- /**
3
- * Environment building blocks. Services compose the pieces they need:
4
- *
5
- * const env = loadEnv(serviceEnv.merge(databaseEnv).merge(messagingEnv).extend({ MY_VAR: z.string() }));
6
- */
2
+ /** Service identity, logging, CORS and the gateway signing secret. */
7
3
  export declare const serviceEnv: z.ZodObject<{
8
4
  NODE_ENV: z.ZodDefault<z.ZodEnum<["development", "test", "staging", "production"]>>;
9
5
  PORT: z.ZodNumber;
10
6
  SERVICE_NAME: z.ZodString;
11
- /** Short app identifier used in exchange names and key prefixes (e.g. `showbiz`). */
7
+ /** Short app identifier used in exchange names and key prefixes (e.g. `myapp`). */
12
8
  APP_NAME: z.ZodDefault<z.ZodString>;
13
9
  LOG_LEVEL: z.ZodOptional<z.ZodEnum<["error", "warn", "info", "http", "debug"]>>;
14
10
  CORS_ORIGINS: z.ZodDefault<z.ZodString>;
15
- /** Verifies gateway-signed identity headers. */
16
- GATEWAY_SHARED_SECRET: z.ZodString;
17
- /** Authenticates service-to-service `/internal/*` calls. */
18
- INTERNAL_SERVICE_SECRET: z.ZodString;
11
+ /** Verifies gateway-signed identity headers (v2); at least 32 characters, same value on the gateway and every service. */
12
+ GATEWAY_SIGNING_SECRET: z.ZodString;
19
13
  }, "strip", z.ZodTypeAny, {
20
- NODE_ENV: "production" | "test" | "development" | "staging";
14
+ NODE_ENV: "development" | "test" | "staging" | "production";
21
15
  PORT: number;
22
16
  SERVICE_NAME: string;
23
17
  APP_NAME: string;
24
18
  CORS_ORIGINS: string;
25
- GATEWAY_SHARED_SECRET: string;
26
- INTERNAL_SERVICE_SECRET: string;
27
- LOG_LEVEL?: "info" | "debug" | "error" | "warn" | "http" | undefined;
19
+ GATEWAY_SIGNING_SECRET: string;
20
+ LOG_LEVEL?: "error" | "warn" | "info" | "http" | "debug" | undefined;
28
21
  }, {
29
22
  PORT: number;
30
23
  SERVICE_NAME: string;
31
- GATEWAY_SHARED_SECRET: string;
32
- INTERNAL_SERVICE_SECRET: string;
33
- NODE_ENV?: "production" | "test" | "development" | "staging" | undefined;
34
- LOG_LEVEL?: "info" | "debug" | "error" | "warn" | "http" | undefined;
24
+ GATEWAY_SIGNING_SECRET: string;
25
+ NODE_ENV?: "development" | "test" | "staging" | "production" | undefined;
35
26
  APP_NAME?: string | undefined;
27
+ LOG_LEVEL?: "error" | "warn" | "info" | "http" | "debug" | undefined;
36
28
  CORS_ORIGINS?: string | undefined;
37
29
  }>;
30
+ /**
31
+ * Service-to-service credentials. Optional here because development may run without them;
32
+ * `assertInternalServiceAuthConfigured` enforces them in staging and production.
33
+ */
34
+ export declare const internalServiceEnv: z.ZodObject<{
35
+ /** This service's own name (its compose service name), sent with every internal call. */
36
+ INTERNAL_SERVICE_NAME: z.ZodOptional<z.ZodString>;
37
+ /** This service's own secret (at least 32 characters), sent with every internal call. */
38
+ INTERNAL_SERVICE_CREDENTIAL: z.ZodOptional<z.ZodString>;
39
+ /** JSON map of caller name → secret this service accepts from that caller. */
40
+ INTERNAL_SERVICE_CREDENTIALS: z.ZodOptional<z.ZodString>;
41
+ }, "strip", z.ZodTypeAny, {
42
+ INTERNAL_SERVICE_NAME?: string | undefined;
43
+ INTERNAL_SERVICE_CREDENTIAL?: string | undefined;
44
+ INTERNAL_SERVICE_CREDENTIALS?: string | undefined;
45
+ }, {
46
+ INTERNAL_SERVICE_NAME?: string | undefined;
47
+ INTERNAL_SERVICE_CREDENTIAL?: string | undefined;
48
+ INTERNAL_SERVICE_CREDENTIALS?: string | undefined;
49
+ }>;
50
+ /** Database connection env vars (MySQL defaults). */
38
51
  export declare const databaseEnv: z.ZodObject<{
39
52
  DB_HOST: z.ZodDefault<z.ZodString>;
40
53
  DB_PORT: z.ZodDefault<z.ZodNumber>;
@@ -57,6 +70,7 @@ export declare const databaseEnv: z.ZodObject<{
57
70
  DB_PASSWORD?: string | undefined;
58
71
  DB_POOL_MAX?: number | undefined;
59
72
  }>;
73
+ /** RabbitMQ connection and queue-prefix env vars. */
60
74
  export declare const messagingEnv: z.ZodObject<{
61
75
  RABBITMQ_URL: z.ZodOptional<z.ZodString>;
62
76
  RABBITMQ_HOST: z.ZodDefault<z.ZodString>;
@@ -86,30 +100,240 @@ export declare const messagingEnv: z.ZodObject<{
86
100
  QUEUE_PREFIX?: string | undefined;
87
101
  RABBITMQ_ENABLED?: "true" | "false" | undefined;
88
102
  }>;
103
+ /** Redis connection env vars. Keys are prefixed by the keyspace (`createRedisKeyspace`), never by the client. */
89
104
  export declare const redisEnv: z.ZodObject<{
105
+ /** Full connection URL; overrides host/port/password when set. */
90
106
  REDIS_URL: z.ZodOptional<z.ZodString>;
107
+ REDIS_HOST: z.ZodDefault<z.ZodString>;
108
+ REDIS_PORT: z.ZodDefault<z.ZodNumber>;
109
+ REDIS_PASSWORD: z.ZodOptional<z.ZodString>;
91
110
  REDIS_DB: z.ZodDefault<z.ZodNumber>;
92
- /** Key prefix, e.g. `app:dev:` — never share one between apps or environments. */
93
- REDIS_PREFIX: z.ZodDefault<z.ZodString>;
111
+ /**
112
+ * Environment segment of every Redis key (`{app}:{env}:{service}:…`), e.g. `dev`, `staging`, `prod`.
113
+ * Required in staging and production; never share one between environments.
114
+ */
115
+ CACHE_KEY_PREFIX: z.ZodOptional<z.ZodString>;
94
116
  }, "strip", z.ZodTypeAny, {
117
+ REDIS_HOST: string;
118
+ REDIS_PORT: number;
95
119
  REDIS_DB: number;
96
- REDIS_PREFIX: string;
97
120
  REDIS_URL?: string | undefined;
121
+ REDIS_PASSWORD?: string | undefined;
122
+ CACHE_KEY_PREFIX?: string | undefined;
98
123
  }, {
99
124
  REDIS_URL?: string | undefined;
125
+ REDIS_HOST?: string | undefined;
126
+ REDIS_PORT?: number | undefined;
127
+ REDIS_PASSWORD?: string | undefined;
100
128
  REDIS_DB?: number | undefined;
101
- REDIS_PREFIX?: string | undefined;
129
+ CACHE_KEY_PREFIX?: string | undefined;
102
130
  }>;
103
- /** Builds an AMQP URL from discrete env vars (or returns RABBITMQ_URL when set). */
131
+ /**
132
+ * Builds an AMQP URL from discrete env vars (or returns RABBITMQ_URL when set). User, password and vhost are URL-encoded.
133
+ *
134
+ * @param env Parsed {@link messagingEnv} values.
135
+ * @returns An `amqp://` URL.
136
+ * @example const url = amqpUrlFromEnv(parseEnv(messagingEnv));
137
+ */
104
138
  export declare function amqpUrlFromEnv(env: z.infer<typeof messagingEnv>): string;
105
- /** Reads `KEY=value` lines from a dotenv file into process.env without overriding set values. */
139
+ /**
140
+ * Reads `KEY=value` lines from a dotenv file into process.env without overriding set values. Missing file is a no-op.
141
+ *
142
+ * @param path Dotenv file (default `./.env`).
143
+ * @example loadDotEnv(resolve(__dirname, '../.env.test'));
144
+ */
106
145
  export declare function loadDotEnv(path?: string): void;
146
+ /** Thrown by the env loader when required variables are missing or invalid; lists every problem. */
107
147
  export declare class ConfigError extends Error {
108
148
  }
109
- /** Loads `.env` (if present) and validates process.env. Throws ConfigError listing every problem. */
110
- export declare function loadEnv<S extends z.ZodTypeAny>(schema: S, source?: NodeJS.ProcessEnv, options?: {
149
+ /**
150
+ * The base environment every service validates: service identity, gateway secret, database, Redis,
151
+ * RabbitMQ and internal-service credentials. `loadEnv` merges a service's own schema onto it.
152
+ */
153
+ export declare const baseEnv: z.ZodObject<{
154
+ NODE_ENV: z.ZodDefault<z.ZodEnum<["development", "test", "staging", "production"]>>;
155
+ PORT: z.ZodNumber;
156
+ SERVICE_NAME: z.ZodString;
157
+ /** Short app identifier used in exchange names and key prefixes (e.g. `myapp`). */
158
+ APP_NAME: z.ZodDefault<z.ZodString>;
159
+ LOG_LEVEL: z.ZodOptional<z.ZodEnum<["error", "warn", "info", "http", "debug"]>>;
160
+ CORS_ORIGINS: z.ZodDefault<z.ZodString>;
161
+ /** Verifies gateway-signed identity headers (v2); at least 32 characters, same value on the gateway and every service. */
162
+ GATEWAY_SIGNING_SECRET: z.ZodString;
163
+ } & {
164
+ DB_HOST: z.ZodDefault<z.ZodString>;
165
+ DB_PORT: z.ZodDefault<z.ZodNumber>;
166
+ DB_USER: z.ZodDefault<z.ZodString>;
167
+ DB_PASSWORD: z.ZodDefault<z.ZodString>;
168
+ DB_NAME: z.ZodString;
169
+ DB_POOL_MAX: z.ZodDefault<z.ZodNumber>;
170
+ } & {
171
+ /** Full connection URL; overrides host/port/password when set. */
172
+ REDIS_URL: z.ZodOptional<z.ZodString>;
173
+ REDIS_HOST: z.ZodDefault<z.ZodString>;
174
+ REDIS_PORT: z.ZodDefault<z.ZodNumber>;
175
+ REDIS_PASSWORD: z.ZodOptional<z.ZodString>;
176
+ REDIS_DB: z.ZodDefault<z.ZodNumber>;
177
+ /**
178
+ * Environment segment of every Redis key (`{app}:{env}:{service}:…`), e.g. `dev`, `staging`, `prod`.
179
+ * Required in staging and production; never share one between environments.
180
+ */
181
+ CACHE_KEY_PREFIX: z.ZodOptional<z.ZodString>;
182
+ } & {
183
+ RABBITMQ_URL: z.ZodOptional<z.ZodString>;
184
+ RABBITMQ_HOST: z.ZodDefault<z.ZodString>;
185
+ RABBITMQ_PORT: z.ZodDefault<z.ZodNumber>;
186
+ RABBITMQ_USER: z.ZodDefault<z.ZodString>;
187
+ RABBITMQ_PASSWORD: z.ZodDefault<z.ZodString>;
188
+ RABBITMQ_VHOST: z.ZodDefault<z.ZodString>;
189
+ /** Environment prefix for queue and exchange names (`dev`, `staging`, `prod`). */
190
+ QUEUE_PREFIX: z.ZodDefault<z.ZodString>;
191
+ RABBITMQ_ENABLED: z.ZodEffects<z.ZodDefault<z.ZodEnum<["true", "false"]>>, boolean, "true" | "false" | undefined>;
192
+ } & {
193
+ /** This service's own name (its compose service name), sent with every internal call. */
194
+ INTERNAL_SERVICE_NAME: z.ZodOptional<z.ZodString>;
195
+ /** This service's own secret (at least 32 characters), sent with every internal call. */
196
+ INTERNAL_SERVICE_CREDENTIAL: z.ZodOptional<z.ZodString>;
197
+ /** JSON map of caller name → secret this service accepts from that caller. */
198
+ INTERNAL_SERVICE_CREDENTIALS: z.ZodOptional<z.ZodString>;
199
+ }, "strip", z.ZodTypeAny, {
200
+ NODE_ENV: "development" | "test" | "staging" | "production";
201
+ PORT: number;
202
+ SERVICE_NAME: string;
203
+ APP_NAME: string;
204
+ CORS_ORIGINS: string;
205
+ GATEWAY_SIGNING_SECRET: string;
206
+ DB_HOST: string;
207
+ DB_PORT: number;
208
+ DB_USER: string;
209
+ DB_PASSWORD: string;
210
+ DB_NAME: string;
211
+ DB_POOL_MAX: number;
212
+ RABBITMQ_HOST: string;
213
+ RABBITMQ_PORT: number;
214
+ RABBITMQ_USER: string;
215
+ RABBITMQ_PASSWORD: string;
216
+ RABBITMQ_VHOST: string;
217
+ QUEUE_PREFIX: string;
218
+ RABBITMQ_ENABLED: boolean;
219
+ REDIS_HOST: string;
220
+ REDIS_PORT: number;
221
+ REDIS_DB: number;
222
+ LOG_LEVEL?: "error" | "warn" | "info" | "http" | "debug" | undefined;
223
+ INTERNAL_SERVICE_NAME?: string | undefined;
224
+ INTERNAL_SERVICE_CREDENTIAL?: string | undefined;
225
+ INTERNAL_SERVICE_CREDENTIALS?: string | undefined;
226
+ RABBITMQ_URL?: string | undefined;
227
+ REDIS_URL?: string | undefined;
228
+ REDIS_PASSWORD?: string | undefined;
229
+ CACHE_KEY_PREFIX?: string | undefined;
230
+ }, {
231
+ PORT: number;
232
+ SERVICE_NAME: string;
233
+ GATEWAY_SIGNING_SECRET: string;
234
+ DB_NAME: string;
235
+ NODE_ENV?: "development" | "test" | "staging" | "production" | undefined;
236
+ APP_NAME?: string | undefined;
237
+ LOG_LEVEL?: "error" | "warn" | "info" | "http" | "debug" | undefined;
238
+ CORS_ORIGINS?: string | undefined;
239
+ INTERNAL_SERVICE_NAME?: string | undefined;
240
+ INTERNAL_SERVICE_CREDENTIAL?: string | undefined;
241
+ INTERNAL_SERVICE_CREDENTIALS?: string | undefined;
242
+ DB_HOST?: string | undefined;
243
+ DB_PORT?: number | undefined;
244
+ DB_USER?: string | undefined;
245
+ DB_PASSWORD?: string | undefined;
246
+ DB_POOL_MAX?: number | undefined;
247
+ RABBITMQ_URL?: string | undefined;
248
+ RABBITMQ_HOST?: string | undefined;
249
+ RABBITMQ_PORT?: number | undefined;
250
+ RABBITMQ_USER?: string | undefined;
251
+ RABBITMQ_PASSWORD?: string | undefined;
252
+ RABBITMQ_VHOST?: string | undefined;
253
+ QUEUE_PREFIX?: string | undefined;
254
+ RABBITMQ_ENABLED?: "true" | "false" | undefined;
255
+ REDIS_URL?: string | undefined;
256
+ REDIS_HOST?: string | undefined;
257
+ REDIS_PORT?: number | undefined;
258
+ REDIS_PASSWORD?: string | undefined;
259
+ REDIS_DB?: number | undefined;
260
+ CACHE_KEY_PREFIX?: string | undefined;
261
+ }>;
262
+ /** Variables that have a development default but must be set explicitly in staging and production. */
263
+ export declare const DEPLOYED_REQUIRED_ENV: readonly string[];
264
+ /**
265
+ * True for NODE_ENV values that must name their environments explicitly (staging, production).
266
+ *
267
+ * @param nodeEnv NODE_ENV value (default `process.env.NODE_ENV`).
268
+ * @returns Whether it is a deployed environment.
269
+ * @example isDeployedNodeEnv('production') // true
270
+ */
271
+ export declare function isDeployedNodeEnv(nodeEnv?: string | undefined): boolean;
272
+ /** One problem with one variable. Holds the variable name and kind of problem only, never its value. */
273
+ export interface EnvProblem {
274
+ name: string;
275
+ problem: 'missing' | 'invalid';
276
+ }
277
+ type EnvSource = Record<string, string | undefined>;
278
+ /**
279
+ * Formats problems as `NAME: missing|invalid` lines (names only — values are never printed, because
280
+ * Zod's own messages can echo them).
281
+ *
282
+ * @param problems Problems from validation.
283
+ * @returns A multi-line message.
284
+ * @example formatEnvProblems([{ name: 'DB_NAME', problem: 'missing' }]) // 'Invalid environment configuration:\n DB_NAME: missing'
285
+ */
286
+ export declare function formatEnvProblems(problems: EnvProblem[]): string;
287
+ /** Options for {@link parseEnv}. */
288
+ export interface ParseEnvOptions {
289
+ /** Read `./.env` first when `source` is `process.env` (default true). */
111
290
  dotenv?: boolean;
112
- }): z.infer<S>;
113
- /** Comma-separated env value → trimmed, non-empty list. */
291
+ /** Names that must be set when NODE_ENV is staging or production (default {@link DEPLOYED_REQUIRED_ENV}). */
292
+ deployedRequired?: readonly string[];
293
+ }
294
+ /**
295
+ * Validates `source` against `schema` without merging the base or exiting. Use for partial configs
296
+ * (scripts, tests) and wherever the caller handles the error.
297
+ *
298
+ * @param schema Any Zod schema over the env object.
299
+ * @param source Values to validate (default process.env).
300
+ * @param options Dotenv and deployed-environment checks.
301
+ * @returns The parsed, typed config.
302
+ * @throws ConfigError listing every missing or invalid variable by name (never its value).
303
+ * @example const env = parseEnv(databaseEnv, { DB_NAME: 'app_test' });
304
+ */
305
+ export declare function parseEnv<S extends z.ZodTypeAny>(schema: S, source?: EnvSource, options?: ParseEnvOptions): z.infer<S>;
306
+ /** Options for {@link loadEnv}: parse options plus source, base and injectable output/exit. */
307
+ export interface LoadEnvOptions extends ParseEnvOptions {
308
+ /** Values to validate (default process.env). */
309
+ source?: EnvSource;
310
+ /** Base schema merged under the service schema (default {@link baseEnv}). */
311
+ base?: z.AnyZodObject;
312
+ /** Where the problem list is written (default stderr). */
313
+ write?: (text: string) => void;
314
+ /** Called with exit code 1 on failure (default `process.exit`). */
315
+ exit?: (code: number) => never;
316
+ }
317
+ /**
318
+ * Service startup config: merges the base env schema with the service's own, validates, and on
319
+ * failure prints the missing/invalid variable **names** (never values) and exits non-zero.
320
+ *
321
+ * @param schema The service's own variables (default none).
322
+ * @param options Source, base override and injectable write/exit for tests.
323
+ * @returns The parsed, typed config (base + service variables).
324
+ * @example
325
+ * export const config = loadEnv(z.object({ UPSTREAM_INTERNAL_URL: z.string().url() }));
326
+ */
327
+ export declare function loadEnv<S extends z.AnyZodObject = z.ZodObject<Record<string, never>>, B extends z.AnyZodObject = typeof baseEnv>(schema?: S, options?: LoadEnvOptions & {
328
+ base?: B;
329
+ }): z.infer<B> & z.infer<S>;
330
+ /**
331
+ * Comma-separated env value → trimmed, non-empty list.
332
+ *
333
+ * @param value Raw env value.
334
+ * @returns The list (empty when unset).
335
+ * @example listFromEnv(' a, b ,,c') // ['a', 'b', 'c']
336
+ */
114
337
  export declare const listFromEnv: (value: string | undefined) => string[];
338
+ export {};
115
339
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,eAAO,MAAM,UAAU;;;;IAIrB,qFAAqF;;;;IAIrF,gDAAgD;;IAEhD,4DAA4D;;;;;;;;;;;;;;;;;;;;EAE5D,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;EAOtB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;IAOvB,kFAAkF;;;;;;;;;;;;;;;;;;;;;EAGlF,CAAC;AAEH,eAAO,MAAM,QAAQ;;;IAGnB,kFAAkF;;;;;;;;;;EAElF,CAAC;AAEH,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,GAAG,MAAM,CAIxE;AAED,iGAAiG;AACjG,wBAAgB,UAAU,CAAC,IAAI,SAAiC,GAAG,IAAI,CAYtE;AAED,qBAAa,WAAY,SAAQ,KAAK;CAAG;AAEzC,qGAAqG;AACrG,wBAAgB,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAE,MAAM,CAAC,UAAwB,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAQlJ;AAED,2DAA2D;AAC3D,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,GAAG,SAAS,KAAG,MAAM,EAAmE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Per-request values that follow the request through every `await`, timer and callback, so loggers,
3
+ * error handlers and outbound clients can read them without threading `req` through every call.
4
+ * `scopes` is a generic map of the scope ids the caller acts within (for example `{ tenant: '01J…' }`);
5
+ * the app decides the key names.
6
+ */
7
+ export interface RequestContext {
8
+ correlationId: string;
9
+ service?: string;
10
+ userId?: string;
11
+ scopes?: Record<string, string>;
12
+ }
13
+ /**
14
+ * Runs `fn` (and all async work it starts) inside `context`. Use it at every entry point that is not an
15
+ * HTTP request: queue consumers, jobs and scripts.
16
+ *
17
+ * @param context Values for the duration of `fn`; the object is copied, so later edits don't leak back.
18
+ * @param fn Work to run inside the context.
19
+ * @returns Whatever `fn` returns.
20
+ * @example await runWithContext({ correlationId: msg.correlationId, service: 'worker' }, () => handle(msg));
21
+ */
22
+ export declare function runWithContext<T>(context: RequestContext, fn: () => T): T;
23
+ /**
24
+ * The current request context.
25
+ *
26
+ * @returns The context, or undefined outside {@link runWithContext} / `correlationMiddleware`.
27
+ * @example const id = getRequestContext()?.correlationId;
28
+ */
29
+ export declare function getRequestContext(): Readonly<RequestContext> | undefined;
30
+ /**
31
+ * Adds values to the current context, for example the user id and scopes once auth has run. A no-op
32
+ * outside a context. The correlation id can't be changed once set.
33
+ *
34
+ * @param patch Values to add or replace; `scopes` are merged key by key.
35
+ * @returns True when a context was active and updated.
36
+ * @example updateRequestContext({ userId: user.id, scopes: user.scopes });
37
+ */
38
+ export declare function updateRequestContext(patch: Partial<Omit<RequestContext, 'correlationId'>>): boolean;
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/context/index.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAID;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEzE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,QAAQ,CAAC,cAAc,CAAC,GAAG,SAAS,CAExE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,GAAG,OAAO,CAOnG"}
@@ -1,4 +1,2 @@
1
- export * from './editorial-draft.js';
2
1
  export * from './notification-dispatch.js';
3
- export * from './upload-import.js';
4
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC"}