typescript-virtual-container 1.5.2 → 1.5.4

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 (364) hide show
  1. package/README.md +43 -23
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/SSHMimic/executor.js +23 -5
  4. package/dist/commands/basename.d.ts +13 -0
  5. package/dist/commands/basename.js +45 -0
  6. package/dist/commands/file.d.ts +8 -0
  7. package/dist/commands/file.js +57 -0
  8. package/dist/commands/fun.d.ts +32 -0
  9. package/dist/commands/fun.js +172 -0
  10. package/dist/commands/ifconfig.d.ts +7 -0
  11. package/dist/commands/ifconfig.js +52 -0
  12. package/dist/commands/last.d.ts +13 -0
  13. package/dist/commands/last.js +68 -0
  14. package/dist/commands/manuals-bundle.js +598 -6
  15. package/dist/commands/registry.js +24 -2
  16. package/dist/commands/runtime.js +159 -106
  17. package/dist/commands/sh.js +5 -0
  18. package/dist/commands/tput.d.ts +13 -0
  19. package/dist/commands/tput.js +76 -0
  20. package/dist/commands/w.d.ts +7 -0
  21. package/dist/commands/w.js +38 -0
  22. package/dist/utils/expand.d.ts +12 -0
  23. package/dist/utils/expand.js +84 -0
  24. package/package.json +9 -3
  25. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -50
  26. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -31
  27. package/.github/dependabot.yml +0 -27
  28. package/.github/pull_request_template.md +0 -21
  29. package/.github/workflows/create-pull-request.yml +0 -85
  30. package/.github/workflows/publish.yml +0 -25
  31. package/.github/workflows/test-battery.yml +0 -102
  32. package/.vscode/settings.json +0 -20
  33. package/CODE_OF_CONDUCT.md +0 -39
  34. package/CONTRIBUTING.md +0 -59
  35. package/HONEYPOT.md +0 -358
  36. package/SECURITY.md +0 -33
  37. package/benchmark-results.txt +0 -40
  38. package/benchmark-virtualshell.ts +0 -88
  39. package/biome.json +0 -37
  40. package/build.js +0 -22
  41. package/builds/fortune-nyx-v1.5.1-directbash-k6.1.0.mjs +0 -1768
  42. package/builds/fortune-nyx-v1.5.1-ssh-nosftp.js +0 -1768
  43. package/builds/fortune-nyx-v1.5.1-ssh.cjs +0 -1769
  44. package/builds/fortune-nyx-v1.5.1-web.min.js +0 -17022
  45. package/bun.lock +0 -244
  46. package/docs/.nojekyll +0 -1
  47. package/docs/app.js +0 -1755
  48. package/docs/assets/hierarchy.js +0 -1
  49. package/docs/assets/highlight.css +0 -162
  50. package/docs/assets/icons.js +0 -18
  51. package/docs/assets/icons.svg +0 -1
  52. package/docs/assets/main.js +0 -60
  53. package/docs/assets/navigation.js +0 -1
  54. package/docs/assets/search.js +0 -1
  55. package/docs/assets/style.css +0 -1633
  56. package/docs/classes/HoneyPot.html +0 -31
  57. package/docs/classes/IdleManager.html +0 -162
  58. package/docs/classes/SshClient.html +0 -66
  59. package/docs/classes/VirtualFileSystem.html +0 -279
  60. package/docs/classes/VirtualPackageManager.html +0 -63
  61. package/docs/classes/VirtualSftpServer.html +0 -169
  62. package/docs/classes/VirtualShell.html +0 -285
  63. package/docs/classes/VirtualSshServer.html +0 -182
  64. package/docs/classes/VirtualUserManager.html +0 -276
  65. package/docs/demo.html +0 -82
  66. package/docs/functions/assertDiff.html +0 -6
  67. package/docs/functions/diffSnapshots.html +0 -7
  68. package/docs/functions/formatDiff.html +0 -6
  69. package/docs/functions/getArg.html +0 -13
  70. package/docs/functions/getFlag.html +0 -15
  71. package/docs/functions/ifFlag.html +0 -11
  72. package/docs/hierarchy.html +0 -1
  73. package/docs/index.html +0 -1869
  74. package/docs/interfaces/AuditLogEntry.html +0 -6
  75. package/docs/interfaces/CommandContext.html +0 -22
  76. package/docs/interfaces/CommandResult.html +0 -26
  77. package/docs/interfaces/ExecStream.html +0 -11
  78. package/docs/interfaces/HoneyPotStats.html +0 -16
  79. package/docs/interfaces/IdleManagerOptions.html +0 -7
  80. package/docs/interfaces/InstalledPackage.html +0 -20
  81. package/docs/interfaces/NanoEditorSession.html +0 -8
  82. package/docs/interfaces/PackageDefinition.html +0 -30
  83. package/docs/interfaces/PackageFile.html +0 -8
  84. package/docs/interfaces/PasswordChallenge.html +0 -16
  85. package/docs/interfaces/RemoveOptions.html +0 -4
  86. package/docs/interfaces/ShellEnv.html +0 -6
  87. package/docs/interfaces/ShellModule.html +0 -14
  88. package/docs/interfaces/ShellProperties.html +0 -14
  89. package/docs/interfaces/ShellStream.html +0 -11
  90. package/docs/interfaces/SudoChallenge.html +0 -24
  91. package/docs/interfaces/VfsBaseNode.html +0 -12
  92. package/docs/interfaces/VfsDiff.html +0 -10
  93. package/docs/interfaces/VfsDiffEntry.html +0 -6
  94. package/docs/interfaces/VfsDiffModified.html +0 -10
  95. package/docs/interfaces/VfsDirectoryNode.html +0 -15
  96. package/docs/interfaces/VfsFileNode.html +0 -17
  97. package/docs/interfaces/VfsOptions.html +0 -26
  98. package/docs/interfaces/VfsSnapshot.html +0 -3
  99. package/docs/interfaces/VfsSnapshotBaseNode.html +0 -8
  100. package/docs/interfaces/VfsSnapshotDirectoryNode.html +0 -10
  101. package/docs/interfaces/VfsSnapshotFileNode.html +0 -12
  102. package/docs/interfaces/VirtualActiveSession.html +0 -12
  103. package/docs/interfaces/VirtualSftpServerOptions.html +0 -7
  104. package/docs/interfaces/VirtualShellVfsLike.html +0 -15
  105. package/docs/interfaces/VirtualShellVfsOptions.html +0 -3
  106. package/docs/interfaces/WriteFileOptions.html +0 -6
  107. package/docs/media/LICENSE +0 -21
  108. package/docs/modules.html +0 -1
  109. package/docs/types/ArgParseOptions.html +0 -4
  110. package/docs/types/CommandMode.html +0 -2
  111. package/docs/types/CommandOutcome.html +0 -2
  112. package/docs/types/IdleState.html +0 -1
  113. package/docs/types/VfsNodeStats.html +0 -2
  114. package/docs/types/VfsNodeType.html +0 -2
  115. package/docs/types/VfsPersistenceMode.html +0 -5
  116. package/docs/types/VfsSnapshotNode.html +0 -2
  117. package/examples/README.md +0 -288
  118. package/examples/app.js +0 -1755
  119. package/examples/app.ts +0 -299
  120. package/examples/build.js +0 -27
  121. package/examples/demo.html +0 -33
  122. package/examples/honeypot-audit.ts +0 -180
  123. package/examples/honeypot-export.ts +0 -253
  124. package/examples/honeypot-quickstart.ts +0 -110
  125. package/examples/index.html +0 -82
  126. package/examples/server.js +0 -55
  127. package/polyfills/buffer.js +0 -117
  128. package/polyfills/node_child_process/index.js +0 -2
  129. package/polyfills/node_crypto/index.js +0 -167
  130. package/polyfills/node_events/index.js +0 -9
  131. package/polyfills/node_fs/index.js +0 -202
  132. package/polyfills/node_fs/promises.js +0 -4
  133. package/polyfills/node_os/index.js +0 -9
  134. package/polyfills/node_path/index.js +0 -28
  135. package/polyfills/node_vm/index.js +0 -7
  136. package/polyfills/node_zlib/index.js +0 -3
  137. package/polyfills/process.js +0 -14
  138. package/polyfills/ssh2/index.js +0 -75
  139. package/scripts/build-all.mjs +0 -226
  140. package/scripts/build-names.mjs +0 -43
  141. package/scripts/generate-manuals-bundle.mjs +0 -49
  142. package/scripts/postinstall.js +0 -42
  143. package/scripts/publish-package.sh +0 -70
  144. package/src/Honeypot/index.ts +0 -457
  145. package/src/SSHClient/index.ts +0 -270
  146. package/src/SSHMimic/exec.ts +0 -49
  147. package/src/SSHMimic/executor.ts +0 -251
  148. package/src/SSHMimic/hostKey.ts +0 -21
  149. package/src/SSHMimic/index.ts +0 -337
  150. package/src/SSHMimic/loginBanner.ts +0 -36
  151. package/src/SSHMimic/loginFormat.ts +0 -10
  152. package/src/SSHMimic/prompt.ts +0 -14
  153. package/src/SSHMimic/sftp.ts +0 -883
  154. package/src/VirtualFileSystem/binaryPack.ts +0 -258
  155. package/src/VirtualFileSystem/index.ts +0 -1193
  156. package/src/VirtualFileSystem/internalTypes.ts +0 -43
  157. package/src/VirtualFileSystem/journal.ts +0 -171
  158. package/src/VirtualFileSystem/path.ts +0 -74
  159. package/src/VirtualPackageManager/index.ts +0 -1006
  160. package/src/VirtualShell/idleManager.ts +0 -137
  161. package/src/VirtualShell/index.ts +0 -475
  162. package/src/VirtualShell/shell.ts +0 -700
  163. package/src/VirtualShell/shellParser.ts +0 -285
  164. package/src/VirtualUserManager/index.ts +0 -758
  165. package/src/bun.d.ts +0 -1
  166. package/src/commands/adduser.ts +0 -103
  167. package/src/commands/alias.ts +0 -69
  168. package/src/commands/apt.ts +0 -233
  169. package/src/commands/awk.ts +0 -168
  170. package/src/commands/base64.ts +0 -29
  171. package/src/commands/cat.ts +0 -52
  172. package/src/commands/cd.ts +0 -25
  173. package/src/commands/chmod.ts +0 -85
  174. package/src/commands/clear.ts +0 -15
  175. package/src/commands/command-helpers.ts +0 -286
  176. package/src/commands/cp.ts +0 -83
  177. package/src/commands/curl.ts +0 -147
  178. package/src/commands/cut.ts +0 -36
  179. package/src/commands/date.ts +0 -30
  180. package/src/commands/declare.ts +0 -49
  181. package/src/commands/deluser.ts +0 -98
  182. package/src/commands/df.ts +0 -23
  183. package/src/commands/diff.ts +0 -43
  184. package/src/commands/dpkg.ts +0 -180
  185. package/src/commands/du.ts +0 -56
  186. package/src/commands/echo.ts +0 -58
  187. package/src/commands/env.ts +0 -23
  188. package/src/commands/exit.ts +0 -18
  189. package/src/commands/export.ts +0 -34
  190. package/src/commands/find.ts +0 -68
  191. package/src/commands/free.ts +0 -47
  192. package/src/commands/grep.ts +0 -116
  193. package/src/commands/groups.ts +0 -19
  194. package/src/commands/gzip.ts +0 -88
  195. package/src/commands/head.ts +0 -52
  196. package/src/commands/help.ts +0 -152
  197. package/src/commands/helpers.ts +0 -234
  198. package/src/commands/history.ts +0 -34
  199. package/src/commands/hostname.ts +0 -14
  200. package/src/commands/htop.ts +0 -20
  201. package/src/commands/id.ts +0 -19
  202. package/src/commands/index.ts +0 -9
  203. package/src/commands/kill.ts +0 -19
  204. package/src/commands/ln.ts +0 -71
  205. package/src/commands/ls.ts +0 -243
  206. package/src/commands/lsb-release.ts +0 -63
  207. package/src/commands/man.ts +0 -31
  208. package/src/commands/manuals/adduser.txt +0 -11
  209. package/src/commands/manuals/apt-cache.txt +0 -12
  210. package/src/commands/manuals/apt.txt +0 -20
  211. package/src/commands/manuals/awk.txt +0 -13
  212. package/src/commands/manuals/cat.txt +0 -14
  213. package/src/commands/manuals/cd.txt +0 -16
  214. package/src/commands/manuals/chmod.txt +0 -16
  215. package/src/commands/manuals/clear.txt +0 -10
  216. package/src/commands/manuals/cp.txt +0 -10
  217. package/src/commands/manuals/curl.txt +0 -20
  218. package/src/commands/manuals/date.txt +0 -14
  219. package/src/commands/manuals/declare.txt +0 -12
  220. package/src/commands/manuals/deluser.txt +0 -10
  221. package/src/commands/manuals/df.txt +0 -10
  222. package/src/commands/manuals/dpkg-query.txt +0 -11
  223. package/src/commands/manuals/dpkg.txt +0 -14
  224. package/src/commands/manuals/du.txt +0 -11
  225. package/src/commands/manuals/echo.txt +0 -11
  226. package/src/commands/manuals/false.txt +0 -10
  227. package/src/commands/manuals/find.txt +0 -11
  228. package/src/commands/manuals/free.txt +0 -12
  229. package/src/commands/manuals/grep.txt +0 -13
  230. package/src/commands/manuals/groups.txt +0 -10
  231. package/src/commands/manuals/gzip.txt +0 -11
  232. package/src/commands/manuals/head.txt +0 -10
  233. package/src/commands/manuals/help.txt +0 -11
  234. package/src/commands/manuals/history.txt +0 -11
  235. package/src/commands/manuals/hostname.txt +0 -10
  236. package/src/commands/manuals/id.txt +0 -10
  237. package/src/commands/manuals/kill.txt +0 -13
  238. package/src/commands/manuals/ls.txt +0 -20
  239. package/src/commands/manuals/lsb_release.txt +0 -14
  240. package/src/commands/manuals/mkdir.txt +0 -10
  241. package/src/commands/manuals/mv.txt +0 -10
  242. package/src/commands/manuals/nano.txt +0 -11
  243. package/src/commands/manuals/neofetch.txt +0 -10
  244. package/src/commands/manuals/node.txt +0 -13
  245. package/src/commands/manuals/npm.txt +0 -13
  246. package/src/commands/manuals/npx.txt +0 -13
  247. package/src/commands/manuals/passwd.txt +0 -11
  248. package/src/commands/manuals/ping.txt +0 -10
  249. package/src/commands/manuals/printf.txt +0 -11
  250. package/src/commands/manuals/ps.txt +0 -10
  251. package/src/commands/manuals/pwd.txt +0 -10
  252. package/src/commands/manuals/python3.txt +0 -13
  253. package/src/commands/manuals/readlink.txt +0 -10
  254. package/src/commands/manuals/return.txt +0 -10
  255. package/src/commands/manuals/rm.txt +0 -10
  256. package/src/commands/manuals/sed.txt +0 -11
  257. package/src/commands/manuals/set.txt +0 -11
  258. package/src/commands/manuals/shift.txt +0 -10
  259. package/src/commands/manuals/sleep.txt +0 -10
  260. package/src/commands/manuals/sort.txt +0 -12
  261. package/src/commands/manuals/source.txt +0 -11
  262. package/src/commands/manuals/ssh.txt +0 -11
  263. package/src/commands/manuals/stat.txt +0 -10
  264. package/src/commands/manuals/su.txt +0 -13
  265. package/src/commands/manuals/sudo.txt +0 -11
  266. package/src/commands/manuals/tail.txt +0 -10
  267. package/src/commands/manuals/tar.txt +0 -19
  268. package/src/commands/manuals/tee.txt +0 -10
  269. package/src/commands/manuals/test.txt +0 -11
  270. package/src/commands/manuals/touch.txt +0 -11
  271. package/src/commands/manuals/tr.txt +0 -10
  272. package/src/commands/manuals/trap.txt +0 -10
  273. package/src/commands/manuals/true.txt +0 -10
  274. package/src/commands/manuals/type.txt +0 -10
  275. package/src/commands/manuals/uname.txt +0 -12
  276. package/src/commands/manuals/uniq.txt +0 -12
  277. package/src/commands/manuals/unset.txt +0 -10
  278. package/src/commands/manuals/uptime.txt +0 -11
  279. package/src/commands/manuals/wc.txt +0 -12
  280. package/src/commands/manuals/wget.txt +0 -12
  281. package/src/commands/manuals/which.txt +0 -10
  282. package/src/commands/manuals/whoami.txt +0 -10
  283. package/src/commands/manuals/xargs.txt +0 -10
  284. package/src/commands/manuals-bundle.ts +0 -898
  285. package/src/commands/mkdir.ts +0 -31
  286. package/src/commands/mv.ts +0 -50
  287. package/src/commands/nano.ts +0 -38
  288. package/src/commands/neofetch.ts +0 -53
  289. package/src/commands/node.ts +0 -341
  290. package/src/commands/npm.ts +0 -132
  291. package/src/commands/passwd.ts +0 -50
  292. package/src/commands/ping.ts +0 -32
  293. package/src/commands/printf.ts +0 -129
  294. package/src/commands/ps.ts +0 -58
  295. package/src/commands/pwd.ts +0 -9
  296. package/src/commands/python.ts +0 -2229
  297. package/src/commands/read.ts +0 -46
  298. package/src/commands/registry.ts +0 -249
  299. package/src/commands/rm.ts +0 -42
  300. package/src/commands/runtime.ts +0 -378
  301. package/src/commands/sed.ts +0 -68
  302. package/src/commands/seq.ts +0 -43
  303. package/src/commands/set.ts +0 -29
  304. package/src/commands/sh.ts +0 -467
  305. package/src/commands/shift.ts +0 -63
  306. package/src/commands/sleep.ts +0 -20
  307. package/src/commands/sort.ts +0 -46
  308. package/src/commands/source.ts +0 -52
  309. package/src/commands/stat.ts +0 -61
  310. package/src/commands/su.ts +0 -72
  311. package/src/commands/sudo.ts +0 -76
  312. package/src/commands/tail.ts +0 -53
  313. package/src/commands/tar.ts +0 -102
  314. package/src/commands/tee.ts +0 -36
  315. package/src/commands/test.ts +0 -137
  316. package/src/commands/touch.ts +0 -28
  317. package/src/commands/tr.ts +0 -70
  318. package/src/commands/tree.ts +0 -20
  319. package/src/commands/true.ts +0 -27
  320. package/src/commands/type.ts +0 -48
  321. package/src/commands/uname.ts +0 -29
  322. package/src/commands/uniq.ts +0 -39
  323. package/src/commands/unset.ts +0 -17
  324. package/src/commands/uptime.ts +0 -54
  325. package/src/commands/wc.ts +0 -55
  326. package/src/commands/wget.ts +0 -148
  327. package/src/commands/which.ts +0 -37
  328. package/src/commands/who.ts +0 -25
  329. package/src/commands/whoami.ts +0 -14
  330. package/src/commands/xargs.ts +0 -31
  331. package/src/index.ts +0 -67
  332. package/src/modules/linuxRootfs.ts +0 -1961
  333. package/src/modules/neofetch.ts +0 -358
  334. package/src/modules/shellInteractive.ts +0 -57
  335. package/src/modules/shellRuntime.ts +0 -76
  336. package/src/self-standalone.ts +0 -542
  337. package/src/standalone-wo-sftp.ts +0 -38
  338. package/src/standalone.ts +0 -72
  339. package/src/types/commands.ts +0 -146
  340. package/src/types/pipeline.ts +0 -52
  341. package/src/types/streams.ts +0 -32
  342. package/src/types/tar-stream.d.ts +0 -38
  343. package/src/types/vfs.ts +0 -98
  344. package/src/utils/expand.ts +0 -491
  345. package/src/utils/perfLogger.ts +0 -72
  346. package/src/utils/tokenize.ts +0 -98
  347. package/src/utils/vfsDiff.ts +0 -275
  348. package/tests/command-helpers.test.ts +0 -116
  349. package/tests/commands-admin-net.test.ts +0 -441
  350. package/tests/commands-advanced.test.ts +0 -456
  351. package/tests/commands-core.test.ts +0 -562
  352. package/tests/commands-missing.test.ts +0 -570
  353. package/tests/commands-specific-units.test.ts +0 -327
  354. package/tests/commands-text-sys.test.ts +0 -445
  355. package/tests/expand.test.ts +0 -170
  356. package/tests/helpers.test.ts +0 -97
  357. package/tests/new-features.test.ts +0 -1036
  358. package/tests/parser-executor.test.ts +0 -37
  359. package/tests/sftp.test.ts +0 -323
  360. package/tests/ssh-exec.test.ts +0 -45
  361. package/tests/test-helper.ts +0 -79
  362. package/tests/users.test.ts +0 -86
  363. package/tsconfig.json +0 -49
  364. package/typedoc.json +0 -47
