@forestadmin/agent-testing 0.1.0 → 1.0.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/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 +2 -2
- 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": "
|
|
3
|
+
"version": "1.0.0",
|
|
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",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"superagent": "^10.2.3"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
|
-
"@forestadmin/agent": "
|
|
38
|
+
"@forestadmin/agent": "1.70.10"
|
|
39
39
|
},
|
|
40
40
|
"peerDependenciesMeta": {
|
|
41
41
|
"@forestadmin/agent": {
|