@remnawave/backend-contract 2.1.81 → 2.2.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.
@@ -11,5 +11,8 @@ export declare const SYSTEM_ROUTES: {
11
11
  readonly ENCRYPT_HAPP_CRYPTO_LINK: "tools/happ/encrypt";
12
12
  };
13
13
  readonly HEALTH: "health";
14
+ readonly TESTERS: {
15
+ readonly SRR_MATCHER: "testers/srr-matcher";
16
+ };
14
17
  };
15
18
  //# sourceMappingURL=system.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../../api/controllers/system.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,EAAG,QAAiB,CAAC;AAEnD,eAAO,MAAM,aAAa;;;;;;;;;;;;CAYhB,CAAC"}
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../../api/controllers/system.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,EAAG,QAAiB,CAAC;AAEnD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;CAehB,CAAC"}
@@ -14,4 +14,7 @@ exports.SYSTEM_ROUTES = {
14
14
  ENCRYPT_HAPP_CRYPTO_LINK: 'tools/happ/encrypt',
15
15
  },
16
16
  HEALTH: 'health',
17
+ TESTERS: {
18
+ SRR_MATCHER: 'testers/srr-matcher',
19
+ },
17
20
  };
@@ -118,6 +118,9 @@ export declare const REST_API: {
118
118
  readonly GENERATE_X25519: "/api/system/tools/x25519/generate";
119
119
  readonly ENCRYPT_HAPP_CRYPTO_LINK: "/api/system/tools/happ/encrypt";
120
120
  };
121
+ readonly TESTERS: {
122
+ readonly SRR_MATCHER: "/api/system/testers/srr-matcher";
123
+ };
121
124
  };
122
125
  readonly SUBSCRIPTION_TEMPLATE: {
123
126
  readonly GET: (templateType: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../api/routes.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,EAAG,MAAe,CAAC;AACpC,eAAO,MAAM,YAAY,EAAG,UAAmB,CAAC;AAChD,eAAO,MAAM,WAAW,EAAG,SAAkB,CAAC;AAC9C,eAAO,MAAM,cAAc,EAAG,SAAkB,CAAC;AAEjD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;gCAcE,MAAM;;;;;;;;;qCAYD,MAAM;;gCAGX,MAAM;;oCAIF,MAAM;qCAIL,MAAM;qCAIN,MAAM;;;;;;iDAUM,MAAM;;;;;;;;gCAWvB,MAAM;qCAGD,MAAM;0CAED,MAAM;sDAEM,MAAM;;qCAMvB,MAAM;oCAIP,MAAM;2CAIC,MAAM;iDAIA,MAAM;;;6CAOV,MAAM;0CAIT,MAAM;2DAIW,MAAM;+CAIlB,MAAM;oCAIjB,MAAM;gCAIV,MAAM;;;;;;;;;;;;;;;gDAmBU,MAAM;;;;;;;kCAWpB,MAAM;0CAEE,MAAM;uCAET,MAAM;;;;;;qCASR,MAAM;gCAEX,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAgCD,MAAM;;;;;;;;;;mDAaQ,MAAM;;;;;;;;0CAWf,MAAM;kCAId,MAAM;6CAIK,MAAM;iDAIF,MAAM;;;;;;;qCAUlB,MAAM;gCAIX,MAAM;sDAIgB,MAAM;;;;;;;qCAUvB,MAAM;gCAIX,MAAM;0CAII,MAAM;;uCAKT,MAAM;0CAEH,MAAM;;;;;;;yCASP,MAAM;8CAED,MAAM;;;;6CAMP,MAAM;;;gDAKH,MAAM;;;;;;;;;;;;CAanC,CAAC"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../api/routes.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,EAAG,MAAe,CAAC;AACpC,eAAO,MAAM,YAAY,EAAG,UAAmB,CAAC;AAChD,eAAO,MAAM,WAAW,EAAG,SAAkB,CAAC;AAC9C,eAAO,MAAM,cAAc,EAAG,SAAkB,CAAC;AAEjD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;gCAcE,MAAM;;;;;;;;;qCAYD,MAAM;;gCAGX,MAAM;;oCAIF,MAAM;qCAIL,MAAM;qCAIN,MAAM;;;;;;iDAUM,MAAM;;;;;;;;gCAWvB,MAAM;qCAGD,MAAM;0CAED,MAAM;sDAEM,MAAM;;qCAMvB,MAAM;oCAIP,MAAM;2CAIC,MAAM;iDAIA,MAAM;;;6CAOV,MAAM;0CAIT,MAAM;2DAIW,MAAM;+CAIlB,MAAM;oCAIjB,MAAM;gCAIV,MAAM;;;;;;;;;;;;;;;gDAmBU,MAAM;;;;;;;kCAWpB,MAAM;0CAEE,MAAM;uCAET,MAAM;;;;;;qCASR,MAAM;gCAEX,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAmCD,MAAM;;;;;;;;;;mDAaQ,MAAM;;;;;;;;0CAWf,MAAM;kCAId,MAAM;6CAIK,MAAM;iDAIF,MAAM;;;;;;;qCAUlB,MAAM;gCAIX,MAAM;sDAIgB,MAAM;;;;;;;qCAUvB,MAAM;gCAIX,MAAM;0CAII,MAAM;;uCAKT,MAAM;0CAEH,MAAM;;;;;;;yCASP,MAAM;8CAED,MAAM;;;;6CAMP,MAAM;;;gDAKH,MAAM;;;;;;;;;;;;CAanC,CAAC"}
@@ -155,6 +155,9 @@ exports.REST_API = {
155
155
  GENERATE_X25519: `${exports.ROOT}/${CONTROLLERS.SYSTEM_CONTROLLER}/${CONTROLLERS.SYSTEM_ROUTES.TOOLS.GENERATE_X25519}`,
156
156
  ENCRYPT_HAPP_CRYPTO_LINK: `${exports.ROOT}/${CONTROLLERS.SYSTEM_CONTROLLER}/${CONTROLLERS.SYSTEM_ROUTES.TOOLS.ENCRYPT_HAPP_CRYPTO_LINK}`,
157
157
  },
158
+ TESTERS: {
159
+ SRR_MATCHER: `${exports.ROOT}/${CONTROLLERS.SYSTEM_CONTROLLER}/${CONTROLLERS.SYSTEM_ROUTES.TESTERS.SRR_MATCHER}`,
160
+ },
158
161
  },
