@openclaw/google-meet 2026.7.1-beta.2 → 2026.7.1-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 (381) hide show
  1. package/dist/{chrome-create-C1akZT_q.js → chrome-create-BhgM0jQO.js} +6 -5
  2. package/dist/{cli-BXICNPAs.js → cli-D364Yrym.js} +4 -4
  3. package/dist/{config-D_YKxh0m.js → config-DDYRr7-P.js} +2 -1
  4. package/dist/{create-CHlW2v6-.js → create-CkkaRlbI.js} +4 -3
  5. package/dist/index.js +177 -141
  6. package/dist/{oauth-DK1mwF2i.js → oauth-75iPDzIn.js} +6 -3
  7. package/node_modules/commander/Readme.md +11 -15
  8. package/node_modules/commander/index.js +14 -17
  9. package/node_modules/commander/lib/argument.js +3 -6
  10. package/node_modules/commander/lib/command.js +46 -33
  11. package/node_modules/commander/lib/error.js +2 -5
  12. package/node_modules/commander/lib/help.js +4 -20
  13. package/node_modules/commander/lib/option.js +3 -6
  14. package/node_modules/commander/lib/suggestSimilar.js +2 -4
  15. package/node_modules/commander/package.json +10 -28
  16. package/node_modules/commander/typings/index.d.ts +3 -3
  17. package/node_modules/typebox/build/compile/validator.d.mts +2 -7
  18. package/node_modules/typebox/build/compile/validator.mjs +6 -36
  19. package/node_modules/typebox/build/error/errors.d.mts +1 -7
  20. package/node_modules/typebox/build/format/_idna.mjs +36 -6
  21. package/node_modules/typebox/build/format/_puny.mjs +4 -1
  22. package/node_modules/typebox/build/format/uuid.d.mts +2 -2
  23. package/node_modules/typebox/build/format/uuid.mjs +3 -3
  24. package/node_modules/typebox/build/guard/emit.d.mts +0 -4
  25. package/node_modules/typebox/build/guard/emit.mjs +0 -8
  26. package/node_modules/typebox/build/guard/guard.d.mts +4 -8
  27. package/node_modules/typebox/build/guard/guard.mjs +5 -13
  28. package/node_modules/typebox/build/schema/engine/boolean.d.mts +3 -3
  29. package/node_modules/typebox/build/schema/engine/boolean.mjs +4 -4
  30. package/node_modules/typebox/build/schema/engine/index.d.mts +0 -1
  31. package/node_modules/typebox/build/schema/engine/index.mjs +0 -1
  32. package/node_modules/typebox/build/schema/engine/schema.mjs +5 -10
  33. package/node_modules/typebox/build/schema/engine/type.mjs +14 -18
  34. package/node_modules/typebox/build/schema/types/dependencies.mjs +1 -1
  35. package/node_modules/typebox/build/schema/types/index.d.mts +0 -1
  36. package/node_modules/typebox/build/schema/types/index.mjs +0 -1
  37. package/node_modules/typebox/build/schema/types/schema.d.mts +1 -1
  38. package/node_modules/typebox/build/schema/types/schema.mjs +2 -2
  39. package/node_modules/typebox/build/system/locale/ar_001.mjs +0 -1
  40. package/node_modules/typebox/build/system/locale/bn_BD.mjs +0 -1
  41. package/node_modules/typebox/build/system/locale/cs_CZ.mjs +0 -1
  42. package/node_modules/typebox/build/system/locale/de_DE.mjs +0 -1
  43. package/node_modules/typebox/build/system/locale/el_GR.mjs +0 -1
  44. package/node_modules/typebox/build/system/locale/en_US.mjs +0 -1
  45. package/node_modules/typebox/build/system/locale/es_419.mjs +0 -1
  46. package/node_modules/typebox/build/system/locale/es_AR.mjs +0 -1
  47. package/node_modules/typebox/build/system/locale/es_ES.mjs +0 -1
  48. package/node_modules/typebox/build/system/locale/es_MX.mjs +0 -1
  49. package/node_modules/typebox/build/system/locale/fa_IR.mjs +0 -1
  50. package/node_modules/typebox/build/system/locale/fil_PH.mjs +0 -1
  51. package/node_modules/typebox/build/system/locale/fr_CA.mjs +0 -1
  52. package/node_modules/typebox/build/system/locale/fr_FR.mjs +0 -1
  53. package/node_modules/typebox/build/system/locale/ha_NG.mjs +0 -1
  54. package/node_modules/typebox/build/system/locale/hi_IN.mjs +0 -1
  55. package/node_modules/typebox/build/system/locale/hu_HU.mjs +0 -1
  56. package/node_modules/typebox/build/system/locale/id_ID.mjs +0 -1
  57. package/node_modules/typebox/build/system/locale/it_IT.mjs +0 -1
  58. package/node_modules/typebox/build/system/locale/ja_JP.mjs +0 -1
  59. package/node_modules/typebox/build/system/locale/ko_KR.mjs +0 -1
  60. package/node_modules/typebox/build/system/locale/ms_MY.mjs +0 -1
  61. package/node_modules/typebox/build/system/locale/nl_NL.mjs +0 -1
  62. package/node_modules/typebox/build/system/locale/pl_PL.mjs +0 -1
  63. package/node_modules/typebox/build/system/locale/pt_BR.mjs +0 -1
  64. package/node_modules/typebox/build/system/locale/pt_PT.mjs +0 -1
  65. package/node_modules/typebox/build/system/locale/ro_RO.mjs +0 -1
  66. package/node_modules/typebox/build/system/locale/ru_RU.mjs +0 -1
  67. package/node_modules/typebox/build/system/locale/sv_SE.mjs +0 -1
  68. package/node_modules/typebox/build/system/locale/sw_TZ.mjs +0 -1
  69. package/node_modules/typebox/build/system/locale/th_TH.mjs +0 -1
  70. package/node_modules/typebox/build/system/locale/tr_TR.mjs +0 -1
  71. package/node_modules/typebox/build/system/locale/uk_UA.mjs +0 -1
  72. package/node_modules/typebox/build/system/locale/ur_PK.mjs +0 -1
  73. package/node_modules/typebox/build/system/locale/vi_VN.mjs +0 -1
  74. package/node_modules/typebox/build/system/locale/yo_NG.mjs +0 -1
  75. package/node_modules/typebox/build/system/locale/zh_Hans.mjs +0 -1
  76. package/node_modules/typebox/build/system/locale/zh_Hant.mjs +0 -1
  77. package/node_modules/typebox/build/system/memory/clone.d.mts +2 -3
  78. package/node_modules/typebox/build/system/memory/clone.mjs +73 -26
  79. package/node_modules/typebox/build/system/settings/settings.d.mts +15 -0
  80. package/node_modules/typebox/build/system/settings/settings.mjs +3 -1
  81. package/node_modules/typebox/build/type/action/_add_immutable.d.mts +11 -0
  82. package/node_modules/typebox/build/type/action/_add_immutable.mjs +11 -0
  83. package/node_modules/typebox/build/type/action/_add_optional.d.mts +11 -0
  84. package/node_modules/typebox/build/type/action/_add_optional.mjs +11 -0
  85. package/node_modules/typebox/build/type/action/_add_readonly.d.mts +11 -0
  86. package/node_modules/typebox/build/type/action/_add_readonly.mjs +11 -0
  87. package/node_modules/typebox/build/type/action/_remove_immutable.d.mts +11 -0
  88. package/node_modules/typebox/build/type/action/_remove_immutable.mjs +11 -0
  89. package/node_modules/typebox/build/type/action/_remove_optional.d.mts +11 -0
  90. package/node_modules/typebox/build/type/action/_remove_optional.mjs +11 -0
  91. package/node_modules/typebox/build/type/action/_remove_readonly.d.mts +11 -0
  92. package/node_modules/typebox/build/type/action/_remove_readonly.mjs +11 -0
  93. package/node_modules/typebox/build/type/action/conditional.d.mts +2 -3
  94. package/node_modules/typebox/build/type/action/conditional.mjs +2 -1
  95. package/node_modules/typebox/build/type/action/index.d.mts +7 -4
  96. package/node_modules/typebox/build/type/action/index.mjs +7 -4
  97. package/node_modules/typebox/build/type/action/mapped.d.mts +2 -3
  98. package/node_modules/typebox/build/type/action/mapped.mjs +2 -1
  99. package/node_modules/typebox/build/type/action/module.d.mts +8 -7
  100. package/node_modules/typebox/build/type/action/module.mjs +7 -6
  101. package/node_modules/typebox/build/type/action/readonly_object.d.mts +0 -5
  102. package/node_modules/typebox/build/type/action/readonly_object.mjs +0 -5
  103. package/node_modules/typebox/build/type/action/with.d.mts +11 -0
  104. package/node_modules/typebox/build/type/action/with.mjs +11 -0
  105. package/node_modules/typebox/build/type/engine/call/distribute_arguments.mjs +1 -1
  106. package/node_modules/typebox/build/type/engine/call/instantiate.d.mts +1 -3
  107. package/node_modules/typebox/build/type/engine/call/instantiate.mjs +3 -2
  108. package/node_modules/typebox/build/type/engine/call/resolve_arguments.mjs +2 -2
  109. package/node_modules/typebox/build/type/engine/constructor_parameters/instantiate.d.mts +3 -4
  110. package/node_modules/typebox/build/type/engine/constructor_parameters/instantiate.mjs +2 -1
  111. package/node_modules/typebox/build/type/engine/cyclic/candidates.d.mts +2 -3
  112. package/node_modules/typebox/build/type/engine/cyclic/candidates.mjs +3 -6
  113. package/node_modules/typebox/build/type/engine/cyclic/check.d.mts +6 -9
  114. package/node_modules/typebox/build/type/engine/cyclic/check.mjs +10 -16
  115. package/node_modules/typebox/build/type/engine/cyclic/dependencies.d.mts +1 -4
  116. package/node_modules/typebox/build/type/engine/cyclic/dependencies.mjs +9 -15
  117. package/node_modules/typebox/build/type/engine/cyclic/extends.d.mts +1 -4
  118. package/node_modules/typebox/build/type/engine/cyclic/extends.mjs +8 -14
  119. package/node_modules/typebox/build/type/engine/cyclic/instantiate.d.mts +2 -5
  120. package/node_modules/typebox/build/type/engine/cyclic/instantiate.mjs +3 -2
  121. package/node_modules/typebox/build/type/engine/enum/index.d.mts +0 -1
  122. package/node_modules/typebox/build/type/engine/enum/index.mjs +0 -1
  123. package/node_modules/typebox/build/type/engine/evaluate/broaden.d.mts +1 -2
  124. package/node_modules/typebox/build/type/engine/evaluate/broaden.mjs +2 -6
  125. package/node_modules/typebox/build/type/engine/evaluate/composite.d.mts +10 -6
  126. package/node_modules/typebox/build/type/engine/evaluate/composite.mjs +10 -6
  127. package/node_modules/typebox/build/type/engine/evaluate/distribute.d.mts +2 -1
  128. package/node_modules/typebox/build/type/engine/evaluate/distribute.mjs +3 -3
  129. package/node_modules/typebox/build/type/engine/evaluate/evaluate.d.mts +17 -5
  130. package/node_modules/typebox/build/type/engine/evaluate/evaluate.mjs +34 -8
  131. package/node_modules/typebox/build/type/engine/exclude/operation.d.mts +5 -6
  132. package/node_modules/typebox/build/type/engine/exclude/operation.mjs +11 -12
  133. package/node_modules/typebox/build/type/engine/extract/operation.d.mts +5 -6
  134. package/node_modules/typebox/build/type/engine/extract/operation.mjs +11 -12
  135. package/node_modules/typebox/build/type/engine/immutable/instantiate_add.d.mts +10 -0
  136. package/node_modules/typebox/build/type/engine/immutable/instantiate_add.mjs +14 -0
  137. package/node_modules/typebox/build/type/engine/immutable/instantiate_remove.d.mts +10 -0
  138. package/node_modules/typebox/build/type/engine/immutable/instantiate_remove.mjs +14 -0
  139. package/node_modules/typebox/build/type/engine/index.d.mts +2 -2
  140. package/node_modules/typebox/build/type/engine/index.mjs +2 -2
  141. package/node_modules/typebox/build/type/engine/indexable/from_dependent.d.mts +5 -0
  142. package/node_modules/typebox/build/type/engine/indexable/from_dependent.mjs +8 -0
  143. package/node_modules/typebox/build/type/engine/indexable/from_enum.d.mts +3 -3
  144. package/node_modules/typebox/build/type/engine/indexable/from_enum.mjs +4 -4
  145. package/node_modules/typebox/build/type/engine/indexable/from_template_literal.d.mts +2 -2
  146. package/node_modules/typebox/build/type/engine/indexable/from_template_literal.mjs +3 -3
  147. package/node_modules/typebox/build/type/engine/indexable/from_type.d.mts +3 -1
  148. package/node_modules/typebox/build/type/engine/indexable/from_type.mjs +9 -6
  149. package/node_modules/typebox/build/type/engine/indexed/instantiate.d.mts +2 -1
  150. package/node_modules/typebox/build/type/engine/indexed/instantiate.mjs +5 -2
  151. package/node_modules/typebox/build/type/engine/instantiate.d.mts +44 -31
  152. package/node_modules/typebox/build/type/engine/instantiate.mjs +82 -83
  153. package/node_modules/typebox/build/type/engine/interface/instantiate.d.mts +3 -6
  154. package/node_modules/typebox/build/type/engine/intrinsics/from_template_literal.d.mts +2 -2
  155. package/node_modules/typebox/build/type/engine/intrinsics/from_template_literal.mjs +3 -3
  156. package/node_modules/typebox/build/type/engine/keyof/instantiate.d.mts +2 -1
  157. package/node_modules/typebox/build/type/engine/keyof/instantiate.mjs +5 -1
  158. package/node_modules/typebox/build/type/engine/mapped/mapped_operation.d.mts +4 -4
  159. package/node_modules/typebox/build/type/engine/mapped/mapped_operation.mjs +3 -3
  160. package/node_modules/typebox/build/type/engine/mapped/mapped_variants.d.mts +5 -4
  161. package/node_modules/typebox/build/type/engine/mapped/mapped_variants.mjs +10 -5
  162. package/node_modules/typebox/build/type/engine/module/instantiate.d.mts +7 -9
  163. package/node_modules/typebox/build/type/engine/module/instantiate.mjs +17 -15
  164. package/node_modules/typebox/build/type/engine/object/from_dependent.d.mts +5 -0
  165. package/node_modules/typebox/build/type/engine/object/from_dependent.mjs +8 -0
  166. package/node_modules/typebox/build/type/engine/object/from_type.d.mts +3 -1
  167. package/node_modules/typebox/build/type/engine/object/from_type.mjs +8 -5
  168. package/node_modules/typebox/build/type/engine/object/from_union.mjs +2 -2
  169. package/node_modules/typebox/build/type/engine/optional/instantiate_add.d.mts +10 -0
  170. package/node_modules/typebox/build/type/engine/optional/instantiate_add.mjs +14 -0
  171. package/node_modules/typebox/build/type/engine/optional/instantiate_remove.d.mts +10 -0
  172. package/node_modules/typebox/build/type/engine/optional/instantiate_remove.mjs +14 -0
  173. package/node_modules/typebox/build/type/engine/parameters/instantiate.d.mts +3 -4
  174. package/node_modules/typebox/build/type/engine/parameters/instantiate.mjs +2 -1
  175. package/node_modules/typebox/build/type/engine/partial/from_dependent.d.mts +5 -0
  176. package/node_modules/typebox/build/type/engine/partial/from_dependent.mjs +8 -0
  177. package/node_modules/typebox/build/type/engine/partial/from_intersect.d.mts +1 -1
  178. package/node_modules/typebox/build/type/engine/partial/from_intersect.mjs +3 -2
  179. package/node_modules/typebox/build/type/engine/partial/from_object.d.mts +2 -2
  180. package/node_modules/typebox/build/type/engine/partial/from_object.mjs +2 -2
  181. package/node_modules/typebox/build/type/engine/partial/from_type.d.mts +3 -1
  182. package/node_modules/typebox/build/type/engine/partial/from_type.mjs +7 -4
  183. package/node_modules/typebox/build/type/engine/priority/index.d.mts +1 -0
  184. package/node_modules/typebox/build/type/engine/priority/index.mjs +1 -0
  185. package/node_modules/typebox/build/type/engine/priority/priority.d.mts +20 -0
  186. package/node_modules/typebox/build/type/engine/priority/priority.mjs +28 -0
  187. package/node_modules/typebox/build/type/engine/readonly/instantiate_add.d.mts +10 -0
  188. package/node_modules/typebox/build/type/engine/readonly/instantiate_add.mjs +14 -0
  189. package/node_modules/typebox/build/type/engine/readonly/instantiate_remove.d.mts +10 -0
  190. package/node_modules/typebox/build/type/engine/readonly/instantiate_remove.mjs +14 -0
  191. package/node_modules/typebox/build/type/engine/readonly_object/from_array.d.mts +2 -2
  192. package/node_modules/typebox/build/type/engine/readonly_object/from_array.mjs +2 -2
  193. package/node_modules/typebox/build/type/engine/readonly_object/from_dependent.d.mts +5 -0
  194. package/node_modules/typebox/build/type/engine/readonly_object/from_dependent.mjs +8 -0
  195. package/node_modules/typebox/build/type/engine/readonly_object/from_intersect.d.mts +1 -1
  196. package/node_modules/typebox/build/type/engine/readonly_object/from_intersect.mjs +3 -2
  197. package/node_modules/typebox/build/type/engine/readonly_object/from_object.d.mts +2 -2
  198. package/node_modules/typebox/build/type/engine/readonly_object/from_object.mjs +2 -2
  199. package/node_modules/typebox/build/type/engine/readonly_object/from_tuple.d.mts +2 -2
  200. package/node_modules/typebox/build/type/engine/readonly_object/from_tuple.mjs +2 -2
  201. package/node_modules/typebox/build/type/engine/readonly_object/from_type.d.mts +3 -1
  202. package/node_modules/typebox/build/type/engine/readonly_object/from_type.mjs +8 -5
  203. package/node_modules/typebox/build/type/engine/record/from_key_enum.d.mts +2 -2
  204. package/node_modules/typebox/build/type/engine/record/from_key_enum.mjs +2 -2
  205. package/node_modules/typebox/build/type/engine/record/from_key_template_literal.d.mts +2 -2
  206. package/node_modules/typebox/build/type/engine/record/from_key_template_literal.mjs +2 -2
  207. package/node_modules/typebox/build/type/engine/ref/instantiate.d.mts +3 -3
  208. package/node_modules/typebox/build/type/engine/ref/instantiate.mjs +6 -6
  209. package/node_modules/typebox/build/type/engine/required/from_dependent.d.mts +5 -0
  210. package/node_modules/typebox/build/type/engine/required/from_dependent.mjs +8 -0
  211. package/node_modules/typebox/build/type/engine/required/from_intersect.d.mts +1 -1
  212. package/node_modules/typebox/build/type/engine/required/from_intersect.mjs +3 -2
  213. package/node_modules/typebox/build/type/engine/required/from_object.d.mts +2 -2
  214. package/node_modules/typebox/build/type/engine/required/from_object.mjs +2 -2
  215. package/node_modules/typebox/build/type/engine/required/from_type.d.mts +3 -1
  216. package/node_modules/typebox/build/type/engine/required/from_type.mjs +7 -4
  217. package/node_modules/typebox/build/type/engine/template_literal/decode.mjs +3 -3
  218. package/node_modules/typebox/build/type/engine/template_literal/encode.d.mts +2 -2
  219. package/node_modules/typebox/build/type/engine/template_literal/encode.mjs +6 -6
  220. package/node_modules/typebox/build/type/engine/template_literal/is_finite.mjs +1 -1
  221. package/node_modules/typebox/build/type/engine/template_literal/is_pattern.mjs +1 -0
  222. package/node_modules/typebox/build/type/engine/this/expand_this.d.mts +1 -4
  223. package/node_modules/typebox/build/type/engine/this/expand_this.mjs +7 -13
  224. package/node_modules/typebox/build/type/engine/with/instantiate.d.mts +8 -0
  225. package/node_modules/typebox/build/type/engine/{options → with}/instantiate.mjs +5 -5
  226. package/node_modules/typebox/build/type/extends/dependent.d.mts +6 -0
  227. package/node_modules/typebox/build/type/extends/dependent.mjs +6 -0
  228. package/node_modules/typebox/build/type/extends/enum.d.mts +4 -4
  229. package/node_modules/typebox/build/type/extends/enum.mjs +3 -2
  230. package/node_modules/typebox/build/type/extends/extends_left.d.mts +5 -7
  231. package/node_modules/typebox/build/type/extends/extends_left.mjs +24 -27
  232. package/node_modules/typebox/build/type/extends/extends_right.d.mts +7 -5
  233. package/node_modules/typebox/build/type/extends/extends_right.mjs +20 -15
  234. package/node_modules/typebox/build/type/extends/inference.mjs +1 -1
  235. package/node_modules/typebox/build/type/extends/object.d.mts +8 -1
  236. package/node_modules/typebox/build/type/extends/object.mjs +25 -3
  237. package/node_modules/typebox/build/type/extends/parameters.mjs +2 -2
  238. package/node_modules/typebox/build/type/extends/record.d.mts +13 -0
  239. package/node_modules/typebox/build/type/extends/record.mjs +23 -0
  240. package/node_modules/typebox/build/type/extends/template_literal.d.mts +3 -3
  241. package/node_modules/typebox/build/type/extends/template_literal.mjs +3 -3
  242. package/node_modules/typebox/build/type/extends/tuple.d.mts +3 -6
  243. package/node_modules/typebox/build/type/extends/tuple.mjs +6 -5
  244. package/node_modules/typebox/build/type/extends/union.mjs +2 -2
  245. package/node_modules/typebox/build/type/script/mapping.d.mts +84 -99
  246. package/node_modules/typebox/build/type/script/mapping.mjs +81 -85
  247. package/node_modules/typebox/build/type/script/parser.d.mts +40 -40
  248. package/node_modules/typebox/build/type/script/parser.mjs +22 -22
  249. package/node_modules/typebox/build/type/script/script.d.mts +3 -4
  250. package/node_modules/typebox/build/type/script/script.mjs +3 -2
  251. package/node_modules/typebox/build/type/script/token/internal/guard.d.mts +1 -1
  252. package/node_modules/typebox/build/type/script/token/internal/guard.mjs +1 -1
  253. package/node_modules/typebox/build/type/script/token/internal/take.mjs +1 -1
  254. package/node_modules/typebox/build/type/script/token/until.mjs +2 -2
  255. package/node_modules/typebox/build/type/types/_codec.d.mts +12 -12
  256. package/node_modules/typebox/build/type/types/_codec.mjs +0 -1
  257. package/node_modules/typebox/build/type/types/_immutable.d.mts +2 -9
  258. package/node_modules/typebox/build/type/types/_immutable.mjs +2 -10
  259. package/node_modules/typebox/build/type/types/_optional.d.mts +2 -9
  260. package/node_modules/typebox/build/type/types/_optional.mjs +2 -11
  261. package/node_modules/typebox/build/type/types/_readonly.d.mts +2 -9
  262. package/node_modules/typebox/build/type/types/_readonly.mjs +2 -10
  263. package/node_modules/typebox/build/type/types/_refine.d.mts +8 -10
  264. package/node_modules/typebox/build/type/types/_refine.mjs +1 -2
  265. package/node_modules/typebox/build/type/types/call.d.mts +3 -3
  266. package/node_modules/typebox/build/type/types/call.mjs +3 -2
  267. package/node_modules/typebox/build/type/types/deferred.d.mts +1 -0
  268. package/node_modules/typebox/build/type/types/deferred.mjs +1 -1
  269. package/node_modules/typebox/build/type/types/dependent.d.mts +17 -0
  270. package/node_modules/typebox/build/type/types/dependent.mjs +24 -0
  271. package/node_modules/typebox/build/type/types/enum.d.mts +3 -1
  272. package/node_modules/typebox/build/type/types/enum.mjs +5 -0
  273. package/node_modules/typebox/build/type/types/index.d.mts +1 -4
  274. package/node_modules/typebox/build/type/types/index.mjs +1 -4
  275. package/node_modules/typebox/build/type/types/number.d.mts +1 -1
  276. package/node_modules/typebox/build/type/types/number.mjs +1 -1
  277. package/node_modules/typebox/build/type/types/record.d.mts +13 -7
  278. package/node_modules/typebox/build/type/types/record.mjs +15 -9
  279. package/node_modules/typebox/build/type/types/static.d.mts +2 -5
  280. package/node_modules/typebox/build/typebox.d.mts +4 -8
  281. package/node_modules/typebox/build/typebox.mjs +4 -8
  282. package/node_modules/typebox/build/value/clean/clean.mjs +4 -2
  283. package/node_modules/typebox/build/value/clean/from_intersect.mjs +2 -2
  284. package/node_modules/typebox/build/value/clean/from_type.mjs +8 -10
  285. package/node_modules/typebox/build/value/clean/from_union.d.mts +1 -1
  286. package/node_modules/typebox/build/value/clean/from_union.mjs +1 -2
  287. package/node_modules/typebox/build/value/clone/clone.mjs +2 -73
  288. package/node_modules/typebox/build/value/codec/decode.mjs +4 -2
  289. package/node_modules/typebox/build/value/codec/encode.mjs +4 -2
  290. package/node_modules/typebox/build/value/codec/from_array.mjs +1 -4
  291. package/node_modules/typebox/build/value/codec/from_object.mjs +1 -4
  292. package/node_modules/typebox/build/value/codec/from_record.mjs +2 -7
  293. package/node_modules/typebox/build/value/codec/from_tuple.mjs +1 -4
  294. package/node_modules/typebox/build/value/codec/from_union.mjs +2 -3
  295. package/node_modules/typebox/build/value/convert/from_enum.mjs +3 -4
  296. package/node_modules/typebox/build/value/convert/from_template_literal.d.mts +1 -1
  297. package/node_modules/typebox/build/value/convert/from_template_literal.mjs +2 -3
  298. package/node_modules/typebox/build/value/convert/from_type.mjs +19 -21
  299. package/node_modules/typebox/build/value/create/from_enum.mjs +2 -2
  300. package/node_modules/typebox/build/value/create/from_type.mjs +23 -31
  301. package/node_modules/typebox/build/value/default/from_object.mjs +1 -1
  302. package/node_modules/typebox/build/value/default/from_type.mjs +8 -10
  303. package/node_modules/typebox/build/value/index.d.mts +0 -1
  304. package/node_modules/typebox/build/value/index.mjs +0 -1
  305. package/node_modules/typebox/build/value/repair/from_enum.mjs +2 -3
  306. package/node_modules/typebox/build/value/repair/from_type.mjs +24 -22
  307. package/node_modules/typebox/build/value/shared/union_priority_sort.d.mts +6 -2
  308. package/node_modules/typebox/build/value/shared/union_priority_sort.mjs +62 -26
  309. package/node_modules/typebox/build/value/value.d.mts +0 -1
  310. package/node_modules/typebox/build/value/value.mjs +0 -1
  311. package/node_modules/typebox/package.json +25 -25
  312. package/node_modules/typebox/readme.md +97 -80
  313. package/npm-shrinkwrap.json +12 -12
  314. package/package.json +6 -6
  315. package/node_modules/commander/esm.mjs +0 -16
  316. package/node_modules/commander/typings/esm.d.mts +0 -3
  317. package/node_modules/typebox/build/schema/engine/_guard.d.mts +0 -6
  318. package/node_modules/typebox/build/schema/engine/_guard.mjs +0 -26
  319. package/node_modules/typebox/build/schema/types/_guard.d.mts +0 -10
  320. package/node_modules/typebox/build/schema/types/_guard.mjs +0 -16
  321. package/node_modules/typebox/build/type/action/_optional.d.mts +0 -19
  322. package/node_modules/typebox/build/type/action/_optional.mjs +0 -40
  323. package/node_modules/typebox/build/type/action/_readonly.d.mts +0 -19
  324. package/node_modules/typebox/build/type/action/_readonly.mjs +0 -40
  325. package/node_modules/typebox/build/type/action/awaited.d.mts +0 -15
  326. package/node_modules/typebox/build/type/action/awaited.mjs +0 -15
  327. package/node_modules/typebox/build/type/action/options.d.mts +0 -11
  328. package/node_modules/typebox/build/type/action/options.mjs +0 -11
  329. package/node_modules/typebox/build/type/engine/awaited/instantiate.d.mts +0 -11
  330. package/node_modules/typebox/build/type/engine/awaited/instantiate.mjs +0 -20
  331. package/node_modules/typebox/build/type/engine/enum/enum_to_union.d.mts +0 -14
  332. package/node_modules/typebox/build/type/engine/enum/enum_to_union.mjs +0 -24
  333. package/node_modules/typebox/build/type/engine/options/index.d.mts +0 -1
  334. package/node_modules/typebox/build/type/engine/options/index.mjs +0 -1
  335. package/node_modules/typebox/build/type/engine/options/instantiate.d.mts +0 -8
  336. package/node_modules/typebox/build/type/extends/async_iterator.d.mts +0 -7
  337. package/node_modules/typebox/build/type/extends/async_iterator.mjs +0 -9
  338. package/node_modules/typebox/build/type/extends/iterator.d.mts +0 -7
  339. package/node_modules/typebox/build/type/extends/iterator.mjs +0 -9
  340. package/node_modules/typebox/build/type/extends/promise.d.mts +0 -7
  341. package/node_modules/typebox/build/type/extends/promise.mjs +0 -9
  342. package/node_modules/typebox/build/type/types/async_iterator.d.mts +0 -20
  343. package/node_modules/typebox/build/type/types/async_iterator.mjs +0 -28
  344. package/node_modules/typebox/build/type/types/base.d.mts +0 -50
  345. package/node_modules/typebox/build/type/types/base.mjs +0 -84
  346. package/node_modules/typebox/build/type/types/iterator.d.mts +0 -20
  347. package/node_modules/typebox/build/type/types/iterator.mjs +0 -28
  348. package/node_modules/typebox/build/type/types/promise.d.mts +0 -21
  349. package/node_modules/typebox/build/type/types/promise.mjs +0 -29
  350. package/node_modules/typebox/build/value/clean/from_base.d.mts +0 -2
  351. package/node_modules/typebox/build/value/clean/from_base.mjs +0 -4
  352. package/node_modules/typebox/build/value/convert/from_base.d.mts +0 -2
  353. package/node_modules/typebox/build/value/convert/from_base.mjs +0 -4
  354. package/node_modules/typebox/build/value/create/from_async_iterator.d.mts +0 -2
  355. package/node_modules/typebox/build/value/create/from_async_iterator.mjs +0 -5
  356. package/node_modules/typebox/build/value/create/from_base.d.mts +0 -2
  357. package/node_modules/typebox/build/value/create/from_base.mjs +0 -4
  358. package/node_modules/typebox/build/value/create/from_iterator.d.mts +0 -2
  359. package/node_modules/typebox/build/value/create/from_iterator.mjs +0 -5
  360. package/node_modules/typebox/build/value/create/from_promise.d.mts +0 -2
  361. package/node_modules/typebox/build/value/create/from_promise.mjs +0 -5
  362. package/node_modules/typebox/build/value/default/from_base.d.mts +0 -2
  363. package/node_modules/typebox/build/value/default/from_base.mjs +0 -5
  364. package/node_modules/typebox/build/value/mutate/error.d.mts +0 -3
  365. package/node_modules/typebox/build/value/mutate/error.mjs +0 -6
  366. package/node_modules/typebox/build/value/mutate/from_array.d.mts +0 -2
  367. package/node_modules/typebox/build/value/mutate/from_array.mjs +0 -16
  368. package/node_modules/typebox/build/value/mutate/from_object.d.mts +0 -2
  369. package/node_modules/typebox/build/value/mutate/from_object.mjs +0 -40
  370. package/node_modules/typebox/build/value/mutate/from_unknown.d.mts +0 -2
  371. package/node_modules/typebox/build/value/mutate/from_unknown.mjs +0 -7
  372. package/node_modules/typebox/build/value/mutate/from_value.d.mts +0 -2
  373. package/node_modules/typebox/build/value/mutate/from_value.mjs +0 -12
  374. package/node_modules/typebox/build/value/mutate/index.d.mts +0 -1
  375. package/node_modules/typebox/build/value/mutate/index.mjs +0 -1
  376. package/node_modules/typebox/build/value/mutate/mutate.d.mts +0 -11
  377. package/node_modules/typebox/build/value/mutate/mutate.mjs +0 -41
  378. package/node_modules/typebox/build/value/repair/from_base.d.mts +0 -2
  379. package/node_modules/typebox/build/value/repair/from_base.mjs +0 -8
  380. /package/node_modules/typebox/build/type/engine/{awaited → with}/index.d.mts +0 -0
  381. /package/node_modules/typebox/build/type/engine/{awaited → with}/index.mjs +0 -0
