@forestadmin/agent 1.66.1 → 1.67.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/agent.js +1 -1
  2. package/dist/framework-mounter.d.ts +0 -1
  3. package/dist/framework-mounter.js +18 -8
  4. package/dist/index.js +3 -3
  5. package/dist/routes/access/api-chart-collection.d.ts +0 -1
  6. package/dist/routes/access/api-chart-collection.js +1 -1
  7. package/dist/routes/access/api-chart-datasource.d.ts +0 -1
  8. package/dist/routes/access/api-chart-datasource.js +1 -1
  9. package/dist/routes/access/chart.d.ts +0 -1
  10. package/dist/routes/access/chart.js +2 -2
  11. package/dist/routes/access/count-related.d.ts +0 -1
  12. package/dist/routes/access/count-related.js +1 -1
  13. package/dist/routes/access/count.d.ts +0 -1
  14. package/dist/routes/access/count.js +1 -1
  15. package/dist/routes/access/csv-related.d.ts +0 -1
  16. package/dist/routes/access/csv.d.ts +0 -1
  17. package/dist/routes/access/get.d.ts +0 -1
  18. package/dist/routes/access/get.js +1 -1
  19. package/dist/routes/access/list-related.d.ts +0 -1
  20. package/dist/routes/access/list.d.ts +0 -1
  21. package/dist/routes/access/native-query-datasource.d.ts +0 -1
  22. package/dist/routes/access/native-query-datasource.js +1 -1
  23. package/dist/routes/base-route.d.ts +0 -1
  24. package/dist/routes/capabilities.d.ts +0 -1
  25. package/dist/routes/index.js +2 -2
  26. package/dist/routes/modification/action/action-authorization.js +1 -1
  27. package/dist/routes/modification/action/action.d.ts +0 -1
  28. package/dist/routes/modification/action/action.js +1 -1
  29. package/dist/routes/modification/associate-related.d.ts +0 -1
  30. package/dist/routes/modification/associate-related.js +1 -1
  31. package/dist/routes/modification/create.d.ts +0 -1
  32. package/dist/routes/modification/create.js +1 -1
  33. package/dist/routes/modification/delete.d.ts +0 -1
  34. package/dist/routes/modification/dissociate-delete-related.d.ts +0 -1
  35. package/dist/routes/modification/dissociate-delete-related.js +1 -1
  36. package/dist/routes/modification/update-field.d.ts +0 -1
  37. package/dist/routes/modification/update-field.js +1 -1
  38. package/dist/routes/modification/update-relation.d.ts +0 -1
  39. package/dist/routes/modification/update-relation.js +1 -1
  40. package/dist/routes/modification/update.d.ts +0 -1
  41. package/dist/routes/modification/update.js +1 -1
  42. package/dist/routes/security/authentication.d.ts +0 -1
  43. package/dist/routes/security/authentication.js +1 -1
  44. package/dist/routes/security/ip-whitelist.d.ts +0 -1
  45. package/dist/routes/security/ip-whitelist.js +1 -1
  46. package/dist/routes/security/scope-invalidation.d.ts +0 -1
  47. package/dist/routes/security/scope-invalidation.js +1 -1
  48. package/dist/routes/system/error-handling.d.ts +0 -1
  49. package/dist/routes/system/error-handling.js +1 -1
  50. package/dist/routes/system/healthcheck.d.ts +0 -1
  51. package/dist/routes/system/logger.d.ts +0 -1
  52. package/dist/routes/system/logger.js +1 -1
  53. package/dist/services/authorization/authorization.js +1 -1
  54. package/dist/services/authorization/index.js +2 -2
  55. package/dist/services/model-customizations/actions/get-actions.js +2 -2
  56. package/dist/services/model-customizations/actions/update-record/execute-update-record.js +2 -2
  57. package/dist/services/model-customizations/actions/update-record/update-record-plugin.js +2 -2
  58. package/dist/services/model-customizations/actions/webhook/execute-webhook.js +2 -2
  59. package/dist/services/model-customizations/actions/webhook/webhook-plugin.js +2 -2
  60. package/dist/services/model-customizations/customization.js +2 -2
  61. package/dist/services/segment-query-handler.js +1 -1
  62. package/dist/services/serializer.js +1 -1
  63. package/dist/types.d.ts +0 -1
  64. package/dist/types.js +3 -3
  65. package/dist/utils/condition-tree-parser.js +1 -1
  66. package/dist/utils/csv-generator.js +1 -1
  67. package/dist/utils/forest-schema/action-values.js +1 -1
  68. package/dist/utils/forest-schema/column-schema-validator.js +1 -1
  69. package/dist/utils/forest-schema/generator-action-field-widget.js +2 -2
  70. package/dist/utils/forest-schema/generator-actions.js +3 -3
  71. package/dist/utils/forest-schema/generator-fields.js +2 -2
  72. package/dist/utils/forest-schema/validation.js +3 -3
  73. package/dist/utils/id.js +1 -1
  74. package/dist/utils/options-validator.js +2 -2
  75. package/dist/utils/query-string.js +2 -2
  76. package/package.json +4 -3
  77. package/dist/agent/services/chart.d.ts +0 -102
  78. package/dist/agent/services/chart.js +0 -114
  79. package/dist/routes/access/api-chart.d.ts +0 -16
  80. package/dist/routes/access/api-chart.js +0 -47
  81. package/dist/routes/modification/action.d.ts +0 -16
  82. package/dist/routes/modification/action.js +0 -121
  83. package/dist/services/authorization/internal/action-permission.d.ts +0 -20
  84. package/dist/services/authorization/internal/action-permission.js +0 -98
  85. package/dist/services/authorization/internal/generate-action-identifier.d.ts +0 -12
  86. package/dist/services/authorization/internal/generate-action-identifier.js +0 -15
  87. package/dist/services/authorization/internal/generate-actions-from-permissions.d.ts +0 -12
  88. package/dist/services/authorization/internal/generate-actions-from-permissions.js +0 -139
  89. package/dist/services/authorization/internal/generate-user-scope.d.ts +0 -10
  90. package/dist/services/authorization/internal/generate-user-scope.js +0 -45
  91. package/dist/services/authorization/internal/hash-chart.d.ts +0 -5
  92. package/dist/services/authorization/internal/hash-chart.js +0 -58
  93. package/dist/services/authorization/internal/rendering-permission.d.ts +0 -39
  94. package/dist/services/authorization/internal/rendering-permission.js +0 -121
  95. package/dist/services/authorization/internal/types.d.ts +0 -255
  96. package/dist/services/authorization/internal/types.js +0 -54
  97. package/dist/services/authorization/internal/user-permission.d.ts +0 -16
  98. package/dist/services/authorization/internal/user-permission.js +0 -46
  99. package/dist/services/permissions.d.ts +0 -19
  100. package/dist/services/permissions.js +0 -85
  101. package/dist/utils/forest-http-api.d.ts +0 -37
  102. package/dist/utils/forest-http-api.js +0 -100
  103. package/dist/utils/forest-schema/column-schema-validation.d.ts +0 -5
  104. package/dist/utils/forest-schema/column-schema-validation.js +0 -14
  105. package/dist/utils/forest-schema/emitter.d.ts +0 -17
  106. package/dist/utils/forest-schema/emitter.js +0 -38
  107. package/dist/utils/forest-schema/schema-generator.d.ts +0 -6
  108. package/dist/utils/forest-schema/schema-generator.js +0 -13
  109. package/dist/utils/forest-schema/schema-serializer.d.ts +0 -12
  110. package/dist/utils/forest-schema/schema-serializer.js +0 -35
  111. package/dist/utils/forest-schema/types.d.ts +0 -85
  112. package/dist/utils/forest-schema/types.js +0 -16
