@remnawave/backend-contract 2.9.21 → 2.9.23

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 (31) hide show
  1. package/build/backend/api/controllers/system.d.ts +1 -0
  2. package/build/backend/api/controllers/system.d.ts.map +1 -1
  3. package/build/backend/api/controllers/system.js +1 -0
  4. package/build/backend/api/routes.d.ts +1 -0
  5. package/build/backend/api/routes.d.ts.map +1 -1
  6. package/build/backend/api/routes.js +1 -0
  7. package/build/backend/commands/remnawave-settings/get-remnawave-settings.command.d.ts +1 -0
  8. package/build/backend/commands/remnawave-settings/get-remnawave-settings.command.d.ts.map +1 -1
  9. package/build/backend/commands/remnawave-settings/update-remnawave-settings.command.d.ts +2 -0
  10. package/build/backend/commands/remnawave-settings/update-remnawave-settings.command.d.ts.map +1 -1
  11. package/build/backend/commands/system/get-stats-digest.command.d.ts +28 -0
  12. package/build/backend/commands/system/get-stats-digest.command.d.ts.map +1 -0
  13. package/build/backend/commands/system/get-stats-digest.command.js +35 -0
  14. package/build/backend/commands/system/index.d.ts +1 -0
  15. package/build/backend/commands/system/index.d.ts.map +1 -1
  16. package/build/backend/commands/system/index.js +1 -0
  17. package/build/backend/constants/errors/errors.d.ts +10 -0
  18. package/build/backend/constants/errors/errors.d.ts.map +1 -1
  19. package/build/backend/constants/errors/errors.js +10 -0
  20. package/build/backend/models/remnawave-settings/oauth2-settings.schema.d.ts +1 -0
  21. package/build/backend/models/remnawave-settings/oauth2-settings.schema.d.ts.map +1 -1
  22. package/build/backend/models/remnawave-settings/oauth2-settings.schema.js +9 -0
  23. package/build/backend/models/remnawave-settings/remnawave-settings.schema.d.ts +1 -0
  24. package/build/backend/models/remnawave-settings/remnawave-settings.schema.d.ts.map +1 -1
  25. package/build/frontend/api/controllers/system.js +1 -0
  26. package/build/frontend/api/routes.js +1 -0
  27. package/build/frontend/commands/system/get-stats-digest.command.js +35 -0
  28. package/build/frontend/commands/system/index.js +1 -0
  29. package/build/frontend/constants/errors/errors.js +10 -0
  30. package/build/frontend/models/remnawave-settings/oauth2-settings.schema.js +9 -0
  31. package/package.json +1 -1
@@ -5,6 +5,7 @@ export declare const SYSTEM_ROUTES: {
5
5
  readonly BANDWIDTH_STATS: "stats/bandwidth";
6
6
  readonly NODES_STATS: "stats/nodes";
7
7
  readonly RECAP: "stats/recap";
8
+ readonly DIGEST: "stats/digest";
8
9
  readonly NODES_METRICS: "nodes/metrics";
9
10
  readonly HTTP: "stats/http";
10
11
  };
@@ -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;;;;;;;;;;;;;;;;;CAiBhB,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;;;;;;;;;;;;;;;;;;CAkBhB,CAAC"}
@@ -8,6 +8,7 @@ exports.SYSTEM_ROUTES = {
8
8
  BANDWIDTH_STATS: 'stats/bandwidth',
9
9
  NODES_STATS: 'stats/nodes',
10
10
  RECAP: 'stats/recap',
11
+ DIGEST: 'stats/digest',
11
12
  NODES_METRICS: 'nodes/metrics',
12
13
  HTTP: 'stats/http',
13
14
  },
@@ -131,6 +131,7 @@ export declare const REST_API: {
131
131
  readonly NODES_STATS: "/api/system/stats/nodes";
132
132
  readonly NODES_METRICS: "/api/system/nodes/metrics";
133
133
  readonly RECAP: "/api/system/stats/recap";
134
+ readonly DIGEST: "/api/system/stats/digest";
134
135
  readonly HTTP: "/api/system/stats/http";
135
136
  };
