@forestadmin/agent 1.1.0-alpha.1 → 1.1.1

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 (36) hide show
  1. package/dist/agent.d.ts +11 -1
  2. package/dist/agent.js +14 -1
  3. package/dist/routes/access/chart.js +8 -4
  4. package/dist/routes/access/count-related.js +3 -3
  5. package/dist/routes/access/count.js +3 -3
  6. package/dist/routes/access/csv-related.js +4 -4
  7. package/dist/routes/access/csv.js +4 -4
  8. package/dist/routes/access/get.js +3 -3
  9. package/dist/routes/access/list-related.js +3 -3
  10. package/dist/routes/access/list.js +3 -3
  11. package/dist/routes/modification/action.d.ts +1 -1
  12. package/dist/routes/modification/action.js +7 -24
  13. package/dist/routes/modification/associate-related.js +3 -3
  14. package/dist/routes/modification/create.js +4 -4
  15. package/dist/routes/modification/delete.js +3 -3
  16. package/dist/routes/modification/dissociate-delete-related.js +3 -3
  17. package/dist/routes/modification/update-field.js +3 -3
  18. package/dist/routes/modification/update-relation.js +5 -5
  19. package/dist/routes/modification/update.js +3 -3
  20. package/dist/routes/security/scope-invalidation.js +2 -2
  21. package/dist/services/index.d.ts +2 -2
  22. package/dist/services/index.js +6 -8
  23. package/dist/services/permissions.d.ts +19 -0
  24. package/dist/services/permissions.js +85 -0
  25. package/dist/types.d.ts +0 -2
  26. package/dist/types.js +1 -1
  27. package/dist/utils/forest-http-api.d.ts +28 -0
  28. package/dist/utils/forest-http-api.js +81 -1
  29. package/dist/utils/options-validator.js +6 -14
  30. package/package.json +4 -4
  31. package/dist/services/authorization/authorization.d.ts +0 -31
  32. package/dist/services/authorization/authorization.js +0 -107
  33. package/dist/services/authorization/index.d.ts +0 -4
  34. package/dist/services/authorization/index.js +0 -11
  35. package/dist/services/authorization/types.d.ts +0 -26
  36. package/dist/services/authorization/types.js +0 -3
