@forestadmin/agent-testing 0.1.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/benchmark.js +36 -0
- package/dist/{integrations/forest-admin-client-mock.d.ts → forest-admin-client-mock.d.ts} +2 -0
- package/dist/forest-admin-client-mock.js +83 -0
- package/dist/forest-server-sandbox.js +153 -0
- package/dist/http-requester-mock.d.ts +7 -0
- package/dist/{integrations/http-requester-mock.js → http-requester-mock.js} +4 -4
- package/dist/index.d.ts +46 -3
- package/dist/index.js +101 -4
- package/dist/schema-converter.d.ts +6 -0
- package/dist/schema-converter.js +16 -0
- package/dist/{integrations/schema-path-manager.js → schema-path-manager.js} +1 -1
- package/dist/{integrations/testable-agent-base.d.ts → testable-agent-base.d.ts} +2 -2
- package/dist/{integrations/testable-agent-base.js → testable-agent-base.js} +3 -3
- package/dist/{integrations/testable-agent.d.ts → testable-agent.d.ts} +1 -1
- package/dist/{integrations/testable-agent.js → testable-agent.js} +2 -2
- package/dist/types.d.ts +5 -0
- package/dist/{units/types.js → types.js} +1 -1
- package/package.json +5 -5
- package/dist/integrations/benchmark.js +0 -36
- package/dist/integrations/forest-admin-client-mock.js +0 -76
- package/dist/integrations/forest-server-sandbox.js +0 -153
- package/dist/integrations/http-requester-mock.d.ts +0 -8
- package/dist/integrations/index.d.ts +0 -43
- package/dist/integrations/index.js +0 -119
- package/dist/integrations/schema-converter.d.ts +0 -6
- package/dist/integrations/schema-converter.js +0 -16
- package/dist/integrations/types.d.ts +0 -5
- package/dist/integrations/types.js +0 -3
- package/dist/remote-agent-client/action-fields/action-field-checkbox-group.d.ts +0 -8
- package/dist/remote-agent-client/action-fields/action-field-checkbox-group.js +0 -23
- package/dist/remote-agent-client/action-fields/action-field-checkbox.d.ts +0 -6
- package/dist/remote-agent-client/action-fields/action-field-checkbox.js +0 -16
- package/dist/remote-agent-client/action-fields/action-field-color-picker.d.ts +0 -7
- package/dist/remote-agent-client/action-fields/action-field-color-picker.js +0 -19
- package/dist/remote-agent-client/action-fields/action-field-date.d.ts +0 -5
- package/dist/remote-agent-client/action-fields/action-field-date.js +0 -13
- package/dist/remote-agent-client/action-fields/action-field-dropdown.d.ts +0 -7
- package/dist/remote-agent-client/action-fields/action-field-dropdown.js +0 -16
- package/dist/remote-agent-client/action-fields/action-field-enum.d.ts +0 -6
- package/dist/remote-agent-client/action-fields/action-field-enum.js +0 -19
- package/dist/remote-agent-client/action-fields/action-field-json.d.ts +0 -5
- package/dist/remote-agent-client/action-fields/action-field-json.js +0 -13
- package/dist/remote-agent-client/action-fields/action-field-multiple-choice.d.ts +0 -7
- package/dist/remote-agent-client/action-fields/action-field-multiple-choice.js +0 -19
- package/dist/remote-agent-client/action-fields/action-field-number-list.d.ts +0 -6
- package/dist/remote-agent-client/action-fields/action-field-number-list.js +0 -20
- package/dist/remote-agent-client/action-fields/action-field-number.d.ts +0 -5
- package/dist/remote-agent-client/action-fields/action-field-number.js +0 -13
- package/dist/remote-agent-client/action-fields/action-field-radio-group.d.ts +0 -7
- package/dist/remote-agent-client/action-fields/action-field-radio-group.js +0 -16
- package/dist/remote-agent-client/action-fields/action-field-string-list.d.ts +0 -6
- package/dist/remote-agent-client/action-fields/action-field-string-list.js +0 -20
- package/dist/remote-agent-client/action-fields/action-field-string.d.ts +0 -5
- package/dist/remote-agent-client/action-fields/action-field-string.js +0 -13
- package/dist/remote-agent-client/action-fields/action-field.d.ts +0 -15
- package/dist/remote-agent-client/action-fields/action-field.js +0 -34
- package/dist/remote-agent-client/action-fields/field-form-states.d.ts +0 -25
- package/dist/remote-agent-client/action-fields/field-form-states.js +0 -94
- package/dist/remote-agent-client/action-fields/field-getter.d.ts +0 -10
- package/dist/remote-agent-client/action-fields/field-getter.js +0 -21
- package/dist/remote-agent-client/action-fields/types.d.ts +0 -28
- package/dist/remote-agent-client/action-fields/types.js +0 -3
- package/dist/remote-agent-client/action-layout/action-layout-container.d.ts +0 -9
- package/dist/remote-agent-client/action-layout/action-layout-container.js +0 -24
- package/dist/remote-agent-client/action-layout/action-layout-element.d.ts +0 -14
- package/dist/remote-agent-client/action-layout/action-layout-element.js +0 -47
- package/dist/remote-agent-client/action-layout/action-layout-input.d.ts +0 -7
- package/dist/remote-agent-client/action-layout/action-layout-input.js +0 -12
- package/dist/remote-agent-client/action-layout/action-layout-page.d.ts +0 -8
- package/dist/remote-agent-client/action-layout/action-layout-page.js +0 -18
- package/dist/remote-agent-client/action-layout/action-layout-root.d.ts +0 -6
- package/dist/remote-agent-client/action-layout/action-layout-root.js +0 -19
- package/dist/remote-agent-client/action-layout/errors.d.ts +0 -8
- package/dist/remote-agent-client/action-layout/errors.js +0 -16
- package/dist/remote-agent-client/domains/action.d.ts +0 -59
- package/dist/remote-agent-client/domains/action.js +0 -139
- package/dist/remote-agent-client/domains/chart.d.ts +0 -21
- package/dist/remote-agent-client/domains/chart.js +0 -39
- package/dist/remote-agent-client/domains/collection-chart.d.ts +0 -19
- package/dist/remote-agent-client/domains/collection-chart.js +0 -40
- package/dist/remote-agent-client/domains/collection.d.ts +0 -26
- package/dist/remote-agent-client/domains/collection.js +0 -109
- package/dist/remote-agent-client/domains/relation.d.ts +0 -11
- package/dist/remote-agent-client/domains/relation.js +0 -23
- package/dist/remote-agent-client/domains/remote-agent-client.d.ts +0 -41
- package/dist/remote-agent-client/domains/remote-agent-client.js +0 -43
- package/dist/remote-agent-client/domains/segment.d.ts +0 -14
- package/dist/remote-agent-client/domains/segment.js +0 -46
- package/dist/remote-agent-client/http-requester.d.ts +0 -30
- package/dist/remote-agent-client/http-requester.js +0 -67
- package/dist/remote-agent-client/index.d.ts +0 -10
- package/dist/remote-agent-client/index.js +0 -18
- package/dist/remote-agent-client/query-serializer.d.ts +0 -7
- package/dist/remote-agent-client/query-serializer.js +0 -34
- package/dist/remote-agent-client/types.d.ts +0 -25
- package/dist/remote-agent-client/types.js +0 -3
- package/dist/units/add-action.d.ts +0 -16
- package/dist/units/add-action.js +0 -70
- package/dist/units/add-field.d.ts +0 -3
- package/dist/units/add-field.js +0 -18
- package/dist/units/add-hook.d.ts +0 -3
- package/dist/units/add-hook.js +0 -18
- package/dist/units/import-field.d.ts +0 -3
- package/dist/units/import-field.js +0 -18
- package/dist/units/index.d.ts +0 -9
- package/dist/units/index.js +0 -25
- package/dist/units/many-to-one-relation.d.ts +0 -3
- package/dist/units/many-to-one-relation.js +0 -18
- package/dist/units/replace-search.d.ts +0 -3
- package/dist/units/replace-search.js +0 -18
- package/dist/units/types.d.ts +0 -34
- package/dist/units/use-plugin.d.ts +0 -3
- package/dist/units/use-plugin.js +0 -18
- /package/dist/{integrations/benchmark.d.ts → benchmark.d.ts} +0 -0
- /package/dist/{integrations/forest-server-sandbox.d.ts → forest-server-sandbox.d.ts} +0 -0
- /package/dist/{integrations/schema-path-manager.d.ts → schema-path-manager.d.ts} +0 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const node_perf_hooks_1 = require("node:perf_hooks");
|
|
4
|
+
class Benchmark {
|
|
5
|
+
constructor() {
|
|
6
|
+
this._times = 1;
|
|
7
|
+
}
|
|
8
|
+
times(times) {
|
|
9
|
+
if (times < 1)
|
|
10
|
+
throw new Error('Times must be greater than 0');
|
|
11
|
+
this._times = times;
|
|
12
|
+
return this;
|
|
13
|
+
}
|
|
14
|
+
async run(func) {
|
|
15
|
+
const durations = [];
|
|
16
|
+
for (let i = 0; i < this._times; i += 1) {
|
|
17
|
+
// eslint-disable-next-line no-await-in-loop
|
|
18
|
+
const start = node_perf_hooks_1.performance.now();
|
|
19
|
+
// eslint-disable-next-line no-await-in-loop
|
|
20
|
+
await func();
|
|
21
|
+
const end = node_perf_hooks_1.performance.now();
|
|
22
|
+
const duration = end - start;
|
|
23
|
+
durations.push(duration);
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
times: this._times,
|
|
27
|
+
durations,
|
|
28
|
+
average: durations.reduce((acc, curr) => acc + curr, 0) / this._times,
|
|
29
|
+
total: durations.reduce((acc, curr) => acc + curr, 0),
|
|
30
|
+
min: Math.min(...durations),
|
|
31
|
+
max: Math.max(...durations),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.default = Benchmark;
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVuY2htYXJrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2JlbmNobWFyay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUE4QztBQUU5QyxNQUFxQixTQUFTO0lBQTlCO1FBQ1UsV0FBTSxHQUFHLENBQUMsQ0FBQztJQXNDckIsQ0FBQztJQXBDQyxLQUFLLENBQUMsS0FBYTtRQUNqQixJQUFJLEtBQUssR0FBRyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBRXBCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBeUI7UUFRakMsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO1FBRS9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN4Qyw0Q0FBNEM7WUFDNUMsTUFBTSxLQUFLLEdBQUcsNkJBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoQyw0Q0FBNEM7WUFDNUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUNiLE1BQU0sR0FBRyxHQUFHLDZCQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztZQUM3QixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFFRCxPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ2xCLFNBQVM7WUFDVCxPQUFPLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDckUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNyRCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUMzQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztTQUM1QixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBdkNELDRCQXVDQyJ9
|
|
@@ -13,6 +13,8 @@ export default class ForestAdminClientMock implements ForestAdminClient {
|
|
|
13
13
|
readonly contextVariablesInstantiator: ContextVariablesInstantiatorInterface;
|
|
14
14
|
readonly modelCustomizationService: ModelCustomizationService;
|
|
15
15
|
readonly mcpServerConfigService: ForestAdminClient['mcpServerConfigService'];
|
|
16
|
+
readonly schemaService: ForestAdminClient['schemaService'];
|
|
17
|
+
readonly activityLogsService: ForestAdminClient['activityLogsService'];
|
|
16
18
|
readonly permissionService: any;
|
|
17
19
|
readonly authService: any;
|
|
18
20
|
constructor();
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CURRENT_USER = void 0;
|
|
4
|
+
exports.CURRENT_USER = {
|
|
5
|
+
id: 1,
|
|
6
|
+
email: 'forest@forest.com',
|
|
7
|
+
team: 'admin',
|
|
8
|
+
rendering_id: 1,
|
|
9
|
+
renderingId: 1,
|
|
10
|
+
first_name: 'forest',
|
|
11
|
+
firstName: 'forest',
|
|
12
|
+
last_name: 'admin',
|
|
13
|
+
lastName: 'admin',
|
|
14
|
+
role: 'Admin',
|
|
15
|
+
permissionLevel: 'admin',
|
|
16
|
+
permission_level: 'admin',
|
|
17
|
+
tags: {},
|
|
18
|
+
roleId: 1,
|
|
19
|
+
role_id: 1,
|
|
20
|
+
};
|
|
21
|
+
class ForestAdminClientMock {
|
|
22
|
+
constructor() {
|
|
23
|
+
this.contextVariablesInstantiator = {
|
|
24
|
+
buildContextVariables: () => ({}), // TODO: return actual context variables
|
|
25
|
+
};
|
|
26
|
+
this.mcpServerConfigService = {
|
|
27
|
+
getConfiguration: () => Promise.resolve({ configs: {} }),
|
|
28
|
+
};
|
|
29
|
+
this.schemaService = {
|
|
30
|
+
getSchema: () => Promise.resolve([]),
|
|
31
|
+
};
|
|
32
|
+
this.activityLogsService = {
|
|
33
|
+
createActivityLog: () => Promise.resolve({ id: '1', attributes: { index: '1' } }),
|
|
34
|
+
updateActivityLogStatus: () => Promise.resolve(),
|
|
35
|
+
};
|
|
36
|
+
this.permissionService = {
|
|
37
|
+
canOnCollection: () => true,
|
|
38
|
+
canTriggerCustomAction: () => true,
|
|
39
|
+
doesTriggerCustomActionRequiresApproval: () => false,
|
|
40
|
+
canApproveCustomAction: () => true,
|
|
41
|
+
canRequestCustomActionParameters: () => true,
|
|
42
|
+
canExecuteChart: () => true,
|
|
43
|
+
canExecuteSegmentQuery: () => true,
|
|
44
|
+
getConditionalTriggerCondition: () => undefined,
|
|
45
|
+
getConditionalRequiresApprovalCondition: () => undefined,
|
|
46
|
+
getConditionalApproveCondition: () => undefined,
|
|
47
|
+
getConditionalApproveConditions: () => undefined,
|
|
48
|
+
getRoleIdsAllowedToApproveWithoutConditions: () => undefined,
|
|
49
|
+
};
|
|
50
|
+
this.authService = {
|
|
51
|
+
init: () => Promise.resolve(undefined),
|
|
52
|
+
getUserInfo: () => Promise.resolve(exports.CURRENT_USER),
|
|
53
|
+
generateAuthorizationUrl: () => Promise.resolve(undefined),
|
|
54
|
+
generateTokens: () => Promise.resolve({ accessToken: 'AUTH-TOKEN' }),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
close() {
|
|
58
|
+
// Do nothing
|
|
59
|
+
}
|
|
60
|
+
getIpWhitelistConfiguration() {
|
|
61
|
+
return Promise.resolve({ isFeatureEnabled: false, ipRules: [] });
|
|
62
|
+
}
|
|
63
|
+
getScope() {
|
|
64
|
+
return Promise.resolve(undefined);
|
|
65
|
+
}
|
|
66
|
+
markScopesAsUpdated() {
|
|
67
|
+
// Do nothing
|
|
68
|
+
}
|
|
69
|
+
onRefreshCustomizations() {
|
|
70
|
+
// Do nothing
|
|
71
|
+
}
|
|
72
|
+
postSchema() {
|
|
73
|
+
return Promise.resolve(true);
|
|
74
|
+
}
|
|
75
|
+
subscribeToServerEvents() {
|
|
76
|
+
return Promise.resolve();
|
|
77
|
+
}
|
|
78
|
+
verifySignedActionParameters() {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.default = ForestAdminClientMock;
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZXN0LWFkbWluLWNsaWVudC1tb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZvcmVzdC1hZG1pbi1jbGllbnQtbW9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrQmEsUUFBQSxZQUFZLEdBQStCO0lBQ3RELEVBQUUsRUFBRSxDQUFDO0lBQ0wsS0FBSyxFQUFFLG1CQUFtQjtJQUMxQixJQUFJLEVBQUUsT0FBTztJQUViLFlBQVksRUFBRSxDQUFDO0lBQ2YsV0FBVyxFQUFFLENBQUM7SUFFZCxVQUFVLEVBQUUsUUFBUTtJQUNwQixTQUFTLEVBQUUsUUFBUTtJQUVuQixTQUFTLEVBQUUsT0FBTztJQUNsQixRQUFRLEVBQUUsT0FBTztJQUVqQixJQUFJLEVBQUUsT0FBTztJQUViLGVBQWUsRUFBRSxPQUFPO0lBQ3hCLGdCQUFnQixFQUFFLE9BQU87SUFFekIsSUFBSSxFQUFFLEVBQUU7SUFFUixNQUFNLEVBQUUsQ0FBQztJQUNULE9BQU8sRUFBRSxDQUFDO0NBQ1gsQ0FBQztBQUVGLE1BQXFCLHFCQUFxQjtJQXVCeEM7UUFyQlMsaUNBQTRCLEdBQTBDO1lBQzdFLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBVSxDQUFBLEVBQUUsd0NBQXdDO1NBQ25GLENBQUM7UUFHTywyQkFBc0IsR0FBZ0Q7WUFDN0UsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztTQUN6RCxDQUFDO1FBRU8sa0JBQWEsR0FBdUM7WUFDM0QsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1NBQ3JDLENBQUM7UUFFTyx3QkFBbUIsR0FBNkM7WUFDdkUsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDakYsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtTQUNqRCxDQUFDO1FBTUEsSUFBSSxDQUFDLGlCQUFpQixHQUFHO1lBQ3ZCLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJO1lBQzNCLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7WUFDbEMsdUNBQXVDLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSztZQUNwRCxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJO1lBQ2xDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7WUFDNUMsZUFBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7WUFDM0Isc0JBQXNCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtZQUNsQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTO1lBQy9DLHVDQUF1QyxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVM7WUFDeEQsOEJBQThCLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUztZQUMvQywrQkFBK0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTO1lBQ2hELDJDQUEyQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVM7U0FDN0QsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDakIsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQ3RDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFXLG9CQUFZLENBQUM7WUFDMUQsd0JBQXdCLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFDMUQsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLENBQUM7U0FDckUsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLO1FBQ0gsYUFBYTtJQUNmLENBQUM7SUFFRCwyQkFBMkI7UUFDekIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFZLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsYUFBYTtJQUNmLENBQUM7SUFFRCx1QkFBdUI7UUFDckIsYUFBYTtJQUNmLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCx1QkFBdUI7UUFDckIsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELDRCQUE0QjtRQUMxQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUE3RUQsd0NBNkVDIn0=
|
|
@@ -0,0 +1,153 @@
|
|
|
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 node_http_1 = __importDefault(require("node:http"));
|
|
7
|
+
const forest_admin_client_mock_1 = require("./forest-admin-client-mock");
|
|
8
|
+
class ForestServerSandbox {
|
|
9
|
+
constructor(port) {
|
|
10
|
+
// cache the agent schema for every client to avoid to start several servers when testing agent.
|
|
11
|
+
this.agentSchemaCache = new Map();
|
|
12
|
+
// allow to override some permissions directly from the agent
|
|
13
|
+
this.permissionsOverrideCache = new Map();
|
|
14
|
+
this.port = port;
|
|
15
|
+
}
|
|
16
|
+
async createServer() {
|
|
17
|
+
const server = node_http_1.default.createServer(this.routes.bind(this));
|
|
18
|
+
this.fakeForestServer = await new Promise((resolve, reject) => {
|
|
19
|
+
server.listen(this.port, () => resolve(server));
|
|
20
|
+
server.on('error', error => {
|
|
21
|
+
console.error('Server error:', error);
|
|
22
|
+
reject(error);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
this.port = this.fakeForestServer.address().port;
|
|
26
|
+
// eslint-disable-next-line no-console
|
|
27
|
+
console.log(`Server listening on port ${this.port}`);
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
async stop() {
|
|
31
|
+
await new Promise((resolve, reject) => {
|
|
32
|
+
this.fakeForestServer.close(error => {
|
|
33
|
+
if (error)
|
|
34
|
+
reject(error);
|
|
35
|
+
else
|
|
36
|
+
resolve(null);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
routes(req, res) {
|
|
41
|
+
const agentSchemaCacheIdentifier = req.headers['forest-secret-key'];
|
|
42
|
+
const sendResponse = (statusCode, data) => {
|
|
43
|
+
if (!res.headersSent) {
|
|
44
|
+
res.writeHead(statusCode, { 'Content-Type': 'application/json' });
|
|
45
|
+
}
|
|
46
|
+
if (!res.writableEnded) {
|
|
47
|
+
res.end(data ? JSON.stringify(data) : undefined);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
try {
|
|
51
|
+
switch (req.url) {
|
|
52
|
+
case '/agent-schema': {
|
|
53
|
+
let data = '';
|
|
54
|
+
req.on('data', chunk => {
|
|
55
|
+
data += chunk;
|
|
56
|
+
});
|
|
57
|
+
req.on('end', () => {
|
|
58
|
+
this.agentSchemaCache.set(agentSchemaCacheIdentifier, JSON.parse(data));
|
|
59
|
+
sendResponse(200);
|
|
60
|
+
});
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
case '/permission-override': {
|
|
64
|
+
let data = '';
|
|
65
|
+
req.on('data', chunk => {
|
|
66
|
+
data += chunk;
|
|
67
|
+
});
|
|
68
|
+
req.on('end', () => {
|
|
69
|
+
this.permissionsOverrideCache.set(agentSchemaCacheIdentifier, JSON.parse(data));
|
|
70
|
+
sendResponse(200);
|
|
71
|
+
});
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
case '/liana/v4/subscribe-to-events':
|
|
75
|
+
sendResponse(200);
|
|
76
|
+
break;
|
|
77
|
+
case '/liana/v1/ip-whitelist-rules':
|
|
78
|
+
sendResponse(200, { data: { attributes: { use_ip_whitelist: false, rules: [] } } });
|
|
79
|
+
break;
|
|
80
|
+
case '/liana/v4/permissions/environment': {
|
|
81
|
+
try {
|
|
82
|
+
const permissionsV4 = this.transformForestSchemaToEnvironmentPermissionsV4Remote(this.agentSchemaCache.get(agentSchemaCacheIdentifier), this.permissionsOverrideCache.get(agentSchemaCacheIdentifier));
|
|
83
|
+
sendResponse(200, permissionsV4);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
sendResponse(400, { error: 'Provide a valid schema path' });
|
|
87
|
+
}
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
case '/liana/v4/permissions/users':
|
|
91
|
+
sendResponse(200, [forest_admin_client_mock_1.CURRENT_USER]);
|
|
92
|
+
break;
|
|
93
|
+
case '/forest/apimaps/hashcheck':
|
|
94
|
+
sendResponse(200, { sendSchema: false });
|
|
95
|
+
break;
|
|
96
|
+
default:
|
|
97
|
+
if (req.url?.startsWith('/liana/v4/permissions/renderings/')) {
|
|
98
|
+
sendResponse(200, { team: {}, collections: {}, stats: [] });
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
sendResponse(404, { error: 'Not Found' });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
console.error('Error handling request:', error);
|
|
107
|
+
sendResponse(500, { error: 'Internal Server Error' });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
transformForestSchemaToEnvironmentPermissionsV4Remote(schema, permissionsOverride) {
|
|
111
|
+
const collections = {};
|
|
112
|
+
schema.collections.forEach(collection => {
|
|
113
|
+
const actionPermissions = {};
|
|
114
|
+
collection.actions.forEach(action => {
|
|
115
|
+
actionPermissions[action.name] = this.getCollectionActionPermissions(permissionsOverride?.[collection.name]?.actions?.[action.name] || {});
|
|
116
|
+
});
|
|
117
|
+
collections[collection.name] = {
|
|
118
|
+
collection: this.getCollectionCrudPermissions(permissionsOverride?.[collection.name]?.collection || {}),
|
|
119
|
+
actions: actionPermissions,
|
|
120
|
+
};
|
|
121
|
+
});
|
|
122
|
+
return { collections };
|
|
123
|
+
}
|
|
124
|
+
getCollectionCrudPermissions(override) {
|
|
125
|
+
return {
|
|
126
|
+
browseEnabled: { roles: [override.browseEnabled === false ? 0 : 1] },
|
|
127
|
+
deleteEnabled: { roles: [override.deleteEnabled === false ? 0 : 1] },
|
|
128
|
+
editEnabled: { roles: [override.editEnabled === false ? 0 : 1] },
|
|
129
|
+
exportEnabled: { roles: [override.exportEnabled === false ? 0 : 1] },
|
|
130
|
+
addEnabled: { roles: [override.addEnabled === false ? 0 : 1] },
|
|
131
|
+
readEnabled: { roles: [override.readEnabled === false ? 0 : 1] },
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
getCollectionActionPermissions(override) {
|
|
135
|
+
return {
|
|
136
|
+
approvalRequired: { roles: [override.approvalRequired === true ? 1 : 0] },
|
|
137
|
+
userApprovalEnabled: { roles: [override.userApprovalEnabled === false ? 0 : 1] },
|
|
138
|
+
selfApprovalEnabled: { roles: [override.selfApprovalEnabled === false ? 0 : 1] },
|
|
139
|
+
triggerEnabled: { roles: [override.triggerEnabled === false ? 0 : 1] },
|
|
140
|
+
triggerConditions: override.triggerConditions
|
|
141
|
+
? [{ roleId: 1, filter: override.triggerConditions }]
|
|
142
|
+
: [],
|
|
143
|
+
userApprovalConditions: override.userApprovalConditions
|
|
144
|
+
? [{ roleId: 1, filter: override.userApprovalConditions }]
|
|
145
|
+
: [],
|
|
146
|
+
approvalRequiredConditions: override.approvalRequiredConditions
|
|
147
|
+
? [{ roleId: 1, filter: override.approvalRequiredConditions }]
|
|
148
|
+
: [],
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
exports.default = ForestServerSandbox;
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZXN0LXNlcnZlci1zYW5kYm94LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZvcmVzdC1zZXJ2ZXItc2FuZGJveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVlBLDBEQUE2QjtBQUU3Qix5RUFBMEQ7QUFFMUQsTUFBcUIsbUJBQW1CO0lBV3RDLFlBQVksSUFBWTtRQVJ4QixnR0FBZ0c7UUFDL0UscUJBQWdCLEdBQThCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFekUsNkRBQTZEO1FBQzVDLDZCQUF3QixHQUFxQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBS3RGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWTtRQUNoQixNQUFNLE1BQU0sR0FBRyxtQkFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzVELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNoRCxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksR0FBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUF1QixDQUFDLElBQUksQ0FBQztRQUV2RSxzQ0FBc0M7UUFDdEMsT0FB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
|
|
@@ -4,12 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.createHttpRequester = createHttpRequester;
|
|
7
|
+
const agent_client_1 = require("@forestadmin/agent-client");
|
|
7
8
|
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
8
9
|
const forest_admin_client_mock_1 = require("./forest-admin-client-mock");
|
|
9
|
-
const http_requester_1 = __importDefault(require("../remote-agent-client/http-requester"));
|
|
10
10
|
// eslint-disable-next-line import/prefer-default-export
|
|
11
|
-
function createHttpRequester(options
|
|
11
|
+
function createHttpRequester(options) {
|
|
12
12
|
const token = jsonwebtoken_1.default.sign(forest_admin_client_mock_1.CURRENT_USER, options.authSecret, { expiresIn: '1 hours' });
|
|
13
|
-
return new
|
|
13
|
+
return new agent_client_1.HttpRequester(token, options);
|
|
14
14
|
}
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1yZXF1ZXN0ZXItbW9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9odHRwLXJlcXVlc3Rlci1tb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBTUEsa0RBUUM7QUFkRCw0REFBMEQ7QUFDMUQsZ0VBQXdDO0FBRXhDLHlFQUEwRDtBQUUxRCx3REFBd0Q7QUFDeEQsU0FBZ0IsbUJBQW1CLENBQUMsT0FJbkM7SUFDQyxNQUFNLEtBQUssR0FBRyxzQkFBWSxDQUFDLElBQUksQ0FBQyx1Q0FBWSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUU1RixPQUFPLElBQUksNEJBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0MsQ0FBQyJ9
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import type { TestableAgentOptions } from './types';
|
|
2
|
+
import type { Agent } from '@forestadmin/agent';
|
|
3
|
+
import type { TSchema } from '@forestadmin/datasource-customizer';
|
|
4
|
+
import ForestServerSandbox from './forest-server-sandbox';
|
|
5
|
+
import SchemaPathManager from './schema-path-manager';
|
|
6
|
+
import TestableAgent from './testable-agent';
|
|
7
|
+
import TestableAgentBase from './testable-agent-base';
|
|
8
|
+
export { AgentOptions, Agent } from '@forestadmin/agent';
|
|
9
|
+
export * from './types';
|
|
10
|
+
export { SchemaPathManager, ForestServerSandbox, TestableAgent };
|
|
11
|
+
export type AgentTestClient = TestableAgentBase;
|
|
12
|
+
/** @deprecated Use AgentTestClient instead */
|
|
13
|
+
export type ForestAgentClient = TestableAgentBase;
|
|
14
|
+
/**
|
|
15
|
+
* Create a forest server sandbox
|
|
16
|
+
* It is useful to test the agent if you use the createAgentTestClient way to test your agent
|
|
17
|
+
* @param port
|
|
18
|
+
*/
|
|
19
|
+
export declare function createForestServerSandbox(port: number): Promise<ForestServerSandbox>;
|
|
20
|
+
/**
|
|
21
|
+
* Create a test client to test your agent customizations
|
|
22
|
+
* by sending requests to the agent like the frontend does.
|
|
23
|
+
* With this client, you should start your agent by yourself.
|
|
24
|
+
* You can test any agent with this client (python, ruby, nodeJs, etc.)
|
|
25
|
+
* @param options
|
|
26
|
+
*/
|
|
27
|
+
export declare function createAgentTestClient(options: {
|
|
28
|
+
agentForestEnvSecret: string;
|
|
29
|
+
agentForestAuthSecret: string;
|
|
30
|
+
agentUrl: string;
|
|
31
|
+
serverUrl: string;
|
|
32
|
+
agentSchemaPath: string;
|
|
33
|
+
}): Promise<AgentTestClient>;
|
|
34
|
+
/**
|
|
35
|
+
* @deprecated Use createAgentTestClient with createForestServerSandbox instead.
|
|
36
|
+
*
|
|
37
|
+
* Create a testable agent
|
|
38
|
+
* You can test your agentNodejs customizations by injecting your customizations.
|
|
39
|
+
* It will start the agent for you. You don't need to start the agent by yourself and a server.
|
|
40
|
+
*
|
|
41
|
+
* @param customizer
|
|
42
|
+
* @param options
|
|
43
|
+
*/
|
|
44
|
+
export declare function createTestableAgent<TypingsSchema extends TSchema = TSchema>(customizer: (agent: Agent<TypingsSchema>) => void, options?: TestableAgentOptions): Promise<TestableAgent<TypingsSchema>>;
|
|
45
|
+
/** @deprecated Use createAgentTestClient instead */
|
|
46
|
+
export declare const createForestAgentClient: typeof createAgentTestClient;
|
|
4
47
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -13,8 +13,105 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
13
13
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
16
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
exports.createForestAgentClient = exports.TestableAgent = exports.ForestServerSandbox = exports.SchemaPathManager = exports.Agent = void 0;
|
|
21
|
+
exports.createForestServerSandbox = createForestServerSandbox;
|
|
22
|
+
exports.createAgentTestClient = createAgentTestClient;
|
|
23
|
+
exports.createTestableAgent = createTestableAgent;
|
|
24
|
+
const agent_1 = require("@forestadmin/agent");
|
|
25
|
+
const fs_1 = __importDefault(require("fs"));
|
|
26
|
+
const superagent_1 = __importDefault(require("superagent"));
|
|
27
|
+
const forest_admin_client_mock_1 = __importDefault(require("./forest-admin-client-mock"));
|
|
28
|
+
const forest_server_sandbox_1 = __importDefault(require("./forest-server-sandbox"));
|
|
29
|
+
exports.ForestServerSandbox = forest_server_sandbox_1.default;
|
|
30
|
+
const http_requester_mock_1 = require("./http-requester-mock");
|
|
31
|
+
const schema_converter_1 = __importDefault(require("./schema-converter"));
|
|
32
|
+
const schema_path_manager_1 = __importDefault(require("./schema-path-manager"));
|
|
33
|
+
exports.SchemaPathManager = schema_path_manager_1.default;
|
|
34
|
+
const testable_agent_1 = __importDefault(require("./testable-agent"));
|
|
35
|
+
exports.TestableAgent = testable_agent_1.default;
|
|
36
|
+
const testable_agent_base_1 = __importDefault(require("./testable-agent-base"));
|
|
37
|
+
var agent_2 = require("@forestadmin/agent");
|
|
38
|
+
Object.defineProperty(exports, "Agent", { enumerable: true, get: function () { return agent_2.Agent; } });
|
|
39
|
+
__exportStar(require("./types"), exports);
|
|
40
|
+
/**
|
|
41
|
+
* Create a forest server sandbox
|
|
42
|
+
* It is useful to test the agent if you use the createAgentTestClient way to test your agent
|
|
43
|
+
* @param port
|
|
44
|
+
*/
|
|
45
|
+
async function createForestServerSandbox(port) {
|
|
46
|
+
return new forest_server_sandbox_1.default(port).createServer();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Create a test client to test your agent customizations
|
|
50
|
+
* by sending requests to the agent like the frontend does.
|
|
51
|
+
* With this client, you should start your agent by yourself.
|
|
52
|
+
* You can test any agent with this client (python, ruby, nodeJs, etc.)
|
|
53
|
+
* @param options
|
|
54
|
+
*/
|
|
55
|
+
async function createAgentTestClient(options) {
|
|
56
|
+
const { serverUrl, agentUrl, agentSchemaPath } = options;
|
|
57
|
+
let schema;
|
|
58
|
+
try {
|
|
59
|
+
schema = JSON.parse(fs_1.default.readFileSync(agentSchemaPath, { encoding: 'utf-8' }));
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
throw new Error('Provide a right schema path');
|
|
63
|
+
}
|
|
64
|
+
// send the schema to the server to allow the server to build fake answers
|
|
65
|
+
await superagent_1.default
|
|
66
|
+
.post(`${serverUrl}/agent-schema`)
|
|
67
|
+
.set('forest-secret-key', options.agentForestEnvSecret)
|
|
68
|
+
.send(schema);
|
|
69
|
+
const httpRequester = (0, http_requester_mock_1.createHttpRequester)({
|
|
70
|
+
authSecret: options.agentForestAuthSecret,
|
|
71
|
+
url: agentUrl,
|
|
72
|
+
});
|
|
73
|
+
const overridePermissions = async (permissions) => {
|
|
74
|
+
await superagent_1.default
|
|
75
|
+
.post(`${serverUrl}/permission-override`)
|
|
76
|
+
.set('forest-secret-key', options.agentForestEnvSecret)
|
|
77
|
+
.send(permissions);
|
|
78
|
+
};
|
|
79
|
+
return new testable_agent_base_1.default({
|
|
80
|
+
actionEndpoints: schema_converter_1.default.extractActionEndpoints(schema),
|
|
81
|
+
httpRequester,
|
|
82
|
+
overridePermissions,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* @deprecated Use createAgentTestClient with createForestServerSandbox instead.
|
|
87
|
+
*
|
|
88
|
+
* Create a testable agent
|
|
89
|
+
* You can test your agentNodejs customizations by injecting your customizations.
|
|
90
|
+
* It will start the agent for you. You don't need to start the agent by yourself and a server.
|
|
91
|
+
*
|
|
92
|
+
* @param customizer
|
|
93
|
+
* @param options
|
|
94
|
+
*/
|
|
95
|
+
async function createTestableAgent(customizer, options) {
|
|
96
|
+
const agentOptions = {
|
|
97
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
98
|
+
logger: () => { },
|
|
99
|
+
schemaPath: schema_path_manager_1.default.generateTemporarySchemaPath(),
|
|
100
|
+
isProduction: false,
|
|
101
|
+
...(options || {}),
|
|
102
|
+
// 0 is a random port
|
|
103
|
+
port: options?.port || 0,
|
|
104
|
+
// Cast to any to avoid type mismatch when workspace has different forestadmin-client version
|
|
105
|
+
forestAdminClient: new forest_admin_client_mock_1.default(),
|
|
106
|
+
authSecret: options?.authSecret || 'b0bdf0a639c16bae8851dd24ee3d79ef0a352e957c5b86cb',
|
|
107
|
+
envSecret: options?.envSecret || 'ceba742f5bc73946b34da192816a4d7177b3233fee7769955c29c0e90fd584f2',
|
|
108
|
+
};
|
|
109
|
+
const agent = (0, agent_1.createAgent)(agentOptions);
|
|
110
|
+
if (!agent)
|
|
111
|
+
throw new Error('Agent is not defined');
|
|
112
|
+
customizer(agent);
|
|
113
|
+
return new testable_agent_1.default({ agent, agentOptions });
|
|
114
|
+
}
|
|
115
|
+
/** @deprecated Use createAgentTestClient instead */
|
|
116
|
+
exports.createForestAgentClient = createAgentTestClient;
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErQkEsOERBRUM7QUFTRCxzREF1Q0M7QUFZRCxrREF5QkM7QUFoSEQsOENBQWlEO0FBQ2pELDRDQUFvQjtBQUNwQiw0REFBb0M7QUFFcEMsMEZBQStEO0FBQy9ELG9GQUEwRDtBQVU5Qiw4QkFWckIsK0JBQW1CLENBVXFCO0FBVC9DLCtEQUE0RDtBQUM1RCwwRUFBaUQ7QUFDakQsZ0ZBQXNEO0FBTzdDLDRCQVBGLDZCQUFpQixDQU9FO0FBTjFCLHNFQUE2QztBQU1JLHdCQU4xQyx3QkFBYSxDQU0wQztBQUw5RCxnRkFBc0Q7QUFFdEQsNENBQXlEO0FBQWxDLDhGQUFBLEtBQUssT0FBQTtBQUM1QiwwQ0FBd0I7QUFPeEI7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxJQUFZO0lBQzFELE9BQU8sSUFBSSwrQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0ksS0FBSyxVQUFVLHFCQUFxQixDQUFDLE9BTTNDO0lBQ0MsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3pELElBQUksTUFBb0IsQ0FBQztJQUV6QixJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFFLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxNQUFNLG9CQUFVO1NBQ2IsSUFBSSxDQUFDLEdBQUcsU0FBUyxlQUFlLENBQUM7U0FDakMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztTQUN0RCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFaEIsTUFBTSxhQUFhLEdBQUcsSUFBQSx5Q0FBbUIsRUFBQztRQUN4QyxVQUFVLEVBQUUsT0FBTyxDQUFDLHFCQUFxQjtRQUN6QyxHQUFHLEVBQUUsUUFBUTtLQUNkLENBQUMsQ0FBQztJQUVILE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxFQUFFLFdBQWdDLEVBQUUsRUFBRTtRQUNyRSxNQUFNLG9CQUFVO2FBQ2IsSUFBSSxDQUFDLEdBQUcsU0FBUyxzQkFBc0IsQ0FBQzthQUN4QyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLG9CQUFvQixDQUFDO2FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUM7SUFFRixPQUFPLElBQUksNkJBQWlCLENBQUM7UUFDM0IsZUFBZSxFQUFFLDBCQUFlLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDO1FBQy9ELGFBQWE7UUFDYixtQkFBbUI7S0FDcEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNJLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsVUFBaUQsRUFDakQsT0FBOEI7SUFFOUIsTUFBTSxZQUFZLEdBQXlCO1FBQ3pDLGdFQUFnRTtRQUNoRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztRQUNoQixVQUFVLEVBQUUsNkJBQWlCLENBQUMsMkJBQTJCLEVBQUU7UUFDM0QsWUFBWSxFQUFFLEtBQUs7UUFDbkIsR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDbEIscUJBQXFCO1FBQ3JCLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDeEIsNkZBQTZGO1FBQzdGLGlCQUFpQixFQUFFLElBQUksa0NBQXFCLEVBQVM7UUFDckQsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLElBQUksa0RBQWtEO1FBQ3JGLFNBQVMsRUFDUCxPQUFPLEVBQUUsU0FBUyxJQUFJLGtFQUFrRTtLQUMzRixDQUFDO0lBRUYsTUFBTSxLQUFLLEdBQUcsSUFBQSxtQkFBVyxFQUFnQixZQUFZLENBQUMsQ0FBQztJQUN2RCxJQUFJLENBQUMsS0FBSztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUVwRCxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFbEIsT0FBTyxJQUFJLHdCQUFhLENBQWdCLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUVELG9EQUFvRDtBQUN2QyxRQUFBLHVCQUF1QixHQUFHLHFCQUFxQixDQUFDIn0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ActionEndpointsByCollection } from '@forestadmin/agent-client';
|
|
2
|
+
import type { ForestSchema } from '@forestadmin/forestadmin-client';
|
|
3
|
+
export default class SchemaConverter {
|
|
4
|
+
static extractActionEndpoints(schema: ForestSchema): ActionEndpointsByCollection;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=schema-converter.d.ts.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class SchemaConverter {
|
|
4
|
+
static extractActionEndpoints(schema) {
|
|
5
|
+
const actionEndpoints = {};
|
|
6
|
+
Object.values(schema.collections).forEach(c => {
|
|
7
|
+
actionEndpoints[c.name] = c.actions.reduce((acc, action) => ({
|
|
8
|
+
...acc,
|
|
9
|
+
[action.name]: { name: action.name, endpoint: action.endpoint },
|
|
10
|
+
}), {});
|
|
11
|
+
});
|
|
12
|
+
return actionEndpoints;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.default = SchemaConverter;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLWNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zY2hlbWEtY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsTUFBcUIsZUFBZTtJQUNsQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsTUFBb0I7UUFDaEQsTUFBTSxlQUFlLEdBQWdDLEVBQUUsQ0FBQztRQUN4RCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDeEMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQixHQUFHLEdBQUc7Z0JBQ04sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTthQUNoRSxDQUFDLEVBQ0YsRUFBRSxDQUNILENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7Q0FDRjtBQWZELGtDQWVDIn0=
|
|
@@ -22,4 +22,4 @@ class SchemaPathManager {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
exports.default = SchemaPathManager;
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLXBhdGgtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zY2hlbWEtcGF0aC1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkRBQTZCO0FBQzdCLDJCQUE0QjtBQUM1QixnREFBd0I7QUFFeEIsTUFBTSxzQkFBc0IsR0FBRyxtQ0FBbUMsQ0FBQztBQUNuRSxNQUFxQixpQkFBaUI7SUFDcEMsTUFBTSxDQUFDLDJCQUEyQjtRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUVuRCxPQUFPLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBQSxXQUFNLEdBQUUsRUFBRSxHQUFHLHNCQUFzQixJQUFJLE1BQU0sT0FBTyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsVUFBa0I7UUFDdkQsSUFBSSxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hELE1BQU0sa0JBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFTyxNQUFNLENBQUMscUJBQXFCLENBQUMsVUFBa0I7UUFDckQsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDckQsQ0FBQztDQUNGO0FBaEJELG9DQWdCQyJ9
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { TSchema } from '@forestadmin/datasource-customizer';
|
|
2
|
+
import { RemoteAgentClient } from '@forestadmin/agent-client';
|
|
2
3
|
import Benchmark from './benchmark';
|
|
3
|
-
|
|
4
|
-
export default class TestableAgentBase<TypingsSchema extends TSchema = TSchema> extends RemoteControlAgent<TypingsSchema> {
|
|
4
|
+
export default class TestableAgentBase<TypingsSchema extends TSchema = TSchema> extends RemoteAgentClient<TypingsSchema> {
|
|
5
5
|
benchmark(): Benchmark;
|
|
6
6
|
}
|
|
7
7
|
//# sourceMappingURL=testable-agent-base.d.ts.map
|
|
@@ -3,12 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const agent_client_1 = require("@forestadmin/agent-client");
|
|
6
7
|
const benchmark_1 = __importDefault(require("./benchmark"));
|
|
7
|
-
|
|
8
|
-
class TestableAgentBase extends remote_agent_client_1.default {
|
|
8
|
+
class TestableAgentBase extends agent_client_1.RemoteAgentClient {
|
|
9
9
|
benchmark() {
|
|
10
10
|
return new benchmark_1.default();
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
exports.default = TestableAgentBase;
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGFibGUtYWdlbnQtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90ZXN0YWJsZS1hZ2VudC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsNERBQThEO0FBRTlELDREQUFvQztBQUVwQyxNQUFxQixpQkFFbkIsU0FBUSxnQ0FBZ0M7SUFDeEMsU0FBUztRQUNQLE9BQU8sSUFBSSxtQkFBUyxFQUFFLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBTkQsb0NBTUMifQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import type { TestableAgentOptions } from './index';
|
|
1
2
|
import type { Agent } from '@forestadmin/agent';
|
|
2
3
|
import type { TSchema } from '@forestadmin/datasource-customizer';
|
|
3
|
-
import { TestableAgentOptions } from './index';
|
|
4
4
|
import TestableAgentBase from './testable-agent-base';
|
|
5
5
|
export default class TestableAgent<TypingsSchema extends TSchema = TSchema> extends TestableAgentBase<TypingsSchema> {
|
|
6
6
|
private readonly agent;
|
|
@@ -26,8 +26,8 @@ class TestableAgent extends testable_agent_base_1.default {
|
|
|
26
26
|
this.httpRequester = (0, http_requester_mock_1.createHttpRequester)({
|
|
27
27
|
url: `http://localhost:${this.agent.standaloneServerPort}`,
|
|
28
28
|
authSecret: this.agentOptions.authSecret,
|
|
29
|
-
}
|
|
29
|
+
});
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
exports.default = TestableAgent;
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGFibGUtYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGVzdGFibGUtYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFJQSwyREFBNkI7QUFFN0IsK0RBQTREO0FBQzVELG1DQUE0QztBQUM1QywwRUFBaUQ7QUFDakQsZ0ZBQXNEO0FBRXRELE1BQXFCLGFBRW5CLFNBQVEsNkJBQWdDO0lBSXhDLFlBQVksRUFDVixLQUFLLEVBQ0wsWUFBWSxHQUliO1FBQ0MsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEIsTUFBTSx5QkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5RSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxlQUFlLEdBQUcsMEJBQWUsQ0FBQyxzQkFBc0IsQ0FDM0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLGtCQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQ3BFLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUEseUNBQW1CLEVBQUM7WUFDdkMsR0FBRyxFQUFFLG9CQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFO1lBQzFELFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVU7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbkNELGdDQW1DQyJ9
|
package/dist/types.d.ts
ADDED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forestadmin/agent-testing",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Testing utilities for Forest Admin agent",
|
|
5
5
|
"author": "Vincent Molinié <vincent.m@forestadmin.com>",
|
|
6
6
|
"homepage": "https://github.com/ForestAdmin/agent-nodejs#readme",
|
|
@@ -26,16 +26,16 @@
|
|
|
26
26
|
"test": "jest"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@forestadmin/agent-client": "1.4.
|
|
29
|
+
"@forestadmin/agent-client": "1.4.1",
|
|
30
30
|
"@forestadmin/datasource-customizer": "1.67.2",
|
|
31
31
|
"@forestadmin/datasource-toolkit": "1.50.1",
|
|
32
|
-
"@forestadmin/forestadmin-client": "1.37.
|
|
32
|
+
"@forestadmin/forestadmin-client": "1.37.5",
|
|
33
33
|
"jsonapi-serializer": "^3.6.9",
|
|
34
34
|
"jsonwebtoken": "^9.0.0",
|
|
35
35
|
"superagent": "^10.2.3"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
|
-
"@forestadmin/agent": "
|
|
38
|
+
"@forestadmin/agent": "1.71.0"
|
|
39
39
|
},
|
|
40
40
|
"peerDependenciesMeta": {
|
|
41
41
|
"@forestadmin/agent": {
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
}
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@forestadmin/agent": "1.
|
|
46
|
+
"@forestadmin/agent": "1.71.0",
|
|
47
47
|
"@forestadmin/datasource-sql": "1.17.2",
|
|
48
48
|
"@types/jsonwebtoken": "^9.0.1",
|
|
49
49
|
"@types/superagent": "^8.1.9",
|