@openclaw/feishu 2026.7.2-beta.3 → 2026.7.2-beta.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.
Files changed (159) hide show
  1. package/README.md +1 -1
  2. package/dist/{accounts-BDoGHJDk.js → accounts-CKhCa76b.js} +2 -19
  3. package/dist/api.js +65 -43
  4. package/dist/{app-registration-BzkyrVZu.js → app-registration-cN1bVV6s.js} +5 -5
  5. package/dist/{channel-BdnXYU6g.js → channel-CBNICmK9.js} +37 -75
  6. package/dist/channel-plugin-api.js +1 -1
  7. package/dist/{channel.runtime-CVIzo2dV.js → channel.runtime-CSlJVqy4.js} +7 -7
  8. package/dist/{client-87BmeMpj.js → client-Dee7cKsS.js} +62 -1
  9. package/dist/contract-api.js +2 -2
  10. package/dist/doctor-contract-BiD9tyIv.js +102 -0
  11. package/dist/doctor-contract-api.js +1 -1
  12. package/dist/{drive-BHv8WW9i.js → drive-DG6pKTPE.js} +23 -20
  13. package/dist/{send-DcrXbqqA.js → media-DOwcLJ1j.js} +1050 -1021
  14. package/dist/{monitor-BVQf7-Bl.js → monitor-DEHJlyWW.js} +6 -5
  15. package/dist/{monitor.account-Blbf2T6J.js → monitor.account-DEHl8Non.js} +1556 -592
  16. package/dist/monitor.startup-CSUPT_U1.js +143 -0
  17. package/dist/{probe-BgboTHIn.js → probe-Za1kgUvx.js} +70 -10
  18. package/dist/runtime-api.js +1 -2
  19. package/dist/{security-audit-BIeA3W3Q.js → security-audit-D7WK_BHh.js} +1 -1
  20. package/dist/{security-audit-shared-BIHeF-S_.js → security-audit-shared-BgpY7AiJ.js} +6 -11
  21. package/dist/security-contract-api.js +1 -1
  22. package/dist/{send-result-DfE5Fhz6.js → send-result-Bcofg0Vv.js} +1 -1
  23. package/dist/session-binding-contract-api.js +1 -1
  24. package/dist/setup-api.js +1 -1
  25. package/dist/{subagent-hooks-BKTOxB-T.js → subagent-hooks-DL2SC5zX.js} +1 -1
  26. package/dist/subagent-hooks-api.js +1 -1
  27. package/dist/{thread-bindings-V0bwk0A1.js → thread-bindings-Dqs_A0du.js} +2 -1
  28. package/node_modules/@larksuiteoapi/node-sdk/README.md +13 -0
  29. package/node_modules/@larksuiteoapi/node-sdk/README.zh.md +12 -0
  30. package/node_modules/@larksuiteoapi/node-sdk/es/index.js +8950 -3084
  31. package/node_modules/@larksuiteoapi/node-sdk/lib/index.js +8951 -3083
  32. package/node_modules/@larksuiteoapi/node-sdk/package.json +1 -1
  33. package/node_modules/@larksuiteoapi/node-sdk/types/index.d.ts +12522 -698
  34. package/node_modules/@protobufjs/utf8/CHANGELOG.md +8 -0
  35. package/node_modules/@protobufjs/utf8/index.js +29 -18
  36. package/node_modules/@protobufjs/utf8/package.json +2 -2
  37. package/node_modules/@protobufjs/utf8/tests/index.js +5 -0
  38. package/node_modules/@types/node/README.md +1 -1
  39. package/node_modules/@types/node/fs/promises.d.ts +16 -6
  40. package/node_modules/@types/node/package.json +2 -2
  41. package/node_modules/agent-base/README.md +145 -0
  42. package/node_modules/agent-base/dist/src/index.d.ts +78 -0
  43. package/node_modules/agent-base/dist/src/index.js +203 -0
  44. package/node_modules/agent-base/dist/src/index.js.map +1 -0
  45. package/node_modules/agent-base/dist/src/promisify.d.ts +4 -0
  46. package/node_modules/agent-base/dist/src/promisify.js +18 -0
  47. package/node_modules/agent-base/dist/src/promisify.js.map +1 -0
  48. package/node_modules/agent-base/package.json +64 -0
  49. package/node_modules/agent-base/src/index.ts +345 -0
  50. package/node_modules/agent-base/src/promisify.ts +33 -0
  51. package/node_modules/axios/CHANGELOG.md +197 -1
  52. package/node_modules/axios/README.md +424 -256
  53. package/node_modules/axios/dist/axios.js +589 -204
  54. package/node_modules/axios/dist/axios.min.js +3 -3
  55. package/node_modules/axios/dist/axios.min.js.map +1 -1
  56. package/node_modules/axios/dist/browser/axios.cjs +630 -185
  57. package/node_modules/axios/dist/esm/axios.js +630 -185
  58. package/node_modules/axios/dist/esm/axios.min.js +2 -2
  59. package/node_modules/axios/dist/esm/axios.min.js.map +1 -1
  60. package/node_modules/axios/dist/node/axios.cjs +949 -301
  61. package/node_modules/axios/index.d.cts +28 -5
  62. package/node_modules/axios/index.d.ts +24 -3
  63. package/node_modules/axios/lib/adapters/adapters.js +1 -1
  64. package/node_modules/axios/lib/adapters/fetch.js +223 -49
  65. package/node_modules/axios/lib/adapters/http.js +408 -193
  66. package/node_modules/axios/lib/adapters/xhr.js +3 -1
  67. package/node_modules/axios/lib/core/Axios.js +4 -2
  68. package/node_modules/axios/lib/core/AxiosError.js +13 -1
  69. package/node_modules/axios/lib/core/AxiosHeaders.js +13 -42
  70. package/node_modules/axios/lib/core/buildFullPath.js +29 -1
  71. package/node_modules/axios/lib/core/mergeConfig.js +35 -0
  72. package/node_modules/axios/lib/defaults/transitional.js +2 -0
  73. package/node_modules/axios/lib/env/data.js +1 -1
  74. package/node_modules/axios/lib/helpers/AxiosURLSearchParams.js +1 -3
  75. package/node_modules/axios/lib/helpers/Http2Sessions.js +119 -0
  76. package/node_modules/axios/lib/helpers/buildURL.js +7 -4
  77. package/node_modules/axios/lib/helpers/composeSignals.js +48 -47
  78. package/node_modules/axios/lib/helpers/cookies.js +5 -1
  79. package/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js +16 -11
  80. package/node_modules/axios/lib/helpers/formDataToJSON.js +26 -4
  81. package/node_modules/axios/lib/helpers/formDataToStream.js +2 -2
  82. package/node_modules/axios/lib/helpers/fromDataURI.js +20 -5
  83. package/node_modules/axios/lib/helpers/progressEventReducer.js +3 -0
  84. package/node_modules/axios/lib/helpers/resolveConfig.js +26 -13
  85. package/node_modules/axios/lib/helpers/sanitizeHeaderValue.js +60 -0
  86. package/node_modules/axios/lib/helpers/shouldBypassProxy.js +33 -1
  87. package/node_modules/axios/lib/helpers/toFormData.js +48 -12
  88. package/node_modules/axios/lib/helpers/validator.js +1 -1
  89. package/node_modules/axios/lib/utils.js +105 -19
  90. package/node_modules/axios/package.json +31 -13
  91. package/node_modules/https-proxy-agent/README.md +137 -0
  92. package/node_modules/https-proxy-agent/dist/agent.d.ts +30 -0
  93. package/node_modules/https-proxy-agent/dist/agent.js +177 -0
  94. package/node_modules/https-proxy-agent/dist/agent.js.map +1 -0
  95. package/node_modules/https-proxy-agent/dist/index.d.ts +23 -0
  96. package/node_modules/https-proxy-agent/dist/index.js +14 -0
  97. package/node_modules/https-proxy-agent/dist/index.js.map +1 -0
  98. package/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts +7 -0
  99. package/node_modules/https-proxy-agent/dist/parse-proxy-response.js +66 -0
  100. package/node_modules/https-proxy-agent/dist/parse-proxy-response.js.map +1 -0
  101. package/node_modules/https-proxy-agent/package.json +56 -0
  102. package/node_modules/protobufjs/dist/light/protobuf.js +145 -188
  103. package/node_modules/protobufjs/dist/light/protobuf.js.map +1 -1
  104. package/node_modules/protobufjs/dist/light/protobuf.min.js +3 -3
  105. package/node_modules/protobufjs/dist/light/protobuf.min.js.map +1 -1
  106. package/node_modules/protobufjs/dist/minimal/protobuf.js +33 -76
  107. package/node_modules/protobufjs/dist/minimal/protobuf.js.map +1 -1
  108. package/node_modules/protobufjs/dist/minimal/protobuf.min.js +3 -3
  109. package/node_modules/protobufjs/dist/minimal/protobuf.min.js.map +1 -1
  110. package/node_modules/protobufjs/dist/protobuf.js +168 -208
  111. package/node_modules/protobufjs/dist/protobuf.js.map +1 -1
  112. package/node_modules/protobufjs/dist/protobuf.min.js +3 -3
  113. package/node_modules/protobufjs/dist/protobuf.min.js.map +1 -1
  114. package/node_modules/protobufjs/index.d.ts +0 -8
  115. package/node_modules/protobufjs/package.json +2 -3
  116. package/node_modules/protobufjs/src/parse.js +3 -0
  117. package/node_modules/protobufjs/src/util/minimal.js +0 -3
  118. package/node_modules/qs/CHANGELOG.md +11 -0
  119. package/node_modules/qs/dist/qs.js +17 -17
  120. package/node_modules/qs/lib/parse.js +19 -8
  121. package/node_modules/qs/lib/utils.js +47 -8
  122. package/node_modules/qs/package.json +6 -5
  123. package/node_modules/qs/test/parse.js +230 -0
  124. package/node_modules/qs/test/utils.js +194 -0
  125. package/node_modules/typebox/build/compile/validator.d.mts +1 -4
  126. package/node_modules/typebox/build/guard/guard.d.mts +1 -1
  127. package/node_modules/typebox/build/guard/guard.mjs +5 -2
  128. package/node_modules/typebox/build/guard/string.mjs +16 -4
  129. package/node_modules/typebox/build/schema/engine/_functions.mjs +34 -15
  130. package/node_modules/typebox/build/type/action/readonly_object.d.mts +5 -0
  131. package/node_modules/typebox/build/type/action/readonly_object.mjs +8 -0
  132. package/node_modules/typebox/build/typebox.d.mts +1 -1
  133. package/node_modules/typebox/build/typebox.mjs +1 -1
  134. package/node_modules/typebox/package.json +1 -1
  135. package/node_modules/typebox/readme.md +29 -32
  136. package/node_modules/ws/lib/receiver.js +15 -32
  137. package/node_modules/ws/lib/websocket-server.js +4 -4
  138. package/node_modules/ws/lib/websocket.js +4 -4
  139. package/node_modules/ws/package.json +5 -1
  140. package/openclaw.plugin.json +2 -16
  141. package/package.json +20 -8
  142. package/dist/doctor-contract-DXH5hux1.js +0 -97
  143. package/dist/monitor.startup-Cy8NPGAX.js +0 -43
  144. package/node_modules/@protobufjs/inquire/CHANGELOG.md +0 -8
  145. package/node_modules/@protobufjs/inquire/LICENSE +0 -26
  146. package/node_modules/@protobufjs/inquire/README.md +0 -13
  147. package/node_modules/@protobufjs/inquire/index.d.ts +0 -10
  148. package/node_modules/@protobufjs/inquire/index.js +0 -38
  149. package/node_modules/@protobufjs/inquire/package.json +0 -21
  150. package/node_modules/@protobufjs/inquire/tests/data/array.js +0 -1
  151. package/node_modules/@protobufjs/inquire/tests/data/emptyArray.js +0 -1
  152. package/node_modules/@protobufjs/inquire/tests/data/emptyObject.js +0 -1
  153. package/node_modules/@protobufjs/inquire/tests/data/object.js +0 -1
  154. package/node_modules/@protobufjs/inquire/tests/index.js +0 -20
  155. package/node_modules/axios/dist/axios.js.map +0 -1
  156. package/node_modules/axios/dist/browser/axios.cjs.map +0 -1
  157. package/node_modules/axios/dist/esm/axios.js.map +0 -1
  158. package/node_modules/axios/dist/node/axios.cjs.map +0 -1
  159. package/npm-shrinkwrap.json +0 -1354
