@remnawave/xtls-sdk 0.0.1 → 0.0.3

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 (86) hide show
  1. package/README.md +164 -53
  2. package/build/src/common/errors/handler/handler.errors.d.ts +23 -0
  3. package/build/src/common/errors/handler/handler.errors.d.ts.map +1 -0
  4. package/build/src/common/errors/handler/handler.errors.js +22 -0
  5. package/build/src/common/errors/handler/index.d.ts +2 -0
  6. package/build/src/common/errors/handler/index.d.ts.map +1 -0
  7. package/build/src/common/errors/handler/index.js +17 -0
  8. package/build/src/common/errors/index.d.ts +1 -0
  9. package/build/src/common/errors/index.d.ts.map +1 -1
  10. package/build/src/common/errors/index.js +1 -0
  11. package/build/src/common/utils/create-typed-message/create-typed-message.d.ts +5 -0
  12. package/build/src/common/utils/create-typed-message/create-typed-message.d.ts.map +1 -0
  13. package/build/src/common/utils/create-typed-message/create-typed-message.js +10 -0
  14. package/build/src/common/utils/decode-user/constants/account-types.d.ts +39 -0
  15. package/build/src/common/utils/decode-user/constants/account-types.d.ts.map +1 -0
  16. package/build/src/common/utils/decode-user/constants/account-types.js +59 -0
  17. package/build/src/common/utils/decode-user/constants/index.d.ts +2 -0
  18. package/build/src/common/utils/decode-user/constants/index.d.ts.map +1 -0
  19. package/build/src/common/utils/decode-user/constants/index.js +17 -0
  20. package/build/src/common/utils/decode-user/decode-user.d.ts +37 -0
  21. package/build/src/common/utils/decode-user/decode-user.d.ts.map +1 -0
  22. package/build/src/common/utils/decode-user/decode-user.js +56 -0
  23. package/build/src/common/utils/decode-user/types/account-type-keys.type.d.ts +3 -0
  24. package/build/src/common/utils/decode-user/types/account-type-keys.type.d.ts.map +1 -0
  25. package/build/src/common/utils/decode-user/types/account-type-keys.type.js +2 -0
  26. package/build/src/common/utils/decode-user/types/account-type-mapping.type.d.ts +4 -0
  27. package/build/src/common/utils/decode-user/types/account-type-mapping.type.d.ts.map +1 -0
  28. package/build/src/common/utils/decode-user/types/account-type-mapping.type.js +2 -0
  29. package/build/src/common/utils/decode-user/types/decoded-user.type.d.ts +18 -0
  30. package/build/src/common/utils/decode-user/types/decoded-user.type.d.ts.map +1 -0
  31. package/build/src/common/utils/decode-user/types/decoded-user.type.js +2 -0
  32. package/build/src/common/utils/decode-user/types/index.d.ts +4 -0
  33. package/build/src/common/utils/decode-user/types/index.d.ts.map +1 -0
  34. package/build/src/common/utils/decode-user/types/index.js +19 -0
  35. package/build/src/handler/handler.service.d.ts +108 -0
  36. package/build/src/handler/handler.service.d.ts.map +1 -1
  37. package/build/src/handler/handler.service.js +402 -0
  38. package/build/src/handler/interfaces/add-user/add-http-user.interface.d.ts +8 -0
  39. package/build/src/handler/interfaces/add-user/add-http-user.interface.d.ts.map +1 -0
  40. package/build/src/handler/interfaces/add-user/add-http-user.interface.js +2 -0
  41. package/build/src/handler/interfaces/add-user/add-shadowsocks-user.interface.d.ts +10 -0
  42. package/build/src/handler/interfaces/add-user/add-shadowsocks-user.interface.d.ts.map +1 -0
  43. package/build/src/handler/interfaces/add-user/add-shadowsocks-user.interface.js +2 -0
  44. package/build/src/handler/interfaces/add-user/add-shadowsocks2022-user.interface.d.ts +7 -0
  45. package/build/src/handler/interfaces/add-user/add-shadowsocks2022-user.interface.d.ts.map +1 -0
  46. package/build/src/handler/interfaces/add-user/add-shadowsocks2022-user.interface.js +2 -0
  47. package/build/src/handler/interfaces/add-user/add-socks-user.interface.d.ts +8 -0
  48. package/build/src/handler/interfaces/add-user/add-socks-user.interface.d.ts.map +1 -0
  49. package/build/src/handler/interfaces/add-user/add-socks-user.interface.js +2 -0
  50. package/build/src/handler/interfaces/add-user/add-trojan-user.interface.d.ts +7 -0
  51. package/build/src/handler/interfaces/add-user/add-trojan-user.interface.d.ts.map +1 -0
  52. package/build/src/handler/interfaces/add-user/add-trojan-user.interface.js +2 -0
  53. package/build/src/handler/interfaces/add-user/add-vless-user.interface.d.ts +8 -0
  54. package/build/src/handler/interfaces/add-user/add-vless-user.interface.d.ts.map +1 -0
  55. package/build/src/handler/interfaces/add-user/add-vless-user.interface.js +2 -0
  56. package/build/src/handler/interfaces/add-user/index.d.ts +7 -0
  57. package/build/src/handler/interfaces/add-user/index.d.ts.map +1 -0
  58. package/build/src/handler/interfaces/add-user/index.js +22 -0
  59. package/build/src/handler/interfaces/index.d.ts +2 -0
  60. package/build/src/handler/interfaces/index.d.ts.map +1 -0
  61. package/build/src/handler/interfaces/index.js +17 -0
  62. package/build/src/handler/models/add-user/add-user.response.model.d.ts +5 -0
  63. package/build/src/handler/models/add-user/add-user.response.model.d.ts.map +1 -0
  64. package/build/src/handler/models/add-user/add-user.response.model.js +9 -0
  65. package/build/src/handler/models/add-user/index.d.ts +2 -0
  66. package/build/src/handler/models/add-user/index.d.ts.map +1 -0
  67. package/build/src/handler/models/add-user/index.js +17 -0
  68. package/build/src/handler/models/get-inbound-users/get-inbound-users.response.model.d.ts +7 -0
  69. package/build/src/handler/models/get-inbound-users/get-inbound-users.response.model.d.ts.map +1 -0
  70. package/build/src/handler/models/get-inbound-users/get-inbound-users.response.model.js +10 -0
  71. package/build/src/handler/models/get-inbound-users/index.d.ts +2 -0
  72. package/build/src/handler/models/get-inbound-users/index.d.ts.map +1 -0
  73. package/build/src/handler/models/get-inbound-users/index.js +17 -0
  74. package/build/src/handler/models/index.d.ts +4 -0
  75. package/build/src/handler/models/index.d.ts.map +1 -0
  76. package/build/src/handler/models/index.js +19 -0
  77. package/build/src/handler/models/remove-user/index.d.ts +2 -0
  78. package/build/src/handler/models/remove-user/index.d.ts.map +1 -0
  79. package/build/src/handler/models/remove-user/index.js +17 -0
  80. package/build/src/handler/models/remove-user/remove-user.response.model.d.ts +5 -0
  81. package/build/src/handler/models/remove-user/remove-user.response.model.d.ts.map +1 -0
  82. package/build/src/handler/models/remove-user/remove-user.response.model.js +9 -0
  83. package/build/tests/stats.spec.d.ts +2 -0
  84. package/build/tests/stats.spec.d.ts.map +1 -0
  85. package/build/tests/stats.spec.js +86 -0
  86. package/package.json +43 -4
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,8 @@
1
+ export interface IAddVlessUser {
2
+ username: string;
3
+ level: number;
4
+ uuid: string;
5
+ flow: 'xtls-rprx-vision' | '';
6
+ tag: string;
7
+ }
8
+ //# sourceMappingURL=add-vless-user.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-vless-user.interface.d.ts","sourceRoot":"","sources":["../../../../../src/handler/interfaces/add-user/add-vless-user.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,kBAAkB,GAAG,EAAE,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ export * from './add-trojan-user.interface';
2
+ export * from './add-vless-user.interface';
3
+ export * from './add-shadowsocks-user.interface';
4
+ export * from './add-shadowsocks2022-user.interface';
5
+ export * from './add-socks-user.interface';
6
+ export * from './add-http-user.interface';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/handler/interfaces/add-user/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./add-trojan-user.interface"), exports);
18
+ __exportStar(require("./add-vless-user.interface"), exports);
19
+ __exportStar(require("./add-shadowsocks-user.interface"), exports);
20
+ __exportStar(require("./add-shadowsocks2022-user.interface"), exports);
21
+ __exportStar(require("./add-socks-user.interface"), exports);
22
+ __exportStar(require("./add-http-user.interface"), exports);
@@ -0,0 +1,2 @@
1
+ export * from './add-user';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/handler/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./add-user"), exports);
@@ -0,0 +1,5 @@
1
+ export declare class AddUserResponseModel {
2
+ isAdded: boolean;
3
+ constructor(isAdded: boolean);
4
+ }
5
+ //# sourceMappingURL=add-user.response.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-user.response.model.d.ts","sourceRoot":"","sources":["../../../../../src/handler/models/add-user/add-user.response.model.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAoB;IACtB,OAAO,EAAE,OAAO,CAAC;gBACZ,OAAO,EAAE,OAAO;CAG/B"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AddUserResponseModel = void 0;
4
+ class AddUserResponseModel {
5
+ constructor(isAdded) {
6
+ this.isAdded = isAdded;
7
+ }
8
+ }
9
+ exports.AddUserResponseModel = AddUserResponseModel;
@@ -0,0 +1,2 @@
1
+ export * from './add-user.response.model';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/handler/models/add-user/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./add-user.response.model"), exports);
@@ -0,0 +1,7 @@
1
+ import { DecodedUser } from '../../../common/utils/decode-user/types/decoded-user.type';
2
+ import { User } from '../../../xray-protos/common/protocol/user';
3
+ export declare class GetInboundUsersResponseModel {
4
+ users: DecodedUser[];
5
+ constructor(users: User[]);
6
+ }
7
+ //# sourceMappingURL=get-inbound-users.response.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-inbound-users.response.model.d.ts","sourceRoot":"","sources":["../../../../../src/handler/models/get-inbound-users/get-inbound-users.response.model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2DAA2D,CAAC;AAExF,OAAO,EAAE,IAAI,EAAE,MAAM,2CAA2C,CAAC;AAEjE,qBAAa,4BAA4B;IAC9B,KAAK,EAAE,WAAW,EAAE,CAAC;gBAEhB,KAAK,EAAE,IAAI,EAAE;CAG5B"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetInboundUsersResponseModel = void 0;
4
+ const decode_user_1 = require("../../../common/utils/decode-user/decode-user");
5
+ class GetInboundUsersResponseModel {
6
+ constructor(users) {
7
+ this.users = users.map(decode_user_1.decodeUser);
8
+ }
9
+ }
10
+ exports.GetInboundUsersResponseModel = GetInboundUsersResponseModel;
@@ -0,0 +1,2 @@
1
+ export * from './get-inbound-users.response.model';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/handler/models/get-inbound-users/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./get-inbound-users.response.model"), exports);
@@ -0,0 +1,4 @@
1
+ export * from './get-inbound-users';
2
+ export * from './add-user';
3
+ export * from './remove-user';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/handler/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./get-inbound-users"), exports);
18
+ __exportStar(require("./add-user"), exports);
19
+ __exportStar(require("./remove-user"), exports);
@@ -0,0 +1,2 @@
1
+ export * from './remove-user.response.model';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/handler/models/remove-user/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./remove-user.response.model"), exports);
@@ -0,0 +1,5 @@
1
+ export declare class RemoveUserResponseModel {
2
+ readonly isDeleted: boolean;
3
+ constructor(isDeleted: boolean);
4
+ }
5
+ //# sourceMappingURL=remove-user.response.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-user.response.model.d.ts","sourceRoot":"","sources":["../../../../../src/handler/models/remove-user/remove-user.response.model.ts"],"names":[],"mappings":"AAAA,qBAAa,uBAAuB;IAChC,SAAgB,SAAS,EAAE,OAAO,CAAC;gBAEvB,SAAS,EAAE,OAAO;CAGjC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RemoveUserResponseModel = void 0;
4
+ class RemoveUserResponseModel {
5
+ constructor(isDeleted) {
6
+ this.isDeleted = isDeleted;
7
+ }
8
+ }
9
+ exports.RemoveUserResponseModel = RemoveUserResponseModel;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stats.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.spec.d.ts","sourceRoot":"","sources":["../../tests/stats.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_1 = require("../index");
4
+ describe('StatsService', () => {
5
+ const validIp = '127.0.0.1';
6
+ const validPort = '8080';
7
+ let api;
8
+ beforeEach(() => {
9
+ api = new index_1.XtlsApi(validIp, validPort);
10
+ });
11
+ describe('System Stats', () => {
12
+ it('should get system stats', async () => {
13
+ const response = await api.stats.getSysStats();
14
+ expect(response.isOk).toBe(true);
15
+ if (response.isOk) {
16
+ expect(response.data).toBeDefined();
17
+ }
18
+ });
19
+ });
20
+ describe('User Stats', () => {
21
+ const testUsername = 'testUser';
22
+ it('should get all users stats', async () => {
23
+ const response = await api.stats.getAllUsersStats();
24
+ expect(response.isOk).toBe(true);
25
+ if (response.isOk) {
26
+ expect(Array.isArray(response.data?.users)).toBe(true);
27
+ }
28
+ });
29
+ it('should get all users stats with reset', async () => {
30
+ const response = await api.stats.getAllUsersStats(true);
31
+ expect(response.isOk).toBe(true);
32
+ });
33
+ it('should get specific user stats', async () => {
34
+ const response = await api.stats.getUserStats(testUsername);
35
+ expect(response.isOk).toBe(true);
36
+ });
37
+ it('should get user online status', async () => {
38
+ const response = await api.stats.getUserOnlineStatus(testUsername);
39
+ expect(response.isOk).toBe(true);
40
+ if (response.isOk) {
41
+ expect(typeof response.data?.online).toBe('boolean');
42
+ }
43
+ });
44
+ });
45
+ describe('Inbound Stats', () => {
46
+ const testInbound = 'testInbound';
47
+ it('should get all inbounds stats', async () => {
48
+ const response = await api.stats.getAllInboundsStats();
49
+ expect(response.isOk).toBe(true);
50
+ if (response.isOk) {
51
+ expect(Array.isArray(response.data?.inbounds)).toBe(true);
52
+ }
53
+ });
54
+ it('should get specific inbound stats', async () => {
55
+ const response = await api.stats.getInboundStats(testInbound);
56
+ expect(response.isOk).toBe(true);
57
+ });
58
+ it('should get all inbounds stats with reset', async () => {
59
+ const response = await api.stats.getAllInboundsStats(true);
60
+ expect(response.isOk).toBe(true);
61
+ });
62
+ });
63
+ describe('Outbound Stats', () => {
64
+ const testOutbound = 'testOutbound';
65
+ it('should get all outbounds stats', async () => {
66
+ const response = await api.stats.getAllOutboundsStats();
67
+ expect(response.isOk).toBe(true);
68
+ if (response.isOk) {
69
+ expect(Array.isArray(response.data?.outbounds)).toBe(true);
70
+ }
71
+ });
72
+ it('should get specific outbound stats', async () => {
73
+ const response = await api.stats.getOutboundStats(testOutbound);
74
+ expect(response.isOk).toBe(true);
75
+ });
76
+ it('should get all outbounds stats with reset', async () => {
77
+ const response = await api.stats.getAllOutboundsStats(true);
78
+ expect(response.isOk).toBe(true);
79
+ });
80
+ });
81
+ afterEach(async () => {
82
+ if (api?.channel) {
83
+ await api.channel.close();
84
+ }
85
+ });
86
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnawave/xtls-sdk",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "A Typescript SDK for XRAY (XTLS) Core GRPC Api",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -9,11 +9,29 @@
9
9
  ],
10
10
  "scripts": {
11
11
  "prepublish": "rm -rf build && tsc",
12
- "build": "tsc"
12
+ "build": "tsc",
13
+ "test": "jest",
14
+ "test:watch": "jest --watch"
13
15
  },
14
16
  "author": "Remnawave",
15
17
  "license": "MIT",
16
- "keywords": [],
18
+ "keywords": [
19
+ "xtls",
20
+ "grpc",
21
+ "sdk",
22
+ "xray core api",
23
+ "typescript",
24
+ "xray",
25
+ "xray-core",
26
+ "api",
27
+ "client",
28
+ "network",
29
+ "proxy",
30
+ "protocol",
31
+ "trojan",
32
+ "vless",
33
+ "vmess"
34
+ ],
17
35
  "dependencies": {
18
36
  "long": "^5.2.3",
19
37
  "nice-grpc": "^2.1.10",
@@ -21,8 +39,29 @@
21
39
  "tar": "^7.4.3"
22
40
  },
23
41
  "devDependencies": {
42
+ "@types/jest": "^29.5.2",
24
43
  "@types/node": "^22.9.0",
25
44
  "grpc-tools": "^1.12.4",
26
- "ts-proto": "^2.2.7"
45
+ "ts-jest": "^29.1.0",
46
+ "jest": "^29.5.0",
47
+ "ts-proto": "^2.2.7",
48
+ "typescript": "^5.6.3"
49
+ },
50
+ "jest": {
51
+ "moduleFileExtensions": [
52
+ "js",
53
+ "json",
54
+ "ts"
55
+ ],
56
+ "rootDir": ".",
57
+ "testRegex": ".*\\.spec\\.ts$",
58
+ "transform": {
59
+ "^.+\\.(t|j)s$": "ts-jest"
60
+ },
61
+ "collectCoverageFrom": [
62
+ "**/*.(t|j)s"
63
+ ],
64
+ "coverageDirectory": "./coverage",
65
+ "testEnvironment": "node"
27
66
  }
28
67
  }