tunli 0.0.26 → 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 (387) 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 +39 -16
  325. package/client.js +0 -33
  326. package/src/cli-app/Dashboard.js +0 -211
  327. package/src/cli-app/Screen.js +0 -135
  328. package/src/cli-app/elements/ElementNode.js +0 -97
  329. package/src/cli-app/elements/Line.js +0 -21
  330. package/src/cli-app/elements/List/List.js +0 -227
  331. package/src/cli-app/elements/List/ListCell.js +0 -83
  332. package/src/cli-app/elements/List/ListColumn.js +0 -52
  333. package/src/cli-app/elements/List/ListRow.js +0 -118
  334. package/src/cli-app/elements/Row.js +0 -38
  335. package/src/cli-app/helper/utils.js +0 -42
  336. package/src/commands/Action/addDelValuesAction.js +0 -56
  337. package/src/commands/CommandAuth.js +0 -32
  338. package/src/commands/CommandClearAll.js +0 -27
  339. package/src/commands/CommandConfig.js +0 -59
  340. package/src/commands/CommandHTTP.js +0 -192
  341. package/src/commands/CommandInvite.js +0 -38
  342. package/src/commands/CommandRefresh.js +0 -35
  343. package/src/commands/CommandRegister.js +0 -48
  344. package/src/commands/Option/DeleteOption.js +0 -6
  345. package/src/commands/Option/ProfileListOption.js +0 -65
  346. package/src/commands/Option/SelectConfigOption.js +0 -52
  347. package/src/commands/SubCommand/AllowDenyCidrCommand.js +0 -28
  348. package/src/commands/SubCommand/HostCommand.js +0 -22
  349. package/src/commands/SubCommand/PortCommand.js +0 -20
  350. package/src/commands/SubCommand/ProtocolCommand.js +0 -21
  351. package/src/commands/helper/AliasResolver.js +0 -13
  352. package/src/commands/helper/BindArgs.js +0 -53
  353. package/src/commands/helper/SharedArg.js +0 -32
  354. package/src/commands/utils.js +0 -96
  355. package/src/config/ConfigAbstract.js +0 -353
  356. package/src/config/ConfigManager.js +0 -70
  357. package/src/config/GlobalConfig.js +0 -14
  358. package/src/config/GlobalLocalShardConfigAbstract.js +0 -98
  359. package/src/config/LocalConfig.js +0 -7
  360. package/src/config/PropertyConfig.js +0 -122
  361. package/src/config/SystemConfig.js +0 -31
  362. package/src/core/FS/utils.js +0 -60
  363. package/src/core/Ref.js +0 -70
  364. package/src/lib/Flow/getCurrentIp.js +0 -18
  365. package/src/lib/Flow/getLatestVersion.js +0 -13
  366. package/src/lib/Flow/proxyUrl.js +0 -35
  367. package/src/lib/Flow/validateAuthToken.js +0 -19
  368. package/src/lib/HttpClient.js +0 -61
  369. package/src/lib/Proxy.js +0 -42
  370. package/src/lib/defs.js +0 -13
  371. package/src/net/IPV4.js +0 -139
  372. package/src/net/http/IncomingMessage.js +0 -92
  373. package/src/net/http/ServerResponse.js +0 -126
  374. package/src/net/http/TunliRequest.js +0 -1
  375. package/src/net/http/TunliResponse.js +0 -1
  376. package/src/net/http/TunnelRequest.js +0 -229
  377. package/src/net/http/TunnelResponse.js +0 -119
  378. package/src/tunnel-client/TunnelClient.js +0 -144
  379. package/src/utils/arrayFunctions.js +0 -45
  380. package/src/utils/checkFunctions.js +0 -182
  381. package/src/utils/cliFunctions.js +0 -63
  382. package/src/utils/createRequest.js +0 -12
  383. package/src/utils/hashFunctions.js +0 -9
  384. package/src/utils/httpFunction.js +0 -23
  385. package/src/utils/npmFunctions.js +0 -27
  386. package/src/utils/stringFunctions.js +0 -59
  387. package/types/index.d.ts +0 -119
