@intuitionrobotics/thunderstorm 2.0.11 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app-backend/core/Storm.d.ts +5 -1
- package/dist/app-backend/core/Storm.d.ts.map +1 -1
- package/dist/app-backend/core/Storm.js +58 -13
- package/dist/app-backend/core/Storm.js.map +1 -1
- package/dist/app-backend/modules/SlackModule.d.ts +2 -3
- package/dist/app-backend/modules/SlackModule.d.ts.map +1 -1
- package/dist/app-backend/modules/SlackModule.js +13 -8
- package/dist/app-backend/modules/SlackModule.js.map +1 -1
- package/dist/app-backend/modules/http/AxiosHttpModule.d.ts +0 -1
- package/dist/app-backend/modules/http/AxiosHttpModule.d.ts.map +1 -1
- package/dist/app-backend/modules/http/AxiosHttpModule.js +2 -10
- package/dist/app-backend/modules/http/AxiosHttpModule.js.map +1 -1
- package/dist/app-backend/modules/proxy/RemoteProxy.d.ts +4 -3
- package/dist/app-backend/modules/proxy/RemoteProxy.d.ts.map +1 -1
- package/dist/app-backend/modules/proxy/RemoteProxy.js +10 -13
- package/dist/app-backend/modules/proxy/RemoteProxy.js.map +1 -1
- package/dist/app-backend/modules/proxy/RemoteProxyCaller.d.ts +2 -1
- package/dist/app-backend/modules/proxy/RemoteProxyCaller.d.ts.map +1 -1
- package/dist/app-backend/modules/proxy/RemoteProxyCaller.js +21 -14
- package/dist/app-backend/modules/proxy/RemoteProxyCaller.js.map +1 -1
- package/dist/app-backend/modules/server/ApiFunction.d.ts +56 -0
- package/dist/app-backend/modules/server/ApiFunction.d.ts.map +1 -0
- package/dist/app-backend/modules/server/ApiFunction.js +68 -0
- package/dist/app-backend/modules/server/ApiFunction.js.map +1 -0
- package/dist/app-backend/modules/server/HttpServer.d.ts +16 -5
- package/dist/app-backend/modules/server/HttpServer.d.ts.map +1 -1
- package/dist/app-backend/modules/server/HttpServer.js +54 -26
- package/dist/app-backend/modules/server/HttpServer.js.map +1 -1
- package/dist/backend.d.ts +1 -0
- package/dist/backend.d.ts.map +1 -1
- package/dist/backend.js +1 -0
- package/dist/backend.js.map +1 -1
- package/dist/shared/BaseHttpModule.d.ts +6 -3
- package/dist/shared/BaseHttpModule.d.ts.map +1 -1
- package/dist/shared/BaseHttpModule.js +15 -4
- package/dist/shared/BaseHttpModule.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { LogClient } from "@intuitionrobotics/ts-common";
|
|
2
|
+
import { type DeployableFunction, type FirebaseFunctionOptions } from '@intuitionrobotics/firebase/backend-functions';
|
|
2
3
|
import { type HttpErrorHandler } from "../modules/server/HttpServer.js";
|
|
3
4
|
import { BaseStorm } from "./BaseStorm.js";
|
|
4
5
|
import { type Express, type Router } from "express";
|
|
@@ -10,18 +11,21 @@ export declare class Storm extends BaseStorm {
|
|
|
10
11
|
private logClient;
|
|
11
12
|
private onDestroy?;
|
|
12
13
|
private onStart?;
|
|
14
|
+
private apiFunctionOptions;
|
|
13
15
|
errorMessageComposer: HttpErrorHandler;
|
|
14
16
|
constructor();
|
|
15
17
|
setErrorMessageComposer(errorMessageComposer: HttpErrorHandler): this;
|
|
16
18
|
setApp(app: Express): this;
|
|
19
|
+
setApiFunctionOptions(options: FirebaseFunctionOptions): this;
|
|
17
20
|
setLogClient(logClient: LogClient): this;
|
|
18
21
|
getLogClient(): LogClient;
|
|
19
22
|
setOnDestroy(onDestroy?: () => Promise<void>): this;
|
|
20
23
|
setOnStart(onStart?: () => Promise<void>): this;
|
|
21
24
|
static getInstance(): Storm;
|
|
22
25
|
init(): this;
|
|
26
|
+
private assertNoLegacyModuleInit;
|
|
23
27
|
setRoutes(routes: Router): this;
|
|
24
28
|
setInitialRoutePath(initialPath: string): this;
|
|
25
|
-
build(onStarted?: () => Promise<void>):
|
|
29
|
+
build(onStarted?: () => Promise<void>): Record<string, DeployableFunction>;
|
|
26
30
|
}
|
|
27
31
|
//# sourceMappingURL=Storm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Storm.d.ts","sourceRoot":"","sources":["../../../src/main/app-backend/core/Storm.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Storm.d.ts","sourceRoot":"","sources":["../../../src/main/app-backend/core/Storm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,SAAS,EAAiD,MAAM,8BAA8B,CAAC;AAC7I,OAAO,EACH,KAAK,kBAAkB,EAEvB,KAAK,uBAAuB,EAC/B,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAC,KAAK,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AAGtE,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAC,KAAK,OAAO,EAAE,KAAK,MAAM,EAAC,MAAM,SAAS,CAAC;AAIlD,qBAAa,KACT,SAAQ,SAAS;IAGjB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,OAAO,CAAC,CAAU;IAC1B,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,SAAS,CAAC,CAAsB;IACxC,OAAO,CAAC,OAAO,CAAC,CAAsB;IACtC,OAAO,CAAC,kBAAkB,CAA+B;IAEzD,oBAAoB,EAAE,gBAAgB,CAAoC;;IAOnE,uBAAuB,CAAC,oBAAoB,EAAE,gBAAgB;IAK9D,MAAM,CAAC,GAAG,EAAE,OAAO;IAQnB,qBAAqB,CAAC,OAAO,EAAE,uBAAuB;IAKtD,YAAY,CAAC,SAAS,EAAE,SAAS;IAKjC,YAAY;IAIZ,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAK5C,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAK/C,MAAM,CAAC,WAAW,IAAI,KAAK;IAI3B,IAAI;IAiBJ,OAAO,CAAC,wBAAwB;IA2BhC,SAAS,CAAC,MAAM,EAAE,MAAM;IAKxB,mBAAmB,CAAC,WAAW,EAAE,MAAM;IAKvC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;CAgCxC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { BeLogged, LogClient, LogClient_Function, LogClient_Terminal, Module } from "@intuitionrobotics/ts-common";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { BadImplementationException, BeLogged, LogClient, LogClient_Function, LogClient_Terminal, Module } from "@intuitionrobotics/ts-common";
|
|
2
|
+
import { FirebaseFunction } from '@intuitionrobotics/firebase/backend-functions';
|
|
3
|
+
import {} from "../modules/server/HttpServer.js";
|
|
4
|
+
import { ApiFunction } from "../modules/server/ApiFunction.js";
|
|
4
5
|
import { ServerApi } from "../modules/server/server-api.js";
|
|
5
6
|
import { BaseStorm } from "./BaseStorm.js";
|
|
6
|
-
import express from "express";
|
|
7
7
|
import {} from "express";
|
|
8
8
|
import { DefaultApiErrorMessageComposer } from "../modules/server/server-errors.js";
|
|
9
9
|
import { FirebaseModule } from "@intuitionrobotics/firebase/backend";
|
|
@@ -17,6 +17,7 @@ export class Storm extends BaseStorm {
|
|
|
17
17
|
logClient = LogClient_Function;
|
|
18
18
|
onDestroy;
|
|
19
19
|
onStart;
|
|
20
|
+
apiFunctionOptions = {};
|
|
20
21
|
errorMessageComposer = DefaultApiErrorMessageComposer();
|
|
21
22
|
constructor() {
|
|
22
23
|
super();
|
|
@@ -30,6 +31,13 @@ export class Storm extends BaseStorm {
|
|
|
30
31
|
this.express = app;
|
|
31
32
|
return this;
|
|
32
33
|
}
|
|
34
|
+
// Runtime options (memory, region, generation, ...) for the Express "api"
|
|
35
|
+
// HTTPS function that Storm builds internally. Replaces the old mutable
|
|
36
|
+
// static Firebase_ExpressFunction.config.
|
|
37
|
+
setApiFunctionOptions(options) {
|
|
38
|
+
this.apiFunctionOptions = options;
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
33
41
|
setLogClient(logClient) {
|
|
34
42
|
this.logClient = logClient;
|
|
35
43
|
return this;
|
|
@@ -51,9 +59,38 @@ export class Storm extends BaseStorm {
|
|
|
51
59
|
init() {
|
|
52
60
|
BeLogged.addClient(process.env.GCLOUD_PROJECT && process.env.FUNCTIONS_EMULATOR ? LogClient_Terminal : this.logClient);
|
|
53
61
|
ServerApi.isDebug = !!this.config?.isDebug;
|
|
54
|
-
super.init()
|
|
62
|
+
// The backend NEVER eagerly initializes modules (deliberately not super.init()).
|
|
63
|
+
// Registration only wires references; module resources resolve lazily on first
|
|
64
|
+
// use, so a function's container only allocates what its handler actually touches.
|
|
65
|
+
this.modules.forEach(module => module.setManager(this));
|
|
66
|
+
this.assertNoLegacyModuleInit();
|
|
67
|
+
this.modules.forEach(module => module.validate());
|
|
55
68
|
return this;
|
|
56
69
|
}
|
|
70
|
+
// Module.init() is never called on the backend — a module overriding it is broken
|
|
71
|
+
// by definition (its setup would silently never run). Fail loudly at build time,
|
|
72
|
+
// with an opt-in bridge for consumers mid-migration.
|
|
73
|
+
assertNoLegacyModuleInit() {
|
|
74
|
+
// @ts-expect-error init is protected; comparing prototype slots to detect overrides
|
|
75
|
+
const offenders = this.modules.filter(module => module.init !== Module.prototype.init);
|
|
76
|
+
if (offenders.length === 0)
|
|
77
|
+
return;
|
|
78
|
+
const names = offenders.map(module => module.getName()).join(", ");
|
|
79
|
+
if (process.env.THUNDERSTORM_LEGACY_MODULE_INIT === "true") {
|
|
80
|
+
this.logWarning(`LEGACY init() bridge active — eagerly initializing: [${names}]. ` +
|
|
81
|
+
`Migrate these modules to constructor/lazy getters and drop init() (run 'thunderstorm-codemod check-module-init').`);
|
|
82
|
+
offenders.forEach(module => {
|
|
83
|
+
// @ts-expect-error TS struggles with this dynamic typing
|
|
84
|
+
module.init();
|
|
85
|
+
// @ts-expect-error TS struggles with this dynamic typing
|
|
86
|
+
module.initiated = true;
|
|
87
|
+
});
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
throw new BadImplementationException(`Backend modules must not override init() — Storm never calls it, so their setup would silently never run. ` +
|
|
91
|
+
`Offenders: [${names}]. Move the work to the constructor (trivial, config-independent) or lazy getters (anything allocating), ` +
|
|
92
|
+
`or set THUNDERSTORM_LEGACY_MODULE_INIT=true as a temporary bridge. See docs/migrating-to-v2.md.`);
|
|
93
|
+
}
|
|
57
94
|
// The caller passes a fully-built Express Router; Storm wires it onto the
|
|
58
95
|
// HttpServer's express app at build() time.
|
|
59
96
|
setRoutes(routes) {
|
|
@@ -65,19 +102,27 @@ export class Storm extends BaseStorm {
|
|
|
65
102
|
return this;
|
|
66
103
|
}
|
|
67
104
|
build(onStarted) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
105
|
+
// The Express API is a regular module now (ApiFunction) — Storm no longer
|
|
106
|
+
// hand-builds it. When none is registered, an implicit default named "api"
|
|
107
|
+
// is created from the legacy builder methods (setApp/setRoutes/
|
|
108
|
+
// setInitialRoutePath/setApiFunctionOptions); registering ANY ApiFunction
|
|
109
|
+
// instance disables that default.
|
|
110
|
+
const registeredApis = this.modules.filter(module => module instanceof ApiFunction);
|
|
111
|
+
if (registeredApis.length === 0)
|
|
112
|
+
this.addModules(new ApiFunction("api", {
|
|
113
|
+
app: this.express,
|
|
114
|
+
router: this.routes,
|
|
115
|
+
initialRoutePath: this.initialPath,
|
|
116
|
+
options: this.apiFunctionOptions
|
|
117
|
+
}));
|
|
118
|
+
else if (this.routes)
|
|
119
|
+
this.logWarning("Storm.setRoutes() is ignored when explicit ApiFunction instances are registered — pass each instance its own router.");
|
|
120
|
+
this.functions = this.modules.filter((module) => module instanceof FirebaseFunction);
|
|
72
121
|
if (this.onStart)
|
|
73
122
|
this.functions.forEach(func => func.addOnStart(this.onStart));
|
|
74
123
|
if (this.onDestroy)
|
|
75
124
|
this.functions.forEach(func => func.addOnDestroy(this.onDestroy));
|
|
76
125
|
this.init();
|
|
77
|
-
httpServer.init();
|
|
78
|
-
const urlPrefix = !process.env.GCLOUD_PROJECT ? this.initialPath : "";
|
|
79
|
-
if (this.routes)
|
|
80
|
-
httpServer.mountRouter(this.routes, urlPrefix);
|
|
81
126
|
if (onStarted)
|
|
82
127
|
onStarted().catch(e => this.logError(e));
|
|
83
128
|
return this.functions.reduce((toRet, _function) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Storm.js","sourceRoot":"","sources":["../../../src/main/app-backend/core/Storm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,EAAC,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"Storm.js","sourceRoot":"","sources":["../../../src/main/app-backend/core/Storm.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,10 +12,10 @@ type _SlackMessage = {
|
|
|
12
12
|
};
|
|
13
13
|
export type SlackMessage = string | _SlackMessage;
|
|
14
14
|
export declare class SlackModule_Class extends Module<ConfigType> {
|
|
15
|
-
private
|
|
15
|
+
private _web?;
|
|
16
16
|
private messageMap;
|
|
17
17
|
constructor();
|
|
18
|
-
|
|
18
|
+
private get web();
|
|
19
19
|
postMessage(slackMessage: SlackMessage): Promise<void>;
|
|
20
20
|
private postMessageImpl;
|
|
21
21
|
}
|
|
@@ -26,7 +26,6 @@ type ApiErrorConfig = {
|
|
|
26
26
|
};
|
|
27
27
|
export declare class Slack_ServerApiError_Class extends Module<ApiErrorConfig> implements OnApplicationError {
|
|
28
28
|
constructor();
|
|
29
|
-
protected init(): void;
|
|
30
29
|
__processApplicationError(errorLevel: ServerErrorSeverity, message: string): Promise<void>;
|
|
31
30
|
}
|
|
32
31
|
export declare const Slack_ServerApiError: Slack_ServerApiError_Class;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlackModule.d.ts","sourceRoot":"","sources":["../../../src/main/app-backend/modules/SlackModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,MAAM,EACN,KAAK,kBAAkB,EACvB,mBAAmB,EAEtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAmC,KAAK,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAWvF,KAAK,UAAU,GAAG;IACd,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;CAC1C,CAAC;AAEF,KAAK,aAAa,GAAG;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,aAAa,CAAA;AAMjD,qBAAa,iBACT,SAAQ,MAAM,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"SlackModule.d.ts","sourceRoot":"","sources":["../../../src/main/app-backend/modules/SlackModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,MAAM,EACN,KAAK,kBAAkB,EACvB,mBAAmB,EAEtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAmC,KAAK,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAWvF,KAAK,UAAU,GAAG;IACd,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;CAC1C,CAAC;AAEF,KAAK,aAAa,GAAG;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,aAAa,CAAA;AAMjD,qBAAa,iBACT,SAAQ,MAAM,CAAC,UAAU,CAAC;IAG1B,OAAO,CAAC,IAAI,CAAC,CAAY;IACzB,OAAO,CAAC,UAAU,CAAkB;;IAMpC,OAAO,KAAK,GAAG,GAUd;IAEY,WAAW,CAAC,YAAY,EAAE,YAAY;YAiBrC,eAAe;CAehC;AAED,eAAO,MAAM,WAAW,mBAA0B,CAAC;AAEnD,KAAK,cAAc,GAAG;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,mBAAmB,CAAA;CAChC,CAAA;AAED,qBAAa,0BACT,SAAQ,MAAM,CAAC,cAAc,CAC7B,YAAW,kBAAkB;;IAMvB,yBAAyB,CAAC,UAAU,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM;CAWnF;AAED,eAAO,MAAM,oBAAoB,4BAAmC,CAAC"}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { currentTimeMillies, Minute, Module, ServerErrorSeverity, ServerErrorSeverity_Ordinal } from "@intuitionrobotics/ts-common";
|
|
2
2
|
import { WebClient } from "@slack/web-api";
|
|
3
3
|
export class SlackModule_Class extends Module {
|
|
4
|
-
|
|
4
|
+
// Created lazily on the first posted message (was init()); stays undefined
|
|
5
|
+
// when no token is configured, same as before.
|
|
6
|
+
_web;
|
|
5
7
|
messageMap = {};
|
|
6
8
|
constructor() {
|
|
7
9
|
super("SlackModule");
|
|
8
10
|
}
|
|
9
|
-
|
|
11
|
+
get web() {
|
|
10
12
|
if (!this.config.token)
|
|
11
|
-
return;
|
|
12
|
-
|
|
13
|
-
this.web = new WebClient(this.config.token, {
|
|
13
|
+
return undefined;
|
|
14
|
+
return this._web ??= new WebClient(this.config.token, {
|
|
14
15
|
rejectRateLimitedCalls: true,
|
|
15
16
|
...this.config.slackConfig
|
|
16
17
|
});
|
|
@@ -31,7 +32,13 @@ export class SlackModule_Class extends Module {
|
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
async postMessageImpl(message) {
|
|
34
|
-
const
|
|
35
|
+
const web = this.web;
|
|
36
|
+
if (!web) {
|
|
37
|
+
// previously a silent NPE when no token was configured — now a logged no-op
|
|
38
|
+
this.logWarning(`Slack token not configured — dropping message to channel: ${message.channel}`);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const res = await web.chat.postMessage(message);
|
|
35
42
|
this.messageMap[message.text] = currentTimeMillies();
|
|
36
43
|
this.logDebug(`A message was posted to channel: ${message.channel} with message id ${res.ts} which contains the message ${message.text}`);
|
|
37
44
|
}
|
|
@@ -42,8 +49,6 @@ export class Slack_ServerApiError_Class extends Module {
|
|
|
42
49
|
super("Slack_ServerApiError");
|
|
43
50
|
this.setDefaultConfig({ exclude: [], minLevel: ServerErrorSeverity.Info });
|
|
44
51
|
}
|
|
45
|
-
init() {
|
|
46
|
-
}
|
|
47
52
|
async __processApplicationError(errorLevel, message) {
|
|
48
53
|
if (ServerErrorSeverity_Ordinal.indexOf(errorLevel) < ServerErrorSeverity_Ordinal.indexOf(this.config.minLevel))
|
|
49
54
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlackModule.js","sourceRoot":"","sources":["../../../src/main/app-backend/modules/SlackModule.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,kBAAkB,EAClB,MAAM,EACN,MAAM,EAEN,mBAAmB,EACnB,2BAA2B,EAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAwB,SAAS,EAAwB,MAAM,gBAAgB,CAAC;AA6BvF,MAAM,OAAO,iBACT,SAAQ,MAAkB;
|
|
1
|
+
{"version":3,"file":"SlackModule.js","sourceRoot":"","sources":["../../../src/main/app-backend/modules/SlackModule.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,kBAAkB,EAClB,MAAM,EACN,MAAM,EAEN,mBAAmB,EACnB,2BAA2B,EAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAwB,SAAS,EAAwB,MAAM,gBAAgB,CAAC;AA6BvF,MAAM,OAAO,iBACT,SAAQ,MAAkB;IAC1B,2EAA2E;IAC3E,+CAA+C;IACvC,IAAI,CAAa;IACjB,UAAU,GAAe,EAAE,CAAC;IAEpC;QACI,KAAK,CAAC,aAAa,CAAC,CAAC;IACzB,CAAC;IAED,IAAY,GAAG;QACX,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;YAClB,OAAO,SAAS,CAAC;QAErB,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,SAAS,CAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,EACjB;YACI,sBAAsB,EAAE,IAAI;YAC5B,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;SAC7B,CAAC,CAAC;IACX,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,YAA0B;QAC/C,MAAM,UAAU,GAAiB,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC;YAChE,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;SACtC,CAAC,CAAC,CAAC,YAAY,CAAC;QAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,IAAI,IAAI,kBAAkB,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC;YAC5E,OAAO;QAEX,IAAI,CAAC;YACD,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,QAAQ,CAAC,6CAA6C,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACxF,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,OAAsB;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,4EAA4E;YAC5E,IAAI,CAAC,UAAU,CAAC,6DAA6D,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAChG,OAAO;QACX,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAA0B,CAAC;QACzE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,EAAE,CAAC;QAErD,IAAI,CAAC,QAAQ,CACT,oCAAoC,OAAO,CAAC,OAAO,oBAAoB,GAAG,CAAC,EAAE,+BAA+B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAEpI,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAOnD,MAAM,OAAO,0BACT,SAAQ,MAAsB;IAE9B;QACI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC9B,IAAI,CAAC,gBAAgB,CAAC,EAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,mBAAmB,CAAC,IAAI,EAAC,CAAC,CAAA;IAC5E,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,UAA+B,EAAE,OAAe;QAC5E,IAAI,2BAA2B,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,2BAA2B,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC3G,OAAO;QAEX,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACrB,OAAM;QACd,CAAC;QAED,MAAM,WAAW,CAAC,WAAW,CAAC,SAAS,OAAO,QAAQ,CAAC,CAAC;IAC5D,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,0BAA0B,EAAE,CAAC"}
|
|
@@ -5,7 +5,6 @@ import { type Axios_RequestConfig } from "./types.js";
|
|
|
5
5
|
export declare class AxiosHttpModule_Class extends BaseHttpModule_Class {
|
|
6
6
|
private requestOption;
|
|
7
7
|
constructor(name?: string);
|
|
8
|
-
init(): void;
|
|
9
8
|
createRequest<Binder extends ApiTypeBinder<U, R, B, P, E>, U extends string = Binder["url"], R = Binder["response"], B = Binder["body"], P extends QueryParams = Binder["queryParams"], E extends void | object = Binder["error"]>(method: HttpMethod, key: string, data?: string): BaseHttpRequest<Binder>;
|
|
10
9
|
setRequestOption(requestOption: Axios_RequestConfig): this;
|
|
11
10
|
downloadFile(url: string, outputFile: string, key?: string): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AxiosHttpModule.d.ts","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/http/AxiosHttpModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,aAAa,EAAsB,UAAU,EAAE,KAAK,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAE9G,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAC,oBAAoB,EAAE,KAAK,UAAU,EAAC,MAAM,mCAAmC,CAAC;AACxF,OAAO,EAAkD,KAAK,mBAAmB,EAA+C,MAAM,YAAY,CAAC;AAGnJ,qBAAa,qBACT,SAAQ,oBAAoB;IAC5B,OAAO,CAAC,aAAa,CAA2B;gBAEpC,IAAI,CAAC,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"AxiosHttpModule.d.ts","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/http/AxiosHttpModule.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,aAAa,EAAsB,UAAU,EAAE,KAAK,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAE9G,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAC,oBAAoB,EAAE,KAAK,UAAU,EAAC,MAAM,mCAAmC,CAAC;AACxF,OAAO,EAAkD,KAAK,mBAAmB,EAA+C,MAAM,YAAY,CAAC;AAGnJ,qBAAa,qBACT,SAAQ,oBAAoB;IAC5B,OAAO,CAAC,aAAa,CAA2B;gBAEpC,IAAI,CAAC,EAAE,MAAM;IAKzB,aAAa,CAAC,MAAM,SAAS,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAChC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,EACtB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAClB,CAAC,SAAS,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,EAC7C,CAAC,SAAS,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;IAYvH,gBAAgB,CAAC,aAAa,EAAE,mBAAmB;IAK7C,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,SAA0B;CAepF;AAED,MAAM,MAAM,gBAAgB,CAAC,MAAM,IAAI,MAAM,SAAS,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAE3I,eAAO,MAAM,eAAe,uBAA8B,CAAC;AAwI3D,qBAAa,eACT,SAAQ,oBAAoB;IAC5B,OAAO,CAAC,aAAa,CAA2B;gBAEpC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU;IAM5C,aAAa,CAAC,MAAM,SAAS,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAChC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,EACtB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAClB,CAAC,SAAS,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,EAC7C,CAAC,SAAS,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;IAYvH,gBAAgB,CAAC,aAAa,EAAE,mBAAmB;CAKtD"}
|
|
@@ -9,12 +9,7 @@ export class AxiosHttpModule_Class extends BaseHttpModule_Class {
|
|
|
9
9
|
requestOption = {};
|
|
10
10
|
constructor(name) {
|
|
11
11
|
super(name || "AxiosHttpModule");
|
|
12
|
-
|
|
13
|
-
init() {
|
|
14
|
-
super.init();
|
|
15
|
-
const origin = this.config.origin;
|
|
16
|
-
if (origin)
|
|
17
|
-
this.origin = origin;
|
|
12
|
+
// origin/timeout resolve lazily from config via BaseHttpModule accessors (was init()).
|
|
18
13
|
}
|
|
19
14
|
createRequest(method, key, data) {
|
|
20
15
|
return new AxiosHttpRequest(key, data, this.shouldCompress())
|
|
@@ -154,10 +149,7 @@ export class AxiosHttpClient extends BaseHttpModule_Class {
|
|
|
154
149
|
constructor(name, config) {
|
|
155
150
|
super(name);
|
|
156
151
|
this.setConfig(config);
|
|
157
|
-
|
|
158
|
-
const origin = this.config.origin;
|
|
159
|
-
if (origin)
|
|
160
|
-
this.origin = origin;
|
|
152
|
+
// origin/timeout resolve lazily from config via BaseHttpModule accessors (was init()).
|
|
161
153
|
}
|
|
162
154
|
createRequest(method, key, data) {
|
|
163
155
|
return new AxiosHttpRequest(key, data, this.shouldCompress())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AxiosHttpModule.js","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/http/AxiosHttpModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAyC,UAAU,EAAmB,MAAM,0BAA0B,CAAC;AAC9G,OAAO,EAAC,KAAK,EAAE,0BAA0B,GAAkB,MAAM,8BAA8B,CAAC;AAChG,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAC,oBAAoB,EAAkB,MAAM,mCAAmC,CAAC;AACxF,OAAO,EAAyH,MAAM,YAAY,CAAC;AACnJ,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,MAAM,OAAO,qBACT,SAAQ,oBAAoB;IACpB,aAAa,GAAwB,EAAE,CAAC;IAEhD,YAAY,IAAa;QACrB,KAAK,CAAC,IAAI,IAAI,iBAAiB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"AxiosHttpModule.js","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/http/AxiosHttpModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,9 +23,10 @@ export declare class RemoteProxy_Class<Config extends RemoteProxyConfig> extends
|
|
|
23
23
|
getProxyHeader(request: ExpressRequest): string;
|
|
24
24
|
private getSecretHeader;
|
|
25
25
|
readonly Middleware: ServerApi_Middleware;
|
|
26
|
-
private
|
|
27
|
-
private
|
|
28
|
-
|
|
26
|
+
private _secretHeader?;
|
|
27
|
+
private _proxyHeader?;
|
|
28
|
+
private get secretHeader();
|
|
29
|
+
private get proxyHeader();
|
|
29
30
|
assertSecret(request: ExpressRequest): ObjectTS | undefined;
|
|
30
31
|
processApi(request: ExpressRequest, _requestData: HttpRequestData): Promise<ObjectTS | undefined>;
|
|
31
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteProxy.d.ts","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/proxy/RemoteProxy.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAiC,MAAM,EAAE,KAAK,QAAQ,EAAC,MAAM,8BAA8B,CAAC;AAEnG,OAAO,EAAY,KAAK,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAE7E,OAAO,EAAC,KAAK,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAC,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAEhF,KAAK,WAAW,GAAG;IACf,MAAM,CAAC,EAAE,QAAQ,CAAA;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAA;CACjB,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG;IAC5B,OAAO,EAAE;QACL,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAAA;KACjC,CAAA;IACD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,qBAAa,iBAAiB,CAAC,MAAM,SAAS,iBAAiB,CAC3D,SAAQ,MAAM,CAAC,MAAM,CACrB,YAAW,gBAAgB;;IAMrB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,CAAC;KAAE,CAAC;IAYvF,cAAc,CAAC,OAAO,EAAE,cAAc;IAItC,OAAO,CAAC,eAAe;IAIvB,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAGvC;
|
|
1
|
+
{"version":3,"file":"RemoteProxy.d.ts","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/proxy/RemoteProxy.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAiC,MAAM,EAAE,KAAK,QAAQ,EAAC,MAAM,8BAA8B,CAAC;AAEnG,OAAO,EAAY,KAAK,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAE7E,OAAO,EAAC,KAAK,eAAe,EAAC,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAC,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAEhF,KAAK,WAAW,GAAG;IACf,MAAM,CAAC,EAAE,QAAQ,CAAA;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAA;CACjB,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG;IAC5B,OAAO,EAAE;QACL,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAAA;KACjC,CAAA;IACD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,qBAAa,iBAAiB,CAAC,MAAM,SAAS,iBAAiB,CAC3D,SAAQ,MAAM,CAAC,MAAM,CACrB,YAAW,gBAAgB;;IAMrB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,CAAC;KAAE,CAAC;IAYvF,cAAc,CAAC,OAAO,EAAE,cAAc;IAItC,OAAO,CAAC,eAAe;IAIvB,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAGvC;IAGF,OAAO,CAAC,aAAa,CAAC,CAAY;IAClC,OAAO,CAAC,YAAY,CAAC,CAAY;IAEjC,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,YAAY,CAAC,OAAO,EAAE,cAAc;IA4B9B,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe;CAG1E;AAED,eAAO,MAAM,WAAW,sCAA0B,CAAC"}
|
|
@@ -49,21 +49,18 @@ export class RemoteProxy_Class extends Module {
|
|
|
49
49
|
const extras = this.assertSecret(request);
|
|
50
50
|
return { extras, proxyId: this.getProxyHeader(request) };
|
|
51
51
|
};
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
this.config.proxyHeaderName = 'x-proxy';
|
|
61
|
-
this.secretHeader = new HeaderKey(this.config.secretHeaderName);
|
|
62
|
-
this.proxyHeader = new HeaderKey(this.config.proxyHeaderName);
|
|
52
|
+
// Header keys resolve lazily from config on first request (was init()).
|
|
53
|
+
_secretHeader;
|
|
54
|
+
_proxyHeader;
|
|
55
|
+
get secretHeader() {
|
|
56
|
+
return this._secretHeader ??= new HeaderKey(this.config.secretHeaderName || 'x-secret');
|
|
57
|
+
}
|
|
58
|
+
get proxyHeader() {
|
|
59
|
+
return this._proxyHeader ??= new HeaderKey(this.config.proxyHeaderName || 'x-proxy');
|
|
63
60
|
}
|
|
64
61
|
assertSecret(request) {
|
|
65
|
-
if (!this.
|
|
66
|
-
throw new ImplementationMissingException("MUST
|
|
62
|
+
if (!this.config.remotes)
|
|
63
|
+
throw new ImplementationMissingException("MUST specify config (remotes) for the RemoteProxy module!!");
|
|
67
64
|
const secret = this.getSecretHeader(request);
|
|
68
65
|
const proxyId = this.getProxyHeader(request);
|
|
69
66
|
const expectedSecret = this.config.remotes[proxyId];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteProxy.js","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/proxy/RemoteProxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAC,8BAA8B,EAAE,MAAM,EAAgB,MAAM,8BAA8B,CAAC;AAEnG,OAAO,EAAC,SAAS,EAA4B,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAsB,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAA4C,MAAM,sBAAsB,CAAC;AAehF,MAAM,OAAO,iBACT,SAAQ,MAAc;IAGtB;QACI,KAAK,CAAC,aAAa,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAuB;QAC5C,IAAI,IAAwB,CAAC;QAC7B,IAAI,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;QACD,OAAO;YACH,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE;YACnB,IAAI;SACP,CAAC;IACN,CAAC;IAED,cAAc,CAAC,OAAuB;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAEO,eAAe,CAAC,OAAuB;QAC3C,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAEQ,UAAU,GAAyB,KAAK,EAAE,OAAuB,EAAE,EAAE;QAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,EAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAC,CAAA;IAC1D,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"RemoteProxy.js","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/proxy/RemoteProxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,8 @@ export type RemoteServerConfig = {
|
|
|
10
10
|
};
|
|
11
11
|
export declare abstract class RemoteProxyCaller<Config extends RemoteServerConfig> extends Module<Config> {
|
|
12
12
|
constructor(name: string);
|
|
13
|
-
|
|
13
|
+
private assertedProxyConfig?;
|
|
14
|
+
private get proxyConfig();
|
|
14
15
|
protected executeGetRequest: <Binder extends ApiWithQuery<U, R, P>, U extends string = Binder["url"], R = Binder["response"], P extends QueryParams = Binder["queryParams"]>(url: U, _params: P, _headers?: {
|
|
15
16
|
[key: string]: string;
|
|
16
17
|
}) => Promise<R>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteProxyCaller.d.ts","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/proxy/RemoteProxyCaller.ts"],"names":[],"mappings":"AAoBA,OAAO,EAA8C,MAAM,EAAC,MAAM,8BAA8B,CAAC;AAEjG,OAAO,EAAC,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAG/F,OAAO,EAA0B,KAAK,aAAa,EAAC,MAAM,OAAO,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG;IAC7B,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;CACd,CAAA;AAED,8BAAsB,iBAAiB,CAAC,MAAM,SAAS,kBAAkB,CACrE,SAAQ,MAAM,CAAC,MAAM,CAAC;gBAGV,IAAI,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"RemoteProxyCaller.d.ts","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/proxy/RemoteProxyCaller.ts"],"names":[],"mappings":"AAoBA,OAAO,EAA8C,MAAM,EAAC,MAAM,8BAA8B,CAAC;AAEjG,OAAO,EAAC,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAG/F,OAAO,EAA0B,KAAK,aAAa,EAAC,MAAM,OAAO,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG;IAC7B,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;CACd,CAAA;AAED,8BAAsB,iBAAiB,CAAC,MAAM,SAAS,kBAAkB,CACrE,SAAQ,MAAM,CAAC,MAAM,CAAC;gBAGV,IAAI,EAAE,MAAM;IAKxB,OAAO,CAAC,mBAAmB,CAAC,CAAqB;IAEjD,OAAO,KAAK,WAAW,GAoBtB;IAED,SAAS,CAAC,iBAAiB,GAAU,MAAM,SAAS,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,EAAE,WAAW;QAC/M,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KACxB,KAAG,OAAO,CAAC,CAAC,CAAC,CAGZ;IAEF,SAAS,CAAC,qBAAqB,GAAU,MAAM,SAAS,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,EAAE,WAAW;QACnN,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KACxB,KAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAsB3B;IAEF,SAAS,CAAC,kBAAkB,GAAU,MAAM,SAAS,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW;QACjL,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KACxB,KAAG,OAAO,CAAC,CAAC,CAAC,CAGZ;IAEF,SAAS,CAAC,sBAAsB,GAAU,MAAM,SAAS,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW;QACrL,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KACxB,KAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAgB5B;IAED,OAAO,CAAC,cAAc,CAyBpB;CACL"}
|
|
@@ -29,19 +29,24 @@ export class RemoteProxyCaller extends Module {
|
|
|
29
29
|
constructor(name) {
|
|
30
30
|
super(name);
|
|
31
31
|
}
|
|
32
|
-
init()
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
// Was init(): config is asserted and defaulted lazily, on the first proxied request.
|
|
33
|
+
assertedProxyConfig;
|
|
34
|
+
get proxyConfig() {
|
|
35
|
+
if (this.assertedProxyConfig)
|
|
36
|
+
return this.assertedProxyConfig;
|
|
35
37
|
if (!this.config.proxyId)
|
|
36
38
|
throw new ImplementationMissingException(`MUST specify the proxyId for ${this.getName()}`);
|
|
37
39
|
if (!this.config.url)
|
|
38
40
|
throw new ImplementationMissingException(`MUST specify the url for the remote server for ${this.getName()}`);
|
|
39
41
|
if (!this.config.secret)
|
|
40
42
|
throw new ImplementationMissingException(`MUST specify the secret for the remote server for ${this.getName()}`);
|
|
41
|
-
|
|
42
|
-
this.config.
|
|
43
|
-
|
|
44
|
-
this.config.
|
|
43
|
+
return this.assertedProxyConfig = {
|
|
44
|
+
proxyId: this.config.proxyId,
|
|
45
|
+
url: this.config.url,
|
|
46
|
+
secret: this.config.secret,
|
|
47
|
+
secretHeaderName: this.config.secretHeaderName || 'x-secret',
|
|
48
|
+
proxyHeaderName: this.config.proxyHeaderName || 'x-proxy'
|
|
49
|
+
};
|
|
45
50
|
}
|
|
46
51
|
executeGetRequest = async (url, _params, _headers) => {
|
|
47
52
|
const resp = await this.executeGetRequestImpl(url, _params, _headers);
|
|
@@ -54,13 +59,14 @@ export class RemoteProxyCaller extends Module {
|
|
|
54
59
|
let urlParams = "";
|
|
55
60
|
if (params && params.length > 0)
|
|
56
61
|
urlParams = `?${params.join("&")}`;
|
|
62
|
+
const proxyConfig = this.proxyConfig;
|
|
57
63
|
const proxyRequest = {
|
|
58
64
|
headers: {
|
|
59
65
|
..._headers,
|
|
60
|
-
[
|
|
61
|
-
[
|
|
66
|
+
[proxyConfig.secretHeaderName]: proxyConfig.secret,
|
|
67
|
+
[proxyConfig.proxyHeaderName]: proxyConfig.proxyId
|
|
62
68
|
},
|
|
63
|
-
url: `${
|
|
69
|
+
url: `${proxyConfig.url}${url}${urlParams}`,
|
|
64
70
|
method: 'GET',
|
|
65
71
|
responseType: 'json'
|
|
66
72
|
};
|
|
@@ -71,15 +77,16 @@ export class RemoteProxyCaller extends Module {
|
|
|
71
77
|
return resp.data;
|
|
72
78
|
};
|
|
73
79
|
executePostRequestImpl = async (url, body, _headers) => {
|
|
80
|
+
const proxyConfig = this.proxyConfig;
|
|
74
81
|
const proxyRequest = {
|
|
75
82
|
headers: {
|
|
76
83
|
..._headers,
|
|
77
84
|
'Content-Type': 'application/json',
|
|
78
|
-
[
|
|
79
|
-
[
|
|
85
|
+
[proxyConfig.secretHeaderName]: proxyConfig.secret,
|
|
86
|
+
[proxyConfig.proxyHeaderName]: proxyConfig.proxyId
|
|
80
87
|
},
|
|
81
88
|
responseType: "json",
|
|
82
|
-
url: `${
|
|
89
|
+
url: `${proxyConfig.url}${url}`,
|
|
83
90
|
data: body,
|
|
84
91
|
method: 'POST'
|
|
85
92
|
};
|
|
@@ -88,7 +95,7 @@ export class RemoteProxyCaller extends Module {
|
|
|
88
95
|
executeRequest = async (proxyRequest) => {
|
|
89
96
|
const response = await promisifyRequest(proxyRequest);
|
|
90
97
|
if (proxyRequest.headers) {
|
|
91
|
-
delete proxyRequest.headers[this.
|
|
98
|
+
delete proxyRequest.headers[this.proxyConfig.secretHeaderName];
|
|
92
99
|
delete proxyRequest.headers["Authorization"];
|
|
93
100
|
}
|
|
94
101
|
const statusCode = response.status;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteProxyCaller.js","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/proxy/RemoteProxyCaller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAC,WAAW,EAAE,8BAA8B,EAAE,MAAM,EAAC,MAAM,8BAA8B,CAAC;AACjG,2CAA2C;AAC3C,OAAO,EAAuD,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAC,gBAAgB,EAAC,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAA6C,MAAM,OAAO,CAAC;AAUlE,MAAM,OAAgB,iBAClB,SAAQ,MAAc;IAEtB,oEAAoE;IACpE,YAAY,IAAY;QACpB,KAAK,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;
|
|
1
|
+
{"version":3,"file":"RemoteProxyCaller.js","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/proxy/RemoteProxyCaller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { type Express, type Router } from "express";
|
|
2
|
+
import { type DeployableFunction, FirebaseFunction, type FirebaseFunctionOptions } from "@intuitionrobotics/firebase/backend-functions";
|
|
3
|
+
export type ApiFunctionArgs = {
|
|
4
|
+
/**
|
|
5
|
+
* A pre-built Express app (e.g. with app-specific middleware already added).
|
|
6
|
+
* ApiFunction still runs the framework server setup (compression/CORS/json)
|
|
7
|
+
* and mounts the router on it — AFTER anything already registered.
|
|
8
|
+
*
|
|
9
|
+
* Contract: a provided app carries MIDDLEWARE ONLY, never routes. Express is
|
|
10
|
+
* registration-order sensitive — a route registered on the app before this
|
|
11
|
+
* instance is built bypasses the framework chain (no CORS headers, no
|
|
12
|
+
* compression). Routes belong in the router; app-level extras (debug
|
|
13
|
+
* endpoints etc.) must be registered AFTER Storm.build(). And each instance
|
|
14
|
+
* needs its OWN app — never share one Express app between two instances.
|
|
15
|
+
*/
|
|
16
|
+
app?: Express;
|
|
17
|
+
/** The route table this API serves (an Express Router built by the app). */
|
|
18
|
+
router?: Router;
|
|
19
|
+
/** Mounted as the router's URL prefix when running outside GCP (emulator/local). */
|
|
20
|
+
initialRoutePath?: string;
|
|
21
|
+
/** Runtime options: memory, timeoutSeconds, generation ("v1"/"v2"), region, ... */
|
|
22
|
+
options?: FirebaseFunctionOptions;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* An Express-backed HTTPS Cloud Function as a *regular module* — registered via
|
|
26
|
+
* `Storm.addModules(...)` like any other function, named after the module
|
|
27
|
+
* (no more hardcoded "api"), and instantiable as many times as needed:
|
|
28
|
+
*
|
|
29
|
+
* const Api = new ApiFunction("api", {router: rootRouter});
|
|
30
|
+
* const ApiTest = new ApiFunction("api_test", {router: rootRouter, options: {generation: "v2"}});
|
|
31
|
+
* new Storm().addModules(Api, ApiTest, ...modules).build();
|
|
32
|
+
*
|
|
33
|
+
* `api_test` deploys the exact same code as a separate function
|
|
34
|
+
* (`firebase deploy --only functions:api_test`) — a deployed test environment,
|
|
35
|
+
* or a safe gen-2 canary, without touching the real `api`.
|
|
36
|
+
*
|
|
37
|
+
* Server config (baseUrl/bodyParserLimit/cors) resolves through the module
|
|
38
|
+
* config store: the shared "HttpServer" slice applies to every instance, and
|
|
39
|
+
* the instance's own slice (config[name]) layers on top.
|
|
40
|
+
*
|
|
41
|
+
* When no ApiFunction is registered, Storm builds an implicit default named
|
|
42
|
+
* "api" from its legacy builder methods (setApp/setRoutes/setInitialRoutePath/
|
|
43
|
+
* setApiFunctionOptions) — registering ANY instance disables that default.
|
|
44
|
+
*/
|
|
45
|
+
export declare class ApiFunction extends FirebaseFunction {
|
|
46
|
+
private readonly providedApp?;
|
|
47
|
+
private router?;
|
|
48
|
+
private initialRoutePath?;
|
|
49
|
+
private _app?;
|
|
50
|
+
constructor(name: string, args?: ApiFunctionArgs);
|
|
51
|
+
setRoutes(router: Router): this;
|
|
52
|
+
setInitialRoutePath(initialRoutePath: string): this;
|
|
53
|
+
private get app();
|
|
54
|
+
getFunction: () => DeployableFunction;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=ApiFunction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiFunction.d.ts","sourceRoot":"","sources":["../../../../src/main/app-backend/modules/server/ApiFunction.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,OAAO,EAAE,KAAK,MAAM,EAAC,MAAM,SAAS,CAAC;AAClD,OAAO,EACH,KAAK,kBAAkB,EAEvB,gBAAgB,EAChB,KAAK,uBAAuB,EAC/B,MAAM,+CAA+C,CAAC;AAGvD,MAAM,MAAM,eAAe,GAAG;IAC1B;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mFAAmF;IACnF,OAAO,CAAC,EAAE,uBAAuB,CAAC;CACrC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,WACT,SAAQ,gBAAgB;IAExB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAU;IACvC,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,IAAI,CAAC,CAAU;gBAEX,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB;IAOpD,SAAS,CAAC,MAAM,EAAE,MAAM;IAKxB,mBAAmB,CAAC,gBAAgB,EAAE,MAAM;IAQ5C,OAAO,KAAK,GAAG,GAad;IAED,WAAW,QAAO,kBAAkB,CAUlC;CACL"}
|