typescript-virtual-container 1.4.4 → 1.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (892) hide show
  1. package/builds/self-standalone.js +321 -272
  2. package/builds/self-standalone.js.map +4 -4
  3. package/builds/standalone-wo-sftp.js +261 -212
  4. package/builds/standalone-wo-sftp.js.map +4 -4
  5. package/builds/standalone.js +265 -216
  6. package/builds/standalone.js.map +4 -4
  7. package/builds/web-full-api.min.js +5 -5
  8. package/builds/web-full-api.min.js.map +3 -3
  9. package/builds/web.min.js +5 -5
  10. package/builds/web.min.js.map +3 -3
  11. package/bun.lock +97 -0
  12. package/dist/Honeypot/index.d.ts.map +1 -0
  13. package/dist/Honeypot/index.js +299 -0
  14. package/dist/Honeypot/index.js.map +1 -0
  15. package/dist/SSHClient/index.d.ts.map +1 -0
  16. package/dist/SSHClient/index.js +238 -0
  17. package/dist/SSHClient/index.js.map +1 -0
  18. package/dist/SSHMimic/exec.d.ts.map +1 -0
  19. package/dist/SSHMimic/exec.js +28 -0
  20. package/dist/SSHMimic/exec.js.map +1 -0
  21. package/dist/SSHMimic/executor.d.ts.map +1 -0
  22. package/dist/SSHMimic/executor.js +161 -0
  23. package/dist/SSHMimic/executor.js.map +1 -0
  24. package/dist/SSHMimic/hostKey.d.ts.map +1 -0
  25. package/dist/SSHMimic/hostKey.js +18 -0
  26. package/dist/SSHMimic/hostKey.js.map +1 -0
  27. package/dist/SSHMimic/index.d.ts.map +1 -0
  28. package/dist/SSHMimic/index.js +250 -0
  29. package/dist/SSHMimic/index.js.map +1 -0
  30. package/dist/SSHMimic/loginBanner.d.ts.map +1 -0
  31. package/dist/SSHMimic/loginBanner.js +23 -0
  32. package/dist/SSHMimic/loginBanner.js.map +1 -0
  33. package/dist/SSHMimic/loginFormat.d.ts.map +1 -0
  34. package/dist/SSHMimic/loginFormat.js +11 -0
  35. package/dist/SSHMimic/loginFormat.js.map +1 -0
  36. package/dist/SSHMimic/prompt.d.ts.map +1 -0
  37. package/dist/SSHMimic/prompt.js +10 -0
  38. package/dist/SSHMimic/prompt.js.map +1 -0
  39. package/dist/SSHMimic/sftp.d.ts.map +1 -0
  40. package/dist/SSHMimic/sftp.js +620 -0
  41. package/dist/SSHMimic/sftp.js.map +1 -0
  42. package/dist/VirtualFileSystem/binaryPack.d.ts.map +1 -0
  43. package/dist/VirtualFileSystem/binaryPack.js +217 -0
  44. package/dist/VirtualFileSystem/binaryPack.js.map +1 -0
  45. package/dist/VirtualFileSystem/index.d.ts.map +1 -0
  46. package/dist/VirtualFileSystem/index.js +690 -0
  47. package/dist/VirtualFileSystem/index.js.map +1 -0
  48. package/dist/VirtualFileSystem/internalTypes.d.ts.map +1 -0
  49. package/dist/VirtualFileSystem/internalTypes.js +1 -0
  50. package/dist/VirtualFileSystem/internalTypes.js.map +1 -0
  51. package/dist/VirtualFileSystem/path.d.ts.map +1 -0
  52. package/dist/VirtualFileSystem/path.js +50 -0
  53. package/dist/VirtualFileSystem/path.js.map +1 -0
  54. package/dist/VirtualPackageManager/index.d.ts.map +1 -0
  55. package/dist/VirtualPackageManager/index.js +854 -0
  56. package/dist/VirtualPackageManager/index.js.map +1 -0
  57. package/dist/VirtualShell/index.d.ts.map +1 -0
  58. package/dist/VirtualShell/index.js +285 -0
  59. package/dist/VirtualShell/index.js.map +1 -0
  60. package/dist/VirtualShell/shell.d.ts.map +1 -0
  61. package/dist/VirtualShell/shell.js +503 -0
  62. package/dist/VirtualShell/shell.js.map +1 -0
  63. package/dist/VirtualShell/shellParser.d.ts.map +1 -0
  64. package/dist/VirtualShell/shellParser.js +266 -0
  65. package/dist/VirtualShell/shellParser.js.map +1 -0
  66. package/dist/VirtualUserManager/index.d.ts.map +1 -0
  67. package/dist/VirtualUserManager/index.js +608 -0
  68. package/dist/VirtualUserManager/index.js.map +1 -0
  69. package/dist/commands/adduser.d.ts.map +1 -0
  70. package/dist/commands/adduser.js +90 -0
  71. package/dist/commands/adduser.js.map +1 -0
  72. package/dist/commands/alias.d.ts.map +1 -0
  73. package/dist/commands/alias.js +69 -0
  74. package/dist/commands/alias.js.map +1 -0
  75. package/dist/commands/apt.d.ts.map +1 -0
  76. package/dist/commands/apt.js +211 -0
  77. package/dist/commands/apt.js.map +1 -0
  78. package/dist/commands/awk.d.ts.map +1 -0
  79. package/dist/commands/awk.js +170 -0
  80. package/dist/commands/awk.js.map +1 -0
  81. package/dist/commands/base64.d.ts.map +1 -0
  82. package/dist/commands/base64.js +29 -0
  83. package/dist/commands/base64.js.map +1 -0
  84. package/dist/commands/cat.d.ts.map +1 -0
  85. package/dist/commands/cat.js +45 -0
  86. package/dist/commands/cat.js.map +1 -0
  87. package/dist/commands/cd.d.ts.map +1 -0
  88. package/dist/commands/cd.js +22 -0
  89. package/dist/commands/cd.js.map +1 -0
  90. package/dist/commands/chmod.d.ts.map +1 -0
  91. package/dist/commands/chmod.js +88 -0
  92. package/dist/commands/chmod.js.map +1 -0
  93. package/dist/commands/clear.d.ts.map +1 -0
  94. package/dist/commands/clear.js +14 -0
  95. package/dist/commands/clear.js.map +1 -0
  96. package/dist/commands/command-helpers.d.ts.map +1 -0
  97. package/dist/commands/command-helpers.js +222 -0
  98. package/dist/commands/command-helpers.js.map +1 -0
  99. package/dist/commands/cp.d.ts.map +1 -0
  100. package/dist/commands/cp.js +76 -0
  101. package/dist/commands/cp.js.map +1 -0
  102. package/dist/commands/curl.d.ts.map +1 -0
  103. package/dist/commands/curl.js +128 -0
  104. package/dist/commands/curl.js.map +1 -0
  105. package/dist/commands/cut.d.ts.map +1 -0
  106. package/dist/commands/cut.js +35 -0
  107. package/dist/commands/cut.js.map +1 -0
  108. package/dist/commands/date.d.ts.map +1 -0
  109. package/dist/commands/date.js +29 -0
  110. package/dist/commands/date.js.map +1 -0
  111. package/dist/commands/declare.d.ts.map +1 -0
  112. package/dist/commands/declare.js +45 -0
  113. package/dist/commands/declare.js.map +1 -0
  114. package/dist/commands/deluser.d.ts.map +1 -0
  115. package/dist/commands/deluser.js +84 -0
  116. package/dist/commands/deluser.js.map +1 -0
  117. package/dist/commands/df.d.ts.map +1 -0
  118. package/dist/commands/df.js +22 -0
  119. package/dist/commands/df.js.map +1 -0
  120. package/dist/commands/diff.d.ts.map +1 -0
  121. package/dist/commands/diff.js +46 -0
  122. package/dist/commands/diff.js.map +1 -0
  123. package/dist/commands/dpkg.d.ts.map +1 -0
  124. package/dist/commands/dpkg.js +162 -0
  125. package/dist/commands/dpkg.js.map +1 -0
  126. package/dist/commands/du.d.ts.map +1 -0
  127. package/dist/commands/du.js +51 -0
  128. package/dist/commands/du.js.map +1 -0
  129. package/dist/commands/echo.d.ts.map +1 -0
  130. package/dist/commands/echo.js +46 -0
  131. package/dist/commands/echo.js.map +1 -0
  132. package/dist/commands/env.d.ts.map +1 -0
  133. package/dist/commands/env.js +21 -0
  134. package/dist/commands/env.js.map +1 -0
  135. package/dist/commands/exit.d.ts.map +1 -0
  136. package/dist/commands/exit.js +17 -0
  137. package/dist/commands/exit.js.map +1 -0
  138. package/dist/commands/export.d.ts.map +1 -0
  139. package/dist/commands/export.js +34 -0
  140. package/dist/commands/export.js.map +1 -0
  141. package/dist/commands/find.d.ts.map +1 -0
  142. package/dist/commands/find.js +56 -0
  143. package/dist/commands/find.js.map +1 -0
  144. package/dist/commands/free.d.ts.map +1 -0
  145. package/dist/commands/free.js +44 -0
  146. package/dist/commands/free.js.map +1 -0
  147. package/dist/commands/grep.d.ts.map +1 -0
  148. package/dist/commands/grep.js +121 -0
  149. package/dist/commands/grep.js.map +1 -0
  150. package/dist/commands/groups.d.ts.map +1 -0
  151. package/dist/commands/groups.js +18 -0
  152. package/dist/commands/groups.js.map +1 -0
  153. package/dist/commands/gzip.d.ts.map +1 -0
  154. package/dist/commands/gzip.js +83 -0
  155. package/dist/commands/gzip.js.map +1 -0
  156. package/dist/commands/head.d.ts.map +1 -0
  157. package/dist/commands/head.js +47 -0
  158. package/dist/commands/head.js.map +1 -0
  159. package/dist/commands/help.d.ts.map +1 -0
  160. package/dist/commands/help.js +124 -0
  161. package/dist/commands/help.js.map +1 -0
  162. package/dist/commands/helpers.d.ts.map +1 -0
  163. package/dist/commands/helpers.js +167 -0
  164. package/dist/commands/helpers.js.map +1 -0
  165. package/dist/commands/history.d.ts.map +1 -0
  166. package/dist/commands/history.js +27 -0
  167. package/dist/commands/history.js.map +1 -0
  168. package/dist/commands/hostname.d.ts.map +1 -0
  169. package/dist/commands/hostname.js +13 -0
  170. package/dist/commands/hostname.js.map +1 -0
  171. package/dist/commands/htop.d.ts.map +1 -0
  172. package/dist/commands/htop.js +18 -0
  173. package/dist/commands/htop.js.map +1 -0
  174. package/dist/commands/id.d.ts.map +1 -0
  175. package/dist/commands/id.js +18 -0
  176. package/dist/commands/id.js.map +1 -0
  177. package/dist/commands/index.d.ts.map +1 -0
  178. package/dist/commands/index.js +3 -0
  179. package/dist/commands/index.js.map +1 -0
  180. package/dist/commands/kill.d.ts.map +1 -0
  181. package/dist/commands/kill.js +19 -0
  182. package/dist/commands/kill.js.map +1 -0
  183. package/dist/commands/ln.d.ts.map +1 -0
  184. package/dist/commands/ln.js +67 -0
  185. package/dist/commands/ln.js.map +1 -0
  186. package/dist/commands/ls.d.ts.map +1 -0
  187. package/dist/commands/ls.js +201 -0
  188. package/dist/commands/ls.js.map +1 -0
  189. package/dist/commands/lsb-release.d.ts.map +1 -0
  190. package/dist/commands/lsb-release.js +62 -0
  191. package/dist/commands/lsb-release.js.map +1 -0
  192. package/dist/commands/man.d.ts.map +1 -0
  193. package/dist/commands/man.js +50 -0
  194. package/dist/commands/man.js.map +1 -0
  195. package/dist/commands/mkdir.d.ts.map +1 -0
  196. package/dist/commands/mkdir.js +29 -0
  197. package/dist/commands/mkdir.js.map +1 -0
  198. package/dist/commands/mv.d.ts.map +1 -0
  199. package/dist/commands/mv.js +43 -0
  200. package/dist/commands/mv.js.map +1 -0
  201. package/dist/commands/nano.d.ts.map +1 -0
  202. package/dist/commands/nano.js +35 -0
  203. package/dist/commands/nano.js.map +1 -0
  204. package/dist/commands/neofetch.d.ts.map +1 -0
  205. package/dist/commands/neofetch.js +49 -0
  206. package/dist/commands/neofetch.js.map +1 -0
  207. package/dist/commands/node.d.ts.map +1 -0
  208. package/dist/commands/node.js +317 -0
  209. package/dist/commands/node.js.map +1 -0
  210. package/dist/commands/npm.d.ts.map +1 -0
  211. package/dist/commands/npm.js +110 -0
  212. package/dist/commands/npm.js.map +1 -0
  213. package/dist/commands/passwd.d.ts.map +1 -0
  214. package/dist/commands/passwd.js +45 -0
  215. package/dist/commands/passwd.js.map +1 -0
  216. package/dist/commands/ping.d.ts.map +1 -0
  217. package/dist/commands/ping.js +29 -0
  218. package/dist/commands/ping.js.map +1 -0
  219. package/dist/commands/printf.d.ts.map +1 -0
  220. package/dist/commands/printf.js +145 -0
  221. package/dist/commands/printf.js.map +1 -0
  222. package/dist/commands/ps.d.ts.map +1 -0
  223. package/dist/commands/ps.js +47 -0
  224. package/dist/commands/ps.js.map +1 -0
  225. package/dist/commands/pwd.d.ts.map +1 -0
  226. package/dist/commands/pwd.js +8 -0
  227. package/dist/commands/pwd.js.map +1 -0
  228. package/dist/commands/python.d.ts.map +1 -0
  229. package/dist/commands/python.js +2059 -0
  230. package/dist/commands/python.js.map +1 -0
  231. package/dist/commands/read.d.ts.map +1 -0
  232. package/dist/commands/read.js +40 -0
  233. package/dist/commands/read.js.map +1 -0
  234. package/dist/commands/registry.d.ts.map +1 -0
  235. package/dist/commands/registry.js +235 -0
  236. package/dist/commands/registry.js.map +1 -0
  237. package/dist/commands/rm.d.ts.map +1 -0
  238. package/dist/commands/rm.js +37 -0
  239. package/dist/commands/rm.js.map +1 -0
  240. package/dist/commands/runtime.d.ts.map +1 -0
  241. package/dist/commands/runtime.js +286 -0
  242. package/dist/commands/runtime.js.map +1 -0
  243. package/dist/commands/sed.d.ts.map +1 -0
  244. package/dist/commands/sed.js +61 -0
  245. package/dist/commands/sed.js.map +1 -0
  246. package/dist/commands/seq.d.ts.map +1 -0
  247. package/dist/commands/seq.js +51 -0
  248. package/dist/commands/seq.js.map +1 -0
  249. package/dist/commands/set.d.ts.map +1 -0
  250. package/dist/commands/set.js +27 -0
  251. package/dist/commands/set.js.map +1 -0
  252. package/dist/commands/sh.d.ts.map +1 -0
  253. package/dist/commands/sh.js +432 -0
  254. package/dist/commands/sh.js.map +1 -0
  255. package/dist/commands/shift.d.ts.map +1 -0
  256. package/dist/commands/shift.js +63 -0
  257. package/dist/commands/shift.js.map +1 -0
  258. package/dist/commands/sleep.d.ts.map +1 -0
  259. package/dist/commands/sleep.js +19 -0
  260. package/dist/commands/sleep.js.map +1 -0
  261. package/dist/commands/sort.d.ts.map +1 -0
  262. package/dist/commands/sort.js +45 -0
  263. package/dist/commands/sort.js.map +1 -0
  264. package/dist/commands/source.d.ts.map +1 -0
  265. package/dist/commands/source.js +40 -0
  266. package/dist/commands/source.js.map +1 -0
  267. package/dist/commands/stat.d.ts.map +1 -0
  268. package/dist/commands/stat.js +57 -0
  269. package/dist/commands/stat.js.map +1 -0
  270. package/dist/commands/su.d.ts.map +1 -0
  271. package/dist/commands/su.js +58 -0
  272. package/dist/commands/su.js.map +1 -0
  273. package/dist/commands/sudo.d.ts.map +1 -0
  274. package/dist/commands/sudo.js +55 -0
  275. package/dist/commands/sudo.js.map +1 -0
  276. package/dist/commands/tail.d.ts.map +1 -0
  277. package/dist/commands/tail.js +48 -0
  278. package/dist/commands/tail.js.map +1 -0
  279. package/dist/commands/tar.d.ts.map +1 -0
  280. package/dist/commands/tar.js +103 -0
  281. package/dist/commands/tar.js.map +1 -0
  282. package/dist/commands/tee.d.ts.map +1 -0
  283. package/dist/commands/tee.js +37 -0
  284. package/dist/commands/tee.js.map +1 -0
  285. package/dist/commands/test.d.ts.map +1 -0
  286. package/dist/commands/test.js +115 -0
  287. package/dist/commands/test.js.map +1 -0
  288. package/dist/commands/touch.d.ts.map +1 -0
  289. package/dist/commands/touch.js +26 -0
  290. package/dist/commands/touch.js.map +1 -0
  291. package/dist/commands/tr.d.ts.map +1 -0
  292. package/dist/commands/tr.js +62 -0
  293. package/dist/commands/tr.js.map +1 -0
  294. package/dist/commands/tree.d.ts.map +1 -0
  295. package/dist/commands/tree.js +19 -0
  296. package/dist/commands/tree.js.map +1 -0
  297. package/dist/commands/true.d.ts.map +1 -0
  298. package/dist/commands/true.js +25 -0
  299. package/dist/commands/true.js.map +1 -0
  300. package/dist/commands/type.d.ts.map +1 -0
  301. package/dist/commands/type.js +40 -0
  302. package/dist/commands/type.js.map +1 -0
  303. package/dist/commands/uname.d.ts.map +1 -0
  304. package/dist/commands/uname.js +30 -0
  305. package/dist/commands/uname.js.map +1 -0
  306. package/dist/commands/uniq.d.ts.map +1 -0
  307. package/dist/commands/uniq.js +39 -0
  308. package/dist/commands/uniq.js.map +1 -0
  309. package/dist/commands/unset.d.ts.map +1 -0
  310. package/dist/commands/unset.js +17 -0
  311. package/dist/commands/unset.js.map +1 -0
  312. package/dist/commands/uptime.d.ts.map +1 -0
  313. package/dist/commands/uptime.js +49 -0
  314. package/dist/commands/uptime.js.map +1 -0
  315. package/dist/commands/wc.d.ts.map +1 -0
  316. package/dist/commands/wc.js +56 -0
  317. package/dist/commands/wc.js.map +1 -0
  318. package/dist/commands/wget.d.ts.map +1 -0
  319. package/dist/commands/wget.js +127 -0
  320. package/dist/commands/wget.js.map +1 -0
  321. package/dist/commands/which.d.ts.map +1 -0
  322. package/dist/commands/which.js +33 -0
  323. package/dist/commands/which.js.map +1 -0
  324. package/dist/commands/who.d.ts.map +1 -0
  325. package/dist/commands/who.js +23 -0
  326. package/dist/commands/who.js.map +1 -0
  327. package/dist/commands/whoami.d.ts.map +1 -0
  328. package/dist/commands/whoami.js +13 -0
  329. package/dist/commands/whoami.js.map +1 -0
  330. package/dist/commands/xargs.d.ts.map +1 -0
  331. package/dist/commands/xargs.js +22 -0
  332. package/dist/commands/xargs.js.map +1 -0
  333. package/dist/index.d.ts.map +1 -0
  334. package/dist/index.js +10 -0
  335. package/dist/index.js.map +1 -0
  336. package/dist/modules/linuxRootfs.d.ts.map +1 -0
  337. package/dist/modules/linuxRootfs.js +620 -0
  338. package/dist/modules/linuxRootfs.js.map +1 -0
  339. package/dist/modules/neofetch.d.ts.map +1 -0
  340. package/dist/modules/neofetch.js +285 -0
  341. package/dist/modules/neofetch.js.map +1 -0
  342. package/dist/modules/shellInteractive.d.ts.map +1 -0
  343. package/dist/modules/shellInteractive.js +27 -0
  344. package/dist/modules/shellInteractive.js.map +1 -0
  345. package/dist/modules/shellRuntime.d.ts.map +1 -0
  346. package/dist/modules/shellRuntime.js +53 -0
  347. package/dist/modules/shellRuntime.js.map +1 -0
  348. package/dist/self-standalone.d.ts.map +1 -0
  349. package/dist/self-standalone.js +419 -0
  350. package/dist/self-standalone.js.map +1 -0
  351. package/dist/standalone-wo-sftp.d.ts.map +1 -0
  352. package/dist/standalone-wo-sftp.js +31 -0
  353. package/dist/standalone-wo-sftp.js.map +1 -0
  354. package/dist/standalone.d.ts.map +1 -0
  355. package/dist/standalone.js +36 -0
  356. package/dist/standalone.js.map +1 -0
  357. package/dist/types/commands.d.ts.map +1 -0
  358. package/dist/types/commands.js +1 -0
  359. package/dist/types/commands.js.map +1 -0
  360. package/dist/types/pipeline.d.ts.map +1 -0
  361. package/dist/types/pipeline.js +1 -0
  362. package/dist/types/pipeline.js.map +1 -0
  363. package/dist/types/streams.d.ts.map +1 -0
  364. package/dist/types/streams.js +1 -0
  365. package/dist/types/streams.js.map +1 -0
  366. package/dist/types/vfs.d.ts.map +1 -0
  367. package/dist/types/vfs.js +1 -0
  368. package/dist/types/vfs.js.map +1 -0
  369. package/dist/utils/expand.d.ts.map +1 -0
  370. package/dist/utils/expand.js +477 -0
  371. package/dist/utils/expand.js.map +1 -0
  372. package/dist/utils/perfLogger.d.ts.map +1 -0
  373. package/dist/utils/perfLogger.js +50 -0
  374. package/dist/utils/perfLogger.js.map +1 -0
  375. package/dist/utils/tokenize.d.ts.map +1 -0
  376. package/dist/utils/tokenize.js +115 -0
  377. package/dist/utils/tokenize.js.map +1 -0
  378. package/dist/utils/vfsDiff.d.ts.map +1 -0
  379. package/dist/utils/vfsDiff.js +178 -0
  380. package/dist/utils/vfsDiff.js.map +1 -0
  381. package/dist/web-api.d.ts.map +1 -0
  382. package/dist/web-api.js +47 -0
  383. package/dist/web-api.js.map +1 -0
  384. package/dist/web-full.d.ts.map +1 -0
  385. package/dist/web-full.js +9 -0
  386. package/dist/web-full.js.map +1 -0
  387. package/dist/web.d.ts.map +1 -0
  388. package/dist/web.js +774 -0
  389. package/dist/web.js.map +1 -0
  390. package/docs/.nojekyll +1 -0
  391. package/docs/assets/hierarchy.js +1 -0
  392. package/docs/assets/highlight.css +162 -0
  393. package/docs/assets/icons.js +18 -0
  394. package/docs/assets/icons.svg +1 -0
  395. package/docs/assets/main.js +60 -0
  396. package/docs/assets/navigation.js +1 -0
  397. package/docs/assets/search.js +1 -0
  398. package/docs/assets/style.css +1633 -0
  399. package/docs/classes/HoneyPot.html +31 -0
  400. package/docs/classes/SshClient.html +66 -0
  401. package/docs/classes/VirtualFileSystem.html +262 -0
  402. package/docs/classes/VirtualPackageManager.html +63 -0
  403. package/docs/classes/VirtualSftpServer.html +169 -0
  404. package/docs/classes/VirtualShell.html +265 -0
  405. package/docs/classes/VirtualSshServer.html +177 -0
  406. package/docs/classes/VirtualUserManager.html +276 -0
  407. package/docs/docs/.nojekyll +1 -0
  408. package/docs/docs/assets/hierarchy.js +1 -0
  409. package/docs/docs/assets/highlight.css +162 -0
  410. package/docs/docs/assets/icons.js +18 -0
  411. package/docs/docs/assets/icons.svg +1 -0
  412. package/docs/docs/assets/main.js +60 -0
  413. package/docs/docs/assets/navigation.js +1 -0
  414. package/docs/docs/assets/search.js +1 -0
  415. package/docs/docs/assets/style.css +1633 -0
  416. package/docs/docs/hierarchy.html +1 -0
  417. package/docs/docs/index.html +1842 -0
  418. package/docs/docs/media/LICENSE +21 -0
  419. package/docs/docs/modules.html +1 -0
  420. package/docs/functions/assertDiff.html +6 -0
  421. package/docs/functions/diffSnapshots.html +7 -0
  422. package/docs/functions/formatDiff.html +6 -0
  423. package/docs/functions/getArg.html +13 -0
  424. package/docs/functions/getFlag.html +15 -0
  425. package/docs/functions/ifFlag.html +11 -0
  426. package/docs/hierarchy.html +1 -0
  427. package/docs/index.html +1842 -0
  428. package/docs/interfaces/AuditLogEntry.html +6 -0
  429. package/docs/interfaces/CommandContext.html +22 -0
  430. package/docs/interfaces/CommandResult.html +26 -0
  431. package/docs/interfaces/ExecStream.html +11 -0
  432. package/docs/interfaces/HoneyPotStats.html +14 -0
  433. package/docs/interfaces/InstalledPackage.html +20 -0
  434. package/docs/interfaces/NanoEditorSession.html +8 -0
  435. package/docs/interfaces/PackageDefinition.html +30 -0
  436. package/docs/interfaces/PackageFile.html +8 -0
  437. package/docs/interfaces/RemoveOptions.html +4 -0
  438. package/docs/interfaces/ShellEnv.html +6 -0
  439. package/docs/interfaces/ShellModule.html +14 -0
  440. package/docs/interfaces/ShellProperties.html +14 -0
  441. package/docs/interfaces/ShellStream.html +11 -0
  442. package/docs/interfaces/SudoChallenge.html +24 -0
  443. package/docs/interfaces/VfsBaseNode.html +12 -0
  444. package/docs/interfaces/VfsDiff.html +10 -0
  445. package/docs/interfaces/VfsDiffEntry.html +6 -0
  446. package/docs/interfaces/VfsDiffModified.html +10 -0
  447. package/docs/interfaces/VfsDirectoryNode.html +15 -0
  448. package/docs/interfaces/VfsFileNode.html +17 -0
  449. package/docs/interfaces/VfsOptions.html +12 -0
  450. package/docs/interfaces/VfsSnapshot.html +3 -0
  451. package/docs/interfaces/VfsSnapshotBaseNode.html +8 -0
  452. package/docs/interfaces/VfsSnapshotDirectoryNode.html +10 -0
  453. package/docs/interfaces/VfsSnapshotFileNode.html +12 -0
  454. package/docs/interfaces/WriteFileOptions.html +6 -0
  455. package/docs/media/LICENSE +21 -0
  456. package/docs/modules.html +1 -0
  457. package/docs/types/CommandMode.html +2 -0
  458. package/docs/types/CommandOutcome.html +2 -0
  459. package/docs/types/VfsNodeStats.html +2 -0
  460. package/docs/types/VfsNodeType.html +2 -0
  461. package/docs/types/VfsPersistenceMode.html +5 -0
  462. package/docs/types/VfsSnapshotNode.html +2 -0
  463. package/examples/web.min.js +5 -5
  464. package/package.json +4 -2
  465. package/tsconfig.json +7 -2
  466. package/typedoc.json +8 -0
  467. package/src/Honeypot/index.d.ts.map +0 -1
  468. package/src/Honeypot/index.js +0 -298
  469. package/src/SSHClient/index.d.ts.map +0 -1
  470. package/src/SSHClient/index.js +0 -237
  471. package/src/SSHMimic/exec.d.ts.map +0 -1
  472. package/src/SSHMimic/exec.js +0 -27
  473. package/src/SSHMimic/executor.d.ts.map +0 -1
  474. package/src/SSHMimic/executor.js +0 -160
  475. package/src/SSHMimic/hostKey.d.ts.map +0 -1
  476. package/src/SSHMimic/hostKey.js +0 -17
  477. package/src/SSHMimic/index.d.ts.map +0 -1
  478. package/src/SSHMimic/index.js +0 -249
  479. package/src/SSHMimic/loginBanner.d.ts.map +0 -1
  480. package/src/SSHMimic/loginBanner.js +0 -22
  481. package/src/SSHMimic/loginFormat.d.ts.map +0 -1
  482. package/src/SSHMimic/loginFormat.js +0 -10
  483. package/src/SSHMimic/prompt.d.ts.map +0 -1
  484. package/src/SSHMimic/prompt.js +0 -9
  485. package/src/SSHMimic/sftp.d.ts.map +0 -1
  486. package/src/SSHMimic/sftp.js +0 -619
  487. package/src/VirtualFileSystem/binaryPack.d.ts.map +0 -1
  488. package/src/VirtualFileSystem/binaryPack.js +0 -216
  489. package/src/VirtualFileSystem/index.d.ts.map +0 -1
  490. package/src/VirtualFileSystem/index.js +0 -689
  491. package/src/VirtualFileSystem/internalTypes.d.ts.map +0 -1
  492. package/src/VirtualFileSystem/internalTypes.js +0 -0
  493. package/src/VirtualFileSystem/path.d.ts.map +0 -1
  494. package/src/VirtualFileSystem/path.js +0 -49
  495. package/src/VirtualPackageManager/index.d.ts.map +0 -1
  496. package/src/VirtualPackageManager/index.js +0 -853
  497. package/src/VirtualShell/index.d.ts.map +0 -1
  498. package/src/VirtualShell/index.js +0 -284
  499. package/src/VirtualShell/shell.d.ts.map +0 -1
  500. package/src/VirtualShell/shell.js +0 -502
  501. package/src/VirtualShell/shellParser.d.ts.map +0 -1
  502. package/src/VirtualShell/shellParser.js +0 -265
  503. package/src/VirtualUserManager/index.d.ts.map +0 -1
  504. package/src/VirtualUserManager/index.js +0 -607
  505. package/src/commands/adduser.d.ts.map +0 -1
  506. package/src/commands/adduser.js +0 -89
  507. package/src/commands/alias.d.ts.map +0 -1
  508. package/src/commands/alias.js +0 -68
  509. package/src/commands/apt.d.ts.map +0 -1
  510. package/src/commands/apt.js +0 -210
  511. package/src/commands/awk.d.ts.map +0 -1
  512. package/src/commands/awk.js +0 -169
  513. package/src/commands/base64.d.ts.map +0 -1
  514. package/src/commands/base64.js +0 -28
  515. package/src/commands/cat.d.ts.map +0 -1
  516. package/src/commands/cat.js +0 -44
  517. package/src/commands/cd.d.ts.map +0 -1
  518. package/src/commands/cd.js +0 -21
  519. package/src/commands/chmod.d.ts.map +0 -1
  520. package/src/commands/chmod.js +0 -87
  521. package/src/commands/clear.d.ts.map +0 -1
  522. package/src/commands/clear.js +0 -13
  523. package/src/commands/command-helpers.d.ts.map +0 -1
  524. package/src/commands/command-helpers.js +0 -221
  525. package/src/commands/cp.d.ts.map +0 -1
  526. package/src/commands/cp.js +0 -75
  527. package/src/commands/curl.d.ts.map +0 -1
  528. package/src/commands/curl.js +0 -127
  529. package/src/commands/cut.d.ts.map +0 -1
  530. package/src/commands/cut.js +0 -34
  531. package/src/commands/date.d.ts.map +0 -1
  532. package/src/commands/date.js +0 -28
  533. package/src/commands/declare.d.ts.map +0 -1
  534. package/src/commands/declare.js +0 -44
  535. package/src/commands/deluser.d.ts.map +0 -1
  536. package/src/commands/deluser.js +0 -83
  537. package/src/commands/df.d.ts.map +0 -1
  538. package/src/commands/df.js +0 -21
  539. package/src/commands/diff.d.ts.map +0 -1
  540. package/src/commands/diff.js +0 -45
  541. package/src/commands/dpkg.d.ts.map +0 -1
  542. package/src/commands/dpkg.js +0 -161
  543. package/src/commands/du.d.ts.map +0 -1
  544. package/src/commands/du.js +0 -50
  545. package/src/commands/echo.d.ts.map +0 -1
  546. package/src/commands/echo.js +0 -45
  547. package/src/commands/env.d.ts.map +0 -1
  548. package/src/commands/env.js +0 -20
  549. package/src/commands/exit.d.ts.map +0 -1
  550. package/src/commands/exit.js +0 -16
  551. package/src/commands/export.d.ts.map +0 -1
  552. package/src/commands/export.js +0 -33
  553. package/src/commands/find.d.ts.map +0 -1
  554. package/src/commands/find.js +0 -55
  555. package/src/commands/free.d.ts.map +0 -1
  556. package/src/commands/free.js +0 -43
  557. package/src/commands/grep.d.ts.map +0 -1
  558. package/src/commands/grep.js +0 -120
  559. package/src/commands/groups.d.ts.map +0 -1
  560. package/src/commands/groups.js +0 -17
  561. package/src/commands/gzip.d.ts.map +0 -1
  562. package/src/commands/gzip.js +0 -82
  563. package/src/commands/head.d.ts.map +0 -1
  564. package/src/commands/head.js +0 -46
  565. package/src/commands/help.d.ts.map +0 -1
  566. package/src/commands/help.js +0 -123
  567. package/src/commands/helpers.d.ts.map +0 -1
  568. package/src/commands/helpers.js +0 -166
  569. package/src/commands/history.d.ts.map +0 -1
  570. package/src/commands/history.js +0 -26
  571. package/src/commands/hostname.d.ts.map +0 -1
  572. package/src/commands/hostname.js +0 -12
  573. package/src/commands/htop.d.ts.map +0 -1
  574. package/src/commands/htop.js +0 -17
  575. package/src/commands/id.d.ts.map +0 -1
  576. package/src/commands/id.js +0 -17
  577. package/src/commands/index.d.ts.map +0 -1
  578. package/src/commands/index.js +0 -2
  579. package/src/commands/kill.d.ts.map +0 -1
  580. package/src/commands/kill.js +0 -18
  581. package/src/commands/ln.d.ts.map +0 -1
  582. package/src/commands/ln.js +0 -66
  583. package/src/commands/ls.d.ts.map +0 -1
  584. package/src/commands/ls.js +0 -200
  585. package/src/commands/lsb-release.d.ts.map +0 -1
  586. package/src/commands/lsb-release.js +0 -61
  587. package/src/commands/man.d.ts.map +0 -1
  588. package/src/commands/man.js +0 -49
  589. package/src/commands/mkdir.d.ts.map +0 -1
  590. package/src/commands/mkdir.js +0 -28
  591. package/src/commands/mv.d.ts.map +0 -1
  592. package/src/commands/mv.js +0 -42
  593. package/src/commands/nano.d.ts.map +0 -1
  594. package/src/commands/nano.js +0 -34
  595. package/src/commands/neofetch.d.ts.map +0 -1
  596. package/src/commands/neofetch.js +0 -48
  597. package/src/commands/node.d.ts.map +0 -1
  598. package/src/commands/node.js +0 -316
  599. package/src/commands/npm.d.ts.map +0 -1
  600. package/src/commands/npm.js +0 -109
  601. package/src/commands/passwd.d.ts.map +0 -1
  602. package/src/commands/passwd.js +0 -44
  603. package/src/commands/ping.d.ts.map +0 -1
  604. package/src/commands/ping.js +0 -28
  605. package/src/commands/printf.d.ts.map +0 -1
  606. package/src/commands/printf.js +0 -144
  607. package/src/commands/ps.d.ts.map +0 -1
  608. package/src/commands/ps.js +0 -46
  609. package/src/commands/pwd.d.ts.map +0 -1
  610. package/src/commands/pwd.js +0 -7
  611. package/src/commands/python.d.ts.map +0 -1
  612. package/src/commands/python.js +0 -2058
  613. package/src/commands/read.d.ts.map +0 -1
  614. package/src/commands/read.js +0 -39
  615. package/src/commands/registry.d.ts.map +0 -1
  616. package/src/commands/registry.js +0 -234
  617. package/src/commands/rm.d.ts.map +0 -1
  618. package/src/commands/rm.js +0 -36
  619. package/src/commands/runtime.d.ts.map +0 -1
  620. package/src/commands/runtime.js +0 -285
  621. package/src/commands/sed.d.ts.map +0 -1
  622. package/src/commands/sed.js +0 -60
  623. package/src/commands/seq.d.ts.map +0 -1
  624. package/src/commands/seq.js +0 -50
  625. package/src/commands/set.d.ts.map +0 -1
  626. package/src/commands/set.js +0 -26
  627. package/src/commands/sh.d.ts.map +0 -1
  628. package/src/commands/sh.js +0 -431
  629. package/src/commands/shift.d.ts.map +0 -1
  630. package/src/commands/shift.js +0 -62
  631. package/src/commands/sleep.d.ts.map +0 -1
  632. package/src/commands/sleep.js +0 -18
  633. package/src/commands/sort.d.ts.map +0 -1
  634. package/src/commands/sort.js +0 -44
  635. package/src/commands/source.d.ts.map +0 -1
  636. package/src/commands/source.js +0 -39
  637. package/src/commands/stat.d.ts.map +0 -1
  638. package/src/commands/stat.js +0 -56
  639. package/src/commands/su.d.ts.map +0 -1
  640. package/src/commands/su.js +0 -57
  641. package/src/commands/sudo.d.ts.map +0 -1
  642. package/src/commands/sudo.js +0 -54
  643. package/src/commands/tail.d.ts.map +0 -1
  644. package/src/commands/tail.js +0 -47
  645. package/src/commands/tar.d.ts.map +0 -1
  646. package/src/commands/tar.js +0 -102
  647. package/src/commands/tee.d.ts.map +0 -1
  648. package/src/commands/tee.js +0 -36
  649. package/src/commands/test.d.ts.map +0 -1
  650. package/src/commands/test.js +0 -114
  651. package/src/commands/touch.d.ts.map +0 -1
  652. package/src/commands/touch.js +0 -25
  653. package/src/commands/tr.d.ts.map +0 -1
  654. package/src/commands/tr.js +0 -61
  655. package/src/commands/tree.d.ts.map +0 -1
  656. package/src/commands/tree.js +0 -18
  657. package/src/commands/true.d.ts.map +0 -1
  658. package/src/commands/true.js +0 -24
  659. package/src/commands/type.d.ts.map +0 -1
  660. package/src/commands/type.js +0 -39
  661. package/src/commands/uname.d.ts.map +0 -1
  662. package/src/commands/uname.js +0 -29
  663. package/src/commands/uniq.d.ts.map +0 -1
  664. package/src/commands/uniq.js +0 -38
  665. package/src/commands/unset.d.ts.map +0 -1
  666. package/src/commands/unset.js +0 -16
  667. package/src/commands/uptime.d.ts.map +0 -1
  668. package/src/commands/uptime.js +0 -48
  669. package/src/commands/wc.d.ts.map +0 -1
  670. package/src/commands/wc.js +0 -55
  671. package/src/commands/wget.d.ts.map +0 -1
  672. package/src/commands/wget.js +0 -126
  673. package/src/commands/which.d.ts.map +0 -1
  674. package/src/commands/which.js +0 -32
  675. package/src/commands/who.d.ts.map +0 -1
  676. package/src/commands/who.js +0 -22
  677. package/src/commands/whoami.d.ts.map +0 -1
  678. package/src/commands/whoami.js +0 -12
  679. package/src/commands/xargs.d.ts.map +0 -1
  680. package/src/commands/xargs.js +0 -21
  681. package/src/index.d.ts.map +0 -1
  682. package/src/index.js +0 -9
  683. package/src/modules/linuxRootfs.d.ts.map +0 -1
  684. package/src/modules/linuxRootfs.js +0 -619
  685. package/src/modules/neofetch.d.ts.map +0 -1
  686. package/src/modules/neofetch.js +0 -284
  687. package/src/modules/shellInteractive.d.ts.map +0 -1
  688. package/src/modules/shellInteractive.js +0 -26
  689. package/src/modules/shellRuntime.d.ts.map +0 -1
  690. package/src/modules/shellRuntime.js +0 -52
  691. package/src/self-standalone.d.ts.map +0 -1
  692. package/src/self-standalone.js +0 -418
  693. package/src/standalone-wo-sftp.d.ts.map +0 -1
  694. package/src/standalone-wo-sftp.js +0 -30
  695. package/src/standalone.d.ts.map +0 -1
  696. package/src/standalone.js +0 -35
  697. package/src/types/commands.d.ts.map +0 -1
  698. package/src/types/commands.js +0 -0
  699. package/src/types/pipeline.d.ts.map +0 -1
  700. package/src/types/pipeline.js +0 -0
  701. package/src/types/streams.d.ts.map +0 -1
  702. package/src/types/streams.js +0 -0
  703. package/src/types/vfs.d.ts.map +0 -1
  704. package/src/types/vfs.js +0 -0
  705. package/src/utils/expand.d.ts.map +0 -1
  706. package/src/utils/expand.js +0 -476
  707. package/src/utils/perfLogger.d.ts.map +0 -1
  708. package/src/utils/perfLogger.js +0 -49
  709. package/src/utils/tokenize.d.ts.map +0 -1
  710. package/src/utils/tokenize.js +0 -114
  711. package/src/utils/vfsDiff.d.ts.map +0 -1
  712. package/src/utils/vfsDiff.js +0 -177
  713. package/src/web-api.d.ts.map +0 -1
  714. package/src/web-api.js +0 -46
  715. package/src/web-full.d.ts.map +0 -1
  716. package/src/web-full.js +0 -8
  717. package/src/web.d.ts.map +0 -1
  718. package/src/web.js +0 -773
  719. package/tests/command-helpers.test.d.ts +0 -2
  720. package/tests/command-helpers.test.d.ts.map +0 -1
  721. package/tests/command-helpers.test.js +0 -92
  722. package/tests/commands-admin-net.test.d.ts +0 -2
  723. package/tests/commands-admin-net.test.d.ts.map +0 -1
  724. package/tests/commands-admin-net.test.js +0 -353
  725. package/tests/commands-advanced.test.d.ts +0 -2
  726. package/tests/commands-advanced.test.d.ts.map +0 -1
  727. package/tests/commands-advanced.test.js +0 -378
  728. package/tests/commands-core.test.d.ts +0 -2
  729. package/tests/commands-core.test.d.ts.map +0 -1
  730. package/tests/commands-core.test.js +0 -477
  731. package/tests/commands-missing.test.d.ts +0 -2
  732. package/tests/commands-missing.test.d.ts.map +0 -1
  733. package/tests/commands-missing.test.js +0 -470
  734. package/tests/commands-specific-units.test.d.ts +0 -2
  735. package/tests/commands-specific-units.test.d.ts.map +0 -1
  736. package/tests/commands-specific-units.test.js +0 -264
  737. package/tests/commands-text-sys.test.d.ts +0 -2
  738. package/tests/commands-text-sys.test.d.ts.map +0 -1
  739. package/tests/commands-text-sys.test.js +0 -366
  740. package/tests/expand.test.d.ts +0 -2
  741. package/tests/expand.test.d.ts.map +0 -1
  742. package/tests/expand.test.js +0 -138
  743. package/tests/helpers.test.d.ts +0 -2
  744. package/tests/helpers.test.d.ts.map +0 -1
  745. package/tests/helpers.test.js +0 -52
  746. package/tests/new-features.test.d.ts +0 -2
  747. package/tests/new-features.test.d.ts.map +0 -1
  748. package/tests/new-features.test.js +0 -850
  749. package/tests/parser-executor.test.d.ts +0 -2
  750. package/tests/parser-executor.test.d.ts.map +0 -1
  751. package/tests/parser-executor.test.js +0 -25
  752. package/tests/sftp.test.d.ts +0 -2
  753. package/tests/sftp.test.d.ts.map +0 -1
  754. package/tests/sftp.test.js +0 -246
  755. package/tests/ssh-exec.test.d.ts +0 -2
  756. package/tests/ssh-exec.test.d.ts.map +0 -1
  757. package/tests/ssh-exec.test.js +0 -39
  758. package/tests/test-helper.d.ts +0 -56
  759. package/tests/test-helper.d.ts.map +0 -1
  760. package/tests/test-helper.js +0 -71
  761. package/tests/users.test.d.ts +0 -2
  762. package/tests/users.test.d.ts.map +0 -1
  763. package/tests/users.test.js +0 -71
  764. package/tests/web.test.d.ts +0 -2
  765. package/tests/web.test.d.ts.map +0 -1
  766. package/tests/web.test.js +0 -149
  767. /package/{src → dist}/Honeypot/index.d.ts +0 -0
  768. /package/{src → dist}/SSHClient/index.d.ts +0 -0
  769. /package/{src → dist}/SSHMimic/exec.d.ts +0 -0
  770. /package/{src → dist}/SSHMimic/executor.d.ts +0 -0
  771. /package/{src → dist}/SSHMimic/hostKey.d.ts +0 -0
  772. /package/{src → dist}/SSHMimic/index.d.ts +0 -0
  773. /package/{src → dist}/SSHMimic/loginBanner.d.ts +0 -0
  774. /package/{src → dist}/SSHMimic/loginFormat.d.ts +0 -0
  775. /package/{src → dist}/SSHMimic/prompt.d.ts +0 -0
  776. /package/{src → dist}/SSHMimic/sftp.d.ts +0 -0
  777. /package/{src → dist}/VirtualFileSystem/binaryPack.d.ts +0 -0
  778. /package/{src → dist}/VirtualFileSystem/index.d.ts +0 -0
  779. /package/{src → dist}/VirtualFileSystem/internalTypes.d.ts +0 -0
  780. /package/{src → dist}/VirtualFileSystem/path.d.ts +0 -0
  781. /package/{src → dist}/VirtualPackageManager/index.d.ts +0 -0
  782. /package/{src → dist}/VirtualShell/index.d.ts +0 -0
  783. /package/{src → dist}/VirtualShell/shell.d.ts +0 -0
  784. /package/{src → dist}/VirtualShell/shellParser.d.ts +0 -0
  785. /package/{src → dist}/VirtualUserManager/index.d.ts +0 -0
  786. /package/{src → dist}/commands/adduser.d.ts +0 -0
  787. /package/{src → dist}/commands/alias.d.ts +0 -0
  788. /package/{src → dist}/commands/apt.d.ts +0 -0
  789. /package/{src → dist}/commands/awk.d.ts +0 -0
  790. /package/{src → dist}/commands/base64.d.ts +0 -0
  791. /package/{src → dist}/commands/cat.d.ts +0 -0
  792. /package/{src → dist}/commands/cd.d.ts +0 -0
  793. /package/{src → dist}/commands/chmod.d.ts +0 -0
  794. /package/{src → dist}/commands/clear.d.ts +0 -0
  795. /package/{src → dist}/commands/command-helpers.d.ts +0 -0
  796. /package/{src → dist}/commands/cp.d.ts +0 -0
  797. /package/{src → dist}/commands/curl.d.ts +0 -0
  798. /package/{src → dist}/commands/cut.d.ts +0 -0
  799. /package/{src → dist}/commands/date.d.ts +0 -0
  800. /package/{src → dist}/commands/declare.d.ts +0 -0
  801. /package/{src → dist}/commands/deluser.d.ts +0 -0
  802. /package/{src → dist}/commands/df.d.ts +0 -0
  803. /package/{src → dist}/commands/diff.d.ts +0 -0
  804. /package/{src → dist}/commands/dpkg.d.ts +0 -0
  805. /package/{src → dist}/commands/du.d.ts +0 -0
  806. /package/{src → dist}/commands/echo.d.ts +0 -0
  807. /package/{src → dist}/commands/env.d.ts +0 -0
  808. /package/{src → dist}/commands/exit.d.ts +0 -0
  809. /package/{src → dist}/commands/export.d.ts +0 -0
  810. /package/{src → dist}/commands/find.d.ts +0 -0
  811. /package/{src → dist}/commands/free.d.ts +0 -0
  812. /package/{src → dist}/commands/grep.d.ts +0 -0
  813. /package/{src → dist}/commands/groups.d.ts +0 -0
  814. /package/{src → dist}/commands/gzip.d.ts +0 -0
  815. /package/{src → dist}/commands/head.d.ts +0 -0
  816. /package/{src → dist}/commands/help.d.ts +0 -0
  817. /package/{src → dist}/commands/helpers.d.ts +0 -0
  818. /package/{src → dist}/commands/history.d.ts +0 -0
  819. /package/{src → dist}/commands/hostname.d.ts +0 -0
  820. /package/{src → dist}/commands/htop.d.ts +0 -0
  821. /package/{src → dist}/commands/id.d.ts +0 -0
  822. /package/{src → dist}/commands/index.d.ts +0 -0
  823. /package/{src → dist}/commands/kill.d.ts +0 -0
  824. /package/{src → dist}/commands/ln.d.ts +0 -0
  825. /package/{src → dist}/commands/ls.d.ts +0 -0
  826. /package/{src → dist}/commands/lsb-release.d.ts +0 -0
  827. /package/{src → dist}/commands/man.d.ts +0 -0
  828. /package/{src → dist}/commands/mkdir.d.ts +0 -0
  829. /package/{src → dist}/commands/mv.d.ts +0 -0
  830. /package/{src → dist}/commands/nano.d.ts +0 -0
  831. /package/{src → dist}/commands/neofetch.d.ts +0 -0
  832. /package/{src → dist}/commands/node.d.ts +0 -0
  833. /package/{src → dist}/commands/npm.d.ts +0 -0
  834. /package/{src → dist}/commands/passwd.d.ts +0 -0
  835. /package/{src → dist}/commands/ping.d.ts +0 -0
  836. /package/{src → dist}/commands/printf.d.ts +0 -0
  837. /package/{src → dist}/commands/ps.d.ts +0 -0
  838. /package/{src → dist}/commands/pwd.d.ts +0 -0
  839. /package/{src → dist}/commands/python.d.ts +0 -0
  840. /package/{src → dist}/commands/read.d.ts +0 -0
  841. /package/{src → dist}/commands/registry.d.ts +0 -0
  842. /package/{src → dist}/commands/rm.d.ts +0 -0
  843. /package/{src → dist}/commands/runtime.d.ts +0 -0
  844. /package/{src → dist}/commands/sed.d.ts +0 -0
  845. /package/{src → dist}/commands/seq.d.ts +0 -0
  846. /package/{src → dist}/commands/set.d.ts +0 -0
  847. /package/{src → dist}/commands/sh.d.ts +0 -0
  848. /package/{src → dist}/commands/shift.d.ts +0 -0
  849. /package/{src → dist}/commands/sleep.d.ts +0 -0
  850. /package/{src → dist}/commands/sort.d.ts +0 -0
  851. /package/{src → dist}/commands/source.d.ts +0 -0
  852. /package/{src → dist}/commands/stat.d.ts +0 -0
  853. /package/{src → dist}/commands/su.d.ts +0 -0
  854. /package/{src → dist}/commands/sudo.d.ts +0 -0
  855. /package/{src → dist}/commands/tail.d.ts +0 -0
  856. /package/{src → dist}/commands/tar.d.ts +0 -0
  857. /package/{src → dist}/commands/tee.d.ts +0 -0
  858. /package/{src → dist}/commands/test.d.ts +0 -0
  859. /package/{src → dist}/commands/touch.d.ts +0 -0
  860. /package/{src → dist}/commands/tr.d.ts +0 -0
  861. /package/{src → dist}/commands/tree.d.ts +0 -0
  862. /package/{src → dist}/commands/true.d.ts +0 -0
  863. /package/{src → dist}/commands/type.d.ts +0 -0
  864. /package/{src → dist}/commands/uname.d.ts +0 -0
  865. /package/{src → dist}/commands/uniq.d.ts +0 -0
  866. /package/{src → dist}/commands/unset.d.ts +0 -0
  867. /package/{src → dist}/commands/uptime.d.ts +0 -0
  868. /package/{src → dist}/commands/wc.d.ts +0 -0
  869. /package/{src → dist}/commands/wget.d.ts +0 -0
  870. /package/{src → dist}/commands/which.d.ts +0 -0
  871. /package/{src → dist}/commands/who.d.ts +0 -0
  872. /package/{src → dist}/commands/whoami.d.ts +0 -0
  873. /package/{src → dist}/commands/xargs.d.ts +0 -0
  874. /package/{src → dist}/index.d.ts +0 -0
  875. /package/{src → dist}/modules/linuxRootfs.d.ts +0 -0
  876. /package/{src → dist}/modules/neofetch.d.ts +0 -0
  877. /package/{src → dist}/modules/shellInteractive.d.ts +0 -0
  878. /package/{src → dist}/modules/shellRuntime.d.ts +0 -0
  879. /package/{src → dist}/self-standalone.d.ts +0 -0
  880. /package/{src → dist}/standalone-wo-sftp.d.ts +0 -0
  881. /package/{src → dist}/standalone.d.ts +0 -0
  882. /package/{src → dist}/types/commands.d.ts +0 -0
  883. /package/{src → dist}/types/pipeline.d.ts +0 -0
  884. /package/{src → dist}/types/streams.d.ts +0 -0
  885. /package/{src → dist}/types/vfs.d.ts +0 -0
  886. /package/{src → dist}/utils/expand.d.ts +0 -0
  887. /package/{src → dist}/utils/perfLogger.d.ts +0 -0
  888. /package/{src → dist}/utils/tokenize.d.ts +0 -0
  889. /package/{src → dist}/utils/vfsDiff.d.ts +0 -0
  890. /package/{src → dist}/web-api.d.ts +0 -0
  891. /package/{src → dist}/web-full.d.ts +0 -0
  892. /package/{src → dist}/web.d.ts +0 -0
