@mayhem93/nexxus-core-lib 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.
- package/LICENSE +373 -0
- package/README.md +384 -0
- package/dist-cjs/common/BuiltinSchemas.js +26 -0
- package/dist-cjs/common/BuiltinSchemas.js.map +1 -0
- package/dist-cjs/common/FilterQuery.js +252 -0
- package/dist-cjs/common/FilterQuery.js.map +1 -0
- package/dist-cjs/common/JsonPatch.js +392 -0
- package/dist-cjs/common/JsonPatch.js.map +1 -0
- package/dist-cjs/common/ModelTypes.js +3 -0
- package/dist-cjs/common/ModelTypes.js.map +1 -0
- package/dist-cjs/common/QueuePayloads.js +3 -0
- package/dist-cjs/common/QueuePayloads.js.map +1 -0
- package/dist-cjs/common/SchemaValidator.js +41 -0
- package/dist-cjs/common/SchemaValidator.js.map +1 -0
- package/dist-cjs/index.js +20 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/lib/BaseService.js +83 -0
- package/dist-cjs/lib/BaseService.js.map +1 -0
- package/dist-cjs/lib/ConfigManager.js +138 -0
- package/dist-cjs/lib/ConfigManager.js.map +1 -0
- package/dist-cjs/lib/ConfigProvider.js +65 -0
- package/dist-cjs/lib/ConfigProvider.js.map +1 -0
- package/dist-cjs/lib/Exceptions.js +64 -0
- package/dist-cjs/lib/Exceptions.js.map +1 -0
- package/dist-cjs/lib/GlobalServices.js +29 -0
- package/dist-cjs/lib/GlobalServices.js.map +1 -0
- package/dist-cjs/lib/Logger.js +131 -0
- package/dist-cjs/lib/Logger.js.map +1 -0
- package/dist-cjs/models/AppModel.js +14 -0
- package/dist-cjs/models/AppModel.js.map +1 -0
- package/dist-cjs/models/Application.js +79 -0
- package/dist-cjs/models/Application.js.map +1 -0
- package/dist-cjs/models/BaseModel.js +33 -0
- package/dist-cjs/models/BaseModel.js.map +1 -0
- package/dist-cjs/models/User.js +39 -0
- package/dist-cjs/models/User.js.map +1 -0
- package/dist-cjs/types/QueuePayloads.js +3 -0
- package/dist-cjs/types/QueuePayloads.js.map +1 -0
- package/dist-esm/common/BuiltinSchemas.js +22 -0
- package/dist-esm/common/BuiltinSchemas.js.map +1 -0
- package/dist-esm/common/FilterQuery.js +247 -0
- package/dist-esm/common/FilterQuery.js.map +1 -0
- package/dist-esm/common/JsonPatch.js +387 -0
- package/dist-esm/common/JsonPatch.js.map +1 -0
- package/dist-esm/common/ModelTypes.js +2 -0
- package/dist-esm/common/ModelTypes.js.map +1 -0
- package/dist-esm/common/QueuePayloads.js +2 -0
- package/dist-esm/common/QueuePayloads.js.map +1 -0
- package/dist-esm/common/SchemaValidator.js +37 -0
- package/dist-esm/common/SchemaValidator.js.map +1 -0
- package/dist-esm/index.js +16 -0
- package/dist-esm/index.js.map +1 -0
- package/dist-esm/lib/BaseService.js +79 -0
- package/dist-esm/lib/BaseService.js.map +1 -0
- package/dist-esm/lib/ConfigManager.js +133 -0
- package/dist-esm/lib/ConfigManager.js.map +1 -0
- package/dist-esm/lib/ConfigProvider.js +56 -0
- package/dist-esm/lib/ConfigProvider.js.map +1 -0
- package/dist-esm/lib/Exceptions.js +53 -0
- package/dist-esm/lib/Exceptions.js.map +1 -0
- package/dist-esm/lib/GlobalServices.js +25 -0
- package/dist-esm/lib/GlobalServices.js.map +1 -0
- package/dist-esm/lib/Logger.js +125 -0
- package/dist-esm/lib/Logger.js.map +1 -0
- package/dist-esm/models/AppModel.js +10 -0
- package/dist-esm/models/AppModel.js.map +1 -0
- package/dist-esm/models/Application.js +74 -0
- package/dist-esm/models/Application.js.map +1 -0
- package/dist-esm/models/BaseModel.js +29 -0
- package/dist-esm/models/BaseModel.js.map +1 -0
- package/dist-esm/models/User.js +35 -0
- package/dist-esm/models/User.js.map +1 -0
- package/dist-esm/types/QueuePayloads.js +2 -0
- package/dist-esm/types/QueuePayloads.js.map +1 -0
- package/dist-types/common/BuiltinSchemas.d.ts +69 -0
- package/dist-types/common/FilterQuery.d.ts +58 -0
- package/dist-types/common/JsonPatch.d.ts +78 -0
- package/dist-types/common/ModelTypes.d.ts +24 -0
- package/dist-types/common/QueuePayloads.d.ts +78 -0
- package/dist-types/common/SchemaValidator.d.ts +4 -0
- package/dist-types/index.d.ts +15 -0
- package/dist-types/lib/BaseService.d.ts +28 -0
- package/dist-types/lib/ConfigManager.d.ts +48 -0
- package/dist-types/lib/ConfigProvider.d.ts +27 -0
- package/dist-types/lib/Exceptions.d.ts +33 -0
- package/dist-types/lib/GlobalServices.d.ts +19 -0
- package/dist-types/lib/Logger.d.ts +48 -0
- package/dist-types/models/AppModel.d.ts +9 -0
- package/dist-types/models/Application.d.ts +29 -0
- package/dist-types/models/BaseModel.d.ts +23 -0
- package/dist-types/models/User.d.ts +17 -0
- package/dist-types/types/QueuePayloads.d.ts +57 -0
- package/package.json +46 -0
- package/src/schemas/root.schema.json +8 -0
- package/src/schemas/winston-logger.schema.json +24 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { FatalErrorException, InvalidConfigException } from "./Exceptions";
|
|
2
|
+
import { NexxusFileConfigProvider, NexxusEnvVarsConfigProvider, NexxusCliArgConfigProvider } from "./ConfigProvider";
|
|
3
|
+
import { Ajv } from "ajv";
|
|
4
|
+
import * as Dot from "dot-prop";
|
|
5
|
+
import deepMerge from "deepmerge";
|
|
6
|
+
import * as fs from "node:fs";
|
|
7
|
+
import * as path from "node:path";
|
|
8
|
+
export class NexxusConfigManager {
|
|
9
|
+
static CONF_FILE_NAME = "nexxus.conf.json";
|
|
10
|
+
jsonSchema;
|
|
11
|
+
envVarsSpecs = [];
|
|
12
|
+
cliArgsSpecs = [];
|
|
13
|
+
data = {};
|
|
14
|
+
configProviders = [];
|
|
15
|
+
customProviders = [];
|
|
16
|
+
constructor(confFile) {
|
|
17
|
+
const schemaPath = path.join(__dirname, "../../src/schemas/root.schema.json");
|
|
18
|
+
this.jsonSchema = JSON.parse(fs.readFileSync(schemaPath, 'utf-8'));
|
|
19
|
+
this.configProviders.push(new NexxusFileConfigProvider(path.join(process.cwd(), confFile ?? NexxusConfigManager.CONF_FILE_NAME)));
|
|
20
|
+
this.configProviders.push(new NexxusEnvVarsConfigProvider());
|
|
21
|
+
this.configProviders.push(new NexxusCliArgConfigProvider());
|
|
22
|
+
}
|
|
23
|
+
addCustomProvider(provider) {
|
|
24
|
+
this.configProviders.splice(1, 0, provider);
|
|
25
|
+
}
|
|
26
|
+
addJsonSchemaDef(def) {
|
|
27
|
+
if (this.jsonSchema.$defs !== undefined) {
|
|
28
|
+
this.jsonSchema.$defs[def.name] = def.definition;
|
|
29
|
+
}
|
|
30
|
+
if (this.jsonSchema.properties !== undefined) {
|
|
31
|
+
this.jsonSchema.properties[def.where] = { "$ref": `#/$defs/${def.name}` };
|
|
32
|
+
}
|
|
33
|
+
if (def.required) {
|
|
34
|
+
if (this.jsonSchema.required === undefined) {
|
|
35
|
+
this.jsonSchema.required = [];
|
|
36
|
+
}
|
|
37
|
+
this.jsonSchema.required.push(def.where);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
validateServices(svcs) {
|
|
41
|
+
for (const NxxSvc of svcs) {
|
|
42
|
+
this.addCliArgsToSpec(NxxSvc.cliArgConfig());
|
|
43
|
+
this.addEnvVarsToSpec(NxxSvc.envVarConfig());
|
|
44
|
+
this.addJsonSchemaDef(NxxSvc.schema());
|
|
45
|
+
}
|
|
46
|
+
this.validate();
|
|
47
|
+
}
|
|
48
|
+
addCliArgsToSpec(cliArgSpec) {
|
|
49
|
+
this.cliArgsSpecs.push(cliArgSpec);
|
|
50
|
+
}
|
|
51
|
+
addEnvVarsToSpec(envVarSpec) {
|
|
52
|
+
this.envVarsSpecs.push(envVarSpec);
|
|
53
|
+
}
|
|
54
|
+
populateFromCliArgs() {
|
|
55
|
+
if (this.cliArgsSpecs.length === 0) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const collectedNames = new Map();
|
|
59
|
+
const cliArgProvider = this.configProviders.at(-1);
|
|
60
|
+
this.cliArgsSpecs.forEach(spec => {
|
|
61
|
+
spec.specs.forEach((arg) => {
|
|
62
|
+
if (collectedNames.has(arg.name)) {
|
|
63
|
+
throw new InvalidConfigException(`Duplicate CLI argument name: "${arg.name}".
|
|
64
|
+
Defined first by source: "${collectedNames.get(arg.name)}" and now by source: "${spec.source}"`);
|
|
65
|
+
}
|
|
66
|
+
collectedNames.set(arg.name, spec.source);
|
|
67
|
+
cliArgProvider.addArgument(arg.name, arg.type);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
const parsed = cliArgProvider.getConfig();
|
|
71
|
+
this.cliArgsSpecs.forEach(spec => {
|
|
72
|
+
spec.specs.forEach(arg => {
|
|
73
|
+
if (parsed[arg.name] !== undefined && parsed[arg.name] !== null) {
|
|
74
|
+
Dot.setProperty(this.data, arg.location, parsed[arg.name]);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
populateFromEnvVars() {
|
|
80
|
+
if (this.envVarsSpecs.length === 0) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const collectedNames = new Map();
|
|
84
|
+
const envVarProvider = this.configProviders.at(-2);
|
|
85
|
+
const envResult = envVarProvider.getConfig();
|
|
86
|
+
const prefix = NexxusEnvVarsConfigProvider.ENV_VAR_PREFIX;
|
|
87
|
+
this.envVarsSpecs.forEach(spec => {
|
|
88
|
+
spec.specs.forEach(envVar => {
|
|
89
|
+
if (collectedNames.has(envVar.name)) {
|
|
90
|
+
throw new InvalidConfigException(`Duplicate Env var: "${prefix}_${envVar.name}".
|
|
91
|
+
Defined first by source: "${collectedNames.get(envVar.name)}" and now by source: "${spec.source}"`);
|
|
92
|
+
}
|
|
93
|
+
const value = envResult?.[`${prefix}${envVar.name}`];
|
|
94
|
+
if (value !== undefined) {
|
|
95
|
+
Dot.setProperty(this.data, envVar.location, value);
|
|
96
|
+
}
|
|
97
|
+
collectedNames.set(envVar.name, spec.source);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
async populateFromCustomProviders() {
|
|
102
|
+
for (const provider of this.customProviders) {
|
|
103
|
+
const result = await provider.getConfig();
|
|
104
|
+
this.data = deepMerge(this.data, result);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
formatAjvErrors(errors) {
|
|
108
|
+
return errors.map(err => {
|
|
109
|
+
return `\n${err.instancePath || '#root'}:\n\t${err.message}\n`;
|
|
110
|
+
}).join('\n');
|
|
111
|
+
}
|
|
112
|
+
async validate() {
|
|
113
|
+
const fileConfigProvider = this.configProviders[0];
|
|
114
|
+
this.data = fileConfigProvider.getConfig();
|
|
115
|
+
await this.populateFromCustomProviders();
|
|
116
|
+
this.populateFromCliArgs();
|
|
117
|
+
this.populateFromEnvVars();
|
|
118
|
+
const ajv = new Ajv();
|
|
119
|
+
const validator = ajv.compile(this.jsonSchema);
|
|
120
|
+
const result = validator(this.data);
|
|
121
|
+
if (!result) {
|
|
122
|
+
const validationOutput = this.formatAjvErrors(validator.errors);
|
|
123
|
+
throw new FatalErrorException('Could not validate configuration' + validationOutput);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
getConfig(field) {
|
|
127
|
+
if (!field) {
|
|
128
|
+
return this.data;
|
|
129
|
+
}
|
|
130
|
+
return this.data[field];
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=ConfigManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../src/lib/ConfigManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { FatalErrorException } from "./Exceptions";
|
|
2
|
+
import * as fs from "fs";
|
|
3
|
+
import { ArgumentParser, SUPPRESS } from "argparse";
|
|
4
|
+
export class NexxusConfigProvider {
|
|
5
|
+
}
|
|
6
|
+
export class NexxusAsyncConfigProvider {
|
|
7
|
+
}
|
|
8
|
+
export class NexxusFileConfigProvider extends NexxusConfigProvider {
|
|
9
|
+
filePath;
|
|
10
|
+
constructor(filePath) {
|
|
11
|
+
super();
|
|
12
|
+
this.filePath = filePath;
|
|
13
|
+
}
|
|
14
|
+
getConfig() {
|
|
15
|
+
try {
|
|
16
|
+
fs.accessSync(this.filePath);
|
|
17
|
+
}
|
|
18
|
+
catch (e) {
|
|
19
|
+
throw new FatalErrorException(`Cannot access config file "${this.filePath}": ${e.message}`);
|
|
20
|
+
}
|
|
21
|
+
return JSON.parse(fs.readFileSync(this.filePath, 'utf-8'));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export class NexxusEnvVarsConfigProvider extends NexxusConfigProvider {
|
|
25
|
+
static ENV_VAR_PREFIX = "NXX_";
|
|
26
|
+
getConfig() {
|
|
27
|
+
const result = {};
|
|
28
|
+
Object.keys(process.env).forEach(key => {
|
|
29
|
+
if (key.startsWith(NexxusEnvVarsConfigProvider.ENV_VAR_PREFIX)) {
|
|
30
|
+
result[key] = process.env[key];
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export class NexxusCliArgConfigProvider extends NexxusConfigProvider {
|
|
37
|
+
argParser;
|
|
38
|
+
originalExit;
|
|
39
|
+
constructor() {
|
|
40
|
+
super();
|
|
41
|
+
this.argParser = new ArgumentParser({ add_help: false, usage: SUPPRESS });
|
|
42
|
+
this.originalExit = this.argParser.exit.bind(this.argParser);
|
|
43
|
+
this.argParser.exit = (status, message) => {
|
|
44
|
+
if (message.search("unrecognized arguments: ") === -1) {
|
|
45
|
+
this.originalExit(status, message);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
addArgument(name, type) {
|
|
50
|
+
this.argParser.add_argument(`--${name}`, { type: type, dest: name, required: false });
|
|
51
|
+
}
|
|
52
|
+
getConfig() {
|
|
53
|
+
return this.argParser.parse_args();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=ConfigProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigProvider.js","sourceRoot":"","sources":["../../src/lib/ConfigProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AASpD,MAAM,OAAgB,oBAAoB;CAEzC;AAED,MAAM,OAAgB,yBAAyB;CAE9C;AAED,MAAM,OAAO,wBAAyB,SAAQ,oBAAoB;IAC5C;IAApB,YAAoB,QAAgB;QAClC,KAAK,EAAE,CAAC;QADU,aAAQ,GAAR,QAAQ,CAAQ;IAEpC,CAAC;IAEM,SAAS;QACd,IAAI,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,mBAAmB,CAAC,8BAA8B,IAAI,CAAC,QAAQ,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAiB,CAAC;IAC7E,CAAC;CACF;AAED,MAAM,OAAO,2BAA4B,SAAQ,oBAAoB;IACnE,MAAM,CAAC,cAAc,GAAsB,MAAM,CAAC;IAE3C,SAAS;QACd,MAAM,MAAM,GAAkB,EAAE,CAAC;QAEjC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACrC,IAAI,GAAG,CAAC,UAAU,CAAC,2BAA2B,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC/D,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAW,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;;AAGH,MAAM,OAAO,0BAA2B,SAAQ,oBAAoB;IAC1D,SAAS,CAAiB;IAC1B,YAAY,CAA4C;IAEhE;QACE,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE;YACxD,IAAI,OAAO,CAAC,MAAM,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAA;IACH,CAAC;IAEM,WAAW,CAAC,IAAY,EAAE,IAAgB;QAC/C,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACxF,CAAC;IAEM,SAAS;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export var NexxusExceptions;
|
|
2
|
+
(function (NexxusExceptions) {
|
|
3
|
+
NexxusExceptions["FATAL_ERROR"] = "FatalErrorException";
|
|
4
|
+
NexxusExceptions["BAD_REQUEST"] = "BadRequestException";
|
|
5
|
+
NexxusExceptions["CONNECTION_ERROR"] = "ConnectionErrorException";
|
|
6
|
+
NexxusExceptions["INVALID_CONFIG"] = "InvalidConfigException";
|
|
7
|
+
NexxusExceptions["INVALID_JSON_PATCH"] = "InvalidJsonPatchException";
|
|
8
|
+
NexxusExceptions["INVALID_QUERY_FILTER"] = "InvalidQueryFilterException";
|
|
9
|
+
NexxusExceptions["INVALID_USER_MODEL"] = "InvalidUserModelException";
|
|
10
|
+
})(NexxusExceptions || (NexxusExceptions = {}));
|
|
11
|
+
;
|
|
12
|
+
export class NexxusException extends Error {
|
|
13
|
+
constructor(type, message) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.name = type;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export class FatalErrorException extends NexxusException {
|
|
19
|
+
constructor(message) {
|
|
20
|
+
super(NexxusExceptions.FATAL_ERROR, message);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class BadRequestException extends NexxusException {
|
|
24
|
+
constructor(message) {
|
|
25
|
+
super(NexxusExceptions.BAD_REQUEST, message);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export class ConnectionException extends NexxusException {
|
|
29
|
+
constructor(message) {
|
|
30
|
+
super(NexxusExceptions.CONNECTION_ERROR, message);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class InvalidConfigException extends NexxusException {
|
|
34
|
+
constructor(message) {
|
|
35
|
+
super(NexxusExceptions.INVALID_CONFIG, message);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export class InvalidJsonPatchException extends NexxusException {
|
|
39
|
+
constructor(message) {
|
|
40
|
+
super(NexxusExceptions.INVALID_JSON_PATCH, message);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export class InvalidQueryFilterException extends NexxusException {
|
|
44
|
+
constructor(message) {
|
|
45
|
+
super(NexxusExceptions.INVALID_QUERY_FILTER, message);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export class InvalidUserModelException extends NexxusException {
|
|
49
|
+
constructor(message) {
|
|
50
|
+
super(NexxusExceptions.INVALID_USER_MODEL, message);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=Exceptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Exceptions.js","sourceRoot":"","sources":["../../src/lib/Exceptions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,gBAQX;AARD,WAAY,gBAAgB;IAC1B,uDAAmC,CAAA;IACnC,uDAAmC,CAAA;IACnC,iEAA6C,CAAA;IAC7C,6DAAyC,CAAA;IACzC,oEAAgD,CAAA;IAChD,wEAAoD,CAAA;IACpD,oEAAgD,CAAA;AAClD,CAAC,EARW,gBAAgB,KAAhB,gBAAgB,QAQ3B;AAAA,CAAC;AAEF,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IACtD,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IACtD,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IACtD,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,eAAe;IACzD,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,eAAe;IAC5D,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;CACF;AAED,MAAM,OAAO,2BAA4B,SAAQ,eAAe;IAC9D,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,eAAe;IAC5D,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export class NexxusGlobalServices {
|
|
2
|
+
static logger;
|
|
3
|
+
static configManager;
|
|
4
|
+
static database;
|
|
5
|
+
static messageQueue;
|
|
6
|
+
static redis;
|
|
7
|
+
static init(params) {
|
|
8
|
+
if (params.logger !== undefined) {
|
|
9
|
+
this.logger = params.logger;
|
|
10
|
+
}
|
|
11
|
+
if (params.configManager !== undefined) {
|
|
12
|
+
this.configManager = params.configManager;
|
|
13
|
+
}
|
|
14
|
+
if (params.database !== undefined) {
|
|
15
|
+
this.database = params.database;
|
|
16
|
+
}
|
|
17
|
+
if (params.messageQueue !== undefined) {
|
|
18
|
+
this.messageQueue = params.messageQueue;
|
|
19
|
+
}
|
|
20
|
+
if (params.redis !== undefined) {
|
|
21
|
+
this.redis = params.redis;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=GlobalServices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalServices.js","sourceRoot":"","sources":["../../src/lib/GlobalServices.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,oBAAoB;IAC/B,MAAM,CAAC,MAAM,CAA2C;IACxD,MAAM,CAAC,aAAa,CAAgC;IACpD,MAAM,CAAC,QAAQ,CAAU;IACzB,MAAM,CAAC,YAAY,CAAU;IAC7B,MAAM,CAAC,KAAK,CAAU;IAEtB,MAAM,CAAC,IAAI,CAAC,MAAgC;QAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9B,CAAC;QACD,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC5C,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAClC,CAAC;QACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QAC1C,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { NexxusBaseService } from './BaseService';
|
|
2
|
+
import * as Winston from 'winston';
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
export var NexxusLoggerLevels;
|
|
5
|
+
(function (NexxusLoggerLevels) {
|
|
6
|
+
NexxusLoggerLevels["EMERGENCY"] = "emerg";
|
|
7
|
+
NexxusLoggerLevels["ALERT"] = "alert";
|
|
8
|
+
NexxusLoggerLevels["CRITICAL"] = "crit";
|
|
9
|
+
NexxusLoggerLevels["ERROR"] = "error";
|
|
10
|
+
NexxusLoggerLevels["WARNING"] = "warn";
|
|
11
|
+
NexxusLoggerLevels["NOTICE"] = "notice";
|
|
12
|
+
NexxusLoggerLevels["INFO"] = "info";
|
|
13
|
+
NexxusLoggerLevels["DEBUG"] = "debug";
|
|
14
|
+
})(NexxusLoggerLevels || (NexxusLoggerLevels = {}));
|
|
15
|
+
export class NexxusBaseLogger extends NexxusBaseService {
|
|
16
|
+
constructor(services) {
|
|
17
|
+
super(services.configManager.getConfig('logger'));
|
|
18
|
+
}
|
|
19
|
+
debug(message, label) {
|
|
20
|
+
this.log("debug", message, label);
|
|
21
|
+
}
|
|
22
|
+
info(message, label) {
|
|
23
|
+
this.log("info", message, label);
|
|
24
|
+
}
|
|
25
|
+
warn(message, label) {
|
|
26
|
+
this.log("warn", message, label);
|
|
27
|
+
}
|
|
28
|
+
error(message, label) {
|
|
29
|
+
this.log("error", message, label);
|
|
30
|
+
}
|
|
31
|
+
critical(message, label) {
|
|
32
|
+
this.log("crit", message, label);
|
|
33
|
+
}
|
|
34
|
+
alert(message, label) {
|
|
35
|
+
this.log("alert", message, label);
|
|
36
|
+
}
|
|
37
|
+
emerg(message, label) {
|
|
38
|
+
this.log("emerg", message, label);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export class WinstonNexxusLogger extends NexxusBaseLogger {
|
|
42
|
+
winston;
|
|
43
|
+
static schemaPath = path.join(__dirname, "../../src/schemas/winston-logger.schema.json");
|
|
44
|
+
static envVars = {
|
|
45
|
+
source: this.name,
|
|
46
|
+
specs: [
|
|
47
|
+
{
|
|
48
|
+
name: "LOG_LEVEL",
|
|
49
|
+
location: "logger.level"
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
};
|
|
53
|
+
static cliArgs = {
|
|
54
|
+
source: this.name,
|
|
55
|
+
specs: []
|
|
56
|
+
};
|
|
57
|
+
constructor(services) {
|
|
58
|
+
super(services);
|
|
59
|
+
let format;
|
|
60
|
+
if (this.config.logType === "json") {
|
|
61
|
+
format = Winston.format.json({
|
|
62
|
+
circularValue: '[circular]'
|
|
63
|
+
});
|
|
64
|
+
format = Winston.format.combine(Winston.format.printf(info => {
|
|
65
|
+
const msg = info.message;
|
|
66
|
+
if (msg.startsWith("{") || msg.startsWith("[")) {
|
|
67
|
+
try {
|
|
68
|
+
info.message = JSON.parse(msg);
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
if (e.message.includes("Unexpected")) {
|
|
72
|
+
info.message = msg;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
throw e;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
info.label = info.label || "default-label";
|
|
80
|
+
return JSON.stringify(info);
|
|
81
|
+
}), format);
|
|
82
|
+
if (this.config.timestamps) {
|
|
83
|
+
format = Winston.format.combine(Winston.format.timestamp(), format);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
format = Winston.format.printf(info => {
|
|
88
|
+
let result = '';
|
|
89
|
+
if (info.message === undefined) {
|
|
90
|
+
const isMetadataEmpty = Object.keys(info.metadata).length === 0;
|
|
91
|
+
info.message = isMetadataEmpty ? 'undefined' : JSON.stringify(info.metadata);
|
|
92
|
+
}
|
|
93
|
+
info.label = info.label || "default-label";
|
|
94
|
+
if (info.timestamp) {
|
|
95
|
+
result += `[${info.timestamp}] `;
|
|
96
|
+
}
|
|
97
|
+
return result + `${info.level.toLocaleUpperCase()} [${info.label}]: ${info.message}`;
|
|
98
|
+
});
|
|
99
|
+
format = Winston.format.combine(Winston.format.metadata({ fillExcept: ['message', 'level', 'timestamp', 'label'] }), format);
|
|
100
|
+
if (this.config.timestamps) {
|
|
101
|
+
format = Winston.format.combine(Winston.format.timestamp(), format);
|
|
102
|
+
}
|
|
103
|
+
if (this.config.colors) {
|
|
104
|
+
format = Winston.format.combine(Winston.format.colorize(), format);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
this.winston = Winston.createLogger({
|
|
108
|
+
level: this.config.level,
|
|
109
|
+
format,
|
|
110
|
+
transports: [
|
|
111
|
+
new Winston.transports.Console()
|
|
112
|
+
]
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
log(level, message, label) {
|
|
116
|
+
if (typeof message === 'object' || Array.isArray(message)) {
|
|
117
|
+
message = JSON.stringify(message);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
message = String(message);
|
|
121
|
+
}
|
|
122
|
+
this.winston.log(level, message, { label });
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=Logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/lib/Logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { NexxusBaseModel } from "./BaseModel";
|
|
2
|
+
export class NexxusAppModel extends NexxusBaseModel {
|
|
3
|
+
constructor(props) {
|
|
4
|
+
super(props);
|
|
5
|
+
if (!props.appId) {
|
|
6
|
+
throw new Error('AppModel requires appId');
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=AppModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppModel.js","sourceRoot":"","sources":["../../src/models/AppModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAoB,MAAM,aAAa,CAAC;AAQhE,MAAM,OAAO,cAAe,SAAQ,eAAmC;IACrE,YAAY,KAAyB;QACnC,KAAK,CAAC,KAAK,CAAC,CAAC;QAGb,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { NexxusBaseModel, MODEL_REGISTRY } from "./BaseModel";
|
|
2
|
+
import * as Dot from 'dot-prop';
|
|
3
|
+
export class NexxusApplication extends NexxusBaseModel {
|
|
4
|
+
constructor(data) {
|
|
5
|
+
super({ ...data, type: MODEL_REGISTRY.application });
|
|
6
|
+
if (Object.keys(data.schema).length === 0) {
|
|
7
|
+
throw new Error("Application schema cannot be empty");
|
|
8
|
+
}
|
|
9
|
+
if (data.description !== undefined && typeof data.description !== 'string') {
|
|
10
|
+
throw new Error("Application 'description' must be a string if provided");
|
|
11
|
+
}
|
|
12
|
+
if (data.name === undefined || typeof data.name !== 'string') {
|
|
13
|
+
throw new Error("Application 'name' is required and must be a string");
|
|
14
|
+
}
|
|
15
|
+
if (data.authEnabled === undefined || typeof data.authEnabled !== 'boolean') {
|
|
16
|
+
throw new Error("Application 'authEnabled' is required and must be a boolean");
|
|
17
|
+
}
|
|
18
|
+
if (data.authEnabled) {
|
|
19
|
+
if (!data.userDetailSchema || typeof data.userDetailSchema !== 'object') {
|
|
20
|
+
throw new Error("Application 'userSchema' must be provided when 'authEnabled' is enabled");
|
|
21
|
+
}
|
|
22
|
+
if (typeof data.allowMultipleLogin !== 'boolean' && data.allowMultipleLogin !== undefined) {
|
|
23
|
+
throw new Error("Application 'allowMultipleLogin' must be a boolean when 'authEnabled' is enabled");
|
|
24
|
+
}
|
|
25
|
+
if (data.userTypes !== undefined && typeof data.userTypes !== 'object') {
|
|
26
|
+
throw new Error("Application 'userTypes' must be an object when 'authEnabled' is enabled");
|
|
27
|
+
}
|
|
28
|
+
this.data.allowMultipleLogin = data.allowMultipleLogin || true;
|
|
29
|
+
this.data.userTypes = data.userTypes ? { ...data.userTypes, ...{ default: {} } } : { default: {} };
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
this.data.allowMultipleLogin = null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
getSchema() {
|
|
36
|
+
return this.data.schema;
|
|
37
|
+
}
|
|
38
|
+
getUserDetailSchema(userType = 'default') {
|
|
39
|
+
if (!this.data.userDetailSchema) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
return this.data.userDetailSchema[userType];
|
|
43
|
+
}
|
|
44
|
+
getAppModelFieldType(modelType, fieldPath) {
|
|
45
|
+
const appModelFieldType = Dot.getProperty(this.getSchema(), `${modelType}.${fieldPath}.type`);
|
|
46
|
+
return appModelFieldType;
|
|
47
|
+
}
|
|
48
|
+
getModelFilterableFields(modelType) {
|
|
49
|
+
const modelDef = this.getSchema()[modelType];
|
|
50
|
+
const filterableFields = new Set();
|
|
51
|
+
if (!modelDef) {
|
|
52
|
+
return filterableFields;
|
|
53
|
+
}
|
|
54
|
+
const collectFilterableFields = (fields, prefix = '') => {
|
|
55
|
+
for (const [fieldName, fieldDef] of Object.entries(fields)) {
|
|
56
|
+
const fieldPath = prefix ? `${prefix}.${fieldName}` : fieldName;
|
|
57
|
+
if (fieldDef.type === 'object') {
|
|
58
|
+
collectFilterableFields(fieldDef.properties, fieldPath);
|
|
59
|
+
}
|
|
60
|
+
else if (fieldDef.type === 'array') {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
if (fieldDef.filterable) {
|
|
65
|
+
filterableFields.add(fieldPath);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
collectFilterableFields(modelDef);
|
|
71
|
+
return filterableFields;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=Application.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Application.js","sourceRoot":"","sources":["../../src/models/Application.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,cAAc,EACf,MAAM,aAAa,CAAC;AAIrB,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAwBhC,MAAM,OAAO,iBAAkB,SAAQ,eAA2C;IAChF,YAAY,IAAgC;QAC1C,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC;QAErD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC3E,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,OAAO,IAAI,CAAC,gBAAgB,KAAK,QAAQ,EAAE,CAAC;gBACxE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC7F,CAAC;YAED,IAAI,OAAO,IAAI,CAAC,kBAAkB,KAAK,SAAS,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBAC1F,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;YACtG,CAAC;YAED,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;gBACvE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC7F,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACrG,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACtC,CAAC;IAGH,CAAC;IAEM,SAAS;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1B,CAAC;IAEM,mBAAmB,CAAC,WAAmB,SAAS;QACrD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAEM,oBAAoB,CAAC,SAAiB,EAAE,SAAiB;QAC9D,MAAM,iBAAiB,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,SAAS,IAAI,SAAS,OAAO,CAAC,CAAC;QAE9F,OAAO,iBAAuC,CAAC;IACjD,CAAC;IAEM,wBAAwB,CAAC,SAAiB;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,gBAAgB,GAAgB,IAAI,GAAG,EAAE,CAAC;QAEhD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAGD,MAAM,uBAAuB,GAAG,CAC9B,MAAsC,EACtC,SAAiB,EAAE,EACb,EAAE;YACR,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;gBAEhE,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAE/B,uBAAuB,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;gBAC1D,CAAC;qBAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAErC,SAAS;gBACX,CAAC;qBAAM,CAAC;oBAEN,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;wBACxB,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAElC,OAAO,gBAAgB,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
export const MODEL_REGISTRY = {
|
|
3
|
+
application: 'application',
|
|
4
|
+
user: 'user'
|
|
5
|
+
};
|
|
6
|
+
export class NexxusBaseModel {
|
|
7
|
+
data;
|
|
8
|
+
static modelType;
|
|
9
|
+
constructor(data) {
|
|
10
|
+
this.data = data;
|
|
11
|
+
if (!this.data.type) {
|
|
12
|
+
throw new Error("Model 'type' is required");
|
|
13
|
+
}
|
|
14
|
+
const now = Math.floor(Date.now() / 1000);
|
|
15
|
+
if (this.data.id === undefined) {
|
|
16
|
+
this.data.id = randomUUID();
|
|
17
|
+
}
|
|
18
|
+
if (this.data.createdAt === undefined) {
|
|
19
|
+
this.data.createdAt = now;
|
|
20
|
+
}
|
|
21
|
+
if (this.data.updatedAt === undefined) {
|
|
22
|
+
this.data.updatedAt = now;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
getData() {
|
|
26
|
+
return this.data;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=BaseModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseModel.js","sourceRoot":"","sources":["../../src/models/BaseModel.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAYxC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,WAAW,EAAE,aAAa;IAC1B,IAAI,EAAE,MAAM;CACJ,CAAC;AAKX,MAAM,OAAgB,eAAe;IACzB,IAAI,CAAI;IAEX,MAAM,CAAU,SAAS,CAAqB;IAErD,YAAY,IAAO;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAC,IAAI,CAAC,CAAC;QAExC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC;QAC9B,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAC5B,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { NexxusBaseModel, MODEL_REGISTRY } from "./BaseModel";
|
|
2
|
+
import { InvalidUserModelException } from "../lib/Exceptions";
|
|
3
|
+
export class NexxusApplicationUser extends NexxusBaseModel {
|
|
4
|
+
constructor(data) {
|
|
5
|
+
super({ ...data, type: MODEL_REGISTRY.user });
|
|
6
|
+
if (this.data.appId === undefined || typeof this.data.appId !== 'string') {
|
|
7
|
+
throw new InvalidUserModelException("User 'appId' is required and must be a string");
|
|
8
|
+
}
|
|
9
|
+
if (this.data.username === undefined || typeof this.data.username !== 'string') {
|
|
10
|
+
throw new InvalidUserModelException("User 'username' is required and must be a string");
|
|
11
|
+
}
|
|
12
|
+
if ((this.data.password !== undefined && this.data.password !== null) && typeof this.data.password !== 'string') {
|
|
13
|
+
throw new InvalidUserModelException("User 'password' must be a string if provided");
|
|
14
|
+
}
|
|
15
|
+
if (this.data.authProviders === undefined || !Array.isArray(this.data.authProviders) || this.data.authProviders.some(ap => typeof ap !== 'string')) {
|
|
16
|
+
throw new InvalidUserModelException("User 'authProviders' is required and must be an array of strings");
|
|
17
|
+
}
|
|
18
|
+
if (this.data.devices === undefined || !Array.isArray(this.data.devices)) {
|
|
19
|
+
throw new InvalidUserModelException("User 'devices' must be an array of strings");
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
const areAllStrings = this.data.devices.every(deviceId => typeof deviceId === 'string');
|
|
23
|
+
if (!areAllStrings) {
|
|
24
|
+
throw new InvalidUserModelException("User 'devices' must be an array of strings");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (typeof this.data.userType !== 'string') {
|
|
28
|
+
throw new InvalidUserModelException("User 'userType' must be a string");
|
|
29
|
+
}
|
|
30
|
+
if (this.data.details !== undefined && typeof this.data.details !== 'object') {
|
|
31
|
+
throw new InvalidUserModelException("User 'details' must be an object if provided");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=User.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/models/User.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAgB9D,MAAM,OAAO,qBAAsB,SAAQ,eAAoC;IAC7E,YAAY,IAAyB;QACnC,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QAE9C,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACzE,MAAM,IAAI,yBAAyB,CAAC,+CAA+C,CAAC,CAAC;QACvF,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC/E,MAAM,IAAI,yBAAyB,CAAC,kDAAkD,CAAC,CAAC;QAC1F,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAChH,MAAM,IAAI,yBAAyB,CAAC,8CAA8C,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC;YACnJ,MAAM,IAAI,yBAAyB,CAAC,kEAAkE,CAAC,CAAC;QAC1G,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACzE,MAAM,IAAI,yBAAyB,CAAC,4CAA4C,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC;YAExF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,yBAAyB,CAAC,4CAA4C,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;QAED,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,IAAI,yBAAyB,CAAC,kCAAkC,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC7E,MAAM,IAAI,yBAAyB,CAAC,8CAA8C,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueuePayloads.js","sourceRoot":"","sources":["../../src/types/QueuePayloads.ts"],"names":[],"mappings":""}
|