dbnexus 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.js +823 -66
- package/dist/cli.js +84 -6
- package/dist/web/assets/index-sUsOfwY1.js +510 -0
- package/dist/web/index.html +1 -1
- package/package.json +1 -1
- package/dist/web/assets/index-bg5kNolg.js +0 -510
package/dist/api.js
CHANGED
|
@@ -1993,10 +1993,10 @@ var require_controller_decorator = __commonJS({
|
|
|
1993
1993
|
"node_modules/.pnpm/@nestjs+common@10.4.22_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/core/controller.decorator.js"(exports2) {
|
|
1994
1994
|
"use strict";
|
|
1995
1995
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
1996
|
-
exports2.Controller =
|
|
1996
|
+
exports2.Controller = Controller11;
|
|
1997
1997
|
var constants_1 = require_constants2();
|
|
1998
1998
|
var shared_utils_1 = require_shared_utils();
|
|
1999
|
-
function
|
|
1999
|
+
function Controller11(prefixOrOptions) {
|
|
2000
2000
|
const defaultPath = "/";
|
|
2001
2001
|
const [path5, host, scopeOptions, versionOptions] = (0, shared_utils_1.isUndefined)(prefixOrOptions) ? [defaultPath, void 0, void 0, void 0] : (0, shared_utils_1.isString)(prefixOrOptions) || Array.isArray(prefixOrOptions) ? [prefixOrOptions, void 0, void 0, void 0] : [
|
|
2002
2002
|
prefixOrOptions.path || defaultPath,
|
|
@@ -2416,9 +2416,9 @@ var require_module_decorator = __commonJS({
|
|
|
2416
2416
|
"node_modules/.pnpm/@nestjs+common@10.4.22_reflect-metadata@0.2.2_rxjs@7.8.2/node_modules/@nestjs/common/decorators/modules/module.decorator.js"(exports2) {
|
|
2417
2417
|
"use strict";
|
|
2418
2418
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
2419
|
-
exports2.Module =
|
|
2419
|
+
exports2.Module = Module13;
|
|
2420
2420
|
var validate_module_keys_util_1 = require_validate_module_keys_util();
|
|
2421
|
-
function
|
|
2421
|
+
function Module13(metadata) {
|
|
2422
2422
|
const propsKeys = Object.keys(metadata);
|
|
2423
2423
|
(0, validate_module_keys_util_1.validateModuleKeys)(propsKeys);
|
|
2424
2424
|
return (target) => {
|
|
@@ -2539,10 +2539,10 @@ var require_route_params_decorator = __commonJS({
|
|
|
2539
2539
|
exports2.assignMetadata = assignMetadata;
|
|
2540
2540
|
exports2.UploadedFile = UploadedFile2;
|
|
2541
2541
|
exports2.UploadedFiles = UploadedFiles;
|
|
2542
|
-
exports2.Query =
|
|
2543
|
-
exports2.Body =
|
|
2542
|
+
exports2.Query = Query10;
|
|
2543
|
+
exports2.Body = Body8;
|
|
2544
2544
|
exports2.RawBody = RawBody;
|
|
2545
|
-
exports2.Param =
|
|
2545
|
+
exports2.Param = Param8;
|
|
2546
2546
|
exports2.HostParam = HostParam;
|
|
2547
2547
|
var constants_1 = require_constants2();
|
|
2548
2548
|
var route_paramtypes_enum_1 = require_route_paramtypes_enum();
|
|
@@ -2588,16 +2588,16 @@ var require_route_params_decorator = __commonJS({
|
|
|
2588
2588
|
return createPipesRouteParamDecorator(route_paramtypes_enum_1.RouteParamtypes.FILES)(void 0, ...pipes);
|
|
2589
2589
|
}
|
|
2590
2590
|
exports2.Headers = createRouteParamDecorator(route_paramtypes_enum_1.RouteParamtypes.HEADERS);
|
|
2591
|
-
function
|
|
2591
|
+
function Query10(property, ...pipes) {
|
|
2592
2592
|
return createPipesRouteParamDecorator(route_paramtypes_enum_1.RouteParamtypes.QUERY)(property, ...pipes);
|
|
2593
2593
|
}
|
|
2594
|
-
function
|
|
2594
|
+
function Body8(property, ...pipes) {
|
|
2595
2595
|
return createPipesRouteParamDecorator(route_paramtypes_enum_1.RouteParamtypes.BODY)(property, ...pipes);
|
|
2596
2596
|
}
|
|
2597
2597
|
function RawBody(...pipes) {
|
|
2598
2598
|
return createPipesRouteParamDecorator(route_paramtypes_enum_1.RouteParamtypes.RAW_BODY)(void 0, ...pipes);
|
|
2599
2599
|
}
|
|
2600
|
-
function
|
|
2600
|
+
function Param8(property, ...pipes) {
|
|
2601
2601
|
return createPipesRouteParamDecorator(route_paramtypes_enum_1.RouteParamtypes.PARAM)(property, ...pipes);
|
|
2602
2602
|
}
|
|
2603
2603
|
function HostParam(property) {
|
|
@@ -3008,7 +3008,7 @@ var require_bad_request_exception = __commonJS({
|
|
|
3008
3008
|
exports2.BadRequestException = void 0;
|
|
3009
3009
|
var http_status_enum_1 = require_http_status_enum();
|
|
3010
3010
|
var http_exception_1 = require_http_exception();
|
|
3011
|
-
var
|
|
3011
|
+
var BadRequestException4 = class extends http_exception_1.HttpException {
|
|
3012
3012
|
/**
|
|
3013
3013
|
* Instantiate a `BadRequestException` Exception.
|
|
3014
3014
|
*
|
|
@@ -3038,7 +3038,7 @@ var require_bad_request_exception = __commonJS({
|
|
|
3038
3038
|
super(http_exception_1.HttpException.createBody(objectOrError, description, http_status_enum_1.HttpStatus.BAD_REQUEST), http_status_enum_1.HttpStatus.BAD_REQUEST, httpExceptionOptions);
|
|
3039
3039
|
}
|
|
3040
3040
|
};
|
|
3041
|
-
exports2.BadRequestException =
|
|
3041
|
+
exports2.BadRequestException = BadRequestException4;
|
|
3042
3042
|
}
|
|
3043
3043
|
});
|
|
3044
3044
|
|
|
@@ -20438,7 +20438,7 @@ var require_module = __commonJS({
|
|
|
20438
20438
|
var constants_2 = require_constants4();
|
|
20439
20439
|
var instance_wrapper_1 = require_instance_wrapper();
|
|
20440
20440
|
var module_ref_1 = require_module_ref();
|
|
20441
|
-
var
|
|
20441
|
+
var Module13 = class {
|
|
20442
20442
|
constructor(_metatype, container) {
|
|
20443
20443
|
this._metatype = _metatype;
|
|
20444
20444
|
this.container = container;
|
|
@@ -20832,7 +20832,7 @@ var require_module = __commonJS({
|
|
|
20832
20832
|
return (0, get_class_scope_1.getClassScope)(provider) === interfaces_1.Scope.TRANSIENT;
|
|
20833
20833
|
}
|
|
20834
20834
|
};
|
|
20835
|
-
exports2.Module =
|
|
20835
|
+
exports2.Module = Module13;
|
|
20836
20836
|
}
|
|
20837
20837
|
});
|
|
20838
20838
|
|
|
@@ -57071,7 +57071,7 @@ var require_serve_static_options_interface = __commonJS({
|
|
|
57071
57071
|
var require_abstract_loader = __commonJS({
|
|
57072
57072
|
"node_modules/.pnpm/@nestjs+serve-static@4.0.2_@nestjs+common@10.4.22_reflect-metadata@0.2.2_rxjs@7.8.2__@nestjs+core@10.4.22_express@4.22.1/node_modules/@nestjs/serve-static/dist/loaders/abstract.loader.js"(exports2) {
|
|
57073
57073
|
"use strict";
|
|
57074
|
-
var
|
|
57074
|
+
var __decorate33 = exports2 && exports2.__decorate || function(decorators, target, key, desc) {
|
|
57075
57075
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
57076
57076
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
57077
57077
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -57087,7 +57087,7 @@ var require_abstract_loader = __commonJS({
|
|
|
57087
57087
|
}
|
|
57088
57088
|
};
|
|
57089
57089
|
exports2.AbstractLoader = AbstractLoader;
|
|
57090
|
-
exports2.AbstractLoader = AbstractLoader =
|
|
57090
|
+
exports2.AbstractLoader = AbstractLoader = __decorate33([
|
|
57091
57091
|
(0, common_1.Injectable)()
|
|
57092
57092
|
], AbstractLoader);
|
|
57093
57093
|
}
|
|
@@ -57233,7 +57233,7 @@ var require_validate_path_util = __commonJS({
|
|
|
57233
57233
|
var require_express_loader = __commonJS({
|
|
57234
57234
|
"node_modules/.pnpm/@nestjs+serve-static@4.0.2_@nestjs+common@10.4.22_reflect-metadata@0.2.2_rxjs@7.8.2__@nestjs+core@10.4.22_express@4.22.1/node_modules/@nestjs/serve-static/dist/loaders/express.loader.js"(exports2) {
|
|
57235
57235
|
"use strict";
|
|
57236
|
-
var
|
|
57236
|
+
var __decorate33 = exports2 && exports2.__decorate || function(decorators, target, key, desc) {
|
|
57237
57237
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
57238
57238
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
57239
57239
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -57279,7 +57279,7 @@ var require_express_loader = __commonJS({
|
|
|
57279
57279
|
}
|
|
57280
57280
|
};
|
|
57281
57281
|
exports2.ExpressLoader = ExpressLoader;
|
|
57282
|
-
exports2.ExpressLoader = ExpressLoader =
|
|
57282
|
+
exports2.ExpressLoader = ExpressLoader = __decorate33([
|
|
57283
57283
|
(0, common_1.Injectable)()
|
|
57284
57284
|
], ExpressLoader);
|
|
57285
57285
|
}
|
|
@@ -57289,7 +57289,7 @@ var require_express_loader = __commonJS({
|
|
|
57289
57289
|
var require_fastify_loader = __commonJS({
|
|
57290
57290
|
"node_modules/.pnpm/@nestjs+serve-static@4.0.2_@nestjs+common@10.4.22_reflect-metadata@0.2.2_rxjs@7.8.2__@nestjs+core@10.4.22_express@4.22.1/node_modules/@nestjs/serve-static/dist/loaders/fastify.loader.js"(exports2) {
|
|
57291
57291
|
"use strict";
|
|
57292
|
-
var
|
|
57292
|
+
var __decorate33 = exports2 && exports2.__decorate || function(decorators, target, key, desc) {
|
|
57293
57293
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
57294
57294
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
57295
57295
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -57342,7 +57342,7 @@ var require_fastify_loader = __commonJS({
|
|
|
57342
57342
|
}
|
|
57343
57343
|
};
|
|
57344
57344
|
exports2.FastifyLoader = FastifyLoader;
|
|
57345
|
-
exports2.FastifyLoader = FastifyLoader =
|
|
57345
|
+
exports2.FastifyLoader = FastifyLoader = __decorate33([
|
|
57346
57346
|
(0, common_1.Injectable)()
|
|
57347
57347
|
], FastifyLoader);
|
|
57348
57348
|
}
|
|
@@ -57352,7 +57352,7 @@ var require_fastify_loader = __commonJS({
|
|
|
57352
57352
|
var require_noop_loader = __commonJS({
|
|
57353
57353
|
"node_modules/.pnpm/@nestjs+serve-static@4.0.2_@nestjs+common@10.4.22_reflect-metadata@0.2.2_rxjs@7.8.2__@nestjs+core@10.4.22_express@4.22.1/node_modules/@nestjs/serve-static/dist/loaders/noop.loader.js"(exports2) {
|
|
57354
57354
|
"use strict";
|
|
57355
|
-
var
|
|
57355
|
+
var __decorate33 = exports2 && exports2.__decorate || function(decorators, target, key, desc) {
|
|
57356
57356
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
57357
57357
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
57358
57358
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
@@ -57367,7 +57367,7 @@ var require_noop_loader = __commonJS({
|
|
|
57367
57367
|
}
|
|
57368
57368
|
};
|
|
57369
57369
|
exports2.NoopLoader = NoopLoader;
|
|
57370
|
-
exports2.NoopLoader = NoopLoader =
|
|
57370
|
+
exports2.NoopLoader = NoopLoader = __decorate33([
|
|
57371
57371
|
(0, common_1.Injectable)()
|
|
57372
57372
|
], NoopLoader);
|
|
57373
57373
|
}
|
|
@@ -57407,16 +57407,16 @@ var require_serve_static_providers = __commonJS({
|
|
|
57407
57407
|
var require_serve_static_module = __commonJS({
|
|
57408
57408
|
"node_modules/.pnpm/@nestjs+serve-static@4.0.2_@nestjs+common@10.4.22_reflect-metadata@0.2.2_rxjs@7.8.2__@nestjs+core@10.4.22_express@4.22.1/node_modules/@nestjs/serve-static/dist/serve-static.module.js"(exports2) {
|
|
57409
57409
|
"use strict";
|
|
57410
|
-
var
|
|
57410
|
+
var __decorate33 = exports2 && exports2.__decorate || function(decorators, target, key, desc) {
|
|
57411
57411
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
57412
57412
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
57413
57413
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
57414
57414
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
57415
57415
|
};
|
|
57416
|
-
var
|
|
57416
|
+
var __metadata19 = exports2 && exports2.__metadata || function(k, v) {
|
|
57417
57417
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
57418
57418
|
};
|
|
57419
|
-
var
|
|
57419
|
+
var __param11 = exports2 && exports2.__param || function(paramIndex, decorator) {
|
|
57420
57420
|
return function(target, key) {
|
|
57421
57421
|
decorator(target, key, paramIndex);
|
|
57422
57422
|
};
|
|
@@ -57489,12 +57489,12 @@ var require_serve_static_module = __commonJS({
|
|
|
57489
57489
|
}
|
|
57490
57490
|
};
|
|
57491
57491
|
exports2.ServeStaticModule = ServeStaticModule2;
|
|
57492
|
-
exports2.ServeStaticModule = ServeStaticModule2 = ServeStaticModule_1 =
|
|
57492
|
+
exports2.ServeStaticModule = ServeStaticModule2 = ServeStaticModule_1 = __decorate33([
|
|
57493
57493
|
(0, common_1.Module)({
|
|
57494
57494
|
providers: [...serve_static_providers_1.serveStaticProviders]
|
|
57495
57495
|
}),
|
|
57496
|
-
|
|
57497
|
-
|
|
57496
|
+
__param11(0, (0, common_1.Inject)(serve_static_constants_1.SERVE_STATIC_MODULE_OPTIONS)),
|
|
57497
|
+
__metadata19("design:paramtypes", [
|
|
57498
57498
|
Array,
|
|
57499
57499
|
abstract_loader_1.AbstractLoader,
|
|
57500
57500
|
core_1.HttpAdapterHost
|
|
@@ -59520,7 +59520,7 @@ var require_query2 = __commonJS({
|
|
|
59520
59520
|
var { EventEmitter } = __require("events");
|
|
59521
59521
|
var Result2 = require_result();
|
|
59522
59522
|
var utils = require_utils10();
|
|
59523
|
-
var
|
|
59523
|
+
var Query10 = class extends EventEmitter {
|
|
59524
59524
|
constructor(config, values, callback) {
|
|
59525
59525
|
super();
|
|
59526
59526
|
config = utils.normalizeQueryConfig(config, values, callback);
|
|
@@ -59706,7 +59706,7 @@ var require_query2 = __commonJS({
|
|
|
59706
59706
|
handleCopyData(msg, connection) {
|
|
59707
59707
|
}
|
|
59708
59708
|
};
|
|
59709
|
-
module2.exports =
|
|
59709
|
+
module2.exports = Query10;
|
|
59710
59710
|
}
|
|
59711
59711
|
});
|
|
59712
59712
|
|
|
@@ -61111,7 +61111,7 @@ var require_client = __commonJS({
|
|
|
61111
61111
|
var sasl = require_sasl();
|
|
61112
61112
|
var TypeOverrides2 = require_type_overrides();
|
|
61113
61113
|
var ConnectionParameters = require_connection_parameters();
|
|
61114
|
-
var
|
|
61114
|
+
var Query10 = require_query2();
|
|
61115
61115
|
var defaults2 = require_defaults();
|
|
61116
61116
|
var Connection2 = require_connection();
|
|
61117
61117
|
var crypto3 = require_utils11();
|
|
@@ -61542,7 +61542,7 @@ var require_client = __commonJS({
|
|
|
61542
61542
|
}
|
|
61543
61543
|
} else {
|
|
61544
61544
|
readTimeout = config.query_timeout || this.connectionParameters.query_timeout;
|
|
61545
|
-
query = new
|
|
61545
|
+
query = new Query10(config, values, callback);
|
|
61546
61546
|
if (!query.callback) {
|
|
61547
61547
|
result = new this._Promise((resolve, reject) => {
|
|
61548
61548
|
query.callback = (err, res) => err ? reject(err) : resolve(res);
|
|
@@ -61624,7 +61624,7 @@ var require_client = __commonJS({
|
|
|
61624
61624
|
}
|
|
61625
61625
|
}
|
|
61626
61626
|
};
|
|
61627
|
-
Client2.Query =
|
|
61627
|
+
Client2.Query = Query10;
|
|
61628
61628
|
module2.exports = Client2;
|
|
61629
61629
|
}
|
|
61630
61630
|
});
|
|
@@ -74578,7 +74578,7 @@ var require_query4 = __commonJS({
|
|
|
74578
74578
|
var CommandCode = require_commands();
|
|
74579
74579
|
var StringParser = require_string();
|
|
74580
74580
|
var CharsetToEncoding = require_charset_encodings();
|
|
74581
|
-
var
|
|
74581
|
+
var Query10 = class {
|
|
74582
74582
|
constructor(sql, charsetNumber) {
|
|
74583
74583
|
this.query = sql;
|
|
74584
74584
|
this.charsetNumber = charsetNumber;
|
|
@@ -74595,7 +74595,7 @@ var require_query4 = __commonJS({
|
|
|
74595
74595
|
return packet;
|
|
74596
74596
|
}
|
|
74597
74597
|
};
|
|
74598
|
-
module2.exports =
|
|
74598
|
+
module2.exports = Query10;
|
|
74599
74599
|
}
|
|
74600
74600
|
});
|
|
74601
74601
|
|
|
@@ -74930,7 +74930,7 @@ var require_packets = __commonJS({
|
|
|
74930
74930
|
var HandshakeResponse = require_handshake_response();
|
|
74931
74931
|
var PrepareStatement = require_prepare_statement();
|
|
74932
74932
|
var PreparedStatementHeader = require_prepared_statement_header();
|
|
74933
|
-
var
|
|
74933
|
+
var Query10 = require_query4();
|
|
74934
74934
|
var RegisterSlave = require_register_slave();
|
|
74935
74935
|
var ResultSetHeader = require_resultset_header();
|
|
74936
74936
|
var SSLRequest = require_ssl_request();
|
|
@@ -74950,7 +74950,7 @@ var require_packets = __commonJS({
|
|
|
74950
74950
|
HandshakeResponse,
|
|
74951
74951
|
PrepareStatement,
|
|
74952
74952
|
PreparedStatementHeader,
|
|
74953
|
-
Query:
|
|
74953
|
+
Query: Query10,
|
|
74954
74954
|
RegisterSlave,
|
|
74955
74955
|
ResultSetHeader,
|
|
74956
74956
|
SSLRequest,
|
|
@@ -76825,7 +76825,7 @@ var require_query5 = __commonJS({
|
|
|
76825
76825
|
var staticParser = require_static_text_parser();
|
|
76826
76826
|
var ServerStatus = require_server_status();
|
|
76827
76827
|
var EmptyPacket = new Packets.Packet(0, Buffer.allocUnsafe(4), 0, 4);
|
|
76828
|
-
var
|
|
76828
|
+
var Query10 = class _Query extends Command {
|
|
76829
76829
|
constructor(options, callback) {
|
|
76830
76830
|
super();
|
|
76831
76831
|
this.sql = options.sql;
|
|
@@ -77125,8 +77125,8 @@ var require_query5 = __commonJS({
|
|
|
77125
77125
|
}
|
|
77126
77126
|
}
|
|
77127
77127
|
};
|
|
77128
|
-
|
|
77129
|
-
module2.exports =
|
|
77128
|
+
Query10.prototype.catch = Query10.prototype.then;
|
|
77129
|
+
module2.exports = Query10;
|
|
77130
77130
|
}
|
|
77131
77131
|
});
|
|
77132
77132
|
|
|
@@ -77520,7 +77520,7 @@ var require_execute2 = __commonJS({
|
|
|
77520
77520
|
"node_modules/.pnpm/mysql2@3.16.0/node_modules/mysql2/lib/commands/execute.js"(exports2, module2) {
|
|
77521
77521
|
"use strict";
|
|
77522
77522
|
var Command = require_command();
|
|
77523
|
-
var
|
|
77523
|
+
var Query10 = require_query5();
|
|
77524
77524
|
var Packets = require_packets();
|
|
77525
77525
|
var getBinaryParser = require_binary_parser();
|
|
77526
77526
|
var getStaticBinaryParser = require_static_binary_parser();
|
|
@@ -77597,15 +77597,15 @@ var require_execute2 = __commonJS({
|
|
|
77597
77597
|
return _Execute.prototype.row;
|
|
77598
77598
|
}
|
|
77599
77599
|
};
|
|
77600
|
-
Execute.prototype.done =
|
|
77601
|
-
Execute.prototype.doneInsert =
|
|
77602
|
-
Execute.prototype.resultsetHeader =
|
|
77603
|
-
Execute.prototype._findOrCreateReadStream =
|
|
77604
|
-
Execute.prototype._streamLocalInfile =
|
|
77605
|
-
Execute.prototype._setTimeout =
|
|
77606
|
-
Execute.prototype._handleTimeoutError =
|
|
77607
|
-
Execute.prototype.row =
|
|
77608
|
-
Execute.prototype.stream =
|
|
77600
|
+
Execute.prototype.done = Query10.prototype.done;
|
|
77601
|
+
Execute.prototype.doneInsert = Query10.prototype.doneInsert;
|
|
77602
|
+
Execute.prototype.resultsetHeader = Query10.prototype.resultsetHeader;
|
|
77603
|
+
Execute.prototype._findOrCreateReadStream = Query10.prototype._findOrCreateReadStream;
|
|
77604
|
+
Execute.prototype._streamLocalInfile = Query10.prototype._streamLocalInfile;
|
|
77605
|
+
Execute.prototype._setTimeout = Query10.prototype._setTimeout;
|
|
77606
|
+
Execute.prototype._handleTimeoutError = Query10.prototype._handleTimeoutError;
|
|
77607
|
+
Execute.prototype.row = Query10.prototype.row;
|
|
77608
|
+
Execute.prototype.stream = Query10.prototype.stream;
|
|
77609
77609
|
module2.exports = Execute;
|
|
77610
77610
|
}
|
|
77611
77611
|
});
|
|
@@ -78104,7 +78104,7 @@ var require_commands2 = __commonJS({
|
|
|
78104
78104
|
"use strict";
|
|
78105
78105
|
var ClientHandshake = require_client_handshake();
|
|
78106
78106
|
var ServerHandshake = require_server_handshake();
|
|
78107
|
-
var
|
|
78107
|
+
var Query10 = require_query5();
|
|
78108
78108
|
var Prepare = require_prepare();
|
|
78109
78109
|
var CloseStatement = require_close_statement2();
|
|
78110
78110
|
var Execute = require_execute2();
|
|
@@ -78116,7 +78116,7 @@ var require_commands2 = __commonJS({
|
|
|
78116
78116
|
module2.exports = {
|
|
78117
78117
|
ClientHandshake,
|
|
78118
78118
|
ServerHandshake,
|
|
78119
|
-
Query:
|
|
78119
|
+
Query: Query10,
|
|
78120
78120
|
Prepare,
|
|
78121
78121
|
CloseStatement,
|
|
78122
78122
|
Execute,
|
|
@@ -80928,10 +80928,10 @@ var require_promise = __commonJS({
|
|
|
80928
80928
|
// apps/api/dist/main.js
|
|
80929
80929
|
var import_reflect_metadata = __toESM(require_Reflect(), 1);
|
|
80930
80930
|
var import_core = __toESM(require_core2(), 1);
|
|
80931
|
-
var
|
|
80931
|
+
var import_common32 = __toESM(require_common(), 1);
|
|
80932
80932
|
|
|
80933
80933
|
// apps/api/dist/app.module.js
|
|
80934
|
-
var
|
|
80934
|
+
var import_common31 = __toESM(require_common(), 1);
|
|
80935
80935
|
var import_serve_static = __toESM(require_serve_static2(), 1);
|
|
80936
80936
|
import { join as join4 } from "path";
|
|
80937
80937
|
import { fileURLToPath } from "url";
|
|
@@ -80952,7 +80952,7 @@ var import_common = __toESM(require_common(), 1);
|
|
|
80952
80952
|
import Database from "better-sqlite3";
|
|
80953
80953
|
|
|
80954
80954
|
// packages/metadata/dist/schema.js
|
|
80955
|
-
var SCHEMA_VERSION =
|
|
80955
|
+
var SCHEMA_VERSION = 17;
|
|
80956
80956
|
var MIGRATIONS = [
|
|
80957
80957
|
// Version 1: Initial schema
|
|
80958
80958
|
`
|
|
@@ -81299,6 +81299,37 @@ var MIGRATIONS = [
|
|
|
81299
81299
|
CREATE INDEX IF NOT EXISTS idx_backup_logs_created_at ON backup_logs(created_at DESC);
|
|
81300
81300
|
|
|
81301
81301
|
UPDATE schema_version SET version = 15;
|
|
81302
|
+
`,
|
|
81303
|
+
// Version 16: Add servers table for grouping connections by database server
|
|
81304
|
+
`
|
|
81305
|
+
-- Servers table to store database server credentials
|
|
81306
|
+
CREATE TABLE IF NOT EXISTS servers (
|
|
81307
|
+
id TEXT PRIMARY KEY,
|
|
81308
|
+
name TEXT NOT NULL UNIQUE,
|
|
81309
|
+
engine TEXT NOT NULL CHECK(engine IN ('postgres', 'mysql', 'mariadb')),
|
|
81310
|
+
connection_type TEXT NOT NULL DEFAULT 'local' CHECK(connection_type IN ('local', 'docker', 'remote')),
|
|
81311
|
+
host TEXT NOT NULL,
|
|
81312
|
+
port INTEGER NOT NULL,
|
|
81313
|
+
username TEXT NOT NULL,
|
|
81314
|
+
encrypted_password TEXT,
|
|
81315
|
+
ssl INTEGER NOT NULL DEFAULT 0,
|
|
81316
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
81317
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
81318
|
+
);
|
|
81319
|
+
|
|
81320
|
+
-- Add server_id to connections (nullable - SQLite connections don't have a server)
|
|
81321
|
+
ALTER TABLE connections ADD COLUMN server_id TEXT REFERENCES servers(id) ON DELETE SET NULL;
|
|
81322
|
+
|
|
81323
|
+
CREATE INDEX IF NOT EXISTS idx_connections_server ON connections(server_id);
|
|
81324
|
+
CREATE INDEX IF NOT EXISTS idx_servers_engine ON servers(engine);
|
|
81325
|
+
|
|
81326
|
+
UPDATE schema_version SET version = 16;
|
|
81327
|
+
`,
|
|
81328
|
+
// Version 17: Add tags to servers
|
|
81329
|
+
`
|
|
81330
|
+
ALTER TABLE servers ADD COLUMN tags TEXT NOT NULL DEFAULT '[]';
|
|
81331
|
+
|
|
81332
|
+
UPDATE schema_version SET version = 17;
|
|
81302
81333
|
`
|
|
81303
81334
|
];
|
|
81304
81335
|
|
|
@@ -81418,9 +81449,9 @@ var ConnectionRepository = class {
|
|
|
81418
81449
|
const encryptedPwd = input.password ? encryptPassword(input.password) : null;
|
|
81419
81450
|
const connectionType = input.connectionType || this.inferConnectionType(input.host);
|
|
81420
81451
|
this.db.prepare(`
|
|
81421
|
-
INSERT INTO connections (id, name, engine, connection_type, host, port, database, username, encrypted_password, ssl, default_schema, tags, read_only, project_id, group_id, created_at, updated_at)
|
|
81422
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
81423
|
-
`).run(id, input.name, input.engine, connectionType, input.host, input.port, input.database, input.username, encryptedPwd, input.ssl ? 1 : 0, input.defaultSchema || null, JSON.stringify(input.tags ?? []), input.readOnly ? 1 : 0, input.projectId || null, input.groupId || null, now, now);
|
|
81452
|
+
INSERT INTO connections (id, name, engine, connection_type, host, port, database, username, encrypted_password, ssl, default_schema, tags, read_only, server_id, project_id, group_id, created_at, updated_at)
|
|
81453
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
81454
|
+
`).run(id, input.name, input.engine, connectionType, input.host, input.port, input.database, input.username, encryptedPwd, input.ssl ? 1 : 0, input.defaultSchema || null, JSON.stringify(input.tags ?? []), input.readOnly ? 1 : 0, input.serverId || null, input.projectId || null, input.groupId || null, now, now);
|
|
81424
81455
|
return this.findById(id);
|
|
81425
81456
|
}
|
|
81426
81457
|
/**
|
|
@@ -81430,9 +81461,11 @@ var ConnectionRepository = class {
|
|
|
81430
81461
|
const row = this.db.prepare(`
|
|
81431
81462
|
SELECT
|
|
81432
81463
|
c.*,
|
|
81464
|
+
s.name as server_name,
|
|
81433
81465
|
p.name as project_name,
|
|
81434
81466
|
dg.name as group_name
|
|
81435
81467
|
FROM connections c
|
|
81468
|
+
LEFT JOIN servers s ON c.server_id = s.id
|
|
81436
81469
|
LEFT JOIN projects p ON c.project_id = p.id
|
|
81437
81470
|
LEFT JOIN database_groups dg ON c.group_id = dg.id
|
|
81438
81471
|
WHERE c.id = ?
|
|
@@ -81446,9 +81479,11 @@ var ConnectionRepository = class {
|
|
|
81446
81479
|
const row = this.db.prepare(`
|
|
81447
81480
|
SELECT
|
|
81448
81481
|
c.*,
|
|
81482
|
+
s.name as server_name,
|
|
81449
81483
|
p.name as project_name,
|
|
81450
81484
|
dg.name as group_name
|
|
81451
81485
|
FROM connections c
|
|
81486
|
+
LEFT JOIN servers s ON c.server_id = s.id
|
|
81452
81487
|
LEFT JOIN projects p ON c.project_id = p.id
|
|
81453
81488
|
LEFT JOIN database_groups dg ON c.group_id = dg.id
|
|
81454
81489
|
WHERE c.name = ?
|
|
@@ -81462,9 +81497,11 @@ var ConnectionRepository = class {
|
|
|
81462
81497
|
const rows = this.db.prepare(`
|
|
81463
81498
|
SELECT
|
|
81464
81499
|
c.*,
|
|
81500
|
+
s.name as server_name,
|
|
81465
81501
|
p.name as project_name,
|
|
81466
81502
|
dg.name as group_name
|
|
81467
81503
|
FROM connections c
|
|
81504
|
+
LEFT JOIN servers s ON c.server_id = s.id
|
|
81468
81505
|
LEFT JOIN projects p ON c.project_id = p.id
|
|
81469
81506
|
LEFT JOIN database_groups dg ON c.group_id = dg.id
|
|
81470
81507
|
ORDER BY p.name, dg.name, c.name
|
|
@@ -81478,9 +81515,11 @@ var ConnectionRepository = class {
|
|
|
81478
81515
|
const rows = this.db.prepare(`
|
|
81479
81516
|
SELECT
|
|
81480
81517
|
c.*,
|
|
81518
|
+
s.name as server_name,
|
|
81481
81519
|
p.name as project_name,
|
|
81482
81520
|
dg.name as group_name
|
|
81483
81521
|
FROM connections c
|
|
81522
|
+
LEFT JOIN servers s ON c.server_id = s.id
|
|
81484
81523
|
LEFT JOIN projects p ON c.project_id = p.id
|
|
81485
81524
|
LEFT JOIN database_groups dg ON c.group_id = dg.id
|
|
81486
81525
|
WHERE c.project_id = ?
|
|
@@ -81495,9 +81534,11 @@ var ConnectionRepository = class {
|
|
|
81495
81534
|
const rows = this.db.prepare(`
|
|
81496
81535
|
SELECT
|
|
81497
81536
|
c.*,
|
|
81537
|
+
s.name as server_name,
|
|
81498
81538
|
p.name as project_name,
|
|
81499
81539
|
dg.name as group_name
|
|
81500
81540
|
FROM connections c
|
|
81541
|
+
LEFT JOIN servers s ON c.server_id = s.id
|
|
81501
81542
|
LEFT JOIN projects p ON c.project_id = p.id
|
|
81502
81543
|
LEFT JOIN database_groups dg ON c.group_id = dg.id
|
|
81503
81544
|
WHERE c.group_id = ?
|
|
@@ -81512,9 +81553,11 @@ var ConnectionRepository = class {
|
|
|
81512
81553
|
const rows = this.db.prepare(`
|
|
81513
81554
|
SELECT
|
|
81514
81555
|
c.*,
|
|
81556
|
+
s.name as server_name,
|
|
81515
81557
|
p.name as project_name,
|
|
81516
81558
|
dg.name as group_name
|
|
81517
81559
|
FROM connections c
|
|
81560
|
+
LEFT JOIN servers s ON c.server_id = s.id
|
|
81518
81561
|
LEFT JOIN projects p ON c.project_id = p.id
|
|
81519
81562
|
LEFT JOIN database_groups dg ON c.group_id = dg.id
|
|
81520
81563
|
WHERE c.project_id IS NULL
|
|
@@ -81526,7 +81569,18 @@ var ConnectionRepository = class {
|
|
|
81526
81569
|
* Find connections by tag
|
|
81527
81570
|
*/
|
|
81528
81571
|
findByTag(tag) {
|
|
81529
|
-
const rows = this.db.prepare(
|
|
81572
|
+
const rows = this.db.prepare(`
|
|
81573
|
+
SELECT
|
|
81574
|
+
c.*,
|
|
81575
|
+
s.name as server_name,
|
|
81576
|
+
p.name as project_name,
|
|
81577
|
+
dg.name as group_name
|
|
81578
|
+
FROM connections c
|
|
81579
|
+
LEFT JOIN servers s ON c.server_id = s.id
|
|
81580
|
+
LEFT JOIN projects p ON c.project_id = p.id
|
|
81581
|
+
LEFT JOIN database_groups dg ON c.group_id = dg.id
|
|
81582
|
+
ORDER BY c.name
|
|
81583
|
+
`).all();
|
|
81530
81584
|
return rows.filter((row) => {
|
|
81531
81585
|
const tags = JSON.parse(row.tags);
|
|
81532
81586
|
return tags.includes(tag);
|
|
@@ -81593,6 +81647,10 @@ var ConnectionRepository = class {
|
|
|
81593
81647
|
updates.push("connection_type = ?");
|
|
81594
81648
|
values.push(input.connectionType);
|
|
81595
81649
|
}
|
|
81650
|
+
if (input.serverId !== void 0) {
|
|
81651
|
+
updates.push("server_id = ?");
|
|
81652
|
+
values.push(input.serverId);
|
|
81653
|
+
}
|
|
81596
81654
|
if (updates.length > 0) {
|
|
81597
81655
|
updates.push("updated_at = ?");
|
|
81598
81656
|
values.push((/* @__PURE__ */ new Date()).toISOString());
|
|
@@ -81660,12 +81718,32 @@ var ConnectionRepository = class {
|
|
|
81660
81718
|
readOnly: row.read_only === 1,
|
|
81661
81719
|
createdAt: new Date(row.created_at),
|
|
81662
81720
|
updatedAt: new Date(row.updated_at),
|
|
81721
|
+
serverId: row.server_id || void 0,
|
|
81663
81722
|
projectId: row.project_id || void 0,
|
|
81664
81723
|
groupId: row.group_id || void 0,
|
|
81724
|
+
serverName: row.server_name,
|
|
81665
81725
|
projectName: row.project_name,
|
|
81666
81726
|
groupName: row.group_name
|
|
81667
81727
|
};
|
|
81668
81728
|
}
|
|
81729
|
+
/**
|
|
81730
|
+
* Find connections by server ID
|
|
81731
|
+
*/
|
|
81732
|
+
findByServerId(serverId) {
|
|
81733
|
+
const rows = this.db.prepare(`
|
|
81734
|
+
SELECT c.*,
|
|
81735
|
+
s.name as server_name,
|
|
81736
|
+
p.name as project_name,
|
|
81737
|
+
g.name as group_name
|
|
81738
|
+
FROM connections c
|
|
81739
|
+
LEFT JOIN servers s ON c.server_id = s.id
|
|
81740
|
+
LEFT JOIN projects p ON c.project_id = p.id
|
|
81741
|
+
LEFT JOIN database_groups g ON c.group_id = g.id
|
|
81742
|
+
WHERE c.server_id = ?
|
|
81743
|
+
ORDER BY c.name
|
|
81744
|
+
`).all(serverId);
|
|
81745
|
+
return rows.map((row) => this.rowToConnection(row));
|
|
81746
|
+
}
|
|
81669
81747
|
};
|
|
81670
81748
|
|
|
81671
81749
|
// packages/metadata/dist/repositories/query.repository.js
|
|
@@ -82967,6 +83045,188 @@ var BackupLogsRepository = class {
|
|
|
82967
83045
|
}
|
|
82968
83046
|
};
|
|
82969
83047
|
|
|
83048
|
+
// packages/metadata/dist/repositories/server.repository.js
|
|
83049
|
+
var ServerRepository = class {
|
|
83050
|
+
db;
|
|
83051
|
+
constructor(metadataDb) {
|
|
83052
|
+
this.db = metadataDb.getDb();
|
|
83053
|
+
}
|
|
83054
|
+
/**
|
|
83055
|
+
* Infer connection type from host
|
|
83056
|
+
*/
|
|
83057
|
+
inferConnectionType(host) {
|
|
83058
|
+
if (!host || host === "localhost" || host === "127.0.0.1" || host === "0.0.0.0") {
|
|
83059
|
+
return "local";
|
|
83060
|
+
}
|
|
83061
|
+
return "remote";
|
|
83062
|
+
}
|
|
83063
|
+
/**
|
|
83064
|
+
* Convert database row to ServerConfig
|
|
83065
|
+
*/
|
|
83066
|
+
rowToServer(row) {
|
|
83067
|
+
return {
|
|
83068
|
+
id: row.id,
|
|
83069
|
+
name: row.name,
|
|
83070
|
+
engine: row.engine,
|
|
83071
|
+
connectionType: row.connection_type,
|
|
83072
|
+
host: row.host,
|
|
83073
|
+
port: row.port,
|
|
83074
|
+
username: row.username,
|
|
83075
|
+
ssl: row.ssl === 1,
|
|
83076
|
+
tags: JSON.parse(row.tags),
|
|
83077
|
+
createdAt: new Date(row.created_at),
|
|
83078
|
+
updatedAt: new Date(row.updated_at),
|
|
83079
|
+
databaseCount: row.database_count
|
|
83080
|
+
};
|
|
83081
|
+
}
|
|
83082
|
+
/**
|
|
83083
|
+
* Create a new server
|
|
83084
|
+
*/
|
|
83085
|
+
create(input) {
|
|
83086
|
+
const id = MetadataDatabase.generateId();
|
|
83087
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
83088
|
+
const encryptedPwd = input.password ? encryptPassword(input.password) : null;
|
|
83089
|
+
const connectionType = input.connectionType || this.inferConnectionType(input.host);
|
|
83090
|
+
this.db.prepare(`
|
|
83091
|
+
INSERT INTO servers (id, name, engine, connection_type, host, port, username, encrypted_password, ssl, tags, created_at, updated_at)
|
|
83092
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
83093
|
+
`).run(id, input.name, input.engine, connectionType, input.host, input.port, input.username, encryptedPwd, input.ssl ? 1 : 0, JSON.stringify(input.tags ?? []), now, now);
|
|
83094
|
+
return this.findById(id);
|
|
83095
|
+
}
|
|
83096
|
+
/**
|
|
83097
|
+
* Find a server by ID
|
|
83098
|
+
*/
|
|
83099
|
+
findById(id) {
|
|
83100
|
+
const row = this.db.prepare(`
|
|
83101
|
+
SELECT s.*,
|
|
83102
|
+
(SELECT COUNT(*) FROM connections c WHERE c.server_id = s.id) as database_count
|
|
83103
|
+
FROM servers s
|
|
83104
|
+
WHERE s.id = ?
|
|
83105
|
+
`).get(id);
|
|
83106
|
+
return row ? this.rowToServer(row) : null;
|
|
83107
|
+
}
|
|
83108
|
+
/**
|
|
83109
|
+
* Find a server by name
|
|
83110
|
+
*/
|
|
83111
|
+
findByName(name) {
|
|
83112
|
+
const row = this.db.prepare(`
|
|
83113
|
+
SELECT s.*,
|
|
83114
|
+
(SELECT COUNT(*) FROM connections c WHERE c.server_id = s.id) as database_count
|
|
83115
|
+
FROM servers s
|
|
83116
|
+
WHERE s.name = ?
|
|
83117
|
+
`).get(name);
|
|
83118
|
+
return row ? this.rowToServer(row) : null;
|
|
83119
|
+
}
|
|
83120
|
+
/**
|
|
83121
|
+
* Find all servers
|
|
83122
|
+
*/
|
|
83123
|
+
findAll() {
|
|
83124
|
+
const rows = this.db.prepare(`
|
|
83125
|
+
SELECT s.*,
|
|
83126
|
+
(SELECT COUNT(*) FROM connections c WHERE c.server_id = s.id) as database_count
|
|
83127
|
+
FROM servers s
|
|
83128
|
+
ORDER BY s.name
|
|
83129
|
+
`).all();
|
|
83130
|
+
return rows.map((row) => this.rowToServer(row));
|
|
83131
|
+
}
|
|
83132
|
+
/**
|
|
83133
|
+
* Find servers by engine
|
|
83134
|
+
*/
|
|
83135
|
+
findByEngine(engine) {
|
|
83136
|
+
const rows = this.db.prepare(`
|
|
83137
|
+
SELECT s.*,
|
|
83138
|
+
(SELECT COUNT(*) FROM connections c WHERE c.server_id = s.id) as database_count
|
|
83139
|
+
FROM servers s
|
|
83140
|
+
WHERE s.engine = ?
|
|
83141
|
+
ORDER BY s.name
|
|
83142
|
+
`).all(engine);
|
|
83143
|
+
return rows.map((row) => this.rowToServer(row));
|
|
83144
|
+
}
|
|
83145
|
+
/**
|
|
83146
|
+
* Update a server
|
|
83147
|
+
*/
|
|
83148
|
+
update(id, input) {
|
|
83149
|
+
const existing = this.findById(id);
|
|
83150
|
+
if (!existing) {
|
|
83151
|
+
return null;
|
|
83152
|
+
}
|
|
83153
|
+
const updates = [];
|
|
83154
|
+
const values = [];
|
|
83155
|
+
if (input.name !== void 0) {
|
|
83156
|
+
updates.push("name = ?");
|
|
83157
|
+
values.push(input.name);
|
|
83158
|
+
}
|
|
83159
|
+
if (input.connectionType !== void 0) {
|
|
83160
|
+
updates.push("connection_type = ?");
|
|
83161
|
+
values.push(input.connectionType);
|
|
83162
|
+
}
|
|
83163
|
+
if (input.host !== void 0) {
|
|
83164
|
+
updates.push("host = ?");
|
|
83165
|
+
values.push(input.host);
|
|
83166
|
+
}
|
|
83167
|
+
if (input.port !== void 0) {
|
|
83168
|
+
updates.push("port = ?");
|
|
83169
|
+
values.push(input.port);
|
|
83170
|
+
}
|
|
83171
|
+
if (input.username !== void 0) {
|
|
83172
|
+
updates.push("username = ?");
|
|
83173
|
+
values.push(input.username);
|
|
83174
|
+
}
|
|
83175
|
+
if (input.password !== void 0) {
|
|
83176
|
+
updates.push("encrypted_password = ?");
|
|
83177
|
+
values.push(input.password ? encryptPassword(input.password) : null);
|
|
83178
|
+
}
|
|
83179
|
+
if (input.ssl !== void 0) {
|
|
83180
|
+
updates.push("ssl = ?");
|
|
83181
|
+
values.push(input.ssl ? 1 : 0);
|
|
83182
|
+
}
|
|
83183
|
+
if (input.tags !== void 0) {
|
|
83184
|
+
updates.push("tags = ?");
|
|
83185
|
+
values.push(JSON.stringify(input.tags));
|
|
83186
|
+
}
|
|
83187
|
+
if (updates.length === 0) {
|
|
83188
|
+
return existing;
|
|
83189
|
+
}
|
|
83190
|
+
updates.push("updated_at = ?");
|
|
83191
|
+
values.push((/* @__PURE__ */ new Date()).toISOString());
|
|
83192
|
+
values.push(id);
|
|
83193
|
+
this.db.prepare(`UPDATE servers SET ${updates.join(", ")} WHERE id = ?`).run(...values);
|
|
83194
|
+
return this.findById(id);
|
|
83195
|
+
}
|
|
83196
|
+
/**
|
|
83197
|
+
* Delete a server
|
|
83198
|
+
* Note: Connections referencing this server will have server_id set to NULL (ON DELETE SET NULL)
|
|
83199
|
+
*/
|
|
83200
|
+
delete(id) {
|
|
83201
|
+
const result = this.db.prepare("DELETE FROM servers WHERE id = ?").run(id);
|
|
83202
|
+
return result.changes > 0;
|
|
83203
|
+
}
|
|
83204
|
+
/**
|
|
83205
|
+
* Get decrypted password for a server
|
|
83206
|
+
*/
|
|
83207
|
+
getPassword(id) {
|
|
83208
|
+
const row = this.db.prepare("SELECT encrypted_password FROM servers WHERE id = ?").get(id);
|
|
83209
|
+
if (!row || !row.encrypted_password) {
|
|
83210
|
+
return null;
|
|
83211
|
+
}
|
|
83212
|
+
return decryptPassword(row.encrypted_password);
|
|
83213
|
+
}
|
|
83214
|
+
/**
|
|
83215
|
+
* Check if server has a password
|
|
83216
|
+
*/
|
|
83217
|
+
hasPassword(id) {
|
|
83218
|
+
const row = this.db.prepare("SELECT encrypted_password FROM servers WHERE id = ?").get(id);
|
|
83219
|
+
return row?.encrypted_password != null;
|
|
83220
|
+
}
|
|
83221
|
+
/**
|
|
83222
|
+
* Get count of connections using this server
|
|
83223
|
+
*/
|
|
83224
|
+
getConnectionCount(id) {
|
|
83225
|
+
const row = this.db.prepare("SELECT COUNT(*) as count FROM connections WHERE server_id = ?").get(id);
|
|
83226
|
+
return row.count;
|
|
83227
|
+
}
|
|
83228
|
+
};
|
|
83229
|
+
|
|
82970
83230
|
// apps/api/dist/metadata/metadata.service.js
|
|
82971
83231
|
import * as path from "node:path";
|
|
82972
83232
|
import * as fs from "node:fs";
|
|
@@ -82990,6 +83250,7 @@ var MetadataService = MetadataService_1 = class MetadataService2 {
|
|
|
82990
83250
|
_auditLogRepository;
|
|
82991
83251
|
_backupRepository;
|
|
82992
83252
|
_backupLogsRepository;
|
|
83253
|
+
_serverRepository;
|
|
82993
83254
|
onModuleInit() {
|
|
82994
83255
|
let dbnexusDir;
|
|
82995
83256
|
if (process.env["DBNEXUS_DATA_DIR"]) {
|
|
@@ -83017,6 +83278,7 @@ var MetadataService = MetadataService_1 = class MetadataService2 {
|
|
|
83017
83278
|
this._auditLogRepository = new AuditLogRepository(this.db);
|
|
83018
83279
|
this._backupRepository = new BackupRepository(this.db.db);
|
|
83019
83280
|
this._backupLogsRepository = new BackupLogsRepository(this.db.db);
|
|
83281
|
+
this._serverRepository = new ServerRepository(this.db);
|
|
83020
83282
|
this.logger.log(`\u{1F4E6} Metadata database initialized at ${dbPath}`);
|
|
83021
83283
|
}
|
|
83022
83284
|
onModuleDestroy() {
|
|
@@ -83052,6 +83314,9 @@ var MetadataService = MetadataService_1 = class MetadataService2 {
|
|
|
83052
83314
|
get backupLogsRepository() {
|
|
83053
83315
|
return this._backupLogsRepository;
|
|
83054
83316
|
}
|
|
83317
|
+
get serverRepository() {
|
|
83318
|
+
return this._serverRepository;
|
|
83319
|
+
}
|
|
83055
83320
|
get database() {
|
|
83056
83321
|
return this.db;
|
|
83057
83322
|
}
|
|
@@ -88557,7 +88822,7 @@ var BackupService = BackupService_1 = class BackupService2 {
|
|
|
88557
88822
|
async deleteBackup(id) {
|
|
88558
88823
|
const backup = this.metadataService.backupRepository.getById(id);
|
|
88559
88824
|
if (!backup) {
|
|
88560
|
-
|
|
88825
|
+
return { success: true, message: "Backup already deleted or does not exist" };
|
|
88561
88826
|
}
|
|
88562
88827
|
let fileExists = false;
|
|
88563
88828
|
try {
|
|
@@ -88586,7 +88851,6 @@ var BackupService = BackupService_1 = class BackupService2 {
|
|
|
88586
88851
|
throw new Error(`Failed to delete backup file: ${errorMessage}. The database record will not be removed.`);
|
|
88587
88852
|
}
|
|
88588
88853
|
}
|
|
88589
|
-
this.metadataService.backupRepository.delete(id);
|
|
88590
88854
|
this.metadataService.backupLogsRepository.create({
|
|
88591
88855
|
operation: "backup_deleted",
|
|
88592
88856
|
backupId: id,
|
|
@@ -88596,6 +88860,7 @@ var BackupService = BackupService_1 = class BackupService2 {
|
|
|
88596
88860
|
fileSize: backup.fileSize,
|
|
88597
88861
|
status: "success"
|
|
88598
88862
|
});
|
|
88863
|
+
this.metadataService.backupRepository.delete(id);
|
|
88599
88864
|
const message = fileExists ? "Backup deleted successfully" : "Backup record deleted (file was already removed from disk)";
|
|
88600
88865
|
return { success: true, message };
|
|
88601
88866
|
}
|
|
@@ -89626,18 +89891,509 @@ BackupModule = __decorate29([
|
|
|
89626
89891
|
})
|
|
89627
89892
|
], BackupModule);
|
|
89628
89893
|
|
|
89629
|
-
// apps/api/dist/
|
|
89894
|
+
// apps/api/dist/servers/servers.module.js
|
|
89895
|
+
var import_common30 = __toESM(require_common(), 1);
|
|
89896
|
+
|
|
89897
|
+
// apps/api/dist/servers/servers.controller.js
|
|
89898
|
+
var import_common29 = __toESM(require_common(), 1);
|
|
89630
89899
|
var __decorate30 = function(decorators, target, key, desc) {
|
|
89631
89900
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
89632
89901
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
89633
89902
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
89634
89903
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
89635
89904
|
};
|
|
89905
|
+
var __metadata18 = function(k, v) {
|
|
89906
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
89907
|
+
};
|
|
89908
|
+
var __param10 = function(paramIndex, decorator) {
|
|
89909
|
+
return function(target, key) {
|
|
89910
|
+
decorator(target, key, paramIndex);
|
|
89911
|
+
};
|
|
89912
|
+
};
|
|
89913
|
+
var ServersController = class ServersController2 {
|
|
89914
|
+
metadataService;
|
|
89915
|
+
constructor(metadataService) {
|
|
89916
|
+
this.metadataService = metadataService;
|
|
89917
|
+
}
|
|
89918
|
+
getServers(engine) {
|
|
89919
|
+
if (engine) {
|
|
89920
|
+
return this.metadataService.serverRepository.findByEngine(engine);
|
|
89921
|
+
}
|
|
89922
|
+
return this.metadataService.serverRepository.findAll();
|
|
89923
|
+
}
|
|
89924
|
+
getServer(id) {
|
|
89925
|
+
return this.metadataService.serverRepository.findById(id);
|
|
89926
|
+
}
|
|
89927
|
+
getServerDatabases(id) {
|
|
89928
|
+
return this.metadataService.connectionRepository.findByServerId(id);
|
|
89929
|
+
}
|
|
89930
|
+
getServerPassword(id) {
|
|
89931
|
+
const password = this.metadataService.serverRepository.getPassword(id);
|
|
89932
|
+
return { password };
|
|
89933
|
+
}
|
|
89934
|
+
createServer(input) {
|
|
89935
|
+
const server = this.metadataService.serverRepository.create(input);
|
|
89936
|
+
this.metadataService.auditLogRepository.create({
|
|
89937
|
+
action: "server_created",
|
|
89938
|
+
entityType: "server",
|
|
89939
|
+
entityId: server.id,
|
|
89940
|
+
details: {
|
|
89941
|
+
name: server.name,
|
|
89942
|
+
engine: server.engine,
|
|
89943
|
+
host: server.host,
|
|
89944
|
+
port: server.port
|
|
89945
|
+
}
|
|
89946
|
+
});
|
|
89947
|
+
return server;
|
|
89948
|
+
}
|
|
89949
|
+
updateServer(id, input) {
|
|
89950
|
+
const server = this.metadataService.serverRepository.update(id, input);
|
|
89951
|
+
if (server) {
|
|
89952
|
+
this.metadataService.auditLogRepository.create({
|
|
89953
|
+
action: "server_updated",
|
|
89954
|
+
entityType: "server",
|
|
89955
|
+
entityId: id,
|
|
89956
|
+
details: {
|
|
89957
|
+
name: server.name,
|
|
89958
|
+
changes: input
|
|
89959
|
+
}
|
|
89960
|
+
});
|
|
89961
|
+
}
|
|
89962
|
+
return server;
|
|
89963
|
+
}
|
|
89964
|
+
deleteServer(id) {
|
|
89965
|
+
const server = this.metadataService.serverRepository.findById(id);
|
|
89966
|
+
const linkedDatabases = this.metadataService.connectionRepository.findByServerId(id);
|
|
89967
|
+
if (linkedDatabases.length > 0) {
|
|
89968
|
+
return {
|
|
89969
|
+
success: false,
|
|
89970
|
+
message: `Cannot delete server with ${linkedDatabases.length} linked database(s). Remove or reassign them first.`
|
|
89971
|
+
};
|
|
89972
|
+
}
|
|
89973
|
+
const success = this.metadataService.serverRepository.delete(id);
|
|
89974
|
+
if (success && server) {
|
|
89975
|
+
this.metadataService.auditLogRepository.create({
|
|
89976
|
+
action: "server_deleted",
|
|
89977
|
+
entityType: "server",
|
|
89978
|
+
entityId: id,
|
|
89979
|
+
details: {
|
|
89980
|
+
name: server.name,
|
|
89981
|
+
engine: server.engine
|
|
89982
|
+
}
|
|
89983
|
+
});
|
|
89984
|
+
}
|
|
89985
|
+
return { success };
|
|
89986
|
+
}
|
|
89987
|
+
async testServerConnection(id) {
|
|
89988
|
+
const server = this.metadataService.serverRepository.findById(id);
|
|
89989
|
+
if (!server) {
|
|
89990
|
+
return { success: false, message: "Server not found" };
|
|
89991
|
+
}
|
|
89992
|
+
const password = this.metadataService.serverRepository.getPassword(id);
|
|
89993
|
+
if (!password) {
|
|
89994
|
+
return { success: false, message: "Server admin credentials not configured" };
|
|
89995
|
+
}
|
|
89996
|
+
try {
|
|
89997
|
+
const connector = this.createServerConnector(server, password);
|
|
89998
|
+
const result = await connector.testConnection();
|
|
89999
|
+
await connector.disconnect();
|
|
90000
|
+
return result;
|
|
90001
|
+
} catch (error) {
|
|
90002
|
+
return {
|
|
90003
|
+
success: false,
|
|
90004
|
+
message: error instanceof Error ? error.message : "Connection failed"
|
|
90005
|
+
};
|
|
90006
|
+
}
|
|
90007
|
+
}
|
|
90008
|
+
async createDatabase(id, input) {
|
|
90009
|
+
const server = this.metadataService.serverRepository.findById(id);
|
|
90010
|
+
if (!server) {
|
|
90011
|
+
return { success: false, message: "Server not found" };
|
|
90012
|
+
}
|
|
90013
|
+
const adminPassword = this.metadataService.serverRepository.getPassword(id);
|
|
90014
|
+
if (!adminPassword || !server.username) {
|
|
90015
|
+
return {
|
|
90016
|
+
success: false,
|
|
90017
|
+
message: "Server admin credentials not configured. Edit the server to add admin username and password."
|
|
90018
|
+
};
|
|
90019
|
+
}
|
|
90020
|
+
const { databaseName, username, password } = input;
|
|
90021
|
+
if (!databaseName || !/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(databaseName)) {
|
|
90022
|
+
throw new import_common29.BadRequestException("Invalid database name. Use letters, numbers, and underscores only.");
|
|
90023
|
+
}
|
|
90024
|
+
try {
|
|
90025
|
+
const connector = this.createServerConnector(server, adminPassword);
|
|
90026
|
+
await connector.connect();
|
|
90027
|
+
if (server.engine === "postgres") {
|
|
90028
|
+
const checkResult = await connector.query(`SELECT 1 FROM pg_database WHERE datname = '${databaseName}'`);
|
|
90029
|
+
if (checkResult.rows.length > 0) {
|
|
90030
|
+
await connector.disconnect();
|
|
90031
|
+
return { success: false, message: `Database "${databaseName}" already exists` };
|
|
90032
|
+
}
|
|
90033
|
+
await connector.query(`CREATE DATABASE "${databaseName}"`);
|
|
90034
|
+
} else {
|
|
90035
|
+
await connector.query(`CREATE DATABASE IF NOT EXISTS \`${databaseName}\``);
|
|
90036
|
+
}
|
|
90037
|
+
if (username && password) {
|
|
90038
|
+
if (server.engine === "postgres") {
|
|
90039
|
+
await connector.query(`DO $$ BEGIN CREATE USER "${username}" WITH PASSWORD '${password}'; EXCEPTION WHEN duplicate_object THEN NULL; END $$`);
|
|
90040
|
+
await connector.query(`GRANT ALL PRIVILEGES ON DATABASE "${databaseName}" TO "${username}"`);
|
|
90041
|
+
} else {
|
|
90042
|
+
await connector.query(`CREATE USER IF NOT EXISTS '${username}'@'%' IDENTIFIED BY '${password}'`);
|
|
90043
|
+
await connector.query(`GRANT ALL PRIVILEGES ON \`${databaseName}\`.* TO '${username}'@'%'`);
|
|
90044
|
+
await connector.query(`FLUSH PRIVILEGES`);
|
|
90045
|
+
}
|
|
90046
|
+
}
|
|
90047
|
+
await connector.disconnect();
|
|
90048
|
+
this.metadataService.auditLogRepository.create({
|
|
90049
|
+
action: "database_created",
|
|
90050
|
+
entityType: "server",
|
|
90051
|
+
entityId: id,
|
|
90052
|
+
details: {
|
|
90053
|
+
serverName: server.name,
|
|
90054
|
+
databaseName,
|
|
90055
|
+
username: username || null
|
|
90056
|
+
}
|
|
90057
|
+
});
|
|
90058
|
+
return {
|
|
90059
|
+
success: true,
|
|
90060
|
+
message: username ? `Database "${databaseName}" created with user "${username}"` : `Database "${databaseName}" created successfully`
|
|
90061
|
+
};
|
|
90062
|
+
} catch (error) {
|
|
90063
|
+
return {
|
|
90064
|
+
success: false,
|
|
90065
|
+
message: error instanceof Error ? error.message : "Failed to create database"
|
|
90066
|
+
};
|
|
90067
|
+
}
|
|
90068
|
+
}
|
|
90069
|
+
async listDatabases(id) {
|
|
90070
|
+
const server = this.metadataService.serverRepository.findById(id);
|
|
90071
|
+
if (!server) {
|
|
90072
|
+
return { success: false, message: "Server not found" };
|
|
90073
|
+
}
|
|
90074
|
+
const password = this.metadataService.serverRepository.getPassword(id);
|
|
90075
|
+
if (!password || !server.username) {
|
|
90076
|
+
return { success: false, message: "Server admin credentials not configured" };
|
|
90077
|
+
}
|
|
90078
|
+
try {
|
|
90079
|
+
const connector = this.createServerConnector(server, password);
|
|
90080
|
+
await connector.connect();
|
|
90081
|
+
const trackedConnections = this.metadataService.connectionRepository.findAll().filter((c) => c.serverId === id);
|
|
90082
|
+
const trackedDbNames = new Set(trackedConnections.map((c) => c.database));
|
|
90083
|
+
let databases = [];
|
|
90084
|
+
if (server.engine === "postgres") {
|
|
90085
|
+
const result = await connector.query(`
|
|
90086
|
+
SELECT
|
|
90087
|
+
d.datname as name,
|
|
90088
|
+
pg_size_pretty(pg_database_size(d.datname)) as size,
|
|
90089
|
+
r.rolname as owner
|
|
90090
|
+
FROM pg_database d
|
|
90091
|
+
JOIN pg_roles r ON d.datdba = r.oid
|
|
90092
|
+
WHERE d.datistemplate = false
|
|
90093
|
+
AND d.datname NOT IN ('postgres')
|
|
90094
|
+
ORDER BY d.datname
|
|
90095
|
+
`);
|
|
90096
|
+
databases = result.rows.map((row) => {
|
|
90097
|
+
const name = row.name;
|
|
90098
|
+
const tracked = trackedDbNames.has(name);
|
|
90099
|
+
const connection = trackedConnections.find((c) => c.database === name);
|
|
90100
|
+
return {
|
|
90101
|
+
name,
|
|
90102
|
+
size: row.size,
|
|
90103
|
+
owner: row.owner,
|
|
90104
|
+
tracked,
|
|
90105
|
+
connectionId: connection?.id
|
|
90106
|
+
};
|
|
90107
|
+
});
|
|
90108
|
+
} else {
|
|
90109
|
+
const result = await connector.query(`
|
|
90110
|
+
SELECT
|
|
90111
|
+
table_schema as name,
|
|
90112
|
+
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) as size_mb
|
|
90113
|
+
FROM information_schema.tables
|
|
90114
|
+
WHERE table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
|
|
90115
|
+
GROUP BY table_schema
|
|
90116
|
+
ORDER BY table_schema
|
|
90117
|
+
`);
|
|
90118
|
+
databases = result.rows.map((row) => {
|
|
90119
|
+
const name = row.name;
|
|
90120
|
+
const sizeMb = row.size_mb;
|
|
90121
|
+
const tracked = trackedDbNames.has(name);
|
|
90122
|
+
const connection = trackedConnections.find((c) => c.database === name);
|
|
90123
|
+
return {
|
|
90124
|
+
name,
|
|
90125
|
+
size: sizeMb ? `${sizeMb} MB` : "0 MB",
|
|
90126
|
+
tracked,
|
|
90127
|
+
connectionId: connection?.id
|
|
90128
|
+
};
|
|
90129
|
+
});
|
|
90130
|
+
}
|
|
90131
|
+
await connector.disconnect();
|
|
90132
|
+
return { success: true, databases };
|
|
90133
|
+
} catch (error) {
|
|
90134
|
+
return {
|
|
90135
|
+
success: false,
|
|
90136
|
+
message: error instanceof Error ? error.message : "Failed to list databases"
|
|
90137
|
+
};
|
|
90138
|
+
}
|
|
90139
|
+
}
|
|
90140
|
+
async getServerInfo(id) {
|
|
90141
|
+
const server = this.metadataService.serverRepository.findById(id);
|
|
90142
|
+
if (!server) {
|
|
90143
|
+
return { success: false, message: "Server not found" };
|
|
90144
|
+
}
|
|
90145
|
+
const password = this.metadataService.serverRepository.getPassword(id);
|
|
90146
|
+
if (!password || !server.username) {
|
|
90147
|
+
return { success: false, message: "Server admin credentials not configured" };
|
|
90148
|
+
}
|
|
90149
|
+
try {
|
|
90150
|
+
const connector = this.createServerConnector(server, password);
|
|
90151
|
+
await connector.connect();
|
|
90152
|
+
let info;
|
|
90153
|
+
if (server.engine === "postgres") {
|
|
90154
|
+
const versionResult = await connector.query(`SELECT version()`);
|
|
90155
|
+
const version = versionResult.rows[0]?.version || "Unknown";
|
|
90156
|
+
const uptimeResult = await connector.query(`SELECT EXTRACT(EPOCH FROM (now() - pg_postmaster_start_time()))::int as uptime_seconds`);
|
|
90157
|
+
const uptimeSeconds = uptimeResult.rows[0]?.uptime_seconds || 0;
|
|
90158
|
+
const connectionsResult = await connector.query(`SELECT count(*) as active FROM pg_stat_activity WHERE state = 'active'`);
|
|
90159
|
+
const activeConnections = parseInt(String(connectionsResult.rows[0]?.active || 0), 10);
|
|
90160
|
+
const maxConnResult = await connector.query(`SHOW max_connections`);
|
|
90161
|
+
const maxConnections = parseInt(String(maxConnResult.rows[0]?.max_connections || 100), 10);
|
|
90162
|
+
info = {
|
|
90163
|
+
version: version.split(",")[0] || version,
|
|
90164
|
+
uptime: this.formatUptime(uptimeSeconds),
|
|
90165
|
+
activeConnections,
|
|
90166
|
+
maxConnections,
|
|
90167
|
+
currentDatabase: "postgres"
|
|
90168
|
+
};
|
|
90169
|
+
} else {
|
|
90170
|
+
const versionResult = await connector.query(`SELECT VERSION() as version`);
|
|
90171
|
+
const version = versionResult.rows[0]?.version || "Unknown";
|
|
90172
|
+
const uptimeResult = await connector.query(`SHOW GLOBAL STATUS LIKE 'Uptime'`);
|
|
90173
|
+
const uptimeSeconds = parseInt(String(uptimeResult.rows[0]?.Value || 0), 10);
|
|
90174
|
+
const connectionsResult = await connector.query(`SHOW STATUS LIKE 'Threads_connected'`);
|
|
90175
|
+
const activeConnections = parseInt(String(connectionsResult.rows[0]?.Value || 0), 10);
|
|
90176
|
+
const maxConnResult = await connector.query(`SHOW VARIABLES LIKE 'max_connections'`);
|
|
90177
|
+
const maxConnections = parseInt(String(maxConnResult.rows[0]?.Value || 100), 10);
|
|
90178
|
+
info = {
|
|
90179
|
+
version,
|
|
90180
|
+
uptime: this.formatUptime(uptimeSeconds),
|
|
90181
|
+
activeConnections,
|
|
90182
|
+
maxConnections,
|
|
90183
|
+
currentDatabase: server.engine === "mysql" ? "MySQL" : "MariaDB"
|
|
90184
|
+
};
|
|
90185
|
+
}
|
|
90186
|
+
await connector.disconnect();
|
|
90187
|
+
return { success: true, info };
|
|
90188
|
+
} catch (error) {
|
|
90189
|
+
return {
|
|
90190
|
+
success: false,
|
|
90191
|
+
message: error instanceof Error ? error.message : "Failed to get server info"
|
|
90192
|
+
};
|
|
90193
|
+
}
|
|
90194
|
+
}
|
|
90195
|
+
async dropDatabase(id, dbName) {
|
|
90196
|
+
const server = this.metadataService.serverRepository.findById(id);
|
|
90197
|
+
if (!server) {
|
|
90198
|
+
return { success: false, message: "Server not found" };
|
|
90199
|
+
}
|
|
90200
|
+
const password = this.metadataService.serverRepository.getPassword(id);
|
|
90201
|
+
if (!password || !server.username) {
|
|
90202
|
+
return { success: false, message: "Server admin credentials not configured" };
|
|
90203
|
+
}
|
|
90204
|
+
if (!dbName || !/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(dbName)) {
|
|
90205
|
+
return { success: false, message: "Invalid database name" };
|
|
90206
|
+
}
|
|
90207
|
+
const systemDbs = server.engine === "postgres" ? ["postgres", "template0", "template1"] : ["information_schema", "mysql", "performance_schema", "sys"];
|
|
90208
|
+
if (systemDbs.includes(dbName.toLowerCase())) {
|
|
90209
|
+
return { success: false, message: "Cannot drop system database" };
|
|
90210
|
+
}
|
|
90211
|
+
try {
|
|
90212
|
+
const connector = this.createServerConnector(server, password);
|
|
90213
|
+
await connector.connect();
|
|
90214
|
+
if (server.engine === "postgres") {
|
|
90215
|
+
await connector.query(`
|
|
90216
|
+
SELECT pg_terminate_backend(pid)
|
|
90217
|
+
FROM pg_stat_activity
|
|
90218
|
+
WHERE datname = '${dbName}' AND pid <> pg_backend_pid()
|
|
90219
|
+
`);
|
|
90220
|
+
await connector.query(`DROP DATABASE IF EXISTS "${dbName}"`);
|
|
90221
|
+
} else {
|
|
90222
|
+
await connector.query(`DROP DATABASE IF EXISTS \`${dbName}\``);
|
|
90223
|
+
}
|
|
90224
|
+
await connector.disconnect();
|
|
90225
|
+
const trackedConnections = this.metadataService.connectionRepository.findAll().filter((c) => c.serverId === id && c.database === dbName);
|
|
90226
|
+
for (const conn of trackedConnections) {
|
|
90227
|
+
this.metadataService.connectionRepository.delete(conn.id);
|
|
90228
|
+
}
|
|
90229
|
+
this.metadataService.auditLogRepository.create({
|
|
90230
|
+
action: "database_deleted",
|
|
90231
|
+
entityType: "server",
|
|
90232
|
+
entityId: id,
|
|
90233
|
+
details: {
|
|
90234
|
+
serverName: server.name,
|
|
90235
|
+
databaseName: dbName
|
|
90236
|
+
}
|
|
90237
|
+
});
|
|
90238
|
+
return { success: true, message: `Database "${dbName}" dropped successfully` };
|
|
90239
|
+
} catch (error) {
|
|
90240
|
+
return {
|
|
90241
|
+
success: false,
|
|
90242
|
+
message: error instanceof Error ? error.message : "Failed to drop database"
|
|
90243
|
+
};
|
|
90244
|
+
}
|
|
90245
|
+
}
|
|
90246
|
+
formatUptime(seconds) {
|
|
90247
|
+
const days = Math.floor(seconds / 86400);
|
|
90248
|
+
const hours = Math.floor(seconds % 86400 / 3600);
|
|
90249
|
+
const minutes = Math.floor(seconds % 3600 / 60);
|
|
90250
|
+
if (days > 0) {
|
|
90251
|
+
return `${days}d ${hours}h ${minutes}m`;
|
|
90252
|
+
} else if (hours > 0) {
|
|
90253
|
+
return `${hours}h ${minutes}m`;
|
|
90254
|
+
} else {
|
|
90255
|
+
return `${minutes}m`;
|
|
90256
|
+
}
|
|
90257
|
+
}
|
|
90258
|
+
createServerConnector(server, password) {
|
|
90259
|
+
const config = {
|
|
90260
|
+
host: server.host,
|
|
90261
|
+
port: server.port,
|
|
90262
|
+
database: server.engine === "postgres" ? "postgres" : "",
|
|
90263
|
+
// Connect to maintenance DB
|
|
90264
|
+
username: server.username,
|
|
90265
|
+
password,
|
|
90266
|
+
ssl: server.ssl
|
|
90267
|
+
};
|
|
90268
|
+
if (server.engine === "mysql") {
|
|
90269
|
+
return new MysqlConnector(config, false);
|
|
90270
|
+
}
|
|
90271
|
+
if (server.engine === "mariadb") {
|
|
90272
|
+
return new MysqlConnector(config, true);
|
|
90273
|
+
}
|
|
90274
|
+
return new PostgresConnector(config);
|
|
90275
|
+
}
|
|
90276
|
+
};
|
|
90277
|
+
__decorate30([
|
|
90278
|
+
(0, import_common29.Get)(),
|
|
90279
|
+
__param10(0, (0, import_common29.Query)("engine")),
|
|
90280
|
+
__metadata18("design:type", Function),
|
|
90281
|
+
__metadata18("design:paramtypes", [String]),
|
|
90282
|
+
__metadata18("design:returntype", Array)
|
|
90283
|
+
], ServersController.prototype, "getServers", null);
|
|
90284
|
+
__decorate30([
|
|
90285
|
+
(0, import_common29.Get)(":id"),
|
|
90286
|
+
__param10(0, (0, import_common29.Param)("id")),
|
|
90287
|
+
__metadata18("design:type", Function),
|
|
90288
|
+
__metadata18("design:paramtypes", [String]),
|
|
90289
|
+
__metadata18("design:returntype", Object)
|
|
90290
|
+
], ServersController.prototype, "getServer", null);
|
|
90291
|
+
__decorate30([
|
|
90292
|
+
(0, import_common29.Get)(":id/databases"),
|
|
90293
|
+
__param10(0, (0, import_common29.Param)("id")),
|
|
90294
|
+
__metadata18("design:type", Function),
|
|
90295
|
+
__metadata18("design:paramtypes", [String]),
|
|
90296
|
+
__metadata18("design:returntype", Array)
|
|
90297
|
+
], ServersController.prototype, "getServerDatabases", null);
|
|
90298
|
+
__decorate30([
|
|
90299
|
+
(0, import_common29.Get)(":id/password"),
|
|
90300
|
+
__param10(0, (0, import_common29.Param)("id")),
|
|
90301
|
+
__metadata18("design:type", Function),
|
|
90302
|
+
__metadata18("design:paramtypes", [String]),
|
|
90303
|
+
__metadata18("design:returntype", Object)
|
|
90304
|
+
], ServersController.prototype, "getServerPassword", null);
|
|
90305
|
+
__decorate30([
|
|
90306
|
+
(0, import_common29.Post)(),
|
|
90307
|
+
__param10(0, (0, import_common29.Body)()),
|
|
90308
|
+
__metadata18("design:type", Function),
|
|
90309
|
+
__metadata18("design:paramtypes", [Object]),
|
|
90310
|
+
__metadata18("design:returntype", Object)
|
|
90311
|
+
], ServersController.prototype, "createServer", null);
|
|
90312
|
+
__decorate30([
|
|
90313
|
+
(0, import_common29.Put)(":id"),
|
|
90314
|
+
__param10(0, (0, import_common29.Param)("id")),
|
|
90315
|
+
__param10(1, (0, import_common29.Body)()),
|
|
90316
|
+
__metadata18("design:type", Function),
|
|
90317
|
+
__metadata18("design:paramtypes", [String, Object]),
|
|
90318
|
+
__metadata18("design:returntype", Object)
|
|
90319
|
+
], ServersController.prototype, "updateServer", null);
|
|
90320
|
+
__decorate30([
|
|
90321
|
+
(0, import_common29.Delete)(":id"),
|
|
90322
|
+
__param10(0, (0, import_common29.Param)("id")),
|
|
90323
|
+
__metadata18("design:type", Function),
|
|
90324
|
+
__metadata18("design:paramtypes", [String]),
|
|
90325
|
+
__metadata18("design:returntype", Object)
|
|
90326
|
+
], ServersController.prototype, "deleteServer", null);
|
|
90327
|
+
__decorate30([
|
|
90328
|
+
(0, import_common29.Post)(":id/test"),
|
|
90329
|
+
__param10(0, (0, import_common29.Param)("id")),
|
|
90330
|
+
__metadata18("design:type", Function),
|
|
90331
|
+
__metadata18("design:paramtypes", [String]),
|
|
90332
|
+
__metadata18("design:returntype", Promise)
|
|
90333
|
+
], ServersController.prototype, "testServerConnection", null);
|
|
90334
|
+
__decorate30([
|
|
90335
|
+
(0, import_common29.Post)(":id/create-database"),
|
|
90336
|
+
__param10(0, (0, import_common29.Param)("id")),
|
|
90337
|
+
__param10(1, (0, import_common29.Body)()),
|
|
90338
|
+
__metadata18("design:type", Function),
|
|
90339
|
+
__metadata18("design:paramtypes", [String, Object]),
|
|
90340
|
+
__metadata18("design:returntype", Promise)
|
|
90341
|
+
], ServersController.prototype, "createDatabase", null);
|
|
90342
|
+
__decorate30([
|
|
90343
|
+
(0, import_common29.Get)(":id/list-databases"),
|
|
90344
|
+
__param10(0, (0, import_common29.Param)("id")),
|
|
90345
|
+
__metadata18("design:type", Function),
|
|
90346
|
+
__metadata18("design:paramtypes", [String]),
|
|
90347
|
+
__metadata18("design:returntype", Promise)
|
|
90348
|
+
], ServersController.prototype, "listDatabases", null);
|
|
90349
|
+
__decorate30([
|
|
90350
|
+
(0, import_common29.Get)(":id/info"),
|
|
90351
|
+
__param10(0, (0, import_common29.Param)("id")),
|
|
90352
|
+
__metadata18("design:type", Function),
|
|
90353
|
+
__metadata18("design:paramtypes", [String]),
|
|
90354
|
+
__metadata18("design:returntype", Promise)
|
|
90355
|
+
], ServersController.prototype, "getServerInfo", null);
|
|
90356
|
+
__decorate30([
|
|
90357
|
+
(0, import_common29.Delete)(":id/databases/:dbName"),
|
|
90358
|
+
__param10(0, (0, import_common29.Param)("id")),
|
|
90359
|
+
__param10(1, (0, import_common29.Param)("dbName")),
|
|
90360
|
+
__metadata18("design:type", Function),
|
|
90361
|
+
__metadata18("design:paramtypes", [String, String]),
|
|
90362
|
+
__metadata18("design:returntype", Promise)
|
|
90363
|
+
], ServersController.prototype, "dropDatabase", null);
|
|
90364
|
+
ServersController = __decorate30([
|
|
90365
|
+
(0, import_common29.Controller)("servers"),
|
|
90366
|
+
__metadata18("design:paramtypes", [MetadataService])
|
|
90367
|
+
], ServersController);
|
|
90368
|
+
|
|
90369
|
+
// apps/api/dist/servers/servers.module.js
|
|
90370
|
+
var __decorate31 = function(decorators, target, key, desc) {
|
|
90371
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
90372
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
90373
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
90374
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
90375
|
+
};
|
|
90376
|
+
var ServersModule = class ServersModule2 {
|
|
90377
|
+
};
|
|
90378
|
+
ServersModule = __decorate31([
|
|
90379
|
+
(0, import_common30.Module)({
|
|
90380
|
+
imports: [MetadataModule],
|
|
90381
|
+
controllers: [ServersController]
|
|
90382
|
+
})
|
|
90383
|
+
], ServersModule);
|
|
90384
|
+
|
|
90385
|
+
// apps/api/dist/app.module.js
|
|
90386
|
+
var __decorate32 = function(decorators, target, key, desc) {
|
|
90387
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
90388
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
90389
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
90390
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
90391
|
+
};
|
|
89636
90392
|
var __dirname = fileURLToPath(new URL(".", import.meta.url));
|
|
89637
90393
|
var AppModule = class AppModule2 {
|
|
89638
90394
|
};
|
|
89639
|
-
AppModule =
|
|
89640
|
-
(0,
|
|
90395
|
+
AppModule = __decorate32([
|
|
90396
|
+
(0, import_common31.Module)({
|
|
89641
90397
|
imports: [
|
|
89642
90398
|
// Serve static files from web build in production
|
|
89643
90399
|
...true ? [
|
|
@@ -89655,7 +90411,8 @@ AppModule = __decorate30([
|
|
|
89655
90411
|
HealthModule,
|
|
89656
90412
|
ScannerModule,
|
|
89657
90413
|
AuditModule,
|
|
89658
|
-
BackupModule
|
|
90414
|
+
BackupModule,
|
|
90415
|
+
ServersModule
|
|
89659
90416
|
]
|
|
89660
90417
|
})
|
|
89661
90418
|
], AppModule);
|
|
@@ -89667,7 +90424,7 @@ import * as fs6 from "node:fs";
|
|
|
89667
90424
|
var __filename = fileURLToPath2(import.meta.url);
|
|
89668
90425
|
var __dirname2 = path4.dirname(__filename);
|
|
89669
90426
|
async function bootstrap() {
|
|
89670
|
-
const logger = new
|
|
90427
|
+
const logger = new import_common32.Logger("Bootstrap");
|
|
89671
90428
|
const app = await import_core.NestFactory.create(AppModule, {
|
|
89672
90429
|
bodyParser: true
|
|
89673
90430
|
});
|