@huo15/dingtalk-connector-pro 1.0.4 → 1.0.7

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 (142) hide show
  1. package/README.en.md +106 -384
  2. package/README.md +14 -18
  3. package/dist/index.js +17 -0
  4. package/dist/openclaw.plugin.json +498 -0
  5. package/dist/package.json +91 -0
  6. package/dist/src/channel.js +415 -0
  7. package/dist/src/config/accounts.js +182 -0
  8. package/dist/src/config/schema.js +135 -0
  9. package/dist/src/core/connection.js +561 -0
  10. package/dist/src/core/message-handler.js +1422 -0
  11. package/dist/src/core/provider.js +59 -0
  12. package/dist/src/core/state.js +49 -0
  13. package/dist/src/directory.js +53 -0
  14. package/dist/src/docs.js +209 -0
  15. package/dist/src/gateway-methods.js +360 -0
  16. package/dist/src/onboarding.js +337 -0
  17. package/dist/src/policy.js +15 -0
  18. package/dist/src/probe.js +144 -0
  19. package/dist/src/reply-dispatcher.js +435 -0
  20. package/dist/src/runtime.js +26 -0
  21. package/dist/src/sdk/helpers.js +237 -0
  22. package/dist/src/sdk/types.js +13 -0
  23. package/dist/src/secret-input.js +13 -0
  24. package/dist/src/services/media/audio.js +40 -0
  25. package/dist/src/services/media/chunk-upload.js +211 -0
  26. package/dist/src/services/media/common.js +120 -0
  27. package/dist/src/services/media/file.js +54 -0
  28. package/dist/src/services/media/image.js +59 -0
  29. package/dist/src/services/media/index.js +9 -0
  30. package/dist/src/services/media/video.js +133 -0
  31. package/dist/src/services/media.js +889 -0
  32. package/dist/src/services/messaging/card.js +234 -0
  33. package/dist/src/services/messaging/index.js +8 -0
  34. package/dist/src/services/messaging/send.js +85 -0
  35. package/dist/src/services/messaging.js +680 -0
  36. package/dist/src/targets.js +38 -0
  37. package/dist/src/types/index.js +1 -0
  38. package/dist/src/utils/agent.js +55 -0
  39. package/dist/src/utils/async.js +40 -0
  40. package/dist/src/utils/constants.js +24 -0
  41. package/dist/src/utils/http-client.js +33 -0
  42. package/dist/src/utils/index.js +7 -0
  43. package/dist/src/utils/logger.js +76 -0
  44. package/dist/src/utils/session.js +95 -0
  45. package/dist/src/utils/token.js +71 -0
  46. package/dist/src/utils/utils-legacy.js +393 -0
  47. package/index.ts +3 -3
  48. package/openclaw.plugin.json +1 -1
  49. package/package.json +16 -5
  50. package/src/channel.js +415 -0
  51. package/src/channel.ts +12 -12
  52. package/src/config/accounts.js +182 -0
  53. package/src/config/accounts.ts +2 -2
  54. package/src/config/schema.js +135 -0
  55. package/src/config/schema.ts +2 -2
  56. package/src/core/connection.js +561 -0
  57. package/src/core/connection.ts +2 -2
  58. package/src/core/message-handler.js +1422 -0
  59. package/src/core/message-handler.ts +12 -12
  60. package/src/core/provider.js +59 -0
  61. package/src/core/provider.ts +4 -4
  62. package/src/core/state.js +49 -0
  63. package/src/directory.js +53 -0
  64. package/src/directory.ts +2 -2
  65. package/src/docs.js +209 -0
  66. package/src/docs.ts +3 -3
  67. package/src/gateway-methods.js +360 -0
  68. package/src/gateway-methods.ts +5 -5
  69. package/src/onboarding.js +337 -0
  70. package/src/onboarding.ts +4 -4
  71. package/src/policy.js +15 -0
  72. package/src/policy.ts +1 -1
  73. package/src/probe.js +144 -0
  74. package/src/probe.ts +2 -2
  75. package/src/reply-dispatcher.js +435 -0
  76. package/src/reply-dispatcher.ts +9 -9
  77. package/src/runtime.js +26 -0
  78. package/src/sdk/helpers.js +237 -0
  79. package/src/sdk/helpers.ts +1 -1
  80. package/src/sdk/types.js +13 -0
  81. package/src/secret-input.js +13 -0
  82. package/src/secret-input.ts +1 -1
  83. package/src/services/media/audio.js +40 -0
  84. package/src/services/media/audio.ts +2 -2
  85. package/src/services/media/chunk-upload.js +211 -0
  86. package/src/services/media/chunk-upload.ts +2 -2
  87. package/src/services/media/common.js +120 -0
  88. package/src/services/media/common.ts +3 -3
  89. package/src/services/media/file.js +54 -0
  90. package/src/services/media/file.ts +2 -2
  91. package/src/services/media/image.js +59 -0
  92. package/src/services/media/image.ts +2 -2
  93. package/src/services/media/index.js +9 -0
  94. package/src/services/media/index.ts +6 -6
  95. package/src/services/media/video.js +133 -0
  96. package/src/services/media/video.ts +2 -2
  97. package/src/services/media.js +889 -0
  98. package/src/services/media.ts +12 -12
  99. package/src/services/messaging/card.js +234 -0
  100. package/src/services/messaging/card.ts +3 -3
  101. package/src/services/messaging/index.js +8 -0
  102. package/src/services/messaging/index.ts +3 -3
  103. package/src/services/messaging/send.js +85 -0
  104. package/src/services/messaging/send.ts +3 -3
  105. package/src/services/messaging.js +680 -0
  106. package/src/services/messaging.ts +8 -8
  107. package/src/targets.js +38 -0
  108. package/src/targets.ts +1 -1
  109. package/src/types/index.js +1 -0
  110. package/src/types/index.ts +1 -1
  111. package/src/utils/agent.js +55 -0
  112. package/src/utils/async.js +40 -0
  113. package/src/utils/constants.js +24 -0
  114. package/src/utils/http-client.js +33 -0
  115. package/src/utils/http-client.ts +1 -1
  116. package/src/utils/index.js +7 -0
  117. package/src/utils/index.ts +4 -4
  118. package/src/utils/logger.js +76 -0
  119. package/src/utils/session.js +95 -0
  120. package/src/utils/session.ts +1 -1
  121. package/src/utils/token.js +71 -0
  122. package/src/utils/token.ts +2 -2
  123. package/src/utils/utils-legacy.js +393 -0
  124. package/src/utils/utils-legacy.ts +8 -8
  125. package/CHANGELOG.md +0 -485
  126. package/SKILL.md +0 -40
  127. package/_meta.json +0 -4
  128. package/docs/AGENT_ROUTING.md +0 -335
  129. package/docs/DEAP_AGENT_GUIDE.en.md +0 -115
  130. package/docs/DEAP_AGENT_GUIDE.md +0 -115
  131. package/docs/images/dingtalk.svg +0 -1
  132. package/docs/images/image-1.png +0 -0
  133. package/docs/images/image-2.png +0 -0
  134. package/docs/images/image-3.png +0 -0
  135. package/docs/images/image-4.png +0 -0
  136. package/docs/images/image-5.png +0 -0
  137. package/docs/images/image-6.png +0 -0
  138. package/docs/images/image-7.png +0 -0
  139. package/install-beta.sh +0 -438
  140. package/install-npm.sh +0 -167
  141. package/src/hooks/init.ts +0 -16
  142. package/tsconfig.json +0 -20
