@intuitionrobotics/thunderstorm 2.2.3 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/app-backend/api/v1/utils/health/get.d.ts +4 -12
  2. package/dist/app-backend/api/v1/utils/health/get.d.ts.map +1 -1
  3. package/dist/app-backend/api/v1/utils/health/get.js +40 -50
  4. package/dist/app-backend/api/v1/utils/health/get.js.map +1 -1
  5. package/dist/app-backend/api/v1/utils/version/assert.d.ts +2 -8
  6. package/dist/app-backend/api/v1/utils/version/assert.d.ts.map +1 -1
  7. package/dist/app-backend/api/v1/utils/version/assert.js +7 -15
  8. package/dist/app-backend/api/v1/utils/version/assert.js.map +1 -1
  9. package/dist/app-backend/core/Storm.js +2 -2
  10. package/dist/app-backend/core/Storm.js.map +1 -1
  11. package/dist/app-backend/modules/server/HttpServer.js +2 -2
  12. package/dist/app-backend/modules/server/HttpServer.js.map +1 -1
  13. package/dist/app-backend/modules/server/app-middleware.d.ts +1 -1
  14. package/dist/app-backend/modules/server/app-middleware.js +4 -4
  15. package/dist/app-backend/modules/server/app-middleware.js.map +1 -1
  16. package/dist/app-backend/modules/server/handler.d.ts +8 -0
  17. package/dist/app-backend/modules/server/handler.d.ts.map +1 -1
  18. package/dist/app-backend/modules/server/handler.js +18 -3
  19. package/dist/app-backend/modules/server/handler.js.map +1 -1
  20. package/dist/app-backend/modules/server/requireAuth.d.ts +19 -0
  21. package/dist/app-backend/modules/server/requireAuth.d.ts.map +1 -1
  22. package/dist/app-backend/modules/server/requireAuth.js +38 -0
  23. package/dist/app-backend/modules/server/requireAuth.js.map +1 -1
  24. package/dist/app-backend/modules/server/server-api.d.ts +6 -46
  25. package/dist/app-backend/modules/server/server-api.d.ts.map +1 -1
  26. package/dist/app-backend/modules/server/server-api.js +20 -186
  27. package/dist/app-backend/modules/server/server-api.js.map +1 -1
  28. package/dist/backend.d.ts.map +1 -1
  29. package/dist/backend.js +6 -5
  30. package/dist/backend.js.map +1 -1
  31. package/dist/tsconfig.tsbuildinfo +1 -1
  32. package/package.json +4 -4
@@ -1,13 +1,5 @@
1
- import { ApiResponse, ServerApi } from "../../../../modules/server/server-api.js";
2
- import { type ApiTypeBinder } from "../../../../../shared/types.js";
3
- import { type ExpressRequest } from "../../../../utils/types.js";
4
- import { type HealthReport } from "../../../../../shared/health.js";
5
- export declare class ServerApi_Health_Class extends ServerApi<ApiTypeBinder<"health", HealthReport, void, {}>> {
6
- private appVersion?;
7
- constructor();
8
- setVersion(version: string): this;
9
- protected process(_request: ExpressRequest, response: ApiResponse): Promise<HealthReport>;
10
- }
11
- export declare const ServerApi_Health: ServerApi_Health_Class;
12
- export default ServerApi_Health;
1
+ import { type RequestHandler } from "express";
2
+ export declare const healthHandler: (opts?: {
3
+ version?: string;
4
+ }) => RequestHandler;
13
5
  //# sourceMappingURL=get.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../../../src/main/app-backend/api/v1/utils/health/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,SAAS,EAAC,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAC,KAAK,aAAa,EAAa,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAC,KAAK,cAAc,EAAC,MAAM,4BAA4B,CAAC;AAG/D,OAAO,EAEH,KAAK,YAAY,EAIpB,MAAM,iCAAiC,CAAC;AAmBzC,qBAAa,sBACT,SAAQ,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAElE,OAAO,CAAC,UAAU,CAAC,CAAS;;IAO5B,UAAU,CAAC,OAAO,EAAE,MAAM;cAKV,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAoClG;AAED,eAAO,MAAM,gBAAgB,wBAA+B,CAAC;AAC7D,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../../../src/main/app-backend/api/v1/utils/health/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,cAAc,EAAC,MAAM,SAAS,CAAC;AA8B5C,eAAO,MAAM,aAAa,GAAI,OAAM;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,KAAG,cAuClC,CAAC"}
@@ -1,67 +1,57 @@
1
- import { ApiResponse, ServerApi } from "../../../../modules/server/server-api.js";
2
- import { HttpMethod } from "../../../../../shared/types.js";
3
- import {} from "../../../../utils/types.js";
1
+ import {} from "express";
2
+ import { handler } from "../../../../modules/server/handler.js";
3
+ import {} from "../../../../../shared/types.js";
4
4
  import { Storm } from "../../../../core/Storm.js";
5
5
  import { currentTimeMillies } from "@intuitionrobotics/ts-common";
6
6
  import { isHealthCheckContributor } from "../../../../../shared/health.js";
7
7
  const statusRank = { pass: 0, warn: 1, fail: 2 };
8
8
  const worse = (a, b) => (statusRank[a] >= statusRank[b] ? a : b);
