remult 0.14.31 → 0.14.34
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/{readme.md → README.md} +0 -0
- package/esm/graphql.d.ts +2 -2
- package/esm/remult-express.d.ts +3 -8
- package/esm/remult-express.js +3 -2
- package/esm/remult-fastify.js +5 -10
- package/esm/remult-fresh.d.ts +1 -6
- package/esm/remult-fresh.js +29 -37
- package/esm/server/JsonEntityFileStorage.d.ts +4 -1
- package/esm/server/JsonEntityFileStorage.js +4 -0
- package/esm/server/expressBridge.d.ts +13 -61
- package/esm/server/expressBridge.js +255 -142
- package/esm/server/index.d.ts +2 -4
- package/esm/server/index.js +2 -4
- package/esm/src/backend-tests/test-http-server.backend-spec.js +31 -2
- package/graphql.d.ts +2 -2
- package/package.json +4 -4
- package/remult-express.d.ts +3 -8
- package/remult-express.js +3 -2
- package/remult-fastify.js +5 -10
- package/remult-fresh.d.ts +1 -6
- package/remult-fresh.js +16 -22
- package/server/JsonEntityFileStorage.d.ts +4 -1
- package/server/JsonEntityFileStorage.js +11 -1
- package/server/expressBridge.d.ts +13 -61
- package/server/expressBridge.js +371 -231
- package/server/index.d.ts +2 -4
- package/server/index.js +4 -7
- package/src/backend-tests/test-http-server.backend-spec.js +41 -2
- package/esm/remult-middleware.d.ts +0 -10
- package/esm/remult-middleware.js +0 -117
- package/esm/server/register-actions-on-server.d.ts +0 -3
- package/esm/server/register-actions-on-server.js +0 -24
- package/esm/server/register-entities-on-server.d.ts +0 -3
- package/esm/server/register-entities-on-server.js +0 -15
- package/esm/valueConverters.d.ts +0 -12
- package/esm/valueConverters.js +0 -169
- package/postgres/postgresColumnSyntax.d.ts +0 -2
- package/postgres/postgresColumnSyntax.js +0 -34
- package/remult-middleware.d.ts +0 -10
- package/remult-middleware.js +0 -131
- package/server/register-actions-on-server.d.ts +0 -3
- package/server/register-actions-on-server.js +0 -50
- package/server/register-entities-on-server.d.ts +0 -3
- package/server/register-entities-on-server.js +0 -19
- package/valueConverters.d.ts +0 -12
- package/valueConverters.js +0 -168
package/server/expressBridge.js
CHANGED
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.JobsInQueueEntity = exports.EntityQueueStorage = exports.
|
|
3
|
+
exports.JobsInQueueEntity = exports.EntityQueueStorage = exports.buildRemultServer = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
|
-
var register_actions_on_server_1 = require("./register-actions-on-server");
|
|
6
|
-
var register_entities_on_server_1 = require("./register-entities-on-server");
|
|
7
|
-
var JsonEntityFileStorage_1 = require("./JsonEntityFileStorage");
|
|
8
5
|
var server_action_1 = require("../src/server-action");
|
|
9
6
|
var data_api_1 = require("../src/data-api");
|
|
10
7
|
var context_1 = require("../src/context");
|
|
11
8
|
var remult3_1 = require("../src/remult3");
|
|
12
|
-
var json_data_provider_1 = require("../src/data-providers/json-data-provider");
|
|
13
9
|
var id_entity_1 = require("../src/id-entity");
|
|
14
|
-
function buildRemultServer(
|
|
10
|
+
function buildRemultServer(options) {
|
|
15
11
|
var _this = this;
|
|
16
12
|
if (!options) {
|
|
17
13
|
options = {};
|
|
@@ -29,11 +25,17 @@ function buildRemultServer(app, options) {
|
|
|
29
25
|
}
|
|
30
26
|
else
|
|
31
27
|
dataProvider = Promise.resolve(options.dataProvider);
|
|
32
|
-
dataProvider = dataProvider.then(function (dp) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
28
|
+
dataProvider = dataProvider.then(function (dp) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
29
|
+
return tslib_1.__generator(this, function (_a) {
|
|
30
|
+
switch (_a.label) {
|
|
31
|
+
case 0:
|
|
32
|
+
if (dp)
|
|
33
|
+
return [2 /*return*/, dp];
|
|
34
|
+
return [4 /*yield*/, Promise.resolve().then(function () { return require('./JsonEntityFileStorage'); })];
|
|
35
|
+
case 1: return [2 /*return*/, new (_a.sent()).JsonFileDataProvider('./db')];
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}); });
|
|
37
39
|
if (options.initApi) {
|
|
38
40
|
dataProvider = dataProvider.then(function (dp) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
39
41
|
var remult;
|
|
@@ -49,37 +51,248 @@ function buildRemultServer(app, options) {
|
|
|
49
51
|
});
|
|
50
52
|
}); });
|
|
51
53
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
options.rootPath = context_1.Remult.apiBaseUrl;
|
|
57
|
-
var apiArea = bridge.addArea(options.rootPath);
|
|
58
|
-
if (!options.disableAutoApi) {
|
|
59
|
-
var actions = [];
|
|
54
|
+
{
|
|
55
|
+
var allControllers = [];
|
|
56
|
+
if (!options.entities)
|
|
57
|
+
options.entities = tslib_1.__spread(context_1.allEntities);
|
|
60
58
|
if (options.entities)
|
|
61
|
-
|
|
59
|
+
allControllers.push.apply(allControllers, tslib_1.__spread(options.entities));
|
|
62
60
|
if (options.controllers)
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
register_entities_on_server_1.registerEntitiesOnServer(apiArea, options.entities);
|
|
61
|
+
allControllers.push.apply(allControllers, tslib_1.__spread(options.controllers));
|
|
62
|
+
options.controllers = allControllers;
|
|
66
63
|
}
|
|
64
|
+
if (options.rootPath === undefined)
|
|
65
|
+
options.rootPath = context_1.Remult.apiBaseUrl;
|
|
66
|
+
server_action_1.actionInfo.runningOnServer = true;
|
|
67
|
+
var bridge = new RemultServerImplementation(new inProcessQueueHandler(options.queueStorage), options, dataProvider);
|
|
67
68
|
return bridge;
|
|
68
69
|
}
|
|
69
70
|
exports.buildRemultServer = buildRemultServer;
|
|
70
71
|
;
|
|
71
|
-
var
|
|
72
|
-
function
|
|
73
|
-
this.app = app;
|
|
72
|
+
var RemultServerImplementation = /** @class */ (function () {
|
|
73
|
+
function RemultServerImplementation(queue, options, dataProvider) {
|
|
74
74
|
this.queue = queue;
|
|
75
75
|
this.options = options;
|
|
76
76
|
this.dataProvider = dataProvider;
|
|
77
|
+
this.registeredRouter = false;
|
|
78
|
+
this.hasQueue = false;
|
|
77
79
|
/* internal */
|
|
78
80
|
this.backendMethodsOpenApi = [];
|
|
79
|
-
this.logApiEndPoints = true;
|
|
80
81
|
}
|
|
81
|
-
|
|
82
|
+
RemultServerImplementation.prototype.handle = function (req, gRes) {
|
|
83
|
+
if (!this.routeImpl) {
|
|
84
|
+
this.routeImpl = new RouteImplementation();
|
|
85
|
+
this.registerRouter(this.routeImpl);
|
|
86
|
+
}
|
|
87
|
+
return this.routeImpl.handle(req, gRes);
|
|
88
|
+
};
|
|
89
|
+
RemultServerImplementation.prototype.registerRouter = function (r) {
|
|
82
90
|
var e_1, _a, e_2, _b;
|
|
91
|
+
var _this = this;
|
|
92
|
+
if (this.registeredRouter)
|
|
93
|
+
throw "Router already registered";
|
|
94
|
+
this.registeredRouter = true;
|
|
95
|
+
{
|
|
96
|
+
try {
|
|
97
|
+
for (var _c = tslib_1.__values(this.options.controllers), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
98
|
+
var c = _d.value;
|
|
99
|
+
var z = c[server_action_1.classBackendMethodsArray];
|
|
100
|
+
if (z)
|
|
101
|
+
try {
|
|
102
|
+
for (var z_1 = (e_2 = void 0, tslib_1.__values(z)), z_1_1 = z_1.next(); !z_1_1.done; z_1_1 = z_1.next()) {
|
|
103
|
+
var a = z_1_1.value;
|
|
104
|
+
var x = a[server_action_1.serverActionField];
|
|
105
|
+
if (!x) {
|
|
106
|
+
throw 'failed to set server action, did you forget the BackendMethod Decorator?';
|
|
107
|
+
}
|
|
108
|
+
this.addAction(x, r);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
112
|
+
finally {
|
|
113
|
+
try {
|
|
114
|
+
if (z_1_1 && !z_1_1.done && (_b = z_1.return)) _b.call(z_1);
|
|
115
|
+
}
|
|
116
|
+
finally { if (e_2) throw e_2.error; }
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
121
|
+
finally {
|
|
122
|
+
try {
|
|
123
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
124
|
+
}
|
|
125
|
+
finally { if (e_1) throw e_1.error; }
|
|
126
|
+
}
|
|
127
|
+
if (this.hasQueue)
|
|
128
|
+
this.addAction({
|
|
129
|
+
__register: function (x) {
|
|
130
|
+
x(server_action_1.Action.apiUrlForJobStatus, false, function () { return true; }, function (data, req, res) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
131
|
+
var job, userId;
|
|
132
|
+
return tslib_1.__generator(this, function (_a) {
|
|
133
|
+
switch (_a.label) {
|
|
134
|
+
case 0: return [4 /*yield*/, this.queue.getJobInfo(data.queuedJobId)];
|
|
135
|
+
case 1:
|
|
136
|
+
job = _a.sent();
|
|
137
|
+
userId = undefined;
|
|
138
|
+
if (req === null || req === void 0 ? void 0 : req.user)
|
|
139
|
+
userId = req.user.id;
|
|
140
|
+
if (job.userId == '')
|
|
141
|
+
job.userId = undefined;
|
|
142
|
+
if (userId != job.userId)
|
|
143
|
+
res.forbidden();
|
|
144
|
+
else
|
|
145
|
+
res.success(job.info);
|
|
146
|
+
return [2 /*return*/];
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}); });
|
|
150
|
+
}
|
|
151
|
+
}, r);
|
|
152
|
+
}
|
|
153
|
+
this.options.entities.forEach(function (e) {
|
|
154
|
+
var key = remult3_1.getEntityKey(e);
|
|
155
|
+
if (key != undefined)
|
|
156
|
+
_this.add(key, function (c) {
|
|
157
|
+
return new data_api_1.DataApi(c.repo(e), c);
|
|
158
|
+
}, r);
|
|
159
|
+
});
|
|
160
|
+
};
|
|
161
|
+
RemultServerImplementation.prototype.add = function (key, dataApiFactory, r) {
|
|
162
|
+
var _this = this;
|
|
163
|
+
var myRoute = this.options.rootPath + '/' + key;
|
|
164
|
+
if (this.options.logApiEndPoints)
|
|
165
|
+
console.log(myRoute);
|
|
166
|
+
r.route(myRoute)
|
|
167
|
+
.get(this.process(function (c, req, res) {
|
|
168
|
+
return dataApiFactory(c).httpGet(res, req);
|
|
169
|
+
})).put(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
170
|
+
return [2 /*return*/, dataApiFactory(c).put(res, '', orig.body)];
|
|
171
|
+
}); }); }))
|
|
172
|
+
.delete(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
173
|
+
return [2 /*return*/, dataApiFactory(c).delete(res, '')];
|
|
174
|
+
}); }); }))
|
|
175
|
+
.post(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
176
|
+
return [2 /*return*/, dataApiFactory(c).httpPost(res, req, orig.body)];
|
|
177
|
+
}); }); }));
|
|
178
|
+
r.route(myRoute + '/:id')
|
|
179
|
+
//@ts-ignore
|
|
180
|
+
.get(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
181
|
+
return [2 /*return*/, dataApiFactory(c).get(res, orig.params.id)];
|
|
182
|
+
}); }); }))
|
|
183
|
+
//@ts-ignore
|
|
184
|
+
.put(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
185
|
+
return [2 /*return*/, dataApiFactory(c).put(res, orig.params.id, orig.body)];
|
|
186
|
+
}); }); }))
|
|
187
|
+
//@ts-ignore
|
|
188
|
+
.delete(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
189
|
+
return [2 /*return*/, dataApiFactory(c).delete(res, orig.params.id)];
|
|
190
|
+
}); }); }));
|
|
191
|
+
};
|
|
192
|
+
RemultServerImplementation.prototype.process = function (what) {
|
|
193
|
+
var _this = this;
|
|
194
|
+
return function (req, res) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
195
|
+
var myReq, myRes, remult, _a, _b, user;
|
|
196
|
+
return tslib_1.__generator(this, function (_c) {
|
|
197
|
+
switch (_c.label) {
|
|
198
|
+
case 0:
|
|
199
|
+
myReq = new ExpressRequestBridgeToDataApiRequest(req);
|
|
200
|
+
myRes = new ExpressResponseBridgeToDataApiResponse(res, req);
|
|
201
|
+
remult = new context_1.Remult();
|
|
202
|
+
_b = (_a = remult).setDataProvider;
|
|
203
|
+
return [4 /*yield*/, this.dataProvider];
|
|
204
|
+
case 1:
|
|
205
|
+
_b.apply(_a, [_c.sent()]);
|
|
206
|
+
if (!req) return [3 /*break*/, 5];
|
|
207
|
+
user = void 0;
|
|
208
|
+
if (!this.options.getUser) return [3 /*break*/, 3];
|
|
209
|
+
return [4 /*yield*/, this.options.getUser(req)];
|
|
210
|
+
case 2:
|
|
211
|
+
user = _c.sent();
|
|
212
|
+
return [3 /*break*/, 4];
|
|
213
|
+
case 3:
|
|
214
|
+
user = req['user'];
|
|
215
|
+
if (!user)
|
|
216
|
+
user = req['auth'];
|
|
217
|
+
_c.label = 4;
|
|
218
|
+
case 4:
|
|
219
|
+
if (user)
|
|
220
|
+
remult.setUser(user);
|
|
221
|
+
_c.label = 5;
|
|
222
|
+
case 5:
|
|
223
|
+
if (!this.options.initRequest) return [3 /*break*/, 7];
|
|
224
|
+
return [4 /*yield*/, this.options.initRequest(remult, req)];
|
|
225
|
+
case 6:
|
|
226
|
+
_c.sent();
|
|
227
|
+
_c.label = 7;
|
|
228
|
+
case 7:
|
|
229
|
+
what(remult, myReq, myRes, req);
|
|
230
|
+
return [2 /*return*/];
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
}); };
|
|
234
|
+
};
|
|
235
|
+
;
|
|
236
|
+
RemultServerImplementation.prototype.getRemult = function (req) {
|
|
237
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
238
|
+
var remult;
|
|
239
|
+
var _this = this;
|
|
240
|
+
return tslib_1.__generator(this, function (_a) {
|
|
241
|
+
switch (_a.label) {
|
|
242
|
+
case 0: return [4 /*yield*/, this.process(function (c) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
243
|
+
return tslib_1.__generator(this, function (_a) {
|
|
244
|
+
remult = c;
|
|
245
|
+
return [2 /*return*/];
|
|
246
|
+
});
|
|
247
|
+
}); })(req, undefined)];
|
|
248
|
+
case 1:
|
|
249
|
+
_a.sent();
|
|
250
|
+
return [2 /*return*/, remult];
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
};
|
|
255
|
+
RemultServerImplementation.prototype.addAction = function (action, r) {
|
|
256
|
+
var _this = this;
|
|
257
|
+
action.__register(function (url, queue, allowed, what) {
|
|
258
|
+
var myUrl = _this.options.rootPath + '/' + url;
|
|
259
|
+
var tag = (function () {
|
|
260
|
+
var split = url.split('/');
|
|
261
|
+
if (split.length == 1)
|
|
262
|
+
return 'Static Backend Methods';
|
|
263
|
+
else
|
|
264
|
+
return split[0];
|
|
265
|
+
})();
|
|
266
|
+
_this.backendMethodsOpenApi.push({ path: myUrl, allowed: allowed, tag: tag });
|
|
267
|
+
if (_this.options.logApiEndPoints)
|
|
268
|
+
console.log(myUrl);
|
|
269
|
+
if (queue) {
|
|
270
|
+
_this.hasQueue = true;
|
|
271
|
+
_this.queue.mapQueuedAction(myUrl, what);
|
|
272
|
+
}
|
|
273
|
+
r.route(myUrl).post(_this.process(function (remult, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
274
|
+
var r_1;
|
|
275
|
+
var _a;
|
|
276
|
+
return tslib_1.__generator(this, function (_b) {
|
|
277
|
+
switch (_b.label) {
|
|
278
|
+
case 0:
|
|
279
|
+
if (!queue) return [3 /*break*/, 2];
|
|
280
|
+
_a = {};
|
|
281
|
+
return [4 /*yield*/, this.queue.submitJob(myUrl, remult, orig.body)];
|
|
282
|
+
case 1:
|
|
283
|
+
r_1 = (_a.queuedJobId = _b.sent(),
|
|
284
|
+
_a);
|
|
285
|
+
res.success(r_1);
|
|
286
|
+
return [3 /*break*/, 3];
|
|
287
|
+
case 2: return [2 /*return*/, what(orig.body, remult, res)];
|
|
288
|
+
case 3: return [2 /*return*/];
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
}); }));
|
|
292
|
+
});
|
|
293
|
+
};
|
|
294
|
+
RemultServerImplementation.prototype.openApiDoc = function (options) {
|
|
295
|
+
var e_3, _a, e_4, _b;
|
|
83
296
|
var r = new context_1.Remult();
|
|
84
297
|
if (!options.version)
|
|
85
298
|
options.version = "1.0.0";
|
|
@@ -130,14 +343,14 @@ var ExpressBridge = /** @class */ (function () {
|
|
|
130
343
|
}
|
|
131
344
|
};
|
|
132
345
|
var _loop_1 = function (e) {
|
|
133
|
-
var
|
|
346
|
+
var e_5, _a;
|
|
134
347
|
var meta = r.repo(e).metadata;
|
|
135
348
|
var key = remult3_1.getEntityKey(e);
|
|
136
349
|
var parameters = [];
|
|
137
350
|
if (key) {
|
|
138
351
|
var properties = {};
|
|
139
352
|
try {
|
|
140
|
-
for (var _b = (
|
|
353
|
+
for (var _b = (e_5 = void 0, tslib_1.__values(meta.fields)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
141
354
|
var f = _c.value;
|
|
142
355
|
var type = f.valueType == String ? "string" :
|
|
143
356
|
f.valueType == Boolean ? "boolean" :
|
|
@@ -165,12 +378,12 @@ var ExpressBridge = /** @class */ (function () {
|
|
|
165
378
|
});
|
|
166
379
|
}
|
|
167
380
|
}
|
|
168
|
-
catch (
|
|
381
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
169
382
|
finally {
|
|
170
383
|
try {
|
|
171
384
|
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
172
385
|
}
|
|
173
|
-
finally { if (
|
|
386
|
+
finally { if (e_5) throw e_5.error; }
|
|
174
387
|
}
|
|
175
388
|
spec.components.schemas[key] = {
|
|
176
389
|
type: "object",
|
|
@@ -308,21 +521,21 @@ var ExpressBridge = /** @class */ (function () {
|
|
|
308
521
|
}
|
|
309
522
|
};
|
|
310
523
|
try {
|
|
311
|
-
for (var
|
|
312
|
-
var e =
|
|
524
|
+
for (var _c = tslib_1.__values(this.options.entities), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
525
|
+
var e = _d.value;
|
|
313
526
|
_loop_1(e);
|
|
314
527
|
}
|
|
315
528
|
}
|
|
316
|
-
catch (
|
|
529
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
317
530
|
finally {
|
|
318
531
|
try {
|
|
319
|
-
if (
|
|
532
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
320
533
|
}
|
|
321
|
-
finally { if (
|
|
534
|
+
finally { if (e_3) throw e_3.error; }
|
|
322
535
|
}
|
|
323
536
|
try {
|
|
324
|
-
for (var
|
|
325
|
-
var b =
|
|
537
|
+
for (var _e = tslib_1.__values(this.backendMethodsOpenApi), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
538
|
+
var b = _f.value;
|
|
326
539
|
spec.paths[b.path] = {
|
|
327
540
|
post: secureBase(b.allowed, false, {
|
|
328
541
|
"produces": ["application/json"],
|
|
@@ -361,12 +574,12 @@ var ExpressBridge = /** @class */ (function () {
|
|
|
361
574
|
};
|
|
362
575
|
}
|
|
363
576
|
}
|
|
364
|
-
catch (
|
|
577
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
365
578
|
finally {
|
|
366
579
|
try {
|
|
367
|
-
if (
|
|
580
|
+
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
368
581
|
}
|
|
369
|
-
finally { if (
|
|
582
|
+
finally { if (e_4) throw e_4.error; }
|
|
370
583
|
}
|
|
371
584
|
spec.components.schemas["InvalidResponse"] = {
|
|
372
585
|
"type": "object",
|
|
@@ -381,193 +594,8 @@ var ExpressBridge = /** @class */ (function () {
|
|
|
381
594
|
};
|
|
382
595
|
return spec;
|
|
383
596
|
};
|
|
384
|
-
|
|
385
|
-
var r = new SiteArea(this, this.app, rootUrl, this.logApiEndPoints);
|
|
386
|
-
if (!this.firstArea) {
|
|
387
|
-
this.firstArea = r;
|
|
388
|
-
}
|
|
389
|
-
return r;
|
|
390
|
-
};
|
|
391
|
-
ExpressBridge.prototype.getRemult = function (req) {
|
|
392
|
-
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
393
|
-
return tslib_1.__generator(this, function (_a) {
|
|
394
|
-
return [2 /*return*/, this.firstArea.getRemult(req)];
|
|
395
|
-
});
|
|
396
|
-
});
|
|
397
|
-
};
|
|
398
|
-
return ExpressBridge;
|
|
597
|
+
return RemultServerImplementation;
|
|
399
598
|
}());
|
|
400
|
-
var SiteArea = /** @class */ (function () {
|
|
401
|
-
function SiteArea(bridge, app, rootUrl, logApiEndpoints) {
|
|
402
|
-
this.bridge = bridge;
|
|
403
|
-
this.app = app;
|
|
404
|
-
this.rootUrl = rootUrl;
|
|
405
|
-
this.logApiEndpoints = logApiEndpoints;
|
|
406
|
-
}
|
|
407
|
-
SiteArea.prototype.add = function (key, dataApiFactory) {
|
|
408
|
-
var _this = this;
|
|
409
|
-
var myRoute = this.rootUrl + '/' + key;
|
|
410
|
-
if (this.logApiEndpoints)
|
|
411
|
-
console.log(myRoute);
|
|
412
|
-
this.app.route(myRoute)
|
|
413
|
-
.get(this.process(function (c, req, res) {
|
|
414
|
-
return dataApiFactory(c).httpGet(res, req);
|
|
415
|
-
})).put(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
416
|
-
return [2 /*return*/, dataApiFactory(c).put(res, '', orig.body)];
|
|
417
|
-
}); }); }))
|
|
418
|
-
.delete(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
419
|
-
return [2 /*return*/, dataApiFactory(c).delete(res, '')];
|
|
420
|
-
}); }); }))
|
|
421
|
-
.post(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
422
|
-
return [2 /*return*/, dataApiFactory(c).httpPost(res, req, orig.body)];
|
|
423
|
-
}); }); }));
|
|
424
|
-
this.app.route(myRoute + '/:id')
|
|
425
|
-
//@ts-ignore
|
|
426
|
-
.get(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
427
|
-
return [2 /*return*/, dataApiFactory(c).get(res, orig.params.id)];
|
|
428
|
-
}); }); }))
|
|
429
|
-
//@ts-ignore
|
|
430
|
-
.put(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
431
|
-
return [2 /*return*/, dataApiFactory(c).put(res, orig.params.id, orig.body)];
|
|
432
|
-
}); }); }))
|
|
433
|
-
//@ts-ignore
|
|
434
|
-
.delete(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
435
|
-
return [2 /*return*/, dataApiFactory(c).delete(res, orig.params.id)];
|
|
436
|
-
}); }); }));
|
|
437
|
-
};
|
|
438
|
-
SiteArea.prototype.process = function (what) {
|
|
439
|
-
var _this = this;
|
|
440
|
-
return function (req, res) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
441
|
-
var myReq, myRes, remult, _a, _b, user;
|
|
442
|
-
return tslib_1.__generator(this, function (_c) {
|
|
443
|
-
switch (_c.label) {
|
|
444
|
-
case 0:
|
|
445
|
-
myReq = new ExpressRequestBridgeToDataApiRequest(req);
|
|
446
|
-
myRes = new ExpressResponseBridgeToDataApiResponse(res, req);
|
|
447
|
-
remult = new context_1.Remult();
|
|
448
|
-
_b = (_a = remult).setDataProvider;
|
|
449
|
-
return [4 /*yield*/, this.bridge.dataProvider];
|
|
450
|
-
case 1:
|
|
451
|
-
_b.apply(_a, [_c.sent()]);
|
|
452
|
-
if (!req) return [3 /*break*/, 5];
|
|
453
|
-
user = void 0;
|
|
454
|
-
if (!this.bridge.options.getUser) return [3 /*break*/, 3];
|
|
455
|
-
return [4 /*yield*/, this.bridge.options.getUser(req)];
|
|
456
|
-
case 2:
|
|
457
|
-
user = _c.sent();
|
|
458
|
-
return [3 /*break*/, 4];
|
|
459
|
-
case 3:
|
|
460
|
-
user = req['user'];
|
|
461
|
-
if (!user)
|
|
462
|
-
user = req['auth'];
|
|
463
|
-
_c.label = 4;
|
|
464
|
-
case 4:
|
|
465
|
-
if (user)
|
|
466
|
-
remult.setUser(user);
|
|
467
|
-
_c.label = 5;
|
|
468
|
-
case 5:
|
|
469
|
-
if (!this.bridge.options.initRequest) return [3 /*break*/, 7];
|
|
470
|
-
return [4 /*yield*/, this.bridge.options.initRequest(remult, req)];
|
|
471
|
-
case 6:
|
|
472
|
-
_c.sent();
|
|
473
|
-
_c.label = 7;
|
|
474
|
-
case 7:
|
|
475
|
-
what(remult, myReq, myRes, req);
|
|
476
|
-
return [2 /*return*/];
|
|
477
|
-
}
|
|
478
|
-
});
|
|
479
|
-
}); };
|
|
480
|
-
};
|
|
481
|
-
;
|
|
482
|
-
SiteArea.prototype.getRemult = function (req) {
|
|
483
|
-
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
484
|
-
var remult;
|
|
485
|
-
var _this = this;
|
|
486
|
-
return tslib_1.__generator(this, function (_a) {
|
|
487
|
-
switch (_a.label) {
|
|
488
|
-
case 0: return [4 /*yield*/, this.process(function (c) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
489
|
-
return tslib_1.__generator(this, function (_a) {
|
|
490
|
-
remult = c;
|
|
491
|
-
return [2 /*return*/];
|
|
492
|
-
});
|
|
493
|
-
}); })(req, undefined)];
|
|
494
|
-
case 1:
|
|
495
|
-
_a.sent();
|
|
496
|
-
return [2 /*return*/, remult];
|
|
497
|
-
}
|
|
498
|
-
});
|
|
499
|
-
});
|
|
500
|
-
};
|
|
501
|
-
SiteArea.prototype.initQueue = function () {
|
|
502
|
-
var _this = this;
|
|
503
|
-
this.addAction({
|
|
504
|
-
__register: function (x) {
|
|
505
|
-
x(server_action_1.Action.apiUrlForJobStatus, false, function () { return true; }, function (data, req, res) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
506
|
-
var job, userId;
|
|
507
|
-
return tslib_1.__generator(this, function (_a) {
|
|
508
|
-
switch (_a.label) {
|
|
509
|
-
case 0: return [4 /*yield*/, this.bridge.queue.getJobInfo(data.queuedJobId)];
|
|
510
|
-
case 1:
|
|
511
|
-
job = _a.sent();
|
|
512
|
-
userId = undefined;
|
|
513
|
-
if (req === null || req === void 0 ? void 0 : req.user)
|
|
514
|
-
userId = req.user.id;
|
|
515
|
-
if (job.userId == '')
|
|
516
|
-
job.userId = undefined;
|
|
517
|
-
if (userId != job.userId)
|
|
518
|
-
res.forbidden();
|
|
519
|
-
else
|
|
520
|
-
res.success(job.info);
|
|
521
|
-
return [2 /*return*/];
|
|
522
|
-
}
|
|
523
|
-
});
|
|
524
|
-
}); });
|
|
525
|
-
}
|
|
526
|
-
});
|
|
527
|
-
this.initQueue = function () { };
|
|
528
|
-
};
|
|
529
|
-
SiteArea.prototype.addAction = function (action) {
|
|
530
|
-
var _this = this;
|
|
531
|
-
action.__register(function (url, queue, allowed, what) {
|
|
532
|
-
var myUrl = _this.rootUrl + '/' + url;
|
|
533
|
-
var tag = (function () {
|
|
534
|
-
var split = url.split('/');
|
|
535
|
-
if (split.length == 1)
|
|
536
|
-
return 'Static Backend Methods';
|
|
537
|
-
else
|
|
538
|
-
return split[0];
|
|
539
|
-
})();
|
|
540
|
-
_this.bridge.backendMethodsOpenApi.push({ path: myUrl, allowed: allowed, tag: tag });
|
|
541
|
-
if (_this.logApiEndpoints)
|
|
542
|
-
console.log(myUrl);
|
|
543
|
-
if (queue) {
|
|
544
|
-
_this.initQueue();
|
|
545
|
-
_this.bridge.queue.mapQueuedAction(myUrl, what);
|
|
546
|
-
}
|
|
547
|
-
_this.app.route(myUrl).post(_this.process(function (remult, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
548
|
-
var r;
|
|
549
|
-
var _a;
|
|
550
|
-
return tslib_1.__generator(this, function (_b) {
|
|
551
|
-
switch (_b.label) {
|
|
552
|
-
case 0:
|
|
553
|
-
if (!queue) return [3 /*break*/, 2];
|
|
554
|
-
_a = {};
|
|
555
|
-
return [4 /*yield*/, this.bridge.queue.submitJob(myUrl, remult, orig.body)];
|
|
556
|
-
case 1:
|
|
557
|
-
r = (_a.queuedJobId = _b.sent(),
|
|
558
|
-
_a);
|
|
559
|
-
res.success(r);
|
|
560
|
-
return [3 /*break*/, 3];
|
|
561
|
-
case 2: return [2 /*return*/, what(orig.body, remult, res)];
|
|
562
|
-
case 3: return [2 /*return*/];
|
|
563
|
-
}
|
|
564
|
-
});
|
|
565
|
-
}); }));
|
|
566
|
-
});
|
|
567
|
-
};
|
|
568
|
-
return SiteArea;
|
|
569
|
-
}());
|
|
570
|
-
exports.SiteArea = SiteArea;
|
|
571
599
|
var ExpressRequestBridgeToDataApiRequest = /** @class */ (function () {
|
|
572
600
|
function ExpressRequestBridgeToDataApiRequest(r) {
|
|
573
601
|
this.r = r;
|
|
@@ -577,7 +605,6 @@ var ExpressRequestBridgeToDataApiRequest = /** @class */ (function () {
|
|
|
577
605
|
};
|
|
578
606
|
return ExpressRequestBridgeToDataApiRequest;
|
|
579
607
|
}());
|
|
580
|
-
exports.ExpressRequestBridgeToDataApiRequest = ExpressRequestBridgeToDataApiRequest;
|
|
581
608
|
var ExpressResponseBridgeToDataApiResponse = /** @class */ (function () {
|
|
582
609
|
function ExpressResponseBridgeToDataApiResponse(r, req) {
|
|
583
610
|
this.r = r;
|
|
@@ -587,8 +614,6 @@ var ExpressResponseBridgeToDataApiResponse = /** @class */ (function () {
|
|
|
587
614
|
this.setStatus(403).end();
|
|
588
615
|
};
|
|
589
616
|
ExpressResponseBridgeToDataApiResponse.prototype.setStatus = function (status) {
|
|
590
|
-
if (this.r.setStatus)
|
|
591
|
-
return this.r.setStatus(status);
|
|
592
617
|
return this.r.status(status);
|
|
593
618
|
};
|
|
594
619
|
ExpressResponseBridgeToDataApiResponse.prototype.progress = function (progress) {
|
|
@@ -815,6 +840,121 @@ var EntityQueueStorage = /** @class */ (function () {
|
|
|
815
840
|
return EntityQueueStorage;
|
|
816
841
|
}());
|
|
817
842
|
exports.EntityQueueStorage = EntityQueueStorage;
|
|
843
|
+
var RouteImplementation = /** @class */ (function () {
|
|
844
|
+
function RouteImplementation() {
|
|
845
|
+
this.map = new Map();
|
|
846
|
+
}
|
|
847
|
+
RouteImplementation.prototype.route = function (path) {
|
|
848
|
+
//consider using:
|
|
849
|
+
//* https://raw.githubusercontent.com/cmorten/opine/main/src/utils/pathToRegex.ts
|
|
850
|
+
//* https://github.com/pillarjs/path-to-regexp
|
|
851
|
+
var r = path.toLowerCase();
|
|
852
|
+
var m = new Map();
|
|
853
|
+
this.map.set(r, m);
|
|
854
|
+
var route = {
|
|
855
|
+
get: function (h) {
|
|
856
|
+
m.set("get", h);
|
|
857
|
+
return route;
|
|
858
|
+
},
|
|
859
|
+
put: function (h) {
|
|
860
|
+
m.set("put", h);
|
|
861
|
+
return route;
|
|
862
|
+
},
|
|
863
|
+
post: function (h) {
|
|
864
|
+
m.set("post", h);
|
|
865
|
+
return route;
|
|
866
|
+
},
|
|
867
|
+
delete: function (h) {
|
|
868
|
+
m.set("delete", h);
|
|
869
|
+
return route;
|
|
870
|
+
}
|
|
871
|
+
};
|
|
872
|
+
return route;
|
|
873
|
+
};
|
|
874
|
+
RouteImplementation.prototype.handle = function (req, gRes) {
|
|
875
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
876
|
+
var _this = this;
|
|
877
|
+
return tslib_1.__generator(this, function (_a) {
|
|
878
|
+
return [2 /*return*/, new Promise(function (res) {
|
|
879
|
+
var response = new /** @class */ (function () {
|
|
880
|
+
function class_1() {
|
|
881
|
+
this.statusCode = 200;
|
|
882
|
+
}
|
|
883
|
+
class_1.prototype.json = function (data) {
|
|
884
|
+
if (gRes !== undefined)
|
|
885
|
+
gRes.json(data);
|
|
886
|
+
res({ statusCode: this.statusCode, data: data });
|
|
887
|
+
};
|
|
888
|
+
class_1.prototype.status = function (statusCode) {
|
|
889
|
+
if (gRes !== undefined)
|
|
890
|
+
gRes.status(statusCode);
|
|
891
|
+
this.statusCode = statusCode;
|
|
892
|
+
return this;
|
|
893
|
+
};
|
|
894
|
+
class_1.prototype.end = function () {
|
|
895
|
+
if (gRes !== undefined)
|
|
896
|
+
gRes.end();
|
|
897
|
+
res({
|
|
898
|
+
statusCode: this.statusCode
|
|
899
|
+
});
|
|
900
|
+
};
|
|
901
|
+
return class_1;
|
|
902
|
+
}());
|
|
903
|
+
_this.middleware(req, response, function () { return res(undefined); });
|
|
904
|
+
})];
|
|
905
|
+
});
|
|
906
|
+
});
|
|
907
|
+
};
|
|
908
|
+
RouteImplementation.prototype.middleware = function (req, res, next) {
|
|
909
|
+
var theUrl = req.url;
|
|
910
|
+
if (theUrl.startsWith('/')) //next sends a partial url '/api/tasks' and not the full url
|
|
911
|
+
theUrl = 'http://stam' + theUrl;
|
|
912
|
+
var url = new URL(theUrl);
|
|
913
|
+
var path = url.pathname;
|
|
914
|
+
if (!req.query) {
|
|
915
|
+
var query_1 = {};
|
|
916
|
+
url.searchParams.forEach(function (val, key) {
|
|
917
|
+
var current = query_1[key];
|
|
918
|
+
if (!current) {
|
|
919
|
+
query_1[key] = val;
|
|
920
|
+
return;
|
|
921
|
+
}
|
|
922
|
+
if (Array.isArray(current)) {
|
|
923
|
+
current.push(val);
|
|
924
|
+
return;
|
|
925
|
+
}
|
|
926
|
+
query_1[key] = [current, val];
|
|
927
|
+
});
|
|
928
|
+
req.query = query_1;
|
|
929
|
+
}
|
|
930
|
+
var lowerPath = path.toLowerCase();
|
|
931
|
+
var m = this.map.get(lowerPath);
|
|
932
|
+
if (m) {
|
|
933
|
+
var h = m.get(req.method.toLowerCase());
|
|
934
|
+
if (h) {
|
|
935
|
+
h(req, res, next);
|
|
936
|
+
return;
|
|
937
|
+
}
|
|
938
|
+
}
|
|
939
|
+
var idPosition = path.lastIndexOf('/');
|
|
940
|
+
if (idPosition >= 0) {
|
|
941
|
+
lowerPath = path.substring(0, idPosition) + '/:id';
|
|
942
|
+
m = this.map.get(lowerPath);
|
|
943
|
+
if (m) {
|
|
944
|
+
var h = m.get(req.method.toLowerCase());
|
|
945
|
+
if (h) {
|
|
946
|
+
if (!req.params)
|
|
947
|
+
req.params = {};
|
|
948
|
+
req.params.id = path.substring(idPosition + 1);
|
|
949
|
+
h(req, res, next);
|
|
950
|
+
return;
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
}
|
|
954
|
+
next();
|
|
955
|
+
};
|
|
956
|
+
return RouteImplementation;
|
|
957
|
+
}());
|
|
818
958
|
var JobsInQueueEntity = /** @class */ (function (_super) {
|
|
819
959
|
tslib_1.__extends(JobsInQueueEntity, _super);
|
|
820
960
|
function JobsInQueueEntity() {
|