tunli 0.0.27 → 0.1.0

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 (388) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +158 -67
  3. package/bin/tunli +4 -5
  4. package/dist/api-client/ApiClient.d.ts +18 -0
  5. package/dist/api-client/ApiClient.d.ts.map +1 -0
  6. package/dist/api-client/ApiClient.js +100 -0
  7. package/dist/api-client/ApiClient.js.map +1 -0
  8. package/dist/api-client/types.d.ts +26 -0
  9. package/dist/api-client/types.d.ts.map +1 -0
  10. package/dist/api-client/types.js +2 -0
  11. package/dist/api-client/types.js.map +1 -0
  12. package/dist/api-client/utils.d.ts +4 -0
  13. package/dist/api-client/utils.d.ts.map +1 -0
  14. package/dist/api-client/utils.js +13 -0
  15. package/dist/api-client/utils.js.map +1 -0
  16. package/dist/cli-app/AppEventEmitter.d.ts +57 -0
  17. package/dist/cli-app/AppEventEmitter.d.ts.map +1 -0
  18. package/dist/cli-app/AppEventEmitter.js +11 -0
  19. package/dist/cli-app/AppEventEmitter.js.map +1 -0
  20. package/dist/cli-app/Dashboard.d.ts +4 -0
  21. package/dist/cli-app/Dashboard.d.ts.map +1 -0
  22. package/dist/cli-app/Dashboard.js +149 -0
  23. package/dist/cli-app/Dashboard.js.map +1 -0
  24. package/dist/cli-app/LiveLog.d.ts +4 -0
  25. package/dist/cli-app/LiveLog.d.ts.map +1 -0
  26. package/dist/cli-app/LiveLog.js +28 -0
  27. package/dist/cli-app/LiveLog.js.map +1 -0
  28. package/dist/cli-app/types.d.ts +10 -0
  29. package/dist/cli-app/types.d.ts.map +1 -0
  30. package/dist/cli-app/types.js +2 -0
  31. package/dist/cli-app/types.js.map +1 -0
  32. package/dist/cli-app/versionCheck.d.ts +4 -0
  33. package/dist/cli-app/versionCheck.d.ts.map +1 -0
  34. package/dist/cli-app/versionCheck.js +46 -0
  35. package/dist/cli-app/versionCheck.js.map +1 -0
  36. package/dist/client.d.ts +2 -0
  37. package/dist/client.d.ts.map +1 -0
  38. package/dist/client.js +75 -0
  39. package/dist/client.js.map +1 -0
  40. package/dist/commander/Argument.d.ts +19 -0
  41. package/dist/commander/Argument.d.ts.map +1 -0
  42. package/dist/commander/Argument.js +25 -0
  43. package/dist/commander/Argument.js.map +1 -0
  44. package/dist/commander/Command.d.ts +23 -0
  45. package/dist/commander/Command.d.ts.map +1 -0
  46. package/dist/commander/Command.js +159 -0
  47. package/dist/commander/Command.js.map +1 -0
  48. package/dist/commander/InvalidArgumentError.d.ts +5 -0
  49. package/dist/commander/InvalidArgumentError.d.ts.map +1 -0
  50. package/dist/commander/InvalidArgumentError.js +8 -0
  51. package/dist/commander/InvalidArgumentError.js.map +1 -0
  52. package/dist/commander/Option.d.ts +15 -0
  53. package/dist/commander/Option.d.ts.map +1 -0
  54. package/dist/commander/Option.js +43 -0
  55. package/dist/commander/Option.js.map +1 -0
  56. package/dist/commander/index.d.ts +7 -0
  57. package/dist/commander/index.d.ts.map +1 -0
  58. package/dist/commander/index.js +5 -0
  59. package/dist/commander/index.js.map +1 -0
  60. package/dist/commander/types.d.ts +2 -0
  61. package/dist/commander/types.d.ts.map +1 -0
  62. package/dist/commander/types.js +2 -0
  63. package/dist/commander/types.js.map +1 -0
  64. package/dist/commands/CommandAuth/CommandAuth.d.ts +4 -0
  65. package/dist/commands/CommandAuth/CommandAuth.d.ts.map +1 -0
  66. package/dist/commands/CommandAuth/CommandAuth.js +24 -0
  67. package/dist/commands/CommandAuth/CommandAuth.js.map +1 -0
  68. package/dist/commands/CommandConfig/CommandConfig.d.ts +4 -0
  69. package/dist/commands/CommandConfig/CommandConfig.d.ts.map +1 -0
  70. package/dist/commands/CommandConfig/CommandConfig.js +37 -0
  71. package/dist/commands/CommandConfig/CommandConfig.js.map +1 -0
  72. package/dist/commands/CommandConfig/sub-commands/configDeleteCommand.d.ts +4 -0
  73. package/dist/commands/CommandConfig/sub-commands/configDeleteCommand.d.ts.map +1 -0
  74. package/dist/commands/CommandConfig/sub-commands/configDeleteCommand.js +20 -0
  75. package/dist/commands/CommandConfig/sub-commands/configDeleteCommand.js.map +1 -0
  76. package/dist/commands/CommandConfig/sub-commands/configGetCommand.d.ts +5 -0
  77. package/dist/commands/CommandConfig/sub-commands/configGetCommand.d.ts.map +1 -0
  78. package/dist/commands/CommandConfig/sub-commands/configGetCommand.js +23 -0
  79. package/dist/commands/CommandConfig/sub-commands/configGetCommand.js.map +1 -0
  80. package/dist/commands/CommandConfig/sub-commands/configSetCommand.d.ts +4 -0
  81. package/dist/commands/CommandConfig/sub-commands/configSetCommand.d.ts.map +1 -0
  82. package/dist/commands/CommandConfig/sub-commands/configSetCommand.js +69 -0
  83. package/dist/commands/CommandConfig/sub-commands/configSetCommand.js.map +1 -0
  84. package/dist/commands/CommandConfig/types.d.ts +6 -0
  85. package/dist/commands/CommandConfig/types.d.ts.map +1 -0
  86. package/dist/commands/CommandConfig/types.js +2 -0
  87. package/dist/commands/CommandConfig/types.js.map +1 -0
  88. package/dist/commands/CommandConfig/utils/preparePrimaryOptions.d.ts +3 -0
  89. package/dist/commands/CommandConfig/utils/preparePrimaryOptions.d.ts.map +1 -0
  90. package/dist/commands/CommandConfig/utils/preparePrimaryOptions.js +8 -0
  91. package/dist/commands/CommandConfig/utils/preparePrimaryOptions.js.map +1 -0
  92. package/dist/commands/CommandConfig/utils/resolveConfig.d.ts +8 -0
  93. package/dist/commands/CommandConfig/utils/resolveConfig.d.ts.map +1 -0
  94. package/dist/commands/CommandConfig/utils/resolveConfig.js +33 -0
  95. package/dist/commands/CommandConfig/utils/resolveConfig.js.map +1 -0
  96. package/dist/commands/CommandConfig/utils/sharedOptions.d.ts +3 -0
  97. package/dist/commands/CommandConfig/utils/sharedOptions.d.ts.map +1 -0
  98. package/dist/commands/CommandConfig/utils/sharedOptions.js +14 -0
  99. package/dist/commands/CommandConfig/utils/sharedOptions.js.map +1 -0
  100. package/dist/commands/CommandDaemon/CommandDaemon.d.ts +4 -0
  101. package/dist/commands/CommandDaemon/CommandDaemon.d.ts.map +1 -0
  102. package/dist/commands/CommandDaemon/CommandDaemon.js +57 -0
  103. package/dist/commands/CommandDaemon/CommandDaemon.js.map +1 -0
  104. package/dist/commands/CommandDashboard/CommandDashboard.d.ts +4 -0
  105. package/dist/commands/CommandDashboard/CommandDashboard.d.ts.map +1 -0
  106. package/dist/commands/CommandDashboard/CommandDashboard.js +54 -0
  107. package/dist/commands/CommandDashboard/CommandDashboard.js.map +1 -0
  108. package/dist/commands/CommandHTTP/CommandHttp.d.ts +4 -0
  109. package/dist/commands/CommandHTTP/CommandHttp.d.ts.map +1 -0
  110. package/dist/commands/CommandHTTP/CommandHttp.js +50 -0
  111. package/dist/commands/CommandHTTP/CommandHttp.js.map +1 -0
  112. package/dist/commands/CommandInit/CommandInit.d.ts +4 -0
  113. package/dist/commands/CommandInit/CommandInit.d.ts.map +1 -0
  114. package/dist/commands/CommandInit/CommandInit.js +36 -0
  115. package/dist/commands/CommandInit/CommandInit.js.map +1 -0
  116. package/dist/commands/CommandList/CommandList.d.ts +4 -0
  117. package/dist/commands/CommandList/CommandList.d.ts.map +1 -0
  118. package/dist/commands/CommandList/CommandList.js +54 -0
  119. package/dist/commands/CommandList/CommandList.js.map +1 -0
  120. package/dist/commands/CommandLogs/CommandLogs.d.ts +4 -0
  121. package/dist/commands/CommandLogs/CommandLogs.d.ts.map +1 -0
  122. package/dist/commands/CommandLogs/CommandLogs.js +33 -0
  123. package/dist/commands/CommandLogs/CommandLogs.js.map +1 -0
  124. package/dist/commands/CommandProfile/CommandProfile.d.ts +5 -0
  125. package/dist/commands/CommandProfile/CommandProfile.d.ts.map +1 -0
  126. package/dist/commands/CommandProfile/CommandProfile.js +64 -0
  127. package/dist/commands/CommandProfile/CommandProfile.js.map +1 -0
  128. package/dist/commands/CommandRegister/CommandRegister.d.ts +4 -0
  129. package/dist/commands/CommandRegister/CommandRegister.d.ts.map +1 -0
  130. package/dist/commands/CommandRegister/CommandRegister.js +43 -0
  131. package/dist/commands/CommandRegister/CommandRegister.js.map +1 -0
  132. package/dist/commands/CommandRestart/CommandRestart.d.ts +4 -0
  133. package/dist/commands/CommandRestart/CommandRestart.d.ts.map +1 -0
  134. package/dist/commands/CommandRestart/CommandRestart.js +62 -0
  135. package/dist/commands/CommandRestart/CommandRestart.js.map +1 -0
  136. package/dist/commands/CommandServer/CommandServer.d.ts +4 -0
  137. package/dist/commands/CommandServer/CommandServer.d.ts.map +1 -0
  138. package/dist/commands/CommandServer/CommandServer.js +24 -0
  139. package/dist/commands/CommandServer/CommandServer.js.map +1 -0
  140. package/dist/commands/CommandStop/CommandStop.d.ts +4 -0
  141. package/dist/commands/CommandStop/CommandStop.d.ts.map +1 -0
  142. package/dist/commands/CommandStop/CommandStop.js +25 -0
  143. package/dist/commands/CommandStop/CommandStop.js.map +1 -0
  144. package/dist/commands/CommandUpdate/CommandUpdate.d.ts +4 -0
  145. package/dist/commands/CommandUpdate/CommandUpdate.d.ts.map +1 -0
  146. package/dist/commands/CommandUpdate/CommandUpdate.js +38 -0
  147. package/dist/commands/CommandUpdate/CommandUpdate.js.map +1 -0
  148. package/dist/commands/CommandUseProfile/CommandUseProfile.d.ts +4 -0
  149. package/dist/commands/CommandUseProfile/CommandUseProfile.d.ts.map +1 -0
  150. package/dist/commands/CommandUseProfile/CommandUseProfile.js +63 -0
  151. package/dist/commands/CommandUseProfile/CommandUseProfile.js.map +1 -0
  152. package/dist/commands/helper/Help.d.ts +4 -0
  153. package/dist/commands/helper/Help.d.ts.map +1 -0
  154. package/dist/commands/helper/Help.js +134 -0
  155. package/dist/commands/helper/Help.js.map +1 -0
  156. package/dist/commands/helper/Parser.d.ts +55 -0
  157. package/dist/commands/helper/Parser.d.ts.map +1 -0
  158. package/dist/commands/helper/Parser.js +280 -0
  159. package/dist/commands/helper/Parser.js.map +1 -0
  160. package/dist/commands/shared/allowDenyCidrCommand.d.ts +3 -0
  161. package/dist/commands/shared/allowDenyCidrCommand.d.ts.map +1 -0
  162. package/dist/commands/shared/allowDenyCidrCommand.js +10 -0
  163. package/dist/commands/shared/allowDenyCidrCommand.js.map +1 -0
  164. package/dist/commands/shared/configServersCommand.d.ts +4 -0
  165. package/dist/commands/shared/configServersCommand.d.ts.map +1 -0
  166. package/dist/commands/shared/configServersCommand.js +19 -0
  167. package/dist/commands/shared/configServersCommand.js.map +1 -0
  168. package/dist/commands/utils.d.ts +3 -0
  169. package/dist/commands/utils.d.ts.map +1 -0
  170. package/dist/commands/utils.js +17 -0
  171. package/dist/commands/utils.js.map +1 -0
  172. package/dist/config/ParsedConfig.d.ts +31 -0
  173. package/dist/config/ParsedConfig.d.ts.map +1 -0
  174. package/dist/config/ParsedConfig.js +116 -0
  175. package/dist/config/ParsedConfig.js.map +1 -0
  176. package/dist/config/ParsedGlobalConfig.d.ts +5 -0
  177. package/dist/config/ParsedGlobalConfig.d.ts.map +1 -0
  178. package/dist/config/ParsedGlobalConfig.js +7 -0
  179. package/dist/config/ParsedGlobalConfig.js.map +1 -0
  180. package/dist/config/ParsedLocalConfig.d.ts +5 -0
  181. package/dist/config/ParsedLocalConfig.d.ts.map +1 -0
  182. package/dist/config/ParsedLocalConfig.js +7 -0
  183. package/dist/config/ParsedLocalConfig.js.map +1 -0
  184. package/dist/config/ParsedProfileConfig.d.ts +46 -0
  185. package/dist/config/ParsedProfileConfig.d.ts.map +1 -0
  186. package/dist/config/ParsedProfileConfig.js +120 -0
  187. package/dist/config/ParsedProfileConfig.js.map +1 -0
  188. package/dist/config/ParsedServerConfig.d.ts +20 -0
  189. package/dist/config/ParsedServerConfig.d.ts.map +1 -0
  190. package/dist/config/ParsedServerConfig.js +55 -0
  191. package/dist/config/ParsedServerConfig.js.map +1 -0
  192. package/dist/config/TempProfileConfig.d.ts +8 -0
  193. package/dist/config/TempProfileConfig.d.ts.map +1 -0
  194. package/dist/config/TempProfileConfig.js +13 -0
  195. package/dist/config/TempProfileConfig.js.map +1 -0
  196. package/dist/config/utils.d.ts +2 -0
  197. package/dist/config/utils.d.ts.map +1 -0
  198. package/dist/config/utils.js +8 -0
  199. package/dist/config/utils.js.map +1 -0
  200. package/dist/config/validations/validateProfileConfig.d.ts +4 -0
  201. package/dist/config/validations/validateProfileConfig.d.ts.map +1 -0
  202. package/dist/config/validations/validateProfileConfig.js +76 -0
  203. package/dist/config/validations/validateProfileConfig.js.map +1 -0
  204. package/dist/core/FS/utils.d.ts +12 -0
  205. package/dist/core/FS/utils.d.ts.map +1 -0
  206. package/dist/core/FS/utils.js +55 -0
  207. package/dist/core/FS/utils.js.map +1 -0
  208. package/dist/daemon/DaemonClient.d.ts +16 -0
  209. package/dist/daemon/DaemonClient.d.ts.map +1 -0
  210. package/dist/daemon/DaemonClient.js +158 -0
  211. package/dist/daemon/DaemonClient.js.map +1 -0
  212. package/dist/daemon/DaemonServer.d.ts +8 -0
  213. package/dist/daemon/DaemonServer.d.ts.map +1 -0
  214. package/dist/daemon/DaemonServer.js +201 -0
  215. package/dist/daemon/DaemonServer.js.map +1 -0
  216. package/dist/daemon/protocol.d.ts +101 -0
  217. package/dist/daemon/protocol.d.ts.map +1 -0
  218. package/dist/daemon/protocol.js +2 -0
  219. package/dist/daemon/protocol.js.map +1 -0
  220. package/dist/daemon-main.d.ts +2 -0
  221. package/dist/daemon-main.d.ts.map +1 -0
  222. package/dist/daemon-main.js +13 -0
  223. package/dist/daemon-main.js.map +1 -0
  224. package/dist/launcher-main.d.ts +2 -0
  225. package/dist/launcher-main.d.ts.map +1 -0
  226. package/dist/launcher-main.js +57 -0
  227. package/dist/launcher-main.js.map +1 -0
  228. package/dist/lib/Flow/applyUpdate.d.ts +3 -0
  229. package/dist/lib/Flow/applyUpdate.d.ts.map +1 -0
  230. package/dist/lib/Flow/applyUpdate.js +34 -0
  231. package/dist/lib/Flow/applyUpdate.js.map +1 -0
  232. package/dist/lib/Flow/downloadBinaryUpdate.d.ts +3 -0
  233. package/dist/lib/Flow/downloadBinaryUpdate.d.ts.map +1 -0
  234. package/dist/lib/Flow/downloadBinaryUpdate.js +54 -0
  235. package/dist/lib/Flow/downloadBinaryUpdate.js.map +1 -0
  236. package/dist/lib/Flow/getLatestVersion.d.ts +2 -0
  237. package/dist/lib/Flow/getLatestVersion.d.ts.map +1 -0
  238. package/dist/lib/Flow/getLatestVersion.js +13 -0
  239. package/dist/lib/Flow/getLatestVersion.js.map +1 -0
  240. package/dist/lib/defs.d.ts +18 -0
  241. package/dist/lib/defs.d.ts.map +1 -0
  242. package/dist/lib/defs.js +33 -0
  243. package/dist/lib/defs.js.map +1 -0
  244. package/dist/logger/logger.d.ts +6 -0
  245. package/dist/logger/logger.d.ts.map +1 -0
  246. package/dist/logger/logger.js +34 -0
  247. package/dist/logger/logger.js.map +1 -0
  248. package/dist/output-formats/colors.d.ts +7 -0
  249. package/dist/output-formats/colors.d.ts.map +1 -0
  250. package/dist/output-formats/colors.js +8 -0
  251. package/dist/output-formats/colors.js.map +1 -0
  252. package/dist/output-formats/formatConfig.d.ts +3 -0
  253. package/dist/output-formats/formatConfig.d.ts.map +1 -0
  254. package/dist/output-formats/formatConfig.js +59 -0
  255. package/dist/output-formats/formatConfig.js.map +1 -0
  256. package/dist/output-formats/formatConfigPath.d.ts +4 -0
  257. package/dist/output-formats/formatConfigPath.d.ts.map +1 -0
  258. package/dist/output-formats/formatConfigPath.js +7 -0
  259. package/dist/output-formats/formatConfigPath.js.map +1 -0
  260. package/dist/output-formats/formatPath.d.ts +2 -0
  261. package/dist/output-formats/formatPath.d.ts.map +1 -0
  262. package/dist/output-formats/formatPath.js +6 -0
  263. package/dist/output-formats/formatPath.js.map +1 -0
  264. package/dist/output-formats/formatProfile.d.ts +3 -0
  265. package/dist/output-formats/formatProfile.d.ts.map +1 -0
  266. package/dist/output-formats/formatProfile.js +35 -0
  267. package/dist/output-formats/formatProfile.js.map +1 -0
  268. package/dist/output-formats/formatProfilesShort.d.ts +3 -0
  269. package/dist/output-formats/formatProfilesShort.d.ts.map +1 -0
  270. package/dist/output-formats/formatProfilesShort.js +19 -0
  271. package/dist/output-formats/formatProfilesShort.js.map +1 -0
  272. package/dist/output-formats/formatSaveResult.d.ts +4 -0
  273. package/dist/output-formats/formatSaveResult.d.ts.map +1 -0
  274. package/dist/output-formats/formatSaveResult.js +7 -0
  275. package/dist/output-formats/formatSaveResult.js.map +1 -0
  276. package/dist/output-formats/table.d.ts +8 -0
  277. package/dist/output-formats/table.d.ts.map +1 -0
  278. package/dist/output-formats/table.js +15 -0
  279. package/dist/output-formats/table.js.map +1 -0
  280. package/dist/package-json/packageJson.d.ts +6 -0
  281. package/dist/package-json/packageJson.d.ts.map +1 -0
  282. package/dist/package-json/packageJson.js +12 -0
  283. package/dist/package-json/packageJson.js.map +1 -0
  284. package/dist/proxy/Proxy.d.ts +6 -0
  285. package/dist/proxy/Proxy.d.ts.map +1 -0
  286. package/dist/proxy/Proxy.js +203 -0
  287. package/dist/proxy/Proxy.js.map +1 -0
  288. package/dist/sea-main.d.ts +2 -0
  289. package/dist/sea-main.d.ts.map +1 -0
  290. package/dist/sea-main.js +20 -0
  291. package/dist/sea-main.js.map +1 -0
  292. package/dist/types/types.d.ts +55 -0
  293. package/dist/types/types.d.ts.map +1 -0
  294. package/dist/types/types.js +2 -0
  295. package/dist/types/types.js.map +1 -0
  296. package/dist/utils/arrayFunctions.d.ts +24 -0
  297. package/dist/utils/arrayFunctions.d.ts.map +1 -0
  298. package/dist/utils/arrayFunctions.js +43 -0
  299. package/dist/utils/arrayFunctions.js.map +1 -0
  300. package/dist/utils/assertFunctions.d.ts +7 -0
  301. package/dist/utils/assertFunctions.d.ts.map +1 -0
  302. package/dist/utils/assertFunctions.js +20 -0
  303. package/dist/utils/assertFunctions.js.map +1 -0
  304. package/dist/utils/checkFunctions.d.ts +34 -0
  305. package/dist/utils/checkFunctions.d.ts.map +1 -0
  306. package/dist/utils/checkFunctions.js +87 -0
  307. package/dist/utils/checkFunctions.js.map +1 -0
  308. package/dist/utils/cliFunctions.d.ts +10 -0
  309. package/dist/utils/cliFunctions.d.ts.map +1 -0
  310. package/dist/utils/cliFunctions.js +68 -0
  311. package/dist/utils/cliFunctions.js.map +1 -0
  312. package/dist/utils/hashFunctions.d.ts +10 -0
  313. package/dist/utils/hashFunctions.d.ts.map +1 -0
  314. package/dist/utils/hashFunctions.js +11 -0
  315. package/dist/utils/hashFunctions.js.map +1 -0
  316. package/dist/utils/npmFunctions.d.ts +3 -0
  317. package/dist/utils/npmFunctions.d.ts.map +1 -0
  318. package/dist/utils/npmFunctions.js +28 -0
  319. package/dist/utils/npmFunctions.js.map +1 -0
  320. package/dist/utils/stringFunctions.d.ts +12 -0
  321. package/dist/utils/stringFunctions.d.ts.map +1 -0
  322. package/dist/utils/stringFunctions.js +37 -0
  323. package/dist/utils/stringFunctions.js.map +1 -0
  324. package/package.json +38 -16
  325. package/client.js +0 -33
  326. package/src/cli-app/Dashboard.js +0 -220
  327. package/src/cli-app/Screen/FullScreenModal.js +0 -63
  328. package/src/cli-app/Screen.js +0 -140
  329. package/src/cli-app/elements/ElementNode.js +0 -97
  330. package/src/cli-app/elements/Line.js +0 -21
  331. package/src/cli-app/elements/List/List.js +0 -227
  332. package/src/cli-app/elements/List/ListCell.js +0 -83
  333. package/src/cli-app/elements/List/ListColumn.js +0 -52
  334. package/src/cli-app/elements/List/ListRow.js +0 -118
  335. package/src/cli-app/elements/Row.js +0 -38
  336. package/src/cli-app/helper/utils.js +0 -42
  337. package/src/commands/Action/addDelValuesAction.js +0 -56
  338. package/src/commands/CommandAuth.js +0 -32
  339. package/src/commands/CommandClearAll.js +0 -27
  340. package/src/commands/CommandConfig.js +0 -59
  341. package/src/commands/CommandHTTP.js +0 -192
  342. package/src/commands/CommandInvite.js +0 -38
  343. package/src/commands/CommandRefresh.js +0 -35
  344. package/src/commands/CommandRegister.js +0 -48
  345. package/src/commands/Option/DeleteOption.js +0 -6
  346. package/src/commands/Option/ProfileListOption.js +0 -65
  347. package/src/commands/Option/SelectConfigOption.js +0 -52
  348. package/src/commands/SubCommand/AllowDenyCidrCommand.js +0 -28
  349. package/src/commands/SubCommand/HostCommand.js +0 -22
  350. package/src/commands/SubCommand/PortCommand.js +0 -20
  351. package/src/commands/SubCommand/ProtocolCommand.js +0 -21
  352. package/src/commands/helper/AliasResolver.js +0 -13
  353. package/src/commands/helper/BindArgs.js +0 -53
  354. package/src/commands/helper/SharedArg.js +0 -32
  355. package/src/commands/utils.js +0 -96
  356. package/src/config/ConfigAbstract.js +0 -353
  357. package/src/config/ConfigManager.js +0 -70
  358. package/src/config/GlobalConfig.js +0 -14
  359. package/src/config/GlobalLocalShardConfigAbstract.js +0 -98
  360. package/src/config/LocalConfig.js +0 -7
  361. package/src/config/PropertyConfig.js +0 -122
  362. package/src/config/SystemConfig.js +0 -31
  363. package/src/core/FS/utils.js +0 -60
  364. package/src/core/Ref.js +0 -70
  365. package/src/lib/Flow/getCurrentIp.js +0 -18
  366. package/src/lib/Flow/getLatestVersion.js +0 -13
  367. package/src/lib/Flow/proxyUrl.js +0 -35
  368. package/src/lib/Flow/validateAuthToken.js +0 -19
  369. package/src/lib/HttpClient.js +0 -61
  370. package/src/lib/Proxy.js +0 -42
  371. package/src/lib/defs.js +0 -13
  372. package/src/net/IPV4.js +0 -139
  373. package/src/net/http/IncomingMessage.js +0 -92
  374. package/src/net/http/ServerResponse.js +0 -126
  375. package/src/net/http/TunliRequest.js +0 -1
  376. package/src/net/http/TunliResponse.js +0 -1
  377. package/src/net/http/TunnelRequest.js +0 -229
  378. package/src/net/http/TunnelResponse.js +0 -119
  379. package/src/tunnel-client/TunnelClient.js +0 -144
  380. package/src/utils/arrayFunctions.js +0 -45
  381. package/src/utils/checkFunctions.js +0 -182
  382. package/src/utils/cliFunctions.js +0 -63
  383. package/src/utils/createRequest.js +0 -12
  384. package/src/utils/hashFunctions.js +0 -9
  385. package/src/utils/httpFunction.js +0 -23
  386. package/src/utils/npmFunctions.js +0 -27
  387. package/src/utils/stringFunctions.js +0 -59
  388. package/types/index.d.ts +0 -119