@@ -1,37 +0,0 @@
1
- import { JSONAPIDocument } from 'json-api-serializer';
2
- import { IssuerMetadata } from 'openid-client';
3
- import { AgentOptions } from '../types';
4
- export declare type IpWhitelistConfiguration = {
5
- isFeatureEnabled: boolean;
6
- ipRules: Array<{
7
- type: number;
8
- ipMinimum?: string;
9
- ipMaximum?: string;
10
- ip?: string;
11
- range?: string;
12
- }>;
13
- };
14
- export declare type UserInfo = {
15
- id: number;
16
- email: string;
17
- firstName: string;
18
- lastName: string;
19
- team: string;
20
- renderingId: number;
21
- role: string;
22
- tags: {
23
- [key: string]: string;
24
- };
25
- permissionLevel: string;
26
- };
27
- declare type HttpOptions = Pick<AgentOptions, 'envSecret' | 'forestServerUrl' | 'isProduction'>;
28
- export default class ForestHttpApi {
29
- static getIpWhitelistConfiguration(options: HttpOptions): Promise<IpWhitelistConfiguration>;
30
- static getOpenIdIssuerMetadata(options: HttpOptions): Promise<IssuerMetadata>;
31
- static getUserInformation(options: HttpOptions, renderingId: number, accessToken: string): Promise<UserInfo>;
32
- static hasSchema(options: HttpOptions, hash: string): Promise<boolean>;
33
- static uploadSchema(options: HttpOptions, apimap: JSONAPIDocument): Promise<void>;
34
- private static handleResponseError;
35
- }
36
- export {};
37
- //# sourceMappingURL=forest-http-api.d.ts.map
@@ -1,100 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const superagent_1 = __importDefault(require("superagent"));
7
- class ForestHttpApi {
8
- static async getIpWhitelistConfiguration(options) {
9
- try {
10
- const response = await superagent_1.default
11
- .get(new URL('/liana/v1/ip-whitelist-rules', options.forestServerUrl).toString())
12
- .set('forest-secret-key', options.envSecret);
13
- const { attributes } = response.body.data;
14
- return { isFeatureEnabled: attributes.use_ip_whitelist, ipRules: attributes.rules };
15
- }
16
- catch (e) {
17
- this.handleResponseError(e);
18
- }
19
- }
20
- static async getOpenIdIssuerMetadata(options) {
21
- try {
22
- const response = await superagent_1.default
23
- .get(new URL('/oidc/.well-known/openid-configuration', options.forestServerUrl).toString())
24
- .set('forest-secret-key', options.envSecret);
25
- return response.body;
26
- }
27
- catch (e) {
28
- this.handleResponseError(e);
29
- }
30
- }
31
- static async getUserInformation(options, renderingId, accessToken) {
32
- try {
33
- const url = new URL(`/liana/v2/renderings/${renderingId}/authorization`, options.forestServerUrl);
34
- const response = await superagent_1.default
35
- .get(url.toString())
36
- .set('forest-token', accessToken)
37
- .set('forest-secret-key', options.envSecret);
38
- const { attributes, id } = response.body.data;
39
- return {
40
- id: Number(id),
41
- email: attributes.email,
42
- firstName: attributes.first_name,
43
- lastName: attributes.last_name,
44
- team: attributes.teams[0],
45
- role: attributes.role,
46
- tags: attributes.tags?.reduce((memo, { key, value }) => ({ ...memo, [key]: value }), {}),
47
- renderingId,
48
- permissionLevel: attributes.permission_level,
49
- };
50
- }
51
- catch (e) {
52
- this.handleResponseError(e);
53
- }
54
- }
55
- static async hasSchema(options, hash) {
56
- try {
57
- const response = await superagent_1.default
58
- .post(new URL('/forest/apimaps/hashcheck', options.forestServerUrl).toString())
59
- .send({ schemaFileHash: hash })
60
- .set('forest-secret-key', options.envSecret);
61
- return !response?.body?.sendSchema;
62
- }
63
- catch (e) {
64
- this.handleResponseError(e);
65
- }
66
- }
67
- static async uploadSchema(options, apimap) {
68
- try {
69
- await superagent_1.default
70
- .post(new URL('/forest/apimaps', options.forestServerUrl).toString())
71
- .send(apimap)
72
- .set('forest-secret-key', options.envSecret);
73
- }
74
- catch (e) {
75
- this.handleResponseError(e);
76
- }
77
- }
78
- static handleResponseError(e) {
79
- if (/certificate/i.test(e.message))
80
- throw new Error('ForestAdmin server TLS certificate cannot be verified. ' +
81
- 'Please check that your system time is set properly.');
82
- if (e.response) {
83
- const status = e?.response?.status;
84
- // 0 == offline, 502 == bad gateway from proxy
85
- if (status === 0 || status === 502)
86
- throw new Error('Failed to reach ForestAdmin server. Are you online?');
87
- if (status === 404)
88
- throw new Error('ForestAdmin server failed to find the project related to the envSecret you configured.' +
89
- ' Can you check that you copied it properly in the Forest initialization?');
90
- if (status === 503)
91
- throw new Error('Forest is in maintenance for a few minutes. We are upgrading your experience in ' +
92
- 'the forest. We just need a few more minutes to get it right.');
93
- throw new Error('An unexpected error occurred while contacting the ForestAdmin server. ' +
94
- 'Please contact support@forestadmin.com for further investigations.');
95
- }
96
- throw e;
97
- }
98
- }
99
- exports.default = ForestHttpApi;
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZXN0LWh0dHAtYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2ZvcmVzdC1odHRwLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUdBLDREQUFpRTtBQTZCakUsTUFBcUIsYUFBYTtJQUNoQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUN0QyxPQUFvQjtRQUVwQixJQUFJO1lBQ0YsTUFBTSxRQUFRLEdBQWEsTUFBTSxvQkFBVTtpQkFDeEMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLDhCQUE4QixFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDaEYsR0FBRyxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUUvQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFFMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3JGO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxPQUFvQjtRQUN2RCxJQUFJO1lBQ0YsTUFBTSxRQUFRLEdBQWEsTUFBTSxvQkFBVTtpQkFDeEMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLHdDQUF3QyxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDMUYsR0FBRyxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUUvQyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7U0FDdEI7UUFBQyxPQUFPLENBQUMsRUFBRTtZ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
@@ -1,5 +0,0 @@
1
- import { ColumnSchema } from '@forestadmin/datasource-toolkit';
2
- export default class ColumnSchemaValidation {
3
- static validate(column: ColumnSchema, name: string): void;
4
- }
5
- //# sourceMappingURL=column-schema-validation.d.ts.map
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
4
- class ColumnSchemaValidation {
5
- static validate(column, name) {
6
- if (!column.enumValues)
7
- return;
8
- if (!Array.isArray(column.enumValues) || !column.enumValues.every(v => typeof v === 'string')) {
9
- throw new datasource_toolkit_1.ValidationError(`The enumValues of column '${name}' must be an array of string instead of ${JSON.stringify(column.enumValues)}`);
10
- }
11
- }
12
- }
13
- exports.default = ColumnSchemaValidation;
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLXNjaGVtYS12YWxpZGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL2ZvcmVzdC1zY2hlbWEvY29sdW1uLXNjaGVtYS12YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsd0VBQWdGO0FBRWhGLE1BQXFCLHNCQUFzQjtJQUN6QyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQW9CLEVBQUUsSUFBWTtRQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBRS9CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLEVBQUU7WUFDN0YsTUFBTSxJQUFJLG9DQUFlLENBQ3ZCLDZCQUE2QixJQUFJLDJDQUEyQyxJQUFJLENBQUMsU0FBUyxDQUN4RixNQUFNLENBQUMsVUFBVSxDQUNsQixFQUFFLENBQ0osQ0FBQztTQUNIO0lBQ0gsQ0FBQztDQUNGO0FBWkQseUNBWUMifQ==
@@ -1,17 +0,0 @@
1
- import { DataSource } from '@forestadmin/datasource-toolkit';
2
- import { AgentOptions } from '../../types';
3
- declare type SerializedSchema = {
4
- meta: {
5
- schemaFileHash: string;
6
- };
7
- };
8
- declare type Options = Pick<AgentOptions, 'isProduction' | 'schemaPath'>;
9
- /**
10
- * Generate and dispatch dataSource schema on agent start.
11
- */
12
- export default class SchemaEmitter {
13
- static getSerializedSchema(options: Options, dataSource: DataSource): Promise<SerializedSchema>;
14
- private static loadFromDisk;
15
- }
16
- export {};
17
- //# sourceMappingURL=emitter.d.ts.map
@@ -1,38 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const promises_1 = require("fs/promises");
7
- const json_stringify_pretty_compact_1 = __importDefault(require("json-stringify-pretty-compact"));
8
- const schema_generator_1 = __importDefault(require("./schema-generator"));
9
- const schema_serializer_1 = __importDefault(require("./schema-serializer"));
10
- // Load version from package.json at startup
11
- // eslint-disable-next-line @typescript-eslint/no-var-requires
12
- const { version } = require('../../../package.json');
13
- /**
14
- * Generate and dispatch dataSource schema on agent start.
15
- */
16
- class SchemaEmitter {
17
- static async getSerializedSchema(options, dataSource) {
18
- const schema = options.isProduction
19
- ? await SchemaEmitter.loadFromDisk(options.schemaPath)
20
- : await schema_generator_1.default.generate(dataSource);
21
- if (!options.isProduction) {
22
- const pretty = (0, json_stringify_pretty_compact_1.default)(schema, { maxLength: 80 });
23
- await (0, promises_1.writeFile)(options.schemaPath, pretty, { encoding: 'utf-8' });
24
- }
25
- return schema_serializer_1.default.serialize(schema, version);
26
- }
27
- static async loadFromDisk(schemaPath) {
28
- try {
29
- const fileContent = await (0, promises_1.readFile)(schemaPath, { encoding: 'utf-8' });
30
- return JSON.parse(fileContent);
31
- }
32
- catch (e) {
33
- throw new Error(`Cannot load ${schemaPath}. Providing a schema is mandatory in production mode.`);
34
- }
35
- }
36
- }
37
- exports.default = SchemaEmitter;
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9mb3Jlc3Qtc2NoZW1hL2VtaXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSwwQ0FBa0Q7QUFDbEQsa0dBQXNEO0FBR3RELDBFQUFpRDtBQUNqRCw0RUFBbUQ7QUFPbkQsNENBQTRDO0FBQzVDLDhEQUE4RDtBQUM5RCxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFFckQ7O0dBRUc7QUFDSCxNQUFxQixhQUFhO0lBQ2hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQzlCLE9BQWdCLEVBQ2hCLFVBQXNCO1FBRXRCLE1BQU0sTUFBTSxHQUFjLE9BQU8sQ0FBQyxZQUFZO1lBQzVDLENBQUMsQ0FBQyxNQUFNLGFBQWEsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUN0RCxDQUFDLENBQUMsTUFBTSwwQkFBZSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUvQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFBLHVDQUFTLEVBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEQsTUFBTSxJQUFBLG9CQUFTLEVBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUNwRTtRQUVELE9BQU8sMkJBQWdCLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBa0I7UUFDbEQsSUFBSTtZQUNGLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBQSxtQkFBUSxFQUFDLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBRXRFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNoQztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FDYixlQUFlLFVBQVUsdURBQXVELENBQ2pGLENBQUM7U0FDSDtJQUNILENBQUM7Q0FDRjtBQTVCRCxnQ0E0QkMifQ==
@@ -1,6 +0,0 @@
1
- import { DataSource } from '@forestadmin/datasource-toolkit';
2
- import { ForestServerCollection } from './types';
3
- export default class SchemaGenerator {
4
- static generate(dataSource: DataSource): Promise<ForestServerCollection[]>;
5
- }
6
- //# sourceMappingURL=schema-generator.d.ts.map
@@ -1,13 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const generator_collection_1 = __importDefault(require("./generator-collection"));
7
- class SchemaGenerator {
8
- static async generate(dataSource) {
9
- return Promise.all(dataSource.collections.map(collection => generator_collection_1.default.buildSchema(collection)));
10
- }
11
- }
12
- exports.default = SchemaGenerator;
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9mb3Jlc3Qtc2NoZW1hL3NjaGVtYS1nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSxrRkFBK0Q7QUFHL0QsTUFBcUIsZUFBZTtJQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFzQjtRQUMxQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQ2hCLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsOEJBQXlCLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQzVGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFORCxrQ0FNQyJ9
@@ -1,12 +0,0 @@
1
- import { ForestServerCollection } from './types';
2
- declare type SerializedSchema = {
3
- meta: {
4
- schemaFileHash: string;
5
- };
6
- };
7
- export default class SchemaSerializer {
8
- private static readonly meta;
9
- static serialize(schema: ForestServerCollection[], lianaVersion: string): SerializedSchema;
10
- }
11
- export {};
12
- //# sourceMappingURL=schema-serializer.d.ts.map
@@ -1,35 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const crypto_1 = __importDefault(require("crypto"));
7
- const json_api_serializer_1 = __importDefault(require("json-api-serializer"));
8
- class SchemaSerializer {
9
- static serialize(schema, lianaVersion) {
10
- const hash = crypto_1.default.createHash('sha1').update(JSON.stringify(schema)).digest('hex');
11
- // Build serializer
12
- const serializer = new json_api_serializer_1.default();
13
- serializer.register('collections', {
14
- // Pass the metadata provided to the serialization fn
15
- topLevelMeta: (extraData) => extraData,
16
- relationships: {
17
- segments: { type: 'segments' },
18
- actions: { type: 'actions' },
19
- },
20
- });
21
- serializer.register('segments', {});
22
- serializer.register('actions', {});
23
- // Serialize
24
- return serializer.serialize('collections', schema.map(c => ({ id: c.name, ...c })), { ...SchemaSerializer.meta, liana_version: lianaVersion, schemaFileHash: hash });
25
- }
26
- }
27
- exports.default = SchemaSerializer;
28
- SchemaSerializer.meta = {
29
- liana: 'forest-nodejs-agent',
30
- stack: {
31
- engine: 'nodejs',
32
- engine_version: process.versions && process.versions.node,
33
- },
34
- };
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLXNlcmlhbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvZm9yZXN0LXNjaGVtYS9zY2hlbWEtc2VyaWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1Qiw4RUFBb0Q7QUFNcEQsTUFBcUIsZ0JBQWdCO0lBU25DLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBZ0MsRUFBRSxZQUFvQjtRQUNyRSxNQUFNLElBQUksR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwRixtQkFBbUI7UUFDbkIsTUFBTSxVQUFVLEdBQUcsSUFBSSw2QkFBaUIsRUFBRSxDQUFDO1FBRTNDLFVBQVUsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO1lBQ2pDLHFEQUFxRDtZQUNyRCxZQUFZLEVBQUUsQ0FBQyxTQUFrQixFQUFFLEVBQUUsQ0FBQyxTQUFTO1lBQy9DLGFBQWEsRUFBRTtnQkFDYixRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUM5QixPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO2FBQzdCO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFbkMsWUFBWTtRQUNaLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FDekIsYUFBYSxFQUNiLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ3ZDLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQzVELENBQUM7SUFDeEIsQ0FBQzs7QUFoQ0gsbUNBaUNDO0FBaEN5QixxQkFBSSxHQUFHO0lBQzdCLEtBQUssRUFBRSxxQkFBcUI7SUFDNUIsS0FBSyxFQUFFO1FBQ0wsTUFBTSxFQUFFLFFBQVE7UUFDaEIsY0FBYyxFQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJO0tBQzFEO0NBQ0YsQ0FBQyJ9
@@ -1,85 +0,0 @@
1
- import { 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
@@ -1,16 +0,0 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvZm9yZXN0LXNjaGVtYS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEwRUEsSUFBWSxjQVVYO0FBVkQsV0FBWSxjQUFjO0lBQ3hCLHdDQUFzQixDQUFBO0lBQ3RCLGlEQUErQixDQUFBO0lBQy9CLDJDQUF5QixDQUFBO0lBQ3pCLHNDQUFvQixDQUFBO0lBQ3BCLG9DQUFrQixDQUFBO0lBQ2xCLCtDQUE2QixDQUFBO0lBQzdCLGlEQUErQixDQUFBO0lBQy9CLHVDQUFxQixDQUFBO0lBQ3JCLGtDQUFnQixDQUFBO0FBQ2xCLENBQUMsRUFWVyxjQUFjLEdBQWQsc0JBQWMsS0FBZCxzQkFBYyxRQVV6QiJ9