@based/server 4.0.3 → 4.0.5
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/auth/defaultConfig.js +1 -1
- package/dist/auth/defaultConfig.js.map +1 -1
- package/dist/auth/index.d.ts +14 -2
- package/dist/auth/index.js +12 -5
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/parseJSONAuthState.d.ts +3 -0
- package/dist/auth/parseJSONAuthState.js +10 -0
- package/dist/auth/parseJSONAuthState.js.map +1 -0
- package/dist/authorize copy.d.ts +9 -0
- package/dist/authorize copy.js +69 -0
- package/dist/authorize copy.js.map +1 -0
- package/dist/authorize.d.ts +5 -5
- package/dist/authorize.js +33 -17
- package/dist/authorize.js.map +1 -1
- package/dist/authorizeAndInstall.d.ts +9 -0
- package/dist/authorizeAndInstall.js +69 -0
- package/dist/authorizeAndInstall.js.map +1 -0
- package/dist/channel/cleanup.d.ts +2 -0
- package/dist/channel/cleanup.js +53 -0
- package/dist/channel/cleanup.js.map +1 -0
- package/dist/channel/create.d.ts +3 -0
- package/dist/channel/create.js +33 -0
- package/dist/channel/create.js.map +1 -0
- package/dist/channel/destroy.d.ts +4 -0
- package/dist/channel/destroy.js +48 -0
- package/dist/channel/destroy.js.map +1 -0
- package/dist/channel/extend.d.ts +4 -0
- package/dist/channel/extend.js +16 -0
- package/dist/channel/extend.js.map +1 -0
- package/dist/channel/get.d.ts +4 -0
- package/dist/channel/get.js +15 -0
- package/dist/channel/get.js.map +1 -0
- package/dist/channel/index.d.ts +8 -0
- package/dist/channel/index.js +25 -0
- package/dist/channel/index.js.map +1 -0
- package/dist/channel/start.d.ts +2 -0
- package/dist/channel/start.js +76 -0
- package/dist/channel/start.js.map +1 -0
- package/dist/channel/subscribe.d.ts +4 -0
- package/dist/channel/subscribe.js +28 -0
- package/dist/channel/subscribe.js.map +1 -0
- package/dist/channel/types.d.ts +14 -0
- package/dist/channel/types.js +4 -0
- package/dist/channel/types.js.map +1 -0
- package/dist/channel/unsub.d.ts +5 -0
- package/dist/channel/unsub.js +49 -0
- package/dist/channel/unsub.js.map +1 -0
- package/dist/createSimpleServer.d.ts +18 -16
- package/dist/createSimpleServer.js +92 -26
- package/dist/createSimpleServer.js.map +1 -1
- package/dist/error/errorTypeHandlers.d.ts +1 -1
- package/dist/error/errorTypeHandlers.js +16 -46
- package/dist/error/errorTypeHandlers.js.map +1 -1
- package/dist/error/index.js +3 -0
- package/dist/error/index.js.map +1 -1
- package/dist/error/types.d.ts +22 -27
- package/dist/error/types.js +2 -6
- package/dist/error/types.js.map +1 -1
- package/dist/functionApi/channelSubscribe.d.ts +3 -0
- package/dist/functionApi/channelSubscribe.js +43 -0
- package/dist/functionApi/channelSubscribe.js.map +1 -0
- package/dist/functionApi/client/channel.d.ts +10 -0
- package/dist/functionApi/client/channel.js +33 -0
- package/dist/functionApi/client/channel.js.map +1 -0
- package/dist/functionApi/client/index.d.ts +5 -3
- package/dist/functionApi/client/index.js +10 -5
- package/dist/functionApi/client/index.js.map +1 -1
- package/dist/functionApi/get.js +2 -2
- package/dist/functionApi/get.js.map +1 -1
- package/dist/functionApi/index.d.ts +3 -0
- package/dist/functionApi/index.js +3 -1
- package/dist/functionApi/index.js.map +1 -1
- package/dist/functionApi/observe.js +2 -2
- package/dist/functionApi/observe.js.map +1 -1
- package/dist/functionApi/publish.d.ts +3 -0
- package/dist/functionApi/publish.js +29 -0
- package/dist/functionApi/publish.js.map +1 -0
- package/dist/functionApi/stream.d.ts +2 -2
- package/dist/functionApi/stream.js +44 -6
- package/dist/functionApi/stream.js.map +1 -1
- package/dist/functions/index.d.ts +3 -2
- package/dist/functions/index.js +55 -34
- package/dist/functions/index.js.map +1 -1
- package/dist/functions/timeout.js +4 -2
- package/dist/functions/timeout.js.map +1 -1
- package/dist/functions/types.d.ts +100 -56
- package/dist/functions/types.js +16 -5
- package/dist/functions/types.js.map +1 -1
- package/dist/incoming/http/function.js +26 -28
- package/dist/incoming/http/function.js.map +1 -1
- package/dist/incoming/http/index.js +33 -7
- package/dist/incoming/http/index.js.map +1 -1
- package/dist/incoming/http/publish.d.ts +3 -0
- package/dist/incoming/http/publish.js +82 -0
- package/dist/incoming/http/publish.js.map +1 -0
- package/dist/incoming/http/query.js +13 -23
- package/dist/incoming/http/query.js.map +1 -1
- package/dist/incoming/http/streamFunction/multiPart/index.js +9 -9
- package/dist/incoming/http/streamFunction/multiPart/index.js.map +1 -1
- package/dist/incoming/http/streamFunction/multiPart/readFormData.d.ts +1 -1
- package/dist/incoming/http/streamFunction/multiPart/readFormData.js +2 -2
- package/dist/incoming/http/streamFunction/multiPart/readFormData.js.map +1 -1
- package/dist/incoming/http/streamFunction/stream/createStream.d.ts +2 -3
- package/dist/incoming/http/streamFunction/stream/createStream.js +2 -2
- package/dist/incoming/http/streamFunction/stream/createStream.js.map +1 -1
- package/dist/incoming/http/streamFunction/stream/index.js +4 -3
- package/dist/incoming/http/streamFunction/stream/index.js.map +1 -1
- package/dist/incoming/index.d.ts +1 -1
- package/dist/incoming/index.js +66 -54
- package/dist/incoming/index.js.map +1 -1
- package/dist/incoming/upgrade.js +19 -12
- package/dist/incoming/upgrade.js.map +1 -1
- package/dist/incoming/ws/auth.d.ts +1 -1
- package/dist/incoming/ws/auth.js +70 -22
- package/dist/incoming/ws/auth.js.map +1 -1
- package/dist/incoming/ws/channelPublish.d.ts +2 -0
- package/dist/incoming/ws/channelPublish.js +60 -0
- package/dist/incoming/ws/channelPublish.js.map +1 -0
- package/dist/incoming/ws/channelSubscribe.d.ts +7 -0
- package/dist/incoming/ws/channelSubscribe.js +128 -0
- package/dist/incoming/ws/channelSubscribe.js.map +1 -0
- package/dist/incoming/ws/function.js +14 -7
- package/dist/incoming/ws/function.js.map +1 -1
- package/dist/incoming/ws/get.js +33 -29
- package/dist/incoming/ws/get.js.map +1 -1
- package/dist/incoming/ws/index.js +22 -2
- package/dist/incoming/ws/index.js.map +1 -1
- package/dist/incoming/ws/observable.js +24 -21
- package/dist/incoming/ws/observable.js.map +1 -1
- package/dist/incoming/ws/types.d.ts +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/installFn.js +32 -34
- package/dist/installFn.js.map +1 -1
- package/dist/observable/cleanup.d.ts +2 -0
- package/dist/observable/cleanup.js +66 -0
- package/dist/observable/cleanup.js.map +1 -0
- package/dist/observable/create.js +1 -0
- package/dist/observable/create.js.map +1 -1
- package/dist/observable/destroy.d.ts +2 -0
- package/dist/observable/destroy.js +26 -30
- package/dist/observable/destroy.js.map +1 -1
- package/dist/observable/extendCache.js +2 -3
- package/dist/observable/extendCache.js.map +1 -1
- package/dist/observable/genObservableId.js +3 -0
- package/dist/observable/genObservableId.js.map +1 -1
- package/dist/observable/get.d.ts +1 -1
- package/dist/observable/get.js +3 -3
- package/dist/observable/get.js.map +1 -1
- package/dist/observable/send.d.ts +1 -1
- package/dist/observable/send.js +2 -2
- package/dist/observable/send.js.map +1 -1
- package/dist/observable/start/error.d.ts +1 -1
- package/dist/observable/start/error.js +7 -2
- package/dist/observable/start/error.js.map +1 -1
- package/dist/observable/start/index.js +3 -1
- package/dist/observable/start/index.js.map +1 -1
- package/dist/observable/start/update.d.ts +1 -4
- package/dist/observable/start/update.js +0 -1
- package/dist/observable/start/update.js.map +1 -1
- package/dist/observable/subscribe.d.ts +1 -1
- package/dist/observable/subscribe.js +7 -8
- package/dist/observable/subscribe.js.map +1 -1
- package/dist/observable/types.d.ts +9 -9
- package/dist/observable/unsub.d.ts +1 -1
- package/dist/observable/unsub.js +9 -6
- package/dist/observable/unsub.js.map +1 -1
- package/dist/protocol.d.ts +1 -0
- package/dist/protocol.js +60 -48
- package/dist/protocol.js.map +1 -1
- package/dist/security.js +1 -0
- package/dist/security.js.map +1 -1
- package/dist/sendError.js +2 -4
- package/dist/sendError.js.map +1 -1
- package/dist/sendHttpResponse.js +16 -3
- package/dist/sendHttpResponse.js.map +1 -1
- package/dist/server.d.ts +24 -12
- package/dist/server.js +14 -8
- package/dist/server.js.map +1 -1
- package/dist/verifyRoute.d.ts +4 -3
- package/dist/verifyRoute.js +31 -20
- package/dist/verifyRoute.js.map +1 -1
- package/package.json +7 -7
- package/dist/functionApi/callFunction copy.d.ts +0 -3
- package/dist/functionApi/callFunction copy.js +0 -29
- package/dist/functionApi/callFunction copy.js.map +0 -1
- package/dist/incoming/http/get.d.ts +0 -4
- package/dist/incoming/http/get.js +0 -156
- package/dist/incoming/http/get.js.map +0 -1
- package/dist/incoming/http/streamFunction/DataStream.d.ts +0 -15
- package/dist/incoming/http/streamFunction/DataStream.js +0 -58
- package/dist/incoming/http/streamFunction/DataStream.js.map +0 -1
package/dist/functions/index.js
CHANGED
|
@@ -19,6 +19,7 @@ const types_1 = require("./types");
|
|
|
19
19
|
const utils_1 = require("@saulx/utils");
|
|
20
20
|
const timeout_1 = require("./timeout");
|
|
21
21
|
const observable_1 = require("../observable");
|
|
22
|
+
const channel_1 = require("../channel");
|
|
22
23
|
__exportStar(require("./types"), exports);
|
|
23
24
|
class BasedFunctions {
|
|
24
25
|
constructor(server, config) {
|
|
@@ -28,6 +29,7 @@ class BasedFunctions {
|
|
|
28
29
|
stream: 5e6,
|
|
29
30
|
query: 2500,
|
|
30
31
|
function: 20e3,
|
|
32
|
+
channel: 500,
|
|
31
33
|
};
|
|
32
34
|
this.paths = {};
|
|
33
35
|
this.specs = {};
|
|
@@ -45,6 +47,10 @@ class BasedFunctions {
|
|
|
45
47
|
if ((0, types_1.isQueryFunctionSpec)(spec) && this.server.activeObservables[name]) {
|
|
46
48
|
(0, timeout_1.updateTimeoutCounter)(spec);
|
|
47
49
|
}
|
|
50
|
+
else if ((0, types_1.isChannelFunctionSpec)(spec) &&
|
|
51
|
+
this.server.activeChannels[name]) {
|
|
52
|
+
(0, timeout_1.updateTimeoutCounter)(spec);
|
|
53
|
+
}
|
|
48
54
|
else if ((0, timeout_1.fnIsTimedOut)(spec)) {
|
|
49
55
|
q.push(this.uninstall(name, spec));
|
|
50
56
|
}
|
|
@@ -60,44 +66,36 @@ class BasedFunctions {
|
|
|
60
66
|
else {
|
|
61
67
|
this.config = config;
|
|
62
68
|
}
|
|
63
|
-
if (this.config.
|
|
64
|
-
this.config.
|
|
65
|
-
}
|
|
66
|
-
if (this.config.memCacheTimeout === undefined) {
|
|
67
|
-
this.config.memCacheTimeout = 3e3;
|
|
69
|
+
if (this.config.uninstallAfterIdleTime === undefined) {
|
|
70
|
+
this.config.uninstallAfterIdleTime = 60e3; // 1 min
|
|
68
71
|
}
|
|
69
|
-
if (this.config.
|
|
70
|
-
this.config.
|
|
72
|
+
if (this.config.closeAfterIdleTime === undefined) {
|
|
73
|
+
this.config.closeAfterIdleTime = {
|
|
74
|
+
query: 3e3,
|
|
75
|
+
channel: 60e3, // 3 1 Min
|
|
76
|
+
};
|
|
71
77
|
}
|
|
72
78
|
if (this.unregisterTimeout) {
|
|
73
79
|
clearTimeout(this.unregisterTimeout);
|
|
74
80
|
}
|
|
75
81
|
this.uninstallLoop();
|
|
76
82
|
}
|
|
77
|
-
async
|
|
78
|
-
const { name } = spec;
|
|
83
|
+
async update(name, checksum) {
|
|
79
84
|
const prevSpec = this.specs[name];
|
|
80
|
-
if (prevSpec) {
|
|
81
|
-
if (
|
|
82
|
-
|
|
83
|
-
delete this.beingUninstalled[name];
|
|
84
|
-
}
|
|
85
|
-
(0, timeout_1.updateTimeoutCounter)(spec);
|
|
86
|
-
await this.installGaurdedFromConfig(name);
|
|
87
|
-
await this.config.uninstall({
|
|
88
|
-
server: this.server,
|
|
89
|
-
function: prevSpec,
|
|
90
|
-
name,
|
|
91
|
-
});
|
|
92
|
-
this.update(spec);
|
|
85
|
+
if (prevSpec && prevSpec.checksum !== checksum) {
|
|
86
|
+
if (this.beingUninstalled[name]) {
|
|
87
|
+
delete this.beingUninstalled[name];
|
|
93
88
|
}
|
|
94
|
-
|
|
95
|
-
|
|
89
|
+
const spec = await this.installGaurdedFromConfig(name);
|
|
90
|
+
await this.config.uninstall({
|
|
91
|
+
server: this.server,
|
|
92
|
+
function: prevSpec,
|
|
93
|
+
name,
|
|
94
|
+
});
|
|
95
|
+
if (spec) {
|
|
96
|
+
this.updateInternal(spec);
|
|
96
97
|
}
|
|
97
98
|
}
|
|
98
|
-
else {
|
|
99
|
-
this.update(spec);
|
|
100
|
-
}
|
|
101
99
|
}
|
|
102
100
|
async installGaurdedFromConfig(name) {
|
|
103
101
|
if (this.installsInProgress[name]) {
|
|
@@ -118,7 +116,7 @@ class BasedFunctions {
|
|
|
118
116
|
}
|
|
119
117
|
spec = await this.installGaurdedFromConfig(name);
|
|
120
118
|
if (spec) {
|
|
121
|
-
this.
|
|
119
|
+
this.updateInternal(spec);
|
|
122
120
|
return this.getFromStore(name);
|
|
123
121
|
}
|
|
124
122
|
return null;
|
|
@@ -140,7 +138,7 @@ class BasedFunctions {
|
|
|
140
138
|
}
|
|
141
139
|
return null;
|
|
142
140
|
}
|
|
143
|
-
|
|
141
|
+
updateInternal(spec) {
|
|
144
142
|
if (!spec) {
|
|
145
143
|
return false;
|
|
146
144
|
}
|
|
@@ -148,18 +146,23 @@ class BasedFunctions {
|
|
|
148
146
|
if ((0, utils_1.deepEqual)(spec, this.specs[spec.name])) {
|
|
149
147
|
return false;
|
|
150
148
|
}
|
|
151
|
-
if (!spec.
|
|
152
|
-
spec.
|
|
149
|
+
if (!spec.uninstallAfterIdleTime) {
|
|
150
|
+
spec.uninstallAfterIdleTime = this.config.uninstallAfterIdleTime;
|
|
153
151
|
}
|
|
154
152
|
if (spec.timeoutCounter === undefined) {
|
|
155
153
|
spec.timeoutCounter =
|
|
156
|
-
spec.
|
|
154
|
+
spec.uninstallAfterIdleTime === 0
|
|
155
|
+
? -1
|
|
156
|
+
: Math.ceil(spec.uninstallAfterIdleTime / 1e3);
|
|
157
157
|
}
|
|
158
158
|
if (spec.path) {
|
|
159
159
|
this.paths[spec.path] = spec.name;
|
|
160
160
|
}
|
|
161
161
|
if (!spec.maxPayloadSize) {
|
|
162
|
-
if ((0, types_1.
|
|
162
|
+
if ((0, types_1.isChannelFunctionSpec)(spec)) {
|
|
163
|
+
spec.maxPayloadSize = this.maxPayLoadSizeDefaults.channel;
|
|
164
|
+
}
|
|
165
|
+
else if ((0, types_1.isQueryFunctionSpec)(spec)) {
|
|
163
166
|
spec.maxPayloadSize = this.maxPayLoadSizeDefaults.query;
|
|
164
167
|
}
|
|
165
168
|
else if ((0, types_1.isStreamFunctionSpec)(spec)) {
|
|
@@ -175,7 +178,22 @@ class BasedFunctions {
|
|
|
175
178
|
const previousChecksum = this.specs[spec.name]?.checksum ?? -1;
|
|
176
179
|
// @ts-ignore maxpayload and rlimit tokens added on line 184...
|
|
177
180
|
this.specs[spec.name] = spec;
|
|
178
|
-
if (this.specs[spec.name] && this.server.
|
|
181
|
+
if (this.specs[spec.name] && this.server.activeChannels[spec.name]) {
|
|
182
|
+
if (!(0, types_1.isChannelFunctionSpec)(spec)) {
|
|
183
|
+
for (const [id] of this.server.activeChannels[spec.name]) {
|
|
184
|
+
(0, channel_1.destroyChannel)(this.server, id);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
if (previousChecksum !== spec.checksum) {
|
|
189
|
+
for (const [id] of this.server.activeChannels[spec.name]) {
|
|
190
|
+
(0, channel_1.startChannel)(this.server, id, true);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else if (this.specs[spec.name] &&
|
|
196
|
+
this.server.activeObservables[spec.name]) {
|
|
179
197
|
if (!(0, types_1.isQueryFunctionSpec)(spec)) {
|
|
180
198
|
for (const [id] of this.server.activeObservables[spec.name]) {
|
|
181
199
|
(0, observable_1.destroyObs)(this.server, id);
|
|
@@ -219,6 +237,9 @@ class BasedFunctions {
|
|
|
219
237
|
return false;
|
|
220
238
|
}
|
|
221
239
|
this.beingUninstalled[name] = true;
|
|
240
|
+
if (spec.uninstall) {
|
|
241
|
+
await spec.uninstall();
|
|
242
|
+
}
|
|
222
243
|
if (await this.config.uninstall({
|
|
223
244
|
server: this.server,
|
|
224
245
|
function: spec,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/functions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/functions/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ const fnIsTimedOut = (spec) => {
|
|
|
6
6
|
if (spec.timeoutCounter === 0) {
|
|
7
7
|
return true;
|
|
8
8
|
}
|
|
9
|
-
if (spec.
|
|
9
|
+
if (spec.uninstallAfterIdleTime > 0 && spec.timeoutCounter > 0) {
|
|
10
10
|
spec.timeoutCounter--;
|
|
11
11
|
}
|
|
12
12
|
}
|
|
@@ -16,7 +16,9 @@ exports.fnIsTimedOut = fnIsTimedOut;
|
|
|
16
16
|
const updateTimeoutCounter = (spec) => {
|
|
17
17
|
if (spec.timeoutCounter !== -1) {
|
|
18
18
|
spec.timeoutCounter =
|
|
19
|
-
spec.
|
|
19
|
+
spec.uninstallAfterIdleTime === -1
|
|
20
|
+
? -1
|
|
21
|
+
: Math.ceil(spec.uninstallAfterIdleTime / 1e3 / 3);
|
|
20
22
|
}
|
|
21
23
|
};
|
|
22
24
|
exports.updateTimeoutCounter = updateTimeoutCounter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../src/functions/timeout.ts"],"names":[],"mappings":";;;AAEO,MAAM,YAAY,GAAG,CAAC,IAAe,EAAW,EAAE;IACvD,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,CAAC,EAAE;QAC9B,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAA;SACZ;QACD,IAAI,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../src/functions/timeout.ts"],"names":[],"mappings":";;;AAEO,MAAM,YAAY,GAAG,CAAC,IAAe,EAAW,EAAE;IACvD,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,CAAC,EAAE;QAC9B,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAA;SACZ;QACD,IAAI,IAAI,CAAC,sBAAsB,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE;YAC9D,IAAI,CAAC,cAAc,EAAE,CAAA;SACtB;KACF;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAVY,QAAA,YAAY,gBAUxB;AAEM,MAAM,oBAAoB,GAAG,CAAC,IAAe,EAAE,EAAE;IACtD,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,CAAC,EAAE;QAC9B,IAAI,CAAC,cAAc;YACjB,IAAI,CAAC,sBAAsB,KAAK,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA;KACvD;AACH,CAAC,CAAA;AAPY,QAAA,oBAAoB,wBAOhC"}
|
|
@@ -1,55 +1,19 @@
|
|
|
1
|
-
import { BasedQueryFunction, BasedFunction, HttpResponse, BasedStreamFunction } from '@based/functions';
|
|
1
|
+
import { BasedQueryFunction, BasedFunction, BasedChannelFunction, HttpResponse, UninstallFunction, BasedStreamFunction, BasedChannelPublishFunction, Authorize } from '@based/functions';
|
|
2
2
|
import { BasedServer } from '../server';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export declare type BasedFunctionRoute = Route;
|
|
13
|
-
export declare type BasedQueryFunctionRoute = Route & {
|
|
14
|
-
query: true;
|
|
15
|
-
};
|
|
16
|
-
export declare type BasedStreamFunctionRoute = Route & {
|
|
17
|
-
stream: true;
|
|
18
|
-
};
|
|
19
|
-
export declare type BasedQueryFunctionSpec = {
|
|
20
|
-
checksum: number;
|
|
21
|
-
function: BasedQueryFunction;
|
|
22
|
-
memCacheTimeout?: number;
|
|
23
|
-
idleTimeout?: number;
|
|
24
|
-
timeoutCounter?: number;
|
|
25
|
-
httpResponse?: HttpResponse;
|
|
26
|
-
} & BasedQueryFunctionRoute;
|
|
27
|
-
export declare type BasedStreamFunctionSpec = {
|
|
28
|
-
checksum: number;
|
|
29
|
-
function: BasedStreamFunction;
|
|
30
|
-
maxExecTime?: number;
|
|
31
|
-
idleTimeout?: number;
|
|
32
|
-
timeoutCounter?: number;
|
|
33
|
-
} & BasedStreamFunctionRoute;
|
|
34
|
-
export declare type BasedFunctionSpec = {
|
|
35
|
-
checksum: number;
|
|
36
|
-
function: BasedFunction;
|
|
37
|
-
httpResponse?: HttpResponse;
|
|
38
|
-
maxExecTime?: number;
|
|
39
|
-
idleTimeout?: number;
|
|
40
|
-
timeoutCounter?: number;
|
|
41
|
-
} & BasedFunctionRoute;
|
|
42
|
-
export declare type BasedRoute = BasedFunctionRoute | BasedQueryFunctionRoute | BasedStreamFunctionRoute;
|
|
43
|
-
export declare type BasedSpec<R extends BasedRoute = BasedRoute> = R extends BasedQueryFunctionRoute ? BasedQueryFunctionSpec : R extends BasedStreamFunctionRoute ? BasedStreamFunctionSpec : BasedFunctionSpec;
|
|
44
|
-
export declare type FunctionConfig = {
|
|
45
|
-
memCacheTimeout?: number;
|
|
46
|
-
idleTimeout?: number;
|
|
47
|
-
maxWorkers?: number;
|
|
48
|
-
importWrapperPath?: string;
|
|
3
|
+
export type FunctionConfig = {
|
|
4
|
+
/** Default number to close channels & queries when no subscribers are active in ms */
|
|
5
|
+
closeAfterIdleTime?: {
|
|
6
|
+
query: number;
|
|
7
|
+
channel: number;
|
|
8
|
+
};
|
|
9
|
+
/** Default time to uinstall function after it has been idle in ms */
|
|
10
|
+
uninstallAfterIdleTime?: number;
|
|
11
|
+
/** Default max payload sizes in bytes */
|
|
49
12
|
maxPayLoadSizeDefaults?: {
|
|
50
13
|
stream: number;
|
|
51
14
|
query: number;
|
|
52
15
|
function: number;
|
|
16
|
+
channel: number;
|
|
53
17
|
};
|
|
54
18
|
route: (opts: {
|
|
55
19
|
server: BasedServer;
|
|
@@ -62,20 +26,100 @@ export declare type FunctionConfig = {
|
|
|
62
26
|
install: (opts: {
|
|
63
27
|
server: BasedServer;
|
|
64
28
|
name: string;
|
|
65
|
-
function?:
|
|
66
|
-
}) => Promise<null |
|
|
29
|
+
function?: BasedSpec;
|
|
30
|
+
}) => Promise<null | BasedSpec>;
|
|
67
31
|
uninstall: (opts: {
|
|
68
32
|
server: BasedServer;
|
|
69
33
|
name: string;
|
|
70
|
-
function:
|
|
34
|
+
function: BasedSpec;
|
|
71
35
|
}) => Promise<boolean>;
|
|
72
36
|
};
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
37
|
+
type Route = {
|
|
38
|
+
/** Function name */
|
|
39
|
+
name: string;
|
|
40
|
+
/** In addition to the name, a function can have a custom path for HTTP requests.
|
|
41
|
+
* For example: `path: 'my/custom/path'` will result in the function being
|
|
42
|
+
* available with a request to `edgeurl.based.io/my/custom/path`
|
|
43
|
+
*/
|
|
44
|
+
path?: string;
|
|
45
|
+
/** In bytes. `-1` indicates no size limit */
|
|
46
|
+
maxPayloadSize?: number;
|
|
47
|
+
/** Cost in tokens for this function call. */
|
|
48
|
+
rateLimitTokens?: number;
|
|
49
|
+
/** A function marked as `public` will skip the call to authorize. */
|
|
50
|
+
public?: boolean;
|
|
51
|
+
/** Array of headers that this function expects to receive. */
|
|
52
|
+
headers?: string[];
|
|
53
|
+
/** A function marked as `internalOnly` will only be accessible from other server side functions,
|
|
54
|
+
* and not through the public internet.
|
|
55
|
+
*/
|
|
56
|
+
internalOnly?: boolean;
|
|
57
|
+
/** Can hold extra information about a spec */
|
|
58
|
+
data?: any;
|
|
59
|
+
};
|
|
60
|
+
export type BasedFunctionRoute = Route;
|
|
61
|
+
export type BasedQueryFunctionRoute = Route & {
|
|
62
|
+
query: true;
|
|
63
|
+
};
|
|
64
|
+
export type BasedStreamFunctionRoute = Route & {
|
|
65
|
+
stream: true;
|
|
66
|
+
};
|
|
67
|
+
export type BasedChannelFunctionRoute = Route & {
|
|
68
|
+
channel: true;
|
|
69
|
+
publisher?: {
|
|
70
|
+
public?: true;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
export type BasedInstallableFunctionSpec = {
|
|
74
|
+
/** Version hash of the BasedFunction */
|
|
75
|
+
checksum: number;
|
|
76
|
+
/** Uinstall function after it has been idle, in ms */
|
|
77
|
+
uninstallAfterIdleTime?: number;
|
|
78
|
+
/** In ms */
|
|
79
|
+
timeoutCounter?: number;
|
|
80
|
+
/** Hook that fires on uninstall of the function e.g. to clean up database connections */
|
|
81
|
+
uninstall?: UninstallFunction;
|
|
82
|
+
/** Specific authorize for this function */
|
|
83
|
+
authorize?: Authorize;
|
|
84
|
+
};
|
|
85
|
+
export type BasedQueryFunctionSpec = {
|
|
86
|
+
function: BasedQueryFunction;
|
|
87
|
+
/** How long should the query function remain active after all subscribers are gone, in ms */
|
|
88
|
+
closeAfterIdleTime?: number;
|
|
89
|
+
/** When in an HTTP context, this function is called to wrap the return value of the BasedFunction, and inject headers and a status code */
|
|
90
|
+
httpResponse?: HttpResponse;
|
|
91
|
+
} & BasedQueryFunctionRoute & BasedInstallableFunctionSpec;
|
|
92
|
+
export type BasedStreamFunctionSpec = {
|
|
93
|
+
function: BasedStreamFunction;
|
|
94
|
+
/** Maximum allowed execution time, in ms */
|
|
95
|
+
maxExecTime?: number;
|
|
96
|
+
} & BasedStreamFunctionRoute & BasedInstallableFunctionSpec;
|
|
97
|
+
export type BasedFunctionSpec = {
|
|
98
|
+
function: BasedFunction;
|
|
99
|
+
/** When in an HTTP context, this function is called to wrap the return value of the BasedFunction, and inject headers and a status code */
|
|
100
|
+
httpResponse?: HttpResponse;
|
|
101
|
+
/** Maximum allowed execution time, in ms */
|
|
102
|
+
maxExecTime?: number;
|
|
103
|
+
} & BasedFunctionRoute & BasedInstallableFunctionSpec;
|
|
104
|
+
export type BasedChannelFunctionSpec = {
|
|
105
|
+
function: BasedChannelFunction;
|
|
106
|
+
/** Publish allows publishing to channels */
|
|
107
|
+
publish: BasedChannelPublishFunction;
|
|
108
|
+
/** How long should the channel remain active after all subscribers ae gone, in ms */
|
|
109
|
+
closeAfterIdleTime?: number;
|
|
110
|
+
/** When in an HTTP context, this function is called to wrap the return value of the publish endpoint, and inject headers and a status code */
|
|
111
|
+
httpResponse?: HttpResponse;
|
|
112
|
+
} & BasedChannelFunctionRoute & BasedInstallableFunctionSpec;
|
|
113
|
+
export type BasedRoute = BasedFunctionRoute | BasedQueryFunctionRoute | BasedStreamFunctionRoute | BasedChannelFunctionRoute;
|
|
114
|
+
export type BasedSpec<R extends BasedRoute = BasedRoute> = R extends BasedChannelFunctionRoute ? BasedChannelFunctionSpec : R extends BasedQueryFunctionRoute ? BasedQueryFunctionSpec : R extends BasedStreamFunctionRoute ? BasedStreamFunctionSpec : BasedFunctionSpec;
|
|
115
|
+
export declare function isChannelFunctionSpec(fn: BasedSpec): fn is BasedChannelFunctionSpec;
|
|
116
|
+
export declare function isQueryFunctionSpec(fn: BasedSpec): fn is BasedQueryFunctionSpec;
|
|
117
|
+
export declare function isStreamFunctionSpec(fn: BasedSpec): fn is BasedQueryFunctionSpec;
|
|
118
|
+
export declare function isFunctionSpec(fn: BasedSpec): fn is BasedSpec;
|
|
76
119
|
export declare function isSpec(fn: any): fn is BasedSpec;
|
|
77
|
-
export declare function isQueryFunctionRoute(fn:
|
|
78
|
-
export declare function isStreamFunctionRoute(fn:
|
|
79
|
-
export declare function
|
|
120
|
+
export declare function isQueryFunctionRoute(fn: BasedRoute): fn is BasedQueryFunctionRoute;
|
|
121
|
+
export declare function isStreamFunctionRoute(fn: BasedRoute): fn is BasedStreamFunctionRoute;
|
|
122
|
+
export declare function isChannelFunctionRoute(fn: BasedRoute): fn is BasedChannelFunctionRoute;
|
|
123
|
+
export declare function isFunctionRoute(fn: BasedRoute): fn is BasedFunctionRoute;
|
|
80
124
|
export declare function isRoute(route: any): route is BasedRoute;
|
|
81
125
|
export {};
|
package/dist/functions/types.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isRoute = exports.isFunctionRoute = exports.isStreamFunctionRoute = exports.isQueryFunctionRoute = exports.isSpec = exports.isFunctionSpec = exports.isStreamFunctionSpec = exports.isQueryFunctionSpec = void 0;
|
|
4
|
-
// specs
|
|
3
|
+
exports.isRoute = exports.isFunctionRoute = exports.isChannelFunctionRoute = exports.isStreamFunctionRoute = exports.isQueryFunctionRoute = exports.isSpec = exports.isFunctionSpec = exports.isStreamFunctionSpec = exports.isQueryFunctionSpec = exports.isChannelFunctionSpec = void 0;
|
|
4
|
+
// ---------- specs -------------
|
|
5
|
+
function isChannelFunctionSpec(fn) {
|
|
6
|
+
return fn.channel === true;
|
|
7
|
+
}
|
|
8
|
+
exports.isChannelFunctionSpec = isChannelFunctionSpec;
|
|
5
9
|
function isQueryFunctionSpec(fn) {
|
|
6
10
|
return fn.query === true;
|
|
7
11
|
}
|
|
@@ -17,10 +21,13 @@ exports.isFunctionSpec = isFunctionSpec;
|
|
|
17
21
|
function isSpec(fn) {
|
|
18
22
|
return (fn &&
|
|
19
23
|
typeof fn === 'object' &&
|
|
20
|
-
(isFunctionSpec(fn) ||
|
|
24
|
+
(isFunctionSpec(fn) ||
|
|
25
|
+
isStreamFunctionSpec(fn) ||
|
|
26
|
+
isQueryFunctionSpec(fn) ||
|
|
27
|
+
isChannelFunctionSpec(fn)));
|
|
21
28
|
}
|
|
22
29
|
exports.isSpec = isSpec;
|
|
23
|
-
// routes
|
|
30
|
+
// ---------- routes -------------
|
|
24
31
|
function isQueryFunctionRoute(fn) {
|
|
25
32
|
return fn.query === true;
|
|
26
33
|
}
|
|
@@ -29,8 +36,12 @@ function isStreamFunctionRoute(fn) {
|
|
|
29
36
|
return fn.stream === true;
|
|
30
37
|
}
|
|
31
38
|
exports.isStreamFunctionRoute = isStreamFunctionRoute;
|
|
39
|
+
function isChannelFunctionRoute(fn) {
|
|
40
|
+
return fn.channel === true;
|
|
41
|
+
}
|
|
42
|
+
exports.isChannelFunctionRoute = isChannelFunctionRoute;
|
|
32
43
|
function isFunctionRoute(fn) {
|
|
33
|
-
return !('stream' in fn) && !('query' in fn);
|
|
44
|
+
return !('stream' in fn) && !('query' in fn) && !('channel' in fn);
|
|
34
45
|
}
|
|
35
46
|
exports.isFunctionRoute = isFunctionRoute;
|
|
36
47
|
function isRoute(route) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/functions/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/functions/types.ts"],"names":[],"mappings":";;;AAwJA,iCAAiC;AACjC,SAAgB,qBAAqB,CACnC,EAAa;IAEb,OAAQ,EAA+B,CAAC,OAAO,KAAK,IAAI,CAAA;AAC1D,CAAC;AAJD,sDAIC;AAED,SAAgB,mBAAmB,CACjC,EAAa;IAEb,OAAQ,EAA6B,CAAC,KAAK,KAAK,IAAI,CAAA;AACtD,CAAC;AAJD,kDAIC;AAED,SAAgB,oBAAoB,CAClC,EAAa;IAEb,OAAQ,EAA8B,CAAC,MAAM,KAAK,IAAI,CAAA;AACxD,CAAC;AAJD,oDAIC;AAED,SAAgB,cAAc,CAAC,EAAa;IAC1C,OAAO,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;AAC9C,CAAC;AAFD,wCAEC;AAED,SAAgB,MAAM,CAAC,EAAO;IAC5B,OAAO,CACL,EAAE;QACF,OAAO,EAAE,KAAK,QAAQ;QACtB,CAAC,cAAc,CAAC,EAAE,CAAC;YACjB,oBAAoB,CAAC,EAAE,CAAC;YACxB,mBAAmB,CAAC,EAAE,CAAC;YACvB,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAC7B,CAAA;AACH,CAAC;AATD,wBASC;AAED,kCAAkC;AAClC,SAAgB,oBAAoB,CAClC,EAAc;IAEd,OAAQ,EAA8B,CAAC,KAAK,KAAK,IAAI,CAAA;AACvD,CAAC;AAJD,oDAIC;AAED,SAAgB,qBAAqB,CACnC,EAAc;IAEd,OAAQ,EAA+B,CAAC,MAAM,KAAK,IAAI,CAAA;AACzD,CAAC;AAJD,sDAIC;AAED,SAAgB,sBAAsB,CACpC,EAAc;IAEd,OAAQ,EAAgC,CAAC,OAAO,KAAK,IAAI,CAAA;AAC3D,CAAC;AAJD,wDAIC;AAED,SAAgB,eAAe,CAAC,EAAc;IAC5C,OAAO,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;AACpE,CAAC;AAFD,0CAEC;AAED,SAAgB,OAAO,CAAC,KAAU;IAChC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,EAAE;QACzD,OAAO,IAAI,CAAA;KACZ;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AALD,0BAKC"}
|
|
@@ -4,36 +4,34 @@ exports.httpFunction = void 0;
|
|
|
4
4
|
const sendHttpResponse_1 = require("../../sendHttpResponse");
|
|
5
5
|
const error_1 = require("../../error");
|
|
6
6
|
const sendError_1 = require("../../sendError");
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
const httpFunction = async (route, spec, server, ctx, payload) => {
|
|
8
|
+
spec
|
|
9
|
+
.function(server.client, payload, ctx)
|
|
10
|
+
.then(async (result) => {
|
|
11
|
+
if (!ctx.session) {
|
|
11
12
|
return;
|
|
12
13
|
}
|
|
13
|
-
spec
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
err,
|
|
35
|
-
route,
|
|
36
|
-
});
|
|
14
|
+
if (spec.httpResponse) {
|
|
15
|
+
const send = (responseData, headers, status) => {
|
|
16
|
+
if (!ctx.session) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (!status) {
|
|
20
|
+
(0, sendHttpResponse_1.sendHttpResponse)(ctx, responseData, headers);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
(0, sendHttpResponse_1.sendHttpResponse)(ctx, responseData, headers, typeof status === 'string' ? status : String(status));
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
await spec.httpResponse(server.client, payload, result, send, ctx);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
(0, sendHttpResponse_1.sendHttpResponse)(ctx, result);
|
|
30
|
+
})
|
|
31
|
+
.catch((err) => {
|
|
32
|
+
(0, sendError_1.sendError)(server, ctx, error_1.BasedErrorCode.FunctionError, {
|
|
33
|
+
err,
|
|
34
|
+
route,
|
|
37
35
|
});
|
|
38
36
|
});
|
|
39
37
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../../src/incoming/http/function.ts"],"names":[],"mappings":";;;AAEA,6DAAyD;AACzD,uCAA4C;AAC5C,+CAA2C;
|
|
1
|
+
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../../src/incoming/http/function.ts"],"names":[],"mappings":";;;AAEA,6DAAyD;AACzD,uCAA4C;AAC5C,+CAA2C;AAGpC,MAAM,YAAY,GAAqC,KAAK,EACjE,KAAyB,EACzB,IAAuB,EACvB,MAAM,EACN,GAAG,EACH,OAAO,EACP,EAAE;IACF,IAAI;SACD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC;SACrC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACrB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;YAChB,OAAM;SACP;QACD,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,IAAI,GAAqB,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC/D,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;oBAChB,OAAM;iBACP;gBACD,IAAI,CAAC,MAAM,EAAE;oBACX,IAAA,mCAAgB,EAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,CAAA;iBAC7C;qBAAM;oBACL,IAAA,mCAAgB,EACd,GAAG,EACH,YAAY,EACZ,OAAO,EACP,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CACrD,CAAA;iBACF;YACH,CAAC,CAAA;YACD,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;YAClE,OAAM;SACP;QAED,IAAA,mCAAgB,EAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC/B,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,IAAA,qBAAS,EAAC,MAAM,EAAE,GAAG,EAAE,sBAAc,CAAC,aAAa,EAAE;YACnD,GAAG;YACH,KAAK;SACN,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACN,CAAC,CAAA;AAzCY,QAAA,YAAY,gBAyCxB"}
|
|
@@ -17,6 +17,7 @@ const ip_1 = require("../../ip");
|
|
|
17
17
|
const auth_1 = require("../../auth");
|
|
18
18
|
const authorize_1 = require("../../authorize");
|
|
19
19
|
const sendHttpResponse_1 = require("../../sendHttpResponse");
|
|
20
|
+
const publish_1 = require("./publish");
|
|
20
21
|
let clientId = 0;
|
|
21
22
|
const handleRequest = (server, method, ctx, route, ready) => {
|
|
22
23
|
if (method === 'post') {
|
|
@@ -57,7 +58,20 @@ const httpHandler = (server, req, res) => {
|
|
|
57
58
|
: { route: { name: '', path: url } });
|
|
58
59
|
return;
|
|
59
60
|
}
|
|
60
|
-
|
|
61
|
+
let authState = {};
|
|
62
|
+
if (route.public !== true) {
|
|
63
|
+
const authorization = req.getHeader('authorization');
|
|
64
|
+
if (authorization) {
|
|
65
|
+
authState = (0, auth_1.parseAuthState)(authorization);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// TODO: remove this when c++ client can encode
|
|
69
|
+
const authorization = req.getHeader('json-authorization');
|
|
70
|
+
if (authorization) {
|
|
71
|
+
authState = (0, auth_1.parseJSONAuthState)(authorization);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
61
75
|
const ctx = {
|
|
62
76
|
session: {
|
|
63
77
|
res,
|
|
@@ -66,7 +80,7 @@ const httpHandler = (server, req, res) => {
|
|
|
66
80
|
ua: req.getHeader('user-agent'),
|
|
67
81
|
ip,
|
|
68
82
|
id: ++clientId,
|
|
69
|
-
authState
|
|
83
|
+
authState,
|
|
70
84
|
headers: {
|
|
71
85
|
'content-type': req.getHeader('content-type'),
|
|
72
86
|
'content-encoding': req.getHeader('content-encoding'),
|
|
@@ -78,12 +92,15 @@ const httpHandler = (server, req, res) => {
|
|
|
78
92
|
for (const header of route.headers) {
|
|
79
93
|
ctx.session.headers[header] = req.getHeader(header);
|
|
80
94
|
}
|
|
95
|
+
ctx.session.res.writeHeader('Access-Control-Allow-Headers', route.headers.join(','));
|
|
96
|
+
ctx.session.res.writeHeader('Access-Control-Expose-Headers', '*');
|
|
97
|
+
ctx.session.res.writeHeader('Access-Control-Allow-Origin', '*');
|
|
98
|
+
ctx.session.corsSend = true;
|
|
81
99
|
}
|
|
82
100
|
if ((0, security_1.rateLimitRequest)(server, ctx, route.rateLimitTokens, server.rateLimit.http)) {
|
|
83
101
|
(0, security_1.endRateLimitHttp)(res);
|
|
84
102
|
return;
|
|
85
103
|
}
|
|
86
|
-
// double check impact
|
|
87
104
|
const query = req.getQuery();
|
|
88
105
|
if (query) {
|
|
89
106
|
ctx.session.query = query;
|
|
@@ -95,7 +112,7 @@ const httpHandler = (server, req, res) => {
|
|
|
95
112
|
}
|
|
96
113
|
if (method === 'post' &&
|
|
97
114
|
ctx.session.headers['content-length'] === undefined) {
|
|
98
|
-
//
|
|
115
|
+
// Zero allowed, but not for streams
|
|
99
116
|
(0, sendError_1.sendError)(server, ctx, error_1.BasedErrorCode.LengthRequired, route);
|
|
100
117
|
return;
|
|
101
118
|
}
|
|
@@ -108,7 +125,7 @@ const httpHandler = (server, req, res) => {
|
|
|
108
125
|
}
|
|
109
126
|
}
|
|
110
127
|
if ((0, functions_1.isQueryFunctionRoute)(route)) {
|
|
111
|
-
//
|
|
128
|
+
// Handle HEAD
|
|
112
129
|
if (method !== 'post' && method !== 'get') {
|
|
113
130
|
(0, sendError_1.sendError)(server, ctx, error_1.BasedErrorCode.MethodNotAllowed, route);
|
|
114
131
|
return;
|
|
@@ -131,15 +148,24 @@ const httpHandler = (server, req, res) => {
|
|
|
131
148
|
return;
|
|
132
149
|
}
|
|
133
150
|
if (ctx.session.headers['content-length'] === 0) {
|
|
134
|
-
//
|
|
151
|
+
// Zero is also not allowed for streams
|
|
135
152
|
(0, sendError_1.sendError)(server, ctx, error_1.BasedErrorCode.LengthRequired, route);
|
|
136
153
|
return;
|
|
137
154
|
}
|
|
138
155
|
(0, streamFunction_1.httpStreamFunction)(server, ctx, route);
|
|
139
156
|
return;
|
|
140
157
|
}
|
|
158
|
+
if ((0, functions_1.isChannelFunctionRoute)(route)) {
|
|
159
|
+
if (method !== 'post' && method !== 'get') {
|
|
160
|
+
(0, sendError_1.sendError)(server, ctx, error_1.BasedErrorCode.MethodNotAllowed, route);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
handleRequest(server, method, ctx, route, (payload) => {
|
|
164
|
+
(0, authorize_1.authorize)(route, server, ctx, payload, publish_1.httpPublish, undefined, undefined, route.publisher?.public || route.public);
|
|
165
|
+
});
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
141
168
|
if ((0, functions_1.isFunctionRoute)(route)) {
|
|
142
|
-
// handle HEAD
|
|
143
169
|
if (method !== 'post' && method !== 'get') {
|
|
144
170
|
(0, sendError_1.sendError)(server, ctx, error_1.BasedErrorCode.MethodNotAllowed, route);
|
|
145
171
|
return;
|