package/dist/index.js CHANGED
@@ -1,11 +1,13 @@
1
- import { a as buildGoogleMeetCalendarDayWindow, i as resolveGoogleMeetGatewayOperationTimeoutMs, n as DEFAULT_GOOGLE_MEET_AUDIO_OUTPUT_COMMAND, o as findGoogleMeetCalendarEvent, r as resolveGoogleMeetConfig, s as listGoogleMeetCalendarEvents, t as DEFAULT_GOOGLE_MEET_AUDIO_INPUT_COMMAND } from "./config-D_YKxh0m.js";
2
- import { _ as fetchLatestGoogleMeetConferenceRecord, a as forceMeetEnglishUi, c as readBrowserTab, d as buildGoogleMeetPreflightReport, g as fetchGoogleMeetSpace, h as fetchGoogleMeetAttendance, i as callBrowserProxyOnNode, l as resolveChromeNode, m as fetchGoogleMeetArtifacts, n as isGoogleMeetBrowserManualActionError, o as isSameMeetUrlForReuse, p as endGoogleMeetActiveConference, r as asBrowserTabs, s as normalizeMeetUrlForReuse, t as createMeetWithBrowserProxyOnNode, u as resolveChromeNodeInfo } from "./chrome-create-C1akZT_q.js";
1
+ import { a as buildGoogleMeetCalendarDayWindow, i as resolveGoogleMeetGatewayOperationTimeoutMs, n as DEFAULT_GOOGLE_MEET_AUDIO_OUTPUT_COMMAND, o as findGoogleMeetCalendarEvent, r as resolveGoogleMeetConfig, s as listGoogleMeetCalendarEvents, t as DEFAULT_GOOGLE_MEET_AUDIO_INPUT_COMMAND } from "./config-DDYRr7-P.js";
2
+ import { _ as fetchLatestGoogleMeetConferenceRecord, a as forceMeetEnglishUi, c as readBrowserTab, d as buildGoogleMeetPreflightReport, g as fetchGoogleMeetSpace, h as fetchGoogleMeetAttendance, i as callBrowserProxyOnNode, l as resolveChromeNode, m as fetchGoogleMeetArtifacts, n as isGoogleMeetBrowserManualActionError, o as isSameMeetUrlForReuse, p as endGoogleMeetActiveConference, r as asBrowserTabs, s as normalizeMeetUrlForReuse, t as createMeetWithBrowserProxyOnNode, u as resolveChromeNodeInfo } from "./chrome-create-BhgM0jQO.js";
3
3
  import { optionalPositiveIntegerSchema, readPositiveIntegerParam } from "openclaw/plugin-sdk/channel-actions";