136
137
  readonly TOOLS: {
@@ -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;AAE9C,eAAO,MAAM,kBAAkB,EAAG,gBAAyB,CAAC;AAC5D,eAAO,MAAM,cAAc,EAAG,uBAAgC,CAAC;AAC/D,eAAO,MAAM,YAAY,EAAG,wBAAiC,CAAC;AAC9D,eAAO,MAAM,WAAW,EAAG,uBAAgC,CAAC;AAE5D,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;gCAyBE,MAAM;;;;;;;;;;;qCAcD,MAAM;;gCAGX,MAAM;;;;;oCAOF,MAAM;qCAIL,MAAM;qCAIN,MAAM;;2CAKA,MAAM;;;;;;;;;;;;;;kCAkBf,MAAM;qCAGH,MAAM;4CAEC,MAAM;wDAEM,MAAM;;uCAMvB,MAAM;sCAIP,MAAM;6CAIC,MAAM;mDAIA,MAAM;sDAIH,MAAM;;;6CAMf,MAAM;0CAIT,MAAM;;;;;;;;;;;;;;;;;;;;;;kCAyBd,MAAM;uCAED,MAAM;;;;;;qCASR,MAAM;gCAEX,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAoCT,MAAM;;gCAKH,MAAM;;;;;;;;;;;;;;iDAiBW,MAAM;;;;;;;;;0CAYb,MAAM;6CAIH,MAAM;iDAIF,MAAM;kCAIrB,MAAM;;;6CAMK,MAAM;;0DAKO,MAAM;;;;;;qCAS3B,MAAM;gCAIX,MAAM;sDAIgB,MAAM;6DAIC,MAAM;;;;;;;;;;qCAa9B,MAAM;gCAIX,MAAM;0CAII,MAAM;;uCAKT,MAAM;0CAEH,MAAM;4CAEJ,MAAM;+CAEH,MAAM;;;;;;;;;;yCAWZ,MAAM;8CAED,MAAM;;;;6CAMP,MAAM;;;gDAKH,MAAM;;;;;;;;;;;;;;;;qCAiBjB,MAAM;gCAIX,MAAM;;uCAKC,MAAM;0CAEH,MAAM;;;;;;;;;;;6BAYnB,MAAM;;;gCAIH,MAAM;;;;;;;;6BAST,MAAM;;;gCAIH,MAAM;;;;;;;;;;;;;;;;;uCAkBC,MAAM;;;;;yCAMJ,MAAM;;;uCAIR,MAAM;6CAEA,MAAM,UAAU,MAAM;;;;+CAKpB,MAAM;qDAEA,MAAM;6CAEd,MAAM;qDAEE,MAAM;;;;;iCAM1B,MAAM;oCAEH,MAAM;;;mCAIP,MAAM;sCAEH,MAAM;;;CAIzB,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;AAE9C,eAAO,MAAM,kBAAkB,EAAG,gBAAyB,CAAC;AAC5D,eAAO,MAAM,cAAc,EAAG,uBAAgC,CAAC;AAC/D,eAAO,MAAM,YAAY,EAAG,wBAAiC,CAAC;AAC9D,eAAO,MAAM,WAAW,EAAG,uBAAgC,CAAC;AAE5D,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;gCAyBE,MAAM;;;;;;;;;;;qCAcD,MAAM;;gCAGX,MAAM;;;;;oCAOF,MAAM;qCAIL,MAAM;qCAIN,MAAM;;2CAKA,MAAM;;;;;;;;;;;;;;kCAkBf,MAAM;qCAGH,MAAM;4CAEC,MAAM;wDAEM,MAAM;;uCAMvB,MAAM;sCAIP,MAAM;6CAIC,MAAM;mDAIA,MAAM;sDAIH,MAAM;;;6CAMf,MAAM;0CAIT,MAAM;;;;;;;;;;;;;;;;;;;;;;kCAyBd,MAAM;uCAED,MAAM;;;;;;qCASR,MAAM;gCAEX,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAqCT,MAAM;;gCAKH,MAAM;;;;;;;;;;;;;;iDAiBW,MAAM;;;;;;;;;0CAYb,MAAM;6CAIH,MAAM;iDAIF,MAAM;kCAIrB,MAAM;;;6CAMK,MAAM;;0DAKO,MAAM;;;;;;qCAS3B,MAAM;gCAIX,MAAM;sDAIgB,MAAM;6DAIC,MAAM;;;;;;;;;;qCAa9B,MAAM;gCAIX,MAAM;0CAII,MAAM;;uCAKT,MAAM;0CAEH,MAAM;4CAEJ,MAAM;+CAEH,MAAM;;;;;;;;;;yCAWZ,MAAM;8CAED,MAAM;;;;6CAMP,MAAM;;;gDAKH,MAAM;;;;;;;;;;;;;;;;qCAiBjB,MAAM;gCAIX,MAAM;;uCAKC,MAAM;0CAEH,MAAM;;;;;;;;;;;6BAYnB,MAAM;;;gCAIH,MAAM;;;;;;;;6BAST,MAAM;;;gCAIH,MAAM;;;;;;;;;;;;;;;;;uCAkBC,MAAM;;;;;yCAMJ,MAAM;;;uCAIR,MAAM;6CAEA,MAAM,UAAU,MAAM;;;;+CAKpB,MAAM;qDAEA,MAAM;6CAEd,MAAM;qDAEE,MAAM;;;;;iCAM1B,MAAM;oCAEH,MAAM;;;mCAIP,MAAM;sCAEH,MAAM;;;CAIzB,CAAC"}
@@ -168,6 +168,7 @@ exports.REST_API = {
168
168
  NODES_STATS: `${exports.ROOT}/${CONTROLLERS.SYSTEM_CONTROLLER}/${CONTROLLERS.SYSTEM_ROUTES.STATS.NODES_STATS}`,
169
169
  NODES_METRICS: `${exports.ROOT}/${CONTROLLERS.SYSTEM_CONTROLLER}/${CONTROLLERS.SYSTEM_ROUTES.STATS.NODES_METRICS}`,
170
170
  RECAP: `${exports.ROOT}/${CONTROLLERS.SYSTEM_CONTROLLER}/${CONTROLLERS.SYSTEM_ROUTES.STATS.RECAP}`,
171
+ DIGEST: `${exports.ROOT}/${CONTROLLERS.SYSTEM_CONTROLLER}/${CONTROLLERS.SYSTEM_ROUTES.STATS.DIGEST}`,
171
172
  HTTP: `${exports.ROOT}/${CONTROLLERS.SYSTEM_CONTROLLER}/${CONTROLLERS.SYSTEM_ROUTES.STATS.HTTP}`,
172
173
  },
173
174
  TOOLS: {
@@ -21,6 +21,7 @@ export declare namespace GetRemnawaveSettingsCommand {
21
21
  enabled: z.ZodBoolean;
22
22
  clientId: z.ZodNullable<z.ZodString>;
23
23
  clientSecret: z.ZodNullable<z.ZodString>;
24
+ frontendDomain: z.ZodNullable<z.ZodString>;
24
25
  plainDomain: z.ZodNullable<z.ZodString>;
25
26
  allowedEmails: z.ZodArray<z.ZodString>;
26
27
  }, z.core.$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"get-remnawave-settings.command.d.ts","sourceRoot":"","sources":["../../../../commands/remnawave-settings/get-remnawave-settings.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,yBAAiB,2BAA2B,CAAC;IAClC,MAAM,GAAG,4BAAmC,CAAC;IAC7C,MAAM,OAAO,4BAAM,CAAC;IAEpB,MAAM,eAAe,2CAK3B,CAAC;IAEK,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAEzB,CAAC;IAEH,KAAY,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;CACzD"}
1
+ {"version":3,"file":"get-remnawave-settings.command.d.ts","sourceRoot":"","sources":["../../../../commands/remnawave-settings/get-remnawave-settings.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,yBAAiB,2BAA2B,CAAC;IAClC,MAAM,GAAG,4BAAmC,CAAC;IAC7C,MAAM,OAAO,4BAAM,CAAC;IAEpB,MAAM,eAAe,2CAK3B,CAAC;IAEK,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAEzB,CAAC;IAEH,KAAY,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;CACzD"}
@@ -20,6 +20,7 @@ export declare namespace UpdateRemnawaveSettingsCommand {
20
20
  enabled: z.ZodBoolean;
21
21
  clientId: z.ZodNullable<z.ZodString>;
22
22
  clientSecret: z.ZodNullable<z.ZodString>;
23
+ frontendDomain: z.ZodNullable<z.ZodString>;
23
24
  plainDomain: z.ZodNullable<z.ZodString>;
24
25
  allowedEmails: z.ZodArray<z.ZodString>;
25
26
  }, z.core.$strip>;
@@ -82,6 +83,7 @@ export declare namespace UpdateRemnawaveSettingsCommand {
82
83
  enabled: z.ZodBoolean;
83
84
  clientId: z.ZodNullable<z.ZodString>;
84
85
  clientSecret: z.ZodNullable<z.ZodString>;
86
+ frontendDomain: z.ZodNullable<z.ZodString>;
85
87
  plainDomain: z.ZodNullable<z.ZodString>;
86
88
  allowedEmails: z.ZodArray<z.ZodString>;
87
89
  }, z.core.$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"update-remnawave-settings.command.d.ts","sourceRoot":"","sources":["../../../../commands/remnawave-settings/update-remnawave-settings.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,yBAAiB,8BAA8B,CAAC;IACrC,MAAM,GAAG,4BAAsC,CAAC;IAChD,MAAM,OAAO,4BAAM,CAAC;IAEpB,MAAM,eAAe,2CAK3B,CAAC;IAEK,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAK5B,CAAC;IAEI,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAEzB,CAAC;IAEH,KAAY,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;IAC5D,KAAY,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;CACzD"}
1
+ {"version":3,"file":"update-remnawave-settings.command.d.ts","sourceRoot":"","sources":["../../../../commands/remnawave-settings/update-remnawave-settings.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,yBAAiB,8BAA8B,CAAC;IACrC,MAAM,GAAG,4BAAsC,CAAC;IAChD,MAAM,OAAO,4BAAM,CAAC;IAEpB,MAAM,eAAe,2CAK3B,CAAC;IAEK,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAK5B,CAAC;IAEI,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAEzB,CAAC;IAEH,KAAY,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;IAC5D,KAAY,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;CACzD"}
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod';
2
+ export declare namespace GetStatsDigestCommand {
3
+ const url: "/api/system/stats/digest";
4
+ const TSQ_url: "/api/system/stats/digest";
5
+ const endpointDetails: import("../../constants").EndpointDetails;
6
+ const RequestQuerySchema: z.ZodObject<{
7
+ start: z.ZodISODateTime;
8
+ end: z.ZodISODateTime;
9
+ }, z.core.$strip>;
10
+ const ResponseSchema: z.ZodObject<{
11
+ response: z.ZodObject<{
12
+ users: z.ZodObject<{
13
+ createdCount: z.ZodNumber;
14
+ expiredCount: z.ZodNumber;
15
+ }, z.core.$strip>;
16
+ traffic: z.ZodObject<{
17
+ totalBytes: z.ZodString;
18
+ byUsersCreatedInRangeBytes: z.ZodString;
19
+ }, z.core.$strip>;
20
+ hwidDevices: z.ZodObject<{
21
+ createdCount: z.ZodNumber;
22
+ }, z.core.$strip>;
23
+ }, z.core.$strip>;
24
+ }, z.core.$strip>;
25
+ type RequestQuery = z.infer<typeof RequestQuerySchema>;
26
+ type Response = z.infer<typeof ResponseSchema>;
27
+ }
28
+ //# sourceMappingURL=get-stats-digest.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-stats-digest.command.d.ts","sourceRoot":"","sources":["../../../../commands/system/get-stats-digest.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,yBAAiB,qBAAqB,CAAC;IAC5B,MAAM,GAAG,4BAA+B,CAAC;IACzC,MAAM,OAAO,4BAAM,CAAC;IAEpB,MAAM,eAAe,2CAM3B,CAAC;IAEK,MAAM,kBAAkB;;;qBAW7B,CAAC;IAEI,MAAM,cAAc;;;;;;;;;;;;;;qBAczB,CAAC;IAEH,KAAY,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;IAC9D,KAAY,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;CACzD"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetStatsDigestCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const api_1 = require("../../api");
6
+ const constants_1 = require("../../constants");
7
+ var GetStatsDigestCommand;
8
+ (function (GetStatsDigestCommand) {
9
+ GetStatsDigestCommand.url = api_1.REST_API.SYSTEM.STATS.DIGEST;
10
+ GetStatsDigestCommand.TSQ_url = GetStatsDigestCommand.url;
11
+ GetStatsDigestCommand.endpointDetails = (0, constants_1.getEndpointDetails)(api_1.SYSTEM_ROUTES.STATS.DIGEST, 'get', 'Get Stats Digest', { scope: 'digest', kind: 'read' }, 'Aggregated statistics for a datetime range [start, end): created and expired users, total traffic, traffic spent by users created within the range and new HWID devices. Per-user traffic history is stored with daily granularity (UTC), so the "traffic by new users" metric snaps to whole days at the range edges.');
12
+ GetStatsDigestCommand.RequestQuerySchema = zod_1.z.object({
13
+ start: zod_1.z.iso
14
+ .datetime({ offset: true })
15
+ .describe('Start of the range, ISO 8601 datetime with timezone (e.g. 2026-07-15T00:00:00Z). Inclusive.'),
16
+ end: zod_1.z.iso
17
+ .datetime({ offset: true })
18
+ .describe('End of the range, ISO 8601 datetime with timezone (e.g. 2026-07-16T00:00:00Z). Exclusive.'),
19
+ });
20
+ GetStatsDigestCommand.ResponseSchema = zod_1.z.object({
21
+ response: zod_1.z.object({
22
+ users: zod_1.z.object({
23
+ createdCount: zod_1.z.number(),
24
+ expiredCount: zod_1.z.number(),
25
+ }),
26
+ traffic: zod_1.z.object({
27
+ totalBytes: zod_1.z.string(),
28
+ byUsersCreatedInRangeBytes: zod_1.z.string(),
29
+ }),
30
+ hwidDevices: zod_1.z.object({
31
+ createdCount: zod_1.z.number(),
32
+ }),
33
+ }),
34
+ });
35
+ })(GetStatsDigestCommand || (exports.GetStatsDigestCommand = GetStatsDigestCommand = {}));
@@ -3,6 +3,7 @@ export * from './get-metadata.command';
3
3
  export * from './get-nodes-metrics.command';
4
4
  export * from './get-nodes-statistics';
5
5
  export * from './get-recap.command';
6
+ export * from './get-stats-digest.command';
6
7
  export * from './get-remnawave-health.command';
7
8
  export * from './get-stats.command';
8
9
  export * from './testers';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../commands/system/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../commands/system/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,0BAA0B,CAAC"}
@@ -19,6 +19,7 @@ __exportStar(require("./get-metadata.command"), exports);
19
19
  __exportStar(require("./get-nodes-metrics.command"), exports);
20
20
  __exportStar(require("./get-nodes-statistics"), exports);
21
21
  __exportStar(require("./get-recap.command"), exports);
22
+ __exportStar(require("./get-stats-digest.command"), exports);
22
23
  __exportStar(require("./get-remnawave-health.command"), exports);
23
24
  __exportStar(require("./get-stats.command"), exports);
24
25
  __exportStar(require("./testers"), exports);
@@ -1199,5 +1199,15 @@ export declare const ERRORS: {
1199
1199
  readonly message: "Remove many users from internal squad error";
1200
1200
  readonly httpCode: 500;
1201
1201
  };
1202
+ readonly GET_STATS_DIGEST_INVALID_RANGE: {
1203
+ readonly code: "A235";
1204
+ readonly message: "Start date must be before or equal to end date";
1205
+ readonly httpCode: 400;
1206
+ };
1207
+ readonly GET_STATS_DIGEST_ERROR: {
1208
+ readonly code: "A236";
1209
+ readonly message: "Get stats digest error";
1210
+ readonly httpCode: 500;
1211
+ };
1202
1212
  };
1203
1213
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../constants/errors/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAwJY,MAAM;;;;;;;;;;wCAUN,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCA4IN,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAsqBN,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCA0KN,MAAM;;;;;;;;;;;;;;;;;;;;;CAqB3B,CAAC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../constants/errors/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAwJY,MAAM;;;;;;;;;;wCAUN,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCA4IN,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAsqBN,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCA0KN,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B3B,CAAC"}
@@ -1170,4 +1170,14 @@ exports.ERRORS = {
1170
1170
  message: 'Remove many users from internal squad error',
1171
1171
  httpCode: 500,
1172
1172
  },
1173
+ GET_STATS_DIGEST_INVALID_RANGE: {
1174
+ code: 'A235',
1175
+ message: 'Start date must be before or equal to end date',
1176
+ httpCode: 400,
1177
+ },
1178
+ GET_STATS_DIGEST_ERROR: {
1179
+ code: 'A236',
1180
+ message: 'Get stats digest error',
1181
+ httpCode: 500,
1182
+ },
1173
1183
  };
@@ -10,6 +10,7 @@ export declare const Oauth2SettingsSchema: z.ZodObject<{
10
10
  enabled: z.ZodBoolean;
11
11
  clientId: z.ZodNullable<z.ZodString>;
12
12
  clientSecret: z.ZodNullable<z.ZodString>;
13
+ frontendDomain: z.ZodNullable<z.ZodString>;
13
14
  plainDomain: z.ZodNullable<z.ZodString>;
14
15
  allowedEmails: z.ZodArray<z.ZodString>;
15
16
  }, z.core.$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"oauth2-settings.schema.d.ts","sourceRoot":"","sources":["../../../../models/remnawave-settings/oauth2-settings.schema.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+J/B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
1
+ {"version":3,"file":"oauth2-settings.schema.d.ts","sourceRoot":"","sources":["../../../../models/remnawave-settings/oauth2-settings.schema.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+K/B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
@@ -16,6 +16,15 @@ exports.Oauth2SettingsSchema = zod_1.default.object({
16
16
  enabled: zod_1.default.boolean(),
17
17
  clientId: zod_1.default.nullable(zod_1.default.string()),
18
18
  clientSecret: zod_1.default.nullable(zod_1.default.string()),
19
+ frontendDomain: zod_1.default.nullable(zod_1.default.string().refine((val) => {
20
+ const fqdnRegex = /(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\.)+[a-zA-Z]{2,63}$)/;
21
+ if (fqdnRegex.test(val)) {
22
+ return true;
23
+ }
24
+ return false;
25
+ }, {
26
+ message: 'Must be a valid fully qualified domain name (FQDN), e.g. "docs.rw"',
27
+ })),
19
28
  plainDomain: zod_1.default.nullable(zod_1.default.string().refine((val) => {
20
29
  const fqdnRegex = /(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\.)+[a-zA-Z]{2,63}$)/;
21
30
  if (fqdnRegex.test(val)) {
@@ -16,6 +16,7 @@ export declare const RemnawaveSettingsSchema: z.ZodObject<{
16
16
  enabled: z.ZodBoolean;
17
17
  clientId: z.ZodNullable<z.ZodString>;
18
18
  clientSecret: z.ZodNullable<z.ZodString>;
19
+ frontendDomain: z.ZodNullable<z.ZodString>;
19
20
  plainDomain: z.ZodNullable<z.ZodString>;
20
21
  allowedEmails: z.ZodArray<z.ZodString>;
21
22
  }, z.core.$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"remnawave-settings.schema.d.ts","sourceRoot":"","sources":["../../../../models/remnawave-settings/remnawave-settings.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAKlC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
1
+ {"version":3,"file":"remnawave-settings.schema.d.ts","sourceRoot":"","sources":["../../../../models/remnawave-settings/remnawave-settings.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAKlC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -8,6 +8,7 @@ exports.SYSTEM_ROUTES = {
8
8
  BANDWIDTH_STATS: 'stats/bandwidth',
9
9
  NODES_STATS: 'stats/nodes',
10
10
  RECAP: 'stats/recap',
11
+ DIGEST: 'stats/digest',
11
12
  NODES_METRICS: 'nodes/metrics',
12
13
  HTTP: 'stats/http',
13
14
  },
@@ -168,6 +168,7 @@ exports.REST_API = {
168
168
  NODES_STATS: `${exports.ROOT}/${CONTROLLERS.SYSTEM_CONTROLLER}/${CONTROLLERS.SYSTEM_ROUTES.STATS.NODES_STATS}`,
169
169
  NODES_METRICS: `${exports.ROOT}/${CONTROLLERS.SYSTEM_CONTROLLER}/${CONTROLLERS.SYSTEM_ROUTES.STATS.NODES_METRICS}`,
170
170
  RECAP: `${exports.ROOT}/${CONTROLLERS.SYSTEM_CONTROLLER}/${CONTROLLERS.SYSTEM_ROUTES.STATS.RECAP}`,
171
+ DIGEST: `${exports.ROOT}/${CONTROLLERS.SYSTEM_CONTROLLER}/${CONTROLLERS.SYSTEM_ROUTES.STATS.DIGEST}`,
171
172
  HTTP: `${exports.ROOT}/${CONTROLLERS.SYSTEM_CONTROLLER}/${CONTROLLERS.SYSTEM_ROUTES.STATS.HTTP}`,
172
173
  },
173
174
  TOOLS: {
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetStatsDigestCommand = void 0;
4
+ const zod_1 = require("zod");
5
+ const api_1 = require("../../api");
6
+ const constants_1 = require("../../constants");
7
+ var GetStatsDigestCommand;
8
+ (function (GetStatsDigestCommand) {
9
+ GetStatsDigestCommand.url = api_1.REST_API.SYSTEM.STATS.DIGEST;
10
+ GetStatsDigestCommand.TSQ_url = GetStatsDigestCommand.url;
11
+ GetStatsDigestCommand.endpointDetails = (0, constants_1.getEndpointDetails)(api_1.SYSTEM_ROUTES.STATS.DIGEST, 'get', 'Get Stats Digest', { scope: 'digest', kind: 'read' }, 'Aggregated statistics for a datetime range [start, end): created and expired users, total traffic, traffic spent by users created within the range and new HWID devices. Per-user traffic history is stored with daily granularity (UTC), so the "traffic by new users" metric snaps to whole days at the range edges.');
12
+ GetStatsDigestCommand.RequestQuerySchema = zod_1.z.object({
13
+ start: zod_1.z.iso
14
+ .datetime({ offset: true })
15
+ .describe('Start of the range, ISO 8601 datetime with timezone (e.g. 2026-07-15T00:00:00Z). Inclusive.'),
16
+ end: zod_1.z.iso
17
+ .datetime({ offset: true })
18
+ .describe('End of the range, ISO 8601 datetime with timezone (e.g. 2026-07-16T00:00:00Z). Exclusive.'),
19
+ });
20
+ GetStatsDigestCommand.ResponseSchema = zod_1.z.object({
21
+ response: zod_1.z.object({
22
+ users: zod_1.z.object({
23
+ createdCount: zod_1.z.number(),
24
+ expiredCount: zod_1.z.number(),
25
+ }),
26
+ traffic: zod_1.z.object({
27
+ totalBytes: zod_1.z.string(),
28
+ byUsersCreatedInRangeBytes: zod_1.z.string(),
29
+ }),
30
+ hwidDevices: zod_1.z.object({
31
+ createdCount: zod_1.z.number(),
32
+ }),
33
+ }),
34
+ });
35
+ })(GetStatsDigestCommand || (exports.GetStatsDigestCommand = GetStatsDigestCommand = {}));
@@ -19,6 +19,7 @@ __exportStar(require("./get-metadata.command"), exports);
19
19
  __exportStar(require("./get-nodes-metrics.command"), exports);
20
20
  __exportStar(require("./get-nodes-statistics"), exports);
21
21
  __exportStar(require("./get-recap.command"), exports);
22
+ __exportStar(require("./get-stats-digest.command"), exports);
22
23
  __exportStar(require("./get-remnawave-health.command"), exports);
23
24
  __exportStar(require("./get-stats.command"), exports);
24
25
  __exportStar(require("./testers"), exports);
@@ -1170,4 +1170,14 @@ exports.ERRORS = {
1170
1170
  message: 'Remove many users from internal squad error',
1171
1171
  httpCode: 500,
1172
1172
  },
1173
+ GET_STATS_DIGEST_INVALID_RANGE: {
1174
+ code: 'A235',
1175
+ message: 'Start date must be before or equal to end date',
1176
+ httpCode: 400,
1177
+ },
1178
+ GET_STATS_DIGEST_ERROR: {
1179
+ code: 'A236',
1180
+ message: 'Get stats digest error',
1181
+ httpCode: 500,
1182
+ },
1173
1183
  };
@@ -16,6 +16,15 @@ exports.Oauth2SettingsSchema = zod_1.default.object({
16
16
  enabled: zod_1.default.boolean(),
17
17
  clientId: zod_1.default.nullable(zod_1.default.string()),
18
18
  clientSecret: zod_1.default.nullable(zod_1.default.string()),
19
+ frontendDomain: zod_1.default.nullable(zod_1.default.string().refine((val) => {
20
+ const fqdnRegex = /(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\.)+[a-zA-Z]{2,63}$)/;
21
+ if (fqdnRegex.test(val)) {
22
+ return true;
23
+ }
24
+ return false;
25
+ }, {
26
+ message: 'Must be a valid fully qualified domain name (FQDN), e.g. "docs.rw"',
27
+ })),
19
28
  plainDomain: zod_1.default.nullable(zod_1.default.string().refine((val) => {
20
29
  const fqdnRegex = /(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\.)+[a-zA-Z]{2,63}$)/;
21
30
  if (fqdnRegex.test(val)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnawave/backend-contract",
3
- "version": "2.9.21",
3
+ "version": "2.9.23",
4
4
  "description": "A contract library for Remnawave Backend. It can be used in backend and frontend.",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/remnawave",