package/CHANGELOG.md ADDED
@@ -0,0 +1,35 @@
1
+ # Changelog
2
+
3
+ ## [0.1.0] - 2026-03-23
4
+
5
+ Initial release after full rewrite.
6
+
7
+ ### Core
8
+ - Daemon-based tunnel management via Unix socket
9
+ - HTTP & WebSocket tunneling
10
+ - Profiles & environments
11
+ - Global and local (per-project) configuration
12
+ - CIDR allow/deny access control
13
+ - Self-hosted relay server support
14
+ - React + Ink TUI dashboard
15
+
16
+ ### Distribution
17
+ - Two-binary SEA distribution: stable launcher (`tunli`) + auto-updated main binary (`tunli-main`)
18
+ - Launcher auto-downloads `tunli-main` from GitHub Releases on first run
19
+ - Separate `build-main.sh` / `build-launcher.sh` scripts; matrix release workflow for Linux and macOS
20
+
21
+ ### Updates
22
+ - `tunli update` — download and apply the latest binary release
23
+ - Dashboard Ctrl+U triggers in-place update with live progress output
24
+ - `UpdateResult` type replaces boolean callbacks: `progress` / `success` / `failed`
25
+
26
+ ### Daemon lifecycle
27
+ - `tunli daemon reload` — dump active tunnels, restart daemon, restore tunnels
28
+ - Tunnel dump & restore: active tunnels serialized to `~/.tunli/dump.json` before daemon stops; new daemon instance reads and restores them on startup
29
+ - After an update-triggered restart `tunli-main` auto-starts the daemon if a dump file is present
30
+
31
+ ### Dashboard
32
+ - Restart feedback: "Restarting…" shown immediately when Ctrl+R is pressed
33
+
34
+ ### Proxy
35
+ - Connection pool size negotiated with server via `connectInfo` response
package/README.md CHANGED
@@ -1,137 +1,228 @@
1
1
  # Tunli
