@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,117 +1,319 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PROTECTED_HEADERS = exports.CONTEXT_HEADERS = exports.IDENTITY_HEADERS = void 0;
4
- exports.signIdentityHeaders = signIdentityHeaders;
5
- exports.verifyIdentityHeaders = verifyIdentityHeaders;
17
+ exports.MIN_GATEWAY_SECRET_LENGTH = exports.DEFAULT_IDENTITY_MAX_FUTURE_MS = exports.DEFAULT_IDENTITY_MAX_AGE_MS = exports.GATEWAY_SIGNATURE_VERSION = exports.CONTEXT_HEADERS = exports.IDENTITY_HEADERS = void 0;
18
+ exports.defineIdentityProtocol = defineIdentityProtocol;
19
+ exports.protectedHeaders = protectedHeaders;
6
20
  exports.stripProtectedHeaders = stripProtectedHeaders;
21
+ exports.canonicalPath = canonicalPath;
22
+ exports.buildIdentityHeaders = buildIdentityHeaders;
23
+ exports.signGatewayIdentity = signGatewayIdentity;
24
+ exports.signedIdentityHeaders = signedIdentityHeaders;
25
+ exports.verifyGatewayIdentity = verifyGatewayIdentity;
26
+ exports.assertGatewaySecret = assertGatewaySecret;
7
27
  const crypto_js_1 = require("../common/crypto.js");
8
28
  /**
9
- * Header contract between the gateway and downstream services.
29
+ * Gateway identity protocol, version 2.
10
30
  *
11
- * The gateway strips any client-supplied identity headers, then writes these and signs them with
12
- * `x-gateway-auth` = HMAC-SHA256(secret, canonical string). Services verify the signature and
13
- * timestamp before trusting anything, so a request that bypasses the gateway on the internal
14
- * network cannot forge an identity.
31
+ * The gateway strips every client-supplied identity header, writes the headers below for the
32
+ * authenticated caller and signs them with `x-gateway-signature: v2=<hex>`. The signature is an
33
+ * HMAC-SHA256 over an app-chosen domain separator, the HTTP method, the canonical path (no query),
34
+ * the gateway timestamp and every identity header in a fixed order. A request that bypasses the
35
+ * gateway, is replayed later, or is replayed against another route cannot carry a forged identity.
36
+ *
37
+ * App-specific identity fields (for example a tenant id) travel in their own headers through an
38
+ * {@link IdentityProtocol} mapping, so this module never names an app concept.
15
39
  */
16
40
  exports.IDENTITY_HEADERS = {
17
41
  USER_ID: 'x-user-id',
18
42
  USER_EMAIL: 'x-user-email',
19
43
  USER_ROLES: 'x-user-roles',
20
44
  USER_PERMISSIONS: 'x-user-permissions',
45
+ SUPER_ADMIN: 'x-is-superadmin',
46
+ OTP_VERIFIED: 'x-otp-verified',
47
+ STEP_UP_AT: 'x-step-up-at',
48
+ SESSION_ID: 'x-session-id',
21
49
  USER_SCOPES: 'x-user-scopes',
22
50
  USER_ATTRS: 'x-user-attrs',
23
- SESSION_ID: 'x-session-id',
24
51
  TIMESTAMP: 'x-gateway-ts',
25
- SIGNATURE: 'x-gateway-auth',
52
+ SIGNATURE: 'x-gateway-signature',
26
53
  };
54
+ /** Non-identity request headers shared by the gateway and services (correlation, client hints, internal auth). */
27
55
  exports.CONTEXT_HEADERS = {
28
56
  CORRELATION_ID: 'x-correlation-id',
29
57
  ANON_ID: 'x-anon-id',
30
58
  TIMEZONE: 'x-timezone',
31
59
  CLIENT_IP: 'x-client-ip',
32
60
  INTERNAL_SECRET: 'x-internal-service-secret',
33
- CALLER_SERVICE: 'x-caller-service',
61
+ INTERNAL_SERVICE_NAME: 'x-internal-service-name',
62
+ IDEMPOTENCY_KEY: 'idempotency-key',
34
63
  };