@@ -1,607 +0,0 @@
1
- import { createHash, randomBytes, randomUUID, scryptSync, timingSafeEqual } from "node:crypto";
2
- import { EventEmitter } from "node:events";
3
- import * as path from "node:path";
4
- import { createPerfLogger } from "../utils/perfLogger";
5
- function resolveFastPasswordHash() {
6
- const configured = process.env.SSH_MIMIC_FAST_PASSWORD_HASH;
7
- return (!!configured &&
8
- !["0", "false", "no", "off"].includes(configured.toLowerCase()));
9
- }
10
- const perf = createPerfLogger("VirtualUserManager");
11
- /**
12
- * Persistent user, sudoers, and active-session manager for the shell runtime.
13
- *
14
- * Passwords are hashed with scrypt by default and stored in the backing virtual filesystem.
15
- */
16
- export class VirtualUserManager extends EventEmitter {
17
- vfs;
18
- autoSudoForNewUsers;
19
- static recordCache = new Map();
20
- static fastPasswordHash = resolveFastPasswordHash();
21
- usersPath = "/etc/htpasswd";
22
- sudoersPath = "/etc/sudoers";
23
- quotasPath = "/etc/quotas";
24
- authDirPath = "/.virtual-env-js/.auth";
25
- users = new Map();
26
- sudoers = new Set();
27
- quotas = new Map();
28
- activeSessions = new Map();
29
- nextTty = 0;
30
- /**
31
- * Creates a user manager instance backed by a virtual filesystem.
32
- *
33
- * @param vfs Backing virtual filesystem used for persistence.
34
- * @param defaultRootPassword Initial root password used when root is created.
35
- * @param autoSudoForNewUsers Whether newly created users are added to sudoers.
36
- */
37
- constructor(vfs,
38
- // private readonly defaultRootPassword: string = process.env
39
- // .SSH_MIMIC_ROOT_PASSWORD || "root",
40
- autoSudoForNewUsers = true) {
41
- super();
42
- this.vfs = vfs;
43
- this.autoSudoForNewUsers = autoSudoForNewUsers;
44
- perf.mark("constructor");
45
- }
46
- /**
47
- * Loads users/sudoers from disk and ensures root account exists.
48
- * Also creates the current system user if not already present.
49
- */
50
- async initialize() {
51
- perf.mark("initialize");
52
- this.loadFromVfs();
53
- this.loadSudoersFromVfs();
54
- this.loadQuotasFromVfs();
55
- let changed = false;
56
- if (!this.users.has("root")) {
57
- this.users.set("root", this.createRecord("root", ""));
58
- changed = true;
59
- }
60
- this.sudoers.add("root");
61
- // Auto-create current system user for easier authentication
62
- // const currentUser = process.env.USER || process.env.USERNAME;
63
- // if (currentUser && currentUser !== "root" && !this.users.has(currentUser)) {
64
- // const userPassword = this.defaultRootPassword;
65
- // this.users.set(currentUser, this.createRecord(currentUser, userPassword));
66
- // this.sudoers.add(currentUser);
67
- // changed = true;
68
- // }
69
- // const homePath = `/home/root`;
70
- // if (!this.vfs.exists(homePath)) {
71
- // this.vfs.mkdir(homePath, 0o755);
72
- // this.vfs.writeFile(
73
- // `${homePath}/README.txt`,
74
- // `Welcome to the virtual environment, root`,
75
- // );
76
- // }
77
- if (changed) {
78
- await this.persist();
79
- }
80
- this.emit("initialized");
81
- }
82
- /**
83
- * Sets max allowed bytes under /home/<username>.
84
- *
85
- * @param username Target username.
86
- * @param maxBytes Quota ceiling in bytes.
87
- */
88
- async setQuotaBytes(username, maxBytes) {
89
- perf.mark("setQuotaBytes");
90
- this.validateUsername(username);
91
- if (!this.users.has(username)) {
92
- throw new Error(`quota: user '${username}' does not exist`);
93
- }
94
- if (!Number.isFinite(maxBytes) || maxBytes < 0) {
95
- throw new Error("quota: maxBytes must be a non-negative number");
96
- }
97
- this.quotas.set(username, Math.floor(maxBytes));
98
- await this.persist();
99
- }
100
- /**
101
- * Removes quota for a user.
102
- *
103
- * @param username Target username.
104
- */
105
- async clearQuota(username) {
106
- perf.mark("clearQuota");
107
- this.validateUsername(username);
108
- this.quotas.delete(username);
109
- await this.persist();
110
- }
111
- /**
112
- * Gets configured quota in bytes for a user.
113
- *
114
- * @param username Target username.
115
- * @returns Quota in bytes, or null when unlimited.
116
- */
117
- getQuotaBytes(username) {
118
- perf.mark("getQuotaBytes");
119
- return this.quotas.get(username) ?? null;
120
- }
121
- /**
122
- * Computes current usage under /home/<username>.
123
- *
124
- * @param username Target username.
125
- * @returns Current usage in bytes.
126
- */
127
- getUsageBytes(username) {
128
- perf.mark("getUsageBytes");
129
- const homePath = `/home/${username}`;
130
- if (!this.vfs.exists(homePath)) {
131
- return 0;
132
- }
133
- return this.vfs.getUsageBytes(homePath);
134
- }
135
- /**
136
- * Validates that writing file content would not exceed user quota.
137
- *
138
- * Quotas are enforced only for writes inside /home/<username>.
139
- *
140
- * @param username Authenticated user.
141
- * @param targetPath Target file path.
142
- * @param nextContent New file content.
143
- */
144
- assertWriteWithinQuota(username, targetPath, nextContent) {
145
- perf.mark("assertWriteWithinQuota");
146
- const quota = this.quotas.get(username);
147
- if (quota === undefined) {
148
- return;
149
- }
150
- const normalizedPath = normalizeVfsPath(targetPath);
151
- const homePath = normalizeVfsPath(`/home/${username}`);
152
- const inUserHome = normalizedPath === homePath || normalizedPath.startsWith(`${homePath}/`);
153
- if (!inUserHome) {
154
- return;
155
- }
156
- const currentUsage = this.getUsageBytes(username);
157
- let existingSize = 0;
158
- if (this.vfs.exists(normalizedPath)) {
159
- const existing = this.vfs.stat(normalizedPath);
160
- if (existing.type === "file") {
161
- existingSize = existing.size;
162
- }
163
- }
164
- const incomingSize = Buffer.isBuffer(nextContent)
165
- ? nextContent.length
166
- : Buffer.byteLength(nextContent, "utf8");
167
- const projectedUsage = currentUsage - existingSize + incomingSize;
168
- if (projectedUsage > quota) {
169
- throw new Error(`quota exceeded for '${username}': ${projectedUsage}/${quota} bytes`);
170
- }
171
- }
172
- /**
173
- * Verifies plaintext password against stored record.
174
- *
175
- * @param username User login name.
176
- * @param password Plaintext password candidate.
177
- * @returns True when credentials are valid.
178
- */
179
- verifyPassword(username, password) {
180
- perf.mark("verifyPassword");
181
- const record = this.users.get(username);
182
- if (!record) {
183
- // Perform a dummy hash to avoid timing leakage on unknown usernames
184
- this.hashPassword(password, "");
185
- return false;
186
- }
187
- const computed = this.hashPassword(password, record.salt);
188
- const expected = record.passwordHash;
189
- // timingSafeEqual prevents timing-based password oracle attacks
190
- try {
191
- const a = Buffer.from(computed, "hex");
192
- const b = Buffer.from(expected, "hex");
193
- if (a.length !== b.length)
194
- return false;
195
- return timingSafeEqual(a, b);
196
- }
197
- catch {
198
- return computed === expected;
199
- }
200
- }
201
- /**
202
- * Creates user, home directory, and sudo access entry.
203
- *
204
- * @param username New username.
205
- * @param password Initial plaintext password.
206
- */
207
- async addUser(username, password) {
208
- perf.mark("addUser");
209
- this.validateUsername(username);
210
- this.validatePassword(password);
211
- if (this.users.has(username)) {
212
- return;
213
- // throw new Error(`adduser: user '${username}' already exists`);
214
- }
215
- this.users.set(username, this.createRecord(username, password));
216
- if (this.autoSudoForNewUsers) {
217
- this.sudoers.add(username);
218
- }
219
- const homePath = `/home/${username}`;
220
- if (!this.vfs.exists(homePath)) {
221
- this.vfs.mkdir(homePath, 0o755);
222
- this.vfs.writeFile(`${homePath}/README.txt`, `Welcome to the virtual environment, ${username}`);
223
- }
224
- await this.persist();
225
- this.emit("user:add", { username });
226
- }
227
- /**
228
- * Retrieves stored password hash for a user, or null if user does not exist.
229
- *
230
- * @param username Target username.
231
- * @returns Password hash in hex encoding, or null when user is not found.
232
- */
233
- getPasswordHash(username) {
234
- perf.mark("getPasswordHash");
235
- const record = this.users.get(username);
236
- return record ? record.passwordHash : null;
237
- }
238
- /**
239
- * Updates the password for an existing user account.
240
- *
241
- * @param username Username to update.
242
- * @param password New plaintext password (must be non-empty).
243
- * @throws When the user does not exist or the password is empty.
244
- */
245
- async setPassword(username, password) {
246
- perf.mark("setPassword");
247
- this.validateUsername(username);
248
- this.validatePassword(password);
249
- if (!this.users.has(username)) {
250
- throw new Error(`passwd: user '${username}' does not exist`);
251
- }
252
- this.users.set(username, this.createRecord(username, password));
253
- await this.persist();
254
- }
255
- /**
256
- * Deletes an existing non-root user account and revokes sudo access.
257
- *
258
- * @param username Username to remove.
259
- * @throws When `username` is `"root"` or the user does not exist.
260
- */
261
- async deleteUser(username) {
262
- perf.mark("deleteUser");
263
- this.validateUsername(username);
264
- if (username === "root") {
265
- throw new Error("deluser: cannot delete root");
266
- }
267
- if (!this.users.delete(username)) {
268
- throw new Error(`deluser: user '${username}' does not exist`);
269
- }
270
- this.sudoers.delete(username);
271
- this.emit("user:delete", { username });
272
- await this.persist();
273
- }
274
- /**
275
- * Checks whether user is member of sudoers set.
276
- *
277
- * @param username Username to test.
278
- * @returns True when user can run sudo.
279
- */
280
- isSudoer(username) {
281
- perf.mark("isSudoer");
282
- return this.sudoers.has(username);
283
- }
284
- /**
285
- * Grants sudo privileges to an existing user.
286
- *
287
- * @param username Username to promote.
288
- * @throws When the user does not exist.
289
- */
290
- async addSudoer(username) {
291
- perf.mark("addSudoer");
292
- this.validateUsername(username);
293
- if (!this.users.has(username)) {
294
- throw new Error(`sudoers: user '${username}' does not exist`);
295
- }
296
- this.sudoers.add(username);
297
- await this.persist();
298
- }
299
- /**
300
- * Revokes sudo privileges from a user. Root cannot be demoted.
301
- *
302
- * @param username Username to demote.
303
- * @throws When `username` is `"root"`.
304
- */
305
- async removeSudoer(username) {
306
- perf.mark("removeSudoer");
307
- this.validateUsername(username);
308
- if (username === "root") {
309
- throw new Error("sudoers: cannot remove root");
310
- }
311
- this.sudoers.delete(username);
312
- await this.persist();
313
- }
314
- /**
315
- * Registers a new active session and allocates a virtual TTY identifier.
316
- *
317
- * Called by the SSH server when a client is authenticated. The returned
318
- * descriptor is visible in `who` output and `listActiveSessions()`.
319
- *
320
- * @param username Authenticated username bound to the session.
321
- * @param remoteAddress IP address or hostname of the connecting client.
322
- * @returns The newly created `VirtualActiveSession` descriptor.
323
- */
324
- registerSession(username, remoteAddress) {
325
- perf.mark("registerSession");
326
- const session = {
327
- id: randomUUID(),
328
- username,
329
- tty: `pts/${this.nextTty++}`,
330
- remoteAddress,
331
- startedAt: new Date().toISOString(),
332
- };
333
- this.activeSessions.set(session.id, session);
334
- this.emit("session:register", {
335
- sessionId: session.id,
336
- username,
337
- remoteAddress,
338
- });
339
- return session;
340
- }
341
- /**
342
- * Removes an active session record when the connection closes.
343
- *
344
- * Safe to call with a `null` or `undefined` session ID — it will be a no-op.
345
- *
346
- * @param sessionId Session UUID returned by `registerSession()`, or nullish.
347
- */
348
- unregisterSession(sessionId) {
349
- perf.mark("unregisterSession");
350
- if (!sessionId) {
351
- return;
352
- }
353
- const session = this.activeSessions.get(sessionId);
354
- this.activeSessions.delete(sessionId);
355
- if (session) {
356
- this.emit("session:unregister", {
357
- sessionId,
358
- username: session.username,
359
- });
360
- }
361
- this.activeSessions.delete(sessionId);
362
- }
363
- /**
364
- * Updates the username and remote address metadata for an active session.
365
- *
366
- * Called internally by `su` and `sudo` when the effective user changes
367
- * within a session. Silently ignored when the session ID is nullish or
368
- * unknown.
369
- *
370
- * @param sessionId Session UUID to update, or nullish for no-op.
371
- * @param username New effective username.
372
- * @param remoteAddress New remote address (usually unchanged).
373
- */
374
- updateSession(sessionId, username, remoteAddress) {
375
- perf.mark("updateSession");
376
- if (!sessionId) {
377
- return;
378
- }
379
- const session = this.activeSessions.get(sessionId);
380
- if (!session) {
381
- return;
382
- }
383
- this.activeSessions.set(sessionId, {
384
- ...session,
385
- username,
386
- remoteAddress,
387
- });
388
- }
389
- /**
390
- * Returns a snapshot of all currently active sessions, sorted by start time.
391
- *
392
- * Used by `who`, `ps`, `uptime`, and the `HoneyPot` auditor.
393
- *
394
- * @returns Array of `VirtualActiveSession` descriptors.
395
- */
396
- listActiveSessions() {
397
- perf.mark("listActiveSessions");
398
- return Array.from(this.activeSessions.values()).sort((left, right) => left.startedAt.localeCompare(right.startedAt));
399
- }
400
- /**
401
- * Returns a sorted list of all registered usernames.
402
- *
403
- * @returns Array of username strings sorted alphabetically.
404
- */
405
- listUsers() {
406
- return Array.from(this.users.keys()).sort();
407
- }
408
- loadFromVfs() {
409
- this.users.clear();
410
- if (!this.vfs.exists(this.usersPath)) {
411
- return;
412
- }
413
- const raw = this.vfs.readFile(this.usersPath);
414
- for (const line of raw.split("\n")) {
415
- const trimmed = line.trim();
416
- if (trimmed.length === 0) {
417
- continue;
418
- }
419
- const parts = trimmed.split(":");
420
- if (parts.length < 3) {
421
- continue;
422
- }
423
- const [username, salt, passwordHash] = parts;
424
- if (!username || !salt || !passwordHash) {
425
- continue;
426
- }
427
- this.users.set(username, { username, salt, passwordHash });
428
- }
429
- }
430
- loadSudoersFromVfs() {
431
- this.sudoers.clear();
432
- if (!this.vfs.exists(this.sudoersPath)) {
433
- return;
434
- }
435
- const raw = this.vfs.readFile(this.sudoersPath);
436
- for (const line of raw.split("\n")) {
437
- const username = line.trim();
438
- if (username.length > 0) {
439
- this.sudoers.add(username);
440
- }
441
- }
442
- }
443
- loadQuotasFromVfs() {
444
- this.quotas.clear();
445
- if (!this.vfs.exists(this.quotasPath)) {
446
- return;
447
- }
448
- const raw = this.vfs.readFile(this.quotasPath);
449
- for (const line of raw.split("\n")) {
450
- const trimmed = line.trim();
451
- if (trimmed.length === 0) {
452
- continue;
453
- }
454
- const [username, value] = trimmed.split(":");
455
- const bytes = Number.parseInt(value ?? "", 10);
456
- if (!username || !Number.isFinite(bytes) || bytes < 0) {
457
- continue;
458
- }
459
- this.quotas.set(username, bytes);
460
- }
461
- }
462
- async persist() {
463
- if (!this.vfs.exists(this.authDirPath)) {
464
- this.vfs.mkdir(this.authDirPath, 0o700);
465
- }
466
- const authContent = Array.from(this.users.values())
467
- .sort((left, right) => left.username.localeCompare(right.username))
468
- .map((record) => [record.username, record.salt, record.passwordHash].join(":"))
469
- .join("\n");
470
- const sudoersContent = Array.from(this.sudoers.values()).sort().join("\n");
471
- const quotasContent = Array.from(this.quotas.entries())
472
- .sort(([left], [right]) => left.localeCompare(right))
473
- .map(([username, maxBytes]) => `${username}:${maxBytes}`)
474
- .join("\n");
475
- let changed = false;
476
- changed =
477
- this.writeIfChanged(this.usersPath, authContent.length > 0 ? `${authContent}\n` : "", 0o600) || changed;
478
- changed =
479
- this.writeIfChanged(this.sudoersPath, sudoersContent.length > 0 ? `${sudoersContent}\n` : "", 0o600) || changed;
480
- changed =
481
- this.writeIfChanged(this.quotasPath, quotasContent.length > 0 ? `${quotasContent}\n` : "", 0o600) || changed;
482
- if (changed) {
483
- await this.vfs.flushMirror();
484
- }
485
- }
486
- writeIfChanged(targetPath, content, mode) {
487
- if (this.vfs.exists(targetPath)) {
488
- const existing = this.vfs.readFile(targetPath);
489
- if (existing === content) {
490
- this.vfs.chmod(targetPath, mode);
491
- return false;
492
- }
493
- }
494
- this.vfs.writeFile(targetPath, content, { mode });
495
- return true;
496
- }
497
- createRecord(username, password) {
498
- // Cache key is a hash of the inputs — never store plaintext password in memory
499
- const cacheKey = createHash("sha256").update(username).update(":").update(password).digest("hex");
500
- const cached = VirtualUserManager.recordCache.get(cacheKey);
501
- if (cached) {
502
- return cached;
503
- }
504
- const salt = randomBytes(16).toString("hex");
505
- const record = {
506
- username,
507
- salt,
508
- // Hash uses the generated salt — verifyPassword must use record.salt
509
- passwordHash: this.hashPassword(password, salt),
510
- };
511
- VirtualUserManager.recordCache.set(cacheKey, record);
512
- return record;
513
- }
514
- /**
515
- * Returns `true` when the user has a non-empty password set.
516
- *
517
- * A user with no password (or whose password hash matches the empty-string
518
- * hash) is allowed to authenticate without a credential check.
519
- *
520
- * @param username Target username.
521
- */
522
- hasPassword(username) {
523
- perf.mark("hasPassword");
524
- const record = this.users.get(username);
525
- if (!record)
526
- return false;
527
- // Empty password hash computed with the record's own salt
528
- const emptyHash = this.hashPassword("", record.salt);
529
- if (record.passwordHash === emptyHash)
530
- return false;
531
- return !!record.passwordHash;
532
- }
533
- /**
534
- * Hashes a plaintext password using scrypt (or SHA-256 in fast-hash mode).
535
- *
536
- * Set `SSH_MIMIC_FAST_PASSWORD_HASH=1` to switch to SHA-256 for test
537
- * environments where scrypt latency is undesirable.
538
- *
539
- * @param password Plaintext password string.
540
- * @returns Hex-encoded hash string.
541
- */
542
- /**
543
- * Hash a password with an optional salt.
544
- * When salt is provided (verify path), the same salt is used for a
545
- * deterministic hash. When omitted (create path), an empty salt is used
546
- * for backward compat — callers should pass the stored salt on verify.
547
- */
548
- hashPassword(password, salt = "") {
549
- if (VirtualUserManager.fastPasswordHash) {
550
- return createHash("sha256")
551
- .update(salt)
552
- .update(password)
553
- .digest("hex");
554
- }
555
- return scryptSync(password, salt || "", 32).toString("hex");
556
- }
557
- validateUsername(username) {
558
- if (!username || username.trim() === "") {
559
- throw new Error("invalid username");
560
- }
561
- if (!/^[a-z_][a-z0-9_-]{0,31}$/i.test(username)) {
562
- throw new Error("invalid username");
563
- }
564
- }
565
- validatePassword(password) {
566
- if (!password || password.trim() === "") {
567
- throw new Error("invalid password");
568
- }
569
- }
570
- authorizedKeys = new Map();
571
- /**
572
- * Adds an SSH public key for a user, enabling public-key authentication.
573
- *
574
- * @param username Target user.
575
- * @param algo Key algorithm (e.g. "ssh-rsa", "ssh-ed25519").
576
- * @param data Raw key data as a Buffer (the base64-decoded key bytes).
577
- */
578
- addAuthorizedKey(username, algo, data) {
579
- perf.mark("addAuthorizedKey");
580
- const keys = this.authorizedKeys.get(username) ?? [];
581
- keys.push({ algo, data });
582
- this.authorizedKeys.set(username, keys);
583
- this.emit("key:add", { username, algo });
584
- }
585
- /**
586
- * Removes all authorized keys for a user.
587
- *
588
- * @param username Target user.
589
- */
590
- removeAuthorizedKeys(username) {
591
- this.authorizedKeys.delete(username);
592
- this.emit("key:remove", { username });
593
- }
594
- /**
595
- * Returns the list of authorized keys for a user.
596
- * Returns an empty array when no keys are registered.
597
- *
598
- * @param username Target user.
599
- */
600
- getAuthorizedKeys(username) {
601
- return this.authorizedKeys.get(username) ?? [];
602
- }
603
- }
604
- function normalizeVfsPath(targetPath) {
605
- const normalized = path.posix.normalize(targetPath);
606
- return normalized.startsWith("/") ? normalized : `/${normalized}`;
607
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"adduser.d.ts","sourceRoot":"","sources":["adduser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGpE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,cAAc,EAAE,WAuF5B,CAAC"}
@@ -1,89 +0,0 @@
1
- /**
2
- * Add a new user interactively.
3
- *
4
- * Usage: `adduser <username>`
5
- *
6
- * Prompts for:
7
- * New password: ****
8
- * Retype new password: ****
9
- *
10
- * Mirrors the real `adduser` behaviour — password is never passed on the
11
- * command line. Root-only.
12
- */
13
- export const adduserCommand = {
14
- name: "adduser",
15
- description: "Add a new user",
16
- category: "users",
17
- params: ["<username>"],
18
- run: ({ authUser, shell, args }) => {
19
- if (authUser !== "root") {
20
- return { stderr: "adduser: permission denied\n", exitCode: 1 };
21
- }
22
- const username = args[0];
23
- if (!username) {
24
- return {
25
- stderr: "Usage: adduser <username>\n",
26
- exitCode: 1,
27
- };
28
- }
29
- // Reject if user already exists
30
- if (shell.users.listUsers().includes(username)) {
31
- return {
32
- stderr: `adduser: user '${username}' already exists\n`,
33
- exitCode: 1,
34
- };
35
- }
36
- let newPassword = "";
37
- let step = "new";
38
- const onPassword = async (input, sh) => {
39
- if (step === "new") {
40
- if (input.length < 1) {
41
- return {
42
- result: {
43
- stderr: "adduser: password cannot be empty\n",
44
- exitCode: 1,
45
- },
46
- };
47
- }
48
- newPassword = input;
49
- step = "retype";
50
- return { result: null, nextPrompt: "Retype new password: " };
51
- }
52
- // step === "retype"
53
- if (input !== newPassword) {
54
- return {
55
- result: {
56
- stderr: "adduser: passwords do not match — user not created\n",
57
- exitCode: 1,
58
- },
59
- };
60
- }
61
- await sh.users.addUser(username, newPassword);
62
- return {
63
- result: {
64
- stdout: `${[
65
- `Adding user '${username}' ...`,
66
- `Adding new group '${username}' (1001) ...`,
67
- `Adding new user '${username}' (1001) with group '${username}' ...`,
68
- `Creating home directory '/home/${username}' ...`,
69
- `passwd: password set for '${username}'`,
70
- `adduser: done.`,
71
- ].join("\n")}\n`,
72
- exitCode: 0,
73
- },
74
- };
75
- };
76
- return {
77
- sudoChallenge: {
78
- username,
79
- targetUser: username,
80
- commandLine: null,
81
- loginShell: false,
82
- prompt: "New password: ",
83
- mode: "passwd",
84
- onPassword,
85
- },
86
- exitCode: 0,
87
- };
88
- },
89
- };
@@ -1 +0,0 @@
1
- {"version":3,"file":"alias.d.ts","sourceRoot":"","sources":["alias.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,WAkC1B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,WAoB5B,CAAC"}