@forestadmin/forestadmin-client 1.0.0 → 1.0.2
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/dist/auth/index.d.ts +10 -0
- package/dist/auth/index.js +39 -0
- package/dist/auth/types.d.ts +14 -0
- package/dist/auth/types.js +3 -0
- package/dist/forest-admin-client-with-cache.d.ts +15 -1
- package/dist/forest-admin-client-with-cache.js +17 -2
- package/dist/index.d.ts +5 -1
- package/dist/index.js +14 -3
- package/dist/ip-whitelist/index.d.ts +8 -0
- package/dist/ip-whitelist/index.js +20 -0
- package/dist/ip-whitelist/types.d.ts +15 -0
- package/dist/ip-whitelist/types.js +3 -0
- package/dist/permissions/action-permission.d.ts +2 -2
- package/dist/permissions/action-permission.js +15 -18
- package/dist/permissions/forest-http-api.d.ts +0 -1
- package/dist/permissions/forest-http-api.js +5 -47
- package/dist/permissions/generate-actions-from-permissions.d.ts +6 -3
- package/dist/permissions/generate-actions-from-permissions.js +8 -16
- package/dist/permissions/permission-with-cache.d.ts +1 -0
- package/dist/permissions/permission-with-cache.js +14 -7
- package/dist/schema/index.d.ts +17 -0
- package/dist/schema/index.js +61 -0
- package/dist/schema/types.d.ts +85 -0
- package/dist/schema/types.js +16 -0
- package/dist/types.d.ts +8 -0
- package/dist/utils/default-logger.d.ts +1 -1
- package/dist/utils/default-logger.js +1 -1
- package/dist/utils/server.d.ts +9 -0
- package/dist/utils/server.js +45 -0
- package/package.json +5 -3
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Client } from 'openid-client';
|
|
2
|
+
import { ForestAdminClientOptionsWithDefaults } from '../types';
|
|
3
|
+
import { UserInfo } from './types';
|
|
4
|
+
export default class AuthService {
|
|
5
|
+
private options;
|
|
6
|
+
constructor(options: ForestAdminClientOptionsWithDefaults);
|
|
7
|
+
getOpenIdClient(): Promise<Client>;
|
|
8
|
+
getUserInfo(renderingId: number, accessToken: string): Promise<UserInfo>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,39 @@
|
|
|
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 openid_client_1 = require("openid-client");
|
|
7
|
+
const server_1 = __importDefault(require("../utils/server"));
|
|
8
|
+
class AuthService {
|
|
9
|
+
constructor(options) {
|
|
10
|
+
this.options = options;
|
|
11
|
+
}
|
|
12
|
+
async getOpenIdClient() {
|
|
13
|
+
// We can't use 'Issuer.discover' because the oidc config is behind an auth-wall.
|
|
14
|
+
const url = '/oidc/.well-known/openid-configuration';
|
|
15
|
+
const config = await server_1.default.query(this.options, 'get', url);
|
|
16
|
+
const issuer = new openid_client_1.Issuer(config);
|
|
17
|
+
const registration = { token_endpoint_auth_method: 'none' };
|
|
18
|
+
return issuer.Client.register(registration, { initialAccessToken: this.options.envSecret });
|
|
19
|
+
}
|
|
20
|
+
async getUserInfo(renderingId, accessToken) {
|
|
21
|
+
const url = `/liana/v2/renderings/${renderingId}/authorization`;
|
|
22
|
+
const headers = { 'forest-token': accessToken };
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
|
+
const response = await server_1.default.query(this.options, 'get', url, headers);
|
|
25
|
+
return {
|
|
26
|
+
id: Number(response.data.id),
|
|
27
|
+
email: response.data.attributes.email,
|
|
28
|
+
firstName: response.data.attributes.first_name,
|
|
29
|
+
lastName: response.data.attributes.last_name,
|
|
30
|
+
team: response.data.attributes.teams[0],
|
|
31
|
+
role: response.data.attributes.role,
|
|
32
|
+
permissionLevel: response.data.attributes.permission_level,
|
|
33
|
+
renderingId,
|
|
34
|
+
tags: response.data.attributes.tags?.reduce((memo, { key, value }) => ({ ...memo, [key]: value }), {}),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.default = AuthService;
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlEQUFpRjtBQUdqRiw2REFBMEM7QUFHMUMsTUFBcUIsV0FBVztJQUM5QixZQUFvQixPQUE2QztRQUE3QyxZQUFPLEdBQVAsT0FBTyxDQUFzQztJQUFHLENBQUM7SUFFckUsS0FBSyxDQUFDLGVBQWU7UUFDbkIsaUZBQWlGO1FBQ2pGLE1BQU0sR0FBRyxHQUFHLHdDQUF3QyxDQUFDO1FBQ3JELE1BQU0sTUFBTSxHQUFHLE1BQU0sZ0JBQVcsQ0FBQyxLQUFLLENBQWlCLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sTUFBTSxHQUFHLElBQUksc0JBQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxNQUFNLFlBQVksR0FBRyxFQUFFLDBCQUEwQixFQUFFLE1BQTBCLEVBQUUsQ0FBQztRQUVoRixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFtQixFQUFFLFdBQW1CO1FBQ3hELE1BQU0sR0FBRyxHQUFHLHdCQUF3QixXQUFXLGdCQUFnQixDQUFDO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBRWhELDhEQUE4RDtRQUM5RCxNQUFNLFFBQVEsR0FBRyxNQUFNLGdCQUFXLENBQUMsS0FBSyxDQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVqRixPQUFPO1lBQ0wsRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM1QixLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSztZQUNyQyxTQUFTLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVTtZQUM5QyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUztZQUM1QyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN2QyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSTtZQUNuQyxlQUFlLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCO1lBQzFELFdBQVc7WUFDWCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FDekMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQ3JELEVBQUUsQ0FDSDtTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFuQ0QsOEJBbUNDIn0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare type UserInfo = {
|
|
2
|
+
id: number;
|
|
3
|
+
email: string;
|
|
4
|
+
firstName: string;
|
|
5
|
+
lastName: string;
|
|
6
|
+
team: string;
|
|
7
|
+
renderingId: number;
|
|
8
|
+
role: string;
|
|
9
|
+
tags: {
|
|
10
|
+
[key: string]: string;
|
|
11
|
+
};
|
|
12
|
+
permissionLevel: string;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
import { Client } from 'openid-client';
|
|
2
|
+
import AuthService from './auth';
|
|
3
|
+
import { UserInfo } from './auth/types';
|
|
1
4
|
import ChartHandler from './charts/chart-handler';
|
|
5
|
+
import IpWhiteListService from './ip-whitelist';
|
|
6
|
+
import { IpWhitelistConfiguration } from './ip-whitelist/types';
|
|
2
7
|
import RenderingPermissionService from './permissions/rendering-permission';
|
|
3
8
|
import { RawTree } from './permissions/types';
|
|
9
|
+
import SchemaService from './schema';
|
|
10
|
+
import { ForestServerCollection } from './schema/types';
|
|
4
11
|
import { ForestAdminClient, ForestAdminClientOptionsWithDefaults, PermissionService } from './types';
|
|
5
12
|
import ContextVariablesInstantiator from './utils/context-variables-instantiator';
|
|
6
13
|
export default class ForestAdminClientWithCache implements ForestAdminClient {
|
|
@@ -9,8 +16,15 @@ export default class ForestAdminClientWithCache implements ForestAdminClient {
|
|
|
9
16
|
protected readonly renderingPermissionService: RenderingPermissionService;
|
|
10
17
|
readonly contextVariablesInstantiator: ContextVariablesInstantiator;
|
|
11
18
|
readonly chartHandler: ChartHandler;
|
|
12
|
-
|
|
19
|
+
protected readonly ipWhitelistService: IpWhiteListService;
|
|
20
|
+
protected readonly schemaService: SchemaService;
|
|
21
|
+
protected readonly authService: AuthService;
|
|
22
|
+
constructor(options: ForestAdminClientOptionsWithDefaults, permissionService: PermissionService, renderingPermissionService: RenderingPermissionService, contextVariablesInstantiator: ContextVariablesInstantiator, chartHandler: ChartHandler, ipWhitelistService: IpWhiteListService, schemaService: SchemaService, authService: AuthService);
|
|
13
23
|
verifySignedActionParameters<TSignedParameters>(signedParameters: string): TSignedParameters;
|
|
24
|
+
getIpWhitelistConfiguration(): Promise<IpWhitelistConfiguration>;
|
|
25
|
+
postSchema(schema: ForestServerCollection[], agentName: string, agentVersion: string): Promise<boolean>;
|
|
26
|
+
getOpenIdClient(): Promise<Client>;
|
|
27
|
+
getUserInfo(renderingId: number, accessToken: string): Promise<UserInfo>;
|
|
14
28
|
getScope({ renderingId, userId, collectionName, }: {
|
|
15
29
|
renderingId: number | string;
|
|
16
30
|
userId: number | string;
|
|
@@ -5,16 +5,31 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const verify_approval_1 = __importDefault(require("./permissions/verify-approval"));
|
|
7
7
|
class ForestAdminClientWithCache {
|
|
8
|
-
constructor(options, permissionService, renderingPermissionService, contextVariablesInstantiator, chartHandler) {
|
|
8
|
+
constructor(options, permissionService, renderingPermissionService, contextVariablesInstantiator, chartHandler, ipWhitelistService, schemaService, authService) {
|
|
9
9
|
this.options = options;
|
|
10
10
|
this.permissionService = permissionService;
|
|
11
11
|
this.renderingPermissionService = renderingPermissionService;
|
|
12
12
|
this.contextVariablesInstantiator = contextVariablesInstantiator;
|
|
13
13
|
this.chartHandler = chartHandler;
|
|
14
|
+
this.ipWhitelistService = ipWhitelistService;
|
|
15
|
+
this.schemaService = schemaService;
|
|
16
|
+
this.authService = authService;
|
|
14
17
|
}
|
|
15
18
|
verifySignedActionParameters(signedParameters) {
|
|
16
19
|
return (0, verify_approval_1.default)(signedParameters, this.options.envSecret);
|
|
17
20
|
}
|
|
21
|
+
getIpWhitelistConfiguration() {
|
|
22
|
+
return this.ipWhitelistService.getConfiguration();
|
|
23
|
+
}
|
|
24
|
+
async postSchema(schema, agentName, agentVersion) {
|
|
25
|
+
return this.schemaService.postSchema(schema, agentName, agentVersion);
|
|
26
|
+
}
|
|
27
|
+
getOpenIdClient() {
|
|
28
|
+
return this.authService.getOpenIdClient();
|
|
29
|
+
}
|
|
30
|
+
getUserInfo(renderingId, accessToken) {
|
|
31
|
+
return this.authService.getUserInfo(renderingId, accessToken);
|
|
32
|
+
}
|
|
18
33
|
async getScope({ renderingId, userId, collectionName, }) {
|
|
19
34
|
return this.renderingPermissionService.getScope({
|
|
20
35
|
renderingId,
|
|
@@ -27,4 +42,4 @@ class ForestAdminClientWithCache {
|
|
|
27
42
|
}
|
|
28
43
|
}
|
|
29
44
|
exports.default = ForestAdminClientWithCache;
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZXN0LWFkbWluLWNsaWVudC13aXRoLWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZvcmVzdC1hZG1pbi1jbGllbnQtd2l0aC1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVNBLG9GQUFxRTtBQVVyRSxNQUFxQiwwQkFBMEI7SUFDN0MsWUFDcUIsT0FBNkMsRUFDaEQsaUJBQW9DLEVBQ2pDLDBCQUFzRCxFQUN6RCw0QkFBMEQsRUFDMUQsWUFBMEIsRUFDdkIsa0JBQXNDLEVBQ3RDLGFBQTRCLEVBQzVCLFdBQXdCO1FBUHhCLFlBQU8sR0FBUCxPQUFPLENBQXNDO1FBQ2hELHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDakMsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtRQUN6RCxpQ0FBNEIsR0FBNUIsNEJBQTRCLENBQThCO1FBQzFELGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQ3ZCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDMUMsQ0FBQztJQUVKLDRCQUE0QixDQUFvQixnQkFBd0I7UUFDdEUsT0FBTyxJQUFBLHlCQUF3QixFQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELDJCQUEyQjtRQUN6QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUNkLE1BQWdDLEVBQ2hDLFNBQWlCLEVBQ2pCLFlBQW9CO1FBRXBCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsV0FBVyxDQUFDLFdBQW1CLEVBQUUsV0FBbUI7UUFDbEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFDcEIsV0FBVyxFQUNYLE1BQU0sRUFDTixjQUFjLEdBS2Y7UUFDQyxPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUM7WUFDOUMsV0FBVztZQUNYLGNBQWM7WUFDZCxNQUFNO1NBQ1AsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLG1CQUFtQixDQUFDLFdBQTRCO1FBQ3JELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNGO0FBdkRELDZDQXVEQyJ9
|
package/dist/index.d.ts
CHANGED
|
@@ -6,10 +6,14 @@ export { default as ChainedSQLQueryError } from './permissions/errors/chained-sq
|
|
|
6
6
|
export { default as EmptySQLQueryError } from './permissions/errors/empty-sql-query-error';
|
|
7
7
|
export { default as NonSelectSQLQueryError } from './permissions/errors/non-select-sql-query-error';
|
|
8
8
|
export { ForestAdminClientOptions, Logger, LoggerLevel, ForestAdminClient, ChartHandlerInterface, ContextVariablesInstantiatorInterface, } from './types';
|
|
9
|
-
export {
|
|
9
|
+
export { IpWhitelistConfiguration } from './ip-whitelist/types';
|
|
10
|
+
export { CollectionActionEvent, RenderingPermissionV4, UserPermissionV4, } from './permissions/types';
|
|
11
|
+
export { UserInfo } from './auth/types';
|
|
10
12
|
export default function createForestAdminClient(options: ForestAdminClientOptions): ForestAdminClient;
|
|
11
13
|
export * from './charts/types';
|
|
14
|
+
export * from './schema/types';
|
|
12
15
|
export { default as ContextVariablesInjector } from './utils/context-variables-injector';
|
|
13
16
|
export { default as ContextVariables } from './utils/context-variables';
|
|
14
17
|
export { default as ChartHandler } from './charts/chart-handler';
|
|
18
|
+
export { default as SchemaService } from './schema';
|
|
15
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -17,13 +17,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.ChartHandler = exports.ContextVariables = exports.ContextVariablesInjector = exports.CollectionActionEvent = exports.NonSelectSQLQueryError = exports.EmptySQLQueryError = exports.ChainedSQLQueryError = exports.JTWUnableToVerifyError = exports.JTWTokenExpiredError = void 0;
|
|
20
|
+
exports.SchemaService = exports.ChartHandler = exports.ContextVariables = exports.ContextVariablesInjector = exports.CollectionActionEvent = exports.NonSelectSQLQueryError = exports.EmptySQLQueryError = exports.ChainedSQLQueryError = exports.JTWUnableToVerifyError = exports.JTWTokenExpiredError = void 0;
|
|
21
|
+
const auth_1 = __importDefault(require("./auth"));
|
|
21
22
|
const chart_handler_1 = __importDefault(require("./charts/chart-handler"));
|
|
22
23
|
const forest_admin_client_with_cache_1 = __importDefault(require("./forest-admin-client-with-cache"));
|
|
24
|
+
const ip_whitelist_1 = __importDefault(require("./ip-whitelist"));
|
|
23
25
|
const action_permission_1 = __importDefault(require("./permissions/action-permission"));
|
|
24
26
|
const permission_with_cache_1 = __importDefault(require("./permissions/permission-with-cache"));
|
|
25
27
|
const rendering_permission_1 = __importDefault(require("./permissions/rendering-permission"));
|
|
26
28
|
const user_permission_1 = __importDefault(require("./permissions/user-permission"));
|
|
29
|
+
const schema_1 = __importDefault(require("./schema"));
|
|
27
30
|
const context_variables_instantiator_1 = __importDefault(require("./utils/context-variables-instantiator"));
|
|
28
31
|
const default_logger_1 = __importDefault(require("./utils/default-logger"));
|
|
29
32
|
var jwt_token_expired_error_1 = require("./permissions/errors/jwt-token-expired-error");
|
|
@@ -36,6 +39,7 @@ var empty_sql_query_error_1 = require("./permissions/errors/empty-sql-query-erro
|
|
|
36
39
|
Object.defineProperty(exports, "EmptySQLQueryError", { enumerable: true, get: function () { return __importDefault(empty_sql_query_error_1).default; } });
|
|
37
40
|
var non_select_sql_query_error_1 = require("./permissions/errors/non-select-sql-query-error");
|
|
38
41
|
Object.defineProperty(exports, "NonSelectSQLQueryError", { enumerable: true, get: function () { return __importDefault(non_select_sql_query_error_1).default; } });
|
|
42
|
+
// These types are used for the agent-generator package
|
|
39
43
|
var types_1 = require("./permissions/types");
|
|
40
44
|
Object.defineProperty(exports, "CollectionActionEvent", { enumerable: true, get: function () { return types_1.CollectionActionEvent; } });
|
|
41
45
|
function createForestAdminClient(options) {
|
|
@@ -52,14 +56,21 @@ function createForestAdminClient(options) {
|
|
|
52
56
|
const permissionService = new permission_with_cache_1.default(actionPermission, renderingPermission);
|
|
53
57
|
const contextVariablesInstantiator = new context_variables_instantiator_1.default(renderingPermission);
|
|
54
58
|
const chartHandler = new chart_handler_1.default(contextVariablesInstantiator);
|
|
55
|
-
|
|
59
|
+
const ipWhitelistPermission = new ip_whitelist_1.default(optionsWithDefaults);
|
|
60
|
+
const schemaService = new schema_1.default(optionsWithDefaults);
|
|
61
|
+
const authService = new auth_1.default(optionsWithDefaults);
|
|
62
|
+
return new forest_admin_client_with_cache_1.default(optionsWithDefaults, permissionService, renderingPermission, contextVariablesInstantiator, chartHandler, ipWhitelistPermission, schemaService, authService);
|
|
56
63
|
}
|
|
57
64
|
exports.default = createForestAdminClient;
|
|
58
65
|
__exportStar(require("./charts/types"), exports);
|
|
66
|
+
__exportStar(require("./schema/types"), exports);
|
|
59
67
|
var context_variables_injector_1 = require("./utils/context-variables-injector");
|
|
60
68
|
Object.defineProperty(exports, "ContextVariablesInjector", { enumerable: true, get: function () { return __importDefault(context_variables_injector_1).default; } });
|
|
61
69
|
var context_variables_1 = require("./utils/context-variables");
|
|
62
70
|
Object.defineProperty(exports, "ContextVariables", { enumerable: true, get: function () { return __importDefault(context_variables_1).default; } });
|
|
63
71
|
var chart_handler_2 = require("./charts/chart-handler");
|
|
64
72
|
Object.defineProperty(exports, "ChartHandler", { enumerable: true, get: function () { return __importDefault(chart_handler_2).default; } });
|
|
65
|
-
|
|
73
|
+
// export is necessary for the agent-generator package
|
|
74
|
+
var schema_2 = require("./schema");
|
|
75
|
+
Object.defineProperty(exports, "SchemaService", { enumerable: true, get: function () { return __importDefault(schema_2).default; } });
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrREFBaUM7QUFDakMsMkVBQWtEO0FBQ2xELHNHQUFpRTtBQUNqRSxrRUFBZ0Q7QUFDaEQsd0ZBQXNFO0FBQ3RFLGdHQUFvRTtBQUNwRSw4RkFBNEU7QUFDNUUsb0ZBQWtFO0FBQ2xFLHNEQUFxQztBQUVyQyw0R0FBa0Y7QUFDbEYsNEVBQW1EO0FBRW5ELHdGQUErRjtBQUF0RixnSkFBQSxPQUFPLE9BQXdCO0FBQ3hDLDhGQUFvRztBQUEzRixxSkFBQSxPQUFPLE9BQTBCO0FBQzFDLHdGQUErRjtBQUF0RixnSkFBQSxPQUFPLE9BQXdCO0FBQ3hDLG9GQUEyRjtBQUFsRiw0SUFBQSxPQUFPLE9BQXNCO0FBQ3RDLDhGQUFvRztBQUEzRixxSkFBQSxPQUFPLE9BQTBCO0FBVzFDLHVEQUF1RDtBQUN2RCw2Q0FJNkI7QUFIM0IsOEdBQUEscUJBQXFCLE9BQUE7QUFNdkIsU0FBd0IsdUJBQXVCLENBQzdDLE9BQWlDO0lBRWpDLE1BQU0sbUJBQW1CLEdBQXlDO1FBQ2hFLGVBQWUsRUFBRSw2QkFBNkI7UUFDOUMsaUNBQWlDLEVBQUUsRUFBRSxHQUFHLEVBQUU7UUFDMUMsc0NBQXNDO1FBQ3RDLE1BQU0sRUFBRSx3QkFBYTtRQUNyQixHQUFHLE9BQU87S0FDWCxDQUFDO0lBRUYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLDJCQUF1QixDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDMUUsTUFBTSxjQUFjLEdBQUcsSUFBSSx5QkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSw4QkFBMEIsQ0FBQyxtQkFBbUIsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNoRyxNQUFNLGlCQUFpQixHQUFHLElBQUksK0JBQWlCLENBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUN2RixNQUFNLDRCQUE0QixHQUFHLElBQUksd0NBQTRCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMzRixNQUFNLFlBQVksR0FBRyxJQUFJLHVCQUFZLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNwRSxNQUFNLHFCQUFxQixHQUFHLElBQUksc0JBQWtCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMxRSxNQUFNLGFBQWEsR0FBRyxJQUFJLGdCQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM3RCxNQUFNLFdBQVcsR0FBRyxJQUFJLGNBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRXpELE9BQU8sSUFBSSx3Q0FBaUIsQ0FDMUIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLFlBQVksRUFDWixxQkFBcUIsRUFDckIsYUFBYSxFQUNiLFdBQVcsQ0FDWixDQUFDO0FBQ0osQ0FBQztBQS9CRCwwQ0ErQkM7QUFFRCxpREFBK0I7QUFDL0IsaURBQStCO0FBQy9CLGlGQUF5RjtBQUFoRix1SkFBQSxPQUFPLE9BQTRCO0FBQzVDLCtEQUF3RTtBQUEvRCxzSUFBQSxPQUFPLE9BQW9CO0FBQ3BDLHdEQUFpRTtBQUF4RCw4SEFBQSxPQUFPLE9BQWdCO0FBRWhDLHNEQUFzRDtBQUN0RCxtQ0FBb0Q7QUFBM0Msd0hBQUEsT0FBTyxPQUFpQiJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ForestAdminClientOptionsWithDefaults } from '../types';
|
|
2
|
+
import { IpWhitelistConfiguration } from './types';
|
|
3
|
+
export default class IpWhiteListService {
|
|
4
|
+
private options;
|
|
5
|
+
constructor(options: ForestAdminClientOptionsWithDefaults);
|
|
6
|
+
getConfiguration(): Promise<IpWhitelistConfiguration>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,20 @@
|
|
|
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 server_1 = __importDefault(require("../utils/server"));
|
|
7
|
+
class IpWhiteListService {
|
|
8
|
+
constructor(options) {
|
|
9
|
+
this.options = options;
|
|
10
|
+
}
|
|
11
|
+
async getConfiguration() {
|
|
12
|
+
const body = await server_1.default.query(this.options, 'get', '/liana/v1/ip-whitelist-rules');
|
|
13
|
+
return {
|
|
14
|
+
isFeatureEnabled: body.data.attributes.use_ip_whitelist,
|
|
15
|
+
ipRules: body.data.attributes.rules,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.default = IpWhiteListService;
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaXAtd2hpdGVsaXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsNkRBQTBDO0FBWTFDLE1BQXFCLGtCQUFrQjtJQUNyQyxZQUFvQixPQUE2QztRQUE3QyxZQUFPLEdBQVAsT0FBTyxDQUFzQztJQUFHLENBQUM7SUFFckUsS0FBSyxDQUFDLGdCQUFnQjtRQUNwQixNQUFNLElBQUksR0FBRyxNQUFNLGdCQUFXLENBQUMsS0FBSyxDQUNsQyxJQUFJLENBQUMsT0FBTyxFQUNaLEtBQUssRUFDTCw4QkFBOEIsQ0FDL0IsQ0FBQztRQUVGLE9BQU87WUFDTCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0I7WUFDdkQsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUs7U0FDcEMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWZELHFDQWVDIn0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare type IpWhitelistConfiguration = {
|
|
2
|
+
isFeatureEnabled: boolean;
|
|
3
|
+
ipRules: Array<{
|
|
4
|
+
type: 0;
|
|
5
|
+
ip: string;
|
|
6
|
+
} | {
|
|
7
|
+
type: 1;
|
|
8
|
+
ipMinimum: string;
|
|
9
|
+
ipMaximum: string;
|
|
10
|
+
} | {
|
|
11
|
+
type: 2;
|
|
12
|
+
range: string;
|
|
13
|
+
}>;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaXAtd2hpdGVsaXN0L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
@@ -4,8 +4,8 @@ export default class ActionPermissionService {
|
|
|
4
4
|
private permissionsPromise;
|
|
5
5
|
private permissionExpirationTimestamp;
|
|
6
6
|
constructor(options: ForestAdminClientOptionsWithDefaults);
|
|
7
|
-
canOneOf(
|
|
8
|
-
can(
|
|
7
|
+
canOneOf(roleId: number, actionNames: string[]): Promise<boolean>;
|
|
8
|
+
can(roleId: number, actionName: string): Promise<boolean>;
|
|
9
9
|
private hasPermissionOrRefetch;
|
|
10
10
|
private isAllowedOneOf;
|
|
11
11
|
private isAllowed;
|
|
@@ -9,42 +9,42 @@ class ActionPermissionService {
|
|
|
9
9
|
constructor(options) {
|
|
10
10
|
this.options = options;
|
|
11
11
|
}
|
|
12
|
-
canOneOf(
|
|
12
|
+
canOneOf(roleId, actionNames) {
|
|
13
13
|
return this.hasPermissionOrRefetch({
|
|
14
|
-
|
|
14
|
+
roleId,
|
|
15
15
|
actionNames,
|
|
16
16
|
allowRefetch: true,
|
|
17
17
|
});
|
|
18
18
|
}
|
|
19
|
-
can(
|
|
19
|
+
can(roleId, actionName) {
|
|
20
20
|
return this.hasPermissionOrRefetch({
|
|
21
|
-
|
|
21
|
+
roleId,
|
|
22
22
|
actionNames: [actionName],
|
|
23
23
|
allowRefetch: true,
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
|
-
async hasPermissionOrRefetch({
|
|
26
|
+
async hasPermissionOrRefetch({ roleId, actionNames, allowRefetch, }) {
|
|
27
27
|
const permissions = await this.getPermissions();
|
|
28
|
-
const isAllowed = this.isAllowedOneOf({ permissions, actionNames,
|
|
28
|
+
const isAllowed = this.isAllowedOneOf({ permissions, actionNames, roleId });
|
|
29
29
|
if (!isAllowed && allowRefetch) {
|
|
30
30
|
this.permissionsPromise = undefined;
|
|
31
31
|
this.permissionExpirationTimestamp = undefined;
|
|
32
32
|
return this.hasPermissionOrRefetch({
|
|
33
|
-
|
|
33
|
+
roleId,
|
|
34
34
|
actionNames,
|
|
35
35
|
allowRefetch: false,
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
|
-
this.options.logger('Debug', `User ${
|
|
38
|
+
this.options.logger('Debug', `User ${roleId} is ${isAllowed ? '' : 'not '}allowed to perform ${actionNames.length > 1 ? ' one of ' : ''}${actionNames.join(', ')}`);
|
|
39
39
|
return isAllowed;
|
|
40
40
|
}
|
|
41
|
-
isAllowedOneOf({ permissions, actionNames,
|
|
42
|
-
return actionNames.some(actionName => this.isAllowed({ permissions, actionName,
|
|
41
|
+
isAllowedOneOf({ permissions, actionNames, roleId, }) {
|
|
42
|
+
return actionNames.some(actionName => this.isAllowed({ permissions, actionName, roleId }));
|
|
43
43
|
}
|
|
44
|
-
isAllowed({ permissions, actionName,
|
|
44
|
+
isAllowed({ permissions, actionName, roleId, }) {
|
|
45
45
|
return Boolean(permissions.everythingAllowed ||
|
|
46
46
|
permissions.actionsGloballyAllowed.has(actionName) ||
|
|
47
|
-
permissions.
|
|
47
|
+
permissions.actionsByRole.get(actionName)?.allowedRoles.has(roleId));
|
|
48
48
|
}
|
|
49
49
|
async getPermissions() {
|
|
50
50
|
if (this.permissionsPromise &&
|
|
@@ -59,12 +59,9 @@ class ActionPermissionService {
|
|
|
59
59
|
}
|
|
60
60
|
async fetchEnvironmentPermissions() {
|
|
61
61
|
this.options.logger('Debug', 'Fetching environment permissions');
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
forest_http_api_1.default.getUsers(this.options),
|
|
65
|
-
]);
|
|
66
|
-
return (0, generate_actions_from_permissions_1.default)(rawPermissions, users);
|
|
62
|
+
const rawPermissions = await forest_http_api_1.default.getEnvironmentPermissions(this.options);
|
|
63
|
+
return (0, generate_actions_from_permissions_1.default)(rawPermissions);
|
|
67
64
|
}
|
|
68
65
|
}
|
|
69
66
|
exports.default = ActionPermissionService;
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXBlcm1pc3Npb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGVybWlzc2lvbnMvYWN0aW9uLXBlcm1pc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSx3RUFBOEM7QUFDOUMsNEdBRTZDO0FBRTdDLE1BQXFCLHVCQUF1QjtJQUkxQyxZQUE2QixPQUE2QztRQUE3QyxZQUFPLEdBQVAsT0FBTyxDQUFzQztJQUFHLENBQUM7SUFFdkUsUUFBUSxDQUFDLE1BQWMsRUFBRSxXQUFxQjtRQUNuRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztZQUNqQyxNQUFNO1lBQ04sV0FBVztZQUNYLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxHQUFHLENBQUMsTUFBYyxFQUFFLFVBQWtCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQ2pDLE1BQU07WUFDTixXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDekIsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxFQUNuQyxNQUFNLEVBQ04sV0FBVyxFQUNYLFlBQVksR0FLYjtRQUNDLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2hELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxZQUFZLEVBQUU7WUFDOUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztZQUNwQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsU0FBUyxDQUFDO1lBRS9DLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDO2dCQUNqQyxNQUFNO2dCQUNOLFdBQVc7Z0JBQ1gsWUFBWSxFQUFFLEtBQUs7YUFDcEIsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDakIsT0FBTyxFQUNQLFFBQVEsTUFBTSxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLHNCQUMxQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUN4QyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDNUIsQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTyxjQUFjLENBQUMsRUFDckIsV0FBVyxFQUNYLFdBQVcsRUFDWCxNQUFNLEdBS1A7UUFDQyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVPLFNBQVMsQ0FBQyxFQUNoQixXQUFXLEVBQ1gsVUFBVSxFQUNWLE1BQU0sR0FLUDtRQUNDLE9BQU8sT0FBTyxDQUNaLFdBQVcsQ0FBQyxpQkFBaUI7WUFDM0IsV0FBVyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDbEQsV0FBVyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FDdEUsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMsY0FBYztRQUMxQixJQUNFLElBQUksQ0FBQyxrQkFBa0I7WUFDdkIsSUFBSSxDQUFDLDZCQUE2QjtZQUNsQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUMvQztZQUNBLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO1NBQ2hDO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQzdELElBQUksQ0FBQyw2QkFBNkI7WUFDaEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDO1FBRXJFLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFFTyxLQUFLLENBQUMsMkJBQTJCO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO1FBRWpFLE1BQU0sY0FBYyxHQUFHLE1BQU0seUJBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkYsT0FBTyxJQUFBLDJDQUE4QixFQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7Q0FDRjtBQTFHRCwwQ0EwR0MifQ==
|
|
@@ -5,7 +5,6 @@ export default class ForestHttpApi {
|
|
|
5
5
|
static getEnvironmentPermissions(options: HttpOptions): Promise<EnvironmentPermissionsV4>;
|
|
6
6
|
static getUsers(options: HttpOptions): Promise<UserPermissionV4[]>;
|
|
7
7
|
static getRenderingPermissions(renderingId: number, options: HttpOptions): Promise<RenderingPermissionV4>;
|
|
8
|
-
private static handleResponseError;
|
|
9
8
|
}
|
|
10
9
|
export {};
|
|
11
10
|
//# sourceMappingURL=forest-http-api.d.ts.map
|
|
@@ -3,59 +3,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
6
|
+
const server_1 = __importDefault(require("../utils/server"));
|
|
7
7
|
class ForestHttpApi {
|
|
8
8
|
static async getEnvironmentPermissions(options) {
|
|
9
|
-
|
|
10
|
-
const { body } = await superagent_1.default
|
|
11
|
-
.get(`${options.forestServerUrl}/liana/v4/permissions/environment`)
|
|
12
|
-
.set('forest-secret-key', options.envSecret);
|
|
13
|
-
return body;
|
|
14
|
-
}
|
|
15
|
-
catch (e) {
|
|
16
|
-
this.handleResponseError(e);
|
|
17
|
-
}
|
|
9
|
+
return server_1.default.query(options, 'get', '/liana/v4/permissions/environment');
|
|
18
10
|
}
|
|
19
11
|
static async getUsers(options) {
|
|
20
|
-
|
|
21
|
-
const { body } = await superagent_1.default
|
|
22
|
-
.get(`${options.forestServerUrl}/liana/v4/permissions/users`)
|
|
23
|
-
.set('forest-secret-key', options.envSecret);
|
|
24
|
-
return body;
|
|
25
|
-
}
|
|
26
|
-
catch (e) {
|
|
27
|
-
this.handleResponseError(e);
|
|
28
|
-
}
|
|
12
|
+
return server_1.default.query(options, 'get', '/liana/v4/permissions/users');
|
|
29
13
|
}
|
|
30
14
|
static async getRenderingPermissions(renderingId, options) {
|
|
31
|
-
|
|
32
|
-
const { body } = await superagent_1.default
|
|
33
|
-
.get(`${options.forestServerUrl}/liana/v4/permissions/renderings/${renderingId}`)
|
|
34
|
-
.set('forest-secret-key', options.envSecret);
|
|
35
|
-
return body;
|
|
36
|
-
}
|
|
37
|
-
catch (e) {
|
|
38
|
-
this.handleResponseError(e);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
static handleResponseError(e) {
|
|
42
|
-
if (/certificate/i.test(e.message))
|
|
43
|
-
throw new Error('ForestAdmin server TLS certificate cannot be verified. ' +
|
|
44
|
-
'Please check that your system time is set properly.');
|
|
45
|
-
if (e.response) {
|
|
46
|
-
const status = e?.response?.status;
|
|
47
|
-
// 0 == offline, 502 == bad gateway from proxy
|
|
48
|
-
if (status === 0 || status === 502)
|
|
49
|
-
throw new Error('Failed to reach ForestAdmin server. Are you online?');
|
|
50
|
-
if (status === 404)
|
|
51
|
-
throw new Error('ForestAdmin server failed to find the project related to the envSecret you configured.' +
|
|
52
|
-
' Can you check that you copied it properly in the Forest initialization?');
|
|
53
|
-
if (status === 503)
|
|
54
|
-
throw new Error('Forest is in maintenance for a few minutes. We are upgrading your experience in ' +
|
|
55
|
-
'the forest. We just need a few more minutes to get it right.');
|
|
56
|
-
}
|
|
57
|
-
throw e;
|
|
15
|
+
return server_1.default.query(options, 'get', `/liana/v4/permissions/renderings/${renderingId}`);
|
|
58
16
|
}
|
|
59
17
|
}
|
|
60
18
|
exports.default = ForestHttpApi;
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZXN0LWh0dHAtYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Blcm1pc3Npb25zL2ZvcmVzdC1odHRwLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLDZEQUEwQztBQUsxQyxNQUFxQixhQUFhO0lBQ2hDLE1BQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsT0FBb0I7UUFDekQsT0FBTyxnQkFBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLG1DQUFtQyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQW9CO1FBQ3hDLE9BQU8sZ0JBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUNsQyxXQUFtQixFQUNuQixPQUFvQjtRQUVwQixPQUFPLGdCQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsb0NBQW9DLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDOUYsQ0FBQztDQUNGO0FBZkQsZ0NBZUMifQ==
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import { EnvironmentPermissionsV4
|
|
1
|
+
import { EnvironmentPermissionsV4 } from './types';
|
|
2
2
|
export declare type ActionPermissions = {
|
|
3
3
|
everythingAllowed: boolean;
|
|
4
4
|
actionsGloballyAllowed: Set<string>;
|
|
5
|
-
|
|
5
|
+
actionsByRole: Map<string, ActionPermission>;
|
|
6
6
|
};
|
|
7
|
-
export
|
|
7
|
+
export declare type ActionPermission = {
|
|
8
|
+
allowedRoles: Set<number>;
|
|
9
|
+
};
|
|
10
|
+
export default function generateActionsFromPermissions(environmentPermissions: EnvironmentPermissionsV4): ActionPermissions;
|
|
8
11
|
//# sourceMappingURL=generate-actions-from-permissions.d.ts.map
|
|
@@ -43,30 +43,22 @@ function generateActionsGloballyAllowed(permissions) {
|
|
|
43
43
|
.filter(([, permission]) => permission === true)
|
|
44
44
|
.map(([action]) => action));
|
|
45
45
|
}
|
|
46
|
-
function
|
|
47
|
-
return new Set(roles.reduce((acc, roleId) => {
|
|
48
|
-
const userIds = (userIdsByRole.get(roleId) || []).map(userId => `${userId}`);
|
|
49
|
-
return [...acc, ...userIds];
|
|
50
|
-
}, []));
|
|
51
|
-
}
|
|
52
|
-
function generateActionsAllowedByUser(permissions, users) {
|
|
53
|
-
const userIdsByRole = users.reduce((acc, { id, roleId }) => {
|
|
54
|
-
acc.set(roleId, [...(acc.get(roleId) || []), id]);
|
|
55
|
-
return acc;
|
|
56
|
-
}, new Map());
|
|
46
|
+
function generateActionsByRole(permissions) {
|
|
57
47
|
return new Map(Object.entries(permissions)
|
|
58
48
|
.filter(([, permission]) => typeof permission !== 'boolean')
|
|
59
49
|
.map(([name, permission]) => [
|
|
60
50
|
name,
|
|
61
|
-
|
|
51
|
+
{
|
|
52
|
+
allowedRoles: new Set(permission.roles),
|
|
53
|
+
},
|
|
62
54
|
]));
|
|
63
55
|
}
|
|
64
|
-
function generateActionsFromPermissions(environmentPermissions
|
|
56
|
+
function generateActionsFromPermissions(environmentPermissions) {
|
|
65
57
|
if (environmentPermissions === true) {
|
|
66
58
|
return {
|
|
67
59
|
everythingAllowed: true,
|
|
68
60
|
actionsGloballyAllowed: new Set(),
|
|
69
|
-
|
|
61
|
+
actionsByRole: new Map(),
|
|
70
62
|
};
|
|
71
63
|
}
|
|
72
64
|
const remotePermissions = environmentPermissions;
|
|
@@ -77,8 +69,8 @@ function generateActionsFromPermissions(environmentPermissions, users) {
|
|
|
77
69
|
return {
|
|
78
70
|
everythingAllowed: false,
|
|
79
71
|
actionsGloballyAllowed: generateActionsGloballyAllowed(allPermissions),
|
|
80
|
-
|
|
72
|
+
actionsByRole: generateActionsByRole(allPermissions),
|
|
81
73
|
};
|
|
82
74
|
}
|
|
83
75
|
exports.default = generateActionsFromPermissions;
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtYWN0aW9ucy1mcm9tLXBlcm1pc3Npb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Blcm1pc3Npb25zL2dlbmVyYXRlLWFjdGlvbnMtZnJvbS1wZXJtaXNzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZFQUdzQztBQUN0QyxtQ0FTaUI7QUFtQmpCLFNBQVMsNkJBQTZCLENBQ3BDLFdBQWdEO0lBRWhELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUUscUJBQXFCLENBQUMsRUFBRSxFQUFFO1FBQ3ZGLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQztRQUU3QyxPQUFPO1lBQ0wsR0FBRyxHQUFHO1lBQ04sQ0FBQyxJQUFBLCtEQUFrQyxFQUFDLDZCQUFxQixDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUM5RSxVQUFVLENBQUMsYUFBYTtZQUMxQixDQUFDLElBQUEsK0RBQWtDLEVBQUMsNkJBQXFCLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQzVFLFVBQVUsQ0FBQyxXQUFXO1lBQ3hCLENBQUMsSUFBQSwrREFBa0MsRUFBQyw2QkFBcUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFDNUUsVUFBVSxDQUFDLFdBQVc7WUFDeEIsQ0FBQyxJQUFBLCtEQUFrQyxFQUFDLDZCQUFxQixDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUMzRSxVQUFVLENBQUMsVUFBVTtZQUN2QixDQUFDLElBQUEsK0RBQWtDLEVBQUMsNkJBQXFCLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQzlFLFVBQVUsQ0FBQyxhQUFhO1lBQzFCLENBQUMsSUFBQSwrREFBa0MsRUFBQyw2QkFBcUIsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMs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
|
|
@@ -8,22 +8,26 @@ class PermissionServiceWithCache {
|
|
|
8
8
|
this.renderingPermissionService = renderingPermissionService;
|
|
9
9
|
}
|
|
10
10
|
async canOnCollection({ userId, collectionName, event, }) {
|
|
11
|
-
|
|
11
|
+
const roleId = await this.getRoleIdForUserId(userId);
|
|
12
|
+
return this.actionPermissionService.can(roleId, (0, generate_action_identifier_1.generateCollectionActionIdentifier)(event, collectionName));
|
|
12
13
|
}
|
|
13
14
|
async canExecuteSegmentQuery(params) {
|
|
14
15
|
return this.renderingPermissionService.canExecuteSegmentQuery(params);
|
|
15
16
|
}
|
|
16
|
-
canTriggerCustomAction({ userId, collectionName, customActionName, }) {
|
|
17
|
-
|
|
17
|
+
async canTriggerCustomAction({ userId, collectionName, customActionName, }) {
|
|
18
|
+
const roleId = await this.getRoleIdForUserId(userId);
|
|
19
|
+
return this.actionPermissionService.can(roleId, (0, generate_action_identifier_1.generateCustomActionIdentifier)(types_1.CustomActionEvent.Trigger, customActionName, collectionName));
|
|
18
20
|
}
|
|
19
|
-
canApproveCustomAction({ userId, collectionName, customActionName, requesterId, }) {
|
|
21
|
+
async canApproveCustomAction({ userId, collectionName, customActionName, requesterId, }) {
|
|
20
22
|
const actionIdentifier = requesterId === userId
|
|
21
23
|
? (0, generate_action_identifier_1.generateCustomActionIdentifier)(types_1.CustomActionEvent.SelfApprove, customActionName, collectionName)
|
|
22
24
|
: (0, generate_action_identifier_1.generateCustomActionIdentifier)(types_1.CustomActionEvent.Approve, customActionName, collectionName);
|
|
23
|
-
|
|
25
|
+
const roleId = await this.getRoleIdForUserId(userId);
|
|
26
|
+
return this.actionPermissionService.can(roleId, actionIdentifier);
|
|
24
27
|
}
|
|
25
28
|
async canRequestCustomActionParameters({ userId, collectionName, customActionName, }) {
|
|
26
|
-
|
|
29
|
+
const roleId = await this.getRoleIdForUserId(userId);
|
|
30
|
+
return this.actionPermissionService.canOneOf(roleId, [
|
|
27
31
|
(0, generate_action_identifier_1.generateCustomActionIdentifier)(types_1.CustomActionEvent.Trigger, customActionName, collectionName),
|
|
28
32
|
(0, generate_action_identifier_1.generateCustomActionIdentifier)(types_1.CustomActionEvent.RequireApproval, customActionName, collectionName),
|
|
29
33
|
]);
|
|
@@ -35,6 +39,9 @@ class PermissionServiceWithCache {
|
|
|
35
39
|
chartRequest,
|
|
36
40
|
});
|
|
37
41
|
}
|
|
42
|
+
async getRoleIdForUserId(userId) {
|
|
43
|
+
return (await this.renderingPermissionService.getUser(userId))?.roleId;
|
|
44
|
+
}
|
|
38
45
|
}
|
|
39
46
|
exports.default = PermissionServiceWithCache;
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi13aXRoLWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Blcm1pc3Npb25zL3Blcm1pc3Npb24td2l0aC1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLDZFQUdzQztBQUV0QyxtQ0FBbUU7QUFFbkUsTUFBcUIsMEJBQTBCO0lBQzdDLFlBQ21CLHVCQUF5QyxFQUN6QywwQkFBc0Q7UUFEdEQsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUFrQjtRQUN6QywrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO0lBQ3RFLENBQUM7SUFFRyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQzNCLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxHQUtOO1FBQ0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUNyQyxNQUFNLEVBQ04sSUFBQSwrREFBa0MsRUFBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQzFELENBQUM7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLHNCQUFzQixDQUFDLE1BS25DO1FBQ0MsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxFQUNsQyxNQUFNLEVBQ04sY0FBYyxFQUNkLGdCQUFnQixHQUtqQjtRQUNDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXJELE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FDckMsTUFBTSxFQUNOLElBQUEsMkRBQThCLEVBQUMseUJBQWlCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxDQUM1RixDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxFQUNsQyxNQUFNLEVBQ04sY0FBYyxFQUNkLGdCQUFnQixFQUNoQixXQUFXLEdBTVo7UUFDQyxNQUFNLGdCQUFnQixHQUNwQixXQUFXLEtBQUssTUFBTTtZQUNwQixDQUFDLENBQUMsSUFBQSwyREFBOEIsRUFDNUIseUJBQWlCLENBQUMsV0FBVyxFQUM3QixnQkFBZ0IsRUFDaEIsY0FBYyxDQUNmO1lBQ0gsQ0FBQyxDQUFDLElBQUEsMkRBQThCLEVBQzVCLHlCQUFpQixDQUFDLE9BQU8sRUFDekIsZ0JBQWdCLEVBQ2hCLGNBQWMsQ0FDZixDQUFDO1FBRVIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFTSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsRUFDNUMsTUFBTSxFQUNOLGNBQWMsRUFDZCxnQkFBZ0IsR0FLakI7UUFDQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVyRCxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ25ELElBQUEsMkRBQThCLEVBQUMseUJBQWlCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsQ0FBQztZQUMzRixJQUFBLDJEQUE4QixFQUM1Qix5QkFBaUIsQ0FBQyxlQUFlLEVBQ2pDLGdCQUFnQixFQUNoQixjQUFjLENBQ2Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUMzQixXQUFXLEVBQ1gsTUFBTSxFQUNOLFlBQVksR0FLYjtRQUNDLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLGVBQWUsQ0FBQztZQUNyRCxXQUFXO1lBQ1gsTUFBTTtZQUNOLFlBQVk7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQWM7UUFDN0MsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN6RSxDQUFDO0NBQ0Y7QUF0SEQsNkNBc0hDIn0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ForestAdminClientOptionsWithDefaults } from '../types';
|
|
2
|
+
import { ForestServerCollection } from './types';
|
|
3
|
+
declare type SerializedSchema = {
|
|
4
|
+
meta: {
|
|
5
|
+
schemaFileHash: string;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
export default class SchemaService {
|
|
9
|
+
private options;
|
|
10
|
+
constructor(options: ForestAdminClientOptionsWithDefaults);
|
|
11
|
+
postSchema(schema: ForestServerCollection[], agentName: string, agentVersion: string): Promise<boolean>;
|
|
12
|
+
static serialize(schema: ForestServerCollection[], agentName: string, agentVersion: string): SerializedSchema;
|
|
13
|
+
private static get serializer();
|
|
14
|
+
private doServerWantsSchema;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,61 @@
|
|
|
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 crypto_1 = __importDefault(require("crypto"));
|
|
7
|
+
const json_api_serializer_1 = __importDefault(require("json-api-serializer"));
|
|
8
|
+
const server_1 = __importDefault(require("../utils/server"));
|
|
9
|
+
class SchemaService {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.options = options;
|
|
12
|
+
}
|
|
13
|
+
async postSchema(schema, agentName, agentVersion) {
|
|
14
|
+
const apimap = SchemaService.serialize(schema, agentName, agentVersion);
|
|
15
|
+
const shouldSend = await this.doServerWantsSchema(apimap.meta.schemaFileHash);
|
|
16
|
+
if (shouldSend) {
|
|
17
|
+
await server_1.default.query(this.options, 'post', '/forest/apimaps', {}, apimap);
|
|
18
|
+
}
|
|
19
|
+
return shouldSend;
|
|
20
|
+
}
|
|
21
|
+
static serialize(schema, agentName, agentVersion) {
|
|
22
|
+
const data = schema.map(c => ({ id: c.name, ...c }));
|
|
23
|
+
const meta = {
|
|
24
|
+
liana: agentName,
|
|
25
|
+
liana_version: agentVersion,
|
|
26
|
+
stack: {
|
|
27
|
+
engine: 'nodejs',
|
|
28
|
+
engine_version: process.versions && process.versions.node,
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
const schemaFileHash = crypto_1.default
|
|
32
|
+
.createHash('sha1')
|
|
33
|
+
.update(JSON.stringify({ ...schema, meta }))
|
|
34
|
+
.digest('hex');
|
|
35
|
+
return SchemaService.serializer.serialize('collections', data, {
|
|
36
|
+
...meta,
|
|
37
|
+
schemaFileHash,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
static get serializer() {
|
|
41
|
+
const serializer = new json_api_serializer_1.default();
|
|
42
|
+
serializer.register('collections', {
|
|
43
|
+
// Pass the metadata provided to the serialization fn
|
|
44
|
+
topLevelMeta: (extraData) => extraData,
|
|
45
|
+
relationships: {
|
|
46
|
+
segments: { type: 'segments' },
|
|
47
|
+
actions: { type: 'actions' },
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
serializer.register('segments', {});
|
|
51
|
+
serializer.register('actions', {});
|
|
52
|
+
return serializer;
|
|
53
|
+
}
|
|
54
|
+
async doServerWantsSchema(hash) {
|
|
55
|
+
// Check if the schema was already sent by another agent
|
|
56
|
+
const { sendSchema } = await server_1.default.query(this.options, 'post', '/forest/apimaps/hashcheck', {}, { schemaFileHash: hash });
|
|
57
|
+
return sendSchema;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.default = SchemaService;
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NoZW1hL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDhFQUFvRDtBQUdwRCw2REFBMEM7QUFLMUMsTUFBcUIsYUFBYTtJQUNoQyxZQUFvQixPQUE2QztRQUE3QyxZQUFPLEdBQVAsT0FBTyxDQUFzQztJQUFHLENBQUM7SUFFckUsS0FBSyxDQUFDLFVBQVUsQ0FDZCxNQUFnQyxFQUNoQyxTQUFpQixFQUNqQixZQUFvQjtRQUVwQixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDeEUsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU5RSxJQUFJLFVBQVUsRUFBRTtZQUNkLE1BQU0sZ0JBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzlFO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQ2QsTUFBZ0MsRUFDaEMsU0FBaUIsRUFDakIsWUFBb0I7UUFFcEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLElBQUksR0FBRztZQUNYLEtBQUssRUFBRSxTQUFTO1lBQ2hCLGFBQWEsRUFBRSxZQUFZO1lBQzNCLEtBQUssRUFBRTtnQkFDTCxNQUFNLEVBQUUsUUFBUTtnQkFDaEIsY0FBYyxFQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJO2FBQzFEO1NBQ0YsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLGdCQUFNO2FBQzFCLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQzNDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqQixPQUFPLGFBQWEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUU7WUFDN0QsR0FBRyxJQUFJO1lBQ1AsY0FBYztTQUNmLENBQXFCLENBQUM7SUFDekIsQ0FBQztJQUVPLE1BQU0sS0FBSyxVQUFVO1FBQzNCLE1BQU0sVUFBVSxHQUFHLElBQUksNkJBQWlCLEVBQUUsQ0FBQztRQUMzQyxVQUFVLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRTtZQUNqQyxxREFBcUQ7WUFDckQsWUFBWSxFQUFFLENBQUMsU0FBa0IsRUFBRSxFQUFFLENBQUMsU0FBUztZQUMvQyxhQUFhLEVBQUU7Z0JBQ2IsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDOUIsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTthQUM3QjtTQUNGLENBQUMsQ0FBQztRQUNILFVBQVUsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRW5DLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBWTtRQUM1Qyx3REFBd0Q7UUFDeEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sZ0JBQVcsQ0FBQyxLQUFLLENBQzVDLElBQUksQ0FBQyxPQUFPLEVBQ1osTUFBTSxFQUNOLDJCQUEyQixFQUMzQixFQUFFLEVBQ0YsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQ3pCLENBQUM7UUFFRixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUF4RUQsZ0NBd0VDIn0=
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { PrimitiveTypes } from '@forestadmin/datasource-toolkit';
|
|
2
|
+
export declare type ForestServerColumnType = PrimitiveTypes | [ForestServerColumnType] | {
|
|
3
|
+
fields: Array<{
|
|
4
|
+
field: string;
|
|
5
|
+
type: ForestServerColumnType;
|
|
6
|
+
}>;
|
|
7
|
+
};
|
|
8
|
+
export declare type ForestServerCollection = {
|
|
9
|
+
name: string;
|
|
10
|
+
icon: null;
|
|
11
|
+
integration: null;
|
|
12
|
+
isReadOnly: boolean;
|
|
13
|
+
isSearchable: boolean;
|
|
14
|
+
isVirtual: false;
|
|
15
|
+
onlyForRelationships: boolean;
|
|
16
|
+
paginationType: 'page';
|
|
17
|
+
actions: Array<ForestServerAction>;
|
|
18
|
+
fields: Array<ForestServerField>;
|
|
19
|
+
segments: Array<ForestServerSegment>;
|
|
20
|
+
};
|
|
21
|
+
export declare type ForestServerAction = {
|
|
22
|
+
id: string;
|
|
23
|
+
name: string;
|
|
24
|
+
type: 'single' | 'bulk' | 'global';
|
|
25
|
+
baseUrl: string;
|
|
26
|
+
endpoint: string;
|
|
27
|
+
httpMethod: 'POST';
|
|
28
|
+
redirect: unknown;
|
|
29
|
+
download: boolean;
|
|
30
|
+
fields: ForestServerActionField[];
|
|
31
|
+
hooks: {
|
|
32
|
+
load: boolean;
|
|
33
|
+
change: Array<unknown>;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export declare type ForestServerActionField = {
|
|
37
|
+
value: unknown;
|
|
38
|
+
defaultValue: unknown;
|
|
39
|
+
description: string | null;
|
|
40
|
+
enums: string[];
|
|
41
|
+
field: string;
|
|
42
|
+
hook: string;
|
|
43
|
+
isReadOnly: boolean;
|
|
44
|
+
isRequired: boolean;
|
|
45
|
+
reference: string | null;
|
|
46
|
+
type: ForestServerColumnType;
|
|
47
|
+
widget: null | 'belongsto select' | 'file picker';
|
|
48
|
+
};
|
|
49
|
+
export declare type ForestServerField = Partial<{
|
|
50
|
+
field: string;
|
|
51
|
+
type: ForestServerColumnType;
|
|
52
|
+
defaultValue: unknown;
|
|
53
|
+
enums: null | string[];
|
|
54
|
+
integration: null;
|
|
55
|
+
isFilterable: boolean;
|
|
56
|
+
isPrimaryKey: boolean;
|
|
57
|
+
isReadOnly: boolean;
|
|
58
|
+
isRequired: boolean;
|
|
59
|
+
isSortable: boolean;
|
|
60
|
+
isVirtual: boolean;
|
|
61
|
+
reference: null | string;
|
|
62
|
+
inverseOf: null | string;
|
|
63
|
+
relationship: 'BelongsTo' | 'BelongsToMany' | 'HasMany' | 'HasOne';
|
|
64
|
+
validations: Array<{
|
|
65
|
+
message: string | null;
|
|
66
|
+
type: ValidationType;
|
|
67
|
+
value: unknown;
|
|
68
|
+
}>;
|
|
69
|
+
}>;
|
|
70
|
+
export declare type ForestServerSegment = {
|
|
71
|
+
id: string;
|
|
72
|
+
name: string;
|
|
73
|
+
};
|
|
74
|
+
export declare enum ValidationType {
|
|
75
|
+
Present = "is present",
|
|
76
|
+
GreaterThan = "is greater than",
|
|
77
|
+
LessThan = "is less than",
|
|
78
|
+
Before = "is before",
|
|
79
|
+
After = "is after",
|
|
80
|
+
LongerThan = "is longer than",
|
|
81
|
+
ShorterThan = "is shorter than",
|
|
82
|
+
Contains = "contains",
|
|
83
|
+
Like = "is like"
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidationType = void 0;
|
|
4
|
+
var ValidationType;
|
|
5
|
+
(function (ValidationType) {
|
|
6
|
+
ValidationType["Present"] = "is present";
|
|
7
|
+
ValidationType["GreaterThan"] = "is greater than";
|
|
8
|
+
ValidationType["LessThan"] = "is less than";
|
|
9
|
+
ValidationType["Before"] = "is before";
|
|
10
|
+
ValidationType["After"] = "is after";
|
|
11
|
+
ValidationType["LongerThan"] = "is longer than";
|
|
12
|
+
ValidationType["ShorterThan"] = "is shorter than";
|
|
13
|
+
ValidationType["Contains"] = "contains";
|
|
14
|
+
ValidationType["Like"] = "is like";
|
|
15
|
+
})(ValidationType = exports.ValidationType || (exports.ValidationType = {}));
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NoZW1hL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBFQSxJQUFZLGNBVVg7QUFWRCxXQUFZLGNBQWM7SUFDeEIsd0NBQXNCLENBQUE7SUFDdEIsaURBQStCLENBQUE7SUFDL0IsMkNBQXlCLENBQUE7SUFDekIsc0NBQW9CLENBQUE7SUFDcEIsb0NBQWtCLENBQUE7SUFDbEIsK0NBQTZCLENBQUE7SUFDN0IsaURBQStCLENBQUE7SUFDL0IsdUNBQXFCLENBQUE7SUFDckIsa0NBQWdCLENBQUE7QUFDbEIsQ0FBQyxFQVZXLGNBQWMsR0FBZCxzQkFBYyxLQUFkLHNCQUFjLFFBVXpCIn0=
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { ChartRequest } from './charts/chart-handler';
|
|
2
2
|
import type { Chart, QueryChart } from './charts/types';
|
|
3
3
|
import type { CollectionActionEvent, RawTree } from './permissions/types';
|
|
4
|
+
import type { Client } from 'openid-client';
|
|
5
|
+
import { UserInfo } from './auth/types';
|
|
6
|
+
import { IpWhitelistConfiguration } from './ip-whitelist/types';
|
|
7
|
+
import { ForestServerCollection } from './schema/types';
|
|
4
8
|
import ContextVariables, { RequestContextVariables } from './utils/context-variables';
|
|
5
9
|
export declare type LoggerLevel = 'Debug' | 'Info' | 'Warn' | 'Error';
|
|
6
10
|
export declare type Logger = (level: LoggerLevel, message: unknown) => void;
|
|
@@ -16,6 +20,10 @@ export interface ForestAdminClient {
|
|
|
16
20
|
readonly contextVariablesInstantiator: ContextVariablesInstantiatorInterface;
|
|
17
21
|
readonly chartHandler: ChartHandlerInterface;
|
|
18
22
|
verifySignedActionParameters<TSignedParameters>(signedParameters: string): TSignedParameters;
|
|
23
|
+
getIpWhitelistConfiguration(): Promise<IpWhitelistConfiguration>;
|
|
24
|
+
postSchema(schema: ForestServerCollection[], agentName: string, agentVersion: string): Promise<boolean>;
|
|
25
|
+
getOpenIdClient(): Promise<Client>;
|
|
26
|
+
getUserInfo(renderingId: number, accessToken: string): Promise<UserInfo>;
|
|
19
27
|
getScope(params: {
|
|
20
28
|
renderingId: number | string;
|
|
21
29
|
userId: number | string;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export default function defaultLogger(level: string, ...args:
|
|
1
|
+
export default function defaultLogger(level: string, ...args: unknown[]): void;
|
|
2
2
|
//# sourceMappingURL=default-logger.d.ts.map
|
|
@@ -12,4 +12,4 @@ function defaultLogger(level, ...args) {
|
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
exports.default = defaultLogger;
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZGVmYXVsdC1sb2dnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxNQUFNLFdBQVcsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRXZELFNBQXdCLGFBQWEsQ0FBQyxLQUFhLEVBQUUsR0FBRyxJQUFlO0lBQ3JFLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUUzQyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUU7UUFDeEMsc0NBQXNDO1FBQ3RDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0tBQ2xDO1NBQU07UUFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7S0FDeEI7QUFDSCxDQUFDO0FBVEQsZ0NBU0MifQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ForestAdminClientOptionsWithDefaults } from '../types';
|
|
2
|
+
declare type HttpOptions = Pick<ForestAdminClientOptionsWithDefaults, 'envSecret' | 'forestServerUrl'>;
|
|
3
|
+
export default class ServerUtils {
|
|
4
|
+
/** Query Forest-Admin server */
|
|
5
|
+
static query<T = unknown>(options: HttpOptions, method: 'get' | 'post' | 'put' | 'delete', path: string, headers?: Record<string, string>, body?: string | object): Promise<T>;
|
|
6
|
+
private static handleResponseError;
|
|
7
|
+
}
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1,45 @@
|
|
|
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 superagent_1 = __importDefault(require("superagent"));
|
|
7
|
+
class ServerUtils {
|
|
8
|
+
/** Query Forest-Admin server */
|
|
9
|
+
static async query(options, method, path, headers = {}, body) {
|
|
10
|
+
try {
|
|
11
|
+
const url = new URL(path, options.forestServerUrl).toString();
|
|
12
|
+
const request = superagent_1.default[method](url);
|
|
13
|
+
request.set('forest-secret-key', options.envSecret);
|
|
14
|
+
if (headers)
|
|
15
|
+
request.set(headers);
|
|
16
|
+
const response = await request.send(body);
|
|
17
|
+
return response.body;
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
this.handleResponseError(error);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
static handleResponseError(e) {
|
|
24
|
+
if (/certificate/i.test(e.message))
|
|
25
|
+
throw new Error('ForestAdmin server TLS certificate cannot be verified. ' +
|
|
26
|
+
'Please check that your system time is set properly.');
|
|
27
|
+
if (e.response) {
|
|
28
|
+
const status = e?.response?.status;
|
|
29
|
+
// 0 == offline, 502 == bad gateway from proxy
|
|
30
|
+
if (status === 0 || status === 502)
|
|
31
|
+
throw new Error('Failed to reach ForestAdmin server. Are you online?');
|
|
32
|
+
if (status === 404)
|
|
33
|
+
throw new Error('ForestAdmin server failed to find the project related to the envSecret you configured.' +
|
|
34
|
+
' Can you check that you copied it properly in the Forest initialization?');
|
|
35
|
+
if (status === 503)
|
|
36
|
+
throw new Error('Forest is in maintenance for a few minutes. We are upgrading your experience in ' +
|
|
37
|
+
'the forest. We just need a few more minutes to get it right.');
|
|
38
|
+
throw new Error('An unexpected error occurred while contacting the ForestAdmin server. ' +
|
|
39
|
+
'Please contact support@forestadmin.com for further investigations.');
|
|
40
|
+
}
|
|
41
|
+
throw e;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.default = ServerUtils;
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3NlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDREQUF1RDtBQU12RCxNQUFxQixXQUFXO0lBQzlCLGdDQUFnQztJQUNoQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FDaEIsT0FBb0IsRUFDcEIsTUFBeUMsRUFDekMsSUFBWSxFQUNaLFVBQWtDLEVBQUUsRUFDcEMsSUFBc0I7UUFFdEIsSUFBSTtZQUNGLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUQsTUFBTSxPQUFPLEdBQUcsb0JBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwRCxJQUFJLE9BQU87Z0JBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVsQyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFMUMsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQ3RCO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQVE7UUFDekMsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FDYix5REFBeUQ7Z0JBQ3ZELHFEQUFxRCxDQUN4RCxDQUFDO1FBRUosSUFBSyxDQUFtQixDQUFDLFFBQVEsRUFBRTtZQUNqQyxNQUFNLE1BQU0sR0FBSSxDQUFtQixFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7WUFFdEQsOENBQThDO1lBQzlDLElBQUksTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLEtBQUssR0FBRztnQkFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBRXpFLElBQUksTUFBTSxLQUFLLEdBQUc7Z0JBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQ2Isd0ZBQXdGO29CQUN0RiwwRUFBMEUsQ0FDN0UsQ0FBQztZQUVKLElBQUksTUFBTSxLQUFLLEdBQUc7Z0JBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0ZBQWtGO29CQUNoRiw4REFBOEQsQ0FDakUsQ0FBQztZQUVKLE1BQU0sSUFBSSxLQUFLLENBQ2Isd0VBQXdFO2dCQUN0RSxvRUFBb0UsQ0FDdkUsQ0FBQztTQUNIO1FBRUQsTUFBTSxDQUFDLENBQUM7SUFDVixDQUFDO0NBQ0Y7QUF6REQsOEJBeURDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forestadmin/forestadmin-client",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"publishConfig": {
|
|
@@ -12,9 +12,11 @@
|
|
|
12
12
|
"directory": "packages/forestadmin-client"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
+
"json-api-serializer": "^2.6.6",
|
|
15
16
|
"jsonwebtoken": "^8.5.1",
|
|
16
17
|
"lru-cache": "^7.3.1",
|
|
17
18
|
"object-hash": "^3.0.0",
|
|
19
|
+
"openid-client": "5.2.1",
|
|
18
20
|
"superagent": "^7.0.1"
|
|
19
21
|
},
|
|
20
22
|
"files": [
|
|
@@ -30,9 +32,9 @@
|
|
|
30
32
|
},
|
|
31
33
|
"devDependencies": {
|
|
32
34
|
"@forestadmin/datasource-toolkit": "1.1.1",
|
|
35
|
+
"@types/json-api-serializer": "2.6.3",
|
|
33
36
|
"@types/jsonwebtoken": "^8.5.8",
|
|
34
37
|
"@types/lru-cache": "^7.6.1",
|
|
35
|
-
"@types/superagent": "^4.1.15"
|
|
36
|
-
"fishery": "^2.1.0"
|
|
38
|
+
"@types/superagent": "^4.1.15"
|
|
37
39
|
}
|
|
38
40
|
}
|