dsh-plugin-update 0.2.0 → 0.3.1
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/CHANGELOG.md +54 -0
- package/README.md +511 -279
- package/dist/batch-run.d.ts +80 -0
- package/dist/batch-run.js +86 -0
- package/dist/batch.d.ts +111 -0
- package/dist/batch.js +183 -0
- package/dist/changelog-io.d.ts +56 -0
- package/dist/changelog-io.js +258 -0
- package/dist/changelog.d.ts +96 -0
- package/dist/changelog.js +287 -0
- package/dist/client.d.ts +16 -0
- package/dist/client.js +75 -1
- package/dist/commands.d.ts +59 -0
- package/dist/commands.js +60 -4
- package/dist/config.d.ts +48 -0
- package/dist/config.js +9 -1
- package/dist/diag.d.ts +125 -0
- package/dist/diag.js +243 -0
- package/dist/entry.d.ts +60 -0
- package/dist/entry.js +305 -0
- package/dist/gate.d.ts +35 -0
- package/dist/host-batch.d.ts +113 -0
- package/dist/host-batch.js +778 -0
- package/dist/host.d.ts +129 -0
- package/dist/host.js +479 -41
- package/dist/http.d.ts +127 -0
- package/dist/http.js +300 -0
- package/dist/panel-batch.d.ts +151 -0
- package/dist/panel-batch.js +927 -0
- package/dist/panel.d.ts +256 -0
- package/dist/panel.js +1300 -0
- package/dist/ports.d.ts +208 -0
- package/dist/queue.d.ts +109 -0
- package/dist/queue.js +182 -0
- package/dist/reader.d.ts +84 -0
- package/dist/reader.js +6 -4
- package/dist/redaction.d.ts +120 -0
- package/dist/redaction.js +205 -0
- package/dist/service.d.ts +72 -0
- package/dist/service.js +100 -6
- package/dist/store.d.ts +229 -0
- package/dist/store.js +251 -12
- package/package.json +31 -2
package/dist/host.d.ts
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { type PhoneAction, type UpdateConfigInput } from './config.js';
|
|
2
|
+
import type { EnvironmentKind, ReleaseChannel } from './ports.js';
|
|
3
|
+
import { type UpdateQueueState } from './queue.js';
|
|
4
|
+
export { buildPhoneName, buildPhoneNames, resolveUpdateConfig } from './config.js';
|
|
5
|
+
export type { PhoneAction, UpdateConfigInput } from './config.js';
|
|
6
|
+
export { parseEventListManifest, checkEventFields, checkEventCounts } from './gate.js';
|
|
7
|
+
export type { GateEventLevel, GateEventKind, GateEventEntry, GateEventCounts, GateEventList, GateFieldCheck, GateCountCheck } from './gate.js';
|
|
8
|
+
export { containingPackage, defaultHomeDir, profileNameValid, registrySpec, resolveTargetPackage } from './reader.js';
|
|
9
|
+
export { COPY_BUDGET_CHARS, DETAIL_MAX_CHARS, DIAG_DROP_ORDER, DIAG_INLINE_BUDGET_BYTES, DIAG_NEVER_DROP_KEYS, ENDORSED_REGISTRY_HOSTS, KNOWN_GAP_FILE_URL_PREFIX, REDACTED_PATH, REDACTED_SECRET, REDACTION_RULE_NAMES, diagByteLength, enforceDiagBudget, resolveRegistryHost, sanitizeDetail, sanitizeForCopy, truncateToWordBoundary, } from './redaction.js';
|
|
10
|
+
export type { DiagDropKey, RedactionRuleName } from './redaction.js';
|
|
11
|
+
export { DIAG_ACTIONS, DIAG_KEYS, DIAG_KNOWN_TYPES, DIAG_STAGE_EXPECT, DIAG_STAGES, DIAG_VERSION, buildDiag, deriveAction, deriveRouteMethod, deriveStage, enforceBudget as enforceDiagBudgetForPhone, } from './diag.js';
|
|
12
|
+
export type { DiagAction, DiagInput, DiagObject, DiagStage } from './diag.js';
|
|
13
|
+
export { CHANGELOG_ALL_CATEGORIES, CHANGELOG_FILENAME, CHANGELOG_FOLDED, CHANGELOG_MAX_BULLETS_PER_SECTION, CHANGELOG_MAX_BULLET_CHARS, CHANGELOG_MAX_CHARS, CHANGELOG_MAX_ENTRIES, CHANGELOG_MUST_SHOW, CHANGELOG_NEUTRAL_HINT, CHANGELOG_NEUTRAL_LINE, changelogForUpdate, hasVisibleSections, isUnreleasedVersion, parseChangelog, renderChangelogHTML, renderChangelogNeutral, renderChangelogSection, selectChangelogEntries, } from './changelog.js';
|
|
14
|
+
export type { ChangelogCategory, ChangelogEntry } from './changelog.js';
|
|
15
|
+
export { CHANGELOG_DEFAULT_REGISTRY, CHANGELOG_FETCH_MAX_BYTES, CHANGELOG_TAR_MAX_BYTES, CHANGELOG_TARBALL_MAX_BYTES, extractChangelogFromTar, fetchReleaseChangelogText, readInstalledChangelogText, } from './changelog-io.js';
|
|
16
|
+
export type { ReleaseChangelogRef } from './changelog-io.js';
|
|
17
|
+
export { createUpdateDiskPorts, createUpdateExecutor, pathsForUpdate, resolveCliEntry } from './store.js';
|
|
18
|
+
export { SKIPPED_FILE } from './config.js';
|
|
19
|
+
export { addSkipped, clearSkipped, createSkipDiskPorts, isVersionSkipped, MAX_SKIPPED_ENTRIES, normalizeSkipped, skipKey, type SkippedVersionEntry, } from './store.js';
|
|
20
|
+
export { compareReleaseVersions, isPrereleaseVersion, isVersionAllowedInChannel, validReleaseVersion, validVersion, compareVersions, } from './service.js';
|
|
21
|
+
export type { ReleaseChannel } from './ports.js';
|
|
22
|
+
export { createUpdateQueuePorts, queuePathsForUpdate, QUEUE_DIR_SEGMENT, QUEUE_FILE, QUEUE_LOCK_FILE, QUEUE_LOCK_STALE_MS, } from './store.js';
|
|
23
|
+
export { QUEUE_INTENT_TTL_MS, cancelEnqueuedInQueue, emptyQueueState, enqueueInQueue, isHeadOfQueue, normalizeQueueState, pruneExpiredIntents, queuePositionOf, releaseOwnerInQueue, setOwnerIfFree, visibleQueueFor, } from './queue.js';
|
|
24
|
+
export type { QueuedEntry, QueueOwner, UpdateQueueState, VisibleQueue } from './queue.js';
|
|
25
|
+
/**
|
|
26
|
+
* 宿主种类按能力判定,顺序固定(写死是为了将来宿主形态收敛时行为可预测):
|
|
27
|
+
* 1. 有 `desktopProfiles` 服务 → `desktop`(第三方 Desktop,launcher 在 Loader entry 挂载前注册);
|
|
28
|
+
* 2. 否则有 `pluginManager.installBundle`、且使用范围名恰是命令行明确封禁的 `desktop`
|
|
29
|
+
* → `desktop-manager`(官方桌面版:命令行那条对这个使用范围一定失败);
|
|
30
|
+
* 3. 其余 → `cli`。
|
|
31
|
+
*
|
|
32
|
+
* 第 2 条不是拿名字猜宿主身份,而是用**命令行自己的拒绝规则**判断这条路封没封:
|
|
33
|
+
* `dsh` 在 boot 与 plugin 子命令都按名字(大小写不敏感)拒绝 `--profile desktop`,
|
|
34
|
+
* 唯一豁免是桌面自带的 CLI 载体。名字由调用方按 resolveProfileName 的同一口径给出;
|
|
35
|
+
* 不传名字时只认第 1、3 条,绝不猜。
|
|
36
|
+
*/
|
|
37
|
+
export declare function detectEnvironmentKind(ctx: unknown, profileName?: string | null): EnvironmentKind;
|
|
38
|
+
export interface ReaderOverrides {
|
|
39
|
+
env?: Record<string, string | undefined>;
|
|
40
|
+
osHome?: string;
|
|
41
|
+
runningVersion?: string;
|
|
42
|
+
profileDir?: string;
|
|
43
|
+
profileName?: string | null;
|
|
44
|
+
homeDir?: string;
|
|
45
|
+
environmentKind?: EnvironmentKind;
|
|
46
|
+
ctx?: unknown;
|
|
47
|
+
fetchImpl?: (url: string, init?: Record<string, unknown>) => Promise<never>;
|
|
48
|
+
now?: () => number;
|
|
49
|
+
/**
|
|
50
|
+
* 编号发生器(测试与特殊宿主可换)。
|
|
51
|
+
* **契约:同一个使用范围(同一队列文件)内,注入值必须全局唯一** —— 队列的拥有者账本按
|
|
52
|
+
* (pluginId, jobId) 认人;若给多个目标注入同一个编号,会被记串(#27 里一个夹具就这么撞过)。
|
|
53
|
+
* 生产走 randomUUID,不会撞;写测试夹具时请按目标派生(如 'id-' + key + '-' + n)。
|
|
54
|
+
*/
|
|
55
|
+
randomId?: () => string;
|
|
56
|
+
nodeVersion?: string;
|
|
57
|
+
targetPackageName?: string;
|
|
58
|
+
registryUrl?: string;
|
|
59
|
+
checkTimeoutMs?: number;
|
|
60
|
+
confirmationTtlMs?: number;
|
|
61
|
+
installTimeoutMs?: number;
|
|
62
|
+
/** 版本通道:默认走配置的通道,显式覆盖供测试与特殊宿主用(#16)。 */
|
|
63
|
+
releaseChannel?: ReleaseChannel;
|
|
64
|
+
/** 队列意向有效期毫秒:默认 10 分钟(#15),须为有限大于 0 的数才生效,否则走默认。 */
|
|
65
|
+
queueTtlMs?: number;
|
|
66
|
+
/** 跨插件队列的显式假件(测试用;给了 readQueue + writeQueue 即不走真实队列目录,#15)。 */
|
|
67
|
+
readQueue?: () => UpdateQueueState | Promise<UpdateQueueState>;
|
|
68
|
+
writeQueue?: (state: UpdateQueueState) => void | Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* 抢全局锁的显式覆盖(测试与特殊宿主用)。
|
|
71
|
+
* 第三参是**锁陈旧判据的时限**,与安装时限同源——阈值只由这一处决定,别再让覆盖实现自己拍一个;
|
|
72
|
+
* 不接这个参数的旧实现行为一字不变(TS 允许少接参数)。
|
|
73
|
+
*/
|
|
74
|
+
tryAcquireGlobalLock?: (lockId: string, pluginId: string, opts?: {
|
|
75
|
+
timeoutMs?: number;
|
|
76
|
+
}) => boolean | Promise<boolean>;
|
|
77
|
+
releaseGlobalLock?: (lockId: string) => void | Promise<void>;
|
|
78
|
+
readInstalled?: () => Promise<import('./ports.js').EnvironmentView>;
|
|
79
|
+
readJob?: () => Promise<import('./ports.js').UpdateJob | null>;
|
|
80
|
+
writeJob?: (job: import('./ports.js').UpdateJob | null) => Promise<void>;
|
|
81
|
+
tryAcquireLock?: (lockId: string) => boolean | Promise<boolean>;
|
|
82
|
+
releaseLock?: (lockId: string) => void | Promise<void>;
|
|
83
|
+
backupJob?: (job: import('./ports.js').UpdateJob) => void | Promise<void>;
|
|
84
|
+
runInstall?: (args: {
|
|
85
|
+
version: string;
|
|
86
|
+
profileName: string | null;
|
|
87
|
+
environmentKind: EnvironmentKind;
|
|
88
|
+
}) => any;
|
|
89
|
+
subprocess?: unknown;
|
|
90
|
+
desktopPnpm?: unknown;
|
|
91
|
+
desktopProfiles?: unknown;
|
|
92
|
+
/** 官方桌面版进程内的插件管理器(显式覆盖用;不传就从 ctx 现取)。 */
|
|
93
|
+
pluginManager?: unknown;
|
|
94
|
+
runtimeExecutable?: string;
|
|
95
|
+
runtimeExecArgs?: string[];
|
|
96
|
+
cliEntry?: string;
|
|
97
|
+
/** 显式目标包目录:优先于按包名自动解析(hoisted、多副本、开发态链接等场景的逃生口)。 */
|
|
98
|
+
targetPackageDir?: string;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* 面板要的一栏「装到哪个使用范围」:只回**使用范围名**与宿主种类,绝不回目录路径。
|
|
102
|
+
* 为什么重要:同一个插件在 web / desktop 两个使用范围里各装一份,更新必须落到当前这一份;
|
|
103
|
+
* 面板把这栏显示出来,用户才知道自己点的是哪个范围的更新(也才能对上 `--profile` 那一段)。
|
|
104
|
+
* 走 includeEnv 选填(与 includeQueue 同一套口径):老调用不带这个参数,回包形状一字不变。
|
|
105
|
+
*/
|
|
106
|
+
export interface PhoneEnvView {
|
|
107
|
+
profileName: string | null;
|
|
108
|
+
environmentKind: string | null;
|
|
109
|
+
}
|
|
110
|
+
type LogCtx = {
|
|
111
|
+
fire: (level: string, event: string, fields: Record<string, unknown>) => void;
|
|
112
|
+
} | null;
|
|
113
|
+
export interface HostUpdate {
|
|
114
|
+
phoneNames: Record<PhoneAction, string>;
|
|
115
|
+
handlers: Record<string, (args: Record<string, unknown>) => Promise<Record<string, unknown>>>;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* 建宿主更新能力:一次调用得到该插件的一组电话名与处理器(调用方负责注册进自己的电话表)。
|
|
119
|
+
* 配置只经函数入参注入(冻结写法,第 11 条),插件标识必填,其余可选。
|
|
120
|
+
*/
|
|
121
|
+
export declare function createHostUpdate(deps: {
|
|
122
|
+
ctx?: unknown;
|
|
123
|
+
logCtx?: LogCtx;
|
|
124
|
+
desktopPnpm?: unknown;
|
|
125
|
+
pluginManager?: unknown;
|
|
126
|
+
readerOverrides?: ReaderOverrides;
|
|
127
|
+
} | undefined, configInput: UpdateConfigInput): HostUpdate;
|
|
128
|
+
/** 测试与门禁复位单例(正常运行不调用,规格 #591 第 6 条保留)。 */
|
|
129
|
+
export declare function __resetSharedUpdateReaderForTests(): void;
|