@kissesses/xtls-sdk 0.16.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 (369) hide show
  1. package/LICENCE +661 -0
  2. package/README.md +217 -0
  3. package/build/index.d.ts +17 -0
  4. package/build/index.d.ts.map +1 -0
  5. package/build/index.js +19 -0
  6. package/build/src/common/errors/handler/handler.errors.d.ts +23 -0
  7. package/build/src/common/errors/handler/handler.errors.d.ts.map +1 -0
  8. package/build/src/common/errors/handler/handler.errors.js +22 -0
  9. package/build/src/common/errors/handler/index.d.ts +2 -0
  10. package/build/src/common/errors/handler/index.d.ts.map +1 -0
  11. package/build/src/common/errors/handler/index.js +17 -0
  12. package/build/src/common/errors/index.d.ts +3 -0
  13. package/build/src/common/errors/index.d.ts.map +1 -0
  14. package/build/src/common/errors/index.js +18 -0
  15. package/build/src/common/errors/router/index.d.ts +2 -0
  16. package/build/src/common/errors/router/index.d.ts.map +1 -0
  17. package/build/src/common/errors/router/index.js +17 -0
  18. package/build/src/common/errors/router/router.errors.d.ts +15 -0
  19. package/build/src/common/errors/router/router.errors.d.ts.map +1 -0
  20. package/build/src/common/errors/router/router.errors.js +14 -0
  21. package/build/src/common/errors/stats/index.d.ts +2 -0
  22. package/build/src/common/errors/stats/index.d.ts.map +1 -0
  23. package/build/src/common/errors/stats/index.js +17 -0
  24. package/build/src/common/errors/stats/stats.errors.d.ts +43 -0
  25. package/build/src/common/errors/stats/stats.errors.d.ts.map +1 -0
  26. package/build/src/common/errors/stats/stats.errors.js +42 -0
  27. package/build/src/common/types/index.d.ts +2 -0
  28. package/build/src/common/types/index.d.ts.map +1 -0
  29. package/build/src/common/types/index.js +17 -0
  30. package/build/src/common/types/sdk-response.d.ts +6 -0
  31. package/build/src/common/types/sdk-response.d.ts.map +1 -0
  32. package/build/src/common/types/sdk-response.js +2 -0
  33. package/build/src/common/utils/create-typed-message/create-typed-message.d.ts +5 -0
  34. package/build/src/common/utils/create-typed-message/create-typed-message.d.ts.map +1 -0
  35. package/build/src/common/utils/create-typed-message/create-typed-message.js +10 -0
  36. package/build/src/common/utils/decode-user/constants/account-types.d.ts +39 -0
  37. package/build/src/common/utils/decode-user/constants/account-types.d.ts.map +1 -0
  38. package/build/src/common/utils/decode-user/constants/account-types.js +65 -0
  39. package/build/src/common/utils/decode-user/constants/index.d.ts +2 -0
  40. package/build/src/common/utils/decode-user/constants/index.d.ts.map +1 -0
  41. package/build/src/common/utils/decode-user/constants/index.js +17 -0
  42. package/build/src/common/utils/decode-user/decode-user.d.ts +37 -0
  43. package/build/src/common/utils/decode-user/decode-user.d.ts.map +1 -0
  44. package/build/src/common/utils/decode-user/decode-user.js +55 -0
  45. package/build/src/common/utils/decode-user/types/account-type-keys.type.d.ts +3 -0
  46. package/build/src/common/utils/decode-user/types/account-type-keys.type.d.ts.map +1 -0
  47. package/build/src/common/utils/decode-user/types/account-type-keys.type.js +2 -0
  48. package/build/src/common/utils/decode-user/types/account-type-mapping.type.d.ts +4 -0
  49. package/build/src/common/utils/decode-user/types/account-type-mapping.type.d.ts.map +1 -0
  50. package/build/src/common/utils/decode-user/types/account-type-mapping.type.js +2 -0
  51. package/build/src/common/utils/decode-user/types/decoded-user.type.d.ts +18 -0
  52. package/build/src/common/utils/decode-user/types/decoded-user.type.d.ts.map +1 -0
  53. package/build/src/common/utils/decode-user/types/decoded-user.type.js +2 -0
  54. package/build/src/common/utils/decode-user/types/index.d.ts +4 -0
  55. package/build/src/common/utils/decode-user/types/index.d.ts.map +1 -0
  56. package/build/src/common/utils/decode-user/types/index.js +19 -0
  57. package/build/src/handler/handler.service.d.ts +155 -0
  58. package/build/src/handler/handler.service.d.ts.map +1 -0
  59. package/build/src/handler/handler.service.js +523 -0
  60. package/build/src/handler/interfaces/add-user/add-http-user.interface.d.ts +8 -0
  61. package/build/src/handler/interfaces/add-user/add-http-user.interface.d.ts.map +1 -0
  62. package/build/src/handler/interfaces/add-user/add-http-user.interface.js +2 -0
  63. package/build/src/handler/interfaces/add-user/add-hysteria-user.interface.d.ts +7 -0
  64. package/build/src/handler/interfaces/add-user/add-hysteria-user.interface.d.ts.map +1 -0
  65. package/build/src/handler/interfaces/add-user/add-hysteria-user.interface.js +2 -0
  66. package/build/src/handler/interfaces/add-user/add-shadowsocks-user.interface.d.ts +10 -0
  67. package/build/src/handler/interfaces/add-user/add-shadowsocks-user.interface.d.ts.map +1 -0
  68. package/build/src/handler/interfaces/add-user/add-shadowsocks-user.interface.js +2 -0
  69. package/build/src/handler/interfaces/add-user/add-shadowsocks2022-user.interface.d.ts +7 -0
  70. package/build/src/handler/interfaces/add-user/add-shadowsocks2022-user.interface.d.ts.map +1 -0
  71. package/build/src/handler/interfaces/add-user/add-shadowsocks2022-user.interface.js +2 -0
  72. package/build/src/handler/interfaces/add-user/add-socks-user.interface.d.ts +8 -0
  73. package/build/src/handler/interfaces/add-user/add-socks-user.interface.d.ts.map +1 -0
  74. package/build/src/handler/interfaces/add-user/add-socks-user.interface.js +2 -0
  75. package/build/src/handler/interfaces/add-user/add-trojan-user.interface.d.ts +7 -0
  76. package/build/src/handler/interfaces/add-user/add-trojan-user.interface.d.ts.map +1 -0
  77. package/build/src/handler/interfaces/add-user/add-trojan-user.interface.js +2 -0
  78. package/build/src/handler/interfaces/add-user/add-vless-user.interface.d.ts +8 -0
  79. package/build/src/handler/interfaces/add-user/add-vless-user.interface.d.ts.map +1 -0
  80. package/build/src/handler/interfaces/add-user/add-vless-user.interface.js +2 -0
  81. package/build/src/handler/interfaces/add-user/add-wireguard-user.interface.d.ts +8 -0
  82. package/build/src/handler/interfaces/add-user/add-wireguard-user.interface.d.ts.map +1 -0
  83. package/build/src/handler/interfaces/add-user/add-wireguard-user.interface.js +2 -0
  84. package/build/src/handler/interfaces/add-user/index.d.ts +9 -0
  85. package/build/src/handler/interfaces/add-user/index.d.ts.map +1 -0
  86. package/build/src/handler/interfaces/add-user/index.js +24 -0
  87. package/build/src/handler/interfaces/index.d.ts +2 -0
  88. package/build/src/handler/interfaces/index.d.ts.map +1 -0
  89. package/build/src/handler/interfaces/index.js +17 -0
  90. package/build/src/handler/models/add-user/add-user.response.model.d.ts +5 -0
  91. package/build/src/handler/models/add-user/add-user.response.model.d.ts.map +1 -0
  92. package/build/src/handler/models/add-user/add-user.response.model.js +9 -0
  93. package/build/src/handler/models/add-user/index.d.ts +2 -0
  94. package/build/src/handler/models/add-user/index.d.ts.map +1 -0
  95. package/build/src/handler/models/add-user/index.js +17 -0
  96. package/build/src/handler/models/get-inbound-users/get-inbound-users.response.model.d.ts +7 -0
  97. package/build/src/handler/models/get-inbound-users/get-inbound-users.response.model.d.ts.map +1 -0
  98. package/build/src/handler/models/get-inbound-users/get-inbound-users.response.model.js +10 -0
  99. package/build/src/handler/models/get-inbound-users/index.d.ts +2 -0
  100. package/build/src/handler/models/get-inbound-users/index.d.ts.map +1 -0
  101. package/build/src/handler/models/get-inbound-users/index.js +17 -0
  102. package/build/src/handler/models/index.d.ts +4 -0
  103. package/build/src/handler/models/index.d.ts.map +1 -0
  104. package/build/src/handler/models/index.js +19 -0
  105. package/build/src/handler/models/remove-user/index.d.ts +2 -0
  106. package/build/src/handler/models/remove-user/index.d.ts.map +1 -0
  107. package/build/src/handler/models/remove-user/index.js +17 -0
  108. package/build/src/handler/models/remove-user/remove-user.response.model.d.ts +5 -0
  109. package/build/src/handler/models/remove-user/remove-user.response.model.d.ts.map +1 -0
  110. package/build/src/handler/models/remove-user/remove-user.response.model.js +9 -0
  111. package/build/src/router/interfaces/index.d.ts +2 -0
  112. package/build/src/router/interfaces/index.d.ts.map +1 -0
  113. package/build/src/router/interfaces/index.js +17 -0
  114. package/build/src/router/interfaces/remove-rule-by-rule-tag.interface.d.ts +4 -0
  115. package/build/src/router/interfaces/remove-rule-by-rule-tag.interface.d.ts.map +1 -0
  116. package/build/src/router/interfaces/remove-rule-by-rule-tag.interface.js +2 -0
  117. package/build/src/router/models/index.d.ts +2 -0
  118. package/build/src/router/models/index.d.ts.map +1 -0
  119. package/build/src/router/models/index.js +17 -0
  120. package/build/src/router/models/remove-rule-by-rule-tag/index.d.ts +2 -0
  121. package/build/src/router/models/remove-rule-by-rule-tag/index.d.ts.map +1 -0
  122. package/build/src/router/models/remove-rule-by-rule-tag/index.js +17 -0
  123. package/build/src/router/models/remove-rule-by-rule-tag/remove-rule-by-rule-tag.response.model.d.ts +5 -0
  124. package/build/src/router/models/remove-rule-by-rule-tag/remove-rule-by-rule-tag.response.model.d.ts.map +1 -0
  125. package/build/src/router/models/remove-rule-by-rule-tag/remove-rule-by-rule-tag.response.model.js +9 -0
  126. package/build/src/router/router.service.d.ts +31 -0
  127. package/build/src/router/router.service.d.ts.map +1 -0
  128. package/build/src/router/router.service.js +56 -0
  129. package/build/src/stats/models/get-all-inbounds-stats/get-all-inbounds-stats.response.model.d.ts +21 -0
  130. package/build/src/stats/models/get-all-inbounds-stats/get-all-inbounds-stats.response.model.d.ts.map +1 -0
  131. package/build/src/stats/models/get-all-inbounds-stats/get-all-inbounds-stats.response.model.js +42 -0
  132. package/build/src/stats/models/get-all-inbounds-stats/index.d.ts +2 -0
  133. package/build/src/stats/models/get-all-inbounds-stats/index.d.ts.map +1 -0
  134. package/build/src/stats/models/get-all-inbounds-stats/index.js +17 -0
  135. package/build/src/stats/models/get-all-inbounds-stats/interfaces/inbound.interface.d.ts +6 -0
  136. package/build/src/stats/models/get-all-inbounds-stats/interfaces/inbound.interface.d.ts.map +1 -0
  137. package/build/src/stats/models/get-all-inbounds-stats/interfaces/inbound.interface.js +2 -0
  138. package/build/src/stats/models/get-all-inbounds-stats/interfaces/index.d.ts +2 -0
  139. package/build/src/stats/models/get-all-inbounds-stats/interfaces/index.d.ts.map +1 -0
  140. package/build/src/stats/models/get-all-inbounds-stats/interfaces/index.js +17 -0
  141. package/build/src/stats/models/get-all-outbounds-stats/get-all-outbounds-stats.response.model.d.ts +21 -0
  142. package/build/src/stats/models/get-all-outbounds-stats/get-all-outbounds-stats.response.model.d.ts.map +1 -0
  143. package/build/src/stats/models/get-all-outbounds-stats/get-all-outbounds-stats.response.model.js +42 -0
  144. package/build/src/stats/models/get-all-outbounds-stats/index.d.ts +2 -0
  145. package/build/src/stats/models/get-all-outbounds-stats/index.d.ts.map +1 -0
  146. package/build/src/stats/models/get-all-outbounds-stats/index.js +17 -0
  147. package/build/src/stats/models/get-all-outbounds-stats/interfaces/index.d.ts +2 -0
  148. package/build/src/stats/models/get-all-outbounds-stats/interfaces/index.d.ts.map +1 -0
  149. package/build/src/stats/models/get-all-outbounds-stats/interfaces/index.js +17 -0
  150. package/build/src/stats/models/get-all-outbounds-stats/interfaces/outbound.interface.d.ts +6 -0
  151. package/build/src/stats/models/get-all-outbounds-stats/interfaces/outbound.interface.d.ts.map +1 -0
  152. package/build/src/stats/models/get-all-outbounds-stats/interfaces/outbound.interface.js +2 -0
  153. package/build/src/stats/models/get-all-users-stats/get-all-users-stats.response.model.d.ts +21 -0
  154. package/build/src/stats/models/get-all-users-stats/get-all-users-stats.response.model.d.ts.map +1 -0
  155. package/build/src/stats/models/get-all-users-stats/get-all-users-stats.response.model.js +42 -0
  156. package/build/src/stats/models/get-all-users-stats/index.d.ts +2 -0
  157. package/build/src/stats/models/get-all-users-stats/index.d.ts.map +1 -0
  158. package/build/src/stats/models/get-all-users-stats/index.js +17 -0
  159. package/build/src/stats/models/get-all-users-stats/interfaces/index.d.ts +2 -0
  160. package/build/src/stats/models/get-all-users-stats/interfaces/index.d.ts.map +1 -0
  161. package/build/src/stats/models/get-all-users-stats/interfaces/index.js +17 -0
  162. package/build/src/stats/models/get-all-users-stats/interfaces/user.interface.d.ts +6 -0
  163. package/build/src/stats/models/get-all-users-stats/interfaces/user.interface.d.ts.map +1 -0
  164. package/build/src/stats/models/get-all-users-stats/interfaces/user.interface.js +2 -0
  165. package/build/src/stats/models/get-inbound-stats/get-inbound-stats.response.model.d.ts +27 -0
  166. package/build/src/stats/models/get-inbound-stats/get-inbound-stats.response.model.d.ts.map +1 -0
  167. package/build/src/stats/models/get-inbound-stats/get-inbound-stats.response.model.js +46 -0
  168. package/build/src/stats/models/get-inbound-stats/index.d.ts +2 -0
  169. package/build/src/stats/models/get-inbound-stats/index.d.ts.map +1 -0
  170. package/build/src/stats/models/get-inbound-stats/index.js +17 -0
  171. package/build/src/stats/models/get-inbound-stats/interfaces/inbound.interface.d.ts +6 -0
  172. package/build/src/stats/models/get-inbound-stats/interfaces/inbound.interface.d.ts.map +1 -0
  173. package/build/src/stats/models/get-inbound-stats/interfaces/inbound.interface.js +2 -0
  174. package/build/src/stats/models/get-inbound-stats/interfaces/index.d.ts +2 -0
  175. package/build/src/stats/models/get-inbound-stats/interfaces/index.d.ts.map +1 -0
  176. package/build/src/stats/models/get-inbound-stats/interfaces/index.js +17 -0
  177. package/build/src/stats/models/get-outbound-stats/get-outbound-stats.response.model.d.ts +27 -0
  178. package/build/src/stats/models/get-outbound-stats/get-outbound-stats.response.model.d.ts.map +1 -0
  179. package/build/src/stats/models/get-outbound-stats/get-outbound-stats.response.model.js +46 -0
  180. package/build/src/stats/models/get-outbound-stats/index.d.ts +2 -0
  181. package/build/src/stats/models/get-outbound-stats/index.d.ts.map +1 -0
  182. package/build/src/stats/models/get-outbound-stats/index.js +17 -0
  183. package/build/src/stats/models/get-outbound-stats/interfaces/index.d.ts +2 -0
  184. package/build/src/stats/models/get-outbound-stats/interfaces/index.d.ts.map +1 -0
  185. package/build/src/stats/models/get-outbound-stats/interfaces/index.js +17 -0
  186. package/build/src/stats/models/get-outbound-stats/interfaces/outbound.d.ts +6 -0
  187. package/build/src/stats/models/get-outbound-stats/interfaces/outbound.d.ts.map +1 -0
  188. package/build/src/stats/models/get-outbound-stats/interfaces/outbound.js +2 -0
  189. package/build/src/stats/models/get-sys-stats/get-sys-stats.response.model.d.ts +15 -0
  190. package/build/src/stats/models/get-sys-stats/get-sys-stats.response.model.d.ts.map +1 -0
  191. package/build/src/stats/models/get-sys-stats/get-sys-stats.response.model.js +22 -0
  192. package/build/src/stats/models/get-sys-stats/index.d.ts +2 -0
  193. package/build/src/stats/models/get-sys-stats/index.d.ts.map +1 -0
  194. package/build/src/stats/models/get-sys-stats/index.js +17 -0
  195. package/build/src/stats/models/get-user-online-status/get-user-online-status.response.model.d.ts +5 -0
  196. package/build/src/stats/models/get-user-online-status/get-user-online-status.response.model.d.ts.map +1 -0
  197. package/build/src/stats/models/get-user-online-status/get-user-online-status.response.model.js +9 -0
  198. package/build/src/stats/models/get-user-online-status/index.d.ts +2 -0
  199. package/build/src/stats/models/get-user-online-status/index.d.ts.map +1 -0
  200. package/build/src/stats/models/get-user-online-status/index.js +17 -0
  201. package/build/src/stats/models/get-user-stats/get-user-stats.response.model.d.ts +26 -0
  202. package/build/src/stats/models/get-user-stats/get-user-stats.response.model.d.ts.map +1 -0
  203. package/build/src/stats/models/get-user-stats/get-user-stats.response.model.js +46 -0
  204. package/build/src/stats/models/get-user-stats/index.d.ts +2 -0
  205. package/build/src/stats/models/get-user-stats/index.d.ts.map +1 -0
  206. package/build/src/stats/models/get-user-stats/index.js +17 -0
  207. package/build/src/stats/models/get-user-stats/interfaces/index.d.ts +2 -0
  208. package/build/src/stats/models/get-user-stats/interfaces/index.d.ts.map +1 -0
  209. package/build/src/stats/models/get-user-stats/interfaces/index.js +17 -0
  210. package/build/src/stats/models/get-user-stats/interfaces/user.interface.d.ts +6 -0
  211. package/build/src/stats/models/get-user-stats/interfaces/user.interface.d.ts.map +1 -0
  212. package/build/src/stats/models/get-user-stats/interfaces/user.interface.js +2 -0
  213. package/build/src/stats/models/get-users-stats/get-users-stats.response.model.d.ts +50 -0
  214. package/build/src/stats/models/get-users-stats/get-users-stats.response.model.d.ts.map +1 -0
  215. package/build/src/stats/models/get-users-stats/get-users-stats.response.model.js +52 -0
  216. package/build/src/stats/models/get-users-stats/index.d.ts +2 -0
  217. package/build/src/stats/models/get-users-stats/index.d.ts.map +1 -0
  218. package/build/src/stats/models/get-users-stats/index.js +17 -0
  219. package/build/src/stats/models/index.d.ts +10 -0
  220. package/build/src/stats/models/index.d.ts.map +1 -0
  221. package/build/src/stats/models/index.js +25 -0
  222. package/build/src/stats/stats.service.d.ts +271 -0
  223. package/build/src/stats/stats.service.d.ts.map +1 -0
  224. package/build/src/stats/stats.service.js +527 -0
  225. package/build/src/xray-protos/app/commander/config.d.ts +37 -0
  226. package/build/src/xray-protos/app/commander/config.d.ts.map +1 -0
  227. package/build/src/xray-protos/app/commander/config.js +143 -0
  228. package/build/src/xray-protos/app/dispatcher/config.d.ts +26 -0
  229. package/build/src/xray-protos/app/dispatcher/config.d.ts.map +1 -0
  230. package/build/src/xray-protos/app/dispatcher/config.js +112 -0
  231. package/build/src/xray-protos/app/geodata/config.d.ts +30 -0
  232. package/build/src/xray-protos/app/geodata/config.d.ts.map +1 -0
  233. package/build/src/xray-protos/app/geodata/config.js +172 -0
  234. package/build/src/xray-protos/app/log/command/config.d.ts +51 -0
  235. package/build/src/xray-protos/app/log/command/config.d.ts.map +1 -0
  236. package/build/src/xray-protos/app/log/command/config.js +143 -0
  237. package/build/src/xray-protos/app/log/config.d.ts +38 -0
  238. package/build/src/xray-protos/app/log/config.d.ts.map +1 -0
  239. package/build/src/xray-protos/app/log/config.js +244 -0
  240. package/build/src/xray-protos/app/metrics/config.d.ts +25 -0
  241. package/build/src/xray-protos/app/metrics/config.d.ts.map +1 -0
  242. package/build/src/xray-protos/app/metrics/config.js +86 -0
  243. package/build/src/xray-protos/app/policy/config.d.ts +78 -0
  244. package/build/src/xray-protos/app/policy/config.d.ts.map +1 -0
  245. package/build/src/xray-protos/app/policy/config.js +790 -0
  246. package/build/src/xray-protos/app/proxyman/command/command.d.ts +237 -0
  247. package/build/src/xray-protos/app/proxyman/command/command.d.ts.map +1 -0
  248. package/build/src/xray-protos/app/proxyman/command/command.js +1255 -0
  249. package/build/src/xray-protos/app/proxyman/config.d.ts +91 -0
  250. package/build/src/xray-protos/app/proxyman/config.d.ts.map +1 -0
  251. package/build/src/xray-protos/app/proxyman/config.js +779 -0
  252. package/build/src/xray-protos/app/reverse/config.d.ts +48 -0
  253. package/build/src/xray-protos/app/reverse/config.d.ts.map +1 -0
  254. package/build/src/xray-protos/app/reverse/config.js +365 -0
  255. package/build/src/xray-protos/app/router/command/command.d.ts +250 -0
  256. package/build/src/xray-protos/app/router/command/command.d.ts.map +1 -0
  257. package/build/src/xray-protos/app/router/command/command.js +1461 -0
  258. package/build/src/xray-protos/app/stats/command/command.d.ts +204 -0
  259. package/build/src/xray-protos/app/stats/command/command.d.ts.map +1 -0
  260. package/build/src/xray-protos/app/stats/command/command.js +1318 -0
  261. package/build/src/xray-protos/app/stats/config.d.ts +28 -0
  262. package/build/src/xray-protos/app/stats/config.d.ts.map +1 -0
  263. package/build/src/xray-protos/app/stats/config.js +140 -0
  264. package/build/src/xray-protos/app/version/config.d.ts +24 -0
  265. package/build/src/xray-protos/app/version/config.d.ts.map +1 -0
  266. package/build/src/xray-protos/app/version/config.js +113 -0
  267. package/build/src/xray-protos/common/geodata/geodat.d.ts +111 -0
  268. package/build/src/xray-protos/common/geodata/geodat.d.ts.map +1 -0
  269. package/build/src/xray-protos/common/geodata/geodat.js +1027 -0
  270. package/build/src/xray-protos/common/log/log.d.ts +12 -0
  271. package/build/src/xray-protos/common/log/log.d.ts.map +1 -0
  272. package/build/src/xray-protos/common/log/log.js +61 -0
  273. package/build/src/xray-protos/common/net/address.d.ts +29 -0
  274. package/build/src/xray-protos/common/net/address.d.ts.map +1 -0
  275. package/build/src/xray-protos/common/net/address.js +111 -0
  276. package/build/src/xray-protos/common/net/destination.d.ts +27 -0
  277. package/build/src/xray-protos/common/net/destination.d.ts.map +1 -0
  278. package/build/src/xray-protos/common/net/destination.js +105 -0
  279. package/build/src/xray-protos/common/net/network.d.ts +32 -0
  280. package/build/src/xray-protos/common/net/network.d.ts.map +1 -0
  281. package/build/src/xray-protos/common/net/network.js +122 -0
  282. package/build/src/xray-protos/common/net/port.d.ts +32 -0
  283. package/build/src/xray-protos/common/net/port.d.ts.map +1 -0
  284. package/build/src/xray-protos/common/net/port.js +142 -0
  285. package/build/src/xray-protos/common/protocol/headers.d.ts +34 -0
  286. package/build/src/xray-protos/common/protocol/headers.d.ts.map +1 -0
  287. package/build/src/xray-protos/common/protocol/headers.js +126 -0
  288. package/build/src/xray-protos/common/protocol/server_spec.d.ts +26 -0
  289. package/build/src/xray-protos/common/protocol/server_spec.d.ts.map +1 -0
  290. package/build/src/xray-protos/common/protocol/server_spec.js +105 -0
  291. package/build/src/xray-protos/common/protocol/user.d.ts +30 -0
  292. package/build/src/xray-protos/common/protocol/user.d.ts.map +1 -0
  293. package/build/src/xray-protos/common/protocol/user.js +104 -0
  294. package/build/src/xray-protos/common/serial/typed_message.d.ts +26 -0
  295. package/build/src/xray-protos/common/serial/typed_message.d.ts.map +1 -0
  296. package/build/src/xray-protos/common/serial/typed_message.js +111 -0
  297. package/build/src/xray-protos/core/config.d.ts +74 -0
  298. package/build/src/xray-protos/core/config.d.ts.map +1 -0
  299. package/build/src/xray-protos/core/config.js +366 -0
  300. package/build/src/xray-protos/proxy/blackhole/config.d.ts +31 -0
  301. package/build/src/xray-protos/proxy/blackhole/config.d.ts.map +1 -0
  302. package/build/src/xray-protos/proxy/blackhole/config.js +152 -0
  303. package/build/src/xray-protos/proxy/dns/config.d.ts +43 -0
  304. package/build/src/xray-protos/proxy/dns/config.d.ts.map +1 -0
  305. package/build/src/xray-protos/proxy/dns/config.js +276 -0
  306. package/build/src/xray-protos/proxy/dokodemo/config.d.ts +38 -0
  307. package/build/src/xray-protos/proxy/dokodemo/config.d.ts.map +1 -0
  308. package/build/src/xray-protos/proxy/dokodemo/config.js +285 -0
  309. package/build/src/xray-protos/proxy/freedom/config.d.ts +82 -0
  310. package/build/src/xray-protos/proxy/freedom/config.d.ts.map +1 -0
  311. package/build/src/xray-protos/proxy/freedom/config.js +902 -0
  312. package/build/src/xray-protos/proxy/http/config.d.ts +54 -0
  313. package/build/src/xray-protos/proxy/http/config.d.ts.map +1 -0
  314. package/build/src/xray-protos/proxy/http/config.js +418 -0
  315. package/build/src/xray-protos/proxy/hysteria/account/config.d.ts +22 -0
  316. package/build/src/xray-protos/proxy/hysteria/account/config.d.ts.map +1 -0
  317. package/build/src/xray-protos/proxy/hysteria/account/config.js +68 -0
  318. package/build/src/xray-protos/proxy/hysteria/config.d.ts +29 -0
  319. package/build/src/xray-protos/proxy/hysteria/config.d.ts.map +1 -0
  320. package/build/src/xray-protos/proxy/hysteria/config.js +131 -0
  321. package/build/src/xray-protos/proxy/loopback/config.d.ts +24 -0
  322. package/build/src/xray-protos/proxy/loopback/config.d.ts.map +1 -0
  323. package/build/src/xray-protos/proxy/loopback/config.js +93 -0
  324. package/build/src/xray-protos/proxy/shadowsocks/config.d.ts +49 -0
  325. package/build/src/xray-protos/proxy/shadowsocks/config.d.ts.map +1 -0
  326. package/build/src/xray-protos/proxy/shadowsocks/config.js +307 -0
  327. package/build/src/xray-protos/proxy/shadowsocks_2022/config.d.ts +67 -0
  328. package/build/src/xray-protos/proxy/shadowsocks_2022/config.d.ts.map +1 -0
  329. package/build/src/xray-protos/proxy/shadowsocks_2022/config.js +646 -0
  330. package/build/src/xray-protos/proxy/socks/config.d.ts +61 -0
  331. package/build/src/xray-protos/proxy/socks/config.d.ts.map +1 -0
  332. package/build/src/xray-protos/proxy/socks/config.js +416 -0
  333. package/build/src/xray-protos/proxy/trojan/config.d.ts +45 -0
  334. package/build/src/xray-protos/proxy/trojan/config.d.ts.map +1 -0
  335. package/build/src/xray-protos/proxy/trojan/config.js +342 -0
  336. package/build/src/xray-protos/proxy/tun/config.d.ts +28 -0
  337. package/build/src/xray-protos/proxy/tun/config.d.ts.map +1 -0
  338. package/build/src/xray-protos/proxy/tun/config.js +182 -0
  339. package/build/src/xray-protos/proxy/vless/account.d.ts +39 -0
  340. package/build/src/xray-protos/proxy/vless/account.d.ts.map +1 -0
  341. package/build/src/xray-protos/proxy/vless/account.js +287 -0
  342. package/build/src/xray-protos/proxy/vless/encoding/addons.d.ts +23 -0
  343. package/build/src/xray-protos/proxy/vless/encoding/addons.d.ts.map +1 -0
  344. package/build/src/xray-protos/proxy/vless/encoding/addons.js +111 -0
  345. package/build/src/xray-protos/proxy/vless/inbound/config.d.ts +39 -0
  346. package/build/src/xray-protos/proxy/vless/inbound/config.d.ts.map +1 -0
  347. package/build/src/xray-protos/proxy/vless/inbound/config.js +322 -0
  348. package/build/src/xray-protos/proxy/vless/outbound/config.d.ts +23 -0
  349. package/build/src/xray-protos/proxy/vless/outbound/config.d.ts.map +1 -0
  350. package/build/src/xray-protos/proxy/vless/outbound/config.js +71 -0
  351. package/build/src/xray-protos/proxy/vmess/account.d.ts +31 -0
  352. package/build/src/xray-protos/proxy/vmess/account.d.ts.map +1 -0
  353. package/build/src/xray-protos/proxy/vmess/account.js +112 -0
  354. package/build/src/xray-protos/proxy/vmess/inbound/config.d.ts +34 -0
  355. package/build/src/xray-protos/proxy/vmess/inbound/config.d.ts.map +1 -0
  356. package/build/src/xray-protos/proxy/vmess/inbound/config.js +195 -0
  357. package/build/src/xray-protos/proxy/vmess/outbound/config.d.ts +23 -0
  358. package/build/src/xray-protos/proxy/vmess/outbound/config.d.ts.map +1 -0
  359. package/build/src/xray-protos/proxy/vmess/outbound/config.js +74 -0
  360. package/build/src/xray-protos/proxy/wireguard/config.d.ts +50 -0
  361. package/build/src/xray-protos/proxy/wireguard/config.d.ts.map +1 -0
  362. package/build/src/xray-protos/proxy/wireguard/config.js +434 -0
  363. package/build/src/xray-protos/transport/internet/config.d.ts +164 -0
  364. package/build/src/xray-protos/transport/internet/config.d.ts.map +1 -0
  365. package/build/src/xray-protos/transport/internet/config.js +1705 -0
  366. package/build/src/xray-protos/typeRegistry.d.ts +19 -0
  367. package/build/src/xray-protos/typeRegistry.d.ts.map +1 -0
  368. package/build/src/xray-protos/typeRegistry.js +8 -0
  369. package/package.json +60 -0
