@zhin.js/adapter-weixin-ilink 3.0.2 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +18 -40
  3. package/adapters/weixin-ilink.ts +30 -0
  4. package/lib/aes-ecb.d.ts +0 -1
  5. package/lib/aes-ecb.js +0 -1
  6. package/lib/cdn-upload.d.ts +0 -1
  7. package/lib/cdn-upload.js +0 -1
  8. package/lib/cdn-url.d.ts +0 -1
  9. package/lib/cdn-url.js +0 -1
  10. package/lib/context-store.d.ts +0 -1
  11. package/lib/context-store.js +0 -1
  12. package/lib/credentials.d.ts +0 -1
  13. package/lib/credentials.js +0 -1
  14. package/lib/endpoint.d.ts +35 -30
  15. package/lib/endpoint.js +217 -235
  16. package/lib/ilink-api.d.ts +0 -1
  17. package/lib/ilink-api.js +0 -1
  18. package/lib/ilink-config-cache.d.ts +0 -1
  19. package/lib/ilink-config-cache.js +0 -1
  20. package/lib/ilink-logger.d.ts +0 -1
  21. package/lib/ilink-logger.js +0 -1
  22. package/lib/ilink-meta.d.ts +0 -1
  23. package/lib/ilink-meta.js +0 -1
  24. package/lib/ilink-random.d.ts +0 -1
  25. package/lib/ilink-random.js +0 -1
  26. package/lib/ilink-redact.d.ts +0 -1
  27. package/lib/ilink-redact.js +0 -1
  28. package/lib/ilink-session-guard.d.ts +0 -1
  29. package/lib/ilink-session-guard.js +0 -1
  30. package/lib/ilink-types.d.ts +0 -1
  31. package/lib/ilink-types.js +0 -1
  32. package/lib/index.d.ts +4 -19
  33. package/lib/index.js +2 -37
  34. package/lib/login.d.ts +4 -6
  35. package/lib/login.js +43 -65
  36. package/lib/media-download.d.ts +0 -1
  37. package/lib/media-download.js +0 -1
  38. package/lib/mime.d.ts +0 -1
  39. package/lib/mime.js +0 -1
  40. package/lib/outbound-media.d.ts +4 -4
  41. package/lib/outbound-media.js +44 -42
  42. package/lib/pic-decrypt.d.ts +0 -1
  43. package/lib/pic-decrypt.js +0 -1
  44. package/lib/protocol.d.ts +52 -0
  45. package/lib/protocol.js +109 -0
  46. package/lib/silk-transcode.d.ts +0 -1
  47. package/lib/silk-transcode.js +0 -1
  48. package/lib/types.d.ts +2 -16
  49. package/lib/types.js +0 -1
  50. package/lib/upload.d.ts +0 -1
  51. package/lib/upload.js +0 -1
  52. package/lib/weixin-inbound.d.ts +0 -1
  53. package/lib/weixin-inbound.js +0 -1
  54. package/lib/weixin-send-media.d.ts +0 -1
  55. package/lib/weixin-send-media.js +0 -1
  56. package/lib/weixin-send.d.ts +0 -1
  57. package/lib/weixin-send.js +0 -1
  58. package/package.json +37 -46
  59. package/plugin.ts +8 -0
  60. package/schema.json +52 -0
  61. package/src/endpoint.ts +261 -279
  62. package/src/index.ts +24 -53
  63. package/src/login.ts +56 -72
  64. package/src/outbound-media.ts +56 -50
  65. package/src/protocol.ts +172 -0
  66. package/src/types.ts +6 -15
  67. package/client/LoginAssistPanel.tsx +0 -200
  68. package/client/WeixinIlinkManagement.tsx +0 -139
  69. package/client/index.tsx +0 -11
  70. package/client/tsconfig.json +0 -13
  71. package/client/utils/api.ts +0 -30
  72. package/dist/index.js +0 -29
  73. package/lib/adapter.d.ts +0 -14
  74. package/lib/adapter.d.ts.map +0 -1
  75. package/lib/adapter.js +0 -21
  76. package/lib/adapter.js.map +0 -1
  77. package/lib/aes-ecb.d.ts.map +0 -1
  78. package/lib/aes-ecb.js.map +0 -1
  79. package/lib/cdn-upload.d.ts.map +0 -1
  80. package/lib/cdn-upload.js.map +0 -1
  81. package/lib/cdn-upload.test.d.ts +0 -2
  82. package/lib/cdn-upload.test.d.ts.map +0 -1
  83. package/lib/cdn-upload.test.js +0 -150
  84. package/lib/cdn-upload.test.js.map +0 -1
  85. package/lib/cdn-url.d.ts.map +0 -1
  86. package/lib/cdn-url.js.map +0 -1
  87. package/lib/context-store.d.ts.map +0 -1
  88. package/lib/context-store.js.map +0 -1
  89. package/lib/credentials.d.ts.map +0 -1
  90. package/lib/credentials.js.map +0 -1
  91. package/lib/endpoint.d.ts.map +0 -1
  92. package/lib/endpoint.js.map +0 -1
  93. package/lib/ilink-api.d.ts.map +0 -1
  94. package/lib/ilink-api.js.map +0 -1
  95. package/lib/ilink-config-cache.d.ts.map +0 -1
  96. package/lib/ilink-config-cache.js.map +0 -1
  97. package/lib/ilink-logger.d.ts.map +0 -1
  98. package/lib/ilink-logger.js.map +0 -1
  99. package/lib/ilink-meta.d.ts.map +0 -1
  100. package/lib/ilink-meta.js.map +0 -1
  101. package/lib/ilink-random.d.ts.map +0 -1
  102. package/lib/ilink-random.js.map +0 -1
  103. package/lib/ilink-redact.d.ts.map +0 -1
  104. package/lib/ilink-redact.js.map +0 -1
  105. package/lib/ilink-session-guard.d.ts.map +0 -1
  106. package/lib/ilink-session-guard.js.map +0 -1
  107. package/lib/ilink-types.d.ts.map +0 -1
  108. package/lib/ilink-types.js.map +0 -1
  109. package/lib/index.d.ts.map +0 -1
  110. package/lib/index.js.map +0 -1
  111. package/lib/login-assist-routes.d.ts +0 -7
  112. package/lib/login-assist-routes.d.ts.map +0 -1
  113. package/lib/login-assist-routes.js +0 -29
  114. package/lib/login-assist-routes.js.map +0 -1
  115. package/lib/login.d.ts.map +0 -1
  116. package/lib/login.js.map +0 -1
  117. package/lib/media-download.d.ts.map +0 -1
  118. package/lib/media-download.js.map +0 -1
  119. package/lib/mime.d.ts.map +0 -1
  120. package/lib/mime.js.map +0 -1
  121. package/lib/mime.test.d.ts +0 -2
  122. package/lib/mime.test.d.ts.map +0 -1
  123. package/lib/mime.test.js +0 -62
  124. package/lib/mime.test.js.map +0 -1
  125. package/lib/outbound-media.d.ts.map +0 -1
  126. package/lib/outbound-media.js.map +0 -1
  127. package/lib/pic-decrypt.d.ts.map +0 -1
  128. package/lib/pic-decrypt.js.map +0 -1
  129. package/lib/routes.d.ts +0 -8
  130. package/lib/routes.d.ts.map +0 -1
  131. package/lib/routes.js +0 -29
  132. package/lib/routes.js.map +0 -1
  133. package/lib/segment-mapper.d.ts +0 -2
  134. package/lib/segment-mapper.d.ts.map +0 -1
  135. package/lib/segment-mapper.js +0 -2
  136. package/lib/segment-mapper.js.map +0 -1
  137. package/lib/silk-transcode.d.ts.map +0 -1
  138. package/lib/silk-transcode.js.map +0 -1
  139. package/lib/silk-transcode.test.d.ts +0 -2
  140. package/lib/silk-transcode.test.d.ts.map +0 -1
  141. package/lib/silk-transcode.test.js +0 -53
  142. package/lib/silk-transcode.test.js.map +0 -1
  143. package/lib/types.d.ts.map +0 -1
  144. package/lib/types.js.map +0 -1
  145. package/lib/upload.d.ts.map +0 -1
  146. package/lib/upload.js.map +0 -1
  147. package/lib/upload.test.d.ts +0 -2
  148. package/lib/upload.test.d.ts.map +0 -1
  149. package/lib/upload.test.js +0 -250
  150. package/lib/upload.test.js.map +0 -1
  151. package/lib/weixin-inbound.d.ts.map +0 -1
  152. package/lib/weixin-inbound.js.map +0 -1
  153. package/lib/weixin-send-media.d.ts.map +0 -1
  154. package/lib/weixin-send-media.js.map +0 -1
  155. package/lib/weixin-send.d.ts.map +0 -1
  156. package/lib/weixin-send.js.map +0 -1
  157. package/src/adapter.ts +0 -24
  158. package/src/login-assist-routes.ts +0 -36
  159. package/src/routes.ts +0 -39
  160. package/src/segment-mapper.ts +0 -1