9
- // Smart, transparent health endpoint.
9
+ // Smart, transparent health endpoint — the raw-Express `handler(fn)` form.
10
10
  //
11
11
  // TRANSPARENT — the framework never injects this for you. Mount it explicitly
12
12
  // from your routes file (one visible line), choosing your own path:
13
13
  //
14
- // import {ServerApi_Health} from "@intuitionrobotics/thunderstorm/backend";
15
- // v1.get("/health", ServerApi_Health.handler); // or
16
- // v1.get("/health", ServerApi_Health.setVersion(version).handler);
14
+ // import {healthHandler} from "@intuitionrobotics/thunderstorm/backend";
15
+ // v1.get("/health", healthHandler()); // or
16
+ // v1.get("/health", healthHandler({version}));
17
17
  //
18
18
  // SMART — it enumerates every loaded Storm module and reports env / node /
19
19
  // uptime. Any module implementing HealthCheckContributor (getHealth())
20
20
  // contributes real subsystem health; the overall status is the worst of them,
21
21
  // and a "fail" is reflected as HTTP 503 so load balancers / uptime probes can
22
22
  // gate on it.
23
- export class ServerApi_Health_Class extends ServerApi {
24
- appVersion;
25
- constructor() {
26
- super(HttpMethod.GET, "health");
27
- this.dontPrintResponse();
23
+ export const healthHandler = (opts = {}) => handler(async (_req, res) => {
24
+ const storm = Storm?.getInstance();
25
+ const modules = storm ? storm.filterModules(() => true) : [];
26
+ const moduleHealth = await Promise.all(modules.map(async (module) => {
27
+ const name = module.getName();
28
+ if (!isHealthCheckContributor(module))
29
+ return { name, status: "pass" };
30
+ try {
31
+ const contribution = await module.getHealth();
32
+ return { name, status: contribution.status, detail: contribution.detail };
33
+ }
34
+ catch (e) {
35
+ return { name, status: "fail", detail: e?.message ?? "getHealth() threw" };
36
+ }
37
+ }));
38
+ const status = moduleHealth.reduce((worst, m) => worse(worst, m.status), "pass");
39
+ const report = {
40
+ status,
41
+ env: storm?.getEnvironment() ?? "unknown",
42
+ node: process.version,
43
+ uptimeSec: Math.floor(process.uptime()),
44
+ timestamp: currentTimeMillies(),
45
+ modules: moduleHealth,
46
+ version: opts.version
47
+ };
48
+ // A failing health check must surface as 503 (probes gate on it); writing
49
+ // res directly makes handler()'s autoSend a no-op. Otherwise return the
50
+ // report and autoSend emits 200.
51
+ if (status === "fail") {
52
+ res.status(503).json(report);
53
+ return;
28
54
  }
29
- setVersion(version) {
30
- this.appVersion = version;
31
- return this;
32
- }
33
- async process(_request, response) {
34
- const storm = Storm.getInstance();
35
- const modules = storm ? storm.filterModules(() => true) : [];
36
- const moduleHealth = await Promise.all(modules.map(async (module) => {
37
- const name = module.getName();
38
- if (!isHealthCheckContributor(module))
39
- return { name, status: "pass" };
40
- try {
41
- const contribution = await module.getHealth();
42
- return { name, status: contribution.status, detail: contribution.detail };
43
- }
44
- catch (e) {
45
- return { name, status: "fail", detail: e?.message ?? "getHealth() threw" };
46
- }
47
- }));
48
- const status = moduleHealth.reduce((worst, m) => worse(worst, m.status), "pass");
49
- const report = {
50
- status,
51
- env: storm?.getEnvironment() ?? "unknown",
52
- node: process.version,
53
- uptimeSec: Math.floor(process.uptime()),
54
- timestamp: currentTimeMillies(),
55
- modules: moduleHealth,
56
- version: this.appVersion
57
- };
58
- // Consuming the response here with 503 is safe: ServerApi.call() checks
59
- // isConsumed() before it would otherwise send the 200 itself.
60
- if (status === "fail")
61
- response.json(503, report);
62
- return report;
63
- }
64
- }
65
- export const ServerApi_Health = new ServerApi_Health_Class();
66
- export default ServerApi_Health;
55
+ return report;
56
+ }, { printResponse: false });
67
57
  //# sourceMappingURL=get.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../../../src/main/app-backend/api/v1/utils/health/get.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../../../src/main/app-backend/api/v1/utils/health/get.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,4 @@
1
+ import { type TypedHandler } from "@intuitionrobotics/thunderstorm/backend";
1
2
  import { type ApiBinder_AssertAppVersion } from "../../../../../shared/force-upgrade.js";
2
- import { ApiResponse, ServerApi } from "../../../../modules/server/server-api.js";
3
- import { type ExpressRequest } from "../../../../utils/types.js";
4
- declare class ServerApi_AssertAppVersion extends ServerApi<ApiBinder_AssertAppVersion> {
5
- constructor();
6
- protected process(request: ExpressRequest, _response: ApiResponse, _queryParams: {}, _body: void): Promise<import("../../../../../shared/force-upgrade.js").UpgradeRequired>;
7
- }
8
- declare const _default: ServerApi_AssertAppVersion;
9
- export default _default;
3
+ export declare const assert: TypedHandler<ApiBinder_AssertAppVersion>;
10
4
  //# sourceMappingURL=assert.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../../../../../src/main/app-backend/api/v1/utils/version/assert.ts"],"names":[],"mappings":"AAsBA,OAAO,EACN,KAAK,0BAA0B,EAG/B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACN,WAAW,EACX,SAAS,EACT,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EAAC,KAAK,cAAc,EAAC,MAAM,4BAA4B,CAAC;AAG/D,cAAM,0BACL,SAAQ,SAAS,CAAC,0BAA0B,CAAC;;cAO7B,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI;CAGtG;;AAED,wBAAgD"}
1
+ {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../../../../../src/main/app-backend/api/v1/utils/version/assert.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAC,KAAK,YAAY,EAAsB,MAAM,yCAAyC,CAAC;AAC/F,OAAO,EAAC,KAAK,0BAA0B,EAAC,MAAM,wCAAwC,CAAC;AAEvF,eAAO,MAAM,MAAM,EAAE,YAAY,CAAC,0BAA0B,CAG3D,CAAC"}
@@ -18,19 +18,11 @@
18
18
  * See the License for the specific language governing permissions and
19
19
  * limitations under the License.
20
20
  */
21
- import { HeaderKey_PlatformName, HeaderKey_PlatformVersion } from "../../../../../shared/force-upgrade.js";
22
- import { ApiResponse, ServerApi } from "../../../../modules/server/server-api.js";
23
- import { HttpMethod } from "../../../../../shared/types.js";
24
- import { ForceUpgrade, } from "../../../../modules/ForceUpgrade.js";
25
- import {} from "../../../../utils/types.js";
26
- class ServerApi_AssertAppVersion extends ServerApi {
27
- constructor() {
28
- super(HttpMethod.GET, "assert");
29
- this.addHeaderToLog(HeaderKey_PlatformVersion, HeaderKey_PlatformName);
30
- }
31
- async process(request, _response, _queryParams, _body) {
32
- return ForceUpgrade.compareVersion(request);
33
- }
34
- }
35
- export default new ServerApi_AssertAppVersion();
21
+ import {} from "@intuitionrobotics/thunderstorm/backend";
22
+ import {} from "../../../../../shared/force-upgrade.js";
23
+ import { ForceUpgrade } from "../../../../modules/ForceUpgrade.js";
24
+ export const assert = async (req) => {
25
+ const request = req;
26
+ return ForceUpgrade.compareVersion(request);
27
+ };
36
28
  //# sourceMappingURL=assert.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"assert.js","sourceRoot":"","sources":["../../../../../../src/main/app-backend/api/v1/utils/version/assert.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAEN,sBAAsB,EACtB,yBAAyB,EACzB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACN,WAAW,EACX,SAAS,EACT,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAC,UAAU,EAAC,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAC,YAAY,GAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,EAAqB,MAAM,4BAA4B,CAAC;AAG/D,MAAM,0BACL,SAAQ,SAAqC;IAE7C;QACC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,cAAc,CAAC,yBAAyB,EAAE,sBAAsB,CAAC,CAAC;IACxE,CAAC;IAES,KAAK,CAAC,OAAO,CAAC,OAAuB,EAAE,SAAsB,EAAE,YAAgB,EAAE,KAAW;QACrG,OAAO,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;CACD;AAED,eAAe,IAAI,0BAA0B,EAAE,CAAC"}
1
+ {"version":3,"file":"assert.js","sourceRoot":"","sources":["../../../../../../src/main/app-backend/api/v1/utils/version/assert.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAwC,MAAM,yCAAyC,CAAC;AAC/F,OAAO,EAAiC,MAAM,wCAAwC,CAAC;AACvF,OAAO,EAAC,YAAY,EAAC,MAAM,qCAAqC,CAAC;AACjE,MAAM,CAAC,MAAM,MAAM,GAA6C,KAAK,EAAE,GAAG,EAAE,EAAE;IAC1E,MAAM,OAAO,GAAG,GAAqB,CAAC;IACtC,OAAO,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAChD,CAAC,CAAC"}
@@ -2,7 +2,7 @@ import { BadImplementationException, BeLogged, LogClient, LogClient_Function, Lo
2
2
  import { FirebaseFunction } from '@intuitionrobotics/firebase/backend-functions';
3
3
  import {} from "../modules/server/HttpServer.js";
4
4
  import { ApiFunction } from "../modules/server/ApiFunction.js";
5
- import { ServerApi } from "../modules/server/server-api.js";
5
+ import { apiDebug } from "../modules/server/server-api.js";
6
6
  import { BaseStorm } from "./BaseStorm.js";
7
7
  import {} from "express";
8
8
  import { DefaultApiErrorMessageComposer } from "../modules/server/server-errors.js";
@@ -57,7 +57,7 @@ export class Storm extends BaseStorm {
57
57
  }
58
58
  init() {
59
59
  BeLogged.addClient(process.env.GCLOUD_PROJECT && process.env.FUNCTIONS_EMULATOR ? LogClient_Terminal : this.logClient);
60
- ServerApi.isDebug = !!this.config?.isDebug;
60
+ apiDebug.enabled = !!this.config?.isDebug;
61
61
  // The backend NEVER eagerly initializes modules (deliberately not super.init()).
62
62
  // Registration only wires references; module resources resolve lazily on first
63
63
  // use, so a function's container only allocates what its handler actually touches.
@@ -1 +1 @@
1
- {"version":3,"file":"Storm.js","sourceRoot":"","sources":["../../../src/main/app-backend/core/Storm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Storm.js","sourceRoot":"","sources":["../../../src/main/app-backend/core/Storm.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import compression from 'compression';
2
2
  import cors from 'cors';
3
3
  import { addItemToArray, LogLevel, Module } from "@intuitionrobotics/ts-common";
4
- import { ServerApi } from "./server-api.js";
4
+ import { apiDebug } from "./server-api.js";
5
5
  import { ApiException } from "../../exceptions.js";
6
6
  import express from "express";
7
7
  import { HeaderKey_FunctionExecutionId, HeaderKey_JWT } from '../_imports.js';
@@ -52,7 +52,7 @@ export class HttpServer_Class extends Module {
52
52
  // infra, deliberately eager (and cheap), unlike app modules which must not
53
53
  // override the (never-called) init().
54
54
  setup() {
55
- this.setMinLevel(ServerApi.isDebug ? LogLevel.Verbose : LogLevel.Info);
55
+ this.setMinLevel(apiDebug.enabled ? LogLevel.Verbose : LogLevel.Info);
56
56
  if (this.config.baseUrl)
57
57
  this.config.baseUrl = HttpServer_Class.normalizeBaseUrl(this.config.baseUrl);
58
58
  this.express.use((req, _res, next) => {
@@ -1 +1 @@
1
- {"version":3,"file":"HttpServer.js","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/server/HttpServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HttpServer.js","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/server/HttpServer.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { type ErrorRequestHandler } from "express";
3
3
  * The single app-level error handler for raw (`handler()`-wrapped) endpoints.
4
4
  * Register it LAST, after the router (see `ApiFunction`). It routes the error
5
5
  * through the shared `composeApiError` pipeline, then writes the response with
6
- * the same shape + `ServerApi.isDebug` gating as `ApiResponse.serverError` /
6
+ * the same shape + `apiDebug.enabled` gating as `ApiResponse.serverError` /
7
7
  * `ApiResponse.exception` (server-api.ts:428-440).
8
8
  *
9
9
  * Legacy `ServerApi` endpoints never reach here (they catch internally), so
@@ -2,7 +2,7 @@ import { Logger } from "@intuitionrobotics/ts-common";
2
2
  import {} from "express";
3
3
  import { parse } from "url";
4
4
  import { composeApiError } from "./api-error.js";
5
- import { ServerApi } from "./server-api.js";
5
+ import { apiDebug } from "./server-api.js";
6
6
  import { HttpMethod } from "../../../shared/types.js";
7
7
  const logger = new Logger("terminalErrorHandler");
8
8
  /**
@@ -24,7 +24,7 @@ function requestDataFrom(req) {
24
24
  * The single app-level error handler for raw (`handler()`-wrapped) endpoints.
25
25
  * Register it LAST, after the router (see `ApiFunction`). It routes the error
26
26
  * through the shared `composeApiError` pipeline, then writes the response with
27
- * the same shape + `ServerApi.isDebug` gating as `ApiResponse.serverError` /
27
+ * the same shape + `apiDebug.enabled` gating as `ApiResponse.serverError` /
28
28
  * `ApiResponse.exception` (server-api.ts:428-440).
29
29
  *
30
30
  * Legacy `ServerApi` endpoints never reach here (they catch internally), so
@@ -38,13 +38,13 @@ export function terminalErrorHandler() {
38
38
  return next(err);
39
39
  const apiException = await composeApiError(err, requestDataFrom(req), logger);
40
40
  const responseBody = apiException.responseBody;
41
- if (!ServerApi.isDebug)
41
+ if (!apiDebug.enabled)
42
42
  delete responseBody.debugMessage;
43
43
  if (apiException.responseCode === 500) {
44
44
  const cause = apiException.cause;
45
45
  const stack = cause ? cause.stack : apiException.stack;
46
46
  const message = (cause ? cause.message : apiException.message) || "";
47
- res.status(500).set("Content-Type", "text/plain").send(ServerApi.isDebug && stack ? stack : message);
47
+ res.status(500).set("Content-Type", "text/plain").send(apiDebug.enabled && stack ? stack : message);
48
48
  return;
49
49
  }
50
50
  res.status(apiException.responseCode).set("Content-Type", "application/json").send(JSON.stringify(responseBody, null, 2));
@@ -1 +1 @@
1
- {"version":3,"file":"app-middleware.js","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/server/app-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAwC,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAC,KAAK,EAAC,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,SAAS,EAAuB,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAC,UAAU,EAAC,MAAM,0BAA0B,CAAC;AAEpD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAElD;;;;GAIG;AACH,SAAS,eAAe,CAAC,GAAY;IACjC,OAAO;QACH,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAe;QAC9E,WAAW,EAAE,GAAG,CAAC,IAAI;QACrB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK;QACjC,IAAI,EAAE,GAAG,CAAC,IAAI;KACjB,CAAC;AACN,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB;IAChC,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACjC,sEAAsE;QACtE,8DAA8D;QAC9D,IAAI,GAAG,CAAC,WAAW;YACf,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QAErB,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAC9E,MAAM,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,OAAO;YAClB,OAAO,YAAY,CAAC,YAAY,CAAC;QAErC,IAAI,YAAY,CAAC,YAAY,KAAK,GAAG,EAAE,CAAC;YACpC,MAAM,KAAK,GAAI,YAA0C,CAAC,KAAK,CAAC;YAChE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;YACvD,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACrE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACrG,OAAO;QACX,CAAC;QAED,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9H,CAAC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"app-middleware.js","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/server/app-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAwC,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAC,KAAK,EAAC,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAC,QAAQ,EAAuB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAC,UAAU,EAAC,MAAM,0BAA0B,CAAC;AAEpD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAElD;;;;GAIG;AACH,SAAS,eAAe,CAAC,GAAY;IACjC,OAAO;QACH,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAe;QAC9E,WAAW,EAAE,GAAG,CAAC,IAAI;QACrB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK;QACjC,IAAI,EAAE,GAAG,CAAC,IAAI;KACjB,CAAC;AACN,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB;IAChC,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACjC,sEAAsE;QACtE,8DAA8D;QAC9D,IAAI,GAAG,CAAC,WAAW;YACf,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QAErB,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAC9E,MAAM,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO;YACjB,OAAO,YAAY,CAAC,YAAY,CAAC;QAErC,IAAI,YAAY,CAAC,YAAY,KAAK,GAAG,EAAE,CAAC;YACpC,MAAM,KAAK,GAAI,YAA0C,CAAC,KAAK,CAAC;YAChE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;YACvD,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACrE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACpG,OAAO;QACX,CAAC;QAED,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9H,CAAC,CAAC;AACN,CAAC"}
@@ -26,4 +26,12 @@ export type HandlerOptions = {
26
26
  * `res.headersSent`, autoSend is a no-op. Rule: return a value XOR write `res`.
27
27
  */
28
28
  export declare function handler<Binder extends ApiTypeBinder<any, any, any, any>>(fn: TypedHandler<Binder>, opts?: HandlerOptions): RequestHandler;
29
+ /**
30
+ * A redirect endpoint as an Express `RequestHandler` — the functional
31
+ * replacement for the old `ServerApi_Redirect`. Appends the incoming query
32
+ * params to the target URL (same shape the class produced) and redirects.
33
+ *
34
+ * router.all("/old-path", redirectHandler(301, "/api/v1/new-path"));
35
+ */
36
+ export declare function redirectHandler(responseCode: number, redirectUrl: string): RequestHandler;
29
37
  //# sourceMappingURL=handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/server/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,QAAQ,EAAC,MAAM,SAAS,CAAC;AAC5F,OAAO,EAAC,KAAK,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAI5D;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,MAAM,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IACrE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;AAE/F;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,MAAM,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IACrE,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;AAErI,MAAM,MAAM,cAAc,GAAG;IAIzB,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CAAC,MAAM,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACpE,EAAE,EAAE,YAAY,CAAC,MAAM,CAAC,EACxB,IAAI,GAAE,cAAmB,GAC1B,cAAc,CAOhB"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/server/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,QAAQ,EAAC,MAAM,SAAS,CAAC;AAC5F,OAAO,EAAC,KAAK,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAI5D;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,MAAM,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IACrE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;AAE/F;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,MAAM,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IACrE,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;AAErI,MAAM,MAAM,cAAc,GAAG;IAIzB,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CAAC,MAAM,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACpE,EAAE,EAAE,YAAY,CAAC,MAAM,CAAC,EACxB,IAAI,GAAE,cAAmB,GAC1B,cAAc,CAOhB;AAgCD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,cAAc,CAOzF"}
@@ -18,7 +18,7 @@ export function handler(fn, opts = {}) {
18
18
  return (req, res, next) => {
19
19
  Promise.resolve()
20
20
  .then(() => fn(req, res, next))
21
- .then(value => autoSend(res, value, opts))
21
+ .then(value => autoSend(req, res, value, opts))
22
22
  .catch(next);
23
23
  };
24
24
  }
@@ -27,7 +27,7 @@ export function handler(fn, opts = {}) {
27
27
  * (server-api.ts:170-187) — including the 2-space JSON formatting and the
28
28
  * case-insensitive "<html" sniff — so migrated endpoints stay byte-identical.
29
29
  */
30
- function autoSend(res, value, opts) {
30
+ function autoSend(req, res, value, opts) {
31
31
  if (res.headersSent)
32
32
  return; // handler wrote the response itself (stream/SSE/redirect/manual res.*)
33
33
  if (value === undefined || value === null) {
@@ -35,7 +35,7 @@ function autoSend(res, value, opts) {
35
35
  return;
36
36
  }
37
37
  if (opts.printResponse !== false)
38
- logger.logVerbose(" -- Response:", value);
38
+ logger.logVerbose(`${req.method} ${req.originalUrl} -- Response:`, value);
39
39
  if (typeof value === "object") {
40
40
  res.status(200).set("Content-Type", "application/json").send(JSON.stringify(value, null, 2));
41
41
  return;
@@ -46,4 +46,19 @@ function autoSend(res, value, opts) {
46
46
  }
47
47
  res.status(200).set("Content-Type", "text/plain").send(String(value));
48
48
  }
49
+ /**
50
+ * A redirect endpoint as an Express `RequestHandler` — the functional
51
+ * replacement for the old `ServerApi_Redirect`. Appends the incoming query
52
+ * params to the target URL (same shape the class produced) and redirects.
53
+ *
54
+ * router.all("/old-path", redirectHandler(301, "/api/v1/new-path"));
55
+ */
56
+ export function redirectHandler(responseCode, redirectUrl) {
57
+ return (req, res) => {
58
+ const q = (req.query ?? {});
59
+ const keys = Object.keys(q);
60
+ const query = keys.length ? keys.reduce((c, k) => `${c}&${k}=${q[k]}`, "?") : "";
61
+ res.redirect(responseCode, `${redirectUrl}${query}`);
62
+ };
63
+ }
49
64
  //# sourceMappingURL=handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/server/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAqE,MAAM,SAAS,CAAC;AAC5F,OAAO,EAAoB,MAAM,0BAA0B,CAAC;AAE5D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC;AAuBzC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,OAAO,CACnB,EAAwB,EACxB,OAAuB,EAAE;IAEzB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACtB,OAAO,CAAC,OAAO,EAAE;aACZ,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAsC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;aACjE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;aACzC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,GAAa,EAAE,KAAc,EAAE,IAAoB;IACjE,IAAI,GAAG,CAAC,WAAW;QACf,OAAO,CAAG,uEAAuE;IAErF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACxC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACtB,OAAO;IACX,CAAC;IAED,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK;QAC5B,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,KAAe,CAAC,CAAC;IAExD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7F,OAAO;IACX,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,OAAO;IACX,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1E,CAAC"}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/server/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAqE,MAAM,SAAS,CAAC;AAC5F,OAAO,EAAoB,MAAM,0BAA0B,CAAC;AAE5D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC;AAuBzC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,OAAO,CACnB,EAAwB,EACxB,OAAuB,EAAE;IAEzB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACtB,OAAO,CAAC,OAAO,EAAE;aACZ,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAsC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;aACjE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;aAC9C,KAAK,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,GAAY,EAAE,GAAa,EAAE,KAAc,EAAE,IAAoB;IAC/E,IAAI,GAAG,CAAC,WAAW;QACf,OAAO,CAAG,uEAAuE;IAErF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACxC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACtB,OAAO;IACX,CAAC;IAED,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK;QAC5B,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,eAAe,EAAE,KAAe,CAAC,CAAC;IAExF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7F,OAAO;IACX,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,OAAO;IACX,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,YAAoB,EAAE,WAAmB;IACrE,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAChB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAA2B,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,WAAW,GAAG,KAAK,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC;AACN,CAAC"}
@@ -1,4 +1,6 @@
1
1
  import { type Request, type RequestHandler, type Response } from "express";
2
+ import { type ServerApi_Middleware } from "./HttpServer.js";
3
+ import { ApiResponse } from "./server-api.js";
2
4
  /**
3
5
  * The auth logic itself (session/JWT validation + scope checks) lives in the
4
6
  * CONSUMER (e.g. `AccountModule.validateSession` / `KasperoProxy.validateRequest`),
@@ -21,4 +23,21 @@ export type AuthValidator = (req: Request, scopes: string[], res: Response) => P
21
23
  * level (`router.use(requireAuth())`).
22
24
  */
23
25
  export declare function makeRequireAuth(validator: AuthValidator): (...scopes: string[]) => RequestHandler;
26
+ /**
27
+ * Adapt a raw Express `res` to the `ApiResponse` a legacy `ServerApi_Middleware`
28
+ * expects. ApiResponse is now a thin res-backed helper, so this hands the gate a
29
+ * real, fully-functional one (setHeader/setHeaders for JWT refresh, redirect for
30
+ * SAML, json/text/… all delegate to `res`).
31
+ */
32
+ export declare const headerSink: (res: Response) => ApiResponse;
33
+ /**
34
+ * Wrap a legacy `ServerApi_Middleware` `(request, data, response, scopes) => ctx`
35
+ * as Express middleware — so existing authz/proxy gates run at the route site
36
+ * without rewriting their logic (no fresh security review). Any returned context
37
+ * object is merged onto `req` (e.g. `req.account`); rejections flow to the
38
+ * app-level terminal error handler via `next(err)`.
39
+ *
40
+ * router.post("/x", useMiddleware(RemoteProxy.Middleware), handler(fn));
41
+ */
42
+ export declare const useMiddleware: (mw: ServerApi_Middleware, ...scopes: string[]) => RequestHandler;
24
43
  //# sourceMappingURL=requireAuth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"requireAuth.d.ts","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/server/requireAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,QAAQ,EAAC,MAAM,SAAS,CAAC;AAE5F;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAE5G;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,aAAa,IAC5C,GAAG,QAAQ,MAAM,EAAE,KAAG,cAAc,CAU/C"}
1
+ {"version":3,"file":"requireAuth.d.ts","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/server/requireAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,QAAQ,EAAC,MAAM,SAAS,CAAC;AAE5F,OAAO,EAAC,KAAK,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAC,WAAW,EAAuB,MAAM,iBAAiB,CAAC;AAIlE;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAE5G;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,aAAa,IAC5C,GAAG,QAAQ,MAAM,EAAE,KAAG,cAAc,CAU/C;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,QAAQ,KAAG,WAAiE,CAAC;AAE7G;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GAAI,IAAI,oBAAoB,EAAE,GAAG,QAAQ,MAAM,EAAE,KAAG,cAgBzE,CAAC"}
@@ -1,4 +1,9 @@
1
1
  import {} from "express";
2
+ import { parse } from "url";
3
+ import {} from "./HttpServer.js";
4
+ import { ApiResponse } from "./server-api.js";
5
+ import { HttpMethod } from "../../../shared/types.js";
6
+ import {} from "../../utils/types.js";
2
7
  /**
3
8
  * Build a `requireAuth(...scopes)` middleware from a consumer auth validator.
4
9
  *
@@ -20,4 +25,37 @@ export function makeRequireAuth(validator) {
20
25
  .catch(next);
21
26
  };
22
27
  }
28
+ /**
29
+ * Adapt a raw Express `res` to the `ApiResponse` a legacy `ServerApi_Middleware`
30
+ * expects. ApiResponse is now a thin res-backed helper, so this hands the gate a
31
+ * real, fully-functional one (setHeader/setHeaders for JWT refresh, redirect for
32
+ * SAML, json/text/… all delegate to `res`).
33
+ */
34
+ export const headerSink = (res) => new ApiResponse(res);
35
+ /**
36
+ * Wrap a legacy `ServerApi_Middleware` `(request, data, response, scopes) => ctx`
37
+ * as Express middleware — so existing authz/proxy gates run at the route site
38
+ * without rewriting their logic (no fresh security review). Any returned context
39
+ * object is merged onto `req` (e.g. `req.account`); rejections flow to the
40
+ * app-level terminal error handler via `next(err)`.
41
+ *
42
+ * router.post("/x", useMiddleware(RemoteProxy.Middleware), handler(fn));
43
+ */
44
+ export const useMiddleware = (mw, ...scopes) => (req, res, next) => {
45
+ const data = {
46
+ method: req.method.toLowerCase(),
47
+ originalUrl: req.originalUrl,
48
+ headers: req.headers,
49
+ url: req.url,
50
+ query: parse(req.url, true).query,
51
+ body: req.body
52
+ };
53
+ Promise.resolve(mw(req, data, headerSink(res), scopes))
54
+ .then(ctx => {
55
+ if (ctx && typeof ctx === "object")
56
+ Object.assign(req, ctx);
57
+ next();
58
+ })
59
+ .catch(next);
60
+ };
23
61
  //# sourceMappingURL=requireAuth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"requireAuth.js","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/server/requireAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqE,MAAM,SAAS,CAAC;AAc5F;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,SAAwB;IACpD,OAAO,CAAC,GAAG,MAAgB,EAAkB,EAAE,CAC3C,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAChD,OAAO,CAAC,OAAO,EAAE;aACZ,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;aACvC,IAAI,CAAC,OAAO,CAAC,EAAE;YACZ,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;YACtB,IAAI,EAAE,CAAC;QACX,CAAC,CAAC;aACD,KAAK,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC;AACV,CAAC"}
1
+ {"version":3,"file":"requireAuth.js","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/server/requireAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqE,MAAM,SAAS,CAAC;AAC5F,OAAO,EAAC,KAAK,EAAC,MAAM,KAAK,CAAC;AAC1B,OAAO,EAA2B,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAC,WAAW,EAAuB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAC,UAAU,EAAC,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAA2C,MAAM,sBAAsB,CAAC;AAc/E;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,SAAwB;IACpD,OAAO,CAAC,GAAG,MAAgB,EAAkB,EAAE,CAC3C,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAChD,OAAO,CAAC,OAAO,EAAE;aACZ,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;aACvC,IAAI,CAAC,OAAO,CAAC,EAAE;YACZ,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;YACtB,IAAI,EAAE,CAAC;QACX,CAAC,CAAC;aACD,KAAK,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC;AACV,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAa,EAAe,EAAE,CAAC,IAAI,WAAW,CAAC,GAAiC,CAAC,CAAC;AAE7G;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAwB,EAAE,GAAG,MAAgB,EAAkB,EAAE,CAC3F,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IAChD,MAAM,IAAI,GAAoB;QAC1B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,EAAgB;QAC9C,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK;QACjC,IAAI,EAAE,GAAG,CAAC,IAAI;KACjB,CAAC;IACF,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,GAAgC,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;SAC/E,IAAI,CAAC,GAAG,CAAC,EAAE;QACR,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5D,IAAI,EAAE,CAAC;IACX,CAAC,CAAC;SACD,KAAK,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC,CAAC"}
@@ -1,10 +1,8 @@
1
- import { Logger, type ObjectTS, type ValidatorTypeResolver } from "@intuitionrobotics/ts-common";
2
1
  import { Stream } from "stream";
3
- import { type ServerApi_Middleware } from "./HttpServer.js";
4
2
  import { type IncomingHttpHeaders } from "http";
5
- import { type ApiTypeBinder, HttpMethod, type QueryParams } from "../../../shared/types.js";
3
+ import { type HttpMethod } from "../../../shared/types.js";
6
4
  import { ApiException } from "../../exceptions.js";
7
- import { type ExpressRequest, type ExpressResponse } from "../../utils/types.js";
5
+ import { type ExpressResponse } from "../../utils/types.js";
8
6
  export type HttpRequestData = {
9
7
  originalUrl: string;
10
8
  headers: IncomingHttpHeaders;
@@ -13,51 +11,13 @@ export type HttpRequestData = {
13
11
  body: any;
14
12
  method: HttpMethod;
15
13
  };
16
- export declare abstract class ServerApi<Binder extends ApiTypeBinder<string, R, B, P>, R = Binder["response"], B = Binder["body"], P extends QueryParams = Binder["queryParams"]> extends Logger {
17
- static isDebug: boolean;
18
- private printResponse;
19
- readonly headersToLog: string[];
20
- readonly method: HttpMethod;
21
- readonly relativePath: string;
22
- private middlewares?;
23
- private bodyValidator?;
24
- private queryValidator?;
25
- private scopes;
26
- protected constructor(method: HttpMethod, relativePath?: string, tag?: string);
27
- private _handler?;
28
- get handler(): (req: ExpressRequest, res: ExpressResponse, next?: (err?: any) => void) => Promise<void>;
29
- shouldPrintResponse(): boolean;
30
- setMiddlewares(...middlewares: ServerApi_Middleware[]): this;
31
- addMiddlewares(...middlewares: ServerApi_Middleware[]): this;
32
- setScopes(...scopes: string[]): this;
33
- getScopes(): string[];
34
- addHeaderToLog(...headersToLog: string[]): void;
35
- setBodyValidator(bodyValidator: ValidatorTypeResolver<B>): void;
36
- setQueryValidator(queryValidator: ValidatorTypeResolver<P>): void;
37
- asProxy(): ServerApi<Binder>;
38
- dontPrintResponse(): void;
39
- setMaxResponsePrintSize(printResponseMaxSizeBytes: number): void;
40
- assertProperty: <T extends object, K extends keyof T = keyof T>(instance: T, key: K | K[], statusCode?: number, check?: string | ((propValue: T[K]) => void)) => void;
41
- call(req: ExpressRequest, res: ExpressResponse): Promise<void>;
42
- private applyMiddlewares;
43
- protected abstract process(request: ExpressRequest, response: ApiResponse, queryParams: P, body: B, context: ObjectTS): Promise<R>;
44
- }
45
- export declare class ServerApi_Proxy<Binder extends ApiTypeBinder<string, R, B, P>, R = Binder["response"], B = Binder["body"], P extends QueryParams = Binder["queryParams"]> extends ServerApi<Binder> {
46
- private readonly api;
47
- constructor(api: ServerApi<any>);
48
- protected process(request: ExpressRequest, response: ApiResponse, queryParams: P, body: B, context: ObjectTS): Promise<R>;
49
- }
50
- export declare class ServerApi_Redirect extends ServerApi<any> {
51
- private readonly responseCode;
52
- private readonly redirectUrl;
53
- constructor(apiName: string, responseCode: number, redirectUrl: string);
54
- protected process(request: ExpressRequest, response: ApiResponse, queryParams: QueryParams, _body: any): Promise<void>;
55
- }
14
+ export declare const apiDebug: {
15
+ enabled: boolean;
16
+ };
56
17
  export declare class ApiResponse {
57
- private api;
58
18
  private readonly res;
59
19
  private consumed;
60
- constructor(api: ServerApi<any>, res: ExpressResponse);
20
+ constructor(res: ExpressResponse);
61
21
  isConsumed(): boolean;
62
22
  private consume;
63
23
  stream(responseCode: number, stream: Stream, headers?: any): void;
@@ -1 +1 @@
1
- {"version":3,"file":"server-api.d.ts","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/server/server-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-api.d.ts","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/server/server-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAC,KAAK,mBAAmB,EAAC,MAAM,MAAM,CAAC;AAE9C,OAAO,EAAC,KAAK,UAAU,EAAC,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAC,KAAK,eAAe,EAAC,MAAM,sBAAsB,CAAC;AAI1D,MAAM,MAAM,eAAe,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,mBAAmB,CAAA;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,GAAG,CAAA;IACV,IAAI,EAAE,GAAG,CAAA;IACT,MAAM,EAAE,UAAU,CAAA;CACrB,CAAA;AAKD,eAAO,MAAM,QAAQ;;CAAmB,CAAC;AAOzC,qBAAa,WAAW;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,GAAG,EAAE,eAAe;IAIzB,UAAU,IAAI,OAAO;IAI5B,OAAO,CAAC,OAAO;IASf,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;IAY1D,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,aAAa;IAOd,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;IAK/C,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG;IAO5D,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG;IAO5D,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG;IAIrE,OAAO,CAAC,KAAK;IAOb,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;IAWnE,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAI9B,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAI5D,SAAS,CAAC,SAAS,EAAE,MAAM;IAI3B,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAM1C,SAAS,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,GAAG;IAQhD,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,EAAE,OAAO,CAAC,EAAE,GAAG;CAK9D"}