@hotmeshio/long-tail 0.30.4 → 0.31.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 (413) hide show
  1. package/build/api/escalations/index.d.ts +1 -0
  2. package/build/api/escalations/index.js +5 -2
  3. package/build/api/escalations/roster-action.d.ts +11 -0
  4. package/build/api/escalations/roster-action.js +47 -30
  5. package/build/api/escalations/roster-scan.d.ts +26 -0
  6. package/build/api/escalations/roster-scan.js +114 -0
  7. package/build/api/labels/errors.d.ts +3 -0
  8. package/build/api/labels/errors.js +15 -0
  9. package/build/api/labels/index.d.ts +2 -0
  10. package/build/api/labels/index.js +17 -0
  11. package/build/api/labels/issue.d.ts +54 -0
  12. package/build/api/labels/issue.js +144 -0
  13. package/build/api/labels/templates.d.ts +29 -0
  14. package/build/api/labels/templates.js +98 -0
  15. package/build/api/scan-codes/context.d.ts +9 -1
  16. package/build/api/scan-codes/context.js +16 -1
  17. package/build/api/scan-codes/execute.js +6 -1
  18. package/build/api/scan-codes/fill-labels.d.ts +8 -0
  19. package/build/api/scan-codes/fill-labels.js +23 -2
  20. package/build/api/scan-codes/hold.js +2 -0
  21. package/build/api/scan-codes/located.d.ts +10 -0
  22. package/build/api/scan-codes/located.js +74 -0
  23. package/build/api/scan-codes/open.d.ts +9 -0
  24. package/build/api/scan-codes/open.js +99 -0
  25. package/build/api/scan-codes/present.js +1 -0
  26. package/build/api/scan-codes/verb-fill.js +1 -1
  27. package/build/api/users.d.ts +8 -4
  28. package/build/api/users.js +51 -13
  29. package/build/index.d.ts +1 -0
  30. package/build/index.js +4 -2
  31. package/build/lib/db/schemas/044_label_sheets.sql +65 -0
  32. package/build/lib/db/schemas/045_label_job_delivery.sql +14 -0
  33. package/build/lib/labels/transports.d.ts +23 -0
  34. package/build/lib/labels/transports.js +39 -0
  35. package/build/modules/auth.d.ts +2 -0
  36. package/build/modules/auth.js +3 -1
  37. package/build/modules/capabilities.d.ts +5 -1
  38. package/build/modules/capabilities.js +38 -8
  39. package/build/modules/config.d.ts +10 -0
  40. package/build/modules/config.js +10 -0
  41. package/build/routes/escalations/resolve.js +18 -0
  42. package/build/routes/index.js +2 -0
  43. package/build/routes/labels.d.ts +2 -0
  44. package/build/routes/labels.js +135 -0
  45. package/build/routes/users.js +1 -1
  46. package/build/services/labels/content.d.ts +13 -0
  47. package/build/services/labels/content.js +81 -0
  48. package/build/services/labels/errors.d.ts +5 -0
  49. package/build/services/labels/errors.js +12 -0
  50. package/build/services/labels/index.d.ts +11 -0
  51. package/build/services/labels/index.js +52 -0
  52. package/build/services/labels/issue.d.ts +38 -0
  53. package/build/services/labels/issue.js +181 -0
  54. package/build/services/labels/jobs.d.ts +37 -0
  55. package/build/services/labels/jobs.js +75 -0
  56. package/build/services/labels/media.d.ts +11 -0
  57. package/build/services/labels/media.js +44 -0
  58. package/build/services/labels/reissue.d.ts +13 -0
  59. package/build/services/labels/reissue.js +65 -0
  60. package/build/services/labels/render-pdf.d.ts +11 -0
  61. package/build/services/labels/render-pdf.js +138 -0
  62. package/build/services/labels/targets.d.ts +18 -0
  63. package/build/services/labels/targets.js +216 -0
  64. package/build/services/labels/templates/index.d.ts +3 -0
  65. package/build/services/labels/templates/index.js +18 -0
  66. package/build/services/labels/templates/read.d.ts +4 -0
  67. package/build/services/labels/templates/read.js +36 -0
  68. package/build/services/labels/templates/sql.d.ts +8 -0
  69. package/build/services/labels/templates/sql.js +50 -0
  70. package/build/services/labels/templates/validate.d.ts +19 -0
  71. package/build/services/labels/templates/validate.js +93 -0
  72. package/build/services/labels/templates/write.d.ts +16 -0
  73. package/build/services/labels/templates/write.js +75 -0
  74. package/build/services/labels/token.d.ts +9 -0
  75. package/build/services/labels/token.js +28 -0
  76. package/build/services/labels/verify.d.ts +4 -0
  77. package/build/services/labels/verify.js +38 -0
  78. package/build/services/role/index.d.ts +2 -0
  79. package/build/services/role/index.js +7 -0
  80. package/build/services/role/scan-done.js +4 -1
  81. package/build/services/role/sql.d.ts +1 -0
  82. package/build/services/role/sql.js +3 -1
  83. package/build/services/role/types.d.ts +2 -0
  84. package/build/services/scan-code/index.d.ts +1 -1
  85. package/build/services/scan-code/index.js +2 -1
  86. package/build/services/scan-code/parse.d.ts +5 -1
  87. package/build/services/scan-code/parse.js +8 -2
  88. package/build/services/scan-code/validate-station.d.ts +13 -0
  89. package/build/services/scan-code/validate-station.js +81 -0
  90. package/build/services/scan-code/validate-subject.js +33 -6
  91. package/build/services/scan-code/validate.d.ts +3 -0
  92. package/build/services/scan-code/validate.js +22 -18
  93. package/build/services/user/crud.d.ts +13 -1
  94. package/build/services/user/crud.js +42 -11
  95. package/build/services/user/index.d.ts +3 -2
  96. package/build/services/user/index.js +7 -1
  97. package/build/services/user/redact.d.ts +17 -0
  98. package/build/services/user/redact.js +32 -0
  99. package/build/services/user/sql.d.ts +8 -15
  100. package/build/services/user/sql.js +27 -3
  101. package/build/services/user/types.d.ts +21 -1
  102. package/build/shared/labels/compose.d.ts +12 -0
  103. package/build/shared/labels/compose.js +43 -0
  104. package/build/shared/labels/index.d.ts +9 -0
  105. package/build/shared/labels/index.js +54 -0
  106. package/build/shared/labels/label-content.d.ts +17 -0
  107. package/build/shared/labels/label-content.js +137 -0
  108. package/build/shared/labels/layout.d.ts +23 -0
  109. package/build/shared/labels/layout.js +81 -0
  110. package/build/shared/labels/media.d.ts +22 -0
  111. package/build/shared/labels/media.js +116 -0
  112. package/build/shared/labels/render-svg.d.ts +10 -0
  113. package/build/shared/labels/render-svg.js +58 -0
  114. package/build/shared/labels/render-zpl.d.ts +9 -0
  115. package/build/shared/labels/render-zpl.js +63 -0
  116. package/build/shared/labels/symbol.d.ts +18 -0
  117. package/build/shared/labels/symbol.js +74 -0
  118. package/build/shared/labels/tokens.d.ts +18 -0
  119. package/build/shared/labels/tokens.js +43 -0
  120. package/build/shared/labels/types.d.ts +105 -0
  121. package/build/shared/labels/types.js +11 -0
  122. package/build/start/adapters.js +16 -0
  123. package/build/start/workers.js +18 -2
  124. package/build/system/mcp-servers/admin/index.js +2 -0
  125. package/build/system/mcp-servers/admin/labels-schemas.d.ts +192 -0
  126. package/build/system/mcp-servers/admin/labels-schemas.js +46 -0
  127. package/build/system/mcp-servers/admin/labels.d.ts +9 -0
  128. package/build/system/mcp-servers/admin/labels.js +101 -0
  129. package/build/system/mcp-servers/admin/schemas.d.ts +491 -24
  130. package/build/system/mcp-servers/admin/schemas.js +32 -4
  131. package/build/system/mcp-servers/admin/users.js +1 -1
  132. package/build/system/seed/tool-manifests-admin.js +5 -0
  133. package/build/tsconfig.tsbuildinfo +1 -1
  134. package/build/types/capability.d.ts +2 -1
  135. package/build/types/index.d.ts +3 -2
  136. package/build/types/labels/index.d.ts +4 -0
  137. package/build/types/labels/index.js +2 -0
  138. package/build/types/labels/job.d.ts +51 -0
  139. package/build/types/labels/job.js +2 -0
  140. package/build/types/labels/source.d.ts +44 -0
  141. package/build/types/labels/source.js +2 -0
  142. package/build/types/labels/template.d.ts +46 -0
  143. package/build/types/labels/template.js +2 -0
  144. package/build/types/labels/transport.d.ts +24 -0
  145. package/build/types/labels/transport.js +2 -0
  146. package/build/types/scan-choice.d.ts +2 -4
  147. package/build/types/scan-code/constants.d.ts +1 -0
  148. package/build/types/scan-code/constants.js +1 -0
  149. package/build/types/scan-code/response.d.ts +22 -4
  150. package/build/types/scan-code/rule.d.ts +66 -3
  151. package/build/types/startup.d.ts +37 -0
  152. package/build/types/user.d.ts +2 -0
  153. package/dashboard/dist/assets/{AdminDashboard-VQ1fhhJP.js → AdminDashboard-BafKaq50.js} +2 -2
  154. package/dashboard/dist/assets/{AdminDashboard-VQ1fhhJP.js.map → AdminDashboard-BafKaq50.js.map} +1 -1
  155. package/dashboard/dist/assets/{AgentConfigPage-BOe_W2Ij.js → AgentConfigPage-CFHf31DT.js} +6 -6
  156. package/dashboard/dist/assets/{AgentConfigPage-BOe_W2Ij.js.map → AgentConfigPage-CFHf31DT.js.map} +1 -1
  157. package/dashboard/dist/assets/{AgentDetailPage-5ov5D9V2.js → AgentDetailPage-CEvz5rJr.js} +3 -3
  158. package/dashboard/dist/assets/{AgentDetailPage-5ov5D9V2.js.map → AgentDetailPage-CEvz5rJr.js.map} +1 -1
  159. package/dashboard/dist/assets/{AgentsPage-DDFMKHhI.js → AgentsPage-DjQaio0O.js} +2 -2
  160. package/dashboard/dist/assets/{AgentsPage-DDFMKHhI.js.map → AgentsPage-DjQaio0O.js.map} +1 -1
  161. package/dashboard/dist/assets/AvailableEscalationsPage-UB03VTJx.js +2 -0
  162. package/dashboard/dist/assets/AvailableEscalationsPage-UB03VTJx.js.map +1 -0
  163. package/dashboard/dist/assets/{BotPicker-Dqpo36dM.js → BotPicker-C7MNWOF7.js} +2 -2
  164. package/dashboard/dist/assets/{BotPicker-Dqpo36dM.js.map → BotPicker-C7MNWOF7.js.map} +1 -1
  165. package/dashboard/dist/assets/BulkAssignModal-h5fX-_cV.js +2 -0
  166. package/dashboard/dist/assets/{BulkAssignModal-CmLVxkz-.js.map → BulkAssignModal-h5fX-_cV.js.map} +1 -1
  167. package/dashboard/dist/assets/{CapabilitiesPage-Dfkip6_b.js → CapabilitiesPage-BIzDl-ZT.js} +2 -2
  168. package/dashboard/dist/assets/{CapabilitiesPage-Dfkip6_b.js.map → CapabilitiesPage-BIzDl-ZT.js.map} +1 -1
  169. package/dashboard/dist/assets/{CollapsibleSection-CYNYMYSa.js → CollapsibleSection-B5TivtEg.js} +2 -2
  170. package/dashboard/dist/assets/{CollapsibleSection-CYNYMYSa.js.map → CollapsibleSection-B5TivtEg.js.map} +1 -1
  171. package/dashboard/dist/assets/{ConfirmDeleteModal-CpJNP-8w.js → ConfirmDeleteModal-CB4nKePb.js} +2 -2
  172. package/dashboard/dist/assets/{ConfirmDeleteModal-CpJNP-8w.js.map → ConfirmDeleteModal-CB4nKePb.js.map} +1 -1
  173. package/dashboard/dist/assets/{ConnectedAppsPage-DXIp2Dpl.js → ConnectedAppsPage-B3S5gVWw.js} +2 -2
  174. package/dashboard/dist/assets/{ConnectedAppsPage-DXIp2Dpl.js.map → ConnectedAppsPage-B3S5gVWw.js.map} +1 -1
  175. package/dashboard/dist/assets/{CountdownTimer-CuPY7zkb.js → CountdownTimer-BHVIq3kA.js} +2 -2
  176. package/dashboard/dist/assets/{CountdownTimer-CuPY7zkb.js.map → CountdownTimer-BHVIq3kA.js.map} +1 -1
  177. package/dashboard/dist/assets/CredentialConfirmModal-w0AGmCIe.js +2 -0
  178. package/dashboard/dist/assets/CredentialConfirmModal-w0AGmCIe.js.map +1 -0
  179. package/dashboard/dist/assets/{CredentialsPage-CtrnkHcj.js → CredentialsPage-BtCGBJrT.js} +2 -2
  180. package/dashboard/dist/assets/{CredentialsPage-CtrnkHcj.js.map → CredentialsPage-BtCGBJrT.js.map} +1 -1
  181. package/dashboard/dist/assets/{CronLabel-DVjTw5Ri.js → CronLabel-BG1rZK-5.js} +2 -2
  182. package/dashboard/dist/assets/{CronLabel-DVjTw5Ri.js.map → CronLabel-BG1rZK-5.js.map} +1 -1
  183. package/dashboard/dist/assets/{DropZone-DefYTYQy.js → DropZone-D8ZVdEb5.js} +2 -2
  184. package/dashboard/dist/assets/{DropZone-DefYTYQy.js.map → DropZone-D8ZVdEb5.js.map} +1 -1
  185. package/dashboard/dist/assets/{ElapsedCell-gY_mGMTF.js → ElapsedCell-l4m8Yvfv.js} +2 -2
  186. package/dashboard/dist/assets/{ElapsedCell-gY_mGMTF.js.map → ElapsedCell-l4m8Yvfv.js.map} +1 -1
  187. package/dashboard/dist/assets/{EntityTimelinePanel-DJN_ZEQa.js → EntityTimelinePanel-BOHlIaxF.js} +2 -2
  188. package/dashboard/dist/assets/{EntityTimelinePanel-DJN_ZEQa.js.map → EntityTimelinePanel-BOHlIaxF.js.map} +1 -1
  189. package/dashboard/dist/assets/{EscalationListSchemaPage-A4KpTdJA.js → EscalationListSchemaPage-BotlwlX3.js} +3 -3
  190. package/dashboard/dist/assets/{EscalationListSchemaPage-A4KpTdJA.js.map → EscalationListSchemaPage-BotlwlX3.js.map} +1 -1
  191. package/dashboard/dist/assets/{EscalationSchemaPage-nfCn42hT.js → EscalationSchemaPage-CfZSVOSD.js} +3 -3
  192. package/dashboard/dist/assets/{EscalationSchemaPage-nfCn42hT.js.map → EscalationSchemaPage-CfZSVOSD.js.map} +1 -1
  193. package/dashboard/dist/assets/{EscalationTimeline-CLvSr1SD.js → EscalationTimeline-CCKpuRBU.js} +2 -2
  194. package/dashboard/dist/assets/{EscalationTimeline-CLvSr1SD.js.map → EscalationTimeline-CCKpuRBU.js.map} +1 -1
  195. package/dashboard/dist/assets/{EscalationTitleSelect-CT7mYHkb.js → EscalationTitleSelect-cpTzPHiW.js} +2 -2
  196. package/dashboard/dist/assets/{EscalationTitleSelect-CT7mYHkb.js.map → EscalationTitleSelect-cpTzPHiW.js.map} +1 -1
  197. package/dashboard/dist/assets/{EscalationsOverview-CKaGRh-E.js → EscalationsOverview-DS-nK0qV.js} +2 -2
  198. package/dashboard/dist/assets/{EscalationsOverview-CKaGRh-E.js.map → EscalationsOverview-DS-nK0qV.js.map} +1 -1
  199. package/dashboard/dist/assets/{EventTable-2ywJsOLy.js → EventTable-UfebhJf0.js} +2 -2
  200. package/dashboard/dist/assets/{EventTable-2ywJsOLy.js.map → EventTable-UfebhJf0.js.map} +1 -1
  201. package/dashboard/dist/assets/{FilterBar-Dy0b7wwf.js → FilterBar-newA5l-X.js} +2 -2
  202. package/dashboard/dist/assets/{FilterBar-Dy0b7wwf.js.map → FilterBar-newA5l-X.js.map} +1 -1
  203. package/dashboard/dist/assets/{GraphInvokePage-yOVpraAy.js → GraphInvokePage-6SCDyQcK.js} +2 -2
  204. package/dashboard/dist/assets/{GraphInvokePage-yOVpraAy.js.map → GraphInvokePage-6SCDyQcK.js.map} +1 -1
  205. package/dashboard/dist/assets/HomePage-BEc-XdKj.js +2 -0
  206. package/dashboard/dist/assets/{HomePage-67xXjKjN.js.map → HomePage-BEc-XdKj.js.map} +1 -1
  207. package/dashboard/dist/assets/LabelJobsPage-BO50zXT5.js +2 -0
  208. package/dashboard/dist/assets/LabelJobsPage-BO50zXT5.js.map +1 -0
  209. package/dashboard/dist/assets/{LinePage-CMsYtukW.js → LinePage-NYxJQ-ex.js} +3 -3
  210. package/dashboard/dist/assets/{LinePage-CMsYtukW.js.map → LinePage-NYxJQ-ex.js.map} +1 -1
  211. package/dashboard/dist/assets/{LinesPage-pwL46mOS.js → LinesPage-RbWTaQRh.js} +3 -3
  212. package/dashboard/dist/assets/{LinesPage-pwL46mOS.js.map → LinesPage-RbWTaQRh.js.map} +1 -1
  213. package/dashboard/dist/assets/{ListToolbar-CJmvGy2B.js → ListToolbar-B-E9-toh.js} +2 -2
  214. package/dashboard/dist/assets/{ListToolbar-CJmvGy2B.js.map → ListToolbar-B-E9-toh.js.map} +1 -1
  215. package/dashboard/dist/assets/{McpOverview-DA9LLvNG.js → McpOverview-Shcf9QhZ.js} +2 -2
  216. package/dashboard/dist/assets/{McpOverview-DA9LLvNG.js.map → McpOverview-Shcf9QhZ.js.map} +1 -1
  217. package/dashboard/dist/assets/{McpQueryDetailPage-N7qLmfE8.js → McpQueryDetailPage-D8kmjy2v.js} +3 -3
  218. package/dashboard/dist/assets/{McpQueryDetailPage-N7qLmfE8.js.map → McpQueryDetailPage-D8kmjy2v.js.map} +1 -1
  219. package/dashboard/dist/assets/{McpQueryPage-CpsP3w7x.js → McpQueryPage-ck-o5m8A.js} +2 -2
  220. package/dashboard/dist/assets/{McpQueryPage-CpsP3w7x.js.map → McpQueryPage-ck-o5m8A.js.map} +1 -1
  221. package/dashboard/dist/assets/McpRunDetailPage-BJKkM9-3.js +2 -0
  222. package/dashboard/dist/assets/{McpRunDetailPage-qHRQ1pEY.js.map → McpRunDetailPage-BJKkM9-3.js.map} +1 -1
  223. package/dashboard/dist/assets/{McpRunsPage-BRDDYpTM.js → McpRunsPage-DqhHfD5G.js} +2 -2
  224. package/dashboard/dist/assets/{McpRunsPage-BRDDYpTM.js.map → McpRunsPage-DqhHfD5G.js.map} +1 -1
  225. package/dashboard/dist/assets/{NamespacePill-CeSfHH-j.js → NamespacePill--uIaGtrN.js} +2 -2
  226. package/dashboard/dist/assets/{NamespacePill-CeSfHH-j.js.map → NamespacePill--uIaGtrN.js.map} +1 -1
  227. package/dashboard/dist/assets/{OperationsPage-zUaab-CL.js → OperationsPage-D6B9Vv__.js} +3 -3
  228. package/dashboard/dist/assets/{OperationsPage-zUaab-CL.js.map → OperationsPage-D6B9Vv__.js.map} +1 -1
  229. package/dashboard/dist/assets/OperatorDashboard-CIH1cxjQ.js +2 -0
  230. package/dashboard/dist/assets/{OperatorDashboard-el5BquXN.js.map → OperatorDashboard-CIH1cxjQ.js.map} +1 -1
  231. package/dashboard/dist/assets/{PageHeader-DiGWAQlR.js → PageHeader-DClJ33fV.js} +2 -2
  232. package/dashboard/dist/assets/{PageHeader-DiGWAQlR.js.map → PageHeader-DClJ33fV.js.map} +1 -1
  233. package/dashboard/dist/assets/{PageHeaderWithStats-DwnKQ06j.js → PageHeaderWithStats-C-TrbKQL.js} +2 -2
  234. package/dashboard/dist/assets/{PageHeaderWithStats-DwnKQ06j.js.map → PageHeaderWithStats-C-TrbKQL.js.map} +1 -1
  235. package/dashboard/dist/assets/PersonaDetailPage-DjvfyIph.js +2 -0
  236. package/dashboard/dist/assets/{PersonaDetailPage-B_tb8gfl.js.map → PersonaDetailPage-DjvfyIph.js.map} +1 -1
  237. package/dashboard/dist/assets/{PersonasPage-BPI7mqM8.js → PersonasPage-D7ryA8Vc.js} +2 -2
  238. package/dashboard/dist/assets/{PersonasPage-BPI7mqM8.js.map → PersonasPage-D7ryA8Vc.js.map} +1 -1
  239. package/dashboard/dist/assets/{PortalPage-e_rBb1do.js → PortalPage-D3ybr0mo.js} +2 -2
  240. package/dashboard/dist/assets/{PortalPage-e_rBb1do.js.map → PortalPage-D3ybr0mo.js.map} +1 -1
  241. package/dashboard/dist/assets/PrintLabelsPanel-D0HF5x8b.js +2 -0
  242. package/dashboard/dist/assets/PrintLabelsPanel-D0HF5x8b.js.map +1 -0
  243. package/dashboard/dist/assets/{ProcessDetailPage-D35RX1bB.js → ProcessDetailPage-0xS9EdHe.js} +2 -2
  244. package/dashboard/dist/assets/{ProcessDetailPage-D35RX1bB.js.map → ProcessDetailPage-0xS9EdHe.js.map} +1 -1
  245. package/dashboard/dist/assets/{ProcessesListPage-CT81miI5.js → ProcessesListPage-93SMj1Fd.js} +2 -2
  246. package/dashboard/dist/assets/{ProcessesListPage-CT81miI5.js.map → ProcessesListPage-93SMj1Fd.js.map} +1 -1
  247. package/dashboard/dist/assets/{ResolverForm-BxJkoKAO.js → ResolverForm-DfogHDzl.js} +5 -5
  248. package/dashboard/dist/assets/{ResolverForm-BxJkoKAO.js.map → ResolverForm-DfogHDzl.js.map} +1 -1
  249. package/dashboard/dist/assets/RoleDetailPage-DlUOJWSB.js +8 -0
  250. package/dashboard/dist/assets/{RoleDetailPage-DtU7vsJm.js.map → RoleDetailPage-DlUOJWSB.js.map} +1 -1
  251. package/dashboard/dist/assets/{RolePill-D3hkAdKf.js → RolePill-BjD1Qw5y.js} +2 -2
  252. package/dashboard/dist/assets/{RolePill-D3hkAdKf.js.map → RolePill-BjD1Qw5y.js.map} +1 -1
  253. package/dashboard/dist/assets/RolesPage-DqhHSvaw.js +2 -0
  254. package/dashboard/dist/assets/{RolesPage-BE7RWt9q.js.map → RolesPage-DqhHSvaw.js.map} +1 -1
  255. package/dashboard/dist/assets/{RosterWidget-BJMx0a8Z.js → RosterWidget-BrIq61HR.js} +2 -2
  256. package/dashboard/dist/assets/RosterWidget-BrIq61HR.js.map +1 -0
  257. package/dashboard/dist/assets/RunAsSelector-D6zQrCNr.js +2 -0
  258. package/dashboard/dist/assets/{RunAsSelector-Co6s9bqA.js.map → RunAsSelector-D6zQrCNr.js.map} +1 -1
  259. package/dashboard/dist/assets/ScanCodesPage-B2S9DR2f.js +2 -0
  260. package/dashboard/dist/assets/{ScanCodesPage-C2TETaj5.js.map → ScanCodesPage-B2S9DR2f.js.map} +1 -1
  261. package/dashboard/dist/assets/ScanSchemeDetailPage-gpxKN-pL.js +5 -0
  262. package/dashboard/dist/assets/ScanSchemeDetailPage-gpxKN-pL.js.map +1 -0
  263. package/dashboard/dist/assets/ScanStationPage-B-UTgXsG.js +2 -0
  264. package/dashboard/dist/assets/ScanStationPage-B-UTgXsG.js.map +1 -0
  265. package/dashboard/dist/assets/{SchemeMatchFields-9H7SmbED.js → SchemeMatchFields-BK24aa7K.js} +2 -2
  266. package/dashboard/dist/assets/{SchemeMatchFields-9H7SmbED.js.map → SchemeMatchFields-BK24aa7K.js.map} +1 -1
  267. package/dashboard/dist/assets/{ScopeBadge-DGz79rmG.js → ScopeBadge-ofLQ6HW-.js} +2 -2
  268. package/dashboard/dist/assets/{ScopeBadge-DGz79rmG.js.map → ScopeBadge-ofLQ6HW-.js.map} +1 -1
  269. package/dashboard/dist/assets/{StickyPagination-miUdVAKw.js → StickyPagination-CgVv7vc_.js} +2 -2
  270. package/dashboard/dist/assets/{StickyPagination-miUdVAKw.js.map → StickyPagination-CgVv7vc_.js.map} +1 -1
  271. package/dashboard/dist/assets/{StreamMessageDetail-D5Rk7pn7.js → StreamMessageDetail-B9sxDVw4.js} +2 -2
  272. package/dashboard/dist/assets/{StreamMessageDetail-D5Rk7pn7.js.map → StreamMessageDetail-B9sxDVw4.js.map} +1 -1
  273. package/dashboard/dist/assets/{SwimlaneTimeline-B1QY1ZzH.js → SwimlaneTimeline-DQc0CYSL.js} +2 -2
  274. package/dashboard/dist/assets/{SwimlaneTimeline-B1QY1ZzH.js.map → SwimlaneTimeline-DQc0CYSL.js.map} +1 -1
  275. package/dashboard/dist/assets/{TagInput-DaIdhv3h.js → TagInput-47qVYzke.js} +2 -2
  276. package/dashboard/dist/assets/{TagInput-DaIdhv3h.js.map → TagInput-47qVYzke.js.map} +1 -1
  277. package/dashboard/dist/assets/{TaskDetailPage-DKUM37o8.js → TaskDetailPage-D6VOsA1f.js} +2 -2
  278. package/dashboard/dist/assets/{TaskDetailPage-DKUM37o8.js.map → TaskDetailPage-D6VOsA1f.js.map} +1 -1
  279. package/dashboard/dist/assets/{TaskQueuePill-sUA1nZe-.js → TaskQueuePill-C5KmdXAl.js} +2 -2
  280. package/dashboard/dist/assets/{TaskQueuePill-sUA1nZe-.js.map → TaskQueuePill-C5KmdXAl.js.map} +1 -1
  281. package/dashboard/dist/assets/{TasksListPage-CUulwvm-.js → TasksListPage-DG8hvO8G.js} +2 -2
  282. package/dashboard/dist/assets/{TasksListPage-CUulwvm-.js.map → TasksListPage-DG8hvO8G.js.map} +1 -1
  283. package/dashboard/dist/assets/{TimeAgo-CHTelacB.js → TimeAgo-CL02EhFi.js} +2 -2
  284. package/dashboard/dist/assets/{TimeAgo-CHTelacB.js.map → TimeAgo-CL02EhFi.js.map} +1 -1
  285. package/dashboard/dist/assets/{TimestampCell-NanLWLKo.js → TimestampCell-BE7oKVJg.js} +2 -2
  286. package/dashboard/dist/assets/{TimestampCell-NanLWLKo.js.map → TimestampCell-BE7oKVJg.js.map} +1 -1
  287. package/dashboard/dist/assets/{ToolPill-CpBAFdEX.js → ToolPill-Cp9Drk1s.js} +2 -2
  288. package/dashboard/dist/assets/{ToolPill-CpBAFdEX.js.map → ToolPill-Cp9Drk1s.js.map} +1 -1
  289. package/dashboard/dist/assets/{ToolTestPanel-CF1CHzgz.js → ToolTestPanel-CRecLh6S.js} +2 -2
  290. package/dashboard/dist/assets/{ToolTestPanel-CF1CHzgz.js.map → ToolTestPanel-CRecLh6S.js.map} +1 -1
  291. package/dashboard/dist/assets/{TopicDetailPage-CGO8XV_a.js → TopicDetailPage-QzkinTfN.js} +3 -3
  292. package/dashboard/dist/assets/{TopicDetailPage-CGO8XV_a.js.map → TopicDetailPage-QzkinTfN.js.map} +1 -1
  293. package/dashboard/dist/assets/{TopicsPage-Bt8gOKYr.js → TopicsPage-D8dW6J65.js} +2 -2
  294. package/dashboard/dist/assets/{TopicsPage-Bt8gOKYr.js.map → TopicsPage-D8dW6J65.js.map} +1 -1
  295. package/dashboard/dist/assets/{UserName-DKXnK7DD.js → UserName-Dw3R_zrl.js} +2 -2
  296. package/dashboard/dist/assets/{UserName-DKXnK7DD.js.map → UserName-Dw3R_zrl.js.map} +1 -1
  297. package/dashboard/dist/assets/WorkflowExecutionPage-BTocv8or.js +2 -0
  298. package/dashboard/dist/assets/{WorkflowExecutionPage-Crf7AIFc.js.map → WorkflowExecutionPage-BTocv8or.js.map} +1 -1
  299. package/dashboard/dist/assets/{WorkflowPill-CKHip3hH.js → WorkflowPill-BiLYq__w.js} +2 -2
  300. package/dashboard/dist/assets/{WorkflowPill-CKHip3hH.js.map → WorkflowPill-BiLYq__w.js.map} +1 -1
  301. package/dashboard/dist/assets/WorkflowsDashboard-CIPEt3et.js +2 -0
  302. package/dashboard/dist/assets/{WorkflowsDashboard--isjt06C.js.map → WorkflowsDashboard-CIPEt3et.js.map} +1 -1
  303. package/dashboard/dist/assets/{WorkflowsOverview-D7Oqf4-V.js → WorkflowsOverview-Bj4MJIE-.js} +2 -2
  304. package/dashboard/dist/assets/{WorkflowsOverview-D7Oqf4-V.js.map → WorkflowsOverview-Bj4MJIE-.js.map} +1 -1
  305. package/dashboard/dist/assets/{YamlWorkflowDetailPage-B0wxgrGP.js → YamlWorkflowDetailPage-DMEk5k9-.js} +2 -2
  306. package/dashboard/dist/assets/{YamlWorkflowDetailPage-B0wxgrGP.js.map → YamlWorkflowDetailPage-DMEk5k9-.js.map} +1 -1
  307. package/dashboard/dist/assets/{YamlWorkflowsPage-BVdLnm6K.js → YamlWorkflowsPage-F2yyyoiB.js} +2 -2
  308. package/dashboard/dist/assets/{YamlWorkflowsPage-BVdLnm6K.js.map → YamlWorkflowsPage-F2yyyoiB.js.map} +1 -1
  309. package/dashboard/dist/assets/{agents-CHjbjHXA.js → agents-mSgxEPpI.js} +2 -2
  310. package/dashboard/dist/assets/{agents-CHjbjHXA.js.map → agents-mSgxEPpI.js.map} +1 -1
  311. package/dashboard/dist/assets/{bots-WrUhEPWs.js → bots-p4Hp0CV6.js} +2 -2
  312. package/dashboard/dist/assets/{bots-WrUhEPWs.js.map → bots-p4Hp0CV6.js.map} +1 -1
  313. package/dashboard/dist/assets/{capabilities-CunMmkj8.js → capabilities-D_-I_SXR.js} +2 -2
  314. package/dashboard/dist/assets/{capabilities-CunMmkj8.js.map → capabilities-D_-I_SXR.js.map} +1 -1
  315. package/dashboard/dist/assets/{controlplane-D6IZIZoh.js → controlplane-DjdoQnRU.js} +2 -2
  316. package/dashboard/dist/assets/{controlplane-D6IZIZoh.js.map → controlplane-DjdoQnRU.js.map} +1 -1
  317. package/dashboard/dist/assets/{escalation-columns-Bvo6JI4Z.js → escalation-columns-R_IEVQjQ.js} +2 -2
  318. package/dashboard/dist/assets/{escalation-columns-Bvo6JI4Z.js.map → escalation-columns-R_IEVQjQ.js.map} +1 -1
  319. package/dashboard/dist/assets/{escalation-items-DFGRwo49.js → escalation-items-BGZlJMpk.js} +2 -2
  320. package/dashboard/dist/assets/{escalation-items-DFGRwo49.js.map → escalation-items-BGZlJMpk.js.map} +1 -1
  321. package/dashboard/dist/assets/{index-OuKQ_0eB.js → index-BEMdD58x.js} +2 -2
  322. package/dashboard/dist/assets/{index-OuKQ_0eB.js.map → index-BEMdD58x.js.map} +1 -1
  323. package/dashboard/dist/assets/index-BUmz0NMg.css +1 -0
  324. package/dashboard/dist/assets/{index-C7EIu1mG.js → index-BuCEhhnl.js} +2 -2
  325. package/dashboard/dist/assets/{index-C7EIu1mG.js.map → index-BuCEhhnl.js.map} +1 -1
  326. package/dashboard/dist/assets/{index-Bo8QU31k.js → index-BxbQmeqh.js} +2 -2
  327. package/dashboard/dist/assets/{index-Bo8QU31k.js.map → index-BxbQmeqh.js.map} +1 -1
  328. package/dashboard/dist/assets/index-C5osluV3.js +2 -0
  329. package/dashboard/dist/assets/{index-DRK7M1_9.js.map → index-C5osluV3.js.map} +1 -1
  330. package/dashboard/dist/assets/{index-ygxyAKcc.js → index-C_dAJUzh.js} +27 -27
  331. package/dashboard/dist/assets/index-C_dAJUzh.js.map +1 -0
  332. package/dashboard/dist/assets/{index-DRw0FXdX.js → index-D-FYj9jT.js} +2 -2
  333. package/dashboard/dist/assets/{index-DRw0FXdX.js.map → index-D-FYj9jT.js.map} +1 -1
  334. package/dashboard/dist/assets/{index-B8qrHwp9.js → index-D6K_IgCz.js} +2 -2
  335. package/dashboard/dist/assets/{index-B8qrHwp9.js.map → index-D6K_IgCz.js.map} +1 -1
  336. package/dashboard/dist/assets/index-D7L_VoBD.js +2 -0
  337. package/dashboard/dist/assets/index-D7L_VoBD.js.map +1 -0
  338. package/dashboard/dist/assets/{index-BZFSXEkr.js → index-D9RAN9sA.js} +2 -2
  339. package/dashboard/dist/assets/{index-BZFSXEkr.js.map → index-D9RAN9sA.js.map} +1 -1
  340. package/dashboard/dist/assets/{index-DCJ483vt.js → index-DUYAGxwc.js} +2 -2
  341. package/dashboard/dist/assets/{index-DCJ483vt.js.map → index-DUYAGxwc.js.map} +1 -1
  342. package/dashboard/dist/assets/{index-boT612Jo.js → index-Dk2KKo0z.js} +2 -2
  343. package/dashboard/dist/assets/{index-boT612Jo.js.map → index-Dk2KKo0z.js.map} +1 -1
  344. package/dashboard/dist/assets/{index-CpCchhQv.js → index-DlJkZ12b.js} +2 -2
  345. package/dashboard/dist/assets/{index-CpCchhQv.js.map → index-DlJkZ12b.js.map} +1 -1
  346. package/dashboard/dist/assets/index-FiNThtNU.js +3 -0
  347. package/dashboard/dist/assets/index-FiNThtNU.js.map +1 -0
  348. package/dashboard/dist/assets/{knowledge-BubJBTwg.js → knowledge-DSsPTqkK.js} +2 -2
  349. package/dashboard/dist/assets/{knowledge-BubJBTwg.js.map → knowledge-DSsPTqkK.js.map} +1 -1
  350. package/dashboard/dist/assets/{machines-DSm5NFgs.js → machines-DSgGtqqr.js} +2 -2
  351. package/dashboard/dist/assets/{machines-DSm5NFgs.js.map → machines-DSgGtqqr.js.map} +1 -1
  352. package/dashboard/dist/assets/{mcp-D6MckqOV.js → mcp-Cg-_uLw8.js} +2 -2
  353. package/dashboard/dist/assets/{mcp-D6MckqOV.js.map → mcp-Cg-_uLw8.js.map} +1 -1
  354. package/dashboard/dist/assets/{mcp-query-VyCdOag6.js → mcp-query-DQombEK_.js} +2 -2
  355. package/dashboard/dist/assets/{mcp-query-VyCdOag6.js.map → mcp-query-DQombEK_.js.map} +1 -1
  356. package/dashboard/dist/assets/{personas-CyJc10xe.js → personas-DYrcoVBu.js} +2 -2
  357. package/dashboard/dist/assets/{personas-CyJc10xe.js.map → personas-DYrcoVBu.js.map} +1 -1
  358. package/dashboard/dist/assets/{pipelines-B2inDtx3.js → pipelines-wdb4xsey.js} +2 -2
  359. package/dashboard/dist/assets/{pipelines-B2inDtx3.js.map → pipelines-wdb4xsey.js.map} +1 -1
  360. package/dashboard/dist/assets/{tasks-DOP4d3M6.js → tasks-Bil7gvm9.js} +2 -2
  361. package/dashboard/dist/assets/{tasks-DOP4d3M6.js.map → tasks-Bil7gvm9.js.map} +1 -1
  362. package/dashboard/dist/assets/{topics-CNOjSWpX.js → topics-wBqaVhRR.js} +2 -2
  363. package/dashboard/dist/assets/{topics-CNOjSWpX.js.map → topics-wBqaVhRR.js.map} +1 -1
  364. package/dashboard/dist/assets/{useDebouncedValue-CgO0TGMd.js → useDebouncedValue-CwrY8TpV.js} +2 -2
  365. package/dashboard/dist/assets/{useDebouncedValue-CgO0TGMd.js.map → useDebouncedValue-CwrY8TpV.js.map} +1 -1
  366. package/dashboard/dist/assets/{useNamespace-BWHvUKtK.js → useNamespace-Sod_xApz.js} +2 -2
  367. package/dashboard/dist/assets/{useNamespace-BWHvUKtK.js.map → useNamespace-Sod_xApz.js.map} +1 -1
  368. package/dashboard/dist/assets/{useYamlActivityEvents-BZQ__ZGD.js → useYamlActivityEvents-CKLInV3C.js} +2 -2
  369. package/dashboard/dist/assets/{useYamlActivityEvents-BZQ__ZGD.js.map → useYamlActivityEvents-CKLInV3C.js.map} +1 -1
  370. package/dashboard/dist/assets/{validate-CAin6WM_.js → validate-CYhW1xMJ.js} +2 -2
  371. package/dashboard/dist/assets/{validate-CAin6WM_.js.map → validate-CYhW1xMJ.js.map} +1 -1
  372. package/dashboard/dist/assets/{vendor-icons-en0_uSRD.js → vendor-icons-ed7mYQw4.js} +2 -2
  373. package/dashboard/dist/assets/{vendor-icons-en0_uSRD.js.map → vendor-icons-ed7mYQw4.js.map} +1 -1
  374. package/dashboard/dist/assets/{yaml-workflows-Dyln3od-.js → yaml-workflows-C20qHo3L.js} +2 -2
  375. package/dashboard/dist/assets/{yaml-workflows-Dyln3od-.js.map → yaml-workflows-C20qHo3L.js.map} +1 -1
  376. package/dashboard/dist/index.html +3 -3
  377. package/docs/api/http/escalations.md +15 -0
  378. package/docs/api/http/labels.md +115 -0
  379. package/docs/api/http/users.md +2 -0
  380. package/docs/api/mcp/admin.md +76 -1
  381. package/docs/code-owned-configuration.md +1 -1
  382. package/docs/dashboard.md +2 -2
  383. package/docs/hitl/x-lt-roster.md +2 -0
  384. package/docs/hitl/x-lt-scan.md +12 -0
  385. package/docs/iam.md +12 -0
  386. package/docs/label-sheets.md +267 -0
  387. package/docs/scan-codes.md +93 -9
  388. package/package.json +4 -1
  389. package/dashboard/dist/assets/AvailableEscalationsPage-GFn8Sgg1.js +0 -2
  390. package/dashboard/dist/assets/AvailableEscalationsPage-GFn8Sgg1.js.map +0 -1
  391. package/dashboard/dist/assets/BulkAssignModal-CmLVxkz-.js +0 -2
  392. package/dashboard/dist/assets/HomePage-67xXjKjN.js +0 -2
  393. package/dashboard/dist/assets/McpRunDetailPage-qHRQ1pEY.js +0 -2
  394. package/dashboard/dist/assets/OperatorDashboard-el5BquXN.js +0 -2
  395. package/dashboard/dist/assets/PersonaDetailPage-B_tb8gfl.js +0 -2
  396. package/dashboard/dist/assets/RoleDetailPage-DtU7vsJm.js +0 -8
  397. package/dashboard/dist/assets/RolesPage-BE7RWt9q.js +0 -2
  398. package/dashboard/dist/assets/RosterWidget-BJMx0a8Z.js.map +0 -1
  399. package/dashboard/dist/assets/RunAsSelector-Co6s9bqA.js +0 -2
  400. package/dashboard/dist/assets/ScanCodesPage-C2TETaj5.js +0 -2
  401. package/dashboard/dist/assets/ScanSchemeDetailPage-C2UgU8l-.js +0 -5
  402. package/dashboard/dist/assets/ScanSchemeDetailPage-C2UgU8l-.js.map +0 -1
  403. package/dashboard/dist/assets/ScanStationPage-nWYz-OD3.js +0 -2
  404. package/dashboard/dist/assets/ScanStationPage-nWYz-OD3.js.map +0 -1
  405. package/dashboard/dist/assets/WorkflowExecutionPage-Crf7AIFc.js +0 -2
  406. package/dashboard/dist/assets/WorkflowsDashboard--isjt06C.js +0 -2
  407. package/dashboard/dist/assets/index-B95LbYhW.js +0 -2
  408. package/dashboard/dist/assets/index-B95LbYhW.js.map +0 -1
  409. package/dashboard/dist/assets/index-BmzscsXK.css +0 -1
  410. package/dashboard/dist/assets/index-DRK7M1_9.js +0 -2
  411. package/dashboard/dist/assets/index-P-DlgAWj.js +0 -3
  412. package/dashboard/dist/assets/index-P-DlgAWj.js.map +0 -1
  413. package/dashboard/dist/assets/index-ygxyAKcc.js.map +0 -1
