@marktrue/dsh-mobile-remote 3.2.4-alpha.2 → 3.2.4-alpha.3-app

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 (352) hide show
  1. package/DSH-Remote-v3.2.4.apk +4 -0
  2. package/README.md +6 -254
  3. package/manifest.json +21 -0
  4. package/package.json +12 -65
  5. package/CHANGELOG.md +0 -1427
  6. package/CONTRIBUTING.md +0 -59
  7. package/FAQ.md +0 -111
  8. package/cordis.patch.yml +0 -14
  9. package/docs/00-/345/274/200/345/217/221/346/200/273/347/272/262.md +0 -125
  10. package/docs/01-PRD.md +0 -148
  11. package/docs/02-architecture.md +0 -249
  12. package/docs/03-api.md +0 -1154
  13. package/docs/04-security.md +0 -100
  14. package/docs/05-test-cases.md +0 -405
  15. package/docs/06-install-run.md +0 -372
  16. package/docs/07-user-manual.md +0 -70
  17. package/docs/08-/346/211/251/345/261/225/345/274/200/345/217/221/346/214/207/345/215/227.md +0 -86
  18. package/docs/09-compatibility.md +0 -227
  19. package/docs/10-release.md +0 -1067
  20. package/docs/screenshots/01-home.png +0 -0
  21. package/docs/screenshots/02-notifications.png +0 -0
  22. package/docs/screenshots/03-sessions.png +0 -0
  23. package/docs/screenshots/04-chat.png +0 -0
  24. package/docs/screenshots/05-settings.png +0 -0
  25. package/docs/screenshots/06-new-session.png +0 -0
  26. package/docs/screenshots/pgy-appstore.jpg +0 -0
  27. package/docs/screenshots/pgy-mobile-app.jpg +0 -0
  28. package/docs/screenshots/pgy-pc-client.jpg +0 -0
  29. package/lib/account-usage.js +0 -145
  30. package/lib/app-alignment.js +0 -112
  31. package/lib/app-carrier-store.js +0 -1972
  32. package/lib/app-carrier.js +0 -609
  33. package/lib/client.js +0 -1174
  34. package/lib/desktop-form.js +0 -738
  35. package/lib/endpoint-registry.js +0 -167
  36. package/lib/git-read-bundled-provider.js +0 -450
  37. package/lib/git-read-service.js +0 -601
  38. package/lib/index.js +0 -9622
  39. package/lib/npm-update-source.js +0 -226
  40. package/lib/plugin-content-digest.js +0 -80
  41. package/lib/plugin-self-update.js +0 -997
  42. package/lib/plugin-update-controller.js +0 -274
  43. package/lib/plugin-update-log.js +0 -164
  44. package/lib/plugin-update-transaction.js +0 -322
  45. package/lib/plugin-update.js +0 -309
  46. package/lib/runtime-dependency-snapshot.js +0 -345
  47. package/lib/session-title-cache.js +0 -123
  48. package/lib/session-title-refresh.js +0 -261
  49. package/lib/tool-process.js +0 -20
  50. package/lib/update-fetch.js +0 -24
  51. package/lib/update-lock-arbiter.js +0 -170
  52. package/lib/update-supervisor.js +0 -346
  53. package/node_modules/ansi-regex/index.d.ts +0 -37
  54. package/node_modules/ansi-regex/index.js +0 -10
  55. package/node_modules/ansi-regex/license +0 -9
  56. package/node_modules/ansi-regex/package.json +0 -55
  57. package/node_modules/ansi-regex/readme.md +0 -78
  58. package/node_modules/ansi-styles/index.d.ts +0 -345
  59. package/node_modules/ansi-styles/index.js +0 -163
  60. package/node_modules/ansi-styles/license +0 -9
  61. package/node_modules/ansi-styles/package.json +0 -56
  62. package/node_modules/ansi-styles/readme.md +0 -152
  63. package/node_modules/camelcase/index.d.ts +0 -63
  64. package/node_modules/camelcase/index.js +0 -76
  65. package/node_modules/camelcase/license +0 -9
  66. package/node_modules/camelcase/package.json +0 -43
  67. package/node_modules/camelcase/readme.md +0 -99
  68. package/node_modules/cliui/CHANGELOG.md +0 -76
  69. package/node_modules/cliui/LICENSE.txt +0 -14
  70. package/node_modules/cliui/README.md +0 -115
  71. package/node_modules/cliui/index.js +0 -354
  72. package/node_modules/cliui/package.json +0 -65
  73. package/node_modules/color-convert/CHANGELOG.md +0 -54
  74. package/node_modules/color-convert/LICENSE +0 -21
  75. package/node_modules/color-convert/README.md +0 -68
  76. package/node_modules/color-convert/conversions.js +0 -839
  77. package/node_modules/color-convert/index.js +0 -81
  78. package/node_modules/color-convert/package.json +0 -48
  79. package/node_modules/color-convert/route.js +0 -97
  80. package/node_modules/color-name/LICENSE +0 -8
  81. package/node_modules/color-name/README.md +0 -11
  82. package/node_modules/color-name/index.js +0 -152
  83. package/node_modules/color-name/package.json +0 -28
  84. package/node_modules/decamelize/index.js +0 -13
  85. package/node_modules/decamelize/license +0 -21
  86. package/node_modules/decamelize/package.json +0 -38
  87. package/node_modules/decamelize/readme.md +0 -48
  88. package/node_modules/dijkstrajs/.travis.yml +0 -4
  89. package/node_modules/dijkstrajs/CONTRIBUTING.md +0 -8
  90. package/node_modules/dijkstrajs/LICENSE.md +0 -19
  91. package/node_modules/dijkstrajs/README.md +0 -18
  92. package/node_modules/dijkstrajs/dijkstra.js +0 -165
  93. package/node_modules/dijkstrajs/package.json +0 -60
  94. package/node_modules/dijkstrajs/test/dijkstra.test.js +0 -96
  95. package/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
  96. package/node_modules/emoji-regex/README.md +0 -73
  97. package/node_modules/emoji-regex/es2015/index.js +0 -6
  98. package/node_modules/emoji-regex/es2015/text.js +0 -6
  99. package/node_modules/emoji-regex/index.d.ts +0 -23
  100. package/node_modules/emoji-regex/index.js +0 -6
  101. package/node_modules/emoji-regex/package.json +0 -50
  102. package/node_modules/emoji-regex/text.js +0 -6
  103. package/node_modules/find-up/index.d.ts +0 -137
  104. package/node_modules/find-up/index.js +0 -89
  105. package/node_modules/find-up/license +0 -9
  106. package/node_modules/find-up/package.json +0 -53
  107. package/node_modules/find-up/readme.md +0 -156
  108. package/node_modules/get-caller-file/LICENSE.md +0 -6
  109. package/node_modules/get-caller-file/README.md +0 -41
  110. package/node_modules/get-caller-file/index.d.ts +0 -2
  111. package/node_modules/get-caller-file/index.js +0 -22
  112. package/node_modules/get-caller-file/index.js.map +0 -1
  113. package/node_modules/get-caller-file/package.json +0 -42
  114. package/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
  115. package/node_modules/is-fullwidth-code-point/index.js +0 -50
  116. package/node_modules/is-fullwidth-code-point/license +0 -9
  117. package/node_modules/is-fullwidth-code-point/package.json +0 -42
  118. package/node_modules/is-fullwidth-code-point/readme.md +0 -39
  119. package/node_modules/locate-path/index.d.ts +0 -83
  120. package/node_modules/locate-path/index.js +0 -65
  121. package/node_modules/locate-path/license +0 -9
  122. package/node_modules/locate-path/package.json +0 -45
  123. package/node_modules/locate-path/readme.md +0 -122
  124. package/node_modules/p-limit/index.d.ts +0 -38
  125. package/node_modules/p-limit/index.js +0 -57
  126. package/node_modules/p-limit/license +0 -9
  127. package/node_modules/p-limit/package.json +0 -52
  128. package/node_modules/p-limit/readme.md +0 -101
  129. package/node_modules/p-locate/index.d.ts +0 -64
  130. package/node_modules/p-locate/index.js +0 -52
  131. package/node_modules/p-locate/license +0 -9
  132. package/node_modules/p-locate/package.json +0 -53
  133. package/node_modules/p-locate/readme.md +0 -90
  134. package/node_modules/p-try/index.d.ts +0 -39
  135. package/node_modules/p-try/index.js +0 -9
  136. package/node_modules/p-try/license +0 -9
  137. package/node_modules/p-try/package.json +0 -42
  138. package/node_modules/p-try/readme.md +0 -58
  139. package/node_modules/path-exists/index.d.ts +0 -28
  140. package/node_modules/path-exists/index.js +0 -23
  141. package/node_modules/path-exists/license +0 -9
  142. package/node_modules/path-exists/package.json +0 -39
  143. package/node_modules/path-exists/readme.md +0 -52
  144. package/node_modules/pngjs/.eslintignore +0 -2
  145. package/node_modules/pngjs/.eslintrc.json +0 -19
  146. package/node_modules/pngjs/.prettierignore +0 -3
  147. package/node_modules/pngjs/LICENSE +0 -20
  148. package/node_modules/pngjs/README.md +0 -429
  149. package/node_modules/pngjs/browser.js +0 -16096
  150. package/node_modules/pngjs/coverage/lcov-report/base.css +0 -354
  151. package/node_modules/pngjs/coverage/lcov-report/bitmapper.js.html +0 -881
  152. package/node_modules/pngjs/coverage/lcov-report/bitpacker.js.html +0 -554
  153. package/node_modules/pngjs/coverage/lcov-report/block-navigation.js +0 -77
  154. package/node_modules/pngjs/coverage/lcov-report/chunkstream.js.html +0 -647
  155. package/node_modules/pngjs/coverage/lcov-report/constants.js.html +0 -176
  156. package/node_modules/pngjs/coverage/lcov-report/crc.js.html +0 -200
  157. package/node_modules/pngjs/coverage/lcov-report/favicon.png +0 -0
  158. package/node_modules/pngjs/coverage/lcov-report/filter-pack.js.html +0 -593
  159. package/node_modules/pngjs/coverage/lcov-report/filter-parse-async.js.html +0 -152
  160. package/node_modules/pngjs/coverage/lcov-report/filter-parse-sync.js.html +0 -143
  161. package/node_modules/pngjs/coverage/lcov-report/filter-parse.js.html +0 -611
  162. package/node_modules/pngjs/coverage/lcov-report/format-normaliser.js.html +0 -359
  163. package/node_modules/pngjs/coverage/lcov-report/index.html +0 -426
  164. package/node_modules/pngjs/coverage/lcov-report/interlace.js.html +0 -365
  165. package/node_modules/pngjs/coverage/lcov-report/packer-async.js.html +0 -230
  166. package/node_modules/pngjs/coverage/lcov-report/packer-sync.js.html +0 -248
  167. package/node_modules/pngjs/coverage/lcov-report/packer.js.html +0 -467
  168. package/node_modules/pngjs/coverage/lcov-report/paeth-predictor.js.html +0 -128
  169. package/node_modules/pngjs/coverage/lcov-report/parser-async.js.html +0 -575
  170. package/node_modules/pngjs/coverage/lcov-report/parser-sync.js.html +0 -404
  171. package/node_modules/pngjs/coverage/lcov-report/parser.js.html +0 -950
  172. package/node_modules/pngjs/coverage/lcov-report/png-sync.js.html +0 -116
  173. package/node_modules/pngjs/coverage/lcov-report/png.js.html +0 -662
  174. package/node_modules/pngjs/coverage/lcov-report/prettify.css +0 -101
  175. package/node_modules/pngjs/coverage/lcov-report/prettify.js +0 -1007
  176. package/node_modules/pngjs/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  177. package/node_modules/pngjs/coverage/lcov-report/sorter.js +0 -169
  178. package/node_modules/pngjs/coverage/lcov-report/sync-inflate.js.html +0 -584
  179. package/node_modules/pngjs/coverage/lcov-report/sync-reader.js.html +0 -215
  180. package/node_modules/pngjs/coverage/lcov.info +0 -2177
  181. package/node_modules/pngjs/lib/bitmapper.js +0 -267
  182. package/node_modules/pngjs/lib/bitpacker.js +0 -158
  183. package/node_modules/pngjs/lib/chunkstream.js +0 -189
  184. package/node_modules/pngjs/lib/constants.js +0 -32
  185. package/node_modules/pngjs/lib/crc.js +0 -40
  186. package/node_modules/pngjs/lib/filter-pack.js +0 -171
  187. package/node_modules/pngjs/lib/filter-parse-async.js +0 -24
  188. package/node_modules/pngjs/lib/filter-parse-sync.js +0 -21
  189. package/node_modules/pngjs/lib/filter-parse.js +0 -177
  190. package/node_modules/pngjs/lib/format-normaliser.js +0 -93
  191. package/node_modules/pngjs/lib/interlace.js +0 -95
  192. package/node_modules/pngjs/lib/packer-async.js +0 -50
  193. package/node_modules/pngjs/lib/packer-sync.js +0 -56
  194. package/node_modules/pngjs/lib/packer.js +0 -129
  195. package/node_modules/pngjs/lib/paeth-predictor.js +0 -16
  196. package/node_modules/pngjs/lib/parser-async.js +0 -165
  197. package/node_modules/pngjs/lib/parser-sync.js +0 -108
  198. package/node_modules/pngjs/lib/parser.js +0 -290
  199. package/node_modules/pngjs/lib/png-sync.js +0 -12
  200. package/node_modules/pngjs/lib/png.js +0 -194
  201. package/node_modules/pngjs/lib/sync-inflate.js +0 -168
  202. package/node_modules/pngjs/lib/sync-reader.js +0 -45
  203. package/node_modules/pngjs/package.json +0 -73
  204. package/node_modules/qrcode/README.md +0 -770
  205. package/node_modules/qrcode/bin/qrcode +0 -159
  206. package/node_modules/qrcode/helper/to-sjis-browser.js +0 -2
  207. package/node_modules/qrcode/helper/to-sjis.js +0 -105
  208. package/node_modules/qrcode/lib/browser.js +0 -76
  209. package/node_modules/qrcode/lib/can-promise.js +0 -7
  210. package/node_modules/qrcode/lib/core/alignment-pattern.js +0 -83
  211. package/node_modules/qrcode/lib/core/alphanumeric-data.js +0 -59
  212. package/node_modules/qrcode/lib/core/bit-buffer.js +0 -37
  213. package/node_modules/qrcode/lib/core/bit-matrix.js +0 -65
  214. package/node_modules/qrcode/lib/core/byte-data.js +0 -30
  215. package/node_modules/qrcode/lib/core/error-correction-code.js +0 -135
  216. package/node_modules/qrcode/lib/core/error-correction-level.js +0 -50
  217. package/node_modules/qrcode/lib/core/finder-pattern.js +0 -22
  218. package/node_modules/qrcode/lib/core/format-info.js +0 -29
  219. package/node_modules/qrcode/lib/core/galois-field.js +0 -69
  220. package/node_modules/qrcode/lib/core/kanji-data.js +0 -54
  221. package/node_modules/qrcode/lib/core/mask-pattern.js +0 -234
  222. package/node_modules/qrcode/lib/core/mode.js +0 -167
  223. package/node_modules/qrcode/lib/core/numeric-data.js +0 -43
  224. package/node_modules/qrcode/lib/core/polynomial.js +0 -62
  225. package/node_modules/qrcode/lib/core/qrcode.js +0 -495
  226. package/node_modules/qrcode/lib/core/reed-solomon-encoder.js +0 -56
  227. package/node_modules/qrcode/lib/core/regex.js +0 -31
  228. package/node_modules/qrcode/lib/core/segments.js +0 -330
  229. package/node_modules/qrcode/lib/core/utils.js +0 -63
  230. package/node_modules/qrcode/lib/core/version-check.js +0 -9
  231. package/node_modules/qrcode/lib/core/version.js +0 -163
  232. package/node_modules/qrcode/lib/index.js +0 -12
  233. package/node_modules/qrcode/lib/renderer/canvas.js +0 -63
  234. package/node_modules/qrcode/lib/renderer/png.js +0 -78
  235. package/node_modules/qrcode/lib/renderer/svg-tag.js +0 -81
  236. package/node_modules/qrcode/lib/renderer/svg.js +0 -19
  237. package/node_modules/qrcode/lib/renderer/terminal/terminal-small.js +0 -85
  238. package/node_modules/qrcode/lib/renderer/terminal/terminal.js +0 -49
  239. package/node_modules/qrcode/lib/renderer/terminal.js +0 -9
  240. package/node_modules/qrcode/lib/renderer/utf8.js +0 -71
  241. package/node_modules/qrcode/lib/renderer/utils.js +0 -99
  242. package/node_modules/qrcode/lib/server.js +0 -138
  243. package/node_modules/qrcode/license +0 -10
  244. package/node_modules/qrcode/package.json +0 -77
  245. package/node_modules/require-directory/.jshintrc +0 -67
  246. package/node_modules/require-directory/.npmignore +0 -1
  247. package/node_modules/require-directory/.travis.yml +0 -3
  248. package/node_modules/require-directory/LICENSE +0 -22
  249. package/node_modules/require-directory/README.markdown +0 -184
  250. package/node_modules/require-directory/index.js +0 -86
  251. package/node_modules/require-directory/package.json +0 -40
  252. package/node_modules/require-main-filename/CHANGELOG.md +0 -26
  253. package/node_modules/require-main-filename/LICENSE.txt +0 -14
  254. package/node_modules/require-main-filename/README.md +0 -26
  255. package/node_modules/require-main-filename/index.js +0 -18
  256. package/node_modules/require-main-filename/package.json +0 -35
  257. package/node_modules/set-blocking/CHANGELOG.md +0 -26
  258. package/node_modules/set-blocking/LICENSE.txt +0 -14
  259. package/node_modules/set-blocking/README.md +0 -31
  260. package/node_modules/set-blocking/index.js +0 -7
  261. package/node_modules/set-blocking/package.json +0 -42
  262. package/node_modules/string-width/index.d.ts +0 -29
  263. package/node_modules/string-width/index.js +0 -47
  264. package/node_modules/string-width/license +0 -9
  265. package/node_modules/string-width/package.json +0 -56
  266. package/node_modules/string-width/readme.md +0 -50
  267. package/node_modules/strip-ansi/index.d.ts +0 -17
  268. package/node_modules/strip-ansi/index.js +0 -4
  269. package/node_modules/strip-ansi/license +0 -9
  270. package/node_modules/strip-ansi/package.json +0 -54
  271. package/node_modules/strip-ansi/readme.md +0 -46
  272. package/node_modules/which-module/LICENSE +0 -13
  273. package/node_modules/which-module/README.md +0 -58
  274. package/node_modules/which-module/index.js +0 -9
  275. package/node_modules/which-module/package.json +0 -41
  276. package/node_modules/wrap-ansi/index.js +0 -186
  277. package/node_modules/wrap-ansi/license +0 -9
  278. package/node_modules/wrap-ansi/package.json +0 -61
  279. package/node_modules/wrap-ansi/readme.md +0 -97
  280. package/node_modules/y18n/CHANGELOG.md +0 -35
  281. package/node_modules/y18n/LICENSE +0 -13
  282. package/node_modules/y18n/README.md +0 -109
  283. package/node_modules/y18n/index.js +0 -188
  284. package/node_modules/y18n/package.json +0 -39
  285. package/node_modules/yargs/CHANGELOG.md +0 -420
  286. package/node_modules/yargs/LICENSE +0 -21
  287. package/node_modules/yargs/README.md +0 -140
  288. package/node_modules/yargs/build/lib/apply-extends.d.ts +0 -2
  289. package/node_modules/yargs/build/lib/apply-extends.js +0 -65
  290. package/node_modules/yargs/build/lib/argsert.d.ts +0 -2
  291. package/node_modules/yargs/build/lib/argsert.js +0 -65
  292. package/node_modules/yargs/build/lib/command.d.ts +0 -64
  293. package/node_modules/yargs/build/lib/command.js +0 -416
  294. package/node_modules/yargs/build/lib/common-types.d.ts +0 -36
  295. package/node_modules/yargs/build/lib/common-types.js +0 -25
  296. package/node_modules/yargs/build/lib/completion-templates.d.ts +0 -2
  297. package/node_modules/yargs/build/lib/completion-templates.js +0 -50
  298. package/node_modules/yargs/build/lib/completion.d.ts +0 -21
  299. package/node_modules/yargs/build/lib/completion.js +0 -135
  300. package/node_modules/yargs/build/lib/is-promise.d.ts +0 -1
  301. package/node_modules/yargs/build/lib/is-promise.js +0 -9
  302. package/node_modules/yargs/build/lib/levenshtein.d.ts +0 -1
  303. package/node_modules/yargs/build/lib/levenshtein.js +0 -58
  304. package/node_modules/yargs/build/lib/middleware.d.ts +0 -10
  305. package/node_modules/yargs/build/lib/middleware.js +0 -57
  306. package/node_modules/yargs/build/lib/obj-filter.d.ts +0 -1
  307. package/node_modules/yargs/build/lib/obj-filter.js +0 -14
  308. package/node_modules/yargs/build/lib/parse-command.d.ts +0 -11
  309. package/node_modules/yargs/build/lib/parse-command.js +0 -36
  310. package/node_modules/yargs/build/lib/process-argv.d.ts +0 -2
  311. package/node_modules/yargs/build/lib/process-argv.js +0 -31
  312. package/node_modules/yargs/build/lib/usage.d.ts +0 -49
  313. package/node_modules/yargs/build/lib/usage.js +0 -540
  314. package/node_modules/yargs/build/lib/validation.d.ts +0 -34
  315. package/node_modules/yargs/build/lib/validation.js +0 -330
  316. package/node_modules/yargs/build/lib/yargs.d.ts +0 -274
  317. package/node_modules/yargs/build/lib/yargs.js +0 -1190
  318. package/node_modules/yargs/build/lib/yerror.d.ts +0 -4
  319. package/node_modules/yargs/build/lib/yerror.js +0 -11
  320. package/node_modules/yargs/index.js +0 -40
  321. package/node_modules/yargs/locales/be.json +0 -46
  322. package/node_modules/yargs/locales/de.json +0 -46
  323. package/node_modules/yargs/locales/en.json +0 -51
  324. package/node_modules/yargs/locales/es.json +0 -46
  325. package/node_modules/yargs/locales/fi.json +0 -49
  326. package/node_modules/yargs/locales/fr.json +0 -53
  327. package/node_modules/yargs/locales/hi.json +0 -49
  328. package/node_modules/yargs/locales/hu.json +0 -46
  329. package/node_modules/yargs/locales/id.json +0 -50
  330. package/node_modules/yargs/locales/it.json +0 -46
  331. package/node_modules/yargs/locales/ja.json +0 -51
  332. package/node_modules/yargs/locales/ko.json +0 -49
  333. package/node_modules/yargs/locales/nb.json +0 -44
  334. package/node_modules/yargs/locales/nl.json +0 -49
  335. package/node_modules/yargs/locales/nn.json +0 -44
  336. package/node_modules/yargs/locales/pirate.json +0 -13
  337. package/node_modules/yargs/locales/pl.json +0 -49
  338. package/node_modules/yargs/locales/pt.json +0 -45
  339. package/node_modules/yargs/locales/pt_BR.json +0 -48
  340. package/node_modules/yargs/locales/ru.json +0 -46
  341. package/node_modules/yargs/locales/th.json +0 -46
  342. package/node_modules/yargs/locales/tr.json +0 -48
  343. package/node_modules/yargs/locales/zh_CN.json +0 -48
  344. package/node_modules/yargs/locales/zh_TW.json +0 -47
  345. package/node_modules/yargs/package.json +0 -92
  346. package/node_modules/yargs/yargs.js +0 -14
  347. package/node_modules/yargs-parser/CHANGELOG.md +0 -601
  348. package/node_modules/yargs-parser/LICENSE.txt +0 -14
  349. package/node_modules/yargs-parser/README.md +0 -449
  350. package/node_modules/yargs-parser/index.js +0 -1032
  351. package/node_modules/yargs-parser/lib/tokenize-arg-string.js +0 -40
  352. package/node_modules/yargs-parser/package.json +0 -46