package/lib/types.d.ts CHANGED
@@ -1,16 +1,2 @@
1
- export interface WeixinIlinkEndpointConfig {
2
- context: "weixin-ilink";
3
- name: string;
4
- /** 观测用 bot_agent,默认 Zhin.js/<version> */
5
- botAgent?: string;
6
- /** iLink API 根地址,默认 https://ilinkai.weixin.qq.com */
7
- baseUrl?: string;
8
- /** CDN 根地址 */
9
- cdnBaseUrl?: string;
10
- /** 长轮询超时(ms),默认 35000 */
11
- longPollTimeoutMs?: number;
12
- /** 直接配置 token(优先于侧车凭证文件) */
13
- botToken?: string;
14
- }
15
- export type { WeixinMessage, MessageItem } from "./ilink-types.js";
16
- //# sourceMappingURL=types.d.ts.map
1
+ export type { WeixinIlinkEndpointConfig, WeixinIlinkAdapterConfig, ResolvedWeixinIlinkConfig, } from './protocol.js';
2
+ export type { WeixinMessage, MessageItem } from './ilink-types.js';
package/lib/types.js CHANGED
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=types.js.map
package/lib/upload.d.ts CHANGED
@@ -40,4 +40,3 @@ export declare function uploadFileAttachmentToWeixin(params: {
40
40
  opts: WeixinApiOptions;
41
41
  cdnBaseUrl: string;
42
42
  }): Promise<UploadedFileInfo>;