@@ -0,0 +1,527 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StatsService = void 0;
4
+ const nice_grpc_1 = require("nice-grpc");
5
+ const models_1 = require("./models");
6
+ const command_1 = require("../xray-protos/app/stats/command/command");
7
+ const errors_1 = require("../common/errors");
8
+ /**
9
+ * Service class for interacting with Xray server statistics.
10
+ * Provides methods to retrieve system and user statistics.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * // Create a new StatsService instance
15
+ * const stats = new StatsService(channel);
16
+ *
17
+ * // Get system stats
18
+ * const sysStats = await stats.getSysStats();
19
+ *
20
+ * // Get all users stats
21
+ * const allUsersStats = await stats.getAllUsersStats();
22
+ *
23
+ * // Get specific user stats
24
+ * const userStats = await stats.getUserStats('username123');
25
+ *
26
+ * // Check if user is online
27
+ * const isOnline = await stats.getUserOnlineStatus('username123');
28
+ * ```
29
+ */
30
+ class StatsService {
31
+ /**
32
+ * Creates a new StatsService instance
33
+ * @param channel - The gRPC channel to use for communication with the Xray server
34
+ */
35
+ constructor(channel) {
36
+ this.channel = channel;
37
+ /**
38
+ * Cached flag indicating whether the remote Xray server supports the
39
+ * `GetUsersStats` unary method. `null` means "not probed yet", `true` means
40
+ * the method is available, `false` means the legacy fallback should be used.
41
+ *
42
+ * The flag is cached for the lifetime of this instance — if the Xray core
43
+ * is upgraded without re-creating the SDK, a manual re-instantiation is
44
+ * required to re-detect support.
45
+ * @private
46
+ */
47
+ this.supportsGetUsersStats = null;
48
+ this.client = (0, nice_grpc_1.createClient)(command_1.StatsServiceDefinition, channel);
49
+ }
50
+ /**
51
+ * Retrieves system statistics from the Xray server.
52
+ * This includes information about the system's overall performance and resource usage.
53
+ *
54
+ * @returns {Promise<ISdkResponse<GetSysStatsResponseModel>>} A promise that resolves to:
55
+ * - On success: An object with `isOk: true` and `data` containing the system stats
56
+ * - On failure: An object with `isOk: false` and error details from STATS_ERRORS
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * const stats = new StatsService(channel);
61
+ * const response = await stats.getSysStats();
62
+ *
63
+ * if (response.isOk) {
64
+ * console.log(response.data); // GetSysStatsResponseModel
65
+ * } else {
66
+ * console.error(response.message); // Error message
67
+ * }
68
+ * ```
69
+ */
70
+ async getSysStats() {
71
+ try {
72
+ const response = await this.client.getSysStats({});
73
+ return {
74
+ isOk: true,
75
+ data: new models_1.GetSysStatsResponseModel(response),
76
+ };
77
+ }
78
+ catch (error) {
79
+ let message = '';
80
+ if (error instanceof Error) {
81
+ message = error.message;
82
+ }
83
+ return {
84
+ isOk: false,
85
+ ...errors_1.STATS_ERRORS.GET_SYS_STATS_ERROR(message),
86
+ };
87
+ }
88
+ }
89
+ /**
90
+ * Retrieves statistics for all users from the Xray server.
91
+ * This provides a comprehensive view of all user activities and their resource usage.
92
+ *
93
+ * @param {boolean} reset - Whether to reset the statistics after retrieving them. Defaults to false.
94
+ * @returns {Promise<ISdkResponse<GetAllUsersStatsResponseModel>>} A promise that resolves to:
95
+ * - On success: An object with `isOk: true` and `data` containing user stats
96
+ * - On failure: An object with `isOk: false` and error details from STATS_ERRORS
97
+ *
98
+ * @example
99
+ * ```typescript
100
+ * const stats = new StatsService(channel);
101
+ *
102
+ * // Get stats without resetting
103
+ * const response = await stats.getAllUsersStats();
104
+ *
105
+ * // Get stats and reset them
106
+ * const responseWithReset = await stats.getAllUsersStats(true);
107
+ *
108
+ * if (response.isOk) {
109
+ * console.log(response.data.users); // Array of user statistics
110
+ * } else {
111
+ * console.error(response.message); // Error message
112
+ * }
113
+ * ```
114
+ */
115
+ async getAllUsersStats(reset = false) {
116
+ try {
117
+ const response = await this.client.queryStats({
118
+ pattern: 'user>>>',
119
+ reset,
120
+ });
121
+ return {
122
+ isOk: true,
123
+ data: new models_1.GetAllUsersStatsResponseModel(response),
124
+ };
125
+ }
126
+ catch (error) {
127
+ let message = '';
128
+ if (error instanceof Error) {
129
+ message = error.message;
130
+ }
131
+ return {
132
+ isOk: false,
133
+ ...errors_1.STATS_ERRORS.GET_ALL_USERS_STATS_ERROR(message),
134
+ };
135
+ }
136
+ }
137
+ /**
138
+ * Retrieves statistics for a specific user from the Xray server.
139
+ * This includes detailed information about the user's network usage, connections, and other metrics.
140
+ *
141
+ * @param {string} username - The username to get statistics for
142
+ * @param {boolean} reset - Whether to reset the statistics after retrieving them. Defaults to false.
143
+ * @returns {Promise<ISdkResponse<GetUserStatsResponseModel>>} A promise that resolves to:
144
+ * - On success: An object with `isOk: true` and `data` containing the user's stats
145
+ * - On failure: An object with `isOk: false` and error details from STATS_ERRORS
146
+ *
147
+ * @example
148
+ * ```typescript
149
+ * const stats = new StatsService(channel);
150
+ *
151
+ * // Get user stats without resetting
152
+ * const response = await stats.getUserStats('username123');
153
+ *
154
+ * // Get user stats and reset them
155
+ * const responseWithReset = await stats.getUserStats('username123', true);
156
+ *
157
+ * if (response.isOk) {
158
+ * console.log(response.data.user); // User statistics
159
+ * } else {
160
+ * console.error(response.message); // Error message
161
+ * }
162
+ * ```
163
+ */
164
+ async getUserStats(username, reset = false) {
165
+ try {
166
+ const response = await this.client.queryStats({
167
+ pattern: `user>>>${username}>>>`,
168
+ reset,
169
+ });
170
+ return {
171
+ isOk: true,
172
+ data: new models_1.GetUserStatsResponseModel(response),
173
+ };
174
+ }
175
+ catch (error) {
176
+ let message = '';
177
+ if (error instanceof Error) {
178
+ message = error.message;
179
+ }
180
+ return {
181
+ isOk: false,
182
+ ...errors_1.STATS_ERRORS.GET_USER_STATS_ERROR(message),
183
+ };
184
+ }
185
+ }
186
+ /**
187
+ * Checks if a specific user is currently online on the Xray server.
188
+ * This method queries the server's real-time connection status for the specified user.
189
+ *
190
+ * @param {string} username - The username to check online status for
191
+ * @returns {Promise<ISdkResponse<GetUserOnlineStatusResponseModel>>} A promise that resolves to:
192
+ * - On success: An object with `isOk: true` and `data` containing the user's online status (`data.online`)
193
+ * - On failure: An object with `isOk: false` and error details from STATS_ERRORS
194
+ *
195
+ * @example
196
+ * ```typescript
197
+ * const stats = new StatsService(channel);
198
+ * const response = await stats.getUserOnlineStatus('username123');
199
+ *
200
+ * if (response.isOk) {
201
+ * if (response.data.online) {
202
+ * console.log('User is online');
203
+ * } else {
204
+ * console.log('User is offline');
205
+ * }
206
+ * } else {
207
+ * console.error(response.message); // Error message
208
+ * }
209
+ * ```
210
+ */
211
+ async getUserOnlineStatus(username) {
212
+ try {
213
+ await this.client.getStatsOnline({
214
+ name: `user>>>${username}>>>online`,
215
+ });
216
+ return {
217
+ isOk: true,
218
+ data: new models_1.GetUserOnlineStatusResponseModel(true),
219
+ };
220
+ }
221
+ catch (error) {
222
+ let message = '';
223
+ if (error instanceof Error) {
224
+ message = error.message;
225
+ }
226
+ const isNotFound = message.includes('online not found.');
227
+ if (isNotFound) {
228
+ return {
229
+ isOk: true,
230
+ data: new models_1.GetUserOnlineStatusResponseModel(false),
231
+ };
232
+ }
233
+ return {
234
+ isOk: false,
235
+ ...errors_1.STATS_ERRORS.GET_USER_ONLINE_STATUS_ERROR(message),
236
+ };
237
+ }
238
+ }
239
+ /**
240
+ * Gets statistics for all inbound connections.
241
+ *
242
+ * @param reset - Whether to reset the statistics after retrieving them. Defaults to false.
243
+ * @returns A promise that resolves to an ISdkResponse containing:
244
+ * - On success: An object with `isOk: true` and data containing an array of inbound stats
245
+ * - On failure: An object with `isOk: false` and error details from STATS_ERRORS
246
+ *
247
+ * @example
248
+ * ```typescript
249
+ * const stats = new StatsService(channel);
250
+ * const response = await stats.getAllInboundsStats();
251
+ *
252
+ * if (response.isOk) {
253
+ * console.log('Inbound stats:', response.data.inbounds);
254
+ * } else {
255
+ * console.error(response.message); // Error message
256
+ * }
257
+ * ```
258
+ */
259
+ async getAllInboundsStats(reset = false) {
260
+ try {
261
+ const response = await this.client.queryStats({
262
+ pattern: 'inbound>>>',
263
+ reset,
264
+ });
265
+ return {
266
+ isOk: true,
267
+ data: new models_1.GetAllInboundsStatsResponseModel(response),
268
+ };
269
+ }
270
+ catch (error) {
271
+ let message = '';
272
+ if (error instanceof Error) {
273
+ message = error.message;
274
+ }
275
+ return {
276
+ isOk: false,
277
+ ...errors_1.STATS_ERRORS.GET_ALL_INBOUNDS_STATS_ERROR(message),
278
+ };
279
+ }
280
+ }
281
+ /**
282
+ * Gets statistics for a specific inbound connection.
283
+ *
284
+ * @param inbound - The name/tag of the inbound connection to get stats for
285
+ * @param reset - Whether to reset the statistics after retrieving them. Defaults to false.
286
+ * @returns A promise that resolves to an ISdkResponse containing:
287
+ * - On success: An object with `isOk: true` and data containing the inbound stats
288
+ * - On failure: An object with `isOk: false` and error details from STATS_ERRORS
289
+ *
290
+ * @example
291
+ * ```typescript
292
+ * const stats = new StatsService(channel);
293
+ * const response = await stats.getInboundStats('http_in');
294
+ *
295
+ * if (response.isOk) {
296
+ * console.log('Inbound stats:', response.data.stats);
297
+ * } else {
298
+ * console.error(response.message); // Error message
299
+ * }
300
+ * ```
301
+ */
302
+ async getInboundStats(inbound, reset = false) {
303
+ try {
304
+ const response = await this.client.queryStats({
305
+ pattern: `inbound>>>${inbound}>>>`,
306
+ reset,
307
+ });
308
+ return {
309
+ isOk: true,
310
+ data: new models_1.GetInboundStatsResponseModel(response),
311
+ };
312
+ }
313
+ catch (error) {
314
+ let message = '';
315
+ if (error instanceof Error) {
316
+ message = error.message;
317
+ }
318
+ return {
319
+ isOk: false,
320
+ ...errors_1.STATS_ERRORS.GET_INBOUND_STATS_ERROR(message),
321
+ };
322
+ }
323
+ }
324
+ /**
325
+ * Gets statistics for all outbound connections.
326
+ *
327
+ * @param reset - Whether to reset the statistics after retrieving them. Defaults to false.
328
+ * @returns A promise that resolves to an ISdkResponse containing:
329
+ * - On success: An object with `isOk: true` and data containing an array of outbound stats
330
+ * - On failure: An object with `isOk: false` and error details from STATS_ERRORS
331
+ *
332
+ * @example
333
+ * ```typescript
334
+ * const stats = new StatsService(channel);
335
+ * const response = await stats.getAllOutboundsStats();
336
+ *
337
+ * if (response.isOk) {
338
+ * console.log('Outbound stats:', response.data.outbounds);
339
+ * } else {
340
+ * console.error(response.message); // Error message
341
+ * }
342
+ * ```
343
+ */
344
+ async getAllOutboundsStats(reset = false) {
345
+ try {
346
+ const response = await this.client.queryStats({
347
+ pattern: 'outbound>>>',
348
+ reset,
349
+ });
350
+ return {
351
+ isOk: true,
352
+ data: new models_1.GetAllOutboundsStatsResponseModel(response),
353
+ };
354
+ }
355
+ catch (error) {
356
+ let message = '';
357
+ if (error instanceof Error) {
358
+ message = error.message;
359
+ }
360
+ return {
361
+ isOk: false,
362
+ ...errors_1.STATS_ERRORS.GET_ALL_OUTBOUNDS_STATS_ERROR(message),
363
+ };
364
+ }
365
+ }
366
+ /**
367
+ * Gets statistics for a specific outbound connection.
368
+ *
369
+ * @param outbound - The name/tag of the outbound connection to get stats for
370
+ * @param reset - Whether to reset the statistics after retrieving them. Defaults to false.
371
+ * @returns A promise that resolves to an ISdkResponse containing:
372
+ * - On success: An object with `isOk: true` and data containing the outbound stats
373
+ * - On failure: An object with `isOk: false` and error details from STATS_ERRORS
374
+ *
375
+ * @example
376
+ * ```typescript
377
+ * const stats = new StatsService(channel);
378
+ * const response = await stats.getOutboundStats('http_out');
379
+ *
380
+ * if (response.isOk) {
381
+ * console.log('Outbound stats:', response.data.stats);
382
+ * } else {
383
+ * console.error(response.message); // Error message
384
+ * }
385
+ * ```
386
+ */
387
+ async getOutboundStats(outbound, reset = false) {
388
+ try {
389
+ const response = await this.client.queryStats({
390
+ pattern: `outbound>>>${outbound}>>>`,
391
+ reset,
392
+ });
393
+ return {
394
+ isOk: true,
395
+ data: new models_1.GetOutboundStatsResponseModel(response),
396
+ };
397
+ }
398
+ catch (error) {
399
+ let message = '';
400
+ if (error instanceof Error) {
401
+ message = error.message;
402
+ }
403
+ return {
404
+ isOk: false,
405
+ ...errors_1.STATS_ERRORS.GET_OUTBOUND_STATS_ERROR(message),
406
+ };
407
+ }
408
+ }
409
+ /**
410
+ * Retrieves per-user statistics (online IP list and, optionally, traffic)
411
+ * from the Xray server.
412
+ *
413
+ * Prefers the native `GetUsersStats` gRPC method introduced in recent
414
+ * Xray-core versions. If the server replies with `UNIMPLEMENTED` (i.e. the
415
+ * method is missing), transparently falls back to the legacy approach of
416
+ * combining `GetAllOnlineUsers` + `GetStatsOnlineIpList`. The detection
417
+ * result is cached for the lifetime of this service instance, so the
418
+ * `UNIMPLEMENTED` round-trip happens at most once.
419
+ *
420
+ * Note: the `includeTraffic` flag is honored only on the native path. In
421
+ * legacy mode traffic is always returned as `undefined`, since the old
422
+ * endpoints do not expose per-user traffic in a single call.
423
+ *
424
+ * @param includeTraffic - Whether to request traffic counters alongside IPs (native path only).
425
+ * @param reset - Whether to reset the stats after retrieving them.
426
+ */
427
+ async getUsersStats(includeTraffic = false, reset = false) {
428
+ if (this.supportsGetUsersStats === false) {
429
+ return this.getUsersStatsLegacy(reset);
430
+ }
431
+ try {
432
+ const response = await this.client.getUsersStats({
433
+ includeTraffic,
434
+ reset,
435
+ });
436
+ this.supportsGetUsersStats = true;
437
+ return {
438
+ isOk: true,
439
+ data: new models_1.GetUsersStatsResponseModel(response),
440
+ };
441
+ }
442
+ catch (error) {
443
+ if (error instanceof nice_grpc_1.ClientError && error.code === nice_grpc_1.Status.UNIMPLEMENTED) {
444
+ this.supportsGetUsersStats = false;
445
+ return this.getUsersStatsLegacy(reset);
446
+ }
447
+ let message = '';
448
+ if (error instanceof Error) {
449
+ message = error.message;
450
+ }
451
+ return {
452
+ isOk: false,
453
+ ...errors_1.STATS_ERRORS.GET_USERS_STATS_ERROR(message),
454
+ };
455
+ }
456
+ }
457
+ /**
458
+ * Legacy fallback for {@link getUsersStats}. Uses `GetAllOnlineUsers` to
459
+ * enumerate currently connected users and then queries
460
+ * `GetStatsOnlineIpList` for each of them in parallel with a bounded
461
+ * worker pool. Always returns `traffic: undefined` for every user.
462
+ * @private
463
+ */
464
+ async getUsersStatsLegacy(reset) {
465
+ try {
466
+ const { users: onlineUsers } = await this.client.getAllOnlineUsers({});
467
+ const onlinePairs = Array.from(new Set(onlineUsers)).map((metricName) => ({
468
+ metricName,
469
+ email: metricName.slice('user>>>'.length, -'>>>online'.length),
470
+ }));
471
+ const results = new Array(onlinePairs.length);
472
+ const concurrency = Math.min(50, onlinePairs.length);
473
+ let cursor = 0;
474
+ const worker = async () => {
475
+ while (true) {
476
+ const index = cursor++;
477
+ if (index >= onlinePairs.length)
478
+ return;
479
+ const { metricName, email } = onlinePairs[index];
480
+ let ips = [];
481
+ try {
482
+ const ipListResponse = await this.client.getStatsOnlineIpList({
483
+ name: metricName,
484
+ reset,
485
+ });
486
+ ips = Object.entries(ipListResponse.ips).map(([ip, lastSeen]) => ({
487
+ ip,
488
+ lastSeen: new Date(lastSeen * 1000),
489
+ }));
490
+ }
491
+ catch {
492
+ // ignore
493
+ }
494
+ results[index] = { userId: email, ips, traffic: undefined };
495
+ }
496
+ };
497
+ const workers = [];
498
+ for (let i = 0; i < concurrency; i++) {
499
+ workers.push(worker());
500
+ }
501
+ await Promise.all(workers);
502
+ const filtered = results.filter((user) => user.ips.length > 0);
503
+ return {
504
+ isOk: true,
505
+ data: models_1.GetUsersStatsResponseModel.fromUserStats(filtered),
506
+ };
507
+ }
508
+ catch (error) {
509
+ let message = '';
510
+ if (error instanceof Error) {
511
+ message = error.message;
512
+ }
513
+ return {
514
+ isOk: false,
515
+ ...errors_1.STATS_ERRORS.GET_USERS_STATS_ERROR(message),
516
+ };
517
+ }
518
+ }
519
+ /**
520
+ * Gets the raw gRPC client for direct access to all stats service methods
521
+ * @returns The underlying StatsServiceClient instance
522
+ */
523
+ get rawClient() {
524
+ return this.client;
525
+ }
526
+ }
527
+ exports.StatsService = StatsService;
@@ -0,0 +1,37 @@
1
+ import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
2
+ import { TypedMessage } from "../../common/serial/typed_message";
3
+ export declare const protobufPackage = "xray.app.commander";
4
+ /** Config is the settings for Commander. */
5
+ export interface Config {
6
+ $type: "xray.app.commander.Config";
7
+ /** Tag of the outbound handler that handles grpc connections. */
8
+ tag: string;
9
+ /** Network address of commander grpc service. */
10
+ listen: string;
11
+ /**
12
+ * Services that supported by this server. All services must implement Service
13
+ * interface.
14
+ */
15
+ service: TypedMessage[];
16
+ }
17
+ /** ReflectionConfig is the placeholder config for ReflectionService. */
18
+ export interface ReflectionConfig {
19
+ $type: "xray.app.commander.ReflectionConfig";
20
+ }
21
+ export declare const Config: MessageFns<Config, "xray.app.commander.Config">;
22
+ export declare const ReflectionConfig: MessageFns<ReflectionConfig, "xray.app.commander.ReflectionConfig">;
23
+ type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
24
+ export type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
25
+ [K in Exclude<keyof T, "$type">]?: DeepPartial<T[K]>;
26
+ } : Partial<T>;
27
+ export interface MessageFns<T, V extends string> {
28
+ readonly $type: V;
29
+ encode(message: T, writer?: BinaryWriter): BinaryWriter;
30
+ decode(input: BinaryReader | Uint8Array, length?: number): T;
31
+ fromJSON(object: any): T;
32
+ toJSON(message: T): unknown;
33
+ create(base?: DeepPartial<T>): T;
34
+ fromPartial(object: DeepPartial<T>): T;
35
+ }
36
+ export {};
37
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../src/xray-protos/app/commander/config.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAGjE,eAAO,MAAM,eAAe,uBAAuB,CAAC;AAEpD,4CAA4C;AAC5C,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,2BAA2B,CAAC;IACnC,iEAAiE;IACjE,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,wEAAwE;AACxE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,qCAAqC,CAAC;CAC9C;AAMD,eAAO,MAAM,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,2BAA2B,CA2FlE,CAAC;AAQF,eAAO,MAAM,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,EAAE,qCAAqC,CAuChG,CAAC;AAIF,KAAK,OAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEpF,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,GAAG,CAAC,GAC9C,CAAC,SAAS,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GACtE,CAAC,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAChE,CAAC,SAAS,EAAE,GAAG;KAAG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACvE,OAAO,CAAC,CAAC,CAAC,CAAC;AAMf,MAAM,WAAW,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM;IAC7C,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC;IACxD,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;IAC7D,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IACzB,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;IAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CACxC"}