@synteq/cli 0.1.6 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/run.js +61 -2
- package/dist/api/client.d.ts +2 -1
- package/dist/api/client.js +1 -1
- package/dist/api/client.js.map +1 -1
- package/dist/api/factory.d.ts +3 -0
- package/dist/api/factory.js +1 -1
- package/dist/api/factory.js.map +1 -1
- package/dist/api/types.d.ts +4 -1
- package/dist/auth/scope.d.ts +19 -0
- package/dist/auth/scope.js +65 -0
- package/dist/auth/scope.js.map +1 -0
- package/dist/base/command.d.ts +1 -1
- package/dist/base/command.js +49 -0
- package/dist/base/command.js.map +1 -1
- package/dist/commands/account/index.d.ts +1 -0
- package/dist/commands/account/index.js +1 -0
- package/dist/commands/account/index.js.map +1 -1
- package/dist/commands/account/show.d.ts +1 -0
- package/dist/commands/account/show.js +1 -0
- package/dist/commands/account/show.js.map +1 -1
- package/dist/commands/api.d.ts +1 -0
- package/dist/commands/api.js +1 -0
- package/dist/commands/api.js.map +1 -1
- package/dist/commands/catalog.d.ts +1 -0
- package/dist/commands/catalog.js +5 -0
- package/dist/commands/catalog.js.map +1 -1
- package/dist/commands/config/index.d.ts +1 -0
- package/dist/commands/config/index.js +1 -0
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/set-api-url.d.ts +1 -0
- package/dist/commands/config/set-api-url.js +1 -0
- package/dist/commands/config/set-api-url.js.map +1 -1
- package/dist/commands/config/show.d.ts +1 -0
- package/dist/commands/config/show.js +1 -0
- package/dist/commands/config/show.js.map +1 -1
- package/dist/commands/credits/add.d.ts +1 -0
- package/dist/commands/credits/add.js +1 -0
- package/dist/commands/credits/add.js.map +1 -1
- package/dist/commands/credits/index.d.ts +1 -0
- package/dist/commands/credits/index.js +1 -0
- package/dist/commands/credits/index.js.map +1 -1
- package/dist/commands/credits/list.d.ts +1 -0
- package/dist/commands/credits/list.js +1 -0
- package/dist/commands/credits/list.js.map +1 -1
- package/dist/commands/gpu/activity.d.ts +1 -0
- package/dist/commands/gpu/activity.js +1 -0
- package/dist/commands/gpu/activity.js.map +1 -1
- package/dist/commands/gpu/bandwidth.d.ts +1 -0
- package/dist/commands/gpu/bandwidth.js +1 -0
- package/dist/commands/gpu/bandwidth.js.map +1 -1
- package/dist/commands/gpu/boot-order.d.ts +1 -0
- package/dist/commands/gpu/boot-order.js +1 -0
- package/dist/commands/gpu/boot-order.js.map +1 -1
- package/dist/commands/gpu/console.d.ts +1 -0
- package/dist/commands/gpu/console.js +1 -0
- package/dist/commands/gpu/console.js.map +1 -1
- package/dist/commands/gpu/details.d.ts +1 -0
- package/dist/commands/gpu/details.js +1 -0
- package/dist/commands/gpu/details.js.map +1 -1
- package/dist/commands/gpu/index.d.ts +1 -0
- package/dist/commands/gpu/index.js +1 -0
- package/dist/commands/gpu/index.js.map +1 -1
- package/dist/commands/gpu/ip/add.d.ts +1 -0
- package/dist/commands/gpu/ip/add.js +1 -0
- package/dist/commands/gpu/ip/add.js.map +1 -1
- package/dist/commands/gpu/ip/list.d.ts +1 -0
- package/dist/commands/gpu/ip/list.js +1 -0
- package/dist/commands/gpu/ip/list.js.map +1 -1
- package/dist/commands/gpu/list.d.ts +1 -0
- package/dist/commands/gpu/list.js +1 -0
- package/dist/commands/gpu/list.js.map +1 -1
- package/dist/commands/gpu/order.d.ts +1 -0
- package/dist/commands/gpu/order.js +1 -0
- package/dist/commands/gpu/order.js.map +1 -1
- package/dist/commands/gpu/power.d.ts +1 -0
- package/dist/commands/gpu/power.js +1 -0
- package/dist/commands/gpu/power.js.map +1 -1
- package/dist/commands/gpu/reinstall.d.ts +1 -0
- package/dist/commands/gpu/reinstall.js +1 -0
- package/dist/commands/gpu/reinstall.js.map +1 -1
- package/dist/commands/gpu/resize.d.ts +1 -0
- package/dist/commands/gpu/resize.js +1 -0
- package/dist/commands/gpu/resize.js.map +1 -1
- package/dist/commands/gpu/stats.d.ts +1 -0
- package/dist/commands/gpu/stats.js +1 -0
- package/dist/commands/gpu/stats.js.map +1 -1
- package/dist/commands/help.d.ts +2 -0
- package/dist/commands/help.js +5 -0
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/instant-metal/activity.d.ts +1 -0
- package/dist/commands/instant-metal/activity.js +1 -0
- package/dist/commands/instant-metal/activity.js.map +1 -1
- package/dist/commands/instant-metal/bandwidth.d.ts +1 -0
- package/dist/commands/instant-metal/bandwidth.js +1 -0
- package/dist/commands/instant-metal/bandwidth.js.map +1 -1
- package/dist/commands/instant-metal/boot-order.d.ts +1 -0
- package/dist/commands/instant-metal/boot-order.js +1 -0
- package/dist/commands/instant-metal/boot-order.js.map +1 -1
- package/dist/commands/instant-metal/console.d.ts +1 -0
- package/dist/commands/instant-metal/console.js +1 -0
- package/dist/commands/instant-metal/console.js.map +1 -1
- package/dist/commands/instant-metal/details.d.ts +1 -0
- package/dist/commands/instant-metal/details.js +1 -0
- package/dist/commands/instant-metal/details.js.map +1 -1
- package/dist/commands/instant-metal/index.d.ts +1 -0
- package/dist/commands/instant-metal/index.js +1 -0
- package/dist/commands/instant-metal/index.js.map +1 -1
- package/dist/commands/instant-metal/ip/add.d.ts +1 -0
- package/dist/commands/instant-metal/ip/add.js +1 -0
- package/dist/commands/instant-metal/ip/add.js.map +1 -1
- package/dist/commands/instant-metal/ip/list.d.ts +1 -0
- package/dist/commands/instant-metal/ip/list.js +1 -0
- package/dist/commands/instant-metal/ip/list.js.map +1 -1
- package/dist/commands/instant-metal/list.d.ts +1 -0
- package/dist/commands/instant-metal/list.js +1 -0
- package/dist/commands/instant-metal/list.js.map +1 -1
- package/dist/commands/instant-metal/order.d.ts +1 -0
- package/dist/commands/instant-metal/order.js +1 -0
- package/dist/commands/instant-metal/order.js.map +1 -1
- package/dist/commands/instant-metal/power.d.ts +1 -0
- package/dist/commands/instant-metal/power.js +1 -0
- package/dist/commands/instant-metal/power.js.map +1 -1
- package/dist/commands/instant-metal/reinstall.d.ts +1 -0
- package/dist/commands/instant-metal/reinstall.js +1 -0
- package/dist/commands/instant-metal/reinstall.js.map +1 -1
- package/dist/commands/instant-metal/resize.d.ts +1 -0
- package/dist/commands/instant-metal/resize.js +1 -0
- package/dist/commands/instant-metal/resize.js.map +1 -1
- package/dist/commands/instant-metal/stats.d.ts +1 -0
- package/dist/commands/instant-metal/stats.js +1 -0
- package/dist/commands/instant-metal/stats.js.map +1 -1
- package/dist/commands/login.d.ts +1 -0
- package/dist/commands/login.js +1 -0
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts +1 -0
- package/dist/commands/logout.js +1 -0
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/order/gpu.d.ts +1 -0
- package/dist/commands/order/gpu.js +1 -0
- package/dist/commands/order/gpu.js.map +1 -1
- package/dist/commands/order/instant-metal.d.ts +1 -0
- package/dist/commands/order/instant-metal.js +1 -0
- package/dist/commands/order/instant-metal.js.map +1 -1
- package/dist/commands/order/storage.d.ts +1 -0
- package/dist/commands/order/storage.js +1 -0
- package/dist/commands/order/storage.js.map +1 -1
- package/dist/commands/order/vps.d.ts +1 -0
- package/dist/commands/order/vps.js +1 -0
- package/dist/commands/order/vps.js.map +1 -1
- package/dist/commands/order.d.ts +1 -0
- package/dist/commands/order.js +1 -0
- package/dist/commands/order.js.map +1 -1
- package/dist/commands/os-images.d.ts +1 -0
- package/dist/commands/os-images.js +3 -0
- package/dist/commands/os-images.js.map +1 -1
- package/dist/commands/payments/index.d.ts +1 -0
- package/dist/commands/payments/index.js +1 -0
- package/dist/commands/payments/index.js.map +1 -1
- package/dist/commands/payments/methods/add.d.ts +1 -0
- package/dist/commands/payments/methods/add.js +1 -0
- package/dist/commands/payments/methods/add.js.map +1 -1
- package/dist/commands/payments/methods/delete.d.ts +1 -0
- package/dist/commands/payments/methods/delete.js +1 -0
- package/dist/commands/payments/methods/delete.js.map +1 -1
- package/dist/commands/payments/methods/index.d.ts +1 -0
- package/dist/commands/payments/methods/index.js +1 -0
- package/dist/commands/payments/methods/index.js.map +1 -1
- package/dist/commands/payments/methods/list.d.ts +1 -0
- package/dist/commands/payments/methods/list.js +1 -0
- package/dist/commands/payments/methods/list.js.map +1 -1
- package/dist/commands/payments/methods/set-default.d.ts +1 -0
- package/dist/commands/payments/methods/set-default.js +1 -0
- package/dist/commands/payments/methods/set-default.js.map +1 -1
- package/dist/commands/projects/index.d.ts +1 -0
- package/dist/commands/projects/index.js +1 -0
- package/dist/commands/projects/index.js.map +1 -1
- package/dist/commands/projects/list.d.ts +1 -0
- package/dist/commands/projects/list.js +1 -0
- package/dist/commands/projects/list.js.map +1 -1
- package/dist/commands/resources.d.ts +1 -0
- package/dist/commands/resources.js +11 -0
- package/dist/commands/resources.js.map +1 -1
- package/dist/commands/settings/index.d.ts +1 -0
- package/dist/commands/settings/index.js +1 -0
- package/dist/commands/settings/index.js.map +1 -1
- package/dist/commands/settings/render-mode.d.ts +1 -0
- package/dist/commands/settings/render-mode.js +1 -0
- package/dist/commands/settings/render-mode.js.map +1 -1
- package/dist/commands/ssh-key/add.d.ts +1 -0
- package/dist/commands/ssh-key/add.js +1 -0
- package/dist/commands/ssh-key/add.js.map +1 -1
- package/dist/commands/ssh-key/delete.d.ts +1 -0
- package/dist/commands/ssh-key/delete.js +1 -0
- package/dist/commands/ssh-key/delete.js.map +1 -1
- package/dist/commands/ssh-key/list.d.ts +1 -0
- package/dist/commands/ssh-key/list.js +1 -0
- package/dist/commands/ssh-key/list.js.map +1 -1
- package/dist/commands/storage/attach.d.ts +1 -0
- package/dist/commands/storage/attach.js +1 -0
- package/dist/commands/storage/attach.js.map +1 -1
- package/dist/commands/storage/detach.d.ts +1 -0
- package/dist/commands/storage/detach.js +1 -0
- package/dist/commands/storage/detach.js.map +1 -1
- package/dist/commands/storage/list.d.ts +1 -0
- package/dist/commands/storage/list.js +1 -0
- package/dist/commands/storage/list.js.map +1 -1
- package/dist/commands/storage/order.d.ts +1 -0
- package/dist/commands/storage/order.js +1 -0
- package/dist/commands/storage/order.js.map +1 -1
- package/dist/commands/storage/resize.d.ts +1 -0
- package/dist/commands/storage/resize.js +1 -0
- package/dist/commands/storage/resize.js.map +1 -1
- package/dist/commands/team/details.d.ts +1 -0
- package/dist/commands/team/details.js +1 -0
- package/dist/commands/team/details.js.map +1 -1
- package/dist/commands/team/invite.d.ts +1 -0
- package/dist/commands/team/invite.js +1 -0
- package/dist/commands/team/invite.js.map +1 -1
- package/dist/commands/team.d.ts +1 -0
- package/dist/commands/team.js +1 -0
- package/dist/commands/team.js.map +1 -1
- package/dist/commands/tickets/close.d.ts +1 -0
- package/dist/commands/tickets/close.js +1 -0
- package/dist/commands/tickets/close.js.map +1 -1
- package/dist/commands/tickets/create.d.ts +1 -0
- package/dist/commands/tickets/create.js +1 -0
- package/dist/commands/tickets/create.js.map +1 -1
- package/dist/commands/tickets/departments.d.ts +1 -0
- package/dist/commands/tickets/departments.js +1 -0
- package/dist/commands/tickets/departments.js.map +1 -1
- package/dist/commands/tickets/list.d.ts +1 -0
- package/dist/commands/tickets/list.js +1 -0
- package/dist/commands/tickets/list.js.map +1 -1
- package/dist/commands/tickets/open.d.ts +1 -0
- package/dist/commands/tickets/open.js +1 -0
- package/dist/commands/tickets/open.js.map +1 -1
- package/dist/commands/tickets/reopen.d.ts +11 -0
- package/dist/commands/tickets/reopen.js +34 -0
- package/dist/commands/tickets/reopen.js.map +1 -0
- package/dist/commands/tickets/reply.d.ts +1 -0
- package/dist/commands/tickets/reply.js +1 -0
- package/dist/commands/tickets/reply.js.map +1 -1
- package/dist/commands/transit.d.ts +1 -0
- package/dist/commands/transit.js +1 -0
- package/dist/commands/transit.js.map +1 -1
- package/dist/commands/tui/index.d.ts +1 -0
- package/dist/commands/tui/index.js +21 -0
- package/dist/commands/tui/index.js.map +1 -1
- package/dist/commands/vds/activity.d.ts +1 -0
- package/dist/commands/vds/activity.js +1 -0
- package/dist/commands/vds/activity.js.map +1 -1
- package/dist/commands/vds/bandwidth.d.ts +1 -0
- package/dist/commands/vds/bandwidth.js +1 -0
- package/dist/commands/vds/bandwidth.js.map +1 -1
- package/dist/commands/vds/boot-order.d.ts +1 -0
- package/dist/commands/vds/boot-order.js +1 -0
- package/dist/commands/vds/boot-order.js.map +1 -1
- package/dist/commands/vds/console.d.ts +1 -0
- package/dist/commands/vds/console.js +1 -0
- package/dist/commands/vds/console.js.map +1 -1
- package/dist/commands/vds/details.d.ts +1 -0
- package/dist/commands/vds/details.js +1 -0
- package/dist/commands/vds/details.js.map +1 -1
- package/dist/commands/vds/index.d.ts +1 -0
- package/dist/commands/vds/index.js +1 -0
- package/dist/commands/vds/index.js.map +1 -1
- package/dist/commands/vds/ip/add.d.ts +1 -0
- package/dist/commands/vds/ip/add.js +1 -0
- package/dist/commands/vds/ip/add.js.map +1 -1
- package/dist/commands/vds/ip/list.d.ts +1 -0
- package/dist/commands/vds/ip/list.js +1 -0
- package/dist/commands/vds/ip/list.js.map +1 -1
- package/dist/commands/vds/list.d.ts +1 -0
- package/dist/commands/vds/list.js +1 -0
- package/dist/commands/vds/list.js.map +1 -1
- package/dist/commands/vds/order.d.ts +1 -0
- package/dist/commands/vds/order.js +1 -0
- package/dist/commands/vds/order.js.map +1 -1
- package/dist/commands/vds/power.d.ts +1 -0
- package/dist/commands/vds/power.js +1 -0
- package/dist/commands/vds/power.js.map +1 -1
- package/dist/commands/vds/reinstall.d.ts +1 -0
- package/dist/commands/vds/reinstall.js +1 -0
- package/dist/commands/vds/reinstall.js.map +1 -1
- package/dist/commands/vds/resize.d.ts +1 -0
- package/dist/commands/vds/resize.js +1 -0
- package/dist/commands/vds/resize.js.map +1 -1
- package/dist/commands/vds/stats.d.ts +1 -0
- package/dist/commands/vds/stats.js +1 -0
- package/dist/commands/vds/stats.js.map +1 -1
- package/dist/commands/vps/activity.d.ts +1 -0
- package/dist/commands/vps/activity.js +1 -0
- package/dist/commands/vps/activity.js.map +1 -1
- package/dist/commands/vps/bandwidth.d.ts +1 -0
- package/dist/commands/vps/bandwidth.js +1 -0
- package/dist/commands/vps/bandwidth.js.map +1 -1
- package/dist/commands/vps/boot-order.d.ts +1 -0
- package/dist/commands/vps/boot-order.js +1 -0
- package/dist/commands/vps/boot-order.js.map +1 -1
- package/dist/commands/vps/console.d.ts +1 -0
- package/dist/commands/vps/console.js +1 -0
- package/dist/commands/vps/console.js.map +1 -1
- package/dist/commands/vps/details.d.ts +1 -0
- package/dist/commands/vps/details.js +1 -0
- package/dist/commands/vps/details.js.map +1 -1
- package/dist/commands/vps/ip/add.d.ts +1 -0
- package/dist/commands/vps/ip/add.js +1 -0
- package/dist/commands/vps/ip/add.js.map +1 -1
- package/dist/commands/vps/ip/list.d.ts +1 -0
- package/dist/commands/vps/ip/list.js +1 -0
- package/dist/commands/vps/ip/list.js.map +1 -1
- package/dist/commands/vps/list.d.ts +1 -0
- package/dist/commands/vps/list.js +1 -0
- package/dist/commands/vps/list.js.map +1 -1
- package/dist/commands/vps/order.d.ts +1 -0
- package/dist/commands/vps/order.js +1 -0
- package/dist/commands/vps/order.js.map +1 -1
- package/dist/commands/vps/power.d.ts +1 -0
- package/dist/commands/vps/power.js +1 -0
- package/dist/commands/vps/power.js.map +1 -1
- package/dist/commands/vps/reinstall.d.ts +1 -0
- package/dist/commands/vps/reinstall.js +1 -0
- package/dist/commands/vps/reinstall.js.map +1 -1
- package/dist/commands/vps/resize.d.ts +1 -0
- package/dist/commands/vps/resize.js +1 -0
- package/dist/commands/vps/resize.js.map +1 -1
- package/dist/commands/vps/stats.d.ts +1 -0
- package/dist/commands/vps/stats.js +1 -0
- package/dist/commands/vps/stats.js.map +1 -1
- package/dist/commands/whoami.d.ts +1 -0
- package/dist/commands/whoami.js +1 -0
- package/dist/commands/whoami.js.map +1 -1
- package/dist/help/help-filter.d.ts +10 -0
- package/dist/help/help-filter.js +9 -0
- package/dist/help/help-filter.js.map +1 -0
- package/dist/help/scope-aware-help.d.ts +30 -0
- package/dist/help/scope-aware-help.js +71 -0
- package/dist/help/scope-aware-help.js.map +1 -0
- package/dist/tui/App.js +1 -1
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/components/NumberInput.js +1 -1
- package/dist/tui/components/Sparkline.js +1 -1
- package/dist/tui/screens/Billing.js +10 -10
- package/dist/tui/screens/Billing.js.map +1 -1
- package/dist/tui/screens/Order.js +28 -28
- package/dist/tui/screens/Order.js.map +1 -1
- package/dist/tui/screens/Resources.js +4 -4
- package/dist/tui/screens/Resources.js.map +1 -1
- package/dist/tui/screens/Tickets.js +31 -22
- package/dist/tui/screens/Tickets.js.map +1 -1
- package/dist/version-check-bin.d.ts +35 -0
- package/dist/version-check-bin.js +123 -0
- package/dist/version-check-bin.js.map +1 -0
- package/dist/version-check.d.ts +39 -0
- package/dist/version-check.js +148 -0
- package/dist/version-check.js.map +1 -0
- package/package.json +11 -3
|
@@ -8,6 +8,7 @@ import { Tip } from "../components/Tip.js";
|
|
|
8
8
|
import { Spinner } from "../components/Spinner.js";
|
|
9
9
|
import { ActionButton } from "../components/ActionButton.js";
|
|
10
10
|
import { BackButton } from "../components/BackButton.js";
|
|
11
|
+
import { Clickable } from "../components/Clickable.js";
|
|
11
12
|
import { ConfirmModal } from "../components/ConfirmModal.js";
|
|
12
13
|
import { useApi } from "../hooks/useApi.js";
|
|
13
14
|
import { useHeader } from "../hooks/useHeader.js";
|
|
@@ -102,7 +103,10 @@ export function Tickets() {
|
|
|
102
103
|
} }));
|
|
103
104
|
}
|
|
104
105
|
else {
|
|
105
|
-
body = (React.createElement(TicketList, { tickets: visible, loading: loading, error: error, cursor: cursor, statusFilter: statusFilter, onHover: setCursor, onOpen: (id) => setMode({ kind: "detail", id })
|
|
106
|
+
body = (React.createElement(TicketList, { tickets: visible, loading: loading, error: error, cursor: cursor, statusFilter: statusFilter, onHover: setCursor, onOpen: (id) => setMode({ kind: "detail", id }), onFilter: (v) => {
|
|
107
|
+
setStatusFilter(v);
|
|
108
|
+
setCursor(0);
|
|
109
|
+
}, onNew: () => setMode({ kind: "create" }), onRefresh: load }));
|
|
106
110
|
}
|
|
107
111
|
return (React.createElement(CenteredFrame, { fullHeight: true, maxWidth: 120 },
|
|
108
112
|
React.createElement(Box, { paddingX: 2, flexShrink: 0 },
|
|
@@ -116,43 +120,48 @@ export function Tickets() {
|
|
|
116
120
|
header.userEmail ?? "",
|
|
117
121
|
].filter(Boolean) }))));
|
|
118
122
|
}
|
|
119
|
-
function TicketList({ tickets, loading, error, cursor, statusFilter, onHover, onOpen, }) {
|
|
123
|
+
function TicketList({ tickets, loading, error, cursor, statusFilter, onHover, onOpen, onFilter, onNew, onRefresh, }) {
|
|
120
124
|
return (React.createElement(Box, { flexDirection: "column" },
|
|
121
125
|
React.createElement(Box, { marginBottom: 1 }, STATUS_FILTERS.map((f, i) => {
|
|
122
126
|
const active = f.value === statusFilter;
|
|
123
|
-
return (React.createElement(
|
|
127
|
+
return (React.createElement(Clickable, { key: f.value, fitContent: true, onClick: () => onFilter(f.value) },
|
|
128
|
+
React.createElement(Text, { color: active ? colors.accent : colors.dim }, `${i > 0 ? " " : ""}${i + 1} ${f.label}${active ? " ●" : ""}`)));
|
|
124
129
|
})),
|
|
125
130
|
React.createElement(Panel, { title: "Your tickets", paddingX: 2, paddingY: 1 }, loading ? (React.createElement(Spinner, { label: "Loading tickets\u2026" })) : error ? (React.createElement(Text, { color: colors.error }, error)) : tickets.length === 0 ? (React.createElement(Text, { color: colors.dim }, statusFilter === "all"
|
|
126
131
|
? "No tickets yet. Press n to open your first one."
|
|
127
132
|
: "No tickets with that status.")) : (React.createElement(Box, { flexDirection: "column" }, tickets.map((t, i) => (React.createElement(TicketRow, { key: t.id, ticket: t, focused: i === cursor, onHover: () => onHover(i), onClick: () => onOpen(t.id) })))))),
|
|
128
133
|
React.createElement(Box, { marginTop: 1 },
|
|
129
|
-
React.createElement(ActionButton, { keybind: "n", label: "New ticket", onPress:
|
|
134
|
+
React.createElement(ActionButton, { keybind: "n", label: "New ticket", onPress: onNew }),
|
|
130
135
|
React.createElement(Box, { marginLeft: 1 }),
|
|
131
|
-
React.createElement(ActionButton, { keybind: "r", label: "Refresh", onPress:
|
|
136
|
+
React.createElement(ActionButton, { keybind: "r", label: "Refresh", onPress: onRefresh }))));
|
|
132
137
|
}
|
|
133
138
|
function TicketRow({ ticket, focused, onHover, onClick, }) {
|
|
134
139
|
const marker = focused ? `${glyphs.chevronRight} ` : " ";
|
|
135
|
-
return (React.createElement(
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
React.createElement(
|
|
142
|
-
|
|
143
|
-
React.createElement(Text, { color:
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
140
|
+
return (React.createElement(Clickable, { onClick: onClick, onHover: (entering) => {
|
|
141
|
+
if (entering)
|
|
142
|
+
onHover();
|
|
143
|
+
} },
|
|
144
|
+
React.createElement(Box, null,
|
|
145
|
+
React.createElement(Text, { color: focused ? colors.accent : colors.dim }, marker),
|
|
146
|
+
React.createElement(Box, { width: 7 },
|
|
147
|
+
React.createElement(Text, { color: colors.dim }, `#${ticket.display_id}`)),
|
|
148
|
+
ticket.is_unread ? (React.createElement(Text, { color: colors.accent }, "● ")) : (React.createElement(Text, null, " ")),
|
|
149
|
+
React.createElement(Box, { width: 44 },
|
|
150
|
+
React.createElement(Text, { bold: focused || ticket.is_unread, color: focused ? colors.accent : colors.text, wrap: "truncate-end" }, ticket.subject)),
|
|
151
|
+
React.createElement(Box, { width: 18 },
|
|
152
|
+
React.createElement(Text, { color: statusColor(ticket.status) ?? colors.dim }, ticket.status.replace(/_/g, " "))),
|
|
153
|
+
React.createElement(Box, { width: 12 },
|
|
154
|
+
React.createElement(Text, { color: priorityColor(ticket.priority) }, ticket.priority)),
|
|
155
|
+
React.createElement(Text, { color: colors.dim }, shortDate(ticket.last_message_at)))));
|
|
147
156
|
}
|
|
148
157
|
function TicketDetail({ ticketId, onBack, }) {
|
|
149
158
|
const api = useApi();
|
|
150
|
-
useMousePause(true);
|
|
151
159
|
const [ticket, setTicket] = useState(null);
|
|
152
160
|
const [messages, setMessages] = useState(null);
|
|
153
161
|
const [error, setError] = useState(null);
|
|
154
162
|
const [reply, setReply] = useState("");
|
|
155
163
|
const [replyFocused, setReplyFocused] = useState(false);
|
|
164
|
+
useMousePause(replyFocused);
|
|
156
165
|
const [sending, setSending] = useState(false);
|
|
157
166
|
const [notice, setNotice] = useState(null);
|
|
158
167
|
const [confirmClose, setConfirmClose] = useState(false);
|
|
@@ -277,8 +286,8 @@ function TicketDetail({ ticketId, onBack, }) {
|
|
|
277
286
|
}
|
|
278
287
|
function TicketCreate({ onDone, }) {
|
|
279
288
|
const api = useApi();
|
|
280
|
-
useMousePause(true);
|
|
281
289
|
const [step, setStep] = useState("department");
|
|
290
|
+
useMousePause(step === "subject" || step === "message");
|
|
282
291
|
const [departments, setDepartments] = useState(null);
|
|
283
292
|
const [department, setDepartment] = useState("");
|
|
284
293
|
const [subject, setSubject] = useState("");
|
|
@@ -337,14 +346,14 @@ function TicketCreate({ onDone, }) {
|
|
|
337
346
|
label: d.name,
|
|
338
347
|
hint: d.key,
|
|
339
348
|
}));
|
|
340
|
-
return (React.createElement(Panel, { title: "New ticket
|
|
349
|
+
return (React.createElement(Panel, { title: "New ticket - which department?", paddingX: 2, paddingY: 1 },
|
|
341
350
|
React.createElement(Menu, { items: items, onSelect: (v) => {
|
|
342
351
|
setDepartment(v);
|
|
343
352
|
setStep("subject");
|
|
344
353
|
} })));
|
|
345
354
|
}
|
|
346
355
|
if (step === "subject") {
|
|
347
|
-
return (React.createElement(Panel, { title: "New ticket
|
|
356
|
+
return (React.createElement(Panel, { title: "New ticket - subject", paddingX: 2, paddingY: 1 },
|
|
348
357
|
React.createElement(Box, null,
|
|
349
358
|
React.createElement(Text, { color: colors.dim }, "Subject "),
|
|
350
359
|
React.createElement(TextInput, { value: subject, onChange: setSubject, onSubmit: (v) => {
|
|
@@ -355,7 +364,7 @@ function TicketCreate({ onDone, }) {
|
|
|
355
364
|
React.createElement(Text, { color: colors.dim }, "Enter to continue \u00B7 Esc to cancel."))));
|
|
356
365
|
}
|
|
357
366
|
if (step === "message") {
|
|
358
|
-
return (React.createElement(Panel, { title: "New ticket
|
|
367
|
+
return (React.createElement(Panel, { title: "New ticket - message", paddingX: 2, paddingY: 1 },
|
|
359
368
|
React.createElement(Box, null,
|
|
360
369
|
React.createElement(Text, { color: colors.dim }, "Message "),
|
|
361
370
|
React.createElement(TextInput, { value: message, onChange: setMessage, onSubmit: (v) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tickets.js","sourceRoot":"","sources":["../../../src/tui/screens/Tickets.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tickets.js","sourceRoot":"","sources":["../../../src/tui/screens/Tickets.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { CLI_VERSION } from "./api/client.js";
|
|
2
|
+
import { VERSION_CHECK_EXEMPT } from "./version-check.js";
|
|
3
|
+
export { VERSION_CHECK_EXEMPT, CLI_VERSION };
|
|
4
|
+
export declare function minVersionCachePath(): string;
|
|
5
|
+
/** True when SYNTEQ_SKIP_VERSION_CHECK=1 — mirrors the check in
|
|
6
|
+
* version-check.ts's loadOrFetchMinVersion (F2a). */
|
|
7
|
+
export declare function isSkipEnvSet(): boolean;
|
|
8
|
+
/** Does this argv invocation resolve to a VERSION_CHECK_EXEMPT command?
|
|
9
|
+
* (F2b/F2c)
|
|
10
|
+
*
|
|
11
|
+
* Two drift bugs this fixes relative to the old inline bin logic:
|
|
12
|
+
* - F2b (colon form): oclif accepts both `settings render-mode` and
|
|
13
|
+
* `settings:render-mode`. VERSION_CHECK_EXEMPT already lists both the
|
|
14
|
+
* bare topic ("settings") and the colon form ("settings:render-mode"),
|
|
15
|
+
* so testing each token both as-is AND split on ":" (topic-only) covers
|
|
16
|
+
* `settings`, `settings:render-mode`, and `settings render-mode` (two
|
|
17
|
+
* separate tokens, "settings" alone already matches).
|
|
18
|
+
* - F2c (flag-value false match): the old code took "the first non-flag
|
|
19
|
+
* token" as THE command, so `synteq -o json login` saw "json" first and
|
|
20
|
+
* never reached "login". Scanning ALL non-flag tokens for ANY exempt
|
|
21
|
+
* match is simpler and robust — login/logout/settings are commands here,
|
|
22
|
+
* never legitimate flag values in this CLI's grammar, so a false
|
|
23
|
+
* positive would require a flag value that's literally the string
|
|
24
|
+
* "login"/"logout"/"settings" — an acceptable, documented trade-off
|
|
25
|
+
* favoring "recovery command wrongly let through" over "recovery
|
|
26
|
+
* command wrongly blocked".
|
|
27
|
+
*/
|
|
28
|
+
export declare function isExemptFromVersionCheck(argv: readonly string[]): boolean;
|
|
29
|
+
/** The single entry point bin/run.js calls. Returns the upgrade message to
|
|
30
|
+
* print (caller writes to stderr + exit 4), or null to proceed normally.
|
|
31
|
+
* Never throws — every failure mode (skip-env, exempt command, missing/
|
|
32
|
+
* corrupt/stale cache, invalid semver) resolves to null, i.e. fail-open,
|
|
33
|
+
* except the one case that's supposed to block: a validly-cached,
|
|
34
|
+
* unexpired min_version that's genuinely newer than CLI_VERSION. */
|
|
35
|
+
export declare function checkOutdatedFromCacheForBin(argv: readonly string[]): string | null;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// Shared shim consumed by bin/run.js (compiled to dist/version-check-bin.js).
|
|
2
|
+
//
|
|
3
|
+
// bin/run.js needs to answer "is this invocation outdated?" from the
|
|
4
|
+
// cache file alone, synchronously, BEFORE oclif boots — no network call,
|
|
5
|
+
// no command-class introspection. That's a materially different job than
|
|
6
|
+
// version-check.ts's guardCliVersion() (which runs inside a live command
|
|
7
|
+
// with a resolved ApiClient and cmdId). This module exists so the bin-level
|
|
8
|
+
// answer reuses the SAME exempt set, comparator, cache-path resolver, and
|
|
9
|
+
// skip-env check as the module — no second copy to drift out of sync.
|
|
10
|
+
//
|
|
11
|
+
// bin/run.js can safely import from dist/ because package.json's
|
|
12
|
+
// oclif.commands / oclif.helpClass already point at ./dist/*, meaning
|
|
13
|
+
// dist/ must exist for the CLI to run at all in production. The separate
|
|
14
|
+
// bin/dev.js (ts-node) path never touches this file.
|
|
15
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
16
|
+
import { join } from "node:path";
|
|
17
|
+
import * as semver from "semver";
|
|
18
|
+
import { CLI_VERSION } from "./api/client.js";
|
|
19
|
+
import { configDir } from "./config/paths.js";
|
|
20
|
+
import { VERSION_CHECK_EXEMPT, stripControlChars } from "./version-check.js";
|
|
21
|
+
export { VERSION_CHECK_EXEMPT, CLI_VERSION };
|
|
22
|
+
export function minVersionCachePath() {
|
|
23
|
+
return join(configDir(), "min-version.json");
|
|
24
|
+
}
|
|
25
|
+
/** True when SYNTEQ_SKIP_VERSION_CHECK=1 — mirrors the check in
|
|
26
|
+
* version-check.ts's loadOrFetchMinVersion (F2a). */
|
|
27
|
+
export function isSkipEnvSet() {
|
|
28
|
+
return process.env.SYNTEQ_SKIP_VERSION_CHECK === "1";
|
|
29
|
+
}
|
|
30
|
+
/** Does this argv invocation resolve to a VERSION_CHECK_EXEMPT command?
|
|
31
|
+
* (F2b/F2c)
|
|
32
|
+
*
|
|
33
|
+
* Two drift bugs this fixes relative to the old inline bin logic:
|
|
34
|
+
* - F2b (colon form): oclif accepts both `settings render-mode` and
|
|
35
|
+
* `settings:render-mode`. VERSION_CHECK_EXEMPT already lists both the
|
|
36
|
+
* bare topic ("settings") and the colon form ("settings:render-mode"),
|
|
37
|
+
* so testing each token both as-is AND split on ":" (topic-only) covers
|
|
38
|
+
* `settings`, `settings:render-mode`, and `settings render-mode` (two
|
|
39
|
+
* separate tokens, "settings" alone already matches).
|
|
40
|
+
* - F2c (flag-value false match): the old code took "the first non-flag
|
|
41
|
+
* token" as THE command, so `synteq -o json login` saw "json" first and
|
|
42
|
+
* never reached "login". Scanning ALL non-flag tokens for ANY exempt
|
|
43
|
+
* match is simpler and robust — login/logout/settings are commands here,
|
|
44
|
+
* never legitimate flag values in this CLI's grammar, so a false
|
|
45
|
+
* positive would require a flag value that's literally the string
|
|
46
|
+
* "login"/"logout"/"settings" — an acceptable, documented trade-off
|
|
47
|
+
* favoring "recovery command wrongly let through" over "recovery
|
|
48
|
+
* command wrongly blocked".
|
|
49
|
+
*/
|
|
50
|
+
export function isExemptFromVersionCheck(argv) {
|
|
51
|
+
for (let i = 2; i < argv.length; i++) {
|
|
52
|
+
const arg = argv[i];
|
|
53
|
+
if (!arg || arg.startsWith("-"))
|
|
54
|
+
continue;
|
|
55
|
+
if (VERSION_CHECK_EXEMPT.has(arg))
|
|
56
|
+
return true;
|
|
57
|
+
const topic = arg.split(":")[0];
|
|
58
|
+
if (topic && VERSION_CHECK_EXEMPT.has(topic))
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
/** Read + validate the on-disk cache. Fails open (returns null) on any
|
|
64
|
+
* parse error, missing/wrong-typed fields, staleness, clock skew, or
|
|
65
|
+
* invalid semver in min_version (F5-cli) — never throws. */
|
|
66
|
+
function readMinVersionCacheForBin(cachePath) {
|
|
67
|
+
if (!existsSync(cachePath))
|
|
68
|
+
return null;
|
|
69
|
+
try {
|
|
70
|
+
const parsed = JSON.parse(readFileSync(cachePath, "utf8"));
|
|
71
|
+
if (typeof parsed?.min_version !== "string" || typeof parsed?.fetched_at !== "number")
|
|
72
|
+
return null;
|
|
73
|
+
if (!semver.valid(parsed.min_version))
|
|
74
|
+
return null; // corrupt/overflowed → fail open
|
|
75
|
+
const now = Date.now();
|
|
76
|
+
if (now - parsed.fetched_at > 6 * 60 * 60 * 1000)
|
|
77
|
+
return null; // stale (6h TTL)
|
|
78
|
+
if (now - parsed.fetched_at < 0)
|
|
79
|
+
return null; // clock went backward
|
|
80
|
+
return {
|
|
81
|
+
min: parsed.min_version,
|
|
82
|
+
msg: typeof parsed.deprecated_message === "string" ? parsed.deprecated_message : null,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function buildOutdatedMessage(min, deprecatedMessage) {
|
|
90
|
+
const lines = [
|
|
91
|
+
`synteq: this CLI (v${CLI_VERSION}) is older than the portal's required minimum (v${min}).`,
|
|
92
|
+
`Upgrade with: npm i -g @synteq/cli`,
|
|
93
|
+
];
|
|
94
|
+
if (deprecatedMessage) {
|
|
95
|
+
lines.push("");
|
|
96
|
+
lines.push(stripControlChars(deprecatedMessage));
|
|
97
|
+
}
|
|
98
|
+
return lines.join("\n");
|
|
99
|
+
}
|
|
100
|
+
/** The single entry point bin/run.js calls. Returns the upgrade message to
|
|
101
|
+
* print (caller writes to stderr + exit 4), or null to proceed normally.
|
|
102
|
+
* Never throws — every failure mode (skip-env, exempt command, missing/
|
|
103
|
+
* corrupt/stale cache, invalid semver) resolves to null, i.e. fail-open,
|
|
104
|
+
* except the one case that's supposed to block: a validly-cached,
|
|
105
|
+
* unexpired min_version that's genuinely newer than CLI_VERSION. */
|
|
106
|
+
export function checkOutdatedFromCacheForBin(argv) {
|
|
107
|
+
if (isSkipEnvSet())
|
|
108
|
+
return null;
|
|
109
|
+
if (isExemptFromVersionCheck(argv))
|
|
110
|
+
return null;
|
|
111
|
+
const cache = readMinVersionCacheForBin(minVersionCachePath());
|
|
112
|
+
if (!cache)
|
|
113
|
+
return null;
|
|
114
|
+
try {
|
|
115
|
+
if (!semver.lt(CLI_VERSION, cache.min))
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return null; // fail open on any comparator surprise (F5-cli)
|
|
120
|
+
}
|
|
121
|
+
return buildOutdatedMessage(cache.min, cache.msg);
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=version-check-bin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-check-bin.js","sourceRoot":"","sources":["../src/version-check-bin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ApiClient } from "./api/client.js";
|
|
2
|
+
export declare const VERSION_CHECK_CACHE_TTL_MS: number;
|
|
3
|
+
/** Commands that MUST work even when the local CLI is outdated. Keep tight:
|
|
4
|
+
* login/logout so users can complete a re-auth if upgrade requires it;
|
|
5
|
+
* settings so users can inspect the state they're stuck in. Nothing else. */
|
|
6
|
+
export declare const VERSION_CHECK_EXEMPT: ReadonlySet<string>;
|
|
7
|
+
export interface MinVersionInfo {
|
|
8
|
+
minVersion: string;
|
|
9
|
+
deprecatedMessage: string | null;
|
|
10
|
+
fetchedAt: number;
|
|
11
|
+
}
|
|
12
|
+
/** Fetch the min-version record. Returns null when we couldn't get one AND
|
|
13
|
+
* had no stale cache to fall back on — the caller MUST treat null as
|
|
14
|
+
* "unknown, allow through" per the spec's fail-open error handling. */
|
|
15
|
+
export declare function loadOrFetchMinVersion(api: Pick<ApiClient, "auth"> | {
|
|
16
|
+
auth: {
|
|
17
|
+
minCliVersion: () => Promise<{
|
|
18
|
+
min_cli_version: string;
|
|
19
|
+
deprecated_message: string | null;
|
|
20
|
+
}>;
|
|
21
|
+
};
|
|
22
|
+
}, cacheFilePath?: string): Promise<MinVersionInfo | null>;
|
|
23
|
+
export declare function isCliOutdated(current: string, min: string): boolean;
|
|
24
|
+
/** Strip C0/C1 control characters (except newline) and bidi-override
|
|
25
|
+
* codepoints from a string. Defence-in-depth for `deprecatedMessage`,
|
|
26
|
+
* which originates as unauthenticated, admin-free-text server input
|
|
27
|
+
* (`GET /auth/device/version`) and is printed raw to the user's terminal.
|
|
28
|
+
* The backend sanitizes on write (see `text_sanitize.py`); this is a
|
|
29
|
+
* second, independent line of defence on the print path in case that
|
|
30
|
+
* ever regresses or a stale cache from before the backend fix lingers
|
|
31
|
+
* on disk. Shared by `formatUpgradeMessage` here and the bin-level shim
|
|
32
|
+
* (`version-check-bin.ts`) so both print paths agree. */
|
|
33
|
+
export declare function stripControlChars(s: string): string;
|
|
34
|
+
export declare function formatUpgradeMessage(current: string, min: string, deprecatedMessage: string | null, binName: string): string;
|
|
35
|
+
export interface GuardResult {
|
|
36
|
+
outdated: boolean;
|
|
37
|
+
message?: string;
|
|
38
|
+
}
|
|
39
|
+
export declare function guardCliVersion(api: Pick<ApiClient, "auth">, cmdId: string, binName: string, cacheFilePath?: string): Promise<GuardResult>;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, renameSync, mkdirSync, chmodSync } from "node:fs";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import * as semver from "semver";
|
|
5
|
+
import { CLI_VERSION } from "./api/client.js";
|
|
6
|
+
import { configDir } from "./config/paths.js";
|
|
7
|
+
export const VERSION_CHECK_CACHE_TTL_MS = 6 * 60 * 60 * 1000;
|
|
8
|
+
/** Commands that MUST work even when the local CLI is outdated. Keep tight:
|
|
9
|
+
* login/logout so users can complete a re-auth if upgrade requires it;
|
|
10
|
+
* settings so users can inspect the state they're stuck in. Nothing else. */
|
|
11
|
+
export const VERSION_CHECK_EXEMPT = new Set([
|
|
12
|
+
"login",
|
|
13
|
+
"logout",
|
|
14
|
+
"settings",
|
|
15
|
+
"settings:render-mode",
|
|
16
|
+
"settings:index", // topic index
|
|
17
|
+
]);
|
|
18
|
+
function defaultCacheFile() {
|
|
19
|
+
return join(configDir(), "min-version.json");
|
|
20
|
+
}
|
|
21
|
+
function readCache(cacheFilePath) {
|
|
22
|
+
if (!existsSync(cacheFilePath))
|
|
23
|
+
return null;
|
|
24
|
+
try {
|
|
25
|
+
const parsed = JSON.parse(readFileSync(cacheFilePath, "utf8"));
|
|
26
|
+
if (typeof parsed?.min_version !== "string" || typeof parsed?.fetched_at !== "number")
|
|
27
|
+
return null;
|
|
28
|
+
// F5: the backend's regex + max_length historically admitted values
|
|
29
|
+
// semver.lt() throws on (e.g. overflowing MAX_SAFE_INTEGER), and a
|
|
30
|
+
// hand-edited or older-format cache file can carry a non-semver string
|
|
31
|
+
// ("1.0"). Drop the entry rather than let a corrupt/overflowed cache
|
|
32
|
+
// crash the guard later — fail open, same as a missing cache.
|
|
33
|
+
if (!semver.valid(parsed.min_version))
|
|
34
|
+
return null;
|
|
35
|
+
return {
|
|
36
|
+
minVersion: parsed.min_version,
|
|
37
|
+
deprecatedMessage: typeof parsed.deprecated_message === "string" ? parsed.deprecated_message : null,
|
|
38
|
+
fetchedAt: parsed.fetched_at,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function writeCacheAtomic(cacheFilePath, info) {
|
|
46
|
+
const dir = dirname(cacheFilePath);
|
|
47
|
+
if (!existsSync(dir))
|
|
48
|
+
mkdirSync(dir, { recursive: true });
|
|
49
|
+
// randomUUID suffix (in addition to pid) avoids a collision if the pid is
|
|
50
|
+
// reused (common in containers) while a prior write's tmp file lingers.
|
|
51
|
+
const tmp = `${cacheFilePath}.tmp.${process.pid}.${randomUUID()}`;
|
|
52
|
+
writeFileSync(tmp, JSON.stringify({
|
|
53
|
+
min_version: info.minVersion,
|
|
54
|
+
deprecated_message: info.deprecatedMessage,
|
|
55
|
+
fetched_at: info.fetchedAt,
|
|
56
|
+
}), { mode: 0o600 });
|
|
57
|
+
// Match TokenStore's belt-and-suspenders pattern (src/auth/tokens.ts) —
|
|
58
|
+
// explicit chmod in case the platform/umask ignored the writeFileSync mode.
|
|
59
|
+
chmodSync(tmp, 0o600);
|
|
60
|
+
renameSync(tmp, cacheFilePath);
|
|
61
|
+
}
|
|
62
|
+
/** Fetch the min-version record. Returns null when we couldn't get one AND
|
|
63
|
+
* had no stale cache to fall back on — the caller MUST treat null as
|
|
64
|
+
* "unknown, allow through" per the spec's fail-open error handling. */
|
|
65
|
+
export async function loadOrFetchMinVersion(api, cacheFilePath = defaultCacheFile()) {
|
|
66
|
+
if (process.env.SYNTEQ_SKIP_VERSION_CHECK === "1")
|
|
67
|
+
return null;
|
|
68
|
+
const cached = readCache(cacheFilePath);
|
|
69
|
+
const now = Date.now();
|
|
70
|
+
if (cached && now - cached.fetchedAt < VERSION_CHECK_CACHE_TTL_MS && now - cached.fetchedAt >= 0) {
|
|
71
|
+
return cached;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const resp = await api.auth.minCliVersion();
|
|
75
|
+
const info = {
|
|
76
|
+
minVersion: resp.min_cli_version,
|
|
77
|
+
deprecatedMessage: resp.deprecated_message ?? null,
|
|
78
|
+
fetchedAt: now,
|
|
79
|
+
};
|
|
80
|
+
writeCacheAtomic(cacheFilePath, info);
|
|
81
|
+
return info;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Network / non-2xx / parse failure. Stale cache beats blocking the user.
|
|
85
|
+
return cached ?? null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export function isCliOutdated(current, min) {
|
|
89
|
+
return semver.lt(current, min);
|
|
90
|
+
}
|
|
91
|
+
/** Strip C0/C1 control characters (except newline) and bidi-override
|
|
92
|
+
* codepoints from a string. Defence-in-depth for `deprecatedMessage`,
|
|
93
|
+
* which originates as unauthenticated, admin-free-text server input
|
|
94
|
+
* (`GET /auth/device/version`) and is printed raw to the user's terminal.
|
|
95
|
+
* The backend sanitizes on write (see `text_sanitize.py`); this is a
|
|
96
|
+
* second, independent line of defence on the print path in case that
|
|
97
|
+
* ever regresses or a stale cache from before the backend fix lingers
|
|
98
|
+
* on disk. Shared by `formatUpgradeMessage` here and the bin-level shim
|
|
99
|
+
* (`version-check-bin.ts`) so both print paths agree. */
|
|
100
|
+
export function stripControlChars(s) {
|
|
101
|
+
// C0 controls (\x00-\x1F) except \n (\x0A), plus DEL (\x7F), plus C1
|
|
102
|
+
// controls (\x80-\x9F), plus Unicode bidi override/embedding/isolate
|
|
103
|
+
// control codepoints (U+200E-U+200F, U+202A-U+202E, U+2066-U+2069).
|
|
104
|
+
// eslint-disable-next-line no-control-regex
|
|
105
|
+
return s.replace(/[\x00-\x09\x0B-\x1F\x7F-\x9F\u200e\u200f\u202a-\u202e\u2066-\u2069]/g, "");
|
|
106
|
+
}
|
|
107
|
+
export function formatUpgradeMessage(current, min, deprecatedMessage, binName) {
|
|
108
|
+
const lines = [
|
|
109
|
+
`${binName}: this CLI (v${current}) is older than the portal's required minimum (v${min}).`,
|
|
110
|
+
`Upgrade with: npm i -g @synteq/cli`,
|
|
111
|
+
];
|
|
112
|
+
if (deprecatedMessage) {
|
|
113
|
+
lines.push("");
|
|
114
|
+
lines.push(stripControlChars(deprecatedMessage));
|
|
115
|
+
}
|
|
116
|
+
// Deliberately NOT advertising SYNTEQ_SKIP_VERSION_CHECK here: telling every
|
|
117
|
+
// blocked user to bypass the gate defeats it and produces broken requests
|
|
118
|
+
// against a portal their CLI no longer matches. The env var still works and
|
|
119
|
+
// is documented for tests/support in cli/CLAUDE.md — it just isn't surfaced
|
|
120
|
+
// in the user-facing block. Keep this in sync with buildOutdatedMessage in
|
|
121
|
+
// version-check-bin.ts (which likewise omits it).
|
|
122
|
+
return lines.join("\n");
|
|
123
|
+
}
|
|
124
|
+
export async function guardCliVersion(api, cmdId, binName, cacheFilePath) {
|
|
125
|
+
if (VERSION_CHECK_EXEMPT.has(cmdId))
|
|
126
|
+
return { outdated: false };
|
|
127
|
+
const info = await loadOrFetchMinVersion(api, cacheFilePath);
|
|
128
|
+
if (!info)
|
|
129
|
+
return { outdated: false }; // fail-open per spec
|
|
130
|
+
let outdated;
|
|
131
|
+
try {
|
|
132
|
+
outdated = isCliOutdated(CLI_VERSION, info.minVersion);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// F5: readCache already drops non-semver min_version values, and the
|
|
136
|
+
// network path's response is a live fetch (not free-form), but this
|
|
137
|
+
// guard is deliberately unconditional — a comparator surprise must
|
|
138
|
+
// never crash the command, only fail open.
|
|
139
|
+
return { outdated: false };
|
|
140
|
+
}
|
|
141
|
+
if (!outdated)
|
|
142
|
+
return { outdated: false };
|
|
143
|
+
return {
|
|
144
|
+
outdated: true,
|
|
145
|
+
message: formatUpgradeMessage(CLI_VERSION, info.minVersion, info.deprecatedMessage, binName),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=version-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-check.js","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@synteq/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Synteq Cloud command-line client",
|
|
5
5
|
"bin": {
|
|
6
6
|
"synteq": "bin/run.js"
|
|
@@ -19,13 +19,17 @@
|
|
|
19
19
|
"dev": "node ./bin/dev.js",
|
|
20
20
|
"test": "vitest run",
|
|
21
21
|
"test:watch": "vitest",
|
|
22
|
+
"test:scope": "tsx --test test/scope.test.ts",
|
|
23
|
+
"test:help-filter": "tsx --test test/help-filter.test.ts",
|
|
24
|
+
"test:scope-coverage": "tsx --test test/scope-coverage.test.ts",
|
|
25
|
+
"test:version-check": "tsx --test test/version-check.test.ts",
|
|
22
26
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
23
27
|
},
|
|
24
28
|
"oclif": {
|
|
25
29
|
"bin": "synteq",
|
|
26
30
|
"dirname": "synteq",
|
|
27
31
|
"commands": "./dist/commands",
|
|
28
|
-
"helpClass": "./dist/help",
|
|
32
|
+
"helpClass": "./dist/help/scope-aware-help.js",
|
|
29
33
|
"topicSeparator": " ",
|
|
30
34
|
"topics": {
|
|
31
35
|
"order": {
|
|
@@ -96,6 +100,7 @@
|
|
|
96
100
|
}
|
|
97
101
|
},
|
|
98
102
|
"exitCodes": {
|
|
103
|
+
"4": "Outdated client — CLI version is below the portal's minimum. Run the update command shown in the error.",
|
|
99
104
|
"default": 1,
|
|
100
105
|
"failedFlagParsing": 1,
|
|
101
106
|
"failedFlagValidation": 1,
|
|
@@ -122,14 +127,17 @@
|
|
|
122
127
|
"ink-text-input": "^6.0.0",
|
|
123
128
|
"log-update": "^8.0.0",
|
|
124
129
|
"open": "^10.1.0",
|
|
125
|
-
"react": "^19.2.7"
|
|
130
|
+
"react": "^19.2.7",
|
|
131
|
+
"semver": "^7.8.5"
|
|
126
132
|
},
|
|
127
133
|
"optionalDependencies": {
|
|
128
134
|
"keytar": "^7.9.0"
|
|
129
135
|
},
|
|
130
136
|
"devDependencies": {
|
|
131
137
|
"@types/node": "^20.11.0",
|
|
138
|
+
"@types/semver": "^7.7.1",
|
|
132
139
|
"ts-node": "^10.9.2",
|
|
140
|
+
"tsx": "^4.23.1",
|
|
133
141
|
"typescript": "^5.4.0",
|
|
134
142
|
"vitest": "^1.6.0"
|
|
135
143
|
},
|