159
162
  SUBSCRIPTION_TEMPLATE: {
160
163
  GET: (templateType) => `${exports.ROOT}/${CONTROLLERS.SUBSCRIPTION_TEMPLATE_CONTROLLER}/${CONTROLLERS.SUBSCRIPTION_TEMPLATE_ROUTES.GET(templateType)}`,
@@ -3,5 +3,6 @@ export * from './get-nodes-metrics.command';
3
3
  export * from './get-nodes-statistics';
4
4
  export * from './get-remnawave-health.command';
5
5
  export * from './get-stats.command';
6
+ export * from './testers';
6
7
  export * from './tools';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../commands/system/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../commands/system/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
@@ -19,4 +19,5 @@ __exportStar(require("./get-nodes-metrics.command"), exports);
19
19
  __exportStar(require("./get-nodes-statistics"), exports);
20
20
  __exportStar(require("./get-remnawave-health.command"), exports);
21
21
  __exportStar(require("./get-stats.command"), exports);
22
+ __exportStar(require("./testers"), exports);
22
23
  __exportStar(require("./tools"), exports);
@@ -0,0 +1,2 @@
1
+ export * from './test-srr-matcher.command';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../commands/system/testers/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,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("./test-srr-matcher.command"), exports);
@@ -0,0 +1,438 @@
1
+ import { z } from 'zod';
2
+ export declare namespace TestSrrMatcherCommand {
3
+ const url: "/api/system/testers/srr-matcher";
4
+ const TSQ_url: "/api/system/testers/srr-matcher";
5
+ const endpointDetails: import("../../../constants").EndpointDetails;
6
+ const RequestSchema: z.ZodObject<{
7
+ responseRules: z.ZodObject<{
8
+ version: z.ZodNativeEnum<{
9
+ readonly 1: "1";
10
+ }>;
11
+ rules: z.ZodArray<z.ZodObject<{
12
+ name: z.ZodString;
13
+ description: z.ZodOptional<z.ZodString>;
14
+ enabled: z.ZodBoolean;
15
+ operator: z.ZodNativeEnum<{
16
+ readonly AND: "AND";
17
+ readonly OR: "OR";
18
+ }>;
19
+ conditions: z.ZodArray<z.ZodObject<{
20
+ headerName: z.ZodString;
21
+ operator: z.ZodNativeEnum<{
22
+ readonly EQUALS: "EQUALS";
23
+ readonly NOT_EQUALS: "NOT_EQUALS";
24
+ readonly CONTAINS: "CONTAINS";
25
+ readonly NOT_CONTAINS: "NOT_CONTAINS";
26
+ readonly STARTS_WITH: "STARTS_WITH";
27
+ readonly NOT_STARTS_WITH: "NOT_STARTS_WITH";
28
+ readonly ENDS_WITH: "ENDS_WITH";
29
+ readonly NOT_ENDS_WITH: "NOT_ENDS_WITH";
30
+ readonly REGEX: "REGEX";
31
+ readonly NOT_REGEX: "NOT_REGEX";
32
+ }>;
33
+ value: z.ZodString;
34
+ caseSensitive: z.ZodBoolean;
35
+ }, "strip", z.ZodTypeAny, {
36
+ value: string;
37
+ headerName: string;
38
+ operator: "EQUALS" | "NOT_EQUALS" | "CONTAINS" | "NOT_CONTAINS" | "STARTS_WITH" | "NOT_STARTS_WITH" | "ENDS_WITH" | "NOT_ENDS_WITH" | "REGEX" | "NOT_REGEX";
39
+ caseSensitive: boolean;
40
+ }, {
41
+ value: string;
42
+ headerName: string;
43
+ operator: "EQUALS" | "NOT_EQUALS" | "CONTAINS" | "NOT_CONTAINS" | "STARTS_WITH" | "NOT_STARTS_WITH" | "ENDS_WITH" | "NOT_ENDS_WITH" | "REGEX" | "NOT_REGEX";
44
+ caseSensitive: boolean;
45
+ }>, "many">;
46
+ responseType: z.ZodNativeEnum<{
47
+ readonly BROWSER: "BROWSER";
48
+ readonly BLOCK: "BLOCK";
49
+ readonly STATUS_CODE_404: "STATUS_CODE_404";
50
+ readonly STATUS_CODE_451: "STATUS_CODE_451";
51
+ readonly SOCKET_DROP: "SOCKET_DROP";
52
+ readonly XRAY_JSON: "XRAY_JSON";
53
+ readonly XRAY_BASE64: "XRAY_BASE64";
54
+ readonly MIHOMO: "MIHOMO";
55
+ readonly STASH: "STASH";
56
+ readonly CLASH: "CLASH";
57
+ readonly SINGBOX: "SINGBOX";
58
+ }>;
59
+ responseModifications: z.ZodOptional<z.ZodObject<{
60
+ headers: z.ZodArray<z.ZodObject<{
61
+ key: z.ZodString;
62
+ value: z.ZodString;
63
+ }, "strip", z.ZodTypeAny, {
64
+ value: string;
65
+ key: string;
66
+ }, {
67
+ value: string;
68
+ key: string;
69
+ }>, "many">;
70
+ }, "strip", z.ZodTypeAny, {
71
+ headers: {
72
+ value: string;
73
+ key: string;
74
+ }[];
75
+ }, {
76
+ headers: {
77
+ value: string;
78
+ key: string;
79
+ }[];
80
+ }>>;
81
+ }, "strip", z.ZodTypeAny, {
82
+ name: string;
83
+ operator: "AND" | "OR";
84
+ enabled: boolean;
85
+ conditions: {
86
+ value: string;
87
+ headerName: string;
88
+ operator: "EQUALS" | "NOT_EQUALS" | "CONTAINS" | "NOT_CONTAINS" | "STARTS_WITH" | "NOT_STARTS_WITH" | "ENDS_WITH" | "NOT_ENDS_WITH" | "REGEX" | "NOT_REGEX";
89
+ caseSensitive: boolean;
90
+ }[];
91
+ responseType: "STASH" | "SINGBOX" | "MIHOMO" | "XRAY_JSON" | "CLASH" | "XRAY_BASE64" | "BROWSER" | "BLOCK" | "STATUS_CODE_404" | "STATUS_CODE_451" | "SOCKET_DROP";
92
+ description?: string | undefined;
93
+ responseModifications?: {
94
+ headers: {
95
+ value: string;
96
+ key: string;
97
+ }[];
98
+ } | undefined;
99
+ }, {
100
+ name: string;
101
+ operator: "AND" | "OR";
102
+ enabled: boolean;
103
+ conditions: {
104
+ value: string;
105
+ headerName: string;
106
+ operator: "EQUALS" | "NOT_EQUALS" | "CONTAINS" | "NOT_CONTAINS" | "STARTS_WITH" | "NOT_STARTS_WITH" | "ENDS_WITH" | "NOT_ENDS_WITH" | "REGEX" | "NOT_REGEX";
107
+ caseSensitive: boolean;
108
+ }[];
109
+ responseType: "STASH" | "SINGBOX" | "MIHOMO" | "XRAY_JSON" | "CLASH" | "XRAY_BASE64" | "BROWSER" | "BLOCK" | "STATUS_CODE_404" | "STATUS_CODE_451" | "SOCKET_DROP";
110
+ description?: string | undefined;
111
+ responseModifications?: {
112
+ headers: {
113
+ value: string;
114
+ key: string;
115
+ }[];
116
+ } | undefined;
117
+ }>, "many">;
118
+ }, "strip", z.ZodTypeAny, {
119
+ version: "1";
120
+ rules: {
121
+ name: string;
122
+ operator: "AND" | "OR";
123
+ enabled: boolean;
124
+ conditions: {
125
+ value: string;
126
+ headerName: string;
127
+ operator: "EQUALS" | "NOT_EQUALS" | "CONTAINS" | "NOT_CONTAINS" | "STARTS_WITH" | "NOT_STARTS_WITH" | "ENDS_WITH" | "NOT_ENDS_WITH" | "REGEX" | "NOT_REGEX";
128
+ caseSensitive: boolean;
129
+ }[];
130
+ responseType: "STASH" | "SINGBOX" | "MIHOMO" | "XRAY_JSON" | "CLASH" | "XRAY_BASE64" | "BROWSER" | "BLOCK" | "STATUS_CODE_404" | "STATUS_CODE_451" | "SOCKET_DROP";
131
+ description?: string | undefined;
132
+ responseModifications?: {
133
+ headers: {
134
+ value: string;
135
+ key: string;
136
+ }[];
137
+ } | undefined;
138
+ }[];
139
+ }, {
140
+ version: "1";
141
+ rules: {
142
+ name: string;
143
+ operator: "AND" | "OR";
144
+ enabled: boolean;
145
+ conditions: {
146
+ value: string;
147
+ headerName: string;
148
+ operator: "EQUALS" | "NOT_EQUALS" | "CONTAINS" | "NOT_CONTAINS" | "STARTS_WITH" | "NOT_STARTS_WITH" | "ENDS_WITH" | "NOT_ENDS_WITH" | "REGEX" | "NOT_REGEX";
149
+ caseSensitive: boolean;
150
+ }[];
151
+ responseType: "STASH" | "SINGBOX" | "MIHOMO" | "XRAY_JSON" | "CLASH" | "XRAY_BASE64" | "BROWSER" | "BLOCK" | "STATUS_CODE_404" | "STATUS_CODE_451" | "SOCKET_DROP";
152
+ description?: string | undefined;
153
+ responseModifications?: {
154
+ headers: {
155
+ value: string;
156
+ key: string;
157
+ }[];
158
+ } | undefined;
159
+ }[];
160
+ }>;
161
+ }, "strip", z.ZodTypeAny, {
162
+ responseRules: {
163
+ version: "1";
164
+ rules: {
165
+ name: string;
166
+ operator: "AND" | "OR";
167
+ enabled: boolean;
168
+ conditions: {
169
+ value: string;
170
+ headerName: string;
171
+ operator: "EQUALS" | "NOT_EQUALS" | "CONTAINS" | "NOT_CONTAINS" | "STARTS_WITH" | "NOT_STARTS_WITH" | "ENDS_WITH" | "NOT_ENDS_WITH" | "REGEX" | "NOT_REGEX";
172
+ caseSensitive: boolean;
173
+ }[];
174
+ responseType: "STASH" | "SINGBOX" | "MIHOMO" | "XRAY_JSON" | "CLASH" | "XRAY_BASE64" | "BROWSER" | "BLOCK" | "STATUS_CODE_404" | "STATUS_CODE_451" | "SOCKET_DROP";
175
+ description?: string | undefined;
176
+ responseModifications?: {
177
+ headers: {
178
+ value: string;
179
+ key: string;
180
+ }[];
181
+ } | undefined;
182
+ }[];
183
+ };
184
+ }, {
185
+ responseRules: {
186
+ version: "1";
187
+ rules: {
188
+ name: string;
189
+ operator: "AND" | "OR";
190
+ enabled: boolean;
191
+ conditions: {
192
+ value: string;
193
+ headerName: string;
194
+ operator: "EQUALS" | "NOT_EQUALS" | "CONTAINS" | "NOT_CONTAINS" | "STARTS_WITH" | "NOT_STARTS_WITH" | "ENDS_WITH" | "NOT_ENDS_WITH" | "REGEX" | "NOT_REGEX";
195
+ caseSensitive: boolean;
196
+ }[];
197
+ responseType: "STASH" | "SINGBOX" | "MIHOMO" | "XRAY_JSON" | "CLASH" | "XRAY_BASE64" | "BROWSER" | "BLOCK" | "STATUS_CODE_404" | "STATUS_CODE_451" | "SOCKET_DROP";
198
+ description?: string | undefined;
199
+ responseModifications?: {
200
+ headers: {
201
+ value: string;
202
+ key: string;
203
+ }[];
204
+ } | undefined;
205
+ }[];
206
+ };
207
+ }>;
208
+ type Request = z.infer<typeof RequestSchema>;
209
+ const ResponseSchema: z.ZodObject<{
210
+ response: z.ZodObject<{
211
+ matched: z.ZodBoolean;
212
+ responseType: z.ZodNativeEnum<{
213
+ readonly BROWSER: "BROWSER";
214
+ readonly BLOCK: "BLOCK";
215
+ readonly STATUS_CODE_404: "STATUS_CODE_404";
216
+ readonly STATUS_CODE_451: "STATUS_CODE_451";
217
+ readonly SOCKET_DROP: "SOCKET_DROP";
218
+ readonly XRAY_JSON: "XRAY_JSON";
219
+ readonly XRAY_BASE64: "XRAY_BASE64";
220
+ readonly MIHOMO: "MIHOMO";
221
+ readonly STASH: "STASH";
222
+ readonly CLASH: "CLASH";
223
+ readonly SINGBOX: "SINGBOX";
224
+ }>;
225
+ matchedRule: z.ZodNullable<z.ZodObject<{
226
+ name: z.ZodString;
227
+ description: z.ZodOptional<z.ZodString>;
228
+ enabled: z.ZodBoolean;
229
+ operator: z.ZodNativeEnum<{
230
+ readonly AND: "AND";
231
+ readonly OR: "OR";
232
+ }>;
233
+ conditions: z.ZodArray<z.ZodObject<{
234
+ headerName: z.ZodString;
235
+ operator: z.ZodNativeEnum<{
236
+ readonly EQUALS: "EQUALS";
237
+ readonly NOT_EQUALS: "NOT_EQUALS";
238
+ readonly CONTAINS: "CONTAINS";
239
+ readonly NOT_CONTAINS: "NOT_CONTAINS";
240
+ readonly STARTS_WITH: "STARTS_WITH";
241
+ readonly NOT_STARTS_WITH: "NOT_STARTS_WITH";
242
+ readonly ENDS_WITH: "ENDS_WITH";
243
+ readonly NOT_ENDS_WITH: "NOT_ENDS_WITH";
244
+ readonly REGEX: "REGEX";
245
+ readonly NOT_REGEX: "NOT_REGEX";
246
+ }>;
247
+ value: z.ZodString;
248
+ caseSensitive: z.ZodBoolean;
249
+ }, "strip", z.ZodTypeAny, {
250
+ value: string;
251
+ headerName: string;
252
+ operator: "EQUALS" | "NOT_EQUALS" | "CONTAINS" | "NOT_CONTAINS" | "STARTS_WITH" | "NOT_STARTS_WITH" | "ENDS_WITH" | "NOT_ENDS_WITH" | "REGEX" | "NOT_REGEX";
253
+ caseSensitive: boolean;
254
+ }, {
255
+ value: string;
256
+ headerName: string;
257
+ operator: "EQUALS" | "NOT_EQUALS" | "CONTAINS" | "NOT_CONTAINS" | "STARTS_WITH" | "NOT_STARTS_WITH" | "ENDS_WITH" | "NOT_ENDS_WITH" | "REGEX" | "NOT_REGEX";
258
+ caseSensitive: boolean;
259
+ }>, "many">;
260
+ responseType: z.ZodNativeEnum<{
261
+ readonly BROWSER: "BROWSER";
262
+ readonly BLOCK: "BLOCK";
263
+ readonly STATUS_CODE_404: "STATUS_CODE_404";
264
+ readonly STATUS_CODE_451: "STATUS_CODE_451";
265
+ readonly SOCKET_DROP: "SOCKET_DROP";
266
+ readonly XRAY_JSON: "XRAY_JSON";
267
+ readonly XRAY_BASE64: "XRAY_BASE64";
268
+ readonly MIHOMO: "MIHOMO";
269
+ readonly STASH: "STASH";
270
+ readonly CLASH: "CLASH";
271
+ readonly SINGBOX: "SINGBOX";
272
+ }>;
273
+ responseModifications: z.ZodOptional<z.ZodObject<{
274
+ headers: z.ZodArray<z.ZodObject<{
275
+ key: z.ZodString;
276
+ value: z.ZodString;
277
+ }, "strip", z.ZodTypeAny, {
278
+ value: string;
279
+ key: string;
280
+ }, {
281
+ value: string;
282
+ key: string;
283
+ }>, "many">;
284
+ }, "strip", z.ZodTypeAny, {
285
+ headers: {
286
+ value: string;
287
+ key: string;
288
+ }[];
289
+ }, {
290
+ headers: {
291
+ value: string;
292
+ key: string;
293
+ }[];
294
+ }>>;
295
+ }, "strip", z.ZodTypeAny, {
296
+ name: string;
297
+ operator: "AND" | "OR";
298
+ enabled: boolean;
299
+ conditions: {
300
+ value: string;
301
+ headerName: string;
302
+ operator: "EQUALS" | "NOT_EQUALS" | "CONTAINS" | "NOT_CONTAINS" | "STARTS_WITH" | "NOT_STARTS_WITH" | "ENDS_WITH" | "NOT_ENDS_WITH" | "REGEX" | "NOT_REGEX";
303
+ caseSensitive: boolean;
304
+ }[];
305
+ responseType: "STASH" | "SINGBOX" | "MIHOMO" | "XRAY_JSON" | "CLASH" | "XRAY_BASE64" | "BROWSER" | "BLOCK" | "STATUS_CODE_404" | "STATUS_CODE_451" | "SOCKET_DROP";
306
+ description?: string | undefined;
307
+ responseModifications?: {
308
+ headers: {
309
+ value: string;
310
+ key: string;
311
+ }[];
312
+ } | undefined;
313
+ }, {
314
+ name: string;
315
+ operator: "AND" | "OR";
316
+ enabled: boolean;
317
+ conditions: {
318
+ value: string;
319
+ headerName: string;
320
+ operator: "EQUALS" | "NOT_EQUALS" | "CONTAINS" | "NOT_CONTAINS" | "STARTS_WITH" | "NOT_STARTS_WITH" | "ENDS_WITH" | "NOT_ENDS_WITH" | "REGEX" | "NOT_REGEX";
321
+ caseSensitive: boolean;
322
+ }[];
323
+ responseType: "STASH" | "SINGBOX" | "MIHOMO" | "XRAY_JSON" | "CLASH" | "XRAY_BASE64" | "BROWSER" | "BLOCK" | "STATUS_CODE_404" | "STATUS_CODE_451" | "SOCKET_DROP";
324
+ description?: string | undefined;
325
+ responseModifications?: {
326
+ headers: {
327
+ value: string;
328
+ key: string;
329
+ }[];
330
+ } | undefined;
331
+ }>>;
332
+ inputHeaders: z.ZodRecord<z.ZodString, z.ZodString>;
333
+ outputHeaders: z.ZodRecord<z.ZodString, z.ZodString>;
334
+ }, "strip", z.ZodTypeAny, {
335
+ responseType: "STASH" | "SINGBOX" | "MIHOMO" | "XRAY_JSON" | "CLASH" | "XRAY_BASE64" | "BROWSER" | "BLOCK" | "STATUS_CODE_404" | "STATUS_CODE_451" | "SOCKET_DROP";
336
+ matched: boolean;
337
+ matchedRule: {
338
+ name: string;
339
+ operator: "AND" | "OR";
340
+ enabled: boolean;
341
+ conditions: {
342
+ value: string;
343
+ headerName: string;
344
+ operator: "EQUALS" | "NOT_EQUALS" | "CONTAINS" | "NOT_CONTAINS" | "STARTS_WITH" | "NOT_STARTS_WITH" | "ENDS_WITH" | "NOT_ENDS_WITH" | "REGEX" | "NOT_REGEX";
345
+ caseSensitive: boolean;
346
+ }[];
347
+ responseType: "STASH" | "SINGBOX" | "MIHOMO" | "XRAY_JSON" | "CLASH" | "XRAY_BASE64" | "BROWSER" | "BLOCK" | "STATUS_CODE_404" | "STATUS_CODE_451" | "SOCKET_DROP";
348
+ description?: string | undefined;
349
+ responseModifications?: {
350
+ headers: {
351
+ value: string;
352
+ key: string;
353
+ }[];
354
+ } | undefined;
355
+ } | null;
356
+ inputHeaders: Record<string, string>;
357
+ outputHeaders: Record<string, string>;
358
+ }, {
359
+ responseType: "STASH" | "SINGBOX" | "MIHOMO" | "XRAY_JSON" | "CLASH" | "XRAY_BASE64" | "BROWSER" | "BLOCK" | "STATUS_CODE_404" | "STATUS_CODE_451" | "SOCKET_DROP";
360
+ matched: boolean;
361
+ matchedRule: {
362
+ name: string;
363
+ operator: "AND" | "OR";
364
+ enabled: boolean;
365
+ conditions: {
366
+ value: string;
367
+ headerName: string;
368
+ operator: "EQUALS" | "NOT_EQUALS" | "CONTAINS" | "NOT_CONTAINS" | "STARTS_WITH" | "NOT_STARTS_WITH" | "ENDS_WITH" | "NOT_ENDS_WITH" | "REGEX" | "NOT_REGEX";
369
+ caseSensitive: boolean;
370
+ }[];
371
+ responseType: "STASH" | "SINGBOX" | "MIHOMO" | "XRAY_JSON" | "CLASH" | "XRAY_BASE64" | "BROWSER" | "BLOCK" | "STATUS_CODE_404" | "STATUS_CODE_451" | "SOCKET_DROP";
372
+ description?: string | undefined;
373
+ responseModifications?: {
374
+ headers: {
375
+ value: string;
376
+ key: string;
377
+ }[];
378
+ } | undefined;
379
+ } | null;
380
+ inputHeaders: Record<string, string>;
381
+ outputHeaders: Record<string, string>;
382
+ }>;
383
+ }, "strip", z.ZodTypeAny, {
384
+ response: {
385
+ responseType: "STASH" | "SINGBOX" | "MIHOMO" | "XRAY_JSON" | "CLASH" | "XRAY_BASE64" | "BROWSER" | "BLOCK" | "STATUS_CODE_404" | "STATUS_CODE_451" | "SOCKET_DROP";
386
+ matched: boolean;
387
+ matchedRule: {
388
+ name: string;
389
+ operator: "AND" | "OR";
390
+ enabled: boolean;
391
+ conditions: {
392
+ value: string;
393
+ headerName: string;
394
+ operator: "EQUALS" | "NOT_EQUALS" | "CONTAINS" | "NOT_CONTAINS" | "STARTS_WITH" | "NOT_STARTS_WITH" | "ENDS_WITH" | "NOT_ENDS_WITH" | "REGEX" | "NOT_REGEX";
395
+ caseSensitive: boolean;
396
+ }[];
397
+ responseType: "STASH" | "SINGBOX" | "MIHOMO" | "XRAY_JSON" | "CLASH" | "XRAY_BASE64" | "BROWSER" | "BLOCK" | "STATUS_CODE_404" | "STATUS_CODE_451" | "SOCKET_DROP";
398
+ description?: string | undefined;
399
+ responseModifications?: {
400
+ headers: {
401
+ value: string;
402
+ key: string;
403
+ }[];
404
+ } | undefined;
405
+ } | null;
406
+ inputHeaders: Record<string, string>;
407
+ outputHeaders: Record<string, string>;
408
+ };
409
+ }, {
410
+ response: {
411
+ responseType: "STASH" | "SINGBOX" | "MIHOMO" | "XRAY_JSON" | "CLASH" | "XRAY_BASE64" | "BROWSER" | "BLOCK" | "STATUS_CODE_404" | "STATUS_CODE_451" | "SOCKET_DROP";
412
+ matched: boolean;
413
+ matchedRule: {
414
+ name: string;
415
+ operator: "AND" | "OR";
416
+ enabled: boolean;
417
+ conditions: {
418
+ value: string;
419
+ headerName: string;
420
+ operator: "EQUALS" | "NOT_EQUALS" | "CONTAINS" | "NOT_CONTAINS" | "STARTS_WITH" | "NOT_STARTS_WITH" | "ENDS_WITH" | "NOT_ENDS_WITH" | "REGEX" | "NOT_REGEX";
421
+ caseSensitive: boolean;
422
+ }[];
423
+ responseType: "STASH" | "SINGBOX" | "MIHOMO" | "XRAY_JSON" | "CLASH" | "XRAY_BASE64" | "BROWSER" | "BLOCK" | "STATUS_CODE_404" | "STATUS_CODE_451" | "SOCKET_DROP";
424
+ description?: string | undefined;
425
+ responseModifications?: {
426
+ headers: {
427
+ value: string;
428
+ key: string;
429
+ }[];
430
+ } | undefined;
431
+ } | null;
432
+ inputHeaders: Record<string, string>;
433
+ outputHeaders: Record<string, string>;
434
+ };
435
+ }>;
436
+ type Response = z.infer<typeof ResponseSchema>;
437
+ }
438
+ //# sourceMappingURL=test-srr-matcher.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-srr-matcher.command.d.ts","sourceRoot":"","sources":["../../../../../commands/system/testers/test-srr-matcher.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,yBAAiB,qBAAqB,CAAC;IAC5B,MAAM,GAAG,mCAAsC,CAAC;IAChD,MAAM,OAAO,mCAAM,CAAC;IAEpB,MAAM,eAAe,8CAI3B,CAAC;IACK,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAExB,CAAC;IAEH,KAAY,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;IAE7C,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAQzB,CAAC;IAEH,KAAY,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;CACzD"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestSrrMatcherCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const constants_1 = require("../../../constants");
6
+ const models_1 = require("../../../models");
7
+ const api_1 = require("../../../api");
8
+ var TestSrrMatcherCommand;
9
+ (function (TestSrrMatcherCommand) {
10
+ TestSrrMatcherCommand.url = api_1.REST_API.SYSTEM.TESTERS.SRR_MATCHER;
11
+ TestSrrMatcherCommand.TSQ_url = TestSrrMatcherCommand.url;
12
+ TestSrrMatcherCommand.endpointDetails = (0, constants_1.getEndpointDetails)(api_1.SYSTEM_ROUTES.TESTERS.SRR_MATCHER, 'post', 'Test SRR Matcher');
13
+ TestSrrMatcherCommand.RequestSchema = zod_1.z.object({
14
+ responseRules: models_1.ResponseRulesConfigSchema,
15
+ });
16
+ TestSrrMatcherCommand.ResponseSchema = zod_1.z.object({
17
+ response: zod_1.z.object({
18
+ matched: zod_1.z.boolean(),
19
+ responseType: zod_1.z.nativeEnum(constants_1.RESPONSE_RULES_RESPONSE_TYPES),
20
+ matchedRule: zod_1.z.nullable(models_1.ResponseRuleSchema),
21
+ inputHeaders: zod_1.z.record(zod_1.z.string(), zod_1.z.string()),
22
+ outputHeaders: zod_1.z.record(zod_1.z.string(), zod_1.z.string()),
23
+ }),
24
+ });
25
+ })(TestSrrMatcherCommand || (exports.TestSrrMatcherCommand = TestSrrMatcherCommand = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"response-rule.schema.d.ts","sourceRoot":"","sources":["../../../../models/response-rules/response-rule.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqCxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8E1B,CAAC"}
1
+ {"version":3,"file":"response-rule.schema.d.ts","sourceRoot":"","sources":["../../../../models/response-rules/response-rule.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqCxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6E1B,CAAC"}
@@ -62,7 +62,6 @@ exports.ResponseRuleSchema = zod_1.z
62
62
  })
63
63
  .describe(JSON.stringify({
64
64
  title: 'Response Rule',
65
- description: 'Response rule to be applied when the conditions are met.',
66
65
  markdownDescription: `\n\nFields:\n- **name**: Name of the response rule (required)\n- **description**: Description of the response rule (optional)\n- **enabled**: Whether the response rule is enabled. If disabled, the rule will not be applied.\n- **operator**: Operator to combine conditions (AND/OR)\n- **conditions**: Array of conditions to match against HTTP headers\n - **headerName**: Name of the HTTP header to check (case insensitive)\n - **operator**: Comparison operator (CONTAINS, EQUALS, etc)\n - **value**: Value to compare against (case sensitive, max 255 chars)\n- **responseType**: Type of response when rule matches (e.g. BLOCK)\n\nExample:\n\`\`\`json\n${RuleExampleJson}\n\`\`\``,
67
66
  examples: [
68
67
  {
@@ -14,4 +14,7 @@ exports.SYSTEM_ROUTES = {
14
14
  ENCRYPT_HAPP_CRYPTO_LINK: 'tools/happ/encrypt',
15
15
  },
16
16
  HEALTH: 'health',
17
+ TESTERS: {
18
+ SRR_MATCHER: 'testers/srr-matcher',
19
+ },
17
20
  };
@@ -155,6 +155,9 @@ exports.REST_API = {
155
155
  GENERATE_X25519: `${exports.ROOT}/${CONTROLLERS.SYSTEM_CONTROLLER}/${CONTROLLERS.SYSTEM_ROUTES.TOOLS.GENERATE_X25519}`,
156
156
  ENCRYPT_HAPP_CRYPTO_LINK: `${exports.ROOT}/${CONTROLLERS.SYSTEM_CONTROLLER}/${CONTROLLERS.SYSTEM_ROUTES.TOOLS.ENCRYPT_HAPP_CRYPTO_LINK}`,
157
157
  },
158
+ TESTERS: {
159
+ SRR_MATCHER: `${exports.ROOT}/${CONTROLLERS.SYSTEM_CONTROLLER}/${CONTROLLERS.SYSTEM_ROUTES.TESTERS.SRR_MATCHER}`,
160
+ },
158
161
  },
159
162
  SUBSCRIPTION_TEMPLATE: {
160
163
  GET: (templateType) => `${exports.ROOT}/${CONTROLLERS.SUBSCRIPTION_TEMPLATE_CONTROLLER}/${CONTROLLERS.SUBSCRIPTION_TEMPLATE_ROUTES.GET(templateType)}`,
@@ -19,4 +19,5 @@ __exportStar(require("./get-nodes-metrics.command"), exports);
19
19
  __exportStar(require("./get-nodes-statistics"), exports);
20
20
  __exportStar(require("./get-remnawave-health.command"), exports);
21
21
  __exportStar(require("./get-stats.command"), exports);
22
+ __exportStar(require("./testers"), exports);
22
23
  __exportStar(require("./tools"), exports);
@@ -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("./test-srr-matcher.command"), exports);
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestSrrMatcherCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const constants_1 = require("../../../constants");
6
+ const models_1 = require("../../../models");
7
+ const api_1 = require("../../../api");
8
+ var TestSrrMatcherCommand;
9
+ (function (TestSrrMatcherCommand) {
10
+ TestSrrMatcherCommand.url = api_1.REST_API.SYSTEM.TESTERS.SRR_MATCHER;
11
+ TestSrrMatcherCommand.TSQ_url = TestSrrMatcherCommand.url;
12
+ TestSrrMatcherCommand.endpointDetails = (0, constants_1.getEndpointDetails)(api_1.SYSTEM_ROUTES.TESTERS.SRR_MATCHER, 'post', 'Test SRR Matcher');
13
+ TestSrrMatcherCommand.RequestSchema = zod_1.z.object({
14
+ responseRules: models_1.ResponseRulesConfigSchema,
15
+ });
16
+ TestSrrMatcherCommand.ResponseSchema = zod_1.z.object({
17
+ response: zod_1.z.object({
18
+ matched: zod_1.z.boolean(),
19
+ responseType: zod_1.z.nativeEnum(constants_1.RESPONSE_RULES_RESPONSE_TYPES),
20
+ matchedRule: zod_1.z.nullable(models_1.ResponseRuleSchema),
21
+ inputHeaders: zod_1.z.record(zod_1.z.string(), zod_1.z.string()),
22
+ outputHeaders: zod_1.z.record(zod_1.z.string(), zod_1.z.string()),
23
+ }),
24
+ });
25
+ })(TestSrrMatcherCommand || (exports.TestSrrMatcherCommand = TestSrrMatcherCommand = {}));
@@ -62,7 +62,6 @@ exports.ResponseRuleSchema = zod_1.z
62
62
  })
63
63
  .describe(JSON.stringify({
64
64
  title: 'Response Rule',
65
- description: 'Response rule to be applied when the conditions are met.',
66
65
  markdownDescription: `\n\nFields:\n- **name**: Name of the response rule (required)\n- **description**: Description of the response rule (optional)\n- **enabled**: Whether the response rule is enabled. If disabled, the rule will not be applied.\n- **operator**: Operator to combine conditions (AND/OR)\n- **conditions**: Array of conditions to match against HTTP headers\n - **headerName**: Name of the HTTP header to check (case insensitive)\n - **operator**: Comparison operator (CONTAINS, EQUALS, etc)\n - **value**: Value to compare against (case sensitive, max 255 chars)\n- **responseType**: Type of response when rule matches (e.g. BLOCK)\n\nExample:\n\`\`\`json\n${RuleExampleJson}\n\`\`\``,
67
66
  examples: [
68
67
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnawave/backend-contract",
3
- "version": "2.1.81",
3
+ "version": "2.2.0",
4
4
  "public": true,
5
5
  "license": "AGPL-3.0-only",
6
6
  "description": "A contract library for Remnawave Backend. It can be used in backend and frontend.",