@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
@@ -8,6 +8,7 @@ export { resolveEscalation, resolveBySignalKey, resolveByIds, resolveAllOrNone }
8
8
  export { resolveBatchItem, resolveBatchItemBySignalKey, resolveBatchItemByMetadata } from './resolve-batch';
9
9
  export { flagBatchItem, unflagBatchItem } from './batch-flag';
10
10
  export { runRosterAction, ROSTER_ACTION_OUTCOMES } from './roster-action';
11
+ export { runRosterScan, ROSTER_SCAN_OUTCOMES } from './roster-scan';
11
12
  export { accumulateItem, accumulateItemBySignalKey, accumulateItemByMetadata, removeItem, removeItemBySignalKey, removeItemByMetadata, getEscalationItems, getEscalationItemsBySignalKey, itemsView, } from './accumulate';
12
13
  export { findByMetadata, claimByMetadata, resolveByMetadata } from './metadata';
13
14
  export { cancelSingleEscalation, bulkCancel } from './cancel';
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.aggregateByFacets = exports.claimByFacets = exports.claimGroups = exports.searchByFacets = exports.bulkCancel = exports.cancelSingleEscalation = exports.resolveByMetadata = exports.claimByMetadata = exports.findByMetadata = exports.itemsView = exports.getEscalationItemsBySignalKey = exports.getEscalationItems = exports.removeItemByMetadata = exports.removeItemBySignalKey = exports.removeItem = exports.accumulateItemByMetadata = exports.accumulateItemBySignalKey = exports.accumulateItem = exports.ROSTER_ACTION_OUTCOMES = exports.runRosterAction = exports.unflagBatchItem = exports.flagBatchItem = exports.resolveBatchItemByMetadata = exports.resolveBatchItemBySignalKey = exports.resolveBatchItem = exports.resolveAllOrNone = exports.resolveByIds = exports.resolveBySignalKey = exports.resolveEscalation = exports.bulkTriage = exports.bulkEscalate = exports.bulkUnassign = exports.bulkAssign = exports.bulkClaim = exports.updatePriority = exports.releaseExpiredClaims = exports.releaseEscalation = exports.claimEscalation = exports.getEscalationLookups = exports.escalateToRole = exports.getEscalationsByWorkflowId = exports.getEscalation = exports.getStationMetrics = exports.getEscalationStats = exports.listFacetValues = exports.listFacetKeys = exports.listDistinctTypes = exports.listAvailableEscalations = exports.listEscalations = exports.createEscalation = void 0;
4
- exports.getRelatedRows = exports.getRelatedAggregates = exports.timelineByFacet = void 0;
3
+ exports.claimGroups = exports.searchByFacets = exports.bulkCancel = exports.cancelSingleEscalation = exports.resolveByMetadata = exports.claimByMetadata = exports.findByMetadata = exports.itemsView = exports.getEscalationItemsBySignalKey = exports.getEscalationItems = exports.removeItemByMetadata = exports.removeItemBySignalKey = exports.removeItem = exports.accumulateItemByMetadata = exports.accumulateItemBySignalKey = exports.accumulateItem = exports.ROSTER_SCAN_OUTCOMES = exports.runRosterScan = exports.ROSTER_ACTION_OUTCOMES = exports.runRosterAction = exports.unflagBatchItem = exports.flagBatchItem = exports.resolveBatchItemByMetadata = exports.resolveBatchItemBySignalKey = exports.resolveBatchItem = exports.resolveAllOrNone = exports.resolveByIds = exports.resolveBySignalKey = exports.resolveEscalation = exports.bulkTriage = exports.bulkEscalate = exports.bulkUnassign = exports.bulkAssign = exports.bulkClaim = exports.updatePriority = exports.releaseExpiredClaims = exports.releaseEscalation = exports.claimEscalation = exports.getEscalationLookups = exports.escalateToRole = exports.getEscalationsByWorkflowId = exports.getEscalation = exports.getStationMetrics = exports.getEscalationStats = exports.listFacetValues = exports.listFacetKeys = exports.listDistinctTypes = exports.listAvailableEscalations = exports.listEscalations = exports.createEscalation = void 0;
4
+ exports.getRelatedRows = exports.getRelatedAggregates = exports.timelineByFacet = exports.aggregateByFacets = exports.claimByFacets = void 0;
5
5
  var create_1 = require("./create");
