Compare commits

...
5 Commits
Author SHA1 Message Date
黑先森 8c911f47f9 优化日志输出和提示 成员列表显示bug修复 优化打包后的目录结构,清爽干净 2024-10-25 18:40:47 +08:00
leizi97 f3fc37957c 增加子网代理和部分高级配置功能 升级tauri到2.0.6 2024-10-23 21:58:36 +08:00
黑先森 a4d6fe6e95 封装二级弹窗方法,新增子网代理和高级配置按钮,新增子网代理页面 2024-10-23 18:37:11 +08:00
黑先森 9b883d686d 优化界面css,增加部分页面autostart权限
-- 更新 element-plus 2.7.1 -> 2.8.6 并修复升级后的问题
-- 升级autostart插件为2.0.1 win10测试开机自启成功
2024-10-22 19:09:45 +08:00
黑先森 2ac0afb847 插件版本更新,rust打包使用1.77.2,支持win7 2024-10-21 10:51:16 +08:00
28 changed files with 603 additions and 826 deletions
-14
View File
@@ -27,17 +27,3 @@ body {
box-sizing: border-box;
padding: 3px 5px;
}
::-webkit-scrollbar {
width: 6px;
}
::-webkit-scrollbar-thumb {
background-color: #0003;
border-radius: 10px;
transition: all 0.2s ease-in-out;
}
::-webkit-scrollbar-track {
border-radius: 10px;
}
+1 -1
View File
@@ -92,7 +92,7 @@ export async function MenuItemShow(text: string) {
export async function setTrayRunState(tray: TrayIcon | null, isRunning: boolean = false) {
if (!tray) return;
tray.setIcon(isRunning ? "icons/icon-inactive.ico" : "icons/icon.ico");
tray.setIcon(isRunning ? "easytier/icons/icon-inactive.ico" : "easytier/icons/icon.ico");
}
// export async function setTrayTooltip(tooltip: string) {
+53
View File
@@ -0,0 +1,53 @@
import { type UnlistenFn } from "@tauri-apps/api/event";
import { getCurrentWindow, PhysicalPosition, type WindowOptions, Window } from "@tauri-apps/api/window";
import { WebviewWindow } from "@tauri-apps/api/webviewWindow";
import type { WebviewLabel, WebviewOptions, } from "@tauri-apps/api/webview";
export default async (
label: WebviewLabel,
options?: Omit<WebviewOptions, "x" | "y" | "width" | "height"> & WindowOptions,
afterCreatedFunc?: (webviewWindow: WebviewWindow, appWindow: Window) => void | null,
beforeCloseFunc?: () => void | null
) => {
let defaultOpts = {
parent: undefined,
closable: true,
resizable: true,
decorations: true,
maximizable: false,
minimizable: false,
x: 0,
y: 0
};
const appWindow = getCurrentWindow();
if (appWindow) {
const appSize = await appWindow.outerSize();
const factor = await appWindow.scaleFactor();
const appPosition = await appWindow.outerPosition();
const logicalPosition = new PhysicalPosition(appPosition.x + appSize.width, appPosition.y).toLogical(factor);
defaultOpts.parent = appWindow as any;
defaultOpts.x = logicalPosition.x;
defaultOpts.y = logicalPosition.y;
}
let unListenlogClose: UnlistenFn | null = null;
let unlistenLogCreated: UnlistenFn | null = null;
let dialog = await WebviewWindow.getByLabel(label);
if (!dialog) {
dialog = new WebviewWindow(label, {...defaultOpts, ...options});
unlistenLogCreated = await dialog.once("tauri://webview-created", async () => {
if (dialog) {
afterCreatedFunc && (await afterCreatedFunc(dialog, appWindow));
await dialog.show();
}
});
unListenlogClose = await dialog.onCloseRequested(async () => {
beforeCloseFunc && (await beforeCloseFunc());
unListenlogClose && (await unListenlogClose());
});
} else {
const visible = await dialog.isVisible();
if (visible) {
await dialog.close();
unlistenLogCreated && (await (unlistenLogCreated as Function)());
}
}
};
+1 -1
View File
@@ -5,6 +5,6 @@
<script setup lang="tsx">
//屏蔽右键菜单
document.addEventListener("contextmenu", (e: MouseEvent) => {
e.preventDefault();
// e.preventDefault();
});
</script>
+2 -3
View File
@@ -3,7 +3,7 @@
"private": true,
"author": "leizi97",
"description": "A simple network initiator based on Easytier",
"version": "1.0.6",
"version": "1.0.8",
"scripts": {
"dev": "nuxt dev --dotenv env/.env.dev --host 0.0.0.0",
"build": "nuxt generate --dotenv env/.env.prod"
@@ -25,8 +25,7 @@
"@vitejs/plugin-vue-jsx": "^3.1.0",
"dayjs": "^1.11.10",
"defu": "^6.1.4",
"element-plus": "^2.7.1",
"javascript-obfuscator": "^4.1.0",
"element-plus": "^2.8.6",
"less": "^4.2.0",
"lodash-es": "^4.17.21",
"nuxt": "^3.11.2",
+28
View File
@@ -0,0 +1,28 @@
<template>
<div class="h-full overflow-auto flex flex-col items-start px-[25px]">
<div>
<ElCheckbox v-model="mainStore.config.disableIpv6">不使用IPv6</ElCheckbox>
</div>
<div><ElCheckbox v-model="mainStore.config.disbleListenner">不监听任何端口只连接到对等节点</ElCheckbox></div>
<div><ElCheckbox v-model="mainStore.config.enablExitNode">允许此节点成为出口节点</ElCheckbox></div>
<div><ElCheckbox v-model="mainStore.config.disableEncryption">禁用对等节点通信的加密默认为false必须与对等节点相同</ElCheckbox></div>
<div><ElCheckbox v-model="mainStore.config.multiThread">使用多线程运行时默认为单线程</ElCheckbox></div>
<div><ElCheckbox v-model="mainStore.config.noTun">不创建TUN设备可以使用子网代理访问节点</ElCheckbox></div>
<div><ElCheckbox v-model="mainStore.config.useSmoltcp">为子网代理启用smoltcp堆栈</ElCheckbox></div>
<div><ElCheckbox v-model="mainStore.config.latencyfirst">延迟优先模式将尝试使用最低延迟路径转发流量默认使用最短路径</ElCheckbox></div>
<div><ElCheckbox v-model="mainStore.config.disableUdpHolePunching">禁用UDP打洞功能</ElCheckbox></div>
<div>
<ElCheckbox v-model="mainStore.config.relayAllPeerrpc">转发所有对等节点的RPC数据包即使对等节点不在转发网络白名</ElCheckbox>
</div>
</div>
</template>
<script setup lang="ts">
import useMainStore from "@/stores/index";
import { getCurrentWindow } from "@tauri-apps/api/window";
const mainStore = useMainStore();
const appWindow = getCurrentWindow();
mainStore.$subscribe((...a) => {
// console.log("subscribe", a);
appWindow.emitTo("main", "config", { config: { ...mainStore.config } });
});
</script>
+25
View File
@@ -0,0 +1,25 @@
<template>
<div class="h-full flex flex-col gap-[10px]">
<ElRadioGroup v-model="mainStore.cidrEnable">
<ElRadioButton :value="true">开启</ElRadioButton>
<ElRadioButton :value="false">关闭</ElRadioButton>
</ElRadioGroup>
<div class="flex-1 overflow-auto">
<ElInput
placeholder="例如: 192.168.1.0/24 一行一个"
v-model="mainStore.config.proxyNetworks"
type="textarea"
:rows="30"
resize="none"></ElInput>
</div>
</div>
</template>
<script setup lang="ts">
import useMainStore from "@/stores/index";
import { getCurrentWindow } from "@tauri-apps/api/window";
const mainStore = useMainStore();
const appWindow = getCurrentWindow();
mainStore.$subscribe((...a) => {
appWindow.emitTo("main", "config", { cidrEnable: mainStore.cidrEnable, config: { ...mainStore.config } });
});
</script>
+186 -162
View File
@@ -2,32 +2,27 @@
<ElForm
size="small"
label-position="top"
:model="config"
>
:model="config">
<ElFormItem
label="服务器"
prop="serverUrl"
>
prop="serverUrl">
<template #label>
<div class="flex items-center gap-[0_5px]">
<div>服务器</div>
<span>-</span>
<ElTag
effect="dark"
:type="data.isSuccessGetIp ? 'success' : 'info'"
>
{{ data.isSuccessGetIp ? "联机成功" : "联机中" }}
:type="data.isSuccessGetIp ? 'success' : 'info'">
{{ data.isSuccessGetIp ? "联机成功" : data.isStart && !data.isSuccessGetIp ? "联机中" : "未联机" }}
</ElTag>
<ElButton
v-if="!data.coreVersion"
@click="getCoreVersion(true)"
>
@click="getCoreVersion(true)">
获取工具版本
</ElButton>
<ElTag
v-else
type="info"
>
type="info">
core-{{ data.coreVersion }}
</ElTag>
<ElButton
@@ -35,8 +30,7 @@
:loading="data.update"
type="warning"
@click="handleUpdateCore"
size="small"
>
size="small">
{{ data.coreVersion ? "更新" : "下载" }}
</ElButton>
</div>
@@ -46,23 +40,21 @@
filterable
default-first-option
v-model="config.serverUrl"
@change="handleServerUrlChange"
>
@change="handleServerUrlChange">
<template #prefix>
<div :class="config.protocol && config.protocol.length > 1 ? 'w-[120px]' : 'w-[80px]'">
<ElSelect
placeholder="协议"
multiple
collapse-tags
@click.stop
v-model="config.protocol"
@change="handleServerUrlChange"
>
@change="handleServerUrlChange">
<ElOption
v-for="item in protocols"
:key="item"
:label="item"
:value="item"
></ElOption>
:value="item"></ElOption>
</ElSelect>
</div>
</template>
@@ -70,16 +62,14 @@
v-for="item in mainStore.basePeers"
:key="item"
:label="item"
:value="item"
>
:value="item">
<div class="flex items-center justify-between">
<span style="float: left">{{ item }}</span>
<ElButton
@click.stop="handleDeleteServerUrl(item)"
round
:icon="Delete"
type="danger"
></ElButton>
type="danger"></ElButton>
</div>
</ElOption>
</ElSelect>
@@ -98,8 +88,7 @@
<ElInput
maxlength="100"
placeholder="请输入网络名"
v-model="config.networkName"
></ElInput>
v-model="config.networkName"></ElInput>
</ElFormItem>
</div>
<div class="flex-1">
@@ -117,8 +106,7 @@
maxlength="100"
placeholder="请输入网络密码"
v-model="config.networkPassword"
type="password"
></ElInput>
type="password"></ElInput>
</ElFormItem>
</div>
</div>
@@ -135,13 +123,11 @@
<ElInput
maxlength="100"
placeholder="例如: Player1"
v-model="config.hostname"
></ElInput>
v-model="config.hostname"></ElInput>
</ElFormItem>
<ElFormItem
class="w-[70%]"
label="局域网IP"
>
label="局域网IP">
<template #label>
<div class="flex items-center h-[20px]">
虚拟网IP
@@ -154,16 +140,14 @@
inline-prompt
inactive-text="固定IP"
active-text="动态获取IP"
size="small"
></ElSwitch>
size="small"></ElSwitch>
</div>
</template>
<ElInput
maxlength="100"
:disabled="config.dhcp"
:placeholder="data.isStart ? '等待动态分配IP...' : '例如: 10.126.126.1'"
v-model="config.ipv4"
></ElInput>
v-model="config.ipv4"></ElInput>
</ElFormItem>
</div>
<div class="flex items-start gap-[0_30px]">
@@ -173,72 +157,78 @@
:type="!data.isStart ? 'primary' : 'danger'"
:disabled="data.startLoading || !data.coreVersion || data.update"
@click="handleConnection"
size="default"
>
size="default">
{{ !data.isStart ? "启动联机" : "停止联机" }}
</ElButton>
</div>
<div class="mt-[6px]">
<div class="mt-[6px] pl-[2px]">
<!-- <ElButtonGroup> -->
<ElTooltip
placement="right"
:content="data.logVisible ? '关闭日志' : '打开日志'"
>
placement="left"
content="日志">
<ElButton
:type="!data.logVisible ? 'info' : 'warning'"
@click="handleShowLogDialog"
:icon="List"
size="small"
plain
></ElButton>
plain></ElButton>
</ElTooltip>
<ElTooltip
placement="left"
content="成员信息"
>
content="成员">
<ElButton
@click="handleShowMemberDialog"
:icon="UserFilled"
plain
type="success"
size="small"
></ElButton>
size="small"></ElButton>
</ElTooltip>
<!-- </ElButtonGroup> -->
</div>
</div>
<div>
<ElCheckbox
v-model="config.disbleP2p"
size="small"
>
禁用p2p
size="small">
强制中转
</ElCheckbox>
<ElCheckbox
<!-- <ElCheckbox
v-model="config.disableIpv6"
size="small"
>
禁用ipv6
</ElCheckbox>
</ElCheckbox> -->
<ElCheckbox
@change="handleAutoStart"
:model-value="config.autoStart"
size="small"
>
size="small">
开机自启
</ElCheckbox>
<ElCheckbox
<!-- <ElCheckbox
v-model="config.disbleListenner"
size="small"
>
禁用端口监听
</ElCheckbox>
</ElCheckbox> -->
<div>
<ElButton
@click="handleShowCidrDialog"
:icon="Share"
>子网代理</ElButton
>
<ElButton
@click="handleShowAdvanceDialog"
:icon="Setting"
>高级选项</ElButton
>
</div>
<div class="flex items-center gap-[0_5px]">
<div>
<ElLink
class="!text-[11px]"
type="info"
:underline="false"
@click="open('https://github.com/dechamps/WinIPBroadcast/releases/tag/winipbroadcast-1.6')"
>
@click="open('https://github.com/dechamps/WinIPBroadcast/releases/tag/winipbroadcast-1.6')">
WinIPBroadcast
<ElTooltip content="找不到游戏房间时,就开启它后再刷新尝试(默认开启)">
<ElIcon class="ml-[3px]"><QuestionFilled /></ElIcon>
@@ -251,15 +241,13 @@
size="small"
label="WinIPBroadcast"
active-text="开启"
inactive-text="关闭"
></ElSwitch>
inactive-text="关闭"></ElSwitch>
</div>
<ElLink
class="!text-[11px] pb-[2px] ml-[15px]"
type="info"
:underline="false"
@click="open('https://github.com/EasyTier/EasytierGame')"
>
@click="open('https://github.com/EasyTier/EasytierGame')">
主页
</ElLink>
</div>
@@ -269,15 +257,16 @@
</template>
<script setup lang="ts">
import { invoke } from "@tauri-apps/api/core";
import { listen, type UnlistenFn } from "@tauri-apps/api/event";
import { listen } from "@tauri-apps/api/event";
import { open, Command } from "@tauri-apps/plugin-shell";
import { QuestionFilled, Delete, List, UserFilled } from "@element-plus/icons-vue";
import { QuestionFilled, Delete, List, UserFilled, Setting, Share } from "@element-plus/icons-vue";
import { reactive, onBeforeUnmount, onMounted } from "vue";
import { useTray, setTrayRunState } from "~/composables/tray";
import useMainStore from "@/stores/index";
import { ElMessage } from "element-plus";
import { getCurrentWindow, LogicalPosition, PhysicalPosition } from "@tauri-apps/api/window";
import { WebviewWindow, getAllWebviewWindows } from "@tauri-apps/api/webviewWindow";
import { getCurrentWindow, PhysicalPosition } from "@tauri-apps/api/window";
import { getAllWebviewWindows } from "@tauri-apps/api/webviewWindow";
import etWindows from "@/composables/windows";
import * as tauriAutoStart from "@tauri-apps/plugin-autostart";
let is_close = false;
@@ -290,9 +279,12 @@
const mainStore = useMainStore();
const config = mainStore.config;
// console.log(config);
const protocols = ["tcp", "udp", "ws", "wss", "wg"];
const data = reactive({
logVisible: false,
cidrVisible: false,
advanceVisible: false,
winipBcPid: 0, //WinIPBroadcast进程id
winipBcStart: false,
memberVisible: false,
@@ -302,13 +294,13 @@
coreVersion: "",
isSuccessGetIp: false,
startLoading: false,
isStart: false
isStart: false,
});
const closePrevent = async () => {
const appWindow = getCurrentWindow();
if (appWindow.label == "main") {
appWindow.onCloseRequested(async event => {
appWindow.onCloseRequested(async (event) => {
console.log(appWindow.label);
if (!is_close) {
event.preventDefault();
@@ -337,10 +329,11 @@
const listenObj: { [key: string]: any } = {
unListenOutPut: null,
unListenThreadId: null,
unListenConfigStart: null,
thread_id: null,
async listenOutput() {
const appWindow = getCurrentWindow();
const unListen = await listen("command-output", async event => {
const unListen = await listen("command-output", async (event) => {
data.isStart = true;
if (event.payload) {
data.startLoading = false;
@@ -357,13 +350,22 @@
this.unListenOutPut = unListen;
},
async listenThreadId() {
const unListen = await listen("thread-id", event => {
const unListen = await listen("thread-id", (event) => {
if (event.payload) {
this.thread_id = event.payload;
}
});
this.unListenThreadId = unListen;
}
},
async listenConfigStart() {
const unListen = await listen("config", (event) => {
// console.log("config", event.payload);
const ipv4 = config.ipv4;
mainStore.$patch(event.payload as any);
config.ipv4 = ipv4;
});
this.unListenConfigStart = unListen;
},
};
const unListenAll = async () => {
@@ -505,16 +507,19 @@
await initStartWinIpBroadcast();
await getCoreVersion();
await listenObj.listenThreadId();
await listenObj.listenConfigStart();
closePrevent();
});
onBeforeUnmount(() => {
unListenAll();
listenObj.unListenReleaseList && listenObj.unListenReleaseList();
listenObj.unListenConfigStart && listenObj.unListenConfigStart();
logsTimer && clearInterval(logsTimer);
});
const getArgs = () => {
// console.log(config.proxyNetworks);
const args = [];
if (config.dhcp) {
args.push("-d");
@@ -533,7 +538,7 @@
}
if (config.serverUrl) {
const formatUrl = config.serverUrl.replace(/\\/g, "/");
args.push("--peers", ...config.protocol.map(protocol => `${protocol}://${formatUrl}`));
args.push("--peers", ...config.protocol.map((protocol) => `${protocol}://${formatUrl}`));
}
if (config.disbleP2p) {
args.push("--disable-p2p");
@@ -544,6 +549,40 @@
if (config.disbleListenner) {
args.push("--no-listener");
}
if (mainStore.cidrEnable && config.proxyNetworks) {
// console.log(config.proxyNetworks);
const reg = /\d+\.\d+\.\d+\.\d+\/\d+/g;
const formatProxyNetworks = config.proxyNetworks
.split("\n")
.map((item) => item.trim())
.filter((item) => item && reg.test(item));
args.push("--proxy-networks", ...formatProxyNetworks);
config.proxyNetworks = formatProxyNetworks.join("\n");
}
if (config.disableEncryption) {
args.push("--disable-encryption");
}
if (config.multiThread) {
args.push("--multi-thread");
}
if (config.enablExitNode) {
args.push("--enable-exit-node");
}
if (config.noTun) {
args.push("--no-tun");
}
if (config.latencyfirst) {
args.push("--latency-first");
}
if (config.useSmoltcp) {
args.push("--use-smoltcp");
}
if (config.disableUdpHolePunching) {
args.push("--disable-udp-hole-punching");
}
if (config.relayAllPeerrpc) {
args.push("--relay-all-peer-rpc");
}
return args;
};
@@ -554,7 +593,7 @@
config.ipv4 = "";
}
const memberDialog = await getAllWebviewWindows();
const memberDialogs = memberDialog.filter(item => item.label === "member");
const memberDialogs = memberDialog.filter((item) => item.label === "member");
if (memberDialogs && memberDialogs.length > 0) {
data.memberVisible = false;
for (const memberDialog of memberDialogs) {
@@ -572,18 +611,17 @@
if (data.isStart) {
await reset();
} else {
data.log = ""; //清空日志
data.startLoading = true;
await unListenAll();
await listenObj.listenOutput();
const args = getArgs();
await invoke("run_command", {
args
args,
});
}
};
let unListenMemberClose: UnlistenFn | null = null;
let unlistenMemberCreated: UnlistenFn | null = null;
const handleShowMemberDialog = async () => {
if (!data.isStart) {
return ElMessage.warning("请先开始联机");
@@ -591,96 +629,82 @@
if (!mainStore.config.ipv4) {
return ElMessage.warning("请等待获取IP");
}
const appWindow = getCurrentWindow();
if (appWindow) {
const appSize = await appWindow.outerSize();
const factor = await appWindow.scaleFactor();
const appPosition = await appWindow.outerPosition();
const logicalPosition = new PhysicalPosition(appPosition.x + appSize.width, appPosition.y).toLogical(factor);
let memberDialog = await WebviewWindow.getByLabel("member");
if (!memberDialog) {
memberDialog = new WebviewWindow("member", {
title: "成员列表",
width: 470,
height: 380,
parent: appWindow,
closable: true,
resizable: true,
decorations: true,
maximizable: false,
minimizable: false,
x: logicalPosition.x,
y: logicalPosition.y,
url: "#/member"
});
unlistenMemberCreated = await memberDialog.once("tauri://webview-created", async () => {
if (memberDialog) {
data.logVisible = true;
await memberDialog.show();
}
});
unListenMemberClose = await memberDialog.onCloseRequested(() => {
data.logVisible = false;
unListenMemberClose && unListenMemberClose();
});
} else {
const visible = await memberDialog.isVisible();
if (visible) {
data.memberVisible = false;
await memberDialog.close();
unlistenMemberCreated && unlistenMemberCreated();
}
await etWindows(
"member",
{
title: "成员列表",
width: 470,
height: 380,
url: "#/member",
},
() => {
data.memberVisible = true;
},
() => {
data.memberVisible = false;
}
}
);
};
let unListenlogClose: UnlistenFn | null = null;
let unlistenLogCreated: UnlistenFn | null = null;
const handleShowLogDialog = async () => {
logsTimer && clearInterval(logsTimer);
const appWindow = getCurrentWindow();
if (appWindow) {
const appSize = await appWindow.outerSize();
const factor = await appWindow.scaleFactor();
const appPosition = await appWindow.outerPosition();
const logicalPosition = new PhysicalPosition(appPosition.x + appSize.width, appPosition.y).toLogical(factor);
let infoDialog = await WebviewWindow.getByLabel("log");
if (!infoDialog) {
infoDialog = new WebviewWindow("log", {
title: "日志",
width: 600,
height: 380,
parent: appWindow,
closable: true,
resizable: false,
decorations: true,
maximizable: false,
minimizable: false,
x: logicalPosition.x,
y: logicalPosition.y,
url: "#/log"
});
unlistenLogCreated = await infoDialog.once("tauri://webview-created", async () => {
if (infoDialog) {
data.logVisible = true;
logsTimer = setInterval(() => {
appWindow.emitTo("log", "logs", data.log);
}, 3000);
await infoDialog.show();
}
});
unListenlogClose = await infoDialog.onCloseRequested(() => {
data.logVisible = false;
unListenlogClose && unListenlogClose();
});
} else {
const visible = await infoDialog.isVisible();
if (visible) {
data.logVisible = false;
await infoDialog.close();
unlistenLogCreated && unlistenLogCreated();
}
await etWindows(
"log",
{
title: "联机日志",
width: 600,
height: 380,
resizable: false,
url: "#/log",
},
(_, appWindow) => {
data.logVisible = true;
logsTimer && clearInterval(logsTimer);
logsTimer = setInterval(() => {
appWindow.emitTo("log", "logs", data.log);
}, 600);
},
() => {
data.logVisible = false;
}
}
);
};
const handleShowCidrDialog = async () => {
await etWindows(
"cidr",
{
title: "子网代理",
width: 600,
height: 380,
resizable: false,
url: "#/cidr",
},
(_, appWindow) => {
data.cidrVisible = true;
},
() => {
data.cidrVisible = false;
}
);
};
const handleShowAdvanceDialog = async () => {
await etWindows(
"advance",
{
title: "高级选项",
width: 600,
height: 380,
resizable: false,
url: "#/advance",
},
(_, appWindow) => {
data.advanceVisible = true;
},
() => {
data.advanceVisible = false;
}
);
};
</script>
+2 -2
View File
@@ -1,11 +1,11 @@
<template>
<ElInput
type="textarea"
rows="17"
:rows="17"
v-model="data.log"
resize="none"
readonly
placeholder="等待日志中..."
placeholder="等待日志中,请先'启动联机'..."
/>
</template>
<script setup lang="ts">
+11 -128
View File
@@ -33,6 +33,7 @@
<script setup lang="ts">
import { invoke } from "@tauri-apps/api/core";
import { reactive, onMounted, onBeforeUnmount } from "vue";
import { parsePeerInfo } from "@/utils";
const data = reactive<{ member: any[] }>({
member: []
});
@@ -45,137 +46,19 @@
["loss_rate", "丢包率"],
["version", "版本"]
];
const headers = [
"ipv4",
"hostname",
"cost",
"lat_ms",
"loss_rate",
"rx_bytes",
"rx_unit",
"tx_bytes",
"tx_unit",
"tunnel_proto",
"nat_type",
"id",
"version"
];
const formatData = (data: any[]) => {
if (!data) return [];
const result = [];
let obj: any = {};
let length = data.length;
for (let idx = 0; idx < length; idx++) {
let headersIdx = idx % headers.length;
if (headersIdx === 0) {
console.log(idx, [...data]);
obj = {};
result.push(obj);
}
if (["ipv4"].includes(headers[headersIdx]) && !/\d+\.\d+\.\d+\.\d\/\d+/.test(data[idx]) && data[idx]) {
const next = data[idx];
data[idx] = "-";
const head = data.slice(0, idx);
const latest = data.slice(idx);
data = [...head, next, ...latest];
length = data.length;
} else if (["rx_bytes", "tx_bytes"].includes(headers[headersIdx]) && data[idx] == "-") {
const head = data.slice(0, idx);
const latest = data.slice(idx);
data = [...head, "-", ...latest];
length = data.length;
} else if (
["tunnel_proto"].includes(headers[headersIdx]) &&
![
"tcp",
"udp",
"ws",
"wss",
"wg",
"-",
"tcp,udp",
"ws,wss",
"tcp,udp,ws,wss,wg",
"tcp,ws,wss,wg",
"udp,ws,wss,wg",
"tcp,wg",
"udp,wg",
"tcp,ws",
"tcp,wss",
"udp,ws",
"udp,wss",
"tcp,udp,ws",
"tcp,udp,wss",
"tcp,udp,ws,wss",
"tcp,udp,ws,wss,wg",
"tcp,udp,wg",
"tcp,udp,ws,wg",
"udp,tcp",
"udp,tcp,ws",
"udp,tcp,wss",
"udp,tcp,ws,wss",
"udp,tcp,ws,wss,wg",
"udp,tcp,wg",
"udp,tcp,ws,wg",
"tcp,udp,wss,wg",
"tcp,udp,ws,wg",
"tcp,udp,wss,wg",
"ws,tcp",
"ws,udp",
"ws,tcp,udp",
"ws,tcp,udp,ws",
"ws,tcp,udp,wss",
"ws,tcp,udp,ws,wss",
"ws,tcp,udp,ws,wss,wg",
"ws,tcp,udp,wg",
"ws,tcp,udp,ws,wg",
"ws,udp,tcp",
"ws,udp,tcp,ws",
"ws,udp,tcp,wss",
"ws,udp,tcp,ws,wss",
"wss,tcp",
"wss,udp",
"wss,tcp,udp",
"wss,tcp,udp,ws",
"wss,tcp,udp,wss",
"wss,tcp,udp,ws,wss",
"wss,tcp,udp,ws,wss,wg",
"wss,tcp,udp,wg",
"wg,tcp",
"wg,udp",
"wg,tcp,udp",
"wg,tcp,udp,ws",
"wg,tcp,udp,wss",
"wg,tcp,udp,ws,wss",
"wg,tcp,udp,ws,wss,wg",
"wg,tcp,udp,wg",
"wg,udp,tcp"
].includes(data[idx])
) {
const head = data.slice(0, idx);
const latest = data.slice(idx);
data = [...head, "-", ...latest];
length = data.length;
}
obj[headers[headersIdx]] = data[idx];
}
return result;
};
const listenOutput = async () => {
const member = await invoke("get_members_by_cli");
let memberData = ((member as string) || "")
.replace(/[\│\├\┌\└\─\┬\┴\┼\┤\┐\┘]+/g, "")
.split(" ")
.filter(el => el && !["\n", "\n\n"].includes(el))
.slice(11);
if (memberData.length <= 0) {
return;
}
const result = formatData(memberData);
data.member = result;
console.log({ member: data.member });
const peerInfo = parsePeerInfo(member as string);
peerInfo.forEach(value => {
if (value.cost === "Local") {
value.cost = "本机";
}
if (value.ipv4 && value.ipv4.includes("/")) {
value.ipv4 = value.ipv4.split("/")[0];
}
});
data.member = peerInfo;
};
let timer: NodeJS.Timeout | null = null;
+9 -430
View File
@@ -17,7 +17,7 @@ importers:
version: 2.3.1(vue@3.4.24(typescript@5.4.5))
'@element-plus/nuxt':
specifier: ^1.0.9
version: 1.0.9(@element-plus/icons-vue@2.3.1(vue@3.4.24(typescript@5.4.5)))(element-plus@2.7.1(vue@3.4.24(typescript@5.4.5)))(rollup@4.16.3)
version: 1.0.9(@element-plus/icons-vue@2.3.1(vue@3.4.24(typescript@5.4.5)))(element-plus@2.8.6(vue@3.4.24(typescript@5.4.5)))(rollup@4.16.3)
'@nuxtjs/tailwindcss':
specifier: ^6.12.0
version: 6.12.0(rollup@4.16.3)
@@ -61,11 +61,8 @@ importers:
specifier: ^6.1.4
version: 6.1.4
element-plus:
specifier: ^2.7.1
version: 2.7.1(vue@3.4.24(typescript@5.4.5))
javascript-obfuscator:
specifier: ^4.1.0
version: 4.1.0
specifier: ^2.8.6
version: 2.8.6(vue@3.4.24(typescript@5.4.5))
less:
specifier: ^4.2.0
version: 4.2.0
@@ -490,14 +487,6 @@ packages:
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
'@javascript-obfuscator/escodegen@2.3.0':
resolution: {integrity: sha512-QVXwMIKqYMl3KwtTirYIA6gOCiJ0ZDtptXqAv/8KWLG9uQU2fZqTVy7a/A5RvcoZhbDoFfveTxuGxJ5ibzQtkw==}
engines: {node: '>=6.0'}
'@javascript-obfuscator/estraverse@5.4.0':
resolution: {integrity: sha512-CZFX7UZVN9VopGbjTx4UXaXsi9ewoM1buL0kY7j1ftYdSs7p2spv9opxFjHlQ/QGTgh4UqufYqJJ0WKLml7b6w==}
engines: {node: '>=4.0'}
'@jridgewell/gen-mapping@0.3.5':
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'}
@@ -522,6 +511,7 @@ packages:
'@koa/router@12.0.1':
resolution: {integrity: sha512-ribfPYfHb+Uw3b27Eiw6NPqjhIhTpVFzEWLwyc/1Xp+DCdwRRyIlAUODX+9bPARF6aQtUu1+/PHzdNvRzcs/+Q==}
engines: {node: '>= 12'}
deprecated: Use v12.0.2 or higher to fix the vulnerability issue
'@kwsites/file-exists@1.1.1':
resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==}
@@ -1053,9 +1043,6 @@ packages:
'@types/lodash@4.17.0':
resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==}
'@types/minimatch@3.0.5':
resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==}
'@types/node@20.12.7':
resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==}
@@ -1065,9 +1052,6 @@ packages:
'@types/resolve@1.20.2':
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
'@types/validator@13.11.10':
resolution: {integrity: sha512-e2PNXoXLr6Z+dbfx5zSh9TRlXJrELycxiaXznp4S5+D2M3b9bqJEitNHA5923jhnB2zzFiZHa2f0SI1HoIahpg==}
'@types/web-bluetooth@0.0.16':
resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
@@ -1379,11 +1363,6 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
acorn@8.8.2:
resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
engines: {node: '>=0.4.0'}
hasBin: true
adler-32@1.3.1:
resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==}
engines: {node: '>=0.8'}
@@ -1457,21 +1436,6 @@ packages:
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
array-differ@3.0.0:
resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==}
engines: {node: '>=8'}
array-union@2.1.0:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
arrify@2.0.1:
resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==}
engines: {node: '>=8'}
assert@2.0.0:
resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==}
ast-kit@0.12.1:
resolution: {integrity: sha512-O+33g7x6irsESUcd47KdfWUrS2F6aGp9KeVJFGj0YjIznfXpBxVGjA0w+y/1OKqX4mFOfmZ9Xpf1ixPT4n9xxw==}
engines: {node: '>=16.14.0'}
@@ -1507,10 +1471,6 @@ packages:
peerDependencies:
postcss: ^8.1.0
available-typed-arrays@1.0.7:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
b4a@1.6.6:
resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==}
@@ -1624,16 +1584,6 @@ packages:
resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
chance@1.1.9:
resolution: {integrity: sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ==}
char-regex@1.0.2:
resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
engines: {node: '>=10'}
charenc@0.0.2:
resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==}
chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
@@ -1649,9 +1599,6 @@ packages:
citty@0.1.6:
resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
class-validator@0.14.0:
resolution: {integrity: sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==}
clean-stack@2.2.0:
resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
engines: {node: '>=6'}
@@ -1705,10 +1652,6 @@ packages:
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
commander@10.0.0:
resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==}
engines: {node: '>=14'}
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
@@ -1807,9 +1750,6 @@ packages:
uWebSockets.js:
optional: true
crypt@0.0.2:
resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==}
css-declaration-sorter@7.2.0:
resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==}
engines: {node: ^14 || ^16 || >=18}
@@ -1906,9 +1846,6 @@ packages:
deep-equal@1.0.1:
resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==}
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
deepmerge@4.3.1:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
@@ -1933,10 +1870,6 @@ packages:
resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
engines: {node: '>=12'}
define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
defu@6.1.4:
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
@@ -2020,8 +1953,8 @@ packages:
electron-to-chromium@1.4.722:
resolution: {integrity: sha512-5nLE0TWFFpZ80Crhtp4pIp8LXCztjYX41yUcV6b+bKR2PqzjskTMOOlBi1VjBHlvHwS+4gar7kNKOrsbsewEZQ==}
element-plus@2.7.1:
resolution: {integrity: sha512-yk/vXFwJp0flMrd2kfcR0XlumhwtPjB19HJvwcf0n3DvRE7UK8LeSK14LVghSzk0TzPsFFElweMnZEEv7+MYuQ==}
element-plus@2.8.6:
resolution: {integrity: sha512-fk5jB8V3efM02/4roZ5SWOLArgaYXbxEydZLlXSr+KPAwjNyHBlk2+HO5em8YKo5+RLBoHnn6BaThj6IE4nXoQ==}
peerDependencies:
vue: ^3.2.0
@@ -2068,9 +2001,6 @@ packages:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
es6-object-assign@1.1.0:
resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==}
esbuild@0.20.2:
resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==}
engines: {node: '>=12'}
@@ -2091,37 +2021,12 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
eslint-scope@7.1.1:
resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
eslint-visitor-keys@3.3.0:
resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
hasBin: true
esrecurse@4.3.0:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'}
estraverse@5.3.0:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
etag@1.8.1:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'}
@@ -2152,9 +2057,6 @@ packages:
externality@1.0.2:
resolution: {integrity: sha512-LyExtJWKxtgVzmgtEHyQtLFpw1KFhQphF9nTG8TpAIVkiI/xQ3FJh75tRFLYl4hkn7BNIIdLJInuDAavX35pMw==}
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
fast-fifo@1.3.2:
resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
@@ -2162,9 +2064,6 @@ packages:
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
engines: {node: '>=8.6.0'}
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
fastq@1.17.1:
resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
@@ -2198,9 +2097,6 @@ packages:
focus-trap@7.5.4:
resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==}
for-each@0.3.3:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
foreground-child@3.1.1:
resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
engines: {node: '>=14'}
@@ -2481,9 +2377,6 @@ packages:
resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
inversify@6.0.1:
resolution: {integrity: sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==}
ioredis@5.4.1:
resolution: {integrity: sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==}
engines: {node: '>=12.22.0'}
@@ -2495,25 +2388,14 @@ packages:
iron-webcrypto@1.1.0:
resolution: {integrity: sha512-5vgYsCakNlaQub1orZK5QmNYhwYtcllTkZBp5sfIaCqY93Cf6l+v2rtE+E4TMbcfjxDMCdrO8wmp7+ZvhDECLA==}
is-arguments@1.1.1:
resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
engines: {node: '>= 0.4'}
is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
is-buffer@1.1.6:
resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
is-builtin-module@3.2.1:
resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
engines: {node: '>=6'}
is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
is-core-module@2.13.1:
resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
@@ -2558,10 +2440,6 @@ packages:
is-module@1.0.0:
resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
is-nan@1.3.2:
resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
engines: {node: '>= 0.4'}
is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
@@ -2588,10 +2466,6 @@ packages:
resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
is-typed-array@1.1.13:
resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
engines: {node: '>= 0.4'}
is-what@3.14.1:
resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==}
@@ -2621,19 +2495,10 @@ packages:
resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
engines: {node: '>=14'}
javascript-obfuscator@4.1.0:
resolution: {integrity: sha512-ckC0VFKQ0/sFtLH9apW/ZLfsP8LuZqZhVEM4VTJ5KLzyLaodW6C1lTU8808eboDmddKyvd2uyRx5bzc0Me0GYg==}
engines: {node: ^12.22.0 || ^14.0.0 || ^16.0.0 || ^17.0.0 || >=18.0.0}
hasBin: true
jiti@1.21.0:
resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
hasBin: true
js-string-escape@1.0.1:
resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==}
engines: {node: '>= 0.8'}
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -2720,13 +2585,6 @@ packages:
engines: {node: '>=6'}
hasBin: true
levn@0.3.0:
resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==}
engines: {node: '>= 0.8.0'}
libphonenumber-js@1.11.1:
resolution: {integrity: sha512-Wze1LPwcnzvcKGcRHFGFECTaLzxOtujwpf924difr5zniyYv1C2PiW0419qDR7m8lKDxsImu5mwxFuXhXpjmvw==}
lilconfig@2.1.0:
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
engines: {node: '>=10'}
@@ -2816,9 +2674,6 @@ packages:
resolution: {integrity: sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==}
engines: {node: ^16.14.0 || >=18.0.0}
md5@2.3.0:
resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==}
mdn-data@2.0.28:
resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
@@ -2946,11 +2801,6 @@ packages:
engines: {node: '>=10'}
hasBin: true
mkdirp@2.1.3:
resolution: {integrity: sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==}
engines: {node: '>=10'}
hasBin: true
mlly@1.6.1:
resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==}
@@ -2971,10 +2821,6 @@ packages:
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
multimatch@5.0.0:
resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==}
engines: {node: '>=10'}
mz@2.7.0:
resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
@@ -3141,14 +2987,6 @@ packages:
object-inspect@1.13.1:
resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
object-is@1.1.6:
resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==}
engines: {node: '>= 0.4'}
object-keys@1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
ofetch@1.3.4:
resolution: {integrity: sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==}
@@ -3189,14 +3027,6 @@ packages:
resolution: {integrity: sha512-ZD6dgSZi0u1QCP55g8/2yS5hNJfIpgqsSGHLxxdOjvY7eIrXzj271FJEQw33VwsZ6RCtO/NOuhxa7GBWmEudyA==}
hasBin: true
opencollective-postinstall@2.0.3:
resolution: {integrity: sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==}
hasBin: true
optionator@0.8.3:
resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==}
engines: {node: '>= 0.8.0'}
p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
@@ -3314,10 +3144,6 @@ packages:
resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==}
engines: {node: '>= 0.12.0'}
possible-typed-array-names@1.0.0:
resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
engines: {node: '>= 0.4'}
postcss-calc@9.0.1:
resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==}
engines: {node: ^14 || ^16 || >=18.0}
@@ -3527,10 +3353,6 @@ packages:
resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
engines: {node: ^10 || ^12 || >=14}
prelude-ls@1.1.2:
resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
engines: {node: '>= 0.8.0'}
pretty-bytes@6.1.1:
resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==}
engines: {node: ^14.13.1 || >=16.0.0}
@@ -3629,9 +3451,6 @@ packages:
resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==}
engines: {node: '>=4'}
reflect-metadata@0.1.13:
resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==}
replace-in-file@6.3.5:
resolution: {integrity: sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg==}
engines: {node: '>=10'}
@@ -3870,9 +3689,6 @@ packages:
streamx@2.16.1:
resolution: {integrity: sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==}
string-template@1.0.0:
resolution: {integrity: sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==}
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -3887,9 +3703,6 @@ packages:
string_decoder@1.3.0:
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
stringz@2.1.0:
resolution: {integrity: sha512-KlywLT+MZ+v0IRepfMxRtnSvDCMc3nR1qqCs3m/qIbSOWkNZYT8XHQA31rS3TnKp0c5xjZu3M4GY/2aRKSi/6A==}
strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
@@ -4020,9 +3833,6 @@ packages:
ts-interface-checker@0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
tslib@2.5.0:
resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
tslib@2.6.2:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
@@ -4034,10 +3844,6 @@ packages:
resolution: {integrity: sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg==}
engines: {node: ^16.14.0 || >=18.0.0}
type-check@0.3.2:
resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==}
engines: {node: '>= 0.8.0'}
type-fest@0.21.3:
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
engines: {node: '>=10'}
@@ -4196,9 +4002,6 @@ packages:
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
util@0.12.5:
resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
validate-npm-package-license@3.0.4:
resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
@@ -4206,10 +4009,6 @@ packages:
resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
validator@13.12.0:
resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==}
engines: {node: '>= 0.10'}
vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
@@ -4383,10 +4182,6 @@ packages:
whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
which-typed-array@1.1.15:
resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
engines: {node: '>= 0.4'}
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
@@ -4409,10 +4204,6 @@ packages:
resolution: {integrity: sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==}
engines: {node: '>=0.8'}
word-wrap@1.2.5:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
word@0.3.0:
resolution: {integrity: sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==}
engines: {node: '>=0.8'}
@@ -4743,11 +4534,11 @@ snapshots:
dependencies:
vue: 3.4.24(typescript@5.4.5)
'@element-plus/nuxt@1.0.9(@element-plus/icons-vue@2.3.1(vue@3.4.24(typescript@5.4.5)))(element-plus@2.7.1(vue@3.4.24(typescript@5.4.5)))(rollup@4.16.3)':
'@element-plus/nuxt@1.0.9(@element-plus/icons-vue@2.3.1(vue@3.4.24(typescript@5.4.5)))(element-plus@2.8.6(vue@3.4.24(typescript@5.4.5)))(rollup@4.16.3)':
dependencies:
'@element-plus/icons-vue': 2.3.1(vue@3.4.24(typescript@5.4.5))
'@nuxt/kit': 3.11.2(rollup@4.16.3)
element-plus: 2.7.1(vue@3.4.24(typescript@5.4.5))
element-plus: 2.8.6(vue@3.4.24(typescript@5.4.5))
magic-string: 0.27.0
unplugin: 1.10.1
transitivePeerDependencies:
@@ -4865,17 +4656,6 @@ snapshots:
wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0
'@javascript-obfuscator/escodegen@2.3.0':
dependencies:
'@javascript-obfuscator/estraverse': 5.4.0
esprima: 4.0.1
esutils: 2.0.3
optionator: 0.8.3
optionalDependencies:
source-map: 0.6.1
'@javascript-obfuscator/estraverse@5.4.0': {}
'@jridgewell/gen-mapping@0.3.5':
dependencies:
'@jridgewell/set-array': 1.2.1
@@ -5617,8 +5397,6 @@ snapshots:
'@types/lodash@4.17.0': {}
'@types/minimatch@3.0.5': {}
'@types/node@20.12.7':
dependencies:
undici-types: 5.26.5
@@ -5627,8 +5405,6 @@ snapshots:
'@types/resolve@1.20.2': {}
'@types/validator@13.11.10': {}
'@types/web-bluetooth@0.0.16': {}
'@types/web-bluetooth@0.0.20': {}
@@ -6131,8 +5907,6 @@ snapshots:
acorn@8.11.3: {}
acorn@8.8.2: {}
adler-32@1.3.1: {}
agent-base@6.0.2:
@@ -6210,19 +5984,6 @@ snapshots:
argparse@2.0.1: {}
array-differ@3.0.0: {}
array-union@2.1.0: {}
arrify@2.0.1: {}
assert@2.0.0:
dependencies:
es6-object-assign: 1.1.0
is-nan: 1.3.2
object-is: 1.1.6
util: 0.12.5
ast-kit@0.12.1:
dependencies:
'@babel/parser': 7.24.4
@@ -6265,10 +6026,6 @@ snapshots:
postcss: 8.4.38
postcss-value-parser: 4.2.0
available-typed-arrays@1.0.7:
dependencies:
possible-typed-array-names: 1.0.0
b4a@1.6.6: {}
balanced-match@1.0.2: {}
@@ -6405,12 +6162,6 @@ snapshots:
chalk@5.3.0: {}
chance@1.1.9: {}
char-regex@1.0.2: {}
charenc@0.0.2: {}
chokidar@3.6.0:
dependencies:
anymatch: 3.1.3
@@ -6431,12 +6182,6 @@ snapshots:
dependencies:
consola: 3.2.3
class-validator@0.14.0:
dependencies:
'@types/validator': 13.11.10
libphonenumber-js: 1.11.1
validator: 13.12.0
clean-stack@2.2.0: {}
clear@0.1.0: {}
@@ -6483,8 +6228,6 @@ snapshots:
colorette@2.0.20: {}
commander@10.0.0: {}
commander@2.20.3: {}
commander@4.1.1: {}
@@ -6557,8 +6300,6 @@ snapshots:
crossws@0.2.4: {}
crypt@0.0.2: {}
css-declaration-sorter@7.2.0(postcss@8.4.38):
dependencies:
postcss: 8.4.38
@@ -6653,8 +6394,6 @@ snapshots:
deep-equal@1.0.1: {}
deep-is@0.1.4: {}
deepmerge@4.3.1: {}
default-browser-id@5.0.0: {}
@@ -6674,12 +6413,6 @@ snapshots:
define-lazy-prop@3.0.0: {}
define-properties@1.2.1:
dependencies:
define-data-property: 1.1.4
has-property-descriptors: 1.0.2
object-keys: 1.1.1
defu@6.1.4: {}
delegate@3.2.0: {}
@@ -6740,7 +6473,7 @@ snapshots:
electron-to-chromium@1.4.722: {}
element-plus@2.7.1(vue@3.4.24(typescript@5.4.5)):
element-plus@2.8.6(vue@3.4.24(typescript@5.4.5)):
dependencies:
'@ctrl/tinycolor': 3.6.1
'@element-plus/icons-vue': 2.3.1(vue@3.4.24(typescript@5.4.5))
@@ -6796,8 +6529,6 @@ snapshots:
es-errors@1.3.0: {}
es6-object-assign@1.1.0: {}
esbuild@0.20.2:
optionalDependencies:
'@esbuild/aix-ppc64': 0.20.2
@@ -6832,29 +6563,12 @@ snapshots:
escape-string-regexp@5.0.0: {}
eslint-scope@7.1.1:
dependencies:
esrecurse: 4.3.0
estraverse: 5.3.0
eslint-visitor-keys@3.3.0: {}
esprima@4.0.1: {}
esrecurse@4.3.0:
dependencies:
estraverse: 5.3.0
estraverse@5.3.0: {}
estree-walker@2.0.2: {}
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.5
esutils@2.0.3: {}
etag@1.8.1: {}
event-target-shim@5.0.1: {}
@@ -6906,8 +6620,6 @@ snapshots:
pathe: 1.1.2
ufo: 1.5.3
fast-deep-equal@3.1.3: {}
fast-fifo@1.3.2: {}
fast-glob@3.3.2:
@@ -6918,8 +6630,6 @@ snapshots:
merge2: 1.4.1
micromatch: 4.0.5
fast-levenshtein@2.0.6: {}
fastq@1.17.1:
dependencies:
reusify: 1.0.4
@@ -6951,10 +6661,6 @@ snapshots:
dependencies:
tabbable: 6.2.0
for-each@0.3.3:
dependencies:
is-callable: 1.2.7
foreground-child@3.1.1:
dependencies:
cross-spawn: 7.0.3
@@ -7255,8 +6961,6 @@ snapshots:
ini@4.1.1: {}
inversify@6.0.1: {}
ioredis@5.4.1:
dependencies:
'@ioredis/commands': 1.2.0
@@ -7278,23 +6982,14 @@ snapshots:
iron-webcrypto@1.1.0: {}
is-arguments@1.1.1:
dependencies:
call-bind: 1.0.7
has-tostringtag: 1.0.2
is-binary-path@2.1.0:
dependencies:
binary-extensions: 2.3.0
is-buffer@1.1.6: {}
is-builtin-module@3.2.1:
dependencies:
builtin-modules: 3.3.0
is-callable@1.2.7: {}
is-core-module@2.13.1:
dependencies:
hasown: 2.0.2
@@ -7328,11 +7023,6 @@ snapshots:
is-module@1.0.0: {}
is-nan@1.3.2:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
is-number@7.0.0: {}
is-path-inside@4.0.0: {}
@@ -7351,10 +7041,6 @@ snapshots:
is-stream@3.0.0: {}
is-typed-array@1.1.13:
dependencies:
which-typed-array: 1.1.15
is-what@3.14.1: {}
is-wsl@2.2.0:
@@ -7381,36 +7067,8 @@ snapshots:
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
javascript-obfuscator@4.1.0:
dependencies:
'@javascript-obfuscator/escodegen': 2.3.0
'@javascript-obfuscator/estraverse': 5.4.0
acorn: 8.8.2
assert: 2.0.0
chalk: 4.1.2
chance: 1.1.9
class-validator: 0.14.0
commander: 10.0.0
eslint-scope: 7.1.1
eslint-visitor-keys: 3.3.0
fast-deep-equal: 3.1.3
inversify: 6.0.1
js-string-escape: 1.0.1
md5: 2.3.0
mkdirp: 2.1.3
multimatch: 5.0.0
opencollective-postinstall: 2.0.3
process: 0.11.10
reflect-metadata: 0.1.13
source-map-support: 0.5.21
string-template: 1.0.0
stringz: 2.1.0
tslib: 2.5.0
jiti@1.21.0: {}
js-string-escape@1.0.1: {}
js-tokens@4.0.0: {}
js-tokens@9.0.0: {}
@@ -7522,13 +7180,6 @@ snapshots:
needle: 3.3.1
source-map: 0.6.1
levn@0.3.0:
dependencies:
prelude-ls: 1.1.2
type-check: 0.3.2
libphonenumber-js@1.11.1: {}
lilconfig@2.1.0: {}
lilconfig@3.1.1: {}
@@ -7641,12 +7292,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
md5@2.3.0:
dependencies:
charenc: 0.0.2
crypt: 0.0.2
is-buffer: 1.1.6
mdn-data@2.0.28: {}
mdn-data@2.0.30: {}
@@ -7748,8 +7393,6 @@ snapshots:
mkdirp@1.0.4: {}
mkdirp@2.1.3: {}
mlly@1.6.1:
dependencies:
acorn: 8.11.3
@@ -7767,14 +7410,6 @@ snapshots:
ms@2.1.3: {}
multimatch@5.0.0:
dependencies:
'@types/minimatch': 3.0.5
array-differ: 3.0.0
array-union: 2.1.0
arrify: 2.0.1
minimatch: 3.1.2
mz@2.7.0:
dependencies:
any-promise: 1.3.0
@@ -8127,13 +7762,6 @@ snapshots:
object-inspect@1.13.1: {}
object-is@1.1.6:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
object-keys@1.1.1: {}
ofetch@1.3.4:
dependencies:
destr: 2.0.3
@@ -8187,17 +7815,6 @@ snapshots:
undici: 5.28.4
yargs-parser: 21.1.1
opencollective-postinstall@2.0.3: {}
optionator@0.8.3:
dependencies:
deep-is: 0.1.4
fast-levenshtein: 2.0.6
levn: 0.3.0
prelude-ls: 1.1.2
type-check: 0.3.2
word-wrap: 1.2.5
p-limit@3.1.0:
dependencies:
yocto-queue: 0.1.0
@@ -8317,8 +7934,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
possible-typed-array-names@1.0.0: {}
postcss-calc@9.0.1(postcss@8.4.38):
dependencies:
postcss: 8.4.38
@@ -8510,8 +8125,6 @@ snapshots:
picocolors: 1.0.0
source-map-js: 1.2.0
prelude-ls@1.1.2: {}
pretty-bytes@6.1.1: {}
proc-log@3.0.0: {}
@@ -8613,8 +8226,6 @@ snapshots:
dependencies:
redis-errors: 1.2.0
reflect-metadata@0.1.13: {}
replace-in-file@6.3.5:
dependencies:
chalk: 4.1.2
@@ -8877,8 +8488,6 @@ snapshots:
optionalDependencies:
bare-events: 2.2.2
string-template@1.0.0: {}
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
@@ -8899,10 +8508,6 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
stringz@2.1.0:
dependencies:
char-regex: 1.0.2
strip-ansi@6.0.1:
dependencies:
ansi-regex: 5.0.1
@@ -9060,8 +8665,6 @@ snapshots:
ts-interface-checker@0.1.13: {}
tslib@2.5.0: {}
tslib@2.6.2: {}
tsscmp@1.0.6: {}
@@ -9074,10 +8677,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
type-check@0.3.2:
dependencies:
prelude-ls: 1.1.2
type-fest@0.21.3: {}
type-fest@3.13.1: {}
@@ -9272,14 +8871,6 @@ snapshots:
util-deprecate@1.0.2: {}
util@0.12.5:
dependencies:
inherits: 2.0.4
is-arguments: 1.1.1
is-generator-function: 1.0.10
is-typed-array: 1.1.13
which-typed-array: 1.1.15
validate-npm-package-license@3.0.4:
dependencies:
spdx-correct: 3.2.0
@@ -9289,8 +8880,6 @@ snapshots:
dependencies:
builtins: 5.0.1
validator@13.12.0: {}
vary@1.1.2: {}
vite-hot-client@0.2.3(vite@5.2.10(@types/node@20.12.7)(less@4.2.0)(terser@5.30.4)):
@@ -9457,14 +9046,6 @@ snapshots:
tr46: 0.0.3
webidl-conversions: 3.0.1
which-typed-array@1.1.15:
dependencies:
available-typed-arrays: 1.0.7
call-bind: 1.0.7
for-each: 0.3.3
gopd: 1.0.1
has-tostringtag: 1.0.2
which@2.0.2:
dependencies:
isexe: 2.0.0
@@ -9483,8 +9064,6 @@ snapshots:
wmf@1.0.2: {}
word-wrap@1.2.5: {}
word@0.3.0: {}
wrap-ansi@7.0.0:
+1 -3
View File
@@ -1,6 +1,4 @@
# Generated by Cargo
# will have compiled files and executables
/target/
/gen/schemas
/easytier-windows-x86_64-v2.0.3.zip
/easytier-windows-x86_64/
/gen/schemas
+180 -39
View File
@@ -422,9 +422,9 @@ dependencies = [
[[package]]
name = "brotli"
version = "6.0.0"
version = "7.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b"
checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
@@ -1109,9 +1109,10 @@ checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125"
[[package]]
name = "easytier-game"
version = "1.0.6"
version = "1.0.8"
dependencies = [
"log",
"planif",
"reqwest",
"serde",
"serde_json",
@@ -2164,7 +2165,19 @@ version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b1fb8864823fad91877e6caea0baca82e49e8db50f8e5c9f9a453e27d3330fc"
dependencies = [
"jsonptr",
"jsonptr 0.4.7",
"serde",
"serde_json",
"thiserror",
]
[[package]]
name = "json-patch"
version = "3.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08"
dependencies = [
"jsonptr 0.6.3",
"serde",
"serde_json",
"thiserror",
@@ -2181,6 +2194,16 @@ dependencies = [
"serde_json",
]
[[package]]
name = "jsonptr"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70"
dependencies = [
"serde",
"serde_json",
]
[[package]]
name = "keyboard-types"
version = "0.7.0"
@@ -2532,7 +2555,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
dependencies = [
"malloc_buf",
"objc_exception",
]
[[package]]
@@ -2540,6 +2562,9 @@ name = "objc-sys"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310"
dependencies = [
"cc",
]
[[package]]
name = "objc2"
@@ -2567,6 +2592,30 @@ dependencies = [
"objc2-quartz-core",
]
[[package]]
name = "objc2-cloud-kit"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009"
dependencies = [
"bitflags 2.6.0",
"block2",
"objc2",
"objc2-core-location",
"objc2-foundation",
]
[[package]]
name = "objc2-contacts"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889"
dependencies = [
"block2",
"objc2",
"objc2-foundation",
]
[[package]]
name = "objc2-core-data"
version = "0.2.2"
@@ -2591,6 +2640,18 @@ dependencies = [
"objc2-metal",
]
[[package]]
name = "objc2-core-location"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781"
dependencies = [
"block2",
"objc2",
"objc2-contacts",
"objc2-foundation",
]
[[package]]
name = "objc2-encode"
version = "4.0.3"
@@ -2609,6 +2670,18 @@ dependencies = [
"objc2",
]
[[package]]
name = "objc2-link-presentation"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398"
dependencies = [
"block2",
"objc2",
"objc2-app-kit",
"objc2-foundation",
]
[[package]]
name = "objc2-metal"
version = "0.2.2"
@@ -2635,21 +2708,71 @@ dependencies = [
]
[[package]]
name = "objc_exception"
version = "0.1.2"
name = "objc2-symbols"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc"
dependencies = [
"cc",
"objc2",
"objc2-foundation",
]
[[package]]
name = "objc_id"
version = "0.1.1"
name = "objc2-ui-kit"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f"
dependencies = [
"objc",
"bitflags 2.6.0",
"block2",
"objc2",
"objc2-cloud-kit",
"objc2-core-data",
"objc2-core-image",
"objc2-core-location",
"objc2-foundation",
"objc2-link-presentation",
"objc2-quartz-core",
"objc2-symbols",
"objc2-uniform-type-identifiers",
"objc2-user-notifications",
]
[[package]]
name = "objc2-uniform-type-identifiers"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe"
dependencies = [
"block2",
"objc2",
"objc2-foundation",
]
[[package]]
name = "objc2-user-notifications"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3"
dependencies = [
"bitflags 2.6.0",
"block2",
"objc2",
"objc2-core-location",
"objc2-foundation",
]
[[package]]
name = "objc2-web-kit"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68bc69301064cebefc6c4c90ce9cba69225239e4b8ff99d445a2b5563797da65"
dependencies = [
"bitflags 2.6.0",
"block2",
"objc2",
"objc2-app-kit",
"objc2-foundation",
]
[[package]]
@@ -2987,6 +3110,14 @@ version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
[[package]]
name = "planif"
version = "1.0.0"
source = "git+https://github.com/mattrobineau/planif?tag=1.0.1#90e228e2bc0f142b16a0ba415ec242e1c836cc35"
dependencies = [
"windows 0.48.0",
]
[[package]]
name = "plist"
version = "1.7.0"
@@ -4112,9 +4243,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
[[package]]
name = "tauri"
version = "2.0.2"
version = "2.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5920aad0804ea5e86808d4b6e8753d3bcbae7efc8f4e41a4da00b45427559868"
checksum = "d3889b392db6d32a105d3757230ea0220090b8f94c90d3e60b6c5eb91178ab1b"
dependencies = [
"anyhow",
"bytes",
@@ -4163,16 +4294,16 @@ dependencies = [
[[package]]
name = "tauri-build"
version = "2.0.1"
version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "935f9b3c49b22b3e2e485a57f46d61cd1ae07b1cbb2ba87387a387caf2d8c4e7"
checksum = "9f96827ccfb1aa40d55d0ded79562d18ba18566657a553f992a982d755148376"
dependencies = [
"anyhow",
"cargo_toml",
"dirs 5.0.1",
"glob",
"heck 0.5.0",
"json-patch",
"json-patch 3.0.1",
"schemars",
"semver",
"serde",
@@ -4185,14 +4316,14 @@ dependencies = [
[[package]]
name = "tauri-codegen"
version = "2.0.1"
version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95d7443dd4f0b597704b6a14b964ee2ed16e99928d8e6292ae9825f09fbcd30e"
checksum = "8947f16f47becd9e9cd39b74ee337fd1981574d78819be18e4384d85e5a0b82f"
dependencies = [
"base64 0.22.1",
"brotli",
"ico",
"json-patch",
"json-patch 2.0.0",
"plist",
"png",
"proc-macro2",
@@ -4212,9 +4343,9 @@ dependencies = [
[[package]]
name = "tauri-macros"
version = "2.0.1"
version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d2c0963ccfc3f5194415f2cce7acc975942a8797fbabfb0aa1ed6f59326ae7f"
checksum = "8bd1c8d4a66799d3438747c3a79705cd665a95d6f24cb5f315413ff7a981fe2a"
dependencies = [
"heck 0.5.0",
"proc-macro2",
@@ -4280,9 +4411,9 @@ dependencies = [
[[package]]
name = "tauri-plugin-shell"
version = "2.0.1"
version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "371fb9aca2823990a2d0db7970573be5fdf07881fcaa2b835b29631feb84aec1"
checksum = "0ad7880c5586b6b2104be451e3d7fc0f3800c84bda69e9ba81c828f87cb34267"
dependencies = [
"encoding_rs",
"log",
@@ -4316,9 +4447,9 @@ dependencies = [
[[package]]
name = "tauri-runtime"
version = "2.0.1"
version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af12ad1af974b274ef1d32a94e6eba27a312b429ef28fcb98abc710df7f9151d"
checksum = "a1ef7363e7229ac8d04e8a5d405670dbd43dde8fc4bc3bc56105c35452d03784"
dependencies = [
"dpi",
"gtk",
@@ -4335,9 +4466,9 @@ dependencies = [
[[package]]
name = "tauri-runtime-wry"
version = "2.0.1"
version = "2.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e45e88aa0b11b302d836e6ea3e507a6359044c4a8bc86b865ba99868c695753d"
checksum = "62fa2068e8498ad007b54d5773d03d57c3ff6dd96f8c8ce58beff44d0d5e0d30"
dependencies = [
"gtk",
"http",
@@ -4361,9 +4492,9 @@ dependencies = [
[[package]]
name = "tauri-utils"
version = "2.0.1"
version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c38b0230d6880cf6dd07b6d7dd7789a0869f98ac12146e0d18d1c1049215a045"
checksum = "1fc65d6f5c54e56b66258948a6d9e47a82ea41f4b5a7612bfbdd1634c2913ed0"
dependencies = [
"brotli",
"cargo_metadata",
@@ -4372,7 +4503,7 @@ dependencies = [
"glob",
"html5ever",
"infer",
"json-patch",
"json-patch 2.0.0",
"kuchikiki",
"log",
"memchr",
@@ -5108,6 +5239,15 @@ dependencies = [
"windows-version",
]
[[package]]
name = "windows"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
dependencies = [
"windows-targets 0.48.5",
]
[[package]]
name = "windows"
version = "0.57.0"
@@ -5498,14 +5638,12 @@ dependencies = [
[[package]]
name = "wry"
version = "0.44.1"
version = "0.46.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "440600584cfbd8b0d28eace95c1f2c253db05dae43780b79380aa1e868f04c73"
checksum = "6fa1c8c760041c64ce6be99f83d6cb55fe3fcd85a1ad46d32895f6e65cee87ba"
dependencies = [
"base64 0.22.1",
"block",
"cocoa",
"core-graphics",
"block2",
"crossbeam-channel",
"dpi",
"dunce",
@@ -5518,8 +5656,11 @@ dependencies = [
"kuchikiki",
"libc",
"ndk",
"objc",
"objc_id",
"objc2",
"objc2-app-kit",
"objc2-foundation",
"objc2-ui-kit",
"objc2-web-kit",
"once_cell",
"percent-encoding",
"raw-window-handle",
+9 -7
View File
@@ -1,6 +1,6 @@
[package]
name = "easytier-game"
version = "1.0.6"
version = "1.0.8"
homepage = "https://github.com/EasyTier/EasyTier"
repository = "https://github.com/EasyTier/EasytierGame"
description = "A simple network initiator based on Easytier"
@@ -12,31 +12,33 @@ rust-version = "1.77.2"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
name = "app_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
[build-dependencies]
tauri-build = { version = "2.0.1", features = [] }
tauri-build = { version = "2.0.2", features = [] }
# prost-build = "0.13.2"
[dependencies]
serde_json = "1.0"
serde = { version = "1.0", features = ["derive"] }
log = "0.4"
tauri = { version = "2.0.2", features = [
tauri = { version = "2.0.6", features = [
"tray-icon",
"image-png",
"image-ico",
] }
tauri-plugin-log = "2.0.0-rc"
tauri-plugin-shell = "2"
tauri-plugin-log = "2.0.1"
tauri-plugin-shell = "2.0.2"
reqwest = { version = "0.12", features = ["json"] }
zip = "2.2.0"
sysinfo = '0.32.0'
planif = { git = "https://github.com/mattrobineau/planif", tag = "1.0.1" }
# prost = "0.13"
# prost-types = "0.13"
[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies]
tauri-plugin-autostart = "2"
tauri-plugin-single-instance = "2"
tauri-plugin-autostart = "2.0.1"
tauri-plugin-single-instance = "2.0.1"
+4 -3
View File
@@ -2,7 +2,7 @@
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "default",
"description": "enables the default permissions",
"windows": ["main", "log"],
"windows": ["main", "log", "member", "cidr", "advance"],
"permissions": [
"core:default",
"core:window:allow-minimize",
@@ -20,6 +20,7 @@
"core:webview:allow-webview-show",
"core:webview:allow-webview-hide",
"core:webview:allow-webview-close",
"autostart:default",
"autostart:allow-enable",
"autostart:allow-disable",
"autostart:allow-is-enabled",
@@ -31,7 +32,7 @@
"allow": [
{
"args": ["run"],
"cmd": "WinIPBroadcast",
"cmd": "easytier/tool/WinIPBroadcast",
"name": "WinIPBroadcast"
}
]
@@ -41,7 +42,7 @@
"allow": [
{
"args": ["run"],
"cmd": "WinIPBroadcast",
"cmd": "easytier/tool/WinIPBroadcast",
"name": "WinIPBroadcast"
}
]
-11
View File
@@ -1,11 +0,0 @@
{
"identifier": "desktop-capability",
"platforms": [
"macOS",
"windows",
"linux"
],
"permissions": [
"autostart:default"
]
}
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
这里存放每次打包需要用到的最新版本的easytier 和 相关工具
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.
+21 -11
View File
@@ -52,7 +52,7 @@ pub async fn fetch_releases() -> Result<Vec<Release>, Error> {
#[tauri::command(rename_all = "snake_case")]
fn get_core_version() -> String {
match Command::new("easytier-core.exe")
match Command::new("easytier/easytier-core.exe")
.arg("--version")
.creation_flags(0x08000000)
.output()
@@ -67,7 +67,7 @@ fn get_core_version() -> String {
#[tauri::command(rename_all = "snake_case")]
fn get_cli_version() -> String {
match Command::new("easytier-cli.exe")
match Command::new("easytier/easytier-cli.exe")
.arg("--version")
.creation_flags(0x08000000)
.output()
@@ -114,7 +114,7 @@ struct MyResponse {
#[tauri::command(rename_all = "snake_case")]
fn get_members_by_cli() -> String {
match Command::new("easytier-cli.exe")
match Command::new("easytier/easytier-cli.exe")
.arg("peer")
.arg("list")
.creation_flags(0x08000000)
@@ -130,11 +130,17 @@ fn get_members_by_cli() -> String {
#[tauri::command(rename_all = "snake_case")]
async fn download_easytier_zip(download_url: String, file_name: String) {
let target = format!("https://ghp.ci/{}", download_url);
let target = format!("{}", download_url);
let response = reqwest::get(target)
.await
.expect("error to download easytier url");
let file_path = format!("./{}", file_name);
let file_path = format!("./easytier/{}", file_name);
let easytier_dir = path::Path::new("./easytier");
if !easytier_dir.exists() {
fs::create_dir_all(&easytier_dir).unwrap();
}
let path = path::Path::new(&file_path);
let mut file = match File::create(&path) {
@@ -183,7 +189,14 @@ fn unzip(fname: &path::Path) {
// fs::create_dir_all(p).unwrap();
// }
// }
let out_file_path = path::Path::new("./").join(outpath.file_name().clone().unwrap());
let easytier_dir = path::Path::new("./easytier");
// if !easytier_dir.exists() {
// fs::create_dir_all(&easytier_dir).unwrap();
// }
// let out_file_path = path::Path::new("./").join(outpath.file_name().clone().unwrap());
let out_file_path = easytier_dir.join(outpath.file_name().clone().unwrap());
println!("outFilePath: {}", out_file_path.display());
let mut outfile = fs::File::create(&out_file_path).unwrap();
std::io::copy(&mut file, &mut outfile).unwrap();
@@ -196,10 +209,7 @@ fn run_command(
args: Vec<String>,
stop_signal: tauri::State<Arc<AtomicBool>>,
) {
// if !path::Path::new("easytier-core.exe").exists() {
// app_handle.emit("command-output", "easytier-core.exe 不存在");
// return
// }
let (tx, rx) = mpsc::channel();
stop_signal.store(false, Ordering::Relaxed);
let app_handle1 = app_handle.clone();
@@ -208,7 +218,7 @@ fn run_command(
let stop_signal2 = Arc::clone(&stop_signal);
let args2 = args.clone();
thread::spawn(move || {
let mut child = Command::new("easytier-core.exe")
let mut child = Command::new("easytier/easytier-core.exe")
.args(args)
.creation_flags(0x08000000)
.stdout(Stdio::piped())
+14 -7
View File
@@ -1,7 +1,7 @@
{
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
"productName": "easytier-game",
"version": "1.0.6",
"version": "1.0.8",
"identifier": "com.tauri.easytier-game",
"build": {
@@ -15,12 +15,12 @@
{
"title": "easytier-game",
"width": 331,
"height": 285,
"height": 305,
"resizable": false,
"fullscreen": false,
"decorations": true,
"maximizable": false,
"center": true,
"maximizable": false,
"transparent": false
}
],
@@ -28,18 +28,25 @@
"csp": null
}
},
"plugins": {},
"bundle": {
"active": false,
"targets": "all",
"externalBin": ["WinIPBroadcast"],
"resources": ["icons/icon-inactive.ico", "icons/icon.ico"],
"resources": [
"easytier/tool/WinIPBroadcast.exe",
"easytier/icons/icon-inactive.ico",
"easytier/icons/icon.ico",
"easytier/easytier-cli.exe",
"easytier/easytier-core.exe",
"easytier/Packet.dll",
"easytier/wintun.dll"
],
"windows": {
"webviewInstallMode": {
"type": "embedBootstrapper"
}
},
"createUpdaterArtifacts": false,
"icon": ["icons/icon.png", "icons/icon.rgba", "icons/icon.icns", "icons/icon.ico", "icons/icon-inactive.ico"]
"icon": ["icons/icon.png", "icons/icon.rgba", "icons/icon.icns", "icons/icon.ico"]
}
}
+20
View File
@@ -9,18 +9,30 @@ export default defineStore("main", {
networkPassword: "",
hostname: "",
ipv4: "",
proxyNetworks: "", // 子网代理
autoStart: false, // 是否自动启动
disableIpv6: false, // 是否禁用IPv6
disbleListenner: false, // 是否禁用监听
disableEncryption: false, // 是否禁用加密
multiThread: false, //使用多线程
enablExitNode: false, // 是否启用退出节点
noTun: false, // 是否使用TUN
latencyfirst: false, // 是否优先延迟
useSmoltcp: false, // 是否为子网代理启用smoltcp堆栈
disableUdpHolePunching: false, // 是否禁用UDP打洞
relayAllPeerrpc: false, // 是否启用所有对等RPC
disbleP2p: false, // 是否使用P2P
dhcp: true, // 是否使用DHCP
},
cidrEnable: false,
basePeers: ["public.easytier.top:11010"],
};
},
persist: {
paths: [
"basePeers",
"cidrEnable",
"config.proxyNetworks",
"config.serverUrl",
"config.networkName",
"config.protocol",
@@ -29,6 +41,14 @@ export default defineStore("main", {
"config.autoStart",
"config.disableIpv6",
"config.disbleListenner",
"config.disableEncryption",
"config.multiThread",
"config.enablExitNode",
"config.noTun",
"config.latencyfirst",
"config.useSmoltcp",
"config.disableUdpHolePunching",
"config.relayAllPeerrpc",
"config.hostname",
"config.dhcp",
],
+35 -4
View File
@@ -77,7 +77,38 @@ export const ATJ = (promise: Promise<any>, errorExt: string | undefined = undefi
});
};
export const openBrowser = (key: string) => {
// logger.info(`${import.meta.env.VITE_BROWSER_JOB_URL}${key}`)
// _launcherApi.openBrowser(`${import.meta.env.VITE_BROWSER_JOB_URL}${key}`);
};
export const parsePeerInfo = (content: string) => {
// 将表格字符串分割成行
const lines = content.split('\n')
// 提取表头(keys
const headers = lines[1]
.split('│')
.slice(1, -1)
.map((h) => h.trim())
// 初始化结果数组
const result: any[] = []
// 遍历数据行
for (let i = 3; i < lines.length - 1; i += 2) {
if (lines[i].trim() === '') continue // 跳过空行
// 分割每一行的数据
const values = lines[i]
.split('│')
.slice(1, -1)
.map((v) => v.trim())
// 创建对象并添加到结果数组
const obj: any = {}
headers.forEach((header, index) => {
obj[header] = values[index] === '-' || values[index] === '' ? null : values[index]
})
// 每行数据都作为一个新对象添加到结果数组中
result.push(obj)
}
return result
}