@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.
Files changed (111) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +52 -0
  3. package/dist/index.d.ts +4 -0
  4. package/dist/index.js +20 -0
  5. package/dist/integrations/benchmark.d.ts +13 -0
  6. package/dist/integrations/benchmark.js +36 -0
  7. package/dist/integrations/forest-admin-client-mock.d.ts +28 -0
  8. package/dist/integrations/forest-admin-client-mock.js +76 -0
  9. package/dist/integrations/forest-server-sandbox.d.ts +14 -0
  10. package/dist/integrations/forest-server-sandbox.js +153 -0
  11. package/dist/integrations/http-requester-mock.d.ts +8 -0
  12. package/dist/integrations/http-requester-mock.js +15 -0
  13. package/dist/integrations/index.d.ts +43 -0
  14. package/dist/integrations/index.js +119 -0
  15. package/dist/integrations/schema-converter.d.ts +6 -0
  16. package/dist/integrations/schema-converter.js +16 -0
  17. package/dist/integrations/schema-path-manager.d.ts +6 -0
  18. package/dist/integrations/schema-path-manager.js +25 -0
  19. package/dist/integrations/testable-agent-base.d.ts +7 -0
  20. package/dist/integrations/testable-agent-base.js +14 -0
  21. package/dist/integrations/testable-agent.d.ts +15 -0
  22. package/dist/integrations/testable-agent.js +33 -0
  23. package/dist/integrations/types.d.ts +5 -0
  24. package/dist/integrations/types.js +3 -0
  25. package/dist/remote-agent-client/action-fields/action-field-checkbox-group.d.ts +8 -0
  26. package/dist/remote-agent-client/action-fields/action-field-checkbox-group.js +23 -0
  27. package/dist/remote-agent-client/action-fields/action-field-checkbox.d.ts +6 -0
  28. package/dist/remote-agent-client/action-fields/action-field-checkbox.js +16 -0
  29. package/dist/remote-agent-client/action-fields/action-field-color-picker.d.ts +7 -0
  30. package/dist/remote-agent-client/action-fields/action-field-color-picker.js +19 -0
  31. package/dist/remote-agent-client/action-fields/action-field-date.d.ts +5 -0
  32. package/dist/remote-agent-client/action-fields/action-field-date.js +13 -0
  33. package/dist/remote-agent-client/action-fields/action-field-dropdown.d.ts +7 -0
  34. package/dist/remote-agent-client/action-fields/action-field-dropdown.js +16 -0
  35. package/dist/remote-agent-client/action-fields/action-field-enum.d.ts +6 -0
  36. package/dist/remote-agent-client/action-fields/action-field-enum.js +19 -0
  37. package/dist/remote-agent-client/action-fields/action-field-json.d.ts +5 -0
  38. package/dist/remote-agent-client/action-fields/action-field-json.js +13 -0
  39. package/dist/remote-agent-client/action-fields/action-field-multiple-choice.d.ts +7 -0
  40. package/dist/remote-agent-client/action-fields/action-field-multiple-choice.js +19 -0
  41. package/dist/remote-agent-client/action-fields/action-field-number-list.d.ts +6 -0
  42. package/dist/remote-agent-client/action-fields/action-field-number-list.js +20 -0
  43. package/dist/remote-agent-client/action-fields/action-field-number.d.ts +5 -0
  44. package/dist/remote-agent-client/action-fields/action-field-number.js +13 -0
  45. package/dist/remote-agent-client/action-fields/action-field-radio-group.d.ts +7 -0
  46. package/dist/remote-agent-client/action-fields/action-field-radio-group.js +16 -0
  47. package/dist/remote-agent-client/action-fields/action-field-string-list.d.ts +6 -0
  48. package/dist/remote-agent-client/action-fields/action-field-string-list.js +20 -0
  49. package/dist/remote-agent-client/action-fields/action-field-string.d.ts +5 -0
  50. package/dist/remote-agent-client/action-fields/action-field-string.js +13 -0
  51. package/dist/remote-agent-client/action-fields/action-field.d.ts +15 -0
  52. package/dist/remote-agent-client/action-fields/action-field.js +34 -0
  53. package/dist/remote-agent-client/action-fields/field-form-states.d.ts +25 -0
  54. package/dist/remote-agent-client/action-fields/field-form-states.js +94 -0
  55. package/dist/remote-agent-client/action-fields/field-getter.d.ts +10 -0
  56. package/dist/remote-agent-client/action-fields/field-getter.js +21 -0
  57. package/dist/remote-agent-client/action-fields/types.d.ts +28 -0
  58. package/dist/remote-agent-client/action-fields/types.js +3 -0
  59. package/dist/remote-agent-client/action-layout/action-layout-container.d.ts +9 -0
  60. package/dist/remote-agent-client/action-layout/action-layout-container.js +24 -0
  61. package/dist/remote-agent-client/action-layout/action-layout-element.d.ts +14 -0
  62. package/dist/remote-agent-client/action-layout/action-layout-element.js +47 -0
  63. package/dist/remote-agent-client/action-layout/action-layout-input.d.ts +7 -0
  64. package/dist/remote-agent-client/action-layout/action-layout-input.js +12 -0
  65. package/dist/remote-agent-client/action-layout/action-layout-page.d.ts +8 -0
  66. package/dist/remote-agent-client/action-layout/action-layout-page.js +18 -0
  67. package/dist/remote-agent-client/action-layout/action-layout-root.d.ts +6 -0
  68. package/dist/remote-agent-client/action-layout/action-layout-root.js +19 -0
  69. package/dist/remote-agent-client/action-layout/errors.d.ts +8 -0
  70. package/dist/remote-agent-client/action-layout/errors.js +16 -0
  71. package/dist/remote-agent-client/domains/action.d.ts +59 -0
  72. package/dist/remote-agent-client/domains/action.js +139 -0
  73. package/dist/remote-agent-client/domains/chart.d.ts +21 -0
  74. package/dist/remote-agent-client/domains/chart.js +39 -0
  75. package/dist/remote-agent-client/domains/collection-chart.d.ts +19 -0
  76. package/dist/remote-agent-client/domains/collection-chart.js +40 -0
  77. package/dist/remote-agent-client/domains/collection.d.ts +26 -0
  78. package/dist/remote-agent-client/domains/collection.js +109 -0
  79. package/dist/remote-agent-client/domains/relation.d.ts +11 -0
  80. package/dist/remote-agent-client/domains/relation.js +23 -0
  81. package/dist/remote-agent-client/domains/remote-agent-client.d.ts +41 -0
  82. package/dist/remote-agent-client/domains/remote-agent-client.js +43 -0
  83. package/dist/remote-agent-client/domains/segment.d.ts +14 -0
  84. package/dist/remote-agent-client/domains/segment.js +46 -0
  85. package/dist/remote-agent-client/http-requester.d.ts +30 -0
  86. package/dist/remote-agent-client/http-requester.js +67 -0
  87. package/dist/remote-agent-client/index.d.ts +10 -0
  88. package/dist/remote-agent-client/index.js +18 -0
  89. package/dist/remote-agent-client/query-serializer.d.ts +7 -0
  90. package/dist/remote-agent-client/query-serializer.js +34 -0
  91. package/dist/remote-agent-client/types.d.ts +25 -0
  92. package/dist/remote-agent-client/types.js +3 -0
  93. package/dist/units/add-action.d.ts +16 -0
  94. package/dist/units/add-action.js +70 -0
  95. package/dist/units/add-field.d.ts +3 -0
  96. package/dist/units/add-field.js +18 -0
  97. package/dist/units/add-hook.d.ts +3 -0
  98. package/dist/units/add-hook.js +18 -0
  99. package/dist/units/import-field.d.ts +3 -0
  100. package/dist/units/import-field.js +18 -0
  101. package/dist/units/index.d.ts +9 -0
  102. package/dist/units/index.js +25 -0
  103. package/dist/units/many-to-one-relation.d.ts +3 -0
  104. package/dist/units/many-to-one-relation.js +18 -0
  105. package/dist/units/replace-search.d.ts +3 -0
  106. package/dist/units/replace-search.js +18 -0
  107. package/dist/units/types.d.ts +34 -0
  108. package/dist/units/types.js +3 -0
  109. package/dist/units/use-plugin.d.ts +3 -0
  110. package/dist/units/use-plugin.js +18 -0
  111. 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==