@hotmeshio/long-tail 0.30.5 → 0.31.1

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 (373) hide show
  1. package/build/api/labels/errors.d.ts +3 -0
  2. package/build/api/labels/errors.js +15 -0
  3. package/build/api/labels/index.d.ts +2 -0
  4. package/build/api/labels/index.js +17 -0
  5. package/build/api/labels/issue.d.ts +54 -0
  6. package/build/api/labels/issue.js +144 -0
  7. package/build/api/labels/templates.d.ts +29 -0
  8. package/build/api/labels/templates.js +98 -0
  9. package/build/api/users.d.ts +8 -4
  10. package/build/api/users.js +51 -13
  11. package/build/index.d.ts +1 -0
  12. package/build/index.js +4 -2
  13. package/build/lib/db/schemas/044_label_sheets.sql +65 -0
  14. package/build/lib/db/schemas/045_label_job_delivery.sql +14 -0
  15. package/build/lib/labels/transports.d.ts +23 -0
  16. package/build/lib/labels/transports.js +39 -0
  17. package/build/modules/auth.d.ts +2 -0
  18. package/build/modules/auth.js +3 -1
  19. package/build/modules/capabilities.d.ts +5 -1
  20. package/build/modules/capabilities.js +38 -8
  21. package/build/modules/config.d.ts +10 -0
  22. package/build/modules/config.js +10 -0
  23. package/build/routes/index.js +2 -0
  24. package/build/routes/labels.d.ts +2 -0
  25. package/build/routes/labels.js +135 -0
  26. package/build/routes/users.js +1 -1
  27. package/build/scripts/bambu-boat.d.ts +4 -2
  28. package/build/scripts/bambu-boat.js +4 -2
  29. package/build/scripts/bambu-print.d.ts +2 -1
  30. package/build/scripts/bambu-print.js +7 -3
  31. package/build/scripts/machine-line.js +2 -1
  32. package/build/services/labels/content.d.ts +13 -0
  33. package/build/services/labels/content.js +81 -0
  34. package/build/services/labels/errors.d.ts +5 -0
  35. package/build/services/labels/errors.js +12 -0
  36. package/build/services/labels/index.d.ts +11 -0
  37. package/build/services/labels/index.js +52 -0
  38. package/build/services/labels/issue.d.ts +38 -0
  39. package/build/services/labels/issue.js +181 -0
  40. package/build/services/labels/jobs.d.ts +37 -0
  41. package/build/services/labels/jobs.js +75 -0
  42. package/build/services/labels/media.d.ts +11 -0
  43. package/build/services/labels/media.js +44 -0
  44. package/build/services/labels/reissue.d.ts +13 -0
  45. package/build/services/labels/reissue.js +65 -0
  46. package/build/services/labels/render-pdf.d.ts +11 -0
  47. package/build/services/labels/render-pdf.js +138 -0
  48. package/build/services/labels/targets.d.ts +18 -0
  49. package/build/services/labels/targets.js +216 -0
  50. package/build/services/labels/templates/index.d.ts +3 -0
  51. package/build/services/labels/templates/index.js +18 -0
  52. package/build/services/labels/templates/read.d.ts +4 -0
  53. package/build/services/labels/templates/read.js +36 -0
  54. package/build/services/labels/templates/sql.d.ts +8 -0
  55. package/build/services/labels/templates/sql.js +50 -0
  56. package/build/services/labels/templates/validate.d.ts +19 -0
  57. package/build/services/labels/templates/validate.js +93 -0
  58. package/build/services/labels/templates/write.d.ts +16 -0
  59. package/build/services/labels/templates/write.js +75 -0
  60. package/build/services/labels/token.d.ts +9 -0
  61. package/build/services/labels/token.js +28 -0
  62. package/build/services/labels/verify.d.ts +4 -0
  63. package/build/services/labels/verify.js +38 -0
  64. package/build/services/scan-code/validate.d.ts +3 -0
  65. package/build/services/scan-code/validate.js +10 -0
  66. package/build/services/user/crud.d.ts +13 -1
  67. package/build/services/user/crud.js +42 -11
  68. package/build/services/user/index.d.ts +3 -2
  69. package/build/services/user/index.js +7 -1
  70. package/build/services/user/redact.d.ts +17 -0
  71. package/build/services/user/redact.js +32 -0
  72. package/build/services/user/sql.d.ts +8 -15
  73. package/build/services/user/sql.js +27 -3
  74. package/build/services/user/types.d.ts +21 -1
  75. package/build/shared/labels/compose.d.ts +12 -0
  76. package/build/shared/labels/compose.js +43 -0
  77. package/build/shared/labels/index.d.ts +9 -0
  78. package/build/shared/labels/index.js +54 -0
  79. package/build/shared/labels/label-content.d.ts +17 -0
  80. package/build/shared/labels/label-content.js +137 -0
  81. package/build/shared/labels/layout.d.ts +23 -0
  82. package/build/shared/labels/layout.js +81 -0
  83. package/build/shared/labels/media.d.ts +22 -0
  84. package/build/shared/labels/media.js +116 -0
  85. package/build/shared/labels/render-svg.d.ts +10 -0
  86. package/build/shared/labels/render-svg.js +58 -0
  87. package/build/shared/labels/render-zpl.d.ts +9 -0
  88. package/build/shared/labels/render-zpl.js +63 -0
  89. package/build/shared/labels/symbol.d.ts +18 -0
  90. package/build/shared/labels/symbol.js +74 -0
  91. package/build/shared/labels/tokens.d.ts +18 -0
  92. package/build/shared/labels/tokens.js +43 -0
  93. package/build/shared/labels/types.d.ts +105 -0
  94. package/build/shared/labels/types.js +11 -0
  95. package/build/start/adapters.js +16 -0
  96. package/build/start/workers.js +18 -2
  97. package/build/system/mcp-servers/admin/index.js +2 -0
  98. package/build/system/mcp-servers/admin/labels-schemas.d.ts +192 -0
  99. package/build/system/mcp-servers/admin/labels-schemas.js +46 -0
  100. package/build/system/mcp-servers/admin/labels.d.ts +9 -0
  101. package/build/system/mcp-servers/admin/labels.js +101 -0
  102. package/build/system/mcp-servers/admin/schemas.d.ts +30 -30
  103. package/build/system/mcp-servers/admin/users.js +1 -1
  104. package/build/system/seed/tool-manifests-admin.js +5 -0
  105. package/build/tsconfig.tsbuildinfo +1 -1
  106. package/build/types/capability.d.ts +2 -1
  107. package/build/types/index.d.ts +2 -1
  108. package/build/types/labels/index.d.ts +4 -0
  109. package/build/types/labels/index.js +2 -0
  110. package/build/types/labels/job.d.ts +51 -0
  111. package/build/types/labels/job.js +2 -0
  112. package/build/types/labels/source.d.ts +44 -0
  113. package/build/types/labels/source.js +2 -0
  114. package/build/types/labels/template.d.ts +46 -0
  115. package/build/types/labels/template.js +2 -0
  116. package/build/types/labels/transport.d.ts +24 -0
  117. package/build/types/labels/transport.js +2 -0
  118. package/build/types/scan-code/rule.d.ts +5 -0
  119. package/build/types/startup.d.ts +37 -0
  120. package/build/types/user.d.ts +2 -0
  121. package/dashboard/dist/assets/{AdminDashboard-D12QiMM5.js → AdminDashboard-BafKaq50.js} +2 -2
  122. package/dashboard/dist/assets/{AdminDashboard-D12QiMM5.js.map → AdminDashboard-BafKaq50.js.map} +1 -1
  123. package/dashboard/dist/assets/{AgentConfigPage-BKQd9b8m.js → AgentConfigPage-CFHf31DT.js} +6 -6
  124. package/dashboard/dist/assets/{AgentConfigPage-BKQd9b8m.js.map → AgentConfigPage-CFHf31DT.js.map} +1 -1
  125. package/dashboard/dist/assets/{AgentDetailPage-ie-DxsIj.js → AgentDetailPage-CEvz5rJr.js} +3 -3
  126. package/dashboard/dist/assets/{AgentDetailPage-ie-DxsIj.js.map → AgentDetailPage-CEvz5rJr.js.map} +1 -1
  127. package/dashboard/dist/assets/{AgentsPage-Nqm2DxCP.js → AgentsPage-DjQaio0O.js} +2 -2
  128. package/dashboard/dist/assets/{AgentsPage-Nqm2DxCP.js.map → AgentsPage-DjQaio0O.js.map} +1 -1
  129. package/dashboard/dist/assets/AvailableEscalationsPage-UB03VTJx.js +2 -0
  130. package/dashboard/dist/assets/AvailableEscalationsPage-UB03VTJx.js.map +1 -0
  131. package/dashboard/dist/assets/{BotPicker-BizdmeJp.js → BotPicker-C7MNWOF7.js} +2 -2
  132. package/dashboard/dist/assets/{BotPicker-BizdmeJp.js.map → BotPicker-C7MNWOF7.js.map} +1 -1
  133. package/dashboard/dist/assets/BulkAssignModal-h5fX-_cV.js +2 -0
  134. package/dashboard/dist/assets/{BulkAssignModal-BWfzPrRk.js.map → BulkAssignModal-h5fX-_cV.js.map} +1 -1
  135. package/dashboard/dist/assets/{CapabilitiesPage-DT8q7Zlh.js → CapabilitiesPage-BIzDl-ZT.js} +2 -2
  136. package/dashboard/dist/assets/{CapabilitiesPage-DT8q7Zlh.js.map → CapabilitiesPage-BIzDl-ZT.js.map} +1 -1
  137. package/dashboard/dist/assets/{CollapsibleSection-al5mqR4O.js → CollapsibleSection-B5TivtEg.js} +2 -2
  138. package/dashboard/dist/assets/{CollapsibleSection-al5mqR4O.js.map → CollapsibleSection-B5TivtEg.js.map} +1 -1
  139. package/dashboard/dist/assets/{ConfirmDeleteModal-BrlVktv2.js → ConfirmDeleteModal-CB4nKePb.js} +2 -2
  140. package/dashboard/dist/assets/{ConfirmDeleteModal-BrlVktv2.js.map → ConfirmDeleteModal-CB4nKePb.js.map} +1 -1
  141. package/dashboard/dist/assets/{ConnectedAppsPage-CLAsJ2yQ.js → ConnectedAppsPage-B3S5gVWw.js} +2 -2
  142. package/dashboard/dist/assets/{ConnectedAppsPage-CLAsJ2yQ.js.map → ConnectedAppsPage-B3S5gVWw.js.map} +1 -1
  143. package/dashboard/dist/assets/{CountdownTimer-D2D68exl.js → CountdownTimer-BHVIq3kA.js} +2 -2
  144. package/dashboard/dist/assets/{CountdownTimer-D2D68exl.js.map → CountdownTimer-BHVIq3kA.js.map} +1 -1
  145. package/dashboard/dist/assets/CredentialConfirmModal-w0AGmCIe.js +2 -0
  146. package/dashboard/dist/assets/CredentialConfirmModal-w0AGmCIe.js.map +1 -0
  147. package/dashboard/dist/assets/{CredentialsPage-DWrZbEI0.js → CredentialsPage-BtCGBJrT.js} +2 -2
  148. package/dashboard/dist/assets/{CredentialsPage-DWrZbEI0.js.map → CredentialsPage-BtCGBJrT.js.map} +1 -1
  149. package/dashboard/dist/assets/{CronLabel-DuXR8iWq.js → CronLabel-BG1rZK-5.js} +2 -2
  150. package/dashboard/dist/assets/{CronLabel-DuXR8iWq.js.map → CronLabel-BG1rZK-5.js.map} +1 -1
  151. package/dashboard/dist/assets/{DropZone-DefYTYQy.js → DropZone-D8ZVdEb5.js} +2 -2
  152. package/dashboard/dist/assets/{DropZone-DefYTYQy.js.map → DropZone-D8ZVdEb5.js.map} +1 -1
  153. package/dashboard/dist/assets/{ElapsedCell-ronqG5-E.js → ElapsedCell-l4m8Yvfv.js} +2 -2
  154. package/dashboard/dist/assets/{ElapsedCell-ronqG5-E.js.map → ElapsedCell-l4m8Yvfv.js.map} +1 -1
  155. package/dashboard/dist/assets/{EntityTimelinePanel-CKsktd84.js → EntityTimelinePanel-BOHlIaxF.js} +2 -2
  156. package/dashboard/dist/assets/{EntityTimelinePanel-CKsktd84.js.map → EntityTimelinePanel-BOHlIaxF.js.map} +1 -1
  157. package/dashboard/dist/assets/{EscalationListSchemaPage-C954ngy3.js → EscalationListSchemaPage-BotlwlX3.js} +3 -3
  158. package/dashboard/dist/assets/{EscalationListSchemaPage-C954ngy3.js.map → EscalationListSchemaPage-BotlwlX3.js.map} +1 -1
  159. package/dashboard/dist/assets/{EscalationSchemaPage-Dij9K0ON.js → EscalationSchemaPage-CfZSVOSD.js} +3 -3
  160. package/dashboard/dist/assets/{EscalationSchemaPage-Dij9K0ON.js.map → EscalationSchemaPage-CfZSVOSD.js.map} +1 -1
  161. package/dashboard/dist/assets/{EscalationTimeline-DT2Owdl0.js → EscalationTimeline-CCKpuRBU.js} +2 -2
  162. package/dashboard/dist/assets/{EscalationTimeline-DT2Owdl0.js.map → EscalationTimeline-CCKpuRBU.js.map} +1 -1
  163. package/dashboard/dist/assets/{EscalationTitleSelect-BdbfMA98.js → EscalationTitleSelect-cpTzPHiW.js} +2 -2
  164. package/dashboard/dist/assets/{EscalationTitleSelect-BdbfMA98.js.map → EscalationTitleSelect-cpTzPHiW.js.map} +1 -1
  165. package/dashboard/dist/assets/{EscalationsOverview-niahs84P.js → EscalationsOverview-DS-nK0qV.js} +2 -2
  166. package/dashboard/dist/assets/{EscalationsOverview-niahs84P.js.map → EscalationsOverview-DS-nK0qV.js.map} +1 -1
  167. package/dashboard/dist/assets/{EventTable-DuLMBrSx.js → EventTable-UfebhJf0.js} +2 -2
  168. package/dashboard/dist/assets/{EventTable-DuLMBrSx.js.map → EventTable-UfebhJf0.js.map} +1 -1
  169. package/dashboard/dist/assets/{FilterBar-jtY6KNpL.js → FilterBar-newA5l-X.js} +2 -2
  170. package/dashboard/dist/assets/{FilterBar-jtY6KNpL.js.map → FilterBar-newA5l-X.js.map} +1 -1
  171. package/dashboard/dist/assets/{GraphInvokePage-DSRAI0Zt.js → GraphInvokePage-6SCDyQcK.js} +2 -2
  172. package/dashboard/dist/assets/{GraphInvokePage-DSRAI0Zt.js.map → GraphInvokePage-6SCDyQcK.js.map} +1 -1
  173. package/dashboard/dist/assets/HomePage-BEc-XdKj.js +2 -0
  174. package/dashboard/dist/assets/{HomePage-BUlSnCg8.js.map → HomePage-BEc-XdKj.js.map} +1 -1
  175. package/dashboard/dist/assets/LabelJobsPage-BO50zXT5.js +2 -0
  176. package/dashboard/dist/assets/LabelJobsPage-BO50zXT5.js.map +1 -0
  177. package/dashboard/dist/assets/{LinePage-BJKhVM9Y.js → LinePage-NYxJQ-ex.js} +3 -3
  178. package/dashboard/dist/assets/{LinePage-BJKhVM9Y.js.map → LinePage-NYxJQ-ex.js.map} +1 -1
  179. package/dashboard/dist/assets/{LinesPage-CrpJua3_.js → LinesPage-RbWTaQRh.js} +3 -3
  180. package/dashboard/dist/assets/{LinesPage-CrpJua3_.js.map → LinesPage-RbWTaQRh.js.map} +1 -1
  181. package/dashboard/dist/assets/{ListToolbar-BN0UPt0L.js → ListToolbar-B-E9-toh.js} +2 -2
  182. package/dashboard/dist/assets/{ListToolbar-BN0UPt0L.js.map → ListToolbar-B-E9-toh.js.map} +1 -1
  183. package/dashboard/dist/assets/{McpOverview-BgbJXYPh.js → McpOverview-Shcf9QhZ.js} +2 -2
  184. package/dashboard/dist/assets/{McpOverview-BgbJXYPh.js.map → McpOverview-Shcf9QhZ.js.map} +1 -1
  185. package/dashboard/dist/assets/{McpQueryDetailPage-BNjm2nrc.js → McpQueryDetailPage-D8kmjy2v.js} +3 -3
  186. package/dashboard/dist/assets/{McpQueryDetailPage-BNjm2nrc.js.map → McpQueryDetailPage-D8kmjy2v.js.map} +1 -1
  187. package/dashboard/dist/assets/{McpQueryPage-DplR8wP9.js → McpQueryPage-ck-o5m8A.js} +2 -2
  188. package/dashboard/dist/assets/{McpQueryPage-DplR8wP9.js.map → McpQueryPage-ck-o5m8A.js.map} +1 -1
  189. package/dashboard/dist/assets/McpRunDetailPage-BJKkM9-3.js +2 -0
  190. package/dashboard/dist/assets/{McpRunDetailPage-BHVEcKV5.js.map → McpRunDetailPage-BJKkM9-3.js.map} +1 -1
  191. package/dashboard/dist/assets/{McpRunsPage-CtlLagcs.js → McpRunsPage-DqhHfD5G.js} +2 -2
  192. package/dashboard/dist/assets/{McpRunsPage-CtlLagcs.js.map → McpRunsPage-DqhHfD5G.js.map} +1 -1
  193. package/dashboard/dist/assets/{NamespacePill-CeSfHH-j.js → NamespacePill--uIaGtrN.js} +2 -2
  194. package/dashboard/dist/assets/{NamespacePill-CeSfHH-j.js.map → NamespacePill--uIaGtrN.js.map} +1 -1
  195. package/dashboard/dist/assets/{OperationsPage-DH67bcW9.js → OperationsPage-D6B9Vv__.js} +3 -3
  196. package/dashboard/dist/assets/{OperationsPage-DH67bcW9.js.map → OperationsPage-D6B9Vv__.js.map} +1 -1
  197. package/dashboard/dist/assets/OperatorDashboard-CIH1cxjQ.js +2 -0
  198. package/dashboard/dist/assets/{OperatorDashboard-CMkgMewd.js.map → OperatorDashboard-CIH1cxjQ.js.map} +1 -1
  199. package/dashboard/dist/assets/{PageHeader-DiGWAQlR.js → PageHeader-DClJ33fV.js} +2 -2
  200. package/dashboard/dist/assets/{PageHeader-DiGWAQlR.js.map → PageHeader-DClJ33fV.js.map} +1 -1
  201. package/dashboard/dist/assets/{PageHeaderWithStats-DwnKQ06j.js → PageHeaderWithStats-C-TrbKQL.js} +2 -2
  202. package/dashboard/dist/assets/{PageHeaderWithStats-DwnKQ06j.js.map → PageHeaderWithStats-C-TrbKQL.js.map} +1 -1
  203. package/dashboard/dist/assets/PersonaDetailPage-DjvfyIph.js +2 -0
  204. package/dashboard/dist/assets/{PersonaDetailPage-Cs1FFdNq.js.map → PersonaDetailPage-DjvfyIph.js.map} +1 -1
  205. package/dashboard/dist/assets/{PersonasPage-CHTRdneF.js → PersonasPage-D7ryA8Vc.js} +2 -2
  206. package/dashboard/dist/assets/{PersonasPage-CHTRdneF.js.map → PersonasPage-D7ryA8Vc.js.map} +1 -1
  207. package/dashboard/dist/assets/{PortalPage-ChB5pBTZ.js → PortalPage-D3ybr0mo.js} +2 -2
  208. package/dashboard/dist/assets/{PortalPage-ChB5pBTZ.js.map → PortalPage-D3ybr0mo.js.map} +1 -1
  209. package/dashboard/dist/assets/PrintLabelsPanel-D0HF5x8b.js +2 -0
  210. package/dashboard/dist/assets/PrintLabelsPanel-D0HF5x8b.js.map +1 -0
  211. package/dashboard/dist/assets/{ProcessDetailPage-CzyqSfal.js → ProcessDetailPage-0xS9EdHe.js} +2 -2
  212. package/dashboard/dist/assets/{ProcessDetailPage-CzyqSfal.js.map → ProcessDetailPage-0xS9EdHe.js.map} +1 -1
  213. package/dashboard/dist/assets/{ProcessesListPage-rOwNkaU9.js → ProcessesListPage-93SMj1Fd.js} +2 -2
  214. package/dashboard/dist/assets/{ProcessesListPage-rOwNkaU9.js.map → ProcessesListPage-93SMj1Fd.js.map} +1 -1
  215. package/dashboard/dist/assets/{ResolverForm-DibnlZ-A.js → ResolverForm-DfogHDzl.js} +5 -5
  216. package/dashboard/dist/assets/{ResolverForm-DibnlZ-A.js.map → ResolverForm-DfogHDzl.js.map} +1 -1
  217. package/dashboard/dist/assets/{RoleDetailPage-Bv9R7iQC.js → RoleDetailPage-DlUOJWSB.js} +3 -3
  218. package/dashboard/dist/assets/{RoleDetailPage-Bv9R7iQC.js.map → RoleDetailPage-DlUOJWSB.js.map} +1 -1
  219. package/dashboard/dist/assets/{RolePill-D3hkAdKf.js → RolePill-BjD1Qw5y.js} +2 -2
  220. package/dashboard/dist/assets/{RolePill-D3hkAdKf.js.map → RolePill-BjD1Qw5y.js.map} +1 -1
  221. package/dashboard/dist/assets/RolesPage-DqhHSvaw.js +2 -0
  222. package/dashboard/dist/assets/{RolesPage-CUP7EH5U.js.map → RolesPage-DqhHSvaw.js.map} +1 -1
  223. package/dashboard/dist/assets/{RosterWidget-DZtmQcjU.js → RosterWidget-BrIq61HR.js} +2 -2
  224. package/dashboard/dist/assets/{RosterWidget-DZtmQcjU.js.map → RosterWidget-BrIq61HR.js.map} +1 -1
  225. package/dashboard/dist/assets/RunAsSelector-D6zQrCNr.js +2 -0
  226. package/dashboard/dist/assets/{RunAsSelector-B9-1vgZr.js.map → RunAsSelector-D6zQrCNr.js.map} +1 -1
  227. package/dashboard/dist/assets/ScanCodesPage-B2S9DR2f.js +2 -0
  228. package/dashboard/dist/assets/{ScanCodesPage-KN_e2rJl.js.map → ScanCodesPage-B2S9DR2f.js.map} +1 -1
  229. package/dashboard/dist/assets/ScanSchemeDetailPage-gpxKN-pL.js +5 -0
  230. package/dashboard/dist/assets/ScanSchemeDetailPage-gpxKN-pL.js.map +1 -0
  231. package/dashboard/dist/assets/ScanStationPage-B-UTgXsG.js +2 -0
  232. package/dashboard/dist/assets/{ScanStationPage-B0qbUOwc.js.map → ScanStationPage-B-UTgXsG.js.map} +1 -1
  233. package/dashboard/dist/assets/{SchemeMatchFields-CL7TKnw3.js → SchemeMatchFields-BK24aa7K.js} +2 -2
  234. package/dashboard/dist/assets/{SchemeMatchFields-CL7TKnw3.js.map → SchemeMatchFields-BK24aa7K.js.map} +1 -1
  235. package/dashboard/dist/assets/{ScopeBadge-DGz79rmG.js → ScopeBadge-ofLQ6HW-.js} +2 -2
  236. package/dashboard/dist/assets/{ScopeBadge-DGz79rmG.js.map → ScopeBadge-ofLQ6HW-.js.map} +1 -1
  237. package/dashboard/dist/assets/{StickyPagination-CUwxfBQH.js → StickyPagination-CgVv7vc_.js} +2 -2
  238. package/dashboard/dist/assets/{StickyPagination-CUwxfBQH.js.map → StickyPagination-CgVv7vc_.js.map} +1 -1
  239. package/dashboard/dist/assets/{StreamMessageDetail-DOjcO7d2.js → StreamMessageDetail-B9sxDVw4.js} +2 -2
  240. package/dashboard/dist/assets/{StreamMessageDetail-DOjcO7d2.js.map → StreamMessageDetail-B9sxDVw4.js.map} +1 -1
  241. package/dashboard/dist/assets/{SwimlaneTimeline-SPMpoLHP.js → SwimlaneTimeline-DQc0CYSL.js} +2 -2
  242. package/dashboard/dist/assets/{SwimlaneTimeline-SPMpoLHP.js.map → SwimlaneTimeline-DQc0CYSL.js.map} +1 -1
  243. package/dashboard/dist/assets/{TagInput-DaIdhv3h.js → TagInput-47qVYzke.js} +2 -2
  244. package/dashboard/dist/assets/{TagInput-DaIdhv3h.js.map → TagInput-47qVYzke.js.map} +1 -1
  245. package/dashboard/dist/assets/{TaskDetailPage-DvfzR2IQ.js → TaskDetailPage-D6VOsA1f.js} +2 -2
  246. package/dashboard/dist/assets/{TaskDetailPage-DvfzR2IQ.js.map → TaskDetailPage-D6VOsA1f.js.map} +1 -1
  247. package/dashboard/dist/assets/{TaskQueuePill-sUA1nZe-.js → TaskQueuePill-C5KmdXAl.js} +2 -2
  248. package/dashboard/dist/assets/{TaskQueuePill-sUA1nZe-.js.map → TaskQueuePill-C5KmdXAl.js.map} +1 -1
  249. package/dashboard/dist/assets/{TasksListPage-Jp6wmL7t.js → TasksListPage-DG8hvO8G.js} +2 -2
  250. package/dashboard/dist/assets/{TasksListPage-Jp6wmL7t.js.map → TasksListPage-DG8hvO8G.js.map} +1 -1
  251. package/dashboard/dist/assets/{TimeAgo-BCQA0Gb_.js → TimeAgo-CL02EhFi.js} +2 -2
  252. package/dashboard/dist/assets/{TimeAgo-BCQA0Gb_.js.map → TimeAgo-CL02EhFi.js.map} +1 -1
  253. package/dashboard/dist/assets/{TimestampCell-xhdMHDQt.js → TimestampCell-BE7oKVJg.js} +2 -2
  254. package/dashboard/dist/assets/{TimestampCell-xhdMHDQt.js.map → TimestampCell-BE7oKVJg.js.map} +1 -1
  255. package/dashboard/dist/assets/{ToolPill-CpBAFdEX.js → ToolPill-Cp9Drk1s.js} +2 -2
  256. package/dashboard/dist/assets/{ToolPill-CpBAFdEX.js.map → ToolPill-Cp9Drk1s.js.map} +1 -1
  257. package/dashboard/dist/assets/{ToolTestPanel-D8M3ITrJ.js → ToolTestPanel-CRecLh6S.js} +2 -2
  258. package/dashboard/dist/assets/{ToolTestPanel-D8M3ITrJ.js.map → ToolTestPanel-CRecLh6S.js.map} +1 -1
  259. package/dashboard/dist/assets/{TopicDetailPage-DdBJQp31.js → TopicDetailPage-QzkinTfN.js} +3 -3
  260. package/dashboard/dist/assets/{TopicDetailPage-DdBJQp31.js.map → TopicDetailPage-QzkinTfN.js.map} +1 -1
  261. package/dashboard/dist/assets/{TopicsPage-vpvsynD9.js → TopicsPage-D8dW6J65.js} +2 -2
  262. package/dashboard/dist/assets/{TopicsPage-vpvsynD9.js.map → TopicsPage-D8dW6J65.js.map} +1 -1
  263. package/dashboard/dist/assets/{UserName-BK6Lzsdw.js → UserName-Dw3R_zrl.js} +2 -2
  264. package/dashboard/dist/assets/{UserName-BK6Lzsdw.js.map → UserName-Dw3R_zrl.js.map} +1 -1
  265. package/dashboard/dist/assets/WorkflowExecutionPage-BTocv8or.js +2 -0
  266. package/dashboard/dist/assets/{WorkflowExecutionPage-DkM1TS4I.js.map → WorkflowExecutionPage-BTocv8or.js.map} +1 -1
  267. package/dashboard/dist/assets/{WorkflowPill-CKHip3hH.js → WorkflowPill-BiLYq__w.js} +2 -2
  268. package/dashboard/dist/assets/{WorkflowPill-CKHip3hH.js.map → WorkflowPill-BiLYq__w.js.map} +1 -1
  269. package/dashboard/dist/assets/WorkflowsDashboard-CIPEt3et.js +2 -0
  270. package/dashboard/dist/assets/{WorkflowsDashboard-g_N4y3QS.js.map → WorkflowsDashboard-CIPEt3et.js.map} +1 -1
  271. package/dashboard/dist/assets/{WorkflowsOverview-Drjo-Lu-.js → WorkflowsOverview-Bj4MJIE-.js} +2 -2
  272. package/dashboard/dist/assets/{WorkflowsOverview-Drjo-Lu-.js.map → WorkflowsOverview-Bj4MJIE-.js.map} +1 -1
  273. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CLltNHjZ.js → YamlWorkflowDetailPage-DMEk5k9-.js} +2 -2
  274. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CLltNHjZ.js.map → YamlWorkflowDetailPage-DMEk5k9-.js.map} +1 -1
  275. package/dashboard/dist/assets/{YamlWorkflowsPage-CxQCB-Zi.js → YamlWorkflowsPage-F2yyyoiB.js} +2 -2
  276. package/dashboard/dist/assets/{YamlWorkflowsPage-CxQCB-Zi.js.map → YamlWorkflowsPage-F2yyyoiB.js.map} +1 -1
  277. package/dashboard/dist/assets/{agents-Dk25jjhj.js → agents-mSgxEPpI.js} +2 -2
  278. package/dashboard/dist/assets/{agents-Dk25jjhj.js.map → agents-mSgxEPpI.js.map} +1 -1
  279. package/dashboard/dist/assets/{bots-bRkCqhlq.js → bots-p4Hp0CV6.js} +2 -2
  280. package/dashboard/dist/assets/{bots-bRkCqhlq.js.map → bots-p4Hp0CV6.js.map} +1 -1
  281. package/dashboard/dist/assets/{capabilities-DARawLry.js → capabilities-D_-I_SXR.js} +2 -2
  282. package/dashboard/dist/assets/{capabilities-DARawLry.js.map → capabilities-D_-I_SXR.js.map} +1 -1
  283. package/dashboard/dist/assets/{controlplane-DKccxxs6.js → controlplane-DjdoQnRU.js} +2 -2
  284. package/dashboard/dist/assets/{controlplane-DKccxxs6.js.map → controlplane-DjdoQnRU.js.map} +1 -1
  285. package/dashboard/dist/assets/{escalation-columns-BaYuzMYf.js → escalation-columns-R_IEVQjQ.js} +2 -2
  286. package/dashboard/dist/assets/{escalation-columns-BaYuzMYf.js.map → escalation-columns-R_IEVQjQ.js.map} +1 -1
  287. package/dashboard/dist/assets/{escalation-items-CwbNFnsH.js → escalation-items-BGZlJMpk.js} +2 -2
  288. package/dashboard/dist/assets/{escalation-items-CwbNFnsH.js.map → escalation-items-BGZlJMpk.js.map} +1 -1
  289. package/dashboard/dist/assets/{index-Cf6qCgTf.js → index-BEMdD58x.js} +2 -2
  290. package/dashboard/dist/assets/{index-Cf6qCgTf.js.map → index-BEMdD58x.js.map} +1 -1
  291. package/dashboard/dist/assets/index-BUmz0NMg.css +1 -0
  292. package/dashboard/dist/assets/{index-hKOlahpE.js → index-BuCEhhnl.js} +2 -2
  293. package/dashboard/dist/assets/{index-hKOlahpE.js.map → index-BuCEhhnl.js.map} +1 -1
  294. package/dashboard/dist/assets/{index-D1uliPqS.js → index-BxbQmeqh.js} +2 -2
  295. package/dashboard/dist/assets/{index-D1uliPqS.js.map → index-BxbQmeqh.js.map} +1 -1
  296. package/dashboard/dist/assets/index-C5osluV3.js +2 -0
  297. package/dashboard/dist/assets/{index-CtrSYqmL.js.map → index-C5osluV3.js.map} +1 -1
  298. package/dashboard/dist/assets/{index-CU2UW2y6.js → index-C_dAJUzh.js} +25 -25
  299. package/dashboard/dist/assets/index-C_dAJUzh.js.map +1 -0
  300. package/dashboard/dist/assets/{index-Bx9HVzuT.js → index-D-FYj9jT.js} +2 -2
  301. package/dashboard/dist/assets/{index-Bx9HVzuT.js.map → index-D-FYj9jT.js.map} +1 -1
  302. package/dashboard/dist/assets/{index-BZgtzkkG.js → index-D6K_IgCz.js} +2 -2
  303. package/dashboard/dist/assets/{index-BZgtzkkG.js.map → index-D6K_IgCz.js.map} +1 -1
  304. package/dashboard/dist/assets/index-D7L_VoBD.js +2 -0
  305. package/dashboard/dist/assets/index-D7L_VoBD.js.map +1 -0
  306. package/dashboard/dist/assets/{index-DgpL_Lgc.js → index-D9RAN9sA.js} +2 -2
  307. package/dashboard/dist/assets/{index-DgpL_Lgc.js.map → index-D9RAN9sA.js.map} +1 -1
  308. package/dashboard/dist/assets/{index-dShcvdg3.js → index-DUYAGxwc.js} +2 -2
  309. package/dashboard/dist/assets/{index-dShcvdg3.js.map → index-DUYAGxwc.js.map} +1 -1
  310. package/dashboard/dist/assets/{index-E_hJ7vtX.js → index-Dk2KKo0z.js} +2 -2
  311. package/dashboard/dist/assets/{index-E_hJ7vtX.js.map → index-Dk2KKo0z.js.map} +1 -1
  312. package/dashboard/dist/assets/{index-DU2QCbgH.js → index-DlJkZ12b.js} +2 -2
  313. package/dashboard/dist/assets/{index-DU2QCbgH.js.map → index-DlJkZ12b.js.map} +1 -1
  314. package/dashboard/dist/assets/{index-kzifJWbM.js → index-FiNThtNU.js} +3 -3
  315. package/dashboard/dist/assets/{index-kzifJWbM.js.map → index-FiNThtNU.js.map} +1 -1
  316. package/dashboard/dist/assets/{knowledge-DOe5ks-E.js → knowledge-DSsPTqkK.js} +2 -2
  317. package/dashboard/dist/assets/{knowledge-DOe5ks-E.js.map → knowledge-DSsPTqkK.js.map} +1 -1
  318. package/dashboard/dist/assets/{machines-Zq_00v7k.js → machines-DSgGtqqr.js} +2 -2
  319. package/dashboard/dist/assets/{machines-Zq_00v7k.js.map → machines-DSgGtqqr.js.map} +1 -1
  320. package/dashboard/dist/assets/{mcp-BL8kD0oh.js → mcp-Cg-_uLw8.js} +2 -2
  321. package/dashboard/dist/assets/{mcp-BL8kD0oh.js.map → mcp-Cg-_uLw8.js.map} +1 -1
  322. package/dashboard/dist/assets/{mcp-query-BpokmJWi.js → mcp-query-DQombEK_.js} +2 -2
  323. package/dashboard/dist/assets/{mcp-query-BpokmJWi.js.map → mcp-query-DQombEK_.js.map} +1 -1
  324. package/dashboard/dist/assets/{personas-BubCnQZ8.js → personas-DYrcoVBu.js} +2 -2
  325. package/dashboard/dist/assets/{personas-BubCnQZ8.js.map → personas-DYrcoVBu.js.map} +1 -1
  326. package/dashboard/dist/assets/{pipelines--DUoMx7K.js → pipelines-wdb4xsey.js} +2 -2
  327. package/dashboard/dist/assets/{pipelines--DUoMx7K.js.map → pipelines-wdb4xsey.js.map} +1 -1
  328. package/dashboard/dist/assets/{tasks-CJXN4OB4.js → tasks-Bil7gvm9.js} +2 -2
  329. package/dashboard/dist/assets/{tasks-CJXN4OB4.js.map → tasks-Bil7gvm9.js.map} +1 -1
  330. package/dashboard/dist/assets/{topics-CAG08Ruo.js → topics-wBqaVhRR.js} +2 -2
  331. package/dashboard/dist/assets/{topics-CAG08Ruo.js.map → topics-wBqaVhRR.js.map} +1 -1
  332. package/dashboard/dist/assets/{useDebouncedValue-DQ2D8cm2.js → useDebouncedValue-CwrY8TpV.js} +2 -2
  333. package/dashboard/dist/assets/{useDebouncedValue-DQ2D8cm2.js.map → useDebouncedValue-CwrY8TpV.js.map} +1 -1
  334. package/dashboard/dist/assets/{useNamespace-DjEVAlJQ.js → useNamespace-Sod_xApz.js} +2 -2
  335. package/dashboard/dist/assets/{useNamespace-DjEVAlJQ.js.map → useNamespace-Sod_xApz.js.map} +1 -1
  336. package/dashboard/dist/assets/{useYamlActivityEvents-etcpfIwo.js → useYamlActivityEvents-CKLInV3C.js} +2 -2
  337. package/dashboard/dist/assets/{useYamlActivityEvents-etcpfIwo.js.map → useYamlActivityEvents-CKLInV3C.js.map} +1 -1
  338. package/dashboard/dist/assets/{validate-YJK_6a7m.js → validate-CYhW1xMJ.js} +2 -2
  339. package/dashboard/dist/assets/{validate-YJK_6a7m.js.map → validate-CYhW1xMJ.js.map} +1 -1
  340. package/dashboard/dist/assets/{vendor-icons-en0_uSRD.js → vendor-icons-ed7mYQw4.js} +2 -2
  341. package/dashboard/dist/assets/{vendor-icons-en0_uSRD.js.map → vendor-icons-ed7mYQw4.js.map} +1 -1
  342. package/dashboard/dist/assets/{yaml-workflows-D97Bz6li.js → yaml-workflows-C20qHo3L.js} +2 -2
  343. package/dashboard/dist/assets/{yaml-workflows-D97Bz6li.js.map → yaml-workflows-C20qHo3L.js.map} +1 -1
  344. package/dashboard/dist/index.html +3 -3
  345. package/docs/api/http/labels.md +115 -0
  346. package/docs/api/http/users.md +2 -0
  347. package/docs/api/mcp/admin.md +76 -1
  348. package/docs/code-owned-configuration.md +1 -1
  349. package/docs/iam.md +12 -0
  350. package/docs/label-sheets.md +267 -0
  351. package/docs/machines.md +2 -2
  352. package/docs/scan-codes.md +11 -5
  353. package/package.json +4 -1
  354. package/dashboard/dist/assets/AvailableEscalationsPage-BRKyG5qZ.js +0 -2
  355. package/dashboard/dist/assets/AvailableEscalationsPage-BRKyG5qZ.js.map +0 -1
  356. package/dashboard/dist/assets/BulkAssignModal-BWfzPrRk.js +0 -2
  357. package/dashboard/dist/assets/HomePage-BUlSnCg8.js +0 -2
  358. package/dashboard/dist/assets/McpRunDetailPage-BHVEcKV5.js +0 -2
  359. package/dashboard/dist/assets/OperatorDashboard-CMkgMewd.js +0 -2
  360. package/dashboard/dist/assets/PersonaDetailPage-Cs1FFdNq.js +0 -2
  361. package/dashboard/dist/assets/RolesPage-CUP7EH5U.js +0 -2
  362. package/dashboard/dist/assets/RunAsSelector-B9-1vgZr.js +0 -2
  363. package/dashboard/dist/assets/ScanCodesPage-KN_e2rJl.js +0 -2
  364. package/dashboard/dist/assets/ScanSchemeDetailPage-CqItQ67Y.js +0 -5
  365. package/dashboard/dist/assets/ScanSchemeDetailPage-CqItQ67Y.js.map +0 -1
  366. package/dashboard/dist/assets/ScanStationPage-B0qbUOwc.js +0 -2
  367. package/dashboard/dist/assets/WorkflowExecutionPage-DkM1TS4I.js +0 -2
  368. package/dashboard/dist/assets/WorkflowsDashboard-g_N4y3QS.js +0 -2
  369. package/dashboard/dist/assets/index-BmzscsXK.css +0 -1
  370. package/dashboard/dist/assets/index-CU2UW2y6.js.map +0 -1
  371. package/dashboard/dist/assets/index-CtrSYqmL.js +0 -2
  372. package/dashboard/dist/assets/index-DU-1gMks.js +0 -2
  373. package/dashboard/dist/assets/index-DU-1gMks.js.map +0 -1
