@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.
Files changed (98) hide show
  1. package/package.json +1 -2
  2. package/src/boot/Application.d.ts +1 -1
  3. package/src/boot/Application.d.ts.map +1 -1
  4. package/src/boot/Application.js +3 -3
  5. package/src/boot/Server.d.ts.map +1 -1
  6. package/src/boot/Server.js +1 -1
  7. package/src/cli/commands/RoutesCommand.d.ts.map +1 -1
  8. package/src/cli/commands/RoutesCommand.js +15 -6
  9. package/src/cli/services/VersionChecker.d.ts +29 -0
  10. package/src/cli/services/VersionChecker.d.ts.map +1 -1
  11. package/src/cli/services/VersionChecker.js +103 -25
  12. package/src/collections/Collection.d.ts.map +1 -1
  13. package/src/collections/Collection.js +42 -7
  14. package/src/common/HealthRoutes.d.ts +1 -1
  15. package/src/common/HealthRoutes.d.ts.map +1 -1
  16. package/src/common/HealthRoutes.js +1 -1
  17. package/src/config/notification.js +3 -3
  18. package/src/http/Kernel.d.ts +1 -1
  19. package/src/http/Kernel.d.ts.map +1 -1
  20. package/src/http/Kernel.js +2 -2
  21. package/src/index.d.ts +4 -4
  22. package/src/index.d.ts.map +1 -1
  23. package/src/index.js +5 -5
  24. package/src/microservices/MicroserviceGenerator.js +1 -1
  25. package/src/middleware/ErrorHandlerMiddleware.js +1 -1
  26. package/src/openapi/OpenApiGenerator.d.ts +1 -1
  27. package/src/openapi/OpenApiGenerator.d.ts.map +1 -1
  28. package/src/orm/Model.js +3 -3
  29. package/src/{routing → routes}/CoreRoutes.d.ts +1 -1
  30. package/src/routes/CoreRoutes.d.ts.map +1 -0
  31. package/src/{routing → routes}/CoreRoutes.js +3 -1
  32. package/src/routes/RouteRegistry.d.ts.map +1 -0
  33. package/src/{routing → routes}/Router.d.ts +1 -1
  34. package/src/routes/Router.d.ts.map +1 -0
  35. package/src/routes/common.d.ts.map +1 -0
  36. package/src/{routing → routes}/doc.d.ts +1 -1
  37. package/src/routes/doc.d.ts.map +1 -0
  38. package/src/{routing → routes}/error.d.ts +1 -1
  39. package/src/routes/error.d.ts.map +1 -0
  40. package/src/{routing → routes}/errorPages.d.ts +1 -1
  41. package/src/routes/errorPages.d.ts.map +1 -0
  42. package/{routes → src/routes}/health.d.ts +1 -1
  43. package/src/routes/health.d.ts.map +1 -0
  44. package/{routes → src/routes}/health.js +1 -1
  45. package/src/routes/metrics.d.ts +8 -1
  46. package/src/routes/metrics.d.ts.map +1 -1
  47. package/src/routes/metrics.js +20 -1
  48. package/{routes → src/routes}/openapi.d.ts +1 -1
  49. package/src/routes/openapi.d.ts.map +1 -0
  50. package/{routes → src/routes}/openapi.js +6 -6
  51. package/src/routes/publicRoot.d.ts.map +1 -0
  52. package/src/runtime/PluginAutoImports.d.ts.map +1 -1
  53. package/src/runtime/PluginAutoImports.js +0 -10
  54. package/src/templates/project/basic/app/Controllers/AuthController.ts.tpl +21 -22
  55. package/src/testing/TestEnvironment.d.ts +1 -1
  56. package/src/testing/TestEnvironment.d.ts.map +1 -1
  57. package/src/testing/TestEnvironment.js +1 -1
  58. package/routes/api.d.ts +0 -7
  59. package/routes/api.d.ts.map +0 -1
  60. package/routes/api.js +0 -115
  61. package/routes/broadcast.d.ts +0 -9
  62. package/routes/broadcast.d.ts.map +0 -1
  63. package/routes/broadcast.js +0 -27
  64. package/routes/health.d.ts.map +0 -1
  65. package/routes/metrics.d.ts +0 -9
  66. package/routes/metrics.d.ts.map +0 -1
  67. package/routes/metrics.js +0 -20
  68. package/routes/openapi.d.ts.map +0 -1
  69. package/routes/storage.d.ts +0 -4
  70. package/routes/storage.d.ts.map +0 -1
  71. package/routes/storage.js +0 -35
  72. package/src/routes/api.d.ts +0 -2
  73. package/src/routes/api.d.ts.map +0 -1
  74. package/src/routes/api.js +0 -1
  75. package/src/routes/broadcast.d.ts +0 -2
  76. package/src/routes/broadcast.d.ts.map +0 -1
  77. package/src/routes/broadcast.js +0 -1
  78. package/src/routes/storage.d.ts +0 -2
  79. package/src/routes/storage.d.ts.map +0 -1
  80. package/src/routes/storage.js +0 -1
  81. package/src/routing/CoreRoutes.d.ts.map +0 -1
  82. package/src/routing/RouteRegistry.d.ts.map +0 -1
  83. package/src/routing/Router.d.ts.map +0 -1
  84. package/src/routing/common.d.ts.map +0 -1
  85. package/src/routing/doc.d.ts.map +0 -1
  86. package/src/routing/error.d.ts.map +0 -1
  87. package/src/routing/errorPages.d.ts.map +0 -1
  88. package/src/routing/publicRoot.d.ts.map +0 -1
  89. package/src/{routing → routes}/RouteRegistry.d.ts +0 -0
  90. package/src/{routing → routes}/RouteRegistry.js +0 -0
  91. package/src/{routing → routes}/Router.js +0 -0
  92. package/src/{routing → routes}/common.d.ts +0 -0
  93. package/src/{routing → routes}/common.js +0 -0
  94. package/src/{routing → routes}/doc.js +3 -3
  95. package/src/{routing → routes}/error.js +2 -2
  96. package/src/{routing → routes}/errorPages.js +3 -3
  97. /package/src/{routing → routes}/publicRoot.d.ts +0 -0
  98. /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 '../routing/Router';
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,4 +1,4 @@
1
- import type { RouteRegistration } from '../routing/RouteRegistry';
1
+ import type { RouteRegistration } from '../routes/RouteRegistry';
2
2
  type OpenApiSchema = {
3
3
  type?: string;
4
4
  format?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"OpenApiGenerator.d.ts","sourceRoot":"","sources":["../../../src/openapi/OpenApiGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,wBAAwB,CAAC;AAGlF,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"}
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
  }
