@xiuchang-midscene/shared 2.0.2

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 (382) hide show
  1. package/README.md +9 -0
  2. package/dist/es/baseDB.mjs +109 -0
  3. package/dist/es/baseDB.mjs.bak +109 -0
  4. package/dist/es/build/copy-static.mjs +31 -0
  5. package/dist/es/build/copy-static.mjs.bak +31 -0
  6. package/dist/es/build/rspack-config.mjs +4 -0
  7. package/dist/es/build/rspack-config.mjs.bak +4 -0
  8. package/dist/es/cli/cli-runner.mjs +140 -0
  9. package/dist/es/cli/cli-runner.mjs.bak +140 -0
  10. package/dist/es/cli/index.mjs +2 -0
  11. package/dist/es/cli/index.mjs.bak +2 -0
  12. package/dist/es/common.mjs +37 -0
  13. package/dist/es/common.mjs.bak +37 -0
  14. package/dist/es/constants/example-code.mjs +223 -0
  15. package/dist/es/constants/example-code.mjs.bak +223 -0
  16. package/dist/es/constants/index.mjs +23 -0
  17. package/dist/es/constants/index.mjs.bak +23 -0
  18. package/dist/es/env/basic.mjs +6 -0
  19. package/dist/es/env/basic.mjs.bak +6 -0
  20. package/dist/es/env/constants.mjs +70 -0
  21. package/dist/es/env/constants.mjs.bak +70 -0
  22. package/dist/es/env/global-config-manager.mjs +94 -0
  23. package/dist/es/env/global-config-manager.mjs.bak +94 -0
  24. package/dist/es/env/helper.mjs +43 -0
  25. package/dist/es/env/helper.mjs.bak +43 -0
  26. package/dist/es/env/index.mjs +5 -0
  27. package/dist/es/env/index.mjs.bak +5 -0
  28. package/dist/es/env/init-debug.mjs +18 -0
  29. package/dist/es/env/init-debug.mjs.bak +18 -0
  30. package/dist/es/env/model-config-manager.mjs +79 -0
  31. package/dist/es/env/model-config-manager.mjs.bak +79 -0
  32. package/dist/es/env/parse-model-config.mjs +132 -0
  33. package/dist/es/env/parse-model-config.mjs.bak +132 -0
  34. package/dist/es/env/types.mjs +220 -0
  35. package/dist/es/env/types.mjs.bak +220 -0
  36. package/dist/es/env/utils.mjs +26 -0
  37. package/dist/es/env/utils.mjs.bak +26 -0
  38. package/dist/es/extractor/constants.mjs +2 -0
  39. package/dist/es/extractor/constants.mjs.bak +2 -0
  40. package/dist/es/extractor/debug.mjs +6 -0
  41. package/dist/es/extractor/debug.mjs.bak +6 -0
  42. package/dist/es/extractor/dom-util.mjs +92 -0
  43. package/dist/es/extractor/dom-util.mjs.bak +92 -0
  44. package/dist/es/extractor/index.mjs +5 -0
  45. package/dist/es/extractor/index.mjs.bak +5 -0
  46. package/dist/es/extractor/locator.mjs +250 -0
  47. package/dist/es/extractor/locator.mjs.bak +250 -0
  48. package/dist/es/extractor/tree.mjs +78 -0
  49. package/dist/es/extractor/tree.mjs.bak +78 -0
  50. package/dist/es/extractor/util.mjs +245 -0
  51. package/dist/es/extractor/util.mjs.bak +245 -0
  52. package/dist/es/extractor/web-extractor.mjs +303 -0
  53. package/dist/es/extractor/web-extractor.mjs.bak +303 -0
  54. package/dist/es/img/box-select.mjs +824 -0
  55. package/dist/es/img/box-select.mjs.bak +824 -0
  56. package/dist/es/img/canvas-fallback.mjs +238 -0
  57. package/dist/es/img/canvas-fallback.mjs.bak +238 -0
  58. package/dist/es/img/get-photon.mjs +45 -0
  59. package/dist/es/img/get-photon.mjs.bak +45 -0
  60. package/dist/es/img/get-sharp.mjs +11 -0
  61. package/dist/es/img/get-sharp.mjs.bak +11 -0
  62. package/dist/es/img/index.mjs +4 -0
  63. package/dist/es/img/index.mjs.bak +4 -0
  64. package/dist/es/img/info.mjs +29 -0
  65. package/dist/es/img/info.mjs.bak +29 -0
  66. package/dist/es/img/transform.mjs +295 -0
  67. package/dist/es/img/transform.mjs.bak +295 -0
  68. package/dist/es/index.mjs +4 -0
  69. package/dist/es/index.mjs.bak +4 -0
  70. package/dist/es/logger.mjs +64 -0
  71. package/dist/es/logger.mjs.bak +64 -0
  72. package/dist/es/mcp/base-server.mjs +281 -0
  73. package/dist/es/mcp/base-server.mjs.bak +281 -0
  74. package/dist/es/mcp/base-tools.mjs +91 -0
  75. package/dist/es/mcp/base-tools.mjs.bak +91 -0
  76. package/dist/es/mcp/chrome-path.mjs +35 -0
  77. package/dist/es/mcp/chrome-path.mjs.bak +35 -0
  78. package/dist/es/mcp/index.mjs +7 -0
  79. package/dist/es/mcp/index.mjs.bak +7 -0
  80. package/dist/es/mcp/inject-report-html-plugin.mjs +53 -0
  81. package/dist/es/mcp/inject-report-html-plugin.mjs.bak +53 -0
  82. package/dist/es/mcp/launcher-helper.mjs +52 -0
  83. package/dist/es/mcp/launcher-helper.mjs.bak +52 -0
  84. package/dist/es/mcp/tool-generator.mjs +297 -0
  85. package/dist/es/mcp/tool-generator.mjs.bak +297 -0
  86. package/dist/es/mcp/types.mjs +3 -0
  87. package/dist/es/mcp/types.mjs.bak +3 -0
  88. package/dist/es/node/fs.mjs +44 -0
  89. package/dist/es/node/fs.mjs.bak +44 -0
  90. package/dist/es/node/index.mjs +2 -0
  91. package/dist/es/node/index.mjs.bak +2 -0
  92. package/dist/es/node/port.mjs +24 -0
  93. package/dist/es/node/port.mjs.bak +24 -0
  94. package/dist/es/oss/demo.mjs +30 -0
  95. package/dist/es/oss/demo.mjs.bak +30 -0
  96. package/dist/es/oss/index.mjs +90 -0
  97. package/dist/es/oss/index.mjs.bak +90 -0
  98. package/dist/es/polyfills/async-hooks.mjs +2 -0
  99. package/dist/es/polyfills/async-hooks.mjs.bak +2 -0
  100. package/dist/es/polyfills/index.mjs +1 -0
  101. package/dist/es/polyfills/index.mjs.bak +1 -0
  102. package/dist/es/types/index.mjs +3 -0
  103. package/dist/es/types/index.mjs.bak +3 -0
  104. package/dist/es/us-keyboard-layout.mjs +1414 -0
  105. package/dist/es/us-keyboard-layout.mjs.LICENSE.txt +5 -0
  106. package/dist/es/us-keyboard-layout.mjs.bak +1414 -0
  107. package/dist/es/utils.mjs +72 -0
  108. package/dist/es/utils.mjs.bak +72 -0
  109. package/dist/es/zod-schema-utils.mjs +54 -0
  110. package/dist/es/zod-schema-utils.mjs.bak +54 -0
  111. package/dist/lib/baseDB.js +149 -0
  112. package/dist/lib/baseDB.js.bak +149 -0
  113. package/dist/lib/build/copy-static.js +79 -0
  114. package/dist/lib/build/copy-static.js.bak +79 -0
  115. package/dist/lib/build/rspack-config.js +38 -0
  116. package/dist/lib/build/rspack-config.js.bak +38 -0
  117. package/dist/lib/cli/cli-runner.js +196 -0
  118. package/dist/lib/cli/cli-runner.js.bak +196 -0
  119. package/dist/lib/cli/index.js +48 -0
  120. package/dist/lib/cli/index.js.bak +48 -0
  121. package/dist/lib/common.js +93 -0
  122. package/dist/lib/common.js.bak +93 -0
  123. package/dist/lib/constants/example-code.js +260 -0
  124. package/dist/lib/constants/example-code.js.bak +260 -0
  125. package/dist/lib/constants/index.js +96 -0
  126. package/dist/lib/constants/index.js.bak +96 -0
  127. package/dist/lib/env/basic.js +40 -0
  128. package/dist/lib/env/basic.js.bak +40 -0
  129. package/dist/lib/env/constants.js +113 -0
  130. package/dist/lib/env/constants.js.bak +113 -0
  131. package/dist/lib/env/global-config-manager.js +128 -0
  132. package/dist/lib/env/global-config-manager.js.bak +128 -0
  133. package/dist/lib/env/helper.js +80 -0
  134. package/dist/lib/env/helper.js.bak +80 -0
  135. package/dist/lib/env/index.js +90 -0
  136. package/dist/lib/env/index.js.bak +90 -0
  137. package/dist/lib/env/init-debug.js +52 -0
  138. package/dist/lib/env/init-debug.js.bak +52 -0
  139. package/dist/lib/env/model-config-manager.js +113 -0
  140. package/dist/lib/env/model-config-manager.js.bak +113 -0
  141. package/dist/lib/env/parse-model-config.js +178 -0
  142. package/dist/lib/env/parse-model-config.js.bak +178 -0
  143. package/dist/lib/env/types.js +554 -0
  144. package/dist/lib/env/types.js.bak +554 -0
  145. package/dist/lib/env/utils.js +72 -0
  146. package/dist/lib/env/utils.js.bak +72 -0
  147. package/dist/lib/extractor/constants.js +42 -0
  148. package/dist/lib/extractor/constants.js.bak +42 -0
  149. package/dist/lib/extractor/debug.js +12 -0
  150. package/dist/lib/extractor/debug.js.bak +12 -0
  151. package/dist/lib/extractor/dom-util.js +153 -0
  152. package/dist/lib/extractor/dom-util.js.bak +153 -0
  153. package/dist/lib/extractor/index.js +81 -0
  154. package/dist/lib/extractor/index.js.bak +81 -0
  155. package/dist/lib/extractor/locator.js +296 -0
  156. package/dist/lib/extractor/locator.js.bak +296 -0
  157. package/dist/lib/extractor/tree.js +124 -0
  158. package/dist/lib/extractor/tree.js.bak +124 -0
  159. package/dist/lib/extractor/util.js +336 -0
  160. package/dist/lib/extractor/util.js.bak +336 -0
  161. package/dist/lib/extractor/web-extractor.js +349 -0
  162. package/dist/lib/extractor/web-extractor.js.bak +349 -0
  163. package/dist/lib/img/box-select.js +875 -0
  164. package/dist/lib/img/box-select.js.bak +875 -0
  165. package/dist/lib/img/canvas-fallback.js +305 -0
  166. package/dist/lib/img/canvas-fallback.js.bak +305 -0
  167. package/dist/lib/img/get-photon.js +82 -0
  168. package/dist/lib/img/get-photon.js.bak +82 -0
  169. package/dist/lib/img/get-sharp.js +45 -0
  170. package/dist/lib/img/get-sharp.js.bak +45 -0
  171. package/dist/lib/img/index.js +95 -0
  172. package/dist/lib/img/index.js.bak +95 -0
  173. package/dist/lib/img/info.js +83 -0
  174. package/dist/lib/img/info.js.bak +83 -0
  175. package/dist/lib/img/transform.js +387 -0
  176. package/dist/lib/img/transform.js.bak +387 -0
  177. package/dist/lib/index.js +47 -0
  178. package/dist/lib/index.js.bak +47 -0
  179. package/dist/lib/logger.js +114 -0
  180. package/dist/lib/logger.js.bak +114 -0
  181. package/dist/lib/mcp/base-server.js +331 -0
  182. package/dist/lib/mcp/base-server.js.bak +331 -0
  183. package/dist/lib/mcp/base-tools.js +125 -0
  184. package/dist/lib/mcp/base-tools.js.bak +125 -0
  185. package/dist/lib/mcp/chrome-path.js +72 -0
  186. package/dist/lib/mcp/chrome-path.js.bak +72 -0
  187. package/dist/lib/mcp/index.js +100 -0
  188. package/dist/lib/mcp/index.js.bak +100 -0
  189. package/dist/lib/mcp/inject-report-html-plugin.js +98 -0
  190. package/dist/lib/mcp/inject-report-html-plugin.js.bak +98 -0
  191. package/dist/lib/mcp/launcher-helper.js +86 -0
  192. package/dist/lib/mcp/launcher-helper.js.bak +86 -0
  193. package/dist/lib/mcp/tool-generator.js +334 -0
  194. package/dist/lib/mcp/tool-generator.js.bak +334 -0
  195. package/dist/lib/mcp/types.js +40 -0
  196. package/dist/lib/mcp/types.js.bak +40 -0
  197. package/dist/lib/node/fs.js +97 -0
  198. package/dist/lib/node/fs.js.bak +97 -0
  199. package/dist/lib/node/index.js +65 -0
  200. package/dist/lib/node/index.js.bak +65 -0
  201. package/dist/lib/node/port.js +61 -0
  202. package/dist/lib/node/port.js.bak +61 -0
  203. package/dist/lib/oss/demo.js +36 -0
  204. package/dist/lib/oss/demo.js.bak +36 -0
  205. package/dist/lib/oss/index.js +138 -0
  206. package/dist/lib/oss/index.js.bak +138 -0
  207. package/dist/lib/polyfills/async-hooks.js +36 -0
  208. package/dist/lib/polyfills/async-hooks.js.bak +36 -0
  209. package/dist/lib/polyfills/index.js +58 -0
  210. package/dist/lib/polyfills/index.js.bak +58 -0
  211. package/dist/lib/types/index.js +37 -0
  212. package/dist/lib/types/index.js.bak +37 -0
  213. package/dist/lib/us-keyboard-layout.js +1457 -0
  214. package/dist/lib/us-keyboard-layout.js.LICENSE.txt +5 -0
  215. package/dist/lib/us-keyboard-layout.js.bak +1457 -0
  216. package/dist/lib/utils.js +148 -0
  217. package/dist/lib/utils.js.bak +148 -0
  218. package/dist/lib/zod-schema-utils.js +97 -0
  219. package/dist/lib/zod-schema-utils.js.bak +97 -0
  220. package/dist/types/baseDB.d.ts +25 -0
  221. package/dist/types/baseDB.d.ts.bak +25 -0
  222. package/dist/types/build/copy-static.d.ts +31 -0
  223. package/dist/types/build/copy-static.d.ts.bak +31 -0
  224. package/dist/types/build/rspack-config.d.ts +8 -0
  225. package/dist/types/build/rspack-config.d.ts.bak +8 -0
  226. package/dist/types/cli/cli-runner.d.ts +14 -0
  227. package/dist/types/cli/cli-runner.d.ts.bak +14 -0
  228. package/dist/types/cli/index.d.ts +2 -0
  229. package/dist/types/cli/index.d.ts.bak +2 -0
  230. package/dist/types/common.d.ts +12 -0
  231. package/dist/types/common.d.ts.bak +12 -0
  232. package/dist/types/constants/example-code.d.ts +2 -0
  233. package/dist/types/constants/example-code.d.ts.bak +2 -0
  234. package/dist/types/constants/index.d.ts +21 -0
  235. package/dist/types/constants/index.d.ts.bak +21 -0
  236. package/dist/types/env/basic.d.ts +6 -0
  237. package/dist/types/env/basic.d.ts.bak +6 -0
  238. package/dist/types/env/constants.d.ts +40 -0
  239. package/dist/types/env/constants.d.ts.bak +40 -0
  240. package/dist/types/env/global-config-manager.d.ts +32 -0
  241. package/dist/types/env/global-config-manager.d.ts.bak +32 -0
  242. package/dist/types/env/helper.d.ts +4 -0
  243. package/dist/types/env/helper.d.ts.bak +4 -0
  244. package/dist/types/env/index.d.ts +4 -0
  245. package/dist/types/env/index.d.ts.bak +4 -0
  246. package/dist/types/env/init-debug.d.ts +1 -0
  247. package/dist/types/env/init-debug.d.ts.bak +1 -0
  248. package/dist/types/env/model-config-manager.d.ts +25 -0
  249. package/dist/types/env/model-config-manager.d.ts.bak +25 -0
  250. package/dist/types/env/parse-model-config.d.ts +31 -0
  251. package/dist/types/env/parse-model-config.d.ts.bak +31 -0
  252. package/dist/types/env/types.d.ts +318 -0
  253. package/dist/types/env/types.d.ts.bak +318 -0
  254. package/dist/types/env/utils.d.ts +38 -0
  255. package/dist/types/env/utils.d.ts.bak +38 -0
  256. package/dist/types/extractor/constants.d.ts +1 -0
  257. package/dist/types/extractor/constants.d.ts.bak +1 -0
  258. package/dist/types/extractor/debug.d.ts +1 -0
  259. package/dist/types/extractor/debug.d.ts.bak +1 -0
  260. package/dist/types/extractor/dom-util.d.ts +56 -0
  261. package/dist/types/extractor/dom-util.d.ts.bak +56 -0
  262. package/dist/types/extractor/index.d.ts +32 -0
  263. package/dist/types/extractor/index.d.ts.bak +32 -0
  264. package/dist/types/extractor/locator.d.ts +9 -0
  265. package/dist/types/extractor/locator.d.ts.bak +9 -0
  266. package/dist/types/extractor/tree.d.ts +6 -0
  267. package/dist/types/extractor/tree.d.ts.bak +6 -0
  268. package/dist/types/extractor/util.d.ts +47 -0
  269. package/dist/types/extractor/util.d.ts.bak +47 -0
  270. package/dist/types/extractor/web-extractor.d.ts +19 -0
  271. package/dist/types/extractor/web-extractor.d.ts.bak +19 -0
  272. package/dist/types/img/box-select.d.ts +26 -0
  273. package/dist/types/img/box-select.d.ts.bak +26 -0
  274. package/dist/types/img/canvas-fallback.d.ts +105 -0
  275. package/dist/types/img/canvas-fallback.d.ts.bak +105 -0
  276. package/dist/types/img/get-photon.d.ts +19 -0
  277. package/dist/types/img/get-photon.d.ts.bak +19 -0
  278. package/dist/types/img/get-sharp.d.ts +3 -0
  279. package/dist/types/img/get-sharp.d.ts.bak +3 -0
  280. package/dist/types/img/index.d.ts +3 -0
  281. package/dist/types/img/index.d.ts.bak +3 -0
  282. package/dist/types/img/info.d.ts +29 -0
  283. package/dist/types/img/info.d.ts.bak +29 -0
  284. package/dist/types/img/transform.d.ts +107 -0
  285. package/dist/types/img/transform.d.ts.bak +107 -0
  286. package/dist/types/index.d.ts +4 -0
  287. package/dist/types/index.d.ts.bak +4 -0
  288. package/dist/types/logger.d.ts +5 -0
  289. package/dist/types/logger.d.ts.bak +5 -0
  290. package/dist/types/mcp/base-server.d.ts +93 -0
  291. package/dist/types/mcp/base-server.d.ts.bak +93 -0
  292. package/dist/types/mcp/base-tools.d.ts +79 -0
  293. package/dist/types/mcp/base-tools.d.ts.bak +79 -0
  294. package/dist/types/mcp/chrome-path.d.ts +2 -0
  295. package/dist/types/mcp/chrome-path.d.ts.bak +2 -0
  296. package/dist/types/mcp/index.d.ts +7 -0
  297. package/dist/types/mcp/index.d.ts.bak +7 -0
  298. package/dist/types/mcp/inject-report-html-plugin.d.ts +18 -0
  299. package/dist/types/mcp/inject-report-html-plugin.d.ts.bak +18 -0
  300. package/dist/types/mcp/launcher-helper.d.ts +94 -0
  301. package/dist/types/mcp/launcher-helper.d.ts.bak +94 -0
  302. package/dist/types/mcp/tool-generator.d.ts +10 -0
  303. package/dist/types/mcp/tool-generator.d.ts.bak +10 -0
  304. package/dist/types/mcp/types.d.ts +103 -0
  305. package/dist/types/mcp/types.d.ts.bak +103 -0
  306. package/dist/types/node/fs.d.ts +15 -0
  307. package/dist/types/node/fs.d.ts.bak +15 -0
  308. package/dist/types/node/index.d.ts +2 -0
  309. package/dist/types/node/index.d.ts.bak +2 -0
  310. package/dist/types/node/port.d.ts +8 -0
  311. package/dist/types/node/port.d.ts.bak +8 -0
  312. package/dist/types/oss/demo.d.ts +1 -0
  313. package/dist/types/oss/demo.d.ts.bak +1 -0
  314. package/dist/types/oss/index.d.ts +34 -0
  315. package/dist/types/oss/index.d.ts.bak +34 -0
  316. package/dist/types/polyfills/async-hooks.d.ts +6 -0
  317. package/dist/types/polyfills/async-hooks.d.ts.bak +6 -0
  318. package/dist/types/polyfills/index.d.ts +4 -0
  319. package/dist/types/polyfills/index.d.ts.bak +4 -0
  320. package/dist/types/types/index.d.ts +34 -0
  321. package/dist/types/types/index.d.ts.bak +34 -0
  322. package/dist/types/us-keyboard-layout.d.ts +32 -0
  323. package/dist/types/us-keyboard-layout.d.ts.bak +32 -0
  324. package/dist/types/utils.d.ts +34 -0
  325. package/dist/types/utils.d.ts.bak +34 -0
  326. package/dist/types/zod-schema-utils.d.ts +23 -0
  327. package/dist/types/zod-schema-utils.d.ts.bak +23 -0
  328. package/package.json +132 -0
  329. package/src/baseDB.ts +158 -0
  330. package/src/build/copy-static.ts +68 -0
  331. package/src/build/rspack-config.ts +12 -0
  332. package/src/cli/cli-runner.ts +224 -0
  333. package/src/cli/index.ts +8 -0
  334. package/src/common.ts +67 -0
  335. package/src/constants/example-code.ts +223 -0
  336. package/src/constants/index.ts +29 -0
  337. package/src/env/basic.ts +12 -0
  338. package/src/env/constants.ts +234 -0
  339. package/src/env/global-config-manager.ts +191 -0
  340. package/src/env/helper.ts +58 -0
  341. package/src/env/index.ts +4 -0
  342. package/src/env/init-debug.ts +34 -0
  343. package/src/env/model-config-manager.ts +149 -0
  344. package/src/env/parse-model-config.ts +294 -0
  345. package/src/env/types.ts +547 -0
  346. package/src/env/utils.ts +89 -0
  347. package/src/extractor/constants.ts +5 -0
  348. package/src/extractor/debug.ts +10 -0
  349. package/src/extractor/dom-util.ts +226 -0
  350. package/src/extractor/index.ts +48 -0
  351. package/src/extractor/locator.ts +469 -0
  352. package/src/extractor/tree.ts +179 -0
  353. package/src/extractor/util.ts +482 -0
  354. package/src/extractor/web-extractor.ts +481 -0
  355. package/src/img/box-select.ts +588 -0
  356. package/src/img/canvas-fallback.ts +393 -0
  357. package/src/img/get-photon.ts +108 -0
  358. package/src/img/get-sharp.ts +18 -0
  359. package/src/img/index.ts +26 -0
  360. package/src/img/info.ts +75 -0
  361. package/src/img/transform.ts +594 -0
  362. package/src/index.ts +8 -0
  363. package/src/logger.ts +96 -0
  364. package/src/mcp/base-server.ts +502 -0
  365. package/src/mcp/base-tools.ts +185 -0
  366. package/src/mcp/chrome-path.ts +48 -0
  367. package/src/mcp/index.ts +7 -0
  368. package/src/mcp/inject-report-html-plugin.ts +119 -0
  369. package/src/mcp/launcher-helper.ts +200 -0
  370. package/src/mcp/tool-generator.ts +429 -0
  371. package/src/mcp/types.ts +112 -0
  372. package/src/node/fs.ts +84 -0
  373. package/src/node/index.ts +2 -0
  374. package/src/node/port.ts +37 -0
  375. package/src/oss/demo.ts +61 -0
  376. package/src/oss/index.ts +187 -0
  377. package/src/polyfills/async-hooks.ts +6 -0
  378. package/src/polyfills/index.ts +4 -0
  379. package/src/types/index.ts +52 -0
  380. package/src/us-keyboard-layout.ts +723 -0
  381. package/src/utils.ts +149 -0
  382. package/src/zod-schema-utils.ts +133 -0
