@songsid/agend 2.2.0-beta.1 → 2.2.0-beta.11
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/README.md +1 -1
- package/README.zh-TW.md +1 -1
- package/dist/agent-cli-instructions.md +16 -9
- package/dist/agent-cli.js +15 -7
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.js +24 -9
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-whats-new.d.ts +47 -0
- package/dist/agent-whats-new.js +147 -0
- package/dist/agent-whats-new.js.map +1 -0
- package/dist/auth-api.d.ts +5 -3
- package/dist/auth-api.js +19 -3
- package/dist/auth-api.js.map +1 -1
- package/dist/backend/antigravity.d.ts +8 -0
- package/dist/backend/antigravity.js +32 -9
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-carry.d.ts +22 -0
- package/dist/backend/claude-carry.js +170 -0
- package/dist/backend/claude-carry.js.map +1 -0
- package/dist/backend/claude-code.d.ts +65 -2
- package/dist/backend/claude-code.js +226 -33
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex-metadata.d.ts +33 -0
- package/dist/backend/codex-metadata.js +122 -18
- package/dist/backend/codex-metadata.js.map +1 -1
- package/dist/backend/codex.d.ts +3 -0
- package/dist/backend/codex.js +17 -1
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/credential-profile.d.ts +40 -3
- package/dist/backend/credential-profile.js +113 -5
- package/dist/backend/credential-profile.js.map +1 -1
- package/dist/backend/effort-metadata.d.ts +37 -1
- package/dist/backend/effort-metadata.js +86 -15
- package/dist/backend/effort-metadata.js.map +1 -1
- package/dist/backend/grok.d.ts +4 -0
- package/dist/backend/grok.js +14 -0
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro-engine-ledger.d.ts +5 -0
- package/dist/backend/kiro-engine-ledger.js +20 -0
- package/dist/backend/kiro-engine-ledger.js.map +1 -1
- package/dist/backend/kiro-identity.d.ts +6 -0
- package/dist/backend/kiro-identity.js +19 -5
- package/dist/backend/kiro-identity.js.map +1 -1
- package/dist/backend/kiro.d.ts +39 -3
- package/dist/backend/kiro.js +143 -19
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/launch-effort.d.ts +61 -0
- package/dist/backend/launch-effort.js +170 -0
- package/dist/backend/launch-effort.js.map +1 -0
- package/dist/backend/muse.d.ts +84 -0
- package/dist/backend/muse.js +449 -53
- package/dist/backend/muse.js.map +1 -1
- package/dist/backend/types.d.ts +47 -4
- package/dist/backend/types.js +12 -1
- package/dist/backend/types.js.map +1 -1
- package/dist/backend-command.d.ts +91 -0
- package/dist/backend-command.js +122 -0
- package/dist/backend-command.js.map +1 -0
- package/dist/background-work-ended.d.ts +18 -0
- package/dist/background-work-ended.js +30 -0
- package/dist/background-work-ended.js.map +1 -0
- package/dist/cache-service.d.ts +2 -0
- package/dist/cache-service.js +2 -1
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/adapters/discord.d.ts +36 -1
- package/dist/channel/adapters/discord.js +126 -4
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +42 -2
- package/dist/channel/adapters/telegram.js +142 -23
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/mcp-server.js +9 -1
- package/dist/channel/mcp-server.js.map +1 -1
- package/dist/channel/mcp-tools.d.ts +11 -0
- package/dist/channel/mcp-tools.js +26 -13
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/message-edit-errors.d.ts +5 -0
- package/dist/channel/message-edit-errors.js +24 -0
- package/dist/channel/message-edit-errors.js.map +1 -0
- package/dist/channel/telegram-markdown.d.ts +6 -0
- package/dist/channel/telegram-markdown.js +104 -0
- package/dist/channel/telegram-markdown.js.map +1 -0
- package/dist/channel/tool-router.d.ts +2 -0
- package/dist/channel/tool-router.js +10 -4
- package/dist/channel/tool-router.js.map +1 -1
- package/dist/channel/types.d.ts +55 -3
- package/dist/cli.js +167 -39
- package/dist/cli.js.map +1 -1
- package/dist/command-table.d.ts +2 -2
- package/dist/command-table.js +6 -3
- package/dist/command-table.js.map +1 -1
- package/dist/config-validator.js +59 -0
- package/dist/config-validator.js.map +1 -1
- package/dist/cross-instance-envelope.d.ts +15 -2
- package/dist/cross-instance-envelope.js +29 -5
- package/dist/cross-instance-envelope.js.map +1 -1
- package/dist/daemon.d.ts +156 -1
- package/dist/daemon.js +773 -89
- package/dist/daemon.js.map +1 -1
- package/dist/delivery-outbox.d.ts +70 -8
- package/dist/delivery-outbox.js +315 -24
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/delivery-reconciliation.d.ts +18 -1
- package/dist/delivery-reconciliation.js +67 -2
- package/dist/delivery-reconciliation.js.map +1 -1
- package/dist/fleet-context.d.ts +10 -1
- package/dist/fleet-manager.d.ts +404 -13
- package/dist/fleet-manager.js +2039 -210
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-knowledge/skills/backend-providers/SKILL.md +1 -1
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +92 -21
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +27 -3
- package/dist/general-knowledge/skills/delegation-playbook/SKILL.md +8 -8
- package/dist/general-knowledge/skills/fleet-config/SKILL.md +5 -5
- package/dist/general-knowledge/skills/fleet-health/SKILL.md +4 -4
- package/dist/general-knowledge/skills/fleet-restart/SKILL.md +13 -13
- package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +3 -2
- package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +6 -0
- package/dist/general-knowledge/skills/model-discovery/SKILL.md +12 -9
- package/dist/general-knowledge/skills/multi-channel/SKILL.md +8 -2
- package/dist/general-knowledge/skills/scheduling/SKILL.md +5 -3
- package/dist/general-knowledge/skills/session-management/SKILL.md +6 -5
- package/dist/general-knowledge/skills/tui-effort/SKILL.md +2 -2
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +8 -3
- package/dist/general-knowledge/steering/core-rules.md +8 -7
- package/dist/host-memory.d.ts +10 -0
- package/dist/host-memory.js +33 -1
- package/dist/host-memory.js.map +1 -1
- package/dist/human-delivery-receipts.d.ts +83 -0
- package/dist/human-delivery-receipts.js +194 -0
- package/dist/human-delivery-receipts.js.map +1 -0
- package/dist/instance-avatar.d.ts +36 -0
- package/dist/instance-avatar.js +57 -0
- package/dist/instance-avatar.js.map +1 -0
- package/dist/instance-config-impact.js +6 -0
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +29 -6
- package/dist/instance-lifecycle.js +79 -28
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.d.ts +3 -1
- package/dist/instructions.js +11 -8
- package/dist/instructions.js.map +1 -1
- package/dist/kiro-log-gate.d.ts +42 -0
- package/dist/kiro-log-gate.js +39 -0
- package/dist/kiro-log-gate.js.map +1 -0
- package/dist/locale.js +226 -44
- package/dist/locale.js.map +1 -1
- package/dist/log-service.d.ts +99 -0
- package/dist/log-service.js +243 -0
- package/dist/log-service.js.map +1 -0
- package/dist/log-steps.d.ts +169 -0
- package/dist/log-steps.js +858 -0
- package/dist/log-steps.js.map +1 -0
- package/dist/login-controller.d.ts +20 -3
- package/dist/login-controller.js +71 -19
- package/dist/login-controller.js.map +1 -1
- package/dist/login-flows.d.ts +5 -2
- package/dist/login-flows.js +5 -4
- package/dist/login-flows.js.map +1 -1
- package/dist/memory-pressure.d.ts +13 -1
- package/dist/memory-pressure.js +50 -10
- package/dist/memory-pressure.js.map +1 -1
- package/dist/needs-you-hub.js +2 -0
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you-live.d.ts +6 -0
- package/dist/needs-you-live.js +23 -3
- package/dist/needs-you-live.js.map +1 -1
- package/dist/next-steps.js +1 -1
- package/dist/next-steps.js.map +1 -1
- package/dist/outbound-handlers.d.ts +100 -0
- package/dist/outbound-handlers.js +284 -97
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +38 -15
- package/dist/outbound-schemas.js +36 -8
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/public-link-progress.d.ts +1 -1
- package/dist/public-link-progress.js +8 -2
- package/dist/public-link-progress.js.map +1 -1
- package/dist/public-preview.d.ts +101 -0
- package/dist/public-preview.js +236 -0
- package/dist/public-preview.js.map +1 -0
- package/dist/public-web-gateway.js +14 -4
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +24 -1
- package/dist/public-web-link.js +63 -9
- package/dist/public-web-link.js.map +1 -1
- package/dist/reply-buttons-controller.d.ts +89 -5
- package/dist/reply-buttons-controller.js +273 -8
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/reply-buttons.d.ts +48 -3
- package/dist/reply-buttons.js +105 -10
- package/dist/reply-buttons.js.map +1 -1
- package/dist/reply-polls.d.ts +85 -0
- package/dist/reply-polls.js +154 -0
- package/dist/reply-polls.js.map +1 -0
- package/dist/restart-guard.d.ts +6 -3
- package/dist/restart-guard.js +6 -3
- package/dist/restart-guard.js.map +1 -1
- package/dist/restart-progress.d.ts +33 -0
- package/dist/restart-progress.js +30 -0
- package/dist/restart-progress.js.map +1 -1
- package/dist/service-activation.d.ts +15 -7
- package/dist/service-activation.js +46 -29
- package/dist/service-activation.js.map +1 -1
- package/dist/service-installer.d.ts +31 -0
- package/dist/service-installer.js +41 -2
- package/dist/service-installer.js.map +1 -1
- package/dist/settings-api.js +85 -25
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +72 -1
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-effect.js +28 -4
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.js +7 -0
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/setup-form.d.ts +1 -1
- package/dist/setup-form.js +1 -1
- package/dist/spawn-gate.js +5 -1
- package/dist/spawn-gate.js.map +1 -1
- package/dist/spawn-hold-reply.d.ts +12 -0
- package/dist/spawn-hold-reply.js +39 -0
- package/dist/spawn-hold-reply.js.map +1 -0
- package/dist/status-emojis.d.ts +10 -3
- package/dist/status-emojis.js +11 -2
- package/dist/status-emojis.js.map +1 -1
- package/dist/systemd-peer-bus.d.ts +95 -0
- package/dist/systemd-peer-bus.js +430 -0
- package/dist/systemd-peer-bus.js.map +1 -0
- package/dist/systemd-runtime.d.ts +27 -1
- package/dist/systemd-runtime.js +69 -7
- package/dist/systemd-runtime.js.map +1 -1
- package/dist/tips.js +4 -4
- package/dist/tips.js.map +1 -1
- package/dist/tool-permissions.js +3 -3
- package/dist/tool-permissions.js.map +1 -1
- package/dist/tool-progress.js +3 -2
- package/dist/tool-progress.js.map +1 -1
- package/dist/topic-commands.d.ts +42 -2
- package/dist/topic-commands.js +101 -11
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-delta-reader.d.ts +3 -3
- package/dist/transcript-delta-reader.js +8 -8
- package/dist/transcript-delta-reader.js.map +1 -1
- package/dist/transcript-jsonl.d.ts +80 -3
- package/dist/transcript-jsonl.js +147 -10
- package/dist/transcript-jsonl.js.map +1 -1
- package/dist/transcript-monitor.d.ts +19 -0
- package/dist/transcript-monitor.js +87 -15
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/transcript-sources.d.ts +78 -0
- package/dist/transcript-sources.js +375 -64
- package/dist/transcript-sources.js.map +1 -1
- package/dist/transcript-turns.d.ts +15 -2
- package/dist/transcript-turns.js +15 -2
- package/dist/transcript-turns.js.map +1 -1
- package/dist/tunnel/cloudflared.d.ts +7 -15
- package/dist/tunnel/cloudflared.js +36 -1
- package/dist/tunnel/cloudflared.js.map +1 -1
- package/dist/tunnel/purpose-lane.d.ts +5 -1
- package/dist/tunnel/purpose-lane.js +14 -7
- package/dist/tunnel/purpose-lane.js.map +1 -1
- package/dist/tunnel/types.d.ts +5 -1
- package/dist/tunnel/types.js.map +1 -1
- package/dist/turn-resume.d.ts +2 -0
- package/dist/turn-resume.js +1 -1
- package/dist/turn-resume.js.map +1 -1
- package/dist/types.d.ts +25 -0
- package/dist/ui/chat-commands.js +1 -0
- package/dist/ui/chat-emojis.js +33 -0
- package/dist/ui/chat-mentions.js +63 -0
- package/dist/ui/chat-render.js +61 -4
- package/dist/ui/chat-store.js +37 -3
- package/dist/ui/chat-strings.js +40 -20
- package/dist/ui/chat-thread.js +111 -12
- package/dist/ui/chat-time.js +80 -0
- package/dist/ui/panel-chat.js +41 -10
- package/dist/ui/panel-details.js +2 -0
- package/dist/ui/panel-fleet.js +199 -57
- package/dist/ui/panel-log.js +428 -0
- package/dist/ui/panel-needs.js +6 -2
- package/dist/ui/panel-settings.js +184 -32
- package/dist/ui/preview-panel.js +55 -15
- package/dist/ui/preview-status.js +28 -0
- package/dist/ui/preview.js +44 -3
- package/dist/ui/settings-dialogs.js +7 -2
- package/dist/ui/settings-model.js +2 -1
- package/dist/ui/settings-strings.js +56 -4
- package/dist/ui/settings-token.js +1 -1
- package/dist/ui/shared/app-i18n.js +43 -17
- package/dist/ui/shared/app-prefs.js +250 -0
- package/dist/ui/shared/app-route.js +7 -2
- package/dist/ui/shared/app-shell.js +165 -8
- package/dist/ui/shared/app-store.js +5 -1
- package/dist/ui/shared/app-stream.js +26 -5
- package/dist/ui/shared/app.css +163 -22
- package/dist/ui/shared/app.js +11 -1
- package/dist/ui/shared/fonts/README.md +1 -1
- package/dist/ui/shared/header-tools.js +55 -5
- package/dist/ui/shared/instance-nav.js +241 -45
- package/dist/ui/shared/instance-switch.js +4 -4
- package/dist/ui/shared/panel-view.js +6 -0
- package/dist/ui/shared/signin.js +7 -7
- package/dist/ui/shared/theme.js +39 -7
- package/dist/ui/shared/tokens.css +1 -1
- package/dist/ui/shared/ui-icons.js +1 -0
- package/dist/ui/shared/usage-dialog.js +23 -5
- package/dist/ui/shared/view-strings.js +32 -4
- package/dist/ui/signin.html +1 -1
- package/dist/unrecognised-prompt.d.ts +23 -0
- package/dist/unrecognised-prompt.js +74 -0
- package/dist/unrecognised-prompt.js.map +1 -0
- package/dist/update-check.d.ts +31 -0
- package/dist/update-check.js +47 -0
- package/dist/update-check.js.map +1 -1
- package/dist/update-install.d.ts +28 -2
- package/dist/update-install.js +22 -4
- package/dist/update-install.js.map +1 -1
- package/dist/update-launch.d.ts +46 -1
- package/dist/update-launch.js +146 -3
- package/dist/update-launch.js.map +1 -1
- package/dist/update-marker.d.ts +51 -0
- package/dist/update-marker.js +61 -0
- package/dist/update-marker.js.map +1 -1
- package/dist/update-preflight.d.ts +100 -0
- package/dist/update-preflight.js +264 -0
- package/dist/update-preflight.js.map +1 -0
- package/dist/updater-caller.d.ts +31 -0
- package/dist/updater-caller.js +109 -0
- package/dist/updater-caller.js.map +1 -0
- package/dist/usage/i18n-keys.d.ts +1 -1
- package/dist/usage/i18n-keys.js +1 -1
- package/dist/usage/i18n-keys.js.map +1 -1
- package/dist/usage/providers.d.ts +34 -5
- package/dist/usage/providers.js +160 -27
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage/statusline-usage.d.ts +6 -2
- package/dist/usage/statusline-usage.js +10 -4
- package/dist/usage/statusline-usage.js.map +1 -1
- package/dist/view-api.d.ts +1 -1
- package/dist/view-api.js +38 -8
- package/dist/view-api.js.map +1 -1
- package/dist/wake-coordinator.d.ts +11 -0
- package/dist/wake-coordinator.js +38 -4
- package/dist/wake-coordinator.js.map +1 -1
- package/dist/web-api.d.ts +89 -4
- package/dist/web-api.js +551 -45
- package/dist/web-api.js.map +1 -1
- package/dist/web-auth.d.ts +2 -2
- package/dist/web-auth.js +9 -4
- package/dist/web-auth.js.map +1 -1
- package/dist/web-chat-history.d.ts +12 -1
- package/dist/web-chat-history.js +29 -7
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-commands.d.ts +27 -4
- package/dist/web-commands.js +19 -4
- package/dist/web-commands.js.map +1 -1
- package/dist/web-host-guard.d.ts +3 -11
- package/dist/web-host-guard.js +3 -12
- package/dist/web-host-guard.js.map +1 -1
- package/dist/web-images.d.ts +47 -0
- package/dist/web-images.js +169 -0
- package/dist/web-images.js.map +1 -0
- package/dist/web-login.d.ts +14 -0
- package/dist/web-login.js +4 -2
- package/dist/web-login.js.map +1 -1
- package/dist/web-mentions.d.ts +44 -0
- package/dist/web-mentions.js +75 -0
- package/dist/web-mentions.js.map +1 -0
- package/dist/web-prefs.d.ts +81 -0
- package/dist/web-prefs.js +297 -0
- package/dist/web-prefs.js.map +1 -0
- package/dist/web-preview.d.ts +14 -1
- package/dist/web-preview.js +35 -13
- package/dist/web-preview.js.map +1 -1
- package/dist/web-profile.d.ts +32 -0
- package/dist/web-profile.js +132 -0
- package/dist/web-profile.js.map +1 -0
- package/dist/web-reply-files.d.ts +45 -0
- package/dist/web-reply-files.js +223 -0
- package/dist/web-reply-files.js.map +1 -0
- package/dist/web-schedules.d.ts +12 -0
- package/dist/web-schedules.js +34 -0
- package/dist/web-schedules.js.map +1 -0
- package/dist/web-server-drain.d.ts +10 -0
- package/dist/web-server-drain.js +50 -0
- package/dist/web-server-drain.js.map +1 -0
- package/dist/web-session.d.ts +50 -1
- package/dist/web-session.js +63 -6
- package/dist/web-session.js.map +1 -1
- package/dist/web-settings-patch.d.ts +23 -0
- package/dist/web-settings-patch.js +77 -0
- package/dist/web-settings-patch.js.map +1 -0
- package/dist/web-shell-routes.d.ts +5 -1
- package/dist/web-shell-routes.js +10 -1
- package/dist/web-shell-routes.js.map +1 -1
- package/dist/web-upload.d.ts +17 -4
- package/dist/web-upload.js +64 -13
- package/dist/web-upload.js.map +1 -1
- package/dist/workflow-templates/default.md +1 -1
- package/package.json +1 -1
- package/templates/launchd.plist.ejs +3 -1
- package/templates/systemd.service.ejs +2 -1
package/dist/status-emojis.js
CHANGED
|
@@ -185,7 +185,15 @@ export const STATUS_EMOJI_SUGGESTIONS = [
|
|
|
185
185
|
export function customEmojiValue(e) {
|
|
186
186
|
return `<${e.animated ? "a" : ""}:${e.name}:${e.id}>`;
|
|
187
187
|
}
|
|
188
|
-
/**
|
|
188
|
+
/**
|
|
189
|
+
* #1630: the same picture from the dashboard's own route (/ui/img/emoji/<id>, cached on the host) — what a web page shows,
|
|
190
|
+
* so the panels' CSP needs no Discord source. Only an emoji of the fleet's servers is served there.
|
|
191
|
+
*/
|
|
192
|
+
export function emojiProxyUrl(raw) {
|
|
193
|
+
const e = normalizeEmoji(raw);
|
|
194
|
+
return e?.kind === "custom" ? `/ui/img/emoji/${e.id}` : null;
|
|
195
|
+
}
|
|
196
|
+
/** Discord's public CDN renders a known custom emoji id without any token (what an agent may fetch; never a web page). */
|
|
189
197
|
export function emojiImageUrl(raw) {
|
|
190
198
|
const e = normalizeEmoji(raw);
|
|
191
199
|
if (e?.kind !== "custom")
|
|
@@ -193,6 +201,7 @@ export function emojiImageUrl(raw) {
|
|
|
193
201
|
return `https://cdn.discordapp.com/emojis/${e.id}.${e.animated ? "gif" : "png"}`;
|
|
194
202
|
}
|
|
195
203
|
export function previewStatusEmojis(input) {
|
|
204
|
+
const imageUrl = input.imageUrl ?? emojiImageUrl;
|
|
196
205
|
const problems = [];
|
|
197
206
|
const resolved = resolveStatusEmojis({ ...input, onInvalid: (source, key, value, problem) => problems.push({ source, key, value, problem }) });
|
|
198
207
|
const usable = (cfg, key) => {
|
|
@@ -208,7 +217,7 @@ export function previewStatusEmojis(input) {
|
|
|
208
217
|
source: usable(input.instanceConfig, key) ? "instance" : usable(input.platformConfig, key) ? "platform" : "builtin",
|
|
209
218
|
applied: key === "progress_prefix" ? textForm(input.platform, value) : reactionForm(input.platform, value),
|
|
210
219
|
display: displayForm(value),
|
|
211
|
-
image_url:
|
|
220
|
+
image_url: imageUrl(value),
|
|
212
221
|
};
|
|
213
222
|
});
|
|
214
223
|
return { platform: input.platform, entries, problems, avoid: statusAvoidList(resolved) };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-emojis.js","sourceRoot":"","sources":["../src/status-emojis.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"status-emojis.js","sourceRoot":"","sources":["../src/status-emojis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1804: systemd's private socket — `$XDG_RUNTIME_DIR/systemd/private` for a user manager, `/run/systemd/private` for
|
|
3
|
+
* the system one — the manager's own peer-to-peer D-Bus endpoint, which `systemctl` uses when there is no bus (a host
|
|
4
|
+
* without dbus-user-session). busctl cannot use it: it always sends Hello(), which a peer connection has no bus driver
|
|
5
|
+
* to answer ("Invalid request descriptor"; busctl 249 has no way to skip it). This speaks the D-Bus wire protocol to it
|
|
6
|
+
* directly — SASL EXTERNAL, then one method call, no Hello — and returns what `busctl --json=short` prints for the same
|
|
7
|
+
* call, so every reader keeps the exact D-Bus values (argv as `as`, never `systemctl show`'s joined text) and the same
|
|
8
|
+
* proof as on a bus.
|
|
9
|
+
*
|
|
10
|
+
* The update's code is synchronous, so the call runs in a worker thread while this thread waits on an Atomics flag,
|
|
11
|
+
* bounded. The worker's code is this module's own function text, evaluated: nothing is loaded from disk, where npm may
|
|
12
|
+
* already have put the next package (#1450 C6).
|
|
13
|
+
*/
|
|
14
|
+
import { type Stats } from "node:fs";
|
|
15
|
+
import type { CommandResult } from "./update-install.js";
|
|
16
|
+
/** A busctl stand-in for systemd's private socket: busctl's arguments after `--json=short`, busctl's output. */
|
|
17
|
+
export type PeerBus = (user: boolean, args: string[]) => CommandResult;
|
|
18
|
+
export interface PeerRequest {
|
|
19
|
+
path: string;
|
|
20
|
+
iface: string;
|
|
21
|
+
member: string;
|
|
22
|
+
/** The body's signature: "" (none), "s" or "ss". */
|
|
23
|
+
signature: string;
|
|
24
|
+
body: string[];
|
|
25
|
+
}
|
|
26
|
+
export type PeerReply = {
|
|
27
|
+
ok: true;
|
|
28
|
+
signature: string;
|
|
29
|
+
values: unknown[];
|
|
30
|
+
} | {
|
|
31
|
+
ok: false;
|
|
32
|
+
stage: "connect" | "call" | "protocol";
|
|
33
|
+
message: string;
|
|
34
|
+
};
|
|
35
|
+
/** How long one call may take, connection and authentication included. */
|
|
36
|
+
export declare const PEER_TIMEOUT_MS = 10000;
|
|
37
|
+
export type PeerCodec = ReturnType<typeof peerCodecFactory>;
|
|
38
|
+
/**
|
|
39
|
+
* The D-Bus wire format (specification, "Message Protocol"): what this client sends and reads. Self-contained, like
|
|
40
|
+
* peerWorker: the worker receives it as source text.
|
|
41
|
+
*/
|
|
42
|
+
declare function peerCodecFactory(): {
|
|
43
|
+
encodeCall: (request: PeerRequest, serial: number) => Buffer;
|
|
44
|
+
decode: (buf: Buffer) => {
|
|
45
|
+
length: number;
|
|
46
|
+
type: number;
|
|
47
|
+
replySerial: number | null;
|
|
48
|
+
signature: string;
|
|
49
|
+
errorName: string | null;
|
|
50
|
+
values: unknown[];
|
|
51
|
+
} | null;
|
|
52
|
+
};
|
|
53
|
+
/** The codec the worker uses, for tests. */
|
|
54
|
+
export declare const peerCodec: () => PeerCodec;
|
|
55
|
+
/** busctl arguments → the method call: `call <dest> <path> <iface> <member> [<sig> <args…>]` or `get-property <dest> <path> <iface> <prop>`. */
|
|
56
|
+
export declare function peerRequestFor(args: string[]): PeerRequest | null;
|
|
57
|
+
/** A reply as `busctl --json=short` prints it: a call's out-arguments as an array, a property's variant unwrapped. */
|
|
58
|
+
export declare function peerReplyAsBusctl(args: string[], reply: PeerReply, socket: string): CommandResult;
|
|
59
|
+
/** Where the manager's private socket is. */
|
|
60
|
+
export declare function privateSocketPath(user: boolean, env?: NodeJS.ProcessEnv, uid?: number): string;
|
|
61
|
+
export interface EndpointDeps {
|
|
62
|
+
lstat(path: string): Pick<Stats, "uid" | "mode" | "isSocket" | "isDirectory" | "isSymbolicLink">;
|
|
63
|
+
realpath(path: string): string;
|
|
64
|
+
euid: number;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Prism r2/r3: whose server answers. SASL EXTERNAL proves who WE are; systemctl separately accepts only a peer running
|
|
68
|
+
* as root or as itself (bus_check_peercred). Node cannot read a unix socket's peer credentials, so the same boundary is
|
|
69
|
+
* established from ownership instead: only root or this user can have bound the socket when the socket itself is owned
|
|
70
|
+
* by one of them, and every directory above it is owned by one of them and writable by no one else (a root-owned
|
|
71
|
+
* sticky directory such as /tmp excepted: no one else can replace an entry in it).
|
|
72
|
+
*
|
|
73
|
+
* The path is resolved ONCE, here: the canonical socket path (its directory's realpath + its own name) is the one
|
|
74
|
+
* checked and the one returned for connecting — never the original, whose symlinks someone else could retarget between
|
|
75
|
+
* the check and the connect (r3). Every component of the canonical path is then a real directory nobody but root or
|
|
76
|
+
* this user can change. Anything unknown or unresolvable is refused.
|
|
77
|
+
*/
|
|
78
|
+
export declare function peerEndpoint(socket: string, deps: EndpointDeps): {
|
|
79
|
+
ok: true;
|
|
80
|
+
path: string;
|
|
81
|
+
} | {
|
|
82
|
+
ok: false;
|
|
83
|
+
reason: string;
|
|
84
|
+
};
|
|
85
|
+
/** One call over a private socket, synchronously, bounded. `socket`/`timeoutMs`/`endpoint` are for tests. */
|
|
86
|
+
export declare function callPeer(user: boolean, args: string[], opts?: {
|
|
87
|
+
socket?: string;
|
|
88
|
+
timeoutMs?: number;
|
|
89
|
+
endpoint?: EndpointDeps;
|
|
90
|
+
}): CommandResult;
|
|
91
|
+
/** The production PeerBus: the manager's own private socket. */
|
|
92
|
+
export declare const systemdPeerBus: PeerBus;
|
|
93
|
+
/** The private socket could not be reached or authenticated to (not: the call failed). */
|
|
94
|
+
export declare const peerUnreachable: (result: CommandResult) => boolean;
|
|
95
|
+
export {};
|
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #1804: systemd's private socket — `$XDG_RUNTIME_DIR/systemd/private` for a user manager, `/run/systemd/private` for
|
|
3
|
+
* the system one — the manager's own peer-to-peer D-Bus endpoint, which `systemctl` uses when there is no bus (a host
|
|
4
|
+
* without dbus-user-session). busctl cannot use it: it always sends Hello(), which a peer connection has no bus driver
|
|
5
|
+
* to answer ("Invalid request descriptor"; busctl 249 has no way to skip it). This speaks the D-Bus wire protocol to it
|
|
6
|
+
* directly — SASL EXTERNAL, then one method call, no Hello — and returns what `busctl --json=short` prints for the same
|
|
7
|
+
* call, so every reader keeps the exact D-Bus values (argv as `as`, never `systemctl show`'s joined text) and the same
|
|
8
|
+
* proof as on a bus.
|
|
9
|
+
*
|
|
10
|
+
* The update's code is synchronous, so the call runs in a worker thread while this thread waits on an Atomics flag,
|
|
11
|
+
* bounded. The worker's code is this module's own function text, evaluated: nothing is loaded from disk, where npm may
|
|
12
|
+
* already have put the next package (#1450 C6).
|
|
13
|
+
*/
|
|
14
|
+
import { lstatSync, realpathSync } from "node:fs";
|
|
15
|
+
import { basename, dirname } from "node:path";
|
|
16
|
+
import { MessageChannel, Worker, receiveMessageOnPort } from "node:worker_threads";
|
|
17
|
+
/** How long one call may take, connection and authentication included. */
|
|
18
|
+
export const PEER_TIMEOUT_MS = 10_000;
|
|
19
|
+
/**
|
|
20
|
+
* The D-Bus wire format (specification, "Message Protocol"): what this client sends and reads. Self-contained, like
|
|
21
|
+
* peerWorker: the worker receives it as source text.
|
|
22
|
+
*/
|
|
23
|
+
function peerCodecFactory() {
|
|
24
|
+
const ALIGN = { y: 1, b: 4, n: 2, q: 2, i: 4, u: 4, x: 8, t: 8, d: 8, h: 4, s: 4, o: 4, g: 1, v: 1, a: 4, "(": 8, "{": 8 };
|
|
25
|
+
/** The end of the single complete type starting at `i`. */
|
|
26
|
+
const typeEnd = (sig, i) => {
|
|
27
|
+
const c = sig[i];
|
|
28
|
+
if (c === undefined)
|
|
29
|
+
throw Error(`truncated signature ${JSON.stringify(sig)}`);
|
|
30
|
+
if (c === "a")
|
|
31
|
+
return typeEnd(sig, i + 1);
|
|
32
|
+
if (c === "(" || c === "{") {
|
|
33
|
+
const close = c === "(" ? ")" : "}";
|
|
34
|
+
let j = i + 1;
|
|
35
|
+
while (sig[j] !== close) {
|
|
36
|
+
if (j >= sig.length)
|
|
37
|
+
throw Error(`unclosed ${c} in ${JSON.stringify(sig)}`);
|
|
38
|
+
j = typeEnd(sig, j);
|
|
39
|
+
}
|
|
40
|
+
if (j === i + 1)
|
|
41
|
+
throw Error(`empty struct in ${JSON.stringify(sig)}`);
|
|
42
|
+
return j + 1;
|
|
43
|
+
}
|
|
44
|
+
if (!(c in ALIGN))
|
|
45
|
+
throw Error(`unsupported type ${JSON.stringify(c)}`);
|
|
46
|
+
return i + 1;
|
|
47
|
+
};
|
|
48
|
+
const types = (sig) => { const out = []; for (let i = 0; i < sig.length;) {
|
|
49
|
+
const e = typeEnd(sig, i);
|
|
50
|
+
out.push(sig.slice(i, e));
|
|
51
|
+
i = e;
|
|
52
|
+
} return out; };
|
|
53
|
+
function encodeCall(request, serial) {
|
|
54
|
+
const bytes = [];
|
|
55
|
+
const pad = (n) => { while (bytes.length % n)
|
|
56
|
+
bytes.push(0); };
|
|
57
|
+
const u32 = (n) => { pad(4); bytes.push(n & 0xff, (n >>> 8) & 0xff, (n >>> 16) & 0xff, (n >>> 24) & 0xff); };
|
|
58
|
+
const str = (s) => { const b = Buffer.from(s, "utf8"); u32(b.length); bytes.push(...b, 0); };
|
|
59
|
+
const sig = (s) => { const b = Buffer.from(s, "ascii"); bytes.push(b.length, ...b, 0); };
|
|
60
|
+
if (request.signature !== "" && request.signature !== "s".repeat(request.body.length))
|
|
61
|
+
throw Error(`unsupported call signature ${request.signature}`);
|
|
62
|
+
// Body first, to know its length: every argument is a string, starting 8-aligned (the body's own offset 0).
|
|
63
|
+
for (const arg of request.body)
|
|
64
|
+
str(arg);
|
|
65
|
+
const body = Buffer.from(bytes);
|
|
66
|
+
bytes.length = 0;
|
|
67
|
+
bytes.push(0x6c, 1, 0, 1); // little-endian, METHOD_CALL, no flags, version 1
|
|
68
|
+
u32(body.length);
|
|
69
|
+
u32(serial);
|
|
70
|
+
u32(0); // the field array's length, filled in below
|
|
71
|
+
const fields = [
|
|
72
|
+
[1, "o", request.path], [2, "s", request.iface], [3, "s", request.member], [6, "s", "org.freedesktop.systemd1"],
|
|
73
|
+
...(request.signature ? [[8, "g", request.signature]] : []),
|
|
74
|
+
];
|
|
75
|
+
for (const [code, type, value] of fields) {
|
|
76
|
+
pad(8);
|
|
77
|
+
bytes.push(code);
|
|
78
|
+
sig(type);
|
|
79
|
+
if (type === "g")
|
|
80
|
+
sig(value);
|
|
81
|
+
else
|
|
82
|
+
str(value);
|
|
83
|
+
}
|
|
84
|
+
const fieldBytes = bytes.length - 16;
|
|
85
|
+
bytes[12] = fieldBytes & 0xff;
|
|
86
|
+
bytes[13] = (fieldBytes >>> 8) & 0xff;
|
|
87
|
+
bytes[14] = (fieldBytes >>> 16) & 0xff;
|
|
88
|
+
bytes[15] = (fieldBytes >>> 24) & 0xff;
|
|
89
|
+
pad(8);
|
|
90
|
+
return Buffer.concat([Buffer.from(bytes), body]);
|
|
91
|
+
}
|
|
92
|
+
/** One whole message from the start of `buf`, or null if more bytes are needed. Malformed input throws. */
|
|
93
|
+
function decode(buf) {
|
|
94
|
+
if (buf.length < 16)
|
|
95
|
+
return null;
|
|
96
|
+
const le = buf[0] === 0x6c;
|
|
97
|
+
if (!le && buf[0] !== 0x42)
|
|
98
|
+
throw Error(`bad endianness byte ${buf[0]}`);
|
|
99
|
+
if (buf[3] !== 1)
|
|
100
|
+
throw Error(`unsupported protocol version ${buf[3]}`);
|
|
101
|
+
const u32at = (o) => (le ? buf.readUInt32LE(o) : buf.readUInt32BE(o));
|
|
102
|
+
const bodyLength = u32at(4), fieldBytes = u32at(12);
|
|
103
|
+
if (bodyLength > 1 << 27 || fieldBytes > 1 << 26)
|
|
104
|
+
throw Error("message too large");
|
|
105
|
+
const bodyStart = Math.ceil((16 + fieldBytes) / 8) * 8, total = bodyStart + bodyLength;
|
|
106
|
+
if (buf.length < total)
|
|
107
|
+
return null;
|
|
108
|
+
const msg = buf.subarray(0, total);
|
|
109
|
+
let pos = 0;
|
|
110
|
+
const align = (n) => {
|
|
111
|
+
const next = Math.ceil(pos / n) * n;
|
|
112
|
+
for (let k = pos; k < next; k++)
|
|
113
|
+
if (msg[k] !== 0)
|
|
114
|
+
throw Error("nonzero padding");
|
|
115
|
+
pos = next;
|
|
116
|
+
};
|
|
117
|
+
const need = (n) => { if (pos + n > total)
|
|
118
|
+
throw Error("value runs past the message"); };
|
|
119
|
+
const read = (type) => {
|
|
120
|
+
const c = type[0];
|
|
121
|
+
align(ALIGN[c] ?? 1);
|
|
122
|
+
switch (c) {
|
|
123
|
+
case "y":
|
|
124
|
+
need(1);
|
|
125
|
+
return msg[pos++];
|
|
126
|
+
case "b": {
|
|
127
|
+
need(4);
|
|
128
|
+
const v = le ? msg.readUInt32LE(pos) : msg.readUInt32BE(pos);
|
|
129
|
+
pos += 4;
|
|
130
|
+
if (v > 1)
|
|
131
|
+
throw Error(`boolean ${v}`);
|
|
132
|
+
return v === 1;
|
|
133
|
+
}
|
|
134
|
+
case "n": {
|
|
135
|
+
need(2);
|
|
136
|
+
const v = le ? msg.readInt16LE(pos) : msg.readInt16BE(pos);
|
|
137
|
+
pos += 2;
|
|
138
|
+
return v;
|
|
139
|
+
}
|
|
140
|
+
case "q": {
|
|
141
|
+
need(2);
|
|
142
|
+
const v = le ? msg.readUInt16LE(pos) : msg.readUInt16BE(pos);
|
|
143
|
+
pos += 2;
|
|
144
|
+
return v;
|
|
145
|
+
}
|
|
146
|
+
case "i": {
|
|
147
|
+
need(4);
|
|
148
|
+
const v = le ? msg.readInt32LE(pos) : msg.readInt32BE(pos);
|
|
149
|
+
pos += 4;
|
|
150
|
+
return v;
|
|
151
|
+
}
|
|
152
|
+
case "u":
|
|
153
|
+
case "h": {
|
|
154
|
+
need(4);
|
|
155
|
+
const v = le ? msg.readUInt32LE(pos) : msg.readUInt32BE(pos);
|
|
156
|
+
pos += 4;
|
|
157
|
+
return v;
|
|
158
|
+
}
|
|
159
|
+
case "x": {
|
|
160
|
+
need(8);
|
|
161
|
+
const v = le ? msg.readBigInt64LE(pos) : msg.readBigInt64BE(pos);
|
|
162
|
+
pos += 8;
|
|
163
|
+
return Number(v);
|
|
164
|
+
}
|
|
165
|
+
case "t": {
|
|
166
|
+
need(8);
|
|
167
|
+
const v = le ? msg.readBigUInt64LE(pos) : msg.readBigUInt64BE(pos);
|
|
168
|
+
pos += 8;
|
|
169
|
+
return Number(v);
|
|
170
|
+
}
|
|
171
|
+
case "d": {
|
|
172
|
+
need(8);
|
|
173
|
+
const v = le ? msg.readDoubleLE(pos) : msg.readDoubleBE(pos);
|
|
174
|
+
pos += 8;
|
|
175
|
+
return v;
|
|
176
|
+
}
|
|
177
|
+
case "s":
|
|
178
|
+
case "o": {
|
|
179
|
+
need(4);
|
|
180
|
+
const n = le ? msg.readUInt32LE(pos) : msg.readUInt32BE(pos);
|
|
181
|
+
pos += 4;
|
|
182
|
+
need(n + 1);
|
|
183
|
+
if (msg[pos + n] !== 0)
|
|
184
|
+
throw Error("unterminated string");
|
|
185
|
+
// ignoreBOM: a leading U+FEFF is part of the string (Prism r2): stripped, "\uFEFF/x/cli.js" would read as "/x/cli.js".
|
|
186
|
+
const text = new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(msg.subarray(pos, pos + n));
|
|
187
|
+
if (text.includes("\0"))
|
|
188
|
+
throw Error("NUL inside a string");
|
|
189
|
+
pos += n + 1;
|
|
190
|
+
return text;
|
|
191
|
+
}
|
|
192
|
+
case "g": {
|
|
193
|
+
need(1);
|
|
194
|
+
const n = msg[pos++];
|
|
195
|
+
need(n + 1);
|
|
196
|
+
if (msg[pos + n] !== 0)
|
|
197
|
+
throw Error("unterminated signature");
|
|
198
|
+
const text = msg.subarray(pos, pos + n).toString("ascii");
|
|
199
|
+
pos += n + 1;
|
|
200
|
+
return text;
|
|
201
|
+
}
|
|
202
|
+
case "v": {
|
|
203
|
+
const sig = read("g");
|
|
204
|
+
const inner = types(sig);
|
|
205
|
+
if (inner.length !== 1)
|
|
206
|
+
throw Error(`variant signature ${JSON.stringify(sig)}`);
|
|
207
|
+
return { type: sig, data: read(sig) };
|
|
208
|
+
}
|
|
209
|
+
case "a": {
|
|
210
|
+
need(4);
|
|
211
|
+
const n = le ? msg.readUInt32LE(pos) : msg.readUInt32BE(pos);
|
|
212
|
+
pos += 4;
|
|
213
|
+
if (n > 1 << 26)
|
|
214
|
+
throw Error("array too large");
|
|
215
|
+
const element = type.slice(1);
|
|
216
|
+
align(ALIGN[element[0]] ?? 1);
|
|
217
|
+
const end = pos + n;
|
|
218
|
+
if (end > total)
|
|
219
|
+
throw Error("array runs past the message");
|
|
220
|
+
const items = [];
|
|
221
|
+
while (pos < end)
|
|
222
|
+
items.push(read(element));
|
|
223
|
+
if (pos !== end)
|
|
224
|
+
throw Error("array length mismatch");
|
|
225
|
+
return items;
|
|
226
|
+
}
|
|
227
|
+
case "(":
|
|
228
|
+
case "{": return types(type.slice(1, -1)).map(read);
|
|
229
|
+
default: throw Error(`unsupported type ${JSON.stringify(c)}`);
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
pos = 12;
|
|
233
|
+
const fields = read("a(yv)");
|
|
234
|
+
align(8);
|
|
235
|
+
if (pos !== bodyStart)
|
|
236
|
+
throw Error("header length mismatch");
|
|
237
|
+
const field = (code, type) => {
|
|
238
|
+
const f = fields.find(([c]) => c === code);
|
|
239
|
+
if (!f)
|
|
240
|
+
return null;
|
|
241
|
+
if (f[1].type !== type)
|
|
242
|
+
throw Error(`header field ${code} has type ${f[1].type}`);
|
|
243
|
+
return f[1].data;
|
|
244
|
+
};
|
|
245
|
+
const signature = field(8, "g") ?? "";
|
|
246
|
+
const values = types(signature).map(read);
|
|
247
|
+
if (pos !== total)
|
|
248
|
+
throw Error("body length mismatch");
|
|
249
|
+
return { length: total, type: msg[1], replySerial: field(5, "u"), signature, errorName: field(4, "s"), values };
|
|
250
|
+
}
|
|
251
|
+
return { encodeCall, decode };
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* The worker: connect, authenticate, one call, post the reply, set the flag. Self-contained — it runs from its own
|
|
255
|
+
* source text, so it may use nothing from this module's scope but what it is handed.
|
|
256
|
+
*/
|
|
257
|
+
function peerWorker(require, codecFactory) {
|
|
258
|
+
const codec = codecFactory();
|
|
259
|
+
const net = require("node:net");
|
|
260
|
+
const { workerData } = require("node:worker_threads");
|
|
261
|
+
const { socket, uid, request, port, flag } = workerData;
|
|
262
|
+
let finished = false;
|
|
263
|
+
const finish = (reply) => {
|
|
264
|
+
if (finished)
|
|
265
|
+
return;
|
|
266
|
+
finished = true;
|
|
267
|
+
port.postMessage(reply);
|
|
268
|
+
Atomics.store(flag, 0, 1);
|
|
269
|
+
Atomics.notify(flag, 0);
|
|
270
|
+
conn.destroy();
|
|
271
|
+
};
|
|
272
|
+
let authed = false;
|
|
273
|
+
let pending = Buffer.alloc(0);
|
|
274
|
+
const conn = net.createConnection(socket);
|
|
275
|
+
conn.on("error", error => finish({ ok: false, stage: authed ? "protocol" : "connect", message: error.message }));
|
|
276
|
+
conn.on("close", () => finish({ ok: false, stage: authed ? "protocol" : "connect", message: "the connection closed before a reply" }));
|
|
277
|
+
// As systemctl does: AUTH and BEGIN together, the call only after the server's OK. systemd 249 drops bytes that
|
|
278
|
+
// arrive in the same read as BEGIN — a call written right behind it is never answered.
|
|
279
|
+
conn.on("connect", () => {
|
|
280
|
+
conn.write(Buffer.concat([Buffer.from([0]), Buffer.from(`AUTH EXTERNAL ${Buffer.from(String(uid)).toString("hex")}\r\nBEGIN\r\n`, "ascii")]));
|
|
281
|
+
});
|
|
282
|
+
conn.on("data", (chunk) => {
|
|
283
|
+
pending = Buffer.concat([pending, chunk]);
|
|
284
|
+
try {
|
|
285
|
+
if (!authed) {
|
|
286
|
+
const end = pending.indexOf("\r\n");
|
|
287
|
+
if (end < 0)
|
|
288
|
+
return;
|
|
289
|
+
const line = pending.subarray(0, end).toString("latin1");
|
|
290
|
+
pending = pending.subarray(end + 2);
|
|
291
|
+
if (!/^OK [0-9a-f]{32}$/.test(line))
|
|
292
|
+
return finish({ ok: false, stage: "connect", message: `authentication refused (${JSON.stringify(line.slice(0, 80))})` });
|
|
293
|
+
authed = true;
|
|
294
|
+
conn.write(codec.encodeCall(request, 1));
|
|
295
|
+
}
|
|
296
|
+
for (;;) {
|
|
297
|
+
const message = codec.decode(pending);
|
|
298
|
+
if (!message)
|
|
299
|
+
return;
|
|
300
|
+
pending = pending.subarray(message.length);
|
|
301
|
+
if (message.replySerial !== 1)
|
|
302
|
+
continue; // not ours (a signal): skip it
|
|
303
|
+
if (message.type === 3) {
|
|
304
|
+
const text = typeof message.values[0] === "string" ? `: ${message.values[0]}` : "";
|
|
305
|
+
return finish({ ok: false, stage: "call", message: `${message.errorName ?? "error"}${text}` });
|
|
306
|
+
}
|
|
307
|
+
if (message.type !== 2)
|
|
308
|
+
return finish({ ok: false, stage: "protocol", message: `unexpected message type ${message.type}` });
|
|
309
|
+
return finish({ ok: true, signature: message.signature, values: message.values });
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
catch (error) {
|
|
313
|
+
finish({ ok: false, stage: "protocol", message: error instanceof Error ? error.message : String(error) });
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
/** The codec the worker uses, for tests. */
|
|
318
|
+
export const peerCodec = () => peerCodecFactory();
|
|
319
|
+
/** busctl arguments → the method call: `call <dest> <path> <iface> <member> [<sig> <args…>]` or `get-property <dest> <path> <iface> <prop>`. */
|
|
320
|
+
export function peerRequestFor(args) {
|
|
321
|
+
if (args[0] === "call" && args[1] === "org.freedesktop.systemd1" && args.length >= 5) {
|
|
322
|
+
const [, , path, iface, member, signature = "", ...body] = args;
|
|
323
|
+
return signature === "s".repeat(body.length) ? { path, iface, member, signature, body } : null;
|
|
324
|
+
}
|
|
325
|
+
if (args[0] === "get-property" && args[1] === "org.freedesktop.systemd1" && args.length === 5) {
|
|
326
|
+
return { path: args[2], iface: "org.freedesktop.DBus.Properties", member: "Get", signature: "ss", body: [args[3], args[4]] };
|
|
327
|
+
}
|
|
328
|
+
return null;
|
|
329
|
+
}
|
|
330
|
+
/** A reply as `busctl --json=short` prints it: a call's out-arguments as an array, a property's variant unwrapped. */
|
|
331
|
+
export function peerReplyAsBusctl(args, reply, socket) {
|
|
332
|
+
if (!reply.ok) {
|
|
333
|
+
return { status: 1, signal: null, stdout: "", stderr: reply.stage === "connect" ? `Failed to connect to ${socket}: ${reply.message}\n` : `Call failed: ${reply.message}\n` };
|
|
334
|
+
}
|
|
335
|
+
if (args[0] === "get-property") {
|
|
336
|
+
const variant = reply.values[0];
|
|
337
|
+
if (reply.signature !== "v" || !variant || typeof variant.type !== "string")
|
|
338
|
+
return { status: 1, signal: null, stdout: "", stderr: `Call failed: Get returned ${reply.signature}\n` };
|
|
339
|
+
return { status: 0, signal: null, stdout: `${JSON.stringify({ type: variant.type, data: variant.data })}\n`, stderr: "" };
|
|
340
|
+
}
|
|
341
|
+
return { status: 0, signal: null, stdout: `${JSON.stringify({ type: reply.signature, data: reply.values })}\n`, stderr: "" };
|
|
342
|
+
}
|
|
343
|
+
/** Where the manager's private socket is. */
|
|
344
|
+
export function privateSocketPath(user, env = process.env, uid = process.getuid?.() ?? 0) {
|
|
345
|
+
return user ? `${env.XDG_RUNTIME_DIR || `/run/user/${uid}`}/systemd/private` : "/run/systemd/private";
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Prism r2/r3: whose server answers. SASL EXTERNAL proves who WE are; systemctl separately accepts only a peer running
|
|
349
|
+
* as root or as itself (bus_check_peercred). Node cannot read a unix socket's peer credentials, so the same boundary is
|
|
350
|
+
* established from ownership instead: only root or this user can have bound the socket when the socket itself is owned
|
|
351
|
+
* by one of them, and every directory above it is owned by one of them and writable by no one else (a root-owned
|
|
352
|
+
* sticky directory such as /tmp excepted: no one else can replace an entry in it).
|
|
353
|
+
*
|
|
354
|
+
* The path is resolved ONCE, here: the canonical socket path (its directory's realpath + its own name) is the one
|
|
355
|
+
* checked and the one returned for connecting — never the original, whose symlinks someone else could retarget between
|
|
356
|
+
* the check and the connect (r3). Every component of the canonical path is then a real directory nobody but root or
|
|
357
|
+
* this user can change. Anything unknown or unresolvable is refused.
|
|
358
|
+
*/
|
|
359
|
+
export function peerEndpoint(socket, deps) {
|
|
360
|
+
const trusted = (uid) => uid === 0 || uid === deps.euid;
|
|
361
|
+
const refuse = (reason) => ({ ok: false, reason });
|
|
362
|
+
try {
|
|
363
|
+
if (!socket.startsWith("/"))
|
|
364
|
+
return refuse(`${socket} is not an absolute path`);
|
|
365
|
+
const name = basename(socket);
|
|
366
|
+
if (!name || name === "." || name === ".." || socket.endsWith("/"))
|
|
367
|
+
return refuse(`${socket} does not name a socket`);
|
|
368
|
+
const parent = deps.realpath(dirname(socket));
|
|
369
|
+
if (!parent.startsWith("/"))
|
|
370
|
+
return refuse(`${dirname(socket)} resolves to ${parent}, not an absolute path`);
|
|
371
|
+
const path = parent === "/" ? `/${name}` : `${parent}/${name}`;
|
|
372
|
+
const own = deps.lstat(path);
|
|
373
|
+
if (!own.isSocket())
|
|
374
|
+
return refuse(`${path} is not a socket`);
|
|
375
|
+
if (!trusted(own.uid))
|
|
376
|
+
return refuse(`${path} is owned by uid ${own.uid}, neither root nor ${deps.euid}`);
|
|
377
|
+
for (let dir = parent;; dir = dirname(dir)) {
|
|
378
|
+
const st = deps.lstat(dir);
|
|
379
|
+
if (!st.isDirectory())
|
|
380
|
+
return refuse(`${dir} is not a directory`);
|
|
381
|
+
if (!trusted(st.uid))
|
|
382
|
+
return refuse(`${dir} is owned by uid ${st.uid}, neither root nor ${deps.euid}`);
|
|
383
|
+
const othersWrite = (st.mode & 0o022) !== 0, sticky = (st.mode & 0o1000) !== 0;
|
|
384
|
+
if (othersWrite && !(sticky && st.uid === 0))
|
|
385
|
+
return refuse(`${dir} is writable by others (mode ${(st.mode & 0o7777).toString(8)})`);
|
|
386
|
+
if (dir === "/")
|
|
387
|
+
return { ok: true, path };
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
catch (error) {
|
|
391
|
+
return refuse(error instanceof Error ? error.message : String(error));
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
/** One call over a private socket, synchronously, bounded. `socket`/`timeoutMs`/`endpoint` are for tests. */
|
|
395
|
+
export function callPeer(user, args, opts = {}) {
|
|
396
|
+
const request = peerRequestFor(args);
|
|
397
|
+
if (!request)
|
|
398
|
+
return { status: 2, signal: null, stdout: "", stderr: `unsupported call ${args.slice(0, 2).join(" ")}\n` };
|
|
399
|
+
const named = opts.socket ?? privateSocketPath(user);
|
|
400
|
+
const endpoint = peerEndpoint(named, opts.endpoint ?? { lstat: path => lstatSync(path), realpath: path => realpathSync(path), euid: process.geteuid?.() ?? 0 });
|
|
401
|
+
if (!endpoint.ok)
|
|
402
|
+
return { status: 1, signal: null, stdout: "", stderr: `Failed to connect to ${named}: not systemd's own socket (${endpoint.reason})\n` };
|
|
403
|
+
const socket = endpoint.path; // the checked path, and only it, is connected
|
|
404
|
+
const timeoutMs = opts.timeoutMs ?? PEER_TIMEOUT_MS;
|
|
405
|
+
const flag = new Int32Array(new SharedArrayBuffer(4));
|
|
406
|
+
const { port1, port2 } = new MessageChannel();
|
|
407
|
+
let worker;
|
|
408
|
+
try {
|
|
409
|
+
worker = new Worker(`(${peerWorker.toString()})(require, ${peerCodecFactory.toString()})`, {
|
|
410
|
+
eval: true, workerData: { socket, uid: process.getuid?.() ?? 0, request, port: port2, flag }, transferList: [port2],
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
catch (error) {
|
|
414
|
+
port1.close();
|
|
415
|
+
return { status: null, signal: null, stdout: "", stderr: `the private-socket worker did not start: ${error instanceof Error ? error.message : String(error)}\n` };
|
|
416
|
+
}
|
|
417
|
+
worker.unref();
|
|
418
|
+
Atomics.wait(flag, 0, 0, timeoutMs);
|
|
419
|
+
const received = receiveMessageOnPort(port1);
|
|
420
|
+
port1.close();
|
|
421
|
+
void worker.terminate();
|
|
422
|
+
if (!received)
|
|
423
|
+
return { status: null, signal: "SIGTERM", stdout: "", stderr: `${socket} did not answer within ${timeoutMs / 1000}s\n` };
|
|
424
|
+
return peerReplyAsBusctl(args, received.message, socket);
|
|
425
|
+
}
|
|
426
|
+
/** The production PeerBus: the manager's own private socket. */
|
|
427
|
+
export const systemdPeerBus = (user, args) => callPeer(user, args);
|
|
428
|
+
/** The private socket could not be reached or authenticated to (not: the call failed). */
|
|
429
|
+
export const peerUnreachable = (result) => result.signal === null && result.status !== 0 && /^Failed to connect to /m.test(result.stderr);
|
|
430
|
+
//# sourceMappingURL=systemd-peer-bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemd-peer-bus.js","sourceRoot":"","sources":["../src/systemd-peer-bus.ts"],"names":[],"mappings":"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"}
|