@@ -1,47 +1,66 @@
1
1
  // deno-fmt-ignore-file
2
- import * as Schema from '../types/index.mjs';
3
2
  import { Hashing } from '../../system/hashing/index.mjs';
4
3
  import { EmitGuard as E } from '../../guard/index.mjs';
5
4
  import { BuildSchema } from './schema.mjs';
6
- const functions = new Map();
5
+ const index = [0];
6
+ const names = new Map;
7
+ const funcs = new Map();
8
+ // ------------------------------------------------------------------
9
+ // CreateName
10
+ // ------------------------------------------------------------------
11
+ function NextName() {
12
+ return Hashing.Hash(index[0]++);
13
+ }
14
+ function CreateName(schema, href) {
15
+ if (!names.has(schema))
16
+ names.set(schema, new Map());
17
+ const hrefs = names.get(schema);
18
+ if (hrefs.has(href))
19
+ return hrefs.get(href);
20
+ const name = NextName();
21
+ hrefs.set(href, name);
22
+ return name;
23
+ }
7
24
  // ------------------------------------------------------------------
8
25
  // CreateCallExpression
9
26
  // ------------------------------------------------------------------
10
- function CreateCallExpression(context, _schema, hash, value) {
27
+ function CreateCallExpression(context, _schema, name, value) {
11
28
  return context.UseUnevaluated()
12
- ? E.Call(`check_${hash}`, ['context', value])
13
- : E.Call(`check_${hash}`, [value]);
29
+ ? E.Call(`check_${name}`, ['context', value])
30
+ : E.Call(`check_${name}`, [value]);
14
31
  }
15
32
  // ------------------------------------------------------------------
16
33
  // CreateFunctionExpression
17
34
  // ------------------------------------------------------------------
18
- function CreateFunctionExpression(stack, context, schema, hash) {
35
+ function CreateFunctionExpression(stack, context, schema, name) {
19
36
  const expression = BuildSchema(stack, context, schema, 'value');
20
37
  return context.UseUnevaluated()
21
- ? E.ConstDeclaration(`check_${hash}`, E.ArrowFunction(['context', 'value'], expression))
22
- : E.ConstDeclaration(`check_${hash}`, E.ArrowFunction(['value'], expression));
38
+ ? E.ConstDeclaration(`check_${name}`, E.ArrowFunction(['context', 'value'], expression))
39
+ : E.ConstDeclaration(`check_${name}`, E.ArrowFunction(['value'], expression));
23
40
  }
24
41
  // ------------------------------------------------------------------
25
42
  // ResetFunctions
26
43
  // ------------------------------------------------------------------
27
44
  export function ResetFunctions() {
28
- functions.clear();
45
+ index[0] = 0;
46
+ names.clear();
47
+ funcs.clear();
29
48
  }
30
49
  // ------------------------------------------------------------------
31
50
  // GetFunctions
32
51
  // ------------------------------------------------------------------
33
52
  export function GetFunctions() {
34
- return [...functions.values()];
53
+ return [...funcs.values()];
35
54
  }
36
55
  // ------------------------------------------------------------------
37
56
  // CreateFunction
38
57
  // ------------------------------------------------------------------
39
58
  export function CreateFunction(stack, context, schema, value) {
40
- const hash = Schema.IsSchemaObject(schema) ? Hashing.Hash({ __baseURL: stack.BaseURL().href, ...schema }) : Hashing.Hash(schema);
41
- const call = CreateCallExpression(context, schema, hash, value);
42
- if (functions.has(hash))
59
+ const name = CreateName(schema, stack.BaseURL().href);
60
+ const call = CreateCallExpression(context, schema, name, value);
61
+ if (funcs.has(name))
43
62
  return call;
44
- functions.set(hash, '');
45
- functions.set(hash, CreateFunctionExpression(stack, context, schema, hash));
63
+ funcs.set(name, '');
64
+ funcs.set(name, CreateFunctionExpression(stack, context, schema, name));
46
65
  return call;
47
66
  }
@@ -9,3 +9,8 @@ export declare function ReadonlyObjectDeferred<Type extends TSchema>(type: Type,
9
9
  export type TReadonlyObject<Type extends TSchema> = (TReadonlyObjectAction<Type>);
10
10
  /** This type is an alias for TypeScript's `Readonly<T>` utility type. It will make all properties of a TObject readonly or marks an TArray or TTuple as immutable `readonly T[]`. */
11
11
  export declare function ReadonlyObject<Type extends TSchema>(type: Type, options?: TSchemaOptions): TReadonlyObject<Type>;
12
+ /**
13
+ * This type has been renamed to ReadonlyObject.
14
+ * @deprecated
15
+ */
16
+ export declare const ReadonlyType: typeof ReadonlyObject;
@@ -9,3 +9,11 @@ export function ReadonlyObjectDeferred(type, options = {}) {
9
9
  export function ReadonlyObject(type, options = {}) {
10
10
  return ReadonlyObjectAction(type, options);
11
11
  }
12
+ // ------------------------------------------------------------------
13
+ // Alias
14
+ // ------------------------------------------------------------------
15
+ /**
16
+ * This type has been renamed to ReadonlyObject.
17
+ * @deprecated
18
+ */
19
+ export const ReadonlyType = ReadonlyObject;
@@ -19,7 +19,7 @@ export { Omit, type TOmit, type TOmitDeferred } from './type/action/omit.mjs';
19
19
  export { Parameters, type TParameters, type TParametersDeferred } from './type/action/parameters.mjs';
20
20
  export { Partial, type TPartial, type TPartialDeferred } from './type/action/partial.mjs';
21
21
  export { Pick, type TPick, type TPickDeferred } from './type/action/pick.mjs';
22
- export { ReadonlyObject, type TReadonlyObject, type TReadonlyObjectDeferred } from './type/action/readonly_object.mjs';
22
+ export { ReadonlyObject, ReadonlyType, type TReadonlyObject, type TReadonlyObjectDeferred } from './type/action/readonly_object.mjs';
23
23
  export { Required, type TRequired, type TRequiredDeferred } from './type/action/required.mjs';
24
24
  export { ReturnType, type TReturnType, type TReturnTypeDeferred } from './type/action/return_type.mjs';
25
25
  export { type TUncapitalize, type TUncapitalizeDeferred, Uncapitalize } from './type/action/uncapitalize.mjs';
@@ -31,7 +31,7 @@ export { Omit } from './type/action/omit.mjs';
31
31
  export { Parameters } from './type/action/parameters.mjs';
32
32
  export { Partial } from './type/action/partial.mjs';
33
33
  export { Pick } from './type/action/pick.mjs';
34
- export { ReadonlyObject } from './type/action/readonly_object.mjs';
34
+ export { ReadonlyObject, ReadonlyType } from './type/action/readonly_object.mjs';
35
35
  export { Required } from './type/action/required.mjs';
36
36
  export { ReturnType } from './type/action/return_type.mjs';
37
37
  export { Uncapitalize } from './type/action/uncapitalize.mjs';
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "typebox",
3
3
  "description": "Json Schema Type Builder with Static Type Resolution for TypeScript",
4
- "version": "1.3.3",
4
+ "version": "1.3.6",
5
5
  "keywords": [
6
6
  "typescript",
7
7
  "jsonschema"
@@ -111,27 +111,24 @@ type User = Type.Static<typeof User> // type User = {
111
111
 
112
112
  ## Script
113
113
 
114
- [Documentation](https://sinclairzx81.github.io/typebox/#/docs/script/overview) | [Example 1](https://www.typescriptlang.org/play/?target=99&module=7#code/JYWwDg9gTgLgBAFQJ5gKZwGZQiOByGFVAIwgA88AoSgehrgFonmXW32POv3b7k0AdAGUAxlGBgYACjwC5eAJS9G3VWvXdqdOADkAhiFQBnMHpGpKIiADsj8ALJ6YACzgBeREWFiJ0gAaUcHCEaHAAaqgiMNAATO5wAN5wZABccNYAriDEqFAANHBIaZnZuXAAvoHBROGR0VAAzPEAogBuegA2GU6oADwRUbFwAGSJcABexVk5UBUAfFUh6AP1ACwt7V09-XXQTaNJAO5TpbPlC35KygAiqGjWACao1vD6hiZmFla28En2xq5yvF+KhvOJJFIknIBI4XBUCn4gosahFYKgyPEElUgpAjMAYMAbGkVtBVnlseloCBOsTdo1yUEghlWrTBlAYlVKkElnAAOKoHCoGBQJCYimtXIE8xGWlosgAbQAugzGcBHsBpScZkrOcjQrDcsBOmLGXADMRgM8YKy1iqgg9gBgMBkjKgbaS7XATJEMh09FB3VBVrruTV-kZXB4saaAOYCwzCop8+NCkWe6kwQ00uAG8SdXWXLT0ABKGReoHQxdQGA6dUJ1ko4ecAjA2DQsEtRgEccFiZbbclnYEEo70oE+NQIC7rYg7YJxhbEDxBJs-dng4XZEbALXc6HPYTIt3G67I6lC4nU+PHYX1ipnWv867W6bj-3Kb7M73C7PGovmavL8TwEZk303bcIzArsMyzDooIEB0nRdUEgJvZ8IObVCnwEGC8zgrCh3NS0Xngl8dwIhdcKNfCBzQgRvREX1-VIos4CEGAnA1OAAElrAwXJnnMShnWsKJ6zgKBnieKApHeZw0hBYQOKlXolggDAcwBOYFESKo5O7D8j1-aV5QABkVRdl3rAQtyCfSD1TJBh0HEzzIEO8oGpODbLgezDKc4zjDMizQJ8-SqIfRDnVdGy9J3CK4KIq1Yrs+Kejw+i0EYv0oFi8ogA) | [Example 2](https://www.typescriptlang.org/play/?target=99&module=7#code/JYWwDg9gTgLgBAFQJ5gKZwGZQiOByGFVAIwgA88AoSgehrgFonmXW32POv3b7k0AdACpejbuImTu1OnAByAQxCoAzmAUBjVJQB2S1eq1wAsgpgALOAG9KcOKjKRYcDRB0r4ANVQaY0AExwALyIRAIA8sQAVj4wABRWcGQAXKGCcgCuIMSoUHEAlAA0cEip-KgCmdm5BXAAvvm29o7Q8K7uXrHQAMzBaRUAogBuCgA2GWaoceUCAJI6MLkqsXEA2t6+AcUzkTG+CXAAXmVhVTl5+fX5ALr5jXYOTm1uHnAbflAALH0zw2MTi2mYXmiygy326y6UG62zCuxWiQA7id0llzrUGrdGnUZPQACKoNA6AAmqAW8n0ak02nar28sAcPzh0QRTUgKmAMGAblSpgsAne0E+hSaOmgIDGvLM5gFUJhTQyQyl-MFUH8lAalFp8AA4qgcKgYFAkEzBPD9jY7ENclytCoURUAIJQKAKJBxemLMhFJrAEnAO0OgTO13umZnGp3DWNbUmSZQYBjU0Vc3xS1wJTEYBkmDKmWq4VNYnADAYDLLPOyzZfEV2NQ+DKjBRQSsF6Nal7wYyqSwhHYsi1NADm+uURtKcD1BvHtbgEtBidGytyi-bogAShkFqB0OvUBhRrFuTpKN2VDKwNg0LBsyoBCPp8aBJeINeuaoBNab3aBJzUCA7xfN9b2fCAOS5NxnyvG0QLIU8eyg18YI-B8xyfIDkLvL9bQ-P8AMQ4CPzFKAJVGAjMIEOCzwvaCbxQ0dDXQ2j3ywmCfzwwDmJAxVyLou8qIQjC+IEecVzGXiWIEYtS3LCohMkgTzwkkDRITcT5JAzNswWZSP0UmikOE1TF10u96w0Rtm1MyjcTgABlGAzADOB5gwXIyS0Sgyx0XxjzgKAyVJPJlHPIMHKcjQAB5CDQCAMBMHsAD5LnTEKZVQxikE-NjVFWAAGa5QPA48bLsNL7wY8dsu-XKCoEYjSNKucEIyqrsIDWrCp4uCyoQ4zxOkstlia8r+rIrScxGvr4xM8zLKgGy6iAA) | [Challenge](test/typescript/readme.md)
115
-
116
- TypeBox includes a syntax engine that can transform TypeScript declarations into JSON Schema. The engine is a full syntactic frontend to Type.* and supports many advanced type-level constructs such as Conditional, Mapped, Indexed, Infer, Generics, Distributed types and more. This feature is implemented symmetrically at runtime and statically via TypeScript Template Literal types.
117
-
118
- Syntax highlighting is available via the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=sinclairzx81.typebox-script)
114
+ [Documentation](https://sinclairzx81.github.io/typebox/#/docs/script/overview) | [Example 1](https://www.typescriptlang.org/play/?target=99&module=7#code/JYWwDg9gTgLgBAFQJ5gKZwGZQiOByGFVAIwgA88AoSgehrgFkIATAVwBtVKBjCAOwDO8BgEMYACzgBeREQB0AZW5RgYGAAoABpThxCaOADVU3GNABM0uAG84ZAFxw+rEMVRQANHCSPnr93AAvjp6REYmZlAAzFa2Dk4ubp7evonuXgBeqf5QQSH66Mam0AAssXbZSV4+CTmZlelwAO4NucGaAJTUdHAAIqhofMyofMIsHFy8gvC2DKgCkoFWyGiKyqoaohJemrr5YcawqGSxIbqQAsAwwPyORZElHmdO0CAi7HcR0FFPurqsADdPsUoOYQsFdAU4ABxVA4VAwKBIU5-OAA9zXbjzT5HMgAbQAur8-sAhsAsQJWoTwfsDFt3MB3ii-iJXMARjBgQ9ibpmMAMBhWAJUFzSjy4AI0NwOCIoKKoCUaZCwnMFszdABzOEgBFIxyw+GIpDit4wBnvRz0lTvGmdbr0ABKrFGoHQDtQGE4phufEoqvEcjA2DQsHZAjkWsNSMDwYxYbk6NDFLkV1QIHDQYgIeu80DEEu134MazcdzZD98wDmez8cjOqNxZrucTmNzqfTjdL4b4r3endDZYrC37OfDdd1SBH8Zb5LbZo71a7ckBU8H-tX4dN5vYG7kfIFQtQu-L68XA83Ym3u9ZxHZo2PQ6rsfPci31p3Z9HcklJhlUAftD0AoMBiOScAAJJ8Bg7gjFilCCnw3r8HAUAjMMUDqDqCyOCsR7AaB3AADwFBAGCMJWAB8HQ2CEWEBuODYzhSeIAAwEnmBY+nI5a6HREbahOCZxsxbFyD2UBvDuPFwHxDHRkx8ysexK7SXxb6Mju+6CsK3G0ZWr6Xu+cg3neMC6bx+nqX2P7Suwsq6YEQA) | [Example 2](https://www.typescriptlang.org/play/?target=99&module=7#code/JYWwDg9gTgLgBAFQJ5gKZwGZQiOByGFVAIwgA88AoSgehrgFkIATAVwBtVKA7AQxFQBnMLwDG6BrxgALOAG9KcOKjKRYcURG6D4ANVSiY0AExwAvIiIA6APLEAVgZgAKOXDIAuS2isA5ViDEqFDOAJQANHBIXsg+-oHBYXAAvqGKyqrQ8Jraek7QAMzm3qi2Dk6u7jHW8UEhEVHVcQF1YZEAXk2ltYmhKWlKKmrZWjpw+obQACzFsaV2joaVniV+Lb2R0as99R1dawm7cADu+ztJqZTJ1HRwACKoaNzMqNzwTGyclDlj+rAqs2sCwqCiUkEEwBgwC0XkkMisEyMUCm4XS3GgIF47FhUmkCPyUAKqKUrAAbjj4YiTFc0j94ABxVA4VAwKBIQE+YFLUFwUnBKHiQT7ACCUCgvCQzj+MBUEXSwGewEFIrFEuccwOrVCaUudMYUmCwCxHPm5W56X4xGArxgFLxVORxLgzGAGAwrEEqDt+MmjvSwgMHF4UG9DqmNO+o3eQlkFg1XJcPIA5kyBKytozmemnZiZVAjdj9XmCxHaPQAEqsN6gdDl1AYTiGaHcSgMGNWMDYNCwa2CKwprNsjtd-m9qx8nuCqyQ1AgPudiDdqFCDsQCFQrTDxejldkVvthdLscDtNDw87vsTgUrmdzrdHlfoqCY9j3i9WPdtwR4889lcnlkzxHP9L1HKdb3nYDlz7Mk3xAj992-ODoKsXNDSxZCxxdN0PVKX8UM-A8oLHND8ww-Cx0ta03kw3dEJ-YiV1IgtaL7ANRCDKBWIQss4AAZRgKQlTgABJbgMGCV5xEod1uCbLQ4CgV4XhCARv32AShNEAAeQg0AgDBGBjAA+PoeTUvEAPTccwKEABtAAGABdVd12bBClAs-tU0ApAbMneznKsJ8Xw8uAvKsocryVQKXNgvdPPbZiMOw91PTCrzktfKibQypKDTI192M4hDkiAA) | [Challenge](test/typescript/readme.md)
119
115
 
116
+ TypeBox includes a runtime scripting engine that can transform TypeScript definitions into JSON Schema. The engine is implemented symmetrically at runtime and inside TypeScript's type system. It supports many programmable type-level constructs such as Conditional, Mapped, Indexed, Generic, Distributive Conditional, and more. The engine is designed for TypeScript 7 but is supported in TypeScript 5 and above.
120
117
 
121
118
  ### Example
122
119
 
123
- The following uses Script to parse TypeScript declarations into JSON Schema.
120
+ Syntax highlighting is available via the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=sinclairzx81.typebox-script)
124
121
 
125
122
  ```typescript
126
123
  // Module
127
124
  const Math = Type.Script(`
128
125
  type Vector2 = { x: number, y: number }
129
- type Vector3 = Evaluate<Vector2 & { z: number }>
130
- type Vector4 = Evaluate<Vector3 & { w: number }>
126
+ type Vector3 = { x: number, y: number, z: number }
127
+ type Vector4 = { x: number, y: number, z: number, w: number }
131
128
  `)
132
129
 
133
130
  // Dependent Module
134
- const { Mesh } = Type.Script({ ...Math }, `
131
+ const { Mesh } = Type.Script(Math, `
135
132
  type Vertex = {
136
133
  position: Vector4,
137
134
  normal: Vector3,
@@ -298,29 +295,29 @@ The following table shows compile performance for various JSON Schema structures
298
295
  ┌──────────────────────┬─────────────┬─────────────┐
299
296
  │ Compile │ TB1X │ AJV8 │
300
297
  ├──────────────────────┼─────────────┼─────────────┤
301
- │ Boolean │ 29.2K ops/s │ 7.1K ops/s │
302
- │ Number │ 34.5K ops/s │ 7.6K ops/s │
303
- │ String │ 48.9K ops/s │ 8.7K ops/s │
304
- │ Null │ 39.6K ops/s │ 7.6K ops/s │
305
- │ Literal_String │ 46.8K ops/s │ 6.8K ops/s │
306
- │ Literal_Number │ 48.3K ops/s │ 7.4K ops/s │
307
- │ Literal_Boolean │ 48.8K ops/s │ 7.3K ops/s │
308
- │ Pattern │ 32.5K ops/s │ 6.1K ops/s │
309
- │ Object_Open │ 6.6K ops/s │ 1.4K ops/s │
310
- │ Object_Close │ 7.6K ops/s │ 1K ops/s │
311
- │ Object_Vector3 │ 20.8K ops/s │ 2.8K ops/s │
312
- │ Object_Basis3 │ 7.5K ops/s │ 1K ops/s │
313
- │ Intersect_And │ 23K ops/s │ 3.9K ops/s │
314
- │ Intersect_Structural │ 8.7K ops/s │ 1.2K ops/s │
315
- │ Union_Or │ 17.9K ops/s │ 3.4K ops/s │
316
- │ Union_Structural │ 11.3K ops/s │ 2.1K ops/s │
317
- │ Tuple_Values │ 9.6K ops/s │ 2.1K ops/s │
318
- │ Tuple_Objects │ 2.1K ops/s │ 350 ops/s │
319
- │ Array_Numbers_4 │ 33.6K ops/s │ 4.2K ops/s │
320
- │ Array_Numbers_8 │ 39K ops/s │ 3.7K ops/s │
321
- │ Array_Numbers_16 │ 29.6K ops/s │ 3.8K ops/s │
322
- │ Array_Objects_Open │ 7.7K ops/s │ 833 ops/s │
323
- │ Array_Objects_Close │ 7.6K ops/s │ 860 ops/s │
298
+ │ Boolean │ 39.7K ops/s │ 6.8K ops/s │
299
+ │ Number │ 86.2K ops/s │ 7.5K ops/s │
300
+ │ String │ 82.6K ops/s │ 8.2K ops/s │
301
+ │ Null │ 62K ops/s │ 7.3K ops/s │
302
+ │ Literal_String │ 72.1K ops/s │ 5.7K ops/s │
303
+ │ Literal_Number │ 72.7K ops/s │ 6.9K ops/s │
304
+ │ Literal_Boolean │ 80.9K ops/s │ 7K ops/s │
305
+ │ Pattern │ 38.7K ops/s │ 5.7K ops/s │
306
+ │ Object_Open │ 16.3K ops/s │ 1.3K ops/s │
307
+ │ Object_Close │ 15.7K ops/s │ 952 ops/s │
308
+ │ Object_Vector3 │ 40.2K ops/s │ 3.2K ops/s │
309
+ │ Object_Basis3 │ 16.1K ops/s │ 834 ops/s │
310
+ │ Intersect_And │ 45.7K ops/s │ 3.5K ops/s │
311
+ │ Intersect_Structural │ 21K ops/s │ 1.6K ops/s │
312
+ │ Union_Or │ 45.1K ops/s │ 3.4K ops/s │
313
+ │ Union_Structural │ 27.6K ops/s │ 2K ops/s │
314
+ │ Tuple_Values │ 14.7K ops/s │ 2K ops/s │
315
+ │ Tuple_Objects │ 3.7K ops/s │ 380 ops/s │
316
+ │ Array_Numbers_4 │ 73.6K ops/s │ 4.3K ops/s │
317
+ │ Array_Numbers_8 │ 50.9K ops/s │ 3.8K ops/s │
318
+ │ Array_Numbers_16 │ 85K ops/s │ 3.9K ops/s │
319
+ │ Array_Objects_Open │ 18.9K ops/s │ 789 ops/s │
320
+ │ Array_Objects_Close │ 17.9K ops/s │ 909 ops/s │
324
321
  └──────────────────────┴─────────────┴─────────────┘
325
322
  ```
326
323
 
@@ -77,6 +77,7 @@ class Receiver extends Writable {
77
77
 
78
78
  this._totalPayloadLength = 0;
79
79
  this._messageLength = 0;
80
+ this._numFragments = 0;
80
81
  this._fragments = [];
81
82
 
82
83
  this._errored = false;
@@ -500,6 +501,19 @@ class Receiver extends Writable {
500
501
  return;
501
502
  }
502
503
 
504
+ if (this._maxFragments > 0 && ++this._numFragments > this._maxFragments) {
505
+ const error = this.createError(
506
+ RangeError,
507
+ 'Too many message fragments',
508
+ false,
509
+ 1008,
510
+ 'WS_ERR_TOO_MANY_BUFFERED_PARTS'
511
+ );
512
+
513
+ cb(error);
514
+ return;
515
+ }
516
+
503
517
  if (this._compressed) {
504
518
  this._state = INFLATING;
505
519
  this.decompress(data, cb);
@@ -507,22 +521,6 @@ class Receiver extends Writable {
507
521
  }
508
522
 
509
523
  if (data.length) {
510
- if (
511
- this._maxFragments > 0 &&
512
- this._fragments.length >= this._maxFragments
513
- ) {
514
- const error = this.createError(
515
- RangeError,
516
- 'Too many message fragments',
517
- false,
518
- 1008,
519
- 'WS_ERR_TOO_MANY_BUFFERED_PARTS'
520
- );
521
-
522
- cb(error);
523
- return;
524
- }
525
-
526
524
  //
527
525
  // This message is not compressed so its length is the sum of the payload
528
526
  // length of all fragments.
@@ -562,22 +560,6 @@ class Receiver extends Writable {
562
560
  return;
563
561
  }
564
562
 
565
- if (
566
- this._maxFragments > 0 &&
567
- this._fragments.length >= this._maxFragments
568
- ) {
569
- const error = this.createError(
570
- RangeError,
571
- 'Too many message fragments',
572
- false,
573
- 1008,
574
- 'WS_ERR_TOO_MANY_BUFFERED_PARTS'
575
- );
576
-
577
- cb(error);
578
- return;
579
- }
580
-
581
563
  this._fragments.push(buf);
582
564
  }
583
565
 
@@ -604,6 +586,7 @@ class Receiver extends Writable {
604
586
  this._totalPayloadLength = 0;
605
587
  this._messageLength = 0;
606
588
  this._fragmented = 0;
589
+ this._numFragments = 0;
607
590
  this._fragments = [];
608
591
 
609
592
  if (this._opcode === 2) {
@@ -43,9 +43,9 @@ class WebSocketServer extends EventEmitter {
43
43
  * called
44
44
  * @param {Function} [options.handleProtocols] A hook to handle protocols
45
45
  * @param {String} [options.host] The hostname where to bind the server
46
- * @param {Number} [options.maxBufferedChunks=1048576] The maximum number of
46
+ * @param {Number} [options.maxBufferedChunks=262144] The maximum number of
47
47
  * buffered data chunks
48
- * @param {Number} [options.maxFragments=131072] The maximum number of message
48
+ * @param {Number} [options.maxFragments=16384] The maximum number of message
49
49
  * fragments
50
50
  * @param {Number} [options.maxPayload=104857600] The maximum allowed message
51
51
  * size
@@ -69,8 +69,8 @@ class WebSocketServer extends EventEmitter {
69
69
  options = {
70
70
  allowSynchronousEvents: true,
71
71
  autoPong: true,
72
- maxBufferedChunks: 1024 * 1024,
73
- maxFragments: 128 * 1024,
72
+ maxBufferedChunks: 256 * 1024,
73
+ maxFragments: 16 * 1024,
74
74
  maxPayload: 100 * 1024 * 1024,
75
75
  skipUTF8Validation: false,
76
76
  perMessageDeflate: false,
@@ -646,9 +646,9 @@ module.exports = WebSocket;
646
646
  * masking key
647
647
  * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the
648
648
  * handshake request
649
- * @param {Number} [options.maxBufferedChunks=1048576] The maximum number of
649
+ * @param {Number} [options.maxBufferedChunks=262144] The maximum number of
650
650
  * buffered data chunks
651
- * @param {Number} [options.maxFragments=131072] The maximum number of message
651
+ * @param {Number} [options.maxFragments=16384] The maximum number of message
652
652
  * fragments
653
653
  * @param {Number} [options.maxPayload=104857600] The maximum allowed message
654
654
  * size
@@ -670,8 +670,8 @@ function initAsClient(websocket, address, protocols, options) {
670
670
  autoPong: true,
671
671
  closeTimeout: CLOSE_TIMEOUT,
672
672
  protocolVersion: protocolVersions[1],
673
- maxBufferedChunks: 1024 * 1024,
674
- maxFragments: 128 * 1024,
673
+ maxBufferedChunks: 256 * 1024,
674
+ maxFragments: 16 * 1024,
675
675
  maxPayload: 100 * 1024 * 1024,
676
676
  skipUTF8Validation: false,
677
677
  perMessageDeflate: true,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ws",
3
- "version": "8.21.0",
3
+ "version": "8.21.1",
4
4
  "description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js",
5
5
  "keywords": [
6
6
  "HyBi",
@@ -66,5 +66,9 @@
66
66
  "nyc": "^15.0.0",
67
67
  "prettier": "^3.0.0",
68
68
  "utf-8-validate": "^6.0.0"
69
+ },
70
+ "allowScripts": {
71
+ "bufferutil": true,
72
+ "utf-8-validate": true
69
73
  }
70
74
  }
@@ -294,14 +294,6 @@
294
294
  ]
295
295
  }
296
296
  },
297
- "channelEnvVars": {
298
- "feishu": [
299
- "FEISHU_APP_ID",
300
- "FEISHU_APP_SECRET",
301
- "FEISHU_VERIFICATION_TOKEN",
302
- "FEISHU_ENCRYPT_KEY"
303
- ]
304
- },
305
297
  "skills": [
306
298
  "./skills"
307
299
  ],
@@ -1051,7 +1043,7 @@
1051
1043
  "exclusiveMinimum": 0,
1052
1044
  "maximum": 300000
1053
1045
  },
1054
- "heartbeat": {
1046
+ "heartbeatVisibility": {
1055
1047
  "type": "object",
1056
1048
  "properties": {
1057
1049
  "visibility": {
@@ -1150,9 +1142,6 @@
1150
1142
  },
1151
1143
  "bitable": {
1152
1144
  "type": "boolean"
1153
- },
1154
- "base": {
1155
- "type": "boolean"
1156
1145
  }
1157
1146
  },
1158
1147
  "additionalProperties": false
@@ -1818,7 +1807,7 @@
1818
1807
  "exclusiveMinimum": 0,
1819
1808
  "maximum": 300000
1820
1809
  },
1821
- "heartbeat": {
1810
+ "heartbeatVisibility": {
1822
1811
  "type": "object",
1823
1812
  "properties": {
1824
1813
  "visibility": {
@@ -1917,9 +1906,6 @@
1917
1906
  },
1918
1907
  "bitable": {
1919
1908
  "type": "boolean"
1920
- },
1921
- "base": {
1922
- "type": "boolean"
1923
1909
  }
1924
1910
  },
1925
1911
  "additionalProperties": false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/feishu",
3
- "version": "2026.7.2-beta.3",
3
+ "version": "2026.7.2-beta.5",
4
4
  "description": "OpenClaw Feishu/Lark channel plugin for chats and workplace tools (community maintained by @m1heng).",
5
5
  "repository": {
6
6
  "type": "git",
@@ -8,15 +8,15 @@
8
8
  },
9
9
  "type": "module",
10
10
  "dependencies": {
11
- "@larksuiteoapi/node-sdk": "1.68.0",
11
+ "@larksuiteoapi/node-sdk": "1.71.1",
12
12
  "mdast-util-from-markdown": "2.0.3",
13
13
  "mdast-util-gfm-table": "2.0.0",
14
14
  "micromark-extension-gfm-table": "2.1.1",
15
- "typebox": "1.3.3",
15
+ "typebox": "1.3.6",
16
16
  "zod": "4.4.3"
17
17
  },
18
18
  "peerDependencies": {
19
- "openclaw": ">=2026.7.2-beta.3"
19
+ "openclaw": ">=2026.7.2-beta.5"
20
20
  },
21
21
  "peerDependenciesMeta": {
22
22
  "openclaw": {
@@ -30,6 +30,16 @@
30
30
  "setupEntry": "./dist/setup-entry.js",
31
31
  "channel": {
32
32
  "id": "feishu",
33
+ "configuredState": {
34
+ "env": {
35
+ "anyOf": [
36
+ "FEISHU_APP_ID",
37
+ "FEISHU_APP_SECRET",
38
+ "FEISHU_VERIFICATION_TOKEN",
39
+ "FEISHU_ENCRYPT_KEY"
40
+ ]
41
+ }
42
+ },
33
43
  "label": "Feishu",
34
44
  "selectionLabel": "Feishu/Lark (飞书)",
35
45
  "docsPath": "/channels/feishu",
@@ -39,7 +49,10 @@
39
49
  "lark"
40
50
  ],
41
51
  "order": 35,
42
- "quickstartAllowFrom": true
52
+ "quickstartAllowFrom": true,
53
+ "setup": {
54
+ "fields": []
55
+ }
43
56
  },
44
57
  "install": {
45
58
  "npmSpec": "@openclaw/feishu",
@@ -47,10 +60,10 @@
47
60
  "minHostVersion": ">=2026.5.29"
48
61
  },
49
62
  "compat": {
50
- "pluginApi": ">=2026.7.2-beta.3"
63
+ "pluginApi": ">=2026.7.2-beta.5"
51
64
  },
52
65
  "build": {
53
- "openclawVersion": "2026.7.2-beta.3"
66
+ "openclawVersion": "2026.7.2-beta.5"
54
67
  },
55
68
  "release": {
56
69
  "publishToClawHub": true,
@@ -64,7 +77,6 @@
64
77
  "files": [
65
78
  "dist/**",
66
79
  "openclaw.plugin.json",
67
- "npm-shrinkwrap.json",
68
80
  "README.md",
69
81
  "skills/**"
70
82
  ],
@@ -1,97 +0,0 @@
1
- import { asObjectRecord, defineChannelAliasMigration } from "openclaw/plugin-sdk/runtime-doctor";
2
- //#region extensions/feishu/src/doctor-contract.ts
3
- const streamingAliasMigration = defineChannelAliasMigration({
4
- channelId: "feishu",
5
- streaming: { defaultMode: "partial" },
6
- accountStreamingReplacesRoot: true
7
- });
8
- const LEGACY_COALESCE_FIELDS = [
9
- "enabled",
10
- "minDelayMs",
11
- "maxDelayMs"
12
- ];
13
- function sanitizeLegacyCoalesceFields(params) {
14
- const streaming = asObjectRecord(params.entry.streaming);
15
- const block = asObjectRecord(streaming?.block);
16
- const coalesce = asObjectRecord(block?.coalesce);
17
- if (!streaming || !block || !coalesce) return {
18
- entry: params.entry,
19
- changed: false
20
- };
21
- const removed = LEGACY_COALESCE_FIELDS.filter((field) => coalesce[field] !== void 0);
22
- if (removed.length === 0) return {
23
- entry: params.entry,
24
- changed: false
25
- };
26
- const nextCoalesce = { ...coalesce };
27
- for (const field of removed) delete nextCoalesce[field];
28
- params.changes.push(`Removed ${params.pathPrefix}.streaming.block.coalesce.{${removed.join(",")}} (legacy Feishu-only fields; block delivery reads minChars/maxChars/idleMs).`);
29
- return {
30
- entry: {
31
- ...params.entry,
32
- streaming: {
33
- ...streaming,
34
- block: {
35
- ...block,
36
- coalesce: nextCoalesce
37
- }
38
- }
39
- },
40
- changed: true
41
- };
42
- }
43
- function sanitizeFeishuCoalesce(cfg, changes) {
44
- const channels = cfg.channels;
45
- const entry = asObjectRecord(channels?.feishu);
46
- if (!entry) return cfg;
47
- const root = sanitizeLegacyCoalesceFields({
48
- entry,
49
- pathPrefix: "channels.feishu",
50
- changes
51
- });
52
- let updated = root.entry;
53
- let changed = root.changed;
54
- const accounts = asObjectRecord(updated.accounts);
55
- if (accounts) {
56
- let accountsChanged = false;
57
- const nextAccounts = { ...accounts };
58
- for (const [accountId, rawAccount] of Object.entries(accounts)) {
59
- const account = asObjectRecord(rawAccount);
60
- if (!account) continue;
61
- const sanitized = sanitizeLegacyCoalesceFields({
62
- entry: account,
63
- pathPrefix: `channels.feishu.accounts.${accountId}`,
64
- changes
65
- });
66
- if (sanitized.changed) {
67
- nextAccounts[accountId] = sanitized.entry;
68
- accountsChanged = true;
69
- }
70
- }
71
- if (accountsChanged) {
72
- updated = {
73
- ...updated,
74
- accounts: nextAccounts
75
- };
76
- changed = true;
77
- }
78
- }
79
- if (!changed) return cfg;
80
- return {
81
- ...cfg,
82
- channels: {
83
- ...channels,
84
- feishu: updated
85
- }
86
- };
87
- }
88
- const legacyConfigRules = streamingAliasMigration.legacyConfigRules;
89
- function normalizeCompatibilityConfig({ cfg }) {
90
- const aliases = streamingAliasMigration.normalizeChannelConfig({ cfg });
91
- return {
92
- config: sanitizeFeishuCoalesce(aliases.config, aliases.changes),
93
- changes: aliases.changes
94
- };
95
- }
96
- //#endregion
97
- export { normalizeCompatibilityConfig as n, legacyConfigRules as t };
@@ -1,43 +0,0 @@
1
- import { t as probeFeishu } from "./probe-BgboTHIn.js";
2
- import { parseStrictPositiveInteger } from "openclaw/plugin-sdk/number-runtime";
3
- import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/string-coerce-runtime";
4
- //#region extensions/feishu/src/monitor-startup-timeout.ts
5
- const FEISHU_STARTUP_BOT_INFO_TIMEOUT_DEFAULT_MS = 3e4;
6
- const FEISHU_STARTUP_BOT_INFO_TIMEOUT_ENV = "OPENCLAW_FEISHU_STARTUP_PROBE_TIMEOUT_MS";
7
- function resolveStartupProbeTimeoutMs(env = process.env) {
8
- const raw = env[FEISHU_STARTUP_BOT_INFO_TIMEOUT_ENV];
9
- if (raw) {
10
- const parsed = parseStrictPositiveInteger(raw);
11
- if (parsed !== void 0) return parsed;
12
- console.warn(`[feishu] ${FEISHU_STARTUP_BOT_INFO_TIMEOUT_ENV}="${raw}" is invalid; using default ${FEISHU_STARTUP_BOT_INFO_TIMEOUT_DEFAULT_MS}ms`);
13
- }
14
- return FEISHU_STARTUP_BOT_INFO_TIMEOUT_DEFAULT_MS;
15
- }
16
- //#endregion
17
- //#region extensions/feishu/src/monitor.startup.ts
18
- const FEISHU_STARTUP_BOT_INFO_TIMEOUT_MS = resolveStartupProbeTimeoutMs();
19
- function isTimeoutErrorMessage(message) {
20
- const lower = normalizeLowercaseStringOrEmpty(message);
21
- return lower.includes("timeout") || lower.includes("timed out");
22
- }
23
- function isAbortErrorMessage(message) {
24
- return normalizeLowercaseStringOrEmpty(message).includes("aborted");
25
- }
26
- async function fetchBotIdentityForMonitor(account, options = {}) {
27
- if (options.abortSignal?.aborted) return {};
28
- const timeoutMs = options.timeoutMs ?? FEISHU_STARTUP_BOT_INFO_TIMEOUT_MS;
29
- const result = await probeFeishu(account, {
30
- timeoutMs,
31
- abortSignal: options.abortSignal
32
- });
33
- if (result.ok) return {
34
- botOpenId: result.botOpenId,
35
- botName: result.botName
36
- };
37
- const probeError = result.error ?? void 0;
38
- if (options.abortSignal?.aborted || isAbortErrorMessage(probeError)) return {};
39
- if (isTimeoutErrorMessage(probeError)) (options.runtime?.error ?? console.error)(`feishu[${account.accountId}]: bot info probe timed out after ${timeoutMs}ms; continuing startup`);
40
- return {};
41
- }
42
- //#endregion
43
- export { fetchBotIdentityForMonitor as t };
@@ -1,8 +0,0 @@
1
- # Changelog
2
-
3
- ## [1.1.2](https://github.com/protobufjs/protobuf.js/compare/inquire-v1.1.1...inquire-v1.1.2) (2026-05-17)
4
-
5
-
6
- ### Bug Fixes
7
-
8
- * Backport bundler-safe optional module lookups ([#2254](https://github.com/protobufjs/protobuf.js/issues/2254)) ([0853a62](https://github.com/protobufjs/protobuf.js/commit/0853a625680f9247596b84ef48082b8f4e554797))