dsh-messager 0.3.5 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.en.md +5 -4
  2. package/README.md +5 -4
  3. package/lib/channels/dingtalk.d.ts +3 -5
  4. package/lib/channels/dingtalk.d.ts.map +1 -1
  5. package/lib/channels/dingtalk.js +3 -6
  6. package/lib/channels/dingtalk.js.map +1 -1
  7. package/lib/channels/discord.d.ts +2 -3
  8. package/lib/channels/discord.d.ts.map +1 -1
  9. package/lib/channels/discord.js +2 -3
  10. package/lib/channels/discord.js.map +1 -1
  11. package/lib/channels/feishu.d.ts +3 -14
  12. package/lib/channels/feishu.d.ts.map +1 -1
  13. package/lib/channels/feishu.js +6 -15
  14. package/lib/channels/feishu.js.map +1 -1
  15. package/lib/channels/telegram.d.ts.map +1 -1
  16. package/lib/channels/telegram.js +0 -1
  17. package/lib/channels/telegram.js.map +1 -1
  18. package/lib/channels/wecom.d.ts +1 -1
  19. package/lib/channels/wecom.d.ts.map +1 -1
  20. package/lib/channels/wecom.js +1 -2
  21. package/lib/channels/wecom.js.map +1 -1
  22. package/lib/client.js +188 -35
  23. package/lib/client.js.map +1 -1
  24. package/lib/config-route.d.ts +18 -7
  25. package/lib/config-route.d.ts.map +1 -1
  26. package/lib/config-route.js +59 -16
  27. package/lib/config-route.js.map +1 -1
  28. package/lib/config-shared.d.ts +1 -1
  29. package/lib/config-shared.d.ts.map +1 -1
  30. package/lib/config-shared.js +1 -1
  31. package/lib/config-shared.js.map +1 -1
  32. package/lib/config.d.ts +0 -6
  33. package/lib/config.d.ts.map +1 -1
  34. package/lib/config.js +0 -1
  35. package/lib/config.js.map +1 -1
  36. package/lib/environment.d.ts +68 -0
  37. package/lib/environment.d.ts.map +1 -0
  38. package/lib/environment.js +87 -0
  39. package/lib/environment.js.map +1 -0
  40. package/lib/index.d.ts.map +1 -1
  41. package/lib/index.js +69 -14
  42. package/lib/index.js.map +1 -1
  43. package/lib/templates.d.ts +1 -3
  44. package/lib/templates.d.ts.map +1 -1
  45. package/lib/templates.js +1 -3
  46. package/lib/templates.js.map +1 -1
  47. package/lib/types/client/card-controller.d.ts +51 -1
  48. package/lib/types/client/card-controller.d.ts.map +1 -1
  49. package/lib/types/client/desktop.d.ts +30 -0
  50. package/lib/types/client/desktop.d.ts.map +1 -0
  51. package/lib/types/client/diff.d.ts +20 -2
  52. package/lib/types/client/diff.d.ts.map +1 -1
  53. package/lib/types/client/index.d.ts.map +1 -1
  54. package/lib/types/client/locales.d.ts +10 -2
  55. package/lib/types/client/locales.d.ts.map +1 -1
  56. package/lib/types/client/section.d.ts.map +1 -1
  57. package/lib/types/client/settings-form.d.ts +8 -1
  58. package/lib/types/client/settings-form.d.ts.map +1 -1
  59. package/lib/types/config-shared.d.ts +1 -1
  60. package/lib/types/config-shared.d.ts.map +1 -1
  61. package/lib/types/config.d.ts +0 -6
  62. package/lib/types/config.d.ts.map +1 -1
  63. package/package.json +1 -1
@@ -8,8 +8,10 @@
8
8
  * 经 ctx.settings.mutate 落库(host 侧不受 Web 白名单限制),
9
9
  * 写后 settings 服务自动广播 settings/document-updated(全环境转发事件)。
10
10
  *
11
- * 安全:POST 要求同源(Origin/Referer 与 Host 匹配);响应不带 CORS 头,
12
- * 跨站 JS 无法读取;GET 只读无副作用。
11
+ * 安全:访问守卫由调用方注入 —— 宿主连接服务可用时走**官方鉴权正门**
12
+ * (`ctx.connection.requestRejection`,与宿主 `/api` 同一套 cookie 判定,本机裸进程得 401),
13
+ * 服务缺席时退回来源校验(只防浏览器跨站)。响应不带 CORS 头,跨站 JS 无法读取;
14
+ * GET 只读无副作用。
13
15
  * 密钥:describe({ redactSecrets: true }) 自动脱敏,写入方向与设置页一致。
