@forestadmin/mcp-server 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.
@@ -1,239 +0,0 @@
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 activity_logs_creator_1 = __importDefault(require("./activity-logs-creator"));
7
- describe('createActivityLog', () => {
8
- const originalFetch = global.fetch;
9
- let mockFetch;
10
- beforeEach(() => {
11
- mockFetch = jest.fn().mockResolvedValue({
12
- ok: true,
13
- json: () => Promise.resolve({}),
14
- });
15
- global.fetch = mockFetch;
16
- });
17
- afterAll(() => {
18
- global.fetch = originalFetch;
19
- });
20
- const createMockRequest = (overrides = {}) => ({
21
- authInfo: {
22
- extra: {
23
- forestServerToken: 'test-forest-token',
24
- renderingId: '12345',
25
- ...overrides,
26
- },
27
- },
28
- });
29
- describe('action type mapping', () => {
30
- it.each([
31
- ['index', 'read'],
32
- ['search', 'read'],
33
- ['filter', 'read'],
34
- ['listHasMany', 'read'],
35
- ['actionForm', 'read'],
36
- ['availableActions', 'read'],
37
- ['availableCollections', 'read'],
38
- ['action', 'write'],
39
- ['create', 'write'],
40
- ['update', 'write'],
41
- ['delete', 'write'],
42
- ])('should map action "%s" to type "%s"', async (action, expectedType) => {
43
- const request = createMockRequest();
44
- await (0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, action);
45
- expect(mockFetch).toHaveBeenCalledWith('https://api.forestadmin.com/api/activity-logs-requests', expect.objectContaining({
46
- body: expect.stringContaining(`"type":"${expectedType}"`),
47
- }));
48
- });
49
- it('should throw error for unknown action type', async () => {
50
- const request = createMockRequest();
51
- await expect((0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, 'unknownAction')).rejects.toThrow('Unknown action type: unknownAction');
52
- });
53
- });
54
- describe('request formatting', () => {
55
- it('should send correct headers with forestServerToken from authInfo.extra', async () => {
56
- const request = createMockRequest();
57
- await (0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, 'index');
58
- expect(mockFetch).toHaveBeenCalledWith('https://api.forestadmin.com/api/activity-logs-requests', expect.objectContaining({
59
- method: 'POST',
60
- headers: {
61
- 'Content-Type': 'application/json',
62
- 'Forest-Application-Source': 'MCP',
63
- Authorization: 'Bearer test-forest-token',
64
- },
65
- }));
66
- });
67
- it('should use forestServerToken for Authorization header (not the MCP token)', async () => {
68
- // This test documents that the activity log API requires the original Forest server token,
69
- // not the MCP-generated JWT token. The forestServerToken must be passed through
70
- // authInfo.extra from the OAuth provider's verifyAccessToken method.
71
- const request = {
72
- authInfo: {
73
- token: 'mcp-jwt-token-should-not-be-used',
74
- extra: {
75
- forestServerToken: 'original-forest-server-token',
76
- renderingId: '12345',
77
- },
78
- },
79
- };
80
- await (0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, 'index');
81
- expect(mockFetch).toHaveBeenCalledWith('https://api.forestadmin.com/api/activity-logs-requests', expect.objectContaining({
82
- headers: expect.objectContaining({
83
- Authorization: 'Bearer original-forest-server-token',
84
- }),
85
- }));
86
- });
87
- it('should send undefined token when forestServerToken is missing from extra', async () => {
88
- // This test documents the error case: if forestServerToken is not passed in extra,
89
- // the Authorization header will be "Bearer undefined" which will fail
90
- const request = {
91
- authInfo: {
92
- token: 'mcp-jwt-token',
93
- extra: {
94
- renderingId: '12345',
95
- // forestServerToken is missing!
96
- },
97
- },
98
- };
99
- await (0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, 'index');
100
- expect(mockFetch).toHaveBeenCalledWith('https://api.forestadmin.com/api/activity-logs-requests', expect.objectContaining({
101
- headers: expect.objectContaining({
102
- Authorization: 'Bearer undefined',
103
- }),
104
- }));
105
- });
106
- it('should include collection name in relationships when provided', async () => {
107
- const request = createMockRequest();
108
- await (0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, 'index', {
109
- collectionName: 'users',
110
- });
111
- const callBody = JSON.parse(mockFetch.mock.calls[0][1].body);
112
- expect(callBody.data.relationships.collection.data).toEqual({
113
- id: 'users',
114
- type: 'collections',
115
- });
116
- });
117
- it('should set collection data to null when collectionName is not provided', async () => {
118
- const request = createMockRequest();
119
- await (0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, 'index');
120
- const callBody = JSON.parse(mockFetch.mock.calls[0][1].body);
121
- expect(callBody.data.relationships.collection.data).toBeNull();
122
- });
123
- it('should include rendering relationship', async () => {
124
- const request = createMockRequest();
125
- await (0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, 'index');
126
- const callBody = JSON.parse(mockFetch.mock.calls[0][1].body);
127
- expect(callBody.data.relationships.rendering.data).toEqual({
128
- id: '12345',
129
- type: 'renderings',
130
- });
131
- });
132
- it('should include label in attributes when provided', async () => {
133
- const request = createMockRequest();
134
- await (0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, 'action', {
135
- label: 'Custom Action Label',
136
- });
137
- const callBody = JSON.parse(mockFetch.mock.calls[0][1].body);
138
- expect(callBody.data.attributes.label).toBe('Custom Action Label');
139
- });
140
- it('should include single recordId in records array', async () => {
141
- const request = createMockRequest();
142
- await (0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, 'update', {
143
- recordId: 42,
144
- });
145
- const callBody = JSON.parse(mockFetch.mock.calls[0][1].body);
146
- expect(callBody.data.attributes.records).toEqual([42]);
147
- });
148
- it('should include multiple recordIds in records array', async () => {
149
- const request = createMockRequest();
150
- await (0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, 'delete', {
151
- recordIds: [1, 2, 3],
152
- });
153
- const callBody = JSON.parse(mockFetch.mock.calls[0][1].body);
154
- expect(callBody.data.attributes.records).toEqual([1, 2, 3]);
155
- });
156
- it('should prefer recordIds over recordId when both provided', async () => {
157
- const request = createMockRequest();
158
- await (0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, 'delete', {
159
- recordId: 99,
160
- recordIds: [1, 2, 3],
161
- });
162
- const callBody = JSON.parse(mockFetch.mock.calls[0][1].body);
163
- expect(callBody.data.attributes.records).toEqual([1, 2, 3]);
164
- });
165
- it('should send empty records array when no recordId or recordIds provided', async () => {
166
- const request = createMockRequest();
167
- await (0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, 'index');
168
- const callBody = JSON.parse(mockFetch.mock.calls[0][1].body);
169
- expect(callBody.data.attributes.records).toEqual([]);
170
- });
171
- it('should include action name in attributes', async () => {
172
- const request = createMockRequest();
173
- await (0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, 'search');
174
- const callBody = JSON.parse(mockFetch.mock.calls[0][1].body);
175
- expect(callBody.data.attributes.action).toBe('search');
176
- });
177
- it('should use correct data structure', async () => {
178
- const request = createMockRequest();
179
- await (0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, 'index', {
180
- collectionName: 'products',
181
- recordId: 1,
182
- label: 'View Product',
183
- });
184
- const callBody = JSON.parse(mockFetch.mock.calls[0][1].body);
185
- expect(callBody).toEqual({
186
- data: {
187
- id: 1,
188
- type: 'activity-logs-requests',
189
- attributes: {
190
- type: 'read',
191
- action: 'index',
192
- label: 'View Product',
193
- records: [1],
194
- },
195
- relationships: {
196
- rendering: {
197
- data: {
198
- id: '12345',
199
- type: 'renderings',
200
- },
201
- },
202
- collection: {
203
- data: {
204
- id: 'products',
205
- type: 'collections',
206
- },
207
- },
208
- },
209
- },
210
- });
211
- });
212
- });
213
- describe('error handling', () => {
214
- it('should throw error when response is not ok', async () => {
215
- mockFetch.mockResolvedValue({
216
- ok: false,
217
- text: () => Promise.resolve('Server error message'),
218
- });
219
- const request = createMockRequest();
220
- await expect((0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, 'index')).rejects.toThrow('Failed to create activity log: Server error message');
221
- });
222
- it('should not throw when response is ok', async () => {
223
- mockFetch.mockResolvedValue({
224
- ok: true,
225
- json: () => Promise.resolve({ success: true }),
226
- });
227
- const request = createMockRequest();
228
- await expect((0, activity_logs_creator_1.default)('https://api.forestadmin.com', request, 'index')).resolves.not.toThrow();
229
- });
230
- });
231
- describe('URL construction', () => {
232
- it('should append /api/activity-logs-requests to forest server URL', async () => {
233
- const request = createMockRequest();
234
- await (0, activity_logs_creator_1.default)('https://custom.forestadmin.com', request, 'index');
235
- expect(mockFetch).toHaveBeenCalledWith('https://custom.forestadmin.com/api/activity-logs-requests', expect.any(Object));
236
- });
237
- });
238
- });
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktbG9ncy1jcmVhdG9yLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvYWN0aXZpdHktbG9ncy1jcmVhdG9yLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSxvRkFBd0Q7QUFFeEQsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtJQUNqQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ25DLElBQUksU0FBb0IsQ0FBQztJQUV6QixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztZQUN0QyxFQUFFLEVBQUUsSUFBSTtZQUNSLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUNoQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztJQUMzQixDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDWixNQUFNLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQztJQUMvQixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FDM0MsQ0FBQztRQUNDLFFBQVEsRUFBRTtZQUNSLEtBQUssRUFBRTtnQkFDTCxpQkFBaUIsRUFBRSxtQkFBbUI7Z0JBQ3RDLFdBQVcsRUFBRSxPQUFPO2dCQUNwQixHQUFHLFNBQVM7YUFDYjtTQUNGO0tBQ29FLENBQUEsQ0FBQztJQUUxRSxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO1FBQ25DLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDTixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7WUFDakIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQ2xCLENBQUMs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
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=agent-caller.test.d.ts.map
@@ -1,102 +0,0 @@
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 agent_caller_1 = __importDefault(require("./agent-caller"));
7
- describe('buildClient', () => {
8
- it('should create a remote agent client with the token from authInfo', () => {
9
- const request = {
10
- authInfo: {
11
- token: 'test-auth-token',
12
- extra: {
13
- userId: 123,
14
- renderingId: 456,
15
- environmentId: 789,
16
- projectId: 101,
17
- environmentApiEndpoint: 'http://localhost:3310',
18
- },
19
- },
20
- };
21
- const result = (0, agent_caller_1.default)(request);
22
- expect(result.rpcClient).toBeDefined();
23
- expect(typeof result.rpcClient.collection).toBe('function');
24
- });
25
- it('should return authData from request.authInfo.extra', () => {
26
- const request = {
27
- authInfo: {
28
- token: 'test-token',
29
- extra: {
30
- userId: 999,
31
- renderingId: 888,
32
- environmentId: 777,
33
- projectId: 666,
34
- environmentApiEndpoint: 'http://localhost:3310',
35
- },
36
- },
37
- };
38
- const result = (0, agent_caller_1.default)(request);
39
- expect(result.authData).toEqual({
40
- userId: 999,
41
- renderingId: 888,
42
- environmentId: 777,
43
- projectId: 666,
44
- environmentApiEndpoint: 'http://localhost:3310',
45
- });
46
- });
47
- it('should create client that can access collections', () => {
48
- const request = {
49
- authInfo: {
50
- token: 'test-token',
51
- extra: {
52
- environmentApiEndpoint: 'http://custom-agent:4000',
53
- },
54
- },
55
- };
56
- const result = (0, agent_caller_1.default)(request);
57
- // The client should have the collection method
58
- expect(result.rpcClient.collection).toBeDefined();
59
- // Calling collection should return a collection object
60
- const collection = result.rpcClient.collection('users');
61
- expect(collection).toBeDefined();
62
- expect(typeof collection.list).toBe('function');
63
- expect(typeof collection.count).toBe('function');
64
- });
65
- it('should throw error when token is missing', () => {
66
- const request = {
67
- authInfo: {
68
- extra: {
69
- environmentApiEndpoint: 'http://localhost:3310',
70
- },
71
- },
72
- };
73
- expect(() => (0, agent_caller_1.default)(request)).toThrow('Authentication token is missing');
74
- });
75
- it('should throw error when authInfo is missing', () => {
76
- const request = {};
77
- expect(() => (0, agent_caller_1.default)(request)).toThrow('Authentication token is missing');
78
- });
79
- it('should throw error when environmentApiEndpoint is missing', () => {
80
- const request = {
81
- authInfo: {
82
- token: 'test-token',
83
- extra: {
84
- userId: 123,
85
- },
86
- },
87
- };
88
- expect(() => (0, agent_caller_1.default)(request)).toThrow('Environment API endpoint is missing or invalid');
89
- });
90
- it('should throw error when environmentApiEndpoint is not a string', () => {
91
- const request = {
92
- authInfo: {
93
- token: 'test-token',
94
- extra: {
95
- environmentApiEndpoint: 12345, // number instead of string
96
- },
97
- },
98
- };
99
- expect(() => (0, agent_caller_1.default)(request)).toThrow('Environment API endpoint is missing or invalid');
100
- });
101
- });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtY2FsbGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvYWdlbnQtY2FsbGVyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSxrRUFBeUM7QUFFekMsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7SUFDM0IsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEdBQUcsRUFBRTtRQUMxRSxNQUFNLE9BQU8sR0FBRztZQUNkLFFBQVEsRUFBRTtnQkFDUixLQUFLLEVBQUUsaUJBQWlCO2dCQUN4QixLQUFLLEVBQUU7b0JBQ0wsTUFBTSxFQUFFLEdBQUc7b0JBQ1gsV0FBVyxFQUFFLEdBQUc7b0JBQ2hCLGFBQWEsRUFBRSxHQUFHO29CQUNsQixTQUFTLEVBQUUsR0FBRztvQkFDZCxzQkFBc0IsRUFBRSx1QkFBdUI7aUJBQ2hEO2FBQ0Y7U0FDbUUsQ0FBQztRQUV2RSxNQUFNLE1BQU0sR0FBRyxJQUFBLHNCQUFXLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFFcEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxNQUFNLENBQUMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5RCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxvREFBb0QsRUFBRSxHQUFHLEVBQUU7UUFDNUQsTUFBTSxPQUFPLEdBQUc7WUFDZCxRQUFRLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLEtBQUssRUFBRTtvQkFDTCxNQUFNLEVBQUUsR0FBRztvQkFDWCxXQUFXLEVBQUUsR0FBRztvQkFDaEIsYUFBYSxFQUFFLEdBQUc7b0JBQ2xCLFNBQVMsRUFBRSxHQUFHO29CQUNkLHNCQUFzQixFQUFFLHVCQUF1QjtpQkFDaEQ7YUFDRjtTQUNtRSxDQUFDO1FBRXZFLE1BQU0s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
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=error-parser.test.d.ts.map
@@ -1,124 +0,0 @@
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 error_parser_1 = __importDefault(require("./error-parser"));
7
- describe('parseAgentError', () => {
8
- describe('nested error.text structure', () => {
9
- it('should parse error with nested error.text containing JSON:API errors', () => {
10
- const errorPayload = {
11
- error: {
12
- status: 400,
13
- text: JSON.stringify({
14
- errors: [{ name: 'ValidationError', detail: 'Invalid filters provided' }],
15
- }),
16
- },
17
- };
18
- const error = new Error(JSON.stringify(errorPayload));
19
- expect((0, error_parser_1.default)(error)).toBe('Invalid filters provided');
20
- });
21
- it('should return null when error.text has no errors array', () => {
22
- const errorPayload = {
23
- error: {
24
- status: 400,
25
- text: JSON.stringify({ success: false }),
26
- },
27
- };
28
- const error = new Error(JSON.stringify(errorPayload));
29
- expect((0, error_parser_1.default)(error)).toBeNull();
30
- });
31
- });
32
- describe('direct text property', () => {
33
- it('should parse error with direct text property containing JSON:API errors', () => {
34
- const errorPayload = {
35
- text: JSON.stringify({
36
- errors: [{ name: 'ValidationError', detail: 'Direct text error' }],
37
- }),
38
- };
39
- const error = new Error(JSON.stringify(errorPayload));
40
- expect((0, error_parser_1.default)(error)).toBe('Direct text error');
41
- });
42
- it('should return null when text has no errors array', () => {
43
- const errorPayload = {
44
- text: JSON.stringify({ success: false }),
45
- };
46
- const error = new Error(JSON.stringify(errorPayload));
47
- expect((0, error_parser_1.default)(error)).toBeNull();
48
- });
49
- });
50
- describe('message property fallback', () => {
51
- it('should use message property from parsed JSON when no text field', () => {
52
- const errorPayload = {
53
- message: 'Error message from JSON payload',
54
- };
55
- const error = new Error(JSON.stringify(errorPayload));
56
- expect((0, error_parser_1.default)(error)).toBe('Error message from JSON payload');
57
- });
58
- });
59
- describe('plain error message fallback', () => {
60
- it('should fall back to error.message when message is not valid JSON', () => {
61
- const error = new Error('Plain error message');
62
- expect((0, error_parser_1.default)(error)).toBe('Plain error message');
63
- });
64
- });
65
- describe('error priority', () => {
66
- it('should prioritize error.text over direct text', () => {
67
- const errorPayload = {
68
- error: {
69
- text: JSON.stringify({
70
- errors: [{ detail: 'From error.text' }],
71
- }),
72
- },
73
- text: JSON.stringify({
74
- errors: [{ detail: 'From direct text' }],
75
- }),
76
- };
77
- const error = new Error(JSON.stringify(errorPayload));
78
- expect((0, error_parser_1.default)(error)).toBe('From error.text');
79
- });
80
- it('should prioritize text over message', () => {
81
- const errorPayload = {
82
- text: JSON.stringify({
83
- errors: [{ detail: 'From text' }],
84
- }),
85
- message: 'From message',
86
- };
87
- const error = new Error(JSON.stringify(errorPayload));
88
- expect((0, error_parser_1.default)(error)).toBe('From text');
89
- });
90
- });
91
- describe('edge cases', () => {
92
- it('should return null for object without message property', () => {
93
- const error = { unknownProperty: 'some value' };
94
- expect((0, error_parser_1.default)(error)).toBeNull();
95
- });
96
- it('should return null for null error', () => {
97
- expect((0, error_parser_1.default)(null)).toBeNull();
98
- });
99
- it('should return null for undefined error', () => {
100
- expect((0, error_parser_1.default)(undefined)).toBeNull();
101
- });
102
- it('should handle empty errors array', () => {
103
- const errorPayload = {
104
- error: {
105
- text: JSON.stringify({ errors: [] }),
106
- },
107
- };
108
- const error = new Error(JSON.stringify(errorPayload));
109
- expect((0, error_parser_1.default)(error)).toBeNull();
110
- });
111
- it('should handle error without detail property', () => {
112
- const errorPayload = {
113
- error: {
114
- text: JSON.stringify({
115
- errors: [{ name: 'ValidationError' }],
116
- }),
117
- },
118
- };
119
- const error = new Error(JSON.stringify(errorPayload));
120
- expect((0, error_parser_1.default)(error)).toBeNull();
121
- });
122
- });
123
- });
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItcGFyc2VyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZXJyb3ItcGFyc2VyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrRUFBNkM7QUFFN0MsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtJQUMvQixRQUFRLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO1FBQzNDLEVBQUUsQ0FBQyxzRUFBc0UsRUFBRSxHQUFHLEVBQUU7WUFDOUUsTUFBTSxZQUFZLEdBQUc7Z0JBQ25CLEtBQUssRUFBRTtvQkFDTCxNQUFNLEVBQUUsR0FBRztvQkFDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQzt3QkFDbkIsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLDBCQUEwQixFQUFFLENBQUM7cUJBQzFFLENBQUM7aUJBQ0g7YUFDRixDQUFDO1lBQ0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBRXRELE1BQU0sQ0FBQyxJQUFBLHNCQUFlLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7WUFDaEUsTUFBTSxZQUFZLEdBQUc7Z0JBQ25CLEtBQUssRUFBRTtvQkFDTCxNQUFNLEVBQUUsR0FBRztvQkFDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztpQkFDekM7YUFDRixDQUFDO1lBQ0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBRXRELE1B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
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=schema-fetcher.test.d.ts.map