4
4
  import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
5
5
  import { ErrorCodes, GatewayClient, callGatewayFromCli, errorShape, startGatewayClientWhenEventLoopReady } from "openclaw/plugin-sdk/gateway-runtime";
6
6
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
7
7
  import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
8
+ import { normalizeAgentId } from "openclaw/plugin-sdk/routing";
8
9
  import { asRecord, normalizeOptionalString, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
10
+ import { jsonResult } from "openclaw/plugin-sdk/tool-results";
9
11
  import { Type } from "typebox";
10
12
  import { isBlockedHostnameOrIp } from "openclaw/plugin-sdk/ssrf-runtime";
11
13
  import { addTimerTimeoutGraceMs } from "openclaw/plugin-sdk/number-runtime";
@@ -17,7 +19,6 @@ import { sleep } from "openclaw/plugin-sdk/runtime-env";
17
19
  import fs from "node:fs";
18
20
  import os from "node:os";
19
21
  import path from "node:path";
20
- import { normalizeAgentId } from "openclaw/plugin-sdk/routing";
21
22
  import { getRealtimeTranscriptionProvider, listRealtimeTranscriptionProviders } from "openclaw/plugin-sdk/realtime-transcription";
22
23
  //#region extensions/google-meet/src/transports/chrome-audio-device.ts
23
24
  const GOOGLE_MEET_SYSTEM_PROFILER_COMMAND = "/usr/sbin/system_profiler";
@@ -963,6 +964,8 @@ async function startCommandAgentAudioBridge(params) {
963
964
  inputProcess.stderr?.on("data", (chunk) => {
964
965
  params.logger.debug?.(`[google-meet] audio input: ${String(chunk).trim()}`);
965
966
  });
967
+ inputProcess.stdout?.on("error", fail("audio input command stdout"));
968
+ inputProcess.stderr?.on("error", fail("audio input command stderr"));
966
969
  outputProcess.on("error", fail("audio output command"));
967
970
  outputProcess.stdin?.on?.("error", fail("audio output command"));
968
971
  outputProcess.on("exit", (code, signal) => {
@@ -974,6 +977,7 @@ async function startCommandAgentAudioBridge(params) {
974
977
  outputProcess.stderr?.on("data", (chunk) => {
975
978
  params.logger.debug?.(`[google-meet] audio output: ${String(chunk).trim()}`);
976
979
  });
980
+ outputProcess.stderr?.on("error", fail("audio output command stderr"));
977
981
  const writeOutputAudio = (audio) => {
978
982
  const suppression = recordGoogleMeetOutputActivity({
979
983
  tracker: outputActivity,
@@ -1242,6 +1246,10 @@ async function startCommandRealtimeAudioBridge(params) {
1242
1246
  proc.stderr?.on("data", (chunk) => {
1243
1247
  params.logger.debug?.(`[google-meet] audio output: ${String(chunk).trim()}`);
1244
1248
  });
1249
+ proc.stderr?.on("error", (error) => {
1250
+ if (proc !== outputProcess) return;
1251
+ fail("audio output command stderr")(error);
1252
+ });
1245
1253
  };
1246
1254
  const clearOutputPlayback = () => {
1247
1255
  if (stopped) return;
@@ -1288,9 +1296,15 @@ async function startCommandRealtimeAudioBridge(params) {
1288
1296
  if (beforeClearCount === clearCount) clearOutputPlayback();
1289
1297
  params.logger.debug?.(`[google-meet] human barge-in detected by local input (rms=${Math.round(stats.rms)}, peak=${stats.peak})`);
1290
1298
  });
1299
+ bargeInInputProcess.stdout?.on("error", (error) => {
1300
+ params.logger.warn(`[google-meet] human barge-in input stdout failed: ${formatErrorMessage(error)}`);
1301
+ });
1291
1302
  bargeInInputProcess.stderr?.on("data", (chunk) => {
1292
1303
  params.logger.debug?.(`[google-meet] barge-in input: ${String(chunk).trim()}`);
1293
1304
  });
1305
+ bargeInInputProcess.stderr?.on("error", (error) => {
1306
+ params.logger.warn(`[google-meet] human barge-in input stderr failed: ${formatErrorMessage(error)}`);
1307
+ });
1294
1308
  bargeInInputProcess.on("error", (error) => {
1295
1309
  params.logger.warn(`[google-meet] human barge-in input failed: ${formatErrorMessage(error)}`);
1296
1310
  });
@@ -1309,6 +1323,8 @@ async function startCommandRealtimeAudioBridge(params) {
1309
1323
  inputProcess.stderr?.on("data", (chunk) => {
1310
1324
  params.logger.debug?.(`[google-meet] audio input: ${String(chunk).trim()}`);
1311
1325
  });
1326
+ inputProcess.stdout?.on("error", fail("audio input command stdout"));
1327
+ inputProcess.stderr?.on("error", fail("audio input command stderr"));
1312
1328
  const resolved = resolveGoogleMeetRealtimeProvider({
1313
1329
  config: params.config,
1314
1330
  fullConfig: params.fullConfig,
@@ -2968,93 +2984,88 @@ async function createConnectedGatewayClient(config) {
2968
2984
  });
2969
2985
  return client;
2970
2986
  }
2987
+ function createVoiceCallGateway(params) {
2988
+ if (!params.config.voiceCall.gatewayUrl) return {
2989
+ trustedPluginIdentity: true,
2990
+ request: (method, requestParams) => params.runtime.gateway.request(method, requestParams, { timeoutMs: params.config.voiceCall.requestTimeoutMs })
2991
+ };
2992
+ return {
2993
+ trustedPluginIdentity: false,
2994
+ async request(method, requestParams) {
2995
+ const client = await createConnectedGatewayClient(params.config);
2996
+ try {
2997
+ return await client.request(method, requestParams, { timeoutMs: params.config.voiceCall.requestTimeoutMs });
2998
+ } finally {
2999
+ await client.stopAndWait({ timeoutMs: 1e3 });
3000
+ }
3001
+ }
3002
+ };
3003
+ }
2971
3004
  function isVoiceCallMissingError(error) {
2972
3005
  const message = formatErrorMessage(error).toLowerCase();
2973
3006
  return message.includes("call not found") || message.includes("call is not active");
2974
3007
  }
2975
3008
  async function joinMeetViaVoiceCallGateway(params) {
2976
- let client;
2977
- try {
2978
- client = await createConnectedGatewayClient(params.config);
2979
- params.logger?.info(`[google-meet] Delegating Twilio join to Voice Call (dtmf=${params.dtmfSequence ? "pre-connect" : "none"}, intro=${params.message ? "delayed" : "none"})`);
2980
- const start = await client.request("voicecall.start", {
2981
- to: params.dialInNumber,
2982
- mode: "conversation",
2983
- ...params.dtmfSequence ? { dtmfSequence: params.dtmfSequence } : {},
2984
- ...params.requesterSessionKey ? { requesterSessionKey: params.requesterSessionKey } : {},
2985
- ...params.sessionKey ? { sessionKey: params.sessionKey } : {}
2986
- }, { timeoutMs: params.config.voiceCall.requestTimeoutMs });
2987
- if (!start.callId) throw new Error(start.error || "voicecall.start did not return callId");
2988
- params.logger?.info(`[google-meet] Voice Call Twilio phone leg started: callId=${start.callId}`);
2989
- const dtmfSent = Boolean(params.dtmfSequence);
2990
- if (dtmfSent) params.logger?.info(`[google-meet] Meet DTMF queued before realtime connect: callId=${start.callId} digits=${params.dtmfSequence?.length ?? 0}`);
2991
- let introSent = false;
2992
- if (params.message) {
2993
- const delayMs = params.dtmfSequence ? params.config.voiceCall.postDtmfSpeechDelayMs : 0;
2994
- if (delayMs > 0) {
2995
- params.logger?.info(`[google-meet] Waiting ${delayMs}ms after Meet DTMF before speaking intro for callId=${start.callId}`);
2996
- await sleep(delayMs);
2997
- }
2998
- let spoken;
2999
- try {
3000
- spoken = await client.request("voicecall.speak", {
3001
- callId: start.callId,
3002
- allowTwimlFallback: false,
3003
- message: params.message
3004
- }, { timeoutMs: params.config.voiceCall.requestTimeoutMs });
3005
- } catch (err) {
3006
- params.logger?.warn?.(`[google-meet] Skipped intro speech because realtime bridge was not ready: ${formatErrorMessage(err)}`);
3007
- spoken = { success: false };
3008
- }
3009
- if (spoken.success === false) params.logger?.warn?.(`[google-meet] Skipped intro speech because realtime bridge was not ready: ${spoken.error || "voicecall.speak failed"}`);
3010
- else {
3011
- introSent = true;
3012
- params.logger?.info(`[google-meet] Intro speech requested after Meet dial sequence: callId=${start.callId}`);
3013
- }
3009
+ if (params.agentId && params.agentId !== "main" && !params.gateway.trustedPluginIdentity) throw new Error("Per-agent Voice Call routing requires the local Gateway runtime. Remove google-meet voiceCall.gatewayUrl or omit agent routing.");
3010
+ params.logger?.info(`[google-meet] Delegating Twilio join to Voice Call (dtmf=${params.dtmfSequence ? "pre-connect" : "none"}, intro=${params.message ? "delayed" : "none"})`);
3011
+ const start = await params.gateway.request("voicecall.start", {
3012
+ to: params.dialInNumber,
3013
+ mode: "conversation",
3014
+ ...params.dtmfSequence ? { dtmfSequence: params.dtmfSequence } : {},
3015
+ ...params.requesterSessionKey ? { requesterSessionKey: params.requesterSessionKey } : {},
3016
+ ...params.agentId && params.gateway.trustedPluginIdentity ? { agentId: params.agentId } : {},
3017
+ ...params.sessionKey ? { sessionKey: params.sessionKey } : {}
3018
+ });
3019
+ if (!start.callId) throw new Error(start.error || "voicecall.start did not return callId");
3020
+ params.logger?.info(`[google-meet] Voice Call Twilio phone leg started: callId=${start.callId}`);
3021
+ const dtmfSent = Boolean(params.dtmfSequence);
3022
+ if (dtmfSent) params.logger?.info(`[google-meet] Meet DTMF queued before realtime connect: callId=${start.callId} digits=${params.dtmfSequence?.length ?? 0}`);
3023
+ let introSent = false;
3024
+ if (params.message) {
3025
+ const delayMs = params.dtmfSequence ? params.config.voiceCall.postDtmfSpeechDelayMs : 0;
3026
+ if (delayMs > 0) {
3027
+ params.logger?.info(`[google-meet] Waiting ${delayMs}ms after Meet DTMF before speaking intro for callId=${start.callId}`);
3028
+ await sleep(delayMs);
3014
3029
  }
3015
- return {
3016
- callId: start.callId,
3017
- dtmfSent,
3018
- introSent
3019
- };
3020
- } finally {
3021
- await client?.stopAndWait({ timeoutMs: 1e3 });
3022
- }
3023
- }
3024
- async function endMeetVoiceCallGatewayCall(params) {
3025
- let client;
3026
- try {
3027
- client = await createConnectedGatewayClient(params.config);
3030
+ let spoken;
3028
3031
  try {
3029
- await client.request("voicecall.end", { callId: params.callId }, { timeoutMs: params.config.voiceCall.requestTimeoutMs });
3032
+ spoken = await params.gateway.request("voicecall.speak", {
3033
+ callId: start.callId,
3034
+ allowTwimlFallback: false,
3035
+ message: params.message
3036
+ });
3030
3037
  } catch (err) {
3031
- if (!isVoiceCallMissingError(err)) throw err;
3038
+ params.logger?.warn?.(`[google-meet] Skipped intro speech because realtime bridge was not ready: ${formatErrorMessage(err)}`);
3039
+ spoken = { success: false };
3040
+ }
3041
+ if (spoken.success === false) params.logger?.warn?.(`[google-meet] Skipped intro speech because realtime bridge was not ready: ${spoken.error || "voicecall.speak failed"}`);
3042
+ else {
3043
+ introSent = true;
3044
+ params.logger?.info(`[google-meet] Intro speech requested after Meet dial sequence: callId=${start.callId}`);
3032
3045
  }
3033
- } finally {
3034
- await client?.stopAndWait({ timeoutMs: 1e3 });
3035
3046
  }
3047
+ return {
3048
+ callId: start.callId,
3049
+ dtmfSent,
3050
+ introSent
3051
+ };
3036
3052
  }
3037
- async function getMeetVoiceCallGatewayCall(params) {
3038
- let client;
3053
+ async function endMeetVoiceCallGatewayCall(params) {
3039
3054
  try {
3040
- client = await createConnectedGatewayClient(params.config);
3041
- return await client.request("voicecall.status", { callId: params.callId }, { timeoutMs: params.config.voiceCall.requestTimeoutMs });
3042
- } finally {
3043
- await client?.stopAndWait({ timeoutMs: 1e3 });
3055
+ await params.gateway.request("voicecall.end", { callId: params.callId });
3056
+ } catch (err) {
3057
+ if (!isVoiceCallMissingError(err)) throw err;
3044
3058
  }
3045
3059
  }
3060
+ async function getMeetVoiceCallGatewayCall(params) {
3061
+ return await params.gateway.request("voicecall.status", { callId: params.callId });
3062
+ }
3046
3063
  async function speakMeetViaVoiceCallGateway(params) {
3047
- let client;
3048
- try {
3049
- client = await createConnectedGatewayClient(params.config);
3050
- const spoken = await client.request("voicecall.speak", {
3051
- callId: params.callId,
3052
- message: params.message
3053
- }, { timeoutMs: params.config.voiceCall.requestTimeoutMs });
3054
- if (spoken.success === false) throw new Error(spoken.error || "voicecall.speak failed");
3055
- } finally {
3056
- await client?.stopAndWait({ timeoutMs: 1e3 });
3057
- }
3064
+ const spoken = await params.gateway.request("voicecall.speak", {
3065
+ callId: params.callId,
3066
+ message: params.message
3067
+ });
3068
+ if (spoken.success === false) throw new Error(spoken.error || "voicecall.speak failed");
3058
3069
  }
3059
3070
  //#endregion
3060
3071
  //#region extensions/google-meet/src/runtime.ts
@@ -3173,8 +3184,10 @@ var GoogleMeetRuntime = class {
3173
3184
  #sessionStops = /* @__PURE__ */ new Map();
3174
3185
  #sessionSpeakers = /* @__PURE__ */ new Map();
3175
3186
  #sessionHealth = /* @__PURE__ */ new Map();
3187
+ #voiceCallGateway;
3176
3188
  constructor(params) {
3177
3189
  this.params = params;
3190
+ this.#voiceCallGateway = createVoiceCallGateway(params);
3178
3191
  }
3179
3192
  list() {
3180
3193
  this.#refreshHealth();
@@ -3322,9 +3335,16 @@ var GoogleMeetRuntime = class {
3322
3335
  };
3323
3336
  try {
3324
3337
  if (transport === "chrome" || transport === "chrome-node") {
3338
+ const chromeConfig = request.agentId ? {
3339
+ ...this.params.config,
3340
+ realtime: {
3341
+ ...this.params.config.realtime,
3342
+ agentId: request.agentId
3343
+ }
3344
+ } : this.params.config;
3325
3345
  const result = transport === "chrome-node" ? await launchChromeMeetOnNode({
3326
3346
  runtime: this.params.runtime,
3327
- config: this.params.config,
3347
+ config: chromeConfig,
3328
3348
  fullConfig: this.params.fullConfig,
3329
3349
  meetingSessionId: session.id,
3330
3350
  requesterSessionKey: request.requesterSessionKey,
@@ -3333,7 +3353,7 @@ var GoogleMeetRuntime = class {
3333
3353
  logger: this.params.logger
3334
3354
  }) : await launchChromeMeet({
3335
3355
  runtime: this.params.runtime,
3336
- config: this.params.config,
3356
+ config: chromeConfig,
3337
3357
  fullConfig: this.params.fullConfig,
3338
3358
  meetingSessionId: session.id,
3339
3359
  requesterSessionKey: request.requesterSessionKey,
@@ -3361,11 +3381,13 @@ var GoogleMeetRuntime = class {
3361
3381
  const dtmfSequence = request.dtmfSequence || this.params.config.twilio.defaultDtmfSequence ? rawDtmfSequence : prefixDtmfWait(rawDtmfSequence, this.params.config.voiceCall.dtmfDelayMs);
3362
3382
  const voiceCallResult = this.params.config.voiceCall.enabled ? await joinMeetViaVoiceCallGateway({
3363
3383
  config: this.params.config,
3384
+ gateway: this.#voiceCallGateway,
3364
3385
  dialInNumber,
3365
3386
  dtmfSequence,
3366
3387
  logger: this.params.logger,
3367
3388
  ...request.requesterSessionKey ? { requesterSessionKey: request.requesterSessionKey } : {},
3368
- sessionKey: buildTwilioVoiceCallSessionKey(session.id),
3389
+ agentId: request.agentId,
3390
+ sessionKey: request.agentId ? `agent:${request.agentId}:google-meet:${session.id}` : buildTwilioVoiceCallSessionKey(session.id),
3369
3391
  message: isGoogleMeetTalkBackMode$1(mode) ? request.message ?? this.params.config.voiceCall.introMessage ?? this.params.config.realtime.introMessage : void 0
3370
3392
  }) : void 0;
3371
3393
  delegatedTwilioSpoken = Boolean(voiceCallResult?.introSent);
@@ -3379,7 +3401,7 @@ var GoogleMeetRuntime = class {
3379
3401
  };
3380
3402
  if (voiceCallResult?.callId) this.#sessionStops.set(session.id, async () => {
3381
3403
  await endMeetVoiceCallGatewayCall({
3382
- config: this.params.config,
3404
+ gateway: this.#voiceCallGateway,
3383
3405
  callId: voiceCallResult.callId
3384
3406
  });
3385
3407
  });
@@ -3426,7 +3448,7 @@ var GoogleMeetRuntime = class {
3426
3448
  if (session.transport === "twilio" && session.twilio?.voiceCallId) {
3427
3449
  try {
3428
3450
  await speakMeetViaVoiceCallGateway({
3429
- config: this.params.config,
3451
+ gateway: this.#voiceCallGateway,
3430
3452
  callId: session.twilio.voiceCallId,
3431
3453
  message: instructions || this.params.config.voiceCall.introMessage || this.params.config.realtime.introMessage || ""
3432
3454
  });
@@ -3620,7 +3642,7 @@ var GoogleMeetRuntime = class {
3620
3642
  }
3621
3643
  try {
3622
3644
  if ((await getMeetVoiceCallGatewayCall({
3623
- config: this.params.config,
3645
+ gateway: this.#voiceCallGateway,
3624
3646
  callId
3625
3647
  })).found === false) this.#markTwilioSessionEnded(session, "Voice Call is no longer active.");
3626
3648
  } catch (error) {
@@ -3724,7 +3746,7 @@ var GoogleMeetRuntime = class {
3724
3746
  //#endregion
3725
3747
  //#region extensions/google-meet/src/node-invoke-policy.ts
3726
3748
  const GOOGLE_MEET_CHROME_NODE_COMMAND = "googlemeet.chrome";
3727
- const START_MODES = new Set([
3749
+ const START_MODES = /* @__PURE__ */ new Set([
3728
3750
  "agent",
3729
3751
  "bidi",
3730
3752
  "realtime",
@@ -3868,8 +3890,8 @@ function createGoogleMeetChromeNodeInvokePolicy(config) {
3868
3890
  }
3869
3891
  //#endregion
3870
3892
  //#region extensions/google-meet/index.ts
3871
- const loadGoogleMeetCreateModule = createLazyRuntimeModule(() => import("./create-CHlW2v6-.js"));
3872
- const loadGoogleMeetCliModule = createLazyRuntimeModule(() => import("./cli-BXICNPAs.js"));
3893
+ const loadGoogleMeetCreateModule = createLazyRuntimeModule(() => import("./create-CkkaRlbI.js"));
3894
+ const loadGoogleMeetCliModule = createLazyRuntimeModule(() => import("./cli-D364Yrym.js"));
3873
3895
  const googleMeetConfigSchema = {
3874
3896
  parse(value) {
3875
3897
  return resolveGoogleMeetConfig(value);
@@ -4154,15 +4176,6 @@ const GoogleMeetToolSchema = Type.Object({
4154
4176
  function asParamRecord(params) {
4155
4177
  return params && typeof params === "object" && !Array.isArray(params) ? params : {};
4156
4178
  }
4157
- function json(payload) {
4158
- return {
4159
- content: [{
4160
- type: "text",
4161
- text: JSON.stringify(payload, null, 2)
4162
- }],
4163
- details: payload
4164
- };
4165
- }
4166
4179
  function normalizeTransport(value) {
4167
4180
  return value === "chrome" || value === "chrome-node" || value === "twilio" ? value : void 0;
4168
4181
  }
@@ -4223,6 +4236,7 @@ function readGatewayErrorDetails(err) {
4223
4236
  }
4224
4237
  async function callGoogleMeetGatewayFromTool(params) {
4225
4238
  try {
4239
+ if (params.runtime) return await params.runtime.gateway.request(googleMeetGatewayMethodForToolAction(params.action), params.raw, { timeoutMs: resolveGoogleMeetGatewayOperationTimeoutMs(params.config) });
4226
4240
  return await googleMeetToolDeps.callGatewayFromCli(googleMeetGatewayMethodForToolAction(params.action), {
4227
4241
  json: true,
4228
4242
  timeout: String(resolveGoogleMeetGatewayOperationTimeoutMs(params.config))
@@ -4233,6 +4247,15 @@ async function callGoogleMeetGatewayFromTool(params) {
4233
4247
  throw err;
4234
4248
  }
4235
4249
  }
4250
+ function keepTrustedToolAgentId(raw, client) {
4251
+ const { agentId: rawAgentId, ...rest } = raw;
4252
+ if (client?.internal?.pluginRuntimeOwnerId !== "google-meet") return rest;
4253
+ const agentId = normalizeOptionalString(rawAgentId);
4254
+ return agentId ? {
4255
+ ...rest,
4256
+ agentId
4257
+ } : rest;
4258
+ }
4236
4259
  async function createMeetFromParams(params) {
4237
4260
  return (await loadGoogleMeetCreateModule()).createMeetFromParams(params);
4238
4261
  }
@@ -4240,7 +4263,7 @@ async function createAndJoinMeetFromParams(params) {
4240
4263
  return (await loadGoogleMeetCreateModule()).createAndJoinMeetFromParams(params);
4241
4264
  }
4242
4265
  async function resolveGoogleMeetTokenFromParams(config, raw) {
4243
- const { resolveGoogleMeetAccessToken } = await import("./oauth-DK1mwF2i.js");
4266
+ const { resolveGoogleMeetAccessToken } = await import("./oauth-75iPDzIn.js");
4244
4267
  return resolveGoogleMeetAccessToken({
4245
4268
  clientId: normalizeOptionalString(raw.clientId) ?? config.oauth.clientId,
4246
4269
  clientSecret: normalizeOptionalString(raw.clientSecret) ?? config.oauth.clientSecret,
@@ -4397,25 +4420,27 @@ var google_meet_default = definePluginEntry({
4397
4420
  const payload = formatGatewayError(err);
4398
4421
  respond(false, payload, errorShape(code, typeof payload.error === "string" ? payload.error : "Google Meet request failed", { details: payload }));
4399
4422
  };
4400
- api.registerGatewayMethod("googlemeet.join", async ({ params, respond }) => {
4423
+ api.registerGatewayMethod("googlemeet.join", async ({ params, client, respond }) => {
4401
4424
  try {
4425
+ const trustedParams = keepTrustedToolAgentId(asParamRecord(params), client);
4402
4426
  respond(true, await (await ensureRuntime()).join({
4403
- url: resolveMeetingInput(config, params?.url),
4404
- transport: normalizeTransport(params?.transport),
4405
- mode: normalizeMode(params?.mode),
4406
- dialInNumber: normalizeOptionalString(params?.dialInNumber),
4407
- pin: normalizeOptionalString(params?.pin),
4408
- dtmfSequence: normalizeOptionalString(params?.dtmfSequence),
4409
- message: normalizeOptionalString(params?.message),
4410
- requesterSessionKey: normalizeOptionalString(params?.requesterSessionKey)
4427
+ url: resolveMeetingInput(config, trustedParams.url),
4428
+ transport: normalizeTransport(trustedParams.transport),
4429
+ mode: normalizeMode(trustedParams.mode),
4430
+ dialInNumber: normalizeOptionalString(trustedParams.dialInNumber),
4431
+ pin: normalizeOptionalString(trustedParams.pin),
4432
+ dtmfSequence: normalizeOptionalString(trustedParams.dtmfSequence),
4433
+ message: normalizeOptionalString(trustedParams.message),
4434
+ requesterSessionKey: normalizeOptionalString(trustedParams.requesterSessionKey),
4435
+ agentId: normalizeOptionalString(trustedParams.agentId)
4411
4436
  }));
4412
4437
  } catch (err) {
4413
4438
  sendError(respond, err);
4414
4439
  }
4415
4440
  });
4416
- api.registerGatewayMethod("googlemeet.create", async ({ params, respond }) => {
4441
+ api.registerGatewayMethod("googlemeet.create", async ({ params, client, respond }) => {
4417
4442
  try {
4418
- const raw = asParamRecord(params);
4443
+ const raw = keepTrustedToolAgentId(asParamRecord(params), client);
4419
4444
  respond(true, shouldJoinCreatedMeet(raw) ? await createAndJoinMeetFromParams({
4420
4445
  config,
4421
4446
  runtime: api.runtime,
@@ -4495,7 +4520,8 @@ var google_meet_default = definePluginEntry({
4495
4520
  });
4496
4521
  api.registerGatewayMethod("googlemeet.artifacts", async ({ params, respond }) => {
4497
4522
  try {
4498
- const resolved = await resolveArtifactQueryFromParams(config, asParamRecord(params));
4523
+ const raw = asParamRecord(params);
4524
+ const resolved = await resolveArtifactQueryFromParams(config, raw);
4499
4525
  respond(true, await fetchGoogleMeetArtifacts({
4500
4526
  accessToken: resolved.token.accessToken,
4501
4527
  meeting: resolved.meeting,
@@ -4511,7 +4537,8 @@ var google_meet_default = definePluginEntry({
4511
4537
  });
4512
4538
  api.registerGatewayMethod("googlemeet.attendance", async ({ params, respond }) => {
4513
4539
  try {
4514
- const resolved = await resolveArtifactQueryFromParams(config, asParamRecord(params));
4540
+ const raw = asParamRecord(params);
4541
+ const resolved = await resolveArtifactQueryFromParams(config, raw);
4515
4542
  respond(true, await fetchGoogleMeetAttendance({
4516
4543
  accessToken: resolved.token.accessToken,
4517
4544
  meeting: resolved.meeting,
@@ -4568,17 +4595,19 @@ var google_meet_default = definePluginEntry({
4568
4595
  sendError(respond, err);
4569
4596
  }
4570
4597
  });
4571
- api.registerGatewayMethod("googlemeet.testSpeech", async ({ params, respond }) => {
4598
+ api.registerGatewayMethod("googlemeet.testSpeech", async ({ params, client, respond }) => {
4572
4599
  try {
4600
+ const trustedParams = keepTrustedToolAgentId(asParamRecord(params), client);
4573
4601
  respond(true, await (await ensureRuntime()).testSpeech({
4574
- url: resolveMeetingInput(config, params?.url),
4575
- transport: normalizeTransport(params?.transport),
4576
- mode: normalizeMode(params?.mode),
4577
- dialInNumber: normalizeOptionalString(params?.dialInNumber),
4578
- pin: normalizeOptionalString(params?.pin),
4579
- dtmfSequence: normalizeOptionalString(params?.dtmfSequence),
4580
- message: normalizeOptionalString(params?.message),
4581
- requesterSessionKey: normalizeOptionalString(params?.requesterSessionKey)
4602
+ url: resolveMeetingInput(config, trustedParams.url),
4603
+ transport: normalizeTransport(trustedParams.transport),
4604
+ mode: normalizeMode(trustedParams.mode),
4605
+ dialInNumber: normalizeOptionalString(trustedParams.dialInNumber),
4606
+ pin: normalizeOptionalString(trustedParams.pin),
4607
+ dtmfSequence: normalizeOptionalString(trustedParams.dtmfSequence),
4608
+ message: normalizeOptionalString(trustedParams.message),
4609
+ requesterSessionKey: normalizeOptionalString(trustedParams.requesterSessionKey),
4610
+ agentId: normalizeOptionalString(trustedParams.agentId)
4582
4611
  }));
4583
4612
  } catch (err) {
4584
4613
  sendError(respond, err);
@@ -4604,58 +4633,65 @@ var google_meet_default = definePluginEntry({
4604
4633
  async execute(_toolCallId, params) {
4605
4634
  const raw = asParamRecord(params);
4606
4635
  const requesterSessionKey = normalizeOptionalString(toolContext.sessionKey);
4607
- const rawWithRequester = requesterSessionKey ? {
4608
- ...raw,
4609
- requesterSessionKey
4610
- } : raw;
4636
+ const agentId = toolContext.agentId ? normalizeAgentId(toolContext.agentId) : void 0;
4611
4637
  try {
4638
+ const useTrustedRuntime = agentId ? await api.runtime.gateway.isAvailable() : false;
4639
+ if (agentId && agentId !== "main" && !useTrustedRuntime) throw new Error("Per-agent Google Meet routing requires a Gateway-hosted agent run.");
4640
+ const rawWithRequester = {
4641
+ ...raw,
4642
+ ...requesterSessionKey ? { requesterSessionKey } : {},
4643
+ ...useTrustedRuntime ? { agentId } : {}
4644
+ };
4612
4645
  assertGoogleMeetAgentToolActionSupported({
4613
4646
  config,
4614
4647
  raw
4615
4648
  });
4616
4649
  switch (raw.action) {
4617
- case "join": return json(await callGoogleMeetGatewayFromTool({
4650
+ case "join": return jsonResult(await callGoogleMeetGatewayFromTool({
4618
4651
  config,
4619
4652
  action: "join",
4620
- raw: rawWithRequester
4653
+ raw: rawWithRequester,
4654
+ runtime: useTrustedRuntime ? api.runtime : void 0
4621
4655
  }));
4622
- case "create": return json(await callGoogleMeetGatewayFromTool({
4656
+ case "create": return jsonResult(await callGoogleMeetGatewayFromTool({
4623
4657
  config,
4624
4658
  action: "create",
4625
- raw: rawWithRequester
4659
+ raw: rawWithRequester,
4660
+ runtime: useTrustedRuntime ? api.runtime : void 0
4626
4661
  }));
4627
- case "test_speech": return json(await callGoogleMeetGatewayFromTool({
4662
+ case "test_speech": return jsonResult(await callGoogleMeetGatewayFromTool({
4628
4663
  config,
4629
4664
  action: "test_speech",
4630
- raw: rawWithRequester
4665
+ raw: rawWithRequester,
4666
+ runtime: useTrustedRuntime ? api.runtime : void 0
4631
4667
  }));
4632
- case "test_listen": return json(await callGoogleMeetGatewayFromTool({
4668
+ case "test_listen": return jsonResult(await callGoogleMeetGatewayFromTool({
4633
4669
  config,
4634
4670
  action: "test_listen",
4635
4671
  raw
4636
4672
  }));
4637
- case "status": return json(await callGoogleMeetGatewayFromTool({
4673
+ case "status": return jsonResult(await callGoogleMeetGatewayFromTool({
4638
4674
  config,
4639
4675
  action: "status",
4640
4676
  raw
4641
4677
  }));
4642
- case "recover_current_tab": return json(await callGoogleMeetGatewayFromTool({
4678
+ case "recover_current_tab": return jsonResult(await callGoogleMeetGatewayFromTool({
4643
4679
  config,
4644
4680
  action: "recover_current_tab",
4645
4681
  raw
4646
4682
  }));
4647
- case "setup_status": return json(await callGoogleMeetGatewayFromTool({
4683
+ case "setup_status": return jsonResult(await callGoogleMeetGatewayFromTool({
4648
4684
  config,
4649
4685
  action: "setup_status",
4650
4686
  raw
4651
4687
  }));
4652
4688
  case "resolve_space": {
4653
4689
  const { token: _token, ...result } = await resolveSpaceFromParams(config, raw);
4654
- return json(result);
4690
+ return jsonResult(result);
4655
4691
  }
4656
4692
  case "preflight": {
4657
4693
  const { meeting, token, space } = await resolveSpaceFromParams(config, raw);
4658
- return json(buildGoogleMeetPreflightReport({
4694
+ return jsonResult(buildGoogleMeetPreflightReport({
4659
4695
  input: meeting,
4660
4696
  space,
4661
4697
  previewAcknowledged: config.preview.enrollmentAcknowledged,
@@ -4669,7 +4705,7 @@ var google_meet_default = definePluginEntry({
4669
4705
  raw,
4670
4706
  accessToken: token.accessToken
4671
4707
  });
4672
- return json({
4708
+ return jsonResult({
4673
4709
  ...await fetchLatestGoogleMeetConferenceRecord({
4674
4710
  accessToken: token.accessToken,
4675
4711
  meeting: resolved.meeting
@@ -4680,7 +4716,7 @@ var google_meet_default = definePluginEntry({
4680
4716
  case "calendar_events": {
4681
4717
  const token = await resolveGoogleMeetTokenFromParams(config, raw);
4682
4718
  const window = raw.today === true ? buildGoogleMeetCalendarDayWindow() : {};
4683
- return json(await listGoogleMeetCalendarEvents({
4719
+ return jsonResult(await listGoogleMeetCalendarEvents({
4684
4720
  accessToken: token.accessToken,
4685
4721
  calendarId: normalizeOptionalString(raw.calendarId),
4686
4722
  eventQuery: normalizeOptionalString(raw.event),
@@ -4689,7 +4725,7 @@ var google_meet_default = definePluginEntry({
4689
4725
  }
4690
4726
  case "artifacts": {
4691
4727
  const resolved = await resolveArtifactQueryFromParams(config, raw);
4692
- return json(await fetchGoogleMeetArtifacts({
4728
+ return jsonResult(await fetchGoogleMeetArtifacts({
4693
4729
  accessToken: resolved.token.accessToken,
4694
4730
  meeting: resolved.meeting,
4695
4731
  conferenceRecord: resolved.conferenceRecord,
@@ -4701,7 +4737,7 @@ var google_meet_default = definePluginEntry({
4701
4737
  }
4702
4738
  case "attendance": {
4703
4739
  const resolved = await resolveArtifactQueryFromParams(config, raw);
4704
- return json(await fetchGoogleMeetAttendance({
4740
+ return jsonResult(await fetchGoogleMeetAttendance({
4705
4741
  accessToken: resolved.token.accessToken,
4706
4742
  meeting: resolved.meeting,
4707
4743
  conferenceRecord: resolved.conferenceRecord,
@@ -4712,22 +4748,22 @@ var google_meet_default = definePluginEntry({
4712
4748
  earlyBeforeMinutes: resolved.earlyBeforeMinutes
4713
4749
  }));
4714
4750
  }
4715
- case "export": return json(await exportGoogleMeetBundleFromParams(config, raw));
4751
+ case "export": return jsonResult(await exportGoogleMeetBundleFromParams(config, raw));
4716
4752
  case "leave":
4717
4753
  if (!normalizeOptionalString(raw.sessionId)) throw new Error("sessionId required");
4718
- return json(await callGoogleMeetGatewayFromTool({
4754
+ return jsonResult(await callGoogleMeetGatewayFromTool({
4719
4755
  config,
4720
4756
  action: "leave",
4721
4757
  raw
4722
4758
  }));
4723
- case "end_active_conference": return json(await callGoogleMeetGatewayFromTool({
4759
+ case "end_active_conference": return jsonResult(await callGoogleMeetGatewayFromTool({
4724
4760
  config,
4725
4761
  action: "end_active_conference",
4726
4762
  raw
4727
4763
  }));
4728
4764
  case "speak":
4729
4765
  if (!normalizeOptionalString(raw.sessionId)) throw new Error("sessionId required");
4730
- return json(await callGoogleMeetGatewayFromTool({
4766
+ return jsonResult(await callGoogleMeetGatewayFromTool({
4731
4767
  config,
4732
4768
  action: "speak",
4733
4769
  raw
@@ -4735,7 +4771,7 @@ var google_meet_default = definePluginEntry({
4735
4771
  default: throw new Error("unknown google_meet action");
4736
4772
  }
4737
4773
  } catch (err) {
4738
- return json(formatGatewayError(err));
4774
+ return jsonResult(formatGatewayError(err));
4739
4775
  }
4740
4776
  }
4741
4777
  }), { name: "google_meet" });
@@ -1,4 +1,5 @@
1
1
  import { n as readGoogleApiErrorDetail } from "./google-api-errors-CDUYkIcK.js";
2
+ import { readProviderJsonResponse } from "openclaw/plugin-sdk/provider-http";
2
3
  import { fetchWithSsrFGuard } from "openclaw/plugin-sdk/ssrf-runtime";
3
4
  import { MAX_DATE_TIMESTAMP_MS, resolveDateTimestampMs, resolveExpiresAtMsFromDurationSeconds } from "openclaw/plugin-sdk/number-runtime";
4
5
  import { generateHexPkceVerifierChallenge } from "openclaw/plugin-sdk/provider-auth";
@@ -9,6 +10,7 @@ const GOOGLE_MEET_AUTH_URL = "https://accounts.google.com/o/oauth2/v2/auth";
9
10
  const GOOGLE_MEET_TOKEN_URL = "https://oauth2.googleapis.com/token";
10
11
  const GOOGLE_MEET_TOKEN_HOST = "oauth2.googleapis.com";
11
12
  const GOOGLE_MEET_DEFAULT_TOKEN_LIFETIME_SECONDS = 3600;
13
+ const GOOGLE_OAUTH_TOKEN_JSON_MAX_BYTES = 256 * 1024;
12
14
  const GOOGLE_MEET_SCOPES = [
13
15
  "https://www.googleapis.com/auth/meetings.space.created",
14
16
  "https://www.googleapis.com/auth/meetings.space.readonly",
@@ -23,7 +25,7 @@ function resolveGoogleMeetTokenExpiresAt(value, nowMs = Date.now()) {
23
25
  return resolveExpiresAtMsFromDurationSeconds(value, { nowMs: now }) ?? resolveExpiresAtMsFromDurationSeconds(GOOGLE_MEET_DEFAULT_TOKEN_LIFETIME_SECONDS, { nowMs: now }) ?? now;
24
26
  }
25
27
  function buildGoogleMeetAuthUrl(params) {
26
- return `${GOOGLE_MEET_AUTH_URL}?${new URLSearchParams({
28
+ const search = new URLSearchParams({
27
29
  client_id: params.clientId,
28
30
  response_type: "code",
29
31
  redirect_uri: params.redirectUri ?? GOOGLE_MEET_REDIRECT_URI,
@@ -33,7 +35,8 @@ function buildGoogleMeetAuthUrl(params) {
33
35
  access_type: "offline",
34
36
  prompt: "consent",
35
37
  state: params.state
36
- }).toString()}`;
38
+ });
39
+ return `${GOOGLE_MEET_AUTH_URL}?${search.toString()}`;
37
40
  }
38
41
  async function executeGoogleTokenRequest(body) {
39
42
  const { response, release } = await fetchWithSsrFGuard({
@@ -54,7 +57,7 @@ async function executeGoogleTokenRequest(body) {
54
57
  const detail = await readGoogleApiErrorDetail(response);
55
58
  throw new Error(`Google OAuth token request failed (${response.status}): ${detail}`);
56
59
  }
57
- const payload = await response.json();
60
+ const payload = await readProviderJsonResponse(response, "Google OAuth token", { maxBytes: GOOGLE_OAUTH_TOKEN_JSON_MAX_BYTES });
58
61
  const accessToken = payload.access_token?.trim();
59
62
  if (!accessToken) throw new Error("Google OAuth token response was missing access_token");
60
63
  return {