35
- /** Every header a client must never be allowed to set. */
36
- exports.PROTECTED_HEADERS = [...Object.values(exports.IDENTITY_HEADERS), exports.CONTEXT_HEADERS.INTERNAL_SECRET, exports.CONTEXT_HEADERS.CLIENT_IP];
37
- const DEFAULT_MAX_SKEW_MS = 5 * 60_000;
64
+ /** Signature version prefix: `x-gateway-signature: v2=<hex>`. */
65
+ exports.GATEWAY_SIGNATURE_VERSION = 'v2';
66
+ /** Default maximum age of a gateway timestamp (replay window). */
67
+ exports.DEFAULT_IDENTITY_MAX_AGE_MS = 30_000;
68
+ /** Default allowance for a gateway clock that runs ahead of the service clock. */
69
+ exports.DEFAULT_IDENTITY_MAX_FUTURE_MS = 5_000;
70
+ /** Minimum length of the shared gateway signing secret. */
71
+ exports.MIN_GATEWAY_SECRET_LENGTH = 32;
72
+ const BASE_HEAD = [exports.IDENTITY_HEADERS.USER_ID, exports.IDENTITY_HEADERS.USER_EMAIL];
73
+ const BASE_TAIL = [
74
+ exports.IDENTITY_HEADERS.USER_ROLES,
75
+ exports.IDENTITY_HEADERS.USER_PERMISSIONS,
76
+ exports.IDENTITY_HEADERS.SUPER_ADMIN,
77
+ exports.IDENTITY_HEADERS.OTP_VERIFIED,
78
+ exports.IDENTITY_HEADERS.STEP_UP_AT,
79
+ exports.IDENTITY_HEADERS.SESSION_ID,
80
+ exports.IDENTITY_HEADERS.USER_SCOPES,
81
+ exports.IDENTITY_HEADERS.USER_ATTRS,
82
+ ];
83
+ const HEADER_NAME = /^x-[a-z0-9-]+$/;
84
+ const RESERVED_HEADERS = new Set([...Object.values(exports.IDENTITY_HEADERS), ...Object.values(exports.CONTEXT_HEADERS)]);
85
+ /**
86
+ * Validates and freezes an app's identity protocol. Throws at startup on a bad binding so a
87
+ * misconfiguration can never weaken verification at runtime.
88
+ *
89
+ * @param input Domain separator and optional scope/attr header mappings.
90
+ * @returns The frozen protocol, including the signing order.
91
+ * @example const protocol = defineIdentityProtocol({ domain: 'shop-gateway-identity:v2', scopeHeaders: { tenant: 'x-tenant-id' } });
92
+ */
93
+ function defineIdentityProtocol(input) {
94
+ if (!input.domain?.trim())
95
+ throw new Error('defineIdentityProtocol: domain separator is required');
96
+ const scopeHeaders = { ...(input.scopeHeaders ?? {}) };
97
+ const attrHeaders = { ...(input.attrHeaders ?? {}) };
98
+ const mapped = [...Object.values(scopeHeaders), ...Object.values(attrHeaders)];
99
+ const seen = new Set();
100
+ for (const name of mapped) {
101
+ if (!HEADER_NAME.test(name))
102
+ throw new Error(`defineIdentityProtocol: "${name}" must be a lower-case x- header`);
103
+ if (RESERVED_HEADERS.has(name) || seen.has(name))
104
+ throw new Error(`defineIdentityProtocol: header "${name}" is reserved or duplicated`);
105
+ seen.add(name);
106
+ }
107
+ return Object.freeze({
108
+ domain: input.domain,
109
+ scopeHeaders: Object.freeze(scopeHeaders),
110
+ attrHeaders: Object.freeze(attrHeaders),
111
+ headerOrder: Object.freeze([...BASE_HEAD, ...mapped, ...BASE_TAIL]),
112
+ });
113
+ }
114
+ /**
115
+ * Every header a client must never be allowed to set, for a given protocol: identity headers, the gateway
116
+ * timestamp and signature, both internal-service headers and the client IP.
117
+ *
118
+ * @param protocol The app's identity protocol.
119
+ * @returns Lower-case header names.
120
+ * @example const blocked = new Set(protectedHeaders(protocol));
121
+ */
122
+ function protectedHeaders(protocol) {
123
+ return [...protocol.headerOrder, exports.IDENTITY_HEADERS.TIMESTAMP, exports.IDENTITY_HEADERS.SIGNATURE, exports.CONTEXT_HEADERS.INTERNAL_SECRET, exports.CONTEXT_HEADERS.INTERNAL_SERVICE_NAME, exports.CONTEXT_HEADERS.CLIENT_IP];
124
+ }
125
+ /**
126
+ * Removes every protected header in place (gateway ingress), so clients can't forge identity or internal auth.
127
+ *
128
+ * @param headers Incoming request headers (mutated).
129
+ * @param protocol The app's identity protocol.
130
+ * @example stripProtectedHeaders(req.headers, protocol);
131
+ */
132
+ function stripProtectedHeaders(headers, protocol) {
133
+ for (const name of protectedHeaders(protocol))
134
+ delete headers[name];
135
+ }
38
136
  function header(headers, name) {
39
137
  const value = headers[name];
40
138
  return Array.isArray(value) ? value[0] : value;
41
139
  }
