@memberjunction/core-actions 2.49.0 → 2.51.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 (97) hide show
  1. package/dist/custom/{send-single-message.action.d.ts → communication/send-single-message.action.d.ts} +1 -0
  2. package/dist/custom/communication/send-single-message.action.d.ts.map +1 -0
  3. package/dist/custom/{send-single-message.action.js → communication/send-single-message.action.js} +8 -7
  4. package/dist/custom/communication/send-single-message.action.js.map +1 -0
  5. package/dist/custom/demo/calculate-expression.action.d.ts.map +1 -0
  6. package/dist/custom/{calculate-expression.action.js → demo/calculate-expression.action.js} +1 -1
  7. package/dist/custom/demo/calculate-expression.action.js.map +1 -0
  8. package/dist/custom/demo/color-converter.action.d.ts.map +1 -0
  9. package/dist/custom/{color-converter.action.js → demo/color-converter.action.js} +1 -1
  10. package/dist/custom/demo/color-converter.action.js.map +1 -0
  11. package/dist/custom/demo/get-stock-price.action.d.ts.map +1 -0
  12. package/dist/custom/{get-stock-price.action.js → demo/get-stock-price.action.js} +1 -1
  13. package/dist/custom/demo/get-stock-price.action.js.map +1 -0
  14. package/dist/custom/{get-weather.action.d.ts → demo/get-weather.action.d.ts} +9 -0
  15. package/dist/custom/demo/get-weather.action.d.ts.map +1 -0
  16. package/dist/custom/{get-weather.action.js → demo/get-weather.action.js} +104 -14
  17. package/dist/custom/demo/get-weather.action.js.map +1 -0
  18. package/dist/custom/demo/text-analyzer.action.d.ts.map +1 -0
  19. package/dist/custom/{text-analyzer.action.js → demo/text-analyzer.action.js} +2 -2
  20. package/dist/custom/demo/text-analyzer.action.js.map +1 -0
  21. package/dist/custom/demo/unit-converter.action.d.ts.map +1 -0
  22. package/dist/custom/{unit-converter.action.js → demo/unit-converter.action.js} +3 -3
  23. package/dist/custom/demo/unit-converter.action.js.map +1 -0
  24. package/dist/custom/utilities/business-days-calculator.action.d.ts.map +1 -0
  25. package/dist/custom/{business-days-calculator.action.js → utilities/business-days-calculator.action.js} +6 -6
  26. package/dist/custom/utilities/business-days-calculator.action.js.map +1 -0
  27. package/dist/custom/utilities/census-data-lookup.action.d.ts.map +1 -0
  28. package/dist/custom/{census-data-lookup.action.js → utilities/census-data-lookup.action.js} +4 -4
  29. package/dist/custom/utilities/census-data-lookup.action.js.map +1 -0
  30. package/dist/custom/{external-change-detection.action.d.ts → utilities/external-change-detection.action.d.ts} +1 -0
  31. package/dist/custom/utilities/external-change-detection.action.d.ts.map +1 -0
  32. package/dist/custom/{external-change-detection.action.js → utilities/external-change-detection.action.js} +3 -2
  33. package/dist/custom/utilities/external-change-detection.action.js.map +1 -0
  34. package/dist/custom/utilities/ip-geolocation.action.d.ts.map +1 -0
  35. package/dist/custom/{ip-geolocation.action.js → utilities/ip-geolocation.action.js} +1 -1
  36. package/dist/custom/utilities/ip-geolocation.action.js.map +1 -0
  37. package/dist/custom/utilities/qr-code.action.d.ts +89 -0
  38. package/dist/custom/utilities/qr-code.action.d.ts.map +1 -0
  39. package/dist/custom/utilities/qr-code.action.js +300 -0
  40. package/dist/custom/utilities/qr-code.action.js.map +1 -0
  41. package/dist/custom/utilities/vectorize-entity.action.d.ts.map +1 -0
  42. package/dist/custom/{vectorize-entity.action.js → utilities/vectorize-entity.action.js} +1 -1
  43. package/dist/custom/utilities/vectorize-entity.action.js.map +1 -0
  44. package/dist/custom/web/url-link-validator.action.d.ts +74 -0
  45. package/dist/custom/web/url-link-validator.action.d.ts.map +1 -0
  46. package/dist/custom/web/url-link-validator.action.js +286 -0
  47. package/dist/custom/web/url-link-validator.action.js.map +1 -0
  48. package/dist/custom/web/url-metadata-extractor.action.d.ts +104 -0
  49. package/dist/custom/web/url-metadata-extractor.action.d.ts.map +1 -0
  50. package/dist/custom/web/url-metadata-extractor.action.js +438 -0
  51. package/dist/custom/web/url-metadata-extractor.action.js.map +1 -0
  52. package/dist/custom/web/web-page-content.action.d.ts +90 -0
  53. package/dist/custom/web/web-page-content.action.d.ts.map +1 -0
  54. package/dist/custom/web/web-page-content.action.js +416 -0
  55. package/dist/custom/web/web-page-content.action.js.map +1 -0
  56. package/dist/custom/web/web-search.action.d.ts +69 -0
  57. package/dist/custom/web/web-search.action.d.ts.map +1 -0
  58. package/dist/custom/web/web-search.action.js +382 -0
  59. package/dist/custom/web/web-search.action.js.map +1 -0
  60. package/dist/index.d.ts +17 -11
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +58 -11
  63. package/dist/index.js.map +1 -1
  64. package/package.json +9 -9
  65. package/dist/custom/business-days-calculator.action.d.ts.map +0 -1
  66. package/dist/custom/business-days-calculator.action.js.map +0 -1
  67. package/dist/custom/calculate-expression.action.d.ts.map +0 -1
  68. package/dist/custom/calculate-expression.action.js.map +0 -1
  69. package/dist/custom/census-data-lookup.action.d.ts.map +0 -1
  70. package/dist/custom/census-data-lookup.action.js.map +0 -1
  71. package/dist/custom/color-converter.action.d.ts.map +0 -1
  72. package/dist/custom/color-converter.action.js.map +0 -1
  73. package/dist/custom/external-change-detection.action.d.ts.map +0 -1
  74. package/dist/custom/external-change-detection.action.js.map +0 -1
  75. package/dist/custom/get-stock-price.action.d.ts.map +0 -1
  76. package/dist/custom/get-stock-price.action.js.map +0 -1
  77. package/dist/custom/get-weather.action.d.ts.map +0 -1
  78. package/dist/custom/get-weather.action.js.map +0 -1
  79. package/dist/custom/ip-geolocation.action.d.ts.map +0 -1
  80. package/dist/custom/ip-geolocation.action.js.map +0 -1
  81. package/dist/custom/send-single-message.action.d.ts.map +0 -1
  82. package/dist/custom/send-single-message.action.js.map +0 -1
  83. package/dist/custom/text-analyzer.action.d.ts.map +0 -1
  84. package/dist/custom/text-analyzer.action.js.map +0 -1
  85. package/dist/custom/unit-converter.action.d.ts.map +0 -1
  86. package/dist/custom/unit-converter.action.js.map +0 -1
  87. package/dist/custom/vectorize-entity.action.d.ts.map +0 -1
  88. package/dist/custom/vectorize-entity.action.js.map +0 -1
  89. /package/dist/custom/{calculate-expression.action.d.ts → demo/calculate-expression.action.d.ts} +0 -0
  90. /package/dist/custom/{color-converter.action.d.ts → demo/color-converter.action.d.ts} +0 -0
  91. /package/dist/custom/{get-stock-price.action.d.ts → demo/get-stock-price.action.d.ts} +0 -0
  92. /package/dist/custom/{text-analyzer.action.d.ts → demo/text-analyzer.action.d.ts} +0 -0
  93. /package/dist/custom/{unit-converter.action.d.ts → demo/unit-converter.action.d.ts} +0 -0
  94. /package/dist/custom/{business-days-calculator.action.d.ts → utilities/business-days-calculator.action.d.ts} +0 -0
  95. /package/dist/custom/{census-data-lookup.action.d.ts → utilities/census-data-lookup.action.d.ts} +0 -0
  96. /package/dist/custom/{ip-geolocation.action.d.ts → utilities/ip-geolocation.action.d.ts} +0 -0
  97. /package/dist/custom/{vectorize-entity.action.d.ts → utilities/vectorize-entity.action.d.ts} +0 -0
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.LoadURLLinkValidatorAction = exports.URLLinkValidatorAction = void 0;
10
+ const actions_1 = require("@memberjunction/actions");
11
+ const global_1 = require("@memberjunction/global");
12
+ /**
13
+ * Action that validates URLs by checking accessibility, response codes, and basic health checks
14
+ * Provides detailed information about URL status, redirects, and response headers
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * // Validate a single URL
19
+ * await runAction({
20
+ * ActionName: 'URL Link Validator',
21
+ * Params: [{
22
+ * Name: 'URL',
23
+ * Value: 'https://example.com'
24
+ * }]
25
+ * });
26
+ *
27
+ * // Validate multiple URLs
28
+ * await runAction({
29
+ * ActionName: 'URL Link Validator',
30
+ * Params: [{
31
+ * Name: 'URLs',
32
+ * Value: ['https://example.com', 'https://google.com', 'https://invalid-url-test.com']
33
+ * }]
34
+ * });
35
+ *
36
+ * // Custom timeout and options
37
+ * await runAction({
38
+ * ActionName: 'URL Link Validator',
39
+ * Params: [{
40
+ * Name: 'URL',
41
+ * Value: 'https://slow-site.com'
42
+ * }, {
43
+ * Name: 'TimeoutMs',
44
+ * Value: 10000
45
+ * }, {
46
+ * Name: 'FollowRedirects',
47
+ * Value: false
48
+ * }]
49
+ * });
50
+ * ```
51
+ */
52
+ let URLLinkValidatorAction = class URLLinkValidatorAction extends actions_1.BaseAction {
53
+ DEFAULT_TIMEOUT = 5000; // 5 seconds
54
+ MAX_TIMEOUT = 30000; // 30 seconds
55
+ MAX_URLS = 50; // Maximum URLs to validate in one request
56
+ /**
57
+ * Executes URL validation for one or more URLs
58
+ *
59
+ * @param params - The action parameters containing:
60
+ * - URL: Single URL to validate (use this OR URLs)
61
+ * - URLs: Array of URLs to validate (use this OR URL)
62
+ * - TimeoutMs: Request timeout in milliseconds (default: 5000, max: 30000)
63
+ * - FollowRedirects: Whether to follow redirects (default: true)
64
+ * - CheckSSL: Whether to check SSL certificate validity (default: true)
65
+ * - UserAgent: Custom User-Agent string (optional)
66
+ *
67
+ * @returns URL validation results with status, response time, and details
68
+ */
69
+ async InternalRunAction(params) {
70
+ try {
71
+ const urlParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'url');
72
+ const urlsParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'urls');
73
+ const timeoutParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'timeoutms');
74
+ const followRedirectsParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'followredirects');
75
+ const checkSSLParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'checkssl');
76
+ const userAgentParam = params.Params.find(p => p.Name.trim().toLowerCase() === 'useragent');
77
+ // Determine URLs to validate
78
+ let urlsToValidate = [];
79
+ if (urlParam && urlParam.Value) {
80
+ urlsToValidate.push(urlParam.Value.toString());
81
+ }
82
+ if (urlsParam && urlsParam.Value) {
83
+ const urlsValue = urlsParam.Value;
84
+ if (Array.isArray(urlsValue)) {
85
+ urlsToValidate.push(...urlsValue.map(u => u.toString()));
86
+ }
87
+ else if (typeof urlsValue === 'string') {
88
+ // Handle comma-separated string
89
+ urlsToValidate.push(...urlsValue.split(',').map(u => u.trim()));
90
+ }
91
+ }
92
+ if (urlsToValidate.length === 0) {
93
+ return {
94
+ Success: false,
95
+ Message: "Either URL or URLs parameter is required",
96
+ ResultCode: "MISSING_PARAMETERS"
97
+ };
98
+ }
99
+ if (urlsToValidate.length > this.MAX_URLS) {
100
+ return {
101
+ Success: false,
102
+ Message: `Too many URLs to validate. Maximum is ${this.MAX_URLS}, received ${urlsToValidate.length}`,
103
+ ResultCode: "TOO_MANY_URLS"
104
+ };
105
+ }
106
+ // Parse options
107
+ const timeout = Math.min(parseInt(timeoutParam?.Value?.toString() || this.DEFAULT_TIMEOUT.toString()), this.MAX_TIMEOUT);
108
+ const followRedirects = followRedirectsParam?.Value !== false && followRedirectsParam?.Value !== 'false';
109
+ const checkSSL = checkSSLParam?.Value !== false && checkSSLParam?.Value !== 'false';
110
+ const userAgent = userAgentParam?.Value?.toString() || 'Mozilla/5.0 (compatible; MemberJunction URL Validator/1.0; +https://memberjunction.org)';
111
+ // Validate URLs
112
+ const results = await Promise.all(urlsToValidate.map(url => this.validateURL(url, timeout, followRedirects, checkSSL, userAgent)));
113
+ // Calculate summary statistics
114
+ const summary = {
115
+ totalURLs: results.length,
116
+ validURLs: results.filter(r => r.isValid).length,
117
+ invalidURLs: results.filter(r => !r.isValid).length,
118
+ averageResponseTime: results.reduce((sum, r) => sum + (r.responseTime || 0), 0) / results.length,
119
+ successRate: (results.filter(r => r.isValid).length / results.length) * 100
120
+ };
121
+ const resultData = {
122
+ summary,
123
+ options: {
124
+ timeout,
125
+ followRedirects,
126
+ checkSSL,
127
+ userAgent
128
+ },
129
+ results,
130
+ validatedAt: new Date().toISOString()
131
+ };
132
+ return {
133
+ Success: true,
134
+ ResultCode: "SUCCESS",
135
+ Message: JSON.stringify(resultData, null, 2)
136
+ };
137
+ }
138
+ catch (error) {
139
+ return {
140
+ Success: false,
141
+ Message: `Failed to validate URLs: ${error instanceof Error ? error.message : String(error)}`,
142
+ ResultCode: "FAILED"
143
+ };
144
+ }
145
+ }
146
+ /**
147
+ * Validates a single URL
148
+ */
149
+ async validateURL(url, timeout, followRedirects, checkSSL, userAgent) {
150
+ const startTime = Date.now();
151
+ const result = {
152
+ url: url.trim(),
153
+ isValid: false,
154
+ responseTime: null,
155
+ statusCode: null,
156
+ statusText: null,
157
+ error: null,
158
+ redirects: [],
159
+ headers: {},
160
+ ssl: null,
161
+ finalUrl: null
162
+ };
163
+ try {
164
+ // Basic URL validation
165
+ let parsedUrl;
166
+ try {
167
+ parsedUrl = new URL(result.url);
168
+ if (!['http:', 'https:'].includes(parsedUrl.protocol)) {
169
+ throw new Error('Only HTTP and HTTPS URLs are supported');
170
+ }
171
+ }
172
+ catch (error) {
173
+ result.error = `Invalid URL format: ${error instanceof Error ? error.message : String(error)}`;
174
+ return result;
175
+ }
176
+ // Create AbortController for timeout
177
+ const controller = new AbortController();
178
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
179
+ try {
180
+ const response = await fetch(result.url, {
181
+ method: 'HEAD', // Use HEAD to minimize data transfer
182
+ headers: {
183
+ 'User-Agent': userAgent
184
+ },
185
+ redirect: followRedirects ? 'follow' : 'manual',
186
+ signal: controller.signal
187
+ });
188
+ clearTimeout(timeoutId);
189
+ result.responseTime = Date.now() - startTime;
190
+ result.statusCode = response.status;
191
+ result.statusText = response.statusText;
192
+ result.finalUrl = response.url;
193
+ // Extract response headers
194
+ response.headers.forEach((value, name) => {
195
+ result.headers[name] = value;
196
+ });
197
+ // Check if URL is valid (2xx or 3xx status codes)
198
+ result.isValid = response.status >= 200 && response.status < 400;
199
+ // Handle redirects
200
+ if (response.redirected) {
201
+ result.redirects.push({
202
+ from: result.url,
203
+ to: result.finalUrl,
204
+ statusCode: result.statusCode
205
+ });
206
+ }
207
+ // SSL information for HTTPS URLs
208
+ if (parsedUrl.protocol === 'https:' && checkSSL) {
209
+ result.ssl = await this.checkSSL(parsedUrl.hostname);
210
+ }
211
+ }
212
+ catch (fetchError) {
213
+ clearTimeout(timeoutId);
214
+ result.responseTime = Date.now() - startTime;
215
+ if (fetchError instanceof Error) {
216
+ if (fetchError.name === 'AbortError') {
217
+ result.error = `Request timed out after ${timeout}ms`;
218
+ }
219
+ else {
220
+ result.error = fetchError.message;
221
+ }
222
+ }
223
+ else {
224
+ result.error = String(fetchError);
225
+ }
226
+ }
227
+ }
228
+ catch (error) {
229
+ result.error = error instanceof Error ? error.message : String(error);
230
+ result.responseTime = Date.now() - startTime;
231
+ }
232
+ return result;
233
+ }
234
+ /**
235
+ * Performs basic SSL certificate check
236
+ */
237
+ async checkSSL(hostname) {
238
+ try {
239
+ // Simple SSL check by making a request and checking for SSL errors
240
+ const controller = new AbortController();
241
+ const timeoutId = setTimeout(() => controller.abort(), 5000);
242
+ try {
243
+ const response = await fetch(`https://${hostname}`, {
244
+ method: 'HEAD',
245
+ signal: controller.signal
246
+ });
247
+ clearTimeout(timeoutId);
248
+ return {
249
+ isValid: true,
250
+ hostname,
251
+ protocol: 'TLS',
252
+ error: null
253
+ };
254
+ }
255
+ catch (error) {
256
+ clearTimeout(timeoutId);
257
+ return {
258
+ isValid: false,
259
+ hostname,
260
+ protocol: 'TLS',
261
+ error: error instanceof Error ? error.message : String(error)
262
+ };
263
+ }
264
+ }
265
+ catch (error) {
266
+ return {
267
+ isValid: false,
268
+ hostname,
269
+ protocol: 'TLS',
270
+ error: error instanceof Error ? error.message : String(error)
271
+ };
272
+ }
273
+ }
274
+ };
275
+ exports.URLLinkValidatorAction = URLLinkValidatorAction;
276
+ exports.URLLinkValidatorAction = URLLinkValidatorAction = __decorate([
277
+ (0, global_1.RegisterClass)(actions_1.BaseAction, "__URLLinkValidator")
278
+ ], URLLinkValidatorAction);
279
+ /**
280
+ * Loader function to ensure the URLLinkValidatorAction class is included in the bundle.
281
+ */
282
+ function LoadURLLinkValidatorAction() {
283
+ // this function is a stub that is used to force the bundler to include the above class in the final bundle and not tree shake them out
284
+ }
285
+ exports.LoadURLLinkValidatorAction = LoadURLLinkValidatorAction;
286
+ //# sourceMappingURL=url-link-validator.action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-link-validator.action.js","sourceRoot":"","sources":["../../../src/custom/web/url-link-validator.action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ import { ActionResultSimple, RunActionParams } from "@memberjunction/actions-base";
2
+ import { BaseAction } from "@memberjunction/actions";
3
+ /**
4
+ * Action that extracts comprehensive metadata from web pages including OpenGraph, Twitter Cards,
5
+ * Schema.org structured data, and standard HTML meta tags
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // Extract all metadata from a webpage
10
+ * await runAction({
11
+ * ActionName: 'URL Metadata Extractor',
12
+ * Params: [{
13
+ * Name: 'URL',
14
+ * Value: 'https://example.com/article'
15
+ * }]
16
+ * });
17
+ *
18
+ * // Extract specific metadata types
19
+ * await runAction({
20
+ * ActionName: 'URL Metadata Extractor',
21
+ * Params: [{
22
+ * Name: 'URL',
23
+ * Value: 'https://news.site.com/story'
24
+ * }, {
25
+ * Name: 'IncludeOpenGraph',
26
+ * Value: true
27
+ * }, {
28
+ * Name: 'IncludeSchemaOrg',
29
+ * Value: false
30
+ * }]
31
+ * });
32
+ * ```
33
+ */
34
+ export declare class URLMetadataExtractorAction extends BaseAction {
35
+ private readonly TIMEOUT;
36
+ private readonly MAX_CONTENT_SIZE;
37
+ /**
38
+ * Executes metadata extraction from the specified URL
39
+ *
40
+ * @param params - The action parameters containing:
41
+ * - URL: Web page URL to extract metadata from (required)
42
+ * - IncludeOpenGraph: Extract OpenGraph metadata (default: true)
43
+ * - IncludeTwitterCards: Extract Twitter Card metadata (default: true)
44
+ * - IncludeSchemaOrg: Extract Schema.org JSON-LD data (default: true)
45
+ * - IncludeBasicMeta: Extract standard HTML meta tags (default: true)
46
+ * - IncludeFavicon: Extract favicon information (default: true)
47
+ *
48
+ * @returns Comprehensive metadata extracted from the webpage
49
+ */
50
+ protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
51
+ /**
52
+ * Extracts all types of metadata from HTML content
53
+ */
54
+ private extractAllMetadata;
55
+ /**
56
+ * Extracts basic HTML metadata
57
+ */
58
+ private extractBasicMetadata;
59
+ /**
60
+ * Extracts OpenGraph metadata
61
+ */
62
+ private extractOpenGraphMetadata;
63
+ /**
64
+ * Extracts Twitter Card metadata
65
+ */
66
+ private extractTwitterCardMetadata;
67
+ /**
68
+ * Extracts Schema.org JSON-LD structured data
69
+ */
70
+ private extractSchemaOrgMetadata;
71
+ /**
72
+ * Extracts favicon information
73
+ */
74
+ private extractFaviconMetadata;
75
+ /**
76
+ * Extracts all links from the page
77
+ */
78
+ private extractLinks;
79
+ /**
80
+ * Extracts image information
81
+ */
82
+ private extractImages;
83
+ /**
84
+ * Extracts language information
85
+ */
86
+ private extractLanguage;
87
+ /**
88
+ * Extracts viewport information
89
+ */
90
+ private extractViewport;
91
+ /**
92
+ * Resolves relative URLs to absolute URLs
93
+ */
94
+ private resolveUrl;
95
+ /**
96
+ * Cleans and normalizes text content
97
+ */
98
+ private cleanText;
99
+ }
100
+ /**
101
+ * Loader function to ensure the URLMetadataExtractorAction class is included in the bundle.
102
+ */
103
+ export declare function LoadURLMetadataExtractorAction(): void;
104
+ //# sourceMappingURL=url-metadata-extractor.action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-metadata-extractor.action.d.ts","sourceRoot":"","sources":["../../../src/custom/web/url-metadata-extractor.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBACa,0BAA2B,SAAQ,UAAU;IAEtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IAEpD;;;;;;;;;;;;OAYG;cACa,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAqIvF;;OAEG;YACW,kBAAkB;IAwChC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+C5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA0BhC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAclC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAiBhC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwC9B;;OAEG;IACH,OAAO,CAAC,YAAY;IAqBpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAsBrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,OAAO,CAAC,SAAS;CAYpB;AAED;;GAEG;AACH,wBAAgB,8BAA8B,SAE7C"}