@long2ice/relayx-backend 0.0.1

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 (88) hide show
  1. package/README.md +13 -0
  2. package/dist/app.d.ts +8592 -0
  3. package/dist/bullmq/index.d.ts +1 -0
  4. package/dist/bullmq/jobs.d.ts +34 -0
  5. package/dist/bullmq/queue.d.ts +6 -0
  6. package/dist/bullmq/queuedash.d.ts +12 -0
  7. package/dist/bullmq/worker.d.ts +1 -0
  8. package/dist/config.d.ts +16 -0
  9. package/dist/db.d.ts +3 -0
  10. package/dist/generated/prisma/zod/index.d.ts +2289 -0
  11. package/dist/index.d.ts +1 -0
  12. package/dist/middlewares/auth.d.ts +3 -0
  13. package/dist/middlewares/ip.d.ts +2 -0
  14. package/dist/middlewares/license.d.ts +2 -0
  15. package/dist/middlewares/plan.d.ts +2 -0
  16. package/dist/routes/admin/license.d.ts +90 -0
  17. package/dist/routes/admin/node.d.ts +919 -0
  18. package/dist/routes/admin/node_group.d.ts +2115 -0
  19. package/dist/routes/admin/pay.d.ts +261 -0
  20. package/dist/routes/admin/plan.d.ts +198 -0
  21. package/dist/routes/admin/plan_coupon.d.ts +92 -0
  22. package/dist/routes/admin/stats.d.ts +77 -0
  23. package/dist/routes/admin/system_config.d.ts +68 -0
  24. package/dist/routes/admin/ticket.d.ts +113 -0
  25. package/dist/routes/admin/topup.d.ts +88 -0
  26. package/dist/routes/admin/topup_activity.d.ts +84 -0
  27. package/dist/routes/admin/tunnel.d.ts +566 -0
  28. package/dist/routes/admin/user.d.ts +299 -0
  29. package/dist/routes/admin/user_plan.d.ts +109 -0
  30. package/dist/routes/bot.d.ts +13 -0
  31. package/dist/routes/dns_provider.d.ts +240 -0
  32. package/dist/routes/health.d.ts +3 -0
  33. package/dist/routes/in_node_group_dns.d.ts +132 -0
  34. package/dist/routes/license.d.ts +50 -0
  35. package/dist/routes/node.d.ts +148 -0
  36. package/dist/routes/node_group.d.ts +1498 -0
  37. package/dist/routes/pay.d.ts +34 -0
  38. package/dist/routes/plan.d.ts +148 -0
  39. package/dist/routes/plan_coupon.d.ts +22 -0
  40. package/dist/routes/system_config.d.ts +87 -0
  41. package/dist/routes/ticket.d.ts +129 -0
  42. package/dist/routes/topup.d.ts +93 -0
  43. package/dist/routes/tunnel.d.ts +742 -0
  44. package/dist/routes/user.d.ts +293 -0
  45. package/dist/schemas/context.d.ts +9 -0
  46. package/dist/schemas/license.d.ts +7 -0
  47. package/dist/schemas/request.d.ts +1181 -0
  48. package/dist/schemas/response.d.ts +2439 -0
  49. package/dist/schemas/socket.io.d.ts +33 -0
  50. package/dist/schemas/tunnel.d.ts +10 -0
  51. package/dist/services/dns/cloudflare.d.ts +12 -0
  52. package/dist/services/dns/huawei.d.ts +12 -0
  53. package/dist/services/dns/index.d.ts +4 -0
  54. package/dist/services/dns/interface.d.ts +8 -0
  55. package/dist/services/dns_provider.d.ts +46 -0
  56. package/dist/services/email.d.ts +11 -0
  57. package/dist/services/fernet.d.ts +2 -0
  58. package/dist/services/in_node_group_dns.d.ts +65 -0
  59. package/dist/services/license.d.ts +87 -0
  60. package/dist/services/logger.d.ts +7 -0
  61. package/dist/services/node.d.ts +39 -0
  62. package/dist/services/node_group.d.ts +75 -0
  63. package/dist/services/notify.d.ts +44 -0
  64. package/dist/services/order.d.ts +3 -0
  65. package/dist/services/pay.d.ts +6 -0
  66. package/dist/services/plan.d.ts +119 -0
  67. package/dist/services/plan_coupon.d.ts +16 -0
  68. package/dist/services/redis.d.ts +59 -0
  69. package/dist/services/stackauth.d.ts +25 -0
  70. package/dist/services/sysinfo.d.ts +7 -0
  71. package/dist/services/system_config.d.ts +7 -0
  72. package/dist/services/telegram.d.ts +8 -0
  73. package/dist/services/ticket.d.ts +134 -0
  74. package/dist/services/topup.d.ts +37 -0
  75. package/dist/services/topup_activity.d.ts +21 -0
  76. package/dist/services/tunnel.d.ts +1235 -0
  77. package/dist/services/user.d.ts +25 -0
  78. package/dist/socket-io/events.d.ts +13 -0
  79. package/dist/socket-io/handlers/disconnect.d.ts +2 -0
  80. package/dist/socket-io/handlers/listen.d.ts +3 -0
  81. package/dist/socket-io/handlers/register.d.ts +2 -0
  82. package/dist/socket-io/handlers/sysinfo.d.ts +2 -0
  83. package/dist/socket-io/index.d.ts +3 -0
  84. package/dist/socket-io/utils.d.ts +8 -0
  85. package/dist/utils/date.d.ts +1 -0
  86. package/dist/utils/ip.d.ts +2 -0
  87. package/dist/utils/uuid.d.ts +1 -0
  88. package/package.json +82 -0
