@cats-inc/cats-platform 0.1.1 → 0.1.7
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/.env.example +2 -2
- package/README.md +6 -0
- package/build/desktop/bootstrapPage.d.ts.map +1 -1
- package/build/desktop/bootstrapPage.js +81 -4
- package/build/desktop/bootstrapPage.js.map +1 -1
- package/build/desktop/config.d.ts +11 -1
- package/build/desktop/config.d.ts.map +1 -1
- package/build/desktop/config.js +5 -2
- package/build/desktop/config.js.map +1 -1
- package/build/desktop/contracts.d.ts +68 -11
- package/build/desktop/contracts.d.ts.map +1 -1
- package/build/desktop/contracts.js +52 -1
- package/build/desktop/contracts.js.map +1 -1
- package/build/desktop/hostState.d.ts +4 -3
- package/build/desktop/hostState.d.ts.map +1 -1
- package/build/desktop/hostState.js +22 -30
- package/build/desktop/hostState.js.map +1 -1
- package/build/desktop/hostVersion.d.ts +1 -0
- package/build/desktop/hostVersion.d.ts.map +1 -1
- package/build/desktop/hostVersion.js +29 -5
- package/build/desktop/hostVersion.js.map +1 -1
- package/build/desktop/ipcSecurity.d.ts +6 -0
- package/build/desktop/ipcSecurity.d.ts.map +1 -0
- package/build/desktop/ipcSecurity.js +10 -0
- package/build/desktop/ipcSecurity.js.map +1 -0
- package/build/desktop/main.js +272 -59
- package/build/desktop/main.js.map +1 -1
- package/build/desktop/packaging.d.ts.map +1 -1
- package/build/desktop/packaging.js +10 -4
- package/build/desktop/packaging.js.map +1 -1
- package/build/desktop/preload.cjs +39 -0
- package/build/desktop/preload.cjs.map +1 -1
- package/build/desktop/processSupervisor.d.ts +2 -0
- package/build/desktop/processSupervisor.d.ts.map +1 -1
- package/build/desktop/processSupervisor.js +28 -13
- package/build/desktop/processSupervisor.js.map +1 -1
- package/build/desktop/readiness.d.ts +2 -2
- package/build/desktop/readiness.d.ts.map +1 -1
- package/build/desktop/readiness.js +2 -2
- package/build/desktop/readiness.js.map +1 -1
- package/build/desktop/releaseDescriptor.d.ts +85 -0
- package/build/desktop/releaseDescriptor.d.ts.map +1 -0
- package/build/desktop/releaseDescriptor.js +246 -0
- package/build/desktop/releaseDescriptor.js.map +1 -0
- package/build/desktop/screenshotCapture.d.ts.map +1 -1
- package/build/desktop/screenshotCapture.js +3 -7
- package/build/desktop/screenshotCapture.js.map +1 -1
- package/build/desktop/security.d.ts +8 -0
- package/build/desktop/security.d.ts.map +1 -1
- package/build/desktop/security.js +54 -1
- package/build/desktop/security.js.map +1 -1
- package/build/desktop/tray.d.ts +1 -0
- package/build/desktop/tray.d.ts.map +1 -1
- package/build/desktop/tray.js +26 -0
- package/build/desktop/tray.js.map +1 -1
- package/build/desktop/trayMenu.d.ts +22 -1
- package/build/desktop/trayMenu.d.ts.map +1 -1
- package/build/desktop/trayMenu.js +61 -0
- package/build/desktop/trayMenu.js.map +1 -1
- package/build/desktop/updateInstallHandoff.d.ts +30 -0
- package/build/desktop/updateInstallHandoff.d.ts.map +1 -0
- package/build/desktop/updateInstallHandoff.js +39 -0
- package/build/desktop/updateInstallHandoff.js.map +1 -0
- package/build/desktop/updateIpc.d.ts +42 -0
- package/build/desktop/updateIpc.d.ts.map +1 -0
- package/build/desktop/updateIpc.js +71 -0
- package/build/desktop/updateIpc.js.map +1 -0
- package/build/desktop/updateManager.d.ts +76 -0
- package/build/desktop/updateManager.d.ts.map +1 -0
- package/build/desktop/updateManager.js +342 -0
- package/build/desktop/updateManager.js.map +1 -0
- package/build/desktop/updateNotifications.d.ts +64 -0
- package/build/desktop/updateNotifications.d.ts.map +1 -0
- package/build/desktop/updateNotifications.js +143 -0
- package/build/desktop/updateNotifications.js.map +1 -0
- package/build/desktop/updaterAdapter.d.ts +72 -0
- package/build/desktop/updaterAdapter.d.ts.map +1 -0
- package/build/desktop/updaterAdapter.js +198 -0
- package/build/desktop/updaterAdapter.js.map +1 -0
- package/build/desktop/voiceCapture.d.ts.map +1 -1
- package/build/desktop/voiceCapture.js +3 -7
- package/build/desktop/voiceCapture.js.map +1 -1
- package/build/renderer/assets/ActiveSessionPermissionChip-BRMLwkvf.js +1 -0
- package/build/renderer/assets/{App-BbuTWT6Y.js → App-BM2nzo6s.js} +1 -1
- package/build/renderer/assets/{App-n-RtGh42.js → App-CVQAwCMi.js} +1 -1
- package/build/renderer/assets/{App-B13AzNko.js → App-Dl5FLaR_.js} +1 -1
- package/build/renderer/assets/{WorkspaceAppRoutes-BktWrQK-.js → WorkspaceAppRoutes-C3DUzdbj.js} +1 -1
- package/build/renderer/assets/app-hP5h2jAt.js +43 -0
- package/build/renderer/assets/{client-DREGSZqQ.js → client-BdGHAUoK.js} +1 -1
- package/build/renderer/assets/{conversationSidebarRecentEntries-BNPz3X1V.js → conversationSidebarRecentEntries-B-mNvfiy.js} +1 -1
- package/build/renderer/assets/{screenshotOverlay-EF07cXvw.js → screenshotOverlay-DfBcolX-.js} +1 -1
- package/build/renderer/assets/{useDraftSessionChips-3z_Je4ju.js → useDraftSessionChips-DuXIoptW.js} +1 -1
- package/build/renderer/desktop/overlay/index.html +2 -2
- package/build/renderer/index.html +2 -2
- package/build/server/app/renderer/settings/settingsDesktopErrorLabels.d.ts +5 -0
- package/build/server/app/renderer/settings/settingsDesktopErrorLabels.d.ts.map +1 -0
- package/build/server/app/renderer/settings/settingsDesktopErrorLabels.js +16 -0
- package/build/server/app/renderer/settings/settingsDesktopErrorLabels.js.map +1 -0
- package/build/server/app/renderer/settings/settingsDesktopPreferences.d.ts +11 -0
- package/build/server/app/renderer/settings/settingsDesktopPreferences.d.ts.map +1 -0
- package/build/server/app/renderer/settings/settingsDesktopPreferences.js +30 -0
- package/build/server/app/renderer/settings/settingsDesktopPreferences.js.map +1 -0
- package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.d.ts +31 -0
- package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.d.ts.map +1 -0
- package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.js +101 -0
- package/build/server/app/renderer/settings/settingsDesktopUpdateLabels.js.map +1 -0
- package/build/server/app/server/authGatePolicy.js +14 -2
- package/build/server/app/server/authGatePolicy.js.map +1 -1
- package/build/server/app/server/authRoutes.d.ts +2 -1
- package/build/server/app/server/authRoutes.d.ts.map +1 -1
- package/build/server/app/server/authRoutes.js +260 -4
- package/build/server/app/server/authRoutes.js.map +1 -1
- package/build/server/app/server/contracts.d.ts +3 -1
- package/build/server/app/server/contracts.d.ts.map +1 -1
- package/build/server/app/server/dependencies.d.ts.map +1 -1
- package/build/server/app/server/dependencies.js +4 -1
- package/build/server/app/server/dependencies.js.map +1 -1
- package/build/server/app/server/index.js +1 -1
- package/build/server/app/server/index.js.map +1 -1
- package/build/server/app/server/platformSetupRoutes.d.ts.map +1 -1
- package/build/server/app/server/platformSetupRoutes.js +42 -5
- package/build/server/app/server/platformSetupRoutes.js.map +1 -1
- package/build/server/app/server/requestRouter.d.ts.map +1 -1
- package/build/server/app/server/requestRouter.js +3 -0
- package/build/server/app/server/requestRouter.js.map +1 -1
- package/build/server/design/components/runtimeChips.d.ts +1 -1
- package/build/server/design/components/runtimeChips.d.ts.map +1 -1
- package/build/server/design/components/runtimeChips.js +4 -1
- package/build/server/design/components/runtimeChips.js.map +1 -1
- package/build/server/index.js +12 -1
- package/build/server/index.js.map +1 -1
- package/build/server/platform/auth/browserHandoff.d.ts +50 -0
- package/build/server/platform/auth/browserHandoff.d.ts.map +1 -0
- package/build/server/platform/auth/browserHandoff.js +94 -0
- package/build/server/platform/auth/browserHandoff.js.map +1 -0
- package/build/server/platform/auth/index.d.ts +1 -0
- package/build/server/platform/auth/index.d.ts.map +1 -1
- package/build/server/platform/auth/index.js +1 -0
- package/build/server/platform/auth/index.js.map +1 -1
- package/build/server/platform/auth/principal.js +2 -2
- package/build/server/platform/auth/principal.js.map +1 -1
- package/build/server/platform/auth/session.d.ts +3 -0
- package/build/server/platform/auth/session.d.ts.map +1 -1
- package/build/server/platform/auth/session.js +41 -0
- package/build/server/platform/auth/session.js.map +1 -1
- package/build/server/platform/auth/sessionSecretProvisioning.d.ts +23 -0
- package/build/server/platform/auth/sessionSecretProvisioning.d.ts.map +1 -0
- package/build/server/platform/auth/sessionSecretProvisioning.js +291 -0
- package/build/server/platform/auth/sessionSecretProvisioning.js.map +1 -0
- package/build/server/platform/auth/state.js +4 -0
- package/build/server/platform/auth/state.js.map +1 -1
- package/build/server/platform/auth/types.d.ts +1 -0
- package/build/server/platform/auth/types.d.ts.map +1 -1
- package/build/server/products/code/livePreview/realProcessAdapter.d.ts.map +1 -1
- package/build/server/products/code/livePreview/realProcessAdapter.js +7 -1
- package/build/server/products/code/livePreview/realProcessAdapter.js.map +1 -1
- package/build/server/products/code/state/appExport.d.ts.map +1 -1
- package/build/server/products/code/state/appExport.js +2 -0
- package/build/server/products/code/state/appExport.js.map +1 -1
- package/build/server/shared/browserHandoff.d.ts +11 -0
- package/build/server/shared/browserHandoff.d.ts.map +1 -0
- package/build/server/shared/browserHandoff.js +2 -0
- package/build/server/shared/browserHandoff.js.map +1 -0
- package/build/server/shared/desktopRecoveryBridge.d.ts +47 -0
- package/build/server/shared/desktopRecoveryBridge.d.ts.map +1 -1
- package/build/server/shared/desktopRecoveryBridge.js +20 -0
- package/build/server/shared/desktopRecoveryBridge.js.map +1 -1
- package/build/server/shared/i18n/catalogs/en.d.ts.map +1 -1
- package/build/server/shared/i18n/catalogs/en.js +38 -0
- package/build/server/shared/i18n/catalogs/en.js.map +1 -1
- package/build/server/shared/i18n/catalogs/zh-TW.d.ts.map +1 -1
- package/build/server/shared/i18n/catalogs/zh-TW.js +36 -0
- package/build/server/shared/i18n/catalogs/zh-TW.js.map +1 -1
- package/build/server/shared/i18n/index.d.ts +36 -0
- package/build/server/shared/i18n/index.d.ts.map +1 -1
- package/build/server/shared/i18n/messageKeys.d.ts +36 -0
- package/build/server/shared/i18n/messageKeys.d.ts.map +1 -1
- package/build/server/shared/i18n/messageKeys.js +36 -0
- package/build/server/shared/i18n/messageKeys.js.map +1 -1
- package/build/server/shared/loadProjectEnvFile.d.ts.map +1 -1
- package/build/server/shared/loadProjectEnvFile.js +18 -19
- package/build/server/shared/loadProjectEnvFile.js.map +1 -1
- package/build/server/shared/platformChildProcessEnv.d.ts +2 -0
- package/build/server/shared/platformChildProcessEnv.d.ts.map +1 -0
- package/build/server/shared/platformChildProcessEnv.js +22 -0
- package/build/server/shared/platformChildProcessEnv.js.map +1 -0
- package/package.json +19 -27
- package/scripts/build-desktop-installer.mjs +438 -37
- package/scripts/build-test-ui.mjs +13 -2
- package/scripts/generate-desktop-release-descriptor.mjs +258 -0
- package/scripts/validate-release-assets.mjs +422 -0
- package/scripts/validate-release-version.mjs +217 -0
- package/scripts/windows/Test-WindowsInstallerSmoke.ps1 +55 -1
- package/build/desktop/update.d.ts +0 -24
- package/build/desktop/update.d.ts.map +0 -1
- package/build/desktop/update.js +0 -173
- package/build/desktop/update.js.map +0 -1
- package/build/renderer/assets/ActiveSessionPermissionChip-BYr8cDpb.js +0 -1
- package/build/renderer/assets/app-DnVQMpW_.js +0 -43
- package/build/server/app/renderer/settings/settingsDesktopStartupErrorLabels.d.ts +0 -5
- package/build/server/app/renderer/settings/settingsDesktopStartupErrorLabels.d.ts.map +0 -1
- package/build/server/app/renderer/settings/settingsDesktopStartupErrorLabels.js +0 -11
- package/build/server/app/renderer/settings/settingsDesktopStartupErrorLabels.js.map +0 -1
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
/**
|
|
5
|
+
* Provenance emitted by the tag-gated release workflow
|
|
6
|
+
* (`scripts/generate-desktop-release-descriptor.mjs`). SPEC-111 requires
|
|
7
|
+
* official update capability to depend on this file rather than on
|
|
8
|
+
* `app.isPackaged`, which is also true for locally packaged and unofficial
|
|
9
|
+
* builds.
|
|
10
|
+
*
|
|
11
|
+
* Nothing in this module reads the environment. Requirement 1.9 states that no
|
|
12
|
+
* environment variable may promote a development or unofficial package into an
|
|
13
|
+
* official update client, and the cheapest way to guarantee that is to give the
|
|
14
|
+
* resolver no access to one.
|
|
15
|
+
*/
|
|
16
|
+
export const DESKTOP_RELEASE_DESCRIPTOR_SCHEMA_VERSION = 1;
|
|
17
|
+
export const DESKTOP_RELEASE_DESCRIPTOR_FILENAME = 'release-descriptor.json';
|
|
18
|
+
export const DESKTOP_RELEASE_PLATFORMS = ['windows', 'macos', 'linux'];
|
|
19
|
+
/**
|
|
20
|
+
* What kind of build the workflow produced.
|
|
21
|
+
*
|
|
22
|
+
* `official` is a signed stable release. `preview` is an unsigned prerelease
|
|
23
|
+
* from the same guarded workflow: it may self-update so the upgrade path is
|
|
24
|
+
* testable before signing exists, but it resolves to its own distribution mode
|
|
25
|
+
* and is never presented as official.
|
|
26
|
+
*/
|
|
27
|
+
export const DESKTOP_RELEASE_KINDS = ['official', 'preview'];
|
|
28
|
+
const SEMVER_CORE = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/u;
|
|
29
|
+
const COMMIT_SHA = /^[0-9a-f]{40}$/iu;
|
|
30
|
+
const GITHUB_REPOSITORY = /^[A-Za-z0-9._-]+\/[A-Za-z0-9._-]+$/u;
|
|
31
|
+
function isObjectRecord(value) {
|
|
32
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
33
|
+
}
|
|
34
|
+
function readString(record, key) {
|
|
35
|
+
const value = record[key];
|
|
36
|
+
return typeof value === 'string' && value.trim() !== '' ? value.trim() : null;
|
|
37
|
+
}
|
|
38
|
+
export function resolveDesktopReleasePlatform(nodePlatform) {
|
|
39
|
+
if (nodePlatform === 'win32') {
|
|
40
|
+
return 'windows';
|
|
41
|
+
}
|
|
42
|
+
if (nodePlatform === 'darwin') {
|
|
43
|
+
return 'macos';
|
|
44
|
+
}
|
|
45
|
+
if (nodePlatform === 'linux') {
|
|
46
|
+
return 'linux';
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
export function resolveDesktopReleaseDescriptorPath(moduleDir = dirname(fileURLToPath(import.meta.url))) {
|
|
51
|
+
// The descriptor is generated into build/desktop next to the compiled host,
|
|
52
|
+
// so the same relative lookup works for a dev run and inside the asar.
|
|
53
|
+
return join(moduleDir, DESKTOP_RELEASE_DESCRIPTOR_FILENAME);
|
|
54
|
+
}
|
|
55
|
+
export function parseDesktopReleaseDescriptor(raw) {
|
|
56
|
+
if (!isObjectRecord(raw)) {
|
|
57
|
+
return { ok: false, reason: 'descriptor_malformed', detail: 'Descriptor is not an object.' };
|
|
58
|
+
}
|
|
59
|
+
if (raw.schemaVersion !== DESKTOP_RELEASE_DESCRIPTOR_SCHEMA_VERSION) {
|
|
60
|
+
return {
|
|
61
|
+
ok: false,
|
|
62
|
+
reason: 'descriptor_schema_unsupported',
|
|
63
|
+
detail: `Unsupported descriptor schemaVersion: ${String(raw.schemaVersion)}`,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// Required. A descriptor without a kind is not something this workflow
|
|
67
|
+
// produced, so it fails closed rather than defaulting to official.
|
|
68
|
+
const kind = readString(raw, 'kind');
|
|
69
|
+
if (kind === null || !DESKTOP_RELEASE_KINDS.includes(kind)) {
|
|
70
|
+
return {
|
|
71
|
+
ok: false,
|
|
72
|
+
reason: 'descriptor_malformed',
|
|
73
|
+
detail: `Descriptor kind is not official or preview: ${String(raw.kind)}`,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const version = readString(raw, 'version');
|
|
77
|
+
if (version === null || !SEMVER_CORE.test(version)) {
|
|
78
|
+
return {
|
|
79
|
+
ok: false,
|
|
80
|
+
reason: 'descriptor_malformed',
|
|
81
|
+
detail: 'Descriptor version is not a MAJOR.MINOR.PATCH string.',
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const tag = readString(raw, 'tag');
|
|
85
|
+
if (tag === null || tag !== `v${version}`) {
|
|
86
|
+
return {
|
|
87
|
+
ok: false,
|
|
88
|
+
reason: 'descriptor_malformed',
|
|
89
|
+
detail: 'Descriptor tag does not match its version.',
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const commit = readString(raw, 'commit');
|
|
93
|
+
if (commit === null || !COMMIT_SHA.test(commit)) {
|
|
94
|
+
return {
|
|
95
|
+
ok: false,
|
|
96
|
+
reason: 'descriptor_malformed',
|
|
97
|
+
detail: 'Descriptor commit is not a full 40-character sha.',
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
const platform = readString(raw, 'platform');
|
|
101
|
+
if (platform === null
|
|
102
|
+
|| !DESKTOP_RELEASE_PLATFORMS.includes(platform)) {
|
|
103
|
+
return {
|
|
104
|
+
ok: false,
|
|
105
|
+
reason: 'descriptor_malformed',
|
|
106
|
+
detail: 'Descriptor platform is not windows, macos, or linux.',
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
// Phase 1 publishes stable only, and Requirement 1.7 pins the production
|
|
110
|
+
// channel to the descriptor. Any other channel means the file was not
|
|
111
|
+
// produced by the current release workflow.
|
|
112
|
+
if (raw.channel !== 'stable') {
|
|
113
|
+
return {
|
|
114
|
+
ok: false,
|
|
115
|
+
reason: 'descriptor_malformed',
|
|
116
|
+
detail: `Descriptor channel is not stable: ${String(raw.channel)}`,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
if (raw.provider !== 'github_release') {
|
|
120
|
+
return {
|
|
121
|
+
ok: false,
|
|
122
|
+
reason: 'descriptor_malformed',
|
|
123
|
+
detail: `Descriptor provider is not github_release: ${String(raw.provider)}`,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const repository = readString(raw, 'repository');
|
|
127
|
+
if (repository === null || !GITHUB_REPOSITORY.test(repository)) {
|
|
128
|
+
return {
|
|
129
|
+
ok: false,
|
|
130
|
+
reason: 'descriptor_malformed',
|
|
131
|
+
detail: 'Descriptor repository is not in owner/name form.',
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
const runtimeCommit = readString(raw, 'runtimeCommit');
|
|
135
|
+
if (runtimeCommit === null || !COMMIT_SHA.test(runtimeCommit)) {
|
|
136
|
+
return {
|
|
137
|
+
ok: false,
|
|
138
|
+
reason: 'descriptor_malformed',
|
|
139
|
+
detail: 'Descriptor runtimeCommit is not a full 40-character sha.',
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
ok: true,
|
|
144
|
+
descriptor: {
|
|
145
|
+
schemaVersion: DESKTOP_RELEASE_DESCRIPTOR_SCHEMA_VERSION,
|
|
146
|
+
kind: kind,
|
|
147
|
+
tag,
|
|
148
|
+
version,
|
|
149
|
+
commit: commit.toLowerCase(),
|
|
150
|
+
platform: platform,
|
|
151
|
+
channel: 'stable',
|
|
152
|
+
provider: 'github_release',
|
|
153
|
+
repository,
|
|
154
|
+
runtimeCommit: runtimeCommit.toLowerCase(),
|
|
155
|
+
generatedAt: readString(raw, 'generatedAt'),
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function unofficial(currentVersion, reason) {
|
|
160
|
+
return {
|
|
161
|
+
distribution: 'unofficial_packaged',
|
|
162
|
+
provider: 'none',
|
|
163
|
+
channel: 'stable',
|
|
164
|
+
currentVersion,
|
|
165
|
+
repository: null,
|
|
166
|
+
commit: null,
|
|
167
|
+
unavailableReason: reason,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
export function resolveDesktopDistributionIdentity(input) {
|
|
171
|
+
const { isPackaged, currentVersion, nodePlatform, descriptor } = input;
|
|
172
|
+
if (!isPackaged) {
|
|
173
|
+
return {
|
|
174
|
+
distribution: 'development',
|
|
175
|
+
provider: 'none',
|
|
176
|
+
channel: 'stable',
|
|
177
|
+
currentVersion,
|
|
178
|
+
repository: null,
|
|
179
|
+
commit: null,
|
|
180
|
+
unavailableReason: 'development_build',
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
if (descriptor === null) {
|
|
184
|
+
return unofficial(currentVersion, 'descriptor_missing');
|
|
185
|
+
}
|
|
186
|
+
if (!descriptor.ok) {
|
|
187
|
+
return unofficial(currentVersion, descriptor.reason);
|
|
188
|
+
}
|
|
189
|
+
if (descriptor.descriptor.version !== currentVersion) {
|
|
190
|
+
return unofficial(currentVersion, 'descriptor_version_mismatch');
|
|
191
|
+
}
|
|
192
|
+
if (descriptor.descriptor.platform !== resolveDesktopReleasePlatform(nodePlatform)) {
|
|
193
|
+
return unofficial(currentVersion, 'descriptor_platform_mismatch');
|
|
194
|
+
}
|
|
195
|
+
return {
|
|
196
|
+
distribution: descriptor.descriptor.kind === 'preview'
|
|
197
|
+
? 'preview_packaged'
|
|
198
|
+
: 'official_packaged',
|
|
199
|
+
provider: 'github_release',
|
|
200
|
+
channel: descriptor.descriptor.channel,
|
|
201
|
+
currentVersion,
|
|
202
|
+
repository: descriptor.descriptor.repository,
|
|
203
|
+
commit: descriptor.descriptor.commit,
|
|
204
|
+
unavailableReason: null,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Returns null when the descriptor is absent, which is the expected state for a
|
|
209
|
+
* development run and for a locally packaged build. A present but unreadable or
|
|
210
|
+
* invalid file is reported as a parse failure so the reason reaches diagnostics
|
|
211
|
+
* instead of silently degrading to "missing".
|
|
212
|
+
*/
|
|
213
|
+
export async function loadDesktopReleaseDescriptor(descriptorPath = resolveDesktopReleaseDescriptorPath(), dependencies = {}) {
|
|
214
|
+
const readFileImpl = dependencies.readFileImpl
|
|
215
|
+
?? ((path) => readFile(path, 'utf8'));
|
|
216
|
+
let contents;
|
|
217
|
+
try {
|
|
218
|
+
contents = await readFileImpl(descriptorPath);
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
if (isMissingFileError(error)) {
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
ok: false,
|
|
226
|
+
reason: 'descriptor_unreadable',
|
|
227
|
+
detail: error instanceof Error ? error.message : String(error),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
let parsed;
|
|
231
|
+
try {
|
|
232
|
+
parsed = JSON.parse(contents);
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
return {
|
|
236
|
+
ok: false,
|
|
237
|
+
reason: 'descriptor_malformed',
|
|
238
|
+
detail: error instanceof Error ? error.message : String(error),
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
return parseDesktopReleaseDescriptor(parsed);
|
|
242
|
+
}
|
|
243
|
+
function isMissingFileError(error) {
|
|
244
|
+
return isObjectRecord(error) && error.code === 'ENOENT';
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=releaseDescriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"releaseDescriptor.js","sourceRoot":"","sources":["../../desktop/host/releaseDescriptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshotCapture.d.ts","sourceRoot":"","sources":["../../desktop/host/screenshotCapture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAEL,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACpC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"screenshotCapture.d.ts","sourceRoot":"","sources":["../../desktop/host/screenshotCapture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAEL,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACpC,MAAM,gBAAgB,CAAC;AAMxB,eAAO,MAAM,8BAA8B,wCAAwC,CAAC;AAKpF,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC;IACrF,IAAI,IAAI,IAAI,CAAC;IACb,IAAI,IAAI,IAAI,CAAC;IACb,WAAW,IAAI,OAAO,CAAC;IACvB,OAAO,IAAI,IAAI,CAAC;IAChB,KAAK,IAAI,IAAI,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,8BAA8B;IAC7C,OAAO,EAAE,+BAA+B,CAAC;IACzC,UAAU,EAAE,2BAA2B,CAAC;IACxC,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,mBAAmB,CAAC,EAAE,CACpB,OAAO,EAAE,+BAA+B,KACrC,OAAO,CAAC,8BAA8B,CAAC,CAAC;CAC9C;AAMD,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,OAAO,GACb,+BAA+B,CAcjC;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,IAAI,CAAC,2BAA2B,EAAE,aAAa,CAAC,GAAG,IAAI,GAClE,OAAO,CAET;AAED,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,2BAA2B,GAAG,IAAI,GAC7C,OAAO,CAAC,UAAU,IAAI,2BAA2B,CAMnD;AAED,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,2BAA2B,GACtC,4BAA4B,CAM9B;AAED,wBAAgB,kCAAkC,CAChD,UAAU,EAAE,2BAA2B,EACvC,KAAK,EAAE,4BAA4B,GAClC,IAAI,CAiBN;AAED,wBAAsB,uCAAuC,CAC3D,MAAM,SAA6B,GAClC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,oCAAoC,CAAC,CAAC,EAC1D,UAAU,EAAE,2BAA2B,EACvC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,kBAAkB,GAAE,MAAM,OAAO,CAAC,IAAI,CAA2C,GAChF,OAAO,CAAC,CAAC,CAAC,CASZ;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,8BAA8B,CAAC,CAWzC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DESKTOP_SCREENSHOT_CAPTURE_SOURCES, } from './contracts.js';
|
|
2
|
+
import { assertMainWindowIpcSender, isMainWindowIpcSender, } from './ipcSecurity.js';
|
|
2
3
|
export const DESKTOP_SCREENSHOT_IPC_CHANNEL = 'cats-host:capture-screenshot-region';
|
|
3
4
|
const DESKTOP_SCREENSHOT_UNSUPPORTED_MESSAGE = 'Native region screenshot capture is not implemented in this desktop build yet.';
|
|
4
5
|
const DEFAULT_COMPOSITOR_WAIT_MS = 120;
|
|
@@ -14,15 +15,10 @@ export function parseDesktopScreenshotCaptureRequest(value) {
|
|
|
14
15
|
};
|
|
15
16
|
}
|
|
16
17
|
export function isMainWindowScreenshotIpcSender(event, mainWindow) {
|
|
17
|
-
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
return event.sender === mainWindow.webContents;
|
|
18
|
+
return isMainWindowIpcSender(event, mainWindow);
|
|
21
19
|
}
|
|
22
20
|
export function assertMainWindowScreenshotIpcSender(event, mainWindow) {
|
|
23
|
-
|
|
24
|
-
throw new Error('Desktop screenshot capture is only available to the main Cats window.');
|
|
25
|
-
}
|
|
21
|
+
assertMainWindowIpcSender(event, mainWindow, 'Desktop screenshot capture is only available to the main Cats window.');
|
|
26
22
|
}
|
|
27
23
|
export function captureDesktopScreenshotWindowState(mainWindow) {
|
|
28
24
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshotCapture.js","sourceRoot":"","sources":["../../desktop/host/screenshotCapture.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kCAAkC,GAGnC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"screenshotCapture.js","sourceRoot":"","sources":["../../desktop/host/screenshotCapture.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,14 @@ interface ValidateDesktopUrlOptions {
|
|
|
6
6
|
export declare function normalizeDesktopHost(rawValue: string | undefined, fallback: string): string;
|
|
7
7
|
export declare function validateDesktopUrl(rawValue: string, options?: ValidateDesktopUrlOptions): string;
|
|
8
8
|
export declare function parseDesktopAllowedHosts(rawValue: string | undefined): string[];
|
|
9
|
+
export declare function resolveDesktopBrowserHandoffUrl(rawLaunchPath: string, options: {
|
|
10
|
+
appBaseUrl: string;
|
|
11
|
+
allowedHosts: Iterable<string>;
|
|
12
|
+
}): string;
|
|
13
|
+
export declare function isDesktopAppOriginUrl(rawUrl: string, options: {
|
|
14
|
+
appBaseUrl: string;
|
|
15
|
+
allowedHosts: Iterable<string>;
|
|
16
|
+
}): boolean;
|
|
9
17
|
export declare function isDesktopHostActionId(value: unknown): value is DesktopHostActionId;
|
|
10
18
|
export {};
|
|
11
19
|
//# sourceMappingURL=security.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../desktop/host/security.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../desktop/host/security.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,gBAAgB,CAAC;AAExB,UAAU,yBAAyB;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CACxC;AAiDD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,QAAQ,EAAE,MAAM,GACf,MAAM,CASR;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,yBAA8B,GACtC,MAAM,CAoBR;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAW/E;AAED,wBAAgB,+BAA+B,CAC7C,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CAChC,GACA,MAAM,CAmCR;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CAChC,GACA,OAAO,CAYT;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAElF"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import { DESKTOP_HOST_ACTION_IDS, } from './contracts.js';
|
|
1
|
+
import { DESKTOP_BROWSER_HANDOFF_EXCHANGE_PATH, DESKTOP_HOST_ACTION_IDS, } from './contracts.js';
|
|
2
2
|
const DESKTOP_HOST_ACTION_ID_SET = new Set(DESKTOP_HOST_ACTION_IDS);
|
|
3
|
+
const DESKTOP_DIRECT_BROWSER_PATHS = new Set([
|
|
4
|
+
'/runtime/setup',
|
|
5
|
+
'/runtime/dashboard',
|
|
6
|
+
'/runtime/playground',
|
|
7
|
+
]);
|
|
3
8
|
const HOSTNAME_PATTERN = /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)(?:\.(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?))*$/iu;
|
|
4
9
|
const BRACKETED_IPV6_PATTERN = /^\[[0-9a-f:.]+\]$/iu;
|
|
5
10
|
function isValidIpv4Host(value) {
|
|
@@ -78,6 +83,54 @@ export function parseDesktopAllowedHosts(rawValue) {
|
|
|
78
83
|
}
|
|
79
84
|
return entries.map((entry) => entry.toLowerCase());
|
|
80
85
|
}
|
|
86
|
+
export function resolveDesktopBrowserHandoffUrl(rawLaunchPath, options) {
|
|
87
|
+
const launchPath = rawLaunchPath.trim();
|
|
88
|
+
if (!launchPath.startsWith('/')) {
|
|
89
|
+
throw new Error('Desktop browser handoff path must be root-relative.');
|
|
90
|
+
}
|
|
91
|
+
const appUrl = new URL(validateDesktopUrl(options.appBaseUrl, {
|
|
92
|
+
allowedHosts: options.allowedHosts,
|
|
93
|
+
}));
|
|
94
|
+
const targetUrl = new URL(launchPath, appUrl);
|
|
95
|
+
if (targetUrl.origin !== appUrl.origin) {
|
|
96
|
+
throw new Error('Desktop browser handoff must use the Cats app origin.');
|
|
97
|
+
}
|
|
98
|
+
if (DESKTOP_DIRECT_BROWSER_PATHS.has(targetUrl.pathname)) {
|
|
99
|
+
if (targetUrl.search || targetUrl.hash) {
|
|
100
|
+
throw new Error('Desktop direct browser path is invalid.');
|
|
101
|
+
}
|
|
102
|
+
return validateDesktopUrl(targetUrl.toString(), {
|
|
103
|
+
allowedHosts: options.allowedHosts,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
if (targetUrl.pathname !== DESKTOP_BROWSER_HANDOFF_EXCHANGE_PATH || targetUrl.search) {
|
|
107
|
+
throw new Error('Desktop browser handoff path is invalid.');
|
|
108
|
+
}
|
|
109
|
+
const fragmentParams = new URLSearchParams(targetUrl.hash.slice(1));
|
|
110
|
+
const tokenValues = fragmentParams.getAll('token');
|
|
111
|
+
if (tokenValues.length !== 1
|
|
112
|
+
|| !/^[a-z0-9_-]{40,}$/iu.test(tokenValues[0] ?? '')
|
|
113
|
+
|| Array.from(fragmentParams.keys()).some((key) => key !== 'token')) {
|
|
114
|
+
throw new Error('Desktop browser handoff token is invalid.');
|
|
115
|
+
}
|
|
116
|
+
return validateDesktopUrl(targetUrl.toString(), {
|
|
117
|
+
allowedHosts: options.allowedHosts,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
export function isDesktopAppOriginUrl(rawUrl, options) {
|
|
121
|
+
try {
|
|
122
|
+
const appUrl = new URL(validateDesktopUrl(options.appBaseUrl, {
|
|
123
|
+
allowedHosts: options.allowedHosts,
|
|
124
|
+
}));
|
|
125
|
+
const targetUrl = new URL(validateDesktopUrl(rawUrl, {
|
|
126
|
+
allowedHosts: options.allowedHosts,
|
|
127
|
+
}));
|
|
128
|
+
return targetUrl.origin === appUrl.origin;
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
81
134
|
export function isDesktopHostActionId(value) {
|
|
82
135
|
return typeof value === 'string' && DESKTOP_HOST_ACTION_ID_SET.has(value);
|
|
83
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../desktop/host/security.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,GAExB,MAAM,gBAAgB,CAAC;AAOxB,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAS,uBAAuB,CAAC,CAAC;AAC5E,MAAM,gBAAgB,GAAG,6FAA6F,CAAC;AACvH,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AAErD,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzC,OAAO,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,GAAG,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAa;IAC/C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC5E,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,QAA4B,EAC5B,QAAgB;IAEhB,MAAM,OAAO,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,QAAgB,EAChB,UAAqC,EAAE;IAEvC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS,KAAK,IAAI;QACjD,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAC/E,CAAC;QACF,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACzF,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAA4B;IACnE,MAAM,OAAO,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;SAC7B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,4CAA4C,KAAK,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC5E,CAAC"}
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../desktop/host/security.ts"],"names":[],"mappings":"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"}
|
package/build/desktop/tray.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ interface CreateDesktopTrayControllerOptions {
|
|
|
14
14
|
onRunAction: (actionId: DesktopHostActionId) => Promise<void>;
|
|
15
15
|
onQuit: () => void;
|
|
16
16
|
canInteract?: () => boolean;
|
|
17
|
+
onCheckForUpdates?: () => Promise<void>;
|
|
17
18
|
}
|
|
18
19
|
export declare function runDesktopTrayShowWindow(onShowWindow: () => Promise<void>): void;
|
|
19
20
|
export declare function createDesktopTrayController(options: CreateDesktopTrayControllerOptions): Promise<DesktopTrayController>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tray.d.ts","sourceRoot":"","sources":["../../desktop/host/tray.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EAGd,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAyB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGjF,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,qBAAqB;IACpC,UAAU,IAAI,IAAI,CAAC;IACnB,gBAAgB,IAAI,IAAI,CAAC;IACzB,UAAU,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC9C,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,UAAU,kCAAkC;IAC1C,SAAS,EAAE,MAAM,aAAa,GAAG,IAAI,CAAC;IACtC,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,WAAW,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"tray.d.ts","sourceRoot":"","sources":["../../desktop/host/tray.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EAGd,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAyB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGjF,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,qBAAqB;IACpC,UAAU,IAAI,IAAI,CAAC;IACnB,gBAAgB,IAAI,IAAI,CAAC;IACzB,UAAU,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC9C,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,UAAU,kCAAkC;IAC1C,SAAS,EAAE,MAAM,aAAa,GAAG,IAAI,CAAC;IACtC,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,WAAW,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;IAG5B,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAuFD,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAEhF;AA0HD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,kCAAkC,GAC1C,OAAO,CAAC,qBAAqB,CAAC,CA0EhC"}
|
package/build/desktop/tray.js
CHANGED
|
@@ -122,6 +122,32 @@ function buildDesktopTrayMenuTemplate(state, options, showWindow) {
|
|
|
122
122
|
});
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
+
// SPEC-111 section 5: the update entry sits before Settings and Quit, and is
|
|
126
|
+
// absent entirely when the build has no update capability.
|
|
127
|
+
if (state.updateItem) {
|
|
128
|
+
pushSeparator();
|
|
129
|
+
template.push({
|
|
130
|
+
label: state.updateItem.label,
|
|
131
|
+
enabled: state.updateItem.enabled,
|
|
132
|
+
click: () => {
|
|
133
|
+
const item = state.updateItem;
|
|
134
|
+
if (!item?.enabled) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
runTrayAction(async () => {
|
|
138
|
+
if (options.canInteract?.() === false) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if (item.intent === 'check') {
|
|
142
|
+
await options.onCheckForUpdates?.();
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
await options.onNavigate('/settings/desktop');
|
|
146
|
+
showWindow();
|
|
147
|
+
});
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
}
|
|
125
151
|
if (state.setupCompleteAt) {
|
|
126
152
|
pushSeparator();
|
|
127
153
|
template.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tray.js","sourceRoot":"","sources":["../../desktop/host/tray.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAQxD,OAAO,EAAE,mCAAmC,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EACL,0BAA0B,GAG3B,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"tray.js","sourceRoot":"","sources":["../../desktop/host/tray.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DesktopBootstrapPhase, DesktopHostAction } from './contracts.js';
|
|
1
|
+
import type { DesktopBootstrapPhase, DesktopHostAction, DesktopUpdateSnapshot } from './contracts.js';
|
|
2
2
|
export interface DesktopTrayProductDescriptor {
|
|
3
3
|
id?: string;
|
|
4
4
|
productName?: string;
|
|
@@ -9,6 +9,17 @@ export interface DesktopTrayProductDescriptor {
|
|
|
9
9
|
disabledReason?: string;
|
|
10
10
|
} | null;
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Tray update entry. Absent entirely when the build has no update capability,
|
|
14
|
+
* so an unofficial or development package never shows a command it cannot
|
|
15
|
+
* honour.
|
|
16
|
+
*/
|
|
17
|
+
export interface DesktopTrayUpdateItem {
|
|
18
|
+
label: string;
|
|
19
|
+
enabled: boolean;
|
|
20
|
+
/** What activating the item should do. */
|
|
21
|
+
intent: 'check' | 'open_settings';
|
|
22
|
+
}
|
|
12
23
|
export interface DesktopTrayMenuState {
|
|
13
24
|
phase?: DesktopBootstrapPhase;
|
|
14
25
|
summary: string;
|
|
@@ -21,6 +32,7 @@ export interface DesktopTrayMenuState {
|
|
|
21
32
|
}>;
|
|
22
33
|
lockedLabel?: string;
|
|
23
34
|
lockedTooltip?: string;
|
|
35
|
+
updateItem?: DesktopTrayUpdateItem | null;
|
|
24
36
|
}
|
|
25
37
|
export type DesktopTrayLocale = 'en' | 'zh-TW';
|
|
26
38
|
interface BuildDesktopTrayMenuStateOptions {
|
|
@@ -31,8 +43,17 @@ interface BuildDesktopTrayMenuStateOptions {
|
|
|
31
43
|
actions: ReadonlyArray<Pick<DesktopHostAction, 'id' | 'label' | 'primary'>>;
|
|
32
44
|
products: ReadonlyArray<DesktopTrayProductDescriptor> | null | undefined;
|
|
33
45
|
locale?: string | null;
|
|
46
|
+
updates?: DesktopUpdateSnapshot | null;
|
|
34
47
|
}
|
|
35
48
|
export declare function normalizeDesktopTrayLocale(locale: string | null | undefined): DesktopTrayLocale;
|
|
49
|
+
/**
|
|
50
|
+
* Derives the tray update entry from the host-owned snapshot.
|
|
51
|
+
*
|
|
52
|
+
* Labels stay truthful about what the host is doing, and every state that has
|
|
53
|
+
* an operation in flight is disabled so a second request cannot be started
|
|
54
|
+
* from the tray.
|
|
55
|
+
*/
|
|
56
|
+
export declare function buildDesktopTrayUpdateItem(snapshot: DesktopUpdateSnapshot | null | undefined, localeInput?: string | null): DesktopTrayUpdateItem | null;
|
|
36
57
|
export declare function buildDesktopTrayMenuState(options: BuildDesktopTrayMenuStateOptions): DesktopTrayMenuState;
|
|
37
58
|
export declare function buildDesktopTrayQuittingMenuState(localeInput?: string | null): DesktopTrayMenuState;
|
|
38
59
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trayMenu.d.ts","sourceRoot":"","sources":["../../desktop/host/trayMenu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"trayMenu.d.ts","sourceRoot":"","sources":["../../desktop/host/trayMenu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EAEjB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,4BAA4B;IAC3C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GAAG,IAAI,CAAC;CACV;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,0CAA0C;IAC1C,MAAM,EAAE,OAAO,GAAG,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IAKnC,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;IACpE,QAAQ,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IAKH,WAAW,CAAC,EAAE,MAAM,CAAC;IAIrB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,UAAU,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAC3C;AAED,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC;AAE/C,UAAU,gCAAgC;IACxC,KAAK,EAAE,qBAAqB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;IAC5E,QAAQ,EAAE,aAAa,CAAC,4BAA4B,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACzE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;CACxC;AAuDD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChC,iBAAiB,CAQnB;AAwED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,EAClD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAC1B,qBAAqB,GAAG,IAAI,CAmB9B;AAwBD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gCAAgC,GACxC,oBAAoB,CA0BtB;AAED,wBAAgB,iCAAiC,CAC/C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAC1B,oBAAoB,CAWtB"}
|
|
@@ -89,6 +89,66 @@ function toTrayProductLabel(productName, locale) {
|
|
|
89
89
|
? `Open ${trimmed.slice('Cats '.length)}`
|
|
90
90
|
: `Open ${trimmed}`;
|
|
91
91
|
}
|
|
92
|
+
const TRAY_UPDATE_LABELS = {
|
|
93
|
+
en: {
|
|
94
|
+
check: 'Check for Updates…',
|
|
95
|
+
checking: 'Checking for Updates…',
|
|
96
|
+
available: 'Update Available…',
|
|
97
|
+
downloading: 'Downloading Update…',
|
|
98
|
+
downloaded: 'Restart to Update…',
|
|
99
|
+
installing: 'Installing Update…',
|
|
100
|
+
},
|
|
101
|
+
'zh-TW': {
|
|
102
|
+
check: '檢查更新…',
|
|
103
|
+
checking: '正在檢查更新…',
|
|
104
|
+
available: '有可用更新…',
|
|
105
|
+
downloading: '正在下載更新…',
|
|
106
|
+
downloaded: '重新啟動以更新…',
|
|
107
|
+
installing: '正在安裝更新…',
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Derives the tray update entry from the host-owned snapshot.
|
|
112
|
+
*
|
|
113
|
+
* Labels stay truthful about what the host is doing, and every state that has
|
|
114
|
+
* an operation in flight is disabled so a second request cannot be started
|
|
115
|
+
* from the tray.
|
|
116
|
+
*/
|
|
117
|
+
export function buildDesktopTrayUpdateItem(snapshot, localeInput) {
|
|
118
|
+
if (!snapshot?.capability.canCheck) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
const locale = normalizeDesktopTrayLocale(localeInput);
|
|
122
|
+
const labels = TRAY_UPDATE_LABELS[locale];
|
|
123
|
+
// A preview build self-updates, so the tray has to say what it is or a
|
|
124
|
+
// tester cannot tell it apart from a supported release.
|
|
125
|
+
const suffix = snapshot.capability.distribution === 'preview_packaged'
|
|
126
|
+
? (locale === 'zh-TW' ? '(預覽)' : ' (preview)')
|
|
127
|
+
: '';
|
|
128
|
+
const withSuffix = (item) => ({
|
|
129
|
+
...item,
|
|
130
|
+
label: `${item.label}${suffix}`,
|
|
131
|
+
});
|
|
132
|
+
return withSuffix(resolveTrayUpdateItem(snapshot, labels));
|
|
133
|
+
}
|
|
134
|
+
function resolveTrayUpdateItem(snapshot, labels) {
|
|
135
|
+
switch (snapshot.status) {
|
|
136
|
+
case 'checking':
|
|
137
|
+
return { label: labels.checking, enabled: false, intent: 'check' };
|
|
138
|
+
case 'update_available':
|
|
139
|
+
return { label: labels.available, enabled: true, intent: 'open_settings' };
|
|
140
|
+
case 'downloading': {
|
|
141
|
+
const percent = Math.round(snapshot.progress?.percent ?? 0);
|
|
142
|
+
return { label: `${labels.downloading} ${percent}%`, enabled: false, intent: 'check' };
|
|
143
|
+
}
|
|
144
|
+
case 'downloaded':
|
|
145
|
+
return { label: labels.downloaded, enabled: true, intent: 'open_settings' };
|
|
146
|
+
case 'installing':
|
|
147
|
+
return { label: labels.installing, enabled: false, intent: 'check' };
|
|
148
|
+
default:
|
|
149
|
+
return { label: labels.check, enabled: true, intent: 'check' };
|
|
150
|
+
}
|
|
151
|
+
}
|
|
92
152
|
export function buildDesktopTrayMenuState(options) {
|
|
93
153
|
const effectiveSetupCompleteAt = options.setupCompleteAt ?? options.fallbackSetupCompleteAt ?? null;
|
|
94
154
|
const locale = normalizeDesktopTrayLocale(options.locale);
|
|
@@ -112,6 +172,7 @@ export function buildDesktopTrayMenuState(options) {
|
|
|
112
172
|
label: localizeTrayActionLabel(action, locale),
|
|
113
173
|
})),
|
|
114
174
|
products,
|
|
175
|
+
updateItem: buildDesktopTrayUpdateItem(options.updates, options.locale),
|
|
115
176
|
};
|
|
116
177
|
}
|
|
117
178
|
export function buildDesktopTrayQuittingMenuState(localeInput) {
|