@yoryoboy/bi-mcp 1.8.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/index.js +15 -4
- package/dist/index.js.map +2 -2
- package/dist/mcp-use.json +6 -3
- package/dist/src/services/mercadolibre/mercadolibre-billing.js +77 -0
- package/dist/src/services/mercadolibre/mercadolibre-billing.js.map +7 -0
- package/dist/src/services/mercadolibre/mercadolibre-items.js.map +2 -2
- package/dist/src/services/mercadolibre/mercadolibre-orders.js +18 -0
- package/dist/src/services/mercadolibre/mercadolibre-orders.js.map +2 -2
- package/dist/src/tools/mercadolibre/estimate-listing-fee.js +26 -21
- package/dist/src/tools/mercadolibre/estimate-listing-fee.js.map +2 -2
- package/dist/src/tools/mercadolibre/estimate-product-profitability.js +546 -0
- package/dist/src/tools/mercadolibre/estimate-product-profitability.js.map +7 -0
- package/dist/src/tools/mercadolibre/get-item-details.js +3 -25
- package/dist/src/tools/mercadolibre/get-item-details.js.map +2 -2
- package/dist/src/tools/mercadolibre/get-sales-by-item.js +129 -14
- package/dist/src/tools/mercadolibre/get-sales-by-item.js.map +2 -2
- package/dist/src/tools/mercadolibre/get-sales-trend.js +137 -14
- package/dist/src/tools/mercadolibre/get-sales-trend.js.map +2 -2
- package/dist/src/tools/mercadolibre/get-shipping-summary.js +450 -57
- package/dist/src/tools/mercadolibre/get-shipping-summary.js.map +2 -2
- package/dist/src/tools/mercadolibre/index.js +1 -0
- package/dist/src/tools/mercadolibre/index.js.map +2 -2
- package/dist/src/tools/mercadolibre/listing-fee-helpers.js +265 -0
- package/dist/src/tools/mercadolibre/listing-fee-helpers.js.map +7 -0
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/services/mercadolibre/mercadolibre-orders.ts"],
|
|
4
|
-
"sourcesContent": ["import type { AxiosInstance } from \"axios\";\n\nimport {\n getMercadoLibreApiContext,\n runMercadoLibreBatch,\n type MercadoLibreDocumentsBatchResult,\n type MercadoLibreBatchFetchOptions,\n} from \"./mercadolibre-api.js\";\n\nexport interface MercadoLibreOrdersSearchParams {\n seller: string;\n from: string;\n to: string;\n status?: string;\n q?: string;\n sort?: string;\n offset?: number;\n limit?: number;\n}\n\nfunction orderSearchParams(params: MercadoLibreOrdersSearchParams) {\n return {\n seller: params.seller,\n \"order.date_created.from\": `${params.from}T00:00:00.000-00:00`,\n \"order.date_created.to\": `${params.to}T23:59:59.999-00:00`,\n \"order.status\": params.status,\n q: params.q,\n sort: params.sort,\n offset: params.offset ?? 0,\n limit: params.limit ?? 50,\n };\n}\n\nasync function fetchOrder(api: AxiosInstance, orderId: string): Promise<Record<string, unknown>> {\n const response = await api.get<Record<string, unknown>>(`/orders/${orderId}`);\n return response.data;\n}\n\nasync function fetchOrdersPage(\n api: AxiosInstance,\n params: MercadoLibreOrdersSearchParams\n): Promise<Record<string, unknown>> {\n const response = await api.get<Record<string, unknown>>(\"/orders/search\", {\n params: orderSearchParams(params),\n });\n return response.data;\n}\n\nexport async function searchMercadoLibreOrders(\n profileId: string,\n params: MercadoLibreOrdersSearchParams\n) {\n const { api, sellerId } = await getMercadoLibreApiContext(profileId);\n return fetchOrdersPage(api, { ...params, seller: params.seller || sellerId });\n}\n\nexport async function searchMercadoLibreOrdersBatch(\n profileId: string,\n params: MercadoLibreOrdersSearchParams,\n offsets: number[],\n options: MercadoLibreBatchFetchOptions = {}\n): Promise<MercadoLibreDocumentsBatchResult<Record<string, unknown>>> {\n const { api, sellerId } = await getMercadoLibreApiContext(profileId);\n const seller = params.seller || sellerId;\n const offsetIds = offsets.map((offset) => String(offset));\n\n return runMercadoLibreBatch(\n offsetIds,\n (offsetId) => fetchOrdersPage(api, { ...params, seller, offset: Number(offsetId) }),\n options\n );\n}\n\nexport async function getMercadoLibreOrder(profileId: string, orderId: string) {\n const { api } = await getMercadoLibreApiContext(profileId);\n return fetchOrder(api, orderId);\n}\n\nexport async function getMercadoLibreOrderDetailsBatch(\n profileId: string,\n orderIds: string[],\n options: MercadoLibreBatchFetchOptions = {}\n) {\n const { api } = await getMercadoLibreApiContext(profileId);\n return runMercadoLibreBatch(orderIds, (orderId) => fetchOrder(api, orderId), options);\n}\n\nexport async function getMercadoLibreOrderShipments(profileId: string, orderId: string) {\n const { api } = await getMercadoLibreApiContext(profileId);\n const response = await api.get<Record<string, unknown>>(`/orders/${orderId}/shipments`);\n return response.data;\n}\n\nexport async function getMercadoLibreShipment(profileId: string, shipmentId: string) {\n const { api } = await getMercadoLibreApiContext(profileId);\n const response = await api.get<Record<string, unknown>>(`/shipments/${shipmentId}`);\n return response.data;\n}\n\nexport async function getMercadoLibreShipmentItems(profileId: string, shipmentId: string) {\n const { api } = await getMercadoLibreApiContext(profileId);\n const response = await api.get<Record<string, unknown>>(`/shipments/${shipmentId}/items`);\n return response.data;\n}\n\nexport async function getMercadoLibreShipmentCosts(profileId: string, shipmentId: string) {\n const { api } = await getMercadoLibreApiContext(profileId);\n const response = await api.get<Record<string, unknown>>(`/shipments/${shipmentId}/costs`);\n return response.data;\n}\n"],
|
|
5
|
-
"mappings": "AAEA;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAaP,SAAS,kBAAkB,QAAwC;AACjE,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,2BAA2B,GAAG,OAAO,IAAI;AAAA,IACzC,yBAAyB,GAAG,OAAO,EAAE;AAAA,IACrC,gBAAgB,OAAO;AAAA,IACvB,GAAG,OAAO;AAAA,IACV,MAAM,OAAO;AAAA,IACb,QAAQ,OAAO,UAAU;AAAA,IACzB,OAAO,OAAO,SAAS;AAAA,EACzB;AACF;AAEA,eAAe,WAAW,KAAoB,SAAmD;AAC/F,QAAM,WAAW,MAAM,IAAI,IAA6B,WAAW,OAAO,EAAE;AAC5E,SAAO,SAAS;AAClB;AAEA,eAAe,gBACb,KACA,QACkC;AAClC,QAAM,WAAW,MAAM,IAAI,IAA6B,kBAAkB;AAAA,IACxE,QAAQ,kBAAkB,MAAM;AAAA,EAClC,CAAC;AACD,SAAO,SAAS;AAClB;AAEA,eAAsB,yBACpB,WACA,QACA;AACA,QAAM,EAAE,KAAK,SAAS,IAAI,MAAM,0BAA0B,SAAS;AACnE,SAAO,gBAAgB,KAAK,EAAE,GAAG,QAAQ,QAAQ,OAAO,UAAU,SAAS,CAAC;AAC9E;AAEA,eAAsB,8BACpB,WACA,QACA,SACA,UAAyC,CAAC,GAC0B;AACpE,QAAM,EAAE,KAAK,SAAS,IAAI,MAAM,0BAA0B,SAAS;AACnE,QAAM,SAAS,OAAO,UAAU;AAChC,QAAM,YAAY,QAAQ,IAAI,CAAC,WAAW,OAAO,MAAM,CAAC;AAExD,SAAO;AAAA,IACL;AAAA,IACA,CAAC,aAAa,gBAAgB,KAAK,EAAE,GAAG,QAAQ,QAAQ,QAAQ,OAAO,QAAQ,EAAE,CAAC;AAAA,IAClF;AAAA,EACF;AACF;AAEA,eAAsB,qBAAqB,WAAmB,SAAiB;AAC7E,QAAM,EAAE,IAAI,IAAI,MAAM,0BAA0B,SAAS;AACzD,SAAO,WAAW,KAAK,OAAO;AAChC;AAEA,eAAsB,iCACpB,WACA,UACA,UAAyC,CAAC,GAC1C;AACA,QAAM,EAAE,IAAI,IAAI,MAAM,0BAA0B,SAAS;AACzD,SAAO,qBAAqB,UAAU,CAAC,YAAY,WAAW,KAAK,OAAO,GAAG,OAAO;AACtF;AAEA,eAAsB,8BAA8B,WAAmB,SAAiB;AACtF,QAAM,EAAE,IAAI,IAAI,MAAM,0BAA0B,SAAS;AACzD,QAAM,WAAW,MAAM,IAAI,IAA6B,WAAW,OAAO,YAAY;AACtF,SAAO,SAAS;AAClB;AAEA,eAAsB,wBAAwB,WAAmB,YAAoB;AACnF,QAAM,EAAE,IAAI,IAAI,MAAM,0BAA0B,SAAS;AACzD,QAAM,WAAW,MAAM,IAAI,IAA6B,cAAc,UAAU,EAAE;AAClF,SAAO,SAAS;AAClB;AAEA,eAAsB,6BAA6B,WAAmB,YAAoB;AACxF,QAAM,EAAE,IAAI,IAAI,MAAM,0BAA0B,SAAS;AACzD,QAAM,WAAW,MAAM,IAAI,IAA6B,cAAc,UAAU,QAAQ;AACxF,SAAO,SAAS;AAClB;AAEA,eAAsB,6BAA6B,WAAmB,YAAoB;AACxF,QAAM,EAAE,IAAI,IAAI,MAAM,0BAA0B,SAAS;AACzD,QAAM,WAAW,MAAM,IAAI,IAA6B,cAAc,UAAU,QAAQ;AACxF,SAAO,SAAS;AAClB;",
|
|
4
|
+
"sourcesContent": ["import type { AxiosInstance } from \"axios\";\n\nimport {\n getMercadoLibreApiContext,\n runMercadoLibreBatch,\n type MercadoLibreDocumentsBatchResult,\n type MercadoLibreBatchFetchOptions,\n} from \"./mercadolibre-api.js\";\n\nexport interface MercadoLibreOrdersSearchParams {\n seller: string;\n from: string;\n to: string;\n status?: string;\n q?: string;\n sort?: string;\n offset?: number;\n limit?: number;\n}\n\nfunction orderSearchParams(params: MercadoLibreOrdersSearchParams) {\n return {\n seller: params.seller,\n \"order.date_created.from\": `${params.from}T00:00:00.000-00:00`,\n \"order.date_created.to\": `${params.to}T23:59:59.999-00:00`,\n \"order.status\": params.status,\n q: params.q,\n sort: params.sort,\n offset: params.offset ?? 0,\n limit: params.limit ?? 50,\n };\n}\n\nasync function fetchOrder(api: AxiosInstance, orderId: string): Promise<Record<string, unknown>> {\n const response = await api.get<Record<string, unknown>>(`/orders/${orderId}`);\n return response.data;\n}\n\nasync function fetchOrdersPage(\n api: AxiosInstance,\n params: MercadoLibreOrdersSearchParams\n): Promise<Record<string, unknown>> {\n const response = await api.get<Record<string, unknown>>(\"/orders/search\", {\n params: orderSearchParams(params),\n });\n return response.data;\n}\n\nexport async function searchMercadoLibreOrders(\n profileId: string,\n params: MercadoLibreOrdersSearchParams\n) {\n const { api, sellerId } = await getMercadoLibreApiContext(profileId);\n return fetchOrdersPage(api, { ...params, seller: params.seller || sellerId });\n}\n\nexport async function searchMercadoLibreOrdersBatch(\n profileId: string,\n params: MercadoLibreOrdersSearchParams,\n offsets: number[],\n options: MercadoLibreBatchFetchOptions = {}\n): Promise<MercadoLibreDocumentsBatchResult<Record<string, unknown>>> {\n const { api, sellerId } = await getMercadoLibreApiContext(profileId);\n const seller = params.seller || sellerId;\n const offsetIds = offsets.map((offset) => String(offset));\n\n return runMercadoLibreBatch(\n offsetIds,\n (offsetId) => fetchOrdersPage(api, { ...params, seller, offset: Number(offsetId) }),\n options\n );\n}\n\nexport async function getMercadoLibreOrder(profileId: string, orderId: string) {\n const { api } = await getMercadoLibreApiContext(profileId);\n return fetchOrder(api, orderId);\n}\n\nexport async function getMercadoLibreOrderDetailsBatch(\n profileId: string,\n orderIds: string[],\n options: MercadoLibreBatchFetchOptions = {}\n) {\n const { api } = await getMercadoLibreApiContext(profileId);\n return runMercadoLibreBatch(orderIds, (orderId) => fetchOrder(api, orderId), options);\n}\n\nexport async function getMercadoLibreOrderShipments(profileId: string, orderId: string) {\n const { api } = await getMercadoLibreApiContext(profileId);\n const response = await api.get<Record<string, unknown>>(`/orders/${orderId}/shipments`);\n return response.data;\n}\n\nexport async function getMercadoLibreShipment(profileId: string, shipmentId: string) {\n const { api } = await getMercadoLibreApiContext(profileId);\n const response = await api.get<Record<string, unknown>>(`/shipments/${shipmentId}`);\n return response.data;\n}\n\nexport async function getMercadoLibreShipmentBatch(\n profileId: string,\n shipmentIds: string[],\n options: MercadoLibreBatchFetchOptions = {}\n) {\n const { api } = await getMercadoLibreApiContext(profileId);\n return runMercadoLibreBatch(\n shipmentIds,\n (shipmentId) => api.get<Record<string, unknown>>(`/shipments/${shipmentId}`).then((response) => response.data),\n options\n );\n}\n\nexport async function getMercadoLibreShipmentItems(profileId: string, shipmentId: string) {\n const { api } = await getMercadoLibreApiContext(profileId);\n const response = await api.get<Record<string, unknown>>(`/shipments/${shipmentId}/items`);\n return response.data;\n}\n\nexport async function getMercadoLibreShipmentCosts(profileId: string, shipmentId: string) {\n const { api } = await getMercadoLibreApiContext(profileId);\n const response = await api.get<Record<string, unknown>>(`/shipments/${shipmentId}/costs`);\n return response.data;\n}\n\nexport async function getMercadoLibreShipmentCostsBatch(\n profileId: string,\n shipmentIds: string[],\n options: MercadoLibreBatchFetchOptions = {}\n) {\n const { api } = await getMercadoLibreApiContext(profileId);\n return runMercadoLibreBatch(\n shipmentIds,\n (shipmentId) =>\n api.get<Record<string, unknown>>(`/shipments/${shipmentId}/costs`).then((response) => response.data),\n options\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import { error, object } from "mcp-use/server";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { formatMercadoLibreError } from "../../services/mercadolibre/mercadolibre-api.js";
|
|
4
|
-
import { estimateMercadoLibreListingPrice } from "../../services/mercadolibre/mercadolibre-items.js";
|
|
5
4
|
import { stripNulls } from "../../utils/strip-payload.js";
|
|
6
|
-
import {
|
|
5
|
+
import { buildMercadoLibreListingFeeEstimate } from "./listing-fee-helpers.js";
|
|
7
6
|
import { resolveMercadoLibreProfileOrSelection } from "./profile-resolution.js";
|
|
8
7
|
import { mercadolibreProfileIdSchemaField } from "./write-helpers.js";
|
|
9
8
|
const meliEstimateListingFeeSchema = z.object({
|
|
10
9
|
profileId: mercadolibreProfileIdSchemaField,
|
|
11
|
-
|
|
10
|
+
itemId: z.string().trim().min(1).optional().describe("Optional MercadoLibre item id. When provided, the tool autocompletes price, category, listing type, shipping mode, logistics, and package weight from the listing."),
|
|
11
|
+
query: z.string().trim().min(2).optional().describe("Optional product search phrase used to suggest MercadoLibre category candidates when categoryId is missing."),
|
|
12
|
+
price: z.number().positive().optional().describe("Product price used to estimate MercadoLibre fees. Overrides item price when itemId is provided."),
|
|
13
|
+
categoryId: z.string().trim().min(1).optional().describe("MercadoLibre category id. Improves fee precision and can change fixed fees and percentage fees."),
|
|
14
|
+
listingTypeId: z.string().trim().min(1).optional().describe("MercadoLibre listing type id, for example gold_special (Cl\xE1sica) or gold_pro (Premium). If omitted, MercadoLibre may return all listing types."),
|
|
15
|
+
shippingMode: z.string().trim().min(1).optional().describe("MercadoLibre shipping mode, for example me2. In Argentina this helps produce more accurate charges."),
|
|
16
|
+
logisticType: z.string().trim().min(1).optional().describe("MercadoLibre logistic type, for example fulfillment, drop_off, xd_drop_off, self_service, or default."),
|
|
17
|
+
billableWeight: z.number().positive().optional().describe("Billable package weight in grams. MercadoLibre Argentina uses this for more precise charges."),
|
|
18
|
+
currencyId: z.string().trim().min(3).optional().describe("Currency id for the quote. Defaults to item currency or ARS."),
|
|
19
|
+
tags: z.array(z.string().trim().min(1)).optional().describe("Optional MercadoLibre listing price tags such as installment/campaign tags when known.")
|
|
12
20
|
});
|
|
13
21
|
async function meliEstimateListingFeeHandler(params) {
|
|
14
22
|
try {
|
|
@@ -16,25 +24,22 @@ async function meliEstimateListingFeeHandler(params) {
|
|
|
16
24
|
if (!profileResolution.ok) {
|
|
17
25
|
return profileResolution.response;
|
|
18
26
|
}
|
|
19
|
-
const quotes = await estimateMercadoLibreListingPrice(profileResolution.value.profileId, {
|
|
20
|
-
price: params.price
|
|
21
|
-
});
|
|
22
27
|
return object(
|
|
23
|
-
stripNulls(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
})
|
|
37
|
-
|
|
28
|
+
stripNulls(
|
|
29
|
+
await buildMercadoLibreListingFeeEstimate({
|
|
30
|
+
profileId: profileResolution.value.profileId,
|
|
31
|
+
itemId: params.itemId,
|
|
32
|
+
query: params.query,
|
|
33
|
+
price: params.price,
|
|
34
|
+
categoryId: params.categoryId,
|
|
35
|
+
listingTypeId: params.listingTypeId,
|
|
36
|
+
shippingMode: params.shippingMode,
|
|
37
|
+
logisticType: params.logisticType,
|
|
38
|
+
billableWeight: params.billableWeight,
|
|
39
|
+
currencyId: params.currencyId,
|
|
40
|
+
tags: params.tags
|
|
41
|
+
})
|
|
42
|
+
)
|
|
38
43
|
);
|
|
39
44
|
} catch (err) {
|
|
40
45
|
return error(formatMercadoLibreError(err, "Failed to estimate MercadoLibre listing fee"));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/tools/mercadolibre/estimate-listing-fee.ts"],
|
|
4
|
-
"sourcesContent": ["import { error, object } from \"mcp-use/server\";\nimport { z } from \"zod\";\n\nimport { formatMercadoLibreError } from \"../../services/mercadolibre/mercadolibre-api.js\";\nimport {
|
|
5
|
-
"mappings": "AAAA,SAAS,OAAO,cAAc;AAC9B,SAAS,SAAS;AAElB,SAAS,+BAA+B;AACxC,SAAS,
|
|
4
|
+
"sourcesContent": ["import { error, object } from \"mcp-use/server\";\nimport { z } from \"zod\";\n\nimport { formatMercadoLibreError } from \"../../services/mercadolibre/mercadolibre-api.js\";\nimport { stripNulls } from \"../../utils/strip-payload.js\";\nimport { buildMercadoLibreListingFeeEstimate } from \"./listing-fee-helpers.js\";\nimport { resolveMercadoLibreProfileOrSelection } from \"./profile-resolution.js\";\nimport { mercadolibreProfileIdSchemaField } from \"./write-helpers.js\";\n\nexport const meliEstimateListingFeeSchema = z.object({\n profileId: mercadolibreProfileIdSchemaField,\n itemId: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\"Optional MercadoLibre item id. When provided, the tool autocompletes price, category, listing type, shipping mode, logistics, and package weight from the listing.\"),\n query: z\n .string()\n .trim()\n .min(2)\n .optional()\n .describe(\"Optional product search phrase used to suggest MercadoLibre category candidates when categoryId is missing.\"),\n price: z\n .number()\n .positive()\n .optional()\n .describe(\"Product price used to estimate MercadoLibre fees. Overrides item price when itemId is provided.\"),\n categoryId: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\"MercadoLibre category id. Improves fee precision and can change fixed fees and percentage fees.\"),\n listingTypeId: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\"MercadoLibre listing type id, for example gold_special (Cl\u00E1sica) or gold_pro (Premium). If omitted, MercadoLibre may return all listing types.\"),\n shippingMode: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\"MercadoLibre shipping mode, for example me2. In Argentina this helps produce more accurate charges.\"),\n logisticType: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\"MercadoLibre logistic type, for example fulfillment, drop_off, xd_drop_off, self_service, or default.\"),\n billableWeight: z\n .number()\n .positive()\n .optional()\n .describe(\"Billable package weight in grams. MercadoLibre Argentina uses this for more precise charges.\"),\n currencyId: z\n .string()\n .trim()\n .min(3)\n .optional()\n .describe(\"Currency id for the quote. Defaults to item currency or ARS.\"),\n tags: z\n .array(z.string().trim().min(1))\n .optional()\n .describe(\"Optional MercadoLibre listing price tags such as installment/campaign tags when known.\"),\n});\n\nexport async function meliEstimateListingFeeHandler(\n params: z.infer<typeof meliEstimateListingFeeSchema>\n) {\n try {\n const profileResolution = await resolveMercadoLibreProfileOrSelection(params.profileId);\n if (!profileResolution.ok) {\n return profileResolution.response;\n }\n\n return object(\n stripNulls(\n await buildMercadoLibreListingFeeEstimate({\n profileId: profileResolution.value.profileId,\n itemId: params.itemId,\n query: params.query,\n price: params.price,\n categoryId: params.categoryId,\n listingTypeId: params.listingTypeId,\n shippingMode: params.shippingMode,\n logisticType: params.logisticType,\n billableWeight: params.billableWeight,\n currencyId: params.currencyId,\n tags: params.tags,\n })\n ) as unknown as Record<string, unknown>\n );\n } catch (err) {\n return error(formatMercadoLibreError(err, \"Failed to estimate MercadoLibre listing fee\"));\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,OAAO,cAAc;AAC9B,SAAS,SAAS;AAElB,SAAS,+BAA+B;AACxC,SAAS,kBAAkB;AAC3B,SAAS,2CAA2C;AACpD,SAAS,6CAA6C;AACtD,SAAS,wCAAwC;AAE1C,MAAM,+BAA+B,EAAE,OAAO;AAAA,EACnD,WAAW;AAAA,EACX,QAAQ,EACL,OAAO,EACP,KAAK,EACL,IAAI,CAAC,EACL,SAAS,EACT,SAAS,oKAAoK;AAAA,EAChL,OAAO,EACJ,OAAO,EACP,KAAK,EACL,IAAI,CAAC,EACL,SAAS,EACT,SAAS,6GAA6G;AAAA,EACzH,OAAO,EACJ,OAAO,EACP,SAAS,EACT,SAAS,EACT,SAAS,iGAAiG;AAAA,EAC7G,YAAY,EACT,OAAO,EACP,KAAK,EACL,IAAI,CAAC,EACL,SAAS,EACT,SAAS,iGAAiG;AAAA,EAC7G,eAAe,EACZ,OAAO,EACP,KAAK,EACL,IAAI,CAAC,EACL,SAAS,EACT,SAAS,mJAAgJ;AAAA,EAC5J,cAAc,EACX,OAAO,EACP,KAAK,EACL,IAAI,CAAC,EACL,SAAS,EACT,SAAS,qGAAqG;AAAA,EACjH,cAAc,EACX,OAAO,EACP,KAAK,EACL,IAAI,CAAC,EACL,SAAS,EACT,SAAS,uGAAuG;AAAA,EACnH,gBAAgB,EACb,OAAO,EACP,SAAS,EACT,SAAS,EACT,SAAS,8FAA8F;AAAA,EAC1G,YAAY,EACT,OAAO,EACP,KAAK,EACL,IAAI,CAAC,EACL,SAAS,EACT,SAAS,8DAA8D;AAAA,EAC1E,MAAM,EACH,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,EAC9B,SAAS,EACT,SAAS,wFAAwF;AACtG,CAAC;AAED,eAAsB,8BACpB,QACA;AACA,MAAI;AACF,UAAM,oBAAoB,MAAM,sCAAsC,OAAO,SAAS;AACtF,QAAI,CAAC,kBAAkB,IAAI;AACzB,aAAO,kBAAkB;AAAA,IAC3B;AAEA,WAAO;AAAA,MACL;AAAA,QACE,MAAM,oCAAoC;AAAA,UACxC,WAAW,kBAAkB,MAAM;AAAA,UACnC,QAAQ,OAAO;AAAA,UACf,OAAO,OAAO;AAAA,UACd,OAAO,OAAO;AAAA,UACd,YAAY,OAAO;AAAA,UACnB,eAAe,OAAO;AAAA,UACtB,cAAc,OAAO;AAAA,UACrB,cAAc,OAAO;AAAA,UACrB,gBAAgB,OAAO;AAAA,UACvB,YAAY,OAAO;AAAA,UACnB,MAAM,OAAO;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,SAAS,KAAK;AACZ,WAAO,MAAM,wBAAwB,KAAK,6CAA6C,CAAC;AAAA,EAC1F;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|