@clarvivo/mcp 0.1.1 → 0.3.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.
@@ -0,0 +1,131 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { detectFramework } from "./frameworks.js";
4
+ export const revenueProviders = ["stripe", "polar", "razorpay", "paddle", "lemonsqueezy", "dodo"];
5
+ const packages = [
6
+ ["stripe", "stripe"],
7
+ ["@polar-sh/sdk", "polar"],
8
+ ["razorpay", "razorpay"],
9
+ ["@paddle/paddle-node-sdk", "paddle"],
10
+ ["@lemonsqueezy/lemonsqueezy.js", "lemonsqueezy"],
11
+ ["dodopayments", "dodo"],
12
+ ];
13
+ const aliases = {
14
+ stripe: "stripe",
15
+ polar: "polar",
16
+ "polar.sh": "polar",
17
+ razorpay: "razorpay",
18
+ paddle: "paddle",
19
+ lemonsqueezy: "lemonsqueezy",
20
+ "lemon-squeezy": "lemonsqueezy",
21
+ dodo: "dodo",
22
+ dodopayments: "dodo",
23
+ custom: "custom",
24
+ };
25
+ function dependencies(root) {
26
+ try {
27
+ const pkg = JSON.parse(fs.readFileSync(path.join(root, "package.json"), "utf8"));
28
+ return { ...pkg.dependencies, ...pkg.devDependencies };
29
+ }
30
+ catch {
31
+ return {};
32
+ }
33
+ }
34
+ export function normalizeProvider(value) {
35
+ const provider = aliases[value.trim().toLowerCase()];
36
+ if (!provider)
37
+ throw new Error(`Unsupported payment provider "${value}". Use ${revenueProviders.join(", ")}, or custom.`);
38
+ return provider;
39
+ }
40
+ export function detectRevenueProvider(root = process.cwd()) {
41
+ const deps = dependencies(root);
42
+ const match = packages.find(([packageName]) => Boolean(deps[packageName]));
43
+ return match ? { packageName: match[0], provider: match[1] } : undefined;
44
+ }
45
+ export function detectServerFramework(root = process.cwd()) {
46
+ const framework = detectFramework(root);
47
+ if (framework?.framework === "next-app")
48
+ return "next-route-handler";
49
+ if (framework?.framework === "next-pages")
50
+ return "next-api-route";
51
+ const deps = dependencies(root);
52
+ if (deps.express)
53
+ return "express";
54
+ if (deps.serverless || deps["@netlify/functions"] || deps["@vercel/node"] || fs.existsSync(path.join(root, "serverless.yml")))
55
+ return "serverless";
56
+ return "generic";
57
+ }
58
+ const providerDetails = {
59
+ stripe: {
60
+ events: ["checkout.session.completed", "payment_intent.succeeded", "charge.refunded"],
61
+ dashboard: "Stripe Dashboard → Workbench → Webhooks → open this endpoint → Reveal secret",
62
+ },
63
+ lemonsqueezy: {
64
+ events: ["order_created", "order_refunded", "subscription_payment_success"],
65
+ dashboard: "Lemon Squeezy Dashboard → Settings → Webhooks → create/open this webhook → Signing secret",
66
+ },
67
+ polar: {
68
+ events: ["order.created", "subscription.created", "subscription.updated", "order.refunded"],
69
+ dashboard: "Polar Dashboard → organization Settings → Developers → Webhooks → create/open the endpoint → Secret",
70
+ },
71
+ paddle: {
72
+ events: ["transaction.completed", "adjustment.created", "adjustment.updated"],
73
+ dashboard: "Paddle Dashboard → Developer tools → Notifications → create/open the notification destination → Secret key",
74
+ },
75
+ razorpay: {
76
+ events: ["payment.captured", "refund.created"],
77
+ dashboard: "Razorpay Dashboard → Account & Settings → Webhooks → create/open the webhook → Secret",
78
+ },
79
+ dodo: {
80
+ events: ["payment.succeeded", "refund.succeeded"],
81
+ dashboard: "Dodo Payments Dashboard → Developer → Webhooks → create/open the endpoint → Signing secret",
82
+ },
83
+ };
84
+ function checkoutEdit(provider) {
85
+ const fields = "utm_source, utm_medium, utm_campaign";
86
+ switch (provider) {
87
+ case "stripe":
88
+ return `const session = await stripe.checkout.sessions.create({\n ...checkoutOptions,\n client_reference_id: clvVid,\n metadata: { ${fields} },\n});`;
89
+ case "polar":
90
+ return `const checkout = await polar.checkouts.create({\n ...checkoutOptions,\n metadata: { clv_visitor_id: clvVid, ${fields} },\n});`;
91
+ case "razorpay":
92
+ return `const order = await razorpay.orders.create({\n ...orderOptions,\n notes: { clv_visitor_id: clvVid, ${fields} },\n});`;
93
+ case "paddle":
94
+ return `const transaction = await paddle.transactions.create({\n ...transactionOptions,\n customData: { clv_visitor_id: clvVid, ${fields} }, // Paddle custom_data\n});`;
95
+ case "lemonsqueezy":
96
+ return `const checkout = await createCheckout(storeId, variantId, {\n ...checkoutOptions,\n checkoutData: { custom: { clv_visitor_id: clvVid, ${fields} } }, // checkout_data.custom\n});`;
97
+ case "dodo":
98
+ return `const payment = await client.payments.create({\n ...paymentOptions,\n metadata: { clv_visitor_id: clvVid, ${fields} },\n});`;
99
+ }
100
+ }
101
+ function serverEdit(provider, framework) {
102
+ const prelude = framework === "next-route-handler"
103
+ ? `// In app/api/checkout/route.ts\nexport async function POST(request: Request) {\n const { clvVid, utm_source, utm_medium, utm_campaign } = await request.json();`
104
+ : framework === "next-api-route"
105
+ ? `// In pages/api/checkout.ts\nexport default async function handler(req, res) {\n const { clvVid, utm_source, utm_medium, utm_campaign } = req.body;`
106
+ : framework === "express"
107
+ ? `// In the Express checkout POST handler\napp.post("/api/checkout", async (req, res) => {\n const { clvVid, utm_source, utm_medium, utm_campaign } = req.body;`
108
+ : framework === "serverless"
109
+ ? `// In the checkout serverless function\nexport async function handler(event) {\n const { clvVid, utm_source, utm_medium, utm_campaign } = JSON.parse(event.body || "{}");`
110
+ : `// In the server-side checkout handler\nconst { clvVid, utm_source, utm_medium, utm_campaign } = checkoutRequestBody;`;
111
+ const ending = framework === "next-route-handler" ? "\n // Keep your existing checkout response here.\n}"
112
+ : framework === "next-api-route" ? "\n // Keep your existing checkout response here.\n}"
113
+ : framework === "express" ? "\n // Keep your existing checkout response here.\n});"
114
+ : framework === "serverless" ? "\n // Keep your existing checkout response here.\n}"
115
+ : "";
116
+ return `${prelude}\n\n ${checkoutEdit(provider).replace(/\n/g, "\n ")}${ending}`;
117
+ }
118
+ const browserAttribution = `// In the browser, immediately before calling your checkout endpoint\nconst params = new URLSearchParams(window.location.search);\nconst attribution = {\n clvVid: localStorage.getItem("clv_vid") || undefined,\n utm_source: params.get("utm_source") || undefined,\n utm_medium: params.get("utm_medium") || undefined,\n utm_campaign: params.get("utm_campaign") || undefined,\n};\nawait fetch("/api/checkout", {\n method: "POST",\n headers: { "Content-Type": "application/json" },\n body: JSON.stringify(attribution),\n});`;
119
+ export function revenueChecklist(provider, webhookUrl, root = process.cwd()) {
120
+ const details = providerDetails[provider];
121
+ const framework = detectServerFramework(root);
122
+ return [
123
+ `Paste this webhook URL into ${provider}: ${webhookUrl}\nEnable: ${details.events.join(", ")}.`,
124
+ `${details.dashboard}. Paste that signing secret into Clarvivo at /dashboard/settings → Integrations — do not paste it here.`,
125
+ `Make this attribution edit. It is what makes revenue-by-channel work.\n\n${browserAttribution}\n\n${serverEdit(provider, framework)}`,
126
+ ];
127
+ }
128
+ export function signedRevenueSnippet(apiKey, baseUrl) {
129
+ return `// Server-side only. Keep CLARVIVO_INGEST_SECRET out of source control and browsers.\nimport crypto from "node:crypto";\n\nconst payload = JSON.stringify({\n amount: 49.00, currency: "USD", event_type: "payment_success",\n external_id: payment.id, visitor_id: clvVid,\n utm_source, utm_medium, utm_campaign,\n});\nconst timestamp = Math.floor(Date.now() / 1000).toString();\nconst digest = crypto.createHmac("sha256", process.env.CLARVIVO_INGEST_SECRET!)\n .update(\`\${timestamp}.revenue.\${payload}\`, "utf8").digest("hex");\nawait fetch("${baseUrl.replace(/\/$/, "")}/api/ingest/${apiKey}/revenue", {\n method: "POST",\n headers: {\n "Content-Type": "application/json",\n "X-Clarvivo-Signature": \`t=\${timestamp},v1=\${digest}\`,\n },\n body: payload,\n});`;
130
+ }
131
+ //# sourceMappingURL=payments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payments.js","sourceRoot":"","sources":["../src/payments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AnalyticsRow } from "./api.js";
2
+ export declare function generateReportHtml(projectId: number | string, days: number, analytics: AnalyticsRow[], generatedAt?: Date): string;
3
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAsB7C,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,WAAW,OAAa,GAAG,MAAM,CAmBxI"}
package/dist/report.js ADDED
@@ -0,0 +1,38 @@
1
+ import { aggregatePages, aggregateTrafficSources } from "./analytics.js";
2
+ function number(value) {
3
+ const parsed = typeof value === "number" ? value : Number(value ?? 0);
4
+ return Number.isFinite(parsed) ? parsed : 0;
5
+ }
6
+ function escapeHtml(value) {
7
+ return String(value)
8
+ .replace(/&/g, "&")
9
+ .replace(/</g, "&lt;")
10
+ .replace(/>/g, "&gt;")
11
+ .replace(/"/g, "&quot;")
12
+ .replace(/'/g, "&#39;");
13
+ }
14
+ function table(title, headings, rows) {
15
+ if (!rows.length)
16
+ return "";
17
+ return `<section><h2>${escapeHtml(title)}</h2><table><thead><tr>${headings.map((heading) => `<th>${escapeHtml(heading)}</th>`).join("")}</tr></thead><tbody>${rows.map((row) => `<tr>${row.map((cell) => `<td>${escapeHtml(cell)}</td>`).join("")}</tr>`).join("")}</tbody></table></section>`;
18
+ }
19
+ export function generateReportHtml(projectId, days, analytics, generatedAt = new Date()) {
20
+ const traffic = aggregateTrafficSources(analytics);
21
+ const pages = aggregatePages(analytics);
22
+ const visitors = analytics.reduce((sum, row) => sum + number(row.uniqueVisitors ?? row.visitors), 0);
23
+ const pageviews = analytics.reduce((sum, row) => sum + number(row.pageviews), 0);
24
+ const sessions = analytics.reduce((sum, row) => sum + number(row.sessions), 0);
25
+ const end = generatedAt.toISOString().slice(0, 10);
26
+ const startDate = new Date(generatedAt);
27
+ startDate.setUTCDate(startDate.getUTCDate() - days + 1);
28
+ const start = startDate.toISOString().slice(0, 10);
29
+ return `<!doctype html>
30
+ <html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Clarvivo analytics report — ${escapeHtml(projectId)}</title><style>
31
+ *{box-sizing:border-box}body{max-width:900px;margin:0 auto;padding:40px;font:14px/1.45 system-ui,-apple-system,"Segoe UI",sans-serif;color:#172033}h1{font-size:28px;margin:0 0 4px}h2{font-size:17px;margin:30px 0 10px}.sub{color:#64748b;margin-bottom:26px}.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.metric{border:1px solid #dbe2ea;border-radius:9px;padding:14px}.label,th{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#64748b}.value{font-size:24px;font-weight:700;margin-top:3px}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid #e7ebf0}th{font-weight:650}.foot{margin-top:36px;padding-top:12px;border-top:1px solid #dbe2ea;color:#64748b;font-size:11px}@media print{body{padding:16px}.metric{break-inside:avoid}section{break-inside:avoid}}
32
+ </style></head><body><h1>Clarvivo analytics report</h1><div class="sub">Project ${escapeHtml(projectId)} · ${start} to ${end} · ${days} days</div><div class="metrics"><div class="metric"><div class="label">Visitors</div><div class="value">${visitors.toLocaleString("en-US")}</div></div><div class="metric"><div class="label">Pageviews</div><div class="value">${pageviews.toLocaleString("en-US")}</div></div><div class="metric"><div class="label">Sessions</div><div class="value">${sessions.toLocaleString("en-US")}</div></div></div>
33
+ ${table("Traffic channels", ["Channel", "Visitors", "Share"], traffic.channels.map((row) => [row.channel, row.visitors, row.sharePercent === undefined ? "—" : `${row.sharePercent}%`]))}
34
+ ${table("Top pages", ["Page", "Views", "Unique visitors", "Bounce", "Avg time"], pages.map((row) => [row.path, row.views, row.uniqueVisitors, row.bouncePercent === undefined ? "—" : `${row.bouncePercent}%`, row.avgTimeSeconds === undefined ? "—" : `${row.avgTimeSeconds}s`]))}
35
+ ${table("Top sources", ["Source", "Medium", "Campaign", "Visitors", "Conversions", "Revenue"], traffic.sources.map((row) => [row.source, row.medium, row.campaign, row.visitors, row.conversions ?? "—", row.revenue ?? "—"]))}
36
+ <div class="foot">Generated by Clarvivo. Open this file in a browser and use Print → Save as PDF.</div></body></html>`;
37
+ }
38
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,YAAY,IAAI,SAAS,CAoDxC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,YAAY,IAAI,SAAS,CAyJxC"}
package/dist/server.js CHANGED
@@ -2,7 +2,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import { z } from "zod";
3
3
  import { createToolHandlers } from "./tools.js";
4
4
  export function createServer() {
5
- const server = new McpServer({ name: "clarvivo", version: "0.1.0" });
5
+ const server = new McpServer({ name: "clarvivo", version: "0.3.0" });
6
6
  const handlers = createToolHandlers();
7
7
  const projectId = z.union([z.number(), z.string()]).describe("Clarvivo project ID");
8
8
  server.registerTool("setup_analytics", {
@@ -46,6 +46,97 @@ export function createServer() {
46
46
  },
47
47
  annotations: { readOnlyHint: true, idempotentHint: true },
48
48
  }, handlers.getStats);
49
+ server.registerTool("get_traffic_sources", {
50
+ title: "Get traffic sources",
51
+ description: "Aggregate the selected analytics window into compact traffic-channel shares, the top ten referrers, and the top ten UTM source/medium/campaign rows. Never returns raw daily rows.",
52
+ inputSchema: {
53
+ projectId,
54
+ days: z.number().int().min(1).max(90).default(30).describe("Reporting window from 1 to 90 days"),
55
+ },
56
+ annotations: { readOnlyHint: true, idempotentHint: true },
57
+ }, handlers.getTrafficSources);
58
+ server.registerTool("get_pages", {
59
+ title: "Get top pages",
60
+ description: "Aggregate page analytics and return only the top ten pages by views, including known visitor, entry, exit, bounce, and average-time metrics.",
61
+ inputSchema: {
62
+ projectId,
63
+ days: z.number().int().min(1).max(90).default(30).describe("Reporting window from 1 to 90 days"),
64
+ },
65
+ annotations: { readOnlyHint: true, idempotentHint: true },
66
+ }, handlers.getPages);
67
+ server.registerTool("get_audience", {
68
+ title: "Get audience breakdown",
69
+ description: "Return compact device, browser, OS, country, visitor-segment, screen-resolution, and language aggregates for the selected window.",
70
+ inputSchema: {
71
+ projectId,
72
+ days: z.number().int().min(1).max(90).default(30).describe("Reporting window from 1 to 90 days"),
73
+ },
74
+ annotations: { readOnlyHint: true, idempotentHint: true },
75
+ }, handlers.getAudience);
76
+ server.registerTool("export_data", {
77
+ title: "Export analytics data",
78
+ description: "Write a CSV or JSON analytics export to a safe local path, or write a self-contained printable HTML report for saving as PDF. Returns file metadata, never file contents.",
79
+ inputSchema: {
80
+ projectId,
81
+ format: z.enum(["csv", "json", "pdf"]),
82
+ days: z.number().int().min(1).max(90).default(30).describe("Reporting window from 1 to 90 days"),
83
+ path: z.string().min(1).optional().describe("Destination inside the current working directory"),
84
+ overwrite: z.boolean().default(false).describe("Replace an existing destination file"),
85
+ },
86
+ }, handlers.exportData);
87
+ server.registerTool("connect_revenue", {
88
+ title: "Connect payment revenue",
89
+ description: "Detect a supported payment SDK (or use the named provider), connect its Clarvivo webhook, and return a three-step setup checklist with the exact attribution edit. Never accepts or transmits webhook secrets.",
90
+ inputSchema: {
91
+ projectId,
92
+ provider: z.enum(["stripe", "polar", "razorpay", "paddle", "lemonsqueezy", "dodo", "custom"]).optional(),
93
+ },
94
+ annotations: { idempotentHint: true },
95
+ }, handlers.connectRevenue);
96
+ server.registerTool("verify_revenue", {
97
+ title: "Verify payment revenue",
98
+ description: "Check payment webhook proof-of-life and attribution coverage without returning revenue amounts or customer data.",
99
+ inputSchema: { projectId },
100
+ annotations: { readOnlyHint: true, idempotentHint: true },
101
+ }, handlers.verifyRevenue);
102
+ server.registerTool("add_event", {
103
+ title: "Register a tracked event",
104
+ description: "Register a Clarvivo event and propose the exact window.clarvivo.trackEvent call and handler placement. This tool does not edit files.",
105
+ inputSchema: {
106
+ projectId,
107
+ name: z.string().min(1),
108
+ type: z.enum(["click", "form_submit", "page_view", "purchase", "signup", "custom"]),
109
+ url: z.string().min(1).optional(),
110
+ value: z.number().finite().optional(),
111
+ where: z.string().min(1).optional().describe("Human-readable handler or file location for the proposed edit"),
112
+ },
113
+ }, handlers.addEvent);
114
+ server.registerTool("create_funnel", {
115
+ title: "Create a conversion funnel",
116
+ description: "Create an ordered funnel, reusing a case-insensitive name match so retries never duplicate it, and flag steps without a known tracked page.",
117
+ inputSchema: {
118
+ projectId,
119
+ name: z.string().min(1),
120
+ steps: z.array(z.object({ name: z.string().min(1), url: z.string().min(1) })).min(2),
121
+ },
122
+ annotations: { idempotentHint: true },
123
+ }, handlers.createFunnel);
124
+ server.registerTool("create_alert", {
125
+ title: "Create an analytics alert",
126
+ description: "Create a traffic or conversion alert, reusing an existing alert of the same type.",
127
+ inputSchema: {
128
+ projectId,
129
+ type: z.enum(["traffic_spike", "traffic_dip", "conversion_drop"]),
130
+ threshold: z.number().finite().nonnegative(),
131
+ },
132
+ annotations: { idempotentHint: true },
133
+ }, handlers.createAlert);
134
+ server.registerTool("list_funnels", {
135
+ title: "List conversion funnels",
136
+ description: "List the project's funnels and ordered steps.",
137
+ inputSchema: { projectId },
138
+ annotations: { readOnlyHint: true, idempotentHint: true },
139
+ }, handlers.listFunnels);
49
140
  return server;
50
141
  }
51
142
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -39,6 +39,57 @@ export declare function createToolHandlers(context?: ToolContext): {
39
39
  projectId: number | string;
40
40
  days?: number;
41
41
  }) => Promise<ToolResult>;
42
+ getTrafficSources: (input: {
43
+ projectId: number | string;
44
+ days?: number;
45
+ }) => Promise<ToolResult>;
46
+ getPages: (input: {
47
+ projectId: number | string;
48
+ days?: number;
49
+ }) => Promise<ToolResult>;
50
+ getAudience: (input: {
51
+ projectId: number | string;
52
+ days?: number;
53
+ }) => Promise<ToolResult>;
54
+ exportData: (input: {
55
+ projectId: number | string;
56
+ format: "csv" | "json" | "pdf";
57
+ days?: number;
58
+ path?: string;
59
+ overwrite?: boolean;
60
+ }) => Promise<ToolResult>;
61
+ connectRevenue: (input: {
62
+ projectId: number | string;
63
+ provider?: string;
64
+ [key: string]: unknown;
65
+ }) => Promise<ToolResult>;
66
+ verifyRevenue: (input: {
67
+ projectId: number | string;
68
+ }) => Promise<ToolResult>;
69
+ addEvent: (input: {
70
+ projectId: number | string;
71
+ name: string;
72
+ type: string;
73
+ url?: string;
74
+ value?: number;
75
+ where?: string;
76
+ }) => Promise<ToolResult>;
77
+ listFunnels: (input: {
78
+ projectId: number | string;
79
+ }) => Promise<ToolResult>;
80
+ createFunnel: (input: {
81
+ projectId: number | string;
82
+ name: string;
83
+ steps: Array<{
84
+ name: string;
85
+ url: string;
86
+ }>;
87
+ }) => Promise<ToolResult>;
88
+ createAlert: (input: {
89
+ projectId: number | string;
90
+ type: string;
91
+ threshold: number;
92
+ }) => Promise<ToolResult>;
42
93
  };
43
94
  export declare function workingDirectoryLabel(cwd?: string): string;
44
95
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,WAAW,EAOjB,MAAM,UAAU,CAAC;AAQlB,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,WAAW,CAAC;CACnB;AAED,KAAK,WAAW,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAClH,KAAK,WAAW,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CAAC;AACrF,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;AAgFnD,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBjH;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,WAAgB;4BAK1B;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAG,OAAO,CAAC,UAAU,CAAC;+BAwBxE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAG,OAAO,CAAC,UAAU,CAAC;gCAmBxF;QAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,KAAG,OAAO,CAAC,UAAU,CAAC;wBAyB9D,OAAO,CAAC,UAAU,CAAC;sBASnB;QAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAG,OAAO,CAAC,UAAU,CAAC;EAW9F;AAED,wBAAgB,qBAAqB,CAAC,GAAG,SAAgB,GAAG,MAAM,CAEjE"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}