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.
Files changed (46) hide show
  1. package/{readme.md → README.md} +0 -0
  2. package/esm/graphql.d.ts +2 -2
  3. package/esm/remult-express.d.ts +3 -8
  4. package/esm/remult-express.js +3 -2
  5. package/esm/remult-fastify.js +5 -10
  6. package/esm/remult-fresh.d.ts +1 -6
  7. package/esm/remult-fresh.js +29 -37
  8. package/esm/server/JsonEntityFileStorage.d.ts +4 -1
  9. package/esm/server/JsonEntityFileStorage.js +4 -0
  10. package/esm/server/expressBridge.d.ts +13 -61
  11. package/esm/server/expressBridge.js +255 -142
  12. package/esm/server/index.d.ts +2 -4
  13. package/esm/server/index.js +2 -4
  14. package/esm/src/backend-tests/test-http-server.backend-spec.js +31 -2
  15. package/graphql.d.ts +2 -2
  16. package/package.json +4 -4
  17. package/remult-express.d.ts +3 -8
  18. package/remult-express.js +3 -2
  19. package/remult-fastify.js +5 -10
  20. package/remult-fresh.d.ts +1 -6
  21. package/remult-fresh.js +16 -22
  22. package/server/JsonEntityFileStorage.d.ts +4 -1
  23. package/server/JsonEntityFileStorage.js +11 -1
  24. package/server/expressBridge.d.ts +13 -61
  25. package/server/expressBridge.js +371 -231
  26. package/server/index.d.ts +2 -4
  27. package/server/index.js +4 -7
  28. package/src/backend-tests/test-http-server.backend-spec.js +41 -2
  29. package/esm/remult-middleware.d.ts +0 -10
  30. package/esm/remult-middleware.js +0 -117
  31. package/esm/server/register-actions-on-server.d.ts +0 -3
  32. package/esm/server/register-actions-on-server.js +0 -24
  33. package/esm/server/register-entities-on-server.d.ts +0 -3
  34. package/esm/server/register-entities-on-server.js +0 -15
  35. package/esm/valueConverters.d.ts +0 -12
  36. package/esm/valueConverters.js +0 -169
  37. package/postgres/postgresColumnSyntax.d.ts +0 -2
  38. package/postgres/postgresColumnSyntax.js +0 -34
  39. package/remult-middleware.d.ts +0 -10
  40. package/remult-middleware.js +0 -131
  41. package/server/register-actions-on-server.d.ts +0 -3
  42. package/server/register-actions-on-server.js +0 -50
  43. package/server/register-entities-on-server.d.ts +0 -3
  44. package/server/register-entities-on-server.js +0 -19
  45. package/valueConverters.d.ts +0 -12
  46. package/valueConverters.js +0 -168
@@ -1,17 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.JobsInQueueEntity = exports.EntityQueueStorage = exports.ExpressRequestBridgeToDataApiRequest = exports.SiteArea = exports.buildRemultServer = void 0;
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(app, options) {
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
- if (dp)
34
- return dp;
35
- return new json_data_provider_1.JsonDataProvider(new JsonEntityFileStorage_1.JsonEntityFileStorage('./db'));
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
- var bridge = new ExpressBridge(app, new inProcessQueueHandler(options.queueStorage), options, dataProvider);
53
- if (options.logApiEndPoints !== undefined)
54
- bridge.logApiEndPoints = options.logApiEndPoints;
55
- if (options.rootPath === undefined)
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
- actions.push.apply(actions, tslib_1.__spread(options.entities));
59
+ allControllers.push.apply(allControllers, tslib_1.__spread(options.entities));
62
60
  if (options.controllers)
63
- actions.push.apply(actions, tslib_1.__spread(options.controllers));
64
- register_actions_on_server_1.registerActionsOnServer(apiArea, actions);
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 ExpressBridge = /** @class */ (function () {
72
- function ExpressBridge(app, queue, options, dataProvider) {
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
- ExpressBridge.prototype.openApiDoc = function (options) {
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 e_3, _a;
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 = (e_3 = void 0, tslib_1.__values(meta.fields)), _c = _b.next(); !_c.done; _c = _b.next()) {
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 (e_3_1) { e_3 = { error: e_3_1 }; }
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 (e_3) throw e_3.error; }
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 allEntities_1 = tslib_1.__values(context_1.allEntities), allEntities_1_1 = allEntities_1.next(); !allEntities_1_1.done; allEntities_1_1 = allEntities_1.next()) {
312
- var e = allEntities_1_1.value;
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 (e_1_1) { e_1 = { error: e_1_1 }; }
529
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
317
530
  finally {
318
531
  try {
319
- if (allEntities_1_1 && !allEntities_1_1.done && (_a = allEntities_1.return)) _a.call(allEntities_1);
532
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
320
533
  }
321
- finally { if (e_1) throw e_1.error; }
534
+ finally { if (e_3) throw e_3.error; }
322
535
  }
323
536
  try {
324
- for (var _c = tslib_1.__values(this.backendMethodsOpenApi), _d = _c.next(); !_d.done; _d = _c.next()) {
325
- var b = _d.value;
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 (e_2_1) { e_2 = { error: e_2_1 }; }
577
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
365
578
  finally {
366
579
  try {
367
- if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
580
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
368
581
  }
369
- finally { if (e_2) throw e_2.error; }
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
- ExpressBridge.prototype.addArea = function (rootUrl) {
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() {