@teammy/server 0.1.3 → 0.1.5
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/main.js +705 -33
- package/dist/web/assets/Assistant-B3h2yQF3.css +1 -0
- package/dist/web/assets/Assistant-Dm_p8EZl.js +1 -0
- package/dist/web/assets/{Dashboard-CKFP7yNR.js → Dashboard-fwW9NxcC.js} +1 -1
- package/dist/web/assets/{Files-yA3LmJcB.js → Files-D-KCDWmO.js} +1 -1
- package/dist/web/assets/{Markdown-DD5hV21X.js → Markdown-oZagG-wy.js} +1 -1
- package/dist/web/assets/{Sessions-6CSHCq6e.js → Sessions-BQhGiLvz.js} +1 -1
- package/dist/web/assets/{WorkspaceTree-CeHWFFYr.js → WorkspaceTree-B9733pV3.js} +1 -1
- package/dist/web/assets/{file-links-Qi15HqFr.js → file-links-CD346_jf.js} +1 -1
- package/dist/web/assets/{index-B-MqU_88.css → index-Be5hGscJ.css} +1 -1
- package/dist/web/assets/index-BiiPuwDi.js +66 -0
- package/dist/web/index.html +2 -2
- package/node_modules/@wecom/aibot-node-sdk/README.md +786 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/api.d.ts +17 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/client.d.ts +217 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/crypto.d.ts +12 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/index.cjs.js +1563 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/index.cjs.js.map +1 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/index.d.ts +1324 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/index.esm.js +1544 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/index.esm.js.map +1 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/logger.d.ts +14 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/message-handler.d.ts +29 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/types/api.d.ts +466 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/types/common.d.ts +30 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/types/config.d.ts +34 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/types/event.d.ts +109 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/types/index.d.ts +10 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/types/message.d.ts +158 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/utils.d.ts +19 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/wecom-crypto/index.d.ts +46 -0
- package/node_modules/@wecom/aibot-node-sdk/dist/ws.d.ts +161 -0
- package/node_modules/@wecom/aibot-node-sdk/package.json +43 -0
- package/node_modules/asynckit/LICENSE +21 -0
- package/node_modules/asynckit/README.md +233 -0
- package/node_modules/asynckit/bench.js +76 -0
- package/node_modules/asynckit/index.js +6 -0
- package/node_modules/asynckit/lib/abort.js +29 -0
- package/node_modules/asynckit/lib/async.js +34 -0
- package/node_modules/asynckit/lib/defer.js +26 -0
- package/node_modules/asynckit/lib/iterate.js +75 -0
- package/node_modules/asynckit/lib/readable_asynckit.js +91 -0
- package/node_modules/asynckit/lib/readable_parallel.js +25 -0
- package/node_modules/asynckit/lib/readable_serial.js +25 -0
- package/node_modules/asynckit/lib/readable_serial_ordered.js +29 -0
- package/node_modules/asynckit/lib/state.js +37 -0
- package/node_modules/asynckit/lib/streamify.js +141 -0
- package/node_modules/asynckit/lib/terminator.js +29 -0
- package/node_modules/asynckit/package.json +63 -0
- package/node_modules/asynckit/parallel.js +43 -0
- package/node_modules/asynckit/serial.js +17 -0
- package/node_modules/asynckit/serialOrdered.js +75 -0
- package/node_modules/asynckit/stream.js +21 -0
- package/node_modules/axios/CHANGELOG.md +1934 -0
- package/node_modules/axios/LICENSE +7 -0
- package/node_modules/axios/MIGRATION_GUIDE.md +877 -0
- package/node_modules/axios/README.md +2786 -0
- package/node_modules/axios/dist/axios.js +6460 -0
- package/node_modules/axios/dist/axios.min.js +5 -0
- package/node_modules/axios/dist/axios.min.js.map +1 -0
- package/node_modules/axios/dist/browser/axios.cjs +6509 -0
- package/node_modules/axios/dist/esm/axios.js +6530 -0
- package/node_modules/axios/dist/esm/axios.min.js +3 -0
- package/node_modules/axios/dist/esm/axios.min.js.map +1 -0
- package/node_modules/axios/dist/node/axios.cjs +7491 -0
- package/node_modules/axios/index.d.cts +785 -0
- package/node_modules/axios/index.d.ts +804 -0
- package/node_modules/axios/index.js +45 -0
- package/node_modules/axios/lib/adapters/README.md +36 -0
- package/node_modules/axios/lib/adapters/adapters.js +132 -0
- package/node_modules/axios/lib/adapters/fetch.js +749 -0
- package/node_modules/axios/lib/adapters/http.js +1609 -0
- package/node_modules/axios/lib/adapters/xhr.js +384 -0
- package/node_modules/axios/lib/axios.js +89 -0
- package/node_modules/axios/lib/cancel/CancelToken.js +135 -0
- package/node_modules/axios/lib/cancel/CanceledError.js +22 -0
- package/node_modules/axios/lib/cancel/isCancel.js +5 -0
- package/node_modules/axios/lib/core/Axios.js +361 -0
- package/node_modules/axios/lib/core/AxiosError.js +278 -0
- package/node_modules/axios/lib/core/AxiosHeaders.js +487 -0
- package/node_modules/axios/lib/core/InterceptorManager.js +182 -0
- package/node_modules/axios/lib/core/README.md +8 -0
- package/node_modules/axios/lib/core/assertParamsAcyclic.js +49 -0
- package/node_modules/axios/lib/core/buildFullPath.js +76 -0
- package/node_modules/axios/lib/core/createMultipartBody.js +37 -0
- package/node_modules/axios/lib/core/dispatchRequest.js +115 -0
- package/node_modules/axios/lib/core/mergeConfig.js +237 -0
- package/node_modules/axios/lib/core/methodList.js +17 -0
- package/node_modules/axios/lib/core/setFormDataHeaders.js +27 -0
- package/node_modules/axios/lib/core/settle.js +27 -0
- package/node_modules/axios/lib/core/transformData.js +28 -0
- package/node_modules/axios/lib/defaults/index.js +178 -0
- package/node_modules/axios/lib/defaults/transitional.js +11 -0
- package/node_modules/axios/lib/env/README.md +3 -0
- package/node_modules/axios/lib/env/classes/FormData.js +2 -0
- package/node_modules/axios/lib/env/data.js +1 -0
- package/node_modules/axios/lib/helpers/AxiosTransformStream.js +165 -0
- package/node_modules/axios/lib/helpers/AxiosURLSearchParams.js +59 -0
- package/node_modules/axios/lib/helpers/Http2Sessions.js +122 -0
- package/node_modules/axios/lib/helpers/HttpStatusCode.js +88 -0
- package/node_modules/axios/lib/helpers/README.md +7 -0
- package/node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js +29 -0
- package/node_modules/axios/lib/helpers/bind.js +14 -0
- package/node_modules/axios/lib/helpers/buildURL.js +69 -0
- package/node_modules/axios/lib/helpers/callbackify.js +18 -0
- package/node_modules/axios/lib/helpers/combineURLs.js +23 -0
- package/node_modules/axios/lib/helpers/composeSignals.js +71 -0
- package/node_modules/axios/lib/helpers/cookies.js +88 -0
- package/node_modules/axios/lib/helpers/deprecatedMethod.js +31 -0
- package/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js +193 -0
- package/node_modules/axios/lib/helpers/formDataToBlob.js +113 -0
- package/node_modules/axios/lib/helpers/formDataToJSON.js +149 -0
- package/node_modules/axios/lib/helpers/formDataToStream.js +119 -0
- package/node_modules/axios/lib/helpers/fromDataURI.js +75 -0
- package/node_modules/axios/lib/helpers/isAbsoluteURL.js +19 -0
- package/node_modules/axios/lib/helpers/isAxiosError.js +14 -0
- package/node_modules/axios/lib/helpers/isURLSameOrigin.js +11 -0
- package/node_modules/axios/lib/helpers/normalizeURLForProtocolCheck.js +24 -0
- package/node_modules/axios/lib/helpers/null.js +2 -0
- package/node_modules/axios/lib/helpers/parseHeaders.js +72 -0
- package/node_modules/axios/lib/helpers/parseProtocol.js +6 -0
- package/node_modules/axios/lib/helpers/progressEventReducer.js +54 -0
- package/node_modules/axios/lib/helpers/readBlob.js +15 -0
- package/node_modules/axios/lib/helpers/resolveConfig.js +120 -0
- package/node_modules/axios/lib/helpers/sanitizeHeaderValue.js +60 -0
- package/node_modules/axios/lib/helpers/shouldBypassProxy.js +520 -0
- package/node_modules/axios/lib/helpers/speedometer.js +55 -0
- package/node_modules/axios/lib/helpers/spread.js +28 -0
- package/node_modules/axios/lib/helpers/throttle.js +45 -0
- package/node_modules/axios/lib/helpers/toFormData.js +279 -0
- package/node_modules/axios/lib/helpers/toURLEncodedForm.js +19 -0
- package/node_modules/axios/lib/helpers/trackStream.js +89 -0
- package/node_modules/axios/lib/helpers/validator.js +112 -0
- package/node_modules/axios/lib/platform/browser/classes/Blob.js +3 -0
- package/node_modules/axios/lib/platform/browser/classes/FormData.js +3 -0
- package/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js +4 -0
- package/node_modules/axios/lib/platform/browser/index.js +13 -0
- package/node_modules/axios/lib/platform/common/utils.js +52 -0
- package/node_modules/axios/lib/platform/index.js +7 -0
- package/node_modules/axios/lib/platform/node/classes/Buffer.js +11 -0
- package/node_modules/axios/lib/platform/node/classes/FormData.js +3 -0
- package/node_modules/axios/lib/platform/node/classes/URLSearchParams.js +4 -0
- package/node_modules/axios/lib/platform/node/index.js +37 -0
- package/node_modules/axios/lib/utils.js +1201 -0
- package/node_modules/axios/node_modules/agent-base/README.md +145 -0
- package/node_modules/axios/node_modules/agent-base/dist/src/index.d.ts +78 -0
- package/node_modules/axios/node_modules/agent-base/dist/src/index.js +203 -0
- package/node_modules/axios/node_modules/agent-base/dist/src/index.js.map +1 -0
- package/node_modules/axios/node_modules/agent-base/dist/src/promisify.d.ts +4 -0
- package/node_modules/axios/node_modules/agent-base/dist/src/promisify.js +18 -0
- package/node_modules/axios/node_modules/agent-base/dist/src/promisify.js.map +1 -0
- package/node_modules/axios/node_modules/agent-base/package.json +64 -0
- package/node_modules/axios/node_modules/agent-base/src/index.ts +345 -0
- package/node_modules/axios/node_modules/agent-base/src/promisify.ts +33 -0
- package/node_modules/axios/node_modules/https-proxy-agent/README.md +137 -0
- package/node_modules/axios/node_modules/https-proxy-agent/dist/agent.d.ts +30 -0
- package/node_modules/axios/node_modules/https-proxy-agent/dist/agent.js +177 -0
- package/node_modules/axios/node_modules/https-proxy-agent/dist/agent.js.map +1 -0
- package/node_modules/axios/node_modules/https-proxy-agent/dist/index.d.ts +23 -0
- package/node_modules/axios/node_modules/https-proxy-agent/dist/index.js +14 -0
- package/node_modules/axios/node_modules/https-proxy-agent/dist/index.js.map +1 -0
- package/node_modules/axios/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts +7 -0
- package/node_modules/axios/node_modules/https-proxy-agent/dist/parse-proxy-response.js +66 -0
- package/node_modules/axios/node_modules/https-proxy-agent/dist/parse-proxy-response.js.map +1 -0
- package/node_modules/axios/node_modules/https-proxy-agent/package.json +56 -0
- package/node_modules/axios/package.json +202 -0
- package/node_modules/call-bind-apply-helpers/.eslintrc +17 -0
- package/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +12 -0
- package/node_modules/call-bind-apply-helpers/.nycrc +9 -0
- package/node_modules/call-bind-apply-helpers/CHANGELOG.md +30 -0
- package/node_modules/call-bind-apply-helpers/LICENSE +21 -0
- package/node_modules/call-bind-apply-helpers/README.md +62 -0
- package/node_modules/call-bind-apply-helpers/actualApply.d.ts +1 -0
- package/node_modules/call-bind-apply-helpers/actualApply.js +10 -0
- package/node_modules/call-bind-apply-helpers/applyBind.d.ts +19 -0
- package/node_modules/call-bind-apply-helpers/applyBind.js +10 -0
- package/node_modules/call-bind-apply-helpers/functionApply.d.ts +1 -0
- package/node_modules/call-bind-apply-helpers/functionApply.js +4 -0
- package/node_modules/call-bind-apply-helpers/functionCall.d.ts +1 -0
- package/node_modules/call-bind-apply-helpers/functionCall.js +4 -0
- package/node_modules/call-bind-apply-helpers/index.d.ts +64 -0
- package/node_modules/call-bind-apply-helpers/index.js +15 -0
- package/node_modules/call-bind-apply-helpers/package.json +85 -0
- package/node_modules/call-bind-apply-helpers/reflectApply.d.ts +3 -0
- package/node_modules/call-bind-apply-helpers/reflectApply.js +4 -0
- package/node_modules/call-bind-apply-helpers/test/index.js +63 -0
- package/node_modules/call-bind-apply-helpers/tsconfig.json +9 -0
- package/node_modules/combined-stream/License +19 -0
- package/node_modules/combined-stream/Readme.md +138 -0
- package/node_modules/combined-stream/lib/combined_stream.js +208 -0
- package/node_modules/combined-stream/package.json +25 -0
- package/node_modules/delayed-stream/.npmignore +1 -0
- package/node_modules/delayed-stream/License +19 -0
- package/node_modules/delayed-stream/Makefile +7 -0
- package/node_modules/delayed-stream/Readme.md +141 -0
- package/node_modules/delayed-stream/lib/delayed_stream.js +107 -0
- package/node_modules/delayed-stream/package.json +27 -0
- package/node_modules/dunder-proto/.eslintrc +5 -0
- package/node_modules/dunder-proto/.github/FUNDING.yml +12 -0
- package/node_modules/dunder-proto/.nycrc +13 -0
- package/node_modules/dunder-proto/CHANGELOG.md +24 -0
- package/node_modules/dunder-proto/LICENSE +21 -0
- package/node_modules/dunder-proto/README.md +54 -0
- package/node_modules/dunder-proto/get.d.ts +5 -0
- package/node_modules/dunder-proto/get.js +30 -0
- package/node_modules/dunder-proto/package.json +76 -0
- package/node_modules/dunder-proto/set.d.ts +5 -0
- package/node_modules/dunder-proto/set.js +35 -0
- package/node_modules/dunder-proto/test/get.js +34 -0
- package/node_modules/dunder-proto/test/index.js +4 -0
- package/node_modules/dunder-proto/test/set.js +50 -0
- package/node_modules/dunder-proto/tsconfig.json +9 -0
- package/node_modules/es-define-property/.eslintrc +13 -0
- package/node_modules/es-define-property/.github/FUNDING.yml +12 -0
- package/node_modules/es-define-property/.nycrc +9 -0
- package/node_modules/es-define-property/CHANGELOG.md +29 -0
- package/node_modules/es-define-property/LICENSE +21 -0
- package/node_modules/es-define-property/README.md +49 -0
- package/node_modules/es-define-property/index.d.ts +3 -0
- package/node_modules/es-define-property/index.js +14 -0
- package/node_modules/es-define-property/package.json +81 -0
- package/node_modules/es-define-property/test/index.js +56 -0
- package/node_modules/es-define-property/tsconfig.json +10 -0
- package/node_modules/es-errors/.eslintrc +5 -0
- package/node_modules/es-errors/.github/FUNDING.yml +12 -0
- package/node_modules/es-errors/CHANGELOG.md +40 -0
- package/node_modules/es-errors/LICENSE +21 -0
- package/node_modules/es-errors/README.md +55 -0
- package/node_modules/es-errors/eval.d.ts +3 -0
- package/node_modules/es-errors/eval.js +4 -0
- package/node_modules/es-errors/index.d.ts +3 -0
- package/node_modules/es-errors/index.js +4 -0
- package/node_modules/es-errors/package.json +80 -0
- package/node_modules/es-errors/range.d.ts +3 -0
- package/node_modules/es-errors/range.js +4 -0
- package/node_modules/es-errors/ref.d.ts +3 -0
- package/node_modules/es-errors/ref.js +4 -0
- package/node_modules/es-errors/syntax.d.ts +3 -0
- package/node_modules/es-errors/syntax.js +4 -0
- package/node_modules/es-errors/test/index.js +19 -0
- package/node_modules/es-errors/tsconfig.json +49 -0
- package/node_modules/es-errors/type.d.ts +3 -0
- package/node_modules/es-errors/type.js +4 -0
- package/node_modules/es-errors/uri.d.ts +3 -0
- package/node_modules/es-errors/uri.js +4 -0
- package/node_modules/es-object-atoms/.eslintrc +16 -0
- package/node_modules/es-object-atoms/.github/FUNDING.yml +12 -0
- package/node_modules/es-object-atoms/CHANGELOG.md +44 -0
- package/node_modules/es-object-atoms/LICENSE +21 -0
- package/node_modules/es-object-atoms/README.md +63 -0
- package/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +3 -0
- package/node_modules/es-object-atoms/RequireObjectCoercible.js +11 -0
- package/node_modules/es-object-atoms/ToObject.d.ts +7 -0
- package/node_modules/es-object-atoms/ToObject.js +10 -0
- package/node_modules/es-object-atoms/index.d.ts +3 -0
- package/node_modules/es-object-atoms/index.js +4 -0
- package/node_modules/es-object-atoms/isObject.d.ts +3 -0
- package/node_modules/es-object-atoms/isObject.js +6 -0
- package/node_modules/es-object-atoms/package.json +79 -0
- package/node_modules/es-object-atoms/test/index.js +38 -0
- package/node_modules/es-object-atoms/tsconfig.json +7 -0
- package/node_modules/es-set-tostringtag/.eslintrc +13 -0
- package/node_modules/es-set-tostringtag/.nycrc +9 -0
- package/node_modules/es-set-tostringtag/CHANGELOG.md +67 -0
- package/node_modules/es-set-tostringtag/LICENSE +21 -0
- package/node_modules/es-set-tostringtag/README.md +53 -0
- package/node_modules/es-set-tostringtag/index.d.ts +10 -0
- package/node_modules/es-set-tostringtag/index.js +35 -0
- package/node_modules/es-set-tostringtag/package.json +78 -0
- package/node_modules/es-set-tostringtag/test/index.js +85 -0
- package/node_modules/es-set-tostringtag/tsconfig.json +9 -0
- package/node_modules/eventemitter3/LICENSE +21 -0
- package/node_modules/eventemitter3/README.md +85 -0
- package/node_modules/eventemitter3/dist/eventemitter3.esm.js +355 -0
- package/node_modules/eventemitter3/dist/eventemitter3.esm.min.js +1 -0
- package/node_modules/eventemitter3/dist/eventemitter3.esm.min.js.map +1 -0
- package/node_modules/eventemitter3/dist/eventemitter3.umd.js +363 -0
- package/node_modules/eventemitter3/dist/eventemitter3.umd.min.js +1 -0
- package/node_modules/eventemitter3/dist/eventemitter3.umd.min.js.map +1 -0
- package/node_modules/eventemitter3/index.d.ts +135 -0
- package/node_modules/eventemitter3/index.js +336 -0
- package/node_modules/eventemitter3/index.mjs +4 -0
- package/node_modules/eventemitter3/package.json +62 -0
- package/node_modules/follow-redirects/LICENSE +18 -0
- package/node_modules/follow-redirects/README.md +183 -0
- package/node_modules/follow-redirects/debug.js +15 -0
- package/node_modules/follow-redirects/http.js +1 -0
- package/node_modules/follow-redirects/https.js +1 -0
- package/node_modules/follow-redirects/index.js +714 -0
- package/node_modules/follow-redirects/package.json +58 -0
- package/node_modules/form-data/CHANGELOG.md +686 -0
- package/node_modules/form-data/License +19 -0
- package/node_modules/form-data/README.md +355 -0
- package/node_modules/form-data/index.d.ts +62 -0
- package/node_modules/form-data/lib/browser.js +4 -0
- package/node_modules/form-data/lib/form_data.js +506 -0
- package/node_modules/form-data/lib/populate.js +10 -0
- package/node_modules/form-data/package.json +82 -0
- package/node_modules/function-bind/.eslintrc +21 -0
- package/node_modules/function-bind/.github/FUNDING.yml +12 -0
- package/node_modules/function-bind/.github/SECURITY.md +3 -0
- package/node_modules/function-bind/.nycrc +13 -0
- package/node_modules/function-bind/CHANGELOG.md +136 -0
- package/node_modules/function-bind/LICENSE +20 -0
- package/node_modules/function-bind/README.md +46 -0
- package/node_modules/function-bind/implementation.js +84 -0
- package/node_modules/function-bind/index.js +5 -0
- package/node_modules/function-bind/package.json +87 -0
- package/node_modules/function-bind/test/.eslintrc +9 -0
- package/node_modules/function-bind/test/index.js +252 -0
- package/node_modules/get-intrinsic/.eslintrc +42 -0
- package/node_modules/get-intrinsic/.github/FUNDING.yml +12 -0
- package/node_modules/get-intrinsic/.nycrc +9 -0
- package/node_modules/get-intrinsic/CHANGELOG.md +186 -0
- package/node_modules/get-intrinsic/LICENSE +21 -0
- package/node_modules/get-intrinsic/README.md +71 -0
- package/node_modules/get-intrinsic/index.js +378 -0
- package/node_modules/get-intrinsic/package.json +97 -0
- package/node_modules/get-intrinsic/test/GetIntrinsic.js +274 -0
- package/node_modules/get-proto/.eslintrc +10 -0
- package/node_modules/get-proto/.github/FUNDING.yml +12 -0
- package/node_modules/get-proto/.nycrc +9 -0
- package/node_modules/get-proto/CHANGELOG.md +21 -0
- package/node_modules/get-proto/LICENSE +21 -0
- package/node_modules/get-proto/Object.getPrototypeOf.d.ts +5 -0
- package/node_modules/get-proto/Object.getPrototypeOf.js +6 -0
- package/node_modules/get-proto/README.md +50 -0
- package/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +3 -0
- package/node_modules/get-proto/Reflect.getPrototypeOf.js +4 -0
- package/node_modules/get-proto/index.d.ts +5 -0
- package/node_modules/get-proto/index.js +27 -0
- package/node_modules/get-proto/package.json +81 -0
- package/node_modules/get-proto/test/index.js +68 -0
- package/node_modules/get-proto/tsconfig.json +9 -0
- package/node_modules/gopd/.eslintrc +16 -0
- package/node_modules/gopd/.github/FUNDING.yml +12 -0
- package/node_modules/gopd/CHANGELOG.md +45 -0
- package/node_modules/gopd/LICENSE +21 -0
- package/node_modules/gopd/README.md +40 -0
- package/node_modules/gopd/gOPD.d.ts +1 -0
- package/node_modules/gopd/gOPD.js +4 -0
- package/node_modules/gopd/index.d.ts +5 -0
- package/node_modules/gopd/index.js +15 -0
- package/node_modules/gopd/package.json +77 -0
- package/node_modules/gopd/test/index.js +36 -0
- package/node_modules/gopd/tsconfig.json +9 -0
- package/node_modules/has-symbols/.eslintrc +11 -0
- package/node_modules/has-symbols/.github/FUNDING.yml +12 -0
- package/node_modules/has-symbols/.nycrc +9 -0
- package/node_modules/has-symbols/CHANGELOG.md +91 -0
- package/node_modules/has-symbols/LICENSE +21 -0
- package/node_modules/has-symbols/README.md +46 -0
- package/node_modules/has-symbols/index.d.ts +3 -0
- package/node_modules/has-symbols/index.js +14 -0
- package/node_modules/has-symbols/package.json +111 -0
- package/node_modules/has-symbols/shams.d.ts +3 -0
- package/node_modules/has-symbols/shams.js +45 -0
- package/node_modules/has-symbols/test/index.js +22 -0
- package/node_modules/has-symbols/test/shams/core-js.js +29 -0
- package/node_modules/has-symbols/test/shams/get-own-property-symbols.js +29 -0
- package/node_modules/has-symbols/test/tests.js +58 -0
- package/node_modules/has-symbols/tsconfig.json +10 -0
- package/node_modules/has-tostringtag/.eslintrc +5 -0
- package/node_modules/has-tostringtag/.github/FUNDING.yml +12 -0
- package/node_modules/has-tostringtag/.nycrc +13 -0
- package/node_modules/has-tostringtag/CHANGELOG.md +42 -0
- package/node_modules/has-tostringtag/LICENSE +21 -0
- package/node_modules/has-tostringtag/README.md +46 -0
- package/node_modules/has-tostringtag/index.d.ts +3 -0
- package/node_modules/has-tostringtag/index.js +8 -0
- package/node_modules/has-tostringtag/package.json +108 -0
- package/node_modules/has-tostringtag/shams.d.ts +3 -0
- package/node_modules/has-tostringtag/shams.js +8 -0
- package/node_modules/has-tostringtag/test/index.js +21 -0
- package/node_modules/has-tostringtag/test/shams/core-js.js +31 -0
- package/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js +30 -0
- package/node_modules/has-tostringtag/test/tests.js +15 -0
- package/node_modules/has-tostringtag/tsconfig.json +49 -0
- package/node_modules/hasown/.github/FUNDING.yml +12 -0
- package/node_modules/hasown/.nycrc +13 -0
- package/node_modules/hasown/CHANGELOG.md +58 -0
- package/node_modules/hasown/LICENSE +21 -0
- package/node_modules/hasown/README.md +40 -0
- package/node_modules/hasown/eslint.config.mjs +6 -0
- package/node_modules/hasown/index.d.ts +3 -0
- package/node_modules/hasown/index.js +8 -0
- package/node_modules/hasown/package.json +91 -0
- package/node_modules/hasown/tsconfig.json +6 -0
- package/node_modules/math-intrinsics/.eslintrc +16 -0
- package/node_modules/math-intrinsics/.github/FUNDING.yml +12 -0
- package/node_modules/math-intrinsics/CHANGELOG.md +24 -0
- package/node_modules/math-intrinsics/LICENSE +21 -0
- package/node_modules/math-intrinsics/README.md +50 -0
- package/node_modules/math-intrinsics/abs.d.ts +1 -0
- package/node_modules/math-intrinsics/abs.js +4 -0
- package/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +3 -0
- package/node_modules/math-intrinsics/constants/maxArrayLength.js +4 -0
- package/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +3 -0
- package/node_modules/math-intrinsics/constants/maxSafeInteger.js +5 -0
- package/node_modules/math-intrinsics/constants/maxValue.d.ts +3 -0
- package/node_modules/math-intrinsics/constants/maxValue.js +5 -0
- package/node_modules/math-intrinsics/floor.d.ts +1 -0
- package/node_modules/math-intrinsics/floor.js +4 -0
- package/node_modules/math-intrinsics/isFinite.d.ts +3 -0
- package/node_modules/math-intrinsics/isFinite.js +12 -0
- package/node_modules/math-intrinsics/isInteger.d.ts +3 -0
- package/node_modules/math-intrinsics/isInteger.js +16 -0
- package/node_modules/math-intrinsics/isNaN.d.ts +1 -0
- package/node_modules/math-intrinsics/isNaN.js +6 -0
- package/node_modules/math-intrinsics/isNegativeZero.d.ts +3 -0
- package/node_modules/math-intrinsics/isNegativeZero.js +6 -0
- package/node_modules/math-intrinsics/max.d.ts +1 -0
- package/node_modules/math-intrinsics/max.js +4 -0
- package/node_modules/math-intrinsics/min.d.ts +1 -0
- package/node_modules/math-intrinsics/min.js +4 -0
- package/node_modules/math-intrinsics/mod.d.ts +3 -0
- package/node_modules/math-intrinsics/mod.js +9 -0
- package/node_modules/math-intrinsics/package.json +86 -0
- package/node_modules/math-intrinsics/pow.d.ts +1 -0
- package/node_modules/math-intrinsics/pow.js +4 -0
- package/node_modules/math-intrinsics/round.d.ts +1 -0
- package/node_modules/math-intrinsics/round.js +4 -0
- package/node_modules/math-intrinsics/sign.d.ts +3 -0
- package/node_modules/math-intrinsics/sign.js +11 -0
- package/node_modules/math-intrinsics/test/index.js +192 -0
- package/node_modules/math-intrinsics/tsconfig.json +3 -0
- package/node_modules/mime-db/HISTORY.md +507 -0
- package/node_modules/mime-db/LICENSE +23 -0
- package/node_modules/mime-db/README.md +100 -0
- package/node_modules/mime-db/db.json +8519 -0
- package/node_modules/mime-db/index.js +12 -0
- package/node_modules/mime-db/package.json +60 -0
- package/node_modules/mime-types/HISTORY.md +397 -0
- package/node_modules/mime-types/LICENSE +23 -0
- package/node_modules/mime-types/README.md +113 -0
- package/node_modules/mime-types/index.js +188 -0
- package/node_modules/mime-types/package.json +44 -0
- package/node_modules/proxy-from-env/LICENSE +20 -0
- package/node_modules/proxy-from-env/README.md +163 -0
- package/node_modules/proxy-from-env/index.cjs +105 -0
- package/node_modules/proxy-from-env/index.js +103 -0
- package/node_modules/proxy-from-env/package.json +43 -0
- package/package.json +2 -1
- package/dist/web/assets/Assistant-CpCuE2gu.css +0 -1
- package/dist/web/assets/Assistant-D5WOntPC.js +0 -1
- package/dist/web/assets/index-DC8a4uzu.js +0 -66
|
@@ -0,0 +1,1324 @@
|
|
|
1
|
+
import { EventEmitter } from 'eventemitter3';
|
|
2
|
+
import { ClientOptions } from 'ws';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 通用基础类型定义
|
|
6
|
+
*/
|
|
7
|
+
/** 日志接口 */
|
|
8
|
+
interface Logger {
|
|
9
|
+
debug(message: string, ...args: any[]): void;
|
|
10
|
+
info(message: string, ...args: any[]): void;
|
|
11
|
+
warn(message: string, ...args: any[]): void;
|
|
12
|
+
error(message: string, ...args: any[]): void;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 认证失败重试次数用尽错误
|
|
16
|
+
*
|
|
17
|
+
* 当 WebSocket 认证连续失败次数达到 maxAuthFailureAttempts 时抛出。
|
|
18
|
+
* 通常表示 botId/secret 配置错误,重试无法恢复。
|
|
19
|
+
*/
|
|
20
|
+
declare class WSAuthFailureError extends Error {
|
|
21
|
+
readonly code = "WS_AUTH_FAILURE_EXHAUSTED";
|
|
22
|
+
constructor(maxAttempts: number);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 连接断开重连次数用尽错误
|
|
26
|
+
*
|
|
27
|
+
* 当 WebSocket 连接断开后重连次数达到 maxReconnectAttempts 时抛出。
|
|
28
|
+
* 通常表示网络或服务端持续不可用。
|
|
29
|
+
*/
|
|
30
|
+
declare class WSReconnectExhaustedError extends Error {
|
|
31
|
+
readonly code = "WS_RECONNECT_EXHAUSTED";
|
|
32
|
+
constructor(maxAttempts: number);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* WSClient 配置相关类型定义
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
/** WSClient 配置选项 */
|
|
40
|
+
interface WSClientOptions {
|
|
41
|
+
/** 机器人 ID(在企业微信后台获取) */
|
|
42
|
+
botId: string;
|
|
43
|
+
/** 机器人 Secret(在企业微信后台获取) */
|
|
44
|
+
secret: string;
|
|
45
|
+
/** 场景值(可选),由使用方传入 */
|
|
46
|
+
scene?: number;
|
|
47
|
+
/** 插件版本号(可选),由使用方传入 */
|
|
48
|
+
plug_version?: string;
|
|
49
|
+
/** WebSocket 重连基础延迟(毫秒),实际延迟按指数退避递增,默认 1000 */
|
|
50
|
+
reconnectInterval?: number;
|
|
51
|
+
/** 连接断开时的最大重连次数,默认 10,设为 -1 表示无限重连 */
|
|
52
|
+
maxReconnectAttempts?: number;
|
|
53
|
+
/** 认证失败时的最大重试次数,默认 5,设为 -1 表示无限重试 */
|
|
54
|
+
maxAuthFailureAttempts?: number;
|
|
55
|
+
/** 心跳间隔(毫秒),默认 30000 */
|
|
56
|
+
heartbeatInterval?: number;
|
|
57
|
+
/** 请求超时时间(毫秒),默认 10000 */
|
|
58
|
+
requestTimeout?: number;
|
|
59
|
+
/** 自定义 WebSocket 连接地址,默认 wss://openws.work.weixin.qq.com */
|
|
60
|
+
wsUrl?: string;
|
|
61
|
+
/** 传递给底层 WebSocket 的连接选项(如 TLS 证书配置 ca、cert、key、rejectUnauthorized 等) */
|
|
62
|
+
wsOptions?: ClientOptions;
|
|
63
|
+
/** 单个 req_id 的回复队列最大长度,超过后新消息将被拒绝,默认 500 */
|
|
64
|
+
maxReplyQueueSize?: number;
|
|
65
|
+
/** 自定义日志函数 */
|
|
66
|
+
logger?: Logger;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* 消息相关类型定义
|
|
71
|
+
* 按照企业微信智能机器人接收消息协议定义
|
|
72
|
+
*/
|
|
73
|
+
/** 消息类型枚举 */
|
|
74
|
+
declare enum MessageType {
|
|
75
|
+
/** 文本消息 */
|
|
76
|
+
Text = "text",
|
|
77
|
+
/** 图片消息 */
|
|
78
|
+
Image = "image",
|
|
79
|
+
/** 图文混排消息 */
|
|
80
|
+
Mixed = "mixed",
|
|
81
|
+
/** 语音消息 */
|
|
82
|
+
Voice = "voice",
|
|
83
|
+
/** 文件消息 */
|
|
84
|
+
File = "file",
|
|
85
|
+
/** 视频消息 */
|
|
86
|
+
Video = "video"
|
|
87
|
+
}
|
|
88
|
+
/** 消息发送者信息 */
|
|
89
|
+
interface MessageFrom {
|
|
90
|
+
/** 操作者的 userid */
|
|
91
|
+
userid: string;
|
|
92
|
+
}
|
|
93
|
+
/** 文本结构体 */
|
|
94
|
+
interface TextContent {
|
|
95
|
+
/** 文本消息内容 */
|
|
96
|
+
content: string;
|
|
97
|
+
}
|
|
98
|
+
/** 图片结构体 */
|
|
99
|
+
interface ImageContent {
|
|
100
|
+
/** 图片的下载 url(五分钟内有效,已加密) */
|
|
101
|
+
url: string;
|
|
102
|
+
/** 解密密钥,长连接模式下返回,每个下载链接的 aeskey 唯一 */
|
|
103
|
+
aeskey?: string;
|
|
104
|
+
}
|
|
105
|
+
/** 语音结构体 */
|
|
106
|
+
interface VoiceContent {
|
|
107
|
+
/** 语音转换成文本的内容 */
|
|
108
|
+
content: string;
|
|
109
|
+
}
|
|
110
|
+
/** 文件结构体 */
|
|
111
|
+
interface FileContent {
|
|
112
|
+
/** 文件的下载 url(五分钟内有效,已加密) */
|
|
113
|
+
url: string;
|
|
114
|
+
/** 解密密钥,长连接模式下返回,每个下载链接的 aeskey 唯一 */
|
|
115
|
+
aeskey?: string;
|
|
116
|
+
}
|
|
117
|
+
/** 视频结构体 */
|
|
118
|
+
interface VideoContent {
|
|
119
|
+
/** 视频的下载 url(五分钟内有效,已加密) */
|
|
120
|
+
url: string;
|
|
121
|
+
/** 解密密钥,长连接模式下返回,每个下载链接的 aeskey 唯一 */
|
|
122
|
+
aeskey?: string;
|
|
123
|
+
}
|
|
124
|
+
/** 图文混排子项 */
|
|
125
|
+
interface MixedMsgItem {
|
|
126
|
+
/** 图文混排中的类型:text / image */
|
|
127
|
+
msgtype: 'text' | 'image';
|
|
128
|
+
/** 文本内容(msgtype 为 text 时存在) */
|
|
129
|
+
text?: TextContent;
|
|
130
|
+
/** 图片内容(msgtype 为 image 时存在) */
|
|
131
|
+
image?: ImageContent;
|
|
132
|
+
}
|
|
133
|
+
/** 图文混排结构体 */
|
|
134
|
+
interface MixedContent {
|
|
135
|
+
/** 图文混排消息项列表 */
|
|
136
|
+
msg_item: MixedMsgItem[];
|
|
137
|
+
}
|
|
138
|
+
/** 引用结构体 */
|
|
139
|
+
interface QuoteContent {
|
|
140
|
+
/** 引用的类型:text / image / mixed / voice / file */
|
|
141
|
+
msgtype: 'text' | 'image' | 'mixed' | 'voice' | 'file';
|
|
142
|
+
/** 引用的文本内容 */
|
|
143
|
+
text?: TextContent;
|
|
144
|
+
/** 引用的图片内容 */
|
|
145
|
+
image?: ImageContent;
|
|
146
|
+
/** 引用的图文混排内容 */
|
|
147
|
+
mixed?: MixedContent;
|
|
148
|
+
/** 引用的语音内容 */
|
|
149
|
+
voice?: VoiceContent;
|
|
150
|
+
/** 引用的文件内容 */
|
|
151
|
+
file?: FileContent;
|
|
152
|
+
}
|
|
153
|
+
/** 基础消息结构 */
|
|
154
|
+
interface BaseMessage {
|
|
155
|
+
/** 本次回调的唯一性标志,用于事件排重 */
|
|
156
|
+
msgid: string;
|
|
157
|
+
/** 智能机器人 id */
|
|
158
|
+
aibotid: string;
|
|
159
|
+
/** 会话 id,仅群聊类型时返回 */
|
|
160
|
+
chatid?: string;
|
|
161
|
+
/** 会话类型:single 单聊, group 群聊 */
|
|
162
|
+
chattype: 'single' | 'group';
|
|
163
|
+
/** 事件触发者信息 */
|
|
164
|
+
from: MessageFrom;
|
|
165
|
+
/** 事件产生的时间戳 */
|
|
166
|
+
create_time?: number;
|
|
167
|
+
/** 支持主动回复消息的临时 url */
|
|
168
|
+
response_url?: string;
|
|
169
|
+
/** 消息类型 */
|
|
170
|
+
msgtype: MessageType | string;
|
|
171
|
+
/** 引用内容(若用户引用了其他消息则有该字段) */
|
|
172
|
+
quote?: QuoteContent;
|
|
173
|
+
/** 原始数据 */
|
|
174
|
+
[key: string]: any;
|
|
175
|
+
}
|
|
176
|
+
/** 文本消息 */
|
|
177
|
+
interface TextMessage extends BaseMessage {
|
|
178
|
+
msgtype: MessageType.Text;
|
|
179
|
+
/** 文本消息内容 */
|
|
180
|
+
text: TextContent;
|
|
181
|
+
}
|
|
182
|
+
/** 图片消息 */
|
|
183
|
+
interface ImageMessage extends BaseMessage {
|
|
184
|
+
msgtype: MessageType.Image;
|
|
185
|
+
/** 图片内容 */
|
|
186
|
+
image: ImageContent;
|
|
187
|
+
}
|
|
188
|
+
/** 图文混排消息 */
|
|
189
|
+
interface MixedMessage extends BaseMessage {
|
|
190
|
+
msgtype: MessageType.Mixed;
|
|
191
|
+
/** 图文混排内容 */
|
|
192
|
+
mixed: MixedContent;
|
|
193
|
+
}
|
|
194
|
+
/** 语音消息 */
|
|
195
|
+
interface VoiceMessage extends BaseMessage {
|
|
196
|
+
msgtype: MessageType.Voice;
|
|
197
|
+
/** 语音内容 */
|
|
198
|
+
voice: VoiceContent;
|
|
199
|
+
}
|
|
200
|
+
/** 文件消息 */
|
|
201
|
+
interface FileMessage extends BaseMessage {
|
|
202
|
+
msgtype: MessageType.File;
|
|
203
|
+
/** 文件内容 */
|
|
204
|
+
file: FileContent;
|
|
205
|
+
}
|
|
206
|
+
/** 视频消息 */
|
|
207
|
+
interface VideoMessage extends BaseMessage {
|
|
208
|
+
msgtype: MessageType.Video;
|
|
209
|
+
/** 视频内容 */
|
|
210
|
+
video: VideoContent;
|
|
211
|
+
}
|
|
212
|
+
/** 回复消息选项 */
|
|
213
|
+
interface ReplyOptions {
|
|
214
|
+
/** 回复的消息 ID */
|
|
215
|
+
msgid: string;
|
|
216
|
+
/** 聊天 ID */
|
|
217
|
+
chatid: string;
|
|
218
|
+
}
|
|
219
|
+
/** 发送文本消息参数 */
|
|
220
|
+
interface SendTextParams extends ReplyOptions {
|
|
221
|
+
content: string;
|
|
222
|
+
}
|
|
223
|
+
/** 发送 Markdown 消息参数 */
|
|
224
|
+
interface SendMarkdownParams extends ReplyOptions {
|
|
225
|
+
content: string;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* API 相关类型定义
|
|
230
|
+
*/
|
|
231
|
+
/** WebSocket 命令类型常量 */
|
|
232
|
+
declare const WsCmd: {
|
|
233
|
+
/** 认证订阅 */
|
|
234
|
+
readonly SUBSCRIBE: "aibot_subscribe";
|
|
235
|
+
/** 心跳 */
|
|
236
|
+
readonly HEARTBEAT: "ping";
|
|
237
|
+
/** 回复消息 */
|
|
238
|
+
readonly RESPONSE: "aibot_respond_msg";
|
|
239
|
+
/** 回复欢迎语 */
|
|
240
|
+
readonly RESPONSE_WELCOME: "aibot_respond_welcome_msg";
|
|
241
|
+
/** 更新模板卡片 */
|
|
242
|
+
readonly RESPONSE_UPDATE: "aibot_respond_update_msg";
|
|
243
|
+
/** 主动发送消息 */
|
|
244
|
+
readonly SEND_MSG: "aibot_send_msg";
|
|
245
|
+
/** 上传临时素材 - 初始化 */
|
|
246
|
+
readonly UPLOAD_MEDIA_INIT: "aibot_upload_media_init";
|
|
247
|
+
/** 上传临时素材 - 分片上传 */
|
|
248
|
+
readonly UPLOAD_MEDIA_CHUNK: "aibot_upload_media_chunk";
|
|
249
|
+
/** 上传临时素材 - 完成上传 */
|
|
250
|
+
readonly UPLOAD_MEDIA_FINISH: "aibot_upload_media_finish";
|
|
251
|
+
/** 消息推送回调 */
|
|
252
|
+
readonly CALLBACK: "aibot_msg_callback";
|
|
253
|
+
/** 事件推送回调 */
|
|
254
|
+
readonly EVENT_CALLBACK: "aibot_event_callback";
|
|
255
|
+
};
|
|
256
|
+
/**
|
|
257
|
+
* WebSocket 帧结构
|
|
258
|
+
*
|
|
259
|
+
* 发送和接收统一使用 { cmd, headers, body } 格式:
|
|
260
|
+
* - 认证发送:{ cmd: "aibot_subscribe", headers: { req_id }, body: { secret, bot_id } }
|
|
261
|
+
* - 消息推送:{ cmd: "aibot_msg_callback", headers: { req_id }, body: { msgid, msgtype, ... } }
|
|
262
|
+
* - 事件推送:{ cmd: "aibot_event_callback", headers: { req_id }, body: { event_type, ... } }
|
|
263
|
+
* - 回复消息:{ cmd: "aibot_respond_msg", headers: { req_id }, body: { msgtype, stream: { ... } } }
|
|
264
|
+
* - 回复欢迎语:{ cmd: "aibot_respond_welcome_msg", headers: { req_id }, body: { ... } }
|
|
265
|
+
* - 更新模板卡片:{ cmd: "aibot_respond_update_msg", headers: { req_id }, body: { ... } }
|
|
266
|
+
* - 心跳发送:{ cmd: "ping", headers: { req_id } }
|
|
267
|
+
* - 认证/心跳响应:{ headers: { req_id }, errcode: 0, errmsg: "ok" }
|
|
268
|
+
*/
|
|
269
|
+
interface WsFrame<T = any> {
|
|
270
|
+
/** 命令类型;认证/心跳响应时可能为空 */
|
|
271
|
+
cmd?: string;
|
|
272
|
+
/** 请求头信息 */
|
|
273
|
+
headers: {
|
|
274
|
+
req_id: string;
|
|
275
|
+
[key: string]: any;
|
|
276
|
+
};
|
|
277
|
+
/** 消息体 */
|
|
278
|
+
body?: T;
|
|
279
|
+
/** 响应错误码,认证/心跳响应时存在 */
|
|
280
|
+
errcode?: number;
|
|
281
|
+
/** 响应错误信息,认证/心跳响应时存在 */
|
|
282
|
+
errmsg?: string;
|
|
283
|
+
}
|
|
284
|
+
/** 仅包含 headers 的 WsFrame 子集,用于 reply / replyStream 等方法的参数类型 */
|
|
285
|
+
type WsFrameHeaders = Pick<WsFrame, 'headers'>;
|
|
286
|
+
/** 回复消息中的图文混排子项 */
|
|
287
|
+
interface ReplyMsgItem {
|
|
288
|
+
/** 类型:image */
|
|
289
|
+
msgtype: 'image';
|
|
290
|
+
/** 图片内容 */
|
|
291
|
+
image: {
|
|
292
|
+
/** Base64 编码的图片数据,图片(base64编码前)最大不能超过10M,支持JPG、PNG格式 */
|
|
293
|
+
base64: string;
|
|
294
|
+
/** 图片内容(base64编码前)的 MD5 值 */
|
|
295
|
+
md5: string;
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
/** 回复消息中的反馈信息 */
|
|
299
|
+
interface ReplyFeedback {
|
|
300
|
+
/** 反馈 ID,有效长度为 256 字节以内,必须是 utf-8 编码 */
|
|
301
|
+
id: string;
|
|
302
|
+
}
|
|
303
|
+
/** 流式回复消息体 */
|
|
304
|
+
interface StreamReplyBody {
|
|
305
|
+
msgtype: 'stream';
|
|
306
|
+
stream: {
|
|
307
|
+
/** 流式消息 ID,首次回复时设置,后续使用相同 ID 刷新内容 */
|
|
308
|
+
id: string;
|
|
309
|
+
/** 是否结束流式消息 */
|
|
310
|
+
finish?: boolean;
|
|
311
|
+
/** 回复内容(支持 Markdown),最长不超过 20480 个字节,必须是 utf8 编码 */
|
|
312
|
+
content?: string;
|
|
313
|
+
/** 图文混排消息列表,目前仅当 finish=true 时支持设置,最多 10 个 */
|
|
314
|
+
msg_item?: ReplyMsgItem[];
|
|
315
|
+
/** 反馈信息,首次回复时设置 */
|
|
316
|
+
feedback?: ReplyFeedback;
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
/** 欢迎语回复消息体(文本类型) */
|
|
320
|
+
interface WelcomeTextReplyBody {
|
|
321
|
+
msgtype: 'text';
|
|
322
|
+
text: {
|
|
323
|
+
/** 欢迎语文本内容 */
|
|
324
|
+
content: string;
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
/** 欢迎语回复消息体(模板卡片类型) */
|
|
328
|
+
interface WelcomeTemplateCardReplyBody {
|
|
329
|
+
msgtype: 'template_card';
|
|
330
|
+
template_card: TemplateCard;
|
|
331
|
+
}
|
|
332
|
+
/** 欢迎语回复消息体联合类型 */
|
|
333
|
+
type WelcomeReplyBody = WelcomeTextReplyBody | WelcomeTemplateCardReplyBody;
|
|
334
|
+
/** 流式消息 + 模板卡片组合回复消息体 */
|
|
335
|
+
interface StreamWithTemplateCardReplyBody {
|
|
336
|
+
msgtype: 'stream_with_template_card';
|
|
337
|
+
stream: StreamReplyBody['stream'];
|
|
338
|
+
template_card?: TemplateCard;
|
|
339
|
+
}
|
|
340
|
+
/** 卡片类型枚举 */
|
|
341
|
+
declare enum TemplateCardType {
|
|
342
|
+
/** 文本通知模版卡片 */
|
|
343
|
+
TextNotice = "text_notice",
|
|
344
|
+
/** 图文展示模版卡片 */
|
|
345
|
+
NewsNotice = "news_notice",
|
|
346
|
+
/** 按钮交互模版卡片 */
|
|
347
|
+
ButtonInteraction = "button_interaction",
|
|
348
|
+
/** 投票选择模版卡片 */
|
|
349
|
+
VoteInteraction = "vote_interaction",
|
|
350
|
+
/** 多项选择模版卡片 */
|
|
351
|
+
MultipleInteraction = "multiple_interaction"
|
|
352
|
+
}
|
|
353
|
+
/** 卡片来源样式信息 */
|
|
354
|
+
interface TemplateCardSource {
|
|
355
|
+
/** 来源图片的 url */
|
|
356
|
+
icon_url?: string;
|
|
357
|
+
/** 来源图片的描述,建议不超过 13 个字 */
|
|
358
|
+
desc?: string;
|
|
359
|
+
/** 来源文字的颜色,0(默认)灰色,1 黑色,2 红色,3 绿色 */
|
|
360
|
+
desc_color?: 0 | 1 | 2 | 3;
|
|
361
|
+
}
|
|
362
|
+
/** 卡片右上角更多操作按钮 */
|
|
363
|
+
interface TemplateCardActionMenu {
|
|
364
|
+
/** 更多操作界面的描述 */
|
|
365
|
+
desc: string;
|
|
366
|
+
/** 操作列表,长度取值范围为 [1, 3] */
|
|
367
|
+
action_list: Array<{
|
|
368
|
+
/** 操作的描述文案 */
|
|
369
|
+
text: string;
|
|
370
|
+
/** 操作 key 值,最长支持 1024 字节,不可重复 */
|
|
371
|
+
key: string;
|
|
372
|
+
}>;
|
|
373
|
+
}
|
|
374
|
+
/** 模板卡片主标题 */
|
|
375
|
+
interface TemplateCardMainTitle {
|
|
376
|
+
/** 一级标题,建议不超过 26 个字 */
|
|
377
|
+
title?: string;
|
|
378
|
+
/** 标题辅助信息,建议不超过 30 个字 */
|
|
379
|
+
desc?: string;
|
|
380
|
+
}
|
|
381
|
+
/** 关键数据样式 */
|
|
382
|
+
interface TemplateCardEmphasisContent {
|
|
383
|
+
/** 关键数据样式的数据内容,建议不超过 10 个字 */
|
|
384
|
+
title?: string;
|
|
385
|
+
/** 关键数据样式的数据描述内容,建议不超过 15 个字 */
|
|
386
|
+
desc?: string;
|
|
387
|
+
}
|
|
388
|
+
/** 引用文献样式 */
|
|
389
|
+
interface TemplateCardQuoteArea {
|
|
390
|
+
/** 引用文献样式区域点击事件,0 或不填代表没有点击事件,1 代表跳转 url,2 代表跳转小程序 */
|
|
391
|
+
type?: 0 | 1 | 2;
|
|
392
|
+
/** 点击跳转的 url,type 是 1 时必填 */
|
|
393
|
+
url?: string;
|
|
394
|
+
/** 点击跳转的小程序的 appid,type 是 2 时必填 */
|
|
395
|
+
appid?: string;
|
|
396
|
+
/** 点击跳转的小程序的 pagepath,type 是 2 时选填 */
|
|
397
|
+
pagepath?: string;
|
|
398
|
+
/** 引用文献样式的标题 */
|
|
399
|
+
title?: string;
|
|
400
|
+
/** 引用文献样式的引用文案 */
|
|
401
|
+
quote_text?: string;
|
|
402
|
+
}
|
|
403
|
+
/** 二级标题+文本列表 */
|
|
404
|
+
interface TemplateCardHorizontalContent {
|
|
405
|
+
/** 链接类型,0 或不填代表普通文本,1 代表跳转 url,3 代表点击跳转成员详情 */
|
|
406
|
+
type?: 0 | 1 | 3;
|
|
407
|
+
/** 二级标题,建议不超过 5 个字 */
|
|
408
|
+
keyname: string;
|
|
409
|
+
/** 二级文本,建议不超过 26 个字 */
|
|
410
|
+
value?: string;
|
|
411
|
+
/** 链接跳转的 url,type 是 1 时必填 */
|
|
412
|
+
url?: string;
|
|
413
|
+
/** 成员详情的 userid,type 是 3 时必填 */
|
|
414
|
+
userid?: string;
|
|
415
|
+
}
|
|
416
|
+
/** 跳转指引样式 */
|
|
417
|
+
interface TemplateCardJumpAction {
|
|
418
|
+
/** 跳转链接类型,0 或不填代表不是链接,1 代表跳转 url,2 代表跳转小程序,3 代表触发消息智能回复 */
|
|
419
|
+
type?: 0 | 1 | 2 | 3;
|
|
420
|
+
/** 跳转链接样式的文案内容,建议不超过 13 个字 */
|
|
421
|
+
title: string;
|
|
422
|
+
/** 跳转链接的 url,type 是 1 时必填 */
|
|
423
|
+
url?: string;
|
|
424
|
+
/** 跳转链接的小程序的 appid,type 是 2 时必填 */
|
|
425
|
+
appid?: string;
|
|
426
|
+
/** 跳转链接的小程序的 pagepath,type 是 2 时选填 */
|
|
427
|
+
pagepath?: string;
|
|
428
|
+
/** 智能问答问题,最长不超过 200 个字节,type 为 3 时必填 */
|
|
429
|
+
question?: string;
|
|
430
|
+
}
|
|
431
|
+
/** 整体卡片的点击跳转事件 */
|
|
432
|
+
interface TemplateCardAction {
|
|
433
|
+
/** 卡片跳转类型,0 或不填代表不是链接,1 代表跳转 url,2 代表打开小程序 */
|
|
434
|
+
type: 0 | 1 | 2;
|
|
435
|
+
/** 跳转事件的 url,type 是 1 时必填 */
|
|
436
|
+
url?: string;
|
|
437
|
+
/** 跳转事件的小程序的 appid,type 是 2 时必填 */
|
|
438
|
+
appid?: string;
|
|
439
|
+
/** 跳转事件的小程序的 pagepath,type 是 2 时选填 */
|
|
440
|
+
pagepath?: string;
|
|
441
|
+
}
|
|
442
|
+
/** 卡片二级垂直内容 */
|
|
443
|
+
interface TemplateCardVerticalContent {
|
|
444
|
+
/** 卡片二级标题,建议不超过 26 个字 */
|
|
445
|
+
title: string;
|
|
446
|
+
/** 二级普通文本,建议不超过 112 个字 */
|
|
447
|
+
desc?: string;
|
|
448
|
+
}
|
|
449
|
+
/** 图片样式 */
|
|
450
|
+
interface TemplateCardImage {
|
|
451
|
+
/** 图片的 url */
|
|
452
|
+
url: string;
|
|
453
|
+
/** 图片的宽高比,宽高比要小于 2.25,大于 1.3,不填默认 1.3 */
|
|
454
|
+
aspect_ratio?: number;
|
|
455
|
+
}
|
|
456
|
+
/** 左图右文样式 */
|
|
457
|
+
interface TemplateCardImageTextArea {
|
|
458
|
+
/** 左图右文样式区域点击事件,0 或不填代表没有点击事件,1 代表跳转 url,2 代表跳转小程序 */
|
|
459
|
+
type?: 0 | 1 | 2;
|
|
460
|
+
/** 点击跳转的 url,type 是 1 时必填 */
|
|
461
|
+
url?: string;
|
|
462
|
+
/** 点击跳转的小程序的 appid,type 是 2 时必填 */
|
|
463
|
+
appid?: string;
|
|
464
|
+
/** 点击跳转的小程序的 pagepath,type 是 2 时选填 */
|
|
465
|
+
pagepath?: string;
|
|
466
|
+
/** 左图右文样式的标题 */
|
|
467
|
+
title?: string;
|
|
468
|
+
/** 左图右文样式的描述 */
|
|
469
|
+
desc?: string;
|
|
470
|
+
/** 左图右文样式的图片 url */
|
|
471
|
+
image_url: string;
|
|
472
|
+
}
|
|
473
|
+
/** 提交按钮样式 */
|
|
474
|
+
interface TemplateCardSubmitButton {
|
|
475
|
+
/** 按钮文案,建议不超过 10 个字 */
|
|
476
|
+
text: string;
|
|
477
|
+
/** 提交按钮的 key,最长支持 1024 字节 */
|
|
478
|
+
key: string;
|
|
479
|
+
}
|
|
480
|
+
/** 下拉式选择器 */
|
|
481
|
+
interface TemplateCardSelectionItem {
|
|
482
|
+
/** 下拉式选择器题目的 key,最长支持 1024 字节,不可重复 */
|
|
483
|
+
question_key: string;
|
|
484
|
+
/** 选择器的标题,建议不超过 13 个字 */
|
|
485
|
+
title?: string;
|
|
486
|
+
/** 是否不可选,false 为可选,true 为不可选(仅更新模版卡片时有效) */
|
|
487
|
+
disable?: boolean;
|
|
488
|
+
/** 默认选定的 id,不填或错填默认第一个 */
|
|
489
|
+
selected_id?: string;
|
|
490
|
+
/** 选项列表,不超过 10 个,最少 1 个 */
|
|
491
|
+
option_list: Array<{
|
|
492
|
+
/** 选项 id,最长支持 128 字节,不可重复 */
|
|
493
|
+
id: string;
|
|
494
|
+
/** 选项文案,建议不超过 10 个字 */
|
|
495
|
+
text: string;
|
|
496
|
+
}>;
|
|
497
|
+
}
|
|
498
|
+
/** 模板卡片按钮 */
|
|
499
|
+
interface TemplateCardButton {
|
|
500
|
+
/** 按钮文案,建议不超过 10 个字 */
|
|
501
|
+
text: string;
|
|
502
|
+
/** 按钮样式,1~4,不填或错填默认 1 */
|
|
503
|
+
style?: number;
|
|
504
|
+
/** 按钮 key 值,最长支持 1024 字节,不可重复 */
|
|
505
|
+
key: string;
|
|
506
|
+
}
|
|
507
|
+
/** 选择题样式(投票选择) */
|
|
508
|
+
interface TemplateCardCheckbox {
|
|
509
|
+
/** 选择题 key 值,最长支持 1024 字节 */
|
|
510
|
+
question_key: string;
|
|
511
|
+
/** 是否不可选,false 为可选,true 为不可选(仅更新模版卡片时有效) */
|
|
512
|
+
disable?: boolean;
|
|
513
|
+
/** 选择题模式,单选:0,多选:1,不填默认 0 */
|
|
514
|
+
mode?: 0 | 1;
|
|
515
|
+
/** 选项列表,不超过 20 个,最少 1 个 */
|
|
516
|
+
option_list: Array<{
|
|
517
|
+
/** 选项 id,最长支持 128 字节,不可重复 */
|
|
518
|
+
id: string;
|
|
519
|
+
/** 选项文案描述,建议不超过 11 个字 */
|
|
520
|
+
text: string;
|
|
521
|
+
/** 该选项是否默认选中 */
|
|
522
|
+
is_checked?: boolean;
|
|
523
|
+
}>;
|
|
524
|
+
}
|
|
525
|
+
/** 模板卡片结构(通用类型,包含所有可能的字段) */
|
|
526
|
+
interface TemplateCard {
|
|
527
|
+
/** 卡片类型 */
|
|
528
|
+
card_type: string;
|
|
529
|
+
/** 卡片来源样式信息 */
|
|
530
|
+
source?: TemplateCardSource;
|
|
531
|
+
/** 卡片右上角更多操作按钮 */
|
|
532
|
+
action_menu?: TemplateCardActionMenu;
|
|
533
|
+
/** 模版卡片的主要内容 */
|
|
534
|
+
main_title?: TemplateCardMainTitle;
|
|
535
|
+
/** 关键数据样式,建议不与引用样式共用 */
|
|
536
|
+
emphasis_content?: TemplateCardEmphasisContent;
|
|
537
|
+
/** 引用文献样式,建议不与关键数据共用 */
|
|
538
|
+
quote_area?: TemplateCardQuoteArea;
|
|
539
|
+
/** 二级普通文本,建议不超过 112 个字 */
|
|
540
|
+
sub_title_text?: string;
|
|
541
|
+
/** 二级标题+文本列表,列表长度不超过 6 */
|
|
542
|
+
horizontal_content_list?: TemplateCardHorizontalContent[];
|
|
543
|
+
/** 跳转指引样式的列表,列表长度不超过 3 */
|
|
544
|
+
jump_list?: TemplateCardJumpAction[];
|
|
545
|
+
/** 整体卡片的点击跳转事件 */
|
|
546
|
+
card_action?: TemplateCardAction;
|
|
547
|
+
/** 图片样式(news_notice 类型卡片使用) */
|
|
548
|
+
card_image?: TemplateCardImage;
|
|
549
|
+
/** 左图右文样式(news_notice 类型卡片使用) */
|
|
550
|
+
image_text_area?: TemplateCardImageTextArea;
|
|
551
|
+
/** 卡片二级垂直内容,列表长度不超过 4(news_notice 类型卡片使用) */
|
|
552
|
+
vertical_content_list?: TemplateCardVerticalContent[];
|
|
553
|
+
/** 下拉式的选择器(button_interaction 类型卡片使用) */
|
|
554
|
+
button_selection?: TemplateCardSelectionItem;
|
|
555
|
+
/** 按钮列表,列表长度不超过 6(button_interaction 类型卡片使用) */
|
|
556
|
+
button_list?: TemplateCardButton[];
|
|
557
|
+
/** 选择题样式(vote_interaction 类型卡片使用) */
|
|
558
|
+
checkbox?: TemplateCardCheckbox;
|
|
559
|
+
/** 下拉式选择器列表,最多支持 3 个(multiple_interaction 类型卡片使用) */
|
|
560
|
+
select_list?: TemplateCardSelectionItem[];
|
|
561
|
+
/** 提交按钮样式(vote_interaction / multiple_interaction 类型卡片使用) */
|
|
562
|
+
submit_button?: TemplateCardSubmitButton;
|
|
563
|
+
/** 任务 ID,同一个机器人不能重复,只能由数字、字母和"_-@"组成,最长 128 字节 */
|
|
564
|
+
task_id?: string;
|
|
565
|
+
/** 反馈信息 */
|
|
566
|
+
feedback?: ReplyFeedback;
|
|
567
|
+
}
|
|
568
|
+
/** 模板卡片回复消息体 */
|
|
569
|
+
interface TemplateCardReplyBody {
|
|
570
|
+
/** 消息类型,固定值 template_card */
|
|
571
|
+
msgtype: 'template_card';
|
|
572
|
+
/** 模板卡片内容 */
|
|
573
|
+
template_card: TemplateCard;
|
|
574
|
+
}
|
|
575
|
+
/** 模板卡片回复消息体 */
|
|
576
|
+
interface TemplateCardReplyBody {
|
|
577
|
+
/** 消息类型,固定值 template_card */
|
|
578
|
+
msgtype: 'template_card';
|
|
579
|
+
/** 模板卡片内容 */
|
|
580
|
+
template_card: TemplateCard;
|
|
581
|
+
}
|
|
582
|
+
/** 主动发送 Markdown 消息体 */
|
|
583
|
+
interface SendMarkdownMsgBody {
|
|
584
|
+
/** 消息类型,固定值 markdown */
|
|
585
|
+
msgtype: 'markdown';
|
|
586
|
+
/** markdown 消息内容 */
|
|
587
|
+
markdown: {
|
|
588
|
+
/** markdown 文本内容 */
|
|
589
|
+
content: string;
|
|
590
|
+
};
|
|
591
|
+
}
|
|
592
|
+
/** 主动发送模板卡片消息体 */
|
|
593
|
+
interface SendTemplateCardMsgBody {
|
|
594
|
+
/** 消息类型,固定值 template_card */
|
|
595
|
+
msgtype: 'template_card';
|
|
596
|
+
/** 模板卡片内容 */
|
|
597
|
+
template_card: TemplateCard;
|
|
598
|
+
}
|
|
599
|
+
/** 主动发送消息体联合类型 */
|
|
600
|
+
type SendMsgBody = SendMarkdownMsgBody | SendTemplateCardMsgBody | SendMediaMsgBody;
|
|
601
|
+
/** 更新模板卡片消息体 */
|
|
602
|
+
interface UpdateTemplateCardBody {
|
|
603
|
+
/** 响应类型,固定值 update_template_card */
|
|
604
|
+
response_type: 'update_template_card';
|
|
605
|
+
/** 要替换模版卡片消息的 userid 列表。若不填,则表示替换当前消息涉及到的所有用户 */
|
|
606
|
+
userids?: string[];
|
|
607
|
+
/** 要替换的模版卡片内容 */
|
|
608
|
+
template_card: TemplateCard;
|
|
609
|
+
}
|
|
610
|
+
/** 更新模板卡片消息体 */
|
|
611
|
+
interface UpdateTemplateCardBody {
|
|
612
|
+
/** 响应类型,固定值 update_template_card */
|
|
613
|
+
response_type: 'update_template_card';
|
|
614
|
+
/** 要替换模版卡片消息的 userid 列表。若不填,则表示替换当前消息涉及到的所有用户 */
|
|
615
|
+
userids?: string[];
|
|
616
|
+
/** 要替换的模版卡片内容 */
|
|
617
|
+
template_card: TemplateCard;
|
|
618
|
+
}
|
|
619
|
+
/** 企业微信媒体类型 */
|
|
620
|
+
type WeComMediaType = 'file' | 'image' | 'voice' | 'video';
|
|
621
|
+
/** 媒体消息发送体(主动发送 + 被动回复共用) */
|
|
622
|
+
interface SendMediaMsgBody {
|
|
623
|
+
/** 消息类型 */
|
|
624
|
+
msgtype: WeComMediaType;
|
|
625
|
+
/** 文件消息 */
|
|
626
|
+
file?: {
|
|
627
|
+
media_id: string;
|
|
628
|
+
};
|
|
629
|
+
/** 图片消息 */
|
|
630
|
+
image?: {
|
|
631
|
+
media_id: string;
|
|
632
|
+
};
|
|
633
|
+
/** 语音消息 */
|
|
634
|
+
voice?: {
|
|
635
|
+
media_id: string;
|
|
636
|
+
};
|
|
637
|
+
/** 视频消息 */
|
|
638
|
+
video?: {
|
|
639
|
+
media_id: string;
|
|
640
|
+
/** 视频消息的标题,不超过128个字节,超过会自动截断 */
|
|
641
|
+
title?: string;
|
|
642
|
+
/** 视频消息的描述,不超过512个字节,超过会自动截断 */
|
|
643
|
+
description?: string;
|
|
644
|
+
};
|
|
645
|
+
}
|
|
646
|
+
/** 上传素材初始化请求 body */
|
|
647
|
+
interface UploadMediaInitBody {
|
|
648
|
+
/** 素材类型 */
|
|
649
|
+
type: WeComMediaType;
|
|
650
|
+
/** 文件名 */
|
|
651
|
+
filename: string;
|
|
652
|
+
/** 文件总大小(字节) */
|
|
653
|
+
total_size: number;
|
|
654
|
+
/** 分片总数 */
|
|
655
|
+
total_chunks: number;
|
|
656
|
+
/** 文件 MD5 值(可选) */
|
|
657
|
+
md5?: string;
|
|
658
|
+
}
|
|
659
|
+
/** 上传素材初始化响应 body */
|
|
660
|
+
interface UploadMediaInitResult {
|
|
661
|
+
/** 上传会话 ID */
|
|
662
|
+
upload_id: string;
|
|
663
|
+
}
|
|
664
|
+
/** 上传素材分片请求 body */
|
|
665
|
+
interface UploadMediaChunkBody {
|
|
666
|
+
/** 上传会话 ID */
|
|
667
|
+
upload_id: string;
|
|
668
|
+
/** 分片索引(从 1 开始) */
|
|
669
|
+
chunk_index: number;
|
|
670
|
+
/** 分片数据(Base64 编码) */
|
|
671
|
+
base64_data: string;
|
|
672
|
+
}
|
|
673
|
+
/** 完成上传请求 body */
|
|
674
|
+
interface UploadMediaFinishBody {
|
|
675
|
+
/** 上传会话 ID */
|
|
676
|
+
upload_id: string;
|
|
677
|
+
}
|
|
678
|
+
/** 完成上传响应 body */
|
|
679
|
+
interface UploadMediaFinishResult {
|
|
680
|
+
/** 素材类型 */
|
|
681
|
+
type: WeComMediaType;
|
|
682
|
+
/** 临时素材 media_id,3天内有效 */
|
|
683
|
+
media_id: string;
|
|
684
|
+
/** 创建时间 */
|
|
685
|
+
created_at: string;
|
|
686
|
+
}
|
|
687
|
+
/** uploadMedia 方法选项 */
|
|
688
|
+
interface UploadMediaOptions {
|
|
689
|
+
/** 素材类型 */
|
|
690
|
+
type: WeComMediaType;
|
|
691
|
+
/** 文件名 */
|
|
692
|
+
filename: string;
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
/**
|
|
696
|
+
* 事件相关类型定义
|
|
697
|
+
*/
|
|
698
|
+
|
|
699
|
+
/** 事件类型枚举 */
|
|
700
|
+
declare enum EventType {
|
|
701
|
+
/** 进入会话事件:用户当天首次进入机器人单聊会话 */
|
|
702
|
+
EnterChat = "enter_chat",
|
|
703
|
+
/** 模板卡片事件:用户点击模板卡片按钮 */
|
|
704
|
+
TemplateCardEvent = "template_card_event",
|
|
705
|
+
/** 用户反馈事件:用户对机器人回复进行反馈 */
|
|
706
|
+
FeedbackEvent = "feedback_event",
|
|
707
|
+
/** 连接断开事件:有新连接建立时,服务端向旧连接发送此事件并主动断开 */
|
|
708
|
+
Disconnected = "disconnected_event"
|
|
709
|
+
}
|
|
710
|
+
/** 事件发送者信息(比 MessageFrom 多了 corpid 字段) */
|
|
711
|
+
interface EventFrom {
|
|
712
|
+
/** 事件触发者的 userid */
|
|
713
|
+
userid: string;
|
|
714
|
+
/** 事件触发者的 corpid,企业内部机器人不返回 */
|
|
715
|
+
corpid?: string;
|
|
716
|
+
}
|
|
717
|
+
/** 进入会话事件 */
|
|
718
|
+
interface EnterChatEvent {
|
|
719
|
+
/** 事件类型 */
|
|
720
|
+
eventtype: EventType.EnterChat;
|
|
721
|
+
}
|
|
722
|
+
/** 模板卡片事件 */
|
|
723
|
+
interface TemplateCardEventData {
|
|
724
|
+
/** 事件类型 */
|
|
725
|
+
eventtype: EventType.TemplateCardEvent;
|
|
726
|
+
/** 用户点击的按钮 key */
|
|
727
|
+
event_key?: string;
|
|
728
|
+
/** 任务 ID */
|
|
729
|
+
task_id?: string;
|
|
730
|
+
}
|
|
731
|
+
/** 用户反馈事件 */
|
|
732
|
+
interface FeedbackEventData {
|
|
733
|
+
/** 事件类型 */
|
|
734
|
+
eventtype: EventType.FeedbackEvent;
|
|
735
|
+
}
|
|
736
|
+
/** 连接断开事件:有新连接建立时,服务端向旧连接推送此事件并主动断开旧连接 */
|
|
737
|
+
interface DisconnectedEventData {
|
|
738
|
+
/** 事件类型 */
|
|
739
|
+
eventtype: EventType.Disconnected;
|
|
740
|
+
}
|
|
741
|
+
/** 事件内容联合类型 */
|
|
742
|
+
type EventContent = EnterChatEvent | TemplateCardEventData | FeedbackEventData | DisconnectedEventData;
|
|
743
|
+
/** 事件回调消息结构 */
|
|
744
|
+
interface EventMessage {
|
|
745
|
+
/** 本次回调的唯一性标志,用于事件排重 */
|
|
746
|
+
msgid: string;
|
|
747
|
+
/** 事件产生的时间戳 */
|
|
748
|
+
create_time: number;
|
|
749
|
+
/** 智能机器人 id */
|
|
750
|
+
aibotid: string;
|
|
751
|
+
/** 会话 id,仅群聊类型时返回 */
|
|
752
|
+
chatid?: string;
|
|
753
|
+
/** 会话类型:single 单聊, group 群聊 */
|
|
754
|
+
chattype?: 'single' | 'group';
|
|
755
|
+
/** 事件触发者信息 */
|
|
756
|
+
from: EventFrom;
|
|
757
|
+
/** 消息类型,事件回调固定为 event */
|
|
758
|
+
msgtype: 'event';
|
|
759
|
+
/** 事件内容 */
|
|
760
|
+
event: EventContent;
|
|
761
|
+
}
|
|
762
|
+
/** 带有特定事件类型的事件消息 */
|
|
763
|
+
type EventMessageWith<E extends EventContent> = Omit<EventMessage, 'event'> & {
|
|
764
|
+
event: E;
|
|
765
|
+
};
|
|
766
|
+
/** WSClient 事件映射类型 */
|
|
767
|
+
interface WSClientEventMap {
|
|
768
|
+
/** 收到消息(所有类型),body 为 BaseMessage */
|
|
769
|
+
message: (data: WsFrame<BaseMessage>) => void;
|
|
770
|
+
/** 收到文本消息,body 为 TextMessage */
|
|
771
|
+
'message.text': (data: WsFrame<TextMessage>) => void;
|
|
772
|
+
/** 收到图片消息,body 为 ImageMessage */
|
|
773
|
+
'message.image': (data: WsFrame<ImageMessage>) => void;
|
|
774
|
+
/** 收到图文混排消息,body 为 MixedMessage */
|
|
775
|
+
'message.mixed': (data: WsFrame<MixedMessage>) => void;
|
|
776
|
+
/** 收到语音消息,body 为 VoiceMessage */
|
|
777
|
+
'message.voice': (data: WsFrame<VoiceMessage>) => void;
|
|
778
|
+
/** 收到文件消息,body 为 FileMessage */
|
|
779
|
+
'message.file': (data: WsFrame<FileMessage>) => void;
|
|
780
|
+
/** 收到视频消息,body 为 VideoMessage */
|
|
781
|
+
'message.video': (data: WsFrame<VideoMessage>) => void;
|
|
782
|
+
/** 收到事件回调(所有事件类型),body 为 EventMessage */
|
|
783
|
+
event: (data: WsFrame<EventMessage>) => void;
|
|
784
|
+
/** 收到进入会话事件,body 为 EventMessage(event 字段为 EnterChatEvent) */
|
|
785
|
+
'event.enter_chat': (data: WsFrame<EventMessageWith<EnterChatEvent>>) => void;
|
|
786
|
+
/** 收到模板卡片事件,body 为 EventMessage(event 字段为 TemplateCardEventData) */
|
|
787
|
+
'event.template_card_event': (data: WsFrame<EventMessageWith<TemplateCardEventData>>) => void;
|
|
788
|
+
/** 收到用户反馈事件,body 为 EventMessage(event 字段为 FeedbackEventData) */
|
|
789
|
+
'event.feedback_event': (data: WsFrame<EventMessageWith<FeedbackEventData>>) => void;
|
|
790
|
+
/** 收到连接断开事件:有新连接建立,服务端主动断开当前旧连接 */
|
|
791
|
+
'event.disconnected_event': (data: WsFrame<EventMessageWith<DisconnectedEventData>>) => void;
|
|
792
|
+
/** 连接建立 */
|
|
793
|
+
connected: () => void;
|
|
794
|
+
/** 认证成功 */
|
|
795
|
+
authenticated: () => void;
|
|
796
|
+
/** 连接断开 */
|
|
797
|
+
disconnected: (reason: string) => void;
|
|
798
|
+
/** 重连中 */
|
|
799
|
+
reconnecting: (attempt: number) => void;
|
|
800
|
+
/** 发生错误 */
|
|
801
|
+
error: (error: Error) => void;
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
/**
|
|
805
|
+
* 企业微信 API 客户端
|
|
806
|
+
* 仅负责文件下载等 HTTP 辅助功能,消息收发均走 WebSocket 通道
|
|
807
|
+
*/
|
|
808
|
+
declare class WeComApiClient {
|
|
809
|
+
private httpClient;
|
|
810
|
+
private logger;
|
|
811
|
+
constructor(logger: Logger, timeout?: number);
|
|
812
|
+
/**
|
|
813
|
+
* 下载文件(返回原始 Buffer 及文件名)
|
|
814
|
+
*/
|
|
815
|
+
downloadFileRaw(url: string): Promise<{
|
|
816
|
+
buffer: Buffer;
|
|
817
|
+
filename?: string;
|
|
818
|
+
}>;
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
declare class WSClient extends EventEmitter<WSClientEventMap> {
|
|
822
|
+
private options;
|
|
823
|
+
private apiClient;
|
|
824
|
+
private wsManager;
|
|
825
|
+
private messageHandler;
|
|
826
|
+
private logger;
|
|
827
|
+
private started;
|
|
828
|
+
constructor(options: WSClientOptions);
|
|
829
|
+
/**
|
|
830
|
+
* 设置 WebSocket 事件处理
|
|
831
|
+
*/
|
|
832
|
+
private setupWsEvents;
|
|
833
|
+
/**
|
|
834
|
+
* 建立 WebSocket 长连接
|
|
835
|
+
* SDK 使用内置默认地址建立连接,连接成功后自动发送认证帧(botId + secret)。
|
|
836
|
+
* 支持链式调用:wsClient.connect().on('message', handler)
|
|
837
|
+
*
|
|
838
|
+
* @returns 返回 this,支持链式调用
|
|
839
|
+
*/
|
|
840
|
+
connect(): this;
|
|
841
|
+
/**
|
|
842
|
+
* 断开 WebSocket 连接
|
|
843
|
+
*/
|
|
844
|
+
disconnect(): void;
|
|
845
|
+
/**
|
|
846
|
+
* 通过 WebSocket 通道发送回复消息(通用方法)
|
|
847
|
+
*
|
|
848
|
+
* @param frame - 收到的原始 WebSocket 帧,透传 headers.req_id
|
|
849
|
+
* @param body - 回复消息体
|
|
850
|
+
* @param cmd
|
|
851
|
+
*/
|
|
852
|
+
reply(frame: WsFrameHeaders, body: StreamReplyBody | Record<string, any>, cmd?: string): Promise<WsFrame>;
|
|
853
|
+
/**
|
|
854
|
+
* 发送流式文本回复(便捷方法)
|
|
855
|
+
*
|
|
856
|
+
* @param frame - 收到的原始 WebSocket 帧,透传 headers.req_id
|
|
857
|
+
* @param streamId - 流式消息 ID
|
|
858
|
+
* @param content - 回复内容(支持 Markdown)
|
|
859
|
+
* @param finish - 是否结束流式消息,默认 false
|
|
860
|
+
* @param msgItem - 图文混排项(仅在 finish=true 时有效),用于在结束时附带图片内容
|
|
861
|
+
* @param feedback - 反馈信息(仅在首次回复时设置)
|
|
862
|
+
*/
|
|
863
|
+
replyStream(frame: WsFrameHeaders, streamId: string, content: string, finish?: boolean, msgItem?: ReplyMsgItem[], feedback?: ReplyFeedback): Promise<WsFrame>;
|
|
864
|
+
/**
|
|
865
|
+
* 发送欢迎语回复
|
|
866
|
+
*
|
|
867
|
+
* 注意:此方法需要使用对应事件(如 enter_chat)的 req_id 才能调用,
|
|
868
|
+
* 即 frame 参数应来自触发欢迎语的事件帧。
|
|
869
|
+
* 收到事件回调后需在 5 秒内发送回复,超时将无法发送欢迎语。
|
|
870
|
+
*
|
|
871
|
+
* @param frame - 对应事件的 WebSocket 帧(需包含该事件的 req_id)
|
|
872
|
+
* @param body - 欢迎语消息体(支持文本或模板卡片格式)
|
|
873
|
+
*/
|
|
874
|
+
replyWelcome(frame: WsFrameHeaders, body: WelcomeTextReplyBody | WelcomeTemplateCardReplyBody): Promise<WsFrame>;
|
|
875
|
+
/**
|
|
876
|
+
* 回复模板卡片消息
|
|
877
|
+
*
|
|
878
|
+
* 收到消息回调或进入会话事件后,可使用此方法回复模板卡片消息。
|
|
879
|
+
*
|
|
880
|
+
* @param frame - 收到的原始 WebSocket 帧,透传 headers.req_id
|
|
881
|
+
* @param templateCard - 模板卡片内容
|
|
882
|
+
* @param feedback - 反馈信息
|
|
883
|
+
*/
|
|
884
|
+
replyTemplateCard(frame: WsFrameHeaders, templateCard: TemplateCard, feedback?: ReplyFeedback): Promise<WsFrame>;
|
|
885
|
+
/**
|
|
886
|
+
* 发送流式消息 + 模板卡片组合回复
|
|
887
|
+
*
|
|
888
|
+
* 首次回复时必须返回 stream 的 id。
|
|
889
|
+
* template_card 可首次回复,也可在后续回复中发送,但同一个消息只能回复一次。
|
|
890
|
+
*
|
|
891
|
+
* @param frame - 收到的原始 WebSocket 帧,透传 headers.req_id
|
|
892
|
+
* @param streamId - 流式消息 ID
|
|
893
|
+
* @param content - 回复内容(支持 Markdown)
|
|
894
|
+
* @param finish - 是否结束流式消息,默认 false
|
|
895
|
+
* @param options - 可选项
|
|
896
|
+
* @param options.msgItem - 图文混排项(仅在 finish=true 时有效)
|
|
897
|
+
* @param options.streamFeedback - 流式消息反馈信息(首次回复时设置)
|
|
898
|
+
* @param options.templateCard - 模板卡片内容(同一消息只能回复一次)
|
|
899
|
+
* @param options.cardFeedback - 模板卡片反馈信息
|
|
900
|
+
*/
|
|
901
|
+
replyStreamWithCard(frame: WsFrameHeaders, streamId: string, content: string, finish?: boolean, options?: {
|
|
902
|
+
msgItem?: ReplyMsgItem[];
|
|
903
|
+
streamFeedback?: ReplyFeedback;
|
|
904
|
+
templateCard?: TemplateCard;
|
|
905
|
+
cardFeedback?: ReplyFeedback;
|
|
906
|
+
}): Promise<WsFrame>;
|
|
907
|
+
/**
|
|
908
|
+
* 更新模板卡片
|
|
909
|
+
*
|
|
910
|
+
* 注意:此方法需要使用对应事件(template_card_event)的 req_id 才能调用,
|
|
911
|
+
* 即 frame 参数应来自触发更新的事件帧。
|
|
912
|
+
* 收到事件回调后需在 5 秒内发送回复,超时将无法更新卡片。
|
|
913
|
+
*
|
|
914
|
+
* @param frame - 对应事件的 WebSocket 帧(需包含该事件的 req_id)
|
|
915
|
+
* @param templateCard - 模板卡片内容(task_id 需跟回调收到的 task_id 一致)
|
|
916
|
+
* @param userids - 要替换模版卡片消息的 userid 列表,若不填则替换所有用户
|
|
917
|
+
*/
|
|
918
|
+
updateTemplateCard(frame: WsFrameHeaders, templateCard: TemplateCard, userids?: string[]): Promise<WsFrame>;
|
|
919
|
+
/**
|
|
920
|
+
* 主动发送消息
|
|
921
|
+
*
|
|
922
|
+
* 向指定会话(单聊或群聊)主动推送消息,无需依赖收到的回调帧。
|
|
923
|
+
*
|
|
924
|
+
* @param chatid - 会话 ID,单聊填用户的 userid,群聊填对应群聊的 chatid
|
|
925
|
+
* @param body - 消息体(支持 markdown 或 template_card 格式)
|
|
926
|
+
* @returns Promise,收到回执时 resolve(回执帧)
|
|
927
|
+
*
|
|
928
|
+
* @example
|
|
929
|
+
* ```ts
|
|
930
|
+
* // 发送 markdown 消息
|
|
931
|
+
* await wsClient.sendMessage('CHATID', {
|
|
932
|
+
* msgtype: 'markdown',
|
|
933
|
+
* markdown: { content: '这是一条**主动推送**的消息' },
|
|
934
|
+
* });
|
|
935
|
+
*
|
|
936
|
+
* // 发送模板卡片消息
|
|
937
|
+
* await wsClient.sendMessage('CHATID', {
|
|
938
|
+
* msgtype: 'template_card',
|
|
939
|
+
* template_card: { card_type: 'text_notice', ... },
|
|
940
|
+
* });
|
|
941
|
+
* ```
|
|
942
|
+
*/
|
|
943
|
+
sendMessage(chatid: string, body: SendMsgBody): Promise<WsFrame>;
|
|
944
|
+
/**
|
|
945
|
+
* 上传临时素材(三步分片上传)
|
|
946
|
+
*
|
|
947
|
+
* 通过 WebSocket 长连接执行分片上传:init → chunk × N → finish
|
|
948
|
+
* 单个分片不超过 512KB(Base64 编码前),最多 100 个分片。
|
|
949
|
+
*
|
|
950
|
+
* @param fileBuffer - 文件 Buffer
|
|
951
|
+
* @param options - 上传选项(类型、文件名)
|
|
952
|
+
* @returns 上传结果,包含 media_id
|
|
953
|
+
*/
|
|
954
|
+
uploadMedia(fileBuffer: Buffer, options: UploadMediaOptions): Promise<UploadMediaFinishResult>;
|
|
955
|
+
/**
|
|
956
|
+
* 被动回复媒体消息(便捷方法)
|
|
957
|
+
*
|
|
958
|
+
* 通过 aibot_respond_msg 被动回复通道发送媒体消息(file/image/voice/video)
|
|
959
|
+
*
|
|
960
|
+
* @param frame - 收到的原始 WebSocket 帧,透传 headers.req_id
|
|
961
|
+
* @param mediaType - 媒体类型
|
|
962
|
+
* @param mediaId - 临时素材 media_id
|
|
963
|
+
* @param videoOptions - 视频消息可选参数(仅 mediaType='video' 时生效)
|
|
964
|
+
*/
|
|
965
|
+
replyMedia(frame: WsFrameHeaders, mediaType: WeComMediaType, mediaId: string, videoOptions?: {
|
|
966
|
+
title?: string;
|
|
967
|
+
description?: string;
|
|
968
|
+
}): Promise<WsFrame>;
|
|
969
|
+
/**
|
|
970
|
+
* 主动发送媒体消息(便捷方法)
|
|
971
|
+
*
|
|
972
|
+
* 通过 aibot_send_msg 主动推送通道发送媒体消息
|
|
973
|
+
*
|
|
974
|
+
* @param chatid - 会话 ID
|
|
975
|
+
* @param mediaType - 媒体类型
|
|
976
|
+
* @param mediaId - 临时素材 media_id
|
|
977
|
+
* @param videoOptions - 视频消息可选参数(仅 mediaType='video' 时生效)
|
|
978
|
+
*/
|
|
979
|
+
sendMediaMessage(chatid: string, mediaType: WeComMediaType, mediaId: string, videoOptions?: {
|
|
980
|
+
title?: string;
|
|
981
|
+
description?: string;
|
|
982
|
+
}): Promise<WsFrame>;
|
|
983
|
+
/**
|
|
984
|
+
* 下载文件并使用 AES 密钥解密
|
|
985
|
+
*
|
|
986
|
+
* @param url - 文件下载地址
|
|
987
|
+
* @param aesKey - AES 解密密钥(Base64 编码),取自消息中 image.aeskey 或 file.aeskey 字段
|
|
988
|
+
* @returns 解密后的文件 Buffer 及文件名
|
|
989
|
+
*
|
|
990
|
+
* @example
|
|
991
|
+
* ```ts
|
|
992
|
+
* // aesKey 来自消息体中的 image.aeskey 或 file.aeskey
|
|
993
|
+
* const { buffer, filename } = await wsClient.downloadFile(imageUrl, body.image?.aeskey);
|
|
994
|
+
* ```
|
|
995
|
+
*/
|
|
996
|
+
downloadFile(url: string, aesKey?: string): Promise<{
|
|
997
|
+
buffer: Buffer;
|
|
998
|
+
filename?: string;
|
|
999
|
+
}>;
|
|
1000
|
+
/**
|
|
1001
|
+
* 检查指定消息帧是否有未完成的 ack(即上一条消息还未收到回执)
|
|
1002
|
+
*
|
|
1003
|
+
* 用于流式场景:调用方可据此决定是否跳过当前中间帧,避免排队积压。
|
|
1004
|
+
*
|
|
1005
|
+
* @param frame - 收到的原始 WebSocket 帧
|
|
1006
|
+
* @returns true 表示有消息正在等待 ack
|
|
1007
|
+
*/
|
|
1008
|
+
hasPendingReplyAck(frame: WsFrameHeaders): boolean;
|
|
1009
|
+
/**
|
|
1010
|
+
* 非阻塞流式文本回复
|
|
1011
|
+
*
|
|
1012
|
+
* 如果上一条同 reqId 的消息尚未收到 ack,则跳过本次发送(返回 'skipped'),
|
|
1013
|
+
* 避免流式中间帧排队积压导致延迟。
|
|
1014
|
+
*
|
|
1015
|
+
* 注意:finish=true 的最终帧不受此限制,始终保证发送(走正常队列)。
|
|
1016
|
+
*
|
|
1017
|
+
* @param frame - 收到的原始 WebSocket 帧
|
|
1018
|
+
* @param streamId - 流式消息 ID
|
|
1019
|
+
* @param content - 回复内容
|
|
1020
|
+
* @param finish - 是否结束流式消息
|
|
1021
|
+
* @param msgItem - 图文混排项(仅在 finish=true 时有效),用于在结束时附带图片内容
|
|
1022
|
+
* @param feedback - 反馈信息(仅在首次回复时设置)
|
|
1023
|
+
* @returns Promise<WsFrame> 正常发送时返回回执帧,跳过时返回 'skipped'
|
|
1024
|
+
*/
|
|
1025
|
+
replyStreamNonBlocking(frame: WsFrameHeaders, streamId: string, content: string, finish?: boolean, msgItem?: ReplyMsgItem[], feedback?: ReplyFeedback): Promise<WsFrame | 'skipped'>;
|
|
1026
|
+
/**
|
|
1027
|
+
* 获取当前连接状态
|
|
1028
|
+
*/
|
|
1029
|
+
get isConnected(): boolean;
|
|
1030
|
+
/**
|
|
1031
|
+
* 获取 API 客户端实例(供高级用途使用,如文件下载)
|
|
1032
|
+
*/
|
|
1033
|
+
get api(): WeComApiClient;
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
declare class WsConnectionManager {
|
|
1037
|
+
private ws;
|
|
1038
|
+
private logger;
|
|
1039
|
+
private wsUrl;
|
|
1040
|
+
private wsOptions;
|
|
1041
|
+
private heartbeatInterval;
|
|
1042
|
+
private heartbeatTimer;
|
|
1043
|
+
private maxReconnectAttempts;
|
|
1044
|
+
private maxAuthFailureAttempts;
|
|
1045
|
+
private reconnectAttempts;
|
|
1046
|
+
private authFailureAttempts;
|
|
1047
|
+
private isManualClose;
|
|
1048
|
+
/** 标记最近一次连接关闭是否因认证失败触发(用于 scheduleReconnect 区分重连类型) */
|
|
1049
|
+
private lastCloseWasAuthFailure;
|
|
1050
|
+
/** 认证凭证 */
|
|
1051
|
+
private botId;
|
|
1052
|
+
private botSecret;
|
|
1053
|
+
/** 额外的认证参数(如 scene、plug_version 等),会展开到认证帧 body 中 */
|
|
1054
|
+
private extraAuthParams;
|
|
1055
|
+
/** Number of consecutive missed heartbeat acks (pong) */
|
|
1056
|
+
private missedPongCount;
|
|
1057
|
+
/** Max missed pong before treating connection as dead */
|
|
1058
|
+
private readonly maxMissedPong;
|
|
1059
|
+
/** Base delay (ms) for exponential back-off reconnection */
|
|
1060
|
+
private reconnectBaseDelay;
|
|
1061
|
+
/** Upper cap (ms) for reconnect delay */
|
|
1062
|
+
private readonly reconnectMaxDelay;
|
|
1063
|
+
/** 重连定时器引用,用于在 disconnect/connect 时取消挂起的重连 */
|
|
1064
|
+
private reconnectTimer;
|
|
1065
|
+
/** 按 req_id 分组的回复发送队列,保证同一 req_id 的消息串行发送 */
|
|
1066
|
+
private replyQueues;
|
|
1067
|
+
/** 正在等待回执的 req_id 集合,value 包含超时定时器、resolve/reject 和序列号 */
|
|
1068
|
+
private pendingAcks;
|
|
1069
|
+
/** 自增序列号,用于区分同一 reqId 的不同 pending,防止超时与 ack 竞态 */
|
|
1070
|
+
private pendingAckSeq;
|
|
1071
|
+
/** 回执超时时间(毫秒) */
|
|
1072
|
+
private readonly replyAckTimeout;
|
|
1073
|
+
/** 单个 req_id 的回复队列最大长度,超过后新消息将被拒绝 */
|
|
1074
|
+
private maxReplyQueueSize;
|
|
1075
|
+
/** 连接建立回调(WebSocket open 事件,认证尚未完成) */
|
|
1076
|
+
onConnected: (() => void) | null;
|
|
1077
|
+
/** 认证成功回调 */
|
|
1078
|
+
onAuthenticated: (() => void) | null;
|
|
1079
|
+
/** 连接断开回调 */
|
|
1080
|
+
onDisconnected: ((reason: string) => void) | null;
|
|
1081
|
+
/** 收到消息回调 */
|
|
1082
|
+
onMessage: ((frame: WsFrame) => void) | null;
|
|
1083
|
+
/** 重连回调 */
|
|
1084
|
+
onReconnecting: ((attempt: number) => void) | null;
|
|
1085
|
+
/** 错误回调 */
|
|
1086
|
+
onError: ((error: Error) => void) | null;
|
|
1087
|
+
/** 服务端主动断开回调(新连接建立导致旧连接被断开) */
|
|
1088
|
+
onServerDisconnect: ((reason: string) => void) | null;
|
|
1089
|
+
constructor(logger: Logger, heartbeatInterval?: number, reconnectBaseDelay?: number, maxReconnectAttempts?: number, wsUrl?: string, wsOptions?: ClientOptions, maxReplyQueueSize?: number, maxAuthFailureAttempts?: number);
|
|
1090
|
+
/**
|
|
1091
|
+
* 设置认证凭证
|
|
1092
|
+
*/
|
|
1093
|
+
setCredentials(botId: string, botSecret: string, extraAuthParams?: Record<string, any>): void;
|
|
1094
|
+
/**
|
|
1095
|
+
* 建立 WebSocket 连接(使用 SDK 内置默认地址)
|
|
1096
|
+
*/
|
|
1097
|
+
connect(): void;
|
|
1098
|
+
/**
|
|
1099
|
+
* 设置 WebSocket 事件处理器
|
|
1100
|
+
*/
|
|
1101
|
+
private setupEventHandlers;
|
|
1102
|
+
/**
|
|
1103
|
+
* 发送认证帧
|
|
1104
|
+
*
|
|
1105
|
+
* 格式:{ cmd: "aibot_subscribe", headers: { req_id }, body: { secret, bot_id } }
|
|
1106
|
+
*/
|
|
1107
|
+
private sendAuth;
|
|
1108
|
+
/**
|
|
1109
|
+
* 处理收到的帧数据
|
|
1110
|
+
*
|
|
1111
|
+
* 接收帧结构:
|
|
1112
|
+
* - 消息推送:{ cmd: "aibot_msg_callback", headers: { req_id }, body: { ... } }
|
|
1113
|
+
* - 认证/心跳响应:{ headers: { req_id }, errcode: 0, errmsg: "ok" }
|
|
1114
|
+
*/
|
|
1115
|
+
private handleFrame;
|
|
1116
|
+
/**
|
|
1117
|
+
* 启动心跳定时器
|
|
1118
|
+
*/
|
|
1119
|
+
private startHeartbeat;
|
|
1120
|
+
/**
|
|
1121
|
+
* 停止心跳定时器
|
|
1122
|
+
*/
|
|
1123
|
+
private stopHeartbeat;
|
|
1124
|
+
/**
|
|
1125
|
+
* 发送心跳
|
|
1126
|
+
* If consecutive missed pong count reaches the threshold, treat the
|
|
1127
|
+
* connection as dead and trigger reconnection.
|
|
1128
|
+
*
|
|
1129
|
+
* 格式:{ cmd: "ping", headers: { req_id } }
|
|
1130
|
+
*/
|
|
1131
|
+
private sendHeartbeat;
|
|
1132
|
+
/**
|
|
1133
|
+
* 安排重连
|
|
1134
|
+
*
|
|
1135
|
+
* 区分两种重连场景,使用独立的计数器和最大重试次数:
|
|
1136
|
+
* - 认证失败(lastCloseWasAuthFailure=true):使用 authFailureAttempts / maxAuthFailureAttempts
|
|
1137
|
+
* - 连接断开(lastCloseWasAuthFailure=false):使用 reconnectAttempts / maxReconnectAttempts
|
|
1138
|
+
*
|
|
1139
|
+
* disconnected_event(被踢下线)不会触发重连,因为 isManualClose 已被设为 true。
|
|
1140
|
+
*/
|
|
1141
|
+
private scheduleReconnect;
|
|
1142
|
+
/**
|
|
1143
|
+
* 发送数据帧
|
|
1144
|
+
*
|
|
1145
|
+
* 统一格式:{ cmd, headers: { req_id }, body }
|
|
1146
|
+
*/
|
|
1147
|
+
send(frame: WsFrame): void;
|
|
1148
|
+
/**
|
|
1149
|
+
* 通过 WebSocket 通道发送回复消息(串行队列版本)
|
|
1150
|
+
*
|
|
1151
|
+
* 同一个 req_id 的消息会被放入队列中串行发送:
|
|
1152
|
+
* 发送一条后等待服务端回执,收到回执或超时后才发送下一条。
|
|
1153
|
+
*
|
|
1154
|
+
* 格式:{ cmd: "aibot_respond_msg", headers: { req_id }, body: { ... } }
|
|
1155
|
+
*
|
|
1156
|
+
* @param reqId - 透传回调中的 req_id
|
|
1157
|
+
* @param body - 回复消息体(如 StreamReplyBody)
|
|
1158
|
+
* @param cmd - 发送的命令类型,默认 WsCmd.RESPONSE
|
|
1159
|
+
* @returns Promise,收到回执时 resolve(回执帧),超时或errcode非0时 reject(Error)
|
|
1160
|
+
*/
|
|
1161
|
+
sendReply(reqId: string, body: any, cmd?: string): Promise<WsFrame>;
|
|
1162
|
+
/**
|
|
1163
|
+
* 处理指定 req_id 的回复队列
|
|
1164
|
+
* 取出队列头部的消息发送,并设置回执超时
|
|
1165
|
+
*/
|
|
1166
|
+
private processReplyQueue;
|
|
1167
|
+
/**
|
|
1168
|
+
* 处理回复消息的回执
|
|
1169
|
+
* 收到回执后释放队列锁,继续处理下一条
|
|
1170
|
+
*/
|
|
1171
|
+
private handleReplyAck;
|
|
1172
|
+
/**
|
|
1173
|
+
* 主动断开连接
|
|
1174
|
+
*/
|
|
1175
|
+
/**
|
|
1176
|
+
* 清理所有待处理的消息和回执
|
|
1177
|
+
* @param reason - 清理原因,用于 reject 的错误信息
|
|
1178
|
+
*/
|
|
1179
|
+
private clearPendingMessages;
|
|
1180
|
+
disconnect(): void;
|
|
1181
|
+
/**
|
|
1182
|
+
* 检查指定 reqId 是否有待回执的消息(即上一条消息还未收到 ack)
|
|
1183
|
+
*
|
|
1184
|
+
* 用于流式场景:调用方可据此决定是否跳过当前帧,避免排队积压。
|
|
1185
|
+
*
|
|
1186
|
+
* @param reqId - 要检查的 req_id
|
|
1187
|
+
* @returns true 表示有消息正在等待 ack
|
|
1188
|
+
*/
|
|
1189
|
+
hasPendingAck(reqId: string): boolean;
|
|
1190
|
+
/**
|
|
1191
|
+
* 获取当前连接状态
|
|
1192
|
+
*/
|
|
1193
|
+
get isConnected(): boolean;
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
/**
|
|
1197
|
+
* 消息处理器
|
|
1198
|
+
* 负责解析 WebSocket 帧并分发为具体的消息事件和事件回调
|
|
1199
|
+
*/
|
|
1200
|
+
declare class MessageHandler {
|
|
1201
|
+
private logger;
|
|
1202
|
+
constructor(logger: Logger);
|
|
1203
|
+
/**
|
|
1204
|
+
* 处理收到的 WebSocket 帧,解析并触发对应的消息/事件
|
|
1205
|
+
*
|
|
1206
|
+
* WebSocket 推送帧结构:
|
|
1207
|
+
* - 消息推送:{ cmd: "aibot_msg_callback", headers: { req_id: "xxx" }, body: { msgid, msgtype, ... } }
|
|
1208
|
+
* - 事件推送:{ cmd: "aibot_event_callback", headers: { req_id: "xxx" }, body: { msgid, msgtype: "event", event: { ... } } }
|
|
1209
|
+
*
|
|
1210
|
+
* @param frame - WebSocket 接收帧
|
|
1211
|
+
* @param emitter - WSClient 实例,用于触发事件
|
|
1212
|
+
*/
|
|
1213
|
+
handleFrame(frame: WsFrame, emitter: WSClient): void;
|
|
1214
|
+
/**
|
|
1215
|
+
* 处理消息推送回调 (aibot_msg_callback)
|
|
1216
|
+
*/
|
|
1217
|
+
private handleMessageCallback;
|
|
1218
|
+
/**
|
|
1219
|
+
* 处理事件推送回调 (aibot_event_callback)
|
|
1220
|
+
*/
|
|
1221
|
+
private handleEventCallback;
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
/**
|
|
1225
|
+
* WeCom 加解密通用核心
|
|
1226
|
+
* 独立于 Webhook、WebSocket、Agent 的具体协议形态,统一提供基于 AES-256-CBC
|
|
1227
|
+
* 的加解密与 SHA1 签名计算能力。
|
|
1228
|
+
*/
|
|
1229
|
+
/**
|
|
1230
|
+
* 解码企业微信提供的 Base64 encodingAESKey
|
|
1231
|
+
*/
|
|
1232
|
+
declare function decodeEncodingAESKey(encodingAESKey: string): Buffer;
|
|
1233
|
+
/**
|
|
1234
|
+
* PKCS#7 填充
|
|
1235
|
+
*/
|
|
1236
|
+
declare function pkcs7Pad(buf: Buffer, blockSize: number): Buffer;
|
|
1237
|
+
/**
|
|
1238
|
+
* PKCS#7 解除填充
|
|
1239
|
+
*/
|
|
1240
|
+
declare function pkcs7Unpad(buf: Buffer, blockSize: number): Buffer;
|
|
1241
|
+
declare class WecomCrypto {
|
|
1242
|
+
private token;
|
|
1243
|
+
private encodingAESKey;
|
|
1244
|
+
private receiveId?;
|
|
1245
|
+
private aesKey;
|
|
1246
|
+
private iv;
|
|
1247
|
+
constructor(token: string, encodingAESKey: string, receiveId?: string | undefined);
|
|
1248
|
+
/**
|
|
1249
|
+
* 计算 WeCom 消息签名
|
|
1250
|
+
*/
|
|
1251
|
+
computeSignature(timestamp: string, nonce: string, encrypt: string): string;
|
|
1252
|
+
/**
|
|
1253
|
+
* 验证 WeCom 消息签名
|
|
1254
|
+
*/
|
|
1255
|
+
verifySignature(signature: string, timestamp: string, nonce: string, encrypt: string): boolean;
|
|
1256
|
+
/**
|
|
1257
|
+
* 消息解密
|
|
1258
|
+
* 返回纯文本字符串(XML 或 JSON 根据上层业务而定)
|
|
1259
|
+
*/
|
|
1260
|
+
decrypt(encryptText: string): string;
|
|
1261
|
+
/**
|
|
1262
|
+
* 消息加密
|
|
1263
|
+
* 加密明文并返回 base64 格式密文与对应的新签名
|
|
1264
|
+
*/
|
|
1265
|
+
encrypt(plainText: string, timestamp: string, nonce: string): {
|
|
1266
|
+
encrypt: string;
|
|
1267
|
+
signature: string;
|
|
1268
|
+
};
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
/**
|
|
1272
|
+
* 加解密工具模块
|
|
1273
|
+
* 提供文件加解密相关的功能函数
|
|
1274
|
+
*/
|
|
1275
|
+
/**
|
|
1276
|
+
* 使用 AES-256-CBC 解密文件
|
|
1277
|
+
*
|
|
1278
|
+
* @param encryptedBuffer - 加密的文件数据
|
|
1279
|
+
* @param aesKey - Base64 编码的 AES-256 密钥
|
|
1280
|
+
* @returns 解密后的文件 Buffer
|
|
1281
|
+
*/
|
|
1282
|
+
declare function decryptFile(encryptedBuffer: Buffer, aesKey: string): Buffer;
|
|
1283
|
+
|
|
1284
|
+
/**
|
|
1285
|
+
* 默认日志实现
|
|
1286
|
+
* 带有日志级别和时间戳的控制台日志
|
|
1287
|
+
*/
|
|
1288
|
+
declare class DefaultLogger implements Logger {
|
|
1289
|
+
private prefix;
|
|
1290
|
+
constructor(prefix?: string);
|
|
1291
|
+
private formatTime;
|
|
1292
|
+
debug(message: string, ...args: any[]): void;
|
|
1293
|
+
info(message: string, ...args: any[]): void;
|
|
1294
|
+
warn(message: string, ...args: any[]): void;
|
|
1295
|
+
error(message: string, ...args: any[]): void;
|
|
1296
|
+
}
|
|
1297
|
+
|
|
1298
|
+
/**
|
|
1299
|
+
* 通用工具方法
|
|
1300
|
+
*/
|
|
1301
|
+
/**
|
|
1302
|
+
* 生成随机字符串
|
|
1303
|
+
*
|
|
1304
|
+
* @param length - 随机字符串长度,默认 8
|
|
1305
|
+
* @returns 随机字符串
|
|
1306
|
+
*/
|
|
1307
|
+
declare function generateRandomString(length?: number): string;
|
|
1308
|
+
/**
|
|
1309
|
+
* 生成唯一请求 ID
|
|
1310
|
+
*
|
|
1311
|
+
* 格式:`{prefix}_{timestamp}_{random}`
|
|
1312
|
+
*
|
|
1313
|
+
* @param prefix - 前缀,通常为 cmd 名称
|
|
1314
|
+
* @returns 唯一请求 ID
|
|
1315
|
+
*/
|
|
1316
|
+
declare function generateReqId(prefix: string): string;
|
|
1317
|
+
|
|
1318
|
+
/** 默认导出 AiBot 命名空间 */
|
|
1319
|
+
declare const AiBot: {
|
|
1320
|
+
WSClient: typeof WSClient;
|
|
1321
|
+
};
|
|
1322
|
+
|
|
1323
|
+
export { DefaultLogger, EventType, MessageHandler, MessageType, TemplateCardType, WSAuthFailureError, WSClient, WSReconnectExhaustedError, WeComApiClient, WecomCrypto, WsCmd, WsConnectionManager, decodeEncodingAESKey, decryptFile, AiBot as default, generateRandomString, generateReqId, pkcs7Pad, pkcs7Unpad };
|
|
1324
|
+
export type { BaseMessage, EnterChatEvent, EventContent, EventFrom, EventMessage, EventMessageWith, FeedbackEventData, FileContent, FileMessage, ImageContent, ImageMessage, Logger, MessageFrom, MixedContent, MixedMessage, MixedMsgItem, QuoteContent, ReplyFeedback, ReplyMsgItem, ReplyOptions, SendMarkdownMsgBody, SendMarkdownParams, SendMediaMsgBody, SendMsgBody, SendTemplateCardMsgBody, SendTextParams, StreamReplyBody, StreamWithTemplateCardReplyBody, TemplateCard, TemplateCardAction, TemplateCardActionMenu, TemplateCardButton, TemplateCardCheckbox, TemplateCardEmphasisContent, TemplateCardEventData, TemplateCardHorizontalContent, TemplateCardImage, TemplateCardImageTextArea, TemplateCardJumpAction, TemplateCardMainTitle, TemplateCardQuoteArea, TemplateCardReplyBody, TemplateCardSelectionItem, TemplateCardSource, TemplateCardSubmitButton, TemplateCardVerticalContent, TextContent, TextMessage, UpdateTemplateCardBody, UploadMediaChunkBody, UploadMediaFinishBody, UploadMediaFinishResult, UploadMediaInitBody, UploadMediaInitResult, UploadMediaOptions, VideoContent, VideoMessage, VoiceContent, VoiceMessage, WSClientEventMap, WSClientOptions, WeComMediaType, WelcomeReplyBody, WelcomeTemplateCardReplyBody, WelcomeTextReplyBody, WsFrame, WsFrameHeaders };
|