@ecadlabs/tezosx-mcp 1.0.7 → 1.0.8
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/tools/bridge_execute_withdrawal.d.ts +27 -0
- package/dist/tools/bridge_execute_withdrawal.js +125 -0
- package/dist/tools/bridge_status.d.ts +25 -0
- package/dist/tools/bridge_status.js +155 -0
- package/dist/tools/bridge_to_etherlink.d.ts +25 -0
- package/dist/tools/bridge_to_etherlink.js +116 -0
- package/dist/tools/index.d.ts +68 -0
- package/dist/tools/index.js +6 -0
- package/dist/tools/recover_spender_funds.js +2 -2
- package/frontend/dist/assets/{index-BmltqixB.js → index-BbUbeppO.js} +2 -2
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
import type { LiveConfig } from "../live-config.js";
|
|
3
|
+
export declare const createBridgeExecuteWithdrawalTool: (config: LiveConfig) => {
|
|
4
|
+
name: string;
|
|
5
|
+
config: {
|
|
6
|
+
title: string;
|
|
7
|
+
description: string;
|
|
8
|
+
inputSchema: z.ZodObject<{
|
|
9
|
+
outboxLevel: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
messageIndex: z.ZodOptional<z.ZodNumber>;
|
|
11
|
+
cementedCommitment: z.ZodOptional<z.ZodString>;
|
|
12
|
+
outputProof: z.ZodOptional<z.ZodString>;
|
|
13
|
+
}, z.z.core.$strip>;
|
|
14
|
+
annotations: {
|
|
15
|
+
readOnlyHint: boolean;
|
|
16
|
+
destructiveHint: boolean;
|
|
17
|
+
idempotentHint: boolean;
|
|
18
|
+
openWorldHint: boolean;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
handler: (params: any) => Promise<{
|
|
22
|
+
content: {
|
|
23
|
+
type: "text";
|
|
24
|
+
text: string;
|
|
25
|
+
}[];
|
|
26
|
+
}>;
|
|
27
|
+
};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import z from "zod";
|
|
3
|
+
import { ensureRevealed } from "./reveal_account.js";
|
|
4
|
+
const CONFIRMATIONS_TO_WAIT = 3;
|
|
5
|
+
const BRIDGE_CONFIG = {
|
|
6
|
+
mainnet: {
|
|
7
|
+
smartRollupAddress: "sr1Ghq66tYK9y3r8CC1Tf8i8m5nxh8nTvZEf",
|
|
8
|
+
},
|
|
9
|
+
shadownet: {
|
|
10
|
+
smartRollupAddress: "sr19fMYrr5C4qqvQqQrDSjtP31GcrWjodzvg",
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
// Default rollup node URLs (can be overridden via env)
|
|
14
|
+
const ROLLUP_NODE_URLS = {
|
|
15
|
+
mainnet: process.env.ETHERLINK_ROLLUP_NODE_MAINNET,
|
|
16
|
+
shadownet: process.env.ETHERLINK_ROLLUP_NODE_SHADOWNET,
|
|
17
|
+
};
|
|
18
|
+
const inputSchema = z.object({
|
|
19
|
+
// Option 1: provide outbox level + message index (requires rollup node access)
|
|
20
|
+
outboxLevel: z.number().optional().describe("The Tezos L1 block level of the outbox containing the withdrawal message. " +
|
|
21
|
+
"Used with messageIndex to auto-fetch the proof from the rollup node."),
|
|
22
|
+
messageIndex: z.number().optional().describe("The index of the message within the outbox level. Defaults to 0."),
|
|
23
|
+
// Option 2: provide pre-computed proof directly
|
|
24
|
+
cementedCommitment: z.string().optional().describe("The cemented commitment hash (src1...). Required if outputProof is provided directly."),
|
|
25
|
+
outputProof: z.string().optional().describe("The hex-encoded output proof. If provided along with cementedCommitment, skips rollup node query."),
|
|
26
|
+
});
|
|
27
|
+
async function fetchProofFromRollupNode(rollupNodeUrl, outboxLevel, messageIndex) {
|
|
28
|
+
const url = `${rollupNodeUrl}/global/block/head/helpers/proofs/outbox/${outboxLevel}/messages?index=${messageIndex}`;
|
|
29
|
+
try {
|
|
30
|
+
const { data } = await axios.get(url, { timeout: 30_000 });
|
|
31
|
+
return {
|
|
32
|
+
commitment: data.commitment,
|
|
33
|
+
proof: data.proof,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
38
|
+
throw new Error(`Failed to fetch outbox proof from rollup node at ${rollupNodeUrl}: ${msg}\n` +
|
|
39
|
+
`Ensure ETHERLINK_ROLLUP_NODE_MAINNET or ETHERLINK_ROLLUP_NODE_SHADOWNET env var is set to a valid rollup node URL.`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async function getCementedCommitment(tezosRpcUrl, rollupAddress) {
|
|
43
|
+
const url = `${tezosRpcUrl}/chains/main/blocks/head/context/smart_rollups/smart_rollup/${rollupAddress}/last_cemented_commitment_hash_with_level`;
|
|
44
|
+
try {
|
|
45
|
+
const { data } = await axios.get(url, { timeout: 15_000 });
|
|
46
|
+
return { hash: data.hash, level: data.level };
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
50
|
+
throw new Error(`Failed to get cemented commitment: ${msg}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export const createBridgeExecuteWithdrawalTool = (config) => ({
|
|
54
|
+
name: "tezos_bridge_execute_withdrawal",
|
|
55
|
+
config: {
|
|
56
|
+
title: "Execute Bridge Withdrawal",
|
|
57
|
+
description: "Executes a cemented outbox message on Tezos L1 to finalize a standard bridge withdrawal (Etherlink → Tezos). " +
|
|
58
|
+
"This can only be done after the commitment containing the withdrawal has been cemented (~15 days after initiation). " +
|
|
59
|
+
"Provide either outboxLevel + messageIndex (auto-fetches proof from rollup node) or cementedCommitment + outputProof directly. " +
|
|
60
|
+
"Requires ETHERLINK_ROLLUP_NODE_MAINNET or ETHERLINK_ROLLUP_NODE_SHADOWNET env var for auto-fetch mode.",
|
|
61
|
+
inputSchema,
|
|
62
|
+
annotations: {
|
|
63
|
+
readOnlyHint: false,
|
|
64
|
+
destructiveHint: false,
|
|
65
|
+
idempotentHint: true,
|
|
66
|
+
openWorldHint: true,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
handler: async (params) => {
|
|
70
|
+
params = params;
|
|
71
|
+
const { Tezos, networkName, spendingAddress } = config;
|
|
72
|
+
const bridgeConfig = BRIDGE_CONFIG[networkName];
|
|
73
|
+
if (!bridgeConfig) {
|
|
74
|
+
throw new Error(`Bridge not supported on network: ${networkName}`);
|
|
75
|
+
}
|
|
76
|
+
let commitment;
|
|
77
|
+
let proof;
|
|
78
|
+
if (params.outputProof && params.cementedCommitment) {
|
|
79
|
+
// Direct mode: use provided proof
|
|
80
|
+
commitment = params.cementedCommitment;
|
|
81
|
+
proof = params.outputProof;
|
|
82
|
+
}
|
|
83
|
+
else if (params.outboxLevel !== undefined) {
|
|
84
|
+
// Auto-fetch mode: query rollup node for proof
|
|
85
|
+
const rollupNodeUrl = ROLLUP_NODE_URLS[networkName];
|
|
86
|
+
if (!rollupNodeUrl) {
|
|
87
|
+
throw new Error(`No rollup node URL configured for ${networkName}. ` +
|
|
88
|
+
`Set ETHERLINK_ROLLUP_NODE_${networkName.toUpperCase()} environment variable, ` +
|
|
89
|
+
`or provide cementedCommitment and outputProof directly.`);
|
|
90
|
+
}
|
|
91
|
+
const messageIndex = params.messageIndex ?? 0;
|
|
92
|
+
const proofResult = await fetchProofFromRollupNode(rollupNodeUrl, params.outboxLevel, messageIndex);
|
|
93
|
+
commitment = proofResult.commitment;
|
|
94
|
+
proof = proofResult.proof;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
throw new Error("Provide either: (1) outboxLevel + messageIndex to auto-fetch proof from rollup node, " +
|
|
98
|
+
"or (2) cementedCommitment + outputProof directly.");
|
|
99
|
+
}
|
|
100
|
+
// Check spender has enough for fees
|
|
101
|
+
const spenderBalance = await Tezos.tz.getBalance(spendingAddress);
|
|
102
|
+
if (spenderBalance.isZero()) {
|
|
103
|
+
throw new Error("Spending account balance is 0. Please fund the spending address to cover transaction fees.");
|
|
104
|
+
}
|
|
105
|
+
await ensureRevealed(Tezos);
|
|
106
|
+
// Execute the outbox message
|
|
107
|
+
const op = await Tezos.contract.smartRollupExecuteOutboxMessage({
|
|
108
|
+
rollup: bridgeConfig.smartRollupAddress,
|
|
109
|
+
cementedCommitment: commitment,
|
|
110
|
+
outputProof: proof,
|
|
111
|
+
});
|
|
112
|
+
await op.confirmation(CONFIRMATIONS_TO_WAIT);
|
|
113
|
+
const tzktBase = config.tzktApi.replace('api.', '').replace('/v1', '');
|
|
114
|
+
const tzktUrl = `${tzktBase}/${op.hash}`;
|
|
115
|
+
return {
|
|
116
|
+
content: [{
|
|
117
|
+
type: "text",
|
|
118
|
+
text: `Outbox message executed successfully.\n` +
|
|
119
|
+
`Commitment: ${commitment}\n` +
|
|
120
|
+
`Operation: ${tzktUrl}\n` +
|
|
121
|
+
`The withdrawal funds have been released to the recipient on Tezos L1.`,
|
|
122
|
+
}],
|
|
123
|
+
};
|
|
124
|
+
},
|
|
125
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
import type { LiveConfig } from "../live-config.js";
|
|
3
|
+
export declare const createBridgeStatusTool: (config: LiveConfig) => {
|
|
4
|
+
name: string;
|
|
5
|
+
config: {
|
|
6
|
+
title: string;
|
|
7
|
+
description: string;
|
|
8
|
+
inputSchema: z.ZodObject<{
|
|
9
|
+
address: z.ZodOptional<z.ZodString>;
|
|
10
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
11
|
+
}, z.z.core.$strip>;
|
|
12
|
+
annotations: {
|
|
13
|
+
readOnlyHint: boolean;
|
|
14
|
+
destructiveHint: boolean;
|
|
15
|
+
idempotentHint: boolean;
|
|
16
|
+
openWorldHint: boolean;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
handler: (params: any) => Promise<{
|
|
20
|
+
content: {
|
|
21
|
+
type: "text";
|
|
22
|
+
text: string;
|
|
23
|
+
}[];
|
|
24
|
+
}>;
|
|
25
|
+
};
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import z from "zod";
|
|
3
|
+
const BRIDGE_CONFIG = {
|
|
4
|
+
mainnet: {
|
|
5
|
+
bridgeContract: "KT1Wj8SUGmnEPFqyahHAcjcNQwe6YGhEXJb5",
|
|
6
|
+
exchangerContract: "KT1CeFqjJRJPNVvhvznQrWfHad2jCiDZ6Lyj",
|
|
7
|
+
fastWithdrawalContract: "KT1BGwyCrnJ6HuEYP7X8Q2UooTdxmEYHiK6j",
|
|
8
|
+
smartRollupAddress: "sr1Ghq66tYK9y3r8CC1Tf8i8m5nxh8nTvZEf",
|
|
9
|
+
},
|
|
10
|
+
shadownet: {
|
|
11
|
+
bridgeContract: "KT19aBsSWvWtvEkbiqReJnD8UzQMWcD8SHUD",
|
|
12
|
+
exchangerContract: "KT1JYZsawXmeArts18nn4uT79tUJc4AGTYgc",
|
|
13
|
+
fastWithdrawalContract: "KT1E1f7ze8FcjbFu4UwnBqNo4kbbS6Zo5Y9W",
|
|
14
|
+
smartRollupAddress: "sr19fMYrr5C4qqvQqQrDSjtP31GcrWjodzvg",
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
const MUTEZ_PER_TEZ = 1_000_000;
|
|
18
|
+
const inputSchema = z.object({
|
|
19
|
+
address: z.string().optional().describe("Tezos (tz1/tz2/KT1) or Etherlink (0x) address to check bridge transfers for. Defaults to the spending contract address."),
|
|
20
|
+
limit: z.number().optional().describe("Max results per category. Default: 5"),
|
|
21
|
+
});
|
|
22
|
+
function formatMutez(mutez) {
|
|
23
|
+
return `${(mutez / MUTEZ_PER_TEZ).toFixed(6)} XTZ`;
|
|
24
|
+
}
|
|
25
|
+
function formatEtherlinkAddress(hex) {
|
|
26
|
+
return `0x${hex}`;
|
|
27
|
+
}
|
|
28
|
+
export const createBridgeStatusTool = (config) => ({
|
|
29
|
+
name: "tezos_bridge_status",
|
|
30
|
+
config: {
|
|
31
|
+
title: "Bridge Transfer Status",
|
|
32
|
+
description: "Checks the status of Tezos <-> Etherlink bridge transfers for a given address. " +
|
|
33
|
+
"Shows deposits (Tezos -> Etherlink), standard withdrawals (Etherlink -> Tezos), " +
|
|
34
|
+
"and fast withdrawals. Accepts either a Tezos or Etherlink address.",
|
|
35
|
+
inputSchema,
|
|
36
|
+
annotations: {
|
|
37
|
+
readOnlyHint: true,
|
|
38
|
+
destructiveHint: false,
|
|
39
|
+
idempotentHint: true,
|
|
40
|
+
openWorldHint: true,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
handler: async (params) => {
|
|
44
|
+
params = params;
|
|
45
|
+
const { networkName, spendingContract, tzktApi } = config;
|
|
46
|
+
const bridgeConfig = BRIDGE_CONFIG[networkName];
|
|
47
|
+
if (!bridgeConfig) {
|
|
48
|
+
throw new Error(`Bridge not supported on network: ${networkName}`);
|
|
49
|
+
}
|
|
50
|
+
const limit = params.limit ?? 5;
|
|
51
|
+
const address = params.address ?? spendingContract;
|
|
52
|
+
const isTezosAddress = /^(tz[123]|KT1)[a-zA-Z0-9]{33}$/.test(address);
|
|
53
|
+
const isEtherlinkAddress = /^0x[0-9a-fA-F]{40}$/.test(address);
|
|
54
|
+
if (!isTezosAddress && !isEtherlinkAddress) {
|
|
55
|
+
throw new Error("Invalid address format. Provide a Tezos (tz1/tz2/KT1) or Etherlink (0x) address.");
|
|
56
|
+
}
|
|
57
|
+
const results = [];
|
|
58
|
+
const tzktBase = tzktApi;
|
|
59
|
+
// Query deposits
|
|
60
|
+
try {
|
|
61
|
+
let depositUrl;
|
|
62
|
+
if (isTezosAddress) {
|
|
63
|
+
depositUrl = `${tzktBase}/v1/operations/transactions?target=${bridgeConfig.bridgeContract}&entrypoint=deposit&sender=${address}&limit=${limit}&sort.desc=id`;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
const l2Hex = address.slice(2).toLowerCase();
|
|
67
|
+
depositUrl = `${tzktBase}/v1/operations/transactions?target=${bridgeConfig.bridgeContract}&entrypoint=deposit¶meter.l2_address=${l2Hex}&limit=${limit}&sort.desc=id`;
|
|
68
|
+
}
|
|
69
|
+
const { data: deposits } = await axios.get(depositUrl);
|
|
70
|
+
if (deposits.length > 0) {
|
|
71
|
+
results.push(`## Deposits (Tezos → Etherlink): ${deposits.length} found\n`);
|
|
72
|
+
for (const dep of deposits) {
|
|
73
|
+
const amount = formatMutez(dep.amount);
|
|
74
|
+
const l2 = dep.parameter?.value?.l2_address
|
|
75
|
+
? formatEtherlinkAddress(dep.parameter.value.l2_address)
|
|
76
|
+
: "unknown";
|
|
77
|
+
const from = dep.sender?.address ?? "unknown";
|
|
78
|
+
results.push(`- **${amount}** → ${l2}\n` +
|
|
79
|
+
` From: ${from} | ${dep.status} | ${dep.timestamp}\n` +
|
|
80
|
+
` Hash: ${dep.hash}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
results.push("## Deposits (Tezos → Etherlink): none found");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
results.push("## Deposits: query failed");
|
|
89
|
+
}
|
|
90
|
+
// Query standard withdrawals (exchanger burn) — only for Tezos addresses
|
|
91
|
+
if (isTezosAddress) {
|
|
92
|
+
try {
|
|
93
|
+
const burnUrl = `${tzktBase}/v1/operations/transactions?target=${bridgeConfig.exchangerContract}&entrypoint=burn¶meter.address=${address}&limit=${limit}&sort.desc=id`;
|
|
94
|
+
const { data: burns } = await axios.get(burnUrl);
|
|
95
|
+
if (burns.length > 0) {
|
|
96
|
+
results.push(`\n## Standard Withdrawals (Etherlink → Tezos): ${burns.length} found\n`);
|
|
97
|
+
for (const burn of burns) {
|
|
98
|
+
const ticketAmount = burn.parameter?.value?.ticket?.amount ?? "?";
|
|
99
|
+
const amount = formatMutez(Number(ticketAmount));
|
|
100
|
+
results.push(`- **${amount}** → ${address}\n` +
|
|
101
|
+
` ${burn.status} | ${burn.timestamp}\n` +
|
|
102
|
+
` Hash: ${burn.hash}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
results.push("\n## Standard Withdrawals (Etherlink → Tezos): none found");
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
results.push("\n## Standard Withdrawals: query failed");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Query fast withdrawals
|
|
114
|
+
try {
|
|
115
|
+
let fastUrl;
|
|
116
|
+
if (isTezosAddress) {
|
|
117
|
+
fastUrl = `${tzktBase}/v1/operations/transactions?target=${bridgeConfig.fastWithdrawalContract}&entrypoint=payout_withdrawal¶meter.withdrawal.base_withdrawer=${address}&limit=${limit}&sort.desc=id`;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
const l2Hex = address.slice(2).toLowerCase();
|
|
121
|
+
fastUrl = `${tzktBase}/v1/operations/transactions?target=${bridgeConfig.fastWithdrawalContract}&entrypoint=payout_withdrawal¶meter.withdrawal.l2_caller=${l2Hex}&limit=${limit}&sort.desc=id`;
|
|
122
|
+
}
|
|
123
|
+
const { data: fastOps } = await axios.get(fastUrl);
|
|
124
|
+
if (fastOps.length > 0) {
|
|
125
|
+
results.push(`\n## Fast Withdrawals: ${fastOps.length} found\n`);
|
|
126
|
+
for (const fw of fastOps) {
|
|
127
|
+
const w = fw.parameter?.value?.withdrawal;
|
|
128
|
+
const fullAmount = w?.full_amount ? formatMutez(Number(w.full_amount)) : "?";
|
|
129
|
+
const paidAmount = formatMutez(fw.amount);
|
|
130
|
+
const recipient = w?.base_withdrawer ?? "unknown";
|
|
131
|
+
const l2Caller = w?.l2_caller ? formatEtherlinkAddress(w.l2_caller) : "unknown";
|
|
132
|
+
const fee = w?.full_amount
|
|
133
|
+
? formatMutez(Number(w.full_amount) - fw.amount)
|
|
134
|
+
: "?";
|
|
135
|
+
results.push(`- **${fullAmount}** (paid: ${paidAmount}, fee: ${fee})\n` +
|
|
136
|
+
` To: ${recipient} | From L2: ${l2Caller}\n` +
|
|
137
|
+
` ID: ${w?.withdrawal_id ?? "?"} | ${fw.status} | ${fw.timestamp}\n` +
|
|
138
|
+
` Hash: ${fw.hash}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
results.push("\n## Fast Withdrawals: none found");
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
results.push("\n## Fast Withdrawals: query failed");
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
content: [{
|
|
150
|
+
type: "text",
|
|
151
|
+
text: `# Bridge Status for ${address}\nNetwork: ${networkName}\n\n${results.join("\n")}`,
|
|
152
|
+
}],
|
|
153
|
+
};
|
|
154
|
+
},
|
|
155
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
import { type LiveConfig } from "../live-config.js";
|
|
3
|
+
export declare const createBridgeToEtherlinkTool: (config: LiveConfig) => {
|
|
4
|
+
name: string;
|
|
5
|
+
config: {
|
|
6
|
+
title: string;
|
|
7
|
+
description: string;
|
|
8
|
+
inputSchema: z.ZodObject<{
|
|
9
|
+
amount: z.ZodNumber;
|
|
10
|
+
etherlinkAddress: z.ZodString;
|
|
11
|
+
}, z.z.core.$strip>;
|
|
12
|
+
annotations: {
|
|
13
|
+
readOnlyHint: boolean;
|
|
14
|
+
destructiveHint: boolean;
|
|
15
|
+
idempotentHint: boolean;
|
|
16
|
+
openWorldHint: boolean;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
handler: (params: any) => Promise<{
|
|
20
|
+
content: {
|
|
21
|
+
type: "text";
|
|
22
|
+
text: string;
|
|
23
|
+
}[];
|
|
24
|
+
}>;
|
|
25
|
+
};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
import { ensureRevealed } from "./reveal_account.js";
|
|
3
|
+
import { calculateFeeRebate } from "../live-config.js";
|
|
4
|
+
// Constants
|
|
5
|
+
const MUTEZ_PER_TEZ = 1_000_000;
|
|
6
|
+
const CONFIRMATIONS_TO_WAIT = 3;
|
|
7
|
+
// Bridge configuration per network
|
|
8
|
+
// bridge contract = the evm_bridge.mligo contract that handles deposits
|
|
9
|
+
// exchanger = the exchanger.mligo contract (not called directly by users)
|
|
10
|
+
// smartRollupAddress = passed as evm_address param to the bridge deposit entrypoint
|
|
11
|
+
const BRIDGE_CONFIG = {
|
|
12
|
+
mainnet: {
|
|
13
|
+
smartRollupAddress: "sr1Ghq66tYK9y3r8CC1Tf8i8m5nxh8nTvZEf",
|
|
14
|
+
bridgeContractAddress: "KT1Wj8SUGmnEPFqyahHAcjcNQwe6YGhEXJb5",
|
|
15
|
+
},
|
|
16
|
+
shadownet: {
|
|
17
|
+
smartRollupAddress: "sr19fMYrr5C4qqvQqQrDSjtP31GcrWjodzvg",
|
|
18
|
+
bridgeContractAddress: "KT19aBsSWvWtvEkbiqReJnD8UzQMWcD8SHUD",
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
const inputSchema = z.object({
|
|
22
|
+
amount: z.number().describe("The amount of XTZ to bridge to Etherlink."),
|
|
23
|
+
etherlinkAddress: z.string().describe("The Etherlink (0x) address to receive the bridged XTZ."),
|
|
24
|
+
});
|
|
25
|
+
// Cache the last-verified spender so we only hit the chain when config changes
|
|
26
|
+
let verifiedSpender = null;
|
|
27
|
+
export const createBridgeToEtherlinkTool = (config) => ({
|
|
28
|
+
name: "tezos_bridge_to_etherlink",
|
|
29
|
+
config: {
|
|
30
|
+
title: "Bridge XTZ to Etherlink",
|
|
31
|
+
description: "Bridges XTZ from Tezos to Etherlink via the native bridge. " +
|
|
32
|
+
"Sends XTZ from the spending contract through the Tezos-Etherlink bridge to the specified Etherlink address. " +
|
|
33
|
+
"The bridged XTZ will appear as native tokens on Etherlink after the rollup processes the deposit.",
|
|
34
|
+
inputSchema,
|
|
35
|
+
annotations: {
|
|
36
|
+
readOnlyHint: false,
|
|
37
|
+
destructiveHint: true,
|
|
38
|
+
idempotentHint: false,
|
|
39
|
+
openWorldHint: true,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
handler: async (params) => {
|
|
43
|
+
params = params;
|
|
44
|
+
const { Tezos, spendingContract, spendingAddress, networkName } = config;
|
|
45
|
+
const bridgeConfig = BRIDGE_CONFIG[networkName];
|
|
46
|
+
if (!bridgeConfig) {
|
|
47
|
+
throw new Error(`Bridge not supported on network: ${networkName}`);
|
|
48
|
+
}
|
|
49
|
+
// Validate Etherlink address format
|
|
50
|
+
if (!/^0x[0-9a-fA-F]{40}$/.test(params.etherlinkAddress)) {
|
|
51
|
+
throw new Error("Invalid Etherlink address. Must be a 0x-prefixed, 40 hex character address.");
|
|
52
|
+
}
|
|
53
|
+
const amountMutez = Math.floor(params.amount * MUTEZ_PER_TEZ);
|
|
54
|
+
if (amountMutez <= 0) {
|
|
55
|
+
throw new Error("Amount must be greater than 0.");
|
|
56
|
+
}
|
|
57
|
+
// Verify the server's signer matches the on-chain spender (only when config changes)
|
|
58
|
+
const needsVerify = !verifiedSpender
|
|
59
|
+
|| verifiedSpender.address !== spendingAddress
|
|
60
|
+
|| verifiedSpender.contract !== spendingContract;
|
|
61
|
+
if (needsVerify) {
|
|
62
|
+
const c = await Tezos.contract.at(spendingContract);
|
|
63
|
+
const storage = await c.storage();
|
|
64
|
+
if (storage.spender !== spendingAddress) {
|
|
65
|
+
throw new Error(`Spender mismatch: the server's signing key (${spendingAddress}) does not match ` +
|
|
66
|
+
`the contract's spender (${storage.spender}). ` +
|
|
67
|
+
`Please regenerate the spender key from the dashboard.`);
|
|
68
|
+
}
|
|
69
|
+
verifiedSpender = { address: spendingAddress, contract: spendingContract };
|
|
70
|
+
}
|
|
71
|
+
// Check spending contract has enough for the bridge amount
|
|
72
|
+
const contractBalance = await Tezos.tz.getBalance(spendingContract);
|
|
73
|
+
if (contractBalance.toNumber() < amountMutez) {
|
|
74
|
+
throw new Error(`Insufficient spending contract balance. ` +
|
|
75
|
+
`Requested: ${amountMutez} mutez, Available: ${contractBalance.toNumber()} mutez`);
|
|
76
|
+
}
|
|
77
|
+
// Ensure account is revealed before estimating
|
|
78
|
+
await ensureRevealed(Tezos);
|
|
79
|
+
// Step 1: Fund the spender from the spending contract
|
|
80
|
+
// The spender needs the bridge amount + fees to execute the bridge deposit
|
|
81
|
+
const spenderBalance = await Tezos.tz.getBalance(spendingAddress);
|
|
82
|
+
const spenderMutez = spenderBalance.toNumber();
|
|
83
|
+
const feeRebate = calculateFeeRebate(spenderMutez);
|
|
84
|
+
const spendingContractInstance = await Tezos.contract.at(spendingContract);
|
|
85
|
+
const fundCall = spendingContractInstance.methodsObject.spend({
|
|
86
|
+
recipient: spendingAddress,
|
|
87
|
+
amount: amountMutez,
|
|
88
|
+
fee_rebate: feeRebate,
|
|
89
|
+
});
|
|
90
|
+
const fundOp = await fundCall.send();
|
|
91
|
+
await fundOp.confirmation(CONFIRMATIONS_TO_WAIT);
|
|
92
|
+
// Step 2: Call the bridge contract's deposit entrypoint directly
|
|
93
|
+
// The deposit entrypoint takes:
|
|
94
|
+
// evm_address: the smart rollup address (sr1...)
|
|
95
|
+
// l2_address: the Etherlink receiver as hex bytes (without 0x prefix)
|
|
96
|
+
// XTZ is sent along with the call as the amount to bridge
|
|
97
|
+
const bridgeContract = await Tezos.contract.at(bridgeConfig.bridgeContractAddress);
|
|
98
|
+
const l2AddressBytes = params.etherlinkAddress.slice(2).toLowerCase();
|
|
99
|
+
const depositCall = bridgeContract.methodsObject.deposit({
|
|
100
|
+
evm_address: bridgeConfig.smartRollupAddress,
|
|
101
|
+
l2_address: l2AddressBytes,
|
|
102
|
+
});
|
|
103
|
+
const depositOp = await depositCall.send({ amount: amountMutez, mutez: true });
|
|
104
|
+
await depositOp.confirmation(CONFIRMATIONS_TO_WAIT);
|
|
105
|
+
const tzktBase = config.tzktApi.replace('api.', '').replace('/v1', '');
|
|
106
|
+
const tzktUrl = `${tzktBase}/${depositOp.hash}`;
|
|
107
|
+
return {
|
|
108
|
+
content: [{
|
|
109
|
+
type: "text",
|
|
110
|
+
text: `Bridged ${params.amount} XTZ to Etherlink address ${params.etherlinkAddress}\n` +
|
|
111
|
+
`Tezos operation: ${tzktUrl}\n` +
|
|
112
|
+
`The deposit will appear on Etherlink after the rollup processes it (typically a few minutes).`,
|
|
113
|
+
}],
|
|
114
|
+
};
|
|
115
|
+
},
|
|
116
|
+
});
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -131,4 +131,72 @@ export declare const createTools: (liveConfig: LiveConfig, http: boolean) => ({
|
|
|
131
131
|
text: string;
|
|
132
132
|
}[];
|
|
133
133
|
}>;
|
|
134
|
+
} | {
|
|
135
|
+
name: string;
|
|
136
|
+
config: {
|
|
137
|
+
title: string;
|
|
138
|
+
description: string;
|
|
139
|
+
inputSchema: import("zod").ZodObject<{
|
|
140
|
+
amount: import("zod").ZodNumber;
|
|
141
|
+
etherlinkAddress: import("zod").ZodString;
|
|
142
|
+
}, import("zod/v4/core").$strip>;
|
|
143
|
+
annotations: {
|
|
144
|
+
readOnlyHint: boolean;
|
|
145
|
+
destructiveHint: boolean;
|
|
146
|
+
idempotentHint: boolean;
|
|
147
|
+
openWorldHint: boolean;
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
handler: (params: any) => Promise<{
|
|
151
|
+
content: {
|
|
152
|
+
type: "text";
|
|
153
|
+
text: string;
|
|
154
|
+
}[];
|
|
155
|
+
}>;
|
|
156
|
+
} | {
|
|
157
|
+
name: string;
|
|
158
|
+
config: {
|
|
159
|
+
title: string;
|
|
160
|
+
description: string;
|
|
161
|
+
inputSchema: import("zod").ZodObject<{
|
|
162
|
+
address: import("zod").ZodOptional<import("zod").ZodString>;
|
|
163
|
+
limit: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
164
|
+
}, import("zod/v4/core").$strip>;
|
|
165
|
+
annotations: {
|
|
166
|
+
readOnlyHint: boolean;
|
|
167
|
+
destructiveHint: boolean;
|
|
168
|
+
idempotentHint: boolean;
|
|
169
|
+
openWorldHint: boolean;
|
|
170
|
+
};
|
|
171
|
+
};
|
|
172
|
+
handler: (params: any) => Promise<{
|
|
173
|
+
content: {
|
|
174
|
+
type: "text";
|
|
175
|
+
text: string;
|
|
176
|
+
}[];
|
|
177
|
+
}>;
|
|
178
|
+
} | {
|
|
179
|
+
name: string;
|
|
180
|
+
config: {
|
|
181
|
+
title: string;
|
|
182
|
+
description: string;
|
|
183
|
+
inputSchema: import("zod").ZodObject<{
|
|
184
|
+
outboxLevel: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
185
|
+
messageIndex: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
186
|
+
cementedCommitment: import("zod").ZodOptional<import("zod").ZodString>;
|
|
187
|
+
outputProof: import("zod").ZodOptional<import("zod").ZodString>;
|
|
188
|
+
}, import("zod/v4/core").$strip>;
|
|
189
|
+
annotations: {
|
|
190
|
+
readOnlyHint: boolean;
|
|
191
|
+
destructiveHint: boolean;
|
|
192
|
+
idempotentHint: boolean;
|
|
193
|
+
openWorldHint: boolean;
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
handler: (params: any) => Promise<{
|
|
197
|
+
content: {
|
|
198
|
+
type: "text";
|
|
199
|
+
text: string;
|
|
200
|
+
}[];
|
|
201
|
+
}>;
|
|
134
202
|
})[];
|
package/dist/tools/index.js
CHANGED
|
@@ -8,6 +8,9 @@ import { createParseX402RequirementsTool } from "./parse_x402_requirements.js";
|
|
|
8
8
|
import { createRevealAccountTool } from "./reveal_account.js";
|
|
9
9
|
import { createRecoverSpenderFundsTool } from "./recover_spender_funds.js";
|
|
10
10
|
import { createSendXtzTool } from "./send_xtz.js";
|
|
11
|
+
import { createBridgeToEtherlinkTool } from "./bridge_to_etherlink.js";
|
|
12
|
+
import { createBridgeStatusTool } from "./bridge_status.js";
|
|
13
|
+
import { createBridgeExecuteWithdrawalTool } from "./bridge_execute_withdrawal.js";
|
|
11
14
|
import { createGetDashboardTool } from "./get_dashboard.js";
|
|
12
15
|
const getNotConfiguredMessage = () => `Wallet not configured.
|
|
13
16
|
|
|
@@ -43,6 +46,9 @@ export const createTools = (liveConfig, http) => {
|
|
|
43
46
|
createRecoverSpenderFundsTool(liveConfig),
|
|
44
47
|
createRevealAccountTool(liveConfig),
|
|
45
48
|
createSendXtzTool(liveConfig),
|
|
49
|
+
createBridgeToEtherlinkTool(liveConfig),
|
|
50
|
+
createBridgeStatusTool(liveConfig),
|
|
51
|
+
createBridgeExecuteWithdrawalTool(liveConfig),
|
|
46
52
|
];
|
|
47
53
|
if (!http) {
|
|
48
54
|
tools.push(createGetDashboardTool(liveConfig));
|
|
@@ -51,7 +51,7 @@ export const createRecoverSpenderFundsTool = (config) => ({
|
|
|
51
51
|
const isContract = destination.startsWith("KT1");
|
|
52
52
|
if (isContract) {
|
|
53
53
|
const contract = await Tezos.contract.at(destination);
|
|
54
|
-
const depositCall = contract.methodsObject
|
|
54
|
+
const depositCall = contract.methodsObject["default"](null);
|
|
55
55
|
const estimate = await Tezos.estimate.contractCall(depositCall);
|
|
56
56
|
const maxAmount = balanceMutez - estimate.suggestedFeeMutez;
|
|
57
57
|
if (maxAmount <= 0) {
|
|
@@ -62,7 +62,7 @@ export const createRecoverSpenderFundsTool = (config) => ({
|
|
|
62
62
|
}],
|
|
63
63
|
};
|
|
64
64
|
}
|
|
65
|
-
const operation = await contract.methodsObject
|
|
65
|
+
const operation = await contract.methodsObject["default"](null).send({
|
|
66
66
|
amount: maxAmount,
|
|
67
67
|
mutez: true,
|
|
68
68
|
fee: estimate.suggestedFeeMutez,
|
|
@@ -125,7 +125,7 @@ Error generating stack: `+h.message+`
|
|
|
125
125
|
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvYWxlcnQvc3R5bGVzLmNzcyIsIi4uLy4uL2NvbXBvbmVudHMvYnVnLXJlcG9ydC1mb3JtL3N0eWxlcy5jc3MiLCIuLi8uLi9jb21wb25lbnRzL2luZm8vc3R5bGVzLmNzcyIsIi4uLy4uL2NvbXBvbmVudHMvbG9hZGVyL3N0eWxlcy5jc3MiLCIuLi8uLi9jb21wb25lbnRzL3BhaXItb3RoZXIvc3R5bGVzLmNzcyIsIi4uLy4uL2NvbXBvbmVudHMvcXIvc3R5bGVzLmNzcyIsIi4uLy4uL2NvbXBvbmVudHMvdG9wLXdhbGxldHMvc3R5bGVzLmNzcyIsIi4uLy4uL2NvbXBvbmVudHMvd2FsbGV0L3N0eWxlcy5jc3MiLCIuLi8uLi9jb21wb25lbnRzL3dhbGxldHMvc3R5bGVzLmNzcyIsIi4uLy4uL2NvbXBvbmVudHMvYnV0dG9uLWljb24vYnV0dG9uLWljb24uY3NzIiwiY29tcG9uZW50cy9wYWlyaW5nLWFsZXJ0L2NvbXBvbmVudHMvd2MtaW5pdC1lcnJvci9zdHlsZXMuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG9CQWFFLGtDQUNGLENBRUEsd0NBZEUsa0JBQW1CLENBUW5CLCtCQUFvQyxDQVRwQyxZQUFhLENBSWIsV0FBWSxDQUZaLHNCQUF1QixDQU12QixNQUFPLENBRlAsZUFBZ0IsQ0FIaEIsY0FBZSxDQUlmLEtBQU0sQ0FGTixXQUFZLENBS1osYUFtQkYsQ0FkQSxvQkFhRSxtQ0FDRixDQVFBLG1CQUNFLEdBQU8sU0FBWSxDQUNuQixHQUFPLFNBQVksQ0FDckIsQ0FPQSw4REFDRSx3QkFDRixDQUVBLDJCQUVFLDZDQUFrRCxDQUNsRCwwQ0FBK0MsQ0FDL0MscUNBQTBDLENBSDFDLFVBSUYsQ0FFQSwrQkFDRSxTQUNGLENBU0Esb0NBQ0UscUJBQXVCLENBQ3ZCLGtCQUFtQixDQUNuQixTQUFVLENBQ1YsV0FDRixDQUVBLDZCQUdFLGtCQUFtQixDQURuQixZQUFhLENBRWIsc0JBQXVCLENBQ3ZCLGlCQUFr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QUNsQixLQUFRLENBR1IsdUJBT0YsQ0FDRixDQ3REQSxhQVVFLFlBQWEsQ0FIYixrQkFBbUIsQ0FGbkIsd0JBQXlCLENBRHpCLGtCQUFtQixDQUtuQixjQUFlLENBSGYsWUFBYSxDQUpiLFdBQVksQ0FNWixzQkFBdUIsQ0FJdkIsZ0JBQWlCLENBVGpCLFdBQVksQ0FRWix1QkFBeUIsQ0FWekIsVUFZRixDQUVBLG1CQUdFLFlBQWEsQ0FGYix3QkFBeUIsQ0FDekIsd0JBRUYsQ0FFQSwwQkFFRSxZQUFhLENBRGIsd0JBRUYsQ0FFQSxnQ0FHRSxZQUFhLENBRmIsd0JBQXlCLENBQ3pCLHdCQUVGLENDOUJBLFlBQ0UsVUFDRixDQUVBLHlCQUNFLFVBQ0YiLCJmaWxlIjoiYWdncmVnYXRlZC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuYWxlcnQtd3JhcHBlci1zaG93IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwdnc7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpO1xuICB6LWluZGV4OiA5OTk5OTtcbiAgLyogVHJpZ2dlciBmYWRlSW4gYW5pbWF0aW9uICovXG4gIGFuaW1hdGlvbjogZmFkZUluIDAuM3MgZWFzZSBmb3J3YXJkcztcbn1cblxuLmFsZXJ0LXdyYXBwZXItaGlkZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMHZ3O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC42KTtcbiAgei1pbmRleDogOTk5OTk7XG4gIC8qIFRyaWdnZXIgZmFkZU91dCBhbmltYXRpb24gKi9cbiAgYW5pbWF0aW9uOiBmYWRlT3V0IDAuM3MgZWFzZSBmb3J3YXJkcztcbn1cblxuLyogS2V5ZnJhbWVzIGZvciBmYWRlSW4gYW5kIGZhZGVPdXQgKi9cbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgZnJvbSB7IG9wYWNpdHk6IDA7IH1cbiAgdG8gICB7IG9wYWNpdHk6IDE7IH1cbn1cblxuQGtleWZyYW1lcyBmYWRlT3V0IHtcbiAgZnJvbSB7IG9wYWNpdHk6IDE7IH1cbiAgdG8gICB7IG9wYWNpdHk6IDA7IH1cbn1cblxuXG4udGhlbWVfX2RhcmsgLmFsZXJ0LW1vZGFsLXNob3cge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjczMzRjO1xufVxuXG4udGhlbWVfX2RhcmsgLmFsZXJ0LW1vZGFsLWhpZGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjczMzRjO1xufVxuXG4udGhlbWVfX2RhcmsgLmFsZXJ0LWZvb3RlciB7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwcHggLTRweCAxMnB4IHJnYigwIDAgMCAvIDIwJSk7XG4gIC1tb3otYm94LXNoYWRvdzogMHB4IC00cHggMTJweCByZ2IoMCAwIDAgLyAyMCUpO1xuICBib3gtc2hhZG93OiAwcHggLTRweCAxMnB4IHJnYigwIDAgMCAvIDIwJSk7XG59XG5cbi50aGVtZV9fZGFyayAuYWxlcnQtbG9nbyBzdmcgZyB7XG4gIGZpbGw6IHdoaXRlO1xufVxuXG4uYWxlcnQtbW9kYWwtc2hvdyB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXItcmFkaXVzOiAzMnB4O1xuICBvcGFjaXR5OiAxO1xuICB3aWR0aDogNDgwcHg7XG59XG5cbi5hbGVydC1tb2RhbC1oaWRlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlci1yYWRpdXM6IDMycHg7XG4gIG9wYWNpdHk6IDE7XG4gIHdpZHRoOiA0ODBweDtcbn1cblxuLmFsZXJ0LW1vZGFsLWxvYWRpbmctd3JhcHBlciB7XG4gIHdpZHRoOiA0ODBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmFsZXJ0LWhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgcGFkZGluZzogMS44ZW07XG4gIHBhZGRpbmctdG9wOiAxLjJlbTtcbiAgcGFkZGluZy1ib3R0b206IDBweDtcbn1cblxuLmFsZXJ0LWJ1dHRvbi1pY29uLWVtcHR5IHtcbiAgd2lkdGg6IDI0cHg7XG4gIGhlaWdodDogMjRweDtcbiAgcGFkZGluZzogMnB4O1xufVxuXG4uYWxlcnQtbG9nbyB7XG4gIG1hcmdpbjogMHB4IDZlbTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5hbGVydC1sb2dvIHN2ZyB7XG4gIGhlaWdodDogMjhweDtcbn1cblxuLmFsZXJ0LWJvZHkge1xuICBwYWRkaW5nOiAxLjhlbTtcbiAgcGFkZGluZy1ib3R0b206IDBweDtcbiAgdHJhbnNpdGlvbjogYWxsIGVhc2UgMC4zcztcbn1cblxuLmFsZXJ0LWZvb3RlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBjb2xvcjogZ3JleTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDBweCAtNHB4IDEycHggcmdiKDUwIDUwIDUwIC8gNiUpO1xuICAtbW96LWJveC1zaGFkb3c6IDBweCAtNHB4IDEycHggcmdiKDUwIDUwIDUwIC8gNiUpO1xuICBib3gtc2hhZG93OiAwcHggLTRweCAxMnB4IHJnYig1MCA1MCA1MCAvIDYlKTtcbiAgZm9udC1zaXplOiAwLjkzOHJlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGhlaWdodDogNjRweDtcbn1cblxuLmFsZXJ0LWJvZHktZXh0cmEtc2hvdyB7XG4gIHRyYW5zaXRpb246IGFsbCBlYXNlIDAuM3M7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG1heC1oZWlnaHQ6IDM1dmg7XG59XG5cbi5hbGVydC1ib2R5LWV4dHJhLWhpZGUge1xuICB0cmFuc2l0aW9uOiBhbGwgZWFzZSAwLjNzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBtYXgtaGVpZ2h0OiAwcHg7XG59XG5cbi5hbGVydC1kaXZpZGVyIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNhYWFhYWE0MjtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAuYWxlcnQtbG9nbyB7XG4gICAgbWFyZ2luOiAwcHggMmVtO1xuICB9XG5cbiAgLmFsZXJ0LXdyYXBwZXItc2hvdyB7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLmFsZXJ0LXdyYXBwZXItaGlkZSB7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLmFsZXJ0LW1vZGFsLXNob3cge1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDBweDtcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxLjhlbTtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC5hbGVydC1tb2RhbC1oaWRlIHtcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwcHg7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDBweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMS44ZW07XG4gIH1cbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzMDBweCkge1xuICAuYWxlcnQtd3JhcHBlci1zaG93IHtcbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICB9XG5cbiAgLmFsZXJ0LXdyYXBwZXItaGlkZSB7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgIHdpZHRoOiAxMDB2dztcbiAgfVxuXG4gIC5hbGVydC1ib2R5IHtcbiAgICBwYWRkaW5nOiAwLjhlbTtcbiAgfVxuXG4gIC5hbGVydC1ib2R5IHtcbiAgICBwYWRkaW5nOiAwLjhlbTtcbiAgICBwYWRkaW5nLXRvcDogMC40ZW07XG4gIH1cblxuICAuYWxlcnQtbG9nbyB7XG4gICAgbWFyZ2luOiAwcHg7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjgpO1xuICB9XG59XG4iLCIuZm9ybS1zdHlsZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1heC13aWR0aDogNTAwcHg7XG4gIG1pbi13aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGdhcDogMjBweDtcbn1cblxuLmlucHV0LWdyb3VwIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cblxuLmxhYmVsLXN0eWxlIHtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xufVxuXG4udGhlbWVfX2xpZ2h0IC5sYWJlbC1zdHlsZSB7XG4gIGNvbG9yOiBibGFjaztcbn1cblxuLmlucHV0LXN0eWxlLFxuLnRleHRhcmVhLXN0eWxlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGNvbG9yOiBibGFjaztcbn1cblxuLnRoZW1lX19kYXJrIC5pbnB1dC1zdHlsZSxcbi50aGVtZV9fZGFyayAudGV4dGFyZWEtc3R5bGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjUzMzRiO1xuICBjb2xvcjogd2hpdGU7XG59XG5cbi5pbnB1dC1zdHlsZS5pbnZhbGlkLFxuLnRleHRhcmVhLXN0eWxlLmludmFsaWQge1xuICBib3JkZXItY29sb3I6ICNmNzZiOGE7XG4gIGJvcmRlci13aWR0aDogbWVkaXVtO1xufVxuXG4udGV4dGFyZWEtc3R5bGUge1xuICBoZWlnaHQ6IDhyZW07XG59XG5cbi5idXR0b24tc3R5bGUge1xuICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyOiBub25lO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgbWFyZ2luLXRvcDogMjBweDtcbn1cblxuLmJ1dHRvbi1zdHlsZS52YWxpZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDdiZmY7XG59XG5cbi5idXR0b24tc3R5bGUuaW52YWxpZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2NWFmZmY7XG59XG5cbi5lcnJvci1sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgZm9udC1zaXplOiAwLjdyZW07XG4gIGNvbG9yOiAjZjc2YjhhO1xufVxuXG4ucGVybWlzc2lvbnMtZ3JvdXAge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5wZXJtaXNzaW9ucy1ncm91cCBsYWJlbCB7XG4gIGZsZXgtZ3JvdzogMTtcbiAgZm9udC1zaXplOiAwLjdyZW07XG59XG5cbi5wZXJtaXNzaW9ucy1ncm91cCBpbnB1dCB7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LWhlaWdodDogNzAwcHgpIHtcbiAgLnRleHRhcmVhLXN0eWxlIHtcbiAgICBoZWlnaHQ6IDZyZW07XG4gIH1cbn1cblxuLmJ1dHRvbi1sb2FkaW5nOjphZnRlciB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxNnB4O1xuICBoZWlnaHQ6IDE2cHg7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBtYXJnaW46IGF1dG87XG4gIGJvcmRlcjogNHB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItdG9wLWNvbG9yOiAjZmZmZmZmO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGFuaW1hdGlvbjogYnV0dG9uLWxvYWRpbmctc3Bpbm5lciAxcyBlYXNlIGluZmluaXRlO1xufVxuXG5Aa2V5ZnJhbWVzIGJ1dHRvbi1sb2FkaW5nLXNwaW5uZXIge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwdHVybik7XG4gIH1cblxuICB0byB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMXR1cm4pO1xuICB9XG59XG5cbi5pY29uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBib3JkZXI6IDJweCBzb2xpZCB3aGl0ZTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBwYWRkaW5nOiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDNweDtcbiAgd2lkdGg6IDFyZW07XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlO1xufVxuXG4uc3VjY2Vzcy1pY29uIHtcbiAgYW5pbWF0aW9uOiBzdWNjZXNzQW5pbWF0aW9uIDAuNnMgZWFzZSBmb3J3YXJkcztcbn1cblxuLmVycm9yLWljb24ge1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2UgZm9yd2FyZHM7XG59XG5cbkBrZXlmcmFtZXMgc3VjY2Vzc0FuaW1hdGlvbiB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuLnRoYW5rLXlvdS1tZXNzYWdlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tbGVmdDogMTBweDtcbn1cblxuLnRoYW5rLXlvdS1tZXNzYWdlIHNwYW4ge1xuICBvcGFjaXR5OiAwO1xuICBhbmltYXRpb246IGZhZGVJbkxldHRlciAwLjNzIGVhc2UgZm9yd2FyZHM7XG59XG5cbkBrZXlmcmFtZXMgZmFkZUluTGV0dGVyIHtcbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbiIsIi5pbmZvLXdyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZ2FwOiAwLjVyZW07XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIHBhZGRpbmc6IDMwcHg7XG59XG4uaW5mby1ib3JkZXIge1xuICBib3JkZXI6IDFweCBzb2xpZCAjYWFhYWFhNDI7XG59XG4uaW5mby1pY29uIHtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAyOHB4O1xuICBtYXJnaW4tYm90dG9tOiAwLjJyZW07XG59XG5cbi5pbmZvLWJhZGdlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzM4ODBmZjtcbiAgZm9udC1zaXplOiAzOHB4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDBweCAwcHggMTJweCAtNHB4IHJnYigwIDAgMCAvIDMwJSk7XG4gIC1tb3otYm94LXNoYWRvdzogMHB4IDBweCAxMnB4IC00cHggcmdiKDAgMCAwIC8gMzAlKTtcbiAgYm94LXNoYWRvdzogMHB4IDBweCAxMnB4IC00cHggcmdiKDAgMCAwIC8gMzAlKTtcbn1cbi50aGVtZV9fZGFyayAuaW5mby10aXRsZSB7XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbi50aGVtZV9fZGFyayAuaW5mby1kZXNjcmlwdGlvbiB7XG4gIGNvbG9yOiAjYWVhZWFlO1xufVxuLmluZm8tdGl0bGUge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjMzM0MTU1O1xuICBtYXJnaW46IDBweDtcbiAgZm9udC1zaXplOiAxNnB4O1xufVxuXG4uaW5mby1kZXNjcmlwdGlvbiB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxMi44cHg7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGNvbG9yOiAjN2M4MjhiO1xuICBsaW5lLWhlaWdodDogMS4yNXJlbTtcbiAgbWFyZ2luOiA2cHggMHB4IDEycHggMHB4O1xuICBtYXJnaW46IDBweDtcbiAgbWF4LXdpZHRoOiAzMDBweDtcbn1cblxuLmluZm8tZGF0YSB7XG4gIGZvbnQtc2l6ZTogMTIuOHB4O1xuICBmb250LXdlaWdodDogMzAwO1xuICBjb2xvcjogIzdjODI4YjtcbiAgbGluZS1oZWlnaHQ6IDEuMjVyZW07XG4gIG1hcmdpbjogNnB4IDBweCAxMnB4IDBweDtcbiAgbWFyZ2luOiAwcHg7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG4gIG1heC1oZWlnaHQ6IDMwMHB4O1xufVxuLmluZm8tYnV0dG9ucyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC42cmVtO1xufVxuXG4uaW5mby1idXR0b24ge1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzODgwZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMzODgwZmY7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMC42cmVtIDEuMnJlbTtcbiAgd2lkdGg6IDE4MHB4O1xuICB0cmFuc2l0aW9uOiBhbGwgZWFzZSAwLjJzO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIG1hcmdpbi10b3A6IDFyZW07XG4gIGZvbnQtc2l6ZTogMTIuOHB4O1xufVxuXG4uaW5mby1idXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTY2YWZjO1xufVxuLmluZm8tYnV0dG9uLXNlY29uZGFyeSB7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMzODgwZmY7XG4gIGNvbG9yOiAjMzg4MGZmO1xuICBwYWRkaW5nOiAwLjZlbSAxLjJyZW07XG4gIHdpZHRoOiAxODBweDtcbiAgdHJhbnNpdGlvbjogYWxsIGVhc2UgMC4ycztcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBtYXJnaW4tdG9wOiAxcmVtO1xufVxuXG4uaW5mby1idXR0b24tc2Vjb25kYXJ5OmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U4ZjBmZjtcbn1cbi5kb3dubG9hZExpbmsge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiBncmF5O1xuICBmb250LXNpemU6IHNtYWxsZXI7XG4gIHBhZGRpbmc6IDAuNXJlbTtcbn1cbmJ1dHRvbiNxci1jb2RlLWljb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBtaW4td2lkdGg6IDIuNXJlbTtcbiAgYWxpZ24tc2VsZjogc2VsZi1lbmQ7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwLjNyZW07XG4gIHJpZ2h0OiAwLjNyZW07XG4gIHBhZGRpbmc6IDEuNXB4O1xufVxuXG5idXR0b24jcXItY29kZS1pY29uIHN2ZyB7XG4gIHdpZHRoOiAyNXB4O1xufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDMwMHB4KSB7XG4gIGJ1dHRvbiNxci1jb2RlLWljb24ge1xuICAgIG1pbi13aWR0aDogMS41cmVtO1xuICB9XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogODAwcHgpIHtcbiAgLmluZm8tdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMTQuNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxcmVtO1xuICB9XG5cbiAgLmluZm8tZGVzY3JpcHRpb24ge1xuICAgIGZvbnQtc2l6ZTogMC42NXJlbTtcbiAgfVxuXG4gIC5xci1tb3JlLWluZm8ge1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgfVxuXG4gIC5pbmZvLXdyYXBwZXIge1xuICAgIG1heC1oZWlnaHQ6IDE4MHB4O1xuICAgIHBhZGRpbmc6IDEuMmVtO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuICAuaW5mby1pY29uIHtcbiAgICB3aWR0aDogNDBweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gICAgZm9udC1zaXplOiAxLjhyZW07XG4gIH1cblxuICAuaW5mby1idXR0b24ge1xuICAgIHBhZGRpbmc6IDAuNWVtIDEuNmVtO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxufVxuIiwiLmxvYWRlciB7XG4gIGhlaWdodDogM3B4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZGQ7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGxlZnQ6IDBweDtcbiAgYm90dG9tOiAwcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5sb2FkZXI6YmVmb3JlIHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogLTUwJTtcbiAgaGVpZ2h0OiAzcHg7XG4gIHdpZHRoOiA0MCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzODgwZmY7XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBsaW5lQW5pbSAxcyBsaW5lYXIgaW5maW5pdGU7XG4gIC1tb3otYW5pbWF0aW9uOiBsaW5lQW5pbSAxcyBsaW5lYXIgaW5maW5pdGU7XG4gIGFuaW1hdGlvbjogbGluZUFuaW0gMXMgbGluZWFyIGluZmluaXRlO1xufVxuXG5Aa2V5ZnJhbWVzIGxpbmVBbmltIHtcbiAgMCUge1xuICAgIGxlZnQ6IC00MCU7XG4gIH1cbiAgNTAlIHtcbiAgICBsZWZ0OiAyMCU7XG4gICAgd2lkdGg6IDgwJTtcbiAgfVxuICAxMDAlIHtcbiAgICBsZWZ0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG4iLCIucGFpci1vdGhlci1pbmZvIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGNvbG9yOiAjYjViOGJlO1xufVxuIiwiLnFyLXdyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogMC41ZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkICNhYWFhYWE0MjtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgcGFkZGluZzogMzBweDtcbiAgaGVpZ2h0OiAyMDBweDtcbn1cblxuLnFyLWxlZnQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXgtd2lkdGg6IDE2ZW07XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLnFyLWxlZnQgaDMge1xuICBjb2xvcjogIzMzNDE1NTtcbiAgbWFyZ2luOiAwcHg7XG4gIG1hcmdpbi1ib3R0b206IDAuNGVtO1xuICBmb250LXNpemU6IDFlbTtcbn1cblxuLnRoZW1lX19kYXJrIC5xci1sZWZ0IGgzIHtcbiAgY29sb3I6IHdoaXRlO1xufVxuXG4udGhlbWVfX2RhcmsgLnFyLWxlZnQgc3BhbiB7XG4gIGNvbG9yOiAjYWVhZWFlO1xufVxuXG4udGhlbWVfX2RhcmsgLnFyLWNvcHktd3JhcHBlciBwIHtcbiAgY29sb3I6ICNhZWFlYWU7XG59XG5cbi5xci1sZWZ0IHNwYW4ge1xuICBmb250LXNpemU6IDAuOHJlbTtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgY29sb3I6ICM3YzgyOGI7XG4gIGxpbmUtaGVpZ2h0OiAxLjM1ZW07XG4gIG1hcmdpbjogMHB4O1xufVxuXG4ucXItbW9yZS1pbmZvIHtcbiAgZm9udC1zaXplOiAwLjk1ZW0gIWltcG9ydGFudDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIG1hcmdpbi1sZWZ0OiA2cHggIWltcG9ydGFudDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ucXItcmlnaHQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICB0cmFuc2l0aW9uOiBhbGwgZWFzZSAwLjJzO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi50aGVtZV9fZGFyayAucXItcmlnaHQ6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIzOCwgMjM4LCAyMzgsIDAuNDkyKTtcbn1cblxuLnFyLXJpZ2h0OmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIzOCwgMjM4LCAyMzgpO1xufVxuXG4ucXItY29weS13cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAwLjZlbTtcbiAgY29sb3I6ICM3YzgyOGI7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbiAgbWFyZ2luLXRvcDogMThweDtcbn1cblxuLnFyLWNvcHktd3JhcHBlciBzdmcge1xuICBmb250LXNpemU6IDFlbTtcbn1cblxuLnFyLWNvcHktd3JhcHBlciBwIHtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgbWFyZ2luOiAwcHg7XG59XG5cbi5xci1zdmctd3JhcHBlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xufVxuXG4ucXItc3ZnLXdyYXBwZXIgc3ZnIHJlY3Qge1xuICBmaWxsOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gIC5xci13cmFwcGVyIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgaGVpZ2h0OiAzNDBweDtcbiAgfVxuXG4gIC5xci1sZWZ0IHtcbiAgICBtYXJnaW46IDAuNmVtIDBweDtcbiAgfVxuXG4gIC5xci1sZWZ0IGgzIHtcbiAgICBmb250LXNpemU6IDFlbTtcbiAgICBsaW5lLWhlaWdodDogMWVtO1xuICB9XG5cbiAgLnFyLWxlZnQgcCB7XG4gICAgZm9udC1zaXplOiAwLjc1ZW07XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLnFyLWxlZnQgPiBkaXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgfVxuXG4gIC5xci1tb3JlLWluZm8ge1xuICAgIGZvbnQtc2l6ZTogMC43NWVtO1xuICB9XG59XG4iLCIudG9wLXdhbGxldHMtd3JhcHBlciB7XG4gIG1hcmdpbi1ib3R0b206IDEuOGVtO1xufVxuXG4udG9wLXdhbGxldHMtaW5mbyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4udGhlbWVfX2RhcmsgLnRvcC13YWxsZXRzLWluZm8gaDMge1xuICBjb2xvcjogd2hpdGU7XG59XG5cbi50aGVtZV9fZGFyayAudG9wLXdhbGxldHMtaW5mbyBzcGFuIHtcbiAgY29sb3I6ICNiNWI4YmU7XG59XG5cbi50aGVtZV9fZGFyayAudG9wLXdhbGxldHMtb3RoZXItd2FsbGV0cy1sZWZ0IGgzIHtcbiAgY29sb3I6IHdoaXRlO1xufVxuXG4udG9wLXdhbGxldHMtaW5mbyBoMyB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6ICMzMzQxNTU7XG4gIG1hcmdpbjogMHB4O1xuICBmb250LXNpemU6IDAuOTM4cmVtO1xufVxuXG4udG9wLXdhbGxldHMtaW5mbyBzcGFuIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXgtd2lkdGg6IDMwMHB4O1xuICBmb250LXNpemU6IDAuOGVtO1xuICBmb250LXdlaWdodDogMzAwO1xuICBjb2xvcjogIzdjODI4YjtcbiAgbGluZS1oZWlnaHQ6IDEuMzVlbTtcbiAgbWFyZ2luOiA2cHggMHB4IDEycHggMHB4O1xufVxuXG4udG9wLXdhbGxldHMtbGVhcm4tbW9yZSB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtc2l6ZTogMC45NWVtICFpbXBvcnRhbnQ7XG59XG5cbi50b3Atd2FsbGV0cy13YWxsZXRzLW1haW4ge1xuICBtYXJnaW4tdG9wOiAxZW07XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcik7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdhcDogMWVtO1xufVxuXG4udG9wLXdhbGxldHMtb3RoZXItd2FsbGV0cyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogMS4yNWVtO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gIHBhZGRpbmc6IDEuMjVlbTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgZWFzZSAwLjJzO1xuXG4gIC13ZWJraXQtYm94LXNoYWRvdzogMHB4IDBweCAxMnB4IC00cHggcmdiKDAgMCAwIC8gMzAlKTtcbiAgLW1vei1ib3gtc2hhZG93OiAwcHggMHB4IDEycHggLTRweCByZ2IoMCAwIDAgLyAzMCUpO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDEycHggLTRweCByZ2IoMCAwIDAgLyAzMCUpO1xufVxuXG4udG9wLXdhbGxldHMtb3RoZXItd2FsbGV0cy1sZWZ0IHtcbiAgbWF4LXdpZHRoOiAxNDhweDtcbn1cblxuLnRvcC13YWxsZXRzLW90aGVyLXdhbGxldHMtbGVmdCBoMyB7XG4gIGNvbG9yOiAjMzM0MTU1O1xuICBtYXJnaW46IDBweDtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbi50b3Atd2FsbGV0cy1vdGhlci13YWxsZXRzLWxlZnQgcCB7XG4gIG1heC13aWR0aDogNDAwcHg7XG4gIGZvbnQtc2l6ZTogMC44NWVtO1xuICBmb250LXdlaWdodDogMzAwO1xuICBjb2xvcjogIzk0YTNiODtcbiAgbGluZS1oZWlnaHQ6IDEuMzVlbTtcbiAgbWFyZ2luOiAwcHg7XG4gIGZvbnQtc2l6ZTogMC43NWVtO1xufVxuXG4udG9wLXdhbGxldHMtb3RoZXItd2FsbGV0cy1yaWdodCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4udG9wLXdhbGxldHMtb3RoZXItd2FsbGV0cy1yaWdodCBpbWcge1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIHdpZHRoOiAyLjRlbTtcbiAgaGVpZ2h0OiAyLjRlbTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwcHggMHB4IDEycHggLTRweCByZ2IoMCAwIDAgLyAzMCUpO1xuICAtbW96LWJveC1zaGFkb3c6IDBweCAwcHggMTJweCAtNHB4IHJnYigwIDAgMCAvIDMwJSk7XG4gIGJveC1zaGFkb3c6IDBweCAwcHggMTJweCAtNHB4IHJnYigwIDAgMCAvIDMwJSk7XG59XG5cbi50b3Atd2FsbGV0cy1vdGhlci13YWxsZXRzLWNlbnRlci13YWxsZXQge1xuICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDUwMHB4KSB0cmFuc2xhdGVaKDEwMHB4KTtcbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAudG9wLXdhbGxldHMtaW5mbyBoMyB7XG4gICAgZm9udC1zaXplOiAxZW07XG4gIH1cblxuICAudG9wLXdhbGxldHMtaW5mbyBwIHtcbiAgICBmb250LXNpemU6IDAuNzVlbTtcbiAgfVxuXG4gIC50b3Atd2FsbGV0cy1vdGhlci13YWxsZXRzIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG5cbiAgLnRvcC13YWxsZXRzLW90aGVyLXdhbGxldHMtbGVmdCB7XG4gICAgb3JkZXI6IDE7XG4gIH1cblxuICAudG9wLXdhbGxldHMtb3RoZXItd2FsbGV0cy1sZWZ0IGgzIHtcbiAgICBmb250LXNpemU6IDAuODVlbTtcbiAgfVxuXG4gIC50b3Atd2FsbGV0cy1vdGhlci13YWxsZXRzLWxlZnQgcCB7XG4gICAgZm9udC1zaXplOiAwLjY1ZW07XG4gIH1cbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0MDBweCkge1xuICAudG9wLXdhbGxldHMtb3RoZXItd2FsbGV0cy1yaWdodCB7XG4gICAgbWF4LXdpZHRoOiA1MHB4O1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC44KTtcbiAgfVxufVxuIiwiLndhbGxldC1tYWluIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAxLjI1ZW07XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgcGFkZGluZzogMTVweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgZWFzZSAwLjJzO1xuXG4gIC13ZWJraXQtYm94LXNoYWRvdzogMHB4IDBweCAxMnB4IC00cHggcmdiKDAgMCAwIC8gMzAlKTtcbiAgLW1vei1ib3gtc2hhZG93OiAwcHggMHB4IDEycHggLTRweCByZ2IoMCAwIDAgLyAzMCUpO1xuICBib3gtc2hhZG93OiAwcHggMHB4IDEycHggLTRweCByZ2IoMCAwIDAgLyAzMCUpO1xufVxuXG4ud2FsbGV0LWRpc2FibGVkIHtcbiAgb3BhY2l0eTogMC41O1xufVxuXG4ud2FsbGV0LW1haW46aG92ZXIge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEuMDEpO1xufVxuXG4ud2FsbGV0LW1haW46YWN0aXZlIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjk5KTtcbn1cblxuLndhbGxldC1tYWluLWxlZnQge1xuICBtYXgtd2lkdGg6IDE0OHB4O1xuICBmbGV4OiAxO1xufVxuXG4udGhlbWVfX2RhcmsgLndhbGxldC1tYWluLWxlZnQgaDMge1xuICBjb2xvcjogd2hpdGU7XG59XG5cbi50aGVtZV9fZGFyayAudG9wLXdhbGxldHMtaW5mbyBwIHtcbiAgY29sb3I6ICNiNWI4YmU7XG59XG5cbi50aGVtZV9fZGFyayAud2FsbGV0LW1haW4tcmlnaHQge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDBweCAwcHggMTJweCAtNHB4IHJnYigwIDAgMCAvIDYzJSk7XG4gIC1tb3otYm94LXNoYWRvdzogMHB4IDBweCAxMnB4IC00cHggcmdiKDAgMCAwIC8gNjMlKTtcbiAgYm94LXNoYWRvdzogMHB4IDBweCAxMnB4IC00cHggcmdiKDAgMCAwIC8gNjMlKTtcbn1cblxuLnRoZW1lX19kYXJrIC53YWxsZXQtc21hbGwgaW1nIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwcHggMHB4IDEycHggLTRweCByZ2IoMCAwIDAgLyA2MyUpO1xuICAtbW96LWJveC1zaGFkb3c6IDBweCAwcHggMTJweCAtNHB4IHJnYigwIDAgMCAvIDYzJSk7XG4gIGJveC1zaGFkb3c6IDBweCAwcHggMTJweCAtNHB4IHJnYigwIDAgMCAvIDYzJSk7XG59XG5cbi50aGVtZV9fZGFyayAud2FsbGV0LXNtYWxsIGgzIHtcbiAgY29sb3I6IHdoaXRlO1xufVxuXG4ud2FsbGV0LW1haW4tbGVmdCBoMyB7XG4gIGNvbG9yOiAjMWMxZTIxO1xuICBtYXJnaW46IDBweDtcbiAgZm9udC1zaXplOiAxZW07XG59XG5cbi53YWxsZXQtbWFpbi1sZWZ0IHAge1xuICBtYXgtd2lkdGg6IDQwMHB4O1xuICBmb250LXdlaWdodDogMzAwO1xuICBjb2xvcjogIzdjODI4YjtcbiAgbGluZS1oZWlnaHQ6IDEuMzVlbTtcbiAgbWFyZ2luOiAwcHg7XG4gIGZvbnQtc2l6ZTogMC42NWVtO1xufVxuXG4ud2FsbGV0LW1haW4tcmlnaHQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDBweCAwcHggMTJweCAtNHB4IHJnYigwIDAgMCAvIDMwJSk7XG4gIC1tb3otYm94LXNoYWRvdzogMHB4IDBweCAxMnB4IC00cHggcmdiKDAgMCAwIC8gMzAlKTtcbiAgYm94LXNoYWRvdzogMHB4IDBweCAxMnB4IC00cHggcmdiKDAgMCAwIC8gMzAlKTtcbn1cblxuLndhbGxldC1tYWluLXJpZ2h0IGltZyB7XG4gIHdpZHRoOiAzLjJlbTtcbiAgaGVpZ2h0OiAzLjJlbTtcbn1cblxuLndhbGxldC1tYWluLXRhZ3Mge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDZweDtcbn1cblxuLndhbGxldC1tYWluLXRhZyB7XG4gIGNvbG9yOiAjMzg4MGZmO1xuICBtYXJnaW46IDBweDtcbiAgZm9udC1zaXplOiAwLjc1ZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIG1hcmdpbi10b3A6IDZweDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cblxuLndhbGxldC1zbWFsbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDAuNWVtO1xufVxuXG4ud2FsbGV0LXNtYWxsIGltZyB7XG4gIHBhZGRpbmc6IDAuNGVtO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICB3aWR0aDogMi41ZW07XG4gIGhlaWdodDogMi41ZW07XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIGVhc2UgMC4ycztcblxuICAtd2Via2l0LWJveC1zaGFkb3c6IDBweCAwcHggMTJweCAtNHB4IHJnYigwIDAgMCAvIDMwJSk7XG4gIC1tb3otYm94LXNoYWRvdzogMHB4IDBweCAxMnB4IC00cHggcmdiKDAgMCAwIC8gMzAlKTtcbiAgYm94LXNoYWRvdzogMHB4IDBweCAxMnB4IC00cHggcmdiKDAgMCAwIC8gMzAlKTtcbn1cblxuLndhbGxldC1zbWFsbCBpbWc6aG92ZXIge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEuMDEpO1xufVxuXG4ud2FsbGV0LXNtYWxsIGltZzphY3RpdmUge1xuICB0cmFuc2Zvcm06IHNjYWxlKDAuOTkpO1xufVxuXG4ud2FsbGV0LXNtYWxsIGgzIHtcbiAgY29sb3I6ICMzMzQxNTU7XG4gIG1hcmdpbjogMHB4O1xuICBmb250LXNpemU6IDAuOGVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi53YWxsZXQtbWFpbi1tb2JpbGUge1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAxZW07XG59XG5cbi53YWxsZXQtbWFpbi1sZWZ0LW1vYmlsZSB7XG4gIG9yZGVyOiAxO1xufVxuXG4ud2FsbGV0LW1haW4tbGVmdC1tb2JpbGUgaDMge1xuICBmb250LXNpemU6IDAuOWVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi53YWxsZXQtbWFpbi1sZWZ0LW1vYmlsZSBwIHtcbiAgZm9udC1zaXplOiAwLjY1ZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAud2FsbGV0LW1haW4ge1xuICAgIHBhZGRpbmc6IDAuNjVlbSAxNXB4O1xuICB9XG5cbiAgLndhbGxldC1tYWluLW1vYmlsZSB7XG4gICAgcGFkZGluZzogMS4yNWVtO1xuICB9XG59XG4iLCIud2FsbGV0cy1idXR0b24ge1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDFweCBzb2xpZCAjMzg4MGZmO1xuICBjb2xvcjogIzM4ODBmZjtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDEycHggMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxLjhlbTtcbiAgdHJhbnNpdGlvbjogYWxsIGVhc2UgMC4ycztcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXNpemU6IDAuOWVtO1xufVxuXG4ud2FsbGV0cy1idXR0b246aG92ZXIge1xuICBjb2xvcjogd2hpdGU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzODgwZmY7XG59XG5cbi53YWxsZXRzLWxpc3QtbWFpbi13cmFwcGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4ud2FsbGV0cy1saXN0LXdyYXBwZXIge1xuICBkaXNwbGF5OiBncmlkO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCAxZnIpO1xuICBwYWRkaW5nOiAxLjhlbSAwcHg7XG4gIGdhcDogMS4yZW0gMGVtO1xuICBtYXgtaGVpZ2h0OiAxODBweDtcbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAud2FsbGV0cy1saXN0LXdyYXBwZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDEycHg7XG4gICAgbWF4LWhlaWdodDogMzAwcHg7XG4gICAgcGFkZGluZzogMS42ZW0gMC42ZW07XG4gICAgbWFyZ2luLXRvcDogMHB4O1xuICB9XG5cbiAgLndhbGxldHMtbGlzdC1tYWluLXdyYXBwZXI6OmJlZm9yZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMHB4O1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGxlZnQ6IC0yNHB4O1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgKyA0OHB4KTtcbiAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoXG4gICAgICBjaXJjbGUsXG4gICAgICByZ2JhKDE3MSwgMTcxLCAxNzEsIDAuNzMyOTUyNTU2MDIyNDA4OSkgMCUsXG4gICAgICByZ2JhKDE5MywgMTkzLCAxOTMsIDAuMTI3OTEwNTM5MjE1Njg2MykgMTAwJVxuICAgICk7XG4gICAgaGVpZ2h0OiAxcHg7XG4gIH1cbn1cbiIsIi5idXR0b24taWNvbiB7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIHBhZGRpbmc6IDJweDtcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2YwZjBmMTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZmlsbDogIzY0NzQ4YjtcbiAgdHJhbnNpdGlvbjogYWxsIGVhc2UgMC4ycztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG5cbi5idXR0b24taWNvbjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NzU1Njk7XG4gIGJvcmRlcjogMXB4IHNvbGlkICM0NzU1Njk7XG4gIGZpbGw6ICNlMmU4ZjA7XG59XG5cbi50aGVtZV9fZGFyayAuYnV0dG9uLWljb24ge1xuICBib3JkZXI6IDFweCBzb2xpZCAjNDc1NTY5O1xuICBmaWxsOiAjOTRhM2I4O1xufVxuXG4udGhlbWVfX2RhcmsgLmJ1dHRvbi1pY29uOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzY0NzQ4YjtcbiAgYm9yZGVyOiAxcHggc29saWQgIzY0NzQ4YjtcbiAgZmlsbDogI2YxZjVmOTtcbn1cbiIsIi5ib2R5LXN0eWxlIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuXG4udGhlbWVfX2RhcmsgLmJvZHktc3R5bGUge1xuICBjb2xvcjogd2hpdGU7XG59XG4iXX0= */`,n.appendChild(i);var s=document.createElement("div");n.appendChild(s),setTimeout(function(){return xce.createRoot(s).render(We.jsx(eGe,po({},e)))},50),iX=!0}(t),zj.next(!0)},jj=function(){var t=Promise.resolve("");Lh({title:"",body:"",buttons:[],openBugReport:!0,pairingPayload:{walletConnectSyncCode:t,p2pSyncCode:t,postmessageSyncCode:t,networkType:Ox.MAINNET}})},Fj=function(){zj.next(!1)},eGe=function(t){var e=Zr($t.useState(!0),2),r=e[0],n=e[1],i=Zr($t.useState(!1),2),s=i[0],o=i[1],c=Zr($t.useState(t),2),u=c[0],f=c[1];$t.useEffect(function(){var g=[];return g.push(zj.subscribe(function(m){return n(m)})),g.push(_le.subscribe(function(m){return f(m)})),function(){return g.forEach(function(m){return m.unsubscribe()})}},[]),$t.useEffect(function(){r?o(!0):setTimeout(function(){return o(!1)},300)},[r]);var d=po(po({},u),{},{onClose:function(){Fj(),u.closeButtonCallback&&u.closeButtonCallback()},open:r,closeOnBackdropClick:!0}),p=function(){return u.pairingPayload||u.openBugReport?We.jsx(JWe,po({},d)):We.jsx(_We,po({},d))};return We.jsxs("div",{className:"theme__".concat(Jle()),children:[s&&We.jsx(p,{})," "]})};(function(t){t[t.DESKTOP=0]="DESKTOP",t[t.IOS=1]="IOS",t[t.ANDROID=2]="ANDROID"})(tX||(tX={})),function(t){t.IOS="ios",t.ANDROID="android",t.EXTENSION="extension",t.DESKTOP="desktop",t.WEB="web"}(rX||(rX={}));vce(function t(){yce(this,t)});var s8,tGe=function(t){var e,r,n,i,s,o,c=Zr($t.useState(!0),2),u=c[0],f=c[1],d=t.label.includes("{{wallet}}")&&t.walletInfo,p=t.label.includes("Request sent to"),g=Zr($t.useState([0,0]),2),m=Zr(g[0],2),x=m[0],A=m[1],D=g[1],O=Zr($t.useState(!1),2),z=O[0],j=O[1],Q=(e=function(N){var U=Zr(N.offset,2),M=U[0],y=U[1];D([M,y])},r=$t.useRef({startX:0,startY:0,isDragging:!1}),n=$t.useRef([0,0]),i=function(N){N.preventDefault(),r.current.isDragging=!0,r.current.startX=N.clientX-n.current[0],r.current.startY=N.clientY-n.current[1],document.addEventListener("mousemove",s),document.addEventListener("mouseup",o)},s=function(N){if(r.current.isDragging){var U=N.clientX-r.current.startX,M=N.clientY-r.current.startY;n.current=[U,M],e({offset:[U,M]})}},o=function(){r.current.isDragging=!1,document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",o)},function(){return{onMouseDown:i}}),H=Hd(window);$t.useEffect(function(){p&&(f(!1),setTimeout(function(){f(!0)},3e3))},[p]),$t.useEffect(function(){t.open&&j(!1)},[t.open]);var W,F,b;return We.jsxs("div",po(po({onAnimationEnd:function(){t.open&&j(!0)},style:{position:"absolute",transform:"translate3d(".concat(x,"px, ").concat(A,"px, 0)"),touchAction:"none",minWidth:H?void 0:460,animation:t.open&&z?"none":void 0},className:t.open?"toast-wrapper-show":"toast-wrapper-hide"},H?void 0:Q()),{},{children:[We.jsxs("div",{className:"toast-header",children:[We.jsx(Mce,{}),d&&t.walletInfo&&We.jsx(We.Fragment,{children:(W=t.label,F=t.walletInfo,b=/({{\s*wallet\s*}})/g,W.split(b).map(function(N,U){return N.match(b)?We.jsxs(tPe.Fragment,{children:[We.jsx("img",{draggable:!1,src:F.icon,alt:"".concat(F.name," icon")}),We.jsx("h3",{children:F.name})]},U):We.jsx("p",{className:"toast-label",children:N},U)}))}),!d&&We.jsx("p",{className:"toast-label",children:t.label}),!Hd(window)&&t.openWalletAction&&We.jsx("div",{className:"toast-action-button",onClick:t.openWalletAction,children:"Open Wallet"}),We.jsx(jD,{onClick:t.onClickClose,children:We.jsx(Sce,{})})]}),t.actions&&u&&We.jsx("div",{className:"toast-body",children:t.actions.map(function(N,U){return We.jsxs("div",{className:"toast-action-wrapper",children:[We.jsx("p",{className:"toast-action-label ".concat(N.isBold?"toast-action-bold":""),children:N.text}),N.actionText&&We.jsx("div",{className:"toast-action-button",onClick:N.actionCallback,children:N.actionText})]},U)})})]}))},sX=!1,Bj=new rA,Vj=new rA,aX=0,a8=0,fd=function(t){var e=Date.now();e-aX>2e3?a8=1:a8++,aX=e,sX?setTimeout(function(){return Bj.next(t)},a8===1?0:500+100*(a8-2)):function(r){var n=document.createElement("beacon-toast");document.body.prepend(n);var i=n.attachShadow({mode:"open"}),s=document.createElement("style");s.textContent=`.toast-wrapper-show{animation:toastIn .3s ease forwards}.toast-wrapper-hide,.toast-wrapper-show{background-color:#fff;border-radius:6px;-webkit-box-shadow:0 4px 11px -4px rgba(0,0,0,.45);-moz-box-shadow:0 4px 11px -4px rgba(0,0,0,.45);box-shadow:0 4px 11px -4px rgba(0,0,0,.45);cursor:move;max-width:460px;overflow:hidden;position:fixed;right:12px;top:12px;user-select:none;z-index:1000000}.toast-wrapper-hide{animation:toastOut .3s ease forwards}@keyframes toastIn{0%{opacity:0;transform:translateY(-150px) scale(.2)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes toastOut{0%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(-150px) scale(.2)}}.toast-header{align-items:center;display:flex;gap:6px;overflow:hidden;padding:0 .6em 0 1.2em;position:relative}.toast-header img{width:24px}.toast-header h3{color:#334155;font-size:.8em;font-weight:700;margin:14px auto 13px 0}.toast-label{color:#334155;font-size:.9em;margin:1em 0}.toast-button-icon{margin-left:auto}.toast-body{padding:.6em 1.2em}.toast-action-wrapper{align-items:center;display:flex;justify-content:space-between}.toast-action-label{color:#64748b;font-size:.8em;margin:.8em 0}.toast-action-bold{color:#334155;font-weight:700}.toast-action-button{border-radius:6px;color:#3880ff;cursor:pointer;font-size:.8em;font-weight:600;padding:.4em .8em;transition:all .2s ease}.toast-action-button:hover{background-color:#e4eeff;transition:all .2s ease}@media only screen and (max-width:800px){.toast-wrapper-hide,.toast-wrapper-show{width:calc(100% - 24px)}}.theme__dark .toast-wrapper-hide,.theme__dark .toast-wrapper-show{background-color:#27334c;-webkit-box-shadow:0 4px 11px -4px rgba(0,0,0,.65);-moz-box-shadow:0 4px 11px -4px rgba(0,0,0,.65);box-shadow:0 4px 11px -4px rgba(0,0,0,.65)}.theme__dark .toast-header h3,.theme__dark .toast-label{color:#e2e8f0}.theme__dark .toast-action-label{color:#94a3b8}.theme__dark .toast-action-bold{color:#e2e8f0}.theme__dark .toast-action-button{color:#60a5fa}.theme__dark .toast-action-button:hover{background-color:#1e293b}.loader{background-color:#ddd;bottom:0;left:0;overflow:hidden;position:relative;width:100%}.loader,.loader:before{height:3px;position:absolute}.loader:before{-webkit-animation:lineAnim 1s linear infinite;-moz-animation:lineAnim 1s linear infinite;animation:lineAnim 1s linear infinite;background-color:#3880ff;content:"";left:-50%;width:40%}@keyframes lineAnim{0%{left:-40%}50%{left:20%;width:80%}to{left:100%;width:100%}}.button-icon{fill:#64748b;align-items:center;border:1px solid #f0f0f1;border-radius:100%;cursor:pointer;display:flex;height:24px;justify-content:center;margin-left:auto;padding:2px;transition:all .2s ease;width:24px}.button-icon:hover{fill:#e2e8f0;background-color:#475569;border:1px solid #475569}.theme__dark .button-icon{fill:#94a3b8;border:1px solid #475569}.theme__dark .button-icon:hover{fill:#f1f5f9;background-color:#64748b;border:1px solid #64748b}
|
|
126
126
|
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvdG9hc3Qvc3R5bGVzLmNzcyIsIi4uLy4uL2NvbXBvbmVudHMvbG9hZGVyL3N0eWxlcy5jc3MiLCIuLi8uLi9jb21wb25lbnRzL2J1dHRvbi1pY29uL2J1dHRvbi1pY29uLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFlRSxtQ0FDRixDQUVBLHdDQWJFLHFCQUF1QixDQUl2QixpQkFBa0IsQ0FFbEIsa0RBQXlELENBQ3pELCtDQUFzRCxDQUN0RCwwQ0FBaUQsQ0FYakQsV0FBWSxDQUNaLGVBQWdCLENBQ2hCLGVBQWdCLENBRWhCLGNBQWUsQ0FFZixVQUFXLENBRFgsUUFBUyxDQU5ULGdCQUFpQixDQVNqQixlQXdCRixDQWhCQSxvQkFlRSxvQ0FDRixDQUdBLG1CQUNFLEdBRUUsU0FBVSxDQURWLHNDQUVGLENBQ0EsR0FFRSxTQUFVLENBRFYsZ0NBRUYsQ0FDRixDQUVBLG9CQUNFLEdBRUUsU0FBVSxDQURWLGdDQUVGLENBQ0EsR0FFRSxTQUFVLENBRFYsc0NBRUYsQ0FDRixDQUVBLGNBR0Usa0JBQW1CLENBRG5CLFlBQWEsQ0FFYixPQUFRLENBQ1IsZUFBZ0IsQ0FKaEIsc0JBQTRCLENBSzVCLGlCQUNGLENBRUEsa0JBQ0UsVUFDRixDQUVBLGlCQUVFLGFBQWMsQ0FDZCxjQUFnQixDQUZoQixlQUFpQixDQUdqQix1QkFDRixDQUVBLGFBRUUsYUFBYyxDQUNkLGNBQWdCLENBRmhCLFlBR0YsQ0FFQSxtQkFDRSxnQkFDRixDQUVBLFlBQ0Usa0JBQ0YsQ0FFQSxzQkFFRSxrQkFBbUIsQ0FEbkIsWUFBYSxDQUViLDZCQUNGLENBRUEsb0JBR0UsYUFBYyxDQURkLGNBQWdCLENBRGhCLGFBR0YsQ0FFQSxtQkFFRSxhQUFjLENBRGQsZUFFRixDQUVBLHFCQU1FLGlCQUFrQixDQUZsQixhQUFjLENBSGQsY0FBZSxDQUNmLGNBQWdCLENBQ2hCLGVBQWdCLENBSWhCLGlCQUFvQixDQUZwQix1QkFHRixDQUVBLDJCQUNFLHdCQUF5QixDQUN6Qix1QkFDRixDQUVBLHlDQUtFLHdDQUNFLHVCQUNGLENBQ0YsQ0FTQSxrRUFDRSx3QkFBeUIsQ0FDekIsa0RBQXlELENBQ3pELCtDQUFzRCxDQUN0RCwwQ0FDRixDQU1BLHdEQUNFLGFBQ0YsQ0FFQSxpQ0FDRSxhQUNGLENBRUEsZ0NBQ0UsYUFDRixDQUVBLGtDQUNFLGFBQ0YsQ0FFQSx3Q0FDRSx3QkFDRixDQzNLQSxRQUdFLHFCQUFzQixDQUl0QixRQUFXLENBRFgsTUFBUyxDQUVULGVBQWdCLENBTmhCLGlCQUFrQixDQUdsQixVQUlGLENBRUEsdUJBVkUsVUFBVyxDQUdYLGlCQWlCRixDQVZBLGVBT0UsNkNBQThDLENBQzlDLDBDQUEyQyxDQUMzQyxxQ0FBc0MsQ0FIdEMsd0JBQXlCLENBTHpCLFVBQVcsQ0FFWCxTQUFVLENBRVYsU0FLRixDQUVBLG9CQUNFLEdBQ0UsU0FDRixDQUNBLElBQ0UsUUFBUyxDQUNULFNBQ0YsQ0FDQSxHQUNFLFNBQVUsQ0FDVixVQUNGLENBQ0YsQ0NuQ0EsYUFVRSxZQUFhLENBSGIsa0JBQW1CLENBRm5CLHdCQUF5QixDQUR6QixrQkFBbUIsQ0FLbkIsY0FBZSxDQUhmLFlBQWEsQ0FKYixXQUFZLENBTVosc0JBQXVCLENBSXZCLGdCQUFpQixDQVRqQixXQUFZLENBUVosdUJBQXlCLENBVnpCLFVBWUYsQ0FFQSxtQkFHRSxZQUFhLENBRmIsd0JBQXlCLENBQ3pCLHdCQUVGLENBRUEsMEJBRUUsWUFBYSxDQURiLHdCQUVGLENBRUEsZ0NBR0UsWUFBYSxDQUZiLHdCQUF5QixDQUN6Qix3QkFFRiIsImZpbGUiOiJhZ2dyZWdhdGVkLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi50b2FzdC13cmFwcGVyLXNob3cge1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgY3Vyc29yOiBtb3ZlO1xuICBtYXgtd2lkdGg6IDQ2MHB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDEycHg7XG4gIHJpZ2h0OiAxMnB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIHotaW5kZXg6IDEwMDAwMDA7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMHB4IDRweCAxMXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjQ1KTtcbiAgLW1vei1ib3gtc2hhZG93OiAwcHggNHB4IDExcHggLTRweCByZ2JhKDAsIDAsIDAsIDAuNDUpO1xuICBib3gtc2hhZG93OiAwcHggNHB4IDExcHggLTRweCByZ2JhKDAsIDAsIDAsIDAuNDUpO1xuICAvKiBBcHBseSBmYWRlLWluIGFuaW1hdGlvbiAqL1xuICBhbmltYXRpb246IHRvYXN0SW4gMC4zcyBlYXNlIGZvcndhcmRzO1xufVxuXG4udG9hc3Qtd3JhcHBlci1oaWRlIHtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGN1cnNvcjogbW92ZTtcbiAgbWF4LXdpZHRoOiA0NjBweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAxMnB4O1xuICByaWdodDogMTJweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICB6LWluZGV4OiAxMDAwMDAwO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDBweCA0cHggMTFweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC40NSk7XG4gIC1tb3otYm94LXNoYWRvdzogMHB4IDRweCAxMXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjQ1KTtcbiAgYm94LXNoYWRvdzogMHB4IDRweCAxMXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjQ1KTtcbiAgLyogQXBwbHkgZmFkZS1vdXQgYW5pbWF0aW9uICovXG4gIGFuaW1hdGlvbjogdG9hc3RPdXQgMC4zcyBlYXNlIGZvcndhcmRzO1xufVxuXG4vKiBLZXlmcmFtZXMgZm9yIHRoZSB0b2FzdCBhbmltYXRpb25zICovXG5Aa2V5ZnJhbWVzIHRvYXN0SW4ge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTE1MHB4KSBzY2FsZSgwLjIpO1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgdG9hc3RPdXQge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNTBweCkgc2NhbGUoMC4yKTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG5cbi50b2FzdC1oZWFkZXIge1xuICBwYWRkaW5nOiAwcHggMC42ZW0gMHB4IDEuMmVtO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDZweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udG9hc3QtaGVhZGVyIGltZyB7XG4gIHdpZHRoOiAyNHB4O1xufVxuXG4udG9hc3QtaGVhZGVyIGgzIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjMzM0MTU1O1xuICBmb250LXNpemU6IDAuOGVtO1xuICBtYXJnaW46IDE0cHggYXV0byAxM3B4IDA7XG59XG5cbi50b2FzdC1sYWJlbCB7XG4gIG1hcmdpbjogMWVtIDBlbSAxZW0gMGVtO1xuICBjb2xvcjogIzMzNDE1NTtcbiAgZm9udC1zaXplOiAwLjllbTtcbn1cblxuLnRvYXN0LWJ1dHRvbi1pY29uIHtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG5cbi50b2FzdC1ib2R5IHtcbiAgcGFkZGluZzogMC42ZW0gMS4yZW07XG59XG5cbi50b2FzdC1hY3Rpb24td3JhcHBlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cblxuLnRvYXN0LWFjdGlvbi1sYWJlbCB7XG4gIG1hcmdpbjogMC44ZW0gMGVtO1xuICBmb250LXNpemU6IDAuOGVtO1xuICBjb2xvcjogIzY0NzQ4Yjtcbn1cblxuLnRvYXN0LWFjdGlvbi1ib2xkIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjMzM0MTU1O1xufVxuXG4udG9hc3QtYWN0aW9uLWJ1dHRvbiB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY29sb3I6ICMzODgwZmY7XG4gIHRyYW5zaXRpb246IGFsbCBlYXNlIDAuMnM7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgcGFkZGluZzogMC40ZW0gMC44ZW07XG59XG5cbi50b2FzdC1hY3Rpb24tYnV0dG9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U0ZWVmZjtcbiAgdHJhbnNpdGlvbjogYWxsIGVhc2UgMC4ycztcbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA4MDBweCkge1xuICAudG9hc3Qtd3JhcHBlci1zaG93IHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gMjRweCk7XG4gIH1cblxuICAudG9hc3Qtd3JhcHBlci1oaWRlIHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gMjRweCk7XG4gIH1cbn1cblxuLnRoZW1lX19kYXJrIC50b2FzdC13cmFwcGVyLXNob3cge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjczMzRjO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDBweCA0cHggMTFweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC42NSk7XG4gIC1tb3otYm94LXNoYWRvdzogMHB4IDRweCAxMXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjY1KTtcbiAgYm94LXNoYWRvdzogMHB4IDRweCAxMXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjY1KTtcbn1cblxuLnRoZW1lX19kYXJrIC50b2FzdC13cmFwcGVyLWhpZGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjczMzRjO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDBweCA0cHggMTFweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC42NSk7XG4gIC1tb3otYm94LXNoYWRvdzogMHB4IDRweCAxMXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjY1KTtcbiAgYm94LXNoYWRvdzogMHB4IDRweCAxMXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjY1KTtcbn1cblxuLnRoZW1lX19kYXJrIC50b2FzdC1oZWFkZXIgaDMge1xuICBjb2xvcjogI2UyZThmMDtcbn1cblxuLnRoZW1lX19kYXJrIC50b2FzdC1sYWJlbCB7XG4gIGNvbG9yOiAjZTJlOGYwO1xufVxuXG4udGhlbWVfX2RhcmsgLnRvYXN0LWFjdGlvbi1sYWJlbCB7XG4gIGNvbG9yOiAjOTRhM2I4O1xufVxuXG4udGhlbWVfX2RhcmsgLnRvYXN0LWFjdGlvbi1ib2xkIHtcbiAgY29sb3I6ICNlMmU4ZjA7XG59XG5cbi50aGVtZV9fZGFyayAudG9hc3QtYWN0aW9uLWJ1dHRvbiB7XG4gIGNvbG9yOiAjNjBhNWZhO1xufVxuXG4udGhlbWVfX2RhcmsgLnRvYXN0LWFjdGlvbi1idXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWUyOTNiO1xufVxuIiwiLmxvYWRlciB7XG4gIGhlaWdodDogM3B4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZGQ7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGxlZnQ6IDBweDtcbiAgYm90dG9tOiAwcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5sb2FkZXI6YmVmb3JlIHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogLTUwJTtcbiAgaGVpZ2h0OiAzcHg7XG4gIHdpZHRoOiA0MCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzODgwZmY7XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBsaW5lQW5pbSAxcyBsaW5lYXIgaW5maW5pdGU7XG4gIC1tb3otYW5pbWF0aW9uOiBsaW5lQW5pbSAxcyBsaW5lYXIgaW5maW5pdGU7XG4gIGFuaW1hdGlvbjogbGluZUFuaW0gMXMgbGluZWFyIGluZmluaXRlO1xufVxuXG5Aa2V5ZnJhbWVzIGxpbmVBbmltIHtcbiAgMCUge1xuICAgIGxlZnQ6IC00MCU7XG4gIH1cbiAgNTAlIHtcbiAgICBsZWZ0OiAyMCU7XG4gICAgd2lkdGg6IDgwJTtcbiAgfVxuICAxMDAlIHtcbiAgICBsZWZ0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG4iLCIuYnV0dG9uLWljb24ge1xuICB3aWR0aDogMjRweDtcbiAgaGVpZ2h0OiAyNHB4O1xuICBwYWRkaW5nOiAycHg7XG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNmMGYwZjE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZpbGw6ICM2NDc0OGI7XG4gIHRyYW5zaXRpb246IGFsbCBlYXNlIDAuMnM7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuXG4uYnV0dG9uLWljb246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDc1NTY5O1xuICBib3JkZXI6IDFweCBzb2xpZCAjNDc1NTY5O1xuICBmaWxsOiAjZTJlOGYwO1xufVxuXG4udGhlbWVfX2RhcmsgLmJ1dHRvbi1pY29uIHtcbiAgYm9yZGVyOiAxcHggc29saWQgIzQ3NTU2OTtcbiAgZmlsbDogIzk0YTNiODtcbn1cblxuLnRoZW1lX19kYXJrIC5idXR0b24taWNvbjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2NDc0OGI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICM2NDc0OGI7XG4gIGZpbGw6ICNmMWY1Zjk7XG59XG4iXX0= */`,i.appendChild(s);var o=document.createElement("div");i.appendChild(o),setTimeout(function(){return xce.createRoot(o).render(We.jsx(rGe,po({},r)))},50),sX=!0}(t),s8&&(clearTimeout(s8),s8=void 0),s8=t.timer?setTimeout(function(){return ad()},t.timer):void 0,Vj.next(!0)},ad=function(){Bj.next(void 0),Vj.next(!1)},rGe=function(t){var e=Zr($t.useState(t),2),r=e[0],n=e[1],i=Zr($t.useState(!0),2),s=i[0],o=i[1],c=Zr($t.useState(!1),2),u=c[0],f=c[1];return $t.useEffect(function(){var d=[];return d.push(Bj.subscribe(function(p){n(p)})),d.push(Vj.subscribe(function(p){o(p)})),function(){return d.forEach(function(p){return p.unsubscribe()})}},[]),$t.useEffect(function(){r?s&&f(!0):f(!1)},[s,r]),We.jsx(We.Fragment,{children:We.jsx("div",{className:"theme__".concat(Jle()),children:u&&r&&We.jsx(tGe,{label:r.body,open:s,onClickClose:ad,actions:r.actions,walletInfo:r.walletInfo,openWalletAction:r.openWalletAction})})})};const oA=t=>t.length>=12?`${t.substr(0,5)}...${t.substr(-5)}`:t,Qg=new bj("BeaconEvents"),d1=5*1e3;var It;(function(t){t.PERMISSION_REQUEST_SENT="PERMISSION_REQUEST_SENT",t.PERMISSION_REQUEST_SUCCESS="PERMISSION_REQUEST_SUCCESS",t.PERMISSION_REQUEST_ERROR="PERMISSION_REQUEST_ERROR",t.PROOF_OF_EVENT_CHALLENGE_REQUEST_SENT="PROOF_OF_EVENT_CHALLENGE_REQUEST_SENT",t.PROOF_OF_EVENT_CHALLENGE_REQUEST_SUCCESS="PROOF_OF_EVENT_CHALLENGE_REQUEST_SUCCESS",t.PROOF_OF_EVENT_CHALLENGE_REQUEST_ERROR="PROOF_OF_EVENT_CHALLENGE_REQUEST_ERROR",t.SIMULATED_PROOF_OF_EVENT_CHALLENGE_REQUEST_SENT="SIMULATED_PROOF_OF_EVENT_CHALLENGE_REQUEST_SENT",t.SIMULATED_PROOF_OF_EVENT_CHALLENGE_REQUEST_SUCCESS="SIMULATED_PROOF_OF_EVENT_CHALLENGE_REQUEST_SUCCESS",t.SIMULATED_PROOF_OF_EVENT_CHALLENGE_REQUEST_ERROR="SIMULATED_PROOF_OF_EVENT_CHALLENGE_REQUEST_ERROR",t.OPERATION_REQUEST_SENT="OPERATION_REQUEST_SENT",t.OPERATION_REQUEST_SUCCESS="OPERATION_REQUEST_SUCCESS",t.OPERATION_REQUEST_ERROR="OPERATION_REQUEST_ERROR",t.SIGN_REQUEST_SENT="SIGN_REQUEST_SENT",t.SIGN_REQUEST_SUCCESS="SIGN_REQUEST_SUCCESS",t.SIGN_REQUEST_ERROR="SIGN_REQUEST_ERROR",t.BLOCKCHAIN_REQUEST_SUCCESS="BLOCKCHAIN_REQUEST_SUCCESS",t.BROADCAST_REQUEST_SENT="BROADCAST_REQUEST_SENT",t.BROADCAST_REQUEST_SUCCESS="BROADCAST_REQUEST_SUCCESS",t.BROADCAST_REQUEST_ERROR="BROADCAST_REQUEST_ERROR",t.ACKNOWLEDGE_RECEIVED="ACKNOWLEDGE_RECEIVED",t.LOCAL_RATE_LIMIT_REACHED="LOCAL_RATE_LIMIT_REACHED",t.NO_PERMISSIONS="NO_PERMISSIONS",t.ACTIVE_ACCOUNT_SET="ACTIVE_ACCOUNT_SET",t.ACTIVE_TRANSPORT_SET="ACTIVE_TRANSPORT_SET",t.SHOW_PREPARE="SHOW_PREPARE",t.HIDE_UI="HIDE_UI",t.INVALID_ACTIVE_ACCOUNT_STATE="INVALID_ACTIVE_ACCOUNT_STATE",t.INVALID_ACCOUNT_DEACTIVATED="INVALID_ACCOUNT_DEACTIVATED",t.PAIR_INIT="PAIR_INIT",t.PAIR_SUCCESS="PAIR_SUCCESS",t.CHANNEL_CLOSED="CHANNEL_CLOSED",t.GENERIC_ERROR="GENERIC_ERROR",t.OPEN_BUG_REPORT="OPEN_BUG_REPORT",t.RELAYER_ERROR="RELAYER_ERROR",t.INTERNAL_ERROR="INTERNAL_ERROR",t.UNKNOWN="UNKNOWN"})(It||(It={}));const dv=async t=>{let e;const r=[];if(t.walletInfo.deeplink&&(t.walletInfo.type==="web"||t.walletInfo.type==="mobile"&&zD(window)||t.walletInfo.type==="desktop"&&!zD(window))){const n=t.walletInfo.deeplink;e=async()=>{const i=document.createElement("a");i.setAttribute("rel","noopener"),i.setAttribute("href",n),i.setAttribute("target","_blank"),i.dispatchEvent(new MouseEvent("click",{view:window,bubbles:!0,cancelable:!0}))}}r.push({text:"No answer from your wallet received yet. Please make sure the wallet is open.",isBold:!0}),r.push({text:"Wallet not receiving request?",actionText:"Reset Connection",actionCallback:async()=>{ad();const n=t.extraInfo.resetCallback;n&&(Qg.log("showSentToast","resetCallback invoked"),await n())}}),r.push({text:"Do you wish to report a bug?",actionText:"Open",actionCallback:async()=>{ad(),jj()}}),fd({body:"Request sent to {{wallet}}",walletInfo:t.walletInfo,state:"loading",timer:Hd(window)?d1:0,actions:r,openWalletAction:e})},nGe=async t=>{fd({body:"Awaiting confirmation in {{wallet}}",state:"acknowledge",walletInfo:t.walletInfo})},iGe=async t=>{const e=t.walletInfo?"Preparing Request for {{wallet}}...":"Preparing Request...";fd({body:e,state:"prepare",walletInfo:t.walletInfo})},sGe=t=>{t!=null&&t.includes("alert")&&Fj(),(t!=null&&t.includes("toast")||!t)&&ad()},aGe=async()=>{Lh({title:"No Permission",body:"Please allow the wallet to handle this type of request."})},oGe=async()=>{Lh({title:"Invalid state",body:`An active account has been received, but no active subscription was found for BeaconEvent.ACTIVE_ACCOUNT_SET.
|
|
127
127
|
For more information, visit: https://docs.walletbeacon.io/guides/migration-guide`})},cGe=async()=>{await Lh({title:"Error",body:"Your session has expired. Please pair with your wallet again."})},lGe=async t=>{Lh({title:`${t}`,body:"Please try again. If this problem persists please send us a bug report.",buttons:[{label:"Send Report",type:"primary",onClick:()=>jj()}]})},hv=async(t,e)=>{var i,s,o,c,u;const r=t.errorResponse.errorType?Kqe(t.errorResponse.errorType,t.errorResponse.errorData):new mce,n=[{text:r.title,isBold:!0}];if(t.errorResponse.errorType===Ci.TRANSACTION_INVALID_ERROR&&t.errorResponse.errorData){const f=t.errorResponse.errorData,d=t.errorMessages;let p=!1;if((i=f[0])!=null&&i.contract_handle&&d&&(d!=null&&d[f[0].contract_handle])){const g=((o=(s=f[1])==null?void 0:s.with)==null?void 0:o.int)??((u=(c=f[1])==null?void 0:c.with)==null?void 0:u.string),m=d==null?void 0:d[f[0].contract_handle];g&&(m!=null&&m[g])&&(n.push({text:m==null?void 0:m[g],isBold:!0}),p=!0)}p||n.push({text:r.description}),n.push({text:"",actionText:"Show Details",actionCallback:async()=>{ad(),Lh({title:r.title,body:r.fullDescription.description,data:r.fullDescription.data,buttons:e})}})}fd({body:"{{wallet}} has returned an error",timer:t.errorResponse.errorType===Ci.ABORTED_ERROR?d1:void 0,state:"finished",walletInfo:t.walletInfo,actions:n})},uGe=async()=>{Lh({title:"Error",body:"Rate limit reached. Please slow down",buttons:[{text:"Done",style:"outline"}],timer:3e3})},fGe=()=>{Fj()},dGe=async()=>{await jj()},hGe=async()=>{Lh({title:"Error",body:"Failed to connect to the relayer. Please check that your system time is synchronized with the current time and reload the page.",buttons:[{text:"Done",style:"outline"}],timer:1500})},pGe=async()=>{},gGe=async t=>{const e=[...t.buttons??[]];e.push({text:"Done",style:"outline"});const r={title:"Internal Error",body:t.text,buttons:e};Lh(r)},bGe=async t=>{Qg.log("showPairAlert");const e={title:"Choose your preferred wallet",body:"<p></p>",pairingPayload:{p2pSyncCode:t.p2pPeerInfo,walletConnectSyncCode:t.walletConnectPeerInfo,postmessageSyncCode:t.postmessagePeerInfo,networkType:t.networkType},closeButtonCallback:t.abortedHandler,disclaimerText:t.disclaimerText,analytics:t.analytics,featuredWallets:t.featuredWallets,substratePairing:t.substratePairing};Lh(e)},mGe=async t=>{const{output:e}=t,r=[{text:"Address",actionText:oA(e.address),isBold:!0}];e.network.type!=="substrate"&&(r.push({text:"Network",actionText:`${e.network.type}`}),r.push({text:"Permissions",actionText:e.scopes.join(", ")})),fd({body:"{{wallet}} has granted permission",timer:d1,walletInfo:t.walletInfo,state:"finished",actions:r})},yGe=async t=>{const{output:e}=t;fd({body:`{{wallet}} has ${e.isAccepted?"accepted":"refused"} the challenge`,timer:d1,walletInfo:t.walletInfo,state:"finished",actions:e.isAccepted?[{text:`Payload hash: ${e.payloadHash}`,actionText:"Copy to clipboard",actionCallback:async()=>{navigator.clipboard.writeText(e.payloadHash).then(()=>{Qg.log("showSignSuccessAlert","Copying to clipboard was successful!")},r=>{Qg.error("showSignSuccessAlert","Could not copy text to clipboard: ",r)}),ad()}}]:[]})},vGe=async t=>{const{output:e}=t;fd({body:e.errorMessage?"{{wallet}} has returned an error":"{{wallet}} has returned the list of operation",timer:d1,walletInfo:t.walletInfo,state:"finished",actions:e.errorMessage?[{text:"Error message",actionText:e.errorMessage}]:[{text:"Operation list",actionText:"Copy to clipboard",actionCallback:async()=>{navigator.clipboard.writeText(e.operationsList).then(()=>{Qg.log("showSignSuccessAlert","Copying to clipboard was successful!")},r=>{Qg.error("showSignSuccessAlert","Could not copy text to clipboard: ",r)}),ad()}}]})},EGe=async t=>{const{account:e,output:r,blockExplorer:n}=t;fd({body:"{{wallet}} successfully submitted operation",timer:d1,state:"finished",walletInfo:t.walletInfo,actions:[{text:oA(r.transactionHash),isBold:!0,actionText:"Open Blockexplorer",actionLogo:"external",actionCallback:async()=>{const i=await n.getTransactionLink(r.transactionHash,e.network);window.open(i,"_blank","noopener"),ad()}}]})},wGe=async t=>{const e=t.output;fd({body:"{{wallet}} successfully signed payload",timer:d1,state:"finished",walletInfo:t.walletInfo,actions:[{text:`Signature: ${oA(e.signature)}`,actionText:"Copy to clipboard",actionCallback:async()=>{navigator.clipboard.writeText(e.signature).then(()=>{Qg.log("showSignSuccessAlert","Copying to clipboard was successful!")},r=>{Qg.error("showSignSuccessAlert","Could not copy text to clipboard: ",r)}),ad()}}]})},IGe=async t=>{fd({body:"{{wallet}} request successfully executed",timer:d1,state:"finished",walletInfo:t.walletInfo})},xGe=async t=>{const{network:e,output:r,blockExplorer:n}=t;fd({body:"{{wallet}} successfully injected operation",timer:d1,state:"finished",walletInfo:t.walletInfo,actions:[{text:oA(r.transactionHash),isBold:!0,actionText:"Open Blockexplorer",actionLogo:"external",actionCallback:async()=>{const i=await n.getTransactionLink(r.transactionHash,e);window.open(i,"_blank","noopener"),ad()}}]})},mO=()=>async()=>{};It.PERMISSION_REQUEST_SENT+"",It.PERMISSION_REQUEST_SUCCESS+"",It.PERMISSION_REQUEST_ERROR+"",It.PROOF_OF_EVENT_CHALLENGE_REQUEST_SENT+"",It.PROOF_OF_EVENT_CHALLENGE_REQUEST_SUCCESS+"",It.PROOF_OF_EVENT_CHALLENGE_REQUEST_ERROR+"",It.SIMULATED_PROOF_OF_EVENT_CHALLENGE_REQUEST_SENT+"",It.SIMULATED_PROOF_OF_EVENT_CHALLENGE_REQUEST_SUCCESS+"",It.SIMULATED_PROOF_OF_EVENT_CHALLENGE_REQUEST_ERROR+"",It.OPERATION_REQUEST_SENT+"",It.OPERATION_REQUEST_SUCCESS+"",It.OPERATION_REQUEST_ERROR+"",It.SIGN_REQUEST_SENT+"",It.SIGN_REQUEST_SUCCESS+"",It.SIGN_REQUEST_ERROR+"",It.BROADCAST_REQUEST_SENT+"",It.BROADCAST_REQUEST_SUCCESS+"",It.BROADCAST_REQUEST_ERROR+"",It.ACKNOWLEDGE_RECEIVED+"",It.LOCAL_RATE_LIMIT_REACHED+"",It.NO_PERMISSIONS+"",It.ACTIVE_ACCOUNT_SET+"",mO(),It.ACTIVE_TRANSPORT_SET+"",mO(),It.INVALID_ACTIVE_ACCOUNT_STATE+"",It.GENERIC_ERROR+"",It.INVALID_ACCOUNT_DEACTIVATED+"",It.SHOW_PREPARE+"",It.HIDE_UI+"",It.PAIR_INIT+"",It.PAIR_SUCCESS+"",It.OPEN_BUG_REPORT+"",It.RELAYER_ERROR+"",It.CHANNEL_CLOSED+"",It.INTERNAL_ERROR+"",It.BLOCKCHAIN_REQUEST_SUCCESS+"",It.UNKNOWN+"",mO();Ps.BlockchainRequest+"",It.OPERATION_REQUEST_SENT,It.BLOCKCHAIN_REQUEST_SUCCESS,It.OPERATION_REQUEST_ERROR,Ps.BlockchainResponse+"",It.UNKNOWN,It.UNKNOWN,It.UNKNOWN,Ps.PermissionRequest+"",It.PERMISSION_REQUEST_SENT,It.PERMISSION_REQUEST_SUCCESS,It.PERMISSION_REQUEST_ERROR,Ps.PermissionResponse+"",It.UNKNOWN,It.UNKNOWN,It.UNKNOWN,Ps.ProofOfEventChallengeRequest+"",It.PROOF_OF_EVENT_CHALLENGE_REQUEST_SENT,It.PROOF_OF_EVENT_CHALLENGE_REQUEST_SUCCESS,It.PROOF_OF_EVENT_CHALLENGE_REQUEST_ERROR,Ps.ProofOfEventChallengeResponse+"",It.UNKNOWN,It.UNKNOWN,It.UNKNOWN,Ps.SimulatedProofOfEventChallengeRequest+"",It.SIMULATED_PROOF_OF_EVENT_CHALLENGE_REQUEST_SENT,It.SIMULATED_PROOF_OF_EVENT_CHALLENGE_REQUEST_SUCCESS,It.SIMULATED_PROOF_OF_EVENT_CHALLENGE_REQUEST_ERROR,Ps.SimulatedProofOfEventChallengeResponse+"",It.UNKNOWN,It.UNKNOWN,It.UNKNOWN,Ps.OperationRequest+"",It.OPERATION_REQUEST_SENT,It.OPERATION_REQUEST_SUCCESS,It.OPERATION_REQUEST_ERROR,Ps.OperationResponse+"",It.UNKNOWN,It.UNKNOWN,It.UNKNOWN,Ps.SignPayloadRequest+"",It.SIGN_REQUEST_SENT,It.SIGN_REQUEST_SUCCESS,It.SIGN_REQUEST_ERROR,Ps.SignPayloadResponse+"",It.UNKNOWN,It.UNKNOWN,It.UNKNOWN,Ps.BroadcastRequest+"",It.BROADCAST_REQUEST_SENT,It.BROADCAST_REQUEST_SUCCESS,It.BROADCAST_REQUEST_ERROR,Ps.BroadcastResponse+"",It.UNKNOWN,It.UNKNOWN,It.UNKNOWN,Ps.ChangeAccountRequest+"",It.UNKNOWN,It.UNKNOWN,It.UNKNOWN,Ps.Acknowledge+"",It.UNKNOWN,It.UNKNOWN,It.UNKNOWN,Ps.Disconnect+"",It.UNKNOWN,It.UNKNOWN,It.UNKNOWN,Ps.Error+"",It.UNKNOWN,It.UNKNOWN,It.UNKNOWN;var oX;(function(t){t.GET_ACCOUNTS="tezos_getAccounts",t.OPERATION_REQUEST="tezos_send",t.SIGN="tezos_sign"})(oX||(oX={}));var cX;(function(t){t.CHAIN_CHANGED="chainChanged",t.ACCOUNTS_CHANGED="accountsChanged",t.REQUEST_ACKNOWLEDGED="requestAcknowledged"})(cX||(cX={}));const $le=1e6,Yv={mainnet:{name:"Mainnet",rpcUrl:"https://mainnet.tezos.ecadinfra.com",tzktUrl:"https://tzkt.io",beaconNetwork:"mainnet"},shadownet:{name:"Shadownet",rpcUrl:"https://shadownet.tezos.ecadinfra.com",tzktUrl:"https://shadownet.tzkt.io",beaconNetwork:"custom"}},eue="selectedNetwork",SGe="mainnet";function tue(){const t=localStorage.getItem(eue);return t&&t in Yv?t:SGe}function MGe(t){localStorage.setItem(eue,t)}function NGe(){return Yv[tue()]}function _6(t){return t/$le}function g6(t){return Math.floor(t*$le)}function Zv(t,e=6){return t.toFixed(e).replace(/\.?0+$/,"")}function RGe(t,e=6,r=4){return t?t.length<=e+r?t:`${t.slice(0,e)}...${t.slice(-r)}`:""}async function qj(t){try{return await navigator.clipboard.writeText(t),!0}catch{const e=document.createElement("textarea");e.value=t,e.style.position="fixed",e.style.opacity="0",e.style.pointerEvents="none",document.body.appendChild(e),e.select();try{return document.execCommand("copy"),!0}catch{return!1}finally{document.body.removeChild(e)}}}function AGe(t){const e=NGe();window.open(`${e.tzktUrl}/${t}`,"_blank")}const Uy=SJ("wallet",()=>{const t=IO(null),e=IO(null),r=gr(null),n=gr(!1),i=gr(null),s=gr(tue()),o=Zc(()=>!!r.value),c=Zc(()=>Yv[s.value]);function u(A){return A.beaconNetwork==="mainnet"?{type:$N.MAINNET}:{type:$N.CUSTOM,name:A.name,rpcUrl:A.rpcUrl}}async function f(){if(t.value)return;const A=c.value;t.value=new nq(A.rpcUrl);const D=u(A);e.value=new bqe({name:"TezosX MCP",network:D}),t.value.setWalletProvider(e.value);const O=await e.value.client.getActiveAccount();O&&(r.value=O.address)}async function d(){i.value=null,n.value=!0;try{if(await f(),!e.value)throw new Error("Wallet not initialized");await e.value.requestPermissions();const A=await e.value.getPKH();return r.value=A,A}catch(A){return console.error("Failed to connect wallet:",A),i.value=A instanceof Error?A.message:"Failed to connect wallet",null}finally{n.value=!1}}async function p(){e.value&&await e.value.clearActiveAccount(),r.value=null,t.value=null}async function g(A){if(A===s.value)return;e.value&&await e.value.clearActiveAccount(),r.value=null,s.value=A,MGe(A);const D=c.value;if(!e.value){t.value=null,await f();return}t.value=new nq(D.rpcUrl),e.value.client.network=u(D),t.value.setWalletProvider(e.value)}async function m(A){return t.value||await f(),(await t.value.tz.getBalance(A)).toNumber()/1e6}function x(){return t.value}return{tezos:t,wallet:e,userAddress:r,isConnecting:n,error:i,networkId:s,isConnected:o,currentNetwork:c,init:f,connect:d,disconnect:p,switchNetwork:g,getBalance:m,getTezos:x}}),LGe=`{ parameter
|
|
128
|
-
(or (unit %
|
|
128
|
+
(or (unit %default)
|
|
129
129
|
(or (pair %withdraw (address %recipient) (mutez %amount))
|
|
130
130
|
(or (pair %set_limits (mutez %new_daily_limit) (mutez %new_per_tx_limit))
|
|
131
131
|
(or (address %set_spender)
|
|
@@ -275,4 +275,4 @@ Error generating stack: `+h.message+`
|
|
|
275
275
|
SPENDING_CONTRACT=${r.contractAddress}
|
|
276
276
|
TEZOS_NETWORK=${i.networkId}`}function m(){return`SPENDING_PRIVATE_KEY=${r.spendingKey}
|
|
277
277
|
SPENDING_CONTRACT=${r.contractAddress}
|
|
278
|
-
TEZOS_NETWORK=${i.networkId}`}return(x,A)=>(kt(),Vt("section",ZGe,[A[16]||(A[16]=m6('<div class="text-center mb-5"><div class="inline-flex items-center justify-center w-12 h-12 bg-green-100 rounded-full mb-3"><svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-green-600" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg></div><h2 class="text-lg font-semibold text-text-primary">Contract Deployed Successfully</h2></div>',1)),Yt(s)&&t.configSaveFailed?(kt(),Vt("div",XGe,[A[7]||(A[7]=Oe("div",{class:"flex items-center gap-2 mb-2"},[Oe("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-5 w-5 text-red-600",viewBox:"0 0 20 20",fill:"currentColor"},[Oe("path",{"fill-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","clip-rule":"evenodd"})]),Oe("span",{class:"font-semibold text-red-800"},"Failed to Save Configuration")],-1)),Oe("p",JGe,[A[5]||(A[5]=_n(" Your contract was deployed on-chain at ",-1)),Oe("code",_Ge,Nr(t.contractAddress),1),A[6]||(A[6]=_n(", but the spending key could not be saved to the MCP server. ",-1))]),Oe("button",{onClick:d,disabled:u.value,class:"btn-primary w-full flex items-center justify-center gap-2"},[u.value?(kt(),Vt("span",eKe)):Oi("",!0),_n(" "+Nr(u.value?"Saving...":"Retry Save"),1)],8,$Ge),f.value?(kt(),Vt("p",tKe,Nr(f.value),1)):Oi("",!0)])):Yt(s)?(kt(),Vt("div",rKe,[A[11]||(A[11]=m6('<div class="flex items-center gap-2 mb-2"><svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-green-600" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path></svg><span class="font-semibold text-green-800">MCP Server Configured Automatically</span></div><p class="text-sm text-green-700 mb-4"> Your spending key and contract address have been saved to your MCP server. No manual configuration needed — your MCP tools are ready to use. </p>',2)),t.spendingKey?(kt(),Vt("div",nKe,[Oe("pre",iKe,Nr(g()),1),Oe("div",sKe,[Oe("button",{onClick:A[0]||(A[0]=D=>c.value=!c.value),class:"btn-secondary !py-1.5 !px-2",title:c.value?"Hide spending key":"Show spending key"},[c.value?(kt(),Vt("svg",cKe,[...A[9]||(A[9]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21"},null,-1)])])):(kt(),Vt("svg",oKe,[...A[8]||(A[8]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"},null,-1),Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"},null,-1)])]))],8,aKe),Oe("button",{onClick:A[1]||(A[1]=D=>p(m(),"env")),class:"btn-secondary flex-1 flex items-center justify-center gap-2"},[A[10]||(A[10]=Oe("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})],-1)),_n(" "+Nr(o.value==="env"?"Copied!":"Copy Environment Variables"),1)])])])):Oi("",!0)])):(kt(),Vt("div",lKe,[A[15]||(A[15]=m6('<div class="flex items-center gap-2 mb-2"><svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-amber-600" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="font-semibold text-amber-800">Manual Configuration Required</span></div><p class="text-sm text-amber-700 mb-4"> Set these environment variables on your MCP server. The spending key won't be shown again after you leave this page. </p>',2)),Oe("pre",uKe,Nr(g()),1),Oe("div",fKe,[Oe("button",{onClick:A[2]||(A[2]=D=>c.value=!c.value),class:"btn-secondary !py-1.5 !px-2",title:c.value?"Hide spending key":"Show spending key"},[c.value?(kt(),Vt("svg",pKe,[...A[13]||(A[13]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21"},null,-1)])])):(kt(),Vt("svg",hKe,[...A[12]||(A[12]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"},null,-1),Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"},null,-1)])]))],8,dKe),Oe("button",{onClick:A[3]||(A[3]=D=>p(m(),"env")),class:"btn-secondary flex-1 flex items-center justify-center gap-2"},[A[14]||(A[14]=Oe("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})],-1)),_n(" "+Nr(o.value==="env"?"Copied!":"Copy Environment Variables"),1)])])])),A[17]||(A[17]=m6('<div class="card-subtle p-4 mb-4 border border-amber-200 bg-amber-50/50"><div class="flex items-start gap-2"><svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-amber-600 flex-shrink-0 mt-0.5" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><p class="text-sm text-amber-700"><strong>Next step:</strong> Send some XTZ to your spending contract so the MCP server has funds to work with. You can do this from the dashboard on the next page. </p></div></div>',1)),Oe("button",{onClick:A[4]||(A[4]=D=>n("continue")),class:"btn-primary w-full"}," Continue to Dashboard ")]))}}),bKe={class:"fixed inset-0 z-50 flex items-center justify-center"},mKe={class:"relative bg-white rounded-lg shadow-xl max-w-md w-full mx-4 p-6"},yKe={class:"flex justify-center mb-4"},vKe={key:0,xmlns:"http://www.w3.org/2000/svg",class:"h-6 w-6 text-red-600",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},EKe={key:1,xmlns:"http://www.w3.org/2000/svg",class:"h-6 w-6 text-amber-600",viewBox:"0 0 20 20",fill:"currentColor"},wKe={key:2,xmlns:"http://www.w3.org/2000/svg",class:"h-6 w-6 text-primary-600",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},IKe={class:"text-lg font-semibold text-center text-text-primary mb-2"},xKe={class:"text-sm text-text-muted text-center mb-6"},SKe={class:"flex gap-3"},MKe=["disabled"],NKe=["disabled"],RKe={key:0,class:"spinner"},iue=Eh({__name:"ConfirmationModal",props:{title:{},message:{},confirmText:{},cancelText:{},isLoading:{type:Boolean},variant:{}},emits:["confirm","cancel"],setup(t,{emit:e}){const r=e;return(n,i)=>(kt(),Vt("div",bKe,[Oe("div",{class:"absolute inset-0 bg-black/50 backdrop-blur-sm",onClick:i[0]||(i[0]=s=>r("cancel"))}),Oe("div",mKe,[Oe("div",yKe,[Oe("div",{class:Tg(["w-12 h-12 rounded-full flex items-center justify-center",t.variant==="danger"?"bg-red-100":t.variant==="warning"?"bg-amber-100":"bg-primary-100"])},[t.variant==="danger"?(kt(),Vt("svg",vKe,[...i[3]||(i[3]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"},null,-1)])])):t.variant==="warning"?(kt(),Vt("svg",EKe,[...i[4]||(i[4]=[Oe("path",{"fill-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","clip-rule":"evenodd"},null,-1)])])):(kt(),Vt("svg",wKe,[...i[5]||(i[5]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1)])]))],2)]),Oe("h3",IKe,Nr(t.title),1),Efe(n.$slots,"default",{},()=>[Oe("p",xKe,Nr(t.message),1)]),Oe("div",SKe,[Oe("button",{onClick:i[1]||(i[1]=s=>r("cancel")),disabled:t.isLoading,class:"btn-secondary flex-1"},Nr(t.cancelText??"Cancel"),9,MKe),Oe("button",{onClick:i[2]||(i[2]=s=>r("confirm")),disabled:t.isLoading,class:Tg(["flex-1 flex items-center justify-center gap-2",t.variant==="danger"?"btn-danger":"btn-primary"])},[t.isLoading?(kt(),Vt("span",RKe)):Oi("",!0),_n(" "+Nr(t.confirmText??"Confirm"),1)],10,NKe)])])]))}}),AKe={class:"card p-5 mb-5"},LKe={class:"flex items-start justify-between mb-4"},TKe={class:"flex items-center gap-2"},UKe={class:"mono text-sm text-text-primary"},CKe=["title"],OKe={key:0,xmlns:"http://www.w3.org/2000/svg",class:"h-3.5 w-3.5",viewBox:"0 0 20 20",fill:"currentColor"},kKe={key:1,xmlns:"http://www.w3.org/2000/svg",class:"h-3.5 w-3.5 text-green-600",viewBox:"0 0 20 20",fill:"currentColor"},DKe={class:"flex items-center gap-2"},zKe={key:0,class:"badge badge-success"},jKe={key:1,class:"badge badge-muted"},FKe={class:"card-subtle p-4 mb-4"},BKe={class:"flex items-center justify-between"},VKe={class:"value-display"},qKe={class:"flex items-center gap-2"},PKe=["disabled"],QKe={key:0,class:"spinner !w-4 !h-4"},WKe={class:"grid grid-cols-1 sm:grid-cols-2 gap-3"},GKe={class:"card-subtle p-3"},KKe={class:"mono text-sm text-text-primary break-all"},HKe={class:"card-subtle p-3"},YKe={class:"flex items-center gap-1.5 mb-1"},ZKe={class:"relative"},XKe={class:"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 w-64 p-3 bg-gray-900 text-white text-xs rounded-lg shadow-lg z-10"},JKe={class:"mono text-sm text-text-primary break-all mb-2"},_Ke={class:"flex items-center justify-between pt-2 border-t border-primary-200"},$Ke={class:"mono text-sm text-text-primary"},eHe={class:"flex items-center gap-2"},tHe=["disabled"],rHe={key:0,class:"spinner spinner-dark !w-3 !h-3"},nHe={class:"mb-6"},iHe={class:"text-sm text-text-muted text-center mb-4"},sHe={class:"space-y-2"},aHe={class:"card-subtle p-3 flex items-start gap-3"},oHe={class:"text-xs text-text-muted"},cHe=Eh({__name:"ContractInfo",setup(t){const e=_E(),r=Uy(),n=gr(""),i=gr(null),s=gr("0.5"),o=gr(!1),c=gr(!1),u=gr("10"),f=gr(!1),d=gr(!1),p=gr(0);async function g(H,W){await qj(H),n.value=W,setTimeout(()=>{n.value=""},2e3)}function m(){e.contractAddress&&AGe(e.contractAddress)}function x(){return e.contractBalance===null?"0":Zv(_6(e.contractBalance))}function A(){return i.value===null?"...":Zv(i.value)}async function D(){var H;if((H=e.storage)!=null&&H.spender)try{i.value=await r.getBalance(e.storage.spender)}catch(W){console.error("Failed to fetch spender balance:",W),i.value=null}}async function O(){var W;if(!((W=e.storage)!=null&&W.spender)||!r.tezos)return;const H=parseFloat(s.value);if(!(isNaN(H)||H<=0)){o.value=!0;try{await(await r.tezos.wallet.transfer({to:e.storage.spender,amount:H}).send()).confirmation(),await D()}catch(F){console.error("Failed to fund spender:",F)}finally{o.value=!1}}}function z(){var H;return!!((H=e.storage)!=null&&H.spender&&i.value!==null&&i.value<.3)}function j(){if(!e.contract||!r.tezos)return;const H=parseFloat(u.value);isNaN(H)||H<=0||(p.value=H,z()?d.value=!0:Q(!1))}async function Q(H){if(!(!e.contract||!r.tezos)){d.value=!1,f.value=!0;try{H?(await(await r.tezos.wallet.batch().withTransfer(e.contract.methodsObject.default_(null).toTransferParams({amount:p.value})).withTransfer({to:e.storage.spender,amount:.5}).send()).confirmation(),await D()):await(await e.contract.methodsObject.default_(null).send({amount:p.value})).confirmation(),await e.refreshStorage()}catch(W){console.error("Failed to fund contract:",W)}finally{f.value=!1}}}return wR(()=>{D()}),k6(()=>{var H;return(H=e.storage)==null?void 0:H.spender},()=>{D()}),(H,W)=>{var F,b;return kt(),Vt("section",AKe,[Oe("div",LKe,[Oe("div",null,[W[13]||(W[13]=Oe("p",{class:"section-label mb-1"},"spending contract",-1)),Oe("div",TKe,[Oe("p",UKe,Nr(Yt(e).contractAddress),1),Oe("button",{onClick:W[0]||(W[0]=N=>g(Yt(e).contractAddress,"contract")),class:"btn-secondary !py-1 !px-2 text-xs",title:n.value==="contract"?"Copied!":"Copy address"},[n.value!=="contract"?(kt(),Vt("svg",OKe,[...W[10]||(W[10]=[Oe("path",{d:"M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z"},null,-1),Oe("path",{d:"M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z"},null,-1)])])):(kt(),Vt("svg",kKe,[...W[11]||(W[11]=[Oe("path",{"fill-rule":"evenodd",d:"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z","clip-rule":"evenodd"},null,-1)])]))],8,CKe),Oe("button",{onClick:m,class:"btn-secondary !py-1 !px-2 text-xs",title:"View on TzKT"},[...W[12]||(W[12]=[Oe("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-3.5 w-3.5",viewBox:"0 0 20 20",fill:"currentColor"},[Oe("path",{d:"M11 3a1 1 0 100 2h2.586l-6.293 6.293a1 1 0 101.414 1.414L15 6.414V9a1 1 0 102 0V4a1 1 0 00-1-1h-5z"}),Oe("path",{d:"M5 5a2 2 0 00-2 2v8a2 2 0 002 2h8a2 2 0 002-2v-3a1 1 0 10-2 0v3H5V7h3a1 1 0 000-2H5z"})],-1)])])])]),Oe("div",DKe,[Yt(e).isOwner?(kt(),Vt("span",zKe,"owner")):(kt(),Vt("span",jKe,"not owner")),Oe("button",{onClick:W[1]||(W[1]=N=>Yt(e).clearContractAddress()),class:"btn-secondary !py-1 !px-2 text-xs"}," Disconnect ")])]),Oe("div",FKe,[Oe("div",BKe,[Oe("div",null,[W[15]||(W[15]=Oe("p",{class:"label mb-1"},"balance",-1)),Oe("p",null,[Oe("span",VKe,Nr(x()),1),W[14]||(W[14]=Oe("span",{class:"value-unit"},"XTZ",-1))])]),Oe("div",qKe,[th(Oe("input",{"onUpdate:modelValue":W[2]||(W[2]=N=>u.value=N),type:"number",step:"1",min:"0",placeholder:"10",class:"input-field !py-2 !px-3 w-24 text-sm"},null,512),[[qp,u.value]]),Oe("button",{onClick:j,disabled:f.value||o.value||!u.value,class:"btn-primary flex items-center gap-2 h-[38px] w-fit px-2"},[f.value?(kt(),Vt("span",QKe)):Oi("",!0),W[16]||(W[16]=_n(" Fund ",-1))],8,PKe)])])]),Oe("div",WKe,[Oe("div",GKe,[W[17]||(W[17]=Oe("p",{class:"label"},"owner",-1)),Oe("p",KKe,Nr((F=Yt(e).storage)==null?void 0:F.owner),1)]),Oe("div",HKe,[Oe("div",YKe,[W[20]||(W[20]=Oe("p",{class:"label !mb-0"},"spender",-1)),Oe("div",ZKe,[Oe("button",{onMouseenter:W[3]||(W[3]=N=>c.value=!0),onMouseleave:W[4]||(W[4]=N=>c.value=!1),onFocus:W[5]||(W[5]=N=>c.value=!0),onBlur:W[6]||(W[6]=N=>c.value=!1),class:"text-text-muted hover:text-text-secondary transition-colors"},[...W[18]||(W[18]=[Oe("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-3.5 w-3.5",viewBox:"0 0 20 20",fill:"currentColor"},[Oe("path",{"fill-rule":"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z","clip-rule":"evenodd"})],-1)])],32),th(Oe("div",XKe,[...W[19]||(W[19]=[Oe("p",{class:"font-medium mb-1"},"Spender Fee Balance",-1),Oe("p",{class:"text-gray-300"}," The spender address needs a small amount of XTZ to pay for transaction fees. This is automatically topped up from the contract when it drops below 0.25 XTZ. ",-1),Oe("div",{class:"absolute top-full left-1/2 -translate-x-1/2 -mt-1"},[Oe("div",{class:"border-4 border-transparent border-t-gray-900"})],-1)])],512),[[bde,c.value]])])]),Oe("p",JKe,Nr((b=Yt(e).storage)==null?void 0:b.spender),1),Oe("div",_Ke,[Oe("div",null,[W[22]||(W[22]=Oe("p",{class:"text-xs text-text-muted"},"Fee Balance",-1)),Oe("p",$Ke,[_n(Nr(A())+" ",1),W[21]||(W[21]=Oe("span",{class:"text-text-muted"},"XTZ",-1))])]),Oe("div",eHe,[th(Oe("input",{"onUpdate:modelValue":W[7]||(W[7]=N=>s.value=N),type:"number",step:"0.1",min:"0",placeholder:"0.5",class:"input-field !py-1 !px-2 w-20 text-sm"},null,512),[[qp,s.value]]),Oe("button",{onClick:O,disabled:o.value||f.value||!s.value,class:"btn-secondary !py-1 !px-2 text-xs flex items-center gap-1"},[o.value?(kt(),Vt("span",rHe)):Oi("",!0),W[23]||(W[23]=_n(" Fund ",-1))],8,tHe)])])])]),d.value?(kt(),Cp(iue,{key:0,title:"Batched Transaction","confirm-text":"Approve","cancel-text":"Fund Contract Only",onConfirm:W[8]||(W[8]=N=>Q(!0)),onCancel:W[9]||(W[9]=N=>Q(!1))},{default:GX(()=>[Oe("div",nHe,[Oe("p",iHe," Your spender fee balance is low ("+Nr(A())+" XTZ). This will be batched as two operations in a single approval: ",1),Oe("div",sHe,[Oe("div",aHe,[W[25]||(W[25]=Oe("span",{class:"text-xs font-semibold text-primary-600 bg-primary-100 rounded-full w-5 h-5 flex items-center justify-center shrink-0 mt-0.5"},"1",-1)),Oe("div",null,[W[24]||(W[24]=Oe("p",{class:"text-sm font-medium text-text-primary"},"Fund contract",-1)),Oe("p",oHe,"Deposit "+Nr(p.value)+" XTZ into the spending contract",1)])]),W[26]||(W[26]=Oe("div",{class:"card-subtle p-3 flex items-start gap-3"},[Oe("span",{class:"text-xs font-semibold text-primary-600 bg-primary-100 rounded-full w-5 h-5 flex items-center justify-center shrink-0 mt-0.5"},"2"),Oe("div",null,[Oe("p",{class:"text-sm font-medium text-text-primary"},"Top up spender"),Oe("p",{class:"text-xs text-text-muted"},"Send 0.5 XTZ for transaction fees")])],-1))])])]),_:1})):Oi("",!0)])}}}),lHe={class:"card p-5 mb-5"},uHe={class:"mb-5"},fHe={class:"flex items-baseline justify-between mb-2"},dHe={class:"mono text-text-primary text-sm"},hHe={class:"progress-bar"},pHe={class:"flex justify-between mt-1.5"},gHe={class:"text-xs text-text-muted"},bHe={key:0,class:"text-xs text-text-muted mono"},mHe={class:"grid grid-cols-2 gap-3 mb-5"},yHe={class:"card-subtle p-3 text-center"},vHe={class:"value-display text-xl"},EHe={class:"card-subtle p-3 text-center"},wHe={class:"value-display text-xl"},IHe={key:0},xHe={class:"grid grid-cols-2 gap-3 mb-3"},SHe=["placeholder"],MHe=["placeholder"],NHe=["disabled"],RHe={key:0,class:"spinner"},AHe=Eh({__name:"SpendingLimits",setup(t){const e=_E(),r=gr(""),n=gr(""),i=gr(null);let s=null;const o=Zc(()=>e.storage?Zv(_6(e.storage.daily_limit)):"0"),c=Zc(()=>e.storage?Zv(_6(e.storage.per_tx_limit)):"0"),u=Zc(()=>e.storage?Zv(_6(e.storage.spent_today)):"0"),f=Zc(()=>!e.storage||e.storage.daily_limit===0?0:Math.min(100,e.storage.spent_today/e.storage.daily_limit*100));function d(){var Q;if(!((Q=e.storage)!=null&&Q.last_reset)){i.value=null;return}const g=new Date(e.storage.last_reset).getTime(),m=Date.now(),x=g+24*60*60*1e3,A=Math.max(0,x-m);if(A<=0){i.value="00:00:00";return}const D=Math.floor(A/1e3),O=Math.floor(D/3600),z=Math.floor(D%3600/60),j=D%60;i.value=`${O.toString().padStart(2,"0")}:${z.toString().padStart(2,"0")}:${j.toString().padStart(2,"0")}`}async function p(){const g=parseFloat(r.value),m=parseFloat(n.value);isNaN(g)||isNaN(m)||(await e.setLimits(g,m),r.value="",n.value="")}return wR(()=>{s=setInterval(d,1e3),d()}),p3(()=>{s&&clearInterval(s)}),(g,m)=>(kt(),Vt("section",lHe,[m[12]||(m[12]=Oe("p",{class:"section-label mb-4"},"spending limits",-1)),Oe("div",uHe,[Oe("div",fHe,[m[2]||(m[2]=Oe("p",{class:"text-sm text-text-secondary"},"Spent Today",-1)),Oe("p",dHe,Nr(u.value)+" / "+Nr(o.value)+" XTZ ",1)]),Oe("div",hHe,[Oe("div",{class:"progress-bar-fill",style:gR({width:`${f.value}%`})},null,4)]),Oe("div",pHe,[Oe("p",gHe,Nr(Math.round(f.value))+"% used",1),i.value?(kt(),Vt("p",bHe," resets in "+Nr(i.value),1)):Oi("",!0)])]),Oe("div",mHe,[Oe("div",yHe,[m[4]||(m[4]=Oe("p",{class:"label"},"daily limit",-1)),Oe("p",null,[Oe("span",vHe,Nr(o.value),1),m[3]||(m[3]=Oe("span",{class:"value-unit text-xs"},"XTZ",-1))])]),Oe("div",EHe,[m[6]||(m[6]=Oe("p",{class:"label"},"per-tx limit",-1)),Oe("p",null,[Oe("span",wHe,Nr(c.value),1),m[5]||(m[5]=Oe("span",{class:"value-unit text-xs"},"XTZ",-1))])])]),Yt(e).isOwner?(kt(),Vt("div",IHe,[m[10]||(m[10]=Oe("div",{class:"divider"},null,-1)),m[11]||(m[11]=Oe("p",{class:"text-sm font-medium text-text-primary mb-3"},"Update Limits",-1)),Oe("div",xHe,[Oe("div",null,[m[7]||(m[7]=Oe("label",{class:"label"},"new daily limit",-1)),th(Oe("input",{"onUpdate:modelValue":m[0]||(m[0]=x=>r.value=x),type:"number",placeholder:o.value,class:"input-field"},null,8,SHe),[[qp,r.value]])]),Oe("div",null,[m[8]||(m[8]=Oe("label",{class:"label"},"new per-tx limit",-1)),th(Oe("input",{"onUpdate:modelValue":m[1]||(m[1]=x=>n.value=x),type:"number",placeholder:c.value,class:"input-field"},null,8,MHe),[[qp,n.value]])])]),Oe("button",{onClick:p,disabled:Yt(e).isLoading||!r.value||!n.value,class:"btn-primary flex items-center gap-2"},[Yt(e).isLoading?(kt(),Vt("span",RHe)):Oi("",!0),m[9]||(m[9]=_n(" Update Limits ",-1))],8,NHe)])):Oi("",!0)]))}}),LHe={class:"card p-5 mb-5"},THe={key:0,class:"card-subtle p-4 border-2 border-green-200 bg-green-50/50"},UHe={key:0,class:"mb-3"},CHe={key:0},OHe={class:"flex items-stretch gap-2"},kHe={class:"mono bg-white px-2 py-1.5 rounded flex-1 break-all text-sm border border-green-200 flex items-center"},DHe=["title"],zHe={key:0,xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},jHe={key:1,xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},FHe={key:1,class:"mb-3"},BHe={class:"flex items-stretch gap-2"},VHe={class:"mono bg-white px-2 py-1.5 rounded flex-1 break-all text-sm border border-amber-200 flex items-center"},qHe=["title"],PHe={key:0,xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},QHe={key:1,xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},WHe={key:2,class:"p-3 mb-3 rounded border border-amber-200 bg-amber-50/50"},GHe={class:"mb-4"},KHe={class:"mono bg-white px-2 py-1.5 rounded block break-all text-sm border border-green-200"},HHe={key:1,class:"card-subtle p-4 border border-amber-200 bg-amber-50/50"},YHe={class:"flex items-start gap-3 mb-4"},ZHe={class:"text-sm text-amber-700"},XHe=["disabled"],c8=.5,JHe=Eh({__name:"SpenderManagement",setup(t){const e=_E(),{isLocal:r,detectMode:n}=cA(),i=gr(!1),s=gr(!1),o=gr(!1),c=gr(!1),u=gr(""),f=gr(""),d=gr(!1),p=gr("");async function g(){const O=await fetch("/api/generate-keypair",{method:"POST"});if(!O.ok)throw new Error("Failed to generate keypair on server");return O.json()}async function m(){if(!(await fetch("/api/activate-key",{method:"POST"})).ok)throw new Error("Failed to activate key on server")}async function x(O,z){await qj(O),p.value=z,setTimeout(()=>{p.value=""},2e3)}async function A(){s.value=!0;try{await n();let O;if(r.value){const z=await g();O=z.address,f.value=z.secretKey}else{const z=await nue();O=z.address,f.value=z.secretKey}await e.setSpender(O),r.value&&await m();try{await e.withdraw(O,c8)}catch(z){console.warn("Failed to fund new spender (contract balance may be too low):",z),c.value=!0}u.value=O,o.value=!0,i.value=!1}catch(O){console.error("Failed to regenerate spender:",O)}finally{s.value=!1}}function D(){o.value=!1,c.value=!1,u.value="",f.value="",d.value=!1}return(O,z)=>(kt(),Vt("section",LHe,[z[27]||(z[27]=Oe("p",{class:"section-label mb-4"},"spender key management",-1)),o.value?(kt(),Vt("div",THe,[z[16]||(z[16]=m6('<div class="flex items-center gap-2 mb-3"><div class="w-8 h-8 bg-green-100 rounded-full flex items-center justify-center"><svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 text-green-600" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg></div><span class="font-semibold text-green-800">Spender Updated Successfully</span></div>',1)),Yt(r)?(kt(),Vt("div",UHe,[z[9]||(z[9]=Oe("p",{class:"text-sm text-green-700 mb-3"}," Your MCP server has been automatically updated with the new spending key. No manual configuration needed. ",-1)),f.value?(kt(),Vt("div",CHe,[z[8]||(z[8]=Oe("label",{class:"label"},"new spending key",-1)),Oe("div",OHe,[Oe("code",kHe,Nr(d.value?f.value:f.value.slice(0,4)+"•".repeat(24)),1),Oe("button",{onClick:z[0]||(z[0]=j=>d.value=!d.value),class:"btn-secondary !py-1.5 !px-2 text-xs",title:d.value?"Hide spending key":"Show spending key"},[d.value?(kt(),Vt("svg",jHe,[...z[7]||(z[7]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21"},null,-1)])])):(kt(),Vt("svg",zHe,[...z[6]||(z[6]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"},null,-1),Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"},null,-1)])]))],8,DHe),Oe("button",{onClick:z[1]||(z[1]=j=>x(f.value,"key")),class:"btn-secondary !py-1.5 !px-2 text-xs"},Nr(p.value==="key"?"Copied!":"Copy"),1)])])):Oi("",!0)])):(kt(),Vt("div",FHe,[z[13]||(z[13]=Oe("p",{class:"text-sm text-amber-700 mb-3"},[_n(" Update the "),Oe("code",{class:"mono text-xs bg-amber-100 px-1 py-0.5 rounded"},"SPENDING_PRIVATE_KEY"),_n(" environment variable on your MCP server with the new key below and restart Claude Desktop. The key won't be shown again after you leave this page. ")],-1)),Oe("div",null,[z[12]||(z[12]=Oe("label",{class:"label"},"new spending key",-1)),Oe("div",BHe,[Oe("code",VHe,Nr(d.value?f.value:f.value.slice(0,4)+"•".repeat(24)),1),Oe("button",{onClick:z[2]||(z[2]=j=>d.value=!d.value),class:"btn-secondary !py-1.5 !px-2 text-xs",title:d.value?"Hide spending key":"Show spending key"},[d.value?(kt(),Vt("svg",QHe,[...z[11]||(z[11]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21"},null,-1)])])):(kt(),Vt("svg",PHe,[...z[10]||(z[10]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"},null,-1),Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"},null,-1)])]))],8,qHe),Oe("button",{onClick:z[3]||(z[3]=j=>x(f.value,"key")),class:"btn-secondary !py-1.5 !px-2 text-xs"},Nr(p.value==="key"?"Copied!":"Copy"),1)])])])),c.value?(kt(),Vt("div",WHe,[Oe("div",{class:"flex items-start gap-2"},[z[14]||(z[14]=Oe("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-5 w-5 text-amber-600 flex-shrink-0 mt-0.5",viewBox:"0 0 20 20",fill:"currentColor"},[Oe("path",{"fill-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","clip-rule":"evenodd"})],-1)),Oe("p",{class:"text-sm text-amber-700"}," Could not fund the new spender with "+Nr(c8)+" XTZ for gas fees — the contract balance may be too low. Send some XTZ to the spender address below or fund the contract from the dashboard. ")])])):Oi("",!0),Oe("div",GHe,[z[15]||(z[15]=Oe("label",{class:"label"},"new spender address",-1)),Oe("code",KHe,Nr(u.value),1)]),Oe("button",{onClick:D,class:"btn-primary w-full"}," Done ")])):(kt(),Vt("div",HHe,[Oe("div",YHe,[z[25]||(z[25]=Oe("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-5 w-5 text-amber-600 flex-shrink-0 mt-0.5",viewBox:"0 0 20 20",fill:"currentColor"},[Oe("path",{"fill-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","clip-rule":"evenodd"})],-1)),Oe("div",null,[z[24]||(z[24]=Oe("p",{class:"text-sm font-medium text-amber-800 mb-1"},"Regenerate Spender Keypair",-1)),Oe("p",ZHe,[z[20]||(z[20]=_n(" This will generate a new spending keypair and update the contract. ",-1)),Yt(r)?(kt(),Vt(vs,{key:0},[_n(" The new spender will be funded with "+Nr(c8)+" XTZ for gas fees. ")],64)):Oi("",!0),z[21]||(z[21]=_n(" The current spender key will ",-1)),z[22]||(z[22]=Oe("strong",null,"stop working immediately",-1)),z[23]||(z[23]=_n(". ",-1)),Yt(r)?(kt(),Vt(vs,{key:1},[_n(" Your MCP server will be updated automatically. ")],64)):(kt(),Vt(vs,{key:2},[z[17]||(z[17]=_n(" You will need to update the ",-1)),z[18]||(z[18]=Oe("code",{class:"mono text-xs bg-amber-100 px-1 py-0.5 rounded"},"SPENDING_PRIVATE_KEY",-1)),z[19]||(z[19]=_n(" environment variable on your MCP server. ",-1))],64))])])]),Oe("button",{onClick:z[4]||(z[4]=j=>i.value=!0),disabled:Yt(e).isLoading,class:"btn-danger w-full flex items-center justify-center gap-2"},[...z[26]||(z[26]=[Oe("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"})],-1),_n(" Regenerate Spender Key ",-1)])],8,XHe)])),i.value?(kt(),Cp(iue,{key:2,title:"Regenerate Spender Key?",message:Yt(r)?`This action cannot be undone. The current spender key will be invalidated immediately and any services using it will lose access. The new spender will be funded with ${c8} XTZ from the contract for gas fees.`:"This action cannot be undone. The current spender key will be invalidated immediately and any services using it will lose access. You will need to update the SPENDING_PRIVATE_KEY environment variable on your MCP server.","confirm-text":"Regenerate","cancel-text":"Cancel",variant:"danger","is-loading":s.value,onConfirm:A,onCancel:z[5]||(z[5]=j=>i.value=!1)},null,8,["message","is-loading"])):Oi("",!0)]))}}),_He={class:"card p-5 mb-5"},$He={class:"space-y-3"},eYe=["placeholder"],tYe=["placeholder"],rYe=["disabled"],nYe={key:0,class:"spinner"},iYe=Eh({__name:"WithdrawFunds",setup(t){const e=Uy(),r=_E(),n=gr(""),i=gr(""),s=Zc(()=>r.contractBalance===null?"0":Zv(_6(r.contractBalance)));async function o(){const c=parseFloat(i.value);!n.value||isNaN(c)||(await r.withdraw(n.value,c),n.value="",i.value="")}return(c,u)=>(kt(),Vt("section",_He,[u[5]||(u[5]=Oe("p",{class:"section-label mb-4"},"withdraw funds",-1)),u[6]||(u[6]=Oe("p",{class:"text-sm text-text-muted mb-4"}," Withdraw any amount without limits. ",-1)),Oe("div",$He,[Oe("div",null,[u[2]||(u[2]=Oe("label",{class:"label"},"recipient",-1)),th(Oe("input",{"onUpdate:modelValue":u[0]||(u[0]=f=>n.value=f),type:"text",placeholder:Yt(e).userAddress??void 0,class:"input-field mono"},null,8,eYe),[[qp,n.value]])]),Oe("div",null,[u[3]||(u[3]=Oe("label",{class:"label"},"amount (xtz)",-1)),th(Oe("input",{"onUpdate:modelValue":u[1]||(u[1]=f=>i.value=f),type:"number",placeholder:`Max: ${s.value}`,class:"input-field"},null,8,tYe),[[qp,i.value]])]),Oe("button",{onClick:o,disabled:Yt(r).isLoading||!n.value||!i.value,class:"btn-primary w-full flex items-center justify-center gap-2"},[Yt(r).isLoading?(kt(),Vt("span",nYe)):Oi("",!0),u[4]||(u[4]=_n(" Withdraw ",-1))],8,rYe)])]))}}),sYe={class:"card mb-5 overflow-hidden"},aYe={class:"overflow-hidden"},oYe={class:"px-5 pb-5"},cYe={class:"flex items-center gap-2 mb-2"},lYe={class:"label !mb-0 !text-[11px] uppercase tracking-wider text-text-muted font-medium"},uYe={class:"space-y-1.5"},fYe={class:"mono text-xs text-accent-600 truncate"},dYe={class:"text-xs text-text-secondary leading-relaxed"},hYe={class:"text-xs text-text-muted italic hidden sm:block"},pYe=Eh({__name:"ToolGuide",setup(t){const e=gr(!1),r=[{label:"Wallet",tools:[{name:"tezos_get_balance",desc:"Check the balance of your spending contract and spender address.",example:"What's my balance?"},{name:"tezos_send_xtz",desc:"Send XTZ to any Tezos address via your spending contract.",example:"Send 5 XTZ to tz1abc..."},{name:"tezos_get_limits",desc:"View daily and per-transaction spending limits, and how much has been used today.",example:"What are my spending limits?"},{name:"tezos_get_addresses",desc:"Get the contract, owner, and spender addresses.",example:"Show me my Tezos addresses"},{name:"tezos_get_operation_history",desc:"View recent transaction history for the spending contract.",example:"Show my recent transactions"}]},{label:"x402 Payments",tools:[{name:"tezos_fetch_with_x402",desc:"Fetch a URL and automatically pay if it requires an x402 payment.",example:"Fetch https://api.example.com/paid-endpoint with a max of 0.5 XTZ"},{name:"tezos_create_x402_payment",desc:"Create a signed x402 payment header without broadcasting. Internal tool.",example:"Create an x402 payment of 500000 mutez to tz1abc..."},{name:"tezos_parse_x402_requirements",desc:"Parse payment requirements from a 402 response body. Internal tool.",example:"Parse these x402 payment requirements"}]},{label:"Account",tools:[{name:"tezos_recover_spender_funds",desc:"Transfer the spender address's XTZ balance back to the owner.",example:"Drain the spender address to my account"},{name:"tezos_reveal_account",desc:"Reveal the spender account on-chain. Internal tool.",example:"Reveal my account"},{name:"tezos_get_dashboard",desc:"Get a link to the configuration dashboard.",example:"Open the dashboard"}]}];return(n,i)=>(kt(),Vt("section",sYe,[Oe("button",{onClick:i[0]||(i[0]=s=>e.value=!e.value),class:"w-full flex items-center justify-between px-5 py-4 cursor-pointer bg-transparent border-none text-left transition-colors hover:bg-primary-50/50"},[i[2]||(i[2]=Oe("p",{class:"section-label !mb-0"},"tool reference",-1)),(kt(),Vt("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:Tg(["text-text-muted transition-transform duration-200",e.value?"rotate-180":""])},[...i[1]||(i[1]=[Oe("polyline",{points:"6 9 12 15 18 9"},null,-1)])],2))]),Oe("div",{class:Tg(["grid transition-[grid-template-rows] duration-300 ease-[cubic-bezier(0.16,1,0.3,1)]",e.value?"grid-rows-[1fr]":"grid-rows-[0fr]"])},[Oe("div",aYe,[Oe("div",oYe,[i[4]||(i[4]=Oe("p",{class:"text-xs text-text-muted mb-4"}," Call tools by asking your AI agent to do things in plain language. Tools marked as internal are automatically called in conjunction with other tools, but can also be called manually. ",-1)),(kt(),Vt(vs,null,xO(r,(s,o)=>Oe("div",{key:s.label,class:Tg(o>0?"mt-4":"")},[Oe("div",cYe,[Oe("span",lYe,Nr(s.label),1),i[3]||(i[3]=Oe("div",{class:"flex-1 h-px bg-primary-200"},null,-1))]),Oe("div",uYe,[(kt(!0),Vt(vs,null,xO(s.tools,c=>(kt(),Vt("div",{key:c.name,class:"card-subtle px-3 py-2.5 grid grid-cols-[160px_1fr] gap-3 items-baseline sm:grid-cols-[170px_1fr_1fr]"},[Oe("span",fYe,Nr(c.name),1),Oe("span",dYe,Nr(c.desc),1),Oe("span",hYe,'"'+Nr(c.example)+'"',1)]))),128))])],2)),64))])])],2)]))}}),gYe={class:"min-h-screen py-12 px-4 sm:px-6 lg:px-8 relative z-10"},bYe={class:"max-w-2xl mx-auto"},mYe={class:"mb-6 flex items-center justify-between"},yYe=["value"],vYe=["value"],EYe={key:0,class:"mb-4 px-4 py-2.5 rounded-lg bg-warning/10 border border-warning/20 flex items-center gap-2 text-sm text-warning"},wYe={class:"text-warning/70"},IYe={class:"text-center"},xYe=["disabled"],SYe={key:0,class:"spinner spinner-dark"},MYe={key:4,class:"card p-4 mt-5 border border-error/20 bg-error/5"},NYe={class:"text-sm text-error"},RYe={class:"mt-12 text-center"},AYe={class:"text-sm text-text-muted"},LYe=Eh({__name:"App",setup(t){const e=Uy(),r=_E(),{detectMode:n,serverNetwork:i}=cA(),s=Object.entries(Yv).map(([c,u])=>({id:c,name:u.name}));async function o(c){const u=c.target;r.clearContractAddress(),await e.switchNetwork(u.value)}return wR(async()=>{var p;await n();const c=new URLSearchParams(window.location.search),u=(p=c.get("network"))==null?void 0:p.toLowerCase(),f=u&&u in Yv?u:i.value&&i.value in Yv?i.value:null;f&&f!==e.networkId&&await e.switchNetwork(f),await e.init();const d=c.get("contract");if(d){if(await r.setContractAddress(d),r.contractAddress){c.delete("contract"),c.delete("network");const g=c.toString()?`${window.location.pathname}?${c}`:window.location.pathname;window.history.replaceState({},"",g)}}else r.contractAddress&&await r.loadContract()}),(c,u)=>(kt(),Vt(vs,null,[u[8]||(u[8]=Oe("div",{class:"film-grain"},null,-1)),Oe("div",gYe,[Oe("div",bYe,[Oe("header",mYe,[u[3]||(u[3]=Oe("h1",{class:"text-3xl font-semibold tracking-tight text-text-primary"}," TezosX MCP Configuration ",-1)),Oe("select",{value:Yt(e).networkId,onChange:o,class:"text-xs text-text-muted bg-transparent border border-border rounded px-2 py-1 cursor-pointer hover:border-text-muted transition-colors"},[(kt(!0),Vt(vs,null,xO(Yt(s),f=>(kt(),Vt("option",{key:f.id,value:f.id},Nr(f.name),9,vYe))),128))],40,yYe)]),Yt(e).networkId!=="mainnet"?(kt(),Vt("div",EYe,[u[4]||(u[4]=Oe("span",{class:"font-medium"},"Testnet",-1)),Oe("span",wYe,"You're connected to "+Nr(Yt(e).currentNetwork.name)+". Funds on this network have no real value.",1)])):Oi("",!0),Uc(jGe),Yt(r).deploymentResult?(kt(),Cp(gKe,{key:1,"contract-address":Yt(r).deploymentResult.contractAddress,"spending-key":Yt(r).deploymentResult.spendingKey,"config-save-failed":Yt(r).deploymentResult.configSaveFailed,onContinue:u[0]||(u[0]=f=>Yt(r).clearDeploymentResult()),onConfigSaved:u[1]||(u[1]=f=>Yt(r).deploymentResult.configSaveFailed=!1)},null,8,["contract-address","spending-key","config-save-failed"])):Oi("",!0),!Yt(r).contractAddress&&!Yt(r).deploymentResult?(kt(),Cp(YGe,{key:2})):Oi("",!0),Yt(r).contractAddress&&Yt(r).storage?(kt(),Vt(vs,{key:3},[Uc(cHe),Uc(pYe),Uc(AHe),Yt(r).isOwner?(kt(),Cp(JHe,{key:0})):Oi("",!0),Yt(r).isOwner?(kt(),Cp(iYe,{key:1})):Oi("",!0),Oe("div",IYe,[Oe("button",{onClick:u[2]||(u[2]=f=>Yt(r).refreshStorage()),disabled:Yt(r).isLoading,class:"btn-secondary flex items-center gap-2 mx-auto"},[Yt(r).isLoading?(kt(),Vt("span",SYe)):Oi("",!0),u[5]||(u[5]=_n(" Refresh ",-1))],8,xYe)])],64)):Oi("",!0),Yt(r).error?(kt(),Vt("div",MYe,[Oe("p",NYe,Nr(Yt(r).error),1)])):Oi("",!0),Oe("footer",RYe,[Oe("p",AYe,[u[6]||(u[6]=_n(" Built with ",-1)),u[7]||(u[7]=Oe("a",{href:"https://taquito.io",target:"_blank"},"Taquito",-1)),_n(" · "+Nr(Yt(e).currentNetwork.name),1)])])])])],64))}});globalThis.Buffer=vh.Buffer;globalThis.process=globalThis.process||{env:{},browser:!0};const sue=Ode(LYe);sue.use(zde());sue.mount("#app");
|
|
278
|
+
TEZOS_NETWORK=${i.networkId}`}return(x,A)=>(kt(),Vt("section",ZGe,[A[16]||(A[16]=m6('<div class="text-center mb-5"><div class="inline-flex items-center justify-center w-12 h-12 bg-green-100 rounded-full mb-3"><svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-green-600" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg></div><h2 class="text-lg font-semibold text-text-primary">Contract Deployed Successfully</h2></div>',1)),Yt(s)&&t.configSaveFailed?(kt(),Vt("div",XGe,[A[7]||(A[7]=Oe("div",{class:"flex items-center gap-2 mb-2"},[Oe("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-5 w-5 text-red-600",viewBox:"0 0 20 20",fill:"currentColor"},[Oe("path",{"fill-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","clip-rule":"evenodd"})]),Oe("span",{class:"font-semibold text-red-800"},"Failed to Save Configuration")],-1)),Oe("p",JGe,[A[5]||(A[5]=_n(" Your contract was deployed on-chain at ",-1)),Oe("code",_Ge,Nr(t.contractAddress),1),A[6]||(A[6]=_n(", but the spending key could not be saved to the MCP server. ",-1))]),Oe("button",{onClick:d,disabled:u.value,class:"btn-primary w-full flex items-center justify-center gap-2"},[u.value?(kt(),Vt("span",eKe)):Oi("",!0),_n(" "+Nr(u.value?"Saving...":"Retry Save"),1)],8,$Ge),f.value?(kt(),Vt("p",tKe,Nr(f.value),1)):Oi("",!0)])):Yt(s)?(kt(),Vt("div",rKe,[A[11]||(A[11]=m6('<div class="flex items-center gap-2 mb-2"><svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-green-600" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path></svg><span class="font-semibold text-green-800">MCP Server Configured Automatically</span></div><p class="text-sm text-green-700 mb-4"> Your spending key and contract address have been saved to your MCP server. No manual configuration needed — your MCP tools are ready to use. </p>',2)),t.spendingKey?(kt(),Vt("div",nKe,[Oe("pre",iKe,Nr(g()),1),Oe("div",sKe,[Oe("button",{onClick:A[0]||(A[0]=D=>c.value=!c.value),class:"btn-secondary !py-1.5 !px-2",title:c.value?"Hide spending key":"Show spending key"},[c.value?(kt(),Vt("svg",cKe,[...A[9]||(A[9]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21"},null,-1)])])):(kt(),Vt("svg",oKe,[...A[8]||(A[8]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"},null,-1),Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"},null,-1)])]))],8,aKe),Oe("button",{onClick:A[1]||(A[1]=D=>p(m(),"env")),class:"btn-secondary flex-1 flex items-center justify-center gap-2"},[A[10]||(A[10]=Oe("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})],-1)),_n(" "+Nr(o.value==="env"?"Copied!":"Copy Environment Variables"),1)])])])):Oi("",!0)])):(kt(),Vt("div",lKe,[A[15]||(A[15]=m6('<div class="flex items-center gap-2 mb-2"><svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-amber-600" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><span class="font-semibold text-amber-800">Manual Configuration Required</span></div><p class="text-sm text-amber-700 mb-4"> Set these environment variables on your MCP server. The spending key won't be shown again after you leave this page. </p>',2)),Oe("pre",uKe,Nr(g()),1),Oe("div",fKe,[Oe("button",{onClick:A[2]||(A[2]=D=>c.value=!c.value),class:"btn-secondary !py-1.5 !px-2",title:c.value?"Hide spending key":"Show spending key"},[c.value?(kt(),Vt("svg",pKe,[...A[13]||(A[13]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21"},null,-1)])])):(kt(),Vt("svg",hKe,[...A[12]||(A[12]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"},null,-1),Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"},null,-1)])]))],8,dKe),Oe("button",{onClick:A[3]||(A[3]=D=>p(m(),"env")),class:"btn-secondary flex-1 flex items-center justify-center gap-2"},[A[14]||(A[14]=Oe("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})],-1)),_n(" "+Nr(o.value==="env"?"Copied!":"Copy Environment Variables"),1)])])])),A[17]||(A[17]=m6('<div class="card-subtle p-4 mb-4 border border-amber-200 bg-amber-50/50"><div class="flex items-start gap-2"><svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-amber-600 flex-shrink-0 mt-0.5" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z" clip-rule="evenodd"></path></svg><p class="text-sm text-amber-700"><strong>Next step:</strong> Send some XTZ to your spending contract so the MCP server has funds to work with. You can do this from the dashboard on the next page. </p></div></div>',1)),Oe("button",{onClick:A[4]||(A[4]=D=>n("continue")),class:"btn-primary w-full"}," Continue to Dashboard ")]))}}),bKe={class:"fixed inset-0 z-50 flex items-center justify-center"},mKe={class:"relative bg-white rounded-lg shadow-xl max-w-md w-full mx-4 p-6"},yKe={class:"flex justify-center mb-4"},vKe={key:0,xmlns:"http://www.w3.org/2000/svg",class:"h-6 w-6 text-red-600",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},EKe={key:1,xmlns:"http://www.w3.org/2000/svg",class:"h-6 w-6 text-amber-600",viewBox:"0 0 20 20",fill:"currentColor"},wKe={key:2,xmlns:"http://www.w3.org/2000/svg",class:"h-6 w-6 text-primary-600",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},IKe={class:"text-lg font-semibold text-center text-text-primary mb-2"},xKe={class:"text-sm text-text-muted text-center mb-6"},SKe={class:"flex gap-3"},MKe=["disabled"],NKe=["disabled"],RKe={key:0,class:"spinner"},iue=Eh({__name:"ConfirmationModal",props:{title:{},message:{},confirmText:{},cancelText:{},isLoading:{type:Boolean},variant:{}},emits:["confirm","cancel"],setup(t,{emit:e}){const r=e;return(n,i)=>(kt(),Vt("div",bKe,[Oe("div",{class:"absolute inset-0 bg-black/50 backdrop-blur-sm",onClick:i[0]||(i[0]=s=>r("cancel"))}),Oe("div",mKe,[Oe("div",yKe,[Oe("div",{class:Tg(["w-12 h-12 rounded-full flex items-center justify-center",t.variant==="danger"?"bg-red-100":t.variant==="warning"?"bg-amber-100":"bg-primary-100"])},[t.variant==="danger"?(kt(),Vt("svg",vKe,[...i[3]||(i[3]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"},null,-1)])])):t.variant==="warning"?(kt(),Vt("svg",EKe,[...i[4]||(i[4]=[Oe("path",{"fill-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","clip-rule":"evenodd"},null,-1)])])):(kt(),Vt("svg",wKe,[...i[5]||(i[5]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1)])]))],2)]),Oe("h3",IKe,Nr(t.title),1),Efe(n.$slots,"default",{},()=>[Oe("p",xKe,Nr(t.message),1)]),Oe("div",SKe,[Oe("button",{onClick:i[1]||(i[1]=s=>r("cancel")),disabled:t.isLoading,class:"btn-secondary flex-1"},Nr(t.cancelText??"Cancel"),9,MKe),Oe("button",{onClick:i[2]||(i[2]=s=>r("confirm")),disabled:t.isLoading,class:Tg(["flex-1 flex items-center justify-center gap-2",t.variant==="danger"?"btn-danger":"btn-primary"])},[t.isLoading?(kt(),Vt("span",RKe)):Oi("",!0),_n(" "+Nr(t.confirmText??"Confirm"),1)],10,NKe)])])]))}}),AKe={class:"card p-5 mb-5"},LKe={class:"flex items-start justify-between mb-4"},TKe={class:"flex items-center gap-2"},UKe={class:"mono text-sm text-text-primary"},CKe=["title"],OKe={key:0,xmlns:"http://www.w3.org/2000/svg",class:"h-3.5 w-3.5",viewBox:"0 0 20 20",fill:"currentColor"},kKe={key:1,xmlns:"http://www.w3.org/2000/svg",class:"h-3.5 w-3.5 text-green-600",viewBox:"0 0 20 20",fill:"currentColor"},DKe={class:"flex items-center gap-2"},zKe={key:0,class:"badge badge-success"},jKe={key:1,class:"badge badge-muted"},FKe={class:"card-subtle p-4 mb-4"},BKe={class:"flex items-center justify-between"},VKe={class:"value-display"},qKe={class:"flex items-center gap-2"},PKe=["disabled"],QKe={key:0,class:"spinner !w-4 !h-4"},WKe={class:"grid grid-cols-1 sm:grid-cols-2 gap-3"},GKe={class:"card-subtle p-3"},KKe={class:"mono text-sm text-text-primary break-all"},HKe={class:"card-subtle p-3"},YKe={class:"flex items-center gap-1.5 mb-1"},ZKe={class:"relative"},XKe={class:"absolute bottom-full left-1/2 -translate-x-1/2 mb-2 w-64 p-3 bg-gray-900 text-white text-xs rounded-lg shadow-lg z-10"},JKe={class:"mono text-sm text-text-primary break-all mb-2"},_Ke={class:"flex items-center justify-between pt-2 border-t border-primary-200"},$Ke={class:"mono text-sm text-text-primary"},eHe={class:"flex items-center gap-2"},tHe=["disabled"],rHe={key:0,class:"spinner spinner-dark !w-3 !h-3"},nHe={class:"mb-6"},iHe={class:"text-sm text-text-muted text-center mb-4"},sHe={class:"space-y-2"},aHe={class:"card-subtle p-3 flex items-start gap-3"},oHe={class:"text-xs text-text-muted"},cHe=Eh({__name:"ContractInfo",setup(t){const e=_E(),r=Uy(),n=gr(""),i=gr(null),s=gr("0.5"),o=gr(!1),c=gr(!1),u=gr("10"),f=gr(!1),d=gr(!1),p=gr(0);async function g(H,W){await qj(H),n.value=W,setTimeout(()=>{n.value=""},2e3)}function m(){e.contractAddress&&AGe(e.contractAddress)}function x(){return e.contractBalance===null?"0":Zv(_6(e.contractBalance))}function A(){return i.value===null?"...":Zv(i.value)}async function D(){var H;if((H=e.storage)!=null&&H.spender)try{i.value=await r.getBalance(e.storage.spender)}catch(W){console.error("Failed to fetch spender balance:",W),i.value=null}}async function O(){var W;if(!((W=e.storage)!=null&&W.spender)||!r.tezos)return;const H=parseFloat(s.value);if(!(isNaN(H)||H<=0)){o.value=!0;try{await(await r.tezos.wallet.transfer({to:e.storage.spender,amount:H}).send()).confirmation(),await D()}catch(F){console.error("Failed to fund spender:",F)}finally{o.value=!1}}}function z(){var H;return!!((H=e.storage)!=null&&H.spender&&i.value!==null&&i.value<.3)}function j(){if(!e.contract||!r.tezos)return;const H=parseFloat(u.value);isNaN(H)||H<=0||(p.value=H,z()?d.value=!0:Q(!1))}async function Q(H){if(!(!e.contract||!r.tezos)){d.value=!1,f.value=!0;try{H?(await(await r.tezos.wallet.batch().withTransfer(e.contract.methodsObject.default(null).toTransferParams({amount:p.value})).withTransfer({to:e.storage.spender,amount:.5}).send()).confirmation(),await D()):await(await e.contract.methodsObject.default(null).send({amount:p.value})).confirmation(),await e.refreshStorage()}catch(W){console.error("Failed to fund contract:",W)}finally{f.value=!1}}}return wR(()=>{D()}),k6(()=>{var H;return(H=e.storage)==null?void 0:H.spender},()=>{D()}),(H,W)=>{var F,b;return kt(),Vt("section",AKe,[Oe("div",LKe,[Oe("div",null,[W[13]||(W[13]=Oe("p",{class:"section-label mb-1"},"spending contract",-1)),Oe("div",TKe,[Oe("p",UKe,Nr(Yt(e).contractAddress),1),Oe("button",{onClick:W[0]||(W[0]=N=>g(Yt(e).contractAddress,"contract")),class:"btn-secondary !py-1 !px-2 text-xs",title:n.value==="contract"?"Copied!":"Copy address"},[n.value!=="contract"?(kt(),Vt("svg",OKe,[...W[10]||(W[10]=[Oe("path",{d:"M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z"},null,-1),Oe("path",{d:"M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z"},null,-1)])])):(kt(),Vt("svg",kKe,[...W[11]||(W[11]=[Oe("path",{"fill-rule":"evenodd",d:"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z","clip-rule":"evenodd"},null,-1)])]))],8,CKe),Oe("button",{onClick:m,class:"btn-secondary !py-1 !px-2 text-xs",title:"View on TzKT"},[...W[12]||(W[12]=[Oe("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-3.5 w-3.5",viewBox:"0 0 20 20",fill:"currentColor"},[Oe("path",{d:"M11 3a1 1 0 100 2h2.586l-6.293 6.293a1 1 0 101.414 1.414L15 6.414V9a1 1 0 102 0V4a1 1 0 00-1-1h-5z"}),Oe("path",{d:"M5 5a2 2 0 00-2 2v8a2 2 0 002 2h8a2 2 0 002-2v-3a1 1 0 10-2 0v3H5V7h3a1 1 0 000-2H5z"})],-1)])])])]),Oe("div",DKe,[Yt(e).isOwner?(kt(),Vt("span",zKe,"owner")):(kt(),Vt("span",jKe,"not owner")),Oe("button",{onClick:W[1]||(W[1]=N=>Yt(e).clearContractAddress()),class:"btn-secondary !py-1 !px-2 text-xs"}," Disconnect ")])]),Oe("div",FKe,[Oe("div",BKe,[Oe("div",null,[W[15]||(W[15]=Oe("p",{class:"label mb-1"},"balance",-1)),Oe("p",null,[Oe("span",VKe,Nr(x()),1),W[14]||(W[14]=Oe("span",{class:"value-unit"},"XTZ",-1))])]),Oe("div",qKe,[th(Oe("input",{"onUpdate:modelValue":W[2]||(W[2]=N=>u.value=N),type:"number",step:"1",min:"0",placeholder:"10",class:"input-field !py-2 !px-3 w-24 text-sm"},null,512),[[qp,u.value]]),Oe("button",{onClick:j,disabled:f.value||o.value||!u.value,class:"btn-primary flex items-center gap-2 h-[38px] w-fit px-2"},[f.value?(kt(),Vt("span",QKe)):Oi("",!0),W[16]||(W[16]=_n(" Fund ",-1))],8,PKe)])])]),Oe("div",WKe,[Oe("div",GKe,[W[17]||(W[17]=Oe("p",{class:"label"},"owner",-1)),Oe("p",KKe,Nr((F=Yt(e).storage)==null?void 0:F.owner),1)]),Oe("div",HKe,[Oe("div",YKe,[W[20]||(W[20]=Oe("p",{class:"label !mb-0"},"spender",-1)),Oe("div",ZKe,[Oe("button",{onMouseenter:W[3]||(W[3]=N=>c.value=!0),onMouseleave:W[4]||(W[4]=N=>c.value=!1),onFocus:W[5]||(W[5]=N=>c.value=!0),onBlur:W[6]||(W[6]=N=>c.value=!1),class:"text-text-muted hover:text-text-secondary transition-colors"},[...W[18]||(W[18]=[Oe("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-3.5 w-3.5",viewBox:"0 0 20 20",fill:"currentColor"},[Oe("path",{"fill-rule":"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z","clip-rule":"evenodd"})],-1)])],32),th(Oe("div",XKe,[...W[19]||(W[19]=[Oe("p",{class:"font-medium mb-1"},"Spender Fee Balance",-1),Oe("p",{class:"text-gray-300"}," The spender address needs a small amount of XTZ to pay for transaction fees. This is automatically topped up from the contract when it drops below 0.25 XTZ. ",-1),Oe("div",{class:"absolute top-full left-1/2 -translate-x-1/2 -mt-1"},[Oe("div",{class:"border-4 border-transparent border-t-gray-900"})],-1)])],512),[[bde,c.value]])])]),Oe("p",JKe,Nr((b=Yt(e).storage)==null?void 0:b.spender),1),Oe("div",_Ke,[Oe("div",null,[W[22]||(W[22]=Oe("p",{class:"text-xs text-text-muted"},"Fee Balance",-1)),Oe("p",$Ke,[_n(Nr(A())+" ",1),W[21]||(W[21]=Oe("span",{class:"text-text-muted"},"XTZ",-1))])]),Oe("div",eHe,[th(Oe("input",{"onUpdate:modelValue":W[7]||(W[7]=N=>s.value=N),type:"number",step:"0.1",min:"0",placeholder:"0.5",class:"input-field !py-1 !px-2 w-20 text-sm"},null,512),[[qp,s.value]]),Oe("button",{onClick:O,disabled:o.value||f.value||!s.value,class:"btn-secondary !py-1 !px-2 text-xs flex items-center gap-1"},[o.value?(kt(),Vt("span",rHe)):Oi("",!0),W[23]||(W[23]=_n(" Fund ",-1))],8,tHe)])])])]),d.value?(kt(),Cp(iue,{key:0,title:"Batched Transaction","confirm-text":"Approve","cancel-text":"Fund Contract Only",onConfirm:W[8]||(W[8]=N=>Q(!0)),onCancel:W[9]||(W[9]=N=>Q(!1))},{default:GX(()=>[Oe("div",nHe,[Oe("p",iHe," Your spender fee balance is low ("+Nr(A())+" XTZ). This will be batched as two operations in a single approval: ",1),Oe("div",sHe,[Oe("div",aHe,[W[25]||(W[25]=Oe("span",{class:"text-xs font-semibold text-primary-600 bg-primary-100 rounded-full w-5 h-5 flex items-center justify-center shrink-0 mt-0.5"},"1",-1)),Oe("div",null,[W[24]||(W[24]=Oe("p",{class:"text-sm font-medium text-text-primary"},"Fund contract",-1)),Oe("p",oHe,"Deposit "+Nr(p.value)+" XTZ into the spending contract",1)])]),W[26]||(W[26]=Oe("div",{class:"card-subtle p-3 flex items-start gap-3"},[Oe("span",{class:"text-xs font-semibold text-primary-600 bg-primary-100 rounded-full w-5 h-5 flex items-center justify-center shrink-0 mt-0.5"},"2"),Oe("div",null,[Oe("p",{class:"text-sm font-medium text-text-primary"},"Top up spender"),Oe("p",{class:"text-xs text-text-muted"},"Send 0.5 XTZ for transaction fees")])],-1))])])]),_:1})):Oi("",!0)])}}}),lHe={class:"card p-5 mb-5"},uHe={class:"mb-5"},fHe={class:"flex items-baseline justify-between mb-2"},dHe={class:"mono text-text-primary text-sm"},hHe={class:"progress-bar"},pHe={class:"flex justify-between mt-1.5"},gHe={class:"text-xs text-text-muted"},bHe={key:0,class:"text-xs text-text-muted mono"},mHe={class:"grid grid-cols-2 gap-3 mb-5"},yHe={class:"card-subtle p-3 text-center"},vHe={class:"value-display text-xl"},EHe={class:"card-subtle p-3 text-center"},wHe={class:"value-display text-xl"},IHe={key:0},xHe={class:"grid grid-cols-2 gap-3 mb-3"},SHe=["placeholder"],MHe=["placeholder"],NHe=["disabled"],RHe={key:0,class:"spinner"},AHe=Eh({__name:"SpendingLimits",setup(t){const e=_E(),r=gr(""),n=gr(""),i=gr(null);let s=null;const o=Zc(()=>e.storage?Zv(_6(e.storage.daily_limit)):"0"),c=Zc(()=>e.storage?Zv(_6(e.storage.per_tx_limit)):"0"),u=Zc(()=>e.storage?Zv(_6(e.storage.spent_today)):"0"),f=Zc(()=>!e.storage||e.storage.daily_limit===0?0:Math.min(100,e.storage.spent_today/e.storage.daily_limit*100));function d(){var Q;if(!((Q=e.storage)!=null&&Q.last_reset)){i.value=null;return}const g=new Date(e.storage.last_reset).getTime(),m=Date.now(),x=g+24*60*60*1e3,A=Math.max(0,x-m);if(A<=0){i.value="00:00:00";return}const D=Math.floor(A/1e3),O=Math.floor(D/3600),z=Math.floor(D%3600/60),j=D%60;i.value=`${O.toString().padStart(2,"0")}:${z.toString().padStart(2,"0")}:${j.toString().padStart(2,"0")}`}async function p(){const g=parseFloat(r.value),m=parseFloat(n.value);isNaN(g)||isNaN(m)||(await e.setLimits(g,m),r.value="",n.value="")}return wR(()=>{s=setInterval(d,1e3),d()}),p3(()=>{s&&clearInterval(s)}),(g,m)=>(kt(),Vt("section",lHe,[m[12]||(m[12]=Oe("p",{class:"section-label mb-4"},"spending limits",-1)),Oe("div",uHe,[Oe("div",fHe,[m[2]||(m[2]=Oe("p",{class:"text-sm text-text-secondary"},"Spent Today",-1)),Oe("p",dHe,Nr(u.value)+" / "+Nr(o.value)+" XTZ ",1)]),Oe("div",hHe,[Oe("div",{class:"progress-bar-fill",style:gR({width:`${f.value}%`})},null,4)]),Oe("div",pHe,[Oe("p",gHe,Nr(Math.round(f.value))+"% used",1),i.value?(kt(),Vt("p",bHe," resets in "+Nr(i.value),1)):Oi("",!0)])]),Oe("div",mHe,[Oe("div",yHe,[m[4]||(m[4]=Oe("p",{class:"label"},"daily limit",-1)),Oe("p",null,[Oe("span",vHe,Nr(o.value),1),m[3]||(m[3]=Oe("span",{class:"value-unit text-xs"},"XTZ",-1))])]),Oe("div",EHe,[m[6]||(m[6]=Oe("p",{class:"label"},"per-tx limit",-1)),Oe("p",null,[Oe("span",wHe,Nr(c.value),1),m[5]||(m[5]=Oe("span",{class:"value-unit text-xs"},"XTZ",-1))])])]),Yt(e).isOwner?(kt(),Vt("div",IHe,[m[10]||(m[10]=Oe("div",{class:"divider"},null,-1)),m[11]||(m[11]=Oe("p",{class:"text-sm font-medium text-text-primary mb-3"},"Update Limits",-1)),Oe("div",xHe,[Oe("div",null,[m[7]||(m[7]=Oe("label",{class:"label"},"new daily limit",-1)),th(Oe("input",{"onUpdate:modelValue":m[0]||(m[0]=x=>r.value=x),type:"number",placeholder:o.value,class:"input-field"},null,8,SHe),[[qp,r.value]])]),Oe("div",null,[m[8]||(m[8]=Oe("label",{class:"label"},"new per-tx limit",-1)),th(Oe("input",{"onUpdate:modelValue":m[1]||(m[1]=x=>n.value=x),type:"number",placeholder:c.value,class:"input-field"},null,8,MHe),[[qp,n.value]])])]),Oe("button",{onClick:p,disabled:Yt(e).isLoading||!r.value||!n.value,class:"btn-primary flex items-center gap-2"},[Yt(e).isLoading?(kt(),Vt("span",RHe)):Oi("",!0),m[9]||(m[9]=_n(" Update Limits ",-1))],8,NHe)])):Oi("",!0)]))}}),LHe={class:"card p-5 mb-5"},THe={key:0,class:"card-subtle p-4 border-2 border-green-200 bg-green-50/50"},UHe={key:0,class:"mb-3"},CHe={key:0},OHe={class:"flex items-stretch gap-2"},kHe={class:"mono bg-white px-2 py-1.5 rounded flex-1 break-all text-sm border border-green-200 flex items-center"},DHe=["title"],zHe={key:0,xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},jHe={key:1,xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},FHe={key:1,class:"mb-3"},BHe={class:"flex items-stretch gap-2"},VHe={class:"mono bg-white px-2 py-1.5 rounded flex-1 break-all text-sm border border-amber-200 flex items-center"},qHe=["title"],PHe={key:0,xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},QHe={key:1,xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},WHe={key:2,class:"p-3 mb-3 rounded border border-amber-200 bg-amber-50/50"},GHe={class:"mb-4"},KHe={class:"mono bg-white px-2 py-1.5 rounded block break-all text-sm border border-green-200"},HHe={key:1,class:"card-subtle p-4 border border-amber-200 bg-amber-50/50"},YHe={class:"flex items-start gap-3 mb-4"},ZHe={class:"text-sm text-amber-700"},XHe=["disabled"],c8=.5,JHe=Eh({__name:"SpenderManagement",setup(t){const e=_E(),{isLocal:r,detectMode:n}=cA(),i=gr(!1),s=gr(!1),o=gr(!1),c=gr(!1),u=gr(""),f=gr(""),d=gr(!1),p=gr("");async function g(){const O=await fetch("/api/generate-keypair",{method:"POST"});if(!O.ok)throw new Error("Failed to generate keypair on server");return O.json()}async function m(){if(!(await fetch("/api/activate-key",{method:"POST"})).ok)throw new Error("Failed to activate key on server")}async function x(O,z){await qj(O),p.value=z,setTimeout(()=>{p.value=""},2e3)}async function A(){s.value=!0;try{await n();let O;if(r.value){const z=await g();O=z.address,f.value=z.secretKey}else{const z=await nue();O=z.address,f.value=z.secretKey}await e.setSpender(O),r.value&&await m();try{await e.withdraw(O,c8)}catch(z){console.warn("Failed to fund new spender (contract balance may be too low):",z),c.value=!0}u.value=O,o.value=!0,i.value=!1}catch(O){console.error("Failed to regenerate spender:",O)}finally{s.value=!1}}function D(){o.value=!1,c.value=!1,u.value="",f.value="",d.value=!1}return(O,z)=>(kt(),Vt("section",LHe,[z[27]||(z[27]=Oe("p",{class:"section-label mb-4"},"spender key management",-1)),o.value?(kt(),Vt("div",THe,[z[16]||(z[16]=m6('<div class="flex items-center gap-2 mb-3"><div class="w-8 h-8 bg-green-100 rounded-full flex items-center justify-center"><svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 text-green-600" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg></div><span class="font-semibold text-green-800">Spender Updated Successfully</span></div>',1)),Yt(r)?(kt(),Vt("div",UHe,[z[9]||(z[9]=Oe("p",{class:"text-sm text-green-700 mb-3"}," Your MCP server has been automatically updated with the new spending key. No manual configuration needed. ",-1)),f.value?(kt(),Vt("div",CHe,[z[8]||(z[8]=Oe("label",{class:"label"},"new spending key",-1)),Oe("div",OHe,[Oe("code",kHe,Nr(d.value?f.value:f.value.slice(0,4)+"•".repeat(24)),1),Oe("button",{onClick:z[0]||(z[0]=j=>d.value=!d.value),class:"btn-secondary !py-1.5 !px-2 text-xs",title:d.value?"Hide spending key":"Show spending key"},[d.value?(kt(),Vt("svg",jHe,[...z[7]||(z[7]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21"},null,-1)])])):(kt(),Vt("svg",zHe,[...z[6]||(z[6]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"},null,-1),Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"},null,-1)])]))],8,DHe),Oe("button",{onClick:z[1]||(z[1]=j=>x(f.value,"key")),class:"btn-secondary !py-1.5 !px-2 text-xs"},Nr(p.value==="key"?"Copied!":"Copy"),1)])])):Oi("",!0)])):(kt(),Vt("div",FHe,[z[13]||(z[13]=Oe("p",{class:"text-sm text-amber-700 mb-3"},[_n(" Update the "),Oe("code",{class:"mono text-xs bg-amber-100 px-1 py-0.5 rounded"},"SPENDING_PRIVATE_KEY"),_n(" environment variable on your MCP server with the new key below and restart Claude Desktop. The key won't be shown again after you leave this page. ")],-1)),Oe("div",null,[z[12]||(z[12]=Oe("label",{class:"label"},"new spending key",-1)),Oe("div",BHe,[Oe("code",VHe,Nr(d.value?f.value:f.value.slice(0,4)+"•".repeat(24)),1),Oe("button",{onClick:z[2]||(z[2]=j=>d.value=!d.value),class:"btn-secondary !py-1.5 !px-2 text-xs",title:d.value?"Hide spending key":"Show spending key"},[d.value?(kt(),Vt("svg",QHe,[...z[11]||(z[11]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21"},null,-1)])])):(kt(),Vt("svg",PHe,[...z[10]||(z[10]=[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"},null,-1),Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"},null,-1)])]))],8,qHe),Oe("button",{onClick:z[3]||(z[3]=j=>x(f.value,"key")),class:"btn-secondary !py-1.5 !px-2 text-xs"},Nr(p.value==="key"?"Copied!":"Copy"),1)])])])),c.value?(kt(),Vt("div",WHe,[Oe("div",{class:"flex items-start gap-2"},[z[14]||(z[14]=Oe("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-5 w-5 text-amber-600 flex-shrink-0 mt-0.5",viewBox:"0 0 20 20",fill:"currentColor"},[Oe("path",{"fill-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","clip-rule":"evenodd"})],-1)),Oe("p",{class:"text-sm text-amber-700"}," Could not fund the new spender with "+Nr(c8)+" XTZ for gas fees — the contract balance may be too low. Send some XTZ to the spender address below or fund the contract from the dashboard. ")])])):Oi("",!0),Oe("div",GHe,[z[15]||(z[15]=Oe("label",{class:"label"},"new spender address",-1)),Oe("code",KHe,Nr(u.value),1)]),Oe("button",{onClick:D,class:"btn-primary w-full"}," Done ")])):(kt(),Vt("div",HHe,[Oe("div",YHe,[z[25]||(z[25]=Oe("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-5 w-5 text-amber-600 flex-shrink-0 mt-0.5",viewBox:"0 0 20 20",fill:"currentColor"},[Oe("path",{"fill-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","clip-rule":"evenodd"})],-1)),Oe("div",null,[z[24]||(z[24]=Oe("p",{class:"text-sm font-medium text-amber-800 mb-1"},"Regenerate Spender Keypair",-1)),Oe("p",ZHe,[z[20]||(z[20]=_n(" This will generate a new spending keypair and update the contract. ",-1)),Yt(r)?(kt(),Vt(vs,{key:0},[_n(" The new spender will be funded with "+Nr(c8)+" XTZ for gas fees. ")],64)):Oi("",!0),z[21]||(z[21]=_n(" The current spender key will ",-1)),z[22]||(z[22]=Oe("strong",null,"stop working immediately",-1)),z[23]||(z[23]=_n(". ",-1)),Yt(r)?(kt(),Vt(vs,{key:1},[_n(" Your MCP server will be updated automatically. ")],64)):(kt(),Vt(vs,{key:2},[z[17]||(z[17]=_n(" You will need to update the ",-1)),z[18]||(z[18]=Oe("code",{class:"mono text-xs bg-amber-100 px-1 py-0.5 rounded"},"SPENDING_PRIVATE_KEY",-1)),z[19]||(z[19]=_n(" environment variable on your MCP server. ",-1))],64))])])]),Oe("button",{onClick:z[4]||(z[4]=j=>i.value=!0),disabled:Yt(e).isLoading,class:"btn-danger w-full flex items-center justify-center gap-2"},[...z[26]||(z[26]=[Oe("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[Oe("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"})],-1),_n(" Regenerate Spender Key ",-1)])],8,XHe)])),i.value?(kt(),Cp(iue,{key:2,title:"Regenerate Spender Key?",message:Yt(r)?`This action cannot be undone. The current spender key will be invalidated immediately and any services using it will lose access. The new spender will be funded with ${c8} XTZ from the contract for gas fees.`:"This action cannot be undone. The current spender key will be invalidated immediately and any services using it will lose access. You will need to update the SPENDING_PRIVATE_KEY environment variable on your MCP server.","confirm-text":"Regenerate","cancel-text":"Cancel",variant:"danger","is-loading":s.value,onConfirm:A,onCancel:z[5]||(z[5]=j=>i.value=!1)},null,8,["message","is-loading"])):Oi("",!0)]))}}),_He={class:"card p-5 mb-5"},$He={class:"space-y-3"},eYe=["placeholder"],tYe=["placeholder"],rYe=["disabled"],nYe={key:0,class:"spinner"},iYe=Eh({__name:"WithdrawFunds",setup(t){const e=Uy(),r=_E(),n=gr(""),i=gr(""),s=Zc(()=>r.contractBalance===null?"0":Zv(_6(r.contractBalance)));async function o(){const c=parseFloat(i.value);!n.value||isNaN(c)||(await r.withdraw(n.value,c),n.value="",i.value="")}return(c,u)=>(kt(),Vt("section",_He,[u[5]||(u[5]=Oe("p",{class:"section-label mb-4"},"withdraw funds",-1)),u[6]||(u[6]=Oe("p",{class:"text-sm text-text-muted mb-4"}," Withdraw any amount without limits. ",-1)),Oe("div",$He,[Oe("div",null,[u[2]||(u[2]=Oe("label",{class:"label"},"recipient",-1)),th(Oe("input",{"onUpdate:modelValue":u[0]||(u[0]=f=>n.value=f),type:"text",placeholder:Yt(e).userAddress??void 0,class:"input-field mono"},null,8,eYe),[[qp,n.value]])]),Oe("div",null,[u[3]||(u[3]=Oe("label",{class:"label"},"amount (xtz)",-1)),th(Oe("input",{"onUpdate:modelValue":u[1]||(u[1]=f=>i.value=f),type:"number",placeholder:`Max: ${s.value}`,class:"input-field"},null,8,tYe),[[qp,i.value]])]),Oe("button",{onClick:o,disabled:Yt(r).isLoading||!n.value||!i.value,class:"btn-primary w-full flex items-center justify-center gap-2"},[Yt(r).isLoading?(kt(),Vt("span",nYe)):Oi("",!0),u[4]||(u[4]=_n(" Withdraw ",-1))],8,rYe)])]))}}),sYe={class:"card mb-5 overflow-hidden"},aYe={class:"overflow-hidden"},oYe={class:"px-5 pb-5"},cYe={class:"flex items-center gap-2 mb-2"},lYe={class:"label !mb-0 !text-[11px] uppercase tracking-wider text-text-muted font-medium"},uYe={class:"space-y-1.5"},fYe={class:"mono text-xs text-accent-600 truncate"},dYe={class:"text-xs text-text-secondary leading-relaxed"},hYe={class:"text-xs text-text-muted italic hidden sm:block"},pYe=Eh({__name:"ToolGuide",setup(t){const e=gr(!1),r=[{label:"Wallet",tools:[{name:"tezos_get_balance",desc:"Check the balance of your spending contract and spender address.",example:"What's my balance?"},{name:"tezos_send_xtz",desc:"Send XTZ to any Tezos address via your spending contract.",example:"Send 5 XTZ to tz1abc..."},{name:"tezos_get_limits",desc:"View daily and per-transaction spending limits, and how much has been used today.",example:"What are my spending limits?"},{name:"tezos_get_addresses",desc:"Get the contract, owner, and spender addresses.",example:"Show me my Tezos addresses"},{name:"tezos_get_operation_history",desc:"View recent transaction history for the spending contract.",example:"Show my recent transactions"}]},{label:"x402 Payments",tools:[{name:"tezos_fetch_with_x402",desc:"Fetch a URL and automatically pay if it requires an x402 payment.",example:"Fetch https://api.example.com/paid-endpoint with a max of 0.5 XTZ"},{name:"tezos_create_x402_payment",desc:"Create a signed x402 payment header without broadcasting. Internal tool.",example:"Create an x402 payment of 500000 mutez to tz1abc..."},{name:"tezos_parse_x402_requirements",desc:"Parse payment requirements from a 402 response body. Internal tool.",example:"Parse these x402 payment requirements"}]},{label:"Account",tools:[{name:"tezos_recover_spender_funds",desc:"Transfer the spender address's XTZ balance back to the owner.",example:"Drain the spender address to my account"},{name:"tezos_reveal_account",desc:"Reveal the spender account on-chain. Internal tool.",example:"Reveal my account"},{name:"tezos_get_dashboard",desc:"Get a link to the configuration dashboard.",example:"Open the dashboard"}]}];return(n,i)=>(kt(),Vt("section",sYe,[Oe("button",{onClick:i[0]||(i[0]=s=>e.value=!e.value),class:"w-full flex items-center justify-between px-5 py-4 cursor-pointer bg-transparent border-none text-left transition-colors hover:bg-primary-50/50"},[i[2]||(i[2]=Oe("p",{class:"section-label !mb-0"},"tool reference",-1)),(kt(),Vt("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:Tg(["text-text-muted transition-transform duration-200",e.value?"rotate-180":""])},[...i[1]||(i[1]=[Oe("polyline",{points:"6 9 12 15 18 9"},null,-1)])],2))]),Oe("div",{class:Tg(["grid transition-[grid-template-rows] duration-300 ease-[cubic-bezier(0.16,1,0.3,1)]",e.value?"grid-rows-[1fr]":"grid-rows-[0fr]"])},[Oe("div",aYe,[Oe("div",oYe,[i[4]||(i[4]=Oe("p",{class:"text-xs text-text-muted mb-4"}," Call tools by asking your AI agent to do things in plain language. Tools marked as internal are automatically called in conjunction with other tools, but can also be called manually. ",-1)),(kt(),Vt(vs,null,xO(r,(s,o)=>Oe("div",{key:s.label,class:Tg(o>0?"mt-4":"")},[Oe("div",cYe,[Oe("span",lYe,Nr(s.label),1),i[3]||(i[3]=Oe("div",{class:"flex-1 h-px bg-primary-200"},null,-1))]),Oe("div",uYe,[(kt(!0),Vt(vs,null,xO(s.tools,c=>(kt(),Vt("div",{key:c.name,class:"card-subtle px-3 py-2.5 grid grid-cols-[160px_1fr] gap-3 items-baseline sm:grid-cols-[170px_1fr_1fr]"},[Oe("span",fYe,Nr(c.name),1),Oe("span",dYe,Nr(c.desc),1),Oe("span",hYe,'"'+Nr(c.example)+'"',1)]))),128))])],2)),64))])])],2)]))}}),gYe={class:"min-h-screen py-12 px-4 sm:px-6 lg:px-8 relative z-10"},bYe={class:"max-w-2xl mx-auto"},mYe={class:"mb-6 flex items-center justify-between"},yYe=["value"],vYe=["value"],EYe={key:0,class:"mb-4 px-4 py-2.5 rounded-lg bg-warning/10 border border-warning/20 flex items-center gap-2 text-sm text-warning"},wYe={class:"text-warning/70"},IYe={class:"text-center"},xYe=["disabled"],SYe={key:0,class:"spinner spinner-dark"},MYe={key:4,class:"card p-4 mt-5 border border-error/20 bg-error/5"},NYe={class:"text-sm text-error"},RYe={class:"mt-12 text-center"},AYe={class:"text-sm text-text-muted"},LYe=Eh({__name:"App",setup(t){const e=Uy(),r=_E(),{detectMode:n,serverNetwork:i}=cA(),s=Object.entries(Yv).map(([c,u])=>({id:c,name:u.name}));async function o(c){const u=c.target;r.clearContractAddress(),await e.switchNetwork(u.value)}return wR(async()=>{var p;await n();const c=new URLSearchParams(window.location.search),u=(p=c.get("network"))==null?void 0:p.toLowerCase(),f=u&&u in Yv?u:i.value&&i.value in Yv?i.value:null;f&&f!==e.networkId&&await e.switchNetwork(f),await e.init();const d=c.get("contract");if(d){if(await r.setContractAddress(d),r.contractAddress){c.delete("contract"),c.delete("network");const g=c.toString()?`${window.location.pathname}?${c}`:window.location.pathname;window.history.replaceState({},"",g)}}else r.contractAddress&&await r.loadContract()}),(c,u)=>(kt(),Vt(vs,null,[u[8]||(u[8]=Oe("div",{class:"film-grain"},null,-1)),Oe("div",gYe,[Oe("div",bYe,[Oe("header",mYe,[u[3]||(u[3]=Oe("h1",{class:"text-3xl font-semibold tracking-tight text-text-primary"}," TezosX MCP Configuration ",-1)),Oe("select",{value:Yt(e).networkId,onChange:o,class:"text-xs text-text-muted bg-transparent border border-border rounded px-2 py-1 cursor-pointer hover:border-text-muted transition-colors"},[(kt(!0),Vt(vs,null,xO(Yt(s),f=>(kt(),Vt("option",{key:f.id,value:f.id},Nr(f.name),9,vYe))),128))],40,yYe)]),Yt(e).networkId!=="mainnet"?(kt(),Vt("div",EYe,[u[4]||(u[4]=Oe("span",{class:"font-medium"},"Testnet",-1)),Oe("span",wYe,"You're connected to "+Nr(Yt(e).currentNetwork.name)+". Funds on this network have no real value.",1)])):Oi("",!0),Uc(jGe),Yt(r).deploymentResult?(kt(),Cp(gKe,{key:1,"contract-address":Yt(r).deploymentResult.contractAddress,"spending-key":Yt(r).deploymentResult.spendingKey,"config-save-failed":Yt(r).deploymentResult.configSaveFailed,onContinue:u[0]||(u[0]=f=>Yt(r).clearDeploymentResult()),onConfigSaved:u[1]||(u[1]=f=>Yt(r).deploymentResult.configSaveFailed=!1)},null,8,["contract-address","spending-key","config-save-failed"])):Oi("",!0),!Yt(r).contractAddress&&!Yt(r).deploymentResult?(kt(),Cp(YGe,{key:2})):Oi("",!0),Yt(r).contractAddress&&Yt(r).storage?(kt(),Vt(vs,{key:3},[Uc(cHe),Uc(pYe),Uc(AHe),Yt(r).isOwner?(kt(),Cp(JHe,{key:0})):Oi("",!0),Yt(r).isOwner?(kt(),Cp(iYe,{key:1})):Oi("",!0),Oe("div",IYe,[Oe("button",{onClick:u[2]||(u[2]=f=>Yt(r).refreshStorage()),disabled:Yt(r).isLoading,class:"btn-secondary flex items-center gap-2 mx-auto"},[Yt(r).isLoading?(kt(),Vt("span",SYe)):Oi("",!0),u[5]||(u[5]=_n(" Refresh ",-1))],8,xYe)])],64)):Oi("",!0),Yt(r).error?(kt(),Vt("div",MYe,[Oe("p",NYe,Nr(Yt(r).error),1)])):Oi("",!0),Oe("footer",RYe,[Oe("p",AYe,[u[6]||(u[6]=_n(" Built with ",-1)),u[7]||(u[7]=Oe("a",{href:"https://taquito.io",target:"_blank"},"Taquito",-1)),_n(" · "+Nr(Yt(e).currentNetwork.name),1)])])])])],64))}});globalThis.Buffer=vh.Buffer;globalThis.process=globalThis.process||{env:{},browser:!0};const sue=Ode(LYe);sue.use(zde());sue.mount("#app");
|
package/frontend/dist/index.html
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
10
|
-
<script type="module" crossorigin src="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-BbUbeppO.js"></script>
|
|
11
11
|
<link rel="stylesheet" crossorigin href="/assets/index-BjYU9URm.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|