@@ -0,0 +1,135 @@
1
+ import { normalizeAccountId } from "../sdk/helpers.js";
2
+ import { z } from "zod";
3
+ export { z };
4
+ import { buildSecretInputSchema } from "../secret-input.js";
5
+ const DmPolicySchema = z.enum(["open", "pairing", "allowlist"]);
6
+ const GroupPolicySchema = z.enum(["open", "allowlist", "disabled"]);
7
+ const ToolPolicySchema = z
8
+ .object({
9
+ allow: z.array(z.string()).optional(),
10
+ deny: z.array(z.string()).optional(),
11
+ })
12
+ .strict()
13
+ .optional();
14
+ /**
15
+ * Group session scope for routing DingTalk group messages.
16
+ * - "group" (default): one session per group chat
17
+ * - "group_sender": one session per (group + sender)
18
+ */
19
+ const GroupSessionScopeSchema = z
20
+ .enum(["group", "group_sender"])
21
+ .optional();
22
+ /**
23
+ * Dingtalk tools configuration.
24
+ * Controls which tool categories are enabled.
25
+ */
26
+ const DingtalkToolsConfigSchema = z
27
+ .object({
28
+ docs: z.boolean().optional(), // Document operations (default: true)
29
+ media: z.boolean().optional(), // Media upload operations (default: true)
30
+ })
31
+ .strict()
32
+ .optional();
33
+ export const DingtalkGroupSchema = z
34
+ .object({
35
+ requireMention: z.boolean().optional(),
36
+ tools: ToolPolicySchema,
37
+ enabled: z.boolean().optional(),
38
+ allowFrom: z.array(z.union([z.string(), z.number()])).optional(),
39
+ systemPrompt: z.string().optional(),
40
+ groupSessionScope: GroupSessionScopeSchema,
41
+ })
42
+ .strict();
43
+ const DingtalkSharedConfigShape = {
44
+ dmPolicy: DmPolicySchema.optional(),
45
+ allowFrom: z.array(z.union([z.string(), z.number()])).optional(),
46
+ groupPolicy: GroupPolicySchema.optional(),
47
+ groupAllowFrom: z.array(z.union([z.string(), z.number()])).optional(),
48
+ requireMention: z.boolean().optional(),
49
+ groups: z.record(z.string(), DingtalkGroupSchema.optional()).optional(),
50
+ historyLimit: z.number().int().min(0).optional(),
51
+ textChunkLimit: z.number().int().positive().optional(),
52
+ mediaMaxMb: z.number().positive().optional(),
53
+ tools: DingtalkToolsConfigSchema,
54
+ typingIndicator: z.boolean().optional(),
55
+ resolveSenderNames: z.boolean().optional(),
56
+ separateSessionByConversation: z.boolean().optional(),
57
+ sharedMemoryAcrossConversations: z.boolean().optional(),
58
+ groupSessionScope: GroupSessionScopeSchema,
59
+ asyncMode: z.boolean().optional(),
60
+ ackText: z.string().optional(),
61
+ endpoint: z.string().optional(), // DWClient gateway endpoint
62
+ debug: z.boolean().optional(), // DWClient debug mode
63
+ };
64
+ /**
65
+ * Per-account configuration.
66
+ * All fields are optional - missing fields inherit from top-level config.
67
+ */
68
+ export const DingtalkAccountConfigSchema = z
69
+ .object({
70
+ enabled: z.boolean().optional(),
71
+ name: z.string().optional(), // Display name for this account
72
+ clientId: z.union([z.string(), z.number()]).optional(),
73
+ clientSecret: buildSecretInputSchema().optional(),
74
+ ...DingtalkSharedConfigShape,
75
+ })
76
+ .strict();
77
+ /**
78
+ * Base schema (ZodObject) without superRefine, used for JSON Schema generation (Web UI).
79
+ * superRefine turns the schema into ZodEffects which is not compatible with buildChannelConfigSchema.
80
+ */
81
+ export const DingtalkConfigBaseSchema = z
82
+ .object({
83
+ enabled: z.boolean().optional(),
84
+ defaultAccount: z.string().optional(),
85
+ // Top-level credentials (backward compatible for single-account mode)
86
+ clientId: z.union([z.string(), z.number()]).optional(),
87
+ clientSecret: buildSecretInputSchema().optional(),
88
+ enableMediaUpload: z.boolean().optional(),
89
+ systemPrompt: z.string().optional(),
90
+ ...DingtalkSharedConfigShape,
91
+ dmPolicy: DmPolicySchema.optional().default("open"),
92
+ groupPolicy: GroupPolicySchema.optional().default("open"),
93
+ requireMention: z.boolean().optional().default(true),
94
+ separateSessionByConversation: z.boolean().optional().default(true),
95
+ sharedMemoryAcrossConversations: z.boolean().optional().default(false),
96
+ groupSessionScope: GroupSessionScopeSchema.optional().default("group"),
97
+ // Multi-account configuration
98
+ accounts: z.record(z.string(), DingtalkAccountConfigSchema.optional()).optional(),
99
+ })
100
+ .strict();
101
+ export const DingtalkConfigSchema = DingtalkConfigBaseSchema.superRefine((value, ctx) => {
102
+ const defaultAccount = value.defaultAccount?.trim();
103
+ if (defaultAccount && value.accounts && Object.keys(value.accounts).length > 0) {
104
+ const normalizedDefaultAccount = normalizeAccountId(defaultAccount);
105
+ if (!Object.prototype.hasOwnProperty.call(value.accounts, normalizedDefaultAccount)) {
106
+ ctx.addIssue({
107
+ code: z.ZodIssueCode.custom,
108
+ path: ["defaultAccount"],
109
+ message: `channels.dingtalk-connector.defaultAccount="${defaultAccount}" does not match a configured account key`,
110
+ });
111
+ }
112
+ }
113
+ // Validate dmPolicy and allowFrom consistency
114
+ if (value.dmPolicy === "allowlist") {
115
+ const allowFrom = value.allowFrom ?? [];
116
+ if (allowFrom.length === 0) {
117
+ ctx.addIssue({
118
+ code: z.ZodIssueCode.custom,
119
+ path: ["allowFrom"],
120
+ message: 'channels.dingtalk-connector.dmPolicy="allowlist" requires channels.dingtalk-connector.allowFrom to contain at least one entry',
121
+ });
122
+ }
123
+ }
124
+ // Validate groupPolicy and groupAllowFrom consistency
125
+ if (value.groupPolicy === "allowlist") {
126
+ const groupAllowFrom = value.groupAllowFrom ?? [];
127
+ if (groupAllowFrom.length === 0) {
128
+ ctx.addIssue({
129
+ code: z.ZodIssueCode.custom,
130
+ path: ["groupAllowFrom"],
131
+ message: 'channels.dingtalk-connector.groupPolicy="allowlist" requires channels.dingtalk-connector.groupAllowFrom to contain at least one entry',
132
+ });
133
+ }
134
+ }
135
+ });