@@ -1,226 +0,0 @@
1
- import { execFile } from "node:child_process";
2
- import { appCarrierAlias, appCarrierVersion } from "./app-carrier.js";
3
- import { parseVersion } from "./plugin-update.js";
4
- import { shellOptions } from "./tool-process.js";
5
-
6
- const SRI_PATTERN = /^sha(?:256|384|512)-[A-Za-z0-9+/]+={0,2}$/;
7
-
8
- /**
9
- * Stable package follows latest; 预发布跟随其自身的通道(alpha / rc)。
10
- * 例:3.2.2-alpha.15 查 alpha,3.2.2-rc.1 查 rc;绝不把预发布塞给 latest。
11
- */
12
- export function npmUpdateChannel(localVersion) {
13
- const parsed = parseVersion(localVersion);
14
- if (!parsed) return { ok: false, reason: "npm-local-version-invalid" };
15
- if (parsed.prerelease.length === 0) return { ok: true, channel: "latest" };
16
- const channel = parsed.prerelease[0];
17
- if (channel === "alpha" || channel === "rc") return { ok: true, channel };
18
- return { ok: false, reason: "npm-prerelease-channel-unsupported" };
19
- }
20
-
21
- function packageIntegrity(pkg) {
22
- const value = pkg?.dist?.integrity;
23
- return typeof value === "string" && SRI_PATTERN.test(value) ? value : "";
24
- }
25
-
26
- /**
27
- * `npm view <pkg> dist-tags --json` prints the tag map itself
28
- * (`{"latest":"...","alpha":"..."}`), while some adapters/tests hand back the
29
- * whole packument field (`{"dist-tags":{...}}`). Accept both so the check never
30
- * fails merely because of the projection shape.
31
- */
32
- function distTagMap(tags) {
33
- if (!tags || typeof tags !== "object" || Array.isArray(tags)) return null;
34
- const nested = tags["dist-tags"];
35
- if (nested && typeof nested === "object" && !Array.isArray(nested)) return nested;
36
- return tags;
37
- }
38
-
39
- /** 检查日志只放包名/版本/稳定原因码;绝不写 registry URL、凭据或 npm stderr。 */
40
- export const NPM_CHECK_LOG_LIMIT = 40;
41
- const CHECK_LOG_LINE_LIMIT = 240;
42
-
43
- function checkRecorder(log) {
44
- if (!Array.isArray(log)) return () => {};
45
- return (line) => {
46
- const text = String(line ?? "").trim();
47
- if (text === "") return;
48
- log.push(text.length > CHECK_LOG_LINE_LIMIT ? `${text.slice(0, CHECK_LOG_LINE_LIMIT)}…` : text);
49
- if (log.length > NPM_CHECK_LOG_LIMIT) log.splice(0, log.length - NPM_CHECK_LOG_LIMIT);
50
- };
51
- }
52
-
53
- /**
54
- * Resolve an immutable plugin/carrier pair from NPM metadata only.
55
- * `packageView(spec)` is the host NPM adapter; tests inject a deterministic registry.
56
- * This function never downloads a tarball and never returns registry URLs or raw metadata.
57
- * `log` (optional array) receives sanitized, bounded diagnostic lines for the settings UI.
58
- */
59
- export async function resolveNpmUpdateCandidate({ packageName, localVersion, packageView, log } = {}) {
60
- const record = checkRecorder(log);
61
- if (typeof packageName !== "string" || packageName.trim() === "") {
62
- record(`包名无效:${String(packageName ?? "")}`);
63
- return { ok: false, reason: "npm-package-name-invalid" };
64
- }
65
- if (typeof packageView !== "function") {
66
- record(`找不到 npm 元数据适配器(${packageName})`);
67
- return { ok: false, reason: "npm-client-unavailable" };
68
- }
69
- const channel = npmUpdateChannel(localVersion);
70
- if (!channel.ok) {
71
- record(`# 本机版本 ${String(localVersion || "未知")} 无法确定 NPM 通道:${channel.reason}`);
72
- return channel;
73
- }
74
- record(`# 本机版本 ${String(localVersion || "未知")} · NPM 通道 ${channel.channel}`);
75
-
76
- let tags;
77
- record(`$ npm view ${packageName} dist-tags --json`);
78
- try {
79
- tags = await packageView(packageName);
80
- } catch (error) {
81
- const reason = viewFailureReason(error);
82
- record(`→ 失败:${reason}`);
83
- return { ok: false, reason };
84
- }
85
- const candidateVersion = distTagMap(tags)?.[channel.channel];
86
- if (typeof candidateVersion !== "string" || !parseVersion(candidateVersion)) {
87
- record(`→ 缺少 ${channel.channel} 标签`);
88
- return { ok: false, reason: "npm-channel-version-missing", channel: channel.channel };
89
- }
90
- record(`→ ${channel.channel}=${candidateVersion}`);
91
-
92
- let plugin;
93
- record(`$ npm view ${packageName}@${candidateVersion} --json`);
94
- try {
95
- plugin = await packageView(`${packageName}@${candidateVersion}`);
96
- } catch (error) {
97
- record(`→ 失败:${viewFailureReason(error)}`);
98
- return { ok: false, reason: "npm-plugin-metadata-unavailable" };
99
- }
100
- if (!plugin || plugin.version !== candidateVersion) {
101
- record(`→ 版本不符:${String(plugin?.version ?? "缺失")} ≠ ${candidateVersion}`);
102
- return { ok: false, reason: "npm-plugin-version-mismatch" };
103
- }
104
- const pluginIntegrity = packageIntegrity(plugin);
105
- if (!pluginIntegrity) {
106
- record(`→ 元数据缺少 dist.integrity`);
107
- return { ok: false, reason: "npm-plugin-integrity-missing" };
108
- }
109
- record(`→ 插件 v${candidateVersion}`);
110
-
111
- const carrierVersion = appCarrierVersion(candidateVersion);
112
- const alias = appCarrierAlias(packageName);
113
- const expectedAliasSpec = `npm:${packageName}@${carrierVersion}`;
114
- if (plugin.optionalDependencies?.[alias] !== expectedAliasSpec) {
115
- record(`→ 载体别名不匹配:${String(plugin.optionalDependencies?.[alias] ?? "缺失")}(期望 ${expectedAliasSpec})`);
116
- return { ok: false, reason: "npm-carrier-alias-mismatch" };
117
- }
118
-
119
- let carrier;
120
- record(`$ npm view ${packageName}@${carrierVersion} --json`);
121
- try {
122
- carrier = await packageView(`${packageName}@${carrierVersion}`);
123
- } catch (error) {
124
- record(`→ 失败:${viewFailureReason(error)}`);
125
- return { ok: false, reason: "npm-carrier-metadata-unavailable" };
126
- }
127
- if (!carrier || carrier.version !== carrierVersion) {
128
- record(`→ 版本不符:${String(carrier?.version ?? "缺失")} ≠ ${carrierVersion}`);
129
- return { ok: false, reason: "npm-carrier-version-mismatch" };
130
- }
131
- const carrierIntegrity = packageIntegrity(carrier);
132
- if (!carrierIntegrity) {
133
- record(`→ 元数据缺少 dist.integrity`);
134
- return { ok: false, reason: "npm-carrier-integrity-missing" };
135
- }
136
-
137
- const appVersion = typeof carrier.appVersion === "string" ? carrier.appVersion : null;
138
- if (appVersion !== null) {
139
- const parsedApp = parseVersion(appVersion);
140
- const parsedPlugin = parseVersion(candidateVersion);
141
- if (!parsedApp || parsedApp.build === null) {
142
- record(`→ App 版本格式无效:${appVersion}`);
143
- return { ok: false, reason: "npm-app-version-invalid" };
144
- }
145
- if (parsedApp.version !== parsedPlugin.version) {
146
- record(`→ App 版本配对不符:${appVersion} ↔ 插件 ${candidateVersion}`);
147
- return { ok: false, reason: "npm-app-version-pairing-mismatch" };
148
- }
149
- }
150
- const contentSha256 = typeof carrier.pluginContentSha256 === "string" ? carrier.pluginContentSha256.toLowerCase() : "";
151
- if (contentSha256 !== "" && !/^[0-9a-f]{64}$/.test(contentSha256)) {
152
- record(`→ 插件内容标识格式无效(${carrierVersion})`);
153
- return { ok: false, reason: "npm-plugin-content-sha256-invalid" };
154
- }
155
-
156
- record(`→ 载体 v${carrierVersion} · App build ${appVersion ?? "缺失(需预检)"}`);
157
-
158
- return {
159
- ok: true,
160
- channel: channel.channel,
161
- plugin: {
162
- name: packageName,
163
- version: candidateVersion,
164
- integrity: pluginIntegrity,
165
- contentSha256,
166
- },
167
- carrier: {
168
- name: packageName,
169
- version: carrierVersion,
170
- integrity: carrierIntegrity,
171
- appVersion,
172
- pluginContentSha256: contentSha256,
173
- legacyMetadataMissing: appVersion === null,
174
- },
175
- };
176
- }
177
-
178
- export function runNpmView(args, { cwd = process.cwd(), timeoutMs = 20_000, execFileImpl = execFile, platform = process.platform } = {}) {
179
- return new Promise((resolve) => {
180
- execFileImpl("npm", args, {
181
- cwd,
182
- env: process.env,
183
- timeout: timeoutMs,
184
- maxBuffer: 1024 * 1024,
185
- windowsHide: true,
186
- // Windows 上 npm 是 npm.cmd,必须经 shell 解析;POSIX 直接 spawn。
187
- ...shellOptions(platform),
188
- }, (error, stdout, stderr) => {
189
- if (error) {
190
- // npm stderr may contain private registry URLs; expose only a stable source error.
191
- // 区分「找不到 npm 客户端」与「registry 不可用」,便于界面给出可执行提示:
192
- // Windows shell 找不到 .cmd 时 cmd 会报「不是内部或外部命令」而不是 ENOENT。
193
- const stderrText = String(stderr ?? "");
194
- const clientMissing = error?.code === "ENOENT" || /not recognized|不是内部或外部命令|command not found/i.test(stderrText);
195
- resolve({ ok: false, error: clientMissing ? "npm-client-unavailable" : "npm-view-failed" });
196
- return;
197
- }
198
- resolve({ ok: true, stdout: String(stdout ?? "") });
199
- });
200
- });
201
- }
202
-
203
- /** 检查失败原因:npm 客户端缺失是环境问题,不应伪装成 registry 故障。 */
204
- function viewFailureReason(error) {
205
- return error?.message === "npm-client-unavailable" ? "npm-client-unavailable" : "npm-registry-unavailable";
206
- }
207
-
208
- /**
209
- * Host-side npm view adapter. It deliberately supplies no --registry argument so npm
210
- * applies the DSH process's project/user config, including scoped registry and credentials.
211
- */
212
- export function createNpmPackageView({ packageName, cwd, run = runNpmView, platform = process.platform } = {}) {
213
- return async (spec) => {
214
- if (typeof spec !== "string" || spec === "") throw new Error("npm-package-spec-invalid");
215
- const args = spec === packageName
216
- ? ["view", packageName, "dist-tags", "--json"]
217
- : ["view", spec, "--json"];
218
- const result = await run(args, { cwd, platform });
219
- if (!result?.ok) throw new Error(result?.error ?? "npm-view-failed");
220
- try {
221
- return JSON.parse(result.stdout);
222
- } catch {
223
- throw new Error("npm-view-json-invalid");
224
- }
225
- };
226
- }
@@ -1,80 +0,0 @@
1
- #!/usr/bin/env node
2
- // 插件内容标识(CONTEXT「内容标识」):对插件自身的 `package.json` + `lib/**` 做规范化哈希。
3
- //
4
- // 为什么要它:manifest 的 `sha256` 是 **tgz 压缩包的字节哈希**,运行中的插件无法从已解开的
5
- // 目录里复算;而「同一个版本号、不同内容」是真实存在的形态(上游 v3.2.0 与本仓库 develop
6
- // 的插件版本号都是 3.2.0)。所以另给一个**内容哈希**,让发布侧(打包前)、产物侧
7
- // (tgz 解包)与运行侧(已安装副本)三处都能算出同一个值。
8
- //
9
- // 规范(改动即需升 CONTENT_DIGEST_VERSION,否则同一算法下新旧值不可比):
10
- // 1. 参与文件:顶层 `package.json` + 递归 `lib/**`;
11
- // 排除 `node_modules` 与以 `.` 开头的条目;
12
- // 2. 路径一律用 `/` 分隔、按字节序升序排列,保证与文件系统枚举顺序无关;
13
- // 3. 每个文件先把 CRLF 归一为 LF 再哈希(Windows 检出与 Linux 打包必须得到同一个值),
14
- // 按字节(latin1 往返)处理,避免 UTF-8 解码改变内容;
15
- // 4. 文本形式为 `plugin-content-digest/v1\n` + 每行 `<相对路径> <文件哈希>\n`,
16
- // 再取整段的 sha256 作为内容标识。
17
- import { createHash } from "node:crypto";
18
- import { readFileSync, readdirSync, statSync } from "node:fs";
19
- import { join } from "node:path";
20
-
21
- /** 内容标识算法的版本;算法本身变化时必须递增。 */
22
- export const CONTENT_DIGEST_VERSION = 1;
23
- /** 参与哈希的顶层文件。 */
24
- const TOP_FILES = ["package.json"];
25
- /** 参与哈希的目录(递归)。 */
26
- const TOP_DIRS = ["lib"];
27
-
28
- /** CRLF → LF 的字节级归一(不经 UTF-8 解码,二进制内容也能安全往返)。 */
29
- export function normalizeLineEndings(buf) {
30
- return Buffer.from(buf.toString("binary").replace(/\r\n/g, "\n"), "binary");
31
- }
32
-
33
- /** 收集参与哈希的相对路径,按字节序升序。 */
34
- function collectRelPaths(root) {
35
- const found = [];
36
- for (const f of TOP_FILES) {
37
- try {
38
- if (statSync(join(root, f)).isFile()) found.push(f);
39
- } catch {
40
- // 缺失即不参与(发布侧会在别处报"必需文件缺失")
41
- }
42
- }
43
- const walk = (rel) => {
44
- let entries;
45
- try {
46
- entries = readdirSync(join(root, rel), { withFileTypes: true });
47
- } catch {
48
- return;
49
- }
50
- for (const e of entries) {
51
- if (e.name === "node_modules" || e.name.startsWith(".")) continue;
52
- const child = `${rel}/${e.name}`;
53
- if (e.isDirectory()) walk(child);
54
- else if (e.isFile()) found.push(child);
55
- }
56
- };
57
- for (const d of TOP_DIRS) walk(d);
58
- return found.sort();
59
- }
60
-
61
- /**
62
- * 计算插件内容标识。
63
- * @param {string} root 插件根目录(含 `package.json` 与 `lib/`)
64
- * @returns {string} 64 位小写 hex
65
- */
66
- export function pluginContentDigest(root) {
67
- const h = createHash("sha256");
68
- h.update(`plugin-content-digest/v${CONTENT_DIGEST_VERSION}\n`);
69
- for (const rel of collectRelPaths(root)) {
70
- const bytes = normalizeLineEndings(readFileSync(join(root, rel)));
71
- const fileHash = createHash("sha256").update(bytes).digest("hex");
72
- h.update(`${rel} ${fileHash}\n`);
73
- }
74
- return h.digest("hex");
75
- }
76
-
77
- /** 参与哈希的相对路径清单(诊断与测试用;与 pluginContentDigest 的输入完全一致)。 */
78
- export function pluginContentFiles(root) {
79
- return collectRelPaths(root);
80
- }