diff --git a/README.md b/README.md index 8d47d5f..51db2b0 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ On linux systems you may need to set the environment variable before run \ #### macOS install / configure / uninstall script Just run in Terminal: `curl -s https://raw.githubusercontent.com/YouROK/TorrServer/master/installTorrServerMac.sh -o installTorrserverMac.sh && chmod 755 installTorrServerMac.sh && sudo ./installTorrServerMac.sh` +Alternative install script for Intel Macs: https://github.com/dancheskus/TorrServerMacInstaller #### Linux on VPS install / configure / uninstall script Just run in console: `curl -s https://raw.githubusercontent.com/YouROK/TorrServer/master/installTorrServerLinux.sh | sudo bash` @@ -54,7 +55,7 @@ TorrServer-darwin-arm64 [--port PORT] [--path PATH] [--logpath LOGPATH] [--weblo * --torrentsdir TORRENTSDIR, -t TORRENTSDIR * autoload torrents from dir * --torrentaddr TORRENTADDR - * Torrent client address, default :32000 + * Torrent client address (format [IP]:PORT, ex. :32000, 127.0.0.1:32768 etc) * --pubipv4 PUBIPV4, -4 PUBIPV4 * set public IPv4 addr * --pubipv6 PUBIPV6, -6 PUBIPV6 diff --git a/build-all.sh b/build-all.sh index 7f3e957..910ebdb 100755 --- a/build-all.sh +++ b/build-all.sh @@ -50,12 +50,13 @@ OUTPUT="${ROOT}/dist/TorrServer" #### Build web echo "Build web" +export NODE_OPTIONS=--openssl-legacy-provider $GOBIN run gen_web.go #### Build server echo "Build server" cd "${ROOT}/server" || exit 1 -$GOBIN clean -i -r -cache #--modcache +$GOBIN clean -i -r -cache --modcache $GOBIN mod tidy BUILD_FLAGS="-ldflags=${LDFLAGS} -tags=nosqlite" @@ -92,7 +93,8 @@ declare -a COMPILERS=( export NDK_VERSION="25.2.9519653" # 25.1.8937393 #export NDK_TOOLCHAIN=${ANDROID_HOME}/ndk/${NDK_VERSION}/toolchains/llvm/prebuilt/darwin-x86_64 -export NDK_TOOLCHAIN="${PWD}/../android-ndk-r25c/toolchains/llvm/prebuilt/linux-x86_64" +#export NDK_TOOLCHAIN="${PWD}/../android-ndk-r25c/toolchains/llvm/prebuilt/linux-x86_64" +export NDK_TOOLCHAIN=/Users/yourok/Projects/AndroidNDK GOOS=android for V in "${COMPILERS[@]}"; do diff --git a/installTorrServerLinux.sh b/installTorrServerLinux.sh index 2165d63..12ac9e4 100644 --- a/installTorrServerLinux.sh +++ b/installTorrServerLinux.sh @@ -448,6 +448,9 @@ case $1 in isRdb=0 isLog=0 installTorrServer + else + systemctl stop $serviceName.service + systemctl start $serviceName.service fi exit ;; diff --git a/server/cmd/main.go b/server/cmd/main.go index 10fab82..71c4d8e 100644 --- a/server/cmd/main.go +++ b/server/cmd/main.go @@ -3,7 +3,6 @@ package main import ( "context" "fmt" - "io/ioutil" "net" "os" "path/filepath" @@ -127,7 +126,7 @@ func watchTDir(dir string) { path = dir } for { - files, err := ioutil.ReadDir(path) + files, err := os.ReadDir(path) if err == nil { for _, file := range files { filename := filepath.Join(path, file.Name()) diff --git a/server/log/log.go b/server/log/log.go index c7ea035..64d796e 100644 --- a/server/log/log.go +++ b/server/log/log.go @@ -3,7 +3,7 @@ package log import ( "bytes" "fmt" - "io/ioutil" + "io" "log" "os" "strings" @@ -93,8 +93,8 @@ func WebLogger() gin.HandlerFunc { body := "" // save body if not form or file if !strings.HasPrefix(c.Request.Header.Get("Content-Type"), "multipart/form-data") { - body, _ := ioutil.ReadAll(c.Request.Body) - c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(body)) + body, _ := io.ReadAll(c.Request.Body) + c.Request.Body = io.NopCloser(bytes.NewBuffer(body)) } else { body = "body hidden, too large" } diff --git a/server/server.go b/server/server.go index 8aebb3d..4b3df32 100644 --- a/server/server.go +++ b/server/server.go @@ -1,7 +1,6 @@ package server import ( - "io/ioutil" "net" "os" "path/filepath" @@ -36,7 +35,7 @@ func cleanCache() { return } - dirs, err := ioutil.ReadDir(settings.BTsets.TorrentsSavePath) + dirs, err := os.ReadDir(settings.BTsets.TorrentsSavePath) if err != nil { return } @@ -68,7 +67,7 @@ func cleanCache() { } func removeAllFiles(path string) { - files, err := ioutil.ReadDir(path) + files, err := os.ReadDir(path) if err != nil { return } diff --git a/server/torr/apihelper.go b/server/torr/apihelper.go index 4e51299..1384ec0 100644 --- a/server/torr/apihelper.go +++ b/server/torr/apihelper.go @@ -2,7 +2,6 @@ package torr import ( "io" - "io/ioutil" "os" "path/filepath" "sort" @@ -143,7 +142,7 @@ func RemTorrent(hashHex string) { hash := metainfo.NewHashFromHex(hashHex) if sets.BTsets.UseDisk && hashHex != "" && hashHex != "/" { name := filepath.Join(sets.BTsets.TorrentsSavePath, hashHex) - ff, _ := ioutil.ReadDir(name) + ff, _ := os.ReadDir(name) for _, f := range ff { os.Remove(filepath.Join(name, f.Name())) } diff --git a/server/torr/btserver.go b/server/torr/btserver.go index c109ce1..0878695 100644 --- a/server/torr/btserver.go +++ b/server/torr/btserver.go @@ -5,7 +5,6 @@ import ( "fmt" "log" "net" - "strconv" "sync" "github.com/anacrolix/publicip" @@ -131,20 +130,21 @@ func (bt *BTServer) configure(ctx context.Context) { log.Println("Set listen port", settings.BTsets.PeersListenPort) bt.config.ListenPort = settings.BTsets.PeersListenPort } else { - lport := 32000 - for { - log.Println("Check listen port", lport) - l, err := net.Listen("tcp", ":"+strconv.Itoa(lport)) - if l != nil { - l.Close() - } - if err == nil { - break - } - lport++ - } - log.Println("Set listen port", lport) - bt.config.ListenPort = lport + // lport := 32000 + // for { + // log.Println("Check listen port", lport) + // l, err := net.Listen("tcp", ":"+strconv.Itoa(lport)) + // if l != nil { + // l.Close() + // } + // if err == nil { + // break + // } + // lport++ + // } + // log.Println("Set listen port", lport) + log.Println("Set listen port to random autoselect (0)") + bt.config.ListenPort = 0 // lport } } diff --git a/server/torr/utils/blockedIP.go b/server/torr/utils/blockedIP.go index 61edc04..fbe56b4 100644 --- a/server/torr/utils/blockedIP.go +++ b/server/torr/utils/blockedIP.go @@ -2,7 +2,7 @@ package utils import ( "bufio" - "io/ioutil" + "os" "path/filepath" "strings" @@ -12,7 +12,7 @@ import ( ) func ReadBlockedIP() (ranger iplist.Ranger, err error) { - buf, err := ioutil.ReadFile(filepath.Join(settings.Path, "blocklist")) + buf, err := os.ReadFile(filepath.Join(settings.Path, "blocklist")) if err != nil { return nil, err } diff --git a/server/torr/utils/torrent.go b/server/torr/utils/torrent.go index 9120f3f..d8ac5ca 100644 --- a/server/torr/utils/torrent.go +++ b/server/torr/utils/torrent.go @@ -2,9 +2,10 @@ package utils import ( "encoding/base32" - "io/ioutil" + "io" "math/rand" "net/http" + "os" "path/filepath" "strings" @@ -14,7 +15,7 @@ import ( ) var defTrackers = []string{ - "http://retracker.local", + "http://retracker.local/announce", "http://bt4.t-ru.org/ann?magnet", "http://retracker.mgts.by:80/announce", "http://tracker.city9x.com:2710/announce", @@ -34,7 +35,7 @@ var loadedTrackers []string func GetTrackerFromFile() []string { name := filepath.Join(settings.Path, "trackers.txt") - buf, err := ioutil.ReadFile(name) + buf, err := os.ReadFile(name) if err == nil { list := strings.Split(string(buf), "\n") var ret []string @@ -62,7 +63,7 @@ func loadNewTracker() { } resp, err := http.Get("https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best_ip.txt") if err == nil { - buf, err := ioutil.ReadAll(resp.Body) + buf, err := io.ReadAll(resp.Body) if err == nil { arr := strings.Split(string(buf), "\n") var ret []string diff --git a/server/version/version.go b/server/version/version.go index 0048d7b..c3738a1 100644 --- a/server/version/version.go +++ b/server/version/version.go @@ -6,7 +6,7 @@ import ( // "github.com/anacrolix/torrent" ) -const Version = "MatriX.124.OE" +const Version = "MatriX.125.OE" func GetTorrentVersion() string { // _ = torrent.NewDefaultClientConfig() diff --git a/server/web/auth/auth.go b/server/web/auth/auth.go index 2b07c90..cb5eb08 100644 --- a/server/web/auth/auth.go +++ b/server/web/auth/auth.go @@ -3,8 +3,8 @@ package auth import ( "encoding/base64" "encoding/json" - "io/ioutil" "net/http" + "os" "path/filepath" "reflect" "strings" @@ -28,7 +28,7 @@ func SetupAuth(engine *gin.Engine) *gin.RouterGroup { } func getAccounts() gin.Accounts { - buf, err := ioutil.ReadFile(filepath.Join(settings.Path, "accs.db")) + buf, err := os.ReadFile(filepath.Join(settings.Path, "accs.db")) if err != nil { return nil } diff --git a/server/web/blocker/blocker.go b/server/web/blocker/blocker.go index 3ceecca..7bfbc10 100644 --- a/server/web/blocker/blocker.go +++ b/server/web/blocker/blocker.go @@ -4,9 +4,9 @@ import ( "bufio" "bytes" "errors" - "io/ioutil" "net" "net/http" + "os" "path/filepath" "strings" @@ -22,11 +22,11 @@ func Blocker() gin.HandlerFunc { } name := filepath.Join(settings.Path, "bip.txt") - buf, _ := ioutil.ReadFile(name) + buf, _ := os.ReadFile(name) blackIpList := scanBuf(buf) name = filepath.Join(settings.Path, "wip.txt") - buf, _ = ioutil.ReadFile(name) + buf, _ = os.ReadFile(name) whiteIpList := scanBuf(buf) if blackIpList.NumRanges() == 0 && whiteIpList.NumRanges() == 0 { diff --git a/server/web/server.go b/server/web/server.go index 973fb4e..8d9e61c 100644 --- a/server/web/server.go +++ b/server/web/server.go @@ -2,6 +2,7 @@ package web import ( "net" + "os" "sort" "server/rutor" @@ -36,8 +37,8 @@ func Start(port string) { } err := BTS.Connect() if err != nil { - waitChan <- err - return + log.TLogln("BTS.Connect() error!", err) // waitChan <- err + os.Exit(1) // return } rutor.Start() diff --git a/web/src/components/About/index.jsx b/web/src/components/About/index.jsx index 33af79d..eb2b6f3 100644 --- a/web/src/components/About/index.jsx +++ b/web/src/components/About/index.jsx @@ -69,6 +69,7 @@ export default function AboutDialog() {
+
@@ -82,6 +83,10 @@ export default function AboutDialog() { + + + + diff --git a/web/src/components/App/index.jsx b/web/src/components/App/index.jsx index 06b397e..3ba1080 100644 --- a/web/src/components/App/index.jsx +++ b/web/src/components/App/index.jsx @@ -109,6 +109,8 @@ export default function App() { ? changeLang('ru') : currentLang === 'ru' ? changeLang('ua') + : currentLang === 'ua' + ? changeLang('zh') : changeLang('en') } > diff --git a/web/src/i18n.js b/web/src/i18n.js index 3fa470e..710467a 100644 --- a/web/src/i18n.js +++ b/web/src/i18n.js @@ -4,6 +4,7 @@ import LanguageDetector from 'i18next-browser-languagedetector' import translationEN from 'locales/en/translation.json' import translationRU from 'locales/ru/translation.json' import translationUA from 'locales/ua/translation.json' +import translationZH from 'locales/zh/translation.json' i18n .use(LanguageDetector) @@ -15,6 +16,7 @@ i18n en: { translation: translationEN }, ru: { translation: translationRU }, ua: { translation: translationUA }, + zh: { translation: translationZH }, }, }) diff --git a/web/src/locales/en/translation.json b/web/src/locales/en/translation.json index 2c7b1d7..50dadf5 100644 --- a/web/src/locales/en/translation.json +++ b/web/src/locales/en/translation.json @@ -76,6 +76,7 @@ "Playlist": "Playlist", "Preload": "Preload", "ProjectSource": "Project GitHub", + "NasReleases": "NAS Releases GitHub", "PWAGuide": { "Header": "Install application", "Description": "Install the app on your device to easily access it anytime. No app store. No download.", @@ -112,7 +113,7 @@ "DisablePEXHint": "Better leave enabled", "DisableTCPHint": "Don't disable without μTP enabled", "DisableUPNPHint": "Auto-open port on router", - "DisableUTPHint": "Not recommended to enable on weak devices", + "DisableUTPHint": "Recommended to disable in Windows OS", "Disk": "Disk", "DLNA": "DLNA Media Server", "DontAddRetrackers": "Don`t add retrackers", @@ -126,7 +127,7 @@ "EnableRutorSearch": "Turn on torrents search by RuTor", "EnableRutorSearchHint": "You can search torrents by RuTor, even if the RuTor is not available. NOTE: The database takes about 500 MB of RAM.", "PeersListenPort": "Peers Listen Port", - "PeersListenPortHint": "1024 - 65535, 0 - auto", + "PeersListenPortHint": "1024 - 65535, 0 - random", "PreloadCache": "Preload Cache Before Play", "ProMode": "PRO mode", "RAM": "RAM", diff --git a/web/src/locales/ru/translation.json b/web/src/locales/ru/translation.json index 9389275..8b13e50 100644 --- a/web/src/locales/ru/translation.json +++ b/web/src/locales/ru/translation.json @@ -76,6 +76,7 @@ "Playlist": "Плейлист", "Preload": "Предзагр.", "ProjectSource": "GitHub проекта", + "NasReleases": "Релизы для NAS GitHub", "PWAGuide": { "Header": "Установить приложение", "Description": "Установите приложение на ваше устройство для быстрого доступа в любой момент. Без AppStore. Без загрузки.", @@ -112,7 +113,7 @@ "DisablePEXHint": "Обмен списками участников - не рекомендуется отключать", "DisableTCPHint": "Не отключайте без включенного μTP", "DisableUPNPHint": "Автоматическая настройка порта на роутере", - "DisableUTPHint": "Не рекомендуется включать на слабых устройствах", + "DisableUTPHint": "Рекомендуется отключить в ОС Windows", "Disk": "ПЗУ / Накопитель", "DLNA": "DLNA-медиасервер", "DontAddRetrackers": "Ничего не делать", diff --git a/web/src/locales/ua/translation.json b/web/src/locales/ua/translation.json index 9a97e08..1b384bc 100644 --- a/web/src/locales/ua/translation.json +++ b/web/src/locales/ua/translation.json @@ -76,6 +76,7 @@ "Playlist": "Плейлист", "Preload": "Передзав.", "ProjectSource": "Сайт проекту", + "NasReleases": "Релізи для NAS GitHub", "PWAGuide": { "Header": "Встановити додаток", "Description": "Встановіть програму на свій пристрій, щоб легко отримати до неї доступ у будь-який час. Немає магазину додатків. Немає завантаження.", @@ -112,7 +113,7 @@ "DisablePEXHint": "Не рекомендується відключати", "DisableTCPHint": "Не вимикайте без включеного μTP", "DisableUPNPHint": "Автовідкриття порту на роутері", - "DisableUTPHint": "Не рекомендується на слабких пристроях", + "DisableUTPHint": "Рекомендується відключити в ОС Windows", "Disk": "ПЗП / Носій", "DLNA": "DLNA-медиасервер", "DontAddRetrackers": "Нічого не робити", diff --git a/web/src/locales/zh/translation.json b/web/src/locales/zh/translation.json new file mode 100644 index 0000000..92598ae --- /dev/null +++ b/web/src/locales/zh/translation.json @@ -0,0 +1,179 @@ +{ + "About": "关于", + "Actions": "操作", + "Add": "添加", + "AddDialog": { + "AddPosterLinkInput": "海报链接", + "AddTorrentSourceNotification": "先添加你的种子", + "AppendFile": { + "Or": "或", + "ClickOrDrag": "点击/拖放上传 (.torrent)" + }, + "CustomTorrentTitle": "自定义标题(可选)", + "CustomTorrentTitleHelperText": "编写自定义标题以查找海报", + "HashExists": "这个种子已经在数据库中", + "OriginalTorrentTitle": "原始种子标题", + "TitleBlank": "标题", + "TitleBlankHelperText": "留空则使用种子原始标题", + "TorrentSourceLink": "种子地址", + "TorrentSourceOptions": "magnet / hash / .torrent文件链接", + "WrongTorrentSource": "错误的种子来源" + }, + "AddFromLink": "添加种子", + "AddNewTorrent": "添加新种子", + "B": "B", + "bps": "bps", + "Buffer": "预加载缓冲区/缓存", + "BufferNote": "在设置中将播放前预加载缓存设置为大于 32 MB 以更改预加载大小", + "Cache": "缓存", + "Cancel": "取消", + "Clear": "清除", + "Close": "关闭", + "CloseServer?": "你想关闭服务器吗?", + "CloseServer": "关闭", + "CopyHash": "复制哈希", + "CopyLink": "复制链接", + "Data": "数据", + "DebugMode": "优先级标记", + "Delete": "删除", + "DeleteTorrent?": "删除种子?", + "DeleteTorrents?": "删除所有种子?", + "DetailedCacheView": { + "button": "查看缓存详情", + "header": "$t(DetailedCacheView.button)" + }, + "Details": "详细信息", + "Donate?": "想要捐赠?", + "Donate": "捐赠", + "DownloadPlaylist": "下载播放列表", + "DownloadSpeed": "下载速度", + "Drop": "停止", + "DropTorrent": "停止种子", + "Edit": "编辑", + "EditTorrent": "编辑种子", + "Episode": "剧集", + "FromLatestFile": "来自最新文件", + "Full": "全部", + "GB": "GB", + "Gbps": "Gbps", + "Host": "主机", + "Info": "信息", + "KB": "KB", + "kbps": "kbps", + "Kilobytes": "千字节", + "LatestFilePlayed": "最近播放的文件:", + "Links": "链接", + "MB": "MB", + "Mbps": "Mbps", + "Name": "名称", + "NoTorrentsAdded": "没有添加种子", + "Offline": "离线", + "OK": "确定", + "OpenLink": "打开链接", + "Peers": "Peers", + "PiecesCount": "块数量", + "PiecesLength": "块长度", + "Playlist": "播放列表", + "Preload": "预加载", + "ProjectSource": "项目GitHub", + "NasReleases": "NAS GitHub 版本", + "PWAGuide": { + "Header": "安装应用程序", + "Description": "将应用程序安装到您的设备上,以便随时方便地访问。无需应用商店、无需下载。", + "VLC": "添加VLC按钮以在手机上立即打开视频", + "FirstStep": "点击", + "SecondStep": { + "Select": "选择", + "AddToHomeScreen":"添加到主屏幕" + } + }, + "Releases": "TorrServer发行版", + "RemoveAll": "全部删除", + "RemoveViews": "移除视图状态", + "Resolution": "分辨率", + "Save": "保存", + "ScrollDown": "向下滚动", + "Season": "季", + "Sec": "秒", + "Seconds": "秒", + "SelectSeason": "选择季", + "SettingsDialog": { + "AddRetrackers": "添加retrackers", + "AdditionalSettings": "附加设置", + "MobileAppSettings": "移动APP设置", + "CacheBeforeReaderDesc": "在播放帧前面的缓存", + "CacheAfterReaderDesc": "在播放帧后面的缓存", + "CacheSize": "缓存大小", + "CacheSettings": "缓存设置", + "CacheStorageLocation": "缓存存储位置", + "ConnectionsLimit": "连接限制", + "ConnectionsLimitHint": "推荐20-25", + "DHT": "DHT(分布式哈希表)", + "DisableDHTHint": "启动服务器后无网络时禁用", + "DisablePEXHint": "最好保持启用状态", + "DisableTCPHint": "在未启用μTP的情况下不要禁用", + "DisableUPNPHint": "在路由器上自动打开端口", + "DisableUTPHint": "建议在 Windows 操作系统上禁用", + "Disk": "磁盘", + "DLNA": "DLNA媒体服务器", + "DontAddRetrackers": "不加retrackers", + "DownloadRateLimit": "下载速度限制", + "EnableDebug": "启用调试服务器日志", + "EnableIPv6Hint": "仅在ISP支持时启用", + "ForceEncrypt": "强制加密标头", + "ForceEncryptHint": "可以防止运营商阻止种子", + "FriendlyName": "DLNA服务器名称", + "FriendlyNameHint": "留空使用默认值", + "EnableRutorSearch": "打开RuTor种子搜索", + "EnableRutorSearchHint": "您可以通过RuTor搜索种子,即使RuTor不可用。注意:数据库占用大约500 MB的存储。", + "PeersListenPort": "Peers监听端口", + "PeersListenPortHint": "1024 - 65535,0 - 自动", + "PreloadCache": "播放前预加载缓存", + "ProMode": "专业模式", + "RAM": "内存", + "ReaderReadAHead": "预读缓存 (5-100%, rec. 95%)", + "RemoveCacheOnDrop": "删除已停用种子在磁盘上的缓存", + "RemoveCacheOnDropDesc": "如果禁用,缓存会在删除种子时移除。", + "RemoveRetrackers": "删除retrackers", + "ReplaceRetrackers": "替换retrackers", + "RetrackersMode": "Retrackers模式", + "ResetToDefault": "重置为默认值", + "Settings": "设置", + "TorrentDisconnectTimeout": "种子断开超时", + "TorrentsSavePath": "种子缓存保存路径", + "Upload": "上传", + "UploadHint": "不建议禁用", + "UploadRateLimit": "上传速度限制", + "UseDiskDesc": "最好使用内存或固态存储作为缓存", + "Tabs": { + "Main": "主要", + "Additional": "附加", + "AdditionalDisabled": "(启用专业模式)", + "App": "App" + }, + "UseVLC": "提示在VLC中打开视频", + "UseVLCHint": "将VLC播放器按钮添加到种子内容列表" + }, + "Size": "大小", + "SpecialThanks": "特别感谢", + "Speed": "速度", + "Support": "支持", + "TB": "TB", + "Tbps": "Tbps", + "ThanksToEveryone": "感谢所有测试和帮助的人。", + "TorrentAdded": "已添加", + "TorrentClosed": "已关闭", + "TorrentContent": "种子内容", + "TorrentDetails": "种子详情", + "TorrentGettingInfo": "获取信息", + "TorrentInDb": "在数据库中", + "TorrentPreload": "预加载", + "TorrentSize": "种子大小", + "TorrentState": "控制", + "TorrentStatus": "种子状态", + "TorrentWorking": "活跃", + "TurnOff": "关闭", + "UploadFile": "上传文件", + "UploadSpeed": "上传速度", + "Viewed": "查看" +} diff --git a/web/yarn.lock b/web/yarn.lock index 1482050..be6b88d 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -11279,9 +11279,9 @@ semver-greatest-satisfied-range@^1.1.0: sver-compat "^1.5.0" "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@7.3.2: version "7.3.2" @@ -11289,14 +11289,14 @@ semver@7.3.2: integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.2.1, semver@^7.3.2, semver@^7.3.5: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" @@ -12342,9 +12342,9 @@ toidentifier@1.0.1: integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tough-cookie@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" - integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -13092,9 +13092,9 @@ which@^2.0.1, which@^2.0.2: isexe "^2.0.0" word-wrap@^1.2.3, word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + version "1.2.4" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" + integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== workbox-background-sync@^5.1.4: version "5.1.4"