dsh-zen-remote 1.1.16 → 2.0.0
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/AGENTS.md +54 -9
- package/README.md +249 -190
- package/README.zh-CN.md +247 -201
- package/assets/home.png +0 -0
- package/assets/info.png +0 -0
- package/assets/pairing.png +0 -0
- package/assets/session.png +0 -0
- package/assets/sheet.png +0 -0
- package/cordis.patch.yml +12 -11
- package/cordis.patch.yml.example +24 -9
- package/docs/interface.md +57 -2
- package/docs/remote-access.en.md +99 -58
- package/docs/remote-access.md +99 -42
- package/dsh-push.mjs +67 -54
- package/lan-gate.mjs +88 -20
- package/lib/activity.js +168 -0
- package/lib/activity.js.map +1 -0
- package/lib/admin-routes.js +526 -0
- package/lib/admin-routes.js.map +1 -0
- package/lib/client-pairing.js +224 -0
- package/lib/client-pairing.js.map +1 -0
- package/lib/client-routes.js +674 -0
- package/lib/client-routes.js.map +1 -0
- package/lib/client.js +10051 -4777
- package/lib/config.js +346 -0
- package/lib/config.js.map +1 -0
- package/lib/fetch-route-intercept.js +418 -0
- package/lib/fetch-route-intercept.js.map +1 -0
- package/lib/fingerprint.js +363 -0
- package/lib/fingerprint.js.map +1 -0
- package/lib/http.js +69 -0
- package/lib/http.js.map +1 -0
- package/lib/index.js +675 -54
- package/lib/index.js.map +1 -1
- package/lib/intercept-shape.js +81 -0
- package/lib/intercept-shape.js.map +1 -0
- package/lib/intercept.js +3040 -0
- package/lib/intercept.js.map +1 -0
- package/lib/lan-gate-server.cjs +532 -121
- package/lib/merge-streams.js +1165 -0
- package/lib/merge-streams.js.map +1 -0
- package/lib/relay-access.js +496 -0
- package/lib/relay-access.js.map +1 -0
- package/lib/relay-client.js +1303 -0
- package/lib/relay-client.js.map +1 -0
- package/lib/relay-filter.js +282 -0
- package/lib/relay-filter.js.map +1 -0
- package/lib/relay-server.js +1792 -0
- package/lib/relay-server.js.map +1 -0
- package/lib/restart-fields.js +34 -0
- package/lib/restart-fields.js.map +1 -0
- package/lib/restart-watcher.js +106 -0
- package/lib/restart-watcher.js.map +1 -0
- package/lib/session-reference.js +157 -0
- package/lib/session-reference.js.map +1 -0
- package/lib/share-export.js +16 -1
- package/lib/share-export.js.map +1 -1
- package/lib/share-ops.js +86 -0
- package/lib/share-ops.js.map +1 -0
- package/lib/share-store.js +294 -0
- package/lib/share-store.js.map +1 -0
- package/lib/types/activity.d.ts +99 -0
- package/lib/types/activity.d.ts.map +1 -0
- package/lib/types/admin-routes.d.ts +129 -0
- package/lib/types/admin-routes.d.ts.map +1 -0
- package/lib/types/client/MobileDrawerFooter.d.ts.map +1 -1
- package/lib/types/client/MobileHome.d.ts +1 -1
- package/lib/types/client/MobileHome.d.ts.map +1 -1
- package/lib/types/client/MobileHomeChips.d.ts +1 -1
- package/lib/types/client/MobileHomeChips.d.ts.map +1 -1
- package/lib/types/client/MobileSessionHeader.d.ts +13 -2
- package/lib/types/client/MobileSessionHeader.d.ts.map +1 -1
- package/lib/types/client/MobileSessionInfo.d.ts +20 -3
- package/lib/types/client/MobileSessionInfo.d.ts.map +1 -1
- package/lib/types/client/RemoteComposerBanner.d.ts +42 -0
- package/lib/types/client/RemoteComposerBanner.d.ts.map +1 -0
- package/lib/types/client/RemoteHeaderIcon.d.ts +37 -0
- package/lib/types/client/RemoteHeaderIcon.d.ts.map +1 -0
- package/lib/types/client/RemoteShareMenu.d.ts +28 -0
- package/lib/types/client/RemoteShareMenu.d.ts.map +1 -0
- package/lib/types/client/RemoteStatusIcon.d.ts +36 -0
- package/lib/types/client/RemoteStatusIcon.d.ts.map +1 -0
- package/lib/types/client/compat/desktop.d.ts +21 -0
- package/lib/types/client/compat/desktop.d.ts.map +1 -0
- package/lib/types/client/compat/types.d.ts +57 -0
- package/lib/types/client/compat/types.d.ts.map +1 -1
- package/lib/types/client/current-session-report.d.ts +37 -0
- package/lib/types/client/current-session-report.d.ts.map +1 -0
- package/lib/types/client/effects/header-status.d.ts.map +1 -1
- package/lib/types/client/effects/keyboard-guard.d.ts.map +1 -1
- package/lib/types/client/effects/permission-sheet.d.ts +39 -0
- package/lib/types/client/effects/permission-sheet.d.ts.map +1 -0
- package/lib/types/client/effects/remote-session.d.ts +25 -0
- package/lib/types/client/effects/remote-session.d.ts.map +1 -0
- package/lib/types/client/effects/turn-fold.d.ts +9 -0
- package/lib/types/client/effects/turn-fold.d.ts.map +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/locales.d.ts +187 -2
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/remote-fetch.d.ts +51 -0
- package/lib/types/client/remote-fetch.d.ts.map +1 -0
- package/lib/types/client/remote-group-expansion.d.ts +41 -0
- package/lib/types/client/remote-group-expansion.d.ts.map +1 -0
- package/lib/types/client/remote-share-css.d.ts +19 -0
- package/lib/types/client/remote-share-css.d.ts.map +1 -0
- package/lib/types/client/remote-share-register.d.ts +113 -0
- package/lib/types/client/remote-share-register.d.ts.map +1 -0
- package/lib/types/client/remote-status-css.d.ts +15 -0
- package/lib/types/client/remote-status-css.d.ts.map +1 -0
- package/lib/types/client/remote-status-register.d.ts +46 -0
- package/lib/types/client/remote-status-register.d.ts.map +1 -0
- package/lib/types/client/settings/SettingsSection.d.ts +46 -0
- package/lib/types/client/settings/SettingsSection.d.ts.map +1 -0
- package/lib/types/client/settings/register-settings.d.ts +58 -0
- package/lib/types/client/settings/register-settings.d.ts.map +1 -0
- package/lib/types/client/settings/settings-css.d.ts +10 -0
- package/lib/types/client/settings/settings-css.d.ts.map +1 -0
- package/lib/types/client/share/share-preview.d.ts.map +1 -1
- package/lib/types/client/styles/composer.css.d.ts +1 -1
- package/lib/types/client/styles/composer.css.d.ts.map +1 -1
- package/lib/types/client/styles/header.css.d.ts +1 -1
- package/lib/types/client/styles/header.css.d.ts.map +1 -1
- package/lib/types/client/styles/info.css.d.ts +1 -1
- package/lib/types/client/styles/info.css.d.ts.map +1 -1
- package/lib/types/client/styles/remote-session.css.d.ts +2 -0
- package/lib/types/client/styles/remote-session.css.d.ts.map +1 -0
- package/lib/types/client-data/current-session.d.ts +41 -0
- package/lib/types/client-data/current-session.d.ts.map +1 -0
- package/lib/types/client-data/remote-group-expansion.d.ts +76 -0
- package/lib/types/client-data/remote-group-expansion.d.ts.map +1 -0
- package/lib/types/client-data/remote-status.d.ts +148 -0
- package/lib/types/client-data/remote-status.d.ts.map +1 -0
- package/lib/types/client-data/settings-form.d.ts +774 -0
- package/lib/types/client-data/settings-form.d.ts.map +1 -0
- package/lib/types/client-data/shares.d.ts +211 -0
- package/lib/types/client-data/shares.d.ts.map +1 -0
- package/lib/types/client-pairing.d.ts +114 -0
- package/lib/types/client-pairing.d.ts.map +1 -0
- package/lib/types/client-routes.d.ts +112 -0
- package/lib/types/client-routes.d.ts.map +1 -0
- package/lib/types/config.d.ts +200 -0
- package/lib/types/config.d.ts.map +1 -0
- package/lib/types/fetch-route-intercept.d.ts +156 -0
- package/lib/types/fetch-route-intercept.d.ts.map +1 -0
- package/lib/types/fingerprint.d.ts +164 -0
- package/lib/types/fingerprint.d.ts.map +1 -0
- package/lib/types/http.d.ts +41 -0
- package/lib/types/http.d.ts.map +1 -0
- package/lib/types/index.d.ts +56 -24
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/intercept-shape.d.ts +32 -0
- package/lib/types/intercept-shape.d.ts.map +1 -0
- package/lib/types/intercept.d.ts +432 -0
- package/lib/types/intercept.d.ts.map +1 -0
- package/lib/types/merge-streams.d.ts +393 -0
- package/lib/types/merge-streams.d.ts.map +1 -0
- package/lib/types/relay-access.d.ts +310 -0
- package/lib/types/relay-access.d.ts.map +1 -0
- package/lib/types/relay-client.d.ts +274 -0
- package/lib/types/relay-client.d.ts.map +1 -0
- package/lib/types/relay-filter.d.ts +103 -0
- package/lib/types/relay-filter.d.ts.map +1 -0
- package/lib/types/relay-server.d.ts +208 -0
- package/lib/types/relay-server.d.ts.map +1 -0
- package/lib/types/restart-fields.d.ts +22 -0
- package/lib/types/restart-fields.d.ts.map +1 -0
- package/lib/types/restart-watcher.d.ts +83 -0
- package/lib/types/restart-watcher.d.ts.map +1 -0
- package/lib/types/session-reference.d.ts +66 -0
- package/lib/types/session-reference.d.ts.map +1 -0
- package/lib/types/share-export.d.ts +14 -1
- package/lib/types/share-export.d.ts.map +1 -1
- package/lib/types/share-ops.d.ts +79 -0
- package/lib/types/share-ops.d.ts.map +1 -0
- package/lib/types/share-store.d.ts +87 -0
- package/lib/types/share-store.d.ts.map +1 -0
- package/lib/types/virtual-id.d.ts +38 -0
- package/lib/types/virtual-id.d.ts.map +1 -0
- package/lib/virtual-id.js +52 -0
- package/lib/virtual-id.js.map +1 -0
- package/llms.txt +17 -14
- package/package.json +60 -50
- package/scripts/build-client.mjs +5 -3
- package/scripts/check-host-shadow.mjs +19 -2
- package/scripts/check-settings-form.mjs +933 -0
- package/scripts/check-shares.mjs +397 -0
- package/scripts/check-upload-endpoint.mjs +59 -3
- package/scripts/sync-doc-version.mjs +8 -15
- package/scripts/verify-fingerprint-live.mjs +111 -0
- package/src/activity.ts +218 -0
- package/src/admin-routes.ts +627 -0
- package/src/client/MobileAttachButton.tsx +2 -2
- package/src/client/MobileAttachChips.tsx +3 -3
- package/src/client/MobileDrawerFooter.tsx +7 -4
- package/src/client/MobileHome.tsx +20 -16
- package/src/client/MobileHomeChips.tsx +16 -16
- package/src/client/MobileNavOverlay.tsx +2 -2
- package/src/client/MobileNavToggle.tsx +3 -3
- package/src/client/MobileSessionHeader.tsx +63 -42
- package/src/client/MobileSessionInfo.tsx +118 -17
- package/src/client/RemoteComposerBanner.tsx +76 -0
- package/src/client/RemoteHeaderIcon.tsx +103 -0
- package/src/client/RemoteShareMenu.tsx +57 -0
- package/src/client/RemoteStatusIcon.tsx +91 -0
- package/src/client/compat/desktop.ts +22 -0
- package/src/client/compat/types.ts +62 -0
- package/src/client/current-session-report.ts +164 -0
- package/src/client/effects/header-status.ts +21 -17
- package/src/client/effects/keyboard-guard.ts +65 -1
- package/src/client/effects/permission-sheet.ts +149 -0
- package/src/client/effects/remote-session.ts +68 -0
- package/src/client/effects/turn-fold.ts +52 -0
- package/src/client/index.tsx +151 -36
- package/src/client/locales.ts +396 -2
- package/src/client/remote-fetch.ts +125 -0
- package/src/client/remote-group-expansion.ts +190 -0
- package/src/client/remote-share-css.ts +54 -0
- package/src/client/remote-share-register.ts +244 -0
- package/src/client/remote-status-css.ts +64 -0
- package/src/client/remote-status-register.ts +107 -0
- package/src/client/settings/SettingsSection.tsx +1229 -0
- package/src/client/settings/register-settings.ts +116 -0
- package/src/client/settings/settings-css.ts +236 -0
- package/src/client/share/share-preview.tsx +6 -3
- package/src/client/share/share-sheet.tsx +3 -3
- package/src/client/styles/composer.css.ts +119 -26
- package/src/client/styles/header.css.ts +7 -7
- package/src/client/styles/info.css.ts +74 -0
- package/src/client/styles/remote-session.css.ts +251 -0
- package/src/client-data/current-session.ts +57 -0
- package/src/client-data/remote-group-expansion.ts +145 -0
- package/src/client-data/remote-status.ts +374 -0
- package/src/client-data/settings-form.ts +1371 -0
- package/src/client-data/shares.ts +467 -0
- package/src/client-pairing.ts +244 -0
- package/src/client-routes.ts +732 -0
- package/src/config.ts +447 -0
- package/src/fetch-route-intercept.ts +510 -0
- package/src/fingerprint.ts +408 -0
- package/src/http.ts +68 -0
- package/src/index.ts +719 -62
- package/src/intercept-shape.ts +87 -0
- package/src/intercept.ts +3362 -0
- package/src/merge-streams.ts +1272 -0
- package/src/relay-access.ts +669 -0
- package/src/relay-client.ts +1514 -0
- package/src/relay-filter.ts +291 -0
- package/src/relay-server.ts +2025 -0
- package/src/restart-fields.ts +36 -0
- package/src/restart-watcher.ts +140 -0
- package/src/session-reference.ts +156 -0
- package/src/share-export.ts +26 -1
- package/src/share-ops.ts +114 -0
- package/src/share-store.ts +373 -0
- package/src/virtual-id.ts +59 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-form.d.ts","sourceRoot":"","sources":["../../../src/client-data/settings-form.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session-sharing data for the browser half (T33b + T33b-fix): the
|
|
3
|
+
* shared-session table behind the three entry points (session "…" menu
|
|
4
|
+
* item, title-row remote icon, settings-page shared list).
|
|
5
|
+
* Browser-import-free so scripts/check-shares.mjs drives it directly with a
|
|
6
|
+
* fake fetch:
|
|
7
|
+
*
|
|
8
|
+
* - `parseSharesBody(body, now)` maps the `GET /_dsh/zen-remote/admin/shares`
|
|
9
|
+
* body (T33a: `{ ok, shares:[{ sessionId, sharedAt, lastActivityAt, busy,
|
|
10
|
+
* remainingMs(null=忙碌), viewers, title }] }`) into tolerant view entries,
|
|
11
|
+
* each stamped with the parse time so `describeShare` can let the idle
|
|
12
|
+
* countdown tick between polls;
|
|
13
|
+
* - `describeShare(entry, now, t?)` maps one entry (or the absence of one)
|
|
14
|
+
* to the icon's three states — off / on / watched (a desktop client is
|
|
15
|
+
* viewing) — plus the hover line (idle time left, or the busy copy);
|
|
16
|
+
* - `shareFailText(outcome, action, t)` maps a refused share/unshare to the
|
|
17
|
+
* one-line `window.alert` copy, keyed by the server's error code;
|
|
18
|
+
* - `createSharesStore(fetchImpl, visibility?, pollMs?)` is the subscription
|
|
19
|
+
* store every part shares. The ROLE gates everything (T33b-fix): until
|
|
20
|
+
* the registration wires a role nothing polls and nothing renders; only
|
|
21
|
+
* a host polls. A failed GET — 404 during a plugin reload, a dropped
|
|
22
|
+
* connection, anything — fails exactly its own round: the last table
|
|
23
|
+
* stays on screen and the next tick asks again; no latch, no permanent
|
|
24
|
+
* shutdown. The poll cadence is visibility-shaped: the timer only runs
|
|
25
|
+
* while the page is visible, becoming visible pulls once immediately;
|
|
26
|
+
* - `getSharesStore()` is the page-wide singleton the registered components
|
|
27
|
+
* read, so exactly one poll loop exists no matter how many parts mount.
|
|
28
|
+
*/
|
|
29
|
+
/** Same-origin admin shares route (host half: T33a, src/admin-routes.ts). */
|
|
30
|
+
export declare const ADMIN_SHARES_ROUTE = "/_dsh/zen-remote/admin/shares";
|
|
31
|
+
/** One shared session as the parts render it. `asOf` is the parse time that
|
|
32
|
+
* anchors the local countdown decay (the wire has no such field). */
|
|
33
|
+
export interface ShareEntryView {
|
|
34
|
+
sessionId: string;
|
|
35
|
+
sharedAt: number;
|
|
36
|
+
lastActivityAt: number;
|
|
37
|
+
busy: boolean;
|
|
38
|
+
/** Idle time left at `asOf`; null = busy (not counting down). */
|
|
39
|
+
remainingMs: number | null;
|
|
40
|
+
viewers: number;
|
|
41
|
+
title: string | null;
|
|
42
|
+
/** When this row was parsed off a GET body (Date.now() of the refresh). */
|
|
43
|
+
asOf: number;
|
|
44
|
+
}
|
|
45
|
+
/** Everything the parts read off the store, one frozen object per change. */
|
|
46
|
+
export interface SharesSnapshot {
|
|
47
|
+
/**
|
|
48
|
+
* The deployment role, wired by the registration from the SAME decision
|
|
49
|
+
* the settings page makes (row document first, client-config probe as the
|
|
50
|
+
* fallback — settings-form.ts's settingsRoleOf). `'unknown'` until that
|
|
51
|
+
* wiring answers: nothing polls, the parts render nothing. `'client'`
|
|
52
|
+
* hides the parts and stops the polling; switching back to host resumes.
|
|
53
|
+
*/
|
|
54
|
+
role: 'unknown' | 'host' | 'client';
|
|
55
|
+
/** One GET has answered ok — parts render nothing before this. */
|
|
56
|
+
ready: boolean;
|
|
57
|
+
entries: readonly ShareEntryView[];
|
|
58
|
+
}
|
|
59
|
+
/** The locale keys `describeShare` needs, as its formatter accepts them. */
|
|
60
|
+
export type ShareTextKey = 'shareRemoteStateOff' | 'shareRemoteBusy' | 'shareRemoteRemainingHours' | 'shareRemoteRemainingMinutes';
|
|
61
|
+
/** Minimal shape of the framework `t` seat over the plugin's namespace. */
|
|
62
|
+
export type ShareTextFormatter = (key: ShareTextKey, params?: Record<string, number>) => string;
|
|
63
|
+
/** Default formatter: the plugin's Chinese dictionary (the key-set source of
|
|
64
|
+
* truth). Components pass their real framework `t`, so the default only
|
|
65
|
+
* serves the pure-function callers (check script, non-React reads). */
|
|
66
|
+
export declare function createZhShareFormatter(): ShareTextFormatter;
|
|
67
|
+
/** The icon's three states and the hover line (T33b spec). */
|
|
68
|
+
export interface ShareDescription {
|
|
69
|
+
state: 'off' | 'on' | 'watched';
|
|
70
|
+
remainingText: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Map one entry — or the absence of one — to the remote icon's state and its
|
|
74
|
+
* hover text. The idle countdown decays locally from the entry's `asOf` stamp
|
|
75
|
+
* (a ≤30 s-poll skew beats a frozen number), floors at zero, reads as hours
|
|
76
|
+
* once above the hour and minutes below it, and swaps to the busy copy when
|
|
77
|
+
* the session is not counting down at all. A session with a desktop client
|
|
78
|
+
* watching reads `watched` regardless of the countdown — the countdown stays
|
|
79
|
+
* in the hover text.
|
|
80
|
+
*/
|
|
81
|
+
export declare function describeShare(entry: ShareEntryView | undefined | null, now: number, t?: ShareTextFormatter): ShareDescription;
|
|
82
|
+
/** Parse one GET body tolerantly: a garbage shape is an empty table, a
|
|
83
|
+
* garbage row is dropped — never a throw into the polling loop. */
|
|
84
|
+
export declare function parseSharesBody(body: unknown, now: number): ShareEntryView[];
|
|
85
|
+
/** How one share/unshare/unshare-all POST ended. A refused action carries
|
|
86
|
+
* the server's error `code` when it sent one (`subagent-session`,
|
|
87
|
+
* `no-session`, …) for the alert copy to key on. */
|
|
88
|
+
export type ShareActionOutcome = {
|
|
89
|
+
ok: true;
|
|
90
|
+
} | {
|
|
91
|
+
ok: false;
|
|
92
|
+
code?: string;
|
|
93
|
+
message?: string;
|
|
94
|
+
};
|
|
95
|
+
/** The action verbs the POST route takes (mirror of the server's set). */
|
|
96
|
+
export type ShareAction = 'share' | 'unshare' | 'unshare-all';
|
|
97
|
+
/** The locale keys `shareFailText` needs. */
|
|
98
|
+
export type ShareFailTextKey = 'shareRemoteFailSubagent' | 'shareRemoteFailEmpty' | 'shareRemoteFailGeneric';
|
|
99
|
+
export type ShareFailTextFormatter = (key: ShareFailTextKey) => string;
|
|
100
|
+
/**
|
|
101
|
+
* The one-line `window.alert` copy for a refused action (T33b-fix): the
|
|
102
|
+
* share-specific server codes map to their reasons, everything else —
|
|
103
|
+
* including every unshare failure — reads as the generic retry line.
|
|
104
|
+
*/
|
|
105
|
+
export declare function shareFailText(outcome: {
|
|
106
|
+
ok: boolean;
|
|
107
|
+
code?: string;
|
|
108
|
+
}, action: ShareAction, t: ShareFailTextFormatter): string;
|
|
109
|
+
/** The keys the info-card row reads: the icon's words, the one new state
|
|
110
|
+
* word (the icon only ever colored the on state, it never had copy for it),
|
|
111
|
+
* and the settings list's viewers line (reused verbatim). The component's
|
|
112
|
+
* real `t` seat carries the whole dictionary, so it assigns cleanly; the
|
|
113
|
+
* check/test doubles just answer these keys. */
|
|
114
|
+
export type ShareCardFormatterKey = ShareTextKey | 'shareRemoteStateOn' | 'settings.shareViewers';
|
|
115
|
+
export type ShareCardFormatter = (key: ShareCardFormatterKey, params?: Record<string, unknown>) => string;
|
|
116
|
+
/** What the info-card「远程访问」row renders (T67). */
|
|
117
|
+
export interface ShareCardRemoteView {
|
|
118
|
+
/** Host role + an answered table + not a subagent session — the exact
|
|
119
|
+
* gate the title-row icon and the menu item use. */
|
|
120
|
+
visible: boolean;
|
|
121
|
+
/** Whether the switch reads on (the session is in the table). */
|
|
122
|
+
shared: boolean;
|
|
123
|
+
/** The description line under the label: state word, then (when on) the
|
|
124
|
+
* watchers count if any, then the idle countdown / busy copy verbatim
|
|
125
|
+
* from {@link describeShare}. */
|
|
126
|
+
line: string;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Derive the info-card「远程访问」row from the shares snapshot (T67). The
|
|
130
|
+
* visibility gate is the shared one; the description reuses the icon's
|
|
131
|
+
* words (`shareRemoteStateOn` is the one new state word — the icon only
|
|
132
|
+
* ever colored that state, it never had copy for it).
|
|
133
|
+
*/
|
|
134
|
+
export declare function shareCardRemoteView(args: {
|
|
135
|
+
ready: boolean;
|
|
136
|
+
role: SharesSnapshot['role'];
|
|
137
|
+
subagent: boolean;
|
|
138
|
+
entry: ShareEntryView | undefined;
|
|
139
|
+
now: number;
|
|
140
|
+
t: ShareCardFormatter;
|
|
141
|
+
}): ShareCardRemoteView;
|
|
142
|
+
/** Whether the page is currently visible, plus change notifications — the
|
|
143
|
+
* seam that keeps the poll cadence visibility-shaped while staying
|
|
144
|
+
* testable (the check script injects a controllable source). */
|
|
145
|
+
export interface VisibilitySource {
|
|
146
|
+
visible(): boolean;
|
|
147
|
+
subscribe(listener: () => void): () => void;
|
|
148
|
+
}
|
|
149
|
+
/** The real source: `visibilitychange` off `document` (Node: always visible,
|
|
150
|
+
* never notifying). */
|
|
151
|
+
export declare const documentVisibility: VisibilitySource;
|
|
152
|
+
/** The store face the three T33b parts share. */
|
|
153
|
+
export interface SharesStore {
|
|
154
|
+
/** The current snapshot — a stable frozen reference until the next change. */
|
|
155
|
+
getSnapshot(): SharesSnapshot;
|
|
156
|
+
/** Observe snapshot replacements; polling runs while at least one
|
|
157
|
+
* listener is attached AND the wired role is host AND the page is
|
|
158
|
+
* visible. */
|
|
159
|
+
subscribe(listener: () => void): () => void;
|
|
160
|
+
/** Wire the deployment role (settings-form.ts's settingsRoleOf verdict,
|
|
161
|
+
* re-applied on every configForms snapshot update). Flipping back to host
|
|
162
|
+
* resumes polling with an immediate pull; flipping to client stops it. */
|
|
163
|
+
setRole(role: 'host' | 'client'): void;
|
|
164
|
+
/** GET now (latest-wins). @returns whether an ok body landed. */
|
|
165
|
+
refresh(): Promise<boolean>;
|
|
166
|
+
/** POST share, then refresh immediately. @returns the action's outcome. */
|
|
167
|
+
share(sessionId: string): Promise<ShareActionOutcome>;
|
|
168
|
+
/** POST unshare for one session, then refresh. @returns the outcome. */
|
|
169
|
+
unshare(sessionId: string): Promise<ShareActionOutcome>;
|
|
170
|
+
/** POST unshare-all, then refresh. @returns the outcome. */
|
|
171
|
+
unshareAll(): Promise<ShareActionOutcome>;
|
|
172
|
+
}
|
|
173
|
+
/** Poll cadence while the page is visible, the role is host, and at least
|
|
174
|
+
* one part is mounted. */
|
|
175
|
+
export declare const SHARES_POLL_MS = 30000;
|
|
176
|
+
/**
|
|
177
|
+
* Build one store over an injectable fetch and visibility source. The GET is
|
|
178
|
+
* latest-wins (T16's gate): an earlier request answering late never
|
|
179
|
+
* overwrites a newer table. Every GET failure fails its own round only —
|
|
180
|
+
* the last ready table stays up and the next tick retries (a plugin reload
|
|
181
|
+
* serving a few 404s must not blind the page until reload). The timer is
|
|
182
|
+
* real while visible and gone while hidden; becoming visible pulls once
|
|
183
|
+
* immediately. `pollMs` exists for the check script: the shipped cadence is
|
|
184
|
+
* far too slow for a test to observe, so tests run a few cycles at 5 ms.
|
|
185
|
+
*/
|
|
186
|
+
export declare function createSharesStore(fetchImpl: typeof fetch, visibility?: VisibilitySource, pollMs?: number): SharesStore;
|
|
187
|
+
/** The page-wide store every registered part reads — one poll loop no
|
|
188
|
+
* matter how many of the menu items, the header icon and the settings
|
|
189
|
+
* list are mounted at once. Created lazily over the real fetch, so the
|
|
190
|
+
* check script never constructs it. */
|
|
191
|
+
export declare function getSharesStore(): SharesStore;
|
|
192
|
+
/**
|
|
193
|
+
* The subscribe face the title-row icon hands `useSyncExternalStore`: on
|
|
194
|
+
* the phone shell (a non-desktop-shell viewport at or under 767px) the
|
|
195
|
+
* mobile stylesheet blanket-hides every `conversation.session.header.actions`
|
|
196
|
+
* entry (styles/header.css.ts), so the icon would never be seen — it does
|
|
197
|
+
* not subscribe either, and a subscription that never opens never polls.
|
|
198
|
+
* Pure over (store, phoneShell) so the desktop-gate test drives it with a
|
|
199
|
+
* counting fake fetch.
|
|
200
|
+
*/
|
|
201
|
+
export declare function subscribeIfNotPhoneShell(store: SharesStore, phoneShell: boolean, listener: () => void): () => void;
|
|
202
|
+
/**
|
|
203
|
+
* The subscribe face the info-card row (T67) hands `useSyncExternalStore`:
|
|
204
|
+
* the shares table is subscribed ONLY while the sheet is open — a
|
|
205
|
+
* subscription is what keeps the 30 s admin/shares poll alive, and the
|
|
206
|
+
* phone shell must not keep that polling through the gateway. Pure over
|
|
207
|
+
* (store, open) so behavior tests drive it with a counting fake fetch;
|
|
208
|
+
* closing the sheet returns the no-op unsubscribes and the poll stops.
|
|
209
|
+
*/
|
|
210
|
+
export declare function subscribeWhileOpen(store: SharesStore, open: boolean, listener: () => void): () => void;
|
|
211
|
+
//# sourceMappingURL=shares.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shares.d.ts","sourceRoot":"","sources":["../../../src/client-data/shares.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure pairing/probe logic for the sub-client half (T16): the address
|
|
3
|
+
* normalizer the claim route validates user input with, and the two
|
|
4
|
+
* classifiers that turn one HTTP round-trip each into a shape the settings
|
|
5
|
+
* block can render. No I/O, no clocks, no process reads — the route module
|
|
6
|
+
* owns the sockets and the timeouts, this module owns the decisions.
|
|
7
|
+
*
|
|
8
|
+
* IPv4/IPv6 range checks are hand-rolled because the address arrives as a
|
|
9
|
+
* STRING inside an already-parsed URL and the point is to keep the private-
|
|
10
|
+
* network allowance of `normalizeServerUrl` exactly as narrow as specified
|
|
11
|
+
* (172.16/12, 100.64/10 etc. — off-by-one range bugs here would either lock
|
|
12
|
+
* LAN users out or open plain-http pairing to the public internet).
|
|
13
|
+
*/
|
|
14
|
+
/** The gateway claim endpoint, resolved against the normalized server URL. */
|
|
15
|
+
export declare const CLAIM_PATH = "/lan-gate/pair/claim-desktop";
|
|
16
|
+
/** The relay ping path the client backend probes (the gateway admits this
|
|
17
|
+
* prefix for desktop-client devices and forwards to the host relay route). */
|
|
18
|
+
export declare const RELAY_PING_PATH = "/_dsh/zen-remote/relay/ping";
|
|
19
|
+
/** Why an address did not normalize: unparseable / wrong shape, or a plain
|
|
20
|
+
* `http:` URL whose host is not one of the private-network allowances. */
|
|
21
|
+
export type NormalizeFailure = 'invalid' | 'insecure-http';
|
|
22
|
+
export type NormalizeResult = {
|
|
23
|
+
ok: true;
|
|
24
|
+
url: string;
|
|
25
|
+
} | {
|
|
26
|
+
ok: false;
|
|
27
|
+
reason: NormalizeFailure;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Normalize one user-typed server address to the exact string the client
|
|
31
|
+
* stores and probes: surrounding whitespace and trailing slashes gone, no
|
|
32
|
+
* path (beyond `/`), no query, no fragment, no embedded credentials, and a
|
|
33
|
+
* scheme of `http:` (private hosts only) or `https:` (always).
|
|
34
|
+
*/
|
|
35
|
+
export declare function normalizeServerUrl(input: string): NormalizeResult;
|
|
36
|
+
/**
|
|
37
|
+
* The volatile row field's current server address, read through the loader's
|
|
38
|
+
* `{ get() }` wrapper and normalized exactly like the claim route validates
|
|
39
|
+
* user input. undefined when the field is unset or no longer legal: a
|
|
40
|
+
* hand-edited row must never have the pairing token sent to an address the
|
|
41
|
+
* claim route would have refused. Used by the relay client's address getter
|
|
42
|
+
* in src/index.ts; the status route reads the row itself because it needs
|
|
43
|
+
* the unset / invalid distinction its own two states answer with.
|
|
44
|
+
*/
|
|
45
|
+
export declare function normalizedRowServerUrl(row: unknown): string | undefined;
|
|
46
|
+
/** The gateway claim reply, exactly as lib/lan-gate-server.cjs answers
|
|
47
|
+
* `/lan-gate/pair/claim-desktop` for a desktop client. */
|
|
48
|
+
export interface ClaimSuccessBody {
|
|
49
|
+
ok: true;
|
|
50
|
+
id?: unknown;
|
|
51
|
+
name?: unknown;
|
|
52
|
+
token?: unknown;
|
|
53
|
+
}
|
|
54
|
+
/** What the claim route forwards to the browser (and what it maps every
|
|
55
|
+
* gateway refusal to). `message` rides through for role-mismatch — the
|
|
56
|
+
* gateway's copy is localized server-side and meant to be shown as-is. */
|
|
57
|
+
export type ClaimOutcome = {
|
|
58
|
+
ok: true;
|
|
59
|
+
token: string;
|
|
60
|
+
deviceId: string;
|
|
61
|
+
deviceName: string;
|
|
62
|
+
} | {
|
|
63
|
+
ok: false;
|
|
64
|
+
code: 'role-mismatch';
|
|
65
|
+
message?: string;
|
|
66
|
+
} | {
|
|
67
|
+
ok: false;
|
|
68
|
+
code: 'bad-code';
|
|
69
|
+
} | {
|
|
70
|
+
ok: false;
|
|
71
|
+
code: 'locked';
|
|
72
|
+
retryAfterMs: number;
|
|
73
|
+
} | {
|
|
74
|
+
ok: false;
|
|
75
|
+
code: 'unexpected';
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Classify one claim round-trip. `body` may be anything the server returned
|
|
79
|
+
* (including unparsable garbage — the route passes `undefined` then): only
|
|
80
|
+
* the exact happy shape counts as success, everything else lands in the four
|
|
81
|
+
* refusal buckets the settings block has copy for.
|
|
82
|
+
*/
|
|
83
|
+
export declare function classifyClaimResponse(status: number, body: unknown): ClaimOutcome;
|
|
84
|
+
/** One probe round-trip handed to {@link classifyProbe}: either the transport
|
|
85
|
+
* failed before any HTTP answer existed (refused, reset, timeout) or a
|
|
86
|
+
* response arrived with its status and best-effort parsed body. */
|
|
87
|
+
export type ProbeResult = {
|
|
88
|
+
kind: 'error';
|
|
89
|
+
} | {
|
|
90
|
+
kind: 'response';
|
|
91
|
+
status: number;
|
|
92
|
+
body: unknown;
|
|
93
|
+
};
|
|
94
|
+
/** The connection states the settings block renders. */
|
|
95
|
+
export type ProbeState = 'unreachable' | 'revoked' | 'unexpected' | 'connected';
|
|
96
|
+
/**
|
|
97
|
+
* Classify one probe of `<serverUrl>${RELAY_PING_PATH}`:
|
|
98
|
+
*
|
|
99
|
+
* - no HTTP answer at all → `unreachable` (down, wrong address, timeout);
|
|
100
|
+
* - 401 with the relay route's own `relay-unauthorized` error → `unexpected`
|
|
101
|
+
* (T23a-fix): the gateway ACCEPTED the token but the server's internal
|
|
102
|
+
* secret disagrees — a server-side fault that must not unpair a valid
|
|
103
|
+
* device; only the gateway's own pairing wall (`reason: 'unpaired'`) is
|
|
104
|
+
* a dead token;
|
|
105
|
+
* - any other 401 → `revoked` — the gateway treats an invalid or revoked
|
|
106
|
+
* desktop-client token as unpaired and answers its 401 wall;
|
|
107
|
+
* - 403 with `reason: 'relay-only'` → `unexpected`: the token was ACCEPTED
|
|
108
|
+
* but the server refuses the relay prefix — only possible when the server
|
|
109
|
+
* is not running the 2.0.0 gateway;
|
|
110
|
+
* - any other status (200 ping ok, 404 from a pre-relay server, even 3xx)
|
|
111
|
+
* means the gateway accepted the token → `connected`.
|
|
112
|
+
*/
|
|
113
|
+
export declare function classifyProbe(result: ProbeResult): ProbeState;
|
|
114
|
+
//# sourceMappingURL=client-pairing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-pairing.d.ts","sourceRoot":"","sources":["../../src/client-pairing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,8EAA8E;AAC9E,eAAO,MAAM,UAAU,iCAAiC,CAAA;AAExD;8EAC8E;AAC9E,eAAO,MAAM,eAAe,gCAAgC,CAAA;AAE5D;0EAC0E;AAC1E,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,eAAe,CAAA;AAE1D,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAAA;AAqE3C;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAejE;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOvE;AAED;0DAC0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,IAAI,CAAA;IACR,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;0EAE0E;AAC1E,MAAM,MAAM,YAAY,GACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC/B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,CAAA;AAOrC;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,YAAY,CA0BjF;AAED;;mEAEmE;AACnE,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAA;AAEvD,wDAAwD;AACxD,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,CAAA;AAE/E;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAmB7D"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sub-client backend routes (T16): pairing claim and connection status for a
|
|
3
|
+
* DSH process running `role: 'client'` — this machine's settings page is the
|
|
4
|
+
* ONLY browser surface that talks to them, same-origin like the host's admin
|
|
5
|
+
* routes (T14). The claim route forwards the pairing code to the SERVER's
|
|
6
|
+
* gateway (`<serverUrl>/lan-gate/pair/claim-desktop`) and hands the returned
|
|
7
|
+
* token straight back to the browser, which writes it into the row's
|
|
8
|
+
* `deviceToken` secret field; this process itself never persists or logs the
|
|
9
|
+
* token — it only ever puts it into an Authorization header for the status
|
|
10
|
+
* probe. The status route reads `serverUrl` / `deviceToken` from the plugin
|
|
11
|
+
* ROW PER REQUEST (both are volatile `{ get() }`-wrapped fields, so the row
|
|
12
|
+
* object `apply()` received is the only live source) and probes the server's
|
|
13
|
+
* relay ping, reporting one of the five connection states.
|
|
14
|
+
*
|
|
15
|
+
* Same walls as the admin routes, in the same order: `admit` first (webServer
|
|
16
|
+
* routes skip DSH's /api authentication), then for the POST also the
|
|
17
|
+
* same-origin gate and a 16 KiB JSON-object body cap. Built by a factory so
|
|
18
|
+
* the tests drive it over a real socket with a mock server gateway.
|
|
19
|
+
*
|
|
20
|
+
* T41b adds the plain-HTTP relay under `client/http/<route>`: the GETs the
|
|
21
|
+
* browser fetch wrapper intercepted (`/api/changes.summary` / `changes.diff`
|
|
22
|
+
* naming a virtual session id) are re-issued here through the relay client's
|
|
23
|
+
* `http()` with the original id restored, and the upstream status,
|
|
24
|
+
* content type and body travel back verbatim.
|
|
25
|
+
*/
|
|
26
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
27
|
+
import type { AdminAdmission } from './admin-routes.js';
|
|
28
|
+
import type { FetchRouteInterceptDiagnostics } from './fetch-route-intercept.js';
|
|
29
|
+
import type { CurrentSessionRead, InterceptDiagnostics } from './intercept.js';
|
|
30
|
+
import type { RelayClient } from './relay-client.js';
|
|
31
|
+
/** Prefix all client routes live under (one webServer prefix registration). */
|
|
32
|
+
export declare const CLIENT_ROUTE_PREFIX = "/_dsh/zen-remote/client";
|
|
33
|
+
/** POST `{serverUrl, code, name}`: redeem a desktop pairing code. */
|
|
34
|
+
export declare const CLIENT_CLAIM_ROUTE = "/_dsh/zen-remote/client/claim";
|
|
35
|
+
/** GET: the current connection state (never carries the token). */
|
|
36
|
+
export declare const CLIENT_STATUS_ROUTE = "/_dsh/zen-remote/client/status";
|
|
37
|
+
/** POST: one immediate reconnect attempt (T43, the settings page's 立即重连);
|
|
38
|
+
* answered 409 unless the relay client is currently `offline`. */
|
|
39
|
+
export declare const CLIENT_RECONNECT_ROUTE = "/_dsh/zen-remote/client/reconnect";
|
|
40
|
+
/** GET: the remote-session status the T34 client parts render from (T34) —
|
|
41
|
+
* the relay's serving state, the interface-compatibility verdict, the
|
|
42
|
+
* handshake's server name, and the closed-session map. The prefix is
|
|
43
|
+
* registered on BOTH roles (T34-fix): a host — no relay client wired —
|
|
44
|
+
* answers the empty `{state:'unpaired', versionMismatch:false, serverName:'',
|
|
45
|
+
* closed:{}}` conclusion. It carries no token and no server address. */
|
|
46
|
+
export declare const CLIENT_REMOTE_STATUS_ROUTE = "/_dsh/zen-remote/client/remote-status";
|
|
47
|
+
/** POST `{sessionId: <虚拟 id>}`: close one remote session from THIS machine
|
|
48
|
+
* (T34) — the backend forwards the ORIGINAL id through the relay's
|
|
49
|
+
* `POST relay/v1/unshare`, so the server closes it with reason `'client'`. */
|
|
50
|
+
export declare const CLIENT_UNSHARE_ROUTE = "/_dsh/zen-remote/client/unshare";
|
|
51
|
+
/** POST `{sessionId: string | null}`: the browser's report of which session
|
|
52
|
+
* the host UI currently has open (T62) — the intercept layer runs in this
|
|
53
|
+
* backend process and cannot read the browser's localStorage itself. `null`
|
|
54
|
+
* means a readable signal says nothing is open; the sink stores the value
|
|
55
|
+
* and re-judges the mergers immediately. */
|
|
56
|
+
export declare const CLIENT_CURRENT_SESSION_ROUTE = "/_dsh/zen-remote/client/current-session";
|
|
57
|
+
/** Prefix of the plain-HTTP relay routes (T41b):
|
|
58
|
+
* `GET ${CLIENT_HTTP_ROUTE_PREFIX}<route>?<query>` relays one intercepted
|
|
59
|
+
* `/api/<route>` call (the fetch wrapper's rewrites land here) to the
|
|
60
|
+
* server, with the virtual session id swapped back to the original. */
|
|
61
|
+
export declare const CLIENT_HTTP_ROUTE_PREFIX = "/_dsh/zen-remote/client/http/";
|
|
62
|
+
/** The fetch face this module needs; injectable for tests. */
|
|
63
|
+
export type FetchLike = (url: string | URL, init?: RequestInit) => Promise<Response>;
|
|
64
|
+
export interface ClientHandlerOptions {
|
|
65
|
+
/** The connection service's admit, injected by apply(); tests fake it. */
|
|
66
|
+
admit: (req: IncomingMessage) => AdminAdmission;
|
|
67
|
+
/** The plugin ROW as apply() received it — `serverUrl` / `deviceToken` are
|
|
68
|
+
* volatile, so they must be read through this at request time, never
|
|
69
|
+
* snapshotted at registration. */
|
|
70
|
+
getRowConfig: () => unknown;
|
|
71
|
+
/** Outbound fetch, defaulting to the global one. */
|
|
72
|
+
fetchImpl?: FetchLike;
|
|
73
|
+
/** The live relay client (T23a), once apply() built one. When it has LEFT
|
|
74
|
+
* its initial `unpaired` state — a connection attempt ran — the status
|
|
75
|
+
* route reports ITS verdict (state + handshake server name) and skips the
|
|
76
|
+
* ping probe; the probe below stays as the fallback for a client that
|
|
77
|
+
* never connected, so the settings page still gets a fresh answer while
|
|
78
|
+
* the startup `connect()` is still unpaired. */
|
|
79
|
+
getRelayClient?: () => RelayClient | undefined;
|
|
80
|
+
/** The typert interception's diagnostics (T23b-1), read live per request.
|
|
81
|
+
* Shapes, counters and failure codes only — never a token. Undefined when
|
|
82
|
+
* this composition never even attempted an install (no typertGateway). */
|
|
83
|
+
getIntercept?: () => InterceptDiagnostics | undefined;
|
|
84
|
+
/** The exact-fetch-route interception's diagnostics (T51), read live per
|
|
85
|
+
* request: the local upload route's remote-forwarding install state and
|
|
86
|
+
* its refusal counters. Undefined when this composition never attempted
|
|
87
|
+
* one (no connection service, or no fileUploads service to inject). */
|
|
88
|
+
getFetchRouteIntercept?: () => FetchRouteInterceptDiagnostics | undefined;
|
|
89
|
+
/** Serve ONLY the remote-status route (T41a-fix2, the host role's mount):
|
|
90
|
+
* every other route under the prefix answers the same 404 an unknown path
|
|
91
|
+
* would. The claim / status / reconnect / unshare routes exist for a
|
|
92
|
+
* CLIENT — a host carries no relay client and no pairing surface, so
|
|
93
|
+
* answering them (even with their empty conclusions) is exposure without
|
|
94
|
+
* a user. The remote-status route stays: the T34 client parts poll it on
|
|
95
|
+
* whatever role this process runs. */
|
|
96
|
+
remoteStatusOnly?: boolean;
|
|
97
|
+
/** T62: the sink for the browser's current-session reports — stores the
|
|
98
|
+
* latest value (memory, last write wins across windows) and makes the
|
|
99
|
+
* intercept re-judge at once. Wired only on the CLIENT mount; the HOST
|
|
100
|
+
* mount's remoteStatusOnly wall 404s the route before this matters, and
|
|
101
|
+
* a client handler WITHOUT the sink answers the same 404 (no sink, no
|
|
102
|
+
* route). */
|
|
103
|
+
onCurrentSession?: (read: CurrentSessionRead) => void;
|
|
104
|
+
}
|
|
105
|
+
export type ClientHandler = (req: IncomingMessage, res: ServerResponse) => Promise<void>;
|
|
106
|
+
/**
|
|
107
|
+
* Build the client route handler for one plugin row. The returned handler
|
|
108
|
+
* owns the full response lifecycle of every request under
|
|
109
|
+
* {@link CLIENT_ROUTE_PREFIX} and never throws.
|
|
110
|
+
*/
|
|
111
|
+
export declare function createClientHandler(options: ClientHandlerOptions): ClientHandler;
|
|
112
|
+
//# sourceMappingURL=client-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-routes.d.ts","sourceRoot":"","sources":["../../src/client-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAIvD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAA;AAChF,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAI9E,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAA;AAGrE,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,4BAA4B,CAAA;AAE5D,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,kCAAiC,CAAA;AAEhE,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,mCAAkC,CAAA;AAElE;kEACkE;AAClE,eAAO,MAAM,sBAAsB,sCAAqC,CAAA;AAExE;;;;;wEAKwE;AACxE,eAAO,MAAM,0BAA0B,0CAAyC,CAAA;AAEhF;;8EAE8E;AAC9E,eAAO,MAAM,oBAAoB,oCAAmC,CAAA;AAEpE;;;;4CAI4C;AAC5C,eAAO,MAAM,4BAA4B,4CAA2C,CAAA;AAOpF;;;uEAGuE;AACvE,eAAO,MAAM,wBAAwB,kCAAiC,CAAA;AAWtE,8DAA8D;AAC9D,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAEpF,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,KAAK,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,cAAc,CAAA;IAC/C;;sCAEkC;IAClC,YAAY,EAAE,MAAM,OAAO,CAAA;IAC3B,oDAAoD;IACpD,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB;;;;;oDAKgD;IAChD,cAAc,CAAC,EAAE,MAAM,WAAW,GAAG,SAAS,CAAA;IAC9C;;8EAE0E;IAC1E,YAAY,CAAC,EAAE,MAAM,oBAAoB,GAAG,SAAS,CAAA;IACrD;;;2EAGuE;IACvE,sBAAsB,CAAC,EAAE,MAAM,8BAA8B,GAAG,SAAS,CAAA;IACzE;;;;;;0CAMsC;IACtC,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;;iBAKa;IACb,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAA;CACtD;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AA8NxF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA+WhF"}
|