@tutti-os/desktop-update-admission 0.0.266
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/LICENSE +201 -0
- package/README.md +112 -0
- package/dist/chunk-GONYAEKF.js +139 -0
- package/dist/chunk-GONYAEKF.js.map +1 -0
- package/dist/chunk-LV67FBCG.js +112 -0
- package/dist/chunk-LV67FBCG.js.map +1 -0
- package/dist/chunk-TRALK3GT.js +33 -0
- package/dist/chunk-TRALK3GT.js.map +1 -0
- package/dist/chunk-X4U7GODT.js +134 -0
- package/dist/chunk-X4U7GODT.js.map +1 -0
- package/dist/chunk-ZQTIYDGZ.js +603 -0
- package/dist/chunk-ZQTIYDGZ.js.map +1 -0
- package/dist/contracts/index.d.ts +97 -0
- package/dist/contracts/index.js +15 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/core/index.d.ts +19 -0
- package/dist/core/index.js +13 -0
- package/dist/core/index.js.map +1 -0
- package/dist/development/index.d.ts +133 -0
- package/dist/development/index.js +289 -0
- package/dist/development/index.js.map +1 -0
- package/dist/development/mock-server-cli.d.ts +1 -0
- package/dist/development/mock-server-cli.js +67 -0
- package/dist/development/mock-server-cli.js.map +1 -0
- package/dist/electron-main/index.d.ts +38 -0
- package/dist/electron-main/index.js +498 -0
- package/dist/electron-main/index.js.map +1 -0
- package/dist/i18n/index.d.ts +64 -0
- package/dist/i18n/index.js +74 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/mandatory-updater/index.d.ts +23 -0
- package/dist/mandatory-updater/index.js +10 -0
- package/dist/mandatory-updater/index.js.map +1 -0
- package/dist/preload/index.d.ts +9 -0
- package/dist/preload/index.js +30 -0
- package/dist/preload/index.js.map +1 -0
- package/dist/react/index.d.ts +13 -0
- package/dist/react/index.js +116 -0
- package/dist/react/index.js.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
declare const desktopUpdatePolicies: readonly ["off", "prompt", "auto"];
|
|
2
|
+
type DesktopUpdatePolicy = (typeof desktopUpdatePolicies)[number];
|
|
3
|
+
declare const desktopUpdateChannels: readonly ["stable", "rc"];
|
|
4
|
+
type DesktopUpdateChannel = (typeof desktopUpdateChannels)[number];
|
|
5
|
+
declare const desktopUpdateStatuses: readonly ["disabled", "unsupported", "idle", "checking", "available", "downloading", "downloaded", "up_to_date", "error"];
|
|
6
|
+
type DesktopUpdateStatus = (typeof desktopUpdateStatuses)[number];
|
|
7
|
+
interface ConfigureDesktopUpdatesInput {
|
|
8
|
+
channel: DesktopUpdateChannel;
|
|
9
|
+
policy: DesktopUpdatePolicy;
|
|
10
|
+
}
|
|
11
|
+
interface DesktopUpdateState {
|
|
12
|
+
channel: DesktopUpdateChannel;
|
|
13
|
+
checkedAt: string | null;
|
|
14
|
+
currentVersion: string;
|
|
15
|
+
downloadedBytes: number | null;
|
|
16
|
+
downloadPercent: number | null;
|
|
17
|
+
latestVersion: string | null;
|
|
18
|
+
message: string | null;
|
|
19
|
+
policy: DesktopUpdatePolicy;
|
|
20
|
+
releaseDate: string | null;
|
|
21
|
+
releaseName: string | null;
|
|
22
|
+
releaseNotesUrl: string | null;
|
|
23
|
+
status: DesktopUpdateStatus;
|
|
24
|
+
totalBytes: number | null;
|
|
25
|
+
}
|
|
26
|
+
declare const desktopProducts: readonly ["tsh-desktop", "tutti-desktop"];
|
|
27
|
+
type DesktopProduct = (typeof desktopProducts)[number];
|
|
28
|
+
type DesktopPlatform = "macos" | "windows" | "linux";
|
|
29
|
+
type DesktopArchitecture = "arm64" | "x64";
|
|
30
|
+
interface MinimumVersionCheckRequest<TProduct extends DesktopProduct = DesktopProduct> {
|
|
31
|
+
product: TProduct;
|
|
32
|
+
platform: DesktopPlatform;
|
|
33
|
+
architecture: DesktopArchitecture;
|
|
34
|
+
currentVersion: string;
|
|
35
|
+
}
|
|
36
|
+
type MinimumVersionDecision = "allowed" | "upgradeRequired" | "notApplicable";
|
|
37
|
+
interface MinimumVersionCheckResponse<TProduct extends DesktopProduct = DesktopProduct> extends MinimumVersionCheckRequest<TProduct> {
|
|
38
|
+
channel: DesktopUpdateChannel | "unmanaged";
|
|
39
|
+
minimumVersion: string;
|
|
40
|
+
decision: MinimumVersionDecision;
|
|
41
|
+
reason: "unmanagedPrerelease" | "productDisabled" | "unsupportedRelease" | "belowMinimum" | "meetsMinimum";
|
|
42
|
+
policySource: "" | "defaultMinimum" | "platformOverride";
|
|
43
|
+
policyRevision: string;
|
|
44
|
+
}
|
|
45
|
+
type MinimumVersionUpgradePhase = "blocked" | "checking" | "ready" | "downloading" | "downloaded" | "simulationComplete" | "error" | "released";
|
|
46
|
+
type MinimumVersionUpgradeError = "releaseBelowMinimum" | "updateUnavailable" | "policyCheckFailed" | "installFailed" | "updateFailed";
|
|
47
|
+
interface MinimumVersionUpgradeState<TProduct extends DesktopProduct = DesktopProduct> {
|
|
48
|
+
phase: MinimumVersionUpgradePhase;
|
|
49
|
+
check: MinimumVersionCheckResponse<TProduct>;
|
|
50
|
+
update: DesktopUpdateState;
|
|
51
|
+
message: MinimumVersionUpgradeError | null;
|
|
52
|
+
}
|
|
53
|
+
interface MandatoryDesktopUpdateTarget {
|
|
54
|
+
channel: DesktopUpdateChannel;
|
|
55
|
+
minimumVersion: string;
|
|
56
|
+
policyRevision: string;
|
|
57
|
+
}
|
|
58
|
+
interface MandatoryDesktopUpdateSession {
|
|
59
|
+
retarget(input: MandatoryDesktopUpdateTarget): void;
|
|
60
|
+
prepare(): Promise<DesktopUpdateState>;
|
|
61
|
+
downloadUpdate(): Promise<DesktopUpdateState>;
|
|
62
|
+
installUpdate(): Promise<void>;
|
|
63
|
+
release(options?: {
|
|
64
|
+
restoreNormal?: boolean;
|
|
65
|
+
}): Promise<void>;
|
|
66
|
+
}
|
|
67
|
+
interface MinimumVersionAppUpdateService {
|
|
68
|
+
getState(): DesktopUpdateState;
|
|
69
|
+
acquireMandatorySession(input: MandatoryDesktopUpdateTarget): Promise<MandatoryDesktopUpdateSession>;
|
|
70
|
+
subscribe(listener: (state: DesktopUpdateState) => void): () => void;
|
|
71
|
+
}
|
|
72
|
+
interface DesktopUpdateAdmissionRuntime {
|
|
73
|
+
checksEnabled: boolean;
|
|
74
|
+
currentVersion: string;
|
|
75
|
+
development: boolean;
|
|
76
|
+
foregroundCheckIntervalMs: number;
|
|
77
|
+
}
|
|
78
|
+
declare const desktopUpdateAdmissionIpcChannels: {
|
|
79
|
+
readonly exit: "desktop-update-admission:exit";
|
|
80
|
+
readonly getState: "desktop-update-admission:get-state";
|
|
81
|
+
readonly later: "desktop-update-admission:later";
|
|
82
|
+
readonly manualDownload: "desktop-update-admission:manual-download";
|
|
83
|
+
readonly retry: "desktop-update-admission:retry";
|
|
84
|
+
readonly start: "desktop-update-admission:start";
|
|
85
|
+
readonly state: "desktop-update-admission:state";
|
|
86
|
+
};
|
|
87
|
+
interface DesktopMinimumVersionApi {
|
|
88
|
+
getState(): Promise<MinimumVersionUpgradeState | null>;
|
|
89
|
+
start(): Promise<MinimumVersionUpgradeState | null>;
|
|
90
|
+
retry(): Promise<MinimumVersionUpgradeState | null>;
|
|
91
|
+
later(): Promise<void>;
|
|
92
|
+
openManualDownload(): Promise<void>;
|
|
93
|
+
exit(): Promise<void>;
|
|
94
|
+
onState(listener: (state: MinimumVersionUpgradeState) => void): () => void;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export { type ConfigureDesktopUpdatesInput, type DesktopArchitecture, type DesktopMinimumVersionApi, type DesktopPlatform, type DesktopProduct, type DesktopUpdateAdmissionRuntime, type DesktopUpdateChannel, type DesktopUpdatePolicy, type DesktopUpdateState, type DesktopUpdateStatus, type MandatoryDesktopUpdateSession, type MandatoryDesktopUpdateTarget, type MinimumVersionAppUpdateService, type MinimumVersionCheckRequest, type MinimumVersionCheckResponse, type MinimumVersionDecision, type MinimumVersionUpgradeError, type MinimumVersionUpgradePhase, type MinimumVersionUpgradeState, desktopProducts, desktopUpdateAdmissionIpcChannels, desktopUpdateChannels, desktopUpdatePolicies, desktopUpdateStatuses };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
desktopProducts,
|
|
3
|
+
desktopUpdateAdmissionIpcChannels,
|
|
4
|
+
desktopUpdateChannels,
|
|
5
|
+
desktopUpdatePolicies,
|
|
6
|
+
desktopUpdateStatuses
|
|
7
|
+
} from "../chunk-TRALK3GT.js";
|
|
8
|
+
export {
|
|
9
|
+
desktopProducts,
|
|
10
|
+
desktopUpdateAdmissionIpcChannels,
|
|
11
|
+
desktopUpdateChannels,
|
|
12
|
+
desktopUpdatePolicies,
|
|
13
|
+
desktopUpdateStatuses
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { DesktopPlatform, DesktopArchitecture, DesktopProduct, MinimumVersionCheckRequest, MinimumVersionCheckResponse } from '../contracts/index.js';
|
|
2
|
+
|
|
3
|
+
declare function updaterTargetMeetsMinimum(releaseVersion: string | null, minimumVersion: string): boolean;
|
|
4
|
+
declare function resolveMinimumVersionRuntimeTarget(platform: NodeJS.Platform, architecture: string): {
|
|
5
|
+
platform: DesktopPlatform;
|
|
6
|
+
architecture: DesktopArchitecture;
|
|
7
|
+
} | null;
|
|
8
|
+
declare function shouldCheckMinimumVersionAfterForeground(input: {
|
|
9
|
+
disposed: boolean;
|
|
10
|
+
checksEnabled: boolean;
|
|
11
|
+
foregroundCheckIntervalMs: number;
|
|
12
|
+
foregroundPrompted: boolean;
|
|
13
|
+
startupBlocked: boolean;
|
|
14
|
+
lastCheckAt: number;
|
|
15
|
+
now: number;
|
|
16
|
+
}): boolean;
|
|
17
|
+
declare function validateMinimumVersionResponse<TProduct extends DesktopProduct>(value: unknown, request: MinimumVersionCheckRequest<TProduct>): MinimumVersionCheckResponse<TProduct>;
|
|
18
|
+
|
|
19
|
+
export { resolveMinimumVersionRuntimeTarget, shouldCheckMinimumVersionAfterForeground, updaterTargetMeetsMinimum, validateMinimumVersionResponse };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import {
|
|
2
|
+
resolveMinimumVersionRuntimeTarget,
|
|
3
|
+
shouldCheckMinimumVersionAfterForeground,
|
|
4
|
+
updaterTargetMeetsMinimum,
|
|
5
|
+
validateMinimumVersionResponse
|
|
6
|
+
} from "../chunk-LV67FBCG.js";
|
|
7
|
+
export {
|
|
8
|
+
resolveMinimumVersionRuntimeTarget,
|
|
9
|
+
shouldCheckMinimumVersionAfterForeground,
|
|
10
|
+
updaterTargetMeetsMinimum,
|
|
11
|
+
validateMinimumVersionResponse
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { DesktopUpdateAdmissionRuntime, DesktopProduct, MinimumVersionCheckRequest, MinimumVersionCheckResponse } from '../contracts/index.js';
|
|
2
|
+
|
|
3
|
+
type DesktopUpdateDevelopmentPolicyOutcome = "allowed" | "upgradeRequired" | "disabled" | "unsupported" | "unmanagedPrerelease" | "error" | "timeout";
|
|
4
|
+
type DesktopUpdateDevelopmentPolicyMinimum = {
|
|
5
|
+
kind: "configured";
|
|
6
|
+
version: string;
|
|
7
|
+
} | {
|
|
8
|
+
kind: "requestCurrentVersion";
|
|
9
|
+
};
|
|
10
|
+
type DesktopUpdateDevelopmentPolicyStep = {
|
|
11
|
+
outcome: "allowed" | "upgradeRequired";
|
|
12
|
+
minimum: DesktopUpdateDevelopmentPolicyMinimum;
|
|
13
|
+
policySource: "defaultMinimum" | "platformOverride";
|
|
14
|
+
} | {
|
|
15
|
+
outcome: "disabled" | "unsupported" | "unmanagedPrerelease";
|
|
16
|
+
} | {
|
|
17
|
+
outcome: "error";
|
|
18
|
+
message: string;
|
|
19
|
+
} | {
|
|
20
|
+
outcome: "timeout";
|
|
21
|
+
};
|
|
22
|
+
interface DesktopUpdateDevelopmentPolicyScenario {
|
|
23
|
+
policySteps: readonly DesktopUpdateDevelopmentPolicyStep[];
|
|
24
|
+
}
|
|
25
|
+
declare function resolveDesktopUpdateDevelopmentPolicyScenario(input: {
|
|
26
|
+
env: Readonly<Record<string, string | undefined>>;
|
|
27
|
+
}): DesktopUpdateDevelopmentPolicyScenario | null;
|
|
28
|
+
|
|
29
|
+
type DesktopUpdateDevelopmentUpdaterScenario = {
|
|
30
|
+
check: "available" | "downloaded" | "targetBelowMinimum";
|
|
31
|
+
latestVersion: string;
|
|
32
|
+
download: "success" | "error";
|
|
33
|
+
install: "simulated" | "error";
|
|
34
|
+
} | {
|
|
35
|
+
check: "unavailable" | "error";
|
|
36
|
+
};
|
|
37
|
+
interface DesktopUpdateDevelopmentScenarioBase {
|
|
38
|
+
currentVersion: string;
|
|
39
|
+
foregroundCheckIntervalMs: number;
|
|
40
|
+
updater: DesktopUpdateDevelopmentUpdaterScenario;
|
|
41
|
+
}
|
|
42
|
+
type DesktopUpdateDevelopmentScenario = (DesktopUpdateDevelopmentScenarioBase & {
|
|
43
|
+
mockServerUrl: null;
|
|
44
|
+
policy: DesktopUpdateDevelopmentPolicyScenario;
|
|
45
|
+
transport: "in-process";
|
|
46
|
+
}) | (DesktopUpdateDevelopmentScenarioBase & {
|
|
47
|
+
mockServerUrl: string;
|
|
48
|
+
policy: null;
|
|
49
|
+
transport: "loopback";
|
|
50
|
+
});
|
|
51
|
+
interface DesktopUpdateDevelopmentResolution {
|
|
52
|
+
runtime: DesktopUpdateAdmissionRuntime;
|
|
53
|
+
scenario: DesktopUpdateDevelopmentScenario | null;
|
|
54
|
+
}
|
|
55
|
+
declare function resolveDesktopUpdateDevelopmentScenario(input: {
|
|
56
|
+
env: Readonly<Record<string, string | undefined>>;
|
|
57
|
+
isPackaged: boolean;
|
|
58
|
+
}): DesktopUpdateDevelopmentScenario | null;
|
|
59
|
+
declare function resolveDesktopUpdateAdmissionDevelopment(input: {
|
|
60
|
+
applicationVersion: string;
|
|
61
|
+
env: Readonly<Record<string, string | undefined>>;
|
|
62
|
+
isPackaged: boolean;
|
|
63
|
+
}): DesktopUpdateDevelopmentResolution;
|
|
64
|
+
|
|
65
|
+
type DriverDisposer = () => void;
|
|
66
|
+
interface DevelopmentUpdateInfo {
|
|
67
|
+
downloadedFile: string;
|
|
68
|
+
files: never[];
|
|
69
|
+
path: string;
|
|
70
|
+
releaseDate: string;
|
|
71
|
+
releaseName: string;
|
|
72
|
+
sha512: string;
|
|
73
|
+
version: string;
|
|
74
|
+
}
|
|
75
|
+
interface DevelopmentUpdateProgress {
|
|
76
|
+
bytesPerSecond: number;
|
|
77
|
+
delta: number;
|
|
78
|
+
percent: number;
|
|
79
|
+
total: number;
|
|
80
|
+
transferred: number;
|
|
81
|
+
}
|
|
82
|
+
interface DevelopmentAppUpdateDriver {
|
|
83
|
+
checkForUpdates(): Promise<void>;
|
|
84
|
+
configure(...args: unknown[]): void;
|
|
85
|
+
downloadUpdate(): Promise<void>;
|
|
86
|
+
onCheckingForUpdate(listener: () => void): DriverDisposer;
|
|
87
|
+
onDownloadProgress(listener: (progress: DevelopmentUpdateProgress) => void): DriverDisposer;
|
|
88
|
+
onError(listener: (error: Error) => void): DriverDisposer;
|
|
89
|
+
onUpdateAvailable(listener: (info: DevelopmentUpdateInfo) => void): DriverDisposer;
|
|
90
|
+
onUpdateDownloaded(listener: (info: DevelopmentUpdateInfo) => void): DriverDisposer;
|
|
91
|
+
onUpdateNotAvailable(listener: (info: DevelopmentUpdateInfo) => void): DriverDisposer;
|
|
92
|
+
quitAndInstall(): void;
|
|
93
|
+
setFeedUrl(_url: string): void;
|
|
94
|
+
}
|
|
95
|
+
declare class DevelopmentInstallSuppressedError extends Error {
|
|
96
|
+
constructor();
|
|
97
|
+
}
|
|
98
|
+
declare class DevelopmentInstallError extends Error {
|
|
99
|
+
constructor();
|
|
100
|
+
}
|
|
101
|
+
declare function completeDevelopmentUpdateInstallation(scenario: DesktopUpdateDevelopmentScenario): never;
|
|
102
|
+
declare function createDevelopmentAppUpdateDriver(scenario: DesktopUpdateDevelopmentScenario): DevelopmentAppUpdateDriver;
|
|
103
|
+
|
|
104
|
+
declare function createDevelopmentMinimumVersionChecker(policy: DesktopUpdateDevelopmentPolicyScenario, options?: {
|
|
105
|
+
expectedCurrentVersion?: string;
|
|
106
|
+
}): <TProduct extends DesktopProduct>(request: MinimumVersionCheckRequest<TProduct>, signal: AbortSignal) => Promise<MinimumVersionCheckResponse<TProduct>>;
|
|
107
|
+
|
|
108
|
+
interface DesktopUpdateDevelopmentMockServer {
|
|
109
|
+
readonly baseUrl: string;
|
|
110
|
+
close(): Promise<void>;
|
|
111
|
+
}
|
|
112
|
+
declare function startDesktopUpdateDevelopmentMockServer(input: {
|
|
113
|
+
port?: number;
|
|
114
|
+
policy: DesktopUpdateDevelopmentPolicyScenario;
|
|
115
|
+
}): Promise<DesktopUpdateDevelopmentMockServer>;
|
|
116
|
+
|
|
117
|
+
declare const desktopUpdateAdmissionDevelopmentEnvironment: {
|
|
118
|
+
readonly currentVersion: "DESKTOP_UPDATE_ADMISSION_CURRENT_VERSION";
|
|
119
|
+
readonly development: "DESKTOP_UPDATE_ADMISSION_DEV";
|
|
120
|
+
readonly download: "DESKTOP_UPDATE_ADMISSION_DOWNLOAD";
|
|
121
|
+
readonly foregroundIntervalMs: "DESKTOP_UPDATE_ADMISSION_FOREGROUND_INTERVAL_MS";
|
|
122
|
+
readonly install: "DESKTOP_UPDATE_ADMISSION_INSTALL";
|
|
123
|
+
readonly latestVersion: "DESKTOP_UPDATE_ADMISSION_LATEST_VERSION";
|
|
124
|
+
readonly minimumVersion: "DESKTOP_UPDATE_ADMISSION_MINIMUM_VERSION";
|
|
125
|
+
readonly mockServerUrl: "DESKTOP_UPDATE_ADMISSION_MOCK_SERVER_URL";
|
|
126
|
+
readonly policy: "DESKTOP_UPDATE_ADMISSION_POLICY";
|
|
127
|
+
readonly policySequence: "DESKTOP_UPDATE_ADMISSION_POLICY_SEQUENCE";
|
|
128
|
+
readonly scenario: "DESKTOP_UPDATE_ADMISSION_SCENARIO";
|
|
129
|
+
readonly transport: "DESKTOP_UPDATE_ADMISSION_TRANSPORT";
|
|
130
|
+
readonly updater: "DESKTOP_UPDATE_ADMISSION_UPDATER";
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
export { type DesktopUpdateDevelopmentMockServer, type DesktopUpdateDevelopmentPolicyMinimum, type DesktopUpdateDevelopmentPolicyOutcome, type DesktopUpdateDevelopmentPolicyScenario, type DesktopUpdateDevelopmentPolicyStep, type DesktopUpdateDevelopmentResolution, type DesktopUpdateDevelopmentScenario, type DesktopUpdateDevelopmentUpdaterScenario, type DevelopmentAppUpdateDriver, DevelopmentInstallError, DevelopmentInstallSuppressedError, type DevelopmentUpdateInfo, type DevelopmentUpdateProgress, completeDevelopmentUpdateInstallation, createDevelopmentAppUpdateDriver, createDevelopmentMinimumVersionChecker, desktopUpdateAdmissionDevelopmentEnvironment, resolveDesktopUpdateAdmissionDevelopment, resolveDesktopUpdateDevelopmentPolicyScenario, resolveDesktopUpdateDevelopmentScenario, startDesktopUpdateDevelopmentMockServer };
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import {
|
|
2
|
+
compareDevelopmentManagedVersions,
|
|
3
|
+
createDevelopmentMinimumVersionChecker,
|
|
4
|
+
desktopUpdateAdmissionDevelopmentEnvironment,
|
|
5
|
+
invalidDevelopmentScenario,
|
|
6
|
+
parseDevelopmentManagedVersion,
|
|
7
|
+
readDevelopmentEnabled,
|
|
8
|
+
readRequiredDevelopmentEnvironment,
|
|
9
|
+
resolveDesktopUpdateDevelopmentPolicyScenario,
|
|
10
|
+
startDesktopUpdateDevelopmentMockServer,
|
|
11
|
+
validateDevelopmentPolicyScenarioForCurrentVersion,
|
|
12
|
+
validateStrictDevelopmentSemVer
|
|
13
|
+
} from "../chunk-ZQTIYDGZ.js";
|
|
14
|
+
import {
|
|
15
|
+
DevelopmentInstallError,
|
|
16
|
+
DevelopmentInstallSuppressedError,
|
|
17
|
+
completeDevelopmentUpdateInstallation,
|
|
18
|
+
createDevelopmentAppUpdateDriver
|
|
19
|
+
} from "../chunk-X4U7GODT.js";
|
|
20
|
+
import "../chunk-LV67FBCG.js";
|
|
21
|
+
|
|
22
|
+
// src/development/scenario.ts
|
|
23
|
+
var productionForegroundCheckIntervalMs = 30 * 60 * 1e3;
|
|
24
|
+
function readForegroundInterval(env) {
|
|
25
|
+
const name = desktopUpdateAdmissionDevelopmentEnvironment.foregroundIntervalMs;
|
|
26
|
+
const raw = env[name]?.trim();
|
|
27
|
+
if (!raw) {
|
|
28
|
+
return productionForegroundCheckIntervalMs;
|
|
29
|
+
}
|
|
30
|
+
const value = Number(raw);
|
|
31
|
+
if (!Number.isSafeInteger(value) || value < 100) {
|
|
32
|
+
return invalidDevelopmentScenario(
|
|
33
|
+
`${name} must be an integer greater than or equal to 100`
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
function resolveUpdater(env, options) {
|
|
39
|
+
const names = desktopUpdateAdmissionDevelopmentEnvironment;
|
|
40
|
+
if (options.preset) {
|
|
41
|
+
for (const conflictingName of [
|
|
42
|
+
names.updater,
|
|
43
|
+
names.download,
|
|
44
|
+
names.install
|
|
45
|
+
]) {
|
|
46
|
+
if (env[conflictingName]?.trim()) {
|
|
47
|
+
return invalidDevelopmentScenario(
|
|
48
|
+
`${names.scenario} and ${conflictingName} are mutually exclusive`
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const configured = env[names.updater]?.trim();
|
|
54
|
+
const check = options.preset === "startup-updater-unavailable" ? "unavailable" : options.preset === "startup-target-below-minimum" ? "targetBelowMinimum" : options.preset === "retry-policy-released" ? "error" : configured || options.defaultCheck;
|
|
55
|
+
if (check === "unavailable" || check === "error") {
|
|
56
|
+
return { check };
|
|
57
|
+
}
|
|
58
|
+
if (check !== "available" && check !== "downloaded" && check !== "targetBelowMinimum") {
|
|
59
|
+
return invalidDevelopmentScenario(
|
|
60
|
+
`unknown updater outcome ${JSON.stringify(check)}`
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
const download = options.preset === "startup-download-error" ? "error" : env[names.download]?.trim() || "success";
|
|
64
|
+
if (download !== "success" && download !== "error") {
|
|
65
|
+
return invalidDevelopmentScenario(
|
|
66
|
+
`${names.download} must be success or error`
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
const install = env[names.install]?.trim() || "simulated";
|
|
70
|
+
if (install !== "simulated" && install !== "error") {
|
|
71
|
+
return invalidDevelopmentScenario(
|
|
72
|
+
`${names.install} must be simulated or error`
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
check,
|
|
77
|
+
download,
|
|
78
|
+
install,
|
|
79
|
+
latestVersion: validateStrictDevelopmentSemVer(
|
|
80
|
+
readRequiredDevelopmentEnvironment(env, names.latestVersion),
|
|
81
|
+
names.latestVersion
|
|
82
|
+
)
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function validateLoopbackUrl(raw) {
|
|
86
|
+
let parsed;
|
|
87
|
+
try {
|
|
88
|
+
parsed = new URL(raw);
|
|
89
|
+
} catch {
|
|
90
|
+
return invalidDevelopmentScenario("mock server URL must be a valid URL");
|
|
91
|
+
}
|
|
92
|
+
if (parsed.protocol !== "http:" || parsed.hostname !== "127.0.0.1" || parsed.username || parsed.password || parsed.search || parsed.hash || parsed.pathname !== "" && parsed.pathname !== "/") {
|
|
93
|
+
return invalidDevelopmentScenario(
|
|
94
|
+
"mock server URL must be an http://127.0.0.1 origin"
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
return parsed.origin;
|
|
98
|
+
}
|
|
99
|
+
function rejectLoopbackPolicyEnvironment(env) {
|
|
100
|
+
const names = desktopUpdateAdmissionDevelopmentEnvironment;
|
|
101
|
+
for (const name of [
|
|
102
|
+
names.minimumVersion,
|
|
103
|
+
names.policy,
|
|
104
|
+
names.policySequence,
|
|
105
|
+
names.scenario
|
|
106
|
+
]) {
|
|
107
|
+
if (env[name]?.trim()) {
|
|
108
|
+
invalidDevelopmentScenario(
|
|
109
|
+
`${name} belongs to the loopback mock server, not the client`
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function validateUpdater(updater, currentVersion) {
|
|
115
|
+
if (!("latestVersion" in updater)) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const current = parseDevelopmentManagedVersion(currentVersion);
|
|
119
|
+
if (!current) {
|
|
120
|
+
invalidDevelopmentScenario(
|
|
121
|
+
"an available updater requires a managed currentVersion"
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
const latest = parseDevelopmentManagedVersion(updater.latestVersion);
|
|
125
|
+
if (!latest || latest.channel !== current.channel) {
|
|
126
|
+
invalidDevelopmentScenario(
|
|
127
|
+
`latestVersion must use the ${current.channel} channel`
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
if (compareDevelopmentManagedVersions(latest, current) <= 0) {
|
|
131
|
+
invalidDevelopmentScenario(
|
|
132
|
+
"an available updater requires latestVersion above currentVersion"
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function validateInProcessCoherence(scenario) {
|
|
137
|
+
validateDevelopmentPolicyScenarioForCurrentVersion(
|
|
138
|
+
scenario.policy,
|
|
139
|
+
scenario.currentVersion
|
|
140
|
+
);
|
|
141
|
+
const updater = scenario.updater;
|
|
142
|
+
if (!("latestVersion" in updater)) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const latest = parseDevelopmentManagedVersion(updater.latestVersion);
|
|
146
|
+
const requiredSteps = scenario.policy.policySteps.filter(
|
|
147
|
+
(step) => step.outcome === "upgradeRequired"
|
|
148
|
+
);
|
|
149
|
+
const configuredRequiredVersions = requiredSteps.map((step) => {
|
|
150
|
+
if (step.minimum.kind !== "configured") {
|
|
151
|
+
return invalidDevelopmentScenario(
|
|
152
|
+
"upgradeRequired policy must configure a minimumVersion"
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
return parseDevelopmentManagedVersion(step.minimum.version);
|
|
156
|
+
});
|
|
157
|
+
if (updater.check === "targetBelowMinimum") {
|
|
158
|
+
const minimum = configuredRequiredVersions[0];
|
|
159
|
+
if (!minimum) {
|
|
160
|
+
invalidDevelopmentScenario(
|
|
161
|
+
"targetBelowMinimum requires an upgradeRequired policy step"
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
if (compareDevelopmentManagedVersions(latest, minimum) >= 0) {
|
|
165
|
+
invalidDevelopmentScenario(
|
|
166
|
+
"targetBelowMinimum requires latestVersion below minimumVersion"
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
for (const minimum of configuredRequiredVersions) {
|
|
172
|
+
if (compareDevelopmentManagedVersions(latest, minimum) < 0) {
|
|
173
|
+
invalidDevelopmentScenario(
|
|
174
|
+
"available latestVersion must satisfy every upgradeRequired step"
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
function resolveDesktopUpdateDevelopmentScenario(input) {
|
|
180
|
+
if (input.isPackaged || !readDevelopmentEnabled(input.env)) {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
const names = desktopUpdateAdmissionDevelopmentEnvironment;
|
|
184
|
+
const currentVersion = validateStrictDevelopmentSemVer(
|
|
185
|
+
readRequiredDevelopmentEnvironment(input.env, names.currentVersion),
|
|
186
|
+
names.currentVersion
|
|
187
|
+
);
|
|
188
|
+
const transport = input.env[names.transport]?.trim() || "in-process";
|
|
189
|
+
if (transport !== "in-process" && transport !== "loopback") {
|
|
190
|
+
return invalidDevelopmentScenario(
|
|
191
|
+
`${names.transport} must be in-process or loopback`
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
if (transport === "loopback") {
|
|
195
|
+
rejectLoopbackPolicyEnvironment(input.env);
|
|
196
|
+
}
|
|
197
|
+
const preset = transport === "in-process" ? input.env[names.scenario]?.trim() : void 0;
|
|
198
|
+
const foregroundCheckIntervalMs = readForegroundInterval(input.env);
|
|
199
|
+
const updater = resolveUpdater(input.env, {
|
|
200
|
+
defaultCheck: transport === "in-process" ? "available" : "unavailable",
|
|
201
|
+
preset
|
|
202
|
+
});
|
|
203
|
+
const scenario = transport === "in-process" ? {
|
|
204
|
+
currentVersion,
|
|
205
|
+
foregroundCheckIntervalMs,
|
|
206
|
+
mockServerUrl: null,
|
|
207
|
+
policy: resolveDesktopUpdateDevelopmentPolicyScenario({
|
|
208
|
+
env: input.env
|
|
209
|
+
}) ?? invalidDevelopmentScenario(
|
|
210
|
+
"in-process transport requires a local policy scenario"
|
|
211
|
+
),
|
|
212
|
+
transport,
|
|
213
|
+
updater
|
|
214
|
+
} : {
|
|
215
|
+
currentVersion,
|
|
216
|
+
foregroundCheckIntervalMs,
|
|
217
|
+
mockServerUrl: validateLoopbackUrl(
|
|
218
|
+
readRequiredDevelopmentEnvironment(input.env, names.mockServerUrl)
|
|
219
|
+
),
|
|
220
|
+
policy: null,
|
|
221
|
+
transport,
|
|
222
|
+
updater
|
|
223
|
+
};
|
|
224
|
+
validateUpdater(scenario.updater, currentVersion);
|
|
225
|
+
if (scenario.transport === "in-process") {
|
|
226
|
+
validateInProcessCoherence(scenario);
|
|
227
|
+
}
|
|
228
|
+
if (scenario.transport === "in-process") {
|
|
229
|
+
return Object.freeze({
|
|
230
|
+
...scenario,
|
|
231
|
+
updater: Object.freeze({ ...scenario.updater })
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
return Object.freeze({
|
|
235
|
+
...scenario,
|
|
236
|
+
updater: Object.freeze({ ...scenario.updater })
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
function resolveDesktopUpdateAdmissionDevelopment(input) {
|
|
240
|
+
const applicationVersion = input.applicationVersion.trim();
|
|
241
|
+
if (!applicationVersion) {
|
|
242
|
+
throw new Error("desktop application version is required");
|
|
243
|
+
}
|
|
244
|
+
const scenario = resolveDesktopUpdateDevelopmentScenario(input);
|
|
245
|
+
if (input.isPackaged) {
|
|
246
|
+
return {
|
|
247
|
+
runtime: {
|
|
248
|
+
checksEnabled: true,
|
|
249
|
+
currentVersion: applicationVersion,
|
|
250
|
+
development: false,
|
|
251
|
+
foregroundCheckIntervalMs: productionForegroundCheckIntervalMs
|
|
252
|
+
},
|
|
253
|
+
scenario: null
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
if (!scenario) {
|
|
257
|
+
return {
|
|
258
|
+
runtime: {
|
|
259
|
+
checksEnabled: false,
|
|
260
|
+
currentVersion: applicationVersion,
|
|
261
|
+
development: false,
|
|
262
|
+
foregroundCheckIntervalMs: productionForegroundCheckIntervalMs
|
|
263
|
+
},
|
|
264
|
+
scenario: null
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
return {
|
|
268
|
+
runtime: {
|
|
269
|
+
checksEnabled: true,
|
|
270
|
+
currentVersion: scenario.currentVersion,
|
|
271
|
+
development: true,
|
|
272
|
+
foregroundCheckIntervalMs: scenario.foregroundCheckIntervalMs
|
|
273
|
+
},
|
|
274
|
+
scenario
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
export {
|
|
278
|
+
DevelopmentInstallError,
|
|
279
|
+
DevelopmentInstallSuppressedError,
|
|
280
|
+
completeDevelopmentUpdateInstallation,
|
|
281
|
+
createDevelopmentAppUpdateDriver,
|
|
282
|
+
createDevelopmentMinimumVersionChecker,
|
|
283
|
+
desktopUpdateAdmissionDevelopmentEnvironment,
|
|
284
|
+
resolveDesktopUpdateAdmissionDevelopment,
|
|
285
|
+
resolveDesktopUpdateDevelopmentPolicyScenario,
|
|
286
|
+
resolveDesktopUpdateDevelopmentScenario,
|
|
287
|
+
startDesktopUpdateDevelopmentMockServer
|
|
288
|
+
};
|
|
289
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/development/scenario.ts"],"sourcesContent":["import type { DesktopUpdateAdmissionRuntime } from \"../contracts/index.ts\";\nimport {\n desktopUpdateAdmissionDevelopmentEnvironment,\n invalidDevelopmentScenario,\n readDevelopmentEnabled,\n readRequiredDevelopmentEnvironment\n} from \"./environment.ts\";\nimport {\n resolveDesktopUpdateDevelopmentPolicyScenario,\n type DesktopUpdateDevelopmentPolicyMinimum,\n type DesktopUpdateDevelopmentPolicyScenario,\n type DesktopUpdateDevelopmentPolicyStep,\n validateDevelopmentPolicyScenarioForCurrentVersion\n} from \"./policyScenario.ts\";\nimport {\n compareDevelopmentManagedVersions,\n parseDevelopmentManagedVersion,\n validateStrictDevelopmentSemVer\n} from \"./version.ts\";\n\nexport type DesktopUpdateDevelopmentUpdaterScenario =\n | {\n check: \"available\" | \"downloaded\" | \"targetBelowMinimum\";\n latestVersion: string;\n download: \"success\" | \"error\";\n install: \"simulated\" | \"error\";\n }\n | {\n check: \"unavailable\" | \"error\";\n };\n\ninterface DesktopUpdateDevelopmentScenarioBase {\n currentVersion: string;\n foregroundCheckIntervalMs: number;\n updater: DesktopUpdateDevelopmentUpdaterScenario;\n}\n\nexport type DesktopUpdateDevelopmentScenario =\n | (DesktopUpdateDevelopmentScenarioBase & {\n mockServerUrl: null;\n policy: DesktopUpdateDevelopmentPolicyScenario;\n transport: \"in-process\";\n })\n | (DesktopUpdateDevelopmentScenarioBase & {\n mockServerUrl: string;\n policy: null;\n transport: \"loopback\";\n });\n\nexport interface DesktopUpdateDevelopmentResolution {\n runtime: DesktopUpdateAdmissionRuntime;\n scenario: DesktopUpdateDevelopmentScenario | null;\n}\n\nconst productionForegroundCheckIntervalMs = 30 * 60 * 1_000;\n\nfunction readForegroundInterval(\n env: Readonly<Record<string, string | undefined>>\n): number {\n const name =\n desktopUpdateAdmissionDevelopmentEnvironment.foregroundIntervalMs;\n const raw = env[name]?.trim();\n if (!raw) {\n return productionForegroundCheckIntervalMs;\n }\n const value = Number(raw);\n if (!Number.isSafeInteger(value) || value < 100) {\n return invalidDevelopmentScenario(\n `${name} must be an integer greater than or equal to 100`\n );\n }\n return value;\n}\n\nfunction resolveUpdater(\n env: Readonly<Record<string, string | undefined>>,\n options: {\n defaultCheck: \"available\" | \"unavailable\";\n preset: string | undefined;\n }\n): DesktopUpdateDevelopmentUpdaterScenario {\n const names = desktopUpdateAdmissionDevelopmentEnvironment;\n if (options.preset) {\n for (const conflictingName of [\n names.updater,\n names.download,\n names.install\n ]) {\n if (env[conflictingName]?.trim()) {\n return invalidDevelopmentScenario(\n `${names.scenario} and ${conflictingName} are mutually exclusive`\n );\n }\n }\n }\n const configured = env[names.updater]?.trim();\n const check =\n options.preset === \"startup-updater-unavailable\"\n ? \"unavailable\"\n : options.preset === \"startup-target-below-minimum\"\n ? \"targetBelowMinimum\"\n : options.preset === \"retry-policy-released\"\n ? \"error\"\n : configured || options.defaultCheck;\n if (check === \"unavailable\" || check === \"error\") {\n return { check };\n }\n if (\n check !== \"available\" &&\n check !== \"downloaded\" &&\n check !== \"targetBelowMinimum\"\n ) {\n return invalidDevelopmentScenario(\n `unknown updater outcome ${JSON.stringify(check)}`\n );\n }\n const download =\n options.preset === \"startup-download-error\"\n ? \"error\"\n : env[names.download]?.trim() || \"success\";\n if (download !== \"success\" && download !== \"error\") {\n return invalidDevelopmentScenario(\n `${names.download} must be success or error`\n );\n }\n const install = env[names.install]?.trim() || \"simulated\";\n if (install !== \"simulated\" && install !== \"error\") {\n return invalidDevelopmentScenario(\n `${names.install} must be simulated or error`\n );\n }\n return {\n check,\n download,\n install,\n latestVersion: validateStrictDevelopmentSemVer(\n readRequiredDevelopmentEnvironment(env, names.latestVersion),\n names.latestVersion\n )\n };\n}\n\nfunction validateLoopbackUrl(raw: string): string {\n let parsed: URL;\n try {\n parsed = new URL(raw);\n } catch {\n return invalidDevelopmentScenario(\"mock server URL must be a valid URL\");\n }\n if (\n parsed.protocol !== \"http:\" ||\n parsed.hostname !== \"127.0.0.1\" ||\n parsed.username ||\n parsed.password ||\n parsed.search ||\n parsed.hash ||\n (parsed.pathname !== \"\" && parsed.pathname !== \"/\")\n ) {\n return invalidDevelopmentScenario(\n \"mock server URL must be an http://127.0.0.1 origin\"\n );\n }\n return parsed.origin;\n}\n\nfunction rejectLoopbackPolicyEnvironment(\n env: Readonly<Record<string, string | undefined>>\n): void {\n const names = desktopUpdateAdmissionDevelopmentEnvironment;\n for (const name of [\n names.minimumVersion,\n names.policy,\n names.policySequence,\n names.scenario\n ]) {\n if (env[name]?.trim()) {\n invalidDevelopmentScenario(\n `${name} belongs to the loopback mock server, not the client`\n );\n }\n }\n}\n\nfunction validateUpdater(\n updater: DesktopUpdateDevelopmentUpdaterScenario,\n currentVersion: string\n): void {\n if (!(\"latestVersion\" in updater)) {\n return;\n }\n const current = parseDevelopmentManagedVersion(currentVersion);\n if (!current) {\n invalidDevelopmentScenario(\n \"an available updater requires a managed currentVersion\"\n );\n }\n const latest = parseDevelopmentManagedVersion(updater.latestVersion);\n if (!latest || latest.channel !== current.channel) {\n invalidDevelopmentScenario(\n `latestVersion must use the ${current.channel} channel`\n );\n }\n if (compareDevelopmentManagedVersions(latest, current) <= 0) {\n invalidDevelopmentScenario(\n \"an available updater requires latestVersion above currentVersion\"\n );\n }\n}\n\nfunction validateInProcessCoherence(\n scenario: Extract<\n DesktopUpdateDevelopmentScenario,\n { transport: \"in-process\" }\n >\n): void {\n validateDevelopmentPolicyScenarioForCurrentVersion(\n scenario.policy,\n scenario.currentVersion\n );\n const updater = scenario.updater;\n if (!(\"latestVersion\" in updater)) {\n return;\n }\n const latest = parseDevelopmentManagedVersion(updater.latestVersion)!;\n const requiredSteps = scenario.policy.policySteps.filter(\n (\n step\n ): step is DesktopUpdateDevelopmentPolicyStep & {\n minimum: DesktopUpdateDevelopmentPolicyMinimum;\n outcome: \"upgradeRequired\";\n } => step.outcome === \"upgradeRequired\"\n );\n const configuredRequiredVersions = requiredSteps.map((step) => {\n if (step.minimum.kind !== \"configured\") {\n return invalidDevelopmentScenario(\n \"upgradeRequired policy must configure a minimumVersion\"\n );\n }\n return parseDevelopmentManagedVersion(step.minimum.version)!;\n });\n if (updater.check === \"targetBelowMinimum\") {\n const minimum = configuredRequiredVersions[0];\n if (!minimum) {\n invalidDevelopmentScenario(\n \"targetBelowMinimum requires an upgradeRequired policy step\"\n );\n }\n if (compareDevelopmentManagedVersions(latest, minimum) >= 0) {\n invalidDevelopmentScenario(\n \"targetBelowMinimum requires latestVersion below minimumVersion\"\n );\n }\n return;\n }\n for (const minimum of configuredRequiredVersions) {\n if (compareDevelopmentManagedVersions(latest, minimum) < 0) {\n invalidDevelopmentScenario(\n \"available latestVersion must satisfy every upgradeRequired step\"\n );\n }\n }\n}\n\nexport function resolveDesktopUpdateDevelopmentScenario(input: {\n env: Readonly<Record<string, string | undefined>>;\n isPackaged: boolean;\n}): DesktopUpdateDevelopmentScenario | null {\n if (input.isPackaged || !readDevelopmentEnabled(input.env)) {\n return null;\n }\n const names = desktopUpdateAdmissionDevelopmentEnvironment;\n const currentVersion = validateStrictDevelopmentSemVer(\n readRequiredDevelopmentEnvironment(input.env, names.currentVersion),\n names.currentVersion\n );\n const transport = input.env[names.transport]?.trim() || \"in-process\";\n if (transport !== \"in-process\" && transport !== \"loopback\") {\n return invalidDevelopmentScenario(\n `${names.transport} must be in-process or loopback`\n );\n }\n if (transport === \"loopback\") {\n rejectLoopbackPolicyEnvironment(input.env);\n }\n const preset =\n transport === \"in-process\" ? input.env[names.scenario]?.trim() : undefined;\n const foregroundCheckIntervalMs = readForegroundInterval(input.env);\n const updater = resolveUpdater(input.env, {\n defaultCheck: transport === \"in-process\" ? \"available\" : \"unavailable\",\n preset\n });\n const scenario: DesktopUpdateDevelopmentScenario =\n transport === \"in-process\"\n ? {\n currentVersion,\n foregroundCheckIntervalMs,\n mockServerUrl: null,\n policy:\n resolveDesktopUpdateDevelopmentPolicyScenario({\n env: input.env\n }) ??\n invalidDevelopmentScenario(\n \"in-process transport requires a local policy scenario\"\n ),\n transport,\n updater\n }\n : {\n currentVersion,\n foregroundCheckIntervalMs,\n mockServerUrl: validateLoopbackUrl(\n readRequiredDevelopmentEnvironment(input.env, names.mockServerUrl)\n ),\n policy: null,\n transport,\n updater\n };\n validateUpdater(scenario.updater, currentVersion);\n if (scenario.transport === \"in-process\") {\n validateInProcessCoherence(scenario);\n }\n if (scenario.transport === \"in-process\") {\n return Object.freeze({\n ...scenario,\n updater: Object.freeze({ ...scenario.updater })\n });\n }\n return Object.freeze({\n ...scenario,\n updater: Object.freeze({ ...scenario.updater })\n });\n}\n\nexport function resolveDesktopUpdateAdmissionDevelopment(input: {\n applicationVersion: string;\n env: Readonly<Record<string, string | undefined>>;\n isPackaged: boolean;\n}): DesktopUpdateDevelopmentResolution {\n const applicationVersion = input.applicationVersion.trim();\n if (!applicationVersion) {\n throw new Error(\"desktop application version is required\");\n }\n const scenario = resolveDesktopUpdateDevelopmentScenario(input);\n if (input.isPackaged) {\n return {\n runtime: {\n checksEnabled: true,\n currentVersion: applicationVersion,\n development: false,\n foregroundCheckIntervalMs: productionForegroundCheckIntervalMs\n },\n scenario: null\n };\n }\n if (!scenario) {\n return {\n runtime: {\n checksEnabled: false,\n currentVersion: applicationVersion,\n development: false,\n foregroundCheckIntervalMs: productionForegroundCheckIntervalMs\n },\n scenario: null\n };\n }\n return {\n runtime: {\n checksEnabled: true,\n currentVersion: scenario.currentVersion,\n development: true,\n foregroundCheckIntervalMs: scenario.foregroundCheckIntervalMs\n },\n scenario\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|