@remnawave/backend-contract 2.9.22 → 2.9.24
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.
- package/build/backend/commands/remnawave-settings/get-remnawave-settings.command.d.ts +1 -0
- package/build/backend/commands/remnawave-settings/get-remnawave-settings.command.d.ts.map +1 -1
- package/build/backend/commands/remnawave-settings/update-remnawave-settings.command.d.ts +2 -0
- package/build/backend/commands/remnawave-settings/update-remnawave-settings.command.d.ts.map +1 -1
- package/build/backend/constants/cache-keys/cache-keys.constants.d.ts +5 -0
- package/build/backend/constants/cache-keys/cache-keys.constants.d.ts.map +1 -1
- package/build/backend/constants/cache-keys/cache-keys.constants.js +6 -1
- package/build/backend/models/export-stream/export-stream.schema.d.ts +30 -0
- package/build/backend/models/export-stream/export-stream.schema.d.ts.map +1 -0
- package/build/backend/models/export-stream/export-stream.schema.js +64 -0
- package/build/backend/models/export-stream/index.d.ts +2 -0
- package/build/backend/models/export-stream/index.d.ts.map +1 -0
- package/build/backend/models/export-stream/index.js +17 -0
- package/build/backend/models/index.d.ts +1 -0
- package/build/backend/models/index.d.ts.map +1 -1
- package/build/backend/models/index.js +1 -0
- package/build/backend/models/remnawave-settings/oauth2-settings.schema.d.ts +1 -0
- package/build/backend/models/remnawave-settings/oauth2-settings.schema.d.ts.map +1 -1
- package/build/backend/models/remnawave-settings/oauth2-settings.schema.js +9 -0
- package/build/backend/models/remnawave-settings/remnawave-settings.schema.d.ts +1 -0
- package/build/backend/models/remnawave-settings/remnawave-settings.schema.d.ts.map +1 -1
- package/build/frontend/constants/cache-keys/cache-keys.constants.js +6 -1
- package/build/frontend/models/export-stream/export-stream.schema.js +64 -0
- package/build/frontend/models/export-stream/index.js +17 -0
- package/build/frontend/models/index.js +1 -0
- package/build/frontend/models/remnawave-settings/oauth2-settings.schema.js +9 -0
- package/package.json +1 -1
|
@@ -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
|
|
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>;
|
package/build/backend/commands/remnawave-settings/update-remnawave-settings.command.d.ts.map
CHANGED
|
@@ -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
|
|
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"}
|
|
@@ -36,4 +36,9 @@ export declare const INTERNAL_CACHE_KEYS: {
|
|
|
36
36
|
export declare const INTERNAL_CACHE_KEYS_TTL: {
|
|
37
37
|
readonly NODE_USER_USAGE: 10800;
|
|
38
38
|
};
|
|
39
|
+
export declare const EXPORT_TO_STREAM_KEYS: {
|
|
40
|
+
readonly PREFIX: "ioraw:";
|
|
41
|
+
readonly USER_USAGE: "export:user_usage";
|
|
42
|
+
readonly SUBSCRIPTION_REQUESTS: "export:subscription_requests";
|
|
43
|
+
};
|
|
39
44
|
//# sourceMappingURL=cache-keys.constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-keys.constants.d.ts","sourceRoot":"","sources":["../../../../constants/cache-keys/cache-keys.constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE,eAAO,MAAM,UAAU;;6CAEa,MAAM;2CACR,MAAM,QAAQ,yBAAyB;kDAEhC,MAAM;oDACJ,MAAM;;sCAEpB,MAAM;uCACL,MAAM;uCACN,MAAM;mCACV,MAAM;sCACH,MAAM;iCACX,MAAM;wCACC,MAAM;kDACI,MAAM,QAAQ,yBAAyB;CAEtE,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;;;;;CAUjB,CAAC;AAEX,eAAO,MAAM,mBAAmB;;uCAEF,MAAM;;;;CAK1B,CAAC;AAEX,eAAO,MAAM,uBAAuB;;CAE1B,CAAC"}
|
|
1
|
+
{"version":3,"file":"cache-keys.constants.d.ts","sourceRoot":"","sources":["../../../../constants/cache-keys/cache-keys.constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE,eAAO,MAAM,UAAU;;6CAEa,MAAM;2CACR,MAAM,QAAQ,yBAAyB;kDAEhC,MAAM;oDACJ,MAAM;;sCAEpB,MAAM;uCACL,MAAM;uCACN,MAAM;mCACV,MAAM;sCACH,MAAM;iCACX,MAAM;wCACC,MAAM;kDACI,MAAM,QAAQ,yBAAyB;CAEtE,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;;;;;CAUjB,CAAC;AAEX,eAAO,MAAM,mBAAmB;;uCAEF,MAAM;;;;CAK1B,CAAC;AAEX,eAAO,MAAM,uBAAuB;;CAE1B,CAAC;AAEX,eAAO,MAAM,qBAAqB;;;;CAIxB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.INTERNAL_CACHE_KEYS_TTL = exports.INTERNAL_CACHE_KEYS = exports.CACHE_KEYS_TTL = exports.CACHE_KEYS = void 0;
|
|
3
|
+
exports.EXPORT_TO_STREAM_KEYS = exports.INTERNAL_CACHE_KEYS_TTL = exports.INTERNAL_CACHE_KEYS = exports.CACHE_KEYS_TTL = exports.CACHE_KEYS = void 0;
|
|
4
4
|
exports.CACHE_KEYS = {
|
|
5
5
|
SUBSCRIPTION_SETTINGS: 'subscription_settings',
|
|
6
6
|
EXTERNAL_SQUAD_SETTINGS: (uuid) => `external_squad_settings:${uuid}`,
|
|
@@ -38,3 +38,8 @@ exports.INTERNAL_CACHE_KEYS = {
|
|
|
38
38
|
exports.INTERNAL_CACHE_KEYS_TTL = {
|
|
39
39
|
NODE_USER_USAGE: 10800, // 3 hours in seconds
|
|
40
40
|
};
|
|
41
|
+
exports.EXPORT_TO_STREAM_KEYS = {
|
|
42
|
+
PREFIX: 'ioraw:',
|
|
43
|
+
USER_USAGE: 'export:user_usage',
|
|
44
|
+
SUBSCRIPTION_REQUESTS: 'export:subscription_requests',
|
|
45
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
export declare const USER_USAGE_STREAM_MESSAGE_VERSION = "1";
|
|
3
|
+
export declare const UserUsageStreamRecordSchema: z.ZodObject<{
|
|
4
|
+
userId: z.ZodString;
|
|
5
|
+
totalBytes: z.ZodString;
|
|
6
|
+
}, z.core.$strip>;
|
|
7
|
+
export declare const RemnawaveUserUsageStreamMessageSchema: z.ZodObject<{
|
|
8
|
+
v: z.ZodLiteral<"1">;
|
|
9
|
+
nodeId: z.ZodString;
|
|
10
|
+
ts: z.ZodPipe<z.ZodISODateTime, z.ZodTransform<Date, string>>;
|
|
11
|
+
records: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<{
|
|
12
|
+
userId: string;
|
|
13
|
+
totalBytes: string;
|
|
14
|
+
}[], string>>, z.ZodArray<z.ZodObject<{
|
|
15
|
+
userId: z.ZodString;
|
|
16
|
+
totalBytes: z.ZodString;
|
|
17
|
+
}, z.core.$strip>>>;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
export type TUserUsageStreamRecord = z.infer<typeof UserUsageStreamRecordSchema>;
|
|
20
|
+
export type TRemnawaveUserUsageStreamMessage = z.infer<typeof RemnawaveUserUsageStreamMessageSchema>;
|
|
21
|
+
export declare const SUBSCRIPTION_REQUEST_STREAM_MESSAGE_VERSION = "1";
|
|
22
|
+
export declare const RemnawaveSubscriptionRequestStreamMessageSchema: z.ZodObject<{
|
|
23
|
+
v: z.ZodLiteral<"1">;
|
|
24
|
+
userId: z.ZodString;
|
|
25
|
+
requestAt: z.ZodPipe<z.ZodISODateTime, z.ZodTransform<Date, string>>;
|
|
26
|
+
requestIp: z.ZodOptional<z.ZodString>;
|
|
27
|
+
userAgent: z.ZodOptional<z.ZodString>;
|
|
28
|
+
}, z.core.$strip>;
|
|
29
|
+
export type TRemnawaveSubscriptionRequestStreamMessage = z.infer<typeof RemnawaveSubscriptionRequestStreamMessageSchema>;
|
|
30
|
+
//# sourceMappingURL=export-stream.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-stream.schema.d.ts","sourceRoot":"","sources":["../../../../models/export-stream/export-stream.schema.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAQpB,eAAO,MAAM,iCAAiC,MAAM,CAAC;AAErD,eAAO,MAAM,2BAA2B;;;iBAMtC,CAAC;AAEH,eAAO,MAAM,qCAAqC;;;;;;;;;;;iBAyB5C,CAAC;AAEP,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AACjF,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAClD,OAAO,qCAAqC,CAC/C,CAAC;AAEF,eAAO,MAAM,2CAA2C,MAAM,CAAC;AAE/D,eAAO,MAAM,+CAA+C;;;;;;iBAkBtD,CAAC;AAEP,MAAM,MAAM,0CAA0C,GAAG,CAAC,CAAC,KAAK,CAC5D,OAAO,+CAA+C,CACzD,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.RemnawaveSubscriptionRequestStreamMessageSchema = exports.SUBSCRIPTION_REQUEST_STREAM_MESSAGE_VERSION = exports.RemnawaveUserUsageStreamMessageSchema = exports.UserUsageStreamRecordSchema = exports.USER_USAGE_STREAM_MESSAGE_VERSION = void 0;
|
|
7
|
+
const zod_1 = __importDefault(require("zod"));
|
|
8
|
+
// Stream keys duplicated from EXPORT_TO_STREAM_KEYS (constants) as plain strings:
|
|
9
|
+
// this file must stay importable without barrel/directory resolution so that
|
|
10
|
+
// standalone consumers (and Node type-stripping) can load it directly.
|
|
11
|
+
const USER_USAGE_STREAM_KEY = 'ioraw:export:user_usage';
|
|
12
|
+
const SUBSCRIPTION_REQUESTS_STREAM_KEY = 'ioraw:export:subscription_requests';
|
|
13
|
+
exports.USER_USAGE_STREAM_MESSAGE_VERSION = '1';
|
|
14
|
+
exports.UserUsageStreamRecordSchema = zod_1.default.object({
|
|
15
|
+
userId: zod_1.default.string().regex(/^\d+$/).describe('User ID (bigint as string).'),
|
|
16
|
+
totalBytes: zod_1.default
|
|
17
|
+
.string()
|
|
18
|
+
.regex(/^\d+$/)
|
|
19
|
+
.describe('Traffic consumed by the user in this batch, bytes (bigint as string).'),
|
|
20
|
+
});
|
|
21
|
+
exports.RemnawaveUserUsageStreamMessageSchema = zod_1.default
|
|
22
|
+
.object({
|
|
23
|
+
v: zod_1.default.literal(exports.USER_USAGE_STREAM_MESSAGE_VERSION).describe('Message schema version.'),
|
|
24
|
+
nodeId: zod_1.default
|
|
25
|
+
.string()
|
|
26
|
+
.regex(/^\d+$/)
|
|
27
|
+
.describe('Node ID the batch belongs to (bigint as string).'),
|
|
28
|
+
ts: zod_1.default.iso
|
|
29
|
+
.datetime()
|
|
30
|
+
.transform((str) => new Date(str))
|
|
31
|
+
.describe('Time the batch was exported (ISO 8601, UTC).'),
|
|
32
|
+
records: zod_1.default
|
|
33
|
+
.string()
|
|
34
|
+
.regex(/^\d+:\d+(;\d+:\d+)*$/)
|
|
35
|
+
.transform((raw) => raw.split(';').map((pair) => {
|
|
36
|
+
const [userId, totalBytes] = pair.split(':');
|
|
37
|
+
return { userId, totalBytes };
|
|
38
|
+
}))
|
|
39
|
+
.pipe(zod_1.default.array(exports.UserUsageStreamRecordSchema))
|
|
40
|
+
.describe('User traffic deltas: "userId:totalBytes" pairs separated by ";".'),
|
|
41
|
+
})
|
|
42
|
+
.meta({
|
|
43
|
+
description: `A single message of the "${USER_USAGE_STREAM_KEY}" Redis Stream (EXPORT_TO_STREAM_ENABLED).`,
|
|
44
|
+
});
|
|
45
|
+
exports.SUBSCRIPTION_REQUEST_STREAM_MESSAGE_VERSION = '1';
|
|
46
|
+
exports.RemnawaveSubscriptionRequestStreamMessageSchema = zod_1.default
|
|
47
|
+
.object({
|
|
48
|
+
v: zod_1.default
|
|
49
|
+
.literal(exports.SUBSCRIPTION_REQUEST_STREAM_MESSAGE_VERSION)
|
|
50
|
+
.describe('Message schema version.'),
|
|
51
|
+
userId: zod_1.default
|
|
52
|
+
.string()
|
|
53
|
+
.regex(/^\d+$/)
|
|
54
|
+
.describe('ID of the user who requested the subscription (bigint as string).'),
|
|
55
|
+
requestAt: zod_1.default.iso
|
|
56
|
+
.datetime()
|
|
57
|
+
.transform((str) => new Date(str))
|
|
58
|
+
.describe('Time of the subscription request (ISO 8601, UTC).'),
|
|
59
|
+
requestIp: zod_1.default.string().optional().describe('Client IP address, omitted if unknown.'),
|
|
60
|
+
userAgent: zod_1.default.string().optional().describe('Client User-Agent, omitted if unknown.'),
|
|
61
|
+
})
|
|
62
|
+
.meta({
|
|
63
|
+
description: `A single message of the "${SUBSCRIPTION_REQUESTS_STREAM_KEY}" Redis Stream (EXPORT_TO_STREAM_ENABLED).`,
|
|
64
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../models/export-stream/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,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("./export-stream.schema"), exports);
|
|
@@ -4,6 +4,7 @@ export * from './base-internal-squad.schema';
|
|
|
4
4
|
export * from './base-stat.schema';
|
|
5
5
|
export * from './config-profile-inbounds.schema';
|
|
6
6
|
export * from './config-profile.schema';
|
|
7
|
+
export * from './export-stream';
|
|
7
8
|
export * from './extended-users.schema';
|
|
8
9
|
export * from './external-squad.schema';
|
|
9
10
|
export * from './external-squads';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../models/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC;AACtD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uCAAuC,CAAC;AACtD,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,iCAAiC,CAAC;AAChD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../models/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC;AACtD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uCAAuC,CAAC;AACtD,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,iCAAiC,CAAC;AAChD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC"}
|
|
@@ -20,6 +20,7 @@ __exportStar(require("./base-internal-squad.schema"), exports);
|
|
|
20
20
|
__exportStar(require("./base-stat.schema"), exports);
|
|
21
21
|
__exportStar(require("./config-profile-inbounds.schema"), exports);
|
|
22
22
|
__exportStar(require("./config-profile.schema"), exports);
|
|
23
|
+
__exportStar(require("./export-stream"), exports);
|
|
23
24
|
__exportStar(require("./extended-users.schema"), exports);
|
|
24
25
|
__exportStar(require("./external-squad.schema"), exports);
|
|
25
26
|
__exportStar(require("./external-squads"), exports);
|
|
@@ -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
|
|
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
|
|
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,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.INTERNAL_CACHE_KEYS_TTL = exports.INTERNAL_CACHE_KEYS = exports.CACHE_KEYS_TTL = exports.CACHE_KEYS = void 0;
|
|
3
|
+
exports.EXPORT_TO_STREAM_KEYS = exports.INTERNAL_CACHE_KEYS_TTL = exports.INTERNAL_CACHE_KEYS = exports.CACHE_KEYS_TTL = exports.CACHE_KEYS = void 0;
|
|
4
4
|
exports.CACHE_KEYS = {
|
|
5
5
|
SUBSCRIPTION_SETTINGS: 'subscription_settings',
|
|
6
6
|
EXTERNAL_SQUAD_SETTINGS: (uuid) => `external_squad_settings:${uuid}`,
|
|
@@ -38,3 +38,8 @@ exports.INTERNAL_CACHE_KEYS = {
|
|
|
38
38
|
exports.INTERNAL_CACHE_KEYS_TTL = {
|
|
39
39
|
NODE_USER_USAGE: 10800, // 3 hours in seconds
|
|
40
40
|
};
|
|
41
|
+
exports.EXPORT_TO_STREAM_KEYS = {
|
|
42
|
+
PREFIX: 'ioraw:',
|
|
43
|
+
USER_USAGE: 'export:user_usage',
|
|
44
|
+
SUBSCRIPTION_REQUESTS: 'export:subscription_requests',
|
|
45
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.RemnawaveSubscriptionRequestStreamMessageSchema = exports.SUBSCRIPTION_REQUEST_STREAM_MESSAGE_VERSION = exports.RemnawaveUserUsageStreamMessageSchema = exports.UserUsageStreamRecordSchema = exports.USER_USAGE_STREAM_MESSAGE_VERSION = void 0;
|
|
7
|
+
const zod_1 = __importDefault(require("zod"));
|
|
8
|
+
// Stream keys duplicated from EXPORT_TO_STREAM_KEYS (constants) as plain strings:
|
|
9
|
+
// this file must stay importable without barrel/directory resolution so that
|
|
10
|
+
// standalone consumers (and Node type-stripping) can load it directly.
|
|
11
|
+
const USER_USAGE_STREAM_KEY = 'ioraw:export:user_usage';
|
|
12
|
+
const SUBSCRIPTION_REQUESTS_STREAM_KEY = 'ioraw:export:subscription_requests';
|
|
13
|
+
exports.USER_USAGE_STREAM_MESSAGE_VERSION = '1';
|
|
14
|
+
exports.UserUsageStreamRecordSchema = zod_1.default.object({
|
|
15
|
+
userId: zod_1.default.string().regex(/^\d+$/).describe('User ID (bigint as string).'),
|
|
16
|
+
totalBytes: zod_1.default
|
|
17
|
+
.string()
|
|
18
|
+
.regex(/^\d+$/)
|
|
19
|
+
.describe('Traffic consumed by the user in this batch, bytes (bigint as string).'),
|
|
20
|
+
});
|
|
21
|
+
exports.RemnawaveUserUsageStreamMessageSchema = zod_1.default
|
|
22
|
+
.object({
|
|
23
|
+
v: zod_1.default.literal(exports.USER_USAGE_STREAM_MESSAGE_VERSION).describe('Message schema version.'),
|
|
24
|
+
nodeId: zod_1.default
|
|
25
|
+
.string()
|
|
26
|
+
.regex(/^\d+$/)
|
|
27
|
+
.describe('Node ID the batch belongs to (bigint as string).'),
|
|
28
|
+
ts: zod_1.default.iso
|
|
29
|
+
.datetime()
|
|
30
|
+
.transform((str) => new Date(str))
|
|
31
|
+
.describe('Time the batch was exported (ISO 8601, UTC).'),
|
|
32
|
+
records: zod_1.default
|
|
33
|
+
.string()
|
|
34
|
+
.regex(/^\d+:\d+(;\d+:\d+)*$/)
|
|
35
|
+
.transform((raw) => raw.split(';').map((pair) => {
|
|
36
|
+
const [userId, totalBytes] = pair.split(':');
|
|
37
|
+
return { userId, totalBytes };
|
|
38
|
+
}))
|
|
39
|
+
.pipe(zod_1.default.array(exports.UserUsageStreamRecordSchema))
|
|
40
|
+
.describe('User traffic deltas: "userId:totalBytes" pairs separated by ";".'),
|
|
41
|
+
})
|
|
42
|
+
.meta({
|
|
43
|
+
description: `A single message of the "${USER_USAGE_STREAM_KEY}" Redis Stream (EXPORT_TO_STREAM_ENABLED).`,
|
|
44
|
+
});
|
|
45
|
+
exports.SUBSCRIPTION_REQUEST_STREAM_MESSAGE_VERSION = '1';
|
|
46
|
+
exports.RemnawaveSubscriptionRequestStreamMessageSchema = zod_1.default
|
|
47
|
+
.object({
|
|
48
|
+
v: zod_1.default
|
|
49
|
+
.literal(exports.SUBSCRIPTION_REQUEST_STREAM_MESSAGE_VERSION)
|
|
50
|
+
.describe('Message schema version.'),
|
|
51
|
+
userId: zod_1.default
|
|
52
|
+
.string()
|
|
53
|
+
.regex(/^\d+$/)
|
|
54
|
+
.describe('ID of the user who requested the subscription (bigint as string).'),
|
|
55
|
+
requestAt: zod_1.default.iso
|
|
56
|
+
.datetime()
|
|
57
|
+
.transform((str) => new Date(str))
|
|
58
|
+
.describe('Time of the subscription request (ISO 8601, UTC).'),
|
|
59
|
+
requestIp: zod_1.default.string().optional().describe('Client IP address, omitted if unknown.'),
|
|
60
|
+
userAgent: zod_1.default.string().optional().describe('Client User-Agent, omitted if unknown.'),
|
|
61
|
+
})
|
|
62
|
+
.meta({
|
|
63
|
+
description: `A single message of the "${SUBSCRIPTION_REQUESTS_STREAM_KEY}" Redis Stream (EXPORT_TO_STREAM_ENABLED).`,
|
|
64
|
+
});
|
|
@@ -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("./export-stream.schema"), exports);
|
|
@@ -20,6 +20,7 @@ __exportStar(require("./base-internal-squad.schema"), exports);
|
|
|
20
20
|
__exportStar(require("./base-stat.schema"), exports);
|
|
21
21
|
__exportStar(require("./config-profile-inbounds.schema"), exports);
|
|
22
22
|
__exportStar(require("./config-profile.schema"), exports);
|
|
23
|
+
__exportStar(require("./export-stream"), exports);
|
|
23
24
|
__exportStar(require("./extended-users.schema"), exports);
|
|
24
25
|
__exportStar(require("./external-squad.schema"), exports);
|
|
25
26
|
__exportStar(require("./external-squads"), exports);
|
|
@@ -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