@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,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,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
|
+
}
|
package/build/api/users.d.ts
CHANGED
|
@@ -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
|
-
* @
|
|
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
|
package/build/api/users.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
* @
|
|
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
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
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.
|
|
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);
|