@senguoyun/dsh-arkme 0.1.32 → 0.1.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/lib/client.js +514 -1546
- package/lib/client.js.map +1 -1
- package/lib/extension-profile-restart-helper.js +17 -5
- package/lib/index.js +296 -11
- package/lib/persistent-extension.js +1 -1
- package/lib/{persistent-runtime-CFeIg6aw.js → persistent-runtime-DUqdJv8K.js} +28508 -1
- package/lib/types/client/ArkmeExtensionRecoveryNotice.d.ts +9 -0
- package/lib/types/client/ArkmeExtensionRecoveryNotice.d.ts.map +1 -0
- package/lib/types/client/ArkmeFooterAction.d.ts +1 -7
- package/lib/types/client/ArkmeFooterAction.d.ts.map +1 -1
- package/lib/types/client/ArkmeFooterDropdown.d.ts.map +1 -1
- package/lib/types/client/ArkmeMarketplace.d.ts +2 -1
- package/lib/types/client/ArkmeMarketplace.d.ts.map +1 -1
- package/lib/types/client/ArkmePersistentShell.d.ts.map +1 -1
- package/lib/types/client/ArkmeProductNavigation.d.ts.map +1 -1
- package/lib/types/client/ArkmeSettingsSurface.d.ts +4 -19
- package/lib/types/client/ArkmeSettingsSurface.d.ts.map +1 -1
- package/lib/types/client/ArkmeSidebar.d.ts.map +1 -1
- package/lib/types/client/ArkmeUpdateSurfaces.d.ts +38 -5
- package/lib/types/client/ArkmeUpdateSurfaces.d.ts.map +1 -1
- package/lib/types/client/api.d.ts +1 -1
- package/lib/types/client/api.d.ts.map +1 -1
- package/lib/types/client/desktop-quarantine-status.d.ts +3 -0
- package/lib/types/client/desktop-quarantine-status.d.ts.map +1 -0
- package/lib/types/client/index.d.ts +0 -2
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/update-presentation.d.ts +1 -1
- package/lib/types/client/update-presentation.d.ts.map +1 -1
- package/lib/types/client/update-ui-controller.d.ts +1 -1
- package/lib/types/client/update-ui-controller.d.ts.map +1 -1
- package/lib/types/extensions/desktop-quarantine.d.ts +79 -0
- package/lib/types/extensions/desktop-quarantine.d.ts.map +1 -0
- package/lib/types/extensions/profile-installer.d.ts +5 -0
- package/lib/types/extensions/profile-installer.d.ts.map +1 -1
- package/lib/types/extensions/profile-restart-helper.d.ts +3 -1
- package/lib/types/extensions/profile-restart-helper.d.ts.map +1 -1
- package/lib/types/host-api.d.ts +3 -1
- package/lib/types/host-api.d.ts.map +1 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/types.d.ts +1 -1
- package/lib/types/types.d.ts.map +1 -1
- package/package.json +6 -5
package/lib/client.js
CHANGED
|
@@ -5024,6 +5024,9 @@ window.__ModuleLoader__.load({
|
|
|
5024
5024
|
};
|
|
5025
5025
|
qrcode.stringToBytes;
|
|
5026
5026
|
//#endregion
|
|
5027
|
+
//#region package.json
|
|
5028
|
+
var version = "0.1.33";
|
|
5029
|
+
//#endregion
|
|
5027
5030
|
//#region src/client/arkme-billing.ts
|
|
5028
5031
|
function createBillingClientRequestId(source = globalThis.crypto) {
|
|
5029
5032
|
if (typeof source?.randomUUID === "function") return source.randomUUID().toLowerCase();
|
|
@@ -6603,995 +6606,6 @@ window.__ModuleLoader__.load({
|
|
|
6603
6606
|
return equivalent.length === 1 ? equivalent[0] : void 0;
|
|
6604
6607
|
}
|
|
6605
6608
|
//#endregion
|
|
6606
|
-
//#region src/plugin-update-policy.ts
|
|
6607
|
-
const PLUGIN_UPDATE_TERMINAL_STATE_TTL_MS = 10 * 6e4;
|
|
6608
|
-
//#endregion
|
|
6609
|
-
//#region node_modules/semver/internal/debug.js
|
|
6610
|
-
var require_debug = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
6611
|
-
module.exports = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => {};
|
|
6612
|
-
}));
|
|
6613
|
-
//#endregion
|
|
6614
|
-
//#region node_modules/semver/internal/constants.js
|
|
6615
|
-
var require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
6616
|
-
const SEMVER_SPEC_VERSION = "2.0.0";
|
|
6617
|
-
const MAX_LENGTH = 256;
|
|
6618
|
-
const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
|
|
6619
|
-
module.exports = {
|
|
6620
|
-
MAX_LENGTH,
|
|
6621
|
-
MAX_SAFE_COMPONENT_LENGTH: 16,
|
|
6622
|
-
MAX_SAFE_BUILD_LENGTH: MAX_LENGTH - 6,
|
|
6623
|
-
MAX_SAFE_INTEGER,
|
|
6624
|
-
RELEASE_TYPES: [
|
|
6625
|
-
"major",
|
|
6626
|
-
"premajor",
|
|
6627
|
-
"minor",
|
|
6628
|
-
"preminor",
|
|
6629
|
-
"patch",
|
|
6630
|
-
"prepatch",
|
|
6631
|
-
"prerelease"
|
|
6632
|
-
],
|
|
6633
|
-
SEMVER_SPEC_VERSION,
|
|
6634
|
-
FLAG_INCLUDE_PRERELEASE: 1,
|
|
6635
|
-
FLAG_LOOSE: 2
|
|
6636
|
-
};
|
|
6637
|
-
}));
|
|
6638
|
-
//#endregion
|
|
6639
|
-
//#region node_modules/semver/internal/re.js
|
|
6640
|
-
var require_re = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
6641
|
-
const { MAX_SAFE_COMPONENT_LENGTH, MAX_SAFE_BUILD_LENGTH, MAX_LENGTH } = require_constants();
|
|
6642
|
-
const debug = require_debug();
|
|
6643
|
-
exports = module.exports = {};
|
|
6644
|
-
const re = exports.re = [];
|
|
6645
|
-
const safeRe = exports.safeRe = [];
|
|
6646
|
-
const src = exports.src = [];
|
|
6647
|
-
const safeSrc = exports.safeSrc = [];
|
|
6648
|
-
const t = exports.t = {};
|
|
6649
|
-
let R = 0;
|
|
6650
|
-
const LETTERDASHNUMBER = "[a-zA-Z0-9-]";
|
|
6651
|
-
const safeRegexReplacements = [
|
|
6652
|
-
["\\s", 1],
|
|
6653
|
-
["\\d", MAX_LENGTH],
|
|
6654
|
-
[LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH]
|
|
6655
|
-
];
|
|
6656
|
-
const makeSafeRegex = (value) => {
|
|
6657
|
-
for (const [token, max] of safeRegexReplacements) value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);
|
|
6658
|
-
return value;
|
|
6659
|
-
};
|
|
6660
|
-
const createToken = (name, value, isGlobal) => {
|
|
6661
|
-
const safe = makeSafeRegex(value);
|
|
6662
|
-
const index = R++;
|
|
6663
|
-
debug(name, index, value);
|
|
6664
|
-
t[name] = index;
|
|
6665
|
-
src[index] = value;
|
|
6666
|
-
safeSrc[index] = safe;
|
|
6667
|
-
re[index] = new RegExp(value, isGlobal ? "g" : void 0);
|
|
6668
|
-
safeRe[index] = new RegExp(safe, isGlobal ? "g" : void 0);
|
|
6669
|
-
};
|
|
6670
|
-
createToken("NUMERICIDENTIFIER", "0|[1-9]\\d*");
|
|
6671
|
-
createToken("NUMERICIDENTIFIERLOOSE", "\\d+");
|
|
6672
|
-
createToken("NONNUMERICIDENTIFIER", `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);
|
|
6673
|
-
createToken("MAINVERSION", `(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})`);
|
|
6674
|
-
createToken("MAINVERSIONLOOSE", `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})`);
|
|
6675
|
-
createToken("PRERELEASEIDENTIFIER", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIER]})`);
|
|
6676
|
-
createToken("PRERELEASEIDENTIFIERLOOSE", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIERLOOSE]})`);
|
|
6677
|
-
createToken("PRERELEASE", `(?:-(${src[t.PRERELEASEIDENTIFIER]}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`);
|
|
6678
|
-
createToken("PRERELEASELOOSE", `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);
|
|
6679
|
-
createToken("BUILDIDENTIFIER", `${LETTERDASHNUMBER}+`);
|
|
6680
|
-
createToken("BUILD", `(?:\\+(${src[t.BUILDIDENTIFIER]}(?:\\.${src[t.BUILDIDENTIFIER]})*))`);
|
|
6681
|
-
createToken("FULLPLAIN", `v?${src[t.MAINVERSION]}${src[t.PRERELEASE]}?${src[t.BUILD]}?`);
|
|
6682
|
-
createToken("FULL", `^${src[t.FULLPLAIN]}$`);
|
|
6683
|
-
createToken("LOOSEPLAIN", `[v=\\s]*${src[t.MAINVERSIONLOOSE]}${src[t.PRERELEASELOOSE]}?${src[t.BUILD]}?`);
|
|
6684
|
-
createToken("LOOSE", `^${src[t.LOOSEPLAIN]}$`);
|
|
6685
|
-
createToken("GTLT", "((?:<|>)?=?)");
|
|
6686
|
-
createToken("XRANGEIDENTIFIERLOOSE", `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);
|
|
6687
|
-
createToken("XRANGEIDENTIFIER", `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`);
|
|
6688
|
-
createToken("XRANGEPLAIN", `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:${src[t.PRERELEASE]})?${src[t.BUILD]}?)?)?`);
|
|
6689
|
-
createToken("XRANGEPLAINLOOSE", `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:${src[t.PRERELEASELOOSE]})?${src[t.BUILD]}?)?)?`);
|
|
6690
|
-
createToken("XRANGE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`);
|
|
6691
|
-
createToken("XRANGELOOSE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`);
|
|
6692
|
-
createToken("COERCEPLAIN", `(^|[^\\d])(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`);
|
|
6693
|
-
createToken("COERCE", `${src[t.COERCEPLAIN]}(?:$|[^\\d])`);
|
|
6694
|
-
createToken("COERCEFULL", src[t.COERCEPLAIN] + `(?:${src[t.PRERELEASE]})?(?:${src[t.BUILD]})?(?:$|[^\\d])`);
|
|
6695
|
-
createToken("COERCERTL", src[t.COERCE], true);
|
|
6696
|
-
createToken("COERCERTLFULL", src[t.COERCEFULL], true);
|
|
6697
|
-
createToken("LONETILDE", "(?:~>?)");
|
|
6698
|
-
createToken("TILDETRIM", `(\\s*)${src[t.LONETILDE]}\\s+`, true);
|
|
6699
|
-
exports.tildeTrimReplace = "$1~";
|
|
6700
|
-
createToken("TILDE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);
|
|
6701
|
-
createToken("TILDELOOSE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);
|
|
6702
|
-
createToken("LONECARET", "(?:\\^)");
|
|
6703
|
-
createToken("CARETTRIM", `(\\s*)${src[t.LONECARET]}\\s+`, true);
|
|
6704
|
-
exports.caretTrimReplace = "$1^";
|
|
6705
|
-
createToken("CARET", `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);
|
|
6706
|
-
createToken("CARETLOOSE", `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);
|
|
6707
|
-
createToken("COMPARATORLOOSE", `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`);
|
|
6708
|
-
createToken("COMPARATOR", `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`);
|
|
6709
|
-
createToken("COMPARATORTRIM", `(\\s*)${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true);
|
|
6710
|
-
exports.comparatorTrimReplace = "$1$2$3";
|
|
6711
|
-
createToken("HYPHENRANGE", `^\\s*(${src[t.XRANGEPLAIN]})\\s+-\\s+(${src[t.XRANGEPLAIN]})\\s*$`);
|
|
6712
|
-
createToken("HYPHENRANGELOOSE", `^\\s*(${src[t.XRANGEPLAINLOOSE]})\\s+-\\s+(${src[t.XRANGEPLAINLOOSE]})\\s*$`);
|
|
6713
|
-
createToken("STAR", "(<|>)?=?\\s*\\*");
|
|
6714
|
-
createToken("GTE0", "^\\s*>=\\s*0\\.0\\.0\\s*$");
|
|
6715
|
-
createToken("GTE0PRE", "^\\s*>=\\s*0\\.0\\.0-0\\s*$");
|
|
6716
|
-
}));
|
|
6717
|
-
//#endregion
|
|
6718
|
-
//#region node_modules/semver/internal/parse-options.js
|
|
6719
|
-
var require_parse_options = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
6720
|
-
const looseOption = Object.freeze({ loose: true });
|
|
6721
|
-
const emptyOpts = Object.freeze({});
|
|
6722
|
-
const parseOptions = (options) => {
|
|
6723
|
-
if (!options) return emptyOpts;
|
|
6724
|
-
if (typeof options !== "object") return looseOption;
|
|
6725
|
-
return options;
|
|
6726
|
-
};
|
|
6727
|
-
module.exports = parseOptions;
|
|
6728
|
-
}));
|
|
6729
|
-
//#endregion
|
|
6730
|
-
//#region node_modules/semver/internal/identifiers.js
|
|
6731
|
-
var require_identifiers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
6732
|
-
const numeric = /^[0-9]+$/;
|
|
6733
|
-
const compareIdentifiers = (a, b) => {
|
|
6734
|
-
if (typeof a === "number" && typeof b === "number") return a === b ? 0 : a < b ? -1 : 1;
|
|
6735
|
-
const anum = numeric.test(a);
|
|
6736
|
-
const bnum = numeric.test(b);
|
|
6737
|
-
if (anum && bnum) {
|
|
6738
|
-
a = +a;
|
|
6739
|
-
b = +b;
|
|
6740
|
-
}
|
|
6741
|
-
return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;
|
|
6742
|
-
};
|
|
6743
|
-
const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a);
|
|
6744
|
-
module.exports = {
|
|
6745
|
-
compareIdentifiers,
|
|
6746
|
-
rcompareIdentifiers
|
|
6747
|
-
};
|
|
6748
|
-
}));
|
|
6749
|
-
//#endregion
|
|
6750
|
-
//#region node_modules/semver/classes/semver.js
|
|
6751
|
-
var require_semver = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
6752
|
-
const debug = require_debug();
|
|
6753
|
-
const { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants();
|
|
6754
|
-
const { safeRe: re, t } = require_re();
|
|
6755
|
-
const parseOptions = require_parse_options();
|
|
6756
|
-
const { compareIdentifiers } = require_identifiers();
|
|
6757
|
-
const isPrereleaseIdentifier = (prerelease, identifier) => {
|
|
6758
|
-
const identifiers = identifier.split(".");
|
|
6759
|
-
if (identifiers.length > prerelease.length) return false;
|
|
6760
|
-
for (let i = 0; i < identifiers.length; i++) if (compareIdentifiers(prerelease[i], identifiers[i]) !== 0) return false;
|
|
6761
|
-
return true;
|
|
6762
|
-
};
|
|
6763
|
-
module.exports = class SemVer {
|
|
6764
|
-
constructor(version, options) {
|
|
6765
|
-
options = parseOptions(options);
|
|
6766
|
-
if (version instanceof SemVer) if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) return version;
|
|
6767
|
-
else version = version.version;
|
|
6768
|
-
else if (typeof version !== "string") throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`);
|
|
6769
|
-
if (version.length > MAX_LENGTH) throw new TypeError(`version is longer than ${MAX_LENGTH} characters`);
|
|
6770
|
-
debug("SemVer", version, options);
|
|
6771
|
-
this.options = options;
|
|
6772
|
-
this.loose = !!options.loose;
|
|
6773
|
-
this.includePrerelease = !!options.includePrerelease;
|
|
6774
|
-
const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);
|
|
6775
|
-
if (!m) throw new TypeError(`Invalid Version: ${version}`);
|
|
6776
|
-
this.raw = version;
|
|
6777
|
-
this.major = +m[1];
|
|
6778
|
-
this.minor = +m[2];
|
|
6779
|
-
this.patch = +m[3];
|
|
6780
|
-
if (this.major > MAX_SAFE_INTEGER || this.major < 0) throw new TypeError("Invalid major version");
|
|
6781
|
-
if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) throw new TypeError("Invalid minor version");
|
|
6782
|
-
if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) throw new TypeError("Invalid patch version");
|
|
6783
|
-
if (!m[4]) this.prerelease = [];
|
|
6784
|
-
else this.prerelease = m[4].split(".").map((id) => {
|
|
6785
|
-
if (/^[0-9]+$/.test(id)) {
|
|
6786
|
-
const num = +id;
|
|
6787
|
-
if (num >= 0 && num < MAX_SAFE_INTEGER) return num;
|
|
6788
|
-
}
|
|
6789
|
-
return id;
|
|
6790
|
-
});
|
|
6791
|
-
this.build = m[5] ? m[5].split(".") : [];
|
|
6792
|
-
this.format();
|
|
6793
|
-
}
|
|
6794
|
-
format() {
|
|
6795
|
-
this.version = `${this.major}.${this.minor}.${this.patch}`;
|
|
6796
|
-
if (this.prerelease.length) this.version += `-${this.prerelease.join(".")}`;
|
|
6797
|
-
return this.version;
|
|
6798
|
-
}
|
|
6799
|
-
toString() {
|
|
6800
|
-
return this.version;
|
|
6801
|
-
}
|
|
6802
|
-
compare(other) {
|
|
6803
|
-
debug("SemVer.compare", this.version, this.options, other);
|
|
6804
|
-
if (!(other instanceof SemVer)) {
|
|
6805
|
-
if (typeof other === "string" && other === this.version) return 0;
|
|
6806
|
-
other = new SemVer(other, this.options);
|
|
6807
|
-
}
|
|
6808
|
-
if (other.version === this.version) return 0;
|
|
6809
|
-
return this.compareMain(other) || this.comparePre(other);
|
|
6810
|
-
}
|
|
6811
|
-
compareMain(other) {
|
|
6812
|
-
if (!(other instanceof SemVer)) other = new SemVer(other, this.options);
|
|
6813
|
-
if (this.major < other.major) return -1;
|
|
6814
|
-
if (this.major > other.major) return 1;
|
|
6815
|
-
if (this.minor < other.minor) return -1;
|
|
6816
|
-
if (this.minor > other.minor) return 1;
|
|
6817
|
-
if (this.patch < other.patch) return -1;
|
|
6818
|
-
if (this.patch > other.patch) return 1;
|
|
6819
|
-
return 0;
|
|
6820
|
-
}
|
|
6821
|
-
comparePre(other) {
|
|
6822
|
-
if (!(other instanceof SemVer)) other = new SemVer(other, this.options);
|
|
6823
|
-
if (this.prerelease.length && !other.prerelease.length) return -1;
|
|
6824
|
-
else if (!this.prerelease.length && other.prerelease.length) return 1;
|
|
6825
|
-
else if (!this.prerelease.length && !other.prerelease.length) return 0;
|
|
6826
|
-
let i = 0;
|
|
6827
|
-
do {
|
|
6828
|
-
const a = this.prerelease[i];
|
|
6829
|
-
const b = other.prerelease[i];
|
|
6830
|
-
debug("prerelease compare", i, a, b);
|
|
6831
|
-
if (a === void 0 && b === void 0) return 0;
|
|
6832
|
-
else if (b === void 0) return 1;
|
|
6833
|
-
else if (a === void 0) return -1;
|
|
6834
|
-
else if (a === b) continue;
|
|
6835
|
-
else return compareIdentifiers(a, b);
|
|
6836
|
-
} while (++i);
|
|
6837
|
-
}
|
|
6838
|
-
compareBuild(other) {
|
|
6839
|
-
if (!(other instanceof SemVer)) other = new SemVer(other, this.options);
|
|
6840
|
-
let i = 0;
|
|
6841
|
-
do {
|
|
6842
|
-
const a = this.build[i];
|
|
6843
|
-
const b = other.build[i];
|
|
6844
|
-
debug("build compare", i, a, b);
|
|
6845
|
-
if (a === void 0 && b === void 0) return 0;
|
|
6846
|
-
else if (b === void 0) return 1;
|
|
6847
|
-
else if (a === void 0) return -1;
|
|
6848
|
-
else if (a === b) continue;
|
|
6849
|
-
else return compareIdentifiers(a, b);
|
|
6850
|
-
} while (++i);
|
|
6851
|
-
}
|
|
6852
|
-
inc(release, identifier, identifierBase) {
|
|
6853
|
-
if (release.startsWith("pre")) {
|
|
6854
|
-
if (!identifier && identifierBase === false) throw new Error("invalid increment argument: identifier is empty");
|
|
6855
|
-
if (identifier) {
|
|
6856
|
-
const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE]);
|
|
6857
|
-
if (!match || match[1] !== identifier) throw new Error(`invalid identifier: ${identifier}`);
|
|
6858
|
-
}
|
|
6859
|
-
}
|
|
6860
|
-
switch (release) {
|
|
6861
|
-
case "premajor":
|
|
6862
|
-
this.prerelease.length = 0;
|
|
6863
|
-
this.patch = 0;
|
|
6864
|
-
this.minor = 0;
|
|
6865
|
-
this.major++;
|
|
6866
|
-
this.inc("pre", identifier, identifierBase);
|
|
6867
|
-
break;
|
|
6868
|
-
case "preminor":
|
|
6869
|
-
this.prerelease.length = 0;
|
|
6870
|
-
this.patch = 0;
|
|
6871
|
-
this.minor++;
|
|
6872
|
-
this.inc("pre", identifier, identifierBase);
|
|
6873
|
-
break;
|
|
6874
|
-
case "prepatch":
|
|
6875
|
-
this.prerelease.length = 0;
|
|
6876
|
-
this.inc("patch", identifier, identifierBase);
|
|
6877
|
-
this.inc("pre", identifier, identifierBase);
|
|
6878
|
-
break;
|
|
6879
|
-
case "prerelease":
|
|
6880
|
-
if (this.prerelease.length === 0) this.inc("patch", identifier, identifierBase);
|
|
6881
|
-
this.inc("pre", identifier, identifierBase);
|
|
6882
|
-
break;
|
|
6883
|
-
case "release":
|
|
6884
|
-
if (this.prerelease.length === 0) throw new Error(`version ${this.raw} is not a prerelease`);
|
|
6885
|
-
this.prerelease.length = 0;
|
|
6886
|
-
break;
|
|
6887
|
-
case "major":
|
|
6888
|
-
if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) this.major++;
|
|
6889
|
-
this.minor = 0;
|
|
6890
|
-
this.patch = 0;
|
|
6891
|
-
this.prerelease = [];
|
|
6892
|
-
break;
|
|
6893
|
-
case "minor":
|
|
6894
|
-
if (this.patch !== 0 || this.prerelease.length === 0) this.minor++;
|
|
6895
|
-
this.patch = 0;
|
|
6896
|
-
this.prerelease = [];
|
|
6897
|
-
break;
|
|
6898
|
-
case "patch":
|
|
6899
|
-
if (this.prerelease.length === 0) this.patch++;
|
|
6900
|
-
this.prerelease = [];
|
|
6901
|
-
break;
|
|
6902
|
-
case "pre": {
|
|
6903
|
-
const base = Number(identifierBase) ? 1 : 0;
|
|
6904
|
-
if (this.prerelease.length === 0) this.prerelease = [base];
|
|
6905
|
-
else {
|
|
6906
|
-
let i = this.prerelease.length;
|
|
6907
|
-
while (--i >= 0) if (typeof this.prerelease[i] === "number") {
|
|
6908
|
-
this.prerelease[i]++;
|
|
6909
|
-
i = -2;
|
|
6910
|
-
}
|
|
6911
|
-
if (i === -1) {
|
|
6912
|
-
if (identifier === this.prerelease.join(".") && identifierBase === false) throw new Error("invalid increment argument: identifier already exists");
|
|
6913
|
-
this.prerelease.push(base);
|
|
6914
|
-
}
|
|
6915
|
-
}
|
|
6916
|
-
if (identifier) {
|
|
6917
|
-
let prerelease = [identifier, base];
|
|
6918
|
-
if (identifierBase === false) prerelease = [identifier];
|
|
6919
|
-
if (isPrereleaseIdentifier(this.prerelease, identifier)) {
|
|
6920
|
-
const prereleaseBase = this.prerelease[identifier.split(".").length];
|
|
6921
|
-
if (isNaN(prereleaseBase)) this.prerelease = prerelease;
|
|
6922
|
-
} else this.prerelease = prerelease;
|
|
6923
|
-
}
|
|
6924
|
-
break;
|
|
6925
|
-
}
|
|
6926
|
-
default: throw new Error(`invalid increment argument: ${release}`);
|
|
6927
|
-
}
|
|
6928
|
-
this.raw = this.format();
|
|
6929
|
-
if (this.build.length) this.raw += `+${this.build.join(".")}`;
|
|
6930
|
-
return this;
|
|
6931
|
-
}
|
|
6932
|
-
};
|
|
6933
|
-
}));
|
|
6934
|
-
//#endregion
|
|
6935
|
-
//#region node_modules/semver/functions/compare.js
|
|
6936
|
-
var require_compare = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
6937
|
-
const SemVer = require_semver();
|
|
6938
|
-
const compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));
|
|
6939
|
-
module.exports = compare;
|
|
6940
|
-
}));
|
|
6941
|
-
//#endregion
|
|
6942
|
-
//#region node_modules/semver/functions/gte.js
|
|
6943
|
-
var require_gte = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
6944
|
-
const compare = require_compare();
|
|
6945
|
-
const gte = (a, b, loose) => compare(a, b, loose) >= 0;
|
|
6946
|
-
module.exports = gte;
|
|
6947
|
-
}));
|
|
6948
|
-
//#endregion
|
|
6949
|
-
//#region node_modules/semver/functions/parse.js
|
|
6950
|
-
var require_parse = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
6951
|
-
const SemVer = require_semver();
|
|
6952
|
-
const parse = (version, options, throwErrors = false) => {
|
|
6953
|
-
if (version instanceof SemVer) return version;
|
|
6954
|
-
try {
|
|
6955
|
-
return new SemVer(version, options);
|
|
6956
|
-
} catch (er) {
|
|
6957
|
-
if (!throwErrors) return null;
|
|
6958
|
-
throw er;
|
|
6959
|
-
}
|
|
6960
|
-
};
|
|
6961
|
-
module.exports = parse;
|
|
6962
|
-
}));
|
|
6963
|
-
//#endregion
|
|
6964
|
-
//#region node_modules/semver/functions/valid.js
|
|
6965
|
-
var require_valid = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
6966
|
-
const parse = require_parse();
|
|
6967
|
-
const valid = (version, options) => {
|
|
6968
|
-
const v = parse(version, options);
|
|
6969
|
-
return v ? v.version : null;
|
|
6970
|
-
};
|
|
6971
|
-
module.exports = valid;
|
|
6972
|
-
}));
|
|
6973
|
-
//#endregion
|
|
6974
|
-
//#region src/client/plugin-update-store.ts
|
|
6975
|
-
var import_gte = /* @__PURE__ */ __toESM(require_gte(), 1);
|
|
6976
|
-
var import_valid = /* @__PURE__ */ __toESM(require_valid(), 1);
|
|
6977
|
-
const POLL_INTERVAL_MS = 30 * 6e4;
|
|
6978
|
-
const FOLLOW_UP_DELAY_MS = 2e3;
|
|
6979
|
-
const MAX_STARTUP_FOLLOW_UPS = 3;
|
|
6980
|
-
const INSTALL_POLL_INTERVAL_MS = 1e3;
|
|
6981
|
-
const INSTALL_MONITOR_TIMEOUT_MS = 12e4;
|
|
6982
|
-
const STALLED_INSTALL_POLL_INTERVAL_MS = 1e4;
|
|
6983
|
-
const STATUS_TIMEOUT_MS = 15e3;
|
|
6984
|
-
const TERMINAL_INSTALL_PHASES = /* @__PURE__ */ new Set([
|
|
6985
|
-
"succeeded",
|
|
6986
|
-
"failed",
|
|
6987
|
-
"rolled-back"
|
|
6988
|
-
]);
|
|
6989
|
-
const ACTIVE_INSTALL_PHASES$1 = [
|
|
6990
|
-
"preparing",
|
|
6991
|
-
"downloading",
|
|
6992
|
-
"verifying",
|
|
6993
|
-
"installing",
|
|
6994
|
-
"restarting"
|
|
6995
|
-
];
|
|
6996
|
-
function isOlderInstall(next, current) {
|
|
6997
|
-
if (current === void 0) return false;
|
|
6998
|
-
if (next.updatedAtMillis < current.updatedAtMillis) return true;
|
|
6999
|
-
return next.jobId === current.jobId && ACTIVE_INSTALL_PHASES$1.includes(next.phase) && (TERMINAL_INSTALL_PHASES.has(current.phase) || ACTIVE_INSTALL_PHASES$1.indexOf(next.phase) < ACTIVE_INSTALL_PHASES$1.indexOf(current.phase));
|
|
7000
|
-
}
|
|
7001
|
-
var ArkmePluginUpdateStore = class {
|
|
7002
|
-
listeners = /* @__PURE__ */ new Set();
|
|
7003
|
-
call;
|
|
7004
|
-
snapshot = {
|
|
7005
|
-
checked: false,
|
|
7006
|
-
busy: false,
|
|
7007
|
-
error: "",
|
|
7008
|
-
installError: ""
|
|
7009
|
-
};
|
|
7010
|
-
pending;
|
|
7011
|
-
pendingInstall;
|
|
7012
|
-
pendingStatusCheck;
|
|
7013
|
-
cancelQueries = /* @__PURE__ */ new Set();
|
|
7014
|
-
requestedTargetVersion;
|
|
7015
|
-
installStatusFailures = 0;
|
|
7016
|
-
interval;
|
|
7017
|
-
followUp;
|
|
7018
|
-
installPoll;
|
|
7019
|
-
installMonitor;
|
|
7020
|
-
installMonitorDeadline = 0;
|
|
7021
|
-
installProgressKey = "";
|
|
7022
|
-
installRevision = 0;
|
|
7023
|
-
installReadSequence = 0;
|
|
7024
|
-
lifecycleRevision = 0;
|
|
7025
|
-
stopped = false;
|
|
7026
|
-
pendingPreviousJobId;
|
|
7027
|
-
followUpCount = 0;
|
|
7028
|
-
running = false;
|
|
7029
|
-
onVisibilityChange = () => {
|
|
7030
|
-
if (typeof document !== "undefined" && document.visibilityState === "visible") {
|
|
7031
|
-
this.followUpCount = 0;
|
|
7032
|
-
this.installStatusFailures = 0;
|
|
7033
|
-
this.refresh(true);
|
|
7034
|
-
this.refreshInstallStatus();
|
|
7035
|
-
}
|
|
7036
|
-
};
|
|
7037
|
-
constructor(call = callArkme) {
|
|
7038
|
-
this.call = call;
|
|
7039
|
-
}
|
|
7040
|
-
subscribe = (listener) => {
|
|
7041
|
-
this.listeners.add(listener);
|
|
7042
|
-
return () => this.listeners.delete(listener);
|
|
7043
|
-
};
|
|
7044
|
-
getSnapshot = () => this.snapshot;
|
|
7045
|
-
start() {
|
|
7046
|
-
if (this.running) return () => void 0;
|
|
7047
|
-
this.stopped = false;
|
|
7048
|
-
this.running = true;
|
|
7049
|
-
this.followUpCount = 0;
|
|
7050
|
-
this.installStatusFailures = 0;
|
|
7051
|
-
this.refresh(true);
|
|
7052
|
-
this.refreshInstallStatus(false);
|
|
7053
|
-
this.interval = setInterval(() => {
|
|
7054
|
-
this.refresh();
|
|
7055
|
-
}, POLL_INTERVAL_MS);
|
|
7056
|
-
if (typeof document !== "undefined") document.addEventListener("visibilitychange", this.onVisibilityChange);
|
|
7057
|
-
return () => this.stop();
|
|
7058
|
-
}
|
|
7059
|
-
stop() {
|
|
7060
|
-
const wasRunning = this.running;
|
|
7061
|
-
this.running = false;
|
|
7062
|
-
this.stopped = true;
|
|
7063
|
-
this.lifecycleRevision += 1;
|
|
7064
|
-
this.installRevision += 1;
|
|
7065
|
-
this.installReadSequence += 1;
|
|
7066
|
-
this.resetInstallMonitor();
|
|
7067
|
-
this.pending = void 0;
|
|
7068
|
-
this.pendingInstall = void 0;
|
|
7069
|
-
this.pendingStatusCheck = void 0;
|
|
7070
|
-
for (const cancel of this.cancelQueries) cancel();
|
|
7071
|
-
this.snapshot = {
|
|
7072
|
-
...this.snapshot,
|
|
7073
|
-
busy: false,
|
|
7074
|
-
installPending: false,
|
|
7075
|
-
installStatusChecking: false,
|
|
7076
|
-
installWarning: ""
|
|
7077
|
-
};
|
|
7078
|
-
if (this.interval !== void 0) clearInterval(this.interval);
|
|
7079
|
-
if (this.followUp !== void 0) clearTimeout(this.followUp);
|
|
7080
|
-
if (this.installPoll !== void 0) clearTimeout(this.installPoll);
|
|
7081
|
-
this.interval = void 0;
|
|
7082
|
-
this.followUp = void 0;
|
|
7083
|
-
this.installPoll = void 0;
|
|
7084
|
-
if (wasRunning && typeof document !== "undefined") document.removeEventListener("visibilitychange", this.onVisibilityChange);
|
|
7085
|
-
}
|
|
7086
|
-
async refresh(manual = false) {
|
|
7087
|
-
if (this.pending !== void 0) return await this.pending;
|
|
7088
|
-
const lifecycle = this.lifecycleRevision;
|
|
7089
|
-
this.setSnapshot({
|
|
7090
|
-
...this.snapshot,
|
|
7091
|
-
busy: manual || this.snapshot.installPending === true,
|
|
7092
|
-
error: ""
|
|
7093
|
-
});
|
|
7094
|
-
const task = this.query(manual ? "plugin.update.check" : "plugin.update.status").then((status) => {
|
|
7095
|
-
if (lifecycle !== this.lifecycleRevision) return void 0;
|
|
7096
|
-
const previousVersion = this.snapshot.status?.installedVersion;
|
|
7097
|
-
const reconciled = this.reconcileRunningVersion(status);
|
|
7098
|
-
this.setSnapshot({
|
|
7099
|
-
...this.snapshot,
|
|
7100
|
-
checked: true,
|
|
7101
|
-
busy: this.snapshot.installPending === true,
|
|
7102
|
-
status,
|
|
7103
|
-
error: ""
|
|
7104
|
-
});
|
|
7105
|
-
this.scheduleFollowUp(status);
|
|
7106
|
-
if (reconciled && previousVersion !== void 0 && status.installedVersion !== previousVersion && typeof location !== "undefined") location.reload();
|
|
7107
|
-
return status;
|
|
7108
|
-
}).catch((error) => {
|
|
7109
|
-
if (lifecycle !== this.lifecycleRevision) return void 0;
|
|
7110
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
7111
|
-
this.setSnapshot({
|
|
7112
|
-
...this.snapshot,
|
|
7113
|
-
checked: true,
|
|
7114
|
-
busy: this.snapshot.installPending === true,
|
|
7115
|
-
error: message
|
|
7116
|
-
});
|
|
7117
|
-
}).finally(() => {
|
|
7118
|
-
if (this.pending === task) this.pending = void 0;
|
|
7119
|
-
});
|
|
7120
|
-
this.pending = task;
|
|
7121
|
-
return await task;
|
|
7122
|
-
}
|
|
7123
|
-
async acknowledge(snoozeHours = 24) {
|
|
7124
|
-
if (this.pending !== void 0) await this.pending;
|
|
7125
|
-
this.setSnapshot({
|
|
7126
|
-
...this.snapshot,
|
|
7127
|
-
busy: true,
|
|
7128
|
-
error: ""
|
|
7129
|
-
});
|
|
7130
|
-
try {
|
|
7131
|
-
const status = await this.call("plugin.update.acknowledge", { snoozeHours });
|
|
7132
|
-
this.setSnapshot({
|
|
7133
|
-
...this.snapshot,
|
|
7134
|
-
checked: true,
|
|
7135
|
-
busy: this.snapshot.installPending === true,
|
|
7136
|
-
status,
|
|
7137
|
-
error: ""
|
|
7138
|
-
});
|
|
7139
|
-
return status;
|
|
7140
|
-
} catch (error) {
|
|
7141
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
7142
|
-
this.setSnapshot({
|
|
7143
|
-
...this.snapshot,
|
|
7144
|
-
checked: true,
|
|
7145
|
-
busy: this.snapshot.installPending === true,
|
|
7146
|
-
error: message
|
|
7147
|
-
});
|
|
7148
|
-
return;
|
|
7149
|
-
}
|
|
7150
|
-
}
|
|
7151
|
-
async install() {
|
|
7152
|
-
if (this.pendingInstall !== void 0) return await this.pendingInstall;
|
|
7153
|
-
if (this.snapshot.install !== void 0 && ACTIVE_INSTALL_PHASES$1.includes(this.snapshot.install.phase)) return this.snapshot.install;
|
|
7154
|
-
if (this.snapshot.installStatusError) return void 0;
|
|
7155
|
-
const revision = ++this.installRevision;
|
|
7156
|
-
this.installReadSequence += 1;
|
|
7157
|
-
this.pendingPreviousJobId = this.snapshot.install?.jobId;
|
|
7158
|
-
this.requestedTargetVersion = this.snapshot.status?.latestVersion ?? this.snapshot.install?.targetVersion;
|
|
7159
|
-
if (this.installPoll !== void 0) clearTimeout(this.installPoll);
|
|
7160
|
-
this.installPoll = void 0;
|
|
7161
|
-
this.monitorInstallProgress("pending");
|
|
7162
|
-
const task = Promise.resolve().then(async () => {
|
|
7163
|
-
if (revision !== this.installRevision) return void 0;
|
|
7164
|
-
try {
|
|
7165
|
-
const install = await this.call("plugin.update.install");
|
|
7166
|
-
if (revision !== this.installRevision) return void 0;
|
|
7167
|
-
this.installReadSequence += 1;
|
|
7168
|
-
const current = install.jobId === this.snapshot.install?.jobId && isOlderInstall(install, this.snapshot.install) ? this.snapshot.install : install;
|
|
7169
|
-
this.requestedTargetVersion = current.targetVersion;
|
|
7170
|
-
this.monitorInstall(current);
|
|
7171
|
-
this.setSnapshot({
|
|
7172
|
-
...this.snapshot,
|
|
7173
|
-
busy: this.pending !== void 0,
|
|
7174
|
-
installPending: false,
|
|
7175
|
-
install: current,
|
|
7176
|
-
installError: ""
|
|
7177
|
-
});
|
|
7178
|
-
this.scheduleInstallPoll();
|
|
7179
|
-
return install;
|
|
7180
|
-
} catch (error) {
|
|
7181
|
-
if (revision !== this.installRevision) return void 0;
|
|
7182
|
-
this.installReadSequence += 1;
|
|
7183
|
-
const observed = this.snapshot.install;
|
|
7184
|
-
if (observed !== void 0 && observed.jobId !== this.pendingPreviousJobId) {
|
|
7185
|
-
this.monitorInstall(observed);
|
|
7186
|
-
this.setSnapshot({
|
|
7187
|
-
...this.snapshot,
|
|
7188
|
-
busy: this.pending !== void 0,
|
|
7189
|
-
installPending: false,
|
|
7190
|
-
installError: ""
|
|
7191
|
-
});
|
|
7192
|
-
this.scheduleInstallPoll();
|
|
7193
|
-
return observed;
|
|
7194
|
-
}
|
|
7195
|
-
this.resetInstallMonitor();
|
|
7196
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
7197
|
-
this.setSnapshot({
|
|
7198
|
-
...this.snapshot,
|
|
7199
|
-
busy: this.pending !== void 0,
|
|
7200
|
-
installPending: false,
|
|
7201
|
-
installWarning: "",
|
|
7202
|
-
installError: message
|
|
7203
|
-
});
|
|
7204
|
-
return;
|
|
7205
|
-
}
|
|
7206
|
-
}).finally(() => {
|
|
7207
|
-
if (this.pendingInstall === task) this.pendingInstall = void 0;
|
|
7208
|
-
});
|
|
7209
|
-
this.pendingInstall = task;
|
|
7210
|
-
this.setSnapshot({
|
|
7211
|
-
...this.snapshot,
|
|
7212
|
-
busy: true,
|
|
7213
|
-
installPending: true,
|
|
7214
|
-
installError: "",
|
|
7215
|
-
installWarning: ""
|
|
7216
|
-
});
|
|
7217
|
-
this.scheduleInstallPoll();
|
|
7218
|
-
return await task;
|
|
7219
|
-
}
|
|
7220
|
-
/** Recovery checks are read-only, bounded and shared across all UI entries. */
|
|
7221
|
-
async checkInstallStatus() {
|
|
7222
|
-
if (this.pendingStatusCheck !== void 0) return await this.pendingStatusCheck;
|
|
7223
|
-
const lifecycle = this.lifecycleRevision;
|
|
7224
|
-
this.installStatusFailures = 0;
|
|
7225
|
-
const task = Promise.resolve().then(async () => {
|
|
7226
|
-
if (lifecycle !== this.lifecycleRevision) return;
|
|
7227
|
-
await this.refreshInstallStatus();
|
|
7228
|
-
if (lifecycle !== this.lifecycleRevision) return;
|
|
7229
|
-
await this.refresh(true);
|
|
7230
|
-
}).finally(() => {
|
|
7231
|
-
if (this.pendingStatusCheck !== task) return;
|
|
7232
|
-
this.pendingStatusCheck = void 0;
|
|
7233
|
-
this.setSnapshot({
|
|
7234
|
-
...this.snapshot,
|
|
7235
|
-
installStatusChecking: false,
|
|
7236
|
-
installStatusFeedback: this.snapshot.installStatusError ? "暂时无法连接更新服务,请稍后再检查。" : this.snapshot.installWarning ? "已检查,暂未收到新的更新结果。可稍后再检查。" : ""
|
|
7237
|
-
});
|
|
7238
|
-
});
|
|
7239
|
-
this.pendingStatusCheck = task;
|
|
7240
|
-
this.setSnapshot({
|
|
7241
|
-
...this.snapshot,
|
|
7242
|
-
installStatusChecking: true,
|
|
7243
|
-
installStatusFeedback: ""
|
|
7244
|
-
});
|
|
7245
|
-
return await task;
|
|
7246
|
-
}
|
|
7247
|
-
async refreshInstallStatus(reloadOnSuccess = true) {
|
|
7248
|
-
const revision = this.installRevision;
|
|
7249
|
-
const sequence = ++this.installReadSequence;
|
|
7250
|
-
const isCurrent = () => revision === this.installRevision && sequence === this.installReadSequence;
|
|
7251
|
-
try {
|
|
7252
|
-
const install = await this.query("plugin.update.install-status");
|
|
7253
|
-
if (!isCurrent()) return void 0;
|
|
7254
|
-
this.installStatusFailures = 0;
|
|
7255
|
-
this.setSnapshot({
|
|
7256
|
-
...this.snapshot,
|
|
7257
|
-
installStatusError: "",
|
|
7258
|
-
installStatusFeedback: ""
|
|
7259
|
-
});
|
|
7260
|
-
const olderTarget = install !== void 0 && this.requestedTargetVersion !== void 0 && (0, import_valid.default)(install.targetVersion) && (0, import_valid.default)(this.requestedTargetVersion) && !(0, import_gte.default)(install.targetVersion, this.requestedTargetVersion);
|
|
7261
|
-
if (this.snapshot.installPending && (install === void 0 || install.jobId === this.pendingPreviousJobId || olderTarget)) {
|
|
7262
|
-
await this.refresh();
|
|
7263
|
-
if (!isCurrent()) return void 0;
|
|
7264
|
-
this.scheduleInstallPoll();
|
|
7265
|
-
return;
|
|
7266
|
-
}
|
|
7267
|
-
if (install !== void 0) {
|
|
7268
|
-
if ((!this.snapshot.installPending || install.jobId === this.pendingPreviousJobId) && isOlderInstall(install, this.snapshot.install)) {
|
|
7269
|
-
this.scheduleInstallPoll();
|
|
7270
|
-
return;
|
|
7271
|
-
}
|
|
7272
|
-
this.monitorInstall(install);
|
|
7273
|
-
this.requestedTargetVersion = install.targetVersion;
|
|
7274
|
-
if (this.snapshot.status !== void 0 && this.reconcileRunningVersion(this.snapshot.status)) {
|
|
7275
|
-
this.setSnapshot({
|
|
7276
|
-
...this.snapshot,
|
|
7277
|
-
busy: this.pending !== void 0
|
|
7278
|
-
});
|
|
7279
|
-
return;
|
|
7280
|
-
}
|
|
7281
|
-
if (TERMINAL_INSTALL_PHASES.has(install.phase)) this.releaseInstallCommand();
|
|
7282
|
-
this.setSnapshot({
|
|
7283
|
-
...this.snapshot,
|
|
7284
|
-
install,
|
|
7285
|
-
installPending: false,
|
|
7286
|
-
busy: this.pending !== void 0,
|
|
7287
|
-
installError: ""
|
|
7288
|
-
});
|
|
7289
|
-
if (install.phase === "succeeded" && reloadOnSuccess && typeof location !== "undefined") {
|
|
7290
|
-
location.reload();
|
|
7291
|
-
return install;
|
|
7292
|
-
}
|
|
7293
|
-
if (TERMINAL_INSTALL_PHASES.has(install.phase)) {
|
|
7294
|
-
const expiresIn = PLUGIN_UPDATE_TERMINAL_STATE_TTL_MS - (Date.now() - install.updatedAtMillis);
|
|
7295
|
-
this.scheduleInstallPoll(Math.max(1, expiresIn + 1));
|
|
7296
|
-
} else this.scheduleInstallPoll();
|
|
7297
|
-
} else if (this.snapshot.install !== void 0) {
|
|
7298
|
-
const { install: previousInstall, ...snapshot } = this.snapshot;
|
|
7299
|
-
const previousVersion = snapshot.status?.installedVersion;
|
|
7300
|
-
this.resetInstallMonitor();
|
|
7301
|
-
this.setSnapshot({
|
|
7302
|
-
...snapshot,
|
|
7303
|
-
installError: "",
|
|
7304
|
-
installWarning: ""
|
|
7305
|
-
});
|
|
7306
|
-
if (!TERMINAL_INSTALL_PHASES.has(previousInstall.phase) && previousInstall.phase !== "idle") {
|
|
7307
|
-
if (this.pending !== void 0) await this.pending;
|
|
7308
|
-
if (!isCurrent()) return void 0;
|
|
7309
|
-
const status = await this.refresh();
|
|
7310
|
-
if (isCurrent() && reloadOnSuccess && previousVersion !== void 0 && status !== void 0 && status.installedVersion !== previousVersion && typeof location !== "undefined") location.reload();
|
|
7311
|
-
}
|
|
7312
|
-
} else if (this.requestedTargetVersion !== void 0) await this.refresh();
|
|
7313
|
-
return install;
|
|
7314
|
-
} catch {
|
|
7315
|
-
if (!isCurrent()) return void 0;
|
|
7316
|
-
this.installStatusFailures += 1;
|
|
7317
|
-
this.setSnapshot({
|
|
7318
|
-
...this.snapshot,
|
|
7319
|
-
installStatusError: "暂时无法获取更新状态,请检查状态后再更新。"
|
|
7320
|
-
});
|
|
7321
|
-
if (this.installMonitorDeadline > 0) {
|
|
7322
|
-
const previousVersion = this.snapshot.status?.installedVersion;
|
|
7323
|
-
const status = await this.refresh();
|
|
7324
|
-
if (!isCurrent()) return void 0;
|
|
7325
|
-
if (reloadOnSuccess && previousVersion !== void 0 && status !== void 0 && status.installedVersion !== previousVersion && typeof location !== "undefined") {
|
|
7326
|
-
location.reload();
|
|
7327
|
-
return;
|
|
7328
|
-
}
|
|
7329
|
-
this.scheduleInstallPoll();
|
|
7330
|
-
} else if (this.installStatusFailures <= MAX_STARTUP_FOLLOW_UPS) this.scheduleInstallPoll(FOLLOW_UP_DELAY_MS * 2 ** (this.installStatusFailures - 1));
|
|
7331
|
-
return;
|
|
7332
|
-
}
|
|
7333
|
-
}
|
|
7334
|
-
releaseInstallCommand() {
|
|
7335
|
-
this.installRevision += 1;
|
|
7336
|
-
this.pendingInstall = void 0;
|
|
7337
|
-
this.pendingPreviousJobId = void 0;
|
|
7338
|
-
}
|
|
7339
|
-
reconcileRunningVersion(status) {
|
|
7340
|
-
const target = this.requestedTargetVersion ?? this.snapshot.install?.targetVersion;
|
|
7341
|
-
if (!target || !(0, import_valid.default)(target) || !(0, import_valid.default)(status.installedVersion) || !(0, import_gte.default)(status.installedVersion, target)) return false;
|
|
7342
|
-
this.releaseInstallCommand();
|
|
7343
|
-
this.requestedTargetVersion = void 0;
|
|
7344
|
-
this.resetInstallMonitor();
|
|
7345
|
-
if (this.installPoll !== void 0) clearTimeout(this.installPoll);
|
|
7346
|
-
this.installPoll = void 0;
|
|
7347
|
-
const { install: _install, ...snapshot } = this.snapshot;
|
|
7348
|
-
this.snapshot = {
|
|
7349
|
-
...snapshot,
|
|
7350
|
-
installPending: false,
|
|
7351
|
-
installError: "",
|
|
7352
|
-
installWarning: "",
|
|
7353
|
-
installStatusError: "",
|
|
7354
|
-
installStatusFeedback: ""
|
|
7355
|
-
};
|
|
7356
|
-
return true;
|
|
7357
|
-
}
|
|
7358
|
-
async query(operation) {
|
|
7359
|
-
const controller = new AbortController();
|
|
7360
|
-
let cancel;
|
|
7361
|
-
const timeout = new Promise((_, reject) => {
|
|
7362
|
-
cancel = () => {
|
|
7363
|
-
controller.abort();
|
|
7364
|
-
reject(/* @__PURE__ */ new Error("更新状态查询超时"));
|
|
7365
|
-
};
|
|
7366
|
-
});
|
|
7367
|
-
const timer = setTimeout(cancel, STATUS_TIMEOUT_MS);
|
|
7368
|
-
this.cancelQueries.add(cancel);
|
|
7369
|
-
try {
|
|
7370
|
-
return await Promise.race([this.call(operation, void 0, controller.signal), timeout]);
|
|
7371
|
-
} finally {
|
|
7372
|
-
clearTimeout(timer);
|
|
7373
|
-
this.cancelQueries.delete(cancel);
|
|
7374
|
-
}
|
|
7375
|
-
}
|
|
7376
|
-
resetInstallMonitor() {
|
|
7377
|
-
if (this.installMonitor !== void 0) clearTimeout(this.installMonitor);
|
|
7378
|
-
this.installMonitor = void 0;
|
|
7379
|
-
this.installMonitorDeadline = 0;
|
|
7380
|
-
this.installProgressKey = "";
|
|
7381
|
-
}
|
|
7382
|
-
monitorInstall(install) {
|
|
7383
|
-
if (!ACTIVE_INSTALL_PHASES$1.includes(install.phase)) {
|
|
7384
|
-
this.resetInstallMonitor();
|
|
7385
|
-
this.snapshot = {
|
|
7386
|
-
...this.snapshot,
|
|
7387
|
-
installWarning: ""
|
|
7388
|
-
};
|
|
7389
|
-
return;
|
|
7390
|
-
}
|
|
7391
|
-
this.monitorInstallProgress(`${install.jobId}:${install.phase}:${install.updatedAtMillis}`);
|
|
7392
|
-
}
|
|
7393
|
-
monitorInstallProgress(key) {
|
|
7394
|
-
if (key === this.installProgressKey) return;
|
|
7395
|
-
this.resetInstallMonitor();
|
|
7396
|
-
this.installProgressKey = key;
|
|
7397
|
-
this.installMonitorDeadline = Date.now() + INSTALL_MONITOR_TIMEOUT_MS;
|
|
7398
|
-
this.snapshot = {
|
|
7399
|
-
...this.snapshot,
|
|
7400
|
-
installWarning: ""
|
|
7401
|
-
};
|
|
7402
|
-
this.installMonitor = setTimeout(() => {
|
|
7403
|
-
this.installMonitor = void 0;
|
|
7404
|
-
this.setSnapshot({
|
|
7405
|
-
...this.snapshot,
|
|
7406
|
-
installWarning: "更新长时间没有新进展,结果待确认。你可以继续使用,稍后检查状态。"
|
|
7407
|
-
});
|
|
7408
|
-
}, INSTALL_MONITOR_TIMEOUT_MS);
|
|
7409
|
-
}
|
|
7410
|
-
scheduleFollowUp(status) {
|
|
7411
|
-
if (!this.running || this.followUpCount >= MAX_STARTUP_FOLLOW_UPS || !status.checking && !status.stale && status.availability !== "unknown") return;
|
|
7412
|
-
if (this.followUp !== void 0) clearTimeout(this.followUp);
|
|
7413
|
-
this.followUpCount += 1;
|
|
7414
|
-
this.followUp = setTimeout(() => {
|
|
7415
|
-
this.followUp = void 0;
|
|
7416
|
-
this.refresh();
|
|
7417
|
-
}, FOLLOW_UP_DELAY_MS);
|
|
7418
|
-
}
|
|
7419
|
-
setSnapshot(snapshot) {
|
|
7420
|
-
this.snapshot = snapshot;
|
|
7421
|
-
for (const listener of [...this.listeners]) listener();
|
|
7422
|
-
}
|
|
7423
|
-
scheduleInstallPoll(delayMs = this.snapshot.installWarning ? STALLED_INSTALL_POLL_INTERVAL_MS : INSTALL_POLL_INTERVAL_MS) {
|
|
7424
|
-
if (this.stopped) return;
|
|
7425
|
-
if (this.installPoll !== void 0) clearTimeout(this.installPoll);
|
|
7426
|
-
this.installPoll = setTimeout(() => {
|
|
7427
|
-
this.installPoll = void 0;
|
|
7428
|
-
this.refreshInstallStatus();
|
|
7429
|
-
}, delayMs);
|
|
7430
|
-
}
|
|
7431
|
-
};
|
|
7432
|
-
const arkmePluginUpdateStore = new ArkmePluginUpdateStore();
|
|
7433
|
-
//#endregion
|
|
7434
|
-
//#region src/client/update-presentation.ts
|
|
7435
|
-
var import_gt = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
7436
|
-
const compare = require_compare();
|
|
7437
|
-
const gt = (a, b, loose) => compare(a, b, loose) > 0;
|
|
7438
|
-
module.exports = gt;
|
|
7439
|
-
})))(), 1);
|
|
7440
|
-
const ACTIVE_PLUGIN_PHASES = /* @__PURE__ */ new Set([
|
|
7441
|
-
"preparing",
|
|
7442
|
-
"downloading",
|
|
7443
|
-
"verifying",
|
|
7444
|
-
"installing",
|
|
7445
|
-
"restarting"
|
|
7446
|
-
]);
|
|
7447
|
-
function versionLabel$3(version) {
|
|
7448
|
-
return version?.trim() || "…";
|
|
7449
|
-
}
|
|
7450
|
-
function formatBytes$1(value) {
|
|
7451
|
-
if (value === void 0 || !Number.isFinite(value) || value <= 0) return void 0;
|
|
7452
|
-
if (value < 1024) return `${Math.round(value)} B`;
|
|
7453
|
-
if (value < 1024 * 1024) return `${(value / 1024).toFixed(1)} KB`;
|
|
7454
|
-
return `${(value / (1024 * 1024)).toFixed(1)} MB`;
|
|
7455
|
-
}
|
|
7456
|
-
function appUpdateProgress(downloaded, total) {
|
|
7457
|
-
if (total === void 0 || total <= 0) return void 0;
|
|
7458
|
-
return Math.max(0, Math.min(100, Math.round((downloaded ?? 0) / total * 100)));
|
|
7459
|
-
}
|
|
7460
|
-
function pluginProgress(phase, busy) {
|
|
7461
|
-
switch (phase) {
|
|
7462
|
-
case "preparing": return 12;
|
|
7463
|
-
case "downloading": return 36;
|
|
7464
|
-
case "verifying": return 58;
|
|
7465
|
-
case "installing": return 78;
|
|
7466
|
-
case "restarting": return 94;
|
|
7467
|
-
default: return busy ? 8 : void 0;
|
|
7468
|
-
}
|
|
7469
|
-
}
|
|
7470
|
-
function pluginPhaseMessage(phase) {
|
|
7471
|
-
switch (phase) {
|
|
7472
|
-
case "preparing": return "正在准备更新";
|
|
7473
|
-
case "downloading": return "正在下载更新包";
|
|
7474
|
-
case "verifying": return "正在校验更新包";
|
|
7475
|
-
case "installing": return "正在安装新版本";
|
|
7476
|
-
case "restarting": return "完成后将自动返回新版本";
|
|
7477
|
-
case "failed": return "更新未完成,请重试";
|
|
7478
|
-
case "rolled-back": return "已恢复到更新前版本";
|
|
7479
|
-
default: return;
|
|
7480
|
-
}
|
|
7481
|
-
}
|
|
7482
|
-
function blockedReason$1(status) {
|
|
7483
|
-
if (status.canInstallInApp) return void 0;
|
|
7484
|
-
switch (status.installBlockedReason) {
|
|
7485
|
-
case "local-install": return "当前为本地开发插件,不能在应用内覆盖更新。";
|
|
7486
|
-
case "update-disabled": return "插件自动更新当前未启用。";
|
|
7487
|
-
case "profile-unavailable": return "当前插件 Profile 不支持应用内更新。";
|
|
7488
|
-
default: return "当前运行环境不支持应用内更新。";
|
|
7489
|
-
}
|
|
7490
|
-
}
|
|
7491
|
-
function updateNotes(summary) {
|
|
7492
|
-
return (summary?.split(/\r?\n/).map((line) => line.trim()).filter(Boolean).slice(0, 3) ?? []).map((line) => {
|
|
7493
|
-
const separator = line.search(/[::—–]/);
|
|
7494
|
-
if (separator <= 0 || separator >= line.length - 1) return { title: line };
|
|
7495
|
-
return {
|
|
7496
|
-
title: line.slice(0, separator).trim(),
|
|
7497
|
-
detail: line.slice(separator + 1).trim()
|
|
7498
|
-
};
|
|
7499
|
-
});
|
|
7500
|
-
}
|
|
7501
|
-
function appItem(snapshot) {
|
|
7502
|
-
const status = snapshot.status;
|
|
7503
|
-
if (status === void 0 || ![
|
|
7504
|
-
"available",
|
|
7505
|
-
"downloading",
|
|
7506
|
-
"downloaded",
|
|
7507
|
-
"failed"
|
|
7508
|
-
].includes(status.status)) return void 0;
|
|
7509
|
-
const latestVersion = versionLabel$3(status.latestVersion);
|
|
7510
|
-
const progress = appUpdateProgress(status.downloadedBytes, status.totalBytes);
|
|
7511
|
-
const packageSize = formatBytes$1(status.totalBytes);
|
|
7512
|
-
const failed = status.status === "failed";
|
|
7513
|
-
const ready = status.status === "downloaded";
|
|
7514
|
-
return {
|
|
7515
|
-
target: "app",
|
|
7516
|
-
instanceKey: `app:${latestVersion}`,
|
|
7517
|
-
productLabel: "Arkme APP",
|
|
7518
|
-
title: failed ? "更新未完成" : ready ? "安装包已下载" : "发现新版本",
|
|
7519
|
-
currentVersion: versionLabel$3(status.currentVersion),
|
|
7520
|
-
latestVersion,
|
|
7521
|
-
...packageSize === void 0 ? {} : { packageSize },
|
|
7522
|
-
notes: updateNotes(status.releaseNotes),
|
|
7523
|
-
available: status.status === "available",
|
|
7524
|
-
active: status.status === "downloading",
|
|
7525
|
-
ready,
|
|
7526
|
-
restarting: false,
|
|
7527
|
-
failed,
|
|
7528
|
-
...status.status === "downloading" ? {
|
|
7529
|
-
phase: "app-downloading",
|
|
7530
|
-
phaseMessage: "可继续使用"
|
|
7531
|
-
} : {},
|
|
7532
|
-
...ready ? {
|
|
7533
|
-
phase: "app-downloaded",
|
|
7534
|
-
phaseMessage: `已下载 ${latestVersion}`
|
|
7535
|
-
} : {},
|
|
7536
|
-
...failed ? {
|
|
7537
|
-
phase: "app-failed",
|
|
7538
|
-
phaseMessage: "请重新尝试下载"
|
|
7539
|
-
} : {},
|
|
7540
|
-
...status.error?.trim() || snapshot.error.trim() ? { error: status.error?.trim() || snapshot.error.trim() } : {},
|
|
7541
|
-
...progress === void 0 ? {} : { progress }
|
|
7542
|
-
};
|
|
7543
|
-
}
|
|
7544
|
-
function derivePluginUpdateItem(snapshot) {
|
|
7545
|
-
const status = snapshot.status;
|
|
7546
|
-
const installPending = snapshot.installPending === true;
|
|
7547
|
-
const obsoleteActive = !installPending && snapshot.install !== void 0 && ACTIVE_PLUGIN_PHASES.has(snapshot.install.phase) && (0, import_valid.default)(status?.installedVersion) !== null && (0, import_valid.default)(snapshot.install.targetVersion) !== null && !(0, import_gt.default)(snapshot.install.targetVersion, status.installedVersion);
|
|
7548
|
-
const installError = obsoleteActive ? "" : snapshot.installError.trim();
|
|
7549
|
-
const completed = !installPending && snapshot.install?.phase === "succeeded" ? snapshot.install : void 0;
|
|
7550
|
-
if (completed !== void 0 && installError === "" && !(status?.availability === "available" && (0, import_valid.default)(status.latestVersion) !== null && (0, import_valid.default)(completed.targetVersion) !== null && (0, import_gt.default)(status.latestVersion, completed.targetVersion))) return void 0;
|
|
7551
|
-
const install = !installPending && !obsoleteActive && completed === void 0 ? snapshot.install : void 0;
|
|
7552
|
-
if (status === void 0 && install === void 0 && !installPending && installError === "" && !snapshot.installStatusError) return void 0;
|
|
7553
|
-
const active = install !== void 0 && ACTIVE_PLUGIN_PHASES.has(install.phase);
|
|
7554
|
-
const uncertain = !obsoleteActive && (Boolean(snapshot.installWarning) && (active || installPending) || Boolean(snapshot.installStatusError) && !active && !installPending);
|
|
7555
|
-
const failed = !uncertain && !installPending && (install?.phase === "failed" || install?.phase === "rolled-back" || installError !== "");
|
|
7556
|
-
const activeDisplay = !failed && !uncertain && (active || installPending);
|
|
7557
|
-
const available = status?.availability === "available" && !activeDisplay && !failed && !uncertain;
|
|
7558
|
-
if (!available && !activeDisplay && !failed && !uncertain) return void 0;
|
|
7559
|
-
const latestVersion = versionLabel$3(install?.targetVersion ?? status?.latestVersion ?? snapshot.install?.targetVersion);
|
|
7560
|
-
const error = failed ? installError || install?.message : void 0;
|
|
7561
|
-
const installBlockedReason = status === void 0 ? void 0 : blockedReason$1(status);
|
|
7562
|
-
const progress = activeDisplay ? pluginProgress(install?.phase, installPending) : void 0;
|
|
7563
|
-
return {
|
|
7564
|
-
target: "plugin",
|
|
7565
|
-
instanceKey: `plugin:${installPending ? `pending:${latestVersion}` : install?.jobId ?? latestVersion}`,
|
|
7566
|
-
productLabel: "Arkme 核心插件",
|
|
7567
|
-
title: uncertain ? "更新状态待确认" : failed ? "更新未完成" : "发现新版本",
|
|
7568
|
-
currentVersion: versionLabel$3(status?.installedVersion ?? install?.previousVersion),
|
|
7569
|
-
latestVersion,
|
|
7570
|
-
notes: updateNotes(status?.summary),
|
|
7571
|
-
available,
|
|
7572
|
-
active: activeDisplay,
|
|
7573
|
-
ready: false,
|
|
7574
|
-
restarting: activeDisplay && install?.phase === "restarting",
|
|
7575
|
-
failed,
|
|
7576
|
-
uncertain,
|
|
7577
|
-
checkingStatus: snapshot.installStatusChecking === true,
|
|
7578
|
-
...installBlockedReason === void 0 ? {} : { blockedReason: installBlockedReason },
|
|
7579
|
-
...error === void 0 || error === "" ? {} : { error },
|
|
7580
|
-
...install?.phase === void 0 ? {} : { phase: install.phase },
|
|
7581
|
-
phaseMessage: uncertain ? snapshot.installStatusChecking ? "正在检查更新状态…" : snapshot.installStatusFeedback || snapshot.installWarning || snapshot.installStatusError || "请检查更新状态。" : installPending ? "正在准备更新" : error || install?.message || pluginPhaseMessage(install?.phase) || "正在准备更新",
|
|
7582
|
-
...progress === void 0 ? {} : { progress }
|
|
7583
|
-
};
|
|
7584
|
-
}
|
|
7585
|
-
/** Pure UI projection over the existing APP and plugin update stores. */
|
|
7586
|
-
function deriveArkmeUpdatePresentation(input) {
|
|
7587
|
-
const items = [derivePluginUpdateItem(input.plugin), appItem(input.app)].filter((item) => item !== void 0);
|
|
7588
|
-
const primary = items.find((item) => item.active) ?? items.find((item) => item.ready || item.failed || item.uncertain) ?? items.find((item) => item.available);
|
|
7589
|
-
return {
|
|
7590
|
-
items,
|
|
7591
|
-
...primary === void 0 ? {} : { primary }
|
|
7592
|
-
};
|
|
7593
|
-
}
|
|
7594
|
-
//#endregion
|
|
7595
6609
|
//#region src/client/redesign/contacts/contacts-tab-store.ts
|
|
7596
6610
|
const DEFAULT_DIRECTORY_CACHE_MAX_AGE_MS = 3e4;
|
|
7597
6611
|
const defaultExpandedSections = () => ({
|
|
@@ -8747,11 +7761,14 @@ window.__ModuleLoader__.load({
|
|
|
8747
7761
|
const target = scrollOwner ?? surface;
|
|
8748
7762
|
target.scrollTop = 0;
|
|
8749
7763
|
}
|
|
8750
|
-
function versionLabel$
|
|
7764
|
+
function versionLabel$3(version) {
|
|
8751
7765
|
return `v${version?.trim() || "…"}`;
|
|
8752
7766
|
}
|
|
7767
|
+
function aboutArkmeVersion(currentVersion, scope = globalThis) {
|
|
7768
|
+
return versionLabel$3(scope.arkmeDesktop?.appVersion ?? currentVersion);
|
|
7769
|
+
}
|
|
8753
7770
|
function aboutHarnessVersion(scope = globalThis) {
|
|
8754
|
-
return versionLabel$
|
|
7771
|
+
return versionLabel$3(scope.arkmeDesktop?.harnessVersion);
|
|
8755
7772
|
}
|
|
8756
7773
|
function updateVersionText(current, latest) {
|
|
8757
7774
|
if (current === "v…") return "当前版本读取中…";
|
|
@@ -8765,48 +7782,16 @@ window.__ModuleLoader__.load({
|
|
|
8765
7782
|
const feedback = input.appError?.trim() ? `检查失败:${input.appError.trim()}` : status === "checking" ? "正在检查更新…" : status === "current" ? input.app?.noUpdateAvailable === true ? "已检查 · 暂无可用版本" : "已检查 · 当前已是最新版本" : status === "available" ? "发现新版本,可以下载更新包" : status === "downloading" ? "正在下载更新包" : status === "downloaded" ? "下载完成,可打开所在文件夹定位安装包" : status === "failed" ? `检查失败:${input.app?.error || "请稍后重试"}` : void 0;
|
|
8766
7783
|
return {
|
|
8767
7784
|
label: "APP",
|
|
8768
|
-
current: versionLabel$
|
|
8769
|
-
latest: versionLabel$
|
|
7785
|
+
current: versionLabel$3(input.app?.currentVersion),
|
|
7786
|
+
latest: versionLabel$3(input.app?.latestVersion ?? input.app?.currentVersion),
|
|
8770
7787
|
action: unavailable || busy ? "busy" : status === "downloaded" ? "open" : status === "available" ? "download" : "check",
|
|
8771
7788
|
...feedback === void 0 ? {} : { feedback },
|
|
8772
7789
|
...input.app?.downloadedFilePath === void 0 ? {} : { downloadedFilePath: input.app.downloadedFilePath }
|
|
8773
7790
|
};
|
|
8774
7791
|
}
|
|
8775
|
-
function buildArkmePluginUpdateRow(input) {
|
|
8776
|
-
if (input.snapshot !== void 0) {
|
|
8777
|
-
const snapshot = input.snapshot;
|
|
8778
|
-
const item = derivePluginUpdateItem(snapshot);
|
|
8779
|
-
if (item?.active || item?.uncertain || item?.failed) return {
|
|
8780
|
-
label: "核心插件",
|
|
8781
|
-
current: item.currentVersion,
|
|
8782
|
-
latest: item.latestVersion,
|
|
8783
|
-
action: "view",
|
|
8784
|
-
feedback: item.uncertain ? `${item.checkingStatus ? "正在检查更新状态…" : "更新状态待确认"} · 查看状态` : item.failed ? "更新未完成 · 查看结果" : `${item.phaseMessage} · 查看进度`
|
|
8785
|
-
};
|
|
8786
|
-
return buildArkmePluginUpdateRow({
|
|
8787
|
-
...snapshot.status === void 0 ? {} : { plugin: {
|
|
8788
|
-
...snapshot.status,
|
|
8789
|
-
...item === void 0 && snapshot.install?.phase === "succeeded" ? { availability: "current" } : {}
|
|
8790
|
-
} },
|
|
8791
|
-
pluginBusy: snapshot.busy || snapshot.installStatusChecking === true,
|
|
8792
|
-
pluginError: snapshot.error
|
|
8793
|
-
});
|
|
8794
|
-
}
|
|
8795
|
-
const pluginAvailable = input.plugin?.availability === "available";
|
|
8796
|
-
const pluginBusy = input.pluginBusy === true || input.plugin?.checking === true;
|
|
8797
|
-
const pluginFeedback = pluginBusy ? "正在检查更新…" : input.pluginError?.trim() ? `检查失败:${input.pluginError.trim()}` : input.plugin?.checkFailed === true ? "检查失败:请稍后重试" : input.plugin?.availability === "current" ? "已检查 · 当前已是最新版本" : input.plugin?.availability === "available" ? "发现新版本,可以立即更新" : void 0;
|
|
8798
|
-
return {
|
|
8799
|
-
label: "核心插件",
|
|
8800
|
-
current: versionLabel$2(input.plugin?.installedVersion),
|
|
8801
|
-
latest: versionLabel$2(input.plugin?.latestVersion),
|
|
8802
|
-
action: pluginBusy ? "busy" : pluginAvailable ? "install" : "check",
|
|
8803
|
-
...pluginFeedback === void 0 ? {} : { feedback: pluginFeedback }
|
|
8804
|
-
};
|
|
8805
|
-
}
|
|
8806
7792
|
function ArkmeSettingsSurface() {
|
|
8807
7793
|
const surfaceRef = (0, react.useRef)(null);
|
|
8808
7794
|
const authState = (0, react.useSyncExternalStore)(arkmeAuthStore.subscribe, arkmeAuthStore.getSnapshot, arkmeAuthStore.getSnapshot);
|
|
8809
|
-
const updateState = (0, react.useSyncExternalStore)(arkmePluginUpdateStore.subscribe, arkmePluginUpdateStore.getSnapshot, arkmePluginUpdateStore.getSnapshot);
|
|
8810
7795
|
const appUpdateState = (0, react.useSyncExternalStore)(arkmeAppUpdateStore.subscribe, arkmeAppUpdateStore.getSnapshot, arkmeAppUpdateStore.getSnapshot);
|
|
8811
7796
|
const [profile, setProfile] = (0, react.useState)();
|
|
8812
7797
|
const [clientConfig, setClientConfig] = (0, react.useState)();
|
|
@@ -8879,17 +7864,11 @@ window.__ModuleLoader__.load({
|
|
|
8879
7864
|
const displayName = authenticated ? profile?.displayName.trim() || profile?.nickname.trim() || "我的账户" : bindingRequired ? "待完成登录" : authState.checked ? "当前未登录" : "我的账户";
|
|
8880
7865
|
const accountDescription = authenticated ? profile?.arkmeId ? `即我号 ${profile.arkmeId}` : "即我号读取中…" : bindingRequired ? "请完成手机号绑定" : authState.checked ? "登录后显示账户信息" : "正在读取账户状态…";
|
|
8881
7866
|
const notificationLabel = notificationPermission === "granted" ? "已开启" : notificationPermission === "denied" ? "已阻止" : notificationPermission === "default" ? "未开启" : "不可用";
|
|
8882
|
-
const harnessVersion = aboutHarnessVersion();
|
|
8883
7867
|
const appUpdateRow = buildArkmeAppUpdateRow({
|
|
8884
7868
|
...appUpdateState.status === void 0 ? {} : { app: appUpdateState.status },
|
|
8885
7869
|
...appUpdateState.error === "" ? {} : { appError: appUpdateState.error }
|
|
8886
7870
|
});
|
|
8887
|
-
const
|
|
8888
|
-
const runPluginUpdateAction = (row) => {
|
|
8889
|
-
if (row.action === "busy") return;
|
|
8890
|
-
if (row.action === "install" || row.action === "view") arkmeUpdateUi.open("plugin");
|
|
8891
|
-
else arkmePluginUpdateStore.checkInstallStatus();
|
|
8892
|
-
};
|
|
7871
|
+
const appUpdateActionLabel = appUpdateRow.action === "check" ? "检查更新" : appUpdateRow.action === "download" ? "立即更新" : appUpdateRow.action === "open" ? "打开安装包" : appUpdateState.status?.status === "downloading" ? "下载中…" : "检查中…";
|
|
8893
7872
|
const runAppUpdateAction = (row) => {
|
|
8894
7873
|
if (row.action === "busy") return;
|
|
8895
7874
|
if (row.action === "download") arkmeUpdateUi.open("app");
|
|
@@ -9003,25 +7982,24 @@ window.__ModuleLoader__.load({
|
|
|
9003
7982
|
title: "更新",
|
|
9004
7983
|
id: "arkme-settings-about",
|
|
9005
7984
|
children: [
|
|
9006
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
7985
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(VersionSettingsRow, {
|
|
9007
7986
|
title: "ArkME 客户端",
|
|
9008
|
-
|
|
7987
|
+
version: aboutArkmeVersion(appUpdateState.status?.currentVersion),
|
|
7988
|
+
feedback: `${updateVersionText(appUpdateRow.current, appUpdateRow.latest)} · ${appUpdateRow.feedback ?? "尚未检查"}` + (appUpdateRow.downloadedFilePath === void 0 ? "" : ` · ${appUpdateRow.downloadedFilePath}`),
|
|
7989
|
+
actionLabel: appUpdateActionLabel,
|
|
9009
7990
|
disabled: appUpdateRow.action === "busy",
|
|
9010
|
-
|
|
7991
|
+
loading: appUpdateState.status?.status === "checking",
|
|
7992
|
+
onAction: () => {
|
|
9011
7993
|
runAppUpdateAction(appUpdateRow);
|
|
9012
|
-
}
|
|
7994
|
+
}
|
|
9013
7995
|
}),
|
|
9014
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
7996
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(VersionSettingsRow, {
|
|
9015
7997
|
title: "ArkME 插件",
|
|
9016
|
-
|
|
9017
|
-
disabled: pluginUpdateRow.action === "busy",
|
|
9018
|
-
...pluginUpdateRow.action === "busy" ? {} : { onClick: () => {
|
|
9019
|
-
runPluginUpdateAction(pluginUpdateRow);
|
|
9020
|
-
} }
|
|
7998
|
+
version: `v${version}`
|
|
9021
7999
|
}),
|
|
9022
8000
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(VersionSettingsRow, {
|
|
9023
8001
|
title: "DeepSeek Harness",
|
|
9024
|
-
version:
|
|
8002
|
+
version: aboutHarnessVersion()
|
|
9025
8003
|
}),
|
|
9026
8004
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingsRow, {
|
|
9027
8005
|
title: "用户协议",
|
|
@@ -12285,9 +11263,6 @@ window.__ModuleLoader__.load({
|
|
|
12285
11263
|
e$21.displayName = "AddressBookIcon";
|
|
12286
11264
|
const c$4 = e$21;
|
|
12287
11265
|
//#endregion
|
|
12288
|
-
//#region package.json
|
|
12289
|
-
var version = "0.1.32";
|
|
12290
|
-
//#endregion
|
|
12291
11266
|
//#region assets/branding/arkme-navigation-logo.png
|
|
12292
11267
|
var arkme_navigation_logo_default = "iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAYAAAB/HSuDAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAEAKADAAQAAAABAAAEAAAAAADT3eodAABAAElEQVR4AezdXYxcWX4Y9ktqLEArQSRXglZAhO2hooWEBbzNdYJkDSkmG3AAPwTunrxFQsQmpDwqJJ0E0otEMsmDgSAmGT3aApsKYr8IIOmnwF6EZCDDgRGIpBzbEiJ4SEUOtM5qNaOsV4Aj74T/mr0z/VFVXXXrfpyP3wWa1ay6H+f8/qe66vzvueee+ejt0lgIECBAgAABAgQIECBAgACBogXOFl07lSNAgAABAgQIECBAgAABAgRmAhIAGgIBAgQIECBAgAABAgQIEKhAQAKggiCrIgECBAgQIECAAAECBAgQkADQBggQIECAAAECBAgQIECAQAUCEgAVBFkVCRAgQIAAAQIECBAgQICABIA2QIAAAQIECBAgQIAAAQIEKhCQAKggyKpIgAABAgQIECBAgAABAgQkALQBAgQIECBAgAABAgQIECBQgYAEQAVBVkUCBAgQIECAAAECBAgQICABoA0QIECAAAECBAgQIECAAIEKBCQAKgiyKhIgQIAAAQIECBAgQIAAAQkAbYAAAQIECBAgQIAAAQIECFQgIAFQQZBVkQABAgQIECBAgAABAgQISABoAwQIECBAgAABAgQIECBAoAIBCYAKgqyKBAgQIECAAAECBAgQIEBAAkAbIECAAAECBAgQIECAAAECFQhIAFQQZFUkQIAAAQIECBAgQIAAAQISANoAAQIECBAgQIAAAQIECBCoQEACoIIgqyIBAgQIECBAgAABAgQIEJAA0AYIECBAgAABAgQIECBAgEAFAhIAFQRZFQkQIECAAAECBAgQIECAgASANkCAAAECBAgQIECAAAECBCoQkACoIMiqSIAAAQIECBAgQIAAAQIEJAC0AQIECBAgQIAAAQIECBAgUIGABEAFQVZFAgQIECBAgAABAgQIECAgAaANECBAgAABAgQIECBAgACBCgQkACoIsioSIECAAAECBAgQIECAAAEJAG2AAAECBAgQIECAAAECBAhUICABUEGQVZEAAQIECBAgQIAAAQIECEgAaAMECBAgQIAAAQIECBAgQKACAQmACoKsigQIECBAgAABAgQIECBAQAJAGyBAgAABAgQIECBAgAABAhUISABUEGRVJECAAAECBAgQIECAAAECEgDaAAECBAgQIECAAAECBAgQqEBAAqCCIKsiAQIECBAgQIAAAQIECBCQANAGCBAgQIAAAQIECBAgQIBABQISABUEWRUJECBAgAABAgQIECBAgIAEgDZAgAABAgQIECBAgAABAgQqEJAAqCDIqkiAAAECBAgQIECAAAECBCQAtAECBAgQIECAAAECBAgQIFCBgARABUFWRQIECBAgQIAAAQIECBAgIAGgDRAgQIAAAQIECBAgQIAAgQoEJAAqCLIqEiBAgAABAgQIECBAgAABCQBtgAABAgQIECBAgAABAgQIVCAgAVBBkFWRAAECBAgQIECAAAECBAhIAGgDBAgQIECAAAECBAgQIECgAgEJgAqCrIoECBAgQIAAAQIECBAgQEACQBsgQIAAAQIECBAgQIAAAQIVCEgAVBBkVSRAgAABAgQIECBAgAABAhIA2gABAgQIECBAgAABAgQIEKhAQAKggiCrIgECBAgQIECAAAECBAgQkADQBggQIECAAAECBAgQIECAQAUCEgAVBFkVCRAgQIAAAQIECBAgQICABIA2QIAAAQIECBAgQIAAAQIEKhCQAKggyKpIgAABAgQIECBAgAABAgQkALQBAgQIECBAgAABAgQIECBQgYAEQAVBVkUCBAgQIECAAAECBAgQICABoA0QIECAAAECBAgQIECAAIEKBCQAKgiyKhIgQIAAAQIECBAgQIAAAQkAbYAAAQIECBAgQIAAAQIECFQgIAFQQZBVkQABAgQIECBAgAABAgQISABoAwQIECBAgAABAgQIECBAoAIBCYAKgqyKBAgQIECAAAECBAgQIEBAAkAbIECAAAECBAgQIECAAAECFQhIAFQQZFUkQIAAAQIECBAgQIAAAQISANoAAQIECBAgQIAAAQIECBCoQEACoIIgqyIBAgQIECBAgAABAgQIEJAA0AYIECBAgAABAgQIECBAgEAFAhIAFQRZFQkQIECAAAECBAgQIECAgASANkCAAAECBAgQIECAAAECBCoQkACoIMiqSIAAAQIECBAgQIAAAQIEJAC0AQIECBAgQIAAAQIECBAgUIGABEAFQVZFAgQIECBAgAABAgQIECAgAaANECBAgAABAgQIECBAgACBCgQkACoIsioSIECAAAECBAgQIECAAAEJAG2AAAECBAgQIECAAAECBAhUICABUEGQVZEAAQIECBAgQIAAAQIECEgAaAMECBAgQIAAAQIECBAgQKACAQmACoKsigQIECBAgAABAgQIECBAQAJAGyBAgAABAgQIECBAgAABAhUISABUEGRVJECAAAECBAgQIECAAAECEgDaAAECBAgQIECAAAECBAgQqEBAAqCCIKsiAQIECBAgQIAAAQIECBCQANAGCBAgQIAAAQIECBAgQIBABQISABUEWRUJECBAgAABAgQIECBAgIAEgDZAgAABAgQIECBAgAABAgQqEJAAqCDIqkiAAAECBAgQIECAAAECBCQAtAECBAgQIECAAAECBAgQIFCBgARABUFWRQIECBAgQIAAAQIECBAgIAGgDRAgQIAAAQIECBAgQIAAgQoEJAAqCLIqEiBAgAABAgQIECBAgAABCQBtgAABAgQIECBAgAABAgQIVCAgAVBBkFWRAAECBAgQIECAAAECBAhIAGgDBAgQIECAAAECBAgQIECgAgEJgAqCrIoECBAgQIAAAQIECBAgQEACQBsgQIAAAQIECBAgQIAAAQIVCEgAVBBkVSRAgAABAgQIECBAgAABAhIA2gABAgQIECBAgAABAgQIEKhAQAKggiCrIgECBAgQIECAAAECBAgQkADQBggQIECAAAECBAgQIECAQAUCEgAVBFkVCRAgQIAAAQIECBAgQICABIA2QIAAAQIECBAgQIAAAQIEKhCQAKggyKpIgAABAgQIECBAgAABAgQkALQBAgQIECBAgAABAgQIECBQgYAEQAVBVkUCBAgQIECAAAECBAgQICABoA0QIECAAAECBAgQIECAAIEKBCQAKgiyKhIgQIAAAQIECBAgQIAAAQkAbYAAAQIECBAgQIAAAQIECFQgIAFQQZBVkQABAgQIECBAgAABAgQISABoAwQIECBAgAABAgQIECBAoAIBCYAKgqyKBAgQIECAAAECBAgQIEBAAkAbIECAAAECBAgQIECAAAECFQhIAFQQZFUkQIAAAQIECBAgQIAAAQISANoAAQIECBAgQIAAAQIECBCoQEACoIIgqyIBAgQIECBAgAABAgQIEJAA0AYIECBAgAABAgQIECBAgEAFAhIAFQRZFQkQIECAAAECBAgQIECAgASANkCAAAECBAgQIECAAAECBCoQkACoIMiqSIAAAQIECBAgQIAAAQIEJAC0AQIECBAgQIAAAQIECBAgUIGABEAFQVZFAgQIECBAgAABAgQIECAgAaANECBAgAABAgQIECBAgACBCgQkACoIsioSIECAAAECBAgQIECAAAEJAG2AAAECBAgQIECAAAECBAhUICABUEGQVZEAAQIECBAgQIAAAQIECEgAaAMECBAgQIAAAQIECBAgQKACAQmACoKsigQIECBAgAABAgQIECBAQAJAGyBAgAABAgQIECBAgAABAhUISABUEGRVJECAAAECBAgQIECAAAECEgDaAAECBAgQIECAAAECBAgQqEBAAqCCIKsiAQIECBAgQIAAAQIECBCQANAGCBAgQIAAAQIECBAgQIBABQISABUEWRUJECBAgAABAgQIECBAgIAEgDZAgAABAgQIECBAgAABAgQqEJAAqCDIqkiAAAECBAgQIECAAAECBCQAtAECBAgQIECAAAECBAgQIFCBgARABUFWRQIECBAgQIAAAQIECBAgIAGgDRAgQIAAAQIECBAgQIAAgQoEJAAqCLIqEiBAgAABAgQIECBAgAABCQBtgAABAgQIECBAgAABAgQIVCAgAVBBkFWRAAECBAgQIECAAAECBAhIAGgDBAgQIECAAAECBAgQIECgAgEJgAqCrIoECBAgQIAAAQIECBAgQEACQBsgQIAAAQIECBAgQIAAAQIVCEgAVBBkVSRAgAABAgQIECBAgAABAhIA2gABAgQIECBAgAABAgQIEKhAQAKggiCrIgECBAgQIECAAAECBAgQkADQBggQIECAAAECBAgQIECAQAUCEgAVBFkVCRAgQIAAAQIECBAgQICABIA2QIAAAQIECBAgQIAAAQIEKhCQAKggyKpIgAABAgQIECBAgAABAgQkALQBAgQIECBAgAABAgQIECBQgYAEQAVBVkUCBAgQIECAAAECBAgQICABoA0QIECAAAECBAgQIECAAIEKBCQAKgiyKhIgQIAAAQIECBAgQIAAAQkAbYAAAQIECBAgQIAAAQIECFQgIAFQQZBVkQABAgQIECBAgAABAgQISABoAwQIECBAgAABAgQIECBAoAIBCYAKgqyKBAgQIECAAAECBAgQIEBAAkAbIECAAAECBAgQIECAAAECFQhIAFQQZFUkQIAAAQIECBAgQIAAAQISANoAAQIECBAgQIAAAQIECBCoQEACoIIgqyIBAgQIECBAgAABAgQIEJAA0AYIECBAgAABAgQIECBAgEAFAhIAFQRZFQkQIECAAAECBAgQIECAgASANkCAAAECBAgQIECAAAECBCoQkACoIMiqSIAAAQIECBAgQIAAAQIEJAC0AQIECBAgQIAAAQIECBAgUIGABEAFQVZFAgQIECBAgAABAgQIECAgAaANECBAgAABAgQIECBAgACBCgQkACoIsioSIECAAAECBAgQIECAAAEJAG2AAAECBAgQIECAAAECBAhUICABUEGQVZEAAQIECBAgQIAAAQIECEgAaAMECBAgQIAAAQIECBAgQKACAQmACoKsigQIECBAgAABAgQIECBAQAJAGyBAgAABAgQIECBAgAABAhUISABUEGRVJECAAAECBAgQIECAAAECEgDaAAECBAgQIECAAAECBAgQqEBAAqCCIKsiAQIECBAgQIAAAQIECBCQANAGCBAgQIAAAQIECBAgQIBABQISABUEWRUJECBAgAABAgQIECBAgIAEgDZAgAABAgQIECBAgAABAgQqEJAAqCDIqkiAAAECBAgQIECAAAECBCQAtAECBAgQIECAAAECBAgQIFCBgARABUFWRQIECBAgQIAAAQIECBAgIAGgDRAgQIAAAQIECBAgQIAAgQoEJAAqCLIqEiBAgAABAgQIECBAgAABCQBtgAABAgQIECBAgAABAgQIVCAgAVBBkFWRAAECBAgQIECAAAECBAhIAGgDBAgQIECAAAECBAgQIECgAgEJgAqCrIoECBAgQIAAAQIECBAgQEACQBsgQIAAAQIECBAgQIAAAQIVCEgAVBBkVSRAgAABAgQIECBAgAABAhIA2gABAgQIECBAgAABAgQIEKhAQAKggiCrIgECBAgQIECAAAECBAgQkADQBggQIECAAAECBAgQIECAQAUCEgAVBFkVCRAgQIAAAQIECBAgQICABIA2QIAAAQIECBAgQIAAAQIEKhCQAKggyKpIgAABAgQIECBAgAABAgQkALQBAgQIECBAgAABAgQIECBQgYAEQAVBVkUCBAgQIECAAAECBAgQICABoA0QIECAAAECBAgQIECAAIEKBCQAKgiyKhIgQIAAAQIECBAgQIAAAQkAbYAAAQIECBAgQIAAAQIECFQgIAFQQZBVkQABAgQIECBAgAABAgQISABoAwQIECBAgAABAgQIECBAoAIBCYAKgqyKBAgQIECAAAECBAgQIEBAAkAbIECAAAECBAgQIECAAAECFQhIAFQQZFUkQIAAAQIECBAgQIAAAQISANoAAQIECBAgQIAAAQIECBCoQEACoIIgqyIBAgQIECBAgAABAgQIEJAA0AYIECBAgAABAgQIECBAgEAFAhIAFQRZFQkQIECAAAECBAgQIECAgASANkCAAAECBAgQIECAAAECBCoQkACoIMiqSIAAAQIECBAgQIAAAQIEJAC0AQIECBAgQIAAAQIECBAgUIGABEAFQVZFAgQIECBAgAABAgQIECAgAaANECBAgAABAgQIECBAgACBCgQkACoIsioSIECAAAECBAgQIECAAAEJAG2AAAECBAgQIECAAAECBAhUICABUEGQVZEAAQIECBAgQIAAAQIECEgAaAMECBAgQIAAAQIECBAgQKACAQmACoKsigQIECBAgAABAgQIECBAQAJAGyBAgAABAgQIECBAgAABAhUISABUEGRVJECAAAECBAgQIECAAAECEgDaAAECBAgQIECAAAECBAgQqEBAAqCCIKsiAQIECBAgQIAAAQIECBCQANAGCBAgQIAAAQIECBAgQIBABQISABUEWRUJECBAgAABAgQIECBAgIAEgDZAgAABAgQIECBAgAABAgQqEJAAqCDIqkiAAAECBAgQIECAAAECBCQAtAECBAgQIECAAAECBAgQIFCBgARABUFWRQIECBAgQIAAAQIECBAgIAGgDRAgQIAAAQIECBAgQIAAgQoEJAAqCLIqEiBAgAABAgQIECBAgAABCQBtgAABAgQIECBAgAABAgQIVCAgAVBBkFWRAAECBAgQIECAAAECBAhIAGgDBAgQIECAAAECBAgQIECgAgEJgAqCrIoECBAgQIAAAQIECBAgQEACQBsgQIAAAQIECBAgQIAAAQIVCEgAVBBkVSRAgAABAgQIECBAgAABAhIA2gABAgQIECBAgAABAgQIEKhAQAKggiCrIgECBAgQIECAAAECBAgQkADQBggQIECAAAECBAgQIECAQAUCEgAVBFkVCRAgQIAAAQIECBAgQICABIA2QIAAAQIECBAgQIAAAQIEKhCQAKggyKpIgAABAgQIECBAgAABAgQkALQBAgQIECBAgAABAgQIECBQgYAEQAVBVkUCBAgQIECAAAECBAgQICABoA0QIECAAAECBAgQIECAAIEKBCQAKgiyKhIgQIAAAQIECBAgQIAAAQkAbYAAAQIECBAgQIAAAQIECFQgIAFQQZBVkQABAgQIECBAgAABAgQISABoAwQIECBAgAABAgQIECBAoAIBCYAKgqyKBAgQIECAAAECBAgQIEBAAkAbIECAAAECBAgQIECAAAECFQhIAFQQZFUkQIAAAQIECBAgQIAAAQISANoAAQIECBAgQIAAAQIECBCoQEACoIIgqyIBAgQIECBAgAABAgQIEJAA0AYIECBAgAABAgQIECBAgEAFAhIAFQRZFQkQIECAAAECBAgQIECAgASANkCAAAECBAgQIECAAAECBCoQkACoIMiqSIAAAQIECBAgQIAAAQIEJAC0AQIECBAgQIAAAQIECBAgUIGABEAFQVZFAgQIECBAgAABAgQIECAgAaANECBAgAABAgQIECBAgACBCgQkACoIsioSIECAAAECBAgQIECAAAEJAG2AAAECBAgQIECAAAECBAhUICABUEGQVZEAAQIECBAgQIAAAQIECEgAaAMECBAgQIAAAQIECBAgQKACAQmACoKsigQIECBAgAABAgQIECBAQAJAGyBAgAABAgQIECBAgAABAhUISABUEGRVJECAAAECBAgQIECAAAECEgDaAAECBAgQIECAAAECBAgQqEBAAqCCIKsiAQIECBAgQIAAAQIECBCQANAGCBAgQIAAAQIECBAgQIBABQISABUEWRUJECBAgAABAgQIECBAgIAEgDZAgAABAgQIECBAgAABAgQqEJAAqCDIqkiAAAECBAgQIECAAAECBCQAtAECBAgQIECAAAECBAgQIFCBgARABUFWRQIECBAgQIAAAQIECBAgIAGgDRAgQIAAAQIECBAgQIAAgQoEJAAqCLIqEiBAgAABAgQIECBAgAABCQBtgAABAgQIECBAgAABAgQIVCAgAVBBkFWRAAECBAgQIECAAAECBAhIAGgDBAgQIECAAAECBAgQIECgAgEJgAqCrIoECBAgQIAAAQIECBAgQEACQBsgQIAAAQIECBAgQIAAAQIVCEgAVBBkVSRAgAABAgQIECBAgAABAhIA2gABAgQIECBAgAABAgQIEKhAQAKggiCrIgECBAgQIECAAAECBAgQkADQBggQIECAAAECBAgQIECAQAUCEgAVBFkVCRAgQIAAAQIECBAgQICABIA2QIAAAQIECBAgQIAAAQIEKhCQAKggyKpIgAABAgQIECBAgAABAgQkALQBAgQIECBAgAABAgQIECBQgcA7FdSx+CoeHBw0T548aT744IPi6zqvgvv7+83Vq1fnvbTRc+H58uXL5tWrV83r169nvvFomU7g3XffbW7dutXE46aL980w75vjcYn30ePHj5s3b97M3kfeQx8LXbp0qbl+/Xovbfm4uf8TINDM/t7E35/4mxOP58+fb+J918fnxyq+z549ax4+fDg7/irrl7ZOOPf1eT2UTbSN+J7Xfj5FO2l/5h0z6hTtKH62t7c/aVPxfwuBnATOfPR2yanAynpU4M6dO83t27ePPlnh/27cuNHcvXt345rHB/bz58+beIwfS3oC8QH84sWL2Qdv19J533wsF3874gta30u8d+J9FB3/+HJlmS/QR1uev2fPEihToO2cRcctfj788MPZY/t8/L1pf58nEO+5R48ezRIB817v67n79+838b2k9iW8nz592sRjCku0j8Pf8aKt9LG0yaVIMMVPJAfi0UIgVQEJgFQjs0K54sPv4sWLK6xZxyrRKezyBzc+AOLDOs4Ih6klfYFNOq7eN0fjG1/Orly5cvTJDv+L91Gc7YpOv+TZ6oCbtOXVj2JNAmkLtJ32tgN/uGMff7Pjp11n05rE94T4vjDkEt/NosyWptnb25slXaayiM+jGCUb3/GiDY21RFIgPluj/pcvX04mCTJW/R0nbQGXAKQdn6Wli6Hplk8FwmOdBEB8OLcd/zE/FD4tsd+6CmxyVtn75qh6DH3cZIn3TryP7t27N+qXq03KnNK2m7TllOqhLATmCbQd9/bx8FDr9rl4HHOJ91wcc6iz0rHv+LF8LDDF37j4XJo6IR1liIR4/MQSyYC4ZFUy4ON24d9pBSQApvXf6Oh//Md/vNH2tW6sw5J/5COGXRfvm65yR7fzPjrq0fV/m7Tlrse0HYFNBKLNxk/b0Y2z9e3/jz9uchzbliEwZjIk2l+qCekYidCOjmvnroqkgIXAFAISAFOoO+ZkAvHBEENu40PCQoDA+gIpf8Favza2IECgFYj3dvwc7tjH74efa9dpt/F4UmCokQUnj5TPM9GOhnSJ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tIOOYYPRzskCORsg25Off/75QfZPtxAI5H63PJZn/ygH/vm3C4GtCAgAtjKpM/SZswHylYsN1xmAL1Qyry875SyPt9vLg1m+EvxkXdj7A1p2OBKU5Ps5L7E8iuk5HdWeKfD999+/CZPPfT+aufTrdnW0bfS6um5tkkD2SxMC5Puvv/7618/Zzqy5rVn2i/MYnvtf9ovy3cH+pLVFL3cVEADcVc71CAwWWB5Ar2tx2aFcvl/3t3v9vzzr0L4sOw3L93Z99QhME1h21i+5LVnzwGAN/7ct3/55jdt2GwSmCyz39+zr5Osul6vuV1f9/i634ToEpgoIAKZORl8ECBAgQIAAAQIECBAgQKAo8FGxllIECBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAA/D9eYAABTmSURBVE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUAEBwNDBaIsAAQIECBAgQIAAAQIECDQFBABNTbUIECBAgAABAgQIECBAgMBQAQHA0MFoiwABAgQIECBAgAABAgQINAUEAE1NtQgQIECAAAECBAgQIECAwFABAcDQwWiLAAECBAgQIECAAAECBAg0BQQATU21CBAgQIAAAQIECBAgQIDAUIH/B4hq4XFFfCQ/AAAAAElFTkSuQmCC";
|
|
12293
11268
|
//#endregion
|
|
@@ -13175,19 +12150,90 @@ window.__ModuleLoader__.load({
|
|
|
13175
12150
|
const m$4 = r$5;
|
|
13176
12151
|
//#endregion
|
|
13177
12152
|
//#region src/client/ArkmeUpdateSurfaces.tsx
|
|
12153
|
+
function versionLabel$2(version) {
|
|
12154
|
+
return version?.trim() || "…";
|
|
12155
|
+
}
|
|
12156
|
+
function formatBytes$1(value) {
|
|
12157
|
+
if (value === void 0 || !Number.isFinite(value) || value <= 0) return void 0;
|
|
12158
|
+
if (value < 1024) return `${Math.round(value)} B`;
|
|
12159
|
+
if (value < 1024 * 1024) return `${(value / 1024).toFixed(1)} KB`;
|
|
12160
|
+
return `${(value / (1024 * 1024)).toFixed(1)} MB`;
|
|
12161
|
+
}
|
|
12162
|
+
function percentage(downloaded, total) {
|
|
12163
|
+
if (total === void 0 || total <= 0) return void 0;
|
|
12164
|
+
return Math.max(0, Math.min(100, Math.round((downloaded ?? 0) / total * 100)));
|
|
12165
|
+
}
|
|
12166
|
+
function updateNotes(summary) {
|
|
12167
|
+
return (summary?.split(/\r?\n/).map((line) => line.trim()).filter(Boolean).slice(0, 3) ?? []).map((line) => {
|
|
12168
|
+
const separator = line.search(/[::—–]/);
|
|
12169
|
+
if (separator <= 0 || separator >= line.length - 1) return { title: line };
|
|
12170
|
+
return {
|
|
12171
|
+
title: line.slice(0, separator).trim(),
|
|
12172
|
+
detail: line.slice(separator + 1).trim()
|
|
12173
|
+
};
|
|
12174
|
+
});
|
|
12175
|
+
}
|
|
12176
|
+
function appItem(snapshot) {
|
|
12177
|
+
const status = snapshot.status;
|
|
12178
|
+
if (status === void 0 || ![
|
|
12179
|
+
"available",
|
|
12180
|
+
"downloading",
|
|
12181
|
+
"downloaded",
|
|
12182
|
+
"failed"
|
|
12183
|
+
].includes(status.status)) return void 0;
|
|
12184
|
+
const latestVersion = versionLabel$2(status.latestVersion);
|
|
12185
|
+
const progress = percentage(status.downloadedBytes, status.totalBytes);
|
|
12186
|
+
const packageSize = formatBytes$1(status.totalBytes);
|
|
12187
|
+
const failed = status.status === "failed";
|
|
12188
|
+
const ready = status.status === "downloaded";
|
|
12189
|
+
return {
|
|
12190
|
+
target: "app",
|
|
12191
|
+
instanceKey: `app:${latestVersion}`,
|
|
12192
|
+
productLabel: "Arkme APP",
|
|
12193
|
+
title: failed ? "更新未完成" : ready ? "更新包已下载" : "发现新版本",
|
|
12194
|
+
currentVersion: versionLabel$2(status.currentVersion),
|
|
12195
|
+
latestVersion,
|
|
12196
|
+
...packageSize === void 0 ? {} : { packageSize },
|
|
12197
|
+
notes: updateNotes(status.releaseNotes),
|
|
12198
|
+
available: status.status === "available",
|
|
12199
|
+
active: status.status === "downloading",
|
|
12200
|
+
ready,
|
|
12201
|
+
restarting: false,
|
|
12202
|
+
failed,
|
|
12203
|
+
...status.status === "downloading" ? {
|
|
12204
|
+
phase: "app-downloading",
|
|
12205
|
+
phaseMessage: "可继续使用"
|
|
12206
|
+
} : {},
|
|
12207
|
+
...ready ? {
|
|
12208
|
+
phase: "app-downloaded",
|
|
12209
|
+
phaseMessage: `已下载 ${latestVersion}`
|
|
12210
|
+
} : {},
|
|
12211
|
+
...failed ? {
|
|
12212
|
+
phase: "app-failed",
|
|
12213
|
+
phaseMessage: "请重新尝试下载"
|
|
12214
|
+
} : {},
|
|
12215
|
+
...status.error?.trim() || snapshot.error.trim() ? { error: status.error?.trim() || snapshot.error.trim() } : {},
|
|
12216
|
+
...progress === void 0 ? {} : { progress }
|
|
12217
|
+
};
|
|
12218
|
+
}
|
|
12219
|
+
/** Pure UI projection over the APP update store. Plugin updates are Release Set owned. */
|
|
12220
|
+
function deriveArkmeUpdatePresentation(input) {
|
|
12221
|
+
const items = [appItem(input.app)].filter((item) => item !== void 0);
|
|
12222
|
+
const primary = items.find((item) => item.active) ?? items.find((item) => item.ready || item.failed) ?? items.find((item) => item.available);
|
|
12223
|
+
return {
|
|
12224
|
+
items,
|
|
12225
|
+
...primary === void 0 ? {} : { primary }
|
|
12226
|
+
};
|
|
12227
|
+
}
|
|
13178
12228
|
function railLabel(item) {
|
|
13179
|
-
if (item.uncertain) return "待确认";
|
|
13180
12229
|
if (item.active) return item.restarting ? "重启" : item.progress === void 0 ? "更新中" : `${item.progress}%`;
|
|
13181
|
-
if (item.ready) return "
|
|
12230
|
+
if (item.ready) return "完成";
|
|
13182
12231
|
if (item.failed) return "重试";
|
|
13183
12232
|
return "更新";
|
|
13184
12233
|
}
|
|
13185
12234
|
function updateMeta(item) {
|
|
13186
12235
|
return `${item.productLabel} ${item.latestVersion}${item.packageSize === void 0 ? "" : ` · ${item.packageSize}`}`;
|
|
13187
12236
|
}
|
|
13188
|
-
function updateSelectionKey(item) {
|
|
13189
|
-
return `${item.target}:${item.latestVersion}`;
|
|
13190
|
-
}
|
|
13191
12237
|
const ArkmeUpdatePopover = (0, react.forwardRef)(function ArkmeUpdatePopover({ item, style, onClose, onStart }, ref) {
|
|
13192
12238
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
13193
12239
|
ref,
|
|
@@ -13211,7 +12257,7 @@ window.__ModuleLoader__.load({
|
|
|
13211
12257
|
}),
|
|
13212
12258
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
13213
12259
|
className: "arkme-update-popover-summary",
|
|
13214
|
-
children:
|
|
12260
|
+
children: "可在后台下载,不影响你继续使用。"
|
|
13215
12261
|
}),
|
|
13216
12262
|
item.notes.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
13217
12263
|
className: "arkme-update-release-notes",
|
|
@@ -13241,31 +12287,26 @@ window.__ModuleLoader__.load({
|
|
|
13241
12287
|
]
|
|
13242
12288
|
});
|
|
13243
12289
|
});
|
|
13244
|
-
function ArkmeUpdateTopCapsule({ item, onClose, onRetry, onOpenDownloaded
|
|
13245
|
-
const active = item.active && !item.restarting
|
|
13246
|
-
const
|
|
13247
|
-
const
|
|
13248
|
-
const detail = item.restarting ? "即将打开新版本" : item.ready ? item.target === "app" ? `已下载 ${item.latestVersion}` : `已安装 ${item.latestVersion}` : item.phaseMessage ?? "可继续使用";
|
|
12290
|
+
function ArkmeUpdateTopCapsule({ item, onClose, onRetry, onOpenDownloaded }) {
|
|
12291
|
+
const active = item.active && !item.restarting;
|
|
12292
|
+
const title = item.restarting ? "正在自动重启…" : item.ready ? "更新包已就绪" : item.failed ? "更新未完成" : "正在更新";
|
|
12293
|
+
const detail = item.restarting ? "即将打开新版本" : item.ready ? `已下载 ${item.latestVersion}` : item.phaseMessage ?? "可继续使用";
|
|
13249
12294
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
13250
12295
|
className: `arkme-update-capsule${item.ready ? " is-ready" : ""}${item.restarting ? " is-restarting" : ""}${item.failed ? " is-error" : ""}`,
|
|
13251
|
-
"data-layout": item.restarting ? "restarting" : active ? "progress" : hasAction ? "action" : "message",
|
|
13252
12296
|
role: item.failed ? "alert" : "status",
|
|
13253
12297
|
"aria-live": item.failed ? "assertive" : "polite",
|
|
13254
|
-
"aria-label": item.
|
|
12298
|
+
"aria-label": item.restarting ? "正在自动重启客户端" : item.ready ? "更新包已就绪" : item.failed ? "更新未完成" : `正在更新,${item.progress ?? 0}%`,
|
|
13255
12299
|
children: [
|
|
13256
12300
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
13257
12301
|
className: "arkme-update-capsule-copy",
|
|
13258
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: title }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
13259
|
-
title: detail,
|
|
13260
|
-
children: detail
|
|
13261
|
-
})]
|
|
12302
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: title }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: detail })]
|
|
13262
12303
|
}),
|
|
13263
12304
|
active && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
13264
12305
|
className: `arkme-update-progress${item.progress === void 0 ? " is-indeterminate" : ""}`,
|
|
13265
12306
|
"aria-hidden": true,
|
|
13266
12307
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { style: item.progress === void 0 ? {} : { width: `${item.progress}%` } })
|
|
13267
12308
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: item.progress === void 0 ? "···" : `${item.progress}%` })] }),
|
|
13268
|
-
item.ready &&
|
|
12309
|
+
item.ready && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
13269
12310
|
type: "button",
|
|
13270
12311
|
className: "arkme-update-ready-action",
|
|
13271
12312
|
onClick: onOpenDownloaded,
|
|
@@ -13277,14 +12318,6 @@ window.__ModuleLoader__.load({
|
|
|
13277
12318
|
onClick: onRetry,
|
|
13278
12319
|
children: "重新尝试"
|
|
13279
12320
|
}),
|
|
13280
|
-
item.uncertain && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
13281
|
-
type: "button",
|
|
13282
|
-
className: "arkme-update-ready-action",
|
|
13283
|
-
disabled: item.checkingStatus,
|
|
13284
|
-
"aria-busy": item.checkingStatus,
|
|
13285
|
-
onClick: onCheckStatus,
|
|
13286
|
-
children: item.checkingStatus ? "检查中…" : "检查状态"
|
|
13287
|
-
}),
|
|
13288
12321
|
!item.restarting && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
13289
12322
|
type: "button",
|
|
13290
12323
|
className: "arkme-update-capsule-close",
|
|
@@ -13298,13 +12331,9 @@ window.__ModuleLoader__.load({
|
|
|
13298
12331
|
/** Demo-aligned update entry, anchored popover, and recoverable top progress capsule. */
|
|
13299
12332
|
function ArkmeUpdateRailSlot() {
|
|
13300
12333
|
const app = (0, react.useSyncExternalStore)(arkmeAppUpdateStore.subscribe, arkmeAppUpdateStore.getSnapshot, arkmeAppUpdateStore.getSnapshot);
|
|
13301
|
-
const plugin = (0, react.useSyncExternalStore)(arkmePluginUpdateStore.subscribe, arkmePluginUpdateStore.getSnapshot, arkmePluginUpdateStore.getSnapshot);
|
|
13302
12334
|
const request = useArkmeUpdateUiSnapshot();
|
|
13303
|
-
const presentation = (0, react.useMemo)(() => deriveArkmeUpdatePresentation({
|
|
13304
|
-
|
|
13305
|
-
plugin
|
|
13306
|
-
}), [app, plugin]);
|
|
13307
|
-
const [selectedKey, setSelectedKey] = (0, react.useState)();
|
|
12335
|
+
const presentation = (0, react.useMemo)(() => deriveArkmeUpdatePresentation({ app }), [app]);
|
|
12336
|
+
const [selectedTarget, setSelectedTarget] = (0, react.useState)();
|
|
13308
12337
|
const [popoverOpen, setPopoverOpen] = (0, react.useState)(false);
|
|
13309
12338
|
const [topOpen, setTopOpen] = (0, react.useState)(false);
|
|
13310
12339
|
const [popoverPosition, setPopoverPosition] = (0, react.useState)();
|
|
@@ -13314,21 +12343,13 @@ window.__ModuleLoader__.load({
|
|
|
13314
12343
|
const handledRequestRef = (0, react.useRef)(0);
|
|
13315
12344
|
const activeKeyRef = (0, react.useRef)();
|
|
13316
12345
|
const phaseRef = (0, react.useRef)();
|
|
13317
|
-
const
|
|
13318
|
-
const selectedItem = presentation.items.find((item) => updateSelectionKey(item) === selectedKey);
|
|
13319
|
-
(0, react.useEffect)(() => {
|
|
13320
|
-
if (selectedKey === void 0 || selectedItem !== void 0) return;
|
|
13321
|
-
setSelectedKey(void 0);
|
|
13322
|
-
setPopoverOpen(false);
|
|
13323
|
-
setTopOpen(false);
|
|
13324
|
-
setPopoverPosition(void 0);
|
|
13325
|
-
}, [selectedKey, selectedItem]);
|
|
12346
|
+
const selectedItem = presentation.items.find((item) => item.target === selectedTarget) ?? presentation.primary;
|
|
13326
12347
|
(0, react.useEffect)(() => {
|
|
13327
12348
|
if (request.revision === 0 || request.revision === handledRequestRef.current) return;
|
|
13328
12349
|
handledRequestRef.current = request.revision;
|
|
13329
12350
|
const requested = presentation.items.find((item) => request.target === void 0 || item.target === request.target) ?? presentation.primary;
|
|
13330
12351
|
if (requested === void 0) return;
|
|
13331
|
-
|
|
12352
|
+
setSelectedTarget(requested.target);
|
|
13332
12353
|
if (requested.available) {
|
|
13333
12354
|
setTopOpen(false);
|
|
13334
12355
|
setPopoverOpen(true);
|
|
@@ -13339,31 +12360,16 @@ window.__ModuleLoader__.load({
|
|
|
13339
12360
|
}, [presentation, request]);
|
|
13340
12361
|
(0, react.useEffect)(() => {
|
|
13341
12362
|
const active = presentation.items.find((item) => item.active);
|
|
13342
|
-
if (active === void 0)
|
|
13343
|
-
if (presentation.items.length === 0) {
|
|
13344
|
-
activeKeyRef.current = void 0;
|
|
13345
|
-
phaseRef.current = void 0;
|
|
13346
|
-
}
|
|
13347
|
-
return;
|
|
13348
|
-
}
|
|
12363
|
+
if (active === void 0) return;
|
|
13349
12364
|
const phaseKey = `${active.instanceKey}:${active.phase ?? "active"}`;
|
|
13350
12365
|
if (activeKeyRef.current !== active.instanceKey || active.restarting && phaseRef.current !== phaseKey) {
|
|
13351
|
-
const continuesRequest = active.target === "plugin" && !active.restarting && activeKeyRef.current === `plugin:pending:${active.latestVersion}`;
|
|
13352
12366
|
activeKeyRef.current = active.instanceKey;
|
|
13353
12367
|
phaseRef.current = phaseKey;
|
|
13354
|
-
|
|
13355
|
-
|
|
13356
|
-
|
|
13357
|
-
setTopOpen(true);
|
|
13358
|
-
}
|
|
12368
|
+
setSelectedTarget(active.target);
|
|
12369
|
+
setPopoverOpen(false);
|
|
12370
|
+
setTopOpen(true);
|
|
13359
12371
|
} else phaseRef.current = phaseKey;
|
|
13360
12372
|
}, [presentation]);
|
|
13361
|
-
(0, react.useLayoutEffect)(() => {
|
|
13362
|
-
if (!topOpen && restoreRailFocusRef.current) {
|
|
13363
|
-
restoreRailFocusRef.current = false;
|
|
13364
|
-
railRef.current?.focus();
|
|
13365
|
-
}
|
|
13366
|
-
}, [topOpen]);
|
|
13367
12373
|
(0, react.useEffect)(() => {
|
|
13368
12374
|
if (!popoverOpen) return;
|
|
13369
12375
|
const dismiss = (event) => {
|
|
@@ -13387,10 +12393,9 @@ window.__ModuleLoader__.load({
|
|
|
13387
12393
|
const position = () => {
|
|
13388
12394
|
const rail = railRef.current?.getBoundingClientRect();
|
|
13389
12395
|
if (rail === void 0) return;
|
|
13390
|
-
const popover = popoverRef.current;
|
|
13391
12396
|
setPopoverPosition({
|
|
13392
|
-
left: Math.round(
|
|
13393
|
-
bottom: Math.round(
|
|
12397
|
+
left: Math.round(rail.right + 8),
|
|
12398
|
+
bottom: Math.round(window.innerHeight - rail.bottom - 2)
|
|
13394
12399
|
});
|
|
13395
12400
|
};
|
|
13396
12401
|
position();
|
|
@@ -13400,13 +12405,13 @@ window.__ModuleLoader__.load({
|
|
|
13400
12405
|
window.removeEventListener("resize", position);
|
|
13401
12406
|
window.removeEventListener("scroll", position, true);
|
|
13402
12407
|
};
|
|
13403
|
-
}, [popoverOpen
|
|
12408
|
+
}, [popoverOpen]);
|
|
13404
12409
|
if (presentation.primary === void 0) return null;
|
|
13405
12410
|
const railItem = selectedItem ?? presentation.primary;
|
|
13406
|
-
const railHidden = topOpen &&
|
|
12411
|
+
const railHidden = topOpen && (railItem.active || railItem.ready || railItem.failed);
|
|
13407
12412
|
const openFromRail = () => {
|
|
13408
|
-
|
|
13409
|
-
if (railItem.active || railItem.ready || railItem.failed
|
|
12413
|
+
setSelectedTarget(railItem.target);
|
|
12414
|
+
if (railItem.active || railItem.ready || railItem.failed) {
|
|
13410
12415
|
setPopoverOpen(false);
|
|
13411
12416
|
setTopOpen(true);
|
|
13412
12417
|
} else {
|
|
@@ -13418,57 +12423,51 @@ window.__ModuleLoader__.load({
|
|
|
13418
12423
|
if (selectedItem === void 0 || selectedItem.blockedReason !== void 0) return;
|
|
13419
12424
|
setPopoverOpen(false);
|
|
13420
12425
|
setTopOpen(true);
|
|
13421
|
-
|
|
13422
|
-
else arkmeAppUpdateStore.download();
|
|
12426
|
+
arkmeAppUpdateStore.download();
|
|
13423
12427
|
};
|
|
13424
12428
|
const retry = () => {
|
|
13425
12429
|
setTopOpen(true);
|
|
13426
|
-
|
|
13427
|
-
else arkmeAppUpdateStore.download();
|
|
12430
|
+
arkmeAppUpdateStore.download();
|
|
13428
12431
|
};
|
|
13429
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(
|
|
13430
|
-
|
|
13431
|
-
|
|
13432
|
-
|
|
13433
|
-
|
|
12432
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
12433
|
+
className: "arkme-update-rail-slot",
|
|
12434
|
+
ref: slotRef,
|
|
12435
|
+
children: [
|
|
12436
|
+
!railHidden && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
13434
12437
|
ref: railRef,
|
|
13435
12438
|
type: "button",
|
|
13436
12439
|
className: `arkme-update-rail ${railItem.available ? "is-available" : railItem.active ? "is-downloading" : railItem.failed ? "is-error" : "is-ready"}${popoverOpen ? " is-active" : ""}`,
|
|
13437
|
-
title: railItem.
|
|
13438
|
-
"aria-label": railItem.
|
|
12440
|
+
title: railItem.available ? "更新 Arkme" : railItem.active ? "查看更新进度" : railItem.failed ? "重试更新" : "查看更新状态",
|
|
12441
|
+
"aria-label": railItem.available ? "更新 Arkme" : railItem.active ? `查看更新进度,${railItem.progress ?? 0}%` : railItem.failed ? "重试更新" : "查看更新状态",
|
|
13439
12442
|
"aria-expanded": popoverOpen || topOpen,
|
|
13440
12443
|
onClick: openFromRail,
|
|
13441
12444
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(m$4, {
|
|
13442
12445
|
size: 17,
|
|
13443
12446
|
weight: "regular"
|
|
13444
12447
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: railLabel(railItem) })]
|
|
13445
|
-
})
|
|
13446
|
-
|
|
13447
|
-
|
|
13448
|
-
|
|
13449
|
-
|
|
13450
|
-
|
|
13451
|
-
|
|
13452
|
-
|
|
13453
|
-
|
|
13454
|
-
|
|
13455
|
-
|
|
13456
|
-
|
|
13457
|
-
|
|
13458
|
-
|
|
13459
|
-
|
|
13460
|
-
|
|
13461
|
-
|
|
13462
|
-
|
|
13463
|
-
|
|
13464
|
-
|
|
13465
|
-
|
|
13466
|
-
|
|
13467
|
-
|
|
13468
|
-
arkmeAppUpdateStore.showDownloadedFile();
|
|
13469
|
-
}
|
|
13470
|
-
}), document.body)
|
|
13471
|
-
] });
|
|
12448
|
+
}),
|
|
12449
|
+
popoverOpen && selectedItem?.available && typeof document !== "undefined" && (0, react_dom.createPortal)(/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ArkmeUpdatePopover, {
|
|
12450
|
+
ref: popoverRef,
|
|
12451
|
+
item: selectedItem,
|
|
12452
|
+
...popoverPosition === void 0 ? {} : { style: popoverPosition },
|
|
12453
|
+
onClose: () => {
|
|
12454
|
+
setPopoverOpen(false);
|
|
12455
|
+
railRef.current?.focus();
|
|
12456
|
+
},
|
|
12457
|
+
onStart: start
|
|
12458
|
+
}), document.body),
|
|
12459
|
+
topOpen && selectedItem !== void 0 && (selectedItem.active || selectedItem.ready || selectedItem.failed) && typeof document !== "undefined" && (0, react_dom.createPortal)(/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ArkmeUpdateTopCapsule, {
|
|
12460
|
+
item: selectedItem,
|
|
12461
|
+
onClose: () => {
|
|
12462
|
+
setTopOpen(false);
|
|
12463
|
+
},
|
|
12464
|
+
onRetry: retry,
|
|
12465
|
+
onOpenDownloaded: () => {
|
|
12466
|
+
arkmeAppUpdateStore.showDownloadedFile();
|
|
12467
|
+
}
|
|
12468
|
+
}), document.body)
|
|
12469
|
+
]
|
|
12470
|
+
});
|
|
13472
12471
|
}
|
|
13473
12472
|
//#endregion
|
|
13474
12473
|
//#region src/client/chat-directory-store.ts
|
|
@@ -14148,7 +13147,6 @@ window.__ModuleLoader__.load({
|
|
|
14148
13147
|
const ui = (0, react.useSyncExternalStore)(arkmeUi.subscribe, arkmeUi.getSnapshot, arkmeUi.getSnapshot);
|
|
14149
13148
|
const authState = (0, react.useSyncExternalStore)(arkmeAuthStore.subscribe, arkmeAuthStore.getSnapshot, arkmeAuthStore.getSnapshot);
|
|
14150
13149
|
const chatDirectory = (0, react.useSyncExternalStore)(arkmeChatDirectory.subscribe, arkmeChatDirectory.getSnapshot, arkmeChatDirectory.getSnapshot);
|
|
14151
|
-
const pluginUpdateState = (0, react.useSyncExternalStore)(arkmePluginUpdateStore.subscribe, arkmePluginUpdateStore.getSnapshot, arkmePluginUpdateStore.getSnapshot);
|
|
14152
13150
|
const [profileOpen, setProfileOpen] = (0, react.useState)(false);
|
|
14153
13151
|
const [profile, setProfile] = (0, react.useState)();
|
|
14154
13152
|
const profileTriggerRef = (0, react.useRef)(null);
|
|
@@ -14186,7 +13184,6 @@ window.__ModuleLoader__.load({
|
|
|
14186
13184
|
};
|
|
14187
13185
|
}, [profileOpen]);
|
|
14188
13186
|
const activeId = locked ? "conversations" : ui.mode === "login" ? void 0 : ui.calendarOpen === true ? "calendar" : ui.mode === "extensions" ? "extensions" : ui.mode === "world" ? "world" : ui.mode === "calls" ? "calls" : ui.mode === "recordings" ? "recordings" : ui.mode === "source" && ui.productMode === "contacts" ? "contacts" : "conversations";
|
|
14189
|
-
const installedPluginVersion = pluginUpdateState.status?.installedVersion ?? version;
|
|
14190
13187
|
const conversationUnreadCount = authState.auth?.status === "authenticated" && chatDirectory.baselineReady ? arkmeChatDirectory.totalUnreadCount({ excludeMuted: true }) : 0;
|
|
14191
13188
|
const conversationUnreadLabel = conversationUnreadCount > 99 ? "99+" : String(conversationUnreadCount);
|
|
14192
13189
|
const navigationItems = items;
|
|
@@ -14238,9 +13235,9 @@ window.__ModuleLoader__.load({
|
|
|
14238
13235
|
style: styles$45.brandImage
|
|
14239
13236
|
}),
|
|
14240
13237
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
14241
|
-
"data-arkme-plugin-version":
|
|
13238
|
+
"data-arkme-plugin-version": version,
|
|
14242
13239
|
style: styles$45.brandVersion,
|
|
14243
|
-
children: ["v",
|
|
13240
|
+
children: ["v", version]
|
|
14244
13241
|
})
|
|
14245
13242
|
]
|
|
14246
13243
|
}),
|
|
@@ -14728,34 +13725,6 @@ window.__ModuleLoader__.load({
|
|
|
14728
13725
|
lineHeight: "18px",
|
|
14729
13726
|
fontWeight: 600
|
|
14730
13727
|
};
|
|
14731
|
-
const updateDotStyle = {
|
|
14732
|
-
position: "absolute",
|
|
14733
|
-
top: -2,
|
|
14734
|
-
right: -3,
|
|
14735
|
-
width: 7,
|
|
14736
|
-
height: 7,
|
|
14737
|
-
borderRadius: "50%",
|
|
14738
|
-
background: "#1677ff",
|
|
14739
|
-
border: "2px solid var(--dsw-specific-sidebar-fill, #fff)",
|
|
14740
|
-
boxSizing: "content-box"
|
|
14741
|
-
};
|
|
14742
|
-
const updateButtonStyle = {
|
|
14743
|
-
flex: "none",
|
|
14744
|
-
height: 28,
|
|
14745
|
-
minWidth: 50,
|
|
14746
|
-
margin: "4px 8px 4px 0",
|
|
14747
|
-
padding: "0 11px",
|
|
14748
|
-
border: "1px solid rgba(22, 119, 255, .24)",
|
|
14749
|
-
borderRadius: 8,
|
|
14750
|
-
background: "rgba(22, 119, 255, .08)",
|
|
14751
|
-
color: "#1677ff",
|
|
14752
|
-
cursor: "pointer",
|
|
14753
|
-
fontFamily: "inherit",
|
|
14754
|
-
fontSize: 12,
|
|
14755
|
-
lineHeight: "26px",
|
|
14756
|
-
fontWeight: 500,
|
|
14757
|
-
whiteSpace: "nowrap"
|
|
14758
|
-
};
|
|
14759
13728
|
function ArkmeMark({ size = 18 }) {
|
|
14760
13729
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
14761
13730
|
"aria-hidden": true,
|
|
@@ -14772,32 +13741,19 @@ window.__ModuleLoader__.load({
|
|
|
14772
13741
|
}
|
|
14773
13742
|
});
|
|
14774
13743
|
}
|
|
14775
|
-
function ArkmeFooterAction({ wide, toggle, useSessions, expanded = false, loggedOut = false, bindingRequired = false, authenticated = false, authPending = false, unreadCount = 0
|
|
13744
|
+
function ArkmeFooterAction({ wide, toggle, useSessions, expanded = false, loggedOut = false, bindingRequired = false, authenticated = false, authPending = false, unreadCount = 0 }) {
|
|
14776
13745
|
const currentSession = useSessions((state) => state.current);
|
|
14777
13746
|
const normalizedUnread = Math.max(0, Math.trunc(unreadCount));
|
|
14778
13747
|
const unreadLabel = normalizedUnread > 99 ? "99+" : String(normalizedUnread);
|
|
14779
13748
|
const statusLabel = bindingRequired ? "待绑定" : loggedOut ? "未登录" : "";
|
|
14780
|
-
const item = derivePluginUpdateItem(updateSnapshot ?? {
|
|
14781
|
-
checked: true,
|
|
14782
|
-
busy: updateBusy,
|
|
14783
|
-
error: "",
|
|
14784
|
-
installError: "",
|
|
14785
|
-
...updateStatus === void 0 ? {} : { status: updateStatus }
|
|
14786
|
-
});
|
|
14787
|
-
const status = updateSnapshot?.status ?? updateStatus;
|
|
14788
|
-
const updateAvailable = item?.available === true;
|
|
14789
|
-
const showUpdateButton = wide && item !== void 0 && (!item.available || status?.canInstallInApp) && onUpdate !== void 0;
|
|
14790
|
-
const actionLabel = item?.uncertain ? "查看状态" : item?.active ? "查看进度" : item?.failed ? "查看结果" : updateBusy ? "更新中…" : "更新";
|
|
14791
|
-
const updateLabel = updateAvailable ? status?.level === "critical" ? "插件有重要更新" : "插件有可用更新" : item === void 0 ? "" : item.uncertain ? "更新状态待确认" : item.failed ? "更新未完成" : "正在更新";
|
|
14792
13749
|
const accessibleLabel = [
|
|
14793
13750
|
"Arkme",
|
|
14794
13751
|
...statusLabel === "" ? [] : [statusLabel],
|
|
14795
|
-
...statusLabel !== "" || normalizedUnread === 0 ? [] : [`${unreadLabel} 条未读`]
|
|
14796
|
-
...updateLabel === "" ? [] : [updateLabel]
|
|
13752
|
+
...statusLabel !== "" || normalizedUnread === 0 ? [] : [`${unreadLabel} 条未读`]
|
|
14797
13753
|
].join(" · ");
|
|
14798
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.
|
|
13754
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
14799
13755
|
style: wide ? actionRowStyle : { width: 36 },
|
|
14800
|
-
children:
|
|
13756
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
14801
13757
|
type: "button",
|
|
14802
13758
|
disabled: authPending,
|
|
14803
13759
|
style: {
|
|
@@ -14818,20 +13774,12 @@ window.__ModuleLoader__.load({
|
|
|
14818
13774
|
toggle(currentSession, authenticated);
|
|
14819
13775
|
},
|
|
14820
13776
|
children: [
|
|
14821
|
-
/* @__PURE__ */ (0, react_jsx_runtime.
|
|
13777
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
14822
13778
|
style: {
|
|
14823
13779
|
position: "relative",
|
|
14824
13780
|
flex: "none"
|
|
14825
13781
|
},
|
|
14826
|
-
children:
|
|
14827
|
-
"aria-hidden": true,
|
|
14828
|
-
"data-arkme-update-level": status?.level,
|
|
14829
|
-
style: {
|
|
14830
|
-
...updateDotStyle,
|
|
14831
|
-
...status?.level === "important" ? { background: "#d97706" } : {},
|
|
14832
|
-
...status?.level === "critical" ? { background: "#dc2626" } : {}
|
|
14833
|
-
}
|
|
14834
|
-
})]
|
|
13782
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ArkmeMark, {})
|
|
14835
13783
|
}),
|
|
14836
13784
|
wide && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
14837
13785
|
style: {
|
|
@@ -14860,19 +13808,7 @@ window.__ModuleLoader__.load({
|
|
|
14860
13808
|
children: unreadLabel
|
|
14861
13809
|
})
|
|
14862
13810
|
]
|
|
14863
|
-
})
|
|
14864
|
-
type: "button",
|
|
14865
|
-
style: updateButtonStyle,
|
|
14866
|
-
"aria-label": item?.available ? `更新 Arkme 插件到 ${item.latestVersion}` : `${actionLabel}:${updateLabel}`,
|
|
14867
|
-
onMouseEnter: (event) => {
|
|
14868
|
-
event.currentTarget.style.background = "rgba(22, 119, 255, .14)";
|
|
14869
|
-
},
|
|
14870
|
-
onMouseLeave: (event) => {
|
|
14871
|
-
event.currentTarget.style.background = "rgba(22, 119, 255, .08)";
|
|
14872
|
-
},
|
|
14873
|
-
onClick: onUpdate,
|
|
14874
|
-
children: actionLabel
|
|
14875
|
-
})]
|
|
13811
|
+
})
|
|
14876
13812
|
});
|
|
14877
13813
|
}
|
|
14878
13814
|
//#endregion
|
|
@@ -65791,6 +64727,38 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
65791
64727
|
};
|
|
65792
64728
|
}
|
|
65793
64729
|
//#endregion
|
|
64730
|
+
//#region src/client/desktop-quarantine-status.ts
|
|
64731
|
+
function parseArkmeDesktopQuarantineStatus(value) {
|
|
64732
|
+
if (!isObject(value) || typeof value.active !== "boolean" || !Array.isArray(value.entries)) return void 0;
|
|
64733
|
+
const entries = [];
|
|
64734
|
+
for (const entry of value.entries) {
|
|
64735
|
+
if (!isObject(entry) || typeof entry.packageName !== "string" || entry.packageName.trim() === "" || typeof entry.dismissed !== "boolean" || typeof entry.resolved !== "boolean" || entry.extensionId !== void 0 && typeof entry.extensionId !== "string") return void 0;
|
|
64736
|
+
entries.push({
|
|
64737
|
+
packageName: entry.packageName,
|
|
64738
|
+
...typeof entry.extensionId === "string" ? { extensionId: entry.extensionId } : {},
|
|
64739
|
+
dismissed: entry.dismissed,
|
|
64740
|
+
resolved: entry.resolved
|
|
64741
|
+
});
|
|
64742
|
+
}
|
|
64743
|
+
if (value.mode !== void 0 && value.mode !== "targeted" && value.mode !== "local-safe-mode") return void 0;
|
|
64744
|
+
for (const key of [
|
|
64745
|
+
"quarantineId",
|
|
64746
|
+
"failureSummary",
|
|
64747
|
+
"failureLogTail"
|
|
64748
|
+
]) if (value[key] !== void 0 && typeof value[key] !== "string") return void 0;
|
|
64749
|
+
return {
|
|
64750
|
+
active: value.active,
|
|
64751
|
+
...typeof value.quarantineId === "string" ? { quarantineId: value.quarantineId } : {},
|
|
64752
|
+
...value.mode === "targeted" || value.mode === "local-safe-mode" ? { mode: value.mode } : {},
|
|
64753
|
+
...typeof value.failureSummary === "string" ? { failureSummary: value.failureSummary } : {},
|
|
64754
|
+
...typeof value.failureLogTail === "string" ? { failureLogTail: value.failureLogTail } : {},
|
|
64755
|
+
entries
|
|
64756
|
+
};
|
|
64757
|
+
}
|
|
64758
|
+
function isObject(value) {
|
|
64759
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
64760
|
+
}
|
|
64761
|
+
//#endregion
|
|
65794
64762
|
//#region src/client/extension-share-presentation.ts
|
|
65795
64763
|
/**
|
|
65796
64764
|
* Prefer the authenticated marketplace identity so Arkme can reuse its normal detail modal.
|
|
@@ -66666,6 +65634,12 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
66666
65634
|
fontSize: 11,
|
|
66667
65635
|
lineHeight: "17px"
|
|
66668
65636
|
},
|
|
65637
|
+
lifecycleQuarantine: {
|
|
65638
|
+
marginTop: 4,
|
|
65639
|
+
color: "#b54708",
|
|
65640
|
+
fontSize: 11,
|
|
65641
|
+
lineHeight: "17px"
|
|
65642
|
+
},
|
|
66669
65643
|
lifecycleActions: {
|
|
66670
65644
|
flex: "none",
|
|
66671
65645
|
display: "flex",
|
|
@@ -68407,7 +67381,7 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
68407
67381
|
function extensionHasAuthorIdentity(item) {
|
|
68408
67382
|
return item.source?.type === "github_repository" || item.owner_user_id !== void 0 || (item.owner_name?.trim() ?? "") !== "" || (item.owner_arkme_id?.trim() ?? "") !== "";
|
|
68409
67383
|
}
|
|
68410
|
-
function ArkmeExtensionLifecycleRow({ item, installed, kind, actionBusy = false, installTask, onOpen, onUpdate, onToggle, onPause, onResume }) {
|
|
67384
|
+
function ArkmeExtensionLifecycleRow({ item, installed, kind, actionBusy = false, installTask, onOpen, onUpdate, onToggle, onPause, onResume, quarantineReason }) {
|
|
68411
67385
|
const processing = installTask !== void 0 && !installTask.done || actionBusy;
|
|
68412
67386
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("article", {
|
|
68413
67387
|
style: styles$17.lifecycleRow,
|
|
@@ -68424,16 +67398,24 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
68424
67398
|
size: 38
|
|
68425
67399
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
68426
67400
|
style: styles$17.lifecycleCopy,
|
|
68427
|
-
children: [
|
|
68428
|
-
|
|
68429
|
-
|
|
68430
|
-
|
|
68431
|
-
|
|
68432
|
-
|
|
68433
|
-
|
|
68434
|
-
|
|
67401
|
+
children: [
|
|
67402
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
67403
|
+
style: styles$17.lifecycleTitle,
|
|
67404
|
+
children: item.name
|
|
67405
|
+
}),
|
|
67406
|
+
quarantineReason !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
67407
|
+
style: styles$17.lifecycleQuarantine,
|
|
67408
|
+
title: quarantineReason,
|
|
67409
|
+
children: "已自动停用"
|
|
67410
|
+
}),
|
|
67411
|
+
extensionHasAuthorIdentity(item) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
67412
|
+
style: styles$17.lifecycleAuthor,
|
|
67413
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ArkmeExtensionAuthorIdentity, {
|
|
67414
|
+
item,
|
|
67415
|
+
size: 20
|
|
67416
|
+
})
|
|
68435
67417
|
})
|
|
68436
|
-
|
|
67418
|
+
]
|
|
68437
67419
|
})]
|
|
68438
67420
|
}),
|
|
68439
67421
|
kind === "installed" && onToggle !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
@@ -68701,6 +67683,7 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
68701
67683
|
const [myExtensions, setMyExtensions] = (0, react.useState)([]);
|
|
68702
67684
|
const [myExtensionWarnings, setMyExtensionWarnings] = (0, react.useState)([]);
|
|
68703
67685
|
const [installed, setInstalled] = (0, react.useState)([]);
|
|
67686
|
+
const [desktopQuarantine, setDesktopQuarantine] = (0, react.useState)();
|
|
68704
67687
|
const [updates, setUpdates] = (0, react.useState)([]);
|
|
68705
67688
|
const [lifecycleCatalogItems, setLifecycleCatalogItems] = (0, react.useState)({});
|
|
68706
67689
|
const [detail, setDetail] = (0, react.useState)();
|
|
@@ -68853,6 +67836,15 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
68853
67836
|
(0, react.useEffect)(() => {
|
|
68854
67837
|
setSort(readMarketplaceSortPreference(currentUserId));
|
|
68855
67838
|
}, [currentUserId]);
|
|
67839
|
+
(0, react.useEffect)(() => {
|
|
67840
|
+
const controller = new AbortController();
|
|
67841
|
+
callArkme("extensions.quarantine.status", void 0, controller.signal).then((value) => {
|
|
67842
|
+
setDesktopQuarantine(parseArkmeDesktopQuarantineStatus(value));
|
|
67843
|
+
}).catch(() => void 0);
|
|
67844
|
+
return () => {
|
|
67845
|
+
controller.abort();
|
|
67846
|
+
};
|
|
67847
|
+
}, []);
|
|
68856
67848
|
(0, react.useEffect)(() => {
|
|
68857
67849
|
classificationController.current?.abort();
|
|
68858
67850
|
const controller = new AbortController();
|
|
@@ -69350,6 +68342,18 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
69350
68342
|
setActionBusyExtensionId(void 0);
|
|
69351
68343
|
}
|
|
69352
68344
|
};
|
|
68345
|
+
const reenableQuarantinedExtension = async (extensionId, packageName) => {
|
|
68346
|
+
setActionBusyExtensionId(extensionId);
|
|
68347
|
+
setInstallError("");
|
|
68348
|
+
setRestartNotice("");
|
|
68349
|
+
try {
|
|
68350
|
+
await callArkme("extensions.quarantine.reenable", { packageName });
|
|
68351
|
+
setRestartNotice("正在重新启用扩展并重启 DSH;如果扩展仍然加载失败,将继续保持停用。");
|
|
68352
|
+
} catch (caught) {
|
|
68353
|
+
setActionBusyExtensionId(void 0);
|
|
68354
|
+
setInstallError(caught instanceof Error ? caught.message : String(caught));
|
|
68355
|
+
}
|
|
68356
|
+
};
|
|
69353
68357
|
(0, react.useEffect)(() => {
|
|
69354
68358
|
if (installTask === void 0 || installTask.done) return;
|
|
69355
68359
|
const controller = new AbortController();
|
|
@@ -69970,18 +68974,23 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
69970
68974
|
!busy && error === "" && sharedDetail === void 0 && detail === void 0 && tab === "installed" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
69971
68975
|
style: styles$17.lifecycleList,
|
|
69972
68976
|
"data-extension-lifecycle-list": "installed",
|
|
69973
|
-
children: visibleInstalled.map((item) =>
|
|
69974
|
-
|
|
69975
|
-
|
|
69976
|
-
|
|
69977
|
-
|
|
69978
|
-
|
|
69979
|
-
|
|
69980
|
-
|
|
69981
|
-
|
|
69982
|
-
|
|
69983
|
-
|
|
69984
|
-
|
|
68977
|
+
children: visibleInstalled.map((item) => {
|
|
68978
|
+
const quarantineEntry = desktopQuarantine?.active === true ? desktopQuarantine.entries.find((entry) => entry.extensionId === item.extensionId && !entry.resolved) : void 0;
|
|
68979
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ArkmeExtensionLifecycleRow, {
|
|
68980
|
+
item: mergeInstalledExtensionCatalogItem(item, lifecycleCatalogItems[item.extensionId], iconRefFor(item.extensionId)),
|
|
68981
|
+
installed: item,
|
|
68982
|
+
kind: "installed",
|
|
68983
|
+
actionBusy: actionBusyExtensionId === item.extensionId,
|
|
68984
|
+
...quarantineEntry === void 0 ? {} : { quarantineReason: desktopQuarantine?.failureSummary ?? "扩展启动时加载失败,已自动停用" },
|
|
68985
|
+
onOpen: () => {
|
|
68986
|
+
inspect(item.extensionId);
|
|
68987
|
+
},
|
|
68988
|
+
onToggle: (enabled) => {
|
|
68989
|
+
if (enabled && quarantineEntry !== void 0) reenableQuarantinedExtension(item.extensionId, quarantineEntry.packageName);
|
|
68990
|
+
else toggleEnabled(item.extensionId, enabled);
|
|
68991
|
+
}
|
|
68992
|
+
}, item.extensionId);
|
|
68993
|
+
})
|
|
69985
68994
|
}), visibleInstalled.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EmptyState, { tab: "installed" })] }),
|
|
69986
68995
|
!busy && error === "" && sharedDetail === void 0 && detail === void 0 && tab === "updates" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
69987
68996
|
style: styles$17.lifecycleList,
|
|
@@ -81463,8 +80472,8 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
81463
80472
|
borderRadius: 999,
|
|
81464
80473
|
display: "grid",
|
|
81465
80474
|
placeItems: "center",
|
|
81466
|
-
background:
|
|
81467
|
-
color: arkmeTheme.
|
|
80475
|
+
background: arkmeTheme.primaryAction,
|
|
80476
|
+
color: arkmeTheme.onPrimaryAction,
|
|
81468
80477
|
cursor: "pointer",
|
|
81469
80478
|
padding: 0
|
|
81470
80479
|
},
|
|
@@ -85313,7 +84322,7 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
85313
84322
|
setForwardTargetPicker(void 0);
|
|
85314
84323
|
closeMessageMenu();
|
|
85315
84324
|
showForwardSuccessFeedback(successfulTargets, successCount, failureCount);
|
|
85316
|
-
|
|
84325
|
+
showMessageActionStatus(warningText);
|
|
85317
84326
|
if (needsTimelineRefresh) await loadTimeline();
|
|
85318
84327
|
} catch (caught) {
|
|
85319
84328
|
if (activeSourceRef.current === sourceRef) {
|
|
@@ -86475,9 +85484,10 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
86475
85484
|
"aria-label": "搜索转发对象",
|
|
86476
85485
|
disabled: messageActionBusy === "forward",
|
|
86477
85486
|
onChange: (event) => {
|
|
85487
|
+
const keyword = event.currentTarget.value;
|
|
86478
85488
|
setForwardTargetPicker((current) => current === void 0 ? current : {
|
|
86479
85489
|
...current,
|
|
86480
|
-
keyword
|
|
85490
|
+
keyword
|
|
86481
85491
|
});
|
|
86482
85492
|
}
|
|
86483
85493
|
})]
|
|
@@ -86601,9 +85611,10 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
86601
85611
|
"aria-label": "转发附言",
|
|
86602
85612
|
disabled: messageActionBusy === "forward",
|
|
86603
85613
|
onChange: (event) => {
|
|
85614
|
+
const commentText = event.currentTarget.value;
|
|
86604
85615
|
setForwardTargetPicker((current) => current === void 0 ? current : {
|
|
86605
85616
|
...current,
|
|
86606
|
-
commentText
|
|
85617
|
+
commentText
|
|
86607
85618
|
});
|
|
86608
85619
|
},
|
|
86609
85620
|
onKeyDown: (event) => {
|
|
@@ -118025,8 +117036,232 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
118025
117036
|
]);
|
|
118026
117037
|
}
|
|
118027
117038
|
//#endregion
|
|
118028
|
-
//#region src/client/
|
|
117039
|
+
//#region src/client/ArkmeExtensionRecoveryNotice.tsx
|
|
118029
117040
|
const styles$4 = {
|
|
117041
|
+
root: {
|
|
117042
|
+
position: "absolute",
|
|
117043
|
+
zIndex: 30,
|
|
117044
|
+
top: 20,
|
|
117045
|
+
left: "50%",
|
|
117046
|
+
transform: "translateX(-50%)",
|
|
117047
|
+
width: "min(640px, calc(100% - 40px))",
|
|
117048
|
+
padding: "16px 18px",
|
|
117049
|
+
borderRadius: 14,
|
|
117050
|
+
border: "1px solid #f0cf8a",
|
|
117051
|
+
background: "#fffaf0",
|
|
117052
|
+
color: "#20283b",
|
|
117053
|
+
boxShadow: "0 14px 36px rgba(33, 41, 63, 0.16)",
|
|
117054
|
+
fontSize: 13,
|
|
117055
|
+
lineHeight: 1.55
|
|
117056
|
+
},
|
|
117057
|
+
title: {
|
|
117058
|
+
margin: 0,
|
|
117059
|
+
fontSize: 16,
|
|
117060
|
+
lineHeight: 1.4,
|
|
117061
|
+
fontWeight: 650
|
|
117062
|
+
},
|
|
117063
|
+
summary: {
|
|
117064
|
+
margin: "6px 0 0",
|
|
117065
|
+
color: "#4f5c75"
|
|
117066
|
+
},
|
|
117067
|
+
localExplanation: {
|
|
117068
|
+
margin: "5px 0 0",
|
|
117069
|
+
color: "#69758c"
|
|
117070
|
+
},
|
|
117071
|
+
list: {
|
|
117072
|
+
display: "grid",
|
|
117073
|
+
gap: 7,
|
|
117074
|
+
margin: "12px 0 0",
|
|
117075
|
+
padding: 0,
|
|
117076
|
+
listStyle: "none"
|
|
117077
|
+
},
|
|
117078
|
+
entry: {
|
|
117079
|
+
display: "flex",
|
|
117080
|
+
alignItems: "center",
|
|
117081
|
+
justifyContent: "space-between",
|
|
117082
|
+
gap: 12,
|
|
117083
|
+
padding: "8px 10px",
|
|
117084
|
+
borderRadius: 9,
|
|
117085
|
+
background: "rgba(238, 226, 196, 0.45)"
|
|
117086
|
+
},
|
|
117087
|
+
packageName: {
|
|
117088
|
+
minWidth: 0,
|
|
117089
|
+
overflow: "hidden",
|
|
117090
|
+
textOverflow: "ellipsis",
|
|
117091
|
+
fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace"
|
|
117092
|
+
},
|
|
117093
|
+
details: {
|
|
117094
|
+
margin: "10px 0 0",
|
|
117095
|
+
maxHeight: 160,
|
|
117096
|
+
overflow: "auto",
|
|
117097
|
+
padding: 10,
|
|
117098
|
+
borderRadius: 8,
|
|
117099
|
+
background: "#20283b",
|
|
117100
|
+
color: "#e8ecf5",
|
|
117101
|
+
whiteSpace: "pre-wrap",
|
|
117102
|
+
wordBreak: "break-word",
|
|
117103
|
+
fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
|
|
117104
|
+
fontSize: 11
|
|
117105
|
+
},
|
|
117106
|
+
actions: {
|
|
117107
|
+
display: "flex",
|
|
117108
|
+
flexWrap: "wrap",
|
|
117109
|
+
alignItems: "center",
|
|
117110
|
+
gap: 8,
|
|
117111
|
+
marginTop: 13
|
|
117112
|
+
},
|
|
117113
|
+
button: {
|
|
117114
|
+
appearance: "none",
|
|
117115
|
+
border: "1px solid #c8d0df",
|
|
117116
|
+
borderRadius: 8,
|
|
117117
|
+
padding: "7px 11px",
|
|
117118
|
+
background: "#fff",
|
|
117119
|
+
color: "#34415a",
|
|
117120
|
+
cursor: "pointer",
|
|
117121
|
+
fontSize: 12
|
|
117122
|
+
},
|
|
117123
|
+
primaryButton: {
|
|
117124
|
+
borderColor: "#496ee8",
|
|
117125
|
+
background: "#496ee8",
|
|
117126
|
+
color: "#fff"
|
|
117127
|
+
},
|
|
117128
|
+
error: {
|
|
117129
|
+
margin: "9px 0 0",
|
|
117130
|
+
color: "#b42318"
|
|
117131
|
+
}
|
|
117132
|
+
};
|
|
117133
|
+
const defaultRequest = async (operation, params) => await callArkme(operation, params);
|
|
117134
|
+
function ArkmeExtensionRecoveryNotice({ request = defaultRequest, onOpenExtensions = () => {
|
|
117135
|
+
arkmeUi.showExtensions();
|
|
117136
|
+
} }) {
|
|
117137
|
+
const [status, setStatus] = (0, react.useState)();
|
|
117138
|
+
const [detailsVisible, setDetailsVisible] = (0, react.useState)(false);
|
|
117139
|
+
const [busyPackage, setBusyPackage] = (0, react.useState)();
|
|
117140
|
+
const [error, setError] = (0, react.useState)("");
|
|
117141
|
+
(0, react.useEffect)(() => {
|
|
117142
|
+
let active = true;
|
|
117143
|
+
request("extensions.quarantine.status").then((value) => {
|
|
117144
|
+
if (active) setStatus(parseArkmeDesktopQuarantineStatus(value));
|
|
117145
|
+
}).catch(() => void 0);
|
|
117146
|
+
return () => {
|
|
117147
|
+
active = false;
|
|
117148
|
+
};
|
|
117149
|
+
}, [request]);
|
|
117150
|
+
const entries = (0, react.useMemo)(() => status?.entries.filter((entry) => !entry.dismissed && !entry.resolved) ?? [], [status]);
|
|
117151
|
+
if (status?.active !== true || entries.length === 0) return null;
|
|
117152
|
+
const localSafeMode = status.mode === "local-safe-mode" || entries.length > 1;
|
|
117153
|
+
const dismiss = async () => {
|
|
117154
|
+
setError("");
|
|
117155
|
+
try {
|
|
117156
|
+
await Promise.all(entries.map(async (entry) => {
|
|
117157
|
+
await request("extensions.quarantine.dismiss", { packageName: entry.packageName });
|
|
117158
|
+
}));
|
|
117159
|
+
setStatus((current) => current === void 0 ? current : {
|
|
117160
|
+
...current,
|
|
117161
|
+
entries: current.entries.map((entry) => ({
|
|
117162
|
+
...entry,
|
|
117163
|
+
dismissed: true
|
|
117164
|
+
}))
|
|
117165
|
+
});
|
|
117166
|
+
} catch (cause) {
|
|
117167
|
+
setError(cause instanceof Error ? cause.message : "暂时无法关闭提示,请稍后重试");
|
|
117168
|
+
}
|
|
117169
|
+
};
|
|
117170
|
+
const reenable = async (packageName) => {
|
|
117171
|
+
setError("");
|
|
117172
|
+
setBusyPackage(packageName);
|
|
117173
|
+
try {
|
|
117174
|
+
await request("extensions.quarantine.reenable", { packageName });
|
|
117175
|
+
} catch (cause) {
|
|
117176
|
+
setBusyPackage(void 0);
|
|
117177
|
+
setError(cause instanceof Error ? cause.message : "重新启用失败,该扩展仍保持停用");
|
|
117178
|
+
}
|
|
117179
|
+
};
|
|
117180
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
117181
|
+
"data-arkme-owned": "extension-recovery-notice",
|
|
117182
|
+
role: "status",
|
|
117183
|
+
style: styles$4.root,
|
|
117184
|
+
children: [
|
|
117185
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
117186
|
+
style: styles$4.title,
|
|
117187
|
+
children: localSafeMode ? "已进入本地扩展安全模式" : "已安全启动"
|
|
117188
|
+
}),
|
|
117189
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
117190
|
+
style: styles$4.summary,
|
|
117191
|
+
children: status.failureSummary ?? (localSafeMode ? `无法确定具体故障扩展,已停用 ${String(entries.length)} 个本地开发扩展。` : `扩展 ${entries[0].packageName} 启动时加载失败,已自动停用。`)
|
|
117192
|
+
}),
|
|
117193
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
117194
|
+
style: styles$4.localExplanation,
|
|
117195
|
+
children: localSafeMode ? "Arkme 其他功能可继续使用。修复本地插件后,可逐个重新启用并重启验证。" : "Arkme 其他功能可继续使用。修复该扩展后,可重新启用并重启验证。"
|
|
117196
|
+
}),
|
|
117197
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
|
|
117198
|
+
style: styles$4.list,
|
|
117199
|
+
children: entries.map((entry) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
|
|
117200
|
+
style: styles$4.entry,
|
|
117201
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
117202
|
+
style: styles$4.packageName,
|
|
117203
|
+
title: entry.packageName,
|
|
117204
|
+
children: entry.packageName
|
|
117205
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
117206
|
+
type: "button",
|
|
117207
|
+
style: {
|
|
117208
|
+
...styles$4.button,
|
|
117209
|
+
...styles$4.primaryButton
|
|
117210
|
+
},
|
|
117211
|
+
disabled: busyPackage !== void 0,
|
|
117212
|
+
"data-arkme-quarantine-action": "reenable",
|
|
117213
|
+
onClick: () => {
|
|
117214
|
+
reenable(entry.packageName);
|
|
117215
|
+
},
|
|
117216
|
+
children: busyPackage === entry.packageName ? "正在重新启用…" : "重新启用并重启"
|
|
117217
|
+
})]
|
|
117218
|
+
}, entry.packageName))
|
|
117219
|
+
}),
|
|
117220
|
+
detailsVisible && status.failureLogTail !== void 0 && status.failureLogTail !== "" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
|
|
117221
|
+
style: styles$4.details,
|
|
117222
|
+
children: status.failureLogTail
|
|
117223
|
+
}) : null,
|
|
117224
|
+
error !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
117225
|
+
role: "alert",
|
|
117226
|
+
style: styles$4.error,
|
|
117227
|
+
children: error
|
|
117228
|
+
}),
|
|
117229
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
117230
|
+
style: styles$4.actions,
|
|
117231
|
+
children: [
|
|
117232
|
+
status.failureLogTail !== void 0 && status.failureLogTail !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
117233
|
+
type: "button",
|
|
117234
|
+
style: styles$4.button,
|
|
117235
|
+
"data-arkme-quarantine-action": "details",
|
|
117236
|
+
onClick: () => {
|
|
117237
|
+
setDetailsVisible((value) => !value);
|
|
117238
|
+
},
|
|
117239
|
+
children: detailsVisible ? "收起详细原因" : "查看详细原因"
|
|
117240
|
+
}),
|
|
117241
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
117242
|
+
type: "button",
|
|
117243
|
+
style: styles$4.button,
|
|
117244
|
+
"data-arkme-quarantine-action": "extensions",
|
|
117245
|
+
onClick: onOpenExtensions,
|
|
117246
|
+
children: "打开扩展管理"
|
|
117247
|
+
}),
|
|
117248
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
117249
|
+
type: "button",
|
|
117250
|
+
style: styles$4.button,
|
|
117251
|
+
"data-arkme-quarantine-action": "dismiss",
|
|
117252
|
+
onClick: () => {
|
|
117253
|
+
dismiss();
|
|
117254
|
+
},
|
|
117255
|
+
children: "知道了"
|
|
117256
|
+
})
|
|
117257
|
+
]
|
|
117258
|
+
})
|
|
117259
|
+
]
|
|
117260
|
+
});
|
|
117261
|
+
}
|
|
117262
|
+
//#endregion
|
|
117263
|
+
//#region src/client/ArkmePersistentShell.tsx
|
|
117264
|
+
const styles$3 = {
|
|
118030
117265
|
sidebar: {
|
|
118031
117266
|
position: "relative",
|
|
118032
117267
|
width: "100%",
|
|
@@ -118215,7 +117450,7 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
118215
117450
|
"data-arkme-login-mode": "true",
|
|
118216
117451
|
"data-arkme-web-locked": true,
|
|
118217
117452
|
"data-arkme-directory-visible": "true",
|
|
118218
|
-
style: styles$
|
|
117453
|
+
style: styles$3.sidebar,
|
|
118219
117454
|
"aria-label": "Arkme 受限工作区导航",
|
|
118220
117455
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ArkmeProductNavigation, {
|
|
118221
117456
|
compact: false,
|
|
@@ -118223,7 +117458,7 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
118223
117458
|
taskExpanded: true,
|
|
118224
117459
|
locked: true
|
|
118225
117460
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
118226
|
-
style: styles$
|
|
117461
|
+
style: styles$3.taskDirectory,
|
|
118227
117462
|
"data-arkme-directory-mode": "web-locked",
|
|
118228
117463
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ArkmeNavigation, {
|
|
118229
117464
|
wide: true,
|
|
@@ -118237,7 +117472,7 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
118237
117472
|
"data-arkme-login-mode": "true",
|
|
118238
117473
|
"data-arkme-directory-visible": "false",
|
|
118239
117474
|
style: {
|
|
118240
|
-
...styles$
|
|
117475
|
+
...styles$3.sidebar,
|
|
118241
117476
|
width: 0
|
|
118242
117477
|
},
|
|
118243
117478
|
"aria-hidden": true
|
|
@@ -118251,7 +117486,7 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
118251
117486
|
"data-arkme-sidebar-resizing": sidebarResizing ? "true" : "false",
|
|
118252
117487
|
"data-arkme-login-mode": "false",
|
|
118253
117488
|
...contactsMode ? { "data-arkme-contacts-mobile-view": scopedContacts.selection.kind !== "none" ? "content" : "directory" } : {},
|
|
118254
|
-
style: styles$
|
|
117489
|
+
style: styles$3.sidebar,
|
|
118255
117490
|
"aria-label": "Arkme 功能导航栏",
|
|
118256
117491
|
children: [
|
|
118257
117492
|
!collapsed && directoryVisible && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("style", {
|
|
@@ -118276,7 +117511,7 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
118276
117511
|
currentSessionId: sessionState.current
|
|
118277
117512
|
}),
|
|
118278
117513
|
directoryVisible && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
118279
|
-
style: styles$
|
|
117514
|
+
style: styles$3.taskDirectory,
|
|
118280
117515
|
"data-arkme-directory-mode": contactsMode ? "contacts" : "conversations",
|
|
118281
117516
|
children: contactsMode ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ContactDirectorySurface, {
|
|
118282
117517
|
accountKey: contactsAccountKey ?? "",
|
|
@@ -118342,7 +117577,7 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
118342
117577
|
"aria-valuemin": ARKME_PERSISTENT_SIDEBAR_MIN_WIDTH,
|
|
118343
117578
|
"aria-valuemax": ARKME_PERSISTENT_SIDEBAR_MAX_WIDTH,
|
|
118344
117579
|
"aria-valuenow": renderedSidebarWidth,
|
|
118345
|
-
style: styles$
|
|
117580
|
+
style: styles$3.sidebarResizeHandle,
|
|
118346
117581
|
onPointerDown: beginSidebarResize,
|
|
118347
117582
|
onPointerMove: continueSidebarResize,
|
|
118348
117583
|
onPointerUp: (event) => {
|
|
@@ -118388,10 +117623,11 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
118388
117623
|
"data-arkme-owned": "persistent-workspace",
|
|
118389
117624
|
"data-arkme-workspace": true,
|
|
118390
117625
|
...contactsMode ? { "data-arkme-contacts-mobile-view": scopedContacts.selection.kind !== "none" ? "content" : "directory" } : {},
|
|
118391
|
-
style: styles$
|
|
117626
|
+
style: styles$3.workspace,
|
|
118392
117627
|
"aria-label": "Arkme 主界面",
|
|
118393
117628
|
children: [
|
|
118394
117629
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ArkmePersistentClientRuntime, {}),
|
|
117630
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ArkmeExtensionRecoveryNotice, {}),
|
|
118395
117631
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DeepSeekHarnessSurface, {
|
|
118396
117632
|
visible: harnessVisible,
|
|
118397
117633
|
nativeSettings: webLockedHarness
|
|
@@ -118436,7 +117672,7 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
118436
117672
|
}) : !webLockedHarness && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
118437
117673
|
"data-arkme-owned": "arkme-conversation-layer",
|
|
118438
117674
|
style: {
|
|
118439
|
-
...styles$
|
|
117675
|
+
...styles$3.conversationLayer,
|
|
118440
117676
|
visibility: harnessVisible ? "hidden" : "visible",
|
|
118441
117677
|
pointerEvents: harnessVisible ? "none" : "auto",
|
|
118442
117678
|
zIndex: harnessVisible ? 0 : 1
|
|
@@ -118461,7 +117697,7 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
118461
117697
|
}, [closeDetails]);
|
|
118462
117698
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("aside", {
|
|
118463
117699
|
"data-arkme-owned": "persistent-details",
|
|
118464
|
-
style: styles$
|
|
117700
|
+
style: styles$3.details,
|
|
118465
117701
|
"aria-hidden": true
|
|
118466
117702
|
});
|
|
118467
117703
|
}
|
|
@@ -118672,22 +117908,20 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
118672
117908
|
}
|
|
118673
117909
|
//#endregion
|
|
118674
117910
|
//#region src/client/ArkmeFooterDropdown.tsx
|
|
118675
|
-
const styles$
|
|
117911
|
+
const styles$2 = { root: {
|
|
118676
117912
|
width: "100%",
|
|
118677
117913
|
minWidth: 0
|
|
118678
117914
|
} };
|
|
118679
117915
|
function ArkmeFooterDropdown(props) {
|
|
118680
117916
|
const ui = (0, react.useSyncExternalStore)(arkmeUi.subscribe, arkmeUi.getSnapshot, arkmeUi.getSnapshot);
|
|
118681
117917
|
const authState = (0, react.useSyncExternalStore)(arkmeAuthStore.subscribe, arkmeAuthStore.getSnapshot, arkmeAuthStore.getSnapshot);
|
|
118682
|
-
const updateState = (0, react.useSyncExternalStore)(arkmePluginUpdateStore.subscribe, arkmePluginUpdateStore.getSnapshot, arkmePluginUpdateStore.getSnapshot);
|
|
118683
117918
|
const chatDirectory = (0, react.useSyncExternalStore)(arkmeChatDirectory.subscribe, arkmeChatDirectory.getSnapshot, arkmeChatDirectory.getSnapshot);
|
|
118684
117919
|
const auth = authState.auth;
|
|
118685
|
-
const currentSession = props.useSessions((state) => state.current);
|
|
118686
117920
|
const unreadCount = auth?.status === "authenticated" && chatDirectory.revision > 0 ? arkmeChatDirectory.totalUnreadCount() : 0;
|
|
118687
117921
|
useArkmeRealtimeClientEvents(auth, ui.authRevision, false);
|
|
118688
117922
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ArkmeOutgoingCallHost, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
118689
117923
|
style: {
|
|
118690
|
-
...styles$
|
|
117924
|
+
...styles$2.root,
|
|
118691
117925
|
width: props.wide ? "100%" : 36
|
|
118692
117926
|
},
|
|
118693
117927
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ArkmeFooterAction, {
|
|
@@ -118697,19 +117931,13 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
118697
117931
|
bindingRequired: auth?.status === "binding-required",
|
|
118698
117932
|
authenticated: auth?.status === "authenticated",
|
|
118699
117933
|
authPending: !authState.checked || authState.busy,
|
|
118700
|
-
unreadCount
|
|
118701
|
-
...updateState.status === void 0 ? {} : { updateStatus: updateState.status },
|
|
118702
|
-
updateSnapshot: updateState,
|
|
118703
|
-
onUpdate: () => {
|
|
118704
|
-
props.activate(currentSession);
|
|
118705
|
-
arkmeUpdateUi.open("plugin");
|
|
118706
|
-
}
|
|
117934
|
+
unreadCount
|
|
118707
117935
|
})
|
|
118708
117936
|
})] });
|
|
118709
117937
|
}
|
|
118710
117938
|
//#endregion
|
|
118711
117939
|
//#region src/client/ArkmeAppUpdateDialog.tsx
|
|
118712
|
-
const styles$
|
|
117940
|
+
const styles$1 = {
|
|
118713
117941
|
backdrop: {
|
|
118714
117942
|
position: "absolute",
|
|
118715
117943
|
inset: 0,
|
|
@@ -118835,20 +118063,20 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
118835
118063
|
const downloading = status.status === "downloading";
|
|
118836
118064
|
const downloaded = status.status === "downloaded";
|
|
118837
118065
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
118838
|
-
style: styles$
|
|
118066
|
+
style: styles$1.backdrop,
|
|
118839
118067
|
role: "presentation",
|
|
118840
118068
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
118841
|
-
style: styles$
|
|
118069
|
+
style: styles$1.dialog,
|
|
118842
118070
|
role: "dialog",
|
|
118843
118071
|
"aria-modal": "true",
|
|
118844
118072
|
"aria-label": "Arkme APP 更新",
|
|
118845
118073
|
children: [
|
|
118846
118074
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
118847
|
-
style: styles$
|
|
118075
|
+
style: styles$1.title,
|
|
118848
118076
|
children: downloaded ? "更新包下载完成" : downloading ? "正在下载更新包" : "发现新版本"
|
|
118849
118077
|
}),
|
|
118850
118078
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
|
|
118851
|
-
style: styles$
|
|
118079
|
+
style: styles$1.version,
|
|
118852
118080
|
children: [
|
|
118853
118081
|
"当前 ",
|
|
118854
118082
|
versionLabel(status.currentVersion),
|
|
@@ -118857,41 +118085,41 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
118857
118085
|
]
|
|
118858
118086
|
}),
|
|
118859
118087
|
!downloading && !downloaded && status.releaseNotes?.trim() && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
118860
|
-
style: styles$
|
|
118088
|
+
style: styles$1.notes,
|
|
118861
118089
|
children: status.releaseNotes.trim()
|
|
118862
118090
|
}),
|
|
118863
118091
|
downloading && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
118864
|
-
style: styles$
|
|
118092
|
+
style: styles$1.progressTrack,
|
|
118865
118093
|
"aria-label": "下载进度",
|
|
118866
118094
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { style: {
|
|
118867
|
-
...styles$
|
|
118095
|
+
...styles$1.progressValue,
|
|
118868
118096
|
width: progressPercentage(status)
|
|
118869
118097
|
} })
|
|
118870
118098
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
118871
|
-
style: styles$
|
|
118099
|
+
style: styles$1.progressText,
|
|
118872
118100
|
children: progressText(status)
|
|
118873
118101
|
})] }),
|
|
118874
118102
|
downloaded && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
118875
|
-
style: styles$
|
|
118103
|
+
style: styles$1.notes,
|
|
118876
118104
|
children: "安装包已下载到本机,可打开所在文件夹进行安装。"
|
|
118877
118105
|
}),
|
|
118878
118106
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
118879
|
-
style: styles$
|
|
118107
|
+
style: styles$1.actions,
|
|
118880
118108
|
children: [!downloading && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
118881
118109
|
type: "button",
|
|
118882
|
-
style: styles$
|
|
118110
|
+
style: styles$1.button,
|
|
118883
118111
|
onClick: dismiss,
|
|
118884
118112
|
children: downloaded ? "关闭" : "稍后"
|
|
118885
118113
|
}), downloaded ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
118886
118114
|
type: "button",
|
|
118887
|
-
style: styles$
|
|
118115
|
+
style: styles$1.primaryButton,
|
|
118888
118116
|
onClick: () => {
|
|
118889
118117
|
arkmeAppUpdateStore.showDownloadedFile();
|
|
118890
118118
|
},
|
|
118891
118119
|
children: "打开所在文件夹"
|
|
118892
118120
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
118893
118121
|
type: "button",
|
|
118894
|
-
style: styles$
|
|
118122
|
+
style: styles$1.primaryButton,
|
|
118895
118123
|
disabled: state.busy,
|
|
118896
118124
|
onClick: () => {
|
|
118897
118125
|
arkmeAppUpdateStore.download();
|
|
@@ -118904,262 +118132,6 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
118904
118132
|
});
|
|
118905
118133
|
}
|
|
118906
118134
|
//#endregion
|
|
118907
|
-
//#region src/client/ArkmePluginUpdateDialog.tsx
|
|
118908
|
-
const styles$1 = {
|
|
118909
|
-
backdrop: {
|
|
118910
|
-
position: "fixed",
|
|
118911
|
-
inset: 0,
|
|
118912
|
-
zIndex: 950,
|
|
118913
|
-
display: "grid",
|
|
118914
|
-
placeItems: "center",
|
|
118915
|
-
padding: 24,
|
|
118916
|
-
background: "rgba(16, 20, 28, 0.42)",
|
|
118917
|
-
color: "var(--dsw-alias-label-primary, #17191c)"
|
|
118918
|
-
},
|
|
118919
|
-
dialog: {
|
|
118920
|
-
width: "min(480px, 100%)",
|
|
118921
|
-
maxHeight: "min(620px, calc(100vh - 48px))",
|
|
118922
|
-
overflow: "auto",
|
|
118923
|
-
boxSizing: "border-box",
|
|
118924
|
-
border: "1px solid var(--dsw-alias-border-l1, #e2e5e9)",
|
|
118925
|
-
borderRadius: 20,
|
|
118926
|
-
padding: 28,
|
|
118927
|
-
background: "var(--dsw-alias-bg-base, #fff)",
|
|
118928
|
-
boxShadow: "0 24px 72px rgba(15, 23, 42, 0.24)"
|
|
118929
|
-
},
|
|
118930
|
-
header: {
|
|
118931
|
-
display: "flex",
|
|
118932
|
-
alignItems: "flex-start",
|
|
118933
|
-
justifyContent: "space-between",
|
|
118934
|
-
gap: 20
|
|
118935
|
-
},
|
|
118936
|
-
title: {
|
|
118937
|
-
margin: 0,
|
|
118938
|
-
fontSize: 20,
|
|
118939
|
-
lineHeight: "28px",
|
|
118940
|
-
fontWeight: 600
|
|
118941
|
-
},
|
|
118942
|
-
closeButton: {
|
|
118943
|
-
width: 32,
|
|
118944
|
-
height: 32,
|
|
118945
|
-
flex: "none",
|
|
118946
|
-
display: "grid",
|
|
118947
|
-
placeItems: "center",
|
|
118948
|
-
padding: 0,
|
|
118949
|
-
border: 0,
|
|
118950
|
-
borderRadius: 9,
|
|
118951
|
-
background: "transparent",
|
|
118952
|
-
color: "var(--dsw-alias-label-secondary, #68707c)",
|
|
118953
|
-
cursor: "pointer"
|
|
118954
|
-
},
|
|
118955
|
-
version: {
|
|
118956
|
-
margin: "10px 0 0",
|
|
118957
|
-
color: "var(--dsw-alias-label-secondary, #68707c)",
|
|
118958
|
-
fontSize: 14,
|
|
118959
|
-
lineHeight: "22px"
|
|
118960
|
-
},
|
|
118961
|
-
notes: {
|
|
118962
|
-
marginTop: 20,
|
|
118963
|
-
padding: "16px 18px",
|
|
118964
|
-
borderRadius: 12,
|
|
118965
|
-
background: "var(--dsw-alias-fill-l1, #f3f4f6)"
|
|
118966
|
-
},
|
|
118967
|
-
notesTitle: {
|
|
118968
|
-
margin: 0,
|
|
118969
|
-
fontSize: 14,
|
|
118970
|
-
lineHeight: "22px",
|
|
118971
|
-
fontWeight: 600
|
|
118972
|
-
},
|
|
118973
|
-
notesBody: {
|
|
118974
|
-
margin: "6px 0 0",
|
|
118975
|
-
color: "var(--dsw-alias-label-secondary, #68707c)",
|
|
118976
|
-
fontSize: 14,
|
|
118977
|
-
lineHeight: "22px",
|
|
118978
|
-
whiteSpace: "pre-wrap"
|
|
118979
|
-
},
|
|
118980
|
-
releaseLink: {
|
|
118981
|
-
display: "inline-block",
|
|
118982
|
-
marginTop: 9,
|
|
118983
|
-
color: "var(--dsw-alias-state-brand-primary, #3569e8)",
|
|
118984
|
-
fontSize: 12,
|
|
118985
|
-
lineHeight: "18px",
|
|
118986
|
-
textDecoration: "none"
|
|
118987
|
-
},
|
|
118988
|
-
status: {
|
|
118989
|
-
margin: "16px 0 0",
|
|
118990
|
-
color: "var(--dsw-alias-label-secondary, #68707c)",
|
|
118991
|
-
fontSize: 13,
|
|
118992
|
-
lineHeight: "20px"
|
|
118993
|
-
},
|
|
118994
|
-
error: {
|
|
118995
|
-
margin: "16px 0 0",
|
|
118996
|
-
color: "var(--dsw-alias-state-error-primary, #c2413b)",
|
|
118997
|
-
fontSize: 13,
|
|
118998
|
-
lineHeight: "20px"
|
|
118999
|
-
},
|
|
119000
|
-
actions: {
|
|
119001
|
-
display: "flex",
|
|
119002
|
-
justifyContent: "flex-end",
|
|
119003
|
-
gap: 10,
|
|
119004
|
-
marginTop: 26
|
|
119005
|
-
},
|
|
119006
|
-
button: {
|
|
119007
|
-
minHeight: 38,
|
|
119008
|
-
border: "1px solid var(--dsw-alias-border-l2, #d8dce2)",
|
|
119009
|
-
borderRadius: 9,
|
|
119010
|
-
padding: "0 14px",
|
|
119011
|
-
background: "var(--dsw-alias-bg-base, #fff)",
|
|
119012
|
-
color: "var(--dsw-alias-label-primary, #17191c)",
|
|
119013
|
-
cursor: "pointer",
|
|
119014
|
-
font: "inherit",
|
|
119015
|
-
fontSize: 14
|
|
119016
|
-
},
|
|
119017
|
-
primaryButton: {
|
|
119018
|
-
minHeight: 38,
|
|
119019
|
-
border: 0,
|
|
119020
|
-
borderRadius: 9,
|
|
119021
|
-
padding: "0 14px",
|
|
119022
|
-
background: "var(--dsw-alias-state-brand-primary, #3569e8)",
|
|
119023
|
-
color: "#fff",
|
|
119024
|
-
cursor: "pointer",
|
|
119025
|
-
font: "inherit",
|
|
119026
|
-
fontSize: 14,
|
|
119027
|
-
fontWeight: 600
|
|
119028
|
-
}
|
|
119029
|
-
};
|
|
119030
|
-
const ACTIVE_INSTALL_PHASES = /* @__PURE__ */ new Set([
|
|
119031
|
-
"preparing",
|
|
119032
|
-
"downloading",
|
|
119033
|
-
"verifying",
|
|
119034
|
-
"installing",
|
|
119035
|
-
"restarting"
|
|
119036
|
-
]);
|
|
119037
|
-
function blockedReason(status) {
|
|
119038
|
-
if (status.canInstallInApp) return void 0;
|
|
119039
|
-
switch (status.installBlockedReason) {
|
|
119040
|
-
case "local-install": return "当前为本地开发插件,不能在应用内覆盖更新。";
|
|
119041
|
-
case "update-disabled": return "插件自动更新当前未启用。";
|
|
119042
|
-
case "profile-unavailable": return "当前插件 Profile 不支持应用内更新。";
|
|
119043
|
-
default: return "当前运行环境不支持应用内更新。";
|
|
119044
|
-
}
|
|
119045
|
-
}
|
|
119046
|
-
function progressLabel(install) {
|
|
119047
|
-
switch (install?.phase) {
|
|
119048
|
-
case "preparing": return "正在准备…";
|
|
119049
|
-
case "downloading": return "正在下载…";
|
|
119050
|
-
case "verifying": return "正在校验…";
|
|
119051
|
-
case "installing": return "正在安装…";
|
|
119052
|
-
case "restarting": return "正在重启…";
|
|
119053
|
-
default: return "更新并重启";
|
|
119054
|
-
}
|
|
119055
|
-
}
|
|
119056
|
-
function ArkmePluginUpdateDialog({ status, install, busy, error, onDismiss, onInstall }) {
|
|
119057
|
-
const installActive = install !== void 0 && ACTIVE_INSTALL_PHASES.has(install.phase);
|
|
119058
|
-
const actionBusy = busy || installActive;
|
|
119059
|
-
const reason = blockedReason(status);
|
|
119060
|
-
const updateSummary = status.summary?.trim() || "此版本包含功能改进与问题修复。";
|
|
119061
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
119062
|
-
style: styles$1.backdrop,
|
|
119063
|
-
role: "presentation",
|
|
119064
|
-
onMouseDown: (event) => {
|
|
119065
|
-
if (event.target === event.currentTarget && !actionBusy) onDismiss();
|
|
119066
|
-
},
|
|
119067
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
119068
|
-
style: styles$1.dialog,
|
|
119069
|
-
role: "dialog",
|
|
119070
|
-
"aria-modal": "true",
|
|
119071
|
-
"aria-labelledby": "arkme-plugin-update-title",
|
|
119072
|
-
children: [
|
|
119073
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
119074
|
-
style: styles$1.header,
|
|
119075
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
119076
|
-
id: "arkme-plugin-update-title",
|
|
119077
|
-
style: styles$1.title,
|
|
119078
|
-
children: "发现插件新版本"
|
|
119079
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
|
|
119080
|
-
style: styles$1.version,
|
|
119081
|
-
children: [
|
|
119082
|
-
"当前 v",
|
|
119083
|
-
status.installedVersion,
|
|
119084
|
-
" → 最新 v",
|
|
119085
|
-
status.latestVersion ?? "…"
|
|
119086
|
-
]
|
|
119087
|
-
})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
119088
|
-
type: "button",
|
|
119089
|
-
style: {
|
|
119090
|
-
...styles$1.closeButton,
|
|
119091
|
-
...actionBusy ? {
|
|
119092
|
-
opacity: .5,
|
|
119093
|
-
cursor: "default"
|
|
119094
|
-
} : {}
|
|
119095
|
-
},
|
|
119096
|
-
"aria-label": "关闭插件更新",
|
|
119097
|
-
disabled: actionBusy,
|
|
119098
|
-
onClick: onDismiss,
|
|
119099
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(n$3, { size: 18 })
|
|
119100
|
-
})]
|
|
119101
|
-
}),
|
|
119102
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
119103
|
-
style: styles$1.notes,
|
|
119104
|
-
children: [
|
|
119105
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
|
|
119106
|
-
style: styles$1.notesTitle,
|
|
119107
|
-
children: "更新说明"
|
|
119108
|
-
}),
|
|
119109
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
119110
|
-
style: styles$1.notesBody,
|
|
119111
|
-
children: updateSummary
|
|
119112
|
-
}),
|
|
119113
|
-
status.releaseNotesUrl !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
|
|
119114
|
-
style: styles$1.releaseLink,
|
|
119115
|
-
href: status.releaseNotesUrl,
|
|
119116
|
-
target: "_blank",
|
|
119117
|
-
rel: "noreferrer",
|
|
119118
|
-
children: "查看完整更新说明"
|
|
119119
|
-
})
|
|
119120
|
-
]
|
|
119121
|
-
}),
|
|
119122
|
-
reason !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
119123
|
-
style: styles$1.status,
|
|
119124
|
-
children: reason
|
|
119125
|
-
}),
|
|
119126
|
-
installActive && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
119127
|
-
style: styles$1.status,
|
|
119128
|
-
role: "status",
|
|
119129
|
-
children: install.message
|
|
119130
|
-
}),
|
|
119131
|
-
error.trim() !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
119132
|
-
style: styles$1.error,
|
|
119133
|
-
role: "alert",
|
|
119134
|
-
children: error.trim()
|
|
119135
|
-
}),
|
|
119136
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
119137
|
-
style: styles$1.actions,
|
|
119138
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
119139
|
-
type: "button",
|
|
119140
|
-
style: styles$1.button,
|
|
119141
|
-
disabled: actionBusy,
|
|
119142
|
-
onClick: onDismiss,
|
|
119143
|
-
children: "稍后"
|
|
119144
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
119145
|
-
type: "button",
|
|
119146
|
-
disabled: actionBusy || reason !== void 0,
|
|
119147
|
-
style: {
|
|
119148
|
-
...styles$1.primaryButton,
|
|
119149
|
-
...actionBusy || reason !== void 0 ? {
|
|
119150
|
-
opacity: .5,
|
|
119151
|
-
cursor: "default"
|
|
119152
|
-
} : {}
|
|
119153
|
-
},
|
|
119154
|
-
onClick: onInstall,
|
|
119155
|
-
children: progressLabel(install)
|
|
119156
|
-
})]
|
|
119157
|
-
})
|
|
119158
|
-
]
|
|
119159
|
-
})
|
|
119160
|
-
});
|
|
119161
|
-
}
|
|
119162
|
-
//#endregion
|
|
119163
118135
|
//#region src/client/ArkmeConversationSurface.tsx
|
|
119164
118136
|
const root = {
|
|
119165
118137
|
width: "100%",
|
|
@@ -122346,7 +121318,6 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
122346
121318
|
en: arkmeLoginEn
|
|
122347
121319
|
}), "dsh-arkme: login dictionaries");
|
|
122348
121320
|
const loginT = ctx.locale.bind(ARKME_LOGIN_LOCALE_NAMESPACE);
|
|
122349
|
-
ctx.effect(() => arkmePluginUpdateStore.start(), "dsh-arkme: client plugin update status");
|
|
122350
121321
|
ctx.effect(() => arkmeAppUpdateStore.start(), "dsh-arkme: client app update status");
|
|
122351
121322
|
ctx.effect(() => {
|
|
122352
121323
|
let disposed = false;
|
|
@@ -122540,8 +121511,6 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
122540
121511
|
exports.ArkmePersistentDetails = ArkmePersistentDetails;
|
|
122541
121512
|
exports.ArkmePersistentSidebar = ArkmePersistentSidebar;
|
|
122542
121513
|
exports.ArkmePersistentWorkspace = ArkmePersistentWorkspace;
|
|
122543
|
-
exports.ArkmePluginUpdateDialog = ArkmePluginUpdateDialog;
|
|
122544
|
-
exports.ArkmePluginUpdateStore = ArkmePluginUpdateStore;
|
|
122545
121514
|
exports.ArkmePrivateCallMenu = ArkmePrivateCallMenu;
|
|
122546
121515
|
exports.ArkmeProductNavigation = ArkmeProductNavigation;
|
|
122547
121516
|
exports.ArkmeRecordingSurface = ArkmeRecordingSurface;
|
|
@@ -122560,7 +121529,6 @@ yoga yokohama you youtube yt yun za zappos zara zero zip zm zone zuerich zw
|
|
|
122560
121529
|
exports.DeepSeekHarnessSurface = DeepSeekHarnessSurface;
|
|
122561
121530
|
exports.apply = apply;
|
|
122562
121531
|
exports.arkmeAppUpdateStore = arkmeAppUpdateStore;
|
|
122563
|
-
exports.arkmePluginUpdateStore = arkmePluginUpdateStore;
|
|
122564
121532
|
exports.consumeExtensionShareDeepLink = consumeExtensionShareDeepLink;
|
|
122565
121533
|
exports.consumeExtensionShareDeepLinkIntent = consumeExtensionShareDeepLinkIntent;
|
|
122566
121534
|
exports.deepSeekHarnessEmbedRequested = deepSeekHarnessEmbedRequested;
|