@@ -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>;
@@ -0,0 +1,98 @@
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.listLabelTemplates = listLabelTemplates;
37
+ exports.getLabelTemplate = getLabelTemplate;
38
+ exports.upsertLabelTemplate = upsertLabelTemplate;
39
+ exports.deleteLabelTemplate = deleteLabelTemplate;
40
+ exports.listLabelMedia = listLabelMedia;
41
+ exports.listLabelTransports = listLabelTransports;
42
+ const labels = __importStar(require("../../services/labels"));
43
+ const transports_1 = require("../../lib/labels/transports");
44
+ const errors_1 = require("./errors");
45
+ /**
46
+ * List label templates, optionally for one scan scheme.
47
+ *
48
+ * @param input.scheme — scheme version to filter by
49
+ * @returns `{ status: 200, data: { templates } }`
50
+ */
51
+ async function listLabelTemplates(input = {}) {
52
+ try {
53
+ return { status: 200, data: { templates: await labels.listLabelTemplates(input.scheme) } };
54
+ }
55
+ catch (err) {
56
+ return (0, errors_1.labelFailure)(err);
57
+ }
58
+ }
59
+ /** One label template by name; 404 when absent. */
60
+ async function getLabelTemplate(input) {
61
+ try {
62
+ const template = await labels.getLabelTemplate(input.name);
63
+ return template ? { status: 200, data: template } : { status: 404, error: 'Label template not found' };
64
+ }
65
+ catch (err) {
66
+ return (0, errors_1.labelFailure)(err);
67
+ }
68
+ }
69
+ /**
70
+ * Create or replace a label template. With `expected_revision`, the write
71
+ * lands only on that revision (409 otherwise).
72
+ */
73
+ async function upsertLabelTemplate(input) {
74
+ try {
75
+ const { expected_revision, ...template } = input;
76
+ return { status: 200, data: await labels.upsertLabelTemplate(template, expected_revision) };
77
+ }
78
+ catch (err) {
79
+ return (0, errors_1.labelFailure)(err);
80
+ }
81
+ }
82
+ async function deleteLabelTemplate(input) {
83
+ try {
84
+ const deleted = await labels.deleteLabelTemplate(input.name);
85
+ return deleted ? { status: 200, data: { deleted: true } } : { status: 404, error: 'Label template not found' };
86
+ }
87
+ catch (err) {
88
+ return (0, errors_1.labelFailure)(err);
89
+ }
90
+ }
91
+ /** Media presets and the deployment's default. */
92
+ async function listLabelMedia() {
93
+ return { status: 200, data: { media: labels.labelMediaPresets(), defaultMedia: labels.defaultLabelMediaId() } };
94
+ }
95
+ /** Registered printer transports by name. */
96
+ async function listLabelTransports() {
97
+ return { status: 200, data: { transports: transports_1.labelTransportRegistry.list() } };
98
+ }
@@ -1,4 +1,4 @@
1
- import type { LTApiResult } from '../types/sdk';
1
+ import type { LTApiAuth, LTApiResult } from '../types/sdk';
2
2
  import type { LTRoleType } from '../types';
