@zintrust/core 0.1.26 → 0.1.27
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/package.json +1 -2
- package/src/boot/Application.d.ts +1 -1
- package/src/boot/Application.d.ts.map +1 -1
- package/src/boot/Application.js +3 -3
- package/src/boot/Server.d.ts.map +1 -1
- package/src/boot/Server.js +1 -1
- package/src/cli/commands/RoutesCommand.d.ts.map +1 -1
- package/src/cli/commands/RoutesCommand.js +15 -6
- package/src/cli/services/VersionChecker.d.ts +29 -0
- package/src/cli/services/VersionChecker.d.ts.map +1 -1
- package/src/cli/services/VersionChecker.js +103 -25
- package/src/collections/Collection.d.ts.map +1 -1
- package/src/collections/Collection.js +42 -7
- package/src/common/HealthRoutes.d.ts +1 -1
- package/src/common/HealthRoutes.d.ts.map +1 -1
- package/src/common/HealthRoutes.js +1 -1
- package/src/config/notification.js +3 -3
- package/src/http/Kernel.d.ts +1 -1
- package/src/http/Kernel.d.ts.map +1 -1
- package/src/http/Kernel.js +2 -2
- package/src/index.d.ts +4 -4
- package/src/index.d.ts.map +1 -1
- package/src/index.js +5 -5
- package/src/microservices/MicroserviceGenerator.js +1 -1
- package/src/middleware/ErrorHandlerMiddleware.js +1 -1
- package/src/openapi/OpenApiGenerator.d.ts +1 -1
- package/src/openapi/OpenApiGenerator.d.ts.map +1 -1
- package/src/orm/Model.js +3 -3
- package/src/{routing → routes}/CoreRoutes.d.ts +1 -1
- package/src/routes/CoreRoutes.d.ts.map +1 -0
- package/src/{routing → routes}/CoreRoutes.js +3 -1
- package/src/routes/RouteRegistry.d.ts.map +1 -0
- package/src/{routing → routes}/Router.d.ts +1 -1
- package/src/routes/Router.d.ts.map +1 -0
- package/src/routes/common.d.ts.map +1 -0
- package/src/{routing → routes}/doc.d.ts +1 -1
- package/src/routes/doc.d.ts.map +1 -0
- package/src/{routing → routes}/error.d.ts +1 -1
- package/src/routes/error.d.ts.map +1 -0
- package/src/{routing → routes}/errorPages.d.ts +1 -1
- package/src/routes/errorPages.d.ts.map +1 -0
- package/{routes → src/routes}/health.d.ts +1 -1
- package/src/routes/health.d.ts.map +1 -0
- package/{routes → src/routes}/health.js +1 -1
- package/src/routes/metrics.d.ts +8 -1
- package/src/routes/metrics.d.ts.map +1 -1
- package/src/routes/metrics.js +20 -1
- package/{routes → src/routes}/openapi.d.ts +1 -1
- package/src/routes/openapi.d.ts.map +1 -0
- package/{routes → src/routes}/openapi.js +6 -6
- package/src/routes/publicRoot.d.ts.map +1 -0
- package/src/runtime/PluginAutoImports.d.ts.map +1 -1
- package/src/runtime/PluginAutoImports.js +0 -10
- package/src/templates/project/basic/app/Controllers/AuthController.ts.tpl +21 -22
- package/src/testing/TestEnvironment.d.ts +1 -1
- package/src/testing/TestEnvironment.d.ts.map +1 -1
- package/src/testing/TestEnvironment.js +1 -1
- package/routes/api.d.ts +0 -7
- package/routes/api.d.ts.map +0 -1
- package/routes/api.js +0 -115
- package/routes/broadcast.d.ts +0 -9
- package/routes/broadcast.d.ts.map +0 -1
- package/routes/broadcast.js +0 -27
- package/routes/health.d.ts.map +0 -1
- package/routes/metrics.d.ts +0 -9
- package/routes/metrics.d.ts.map +0 -1
- package/routes/metrics.js +0 -20
- package/routes/openapi.d.ts.map +0 -1
- package/routes/storage.d.ts +0 -4
- package/routes/storage.d.ts.map +0 -1
- package/routes/storage.js +0 -35
- package/src/routes/api.d.ts +0 -2
- package/src/routes/api.d.ts.map +0 -1
- package/src/routes/api.js +0 -1
- package/src/routes/broadcast.d.ts +0 -2
- package/src/routes/broadcast.d.ts.map +0 -1
- package/src/routes/broadcast.js +0 -1
- package/src/routes/storage.d.ts +0 -2
- package/src/routes/storage.d.ts.map +0 -1
- package/src/routes/storage.js +0 -1
- package/src/routing/CoreRoutes.d.ts.map +0 -1
- package/src/routing/RouteRegistry.d.ts.map +0 -1
- package/src/routing/Router.d.ts.map +0 -1
- package/src/routing/common.d.ts.map +0 -1
- package/src/routing/doc.d.ts.map +0 -1
- package/src/routing/error.d.ts.map +0 -1
- package/src/routing/errorPages.d.ts.map +0 -1
- package/src/routing/publicRoot.d.ts.map +0 -1
- package/src/{routing → routes}/RouteRegistry.d.ts +0 -0
- package/src/{routing → routes}/RouteRegistry.js +0 -0
- package/src/{routing → routes}/Router.js +0 -0
- package/src/{routing → routes}/common.d.ts +0 -0
- package/src/{routing → routes}/common.js +0 -0
- package/src/{routing → routes}/doc.js +3 -3
- package/src/{routing → routes}/error.js +2 -2
- package/src/{routing → routes}/errorPages.js +3 -3
- /package/src/{routing → routes}/publicRoot.d.ts +0 -0
- /package/src/{routing → routes}/publicRoot.js +0 -0
|
@@ -157,7 +157,7 @@ export default ${pascalCase(serviceName)}Kernel.create(Application.create());
|
|
|
157
157
|
fs.writeFileSync(path.join(serviceDir, 'src', 'Kernel.ts'), code);
|
|
158
158
|
};
|
|
159
159
|
const generateServiceRoutes = async (serviceDir, serviceName) => {
|
|
160
|
-
const code = `import { IRouter } from '
|
|
160
|
+
const code = `import { IRouter } from '@routing/Router';
|
|
161
161
|
|
|
162
162
|
/**
|
|
163
163
|
* ${serviceName} service routes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import ErrorRouting from '../routing/error.js';
|
|
2
1
|
import { Env } from '../config/env.js';
|
|
3
2
|
import { Logger } from '../config/logger.js';
|
|
3
|
+
import ErrorRouting from '../routes/error.js';
|
|
4
4
|
import { ErrorResponse } from '../http/ErrorResponse.js';
|
|
5
5
|
import { RequestContext } from '../http/RequestContext.js';
|
|
6
6
|
const isWritableEnded = (res) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenApiGenerator.d.ts","sourceRoot":"","sources":["../../../src/openapi/OpenApiGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,
|
|
1
|
+
{"version":3,"file":"OpenApiGenerator.d.ts","sourceRoot":"","sources":["../../../src/openapi/OpenApiGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,4BAA4B,CAAC;AAGtF,KAAK,aAAa,GAAG;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE;QACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,EAAE;YACP,kBAAkB,EAAE;gBAClB,MAAM,EAAE,aAAa,CAAC;aACvB,CAAC;SACH,CAAC;KACH,CAAC;IACF,SAAS,EAAE,MAAM,CACf,MAAM,EACN;QACE,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE;YACR,kBAAkB,EAAE;gBAClB,MAAM,EAAE,aAAa,CAAC;aACvB,CAAC;SACH,CAAC;KACH,CACF,CAAC;CACH,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;CACzD,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,CAAC;AAkVF,eAAO,MAAM,gBAAgB;qBACV,iBAAiB,EAAE,WAAW,uBAAuB,GAAG,eAAe;EAyCxF,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
|
package/src/orm/Model.js
CHANGED
|
@@ -347,8 +347,8 @@ const createRelationMapping = (cfg, resolveMethods) => {
|
|
|
347
347
|
const hydrateRows = (raw, hydrateModel) => {
|
|
348
348
|
if (!Array.isArray(raw))
|
|
349
349
|
return null;
|
|
350
|
-
const rows = raw.filter(isRecord);
|
|
351
|
-
return rows.map(hydrateModel);
|
|
350
|
+
const rows = raw.filter((element) => isRecord(element));
|
|
351
|
+
return rows.map((element) => hydrateModel(element));
|
|
352
352
|
};
|
|
353
353
|
const loadEagerRelations = async (eagerBuilder, models) => {
|
|
354
354
|
const eagerLoads = typeof eagerBuilder.getEagerLoads === 'function' ? eagerBuilder.getEagerLoads() : undefined;
|
|
@@ -476,7 +476,7 @@ const createDefinedModelInternal = (cfg, methodsOrPlan, attach, resolveMethods)
|
|
|
476
476
|
if (typeof hydrate !== 'function')
|
|
477
477
|
continue;
|
|
478
478
|
if (Array.isArray(data)) {
|
|
479
|
-
const relatedModels = data.filter(isRecord).map((d) => hydrate(d));
|
|
479
|
+
const relatedModels = data.filter((element) => isRecord(element)).map((d) => hydrate(d));
|
|
480
480
|
model.setRelation(name, relatedModels);
|
|
481
481
|
continue;
|
|
482
482
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CoreRoutes.d.ts","sourceRoot":"","sources":["../../../src/routes/CoreRoutes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAoBnD;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,OAAO,KAAG,IAOpD,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -4,12 +4,13 @@
|
|
|
4
4
|
* Not customizable by developers; provide env-based configuration
|
|
5
5
|
*/
|
|
6
6
|
import { PrometheusMetrics } from '../observability/PrometheusMetrics.js';
|
|
7
|
-
import {
|
|
7
|
+
import { registerOpenApiRoutes } from '../routes/openapi.js';
|
|
8
8
|
import { registerHealthRoutes } from '../common/HealthRoutes.js';
|
|
9
9
|
import { Env } from '../config/env.js';
|
|
10
10
|
import { registerDocRoutes } from './doc.js';
|
|
11
11
|
import { registerErrorRoutes } from './error.js';
|
|
12
12
|
import { registerErrorPagesRoutes } from './errorPages.js';
|
|
13
|
+
import { Router } from './Router.js';
|
|
13
14
|
/**
|
|
14
15
|
* Register metrics endpoint
|
|
15
16
|
*/
|
|
@@ -33,5 +34,6 @@ export const registerCoreRoutes = (router) => {
|
|
|
33
34
|
registerDocRoutes(router);
|
|
34
35
|
registerErrorPagesRoutes(router);
|
|
35
36
|
registerErrorRoutes(router);
|
|
37
|
+
registerOpenApiRoutes(router);
|
|
36
38
|
};
|
|
37
39
|
export default registerCoreRoutes;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RouteRegistry.d.ts","sourceRoot":"","sources":["../../../src/routes/RouteRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEjE,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,UAAU,CAAC;AAEpD,MAAM,MAAM,cAAc,GACtB,SAAS,GACT;IACE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEzB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,gBAAgB,CAAC;QAC9B,WAAW,CAAC,EAAE,gBAAgB,CAAC;QAC/B,YAAY,CAAC,EAAE,gBAAgB,CAAC;QAChC,aAAa,CAAC,EAAE,gBAAgB,CAAC;KAClC,CAAC;IAEF,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,QAAQ,cAAc,KAAG,SAAS,GAAG,SAwCvE,CAAC;AAUF,eAAO,MAAM,aAAa;kBACV,iBAAiB,GAAG,IAAI;YAI9B,SAAS,iBAAiB,EAAE;aAK3B,IAAI;EAGb,CAAC;AAEH,eAAe,aAAa,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { type RouteMeta, type RouteMetaInput } from './RouteRegistry';
|
|
1
2
|
import type { IRequest } from '../http/Request';
|
|
2
3
|
import type { IResponse } from '../http/Response';
|
|
3
|
-
import { type RouteMeta, type RouteMetaInput } from './RouteRegistry';
|
|
4
4
|
/**
|
|
5
5
|
* Router - HTTP Routing Engine
|
|
6
6
|
* Matches incoming requests to route handlers
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../../src/routes/Router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/routes/common.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgBjD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,OAAO,MAAM,KAAG,MAMrD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,MAAM,EAAE,cAAc,MAAM,KAAG,MAAM,GAAG,SAQhF,CAAC"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Documentation Routes
|
|
3
3
|
* Serves static files from /doc/* paths with relaxed CSP headers.
|
|
4
4
|
*/
|
|
5
|
-
import type { IResponse } from '../http/Response';
|
|
6
5
|
import type { IRouter } from './Router';
|
|
6
|
+
import type { IResponse } from '../http/Response';
|
|
7
7
|
export { MIME_TYPES_MAP } from './common';
|
|
8
8
|
/**
|
|
9
9
|
* Find the package root directory
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc.d.ts","sourceRoot":"","sources":["../../../src/routes/doc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAInD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;GAEG;AAEH,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,uBAAuB,EACvB,4BAA4B,EAC5B,aAAa,EACb,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAiBjC;;GAEG;AACH,eAAO,MAAM,0BAA0B,GAAI,UAAU,SAAS,KAAG,IAWhE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,GACtC,SAAS,MAAM,EACf,UAAU,SAAS,KAClB,OAAO,CAAC,OAAO,CAgDjB,CAAC;AASF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,OAAO,KAAG,IAMnD,CAAC;;gCANwC,OAAO,KAAG,IAAI;2CA5EH,SAAS,KAAG,IAAI;2CAiB1D,MAAM,YACL,SAAS,KAClB,OAAO,CAAC,OAAO,CAAC;;AAiEnB,wBAIE"}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Error Routing
|
|
3
3
|
* Centralizes 404/500 handling and HTML error page rendering.
|
|
4
4
|
*/
|
|
5
|
+
import type { IRouter } from './Router';
|
|
5
6
|
import type { IRequest } from '../http/Request';
|
|
6
7
|
import type { IResponse } from '../http/Response';
|
|
7
8
|
import type * as http from '../node-singletons/http';
|
|
8
|
-
import type { IRouter } from './Router';
|
|
9
9
|
/**
|
|
10
10
|
* Debug routes to always render 404/500 responses.
|
|
11
11
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../src/routes/error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAKnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAyJnD;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,OAAO,KAAG,IAGrD,CAAC;AAEF,eAAO,MAAM,YAAY;;kCALmB,OAAO,KAAG,IAAI;8BAlGzB,QAAQ,YAAY,SAAS,cAAc,MAAM,KAAG,IAAI;qDAiB9E,QAAQ,YACP,SAAS,SACZ,OAAO,cACF,MAAM,KACjB,IAAI;wCA0DoC,IAAI,CAAC,cAAc,KAAG,IAAI;EA8BnE,CAAC;AAEH,eAAe,YAAY,CAAC"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Error Pages Static Assets
|
|
3
3
|
* Serves /error-pages/* assets (CSS/JS/SVG/etc) used by HTML error templates.
|
|
4
4
|
*/
|
|
5
|
-
import type { IResponse } from '../http/Response';
|
|
6
5
|
import type { IRouter } from './Router';
|
|
6
|
+
import type { IResponse } from '../http/Response';
|
|
7
7
|
export declare const serveErrorPagesFile: (urlPath: string, response: IResponse) => boolean;
|
|
8
8
|
export declare const registerErrorPagesRoutes: (router: IRouter) => void;
|
|
9
9
|
declare const _default: {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorPages.d.ts","sourceRoot":"","sources":["../../../src/routes/errorPages.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAInD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAkChD,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,EAAE,UAAU,SAAS,KAAG,OAsD1E,CAAC;AAeF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,OAAO,KAAG,IAO1D,CAAC;;uCAP+C,OAAO,KAAG,IAAI;mCArElB,MAAM,YAAY,SAAS,KAAG,OAAO;;AA8ElF,wBAAiE"}
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Health Routes - Re-export from shared module
|
|
3
3
|
* This file maintains backward compatibility while eliminating duplication
|
|
4
4
|
*/
|
|
5
|
-
export { registerHealthRoutes } from '../
|
|
5
|
+
export { registerHealthRoutes } from '../common/HealthRoutes';
|
|
6
6
|
//# sourceMappingURL=health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/routes/health.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/src/routes/metrics.d.ts
CHANGED
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Metrics Routes
|
|
3
|
+
*
|
|
4
|
+
* Exposes Prometheus metrics when enabled.
|
|
5
|
+
*/
|
|
6
|
+
import { type IRouter } from './Router';
|
|
7
|
+
export declare function registerMetricsRoutes(router: IRouter): void;
|
|
8
|
+
export default registerMetricsRoutes;
|
|
2
9
|
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/routes/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/routes/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,qBAAqB,CAAC;AAE3D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAW3D;AAED,eAAe,qBAAqB,CAAC"}
|
package/src/routes/metrics.js
CHANGED
|
@@ -1 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Metrics Routes
|
|
3
|
+
*
|
|
4
|
+
* Exposes Prometheus metrics when enabled.
|
|
5
|
+
*/
|
|
6
|
+
import { PrometheusMetrics } from '../observability/PrometheusMetrics.js';
|
|
7
|
+
import { Env } from '../config/env.js';
|
|
8
|
+
import { Router } from './Router.js';
|
|
9
|
+
export function registerMetricsRoutes(router) {
|
|
10
|
+
if (Env.getBool('METRICS_ENABLED', false) === false)
|
|
11
|
+
return;
|
|
12
|
+
const pathFromEnv = Env.get('METRICS_PATH', '/metrics').trim();
|
|
13
|
+
const path = pathFromEnv === '' ? '/metrics' : pathFromEnv;
|
|
14
|
+
Router.get(router, path, async (_req, res) => {
|
|
15
|
+
const { contentType, body } = await PrometheusMetrics.getMetricsText();
|
|
16
|
+
res.setHeader('Content-Type', contentType);
|
|
17
|
+
res.send(body);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
export default registerMetricsRoutes;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Serves a generated OpenAPI spec from the in-memory RouteRegistry.
|
|
5
5
|
*/
|
|
6
|
-
import { type IRouter } from '
|
|
6
|
+
import { type IRouter } from './Router';
|
|
7
7
|
export declare function registerOpenApiRoutes(router: IRouter): void;
|
|
8
8
|
export default registerOpenApiRoutes;
|
|
9
9
|
//# sourceMappingURL=openapi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../../src/routes/openapi.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,qBAAqB,CAAC;AA2C3D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAuC3D;AAED,eAAe,qBAAqB,CAAC"}
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Serves a generated OpenAPI spec from the in-memory RouteRegistry.
|
|
5
5
|
*/
|
|
6
|
-
import { OpenApiGenerator } from '../
|
|
7
|
-
import { Env } from '../
|
|
8
|
-
import { Router } from '
|
|
9
|
-
import { RouteRegistry } from '
|
|
6
|
+
import { OpenApiGenerator } from '../openapi/OpenApiGenerator.js';
|
|
7
|
+
import { Env } from '../config/env.js';
|
|
8
|
+
import { Router } from './Router.js';
|
|
9
|
+
import { RouteRegistry } from './RouteRegistry.js';
|
|
10
10
|
const getServerUrl = () => {
|
|
11
11
|
const explicit = Env.BASE_URL;
|
|
12
12
|
if (explicit.trim() !== '')
|
|
@@ -46,7 +46,7 @@ const getDocsHtml = (specUrl) => `<!doctype html>
|
|
|
46
46
|
</body>
|
|
47
47
|
</html>`;
|
|
48
48
|
export function registerOpenApiRoutes(router) {
|
|
49
|
-
Router.get(router, '/openapi.json',
|
|
49
|
+
Router.get(router, '/openapi.json', (_req, res) => {
|
|
50
50
|
// Convert readonly to mutable array for OpenApiGenerator
|
|
51
51
|
const routes = Array.from(RouteRegistry.list());
|
|
52
52
|
const doc = OpenApiGenerator.generate(routes, {
|
|
@@ -63,7 +63,7 @@ export function registerOpenApiRoutes(router) {
|
|
|
63
63
|
responseStatus: 200,
|
|
64
64
|
},
|
|
65
65
|
});
|
|
66
|
-
Router.get(router, '/docs',
|
|
66
|
+
Router.get(router, '/docs', (_req, res) => {
|
|
67
67
|
res.html(getDocsHtml('/openapi.json'));
|
|
68
68
|
}, {
|
|
69
69
|
meta: {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publicRoot.d.ts","sourceRoot":"","sources":["../../../src/routes/publicRoot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,KAAG,MAalD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,CAkB3E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,QAAO,MAAM,EAIhD,CAAC;AAEF,eAAO,MAAM,4BAA4B,QAAa,OAAO,CAAC,MAAM,EAAE,CAIrE,CAAC;AAKF;;;GAGG;AACH,eAAO,MAAM,aAAa,QAAO,MAgBhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,QAAa,OAAO,CAAC,MAAM,CA+BzD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginAutoImports.d.ts","sourceRoot":"","sources":["../../../src/runtime/PluginAutoImports.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PluginAutoImports.d.ts","sourceRoot":"","sources":["../../../src/runtime/PluginAutoImports.ts"],"names":[],"mappings":"AAMA,KAAK,YAAY,GACb;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAChC;IACE,EAAE,EAAE,KAAK,CAAC;IACV,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,GAAG,eAAe,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAwBN,eAAO,MAAM,iBAAiB;IAC5B;;;;;;OAMG;mCACkC,OAAO,CAAC,YAAY,CAAC;EAqB1D,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { pathToFileURL } from '../node-singletons/url.js';
|
|
2
2
|
import { readEnvString } from '../common/ExternalServiceUtils.js';
|
|
3
3
|
import { Logger } from '../config/logger.js';
|
|
4
|
-
import { ErrorFactory } from '../exceptions/ZintrustError.js';
|
|
5
4
|
import { existsSync } from '../node-singletons/fs.js';
|
|
6
5
|
import * as path from '../node-singletons/path.js';
|
|
7
6
|
const getProjectCwd = () => process.cwd();
|
|
@@ -45,15 +44,6 @@ export const PluginAutoImports = Object.freeze({
|
|
|
45
44
|
}
|
|
46
45
|
catch (error) {
|
|
47
46
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
48
|
-
Logger.warn('[plugins] Failed to import plugin auto-imports', {
|
|
49
|
-
candidate,
|
|
50
|
-
errorMessage,
|
|
51
|
-
});
|
|
52
|
-
// Keep error creation for consistent structure (but do not throw).
|
|
53
|
-
ErrorFactory.createTryCatchError('Failed to import project plugin auto-imports', {
|
|
54
|
-
candidate,
|
|
55
|
-
error,
|
|
56
|
-
});
|
|
57
47
|
return { ok: false, loadedPath: candidate, reason: 'import-failed', errorMessage };
|
|
58
48
|
}
|
|
59
49
|
}
|
|
@@ -3,20 +3,17 @@
|
|
|
3
3
|
* Minimal, real auth endpoints backing the example API routes.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import { User } from '@app/Models/User';
|
|
7
|
+
import type { AuthControllerApi, JsonRecord, UserRow } from '@app/Types/controller';
|
|
8
|
+
import type { IRequest, IResponse } from '@zintrust/core';
|
|
6
9
|
import {
|
|
7
|
-
getString,
|
|
8
10
|
Auth,
|
|
11
|
+
JwtManager,
|
|
9
12
|
Logger,
|
|
13
|
+
TokenRevocation,
|
|
14
|
+
getString,
|
|
10
15
|
getValidatedBody,
|
|
11
|
-
useDatabase,
|
|
12
|
-
QueryBuilder,
|
|
13
|
-
JwtManager,
|
|
14
|
-
TokenRevocation
|
|
15
16
|
} from '@zintrust/core';
|
|
16
|
-
import type { AuthControllerApi, JsonRecord, UserRow } from '@app/Types/controller';
|
|
17
|
-
import type { IRequest, IResponse } from '@zintrust/core';
|
|
18
|
-
import User from '@app/Models/User';
|
|
19
|
-
|
|
20
17
|
|
|
21
18
|
const pickPublicUser = (row: UserRow): { id: unknown; name: string; email: string } => {
|
|
22
19
|
return {
|
|
@@ -131,12 +128,7 @@ async function register(req: IRequest, res: IResponse): Promise<void> {
|
|
|
131
128
|
const ipAddress = req.getRaw().socket.remoteAddress ?? 'unknown';
|
|
132
129
|
|
|
133
130
|
try {
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
const existing = await QueryBuilder.create('users', db)
|
|
137
|
-
.where('email', '=', email)
|
|
138
|
-
.limit(1)
|
|
139
|
-
.first<UserRow>();
|
|
131
|
+
const existing = await User.where('email', '=', email).limit(1).first<UserRow>();
|
|
140
132
|
|
|
141
133
|
if (existing !== null) {
|
|
142
134
|
Logger.warn('AuthController.register: duplicate email attempt', {
|
|
@@ -150,19 +142,26 @@ async function register(req: IRequest, res: IResponse): Promise<void> {
|
|
|
150
142
|
|
|
151
143
|
const passwordHash = await Auth.hash(password);
|
|
152
144
|
|
|
153
|
-
await
|
|
145
|
+
const result = await User.query().insert({
|
|
154
146
|
name,
|
|
155
147
|
email,
|
|
156
148
|
password: passwordHash,
|
|
157
149
|
});
|
|
158
150
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
151
|
+
if (result.id !== null && result.id !== undefined) {
|
|
152
|
+
Logger.info('AuthController.register: successful registration', {
|
|
153
|
+
user_id: result.id,
|
|
154
|
+
email,
|
|
155
|
+
ip: ipAddress,
|
|
156
|
+
timestamp: new Date().toISOString(),
|
|
157
|
+
});
|
|
164
158
|
|
|
165
|
-
|
|
159
|
+
res.setStatus(201).json({ message: 'Registered' });
|
|
160
|
+
} else {
|
|
161
|
+
Logger.error('Failed to retrieve inserted user ID');
|
|
162
|
+
res.setStatus(500).json({ error: 'Registration failed' });
|
|
163
|
+
}
|
|
164
|
+
return;
|
|
166
165
|
} catch (error) {
|
|
167
166
|
Logger.error('AuthController.register failed', error);
|
|
168
167
|
res.setStatus(500).json({ error: 'Registration failed' });
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type IServiceContainer } from '../container/ServiceContainer';
|
|
2
2
|
import { type IKernel } from '../http/Kernel';
|
|
3
|
-
import { type IRouter } from '../
|
|
3
|
+
import { type IRouter } from '../routes/Router';
|
|
4
4
|
export type TestHeaders = Record<string, string>;
|
|
5
5
|
export type TestRequestInput = {
|
|
6
6
|
method: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestEnvironment.d.ts","sourceRoot":"","sources":["../../../src/testing/TestEnvironment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACxF,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"TestEnvironment.d.ts","sourceRoot":"","sources":["../../../src/testing/TestEnvironment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACxF,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG3D,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEjD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C,CAAC;AA2HF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxD,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC;IACvD,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC;CAC3D;AAED,eAAO,MAAM,eAAe;qBACV,sBAAsB,GAAQ,gBAAgB;EA6C9D,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { ServiceContainer } from '../container/ServiceContainer.js';
|
|
|
2
2
|
import { Kernel } from '../http/Kernel.js';
|
|
3
3
|
import { Request } from '../http/Request.js';
|
|
4
4
|
import { Response } from '../http/Response.js';
|
|
5
|
-
import { Router } from '../
|
|
5
|
+
import { Router } from '../routes/Router.js';
|
|
6
6
|
const lowerCaseHeaders = (headers) => {
|
|
7
7
|
if (!headers)
|
|
8
8
|
return {};
|
package/routes/api.d.ts
DELETED
package/routes/api.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../routes/api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,iBAAiB,CAAC;AAEvD,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAMpD"}
|
package/routes/api.js
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Example Routes
|
|
3
|
-
* Demonstrates routing patterns
|
|
4
|
-
*/
|
|
5
|
-
import { AuthController } from '../app/Controllers/AuthController.js';
|
|
6
|
-
import { UserQueryBuilderController } from '../app/Controllers/UserQueryBuilderController.js';
|
|
7
|
-
import { Env } from '../src/config/env.js';
|
|
8
|
-
import { registerBroadcastRoutes } from './broadcast.js';
|
|
9
|
-
import { registerHealthRoutes } from './health.js';
|
|
10
|
-
import { registerMetricsRoutes } from './metrics.js';
|
|
11
|
-
import { registerOpenApiRoutes } from './openapi.js';
|
|
12
|
-
import { registerStorageRoutes } from './storage.js';
|
|
13
|
-
import { Router } from '../src/routing/Router.js';
|
|
14
|
-
export function registerRoutes(router) {
|
|
15
|
-
const authController = AuthController.create();
|
|
16
|
-
const userController = UserQueryBuilderController.create();
|
|
17
|
-
registerPublicRoutes(router);
|
|
18
|
-
registerApiV1Routes(router, authController, userController);
|
|
19
|
-
registerAdminRoutes(router);
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Register public routes
|
|
23
|
-
*/
|
|
24
|
-
function registerPublicRoutes(router) {
|
|
25
|
-
registerRootRoute(router);
|
|
26
|
-
registerHealthRoutes(router);
|
|
27
|
-
registerMetricsRoutes(router);
|
|
28
|
-
registerBroadcastRoutes(router);
|
|
29
|
-
registerOpenApiRoutes(router);
|
|
30
|
-
registerStorageRoutes(router);
|
|
31
|
-
}
|
|
32
|
-
function registerRootRoute(router) {
|
|
33
|
-
Router.get(router, '/', async (_req, res) => {
|
|
34
|
-
res.json({
|
|
35
|
-
framework: 'ZinTrust Framework',
|
|
36
|
-
app_name: Env.APP_NAME,
|
|
37
|
-
version: '0.1.0',
|
|
38
|
-
env: Env.NODE_ENV ?? 'development',
|
|
39
|
-
database: Env.DB_CONNECTION ?? 'sqlite',
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Register API V1 routes
|
|
45
|
-
*/
|
|
46
|
-
function registerApiV1Routes(router, authController, userController) {
|
|
47
|
-
Router.group(router, '/api/v1', (r) => {
|
|
48
|
-
// Auth routes
|
|
49
|
-
Router.post(r, '/auth/login', authController.login, {
|
|
50
|
-
middleware: ['authRateLimit', 'validateLogin'],
|
|
51
|
-
});
|
|
52
|
-
Router.post(r, '/auth/register', authController.register, {
|
|
53
|
-
middleware: ['authRateLimit', 'validateRegister'],
|
|
54
|
-
});
|
|
55
|
-
Router.post(r, '/auth/logout', authController.logout, {
|
|
56
|
-
middleware: ['auth', 'jwt'],
|
|
57
|
-
});
|
|
58
|
-
Router.post(r, '/auth/refresh', authController.refresh, {
|
|
59
|
-
middleware: ['auth', 'jwt'],
|
|
60
|
-
});
|
|
61
|
-
// Protected routes (Router supports per-route middleware metadata)
|
|
62
|
-
const pr = r;
|
|
63
|
-
// User resource (REST-ish)
|
|
64
|
-
Router.resource(pr, '/users', {
|
|
65
|
-
index: userController.index,
|
|
66
|
-
store: userController.store,
|
|
67
|
-
show: userController.show,
|
|
68
|
-
update: userController.update,
|
|
69
|
-
destroy: userController.destroy,
|
|
70
|
-
}, {
|
|
71
|
-
middleware: ['auth', 'jwt'],
|
|
72
|
-
store: { middleware: ['auth', 'jwt', 'userMutationRateLimit', 'validateUserStore'] },
|
|
73
|
-
update: { middleware: ['auth', 'jwt', 'userMutationRateLimit', 'validateUserUpdate'] },
|
|
74
|
-
destroy: { middleware: ['auth', 'jwt', 'userMutationRateLimit'] },
|
|
75
|
-
});
|
|
76
|
-
Router.post(pr, '/users/fill', userController.fill, {
|
|
77
|
-
middleware: ['auth', 'jwt', 'fillRateLimit', 'validateUserFill'],
|
|
78
|
-
});
|
|
79
|
-
// If the controller exposes create/edit, wire them explicitly.
|
|
80
|
-
Router.get(pr, '/users/create', userController.create, {
|
|
81
|
-
middleware: ['auth', 'jwt'],
|
|
82
|
-
});
|
|
83
|
-
Router.get(pr, '/users/:id/edit', userController.edit, {
|
|
84
|
-
middleware: ['auth', 'jwt'],
|
|
85
|
-
});
|
|
86
|
-
// Custom user routes
|
|
87
|
-
Router.get(pr, '/profile', async (__req, res) => {
|
|
88
|
-
res.json({ message: 'Get user profile' });
|
|
89
|
-
}, { middleware: ['auth', 'jwt'] });
|
|
90
|
-
Router.put(pr, '/profile', async (__req, res) => {
|
|
91
|
-
res.json({ message: 'Update user profile' });
|
|
92
|
-
}, { middleware: ['auth', 'jwt'] });
|
|
93
|
-
// Posts resource
|
|
94
|
-
Router.get(r, '/posts', async (_req, res) => {
|
|
95
|
-
res.json({ data: [] });
|
|
96
|
-
});
|
|
97
|
-
Router.get(r, '/posts/:id', async (req, res) => {
|
|
98
|
-
const id = req.getParam('id');
|
|
99
|
-
res.json({ data: { id } });
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Register admin routes
|
|
105
|
-
*/
|
|
106
|
-
function registerAdminRoutes(router) {
|
|
107
|
-
Router.group(router, '/admin', (r) => {
|
|
108
|
-
Router.get(r, '/dashboard', async (__req, res) => {
|
|
109
|
-
res.json({ message: 'Admin dashboard' });
|
|
110
|
-
});
|
|
111
|
-
Router.get(r, '/users', async (__req, res) => {
|
|
112
|
-
res.json({ data: [] });
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
}
|
package/routes/broadcast.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Broadcast Routes
|
|
3
|
-
*
|
|
4
|
-
* Runtime-only endpoints for broadcast.
|
|
5
|
-
* Provider setup and secret provisioning remain CLI-only.
|
|
6
|
-
*/
|
|
7
|
-
import { type IRouter } from '../src/routing/Router';
|
|
8
|
-
export declare function registerBroadcastRoutes(router: IRouter): void;
|
|
9
|
-
//# sourceMappingURL=broadcast.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../routes/broadcast.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,iBAAiB,CAAC;AAEvD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAsB7D"}
|
package/routes/broadcast.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Broadcast Routes
|
|
3
|
-
*
|
|
4
|
-
* Runtime-only endpoints for broadcast.
|
|
5
|
-
* Provider setup and secret provisioning remain CLI-only.
|
|
6
|
-
*/
|
|
7
|
-
import { Router } from '../src/routing/Router.js';
|
|
8
|
-
export function registerBroadcastRoutes(router) {
|
|
9
|
-
Router.get(router, '/broadcast/health', async (_req, res) => {
|
|
10
|
-
res.json({ ok: true });
|
|
11
|
-
});
|
|
12
|
-
Router.post(router, '/broadcast/send', async (req, res) => {
|
|
13
|
-
const body = (req.body ?? {});
|
|
14
|
-
const channel = typeof body['channel'] === 'string' ? body['channel'] : '';
|
|
15
|
-
const event = typeof body['event'] === 'string' ? body['event'] : '';
|
|
16
|
-
const data = body['data'];
|
|
17
|
-
if (!channel || !event) {
|
|
18
|
-
res
|
|
19
|
-
.setStatus(400)
|
|
20
|
-
.json({ ok: false, error: 'Invalid payload: channel and event are required' });
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
const { Broadcast } = await import('../src/tools/broadcast/Broadcast.js');
|
|
24
|
-
const result = await Broadcast.send(channel, event, data);
|
|
25
|
-
res.json({ ok: true, result });
|
|
26
|
-
});
|
|
27
|
-
}
|
package/routes/health.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../routes/health.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/routes/metrics.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Metrics Routes
|
|
3
|
-
*
|
|
4
|
-
* Exposes Prometheus metrics when enabled.
|
|
5
|
-
*/
|
|
6
|
-
import { type IRouter } from '../src/routing/Router';
|
|
7
|
-
export declare function registerMetricsRoutes(router: IRouter): void;
|
|
8
|
-
export default registerMetricsRoutes;
|
|
9
|
-
//# sourceMappingURL=metrics.d.ts.map
|
package/routes/metrics.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../routes/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,iBAAiB,CAAC;AAEvD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAW3D;AAED,eAAe,qBAAqB,CAAC"}
|
package/routes/metrics.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Metrics Routes
|
|
3
|
-
*
|
|
4
|
-
* Exposes Prometheus metrics when enabled.
|
|
5
|
-
*/
|
|
6
|
-
import { PrometheusMetrics } from '../src/observability/PrometheusMetrics.js';
|
|
7
|
-
import { Env } from '../src/config/env.js';
|
|
8
|
-
import { Router } from '../src/routing/Router.js';
|
|
9
|
-
export function registerMetricsRoutes(router) {
|
|
10
|
-
if (Env.getBool('METRICS_ENABLED', false) === false)
|
|
11
|
-
return;
|
|
12
|
-
const pathFromEnv = Env.get('METRICS_PATH', '/metrics').trim();
|
|
13
|
-
const path = pathFromEnv === '' ? '/metrics' : pathFromEnv;
|
|
14
|
-
Router.get(router, path, async (_req, res) => {
|
|
15
|
-
const { contentType, body } = await PrometheusMetrics.getMetricsText();
|
|
16
|
-
res.setHeader('Content-Type', contentType);
|
|
17
|
-
res.send(body);
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
export default registerMetricsRoutes;
|