@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.
Files changed (43) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +112 -0
  3. package/dist/chunk-GONYAEKF.js +139 -0
  4. package/dist/chunk-GONYAEKF.js.map +1 -0
  5. package/dist/chunk-LV67FBCG.js +112 -0
  6. package/dist/chunk-LV67FBCG.js.map +1 -0
  7. package/dist/chunk-TRALK3GT.js +33 -0
  8. package/dist/chunk-TRALK3GT.js.map +1 -0
  9. package/dist/chunk-X4U7GODT.js +134 -0
  10. package/dist/chunk-X4U7GODT.js.map +1 -0
  11. package/dist/chunk-ZQTIYDGZ.js +603 -0
  12. package/dist/chunk-ZQTIYDGZ.js.map +1 -0
  13. package/dist/contracts/index.d.ts +97 -0
  14. package/dist/contracts/index.js +15 -0
  15. package/dist/contracts/index.js.map +1 -0
  16. package/dist/core/index.d.ts +19 -0
  17. package/dist/core/index.js +13 -0
  18. package/dist/core/index.js.map +1 -0
  19. package/dist/development/index.d.ts +133 -0
  20. package/dist/development/index.js +289 -0
  21. package/dist/development/index.js.map +1 -0
  22. package/dist/development/mock-server-cli.d.ts +1 -0
  23. package/dist/development/mock-server-cli.js +67 -0
  24. package/dist/development/mock-server-cli.js.map +1 -0
  25. package/dist/electron-main/index.d.ts +38 -0
  26. package/dist/electron-main/index.js +498 -0
  27. package/dist/electron-main/index.js.map +1 -0
  28. package/dist/i18n/index.d.ts +64 -0
  29. package/dist/i18n/index.js +74 -0
  30. package/dist/i18n/index.js.map +1 -0
  31. package/dist/index.d.ts +2 -0
  32. package/dist/index.js +25 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/mandatory-updater/index.d.ts +23 -0
  35. package/dist/mandatory-updater/index.js +10 -0
  36. package/dist/mandatory-updater/index.js.map +1 -0
  37. package/dist/preload/index.d.ts +9 -0
  38. package/dist/preload/index.js +30 -0
  39. package/dist/preload/index.js.map +1 -0
  40. package/dist/react/index.d.ts +13 -0
  41. package/dist/react/index.js +116 -0
  42. package/dist/react/index.js.map +1 -0
  43. package/package.json +98 -0