@@ -1,31 +0,0 @@
1
- import { Context } from 'koa';
2
- import { Collection, ConditionTree } from '@forestadmin/datasource-toolkit';
3
- import { ForestAdminClient } from '@forestadmin/forestadmin-client';
4
- export default class AuthorizationService {
5
- private readonly forestAdminClient;
6
- constructor(forestAdminClient: ForestAdminClient);
7
- assertCanBrowse(context: Context, collectionName: string): Promise<void>;
8
- assertCanRead(context: Context, collectionName: string): Promise<void>;
9
- assertCanAdd(context: Context, collectionName: string): Promise<void>;
10
- assertCanEdit(context: Context, collectionName: string): Promise<void>;
11
- assertCanDelete(context: Context, collectionName: string): Promise<void>;
12
- assertCanExport(context: Context, collectionName: string): Promise<void>;
13
- private assertCanOnCollection;
14
- assertCanTriggerCustomAction({ context, customActionName, collectionName, }: {
15
- context: Context;
16
- customActionName: string;
17
- collectionName: string;
18
- }): Promise<void>;
19
- assertCanApproveCustomAction({ context, customActionName, collectionName, requesterId, }: {
20
- context: Context;
21
- customActionName: string;
22
- collectionName: string;
23
- requesterId: number | string;
24
- }): Promise<void>;
25
- assertCanRequestCustomActionParameters(context: Context, customActionName: string, collectionName: string): Promise<void>;
26
- assertCanRetrieveChart(context: Context): Promise<void>;
27
- getScope(collection: Collection, context: Context): Promise<ConditionTree>;
28
- invalidateScopeCache(renderingId: number | string): void;
29
- verifySignedActionParameters<TSignedParameters>(signedToken: string): TSignedParameters;
30
- }
31
- //# sourceMappingURL=authorization.d.ts.map
@@ -1,107 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const forestadmin_client_1 = require("@forestadmin/forestadmin-client");
7
- const types_1 = require("../../types");
8
- const condition_tree_parser_1 = __importDefault(require("../../utils/condition-tree-parser"));
9
- class AuthorizationService {
10
- constructor(forestAdminClient) {
11
- this.forestAdminClient = forestAdminClient;
12
- }
13
- async assertCanBrowse(context, collectionName) {
14
- await this.assertCanOnCollection(forestadmin_client_1.CollectionActionEvent.Browse, context, collectionName);
15
- }
16
- async assertCanRead(context, collectionName) {
17
- await this.assertCanOnCollection(forestadmin_client_1.CollectionActionEvent.Read, context, collectionName);
18
- }
19
- async assertCanAdd(context, collectionName) {
20
- await this.assertCanOnCollection(forestadmin_client_1.CollectionActionEvent.Add, context, collectionName);
21
- }
22
- async assertCanEdit(context, collectionName) {
23
- await this.assertCanOnCollection(forestadmin_client_1.CollectionActionEvent.Edit, context, collectionName);
24
- }
25
- async assertCanDelete(context, collectionName) {
26
- await this.assertCanOnCollection(forestadmin_client_1.CollectionActionEvent.Delete, context, collectionName);
27
- }
28
- async assertCanExport(context, collectionName) {
29
- await this.assertCanOnCollection(forestadmin_client_1.CollectionActionEvent.Export, context, collectionName);
30
- }
31
- async assertCanOnCollection(event, context, collectionName) {
32
- const { id: userId } = context.state.user;
33
- const canOnCollection = await this.forestAdminClient.permissionService.canOnCollection({
34
- userId,
35
- event,
36
- collectionName,
37
- });
38
- if (!canOnCollection) {
39
- context.throw(types_1.HttpCode.Forbidden, 'Forbidden');
40
- }
41
- }
42
- async assertCanTriggerCustomAction({ context, customActionName, collectionName, }) {
43
- const { id: userId } = context.state.user;
44
- const canTrigger = await this.forestAdminClient.permissionService.canTriggerCustomAction({
45
- userId,
46
- customActionName,
47
- collectionName,
48
- });
49
- if (!canTrigger) {
50
- context.throw(types_1.HttpCode.Forbidden, 'Forbidden');
51
- }
52
- }
53
- async assertCanApproveCustomAction({ context, customActionName, collectionName, requesterId, }) {
54
- const { id: userId } = context.state.user;
55
- const canApprove = await this.forestAdminClient.permissionService.canApproveCustomAction({
56
- userId,
57
- customActionName,
58
- collectionName,
59
- requesterId,
60
- });
61
- if (!canApprove) {
62
- context.throw(types_1.HttpCode.Forbidden, 'Forbidden');
63
- }
64
- }
65
- async assertCanRequestCustomActionParameters(context, customActionName, collectionName) {
66
- const { id: userId } = context.state.user;
67
- const canRequest = await this.forestAdminClient.permissionService.canRequestCustomActionParameters({
68
- userId,
69
- customActionName,
70
- collectionName,
71
- });
72
- if (!canRequest) {
73
- context.throw(types_1.HttpCode.Forbidden, 'Forbidden');
74
- }
75
- }
76
- async assertCanRetrieveChart(context) {
77
- const { renderingId, id: userId } = context.state.user;
78
- const { body: chartRequest } = context.request;
79
- const canRetrieve = await this.forestAdminClient.permissionService.canRetrieveChart({
80
- renderingId,
81
- userId,
82
- chartRequest,
83
- });
84
- if (!canRetrieve) {
85
- context.throw(types_1.HttpCode.Forbidden, 'Forbidden');
86
- }
87
- }
88
- async getScope(collection, context) {
89
- const { user } = context.state;
90
- const scope = await this.forestAdminClient.getScope({
91
- renderingId: user.renderingId,
92
- userId: user.id,
93
- collectionName: collection.name,
94
- });
95
- if (!scope)
96
- return null;
97
- return condition_tree_parser_1.default.fromPlainObject(collection, scope);
98
- }
99
- invalidateScopeCache(renderingId) {
100
- this.forestAdminClient.markScopesAsUpdated(renderingId);
101
- }
102
- verifySignedActionParameters(signedToken) {
103
- return this.forestAdminClient.verifySignedActionParameters(signedToken);
104
- }
105
- }
106
- exports.default = AuthorizationService;
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9hdXRob3JpemF0aW9uL2F1dGhvcml6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSx3RUFBMkY7QUFDM0YsdUNBQXVDO0FBQ3ZDLDhGQUFvRTtBQUVwRSxNQUFxQixvQkFBb0I7SUFDdkMsWUFBNkIsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7SUFBRyxDQUFDO0lBRTlELEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBZ0IsRUFBRSxjQUFzQjtRQUNuRSxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQywwQ0FBcUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQWdCLEVBQUUsY0FBc0I7UUFDakUsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsMENBQXFCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFnQixFQUFFLGNBQXNCO1FBQ2hFLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLDBDQUFxQixDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBZ0IsRUFBRSxjQUFzQjtRQUNqRSxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQywwQ0FBcUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQWdCLEVBQUUsY0FBc0I7UUFDbkUsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsMENBQXFCLENBQUMsTUFBTSxFQUFFLE9B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
@@ -1,4 +0,0 @@
1
- import { AgentOptionsWithDefaults } from '../../types';
2
- import AuthorizationService from './authorization';
3
- export default function authorizationServiceFactory(options: AgentOptionsWithDefaults): AuthorizationService;
4
- //# sourceMappingURL=index.d.ts.map
@@ -1,11 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const authorization_1 = __importDefault(require("./authorization"));
7
- function authorizationServiceFactory(options) {
8
- return new authorization_1.default(options.forestAdminClient);
9
- }
10
- exports.default = authorizationServiceFactory;
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYXV0aG9yaXphdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLG9FQUFtRDtBQUVuRCxTQUF3QiwyQkFBMkIsQ0FDakQsT0FBaUM7SUFFakMsT0FBTyxJQUFJLHVCQUFvQixDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFKRCw4Q0FJQyJ9
@@ -1,26 +0,0 @@
1
- export interface SmartActionRequestBody {
2
- data: {
3
- id: string;
4
- type: string;
5
- attributes: {
6
- requester_id: number;
7
- ids: Array<string>;
8
- collection_name: string;
9
- smart_action_id: string;
10
- values: Record<string, any> | null;
11
- parent_collection_name: string | null;
12
- parent_collection_id: string | null;
13
- parent_association_name: string | null;
14
- all_records: boolean;
15
- all_records_subset_query: null;
16
- };
17
- };
18
- }
19
- export interface SmartActionApprovalRequestBody extends SmartActionRequestBody {
20
- data: SmartActionRequestBody['data'] & {
21
- attributes: SmartActionRequestBody['data']['attributes'] & {
22
- signed_approval_request: string;
23
- };
24
- };
25
- }
26
- //# sourceMappingURL=types.d.ts.map
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYXV0aG9yaXphdGlvbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=