14
16
  */
15
17
  import type { IncomingMessage } from 'node:http';
@@ -45,14 +47,23 @@ export interface WebServerLike {
45
47
  register(route: WebRoute): () => void;
46
48
  }
47
49
  /** 把 settings 描述符映射为 client 视图;命名空间缺失 → unavailable。 */
48
- export declare function configViewOf(settings: SettingsServiceLike, namespace?: string): ConfigView;
50
+ export declare function configViewOf(settings: SettingsServiceLike, namespace?: string, effective?: (value: unknown, user: unknown) => unknown): ConfigView;
49
51
  /** 校验并规范化写请求体;非法 → undefined。 */
50
52
  export declare function parseConfigWriteBody(raw: unknown): ConfigWriteBody | undefined;
51
53
  /**
52
- * 同源校验:Origin/Referer 存在时必须与请求 Host 匹配。
53
- * POST 无来源头一律拒绝(纵深防御;跨站表单/fetch 都会被 CORS 挡在读之外)。
54
+ * 同源校验:只在请求**真的带了浏览器来源头**时,判断该来源是否可信。
55
+ *
56
+ * 判定规则:
57
+ * - 来源是桌面版窗口的 `dsh-app:` 协议 → 放行(DSH Desktop 把窗口请求转发给宿主时
58
+ * **删掉 Origin、保留 Referer**,页面来源与请求 Host 必然不同,不放行则桌面版必 403);
59
+ * - 来源与请求 Host 匹配 → 放行;
60
+ * - 完全不带来源头 → 放行(宿主进程内部调用、本机脚本)。这类请求伪造任何头都轻而易举,
61
+ * 拒绝它并不构成安全边界;要防本机任意进程读取,需要的是鉴权而不是来源头。
62
+ * - 其它来源 → 拒绝(浏览器跨站请求**一定**带 Origin/Referer,CSRF 由此挡住)。
54
63
  */
55
- export declare function sameOrigin(request: IncomingMessage, requireOrigin: boolean): boolean;
64
+ export declare function sameOrigin(request: IncomingMessage): boolean;
65
+ /** 路由访问守卫:返回 401/403 表示拒绝,undefined 表示放行。 */
66
+ export type RouteGuard = (request: IncomingMessage) => 401 | 403 | undefined;
56
67
  /**
57
68
  * 挂载配置路由(webServer 服务可用时调用)。
58
69
  * @param webServer - webServer 服务(窄接口)。
@@ -60,5 +71,5 @@ export declare function sameOrigin(request: IncomingMessage, requireOrigin: bool
60
71
  * @param namespace - 本插件在 profile 中的条目 id(settings 命名空间)。
61
72
  * @returns 卸载函数。
62
73
  */
63
- export declare function mountConfigRoutes(webServer: WebServerLike, settings: SettingsServiceLike, namespace?: string): () => void;
74
+ export declare function mountConfigRoutes(webServer: WebServerLike, settings: SettingsServiceLike, namespace?: string, guard?: RouteGuard, effective?: (value: unknown, user: unknown) => unknown): () => void;
64
75
  //# sourceMappingURL=config-route.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-route.d.ts","sourceRoot":"","sources":["../src/config-route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,WAAW,CAAA;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGrE;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,aAAoB,CAAA;AAEjD,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAErE,oCAAoC;AACpC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,aAAa,CAAC;QAC7D,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,EAAE,OAAO,CAAA;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,IAAI,CAAC,EAAE,OAAO,CAAA;KACf,CAAC,CAAA;IACF,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,cAAc,EAAE,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7F;AAED,gCAAgC;AAChC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,IAAI,CAAA;CACtC;AAID,wDAAwD;AACxD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,GAAE,MAAyB,GACnC,UAAU,CAcZ;AAED,iCAAiC;AACjC,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,CAwB9E;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,GAAG,OAAO,CAWpF;AAkED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,GAAE,MAAyB,GACnC,MAAM,IAAI,CAsBZ"}