@@ -0,0 +1,64 @@
1
+ import { I18nRuntime, I18nDictionary } from '@tutti-os/ui-i18n-runtime';
2
+
3
+ type MinimumVersionAdmissionLocale = "en" | "zh-CN";
4
+ type MinimumVersionAdmissionI18nKey = "startupTitle" | "startupDetail" | "foregroundTitle" | "foregroundDetail" | "checkingTitle" | "downloadingTitle" | "failedTitle" | "simulationCompleteTitle" | "simulationCompleteDetail" | "currentVersion" | "minimumVersion" | "downloadProgress" | "autoRestartNotice" | "upgrade" | "upgradeNow" | "later" | "retry" | "manualDownload" | "exit" | "errors.releaseBelowMinimum" | "errors.updateUnavailable" | "errors.policyCheckFailed" | "errors.installFailed" | "errors.updateFailed";
5
+ type MinimumVersionAdmissionI18nRuntime = I18nRuntime<MinimumVersionAdmissionI18nKey>;
6
+ declare const minimumVersionAdmissionEn: {
7
+ readonly startupTitle: "A required {{productName}} update is available";
8
+ readonly startupDetail: "Update {{productName}} before continuing. Your regular update preference will not be changed.";
9
+ readonly foregroundTitle: "A required {{productName}} update is available";
10
+ readonly foregroundDetail: "Update Now automatically installs and restarts after downloading. You can also continue this session and update next time.";
11
+ readonly checkingTitle: "Checking the required update";
12
+ readonly downloadingTitle: "Downloading the required update";
13
+ readonly failedTitle: "Unable to complete the required update";
14
+ readonly simulationCompleteTitle: "Development update simulation completed";
15
+ readonly simulationCompleteDetail: "The update reached the installation step. Development mode will not install or restart {{productName}}.";
16
+ readonly currentVersion: "Current version";
17
+ readonly minimumVersion: "Minimum version";
18
+ readonly downloadProgress: "Download progress";
19
+ readonly autoRestartNotice: "{{productName}} will install the update and restart automatically when the download completes.";
20
+ readonly upgrade: "Upgrade";
21
+ readonly upgradeNow: "Upgrade now";
22
+ readonly later: "Later";
23
+ readonly retry: "Retry";
24
+ readonly manualDownload: "Manual download";
25
+ readonly exit: "Exit";
26
+ readonly errors: {
27
+ readonly releaseBelowMinimum: "The latest published update is below the required minimum version.";
28
+ readonly updateUnavailable: "No suitable update is available from the release source.";
29
+ readonly policyCheckFailed: "The minimum-version policy could not be checked.";
30
+ readonly installFailed: "The update was downloaded but could not be installed.";
31
+ readonly updateFailed: "The update could not be downloaded or verified.";
32
+ };
33
+ };
34
+ declare const minimumVersionAdmissionZhCN: {
35
+ readonly startupTitle: "{{productName}} 必须更新后才能继续";
36
+ readonly startupDetail: "请先更新 {{productName}},普通更新偏好不会被修改";
37
+ readonly foregroundTitle: "{{productName}} 有必须安装的更新";
38
+ readonly foregroundDetail: "立即升级会在下载完成后自动安装并重启,你也可以继续本次会话并在下次启动时更新";
39
+ readonly checkingTitle: "正在检查必须安装的更新";
40
+ readonly downloadingTitle: "正在下载必须安装的更新";
41
+ readonly failedTitle: "无法完成必须安装的更新";
42
+ readonly simulationCompleteTitle: "开发更新模拟已完成";
43
+ readonly simulationCompleteDetail: "更新流程已到达安装阶段,开发模式不会实际安装或重启 {{productName}}";
44
+ readonly currentVersion: "当前版本";
45
+ readonly minimumVersion: "最低版本";
46
+ readonly downloadProgress: "下载进度";
47
+ readonly autoRestartNotice: "下载完成后,{{productName}} 将自动安装更新并重启";
48
+ readonly upgrade: "升级";
49
+ readonly upgradeNow: "立即升级";
50
+ readonly later: "稍后";
51
+ readonly retry: "重试";
52
+ readonly manualDownload: "手动下载";
53
+ readonly exit: "退出";
54
+ readonly errors: {
55
+ readonly releaseBelowMinimum: "当前发布的最新版本仍低于要求的最低版本";
56
+ readonly updateUnavailable: "发布源中没有可用的更新";
57
+ readonly policyCheckFailed: "无法检查最低版本策略,请检查网络后重试";
58
+ readonly installFailed: "更新已下载,但无法安装";
59
+ readonly updateFailed: "更新下载或校验失败";
60
+ };
61
+ };
62
+ declare function createMinimumVersionAdmissionI18nRuntime(locale: MinimumVersionAdmissionLocale, overrides?: I18nDictionary): MinimumVersionAdmissionI18nRuntime;
63
+
64
+ export { type MinimumVersionAdmissionI18nKey, type MinimumVersionAdmissionI18nRuntime, type MinimumVersionAdmissionLocale, createMinimumVersionAdmissionI18nRuntime, minimumVersionAdmissionEn, minimumVersionAdmissionZhCN };
@@ -0,0 +1,74 @@
1
+ // src/i18n/minimumVersionAdmissionI18n.ts
2
+ import {
3
+ createI18nRuntime
4
+ } from "@tutti-os/ui-i18n-runtime";
5
+ var minimumVersionAdmissionEn = {
6
+ startupTitle: "A required {{productName}} update is available",
7
+ startupDetail: "Update {{productName}} before continuing. Your regular update preference will not be changed.",
8
+ foregroundTitle: "A required {{productName}} update is available",
9
+ foregroundDetail: "Update Now automatically installs and restarts after downloading. You can also continue this session and update next time.",
10
+ checkingTitle: "Checking the required update",
11
+ downloadingTitle: "Downloading the required update",
12
+ failedTitle: "Unable to complete the required update",
13
+ simulationCompleteTitle: "Development update simulation completed",
14
+ simulationCompleteDetail: "The update reached the installation step. Development mode will not install or restart {{productName}}.",
15
+ currentVersion: "Current version",
16
+ minimumVersion: "Minimum version",
17
+ downloadProgress: "Download progress",
18
+ autoRestartNotice: "{{productName}} will install the update and restart automatically when the download completes.",
19
+ upgrade: "Upgrade",
20
+ upgradeNow: "Upgrade now",
21
+ later: "Later",
22
+ retry: "Retry",
23
+ manualDownload: "Manual download",
24
+ exit: "Exit",
25
+ errors: {
26
+ releaseBelowMinimum: "The latest published update is below the required minimum version.",
27
+ updateUnavailable: "No suitable update is available from the release source.",
28
+ policyCheckFailed: "The minimum-version policy could not be checked.",
29
+ installFailed: "The update was downloaded but could not be installed.",
30
+ updateFailed: "The update could not be downloaded or verified."
31
+ }
32
+ };
33
+ var minimumVersionAdmissionZhCN = {
34
+ startupTitle: "{{productName}} \u5FC5\u987B\u66F4\u65B0\u540E\u624D\u80FD\u7EE7\u7EED",
35
+ startupDetail: "\u8BF7\u5148\u66F4\u65B0 {{productName}}\uFF0C\u666E\u901A\u66F4\u65B0\u504F\u597D\u4E0D\u4F1A\u88AB\u4FEE\u6539",
36
+ foregroundTitle: "{{productName}} \u6709\u5FC5\u987B\u5B89\u88C5\u7684\u66F4\u65B0",
37
+ foregroundDetail: "\u7ACB\u5373\u5347\u7EA7\u4F1A\u5728\u4E0B\u8F7D\u5B8C\u6210\u540E\u81EA\u52A8\u5B89\u88C5\u5E76\u91CD\u542F\uFF0C\u4F60\u4E5F\u53EF\u4EE5\u7EE7\u7EED\u672C\u6B21\u4F1A\u8BDD\u5E76\u5728\u4E0B\u6B21\u542F\u52A8\u65F6\u66F4\u65B0",
38
+ checkingTitle: "\u6B63\u5728\u68C0\u67E5\u5FC5\u987B\u5B89\u88C5\u7684\u66F4\u65B0",
39
+ downloadingTitle: "\u6B63\u5728\u4E0B\u8F7D\u5FC5\u987B\u5B89\u88C5\u7684\u66F4\u65B0",
40
+ failedTitle: "\u65E0\u6CD5\u5B8C\u6210\u5FC5\u987B\u5B89\u88C5\u7684\u66F4\u65B0",
41
+ simulationCompleteTitle: "\u5F00\u53D1\u66F4\u65B0\u6A21\u62DF\u5DF2\u5B8C\u6210",
42
+ simulationCompleteDetail: "\u66F4\u65B0\u6D41\u7A0B\u5DF2\u5230\u8FBE\u5B89\u88C5\u9636\u6BB5\uFF0C\u5F00\u53D1\u6A21\u5F0F\u4E0D\u4F1A\u5B9E\u9645\u5B89\u88C5\u6216\u91CD\u542F {{productName}}",
43
+ currentVersion: "\u5F53\u524D\u7248\u672C",
44
+ minimumVersion: "\u6700\u4F4E\u7248\u672C",
45
+ downloadProgress: "\u4E0B\u8F7D\u8FDB\u5EA6",
46
+ autoRestartNotice: "\u4E0B\u8F7D\u5B8C\u6210\u540E\uFF0C{{productName}} \u5C06\u81EA\u52A8\u5B89\u88C5\u66F4\u65B0\u5E76\u91CD\u542F",
47
+ upgrade: "\u5347\u7EA7",
48
+ upgradeNow: "\u7ACB\u5373\u5347\u7EA7",
49
+ later: "\u7A0D\u540E",
50
+ retry: "\u91CD\u8BD5",
51
+ manualDownload: "\u624B\u52A8\u4E0B\u8F7D",
52
+ exit: "\u9000\u51FA",
53
+ errors: {
54
+ releaseBelowMinimum: "\u5F53\u524D\u53D1\u5E03\u7684\u6700\u65B0\u7248\u672C\u4ECD\u4F4E\u4E8E\u8981\u6C42\u7684\u6700\u4F4E\u7248\u672C",
55
+ updateUnavailable: "\u53D1\u5E03\u6E90\u4E2D\u6CA1\u6709\u53EF\u7528\u7684\u66F4\u65B0",
56
+ policyCheckFailed: "\u65E0\u6CD5\u68C0\u67E5\u6700\u4F4E\u7248\u672C\u7B56\u7565\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u540E\u91CD\u8BD5",
57
+ installFailed: "\u66F4\u65B0\u5DF2\u4E0B\u8F7D\uFF0C\u4F46\u65E0\u6CD5\u5B89\u88C5",
58
+ updateFailed: "\u66F4\u65B0\u4E0B\u8F7D\u6216\u6821\u9A8C\u5931\u8D25"
59
+ }
60
+ };
61
+ function createMinimumVersionAdmissionI18nRuntime(locale, overrides) {
62
+ return createI18nRuntime({
63
+ dictionaries: [
64
+ overrides ?? {},
65
+ locale === "zh-CN" ? minimumVersionAdmissionZhCN : minimumVersionAdmissionEn
66
+ ]
67
+ });
68
+ }
69
+ export {
70
+ createMinimumVersionAdmissionI18nRuntime,
71
+ minimumVersionAdmissionEn,
72
+ minimumVersionAdmissionZhCN
73
+ };
74
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/i18n/minimumVersionAdmissionI18n.ts"],"sourcesContent":["import {\n createI18nRuntime,\n type I18nDictionary,\n type I18nRuntime\n} from \"@tutti-os/ui-i18n-runtime\";\n\nexport type MinimumVersionAdmissionLocale = \"en\" | \"zh-CN\";\nexport type MinimumVersionAdmissionI18nKey =\n | \"startupTitle\"\n | \"startupDetail\"\n | \"foregroundTitle\"\n | \"foregroundDetail\"\n | \"checkingTitle\"\n | \"downloadingTitle\"\n | \"failedTitle\"\n | \"simulationCompleteTitle\"\n | \"simulationCompleteDetail\"\n | \"currentVersion\"\n | \"minimumVersion\"\n | \"downloadProgress\"\n | \"autoRestartNotice\"\n | \"upgrade\"\n | \"upgradeNow\"\n | \"later\"\n | \"retry\"\n | \"manualDownload\"\n | \"exit\"\n | \"errors.releaseBelowMinimum\"\n | \"errors.updateUnavailable\"\n | \"errors.policyCheckFailed\"\n | \"errors.installFailed\"\n | \"errors.updateFailed\";\n\nexport type MinimumVersionAdmissionI18nRuntime =\n I18nRuntime<MinimumVersionAdmissionI18nKey>;\n\nexport const minimumVersionAdmissionEn = {\n startupTitle: \"A required {{productName}} update is available\",\n startupDetail:\n \"Update {{productName}} before continuing. Your regular update preference will not be changed.\",\n foregroundTitle: \"A required {{productName}} update is available\",\n foregroundDetail:\n \"Update Now automatically installs and restarts after downloading. You can also continue this session and update next time.\",\n checkingTitle: \"Checking the required update\",\n downloadingTitle: \"Downloading the required update\",\n failedTitle: \"Unable to complete the required update\",\n simulationCompleteTitle: \"Development update simulation completed\",\n simulationCompleteDetail:\n \"The update reached the installation step. Development mode will not install or restart {{productName}}.\",\n currentVersion: \"Current version\",\n minimumVersion: \"Minimum version\",\n downloadProgress: \"Download progress\",\n autoRestartNotice:\n \"{{productName}} will install the update and restart automatically when the download completes.\",\n upgrade: \"Upgrade\",\n upgradeNow: \"Upgrade now\",\n later: \"Later\",\n retry: \"Retry\",\n manualDownload: \"Manual download\",\n exit: \"Exit\",\n errors: {\n releaseBelowMinimum:\n \"The latest published update is below the required minimum version.\",\n updateUnavailable:\n \"No suitable update is available from the release source.\",\n policyCheckFailed: \"The minimum-version policy could not be checked.\",\n installFailed: \"The update was downloaded but could not be installed.\",\n updateFailed: \"The update could not be downloaded or verified.\"\n }\n} as const satisfies I18nDictionary;\n\nexport const minimumVersionAdmissionZhCN = {\n startupTitle: \"{{productName}} 必须更新后才能继续\",\n startupDetail: \"请先更新 {{productName}},普通更新偏好不会被修改\",\n foregroundTitle: \"{{productName}} 有必须安装的更新\",\n foregroundDetail:\n \"立即升级会在下载完成后自动安装并重启,你也可以继续本次会话并在下次启动时更新\",\n checkingTitle: \"正在检查必须安装的更新\",\n downloadingTitle: \"正在下载必须安装的更新\",\n failedTitle: \"无法完成必须安装的更新\",\n simulationCompleteTitle: \"开发更新模拟已完成\",\n simulationCompleteDetail:\n \"更新流程已到达安装阶段,开发模式不会实际安装或重启 {{productName}}\",\n currentVersion: \"当前版本\",\n minimumVersion: \"最低版本\",\n downloadProgress: \"下载进度\",\n autoRestartNotice: \"下载完成后,{{productName}} 将自动安装更新并重启\",\n upgrade: \"升级\",\n upgradeNow: \"立即升级\",\n later: \"稍后\",\n retry: \"重试\",\n manualDownload: \"手动下载\",\n exit: \"退出\",\n errors: {\n releaseBelowMinimum: \"当前发布的最新版本仍低于要求的最低版本\",\n updateUnavailable: \"发布源中没有可用的更新\",\n policyCheckFailed: \"无法检查最低版本策略,请检查网络后重试\",\n installFailed: \"更新已下载,但无法安装\",\n updateFailed: \"更新下载或校验失败\"\n }\n} as const satisfies I18nDictionary;\n\nexport function createMinimumVersionAdmissionI18nRuntime(\n locale: MinimumVersionAdmissionLocale,\n overrides?: I18nDictionary\n): MinimumVersionAdmissionI18nRuntime {\n return createI18nRuntime<MinimumVersionAdmissionI18nKey>({\n dictionaries: [\n overrides ?? {},\n locale === \"zh-CN\"\n ? minimumVersionAdmissionZhCN\n : minimumVersionAdmissionEn\n ]\n });\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAGK;AAgCA,IAAM,4BAA4B;AAAA,EACvC,cAAc;AAAA,EACd,eACE;AAAA,EACF,iBAAiB;AAAA,EACjB,kBACE;AAAA,EACF,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,yBAAyB;AAAA,EACzB,0BACE;AAAA,EACF,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,mBACE;AAAA,EACF,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,qBACE;AAAA,IACF,mBACE;AAAA,IACF,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,cAAc;AAAA,EAChB;AACF;AAEO,IAAM,8BAA8B;AAAA,EACzC,cAAc;AAAA,EACd,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,kBACE;AAAA,EACF,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,yBAAyB;AAAA,EACzB,0BACE;AAAA,EACF,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,qBAAqB;AAAA,IACrB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,cAAc;AAAA,EAChB;AACF;AAEO,SAAS,yCACd,QACA,WACoC;AACpC,SAAO,kBAAkD;AAAA,IACvD,cAAc;AAAA,MACZ,aAAa,CAAC;AAAA,MACd,WAAW,UACP,8BACA;AAAA,IACN;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -0,0 +1,2 @@
1
+ export { ConfigureDesktopUpdatesInput, DesktopArchitecture, DesktopMinimumVersionApi, DesktopPlatform, DesktopProduct, DesktopUpdateAdmissionRuntime, DesktopUpdateChannel, DesktopUpdatePolicy, DesktopUpdateState, DesktopUpdateStatus, MandatoryDesktopUpdateSession, MandatoryDesktopUpdateTarget, MinimumVersionAppUpdateService, MinimumVersionCheckRequest, MinimumVersionCheckResponse, MinimumVersionDecision, MinimumVersionUpgradeError, MinimumVersionUpgradePhase, MinimumVersionUpgradeState, desktopProducts, desktopUpdateAdmissionIpcChannels, desktopUpdateChannels, desktopUpdatePolicies, desktopUpdateStatuses } from './contracts/index.js';
2
+ export { resolveMinimumVersionRuntimeTarget, shouldCheckMinimumVersionAfterForeground, updaterTargetMeetsMinimum, validateMinimumVersionResponse } from './core/index.js';
package/dist/index.js ADDED
@@ -0,0 +1,25 @@
1
+ import {
2
+ desktopProducts,
3
+ desktopUpdateAdmissionIpcChannels,
4
+ desktopUpdateChannels,
5
+ desktopUpdatePolicies,
6
+ desktopUpdateStatuses
7
+ } from "./chunk-TRALK3GT.js";
8
+ import {
9
+ resolveMinimumVersionRuntimeTarget,
10
+ shouldCheckMinimumVersionAfterForeground,
11
+ updaterTargetMeetsMinimum,
12
+ validateMinimumVersionResponse
13
+ } from "./chunk-LV67FBCG.js";
14
+ export {
15
+ desktopProducts,
16
+ desktopUpdateAdmissionIpcChannels,
17
+ desktopUpdateChannels,
18
+ desktopUpdatePolicies,
19
+ desktopUpdateStatuses,
20
+ resolveMinimumVersionRuntimeTarget,
21
+ shouldCheckMinimumVersionAfterForeground,
22
+ updaterTargetMeetsMinimum,
23
+ validateMinimumVersionResponse
24
+ };
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,23 @@
1
+ import { MandatoryDesktopUpdateTarget, MandatoryDesktopUpdateSession, ConfigureDesktopUpdatesInput, DesktopUpdateState } from '../contracts/index.js';
2
+
3
+ declare class MandatoryUpdateTargetError extends Error {
4
+ readonly latestVersion: string | null;
5
+ readonly minimumVersion: string;
6
+ constructor(latestVersion: string | null, minimumVersion: string);
7
+ }
8
+ interface MandatoryUpdaterLeaseManager {
9
+ assertAccess(): void;
10
+ isMandatoryAccess(): boolean;
11
+ acquire(input: MandatoryDesktopUpdateTarget): Promise<MandatoryDesktopUpdateSession>;
12
+ }
13
+ declare function createMandatoryUpdaterLeaseManager<TNormalConfiguration>(options: {
14
+ captureNormalConfiguration(): TNormalConfiguration | null;
15
+ suspendNormalUpdates(): Promise<void>;
16
+ prepareMandatoryUpdate(input: ConfigureDesktopUpdatesInput): Promise<DesktopUpdateState>;
17
+ downloadUpdate(): Promise<DesktopUpdateState>;
18
+ installUpdate(): Promise<void>;
19
+ getState(): DesktopUpdateState;
20
+ restoreNormalConfiguration(configuration: TNormalConfiguration): Promise<void>;
21
+ }): MandatoryUpdaterLeaseManager;
22
+
23
+ export { MandatoryDesktopUpdateSession, MandatoryDesktopUpdateTarget, MandatoryUpdateTargetError, type MandatoryUpdaterLeaseManager, createMandatoryUpdaterLeaseManager };
@@ -0,0 +1,10 @@
1
+ import {
2
+ MandatoryUpdateTargetError,
3
+ createMandatoryUpdaterLeaseManager
4
+ } from "../chunk-GONYAEKF.js";
5
+ import "../chunk-LV67FBCG.js";
6
+ export {
7
+ MandatoryUpdateTargetError,
8
+ createMandatoryUpdaterLeaseManager
9
+ };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,9 @@
1
+ import { MinimumVersionUpgradeState, DesktopMinimumVersionApi } from '../contracts/index.js';
2
+
3
+ declare function createDesktopMinimumVersionApi(input: {
4
+ invoke<T>(channel: string): Promise<T>;
5
+ on(channel: string, listener: (event: unknown, state: MinimumVersionUpgradeState) => void): void;
6
+ removeListener(channel: string, listener: (event: unknown, state: MinimumVersionUpgradeState) => void): void;
7
+ }): DesktopMinimumVersionApi;
8
+
9
+ export { createDesktopMinimumVersionApi };
@@ -0,0 +1,30 @@
1
+ import {
2
+ desktopUpdateAdmissionIpcChannels
3
+ } from "../chunk-TRALK3GT.js";
4
+
5
+ // src/preload/index.ts
6
+ function createDesktopMinimumVersionApi(input) {
7
+ return {
8
+ getState: () => input.invoke(
9
+ desktopUpdateAdmissionIpcChannels.getState
10
+ ),
11
+ start: () => input.invoke(
12
+ desktopUpdateAdmissionIpcChannels.start
13
+ ),
14
+ retry: () => input.invoke(
15
+ desktopUpdateAdmissionIpcChannels.retry
16
+ ),
17
+ later: () => input.invoke(desktopUpdateAdmissionIpcChannels.later),
18
+ openManualDownload: () => input.invoke(desktopUpdateAdmissionIpcChannels.manualDownload),
19
+ exit: () => input.invoke(desktopUpdateAdmissionIpcChannels.exit),
20
+ onState(listener) {
21
+ const handler = (_event, state) => listener(state);
22
+ input.on(desktopUpdateAdmissionIpcChannels.state, handler);
23
+ return () => input.removeListener(desktopUpdateAdmissionIpcChannels.state, handler);
24
+ }
25
+ };
26
+ }
27
+ export {
28
+ createDesktopMinimumVersionApi
29
+ };
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/preload/index.ts"],"sourcesContent":["import {\n desktopUpdateAdmissionIpcChannels,\n type DesktopMinimumVersionApi,\n type MinimumVersionUpgradeState\n} from \"../contracts/index.ts\";\n\nexport function createDesktopMinimumVersionApi(input: {\n invoke<T>(channel: string): Promise<T>;\n on(\n channel: string,\n listener: (event: unknown, state: MinimumVersionUpgradeState) => void\n ): void;\n removeListener(\n channel: string,\n listener: (event: unknown, state: MinimumVersionUpgradeState) => void\n ): void;\n}): DesktopMinimumVersionApi {\n return {\n getState: () =>\n input.invoke<MinimumVersionUpgradeState | null>(\n desktopUpdateAdmissionIpcChannels.getState\n ),\n start: () =>\n input.invoke<MinimumVersionUpgradeState | null>(\n desktopUpdateAdmissionIpcChannels.start\n ),\n retry: () =>\n input.invoke<MinimumVersionUpgradeState | null>(\n desktopUpdateAdmissionIpcChannels.retry\n ),\n later: () => input.invoke<void>(desktopUpdateAdmissionIpcChannels.later),\n openManualDownload: () =>\n input.invoke<void>(desktopUpdateAdmissionIpcChannels.manualDownload),\n exit: () => input.invoke<void>(desktopUpdateAdmissionIpcChannels.exit),\n onState(listener) {\n const handler = (\n _event: unknown,\n state: MinimumVersionUpgradeState\n ): void => listener(state);\n input.on(desktopUpdateAdmissionIpcChannels.state, handler);\n return () =>\n input.removeListener(desktopUpdateAdmissionIpcChannels.state, handler);\n }\n };\n}\n"],"mappings":";;;;;AAMO,SAAS,+BAA+B,OAUlB;AAC3B,SAAO;AAAA,IACL,UAAU,MACR,MAAM;AAAA,MACJ,kCAAkC;AAAA,IACpC;AAAA,IACF,OAAO,MACL,MAAM;AAAA,MACJ,kCAAkC;AAAA,IACpC;AAAA,IACF,OAAO,MACL,MAAM;AAAA,MACJ,kCAAkC;AAAA,IACpC;AAAA,IACF,OAAO,MAAM,MAAM,OAAa,kCAAkC,KAAK;AAAA,IACvE,oBAAoB,MAClB,MAAM,OAAa,kCAAkC,cAAc;AAAA,IACrE,MAAM,MAAM,MAAM,OAAa,kCAAkC,IAAI;AAAA,IACrE,QAAQ,UAAU;AAChB,YAAM,UAAU,CACd,QACA,UACS,SAAS,KAAK;AACzB,YAAM,GAAG,kCAAkC,OAAO,OAAO;AACzD,aAAO,MACL,MAAM,eAAe,kCAAkC,OAAO,OAAO;AAAA,IACzE;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,13 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { DesktopMinimumVersionApi } from '../contracts/index.js';
3
+ import { MinimumVersionAdmissionI18nRuntime } from '../i18n/index.js';
4
+ import '@tutti-os/ui-i18n-runtime';
5
+
6
+ declare function MinimumVersionUpgradeApp(props: {
7
+ i18n: MinimumVersionAdmissionI18nRuntime;
8
+ mode: "startup" | "foreground";
9
+ port: DesktopMinimumVersionApi;
10
+ productName: string;
11
+ }): react_jsx_runtime.JSX.Element;
12
+
13
+ export { MinimumVersionUpgradeApp };
@@ -0,0 +1,116 @@
1
+ // src/react/MinimumVersionUpgradeApp.tsx
2
+ import { useEffect, useState } from "react";
3
+ import { Button, LoadingIcon } from "@tutti-os/ui-system";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
+ function percent(value) {
6
+ return `${Math.max(0, Math.min(100, Math.round(value ?? 0)))}%`;
7
+ }
8
+ function MinimumVersionUpgradeApp(props) {
9
+ const { i18n, mode, port, productName } = props;
10
+ const [state, setState] = useState(null);
11
+ const [pending, setPending] = useState(false);
12
+ const t = (key) => i18n.t(key, { productName });
13
+ useEffect(() => {
14
+ let disposed = false;
15
+ void port.getState().then((value) => {
16
+ if (!disposed) {
17
+ setState(value);
18
+ }
19
+ });
20
+ const unsubscribe = port.onState(setState);
21
+ return () => {
22
+ disposed = true;
23
+ unsubscribe();
24
+ };
25
+ }, [port]);
26
+ const run = (operation) => {
27
+ setPending(true);
28
+ void operation().catch(() => void 0).finally(() => setPending(false));
29
+ };
30
+ if (!state) {
31
+ return /* @__PURE__ */ jsx("main", { className: "flex min-h-screen items-center justify-center bg-[var(--background)] text-[var(--foreground)]", children: /* @__PURE__ */ jsx(LoadingIcon, { className: "size-6 animate-spin" }) });
32
+ }
33
+ const prompt = mode === "foreground" && state.phase === "blocked";
34
+ const checking = state.phase === "checking";
35
+ const downloading = state.phase === "downloading";
36
+ const failed = state.phase === "error";
37
+ const simulationComplete = state.phase === "simulationComplete";
38
+ const title = simulationComplete ? t("simulationCompleteTitle") : prompt ? t("foregroundTitle") : failed ? t("failedTitle") : downloading ? t("downloadingTitle") : checking ? t("checkingTitle") : t("startupTitle");
39
+ const errorKey = `errors.${state.message ?? "updateFailed"}`;
40
+ return /* @__PURE__ */ jsx("main", { className: "flex min-h-screen items-center justify-center bg-[var(--background)] p-8 text-[var(--foreground)]", children: /* @__PURE__ */ jsxs("section", { className: "w-full max-w-[440px] rounded-xl border border-[var(--border)] bg-[var(--card)] p-6 shadow-sm", children: [
41
+ /* @__PURE__ */ jsx("h1", { className: "text-lg font-semibold", children: title }),
42
+ /* @__PURE__ */ jsx("p", { className: "mt-2 text-sm leading-5 text-[var(--muted-foreground)]", children: simulationComplete ? t("simulationCompleteDetail") : prompt ? t("foregroundDetail") : failed ? t(errorKey) : t("startupDetail") }),
43
+ failed && state.update.message ? /* @__PURE__ */ jsx("p", { className: "mt-2 break-words text-xs leading-5 text-[var(--destructive)]", children: state.update.message }) : null,
44
+ /* @__PURE__ */ jsxs("dl", { className: "mt-6 grid grid-cols-[auto_1fr] gap-2 rounded-lg bg-[var(--muted)] p-4 text-sm", children: [
45
+ /* @__PURE__ */ jsx("dt", { className: "text-[var(--muted-foreground)]", children: t("currentVersion") }),
46
+ /* @__PURE__ */ jsx("dd", { className: "text-right tabular-nums", children: state.check.currentVersion }),
47
+ /* @__PURE__ */ jsx("dt", { className: "text-[var(--muted-foreground)]", children: t("minimumVersion") }),
48
+ /* @__PURE__ */ jsx("dd", { className: "text-right tabular-nums", children: state.check.minimumVersion })
49
+ ] }),
50
+ downloading ? /* @__PURE__ */ jsxs("div", { className: "mt-5", children: [
51
+ /* @__PURE__ */ jsxs("div", { className: "mb-2 flex justify-between text-xs text-[var(--muted-foreground)]", children: [
52
+ /* @__PURE__ */ jsx("span", { children: t("downloadProgress") }),
53
+ /* @__PURE__ */ jsx("span", { className: "tabular-nums", children: percent(state.update.downloadPercent) })
54
+ ] }),
55
+ /* @__PURE__ */ jsx("div", { className: "h-2 overflow-hidden rounded-full bg-[var(--muted)]", children: /* @__PURE__ */ jsx(
56
+ "div",
57
+ {
58
+ className: "h-full bg-[var(--primary)] transition-[width]",
59
+ style: { width: percent(state.update.downloadPercent) }
60
+ }
61
+ ) }),
62
+ /* @__PURE__ */ jsx("p", { className: "mt-3 text-xs text-[var(--muted-foreground)]", children: t("autoRestartNotice") })
63
+ ] }) : null,
64
+ /* @__PURE__ */ jsxs("div", { className: "mt-6 flex flex-wrap justify-end gap-2", children: [
65
+ simulationComplete ? /* @__PURE__ */ jsx(
66
+ Button,
67
+ {
68
+ variant: "secondary",
69
+ disabled: pending,
70
+ onClick: () => run(() => port.exit()),
71
+ children: t("exit")
72
+ }
73
+ ) : prompt ? /* @__PURE__ */ jsx(
74
+ Button,
75
+ {
76
+ variant: "secondary",
77
+ disabled: pending,
78
+ onClick: () => run(() => port.later()),
79
+ children: t("later")
80
+ }
81
+ ) : null,
82
+ failed ? /* @__PURE__ */ jsxs(Fragment, { children: [
83
+ /* @__PURE__ */ jsx(
84
+ Button,
85
+ {
86
+ variant: "secondary",
87
+ disabled: pending,
88
+ onClick: () => run(() => port.exit()),
89
+ children: t("exit")
90
+ }
91
+ ),
92
+ /* @__PURE__ */ jsx(
93
+ Button,
94
+ {
95
+ variant: "secondary",
96
+ disabled: pending,
97
+ onClick: () => run(() => port.openManualDownload()),
98
+ children: t("manualDownload")
99
+ }
100
+ ),
101
+ /* @__PURE__ */ jsx(
102
+ Button,
103
+ {
104
+ disabled: pending,
105
+ onClick: () => run(() => port.retry()),
106
+ children: t("retry")
107
+ }
108
+ )
109
+ ] }) : state.phase === "blocked" ? /* @__PURE__ */ jsx(Button, { disabled: pending, onClick: () => run(() => port.start()), children: prompt ? t("upgradeNow") : t("upgrade") }) : null
110
+ ] })
111
+ ] }) });
112
+ }
113
+ export {
114
+ MinimumVersionUpgradeApp
115
+ };
116
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/react/MinimumVersionUpgradeApp.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { Button, LoadingIcon } from \"@tutti-os/ui-system\";\nimport type {\n DesktopMinimumVersionApi,\n MinimumVersionUpgradeError,\n MinimumVersionUpgradeState\n} from \"../contracts/index.ts\";\nimport type { MinimumVersionAdmissionI18nRuntime } from \"../i18n/index.ts\";\n\nfunction percent(value: number | null): string {\n return `${Math.max(0, Math.min(100, Math.round(value ?? 0)))}%`;\n}\n\nexport function MinimumVersionUpgradeApp(props: {\n i18n: MinimumVersionAdmissionI18nRuntime;\n mode: \"startup\" | \"foreground\";\n port: DesktopMinimumVersionApi;\n productName: string;\n}) {\n const { i18n, mode, port, productName } = props;\n const [state, setState] = useState<MinimumVersionUpgradeState | null>(null);\n const [pending, setPending] = useState(false);\n const t = (\n key: Parameters<MinimumVersionAdmissionI18nRuntime[\"t\"]>[0]\n ): string => i18n.t(key, { productName });\n\n useEffect(() => {\n let disposed = false;\n void port.getState().then((value) => {\n if (!disposed) {\n setState(value);\n }\n });\n const unsubscribe = port.onState(setState);\n return () => {\n disposed = true;\n unsubscribe();\n };\n }, [port]);\n\n const run = (operation: () => Promise<unknown>): void => {\n setPending(true);\n void operation()\n .catch(() => undefined)\n .finally(() => setPending(false));\n };\n\n if (!state) {\n return (\n <main className=\"flex min-h-screen items-center justify-center bg-[var(--background)] text-[var(--foreground)]\">\n <LoadingIcon className=\"size-6 animate-spin\" />\n </main>\n );\n }\n\n const prompt = mode === \"foreground\" && state.phase === \"blocked\";\n const checking = state.phase === \"checking\";\n const downloading = state.phase === \"downloading\";\n const failed = state.phase === \"error\";\n const simulationComplete = state.phase === \"simulationComplete\";\n const title = simulationComplete\n ? t(\"simulationCompleteTitle\")\n : prompt\n ? t(\"foregroundTitle\")\n : failed\n ? t(\"failedTitle\")\n : downloading\n ? t(\"downloadingTitle\")\n : checking\n ? t(\"checkingTitle\")\n : t(\"startupTitle\");\n const errorKey =\n `errors.${state.message ?? \"updateFailed\"}` as `errors.${MinimumVersionUpgradeError}`;\n\n return (\n <main className=\"flex min-h-screen items-center justify-center bg-[var(--background)] p-8 text-[var(--foreground)]\">\n <section className=\"w-full max-w-[440px] rounded-xl border border-[var(--border)] bg-[var(--card)] p-6 shadow-sm\">\n <h1 className=\"text-lg font-semibold\">{title}</h1>\n <p className=\"mt-2 text-sm leading-5 text-[var(--muted-foreground)]\">\n {simulationComplete\n ? t(\"simulationCompleteDetail\")\n : prompt\n ? t(\"foregroundDetail\")\n : failed\n ? t(errorKey)\n : t(\"startupDetail\")}\n </p>\n {failed && state.update.message ? (\n <p className=\"mt-2 break-words text-xs leading-5 text-[var(--destructive)]\">\n {state.update.message}\n </p>\n ) : null}\n <dl className=\"mt-6 grid grid-cols-[auto_1fr] gap-2 rounded-lg bg-[var(--muted)] p-4 text-sm\">\n <dt className=\"text-[var(--muted-foreground)]\">\n {t(\"currentVersion\")}\n </dt>\n <dd className=\"text-right tabular-nums\">\n {state.check.currentVersion}\n </dd>\n <dt className=\"text-[var(--muted-foreground)]\">\n {t(\"minimumVersion\")}\n </dt>\n <dd className=\"text-right tabular-nums\">\n {state.check.minimumVersion}\n </dd>\n </dl>\n {downloading ? (\n <div className=\"mt-5\">\n <div className=\"mb-2 flex justify-between text-xs text-[var(--muted-foreground)]\">\n <span>{t(\"downloadProgress\")}</span>\n <span className=\"tabular-nums\">\n {percent(state.update.downloadPercent)}\n </span>\n </div>\n <div className=\"h-2 overflow-hidden rounded-full bg-[var(--muted)]\">\n <div\n className=\"h-full bg-[var(--primary)] transition-[width]\"\n style={{ width: percent(state.update.downloadPercent) }}\n />\n </div>\n <p className=\"mt-3 text-xs text-[var(--muted-foreground)]\">\n {t(\"autoRestartNotice\")}\n </p>\n </div>\n ) : null}\n <div className=\"mt-6 flex flex-wrap justify-end gap-2\">\n {simulationComplete ? (\n <Button\n variant=\"secondary\"\n disabled={pending}\n onClick={() => run(() => port.exit())}\n >\n {t(\"exit\")}\n </Button>\n ) : prompt ? (\n <Button\n variant=\"secondary\"\n disabled={pending}\n onClick={() => run(() => port.later())}\n >\n {t(\"later\")}\n </Button>\n ) : null}\n {failed ? (\n <>\n <Button\n variant=\"secondary\"\n disabled={pending}\n onClick={() => run(() => port.exit())}\n >\n {t(\"exit\")}\n </Button>\n <Button\n variant=\"secondary\"\n disabled={pending}\n onClick={() => run(() => port.openManualDownload())}\n >\n {t(\"manualDownload\")}\n </Button>\n <Button\n disabled={pending}\n onClick={() => run(() => port.retry())}\n >\n {t(\"retry\")}\n </Button>\n </>\n ) : state.phase === \"blocked\" ? (\n <Button disabled={pending} onClick={() => run(() => port.start())}>\n {prompt ? t(\"upgradeNow\") : t(\"upgrade\")}\n </Button>\n ) : null}\n </div>\n </section>\n </main>\n );\n}\n"],"mappings":"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","names":[]}
package/package.json ADDED
@@ -0,0 +1,98 @@
1
+ {
2
+ "name": "@tutti-os/desktop-update-admission",
3
+ "version": "0.0.266",
4
+ "private": false,
5
+ "type": "module",
6
+ "types": "./dist/index.d.ts",
7
+ "bin": {
8
+ "desktop-update-admission-mock-server": "./dist/development/mock-server-cli.js"
9
+ },
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js"
14
+ },
15
+ "./contracts": {
16
+ "types": "./dist/contracts/index.d.ts",
17
+ "import": "./dist/contracts/index.js"
18
+ },
19
+ "./core": {
20
+ "types": "./dist/core/index.d.ts",
21
+ "import": "./dist/core/index.js"
22
+ },
23
+ "./development": {
24
+ "types": "./dist/development/index.d.ts",
25
+ "import": "./dist/development/index.js"
26
+ },
27
+ "./electron-main": {
28
+ "types": "./dist/electron-main/index.d.ts",
29
+ "import": "./dist/electron-main/index.js"
30
+ },
31
+ "./i18n": {
32
+ "types": "./dist/i18n/index.d.ts",
33
+ "import": "./dist/i18n/index.js"
34
+ },
35
+ "./mandatory-updater": {
36
+ "types": "./dist/mandatory-updater/index.d.ts",
37
+ "import": "./dist/mandatory-updater/index.js"
38
+ },
39
+ "./preload": {
40
+ "types": "./dist/preload/index.d.ts",
41
+ "import": "./dist/preload/index.js"
42
+ },
43
+ "./react": {
44
+ "types": "./dist/react/index.d.ts",
45
+ "import": "./dist/react/index.js"
46
+ }
47
+ },
48
+ "files": [
49
+ "dist",
50
+ "README.md"
51
+ ],
52
+ "repository": {
53
+ "type": "git",
54
+ "url": "git+https://github.com/tutti-os/tutti.git",
55
+ "directory": "packages/desktop/update-admission"
56
+ },
57
+ "dependencies": {
58
+ "@tutti-os/ui-i18n-runtime": "0.0.266",
59
+ "@tutti-os/ui-system": "0.0.266"
60
+ },
61
+ "devDependencies": {
62
+ "@types/node": "^24.0.1",
63
+ "@types/react": "^19.1.6",
64
+ "@types/react-dom": "^19.1.5",
65
+ "electron": "^43.2.0",
66
+ "react": "^19.1.0",
67
+ "react-dom": "^19.1.0",
68
+ "typescript": "^5.8.3",
69
+ "@tutti-os/config-tsconfig": "0.0.0"
70
+ },
71
+ "peerDependencies": {
72
+ "electron": ">=35.7.5 <44",
73
+ "react": "^19.1.0",
74
+ "react-dom": "^19.1.0"
75
+ },
76
+ "peerDependenciesMeta": {
77
+ "electron": {
78
+ "optional": true
79
+ },
80
+ "react": {
81
+ "optional": true
82
+ },
83
+ "react-dom": {
84
+ "optional": true
85
+ }
86
+ },
87
+ "tutti": {
88
+ "tailwindSourceRoot": "src/react"
89
+ },
90
+ "publishConfig": {
91
+ "access": "public"
92
+ },
93
+ "scripts": {
94
+ "build": "tsup --config tsup.config.ts",
95
+ "test": "node --test --experimental-strip-types \"./src/**/*.test.ts\"",
96
+ "typecheck": "node ../../../tools/scripts/run-tsgo-typecheck.mjs"
97
+ }
98
+ }