@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.
- package/build/api/labels/errors.d.ts +3 -0
- package/build/api/labels/errors.js +15 -0
- package/build/api/labels/index.d.ts +2 -0
- package/build/api/labels/index.js +17 -0
- package/build/api/labels/issue.d.ts +54 -0
- package/build/api/labels/issue.js +144 -0
- package/build/api/labels/templates.d.ts +29 -0
- package/build/api/labels/templates.js +98 -0
- package/build/api/users.d.ts +8 -4
- package/build/api/users.js +51 -13
- package/build/index.d.ts +1 -0
- package/build/index.js +4 -2
- package/build/lib/db/schemas/044_label_sheets.sql +65 -0
- package/build/lib/db/schemas/045_label_job_delivery.sql +14 -0
- package/build/lib/labels/transports.d.ts +23 -0
- package/build/lib/labels/transports.js +39 -0
- package/build/modules/auth.d.ts +2 -0
- package/build/modules/auth.js +3 -1
- package/build/modules/capabilities.d.ts +5 -1
- package/build/modules/capabilities.js +38 -8
- package/build/modules/config.d.ts +10 -0
- package/build/modules/config.js +10 -0
- package/build/routes/index.js +2 -0
- package/build/routes/labels.d.ts +2 -0
- package/build/routes/labels.js +135 -0
- package/build/routes/users.js +1 -1
- package/build/scripts/bambu-boat.d.ts +4 -2
- package/build/scripts/bambu-boat.js +4 -2
- package/build/scripts/bambu-print.d.ts +2 -1
- package/build/scripts/bambu-print.js +7 -3
- package/build/scripts/machine-line.js +2 -1
- package/build/services/labels/content.d.ts +13 -0
- package/build/services/labels/content.js +81 -0
- package/build/services/labels/errors.d.ts +5 -0
- package/build/services/labels/errors.js +12 -0
- package/build/services/labels/index.d.ts +11 -0
- package/build/services/labels/index.js +52 -0
- package/build/services/labels/issue.d.ts +38 -0
- package/build/services/labels/issue.js +181 -0
- package/build/services/labels/jobs.d.ts +37 -0
- package/build/services/labels/jobs.js +75 -0
- package/build/services/labels/media.d.ts +11 -0
- package/build/services/labels/media.js +44 -0
- package/build/services/labels/reissue.d.ts +13 -0
- package/build/services/labels/reissue.js +65 -0
- package/build/services/labels/render-pdf.d.ts +11 -0
- package/build/services/labels/render-pdf.js +138 -0
- package/build/services/labels/targets.d.ts +18 -0
- package/build/services/labels/targets.js +216 -0
- package/build/services/labels/templates/index.d.ts +3 -0
- package/build/services/labels/templates/index.js +18 -0
- package/build/services/labels/templates/read.d.ts +4 -0
- package/build/services/labels/templates/read.js +36 -0
- package/build/services/labels/templates/sql.d.ts +8 -0
- package/build/services/labels/templates/sql.js +50 -0
- package/build/services/labels/templates/validate.d.ts +19 -0
- package/build/services/labels/templates/validate.js +93 -0
- package/build/services/labels/templates/write.d.ts +16 -0
- package/build/services/labels/templates/write.js +75 -0
- package/build/services/labels/token.d.ts +9 -0
- package/build/services/labels/token.js +28 -0
- package/build/services/labels/verify.d.ts +4 -0
- package/build/services/labels/verify.js +38 -0
- package/build/services/scan-code/validate.d.ts +3 -0
- package/build/services/scan-code/validate.js +10 -0
- package/build/services/user/crud.d.ts +13 -1
- package/build/services/user/crud.js +42 -11
- package/build/services/user/index.d.ts +3 -2
- package/build/services/user/index.js +7 -1
- package/build/services/user/redact.d.ts +17 -0
- package/build/services/user/redact.js +32 -0
- package/build/services/user/sql.d.ts +8 -15
- package/build/services/user/sql.js +27 -3
- package/build/services/user/types.d.ts +21 -1
- package/build/shared/labels/compose.d.ts +12 -0
- package/build/shared/labels/compose.js +43 -0
- package/build/shared/labels/index.d.ts +9 -0
- package/build/shared/labels/index.js +54 -0
- package/build/shared/labels/label-content.d.ts +17 -0
- package/build/shared/labels/label-content.js +137 -0
- package/build/shared/labels/layout.d.ts +23 -0
- package/build/shared/labels/layout.js +81 -0
- package/build/shared/labels/media.d.ts +22 -0
- package/build/shared/labels/media.js +116 -0
- package/build/shared/labels/render-svg.d.ts +10 -0
- package/build/shared/labels/render-svg.js +58 -0
- package/build/shared/labels/render-zpl.d.ts +9 -0
- package/build/shared/labels/render-zpl.js +63 -0
- package/build/shared/labels/symbol.d.ts +18 -0
- package/build/shared/labels/symbol.js +74 -0
- package/build/shared/labels/tokens.d.ts +18 -0
- package/build/shared/labels/tokens.js +43 -0
- package/build/shared/labels/types.d.ts +105 -0
- package/build/shared/labels/types.js +11 -0
- package/build/start/adapters.js +16 -0
- package/build/start/workers.js +18 -2
- package/build/system/mcp-servers/admin/index.js +2 -0
- package/build/system/mcp-servers/admin/labels-schemas.d.ts +192 -0
- package/build/system/mcp-servers/admin/labels-schemas.js +46 -0
- package/build/system/mcp-servers/admin/labels.d.ts +9 -0
- package/build/system/mcp-servers/admin/labels.js +101 -0
- package/build/system/mcp-servers/admin/schemas.d.ts +30 -30
- package/build/system/mcp-servers/admin/users.js +1 -1
- package/build/system/seed/tool-manifests-admin.js +5 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/capability.d.ts +2 -1
- package/build/types/index.d.ts +2 -1
- package/build/types/labels/index.d.ts +4 -0
- package/build/types/labels/index.js +2 -0
- package/build/types/labels/job.d.ts +51 -0
- package/build/types/labels/job.js +2 -0
- package/build/types/labels/source.d.ts +44 -0
- package/build/types/labels/source.js +2 -0
- package/build/types/labels/template.d.ts +46 -0
- package/build/types/labels/template.js +2 -0
- package/build/types/labels/transport.d.ts +24 -0
- package/build/types/labels/transport.js +2 -0
- package/build/types/scan-code/rule.d.ts +5 -0
- package/build/types/startup.d.ts +37 -0
- package/build/types/user.d.ts +2 -0
- package/dashboard/dist/assets/{AdminDashboard-D12QiMM5.js → AdminDashboard-BafKaq50.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-D12QiMM5.js.map → AdminDashboard-BafKaq50.js.map} +1 -1
- package/dashboard/dist/assets/{AgentConfigPage-BKQd9b8m.js → AgentConfigPage-CFHf31DT.js} +6 -6
- package/dashboard/dist/assets/{AgentConfigPage-BKQd9b8m.js.map → AgentConfigPage-CFHf31DT.js.map} +1 -1
- package/dashboard/dist/assets/{AgentDetailPage-ie-DxsIj.js → AgentDetailPage-CEvz5rJr.js} +3 -3
- package/dashboard/dist/assets/{AgentDetailPage-ie-DxsIj.js.map → AgentDetailPage-CEvz5rJr.js.map} +1 -1
- package/dashboard/dist/assets/{AgentsPage-Nqm2DxCP.js → AgentsPage-DjQaio0O.js} +2 -2
- package/dashboard/dist/assets/{AgentsPage-Nqm2DxCP.js.map → AgentsPage-DjQaio0O.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-UB03VTJx.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-UB03VTJx.js.map +1 -0
- package/dashboard/dist/assets/{BotPicker-BizdmeJp.js → BotPicker-C7MNWOF7.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-BizdmeJp.js.map → BotPicker-C7MNWOF7.js.map} +1 -1
- package/dashboard/dist/assets/BulkAssignModal-h5fX-_cV.js +2 -0
- package/dashboard/dist/assets/{BulkAssignModal-BWfzPrRk.js.map → BulkAssignModal-h5fX-_cV.js.map} +1 -1
- package/dashboard/dist/assets/{CapabilitiesPage-DT8q7Zlh.js → CapabilitiesPage-BIzDl-ZT.js} +2 -2
- package/dashboard/dist/assets/{CapabilitiesPage-DT8q7Zlh.js.map → CapabilitiesPage-BIzDl-ZT.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-al5mqR4O.js → CollapsibleSection-B5TivtEg.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-al5mqR4O.js.map → CollapsibleSection-B5TivtEg.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-BrlVktv2.js → ConfirmDeleteModal-CB4nKePb.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-BrlVktv2.js.map → ConfirmDeleteModal-CB4nKePb.js.map} +1 -1
- package/dashboard/dist/assets/{ConnectedAppsPage-CLAsJ2yQ.js → ConnectedAppsPage-B3S5gVWw.js} +2 -2
- package/dashboard/dist/assets/{ConnectedAppsPage-CLAsJ2yQ.js.map → ConnectedAppsPage-B3S5gVWw.js.map} +1 -1
- package/dashboard/dist/assets/{CountdownTimer-D2D68exl.js → CountdownTimer-BHVIq3kA.js} +2 -2
- package/dashboard/dist/assets/{CountdownTimer-D2D68exl.js.map → CountdownTimer-BHVIq3kA.js.map} +1 -1
- package/dashboard/dist/assets/CredentialConfirmModal-w0AGmCIe.js +2 -0
- package/dashboard/dist/assets/CredentialConfirmModal-w0AGmCIe.js.map +1 -0
- package/dashboard/dist/assets/{CredentialsPage-DWrZbEI0.js → CredentialsPage-BtCGBJrT.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-DWrZbEI0.js.map → CredentialsPage-BtCGBJrT.js.map} +1 -1
- package/dashboard/dist/assets/{CronLabel-DuXR8iWq.js → CronLabel-BG1rZK-5.js} +2 -2
- package/dashboard/dist/assets/{CronLabel-DuXR8iWq.js.map → CronLabel-BG1rZK-5.js.map} +1 -1
- package/dashboard/dist/assets/{DropZone-DefYTYQy.js → DropZone-D8ZVdEb5.js} +2 -2
- package/dashboard/dist/assets/{DropZone-DefYTYQy.js.map → DropZone-D8ZVdEb5.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-ronqG5-E.js → ElapsedCell-l4m8Yvfv.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-ronqG5-E.js.map → ElapsedCell-l4m8Yvfv.js.map} +1 -1
- package/dashboard/dist/assets/{EntityTimelinePanel-CKsktd84.js → EntityTimelinePanel-BOHlIaxF.js} +2 -2
- package/dashboard/dist/assets/{EntityTimelinePanel-CKsktd84.js.map → EntityTimelinePanel-BOHlIaxF.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationListSchemaPage-C954ngy3.js → EscalationListSchemaPage-BotlwlX3.js} +3 -3
- package/dashboard/dist/assets/{EscalationListSchemaPage-C954ngy3.js.map → EscalationListSchemaPage-BotlwlX3.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationSchemaPage-Dij9K0ON.js → EscalationSchemaPage-CfZSVOSD.js} +3 -3
- package/dashboard/dist/assets/{EscalationSchemaPage-Dij9K0ON.js.map → EscalationSchemaPage-CfZSVOSD.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationTimeline-DT2Owdl0.js → EscalationTimeline-CCKpuRBU.js} +2 -2
- package/dashboard/dist/assets/{EscalationTimeline-DT2Owdl0.js.map → EscalationTimeline-CCKpuRBU.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationTitleSelect-BdbfMA98.js → EscalationTitleSelect-cpTzPHiW.js} +2 -2
- package/dashboard/dist/assets/{EscalationTitleSelect-BdbfMA98.js.map → EscalationTitleSelect-cpTzPHiW.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-niahs84P.js → EscalationsOverview-DS-nK0qV.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-niahs84P.js.map → EscalationsOverview-DS-nK0qV.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-DuLMBrSx.js → EventTable-UfebhJf0.js} +2 -2
- package/dashboard/dist/assets/{EventTable-DuLMBrSx.js.map → EventTable-UfebhJf0.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-jtY6KNpL.js → FilterBar-newA5l-X.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-jtY6KNpL.js.map → FilterBar-newA5l-X.js.map} +1 -1
- package/dashboard/dist/assets/{GraphInvokePage-DSRAI0Zt.js → GraphInvokePage-6SCDyQcK.js} +2 -2
- package/dashboard/dist/assets/{GraphInvokePage-DSRAI0Zt.js.map → GraphInvokePage-6SCDyQcK.js.map} +1 -1
- package/dashboard/dist/assets/HomePage-BEc-XdKj.js +2 -0
- package/dashboard/dist/assets/{HomePage-BUlSnCg8.js.map → HomePage-BEc-XdKj.js.map} +1 -1
- package/dashboard/dist/assets/LabelJobsPage-BO50zXT5.js +2 -0
- package/dashboard/dist/assets/LabelJobsPage-BO50zXT5.js.map +1 -0
- package/dashboard/dist/assets/{LinePage-BJKhVM9Y.js → LinePage-NYxJQ-ex.js} +3 -3
- package/dashboard/dist/assets/{LinePage-BJKhVM9Y.js.map → LinePage-NYxJQ-ex.js.map} +1 -1
- package/dashboard/dist/assets/{LinesPage-CrpJua3_.js → LinesPage-RbWTaQRh.js} +3 -3
- package/dashboard/dist/assets/{LinesPage-CrpJua3_.js.map → LinesPage-RbWTaQRh.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-BN0UPt0L.js → ListToolbar-B-E9-toh.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-BN0UPt0L.js.map → ListToolbar-B-E9-toh.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-BgbJXYPh.js → McpOverview-Shcf9QhZ.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-BgbJXYPh.js.map → McpOverview-Shcf9QhZ.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-BNjm2nrc.js → McpQueryDetailPage-D8kmjy2v.js} +3 -3
- package/dashboard/dist/assets/{McpQueryDetailPage-BNjm2nrc.js.map → McpQueryDetailPage-D8kmjy2v.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-DplR8wP9.js → McpQueryPage-ck-o5m8A.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-DplR8wP9.js.map → McpQueryPage-ck-o5m8A.js.map} +1 -1
- package/dashboard/dist/assets/McpRunDetailPage-BJKkM9-3.js +2 -0
- package/dashboard/dist/assets/{McpRunDetailPage-BHVEcKV5.js.map → McpRunDetailPage-BJKkM9-3.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-CtlLagcs.js → McpRunsPage-DqhHfD5G.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-CtlLagcs.js.map → McpRunsPage-DqhHfD5G.js.map} +1 -1
- package/dashboard/dist/assets/{NamespacePill-CeSfHH-j.js → NamespacePill--uIaGtrN.js} +2 -2
- package/dashboard/dist/assets/{NamespacePill-CeSfHH-j.js.map → NamespacePill--uIaGtrN.js.map} +1 -1
- package/dashboard/dist/assets/{OperationsPage-DH67bcW9.js → OperationsPage-D6B9Vv__.js} +3 -3
- package/dashboard/dist/assets/{OperationsPage-DH67bcW9.js.map → OperationsPage-D6B9Vv__.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-CIH1cxjQ.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-CMkgMewd.js.map → OperatorDashboard-CIH1cxjQ.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-DiGWAQlR.js → PageHeader-DClJ33fV.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-DiGWAQlR.js.map → PageHeader-DClJ33fV.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-DwnKQ06j.js → PageHeaderWithStats-C-TrbKQL.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-DwnKQ06j.js.map → PageHeaderWithStats-C-TrbKQL.js.map} +1 -1
- package/dashboard/dist/assets/PersonaDetailPage-DjvfyIph.js +2 -0
- package/dashboard/dist/assets/{PersonaDetailPage-Cs1FFdNq.js.map → PersonaDetailPage-DjvfyIph.js.map} +1 -1
- package/dashboard/dist/assets/{PersonasPage-CHTRdneF.js → PersonasPage-D7ryA8Vc.js} +2 -2
- package/dashboard/dist/assets/{PersonasPage-CHTRdneF.js.map → PersonasPage-D7ryA8Vc.js.map} +1 -1
- package/dashboard/dist/assets/{PortalPage-ChB5pBTZ.js → PortalPage-D3ybr0mo.js} +2 -2
- package/dashboard/dist/assets/{PortalPage-ChB5pBTZ.js.map → PortalPage-D3ybr0mo.js.map} +1 -1
- package/dashboard/dist/assets/PrintLabelsPanel-D0HF5x8b.js +2 -0
- package/dashboard/dist/assets/PrintLabelsPanel-D0HF5x8b.js.map +1 -0
- package/dashboard/dist/assets/{ProcessDetailPage-CzyqSfal.js → ProcessDetailPage-0xS9EdHe.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-CzyqSfal.js.map → ProcessDetailPage-0xS9EdHe.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-rOwNkaU9.js → ProcessesListPage-93SMj1Fd.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-rOwNkaU9.js.map → ProcessesListPage-93SMj1Fd.js.map} +1 -1
- package/dashboard/dist/assets/{ResolverForm-DibnlZ-A.js → ResolverForm-DfogHDzl.js} +5 -5
- package/dashboard/dist/assets/{ResolverForm-DibnlZ-A.js.map → ResolverForm-DfogHDzl.js.map} +1 -1
- package/dashboard/dist/assets/{RoleDetailPage-Bv9R7iQC.js → RoleDetailPage-DlUOJWSB.js} +3 -3
- package/dashboard/dist/assets/{RoleDetailPage-Bv9R7iQC.js.map → RoleDetailPage-DlUOJWSB.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-D3hkAdKf.js → RolePill-BjD1Qw5y.js} +2 -2
- package/dashboard/dist/assets/{RolePill-D3hkAdKf.js.map → RolePill-BjD1Qw5y.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-DqhHSvaw.js +2 -0
- package/dashboard/dist/assets/{RolesPage-CUP7EH5U.js.map → RolesPage-DqhHSvaw.js.map} +1 -1
- package/dashboard/dist/assets/{RosterWidget-DZtmQcjU.js → RosterWidget-BrIq61HR.js} +2 -2
- package/dashboard/dist/assets/{RosterWidget-DZtmQcjU.js.map → RosterWidget-BrIq61HR.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-D6zQrCNr.js +2 -0
- package/dashboard/dist/assets/{RunAsSelector-B9-1vgZr.js.map → RunAsSelector-D6zQrCNr.js.map} +1 -1
- package/dashboard/dist/assets/ScanCodesPage-B2S9DR2f.js +2 -0
- package/dashboard/dist/assets/{ScanCodesPage-KN_e2rJl.js.map → ScanCodesPage-B2S9DR2f.js.map} +1 -1
- package/dashboard/dist/assets/ScanSchemeDetailPage-gpxKN-pL.js +5 -0
- package/dashboard/dist/assets/ScanSchemeDetailPage-gpxKN-pL.js.map +1 -0
- package/dashboard/dist/assets/ScanStationPage-B-UTgXsG.js +2 -0
- package/dashboard/dist/assets/{ScanStationPage-B0qbUOwc.js.map → ScanStationPage-B-UTgXsG.js.map} +1 -1
- package/dashboard/dist/assets/{SchemeMatchFields-CL7TKnw3.js → SchemeMatchFields-BK24aa7K.js} +2 -2
- package/dashboard/dist/assets/{SchemeMatchFields-CL7TKnw3.js.map → SchemeMatchFields-BK24aa7K.js.map} +1 -1
- package/dashboard/dist/assets/{ScopeBadge-DGz79rmG.js → ScopeBadge-ofLQ6HW-.js} +2 -2
- package/dashboard/dist/assets/{ScopeBadge-DGz79rmG.js.map → ScopeBadge-ofLQ6HW-.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-CUwxfBQH.js → StickyPagination-CgVv7vc_.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-CUwxfBQH.js.map → StickyPagination-CgVv7vc_.js.map} +1 -1
- package/dashboard/dist/assets/{StreamMessageDetail-DOjcO7d2.js → StreamMessageDetail-B9sxDVw4.js} +2 -2
- package/dashboard/dist/assets/{StreamMessageDetail-DOjcO7d2.js.map → StreamMessageDetail-B9sxDVw4.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-SPMpoLHP.js → SwimlaneTimeline-DQc0CYSL.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-SPMpoLHP.js.map → SwimlaneTimeline-DQc0CYSL.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-DaIdhv3h.js → TagInput-47qVYzke.js} +2 -2
- package/dashboard/dist/assets/{TagInput-DaIdhv3h.js.map → TagInput-47qVYzke.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-DvfzR2IQ.js → TaskDetailPage-D6VOsA1f.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-DvfzR2IQ.js.map → TaskDetailPage-D6VOsA1f.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-sUA1nZe-.js → TaskQueuePill-C5KmdXAl.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-sUA1nZe-.js.map → TaskQueuePill-C5KmdXAl.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-Jp6wmL7t.js → TasksListPage-DG8hvO8G.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-Jp6wmL7t.js.map → TasksListPage-DG8hvO8G.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-BCQA0Gb_.js → TimeAgo-CL02EhFi.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-BCQA0Gb_.js.map → TimeAgo-CL02EhFi.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-xhdMHDQt.js → TimestampCell-BE7oKVJg.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-xhdMHDQt.js.map → TimestampCell-BE7oKVJg.js.map} +1 -1
- package/dashboard/dist/assets/{ToolPill-CpBAFdEX.js → ToolPill-Cp9Drk1s.js} +2 -2
- package/dashboard/dist/assets/{ToolPill-CpBAFdEX.js.map → ToolPill-Cp9Drk1s.js.map} +1 -1
- package/dashboard/dist/assets/{ToolTestPanel-D8M3ITrJ.js → ToolTestPanel-CRecLh6S.js} +2 -2
- package/dashboard/dist/assets/{ToolTestPanel-D8M3ITrJ.js.map → ToolTestPanel-CRecLh6S.js.map} +1 -1
- package/dashboard/dist/assets/{TopicDetailPage-DdBJQp31.js → TopicDetailPage-QzkinTfN.js} +3 -3
- package/dashboard/dist/assets/{TopicDetailPage-DdBJQp31.js.map → TopicDetailPage-QzkinTfN.js.map} +1 -1
- package/dashboard/dist/assets/{TopicsPage-vpvsynD9.js → TopicsPage-D8dW6J65.js} +2 -2
- package/dashboard/dist/assets/{TopicsPage-vpvsynD9.js.map → TopicsPage-D8dW6J65.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-BK6Lzsdw.js → UserName-Dw3R_zrl.js} +2 -2
- package/dashboard/dist/assets/{UserName-BK6Lzsdw.js.map → UserName-Dw3R_zrl.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-BTocv8or.js +2 -0
- package/dashboard/dist/assets/{WorkflowExecutionPage-DkM1TS4I.js.map → WorkflowExecutionPage-BTocv8or.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill-CKHip3hH.js → WorkflowPill-BiLYq__w.js} +2 -2
- package/dashboard/dist/assets/{WorkflowPill-CKHip3hH.js.map → WorkflowPill-BiLYq__w.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowsDashboard-CIPEt3et.js +2 -0
- package/dashboard/dist/assets/{WorkflowsDashboard-g_N4y3QS.js.map → WorkflowsDashboard-CIPEt3et.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-Drjo-Lu-.js → WorkflowsOverview-Bj4MJIE-.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-Drjo-Lu-.js.map → WorkflowsOverview-Bj4MJIE-.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-CLltNHjZ.js → YamlWorkflowDetailPage-DMEk5k9-.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-CLltNHjZ.js.map → YamlWorkflowDetailPage-DMEk5k9-.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-CxQCB-Zi.js → YamlWorkflowsPage-F2yyyoiB.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-CxQCB-Zi.js.map → YamlWorkflowsPage-F2yyyoiB.js.map} +1 -1
- package/dashboard/dist/assets/{agents-Dk25jjhj.js → agents-mSgxEPpI.js} +2 -2
- package/dashboard/dist/assets/{agents-Dk25jjhj.js.map → agents-mSgxEPpI.js.map} +1 -1
- package/dashboard/dist/assets/{bots-bRkCqhlq.js → bots-p4Hp0CV6.js} +2 -2
- package/dashboard/dist/assets/{bots-bRkCqhlq.js.map → bots-p4Hp0CV6.js.map} +1 -1
- package/dashboard/dist/assets/{capabilities-DARawLry.js → capabilities-D_-I_SXR.js} +2 -2
- package/dashboard/dist/assets/{capabilities-DARawLry.js.map → capabilities-D_-I_SXR.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-DKccxxs6.js → controlplane-DjdoQnRU.js} +2 -2
- package/dashboard/dist/assets/{controlplane-DKccxxs6.js.map → controlplane-DjdoQnRU.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-BaYuzMYf.js → escalation-columns-R_IEVQjQ.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-BaYuzMYf.js.map → escalation-columns-R_IEVQjQ.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-items-CwbNFnsH.js → escalation-items-BGZlJMpk.js} +2 -2
- package/dashboard/dist/assets/{escalation-items-CwbNFnsH.js.map → escalation-items-BGZlJMpk.js.map} +1 -1
- package/dashboard/dist/assets/{index-Cf6qCgTf.js → index-BEMdD58x.js} +2 -2
- package/dashboard/dist/assets/{index-Cf6qCgTf.js.map → index-BEMdD58x.js.map} +1 -1
- package/dashboard/dist/assets/index-BUmz0NMg.css +1 -0
- package/dashboard/dist/assets/{index-hKOlahpE.js → index-BuCEhhnl.js} +2 -2
- package/dashboard/dist/assets/{index-hKOlahpE.js.map → index-BuCEhhnl.js.map} +1 -1
- package/dashboard/dist/assets/{index-D1uliPqS.js → index-BxbQmeqh.js} +2 -2
- package/dashboard/dist/assets/{index-D1uliPqS.js.map → index-BxbQmeqh.js.map} +1 -1
- package/dashboard/dist/assets/index-C5osluV3.js +2 -0
- package/dashboard/dist/assets/{index-CtrSYqmL.js.map → index-C5osluV3.js.map} +1 -1
- package/dashboard/dist/assets/{index-CU2UW2y6.js → index-C_dAJUzh.js} +25 -25
- package/dashboard/dist/assets/index-C_dAJUzh.js.map +1 -0
- package/dashboard/dist/assets/{index-Bx9HVzuT.js → index-D-FYj9jT.js} +2 -2
- package/dashboard/dist/assets/{index-Bx9HVzuT.js.map → index-D-FYj9jT.js.map} +1 -1
- package/dashboard/dist/assets/{index-BZgtzkkG.js → index-D6K_IgCz.js} +2 -2
- package/dashboard/dist/assets/{index-BZgtzkkG.js.map → index-D6K_IgCz.js.map} +1 -1
- package/dashboard/dist/assets/index-D7L_VoBD.js +2 -0
- package/dashboard/dist/assets/index-D7L_VoBD.js.map +1 -0
- package/dashboard/dist/assets/{index-DgpL_Lgc.js → index-D9RAN9sA.js} +2 -2
- package/dashboard/dist/assets/{index-DgpL_Lgc.js.map → index-D9RAN9sA.js.map} +1 -1
- package/dashboard/dist/assets/{index-dShcvdg3.js → index-DUYAGxwc.js} +2 -2
- package/dashboard/dist/assets/{index-dShcvdg3.js.map → index-DUYAGxwc.js.map} +1 -1
- package/dashboard/dist/assets/{index-E_hJ7vtX.js → index-Dk2KKo0z.js} +2 -2
- package/dashboard/dist/assets/{index-E_hJ7vtX.js.map → index-Dk2KKo0z.js.map} +1 -1
- package/dashboard/dist/assets/{index-DU2QCbgH.js → index-DlJkZ12b.js} +2 -2
- package/dashboard/dist/assets/{index-DU2QCbgH.js.map → index-DlJkZ12b.js.map} +1 -1
- package/dashboard/dist/assets/{index-kzifJWbM.js → index-FiNThtNU.js} +3 -3
- package/dashboard/dist/assets/{index-kzifJWbM.js.map → index-FiNThtNU.js.map} +1 -1
- package/dashboard/dist/assets/{knowledge-DOe5ks-E.js → knowledge-DSsPTqkK.js} +2 -2
- package/dashboard/dist/assets/{knowledge-DOe5ks-E.js.map → knowledge-DSsPTqkK.js.map} +1 -1
- package/dashboard/dist/assets/{machines-Zq_00v7k.js → machines-DSgGtqqr.js} +2 -2
- package/dashboard/dist/assets/{machines-Zq_00v7k.js.map → machines-DSgGtqqr.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-BL8kD0oh.js → mcp-Cg-_uLw8.js} +2 -2
- package/dashboard/dist/assets/{mcp-BL8kD0oh.js.map → mcp-Cg-_uLw8.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-BpokmJWi.js → mcp-query-DQombEK_.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-BpokmJWi.js.map → mcp-query-DQombEK_.js.map} +1 -1
- package/dashboard/dist/assets/{personas-BubCnQZ8.js → personas-DYrcoVBu.js} +2 -2
- package/dashboard/dist/assets/{personas-BubCnQZ8.js.map → personas-DYrcoVBu.js.map} +1 -1
- package/dashboard/dist/assets/{pipelines--DUoMx7K.js → pipelines-wdb4xsey.js} +2 -2
- package/dashboard/dist/assets/{pipelines--DUoMx7K.js.map → pipelines-wdb4xsey.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-CJXN4OB4.js → tasks-Bil7gvm9.js} +2 -2
- package/dashboard/dist/assets/{tasks-CJXN4OB4.js.map → tasks-Bil7gvm9.js.map} +1 -1
- package/dashboard/dist/assets/{topics-CAG08Ruo.js → topics-wBqaVhRR.js} +2 -2
- package/dashboard/dist/assets/{topics-CAG08Ruo.js.map → topics-wBqaVhRR.js.map} +1 -1
- package/dashboard/dist/assets/{useDebouncedValue-DQ2D8cm2.js → useDebouncedValue-CwrY8TpV.js} +2 -2
- package/dashboard/dist/assets/{useDebouncedValue-DQ2D8cm2.js.map → useDebouncedValue-CwrY8TpV.js.map} +1 -1
- package/dashboard/dist/assets/{useNamespace-DjEVAlJQ.js → useNamespace-Sod_xApz.js} +2 -2
- package/dashboard/dist/assets/{useNamespace-DjEVAlJQ.js.map → useNamespace-Sod_xApz.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-etcpfIwo.js → useYamlActivityEvents-CKLInV3C.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-etcpfIwo.js.map → useYamlActivityEvents-CKLInV3C.js.map} +1 -1
- package/dashboard/dist/assets/{validate-YJK_6a7m.js → validate-CYhW1xMJ.js} +2 -2
- package/dashboard/dist/assets/{validate-YJK_6a7m.js.map → validate-CYhW1xMJ.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-en0_uSRD.js → vendor-icons-ed7mYQw4.js} +2 -2
- package/dashboard/dist/assets/{vendor-icons-en0_uSRD.js.map → vendor-icons-ed7mYQw4.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-D97Bz6li.js → yaml-workflows-C20qHo3L.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-D97Bz6li.js.map → yaml-workflows-C20qHo3L.js.map} +1 -1
- package/dashboard/dist/index.html +3 -3
- package/docs/api/http/labels.md +115 -0
- package/docs/api/http/users.md +2 -0
- package/docs/api/mcp/admin.md +76 -1
- package/docs/code-owned-configuration.md +1 -1
- package/docs/iam.md +12 -0
- package/docs/label-sheets.md +267 -0
- package/docs/machines.md +2 -2
- package/docs/scan-codes.md +11 -5
- package/package.json +4 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-BRKyG5qZ.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-BRKyG5qZ.js.map +0 -1
- package/dashboard/dist/assets/BulkAssignModal-BWfzPrRk.js +0 -2
- package/dashboard/dist/assets/HomePage-BUlSnCg8.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-BHVEcKV5.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-CMkgMewd.js +0 -2
- package/dashboard/dist/assets/PersonaDetailPage-Cs1FFdNq.js +0 -2
- package/dashboard/dist/assets/RolesPage-CUP7EH5U.js +0 -2
- package/dashboard/dist/assets/RunAsSelector-B9-1vgZr.js +0 -2
- package/dashboard/dist/assets/ScanCodesPage-KN_e2rJl.js +0 -2
- package/dashboard/dist/assets/ScanSchemeDetailPage-CqItQ67Y.js +0 -5
- package/dashboard/dist/assets/ScanSchemeDetailPage-CqItQ67Y.js.map +0 -1
- package/dashboard/dist/assets/ScanStationPage-B0qbUOwc.js +0 -2
- package/dashboard/dist/assets/WorkflowExecutionPage-DkM1TS4I.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-g_N4y3QS.js +0 -2
- package/dashboard/dist/assets/index-BmzscsXK.css +0 -1
- package/dashboard/dist/assets/index-CU2UW2y6.js.map +0 -1
- package/dashboard/dist/assets/index-CtrSYqmL.js +0 -2
- package/dashboard/dist/assets/index-DU-1gMks.js +0 -2
- package/dashboard/dist/assets/index-DU-1gMks.js.map +0 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Barcode encoding: the one module that knows bwip-js. Renderers draw the
|
|
3
|
+
// dark modules this returns; ZPL uses the printer's own encoder instead.
|
|
4
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.SymbolEncodeError = void 0;
|
|
9
|
+
exports.quietZoneModules = quietZoneModules;
|
|
10
|
+
exports.encodeSymbol = encodeSymbol;
|
|
11
|
+
const bwip_js_1 = __importDefault(require("bwip-js"));
|
|
12
|
+
/** Data the symbology cannot carry. The message never repeats the data. */
|
|
13
|
+
class SymbolEncodeError extends Error {
|
|
14
|
+
constructor(message) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.name = 'SymbolEncodeError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.SymbolEncodeError = SymbolEncodeError;
|
|
20
|
+
const BCID = { code128: 'code128', qrcode: 'qrcode', datamatrix: 'datamatrix' };
|
|
21
|
+
const QUIET_ZONE = { code128: 10, qrcode: 4, datamatrix: 1 };
|
|
22
|
+
const PRINTABLE_ASCII = /^[\x20-\x7e]+$/;
|
|
23
|
+
/** The blank margin, in modules, a scanner needs around the symbol. */
|
|
24
|
+
function quietZoneModules(symbology) {
|
|
25
|
+
return QUIET_ZONE[symbology];
|
|
26
|
+
}
|
|
27
|
+
function linearPath(sbs) {
|
|
28
|
+
let x = 0;
|
|
29
|
+
const bars = [];
|
|
30
|
+
sbs.forEach((run, i) => {
|
|
31
|
+
if (i % 2 === 0)
|
|
32
|
+
bars.push(`M${x} 0h${run}v1h-${run}z`);
|
|
33
|
+
x += run;
|
|
34
|
+
});
|
|
35
|
+
return { path: bars.join(''), width: x };
|
|
36
|
+
}
|
|
37
|
+
function matrixPath(raw) {
|
|
38
|
+
const rows = [];
|
|
39
|
+
for (let y = 0; y < raw.pixy; y++) {
|
|
40
|
+
let x = 0;
|
|
41
|
+
while (x < raw.pixx) {
|
|
42
|
+
if (!raw.pixs[y * raw.pixx + x]) {
|
|
43
|
+
x++;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const start = x;
|
|
47
|
+
while (x < raw.pixx && raw.pixs[y * raw.pixx + x])
|
|
48
|
+
x++;
|
|
49
|
+
rows.push(`M${start} ${y}h${x - start}v1h-${x - start}z`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return rows.join('');
|
|
53
|
+
}
|
|
54
|
+
/** Encode `data` in `symbology`; throws SymbolEncodeError when it cannot be carried. */
|
|
55
|
+
function encodeSymbol(symbology, data) {
|
|
56
|
+
if (!data)
|
|
57
|
+
throw new SymbolEncodeError('a code is empty');
|
|
58
|
+
if (symbology === 'code128' && !PRINTABLE_ASCII.test(data)) {
|
|
59
|
+
throw new SymbolEncodeError('Code 128 carries printable ASCII only');
|
|
60
|
+
}
|
|
61
|
+
let raw;
|
|
62
|
+
try {
|
|
63
|
+
raw = bwip_js_1.default.raw(BCID[symbology], data, {});
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
throw new SymbolEncodeError(`a code cannot be encoded as ${symbology}`);
|
|
67
|
+
}
|
|
68
|
+
const first = raw[0];
|
|
69
|
+
if ('sbs' in first) {
|
|
70
|
+
const { path, width } = linearPath(first.sbs);
|
|
71
|
+
return { path, widthModules: width, heightModules: 1 };
|
|
72
|
+
}
|
|
73
|
+
return { path: matrixPath(first), widthModules: first.pixx, heightModules: first.pixy };
|
|
74
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface LabelTokenContext {
|
|
2
|
+
target: string;
|
|
3
|
+
/** The row's metadata (action schemes) or a pasted list's columns. */
|
|
4
|
+
item?: Record<string, unknown>;
|
|
5
|
+
/** The identity scheme's user: name, display_name, email, roles, and metadata keys. */
|
|
6
|
+
user?: Record<string, unknown>;
|
|
7
|
+
scheme?: {
|
|
8
|
+
name: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
/** Render one line of label text. */
|
|
12
|
+
export declare function renderLabelText(template: string, ctx: LabelTokenContext): string;
|
|
13
|
+
/** Every token a line uses, valid or not, without braces. */
|
|
14
|
+
export declare function listLabelTokens(template: string): string[];
|
|
15
|
+
/** Tokens in a line that renderLabelText does not know. */
|
|
16
|
+
export declare function unknownLabelTokens(template: string): string[];
|
|
17
|
+
/** `user.<key>` tokens a line uses, as keys. */
|
|
18
|
+
export declare function userTokenKeys(template: string): string[];
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Label text tokens: {target}, {item.<facet>}, {user.<key>}, {scheme.name}.
|
|
3
|
+
// A missing value renders empty; template validation names unknown tokens.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.renderLabelText = renderLabelText;
|
|
6
|
+
exports.listLabelTokens = listLabelTokens;
|
|
7
|
+
exports.unknownLabelTokens = unknownLabelTokens;
|
|
8
|
+
exports.userTokenKeys = userTokenKeys;
|
|
9
|
+
const TOKEN = /\{(target|scheme\.name|(?:item|user)\.[a-zA-Z0-9_]+)\}/g;
|
|
10
|
+
const ANY_TOKEN = /\{([^{}]*)\}/g;
|
|
11
|
+
function display(value) {
|
|
12
|
+
if (value === null || value === undefined)
|
|
13
|
+
return '';
|
|
14
|
+
if (Array.isArray(value))
|
|
15
|
+
return value.map(display).filter(Boolean).join(', ');
|
|
16
|
+
if (typeof value === 'object')
|
|
17
|
+
return '';
|
|
18
|
+
return String(value);
|
|
19
|
+
}
|
|
20
|
+
function resolve(token, ctx) {
|
|
21
|
+
if (token === 'target')
|
|
22
|
+
return ctx.target;
|
|
23
|
+
if (token === 'scheme.name')
|
|
24
|
+
return ctx.scheme?.name;
|
|
25
|
+
const [bag, key] = token.split('.', 2);
|
|
26
|
+
return (bag === 'item' ? ctx.item : ctx.user)?.[key];
|
|
27
|
+
}
|
|
28
|
+
/** Render one line of label text. */
|
|
29
|
+
function renderLabelText(template, ctx) {
|
|
30
|
+
return template.replace(TOKEN, (_m, token) => display(resolve(token, ctx))).trim();
|
|
31
|
+
}
|
|
32
|
+
/** Every token a line uses, valid or not, without braces. */
|
|
33
|
+
function listLabelTokens(template) {
|
|
34
|
+
return [...template.matchAll(ANY_TOKEN)].map((m) => m[1]);
|
|
35
|
+
}
|
|
36
|
+
/** Tokens in a line that renderLabelText does not know. */
|
|
37
|
+
function unknownLabelTokens(template) {
|
|
38
|
+
return listLabelTokens(template).filter((t) => !new RegExp(`^${TOKEN.source}$`).test(`{${t}}`));
|
|
39
|
+
}
|
|
40
|
+
/** `user.<key>` tokens a line uses, as keys. */
|
|
41
|
+
function userTokenKeys(template) {
|
|
42
|
+
return listLabelTokens(template).filter((t) => t.startsWith('user.')).map((t) => t.slice(5));
|
|
43
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
export declare const LABEL_SYMBOLOGIES: readonly ["code128", "qrcode", "datamatrix"];
|
|
2
|
+
export type LabelSymbology = (typeof LABEL_SYMBOLOGIES)[number];
|
|
3
|
+
/** How a code's caption band prints on black-only stock: filled, outlined, or bare text. */
|
|
4
|
+
export declare const LABEL_TONES: readonly ["solid", "outline", "plain"];
|
|
5
|
+
export type LabelTone = (typeof LABEL_TONES)[number];
|
|
6
|
+
/** A sheet of labels (office printer) or a thermal roll (one label per page). */
|
|
7
|
+
export interface LabelMedia {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
family: 'sheet' | 'thermal';
|
|
11
|
+
pageWidthMm: number;
|
|
12
|
+
pageHeightMm: number;
|
|
13
|
+
columns: number;
|
|
14
|
+
rows: number;
|
|
15
|
+
labelWidthMm: number;
|
|
16
|
+
labelHeightMm: number;
|
|
17
|
+
marginTopMm: number;
|
|
18
|
+
marginLeftMm: number;
|
|
19
|
+
gutterXMm: number;
|
|
20
|
+
gutterYMm: number;
|
|
21
|
+
cornerRadiusMm: number;
|
|
22
|
+
/** Thermal print resolution in dots per inch. */
|
|
23
|
+
dpi?: number;
|
|
24
|
+
/** The narrowest bar or module a scanner reads reliably from this stock. */
|
|
25
|
+
minModuleMm: number;
|
|
26
|
+
}
|
|
27
|
+
/** One code on a label: the payload, the act it names, and its band tone. */
|
|
28
|
+
export interface LabelCode {
|
|
29
|
+
code: string;
|
|
30
|
+
caption: string;
|
|
31
|
+
tone: LabelTone;
|
|
32
|
+
}
|
|
33
|
+
/** What one label says, before layout. A masked label draws placeholders instead of codes. */
|
|
34
|
+
export interface LabelContent {
|
|
35
|
+
title?: string;
|
|
36
|
+
lines: string[];
|
|
37
|
+
codes: LabelCode[];
|
|
38
|
+
masked?: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface LabelTextElement {
|
|
41
|
+
kind: 'text';
|
|
42
|
+
x: number;
|
|
43
|
+
y: number;
|
|
44
|
+
w: number;
|
|
45
|
+
/** Font size in millimetres (the em box). */
|
|
46
|
+
size: number;
|
|
47
|
+
text: string;
|
|
48
|
+
weight: 'regular' | 'bold';
|
|
49
|
+
align: 'left' | 'center';
|
|
50
|
+
/** White text, printed over a solid band. */
|
|
51
|
+
inverse?: boolean;
|
|
52
|
+
}
|
|
53
|
+
export interface LabelRectElement {
|
|
54
|
+
kind: 'rect';
|
|
55
|
+
x: number;
|
|
56
|
+
y: number;
|
|
57
|
+
w: number;
|
|
58
|
+
h: number;
|
|
59
|
+
/** Filled black when true; outlined with `stroke` mm otherwise. */
|
|
60
|
+
fill: boolean;
|
|
61
|
+
stroke?: number;
|
|
62
|
+
}
|
|
63
|
+
export interface LabelSymbolElement {
|
|
64
|
+
kind: 'symbol';
|
|
65
|
+
x: number;
|
|
66
|
+
y: number;
|
|
67
|
+
w: number;
|
|
68
|
+
h: number;
|
|
69
|
+
symbology: LabelSymbology;
|
|
70
|
+
/** The encoded payload; empty when masked. */
|
|
71
|
+
data: string;
|
|
72
|
+
moduleMm: number;
|
|
73
|
+
/** Dark modules as an SVG path in module units; empty when masked. */
|
|
74
|
+
path: string;
|
|
75
|
+
masked?: boolean;
|
|
76
|
+
}
|
|
77
|
+
export type LabelElement = LabelTextElement | LabelRectElement | LabelSymbolElement;
|
|
78
|
+
export interface PlacedLabel {
|
|
79
|
+
/** Position on the page, counted from 0, left to right then top to bottom. */
|
|
80
|
+
slot: number;
|
|
81
|
+
/** Index of the label in the job's input. */
|
|
82
|
+
index: number;
|
|
83
|
+
x: number;
|
|
84
|
+
y: number;
|
|
85
|
+
w: number;
|
|
86
|
+
h: number;
|
|
87
|
+
elements: LabelElement[];
|
|
88
|
+
}
|
|
89
|
+
export interface LabelPage {
|
|
90
|
+
labels: PlacedLabel[];
|
|
91
|
+
}
|
|
92
|
+
export declare const LABEL_WARNING_KINDS: readonly ["scale", "quiet_zone", "unencodable", "unparseable", "rule_disabled", "unresolved", "overflow", "missing_token"];
|
|
93
|
+
export type LabelWarningKind = (typeof LABEL_WARNING_KINDS)[number];
|
|
94
|
+
export interface LabelWarning {
|
|
95
|
+
/** Index of the label in the job's input. */
|
|
96
|
+
index: number;
|
|
97
|
+
kind: LabelWarningKind;
|
|
98
|
+
detail: string;
|
|
99
|
+
}
|
|
100
|
+
export interface LabelSheet {
|
|
101
|
+
media: LabelMedia;
|
|
102
|
+
pages: LabelPage[];
|
|
103
|
+
cutMarks: boolean;
|
|
104
|
+
warnings: LabelWarning[];
|
|
105
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Label sheet model. Pure data in millimetres: the dashboard preview, browser
|
|
3
|
+
// print, PDF and ZPL all render the same LabelSheet.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.LABEL_WARNING_KINDS = exports.LABEL_TONES = exports.LABEL_SYMBOLOGIES = void 0;
|
|
6
|
+
exports.LABEL_SYMBOLOGIES = ['code128', 'qrcode', 'datamatrix'];
|
|
7
|
+
/** How a code's caption band prints on black-only stock: filled, outlined, or bare text. */
|
|
8
|
+
exports.LABEL_TONES = ['solid', 'outline', 'plain'];
|
|
9
|
+
exports.LABEL_WARNING_KINDS = [
|
|
10
|
+
'scale', 'quiet_zone', 'unencodable', 'unparseable', 'rule_disabled', 'unresolved', 'overflow', 'missing_token',
|
|
11
|
+
];
|
package/build/start/adapters.js
CHANGED
|
@@ -21,6 +21,10 @@ const features_1 = require("../modules/features");
|
|
|
21
21
|
const search_1 = require("../modules/search");
|
|
22
22
|
const branding_1 = require("../modules/branding");
|
|
23
23
|
const display_1 = require("../modules/display");
|
|
24
|
+
const transports_1 = require("../lib/labels/transports");
|
|
25
|
+
const media_1 = require("../services/labels/media");
|
|
26
|
+
const render_pdf_1 = require("../services/labels/render-pdf");
|
|
27
|
+
const redact_1 = require("../services/user/redact");
|
|
24
28
|
const socket_auth_1 = require("./socket-auth");
|
|
25
29
|
/**
|
|
26
30
|
* Register all adapters (logging, telemetry, events, maintenance,
|
|
@@ -32,6 +36,18 @@ function registerAdapters(startConfig) {
|
|
|
32
36
|
(0, search_1.configureSearch)(startConfig.search);
|
|
33
37
|
(0, branding_1.configureBranding)(startConfig.branding);
|
|
34
38
|
(0, display_1.configureDisplay)(startConfig.display);
|
|
39
|
+
// Label sheets: host media first, so the default may name one.
|
|
40
|
+
if (startConfig.labels?.media)
|
|
41
|
+
(0, media_1.registerLabelMedia)(startConfig.labels.media);
|
|
42
|
+
if (startConfig.labels?.defaultMedia)
|
|
43
|
+
(0, media_1.setDefaultLabelMedia)(startConfig.labels.defaultMedia);
|
|
44
|
+
if (startConfig.labels?.font)
|
|
45
|
+
(0, render_pdf_1.registerLabelFonts)(startConfig.labels.font);
|
|
46
|
+
if (startConfig.labels?.protectIdentityKeys !== undefined)
|
|
47
|
+
(0, redact_1.setIdentityKeyProtection)(startConfig.labels.protectIdentityKeys);
|
|
48
|
+
for (const [name, transport] of Object.entries(startConfig.labels?.transports ?? {})) {
|
|
49
|
+
transports_1.labelTransportRegistry.register(name, transport);
|
|
50
|
+
}
|
|
35
51
|
// Logging (register first so subsequent log calls use it)
|
|
36
52
|
if (startConfig.logging?.adapter) {
|
|
37
53
|
logger_1.loggerRegistry.register(startConfig.logging.adapter);
|
package/build/start/workers.js
CHANGED
|
@@ -102,8 +102,11 @@ async function collectWorkers(startConfig) {
|
|
|
102
102
|
];
|
|
103
103
|
logger_1.loggerRegistry.info('[long-tail] system workflows loaded');
|
|
104
104
|
if (startConfig.examples) {
|
|
105
|
-
const { exampleWorkers } = await Promise.resolve().then(() => __importStar(require('../examples')));
|
|
105
|
+
const { exampleWorkers, storageDropTransport, STORAGE_DROP_TRANSPORT } = await Promise.resolve().then(() => __importStar(require('../examples')));
|
|
106
106
|
workers.push(...exampleWorkers);
|
|
107
|
+
const { labelTransportRegistry } = await Promise.resolve().then(() => __importStar(require('../lib/labels/transports')));
|
|
108
|
+
if (!labelTransportRegistry.has(STORAGE_DROP_TRANSPORT))
|
|
109
|
+
labelTransportRegistry.register(STORAGE_DROP_TRANSPORT, storageDropTransport);
|
|
107
110
|
logger_1.loggerRegistry.info('[long-tail] example workflows loaded');
|
|
108
111
|
}
|
|
109
112
|
return { workers, builtinMcpServerFactories };
|
|
@@ -499,10 +502,11 @@ async function startWorkers(startConfig, workers, builtinMcpServerFactories) {
|
|
|
499
502
|
// applies first — rule validation reads its kind.
|
|
500
503
|
if (startConfig.scanSchemes?.length) {
|
|
501
504
|
const { seedScanScheme, seedScanRule, applyScanScheme, applyScanRule, listScanSchemes, listScanRules, } = await Promise.resolve().then(() => __importStar(require('../services/scan-code')));
|
|
505
|
+
const { applyLabelTemplate, seedLabelTemplate, listLabelTemplates } = await Promise.resolve().then(() => __importStar(require('../services/labels/templates')));
|
|
502
506
|
const scanReport = (0, apply_report_1.newSurfaceReport)();
|
|
503
507
|
for (const scheme of startConfig.scanSchemes) {
|
|
504
508
|
const codeOwned = (0, apply_report_1.ownedByCode)(scheme.reset, configSource);
|
|
505
|
-
const { rules, reset: _reset, ...schemeInput } = scheme;
|
|
509
|
+
const { rules, labels, reset: _reset, ...schemeInput } = scheme;
|
|
506
510
|
try {
|
|
507
511
|
if (codeOwned) {
|
|
508
512
|
let outcome = await applyScanScheme(schemeInput);
|
|
@@ -511,6 +515,11 @@ async function startWorkers(startConfig, workers, builtinMcpServerFactories) {
|
|
|
511
515
|
if (ruleOutcome === 'applied')
|
|
512
516
|
outcome = 'applied';
|
|
513
517
|
}
|
|
518
|
+
for (const label of labels ?? []) {
|
|
519
|
+
const labelOutcome = await applyLabelTemplate({ scheme_version: scheme.version, ...label });
|
|
520
|
+
if (labelOutcome === 'applied')
|
|
521
|
+
outcome = 'applied';
|
|
522
|
+
}
|
|
514
523
|
(0, apply_report_1.recordOutcome)(scanReport, `scheme ${scheme.version}`, outcome);
|
|
515
524
|
if (outcome === 'applied')
|
|
516
525
|
logger_1.loggerRegistry.info(`[long-tail] scan scheme applied: ${scheme.version}`);
|
|
@@ -519,12 +528,19 @@ async function startWorkers(startConfig, workers, builtinMcpServerFactories) {
|
|
|
519
528
|
scanReport.orphans.push(...existingRules
|
|
520
529
|
.filter((r) => !declaredCategories.has(r.category))
|
|
521
530
|
.map((r) => `${scheme.version}/${r.category}`));
|
|
531
|
+
const declaredLabels = new Set((labels ?? []).map((l) => l.name));
|
|
532
|
+
scanReport.orphans.push(...(await listLabelTemplates(scheme.version))
|
|
533
|
+
.filter((t) => !declaredLabels.has(t.name))
|
|
534
|
+
.map((t) => `${scheme.version}/label:${t.name}`));
|
|
522
535
|
}
|
|
523
536
|
else {
|
|
524
537
|
const inserted = await seedScanScheme(schemeInput);
|
|
525
538
|
for (const rule of rules ?? []) {
|
|
526
539
|
await seedScanRule({ scheme_version: scheme.version, ...rule });
|
|
527
540
|
}
|
|
541
|
+
for (const label of labels ?? []) {
|
|
542
|
+
await seedLabelTemplate({ scheme_version: scheme.version, ...label });
|
|
543
|
+
}
|
|
528
544
|
(0, apply_report_1.recordOutcome)(scanReport, `scheme ${scheme.version}`, 'db-owned');
|
|
529
545
|
if (inserted)
|
|
530
546
|
logger_1.loggerRegistry.info(`[long-tail] scan scheme seeded: ${scheme.version}`);
|
|
@@ -60,6 +60,7 @@ const exports_1 = require("./exports");
|
|
|
60
60
|
const overview_1 = require("./overview");
|
|
61
61
|
const diagnostics_1 = require("./diagnostics");
|
|
62
62
|
const scan_codes_1 = require("./scan-codes");
|
|
63
|
+
const labels_1 = require("./labels");
|
|
63
64
|
const domain_context_1 = require("./domain-context");
|
|
64
65
|
const announcements_1 = require("./announcements");
|
|
65
66
|
let server = null;
|
|
@@ -91,6 +92,7 @@ async function createAdminServer(options) {
|
|
|
91
92
|
(0, overview_1.registerOverviewTools)(instance);
|
|
92
93
|
(0, diagnostics_1.registerDiagnosticsTools)(instance);
|
|
93
94
|
(0, scan_codes_1.registerScanCodeTools)(instance);
|
|
95
|
+
(0, labels_1.registerLabelTools)(instance);
|
|
94
96
|
(0, domain_context_1.registerDomainContextTools)(instance);
|
|
95
97
|
(0, announcements_1.registerAnnouncementTools)(instance);
|
|
96
98
|
logger_1.loggerRegistry.info(`[lt-mcp:admin] ${name} ready (${(0, registered_tools_1.registeredToolCount)(instance)} tools registered)`);
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const listLabelTemplatesSchema: z.ZodObject<{
|
|
3
|
+
scheme: z.ZodOptional<z.ZodNumber>;
|
|
4
|
+
}, "strip", z.ZodTypeAny, {
|
|
5
|
+
scheme?: number | undefined;
|
|
6
|
+
}, {
|
|
7
|
+
scheme?: number | undefined;
|
|
8
|
+
}>;
|
|
9
|
+
export declare const upsertLabelTemplateSchema: z.ZodObject<{
|
|
10
|
+
name: z.ZodString;
|
|
11
|
+
scheme_version: z.ZodNumber;
|
|
12
|
+
title: z.ZodString;
|
|
13
|
+
description: z.ZodOptional<z.ZodString>;
|
|
14
|
+
codes: z.ZodArray<z.ZodObject<{
|
|
15
|
+
category: z.ZodString;
|
|
16
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
17
|
+
tone: z.ZodEnum<["solid", "outline", "plain"]>;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
category: string;
|
|
20
|
+
tone: "solid" | "outline" | "plain";
|
|
21
|
+
caption?: string | undefined;
|
|
22
|
+
}, {
|
|
23
|
+
category: string;
|
|
24
|
+
tone: "solid" | "outline" | "plain";
|
|
25
|
+
caption?: string | undefined;
|
|
26
|
+
}>, "many">;
|
|
27
|
+
text: z.ZodOptional<z.ZodObject<{
|
|
28
|
+
title: z.ZodOptional<z.ZodString>;
|
|
29
|
+
lines: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
30
|
+
}, "strip", z.ZodTypeAny, {
|
|
31
|
+
title?: string | undefined;
|
|
32
|
+
lines?: string[] | undefined;
|
|
33
|
+
}, {
|
|
34
|
+
title?: string | undefined;
|
|
35
|
+
lines?: string[] | undefined;
|
|
36
|
+
}>>;
|
|
37
|
+
symbology: z.ZodOptional<z.ZodEnum<["code128", "qrcode", "datamatrix"]>>;
|
|
38
|
+
human_readable: z.ZodOptional<z.ZodBoolean>;
|
|
39
|
+
media: z.ZodOptional<z.ZodString>;
|
|
40
|
+
sensitive: z.ZodOptional<z.ZodBoolean>;
|
|
41
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
42
|
+
expected_revision: z.ZodOptional<z.ZodNumber>;
|
|
43
|
+
}, "strip", z.ZodTypeAny, {
|
|
44
|
+
name: string;
|
|
45
|
+
scheme_version: number;
|
|
46
|
+
title: string;
|
|
47
|
+
codes: {
|
|
48
|
+
category: string;
|
|
49
|
+
tone: "solid" | "outline" | "plain";
|
|
50
|
+
caption?: string | undefined;
|
|
51
|
+
}[];
|
|
52
|
+
enabled?: boolean | undefined;
|
|
53
|
+
text?: {
|
|
54
|
+
title?: string | undefined;
|
|
55
|
+
lines?: string[] | undefined;
|
|
56
|
+
} | undefined;
|
|
57
|
+
description?: string | undefined;
|
|
58
|
+
symbology?: "code128" | "qrcode" | "datamatrix" | undefined;
|
|
59
|
+
human_readable?: boolean | undefined;
|
|
60
|
+
media?: string | undefined;
|
|
61
|
+
sensitive?: boolean | undefined;
|
|
62
|
+
expected_revision?: number | undefined;
|
|
63
|
+
}, {
|
|
64
|
+
name: string;
|
|
65
|
+
scheme_version: number;
|
|
66
|
+
title: string;
|
|
67
|
+
codes: {
|
|
68
|
+
category: string;
|
|
69
|
+
tone: "solid" | "outline" | "plain";
|
|
70
|
+
caption?: string | undefined;
|
|
71
|
+
}[];
|
|
72
|
+
enabled?: boolean | undefined;
|
|
73
|
+
text?: {
|
|
74
|
+
title?: string | undefined;
|
|
75
|
+
lines?: string[] | undefined;
|
|
76
|
+
} | undefined;
|
|
77
|
+
description?: string | undefined;
|
|
78
|
+
symbology?: "code128" | "qrcode" | "datamatrix" | undefined;
|
|
79
|
+
human_readable?: boolean | undefined;
|
|
80
|
+
media?: string | undefined;
|
|
81
|
+
sensitive?: boolean | undefined;
|
|
82
|
+
expected_revision?: number | undefined;
|
|
83
|
+
}>;
|
|
84
|
+
export declare const deleteLabelTemplateSchema: z.ZodObject<{
|
|
85
|
+
name: z.ZodString;
|
|
86
|
+
}, "strip", z.ZodTypeAny, {
|
|
87
|
+
name: string;
|
|
88
|
+
}, {
|
|
89
|
+
name: string;
|
|
90
|
+
}>;
|
|
91
|
+
export declare const renderLabelSheetSchema: z.ZodObject<{
|
|
92
|
+
template: z.ZodString;
|
|
93
|
+
source: z.ZodUnion<[z.ZodObject<{
|
|
94
|
+
kind: z.ZodLiteral<"list">;
|
|
95
|
+
text: z.ZodString;
|
|
96
|
+
}, "strip", z.ZodTypeAny, {
|
|
97
|
+
kind: "list";
|
|
98
|
+
text: string;
|
|
99
|
+
}, {
|
|
100
|
+
kind: "list";
|
|
101
|
+
text: string;
|
|
102
|
+
}>, z.ZodObject<{
|
|
103
|
+
kind: z.ZodLiteral<"range">;
|
|
104
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
105
|
+
from: z.ZodNumber;
|
|
106
|
+
to: z.ZodNumber;
|
|
107
|
+
pad: z.ZodOptional<z.ZodNumber>;
|
|
108
|
+
suffix: z.ZodOptional<z.ZodString>;
|
|
109
|
+
}, "strip", z.ZodTypeAny, {
|
|
110
|
+
kind: "range";
|
|
111
|
+
from: number;
|
|
112
|
+
to: number;
|
|
113
|
+
prefix?: string | undefined;
|
|
114
|
+
suffix?: string | undefined;
|
|
115
|
+
pad?: number | undefined;
|
|
116
|
+
}, {
|
|
117
|
+
kind: "range";
|
|
118
|
+
from: number;
|
|
119
|
+
to: number;
|
|
120
|
+
prefix?: string | undefined;
|
|
121
|
+
suffix?: string | undefined;
|
|
122
|
+
pad?: number | undefined;
|
|
123
|
+
}>, z.ZodObject<{
|
|
124
|
+
kind: z.ZodLiteral<"escalations">;
|
|
125
|
+
ids: z.ZodArray<z.ZodString, "many">;
|
|
126
|
+
}, "strip", z.ZodTypeAny, {
|
|
127
|
+
kind: "escalations";
|
|
128
|
+
ids: string[];
|
|
129
|
+
}, {
|
|
130
|
+
kind: "escalations";
|
|
131
|
+
ids: string[];
|
|
132
|
+
}>, z.ZodObject<{
|
|
133
|
+
kind: z.ZodLiteral<"facets">;
|
|
134
|
+
query: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
135
|
+
}, "strip", z.ZodTypeAny, {
|
|
136
|
+
kind: "facets";
|
|
137
|
+
query: Record<string, any>;
|
|
138
|
+
}, {
|
|
139
|
+
kind: "facets";
|
|
140
|
+
query: Record<string, any>;
|
|
141
|
+
}>]>;
|
|
142
|
+
media: z.ZodOptional<z.ZodString>;
|
|
143
|
+
startPosition: z.ZodOptional<z.ZodNumber>;
|
|
144
|
+
copies: z.ZodOptional<z.ZodNumber>;
|
|
145
|
+
format: z.ZodEnum<["pdf", "zpl"]>;
|
|
146
|
+
}, "strip", z.ZodTypeAny, {
|
|
147
|
+
source: {
|
|
148
|
+
kind: "list";
|
|
149
|
+
text: string;
|
|
150
|
+
} | {
|
|
151
|
+
kind: "range";
|
|
152
|
+
from: number;
|
|
153
|
+
to: number;
|
|
154
|
+
prefix?: string | undefined;
|
|
155
|
+
suffix?: string | undefined;
|
|
156
|
+
pad?: number | undefined;
|
|
157
|
+
} | {
|
|
158
|
+
kind: "escalations";
|
|
159
|
+
ids: string[];
|
|
160
|
+
} | {
|
|
161
|
+
kind: "facets";
|
|
162
|
+
query: Record<string, any>;
|
|
163
|
+
};
|
|
164
|
+
format: "pdf" | "zpl";
|
|
165
|
+
template: string;
|
|
166
|
+
media?: string | undefined;
|
|
167
|
+
startPosition?: number | undefined;
|
|
168
|
+
copies?: number | undefined;
|
|
169
|
+
}, {
|
|
170
|
+
source: {
|
|
171
|
+
kind: "list";
|
|
172
|
+
text: string;
|
|
173
|
+
} | {
|
|
174
|
+
kind: "range";
|
|
175
|
+
from: number;
|
|
176
|
+
to: number;
|
|
177
|
+
prefix?: string | undefined;
|
|
178
|
+
suffix?: string | undefined;
|
|
179
|
+
pad?: number | undefined;
|
|
180
|
+
} | {
|
|
181
|
+
kind: "escalations";
|
|
182
|
+
ids: string[];
|
|
183
|
+
} | {
|
|
184
|
+
kind: "facets";
|
|
185
|
+
query: Record<string, any>;
|
|
186
|
+
};
|
|
187
|
+
format: "pdf" | "zpl";
|
|
188
|
+
template: string;
|
|
189
|
+
media?: string | undefined;
|
|
190
|
+
startPosition?: number | undefined;
|
|
191
|
+
copies?: number | undefined;
|
|
192
|
+
}>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderLabelSheetSchema = exports.deleteLabelTemplateSchema = exports.upsertLabelTemplateSchema = exports.listLabelTemplatesSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const tone = zod_1.z.enum(['solid', 'outline', 'plain']);
|
|
6
|
+
const symbology = zod_1.z.enum(['code128', 'qrcode', 'datamatrix']);
|
|
7
|
+
exports.listLabelTemplatesSchema = zod_1.z.object({
|
|
8
|
+
scheme: zod_1.z.number().int().optional().describe('Only templates for this scan scheme version'),
|
|
9
|
+
});
|
|
10
|
+
exports.upsertLabelTemplateSchema = zod_1.z.object({
|
|
11
|
+
name: zod_1.z.string().describe('Template id: lowercase letters, digits and dashes'),
|
|
12
|
+
scheme_version: zod_1.z.number().int().describe('The scan scheme whose codes the label prints'),
|
|
13
|
+
title: zod_1.z.string().describe('Display name in pickers'),
|
|
14
|
+
description: zod_1.z.string().optional(),
|
|
15
|
+
codes: zod_1.z.array(zod_1.z.object({
|
|
16
|
+
category: zod_1.z.string().describe('A rule category of the scheme, 0-9'),
|
|
17
|
+
caption: zod_1.z.string().optional().describe('The act printed beside the code; defaults to the rule name'),
|
|
18
|
+
tone: tone.describe('Caption band: solid (filled), outline, or plain'),
|
|
19
|
+
})).min(1).max(4),
|
|
20
|
+
text: zod_1.z.object({
|
|
21
|
+
title: zod_1.z.string().optional().describe('Largest line, in label tokens: {target}, {item.<facet>}, {user.<key>}, {scheme.name}'),
|
|
22
|
+
lines: zod_1.z.array(zod_1.z.string()).max(2).optional(),
|
|
23
|
+
}).optional(),
|
|
24
|
+
symbology: symbology.optional(),
|
|
25
|
+
human_readable: zod_1.z.boolean().optional().describe('Print the code as text under the symbol'),
|
|
26
|
+
media: zod_1.z.string().optional().describe('Default media preset id, e.g. a4-l7160'),
|
|
27
|
+
sensitive: zod_1.z.boolean().optional().describe('Ask for confirmation and record subjects when printing'),
|
|
28
|
+
enabled: zod_1.z.boolean().optional(),
|
|
29
|
+
expected_revision: zod_1.z.number().int().optional().describe('Write only if the stored revision matches'),
|
|
30
|
+
});
|
|
31
|
+
exports.deleteLabelTemplateSchema = zod_1.z.object({
|
|
32
|
+
name: zod_1.z.string(),
|
|
33
|
+
});
|
|
34
|
+
exports.renderLabelSheetSchema = zod_1.z.object({
|
|
35
|
+
template: zod_1.z.string().describe('Label template name'),
|
|
36
|
+
source: zod_1.z.union([
|
|
37
|
+
zod_1.z.object({ kind: zod_1.z.literal('list'), text: zod_1.z.string().describe('One target per line; a header row starting with "target" names {item.<column>} tokens') }),
|
|
38
|
+
zod_1.z.object({ kind: zod_1.z.literal('range'), prefix: zod_1.z.string().optional(), from: zod_1.z.number().int(), to: zod_1.z.number().int(), pad: zod_1.z.number().int().optional(), suffix: zod_1.z.string().optional() }),
|
|
39
|
+
zod_1.z.object({ kind: zod_1.z.literal('escalations'), ids: zod_1.z.array(zod_1.z.string()) }),
|
|
40
|
+
zod_1.z.object({ kind: zod_1.z.literal('facets'), query: zod_1.z.record(zod_1.z.string(), zod_1.z.any()).describe('A FacetQuery: role, facets, …') }),
|
|
41
|
+
]),
|
|
42
|
+
media: zod_1.z.string().optional().describe('Media preset id; defaults to the template media'),
|
|
43
|
+
startPosition: zod_1.z.number().int().optional(),
|
|
44
|
+
copies: zod_1.z.number().int().optional(),
|
|
45
|
+
format: zod_1.z.enum(['pdf', 'zpl']).describe('pdf for sheet stock, zpl for thermal media'),
|
|
46
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Label template and label sheet tools — mirrors routes/labels.ts
|
|
3
|
+
*
|
|
4
|
+
* render_label_sheet issues a sheet as the caller and stores it as a file
|
|
5
|
+
* with a short-lived link. It prints item labels only: identity templates
|
|
6
|
+
* (badges) are printed by people, with a confirmation, never by an agent.
|
|
7
|
+
*/
|
|
8
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
9
|
+
export declare function registerLabelTools(server: McpServer): void;
|