3
3
  /**
4
4
  * List users with optional filters for role, role type, status, and pagination.
@@ -92,13 +92,17 @@ export declare function updateUser(input: {
92
92
  * (`remove`); a key absent from the patch is kept. `rename` preserves the
93
93
  * value with no key-absent window. Identity-binding keys (badge scan
94
94
  * scheme target facets) assert uniqueness among active users in the same
95
- * statement.
95
+ * statement. Touching an identity key binds a credential: it needs the
96
+ * credentialIssuer capability and is recorded in lt_label_jobs by the same
97
+ * statement as the patch.
96
98
  *
97
99
  * @param input.id — the user's unique identifier
98
100
  * @param input.set — properties to set (typed JSON values)
99
101
  * @param input.remove — property keys to delete
100
102
  * @param input.rename — `{ oldKey: newKey }` renames, values preserved
101
- * @returns `{ status: 200, data: User }`; 400 malformed patch; 404 unknown
103
+ * @param auth — the caller; required to touch an identity key
104
+ * @returns `{ status: 200, data: User }` with identity keys redacted; 400
105
+ * malformed patch; 403 identity key without credentialIssuer; 404 unknown
102
106
  * user; 409 when an identity value already belongs to another active user
103
107
  */
104
108
  export declare function patchUserProperties(input: {
@@ -106,7 +110,7 @@ export declare function patchUserProperties(input: {
106
110
  set?: Record<string, unknown>;
107
111
  remove?: string[];
108
112
  rename?: Record<string, string>;
109
- }): Promise<LTApiResult>;
113
+ }, auth?: LTApiAuth): Promise<LTApiResult>;
110
114
  /**
111
115
  * The property keys the platform itself resolves identities against — every
112
116
  * enabled identity scan scheme's target facet. The dashboard marks these as
@@ -45,6 +45,20 @@ exports.getUserRoles = getUserRoles;
45
45
  exports.addUserRole = addUserRole;
46
46
  exports.removeUserRole = removeUserRole;
47
47
  const userService = __importStar(require("../services/user"));
48
+ const capabilities_1 = require("../modules/capabilities");
49
+ /** A user as the API returns it: identity keys redacted. */
50
+ async function asRead(user) {
51
+ return userService.redactIdentityKeys(user, await userService.getIdentityPropertyKeys());
52
+ }
53
+ /** A refusal when a wholesale metadata write names an identity key; bindings go through patchUserProperties. */
54
+ async function identityKeyInMetadata(metadata) {
55
+ if (!metadata || !userService.identityKeysProtected())
56
+ return null;
57
+ const named = (await userService.getIdentityPropertyKeys()).filter((k) => k in metadata);
58
+ if (named.length === 0)
59
+ return null;
60
+ return { status: 400, error: `"${named[0]}" is an identity binding; set it with patchUserProperties` };
61
+ }
48
62
  /**
49
63
  * List users with optional filters for role, role type, status, and pagination.
50
64
  *
@@ -59,7 +73,8 @@ const userService = __importStar(require("../services/user"));
59
73
  async function listUsers(input) {
60
74
  try {
61
75
  const result = await userService.listUsers(input);
62
- return { status: 200, data: result };
76
+ const keys = await userService.getIdentityPropertyKeys();
77
+ return { status: 200, data: { ...result, users: result.users.map((u) => userService.redactIdentityKeys(u, keys)) } };
63
78
  }
64
79
  catch (err) {
65
80
  return { status: 500, error: err.message };
@@ -95,7 +110,7 @@ async function getUser(input) {
95
110
  if (!user) {
96
111
  return { status: 404, error: 'User not found' };
97
112
  }
98
- return { status: 200, data: user };
113
+ return { status: 200, data: await asRead(user) };
99
114
  }
100
115
  catch (err) {
101
116
  return { status: 500, error: err.message };
@@ -119,6 +134,9 @@ async function createUser(input) {
119
134
  if (!input.external_id) {
120
135
  return { status: 400, error: 'external_id is required' };
121
136
  }
137
+ const identityRefusal = await identityKeyInMetadata(input.metadata);
138
+ if (identityRefusal)
139
+ return identityRefusal;
122
140
  if (input.roles) {
123
141
  for (const r of input.roles) {
124
142
  if (!r.role || !r.type || !userService.isValidRoleType(r.type)) {
@@ -148,7 +166,7 @@ async function createUser(input) {
148
166
  roles: input.roles,
149
167
  metadata: input.metadata,
150
168
  });
151
- return { status: 201, data: user };
169
+ return { status: 201, data: await asRead(user) };
152
170
  }
153
171
  catch (err) {
154
172
  if (err.code === '23505') {
@@ -173,11 +191,14 @@ async function createUser(input) {
173
191
  async function updateUser(input) {
174
192
  try {
175
193
  const { id, ...fields } = input;
194
+ const identityRefusal = await identityKeyInMetadata(fields.metadata);
195
+ if (identityRefusal)
196
+ return identityRefusal;
176
197
  const user = await userService.updateUser(id, fields);
177
198
  if (!user) {
178
199
  return { status: 404, error: 'User not found' };
179
200
  }
180
- return { status: 200, data: user };
201
+ return { status: 200, data: await asRead(user) };
181
202
  }
182
203
  catch (err) {
183
204
  return { status: 500, error: err.message };
@@ -189,26 +210,43 @@ async function updateUser(input) {
189
210
  * (`remove`); a key absent from the patch is kept. `rename` preserves the
190
211
  * value with no key-absent window. Identity-binding keys (badge scan
191
212
  * scheme target facets) assert uniqueness among active users in the same
192
- * statement.
213
+ * statement. Touching an identity key binds a credential: it needs the
214
+ * credentialIssuer capability and is recorded in lt_label_jobs by the same
215
+ * statement as the patch.
193
216
  *
194
217
  * @param input.id — the user's unique identifier
195
218
  * @param input.set — properties to set (typed JSON values)
196
219
  * @param input.remove — property keys to delete
197
220
  * @param input.rename — `{ oldKey: newKey }` renames, values preserved
198
- * @returns `{ status: 200, data: User }`; 400 malformed patch; 404 unknown
221
+ * @param auth — the caller; required to touch an identity key
222
+ * @returns `{ status: 200, data: User }` with identity keys redacted; 400
223
+ * malformed patch; 403 identity key without credentialIssuer; 404 unknown
199
224
  * user; 409 when an identity value already belongs to another active user
200
225
  */