43
- //# sourceMappingURL=upload.d.ts.map
package/lib/upload.js CHANGED
@@ -103,4 +103,3 @@ export async function uploadFileAttachmentToWeixin(params) {
103
103
  label: "uploadFileAttachmentToWeixin",
104
104
  });
105
105
  }
106
- //# sourceMappingURL=upload.js.map
@@ -68,4 +68,3 @@ export type WeixinInboundMediaOpts = {
68
68
  export declare function weixinMessageToMsgContext(msg: WeixinMessage, accountId: string, opts?: WeixinInboundMediaOpts): WeixinMsgContext;
69
69
  /** Extract the context_token from an inbound WeixinMsgContext. */
70
70
  export declare function getContextTokenFromMsgContext(ctx: WeixinMsgContext): string | undefined;
71
- //# sourceMappingURL=weixin-inbound.d.ts.map
@@ -198,4 +198,3 @@ export function weixinMessageToMsgContext(msg, accountId, opts) {
198
198
  export function getContextTokenFromMsgContext(ctx) {
199
199
  return ctx.context_token;
200
200
  }
201
- //# sourceMappingURL=weixin-inbound.js.map
@@ -19,4 +19,3 @@ export declare function sendWeixinMediaFile(params: {
19
19
  }): Promise<{
20
20
  messageId: string;
21
21
  }>;
22
- //# sourceMappingURL=weixin-send-media.d.ts.map
@@ -51,4 +51,3 @@ export async function sendWeixinMediaFile(params) {
51
51
  logger.info(`[weixin] sendWeixinMediaFile: file upload done filekey=${uploaded.filekey} size=${uploaded.fileSize}`);
52
52
  return sendFileMessageWeixin({ to, text, fileName, uploaded, opts });
53
53
  }
54
- //# sourceMappingURL=weixin-send-media.js.map
@@ -62,4 +62,3 @@ export declare function sendFileMessageWeixin(params: {
62
62
  }): Promise<{
63
63
  messageId: string;
64
64
  }>;
65
- //# sourceMappingURL=weixin-send.d.ts.map
@@ -178,4 +178,3 @@ export async function sendFileMessageWeixin(params) {
178
178
  };
179
179
  return sendMediaItems({ to, text, mediaItem: fileItem, opts, label: "sendFileMessageWeixin" });
180
180
  }
181
- //# sourceMappingURL=weixin-send.js.map
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@zhin.js/adapter-weixin-ilink",
3
- "version": "3.0.2",
3
+ "version": "4.0.0",
4
4
  "type": "module",
5
- "description": "Zhin.js adapter for WeChat personal account via Tencent iLink Endpoint API (ClawBot)",
5
+ "description": "Zhin.js Weixin iLink (ClawBot) adapter for Plugin Runtime (long-poll)",
6
6
  "main": "./lib/index.js",
7
7
  "types": "./lib/index.d.ts",
8
8
  "keywords": [
@@ -27,11 +27,11 @@
27
27
  "directory": "plugins/adapters/weixin-ilink"
28
28
  },
29
29
  "files": [
30
+ "adapters",
31
+ "plugin.ts",
32
+ "schema.json",
30
33
  "src",
31
34
  "lib",
32
- "client",
33
- "dist",
34
- "skills",
35
35
  "README.md",
36
36
  "CHANGELOG.md"
37
37
  ],
@@ -46,58 +46,49 @@
46
46
  "import": "./lib/index.js"
47
47
  }