42
- function canonical(values) {
43
- return [
44
- values[exports.IDENTITY_HEADERS.TIMESTAMP],
45
- values[exports.IDENTITY_HEADERS.USER_ID],
46
- values[exports.IDENTITY_HEADERS.USER_EMAIL],
47
- values[exports.IDENTITY_HEADERS.USER_ROLES],
48
- values[exports.IDENTITY_HEADERS.USER_PERMISSIONS],
49
- values[exports.IDENTITY_HEADERS.USER_SCOPES],
50
- values[exports.IDENTITY_HEADERS.USER_ATTRS],
51
- values[exports.IDENTITY_HEADERS.SESSION_ID],
52
- ].join('\n');
140
+ /**
141
+ * Canonical request path for signing: the path only (query and fragment dropped), always starting with `/`.
142
+ *
143
+ * @param path A path or path-plus-query such as `req.originalUrl`.
144
+ * @returns The path to sign or verify.
145
+ * @example canonicalPath('/v1/items?page=2') // '/v1/items'
146
+ */
147
+ function canonicalPath(path) {
148
+ const bare = path.split(/[?#]/, 1)[0] ?? '';
149
+ return bare.startsWith('/') ? bare : `/${bare}`;
53
150
  }
54
- const encodeList = (items) => items.join(',');
151
+ const encodeList = (items = []) => items.join(',');
55
152
  const decodeList = (value) => (value ? value.split(',').map((s) => s.trim()).filter(Boolean) : []);
56
- const encodeJson = (value) => Buffer.from(JSON.stringify(value ?? {})).toString('base64url');
57
- function decodeJson(value, fallback) {
153
+ const encodeJson = (value) => (Object.keys(value).length ? Buffer.from(JSON.stringify(value)).toString('base64url') : '');
154
+ const omitKeys = (record, keys) => Object.fromEntries(Object.entries(record).filter(([k]) => !keys.includes(k)));
155
+ function decodeJson(value) {
58
156
  if (!value)
59
- return fallback;
157
+ return {};
60
158
  try {
61
- return JSON.parse(Buffer.from(value, 'base64url').toString('utf8'));
159
+ const parsed = JSON.parse(Buffer.from(value, 'base64url').toString('utf8'));
160
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : undefined;
62
161
  }
63
162
  catch {
64
- return fallback;
163
+ return undefined;
65
164
  }
66
165
  }
67
- /** Gateway side: headers (including signature) that represent `user`. */
68
- function signIdentityHeaders(user, secret, now = Date.now()) {
166
+ /**
167
+ * Gateway side: the identity header values (unsigned) that represent `user` under `protocol`.
168
+ * Mapped scopes and string attrs travel in their own headers; the rest go in the JSON headers.
169
+ *
170
+ * @param user The authenticated caller.
171
+ * @param protocol The app's identity protocol.
172
+ * @returns Header name → value for every header in `protocol.headerOrder`.
173
+ * @example const identity = buildIdentityHeaders(user, protocol);
174
+ */
175
+ function buildIdentityHeaders(user, protocol) {
176
+ const scopeKeys = Object.keys(protocol.scopeHeaders);
177
+ const attrKeys = Object.keys(protocol.attrHeaders);
69
178
  const values = {
70
- [exports.IDENTITY_HEADERS.TIMESTAMP]: String(now),
71
179
  [exports.IDENTITY_HEADERS.USER_ID]: user.id,
72
180
  [exports.IDENTITY_HEADERS.USER_EMAIL]: user.email ?? '',
73
181
  [exports.IDENTITY_HEADERS.USER_ROLES]: encodeList(user.roles),
74
182
  [exports.IDENTITY_HEADERS.USER_PERMISSIONS]: encodeList(user.permissions),
75
- [exports.IDENTITY_HEADERS.USER_SCOPES]: encodeJson(user.scopes),
76
- [exports.IDENTITY_HEADERS.USER_ATTRS]: encodeJson(user.attrs),
183
+ [exports.IDENTITY_HEADERS.SUPER_ADMIN]: user.isSuperAdmin ? 'true' : 'false',
184
+ [exports.IDENTITY_HEADERS.OTP_VERIFIED]: user.otpVerified ? 'true' : 'false',
185
+ [exports.IDENTITY_HEADERS.STEP_UP_AT]: user.stepUpAt !== undefined ? String(Math.trunc(user.stepUpAt)) : '',
77
186
  [exports.IDENTITY_HEADERS.SESSION_ID]: user.sessionId ?? '',
187
+ [exports.IDENTITY_HEADERS.USER_SCOPES]: encodeJson(omitKeys(user.scopes ?? {}, scopeKeys)),
188
+ [exports.IDENTITY_HEADERS.USER_ATTRS]: encodeJson(omitKeys(user.attrs ?? {}, attrKeys)),
78
189
  };
79
- values[exports.IDENTITY_HEADERS.SIGNATURE] = (0, crypto_js_1.hmacSha256)(secret, canonical(values));
190
+ for (const [key, name] of Object.entries(protocol.scopeHeaders))
191
+ values[name] = encodeList(user.scopes?.[key]);
192
+ for (const [key, name] of Object.entries(protocol.attrHeaders)) {
193
+ const attr = user.attrs?.[key];
194
+ values[name] = typeof attr === 'string' ? attr : '';
195
+ }
80
196
  return values;
81
197
  }
82
- /** Service side: verifies and decodes the gateway identity headers. */
83
- function verifyIdentityHeaders(headers, secret, options = {}) {
84
- const userId = header(headers, exports.IDENTITY_HEADERS.USER_ID);
85
- if (!userId)
86
- return { status: 'anonymous' };
87
- const values = {};
88
- for (const name of Object.values(exports.IDENTITY_HEADERS))
89
- values[name] = header(headers, name) ?? '';
90
- const signature = values[exports.IDENTITY_HEADERS.SIGNATURE];
91
- if (!signature || !(0, crypto_js_1.safeEqual)(signature, (0, crypto_js_1.hmacSha256)(secret, canonical(values)))) {
92
- return { status: 'invalid', reason: 'bad-signature' };
198
+ function canonicalString(input) {
199
+ const fields = [
200
+ input.protocol.domain,
201
+ input.method.toUpperCase(),
202
+ canonicalPath(input.path),
203
+ String(input.ts),
204
+ ...input.protocol.headerOrder.map((name) => input.identity[name] ?? ''),
205
+ ];
206
+ // JSON array encoding keeps field boundaries unambiguous whatever the values contain.
207
+ return JSON.stringify(fields);
208
+ }
209
+ /**
210
+ * Signs an identity for one request.
211
+ *
212
+ * @param input Method, path, identity headers, timestamp, secret and protocol.
213
+ * @returns The `x-gateway-signature` value, `v2=<hex>`.
214
+ * @example headers['x-gateway-signature'] = signGatewayIdentity({ method, path, identity, ts, secret, protocol });
215
+ */
216
+ function signGatewayIdentity(input) {
217
+ return `${exports.GATEWAY_SIGNATURE_VERSION}=${(0, crypto_js_1.hmacSha256)(input.secret, canonicalString(input))}`;
218
+ }
219
+ /**
220
+ * Gateway side convenience: every identity header plus `x-gateway-ts` and `x-gateway-signature`. Also used by a
221
+ * service acting for a user to re-sign the identity for one internal call (signatures bind method and path).
222
+ *
223
+ * @param input User, method, path, secret, protocol and optional time.
224
+ * @returns Headers to add to the outgoing request.
225
+ *
226
+ * @example Object.assign(proxyHeaders, signedIdentityHeaders({ user, method: req.method, path: upstreamPath, secret, protocol }));
227
+ */
228
+ function signedIdentityHeaders(input) {
229
+ const ts = input.now ?? Date.now();
230
+ const identity = buildIdentityHeaders(input.user, input.protocol);
231
+ const signature = signGatewayIdentity({ method: input.method, path: input.path, identity, ts, secret: input.secret, protocol: input.protocol });
232
+ return { ...identity, [exports.IDENTITY_HEADERS.TIMESTAMP]: String(ts), [exports.IDENTITY_HEADERS.SIGNATURE]: signature };
233
+ }
234
+ function checkTimestamp(raw, now, maxAgeMs, maxFutureMs) {
235
+ if (!raw || !/^\d+$/.test(raw))
236
+ return 'bad-timestamp';
237
+ const ts = Number(raw);
238
+ if (now - ts > maxAgeMs)
239
+ return 'stale';
240
+ if (ts - now > maxFutureMs)
241
+ return 'future';
242
+ return null;
243
+ }
244
+ function decodeUser(values, protocol) {
245
+ const scopes = decodeJson(values[exports.IDENTITY_HEADERS.USER_SCOPES]);
246
+ const attrs = decodeJson(values[exports.IDENTITY_HEADERS.USER_ATTRS]);
247
+ const stepUpRaw = values[exports.IDENTITY_HEADERS.STEP_UP_AT];
248
+ if (!scopes || !attrs || (stepUpRaw && !/^\d+$/.test(stepUpRaw)))
249
+ return null;
250
+ for (const [key, name] of Object.entries(protocol.scopeHeaders)) {
251
+ const ids = decodeList(values[name]);
252
+ if (ids.length)
253
+ scopes[key] = ids;
93
254
  }
94
- const ts = Number(values[exports.IDENTITY_HEADERS.TIMESTAMP]);
95
- const now = options.now ?? Date.now();
96
- if (!Number.isFinite(ts) || Math.abs(now - ts) > (options.maxSkewMs ?? DEFAULT_MAX_SKEW_MS)) {
97
- return { status: 'invalid', reason: 'stale-signature' };
255
+ for (const [key, name] of Object.entries(protocol.attrHeaders)) {
256
+ if (values[name])
257
+ attrs[key] = values[name];
98
258
  }
99
- return {
100
- status: 'authenticated',
101
- user: {
102
- id: userId,
103
- email: values[exports.IDENTITY_HEADERS.USER_EMAIL] ?? '',
104
- roles: decodeList(values[exports.IDENTITY_HEADERS.USER_ROLES]),
105
- permissions: decodeList(values[exports.IDENTITY_HEADERS.USER_PERMISSIONS]),
106
- scopes: decodeJson(values[exports.IDENTITY_HEADERS.USER_SCOPES], {}),
107
- attrs: decodeJson(values[exports.IDENTITY_HEADERS.USER_ATTRS], {}),
108
- sessionId: values[exports.IDENTITY_HEADERS.SESSION_ID] || undefined,
109
- },
259
+ const user = {
260
+ id: values[exports.IDENTITY_HEADERS.USER_ID] ?? '',
261
+ email: values[exports.IDENTITY_HEADERS.USER_EMAIL] ?? '',
262
+ roles: decodeList(values[exports.IDENTITY_HEADERS.USER_ROLES]),
263
+ permissions: decodeList(values[exports.IDENTITY_HEADERS.USER_PERMISSIONS]),
264
+ scopes,
265
+ attrs,
266
+ isSuperAdmin: values[exports.IDENTITY_HEADERS.SUPER_ADMIN] === 'true',
267
+ otpVerified: values[exports.IDENTITY_HEADERS.OTP_VERIFIED] === 'true',
110
268
  };
269
+ if (values[exports.IDENTITY_HEADERS.SESSION_ID])
270
+ user.sessionId = values[exports.IDENTITY_HEADERS.SESSION_ID];
271
+ if (stepUpRaw)
272
+ user.stepUpAt = Number(stepUpRaw);
273
+ return user;
111
274
  }
112
- /** Removes every protected header in place (gateway ingress). */
113
- function stripProtectedHeaders(headers) {
114
- for (const name of exports.PROTECTED_HEADERS)
115
- delete headers[name];
275
+ /**
276
+ * Service side: verifies and decodes the gateway identity. No `x-user-id` → anonymous. Otherwise the
277
+ * request is rejected unless the signature is present, version `v2`, made for this method, path and
278
+ * protocol, and the timestamp is at most `maxAgeMs` old (default 30 s) and at most `maxFutureMs` ahead
279
+ * (default 5 s). The comparison is constant-time.
280
+ *
281
+ * @example const result = verifyGatewayIdentity({ headers: req.headers, method: req.method, path: req.originalUrl, secret, protocol });
282
+ */
283
+ function verifyGatewayIdentity(input) {
284
+ const { headers, protocol } = input;
285
+ if (!header(headers, exports.IDENTITY_HEADERS.USER_ID))
286
+ return { status: 'anonymous' };
287
+ const signature = header(headers, exports.IDENTITY_HEADERS.SIGNATURE);
288
+ if (!signature)
289
+ return { status: 'invalid', reason: 'missing-signature' };
290
+ if (!signature.startsWith(`${exports.GATEWAY_SIGNATURE_VERSION}=`))
291
+ return { status: 'invalid', reason: 'bad-version' };
292
+ const rawTs = header(headers, exports.IDENTITY_HEADERS.TIMESTAMP);
293
+ const now = input.now ?? Date.now();
294
+ const tsProblem = checkTimestamp(rawTs, now, input.maxAgeMs ?? exports.DEFAULT_IDENTITY_MAX_AGE_MS, input.maxFutureMs ?? exports.DEFAULT_IDENTITY_MAX_FUTURE_MS);
295
+ if (tsProblem)
296
+ return { status: 'invalid', reason: tsProblem };
297
+ const identity = {};
298
+ for (const name of protocol.headerOrder)
299
+ identity[name] = header(headers, name) ?? '';
300
+ const expected = signGatewayIdentity({ method: input.method, path: input.path, identity, ts: Number(rawTs), secret: input.secret, protocol });
301
+ if (!(0, crypto_js_1.safeEqual)(signature, expected))
302
+ return { status: 'invalid', reason: 'bad-signature' };
303
+ const user = decodeUser(identity, protocol);
304
+ return user ? { status: 'authenticated', user } : { status: 'invalid', reason: 'bad-payload' };
305
+ }
306
+ /**
307
+ * Throws unless `secret` is long enough to sign identities. Call at startup.
308
+ *
309
+ * @param secret The shared gateway signing secret (env `GATEWAY_SIGNING_SECRET`).
310
+ * @returns The secret, unchanged.
311
+ */
312
+ function assertGatewaySecret(secret) {
313
+ if (!secret || secret.length < exports.MIN_GATEWAY_SECRET_LENGTH) {
314
+ throw new Error(`Gateway signing secret must be at least ${exports.MIN_GATEWAY_SECRET_LENGTH} characters`);
315
+ }
316
+ return secret;
116
317
  }
318
+ __exportStar(require("./step-up.js"), exports);
117
319
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/identity/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/identity/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ /**
3
+ * Step-up (re-authentication) scopes. The gateway checks the client's step-up proof for the route's
4
+ * scope and forwards the verified time as the signed `x-step-up-at` header; services only check that
5
+ * the time is fresh. Scope names and their rules are app values, declared once with
6
+ * {@link defineStepUpScopes}.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.STEP_UP_REQUIRED_CODE = exports.STEP_UP_MAX_FUTURE_MS = exports.DEFAULT_STEP_UP_WINDOW_MS = void 0;
10
+ exports.defineStepUpScopes = defineStepUpScopes;
11
+ exports.stepUpStatus = stepUpStatus;
12
+ /** Default freshness window for a step-up verification. */
13
+ exports.DEFAULT_STEP_UP_WINDOW_MS = 5 * 60_000;
14
+ /** A step-up time this far ahead of the service clock is still accepted (clock skew). */
15
+ exports.STEP_UP_MAX_FUTURE_MS = 5_000;
16
+ /** Error code of the 403 a service returns when a fresh step-up is required. */
17
+ exports.STEP_UP_REQUIRED_CODE = 'STEP_UP_REQUIRED';
18
+ const SCOPE_NAME = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
19
+ /**
20
+ * Validates and freezes an app's step-up scope catalogue (kebab-case names). Throws at startup on a bad name.
21
+ *
22
+ * @param catalogue Scope name → rules.
23
+ * @returns The frozen catalogue; its keys type `requireStepUp`'s scope argument.
24
+ * @example export const stepUpScopes = defineStepUpScopes({ 'refund-large': {}, 'payout-destination': { singleUse: true } });
25
+ */
26
+ function defineStepUpScopes(catalogue) {
27
+ const entries = Object.entries(catalogue);
28
+ if (!entries.length)
29
+ throw new Error('defineStepUpScopes: catalogue is empty');
30
+ for (const [name] of entries) {
31
+ if (!SCOPE_NAME.test(name))
32
+ throw new Error(`defineStepUpScopes: "${name}" must be kebab-case`);
33
+ }
34
+ return Object.freeze(Object.fromEntries(entries.map(([name, rules]) => [name, Object.freeze({ ...rules })])));
35
+ }
36
+ /**
37
+ * Whether a gateway-verified step-up time is usable now.
38
+ *
39
+ * @param stepUpAt Epoch milliseconds of the step-up, or undefined when none was made.
40
+ * @param windowMs How old the step-up may be.
41
+ * @param now Current epoch milliseconds.
42
+ * @returns `fresh` when usable; otherwise why not.
43
+ * @example stepUpStatus(req.user?.stepUpAt, DEFAULT_STEP_UP_WINDOW_MS) === 'fresh'
44
+ */
45
+ function stepUpStatus(stepUpAt, windowMs, now = Date.now()) {
46
+ if (stepUpAt === undefined || !Number.isFinite(stepUpAt))
47
+ return 'missing';
48
+ if (stepUpAt - now > exports.STEP_UP_MAX_FUTURE_MS)
49
+ return 'future';
50
+ return now - stepUpAt > windowMs ? 'stale' : 'fresh';
51
+ }
52
+ //# sourceMappingURL=step-up.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-up.js","sourceRoot":"","sources":["../../../src/identity/step-up.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AA6BH,gDAOC;AAaD,oCAIC;AAxCD,2DAA2D;AAC9C,QAAA,yBAAyB,GAAG,CAAC,GAAG,MAAM,CAAC;AACpD,yFAAyF;AAC5E,QAAA,qBAAqB,GAAG,KAAK,CAAC;AAC3C,gFAAgF;AACnE,QAAA,qBAAqB,GAAG,kBAAkB,CAAC;AAExD,MAAM,UAAU,GAAG,iCAAiC,CAAC;AAErD;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAmB,SAA2C;IAC9F,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAsC,CAAC;IAC/E,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC/E,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,sBAAsB,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAuB,CAAC;AACtI,CAAC;AAID;;;;;;;;GAQG;AACH,SAAgB,YAAY,CAAC,QAA4B,EAAE,QAAgB,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IACnG,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3E,IAAI,QAAQ,GAAG,GAAG,GAAG,6BAAqB;QAAE,OAAO,QAAQ,CAAC;IAC5D,OAAO,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AACvD,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -19,11 +19,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
19
19
  // live behind subpaths: `@heavybit/shared-lib/express`, `/cache`, `/messaging`, …
20
20
  __exportStar(require("./types/index.js"), exports);
21
21
  __exportStar(require("./common/index.js"), exports);
22
+ __exportStar(require("./context/index.js"), exports);
22
23
  __exportStar(require("./identity/index.js"), exports);
23
24
  __exportStar(require("./access/index.js"), exports);
24
25
  __exportStar(require("./validation/index.js"), exports);
25
26
  __exportStar(require("./logging/index.js"), exports);
26
27
  __exportStar(require("./config/index.js"), exports);
28
+ __exportStar(require("./cache/keyspace.js"), exports);
29
+ __exportStar(require("./rate-limit/keys.js"), exports);
27
30
  __exportStar(require("./contracts/index.js"), exports);
28
31
  __exportStar(require("./alerting/index.js"), exports);
32
+ __exportStar(require("./database/pagination.js"), exports);
33
+ __exportStar(require("./audit/index.js"), exports);
34
+ __exportStar(require("./approvals/index.js"), exports);
35
+ __exportStar(require("./socket/ticket.js"), exports);
29
36
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6EAA6E;AAC7E,8FAA8F;AAC9F,kFAAkF;AAClF,mDAAiC;AACjC,oDAAkC;AAClC,sDAAoC;AACpC,oDAAkC;AAClC,wDAAsC;AACtC,qDAAmC;AACnC,oDAAkC;AAClC,uDAAqC;AACrC,sDAAoC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6EAA6E;AAC7E,8FAA8F;AAC9F,kFAAkF;AAClF,mDAAiC;AACjC,oDAAkC;AAClC,qDAAmC;AACnC,sDAAoC;AACpC,oDAAkC;AAClC,wDAAsC;AACtC,qDAAmC;AACnC,oDAAkC;AAClC,sDAAoC;AACpC,uDAAqC;AACrC,uDAAqC;AACrC,sDAAoC;AACpC,2DAAyC;AACzC,mDAAiC;AACjC,uDAAqC;AACrC,qDAAmC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ulidPrimary = ulidPrimary;
4
+ exports.ulidColumn = ulidColumn;
5
+ exports.timestamps = timestamps;
6
+ exports.actorColumns = actorColumns;
7
+ exports.datetime = datetime;
8
+ exports.createdAtColumn = createdAtColumn;
9
+ /** Column primitives shared by every migration helper (one definition of ULID and DATETIME(3) columns). */
10
+ /** `id CHAR(26)` primary key for ULIDs. */
11
+ function ulidPrimary(table, name = 'id') {
12
+ table.specificType(name, 'char(26)').notNullable().primary();
13
+ }
14
+ /** `CHAR(26)` column referencing another ULID (FK constraints only within the same database). */
15
+ function ulidColumn(table, name) {
16
+ return table.specificType(name, 'char(26)');
17
+ }
18
+ /** `created_at` / `updated_at` as `DATETIME(3)` in UTC, maintained by MySQL. */
19
+ function timestamps(table, knex) {
20
+ createdAtColumn(table, knex);
21
+ datetime(table, 'updated_at').notNullable().defaultTo(knex.raw('CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3)'));
22
+ }
23
+ /** `created_by` / `updated_by` actor columns (null for system operations). */
24
+ function actorColumns(table) {
25
+ ulidColumn(table, 'created_by').nullable();
26
+ ulidColumn(table, 'updated_by').nullable();
27
+ }
28
+ /** Nullable `DATETIME(3)` column. */
29
+ function datetime(table, name) {
30
+ return table.specificType(name, 'datetime(3)');
31
+ }
32
+ /** `DATETIME(3)` column defaulting to `CURRENT_TIMESTAMP(3)` (insert time, UTC). */
33
+ function createdAtColumn(table, knex, name = 'created_at') {
34
+ return datetime(table, name).notNullable().defaultTo(knex.raw('CURRENT_TIMESTAMP(3)'));
35
+ }
36
+ //# sourceMappingURL=columns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columns.js","sourceRoot":"","sources":["../../../src/knex/columns.ts"],"names":[],"mappings":";;AAKA,kCAEC;AAGD,gCAEC;AAGD,gCAGC;AAGD,oCAGC;AAGD,4BAEC;AAGD,0CAEC;AAhCD,2GAA2G;AAE3G,2CAA2C;AAC3C,SAAgB,WAAW,CAAC,KAA8B,EAAE,IAAI,GAAG,IAAI;IACrE,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,CAAC;AAC/D,CAAC;AAED,iGAAiG;AACjG,SAAgB,UAAU,CAAC,KAAuD,EAAE,IAAY;IAC9F,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAC9C,CAAC;AAED,gFAAgF;AAChF,SAAgB,UAAU,CAAC,KAA8B,EAAE,IAAU;IACnE,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;AACzH,CAAC;AAED,8EAA8E;AAC9E,SAAgB,YAAY,CAAC,KAA8B;IACzD,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3C,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC7C,CAAC;AAED,qCAAqC;AACrC,SAAgB,QAAQ,CAAC,KAAuD,EAAE,IAAY;IAC5F,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACjD,CAAC;AAED,oFAAoF;AACpF,SAAgB,eAAe,CAAC,KAA8B,EAAE,IAAU,EAAE,IAAI,GAAG,YAAY;IAC7F,OAAO,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACzF,CAAC"}
@@ -1,39 +1,31 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ulidPrimary = ulidPrimary;
4
- exports.ulidColumn = ulidColumn;
5
- exports.timestamps = timestamps;
6
- exports.actorColumns = actorColumns;
7
- exports.datetime = datetime;
8
17
  exports.createAuditTable = createAuditTable;
9
18
  exports.createOutboxTable = createOutboxTable;
10
19
  exports.utf8mb4 = utf8mb4;
20
+ const table_names_js_1 = require("../database/table-names.js");
21
+ const columns_js_1 = require("./columns.js");
22
+ const migration_helpers_js_1 = require("./migration-helpers.js");
23
+ __exportStar(require("./columns.js"), exports);
24
+ __exportStar(require("./migration-helpers.js"), exports);
11
25
  /**
12
26
  * Migration helpers (usable from CommonJS `.cjs` migrations via `require('@heavybit/shared-lib/knex')`).
13
27
  * They keep ID, timestamp and audit column definitions identical across services.
14
28
  */
15
- /** `id CHAR(26)` primary key for ULIDs. */
16
- function ulidPrimary(table, name = 'id') {
17
- table.specificType(name, 'char(26)').notNullable().primary();
18
- }
19
- /** `CHAR(26)` column referencing another ULID (FK constraints only within the same database). */
20
- function ulidColumn(table, name) {
21
- return table.specificType(name, 'char(26)');
22
- }
23
- /** `created_at` / `updated_at` as `DATETIME(3)` in UTC, maintained by MySQL. */
24
- function timestamps(table, knex) {
25
- table.specificType('created_at', 'datetime(3)').notNullable().defaultTo(knex.raw('CURRENT_TIMESTAMP(3)'));
26
- table.specificType('updated_at', 'datetime(3)').notNullable().defaultTo(knex.raw('CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3)'));
27
- }
28
- /** `created_by` / `updated_by` actor columns (null for system operations). */
29
- function actorColumns(table) {
30
- ulidColumn(table, 'created_by').nullable();
31
- ulidColumn(table, 'updated_by').nullable();
32
- }
33
- /** Nullable `DATETIME(3)` column. */
34
- function datetime(table, name) {
35
- return table.specificType(name, 'datetime(3)');
36
- }
37
29
  /**
38
30
  * Creates `<parent>_audits`: every parent column (defined again by `columns`) plus `parent_id`
39
31
  * and `action`. Audit rows are append-only history, so no unique constraints are copied.
@@ -43,29 +35,20 @@ async function createAuditTable(knex, parentTable, columns) {
43
35
  if (await knex.schema.hasTable(name))
44
36
  return;
45
37
  await knex.schema.createTable(name, (table) => {
46
- ulidPrimary(table);
47
- ulidColumn(table, 'parent_id').notNullable().index();
38
+ (0, columns_js_1.ulidPrimary)(table);
39
+ (0, columns_js_1.ulidColumn)(table, 'parent_id').notNullable().index();
48
40
  table.enu('action', ['create', 'update', 'delete']).notNullable();
49
41
  columns(table);
50
- actorColumns(table);
51
- timestamps(table, knex);
42
+ (0, columns_js_1.actorColumns)(table);
43
+ (0, columns_js_1.timestamps)(table, knex);
52
44
  table.index(['parent_id', 'created_at']);
53
45
  });
54
46
  }
55
- /** Transactional outbox table used by `OutboxRelay`. */
56
- async function createOutboxTable(knex, name = 'event_outbox') {
47
+ /** Transactional outbox table used by `OutboxRelay` (columns from {@link outboxColumns}). */
48
+ async function createOutboxTable(knex, name = table_names_js_1.DEFAULT_OUTBOX_TABLE) {
57
49
  if (await knex.schema.hasTable(name))
58
50
  return;
59
- await knex.schema.createTable(name, (table) => {
60
- ulidPrimary(table);
61
- table.string('routing_key', 191).notNullable();
62
- table.json('payload').notNullable();
63
- table.integer('attempts').unsigned().notNullable().defaultTo(0);
64
- table.string('last_error', 500).nullable();
65
- table.specificType('created_at', 'datetime(3)').notNullable().defaultTo(knex.raw('CURRENT_TIMESTAMP(3)'));
66
- datetime(table, 'published_at').nullable();
67
- table.index(['published_at', 'id']);
68
- });
51
+ await knex.schema.createTable(name, (table) => (0, migration_helpers_js_1.outboxColumns)(table, knex));
69
52
  }
70
53
  /** Standard table options: InnoDB, utf8mb4. Call inside `createTable`. */
71
54
  function utf8mb4(table) {