├── LICENSE
├── README.md
├── adv.png
├── backup.sh
├── build.py
├── build.sh
├── build_old
├── config.json.js
├── koolclash.tar.gz
├── koolclash
├── bin
│ ├── clash-linux-amd64
│ ├── subconverter.tar.gz
│ └── yq_linux_amd64
├── init.d
│ └── S99koolclash.sh
├── install.sh
├── koolclash
│ └── config
│ │ ├── Country.mmdb
│ │ ├── GeoSite.dat
│ │ ├── china_ip_route.ipset
│ │ ├── dns.yml
│ │ └── profile.yml
├── scripts
│ ├── koolclash_acl_mode.sh
│ ├── koolclash_check_yaml.sh
│ ├── koolclash_config.sh
│ ├── koolclash_control.sh
│ ├── koolclash_debug.sh
│ ├── koolclash_download_config.sh
│ ├── koolclash_firewall.sh
│ ├── koolclash_flow_status.sh
│ ├── koolclash_getarp.sh
│ ├── koolclash_node_memory.sh
│ ├── koolclash_return_chnip.sh
│ ├── koolclash_save_config.sh
│ ├── koolclash_save_control.sh
│ ├── koolclash_save_dns_config.sh
│ ├── koolclash_status.sh
│ ├── koolclash_sub.sh
│ ├── koolclash_subconverter.sh
│ ├── koolclash_switch_direct.sh
│ ├── koolclash_switch_global.sh
│ ├── koolclash_switch_rule.sh
│ ├── koolclash_update_chn.sh
│ ├── koolclash_update_ipdb.sh
│ ├── koolclash_update_sub_config.sh
│ ├── koolclash_update_sub_cron.sh
│ ├── koolclash_update_yaml.sh
│ ├── koolclash_watchdog.sh
│ └── koolclash_watchdog_config.sh
├── uninstall.sh
└── webs
│ ├── Module_koolclash.asp
│ ├── koolclash
│ ├── CNAME
│ ├── _headers
│ ├── apple-touch-icon-precomposed.png
│ ├── assets
│ │ ├── Chart.min.708e0ec0.js
│ │ ├── Config.38113279.js
│ │ ├── Config.56241d16.js
│ │ ├── Config.58870520.css
│ │ ├── Config.72936d5e.js
│ │ ├── Config.7bc73fad.css
│ │ ├── Connections.116e606f.js
│ │ ├── Connections.11a2597a.js
│ │ ├── Connections.1e70ab68.css
│ │ ├── Connections.5e0f762d.js
│ │ ├── Connections.c7e8fa7e.css
│ │ ├── Fab.33a60e0e.css
│ │ ├── Fab.4a89b536.js
│ │ ├── Fab.78b2c04b.js
│ │ ├── Fab.a0a7e573.css
│ │ ├── Fab.b64825a9.js
│ │ ├── Logs.029b1e0c.css
│ │ ├── Logs.0a3446ce.js
│ │ ├── Logs.2ca4cbd7.js
│ │ ├── Logs.d68ca431.css
│ │ ├── Logs.e13d481f.js
│ │ ├── Proxies.2247dbcf.js
│ │ ├── Proxies.3fa3509d.css
│ │ ├── Proxies.5f891988.js
│ │ ├── Proxies.e1ed6325.css
│ │ ├── Proxies.f41466fa.js
│ │ ├── Rules.521c574f.js
│ │ ├── Rules.5927d70a.js
│ │ ├── Rules.72ed8383.css
│ │ ├── Rules.c9171055.js
│ │ ├── Rules.e03c54a8.css
│ │ ├── Select.1e55eba1.css
│ │ ├── Select.4987ab41.js
│ │ ├── Select.9583f722.js
│ │ ├── Select.9a98fc65.css
│ │ ├── Select.aace7191.css
│ │ ├── Select.f2dd4970.js
│ │ ├── TextFitler.3d9182a0.css
│ │ ├── TextFitler.8b7d1ec3.js
│ │ ├── TextFitler.97029c74.js
│ │ ├── TextFitler.b21c0577.css
│ │ ├── TextFitler.e1325e60.js
│ │ ├── chart-lib.1222a339.js
│ │ ├── chart-lib.ff648d51.js
│ │ ├── chevron-down.2de0fb4e.js
│ │ ├── chevron-down.f5a64258.js
│ │ ├── debounce.76599460.js
│ │ ├── debounce.c2d20996.js
│ │ ├── debounce.d080d5e1.js
│ │ ├── en.fb34eaf7.js
│ │ ├── index.1b77cd1e.css
│ │ ├── index.27058ddf.js
│ │ ├── index.31d0d1dc.js
│ │ ├── index.7c09657a.js
│ │ ├── index.afdc8976.js
│ │ ├── index.b3e4e94f.js
│ │ ├── index.c54634b9.js
│ │ ├── index.d2d36d4e.css
│ │ ├── index.d6596dd6.js
│ │ ├── index.e157d135.css
│ │ ├── index.e97a91e5.js
│ │ ├── index.efbdc345.js
│ │ ├── index.esm.5b55aaed.js
│ │ ├── index.esm.8c5915bf.js
│ │ ├── index.esm.f1f118db.js
│ │ ├── inter-latin-400-normal.9ec803ce.woff
│ │ ├── inter-latin-400-normal.d56fec21.woff2
│ │ ├── inter-latin-800-normal.5eea1309.woff2
│ │ ├── inter-latin-800-normal.98c540b2.woff
│ │ ├── logs.7cc467a0.js
│ │ ├── logs.8963bea3.js
│ │ ├── logs.975cc896.js
│ │ ├── open-sans-latin-400-normal.cce57747.woff2
│ │ ├── open-sans-latin-400-normal.d7410996.woff
│ │ ├── open-sans-latin-700-normal.a61d6725.woff2
│ │ ├── open-sans-latin-700-normal.b1fda8d8.woff
│ │ ├── play.1bfea717.js
│ │ ├── play.42659ab6.js
│ │ ├── roboto-mono-latin-400-normal.2dfc0e86.woff
│ │ ├── roboto-mono-latin-400-normal.e1fd013a.woff2
│ │ ├── useRemainingViewPortHeight.49042856.js
│ │ ├── useRemainingViewPortHeight.76d7ff5c.js
│ │ ├── useRemainingViewPortHeight.91bbcf1d.js
│ │ ├── vendor.3cf270b6.js
│ │ └── zh.9b79b7bf.js
│ ├── index.html
│ ├── manifest.webmanifest
│ ├── registerSW.js
│ ├── sw.js
│ ├── yacd-128.png
│ ├── yacd-64.png
│ └── yacd.ico
│ └── res
│ ├── icon-koolclash-bg.png
│ ├── icon-koolclash.png
│ ├── koolclash_.version
│ ├── koolclash_base64.js
│ └── koolclash_help.js
├── koolclash_version
├── local-build.sh
├── remove_restrictions
├── install.sh
└── remove_restrictions.tar.gz
└── version
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
KoolClash
4 |
5 |
6 |
7 | A rule based custom proxy for Koolshare OpenWrt/LEDE x64 based on Clash.
8 |
9 | Documentation(zh-Hans) |
10 | From SukkaW |
11 | Download
12 |
13 |
14 |
15 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | > KoolClash is for [Koolshare OpenWrt/LEDE x86_64](http://fw.koolcenter.com/LEDE_X64_fw867) ONLY. Use [OpenClash](https://github.com/vernesong/OpenClash/) if you are running original OpenWrt.
37 |
38 | ## Keywords
39 |
40 | - [Clash](https://github.com/Dreamacro/clash) : A multi-platform & rule-base tunnel
41 | - **[KoolClash](https://koolclash.js.org) : This project, a rule based custom proxy for [Koolshare OpenWrt/LEDE x64](https://www.koolcenter.com/) based on Clash.**
42 |
43 | ## Features
44 |
45 | - HTTP/HTTPS and SOCKS protocol
46 | - Surge like configuration
47 | - ~~GeoIP rule support~~
48 | - ~~Support Vmess/Shadowsocks/Socks5~~
49 | - Support for Netfilter TCP redirect
50 | - ~~Support Equipment control~~
51 |
52 | Besides those features that Clash have, KoolClash has more:
53 |
54 | - Install clash and upload config to [Koolshare OpenWrt/LEDE X86](http://fw.koolcenter.com/LEDE_X64_fw867/)
55 | - ~~Transparent proxy for all of your devices~~
56 | - Proxy gateway like Surge Enhanced Mode
57 |
58 | ## Installation
59 |
60 | Download latest `koolshare.tar.gz` from [GitHub Release](https://github.com/houzi-/Koolshare-Clash-hack/releases), and then upload to Koolshare OpenWrt/LEDE Soft Center as offline installation.
61 |
62 | Read the [detailed installation instructions (written in Chinese)](https://koolclash.js.org/#/install) for more details.
63 |
64 | ## Build
65 |
66 | ```bash
67 | $ git clone https://github.com/houzi-/Koolshare-Clash-hack.git
68 | $ cd Koolshare-Clash-hack
69 | $ ./build # Package installation package
70 | ```
71 |
72 | ## Clash on Other Platforms
73 |
74 | - [Clash for Windows](https://github.com/Fndroid/clash_for_windows_pkg) : A Windows GUI based on Clash
75 | - [clashX](https://github.com/yichengchen/clashX) : A rule based custom proxy with GUI for Mac base on clash
76 | - [ClashA](https://github.com/ccg2018/ClashA) : An Android GUI for Clash
77 | - [OpenClash](https://github.com/vernesong/OpenClash) : Another Clash Client For OpenWrt
78 |
79 | ## Contributions
80 |
81 | [Report a Bug](https://github.com/houzi-/Koolshare-Clash-hack/issues/new/choose) | [Improve Documentations](https://github.com/SukkaW/Koolshare-Clash/tree/master/docs) | [Fork & Open a New PR](https://github.com/houzi-/Koolshare-Clash-hack/fork)
82 |
83 | All kinds of contributions (enhancements, new features, documentation & code improvements, issues & bugs reporting) are welcome.
84 |
85 | ## License
86 |
87 | KoolClash is released under the GPL-3.0 License - see the [LICENSE](https://github.com/houzi-/Koolshare-Clash-hack/blob/main/LICENSE) file for details.
88 |
89 | Also, this project includes [GeoLite2](https://dev.maxmind.com/geoip/geoip2/geolite2/) data created by [MaxMind](https://www.maxmind.com).
90 |
91 | ## Disclaimer
92 |
93 | KoolClash is not responsible for any loss of any user, including but not limited to Kernel Panic, device fail to boot or can not function normally, storage damage or data loss, atomic bombing, World War III, The CK-Class Restructuring Scenario that SCP Foundation can not prevent, and so on.
94 |
95 | ## Sponsors
96 |
97 |
99 |
100 | ## Maintainer
101 |
102 | **KoolClash** © [Sukka](https://github.com/SukkaW), Released under the [GPL-3.0]([./LICENSE](https://github.com/houzi-/Koolshare-Clash-hack/blob/main/LICENSE)) License.
103 | Authored and maintained by [Sukka](https://github.com/SukkaW) with help from contributors ([list](https://github.com/SukkaW/Koolshare-Clash/contributors)).
104 |
105 | > [Personal Website](https://skk.moe) · [Blog](https://blog.skk.moe) · GitHub [@SukkaW](https://github.com/SukkaW) · Telegram Channel [@SukkaChannel](https://t.me/SukkaChannel) · Twitter [@isukkaw](https://twitter.com/isukkaw) · Keybase [@sukka](https://keybase.io/sukka)
106 |
107 | **KoolClash-hack** © [houzi-](https://github.com/houzi-), Released under the [GPL-3.0]([./LICENSE](https://github.com/houzi-/Koolshare-Clash-hack/blob/main/LICENSE)) License.
108 | Hacker by [houzi-](https://github.com/houzi-) with help from contributors ([list](https://github.com/houzi-/Koolshare-Clash-hack/contributors)).
109 |
--------------------------------------------------------------------------------
/adv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/adv.png
--------------------------------------------------------------------------------
/backup.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | # you can do something here
4 | # this shell scripts will run at the end of build.py scripts
5 |
6 | tar_name="$1.tar.gz"
7 |
8 | mkdir -p history
9 | if [ ! -f ./history/version ];then
10 | touch ./history/version
11 | fi
12 |
13 | version_old=`cat history/version | awk '{print $1}' | sort -rn |sed -n 1p`
14 | version_new=`cat config.json.js |grep "version"|cut -d"\"" -f 4`
15 | md5_old=`cat history/version | sort -nk1 | awk '{print $1}' |sed -n 1p`
16 | md5_new=` md5sum $tar_name | awk '{print $1}'`
17 |
18 | if [ -f ./$tar_name ];then
19 | if [ "$version_old" != "$version_new" ];then
20 | mkdir ./history/$version_new/
21 | cp ./$tar_name ./history/$version_new/
22 | echo $version_new $md5_new >> ./history/version
23 | fi
24 | fi
25 |
26 |
--------------------------------------------------------------------------------
/build.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # _*_ coding:utf-8 _*_
3 |
4 | import os
5 | import json
6 | import codecs
7 | import hashlib
8 | from string import Template
9 |
10 | parent_path = os.path.dirname(os.path.realpath(__file__))
11 |
12 | def md5sum(full_path):
13 | with open(full_path, 'rb') as rf:
14 | return hashlib.md5(rf.read()).hexdigest()
15 |
16 | def get_or_create():
17 | conf_path = os.path.join(parent_path, "config.json.js")
18 | conf = {}
19 | if not os.path.isfile(conf_path):
20 | print u"config.json.js 文件找不到,build.py 一定得放插件根目录。自动为您生成一个config.json.js,其它信息请您自己修改。"
21 | module_name = os.path.basename(parent_path)
22 | conf["module"] = module_name
23 | conf["version"] = "0.0.1"
24 | conf["home_url"] = ("Module_%s.asp" % module_name)
25 | conf["title"] = "title of " + module_name
26 | conf["description"] = "description of " + module_name
27 | else:
28 | with codecs.open(conf_path, "r", "utf-8") as fc:
29 | conf = json.loads(fc.read())
30 | return conf
31 |
32 | def build_module():
33 | try:
34 | conf = get_or_create()
35 | except:
36 | print u"config.json.js 文件格式错误"
37 | traceback.print_exc()
38 | if "module" not in conf:
39 | print u"没有 module 在 config.json.js 里"
40 | return
41 | module_path = os.path.join(parent_path, conf["module"])
42 | if not os.path.isdir(module_path):
43 | print u"找不到对应的 %s 文件夹,config.json.js 里面的 module 值不对?" % module_path
44 | return
45 | install_path = os.path.join(parent_path, conf["module"], "install.sh")
46 | if not os.path.isfile(install_path):
47 | print u"找不到对应的 %s 文件,插件确实 install.sh 文件"
48 | return
49 | print u"生成中..."
50 | t = Template("cd $parent_path && rm -f $module.tar.gz && tar -zcf $module.tar.gz $module")
51 | os.system(t.substitute({"parent_path": parent_path, "module": conf["module"]}))
52 | conf["md5"] = md5sum(os.path.join(parent_path, conf["module"] + ".tar.gz"))
53 | conf_path = os.path.join(parent_path, "config.json.js")
54 | with codecs.open(conf_path, "w", "utf-8") as fw:
55 | json.dump(conf, fw, sort_keys = True, indent = 4, ensure_ascii=False, encoding='utf8')
56 | print u"生成完成", conf["module"] + ".tar.gz"
57 |
58 | build_module()
59 |
--------------------------------------------------------------------------------
/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | MODULE="koolclash"
4 | VERSION=`cat ./koolclash/webs/res/koolclash_.version`
5 | TITLE=koolclash
6 | DESCRIPTION="基于规则的代理程序 Clash"
7 | HOME_URL="Module_koolclash.asp"
8 | CHANGELOG="修复BUG"
9 |
10 | # Check and include base
11 | DIR="$( cd "$( dirname "$BASH_SOURCE[0]" )" && pwd )"
12 |
13 | # now include build_base.sh
14 | . $DIR/local-build.sh
15 |
16 | # change to module directory
17 | cd $DIR
18 |
19 | # do something here
20 |
21 | #do_build_result
22 |
23 | #sh backup.sh $MODULE
24 |
--------------------------------------------------------------------------------
/build_old:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | case $1 in
4 | dashboard)
5 | wget https://github.com/Dreamacro/clash-dashboard/archive/gh-pages.zip
6 | unzip gh-pages.zip
7 | rm -rf koolclash/webs/koolclash && mkdir -p koolclash/webs/koolclash
8 | cp -rf clash-dashboard-gh-pages/* koolclash/webs/koolclash
9 | rm -rf gh-pages.zip
10 | rm -rf clash-dashboard-gh-pages
11 | echo '----------------------------------------'
12 | echo 'Update to latest clash-dashboard'
13 | echo '----------------------------------------'
14 | ;;
15 | pack)
16 | mkdir -p koolclash-build/koolclash
17 | cp -rf koolclash/* koolclash-build/koolclash
18 |
19 | cd koolclash-build
20 |
21 | #upx=$(which upx)
22 | #
23 | #if [ "x$upx" != "x" ] && [ -x $upx ]; then
24 | # upx ./koolclash/bin/*
25 | #else
26 | # echo '----------------------------------------'
27 | # echo "You should install upx first!"
28 | # echo '----------------------------------------'
29 | # exit 1
30 | #fi
31 |
32 | tar zcvf ../koolclash.tar.gz koolclash
33 | cd ..
34 |
35 | mkdir -p koolclash-build/fuckkoolshare
36 | cp -rf fuckkoolshare/* koolclash-build/fuckkoolshare
37 |
38 | cd koolclash-build
39 | tar zcvf ../fuckkoolshare.tar.gz fuckkoolshare
40 | cd ..
41 |
42 | rm -rf koolclash-build
43 |
44 | echo '----------------------------------------'
45 | echo 'Build the latest version'
46 | echo '----------------------------------------'
47 | ;;
48 | ipdb)
49 | wget https://static.clash.to/GeoIP2/GeoIP2-Country.tar.gz -O ipdb.tar.gz
50 | mkdir -p geolite
51 | tar zxvf ipdb.tar.gz -C geolite
52 | chmod 644 geolite/GeoIP2-Country_*/*
53 | version=$(ls geolite | grep 'GeoIP2-Country' | sed "s|GeoIP2-Country_||g")
54 | cp -rf geolite/GeoIP2-Country_*/GeoIP2-Country.mmdb koolclash/koolclash/config/Country.mmdb
55 | rm -rf ipdb.tar.gz
56 | rm -rf geolite
57 | echo '----------------------------------------'
58 | echo "Update the ipdb to $version"
59 | echo '----------------------------------------'
60 | ;;
61 | *)
62 | echo '=================================================='
63 | echo ' KoolClash Build Tools'
64 | echo '--------------------------------------------------'
65 | echo 'Usage: build [option]'
66 | echo ''
67 | echo "dashboard\tUpdate clash-dashboard to latest"
68 | echo "ipdb\t\tUpdate GeoLite to latest"
69 | echo "pack\t\tBuild the package"
70 | echo '=================================================='
71 | ;;
72 | esac
73 |
--------------------------------------------------------------------------------
/config.json.js:
--------------------------------------------------------------------------------
1 | {
2 | "module":"koolclash",
3 | "version":"0.18.4",
4 | "md5":"e434a35dbc32ae9df11a9dfd7de21fc0",
5 | "home_url":"Module_koolclash.asp",
6 | "title":"koolclash",
7 | "description":"基于规则的代理程序 Clash",
8 | "changelog":"BUG修复",
9 | "build_date":"2023-04-16_19:09:51"
10 | }
11 |
--------------------------------------------------------------------------------
/koolclash.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash.tar.gz
--------------------------------------------------------------------------------
/koolclash/bin/clash-linux-amd64:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/bin/clash-linux-amd64
--------------------------------------------------------------------------------
/koolclash/bin/subconverter.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/bin/subconverter.tar.gz
--------------------------------------------------------------------------------
/koolclash/bin/yq_linux_amd64:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/bin/yq_linux_amd64
--------------------------------------------------------------------------------
/koolclash/init.d/S99koolclash.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh /etc/rc.common
2 | #
3 | # Copyright (C) 2015 OpenWrt-dist
4 | # Copyright (C) 2016 fw867
5 | # Copyright (C) 2016 sadog
6 | # Copyright (C) 2018 SukkaW
7 | #
8 | # This is free software, licensed under the GNU General Public License v3.
9 | # See /LICENSE for more information.
10 | #
11 |
12 | START=99
13 | STOP=15
14 |
15 | source /koolshare/scripts/base.sh
16 | eval $(dbus export koolclash_)
17 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
18 |
19 | start() {
20 | touch /tmp/upload/koolclash_log.txt
21 | if [ "$koolclash_enable" == "1" ]; then
22 | sh /koolshare/scripts/koolclash_control.sh start >/tmp/upload/koolclash_log.txt
23 | echo_date "KoolClash 开机启动成功" >>/tmp/upload/koolclash_log.txt
24 | echo "XU6J03M6" >>/tmp/upload/koolclash_log.txt
25 | else
26 | echo_date "KoolClash 开机没有启动" >/tmp/upload/koolclash_log.txt
27 | echo "XU6J03M6" >>/tmp/upload/koolclash_log.txt
28 | fi
29 | }
30 |
31 | stop() {
32 | touch /tmp/upload/koolclash_log.txt
33 | sh /koolshare/scripts/koolclash_control.sh stop >/tmp/upload/koolclash_log.txt
34 | echo_date "KoolClash 成功停止" >>/tmp/upload/koolclash_log.txt
35 | echo "XU6J03M6" >>/tmp/upload/koolclash_log.txt
36 | }
37 |
--------------------------------------------------------------------------------
/koolclash/install.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 | export KSROOT=/koolshare
3 | source $KSROOT/scripts/base.sh
4 | eval $(dbus export koolclash)
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 | IPDB_VERSION="2022-08-26"
7 | CHN_VERSION="2022-08-26"
8 |
9 | # 判断路由架构和平台
10 | # Modified from koolss plugin (https://github.com/koolshare/ledesoft/blob/master/koolclash/koolss/install.sh)
11 | case $(uname -m) in
12 | armv7l)
13 | echo_date "KoolClash 插件用于 koolshare OpenWRT/LEDE x86_64 固件平台,arm 平台尚未适配!!!"
14 | echo_date "退出安装!"
15 | exit 1
16 | ;;
17 | mips)
18 | echo_date "KoolClash 插件用于 koolshare OpenWRT/LEDE x86_64 固件平台,mips 平台尚未适配!!!"
19 | echo_date "退出安装!"
20 | exit 1
21 | ;;
22 | x86_64)
23 | fw867=$(cat /etc/banner | grep fw867)
24 | if [ -d "/koolshare" ] && [ -n "$fw867" ]; then
25 | echo_date "固件平台【koolshare OpenWRT/LEDE x86_64】符合安装要求,开始安装插件!"
26 | else
27 | echo_date "KoolClash 插件用于 koolshare OpenWRT/LEDE x86_64 固件平台,其它固件未做适配!!!"
28 | echo_date "退出安装!"
29 | exit 1
30 | fi
31 | ;;
32 | *)
33 | echo_date "KoolClash 插件用于 koolshare OpenWRT/LEDE x86_64 固件平台,其它固件未做适配!!!"
34 | echo_date "退出安装!"
35 | exit 1
36 | ;;
37 | esac
38 |
39 | if [ -n "$(pidof clash)" ]; then
40 | # 停止 KoolClash
41 | koolclash_reenable_after_install=1
42 | echo_date "KoolClash: 检测到 Clash 正在运行..."
43 | echo_date "KoolClash: 停止 Clash 以更新/安装 KoolClash..."
44 | echo_date 'KoolClash:【更新 KoolClash 过程中可能会出现「软件中心异常」的提示,是正常现象!】'
45 | echo_date 'KoolClash:【请不要刷新或关闭页面,务必等待安装完成、页面自动跳转!】'
46 | sleep 4
47 | sh $KSROOT/scripts/koolclash_control.sh stop_for_install
48 | sleep 1
49 | echo_date "KoolClash: Clash 已经停止,继续更新/安装..."
50 | fi
51 |
52 | # 清理 旧文件夹
53 | echo_date "KoolClash: 清理旧版文件..."
54 | rm -rf $KSROOT/bin/clash >/dev/null 2>&1
55 | rm -rf $KSROOT/bin/subconverter >/dev/null 2>&1
56 | rm -rf $KSROOT/bin/yq >/dev/null 2>&1
57 | rm -rf $KSROOT/scripts/koolclash_* >/dev/null 2>&1
58 | rm -rf $KSROOT/init.d/S99koolclash.sh >/dev/null 2>&1
59 | find /etc/rc.d/ -name *koolclash.sh* | xargs rm -rf
60 | rm -rf $KSROOT/webs/Module_koolclash.asp >/dev/null 2>&1
61 | rm -rf $KSROOT/webs/res/icon-koolclash* >/dev/null 2>&1
62 | rm -rf $KSROOT/webs/res/koolclash_* >/dev/null 2>&1
63 | [ -f "/koolshare/webs/files/koolclash.tar.gz" ] && rm -rf /koolshare/webs/files/koolclash.tar.gz >/dev/null 2>&1
64 |
65 | # 创建相关的文件夹
66 | echo_date "KoolClash: 创建文件夹..."
67 | mkdir -p $KSROOT/koolclash/config
68 | mkdir -p $KSROOT/init.d
69 |
70 | # 复制文件
71 | cd /tmp
72 |
73 | echo_date "KoolClash: 复制安装包内的文件到路由器..."
74 |
75 | #cp -rf /tmp/koolclash/bin/* $KSROOT/bin/
76 | cp -rf /tmp/koolclash/bin/clash-linux-amd64 $KSROOT/bin/clash
77 | cp -rf /tmp/koolclash/bin/yq_linux_amd64 $KSROOT/bin/yq
78 | tar -zxf /tmp/koolclash/bin/subconverter.tar.gz -C $KSROOT/bin
79 | cp -rf /tmp/koolclash/scripts/* $KSROOT/scripts/
80 | cp -rf /tmp/koolclash/init.d/* $KSROOT/init.d/
81 | cp -rf /tmp/koolclash/webs/* $KSROOT/webs/
82 | cp /tmp/koolclash/install.sh $KSROOT/scripts/koolclash_install.sh
83 | cp /tmp/koolclash/uninstall.sh $KSROOT/scripts/uninstall_koolclash.sh
84 |
85 | if [ ! -f $KSROOT/koolclash/config/Country.mmdb ]; then
86 | cp -rf /tmp/koolclash/koolclash/config/Country.mmdb $KSROOT/koolclash/config/Country.mmdb
87 | cp -rf /tmp/koolclash/koolclash/config/GeoSite.dat $KSROOT/koolclash/config/GeoSite.dat
88 | cp -rf /tmp/koolclash/koolclash/config/dns.yml $KSROOT/koolclash/config/dns.yml
89 | cp -rf /tmp/koolclash/koolclash/config/china_ip_route.ipset $KSROOT/koolclash/config/china_ip_route.ipset
90 | cp -rf /tmp/koolclash/koolclash/config/profile.yml $KSROOT/koolclash/config/profile.yml
91 | dbus set koolclash_ipdb_version=$IPDB_VERSION
92 | dbus set koolclash_chn_version=$IPDB_VERSION
93 | fi
94 |
95 | # 删除 Luci 缓存
96 | rm -rf /tmp/luci-*
97 |
98 | # 为新安装文件赋予执行权限...
99 | echo_date "KoolClash: 设置可执行权限"
100 | chmod 755 $KSROOT/bin/*
101 | chmod 755 $KSROOT/bin/subconverter/*
102 | chmod 755 $KSROOT/scripts/koolclash_*
103 | chmod 755 $KSROOT/init.d/S99koolclash.sh
104 |
105 | local_version=$(cat $KSROOT/webs/res/koolclash_.version)
106 | echo_date "KoolClash: 设置版本号为 $local_version..."
107 | dbus set koolclash_version=$local_version
108 | dbus set koolclash_return_chnip=0
109 | dbus set koolclash_acl_list="undefined"
110 | dbus set koolclash_firewall_default_mode=1
111 | dbus set koolclash_firewall_default_port_mode="all"
112 | dbus set koolclash_acl_mode=1
113 | #echo_date "KoolClash: 设置代理模式为 规则模式..."
114 | #dbus set koolclash_switch_config_mode=1
115 | #echo_date "KoolClash: 设置运行模式为 Fake-IP(增强)..."
116 | #dbus set koolclash_switch_run_mode=1
117 |
118 | sleep 1
119 |
120 | echo_date "KoolClash: 删除相关安装包..."
121 | rm -rf /tmp/koolclash* >/dev/null 2>&1
122 |
123 | echo_date "KoolClash: 设置插件信息..."
124 |
125 | dbus set softcenter_module_koolclash_description="基于规则的代理程序 Clash"
126 | dbus set softcenter_module_koolclash_install=1
127 | dbus set softcenter_module_koolclash_name=koolclash
128 | dbus set softcenter_module_koolclash_title=koolclash
129 | dbus set softcenter_module_koolclash_version=$local_version
130 |
131 | # 防火墙默认模式
132 | #[ -z $koolclash_firewall_default_mode ] && dbus set koolclash_firewall_default_mode=1
133 | # 防火墙默认端口模式
134 | #[ -z $koolclash_firewall_default_port_mode ] && dbus set koolclash_firewall_default_port_mode=all
135 | # 看门狗默认禁用
136 | [ -z $koolclash_watchdog_enable ] && dbus set koolclash_watchdog_enable=0
137 |
138 | sleep 1
139 |
140 | if [ "$koolclash_reenable_after_install" == "1" ]; then
141 | echo_date 'KoolClash: 重启 Clash...'
142 | sleep 2
143 | sh $KSROOT/scripts/koolclash_control.sh start_after_install
144 | sleep 1
145 | echo_date 'KoolClash: Clash 重启完成...'
146 | fi
147 |
148 | echo_date "KoolClash: 插件安装完成..."
149 |
150 | dbus remove koolclash_reenable_after_install
151 |
--------------------------------------------------------------------------------
/koolclash/koolclash/config/Country.mmdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/koolclash/config/Country.mmdb
--------------------------------------------------------------------------------
/koolclash/koolclash/config/GeoSite.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/koolclash/config/GeoSite.dat
--------------------------------------------------------------------------------
/koolclash/koolclash/config/dns.yml:
--------------------------------------------------------------------------------
1 | dns:
2 | enable: true
3 | ipv6: false
4 | listen: 0.0.0.0:23453
5 | enhanced-mode: fake-ip
6 | default-nameserver:
7 | - 119.29.29.29
8 | - 119.28.28.28
9 | - 1.0.0.1
10 | - 208.67.222.222
11 | - 1.2.4.8
12 | - 202.100.199.8
13 | - 202.100.192.68
14 | - 114.114.114.114
15 | nameserver:
16 | - 202.100.199.8
17 | - 202.100.192.68
18 | - 114.114.114.114
19 | - 119.29.29.29
20 | - https://doh.pub/dns-query
21 | - https://dns.alidns.com/dns-query
22 | fake-ip-range: 198.18.0.1/16
23 | fallback:
24 | - https://dns.cloudflare.com/dns-query
25 | - https://public.dns.iij.jp/dns-query
26 | - https://jp.tiar.app/dns-query
27 | - https://jp.tiarap.org/dns-query
28 | - tls://dot.tiar.app
29 | fake-ip-filter:
30 | - "+.*"
31 |
--------------------------------------------------------------------------------
/koolclash/koolclash/config/profile.yml:
--------------------------------------------------------------------------------
1 | profile:
2 | store-selected: false
3 | store-fake-ip: true
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_acl_mode.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 | eval $(dbus export koolclash_)
7 |
8 | dbus set koolclash_acl_mode=$2
9 |
10 | http_response "ok"
11 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_check_yaml.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 | eval $(dbus export koolclash_)
7 |
8 | BOM=$(grep -I -r -l $'\xEF\xBB\xBF' $KSROOT/koolclash/config/origin.yml)
9 | if [ -n "$BOM" ]; then
10 | sed -i $'s/\xef\xbb\xbf//' $KSROOT/koolclash/config/origin.yml
11 | fi
12 |
13 | para1=$(sed -n '/^port:/p' $KSROOT/koolclash/config/origin.yml)
14 | para1_1=$(sed -n '/^mixed-port:/p' $KSROOT/koolclash/config/origin.yml)
15 | if [ -n "$para1_1" ] ; then
16 | sed -i 's/^mixed-port:/port:/g' $KSROOT/koolclash/config/origin.yml
17 | fi
18 |
19 | proxies_line=$(cat $KSROOT/koolclash/config/origin.yml | grep -n "^proxies:" | awk -F ":" '{print $1}')
20 | port_line=$(cat $KSROOT/koolclash/config/origin.yml | grep -n "^port:" | awk -F ":" '{print $1}' | head -1)
21 |
22 | if [ -z "$port_line" ] ; then
23 | return 0
24 | fi
25 | if [ -z "$proxies_line" ]; then
26 | return 0
27 | fi
28 | if [ -z "$para1" ] && [ -z "$para1_1" ]; then
29 | return 0
30 | else
31 | return 1
32 | fi
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_config.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | eval $(dbus export koolclash_)
6 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
7 |
8 | get_acl_para() {
9 | echo `dbus get koolclash_acl_list | sed 's/>/\n/g' | sed '/^$/d' | awk NR==$1{print} | cut -d "<" -f "$2"`
10 | }
11 |
12 | factor() {
13 | if [ -z "$1" ] || [ -z "$2" ]; then
14 | echo ""
15 | else
16 | echo "$2 $1"
17 | fi
18 | }
19 |
20 | clear_ipset() {
21 | if [ -n "$(ipset -L | grep -E "koolclash_white_ac_ips|koolclash_white_ac_macs")" ]; then
22 | ipset -F koolclash_white_ac_ips >/dev/null 2>&1
23 | ipset -F koolclash_white_ac_macs >/dev/null 2>&1
24 | fi
25 | if [ -n "$(ipset -L | grep -E "koolclash_black_ac_ips|koolclash_black_ac_macs")" ]; then
26 | ipset -F koolclash_black_ac_ips >/dev/null 2>&1
27 | ipset -F koolclash_black_ac_macs >/dev/null 2>&1
28 | fi
29 | }
30 |
31 | creat_ipset() {
32 | if [ ! -n "$(ipset -L | grep -E "koolclash_white_ac_ips|koolclash_white_ac_macs")" ]; then
33 | ipset create koolclash_white_ac_ips hash:net >/dev/null 2>&1
34 | ipset create koolclash_white_ac_macs hash:mac >/dev/null 2>&1
35 | fi
36 | if [ ! -n "$(ipset -L | grep -E "koolclash_black_ac_ips|koolclash_black_ac_macs")" ]; then
37 | ipset create koolclash_black_ac_ips hash:net >/dev/null 2>&1
38 | ipset create koolclash_black_ac_macs hash:mac >/dev/null 2>&1
39 | fi
40 | }
41 |
42 | creat_iptables() {
43 | if [ ! -n "$(iptables -t nat -S koolclash | grep -E "koolclash_white_ac_ips|koolclash_white_ac_macs")" ]; then
44 | [ "$koolclash_acl_mode" == 1 ] && iptables -t nat -A koolclash -m set --match-set koolclash_white_ac_ips dst -j RETURN >/dev/null 2>&1
45 | [ "$koolclash_acl_mode" == 2 ] && iptables -t nat -A koolclash -m set --match-set koolclash_white_ac_macs dst -j RETURN >/dev/null 2>&1
46 | fi
47 | if [ ! -n "$(iptables -t nat -S koolclash | grep -E "koolclash_black_ac_ips|koolclash_black_ac_macs")" ]; then
48 | [ "$koolclash_acl_mode" == 1 ] && iptables -t nat -A koolclash -m set ! --match-set koolclash_black_ac_ips dst -j RETURN >/dev/null 2>&1
49 | [ "$koolclash_acl_mode" == 2 ] && iptables -t nat -A koolclash -m set ! --match-set koolclash_black_ac_macs dst -j RETURN >/dev/null 2>&1
50 | fi
51 | if [ ! -n "$(iptables -t nat -S koolclash_output | grep -E "koolclash_white_ac_ips|koolclash_white_ac_macs")" ]; then
52 | [ "$koolclash_acl_mode" == 1 ] && iptables -t nat -A koolclash_output -m set --match-set koolclash_white_ac_ips dst -j RETURN >/dev/null 2>&1
53 | [ "$koolclash_acl_mode" == 2 ] && iptables -t nat -A koolclash_output -m set --match-set koolclash_white_ac_macs dst -j RETURN >/dev/null 2>&1
54 | fi
55 | if [ ! -n "$(iptables -t nat -S koolclash_output | grep -E "koolclash_black_ac_ips|koolclash_black_ac_macs")" ]; then
56 | [ "$koolclash_acl_mode" == 1 ] && iptables -t nat -A koolclash_output -m set ! --match-set koolclash_black_ac_ips dst -j RETURN >/dev/null 2>&1
57 | [ "$koolclash_acl_mode" == 2 ] && iptables -t nat -A koolclash_output -m set ! --match-set koolclash_black_ac_macs dst -j RETURN >/dev/null 2>&1
58 | fi
59 | if [ ! -n "$(iptables -t mangle -S koolclash | grep -E "koolclash_white_ac_ips|koolclash_white_ac_macs")" ]; then
60 | [ "$koolclash_acl_mode" == 1 ] && iptables -t mangle -A koolclash -m set --match-set koolclash_white_ac_ips dst -j RETURN >/dev/null 2>&1
61 | [ "$koolclash_acl_mode" == 2 ] && iptables -t mangle -A koolclash -m set --match-set koolclash_white_ac_macs dst -j RETURN >/dev/null 2>&1
62 | fi
63 | if [ ! -n "$(iptables -t mangle -S koolclash | grep -E "koolclash_black_ac_ips|koolclash_black_ac_macs")" ]; then
64 | [ "$koolclash_acl_mode" == 1 ] && iptables -t mangle -A koolclash -m set ! --match-set koolclash_black_ac_ips dst -j RETURN >/dev/null 2>&1
65 | [ "$koolclash_acl_mode" == 2 ] && iptables -t mangle -A koolclash -m set ! --match-set koolclash_black_ac_macs dst -j RETURN >/dev/null 2>&1
66 | fi
67 | }
68 |
69 | lan_acess_control(){
70 | # lan access control
71 | acl_nu=`dbus get koolclash_acl_list | sed 's/>/\n/g' | sed '/^$/d' | sed '/^ /d' | wc -l`
72 | if [ -n "$acl_nu" ]; then
73 | min="1"
74 | max="$acl_nu"
75 | while [ $min -le $max ]
76 | do
77 | proxy_name=`get_acl_para $min 1`
78 | ipaddr=`get_acl_para $min 2`
79 | mac=`get_acl_para $min 3`
80 | proxy_mode=`get_acl_para $min 4`
81 |
82 | if [ -n "$ipaddr" ]; then
83 | [ "$proxy_mode" == 0 ] && ipset add koolclash_white_ac_ips $ipaddr
84 | [ "$proxy_mode" == 1 ] && ipset add koolclash_black_ac_ips $ipaddr
85 | fi
86 | if [ -n "$mac" ]; then
87 | [ "$proxy_mode" == 0 ] && ipset add koolclash_white_ac_macs $mac
88 | [ "$proxy_mode" == 1 ] && ipset add koolclash_black_ac_macs $mac
89 | fi
90 | min=`expr $min + 1`
91 | done
92 | fi
93 | }
94 |
95 | case $1 in
96 | acl)
97 | if [ "$koolclash_enable" == "1" ]; then
98 | if [ -n "$koolclash_acl_list" ]; then
99 | clear_ipset
100 | creat_ipset
101 | #creat_iptables
102 | lan_acess_control
103 | else
104 | :
105 | fi
106 | else
107 | clear_ipset
108 | fi
109 | ;;
110 | esac
111 |
112 | case $2 in
113 | acl)
114 | if [ "$koolclash_enable" == "1" ]; then
115 | if [ -n "$koolclash_acl_list" ]; then
116 | clear_ipset
117 | creat_ipset
118 | #creat_iptables
119 | lan_acess_control
120 | http_response 'success'
121 | else
122 | :
123 | fi
124 | else
125 | clear_ipset
126 | http_response 'success'
127 | fi
128 | ;;
129 | esac
130 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_debug.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 |
7 | eval $(dbus export koolclash_)
8 |
9 | lan_ip=$(ubus call network.interface.lan status | jsonfilter -e '@["ipv4-address"][0].address')
10 | #wan_ip=$(ubus call network.interface.wan status | grep \"address\" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
11 | koolshare_version=$(cat /etc/banner | grep Openwrt)
12 |
13 | clash_version=$($KSROOT/bin/clash -v)
14 |
15 | fallbackdns=$(cat $KSROOT/koolclash/config/dns.yml | base64 | xargs)
16 |
17 | if [ ! -f $KSROOT/koolclash/config/config.yaml ]; then
18 | clash_allow_lan=''
19 | clash_ext_controller=''
20 | clash_redir=''
21 | clash_mode=''
22 | clash_dns_enable=''
23 | clash_dns_ipv6=''
24 | clash_dns_mode=''
25 | clash_dns_listen=''
26 | else
27 | clash_allow_lan=$(yq r /koolshare/koolclash/config/config.yaml allow-lan)
28 | clash_ext_controller=$(yq r /koolshare/koolclash/config/config.yaml external-controller)
29 | clash_redir=$(yq r /koolshare/koolclash/config/config.yaml redir-port)
30 | clash_mode=$(yq r /koolshare/koolclash/config/config.yaml mode)
31 | clash_dns_enable=$(yq r /koolshare/koolclash/config/config.yaml dns.enable)
32 | clash_dns_ipv6=$(yq r /koolshare/koolclash/config/config.yaml dns.ipv6)
33 | clash_dns_mode=$(yq r /koolshare/koolclash/config/config.yaml dns.enhanced-mode)
34 | clash_dns_listen=$(yq r /koolshare/koolclash/config/config.yaml dns.listen)
35 | fi
36 |
37 | iptables_mangle=$(iptables -nvL PREROUTING -t mangle | sed 1,2d | grep 'clash' | base64 | base64 | xargs)
38 | iptables_nat=$(iptables -nvL PREROUTING -t nat | sed 1,2d | grep 'clash' | base64 | base64 | xargs)
39 | iptables_mangle_clash=$(iptables -nvL koolclash -t mangle | sed 1,2d | base64 | base64 | xargs)
40 | iptables_nat_clash=$(iptables -nvL koolclash -t nat | sed 1,2d | base64 | base64 | xargs)
41 | iptables_mangle_clash_dns=$(iptables -nvL OUTPUT -t nat | sed 1,2d | base64 | base64 | xargs)
42 | iptables_nat_clash_dns=$(iptables -nvL koolclash_output -t nat | sed 1,2d | base64 | base64 | xargs)
43 |
44 | white_ip=$(ipset list koolclash_white | base64 | xargs)
45 |
46 | ipset_list=$(ipset list | grep "Name:" | grep "koolclash" | base64 | xargs)
47 |
48 | chromecast_nu=$(iptables -t nat -L PREROUTING -v -n --line-numbers | grep "dpt:53" | base64 | xargs)
49 |
50 | clash_process=$(ps | grep clash | grep -v grep | base64 | xargs)
51 |
52 | clash_config_dir=$(ls -lh /koolshare/koolclash/config | base64 | xargs)
53 |
54 | http_response "{ \\\"lan_ip\\\": \\\"${lan_ip}\\\", \\\"koolshare_version\\\": \\\"$koolshare_version\\\", \\\"clash_allow_lan\\\": \\\"$clash_allow_lan\\\", \\\"clash_ext_controller\\\": \\\"$clash_ext_controller\\\", \\\"clash_dns_enable\\\": \\\"$clash_dns_enable\\\", \\\"clash_dns_ipv6\\\": \\\"$clash_dns_ipv6\\\", \\\"clash_dns_mode\\\": \\\"$clash_dns_mode\\\", \\\"clash_dns_listen\\\": \\\"$clash_dns_listen\\\", \\\"fallbackdns\\\": \\\"$fallbackdns\\\", \\\"iptables_mangle\\\": \\\"$iptables_mangle\\\", \\\"iptables_nat\\\": \\\"$iptables_nat\\\", \\\"iptables_mangle_clash\\\": \\\"$iptables_mangle_clash\\\", \\\"iptables_nat_clash\\\": \\\"$iptables_nat_clash\\\", \\\"iptables_mangle_clash_dns\\\": \\\"$iptables_mangle_clash_dns\\\", \\\"iptables_nat_clash_dns\\\": \\\"$iptables_nat_clash_dns\\\", \\\"clash_redir\\\": \\\"$clash_redir\\\", \\\"clash_mode\\\": \\\"$clash_mode\\\", \\\"firewall_white_ip\\\": \\\"$white_ip\\\", \\\"firewall_ipset_list\\\": \\\"$ipset_list\\\", \\\"chromecast_nu\\\": \\\"$chromecast_nu\\\", \\\"clash_process\\\": \\\"$clash_process\\\", \\\"clash_config_dir\\\": \\\"$clash_config_dir\\\", \\\"clash_version\\\": \\\"$clash_version\\\"}"
55 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_download_config.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 |
7 | eval $(dbus export koolclash_)
8 |
9 |
10 | # 检测是否能够读取面板上传的 Clash
11 | if [ -f $KSROOT/koolclash/config/config.yaml ]; then
12 | echo_date "开始导出Clash配置!" >>/tmp/upload/koolclash_log.txt
13 | rm -rf $KSROOT/webs/files/config.yaml
14 | # 将clash配置文件复制到 files 目录中
15 | cp $KSROOT/koolclash/config/config.yaml $KSROOT/webs/files/config.yaml
16 | echo_date "Clash 配置导出成功!" >>/tmp/upload/koolclash_log.txt
17 | http_response 'success'
18 | else
19 | echo_date "没有找到Clash配置文件!退出!" >>/tmp/upload/koolclash_log.txt
20 | http_response 'notfound'
21 | exit 1
22 | fi
23 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_firewall.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 | eval $(dbus export koolclash_)
7 | # From Koolshare DMZ Plugin
8 | lan_ip=$(ubus call network.interface.lan status | jsonfilter -e '@["ipv4-address"][0].address')
9 | wan_ip=$(ubus call network.interface.wan status | grep \"address\" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
10 |
11 | case $2 in
12 | white)
13 | dbus set koolclash_firewall_whiteip_base64=$3
14 | http_response 'ok'
15 | ;;
16 | white-domain)
17 | dbus set koolclash_firewall_whitedomain_base64=$3
18 | http_response 'ok'
19 | ;;
20 | black)
21 | dbus set koolclash_firewall_blackip_base64=$3
22 | dbus set koolclash_firewall_blackip_enable=1
23 | http_response 'ok'
24 | ;;
25 | black-domain)
26 | dbus set koolclash_firewall_blackdomain_base64=$3
27 | dbus set koolclash_firewall_blackdomain_enable=1
28 | http_response 'ok'
29 | ;;
30 | default)
31 | # 0 不通过 Clash; 1 通过 Clash
32 | dbus set koolclash_firewall_default_mode=$3
33 | # ['80443', '80,443'],
34 | # ['1', '常用端口'],
35 | # ['all', '全部端口'],
36 | # ['0', '自定义端口']
37 | dbus set koolclash_firewall_default_port_mode=$4
38 | # ['off', '关闭'],
39 | # ['80443', '80,443'],
40 | # ['1', '常用端口'],
41 | # ['0', '自定义端口']
42 | dbus set koolclash_firewall_base_port_mode=$5
43 | dbus set koolclash_firewall_default_port_user=$6
44 | http_response 'ok'
45 | ;;
46 | esac
47 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_flow_status.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 | eval $(dbus export koolclash_)
7 |
8 | curl=$(which curl)
9 | $curl -I -k -s --user-agent "Clash" $koolclash_subconverter_url | grep -i "Subscription-Userinfo:" > /tmp/header.txt
10 |
11 | if [ "$koolclash_update_mode" == "2" ]; then
12 | if grep -i 'Subscription-Userinfo:' /tmp/header.txt >/dev/null 2>&1
13 | then
14 | total=$(cat /tmp/header.txt | awk '{printf $4}' | sed -e 's/total=//g' -e 's/;//g')
15 | down=$(cat /tmp/header.txt | awk '{printf $3}' | sed -e 's/download=//g' -e 's/;//g')
16 | up=$(cat /tmp/header.txt | awk '{printf $2}' | sed -e 's/upload=//g' -e 's/;//g')
17 | time=$(cat /tmp/header.txt | awk '{printf $5}' | sed -e 's/expire=//g' -e 's/;//g')
18 | use_all=$(expr $down + $up)
19 | val_1=$(expr $total / 1073741824)
20 | val_2=$(expr $use_all / 1073741824)
21 | TOTAL=$(echo $val_1)
22 | USED=$(echo $val_2)
23 | expiration_time=$(date -d @$time '+%Y-%m-%d')
24 | if [ -z "$expiration_time" ]; then
25 | dbus set koolclash_sub_expiration_time="无限制"
26 | else
27 | dbus set koolclash_sub_expiration_time="$expiration_time"
28 | fi
29 | dbus set koolclash_sub_information="show"
30 | http_response "$TOTAL>$USED"
31 | else
32 | dbus set koolclash_sub_information="hide"
33 | fi
34 | else
35 | dbus set koolclash_sub_information="hide"
36 | fi
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_getarp.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | #arp=`arp | grep br-lan | grep -v ? |sed 's// /g'| sed 's/ (/#g'`
6 | #arp=`arp -i br-lan | grep 192. | sed 's/?/unknown-device.lan/g' | grep -v '' | sed 's/ (/#g'`
7 | arp_scan=$(which arp-scan)
8 | $arp_scan --interface=br-lan -l | grep "(Unknown" | sed 's/(Unknown.*/(Unknown)/' > /tmp/list.txt
9 |
10 | arp=$(cat /tmp/list.txt | awk '{$3 = $2; print $0}' | awk '{$2 = $1; print $0}' | sed 's/ /#g')
11 |
12 | if [ -n "$arp" ]; then
13 | dbus set koolclash_arp="$arp"
14 | else
15 | dbus set koolclash_arp="undefined"
16 | fi
17 |
18 | http_response "$arp"
19 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_node_memory.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 | eval $(dbus export koolclash_)
7 |
8 | dbus set koolclash_node_memory_enable=$2
9 |
10 | http_response "ok"
11 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_return_chnip.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | source $KSROOT/bin/helper.sh
6 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
7 | eval $(dbus export koolclash_)
8 |
9 |
10 | return_ip_off() {
11 | if [ "$koolclash_return_chnip" == "1" ]; then
12 | dbus set koolclash_return_chnip=0
13 | iptables -t nat -D koolclash -m set --match-set koolclash_chn_white dst -j RETURN >/dev/null 2>&1
14 | iptables -t nat -D koolclash_output -m set --match-set koolclash_chn_white dst -j RETURN >/dev/null 2>&1
15 | iptables -t mangle -D koolclash -m set --match-set koolclash_chn_white dst -j RETURN >/dev/null 2>&1
16 | http_response "chnip_off"
17 | fi
18 | }
19 |
20 | return_ip_on() {
21 | if [ "$koolclash_return_chnip" == "0" ]; then
22 | dbus set koolclash_return_chnip=1
23 | #koolclash_return iptables_nat
24 | koolclash_nu=$(iptables -nvL koolclash -t nat | sed 1,2d | sed -n '/koolclash_white dst/=');let koolclash_nu+=1
25 | [ "$(iptables -t nat -C koolclash -m set --match-set koolclash_chn_white dst -j RETURN >/dev/null 2>&1;echo $?)" == "1" ] && \
26 | iptables -t nat -I koolclash $koolclash_nu -m set --match-set koolclash_chn_white dst -j RETURN
27 | #koolclash_output_return iptables_nat
28 | koolclash_output_nu=$(iptables -nvL koolclash_output -t nat | sed 1,2d | sed -n '/koolclash_white dst/=');let koolclash_output_nu+=1
29 | [ "$(iptables -t nat -C koolclash_output -m set --match-set koolclash_chn_white dst -j RETURN >/dev/null 2>&1;echo $?)" == "1" ] && \
30 | iptables -t nat -I koolclash_output $koolclash_output_nu -m set --match-set koolclash_chn_white dst -j RETURN
31 | #koolclash_return iptables_mangle
32 | koolclash_mangle_nu=$(iptables -nvL koolclash -t mangle | sed 1,2d | sed -n '/koolclash_white dst/=');let koolclash_mangle_nu+=1
33 | [ "$(iptables -t mangle -C koolclash -m set --match-set koolclash_chn_white dst -j RETURN >/dev/null 2>&1;echo $?)" == "1" ] && \
34 | iptables -t mangle -I koolclash $koolclash_mangle_nu -m set --match-set koolclash_chn_white dst -j RETURN
35 | http_response "chnip_on"
36 | fi
37 | }
38 |
39 | return_ip_off
40 | return_ip_on
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_save_config.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 |
7 | eval $(dbus export koolclash_)
8 |
9 | # 从 DMZ 插件抄来的获取 LAN/WAN IP
10 | lan_ip=$(ubus call network.interface.lan status | jsonfilter -e '@["ipv4-address"][0].address')
11 | wan_ip=$(ubus call network.interface.wan status | grep \"address\" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
12 | # fallback dns
13 | fallbackdns=$(cat $KSROOT/koolclash/config/dns.yml)
14 |
15 | # 检测是否能够读取面板上传的 Clash
16 | if [ "$(cat /tmp/upload/clash.config.yaml)" == "undefined" ]; then
17 | echo_date "没有找到上传的配置文件!退出!"
18 | http_response 'notfound'
19 | exit 1
20 | else
21 | echo_date "开始上传配置!"
22 | mkdir -p $KSROOT/koolclash/config/
23 | # 将上传的文件复制到 Config 目录中
24 | cp /tmp/upload/clash.config.yaml $KSROOT/koolclash/config/origin.yml
25 | sub_time=$(date +%Y-%m-%d\ %X)
26 | dbus set koolclash_config_version="$sub_time"
27 | fi
28 | # 删除 tmp 目录中上传的配置文件
29 | rm -rf /tmp/upload/clash.config.yaml
30 |
31 | sed -i '/^\-\-\-$/ d' $KSROOT/koolclash/config/origin.yml
32 | sed -i '/^\.\.\.$/ d' $KSROOT/koolclash/config/origin.yml
33 |
34 | echo_date "设置 redir-port 和 allow-lan 属性"
35 | # 覆盖配置文件中的 redir-port 和 allow-lan 的配置
36 | yq w -i $KSROOT/koolclash/config/origin.yml redir-port 23456
37 | yq w -i $KSROOT/koolclash/config/origin.yml allow-lan true
38 |
39 | # Change proxy mode
40 | if [ "$koolclash_switch_config_mode" == "1" ]; then
41 | yq w -i $KSROOT/koolclash/config/origin.yml mode "Rule"
42 | elif [ "$koolclash_switch_config_mode" == "2" ]; then
43 | yq w -i $KSROOT/koolclash/config/origin.yml mode "Global"
44 | elif [ "$koolclash_switch_config_mode" == "3" ]; then
45 | yq w -i $KSROOT/koolclash/config/origin.yml mode "Direct"
46 | fi
47 |
48 | # 如果没有外部监听控制就使用 LAN IP:6170
49 | if [ ! -n "$koolclash_api_host" ]; then
50 | dbus remove koolclash_api_host
51 | ext_control_ip=$lan_ip
52 | else
53 | ext_control_ip=$koolclash_api_host
54 | fi
55 |
56 | yq w -i $KSROOT/koolclash/config/origin.yml external-controller "$ext_control_ip:6170"
57 | # 启用 external-ui
58 | yq w -i $KSROOT/koolclash/config/origin.yml external-ui "/koolshare/webs/koolclash/"
59 | # 设置 secret
60 | yq w -i $KSROOT/koolclash/config/origin.yml secret "clash"
61 |
62 | cp $KSROOT/koolclash/config/origin.yml $KSROOT/koolclash/config/config.yaml
63 |
64 | #---------------------------------------------------------------------
65 | # 强制覆盖 DNS、Fake-IP 的设置
66 |
67 | overwrite_dns_config() {
68 | # 确保启用 DNS
69 | yq w -i $KSROOT/koolclash/config/config.yaml dns.enable "true"
70 | # 修改端口
71 | yq w -i $KSROOT/koolclash/config/config.yaml dns.listen "0.0.0.0:23453"
72 | # 修改模式
73 | yq w -i $KSROOT/koolclash/config/config.yaml dns.enhanced-mode "fake-ip"
74 | # Fake IP Range
75 | yq w -i $KSROOT/koolclash/config/config.yaml dns.fake-ip-range "198.18.0.1/16"
76 | }
77 | #---------------------------------------------------------------------
78 |
79 | # 判断是否存在 DNS 字段、DNS 是否启用、DNS 是否使用 redir-host / fake-ip 模式
80 | if [ $(yq r $KSROOT/koolclash/config/config.yaml dns.enable) == 'true' ] && [[ $(yq r $KSROOT/koolclash/config/config.yaml dns.enhanced-mode) == 'fake-ip' || $(yq r $KSROOT/koolclash/config/config.yaml dns.enhanced-mode) == 'redir-host' ]]; then
81 | if [ "$koolclash_dnsmode" == "2" ] && [ -n "$fallbackdns" ]; then
82 | # dnsmode 是 2 应该用自定义 DNS 配置进行覆盖
83 | echo_date "删除 Clash 配置文件中原有的 DNS 配置"
84 | yq d -i $KSROOT/koolclash/config/config.yaml dns
85 |
86 | echo_date "将提交的自定义 DNS 设置覆盖 Clash 配置文件..."
87 | # 将后备 DNS 配置以覆盖的方式与 config.yaml 合并
88 | yq m -x -i $KSROOT/koolclash/config/config.yaml $KSROOT/koolclash/config/dns.yml
89 | yq m -x -i $KSROOT/koolclash/config/config.yaml $KSROOT/koolclash/config/profile.yml
90 |
91 | dbus set koolclash_dnsmode=2
92 | else
93 | # 可能 dnsmode 是 2 但是没有自定义 DNS 配置;或者本来之前就是 1
94 | dbus set koolclash_dnsmode=1
95 | fi
96 |
97 | overwrite_dns_config
98 | echo_date "Clash 配置文件上传成功!"
99 | http_response 'success'
100 | else
101 | echo_date "在 Clash 配置文件中没有找到 DNS 配置!"
102 | if [ ! -n "$fallbackdns" ]; then
103 | echo_date "没有找到后备 DNS 配置!请前往「配置文件」提交后备 DNS 配置!"
104 | # 设置 DNS Mode 为 3
105 | dbus set koolclash_dnsmode=3
106 | http_response 'nofallbackdns'
107 | else
108 | echo_date "找到后备 DNS 配置!合并到 Clash 配置文件中..."
109 |
110 | dbus set koolclash_dnsmode=4
111 | # 将后备 DNS 配置以覆盖的方式与 config.yaml 合并
112 | echo_date "删除 Clash 配置文件中原有的 DNS 配置"
113 | yq d -i $KSROOT/koolclash/config/config.yaml dns
114 | yq m -x -i $KSROOT/koolclash/config/config.yaml $KSROOT/koolclash/config/dns.yml
115 | yq m -x -i $KSROOT/koolclash/config/config.yaml $KSROOT/koolclash/config/profile.yml
116 |
117 | overwrite_dns_config
118 |
119 | echo_date "Clash 配置文件上传成功!"
120 | http_response 'success'
121 | fi
122 | fi
123 |
124 | [ ! -z "$koolclash_firewall_blackip_base64" ] && dbus set koolclash_firewall_blackip_enable=1
125 | [ ! -z "$koolclash_firewall_blackdomain_base64" ] && dbus set koolclash_firewall_blackdomain_enable=1
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_save_control.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | source $KSROOT/bin/helper.sh
6 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
7 | eval $(dbus export koolclash_)
8 |
9 | lan_ip=$(ubus call network.interface.lan status | jsonfilter -e '@["ipv4-address"][0].address')
10 | wan_ip=$(ubus call network.interface.wan status | grep \"address\" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
11 |
12 | if [ ! -n "$2" ]; then
13 | dbus remove koolclash_api_host
14 | ext_control_ip=$lan_ip
15 | else
16 | dbus set koolclash_api_host=$2
17 | ext_control_ip=$2
18 | fi
19 |
20 | yq w -i $KSROOT/koolclash/config/config.yaml external-controller "$ext_control_ip:6170"
21 |
22 | http_response "$external_controller@$secret"
23 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_save_dns_config.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 | eval $(dbus export koolclash_)
7 |
8 | #---------------------------------------------------------------------
9 | # 强制覆盖 DNS、Fake-IP 的设置
10 |
11 | overwrite_dns_config() {
12 | # 启用 external-ui
13 | yq w -i $KSROOT/koolclash/config/config.yaml external-ui "/koolshare/webs/koolclash/"
14 | # 确保启用 DNS
15 | yq w -i $KSROOT/koolclash/config/config.yaml dns.enable "true"
16 | # 修改端口
17 | yq w -i $KSROOT/koolclash/config/config.yaml dns.listen "0.0.0.0:23453"
18 | # 修改模式
19 | yq w -i $KSROOT/koolclash/config/config.yaml dns.enhanced-mode "fake-ip"
20 | # Fake IP Range
21 | yq w -i $KSROOT/koolclash/config/config.yaml dns.fake-ip-range "198.18.0.1/16"
22 | }
23 | #---------------------------------------------------------------------
24 |
25 | touch $KSROOT/koolclash/config/dns.yml
26 |
27 | echo $2 | base64 -d | tee $KSROOT/koolclash/config/dns.yml
28 |
29 | fallbackdns=$(cat $KSROOT/koolclash/config/dns.yml)
30 |
31 | rm -rf $KSROOT/koolclash/config/config.yaml
32 | cp $KSROOT/koolclash/config/origin.yml $KSROOT/koolclash/config/config.yaml
33 |
34 | if [ "$koolclash_dnsmode" == "1" ] && [ "$3" == "1" ]; then
35 | # Clash 配置文件存在且 DNS 配置合法,不显示 DNS 配置输入,此时 dnsmode 为 1
36 | # 但是用户想要用自己的 DNS 配置覆盖
37 | if [ ! -n "$fallbackdns" ]; then
38 | # 你不是想覆盖 DNS 配置么怎么提交个空的上来?
39 | echo_date "没有找到自定义 DNS 配置!请前往「配置文件」提交 DNS 配置!"
40 | http_response 'nofallbackdns'
41 | else
42 | echo_date "删除 Clash 配置文件中原有的 DNS 配置"
43 | yq d -i $KSROOT/koolclash/config/config.yaml dns
44 |
45 | echo_date "将提交的自定义 DNS 设置覆盖 Clash 配置文件..."
46 | # 将后备 DNS 配置以覆盖的方式与 config.yaml 合并
47 | yq m -x -i $KSROOT/koolclash/config/config.yaml $KSROOT/koolclash/config/dns.yml
48 |
49 | overwrite_dns_config
50 | # 强制生效 DNS 配置,修改 dnsmode 为 2
51 | dbus set koolclash_dnsmode=2
52 | echo_date "后备 DNS 设置提交成功!"
53 | http_response 'success'
54 | fi
55 | elif [ "$koolclash_dnsmode" == "2" ] && [ "$3" == "0" ]; then
56 | # 用户已经要用自己的 DNS 配置覆盖,dnsmode 为 2
57 | # 但是取消勾选了 DNS 配置文件的勾,是想要还原原始 Clash 配置文件
58 | rm -rf $KSROOT/koolclash/config/config.yaml
59 | cp $KSROOT/koolclash/config/origin.yml $KSROOT/koolclash/config/config.yaml
60 | overwrite_dns_config
61 | dbus set koolclash_dnsmode=1
62 | echo_date "自定义 DNS 设置提交成功!"
63 | http_response 'success'
64 | elif [ "$koolclash_dnsmode" == "2" ] && [ "$3" == "1" ]; then
65 | # 用户已经要用自己的 DNS 配置覆盖,dnsmode 为 2
66 | if [ ! -n "$fallbackdns" ]; then
67 | # 看来你是想还原原始 Clash 配置文件同时还删除自定义 DNS 配置
68 | rm -rf $KSROOT/koolclash/config/config.yaml
69 | cp $KSROOT/koolclash/config/origin.yml $KSROOT/koolclash/config/config.yaml
70 | overwrite_dns_config
71 | dbus set koolclash_dnsmode=1
72 | echo_date "自定义 DNS 设置提交成功!"
73 | http_response 'success'
74 | else
75 | # 你应该是想更新一下自定义 DNS 配置
76 | echo_date "删除 Clash 配置文件中原有的 DNS 配置"
77 | yq d -i $KSROOT/koolclash/config/config.yaml dns
78 |
79 | echo_date "将提交的自定义 DNS 设置覆盖 Clash 配置文件..."
80 | # 将后备 DNS 配置以覆盖的方式与 config.yaml 合并
81 | yq m -x -i $KSROOT/koolclash/config/config.yaml $KSROOT/koolclash/config/dns.yml
82 |
83 |
84 | overwrite_dns_config
85 | # 强制生效 DNS 配置,修改 dnsmode 为 2
86 | dbus set koolclash_dnsmode=2
87 | echo_date "后备 DNS 设置提交成功!"
88 | http_response 'success'
89 | fi
90 | elif [ "$koolclash_dnsmode" == "3" ]; then
91 | # 你这是要提交自定义 DNS 配置来完善你上传的 Clash 配置文件
92 | if [ ! -n "$fallbackdns" ]; then
93 | # 本来你 Clash 配置就没有 DNS 配置了,你还提交个空的干嘛?
94 | echo_date "没有找到自定义 DNS 配置!请前往「配置文件」提交后备 DNS 配置!"
95 | http_response 'nofallbackdns'
96 | else
97 | echo_date "删除 Clash 配置文件中原有的 DNS 配置"
98 | yq d -i $KSROOT/koolclash/config/config.yaml dns
99 |
100 | echo_date "将提交的后备 DNS 设置合并到 Clash 配置文件中..."
101 | # 将后备 DNS 配置以覆盖的方式与 config.yaml 合并
102 | yq m -x -i $KSROOT/koolclash/config/config.yaml $KSROOT/koolclash/config/dns.yml
103 |
104 |
105 | overwrite_dns_config
106 |
107 | echo_date "后备 DNS 设置提交成功!"
108 | http_response 'success'
109 | fi
110 | elif [ "$koolclash_dnsmode" == "4" ]; then
111 | # 你已经提交了自定义 DNS 配置了,想要更新一下自定义配置
112 | if [ ! -n "$fallbackdns" ]; then
113 | # 你不是想更新吗,你还提交个空的干嘛?
114 | echo_date "没有找到自定义 DNS 配置!请前往「配置文件」提交后备 DNS 配置!"
115 | http_response 'nofallbackdns'
116 | else
117 | echo_date "删除 Clash 配置文件中原有的 DNS 配置"
118 | yq d -i $KSROOT/koolclash/config/config.yaml dns
119 |
120 | echo_date "将提交的后备 DNS 设置合并到 Clash 配置文件中..."
121 | # 将后备 DNS 配置以覆盖的方式与 config.yaml 合并
122 | yq m -x -i $KSROOT/koolclash/config/config.yaml $KSROOT/koolclash/config/dns.yml
123 |
124 |
125 | overwrite_dns_config
126 |
127 | echo_date "后备 DNS 设置提交成功!"
128 | http_response 'success'
129 | fi
130 | fi
131 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_status.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | eval $(dbus export koolclash_)
6 |
7 | lan_ip=$(ubus call network.interface.lan status | jsonfilter -e '@["ipv4-address"][0].address')
8 | #wan_ip=$(ubus call network.interface.wan status | grep \"address\" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
9 |
10 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
11 |
12 | pid_clash=$(pidof clash)
13 | pid_watchdog=$(ps | grep koolclash_watchdog.sh | grep -v grep | awk '{print $1}')
14 | date=$(echo_date)
15 |
16 | if [ ! -f $KSROOT/koolclash/config/config.yaml ]; then
17 | host=''
18 | secret=''
19 | else
20 | host=$(yq r /koolshare/koolclash/config/config.yaml external-controller)
21 | secret=$(yq r /koolshare/koolclash/config/config.yaml secret)
22 | fi
23 |
24 | if [ ! -f $KSROOT/koolclash/config/config.yaml ]; then
25 | # 没有找到 Clash 配置文件,不显示 DNS 配置输入,dnsmode 为 0
26 | dbus set koolclash_dnsmode=0
27 | dnsmode=0
28 | elif [ $koolclash_dnsmode = 2 ]; then
29 | # Clash 配置文件存在且 DNS 配置合法,但是用户选择了自定义 DNS 配置,显示 DNS 配置输入,dnsmode 为 2
30 | dnsmode=2
31 | elif [ $(yq r $KSROOT/koolclash/config/origin.yml dns.enable) == 'true' ] && [ $(yq r $KSROOT/koolclash/config/origin.yml dns.enhanced-mode) == 'fake-ip' ]; then
32 | # Clash 配置文件存在且 DNS 配置合法,不显示 DNS 配置输入,dnsmode 为 1
33 | dbus set koolclash_dnsmode=1
34 | dnsmode=1
35 | elif [ ! -f $KSROOT/koolclash/config/dns.yml ]; then
36 | dbus set koolclash_dnsmode=3
37 | # Clash 配置文件存在但 DNS 配置不存在或者不合法,并且没有提交独立 DNS 配置,显示 DNS 配置输入,dnsmode 为 3
38 | dnsmode=3
39 | else
40 | dbus set koolclash_dnsmode=4
41 | # Clash 配置文件存在但 DNS 配置不存在或者不合法,但是已经提交独立 DNS 配置,显示 DNS 配置输入,dnsmode 为 4
42 | dnsmode=4
43 | fi
44 |
45 | if [ -n "$pid_clash" ]; then
46 | text1="$date Clash 进程运行正常!(PID: $pid_clash)"
47 | else
48 | text1="$date Clash 进程未在运行!"
49 | fi
50 |
51 | if [ -n "$pid_watchdog" ]; then
52 | text2="$date Clash 看门狗运行正常!(PID: $pid_watchdog)"
53 | else
54 | text2="$date Clash 看门狗未在运行!"
55 | fi
56 |
57 | touch $KSROOT/koolclash/config/dns.yml
58 |
59 | fallbackdns=$(cat $KSROOT/koolclash/config/dns.yml | base64 | xargs)
60 |
61 | http_response "$text1@$text2@$dnsmode@$host@$secret@$lan_ip@$fallbackdns"
62 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_sub.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 | eval $(dbus export koolclash_)
7 | # From Koolshare DMZ Plugin
8 | lan_ip=$(ubus call network.interface.lan status | jsonfilter -e '@["ipv4-address"][0].address')
9 | wan_ip=$(ubus call network.interface.wan status | grep \"address\" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
10 |
11 | fallbackdns=$(cat $KSROOT/koolclash/config/dns.yml)
12 |
13 | # 如果没有外部监听控制就使用 LAN IP:6170
14 | if [ ! -n "$koolclash_api_host" ]; then
15 | dbus remove koolclash_api_host
16 | ext_control_ip=$lan_ip
17 | else
18 | ext_control_ip=$koolclash_api_host
19 | fi
20 |
21 | #---------------------------------------------------------------------
22 | # 强制覆盖 DNS、Fake-IP 的设置
23 |
24 | overwrite_dns_config() {
25 | # 确保启用 DNS
26 | yq w -i $KSROOT/koolclash/config/config.yaml dns.enable "true"
27 | # 修改端口
28 | yq w -i $KSROOT/koolclash/config/config.yaml dns.listen "0.0.0.0:23453"
29 | # 修改模式
30 | yq w -i $KSROOT/koolclash/config/config.yaml dns.enhanced-mode "fake-ip"
31 | # Fake IP Range
32 | yq w -i $KSROOT/koolclash/config/config.yaml dns.fake-ip-range "198.18.0.1/16"
33 | }
34 | #---------------------------------------------------------------------
35 |
36 | case $2 in
37 | del)
38 | if [ "$koolclash_update_mode" == "1" ]; then
39 | dbus remove koolclash_suburl
40 | CRONTAB_SUB=$(cat /etc/crontabs/root | grep koolclash_update_sub_cron.sh)
41 | [ ! -z "$CRONTAB_SUB" ] && echo_date "删除定时更新 Clash 配置文件CRON..." && sed -i '/koolclash_update_sub_cron/d' /etc/crontabs/root >/dev/null 2>&1
42 | http_response '1'
43 | else
44 | if [ "$koolclash_update_mode" == "2" ]; then
45 | dbus remove koolclash_subconverter_url
46 | CRONTAB_SUB=$(cat /etc/crontabs/root | grep koolclash_update_sub_cron.sh)
47 | [ ! -z "$CRONTAB_SUB" ] && echo_date "删除定时更新 Clash 配置文件CRON..." && sed -i '/koolclash_update_sub_cron/d' /etc/crontabs/root >/dev/null 2>&1
48 | http_response '2'
49 | fi
50 | fi
51 | ;;
52 |
53 | update)
54 | url=$(echo "$3" | base64 -d)
55 | if [ "$url" == "" ]; then
56 | # 你提交个空的上来干嘛?是不是想删掉?
57 | dbus remove koolclash_suburl
58 | http_response 'ok'
59 | else
60 | dbus set koolclash_suburl="$url"
61 | dbus set koolclash_update_mode=1
62 | sub_url=$(dbus get koolclash_suburl | sed -e 's;?;\\?;g' -e 's;&;\\&;g')
63 | curl=$(which curl)
64 |
65 | cp $KSROOT/koolclash/config/origin.yml $KSROOT/koolclash/config/origin-backup.yml
66 | rm -rf $KSROOT/koolclash/config/origin.yml
67 |
68 | if [ "x$curl" != "x" ] && [ -x $curl ]; then
69 | #$curl -L "$sub_url" -o $KSROOT/koolclash/config/origin.yml
70 | $KSROOT/scripts/koolclash_update_yaml.sh
71 | $KSROOT/koolclash/config/sub.sh
72 | sed -i '/^\-\-\-$/ d' $KSROOT/koolclash/config/origin.yml
73 | sed -i '/^\.\.\.$/ d' $KSROOT/koolclash/config/origin.yml
74 | else
75 | http_response 'nocurl'
76 | cp $KSROOT/koolclash/config/origin-backup.yml $KSROOT/koolclash/config/origin.yml
77 | exit 1
78 | fi
79 |
80 | if [ "$(yq r $KSROOT/koolclash/config/origin.yml port | sed 's|[0-9]||g')" == "" ]; then
81 | # 下载成功了
82 | rm -rf $KSROOT/koolclash/config/origin-backup.yml
83 |
84 | echo_date "设置 redir-port 和 allow-lan 属性"
85 | # 覆盖配置文件中的 redir-port 和 allow-lan 的配置
86 | yq w -i $KSROOT/koolclash/config/origin.yml redir-port 23456
87 | yq w -i $KSROOT/koolclash/config/origin.yml allow-lan true
88 |
89 | yq w -i $KSROOT/koolclash/config/origin.yml external-controller "$ext_control_ip:6170"
90 | # 启用 external-ui
91 | yq w -i $KSROOT/koolclash/config/origin.yml external-ui "/koolshare/webs/koolclash/"
92 | # 设置 secret
93 | yq w -i $KSROOT/koolclash/config/origin.yml secret "clash"
94 |
95 | # Change proxy mode
96 | if [ "$koolclash_switch_config_mode" == "1" ]; then
97 | yq w -i $KSROOT/koolclash/config/origin.yml mode "rule"
98 | elif [ "$koolclash_switch_config_mode" == "2" ]; then
99 | yq w -i $KSROOT/koolclash/config/origin.yml mode "global"
100 | elif [ "$koolclash_switch_config_mode" == "3" ]; then
101 | yq w -i $KSROOT/koolclash/config/origin.yml mode "direct"
102 | fi
103 |
104 | cp $KSROOT/koolclash/config/origin.yml $KSROOT/koolclash/config/config.yaml
105 |
106 | # 判断是否存在 DNS 字段、DNS 是否启用、DNS 是否使用 redir-host / fake-ip 模式
107 | if [ $(yq r $KSROOT/koolclash/config/config.yaml dns.enable) == 'true' ] && [[ $(yq r $KSROOT/koolclash/config/config.yaml dns.enhanced-mode) == 'fake-ip' || $(yq r $KSROOT/koolclash/config/config.yaml dns.enhanced-mode) == 'redir-host' ]]; then
108 | if [ "$koolclash_dnsmode" == "2" ] && [ -n "$fallbackdns" ]; then
109 | # dnsmode 是 2 应该用自定义 DNS 配置进行覆盖
110 | echo_date "删除 Clash 配置文件中原有的 DNS 配置"
111 | yq d -i $KSROOT/koolclash/config/config.yaml dns
112 |
113 | echo_date "将提交的自定义 DNS 设置覆盖 Clash 配置文件..."
114 | # 将后备 DNS 配置以覆盖的方式与 config.yaml 合并
115 | yq m -x -i $KSROOT/koolclash/config/config.yaml $KSROOT/koolclash/config/dns.yml
116 | yq m -x -i $KSROOT/koolclash/config/config.yaml $KSROOT/koolclash/config/profile.yml
117 | dbus set koolclash_dnsmode=2
118 | else
119 | # 可能 dnsmode 是 2 但是没有自定义 DNS 配置;或者本来之前就是 1
120 | dbus set koolclash_dnsmode=1
121 | fi
122 |
123 |
124 | overwrite_dns_config
125 | echo_date "Clash 配置文件上传成功!"
126 | http_response 'success'
127 | else
128 | echo_date "在 Clash 配置文件中没有找到 DNS 配置!"
129 | if [ ! -n "$fallbackdns" ]; then
130 | echo_date "没有找到后备 DNS 配置!请前往「配置文件」提交后备 DNS 配置!"
131 | # 设置 DNS Mode 为 3
132 | dbus set koolclash_dnsmode=3
133 | http_response 'nofallbackdns'
134 | else
135 | echo_date "找到后备 DNS 配置!合并到 Clash 配置文件中..."
136 |
137 | dbus set koolclash_dnsmode=4
138 | # 将后备 DNS 配置以覆盖的方式与 config.yaml 合并
139 | echo_date "删除 Clash 配置文件中原有的 DNS 配置"
140 | yq d -i $KSROOT/koolclash/config/config.yaml dns
141 | yq m -x -i $KSROOT/koolclash/config/config.yaml $KSROOT/koolclash/config/dns.yml
142 | yq m -x -i $KSROOT/koolclash/config/config.yaml $KSROOT/koolclash/config/profile.yml
143 |
144 | overwrite_dns_config
145 |
146 | echo_date "Clash 配置文件上传成功!"
147 | http_response 'success'
148 | fi
149 | fi
150 | else
151 | # 下载失败了
152 | rm -rf $KSROOT/koolclash/config/origin.yml
153 | cp $KSROOT/koolclash/config/origin-backup.yml $KSROOT/koolclash/config/origin.yml
154 | rm -rf $KSROOT/koolclash/config/origin-backup.yml
155 | http_response 'fail'
156 | fi
157 | fi
158 | ;;
159 | esac
160 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_switch_direct.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 |
7 | eval $(dbus export koolclash_)
8 |
9 | #提取 Clash 配置认证码
10 | secret=$(yq r $KSROOT/koolclash/config/config.yaml secret)
11 | #提取 Clash 配置监听端口和 IP 地址
12 | ipaddr_port=$(yq r $KSROOT/koolclash/config/config.yaml external-controller)
13 |
14 | curl -sv \
15 | -H "Authorization: Bearer $secret" \
16 | -X PATCH "http://$ipaddr_port/configs/" -d "{\"mode\": \"direct\"}" 2>&1
17 |
18 | curl -sv \
19 | -H "Authorization: Bearer $secret" \
20 | -X DELETE "http://$ipaddr_port/connections" 2>&1
21 |
22 | dbus set koolclash_switch_config_mode=3
23 | yq w -i $KSROOT/koolclash/config/config.yaml mode "Direct"
24 | http_response 'direct'
25 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_switch_global.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 |
7 | eval $(dbus export koolclash_)
8 |
9 | #提取 Clash 配置认证码
10 | secret=$(yq r $KSROOT/koolclash/config/config.yaml secret)
11 | #提取 Clash 配置监听端口和 IP 地址
12 | ipaddr_port=$(yq r $KSROOT/koolclash/config/config.yaml external-controller)
13 |
14 | curl -sv \
15 | -H "Authorization: Bearer $secret" \
16 | -X PATCH "http://$ipaddr_port/configs/" -d "{\"mode\": \"global\"}" 2>&1
17 |
18 | curl -sv \
19 | -H "Authorization: Bearer $secret" \
20 | -X DELETE "http://$ipaddr_port/connections" 2>&1
21 |
22 | dbus set koolclash_switch_config_mode=2
23 | yq w -i $KSROOT/koolclash/config/config.yaml mode "Global"
24 | http_response 'global'
25 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_switch_rule.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 |
7 | eval $(dbus export koolclash_)
8 |
9 | #提取 Clash 配置认证码
10 | secret=$(yq r $KSROOT/koolclash/config/config.yaml secret)
11 | #提取 Clash 配置监听端口和 IP 地址
12 | ipaddr_port=$(yq r $KSROOT/koolclash/config/config.yaml external-controller)
13 |
14 | curl -sv \
15 | -H "Authorization: Bearer $secret" \
16 | -X PATCH "http://$ipaddr_port/configs/" -d "{\"mode\": \"rule\"}" 2>&1
17 |
18 | curl -sv \
19 | -H "Authorization: Bearer $secret" \
20 | -X DELETE "http://$ipaddr_port/connections" 2>&1
21 |
22 | dbus set koolclash_switch_config_mode=1
23 | yq w -i $KSROOT/koolclash/config/config.yaml mode "Rule"
24 | http_response 'rule'
25 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_update_chn.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 | eval $(dbus export koolclash_)
7 |
8 | mkdir -p $KSROOT/koolclash/chn
9 |
10 | curl=$(which curl)
11 | wget=$(which wget)
12 |
13 | ipdb_url="https://ispip.clang.cn/all_cn.txt"
14 |
15 | rm -rf /tmp/upload/koolclash_log.txt && touch /tmp/upload/koolclash_log.txt
16 | sleep 1
17 |
18 | if [ "x$wget" != "x" ] && [ -x $wget ]; then
19 | command="$wget --no-check-certificate $ipdb_url -O $KSROOT/koolclash/all_cn.txt"
20 | elif [ "x$curl" != "x" ] && [ test -x $curl ]; then
21 | command="$curl -k --compressed $ipdb_url -o $KSROOT/koolclash/all_cn.txt"
22 | else
23 | echo_date "没有找到 wget 或 curl,无法更新 CHN 数据库!" >>/tmp/upload/koolclash_log.txt
24 | http_response 'nodl'
25 | exit 1
26 | fi
27 |
28 | echo_date "开始下载最新 CHN 数据库..." >>/tmp/upload/koolclash_log.txt
29 | $command
30 |
31 | if [ ! -f "$KSROOT/koolclash/all_cn.txt" ]; then
32 | echo_date "下载 CHN 数据库失败!" >>/tmp/upload/koolclash_log.txt
33 | exit 1
34 | fi
35 |
36 | echo_date "下载完成,开始复制" >>/tmp/upload/koolclash_log.txt
37 | cp -rf $KSROOT/koolclash/all_cn.txt $KSROOT/koolclash/chn
38 |
39 | version=$(ls --full-time $KSROOT/koolclash/all_cn.txt | awk '{print $6}')
40 |
41 | cp -rf $KSROOT/koolclash/chn/all_cn.txt $KSROOT/koolclash/config/china_ip_route.ipset
42 |
43 | echo_date "更新 CHN 数据库至 $version 版本" >>/tmp/upload/koolclash_log.txt
44 | dbus set koolclash_chn_version=$version
45 |
46 | echo_date "清理临时文件..." >>/tmp/upload/koolclash_log.txt
47 | rm -rf $KSROOT/koolclash/all_cn.txt
48 | rm -rf $KSROOT/koolclash/chn
49 |
50 | echo_date "CHN 数据库更新完成!" >>/tmp/upload/koolclash_log.txt
51 | echo_date "注意!新版 CHN 数据库将在下次启动 Clash 时生效!" >>/tmp/upload/koolclash_log.txt
52 |
53 | sleep 1
54 |
55 | echo "XU6J03M6" >>/tmp/upload/koolclash_log.txt
56 |
57 | http_response 'ok'
58 | exit 0
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_update_ipdb.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 |
7 | mkdir -p $KSROOT/koolclash/ipdb
8 |
9 | curl=$(which curl)
10 | wget=$(which wget)
11 |
12 | ipdb_url="http://www.ideame.top/mmdb/lite/Country.mmdb"
13 |
14 | rm -rf /tmp/upload/koolclash_log.txt && touch /tmp/upload/koolclash_log.txt
15 | sleep 1
16 |
17 | if [ "x$wget" != "x" ] && [ -x $wget ]; then
18 | command="$wget --no-check-certificate $ipdb_url -q -O $KSROOT/koolclash/Country.mmdb"
19 | else
20 | echo_date "没有找到 wget 或 curl,无法更新 IP 数据库!" >>/tmp/upload/koolclash_log.txt
21 | http_response 'nodl'
22 | exit 1
23 | fi
24 |
25 | echo_date "开始下载最新 IP 数据库..." >>/tmp/upload/koolclash_log.txt
26 | $command
27 |
28 | if [ ! -f "$KSROOT/koolclash/Country.mmdb" ]; then
29 | echo_date "下载 IP 数据库失败!" >>/tmp/upload/koolclash_log.txt
30 | exit 1
31 | fi
32 |
33 | echo_date "下载完成,开始复制" >>/tmp/upload/koolclash_log.txt
34 | cp -rf $KSROOT/koolclash/Country.mmdb $KSROOT/koolclash/ipdb
35 |
36 | chmod 644 $KSROOT/koolclash/ipdb/*
37 | version=$(ls --full-time $KSROOT/koolclash/Country.mmdb | awk '{print $6}')
38 |
39 | cp -rf $KSROOT/koolclash/ipdb/Country.mmdb $KSROOT/koolclash/config
40 |
41 | echo_date "更新 IP 数据库至 $version 版本" >>/tmp/upload/koolclash_log.txt
42 | dbus set koolclash_ipdb_version=$version
43 |
44 | echo_date "清理临时文件..." >>/tmp/upload/koolclash_log.txt
45 | rm -rf $KSROOT/koolclash/Country.mmdb
46 | rm -rf $KSROOT/koolclash/ipdb
47 |
48 | echo_date "IP 数据库更新完成!" >>/tmp/upload/koolclash_log.txt
49 | echo_date "注意!新版 IP 数据库将在下次启动 Clash 时生效!" >>/tmp/upload/koolclash_log.txt
50 |
51 | sleep 1
52 |
53 | echo "XU6J03M6" >>/tmp/upload/koolclash_log.txt
54 |
55 | http_response 'ok'
56 | exit 0
57 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_update_sub_config.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 | eval $(dbus export koolclash_)
7 |
8 | enable=`echo ${2:0:1}`
9 | time=`echo ${2:2}`
10 |
11 | dbus set koolclash_update_sub_enable=$enable
12 | dbus set koolclash_update_sub_time=$time
13 |
14 | sub_enable=$(dbus get koolclash_update_sub_enable)
15 | sub_time=$(dbus get koolclash_update_sub_time)
16 |
17 | rm -rf /tmp/upload/koolclash_log.txt && touch /tmp/upload/koolclash_log.txt
18 | sleep 1
19 |
20 | if [ "$koolclash_enable" == "1" ]; then
21 | if [ "$sub_enable" == "1" ]; then
22 | [ ! -f "/etc/crontabs/root" ] && touch /etc/crontabs/root
23 | CRONTAB_SUB=$(cat /etc/crontabs/root | grep koolclash_update_sub_cron.sh)
24 | if [ -f "$KSROOT/koolclash/config/sub.sh" ]; then
25 | sed -i '/koolclash_update_sub_cron/d' /etc/crontabs/root >/dev/null 2>&1
26 | echo_date "每天 $sub_time 点定时更新 Clash 配置文件命令写入CRON中..." >>/tmp/upload/koolclash_log.txt && echo "0 $sub_time * * * $KSROOT/scripts/koolclash_update_sub_cron.sh update" >> /etc/crontabs/root
27 | else
28 | echo_date "更新 Clash 配置文件命令写入CRON失败!" >>/tmp/upload/koolclash_log.txt
29 | fi
30 | else
31 | CRONTAB_SUB=$(cat /etc/crontabs/root | grep koolclash_update_sub_cron.sh)
32 | [ ! -z "$CRONTAB_SUB" ] && echo_date "删除定时更新 Clash 配置文件CRON..." >>/tmp/upload/koolclash_log.txt && sed -i '/koolclash_update_sub_cron/d' /etc/crontabs/root >/dev/null 2>&1
33 | fi
34 | else
35 | if [ "$sub_enable" == "1" ]; then
36 | CRONTAB_SUB=$(cat /etc/crontabs/root | grep koolclash_update_sub_cron.sh)
37 | [ ! -z "$CRONTAB_SUB" ] && echo_date "删除定时更新 Clash 配置文件CRON..." >>/tmp/upload/koolclash_log.txt && sed -i '/koolclash_update_sub_cron/d' /etc/crontabs/root >/dev/null 2>&1
38 | fi
39 | fi
40 |
41 | http_response "ok"
42 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_update_yaml.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 | eval $(dbus export koolclash_)
7 | sub_url=$(dbus get koolclash_suburl | sed -e 's;?;\\?;g' -e 's;&;\\&;g')
8 |
9 | rm -rf $KSROOT/koolclash/config/sub.sh > /dev/null 2>&1
10 |
11 | echo -e "
12 | #!/bin/sh
13 | curl=\$(which curl)
14 | \$curl -L ${sub_url} -o ${KSROOT}/koolclash/config/origin.yml
15 | sub_time=\$(date +%Y-%m-%d\ %X)
16 | dbus set koolclash_config_version=\"\$sub_time\"" >> $KSROOT/koolclash/config/sub.sh
17 |
18 | sed -i '/^$/d' $KSROOT/koolclash/config/sub.sh
19 | chmod -R 755 $KSROOT/koolclash/config/sub.sh
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_watchdog.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | eval $(dbus export koolclash_)
6 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
7 |
8 | while [ "$koolclash_enable" == "1" ]; do
9 | echo_date "开始检查进程状态..."
10 |
11 | if [ ! -n "$(pidof clash)" ]; then
12 | start-stop-daemon -S -q -b -m \
13 | -p /tmp/run/koolclash.pid \
14 | -x /koolshare/bin/clash \
15 | -- -d $KSROOT/koolclash/config/
16 | echo_date "重启 Clash 进程"
17 | fi
18 |
19 | sleep 15
20 | continue
21 | done
22 |
--------------------------------------------------------------------------------
/koolclash/scripts/koolclash_watchdog_config.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 | alias echo_date='echo 【$(date +%Y年%m月%d日\ %X)】:'
6 | eval $(dbus export koolclash_)
7 |
8 | dbus set koolclash_watchdog_enable=$2
9 |
10 | http_response "ok"
11 |
--------------------------------------------------------------------------------
/koolclash/uninstall.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 |
3 | export KSROOT=/koolshare
4 | source $KSROOT/scripts/base.sh
5 |
6 | if [ -d "$KSROOT/koolclash" ]; then
7 | sh $KSROOT/scripts/koolclash_control.sh stop >/dev/null 2>&1
8 | sleep 2
9 | fi
10 |
11 | rm -rf $KSROOT/koolclash
12 | rm -rf $KSROOT/scripts/koolclash_*
13 | rm -rf $KSROOT/init.d/S99koolclash.sh
14 | rm -rf $KSROOT/bin/clash
15 | rm -rf $KSROOT/bin/clash-linux-amd64
16 | rm -rf $KSROOT/bin/yq
17 | rm -rf $KSROOT/bin/subconverter
18 | rm -rf $KSROOT/webs/Module_koolclash.asp
19 | rm -rf $KSROOT/webs/koolclash
20 | rm -rf $KSROOT/webs/res/icon-koolclash*
21 | rm -rf $KSROOT/webs/res/koolclash_*
22 |
23 | rm -rf /tmp/luci-*
24 |
25 | confs=$(dbus list koolclash | cut -d "=" -f1)
26 | for conf in $confs; do
27 | dbus remove $conf
28 | done
29 |
30 | dbus remove softcenter_module_koolclash_description
31 | dbus remove softcenter_module_koolclash_install
32 | dbus remove softcenter_module_koolclash_name
33 | dbus remove softcenter_module_koolclash_title
34 | dbus remove softcenter_module_koolclash_version
35 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/CNAME:
--------------------------------------------------------------------------------
1 | yacd.haishan.me
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/_headers:
--------------------------------------------------------------------------------
1 | # for netlify hosting
2 | # https://docs.netlify.com/routing/headers/#syntax-for-the-headers-file
3 |
4 | /*
5 | X-Frame-Options: DENY
6 | X-XSS-Protection: 1; mode=block
7 | X-Content-Type-Options: nosniff
8 | Referrer-Policy: same-origin
9 | /*.css
10 | Cache-Control: public, max-age=31536000, immutable
11 | /*.js
12 | Cache-Control: public, max-age=31536000, immutable
13 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/apple-touch-icon-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/webs/koolclash/apple-touch-icon-precomposed.png
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Config.38113279.js:
--------------------------------------------------------------------------------
1 | var J=Object.defineProperty,K=Object.defineProperties;var Q=Object.getOwnPropertyDescriptors;var b=Object.getOwnPropertySymbols;var R=Object.prototype.hasOwnProperty,T=Object.prototype.propertyIsEnumerable;var $=(e,t,a)=>t in e?J(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,p=(e,t)=>{for(var a in t||(t={}))R.call(t,a)&&$(e,a,t[a]);if(b)for(var a of b(t))T.call(t,a)&&$(e,a,t[a]);return e},f=(e,t)=>K(e,Q(t));var M=(e,t)=>{var a={};for(var o in e)R.call(e,o)&&t.indexOf(o)<0&&(a[o]=e[o]);if(e!=null&&b)for(var o of b(e))t.indexOf(o)<0&&T.call(e,o)&&(a[o]=e[o]);return a};import{r as X,b as c,j as n,P as w,s as A,R as Y,c as Z,i as ee,k as z,l as E,n as te,h as B,d as D,o as ne,g as U,q as ae,t as oe,v as _,w as le,u as se,C as re,x as ce,B as ie,y as de,z as ue}from"./index.27058ddf.js";import{r as pe}from"./logs.7cc467a0.js";import{S as x}from"./Select.4987ab41.js";function he(e,t){if(e==null)return{};var a=ge(e,t),o,r;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r=0)&&(!Object.prototype.propertyIsEnumerable.call(e,o)||(a[o]=e[o]))}return a}function ge(e,t){if(e==null)return{};var a={},o=Object.keys(e),r,s;for(s=0;s=0)&&(a[r]=e[r]);return a}var I=X.exports.forwardRef(function(e,t){var a=e.color,o=a===void 0?"currentColor":a,r=e.size,s=r===void 0?24:r,u=he(e,["color","size"]);return c("svg",f(p({ref:t,xmlns:"http://www.w3.org/2000/svg",width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:o,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},u),{children:[n("path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"}),n("polyline",{points:"16 17 21 12 16 7"}),n("line",{x1:"21",y1:"12",x2:"9",y2:"12"})]}))});I.propTypes={color:w.string,size:w.oneOfType([w.string,w.number])};I.displayName="LogOut";var fe=I;const{useState:me,useRef:ve,useEffect:ye,useCallback:Ce}=Y;function be(e){return n("input",p({className:A.input},e))}function we(a){var o=a,{value:e}=o,t=M(o,["value"]);const[r,s]=me(e),u=ve(e);ye(()=>{u.current!==e&&s(e),u.current=e},[e]);const g=Ce(k=>s(k.target.value),[s]);return n("input",p({className:A.input,value:r,onChange:g},t))}const ke="_root_1tdl3_1",Se="_section_1tdl3_2",_e="_wrapSwitch_1tdl3_26",xe="_sep_1tdl3_32",Oe="_label_1tdl3_45";var d={root:ke,section:Se,wrapSwitch:_e,sep:xe,label:Oe};const Ie="_fieldset_1ghjp_1",Ne="_input_1ghjp_9",Pe="_cnt_1ghjp_9";var O={fieldset:Ie,input:Ne,cnt:Pe};function Le({OptionComponent:e,optionPropsList:t,selectedIndex:a,onChange:o}){const r=Z("visually-hidden",O.input),s=u=>{o(u.target.value)};return n("fieldset",{className:O.fieldset,children:t.map((u,g)=>c("label",{children:[n("input",{type:"radio",checked:a===g,name:"selection",value:g,"aria-labelledby":"traffic chart type "+g,onChange:s,className:r}),n("div",{className:O.cnt,children:n(e,p({},u))})]},g))})}const{useMemo:je}=B,$e={plugins:{legend:{display:!1}},scales:{x:{display:!1,type:"category"},y:{display:!1,type:"linear"}}},V=[23e3,35e3,46e3,33e3,9e4,68e3,23e3,45e3],Re=[184e3,183e3,196e3,182e3,19e4,186e3,182e3,189e3],Te=V;function Me({id:e}){const t=ee.read(),a=je(()=>({labels:Te,datasets:[f(p(p({},z),E[e].up),{data:V}),f(p(p({},z),E[e].down),{data:Re})]}),[e]),o="chart-"+e;return te(t.Chart,o,a,null,$e),n("div",{style:{width:100,padding:5},children:n("canvas",{id:o})})}const{useEffect:W,useState:ze,useCallback:m,useRef:Ee,useMemo:Ae}=B,Be=[{id:0},{id:1},{id:2},{id:3}],De=[["debug","Debug"],["warning","Warning"],["info","Info"],["error","Error"],["silent","Silent"]],Ue=[{key:"port",label:"HTTP Proxy Port"},{key:"socks-port",label:"SOCKS5 Proxy Port"},{key:"mixed-port",label:"Mixed Port"},{key:"redir-port",label:"Redir Port"}],Ve=[["zh","\u4E2D\u6587"],["en","English"]],We=[["Global","Global"],["Rule","Rule"],["Direct","Direct"]],He=e=>({configs:ne(e),apiConfig:U(e)}),Ge=e=>({selectedChartStyleIndex:de(e),latencyTestUrl:ue(e),apiConfig:U(e)}),qe=D(Ge)(Je);var Ze=D(He)(Fe);function Fe({dispatch:e,configs:t,apiConfig:a}){return W(()=>{e(ae(a))},[e,a]),n(qe,{configs:t})}function Je({dispatch:e,configs:t,selectedChartStyleIndex:a,latencyTestUrl:o,apiConfig:r}){const[s,u]=ze(t),g=Ee(t);W(()=>{g.current!==t&&u(t),g.current=t},[t]);const k=m(()=>{e(oe("apiConfig"))},[e]),v=m((l,i)=>{u(f(p({},s),{[l]:i}))},[s]),H=m(l=>{const i="allow-lan",h=l;v(i,h),e(_(r,{"allow-lan":h}))},[r,e,v]),y=m(({name:l,value:i})=>{switch(l){case"mode":case"log-level":v(l,i),e(_(r,{[l]:i})),l==="log-level"&&pe(f(p({},r),{logLevel:i}));break;case"redir-port":case"socks-port":case"mixed-port":case"port":if(i!==""){const h=parseInt(i,10);if(h<0||h>65535)return}v(l,i);break;default:return}},[r,e,v]),G=m(l=>y(l.target),[y]),{selectChartStyleIndex:q,updateAppConfig:N}=le(),P=m(l=>{const i=l.target,{name:h,value:j}=i;switch(h){case"port":case"socks-port":case"mixed-port":case"redir-port":{const S=parseInt(j,10);if(S<0||S>65535)return;e(_(r,{[h]:S}));break}case"latencyTestUrl":{N(h,j);break}default:throw new Error(`unknown input name ${h}`)}},[r,e,N]),F=Ae(()=>{const l=s.mode;return typeof l=="string"&&l[0].toUpperCase()+l.slice(1)},[s.mode]),{t:C,i18n:L}=se();return c("div",{children:[n(re,{title:C("Config")}),c("div",{className:d.root,children:[Ue.map(l=>s[l.key]!==void 0?c("div",{children:[n("div",{className:d.label,children:l.label}),n(be,{name:l.key,value:s[l.key],onChange:G,onBlur:P})]},l.key):null),c("div",{children:[n("div",{className:d.label,children:"Mode"}),n(x,{options:We,selected:F,onChange:l=>y({name:"mode",value:l.target.value})})]}),c("div",{children:[n("div",{className:d.label,children:"Log Level"}),n(x,{options:De,selected:s["log-level"],onChange:l=>y({name:"log-level",value:l.target.value})})]}),c("div",{children:[n("div",{className:d.label,children:"Allow LAN"}),n("div",{className:d.wrapSwitch,children:n(ce,{name:"allow-lan",checked:s["allow-lan"],onChange:H})})]})]}),n("div",{className:d.sep,children:n("div",{})}),c("div",{className:d.section,children:[c("div",{children:[n("div",{className:d.label,children:C("latency_test_url")}),n(we,{name:"latencyTestUrl",type:"text",value:o,onBlur:P})]}),c("div",{children:[n("div",{className:d.label,children:C("lang")}),n("div",{children:n(x,{options:Ve,selected:L.language,onChange:l=>L.changeLanguage(l.target.value)})})]}),c("div",{children:[n("div",{className:d.label,children:C("chart_style")}),n(Le,{OptionComponent:Me,optionPropsList:Be,selectedIndex:a,onChange:q})]}),c("div",{children:[n("div",{className:d.label,children:"Action"}),n(ie,{start:n(fe,{size:16}),label:"Switch backend",onClick:k})]})]})]})}export{Ze as default};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Config.56241d16.js:
--------------------------------------------------------------------------------
1 | import{r as U,b as c,j as t,i as y,s as P,R as V,c as W,k as H,l as N,n as L,o as G,h as j,d as $,q,g as R,t as F,v as J,w as b,x as K,u as Q,C as X,y as Y,B as Z,z as ee,A as te}from"./index.31d0d1dc.js";import{r as ne}from"./logs.975cc896.js";import{S as w}from"./Select.f2dd4970.js";function ae(e,s){if(e==null)return{};var r=oe(e,s),l,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0)&&(!Object.prototype.propertyIsEnumerable.call(e,l)||(r[l]=e[l]))}return r}function oe(e,s){if(e==null)return{};var r={},l=Object.keys(e),a,o;for(o=0;o=0)&&(r[a]=e[a]);return r}var S=U.exports.forwardRef(function(e,s){var r=e.color,l=r===void 0?"currentColor":r,a=e.size,o=a===void 0?24:a,u=ae(e,["color","size"]);return c("svg",{ref:s,xmlns:"http://www.w3.org/2000/svg",width:o,height:o,viewBox:"0 0 24 24",fill:"none",stroke:l,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...u,children:[t("path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"}),t("polyline",{points:"16 17 21 12 16 7"}),t("line",{x1:"21",y1:"12",x2:"9",y2:"12"})]})});S.propTypes={color:y.exports.string,size:y.exports.oneOfType([y.exports.string,y.exports.number])};S.displayName="LogOut";const se=S,{useState:le,useRef:re,useEffect:ce,useCallback:ie}=V;function de(e){return t("input",{className:P.input,...e})}function ue({value:e,...s}){const[r,l]=le(e),a=re(e);ce(()=>{a.current!==e&&l(e),a.current=e},[e]);const o=ie(u=>l(u.target.value),[l]);return t("input",{className:P.input,value:r,onChange:o,...s})}const pe="_root_1tdl3_1",he="_section_1tdl3_2",ge="_wrapSwitch_1tdl3_26",fe="_sep_1tdl3_32",me="_label_1tdl3_45",d={root:pe,section:he,wrapSwitch:ge,sep:fe,label:me},ve="_fieldset_1ghjp_1",ye="_input_1ghjp_9",Ce="_cnt_1ghjp_9",k={fieldset:ve,input:ye,cnt:Ce};function be({OptionComponent:e,optionPropsList:s,selectedIndex:r,onChange:l}){const a=W("visually-hidden",k.input),o=u=>{l(u.target.value)};return t("fieldset",{className:k.fieldset,children:s.map((u,h)=>c("label",{children:[t("input",{type:"radio",checked:r===h,name:"selection",value:h,"aria-labelledby":"traffic chart type "+h,onChange:o,className:a}),t("div",{className:k.cnt,children:t(e,{...u})})]},h))})}const{useMemo:we}=j,ke={plugins:{legend:{display:!1}},scales:{x:{display:!1,type:"category"},y:{display:!1,type:"linear"}}},T=[23e3,35e3,46e3,33e3,9e4,68e3,23e3,45e3],Se=[184e3,183e3,196e3,182e3,19e4,186e3,182e3,189e3],_e=T;function xe({id:e}){const s=H.read(),r=we(()=>({labels:_e,datasets:[{...N,...L[e].up,data:T},{...N,...L[e].down,data:Se}]}),[e]),l="chart-"+e;return G(s.Chart,l,r,null,ke),t("div",{style:{width:100,padding:5},children:t("canvas",{id:l})})}const{useEffect:M,useState:Oe,useCallback:g,useRef:Ie,useMemo:Ne}=j,Le=[{id:0},{id:1},{id:2},{id:3}],Pe=[["debug","Debug"],["info","Info"],["warning","Warning"],["error","Error"],["silent","Silent"]],je=[{key:"port",label:"HTTP Proxy Port"},{key:"socks-port",label:"SOCKS5 Proxy Port"},{key:"mixed-port",label:"Mixed Port"},{key:"redir-port",label:"Redir Port"}],$e=[["zh","\u4E2D\u6587"],["en","English"]],Re=[["Global","Global"],["Rule","Rule"],["Direct","Direct"]],Te=e=>({configs:q(e),apiConfig:R(e)}),Me=e=>({selectedChartStyleIndex:ee(e),latencyTestUrl:te(e),apiConfig:R(e)}),ze=$(Me)(Ee),Ve=$(Te)(Ae);function Ae({dispatch:e,configs:s,apiConfig:r}){return M(()=>{e(F(r))},[e,r]),t(ze,{configs:s})}function Ee({dispatch:e,configs:s,selectedChartStyleIndex:r,latencyTestUrl:l,apiConfig:a}){const[o,u]=Oe(s),h=Ie(s);M(()=>{h.current!==s&&u(s),h.current=s},[s]);const z=g(()=>{e(J("apiConfig"))},[e]),f=g((n,i)=>{u({...o,[n]:i})},[o]),A=g(n=>{const i="allow-lan",p=n;f(i,p),e(b(a,{"allow-lan":p}))},[a,e,f]),m=g(({name:n,value:i})=>{switch(n){case"mode":case"log-level":f(n,i),e(b(a,{[n]:i})),n==="log-level"&&ne({...a,logLevel:i});break;case"redir-port":case"socks-port":case"mixed-port":case"port":if(i!==""){const p=parseInt(i,10);if(p<0||p>65535)return}f(n,i);break;default:return}},[a,e,f]),E=g(n=>m(n.target),[m]),{selectChartStyleIndex:B,updateAppConfig:_}=K(),x=g(n=>{const i=n.target,{name:p,value:I}=i;switch(p){case"port":case"socks-port":case"mixed-port":case"redir-port":{const C=parseInt(I,10);if(C<0||C>65535)return;e(b(a,{[p]:C}));break}case"latencyTestUrl":{_(p,I);break}default:throw new Error(`unknown input name ${p}`)}},[a,e,_]),D=Ne(()=>{const n=o.mode;return typeof n=="string"&&n[0].toUpperCase()+n.slice(1)},[o.mode]),{t:v,i18n:O}=Q();return c("div",{children:[t(X,{title:v("Config")}),c("div",{className:d.root,children:[je.map(n=>o[n.key]!==void 0?c("div",{children:[t("div",{className:d.label,children:n.label}),t(de,{name:n.key,value:o[n.key],onChange:E,onBlur:x})]},n.key):null),c("div",{children:[t("div",{className:d.label,children:"Mode"}),t(w,{options:Re,selected:D,onChange:n=>m({name:"mode",value:n.target.value})})]}),c("div",{children:[t("div",{className:d.label,children:"Log Level"}),t(w,{options:Pe,selected:o["log-level"],onChange:n=>m({name:"log-level",value:n.target.value})})]}),c("div",{children:[t("div",{className:d.label,children:"Allow LAN"}),t("div",{className:d.wrapSwitch,children:t(Y,{name:"allow-lan",checked:o["allow-lan"],onChange:A})})]})]}),t("div",{className:d.sep,children:t("div",{})}),c("div",{className:d.section,children:[c("div",{children:[t("div",{className:d.label,children:v("latency_test_url")}),t(ue,{name:"latencyTestUrl",type:"text",value:l,onBlur:x})]}),c("div",{children:[t("div",{className:d.label,children:v("lang")}),t("div",{children:t(w,{options:$e,selected:O.language,onChange:n=>O.changeLanguage(n.target.value)})})]}),c("div",{children:[t("div",{className:d.label,children:v("chart_style")}),t(be,{OptionComponent:xe,optionPropsList:Le,selectedIndex:r,onChange:B})]}),c("div",{children:[t("div",{className:d.label,children:"Action"}),t(Z,{start:t(se,{size:16}),label:"Switch backend",onClick:z})]})]})]})}export{Ve as default};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Config.58870520.css:
--------------------------------------------------------------------------------
1 | ._root_1tdl3_1,._section_1tdl3_2{display:grid;grid-template-columns:repeat(auto-fill,minmax(345px,1fr));max-width:900px;gap:5px}@media screen and (min-width: 30em){._root_1tdl3_1,._section_1tdl3_2{gap:15px}}._root_1tdl3_1,._section_1tdl3_2{padding:6px 15px 10px}@media screen and (min-width: 30em){._root_1tdl3_1,._section_1tdl3_2{padding:10px 40px 15px}}._wrapSwitch_1tdl3_26{height:40px;display:flex;align-items:center}._sep_1tdl3_32{max-width:900px;padding:0 15px}@media screen and (min-width: 30em){._sep_1tdl3_32{padding:0 40px}}._sep_1tdl3_32>div{border-top:1px dashed #373737}._label_1tdl3_45{padding:11px 0}._fieldset_1ghjp_1{margin:0;padding:0;border:0;display:flex;flex-wrap:wrap}._input_1ghjp_9+._cnt_1ghjp_9{border:1px solid transparent;border-radius:8px;cursor:pointer;margin-right:5px;margin-bottom:5px}._input_1ghjp_9:focus+._cnt_1ghjp_9{border-color:#387cec}._input_1ghjp_9:checked+._cnt_1ghjp_9{border-color:#387cec}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Config.72936d5e.js:
--------------------------------------------------------------------------------
1 | var J=Object.defineProperty,q=Object.defineProperties;var F=Object.getOwnPropertyDescriptors;var v=Object.getOwnPropertySymbols;var O=Object.prototype.hasOwnProperty,R=Object.prototype.propertyIsEnumerable;var P=(e,n,l)=>n in e?J(e,n,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[n]=l,u=(e,n)=>{for(var l in n||(n={}))O.call(n,l)&&P(e,l,n[l]);if(v)for(var l of v(n))R.call(n,l)&&P(e,l,n[l]);return e},E=(e,n)=>q(e,F(n));var A=(e,n)=>{var l={};for(var s in e)O.call(e,s)&&n.indexOf(s)<0&&(l[s]=e[s]);if(e!=null&&v)for(var s of v(e))n.indexOf(s)<0&&R.call(e,s)&&(l[s]=e[s]);return l};import{R as m,g as K,r as t,k as W,J as Q,j as X}from"./vendor.3cf270b6.js";import{r as Y}from"./logs.8963bea3.js";import{S}from"./Select.9583f722.js";import{s as M,b as Z,d as T,e as $,u as ee,c as j,h as te,g as B,i as ne,o as ae,j as k,k as le,C as se,l as re,B as oe,n as ce,q as ie}from"./index.d6596dd6.js";const{useState:pe,useRef:ue,useEffect:me,useCallback:de}=m;function ge(e){return m.createElement("input",u({className:M.input},e))}function fe(l){var s=l,{value:e}=s,n=A(s,["value"]);const[i,r]=pe(e),d=ue(e);me(()=>{d.current!==e&&r(e),d.current=e},[e]);const g=de(b=>r(b.target.value),[r]);return m.createElement("input",u({className:M.input,value:i,onChange:g},n))}const xe="_root_1tdl3_1",Ee="_section_1tdl3_2",he="_wrapSwitch_1tdl3_26",Ce="_sep_1tdl3_32",ve="_label_1tdl3_45";var c={root:xe,section:Ee,wrapSwitch:he,sep:Ce,label:ve};const be="_fieldset_1ghjp_1",ye="_input_1ghjp_9",Se="_cnt_1ghjp_9";var _={fieldset:be,input:ye,cnt:Se};function ke({OptionComponent:e,optionPropsList:n,selectedIndex:l,onChange:s}){const i=K("visually-hidden",_.input),r=d=>{s(d.target.value)};return m.createElement("fieldset",{className:_.fieldset},n.map((d,g)=>m.createElement("label",{key:g},m.createElement("input",{type:"radio",checked:l===g,name:"selection",value:g,"aria-labelledby":"traffic chart type "+g,onChange:r,className:i}),m.createElement("div",{className:_.cnt},m.createElement(e,u({},d))))))}const _e={legend:{display:!1},scales:{xAxes:[{display:!1}],yAxes:[{display:!1}]}},D=[23e3,35e3,46e3,33e3,9e4,68e3,23e3,45e3],we=[184e3,183e3,196e3,182e3,19e4,186e3,182e3,189e3],Ie=D;function Ne({id:e}){const n=Z.read(),l=t.exports.useMemo(()=>({labels:Ie,datasets:[E(u(u({},T),$[e].up),{data:D}),E(u(u({},T),$[e].down),{data:we})]}),[e]),s="chart-"+e;return ee(n,s,l,null,_e),m.createElement("div",{style:{width:100,padding:5}},m.createElement("canvas",{id:s}))}const{useEffect:U,useState:Le,useCallback:f,useRef:Pe,useMemo:Oe}=X,Re=[{id:0},{id:1},{id:2},{id:3}],Ae=[["debug","Debug"],["warning","Warning"],["info","Info"],["error","Error"],["silent","Silent"]],Te=[{key:"port",label:"HTTP Proxy Port"},{key:"socks-port",label:"SOCKS5 Proxy Port"},{key:"mixed-port",label:"Mixed Port"},{key:"redir-port",label:"Redir Port"}],$e=[["zh","\u4E2D\u6587"],["en","English"]],Me=[["Global","Global"],["Rule","Rule"],["Direct","Direct"]],je=e=>({configs:te(e),apiConfig:B(e)}),Be=e=>({selectedChartStyleIndex:ce(e),latencyTestUrl:ie(e),apiConfig:B(e)}),De=j(Be)(Ve);var Fe=j(je)(Ue);function Ue({dispatch:e,configs:n,apiConfig:l}){return U(()=>{e(ne(l))},[e,l]),t.exports.createElement(De,{configs:n})}function Ve({dispatch:e,configs:n,selectedChartStyleIndex:l,latencyTestUrl:s,apiConfig:i}){const[r,d]=Le(n),g=Pe(n);U(()=>{g.current!==n&&d(n),g.current=n},[n]);const b=f(()=>{e(ae("apiConfig"))},[e]),x=f((a,o)=>{d(E(u({},r),{[a]:o}))},[r]),V=f(a=>{const o="allow-lan",p=a;x(o,p),e(k(i,{"allow-lan":p}))},[i,e,x]),h=f(({name:a,value:o})=>{switch(a){case"mode":case"log-level":x(a,o),e(k(i,{[a]:o})),a==="log-level"&&Y(E(u({},i),{logLevel:o}));break;case"redir-port":case"socks-port":case"mixed-port":case"port":if(o!==""){const p=parseInt(o,10);if(p<0||p>65535)return}x(a,o);break;default:return}},[i,e,x]),z=f(a=>h(a.target),[h]),{selectChartStyleIndex:G,updateAppConfig:w}=le(),I=f(a=>{const o=a.target,{name:p,value:L}=o;switch(p){case"port":case"socks-port":case"mixed-port":case"redir-port":{const y=parseInt(L,10);if(y<0||y>65535)return;e(k(i,{[p]:y}));break}case"latencyTestUrl":{w(p,L);break}default:throw new Error(`unknown input name ${p}`)}},[i,e,w]),H=Oe(()=>{const a=r.mode;return typeof a=="string"&&a[0].toUpperCase()+a.slice(1)},[r.mode]),{t:C,i18n:N}=W();return t.exports.createElement("div",null,t.exports.createElement(se,{title:C("Config")}),t.exports.createElement("div",{className:c.root},Te.map(a=>r[a.key]!==void 0?t.exports.createElement("div",{key:a.key},t.exports.createElement("div",{className:c.label},a.label),t.exports.createElement(ge,{name:a.key,value:r[a.key],onChange:z,onBlur:I})):null),t.exports.createElement("div",null,t.exports.createElement("div",{className:c.label},"Mode"),t.exports.createElement(S,{options:Me,selected:H,onChange:a=>h({name:"mode",value:a.target.value})})),t.exports.createElement("div",null,t.exports.createElement("div",{className:c.label},"Log Level"),t.exports.createElement(S,{options:Ae,selected:r["log-level"],onChange:a=>h({name:"log-level",value:a.target.value})})),t.exports.createElement("div",null,t.exports.createElement("div",{className:c.label},"Allow LAN"),t.exports.createElement("div",{className:c.wrapSwitch},t.exports.createElement(re,{name:"allow-lan",checked:r["allow-lan"],onChange:V})))),t.exports.createElement("div",{className:c.sep},t.exports.createElement("div",null)),t.exports.createElement("div",{className:c.section},t.exports.createElement("div",null,t.exports.createElement("div",{className:c.label},C("latency_test_url")),t.exports.createElement(fe,{name:"latencyTestUrl",type:"text",value:s,onBlur:I})),t.exports.createElement("div",null,t.exports.createElement("div",{className:c.label},C("lang")),t.exports.createElement("div",null,t.exports.createElement(S,{options:$e,selected:N.language,onChange:a=>N.changeLanguage(a.target.value)}))),t.exports.createElement("div",null,t.exports.createElement("div",{className:c.label},C("chart_style")),t.exports.createElement(ke,{OptionComponent:Ne,optionPropsList:Re,selectedIndex:l,onChange:G})),t.exports.createElement("div",null,t.exports.createElement("div",{className:c.label},"Action"),t.exports.createElement(oe,{start:t.exports.createElement(Q,{size:16}),label:"Switch backend",onClick:b}))))}export{Fe as default};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Config.7bc73fad.css:
--------------------------------------------------------------------------------
1 | ._root_1tdl3_1,._section_1tdl3_2{display:grid;grid-template-columns:repeat(auto-fill,minmax(345px,1fr));max-width:900px;gap:5px}@media screen and (min-width: 30em){._root_1tdl3_1,._section_1tdl3_2{gap:15px}}._root_1tdl3_1,._section_1tdl3_2{padding:6px 15px 10px}@media screen and (min-width: 30em){._root_1tdl3_1,._section_1tdl3_2{padding:10px 40px 15px}}._wrapSwitch_1tdl3_26{height:40px;display:flex;align-items:center}._sep_1tdl3_32{max-width:900px;padding:0 15px}@media screen and (min-width: 30em){._sep_1tdl3_32{padding:0 40px}}._sep_1tdl3_32>div{border-top:1px dashed #373737}._label_1tdl3_45{padding:11px 0}._fieldset_1ghjp_1{margin:0;padding:0;border:0;display:flex;flex-wrap:wrap}._input_1ghjp_9+._cnt_1ghjp_9{border:1px solid transparent;border-radius:8px;cursor:pointer;margin-right:5px;margin-bottom:5px}._input_1ghjp_9:focus+._cnt_1ghjp_9{border-color:#387cec}._input_1ghjp_9:checked+._cnt_1ghjp_9{border-color:#387cec}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Connections.1e70ab68.css:
--------------------------------------------------------------------------------
1 | .react-tabs{-webkit-tap-highlight-color:transparent}.react-tabs__tab-list{margin:0 0 10px;padding:0 30px}.react-tabs__tab{display:inline-flex;align-items:center;border:1px solid transparent;border-radius:5px;bottom:-1px;position:relative;list-style:none;padding:6px 10px;cursor:pointer;font-size:1.2em;opacity:.5}.react-tabs__tab--selected{opacity:1}.react-tabs__tab--disabled{color:GrayText;cursor:default}.react-tabs__tab:focus{border-color:#0188fe;outline:none}.react-tabs__tab:focus:after{content:"";position:absolute}.react-tabs__tab-panel{display:none}.react-tabs__tab-panel--selected{display:block}._placeHolder_12xws_1{height:100%;display:flex;align-items:center;justify-content:center;color:var(--color-background);opacity:.1}._connQty_12xws_10{font-family:var(--font-normal);font-size:.75em;margin-left:3px;padding:2px 7px;display:inline-flex;justify-content:center;align-items:center;background-color:var(--bg-near-transparent);border-radius:30px}._inputWrapper_12xws_22{margin:0 30px;width:100%;max-width:350px;justify-self:flex-end}._input_12xws_22{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:18px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;height:36px;outline:none;padding:0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._tr_198pq_1{display:grid;grid-template-columns:repeat(11,minmax(-webkit-max-content,auto));grid-template-columns:repeat(11,minmax(max-content,auto))}._th_198pq_7{padding:8px 10px;height:50px;background:var(--color-background);position:-webkit-sticky;position:sticky;top:0;font-size:.8em;text-align:center;-webkit-user-select:none;user-select:none;display:flex;align-items:center;justify-content:space-between}._th_198pq_7:hover{color:var(--color-text-highlight)}._td_198pq_24{padding:8px 13px;font-size:.9em;font-family:var(--font-normal)}._td_198pq_24._odd_198pq_30{background:var(--color-row-odd)}._du_198pq_35{text-align:right}._sortIconContainer_198pq_39{display:inline-flex;margin-left:10px;width:16px;height:16px}._rotate180_198pq_46{-webkit-transform:rotate(180deg);transform:rotate(180deg)}._overlay_148w6_1{background-color:#0009}._cnt_148w6_5{background-color:var(--bg-modal);color:var(--color-text);max-width:300px;line-height:1.4;-webkit-transform:translate(-50%,-50%) scale(1.2);transform:translate(-50%,-50%) scale(1.2);opacity:.6;transition:all .3s ease}._afterOpen_148w6_15{opacity:1;-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}._btngrp_148w6_20{display:flex;align-items:center;justify-content:center;margin-top:30px}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Connections.c7e8fa7e.css:
--------------------------------------------------------------------------------
1 | .react-tabs{-webkit-tap-highlight-color:transparent}.react-tabs__tab-list{margin:0 0 10px;padding:0 30px}.react-tabs__tab{display:inline-flex;align-items:center;border:1px solid transparent;border-radius:5px;bottom:-1px;position:relative;list-style:none;padding:6px 10px;cursor:pointer;font-size:1.2em;opacity:.5}.react-tabs__tab--selected{opacity:1}.react-tabs__tab--disabled{color:GrayText;cursor:default}.react-tabs__tab:focus{border-color:#0188fe;outline:none}.react-tabs__tab:focus:after{content:"";position:absolute}.react-tabs__tab-panel{display:none}.react-tabs__tab-panel--selected{display:block}._placeHolder_12xws_1{height:100%;display:flex;align-items:center;justify-content:center;color:var(--color-background);opacity:.1}._connQty_12xws_10{font-family:var(--font-normal);font-size:.75em;margin-left:3px;padding:2px 7px;display:inline-flex;justify-content:center;align-items:center;background-color:var(--bg-near-transparent);border-radius:30px}._inputWrapper_12xws_22{margin:0 30px;width:100%;max-width:350px;justify-self:flex-end}._input_12xws_22{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:18px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;height:36px;outline:none;padding:0 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._tr_198pq_1{display:grid;grid-template-columns:repeat(11,minmax(-webkit-max-content,auto));grid-template-columns:repeat(11,minmax(max-content,auto))}._th_198pq_7{padding:8px 10px;height:50px;background:var(--color-background);position:-webkit-sticky;position:sticky;top:0;font-size:.8em;text-align:center;-webkit-user-select:none;user-select:none;display:flex;align-items:center;justify-content:space-between}._th_198pq_7:hover{color:var(--color-text-highlight)}._td_198pq_24{padding:8px 13px;font-size:.9em;font-family:var(--font-normal)}._td_198pq_24._odd_198pq_30{background:var(--color-row-odd)}._du_198pq_35{text-align:right}._sortIconContainer_198pq_39{display:inline-flex;margin-left:10px;width:16px;height:16px}._rotate180_198pq_46{-webkit-transform:rotate(180deg);transform:rotate(180deg)}._overlay_148w6_1{background-color:#0009}._cnt_148w6_5{background-color:var(--bg-modal);color:var(--color-text);max-width:300px;line-height:1.4;-webkit-transform:translate(-50%,-50%) scale(1.2);transform:translate(-50%,-50%) scale(1.2);opacity:.6;transition:all .3s ease}._afterOpen_148w6_15{opacity:1;-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}._btngrp_148w6_20{display:flex;align-items:center;justify-content:center;margin-top:30px}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Fab.33a60e0e.css:
--------------------------------------------------------------------------------
1 | .rtf{box-sizing:border-box;margin:25px;position:fixed;white-space:nowrap;z-index:9998;padding-left:0;list-style:none}.rtf.open .rtf--mb{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.rtf.open .rtf--mb>ul{list-style:none;margin:0;padding:0}.rtf.open .rtf--ab__c:hover>span{transition:ease-in-out opacity .2s;opacity:.9}.rtf.open .rtf--ab__c>span.always-show{transition:ease-in-out opacity .2s;opacity:.9}.rtf.open .rtf--ab__c:nth-child(1){-webkit-transform:translateY(-60px) scale(1);transform:translateY(-60px) scale(1);transition-delay:.03s}.rtf.open .rtf--ab__c:nth-child(1).top{-webkit-transform:translateY(60px) scale(1);transform:translateY(60px) scale(1)}.rtf.open .rtf--ab__c:nth-child(2){-webkit-transform:translateY(-120px) scale(1);transform:translateY(-120px) scale(1);transition-delay:.09s}.rtf.open .rtf--ab__c:nth-child(2).top{-webkit-transform:translateY(120px) scale(1);transform:translateY(120px) scale(1)}.rtf.open .rtf--ab__c:nth-child(3){-webkit-transform:translateY(-180px) scale(1);transform:translateY(-180px) scale(1);transition-delay:.12s}.rtf.open .rtf--ab__c:nth-child(3).top{-webkit-transform:translateY(180px) scale(1);transform:translateY(180px) scale(1)}.rtf.open .rtf--ab__c:nth-child(4){-webkit-transform:translateY(-240px) scale(1);transform:translateY(-240px) scale(1);transition-delay:.15s}.rtf.open .rtf--ab__c:nth-child(4).top{-webkit-transform:translateY(240px) scale(1);transform:translateY(240px) scale(1)}.rtf.open .rtf--ab__c:nth-child(5){-webkit-transform:translateY(-300px) scale(1);transform:translateY(-300px) scale(1);transition-delay:.18s}.rtf.open .rtf--ab__c:nth-child(5).top{-webkit-transform:translateY(300px) scale(1);transform:translateY(300px) scale(1)}.rtf.open .rtf--ab__c:nth-child(6){-webkit-transform:translateY(-360px) scale(1);transform:translateY(-360px) scale(1);transition-delay:.21s}.rtf.open .rtf--ab__c:nth-child(6).top{-webkit-transform:translateY(360px) scale(1);transform:translateY(360px) scale(1)}.rtf--mb__c{padding:25px;margin:-25px}.rtf--mb__c *:last-child{margin-bottom:0}.rtf--mb__c:hover>span{transition:ease-in-out opacity .2s;opacity:.9}.rtf--mb__c>span.always-show{transition:ease-in-out opacity .2s;opacity:.9}.rtf--mb__c>span{opacity:0;transition:ease-in-out opacity .2s;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);margin-right:6px;margin-left:4px;background:rgba(0,0,0,.75);padding:2px 4px;border-radius:2px;color:#fff;font-size:13px;box-shadow:0 0 4px #00000024,0 4px 8px #00000047}.rtf--mb__c>span.right{right:100%}.rtf--mb{width:48px;height:48px;background:var(--btn-bg);z-index:9999;display:inline-flex;justify-content:center;align-items:center;position:relative;border:none;border-radius:50%;box-shadow:0 0 4px #00000024,0 4px 8px #00000047;cursor:pointer;outline:none;padding:0;-webkit-user-drag:none;font-weight:700;color:#f1f1f1;font-size:18px}.rtf--mb>*{transition:ease-in-out transform .2s}.rtf--ab__c{display:block;position:absolute;top:0;right:1px;padding:10px 0;margin:-10px 0;transition:ease-in-out transform .2s}.rtf--ab__c>span{opacity:0;transition:ease-in-out opacity .2s;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);margin-right:6px;background:rgba(0,0,0,.75);padding:2px 4px;border-radius:2px;color:#fff;font-size:13px;box-shadow:0 0 4px #00000024,0 4px 8px #00000047}.rtf--ab__c>span.right{right:100%}.rtf--ab__c:nth-child(1){-webkit-transform:translateY(-60px) scale(0);transform:translateY(-60px) scale(0);transition-delay:.21s}.rtf--ab__c:nth-child(1).top{-webkit-transform:translateY(60px) scale(0);transform:translateY(60px) scale(0)}.rtf--ab__c:nth-child(2){-webkit-transform:translateY(-120px) scale(0);transform:translateY(-120px) scale(0);transition-delay:.18s}.rtf--ab__c:nth-child(2).top{-webkit-transform:translateY(120px) scale(0);transform:translateY(120px) scale(0)}.rtf--ab__c:nth-child(3){-webkit-transform:translateY(-180px) scale(0);transform:translateY(-180px) scale(0);transition-delay:.15s}.rtf--ab__c:nth-child(3).top{-webkit-transform:translateY(180px) scale(0);transform:translateY(180px) scale(0)}.rtf--ab__c:nth-child(4){-webkit-transform:translateY(-240px) scale(0);transform:translateY(-240px) scale(0);transition-delay:.12s}.rtf--ab__c:nth-child(4).top{-webkit-transform:translateY(240px) scale(0);transform:translateY(240px) scale(0)}.rtf--ab__c:nth-child(5){-webkit-transform:translateY(-300px) scale(0);transform:translateY(-300px) scale(0);transition-delay:.09s}.rtf--ab__c:nth-child(5).top{-webkit-transform:translateY(300px) scale(0);transform:translateY(300px) scale(0)}.rtf--ab__c:nth-child(6){-webkit-transform:translateY(-360px) scale(0);transform:translateY(-360px) scale(0);transition-delay:.03s}.rtf--ab__c:nth-child(6).top{-webkit-transform:translateY(360px) scale(0);transform:translateY(360px) scale(0)}.rtf--ab{height:40px;width:40px;margin-right:4px;background-color:#aaa;display:inline-flex;justify-content:center;align-items:center;position:relative;border:none;border-radius:50%;box-shadow:0 0 4px #00000024,0 4px 8px #00000047;cursor:pointer;outline:none;padding:0;-webkit-user-drag:none;font-weight:700;color:#f1f1f1;font-size:16px;z-index:10000}.rtf--ab:hover{background:#387cec;border:1px solid #387cec;color:#fff}.rtf--ab:focus{border-color:var(--color-focus-blue)}._spining_4i8sg_1{position:relative;border-radius:50%;background:linear-gradient(60deg,#e66465,#9198e5);width:48px;height:48px;display:flex;justify-content:center;align-items:center}._spining_4i8sg_1:before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;border:2px solid transparent;border-top-color:currentColor;border-radius:50%;-webkit-animation:_spining_keyframes_4i8sg_1 1s linear infinite;animation:_spining_keyframes_4i8sg_1 1s linear infinite}@-webkit-keyframes _spining_keyframes_4i8sg_1{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes _spining_keyframes_4i8sg_1{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Fab.4a89b536.js:
--------------------------------------------------------------------------------
1 | import{j as e,b,h as y,r as l}from"./index.31d0d1dc.js";const F="_spining_4i8sg_1",M="_spining_keyframes_4i8sg_1",j={spining:F,spining_keyframes:M},{useState:v}=y;function B({children:s}){return e("span",{className:j.spining,children:s})}const H={right:10,bottom:10},L=({children:s,...n})=>e("button",{type:"button",...n,className:"rtf--ab",children:s}),E=({children:s,...n})=>e("button",{type:"button",className:"rtf--mb",...n,children:s}),O={bottom:24,right:24},R=({event:s="hover",style:n=O,alwaysShowTitle:i=!1,children:f,icon:g,mainButtonStyles:h,onClick:p,text:d,..._})=>{const[a,r]=v(!1),c=i||!a,u=()=>r(!0),m=()=>r(!1),x=()=>s==="hover"&&u(),k=()=>s==="hover"&&m(),N=t=>p?p(t):(t.persist(),s==="click"?a?m():u():null),$=(t,o)=>{t.persist(),r(!1),setTimeout(()=>{o(t)},1)},C=()=>l.exports.Children.map(f,(t,o)=>l.exports.isValidElement(t)?b("li",{className:`rtf--ab__c ${"top"in n?"top":""}`,children:[l.exports.cloneElement(t,{"data-testid":`action-button-${o}`,"aria-label":t.props.text||`Menu button ${o+1}`,"aria-hidden":c,tabIndex:a?0:-1,...t.props,onClick:I=>{t.props.onClick&&$(I,t.props.onClick)}}),t.props.text&&e("span",{className:`${"right"in n?"right":""} ${i?"always-show":""}`,"aria-hidden":c,children:t.props.text})]}):null);return e("ul",{onMouseEnter:x,onMouseLeave:k,className:`rtf ${a?"open":"closed"}`,"data-testid":"fab",style:n,..._,children:b("li",{className:"rtf--mb__c",children:[e(E,{onClick:N,style:h,"data-testid":"main-button",role:"button","aria-label":"Floating menu",tabIndex:0,children:g}),d&&e("span",{className:`${"right"in n?"right":""} ${i?"always-show":""}`,"aria-hidden":c,children:d}),e("ul",{children:C()})]})})};export{L as A,R as F,B as I,H as p};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Fab.78b2c04b.js:
--------------------------------------------------------------------------------
1 | var A=Object.defineProperty,B=Object.defineProperties;var j=Object.getOwnPropertyDescriptors;var p=Object.getOwnPropertySymbols;var k=Object.prototype.hasOwnProperty,N=Object.prototype.propertyIsEnumerable;var _=(t,e,s)=>e in t?A(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s,o=(t,e)=>{for(var s in e||(e={}))k.call(e,s)&&_(t,s,e[s]);if(p)for(var s of p(e))N.call(e,s)&&_(t,s,e[s]);return t},b=(t,e)=>B(t,j(e));var c=(t,e)=>{var s={};for(var n in t)k.call(t,n)&&e.indexOf(n)<0&&(s[n]=t[n]);if(t!=null&&p)for(var n of p(t))e.indexOf(n)<0&&N.call(t,n)&&(s[n]=t[n]);return s};import{r,j as H}from"./vendor.3cf270b6.js";const L="_spining_4i8sg_1",R="_spining_keyframes_4i8sg_1";var V={spining:L,spining_keyframes:R};const{useState:q}=H;function K({children:t}){return r.exports.createElement("span",{className:V.spining},t)}const P={right:10,bottom:10},Q=s=>{var n=s,{children:t}=n,e=c(n,["children"]);return r.exports.createElement("button",b(o({type:"button"},e),{className:"rtf--ab"}),t)},w=s=>{var n=s,{children:t}=n,e=c(n,["children"]);return r.exports.createElement("button",o({type:"button",className:"rtf--mb"},e),t)},z={bottom:24,right:24},S=D=>{var g=D,{event:t="hover",style:e=z,alwaysShowTitle:s=!1,children:n,icon:$,mainButtonStyles:h,onClick:d,text:f}=g,v=c(g,["event","style","alwaysShowTitle","children","icon","mainButtonStyles","onClick","text"]);const[i,m]=q(!1),u=s||!i,x=()=>m(!0),E=()=>m(!1),C=()=>t==="hover"&&x(),I=()=>t==="hover"&&E(),y=a=>d?d(a):(a.persist(),t==="click"?i?E():x():null),F=(a,l)=>{a.persist(),m(!1),setTimeout(()=>{l(a)},1)},M=()=>r.exports.Children.map(n,(a,l)=>r.exports.isValidElement(a)?r.exports.createElement("li",{className:`rtf--ab__c ${"top"in e?"top":""}`},r.exports.cloneElement(a,b(o({"data-testid":`action-button-${l}`,"aria-label":a.props.text||`Menu button ${l+1}`,"aria-hidden":u,tabIndex:i?0:-1},a.props),{onClick:O=>{a.props.onClick&&F(O,a.props.onClick)}})),a.props.text&&r.exports.createElement("span",{className:`${"right"in e?"right":""} ${s?"always-show":""}`,"aria-hidden":u},a.props.text)):null);return r.exports.createElement("ul",o({onMouseEnter:C,onMouseLeave:I,className:`rtf ${i?"open":"closed"}`,"data-testid":"fab",style:e},v),r.exports.createElement("li",{className:"rtf--mb__c"},r.exports.createElement(w,{onClick:y,style:h,"data-testid":"main-button",role:"button","aria-label":"Floating menu",tabIndex:0},$),f&&r.exports.createElement("span",{className:`${"right"in e?"right":""} ${s?"always-show":""}`,"aria-hidden":u},f),r.exports.createElement("ul",null,M())))};export{Q as A,S as F,K as I,P as p};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Fab.a0a7e573.css:
--------------------------------------------------------------------------------
1 | .rtf{box-sizing:border-box;margin:25px;position:fixed;white-space:nowrap;z-index:9998;padding-left:0;list-style:none}.rtf.open .rtf--mb{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.rtf.open .rtf--mb>ul{list-style:none;margin:0;padding:0}.rtf.open .rtf--ab__c:hover>span{transition:ease-in-out opacity .2s;opacity:.9}.rtf.open .rtf--ab__c>span.always-show{transition:ease-in-out opacity .2s;opacity:.9}.rtf.open .rtf--ab__c:nth-child(1){-webkit-transform:translateY(-60px) scale(1);transform:translateY(-60px) scale(1);transition-delay:.03s}.rtf.open .rtf--ab__c:nth-child(1).top{-webkit-transform:translateY(60px) scale(1);transform:translateY(60px) scale(1)}.rtf.open .rtf--ab__c:nth-child(2){-webkit-transform:translateY(-120px) scale(1);transform:translateY(-120px) scale(1);transition-delay:.09s}.rtf.open .rtf--ab__c:nth-child(2).top{-webkit-transform:translateY(120px) scale(1);transform:translateY(120px) scale(1)}.rtf.open .rtf--ab__c:nth-child(3){-webkit-transform:translateY(-180px) scale(1);transform:translateY(-180px) scale(1);transition-delay:.12s}.rtf.open .rtf--ab__c:nth-child(3).top{-webkit-transform:translateY(180px) scale(1);transform:translateY(180px) scale(1)}.rtf.open .rtf--ab__c:nth-child(4){-webkit-transform:translateY(-240px) scale(1);transform:translateY(-240px) scale(1);transition-delay:.15s}.rtf.open .rtf--ab__c:nth-child(4).top{-webkit-transform:translateY(240px) scale(1);transform:translateY(240px) scale(1)}.rtf.open .rtf--ab__c:nth-child(5){-webkit-transform:translateY(-300px) scale(1);transform:translateY(-300px) scale(1);transition-delay:.18s}.rtf.open .rtf--ab__c:nth-child(5).top{-webkit-transform:translateY(300px) scale(1);transform:translateY(300px) scale(1)}.rtf.open .rtf--ab__c:nth-child(6){-webkit-transform:translateY(-360px) scale(1);transform:translateY(-360px) scale(1);transition-delay:.21s}.rtf.open .rtf--ab__c:nth-child(6).top{-webkit-transform:translateY(360px) scale(1);transform:translateY(360px) scale(1)}.rtf--mb__c{padding:25px;margin:-25px}.rtf--mb__c *:last-child{margin-bottom:0}.rtf--mb__c:hover>span{transition:ease-in-out opacity .2s;opacity:.9}.rtf--mb__c>span.always-show{transition:ease-in-out opacity .2s;opacity:.9}.rtf--mb__c>span{opacity:0;transition:ease-in-out opacity .2s;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);margin-right:6px;margin-left:4px;background:rgba(0,0,0,.75);padding:2px 4px;border-radius:2px;color:#fff;font-size:13px;box-shadow:0 0 4px #00000024,0 4px 8px #00000047}.rtf--mb__c>span.right{right:100%}.rtf--mb{width:48px;height:48px;background:var(--btn-bg);z-index:9999;display:inline-flex;justify-content:center;align-items:center;position:relative;border:none;border-radius:50%;box-shadow:0 0 4px #00000024,0 4px 8px #00000047;cursor:pointer;outline:none;padding:0;-webkit-user-drag:none;font-weight:700;color:#f1f1f1;font-size:18px}.rtf--mb>*{transition:ease-in-out transform .2s}.rtf--ab__c{display:block;position:absolute;top:0;right:1px;padding:10px 0;margin:-10px 0;transition:ease-in-out transform .2s}.rtf--ab__c>span{opacity:0;transition:ease-in-out opacity .2s;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);margin-right:6px;background:rgba(0,0,0,.75);padding:2px 4px;border-radius:2px;color:#fff;font-size:13px;box-shadow:0 0 4px #00000024,0 4px 8px #00000047}.rtf--ab__c>span.right{right:100%}.rtf--ab__c:nth-child(1){-webkit-transform:translateY(-60px) scale(0);transform:translateY(-60px) scale(0);transition-delay:.21s}.rtf--ab__c:nth-child(1).top{-webkit-transform:translateY(60px) scale(0);transform:translateY(60px) scale(0)}.rtf--ab__c:nth-child(2){-webkit-transform:translateY(-120px) scale(0);transform:translateY(-120px) scale(0);transition-delay:.18s}.rtf--ab__c:nth-child(2).top{-webkit-transform:translateY(120px) scale(0);transform:translateY(120px) scale(0)}.rtf--ab__c:nth-child(3){-webkit-transform:translateY(-180px) scale(0);transform:translateY(-180px) scale(0);transition-delay:.15s}.rtf--ab__c:nth-child(3).top{-webkit-transform:translateY(180px) scale(0);transform:translateY(180px) scale(0)}.rtf--ab__c:nth-child(4){-webkit-transform:translateY(-240px) scale(0);transform:translateY(-240px) scale(0);transition-delay:.12s}.rtf--ab__c:nth-child(4).top{-webkit-transform:translateY(240px) scale(0);transform:translateY(240px) scale(0)}.rtf--ab__c:nth-child(5){-webkit-transform:translateY(-300px) scale(0);transform:translateY(-300px) scale(0);transition-delay:.09s}.rtf--ab__c:nth-child(5).top{-webkit-transform:translateY(300px) scale(0);transform:translateY(300px) scale(0)}.rtf--ab__c:nth-child(6){-webkit-transform:translateY(-360px) scale(0);transform:translateY(-360px) scale(0);transition-delay:.03s}.rtf--ab__c:nth-child(6).top{-webkit-transform:translateY(360px) scale(0);transform:translateY(360px) scale(0)}.rtf--ab{height:40px;width:40px;margin-right:4px;background-color:#aaa;display:inline-flex;justify-content:center;align-items:center;position:relative;border:none;border-radius:50%;box-shadow:0 0 4px #00000024,0 4px 8px #00000047;cursor:pointer;outline:none;padding:0;-webkit-user-drag:none;font-weight:700;color:#f1f1f1;font-size:16px;z-index:10000}.rtf--ab:hover{background:#387cec;border:1px solid #387cec;color:#fff}.rtf--ab:focus{border-color:var(--color-focus-blue)}._spining_4i8sg_1{position:relative;border-radius:50%;background:linear-gradient(60deg,#e66465,#9198e5);width:48px;height:48px;display:flex;justify-content:center;align-items:center}._spining_4i8sg_1:before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;border:2px solid transparent;border-top-color:currentColor;border-radius:50%;-webkit-animation:_spining_keyframes_4i8sg_1 1s linear infinite;animation:_spining_keyframes_4i8sg_1 1s linear infinite}@-webkit-keyframes _spining_keyframes_4i8sg_1{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes _spining_keyframes_4i8sg_1{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Fab.b64825a9.js:
--------------------------------------------------------------------------------
1 | var B=Object.defineProperty,H=Object.defineProperties;var L=Object.getOwnPropertyDescriptors;var p=Object.getOwnPropertySymbols;var N=Object.prototype.hasOwnProperty,$=Object.prototype.propertyIsEnumerable;var k=(t,s,n)=>s in t?B(t,s,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[s]=n,o=(t,s)=>{for(var n in s||(s={}))N.call(s,n)&&k(t,n,s[n]);if(p)for(var n of p(s))$.call(s,n)&&k(t,n,s[n]);return t},r=(t,s)=>H(t,L(s));var d=(t,s)=>{var n={};for(var e in t)N.call(t,e)&&s.indexOf(e)<0&&(n[e]=t[e]);if(t!=null&&p)for(var e of p(t))s.indexOf(e)<0&&$.call(t,e)&&(n[e]=t[e]);return n};import{j as i,b as v,r as b,h as R}from"./index.27058ddf.js";const V="_spining_4i8sg_1",q="_spining_keyframes_4i8sg_1";var w={spining:V,spining_keyframes:q};const{useState:z}=R;function Q({children:t}){return i("span",{className:w.spining,children:t})}const S={right:10,bottom:10},U=n=>{var e=n,{children:t}=e,s=d(e,["children"]);return i("button",r(o({type:"button"},s),{className:"rtf--ab",children:t}))},D=n=>{var e=n,{children:t}=e,s=d(e,["children"]);return i("button",r(o({type:"button",className:"rtf--mb"},s),{children:t}))},G={bottom:24,right:24},W=J=>{var h=J,{event:t="hover",style:s=G,alwaysShowTitle:n=!1,children:e,icon:C,mainButtonStyles:I,onClick:f,text:g}=h,y=d(h,["event","style","alwaysShowTitle","children","icon","mainButtonStyles","onClick","text"]);const[l,u]=z(!1),m=n||!l,_=()=>u(!0),x=()=>u(!1),F=()=>t==="hover"&&_(),M=()=>t==="hover"&&x(),j=a=>f?f(a):(a.persist(),t==="click"?l?x():_():null),E=(a,c)=>{a.persist(),u(!1),setTimeout(()=>{c(a)},1)},O=()=>b.exports.Children.map(e,(a,c)=>b.exports.isValidElement(a)?v("li",{className:`rtf--ab__c ${"top"in s?"top":""}`,children:[b.exports.cloneElement(a,r(o({"data-testid":`action-button-${c}`,"aria-label":a.props.text||`Menu button ${c+1}`,"aria-hidden":m,tabIndex:l?0:-1},a.props),{onClick:A=>{a.props.onClick&&E(A,a.props.onClick)}})),a.props.text&&i("span",{className:`${"right"in s?"right":""} ${n?"always-show":""}`,"aria-hidden":m,children:a.props.text})]}):null);return i("ul",r(o({onMouseEnter:F,onMouseLeave:M,className:`rtf ${l?"open":"closed"}`,"data-testid":"fab",style:s},y),{children:v("li",{className:"rtf--mb__c",children:[i(D,{onClick:j,style:I,"data-testid":"main-button",role:"button","aria-label":"Floating menu",tabIndex:0,children:C}),g&&i("span",{className:`${"right"in s?"right":""} ${n?"always-show":""}`,"aria-hidden":m,children:g}),i("ul",{children:O()})]})}))};export{U as A,W as F,Q as I,S as p};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Logs.029b1e0c.css:
--------------------------------------------------------------------------------
1 | ._RuleSearch_1gcst_1{padding:0 40px 5px}._RuleSearchContainer_1gcst_5{position:relative;height:40px}._inputWrapper_1gcst_10{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);left:0;width:100%}._input_1gcst_10{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:20px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;height:40px;outline:none;padding:0 15px 0 35px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._iconWrapper_1gcst_35{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);left:10px}._logMeta_1dg5t_1{display:flex;align-items:center;flex-wrap:wrap;font-size:.9em}._logType_1dg5t_8{color:#eee;flex-shrink:0;text-align:center;width:66px;border-radius:100px;padding:3px 5px;margin:0 8px}._logTime_1dg5t_18{flex-shrink:0;color:#999;font-size:14px}._logText_1dg5t_24{flex-shrink:0;display:flex;font-family:Roboto Mono,Menlo,monospace;align-items:center;padding:8px 0;width:100%;white-space:pre;overflow:auto}._logsWrapper_1dg5t_37{margin:0;padding:0;color:var(--color-text)}._logsWrapper_1dg5t_37 .log{padding:10px 40px;background:var(--color-background)}._logsWrapper_1dg5t_37 .log.even{background:var(--color-background)}._logPlaceholder_1dg5t_51{display:flex;flex-direction:column;align-items:center;justify-content:center;color:#2d2d30}._logPlaceholder_1dg5t_51 div:nth-child(2){color:var(--color-text-secondary);font-size:1.4em;opacity:.6}._logPlaceholderIcon_1dg5t_64{opacity:.3}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Logs.0a3446ce.js:
--------------------------------------------------------------------------------
1 | var R=Object.defineProperty,w=Object.defineProperties;var C=Object.getOwnPropertyDescriptors;var S=Object.getOwnPropertySymbols;var N=Object.prototype.hasOwnProperty,W=Object.prototype.propertyIsEnumerable;var T=(e,t,o)=>t in e?R(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,p=(e,t)=>{for(var o in t||(t={}))N.call(t,o)&&T(e,o,t[o]);if(S)for(var o of S(t))W.call(t,o)&&T(e,o,t[o]);return e},m=(e,t)=>w(e,C(t));import{r as _,b as l,j as a,P as f,d as P,G as k,H as j,w as z,J as I,u as O,C as F,S as M,K as $,L as H,g as A,N as B,h as D,c as E}from"./index.27058ddf.js";import{a as K,F as q}from"./index.esm.f1f118db.js";import{r as G,s as J,f as V}from"./logs.7cc467a0.js";import{d as Y}from"./debounce.d080d5e1.js";import{u as Q}from"./useRemainingViewPortHeight.49042856.js";import{F as U,p as X}from"./Fab.b64825a9.js";import{P as Z,a as ee}from"./play.1bfea717.js";function te(e,t){if(e==null)return{};var o=oe(e,t),n,r;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r=0)&&(!Object.prototype.propertyIsEnumerable.call(e,n)||(o[n]=e[n]))}return o}function oe(e,t){if(e==null)return{};var o={},n=Object.keys(e),r,s;for(s=0;s=0)&&(o[r]=e[r]);return o}var x=_.exports.forwardRef(function(e,t){var o=e.color,n=o===void 0?"currentColor":o,r=e.size,s=r===void 0?24:r,g=te(e,["color","size"]);return l("svg",m(p({ref:t,xmlns:"http://www.w3.org/2000/svg",width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:n,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},g),{children:[a("circle",{cx:"11",cy:"11",r:"8"}),a("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]}))});x.propTypes={color:f.string,size:f.oneOfType([f.string,f.number])};x.displayName="Search";var re=x;const ae="_RuleSearch_1gcst_1",ne="_RuleSearchContainer_1gcst_5",se="_inputWrapper_1gcst_10",ce="_input_1gcst_10",ie="_iconWrapper_1gcst_35";var d={RuleSearch:ae,RuleSearchContainer:ne,inputWrapper:se,input:ce,iconWrapper:ie};function le({dispatch:e,searchText:t,updateSearchText:o}){const[n,r]=_.exports.useState(t),s=_.exports.useCallback(i=>{e(o(i))},[e,o]),g=_.exports.useMemo(()=>Y(s,300),[s]),h=i=>{r(i.target.value),g(i.target.value)};return a("div",{className:d.RuleSearch,children:l("div",{className:d.RuleSearchContainer,children:[a("div",{className:d.inputWrapper,children:a("input",{type:"text",value:n,onChange:h,className:d.input})}),a("div",{className:d.iconWrapper,children:a(re,{size:20})})]})})}const ge=e=>({searchText:k(e),updateSearchText:j});var pe=P(ge)(le);const de="_logMeta_1dg5t_1",he="_logType_1dg5t_8",ue="_logTime_1dg5t_18",me="_logText_1dg5t_24",fe="_logsWrapper_1dg5t_37",_e="_logPlaceholder_1dg5t_51",ve="_logPlaceholderIcon_1dg5t_64";var c={logMeta:de,logType:he,logTime:ue,logText:me,logsWrapper:fe,logPlaceholder:_e,logPlaceholderIcon:ve};const{useCallback:b,memo:xe,useEffect:ye}=D,v=30,Se={debug:"#28792c",info:"var(--bg-log-info-tag)",warning:"#b99105",error:"#c11c1c"};function Te({time:e,even:t,payload:o,type:n}){const r=E({even:t},"log");return a("div",{className:r,children:l("div",{className:c.logMeta,children:[a("div",{className:c.logTime,children:e}),a("div",{className:c.logType,style:{backgroundColor:Se[n]},children:n}),a("div",{className:c.logText,children:o})]})})}function be(e,t){return t[e].id}const Pe=xe(({index:e,style:t,data:o})=>{const n=o[e];return a("div",{style:t,children:a(Te,p({},n))})},K);function Le({dispatch:e,logLevel:t,apiConfig:o,logs:n,logStreamingPaused:r}){const s=z(),g=b(()=>{r?G(m(p({},o),{logLevel:t})):J(),s.app.updateAppConfig("logStreamingPaused",!r)},[o,t,r,s.app]),h=b(L=>e(I(L)),[e]);ye(()=>{V(m(p({},o),{logLevel:t}),h)},[o,t,h]);const[i,y]=Q(),{t:u}=O();return l("div",{children:[a(F,{title:u("Logs")}),a(pe,{}),a("div",{ref:i,style:{paddingBottom:v},children:n.length===0?l("div",{className:c.logPlaceholder,style:{height:y-v},children:[a("div",{className:c.logPlaceholderIcon,children:a(M,{width:200,height:200})}),a("div",{children:u("no_logs")})]}):l("div",{className:c.logsWrapper,children:[a(q,{height:y-v,width:"100%",itemCount:n.length,itemSize:80,itemData:n,itemKey:be,children:Pe}),a(U,{icon:r?a(Z,{size:16}):a(ee,{size:16}),mainButtonStyles:r?{background:"#e74c3c"}:{},style:X,text:u(r?"Resume Refresh":"Pause Refresh"),onClick:g})]})})]})}const Re=e=>({logs:$(e),logLevel:H(e),apiConfig:A(e),logStreamingPaused:B(e)});var Oe=P(Re)(Le);export{Oe as default};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Logs.2ca4cbd7.js:
--------------------------------------------------------------------------------
1 | import{r as m,b as l,j as o,i as u,d as y,H as T,J as b,x as L,K as P,u as R,C,S as N,L as W,N as w,g as k,O as j,h as z,c as I}from"./index.31d0d1dc.js";import{a as O,F}from"./index.esm.8c5915bf.js";import{r as M,s as $,f as H}from"./logs.975cc896.js";import{d as A}from"./debounce.c2d20996.js";import{u as B}from"./useRemainingViewPortHeight.76d7ff5c.js";import{F as D,p as E}from"./Fab.4a89b536.js";import{P as K,a as q}from"./play.42659ab6.js";function J(e,s){if(e==null)return{};var r=V(e,s),n,t;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t=0)&&(!Object.prototype.propertyIsEnumerable.call(e,n)||(r[n]=e[n]))}return r}function V(e,s){if(e==null)return{};var r={},n=Object.keys(e),t,a;for(a=0;a=0)&&(r[t]=e[t]);return r}var _=m.exports.forwardRef(function(e,s){var r=e.color,n=r===void 0?"currentColor":r,t=e.size,a=t===void 0?24:t,p=J(e,["color","size"]);return l("svg",{ref:s,xmlns:"http://www.w3.org/2000/svg",width:a,height:a,viewBox:"0 0 24 24",fill:"none",stroke:n,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...p,children:[o("circle",{cx:"11",cy:"11",r:"8"}),o("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})});_.propTypes={color:u.exports.string,size:u.exports.oneOfType([u.exports.string,u.exports.number])};_.displayName="Search";const Y=_,G="_RuleSearch_1gcst_1",Q="_RuleSearchContainer_1gcst_5",U="_inputWrapper_1gcst_10",X="_input_1gcst_10",Z="_iconWrapper_1gcst_35",g={RuleSearch:G,RuleSearchContainer:Q,inputWrapper:U,input:X,iconWrapper:Z};function ee({dispatch:e,searchText:s,updateSearchText:r}){const[n,t]=m.exports.useState(s),a=m.exports.useCallback(i=>{e(r(i))},[e,r]),p=m.exports.useMemo(()=>A(a,300),[a]),d=i=>{t(i.target.value),p(i.target.value)};return o("div",{className:g.RuleSearch,children:l("div",{className:g.RuleSearchContainer,children:[o("div",{className:g.inputWrapper,children:o("input",{type:"text",value:n,onChange:d,className:g.input})}),o("div",{className:g.iconWrapper,children:o(Y,{size:20})})]})})}const te=e=>({searchText:T(e),updateSearchText:b}),oe=y(te)(ee),re="_logMeta_1dg5t_1",ne="_logType_1dg5t_8",se="_logTime_1dg5t_18",ae="_logText_1dg5t_24",ce="_logsWrapper_1dg5t_37",ie="_logPlaceholder_1dg5t_51",le="_logPlaceholderIcon_1dg5t_64",c={logMeta:re,logType:ne,logTime:se,logText:ae,logsWrapper:ce,logPlaceholder:ie,logPlaceholderIcon:le},{useCallback:x,memo:pe,useEffect:ge}=z,f=30,de={debug:"#28792c",info:"var(--bg-log-info-tag)",warning:"#b99105",error:"#c11c1c"};function he({time:e,even:s,payload:r,type:n}){const t=I({even:s},"log");return o("div",{className:t,children:l("div",{className:c.logMeta,children:[o("div",{className:c.logTime,children:e}),o("div",{className:c.logType,style:{backgroundColor:de[n]},children:n}),o("div",{className:c.logText,children:r})]})})}function ue(e,s){return s[e].id}const me=pe(({index:e,style:s,data:r})=>{const n=r[e];return o("div",{style:s,children:o(he,{...n})})},O);function fe({dispatch:e,logLevel:s,apiConfig:r,logs:n,logStreamingPaused:t}){const a=L(),p=x(()=>{t?M({...r,logLevel:s}):$(),a.app.updateAppConfig("logStreamingPaused",!t)},[r,s,t,a.app]),d=x(S=>e(P(S)),[e]);ge(()=>{H({...r,logLevel:s},d)},[r,s,d]);const[i,v]=B(),{t:h}=R();return l("div",{children:[o(C,{title:h("Logs")}),o(oe,{}),o("div",{ref:i,style:{paddingBottom:f},children:n.length===0?l("div",{className:c.logPlaceholder,style:{height:v-f},children:[o("div",{className:c.logPlaceholderIcon,children:o(N,{width:200,height:200})}),o("div",{children:h("no_logs")})]}):l("div",{className:c.logsWrapper,children:[o(F,{height:v-f,width:"100%",itemCount:n.length,itemSize:80,itemData:n,itemKey:ue,children:me}),o(D,{icon:t?o(K,{size:16}):o(q,{size:16}),mainButtonStyles:t?{background:"#e74c3c"}:{},style:E,text:h(t?"Resume Refresh":"Pause Refresh"),onClick:p})]})})]})}const _e=e=>({logs:W(e),logLevel:w(e),apiConfig:k(e),logStreamingPaused:j(e)}),Pe=y(_e)(fe);export{Pe as default};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Logs.d68ca431.css:
--------------------------------------------------------------------------------
1 | ._RuleSearch_1gcst_1{padding:0 40px 5px}._RuleSearchContainer_1gcst_5{position:relative;height:40px}._inputWrapper_1gcst_10{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);left:0;width:100%}._input_1gcst_10{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:20px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;height:40px;outline:none;padding:0 15px 0 35px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._iconWrapper_1gcst_35{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);left:10px}._logMeta_1dg5t_1{display:flex;align-items:center;flex-wrap:wrap;font-size:.9em}._logType_1dg5t_8{color:#eee;flex-shrink:0;text-align:center;width:66px;border-radius:100px;padding:3px 5px;margin:0 8px}._logTime_1dg5t_18{flex-shrink:0;color:#999;font-size:14px}._logText_1dg5t_24{flex-shrink:0;display:flex;font-family:Roboto Mono,Menlo,monospace;align-items:center;padding:8px 0;width:100%;white-space:pre;overflow:auto}._logsWrapper_1dg5t_37{margin:0;padding:0;color:var(--color-text)}._logsWrapper_1dg5t_37 .log{padding:10px 40px;background:var(--color-background)}._logsWrapper_1dg5t_37 .log.even{background:var(--color-background)}._logPlaceholder_1dg5t_51{display:flex;flex-direction:column;align-items:center;justify-content:center;color:#2d2d30}._logPlaceholder_1dg5t_51 div:nth-child(2){color:var(--color-text-secondary);font-size:1.4em;opacity:.6}._logPlaceholderIcon_1dg5t_64{opacity:.3}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Logs.e13d481f.js:
--------------------------------------------------------------------------------
1 | var T=Object.defineProperty,C=Object.defineProperties;var y=Object.getOwnPropertyDescriptors;var E=Object.getOwnPropertySymbols;var L=Object.prototype.hasOwnProperty,N=Object.prototype.propertyIsEnumerable;var v=(e,t,a)=>t in e?T(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,u=(e,t)=>{for(var a in t||(t={}))L.call(t,a)&&v(e,a,t[a]);if(E)for(var a of E(t))N.call(t,a)&&v(e,a,t[a]);return e},h=(e,t)=>C(e,y(t));import{r as o,R as l,K as P,k as W,P as b,D as I,j as k,g as w}from"./vendor.3cf270b6.js";import{a as z,F as D}from"./index.esm.5b55aaed.js";import{r as F,s as M,f as A}from"./logs.8963bea3.js";import{c as S,w as $,x as H,k as B,y as K,C as j,S as q,z as V,A as Y,g as G,D as J}from"./index.d6596dd6.js";import{d as O}from"./debounce.76599460.js";import{u as Q}from"./useRemainingViewPortHeight.91bbcf1d.js";import{F as U,p as X}from"./Fab.78b2c04b.js";const Z="_RuleSearch_1gcst_1",ee="_RuleSearchContainer_1gcst_5",te="_inputWrapper_1gcst_10",ae="_input_1gcst_10",oe="_iconWrapper_1gcst_35";var i={RuleSearch:Z,RuleSearchContainer:ee,inputWrapper:te,input:ae,iconWrapper:oe};function re({dispatch:e,searchText:t,updateSearchText:a}){const[r,s]=o.exports.useState(t),p=o.exports.useCallback(c=>{e(a(c))},[e,a]),d=o.exports.useMemo(()=>O(p,300),[p]),g=c=>{s(c.target.value),d(c.target.value)};return l.createElement("div",{className:i.RuleSearch},l.createElement("div",{className:i.RuleSearchContainer},l.createElement("div",{className:i.inputWrapper},l.createElement("input",{type:"text",value:r,onChange:g,className:i.input})),l.createElement("div",{className:i.iconWrapper},l.createElement(P,{size:20}))))}const se=e=>({searchText:$(e),updateSearchText:H});var ne=S(se)(re);const ce="_logMeta_1dg5t_1",le="_logType_1dg5t_8",pe="_logTime_1dg5t_18",ie="_logText_1dg5t_24",ge="_logsWrapper_1dg5t_37",me="_logPlaceholder_1dg5t_51",ue="_logPlaceholderIcon_1dg5t_64";var n={logMeta:ce,logType:le,logTime:pe,logText:ie,logsWrapper:ge,logPlaceholder:me,logPlaceholderIcon:ue};const{useCallback:f,memo:de,useEffect:he}=k,x=30,xe={debug:"#28792c",info:"var(--bg-log-info-tag)",warning:"#b99105",error:"#c11c1c"};function _e({time:e,even:t,payload:a,type:r}){const s=w({even:t},"log");return o.exports.createElement("div",{className:s},o.exports.createElement("div",{className:n.logMeta},o.exports.createElement("div",{className:n.logTime},e),o.exports.createElement("div",{className:n.logType,style:{backgroundColor:xe[r]}},r),o.exports.createElement("div",{className:n.logText},a)))}function Ee(e,t){return t[e].id}const ve=de(({index:e,style:t,data:a})=>{const r=a[e];return o.exports.createElement("div",{style:t},o.exports.createElement(_e,u({},r)))},z);function fe({dispatch:e,logLevel:t,apiConfig:a,logs:r,logStreamingPaused:s}){const p=B(),d=f(()=>{s?F(h(u({},a),{logLevel:t})):M(),p.app.updateAppConfig("logStreamingPaused",!s)},[a,t,s,p.app]),g=f(R=>e(K(R)),[e]);he(()=>{A(h(u({},a),{logLevel:t}),g)},[a,t,g]);const[c,_]=Q(),{t:m}=W();return o.exports.createElement("div",null,o.exports.createElement(j,{title:m("Logs")}),o.exports.createElement(ne,null),o.exports.createElement("div",{ref:c,style:{paddingBottom:x}},r.length===0?o.exports.createElement("div",{className:n.logPlaceholder,style:{height:_-x}},o.exports.createElement("div",{className:n.logPlaceholderIcon},o.exports.createElement(q,{width:200,height:200})),o.exports.createElement("div",null,m("no_logs"))):o.exports.createElement("div",{className:n.logsWrapper},o.exports.createElement(D,{height:_-x,width:"100%",itemCount:r.length,itemSize:80,itemData:r,itemKey:Ee},ve),o.exports.createElement(U,{icon:s?o.exports.createElement(b,{size:16}):o.exports.createElement(I,{size:16}),mainButtonStyles:s?{background:"#e74c3c"}:{},style:X,text:m(s?"Resume Refresh":"Pause Refresh"),onClick:d}))))}const Se=e=>({logs:V(e),logLevel:Y(e),apiConfig:G(e),logStreamingPaused:J(e)});var be=S(Se)(fe);export{be as default};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Proxies.3fa3509d.css:
--------------------------------------------------------------------------------
1 | ._FlexCenter_1380a_1{display:flex;justify-content:center;align-items:center}._header_1y9js_1{display:flex;align-items:center}._header_1y9js_1:focus{outline:none}._header_1y9js_1 ._arrow_1y9js_8{display:inline-flex;-webkit-transform:rotate(0deg);transform:rotate(0);transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}._header_1y9js_1 ._arrow_1y9js_8._isOpen_1y9js_13{-webkit-transform:rotate(180deg);transform:rotate(180deg)}._header_1y9js_1 ._arrow_1y9js_8:focus{outline:var(--color-focus-blue) solid 1px}._btn_1y9js_20{margin-left:5px}._qty_1y9js_25{font-family:var(--font-normal);font-size:.75em;margin-left:3px;padding:2px 7px;display:inline-flex;justify-content:center;align-items:center;background-color:var(--bg-near-transparent);border-radius:30px}._header_5pmv2_1{margin-bottom:12px}._groupHead_5pmv2_5{display:flex;flex-wrap:wrap;align-items:center}._action_5pmv2_11{margin:0 5px}._proxy_8ev0l_1{margin:3px;padding:5px;position:relative;border-radius:8px;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between;outline:none;border:1px solid transparent;max-width:200px;background-color:var(--color-bg-proxy)}._proxy_8ev0l_1:focus{border:1px solid var(--color-focus-blue)}@media screen and (min-width: 30em){._proxy_8ev0l_1{min-width:200px;border-radius:10px;padding:10px}}._proxy_8ev0l_1._now_8ev0l_25{background-color:var(--color-focus-blue);color:#ddd}._proxy_8ev0l_1._error_8ev0l_29{opacity:.5}._proxy_8ev0l_1._selectable_8ev0l_32{transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;cursor:pointer}._proxy_8ev0l_1._selectable_8ev0l_32:hover{border-color:hsl(0deg,0%,var(--card-hover-border-lightness))}._proxyType_8ev0l_40{font-family:var(--font-mono);font-size:.6em;margin-right:3px}@media screen and (min-width: 30em){._proxyType_8ev0l_40{font-size:.85em}}._row_8ev0l_51{display:flex;align-items:center;justify-content:space-between}._proxyName_8ev0l_57{width:100%;margin-bottom:5px;font-size:.85em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._proxySmall_8ev0l_66{--size: 13px;width:var(--size);height:var(--size);border-radius:50%;position:relative}._proxySmall_8ev0l_66._now_8ev0l_25{--size: 15px}._proxySmall_8ev0l_66._now_8ev0l_25:before{--size-dot: 7px;content:"";position:absolute;width:var(--size-dot);height:var(--size-dot);background-color:#fff;border:1px solid var(--color-proxy-dot-selected-ind-bo);border-radius:4px;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}._proxySmall_8ev0l_66._selectable_8ev0l_32{transition:-webkit-transform .1s ease-in-out;transition:transform .1s ease-in-out;transition:transform .1s ease-in-out,-webkit-transform .1s ease-in-out;cursor:pointer}._proxySmall_8ev0l_66._selectable_8ev0l_32:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}._proxyLatency_hz69v_1{border-radius:20px;color:#eee;font-size:.6em}@media screen and (min-width: 30em){._proxyLatency_hz69v_1{font-size:.85em}}._list_1oy7w_1{display:flex;flex-wrap:wrap;margin:8px 0 8px -3px}._listSummaryView_1oy7w_8{margin:14px 0;display:grid;grid-template-columns:repeat(auto-fill,13px);grid-gap:10px;place-items:center;max-width:900px}._updatedAt_1rx92_1{margin-bottom:12px}._updatedAt_1rx92_1 small{color:#777}._main_1rx92_8{padding:10px 15px}@media screen and (min-width: 30em){._main_1rx92_8{padding:10px 40px}}._head_1rx92_17{display:flex;align-items:center;flex-wrap:wrap}._action_1rx92_23{margin:0 5px;display:grid;grid-template-columns:auto auto;gap:10px;place-items:center}._refresh_1rx92_31{display:flex;justify-content:center;align-items:center;cursor:pointer}._labeledInput_cmki0_1{max-width:85vw;width:400px;display:flex;justify-content:space-between;align-items:center;font-size:13px;padding:13px 0}hr{height:1px;background-color:var(--color-separator);border:none;outline:none;margin:1rem 0px}._overlay_uuk3b_1{background-color:#0009}._cnt_uuk3b_5{position:absolute;background-color:var(--bg-modal);color:var(--color-text);line-height:1.4;opacity:.6;transition:all .3s ease;-webkit-transform:translate(-50%,-50%) scale(1.2);transform:translate(-50%,-50%) scale(1.2);box-shadow:#0000001f 0 4px 4px,#0000003d 0 16px 32px}._afterOpen_uuk3b_16{opacity:1;-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}._topBar_jgy4z_1{position:-webkit-sticky;position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;z-index:1;background-color:var(--color-background2);-webkit-backdrop-filter:blur(36px);backdrop-filter:blur(36px)}._topBarRight_jgy4z_13{display:flex;align-items:center;flex-wrap:wrap;flex:1;justify-content:flex-end;margin-right:20px}._textFilterContainer_jgy4z_22{max-width:350px;min-width:150px;flex:1;margin-right:8px}._group_jgy4z_29{padding:10px 15px}@media screen and (min-width: 30em){._group_jgy4z_29{padding:10px 40px}}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Proxies.e1ed6325.css:
--------------------------------------------------------------------------------
1 | ._FlexCenter_1380a_1{display:flex;justify-content:center;align-items:center}._header_1y9js_1{display:flex;align-items:center}._header_1y9js_1:focus{outline:none}._header_1y9js_1 ._arrow_1y9js_8{display:inline-flex;-webkit-transform:rotate(0deg);transform:rotate(0);transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}._header_1y9js_1 ._arrow_1y9js_8._isOpen_1y9js_13{-webkit-transform:rotate(180deg);transform:rotate(180deg)}._header_1y9js_1 ._arrow_1y9js_8:focus{outline:var(--color-focus-blue) solid 1px}._btn_1y9js_20{margin-left:5px}._qty_1y9js_25{font-family:var(--font-normal);font-size:.75em;margin-left:3px;padding:2px 7px;display:inline-flex;justify-content:center;align-items:center;background-color:var(--bg-near-transparent);border-radius:30px}._header_1g0y5_1{margin-bottom:12px}._zapWrapper_1g0y5_5{width:20px;height:20px;display:flex;align-items:center;justify-content:center}._proxy_sq0tg_1{margin:3px;padding:5px;position:relative;border-radius:8px;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between;outline:none;border:1px solid transparent;max-width:280px;background-color:var(--color-bg-proxy)}._proxy_sq0tg_1:focus{border:1px solid var(--color-focus-blue)}@media screen and (min-width: 30em){._proxy_sq0tg_1{min-width:200px;border-radius:10px;padding:10px}}._proxy_sq0tg_1._now_sq0tg_25{background-color:var(--color-focus-blue);color:#ddd}._proxy_sq0tg_1._error_sq0tg_29{opacity:.5}._proxy_sq0tg_1._selectable_sq0tg_32{transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;cursor:pointer}._proxy_sq0tg_1._selectable_sq0tg_32:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px)}._proxyType_sq0tg_40{font-family:var(--font-mono);font-size:.6em;margin-right:3px}@media screen and (min-width: 30em){._proxyType_sq0tg_40{font-size:.85em}}._row_sq0tg_51{display:flex;align-items:center;justify-content:space-between}._proxyName_sq0tg_57{width:100%;margin-bottom:5px;font-size:.85em}@media screen and (min-width: 30em){._proxyName_sq0tg_57{font-size:1em}}._proxySmall_sq0tg_68{width:13px;height:13px;border-radius:50%;border:1px solid var(--color-background)}._proxySmall_sq0tg_68._now_sq0tg_25{border-color:var(--color-text-secondary)}._proxySmall_sq0tg_68._selectable_sq0tg_32{transition:-webkit-transform .1s ease-in-out;transition:transform .1s ease-in-out;transition:transform .1s ease-in-out,-webkit-transform .1s ease-in-out;cursor:pointer}._proxySmall_sq0tg_68._selectable_sq0tg_32:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}._proxyLatency_15kyb_1{border-radius:20px;color:#eee;font-size:.6em}@media screen and (min-width: 30em){._proxyLatency_15kyb_1{font-size:1em}}._list_10y5m_1{display:flex;flex-wrap:wrap;margin:8px 0 8px -3px}._listSummaryView_10y5m_8{margin:8px 0;display:grid;grid-template-columns:repeat(auto-fill,13px);grid-gap:10px}._updatedAt_1ql33_1{margin-bottom:12px}._updatedAt_1ql33_1 small{color:#777}._body_1ql33_8{padding:10px 15px}@media screen and (min-width: 30em){._body_1ql33_8{padding:10px 40px}}._actionFooter_1ql33_17{display:flex}._actionFooter_1ql33_17 button{margin:0 5px}._actionFooter_1ql33_17 button:first-child{margin-left:0}._refresh_1ql33_27{display:flex;justify-content:center;align-items:center;cursor:pointer}._labeledInput_cmki0_1{max-width:85vw;width:400px;display:flex;justify-content:space-between;align-items:center;font-size:13px;padding:13px 0}hr{height:1px;background-color:var(--color-separator);border:none;outline:none;margin:1rem 0px}._overlay_uuk3b_1{background-color:#0009}._cnt_uuk3b_5{position:absolute;background-color:var(--bg-modal);color:var(--color-text);line-height:1.4;opacity:.6;transition:all .3s ease;-webkit-transform:translate(-50%,-50%) scale(1.2);transform:translate(-50%,-50%) scale(1.2);box-shadow:#0000001f 0 4px 4px,#0000003d 0 16px 32px}._afterOpen_uuk3b_16{opacity:1;-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}._topBar_jgy4z_1{position:-webkit-sticky;position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;z-index:1;background-color:var(--color-background2);-webkit-backdrop-filter:blur(36px);backdrop-filter:blur(36px)}._topBarRight_jgy4z_13{display:flex;align-items:center;flex-wrap:wrap;flex:1;justify-content:flex-end;margin-right:20px}._textFilterContainer_jgy4z_22{max-width:350px;min-width:150px;flex:1;margin-right:8px}._group_jgy4z_29{padding:10px 15px}@media screen and (min-width: 30em){._group_jgy4z_29{padding:10px 40px}}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Rules.521c574f.js:
--------------------------------------------------------------------------------
1 | import{E as v,ah as C,ai as _,V as k,aj as y,ak as R,b as c,j as a,U as B,B as T,u as g,d as F,g as S,C as $,h as A}from"./index.31d0d1dc.js";import{a as j,V as q}from"./index.esm.8c5915bf.js";import{R as P,T as z}from"./TextFitler.e1325e60.js";import{f as E}from"./index.c54634b9.js";import{F as L,p as Q}from"./Fab.4a89b536.js";import{u as D}from"./useRemainingViewPortHeight.76d7ff5c.js";import"./debounce.c2d20996.js";function U(e){const r=e.providers,t=Object.keys(r),s={};for(let n=0;n=0,"there is no valid rules list in the rules API response"),e.rules.map((r,t)=>({...r,id:t}))}async function G(e,r){let t={rules:[]};try{const{url:s,init:n}=v(r),i=await fetch(s+e,n);i.ok&&(t=await i.json())}catch(s){console.log("failed to fetch rules",s)}return O(t)}const w=C({key:"ruleFilterText",default:""});function J(e,r){const t=y(),{mutate:s,isLoading:n}=R(I,{onSuccess:()=>{t.invalidateQueries("/providers/rules")}});return[o=>{o.preventDefault(),s({name:e,apiConfig:r})},n]}function K(e){const r=y(),{data:t}=N(e),{mutate:s,isLoading:n}=R(W,{onSuccess:()=>{r.invalidateQueries("/providers/rules")}});return[o=>{o.preventDefault(),s({names:t.names,apiConfig:e})},n]}function N(e){return _(["/providers/rules",e],()=>V("/providers/rules",e))}function X(e){const{data:r,isFetching:t}=_(["/rules",e],()=>G("/rules",e)),{data:s}=N(e),[n]=k(w);if(n==="")return{rules:r,provider:s,isFetching:t};{const i=n.toLowerCase();return{rules:r.filter(o=>o.payload.toLowerCase().indexOf(i)>=0),isFetching:t,provider:{byName:s.byName,names:s.names.filter(o=>o.toLowerCase().indexOf(i)>=0)}}}}const Y="_RuleProviderItem_12aid_1",Z="_left_12aid_7",ee="_middle_12aid_14",te="_gray_12aid_21",re="_action_12aid_25",ne="_refreshBtn_12aid_32",u={RuleProviderItem:Y,left:Z,middle:ee,gray:te,action:re,refreshBtn:ne};function se({idx:e,name:r,vehicleType:t,behavior:s,updatedAt:n,ruleCount:i,apiConfig:o}){const[d,l]=J(r,o),m=E(new Date(n),new Date);return c("div",{className:u.RuleProviderItem,children:[a("span",{className:u.left,children:e}),c("div",{className:u.middle,children:[a(B,{name:r,type:`${t} / ${s}`}),a("div",{className:u.gray,children:i<2?`${i} rule`:`${i} rules`}),c("div",{className:u.action,children:[c(T,{onClick:d,disabled:l,className:u.refreshBtn,children:[a(P,{isRotating:l,size:13}),a("span",{className:"visually-hidden",children:"Refresh"})]}),c("small",{className:u.gray,children:["Updated ",m," ago"]})]})]})]})}function ie({apiConfig:e}){const[r,t]=K(e),{t:s}=g();return a(L,{icon:a(P,{isRotating:t}),text:s("update_all_rule_provider"),style:Q,onClick:r})}const ae="_rule_1ymqx_1",oe="_left_1ymqx_12",le="_a_1ymqx_19",ce="_b_1ymqx_26",ue="_type_1ymqx_37",f={rule:ae,left:oe,a:le,b:ce,type:ue},h={_default:"#59caf9",DIRECT:"#f5bc41",REJECT:"#cb3166"};function de({proxy:e}){let r=h._default;return h[e]&&(r=h[e]),{color:r}}function me({type:e,payload:r,proxy:t,id:s}){const n=de({proxy:t});return c("div",{className:f.rule,children:[a("div",{className:f.left,children:s}),c("div",{children:[a("div",{className:f.b,children:r}),c("div",{className:f.a,children:[a("div",{className:f.type,children:e}),a("div",{style:n,children:t})]})]})]})}const fe="_header_1j1w3_1",he="_RuleProviderItemWrapper_1j1w3_17",b={header:fe,RuleProviderItemWrapper:he},{memo:ve}=A,p=30;function pe(e,{rules:r,provider:t}){const s=t.names.length;return e{const{rules:s,provider:n,apiConfig:i}=t,o=n.names.length;if(e({apiConfig:S(e)}),ke=F(Re)(ge);function ge({apiConfig:e}){const[r,t]=D(),{rules:s,provider:n}=X(e),i=_e({provider:n}),{t:o}=g();return c("div",{children:[c("div",{className:b.header,children:[a($,{title:o("Rules")}),a(z,{placeholder:"Filter",textAtom:w})]}),a("div",{ref:r,style:{paddingBottom:p},children:a(q,{height:t-p,width:"100%",itemCount:s.length+n.names.length,itemSize:i,itemData:{rules:s,provider:n,apiConfig:e},itemKey:pe,children:ye})}),n&&n.names&&n.names.length>0?a(ie,{apiConfig:e}):null]})}export{ke as default};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Rules.5927d70a.js:
--------------------------------------------------------------------------------
1 | var A=Object.defineProperty,F=Object.defineProperties;var L=Object.getOwnPropertyDescriptors;var O=Object.getOwnPropertySymbols;var $=Object.prototype.hasOwnProperty,q=Object.prototype.propertyIsEnumerable;var I=(e,s,r)=>s in e?A(e,s,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[s]=r,f=(e,s)=>{for(var r in s||(s={}))$.call(s,r)&&I(e,r,s[r]);if(O)for(var r of O(s))q.call(s,r)&&I(e,r,s[r]);return e},g=(e,s)=>F(e,L(s));import{_ as D,Q as b,ad as Q,ae as M,af as j,R as m,ag as W,ah as P,ai as z,aj as V,D as w,ak as H,al as S,U as G,b as c,j as a,T as J,B as K,u as x,d as X,g as Y,C as Z}from"./index.27058ddf.js";import{a as ee,V as te}from"./index.esm.f1f118db.js";import{R as N,T as re}from"./TextFitler.8b7d1ec3.js";import{f as ne}from"./index.e97a91e5.js";import{F as se,p as ie}from"./Fab.b64825a9.js";import{u as oe}from"./useRemainingViewPortHeight.49042856.js";import"./debounce.d080d5e1.js";var ae=function(e){D(s,e);function s(i,n){var t;return t=e.call(this)||this,t.client=i,t.setOptions(n),t.bindMethods(),t.updateResult(),t}var r=s.prototype;return r.bindMethods=function(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)},r.setOptions=function(n){this.options=this.client.defaultMutationOptions(n)},r.onUnsubscribe=function(){if(!this.listeners.length){var n;(n=this.currentMutation)==null||n.removeObserver(this)}},r.onMutationUpdate=function(n){this.updateResult();var t={listeners:!0};n.type==="success"?t.onSuccess=!0:n.type==="error"&&(t.onError=!0),this.notify(t)},r.getCurrentResult=function(){return this.currentResult},r.reset=function(){this.currentMutation=void 0,this.updateResult(),this.notify({listeners:!0})},r.mutate=function(n,t){return this.mutateOptions=t,this.currentMutation&&this.currentMutation.removeObserver(this),this.currentMutation=this.client.getMutationCache().build(this.client,b({},this.options,{variables:typeof n!="undefined"?n:this.options.variables})),this.currentMutation.addObserver(this),this.currentMutation.execute()},r.updateResult=function(){var n=this.currentMutation?this.currentMutation.state:Q(),t=b({},n,{isLoading:n.status==="loading",isSuccess:n.status==="success",isError:n.status==="error",isIdle:n.status==="idle",mutate:this.mutate,reset:this.reset});this.currentResult=t},r.notify=function(n){var t=this;M.batch(function(){t.mutateOptions&&(n.onSuccess?(t.mutateOptions.onSuccess==null||t.mutateOptions.onSuccess(t.currentResult.data,t.currentResult.variables,t.currentResult.context),t.mutateOptions.onSettled==null||t.mutateOptions.onSettled(t.currentResult.data,null,t.currentResult.variables,t.currentResult.context)):n.onError&&(t.mutateOptions.onError==null||t.mutateOptions.onError(t.currentResult.error,t.currentResult.variables,t.currentResult.context),t.mutateOptions.onSettled==null||t.mutateOptions.onSettled(void 0,t.currentResult.error,t.currentResult.variables,t.currentResult.context))),n.listeners&&t.listeners.forEach(function(o){o(t.currentResult)})})},s}(j);function E(e,s,r){var i=m.useRef(!1),n=m.useState(0),t=n[1],o=W(e,s,r),d=P(),u=m.useRef();u.current?u.current.setOptions(o):u.current=new ae(d,o);var l=u.current.getCurrentResult();m.useEffect(function(){i.current=!0;var R=u.current.subscribe(M.batchCalls(function(){i.current&&t(function(y){return y+1})}));return function(){i.current=!1,R()}},[]);var v=m.useCallback(function(R,y){u.current.mutate(R,y).catch(z)},[]);if(l.error&&V(void 0,u.current.options.useErrorBoundary,[l.error]))throw l.error;return b({},l,{mutate:v,mutateAsync:l.mutate})}function ue(e){const s=e.providers,r=Object.keys(s),i={};for(let n=0;n=0,"there is no valid rules list in the rules API response"),e.rules.map((s,r)=>g(f({},s),{id:r}))}async function me(e,s){let r={rules:[]};try{const{url:i,init:n}=w(s),t=await fetch(i+e,n);t.ok&&(r=await t.json())}catch(i){console.log("failed to fetch rules",i)}return he(r)}const k=H({key:"ruleFilterText",default:""});function pe(e,s){const r=P(),{mutate:i,isLoading:n}=E(T,{onSuccess:()=>{r.invalidateQueries("/providers/rules")}});return[o=>{o.preventDefault(),i({name:e,apiConfig:s})},n]}function ve(e){const s=P(),{data:r}=B(e),{mutate:i,isLoading:n}=E(ce,{onSuccess:()=>{s.invalidateQueries("/providers/rules")}});return[o=>{o.preventDefault(),i({names:r.names,apiConfig:e})},n]}function B(e){return S(["/providers/rules",e],()=>le("/providers/rules",e))}function Re(e){const{data:s,isFetching:r}=S(["/rules",e],()=>me("/rules",e)),{data:i}=B(e),[n]=G(k);if(n==="")return{rules:s,provider:i,isFetching:r};{const t=n.toLowerCase();return{rules:s.filter(o=>o.payload.toLowerCase().indexOf(t)>=0),isFetching:r,provider:{byName:i.byName,names:i.names.filter(o=>o.toLowerCase().indexOf(t)>=0)}}}}const ye="_RuleProviderItem_ly9yn_1",ge="_left_ly9yn_7",_e="_middle_ly9yn_14",be="_gray_ly9yn_20",Pe="_refreshButtonWrapper_ly9yn_24";var h={RuleProviderItem:ye,left:ge,middle:_e,gray:be,refreshButtonWrapper:Pe};function we({idx:e,name:s,vehicleType:r,behavior:i,updatedAt:n,ruleCount:t,apiConfig:o}){const[d,u]=pe(s,o),l=ne(new Date(n),new Date);return c("div",{className:h.RuleProviderItem,children:[a("span",{className:h.left,children:e}),c("div",{className:h.middle,children:[a(J,{name:s,type:`${r} / ${i}`}),a("div",{className:h.gray,children:t<2?`${t} rule`:`${t} rules`}),c("small",{className:h.gray,children:["Updated ",l," ago"]})]}),a("span",{className:h.refreshButtonWrapper,children:a(K,{onClick:d,disabled:u,children:a(N,{isRotating:u})})})]})}function Oe({apiConfig:e}){const[s,r]=ve(e),{t:i}=x();return a(se,{icon:a(N,{isRotating:r}),text:i("update_all_rule_provider"),style:ie,onClick:s})}const Ie="_rule_1ymqx_1",Ce="_left_1ymqx_12",Me="_a_1ymqx_19",Se="_b_1ymqx_26",xe="_type_1ymqx_37";var p={rule:Ie,left:Ce,a:Me,b:Se,type:xe};const _={_default:"#59caf9",DIRECT:"#f5bc41",REJECT:"#cb3166"};function Ne({proxy:e}){let s=_._default;return _[e]&&(s=_[e]),{color:s}}function Ee({type:e,payload:s,proxy:r,id:i}){const n=Ne({proxy:r});return c("div",{className:p.rule,children:[a("div",{className:p.left,children:i}),c("div",{children:[a("div",{className:p.b,children:s}),c("div",{className:p.a,children:[a("div",{className:p.type,children:e}),a("div",{style:n,children:r})]})]})]})}const Te="_header_1j1w3_1",ke="_RuleProviderItemWrapper_1j1w3_17";var U={header:Te,RuleProviderItemWrapper:ke};const{memo:Be}=m,C=30;function Ue(e,{rules:s,provider:r}){const i=r.names.length;return e{const{rules:i,provider:n,apiConfig:t}=r,o=n.names.length;if(e({apiConfig:Y(e)});var Ge=X(Le)($e);function $e({apiConfig:e}){const[s,r]=oe(),{rules:i,provider:n}=Re(e),t=Ae({provider:n}),{t:o}=x();return c("div",{children:[c("div",{className:U.header,children:[a(Z,{title:o("Rules")}),a(re,{placeholder:"Filter",textAtom:k})]}),a("div",{ref:s,style:{paddingBottom:C},children:a(te,{height:r-C,width:"100%",itemCount:i.length+n.names.length,itemSize:t,itemData:{rules:i,provider:n,apiConfig:e},itemKey:Ue,children:Fe})}),n&&n.names&&n.names.length>0?a(Oe,{apiConfig:e}):null]})}export{Ge as default};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Rules.72ed8383.css:
--------------------------------------------------------------------------------
1 | ._RuleProviderItem_ly9yn_1{display:grid;grid-template-columns:40px 1fr 46px;height:100%}._left_ly9yn_7{display:inline-flex;align-items:center;color:var(--color-text-secondary);opacity:.4}._middle_ly9yn_14{display:grid;grid-template-rows:1fr auto auto;align-items:center}._gray_ly9yn_20{color:#777}._refreshButtonWrapper_ly9yn_24{display:grid;place-items:center;opacity:0;transition:opacity .2s}._RuleProviderItem_ly9yn_1:hover ._refreshButtonWrapper_ly9yn_24{opacity:1}._rule_1ymqx_1{display:flex;align-items:center;padding:6px 15px}@media screen and (min-width: 30em){._rule_1ymqx_1{padding:10px 40px}}._left_1ymqx_12{width:40px;padding-right:15px;color:var(--color-text-secondary);opacity:.4}._a_1ymqx_19{display:flex;align-items:center;font-size:12px;opacity:.8}._b_1ymqx_26{padding:10px 0;font-family:Roboto Mono,Menlo,monospace;font-size:16px}@media screen and (min-width: 30em){._b_1ymqx_26{font-size:19px}}._type_1ymqx_37{width:110px}._header_1j1w3_1{display:grid;grid-template-columns:1fr minmax(auto,330px);align-items:center;padding-right:15px}@media screen and (min-width: 30em){._header_1j1w3_1{padding-right:40px}}._RuleProviderItemWrapper_1j1w3_17{padding:6px 15px}@media screen and (min-width: 30em){._RuleProviderItemWrapper_1j1w3_17{padding:10px 40px}}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Rules.c9171055.js:
--------------------------------------------------------------------------------
1 | var T=Object.defineProperty,F=Object.defineProperties;var S=Object.getOwnPropertyDescriptors;var _=Object.getOwnPropertySymbols;var $=Object.prototype.hasOwnProperty,A=Object.prototype.propertyIsEnumerable;var R=(e,t,r)=>t in e?T(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,u=(e,t)=>{for(var r in t||(t={}))$.call(t,r)&&R(e,r,t[r]);if(_)for(var r of _(t))A.call(t,r)&&R(e,r,t[r]);return e},v=(e,t)=>F(e,S(t));import{e as q,u as E,N as L,U as P,V as x,r as i,k as I,R as o}from"./vendor.3cf270b6.js";import{a as Q,V as W}from"./index.esm.5b55aaed.js";import{t as h,E as z,B as D,c as U,g as V,C as j}from"./index.d6596dd6.js";import{R as w,T as H}from"./TextFitler.97029c74.js";import{f as M}from"./index.afdc8976.js";import{F as O,p as G}from"./Fab.78b2c04b.js";import{u as J}from"./useRemainingViewPortHeight.91bbcf1d.js";import"./debounce.76599460.js";function K(e){const t=e.providers,r=Object.keys(t),s={};for(let n=0;n=0,"there is no valid rules list in the rules API response"),e.rules.map((t,r)=>v(u({},t),{id:r}))}async function re(e,t){let r={rules:[]};try{const{url:s,init:n}=h(t),a=await fetch(s+e,n);a.ok&&(r=await a.json())}catch(s){console.log("failed to fetch rules",s)}return te(r)}const b=q({key:"ruleFilterText",default:""});function ne(e,t){const r=P(),{mutate:s,isLoading:n}=x(N,{onSuccess:()=>{r.invalidateQueries("/providers/rules")}});return[l=>{l.preventDefault(),s({name:e,apiConfig:t})},n]}function se(e){const t=P(),{data:r}=C(e),{mutate:s,isLoading:n}=x(Y,{onSuccess:()=>{t.invalidateQueries("/providers/rules")}});return[l=>{l.preventDefault(),s({names:r.names,apiConfig:e})},n]}function C(e){return E(["/providers/rules",e],()=>X("/providers/rules",e))}function ae(e){const{data:t,isFetching:r}=E(["/rules",e],()=>re("/rules",e)),{data:s}=C(e),[n]=L(b);if(n==="")return{rules:t,provider:s,isFetching:r};{const a=n.toLowerCase();return{rules:t.filter(l=>l.payload.toLowerCase().indexOf(a)>=0),isFetching:r,provider:{byName:s.byName,names:s.names.filter(l=>l.toLowerCase().indexOf(a)>=0)}}}}const oe="_RuleProviderItem_ly9yn_1",le="_left_ly9yn_7",ie="_middle_ly9yn_14",ce="_gray_ly9yn_20",ue="_refreshButtonWrapper_ly9yn_24";var m={RuleProviderItem:oe,left:le,middle:ie,gray:ce,refreshButtonWrapper:ue};function me({idx:e,name:t,vehicleType:r,behavior:s,updatedAt:n,ruleCount:a,apiConfig:l}){const[d,c]=ne(t,l),f=M(new Date(n),new Date);return i.exports.createElement("div",{className:m.RuleProviderItem},i.exports.createElement("span",{className:m.left},e),i.exports.createElement("div",{className:m.middle},i.exports.createElement(z,{name:t,type:`${r} / ${s}`}),i.exports.createElement("div",{className:m.gray},a<2?`${a} rule`:`${a} rules`),i.exports.createElement("small",{className:m.gray},"Updated ",f," ago")),i.exports.createElement("span",{className:m.refreshButtonWrapper},i.exports.createElement(D,{onClick:d,disabled:c},i.exports.createElement(w,{isRotating:c}))))}function de({apiConfig:e}){const[t,r]=se(e),{t:s}=I();return i.exports.createElement(O,{icon:i.exports.createElement(w,{isRotating:r}),text:s("update_all_rule_provider"),style:G,onClick:t})}const fe="_rule_1ymqx_1",pe="_left_1ymqx_12",ve="_a_1ymqx_19",ye="_b_1ymqx_26",he="_type_1ymqx_37";var p={rule:fe,left:pe,a:ve,b:ye,type:he};const y={_default:"#59caf9",DIRECT:"#f5bc41",REJECT:"#cb3166"};function _e({proxy:e}){let t=y._default;return y[e]&&(t=y[e]),{color:t}}function Re({type:e,payload:t,proxy:r,id:s}){const n=_e({proxy:r});return o.createElement("div",{className:p.rule},o.createElement("div",{className:p.left},s),o.createElement("div",null,o.createElement("div",{className:p.b},t),o.createElement("div",{className:p.a},o.createElement("div",{className:p.type},e),o.createElement("div",{style:n},r))))}const ge="_header_1j1w3_1",Ee="_RuleProviderItemWrapper_1j1w3_17";var k={header:ge,RuleProviderItemWrapper:Ee};const{memo:Pe}=o,g=30;function xe(e,{rules:t,provider:r}){const s=r.names.length;return e{const{rules:s,provider:n,apiConfig:a}=r,l=n.names.length;if(e({apiConfig:V(e)});var Le=U(Ne)(be);function be({apiConfig:e}){const[t,r]=J(),{rules:s,provider:n}=ae(e),a=Ie({provider:n}),{t:l}=I();return o.createElement("div",null,o.createElement("div",{className:k.header},o.createElement(j,{title:l("Rules")}),o.createElement(H,{placeholder:"Filter",textAtom:b})),o.createElement("div",{ref:t,style:{paddingBottom:g}},o.createElement(W,{height:r-g,width:"100%",itemCount:s.length+n.names.length,itemSize:a,itemData:{rules:s,provider:n,apiConfig:e},itemKey:xe},we)),n&&n.names&&n.names.length>0?o.createElement(de,{apiConfig:e}):null)}export{Le as default};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Rules.e03c54a8.css:
--------------------------------------------------------------------------------
1 | ._RuleProviderItem_12aid_1{display:grid;grid-template-columns:40px 1fr 46px;height:100%}._left_12aid_7{display:inline-flex;align-items:center;color:var(--color-text-secondary);opacity:.4}._middle_12aid_14{display:grid;gap:6px;grid-template-rows:1fr auto auto;align-items:center}._gray_12aid_21{color:#777}._action_12aid_25{display:grid;gap:4px;grid-template-columns:auto 1fr;align-items:center}._refreshBtn_12aid_32{padding:5px}._rule_1ymqx_1{display:flex;align-items:center;padding:6px 15px}@media screen and (min-width: 30em){._rule_1ymqx_1{padding:10px 40px}}._left_1ymqx_12{width:40px;padding-right:15px;color:var(--color-text-secondary);opacity:.4}._a_1ymqx_19{display:flex;align-items:center;font-size:12px;opacity:.8}._b_1ymqx_26{padding:10px 0;font-family:Roboto Mono,Menlo,monospace;font-size:16px}@media screen and (min-width: 30em){._b_1ymqx_26{font-size:19px}}._type_1ymqx_37{width:110px}._header_1j1w3_1{display:grid;grid-template-columns:1fr minmax(auto,330px);align-items:center;padding-right:15px}@media screen and (min-width: 30em){._header_1j1w3_1{padding-right:40px}}._RuleProviderItemWrapper_1j1w3_17{padding:6px 15px}@media screen and (min-width: 30em){._RuleProviderItemWrapper_1j1w3_17{padding:10px 40px}}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Select.1e55eba1.css:
--------------------------------------------------------------------------------
1 | ._select_13zm8_1{height:40px;line-height:1.5;width:100%;padding-left:8px;-webkit-appearance:none;appearance:none;background-color:var(--color-input-bg);color:var(--color-text);padding-right:20px;border-radius:4px;border:1px solid var(--color-input-border);background-image:url(data:image/svg+xml,%0A%20%20%20%20%3Csvg%20width%3D%228%22%20height%3D%2224%22%20viewBox%3D%220%200%208%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%20%20%3Cpath%20d%3D%22M4%207L7%2011H1L4%207Z%22%20fill%3D%22%23999999%22%20%2F%3E%0A%20%20%20%20%20%20%3Cpath%20d%3D%22M4%2017L1%2013L7%2013L4%2017Z%22%20fill%3D%22%23999999%22%20%2F%3E%0A%20%20%20%20%3C%2Fsvg%3E%0A%20%20);background-position:right 8px center;background-repeat:no-repeat}._select_13zm8_1:hover,._select_13zm8_1:focus{border-color:#343434;outline:none!important;color:var(--color-text-highlight);background-image:var(--select-bg-hover)}._select_13zm8_1:focus{box-shadow:#4299e199 0 0 0 3px}._select_13zm8_1 option{background-color:var(--color-background)}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Select.4987ab41.js:
--------------------------------------------------------------------------------
1 | import{j as s}from"./index.27058ddf.js";const n="_select_13zm8_1";var o={select:n};function i({options:t,selected:c,onChange:l}){return s("select",{className:o.select,value:c,onChange:l,children:t.map(([e,r])=>s("option",{value:e,children:r},e))})}export{i as S};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Select.9583f722.js:
--------------------------------------------------------------------------------
1 | import{r as t}from"./vendor.3cf270b6.js";const l="_select_1mr76_1";var o={select:l};function n({options:r,selected:s,onChange:c}){return t.exports.createElement("select",{className:o.select,value:s,onChange:c},r.map(([e,a])=>t.exports.createElement("option",{key:e,value:e},a)))}export{n as S};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Select.9a98fc65.css:
--------------------------------------------------------------------------------
1 | ._select_1mr76_1{height:40px;line-height:1.5;width:100%;padding-left:8px;-webkit-appearance:none;appearance:none;background-color:var(--color-input-bg);color:var(--color-text);padding-right:20px;border-radius:4px;border:1px solid var(--color-input-border);background-image:url(data:image/svg+xml,%0A%20%20%20%20%3Csvg%20width%3D%228%22%20height%3D%2224%22%20viewBox%3D%220%200%208%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%20%20%3Cpath%20d%3D%22M4%207L7%2011H1L4%207Z%22%20fill%3D%22%23999999%22%20%2F%3E%0A%20%20%20%20%20%20%3Cpath%20d%3D%22M4%2017L1%2013L7%2013L4%2017Z%22%20fill%3D%22%23999999%22%20%2F%3E%0A%20%20%20%20%3C%2Fsvg%3E%0A%20%20);background-position:right 8px center;background-repeat:no-repeat}._select_1mr76_1:hover,._select_1mr76_1:focus{border-color:#343434;outline:none!important;color:var(--color-text-highlight);background-image:var(--select-bg-hover)}._select_1mr76_1:focus{box-shadow:#4299e199 0 0 0 3px}._select_1mr76_1 option{background-color:var(--color-background)}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Select.aace7191.css:
--------------------------------------------------------------------------------
1 | ._select_13zm8_1{height:40px;line-height:1.5;width:100%;padding-left:8px;-webkit-appearance:none;appearance:none;background-color:var(--color-input-bg);color:var(--color-text);padding-right:20px;border-radius:4px;border:1px solid var(--color-input-border);background-image:url(data:image/svg+xml,%0A%20%20%20%20%3Csvg%20width%3D%228%22%20height%3D%2224%22%20viewBox%3D%220%200%208%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%20%20%3Cpath%20d%3D%22M4%207L7%2011H1L4%207Z%22%20fill%3D%22%23999999%22%20%2F%3E%0A%20%20%20%20%20%20%3Cpath%20d%3D%22M4%2017L1%2013L7%2013L4%2017Z%22%20fill%3D%22%23999999%22%20%2F%3E%0A%20%20%20%20%3C%2Fsvg%3E%0A%20%20);background-position:right 8px center;background-repeat:no-repeat}._select_13zm8_1:hover,._select_13zm8_1:focus{border-color:#343434;outline:none!important;color:var(--color-text-highlight);background-image:var(--select-bg-hover)}._select_13zm8_1:focus{box-shadow:#4299e199 0 0 0 3px}._select_13zm8_1 option{background-color:var(--color-background)}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/Select.f2dd4970.js:
--------------------------------------------------------------------------------
1 | import{j as s}from"./index.31d0d1dc.js";const o="_select_13zm8_1",r={select:o};function i({options:t,selected:c,onChange:l}){return s("select",{className:r.select,value:c,onChange:l,children:t.map(([e,n])=>s("option",{value:e,children:n},e))})}export{i as S};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/TextFitler.3d9182a0.css:
--------------------------------------------------------------------------------
1 | ._rotate_1dspl_1{display:inline-flex}._isRotating_1dspl_5{-webkit-animation:_rotating_1dspl_1 3s infinite linear;animation:_rotating_1dspl_1 3s infinite linear;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes _rotating_1dspl_1{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes _rotating_1dspl_1{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}._input_16a1f_1{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:20px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;outline:none;padding:8px 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._input_16a1f_1:focus{border:1px solid var(--color-focus-blue)}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/TextFitler.8b7d1ec3.js:
--------------------------------------------------------------------------------
1 | var h=Object.defineProperty,v=Object.defineProperties;var x=Object.getOwnPropertyDescriptors;var p=Object.getOwnPropertySymbols;var _=Object.prototype.hasOwnProperty,b=Object.prototype.propertyIsEnumerable;var u=(t,e,o)=>e in t?h(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,f=(t,e)=>{for(var o in e||(e={}))_.call(e,o)&&u(t,o,e[o]);if(p)for(var o of p(e))b.call(e,o)&&u(t,o,e[o]);return t},g=(t,e)=>v(t,x(e));import{r as y,b as m,j as i,P as c,c as w,U as R,h as j}from"./index.27058ddf.js";import{d as O}from"./debounce.d080d5e1.js";function T(t,e){if(t==null)return{};var o=k(t,e),r,n;if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&(!Object.prototype.propertyIsEnumerable.call(t,r)||(o[r]=t[r]))}return o}function k(t,e){if(t==null)return{};var o={},r=Object.keys(t),n,a;for(a=0;a=0)&&(o[n]=t[n]);return o}var l=y.exports.forwardRef(function(t,e){var o=t.color,r=o===void 0?"currentColor":o,n=t.size,a=n===void 0?24:n,s=T(t,["color","size"]);return m("svg",g(f({ref:e,xmlns:"http://www.w3.org/2000/svg",width:a,height:a,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},s),{children:[i("polyline",{points:"23 4 23 10 17 10"}),i("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"})]}))});l.propTypes={color:c.string,size:c.oneOfType([c.string,c.number])};l.displayName="RotateCw";var C=l;const P="_rotate_1dspl_1",z="_isRotating_1dspl_5",L="_rotating_1dspl_1";var d={rotate:P,isRotating:z,rotating:L};function E({isRotating:t}){const e=w(d.rotate,{[d.isRotating]:t});return i("span",{className:e,children:i(C,{width:16})})}const{useCallback:$,useState:I,useMemo:N}=j;function W(t){const[,e]=R(t),[o,r]=I(""),n=N(()=>O(e,300),[e]);return[$(s=>{r(s.target.value),n(s.target.value)},[n]),o]}const M="_input_16a1f_1";var S={input:M};function F(t){const[e,o]=W(t.textAtom);return i("input",{className:S.input,type:"text",value:o,onChange:e,placeholder:t.placeholder})}export{E as R,F as T,C as a};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/TextFitler.97029c74.js:
--------------------------------------------------------------------------------
1 | import{g as i,r as n,O as l,N as u,j as p}from"./vendor.3cf270b6.js";import{d as x}from"./debounce.76599460.js";const _="_rotate_1dspl_1",g="_isRotating_1dspl_5",m="_rotating_1dspl_1";var r={rotate:_,isRotating:g,rotating:m};function N({isRotating:t}){const e=i(r.rotate,{[r.isRotating]:t});return n.exports.createElement("span",{className:e},n.exports.createElement(l,{width:16}))}const{useCallback:d,useState:R,useMemo:f}=p;function h(t){const[,e]=u(t),[a,c]=R(""),o=f(()=>x(e,300),[e]);return[d(s=>{c(s.target.value),o(s.target.value)},[o]),a]}const T="_input_16a1f_1";var v={input:T};function w(t){const[e,a]=h(t.textAtom);return n.exports.createElement("input",{className:v.input,type:"text",value:a,onChange:e,placeholder:t.placeholder})}export{N as R,w as T};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/TextFitler.b21c0577.css:
--------------------------------------------------------------------------------
1 | ._rotate_1dspl_1{display:inline-flex}._isRotating_1dspl_5{-webkit-animation:_rotating_1dspl_1 3s infinite linear;animation:_rotating_1dspl_1 3s infinite linear;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes _rotating_1dspl_1{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes _rotating_1dspl_1{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}._input_16a1f_1{-webkit-appearance:none;background-color:var(--color-input-bg);background-image:none;border-radius:20px;border:1px solid var(--color-input-border);box-sizing:border-box;color:#c1c1c1;display:inline-block;font-size:inherit;outline:none;padding:8px 15px;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}._input_16a1f_1:focus{border:1px solid var(--color-focus-blue)}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/TextFitler.e1325e60.js:
--------------------------------------------------------------------------------
1 | import{r as u,b as g,j as i,i as c,c as f,V as x,h as d}from"./index.31d0d1dc.js";import{d as h}from"./debounce.c2d20996.js";function v(t,n){if(t==null)return{};var o=_(t,n),r,e;if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);for(e=0;e=0)&&(!Object.prototype.propertyIsEnumerable.call(t,r)||(o[r]=t[r]))}return o}function _(t,n){if(t==null)return{};var o={},r=Object.keys(t),e,s;for(s=0;s=0)&&(o[e]=t[e]);return o}var l=u.exports.forwardRef(function(t,n){var o=t.color,r=o===void 0?"currentColor":o,e=t.size,s=e===void 0?24:e,a=v(t,["color","size"]);return g("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:s,height:s,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:[i("polyline",{points:"23 4 23 10 17 10"}),i("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"})]})});l.propTypes={color:c.exports.string,size:c.exports.oneOfType([c.exports.string,c.exports.number])};l.displayName="RotateCw";const b=l,y="_rotate_1dspl_1",m="_isRotating_1dspl_5",R="_rotating_1dspl_1",p={rotate:y,isRotating:m,rotating:R};function P(t){const n=t.size||16,o=f(p.rotate,{[p.isRotating]:t.isRotating});return i("span",{className:o,children:i(b,{size:n})})}const{useCallback:w,useState:j,useMemo:O}=d;function T(t){const[,n]=x(t),[o,r]=j(""),e=O(()=>h(n,300),[n]);return[w(a=>{r(a.target.value),e(a.target.value)},[e]),o]}const k="_input_16a1f_1",C={input:k};function $(t){const[n,o]=T(t.textAtom);return i("input",{className:C.input,type:"text",value:o,onChange:n,placeholder:t.placeholder})}export{P as R,$ as T,b as a};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/chevron-down.2de0fb4e.js:
--------------------------------------------------------------------------------
1 | var u=Object.defineProperty,y=Object.defineProperties;var g=Object.getOwnPropertyDescriptors;var l=Object.getOwnPropertySymbols;var w=Object.prototype.hasOwnProperty,b=Object.prototype.propertyIsEnumerable;var p=(r,e,o)=>e in r?u(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,f=(r,e)=>{for(var o in e||(e={}))w.call(e,o)&&p(r,o,e[o]);if(l)for(var o of l(e))b.call(e,o)&&p(r,o,e[o]);return r},v=(r,e)=>y(r,g(e));import{r as d,j as c,P as s}from"./index.27058ddf.js";function j(r,e){if(r==null)return{};var o=O(r,e),n,t;if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);for(t=0;t=0)&&(!Object.prototype.propertyIsEnumerable.call(r,n)||(o[n]=r[n]))}return o}function O(r,e){if(r==null)return{};var o={},n=Object.keys(r),t,i;for(i=0;i=0)&&(o[t]=r[t]);return o}var a=d.exports.forwardRef(function(r,e){var o=r.color,n=o===void 0?"currentColor":o,t=r.size,i=t===void 0?24:t,h=j(r,["color","size"]);return c("svg",v(f({ref:e,xmlns:"http://www.w3.org/2000/svg",width:i,height:i,viewBox:"0 0 24 24",fill:"none",stroke:n,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},h),{children:c("polyline",{points:"6 9 12 15 18 9"})}))});a.propTypes={color:s.string,size:s.oneOfType([s.string,s.number])};a.displayName="ChevronDown";var x=a;export{x as C};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/chevron-down.f5a64258.js:
--------------------------------------------------------------------------------
1 | import{r as f,j as l,i as s}from"./index.31d0d1dc.js";function c(r,i){if(r==null)return{};var n=v(r,i),o,e;if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);for(e=0;e=0)&&(!Object.prototype.propertyIsEnumerable.call(r,o)||(n[o]=r[o]))}return n}function v(r,i){if(r==null)return{};var n={},o=Object.keys(r),e,t;for(t=0;t=0)&&(n[e]=r[e]);return n}var p=f.exports.forwardRef(function(r,i){var n=r.color,o=n===void 0?"currentColor":n,e=r.size,t=e===void 0?24:e,a=c(r,["color","size"]);return l("svg",{ref:i,xmlns:"http://www.w3.org/2000/svg",width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:o,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:l("polyline",{points:"6 9 12 15 18 9"})})});p.propTypes={color:s.exports.string,size:s.exports.oneOfType([s.exports.string,s.exports.number])};p.displayName="ChevronDown";const u=p;export{u as C};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/debounce.76599460.js:
--------------------------------------------------------------------------------
1 | function S(e){var n=typeof e;return e!=null&&(n=="object"||n=="function")}var M=typeof global=="object"&&global&&global.Object===Object&&global,R=M,w=typeof self=="object"&&self&&self.Object===Object&&self,B=R||w||Function("return this")(),W=B,F=function(){return W.Date.now()},p=F,G=/\s/;function U(e){for(var n=e.length;n--&&G.test(e.charAt(n)););return n}var _=/^\s+/;function D(e){return e&&e.slice(0,U(e)+1).replace(_,"")}var H=W.Symbol,y=H,L=Object.prototype,X=L.hasOwnProperty,q=L.toString,g=y?y.toStringTag:void 0;function z(e){var n=X.call(e,g),i=e[g];try{e[g]=void 0;var o=!0}catch{}var f=q.call(e);return o&&(n?e[g]=i:delete e[g]),f}var J=Object.prototype,K=J.toString;function Q(e){return K.call(e)}var V="[object Null]",Y="[object Undefined]",$=y?y.toStringTag:void 0;function Z(e){return e==null?e===void 0?Y:V:$&&$ in Object(e)?z(e):Q(e)}function ee(e){return e!=null&&typeof e=="object"}var ne="[object Symbol]";function te(e){return typeof e=="symbol"||ee(e)&&Z(e)==ne}var E=0/0,re=/^[-+]0x[0-9a-f]+$/i,ie=/^0b[01]+$/i,oe=/^0o[0-7]+$/i,ae=parseInt;function k(e){if(typeof e=="number")return e;if(te(e))return E;if(S(e)){var n=typeof e.valueOf=="function"?e.valueOf():e;e=S(n)?n+"":n}if(typeof e!="string")return e===0?e:+e;e=D(e);var i=ie.test(e);return i||oe.test(e)?ae(e.slice(2),i?2:8):re.test(e)?E:+e}var fe="Expected a function",ce=Math.max,ue=Math.min;function se(e,n,i){var o,f,s,u,r,c,d=0,O=!1,l=!1,T=!0;if(typeof e!="function")throw new TypeError(fe);n=k(n)||0,S(i)&&(O=!!i.leading,l="maxWait"in i,s=l?ce(k(i.maxWait)||0,n):s,T="trailing"in i?!!i.trailing:T);function j(t){var a=o,b=f;return o=f=void 0,d=t,u=e.apply(b,a),u}function N(t){return d=t,r=setTimeout(m,n),O?j(t):u}function P(t){var a=t-c,b=t-d,I=n-a;return l?ue(I,s-b):I}function h(t){var a=t-c,b=t-d;return c===void 0||a>=n||a<0||l&&b>=s}function m(){var t=p();if(h(t))return x(t);r=setTimeout(m,P(t))}function x(t){return r=void 0,T&&o?j(t):(o=f=void 0,u)}function A(){r!==void 0&&clearTimeout(r),d=0,o=c=f=r=void 0}function C(){return r===void 0?u:x(p())}function v(){var t=p(),a=h(t);if(o=arguments,f=this,c=t,a){if(r===void 0)return N(c);if(l)return clearTimeout(r),r=setTimeout(m,n),j(c)}return r===void 0&&(r=setTimeout(m,n)),u}return v.cancel=A,v.flush=C,v}export{se as d};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/debounce.c2d20996.js:
--------------------------------------------------------------------------------
1 | function O(e){var n=typeof e;return e!=null&&(n=="object"||n=="function")}var M=typeof global=="object"&&global&&global.Object===Object&&global;const R=M;var w=typeof self=="object"&&self&&self.Object===Object&&self,B=R||w||Function("return this")();const W=B;var F=function(){return W.Date.now()};const S=F;var G=/\s/;function U(e){for(var n=e.length;n--&&G.test(e.charAt(n)););return n}var _=/^\s+/;function D(e){return e&&e.slice(0,U(e)+1).replace(_,"")}var H=W.Symbol;const y=H;var L=Object.prototype,X=L.hasOwnProperty,q=L.toString,g=y?y.toStringTag:void 0;function z(e){var n=X.call(e,g),i=e[g];try{e[g]=void 0;var o=!0}catch{}var f=q.call(e);return o&&(n?e[g]=i:delete e[g]),f}var J=Object.prototype,K=J.toString;function Q(e){return K.call(e)}var V="[object Null]",Y="[object Undefined]",$=y?y.toStringTag:void 0;function Z(e){return e==null?e===void 0?Y:V:$&&$ in Object(e)?z(e):Q(e)}function ee(e){return e!=null&&typeof e=="object"}var ne="[object Symbol]";function te(e){return typeof e=="symbol"||ee(e)&&Z(e)==ne}var E=0/0,re=/^[-+]0x[0-9a-f]+$/i,ie=/^0b[01]+$/i,oe=/^0o[0-7]+$/i,ae=parseInt;function k(e){if(typeof e=="number")return e;if(te(e))return E;if(O(e)){var n=typeof e.valueOf=="function"?e.valueOf():e;e=O(n)?n+"":n}if(typeof e!="string")return e===0?e:+e;e=D(e);var i=ie.test(e);return i||oe.test(e)?ae(e.slice(2),i?2:8):re.test(e)?E:+e}var fe="Expected a function",ce=Math.max,ue=Math.min;function se(e,n,i){var o,f,s,u,r,c,d=0,v=!1,l=!1,T=!0;if(typeof e!="function")throw new TypeError(fe);n=k(n)||0,O(i)&&(v=!!i.leading,l="maxWait"in i,s=l?ce(k(i.maxWait)||0,n):s,T="trailing"in i?!!i.trailing:T);function j(t){var a=o,b=f;return o=f=void 0,d=t,u=e.apply(b,a),u}function N(t){return d=t,r=setTimeout(m,n),v?j(t):u}function P(t){var a=t-c,b=t-d,I=n-a;return l?ue(I,s-b):I}function h(t){var a=t-c,b=t-d;return c===void 0||a>=n||a<0||l&&b>=s}function m(){var t=S();if(h(t))return x(t);r=setTimeout(m,P(t))}function x(t){return r=void 0,T&&o?j(t):(o=f=void 0,u)}function A(){r!==void 0&&clearTimeout(r),d=0,o=c=f=r=void 0}function C(){return r===void 0?u:x(S())}function p(){var t=S(),a=h(t);if(o=arguments,f=this,c=t,a){if(r===void 0)return N(c);if(l)return clearTimeout(r),r=setTimeout(m,n),j(c)}return r===void 0&&(r=setTimeout(m,n)),u}return p.cancel=A,p.flush=C,p}export{se as d};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/debounce.d080d5e1.js:
--------------------------------------------------------------------------------
1 | function S(e){var n=typeof e;return e!=null&&(n=="object"||n=="function")}var M=typeof global=="object"&&global&&global.Object===Object&&global,R=M,w=typeof self=="object"&&self&&self.Object===Object&&self,B=R||w||Function("return this")(),W=B,F=function(){return W.Date.now()},p=F,G=/\s/;function U(e){for(var n=e.length;n--&&G.test(e.charAt(n)););return n}var _=/^\s+/;function D(e){return e&&e.slice(0,U(e)+1).replace(_,"")}var H=W.Symbol,y=H,L=Object.prototype,X=L.hasOwnProperty,q=L.toString,g=y?y.toStringTag:void 0;function z(e){var n=X.call(e,g),i=e[g];try{e[g]=void 0;var o=!0}catch{}var f=q.call(e);return o&&(n?e[g]=i:delete e[g]),f}var J=Object.prototype,K=J.toString;function Q(e){return K.call(e)}var V="[object Null]",Y="[object Undefined]",$=y?y.toStringTag:void 0;function Z(e){return e==null?e===void 0?Y:V:$&&$ in Object(e)?z(e):Q(e)}function ee(e){return e!=null&&typeof e=="object"}var ne="[object Symbol]";function te(e){return typeof e=="symbol"||ee(e)&&Z(e)==ne}var E=0/0,re=/^[-+]0x[0-9a-f]+$/i,ie=/^0b[01]+$/i,oe=/^0o[0-7]+$/i,ae=parseInt;function k(e){if(typeof e=="number")return e;if(te(e))return E;if(S(e)){var n=typeof e.valueOf=="function"?e.valueOf():e;e=S(n)?n+"":n}if(typeof e!="string")return e===0?e:+e;e=D(e);var i=ie.test(e);return i||oe.test(e)?ae(e.slice(2),i?2:8):re.test(e)?E:+e}var fe="Expected a function",ce=Math.max,ue=Math.min;function se(e,n,i){var o,f,s,u,r,c,d=0,O=!1,l=!1,T=!0;if(typeof e!="function")throw new TypeError(fe);n=k(n)||0,S(i)&&(O=!!i.leading,l="maxWait"in i,s=l?ce(k(i.maxWait)||0,n):s,T="trailing"in i?!!i.trailing:T);function j(t){var a=o,b=f;return o=f=void 0,d=t,u=e.apply(b,a),u}function N(t){return d=t,r=setTimeout(m,n),O?j(t):u}function P(t){var a=t-c,b=t-d,I=n-a;return l?ue(I,s-b):I}function h(t){var a=t-c,b=t-d;return c===void 0||a>=n||a<0||l&&b>=s}function m(){var t=p();if(h(t))return x(t);r=setTimeout(m,P(t))}function x(t){return r=void 0,T&&o?j(t):(o=f=void 0,u)}function A(){r!==void 0&&clearTimeout(r),d=0,o=c=f=r=void 0}function C(){return r===void 0?u:x(p())}function v(){var t=p(),a=h(t);if(o=arguments,f=this,c=t,a){if(r===void 0)return N(c);if(l)return clearTimeout(r),r=setTimeout(m,n),j(c)}return r===void 0&&(r=setTimeout(m,n)),u}return v.cancel=A,v.flush=C,v}export{se as d};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/en.fb34eaf7.js:
--------------------------------------------------------------------------------
1 | const e={Overview:"Overview",Proxies:"Proxies",Rules:"Rules",Conns:"Conns",Config:"Config",Logs:"Logs",Upload:"Upload",Download:"Download","Upload Total":"Upload Total","Download Total":"Download Total","Active Connections":"Active Connections","Pause Refresh":"Pause Refresh","Resume Refresh":"Resume Refresh",Up:"Up",Down:"Down","Test Latency":"Test Latency",settings:"settings",sort_in_grp:"Sorting in group",hide_unavail_proxies:"Hide unavailable proxies",auto_close_conns:"Automatically close old connections",order_natural:"Original order in config file",order_latency_asc:"By latency from small to big",order_latency_desc:"By latency from big to small",order_name_asc:"By name alphabetically (A-Z)",order_name_desc:"By name alphabetically (Z-A)",Connections:"Connections",Active:"Active",Closed:"Closed",switch_theme:"Switch theme",theme:"theme",about:"about",no_logs:"No logs yet, hang tight...",chart_style:"Chart Style",latency_test_url:"Latency Test URL",lang:"Language",update_all_rule_provider:"Update all rule providers",update_all_proxy_provider:"Update all proxy providers"};export{e as data};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/inter-latin-400-normal.9ec803ce.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/webs/koolclash/assets/inter-latin-400-normal.9ec803ce.woff
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/inter-latin-400-normal.d56fec21.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/webs/koolclash/assets/inter-latin-400-normal.d56fec21.woff2
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/inter-latin-800-normal.5eea1309.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/webs/koolclash/assets/inter-latin-800-normal.5eea1309.woff2
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/inter-latin-800-normal.98c540b2.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/webs/koolclash/assets/inter-latin-800-normal.98c540b2.woff
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/logs.7cc467a0.js:
--------------------------------------------------------------------------------
1 | var $=Object.defineProperty,k=Object.defineProperties;var y=Object.getOwnPropertyDescriptors;var h=Object.getOwnPropertySymbols;var E=Object.prototype.hasOwnProperty,A=Object.prototype.propertyIsEnumerable;var S=(e,t,n)=>t in e?$(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,b=(e,t)=>{for(var n in t||(t={}))E.call(t,n)&&S(e,n,t[n]);if(h)for(var n of h(t))A.call(t,n)&&S(e,n,t[n]);return e},v=(e,t)=>k(e,y(t));import{A as O,D as R,E as u}from"./index.27058ddf.js";const L="/logs",x=new TextDecoder("utf-8"),F=()=>Math.floor((1+Math.random())*65536).toString(16);let p=!1,i=!1,f="",s,g;function m(e,t){let n;try{n=JSON.parse(e)}catch{console.log("JSON.parse error",JSON.parse(e))}const r=new Date,l=H(r);n.time=l,n.id=+r-0+F(),n.even=p=!p,t(n)}function H(e){const t=e.getFullYear()%100,n=u(e.getMonth()+1,2),r=u(e.getDate(),2),l=u(e.getHours(),2),o=u(e.getMinutes(),2),c=u(e.getSeconds(),2);return`${t}-${n}-${r} ${l}:${o}:${c}`}function M(e,t){return e.read().then(({done:n,value:r})=>{f+=x.decode(r,{stream:!n});const o=f.split(`
2 | `),c=o[o.length-1];for(let d=0;de[n]).join("|")}let w,a;function J(e,t){if(e.logLevel==="uninit"||i||s&&s.readyState===1)return;g=t;const n=O(e,L);s=new WebSocket(n),s.addEventListener("error",()=>{N(e,t)}),s.addEventListener("message",function(r){m(r.data,t)})}function Y(){s.close(),a&&a.abort()}function j(e){!g||!s||(s.close(),i=!1,J(e,g))}function N(e,t){if(a&&D(e)!==w)a.abort();else if(i)return;i=!0,w=D(e),a=new AbortController;const n=a.signal,{url:r,init:l}=R(e);fetch(r+L+"?level="+e.logLevel,v(b({},l),{signal:n})).then(o=>{const c=o.body.getReader();M(c,t)},o=>{i=!1,!n.aborted&&console.log("GET /logs error:",o.message)})}export{J as f,j as r,Y as s};
3 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/logs.8963bea3.js:
--------------------------------------------------------------------------------
1 | var $=Object.defineProperty,k=Object.defineProperties;var y=Object.getOwnPropertyDescriptors;var h=Object.getOwnPropertySymbols;var E=Object.prototype.hasOwnProperty,O=Object.prototype.propertyIsEnumerable;var S=(e,t,n)=>t in e?$(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,v=(e,t)=>{for(var n in t||(t={}))E.call(t,n)&&S(e,n,t[n]);if(h)for(var n of h(t))O.call(t,n)&&S(e,n,t[n]);return e},b=(e,t)=>k(e,y(t));import{r as R,t as x,v as u}from"./index.d6596dd6.js";const L="/logs",A=new TextDecoder("utf-8"),F=()=>Math.floor((1+Math.random())*65536).toString(16);let p=!1,i=!1,f="",s,g;function m(e,t){let n;try{n=JSON.parse(e)}catch{console.log("JSON.parse error",JSON.parse(e))}const r=new Date,l=H(r);n.time=l,n.id=+r-0+F(),n.even=p=!p,t(n)}function H(e){const t=e.getFullYear()%100,n=u(e.getMonth()+1,2),r=u(e.getDate(),2),l=u(e.getHours(),2),o=u(e.getMinutes(),2),c=u(e.getSeconds(),2);return`${t}-${n}-${r} ${l}:${o}:${c}`}function M(e,t){return e.read().then(({done:n,value:r})=>{f+=A.decode(r,{stream:!n});const o=f.split(`
2 | `),c=o[o.length-1];for(let d=0;de[n]).join("|")}let D,a;function J(e,t){if(e.logLevel==="uninit"||i||s&&s.readyState===1)return;g=t;const n=R(e,L);s=new WebSocket(n),s.addEventListener("error",()=>{N(e,t)}),s.addEventListener("message",function(r){m(r.data,t)})}function Y(){s.close(),a&&a.abort()}function j(e){!g||!s||(s.close(),i=!1,J(e,g))}function N(e,t){if(a&&w(e)!==D)a.abort();else if(i)return;i=!0,D=w(e),a=new AbortController;const n=a.signal,{url:r,init:l}=x(e);fetch(r+L+"?level="+e.logLevel,b(v({},l),{signal:n})).then(o=>{const c=o.body.getReader();M(c,t)},o=>{i=!1,!n.aborted&&console.log("GET /logs error:",o.message)})}export{J as f,j as r,Y as s};
3 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/logs.975cc896.js:
--------------------------------------------------------------------------------
1 | import{D,E as w,G as u}from"./index.31d0d1dc.js";const v="/logs",L=new TextDecoder("utf-8"),M=()=>Math.floor((1+Math.random())*65536).toString(16);let h=!1,i=!1,f="",s,g;function m(e,n){let t;try{t=JSON.parse(e)}catch{console.log("JSON.parse error",JSON.parse(e))}const r=new Date,l=$(r);t.time=l,t.id=+r-0+M(),t.even=h=!h,n(t)}function $(e){const n=e.getFullYear()%100,t=u(e.getMonth()+1,2),r=u(e.getDate(),2),l=u(e.getHours(),2),o=u(e.getMinutes(),2),c=u(e.getSeconds(),2);return`${n}-${t}-${r} ${l}:${o}:${c}`}function p(e,n){return e.read().then(({done:t,value:r})=>{f+=L.decode(r,{stream:!t});const o=f.split(`
2 | `),c=o[o.length-1];for(let d=0;de[t]).join("|")}let b,a;function k(e,n){if(e.logLevel==="uninit"||i||s&&s.readyState===1)return;g=n;const t=D(e,v);s=new WebSocket(t),s.addEventListener("error",()=>{y(e,n)}),s.addEventListener("message",function(r){m(r.data,n)})}function O(){s.close(),a&&a.abort()}function R(e){!g||!s||(s.close(),i=!1,k(e,g))}function y(e,n){if(a&&S(e)!==b)a.abort();else if(i)return;i=!0,b=S(e),a=new AbortController;const t=a.signal,{url:r,init:l}=w(e);fetch(r+v+"?level="+e.logLevel,{...l,signal:t}).then(o=>{const c=o.body.getReader();p(c,n)},o=>{i=!1,!t.aborted&&console.log("GET /logs error:",o.message)})}export{k as f,R as r,O as s};
3 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/open-sans-latin-400-normal.cce57747.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/webs/koolclash/assets/open-sans-latin-400-normal.cce57747.woff2
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/open-sans-latin-400-normal.d7410996.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/webs/koolclash/assets/open-sans-latin-400-normal.d7410996.woff
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/open-sans-latin-700-normal.a61d6725.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/webs/koolclash/assets/open-sans-latin-700-normal.a61d6725.woff2
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/open-sans-latin-700-normal.b1fda8d8.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/webs/koolclash/assets/open-sans-latin-700-normal.b1fda8d8.woff
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/play.1bfea717.js:
--------------------------------------------------------------------------------
1 | var h=Object.defineProperty,d=Object.defineProperties;var w=Object.getOwnPropertyDescriptors;var y=Object.getOwnPropertySymbols;var b=Object.prototype.hasOwnProperty,O=Object.prototype.propertyIsEnumerable;var v=(e,t,r)=>t in e?h(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,p=(e,t)=>{for(var r in t||(t={}))b.call(t,r)&&v(e,r,t[r]);if(y)for(var r of y(t))O.call(t,r)&&v(e,r,t[r]);return e},f=(e,t)=>d(e,w(t));import{r as g,b as j,j as a,P as s}from"./index.27058ddf.js";function P(e,t){if(e==null)return{};var r=k(e,t),i,o;if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0)&&(!Object.prototype.propertyIsEnumerable.call(e,i)||(r[i]=e[i]))}return r}function k(e,t){if(e==null)return{};var r={},i=Object.keys(e),o,n;for(n=0;n=0)&&(r[o]=e[o]);return r}var c=g.exports.forwardRef(function(e,t){var r=e.color,i=r===void 0?"currentColor":r,o=e.size,n=o===void 0?24:o,l=P(e,["color","size"]);return j("svg",f(p({ref:t,xmlns:"http://www.w3.org/2000/svg",width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:i,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},l),{children:[a("rect",{x:"6",y:"4",width:"4",height:"16"}),a("rect",{x:"14",y:"4",width:"4",height:"16"})]}))});c.propTypes={color:s.string,size:s.oneOfType([s.string,s.number])};c.displayName="Pause";var L=c;function x(e,t){if(e==null)return{};var r=m(e,t),i,o;if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0)&&(!Object.prototype.propertyIsEnumerable.call(e,i)||(r[i]=e[i]))}return r}function m(e,t){if(e==null)return{};var r={},i=Object.keys(e),o,n;for(n=0;n=0)&&(r[o]=e[o]);return r}var u=g.exports.forwardRef(function(e,t){var r=e.color,i=r===void 0?"currentColor":r,o=e.size,n=o===void 0?24:o,l=x(e,["color","size"]);return a("svg",f(p({ref:t,xmlns:"http://www.w3.org/2000/svg",width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:i,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},l),{children:a("polygon",{points:"5 3 19 12 5 21 5 3"})}))});u.propTypes={color:s.string,size:s.oneOfType([s.string,s.number])};u.displayName="Play";var W=u;export{W as P,L as a};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/play.42659ab6.js:
--------------------------------------------------------------------------------
1 | import{r as c,b as u,j as p,i as s}from"./index.31d0d1dc.js";function y(e,n){if(e==null)return{};var i=g(e,n),t,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0)&&(!Object.prototype.propertyIsEnumerable.call(e,t)||(i[t]=e[t]))}return i}function g(e,n){if(e==null)return{};var i={},t=Object.keys(e),r,o;for(o=0;o=0)&&(i[r]=e[r]);return i}var l=c.exports.forwardRef(function(e,n){var i=e.color,t=i===void 0?"currentColor":i,r=e.size,o=r===void 0?24:r,a=y(e,["color","size"]);return u("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:o,height:o,viewBox:"0 0 24 24",fill:"none",stroke:t,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:[p("rect",{x:"6",y:"4",width:"4",height:"16"}),p("rect",{x:"14",y:"4",width:"4",height:"16"})]})});l.propTypes={color:s.exports.string,size:s.exports.oneOfType([s.exports.string,s.exports.number])};l.displayName="Pause";const d=l;function h(e,n){if(e==null)return{};var i=v(e,n),t,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0)&&(!Object.prototype.propertyIsEnumerable.call(e,t)||(i[t]=e[t]))}return i}function v(e,n){if(e==null)return{};var i={},t=Object.keys(e),r,o;for(o=0;o=0)&&(i[r]=e[r]);return i}var f=c.exports.forwardRef(function(e,n){var i=e.color,t=i===void 0?"currentColor":i,r=e.size,o=r===void 0?24:r,a=h(e,["color","size"]);return p("svg",{ref:n,xmlns:"http://www.w3.org/2000/svg",width:o,height:o,viewBox:"0 0 24 24",fill:"none",stroke:t,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...a,children:p("polygon",{points:"5 3 19 12 5 21 5 3"})})});f.propTypes={color:s.exports.string,size:s.exports.oneOfType([s.exports.string,s.exports.number])};f.displayName="Play";const w=f;export{w as P,d as a};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/roboto-mono-latin-400-normal.2dfc0e86.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/webs/koolclash/assets/roboto-mono-latin-400-normal.2dfc0e86.woff
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/roboto-mono-latin-400-normal.e1fd013a.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/webs/koolclash/assets/roboto-mono-latin-400-normal.e1fd013a.woff2
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/useRemainingViewPortHeight.49042856.js:
--------------------------------------------------------------------------------
1 | import{h as r}from"./index.27058ddf.js";const{useState:s,useRef:u,useCallback:a,useLayoutEffect:c}=r;function d(){const t=u(null),[n,i]=s(200),e=a(()=>{const{top:o}=t.current.getBoundingClientRect();i(window.innerHeight-o)},[]);return c(()=>(e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}),[e]),[t,n]}export{d as u};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/useRemainingViewPortHeight.76d7ff5c.js:
--------------------------------------------------------------------------------
1 | import{h as r}from"./index.31d0d1dc.js";const{useState:s,useRef:u,useCallback:a,useLayoutEffect:c}=r;function d(){const t=u(null),[n,i]=s(200),e=a(()=>{const{top:o}=t.current.getBoundingClientRect();i(window.innerHeight-o)},[]);return c(()=>(e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}),[e]),[t,n]}export{d as u};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/useRemainingViewPortHeight.91bbcf1d.js:
--------------------------------------------------------------------------------
1 | import{j as r}from"./vendor.3cf270b6.js";const{useState:s,useRef:u,useCallback:a,useLayoutEffect:c}=r;function d(){const t=u(null),[n,i]=s(200),e=a(()=>{const{top:o}=t.current.getBoundingClientRect();i(window.innerHeight-o)},[]);return c(()=>(e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}),[e]),[t,n]}export{d as u};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/assets/zh.9b79b7bf.js:
--------------------------------------------------------------------------------
1 | const u={Overview:"\u6982\u89C8",Proxies:"\u4EE3\u7406",Rules:"\u89C4\u5219",Conns:"\u8FDE\u63A5",Config:"\u914D\u7F6E",Logs:"\u65E5\u5FD7",Upload:"\u4E0A\u4F20",Download:"\u4E0B\u8F7D","Upload Total":"\u4E0A\u4F20\u603B\u91CF","Download Total":"\u4E0B\u8F7D\u603B\u91CF","Active Connections":"\u6D3B\u52A8\u8FDE\u63A5","Pause Refresh":"\u6682\u505C\u5237\u65B0","Resume Refresh":"\u7EE7\u7EED\u5237\u65B0",Up:"\u4E0A\u4F20",Down:"\u4E0B\u8F7D","Test Latency":"\u5EF6\u8FDF\u6D4B\u901F",settings:"\u8BBE\u7F6E",sort_in_grp:"\u4EE3\u7406\u7EC4\u6761\u76EE\u6392\u5E8F",hide_unavail_proxies:"\u9690\u85CF\u4E0D\u53EF\u7528\u4EE3\u7406",auto_close_conns:"\u5207\u6362\u4EE3\u7406\u65F6\u81EA\u52A8\u65AD\u5F00\u65E7\u8FDE\u63A5",order_natural:"\u539F config \u6587\u4EF6\u4E2D\u7684\u6392\u5E8F",order_latency_asc:"\u6309\u5EF6\u8FDF\u4ECE\u5C0F\u5230\u5927",order_latency_desc:"\u6309\u5EF6\u8FDF\u4ECE\u5927\u5230\u5C0F",order_name_asc:"\u6309\u540D\u79F0\u5B57\u6BCD\u6392\u5E8F (A-Z)",order_name_desc:"\u6309\u540D\u79F0\u5B57\u6BCD\u6392\u5E8F (Z-A)",Connections:"\u8FDE\u63A5",Active:"\u6D3B\u52A8",Closed:"\u5DF2\u65AD\u5F00",switch_theme:"\u5207\u6362\u4E3B\u9898",theme:"\u4E3B\u9898",about:"\u5173\u4E8E",no_logs:"\u6682\u65E0\u65E5\u5FD7...",chart_style:"\u6D41\u91CF\u56FE\u6837\u5F0F",latency_test_url:"\u5EF6\u8FDF\u6D4B\u901F URL",lang:"\u8BED\u8A00",update_all_rule_provider:"\u66F4\u65B0\u6240\u6709 rule provider",update_all_proxy_provider:"\u66F4\u65B0\u6240\u6709 proxy providers"};export{u as data};
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | yacd
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/manifest.webmanifest:
--------------------------------------------------------------------------------
1 | {"name":"yacd","short_name":"yacd","start_url":"./","display":"standalone","background_color":"#ffffff","lang":"en","scope":"./"}
2 |
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/registerSW.js:
--------------------------------------------------------------------------------
1 | if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('./sw.js', { scope: './' })})}
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/yacd-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/webs/koolclash/yacd-128.png
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/yacd-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/webs/koolclash/yacd-64.png
--------------------------------------------------------------------------------
/koolclash/webs/koolclash/yacd.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/webs/koolclash/yacd.ico
--------------------------------------------------------------------------------
/koolclash/webs/res/icon-koolclash-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/webs/res/icon-koolclash-bg.png
--------------------------------------------------------------------------------
/koolclash/webs/res/icon-koolclash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/koolclash/webs/res/icon-koolclash.png
--------------------------------------------------------------------------------
/koolclash/webs/res/koolclash_.version:
--------------------------------------------------------------------------------
1 | 0.18.4
2 |
--------------------------------------------------------------------------------
/koolclash/webs/res/koolclash_base64.js:
--------------------------------------------------------------------------------
1 | /*
2 | * base64.js | BSD 3-Clause
3 | * https://github.com/dankogai/js-base64
4 | */
5 | (function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory(global):typeof define==="function"&&define.amd?define(factory):factory(global)})(typeof self!=="undefined"?self:typeof window!=="undefined"?window:typeof global!=="undefined"?global:this,function(global){"use strict";var _Base64=global.Base64;var version="2.5.0";var buffer;if(typeof module!=="undefined"&&module.exports){try{buffer=eval("require('buffer').Buffer")}catch(err){buffer=undefined}}var b64chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var b64tab=function(bin){var t={};for(var i=0,l=bin.length;i>>6)+fromCharCode(128|cc&63):fromCharCode(224|cc>>>12&15)+fromCharCode(128|cc>>>6&63)+fromCharCode(128|cc&63)}else{var cc=65536+(c.charCodeAt(0)-55296)*1024+(c.charCodeAt(1)-56320);return fromCharCode(240|cc>>>18&7)+fromCharCode(128|cc>>>12&63)+fromCharCode(128|cc>>>6&63)+fromCharCode(128|cc&63)}};var re_utob=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;var utob=function(u){return u.replace(re_utob,cb_utob)};var cb_encode=function(ccc){var padlen=[0,2,1][ccc.length%3],ord=ccc.charCodeAt(0)<<16|(ccc.length>1?ccc.charCodeAt(1):0)<<8|(ccc.length>2?ccc.charCodeAt(2):0),chars=[b64chars.charAt(ord>>>18),b64chars.charAt(ord>>>12&63),padlen>=2?"=":b64chars.charAt(ord>>>6&63),padlen>=1?"=":b64chars.charAt(ord&63)];return chars.join("")};var btoa=global.btoa?function(b){return global.btoa(b)}:function(b){return b.replace(/[\s\S]{1,3}/g,cb_encode)};var _encode=buffer?buffer.from&&Uint8Array&&buffer.from!==Uint8Array.from?function(u){return(u.constructor===buffer.constructor?u:buffer.from(u)).toString("base64")}:function(u){return(u.constructor===buffer.constructor?u:new buffer(u)).toString("base64")}:function(u){return btoa(utob(u))};var encode=function(u,urisafe){return!urisafe?_encode(String(u)):_encode(String(u)).replace(/[+\/]/g,function(m0){return m0=="+"?"-":"_"}).replace(/=/g,"")};var encodeURI=function(u){return encode(u,true)};var re_btou=new RegExp(["[À-ß][-¿]","[à-ï][-¿]{2}","[ð-÷][-¿]{3}"].join("|"),"g");var cb_btou=function(cccc){switch(cccc.length){case 4:var cp=(7&cccc.charCodeAt(0))<<18|(63&cccc.charCodeAt(1))<<12|(63&cccc.charCodeAt(2))<<6|63&cccc.charCodeAt(3),offset=cp-65536;return fromCharCode((offset>>>10)+55296)+fromCharCode((offset&1023)+56320);case 3:return fromCharCode((15&cccc.charCodeAt(0))<<12|(63&cccc.charCodeAt(1))<<6|63&cccc.charCodeAt(2));default:return fromCharCode((31&cccc.charCodeAt(0))<<6|63&cccc.charCodeAt(1))}};var btou=function(b){return b.replace(re_btou,cb_btou)};var cb_decode=function(cccc){var len=cccc.length,padlen=len%4,n=(len>0?b64tab[cccc.charAt(0)]<<18:0)|(len>1?b64tab[cccc.charAt(1)]<<12:0)|(len>2?b64tab[cccc.charAt(2)]<<6:0)|(len>3?b64tab[cccc.charAt(3)]:0),chars=[fromCharCode(n>>>16),fromCharCode(n>>>8&255),fromCharCode(n&255)];chars.length-=[0,0,2,1][padlen];return chars.join("")};var _atob=global.atob?function(a){return global.atob(a)}:function(a){return a.replace(/\S{1,4}/g,cb_decode)};var atob=function(a){return _atob(String(a).replace(/[^A-Za-z0-9\+\/]/g,""))};var _decode=buffer?buffer.from&&Uint8Array&&buffer.from!==Uint8Array.from?function(a){return(a.constructor===buffer.constructor?a:buffer.from(a,"base64")).toString()}:function(a){return(a.constructor===buffer.constructor?a:new buffer(a,"base64")).toString()}:function(a){return btou(_atob(a))};var decode=function(a){return _decode(String(a).replace(/[-_]/g,function(m0){return m0=="-"?"+":"/"}).replace(/[^A-Za-z0-9\+\/]/g,""))};var noConflict=function(){var Base64=global.Base64;global.Base64=_Base64;return Base64};global.Base64={VERSION:version,atob:atob,btoa:btoa,fromBase64:decode,toBase64:encode,utob:utob,encode:encode,encodeURI:encodeURI,btou:btou,decode:decode,noConflict:noConflict,__buffer__:buffer};if(typeof Object.defineProperty==="function"){var noEnum=function(v){return{value:v,enumerable:false,writable:true,configurable:true}};global.Base64.extendString=function(){Object.defineProperty(String.prototype,"fromBase64",noEnum(function(){return decode(this)}));Object.defineProperty(String.prototype,"toBase64",noEnum(function(urisafe){return encode(this,urisafe)}));Object.defineProperty(String.prototype,"toBase64URI",noEnum(function(){return encode(this,true)}))}}if(global["Meteor"]){Base64=global.Base64}if(typeof module!=="undefined"&&module.exports){module.exports.Base64=global.Base64}else if(typeof define==="function"&&define.amd){define([],function(){return global.Base64})}return{Base64:global.Base64}});
--------------------------------------------------------------------------------
/koolclash/webs/res/koolclash_help.js:
--------------------------------------------------------------------------------
1 | /*
2 | * koolclash_help.js | @houzi-
3 | * https://github.com/houzi-/Koolshare-Clash-hack
4 | */
5 | function koolclash_helpSwitchMode() {
6 | layer.open({
7 | type: 0,
8 | shade: 0.1,
9 | skin: 'layui-layer-lan',
10 | scrollbar: 0,
11 | title: '运行模式【指南】',
12 | area: ['400px', '250px'],
13 | fixed: false, //不固定
14 | resize: false, //禁止拉伸
15 | maxmin: true,
16 | shadeClose: 1,
17 | id: 'LAY_switch_rule_mode',
18 | content: '● 规则【Rule】所有请求根据配置文件规则进行分流
● 全局【Global】所有请求直接发往代理服务器
(该模式需要在面板选择全局代理服务器节点)
● 直连【Direct】所有请求直接发往目的地',
19 | });
20 | }
21 |
22 | function koolclash_helpFlow() {
23 | layer.open({
24 | type: 0,
25 | shade: 0.1,
26 | skin: 'layui-layer-lan',
27 | scrollbar: 0,
28 | title: 'Clash 订阅流量信息【指南】',
29 | area: ['500px', '280px'],
30 | fixed: false, //不固定
31 | resize: false, //禁止拉伸
32 | maxmin: true,
33 | shadeClose: 1,
34 | id: 'LAY_helpFlow_mode',
35 | content: '此订阅流量显示只要机场提供接口信息都能获取到,比如:
● 大分部机场都会提供
● 不是通过订阅链接获取的信息无法显示
● 上传 Clash 配置文件的流量也无法显示
● 流量使用情况会有误差和延时,请以机场流量使用情况为准
● 多订阅无法进行准确的流量显示',
36 | });
37 | }
38 |
39 | function koolclash_helpCHN() {
40 | layer.open({
41 | type: 0,
42 | shade: 0.1,
43 | skin: 'layui-layer-lan',
44 | scrollbar: 0,
45 | title: 'Clash 绕过大陆IP【指南】',
46 | area: ['460px', '280px'],
47 | fixed: false, //不固定
48 | resize: false, //禁止拉伸
49 | maxmin: true,
50 | shadeClose: 1,
51 | id: 'LAY_helpCHN_mode',
52 | content: '● 开关显示绿色为开启状态、灰色为关闭状态
● 绕过大陆IP基于 iptables 权限高于 Clash 分流规则集
● 使用【访问控制】功能时,请关闭绕过大陆IP
● 绕过大陆IP是基于 CHNRoute 来进行分流
● 绕过大陆IP和 Clash 内置的分流规则一起配合使用,分流更加精准',
53 | });
54 | }
55 |
56 | function koolclash_helpSubConverter() {
57 | layer.open({
58 | type: 0,
59 | shade: 0.1,
60 | skin: 'layui-layer-lan',
61 | scrollbar: 0,
62 | title: 'Clash 订阅转换 URL【指南】',
63 | area: ['500px', '260px'],
64 | fixed: false, //不固定
65 | resize: false, //禁止拉伸
66 | maxmin: true,
67 | shadeClose: 1,
68 | id: 'LAY_helpSubConverter_mode',
69 | content: '可以转换SS|SSR|V2ray|Trojan|Clash等订阅链接,比如
● ss://xxx|ssr://xxxx|vemss://xxx|trojan://xxx|https://xxx
● 支持多订阅合并成一个配置,使用“|”分开即可,格式:链接1|链接2
● 订阅框一次输入不能太多(比如超过10个分享链接)可能订阅失败
● 如果需要定时更新,到【附加功能】开启',
70 | });
71 | }
72 |
73 | function koolclash_portControl_pass() {
74 | layer.open({
75 | type: 0,
76 | shade: 0.1,
77 | skin: 'layui-layer-lan',
78 | scrollbar: 0,
79 | title: '通过Clash 目标端口【指南】',
80 | area: ['580px', '280px'],
81 | fixed: false, //不固定
82 | resize: false, //禁止拉伸
83 | maxmin: true,
84 | shadeClose: 1,
85 | id: 'LAY_portControl_pass_mode',
86 | content: '● 通过Clash的模式,目标端口默认是全部端口
● 【80,443】Clash 只代理80和443端口流量
● 【常用端口】Clash 只代理常用端口流量
● 【全部端口】Clash 代理全部端口流量👉推荐👈
● 如果选择【全部端口】导致NAS或者一些设备访问不正常,请开启【不通过Clash】解决',
87 | });
88 | }
89 |
90 | function koolclash_portControl_return() {
91 | layer.open({
92 | type: 0,
93 | shade: 0.1,
94 | skin: 'layui-layer-lan',
95 | scrollbar: 0,
96 | title: '不通过Clash 目标端口【指南】',
97 | area: ['620px', '280px'],
98 | fixed: false, //不固定
99 | resize: false, //禁止拉伸
100 | maxmin: true,
101 | shadeClose: 1,
102 | id: 'LAY_portControl_return_mode',
103 | content: '● 不通过Clash的模式,目标端口默认是关闭
● 【80,443】80和443端口流量不经过 Clash
● 【常用端口】常用端口流量不经过 Clash
● 【自定义端口】自己自定义端口流量不经过 Clash,输入格式为:80 443 8080
● 如果使用 Clash 代理的过程中导致NAS或者一些设备无法使用,可以使用【不通过Clash】模式下的【自定义端口】来使 Clash 绕过这些设备的端口,使其恢复正常',
104 | });
105 | }
106 |
107 | function koolclash_CheckIP() {
108 | layer.open({
109 | type: 2,
110 | //skin: 'myskin',
111 | shade: 0.1,
112 | scrollbar: false,
113 | title: 'IP地址详情页',
114 | area: ['750px', '170px'],
115 | fixed: false, //不固定
116 | resize: false, //禁止拉伸
117 | move: false,
118 | maxmin: true,
119 | shadeClose: 1,
120 | id: 'LAY_koolclash-ip',
121 | content: ['https://ip.skk.moe/simple/', 'no'],
122 | });
123 | }
--------------------------------------------------------------------------------
/koolclash_version:
--------------------------------------------------------------------------------
1 | 0.18.4
2 |
--------------------------------------------------------------------------------
/local-build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | MODULE="koolclash"
4 | VERSION=`cat ./koolclash/webs/res/koolclash_.version`
5 | TITLE=koolclash
6 | DESCRIPTION="基于规则的代理程序 Clash"
7 | HOME_URL="Module_koolclash.asp"
8 | CHANGELOG="BUG修复"
9 |
10 | # Check and include base
11 | rm -f ${MODULE}.tar.gz
12 | #清理mac os 下文件
13 | #rm -f $MODULE/.DS_Store
14 | #rm -f $MODULE/*/.DS_Store
15 |
16 | rm -f ${MODULE}.tar.gz
17 | tar -zcvf ${MODULE}.tar.gz $MODULE
18 | md5value=`md5sum ${MODULE}.tar.gz|tr " " "\n"|sed -n 1p`
19 | cat > ./version < ./koolclash_version < ./config.json.js <"
8 | echo_date "* 开始解除 Koolshare 软件中心离线安装限制"
9 |
10 | sed -i 's/\tdetect_package/\t# detect_package/g' $KSROOT/scripts/ks_tar_install.sh
11 |
12 | echo_date "* 限制解除完成!"
13 | echo_date "* 你将会看见 Koolshare 软件中心提示安装失败,这是正常现象!"
14 |
15 | exit 1
16 |
--------------------------------------------------------------------------------
/remove_restrictions/remove_restrictions.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/houzi-/Koolshare-Clash-hack/5f925ac3e9471a701898da5b5ce29e01fe863eec/remove_restrictions/remove_restrictions.tar.gz
--------------------------------------------------------------------------------
/version:
--------------------------------------------------------------------------------
1 | 0.18.4
2 | e434a35dbc32ae9df11a9dfd7de21fc0
3 |
--------------------------------------------------------------------------------