1
+ {"version":3,"file":"config-route.d.ts","sourceRoot":"","sources":["../src/config-route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,WAAW,CAAA;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGrE;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,aAAoB,CAAA;AAEjD,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAErE,oCAAoC;AACpC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,aAAa,CAAC;QAC7D,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,EAAE,OAAO,CAAA;QACd,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,IAAI,CAAC,EAAE,OAAO,CAAA;KACf,CAAC,CAAA;IACF,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,cAAc,EAAE,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7F;AAED,gCAAgC;AAChC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,IAAI,CAAA;CACtC;AAID,wDAAwD;AACxD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,GAAE,MAAyB,EACpC,SAAS,GAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,KAAK,OAAwB,GACrE,UAAU,CAgBZ;AAED,iCAAiC;AACjC,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,CAwB9E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAY5D;AAED,6CAA6C;AAC7C,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,GAAG,GAAG,GAAG,GAAG,SAAS,CAAA;AAiG5E;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,GAAE,MAAyB,EACpC,KAAK,GAAE,UAA0B,EACjC,SAAS,GAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,KAAK,OAAwB,GACrE,MAAM,IAAI,CA6BZ"}
@@ -8,8 +8,10 @@
8
8
  * 经 ctx.settings.mutate 落库(host 侧不受 Web 白名单限制),
9
9
  * 写后 settings 服务自动广播 settings/document-updated(全环境转发事件)。
10
10
  *
11
- * 安全:POST 要求同源(Origin/Referer 与 Host 匹配);响应不带 CORS 头,
12
- * 跨站 JS 无法读取;GET 只读无副作用。
11
+ * 安全:访问守卫由调用方注入 —— 宿主连接服务可用时走**官方鉴权正门**
12
+ * (`ctx.connection.requestRejection`,与宿主 `/api` 同一套 cookie 判定,本机裸进程得 401),
13
+ * 服务缺席时退回来源校验(只防浏览器跨站)。响应不带 CORS 头,跨站 JS 无法读取;
14
+ * GET 只读无副作用。
13
15
  * 密钥:describe({ redactSecrets: true }) 自动脱敏,写入方向与设置页一致。
14
16
  */
15
17
  import { FALLBACK_ENTRY_ID } from './settings.js';
@@ -24,14 +26,16 @@ import { FALLBACK_ENTRY_ID } from './settings.js';
24
26
  export const CONFIG_NAMESPACE = FALLBACK_ENTRY_ID;
25
27
  // ---- 纯逻辑(可单测) ----
26
28
  /** 把 settings 描述符映射为 client 视图;命名空间缺失 → unavailable。 */
27
- export function configViewOf(settings, namespace = CONFIG_NAMESPACE) {
29
+ export function configViewOf(settings, namespace = CONFIG_NAMESPACE, effective = value => value) {
28
30
  const descriptor = settings.describe({ redactSecrets: true }).find(candidate => candidate.ns === namespace);
29
31
  if (descriptor === undefined) {
30
32
  return { status: 'unavailable', value: undefined, user: undefined, base: undefined, writable: settings.writable, mode: 'host' };
31
33
  }
32
34
  return {
33
35
  status: 'ready',
34
- value: descriptor.value,
36
+ // 有效值经 effective 变换(当前用途:叠加环境默认值),使设置页显示的值
37
+ // 与 host 端**实际使用**的值一致。user/base 保持原样,供表单判断覆盖状态。
38
+ value: effective(descriptor.value, descriptor.user),
35
39
  user: descriptor.user,
36
40
  base: descriptor.base,
37
41
  writable: settings.writable,
@@ -72,24 +76,60 @@ export function parseConfigWriteBody(raw) {
72
76
  };
73
77
  }
74
78
  /**
75
- * 同源校验:Origin/Referer 存在时必须与请求 Host 匹配。
76
- * POST 无来源头一律拒绝(纵深防御;跨站表单/fetch 都会被 CORS 挡在读之外)。
79
+ * 同源校验:只在请求**真的带了浏览器来源头**时,判断该来源是否可信。
80
+ *
81
+ * 判定规则:
82
+ * - 来源是桌面版窗口的 `dsh-app:` 协议 → 放行(DSH Desktop 把窗口请求转发给宿主时
83
+ * **删掉 Origin、保留 Referer**,页面来源与请求 Host 必然不同,不放行则桌面版必 403);
84
+ * - 来源与请求 Host 匹配 → 放行;
85
+ * - 完全不带来源头 → 放行(宿主进程内部调用、本机脚本)。这类请求伪造任何头都轻而易举,
86
+ * 拒绝它并不构成安全边界;要防本机任意进程读取,需要的是鉴权而不是来源头。
87
+ * - 其它来源 → 拒绝(浏览器跨站请求**一定**带 Origin/Referer,CSRF 由此挡住)。
77
88
  */
78
- export function sameOrigin(request, requireOrigin) {
89
+ export function sameOrigin(request) {
79
90
  const host = request.headers.host;
80
91
  const origin = request.headers.origin ?? request.headers.referer;
81
92
  if (origin === undefined)
82
- return !requireOrigin;
93
+ return true;
83
94
  if (host === undefined)
84
95
  return false;
85
96
  try {
86
97
  const parsed = new URL(origin);
98
+ if (parsed.protocol === 'dsh-app:')
99
+ return true;
87
100
  return parsed.host === host;
88
101
  }
89
102
  catch {
90
103
  return false;
91
104
  }
92
105
  }
106
+ /**
107
+ * 未注入守卫时的兜底:只看来源头。
108
+ *
109
+ * ⚠️ 这**不是鉴权**(本机任意进程不带来源头即可通过,伪造来源头也轻而易举),
110
+ * 只防浏览器跨站。有宿主连接服务时应传 `ctx.connection.requestRejection`:
111
+ * 它按宿主自己签发的 cookie 判定,能真正挡住本机裸进程,且不看 Origin/Referer
112
+ * —— 桌面壳转发时会删掉 Origin、只留 `referer: dsh-app://app/`,用来源头判定必然误伤。
113
+ */
114
+ const fallbackGuard = (request) => (sameOrigin(request) ? undefined : 403);
115
+ /**
116
+ * 执行访问守卫;守卫自身抛错(第三方/自定义 connection 服务)→ **fail closed**。
117
+ *
118
+ * 不用宿主 webserver 兜底的 400:那样从响应上看不出是鉴权环节出的问题
119
+ * (`dsh-host-webserver` 对 handler 抛错只记 warn 并回 400),排障时会误导。
120
+ */
121
+ function rejectedBy(guard, request) {
122
+ let rejection;
123
+ try {
124
+ rejection = guard(request);
125
+ }
126
+ catch {
127
+ return { status: 403, error: 'guard failed' };
128
+ }
129
+ if (rejection === undefined)
130
+ return undefined;
131
+ return { status: rejection, error: rejection === 401 ? 'unauthenticated' : 'untrusted origin' };
132
+ }
93
133
  // ---- HTTP 层 ----
94
134
  function sendJson(res, status, value) {
95
135
  const body = JSON.stringify(value);
@@ -114,14 +154,10 @@ function readBody(request, limit = 64 * 1024) {
114
154
  request.on('error', reject);
115
155
  });
116
156
  }
117
- function handleGet(settings, res, namespace) {
118
- sendJson(res, 200, configViewOf(settings, namespace));
157
+ function handleGet(settings, res, namespace, effective) {
158
+ sendJson(res, 200, configViewOf(settings, namespace, effective));
119
159
  }
120
160
  async function handlePost(settings, request, res, namespace) {
121
- if (!sameOrigin(request, true)) {
122
- sendJson(res, 403, { ok: false, error: 'untrusted origin' });
123
- return;
124
- }
125
161
  let raw;
126
162
  try {
127
163
  raw = JSON.parse(await readBody(request));
@@ -153,14 +189,21 @@ async function handlePost(settings, request, res, namespace) {
153
189
  * @param namespace - 本插件在 profile 中的条目 id(settings 命名空间)。
154
190
  * @returns 卸载函数。
155
191
  */
156
- export function mountConfigRoutes(webServer, settings, namespace = CONFIG_NAMESPACE) {
192
+ export function mountConfigRoutes(webServer, settings, namespace = CONFIG_NAMESPACE, guard = fallbackGuard, effective = value => value) {
157
193
  const routes = [
158
194
  {
159
195
  kind: 'exact',
160
196
  path: '/dsh-messager/config',
161
197
  handler: (request, response) => {
198
+ // 访问守卫(GET / POST / 其它方法一致):默认来源校验;调用方注入宿主连接服务时
199
+ // 走官方鉴权正门(cookie 判定),桌面壳转发与浏览器页面都能通过。
200
+ const denied = rejectedBy(guard, request);
201
+ if (denied !== undefined) {
202
+ sendJson(response, denied.status, { ok: false, error: denied.error });
203
+ return;
204
+ }
162
205
  if (request.method === 'GET') {
163
- handleGet(settings, response, namespace);
206
+ handleGet(settings, response, namespace, effective);
164
207
  return;
165
208
  }
166
209
  if (request.method === 'POST') {
@@ -1 +1 @@
1
- {"version":3,"file":"config-route.js","sourceRoot":"","sources":["../src/config-route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-route.js","sourceRoot":"","sources":["../src/config-route.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * 配置路由的跨端共享类型(host 与浏览器 client 共用,不得 import 任何
3
3
  * Node/浏览器专属模块)。
4
4
  */
5
- /** 配置路由路径(挂在 DSH webServer 上,同源访问)。 */
5
+ /** 配置路由路径(挂在 DSH webServer 上;访问经宿主鉴权,见 src/config-route.ts)。 */
6
6
  export declare const CONFIG_PATH = "/dsh-messager/config";
7
7
  /** client ScopeLike 快照同构的配置视图。 */
8
8
  export interface ConfigView {
@@ -1 +1 @@
1
- {"version":3,"file":"config-shared.d.ts","sourceRoot":"","sources":["../src/config-shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,uCAAuC;AACvC,eAAO,MAAM,WAAW,yBAAyB,CAAA;AAEjD,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,GAAG,aAAa,CAAA;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,KAAK,GAAG,OAAO,CAAA;IACnB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,aAAa,EAAE,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B"}
1
+ {"version":3,"file":"config-shared.d.ts","sourceRoot":"","sources":["../src/config-shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,gEAAgE;AAChE,eAAO,MAAM,WAAW,yBAAyB,CAAA;AAEjD,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,GAAG,aAAa,CAAA;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,KAAK,GAAG,OAAO,CAAA;IACnB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,aAAa,EAAE,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B"}
@@ -2,6 +2,6 @@
2
2
  * 配置路由的跨端共享类型(host 与浏览器 client 共用,不得 import 任何
3
3
  * Node/浏览器专属模块)。
4
4
  */
5
- /** 配置路由路径(挂在 DSH webServer 上,同源访问)。 */
5
+ /** 配置路由路径(挂在 DSH webServer 上;访问经宿主鉴权,见 src/config-route.ts)。 */
6
6
  export const CONFIG_PATH = '/dsh-messager/config';
7
7
  //# sourceMappingURL=config-shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-shared.js","sourceRoot":"","sources":["../src/config-shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,uCAAuC;AACvC,MAAM,CAAC,MAAM,WAAW,GAAG,sBAAsB,CAAA"}
1
+ {"version":3,"file":"config-shared.js","sourceRoot":"","sources":["../src/config-shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,gEAAgE;AAChE,MAAM,CAAC,MAAM,WAAW,GAAG,sBAAsB,CAAA"}
package/lib/config.d.ts CHANGED
@@ -111,8 +111,6 @@ export interface MessageConfig {
111
111
  titlePrefix?: string;
112
112
  /** 正文是否附带会话标题。 */
113
113
  includeSessionTitle: boolean;
114
- /** GUI 地址,用于通知中的“打开”链接/按钮。 */
115
- guiUrl: string;
116
114
  }
117
115
  export interface Config {
118
116
  triggers: TriggerConfig;
@@ -231,11 +229,9 @@ export declare const Config: Schema<Schemastery.ObjectS<NoInfer<{
231
229
  message: Schema<Schemastery.ObjectS<NoInfer<{
232
230
  titlePrefix: Schema<string, string, "volatile">;
233
231
  includeSessionTitle: Schema<boolean, boolean, "volatile-defined">;
234
- guiUrl: Schema<string, string, "volatile-defined">;
235
232
  }>>, Schemastery.ObjectT<NoInfer<{
236
233
  titlePrefix: Schema<string, string, "volatile">;
237
234
  includeSessionTitle: Schema<boolean, boolean, "volatile-defined">;
238
- guiUrl: Schema<string, string, "volatile-defined">;
239
235
  }>>, "plain">;
240
236
  }>>, Schemastery.ObjectT<NoInfer<{
241
237
  triggers: Schema<Schemastery.ObjectS<NoInfer<{
@@ -342,11 +338,9 @@ export declare const Config: Schema<Schemastery.ObjectS<NoInfer<{
342
338
  message: Schema<Schemastery.ObjectS<NoInfer<{
343
339
  titlePrefix: Schema<string, string, "volatile">;
344
340
  includeSessionTitle: Schema<boolean, boolean, "volatile-defined">;
345
- guiUrl: Schema<string, string, "volatile-defined">;
346
341
  }>>, Schemastery.ObjectT<NoInfer<{
347
342
  titlePrefix: Schema<string, string, "volatile">;
348
343
  includeSessionTitle: Schema<boolean, boolean, "volatile-defined">;
349
- guiUrl: Schema<string, string, "volatile-defined">;
350
344
  }>>, "plain">;
351
345
  }>>, "plain">;
352
346
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/lib/config.js CHANGED
@@ -85,7 +85,6 @@ export const Config = Schema.object({
85
85
  message: Schema.object({
86
86
  titlePrefix: Schema.string().volatile(),
87
87
  includeSessionTitle: Schema.boolean().default(true).volatile(),
88
- guiUrl: Schema.string().default('http://127.0.0.1:3080').volatile(),
89
88
  }),
90
89
  });
91
90
  /**
package/lib/config.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * 运行环境探测与「智能默认」。
3
+ *
4
+ * 目标:同一份插件在 **DSH Desktop / `dsh web` / 无页面(headless)** 下自动选对
5
+ * 默认通道,但**用户显式设置过的字段永远优先**。
6
+ *
7
+ * 依据(v0.3.6 的桌面版调查结论):
8
+ * - 桌面版的原生系统通知**只能由窗口里的页面**投递。host 半边跑在
9
+ * `ELECTRON_RUN_AS_NODE=1` 的子进程里,实测 `require('electron')` 返回
10
+ * `MODULE_NOT_FOUND` —— 拿不到 Electron 的通知 API,只剩 node-notifier
11
+ * (Windows 上是 SnoreToast,署名与外观都不是应用本体)。
12
+ * 所以**桌面宿主下 `system` 通道默认关闭**,通知走渲染端(`browser` 通道)。
13
+ * - 「桌面宿主」判定 = Electron 二进制 **且** 本进程被桌面壳以 IPC 托管:
14
+ * 经桌面版自带 CLI(`DeepSeek Harness.exe` + `ELECTRON_RUN_AS_NODE`)跑的
15
+ * `dsh web` 同样是 Electron 二进制,但没有 IPC 通道、也没有窗口,
16
+ * 那种情况必须保留 `system` 默认开启。
17
+ * - 「用户是否显式设置过」只能靠 `settings.describe().user`:它是原始 partial,
18
+ * 键存在 ⇔ 用户写过(`base` 已套用 schema 默认值,永远是填满的,不能用)。
19
+ */
20
+ /** 宿主形态:桌面壳托管的 Electron 宿主 / 普通 Node 宿主。 */
21
+ export type HostKind = 'desktop' | 'node';
22
+ /** 环境默认值:只含「用户没设置过时才生效」的叶子。 */
23
+ export interface EnvironmentDefaults {
24
+ system?: {
25
+ enabled?: boolean;
26
+ };
27
+ }
28
+ /**
29
+ * 探测宿主形态(纯函数,输入显式传入便于单测)。
30
+ *
31
+ * @param env - `process.env`(只关心 `ELECTRON_RUN_AS_NODE`)。
32
+ * @param versions - `process.versions`(`electron` 存在即 Electron 二进制)。
33
+ * 以 `unknown` 接收并就地收窄:`NodeJS.ProcessVersions` 没有索引签名,
34
+ * 直接声明 `{ electron?: string }` 反而无法从调用点传入。
35
+ * @param hasIpcChannel - 本进程是否有 IPC 通道(桌面壳 spawn 时带 `ipc` stdio)。
36
+ */
37
+ export declare function detectHostKind(env: {
38
+ ELECTRON_RUN_AS_NODE?: string | undefined;
39
+ }, versions: unknown, hasIpcChannel: boolean): HostKind;
40
+ /**
41
+ * 环境默认值表。
42
+ *
43
+ * 桌面宿主 → `system` 默认关闭(避免在桌面版里弹 SnoreToast;渲染端的原生通知才是主通道)。
44
+ * 其它宿主 → 空对象(保持 schema 默认值,即 system 开启,行为与 v0.3.5 一致)。
45
+ */
46
+ export declare function environmentDefaults(kind: HostKind): EnvironmentDefaults;
47
+ /**
48
+ * 用户层是否**显式设置过**该路径。
49
+ *
50
+ * ⚠️ 必须逐段 `Object.hasOwn`:用户可能显式设 `false`,用真值判断会把
51
+ * 「关掉」误判成「没设置」。路径上任何一段缺失即为没设置过。
52
+ *
53
+ * 📌 该等价关系(「键存在 ⇔ 用户写过」)依赖 DSH settings 的投影行为:
54
+ * `describe().user` 来自 profile patch 的原始 config 经 `projectForm` 投影,
55
+ * 而 `projectForm` **丢弃值为 undefined 的键**(packages/settings/settings/src/schema.ts)。
56
+ * 若上游改成保留 undefined 键,这里的判断需要跟着调整。
57
+ */
58
+ export declare function userSet(user: unknown, path: readonly string[]): boolean;
59
+ /**
60
+ * 把环境默认值铺在有效配置上:只有用户没显式设置过的叶子会被覆盖。
61
+ *
62
+ * @param effective - 已合并好的有效配置(schema 默认 → base → user)。
63
+ * @param user - `settings.describe().user`(原始 partial);调用方需保证它**可知**
64
+ * (服务缺席时应直接不调用本函数,而不是传 undefined —— 那会把用户的显式设置覆盖掉)。
65
+ * @param defaults - {@link environmentDefaults} 的结果。
66
+ */
67
+ export declare function applyEnvironmentDefaults<T extends object>(effective: T, user: unknown, defaults: EnvironmentDefaults): T;
68
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,4CAA4C;AAC5C,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAA;AAEzC,+BAA+B;AAC/B,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE;IAAE,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAClD,QAAQ,EAAE,OAAO,EACjB,aAAa,EAAE,OAAO,GACrB,QAAQ,CAMV;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,mBAAmB,CAEvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAOvE;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,MAAM,EACvD,SAAS,EAAE,CAAC,EACZ,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,mBAAmB,GAC5B,CAAC,CAWH"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * 运行环境探测与「智能默认」。
3
+ *
4
+ * 目标:同一份插件在 **DSH Desktop / `dsh web` / 无页面(headless)** 下自动选对
5
+ * 默认通道,但**用户显式设置过的字段永远优先**。
6
+ *
7
+ * 依据(v0.3.6 的桌面版调查结论):
8
+ * - 桌面版的原生系统通知**只能由窗口里的页面**投递。host 半边跑在
9
+ * `ELECTRON_RUN_AS_NODE=1` 的子进程里,实测 `require('electron')` 返回
10
+ * `MODULE_NOT_FOUND` —— 拿不到 Electron 的通知 API,只剩 node-notifier
11
+ * (Windows 上是 SnoreToast,署名与外观都不是应用本体)。
12
+ * 所以**桌面宿主下 `system` 通道默认关闭**,通知走渲染端(`browser` 通道)。
13
+ * - 「桌面宿主」判定 = Electron 二进制 **且** 本进程被桌面壳以 IPC 托管:
14
+ * 经桌面版自带 CLI(`DeepSeek Harness.exe` + `ELECTRON_RUN_AS_NODE`)跑的
15
+ * `dsh web` 同样是 Electron 二进制,但没有 IPC 通道、也没有窗口,
16
+ * 那种情况必须保留 `system` 默认开启。
17
+ * - 「用户是否显式设置过」只能靠 `settings.describe().user`:它是原始 partial,
18
+ * 键存在 ⇔ 用户写过(`base` 已套用 schema 默认值,永远是填满的,不能用)。
19
+ */
20
+ /**
21
+ * 探测宿主形态(纯函数,输入显式传入便于单测)。
22
+ *
23
+ * @param env - `process.env`(只关心 `ELECTRON_RUN_AS_NODE`)。
24
+ * @param versions - `process.versions`(`electron` 存在即 Electron 二进制)。
25
+ * 以 `unknown` 接收并就地收窄:`NodeJS.ProcessVersions` 没有索引签名,
26
+ * 直接声明 `{ electron?: string }` 反而无法从调用点传入。
27
+ * @param hasIpcChannel - 本进程是否有 IPC 通道(桌面壳 spawn 时带 `ipc` stdio)。
28
+ */
29
+ export function detectHostKind(env, versions, hasIpcChannel) {
30
+ const electron = typeof versions === 'object' && versions !== null
31
+ ? versions.electron
32
+ : undefined;
33
+ const electronHosted = env.ELECTRON_RUN_AS_NODE === '1' || typeof electron === 'string';
34
+ return electronHosted && hasIpcChannel ? 'desktop' : 'node';
35
+ }
36
+ /**
37
+ * 环境默认值表。
38
+ *
39
+ * 桌面宿主 → `system` 默认关闭(避免在桌面版里弹 SnoreToast;渲染端的原生通知才是主通道)。
40
+ * 其它宿主 → 空对象(保持 schema 默认值,即 system 开启,行为与 v0.3.5 一致)。
41
+ */
42
+ export function environmentDefaults(kind) {
43
+ return kind === 'desktop' ? { system: { enabled: false } } : {};
44
+ }
45
+ /**
46
+ * 用户层是否**显式设置过**该路径。
47
+ *
48
+ * ⚠️ 必须逐段 `Object.hasOwn`:用户可能显式设 `false`,用真值判断会把
49
+ * 「关掉」误判成「没设置」。路径上任何一段缺失即为没设置过。
50
+ *
51
+ * 📌 该等价关系(「键存在 ⇔ 用户写过」)依赖 DSH settings 的投影行为:
52
+ * `describe().user` 来自 profile patch 的原始 config 经 `projectForm` 投影,
53
+ * 而 `projectForm` **丢弃值为 undefined 的键**(packages/settings/settings/src/schema.ts)。
54
+ * 若上游改成保留 undefined 键,这里的判断需要跟着调整。
55
+ */
56
+ export function userSet(user, path) {
57
+ let node = user;
58
+ for (const key of path) {
59
+ if (typeof node !== 'object' || node === null || !Object.hasOwn(node, key))
60
+ return false;
61
+ node = node[key];
62
+ }
63
+ return true;
64
+ }
65
+ /**
66
+ * 把环境默认值铺在有效配置上:只有用户没显式设置过的叶子会被覆盖。
67
+ *
68
+ * @param effective - 已合并好的有效配置(schema 默认 → base → user)。
69
+ * @param user - `settings.describe().user`(原始 partial);调用方需保证它**可知**
70
+ * (服务缺席时应直接不调用本函数,而不是传 undefined —— 那会把用户的显式设置覆盖掉)。
71
+ * @param defaults - {@link environmentDefaults} 的结果。
72
+ */
73
+ export function applyEnvironmentDefaults(effective, user, defaults) {
74
+ const result = structuredClone(effective);
75
+ for (const [group, fields] of Object.entries(defaults)) {
76
+ const target = result[group];
77
+ if (typeof target !== 'object' || target === null)
78
+ continue;
79
+ for (const [field, value] of Object.entries(fields)) {
80
+ if (userSet(user, [group, field]))
81
+ continue;
82
+ target[field] = value;
83
+ }
84
+ }
85
+ return result;
86
+ }
87
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAUH;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,GAAkD,EAClD,QAAiB,EACjB,aAAsB;IAEtB,MAAM,QAAQ,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI;QAChE,CAAC,CAAE,QAAoC,CAAC,QAAQ;QAChD,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,cAAc,GAAG,GAAG,CAAC,oBAAoB,KAAK,GAAG,IAAI,OAAO,QAAQ,KAAK,QAAQ,CAAA;IACvF,OAAO,cAAc,IAAI,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;AAC7D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAc;IAChD,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;AACjE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,OAAO,CAAC,IAAa,EAAE,IAAuB;IAC5D,IAAI,IAAI,GAAY,IAAI,CAAA;IACxB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;QACxF,IAAI,GAAI,IAAgC,CAAC,GAAG,CAAC,CAAA;IAC/C,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAY,EACZ,IAAa,EACb,QAA6B;IAE7B,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAA4B,CAAA;IACpE,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC5B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,SAAQ;QAC3D,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAiC,CAAC,EAAE,CAAC;YAC/E,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAAE,SAClC;YAAC,MAAkC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA;QACrD,CAAC;IACH,CAAC;IACD,OAAO,MAAW,CAAA;AACpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKlD,OAAO,EAA6C,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAY3F,eAAO,MAAM,IAAI,iBAAiB,CAAA;AAElC;;;;;;;;GAQG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAkGpC;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,QAsGxD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAMlD,OAAO,EAA6C,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAa3F,eAAO,MAAM,IAAI,iBAAiB,CAAA;AAElC;;;;;;;;GAQG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAkHpC;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,QAgJxD"}