@@ -0,0 +1,61 @@
1
+ /**
2
+ * OSS 上传独立测试 Demo
3
+ *
4
+ * 运行方式:
5
+ * MIDSCENE_OSS_TOKEN_URL=https://ufo2.alitrip.com/api/multiappAutoJob/getOssToken.json \
6
+ * npx tsx packages/shared/src/oss/demo.ts [本地HTML文件路径]
7
+ *
8
+ * 说明:
9
+ * 此脚本不依赖 Midscene 任何模块,仅用于独立验证 OSS 上传全链路:
10
+ * 1. STS 凭证获取
11
+ * 2. 文件上传
12
+ * 3. 在线 URL 可预览
13
+ */
14
+ import { existsSync } from 'node:fs';
15
+ import { getOSSConfigFromEnv, uploadReportToOSS } from './index';
16
+
17
+ async function main() {
18
+ const filePath = process.argv[2];
19
+
20
+ if (!filePath || !existsSync(filePath)) {
21
+ console.error(
22
+ '用法: npx tsx packages/shared/src/oss/demo.ts <本地HTML文件路径>',
23
+ );
24
+ console.error(
25
+ '示例: npx tsx packages/shared/src/oss/demo.ts ./midscene_run/report/xxx.html',
26
+ );
27
+ process.exit(1);
28
+ }
29
+
30
+ // 默认启用上传,Token URL 已有默认值,无需额外配置
31
+
32
+ console.log('1. 获取 STS 凭证...');
33
+ const config = await getOSSConfigFromEnv();
34
+ if (!config) {
35
+ console.error(
36
+ ' 获取 OSS 配置失败,请检查 MIDSCENE_OSS_TOKEN_URL 环境变量及网络连通性',
37
+ );
38
+ process.exit(1);
39
+ }
40
+ console.log(
41
+ ` ✓ 凭证获取成功 (region=${config.region}, bucket=${config.bucket})`,
42
+ );
43
+
44
+ console.log(`2. 上传文件: ${filePath}`);
45
+ const result = await uploadReportToOSS(filePath, config);
46
+
47
+ if (result.success) {
48
+ console.log(' ✓ 上传成功!');
49
+ console.log(` OSS 路径: ${result.ossPath}`);
50
+ console.log(` 在线地址: ${result.url}`);
51
+ console.log('');
52
+ console.log(
53
+ '3. 请在浏览器中打开以上链接,验证是否可以直接预览(而非下载)',
54
+ );
55
+ } else {
56
+ console.error(` ✗ 上传失败: ${result.error}`);
57
+ process.exit(1);
58
+ }
59
+ }
60
+
61
+ main();
@@ -0,0 +1,187 @@
1
+ import path from 'node:path';
2
+ import OSS from 'ali-oss';
3
+
4
+ // ========================
5
+ // 类型定义
6
+ // ========================
7
+
8
+ export interface OSSUploadConfig {
9
+ accessKeyId: string;
10
+ accessKeySecret: string;
11
+ stsToken: string;
12
+ region: string; // e.g. 'oss-cn-beijing'
13
+ bucket: string; // e.g. 'xrayandroid'
14
+ endpoint?: string; // e.g. 'oss-cn-beijing.aliyuncs.com'
15
+ prefix?: string; // e.g. 'midscene-reports/'
16
+ customDomain?: string; // e.g. 'https://your-domain.com'
17
+ }
18
+
19
+ export interface OSSUploadResult {
20
+ success: boolean;
21
+ url?: string; // 在线访问 URL
22
+ ossPath?: string; // OSS 上的完整路径
23
+ error?: string;
24
+ }
25
+
26
+ /** Token Service 返回的凭证字段 */
27
+ interface STSTokenResponse {
28
+ accessKeyId: string;
29
+ accessKeySecret: string;
30
+ securityToken: string;
31
+ region?: string;
32
+ }
33
+
34
+ // ========================
35
+ // STS 凭证获取
36
+ // ========================
37
+
38
+ /**
39
+ * 从 Token Service 获取 STS 临时凭证
40
+ * 兼容两种响应格式:
41
+ * - { "resultObj": { accessKeyId, accessKeySecret, securityToken } }
42
+ * - { "data": { accessKeyId, accessKeySecret, securityToken, region } }
43
+ */
44
+ async function fetchSTSToken(
45
+ tokenUrl: string,
46
+ responsePath: string,
47
+ ): Promise<{
48
+ accessKeyId: string;
49
+ accessKeySecret: string;
50
+ stsToken: string;
51
+ region?: string;
52
+ } | null> {
53
+ try {
54
+ const response = await fetch(tokenUrl, {
55
+ method: 'POST',
56
+ headers: { 'Content-Type': 'application/json' },
57
+ body: JSON.stringify({ token: Date.now() }),
58
+ });
59
+
60
+ if (!response.ok) {
61
+ console.warn(
62
+ `[Midscene OSS] Token service returned HTTP ${response.status}`,
63
+ );
64
+ return null;
65
+ }
66
+
67
+ const json = await response.json();
68
+ const tokenData = json[responsePath] as STSTokenResponse | undefined;
69
+
70
+ if (
71
+ !tokenData?.accessKeyId ||
72
+ !tokenData?.accessKeySecret ||
73
+ !tokenData?.securityToken
74
+ ) {
75
+ console.warn(
76
+ `[Midscene OSS] Token service response missing required fields at "${responsePath}"`,
77
+ );
78
+ return null;
79
+ }
80
+
81
+ return {
82
+ accessKeyId: tokenData.accessKeyId,
83
+ accessKeySecret: tokenData.accessKeySecret,
84
+ stsToken: tokenData.securityToken,
85
+ region: tokenData.region,
86
+ };
87
+ } catch (error: any) {
88
+ console.warn(`[Midscene OSS] Failed to fetch STS token: ${error.message}`);
89
+ return null;
90
+ }
91
+ }
92
+
93
+ /** 默认 Token Service 地址 */
94
+ const DEFAULT_TOKEN_URL =
95
+ 'https://ufo2.alitrip.com/api/multiappAutoJob/getOssToken.json';
96
+
97
+ /**
98
+ * 从环境变量获取 OSS 配置并动态获取 STS 凭证
99
+ *
100
+ * 默认启用上传,可通过 MIDSCENE_OSS_ENABLE=false 显式关闭。
101
+ * 返回 null 表示已关闭或凭证获取失败(凭证失败不影响主流程)。
102
+ */
103
+ export async function getOSSConfigFromEnv(): Promise<OSSUploadConfig | null> {
104
+ if (process.env.MIDSCENE_OSS_ENABLE === 'false') return null;
105
+
106
+ const tokenUrl = process.env.MIDSCENE_OSS_TOKEN_URL || DEFAULT_TOKEN_URL;
107
+
108
+ const responsePath =
109
+ process.env.MIDSCENE_OSS_TOKEN_RESPONSE_PATH || 'resultObj';
110
+ const stsResult = await fetchSTSToken(tokenUrl, responsePath);
111
+ if (!stsResult) return null;
112
+
113
+ return {
114
+ accessKeyId: stsResult.accessKeyId,
115
+ accessKeySecret: stsResult.accessKeySecret,
116
+ stsToken: stsResult.stsToken,
117
+ region:
118
+ process.env.MIDSCENE_OSS_REGION || stsResult.region || 'oss-cn-beijing',
119
+ bucket: process.env.MIDSCENE_OSS_BUCKET || 'xrayandroid',
120
+ endpoint: process.env.MIDSCENE_OSS_ENDPOINT,
121
+ prefix: process.env.MIDSCENE_OSS_PREFIX || 'midscene-reports/',
122
+ customDomain: process.env.MIDSCENE_OSS_DOMAIN,
123
+ };
124
+ }
125
+
126
+ // ========================
127
+ // 上传
128
+ // ========================
129
+
130
+ /**
131
+ * 上传单个 HTML 报告文件到 OSS
132
+ *
133
+ * 关于 HTML 预览:
134
+ * - 2017-10-01 之后创建的 Bucket,使用 OSS 默认域名访问 .html 文件时,
135
+ * OSS 会自动添加 x-oss-force-download: true 和 Content-Disposition: attachment,
136
+ * 导致浏览器强制下载而非预览。
137
+ * - 解决方案:使用签名 URL(signatureUrl)并通过 response 参数覆盖响应头,
138
+ * 或配置自定义域名绕过此限制。
139
+ */
140
+ export async function uploadReportToOSS(
141
+ localFilePath: string,
142
+ config: OSSUploadConfig,
143
+ ): Promise<OSSUploadResult> {
144
+ try {
145
+ const client = new OSS({
146
+ region: config.region,
147
+ accessKeyId: config.accessKeyId,
148
+ accessKeySecret: config.accessKeySecret,
149
+ stsToken: config.stsToken,
150
+ bucket: config.bucket,
151
+ endpoint: config.endpoint ? `https://${config.endpoint}` : undefined,
152
+ });
153
+
154
+ const fileName = path.basename(localFilePath);
155
+
156
+ // OSS 默认域名对路径以 .htm/.html 结尾的文件强制下载
157
+ // (添加 x-oss-force-download: true 和 Content-Disposition: attachment)
158
+ // 解决方案:去掉文件后缀,通过 Content-Type 告诉浏览器按 HTML 渲染
159
+ let ossPath: string;
160
+ if (config.customDomain) {
161
+ // 自定义域名不受强制下载限制,保留原始文件名
162
+ ossPath = `${config.prefix}${fileName}`;
163
+ } else {
164
+ // 默认域名:去掉 .html/.htm 后缀以绕过强制下载策略
165
+ const nameWithoutExt = fileName.replace(/\.html?$/i, '');
166
+ ossPath = `${config.prefix}${nameWithoutExt}`;
167
+ }
168
+
169
+ // 上传并设置元数据
170
+ await client.put(ossPath, localFilePath, {
171
+ headers: {
172
+ 'Content-Type': 'text/html; charset=utf-8',
173
+ 'Content-Disposition': 'inline',
174
+ 'Cache-Control': 'no-cache',
175
+ },
176
+ });
177
+
178
+ // 拼接访问 URL
179
+ const url = config.customDomain
180
+ ? `${config.customDomain.replace(/\/$/, '')}/${ossPath}`
181
+ : `https://${config.bucket}.${config.region}.aliyuncs.com/${ossPath}`;
182
+
183
+ return { success: true, url, ossPath };
184
+ } catch (error: any) {
185
+ return { success: false, error: error.message || String(error) };
186
+ }
187
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Browser polyfill for Node.js async_hooks module
3
+ * Provides empty implementation for browser environments where async_hooks is not available
4
+ */
5
+ const AsyncLocalStorage = {};
6
+ export { AsyncLocalStorage };
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Polyfills for Node.js modules in browser environments
3
+ */
4
+ export * from './async-hooks';
@@ -0,0 +1,52 @@
1
+ import type { NodeType } from '../constants';
2
+ import type { ElementInfo } from '../extractor';
3
+
4
+ export interface Point {
5
+ left: number;
6
+ top: number;
7
+ }
8
+
9
+ export interface Size {
10
+ width: number; // The image sent to AI model will be resized to this width, also the coordinates in the action space will be scaled to the range [0, width]. Usually you should set it to the logical pixel size
11
+ height: number; // The image sent to AI model will be resized to this height, also the coordinates in the action space will be scaled to the range [0, height]. Usually you should set it to the logical pixel size
12
+ }
13
+
14
+ export type Rect = Point & Size;
15
+
16
+ export abstract class BaseElement {
17
+ abstract id: string;
18
+
19
+ // abstract indexId?: number; // markerId for web
20
+
21
+ abstract attributes: {
22
+ nodeType: NodeType;
23
+ [key: string]: string;
24
+ };
25
+
26
+ abstract content: string;
27
+
28
+ abstract rect: Rect;
29
+
30
+ abstract center: [number, number];
31
+
32
+ // abstract xpaths?: string[];
33
+
34
+ abstract isVisible: boolean;
35
+ }
36
+
37
+ export interface ElementTreeNode<
38
+ ElementType extends BaseElement = BaseElement,
39
+ > {
40
+ node: ElementType | null;
41
+ children: ElementTreeNode<ElementType>[];
42
+ }
43
+
44
+ export interface WebElementInfo extends ElementInfo {
45
+ zoom: number;
46
+ }
47
+
48
+ export type LocateResultElement = {
49
+ description: string; // the description of the element
50
+ center: [number, number];
51
+ rect: Rect;
52
+ };