@@ -3,7 +3,7 @@
3
3
  * Health, metrics, and documentation endpoints
4
4
  * Not customizable by developers; provide env-based configuration
5
5
  */
6
- import type { IRouter } from '../routing/Router';
6
+ import type { IRouter } from './Router';
7
7
  /**
8
8
  * Register all core framework routes
9
9
  */
@@ -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 { Router } from '../routing/Router.js';
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 '../src/common/HealthRoutes';
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"}
@@ -2,4 +2,4 @@
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 '../src/common/HealthRoutes.js';
5
+ export { registerHealthRoutes } from '../common/HealthRoutes.js';
@@ -1,2 +1,9 @@
1
- export { registerMetricsRoutes } from '../../routes/metrics';
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,EAAE,MAAM,iBAAiB,CAAC"}
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"}
@@ -1 +1,20 @@
1
- export { registerMetricsRoutes } from '../../routes/metrics.js';
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 '../src/routing/Router';
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 '../src/openapi/OpenApiGenerator.js';
7
- import { Env } from '../src/config/env.js';
8
- import { Router } from '../src/routing/Router.js';
9
- import { RouteRegistry } from '../src/routing/RouteRegistry.js';
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', async (_req, res) => {
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', async (_req, res) => {
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":"AAOA,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;EAgC1D,CAAC"}
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 db = useDatabase();
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 QueryBuilder.create('users', db).insert({
145
+ const result = await User.query().insert({
154
146
  name,
155
147
  email,
156
148
  password: passwordHash,
157
149
  });
158
150
 
159
- Logger.info('AuthController.register: successful registration', {
160
- email,
161
- ip: ipAddress,
162
- timestamp: new Date().toISOString(),
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
- res.setStatus(201).json({ message: 'Registered' });
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 '../routing/Router';
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,kBAAkB,CAAC;AAGxD,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"}
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 '../routing/Router.js';
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
@@ -1,7 +0,0 @@
1
- /**
2
- * Example Routes
3
- * Demonstrates routing patterns
4
- */
5
- import { type IRouter } from '../src/routing/Router';
6
- export declare function registerRoutes(router: IRouter): void;
7
- //# sourceMappingURL=api.d.ts.map
@@ -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
- }
@@ -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"}
@@ -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
- }
@@ -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"}
@@ -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
@@ -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;