@soimy/dingtalk 3.6.1 → 3.6.2
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/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14603 -0
- package/dist/index.js.map +7 -0
- package/dist/src/access-control.d.ts +43 -0
- package/dist/src/access-control.d.ts.map +1 -0
- package/dist/src/ack-reaction/dynamic-ack-reaction-controller.d.ts +22 -0
- package/dist/src/ack-reaction/dynamic-ack-reaction-controller.d.ts.map +1 -0
- package/dist/src/ack-reaction/dynamic-ack-reaction-events.d.ts +36 -0
- package/dist/src/ack-reaction/dynamic-ack-reaction-events.d.ts.map +1 -0
- package/dist/src/ack-reaction/dynamic-ack-reaction-progress.d.ts +7 -0
- package/dist/src/ack-reaction/dynamic-ack-reaction-progress.d.ts.map +1 -0
- package/dist/src/ack-reaction-classifier.d.ts +8 -0
- package/dist/src/ack-reaction-classifier.d.ts.map +1 -0
- package/dist/src/ack-reaction-service.d.ts +15 -0
- package/dist/src/ack-reaction-service.d.ts.map +1 -0
- package/dist/src/auth.d.ts +7 -0
- package/dist/src/auth.d.ts.map +1 -0
- package/dist/src/card/card-action-handler.d.ts +14 -0
- package/dist/src/card/card-action-handler.d.ts.map +1 -0
- package/dist/src/card/card-markdown-image-reroute.d.ts +16 -0
- package/dist/src/card/card-markdown-image-reroute.d.ts.map +1 -0
- package/dist/src/card/card-run-registry.d.ts +60 -0
- package/dist/src/card/card-run-registry.d.ts.map +1 -0
- package/dist/src/card/card-stop-handler.d.ts +18 -0
- package/dist/src/card/card-stop-handler.d.ts.map +1 -0
- package/dist/src/card/card-streaming-mode.d.ts +8 -0
- package/dist/src/card/card-streaming-mode.d.ts.map +1 -0
- package/dist/src/card/card-template.d.ts +21 -0
- package/dist/src/card/card-template.d.ts.map +1 -0
- package/dist/src/card/reasoning-answer-split.d.ts +6 -0
- package/dist/src/card/reasoning-answer-split.d.ts.map +1 -0
- package/dist/src/card/reasoning-block-assembler.d.ts +7 -0
- package/dist/src/card/reasoning-block-assembler.d.ts.map +1 -0
- package/dist/src/card/statusline-renderer.d.ts +24 -0
- package/dist/src/card/statusline-renderer.d.ts.map +1 -0
- package/dist/src/card-callback-service.d.ts +23 -0
- package/dist/src/card-callback-service.d.ts.map +1 -0
- package/dist/src/card-draft-controller.d.ts +75 -0
- package/dist/src/card-draft-controller.d.ts.map +1 -0
- package/dist/src/card-service.d.ts +99 -0
- package/dist/src/card-service.d.ts.map +1 -0
- package/dist/src/channel.d.ts +10 -0
- package/dist/src/channel.d.ts.map +1 -0
- package/dist/src/command/card-stop-command.d.ts +30 -0
- package/dist/src/command/card-stop-command.d.ts.map +1 -0
- package/dist/src/command/inbound-command-dispatch-service.d.ts +40 -0
- package/dist/src/command/inbound-command-dispatch-service.d.ts.map +1 -0
- package/dist/src/config-schema.d.ts +8 -0
- package/dist/src/config-schema.d.ts.map +1 -0
- package/dist/src/config.d.ts +60 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/connection-manager.d.ts +148 -0
- package/dist/src/connection-manager.d.ts.map +1 -0
- package/dist/src/dedup.d.ts +4 -0
- package/dist/src/dedup.d.ts.map +1 -0
- package/dist/src/device-registration.d.ts +16 -0
- package/dist/src/device-registration.d.ts.map +1 -0
- package/dist/src/docs-service.d.ts +12 -0
- package/dist/src/docs-service.d.ts.map +1 -0
- package/dist/src/draft-stream-loop.d.ts +28 -0
- package/dist/src/draft-stream-loop.d.ts.map +1 -0
- package/dist/src/feedback-learning-service.d.ts +123 -0
- package/dist/src/feedback-learning-service.d.ts.map +1 -0
- package/dist/src/feedback-learning-store.d.ts +181 -0
- package/dist/src/feedback-learning-store.d.ts.map +1 -0
- package/dist/src/gateway/channel-gateway.d.ts +4 -0
- package/dist/src/gateway/channel-gateway.d.ts.map +1 -0
- package/dist/src/http-client.d.ts +9 -0
- package/dist/src/http-client.d.ts.map +1 -0
- package/dist/src/inbound-handler.d.ts +9 -0
- package/dist/src/inbound-handler.d.ts.map +1 -0
- package/dist/src/learning-command-service.d.ts +64 -0
- package/dist/src/learning-command-service.d.ts.map +1 -0
- package/dist/src/logger-context.d.ts +10 -0
- package/dist/src/logger-context.d.ts.map +1 -0
- package/dist/src/media-utils.d.ts +63 -0
- package/dist/src/media-utils.d.ts.map +1 -0
- package/dist/src/message-context-store.d.ts +126 -0
- package/dist/src/message-context-store.d.ts.map +1 -0
- package/dist/src/message-utils.d.ts +12 -0
- package/dist/src/message-utils.d.ts.map +1 -0
- package/dist/src/messaging/attachment-text-extractor.d.ts +13 -0
- package/dist/src/messaging/attachment-text-extractor.d.ts.map +1 -0
- package/dist/src/messaging/btw-deliver.d.ts +42 -0
- package/dist/src/messaging/btw-deliver.d.ts.map +1 -0
- package/dist/src/messaging/channel-actions.d.ts +3 -0
- package/dist/src/messaging/channel-actions.d.ts.map +1 -0
- package/dist/src/messaging/channel-outbound.d.ts +3 -0
- package/dist/src/messaging/channel-outbound.d.ts.map +1 -0
- package/dist/src/messaging/quoted-context.d.ts +36 -0
- package/dist/src/messaging/quoted-context.d.ts.map +1 -0
- package/dist/src/messaging/quoted-file-service.d.ts +25 -0
- package/dist/src/messaging/quoted-file-service.d.ts.map +1 -0
- package/dist/src/messaging/quoted-ref.d.ts +12 -0
- package/dist/src/messaging/quoted-ref.d.ts.map +1 -0
- package/dist/src/onboarding.d.ts +4 -0
- package/dist/src/onboarding.d.ts.map +1 -0
- package/dist/src/path-utils.d.ts +3 -0
- package/dist/src/path-utils.d.ts.map +1 -0
- package/dist/src/peer-id-registry.d.ts +35 -0
- package/dist/src/peer-id-registry.d.ts.map +1 -0
- package/dist/src/persistence-store.d.ts +27 -0
- package/dist/src/persistence-store.d.ts.map +1 -0
- package/dist/src/platform/channel-status.d.ts +3 -0
- package/dist/src/platform/channel-status.d.ts.map +1 -0
- package/dist/src/plugin-sdk-channel-actions-augment.d.ts +7 -0
- package/dist/src/plugin-sdk-channel-actions-augment.d.ts.map +1 -0
- package/dist/src/proactive-risk-registry.d.ts +22 -0
- package/dist/src/proactive-risk-registry.d.ts.map +1 -0
- package/dist/src/reply-strategy-card.d.ts +14 -0
- package/dist/src/reply-strategy-card.d.ts.map +1 -0
- package/dist/src/reply-strategy-markdown.d.ts +10 -0
- package/dist/src/reply-strategy-markdown.d.ts.map +1 -0
- package/dist/src/reply-strategy-types.d.ts +85 -0
- package/dist/src/reply-strategy-types.d.ts.map +1 -0
- package/dist/src/reply-strategy-with-reaction.d.ts +47 -0
- package/dist/src/reply-strategy-with-reaction.d.ts.map +1 -0
- package/dist/src/reply-strategy.d.ts +14 -0
- package/dist/src/reply-strategy.d.ts.map +1 -0
- package/dist/src/run-usage-store.d.ts +15 -0
- package/dist/src/run-usage-store.d.ts.map +1 -0
- package/dist/src/runtime.d.ts +4 -0
- package/dist/src/runtime.d.ts.map +1 -0
- package/dist/src/secret-input.d.ts +42 -0
- package/dist/src/secret-input.d.ts.map +1 -0
- package/dist/src/send-service.d.ts +46 -0
- package/dist/src/send-service.d.ts.map +1 -0
- package/dist/src/session-command-service.d.ts +35 -0
- package/dist/src/session-command-service.d.ts.map +1 -0
- package/dist/src/session-lock.d.ts +11 -0
- package/dist/src/session-lock.d.ts.map +1 -0
- package/dist/src/session-peer-store.d.ts +21 -0
- package/dist/src/session-peer-store.d.ts.map +1 -0
- package/dist/src/session-routing.d.ts +14 -0
- package/dist/src/session-routing.d.ts.map +1 -0
- package/dist/src/session-state.d.ts +13 -0
- package/dist/src/session-state.d.ts.map +1 -0
- package/dist/src/signature.d.ts +6 -0
- package/dist/src/signature.d.ts.map +1 -0
- package/dist/src/targeting/agent-name-matcher.d.ts +63 -0
- package/dist/src/targeting/agent-name-matcher.d.ts.map +1 -0
- package/dist/src/targeting/agent-routing.d.ts +72 -0
- package/dist/src/targeting/agent-routing.d.ts.map +1 -0
- package/dist/src/targeting/group-members-store.d.ts +3 -0
- package/dist/src/targeting/group-members-store.d.ts.map +1 -0
- package/dist/src/targeting/target-directory-adapter.d.ts +13 -0
- package/dist/src/targeting/target-directory-adapter.d.ts.map +1 -0
- package/dist/src/targeting/target-directory-store.d.ts +45 -0
- package/dist/src/targeting/target-directory-store.d.ts.map +1 -0
- package/dist/src/targeting/target-input.d.ts +3 -0
- package/dist/src/targeting/target-input.d.ts.map +1 -0
- package/dist/src/types.d.ts +730 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/utils.d.ts +54 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/index.ts +234 -16
- package/openclaw.plugin.json +5 -5
- package/package.json +26 -5
- package/src/device-registration.ts +0 -32
- package/src/gateway/channel-gateway.ts +1 -1
- package/src/onboarding.ts +3 -7
- package/src/secret-input.ts +13 -47
package/src/secret-input.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { execFile } from "node:child_process";
|
|
2
1
|
import { readFile } from "node:fs/promises";
|
|
3
|
-
import { promisify } from "node:util";
|
|
4
2
|
import { z } from "zod";
|
|
5
3
|
import { resolveRelativePath } from "./path-utils";
|
|
6
4
|
|
|
7
5
|
export type SecretInputRef = {
|
|
8
|
-
source: "env" | "file"
|
|
6
|
+
source: "env" | "file";
|
|
9
7
|
provider: string;
|
|
10
8
|
id: string;
|
|
11
9
|
};
|
|
@@ -19,13 +17,10 @@ export type SecretInputResolutionFailure = {
|
|
|
19
17
|
reason: string;
|
|
20
18
|
};
|
|
21
19
|
|
|
22
|
-
export const SECRET_INPUT_EXEC_TIMEOUT_MS = 5000;
|
|
23
|
-
|
|
24
20
|
type SecretInputLog = {
|
|
25
21
|
warn?: (message: string, data?: unknown) => void;
|
|
26
22
|
};
|
|
27
23
|
|
|
28
|
-
const execFileAsync = promisify(execFile);
|
|
29
24
|
const SECRET_INPUT_PROVIDER_PATTERN = /^[^:>]+$/;
|
|
30
25
|
const SECRET_INPUT_ID_PATTERN = /^[^>]+$/;
|
|
31
26
|
|
|
@@ -49,7 +44,7 @@ export function buildSecretInputSchema() {
|
|
|
49
44
|
return z.union([
|
|
50
45
|
z.string(),
|
|
51
46
|
z.object({
|
|
52
|
-
source: z.enum(["env", "file"
|
|
47
|
+
source: z.enum(["env", "file"]),
|
|
53
48
|
provider: z.string().min(1).max(1024).regex(SECRET_INPUT_PROVIDER_PATTERN),
|
|
54
49
|
id: z.string().min(1).max(1024).regex(SECRET_INPUT_ID_PATTERN),
|
|
55
50
|
}),
|
|
@@ -62,7 +57,7 @@ export function isSecretInputRef(value: unknown): value is SecretInputRef {
|
|
|
62
57
|
}
|
|
63
58
|
const ref = value as SecretInputRef;
|
|
64
59
|
return (
|
|
65
|
-
(ref.source === "env" || ref.source === "file"
|
|
60
|
+
(ref.source === "env" || ref.source === "file") &&
|
|
66
61
|
typeof ref.provider === "string" &&
|
|
67
62
|
ref.provider.trim().length > 0 &&
|
|
68
63
|
SECRET_INPUT_PROVIDER_PATTERN.test(ref.provider) &&
|
|
@@ -82,9 +77,9 @@ export function hasConfiguredSecretInput(value: unknown): boolean {
|
|
|
82
77
|
if (value.source === "env") {
|
|
83
78
|
return Boolean(process.env[value.id]?.trim());
|
|
84
79
|
}
|
|
85
|
-
//
|
|
86
|
-
// present. The actual filesystem
|
|
87
|
-
//
|
|
80
|
+
// File references are considered configured when the reference shape is
|
|
81
|
+
// present. The actual filesystem lookup happens at runtime so status checks
|
|
82
|
+
// can stay side-effect free.
|
|
88
83
|
return true;
|
|
89
84
|
}
|
|
90
85
|
|
|
@@ -107,7 +102,7 @@ export function parseSecretInputString(value: unknown): SecretInput | undefined
|
|
|
107
102
|
if (!trimmed) {
|
|
108
103
|
return undefined;
|
|
109
104
|
}
|
|
110
|
-
const match = trimmed.match(/^<(env|file
|
|
105
|
+
const match = trimmed.match(/^<(env|file):([^:>]+):([^>]+)>$/);
|
|
111
106
|
if (!match) {
|
|
112
107
|
return trimmed;
|
|
113
108
|
}
|
|
@@ -149,50 +144,21 @@ export async function resolveSecretInputStringWithFailure(
|
|
|
149
144
|
});
|
|
150
145
|
return { failure };
|
|
151
146
|
}
|
|
152
|
-
if (value.source === "file") {
|
|
153
|
-
try {
|
|
154
|
-
// Trust boundary: file SecretInput reads the configured local path. Use it
|
|
155
|
-
// only with trusted plugin configuration.
|
|
156
|
-
const filePath = resolveRelativePath(value.id);
|
|
157
|
-
const secret = (await readFile(filePath, "utf8")).trim();
|
|
158
|
-
if (secret) {
|
|
159
|
-
return { value: secret };
|
|
160
|
-
}
|
|
161
|
-
return { failure: buildSecretInputFailure(value, "file secret is empty") };
|
|
162
|
-
} catch (error) {
|
|
163
|
-
const failure = buildSecretInputFailure(
|
|
164
|
-
value,
|
|
165
|
-
error instanceof Error ? error.message : String(error),
|
|
166
|
-
);
|
|
167
|
-
log?.warn?.("[DingTalk][SecretInput] Failed to read file secret", {
|
|
168
|
-
provider: value.provider,
|
|
169
|
-
id: value.id,
|
|
170
|
-
error: failure.reason,
|
|
171
|
-
});
|
|
172
|
-
return { failure };
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
147
|
try {
|
|
176
|
-
// Trust boundary:
|
|
177
|
-
//
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
const result = await execFileAsync(value.provider, [value.id], {
|
|
181
|
-
encoding: "utf8",
|
|
182
|
-
timeout: SECRET_INPUT_EXEC_TIMEOUT_MS,
|
|
183
|
-
windowsHide: true,
|
|
184
|
-
});
|
|
185
|
-
const secret = String(result.stdout).trim();
|
|
148
|
+
// Trust boundary: file SecretInput reads the configured local path. Use it
|
|
149
|
+
// only with trusted plugin configuration.
|
|
150
|
+
const filePath = resolveRelativePath(value.id);
|
|
151
|
+
const secret = (await readFile(filePath, "utf8")).trim();
|
|
186
152
|
if (secret) {
|
|
187
153
|
return { value: secret };
|
|
188
154
|
}
|
|
189
|
-
return { failure: buildSecretInputFailure(value, "
|
|
155
|
+
return { failure: buildSecretInputFailure(value, "file secret is empty") };
|
|
190
156
|
} catch (error) {
|
|
191
157
|
const failure = buildSecretInputFailure(
|
|
192
158
|
value,
|
|
193
159
|
error instanceof Error ? error.message : String(error),
|
|
194
160
|
);
|
|
195
|
-
log?.warn?.("[DingTalk][SecretInput] Failed to
|
|
161
|
+
log?.warn?.("[DingTalk][SecretInput] Failed to read file secret", {
|
|
196
162
|
provider: value.provider,
|
|
197
163
|
id: value.id,
|
|
198
164
|
error: failure.reason,
|