dsh-connect 0.7.2 → 0.9.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.
Files changed (153) hide show
  1. package/README.i18n.yaml +2 -2
  2. package/README.md +196 -43
  3. package/README.zh.md +171 -42
  4. package/client/client.js +817 -0
  5. package/client/client.js.map +7 -0
  6. package/client/locale.mjs +227 -0
  7. package/client/panel-state.mjs +54 -0
  8. package/client/settings-client.mjs +389 -0
  9. package/docs/images/settings-advanced-en.png +0 -0
  10. package/docs/images/settings-advanced-zh.png +0 -0
  11. package/docs/images/settings-defaults-en.png +0 -0
  12. package/docs/images/settings-defaults-zh.png +0 -0
  13. package/docs/images/settings-overview-en.png +0 -0
  14. package/docs/images/settings-overview-zh.png +0 -0
  15. package/examples/minimal.config.json +16 -0
  16. package/lib/binding.d.ts.map +1 -1
  17. package/lib/binding.js +2 -2
  18. package/lib/binding.js.map +1 -1
  19. package/lib/channels/dingtalk/adapter.d.ts +59 -0
  20. package/lib/channels/dingtalk/adapter.d.ts.map +1 -0
  21. package/lib/channels/dingtalk/adapter.js +123 -0
  22. package/lib/channels/dingtalk/adapter.js.map +1 -0
  23. package/lib/channels/dingtalk/i18n.d.ts +14 -0
  24. package/lib/channels/dingtalk/i18n.d.ts.map +1 -0
  25. package/lib/channels/dingtalk/i18n.js +16 -0
  26. package/lib/channels/dingtalk/i18n.js.map +1 -0
  27. package/lib/channels/dingtalk/index.d.ts +127 -0
  28. package/lib/channels/dingtalk/index.d.ts.map +1 -0
  29. package/lib/channels/dingtalk/index.js +144 -0
  30. package/lib/channels/dingtalk/index.js.map +1 -0
  31. package/lib/channels/dingtalk/message.d.ts +49 -0
  32. package/lib/channels/dingtalk/message.d.ts.map +1 -0
  33. package/lib/channels/dingtalk/message.js +50 -0
  34. package/lib/channels/dingtalk/message.js.map +1 -0
  35. package/lib/channels/dingtalk/stomp.d.ts +36 -0
  36. package/lib/channels/dingtalk/stomp.d.ts.map +1 -0
  37. package/lib/channels/dingtalk/stomp.js +107 -0
  38. package/lib/channels/dingtalk/stomp.js.map +1 -0
  39. package/lib/channels/dingtalk/stream.d.ts +53 -0
  40. package/lib/channels/dingtalk/stream.d.ts.map +1 -0
  41. package/lib/channels/dingtalk/stream.js +199 -0
  42. package/lib/channels/dingtalk/stream.js.map +1 -0
  43. package/lib/channels/dingtalk/webhook.d.ts +84 -0
  44. package/lib/channels/dingtalk/webhook.d.ts.map +1 -0
  45. package/lib/channels/dingtalk/webhook.js +143 -0
  46. package/lib/channels/dingtalk/webhook.js.map +1 -0
  47. package/lib/channels/feishu/adapter.d.ts +133 -0
  48. package/lib/channels/feishu/adapter.d.ts.map +1 -0
  49. package/lib/channels/feishu/adapter.js +662 -0
  50. package/lib/channels/feishu/adapter.js.map +1 -0
  51. package/lib/channels/feishu/i18n.d.ts +30 -0
  52. package/lib/channels/feishu/i18n.d.ts.map +1 -0
  53. package/lib/channels/feishu/i18n.js +42 -0
  54. package/lib/channels/feishu/i18n.js.map +1 -0
  55. package/lib/channels/feishu/index.d.ts +82 -0
  56. package/lib/channels/feishu/index.d.ts.map +1 -0
  57. package/lib/channels/feishu/index.js +103 -0
  58. package/lib/channels/feishu/index.js.map +1 -0
  59. package/lib/channels/feishu/onboard.d.ts +16 -0
  60. package/lib/channels/feishu/onboard.d.ts.map +1 -0
  61. package/lib/channels/feishu/onboard.js +86 -0
  62. package/lib/channels/feishu/onboard.js.map +1 -0
  63. package/lib/channels/telegram/adapter.d.ts +70 -0
  64. package/lib/channels/telegram/adapter.d.ts.map +1 -0
  65. package/lib/channels/telegram/adapter.js +460 -0
  66. package/lib/channels/telegram/adapter.js.map +1 -0
  67. package/lib/channels/telegram/client.d.ts +115 -0
  68. package/lib/channels/telegram/client.d.ts.map +1 -0
  69. package/lib/channels/telegram/client.js +198 -0
  70. package/lib/channels/telegram/client.js.map +1 -0
  71. package/lib/channels/telegram/i18n.d.ts +14 -0
  72. package/lib/channels/telegram/i18n.d.ts.map +1 -0
  73. package/lib/channels/telegram/i18n.js +18 -0
  74. package/lib/channels/telegram/i18n.js.map +1 -0
  75. package/lib/channels/telegram/index.d.ts +46 -0
  76. package/lib/channels/telegram/index.d.ts.map +1 -0
  77. package/lib/channels/telegram/index.js +54 -0
  78. package/lib/channels/telegram/index.js.map +1 -0
  79. package/lib/channels/web/adapter.d.ts +103 -0
  80. package/lib/channels/web/adapter.d.ts.map +1 -0
  81. package/lib/channels/web/adapter.js +161 -0
  82. package/lib/channels/web/adapter.js.map +1 -0
  83. package/lib/channels/web/index.d.ts +47 -0
  84. package/lib/channels/web/index.d.ts.map +1 -0
  85. package/lib/channels/web/index.js +59 -0
  86. package/lib/channels/web/index.js.map +1 -0
  87. package/lib/chat-key.d.ts +29 -0
  88. package/lib/chat-key.d.ts.map +1 -0
  89. package/lib/chat-key.js +38 -0
  90. package/lib/chat-key.js.map +1 -0
  91. package/lib/index.d.ts +78 -11
  92. package/lib/index.d.ts.map +1 -1
  93. package/lib/index.js +312 -9
  94. package/lib/index.js.map +1 -1
  95. package/lib/runner.d.ts +55 -2
  96. package/lib/runner.d.ts.map +1 -1
  97. package/lib/runner.js +158 -23
  98. package/lib/runner.js.map +1 -1
  99. package/lib/scheduler.d.ts.map +1 -1
  100. package/lib/scheduler.js +2 -2
  101. package/lib/scheduler.js.map +1 -1
  102. package/lib/service.d.ts +17 -1
  103. package/lib/service.d.ts.map +1 -1
  104. package/lib/service.js +47 -3
  105. package/lib/service.js.map +1 -1
  106. package/lib/settings/channel-runtime.d.ts +75 -0
  107. package/lib/settings/channel-runtime.d.ts.map +1 -0
  108. package/lib/settings/channel-runtime.js +165 -0
  109. package/lib/settings/channel-runtime.js.map +1 -0
  110. package/lib/settings/channels.d.ts +62 -0
  111. package/lib/settings/channels.d.ts.map +1 -0
  112. package/lib/settings/channels.js +132 -0
  113. package/lib/settings/channels.js.map +1 -0
  114. package/lib/settings/credential-store.d.ts +85 -0
  115. package/lib/settings/credential-store.d.ts.map +1 -0
  116. package/lib/settings/credential-store.js +142 -0
  117. package/lib/settings/credential-store.js.map +1 -0
  118. package/lib/settings/index.d.ts +14 -0
  119. package/lib/settings/index.d.ts.map +1 -0
  120. package/lib/settings/index.js +14 -0
  121. package/lib/settings/index.js.map +1 -0
  122. package/lib/settings/namespace.d.ts +175 -0
  123. package/lib/settings/namespace.d.ts.map +1 -0
  124. package/lib/settings/namespace.js +200 -0
  125. package/lib/settings/namespace.js.map +1 -0
  126. package/lib/settings/rpc-client.d.ts +36 -0
  127. package/lib/settings/rpc-client.d.ts.map +1 -0
  128. package/lib/settings/rpc-client.js +45 -0
  129. package/lib/settings/rpc-client.js.map +1 -0
  130. package/lib/settings/secret-disclosure.d.ts +50 -0
  131. package/lib/settings/secret-disclosure.d.ts.map +1 -0
  132. package/lib/settings/secret-disclosure.js +132 -0
  133. package/lib/settings/secret-disclosure.js.map +1 -0
  134. package/lib/settings/settings-model.d.ts +124 -0
  135. package/lib/settings/settings-model.d.ts.map +1 -0
  136. package/lib/settings/settings-model.js +118 -0
  137. package/lib/settings/settings-model.js.map +1 -0
  138. package/lib/settings/settings-rpc.d.ts +130 -0
  139. package/lib/settings/settings-rpc.d.ts.map +1 -0
  140. package/lib/settings/settings-rpc.js +233 -0
  141. package/lib/settings/settings-rpc.js.map +1 -0
  142. package/lib/settings/settings-service.d.ts +35 -0
  143. package/lib/settings/settings-service.d.ts.map +1 -0
  144. package/lib/settings/settings-service.js +171 -0
  145. package/lib/settings/settings-service.js.map +1 -0
  146. package/lib/state-dir.d.ts +28 -0
  147. package/lib/state-dir.d.ts.map +1 -0
  148. package/lib/state-dir.js +33 -0
  149. package/lib/state-dir.js.map +1 -0
  150. package/lib/stream.d.ts.map +1 -1
  151. package/lib/stream.js +3 -2
  152. package/lib/stream.js.map +1 -1
  153. package/package.json +56 -12
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Live channel lifecycle for dsh-connect.
3
+ *
4
+ * `activateChannels` starts a fixed set of adapters once, at load time. Once
5
+ * the channel list is user-editable (the `dsh-connect` settings namespace) the
6
+ * plugin needs the other half of that story: a channel removed from
7
+ * `channels[]` has to be *stopped*, and one whose config changed has to be
8
+ * restarted with the new values.
9
+ *
10
+ * Two properties this class exists to guarantee:
11
+ *
12
+ * - **Stop before start.** A reconfigured Feishu adapter must release its long
13
+ * connection before the replacement opens one. Two live connections for the
14
+ * same app deliver every event twice, which looks like the bot answering
15
+ * itself rather than like a crash.
16
+ * - **Serialised applies.** A settings edit can fire `onChange` more than once
17
+ * in a burst (and the provider's file watcher debounces on its own schedule).
18
+ * Applies are chained, so a stop can never interleave with the next start.
19
+ *
20
+ * Kept free of cordis and channel-SDK imports so it is unit-testable with fake
21
+ * adapters.
22
+ * @module dsh-connect/settings/channel-runtime
23
+ */
24
+ import { type ChannelApply, type ChannelName, type ChannelsConfig, type LoggerLike } from "./channels.js";
25
+ /** Why a channel was stopped — used only for the log line. */
26
+ export type StopReason = "disabled" | "reconfigured" | "shutdown";
27
+ export interface ChannelRuntimeOptions<Ctx extends LoggerLike> {
28
+ /** Context handed to each channel's `apply`. */
29
+ ctx: Ctx;
30
+ /** Channel name → its plugin `apply`, as in `activateChannels`. */
31
+ channels: Record<string, ChannelApply<Ctx>>;
32
+ /**
33
+ * Stop a channel that is running. Wired to `ConnectService.unregisterAdapter`
34
+ * so the adapter is dropped from the routing map *and* torn down; a runtime
35
+ * that only knew how to start would leak connections on every settings edit.
36
+ */
37
+ teardown: (name: ChannelName) => Promise<void>;
38
+ /**
39
+ * Refresh store-backed secrets before computing each channel's effective
40
+ * config (same source `apply` uses at boot). Optional so tests can skip it.
41
+ */
42
+ getSecrets?: (name: ChannelName) => Promise<Record<string, string>>;
43
+ }
44
+ /**
45
+ * Owns which channels are currently running and reconciles that set against a
46
+ * desired config on every change.
47
+ */
48
+ export declare class ChannelRuntime<Ctx extends LoggerLike = LoggerLike> {
49
+ private readonly opts;
50
+ /** Channel → the effective config it was started with. */
51
+ private readonly running;
52
+ /** Tail of the apply chain; see "Serialised applies" above. */
53
+ private chain;
54
+ private disposed;
55
+ constructor(options: ChannelRuntimeOptions<Ctx>);
56
+ /** Channels currently up, in activation order. */
57
+ active(): ChannelName[];
58
+ /**
59
+ * Bring the running set in line with `config`. Channels that are new start,
60
+ * channels that are gone or whose effective config changed restart.
61
+ *
62
+ * Never rejects: a channel that fails to start or stop is logged and the
63
+ * others still get their chance. A settings change should not be able to take
64
+ * the whole bridge down.
65
+ */
66
+ apply(config: ChannelsConfig | null | undefined): Promise<void>;
67
+ /** Stop every running channel. Waits for an in-flight apply first. */
68
+ dispose(): Promise<void>;
69
+ private log;
70
+ private reconcile;
71
+ /** Channel → effective config, mirroring `activateChannels`' merge exactly. */
72
+ private desired;
73
+ private stop;
74
+ }
75
+ //# sourceMappingURL=channel-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-runtime.d.ts","sourceRoot":"","sources":["../../src/settings/channel-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AAgCvB,8DAA8D;AAC9D,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,cAAc,GAAG,UAAU,CAAC;AAElE,MAAM,WAAW,qBAAqB,CAAC,GAAG,SAAS,UAAU;IAC3D,gDAAgD;IAChD,GAAG,EAAE,GAAG,CAAC;IACT,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C;;;;OAIG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrE;AAED;;;GAGG;AACH,qBAAa,cAAc,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU;IAC7D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAClD,0DAA0D;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,+DAA+D;IAC/D,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,qBAAqB,CAAC,GAAG,CAAC;IAI/C,kDAAkD;IAClD,MAAM,IAAI,WAAW,EAAE;IAIvB;;;;;;;OAOG;IACH,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/D,sEAAsE;IAChE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B,OAAO,CAAC,GAAG;YAIG,SAAS;IA4BvB,+EAA+E;YACjE,OAAO;YA8BP,IAAI;CAWnB"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Live channel lifecycle for dsh-connect.
3
+ *
4
+ * `activateChannels` starts a fixed set of adapters once, at load time. Once
5
+ * the channel list is user-editable (the `dsh-connect` settings namespace) the
6
+ * plugin needs the other half of that story: a channel removed from
7
+ * `channels[]` has to be *stopped*, and one whose config changed has to be
8
+ * restarted with the new values.
9
+ *
10
+ * Two properties this class exists to guarantee:
11
+ *
12
+ * - **Stop before start.** A reconfigured Feishu adapter must release its long
13
+ * connection before the replacement opens one. Two live connections for the
14
+ * same app deliver every event twice, which looks like the bot answering
15
+ * itself rather than like a crash.
16
+ * - **Serialised applies.** A settings edit can fire `onChange` more than once
17
+ * in a burst (and the provider's file watcher debounces on its own schedule).
18
+ * Applies are chained, so a stop can never interleave with the next start.
19
+ *
20
+ * Kept free of cordis and channel-SDK imports so it is unit-testable with fake
21
+ * adapters.
22
+ * @module dsh-connect/settings/channel-runtime
23
+ */
24
+ import { CHANNELS, injectSecrets, } from "./channels.js";
25
+ /**
26
+ * Deterministically serialise a config value for comparison.
27
+ *
28
+ * `JSON.stringify` alone would be enough for values from one source, but the
29
+ * effective config is a spread of `channelDefaults` and per-channel overrides
30
+ * whose key order depends on how the user wrote the YAML. Sorting keys keeps a
31
+ * cosmetic reorder in `settings.yaml` from tearing down a healthy connection.
32
+ */
33
+ function stableStringify(value) {
34
+ if (value === null || typeof value !== "object")
35
+ return JSON.stringify(value) ?? "undefined";
36
+ if (Array.isArray(value))
37
+ return `[${value.map(stableStringify).join(",")}]`;
38
+ const entries = Object.entries(value)
39
+ .filter(([, v]) => v !== undefined)
40
+ .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
41
+ return `{${entries.map(([k, v]) => `${JSON.stringify(k)}:${stableStringify(v)}`).join(",")}}`;
42
+ }
43
+ /**
44
+ * Deep-copy a plain config object, falling back to the original when it holds
45
+ * something `structuredClone` cannot carry (a function from a test fixture, or
46
+ * a class instance from a hand-written config).
47
+ */
48
+ function clone(value) {
49
+ try {
50
+ return structuredClone(value);
51
+ }
52
+ catch {
53
+ return value;
54
+ }
55
+ }
56
+ /**
57
+ * Owns which channels are currently running and reconciles that set against a
58
+ * desired config on every change.
59
+ */
60
+ export class ChannelRuntime {
61
+ opts;
62
+ /** Channel → the effective config it was started with. */
63
+ running = new Map();
64
+ /** Tail of the apply chain; see "Serialised applies" above. */
65
+ chain = Promise.resolve();
66
+ disposed = false;
67
+ constructor(options) {
68
+ this.opts = options;
69
+ }
70
+ /** Channels currently up, in activation order. */
71
+ active() {
72
+ return [...this.running.keys()];
73
+ }
74
+ /**
75
+ * Bring the running set in line with `config`. Channels that are new start,
76
+ * channels that are gone or whose effective config changed restart.
77
+ *
78
+ * Never rejects: a channel that fails to start or stop is logged and the
79
+ * others still get their chance. A settings change should not be able to take
80
+ * the whole bridge down.
81
+ */
82
+ apply(config) {
83
+ const run = this.chain.then(() => this.reconcile(config ?? {}), () => this.reconcile(config ?? {}));
84
+ // Keep the chain alive regardless of this apply's outcome.
85
+ this.chain = run.then(() => undefined, () => undefined);
86
+ return run;
87
+ }
88
+ /** Stop every running channel. Waits for an in-flight apply first. */
89
+ async dispose() {
90
+ this.disposed = true;
91
+ await this.chain;
92
+ for (const name of [...this.running.keys()])
93
+ await this.stop(name, "shutdown");
94
+ }
95
+ log(message) {
96
+ this.opts.ctx.logger?.warn?.(message);
97
+ }
98
+ async reconcile(config) {
99
+ if (this.disposed)
100
+ return;
101
+ const desired = await this.desired(config);
102
+ // Stop first, start second: see the module comment on double delivery.
103
+ for (const [name, current] of [...this.running]) {
104
+ const next = desired.get(name);
105
+ if (next === undefined) {
106
+ await this.stop(name, "disabled");
107
+ }
108
+ else if (stableStringify(current) !== stableStringify(next)) {
109
+ await this.stop(name, "reconfigured");
110
+ }
111
+ }
112
+ for (const [name, channelConfig] of desired) {
113
+ // Still running and unchanged (nothing above removed it).
114
+ if (this.running.has(name))
115
+ continue;
116
+ const apply = this.opts.channels[name];
117
+ if (apply === undefined)
118
+ continue;
119
+ try {
120
+ apply(this.opts.ctx, channelConfig);
121
+ this.running.set(name, channelConfig);
122
+ }
123
+ catch (error) {
124
+ this.log(`connect: channel "${name}" failed to start: ${String(error)}`);
125
+ }
126
+ }
127
+ }
128
+ /** Channel → effective config, mirroring `activateChannels`' merge exactly. */
129
+ async desired(config) {
130
+ const wanted = config.channels ?? CHANNELS;
131
+ const defaults = config.channelDefaults ?? {};
132
+ // Resolve secrets before the diff so a rotated credential counts as a
133
+ // change and restarts the channel that needs it.
134
+ const source = this.opts.getSecrets === undefined
135
+ ? config
136
+ : await injectSecrets(config, wanted.filter((name) => this.opts.channels[name] !== undefined), this.opts.getSecrets);
137
+ const out = new Map();
138
+ for (const name of wanted) {
139
+ if (this.opts.channels[name] === undefined) {
140
+ this.log(`connect: unknown channel "${name}"; skipped`);
141
+ continue;
142
+ }
143
+ const overrides = source[name] ?? {};
144
+ // Clone rather than alias: a config resolved from the settings namespace
145
+ // is deep-frozen by the provider, so handing an adapter a nested object
146
+ // it later writes to would throw in strict mode instead of quietly
147
+ // working the way it does for a YAML-sourced config.
148
+ out.set(name, { ...clone(defaults), ...clone(overrides) });
149
+ }
150
+ return out;
151
+ }
152
+ async stop(name, reason) {
153
+ // Drop it from the running set first: if teardown throws, the channel is
154
+ // still off the books, and the next apply will try to start it again
155
+ // rather than believing a half-stopped adapter is healthy.
156
+ this.running.delete(name);
157
+ try {
158
+ await this.opts.teardown(name);
159
+ }
160
+ catch (error) {
161
+ this.log(`connect: channel "${name}" failed to stop (${reason}): ${String(error)}`);
162
+ }
163
+ }
164
+ }
165
+ //# sourceMappingURL=channel-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-runtime.js","sourceRoot":"","sources":["../../src/settings/channel-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Channel orchestration for dsh-connect: a small, side-effect-free selector
3
+ * that activates a requested subset of channel adapters. Kept separate from the
4
+ * cordis entry so it is unit-testable without pulling any channel SDK.
5
+ * @module dsh-connect/settings/channels
6
+ */
7
+ /** Channel adapters the connect plugin can activate. */
8
+ export type ChannelName = "feishu" | "telegram" | "dingtalk" | "web";
9
+ /** Config for the connect plugin: which channels + their per-channel config. */
10
+ export interface ChannelsConfig {
11
+ /** Directory holding `bindings.json` / `reminders.json` / the settings document. */
12
+ stateDir?: string;
13
+ /** Optional path to persist web-settings edits (non-secret). */
14
+ settingsStatePath?: string;
15
+ /** Keys applied to every channel that doesn't set its own (e.g. a shared `language`). */
16
+ channelDefaults?: Record<string, unknown>;
17
+ /** Channel names to activate; default: all built-in channels. */
18
+ channels?: ChannelName[];
19
+ feishu?: Record<string, unknown>;
20
+ telegram?: Record<string, unknown>;
21
+ dingtalk?: Record<string, unknown>;
22
+ web?: Record<string, unknown>;
23
+ }
24
+ /** The only slice of a context the selector touches: a `logger.warn`. */
25
+ export interface LoggerLike {
26
+ logger?: {
27
+ warn?: (...args: unknown[]) => void;
28
+ } | undefined;
29
+ }
30
+ /** A channel plugin's `apply(ctx, config)`, loosely typed for the selector. */
31
+ export type ChannelApply<Ctx extends LoggerLike = LoggerLike> = (ctx: Ctx, config: any) => void;
32
+ /** Built-in channels, in a stable order (for docs and the default selector). */
33
+ export declare const CHANNELS: readonly ChannelName[];
34
+ /**
35
+ * Activate the requested adapters into `ctx` (the `connect` service is
36
+ * expected to be present via the caller's `inject`). `channels` maps a channel
37
+ * name to its plugin `apply`. Unknown names are skipped with a warning; a
38
+ * channel whose `apply` throws is caught so one broken adapter never takes the
39
+ * others down.
40
+ *
41
+ * @returns the channel names that were started.
42
+ */
43
+ export declare function activateChannels<Ctx extends LoggerLike>(ctx: Ctx, config: ChannelsConfig | null | undefined, channels: Record<string, ChannelApply<Ctx>>): string[];
44
+ /**
45
+ * Extract the build-time secret values (configKey → value) that a channel config
46
+ * carries for a given secret-key map, reading each key at its *actual* config
47
+ * location (flat at the channel root, or nested per `NESTED_SECRET_KEYS` — e.g.
48
+ * dingtalk's `stream.clientId`). Only non-empty string values are returned, so it
49
+ * doubles as the source for migrating config-file secrets into the credential
50
+ * store on boot. Read-only: never mutates `config`.
51
+ */
52
+ export declare function extractConfigSecrets(config: Record<string, unknown> | undefined, channel: ChannelName, secretKeys: Record<string, string>): Record<string, string>;
53
+ /**
54
+ * Return a shallow-cloned config whose enabled channels are enriched with the
55
+ * secrets returned by `getSecrets` (stored secrets win over channel config).
56
+ * Used by `apply` to feed store-backed credentials into each adapter while
57
+ * leaving the caller's config object untouched. Secrets are placed at the slot
58
+ * each adapter expects — flat keys at the channel root, nested keys (dingtalk's
59
+ * `stream.clientId`/`stream.clientSecret`) under their sub-object.
60
+ */
61
+ export declare function injectSecrets(config: ChannelsConfig, enabled: readonly ChannelName[], getSecrets: (channel: ChannelName) => Promise<Record<string, string>>): Promise<ChannelsConfig>;
62
+ //# sourceMappingURL=channels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../src/settings/channels.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wDAAwD;AACxD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,CAAC;AAErE,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yFAAyF;IACzF,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,iEAAiE;IACjE,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,yEAAyE;AACzE,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;KAAE,GAAG,SAAS,CAAC;CAC9D;AAED,+EAA+E;AAC/E,MAAM,MAAM,YAAY,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;AAEhG,gFAAgF;AAChF,eAAO,MAAM,QAAQ,EAAE,SAAS,WAAW,EAA8C,CAAC;AAE1F;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,SAAS,UAAU,EACrD,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EACzC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,GAC1C,MAAM,EAAE,CAoBV;AAwBD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC3C,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxB;AA6BD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACpE,OAAO,CAAC,cAAc,CAAC,CAiBzB"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Channel orchestration for dsh-connect: a small, side-effect-free selector
3
+ * that activates a requested subset of channel adapters. Kept separate from the
4
+ * cordis entry so it is unit-testable without pulling any channel SDK.
5
+ * @module dsh-connect/settings/channels
6
+ */
7
+ /** Built-in channels, in a stable order (for docs and the default selector). */
8
+ export const CHANNELS = ["feishu", "telegram", "dingtalk", "web"];
9
+ /**
10
+ * Activate the requested adapters into `ctx` (the `connect` service is
11
+ * expected to be present via the caller's `inject`). `channels` maps a channel
12
+ * name to its plugin `apply`. Unknown names are skipped with a warning; a
13
+ * channel whose `apply` throws is caught so one broken adapter never takes the
14
+ * others down.
15
+ *
16
+ * @returns the channel names that were started.
17
+ */
18
+ export function activateChannels(ctx, config, channels) {
19
+ const cfg = config ?? {};
20
+ const defaults = cfg.channelDefaults ?? {};
21
+ const wanted = cfg.channels ?? CHANNELS;
22
+ const started = [];
23
+ for (const name of wanted) {
24
+ const apply = channels[name];
25
+ if (apply === undefined) {
26
+ ctx.logger?.warn?.(`connect: unknown channel "${name}"; skipped`);
27
+ continue;
28
+ }
29
+ try {
30
+ const overrides = cfg[name] ?? {};
31
+ apply(ctx, { ...defaults, ...overrides });
32
+ started.push(name);
33
+ }
34
+ catch (error) {
35
+ ctx.logger?.warn?.(`connect: channel "${name}" failed to start: ${String(error)}`);
36
+ }
37
+ }
38
+ return started;
39
+ }
40
+ /**
41
+ * Secret config-keys that live under a *dotted path* rather than at the channel
42
+ * config root, because the adapter reads them from a sub-object (e.g. dingtalk's
43
+ * bidirectional stream credentials read from `config.stream.clientId`). Keys
44
+ * absent from this map are injected flat. Used by `injectSecrets`.
45
+ */
46
+ const NESTED_SECRET_KEYS = {
47
+ feishu: {},
48
+ telegram: {},
49
+ dingtalk: { clientId: "stream.clientId", clientSecret: "stream.clientSecret" },
50
+ web: {},
51
+ };
52
+ /** Read a value at a dotted path (e.g. `"stream.clientId"`), undefined if absent. */
53
+ function readDotPath(obj, path) {
54
+ let node = obj;
55
+ for (const segment of path.split(".")) {
56
+ if (node === null || typeof node !== "object")
57
+ return undefined;
58
+ node = node[segment];
59
+ }
60
+ return node;
61
+ }
62
+ /**
63
+ * Extract the build-time secret values (configKey → value) that a channel config
64
+ * carries for a given secret-key map, reading each key at its *actual* config
65
+ * location (flat at the channel root, or nested per `NESTED_SECRET_KEYS` — e.g.
66
+ * dingtalk's `stream.clientId`). Only non-empty string values are returned, so it
67
+ * doubles as the source for migrating config-file secrets into the credential
68
+ * store on boot. Read-only: never mutates `config`.
69
+ */
70
+ export function extractConfigSecrets(config, channel, secretKeys) {
71
+ if (!config || typeof config !== "object")
72
+ return {};
73
+ const nested = NESTED_SECRET_KEYS[channel] ?? {};
74
+ const out = {};
75
+ for (const configKey of Object.keys(secretKeys)) {
76
+ const path = nested[configKey];
77
+ const value = path ? readDotPath(config, path) : config[configKey];
78
+ if (typeof value === "string" && value.length > 0)
79
+ out[configKey] = value;
80
+ }
81
+ return out;
82
+ }
83
+ /** Copy `secrets` into `target`, writing nested keys at their dotted path. */
84
+ function mergeSecrets(target, secrets, nested) {
85
+ for (const [key, value] of Object.entries(secrets)) {
86
+ const path = nested[key];
87
+ if (path === undefined) {
88
+ target[key] = value;
89
+ continue;
90
+ }
91
+ const segments = path.split(".");
92
+ let node = target;
93
+ for (let i = 0; i < segments.length - 1; i += 1) {
94
+ const segment = segments[i];
95
+ const next = node[segment];
96
+ if (next === null || typeof next !== "object" || Array.isArray(next)) {
97
+ node[segment] = {};
98
+ }
99
+ node = node[segment];
100
+ }
101
+ node[segments[segments.length - 1]] = value;
102
+ }
103
+ return target;
104
+ }
105
+ /**
106
+ * Return a shallow-cloned config whose enabled channels are enriched with the
107
+ * secrets returned by `getSecrets` (stored secrets win over channel config).
108
+ * Used by `apply` to feed store-backed credentials into each adapter while
109
+ * leaving the caller's config object untouched. Secrets are placed at the slot
110
+ * each adapter expects — flat keys at the channel root, nested keys (dingtalk's
111
+ * `stream.clientId`/`stream.clientSecret`) under their sub-object.
112
+ */
113
+ export async function injectSecrets(config, enabled, getSecrets) {
114
+ const out = { ...config };
115
+ for (const name of enabled) {
116
+ try {
117
+ const secrets = await getSecrets(name);
118
+ if (Object.keys(secrets).length > 0) {
119
+ // Deep-clone the channel config so we never mutate the caller's nested
120
+ // objects (e.g. `dingtalk.stream`) when writing nested secret keys.
121
+ const base = out[name] ?? {};
122
+ const cloned = structuredClone(base);
123
+ out[name] = mergeSecrets(cloned, secrets, NESTED_SECRET_KEYS[name]);
124
+ }
125
+ }
126
+ catch {
127
+ // A channel's secret resolution failing should never block activation.
128
+ }
129
+ }
130
+ return out;
131
+ }
132
+ //# sourceMappingURL=channels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../src/settings/channels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Host-side credential store for dsh-connect channels. Adapts the DSH
3
+ * `credentials` provider (`resolve/describe/set/unset`, env-style refs) into a
4
+ * per-channel interface, so secrets live in the DSH credential store instead of
5
+ * the plugin config (mirroring dsh-im's `credential-store.mjs`). The web
6
+ * settings pane reports `configured` booleans and may echo store-backed secret
7
+ * values (e.g. an appId) so an upgraded user can confirm them, but secrets
8
+ * never persist to the settings state file — the credential store is the only
9
+ * place secret values are held.
10
+ *
11
+ * @module dsh-connect/settings/credential-store
12
+ */
13
+ import { type ChannelName } from "./channels.js";
14
+ /**
15
+ * One resolved credential: the non-empty secret value plus the source layer
16
+ * that supplied it (`env`, `file`, `project-env`, `user-env`). Mirrors the
17
+ * host's `ResolvedCredential` from `@deepseek-ai/dsh-credentials`.
18
+ *
19
+ * `resolve` returns this *object*, not a bare string. Reading it as a string
20
+ * silently yields nothing — see `resolveValue`.
21
+ */
22
+ export interface ResolvedCredential {
23
+ value: string;
24
+ source: string;
25
+ }
26
+ /** The seam the DSH host provides; `describe` reports source metadata. */
27
+ export interface CredentialsProvider {
28
+ /**
29
+ * Resolve one ref to its value, or `undefined`/`null` while unconfigured.
30
+ * The host returns a `{value, source}` record; a plain string is also
31
+ * accepted so hand-written stubs stay valid.
32
+ */
33
+ resolve(ref: string): Promise<ResolvedCredential | string | null | undefined>;
34
+ describe(ref: string): Promise<{
35
+ configured: boolean;
36
+ [k: string]: unknown;
37
+ }>;
38
+ set(ref: string, value: string): Promise<void>;
39
+ unset(ref: string): Promise<void>;
40
+ }
41
+ /** Maps each channel's secret *config key* to its credential ref, so the
42
+ * settings service and activation can enrich a channel config from the store.
43
+ *
44
+ * This is the **authoritative list of refs a channel owns**: every ref that
45
+ * `save` can write appears here. A ref reachable only through
46
+ * {@link CREDENTIAL_GROUPS} would be writable-but-unclearable — `save` and
47
+ * `clear` both derive from this table for exactly that reason. */
48
+ export declare const CHANNEL_SECRET_KEYS: Record<ChannelName, Record<string, string>>;
49
+ /**
50
+ * Credential sets that satisfy a channel, as groups-of-refs.
51
+ *
52
+ * Within a group every ref must be configured; between groups any one group
53
+ * being complete is enough. The grouping exists for DingTalk, which has two
54
+ * mutually exclusive transports — webhook push (url + signing secret) and
55
+ * stream mode (client id + secret). A flat all-of list would report a
56
+ * webhook-only user as "未配置凭据" because their stream refs are empty.
57
+ *
58
+ * An empty group list means the channel needs no credentials at all, so it is
59
+ * always satisfied — `web` mirrors the DSH Web UI in-process and holds no
60
+ * secret. Reporting that as unconfigured was pure noise in the pane's badge.
61
+ */
62
+ export declare const CREDENTIAL_GROUPS: Record<ChannelName, readonly (readonly string[])[]>;
63
+ /**
64
+ * Flat, de-duplicated view of every ref named by {@link CREDENTIAL_GROUPS},
65
+ * in declaration order. Kept because existing callers and tests import it;
66
+ * new code should prefer `CHANNEL_SECRET_KEYS` for the refs a channel owns.
67
+ */
68
+ export declare const CREDENTIAL_REFS: Record<ChannelName, readonly string[]>;
69
+ /** A channel credential store bound to a DSH provider. */
70
+ export interface CredentialStore {
71
+ /**
72
+ * Whether the channel is usable, i.e. some group of {@link CREDENTIAL_GROUPS}
73
+ * is fully configured. A channel with no groups is always usable.
74
+ */
75
+ configured(channel: ChannelName): Promise<boolean>;
76
+ /** Persist a channel secret under its ref. */
77
+ save(channel: ChannelName, values: Record<string, string>): Promise<void>;
78
+ /** Read the channel's stored secrets as { configKey: value }. */
79
+ get(channel: ChannelName): Promise<Record<string, string>>;
80
+ /** Remove every ref for the channel. */
81
+ clear(channel: ChannelName): Promise<void>;
82
+ }
83
+ /** Build a per-channel credential store over a DSH `credentials` provider. */
84
+ export declare function createCredentialStore(provider: CredentialsProvider): CredentialStore;
85
+ //# sourceMappingURL=credential-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-store.d.ts","sourceRoot":"","sources":["../../src/settings/credential-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,0EAA0E;AAC1E,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC9E,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IAC9E,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAQD;;;;;;kEAMkE;AAClE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU1E,CAAC;AAEH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAQzB,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAIxB,CAAC;AAsB5C,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,8CAA8C;IAC9C,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,iEAAiE;IACjE,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3D,wCAAwC;IACxC,KAAK,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAUD,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,eAAe,CA8CpF"}