@forestadmin/agent-testing 0.1.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.
- package/LICENSE +674 -0
- package/README.md +52 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +20 -0
- package/dist/integrations/benchmark.d.ts +13 -0
- package/dist/integrations/benchmark.js +36 -0
- package/dist/integrations/forest-admin-client-mock.d.ts +28 -0
- package/dist/integrations/forest-admin-client-mock.js +76 -0
- package/dist/integrations/forest-server-sandbox.d.ts +14 -0
- package/dist/integrations/forest-server-sandbox.js +153 -0
- package/dist/integrations/http-requester-mock.d.ts +8 -0
- package/dist/integrations/http-requester-mock.js +15 -0
- package/dist/integrations/index.d.ts +43 -0
- package/dist/integrations/index.js +119 -0
- package/dist/integrations/schema-converter.d.ts +6 -0
- package/dist/integrations/schema-converter.js +16 -0
- package/dist/integrations/schema-path-manager.d.ts +6 -0
- package/dist/integrations/schema-path-manager.js +25 -0
- package/dist/integrations/testable-agent-base.d.ts +7 -0
- package/dist/integrations/testable-agent-base.js +14 -0
- package/dist/integrations/testable-agent.d.ts +15 -0
- package/dist/integrations/testable-agent.js +33 -0
- package/dist/integrations/types.d.ts +5 -0
- package/dist/integrations/types.js +3 -0
- package/dist/remote-agent-client/action-fields/action-field-checkbox-group.d.ts +8 -0
- package/dist/remote-agent-client/action-fields/action-field-checkbox-group.js +23 -0
- package/dist/remote-agent-client/action-fields/action-field-checkbox.d.ts +6 -0
- package/dist/remote-agent-client/action-fields/action-field-checkbox.js +16 -0
- package/dist/remote-agent-client/action-fields/action-field-color-picker.d.ts +7 -0
- package/dist/remote-agent-client/action-fields/action-field-color-picker.js +19 -0
- package/dist/remote-agent-client/action-fields/action-field-date.d.ts +5 -0
- package/dist/remote-agent-client/action-fields/action-field-date.js +13 -0
- package/dist/remote-agent-client/action-fields/action-field-dropdown.d.ts +7 -0
- package/dist/remote-agent-client/action-fields/action-field-dropdown.js +16 -0
- package/dist/remote-agent-client/action-fields/action-field-enum.d.ts +6 -0
- package/dist/remote-agent-client/action-fields/action-field-enum.js +19 -0
- package/dist/remote-agent-client/action-fields/action-field-json.d.ts +5 -0
- package/dist/remote-agent-client/action-fields/action-field-json.js +13 -0
- package/dist/remote-agent-client/action-fields/action-field-multiple-choice.d.ts +7 -0
- package/dist/remote-agent-client/action-fields/action-field-multiple-choice.js +19 -0
- package/dist/remote-agent-client/action-fields/action-field-number-list.d.ts +6 -0
- package/dist/remote-agent-client/action-fields/action-field-number-list.js +20 -0
- package/dist/remote-agent-client/action-fields/action-field-number.d.ts +5 -0
- package/dist/remote-agent-client/action-fields/action-field-number.js +13 -0
- package/dist/remote-agent-client/action-fields/action-field-radio-group.d.ts +7 -0
- package/dist/remote-agent-client/action-fields/action-field-radio-group.js +16 -0
- package/dist/remote-agent-client/action-fields/action-field-string-list.d.ts +6 -0
- package/dist/remote-agent-client/action-fields/action-field-string-list.js +20 -0
- package/dist/remote-agent-client/action-fields/action-field-string.d.ts +5 -0
- package/dist/remote-agent-client/action-fields/action-field-string.js +13 -0
- package/dist/remote-agent-client/action-fields/action-field.d.ts +15 -0
- package/dist/remote-agent-client/action-fields/action-field.js +34 -0
- package/dist/remote-agent-client/action-fields/field-form-states.d.ts +25 -0
- package/dist/remote-agent-client/action-fields/field-form-states.js +94 -0
- package/dist/remote-agent-client/action-fields/field-getter.d.ts +10 -0
- package/dist/remote-agent-client/action-fields/field-getter.js +21 -0
- package/dist/remote-agent-client/action-fields/types.d.ts +28 -0
- package/dist/remote-agent-client/action-fields/types.js +3 -0
- package/dist/remote-agent-client/action-layout/action-layout-container.d.ts +9 -0
- package/dist/remote-agent-client/action-layout/action-layout-container.js +24 -0
- package/dist/remote-agent-client/action-layout/action-layout-element.d.ts +14 -0
- package/dist/remote-agent-client/action-layout/action-layout-element.js +47 -0
- package/dist/remote-agent-client/action-layout/action-layout-input.d.ts +7 -0
- package/dist/remote-agent-client/action-layout/action-layout-input.js +12 -0
- package/dist/remote-agent-client/action-layout/action-layout-page.d.ts +8 -0
- package/dist/remote-agent-client/action-layout/action-layout-page.js +18 -0
- package/dist/remote-agent-client/action-layout/action-layout-root.d.ts +6 -0
- package/dist/remote-agent-client/action-layout/action-layout-root.js +19 -0
- package/dist/remote-agent-client/action-layout/errors.d.ts +8 -0
- package/dist/remote-agent-client/action-layout/errors.js +16 -0
- package/dist/remote-agent-client/domains/action.d.ts +59 -0
- package/dist/remote-agent-client/domains/action.js +139 -0
- package/dist/remote-agent-client/domains/chart.d.ts +21 -0
- package/dist/remote-agent-client/domains/chart.js +39 -0
- package/dist/remote-agent-client/domains/collection-chart.d.ts +19 -0
- package/dist/remote-agent-client/domains/collection-chart.js +40 -0
- package/dist/remote-agent-client/domains/collection.d.ts +26 -0
- package/dist/remote-agent-client/domains/collection.js +109 -0
- package/dist/remote-agent-client/domains/relation.d.ts +11 -0
- package/dist/remote-agent-client/domains/relation.js +23 -0
- package/dist/remote-agent-client/domains/remote-agent-client.d.ts +41 -0
- package/dist/remote-agent-client/domains/remote-agent-client.js +43 -0
- package/dist/remote-agent-client/domains/segment.d.ts +14 -0
- package/dist/remote-agent-client/domains/segment.js +46 -0
- package/dist/remote-agent-client/http-requester.d.ts +30 -0
- package/dist/remote-agent-client/http-requester.js +67 -0
- package/dist/remote-agent-client/index.d.ts +10 -0
- package/dist/remote-agent-client/index.js +18 -0
- package/dist/remote-agent-client/query-serializer.d.ts +7 -0
- package/dist/remote-agent-client/query-serializer.js +34 -0
- package/dist/remote-agent-client/types.d.ts +25 -0
- package/dist/remote-agent-client/types.js +3 -0
- package/dist/units/add-action.d.ts +16 -0
- package/dist/units/add-action.js +70 -0
- package/dist/units/add-field.d.ts +3 -0
- package/dist/units/add-field.js +18 -0
- package/dist/units/add-hook.d.ts +3 -0
- package/dist/units/add-hook.js +18 -0
- package/dist/units/import-field.d.ts +3 -0
- package/dist/units/import-field.js +18 -0
- package/dist/units/index.d.ts +9 -0
- package/dist/units/index.js +25 -0
- package/dist/units/many-to-one-relation.d.ts +3 -0
- package/dist/units/many-to-one-relation.js +18 -0
- package/dist/units/replace-search.d.ts +3 -0
- package/dist/units/replace-search.js +18 -0
- package/dist/units/types.d.ts +34 -0
- package/dist/units/types.js +3 -0
- package/dist/units/use-plugin.d.ts +3 -0
- package/dist/units/use-plugin.js +18 -0
- package/package.json +55 -0
|
@@ -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 http_requester_1 = __importDefault(require("../http-requester"));
|
|
7
|
+
class Chart {
|
|
8
|
+
async valueChart(chartName) {
|
|
9
|
+
return this.loadChart(chartName);
|
|
10
|
+
}
|
|
11
|
+
async distributionChart(chartName) {
|
|
12
|
+
return this.loadChart(chartName);
|
|
13
|
+
}
|
|
14
|
+
async percentageChart(chartName) {
|
|
15
|
+
return this.loadChart(chartName);
|
|
16
|
+
}
|
|
17
|
+
async objectiveChart(chartName) {
|
|
18
|
+
return this.loadChart(chartName);
|
|
19
|
+
}
|
|
20
|
+
async leaderboardChart(chartName) {
|
|
21
|
+
return this.loadChart(chartName);
|
|
22
|
+
}
|
|
23
|
+
async timeBasedChart(chartName) {
|
|
24
|
+
return this.loadChart(chartName);
|
|
25
|
+
}
|
|
26
|
+
async loadChart(chartName, body) {
|
|
27
|
+
if (!this.httpRequester) {
|
|
28
|
+
throw new Error('HttpRequester is not initialized. Please ensure it is set before calling chart methods.');
|
|
29
|
+
}
|
|
30
|
+
const result = await this.httpRequester.query({
|
|
31
|
+
method: 'post',
|
|
32
|
+
path: `${http_requester_1.default.escapeUrlSlug(`/forest/_charts/${chartName}`)}`,
|
|
33
|
+
body,
|
|
34
|
+
});
|
|
35
|
+
return result.value;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.default = Chart;
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVtb3RlLWFnZW50LWNsaWVudC9kb21haW5zL2NoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBU0EsdUVBQThDO0FBVzlDLE1BQThCLEtBQUs7SUFHakMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFpQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxTQUFpQjtRQUN2QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQUMsU0FBaUI7UUFDckMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQWlCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFNBQWlCO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFpQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVTLEtBQUssQ0FBQyxTQUFTLENBQ3ZCLFNBQWlCLEVBQ2pCLElBQThCO1FBRTlCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FDYix5RkFBeUYsQ0FDMUYsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFrQjtZQUM3RCxNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxHQUFHLHdCQUFhLENBQUMsYUFBYSxDQUFDLG1CQUFtQixTQUFTLEVBQUUsQ0FBQyxFQUFFO1lBQ3RFLElBQUk7U0FDTCxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBN0NELHdCQTZDQyJ9
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { DistributionChart, LeaderboardChart, ObjectiveChart, PercentageChart, TimeBasedChart, ValueChart } from '@forestadmin/datasource-toolkit';
|
|
2
|
+
import { ChartInterface } from './chart';
|
|
3
|
+
import HttpRequester from '../http-requester';
|
|
4
|
+
export type ChartContext = {
|
|
5
|
+
recordId: string | number;
|
|
6
|
+
};
|
|
7
|
+
export default abstract class CollectionChart implements ChartInterface {
|
|
8
|
+
protected httpRequester: HttpRequester;
|
|
9
|
+
private collectionName;
|
|
10
|
+
constructor(collectionName: string, httpRequester: HttpRequester);
|
|
11
|
+
valueChart(chartName: string, { recordId }: ChartContext): Promise<ValueChart>;
|
|
12
|
+
distributionChart(chartName: string, { recordId }: ChartContext): Promise<DistributionChart>;
|
|
13
|
+
percentageChart(chartName: string, { recordId }: ChartContext): Promise<PercentageChart>;
|
|
14
|
+
objectiveChart(chartName: string, { recordId }: ChartContext): Promise<ObjectiveChart>;
|
|
15
|
+
leaderboardChart(chartName: string, { recordId }: ChartContext): Promise<LeaderboardChart>;
|
|
16
|
+
timeBasedChart(chartName: string, { recordId }: ChartContext): Promise<TimeBasedChart>;
|
|
17
|
+
protected loadChart<Type>(chartName: string, body?: Record<string, unknown>): Promise<Type>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=collection-chart.d.ts.map
|
|
@@ -0,0 +1,40 @@
|
|
|
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 http_requester_1 = __importDefault(require("../http-requester"));
|
|
7
|
+
class CollectionChart {
|
|
8
|
+
constructor(collectionName, httpRequester) {
|
|
9
|
+
this.httpRequester = httpRequester;
|
|
10
|
+
this.collectionName = collectionName;
|
|
11
|
+
}
|
|
12
|
+
async valueChart(chartName, { recordId }) {
|
|
13
|
+
return this.loadChart(chartName, { record_id: recordId });
|
|
14
|
+
}
|
|
15
|
+
async distributionChart(chartName, { recordId }) {
|
|
16
|
+
return this.loadChart(chartName, { record_id: recordId });
|
|
17
|
+
}
|
|
18
|
+
async percentageChart(chartName, { recordId }) {
|
|
19
|
+
return this.loadChart(chartName, { record_id: recordId });
|
|
20
|
+
}
|
|
21
|
+
async objectiveChart(chartName, { recordId }) {
|
|
22
|
+
return this.loadChart(chartName, { record_id: recordId });
|
|
23
|
+
}
|
|
24
|
+
async leaderboardChart(chartName, { recordId }) {
|
|
25
|
+
return this.loadChart(chartName, { record_id: recordId });
|
|
26
|
+
}
|
|
27
|
+
async timeBasedChart(chartName, { recordId }) {
|
|
28
|
+
return this.loadChart(chartName, { record_id: recordId });
|
|
29
|
+
}
|
|
30
|
+
async loadChart(chartName, body) {
|
|
31
|
+
const result = await this.httpRequester.query({
|
|
32
|
+
method: 'post',
|
|
33
|
+
path: `${http_requester_1.default.escapeUrlSlug(`/forest/_charts/${this.collectionName}/${chartName}`)}`,
|
|
34
|
+
body,
|
|
35
|
+
});
|
|
36
|
+
return result.value;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.default = CollectionChart;
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1jaGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZW1vdGUtYWdlbnQtY2xpZW50L2RvbWFpbnMvY29sbGVjdGlvbi1jaGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVVBLHVFQUE4QztBQU05QyxNQUE4QixlQUFlO0lBSTNDLFlBQVksY0FBc0IsRUFBRSxhQUE0QjtRQUM5RCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFpQixFQUFFLEVBQUUsUUFBUSxFQUFnQjtRQUM1RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FDckIsU0FBaUIsRUFDakIsRUFBRSxRQUFRLEVBQWdCO1FBRTFCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxTQUFpQixFQUFFLEVBQUUsUUFBUSxFQUFnQjtRQUNqRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBaUIsRUFBRSxFQUFFLFFBQVEsRUFBZ0I7UUFDaEUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxFQUFFLFFBQVEsRUFBZ0I7UUFDbEUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQWlCLEVBQUUsRUFBRSxRQUFRLEVBQWdCO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRVMsS0FBSyxDQUFDLFNBQVMsQ0FDdkIsU0FBaUIsRUFDakIsSUFBOEI7UUFFOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBa0I7WUFDN0QsTUFBTSxFQUFFLE1BQU07WUFDZCxJQUFJLEVBQUUsR0FBRyx3QkFBYSxDQUFDLGFBQWEsQ0FDbEMsbUJBQW1CLElBQUksQ0FBQyxjQUF3QixJQUFJLFNBQVMsRUFBRSxDQUNoRSxFQUFFO1lBQ0gsSUFBSTtTQUNMLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUFsREQsa0NBa0RDIn0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ExportOptions, LiveQueryOptions, SelectOptions } from '../types';
|
|
2
|
+
import type { TSchema } from '@forestadmin/datasource-customizer';
|
|
3
|
+
import { WriteStream } from 'fs';
|
|
4
|
+
import Action, { ActionEndpointsByCollection, BaseActionContext } from './action';
|
|
5
|
+
import CollectionChart from './collection-chart';
|
|
6
|
+
import Relation from './relation';
|
|
7
|
+
import Segment from './segment';
|
|
8
|
+
import HttpRequester from '../http-requester';
|
|
9
|
+
export default class Collection<TypingsSchema extends TSchema = TSchema> extends CollectionChart {
|
|
10
|
+
protected readonly name: keyof TypingsSchema;
|
|
11
|
+
protected readonly actionEndpoints?: ActionEndpointsByCollection;
|
|
12
|
+
constructor(name: keyof TypingsSchema, httpRequester: HttpRequester, actionEndpoints: ActionEndpointsByCollection);
|
|
13
|
+
action(actionName: string, actionContext?: BaseActionContext): Promise<Action<TypingsSchema>>;
|
|
14
|
+
segment(name: string): Segment<TypingsSchema>;
|
|
15
|
+
liveQuerySegment(options: LiveQueryOptions): Segment<TypingsSchema>;
|
|
16
|
+
relation(name: string, parentId: string | number): Relation<TypingsSchema>;
|
|
17
|
+
search<Data = any>(content: string): Promise<Data[]>;
|
|
18
|
+
list<Data = any>(options?: SelectOptions): Promise<Data[]>;
|
|
19
|
+
exportCsv(stream: WriteStream, options?: ExportOptions): Promise<void>;
|
|
20
|
+
count(options?: SelectOptions): Promise<number>;
|
|
21
|
+
delete<Data = any>(ids: string[] | number[]): Promise<Data>;
|
|
22
|
+
create<Data = any>(attributes: Record<string, unknown>): Promise<Data>;
|
|
23
|
+
update<Data = any>(id: string | number, attributes: Record<string, unknown>): Promise<Data>;
|
|
24
|
+
private getActionPath;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=collection.d.ts.map
|
|
@@ -0,0 +1,109 @@
|
|
|
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 action_1 = __importDefault(require("./action"));
|
|
7
|
+
const collection_chart_1 = __importDefault(require("./collection-chart"));
|
|
8
|
+
const relation_1 = __importDefault(require("./relation"));
|
|
9
|
+
const segment_1 = __importDefault(require("./segment"));
|
|
10
|
+
const field_form_states_1 = __importDefault(require("../action-fields/field-form-states"));
|
|
11
|
+
const query_serializer_1 = __importDefault(require("../query-serializer"));
|
|
12
|
+
class Collection extends collection_chart_1.default {
|
|
13
|
+
constructor(name, httpRequester, actionEndpoints) {
|
|
14
|
+
super(name, httpRequester);
|
|
15
|
+
this.name = name;
|
|
16
|
+
this.actionEndpoints = actionEndpoints;
|
|
17
|
+
}
|
|
18
|
+
async action(actionName, actionContext) {
|
|
19
|
+
const actionPath = this.getActionPath(this.actionEndpoints, this.name, actionName);
|
|
20
|
+
const ids = (actionContext?.recordIds ?? [actionContext?.recordId]).filter(Boolean).map(String);
|
|
21
|
+
const fieldsFormStates = new field_form_states_1.default(actionName, actionPath, this.name, this.httpRequester, ids);
|
|
22
|
+
const action = new action_1.default(this.name, this.httpRequester, actionPath, fieldsFormStates, ids);
|
|
23
|
+
await fieldsFormStates.loadInitialState();
|
|
24
|
+
return action;
|
|
25
|
+
}
|
|
26
|
+
segment(name) {
|
|
27
|
+
return new segment_1.default(name, this.name, this.httpRequester);
|
|
28
|
+
}
|
|
29
|
+
liveQuerySegment(options) {
|
|
30
|
+
// there is no name for live query
|
|
31
|
+
return new segment_1.default(undefined, this.name, this.httpRequester, options);
|
|
32
|
+
}
|
|
33
|
+
relation(name, parentId) {
|
|
34
|
+
return new relation_1.default(name, this.name, parentId, this.httpRequester);
|
|
35
|
+
}
|
|
36
|
+
async search(content) {
|
|
37
|
+
return this.list({ search: content });
|
|
38
|
+
}
|
|
39
|
+
async list(options) {
|
|
40
|
+
return this.httpRequester.query({
|
|
41
|
+
method: 'get',
|
|
42
|
+
path: `/forest/${this.name}`,
|
|
43
|
+
query: query_serializer_1.default.serialize(options, this.name),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
async exportCsv(stream, options) {
|
|
47
|
+
await this.httpRequester.stream({
|
|
48
|
+
path: `/forest/${this.name}.csv`,
|
|
49
|
+
contentType: 'text/csv',
|
|
50
|
+
query: {
|
|
51
|
+
...query_serializer_1.default.serialize(options, this.name),
|
|
52
|
+
...{ header: JSON.stringify(options?.projection) },
|
|
53
|
+
},
|
|
54
|
+
stream,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
async count(options) {
|
|
58
|
+
return Number((await this.httpRequester.query({
|
|
59
|
+
method: 'get',
|
|
60
|
+
path: `/forest/${this.name}/count`,
|
|
61
|
+
query: query_serializer_1.default.serialize(options, this.name),
|
|
62
|
+
})).count);
|
|
63
|
+
}
|
|
64
|
+
async delete(ids) {
|
|
65
|
+
const serializedIds = ids.map((id) => id.toString());
|
|
66
|
+
const requestBody = {
|
|
67
|
+
data: {
|
|
68
|
+
attributes: { collection_name: this.name, ids: serializedIds },
|
|
69
|
+
type: 'action-requests',
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
return this.httpRequester.query({
|
|
73
|
+
method: 'delete',
|
|
74
|
+
path: `/forest/${this.name}`,
|
|
75
|
+
body: requestBody,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
async create(attributes) {
|
|
79
|
+
const requestBody = { data: { attributes, type: this.name } };
|
|
80
|
+
return this.httpRequester.query({
|
|
81
|
+
method: 'post',
|
|
82
|
+
path: `/forest/${this.name}`,
|
|
83
|
+
body: requestBody,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
async update(id, attributes) {
|
|
87
|
+
const requestBody = { data: { attributes, type: this.name, id: id.toString() } };
|
|
88
|
+
return this.httpRequester.query({
|
|
89
|
+
method: 'put',
|
|
90
|
+
path: `/forest/${this.name}/${id.toString()}`,
|
|
91
|
+
body: requestBody,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
getActionPath(actionEndpoints, collectionName, actionName) {
|
|
95
|
+
const collection = actionEndpoints[collectionName];
|
|
96
|
+
if (!collection)
|
|
97
|
+
throw new Error(`Collection ${collectionName} not found in schema`);
|
|
98
|
+
const action = collection[actionName];
|
|
99
|
+
if (!action) {
|
|
100
|
+
throw new Error(`Action ${actionName} not found in collection ${collectionName}`);
|
|
101
|
+
}
|
|
102
|
+
if (!action.endpoint) {
|
|
103
|
+
throw new Error(`Action ${actionName} not found in collection ${collectionName}`);
|
|
104
|
+
}
|
|
105
|
+
return action.endpoint;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.default = Collection;
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZW1vdGUtYWdlbnQtY2xpZW50L2RvbWFpbnMvY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUtBLHNEQUFrRjtBQUNsRiwwRUFBaUQ7QUFDakQsMERBQWtDO0FBQ2xDLHdEQUFnQztBQUNoQywyRkFBaUU7QUFFakUsMkVBQWtEO0FBRWxELE1BQXFCLFVBQW9ELFNBQVEsMEJBQWU7SUFJOUYsWUFDRSxJQUF5QixFQUN6QixhQUE0QixFQUM1QixlQUE0QztRQUU1QyxLQUFLLENBQUMsSUFBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRXJDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUNWLFVBQWtCLEVBQ2xCLGFBQWlDO1FBRWpDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ25GLE1BQU0sR0FBRyxHQUFHLENBQUMsYUFBYSxFQUFFLFNBQVMsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEcsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLDJCQUFlLENBQzFDLFVBQVUsRUFDVixVQUFVLEVBQ1YsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsYUFBYSxFQUNsQixHQUFHLENBQ0osQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHLElBQUksZ0JBQU0sQ0FDdkIsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsYUFBYSxFQUNsQixVQUFVLEVBQ1YsZ0JBQWdC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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type HttpRequester from '../http-requester';
|
|
2
|
+
import type { SelectOptions } from '../types';
|
|
3
|
+
export default class Relation<TypingsSchema> {
|
|
4
|
+
private readonly name;
|
|
5
|
+
private readonly collectionName;
|
|
6
|
+
private readonly parentId;
|
|
7
|
+
private readonly httpRequester;
|
|
8
|
+
constructor(name: string, collectionName: keyof TypingsSchema, parentId: string | number, httpRequester: HttpRequester);
|
|
9
|
+
list<Data = unknown>(options?: SelectOptions): Promise<Data[]>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=relation.d.ts.map
|
|
@@ -0,0 +1,23 @@
|
|
|
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 query_serializer_1 = __importDefault(require("../query-serializer"));
|
|
7
|
+
class Relation {
|
|
8
|
+
constructor(name, collectionName, parentId, httpRequester) {
|
|
9
|
+
this.name = name;
|
|
10
|
+
this.collectionName = collectionName;
|
|
11
|
+
this.httpRequester = httpRequester;
|
|
12
|
+
this.parentId = parentId;
|
|
13
|
+
}
|
|
14
|
+
list(options) {
|
|
15
|
+
return this.httpRequester.query({
|
|
16
|
+
method: 'get',
|
|
17
|
+
path: `/forest/${this.collectionName}/${this.parentId}/relationships/${this.name}`,
|
|
18
|
+
query: query_serializer_1.default.serialize(options, this.collectionName),
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.default = Relation;
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVtb3RlLWFnZW50LWNsaWVudC9kb21haW5zL3JlbGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0EsMkVBQWtEO0FBRWxELE1BQXFCLFFBQVE7SUFNM0IsWUFDRSxJQUFZLEVBQ1osY0FBbUMsRUFDbkMsUUFBeUIsRUFDekIsYUFBNEI7UUFFNUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksQ0FBaUIsT0FBdUI7UUFDMUMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBUztZQUN0QyxNQUFNLEVBQUUsS0FBSztZQUNiLElBQUksRUFBRSxXQUFXLElBQUksQ0FBQyxjQUF3QixJQUFJLElBQUksQ0FBQyxRQUFRLGtCQUFrQixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQzVGLEtBQUssRUFBRSwwQkFBZSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQXdCLENBQUM7U0FDekUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBekJELDJCQXlCQyJ9
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { TSchema } from '@forestadmin/datasource-customizer';
|
|
2
|
+
import { RawTreeWithSources } from '@forestadmin/forestadmin-client';
|
|
3
|
+
import { ActionEndpointsByCollection } from './action';
|
|
4
|
+
import Chart from './chart';
|
|
5
|
+
import Collection from './collection';
|
|
6
|
+
import HttpRequester from '../http-requester';
|
|
7
|
+
export type SmartActionPermissionsOverride = Partial<{
|
|
8
|
+
triggerEnabled: boolean;
|
|
9
|
+
triggerConditions: RawTreeWithSources;
|
|
10
|
+
approvalRequired: boolean;
|
|
11
|
+
approvalRequiredConditions: RawTreeWithSources;
|
|
12
|
+
userApprovalEnabled: boolean;
|
|
13
|
+
userApprovalConditions: RawTreeWithSources;
|
|
14
|
+
selfApprovalEnabled: boolean;
|
|
15
|
+
}>;
|
|
16
|
+
export type CollectionPermissionsOverride = Partial<{
|
|
17
|
+
browseEnabled: boolean;
|
|
18
|
+
deleteEnabled: boolean;
|
|
19
|
+
editEnabled: boolean;
|
|
20
|
+
exportEnabled: boolean;
|
|
21
|
+
addEnabled: boolean;
|
|
22
|
+
readEnabled: boolean;
|
|
23
|
+
}>;
|
|
24
|
+
export type PermissionsOverride = Record<string, {
|
|
25
|
+
collection: CollectionPermissionsOverride;
|
|
26
|
+
actions: Record<string, SmartActionPermissionsOverride>;
|
|
27
|
+
}>;
|
|
28
|
+
export default class RemoteAgentClient<TypingsSchema extends TSchema = TSchema> extends Chart {
|
|
29
|
+
protected actionEndpoints?: ActionEndpointsByCollection;
|
|
30
|
+
private overridePermissions?;
|
|
31
|
+
constructor(params?: {
|
|
32
|
+
actionEndpoints?: ActionEndpointsByCollection;
|
|
33
|
+
httpRequester: HttpRequester;
|
|
34
|
+
overridePermissions?: (permissions: PermissionsOverride) => Promise<void>;
|
|
35
|
+
});
|
|
36
|
+
overrideCollectionPermission(collectionName: keyof TypingsSchema, permissions: CollectionPermissionsOverride): Promise<void>;
|
|
37
|
+
overrideActionPermission(collectionName: keyof TypingsSchema, actionName: string, permissions: SmartActionPermissionsOverride): Promise<void>;
|
|
38
|
+
clearPermissionOverride(): Promise<void>;
|
|
39
|
+
collection(name: keyof TypingsSchema): Collection<TypingsSchema>;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=remote-agent-client.d.ts.map
|
|
@@ -0,0 +1,43 @@
|
|
|
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 chart_1 = __importDefault(require("./chart"));
|
|
7
|
+
const collection_1 = __importDefault(require("./collection"));
|
|
8
|
+
class RemoteAgentClient extends chart_1.default {
|
|
9
|
+
constructor(params) {
|
|
10
|
+
super();
|
|
11
|
+
if (!params)
|
|
12
|
+
return;
|
|
13
|
+
this.httpRequester = params.httpRequester;
|
|
14
|
+
this.actionEndpoints = params.actionEndpoints;
|
|
15
|
+
this.overridePermissions = params.overridePermissions;
|
|
16
|
+
}
|
|
17
|
+
async overrideCollectionPermission(collectionName, permissions) {
|
|
18
|
+
await this.overridePermissions?.({
|
|
19
|
+
[collectionName]: {
|
|
20
|
+
collection: permissions,
|
|
21
|
+
actions: {},
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
async overrideActionPermission(collectionName, actionName, permissions) {
|
|
26
|
+
await this.overridePermissions?.({
|
|
27
|
+
[collectionName]: {
|
|
28
|
+
collection: {},
|
|
29
|
+
actions: {
|
|
30
|
+
[actionName]: permissions,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
async clearPermissionOverride() {
|
|
36
|
+
await this.overridePermissions?.({});
|
|
37
|
+
}
|
|
38
|
+
collection(name) {
|
|
39
|
+
return new collection_1.default(name, this.httpRequester, this.actionEndpoints);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.default = RemoteAgentClient;
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLWFnZW50LWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZW1vdGUtYWdlbnQtY2xpZW50L2RvbWFpbnMvcmVtb3RlLWFnZW50LWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUtBLG9EQUE0QjtBQUM1Qiw4REFBc0M7QUE4QnRDLE1BQXFCLGlCQUEyRCxTQUFRLGVBQUs7SUFLM0YsWUFBWSxNQUlYO1FBQ0MsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQzFDLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUM5QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDO0lBQ3hELENBQUM7SUFFRCxLQUFLLENBQUMsNEJBQTRCLENBQ2hDLGNBQW1DLEVBQ25DLFdBQTBDO1FBRTFDLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDL0IsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDaEIsVUFBVSxFQUFFLFdBQVc7Z0JBQ3ZCLE9BQU8sRUFBRSxFQUFFO2FBQ1o7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLHdCQUF3QixDQUM1QixjQUFtQyxFQUNuQyxVQUFrQixFQUNsQixXQUEyQztRQUUzQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQy9CLENBQUMsY0FBYyxDQUFDLEVBQUU7Z0JBQ2hCLFVBQVUsRUFBRSxFQUFFO2dCQUNkLE9BQU8sRUFBRTtvQkFDUCxDQUFDLFVBQVUsQ0FBQyxFQUFFLFdBQVc7aUJBQzFCO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLHVCQUF1QjtRQUMzQixNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBeUI7UUFDbEMsT0FBTyxJQUFJLG9CQUFVLENBQWdCLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN2RixDQUFDO0NBQ0Y7QUFuREQsb0NBbURDIn0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type HttpRequester from '../http-requester';
|
|
2
|
+
import type { ExportOptions, LiveQueryOptions, SelectOptions } from '../types';
|
|
3
|
+
import { WriteStream } from 'node:fs';
|
|
4
|
+
export default class Segment<TypingsSchema> {
|
|
5
|
+
private readonly name?;
|
|
6
|
+
private readonly collectionName;
|
|
7
|
+
private readonly httpRequester;
|
|
8
|
+
private readonly liveQuerySegment?;
|
|
9
|
+
constructor(name: string | undefined, collectionName: keyof TypingsSchema, httpRequester: HttpRequester, liveQuerySegment?: LiveQueryOptions);
|
|
10
|
+
list<Data = unknown>(options?: SelectOptions): Promise<Data[]>;
|
|
11
|
+
exportCsv(stream: WriteStream, options?: ExportOptions): Promise<void>;
|
|
12
|
+
private serializeQuery;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=segment.d.ts.map
|
|
@@ -0,0 +1,46 @@
|
|
|
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 query_serializer_1 = __importDefault(require("../query-serializer"));
|
|
7
|
+
class Segment {
|
|
8
|
+
constructor(name, collectionName, httpRequester, liveQuerySegment) {
|
|
9
|
+
this.name = name;
|
|
10
|
+
this.collectionName = collectionName;
|
|
11
|
+
this.httpRequester = httpRequester;
|
|
12
|
+
this.liveQuerySegment = liveQuerySegment;
|
|
13
|
+
}
|
|
14
|
+
async list(options) {
|
|
15
|
+
return this.httpRequester.query({
|
|
16
|
+
method: 'get',
|
|
17
|
+
path: `/forest/${this.collectionName}`,
|
|
18
|
+
query: this.serializeQuery(options),
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
async exportCsv(stream, options) {
|
|
22
|
+
await this.httpRequester.stream({
|
|
23
|
+
path: `/forest/${this.collectionName}.csv`,
|
|
24
|
+
contentType: 'text/csv',
|
|
25
|
+
query: {
|
|
26
|
+
...this.serializeQuery(options),
|
|
27
|
+
...{ header: JSON.stringify(options?.projection) },
|
|
28
|
+
},
|
|
29
|
+
stream,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
serializeQuery(options) {
|
|
33
|
+
if (this.liveQuerySegment) {
|
|
34
|
+
return query_serializer_1.default.serialize({
|
|
35
|
+
...(options ?? {}),
|
|
36
|
+
...{
|
|
37
|
+
segmentQuery: this.liveQuerySegment.query,
|
|
38
|
+
connectionName: this.liveQuerySegment.connectionName,
|
|
39
|
+
},
|
|
40
|
+
}, this.collectionName);
|
|
41
|
+
}
|
|
42
|
+
return query_serializer_1.default.serialize({ ...options, ...{ filters: { segment: this.name } } }, this.collectionName);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.default = Segment;
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZW1vdGUtYWdlbnQtY2xpZW50L2RvbWFpbnMvc2VnbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUtBLDJFQUFrRDtBQUVsRCxNQUFxQixPQUFPO0lBTTFCLFlBQ0UsSUFBd0IsRUFDeEIsY0FBbUMsRUFDbkMsYUFBNEIsRUFDNUIsZ0JBQW1DO1FBRW5DLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUMzQyxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBaUIsT0FBdUI7UUFDaEQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBUztZQUN0QyxNQUFNLEVBQUUsS0FBSztZQUNiLElBQUksRUFBRSxXQUFXLElBQUksQ0FBQyxjQUF3QixFQUFFO1lBQ2hELEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztTQUNwQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFtQixFQUFFLE9BQXVCO1FBQzFELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFDOUIsSUFBSSxFQUFFLFdBQVcsSUFBSSxDQUFDLGNBQXdCLE1BQU07WUFDcEQsV0FBVyxFQUFFLFVBQVU7WUFDdkIsS0FBSyxFQUFFO2dCQUNMLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7Z0JBQy9CLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUU7YUFDbkQ7WUFDRCxNQUFNO1NBQ1AsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGNBQWMsQ0FBQyxPQUF1QjtRQUM1QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLE9BQU8sMEJBQWUsQ0FBQyxTQUFTLENBQzlCO2dCQUNFLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO2dCQUNsQixHQUFHO29CQUNELFlBQVksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSztvQkFDekMsY0FBYyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjO2lCQUNyRDthQUNGLEVBQ0QsSUFBSSxDQUFDLGNBQXdCLENBQzlCLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTywwQkFBZSxDQUFDLFNBQVMsQ0FDOUIsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQ3RELElBQUksQ0FBQyxjQUF3QixDQUM5QixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBekRELDBCQXlEQyJ9
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { WriteStream } from 'fs';
|
|
2
|
+
import { TestableAgentOptions } from '../integrations';
|
|
3
|
+
export default class HttpRequester {
|
|
4
|
+
private readonly token;
|
|
5
|
+
private readonly options;
|
|
6
|
+
readonly agentOptions: TestableAgentOptions;
|
|
7
|
+
private readonly deserializer;
|
|
8
|
+
private get baseUrl();
|
|
9
|
+
constructor(token: string, options: {
|
|
10
|
+
prefix?: string;
|
|
11
|
+
url: string;
|
|
12
|
+
}, agentOptions: TestableAgentOptions);
|
|
13
|
+
query<Data = unknown>({ method, path, body, query, maxTimeAllowed, contentType, }: {
|
|
14
|
+
method: 'get' | 'post' | 'put' | 'delete';
|
|
15
|
+
path: string;
|
|
16
|
+
body?: Record<string, unknown>;
|
|
17
|
+
query?: Record<string, unknown>;
|
|
18
|
+
maxTimeAllowed?: number;
|
|
19
|
+
contentType?: 'application/json' | 'text/csv';
|
|
20
|
+
}): Promise<Data>;
|
|
21
|
+
stream({ path: reqPath, query, contentType, maxTimeAllowed, stream, }: {
|
|
22
|
+
path: string;
|
|
23
|
+
query?: Record<string, unknown>;
|
|
24
|
+
contentType: 'text/csv';
|
|
25
|
+
maxTimeAllowed?: number;
|
|
26
|
+
stream: WriteStream;
|
|
27
|
+
}): Promise<void>;
|
|
28
|
+
static escapeUrlSlug(name: string): string;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=http-requester.d.ts.map
|
|
@@ -0,0 +1,67 @@
|
|
|
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 jsonapi_serializer_1 = require("jsonapi-serializer");
|
|
7
|
+
const superagent_1 = __importDefault(require("superagent"));
|
|
8
|
+
class HttpRequester {
|
|
9
|
+
get baseUrl() {
|
|
10
|
+
const prefix = this.options.prefix ? `/${this.options.prefix}` : '';
|
|
11
|
+
return `${this.options.url}${prefix}`;
|
|
12
|
+
}
|
|
13
|
+
constructor(token, options, agentOptions) {
|
|
14
|
+
this.token = token;
|
|
15
|
+
this.options = options;
|
|
16
|
+
this.agentOptions = agentOptions;
|
|
17
|
+
this.deserializer = new jsonapi_serializer_1.Deserializer({ keyForAttribute: 'camelCase' });
|
|
18
|
+
}
|
|
19
|
+
async query({ method, path, body, query, maxTimeAllowed, contentType, }) {
|
|
20
|
+
try {
|
|
21
|
+
const url = new URL(`${this.baseUrl}${HttpRequester.escapeUrlSlug(path)}`).toString();
|
|
22
|
+
const req = superagent_1.default[method](url)
|
|
23
|
+
.timeout(maxTimeAllowed ?? 10000)
|
|
24
|
+
.set('Authorization', `Bearer ${this.token}`)
|
|
25
|
+
.set('Content-Type', contentType ?? 'application/json')
|
|
26
|
+
.query({ timezone: 'Europe/Paris', ...query });
|
|
27
|
+
if (body)
|
|
28
|
+
req.send(body);
|
|
29
|
+
const response = await req;
|
|
30
|
+
try {
|
|
31
|
+
return (await this.deserializer.deserialize(response.body));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return (response.body ?? response.text);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
if (!error.response)
|
|
39
|
+
throw error;
|
|
40
|
+
throw new Error(JSON.stringify({ error: error.response.error, body }, null, 4));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async stream({ path: reqPath, query, contentType = 'text/csv', maxTimeAllowed, stream, }) {
|
|
44
|
+
const url = new URL(`${this.baseUrl}${HttpRequester.escapeUrlSlug(reqPath)}`).toString();
|
|
45
|
+
return new Promise((resolve, reject) => {
|
|
46
|
+
superagent_1.default
|
|
47
|
+
.get(url)
|
|
48
|
+
.timeout(maxTimeAllowed ?? 10000)
|
|
49
|
+
.set('Authorization', `Bearer ${this.token}`)
|
|
50
|
+
.set('Accept', contentType)
|
|
51
|
+
.query({ timezone: 'Europe/Paris', ...query })
|
|
52
|
+
.pipe(stream)
|
|
53
|
+
.on('finish', () => {
|
|
54
|
+
resolve();
|
|
55
|
+
})
|
|
56
|
+
.on('error', err => {
|
|
57
|
+
console.error('Error occurred while streaming response:', err);
|
|
58
|
+
reject(err);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
static escapeUrlSlug(name) {
|
|
63
|
+
return encodeURI(name).replace(/([+?*])/g, '\\$1');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.default = HttpRequester;
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1yZXF1ZXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVtb3RlLWFnZW50LWNsaWVudC9odHRwLXJlcXVlc3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLDJEQUFrRDtBQUNsRCw0REFBb0M7QUFJcEMsTUFBcUIsYUFBYTtJQUdoQyxJQUFZLE9BQU87UUFDakIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXBFLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsWUFDbUIsS0FBYSxFQUNiLE9BQXlDLEVBQ2pELFlBQWtDO1FBRjFCLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixZQUFPLEdBQVAsT0FBTyxDQUFrQztRQUNqRCxpQkFBWSxHQUFaLFlBQVksQ0FBc0I7UUFFM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLGlDQUFZLENBQUMsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUssQ0FBaUIsRUFDMUIsTUFBTSxFQUNOLElBQUksRUFDSixJQUFJLEVBQ0osS0FBSyxFQUNMLGNBQWMsRUFDZCxXQUFXLEdBUVo7UUFDQyxJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFdEYsTUFBTSxHQUFHLEdBQUcsb0JBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUM7aUJBQ2hDLE9BQU8s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
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ActionEndpointsByCollection } from './domains/action';
|
|
2
|
+
import RemoteAgentClient, { PermissionsOverride } from './domains/remote-agent-client';
|
|
3
|
+
import { TestableAgentOptions } from '../integrations';
|
|
4
|
+
export declare function createRemoteAgentClient(params: {
|
|
5
|
+
overridePermissions?: (permissions: PermissionsOverride) => Promise<void>;
|
|
6
|
+
actionEndpoints?: ActionEndpointsByCollection;
|
|
7
|
+
token?: string;
|
|
8
|
+
url: string;
|
|
9
|
+
}, agentOptions: TestableAgentOptions): RemoteAgentClient<import("@forestadmin/datasource-customizer").TSchema>;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
exports.createRemoteAgentClient = createRemoteAgentClient;
|
|
7
|
+
const remote_agent_client_1 = __importDefault(require("./domains/remote-agent-client"));
|
|
8
|
+
const http_requester_1 = __importDefault(require("./http-requester"));
|
|
9
|
+
// eslint-disable-next-line import/prefer-default-export
|
|
10
|
+
function createRemoteAgentClient(params, agentOptions) {
|
|
11
|
+
const httpRequester = new http_requester_1.default(params.token, { url: params.url }, agentOptions);
|
|
12
|
+
return new remote_agent_client_1.default({
|
|
13
|
+
actionEndpoints: params.actionEndpoints,
|
|
14
|
+
httpRequester,
|
|
15
|
+
overridePermissions: params.overridePermissions,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVtb3RlLWFnZW50LWNsaWVudC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQU1BLDBEQWdCQztBQXJCRCx3RkFBdUY7QUFDdkYsc0VBQTZDO0FBRzdDLHdEQUF3RDtBQUN4RCxTQUFnQix1QkFBdUIsQ0FDckMsTUFLQyxFQUNELFlBQWtDO0lBRWxDLE1BQU0sYUFBYSxHQUFHLElBQUksd0JBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUV6RixPQUFPLElBQUksNkJBQWlCLENBQUM7UUFDM0IsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO1FBQ3ZDLGFBQWE7UUFDYixtQkFBbUIsRUFBRSxNQUFNLENBQUMsbUJBQW1CO0tBQ2hELENBQUMsQ0FBQztBQUNMLENBQUMifQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SelectOptions } from './types';
|
|
2
|
+
export default class QuerySerializer {
|
|
3
|
+
static serialize(query: SelectOptions, collectionName: string): Record<string, unknown>;
|
|
4
|
+
private static formatSort;
|
|
5
|
+
private static formatFilters;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=query-serializer.d.ts.map
|
|
@@ -0,0 +1,34 @@
|
|
|
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 http_requester_1 = __importDefault(require("./http-requester"));
|
|
7
|
+
class QuerySerializer {
|
|
8
|
+
static serialize(query, collectionName) {
|
|
9
|
+
if (!query)
|
|
10
|
+
return {};
|
|
11
|
+
const projectionName = `fields[${http_requester_1.default.escapeUrlSlug(collectionName)}]`;
|
|
12
|
+
return {
|
|
13
|
+
...query,
|
|
14
|
+
...query.filters,
|
|
15
|
+
sort: QuerySerializer.formatSort(query.sort),
|
|
16
|
+
filters: QuerySerializer.formatFilters(query.filters),
|
|
17
|
+
'page[size]': query.pagination?.size,
|
|
18
|
+
'page[number]': query.pagination?.number,
|
|
19
|
+
[projectionName]: query.projection?.toString(),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
static formatSort(sort) {
|
|
23
|
+
if (!sort)
|
|
24
|
+
return undefined;
|
|
25
|
+
return sort.ascending ? sort.field : `-${sort.field}`;
|
|
26
|
+
}
|
|
27
|
+
static formatFilters(filters) {
|
|
28
|
+
if (!filters)
|
|
29
|
+
return undefined;
|
|
30
|
+
return JSON.stringify(filters.conditionTree);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.default = QuerySerializer;
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc2VyaWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZW1vdGUtYWdlbnQtY2xpZW50L3F1ZXJ5LXNlcmlhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSxzRUFBNkM7QUFFN0MsTUFBcUIsZUFBZTtJQUNsQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQW9CLEVBQUUsY0FBc0I7UUFDM0QsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUV0QixNQUFNLGNBQWMsR0FBRyxVQUFVLHdCQUFhLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7UUFFaEYsT0FBTztZQUNMLEdBQUcsS0FBSztZQUNSLEdBQUcsS0FBSyxDQUFDLE9BQU87WUFDaEIsSUFBSSxFQUFFLGVBQWUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUM1QyxPQUFPLEVBQUUsZUFBZSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3JELFlBQVksRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUk7WUFDcEMsY0FBYyxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsTUFBTTtZQUN4QyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFO1NBQy9DLENBQUM7SUFDSixDQUFDO0lBRU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFxQjtRQUM3QyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRTVCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVPLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBb0I7UUFDL0MsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUUvQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRjtBQTVCRCxrQ0E0QkMifQ==
|