@forestadmin/forestadmin-client 1.0.0 → 1.0.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.
- package/dist/forest-admin-client-with-cache.d.ts +9 -1
- package/dist/forest-admin-client-with-cache.js +10 -2
- package/dist/index.d.ts +3 -1
- package/dist/index.js +8 -2
- 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/forest-http-api.d.ts +0 -1
- package/dist/permissions/forest-http-api.js +5 -47
- package/dist/schema/index.d.ts +12 -0
- package/dist/schema/index.js +62 -0
- package/dist/schema/types.d.ts +85 -0
- package/dist/schema/types.js +16 -0
- package/dist/types.d.ts +4 -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 +4 -3
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import ChartHandler from './charts/chart-handler';
|
|
2
|
+
import IpWhiteListService from './ip-whitelist';
|
|
3
|
+
import { IpWhitelistConfiguration } from './ip-whitelist/types';
|
|
2
4
|
import RenderingPermissionService from './permissions/rendering-permission';
|
|
3
5
|
import { RawTree } from './permissions/types';
|
|
6
|
+
import SchemaService from './schema';
|
|
7
|
+
import { ForestServerCollection } from './schema/types';
|
|
4
8
|
import { ForestAdminClient, ForestAdminClientOptionsWithDefaults, PermissionService } from './types';
|
|
5
9
|
import ContextVariablesInstantiator from './utils/context-variables-instantiator';
|
|
6
10
|
export default class ForestAdminClientWithCache implements ForestAdminClient {
|
|
@@ -9,8 +13,12 @@ export default class ForestAdminClientWithCache implements ForestAdminClient {
|
|
|
9
13
|
protected readonly renderingPermissionService: RenderingPermissionService;
|
|
10
14
|
readonly contextVariablesInstantiator: ContextVariablesInstantiator;
|
|
11
15
|
readonly chartHandler: ChartHandler;
|
|
12
|
-
|
|
16
|
+
protected readonly ipWhitelistService: IpWhiteListService;
|
|
17
|
+
protected readonly schemaService: SchemaService;
|
|
18
|
+
constructor(options: ForestAdminClientOptionsWithDefaults, permissionService: PermissionService, renderingPermissionService: RenderingPermissionService, contextVariablesInstantiator: ContextVariablesInstantiator, chartHandler: ChartHandler, ipWhitelistService: IpWhiteListService, schemaService: SchemaService);
|
|
13
19
|
verifySignedActionParameters<TSignedParameters>(signedParameters: string): TSignedParameters;
|
|
20
|
+
getIpWhitelistConfiguration(): Promise<IpWhitelistConfiguration>;
|
|
21
|
+
postSchema(schema: ForestServerCollection[], agentName: string, agentVersion: string): Promise<boolean>;
|
|
14
22
|
getScope({ renderingId, userId, collectionName, }: {
|
|
15
23
|
renderingId: number | string;
|
|
16
24
|
userId: number | string;
|
|
@@ -5,16 +5,24 @@ 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) {
|
|
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;
|
|
14
16
|
}
|
|
15
17
|
verifySignedActionParameters(signedParameters) {
|
|
16
18
|
return (0, verify_approval_1.default)(signedParameters, this.options.envSecret);
|
|
17
19
|
}
|
|
20
|
+
async getIpWhitelistConfiguration() {
|
|
21
|
+
return this.ipWhitelistService.getConfiguration();
|
|
22
|
+
}
|
|
23
|
+
async postSchema(schema, agentName, agentVersion) {
|
|
24
|
+
return this.schemaService.postSchema(schema, agentName, agentVersion);
|
|
25
|
+
}
|
|
18
26
|
async getScope({ renderingId, userId, collectionName, }) {
|
|
19
27
|
return this.renderingPermissionService.getScope({
|
|
20
28
|
renderingId,
|
|
@@ -27,4 +35,4 @@ class ForestAdminClientWithCache {
|
|
|
27
35
|
}
|
|
28
36
|
}
|
|
29
37
|
exports.default = ForestAdminClientWithCache;
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZXN0LWFkbWluLWNsaWVudC13aXRoLWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZvcmVzdC1hZG1pbi1jbGllbnQtd2l0aC1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUtBLG9GQUFxRTtBQVVyRSxNQUFxQiwwQkFBMEI7SUFDN0MsWUFDcUIsT0FBNkMsRUFDaEQsaUJBQW9DLEVBQ2pDLDBCQUFzRCxFQUN6RCw0QkFBMEQsRUFDMUQsWUFBMEIsRUFDdkIsa0JBQXNDLEVBQ3RDLGFBQTRCO1FBTjVCLFlBQU8sR0FBUCxPQUFPLENBQXNDO1FBQ2hELHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDakMsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtRQUN6RCxpQ0FBNEIsR0FBNUIsNEJBQTRCLENBQThCO1FBQzFELGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQ3ZCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsa0JBQWEsR0FBYixhQUFhLENBQWU7SUFDOUMsQ0FBQztJQUVHLDRCQUE0QixDQUNqQyxnQkFBd0I7UUFFeEIsT0FBTyxJQUFBLHlCQUF3QixFQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELEtBQUssQ0FBQywyQkFBMkI7UUFDL0IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FDZCxNQUFnQyxFQUNoQyxTQUFpQixFQUNqQixZQUFvQjtRQUVwQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFDcEIsV0FBVyxFQUNYLE1BQU0sRUFDTixjQUFjLEdBS2Y7UUFDQyxPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUM7WUFDOUMsV0FBVztZQUNYLGNBQWM7WUFDZCxNQUFNO1NBQ1AsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLG1CQUFtQixDQUFDLFdBQTRCO1FBQ3JELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNGO0FBaERELDZDQWdEQyJ9
|
package/dist/index.d.ts
CHANGED
|
@@ -6,9 +6,11 @@ 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';
|
|
10
11
|
export default function createForestAdminClient(options: ForestAdminClientOptions): ForestAdminClient;
|
|
11
12
|
export * from './charts/types';
|
|
13
|
+
export * from './schema/types';
|
|
12
14
|
export { default as ContextVariablesInjector } from './utils/context-variables-injector';
|
|
13
15
|
export { default as ContextVariables } from './utils/context-variables';
|
|
14
16
|
export { default as ChartHandler } from './charts/chart-handler';
|
package/dist/index.js
CHANGED
|
@@ -20,10 +20,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
20
20
|
exports.ChartHandler = exports.ContextVariables = exports.ContextVariablesInjector = exports.CollectionActionEvent = exports.NonSelectSQLQueryError = exports.EmptySQLQueryError = exports.ChainedSQLQueryError = exports.JTWUnableToVerifyError = exports.JTWTokenExpiredError = void 0;
|
|
21
21
|
const chart_handler_1 = __importDefault(require("./charts/chart-handler"));
|
|
22
22
|
const forest_admin_client_with_cache_1 = __importDefault(require("./forest-admin-client-with-cache"));
|
|
23
|
+
const ip_whitelist_1 = __importDefault(require("./ip-whitelist"));
|
|
23
24
|
const action_permission_1 = __importDefault(require("./permissions/action-permission"));
|
|
24
25
|
const permission_with_cache_1 = __importDefault(require("./permissions/permission-with-cache"));
|
|
25
26
|
const rendering_permission_1 = __importDefault(require("./permissions/rendering-permission"));
|
|
26
27
|
const user_permission_1 = __importDefault(require("./permissions/user-permission"));
|
|
28
|
+
const schema_1 = __importDefault(require("./schema"));
|
|
27
29
|
const context_variables_instantiator_1 = __importDefault(require("./utils/context-variables-instantiator"));
|
|
28
30
|
const default_logger_1 = __importDefault(require("./utils/default-logger"));
|
|
29
31
|
var jwt_token_expired_error_1 = require("./permissions/errors/jwt-token-expired-error");
|
|
@@ -36,6 +38,7 @@ var empty_sql_query_error_1 = require("./permissions/errors/empty-sql-query-erro
|
|
|
36
38
|
Object.defineProperty(exports, "EmptySQLQueryError", { enumerable: true, get: function () { return __importDefault(empty_sql_query_error_1).default; } });
|
|
37
39
|
var non_select_sql_query_error_1 = require("./permissions/errors/non-select-sql-query-error");
|
|
38
40
|
Object.defineProperty(exports, "NonSelectSQLQueryError", { enumerable: true, get: function () { return __importDefault(non_select_sql_query_error_1).default; } });
|
|
41
|
+
// These types are used for the agent-generator package
|
|
39
42
|
var types_1 = require("./permissions/types");
|
|
40
43
|
Object.defineProperty(exports, "CollectionActionEvent", { enumerable: true, get: function () { return types_1.CollectionActionEvent; } });
|
|
41
44
|
function createForestAdminClient(options) {
|
|
@@ -52,14 +55,17 @@ function createForestAdminClient(options) {
|
|
|
52
55
|
const permissionService = new permission_with_cache_1.default(actionPermission, renderingPermission);
|
|
53
56
|
const contextVariablesInstantiator = new context_variables_instantiator_1.default(renderingPermission);
|
|
54
57
|
const chartHandler = new chart_handler_1.default(contextVariablesInstantiator);
|
|
55
|
-
|
|
58
|
+
const ipWhitelistPermission = new ip_whitelist_1.default(optionsWithDefaults);
|
|
59
|
+
const schemaService = new schema_1.default(optionsWithDefaults);
|
|
60
|
+
return new forest_admin_client_with_cache_1.default(optionsWithDefaults, permissionService, renderingPermission, contextVariablesInstantiator, chartHandler, ipWhitelistPermission, schemaService);
|
|
56
61
|
}
|
|
57
62
|
exports.default = createForestAdminClient;
|
|
58
63
|
__exportStar(require("./charts/types"), exports);
|
|
64
|
+
__exportStar(require("./schema/types"), exports);
|
|
59
65
|
var context_variables_injector_1 = require("./utils/context-variables-injector");
|
|
60
66
|
Object.defineProperty(exports, "ContextVariablesInjector", { enumerable: true, get: function () { return __importDefault(context_variables_injector_1).default; } });
|
|
61
67
|
var context_variables_1 = require("./utils/context-variables");
|
|
62
68
|
Object.defineProperty(exports, "ContextVariables", { enumerable: true, get: function () { return __importDefault(context_variables_1).default; } });
|
|
63
69
|
var chart_handler_2 = require("./charts/chart-handler");
|
|
64
70
|
Object.defineProperty(exports, "ChartHandler", { enumerable: true, get: function () { return __importDefault(chart_handler_2).default; } });
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyRUFBa0Q7QUFDbEQsc0dBQWlFO0FBQ2pFLGtFQUFnRDtBQUNoRCx3RkFBc0U7QUFDdEUsZ0dBQW9FO0FBQ3BFLDhGQUE0RTtBQUM1RSxvRkFBa0U7QUFDbEUsc0RBQXFDO0FBRXJDLDRHQUFrRjtBQUNsRiw0RUFBbUQ7QUFFbkQsd0ZBQStGO0FBQXRGLGdKQUFBLE9BQU8sT0FBd0I7QUFDeEMsOEZBQW9HO0FBQTNGLHFKQUFBLE9BQU8sT0FBMEI7QUFDMUMsd0ZBQStGO0FBQXRGLGdKQUFBLE9BQU8sT0FBd0I7QUFDeEMsb0ZBQTJGO0FBQWxGLDRJQUFBLE9BQU8sT0FBc0I7QUFDdEMsOEZBQW9HO0FBQTNGLHFKQUFBLE9BQU8sT0FBMEI7QUFXMUMsdURBQXVEO0FBQ3ZELDZDQUk2QjtBQUgzQiw4R0FBQSxxQkFBcUIsT0FBQTtBQUt2QixTQUF3Qix1QkFBdUIsQ0FDN0MsT0FBaUM7SUFFakMsTUFBTSxtQkFBbUIsR0FBeUM7UUFDaEUsZUFBZSxFQUFFLDZCQUE2QjtRQUM5QyxpQ0FBaUMsRUFBRSxFQUFFLEdBQUcsRUFBRTtRQUMxQyxzQ0FBc0M7UUFDdEMsTUFBTSxFQUFFLHdCQUFhO1FBQ3JCLEdBQUcsT0FBTztLQUNYLENBQUM7SUFFRixNQUFNLGdCQUFnQixHQUFHLElBQUksMkJBQXVCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMxRSxNQUFNLGNBQWMsR0FBRyxJQUFJLHlCQUFxQixDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdEUsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLDhCQUEwQixDQUFDLG1CQUFtQixFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2hHLE1BQU0saUJBQWlCLEdBQUcsSUFBSSwrQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3ZGLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSx3Q0FBNEIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNGLE1BQU0sWUFBWSxHQUFHLElBQUksdUJBQVksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxzQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sYUFBYSxHQUFHLElBQUksZ0JBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRTdELE9BQU8sSUFBSSx3Q0FBaUIsQ0FDMUIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLFlBQVksRUFDWixxQkFBcUIsRUFDckIsYUFBYSxDQUNkLENBQUM7QUFDSixDQUFDO0FBN0JELDBDQTZCQztBQUVELGlEQUErQjtBQUMvQixpREFBK0I7QUFDL0IsaUZBQXlGO0FBQWhGLHVKQUFBLE9BQU8sT0FBNEI7QUFDNUMsK0RBQXdFO0FBQS9ELHNJQUFBLE9BQU8sT0FBb0I7QUFDcEMsd0RBQWlFO0FBQXhELDhIQUFBLE9BQU8sT0FBZ0IifQ==
|
|
@@ -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==
|
|
@@ -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==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ForestAdminClientOptionsWithDefaults } from '../types';
|
|
2
|
+
import { ForestServerCollection } from './types';
|
|
3
|
+
export default class SchemaService {
|
|
4
|
+
private options;
|
|
5
|
+
private serializer;
|
|
6
|
+
constructor(options: ForestAdminClientOptionsWithDefaults);
|
|
7
|
+
postSchema(schema: ForestServerCollection[], agentName: string, agentVersion: string): Promise<boolean>;
|
|
8
|
+
private serialize;
|
|
9
|
+
private getSerializer;
|
|
10
|
+
private doServerWantsSchema;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,62 @@
|
|
|
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
|
+
this.serializer = this.getSerializer();
|
|
13
|
+
}
|
|
14
|
+
async postSchema(schema, agentName, agentVersion) {
|
|
15
|
+
const apimap = this.serialize(schema, agentName, agentVersion);
|
|
16
|
+
const shouldSend = await this.doServerWantsSchema(apimap.meta.schemaFileHash);
|
|
17
|
+
if (shouldSend) {
|
|
18
|
+
await server_1.default.query(this.options, 'post', '/forest/apimaps', {}, apimap);
|
|
19
|
+
}
|
|
20
|
+
return shouldSend;
|
|
21
|
+
}
|
|
22
|
+
serialize(schema, agentName, agentVersion) {
|
|
23
|
+
const data = schema.map(c => ({ id: c.name, ...c }));
|
|
24
|
+
const meta = {
|
|
25
|
+
liana: agentName,
|
|
26
|
+
liana_version: agentVersion,
|
|
27
|
+
stack: {
|
|
28
|
+
engine: 'nodejs',
|
|
29
|
+
engine_version: process.versions && process.versions.node,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
const schemaFileHash = crypto_1.default
|
|
33
|
+
.createHash('sha1')
|
|
34
|
+
.update(JSON.stringify({ ...schema, meta }))
|
|
35
|
+
.digest('hex');
|
|
36
|
+
return this.serializer.serialize('collections', data, {
|
|
37
|
+
...meta,
|
|
38
|
+
schemaFileHash,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
getSerializer() {
|
|
42
|
+
const serializer = new json_api_serializer_1.default();
|
|
43
|
+
serializer.register('collections', {
|
|
44
|
+
// Pass the metadata provided to the serialization fn
|
|
45
|
+
topLevelMeta: (extraData) => extraData,
|
|
46
|
+
relationships: {
|
|
47
|
+
segments: { type: 'segments' },
|
|
48
|
+
actions: { type: 'actions' },
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
serializer.register('segments', {});
|
|
52
|
+
serializer.register('actions', {});
|
|
53
|
+
return serializer;
|
|
54
|
+
}
|
|
55
|
+
async doServerWantsSchema(hash) {
|
|
56
|
+
// Check if the schema was already sent by another agent
|
|
57
|
+
const { sendSchema } = await server_1.default.query(this.options, 'post', '/forest/apimaps/hashcheck', {}, { schemaFileHash: hash });
|
|
58
|
+
return sendSchema;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.default = SchemaService;
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NoZW1hL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDhFQUFvRDtBQUdwRCw2REFBMEM7QUFLMUMsTUFBcUIsYUFBYTtJQUdoQyxZQUFvQixPQUE2QztRQUE3QyxZQUFPLEdBQVAsT0FBTyxDQUFzQztRQUZ6RCxlQUFVLEdBQXNCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUVPLENBQUM7SUFFckUsS0FBSyxDQUFDLFVBQVUsQ0FDZCxNQUFnQyxFQUNoQyxTQUFpQixFQUNqQixZQUFvQjtRQUVwQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDL0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU5RSxJQUFJLFVBQVUsRUFBRTtZQUNkLE1BQU0sZ0JBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzlFO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLFNBQVMsQ0FDZixNQUFnQyxFQUNoQyxTQUFpQixFQUNqQixZQUFvQjtRQUVwQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sSUFBSSxHQUFHO1lBQ1gsS0FBSyxFQUFFLFNBQVM7WUFDaEIsYUFBYSxFQUFFLFlBQVk7WUFDM0IsS0FBSyxFQUFFO2dCQUNMLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixjQUFjLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUk7YUFDMUQ7U0FDRixDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUcsZ0JBQU07YUFDMUIsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7YUFDM0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRTtZQUNwRCxHQUFHLElBQUk7WUFDUCxjQUFjO1NBQ2YsQ0FBcUIsQ0FBQztJQUN6QixDQUFDO0lBRU8sYUFBYTtRQUNuQixNQUFNLFVBQVUsR0FBRyxJQUFJLDZCQUFpQixFQUFFLENBQUM7UUFDM0MsVUFBVSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7WUFDakMscURBQXFEO1lBQ3JELFlBQVksRUFBRSxDQUFDLFNBQWtCLEVBQUUsRUFBRSxDQUFDLFNBQVM7WUFDL0MsYUFBYSxFQUFFO2dCQUNiLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQzlCLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7YUFDN0I7U0FDRixDQUFDLENBQUM7UUFDSCxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwQyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVuQyxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU8sS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQVk7UUFDNUMsd0RBQXdEO1FBQ3hELE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLGdCQUFXLENBQUMsS0FBSyxDQUM1QyxJQUFJLENBQUMsT0FBTyxFQUNaLE1BQU0sRUFDTiwyQkFBMkIsRUFDM0IsRUFBRSxFQUNGLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUN6QixDQUFDO1FBRUYsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztDQUNGO0FBMUVELGdDQTBFQyJ9
|
|
@@ -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,8 @@
|
|
|
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 { IpWhitelistConfiguration } from './ip-whitelist/types';
|
|
5
|
+
import { ForestServerCollection } from './schema/types';
|
|
4
6
|
import ContextVariables, { RequestContextVariables } from './utils/context-variables';
|
|
5
7
|
export declare type LoggerLevel = 'Debug' | 'Info' | 'Warn' | 'Error';
|
|
6
8
|
export declare type Logger = (level: LoggerLevel, message: unknown) => void;
|
|
@@ -16,6 +18,8 @@ export interface ForestAdminClient {
|
|
|
16
18
|
readonly contextVariablesInstantiator: ContextVariablesInstantiatorInterface;
|
|
17
19
|
readonly chartHandler: ChartHandlerInterface;
|
|
18
20
|
verifySignedActionParameters<TSignedParameters>(signedParameters: string): TSignedParameters;
|
|
21
|
+
getIpWhitelistConfiguration(): Promise<IpWhitelistConfiguration>;
|
|
22
|
+
postSchema(schema: ForestServerCollection[], agentName: string, agentVersion: string): Promise<boolean>;
|
|
19
23
|
getScope(params: {
|
|
20
24
|
renderingId: number | string;
|
|
21
25
|
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.1",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"publishConfig": {
|
|
@@ -12,6 +12,7 @@
|
|
|
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",
|
|
@@ -30,9 +31,9 @@
|
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
32
33
|
"@forestadmin/datasource-toolkit": "1.1.1",
|
|
34
|
+
"@types/json-api-serializer": "2.6.3",
|
|
33
35
|
"@types/jsonwebtoken": "^8.5.8",
|
|
34
36
|
"@types/lru-cache": "^7.6.1",
|
|
35
|
-
"@types/superagent": "^4.1.15"
|
|
36
|
-
"fishery": "^2.1.0"
|
|
37
|
+
"@types/superagent": "^4.1.15"
|
|
37
38
|
}
|
|
38
39
|
}
|