velocious 1.0.244 → 1.0.246
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 +29 -0
- package/build/src/application.d.ts.map +1 -1
- package/build/src/application.js +5 -1
- package/build/src/authorization/base-resource.d.ts +6 -2
- package/build/src/authorization/base-resource.d.ts.map +1 -1
- package/build/src/authorization/base-resource.js +13 -4
- package/build/src/configuration-types.d.ts +82 -6
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +23 -3
- package/build/src/configuration.d.ts +59 -8
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +112 -16
- package/build/src/current.d.ts +15 -0
- package/build/src/current.d.ts.map +1 -1
- package/build/src/current.js +29 -1
- package/build/src/database/drivers/base.d.ts +13 -0
- package/build/src/database/drivers/base.d.ts.map +1 -1
- package/build/src/database/drivers/base.js +37 -1
- package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
- package/build/src/database/pool/async-tracked-multi-connection.js +16 -6
- package/build/src/database/pool/base.d.ts +17 -13
- package/build/src/database/pool/base.d.ts.map +1 -1
- package/build/src/database/pool/base.js +50 -8
- package/build/src/database/pool/single-multi-use.d.ts.map +1 -1
- package/build/src/database/pool/single-multi-use.js +15 -3
- package/build/src/database/record/index.d.ts +72 -0
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +152 -11
- package/build/src/environment-handlers/base.d.ts +16 -0
- package/build/src/environment-handlers/base.d.ts.map +1 -1
- package/build/src/environment-handlers/base.js +28 -1
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +19 -7
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +59 -27
- package/build/src/environment-handlers/node/cli/commands/server.d.ts +2 -4
- package/build/src/environment-handlers/node/cli/commands/server.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/server.js +2 -1
- package/build/src/environment-handlers/node.d.ts +1 -0
- package/build/src/environment-handlers/node.d.ts.map +1 -1
- package/build/src/environment-handlers/node.js +70 -6
- package/build/src/frontend-model-controller.d.ts +30 -6
- package/build/src/frontend-model-controller.d.ts.map +1 -1
- package/build/src/frontend-model-controller.js +182 -29
- package/build/src/frontend-model-resource/base-resource.d.ts +79 -17
- package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/base-resource.js +111 -21
- package/build/src/frontend-models/base.d.ts +72 -3
- package/build/src/frontend-models/base.d.ts.map +1 -1
- package/build/src/frontend-models/base.js +225 -39
- package/build/src/frontend-models/resource-definition.d.ts +7 -2
- package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
- package/build/src/frontend-models/resource-definition.js +209 -61
- package/build/src/frontend-models/websocket-channel.d.ts +43 -0
- package/build/src/frontend-models/websocket-channel.d.ts.map +1 -0
- package/build/src/frontend-models/websocket-channel.js +148 -0
- package/build/src/frontend-models/websocket-publishers.d.ts +11 -0
- package/build/src/frontend-models/websocket-publishers.d.ts.map +1 -0
- package/build/src/frontend-models/websocket-publishers.js +64 -0
- package/build/src/http-client/websocket-client.d.ts +32 -1
- package/build/src/http-client/websocket-client.d.ts.map +1 -1
- package/build/src/http-client/websocket-client.js +83 -22
- package/build/src/http-server/client/websocket-session.d.ts +15 -3
- package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-session.js +88 -22
- package/build/src/http-server/websocket-channel.d.ts +15 -1
- package/build/src/http-server/websocket-channel.d.ts.map +1 -1
- package/build/src/http-server/websocket-channel.js +17 -3
- package/build/src/http-server/websocket-events-host.d.ts +3 -7
- package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
- package/build/src/http-server/websocket-events-host.js +6 -5
- package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/index.js +3 -6
- package/build/src/routes/hooks/frontend-model-command-route-hook.js +3 -3
- package/build/src/routes/resolver.d.ts +4 -0
- package/build/src/routes/resolver.d.ts.map +1 -1
- package/build/src/routes/resolver.js +34 -10
- package/build/src/utils/with-tracked-stack-async-hooks.d.ts +4 -4
- package/build/src/utils/with-tracked-stack-async-hooks.d.ts.map +1 -1
- package/build/src/utils/with-tracked-stack-async-hooks.js +9 -11
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1554,3 +1554,32 @@ Or require explicit ability passing:
|
|
|
1554
1554
|
```js
|
|
1555
1555
|
const users = await User.accessibleBy(ability).toArray()
|
|
1556
1556
|
```
|
|
1557
|
+
|
|
1558
|
+
# Tenant / elevator support
|
|
1559
|
+
|
|
1560
|
+
Velocious can resolve a request-scoped tenant and override configured database identifiers per tenant for HTTP routes, websocket subscriptions, and websocket event delivery.
|
|
1561
|
+
|
|
1562
|
+
```js
|
|
1563
|
+
import Configuration from "velocious/build/src/configuration.js"
|
|
1564
|
+
|
|
1565
|
+
export default new Configuration({
|
|
1566
|
+
// ...
|
|
1567
|
+
tenantResolver: async ({params, subscription}) => {
|
|
1568
|
+
const projectSlug = subscription?.params?.project_slug || params.project_slug
|
|
1569
|
+
|
|
1570
|
+
if (!projectSlug) return
|
|
1571
|
+
|
|
1572
|
+
return {
|
|
1573
|
+
databaseIdentifiers: ["auditTenant"],
|
|
1574
|
+
projectSlug
|
|
1575
|
+
}
|
|
1576
|
+
},
|
|
1577
|
+
tenantDatabaseResolver: ({databaseConfiguration, identifier, tenant}) => {
|
|
1578
|
+
if (identifier !== "auditTenant" || !tenant?.projectSlug) return
|
|
1579
|
+
|
|
1580
|
+
return {name: `${databaseConfiguration.name}-${tenant.projectSlug}`}
|
|
1581
|
+
}
|
|
1582
|
+
})
|
|
1583
|
+
```
|
|
1584
|
+
|
|
1585
|
+
Use `configuration.runWithTenant(tenant, callback)` or `Current.tenant()` when custom model/database routing needs to read the active tenant manually.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/application.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/application.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AAEH;IACE;;;;;OAKG;IACH,8DAJG;QAAmD,aAAa,EAAxD,OAAO,oBAAoB,EAAE,OAAO;QACL,UAAU,GAAzC,uBAAuB;QACV,IAAI,EAAjB,MAAM;KAChB,EAaA;IAPC,oDAAkC;IAElC,sCAAsC;IACtC,yBADW,uBAAuB,CAC4B;IAE9D,eAA8B;IAC9B,cAAiB;IAGnB,qCAAqC;IACrC,WADc,MAAM,CACW;IAE/B,0DAA0D;IAC1D,cADc,OAAO,CAAC,IAAI,CAAC,CAW1B;IAED,4CAA4C;IAC5C,YADc,OAAO,CAOpB;IAED;;;OAGG;IACH,cAHW,MAAa,IAAI,GACf,OAAO,CAAC,IAAI,CAAC,CAUzB;IAED,0DAA0D;IAC1D,mBADc,OAAO,CAAC,IAAI,CAAC,CAe1B;IAJC,uBAAuD;IAMzD,0DAA0D;IAC1D,QADc,OAAO,CAAC,IAAI,CAAC,CAK1B;IAED,0CAA0C;IAC1C,yBADc,IAAI,CAOjB;IAED,0DAA0D;IAC1D,QADc,OAAO,CAAC,IAAI,CAAC,CAK1B;IAFG,uDAA0B;CAG/B;;;;;iBAxGa,MAAM;;;;WACN,MAAM;;;;WACN,MAAM;;mBATD,aAAa;uBACT,wBAAwB"}
|
package/build/src/application.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import AppRoutes from "./routes/app-routes.js";
|
|
3
3
|
import Logger from "./logger.js";
|
|
4
4
|
import HttpServer from "./http-server/index.js";
|
|
5
|
+
import websocketEventsHost from "./http-server/websocket-events-host.js";
|
|
5
6
|
import restArgsError from "./utils/rest-args-error.js";
|
|
6
7
|
/**
|
|
7
8
|
* @typedef {object} HttpServerConfiguration
|
|
@@ -62,6 +63,9 @@ export default class VelociousApplication {
|
|
|
62
63
|
const { configuration, httpServerConfiguration } = this;
|
|
63
64
|
const port = httpServerConfiguration.port || 3006;
|
|
64
65
|
await this.logger.debug(`Starting server on port ${port}`);
|
|
66
|
+
if (!configuration.getWebsocketEvents()) {
|
|
67
|
+
configuration.setWebsocketEvents(/** @type {any} */ (websocketEventsHost));
|
|
68
|
+
}
|
|
65
69
|
this.httpServer = new HttpServer({ configuration, port });
|
|
66
70
|
this.httpServer.events.on("close", this.onHttpServerClose);
|
|
67
71
|
await this.httpServer.start();
|
|
@@ -86,4 +90,4 @@ export default class VelociousApplication {
|
|
|
86
90
|
});
|
|
87
91
|
}
|
|
88
92
|
}
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBwbGljYXRpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sU0FBUyxNQUFNLHdCQUF3QixDQUFBO0FBQzlDLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQTtBQUNoQyxPQUFPLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQTtBQUMvQyxPQUFPLG1CQUFtQixNQUFNLHdDQUF3QyxDQUFBO0FBQ3hFLE9BQU8sYUFBYSxNQUFNLDRCQUE0QixDQUFBO0FBRXREOzs7OztHQUtHO0FBRUgsTUFBTSxDQUFDLE9BQU8sT0FBTyxvQkFBb0I7SUFDdkM7Ozs7O09BS0c7SUFDSCxZQUFZLEVBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLEVBQUM7UUFDeEQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXZCLElBQUksQ0FBQyxhQUFhO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO1FBRWhFLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBRWxDLHNDQUFzQztRQUN0QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsVUFBVSxJQUFJLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBQyxDQUFBO1FBRTlELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUE7SUFDbkIsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUUvQiwwREFBMEQ7SUFDMUQsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBRTVELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFDLENBQUMsQ0FBQTtRQUUzRCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUVwQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLENBQUM7WUFDcEQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixFQUFFLENBQUE7UUFDbkQsQ0FBQztJQUNILENBQUM7SUFFRCw0Q0FBNEM7SUFDNUMsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQTtRQUNwQyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRO1FBQ2hCLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO1FBRTVCLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxFQUFFLENBQUE7UUFDbEIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ2IsQ0FBQztJQUNILENBQUM7SUFFRCwwREFBMEQ7SUFDMUQsS0FBSyxDQUFDLGVBQWU7UUFDbkIsTUFBTSxFQUFDLGFBQWEsRUFBRSx1QkFBdUIsRUFBQyxHQUFHLElBQUksQ0FBQTtRQUNyRCxNQUFNLElBQUksR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFBO1FBRWpELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLElBQUksRUFBRSxDQUFDLENBQUE7UUFFMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7WUFDeEMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFBO1FBQzVFLENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsYUFBYSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDdkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtRQUUxRCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDL0IsQ0FBQztJQUVELDBEQUEwRDtJQUMxRCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtRQUMxQyxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUE7UUFDN0IsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLHdCQUF3QixFQUFFLENBQUE7SUFDckQsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxpQkFBaUIsR0FBRyxHQUFHLEVBQUU7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtRQUV2QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDcEIsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELDBEQUEwRDtJQUMxRCxJQUFJO1FBQ0YsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFBO1FBQzVCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBBcHBSb3V0ZXMgZnJvbSBcIi4vcm91dGVzL2FwcC1yb3V0ZXMuanNcIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXIuanNcIlxuaW1wb3J0IEh0dHBTZXJ2ZXIgZnJvbSBcIi4vaHR0cC1zZXJ2ZXIvaW5kZXguanNcIlxuaW1wb3J0IHdlYnNvY2tldEV2ZW50c0hvc3QgZnJvbSBcIi4vaHR0cC1zZXJ2ZXIvd2Vic29ja2V0LWV2ZW50cy1ob3N0LmpzXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gSHR0cFNlcnZlckNvbmZpZ3VyYXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4V29ya2Vyc10gLSBNYXggd29ya2VyIHRocmVhZHMgZm9yIHRoZSBIVFRQIHNlcnZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaG9zdF0gLSBIb3N0bmFtZSB0byBiaW5kIHRoZSBIVFRQIHNlcnZlciB0by5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9ydF0gLSBQb3J0IHRvIGJpbmQgdGhlIEhUVFAgc2VydmVyIHRvLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0FwcGxpY2F0aW9uIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7SHR0cFNlcnZlckNvbmZpZ3VyYXRpb259IFthcmdzLmh0dHBTZXJ2ZXJdIC0gSHR0cCBzZXJ2ZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnR5cGUgLSBUeXBlIGlkZW50aWZpZXIuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgaHR0cFNlcnZlciwgdHlwZSwgLi4ucmVzdEFyZ3N9KSB7XG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGlmICghY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZFwiKVxuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuXG4gICAgLyoqIEB0eXBlIHtIdHRwU2VydmVyQ29uZmlndXJhdGlvbn0gKi9cbiAgICB0aGlzLmh0dHBTZXJ2ZXJDb25maWd1cmF0aW9uID0gaHR0cFNlcnZlciA/PyB7cG9ydDogdW5kZWZpbmVkfVxuXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgTG9nZ2VyKHRoaXMpXG4gICAgdGhpcy5fdHlwZSA9IHR5cGVcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSB0eXBlLiAgKi9cbiAgZ2V0VHlwZSgpIHsgcmV0dXJuIHRoaXMuX3R5cGUgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLiAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZSgpIHtcbiAgICBjb25zdCByb3V0ZXMgPSBhd2FpdCBBcHBSb3V0ZXMuZ2V0Um91dGVzKHRoaXMuY29uZmlndXJhdGlvbilcblxuICAgIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5pbml0aWFsaXplKHt0eXBlOiB0aGlzLmdldFR5cGUoKX0pXG5cbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2V0Um91dGVzKHJvdXRlcylcblxuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uLmlzRGF0YWJhc2VQb29sSW5pdGlhbGl6ZWQoKSkge1xuICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmluaXRpYWxpemVEYXRhYmFzZVBvb2woKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGFjdGl2ZS4gICovXG4gIGlzQWN0aXZlKCkge1xuICAgIGlmICh0aGlzLmh0dHBTZXJ2ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2ZXI/LmlzQWN0aXZlKClcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCkgOiB2b2lkfSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcnVuKGNhbGxiYWNrKSB7XG4gICAgYXdhaXQgdGhpcy5zdGFydEh0dHBTZXJ2ZXIoKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNhbGxiYWNrKClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5zdG9wKClcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS4gICovXG4gIGFzeW5jIHN0YXJ0SHR0cFNlcnZlcigpIHtcbiAgICBjb25zdCB7Y29uZmlndXJhdGlvbiwgaHR0cFNlcnZlckNvbmZpZ3VyYXRpb259ID0gdGhpc1xuICAgIGNvbnN0IHBvcnQgPSBodHRwU2VydmVyQ29uZmlndXJhdGlvbi5wb3J0IHx8IDMwMDZcblxuICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKGBTdGFydGluZyBzZXJ2ZXIgb24gcG9ydCAke3BvcnR9YClcblxuICAgIGlmICghY29uZmlndXJhdGlvbi5nZXRXZWJzb2NrZXRFdmVudHMoKSkge1xuICAgICAgY29uZmlndXJhdGlvbi5zZXRXZWJzb2NrZXRFdmVudHMoLyoqIEB0eXBlIHthbnl9ICovICh3ZWJzb2NrZXRFdmVudHNIb3N0KSlcbiAgICB9XG5cbiAgICB0aGlzLmh0dHBTZXJ2ZXIgPSBuZXcgSHR0cFNlcnZlcih7Y29uZmlndXJhdGlvbiwgcG9ydH0pXG4gICAgdGhpcy5odHRwU2VydmVyLmV2ZW50cy5vbihcImNsb3NlXCIsIHRoaXMub25IdHRwU2VydmVyQ2xvc2UpXG5cbiAgICBhd2FpdCB0aGlzLmh0dHBTZXJ2ZXIuc3RhcnQoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuICAqL1xuICBhc3luYyBzdG9wKCkge1xuICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKFwiU3RvcHBpbmcgc2VydmVyXCIpXG4gICAgYXdhaXQgdGhpcy5odHRwU2VydmVyPy5zdG9wKClcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24uY2xvc2VEYXRhYmFzZUNvbm5lY3Rpb25zKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuICAqL1xuICBvbkh0dHBTZXJ2ZXJDbG9zZSA9ICgpID0+IHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIkhUVFAgc2VydmVyIGNsb3NlZFwiKVxuXG4gICAgaWYgKHRoaXMud2FpdFJlc29sdmUpIHtcbiAgICAgIHRoaXMud2FpdFJlc29sdmUoKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLiAgKi9cbiAgd2FpdCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMud2FpdFJlc29sdmUgPSByZXNvbHZlXG4gICAgfSlcbiAgfVxufVxuIl19
|
|
@@ -8,12 +8,12 @@ export default class AuthorizationBaseResource {
|
|
|
8
8
|
static modelClass(): typeof import("../database/record/index.js").default | undefined;
|
|
9
9
|
/**
|
|
10
10
|
* @param {object} args - Resource args.
|
|
11
|
-
* @param {import("./ability.js").default} args.ability - Ability instance.
|
|
11
|
+
* @param {import("./ability.js").default} [args.ability] - Ability instance.
|
|
12
12
|
* @param {Record<string, any>} [args.context] - Ability context.
|
|
13
13
|
* @param {Record<string, any>} [args.locals] - Ability locals.
|
|
14
14
|
*/
|
|
15
15
|
constructor({ ability, context, locals }: {
|
|
16
|
-
ability
|
|
16
|
+
ability?: import("./ability.js").default;
|
|
17
17
|
context?: Record<string, any>;
|
|
18
18
|
locals?: Record<string, any>;
|
|
19
19
|
});
|
|
@@ -40,6 +40,10 @@ export default class AuthorizationBaseResource {
|
|
|
40
40
|
action: string;
|
|
41
41
|
modelClass: typeof import("../database/record/index.js").default;
|
|
42
42
|
}) => void | import("../database/query/model-class-query.js").default<any>)): void;
|
|
43
|
+
/**
|
|
44
|
+
* @returns {import("./ability.js").default} - Ability instance.
|
|
45
|
+
*/
|
|
46
|
+
requiredAbility(): import("./ability.js").default;
|
|
43
47
|
/**
|
|
44
48
|
* @returns {typeof import("../database/record/index.js").default} - Model class handled by this resource.
|
|
45
49
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-resource.d.ts","sourceRoot":"","sources":["../../../src/authorization/base-resource.js"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E;IACE,+EAA+E;IAC/E,mBADW,cAAc,6BAA6B,EAAE,OAAO,GAAG,SAAS,CAC9C;IAc7B;;OAEG;IACH,qBAFa,cAAc,6BAA6B,EAAE,OAAO,GAAG,SAAS,CAI5E;IAjBD;;;;;OAKG;IACH,0CAJG;
|
|
1
|
+
{"version":3,"file":"base-resource.d.ts","sourceRoot":"","sources":["../../../src/authorization/base-resource.js"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E;IACE,+EAA+E;IAC/E,mBADW,cAAc,6BAA6B,EAAE,OAAO,GAAG,SAAS,CAC9C;IAc7B;;OAEG;IACH,qBAFa,cAAc,6BAA6B,EAAE,OAAO,GAAG,SAAS,CAI5E;IAjBD;;;;;OAKG;IACH,0CAJG;QAA8C,OAAO,GAA7C,OAAO,cAAc,EAAE,OAAO;QACH,OAAO,GAAlC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;QACQ,MAAM,GAAjC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;KAC7B,EAKA;IAHC,wCAAsB;IACtB,6BAAsB;IACtB,4BAAoB;IAUtB;;;;OAIG;IACH,aAJW,MAAM,GAAG,MAAM,EAAE,eACjB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,wCAAwC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAAC,OAAO,EAAE,OAAO,cAAc,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,cAAc,6BAA6B,EAAE,OAAO,CAAA;KAAC,KAAK,IAAI,GAAG,OAAO,wCAAwC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAChT,IAAI,CAKhB;IAED;;;;OAIG;IACH,gBAJW,MAAM,GAAG,MAAM,EAAE,eACjB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,wCAAwC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAAC,OAAO,EAAE,OAAO,cAAc,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,cAAc,6BAA6B,EAAE,OAAO,CAAA;KAAC,KAAK,IAAI,GAAG,OAAO,wCAAwC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAChT,IAAI,CAKhB;IAED;;OAEG;IACH,mBAFa,OAAO,cAAc,EAAE,OAAO,CAQ1C;IAED;;OAEG;IACH,sBAFa,cAAc,6BAA6B,EAAE,OAAO,CAUhE;IAED;;;;;OAKG;IACH,8DAJG;QAAsB,UAAU,EAAxB,OAAO;QACgB,UAAU,EAAjC,KAAK,GAAG,QAAQ;KACxB,GAAU,IAAI,CAMhB;IAED,wDAAwD;IACxD,cADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAGhC;IAED,uDAAuD;IACvD,aADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAGhC;IAED,kDAAkD;IAClD,eADc,GAAG,CAGhB;IAED,uKAAuK;IACvK,WADc,OAAO,kCAAkC,EAAE,OAAO,GAAG,OAAO,4CAA4C,EAAE,OAAO,GAAG,SAAS,CAG1I;IAED,wEAAwE;IACxE,UADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAG5C;IAED,qEAAqE;IACrE,aADc,IAAI,CAGjB;CACF"}
|
|
@@ -5,7 +5,7 @@ export default class AuthorizationBaseResource {
|
|
|
5
5
|
static ModelClass = undefined;
|
|
6
6
|
/**
|
|
7
7
|
* @param {object} args - Resource args.
|
|
8
|
-
* @param {import("./ability.js").default} args.ability - Ability instance.
|
|
8
|
+
* @param {import("./ability.js").default} [args.ability] - Ability instance.
|
|
9
9
|
* @param {Record<string, any>} [args.context] - Ability context.
|
|
10
10
|
* @param {Record<string, any>} [args.locals] - Ability locals.
|
|
11
11
|
*/
|
|
@@ -27,7 +27,7 @@ export default class AuthorizationBaseResource {
|
|
|
27
27
|
*/
|
|
28
28
|
can(actions, conditions) {
|
|
29
29
|
this.assertResourceConditionsSignature({ conditions, methodName: "can" });
|
|
30
|
-
this.
|
|
30
|
+
this.requiredAbility().can(actions, this.requiredModelClass(), conditions);
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
33
|
* @param {string | string[]} actions - Ability action(s).
|
|
@@ -36,7 +36,16 @@ export default class AuthorizationBaseResource {
|
|
|
36
36
|
*/
|
|
37
37
|
cannot(actions, conditions) {
|
|
38
38
|
this.assertResourceConditionsSignature({ conditions, methodName: "cannot" });
|
|
39
|
-
this.
|
|
39
|
+
this.requiredAbility().cannot(actions, this.requiredModelClass(), conditions);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @returns {import("./ability.js").default} - Ability instance.
|
|
43
|
+
*/
|
|
44
|
+
requiredAbility() {
|
|
45
|
+
if (!this.ability) {
|
|
46
|
+
throw new Error(`${this.constructor.name} requires an ability instance before defining abilities.`);
|
|
47
|
+
}
|
|
48
|
+
return this.ability;
|
|
40
49
|
}
|
|
41
50
|
/**
|
|
42
51
|
* @returns {typeof import("../database/record/index.js").default} - Model class handled by this resource.
|
|
@@ -84,4 +93,4 @@ export default class AuthorizationBaseResource {
|
|
|
84
93
|
// No-op by default.
|
|
85
94
|
}
|
|
86
95
|
}
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1yZXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRob3JpemF0aW9uL2Jhc2UtcmVzb3VyY2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLDZFQUE2RTtBQUM3RSxNQUFNLENBQUMsT0FBTyxPQUFPLHlCQUF5QjtJQUM1QywrRUFBK0U7SUFDL0UsTUFBTSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUE7SUFFN0I7Ozs7O09BS0c7SUFDSCxZQUFZLEVBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBQztRQUM5QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsVUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQTtJQUN4QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBQyxPQUFPLEVBQUUsVUFBVTtRQUNyQixJQUFJLENBQUMsaUNBQWlDLENBQUMsRUFBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUE7UUFDdkUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDNUUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsT0FBTyxFQUFFLFVBQVU7UUFDeEIsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLEVBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO1FBQzFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQy9FLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWU7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksMERBQTBELENBQUMsQ0FBQTtRQUNyRyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQjtRQUNoQixNQUFNLFVBQVUsR0FBRywrQ0FBK0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUVsRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxnRUFBZ0UsQ0FBQyxDQUFBO1FBQzNHLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQTtJQUNuQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpQ0FBaUMsQ0FBQyxFQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUM7UUFDeEQsSUFBSSxPQUFPLFVBQVUsS0FBSyxVQUFVLElBQUksWUFBWSxJQUFJLFVBQVUsSUFBSSxXQUFXLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEcsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLFVBQVUsMkZBQTJGLENBQUMsQ0FBQTtRQUNwSixDQUFDO0lBQ0gsQ0FBQztJQUVELHdEQUF3RDtJQUN4RCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFBO0lBQ3JCLENBQUM7SUFFRCx1REFBdUQ7SUFDdkQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQTtJQUNwQixDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFBO0lBQ2pDLENBQUM7SUFFRCx1S0FBdUs7SUFDdkssT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUE7SUFDN0IsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQTtJQUM1QixDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLFNBQVM7UUFDUCxvQkFBb0I7SUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKiogQmFzZSBjbGFzcyBmb3IgYXV0aG9yaXphdGlvbiByZXNvdXJjZXMgZGVmaW5pbmcgYWJpbGl0aWVzIGZvciBhIG1vZGVsLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXV0aG9yaXphdGlvbkJhc2VSZXNvdXJjZSB7XG4gIC8qKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcIi4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSAqL1xuICBzdGF0aWMgTW9kZWxDbGFzcyA9IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIFJlc291cmNlIGFyZ3MuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9hYmlsaXR5LmpzXCIpLmRlZmF1bHR9IFthcmdzLmFiaWxpdHldIC0gQWJpbGl0eSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbYXJncy5jb250ZXh0XSAtIEFiaWxpdHkgY29udGV4dC5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbYXJncy5sb2NhbHNdIC0gQWJpbGl0eSBsb2NhbHMuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7YWJpbGl0eSwgY29udGV4dCA9IHt9LCBsb2NhbHMgPSB7fX0pIHtcbiAgICB0aGlzLmFiaWxpdHkgPSBhYmlsaXR5XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICAgIHRoaXMubG9jYWxzID0gbG9jYWxzXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3R5cGVvZiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gLSBNb2RlbCBjbGFzcyBoYW5kbGVkIGJ5IHRoaXMgcmVzb3VyY2UuXG4gICAqL1xuICBzdGF0aWMgbW9kZWxDbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5Nb2RlbENsYXNzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gYWN0aW9ucyAtIEFiaWxpdHkgYWN0aW9uKHMpLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmcgfCAoKHF1ZXJ5OiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9xdWVyeS9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0PGFueT4sIGFyZ3M6IHthYmlsaXR5OiBpbXBvcnQoXCIuL2FiaWxpdHkuanNcIikuZGVmYXVsdCwgYWN0aW9uOiBzdHJpbmcsIG1vZGVsQ2xhc3M6IHR5cGVvZiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0pID0+IHZvaWQgfCBpbXBvcnQoXCIuLi9kYXRhYmFzZS9xdWVyeS9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0PGFueT4pfSBbY29uZGl0aW9uc10gLSBDb25kaXRpb25zLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBjYW4oYWN0aW9ucywgY29uZGl0aW9ucykge1xuICAgIHRoaXMuYXNzZXJ0UmVzb3VyY2VDb25kaXRpb25zU2lnbmF0dXJlKHtjb25kaXRpb25zLCBtZXRob2ROYW1lOiBcImNhblwifSlcbiAgICB0aGlzLnJlcXVpcmVkQWJpbGl0eSgpLmNhbihhY3Rpb25zLCB0aGlzLnJlcXVpcmVkTW9kZWxDbGFzcygpLCBjb25kaXRpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119IGFjdGlvbnMgLSBBYmlsaXR5IGFjdGlvbihzKS5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgc3RyaW5nIHwgKChxdWVyeTogaW1wb3J0KFwiLi4vZGF0YWJhc2UvcXVlcnkvbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdDxhbnk+LCBhcmdzOiB7YWJpbGl0eTogaW1wb3J0KFwiLi9hYmlsaXR5LmpzXCIpLmRlZmF1bHQsIGFjdGlvbjogc3RyaW5nLCBtb2RlbENsYXNzOiB0eXBlb2YgaW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9KSA9PiB2b2lkIHwgaW1wb3J0KFwiLi4vZGF0YWJhc2UvcXVlcnkvbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdDxhbnk+KX0gW2NvbmRpdGlvbnNdIC0gQ29uZGl0aW9ucy5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgY2Fubm90KGFjdGlvbnMsIGNvbmRpdGlvbnMpIHtcbiAgICB0aGlzLmFzc2VydFJlc291cmNlQ29uZGl0aW9uc1NpZ25hdHVyZSh7Y29uZGl0aW9ucywgbWV0aG9kTmFtZTogXCJjYW5ub3RcIn0pXG4gICAgdGhpcy5yZXF1aXJlZEFiaWxpdHkoKS5jYW5ub3QoYWN0aW9ucywgdGhpcy5yZXF1aXJlZE1vZGVsQ2xhc3MoKSwgY29uZGl0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9hYmlsaXR5LmpzXCIpLmRlZmF1bHR9IC0gQWJpbGl0eSBpbnN0YW5jZS5cbiAgICovXG4gIHJlcXVpcmVkQWJpbGl0eSgpIHtcbiAgICBpZiAoIXRoaXMuYWJpbGl0eSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gcmVxdWlyZXMgYW4gYWJpbGl0eSBpbnN0YW5jZSBiZWZvcmUgZGVmaW5pbmcgYWJpbGl0aWVzLmApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWJpbGl0eVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt0eXBlb2YgaW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IC0gTW9kZWwgY2xhc3MgaGFuZGxlZCBieSB0aGlzIHJlc291cmNlLlxuICAgKi9cbiAgcmVxdWlyZWRNb2RlbENsYXNzKCkge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSAvKiogQHR5cGUge3R5cGVvZiBBdXRob3JpemF0aW9uQmFzZVJlc291cmNlfSAqLyAodGhpcy5jb25zdHJ1Y3RvcikubW9kZWxDbGFzcygpXG5cbiAgICBpZiAoIW1vZGVsQ2xhc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IG11c3QgZGVmaW5lIHN0YXRpYyBNb2RlbENsYXNzIGJlZm9yZSBjYWxsaW5nIGFiaWxpdHkgaGVscGVycy5gKVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlbENsYXNzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBTaWduYXR1cmUgYXJncy5cbiAgICogQHBhcmFtIHt1bmtub3dufSBhcmdzLmNvbmRpdGlvbnMgLSBDb25kaXRpb25zIHZhbHVlLlxuICAgKiBAcGFyYW0ge1wiY2FuXCIgfCBcImNhbm5vdFwifSBhcmdzLm1ldGhvZE5hbWUgLSBNZXRob2QgbmFtZS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBhc3NlcnRSZXNvdXJjZUNvbmRpdGlvbnNTaWduYXR1cmUoe2NvbmRpdGlvbnMsIG1ldGhvZE5hbWV9KSB7XG4gICAgaWYgKHR5cGVvZiBjb25kaXRpb25zID09PSBcImZ1bmN0aW9uXCIgJiYgXCJwcmltYXJ5S2V5XCIgaW4gY29uZGl0aW9ucyAmJiBcIl9uZXdRdWVyeVwiIGluIGNvbmRpdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9LiR7bWV0aG9kTmFtZX0oLi4uKSBubyBsb25nZXIgYWNjZXB0cyBhIG1vZGVsIGNsYXNzLiBEZWZpbmUgc3RhdGljIE1vZGVsQ2xhc3MgYW5kIHBhc3Mgb25seSBjb25kaXRpb25zLmApXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAtIEFiaWxpdHkgY29udGV4dC4gKi9cbiAgZ2V0Q29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0XG4gIH1cblxuICAvKiogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGFueT59IC0gQWJpbGl0eSBsb2NhbHMuICovXG4gIGdldExvY2FscygpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbHNcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7YW55fSAtIEN1cnJlbnQgdXNlciBmcm9tIGNvbnRleHQuICovXG4gIGN1cnJlbnRVc2VyKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQuY3VycmVudFVzZXJcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4uL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSAtIFJlcXVlc3QgZnJvbSBjb250ZXh0LiAqL1xuICByZXF1ZXN0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQucmVxdWVzdFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkfSAtIFBhcmFtcyBmcm9tIGNvbnRleHQuICovXG4gIHBhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LnBhcmFtc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAtIEltcGxlbWVudCBpbiBzdWJjbGFzc2VzIHRvIGRlZmluZSBhYmlsaXRpZXMuICovXG4gIGFiaWxpdGllcygpIHtcbiAgICAvLyBOby1vcCBieSBkZWZhdWx0LlxuICB9XG59XG4iXX0=
|
|
@@ -150,13 +150,23 @@
|
|
|
150
150
|
/**
|
|
151
151
|
* @typedef {object} FrontendModelResourceConfiguration
|
|
152
152
|
* @property {string[] | Record<string, FrontendModelAttributeConfiguration | import("./database/drivers/base-column.js").default | boolean>} attributes - Attributes to expose on the frontend model.
|
|
153
|
-
* @property {FrontendModelResourceAbilitiesConfiguration} abilities - Ability actions keyed by frontend command (`index`, `find`, `create`, `update`, `destroy`).
|
|
153
|
+
* @property {FrontendModelResourceAbilitiesConfiguration | string[]} abilities - Ability actions keyed by frontend command (`index`, `find`, `create`, `update`, `destroy`) or shorthand action list (for example `["create", "read", "update", "destroy"]`).
|
|
154
154
|
* @property {Record<string, FrontendModelAttachmentConfiguration>} [attachments] - Attachment helpers keyed by attachment name.
|
|
155
|
-
* @property {Record<string, string>} [commands] -
|
|
155
|
+
* @property {Record<string, string> | string[]} [commands] - Legacy command names keyed by action (`index`, `find`, `create`, `update`, `destroy`, `attach`, `download`, `url`) or shorthand command list using default names.
|
|
156
|
+
* @property {Record<string, string> | string[]} [collectionCommands] - Collection command names keyed by action (`index`, `create`) or shorthand command list using default names.
|
|
157
|
+
* @property {Record<string, string> | string[]} [memberCommands] - Member command names keyed by action (`find`, `update`, `destroy`, `attach`, `download`, `url`) or shorthand command list using default names.
|
|
156
158
|
* @property {Record<string, FrontendModelRelationshipConfiguration>} [relationships] - Relationship helpers to generate for frontend model files.
|
|
157
159
|
* @property {string} [path] - Optional legacy HTTP path prefix used by direct frontend model commands.
|
|
158
160
|
* @property {FrontendModelResourceServerConfiguration} [server] - Optional legacy backend behavior overrides for built-in frontend actions.
|
|
159
161
|
*/
|
|
162
|
+
/**
|
|
163
|
+
* @typedef {Omit<FrontendModelResourceConfiguration, "abilities" | "commands" | "collectionCommands" | "memberCommands"> & {
|
|
164
|
+
* abilities: FrontendModelResourceAbilitiesConfiguration
|
|
165
|
+
* commands: Record<string, string>
|
|
166
|
+
* collectionCommands: Record<string, string>
|
|
167
|
+
* memberCommands: Record<string, string>
|
|
168
|
+
* }} NormalizedFrontendModelResourceConfiguration
|
|
169
|
+
*/
|
|
160
170
|
/**
|
|
161
171
|
* @typedef {typeof import("./frontend-model-resource/base-resource.js").default} FrontendModelResourceClassType
|
|
162
172
|
*/
|
|
@@ -186,7 +196,9 @@
|
|
|
186
196
|
* @property {string} path - Path to the backend project.
|
|
187
197
|
* @property {string} [frontendModelsOutputPath] - Optional output project path where `src/frontend-models` should be generated.
|
|
188
198
|
* @property {Record<string, FrontendModelResourceDefinition>} [frontendModels] - Frontend model definitions keyed by model class name.
|
|
199
|
+
* @property {{(id: string): {default?: unknown}, keys: () => string[]}} [frontendModelsRequireContext] - Webpack-style require context for frontend model resource files.
|
|
189
200
|
* @property {Record<string, FrontendModelResourceDefinition>} [resources] - Alias for `frontendModels`.
|
|
201
|
+
* @property {{(id: string): {default?: unknown}, keys: () => string[]}} [resourcesRequireContext] - Alias for `frontendModelsRequireContext`.
|
|
190
202
|
*/
|
|
191
203
|
/**
|
|
192
204
|
* @typedef {object} RouteResolverHookArgs
|
|
@@ -215,6 +227,12 @@
|
|
|
215
227
|
/**
|
|
216
228
|
* @typedef {function({configuration: import("./configuration.js").default, params: Record<string, any>, request: import("./http-server/client/request.js").default | import("./http-server/client/websocket-request.js").default, response: import("./http-server/client/response.js").default}) : import("./authorization/ability.js").default | void | Promise<import("./authorization/ability.js").default | void>} AbilityResolverType
|
|
217
229
|
*/
|
|
230
|
+
/**
|
|
231
|
+
* @typedef {function({configuration: import("./configuration.js").default, params: Record<string, any>, request: import("./http-server/client/request.js").default | import("./http-server/client/websocket-request.js").default | undefined, response: import("./http-server/client/response.js").default | undefined, subscription?: {channel: string, params?: Record<string, unknown>}}) : unknown | void | Promise<unknown | void>} TenantResolverType
|
|
232
|
+
*/
|
|
233
|
+
/**
|
|
234
|
+
* @typedef {function({configuration: import("./configuration.js").default, databaseConfiguration: DatabaseConfigurationType, identifier: string, tenant: unknown}) : DatabaseConfigurationType | Partial<DatabaseConfigurationType> | void} TenantDatabaseResolverType
|
|
235
|
+
*/
|
|
218
236
|
/**
|
|
219
237
|
* @typedef {object} ConfigurationArgsType
|
|
220
238
|
* @property {CorsType} [cors] - CORS configuration for the HTTP server.
|
|
@@ -237,6 +255,8 @@
|
|
|
237
255
|
* @property {string[]} locales - Supported locales.
|
|
238
256
|
* @property {LocaleFallbacksType} localeFallbacks - Locale fallback map.
|
|
239
257
|
* @property {StructureSqlConfiguration} [structureSql] - Structure SQL generation configuration.
|
|
258
|
+
* @property {TenantResolverType} [tenantResolver] - Resolver for creating request-scoped tenant context objects.
|
|
259
|
+
* @property {TenantDatabaseResolverType} [tenantDatabaseResolver] - Resolver for deriving tenant-specific database config overrides.
|
|
240
260
|
* @property {string} [testing] - Path to the testing configuration file.
|
|
241
261
|
* @property {number | (() => number)} [timezoneOffsetMinutes] - Default timezone offset in minutes.
|
|
242
262
|
* @property {number | (() => number)} [requestTimeoutMs] - Timeout in seconds for completing a HTTP request.
|
|
@@ -608,17 +628,25 @@ export type FrontendModelResourceConfiguration = {
|
|
|
608
628
|
*/
|
|
609
629
|
attributes: string[] | Record<string, FrontendModelAttributeConfiguration | import("./database/drivers/base-column.js").default | boolean>;
|
|
610
630
|
/**
|
|
611
|
-
* - Ability actions keyed by frontend command (`index`, `find`, `create`, `update`, `destroy`).
|
|
631
|
+
* - Ability actions keyed by frontend command (`index`, `find`, `create`, `update`, `destroy`) or shorthand action list (for example `["create", "read", "update", "destroy"]`).
|
|
612
632
|
*/
|
|
613
|
-
abilities: FrontendModelResourceAbilitiesConfiguration;
|
|
633
|
+
abilities: FrontendModelResourceAbilitiesConfiguration | string[];
|
|
614
634
|
/**
|
|
615
635
|
* - Attachment helpers keyed by attachment name.
|
|
616
636
|
*/
|
|
617
637
|
attachments?: Record<string, FrontendModelAttachmentConfiguration>;
|
|
618
638
|
/**
|
|
619
|
-
* -
|
|
639
|
+
* - Legacy command names keyed by action (`index`, `find`, `create`, `update`, `destroy`, `attach`, `download`, `url`) or shorthand command list using default names.
|
|
640
|
+
*/
|
|
641
|
+
commands?: Record<string, string> | string[];
|
|
642
|
+
/**
|
|
643
|
+
* - Collection command names keyed by action (`index`, `create`) or shorthand command list using default names.
|
|
620
644
|
*/
|
|
621
|
-
|
|
645
|
+
collectionCommands?: Record<string, string> | string[];
|
|
646
|
+
/**
|
|
647
|
+
* - Member command names keyed by action (`find`, `update`, `destroy`, `attach`, `download`, `url`) or shorthand command list using default names.
|
|
648
|
+
*/
|
|
649
|
+
memberCommands?: Record<string, string> | string[];
|
|
622
650
|
/**
|
|
623
651
|
* - Relationship helpers to generate for frontend model files.
|
|
624
652
|
*/
|
|
@@ -632,6 +660,12 @@ export type FrontendModelResourceConfiguration = {
|
|
|
632
660
|
*/
|
|
633
661
|
server?: FrontendModelResourceServerConfiguration;
|
|
634
662
|
};
|
|
663
|
+
export type NormalizedFrontendModelResourceConfiguration = Omit<FrontendModelResourceConfiguration, "abilities" | "commands" | "collectionCommands" | "memberCommands"> & {
|
|
664
|
+
abilities: FrontendModelResourceAbilitiesConfiguration;
|
|
665
|
+
commands: Record<string, string>;
|
|
666
|
+
collectionCommands: Record<string, string>;
|
|
667
|
+
memberCommands: Record<string, string>;
|
|
668
|
+
};
|
|
635
669
|
export type FrontendModelResourceClassType = typeof import("./frontend-model-resource/base-resource.js").default;
|
|
636
670
|
export type FrontendModelResourceDefinition = FrontendModelResourceClassType;
|
|
637
671
|
export type FrontendModelResourceAbilitiesConfiguration = {
|
|
@@ -740,10 +774,28 @@ export type BackendProjectConfiguration = {
|
|
|
740
774
|
* - Frontend model definitions keyed by model class name.
|
|
741
775
|
*/
|
|
742
776
|
frontendModels?: Record<string, FrontendModelResourceDefinition>;
|
|
777
|
+
/**
|
|
778
|
+
* - Webpack-style require context for frontend model resource files.
|
|
779
|
+
*/
|
|
780
|
+
frontendModelsRequireContext?: {
|
|
781
|
+
(id: string): {
|
|
782
|
+
default?: unknown;
|
|
783
|
+
};
|
|
784
|
+
keys: () => string[];
|
|
785
|
+
};
|
|
743
786
|
/**
|
|
744
787
|
* - Alias for `frontendModels`.
|
|
745
788
|
*/
|
|
746
789
|
resources?: Record<string, FrontendModelResourceDefinition>;
|
|
790
|
+
/**
|
|
791
|
+
* - Alias for `frontendModelsRequireContext`.
|
|
792
|
+
*/
|
|
793
|
+
resourcesRequireContext?: {
|
|
794
|
+
(id: string): {
|
|
795
|
+
default?: unknown;
|
|
796
|
+
};
|
|
797
|
+
keys: () => string[];
|
|
798
|
+
};
|
|
747
799
|
};
|
|
748
800
|
export type RouteResolverHookArgs = {
|
|
749
801
|
/**
|
|
@@ -805,6 +857,22 @@ export type AbilityResolverType = (arg0: {
|
|
|
805
857
|
request: import("./http-server/client/request.js").default | import("./http-server/client/websocket-request.js").default;
|
|
806
858
|
response: import("./http-server/client/response.js").default;
|
|
807
859
|
}) => import("./authorization/ability.js").default | void | Promise<import("./authorization/ability.js").default | void>;
|
|
860
|
+
export type TenantResolverType = (arg0: {
|
|
861
|
+
configuration: import("./configuration.js").default;
|
|
862
|
+
params: Record<string, any>;
|
|
863
|
+
request: import("./http-server/client/request.js").default | import("./http-server/client/websocket-request.js").default | undefined;
|
|
864
|
+
response: import("./http-server/client/response.js").default | undefined;
|
|
865
|
+
subscription?: {
|
|
866
|
+
channel: string;
|
|
867
|
+
params?: Record<string, unknown>;
|
|
868
|
+
};
|
|
869
|
+
}) => unknown | void | Promise<unknown | void>;
|
|
870
|
+
export type TenantDatabaseResolverType = (arg0: {
|
|
871
|
+
configuration: import("./configuration.js").default;
|
|
872
|
+
databaseConfiguration: DatabaseConfigurationType;
|
|
873
|
+
identifier: string;
|
|
874
|
+
tenant: unknown;
|
|
875
|
+
}) => DatabaseConfigurationType | Partial<DatabaseConfigurationType> | void;
|
|
808
876
|
export type ConfigurationArgsType = {
|
|
809
877
|
/**
|
|
810
878
|
* - CORS configuration for the HTTP server.
|
|
@@ -893,6 +961,14 @@ export type ConfigurationArgsType = {
|
|
|
893
961
|
* - Structure SQL generation configuration.
|
|
894
962
|
*/
|
|
895
963
|
structureSql?: StructureSqlConfiguration;
|
|
964
|
+
/**
|
|
965
|
+
* - Resolver for creating request-scoped tenant context objects.
|
|
966
|
+
*/
|
|
967
|
+
tenantResolver?: TenantResolverType;
|
|
968
|
+
/**
|
|
969
|
+
* - Resolver for deriving tenant-specific database config overrides.
|
|
970
|
+
*/
|
|
971
|
+
tenantDatabaseResolver?: TenantDatabaseResolverType;
|
|
896
972
|
/**
|
|
897
973
|
* - Path to the testing configuration file.
|
|
898
974
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration-types.d.ts","sourceRoot":"","sources":["../../src/configuration-types.js"],"names":[],"mappings":"AAEA;;GAEG;AAEH;;GAEG;AAEH;;GAEG;AAEH;;;;;;GAMG;AAEH;;GAEG;AAEH;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;GAEG;AAEH;;;;;;GAMG;AAEH;;;;GAIG;AAEH;;;;GAIG;AAEH;;GAEG;AAEH;;;;;;;;;;GAUG;AAEH;;;GAGG;AAEH;;;;;GAKG;AAEH;;;;;GAKG;AAEH;;;;;;GAMG;AAEH;;;GAGG;AAGH;;GAEG;AAEH;;;;;;GAMG;AAEH;;;;;;;GAOG;AAEH;;;GAGG;AAEH
|
|
1
|
+
{"version":3,"file":"configuration-types.d.ts","sourceRoot":"","sources":["../../src/configuration-types.js"],"names":[],"mappings":"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"}
|