6
6
  Object.defineProperty(exports, "createEscalation", { enumerable: true, get: function () { return create_1.createEscalation; } });
7
7
  var list_1 = require("./list");
@@ -44,6 +44,9 @@ Object.defineProperty(exports, "unflagBatchItem", { enumerable: true, get: funct
44
44
  var roster_action_1 = require("./roster-action");
45
45
  Object.defineProperty(exports, "runRosterAction", { enumerable: true, get: function () { return roster_action_1.runRosterAction; } });
46
46
  Object.defineProperty(exports, "ROSTER_ACTION_OUTCOMES", { enumerable: true, get: function () { return roster_action_1.ROSTER_ACTION_OUTCOMES; } });
47
+ var roster_scan_1 = require("./roster-scan");
48
+ Object.defineProperty(exports, "runRosterScan", { enumerable: true, get: function () { return roster_scan_1.runRosterScan; } });
49
+ Object.defineProperty(exports, "ROSTER_SCAN_OUTCOMES", { enumerable: true, get: function () { return roster_scan_1.ROSTER_SCAN_OUTCOMES; } });
47
50
  var accumulate_1 = require("./accumulate");
48
51
  Object.defineProperty(exports, "accumulateItem", { enumerable: true, get: function () { return accumulate_1.accumulateItem; } });
49
52
  Object.defineProperty(exports, "accumulateItemBySignalKey", { enumerable: true, get: function () { return accumulate_1.accumulateItemBySignalKey; } });
@@ -1,4 +1,5 @@
1
1
  import type { LTApiAuth, LTApiResult } from '../../types/sdk';
2
+ import type { LTEscalationRecord } from '../../types';
2
3
  /** Outcomes a roster action answers with besides the act's own result. */
3
4
  export declare const ROSTER_ACTION_OUTCOMES: {
4
5
  /** The action is limited to roles the person acting does not hold, and no badge rode the request. */
@@ -35,3 +36,13 @@ export interface RosterActionInput {
35
36
  * act that does not land returns the use.
36
37
  */
37
38
  export declare function runRosterAction(input: RosterActionInput, auth: LTApiAuth): Promise<LTApiResult>;
39
+ /** The host row and one field of its pinned form, or null when the row is gone or unreadable. */
40
+ export declare function loadHostField(id: string, field: string, auth: LTApiAuth): Promise<{
41
+ host: LTEscalationRecord;
42
+ fieldSchema: Record<string, unknown> | undefined;
43
+ } | null>;
44
+ /** Spend the badge, run the act, and return the use when the act does not land. */
45
+ export declare function spendAndRun(actingToken: string | undefined, run: () => Promise<LTApiResult>): Promise<LTApiResult>;
46
+ /** The person acting: the badge's person when one rides the request, read without spending it. */
47
+ export declare function actorFor(actingToken: string | undefined, auth: LTApiAuth): Promise<LTApiAuth | LTApiResult>;
48
+ export declare function refusal(status: number, outcome: string, error: string): LTApiResult;
@@ -35,6 +35,10 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.ROSTER_ACTION_OUTCOMES = void 0;
37
37
  exports.runRosterAction = runRosterAction;
38
+ exports.loadHostField = loadHostField;
39
+ exports.spendAndRun = spendAndRun;
40
+ exports.actorFor = actorFor;
41
+ exports.refusal = refusal;
38
42
  const escalationService = __importStar(require("../../services/escalation"));
39
43
  const userService = __importStar(require("../../services/user"));
40
44
  const roster_1 = require("../../services/escalation/roster");
@@ -77,14 +81,10 @@ async function runRosterAction(input, auth) {
77
81
  return { status: 400, error: 'id, field, action and entry are required' };
78
82
  }
79
83
  // 1. The host row and its form, as the page that offered the action read them
80
- const detail = await escalationService.getEscalationWithFormSchema(input.id);
81
- if (!detail || (await (0, helpers_1.assertReadAccess)(auth.userId, detail.escalation))) {
84
+ const loaded = await loadHostField(input.id, input.field, auth);
85
+ if (!loaded)
82
86
  return { status: 404, error: 'Escalation not found' };
83
- }
84
- const host = detail.escalation;
85
- const embedded = host.metadata?.form_schema;
86
- const schema = (embedded && typeof embedded === 'object' ? embedded : detail.form_schema);
87
- const fieldSchema = schema?.properties?.[input.field];
87
+ const { host, fieldSchema } = loaded;
88
88
  const def = (0, form_validation_1.readRosterDef)(fieldSchema);
89
89
  const action = (0, form_validation_1.readRosterActions)(fieldSchema)[input.action];
90
90
  if (!def || !action)
@@ -104,40 +104,57 @@ async function runRosterAction(input, auth) {
104
104
  return { status: 422, error, data: { error, outcome: 'code_mismatch' } };
105
105
  }
106
106
  // 3. The person acting: the badge's person when one rides the request, read without spending it
107
- let actor = auth;
108
- if (input.actingToken) {
109
- const peeked = await (0, acting_identity_1.peekActingAuth)(input.actingToken);
110
- if (!peeked.ok)
111
- return refusal(401, exports.ROSTER_ACTION_OUTCOMES.NOT_PRIMED, peeked.error);
112
- actor = peeked.auth;
113
- }
107
+ const actor = await actorFor(input.actingToken, auth);
108
+ if ('status' in actor)
109
+ return actor;
114
110
  if (!(await holdsRole(action, actor.userId))) {
115
111
  return input.actingToken
116
112
  ? refusal(403, exports.ROSTER_ACTION_OUTCOMES.ROLE_REFUSED, (0, form_validation_1.actionRefusal)(action))
117
113
  : refusal(403, exports.ROSTER_ACTION_OUTCOMES.NEEDS_BADGE, (0, form_validation_1.actionRefusal)(action));
118
114
  }
119
115
  // 4. Spend the badge, run the act, and return the use when it does not land
120
- let remaining;
121
- if (input.actingToken) {
122
- const spent = await (0, acting_identity_1.consumeActingGrant)(input.actingToken);
123
- if (!spent.ok)
124
- return refusal(401, exports.ROSTER_ACTION_OUTCOMES.NOT_PRIMED, spent.error);
125
- remaining = spent.grant.remaining;
126
- }
127
- const result = await runAct(kind, action, entry, host.id, ctx, input.code, actor);
128
- if (input.actingToken && result.status >= 300) {
129
- await (0, acting_identity_1.refundActingGrant)(input.actingToken, false);
130
- return result;
131
- }
132
- if (input.actingToken && result.data && typeof result.data === 'object') {
133
- result.data = { ...result.data, acting: { remaining } };
134
- }
135
- return result;
116
+ return spendAndRun(input.actingToken, () => runAct(kind, action, entry, host.id, ctx, input.code, actor));
136
117
  }
137
118
  catch (err) {
138
119
  return { status: 500, error: err.message };
139
120
  }
140
121
  }
122
+ /** The host row and one field of its pinned form, or null when the row is gone or unreadable. */
123
+ async function loadHostField(id, field, auth) {
124
+ const detail = await escalationService.getEscalationWithFormSchema(id);
125
+ if (!detail || (await (0, helpers_1.assertReadAccess)(auth.userId, detail.escalation)))
126
+ return null;
127
+ const host = detail.escalation;
128
+ const embedded = host.metadata?.form_schema;
129
+ const schema = (embedded && typeof embedded === 'object' ? embedded : detail.form_schema);
130
+ return { host, fieldSchema: schema?.properties?.[field] };
131
+ }
132
+ /** Spend the badge, run the act, and return the use when the act does not land. */
133
+ async function spendAndRun(actingToken, run) {
134
+ let remaining;
135
+ if (actingToken) {
136
+ const spent = await (0, acting_identity_1.consumeActingGrant)(actingToken);
137
+ if (!spent.ok)
138
+ return refusal(401, exports.ROSTER_ACTION_OUTCOMES.NOT_PRIMED, spent.error);
139
+ remaining = spent.grant.remaining;
140
+ }
141
+ const result = await run();
142
+ if (actingToken && result.status >= 300) {
143
+ await (0, acting_identity_1.refundActingGrant)(actingToken, false);
144
+ return result;
145
+ }
146
+ if (actingToken && result.data && typeof result.data === 'object') {
147
+ result.data = { ...result.data, acting: { remaining } };
148
+ }
149
+ return result;
150
+ }
151
+ /** The person acting: the badge's person when one rides the request, read without spending it. */
152
+ async function actorFor(actingToken, auth) {
153
+ if (!actingToken)
154
+ return auth;
155
+ const peeked = await (0, acting_identity_1.peekActingAuth)(actingToken);
156
+ return peeked.ok ? peeked.auth : refusal(401, exports.ROSTER_ACTION_OUTCOMES.NOT_PRIMED, peeked.error);
157
+ }
141
158
  async function holdsRole(action, userId) {
142
159
  if (!action.roles?.length)
143
160
  return true;
@@ -0,0 +1,26 @@
1
+ import type { LTApiAuth, LTApiResult } from '../../types/sdk';
2
+ /** Outcomes a roster scan answers with besides the fill's own result. */
3
+ export declare const ROSTER_SCAN_OUTCOMES: {
4
+ /** The field takes no scans, or not this code's scheme. */
5
+ readonly NOT_ACCEPTED: "not_accepted";
6
+ /** No open entry on the list is this code. */
7
+ readonly UNEXPECTED: "unexpected";
8
+ };
9
+ export interface RosterScanInput {
10
+ /** The host row: the escalation whose form declares the roster. */
11
+ id: string;
12
+ /** The roster field. */
13
+ field: string;
14
+ /** The code as scanned. */
15
+ code: string;
16
+ /** A badge grant: the fill runs as its person. */
17
+ actingToken?: string;
18
+ }
19
+ /**
20
+ * A scan into a batch roster on an open form. The field must declare
21
+ * `x-lt-scan` accepting the code's scheme; the scan fills the first open
22
+ * entry whose key is that code, as the person acting, with `scannedCode` as
23
+ * the entry's payload. Nothing about the request is trusted: the roster and
24
+ * its entries are re-read from the host row.
25
+ */
26
+ export declare function runRosterScan(input: RosterScanInput, auth: LTApiAuth): Promise<LTApiResult>;
@@ -0,0 +1,114 @@
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
+ exports.ROSTER_SCAN_OUTCOMES = void 0;
37
+ exports.runRosterScan = runRosterScan;
38
+ const scanCodeService = __importStar(require("../../services/scan-code"));
39
+ const roster_1 = require("../../services/escalation/roster");
40
+ const form_validation_1 = require("../../shared/form-validation");
41
+ const types_1 = require("../../types");
42
+ const roster_action_1 = require("./roster-action");
43
+ const resolve_batch_1 = require("./resolve-batch");
44
+ /** Outcomes a roster scan answers with besides the fill's own result. */
45
+ exports.ROSTER_SCAN_OUTCOMES = {
46
+ /** The field takes no scans, or not this code's scheme. */
47
+ NOT_ACCEPTED: 'not_accepted',
48
+ /** No open entry on the list is this code. */
49
+ UNEXPECTED: 'unexpected',
50
+ };
51
+ const STOCK_UNEXPECTED = 'Not one of the items expected here.';
52
+ /** A batch fill whose key was filled since the roster was read. */
53
+ const DUPLICATE_ITEM = 'duplicate-item';
54
+ function refused(status, outcome, error) {
55
+ return { status, error, data: { error, outcome } };
56
+ }
57
+ /**
58
+ * A scan into a batch roster on an open form. The field must declare
59
+ * `x-lt-scan` accepting the code's scheme; the scan fills the first open
60
+ * entry whose key is that code, as the person acting, with `scannedCode` as
61
+ * the entry's payload. Nothing about the request is trusted: the roster and
62
+ * its entries are re-read from the host row.
63
+ */
64
+ async function runRosterScan(input, auth) {
65
+ try {
66
+ if (!input?.id || typeof input.field !== 'string' || typeof input.code !== 'string' || !input.code.trim()) {
67
+ return { status: 400, error: 'id, field and code are required' };
68
+ }
69
+ // 1. The host row and a batch roster that takes this code's scheme
70
+ const loaded = await (0, roster_action_1.loadHostField)(input.id, input.field, auth);
71
+ if (!loaded)
72
+ return { status: 404, error: 'Escalation not found' };
73
+ const def = (0, form_validation_1.readRosterDef)(loaded.fieldSchema);
74
+ const sink = (0, form_validation_1.readScanSink)(loaded.fieldSchema);
75
+ if (!def || !('batch' in def.expected) || !sink) {
76
+ return refused(409, exports.ROSTER_SCAN_OUTCOMES.NOT_ACCEPTED, 'This list takes no scans');
77
+ }
78
+ const parsed = scanCodeService.parseScanCode(input.code.trim(), await scanCodeService.listScanSchemes());
79
+ if (!parsed.ok || parsed.scheme.kind !== types_1.SCAN_SCHEME_KINDS.ACTION || !sink.schemes.includes(parsed.parsed.version)) {
80
+ return refused(422, exports.ROSTER_SCAN_OUTCOMES.NOT_ACCEPTED, 'This list takes no code like that');
81
+ }
82
+ const value = sink.value === 'code' ? (parsed.parsed.raw ?? input.code.trim()) : parsed.parsed.target;
83
+ // 2. The open entries this code names, on the roster the server computes
84
+ const { escalation, metadata, envelope, payload } = (0, form_validation_1.rosterRowContext)(loaded.host);
85
+ const ctx = { escalation, metadata, envelope, payload };
86
+ const roster = await (0, roster_1.loadRoster)(def, ctx);
87
+ const named = roster.entries.filter((e) => (0, form_validation_1.enteredCodeMatches)(value, e.key, def.countedBy));
88
+ const open = named.filter((e) => e.state !== form_validation_1.ROSTER_STATES.IN);
89
+ if (open.length === 0) {
90
+ const error = named.length ? `All ${named.length} of these are already checked off.` : STOCK_UNEXPECTED;
91
+ return refused(422, exports.ROSTER_SCAN_OUTCOMES.UNEXPECTED, error);
92
+ }
93
+ // 3. Fill as the person acting; an entry taken since the read moves to the next
94
+ const actor = await (0, roster_action_1.actorFor)(input.actingToken, auth);
95
+ if ('status' in actor)
96
+ return actor;
97
+ return (0, roster_action_1.spendAndRun)(input.actingToken, async () => {
98
+ let result = { status: 409, error: 'Those entries were just checked off' };
99
+ for (const entry of open) {
100
+ result = await (0, resolve_batch_1.resolveBatchItem)({
101
+ id: loaded.host.id,
102
+ itemKey: entry.key,
103
+ resolverPayload: { scannedCode: input.code.trim() },
104
+ }, actor);
105
+ if (result.data?.outcome !== DUPLICATE_ITEM)
106
+ return result;
107
+ }
108
+ return result;
109
+ });
110
+ }
111
+ catch (err) {
112
+ return { status: 500, error: err.message };
113
+ }
114
+ }
@@ -0,0 +1,3 @@
1
+ import type { LTApiResult } from '../../types/sdk';
2
+ /** A refused label request as an API result; anything else is a 500. */
3
+ export declare function labelFailure(err: any): LTApiResult;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.labelFailure = labelFailure;
4
+ const labels_1 = require("../../services/labels");
5
+ /** A refused label request as an API result; anything else is a 500. */
6
+ function labelFailure(err) {
7
+ if (err instanceof labels_1.LabelRequestError)
8
+ return { status: err.status, error: err.message };
9
+ if (err instanceof labels_1.LabelTemplateValidationError || err instanceof labels_1.LabelTemplateConflictError) {
10
+ return { status: err.status, error: err.message };
11
+ }
12
+ if (err?.status === 400 || err?.status === 409)
13
+ return { status: err.status, error: err.message };
14
+ return { status: 500, error: err?.message ?? 'label request failed' };
15
+ }
@@ -0,0 +1,2 @@
1
+ export { listLabelTemplates, getLabelTemplate, upsertLabelTemplate, deleteLabelTemplate, listLabelMedia, listLabelTransports, } from './templates';
2
+ export { previewLabels, issueLabels, reissueBadge, listLabelJobs, getLabelJob, reprintLabelJob } from './issue';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reprintLabelJob = exports.getLabelJob = exports.listLabelJobs = exports.reissueBadge = exports.issueLabels = exports.previewLabels = exports.listLabelTransports = exports.listLabelMedia = exports.deleteLabelTemplate = exports.upsertLabelTemplate = exports.getLabelTemplate = exports.listLabelTemplates = void 0;
4
+ var templates_1 = require("./templates");
5
+ Object.defineProperty(exports, "listLabelTemplates", { enumerable: true, get: function () { return templates_1.listLabelTemplates; } });
6
+ Object.defineProperty(exports, "getLabelTemplate", { enumerable: true, get: function () { return templates_1.getLabelTemplate; } });
7
+ Object.defineProperty(exports, "upsertLabelTemplate", { enumerable: true, get: function () { return templates_1.upsertLabelTemplate; } });
8
+ Object.defineProperty(exports, "deleteLabelTemplate", { enumerable: true, get: function () { return templates_1.deleteLabelTemplate; } });
9
+ Object.defineProperty(exports, "listLabelMedia", { enumerable: true, get: function () { return templates_1.listLabelMedia; } });
10
+ Object.defineProperty(exports, "listLabelTransports", { enumerable: true, get: function () { return templates_1.listLabelTransports; } });
11
+ var issue_1 = require("./issue");
12
+ Object.defineProperty(exports, "previewLabels", { enumerable: true, get: function () { return issue_1.previewLabels; } });
13
+ Object.defineProperty(exports, "issueLabels", { enumerable: true, get: function () { return issue_1.issueLabels; } });
14
+ Object.defineProperty(exports, "reissueBadge", { enumerable: true, get: function () { return issue_1.reissueBadge; } });
15
+ Object.defineProperty(exports, "listLabelJobs", { enumerable: true, get: function () { return issue_1.listLabelJobs; } });
16
+ Object.defineProperty(exports, "getLabelJob", { enumerable: true, get: function () { return issue_1.getLabelJob; } });
17
+ Object.defineProperty(exports, "reprintLabelJob", { enumerable: true, get: function () { return issue_1.reprintLabelJob; } });
@@ -0,0 +1,54 @@
1
+ import type { LTApiAuth, LTApiResult } from '../../types/sdk';
2
+ import type { LabelIssueRequest, LabelLayoutRequest, LabelOutput, LabelSource } from '../../types/labels';
3
+ /**
4
+ * Lay out a print job without printing or recording it. Sensitive templates
5
+ * come back masked: positions without codes.
6
+ *
7
+ * @returns `{ status: 200, data: { template, sheet, warnings, labelCount } }`
8
+ */
9
+ export declare function previewLabels(input: {
10
+ template: string;
11
+ source: LabelSource;
12
+ layout?: LabelLayoutRequest;
13
+ }, auth: LTApiAuth): Promise<LTApiResult>;
14
+ /**
15
+ * Issue labels: recorded in the label ledger before any code is composed.
16
+ * Sensitive templates (every identity template) need `confirm: true`.
17
+ *
18
+ * @returns `{ status: 200, data: { job, replay, warnings, sheet?, pdf?, zpl?, receipt? } }`;
19
+ * 400 bad request, 403 no access, 404 unknown template, 428 confirmation required,
20
+ * 502 the transport failed after the job was recorded
21
+ */
22
+ export declare function issueLabels(input: LabelIssueRequest, auth: LTApiAuth): Promise<LTApiResult>;
23
+ /**
24
+ * Rotate a user's badge credential and print the new badge in one act. The
25
+ * old code stops resolving immediately. Needs credentialIssuer and `confirm`.
26
+ */
27
+ export declare function reissueBadge(input: {
28
+ userId: string;
29
+ template: string;
30
+ layout?: LabelLayoutRequest;
31
+ output: LabelOutput;
32
+ confirm?: boolean;
33
+ }, auth: LTApiAuth): Promise<LTApiResult>;
34
+ /** Label history as the caller may see it: credential issuers see every job; others see item jobs and their own. */
35
+ export declare function listLabelJobs(input: {
36
+ template?: string;
37
+ subjectUserId?: string;
38
+ limit?: number;
39
+ offset?: number;
40
+ }, auth: LTApiAuth): Promise<LTApiResult>;
41
+ export declare function getLabelJob(input: {
42
+ id: string;
43
+ }, auth: LTApiAuth): Promise<LTApiResult>;
44
+ /**
45
+ * Print a recorded job again from its source, with the template as it is
46
+ * now: the whole job, or `indices` of its labels. A new job is recorded.
47
+ */
48
+ export declare function reprintLabelJob(input: {
49
+ id: string;
50
+ indices?: number[];
51
+ output: LabelOutput;
52
+ layout?: LabelLayoutRequest;
53
+ confirm?: boolean;
54
+ }, auth: LTApiAuth): Promise<LTApiResult>;
@@ -0,0 +1,144 @@
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
+ exports.previewLabels = previewLabels;
37
+ exports.issueLabels = issueLabels;
38
+ exports.reissueBadge = reissueBadge;
39
+ exports.listLabelJobs = listLabelJobs;
40
+ exports.getLabelJob = getLabelJob;
41
+ exports.reprintLabelJob = reprintLabelJob;
42
+ const labels = __importStar(require("../../services/labels"));
43
+ const capabilities_1 = require("../../modules/capabilities");
44
+ const logger_1 = require("../../lib/logger");
45
+ const errors_1 = require("./errors");
46
+ /**
47
+ * Lay out a print job without printing or recording it. Sensitive templates
48
+ * come back masked: positions without codes.
49
+ *
50
+ * @returns `{ status: 200, data: { template, sheet, warnings, labelCount } }`
51
+ */
52
+ async function previewLabels(input, auth) {
53
+ try {
54
+ return { status: 200, data: await labels.previewLabels(input, auth) };
55
+ }
56
+ catch (err) {
57
+ return (0, errors_1.labelFailure)(err);
58
+ }
59
+ }
60
+ /**
61
+ * Issue labels: recorded in the label ledger before any code is composed.
62
+ * Sensitive templates (every identity template) need `confirm: true`.
63
+ *
64
+ * @returns `{ status: 200, data: { job, replay, warnings, sheet?, pdf?, zpl?, receipt? } }`;
65
+ * 400 bad request, 403 no access, 404 unknown template, 428 confirmation required,
66
+ * 502 the transport failed after the job was recorded
67
+ */
68
+ async function issueLabels(input, auth) {
69
+ try {
70
+ const result = await labels.issueLabels(input, auth);
71
+ logger_1.loggerRegistry.info(`[long-tail] labels issued: job=${result.job.id} template=${input.template} labels=${result.job.label_count} output=${input.output}${result.replay ? ' replay' : ''}`);
72
+ return { status: 200, data: result };
73
+ }
74
+ catch (err) {
75
+ return (0, errors_1.labelFailure)(err);
76
+ }
77
+ }
78
+ /**
79
+ * Rotate a user's badge credential and print the new badge in one act. The
80
+ * old code stops resolving immediately. Needs credentialIssuer and `confirm`.
81
+ */
82
+ async function reissueBadge(input, auth) {
83
+ try {
84
+ const result = await labels.reissueBadge(input, auth);
85
+ logger_1.loggerRegistry.info(`[long-tail] badge reissued: job=${result.reissueJobId} template=${input.template}`);
86
+ return { status: 200, data: result };
87
+ }
88
+ catch (err) {
89
+ return (0, errors_1.labelFailure)(err);
90
+ }
91
+ }
92
+ /** Label history as the caller may see it: credential issuers see every job; others see item jobs and their own. */
93
+ async function listLabelJobs(input, auth) {
94
+ try {
95
+ const jobs = await labels.listLabelJobs({ ...input, readerId: auth.userId, seesCredentials: await (0, capabilities_1.mayIssueCredentials)(auth) });
96
+ return { status: 200, data: { jobs } };
97
+ }
98
+ catch (err) {
99
+ return (0, errors_1.labelFailure)(err);
100
+ }
101
+ }
102
+ async function readableJob(id, auth) {
103
+ const job = await labels.getLabelJob(id);
104
+ if (!job)
105
+ return null;
106
+ if (job.sensitive && job.requested_by !== auth.userId && !(await (0, capabilities_1.mayIssueCredentials)(auth)))
107
+ return null;
108
+ return job;
109
+ }
110
+ async function getLabelJob(input, auth) {
111
+ try {
112
+ const { isUuid } = await Promise.resolve().then(() => __importStar(require('../../lib/uuid')));
113
+ const job = isUuid(input.id) ? await readableJob(input.id, auth) : null;
114
+ return job ? { status: 200, data: job } : { status: 404, error: 'Label job not found' };
115
+ }
116
+ catch (err) {
117
+ return (0, errors_1.labelFailure)(err);
118
+ }
119
+ }
120
+ /**
121
+ * Print a recorded job again from its source, with the template as it is
122
+ * now: the whole job, or `indices` of its labels. A new job is recorded.
123
+ */
124
+ async function reprintLabelJob(input, auth) {
125
+ try {
126
+ const { isUuid } = await Promise.resolve().then(() => __importStar(require('../../lib/uuid')));
127
+ const job = isUuid(input.id) ? await readableJob(input.id, auth) : null;
128
+ if (!job || job.action !== 'print' || !job.template_name)
129
+ return { status: 404, error: 'Label job not found' };
130
+ const named = job.subject_user_ids ?? job.targets ?? [];
131
+ const only = input.indices?.length ? input.indices.map((i) => named[i]).filter((v) => v !== undefined) : undefined;
132
+ return issueLabels({
133
+ template: job.template_name,
134
+ source: job.source,
135
+ layout: input.layout,
136
+ output: input.output,
137
+ confirm: input.confirm,
138
+ only,
139
+ }, auth);
140
+ }
141
+ catch (err) {
142
+ return (0, errors_1.labelFailure)(err);
143
+ }
144
+ }
@@ -0,0 +1,29 @@
1
+ import type { LTApiResult } from '../../types/sdk';
2
+ import type { LabelTemplateInput } from '../../types/labels';
3
+ /**
4
+ * List label templates, optionally for one scan scheme.
5
+ *
6
+ * @param input.scheme — scheme version to filter by
7
+ * @returns `{ status: 200, data: { templates } }`
8
+ */
9
+ export declare function listLabelTemplates(input?: {
10
+ scheme?: number;
11
+ }): Promise<LTApiResult>;
12
+ /** One label template by name; 404 when absent. */
13
+ export declare function getLabelTemplate(input: {
14
+ name: string;
15
+ }): Promise<LTApiResult>;
16
+ /**
17
+ * Create or replace a label template. With `expected_revision`, the write
18
+ * lands only on that revision (409 otherwise).
19
+ */
20
+ export declare function upsertLabelTemplate(input: LabelTemplateInput & {
21
+ expected_revision?: number;
22
+ }): Promise<LTApiResult>;
23
+ export declare function deleteLabelTemplate(input: {
24
+ name: string;
25
+ }): Promise<LTApiResult>;
26
+ /** Media presets and the deployment's default. */
27
+ export declare function listLabelMedia(): Promise<LTApiResult>;
28
+ /** Registered printer transports by name. */
29
+ export declare function listLabelTransports(): Promise<LTApiResult>;