@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.
Files changed (116) hide show
  1. package/dist/benchmark.js +36 -0
  2. package/dist/{integrations/forest-admin-client-mock.d.ts → forest-admin-client-mock.d.ts} +2 -0
  3. package/dist/forest-admin-client-mock.js +83 -0
  4. package/dist/forest-server-sandbox.js +153 -0
  5. package/dist/http-requester-mock.d.ts +7 -0
  6. package/dist/{integrations/http-requester-mock.js → http-requester-mock.js} +4 -4
  7. package/dist/index.d.ts +46 -3
  8. package/dist/index.js +101 -4
  9. package/dist/schema-converter.d.ts +6 -0
  10. package/dist/schema-converter.js +16 -0
  11. package/dist/{integrations/schema-path-manager.js → schema-path-manager.js} +1 -1
  12. package/dist/{integrations/testable-agent-base.d.ts → testable-agent-base.d.ts} +2 -2
  13. package/dist/{integrations/testable-agent-base.js → testable-agent-base.js} +3 -3
  14. package/dist/{integrations/testable-agent.d.ts → testable-agent.d.ts} +1 -1
  15. package/dist/{integrations/testable-agent.js → testable-agent.js} +2 -2
  16. package/dist/types.d.ts +5 -0
  17. package/dist/{units/types.js → types.js} +1 -1
  18. package/package.json +2 -2
  19. package/dist/integrations/benchmark.js +0 -36
  20. package/dist/integrations/forest-admin-client-mock.js +0 -76
  21. package/dist/integrations/forest-server-sandbox.js +0 -153
  22. package/dist/integrations/http-requester-mock.d.ts +0 -8
  23. package/dist/integrations/index.d.ts +0 -43
  24. package/dist/integrations/index.js +0 -119
  25. package/dist/integrations/schema-converter.d.ts +0 -6
  26. package/dist/integrations/schema-converter.js +0 -16
  27. package/dist/integrations/types.d.ts +0 -5
  28. package/dist/integrations/types.js +0 -3
  29. package/dist/remote-agent-client/action-fields/action-field-checkbox-group.d.ts +0 -8
  30. package/dist/remote-agent-client/action-fields/action-field-checkbox-group.js +0 -23
  31. package/dist/remote-agent-client/action-fields/action-field-checkbox.d.ts +0 -6
  32. package/dist/remote-agent-client/action-fields/action-field-checkbox.js +0 -16
  33. package/dist/remote-agent-client/action-fields/action-field-color-picker.d.ts +0 -7
  34. package/dist/remote-agent-client/action-fields/action-field-color-picker.js +0 -19
  35. package/dist/remote-agent-client/action-fields/action-field-date.d.ts +0 -5
  36. package/dist/remote-agent-client/action-fields/action-field-date.js +0 -13
  37. package/dist/remote-agent-client/action-fields/action-field-dropdown.d.ts +0 -7
  38. package/dist/remote-agent-client/action-fields/action-field-dropdown.js +0 -16
  39. package/dist/remote-agent-client/action-fields/action-field-enum.d.ts +0 -6
  40. package/dist/remote-agent-client/action-fields/action-field-enum.js +0 -19
  41. package/dist/remote-agent-client/action-fields/action-field-json.d.ts +0 -5
  42. package/dist/remote-agent-client/action-fields/action-field-json.js +0 -13
  43. package/dist/remote-agent-client/action-fields/action-field-multiple-choice.d.ts +0 -7
  44. package/dist/remote-agent-client/action-fields/action-field-multiple-choice.js +0 -19
  45. package/dist/remote-agent-client/action-fields/action-field-number-list.d.ts +0 -6
  46. package/dist/remote-agent-client/action-fields/action-field-number-list.js +0 -20
  47. package/dist/remote-agent-client/action-fields/action-field-number.d.ts +0 -5
  48. package/dist/remote-agent-client/action-fields/action-field-number.js +0 -13
  49. package/dist/remote-agent-client/action-fields/action-field-radio-group.d.ts +0 -7
  50. package/dist/remote-agent-client/action-fields/action-field-radio-group.js +0 -16
  51. package/dist/remote-agent-client/action-fields/action-field-string-list.d.ts +0 -6
  52. package/dist/remote-agent-client/action-fields/action-field-string-list.js +0 -20
  53. package/dist/remote-agent-client/action-fields/action-field-string.d.ts +0 -5
  54. package/dist/remote-agent-client/action-fields/action-field-string.js +0 -13
  55. package/dist/remote-agent-client/action-fields/action-field.d.ts +0 -15
  56. package/dist/remote-agent-client/action-fields/action-field.js +0 -34
  57. package/dist/remote-agent-client/action-fields/field-form-states.d.ts +0 -25
  58. package/dist/remote-agent-client/action-fields/field-form-states.js +0 -94
  59. package/dist/remote-agent-client/action-fields/field-getter.d.ts +0 -10
  60. package/dist/remote-agent-client/action-fields/field-getter.js +0 -21
  61. package/dist/remote-agent-client/action-fields/types.d.ts +0 -28
  62. package/dist/remote-agent-client/action-fields/types.js +0 -3
  63. package/dist/remote-agent-client/action-layout/action-layout-container.d.ts +0 -9
  64. package/dist/remote-agent-client/action-layout/action-layout-container.js +0 -24
  65. package/dist/remote-agent-client/action-layout/action-layout-element.d.ts +0 -14
  66. package/dist/remote-agent-client/action-layout/action-layout-element.js +0 -47
  67. package/dist/remote-agent-client/action-layout/action-layout-input.d.ts +0 -7
  68. package/dist/remote-agent-client/action-layout/action-layout-input.js +0 -12
  69. package/dist/remote-agent-client/action-layout/action-layout-page.d.ts +0 -8
  70. package/dist/remote-agent-client/action-layout/action-layout-page.js +0 -18
  71. package/dist/remote-agent-client/action-layout/action-layout-root.d.ts +0 -6
  72. package/dist/remote-agent-client/action-layout/action-layout-root.js +0 -19
  73. package/dist/remote-agent-client/action-layout/errors.d.ts +0 -8
  74. package/dist/remote-agent-client/action-layout/errors.js +0 -16
  75. package/dist/remote-agent-client/domains/action.d.ts +0 -59
  76. package/dist/remote-agent-client/domains/action.js +0 -139
  77. package/dist/remote-agent-client/domains/chart.d.ts +0 -21
  78. package/dist/remote-agent-client/domains/chart.js +0 -39
  79. package/dist/remote-agent-client/domains/collection-chart.d.ts +0 -19
  80. package/dist/remote-agent-client/domains/collection-chart.js +0 -40
  81. package/dist/remote-agent-client/domains/collection.d.ts +0 -26
  82. package/dist/remote-agent-client/domains/collection.js +0 -109
  83. package/dist/remote-agent-client/domains/relation.d.ts +0 -11
  84. package/dist/remote-agent-client/domains/relation.js +0 -23
  85. package/dist/remote-agent-client/domains/remote-agent-client.d.ts +0 -41
  86. package/dist/remote-agent-client/domains/remote-agent-client.js +0 -43
  87. package/dist/remote-agent-client/domains/segment.d.ts +0 -14
  88. package/dist/remote-agent-client/domains/segment.js +0 -46
  89. package/dist/remote-agent-client/http-requester.d.ts +0 -30
  90. package/dist/remote-agent-client/http-requester.js +0 -67
  91. package/dist/remote-agent-client/index.d.ts +0 -10
  92. package/dist/remote-agent-client/index.js +0 -18
  93. package/dist/remote-agent-client/query-serializer.d.ts +0 -7
  94. package/dist/remote-agent-client/query-serializer.js +0 -34
  95. package/dist/remote-agent-client/types.d.ts +0 -25
  96. package/dist/remote-agent-client/types.js +0 -3
  97. package/dist/units/add-action.d.ts +0 -16
  98. package/dist/units/add-action.js +0 -70
  99. package/dist/units/add-field.d.ts +0 -3
  100. package/dist/units/add-field.js +0 -18
  101. package/dist/units/add-hook.d.ts +0 -3
  102. package/dist/units/add-hook.js +0 -18
  103. package/dist/units/import-field.d.ts +0 -3
  104. package/dist/units/import-field.js +0 -18
  105. package/dist/units/index.d.ts +0 -9
  106. package/dist/units/index.js +0 -25
  107. package/dist/units/many-to-one-relation.d.ts +0 -3
  108. package/dist/units/many-to-one-relation.js +0 -18
  109. package/dist/units/replace-search.d.ts +0 -3
  110. package/dist/units/replace-search.js +0 -18
  111. package/dist/units/types.d.ts +0 -34
  112. package/dist/units/use-plugin.d.ts +0 -3
  113. package/dist/units/use-plugin.js +0 -18
  114. /package/dist/{integrations/benchmark.d.ts → benchmark.d.ts} +0 -0
  115. /package/dist/{integrations/forest-server-sandbox.d.ts → forest-server-sandbox.d.ts} +0 -0
  116. /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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZXN0LXNlcnZlci1zYW5kYm94LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZvcmVzdC1zZXJ2ZXItc2FuZGJveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVlBLDBEQUE2QjtBQUU3Qix5RUFBMEQ7QUFFMUQsTUFBcUIsbUJBQW1CO0lBV3RDLFlBQVksSUFBWTtRQVJ4QixnR0FBZ0c7UUFDL0UscUJBQWdCLEdBQThCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFekUsNkRBQTZEO1FBQzVDLDZCQUF3QixHQUFxQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBS3RGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWTtRQUNoQixNQUFNLE1BQU0sR0FBRyxtQkFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzVELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNoRCxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksR0FBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUF1QixDQUFDLElBQUksQ0FBQztRQUV2RSxzQ0FBc0M7UUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFFckQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2xDLElBQUksS0FBSztvQkFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7O29CQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxNQUFNLENBQUMsR0FBeUIsRUFBRSxHQUF3QjtRQUNoRSxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQVcsQ0FBQztRQUU5RSxNQUFNLFlBQVksR0FBRyxDQUFDLFVBQWtCLEVBQUUsSUFBYSxFQUFFLEVBQUU7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDckIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN2QixHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbkQsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQztZQUNILFFBQVEsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUM7b0JBQ3JCLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRTt3QkFDckIsSUFBSSxJQUFJLEtBQUssQ0FBQztvQkFDaEIsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO3dCQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDeEUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNwQixDQUFDLENBQUMsQ0FBQztvQkFDSCxNQUFNO2dCQUNSLENBQUM7Z0JBRUQsS0FBSyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7b0JBQzVCLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRTt3QkFDckIsSUFBSSxJQUFJLEtBQUssQ0FBQztvQkFDaEIsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO3dCQUNqQixJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDaEYsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNwQixDQUFDLENBQUMsQ0FBQztvQkFDSCxNQUFNO2dCQUNSLENBQUM7Z0JBRUQsS0FBSywrQkFBK0I7b0JBQ2xDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbEIsTUFBTTtnQkFFUixLQUFLLDhCQUE4QjtvQkFDakMsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3BGLE1BQU07Z0JBRVIsS0FBSyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pDLElBQUksQ0FBQzt3QkFDSCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMscURBQXFELENBQzlFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsRUFDckQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUM5RCxDQUFDO3dCQUVGLFlBQVksQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7b0JBQ25DLENBQUM7b0JBQUMsTUFBTSxDQUFDO3dCQUNQLFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDO29CQUM5RCxDQUFDO29CQUVELE1BQU07Z0JBQ1IsQ0FBQztnQkFFRCxLQUFLLDZCQUE2QjtvQkFDaEMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVDQUFZLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxNQUFNO2dCQUVSLEtBQUssMkJBQTJCO29CQUM5QixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7b0JBQ3pDLE1BQU07Z0JBRVI7b0JBQ0UsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxtQ0FBbUMsQ0FBQyxFQUFFLENBQUM7d0JBQzdELFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzlELENBQUM7eUJBQU0sQ0FBQzt3QkFDTixZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQzVDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hELFlBQVksQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7SUFDSCxDQUFDO0lBRU8scURBQXFELENBQzNELE1BQW9CLEVBQ3BCLG1CQUF5QztRQUV6QyxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFFdkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDdEMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7WUFFN0IsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2xDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQ2xFLG1CQUFtQixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQ3JFLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUVILFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUc7Z0JBQzdCLFVBQVUsRUFBRSxJQUFJLENBQUMsNEJBQTRCLENBQzNDLG1CQUFtQixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQ3pEO2dCQUNELE9BQU8sRUFBRSxpQkFBaUI7YUFDM0IsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyw0QkFBNEIsQ0FDbEMsUUFBdUM7UUFFdkMsT0FBTztZQUNMLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BFLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BFLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2hFLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzlELFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ2pFLENBQUM7SUFDSixDQUFDO0lBRU8sOEJBQThCLENBQ3BDLFFBQXdDO1FBRXhDLE9BQU87WUFDTCxnQkFBZ0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDekUsbUJBQW1CLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2hGLG1CQUFtQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLG1CQUFtQixLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoRixjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsY0FBYyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN0RSxpQkFBaUIsRUFBRSxRQUFRLENBQUMsaUJBQWlCO2dCQUMzQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUNyRCxDQUFDLENBQUMsRUFBRTtZQUNOLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxzQkFBc0I7Z0JBQ3JELENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQzFELENBQUMsQ0FBQyxFQUFFO1lBQ04sMEJBQTBCLEVBQUUsUUFBUSxDQUFDLDBCQUEwQjtnQkFDN0QsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztnQkFDOUQsQ0FBQyxDQUFDLEVBQUU7U0FDUCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBeExELHNDQXdMQyJ9
