@marktrue/dsh-mobile-remote 3.2.3-rc.1 → 3.2.4-alpha.1-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 (353) 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 -1362
  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 -930
  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 -929
  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/docs/spec-app-auto-update.md +0 -143
  30. package/lib/account-usage.js +0 -145
  31. package/lib/app-alignment.js +0 -112
  32. package/lib/app-carrier-store.js +0 -1972
  33. package/lib/app-carrier.js +0 -609
  34. package/lib/client.js +0 -1174
  35. package/lib/desktop-form.js +0 -738
  36. package/lib/endpoint-registry.js +0 -165
  37. package/lib/git-read-bundled-provider.js +0 -255
  38. package/lib/git-read-service.js +0 -322
  39. package/lib/index.js +0 -9609
  40. package/lib/npm-update-source.js +0 -226
  41. package/lib/plugin-content-digest.js +0 -80
  42. package/lib/plugin-self-update.js +0 -997
  43. package/lib/plugin-update-controller.js +0 -274
  44. package/lib/plugin-update-log.js +0 -164
  45. package/lib/plugin-update-transaction.js +0 -322
  46. package/lib/plugin-update.js +0 -309
  47. package/lib/runtime-dependency-snapshot.js +0 -345
  48. package/lib/session-title-cache.js +0 -123
  49. package/lib/session-title-refresh.js +0 -261
  50. package/lib/tool-process.js +0 -20
  51. package/lib/update-fetch.js +0 -24
  52. package/lib/update-lock-arbiter.js +0 -170
  53. package/lib/update-supervisor.js +0 -346
  54. package/node_modules/ansi-regex/index.d.ts +0 -37
  55. package/node_modules/ansi-regex/index.js +0 -10
  56. package/node_modules/ansi-regex/license +0 -9
  57. package/node_modules/ansi-regex/package.json +0 -55
  58. package/node_modules/ansi-regex/readme.md +0 -78
  59. package/node_modules/ansi-styles/index.d.ts +0 -345
  60. package/node_modules/ansi-styles/index.js +0 -163
  61. package/node_modules/ansi-styles/license +0 -9
  62. package/node_modules/ansi-styles/package.json +0 -56
  63. package/node_modules/ansi-styles/readme.md +0 -152
  64. package/node_modules/camelcase/index.d.ts +0 -63
  65. package/node_modules/camelcase/index.js +0 -76
  66. package/node_modules/camelcase/license +0 -9
  67. package/node_modules/camelcase/package.json +0 -43
  68. package/node_modules/camelcase/readme.md +0 -99
  69. package/node_modules/cliui/CHANGELOG.md +0 -76
  70. package/node_modules/cliui/LICENSE.txt +0 -14
  71. package/node_modules/cliui/README.md +0 -115
  72. package/node_modules/cliui/index.js +0 -354
  73. package/node_modules/cliui/package.json +0 -65
  74. package/node_modules/color-convert/CHANGELOG.md +0 -54
  75. package/node_modules/color-convert/LICENSE +0 -21
  76. package/node_modules/color-convert/README.md +0 -68
  77. package/node_modules/color-convert/conversions.js +0 -839
  78. package/node_modules/color-convert/index.js +0 -81
  79. package/node_modules/color-convert/package.json +0 -48
  80. package/node_modules/color-convert/route.js +0 -97
  81. package/node_modules/color-name/LICENSE +0 -8
  82. package/node_modules/color-name/README.md +0 -11
  83. package/node_modules/color-name/index.js +0 -152
  84. package/node_modules/color-name/package.json +0 -28
  85. package/node_modules/decamelize/index.js +0 -13
  86. package/node_modules/decamelize/license +0 -21
  87. package/node_modules/decamelize/package.json +0 -38
  88. package/node_modules/decamelize/readme.md +0 -48
  89. package/node_modules/dijkstrajs/.travis.yml +0 -4
  90. package/node_modules/dijkstrajs/CONTRIBUTING.md +0 -8
  91. package/node_modules/dijkstrajs/LICENSE.md +0 -19
  92. package/node_modules/dijkstrajs/README.md +0 -18
  93. package/node_modules/dijkstrajs/dijkstra.js +0 -165
  94. package/node_modules/dijkstrajs/package.json +0 -60
  95. package/node_modules/dijkstrajs/test/dijkstra.test.js +0 -96
  96. package/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
  97. package/node_modules/emoji-regex/README.md +0 -73
  98. package/node_modules/emoji-regex/es2015/index.js +0 -6
  99. package/node_modules/emoji-regex/es2015/text.js +0 -6
  100. package/node_modules/emoji-regex/index.d.ts +0 -23
  101. package/node_modules/emoji-regex/index.js +0 -6
  102. package/node_modules/emoji-regex/package.json +0 -50
  103. package/node_modules/emoji-regex/text.js +0 -6
  104. package/node_modules/find-up/index.d.ts +0 -137
  105. package/node_modules/find-up/index.js +0 -89
  106. package/node_modules/find-up/license +0 -9
  107. package/node_modules/find-up/package.json +0 -53
  108. package/node_modules/find-up/readme.md +0 -156
  109. package/node_modules/get-caller-file/LICENSE.md +0 -6
  110. package/node_modules/get-caller-file/README.md +0 -41
  111. package/node_modules/get-caller-file/index.d.ts +0 -2
  112. package/node_modules/get-caller-file/index.js +0 -22
  113. package/node_modules/get-caller-file/index.js.map +0 -1
  114. package/node_modules/get-caller-file/package.json +0 -42
  115. package/node_modules/is-fullwidth-code-point/index.d.ts +0 -17
  116. package/node_modules/is-fullwidth-code-point/index.js +0 -50
  117. package/node_modules/is-fullwidth-code-point/license +0 -9
  118. package/node_modules/is-fullwidth-code-point/package.json +0 -42
  119. package/node_modules/is-fullwidth-code-point/readme.md +0 -39
  120. package/node_modules/locate-path/index.d.ts +0 -83
  121. package/node_modules/locate-path/index.js +0 -65
  122. package/node_modules/locate-path/license +0 -9
  123. package/node_modules/locate-path/package.json +0 -45
  124. package/node_modules/locate-path/readme.md +0 -122
  125. package/node_modules/p-limit/index.d.ts +0 -38
  126. package/node_modules/p-limit/index.js +0 -57
  127. package/node_modules/p-limit/license +0 -9
  128. package/node_modules/p-limit/package.json +0 -52
  129. package/node_modules/p-limit/readme.md +0 -101
  130. package/node_modules/p-locate/index.d.ts +0 -64
  131. package/node_modules/p-locate/index.js +0 -52
  132. package/node_modules/p-locate/license +0 -9
  133. package/node_modules/p-locate/package.json +0 -53
  134. package/node_modules/p-locate/readme.md +0 -90
  135. package/node_modules/p-try/index.d.ts +0 -39
  136. package/node_modules/p-try/index.js +0 -9
  137. package/node_modules/p-try/license +0 -9
  138. package/node_modules/p-try/package.json +0 -42
  139. package/node_modules/p-try/readme.md +0 -58
  140. package/node_modules/path-exists/index.d.ts +0 -28
  141. package/node_modules/path-exists/index.js +0 -23
  142. package/node_modules/path-exists/license +0 -9
  143. package/node_modules/path-exists/package.json +0 -39
  144. package/node_modules/path-exists/readme.md +0 -52
  145. package/node_modules/pngjs/.eslintignore +0 -2
  146. package/node_modules/pngjs/.eslintrc.json +0 -19
  147. package/node_modules/pngjs/.prettierignore +0 -3
  148. package/node_modules/pngjs/LICENSE +0 -20
  149. package/node_modules/pngjs/README.md +0 -429
  150. package/node_modules/pngjs/browser.js +0 -16096
  151. package/node_modules/pngjs/coverage/lcov-report/base.css +0 -354
  152. package/node_modules/pngjs/coverage/lcov-report/bitmapper.js.html +0 -881
  153. package/node_modules/pngjs/coverage/lcov-report/bitpacker.js.html +0 -554
  154. package/node_modules/pngjs/coverage/lcov-report/block-navigation.js +0 -77
  155. package/node_modules/pngjs/coverage/lcov-report/chunkstream.js.html +0 -647
  156. package/node_modules/pngjs/coverage/lcov-report/constants.js.html +0 -176
  157. package/node_modules/pngjs/coverage/lcov-report/crc.js.html +0 -200
  158. package/node_modules/pngjs/coverage/lcov-report/favicon.png +0 -0
  159. package/node_modules/pngjs/coverage/lcov-report/filter-pack.js.html +0 -593
  160. package/node_modules/pngjs/coverage/lcov-report/filter-parse-async.js.html +0 -152
  161. package/node_modules/pngjs/coverage/lcov-report/filter-parse-sync.js.html +0 -143
  162. package/node_modules/pngjs/coverage/lcov-report/filter-parse.js.html +0 -611
  163. package/node_modules/pngjs/coverage/lcov-report/format-normaliser.js.html +0 -359
  164. package/node_modules/pngjs/coverage/lcov-report/index.html +0 -426
  165. package/node_modules/pngjs/coverage/lcov-report/interlace.js.html +0 -365
  166. package/node_modules/pngjs/coverage/lcov-report/packer-async.js.html +0 -230
  167. package/node_modules/pngjs/coverage/lcov-report/packer-sync.js.html +0 -248
  168. package/node_modules/pngjs/coverage/lcov-report/packer.js.html +0 -467
  169. package/node_modules/pngjs/coverage/lcov-report/paeth-predictor.js.html +0 -128
  170. package/node_modules/pngjs/coverage/lcov-report/parser-async.js.html +0 -575
  171. package/node_modules/pngjs/coverage/lcov-report/parser-sync.js.html +0 -404
  172. package/node_modules/pngjs/coverage/lcov-report/parser.js.html +0 -950
  173. package/node_modules/pngjs/coverage/lcov-report/png-sync.js.html +0 -116
  174. package/node_modules/pngjs/coverage/lcov-report/png.js.html +0 -662
  175. package/node_modules/pngjs/coverage/lcov-report/prettify.css +0 -101
  176. package/node_modules/pngjs/coverage/lcov-report/prettify.js +0 -1007
  177. package/node_modules/pngjs/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  178. package/node_modules/pngjs/coverage/lcov-report/sorter.js +0 -169
  179. package/node_modules/pngjs/coverage/lcov-report/sync-inflate.js.html +0 -584
  180. package/node_modules/pngjs/coverage/lcov-report/sync-reader.js.html +0 -215
  181. package/node_modules/pngjs/coverage/lcov.info +0 -2177
  182. package/node_modules/pngjs/lib/bitmapper.js +0 -267
  183. package/node_modules/pngjs/lib/bitpacker.js +0 -158
  184. package/node_modules/pngjs/lib/chunkstream.js +0 -189
  185. package/node_modules/pngjs/lib/constants.js +0 -32
  186. package/node_modules/pngjs/lib/crc.js +0 -40
  187. package/node_modules/pngjs/lib/filter-pack.js +0 -171
  188. package/node_modules/pngjs/lib/filter-parse-async.js +0 -24
  189. package/node_modules/pngjs/lib/filter-parse-sync.js +0 -21
  190. package/node_modules/pngjs/lib/filter-parse.js +0 -177
  191. package/node_modules/pngjs/lib/format-normaliser.js +0 -93
  192. package/node_modules/pngjs/lib/interlace.js +0 -95
  193. package/node_modules/pngjs/lib/packer-async.js +0 -50
  194. package/node_modules/pngjs/lib/packer-sync.js +0 -56
  195. package/node_modules/pngjs/lib/packer.js +0 -129
  196. package/node_modules/pngjs/lib/paeth-predictor.js +0 -16
  197. package/node_modules/pngjs/lib/parser-async.js +0 -165
  198. package/node_modules/pngjs/lib/parser-sync.js +0 -108
  199. package/node_modules/pngjs/lib/parser.js +0 -290
  200. package/node_modules/pngjs/lib/png-sync.js +0 -12
  201. package/node_modules/pngjs/lib/png.js +0 -194
  202. package/node_modules/pngjs/lib/sync-inflate.js +0 -168
  203. package/node_modules/pngjs/lib/sync-reader.js +0 -45
  204. package/node_modules/pngjs/package.json +0 -73
  205. package/node_modules/qrcode/README.md +0 -770
  206. package/node_modules/qrcode/bin/qrcode +0 -159
  207. package/node_modules/qrcode/helper/to-sjis-browser.js +0 -2
  208. package/node_modules/qrcode/helper/to-sjis.js +0 -105
  209. package/node_modules/qrcode/lib/browser.js +0 -76
  210. package/node_modules/qrcode/lib/can-promise.js +0 -7
  211. package/node_modules/qrcode/lib/core/alignment-pattern.js +0 -83
  212. package/node_modules/qrcode/lib/core/alphanumeric-data.js +0 -59
  213. package/node_modules/qrcode/lib/core/bit-buffer.js +0 -37
  214. package/node_modules/qrcode/lib/core/bit-matrix.js +0 -65
  215. package/node_modules/qrcode/lib/core/byte-data.js +0 -30
  216. package/node_modules/qrcode/lib/core/error-correction-code.js +0 -135
  217. package/node_modules/qrcode/lib/core/error-correction-level.js +0 -50
  218. package/node_modules/qrcode/lib/core/finder-pattern.js +0 -22
  219. package/node_modules/qrcode/lib/core/format-info.js +0 -29
  220. package/node_modules/qrcode/lib/core/galois-field.js +0 -69
  221. package/node_modules/qrcode/lib/core/kanji-data.js +0 -54
  222. package/node_modules/qrcode/lib/core/mask-pattern.js +0 -234
  223. package/node_modules/qrcode/lib/core/mode.js +0 -167
  224. package/node_modules/qrcode/lib/core/numeric-data.js +0 -43
  225. package/node_modules/qrcode/lib/core/polynomial.js +0 -62
  226. package/node_modules/qrcode/lib/core/qrcode.js +0 -495
  227. package/node_modules/qrcode/lib/core/reed-solomon-encoder.js +0 -56
  228. package/node_modules/qrcode/lib/core/regex.js +0 -31
  229. package/node_modules/qrcode/lib/core/segments.js +0 -330
  230. package/node_modules/qrcode/lib/core/utils.js +0 -63
  231. package/node_modules/qrcode/lib/core/version-check.js +0 -9
  232. package/node_modules/qrcode/lib/core/version.js +0 -163
  233. package/node_modules/qrcode/lib/index.js +0 -12
  234. package/node_modules/qrcode/lib/renderer/canvas.js +0 -63
  235. package/node_modules/qrcode/lib/renderer/png.js +0 -78
  236. package/node_modules/qrcode/lib/renderer/svg-tag.js +0 -81
  237. package/node_modules/qrcode/lib/renderer/svg.js +0 -19
  238. package/node_modules/qrcode/lib/renderer/terminal/terminal-small.js +0 -85
  239. package/node_modules/qrcode/lib/renderer/terminal/terminal.js +0 -49
  240. package/node_modules/qrcode/lib/renderer/terminal.js +0 -9
  241. package/node_modules/qrcode/lib/renderer/utf8.js +0 -71
  242. package/node_modules/qrcode/lib/renderer/utils.js +0 -99
  243. package/node_modules/qrcode/lib/server.js +0 -138
  244. package/node_modules/qrcode/license +0 -10
  245. package/node_modules/qrcode/package.json +0 -77
  246. package/node_modules/require-directory/.jshintrc +0 -67
  247. package/node_modules/require-directory/.npmignore +0 -1
  248. package/node_modules/require-directory/.travis.yml +0 -3
  249. package/node_modules/require-directory/LICENSE +0 -22
  250. package/node_modules/require-directory/README.markdown +0 -184
  251. package/node_modules/require-directory/index.js +0 -86
  252. package/node_modules/require-directory/package.json +0 -40
  253. package/node_modules/require-main-filename/CHANGELOG.md +0 -26
  254. package/node_modules/require-main-filename/LICENSE.txt +0 -14
  255. package/node_modules/require-main-filename/README.md +0 -26
  256. package/node_modules/require-main-filename/index.js +0 -18
  257. package/node_modules/require-main-filename/package.json +0 -35
  258. package/node_modules/set-blocking/CHANGELOG.md +0 -26
  259. package/node_modules/set-blocking/LICENSE.txt +0 -14
  260. package/node_modules/set-blocking/README.md +0 -31
  261. package/node_modules/set-blocking/index.js +0 -7
  262. package/node_modules/set-blocking/package.json +0 -42
  263. package/node_modules/string-width/index.d.ts +0 -29
  264. package/node_modules/string-width/index.js +0 -47
  265. package/node_modules/string-width/license +0 -9
  266. package/node_modules/string-width/package.json +0 -56
  267. package/node_modules/string-width/readme.md +0 -50
  268. package/node_modules/strip-ansi/index.d.ts +0 -17
  269. package/node_modules/strip-ansi/index.js +0 -4
  270. package/node_modules/strip-ansi/license +0 -9
  271. package/node_modules/strip-ansi/package.json +0 -54
  272. package/node_modules/strip-ansi/readme.md +0 -46
  273. package/node_modules/which-module/LICENSE +0 -13
  274. package/node_modules/which-module/README.md +0 -58
  275. package/node_modules/which-module/index.js +0 -9
  276. package/node_modules/which-module/package.json +0 -41
  277. package/node_modules/wrap-ansi/index.js +0 -186
  278. package/node_modules/wrap-ansi/license +0 -9
  279. package/node_modules/wrap-ansi/package.json +0 -61
  280. package/node_modules/wrap-ansi/readme.md +0 -97
  281. package/node_modules/y18n/CHANGELOG.md +0 -35
  282. package/node_modules/y18n/LICENSE +0 -13
  283. package/node_modules/y18n/README.md +0 -109
  284. package/node_modules/y18n/index.js +0 -188
  285. package/node_modules/y18n/package.json +0 -39
  286. package/node_modules/yargs/CHANGELOG.md +0 -420
  287. package/node_modules/yargs/LICENSE +0 -21
  288. package/node_modules/yargs/README.md +0 -140
  289. package/node_modules/yargs/build/lib/apply-extends.d.ts +0 -2
  290. package/node_modules/yargs/build/lib/apply-extends.js +0 -65
  291. package/node_modules/yargs/build/lib/argsert.d.ts +0 -2
  292. package/node_modules/yargs/build/lib/argsert.js +0 -65
  293. package/node_modules/yargs/build/lib/command.d.ts +0 -64
  294. package/node_modules/yargs/build/lib/command.js +0 -416
  295. package/node_modules/yargs/build/lib/common-types.d.ts +0 -36
  296. package/node_modules/yargs/build/lib/common-types.js +0 -25
  297. package/node_modules/yargs/build/lib/completion-templates.d.ts +0 -2
  298. package/node_modules/yargs/build/lib/completion-templates.js +0 -50
  299. package/node_modules/yargs/build/lib/completion.d.ts +0 -21
  300. package/node_modules/yargs/build/lib/completion.js +0 -135
  301. package/node_modules/yargs/build/lib/is-promise.d.ts +0 -1
  302. package/node_modules/yargs/build/lib/is-promise.js +0 -9
  303. package/node_modules/yargs/build/lib/levenshtein.d.ts +0 -1
  304. package/node_modules/yargs/build/lib/levenshtein.js +0 -58
  305. package/node_modules/yargs/build/lib/middleware.d.ts +0 -10
  306. package/node_modules/yargs/build/lib/middleware.js +0 -57
  307. package/node_modules/yargs/build/lib/obj-filter.d.ts +0 -1
  308. package/node_modules/yargs/build/lib/obj-filter.js +0 -14
  309. package/node_modules/yargs/build/lib/parse-command.d.ts +0 -11
  310. package/node_modules/yargs/build/lib/parse-command.js +0 -36
  311. package/node_modules/yargs/build/lib/process-argv.d.ts +0 -2
  312. package/node_modules/yargs/build/lib/process-argv.js +0 -31
  313. package/node_modules/yargs/build/lib/usage.d.ts +0 -49
  314. package/node_modules/yargs/build/lib/usage.js +0 -540
  315. package/node_modules/yargs/build/lib/validation.d.ts +0 -34
  316. package/node_modules/yargs/build/lib/validation.js +0 -330
  317. package/node_modules/yargs/build/lib/yargs.d.ts +0 -274
  318. package/node_modules/yargs/build/lib/yargs.js +0 -1190
  319. package/node_modules/yargs/build/lib/yerror.d.ts +0 -4
  320. package/node_modules/yargs/build/lib/yerror.js +0 -11
  321. package/node_modules/yargs/index.js +0 -40
  322. package/node_modules/yargs/locales/be.json +0 -46
  323. package/node_modules/yargs/locales/de.json +0 -46
  324. package/node_modules/yargs/locales/en.json +0 -51
  325. package/node_modules/yargs/locales/es.json +0 -46
  326. package/node_modules/yargs/locales/fi.json +0 -49
  327. package/node_modules/yargs/locales/fr.json +0 -53
  328. package/node_modules/yargs/locales/hi.json +0 -49
  329. package/node_modules/yargs/locales/hu.json +0 -46
  330. package/node_modules/yargs/locales/id.json +0 -50
  331. package/node_modules/yargs/locales/it.json +0 -46
  332. package/node_modules/yargs/locales/ja.json +0 -51
  333. package/node_modules/yargs/locales/ko.json +0 -49
  334. package/node_modules/yargs/locales/nb.json +0 -44
  335. package/node_modules/yargs/locales/nl.json +0 -49
  336. package/node_modules/yargs/locales/nn.json +0 -44
  337. package/node_modules/yargs/locales/pirate.json +0 -13
  338. package/node_modules/yargs/locales/pl.json +0 -49
  339. package/node_modules/yargs/locales/pt.json +0 -45
  340. package/node_modules/yargs/locales/pt_BR.json +0 -48
  341. package/node_modules/yargs/locales/ru.json +0 -46
  342. package/node_modules/yargs/locales/th.json +0 -46
  343. package/node_modules/yargs/locales/tr.json +0 -48
  344. package/node_modules/yargs/locales/zh_CN.json +0 -48
  345. package/node_modules/yargs/locales/zh_TW.json +0 -47
  346. package/node_modules/yargs/package.json +0 -92
  347. package/node_modules/yargs/yargs.js +0 -14
  348. package/node_modules/yargs-parser/CHANGELOG.md +0 -601
  349. package/node_modules/yargs-parser/LICENSE.txt +0 -14
  350. package/node_modules/yargs-parser/README.md +0 -449
  351. package/node_modules/yargs-parser/index.js +0 -1032
  352. package/node_modules/yargs-parser/lib/tokenize-arg-string.js +0 -40
  353. 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
- }