package/build/index.d.ts CHANGED
@@ -22,6 +22,7 @@ export { InMemoryEventAdapter } from './lib/events/memory';
22
22
  export { SocketIOEventAdapter, type SocketIOAuthenticator } from './lib/events/socketio';
23
23
  export { publishMilestoneEvent, publishTaskEvent, publishEscalationEvent, publishActivityEvent, publishWorkflowEvent, publishAgentEvent, publishKnowledgeEvent } from './lib/events/publish';
24
24
  export { messagingRegistry, MemoryMessagingProvider, DELIVERY } from './lib/messaging';
25
+ export { labelTransportRegistry } from './lib/labels/transports';
25
26
  export { NatsMessagingProvider } from './lib/messaging/nats/provider';
26
27
  export { renderNatsConf, type NatsConfOptions, type EdgeAccount, type NatsUser } from './lib/messaging/nats/render-conf';
27
28
  export { jsPermissions } from './lib/messaging/nats/permissions';
package/build/index.js CHANGED
@@ -36,8 +36,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
36
36
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.PinoLoggerAdapter = exports.loggerRegistry = exports.HoneycombTelemetryAdapter = exports.telemetryRegistry = exports.jsPermissions = exports.renderNatsConf = exports.NatsMessagingProvider = exports.DELIVERY = exports.MemoryMessagingProvider = exports.messagingRegistry = exports.publishKnowledgeEvent = exports.publishAgentEvent = exports.publishWorkflowEvent = exports.publishActivityEvent = exports.publishEscalationEvent = exports.publishTaskEvent = exports.publishMilestoneEvent = exports.SocketIOEventAdapter = exports.InMemoryEventAdapter = exports.NatsEventAdapter = exports.eventRegistry = exports.ltConfig = exports.seedConfigTopics = exports.seedSystemTopics = exports.TopicService = exports.displayGtin = exports.normalizeGtin = exports.isValidGtin = exports.assertValidScanIdentityRule = exports.assertValidScanSteps = exports.assertValidScanScheme = exports.UserService = exports.ConfigService = exports.EscalationService = exports.TaskService = exports.setAuthAdapter = exports.signToken = exports.requireAdmin = exports.requireAuth = exports.createAuthMiddleware = exports.JwtAuthAdapter = exports.conditionalAccumulator = exports.conditionLT = exports.conditional = exports.executeLT = exports.createLTActivityInterceptor = exports.createLTInterceptor = exports.registerLT = exports.midnightTheme = exports.start = void 0;
40
- exports.LTExpressAdapter = exports.Machines = exports.api = exports.KnowledgeApi = exports.resolveCredential = exports.mimeFromPath = exports.getStorageBackend = exports.listOAuthConnections = exports.getFreshAccessToken = exports.createClient = exports.CallbackEventAdapter = exports.builtinMcpServerFactories = exports.getSystemAgents = exports.getSystemWorkers = exports.registerMcpTool = exports.getToolContext = exports.getActivityIdentity = exports.McpEscalationStrategy = exports.DefaultEscalationStrategy = exports.escalationStrategyRegistry = exports.McpVisionServer = exports.McpTranslationServer = exports.McpServer = exports.McpClient = exports.McpService = exports.BuiltInMcpAdapter = exports.mcpRegistry = exports.defaultMaintenanceConfig = exports.maintenanceRegistry = void 0;
39
+ exports.loggerRegistry = exports.HoneycombTelemetryAdapter = exports.telemetryRegistry = exports.jsPermissions = exports.renderNatsConf = exports.NatsMessagingProvider = exports.labelTransportRegistry = exports.DELIVERY = exports.MemoryMessagingProvider = exports.messagingRegistry = exports.publishKnowledgeEvent = exports.publishAgentEvent = exports.publishWorkflowEvent = exports.publishActivityEvent = exports.publishEscalationEvent = exports.publishTaskEvent = exports.publishMilestoneEvent = exports.SocketIOEventAdapter = exports.InMemoryEventAdapter = exports.NatsEventAdapter = exports.eventRegistry = exports.ltConfig = exports.seedConfigTopics = exports.seedSystemTopics = exports.TopicService = exports.displayGtin = exports.normalizeGtin = exports.isValidGtin = exports.assertValidScanIdentityRule = exports.assertValidScanSteps = exports.assertValidScanScheme = exports.UserService = exports.ConfigService = exports.EscalationService = exports.TaskService = exports.setAuthAdapter = exports.signToken = exports.requireAdmin = exports.requireAuth = exports.createAuthMiddleware = exports.JwtAuthAdapter = exports.conditionalAccumulator = exports.conditionLT = exports.conditional = exports.executeLT = exports.createLTActivityInterceptor = exports.createLTInterceptor = exports.registerLT = exports.midnightTheme = exports.start = void 0;
40
+ exports.LTExpressAdapter = exports.Machines = exports.api = exports.KnowledgeApi = exports.resolveCredential = exports.mimeFromPath = exports.getStorageBackend = exports.listOAuthConnections = exports.getFreshAccessToken = exports.createClient = exports.CallbackEventAdapter = exports.builtinMcpServerFactories = exports.getSystemAgents = exports.getSystemWorkers = exports.registerMcpTool = exports.getToolContext = exports.getActivityIdentity = exports.McpEscalationStrategy = exports.DefaultEscalationStrategy = exports.escalationStrategyRegistry = exports.McpVisionServer = exports.McpTranslationServer = exports.McpServer = exports.McpClient = exports.McpService = exports.BuiltInMcpAdapter = exports.mcpRegistry = exports.defaultMaintenanceConfig = exports.maintenanceRegistry = exports.PinoLoggerAdapter = void 0;
41
41
  const config_1 = require("./modules/config");