201
- async function patchUserProperties(input) {
226
+ async function patchUserProperties(input, auth) {
202
227
  try {
203
- const user = await userService.patchUserProperties(input.id, {
204
- set: input.set,
205
- remove: input.remove,
206
- rename: input.rename,
207
- });
228
+ const ops = { set: input.set, remove: input.remove, rename: input.rename };
229
+ const touched = await userService.identityKeysTouched(ops);
230
+ let user;
231
+ const protectedKeys = userService.identityKeysProtected();
232
+ if (touched.length > 0 && (protectedKeys || auth)) {
233
+ if (protectedKeys && (!auth || !(await (0, capabilities_1.mayIssueCredentials)(auth)))) {
234
+ return { status: 403, error: `"${touched[0]}" is an identity binding; credential-issuer access required` };
235
+ }
236
+ const recorded = await userService.patchUserPropertiesRecorded(input.id, ops, {
237
+ action: 'bind',
238
+ requested_by: auth.userId,
239
+ source: { keys: touched },
240
+ });
241
+ user = recorded?.user ?? null;
242
+ }
243
+ else {
244
+ user = await userService.patchUserProperties(input.id, ops);
245
+ }
208
246
  if (!user) {
209
247
  return { status: 404, error: 'User not found' };
210
248
  }
211
- return { status: 200, data: user };
249
+ return { status: 200, data: await asRead(user) };
212
250
  }
213
251
  catch (err) {
214
252
  if (err.status === 400 || err.status === 409) {
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);