@@ -0,0 +1,7 @@
1
+ import { HttpRequester } from '@forestadmin/agent-client';
2
+ export declare function createHttpRequester(options: {
3
+ url: string;
4
+ authSecret: string;
5
+ prefix?: string;
6
+ }): HttpRequester;
7
+ //# sourceMappingURL=http-requester-mock.d.ts.map
@@ -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, agentOptions) {
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 http_requester_1.default(token, options, agentOptions);
13
+ return new agent_client_1.HttpRequester(token, options);
14
14
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1yZXF1ZXN0ZXItbW9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlZ3JhdGlvbnMvaHR0cC1yZXF1ZXN0ZXItbW9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQU9BLGtEQVdDO0FBbEJELGdFQUF3QztBQUV4Qyx5RUFBMEQ7QUFFMUQsMkZBQWtFO0FBRWxFLHdEQUF3RDtBQUN4RCxTQUFnQixtQkFBbUIsQ0FDakMsT0FJQyxFQUNELFlBQWtDO0lBRWxDLE1BQU0sS0FBSyxHQUFHLHNCQUFZLENBQUMsSUFBSSxDQUFDLHVDQUFZLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRTVGLE9BQU8sSUFBSSx3QkFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDekQsQ0FBQyJ9
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1yZXF1ZXN0ZXItbW9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9odHRwLXJlcXVlc3Rlci1tb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBTUEsa0RBUUM7QUFkRCw0REFBMEQ7QUFDMUQsZ0VBQXdDO0FBRXhDLHlFQUEwRDtBQUUxRCx3REFBd0Q7QUFDeEQsU0FBZ0IsbUJBQW1CLENBQUMsT0FJbkM7SUFDQyxNQUFNLEtBQUssR0FBRyxzQkFBWSxDQUFDLElBQUksQ0FBQyx1Q0FBWSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUU1RixPQUFPLElBQUksNEJBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0MsQ0FBQyJ9
package/dist/index.d.ts CHANGED
@@ -1,4 +1,47 @@
1
- export * from './integrations';
2
- export * from './units';
3
- export * from './remote-agent-client';
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
- __exportStar(require("./integrations"), exports);
18
- __exportStar(require("./units"), exports);
19
- __exportStar(require("./remote-agent-client"), exports);
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUErQjtBQUMvQiwwQ0FBd0I7QUFDeEIsd0RBQXNDIn0=
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLXBhdGgtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlZ3JhdGlvbnMvc2NoZW1hLXBhdGgtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJEQUE2QjtBQUM3QiwyQkFBNEI7QUFDNUIsZ0RBQXdCO0FBRXhCLE1BQU0sc0JBQXNCLEdBQUcsbUNBQW1DLENBQUM7QUFDbkUsTUFBcUIsaUJBQWlCO0lBQ3BDLE1BQU0sQ0FBQywyQkFBMkI7UUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFFbkQsT0FBTyxjQUFJLENBQUMsSUFBSSxDQUFDLElBQUEsV0FBTSxHQUFFLEVBQUUsR0FBRyxzQkFBc0IsSUFBSSxNQUFNLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLFVBQWtCO1FBQ3ZELElBQUksaUJBQWlCLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN4RCxNQUFNLGtCQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFDLHFCQUFxQixDQUFDLFVBQWtCO1FBQ3JELE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3JELENBQUM7Q0FDRjtBQWhCRCxvQ0FnQkMifQ==
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
- import RemoteControlAgent from '../remote-agent-client/domains/remote-agent-client';
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
- const remote_agent_client_1 = __importDefault(require("../remote-agent-client/domains/remote-agent-client"));
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGFibGUtYWdlbnQtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlZ3JhdGlvbnMvdGVzdGFibGUtYWdlbnQtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLDREQUFvQztBQUNwQyw2R0FBb0Y7QUFFcEYsTUFBcUIsaUJBRW5CLFNBQVEsNkJBQWlDO0lBQ3pDLFNBQVM7UUFDUCxPQUFPLElBQUksbUJBQVMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7Q0FDRjtBQU5ELG9DQU1DIn0=
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
- }, this.agentOptions);
29
+ });
30
30
  }