2
2
 
3
- Tunli is a Node.js application that creates HTTP tunnels to make local software projects accessible over the internet.
4
- This is particularly useful for developing and testing applications that need to be reachable from anywhere.
3
+ Tunli is a developer-first tunneling tool that gives you full control use the official server at [tunli.app](https://tunli.app) or run your own with [tunli-server](https://github.com/tunlijs/tunli-server).
5
4
 
6
5
  ## Installation
7
6
 
8
- To install Tunli, run the following command:
7
+ **Binary (no Node.js required):**
8
+
9
+ ```bash
10
+ # Linux
11
+ curl -L https://github.com/tunlijs/tunli-client/releases/latest/download/tunli-linux.tar.gz | tar -xz -C /usr/local/bin
12
+
13
+ # macOS
14
+ curl -L https://github.com/tunlijs/tunli-client/releases/latest/download/tunli-macos.tar.gz | tar -xz -C /usr/local/bin
15
+ ```
16
+
17
+ Or download manually from the [releases page](https://github.com/tunlijs/tunli-client/releases).
18
+
19
+ **via npm:**
9
20
 
10
21
  ```bash
11
22
  npm install -g tunli
12
23
  ```
13
24
 
14
- ## Usage
25
+ Requires Node.js >= 22.
15
26
 
16
- Tunli can be used from the command line with various commands and options. Here are some of the key commands:
27
+ > **Note:** The CLI command interface is not yet final. Some commands and flags may be renamed or restructured in v0.2.0 for consistency. See the [Roadmap](ROADMAP.md) for planned changes.
17
28
 
18
- ### Display Help
29
+ ## Features
30
+
31
+ - Stable public URLs per profile
32
+ - HTTP & WebSocket tunneling via a background daemon
33
+ - Multiple simultaneous tunnels
34
+ - Profiles & environments
35
+ - Self-hosted relay servers
36
+ - CIDR allow/deny access control
37
+
38
+ ## Quick Start
39
+
40
+ By default the client connects to the official server — no server setup required.
19
41
 
20
42
  ```bash
21
- tunli --help
43
+ # 1. Register (once)
44
+ tunli register
45
+
46
+ # 2. Start a tunnel to your local port
47
+ tunli http 3000
48
+
49
+ # 3. Watch live output
50
+ tunli logs
22
51
  ```
23
52
 
24
- ### Configure and View Settings
53
+ `tunli http` hands the tunnel off to the background daemon and exits immediately. Use `tunli logs` or `tunli dashboard` to observe traffic.
54
+
55
+ ## Commands
56
+
57
+ ### `tunli http <port> [host]`
58
+
59
+ Start a tunnel to a local HTTP service. The daemon is started automatically if it isn't running yet.
25
60
 
26
61
  ```bash
27
- tunli config
28
- tunli config host localhost
29
- tunli config port 80
62
+ tunli http 3000
63
+ tunli http 3000 127.0.0.1
64
+ tunli http 3000 --save myapp # save as a named profile for later reuse
30
65
  ```
31
66
 
32
- ### Create HTTP Tunnel
67
+ Use `--save <name>` to persist the configuration as a profile. You can then start it again with `tunli use <profile>` or `tunli @<profile>`.
68
+
69
+ ### `tunli use <profile>`
70
+
71
+ Start a tunnel using a saved profile. Profiles are created via `tunli http --save` or managed with `tunli profile`.
33
72
 
34
73
  ```bash
35
- tunli http [PORT] [HOST]
74
+ tunli use myapp
75
+ tunli @myapp # shorthand
36
76
  ```
37
77
 
38
- Example:
78
+ ### `tunli list`
79
+
80
+ Show all active tunnels managed by the daemon.
39
81
 
40
82
  ```bash
41
- tunli http localhost:80
83
+ tunli list
42
84
  ```
43
85
 
44
- ### Registration and Authentication
86
+ ### `tunli dashboard [profile]`
45
87
 
46
- To use Tunli, you need to register and authenticate.
88
+ Attach to a running tunnel and show the live TUI dashboard. Defaults to the first active tunnel.
47
89
 
48
- #### Register
90
+ ```bash
91
+ tunli dashboard
92
+ tunli dashboard myapp
93
+ ```
94
+
95
+ ### `tunli logs [profile]`
96
+
97
+ Attach to a running tunnel and stream live log output to stdout. Defaults to the first active tunnel.
49
98
 
50
99
  ```bash
51
- tunli register
100
+ tunli logs
101
+ tunli logs myapp
52
102
  ```
53
103
 
54
- #### Authenticate
104
+ ### `tunli stop [profile]`
105
+
106
+ Stop a running tunnel without stopping the daemon. Omit the profile name to stop the first active tunnel.
55
107
 
56
108
  ```bash
57
- tunli auth <TOKEN>
109
+ tunli stop myapp
110
+ tunli stop
58
111
  ```
59
112
 
60
- ### Create an Invitation
113
+ ### `tunli daemon`
61
114
 
62
- Generate a shareable registration token:
115
+ Manage the background daemon process. The daemon is also started automatically when needed.
63
116
 
64
117
  ```bash
65
- tunli invite
118
+ tunli daemon start
119
+ tunli daemon stop
120
+ tunli daemon restart
121
+ tunli daemon reload # dump active tunnels, restart daemon, restore them
122
+ tunli daemon status
66
123
  ```
67
124
 
68
- ## Examples
125
+ ### `tunli register`
69
126
 
70
- Here are some examples of how to use Tunli:
127
+ Register a new account and store the auth token.
71
128
 
72
- - Set the host for the local configuration:
129
+ ```bash
130
+ tunli register
131
+ tunli register --force # renew existing token
132
+ tunli register --server https://api.myserver.com --name self # self-hosted server
133
+ ```
73
134
 
74
- ```bash
75
- tunli config host localhost
76
- ```
135
+ ### `tunli auth <token>`
77
136
 
78
- - Set the port for the local configuration:
137
+ Manually store an auth token (e.g. received via invitation).
79
138
 
80
- ```bash
81
- tunli config port 80
82
- ```
139
+ ```bash
140
+ tunli auth <token>
141
+ ```
83
142
 
84
- - Show the local configuration:
143
+ ### `tunli init`
85
144
 
86
- ```bash
87
- tunli config
88
- ```
145
+ Initialize a local config file in the current directory. Local configs override the global config and are useful for per-project settings.
89
146
 
90
- - Show the global configuration:
147
+ ```bash
148
+ tunli init
149
+ tunli init --force # overwrite existing local config
150
+ ```
91
151
 
92
- ```bash
93
- tunli config --global
94
- ```
152
+ ### `tunli config`
95
153
 
96
- - Forward HTTP requests to `localhost:80`:
154
+ Show or modify the active configuration.
97
155
 
98
- ```bash
99
- tunli http localhost:80
100
- ```
156
+ ```bash
157
+ tunli config # show active config
158
+ tunli config get host # read a single value
159
+ tunli config set host 127.0.0.2 # set a value
160
+ tunli config set port 3001 -p staging # set in a named profile
161
+ tunli config delete # remove the active config file
162
+ tunli config delete -p staging # remove a specific profile
163
+ tunli config dump # dump global + local config
164
+ tunli config relays # list registered relay servers
165
+ ```
101
166
 
102
- - Create a shareable registration token:
167
+ Scope flags (available on most config commands):
103
168
 
104
- ```bash
105
- tunli invite
106
- ```
169
+ ```
170
+ --global / -g use the global config (~/.tunli/config.json)
171
+ --local / -l use the local config (./.tunli/config.json)
172
+ --profile / -p target a specific profile
173
+ ```
107
174
 
108
- - Register this client with a given token:
175
+ ### `tunli profile`
109
176
 
110
- ```bash
111
- tunli auth <TOKEN>
112
- ```
177
+ Manage tunnel profiles.
113
178
 
114
- ## Dependencies
179
+ ```bash
180
+ tunli profile list
181
+ tunli profile use staging # set staging as the default profile
182
+ tunli profile delete staging # remove a profile
183
+ ```
115
184
 
116
- Tunli relies on the following packages:
185
+ ### `tunli update`
117
186
 
118
- - `axios`: ^1.7.2
119
- - `blessed`: ^0.1.81
120
- - `chalk`: ^5.3.0
121
- - `commander`: ^12.1.0
122
- - `https-proxy-agent`: ^7.0.4
123
- - `socket.io-client`: ^4.7.5
187
+ Download and apply the latest binary release.
124
188
 
125
- ## Development
189
+ ```bash
190
+ tunli update
191
+ ```
126
192
 
127
- For development purposes, you can start the application using nodemon to automatically restart it on file changes:
193
+ ### `tunli relay`
128
194
 
129
- _$ TUNLI_API_SERVER_URL=http://127.0.0.1:10000/api TUNLI_DASHBOARD=off TUNLI_SERVER=http://127.0.0.1:10000 TUNLI_PROXY_URL='http://127.0.0.1:10000/proxy/{{ uuid }}' node client.js register -f
195
+ Manage relay servers.
130
196
 
131
197
  ```bash
132
- npm run dev
198
+ tunli relay list
199
+ tunli relay use myserver # switch the active relay server
133
200
  ```
134
201
 
202
+ ## Architecture & internals
203
+
204
+ For a deeper look at the two-binary model, daemon protocol, update flow and build system see [docs/architecture.md](docs/architecture.md).
205
+
206
+ ## Architecture
207
+
208
+ Tunli runs a background daemon (`~/.tunli/daemon.sock`) that manages all active tunnels. The CLI communicates with it via a Unix socket using newline-delimited JSON.
209
+
210
+ - `tunli http` / `tunli use` — validate config, hand off to daemon, exit
211
+ - `tunli daemon` — explicit daemon lifecycle management
212
+ - `tunli list` — query active tunnels from the daemon
213
+ - `tunli dashboard` / `tunli logs` — attach to the daemon event stream
214
+
215
+ ## Configuration
216
+
217
+ Tunli stores its config in JSON files:
218
+
219
+ | Scope | Location |
220
+ |--------|--------------------------------------------------------|
221
+ | Global | `~/.tunli/config.json` |
222
+ | Local | `./.tunli/config.json` (per-project, takes precedence) |
223
+
224
+ A profile holds the target `host`, `port`, `protocol`, saved `proxyURL`, and optional CIDR allow/deny lists.
225
+
135
226
  ## License
136
227
 
137
- Tunli is licensed under the GPL-3.0 License.
228
+ GPL-3.0
package/bin/tunli CHANGED
@@ -1,11 +1,10 @@
1
1
  #!/bin/sh
2
2
  ":" //# comment; exec /usr/bin/env node --harmony "$0" "$@"
3
- import {proxyChildProcess, setCursorVisibility} from '#src/utils/cliFunctions'
3
+ import {proxyChildProcess, setCursorVisibility} from '#utils/cliFunctions'
4
4
  import {exit} from 'node:process'
5
5
  import {resolve} from "path";
6
- import {dirnameFromMeta} from "#src/core/FS/utils";
6
+ import {dirnameFromMeta} from "#core/FS/utils";
7
7
 
8
- if (process.env.TUNLI_DASHBOARD !== 'off') setCursorVisibility(false)
9
- const exitCode = await proxyChildProcess(resolve(dirnameFromMeta(import.meta), '../client.js'))
10
- if (process.env.TUNLI_DASHBOARD !== 'off') setCursorVisibility(true)
8
+ const exitCode = await proxyChildProcess(resolve(dirnameFromMeta(import.meta), '../dist/client.js'))
9
+ setCursorVisibility(true)
11
10
  exit(exitCode)
@@ -0,0 +1,18 @@
1
+ import type { ParsedGlobalConfig } from "#config/ParsedGlobalConfig";
2
+ import type { ParsedLocalConfig } from "#config/ParsedLocalConfig";
3
+ import type { ApiResult } from "#api-client/types";
4
+ import type { ProxyConfig, ServerConfig, TargetConfig } from "#types/types";
5
+ export declare class ApiClient {
6
+ #private;
7
+ constructor(globalConfig: ParsedGlobalConfig, localConfig?: ParsedLocalConfig);
8
+ withServer(serverConf: ServerConfig): ApiClient;
9
+ register(server: string): Promise<ApiResult<string>>;
10
+ registerProxy(target: TargetConfig, profileName: string): Promise<ApiResult<ProxyConfig>>;
11
+ renewProxy(target: TargetConfig, profileName: string, proxyURL: string): Promise<ApiResult<boolean>>;
12
+ connectInfo(): Promise<ApiResult<{
13
+ socketUrl: string;
14
+ capturePath: string;
15
+ connectionPoolSize: number;
16
+ }>>;
17
+ }
18
+ //# sourceMappingURL=ApiClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiClient.d.ts","sourceRoot":"","sources":["../../src/api-client/ApiClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAc,SAAS,EAAiB,MAAM,mBAAmB,CAAC;AAG9E,OAAO,KAAK,EAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAC,MAAM,cAAc,CAAC;AAM1E,qBAAa,SAAS;;gBAMR,YAAY,EAAE,kBAAkB,EAAE,WAAW,CAAC,EAAE,iBAAiB;IAK7E,UAAU,CAAC,UAAU,EAAE,YAAY;IA6D7B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAWpD,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IASzF,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IASpG,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAShH"}
@@ -0,0 +1,100 @@
1
+ import { errorResponse, successResponse } from "#api-client/utils";
2
+ import { DEFAULT_API_SERVER_URL, DEFAULT_PROFILE_NAME } from "#lib/defs";
3
+ import { sha256 } from "../utils/hashFunctions.js";
4
+ import dns from 'node:dns';
5
+ dns.setDefaultResultOrder('ipv4first');
6
+ export class ApiClient {
7
+ #globalConfig;
8
+ #localConfig;
9
+ #serverConf;
10
+ constructor(globalConfig, localConfig) {
11
+ this.#globalConfig = globalConfig;
12
+ this.#localConfig = localConfig;
13
+ }
14
+ withServer(serverConf) {
15
+ const self = new ApiClient(this.#globalConfig, this.#localConfig);
16
+ self.#serverConf = serverConf;
17
+ return self;
18
+ }
19
+ async #request(method, path, body, options) {
20
+ const serverUrl = new URL(options?.override?.server
21
+ ?? this.#serverConf?.url
22
+ ?? DEFAULT_API_SERVER_URL);
23
+ serverUrl.pathname = `/api/v2${path}`;
24
+ const authToken = this.#serverConf?.authToken ?? '';
25
+ let response;
26
+ try {
27
+ response = await fetch(String(serverUrl), {
28
+ method,
29
+ headers: {
30
+ 'User-Agent': 'tunli/1.0',
31
+ 'Content-Type': 'application/json',
32
+ 'Authorization': `Bearer ${authToken}`,
33
+ },
34
+ ...(body !== undefined ? { body: JSON.stringify(body) } : {}),
35
+ });
36
+ }
37
+ catch (e) {
38
+ const code = (e instanceof Error && e.cause?.code) || null;
39
+ const message = code === 'ECONNREFUSED' ? `Connection refused — is the server running at ${serverUrl.host}?` :
40
+ code === 'ENOTFOUND' ? `Host not found: ${serverUrl.host}` :
41
+ code === 'ETIMEDOUT' ? `Connection timed out: ${serverUrl.host}` :
42
+ e instanceof Error ? e.message :
43
+ String(e);
44
+ return { isError: true, data: undefined, error: new Error(message), status: 0 };
45
+ }
46
+ if (!response.ok) {
47
+ return {
48
+ isError: true,
49
+ data: undefined,
50
+ error: new Error(`HTTP ${response.status}: ${response.statusText}`),
51
+ status: response.status
52
+ };
53
+ }
54
+ const data = await response.json().catch(() => ({}));
55
+ return { isError: false, data, error: undefined, status: response.status };
56
+ }
57
+ async #doGet(path, options) {
58
+ return this.#request('GET', path, undefined, options);
59
+ }
60
+ async #doPost(path, body) {
61
+ return this.#request('POST', path, body);
62
+ }
63
+ async register(server) {
64
+ const response = await this.#doGet('/register', {
65
+ override: {
66
+ server
67
+ }
68
+ });
69
+ if (response.isError)
70
+ return errorResponse(response);
71
+ return successResponse(response, response.data.authToken);
72
+ }
73
+ async registerProxy(target, profileName) {
74
+ const targetHash = sha256(`${target.protocol}://${target.host}:${target.port}`);
75
+ const profileHash = profileName === DEFAULT_PROFILE_NAME ? undefined : sha256(profileName);
76
+ const response = await this.#doPost('/create-proxy', { targetHash, profileHash });
77
+ if (response.isError)
78
+ return errorResponse(response);
79
+ return successResponse(response, response.data);
80
+ }
81
+ async renewProxy(target, profileName, proxyURL) {
82
+ const targetHash = sha256(`${target.protocol}://${target.host}:${target.port}`);
83
+ const profileHash = profileName === DEFAULT_PROFILE_NAME ? undefined : sha256(profileName);
84
+ const response = await this.#doPost(`/renew-proxy/${proxyURL}`, { targetHash, profileHash });
85
+ if (response.isError)
86
+ return errorResponse(response);
87
+ return successResponse(response, response.data.success);
88
+ }
89
+ async connectInfo() {
90
+ const response = await this.#doGet('/connect-info');
91
+ if (response.isError)
92
+ return errorResponse(response);
93
+ return successResponse(response, {
94
+ socketUrl: response.data.socketUrl,
95
+ capturePath: response.data.capturePath,
96
+ connectionPoolSize: response.data.connectionPoolSize ?? 1,
97
+ });
98
+ }
99
+ }
100
+ //# sourceMappingURL=ApiClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiClient.js","sourceRoot":"","sources":["../../src/api-client/ApiClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export type ApiResponse = {
2
+ isError: true;
3
+ data: undefined;
4
+ error: Error;
5
+ status: number;
6
+ } | {
7
+ isError: false;
8
+ data: Record<string, unknown>;
9
+ error: undefined;
10
+ status: number;
11
+ };
12
+ export type ApiResult<T> = {
13
+ data: T;
14
+ error?: undefined;
15
+ response: ApiResponse;
16
+ } | {
17
+ data?: undefined;
18
+ error: Error;
19
+ response: ApiResponse;
20
+ };
21
+ export type RequestOptions = {
22
+ override?: {
23
+ server?: string;
24
+ };
25
+ };
26
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api-client/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GACnB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChE;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEvF,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACzB,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,QAAQ,EAAE,WAAW,CAAA;CACtB,GAAG;IACF,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,WAAW,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;CACF,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/api-client/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { ApiResponse, ApiResult } from "#api-client/types";
2
+ export declare const errorResponse: <T>(response: ApiResponse) => ApiResult<T>;
3
+ export declare const successResponse: <T>(response: ApiResponse, data: T) => ApiResult<T>;
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/api-client/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAE,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE9D,eAAO,MAAM,aAAa,GAAG,CAAC,EAAE,UAAU,WAAW,KAAG,SAAS,CAAC,CAAC,CAKlE,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,UAAU,WAAW,EAAE,MAAM,CAAC,KAAG,SAAS,CAAC,CAAC,CAK9E,CAAA"}
@@ -0,0 +1,13 @@
1
+ export const errorResponse = (response) => {
2
+ return {
3
+ response,
4
+ error: response.error,
5
+ };
6
+ };
7
+ export const successResponse = (response, data) => {
8
+ return {
9
+ response,
10
+ data,
11
+ };
12
+ };
13
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/api-client/utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAE,CAAI,QAAqB,EAAgB,EAAE;IACrE,OAAO;QACL,QAAQ;QACR,KAAK,EAAE,QAAQ,CAAC,KAAc;KAC/B,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAI,QAAqB,EAAE,IAAO,EAAgB,EAAE;IACjF,OAAO;QACL,QAAQ;QACR,IAAI;KACL,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,57 @@
1
+ import EventEmitter from "node:events";
2
+ import type { Socket } from "socket.io-client";
3
+ import type { IncomingHttpHeaders } from "http";
4
+ import type { ProxyConfig, TargetConfig } from "#types/types";
5
+ export type Req = {
6
+ host: string;
7
+ port: number;
8
+ method: string;
9
+ path: string;
10
+ headers: IncomingHttpHeaders;
11
+ requestId: string;
12
+ };
13
+ export type Res = {
14
+ statusMessage: string;
15
+ statusCode: number;
16
+ httpVersion: string;
17
+ headers: IncomingHttpHeaders;
18
+ };
19
+ export type ReqMeta = {
20
+ method: string;
21
+ headers: IncomingHttpHeaders;
22
+ path: string;
23
+ requestId: string;
24
+ isUpgrade: boolean;
25
+ };
26
+ export type ReqErrorMeta = {
27
+ requestId: string;
28
+ isUpgrade: boolean;
29
+ };
30
+ export type ReadyInfo = ProxyConfig & {
31
+ target: TargetConfig;
32
+ };
33
+ type AppEvents = "connect" | "disconnect" | "connect_error" | "ready" | "response" | "client-blocked" | "request" | "request-error" | "latency" | "request-count";
34
+ export declare class AppEventEmitter extends EventEmitter {
35
+ on(eventName: 'ready', listener: (info: ReadyInfo) => void): this;
36
+ on(eventName: 'request', listener: (req: ReqMeta) => void): this;
37
+ on(eventName: 'client-blocked', listener: (ip: string) => void): this;
38
+ on(eventName: 'disconnect', listener: (reason: Socket.DisconnectReason) => void): this;
39
+ on(eventName: 'response', listener: (req: Req, res: Res) => void): this;
40
+ on(eventName: 'request-error', listener: (e: Error, meta: ReqErrorMeta) => void): this;
41
+ on(eventName: 'connect_error', listener: (e: Error) => void): this;
42
+ on(eventName: 'latency', listener: (ms: number) => void): this;
43
+ on(eventName: 'request-count', listener: (count: number) => void): this;
44
+ on(eventName: AppEvents, listener: (...args: any[]) => unknown): this;
45
+ emit(eventName: 'ready', info: ReadyInfo): boolean;
46
+ emit(eventName: 'response', req: Req, res: Res): boolean;
47
+ emit(eventName: 'request', req: ReqMeta): boolean;
48
+ emit(eventName: 'connect_error', e: Error): boolean;
49
+ emit(eventName: 'connect'): boolean;
50
+ emit(eventName: 'client-blocked', ip: string): boolean;
51
+ emit(eventName: 'request-error', e: Error, meta: ReqErrorMeta): boolean;
52
+ emit(eventName: 'disconnect', reason: Socket.DisconnectReason): boolean;
53
+ emit(eventName: 'latency', ms: number): boolean;
54
+ emit(eventName: 'request-count', count: number): boolean;
55
+ }
56
+ export {};
57
+ //# sourceMappingURL=AppEventEmitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppEventEmitter.d.ts","sourceRoot":"","sources":["../../src/cli-app/AppEventEmitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import EventEmitter from "node:events";
2
+ export class AppEventEmitter extends EventEmitter {
3
+ on(eventName, listener) {
4
+ super.on(eventName, listener);
5
+ return this;
6
+ }
7
+ emit(eventName, ...args) {
8
+ return super.emit(eventName, ...args);
9
+ }
10
+ }
11
+ //# sourceMappingURL=AppEventEmitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppEventEmitter.js","sourceRoot":"","sources":["../../src/cli-app/AppEventEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAC;AA+CvC,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAY/C,EAAE,CAAC,SAAoB,EAAE,QAAqC;QAC5D,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;QAC7B,OAAO,IAAI,CAAA;IACb,CAAC;IAYD,IAAI,CAAC,SAAoB,EAAE,GAAG,IAAW;QACvC,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAA;IACvC,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import type { ProfileConfig } from '#types/types';
2
+ import type { AppEventEmitter } from '#cli-app/AppEventEmitter';
3
+ export declare const initDashboard: (config: ProfileConfig, appEventEmitter: AppEventEmitter) => void;
4
+ //# sourceMappingURL=Dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/cli-app/Dashboard.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAA;AAiN7D,eAAO,MAAM,aAAa,GAAI,QAAQ,aAAa,EAAE,iBAAiB,eAAe,SAYpF,CAAA"}