@datacapy/server 0.1.0 → 0.2.0
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 +9 -9
- package/dist/remote-object/request-data-parser.d.ts.map +1 -1
- package/dist/remote-object/request-data-parser.js +8 -0
- package/dist/remote-object/request-data-parser.js.map +1 -1
- package/dist/server/http-server-manager.d.ts +2 -1
- package/dist/server/http-server-manager.d.ts.map +1 -1
- package/dist/server/http-server-manager.js +53 -3
- package/dist/server/http-server-manager.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
# @datacapy/server
|
|
4
4
|
|
|
5
|
+
Part of the [DataCapy monorepo](https://github.com/datacapy/datacapy).
|
|
6
|
+
|
|
5
7
|
An HTTP API layer for [Datacapy](../../README.md) applications. You describe
|
|
6
8
|
each endpoint in a plain config object; @datacapy/server maps it to an
|
|
7
9
|
[Express](https://expressjs.com) route, validates and casts the request data,
|
|
@@ -28,7 +30,7 @@ which roles the request has. See [Access control](#access-control).
|
|
|
28
30
|
## Install
|
|
29
31
|
|
|
30
32
|
```bash
|
|
31
|
-
|
|
33
|
+
pnpm add @datacapy/server
|
|
32
34
|
```
|
|
33
35
|
|
|
34
36
|
It depends on `@datacapy/om` (models, services, repositories) and `express`.
|
|
@@ -341,14 +343,14 @@ A role is defined by a class extending `ServerAclRoleAssessor`. Register it with
|
|
|
341
343
|
| `this.repos` | The model's repositories, for lookups |
|
|
342
344
|
|
|
343
345
|
```ts
|
|
344
|
-
class
|
|
346
|
+
class WorkspaceAdmin extends ServerAclRoleAssessor {
|
|
345
347
|
constructor() {
|
|
346
|
-
super('
|
|
348
|
+
super('workspaceAdmin')
|
|
347
349
|
}
|
|
348
350
|
|
|
349
|
-
async hasRole({ jwt,
|
|
351
|
+
async hasRole({ jwt, workspaceId }) {
|
|
350
352
|
const ids: string[] = jwt?.adminOf ?? []
|
|
351
|
-
return ids.includes(
|
|
353
|
+
return ids.includes(workspaceId)
|
|
352
354
|
}
|
|
353
355
|
}
|
|
354
356
|
```
|
|
@@ -380,7 +382,7 @@ Use conditions only for roles you allow, and put them last.
|
|
|
380
382
|
`initContext`, and never declare request data whose name matches an ACL
|
|
381
383
|
context key.
|
|
382
384
|
- Scope by role, not by a check inside the method. For an endpoint that acts on
|
|
383
|
-
one
|
|
385
|
+
one workspace, use a role that checks the caller's rights on the `workspaceId`
|
|
384
386
|
argument, rather than a generic role plus a lookup.
|
|
385
387
|
|
|
386
388
|
## Body parsing
|
|
@@ -415,9 +417,7 @@ Use this to switch endpoints off per environment without editing the config.
|
|
|
415
417
|
new Server({
|
|
416
418
|
port: 3838,
|
|
417
419
|
path: '/api',
|
|
418
|
-
model: {
|
|
419
|
-
/* ModelManager config */
|
|
420
|
-
},
|
|
420
|
+
model: {/* ModelManager config */},
|
|
421
421
|
})
|
|
422
422
|
new Server(config, existingModelManager)
|
|
423
423
|
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-data-parser.d.ts","sourceRoot":"","sources":["../../src/remote-object/request-data-parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAM/C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,YAAY,CAAgD;gBAExD,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAOxE,gBAAgB,CACd,iBAAiB,EAAE,GAAG,EACtB,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,GACrB;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAgBzB,OAAO,CAAC,mBAAmB;
|
|
1
|
+
{"version":3,"file":"request-data-parser.d.ts","sourceRoot":"","sources":["../../src/remote-object/request-data-parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAM/C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,YAAY,CAAgD;gBAExD,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAOxE,gBAAgB,CACd,iBAAiB,EAAE,GAAG,EACtB,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,GACrB;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAgBzB,OAAO,CAAC,mBAAmB;IAkD3B,mBAAmB,CAAC,iBAAiB,EAAE,GAAG,GAAG,GAAG;IA8B1C,mBAAmB,CACvB,WAAW,EAAE,GAAG,EAChB,cAAc,EAAE,GAAG,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;CAQ/C"}
|
|
@@ -31,6 +31,14 @@ class RequestDataParser {
|
|
|
31
31
|
case 'header':
|
|
32
32
|
value = container.request.get(srcPath);
|
|
33
33
|
break;
|
|
34
|
+
case 'request':
|
|
35
|
+
value = om_1.ObjectPathAccessor.getPath(srcPath, container.request);
|
|
36
|
+
if (value === undefined) {
|
|
37
|
+
value = srcPath
|
|
38
|
+
.split('.')
|
|
39
|
+
.reduce((acc, key) => acc === null || acc === void 0 ? void 0 : acc[key], container.request);
|
|
40
|
+
}
|
|
41
|
+
break;
|
|
34
42
|
case 'container':
|
|
35
43
|
value = om_1.ObjectPathAccessor.getPath(srcPath, container);
|
|
36
44
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-data-parser.js","sourceRoot":"","sources":["../../src/remote-object/request-data-parser.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"request-data-parser.js","sourceRoot":"","sources":["../../src/remote-object/request-data-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { HttpServerManagerInterface, LoggerInterface } from './interfaces';
|
|
|
4
4
|
import { ServerConfig } from '../server-config';
|
|
5
5
|
export declare class HttpServerManager implements HttpServerManagerInterface {
|
|
6
6
|
private server;
|
|
7
|
+
private connections;
|
|
7
8
|
private app;
|
|
8
9
|
private config;
|
|
9
10
|
private logger;
|
|
@@ -11,6 +12,6 @@ export declare class HttpServerManager implements HttpServerManagerInterface {
|
|
|
11
12
|
constructor(app: express.Application, config: ServerConfig, logger: LoggerInterface, onShutdown: () => Promise<void>);
|
|
12
13
|
start(): Promise<void>;
|
|
13
14
|
shutdown(): Promise<any>;
|
|
14
|
-
getServer(): _Http.Server
|
|
15
|
+
getServer(): _Http.Server;
|
|
15
16
|
}
|
|
16
17
|
//# sourceMappingURL=http-server-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server-manager.d.ts","sourceRoot":"","sources":["../../src/server/http-server-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"http-server-manager.d.ts","sourceRoot":"","sources":["../../src/server/http-server-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,CAAA;AAE7B,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAM/C,qBAAa,iBAAkB,YAAW,0BAA0B;IAClE,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,GAAG,CAAqB;IAChC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,UAAU,CAAqB;gBAGrC,GAAG,EAAE,OAAO,CAAC,WAAW,EACxB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,eAAe,EACvB,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAa3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBtB,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;IAkB9B,SAAS,IAAI,KAAK,CAAC,MAAM;CAG1B"}
|
|
@@ -1,16 +1,55 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.HttpServerManager = void 0;
|
|
37
|
+
const _Http = __importStar(require("http"));
|
|
4
38
|
class HttpServerManager {
|
|
5
39
|
constructor(app, config, logger, onShutdown) {
|
|
40
|
+
this.connections = new Set();
|
|
6
41
|
this.app = app;
|
|
7
42
|
this.config = config;
|
|
8
43
|
this.logger = logger;
|
|
9
44
|
this.onShutdown = onShutdown;
|
|
10
|
-
this.server =
|
|
45
|
+
this.server = _Http.createServer(this.app);
|
|
46
|
+
this.server.on('connection', (socket) => {
|
|
47
|
+
this.connections.add(socket);
|
|
48
|
+
socket.on('close', () => this.connections.delete(socket));
|
|
49
|
+
});
|
|
11
50
|
}
|
|
12
51
|
async start() {
|
|
13
|
-
this.server
|
|
52
|
+
this.server.listen(this.config.port, () => {
|
|
14
53
|
this.logger.info('Listening on port ' + this.config.port);
|
|
15
54
|
});
|
|
16
55
|
process.on('SIGINT', () => {
|
|
@@ -30,7 +69,18 @@ class HttpServerManager {
|
|
|
30
69
|
}
|
|
31
70
|
async shutdown() {
|
|
32
71
|
this.logger.info('Shutting down');
|
|
33
|
-
return
|
|
72
|
+
return new Promise((resolve, reject) => {
|
|
73
|
+
this.server.close((error) => {
|
|
74
|
+
if (error && error.code !== 'ERR_SERVER_NOT_RUNNING') {
|
|
75
|
+
reject(error);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
resolve();
|
|
79
|
+
});
|
|
80
|
+
for (const socket of this.connections) {
|
|
81
|
+
socket.destroy();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
34
84
|
}
|
|
35
85
|
getServer() {
|
|
36
86
|
return this.server;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server-manager.js","sourceRoot":"","sources":["../../src/server/http-server-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http-server-manager.js","sourceRoot":"","sources":["../../src/server/http-server-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA6B;AAW7B,MAAa,iBAAiB;IAQ5B,YACE,GAAwB,EACxB,MAAoB,EACpB,MAAuB,EACvB,UAA+B;QAVzB,gBAAW,GAAgB,IAAI,GAAG,EAAE,CAAA;QAY1C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC1C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAc,EAAE,EAAE;YAC9C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAC5B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;QAC3D,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;YACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC3D,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACxB,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC1B,UAAU,CAAC;oBACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACjB,CAAC,EAAE,IAAI,CAAC,CAAA;YACV,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACzB,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC1B,UAAU,CAAC;oBACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACjB,CAAC,EAAE,IAAI,CAAC,CAAA;YACV,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QACjC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAA6B,EAAE,EAAE;gBAElD,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;oBACrD,MAAM,CAAC,KAAK,CAAC,CAAA;oBACb,OAAM;gBACR,CAAC;gBACD,OAAO,EAAE,CAAA;YACX,CAAC,CAAC,CAAA;YAEF,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtC,MAAM,CAAC,OAAO,EAAE,CAAA;YAClB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;CACF;AApED,8CAoEC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@datacapy/server",
|
|
3
3
|
"type": "commonjs",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.2.0",
|
|
5
5
|
"description": "Datacapy server: REST API server over the object model",
|
|
6
6
|
"main": "dist/index",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -21,11 +21,11 @@
|
|
|
21
21
|
"@types/bcrypt": "^6.0.0",
|
|
22
22
|
"@types/express": "^5.0.6",
|
|
23
23
|
"@types/jest": "^30.0.0",
|
|
24
|
-
"@types/node": "^
|
|
25
|
-
"eslint": "^10.
|
|
24
|
+
"@types/node": "^26.6.4",
|
|
25
|
+
"eslint": "^10.12.0",
|
|
26
26
|
"husky": "^9.1.7",
|
|
27
27
|
"jest": "^30.5.2",
|
|
28
|
-
"lint-staged": "^
|
|
28
|
+
"lint-staged": "^17.6.0",
|
|
29
29
|
"prettier": "3.9.9",
|
|
30
30
|
"ts-jest": "^29.4.14",
|
|
31
31
|
"ts-node": "^10.9.2",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"body-parser": "^2.3.0",
|
|
38
38
|
"express": "^5.2.1",
|
|
39
39
|
"merge": "^2.1.1",
|
|
40
|
-
"mongodb": "^6.
|
|
41
|
-
"@datacapy/om": "0.
|
|
40
|
+
"mongodb": "^7.6.0",
|
|
41
|
+
"@datacapy/om": "0.2.0"
|
|
42
42
|
},
|
|
43
43
|
"files": [
|
|
44
44
|
"/dist",
|