31
31
  }
32
32
  exports.default = TestableAgent;
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGFibGUtYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZWdyYXRpb25zL3Rlc3RhYmxlLWFnZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0EsMkRBQTZCO0FBRTdCLCtEQUE0RDtBQUM1RCxtQ0FBa0U7QUFDbEUsMEVBQWlEO0FBQ2pELGdGQUFzRDtBQUV0RCxNQUFxQixhQUVuQixTQUFRLDZCQUFnQztJQUl4QyxZQUFZLEVBQ1YsS0FBSyxFQUNMLFlBQVksR0FJYjtRQUNDLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDbkMsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRXhCLE1BQU0seUJBQWlCLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsZUFBZSxHQUFHLDBCQUFlLENBQUMsc0JBQXNCLENBQzNELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxrQkFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUNwRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFBLHlDQUFtQixFQUN0QztZQUNFLEdBQUcsRUFBRSxvQkFBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRTtZQUMxRCxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVO1NBQ3pDLEVBQ0QsSUFBSSxDQUFDLFlBQVksQ0FDbEIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXRDRCxnQ0FzQ0MifQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGFibGUtYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGVzdGFibGUtYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFJQSwyREFBNkI7QUFFN0IsK0RBQTREO0FBQzVELG1DQUE0QztBQUM1QywwRUFBaUQ7QUFDakQsZ0ZBQXNEO0FBRXRELE1BQXFCLGFBRW5CLFNBQVEsNkJBQWdDO0lBSXhDLFlBQVksRUFDVixLQUFLLEVBQ0wsWUFBWSxHQUliO1FBQ0MsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEIsTUFBTSx5QkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5RSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxlQUFlLEdBQUcsMEJBQWUsQ0FBQyxzQkFBc0IsQ0FDM0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLGtCQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQ3BFLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUEseUNBQW1CLEVBQUM7WUFDdkMsR0FBRyxFQUFFLG9CQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFO1lBQzFELFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVU7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBbkNELGdDQW1DQyJ9
@@ -0,0 +1,5 @@
1
+ import type { AgentOptions } from '@forestadmin/agent';
2
+ export type TestableAgentOptions = AgentOptions & {
3
+ port?: number;
4
+ };
5
+ //# sourceMappingURL=types.d.ts.map
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdW5pdHMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
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.0",
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": ">=1.0.0"
38
+ "@forestadmin/agent": "1.70.10"
39
39
  },
40
40
  "peerDependenciesMeta": {
41
41
  "@forestadmin/agent": {