@@ -0,0 +1,59 @@
1
+ import { Redlock, type RedlockUsingContext } from "@sesamecare-oss/redlock";
2
+ import { Redis as RedisClient } from "ioredis";
3
+ import _ from "lodash";
4
+ import type { TunnelType } from "@/generated/prisma/client";
5
+ import type { License } from "../schemas/license";
6
+ import type { Sysinfo } from "../schemas/socket.io";
7
+ import type { TunnelTraffic } from "../schemas/tunnel";
8
+ export declare enum RedisKey {
9
+ USER_SUB = "user:sub",
10
+ USER_SUBSCRIBE = "user:subscribe",
11
+ USER_TUNNEL = "user:tunnel",
12
+ TUNNEL_TRAFFIC = "tunnel:traffic",
13
+ TUNNEL_TRAFFIC_COST = "tunnel:traffic_cost",
14
+ TUNNEL_OUT_LISTEN = "tunnel:out_listen",
15
+ SYSINFO = "sysinfo",
16
+ NODE_GROUP_CONFIG_HASH = "node_group:config_hash",
17
+ TOPUP_ORDER = "topup:order",
18
+ LICENSE = "license",
19
+ LATEST_AGENT_VERSION = "latest_agent_version",
20
+ SOCKET_ID_NODE_ID = "socket_id:node_id",
21
+ NODE_UPGRADE = "node_upgrade",
22
+ NODE_INFO = "node:info"
23
+ }
24
+ export declare const client: RedisClient;
25
+ export declare const lock: Redlock;
26
+ export declare class RedisService {
27
+ private readonly LOCK_EXPIRE;
28
+ setNodeInfo(node_id: string, node: any): Promise<void>;
29
+ getNodeInfo(node_id: string): Promise<any>;
30
+ setNodeConfigHash(node_group_id: number, hash: string): Promise<void>;
31
+ getNodeConfigHash(node_group_id: number): Promise<string | null>;
32
+ setUserSub(sub: string, id: number): Promise<void>;
33
+ getUserSub(sub: string): Promise<number | null>;
34
+ lockUserSubscribe(id: number, callback: (signal: AbortSignal, context: RedlockUsingContext) => Promise<void>): Promise<void>;
35
+ lockUserTunnel(id: number, callback: (signal: AbortSignal, context: RedlockUsingContext) => Promise<void>): Promise<void>;
36
+ incrTunnelTraffics(traffics: TunnelTraffic[]): Promise<void>;
37
+ getTunnelTraffic(is_cost: boolean, tunnel_ids?: number[]): Promise<_.Dictionary<any>>;
38
+ clearTunnelTraffic(tunnel_ids?: number[]): Promise<void>;
39
+ getLatestAgentVersion(): Promise<any>;
40
+ setSysinfo(node_group_id: number, node_id: number, sysinfo: Record<string, Sysinfo>): Promise<void>;
41
+ delNodeGroupOfflineSysinfo(node_group_id: number): Promise<void>;
42
+ delSysinfoByNodeGroups(node_group_ids: number[]): Promise<void>;
43
+ delNodeSysinfo(node_group_id: number, node_id: number): Promise<void>;
44
+ getNodeSysinfo(node_group_id: number, node_id: number): Promise<any>;
45
+ getSysinfo(): Promise<Record<number, Sysinfo[]>>;
46
+ lockTopupOrder(user_id: number, callback: (signal: AbortSignal, context: RedlockUsingContext) => Promise<void>): Promise<void>;
47
+ setOutListen(node_id: number, listen: number, type: TunnelType): Promise<void>;
48
+ getOutListen(node_id: number, type: TunnelType): Promise<string | null>;
49
+ getAllOutListens(): Promise<Record<string, string>>;
50
+ setLicense(license: License): Promise<void>;
51
+ getLicense(): Promise<License | null>;
52
+ delLicense(): Promise<void>;
53
+ setSocketIdNodeId(socket_id: string, node_id: number): Promise<void>;
54
+ getSocketIdNodeId(socket_id: string): Promise<string | null>;
55
+ delSocketIdNodeId(socket_id: string): Promise<void>;
56
+ setNodeUpgrade(version: string): Promise<void>;
57
+ getNodeUpgrade(): Promise<string | null>;
58
+ nodeIsAlive(node_group_id: number, node_id: number): Promise<boolean>;
59
+ }
@@ -0,0 +1,25 @@
1
+ interface CreateUserRequest {
2
+ primary_email: string;
3
+ password: string;
4
+ primary_email_auth_enabled: boolean;
5
+ }
6
+ export interface CreateUserResponse {
7
+ id: string;
8
+ primary_email: string;
9
+ }
10
+ export interface UpdateUserRequest {
11
+ password?: string;
12
+ }
13
+ export interface UserMeResponse {
14
+ id: string;
15
+ primary_email: string;
16
+ }
17
+ export declare class StackAuthService {
18
+ private readonly http;
19
+ constructor();
20
+ createUser(data: CreateUserRequest): Promise<CreateUserResponse>;
21
+ updateUser(uid: string, data: UpdateUserRequest): Promise<void>;
22
+ getUserMe(accessToken: string): Promise<UserMeResponse>;
23
+ getJWKSUrl(): string;
24
+ }
25
+ export {};
@@ -0,0 +1,7 @@
1
+ import { RedisService } from "../services/redis";
2
+ export declare class SysinfoService {
3
+ private readonly redisService;
4
+ constructor(redisService: RedisService);
5
+ cleanUserSysInfo(user_id: number): Promise<void>;
6
+ cleanAllSysInfo(): Promise<void>;
7
+ }
@@ -0,0 +1,7 @@
1
+ import { SystemConfigName } from "@/generated/prisma/client";
2
+ export declare class SystemConfigService {
3
+ getConfig(name: SystemConfigName): Promise<any>;
4
+ setConfigs(configs: Record<SystemConfigName, string>): Promise<void>;
5
+ getConfigs(names: SystemConfigName[]): Promise<Record<import("../generated/prisma/client").$Enums.SystemConfigName, string | number | boolean>>;
6
+ getAllConfigs(): Promise<Record<import("../generated/prisma/client").$Enums.SystemConfigName, string>>;
7
+ }
@@ -0,0 +1,8 @@
1
+ export declare class TelegramService {
2
+ private bot?;
3
+ constructor();
4
+ sendMessage(tg_id: number, message: string): Promise<void>;
5
+ getBotInfo(): Promise<string | undefined>;
6
+ start(): void;
7
+ stop(): void;
8
+ }
@@ -0,0 +1,134 @@
1
+ import { TicketStatus } from "@/generated/prisma/client";
2
+ import { NotifyService } from "../services/notify";
3
+ export declare class TicketService {
4
+ private readonly notifyService;
5
+ constructor(notifyService: NotifyService);
6
+ createTicket(userId: number, title: string, content: string): Promise<{
7
+ id: number;
8
+ created_at: Date;
9
+ updated_at: Date;
10
+ user_id: number;
11
+ status: import("../generated/prisma/client").$Enums.TicketStatus;
12
+ title: string;
13
+ content: string;
14
+ }>;
15
+ getUserTickets(userId: number, page: number, perPage: number, sort?: Array<{
16
+ id: string;
17
+ desc: boolean;
18
+ }>, status?: TicketStatus): Promise<{
19
+ data: {
20
+ id: number;
21
+ created_at: Date;
22
+ updated_at: Date;
23
+ user_id: number;
24
+ status: import("../generated/prisma/client").$Enums.TicketStatus;
25
+ title: string;
26
+ content: string;
27
+ }[];
28
+ total: number;
29
+ }>;
30
+ getUserTicket(userId: number, ticketId: number): Promise<{
31
+ replies: ({
32
+ user: {
33
+ email: string;
34
+ };
35
+ } & {
36
+ id: number;
37
+ created_at: Date;
38
+ updated_at: Date;
39
+ user_id: number;
40
+ content: string;
41
+ is_admin: boolean;
42
+ ticket_id: number;
43
+ })[];
44
+ } & {
45
+ id: number;
46
+ created_at: Date;
47
+ updated_at: Date;
48
+ user_id: number;
49
+ status: import("../generated/prisma/client").$Enums.TicketStatus;
50
+ title: string;
51
+ content: string;
52
+ }>;
53
+ updateUserTicketStatus(userId: number, ticketId: number, status: TicketStatus): Promise<{
54
+ id: number;
55
+ created_at: Date;
56
+ updated_at: Date;
57
+ user_id: number;
58
+ status: import("../generated/prisma/client").$Enums.TicketStatus;
59
+ title: string;
60
+ content: string;
61
+ }>;
62
+ userReply(userId: number, ticketId: number, content: string): Promise<{
63
+ id: number;
64
+ created_at: Date;
65
+ updated_at: Date;
66
+ user_id: number;
67
+ content: string;
68
+ is_admin: boolean;
69
+ ticket_id: number;
70
+ }>;
71
+ adminGetTickets(page: number, perPage: number, sort?: Array<{
72
+ id: string;
73
+ desc: boolean;
74
+ }>, status?: TicketStatus): Promise<{
75
+ data: ({
76
+ user: {
77
+ email: string;
78
+ };
79
+ } & {
80
+ id: number;
81
+ created_at: Date;
82
+ updated_at: Date;
83
+ user_id: number;
84
+ status: import("../generated/prisma/client").$Enums.TicketStatus;
85
+ title: string;
86
+ content: string;
87
+ })[];
88
+ total: number;
89
+ }>;
90
+ adminGetTicket(ticketId: number): Promise<{
91
+ user: {
92
+ email: string;
93
+ };
94
+ replies: ({
95
+ user: {
96
+ email: string;
97
+ };
98
+ } & {
99
+ id: number;
100
+ created_at: Date;
101
+ updated_at: Date;
102
+ user_id: number;
103
+ content: string;
104
+ is_admin: boolean;
105
+ ticket_id: number;
106
+ })[];
107
+ } & {
108
+ id: number;
109
+ created_at: Date;
110
+ updated_at: Date;
111
+ user_id: number;
112
+ status: import("../generated/prisma/client").$Enums.TicketStatus;
113
+ title: string;
114
+ content: string;
115
+ }>;
116
+ adminReply(adminId: number, ticketId: number, content: string): Promise<{
117
+ id: number;
118
+ created_at: Date;
119
+ updated_at: Date;
120
+ user_id: number;
121
+ content: string;
122
+ is_admin: boolean;
123
+ ticket_id: number;
124
+ }>;
125
+ adminUpdateStatus(ticketId: number, status: TicketStatus): Promise<{
126
+ id: number;
127
+ created_at: Date;
128
+ updated_at: Date;
129
+ user_id: number;
130
+ status: import("../generated/prisma/client").$Enums.TicketStatus;
131
+ title: string;
132
+ content: string;
133
+ }>;
134
+ }
@@ -0,0 +1,37 @@
1
+ import { Prisma } from "@/generated/prisma/client";
2
+ import { TopupOrderQuerySchema } from "../schemas/request";
3
+ import { LicenseService } from "../services/license";
4
+ import { SystemConfigService } from "../services/system_config";
5
+ import { z } from "zod";
6
+ export declare class TopupService {
7
+ private readonly licenseService;
8
+ private readonly systemConfig;
9
+ constructor(licenseService: LicenseService, systemConfig: SystemConfigService);
10
+ processReferralCommission(tx: Prisma.TransactionClient, userId: number, amount: number, commissionRate?: number): Promise<void>;
11
+ getTopupOrders(query: z.infer<typeof TopupOrderQuerySchema>, user_id?: number): Promise<{
12
+ data: ({
13
+ user: {
14
+ email: string;
15
+ };
16
+ payment: {
17
+ name: string;
18
+ };
19
+ } & {
20
+ id: number;
21
+ created_at: Date;
22
+ updated_at: Date;
23
+ user_id: number;
24
+ balance: number;
25
+ status: import("../generated/prisma/client").$Enums.TopupOrderStatus;
26
+ price: number;
27
+ bonus: number;
28
+ payment_id: number;
29
+ pay_url: string;
30
+ order_id: string;
31
+ trade_id: string | null;
32
+ })[];
33
+ total: number;
34
+ }>;
35
+ cancel(id: number, user_id?: number): Promise<void>;
36
+ markAsPaid(id: number): Promise<void>;
37
+ }
@@ -0,0 +1,21 @@
1
+ import { TopupActivity } from "@/generated/prisma/client";
2
+ import { TopupActivityQuerySchema } from "../schemas/request";
3
+ import { z } from "zod";
4
+ export declare class TopupActivityService {
5
+ getTopupActivities(query: z.infer<typeof TopupActivityQuerySchema>): Promise<{
6
+ data: {
7
+ id: number;
8
+ created_at: Date;
9
+ updated_at: Date;
10
+ type: import("../generated/prisma/client").$Enums.TopupActivityType;
11
+ value: number;
12
+ min_amount: number | null;
13
+ max_amount: number | null;
14
+ valid_start: Date | null;
15
+ valid_end: Date | null;
16
+ }[];
17
+ total: number;
18
+ }>;
19
+ getActiveTopupActivities(): Promise<TopupActivity[]>;
20
+ calculateBonus(price: number): Promise<number>;
21
+ }