48
48
  },
49
- "dependencies": {},
50
- "devDependencies": {
51
- "@radix-ui/themes": "^3.2.1",
52
- "@types/react": "^19.2.17",
53
- "@types/react-dom": "^19.2.3",
54
- "lucide-react": "^1.22.0",
55
- "radix-ui": "^1.6.2",
56
- "typescript": "^6.0.3",
57
- "zod": "^4.4.3",
58
- "@zhin.js/agent": "1.0.3",
59
- "@zhin.js/cli": "1.0.93",
60
- "@zhin.js/client": "2.0.5",
61
- "@zhin.js/contract": "1.0.3",
62
- "@zhin.js/core": "1.3.4",
63
- "@zhin.js/host-api": "2.0.5",
64
- "@zhin.js/host-router": "2.0.3",
65
- "zhin.js": "4.1.2"
49
+ "dependencies": {
50
+ "@zhin.js/adapter": "1.1.0",
51
+ "@zhin.js/core": "1.4.0",
52
+ "@zhin.js/logger": "1.0.75",
53
+ "@zhin.js/plugin-runtime": "1.1.0"
66
54
  },
67
55
  "peerDependencies": {
68
- "zod": "^4.0.0",
69
- "@zhin.js/agent": "1.0.3",
70
- "@zhin.js/client": "2.0.5",
71
- "@zhin.js/contract": "1.0.3",
72
- "@zhin.js/core": "1.3.4",
73
- "@zhin.js/host-api": "2.0.5",
74
- "@zhin.js/host-router": "2.0.3",
75
- "zhin.js": "4.1.2"
56
+ "@zhin.js/adapter": "1.1.0",
57
+ "@zhin.js/core": "1.4.0",
58
+ "@zhin.js/plugin-runtime": "1.1.0",
59
+ "zhin.js": "5.0.0"
76
60
  },
77
61
  "peerDependenciesMeta": {
78
- "@zhin.js/agent": {
79
- "optional": true
80
- },
81
- "@zhin.js/client": {
82
- "optional": true
83
- },
84
- "@zhin.js/host-api": {
85
- "optional": true
86
- },
87
- "@zhin.js/host-router": {
88
- "optional": true
89
- },
90
- "zod": {
62
+ "zhin.js": {
91
63
  "optional": true
92
64
  }
93
65
  },
66
+ "devDependencies": {
67
+ "@types/node": "^26.1.0",
68
+ "typescript": "^6.0.3",
69
+ "vitest": "^4.1.10"
70
+ },
94
71
  "ilink_appid": "bot",
95
72
  "engines": {
96
73
  "node": "^20.19.0 || >=22.12.0"
97
74
  },
75
+ "zhin": {
76
+ "protocol": 1,
77
+ "type": "plugin",
78
+ "entry": "./plugin.ts",
79
+ "engine": "^1.0.0",
80
+ "runtime": "trusted",
81
+ "features": [
82
+ {
83
+ "package": "@zhin.js/adapter",
84
+ "api": "^1.0.0"
85
+ }
86
+ ],
87
+ "plugins": []
88
+ },
98
89
  "scripts": {
99
- "build": "zhin build",
100
- "build:node": "tsc",
101
- "clean": "rimraf lib dist"
90
+ "build": "tsc",
91
+ "clean": "rimraf lib",
92
+ "test": "NODE_OPTIONS=--experimental-strip-types vitest run --root ../../.. plugins/adapters/weixin-ilink/tests"
102
93
  }
103
94
  }
package/plugin.ts ADDED
@@ -0,0 +1,8 @@
1
+ import { definePlugin } from '@zhin.js/plugin-runtime';
2
+
3
+ export default definePlugin({
4
+ name: 'weixin-ilink',
5
+ metadata: {
6
+ displayName: 'Weixin iLink Adapter',
7
+ },
8
+ });
package/schema.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "additionalProperties": false,
5
+ "properties": {
6
+ "botAgent": {
7
+ "type": "string"
8
+ },
9
+ "baseUrl": {
10
+ "type": "string",
11
+ "default": "https://ilinkai.weixin.qq.com"
12
+ },
13
+ "cdnBaseUrl": {
14
+ "type": "string",
15
+ "default": "https://novac2c.cdn.weixin.qq.com/c2c"
16
+ },
17
+ "longPollTimeoutMs": {
18
+ "type": "number",
19
+ "default": 35000
20
+ },
21
+ "endpoints": {
22
+ "type": "array",
23
+ "description": "多账号:一个插件实例挂多个 endpoint。每项与顶层字段同构(name 必填,其余覆盖顶层)",
24
+ "items": {
25
+ "type": "object",
26
+ "additionalProperties": true,
27
+ "properties": {
28
+ "name": {
29
+ "type": "string",
30
+ "description": "Weixin iLink bot name"
31
+ },
32
+ "botToken": {
33
+ "type": "string",
34
+ "description": "iLink bot token (prefer env WEIXIN_ILINK_TOKEN or sidecar credential file)"
35
+ }
36
+ },
37
+ "required": [
38
+ "name",
39
+ "botToken"
40
+ ]
41
+ }
42
+ },
43
+ "commandPrefix": {
44
+ "type": "string",
45
+ "default": "",
46
+ "description": "命令前缀(默认 '' 无前缀,任意文本按命令匹配;如 '/' 要求 / 开头)。endpoints[i] 可逐项覆盖"
47
+ }
48
+ },
49
+ "required": [
50
+ "endpoints"
51
+ ]
52
+ }