42
42
  const logger_1 = require("./lib/logger");
43
43
  const midnight_1 = require("./themes/midnight");
@@ -105,6 +105,8 @@ var messaging_1 = require("./lib/messaging");
105
105
  Object.defineProperty(exports, "messagingRegistry", { enumerable: true, get: function () { return messaging_1.messagingRegistry; } });
106
106
  Object.defineProperty(exports, "MemoryMessagingProvider", { enumerable: true, get: function () { return messaging_1.MemoryMessagingProvider; } });
107
107
  Object.defineProperty(exports, "DELIVERY", { enumerable: true, get: function () { return messaging_1.DELIVERY; } });
108
+ var transports_1 = require("./lib/labels/transports");
109
+ Object.defineProperty(exports, "labelTransportRegistry", { enumerable: true, get: function () { return transports_1.labelTransportRegistry; } });
108
110
  var provider_1 = require("./lib/messaging/nats/provider");
109
111
  Object.defineProperty(exports, "NatsMessagingProvider", { enumerable: true, get: function () { return provider_1.NatsMessagingProvider; } });
110
112
  var render_conf_1 = require("./lib/messaging/nats/render-conf");
@@ -0,0 +1,65 @@
1
+ -- Migration 044: label templates and the label ledger
2
+ --
3
+ -- lt_config_label_templates: what one printed label shows for a scan scheme.
4
+ -- `codes` lists the rules printed on the label, each beside its caption, in
5
+ -- order: [{ category, caption?, tone }]. `text` holds the title and up to two
6
+ -- lines, written in label tokens ({target}, {item.<facet>}, {user.<key>}).
7
+ -- `revision` advances on every change; `source` says who declared it.
8
+ -- Templates on an identity scheme are always sensitive.
9
+ --
10
+ -- lt_label_jobs: one row per credential event or label print, written before
11
+ -- any code leaves the server. It holds who asked, what template (snapshot),
12
+ -- and who or what the labels name. Identity codes are never stored: identity
13
+ -- jobs record subject_user_ids, item jobs record targets. Rows are never
14
+ -- deleted by the platform.
15
+
16
+ CREATE TABLE IF NOT EXISTS lt_config_label_templates (
17
+ name TEXT PRIMARY KEY CHECK (name ~ '^[a-z0-9][a-z0-9-]{0,62}$'),
18
+ scheme_version INT NOT NULL REFERENCES lt_config_scan_schemes(version) ON DELETE CASCADE,
19
+ title TEXT NOT NULL,
20
+ description TEXT,
21
+ codes JSONB NOT NULL,
22
+ text JSONB NOT NULL DEFAULT '{}'::jsonb,
23
+ symbology TEXT NOT NULL DEFAULT 'code128'
24
+ CHECK (symbology IN ('code128', 'qrcode', 'datamatrix')),
25
+ human_readable BOOLEAN NOT NULL DEFAULT true,
26
+ media TEXT,
27
+ sensitive BOOLEAN NOT NULL DEFAULT false,
28
+ enabled BOOLEAN NOT NULL DEFAULT true,
29
+ revision INT NOT NULL DEFAULT 1,
30
+ source TEXT NOT NULL DEFAULT 'api' CHECK (source IN ('code', 'api')),
31
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
32
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
33
+ );
34
+
35
+ CREATE INDEX IF NOT EXISTS lt_config_label_templates_scheme_idx
36
+ ON lt_config_label_templates (scheme_version);
37
+
38
+ DROP TRIGGER IF EXISTS trg_lt_config_label_templates_updated_at ON lt_config_label_templates;
39
+ CREATE TRIGGER trg_lt_config_label_templates_updated_at
40
+ BEFORE UPDATE ON lt_config_label_templates
41
+ FOR EACH ROW EXECUTE FUNCTION lt_set_updated_at();
42
+
43
+ CREATE TABLE IF NOT EXISTS lt_label_jobs (
44
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
45
+ action TEXT NOT NULL CHECK (action IN ('print', 'reissue', 'bind')),
46
+ requested_by UUID,
47
+ idempotency_key TEXT UNIQUE,
48
+ template_name TEXT,
49
+ template_revision INT,
50
+ template_snapshot JSONB,
51
+ scheme_version INT,
52
+ scheme_kind TEXT,
53
+ sensitive BOOLEAN NOT NULL DEFAULT false,
54
+ source JSONB NOT NULL DEFAULT '{}'::jsonb,
55
+ subject_user_ids UUID[],
56
+ targets TEXT[],
57
+ label_count INT NOT NULL DEFAULT 0,
58
+ media JSONB,
59
+ output TEXT,
60
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
61
+ );
62
+
63
+ CREATE INDEX IF NOT EXISTS lt_label_jobs_created_idx ON lt_label_jobs (created_at DESC);
64
+ CREATE INDEX IF NOT EXISTS lt_label_jobs_requester_idx ON lt_label_jobs (requested_by, created_at DESC);
65
+ CREATE INDEX IF NOT EXISTS lt_label_jobs_subjects_idx ON lt_label_jobs USING GIN (subject_user_ids);
@@ -0,0 +1,14 @@
1
+ -- Migration 045: delivery stamps on the label ledger
2
+ --
3
+ -- A job sent through a printer transport is recorded first, then delivered.
4
+ -- delivery_claimed_at is a short lease one process takes before sending, so
5
+ -- a retried request (same idempotency key) re-sends only an undelivered job
6
+ -- whose lease has lapsed: never twice at once, never lost after a crash
7
+ -- between record and send. delivered_at is stamped once the transport
8
+ -- accepts. These two columns are the only ones the platform updates.
9
+
10
+ ALTER TABLE lt_label_jobs
11
+ ADD COLUMN IF NOT EXISTS delivery_claimed_at TIMESTAMPTZ,
12
+ ADD COLUMN IF NOT EXISTS delivered_at TIMESTAMPTZ;
13
+
14
+ CREATE INDEX IF NOT EXISTS lt_label_jobs_template_idx ON lt_label_jobs (template_name, created_at DESC);
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The label transport registry: named routes from issued labels to printers,
3
+ * registered at startup. Sending is a capability, not a side effect, so a
4
+ * name with no transport fails loudly instead of printing nothing.
5
+ */
6
+ import type { LTLabelTransport } from '../../types/labels';
7
+ export declare const LABEL_TRANSPORT_NOT_CONFIGURED = "No label transport is registered under that name; pass start({ labels: { transports } })";
8
+ declare class LTLabelTransportRegistry {
9
+ private transports;
10
+ /** Register a transport by name; replaces one registered before under the same name. */
11
+ register(name: string, transport: LTLabelTransport): void;
12
+ has(name: string): boolean;
13
+ /** The registered transports, by name, with the formats each accepts. */
14
+ list(): Array<{
15
+ name: string;
16
+ formats: LTLabelTransport['formats'];
17
+ }>;
18
+ get(name: string): LTLabelTransport;
19
+ /** Forget every transport (tests). */
20
+ clear(): void;
21
+ }
22
+ export declare const labelTransportRegistry: LTLabelTransportRegistry;
23
+ export {};
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ /**
3
+ * The label transport registry: named routes from issued labels to printers,
4
+ * registered at startup. Sending is a capability, not a side effect, so a
5
+ * name with no transport fails loudly instead of printing nothing.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.labelTransportRegistry = exports.LABEL_TRANSPORT_NOT_CONFIGURED = void 0;
9
+ exports.LABEL_TRANSPORT_NOT_CONFIGURED = 'No label transport is registered under that name; pass start({ labels: { transports } })';
10
+ class LTLabelTransportRegistry {
11
+ constructor() {
12
+ this.transports = new Map();
13
+ }
14
+ /** Register a transport by name; replaces one registered before under the same name. */
15
+ register(name, transport) {
16
+ if (!/^[a-z0-9][a-z0-9-]{0,62}$/.test(name)) {
17
+ throw new Error(`label transport name "${name}" must be lowercase letters, digits and dashes`);
18
+ }
19
+ this.transports.set(name, transport);
20
+ }
21
+ has(name) {
22
+ return this.transports.has(name);
23
+ }
24
+ /** The registered transports, by name, with the formats each accepts. */
25
+ list() {
26
+ return [...this.transports].map(([name, t]) => ({ name, formats: [...t.formats] }));
27
+ }
28
+ get(name) {
29
+ const transport = this.transports.get(name);
30
+ if (!transport)
31
+ throw new Error(`${exports.LABEL_TRANSPORT_NOT_CONFIGURED} (asked for "${name}")`);
32
+ return transport;
33
+ }
34
+ /** Forget every transport (tests). */
35
+ clear() {
36
+ this.transports.clear();
37
+ }
38
+ }
39
+ exports.labelTransportRegistry = new LTLabelTransportRegistry();
@@ -57,6 +57,8 @@ export declare const requireAdmin: RequestHandler<import("express-serve-static-c
57
57
  export declare const requireBuilder: RequestHandler<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>;
58
58
  /** Role-management access: admin access or the 'engineer' role. Backend twin of `isBuilder || isOps`. */
59
59
  export declare const requireRoleManager: RequestHandler<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>;
60
+ /** Credential access: superadmin or the 'credential-issuer' role. Gates badge printing and reissue. */
61
+ export declare const requireCredentialIssuer: RequestHandler<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>;
60
62
  /** Reads of one workflow run (`:workflowId`): builder access, or the person who started it or it runs as. */
61
63
  export declare const requireWorkflowReader: RequestHandler;
62
64
  /**
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.requireWorkflowReader = exports.requireRoleManager = exports.requireBuilder = exports.requireAdmin = exports.requireCredentialAuth = exports.requireAuth = exports.JwtAuthAdapter = void 0;
6
+ exports.requireWorkflowReader = exports.requireCredentialIssuer = exports.requireRoleManager = exports.requireBuilder = exports.requireAdmin = exports.requireCredentialAuth = exports.requireAuth = exports.JwtAuthAdapter = void 0;
7
7
  exports.createAuthMiddleware = createAuthMiddleware;
8
8
  exports.setAuthAdapter = setAuthAdapter;
9
9
  exports.signToken = signToken;
@@ -201,6 +201,8 @@ exports.requireAdmin = requireCapability(capabilities_1.mayAdminister, 'Forbidde
201
201
  exports.requireBuilder = requireCapability(capabilities_1.mayBuild, 'Forbidden: builder access required');
202
202
  /** Role-management access: admin access or the 'engineer' role. Backend twin of `isBuilder || isOps`. */
203
203
  exports.requireRoleManager = requireCapability(capabilities_1.mayManageRoles, 'Forbidden: role-management access required');
204
+ /** Credential access: superadmin or the 'credential-issuer' role. Gates badge printing and reissue. */
205
+ exports.requireCredentialIssuer = requireCapability(capabilities_1.mayIssueCredentials, 'Forbidden: credential-issuer access required');
204
206
  /** Reads of one workflow run (`:workflowId`): builder access, or the person who started it or it runs as. */
205
207
  const requireWorkflowReader = async (req, res, next) => {
206
208
  try {
@@ -19,10 +19,14 @@ export type GrantDecision = {
19
19
  allowed: false;
20
20
  error: string;
21
21
  };
22
+ /** Holders of this role may print and reissue identity credentials (badges). */
23
+ export declare const CREDENTIAL_ISSUER_ROLE = "credential-issuer";
22
24
  /** Admin or superadmin claim, or a superadmin in the database. */
23
25
  export declare function mayAdminister(principal: CapabilityPrincipal | undefined): Promise<boolean>;
24
26
  /** Superadmin (claim or database), or holder of the engineer role. */
25
27
  export declare function mayBuild(principal: CapabilityPrincipal | undefined): Promise<boolean>;
28
+ /** Superadmin (claim or database), or holder of the credential-issuer role. Admin type alone never grants it. */
29
+ export declare function mayIssueCredentials(principal: CapabilityPrincipal | undefined): Promise<boolean>;
26
30
  /**
27
31
  * Builder access, or the person a workflow run was started by or runs as,
28
32
  * read from the run's own start envelope.
@@ -51,7 +55,7 @@ export declare function mayRevokeRole(callerId: string, targetId: string, role:
51
55
  /**
52
56
  * Every capability the principal holds, with the same outcomes as the
53
57
  * predicates above. A superadmin claim costs no lookup; anyone else costs
54
- * at most one superadmin lookup and one engineer-role lookup.
58
+ * at most one superadmin lookup and two role lookups.
55
59
  */
56
60
  export declare function resolveCapabilities(principal: CapabilityPrincipal | undefined): Promise<CapabilitySet>;
57
61
  /**
@@ -33,8 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.CREDENTIAL_ISSUER_ROLE = void 0;
36
37
  exports.mayAdminister = mayAdminister;
37
38
  exports.mayBuild = mayBuild;
39
+ exports.mayIssueCredentials = mayIssueCredentials;
38
40
  exports.mayReadWorkflowRun = mayReadWorkflowRun;
39
41
  exports.mayManageRoles = mayManageRoles;
40
42
  exports.mayGrantRole = mayGrantRole;
@@ -47,9 +49,14 @@ const user_1 = require("../services/user");
47
49
  const export_1 = require("../services/export");
48
50
  const uuid_1 = require("../lib/uuid");
49
51
  const BUILDER_ROLE = 'engineer';
50
- async function hasBuilderRole(userId) {
52
+ /** Holders of this role may print and reissue identity credentials (badges). */
53
+ exports.CREDENTIAL_ISSUER_ROLE = 'credential-issuer';
54
+ async function holdsRole(userId, role) {
51
55
  const { hasRole } = await Promise.resolve().then(() => __importStar(require('../services/user/roles')));
52
- return hasRole(userId, BUILDER_ROLE);
56
+ return hasRole(userId, role);
57
+ }
58
+ async function hasBuilderRole(userId) {
59
+ return holdsRole(userId, BUILDER_ROLE);
53
60
  }
54
61
  /** Admin or superadmin claim, or a superadmin in the database. */
55
62
  async function mayAdminister(principal) {
@@ -69,6 +76,18 @@ async function mayBuild(principal) {
69
76
  return true;
70
77
  return hasBuilderRole(principal.userId);
71
78
  }
79
+ /** Superadmin (claim or database), or holder of the credential-issuer role. Admin type alone never grants it. */
80
+ async function mayIssueCredentials(principal) {
81
+ if (!principal?.userId)
82
+ return false;
83
+ if (principal.grantRoles)
84
+ return capabilitiesFromRoles(principal.grantRoles).credentialIssuer;
85
+ if (principal.role === 'superadmin')
86
+ return true;
87
+ if (await (0, user_1.isSuperAdmin)(principal.userId))
88
+ return true;
89
+ return holdsRole(principal.userId, exports.CREDENTIAL_ISSUER_ROLE);
90
+ }
72
91
  /**
73
92
  * Builder access, or the person a workflow run was started by or runs as,
74
93
  * read from the run's own start envelope.
@@ -148,15 +167,19 @@ function capabilitiesFromRoles(roles) {
148
167
  const superadmin = roles.some((r) => r.type === 'superadmin');
149
168
  const admin = superadmin || roles.some((r) => r.type === 'admin');
150
169
  const engineer = roles.some((r) => r.role === BUILDER_ROLE);
151
- return { caller: true, admin, builder: superadmin || engineer, roleManager: admin || engineer, superadmin };
170
+ const issuer = roles.some((r) => r.role === exports.CREDENTIAL_ISSUER_ROLE);
171
+ return {
172
+ caller: true, admin, builder: superadmin || engineer, roleManager: admin || engineer, superadmin,
173
+ credentialIssuer: superadmin || issuer,
174
+ };
152
175
  }
153
176
  const NO_CAPABILITIES = {
154
- caller: false, admin: false, builder: false, roleManager: false, superadmin: false,
177
+ caller: false, admin: false, builder: false, roleManager: false, superadmin: false, credentialIssuer: false,
155
178
  };
156
179
  /**
157
180
  * Every capability the principal holds, with the same outcomes as the
158
181
  * predicates above. A superadmin claim costs no lookup; anyone else costs
159
- * at most one superadmin lookup and one engineer-role lookup.
182
+ * at most one superadmin lookup and two role lookups.
160
183
  */
161
184
  async function resolveCapabilities(principal) {
162
185
  if (!principal?.userId)
@@ -164,11 +187,18 @@ async function resolveCapabilities(principal) {
164
187
  if (principal.grantRoles)
165
188
  return capabilitiesFromRoles(principal.grantRoles);
166
189
  if (principal.role === 'superadmin' || (await (0, user_1.isSuperAdmin)(principal.userId))) {
167
- return { caller: true, admin: true, builder: true, roleManager: true, superadmin: true };
190
+ return { caller: true, admin: true, builder: true, roleManager: true, superadmin: true, credentialIssuer: true };
168
191
  }
169
192
  const admin = principal.role === 'admin';
170
- const engineer = await hasBuilderRole(principal.userId);
171
- return { caller: true, admin, builder: engineer, roleManager: admin || engineer, superadmin: false };
193
+ const { hasRole } = await Promise.resolve().then(() => __importStar(require('../services/user/roles')));
194
+ const [engineer, issuer] = await Promise.all([
195
+ hasRole(principal.userId, BUILDER_ROLE),
196
+ hasRole(principal.userId, exports.CREDENTIAL_ISSUER_ROLE),
197
+ ]);
198
+ return {
199
+ caller: true, admin, builder: engineer, roleManager: admin || engineer, superadmin: false,
200
+ credentialIssuer: issuer,
201
+ };
172
202
  }
173
203
  /**
174
204
  * Capability checks for one request. `caller` needs only an authenticated
@@ -41,5 +41,15 @@ export declare const config: {
41
41
  LT_ANALYTICS_CACHE_TTL_MS: number;
42
42
  LT_ANALYTICS_PAST_CACHE_TTL_MS: number;
43
43
  LT_ANALYTICS_CACHE_MAX_ENTRIES: number;
44
+ /** Identity keys (badge tokens) leave user reads and need credentialIssuer to write. `false` keeps the earlier behavior. */
45
+ LT_PROTECT_IDENTITY_KEYS: boolean;
46
+ /** Label sheets: the media a job prints on when neither the job nor the template names one. */
47
+ LT_LABELS_DEFAULT_MEDIA: string;
48
+ /** Most labels one print job may hold. */
49
+ LT_LABELS_MAX_PER_JOB: number;
50
+ /** Most identity credentials (badges) one print job may hold. */
51
+ LT_LABELS_MAX_CREDENTIALS_PER_JOB: number;
52
+ /** How long one process holds a print job's delivery before a retry may send it. */
53
+ LT_LABELS_DELIVERY_LEASE_SECONDS: number;
44
54
  };
45
55
  export declare const postgres_options: Record<string, unknown>;
@@ -67,6 +67,16 @@ exports.config = {
67
67
  LT_ANALYTICS_CACHE_TTL_MS: parseInt(process.env.LT_ANALYTICS_CACHE_TTL_MS || '30000', 10),
68
68
  LT_ANALYTICS_PAST_CACHE_TTL_MS: parseInt(process.env.LT_ANALYTICS_PAST_CACHE_TTL_MS || '600000', 10),
69
69
  LT_ANALYTICS_CACHE_MAX_ENTRIES: parseInt(process.env.LT_ANALYTICS_CACHE_MAX_ENTRIES || '512', 10),
70
+ /** Identity keys (badge tokens) leave user reads and need credentialIssuer to write. `false` keeps the earlier behavior. */
71
+ LT_PROTECT_IDENTITY_KEYS: process.env.LT_PROTECT_IDENTITY_KEYS !== 'false',
72
+ /** Label sheets: the media a job prints on when neither the job nor the template names one. */
73
+ LT_LABELS_DEFAULT_MEDIA: process.env.LT_LABELS_DEFAULT_MEDIA || 'a4-l7160',
74
+ /** Most labels one print job may hold. */
75
+ LT_LABELS_MAX_PER_JOB: positiveInt('LT_LABELS_MAX_PER_JOB', 1000),
76
+ /** Most identity credentials (badges) one print job may hold. */
77
+ LT_LABELS_MAX_CREDENTIALS_PER_JOB: positiveInt('LT_LABELS_MAX_CREDENTIALS_PER_JOB', 200),
78
+ /** How long one process holds a print job's delivery before a retry may send it. */
79
+ LT_LABELS_DELIVERY_LEASE_SECONDS: positiveInt('LT_LABELS_DELIVERY_LEASE_SECONDS', 120),
70
80
  };
71
81
  exports.postgres_options = {
72
82
  host: exports.config.POSTGRES_HOST,
@@ -171,6 +171,24 @@ function registerResolveRoutes(router) {
171
171
  }, req.auth);
172
172
  res.status(result.status).json(result.data ?? { error: result.error });
173
173
  });
174
+ /**
175
+ * POST /api/escalations/:id/roster-scan
176
+ * A scan into a batch roster on this row's form. The field must declare
177
+ * x-lt-scan accepting the code's scheme; the scan fills the first open entry
178
+ * whose key is the code, as the person acting (the badged person when
179
+ * X-LT-Acting-Token rides the request).
180
+ * Body: { field: string, code: string }
181
+ */
182
+ router.post('/:id/roster-scan', async (req, res) => {
183
+ const token = req.headers[acting_1.ACTING_TOKEN_HEADER];
184
+ const result = await api.runRosterScan({
185
+ id: req.params.id,
186
+ field: req.body?.field,
187
+ code: req.body?.code,
188
+ actingToken: typeof token === 'string' && token ? token : undefined,
189
+ }, req.auth);
190
+ res.status(result.status).json(result.data ?? { error: result.error });
191
+ });
174
192
  /**
175
193
  * POST /api/escalations/:id/resolve
176
194
  * Resolve a pending escalation with a human-provided payload. Routes by
@@ -38,6 +38,7 @@ const capabilities_1 = __importDefault(require("./capabilities"));
38
38
  const topics_1 = __importDefault(require("./topics"));
39
39
  const nats_credentials_1 = __importDefault(require("./nats-credentials"));
40
40
  const scan_codes_1 = __importDefault(require("./scan-codes"));
41
+ const labels_1 = __importDefault(require("./labels"));
41
42
  const domain_1 = __importDefault(require("./domain"));
42
43
  const announcements_1 = __importDefault(require("./announcements"));
43
44
  const machines_1 = __importDefault(require("./machines"));
@@ -79,6 +80,7 @@ router.use('/agents', agents_1.default);
79
80
  router.use('/capabilities', capabilities_1.default);
80
81
  router.use('/topics', topics_1.default);
81
82
  router.use('/scan-codes', scan_codes_1.default);
83
+ router.use('/labels', labels_1.default);
82
84
  router.use('/domain', domain_1.default);
83
85
  router.use('/announcements', announcements_1.default);
84
86
  router.use('/machines', machines_1.default);
@@ -0,0 +1,2 @@
1
+ declare const router: import("express-serve-static-core").Router;
2
+ export default router;
@@ -0,0 +1,135 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const http_1 = require("../lib/http");
37
+ const api = __importStar(require("../api/labels"));
38
+ const auth_1 = require("../modules/auth");
39
+ const router = (0, http_1.Router)();
40
+ /** An issue result: PDF and ZPL as files, a sheet as JSON. Codes are never cached. */
41
+ function sendIssued(res, result) {
42
+ res.set('Cache-Control', 'no-store');
43
+ if (result.status !== 200) {
44
+ res.status(result.status).json({ error: result.error });
45
+ return;
46
+ }
47
+ const { pdf, zpl, ...rest } = result.data;
48
+ res.set('X-LT-Label-Job', rest.job.id);
49
+ if (rest.warnings?.length)
50
+ res.set('X-LT-Label-Warnings', String(rest.warnings.length));
51
+ if (pdf) {
52
+ res.type('application/pdf').set('Content-Disposition', `attachment; filename="labels-${rest.job.id}.pdf"`).send(Buffer.from(pdf));
53
+ return;
54
+ }
55
+ if (zpl) {
56
+ res.type('application/vnd.zebra-zpl').set('Content-Disposition', `attachment; filename="labels-${rest.job.id}.zpl"`).send(zpl);
57
+ return;
58
+ }
59
+ res.json(rest);
60
+ }
61
+ // ── Templates ─────────────────────────────────────────────────────────────
62
+ /** GET /api/labels/templates?scheme=14 */
63
+ router.get('/templates', async (req, res) => {
64
+ const scheme = req.query.scheme ? Number(req.query.scheme) : undefined;
65
+ const result = await api.listLabelTemplates({ scheme });
66
+ res.status(result.status).json(result.data ?? { error: result.error });
67
+ });
68
+ /** GET /api/labels/templates/:name */
69
+ router.get('/templates/:name', async (req, res) => {
70
+ const result = await api.getLabelTemplate({ name: String(req.params.name) });
71
+ res.status(result.status).json(result.data ?? { error: result.error });
72
+ });
73
+ /** PUT /api/labels/templates/:name — body is the template; `expected_revision` guards a concurrent edit. */
74
+ router.put('/templates/:name', auth_1.requireRoleManager, async (req, res) => {
75
+ const result = await api.upsertLabelTemplate({ ...(req.body || {}), name: String(req.params.name) });
76
+ res.status(result.status).json(result.data ?? { error: result.error });
77
+ });
78
+ /** DELETE /api/labels/templates/:name */
79
+ router.delete('/templates/:name', auth_1.requireRoleManager, async (req, res) => {
80
+ const result = await api.deleteLabelTemplate({ name: String(req.params.name) });
81
+ res.status(result.status).json(result.data ?? { error: result.error });
82
+ });
83
+ /** GET /api/labels/media — presets and the default media. */
84
+ router.get('/media', async (_req, res) => {
85
+ const result = await api.listLabelMedia();
86
+ res.status(result.status).json(result.data);
87
+ });
88
+ /** GET /api/labels/transports — registered printer transports. */
89
+ router.get('/transports', async (_req, res) => {
90
+ const result = await api.listLabelTransports();
91
+ res.status(result.status).json(result.data);
92
+ });
93
+ // ── Print ─────────────────────────────────────────────────────────────────
94
+ /** POST /api/labels/preview — { template, source, layout? }. Sensitive templates come back masked. */
95
+ router.post('/preview', async (req, res) => {
96
+ const { template, source, layout } = req.body || {};
97
+ const result = await api.previewLabels({ template, source, layout }, req.auth);
98
+ res.set('Cache-Control', 'no-store');
99
+ res.status(result.status).json(result.data ?? { error: result.error });
100
+ });
101
+ /**
102
+ * POST /api/labels/issue — { template, source, layout?, output, confirm?, idempotencyKey?, destination? }.
103
+ * output: sheet (JSON), pdf, zpl, or transport:<name>.
104
+ */
105
+ router.post('/issue', async (req, res) => {
106
+ const { template, source, layout, output, confirm, idempotencyKey, destination, only } = req.body || {};
107
+ sendIssued(res, await api.issueLabels({ template, source, layout, output, confirm, idempotencyKey, destination, only }, req.auth));
108
+ });
109
+ /** POST /api/labels/badges/reissue — { userId, template, layout?, output, confirm }. */
110
+ router.post('/badges/reissue', async (req, res) => {
111
+ const { userId, template, layout, output, confirm } = req.body || {};
112
+ sendIssued(res, await api.reissueBadge({ userId, template, layout, output, confirm }, req.auth));
113
+ });
114
+ // ── History ───────────────────────────────────────────────────────────────
115
+ /** GET /api/labels/jobs?template=&subjectUserId=&limit=&offset= */
116
+ router.get('/jobs', async (req, res) => {
117
+ const result = await api.listLabelJobs({
118
+ template: req.query.template,
119
+ subjectUserId: req.query.subjectUserId,
120
+ limit: req.query.limit ? Number(req.query.limit) : undefined,
121
+ offset: req.query.offset ? Number(req.query.offset) : undefined,
122
+ }, req.auth);
123
+ res.status(result.status).json(result.data ?? { error: result.error });
124
+ });
125
+ /** GET /api/labels/jobs/:id */
126
+ router.get('/jobs/:id', async (req, res) => {
127
+ const result = await api.getLabelJob({ id: String(req.params.id) }, req.auth);
128
+ res.status(result.status).json(result.data ?? { error: result.error });
129
+ });
130
+ /** POST /api/labels/jobs/:id/reprint — { indices?, output, layout?, confirm? } */
131
+ router.post('/jobs/:id/reprint', async (req, res) => {
132
+ const { indices, output, layout, confirm } = req.body || {};
133
+ sendIssued(res, await api.reprintLabelJob({ id: String(req.params.id), indices, output, layout, confirm }, req.auth));
134
+ });
135
+ exports.default = router;
@@ -127,7 +127,7 @@ router.patch('/:id/properties', auth_1.requireBuilder, async (req, res) => {
127
127
  set,
128
128
  remove,
129
129
  rename,
130
- });
130
+ }, req.auth);
131
131
  res.status(result.status).json(result.data ?? { error: result.error });
132
132
  });
133
133
  /**
@@ -0,0 +1,13 @@
1
+ import { type ScanRule, type ScanScheme } from '../../types';
2
+ import type { LabelContent, LabelWarning } from '../../shared/labels/types';
3
+ import type { LabelTarget, LabelTemplate } from '../../types/labels';
4
+ export interface BuiltContents {
5
+ contents: LabelContent[];
6
+ warnings: LabelWarning[];
7
+ }
8
+ /**
9
+ * Compose every label. A target the scheme cannot carry (a fixed scheme's
10
+ * target with letters) prints its text without codes and is reported;
11
+ * identity warnings never repeat the target, which is the credential.
12
+ */
13
+ export declare function buildLabelContents(template: LabelTemplate, scheme: ScanScheme, rules: ScanRule[], targets: LabelTarget[], masked: boolean): BuiltContents;