@optimizely-opal/opal-tool-ocp-sdk 0.0.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +437 -0
  2. package/dist/decorator/Decorator.d.ts +46 -0
  3. package/dist/decorator/Decorator.d.ts.map +1 -0
  4. package/dist/decorator/Decorator.js +31 -0
  5. package/dist/decorator/Decorator.js.map +1 -0
  6. package/dist/decorator/Decorator.test.d.ts +2 -0
  7. package/dist/decorator/Decorator.test.d.ts.map +1 -0
  8. package/dist/decorator/Decorator.test.js +418 -0
  9. package/dist/decorator/Decorator.test.js.map +1 -0
  10. package/dist/function/ToolFunction.d.ts +15 -0
  11. package/dist/function/ToolFunction.d.ts.map +1 -0
  12. package/dist/function/ToolFunction.js +25 -0
  13. package/dist/function/ToolFunction.js.map +1 -0
  14. package/dist/function/ToolFunction.test.d.ts +2 -0
  15. package/dist/function/ToolFunction.test.d.ts.map +1 -0
  16. package/dist/function/ToolFunction.test.js +189 -0
  17. package/dist/function/ToolFunction.test.js.map +1 -0
  18. package/dist/index.d.ts +5 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +25 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/service/Service.d.ts +78 -0
  23. package/dist/service/Service.d.ts.map +1 -0
  24. package/dist/service/Service.js +204 -0
  25. package/dist/service/Service.js.map +1 -0
  26. package/dist/service/Service.test.d.ts +2 -0
  27. package/dist/service/Service.test.d.ts.map +1 -0
  28. package/dist/service/Service.test.js +341 -0
  29. package/dist/service/Service.test.js.map +1 -0
  30. package/dist/types/Models.d.ts +126 -0
  31. package/dist/types/Models.d.ts.map +1 -0
  32. package/dist/types/Models.js +181 -0
  33. package/dist/types/Models.js.map +1 -0
  34. package/package.json +58 -0
  35. package/src/decorator/Decorator.test.ts +523 -0
  36. package/src/decorator/Decorator.ts +83 -0
  37. package/src/function/ToolFunction.test.ts +224 -0
  38. package/src/function/ToolFunction.ts +25 -0
  39. package/src/index.ts +4 -0
  40. package/src/service/Service.test.ts +550 -0
  41. package/src/service/Service.ts +182 -0
  42. package/src/types/Models.ts +163 -0
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const Service_1 = require("./Service");
4
+ const Models_1 = require("../types/Models");
5
+ const app_sdk_1 = require("@zaiusinc/app-sdk");
6
+ // Mock the logger
7
+ jest.mock('@zaiusinc/app-sdk', () => ({
8
+ logger: {
9
+ error: jest.fn()
10
+ },
11
+ Response: jest.fn().mockImplementation((status, data) => ({
12
+ status,
13
+ data,
14
+ bodyJSON: data,
15
+ bodyAsU8Array: new Uint8Array()
16
+ }))
17
+ }));
18
+ describe('ToolsService', () => {
19
+ let mockTool;
20
+ let mockInteraction;
21
+ beforeEach(() => {
22
+ // Clear registered functions and interactions before each test
23
+ Service_1.toolsService.functions = new Map();
24
+ Service_1.toolsService.interactions = new Map();
25
+ // Reset all mocks
26
+ jest.clearAllMocks();
27
+ // Create mock tool handler
28
+ const mockToolHandler = jest.fn().mockResolvedValue({ result: 'success' });
29
+ // Create mock interaction handler
30
+ const mockInteractionHandler = jest.fn().mockResolvedValue({ message: 'interaction success' });
31
+ // Create mock tool
32
+ mockTool = new Service_1.Tool('testTool', 'Test tool description', [new Models_1.Parameter('param1', Models_1.ParameterType.String, 'Test parameter', true)], '/test-tool', mockToolHandler);
33
+ // Create mock interaction
34
+ mockInteraction = new Service_1.Interaction('testInteraction', '/test-interaction', mockInteractionHandler);
35
+ });
36
+ const createMockRequest = (overrides = {}) => {
37
+ // Create a mock headers object with get method
38
+ const createHeadersMap = (headersObj = {}) => {
39
+ const map = new Map();
40
+ Object.entries(headersObj).forEach(([key, value]) => {
41
+ map.set(key, value);
42
+ });
43
+ return map;
44
+ };
45
+ const baseRequest = {
46
+ path: '/test-tool',
47
+ method: 'POST',
48
+ bodyJSON: { parameters: { param1: 'test-value' } },
49
+ body: JSON.stringify({ parameters: { param1: 'test-value' } }),
50
+ bodyData: Buffer.from(''),
51
+ headers: createHeadersMap(),
52
+ params: {},
53
+ contentType: 'application/json'
54
+ };
55
+ return {
56
+ ...baseRequest,
57
+ ...overrides,
58
+ headers: createHeadersMap(overrides.headers)
59
+ };
60
+ };
61
+ describe('processRequest', () => {
62
+ describe('discovery endpoint', () => {
63
+ it('should return registered functions for discovery endpoint', async () => {
64
+ Service_1.toolsService.registerTool(mockTool.name, mockTool.description, mockTool.handler, mockTool.parameters, mockTool.endpoint);
65
+ const discoveryRequest = createMockRequest({ path: '/discovery' });
66
+ const response = await Service_1.toolsService.processRequest(discoveryRequest);
67
+ expect(response.status).toBe(200);
68
+ expect(response).toHaveProperty('bodyJSON');
69
+ expect(response.bodyAsU8Array).toBeDefined();
70
+ // Test the actual response structure
71
+ const responseData = response.bodyJSON;
72
+ expect(responseData).toHaveProperty('functions');
73
+ expect(Array.isArray(responseData.functions)).toBe(true);
74
+ expect(responseData.functions).toHaveLength(1);
75
+ // Test the registered function structure
76
+ const registeredFunction = responseData.functions[0];
77
+ expect(registeredFunction).toEqual({
78
+ name: mockTool.name,
79
+ description: mockTool.description,
80
+ parameters: mockTool.parameters.map((p) => p.toJSON()),
81
+ endpoint: mockTool.endpoint,
82
+ http_method: 'POST'
83
+ });
84
+ });
85
+ it('should return empty functions array when no tools are registered', async () => {
86
+ const discoveryRequest = createMockRequest({ path: '/discovery' });
87
+ const response = await Service_1.toolsService.processRequest(discoveryRequest);
88
+ expect(response.status).toBe(200);
89
+ expect(response.bodyAsU8Array).toBeDefined();
90
+ // Test the actual response structure
91
+ const responseData = response.bodyJSON;
92
+ expect(responseData).toHaveProperty('functions');
93
+ expect(Array.isArray(responseData.functions)).toBe(true);
94
+ expect(responseData.functions).toHaveLength(0);
95
+ });
96
+ it('should return multiple registered functions in discovery endpoint', async () => {
97
+ // Register first tool
98
+ Service_1.toolsService.registerTool(mockTool.name, mockTool.description, mockTool.handler, mockTool.parameters, mockTool.endpoint);
99
+ // Register second tool with auth requirements
100
+ const authRequirements = [new Models_1.AuthRequirement('oauth2', 'calendar', true)];
101
+ Service_1.toolsService.registerTool('second_tool', 'Second test tool', jest.fn(), [], '/second-tool', authRequirements);
102
+ const discoveryRequest = createMockRequest({ path: '/discovery' });
103
+ const response = await Service_1.toolsService.processRequest(discoveryRequest);
104
+ expect(response.status).toBe(200);
105
+ // Test the actual response structure
106
+ const responseData = response.bodyJSON;
107
+ expect(responseData).toHaveProperty('functions');
108
+ expect(Array.isArray(responseData.functions)).toBe(true);
109
+ expect(responseData.functions).toHaveLength(2);
110
+ // Find and test both functions
111
+ const firstFunction = responseData.functions.find((f) => f.name === mockTool.name);
112
+ const secondFunction = responseData.functions.find((f) => f.name === 'second_tool');
113
+ expect(firstFunction).toEqual({
114
+ name: mockTool.name,
115
+ description: mockTool.description,
116
+ parameters: mockTool.parameters.map((p) => p.toJSON()),
117
+ endpoint: mockTool.endpoint,
118
+ http_method: 'POST'
119
+ });
120
+ expect(secondFunction).toEqual({
121
+ name: 'second_tool',
122
+ description: 'Second test tool',
123
+ parameters: [],
124
+ endpoint: '/second-tool',
125
+ http_method: 'POST',
126
+ auth_requirements: authRequirements.map((auth) => auth.toJSON())
127
+ });
128
+ });
129
+ });
130
+ describe('tool execution', () => {
131
+ beforeEach(() => {
132
+ Service_1.toolsService.registerTool(mockTool.name, mockTool.description, mockTool.handler, mockTool.parameters, mockTool.endpoint);
133
+ });
134
+ it('should execute tool successfully with parameters', async () => {
135
+ const mockRequest = createMockRequest();
136
+ const response = await Service_1.toolsService.processRequest(mockRequest);
137
+ expect(response.status).toBe(200);
138
+ expect(mockTool.handler).toHaveBeenCalledWith({ param1: 'test-value' }, undefined);
139
+ });
140
+ it('should execute tool with OptiID auth data when provided', async () => {
141
+ const authData = new Models_1.OptiIdAuthData('optiId', new Models_1.OptiIdAuthDataCredentials('customer123', 'instance123', 'token123', 'sku123'));
142
+ const requestWithAuth = createMockRequest({
143
+ bodyJSON: {
144
+ parameters: { param1: 'test-value' },
145
+ auth: authData
146
+ },
147
+ body: JSON.stringify({
148
+ parameters: { param1: 'test-value' },
149
+ auth: authData
150
+ })
151
+ });
152
+ const response = await Service_1.toolsService.processRequest(requestWithAuth);
153
+ expect(response.status).toBe(200);
154
+ expect(mockTool.handler).toHaveBeenCalledWith({ param1: 'test-value' }, authData);
155
+ });
156
+ it('should handle request body without parameters wrapper', async () => {
157
+ const requestWithoutWrapper = createMockRequest({
158
+ bodyJSON: { param1: 'test-value' },
159
+ body: JSON.stringify({ param1: 'test-value' })
160
+ });
161
+ const response = await Service_1.toolsService.processRequest(requestWithoutWrapper);
162
+ expect(response.status).toBe(200);
163
+ expect(mockTool.handler).toHaveBeenCalledWith({ param1: 'test-value' }, undefined);
164
+ });
165
+ it('should return 500 error when tool handler throws an error', async () => {
166
+ const errorMessage = 'Tool execution failed';
167
+ jest.mocked(mockTool.handler).mockRejectedValueOnce(new Error(errorMessage));
168
+ const mockRequest = createMockRequest();
169
+ const response = await Service_1.toolsService.processRequest(mockRequest);
170
+ expect(response.status).toBe(500);
171
+ expect(app_sdk_1.logger.error).toHaveBeenCalledWith(`Error in function ${mockTool.name}:`, expect.any(Error));
172
+ });
173
+ it('should return 500 error with generic message when error has no message', async () => {
174
+ jest.mocked(mockTool.handler).mockRejectedValueOnce({});
175
+ const mockRequest = createMockRequest();
176
+ const response = await Service_1.toolsService.processRequest(mockRequest);
177
+ expect(response.status).toBe(500);
178
+ });
179
+ });
180
+ describe('interaction execution', () => {
181
+ beforeEach(() => {
182
+ Service_1.toolsService.registerInteraction(mockInteraction.name, mockInteraction.handler, mockInteraction.endpoint);
183
+ });
184
+ it('should execute interaction successfully with data', async () => {
185
+ const interactionRequest = createMockRequest({
186
+ path: '/test-interaction',
187
+ bodyJSON: { data: { param1: 'test-value' } },
188
+ body: JSON.stringify({ data: { param1: 'test-value' } })
189
+ });
190
+ const response = await Service_1.toolsService.processRequest(interactionRequest);
191
+ expect(response.status).toBe(200);
192
+ expect(mockInteraction.handler).toHaveBeenCalledWith({ param1: 'test-value' }, undefined);
193
+ });
194
+ it('should handle interaction request body without data wrapper', async () => {
195
+ const interactionRequest = createMockRequest({
196
+ path: '/test-interaction',
197
+ bodyJSON: { param1: 'test-value' },
198
+ body: JSON.stringify({ param1: 'test-value' })
199
+ });
200
+ const response = await Service_1.toolsService.processRequest(interactionRequest);
201
+ expect(response.status).toBe(200);
202
+ expect(mockInteraction.handler).toHaveBeenCalledWith({ param1: 'test-value' }, undefined);
203
+ });
204
+ it('should execute interaction with OptiID auth data when provided', async () => {
205
+ const authData = new Models_1.OptiIdAuthData('optiId', new Models_1.OptiIdAuthDataCredentials('customer123', 'instance123', 'token123', 'sku123'));
206
+ const interactionRequest = createMockRequest({
207
+ path: '/test-interaction',
208
+ bodyJSON: {
209
+ data: { param1: 'test-value' },
210
+ auth: authData
211
+ },
212
+ body: JSON.stringify({
213
+ data: { param1: 'test-value' },
214
+ auth: authData
215
+ })
216
+ });
217
+ const response = await Service_1.toolsService.processRequest(interactionRequest);
218
+ expect(response.status).toBe(200);
219
+ expect(mockInteraction.handler).toHaveBeenCalledWith({ param1: 'test-value' }, authData);
220
+ });
221
+ it('should handle interaction request without data wrapper but with auth data', async () => {
222
+ const authData = new Models_1.OptiIdAuthData('optiId', new Models_1.OptiIdAuthDataCredentials('customer123', 'instance123', 'token123', 'sku123'));
223
+ const interactionRequest = createMockRequest({
224
+ path: '/test-interaction',
225
+ bodyJSON: {
226
+ param1: 'test-value',
227
+ auth: authData
228
+ },
229
+ body: JSON.stringify({
230
+ param1: 'test-value',
231
+ auth: authData
232
+ })
233
+ });
234
+ const response = await Service_1.toolsService.processRequest(interactionRequest);
235
+ expect(response.status).toBe(200);
236
+ expect(mockInteraction.handler).toHaveBeenCalledWith({
237
+ param1: 'test-value',
238
+ auth: authData
239
+ }, authData);
240
+ });
241
+ it('should return 500 error when interaction handler throws an error', async () => {
242
+ const errorMessage = 'Interaction execution failed';
243
+ jest.mocked(mockInteraction.handler).mockRejectedValueOnce(new Error(errorMessage));
244
+ const interactionRequest = createMockRequest({
245
+ path: '/test-interaction',
246
+ bodyJSON: { data: { param1: 'test-value' } }
247
+ });
248
+ const response = await Service_1.toolsService.processRequest(interactionRequest);
249
+ expect(response.status).toBe(500);
250
+ expect(app_sdk_1.logger.error).toHaveBeenCalledWith(`Error in function ${mockInteraction.name}:`, expect.any(Error));
251
+ });
252
+ });
253
+ describe('error cases', () => {
254
+ it('should return 404 when no matching tool or interaction is found', async () => {
255
+ const unknownRequest = createMockRequest({ path: '/unknown-endpoint' });
256
+ const response = await Service_1.toolsService.processRequest(unknownRequest);
257
+ expect(response.status).toBe(404);
258
+ });
259
+ it('should handle tool with OptiID auth requirements', async () => {
260
+ const authRequirements = [
261
+ new Models_1.AuthRequirement('OptiID', 'calendar', true)
262
+ ];
263
+ Service_1.toolsService.registerTool('optiIdAuthTool', 'Tool with OptiID auth', mockTool.handler, mockTool.parameters, '/optid-auth-tool', authRequirements);
264
+ const authRequest = createMockRequest({
265
+ path: '/optid-auth-tool'
266
+ });
267
+ const response = await Service_1.toolsService.processRequest(authRequest);
268
+ expect(response.status).toBe(200);
269
+ });
270
+ });
271
+ describe('edge cases', () => {
272
+ it('should handle request with null bodyJSON', async () => {
273
+ Service_1.toolsService.registerTool(mockTool.name, mockTool.description, mockTool.handler, mockTool.parameters, mockTool.endpoint);
274
+ const requestWithNullBody = createMockRequest({
275
+ bodyJSON: null,
276
+ body: null
277
+ });
278
+ const response = await Service_1.toolsService.processRequest(requestWithNullBody);
279
+ expect(response.status).toBe(200);
280
+ expect(mockTool.handler).toHaveBeenCalledWith(null, undefined);
281
+ });
282
+ it('should handle request with undefined bodyJSON', async () => {
283
+ Service_1.toolsService.registerTool(mockTool.name, mockTool.description, mockTool.handler, mockTool.parameters, mockTool.endpoint);
284
+ const requestWithUndefinedBody = createMockRequest({
285
+ bodyJSON: undefined,
286
+ body: undefined
287
+ });
288
+ const response = await Service_1.toolsService.processRequest(requestWithUndefinedBody);
289
+ expect(response.status).toBe(200);
290
+ expect(mockTool.handler).toHaveBeenCalledWith(undefined, undefined);
291
+ });
292
+ it('should extract auth data from bodyJSON when body exists', async () => {
293
+ Service_1.toolsService.registerTool(mockTool.name, mockTool.description, mockTool.handler, mockTool.parameters, mockTool.endpoint);
294
+ const authData = new Models_1.OptiIdAuthData('optiId', new Models_1.OptiIdAuthDataCredentials('customer123', 'instance123', 'token123', 'sku123'));
295
+ const requestWithAuth = createMockRequest({
296
+ bodyJSON: {
297
+ parameters: { param1: 'test-value' },
298
+ auth: authData
299
+ },
300
+ body: JSON.stringify({
301
+ parameters: { param1: 'test-value' },
302
+ auth: authData
303
+ })
304
+ });
305
+ const response = await Service_1.toolsService.processRequest(requestWithAuth);
306
+ expect(response.status).toBe(200);
307
+ expect(mockTool.handler).toHaveBeenCalledWith({ param1: 'test-value' }, authData);
308
+ });
309
+ it('should handle missing auth data gracefully', async () => {
310
+ Service_1.toolsService.registerTool(mockTool.name, mockTool.description, mockTool.handler, mockTool.parameters, mockTool.endpoint);
311
+ const requestWithoutAuth = createMockRequest({
312
+ bodyJSON: {
313
+ parameters: { param1: 'test-value' }
314
+ // No auth property
315
+ },
316
+ body: JSON.stringify({
317
+ parameters: { param1: 'test-value' }
318
+ })
319
+ });
320
+ const response = await Service_1.toolsService.processRequest(requestWithoutAuth);
321
+ expect(response.status).toBe(200);
322
+ expect(mockTool.handler).toHaveBeenCalledWith({ param1: 'test-value' }, undefined);
323
+ });
324
+ it('should handle auth extraction when body is falsy but bodyJSON has auth', async () => {
325
+ Service_1.toolsService.registerTool(mockTool.name, mockTool.description, mockTool.handler, mockTool.parameters, mockTool.endpoint);
326
+ const authData = new Models_1.OptiIdAuthData('optiId', new Models_1.OptiIdAuthDataCredentials('customer123', 'instance123', 'token123', 'sku123'));
327
+ const requestWithAuthButNoBody = createMockRequest({
328
+ bodyJSON: {
329
+ parameters: { param1: 'test-value' },
330
+ auth: authData
331
+ },
332
+ body: ''
333
+ });
334
+ const response = await Service_1.toolsService.processRequest(requestWithAuthButNoBody);
335
+ expect(response.status).toBe(200);
336
+ expect(mockTool.handler).toHaveBeenCalledWith({ param1: 'test-value' }, authData);
337
+ });
338
+ });
339
+ });
340
+ });
341
+ //# sourceMappingURL=Service.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Service.test.js","sourceRoot":"","sources":["../../src/service/Service.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Types of parameters supported by Opal tools
3
+ */
4
+ export declare enum ParameterType {
5
+ String = "string",
6
+ Integer = "integer",
7
+ Number = "number",
8
+ Boolean = "boolean",
9
+ List = "list",
10
+ Dictionary = "object"
11
+ }
12
+ /**
13
+ * Parameter definition for an Opal tool
14
+ */
15
+ export declare class Parameter {
16
+ name: string;
17
+ type: ParameterType;
18
+ description: string;
19
+ required: boolean;
20
+ /**
21
+ * Create a new parameter definition
22
+ * @param name Parameter name
23
+ * @param type Parameter type
24
+ * @param description Parameter description
25
+ * @param required Whether the parameter is required
26
+ */
27
+ constructor(name: string, type: ParameterType, description: string, required: boolean);
28
+ /**
29
+ * Convert to JSON for the discovery endpoint
30
+ */
31
+ toJSON(): {
32
+ name: string;
33
+ type: ParameterType;
34
+ description: string;
35
+ required: boolean;
36
+ };
37
+ }
38
+ /**
39
+ * Credentials structure
40
+ */
41
+ export declare class OptiIdAuthDataCredentials {
42
+ customerId: string;
43
+ instanceId: string;
44
+ accessToken: string;
45
+ productSku: string;
46
+ constructor(customerId: string, instanceId: string, accessToken: string, productSku: string);
47
+ }
48
+ /**
49
+ * Auth data structure
50
+ */
51
+ export declare class OptiIdAuthData {
52
+ provider: string;
53
+ credentials: OptiIdAuthDataCredentials;
54
+ constructor(provider: string, credentials: OptiIdAuthDataCredentials);
55
+ }
56
+ /**
57
+ * Authentication requirements for an Opal tool
58
+ */
59
+ export declare class AuthRequirement {
60
+ provider: string;
61
+ scopeBundle: string;
62
+ required: boolean;
63
+ /**
64
+ * Create a new authentication requirement
65
+ * @param provider Auth provider (e.g., "optiId")
66
+ * @param scopeBundle Scope bundle (e.g., "calendar", "drive")
67
+ * @param required Whether authentication is required
68
+ */
69
+ constructor(provider: string, scopeBundle: string, required?: boolean);
70
+ /**
71
+ * Convert to JSON for the discovery endpoint
72
+ */
73
+ toJSON(): {
74
+ provider: string;
75
+ scope_bundle: string;
76
+ required: boolean;
77
+ };
78
+ }
79
+ export declare class IslandField {
80
+ name: string;
81
+ label: string;
82
+ type: 'string' | 'boolean' | 'json';
83
+ value: string | boolean | object;
84
+ hidden: boolean;
85
+ options: string[];
86
+ constructor(name: string, label: string, type: 'string' | 'boolean' | 'json', value?: string | boolean | object, hidden?: boolean, options?: string[]);
87
+ toJSON(): {
88
+ name: string;
89
+ label: string;
90
+ type: "string" | "boolean" | "json";
91
+ hidden: boolean;
92
+ options: string[];
93
+ value: string | boolean | object;
94
+ };
95
+ }
96
+ export declare class IslandAction {
97
+ name: string;
98
+ label: string;
99
+ type: string;
100
+ endpoint: string;
101
+ operation: string;
102
+ constructor(name: string, label: string, type: string, endpoint: string, operation?: string);
103
+ toJSON(): {
104
+ name: string;
105
+ label: string;
106
+ type: string;
107
+ endpoint: string;
108
+ operation: string;
109
+ };
110
+ }
111
+ export declare class IslandConfig {
112
+ fields: IslandField[];
113
+ actions: IslandAction[];
114
+ constructor(fields: IslandField[], actions: IslandAction[]);
115
+ }
116
+ export declare class IslandResponse {
117
+ type: 'island';
118
+ config: {
119
+ islands: IslandConfig[];
120
+ };
121
+ constructor(type: 'island', config: {
122
+ islands: IslandConfig[];
123
+ });
124
+ static create(islands: IslandConfig[]): IslandResponse;
125
+ }
126
+ //# sourceMappingURL=Models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Models.d.ts","sourceRoot":"","sources":["../../src/types/Models.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,oBAAY,aAAa;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,UAAU,WAAW;CACtB;AAED;;GAEG;AACH,qBAAa,SAAS;IASX,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,MAAM;IACnB,QAAQ,EAAE,OAAO;IAX1B;;;;;;OAMG;gBAEM,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,OAAO;IAG1B;;OAEG;IACI,MAAM;;;;;;CAQd;AAED;;GAEG;AACH,qBAAa,yBAAyB;IAG3B,UAAU,EAAE,MAAM;IAClB,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,MAAM;IACnB,UAAU,EAAE,MAAM;gBAHlB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM;CAE5B;AAGD;;GAEG;AACH,qBAAa,cAAc;IAGhB,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,yBAAyB;gBADtC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,yBAAyB;CAEhD;AAED;;GAEG;AACH,qBAAa,eAAe;IAQjB,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,MAAM;IACnB,QAAQ,EAAE,OAAO;IAT1B;;;;;OAKG;gBAEM,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,OAAc;IAGjC;;OAEG;IACI,MAAM;;;;;CAOd;AAED,qBAAa,WAAW;IAGb,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM;IACnC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM;IAChC,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,MAAM,EAAE;gBALjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,EACnC,KAAK,GAAE,MAAM,GAAG,OAAO,GAAG,MAAW,EACrC,MAAM,GAAE,OAAe,EACvB,OAAO,GAAE,MAAM,EAAO;IAGxB,MAAM;;;;;;;;CAUd;AAED,qBAAa,YAAY;IAGd,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,MAAM;IAChB,SAAS,EAAE,MAAM;gBAJjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAiB;IAG9B,MAAM;;;;;;;CASd;AAED,qBAAa,YAAY;IAGd,MAAM,EAAE,WAAW,EAAE;IACrB,OAAO,EAAE,YAAY,EAAE;gBADvB,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,EAAE,YAAY,EAAE;CAEjC;AAED,qBAAa,cAAc;IAGhB,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE;QACb,OAAO,EAAE,YAAY,EAAE,CAAC;KACzB;gBAHM,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE;QACb,OAAO,EAAE,YAAY,EAAE,CAAC;KACzB;WAGW,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,cAAc;CAG9D"}