@@ -0,0 +1,149 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect } from 'react';
3
+ import { render, Box, Text, useInput, useApp, useStdout } from 'ink';
4
+ import chalk from 'chalk';
5
+ import QRCode from 'qrcode';
6
+ import { readPackageJson } from '#package-json/packageJson';
7
+ import { setCursorVisibility } from '#utils/cliFunctions';
8
+ import { getAvailableUpdate, performUpdate } from '#cli-app/versionCheck';
9
+ import { CHECK_FOR_UPDATES } from "#lib/defs";
10
+ const SPINNER_CHARS = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
11
+ const Spinner = ({ spinning }) => {
12
+ const [index, setIndex] = useState(0);
13
+ useEffect(() => {
14
+ if (!spinning)
15
+ return;
16
+ const id = setInterval(() => setIndex(i => (i + 1) % SPINNER_CHARS.length), 100);
17
+ return () => clearInterval(id);
18
+ }, [spinning]);
19
+ return _jsx(Text, { children: spinning ? (SPINNER_CHARS[index] ?? ' ') : ' ' });
20
+ };
21
+ const InfoRow = ({ label, value }) => (_jsxs(Box, { children: [_jsx(Box, { minWidth: 30, children: _jsx(Text, { children: label }) }), _jsx(Text, { children: value })] }));
22
+ const QRModal = ({ text, onClose }) => {
23
+ const { stdout } = useStdout();
24
+ useInput((input, key) => {
25
+ if (key.escape || input === 'q')
26
+ onClose();
27
+ });
28
+ return (_jsx(Box, { width: "100%", height: stdout.rows, flexDirection: "column", alignItems: "center", justifyContent: "center", children: _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", padding: 1, children: [_jsx(Text, { dimColor: true, children: "Press q or Escape to close" }), _jsx(Text, { children: text })] }) }));
29
+ };
30
+ const DashboardApp = ({ config, appEventEmitter }) => {
31
+ const { exit } = useApp();
32
+ const { stdout } = useStdout();
33
+ const packageJson = readPackageJson();
34
+ const [spinning, setSpinning] = useState(true);
35
+ const [connectionStatus, setConnectionStatus] = useState(chalk.yellow('offline'));
36
+ const [availableUpdate, setAvailableUpdate] = useState('');
37
+ const [latestVersion, setLatestVersion] = useState(null);
38
+ const [updatingPackage, setUpdatingPackage] = useState(false);
39
+ const [requestCount, setRequestCount] = useState(0);
40
+ const [blockedCount, setBlockedCount] = useState(0);
41
+ const [lastBlockedIp, setLastBlockedIp] = useState('');
42
+ const [accessLog, setAccessLog] = useState([]);
43
+ const [qrText, setQrText] = useState(null);
44
+ const [latency, setLatency] = useState(null);
45
+ const forwardingUrl = `${config.proxy.proxyURL} -> http://${config.target.host}:${config.target.port}/`;
46
+ useEffect(() => {
47
+ if (!CHECK_FOR_UPDATES)
48
+ return;
49
+ if (!packageJson)
50
+ return;
51
+ void getAvailableUpdate(packageJson.version).then(version => {
52
+ if (version) {
53
+ setLatestVersion(version);
54
+ setAvailableUpdate(chalk.yellow(`update available (version ${version}, Ctrl-U to update)`));
55
+ }
56
+ });
57
+ }, []);
58
+ useEffect(() => {
59
+ appEventEmitter
60
+ .on('connect', () => {
61
+ setSpinning(false);
62
+ setConnectionStatus(chalk.bold(chalk.green('online')));
63
+ })
64
+ .on('disconnect', () => {
65
+ setSpinning(true);
66
+ setConnectionStatus(chalk.bold(chalk.red('offline')));
67
+ })
68
+ .on('connect_error', (e) => {
69
+ setSpinning(true);
70
+ setConnectionStatus(`${chalk.bold(chalk.red('error'))} - ${e.message}`);
71
+ })
72
+ .on('response', (req, res) => {
73
+ let rspMsg = `${res.statusCode} ${res.statusMessage}`;
74
+ if (res.statusCode >= 500)
75
+ rspMsg = chalk.red(rspMsg);
76
+ else if (res.statusCode >= 400)
77
+ rspMsg = chalk.blueBright(rspMsg);
78
+ else
79
+ rspMsg = chalk.green(rspMsg);
80
+ rspMsg = chalk.bold(rspMsg);
81
+ setRequestCount(c => c + 1);
82
+ setAccessLog(log => [...log, {
83
+ method: req.method,
84
+ path: req.path,
85
+ status: rspMsg,
86
+ id: Date.now()
87
+ }].slice(-30));
88
+ })
89
+ .on('client-blocked', (ip) => {
90
+ setBlockedCount(c => c + 1);
91
+ setLastBlockedIp(ip);
92
+ })
93
+ .on('latency', (ms) => setLatency(ms))
94
+ .on('request-count', (count) => setRequestCount(count));
95
+ }, []);
96
+ // Ctrl+C always active (even when QR modal is open)
97
+ useInput((input, key) => {
98
+ if (key.ctrl && input === 'c') {
99
+ exit();
100
+ process.exit(0);
101
+ }
102
+ });
103
+ useInput((input, key) => {
104
+ if (key.ctrl && input === 'r') {
105
+ setAvailableUpdate(chalk.yellow('Restarting...'));
106
+ process.send?.('restart');
107
+ }
108
+ if (key.ctrl && input === 'q') {
109
+ QRCode.toString(config.proxy.proxyURL, { type: 'terminal' }, (err, url) => {
110
+ if (!err)
111
+ setQrText(url);
112
+ });
113
+ }
114
+ if (key.ctrl && input === 'u' && latestVersion && !updatingPackage && packageJson) {
115
+ setUpdatingPackage(true);
116
+ setAvailableUpdate(chalk.yellow('Updating...'));
117
+ void performUpdate(packageJson.name, (result) => {
118
+ if (result.status === 'progress') {
119
+ setAvailableUpdate(chalk.yellow(result.message));
120
+ return;
121
+ }
122
+ setUpdatingPackage(false);
123
+ if (result.status === 'success') {
124
+ setAvailableUpdate(chalk.green('Update done. Please restart tunli. (Ctrl+R to restart)'));
125
+ }
126
+ else {
127
+ setAvailableUpdate(chalk.red(`Update failed: ${result.reason}`));
128
+ }
129
+ });
130
+ }
131
+ }, { isActive: qrText === null });
132
+ const allowedCidr = config.allowedCidr.length ? config.allowedCidr : null;
133
+ const deniedCidr = config.deniedCidr.length ? config.deniedCidr : null;
134
+ if (qrText !== null) {
135
+ return _jsx(QRModal, { text: qrText, onClose: () => setQrText(null) });
136
+ }
137
+ return (_jsxs(Box, { flexDirection: "column", height: stdout.rows, children: [_jsxs(Box, { width: "100%", justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { children: "tunli " }), _jsx(Spinner, { spinning: spinning })] }), _jsx(Text, { children: "(Ctrl+C to quit)" })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(InfoRow, { label: "Tunnel", value: connectionStatus }), packageJson ? _jsx(InfoRow, { label: "Version", value: packageJson.version }) : null, availableUpdate ? _jsx(InfoRow, { label: chalk.yellow('Update'), value: availableUpdate }) : null, _jsx(InfoRow, { label: "Profile", value: config.profileName }), _jsx(InfoRow, { label: "Config", value: config.filepath }), _jsx(InfoRow, { label: "QR-Code", value: "Ctrl-Q" }), (allowedCidr ?? deniedCidr) ? _jsx(Text, { children: " " }) : null, allowedCidr ? _jsx(InfoRow, { label: "Allowed", value: allowedCidr.join(', ') }) : null, deniedCidr ? _jsx(InfoRow, { label: "Denied", value: deniedCidr.join(', ') }) : null, (allowedCidr ?? deniedCidr) ? (_jsx(InfoRow, { label: "Blocked", value: `${blockedCount}${lastBlockedIp ? ` (${lastBlockedIp})` : ''}` })) : null, _jsx(Text, { children: " " }), _jsx(InfoRow, { label: "Latency", value: latency !== null ? `${latency}ms` : '—' }), _jsx(InfoRow, { label: "Forwarding", value: forwardingUrl }), _jsx(InfoRow, { label: "Connections", value: String(requestCount) })] }), _jsx(Text, { children: " " }), _jsx(Text, { children: " " }), _jsx(Text, { children: "HTTP Requests" }), _jsx(Text, { children: '─'.repeat(stdout.columns) }), _jsx(Box, { flexDirection: "column", children: [...accessLog].reverse().map(entry => (_jsxs(Box, { children: [_jsx(Box, { minWidth: 8, children: _jsx(Text, { children: entry.method }) }), _jsx(Box, { minWidth: 30, children: _jsx(Text, { children: entry.path }) }), _jsx(Text, { children: entry.status })] }, entry.id))) })] }));
138
+ };
139
+ export const initDashboard = (config, appEventEmitter) => {
140
+ process.stdout.write('\x1b[?1049h'); // enter alternate screen buffer
141
+ setCursorVisibility(false);
142
+ const restoreScreen = () => {
143
+ process.stdout.write('\x1b[?1049l'); // leave alternate screen buffer
144
+ setCursorVisibility(true);
145
+ };
146
+ process.once('exit', restoreScreen);
147
+ render(_jsx(DashboardApp, { config: config, appEventEmitter: appEventEmitter }), { exitOnCtrlC: false });
148
+ };
149
+ //# sourceMappingURL=Dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../src/cli-app/Dashboard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ProfileConfig } from "#types/types";
2
+ import type { AppEventEmitter } from "#cli-app/AppEventEmitter";
3
+ export declare const initLiveLog: (_config: ProfileConfig, appEventEmitter: AppEventEmitter) => void;
4
+ //# sourceMappingURL=LiveLog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveLog.d.ts","sourceRoot":"","sources":["../../src/cli-app/LiveLog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAE9D,eAAO,MAAM,WAAW,GAAI,SAAS,aAAa,EAAE,iBAAiB,eAAe,SA2BnF,CAAA"}
@@ -0,0 +1,28 @@
1
+ export const initLiveLog = (_config, appEventEmitter) => {
2
+ const stdout = (msg) => process.stdout.write(`${msg}\n`);
3
+ appEventEmitter.on('response', (req, res) => {
4
+ stdout(`${req.method} ${req.path} - ${res.statusCode} ${res.statusMessage}`);
5
+ }).on('request', (req) => {
6
+ stdout(`→ ${req.method} ${req.path}`);
7
+ }).on('connect', () => {
8
+ stdout('client connected');
9
+ }).on('client-blocked', ip => {
10
+ stdout(`blocked ip ${ip}`);
11
+ }).on('disconnect', () => {
12
+ stdout('client disconnected');
13
+ }).on('connect_error', (e) => {
14
+ stdout(`connection error: ${e.message}`);
15
+ }).on('request-error', (e, meta) => {
16
+ if (meta.isUpgrade) {
17
+ stdout(`[upgrade] TCP error ${meta.requestId}: ${e.message}`);
18
+ }
19
+ else {
20
+ stdout(`[request] local error ${meta.requestId}: ${e.message}`);
21
+ }
22
+ }).on('ready', (info) => {
23
+ stdout('[auth] registered, token received');
24
+ stdout(`[tunnel] id=${info.proxyIdent}`);
25
+ stdout(`[tunnel] url=${info.proxyURL} → ${info.target.host}:${info.target.port}`);
26
+ });
27
+ };
28
+ //# sourceMappingURL=LiveLog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiveLog.js","sourceRoot":"","sources":["../../src/cli-app/LiveLog.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAsB,EAAE,eAAgC,EAAE,EAAE;IAEtF,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;IAEhE,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC1C,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;QACvB,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IACvC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACpB,MAAM,CAAC,kBAAkB,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,EAAE;QAC3B,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;QACvB,MAAM,CAAC,qBAAqB,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;QAC3B,MAAM,CAAC,qBAAqB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;QACjC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,CAAC,uBAAuB,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QAC/D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,yBAAyB,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QACjE,CAAC;IACH,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACtB,MAAM,CAAC,mCAAmC,CAAC,CAAA;QAC3C,MAAM,CAAC,eAAe,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;QACxC,MAAM,CAAC,gBAAgB,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IACnF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ export type UpdateResult = {
2
+ status: 'progress';
3
+ message: string;
4
+ } | {
5
+ status: 'success';
6
+ } | {
7
+ status: 'failed';
8
+ reason: string;
9
+ };
10
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli-app/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cli-app/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { UpdateResult } from "./types.js";
2
+ export declare const getAvailableUpdate: (currentVersion: string) => Promise<string | null>;
3
+ export declare const performUpdate: (packageName: string, onComplete: (result: UpdateResult) => void) => Promise<void>;
4
+ //# sourceMappingURL=versionCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versionCheck.d.ts","sourceRoot":"","sources":["../../src/cli-app/versionCheck.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,YAAY,CAAC;AAE7C,eAAO,MAAM,kBAAkB,GAAU,gBAAgB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAItF,CAAA;AAED,eAAO,MAAM,aAAa,GAAU,aAAa,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,KAAG,OAAO,CAAC,IAAI,CAgCjH,CAAA"}
@@ -0,0 +1,46 @@
1
+ import { getLatestVersion } from '#lib/Flow/getLatestVersion';
2
+ import { checkGlobalInstallation, checkLocalInstallation } from '#utils/npmFunctions';
3
+ import { downloadBinaryUpdate } from '#lib/Flow/downloadBinaryUpdate';
4
+ import { exec } from 'node:child_process';
5
+ import { isSea } from 'node:sea';
6
+ export const getAvailableUpdate = async (currentVersion) => {
7
+ const version = await getLatestVersion().catch(() => null);
8
+ if (!version || version === currentVersion)
9
+ return null;
10
+ return version;
11
+ };
12
+ export const performUpdate = async (packageName, onComplete) => {
13
+ if (isSea()) {
14
+ await downloadBinaryUpdate(onComplete);
15
+ return;
16
+ }
17
+ try {
18
+ const isGlobal = await checkGlobalInstallation(packageName);
19
+ let modifier = '';
20
+ if (isGlobal) {
21
+ modifier = ' -g';
22
+ }
23
+ else if (!await checkLocalInstallation(packageName)) {
24
+ onComplete({ status: 'failed', reason: 'Not installed via npm' });
25
+ return;
26
+ }
27
+ const cmd = `npm${modifier} update ${packageName} --registry https://registry.npmjs.org`;
28
+ onComplete({ status: 'progress', message: 'Updating via npm...' });
29
+ await new Promise((resolve) => {
30
+ exec(cmd, (error, _stdout, stderr) => {
31
+ if (error || stderr) {
32
+ const reason = error?.message ?? stderr;
33
+ onComplete({ status: 'failed', reason: `npm update failed: ${reason}`.trimEnd() });
34
+ }
35
+ else {
36
+ onComplete({ status: 'success' });
37
+ }
38
+ resolve();
39
+ });
40
+ });
41
+ }
42
+ catch (e) {
43
+ onComplete({ status: 'failed', reason: e instanceof Error ? e.message : String(e) });
44
+ }
45
+ };
46
+ //# sourceMappingURL=versionCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versionCheck.js","sourceRoot":"","sources":["../../src/cli-app/versionCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAC,uBAAuB,EAAE,sBAAsB,EAAC,MAAM,qBAAqB,CAAA;AACnF,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAA;AACnE,OAAO,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAC,KAAK,EAAC,MAAM,UAAU,CAAA;AAG9B,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,cAAsB,EAA0B,EAAE;IACzF,MAAM,OAAO,GAAG,MAAM,gBAAgB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAC1D,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,cAAc;QAAE,OAAO,IAAI,CAAA;IACvD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,WAAmB,EAAE,UAA0C,EAAiB,EAAE;IACpH,IAAI,KAAK,EAAE,EAAE,CAAC;QACZ,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAA;QACtC,OAAM;IACR,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAA;QAC3D,IAAI,QAAQ,GAAG,EAAE,CAAA;QACjB,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,GAAG,KAAK,CAAA;QAClB,CAAC;aAAM,IAAI,CAAC,MAAM,sBAAsB,CAAC,WAAW,CAAC,EAAE,CAAC;YACtD,UAAU,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,uBAAuB,EAAC,CAAC,CAAA;YAC/D,OAAM;QACR,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,QAAQ,WAAW,WAAW,wCAAwC,CAAA;QACxF,UAAU,CAAC,EAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,qBAAqB,EAAC,CAAC,CAAA;QAChE,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;gBACnC,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;oBACpB,MAAM,MAAM,GAAG,KAAK,EAAE,OAAO,IAAI,MAAM,CAAA;oBACvC,UAAU,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,sBAAsB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAC,CAAC,CAAA;gBAClF,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,EAAC,MAAM,EAAE,SAAS,EAAC,CAAC,CAAA;gBACjC,CAAC;gBACD,OAAO,EAAE,CAAA;YACX,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,UAAU,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,CAAC,CAAA;IACpF,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":""}
package/dist/client.js ADDED
@@ -0,0 +1,75 @@
1
+ import { readJsonFile } from "#core/FS/utils";
2
+ import { Option, program } from '#commander/index';
3
+ import { FOUND_LOCAL_CONFIG_FILEPATH, GLOBAL_CONFIG_FILEPATH, LOCAL_CONFIG_FILEPATH } from "#lib/defs";
4
+ import { createCommandConfig } from "#commands/CommandConfig/CommandConfig";
5
+ import { createCommandHttp } from "#commands/CommandHTTP/CommandHttp";
6
+ import { createCommandStartProfile } from "#commands/CommandUseProfile/CommandUseProfile";
7
+ import { createCommandRegister } from "#commands/CommandRegister/CommandRegister";
8
+ import { createLocalConfig } from "#config/utils";
9
+ import { createCommandAuth } from "#commands/CommandAuth/CommandAuth";
10
+ import { createCommandInit } from "#commands/CommandInit/CommandInit";
11
+ import { createCommandServer } from "#commands/CommandServer/CommandServer";
12
+ import { ParsedGlobalConfig } from "#config/ParsedGlobalConfig";
13
+ import { ParsedLocalConfig } from "#config/ParsedLocalConfig";
14
+ import { createCommandProfile } from "#commands/CommandProfile/CommandProfile";
15
+ import { createCommandDaemon } from "#commands/CommandDaemon/CommandDaemon";
16
+ import { createCommandList } from "#commands/CommandList/CommandList";
17
+ import { createCommandDashboard } from "#commands/CommandDashboard/CommandDashboard";
18
+ import { createCommandLogs } from "#commands/CommandLogs/CommandLogs";
19
+ import { createCommandStop } from "#commands/CommandStop/CommandStop";
20
+ import { createCommandRestart } from "#commands/CommandRestart/CommandRestart";
21
+ import { createCommandUpdate } from "#commands/CommandUpdate/CommandUpdate";
22
+ import { ApiClient } from "#api-client/ApiClient";
23
+ import { readPackageJson } from "#package-json/packageJson";
24
+ const globalConf = new ParsedGlobalConfig(readJsonFile(GLOBAL_CONFIG_FILEPATH), GLOBAL_CONFIG_FILEPATH);
25
+ const localConf = FOUND_LOCAL_CONFIG_FILEPATH ? new ParsedLocalConfig(readJsonFile(FOUND_LOCAL_CONFIG_FILEPATH), FOUND_LOCAL_CONFIG_FILEPATH) : undefined;
26
+ const packageJson = readPackageJson();
27
+ const ctx = {
28
+ config: {
29
+ global: globalConf,
30
+ local: localConf,
31
+ createLocalConfig: () => createLocalConfig(LOCAL_CONFIG_FILEPATH)
32
+ },
33
+ exit(code) {
34
+ process.exit(code ?? 0);
35
+ },
36
+ apiClient: new ApiClient(globalConf, localConf),
37
+ logger: {
38
+ info: console.info,
39
+ error: console.error,
40
+ warn: console.warn,
41
+ }
42
+ };
43
+ program
44
+ .name('tunli')
45
+ .description('HTTP tunnel client')
46
+ .addOption(new Option('version').short('v'));
47
+ program.addCommand(createCommandInit(ctx, program));
48
+ program.addCommand(createCommandConfig(ctx, program));
49
+ program.addCommand(createCommandHttp(ctx, program), { isDefault: true });
50
+ program.addCommand(createCommandRegister(ctx, program));
51
+ // program.addCommand(createCommandRefresh(program)) TBD
52
+ // program.addCommand(createCommandInvite(program)) TBD
53
+ program.addCommand(createCommandAuth(ctx, program));
54
+ program.addCommand(createCommandStartProfile(ctx, program));
55
+ program.addCommand(createCommandServer(ctx, program));
56
+ program.addCommand(createCommandProfile(ctx, program));
57
+ program.addCommand(createCommandDaemon(ctx, program));
58
+ program.addCommand(createCommandList(ctx, program));
59
+ program.addCommand(createCommandDashboard(ctx, program));
60
+ program.addCommand(createCommandLogs(ctx, program));
61
+ program.addCommand(createCommandStop(ctx, program));
62
+ program.addCommand(createCommandRestart(ctx, program));
63
+ program.addCommand(createCommandUpdate(ctx, program));
64
+ program.action(({ options }) => {
65
+ if (options.version) {
66
+ ctx.logger.info(`tunli: ${packageJson?.version}`);
67
+ ctx.exit(0);
68
+ }
69
+ else {
70
+ ctx.logger.error('Error: Command "tunli": missing required argument, option or subcommand');
71
+ ctx.exit(1);
72
+ }
73
+ });
74
+ await program.parseAsync(process.argv);
75
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export type ParseFn = (value: string, previous?: unknown) => unknown;
2
+ export interface ArgSpec {
3
+ name: string;
4
+ required: boolean;
5
+ many: boolean;
6
+ description?: string | undefined;
7
+ parse?: ParseFn | undefined;
8
+ defaultValue?: unknown;
9
+ }
10
+ export declare class Argument {
11
+ #private;
12
+ constructor(name: string, description?: string);
13
+ required(): this;
14
+ many(): this;
15
+ default(value: unknown): this;
16
+ parse(fn: (value: string, previous?: unknown) => unknown): this;
17
+ get spec(): ArgSpec;
18
+ }
19
+ //# sourceMappingURL=Argument.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Argument.d.ts","sourceRoot":"","sources":["../../src/commander/Argument.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;AAEpE,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,OAAO,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,qBAAa,QAAQ;;gBAGP,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IAI9C,QAAQ,IAAI,IAAI;IAKhB,IAAI,IAAI,IAAI;IAKZ,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAK7B,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,GAAG,IAAI;IAM/D,IAAI,IAAI,YAAwB;CACjC"}
@@ -0,0 +1,25 @@
1
+ export class Argument {
2
+ #spec;
3
+ constructor(name, description) {
4
+ this.#spec = { name, required: false, many: false, ...(description !== undefined && { description }) };
5
+ }
6
+ required() {
7
+ this.#spec.required = true;
8
+ return this;
9
+ }
10
+ many() {
11
+ this.#spec.many = true;
12
+ return this;
13
+ }
14
+ default(value) {
15
+ this.#spec.defaultValue = value;
16
+ return this;
17
+ }
18
+ parse(fn) {
19
+ this.#spec.parse = fn;
20
+ return this;
21
+ }
22
+ // ─── Package-internal ──────────────────────────────────────────────────────
23
+ get spec() { return this.#spec; }
24
+ }
25
+ //# sourceMappingURL=Argument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Argument.js","sourceRoot":"","sources":["../../src/commander/Argument.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,QAAQ;IACV,KAAK,CAAS;IAEvB,YAAY,IAAY,EAAE,WAAoB;QAC5C,IAAI,CAAC,KAAK,GAAG,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAC,WAAW,EAAC,CAAC,EAAC,CAAA;IACpG,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA;QAC1B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI;QACF,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CAAC,KAAc;QACpB,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAA;QAC/B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,EAAkD;QACtD,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAa,CAAA;QAChC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,8EAA8E;IAC9E,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAA,CAAC,CAAC;CACjC"}
@@ -0,0 +1,23 @@
1
+ import { type ParseResult, type RequiresInput } from '#commands/helper/Parser';
2
+ import { Option } from './Option.js';
3
+ import { Argument } from './Argument.js';
4
+ export declare class Command {
5
+ #private;
6
+ constructor(name?: string);
7
+ name(n: string): this;
8
+ description(d: string): this;
9
+ requires(fn: (matched: RequiresInput) => Partial<RequiresInput>): this;
10
+ alias(a: string): this;
11
+ addOption(opt: Option): this;
12
+ addArgument(arg: Argument): this;
13
+ addCommand(cmd: Command, options?: {
14
+ isDefault?: boolean;
15
+ }): this;
16
+ action<TArgs = Record<string, unknown>, TOpts = Record<string, unknown>>(fn: (result: ParseResult<TArgs, TOpts>) => void | Promise<void>): this;
17
+ addExample(example: string, description?: string): this;
18
+ extendUsage(): this;
19
+ opts<T = Record<string, unknown>>(): T;
20
+ parseAsync(argv: string[]): Promise<void>;
21
+ }
22
+ export declare const program: Command;
23
+ //# sourceMappingURL=Command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../src/commander/Command.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAClC,OAAO,EAAe,QAAQ,EAAe,MAAM,eAAe,CAAA;AAMlE,qBAAa,OAAO;;gBAgBN,IAAI,SAAK;IAIrB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKrB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAK5B,QAAQ,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAKtE,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKtB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAkB5B,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAKhC,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAOjE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrE,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAC9D,IAAI;IAKP,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAKvD,WAAW,IAAI,IAAI;IAKnB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC;IAqDhC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CA4BhD;AAED,eAAO,MAAM,OAAO,SAAgB,CAAA"}
@@ -0,0 +1,159 @@
1
+ import { parse, ParseError } from '#commands/helper/Parser';
2
+ import { findCommand, formatHelp } from '#commands/helper/Help';
3
+ import { Option } from './Option.js';
4
+ import { Argument } from './Argument.js';
5
+ import { logException } from "#logger/logger";
6
+ const toCamelCase = (str) => str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
7
+ export class Command {
8
+ #name;
9
+ #description;
10
+ #requires;
11
+ #aliases = [];
12
+ #argSpecs = [];
13
+ #directOpts = [];
14
+ #children = new Map();
15
+ #defaultChild;
16
+ #action;
17
+ #examples = [];
18
+ #extendUsage = false;
19
+ // Populated before action is called so opts() works inside argument validators
20
+ #parsedOpts = {};
21
+ constructor(name = '') {
22
+ this.#name = name;
23
+ }
24
+ name(n) {
25
+ this.#name = n;
26
+ return this;
27
+ }
28
+ description(d) {
29
+ this.#description = d;
30
+ return this;
31
+ }
32
+ requires(fn) {
33
+ this.#requires = fn;
34
+ return this;
35
+ }
36
+ alias(a) {
37
+ this.#aliases.push(a);
38
+ return this;
39
+ }
40
+ addOption(opt) {
41
+ this.#directOpts.push(opt.def);
42
+ for (const aliasName of opt.aliases) {
43
+ this.#directOpts.push({
44
+ type: 'option',
45
+ name: aliasName,
46
+ key: opt.def.key ?? toCamelCase(opt.def.name),
47
+ ...(opt.def.argument !== undefined && { argument: opt.def.argument }),
48
+ ...(opt.def.many && { many: true }),
49
+ ...(opt.def.parse !== undefined && { parse: opt.def.parse }),
50
+ });
51
+ }
52
+ if (opt.defaultValue !== undefined) {
53
+ this.#parsedOpts[opt.def.key ?? opt.def.name] = opt.defaultValue;
54
+ }
55
+ return this;
56
+ }
57
+ addArgument(arg) {
58
+ this.#argSpecs.push(arg.spec);
59
+ return this;
60
+ }
61
+ addCommand(cmd, options) {
62
+ this.#children.set(cmd.#name, cmd);
63
+ for (const alias of cmd.#aliases)
64
+ this.#children.set(alias, cmd);
65
+ if (options?.isDefault)
66
+ this.#defaultChild = cmd;
67
+ return this;
68
+ }
69
+ action(fn) {
70
+ this.#action = fn;
71
+ return this;
72
+ }
73
+ addExample(example, description) {
74
+ this.#examples.push({ example, ...(description !== undefined && { description }) });
75
+ return this;
76
+ }
77
+ extendUsage() {
78
+ this.#extendUsage = true;
79
+ return this;
80
+ }
81
+ opts() {
82
+ return this.#parsedOpts;
83
+ }
84
+ // ─── Builder → CommandDef ─────────────────────────────────────────────────
85
+ #toNode() {
86
+ const self = this;
87
+ const children = [];
88
+ children.push(...this.#directOpts);
89
+ for (const spec of this.#argSpecs) {
90
+ const argDef = {
91
+ type: 'argument',
92
+ name: spec.name,
93
+ ...(spec.required !== undefined && { required: spec.required }),
94
+ ...(spec.many && { many: true }),
95
+ ...(spec.description !== undefined && { description: spec.description }),
96
+ ...(spec.defaultValue !== undefined && { defaultValue: spec.defaultValue }),
97
+ // Wrap parse so opts() works inside validators via #parsedOpts side-effect
98
+ ...(spec.parse && {
99
+ parse: (value, result) => {
100
+ self.#parsedOpts = result.options;
101
+ return spec.parse(value);
102
+ }
103
+ }),
104
+ };
105
+ children.push(argDef);
106
+ }
107
+ const seen = new Set();
108
+ for (const cmd of this.#children.values()) {
109
+ if (seen.has(cmd))
110
+ continue;
111
+ seen.add(cmd);
112
+ const childDef = cmd.#toNode();
113
+ if (cmd === this.#defaultChild)
114
+ childDef.isDefault = true;
115
+ children.push(childDef);
116
+ }
117
+ return {
118
+ type: 'command',
119
+ name: this.#name,
120
+ ...(this.#requires && { requires: this.#requires }),
121
+ ...(this.#description !== undefined && { description: this.#description }),
122
+ ...(this.#aliases.length > 0 && { alias: this.#aliases[0] }),
123
+ ...(this.#extendUsage && { showUsage: 'global' }),
124
+ ...(this.#examples.length > 0 && { examples: this.#examples }),
125
+ ...(children.length > 0 && { children }),
126
+ ...(this.#action !== undefined && { action: this.#action }),
127
+ };
128
+ }
129
+ async parseAsync(argv) {
130
+ const rootDef = this.#toNode();
131
+ let result;
132
+ try {
133
+ result = parse(argv, rootDef);
134
+ }
135
+ catch (e) {
136
+ process.stderr.write(`Error: ${e instanceof Error ? e.message : e}\n`);
137
+ const hint = e instanceof ParseError ? e.commandPath.join(' ') : 'tunli';
138
+ process.stderr.write(`Run '${hint} --help' for usage information.\n`);
139
+ process.exit(1);
140
+ }
141
+ if (result.help) {
142
+ const subPath = result.command.slice(1);
143
+ const nodeDef = findCommand(rootDef, subPath) ?? rootDef;
144
+ process.stdout.write(formatHelp(nodeDef, result.command) + '\n');
145
+ process.exit(0);
146
+ }
147
+ if (result.action) {
148
+ try {
149
+ await result.action(result);
150
+ }
151
+ catch (e) {
152
+ logException(e);
153
+ process.exit(1);
154
+ }
155
+ }
156
+ }
157
+ }
158
+ export const program = new Command();
159
+ //# sourceMappingURL=Command.js.map