package/HONEYPOT.md DELETED
@@ -1,358 +0,0 @@
1
- # HoneyPot Implementation Guide
2
-
3
- ## Overview
4
-
5
- The `HoneyPot` class is a comprehensive auditing and event tracking utility that monitors all activity across your virtual environment. It provides real-time event logging, statistics collection, and anomaly detection.
6
-
7
- ## Installation
8
-
9
- `HoneyPot` is included in the main `typescript-virtual-container` package:
10
-
11
- ```bash
12
- npm install typescript-virtual-container
13
- ```
14
-
15
- Then import it:
16
-
17
- ```typescript
18
- import { HoneyPot } from "typescript-virtual-container";
19
- ```
20
-
21
- ## Basic Setup
22
-
23
- ### Step 1: Create Your Environment
24
-
25
- ```typescript
26
- import {
27
- VirtualSshServer,
28
- VirtualShell,
29
- HoneyPot,
30
- } from "typescript-virtual-container";
31
-
32
- // Create shell and SSH server
33
- const shell = new VirtualShell("my-environment");
34
- const ssh = new VirtualSshServer({ port: 2222, shell });
35
- await ssh.start();
36
-
37
- // Get references to key components
38
- const users = ssh.getUsers()!;
39
- const vfs = ssh.getVfs()!;
40
- ```
41
-
42
- ### Step 2: Initialize HoneyPot
43
-
44
- ```typescript
45
- // Create HoneyPot with optional log size limit
46
- const honeypot = new HoneyPot(5000); // Keep last 5000 entries
47
- ```
48
-
49
- ### Step 3: Attach to Components
50
-
51
- ```typescript
52
- // Attach HoneyPot to all components
53
- // Now all events are automatically tracked
54
- honeypot.attach(shell, vfs, users, ssh);
55
- ```
56
-
57
- ## Core Operations
58
-
59
- ### Collecting Statistics
60
-
61
- ```typescript
62
- const stats = honeypot.getStats();
63
-
64
- console.log(`Successful logins: ${stats.authSuccesses}`);
65
- console.log(`Failed logins: ${stats.authFailures}`);
66
- console.log(`Commands executed: ${stats.commands}`);
67
- console.log(`File operations: ${stats.fileWrites + stats.fileReads}`);
68
- ```
69
-
70
- ### Retrieving Audit Logs
71
-
72
- ```typescript
73
- // Get all entries
74
- const allEntries = honeypot.getAuditLog();
75
-
76
- // Filter by event type
77
- const authFailures = honeypot.getAuditLog("auth:failure");
78
-
79
- // Filter by source component
80
- const sshEvents = honeypot.getAuditLog(undefined, "SshMimic");
81
-
82
- // Combined filter
83
- const sshAuthEvents = honeypot.getAuditLog("auth:success", "SshMimic");
84
- ```
85
-
86
- ### Getting Recent Events
87
-
88
- ```typescript
89
- // Last 10 events (default)
90
- const recent10 = honeypot.getRecent();
91
-
92
- // Last 100 events
93
- const recent100 = honeypot.getRecent(100);
94
-
95
- // Process events
96
- recent100.forEach((entry) => {
97
- console.log(`[${entry.timestamp}] ${entry.source}: ${entry.type}`);
98
- console.log(` Details: ${JSON.stringify(entry.details)}`);
99
- });
100
- ```
101
-
102
- ### Detecting Anomalies
103
-
104
- ```typescript
105
- const anomalies = honeypot.detectAnomalies();
106
-
107
- anomalies.forEach((anomaly) => {
108
- console.log(`Severity: ${anomaly.severity}`);
109
- console.log(`Type: ${anomaly.type}`);
110
- console.log(`Message: ${anomaly.message}`);
111
- });
112
-
113
- // Severity levels: "low", "medium", "high"
114
- ```
115
-
116
- ## Common Patterns
117
-
118
- ### Pattern 1: Real-Time Monitoring
119
-
120
- ```typescript
121
- async function monitorAuthAttempts() {
122
- const honeypot = new HoneyPot();
123
- honeypot.attach(shell, vfs, users, ssh);
124
-
125
- // Monitor continuously
126
- setInterval(() => {
127
- const stats = honeypot.getStats();
128
-
129
- if (stats.authFailures > 10) {
130
- console.log("🚨 High number of failed auth attempts!");
131
- const failures = honeypot.getAuditLog("auth:failure");
132
- console.log(failures.map((f) => f.details.username));
133
- }
134
- }, 5000); // Check every 5 seconds
135
- }
136
- ```
137
-
138
- ### Pattern 2: Post-Execution Analysis
139
-
140
- ```typescript
141
- async function runTestAndAnalyze() {
142
- const shell = new VirtualShell("test-env");
143
- const ssh = new VirtualSshServer({ port: 2222, shell });
144
- await ssh.start();
145
-
146
- const honeypot = new HoneyPot();
147
- honeypot.attach(shell, vfs, users, ssh);
148
-
149
- // ... run your tests/operations ...
150
-
151
- // Generate report
152
- const report = {
153
- executedAt: new Date().toISOString(),
154
- statistics: honeypot.getStats(),
155
- anomalies: honeypot.detectAnomalies(),
156
- allEvents: honeypot.getAuditLog(),
157
- };
158
-
159
- return report;
160
- }
161
- ```
162
-
163
- ### Pattern 3: Security Analysis by User
164
-
165
- ```typescript
166
- function analyzeUserActivity(honeypot, username) {
167
- // Get all events related to this user
168
- const userEvents = honeypot
169
- .getAuditLog()
170
- .filter((entry) => entry.details.username === username);
171
-
172
- const analysis = {
173
- totalActions: userEvents.length,
174
- fileWrites: userEvents.filter(
175
- (e) => e.type === "file:write",
176
- ).length,
177
- failedAuthAttempts: userEvents.filter(
178
- (e) => e.type === "auth:failure",
179
- ).length,
180
- commands: userEvents.filter((e) => e.type === "command").length,
181
- timeline: userEvents.map((e) => ({
182
- time: e.timestamp,
183
- action: e.type,
184
- details: e.details,
185
- })),
186
- };
187
-
188
- return analysis;
189
- }
190
- ```
191
-
192
- ### Pattern 4: Compliance Export
193
-
194
- ```typescript
195
- function generateComplianceReport(honeypot) {
196
- const timestamp = new Date().toISOString();
197
- const stats = honeypot.getStats();
198
-
199
- return {
200
- reportDate: timestamp,
201
- auditTrail: {
202
- totalEvents: stats.authAttempts + stats.commands,
203
- authenticationEvents: {
204
- attempts: stats.authAttempts,
205
- successes: stats.authSuccesses,
206
- failures: stats.authFailures,
207
- },
208
- commandExecution: {
209
- total: stats.commands,
210
- fileOperations: stats.fileWrites + stats.fileReads,
211
- },
212
- },
213
- anomalyDetection: honeypot.detectAnomalies(),
214
- detailedLog: honeypot.getAuditLog(),
215
- };
216
- }
217
- ```
218
-
219
- ## Event Types
220
-
221
- ### Authentication Events
222
-
223
- - `auth:success` - User authenticated successfully
224
- - `auth:failure` - Authentication failed
225
-
226
- ### File System Events
227
-
228
- - `file:read` - File read operation
229
- - `file:write` - File write operation
230
- - `dir:create` - Directory created
231
-
232
- ### User Management Events
233
-
234
- - `user:add` - User account created
235
- - `user:delete` - User account deleted
236
-
237
- ### Session Events
238
-
239
- - `session:register` - Session started
240
- - `session:unregister` - Session ended
241
-
242
- ### Command Execution
243
-
244
- - `command` - Command executed
245
-
246
- ## Integration Examples
247
-
248
- ### With a Database
249
-
250
- ```typescript
251
- const honeypot = new HoneyPot();
252
- honeypot.attach(shell, vfs, users, ssh);
253
-
254
- // Later, export to database
255
- async function exportToDatabase() {
256
- const entries = honeypot.getAuditLog();
257
-
258
- for (const entry of entries) {
259
- await db.collection("audit_logs").insertOne({
260
- timestamp: entry.timestamp,
261
- type: entry.type,
262
- source: entry.source,
263
- details: entry.details,
264
- });
265
- }
266
- }
267
- ```
268
-
269
- ### With a Logging Service
270
-
271
- ```typescript
272
- const honeypot = new HoneyPot();
273
- honeypot.attach(shell, vfs, users, ssh);
274
-
275
- // Export to external logging
276
- const report = honeypot.getRecent(1000);
277
- await loggingService.send({
278
- environment: "production",
279
- auditTrail: report,
280
- timestamp: new Date().toISOString(),
281
- });
282
- ```
283
-
284
- ### With Monitoring/Alerting
285
-
286
- ```typescript
287
- const honeypot = new HoneyPot();
288
- honeypot.attach(shell, vfs, users, ssh);
289
-
290
- // Check for anomalies periodically
291
- setInterval(() => {
292
- const anomalies = honeypot.detectAnomalies();
293
-
294
- anomalies.forEach((a) => {
295
- if (a.severity === "high") {
296
- alerting.triggerAlert({
297
- type: a.type,
298
- message: a.message,
299
- timestamp: new Date().toISOString(),
300
- });
301
- }
302
- });
303
- }, 10000);
304
- ```
305
-
306
- ## Performance Considerations
307
-
308
- - HoneyPot maintains an in-memory buffer with configurable max size
309
- - Older entries are automatically trimmed when limit is reached
310
- - All operations are O(1) or O(n) where n is reasonable
311
- - Statistics computation is cached and efficient
312
- - For long-running processes, consider periodic exports and resets
313
-
314
- ## Cleanup and Reset
315
-
316
- ```typescript
317
- // Clear all logs and reset statistics
318
- honeypot.reset();
319
-
320
- // Continues to listen for new events after reset
321
- // Useful for clearing after each test phase
322
- ```
323
-
324
- ## Best Practices
325
-
326
- 1. **Initialize Early**: Attach HoneyPot right after creating components
327
- 2. **Export Regularly**: Don't rely solely on in-memory storage
328
- 3. **Monitor Continuously**: Use periodic checks for real-time monitoring
329
- 4. **Archive Audit Trails**: Save audit logs for compliance/forensics
330
- 5. **Set Appropriate Log Size**: Balance memory usage with data retention
331
- 6. **Use Filters**: Filter large logs by type or source for analysis
332
- 7. **Automate Anomaly Response**: Set up automated responses to detected anomalies
333
-
334
- ## Troubleshooting
335
-
336
- ### No events recorded?
337
-
338
- - Ensure `honeypot.attach()` is called after all components are initialized
339
- - Verify that actual operations are being performed (commands, file ops, etc.)
340
- - Check that components extend EventEmitter (they should by default)
341
-
342
- ### Memory growing?
343
-
344
- - Reduce `maxLogSize` in the constructor
345
- - Call `honeypot.reset()` between test phases
346
- - Export logs periodically to external storage
347
-
348
- ### Missing specific events?
349
-
350
- - Check the exact event name in the events list
351
- - Use `honeypot.getAuditLog()` to verify events exist
352
- - Filter by source and type to narrow down search
353
-
354
- ## See Also
355
-
356
- - [API Reference](../README.md#honeypot-auditing--event-tracking)
357
- - [Example 8: Security Auditing](../README.md#example-8-security-auditing-with-honeypot)
358
- - [Examples Directory](./README.md)
package/SECURITY.md DELETED
@@ -1,33 +0,0 @@
1
- # Security Policy
2
-
3
- ## Supported Versions
4
-
5
- Security fixes are prioritized for the latest published release.
6
-
7
- ## Reporting a Vulnerability
8
-
9
- Please report vulnerabilities privately.
10
-
11
- Preferred channel:
12
-
13
- - Open a private GitHub security advisory for this repository.
14
-
15
- If advisory tooling is unavailable, open an issue with minimal details and request private contact.
16
- Do not include exploit details or sensitive information in a public issue.
17
-
18
- ## What to Include
19
-
20
- Please include:
21
-
22
- - A clear description of the issue
23
- - Impact assessment
24
- - Reproduction steps or proof of concept
25
- - Affected versions
26
- - Suggested remediation if available
27
-
28
- ## Disclosure Process
29
-
30
- - We will acknowledge receipt as soon as possible.
31
- - We will validate, triage, and work on a fix.
32
- - We may request additional technical details.
33
- - We will publish a patch and release notes after remediation.
@@ -1,40 +0,0 @@
1
- Benchmarking VirtualShell concurrency:
2
-
3
- Running 1 shells...
4
- Initialized 1 shells in 58ms, RSS 98 MB
5
- Executed shell commands in 5ms, RSS now 98 MB (+1 MB)
6
-
7
- Running 2 shells...
8
- Initialized 2 shells in 10ms, RSS 102 MB
9
- Executed shell commands in 1ms, RSS now 102 MB (+0 MB)
10
-
11
- Running 5 shells...
12
- Initialized 5 shells in 21ms, RSS 113 MB
13
- Executed shell commands in 1ms, RSS now 113 MB (+0 MB)
14
-
15
- Running 10 shells...
16
- Initialized 10 shells in 43ms, RSS 132 MB
17
- Executed shell commands in 6ms, RSS now 132 MB (+1 MB)
18
-
19
- Running 20 shells...
20
- Initialized 20 shells in 107ms, RSS 150 MB
21
- Executed shell commands in 4ms, RSS now 150 MB (+0 MB)
22
-
23
- Running 50 shells...
24
- Initialized 50 shells in 177ms, RSS 178 MB
25
- Executed shell commands in 5ms, RSS now 179 MB (+0 MB)
26
-
27
- Running 100 shells...
28
- Initialized 100 shells in 302ms, RSS 190 MB
29
- Executed shell commands in 9ms, RSS now 190 MB (+0 MB)
30
-
31
- Summary:
32
-
33
- count init_ms cmd_ms init_rss final_rss delta_rss
34
- 1 58 5 98 MB 98 MB 1 MB
35
- 2 10 1 102 MB 102 MB 0 MB
36
- 5 21 1 113 MB 113 MB 0 MB
37
- 10 43 6 132 MB 132 MB 1 MB
38
- 20 107 4 150 MB 150 MB 0 MB
39
- 50 177 5 178 MB 179 MB 0 MB
40
- 100 302 9 190 MB 190 MB 0 MB
@@ -1,88 +0,0 @@
1
- #!/usr/bin/env bun
2
- import { VirtualShell } from "./src/index.ts";
3
-
4
- const counts = [1, 2, 5, 10, 20, 50, 100];
5
-
6
- function bytesToMb(bytes: number): string {
7
- return `${Math.round(bytes / 1024 / 1024)} MB`;
8
- }
9
-
10
- async function createShell(baseName: string, index: number): Promise<VirtualShell> {
11
- const shell = new VirtualShell(`${baseName}-${index}`, undefined, {
12
- mode: "memory",
13
- });
14
- await shell.ensureInitialized();
15
- return shell;
16
- }
17
-
18
- async function runSingleBenchmark(count: number) {
19
- const label = `shells-${count}`;
20
- const start = Date.now();
21
- const shells: VirtualShell[] = await Promise.all(
22
- Array.from({ length: count }, (_, index) => createShell(label, index)),
23
- );
24
- const initMs = Date.now() - start;
25
- const initRss = process.memoryUsage().rss;
26
-
27
- const commandStart = Date.now();
28
- await Promise.all(
29
- shells.map(async (shell, index) => {
30
- const cwd = "/home/root";
31
- shell.executeCommand(`mkdir -p /tmp/benchmark-${index}`, "root", cwd);
32
- shell.executeCommand(
33
- `echo "hello ${index}" > /tmp/benchmark-${index}/result.txt`,
34
- "root",
35
- cwd,
36
- );
37
- shell.executeCommand(
38
- `cat /tmp/benchmark-${index}/result.txt`,
39
- "root",
40
- cwd,
41
- );
42
- }),
43
- );
44
- const commandMs = Date.now() - commandStart;
45
- const finalRss = process.memoryUsage().rss;
46
-
47
- return {
48
- count,
49
- initMs,
50
- commandMs,
51
- initRss,
52
- finalRss,
53
- deltaRss: finalRss - initRss,
54
- };
55
- }
56
-
57
- async function main() {
58
-
59
- console.log("Benchmarking VirtualShell concurrency:\n");
60
- const results = [];
61
- for (const count of counts) {
62
- console.log(`Running ${count} shells...`);
63
- const result = await runSingleBenchmark(count);
64
- results.push(result);
65
- console.log(
66
- ` Initialized ${count} shells in ${result.initMs}ms, RSS ${bytesToMb(result.initRss)}`,
67
- );
68
- console.log(
69
- ` Executed shell commands in ${result.commandMs}ms, RSS now ${bytesToMb(result.finalRss)} (+${bytesToMb(result.deltaRss)})`,
70
- );
71
- console.log("");
72
- }
73
-
74
- console.log("Summary:\n");
75
- console.log(
76
- "count\tinit_ms\tcmd_ms\tinit_rss\tfinal_rss\tdelta_rss",
77
- );
78
- for (const row of results) {
79
- console.log(
80
- `${row.count}\t${row.initMs}\t${row.commandMs}\t${bytesToMb(row.initRss)}\t${bytesToMb(row.finalRss)}\t${bytesToMb(row.deltaRss)}`,
81
- );
82
- }
83
- }
84
-
85
- main().catch((error) => {
86
- console.error(error);
87
- process.exit(1);
88
- });
package/biome.json DELETED
@@ -1,37 +0,0 @@
1
- {
2
- "assist": {
3
- "actions": {
4
- "source": {
5
- "organizeImports": "off"
6
- }
7
- }
8
- },
9
- "linter": {
10
- "rules": {
11
- "suspicious": {
12
- "noDebugger": "off"
13
- },
14
- "style": {
15
- "noShoutyConstants": "warn",
16
- "useNamingConvention": "error",
17
- "noNonNullAssertion": "off"
18
- }
19
- }
20
- },
21
- "formatter": {
22
- "enabled": false,
23
- "formatWithErrors": false,
24
- "attributePosition": "auto",
25
- "indentStyle": "tab",
26
- "indentWidth": 2,
27
- "lineWidth": 80,
28
- "lineEnding": "lf"
29
- },
30
- "files": {
31
- "ignoreUnknown": true,
32
- "includes": [
33
- "**/*.ts",
34
- "**/*.tsx"
35
- ]
36
- }
37
- }
package/build.js DELETED
@@ -1,22 +0,0 @@
1
- import esbuild from 'esbuild';
2
- import { NAMES } from './scripts/build-names.mjs';
3
-
4
- await esbuild.build({
5
- entryPoints: ['src/index.ts'],
6
- bundle: true,
7
- format: 'esm',
8
- outfile: `builds/${NAMES.web}`,
9
- platform: 'browser',
10
- alias: {
11
- 'node:events': './polyfills/node_events/index.js',
12
- 'node:path': './polyfills/node_path/index.js',
13
- 'node:os': './polyfills/node_os/index.js',
14
- 'node:fs': './polyfills/node_fs/index.js',
15
- 'node:fs/promises': './polyfills/node_fs/promises.js',
16
- 'node:crypto': './polyfills/node_crypto/index.js',
17
- 'node:child_process': './polyfills/node_child_process/index.js',
18
- 'node:zlib': './polyfills/node_zlib/index.js',
19
- 'node:vm': './polyfills/node_vm/index.js',
20
- 'ssh2': './polyfills/ssh2/index.js',
21
- }, inject: ['./polyfills/process.js', './polyfills/buffer.js'],
22
- });