diff --git a/agent/go.mod b/agent/go.mod index b8767e10e1bf..44da8830b41c 100644 --- a/agent/go.mod +++ b/agent/go.mod @@ -36,7 +36,7 @@ require ( github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 github.com/pkg/sftp v1.13.10 - github.com/qiniu/go-sdk/v7 v7.26.14 + github.com/qiniu/go-sdk/v7 v7.26.15 github.com/robfig/cron/v3 v3.0.1 github.com/shirou/gopsutil/v4 v4.26.6 github.com/sirupsen/logrus v1.9.4 @@ -48,12 +48,12 @@ require ( github.com/tencentyun/cos-go-sdk-v5 v0.7.74 github.com/tomasen/fcgi_client v0.0.0-20180423082037-2bb3d819fd19 github.com/upyun/go-sdk v2.1.0+incompatible - go.mongodb.org/mongo-driver/v2 v2.7.0 + go.mongodb.org/mongo-driver/v2 v2.8.0 golang.org/x/crypto v0.53.0 golang.org/x/net v0.56.0 - golang.org/x/sync v0.21.0 + golang.org/x/sync v0.22.0 golang.org/x/sys v0.46.0 - golang.org/x/text v0.39.0 + golang.org/x/text v0.40.0 golang.org/x/time v0.15.0 google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478 gopkg.in/ini.v1 v1.67.3 diff --git a/agent/go.sum b/agent/go.sum index c816092ccf58..ea47957c8297 100644 --- a/agent/go.sum +++ b/agent/go.sum @@ -725,8 +725,8 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/qiniu/go-sdk/v7 v7.26.14 h1:kV9zdvTOM0w9/lgeYffDDw0Fj8FH14/XgCjk4Wb80k8= -github.com/qiniu/go-sdk/v7 v7.26.14/go.mod h1:ri7fGwbio0pRDFr8EK5TUpx0DbnpIMJ2bMSDxGWfCbk= +github.com/qiniu/go-sdk/v7 v7.26.15 h1:CaKVcP29ZnOp/pqE7U3RAZxqwL7CmtMTWlV1gAV71H0= +github.com/qiniu/go-sdk/v7 v7.26.15/go.mod h1:ri7fGwbio0pRDFr8EK5TUpx0DbnpIMJ2bMSDxGWfCbk= github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SAw= @@ -877,8 +877,8 @@ go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lL go.mongodb.org/mongo-driver v1.13.1/go.mod h1:wcDf1JBCXy2mOW0bWHwO/IOYqdca1MPCwDtFu/Z9+eo= go.mongodb.org/mongo-driver v1.17.9 h1:IexDdCuuNJ3BHrELgBlyaH9p60JXAvdzWR128q+U5tU= go.mongodb.org/mongo-driver v1.17.9/go.mod h1:LlOhpH5NUEfhxcAwG0UEkMqwYcc4JU18gtCdGudk/tQ= -go.mongodb.org/mongo-driver/v2 v2.7.0 h1:RO+zqavD2/GCL3cxOMyZhx6R9Irzr8/6gsoqx5tcY/c= -go.mongodb.org/mongo-driver/v2 v2.7.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= +go.mongodb.org/mongo-driver/v2 v2.8.0 h1:CxWDGQYY8QQwNjAl/aq2sfWakdnWZynnqJ9F4DhHbP8= +go.mongodb.org/mongo-driver/v2 v2.8.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1075,8 +1075,8 @@ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= -golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= +golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1185,8 +1185,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/text v0.39.0 h1:UbZz4pLOvn600D6Oh6GGEI6VAmndrEBLv8/6BEXzyus= -golang.org/x/text v0.39.0/go.mod h1:3UwRclnC2g0TU9x8PZiyfOajCd1zaUNHF9cvqcQZ+ZM= +golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs= +golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/agent/i18n/lang/en.yaml b/agent/i18n/lang/en.yaml index 728991b195a3..8e7cbd44a7f7 100644 --- a/agent/i18n/lang/en.yaml +++ b/agent/i18n/lang/en.yaml @@ -381,6 +381,9 @@ ErrParseIP: 'Invalid IP format' ErrDefaultIP: 'default is reserved; use another name' ErrGroupInUse: 'IP group is used by blacklist/whitelist rules' ErrIPGroupAclUse: 'IP group is used by website {{ .name }} custom rules' +ErrIPGroupOriginProtectionUse: 'IP group is used by CDN origin protection for website {{ .name }}' +ErrOriginProtectionIPGroupRequired: 'Select at least one non-empty IP group before enabling origin protection' +ErrOriginProtectionIPGroupInvalid: 'IP group {{ .name }} does not exist or is empty' ErrGroupExist: 'IP group name already exists' ErrIPRange: 'Invalid IP range' ErrIPExist: 'IP already exists' diff --git a/agent/i18n/lang/es-ES.yaml b/agent/i18n/lang/es-ES.yaml index 029115fe6f28..7453321e42dd 100644 --- a/agent/i18n/lang/es-ES.yaml +++ b/agent/i18n/lang/es-ES.yaml @@ -381,6 +381,9 @@ ErrParseIP: 'Formato de IP incorrecto' ErrDefaultIP: 'default es un nombre reservado, cámbielo' ErrGroupInUse: 'El grupo IP está en uso por listas negras/blancas y no se puede eliminar' ErrIPGroupAclUse: 'El grupo IP está en uso por reglas personalizadas del sitio web {{ .name }}, no puede eliminarse' +ErrIPGroupOriginProtectionUse: 'El grupo IP está en uso por la protección de origen CDN del sitio web {{ .name }}' +ErrOriginProtectionIPGroupRequired: 'Seleccione al menos un grupo IP no vacío antes de habilitar la protección de origen' +ErrOriginProtectionIPGroupInvalid: 'El grupo IP {{ .name }} no existe o está vacío' ErrGroupExist: 'El nombre del grupo IP ya existe' ErrIPRange: 'Rango de IP incorrecto' ErrIPExist: 'La IP ya existe' diff --git a/agent/i18n/lang/fa.yaml b/agent/i18n/lang/fa.yaml index 9efeeeb47a34..68963849f9f3 100644 --- a/agent/i18n/lang/fa.yaml +++ b/agent/i18n/lang/fa.yaml @@ -381,6 +381,9 @@ ErrParseIP: 'فرمت IP نامعتبر است' ErrDefaultIP: 'default رزرو شده است؛ از نام دیگری استفاده کنید' ErrGroupInUse: 'گروه IP توسط قوانین لیست سیاه/سفید استفاده می‌شود' ErrIPGroupAclUse: 'گروه IP توسط قوانین سفارشی وب‌سایت {{ .name }} استفاده می‌شود' +ErrIPGroupOriginProtectionUse: 'گروه IP توسط محافظت مبدأ CDN وب‌سایت {{ .name }} استفاده می‌شود' +ErrOriginProtectionIPGroupRequired: 'پیش از فعال‌سازی محافظت مبدأ، حداقل یک گروه IP غیرخالی انتخاب کنید' +ErrOriginProtectionIPGroupInvalid: 'گروه IP {{ .name }} وجود ندارد یا خالی است' ErrGroupExist: 'نام گروه IP از قبل وجود دارد' ErrIPRange: 'محدوده IP نامعتبر است' ErrIPExist: 'IP از قبل وجود دارد' diff --git a/agent/i18n/lang/ja.yaml b/agent/i18n/lang/ja.yaml index 7245884bf154..63b32928675d 100644 --- a/agent/i18n/lang/ja.yaml +++ b/agent/i18n/lang/ja.yaml @@ -381,6 +381,9 @@ ErrParseIP: 'IP 形式が間違っています' ErrDefaultIP: 'デフォルトは予約名です。別の名前に変更してください' ErrGroupInUse: 'IP グループはブラックリスト/ホワイトリストで使用されており、削除できません' ErrIPGroupAclUse: 'IPグループはウェブサイト {{ .name }} のカスタムルールで使用されているため、削除できません' +ErrIPGroupOriginProtectionUse: 'IP グループはウェブサイト {{ .name }} の CDN オリジン保護で使用されています' +ErrOriginProtectionIPGroupRequired: 'オリジン保護を有効にする前に空でない IP グループを少なくとも 1 つ選択してください' +ErrOriginProtectionIPGroupInvalid: 'IP グループ {{ .name }} は存在しないか空です' ErrGroupExist: 'IP グループ名がすでに存在します' ErrIPRange: 'IP 範囲が間違っています' ErrIPExist: 'IP がすでに存在します' diff --git a/agent/i18n/lang/ko.yaml b/agent/i18n/lang/ko.yaml index af0dfd4842f9..6db933f811e5 100644 --- a/agent/i18n/lang/ko.yaml +++ b/agent/i18n/lang/ko.yaml @@ -381,6 +381,9 @@ ErrParseIP: '잘못된 IP 형식' ErrDefaultIP: '기본값은 예약된 이름입니다. 다른 이름으로 변경해 주세요' ErrGroupInUse: 'IP 그룹이 블랙리스트/화이트리스트에 사용 중이므로 삭제할 수 없습니다.' ErrIPGroupAclUse: 'IP 그룹은 웹사이트 {{ .name }} 의 사용자 정의 규칙에 사용되므로 삭제할 수 없습니다' +ErrIPGroupOriginProtectionUse: 'IP 그룹이 웹사이트 {{ .name }} 의 CDN 원본 서버 보호에 사용 중입니다' +ErrOriginProtectionIPGroupRequired: '원본 서버 보호를 활성화하기 전에 비어 있지 않은 IP 그룹을 하나 이상 선택하세요' +ErrOriginProtectionIPGroupInvalid: 'IP 그룹 {{ .name }} 이 존재하지 않거나 비어 있습니다' ErrGroupExist: 'IP 그룹 이름이 이미 존재합니다' ErrIPRange: '잘못된 IP 범위' ErrIPExist: 'IP가 이미 존재합니다' diff --git a/agent/i18n/lang/ms.yaml b/agent/i18n/lang/ms.yaml index 82fd1130fe6f..fc60a8099191 100644 --- a/agent/i18n/lang/ms.yaml +++ b/agent/i18n/lang/ms.yaml @@ -381,6 +381,9 @@ ErrParseIP: 'Format IP salah' ErrDefaultIP: 'default ialah nama simpanan, sila tukar kepada nama lain' ErrGroupInUse: 'Kumpulan IP digunakan oleh senarai hitam/senarai putih dan tidak boleh dipadamkan' ErrIPGroupAclUse: 'Kumpulan IP digunakan oleh peraturan tersuai tapak web {{ .name }}, tidak boleh dipadamkan' +ErrIPGroupOriginProtectionUse: 'Kumpulan IP digunakan oleh perlindungan origin CDN laman web {{ .name }}' +ErrOriginProtectionIPGroupRequired: 'Pilih sekurang-kurangnya satu kumpulan IP yang tidak kosong sebelum mengaktifkan perlindungan origin' +ErrOriginProtectionIPGroupInvalid: 'Kumpulan IP {{ .name }} tidak wujud atau kosong' ErrGroupExist: 'Nama kumpulan IP sudah wujud' ErrIPRange: 'Julat IP salah' ErrIPExist: 'IP sudah wujud' diff --git a/agent/i18n/lang/pt-BR.yaml b/agent/i18n/lang/pt-BR.yaml index 414da2e96ce7..a1090a368cb6 100644 --- a/agent/i18n/lang/pt-BR.yaml +++ b/agent/i18n/lang/pt-BR.yaml @@ -381,6 +381,9 @@ ErrParseIP: 'Formato de IP errado' ErrDefaultIP: 'padrão é um nome reservado, altere-o para outro nome' ErrGroupInUse: 'O grupo de IP é usado pela lista negra/lista branca e não pode ser excluído' ErrIPGroupAclUse: 'O grupo de IP está sendo usado por regras personalizadas do site {{ .name }}, não pode ser excluído' +ErrIPGroupOriginProtectionUse: 'O grupo de IP está sendo usado pela proteção de origem CDN do site {{ .name }}' +ErrOriginProtectionIPGroupRequired: 'Selecione pelo menos um grupo de IP não vazio antes de ativar a proteção de origem' +ErrOriginProtectionIPGroupInvalid: 'O grupo de IP {{ .name }} não existe ou está vazio' ErrGroupExist: 'O nome do grupo IP já existe' ErrIPRange: 'Intervalo de IP errado' ErrIPExist: 'IP já existe' diff --git a/agent/i18n/lang/ru.yaml b/agent/i18n/lang/ru.yaml index b68b40061d8a..8610b97d6dc4 100644 --- a/agent/i18n/lang/ru.yaml +++ b/agent/i18n/lang/ru.yaml @@ -381,6 +381,9 @@ ErrParseIP: 'Неправильный формат IP' ErrDefaultIP: 'по умолчанию это зарезервированное имя, пожалуйста, измените его на другое имя' ErrGroupInUse: 'IP-группа используется черным/белым списком и не может быть удалена' ErrIPGroupAclUse: 'Группа IP используется пользовательскими правилами сайта {{ .name }}, невозможно удалить' +ErrIPGroupOriginProtectionUse: 'Группа IP используется защитой источника CDN сайта {{ .name }}' +ErrOriginProtectionIPGroupRequired: 'Перед включением защиты источника выберите хотя бы одну непустую группу IP' +ErrOriginProtectionIPGroupInvalid: 'Группа IP {{ .name }} не существует или пуста' ErrGroupExist: 'Имя группы IP уже существует' ErrIPRange: 'Неверный диапазон IP-адресов' ErrIPExist: 'IP-адрес уже существует' diff --git a/agent/i18n/lang/tr.yaml b/agent/i18n/lang/tr.yaml index 2320dccad12b..255b5e98d2a6 100644 --- a/agent/i18n/lang/tr.yaml +++ b/agent/i18n/lang/tr.yaml @@ -381,6 +381,9 @@ ErrParseIP: 'Yanlış IP formatı' ErrDefaultIP: 'default ayrılmış bir isim, lütfen başka bir isme değiştirin' ErrGroupInUse: 'IP grubu kara liste/beyaz liste tarafından kullanılıyor ve silinemez' ErrIPGroupAclUse: 'IP grubu {{ .name }} web sitesinin özel kuralları tarafından kullanılıyor, silinemez' +ErrIPGroupOriginProtectionUse: 'IP grubu {{ .name }} web sitesinin CDN kaynak koruması tarafından kullanılıyor' +ErrOriginProtectionIPGroupRequired: 'Kaynak korumasını etkinleştirmeden önce en az bir boş olmayan IP grubu seçin' +ErrOriginProtectionIPGroupInvalid: 'IP grubu {{ .name }} mevcut değil veya boş' ErrGroupExist: 'IP grup adı zaten mevcut' ErrIPRange: 'Yanlış IP aralığı' ErrIPExist: 'IP zaten mevcut' diff --git a/agent/i18n/lang/zh-Hant.yaml b/agent/i18n/lang/zh-Hant.yaml index d45b1f63ab65..16a1eb720956 100644 --- a/agent/i18n/lang/zh-Hant.yaml +++ b/agent/i18n/lang/zh-Hant.yaml @@ -381,6 +381,9 @@ ErrParseIP: 'IP 格式錯誤' ErrDefaultIP: 'default 為保留名稱,請更換其他名稱' ErrGroupInUse: 'IP 群組被黑/白名單使用,無法刪除' ErrIPGroupAclUse: 'IP 群組被網站 {{ .name }} 自訂規則使用,無法刪除' +ErrIPGroupOriginProtectionUse: 'IP 群組被網站 {{ .name }} 的 CDN 來源站保護使用,無法刪除' +ErrOriginProtectionIPGroupRequired: '開啟來源站保護時必須選擇至少一個非空 IP 群組' +ErrOriginProtectionIPGroupInvalid: 'IP 群組 {{ .name }} 不存在或為空' ErrGroupExist: 'IP 群組名稱已存在' ErrIPRange: 'IP 範圍錯誤' ErrIPExist: 'IP 已存在' diff --git a/agent/i18n/lang/zh.yaml b/agent/i18n/lang/zh.yaml index 641c036f72ec..df83fca2d228 100644 --- a/agent/i18n/lang/zh.yaml +++ b/agent/i18n/lang/zh.yaml @@ -381,6 +381,9 @@ ErrParseIP: "IP 格式错误" ErrDefaultIP: "default 为保留名称,请更换其他名称" ErrGroupInUse: "IP 组被黑/白名单使用,无法删除" ErrIPGroupAclUse: "IP 组被网站 {{ .name }} 自定义规则使用,无法删除" +ErrIPGroupOriginProtectionUse: "IP 组被网站 {{ .name }} 的 CDN 源站保护使用,无法删除" +ErrOriginProtectionIPGroupRequired: "开启源站保护时必须选择至少一个非空 IP 组" +ErrOriginProtectionIPGroupInvalid: "IP 组 {{ .name }} 不存在或为空" ErrGroupExist: "IP 组名称已存在" ErrIPRange: "IP 范围错误" ErrIPExist: "IP 已存在" diff --git a/core/go.mod b/core/go.mod index f94be589341b..60f83864f585 100644 --- a/core/go.mod +++ b/core/go.mod @@ -36,7 +36,7 @@ require ( golang.org/x/net v0.56.0 golang.org/x/sys v0.46.0 golang.org/x/term v0.44.0 - golang.org/x/text v0.39.0 + golang.org/x/text v0.40.0 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 gorm.io/gorm v1.31.2 @@ -119,7 +119,7 @@ require ( golang.org/x/arch v0.26.0 // indirect golang.org/x/image v0.39.0 // indirect golang.org/x/mod v0.37.0 // indirect - golang.org/x/sync v0.21.0 // indirect + golang.org/x/sync v0.22.0 // indirect golang.org/x/tools v0.47.0 // indirect google.golang.org/protobuf v1.36.11 // indirect modernc.org/libc v1.72.0 // indirect diff --git a/core/go.sum b/core/go.sum index 5fa21453c5f1..36ac6a7e56ff 100644 --- a/core/go.sum +++ b/core/go.sum @@ -278,8 +278,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o= golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec= -golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= -golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= +golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -291,8 +291,8 @@ golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc= golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.39.0 h1:UbZz4pLOvn600D6Oh6GGEI6VAmndrEBLv8/6BEXzyus= -golang.org/x/text v0.39.0/go.mod h1:3UwRclnC2g0TU9x8PZiyfOajCd1zaUNHF9cvqcQZ+ZM= +golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs= +golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY= golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 0b4559d23df6..ebe8f3a0c17f 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -50,15 +50,15 @@ }, "devDependencies": { "@tailwindcss/postcss": "^4.3.0", - "@types/node": "^25.9.1", + "@types/node": "^26.1.1", "@types/uuid": "^11.0.0", - "@typescript-eslint/eslint-plugin": "^8.62.1", - "@typescript-eslint/parser": "^8.62.1", + "@typescript-eslint/eslint-plugin": "^8.63.0", + "@typescript-eslint/parser": "^8.63.0", "@vitejs/plugin-vue": "^6.0.7", - "@vitejs/plugin-vue-jsx": "^5.1.5", + "@vitejs/plugin-vue-jsx": "^5.1.6", "@vue/compiler-sfc": "^3.5.35", "autoprefixer": "^10.5.0", - "esbuild": "^0.28.0", + "esbuild": "^0.28.1", "eslint": "^10.6.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.5", @@ -96,13 +96,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -163,14 +163,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -180,13 +180,13 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz", + "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -220,18 +220,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.29.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.3.tgz", - "integrity": "sha512-RpLYy2sb51oNLjuu1iD3bwBqCBWUzjO0ocp+iaCP/lJtb2CPLcnC2Fftw+4sAzaMELGeWTgExSKADbdo0GFVzA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz", + "integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-member-expression-to-functions": "^7.28.5", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.28.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.29.0", + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/traverse": "^7.29.7", "semver": "^6.3.1" }, "engines": { @@ -252,9 +252,9 @@ } }, "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, "license": "MIT", "engines": { @@ -262,14 +262,14 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", - "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz", + "integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -308,22 +308,22 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", - "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz", + "integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.1" + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, "license": "MIT", "engines": { @@ -331,15 +331,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", - "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz", + "integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.28.5", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.28.6" + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -349,14 +349,14 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", - "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz", + "integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -436,13 +436,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", - "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -452,17 +452,17 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", - "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.29.7.tgz", + "integrity": "sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.28.6" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/plugin-syntax-typescript": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -472,33 +472,33 @@ } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", "debug": "^4.3.1" }, "engines": { @@ -1008,9 +1008,9 @@ "optional": true }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", - "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", "cpu": [ "ppc64" ], @@ -1025,9 +1025,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", - "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", "cpu": [ "arm" ], @@ -1042,9 +1042,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", - "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", "cpu": [ "arm64" ], @@ -1059,9 +1059,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", - "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", "cpu": [ "x64" ], @@ -1076,9 +1076,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", - "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", "cpu": [ "arm64" ], @@ -1093,9 +1093,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", - "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", "cpu": [ "x64" ], @@ -1110,9 +1110,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", - "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", "cpu": [ "arm64" ], @@ -1127,9 +1127,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", - "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", "cpu": [ "x64" ], @@ -1144,9 +1144,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", - "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", "cpu": [ "arm" ], @@ -1161,9 +1161,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", - "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", "cpu": [ "arm64" ], @@ -1178,9 +1178,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", - "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", "cpu": [ "ia32" ], @@ -1195,9 +1195,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", - "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", "cpu": [ "loong64" ], @@ -1212,9 +1212,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", - "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", "cpu": [ "mips64el" ], @@ -1229,9 +1229,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", - "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", "cpu": [ "ppc64" ], @@ -1246,9 +1246,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", - "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", "cpu": [ "riscv64" ], @@ -1263,9 +1263,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", - "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", "cpu": [ "s390x" ], @@ -1280,9 +1280,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", - "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", "cpu": [ "x64" ], @@ -1297,9 +1297,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", - "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", "cpu": [ "arm64" ], @@ -1314,9 +1314,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", - "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", "cpu": [ "x64" ], @@ -1331,9 +1331,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", - "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", "cpu": [ "arm64" ], @@ -1348,9 +1348,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", - "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", "cpu": [ "x64" ], @@ -1365,9 +1365,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", - "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", "cpu": [ "arm64" ], @@ -1382,9 +1382,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", - "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", "cpu": [ "x64" ], @@ -1399,9 +1399,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", - "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", "cpu": [ "arm64" ], @@ -1416,9 +1416,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", - "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", "cpu": [ "ia32" ], @@ -1433,9 +1433,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", - "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", "cpu": [ "x64" ], @@ -3016,14 +3016,14 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.1.tgz", - "integrity": "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==", + "version": "26.1.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.1.tgz", + "integrity": "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "undici-types": ">=7.24.0 <7.24.7" + "undici-types": "~8.3.0" } }, "node_modules/@types/normalize-package-data": { @@ -3057,17 +3057,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.62.1.tgz", - "integrity": "sha512-4EQM77WgVNxj7OkL/5b/D/xZsw00G577+UriYTC7JF5opcF3T2AuoeY7ueLaZgSVjSgCS6yOAJB5bRGLPSJUzA==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.63.0.tgz", + "integrity": "sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.62.1", - "@typescript-eslint/type-utils": "8.62.1", - "@typescript-eslint/utils": "8.62.1", - "@typescript-eslint/visitor-keys": "8.62.1", + "@typescript-eslint/scope-manager": "8.63.0", + "@typescript-eslint/type-utils": "8.63.0", + "@typescript-eslint/utils": "8.63.0", + "@typescript-eslint/visitor-keys": "8.63.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -3080,7 +3080,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.62.1", + "@typescript-eslint/parser": "^8.63.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } @@ -3096,17 +3096,17 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.62.1.tgz", - "integrity": "sha512-sPhE4iHuJDSvoAiec+Ro8JyXw8f0ql13HFR82P99nCm9GwTEKG0KYLvDe6REk8BCXuit6vJAv/Yxg5ABaNS2rA==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.63.0.tgz", + "integrity": "sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.62.1", - "@typescript-eslint/types": "8.62.1", - "@typescript-eslint/typescript-estree": "8.62.1", - "@typescript-eslint/visitor-keys": "8.62.1", + "@typescript-eslint/scope-manager": "8.63.0", + "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/typescript-estree": "8.63.0", + "@typescript-eslint/visitor-keys": "8.63.0", "debug": "^4.4.3" }, "engines": { @@ -3122,14 +3122,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.62.1.tgz", - "integrity": "sha512-yQ3RgY5RkSBpsNS1Bx/JQEcA24FOSdfGktoyprAr5u18390UQdtVcfnEv4nIrIshNnavlVyZBKxQwT1fIAE6cg==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.63.0.tgz", + "integrity": "sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.62.1", - "@typescript-eslint/types": "^8.62.1", + "@typescript-eslint/tsconfig-utils": "^8.63.0", + "@typescript-eslint/types": "^8.63.0", "debug": "^4.4.3" }, "engines": { @@ -3144,14 +3144,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.62.1.tgz", - "integrity": "sha512-r4d249KbQ1SFdpeStvob8Ih6aPPIzfqllPVOtvhve6ZcpuVcYo5/7zUWckKpHE7StASX4kTKZTLf0WQm/wPkcg==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.63.0.tgz", + "integrity": "sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.62.1", - "@typescript-eslint/visitor-keys": "8.62.1" + "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/visitor-keys": "8.63.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3162,9 +3162,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.62.1.tgz", - "integrity": "sha512-xadytJqX9vJVQ2fdQjkcIVigwaOJNWkpjdLt6cEQ+xPnrI1fkp+/jZE/I97k9KUjqtpd25i0HeyZf3T6dutv2g==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.63.0.tgz", + "integrity": "sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==", "dev": true, "license": "MIT", "engines": { @@ -3179,15 +3179,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.62.1.tgz", - "integrity": "sha512-aXM5xlqXiTxPibXB93cLAURfT3rlizf7uMXISCXy66Isr/9hISJx3yDsKl0L7lKa51b8JpFuNKby0/O0pEm9jg==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.63.0.tgz", + "integrity": "sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.62.1", - "@typescript-eslint/typescript-estree": "8.62.1", - "@typescript-eslint/utils": "8.62.1", + "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/typescript-estree": "8.63.0", + "@typescript-eslint/utils": "8.63.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -3204,9 +3204,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.62.1.tgz", - "integrity": "sha512-ooCzJFaf+Hg+uG6fA3NRFGuFjlfNlDhBthbv4ZPU/0elCAFUfnyXUvf/WOpHz/jYwSmvU2GkR2LtyUfy1AxZ1Q==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.63.0.tgz", + "integrity": "sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==", "dev": true, "license": "MIT", "engines": { @@ -3218,16 +3218,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.62.1.tgz", - "integrity": "sha512-xMcW9oP9u7fAMXYs9A65CVmtLQe2r//oXINHfi8HV+oiqhih17sbLdhXr4540YWlgpDKQdY854OL5ZrdCiQsAA==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.63.0.tgz", + "integrity": "sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.62.1", - "@typescript-eslint/tsconfig-utils": "8.62.1", - "@typescript-eslint/types": "8.62.1", - "@typescript-eslint/visitor-keys": "8.62.1", + "@typescript-eslint/project-service": "8.63.0", + "@typescript-eslint/tsconfig-utils": "8.63.0", + "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/visitor-keys": "8.63.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -3285,16 +3285,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.62.1.tgz", - "integrity": "sha512-sHtbPfuKNZCG+ih8SyjjucqRntSVmp8XgL5u6o9mAhiSn8ds5o/M/XdM0abweme2Tln3szOstOrZ9OXitvPh0g==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.63.0.tgz", + "integrity": "sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.62.1", - "@typescript-eslint/types": "8.62.1", - "@typescript-eslint/typescript-estree": "8.62.1" + "@typescript-eslint/scope-manager": "8.63.0", + "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/typescript-estree": "8.63.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3309,13 +3309,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.62.1.tgz", - "integrity": "sha512-4g3BLxfdTMy8iZG0MaBkadnlRrCJ74cQiFbyEVMrkwIoqdyaXXQM22cotDvrl4x28wgIZ9rEJRoM+mmhSJpJ1g==", + "version": "8.63.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.63.0.tgz", + "integrity": "sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.62.1", + "@typescript-eslint/types": "8.63.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -3369,16 +3369,16 @@ } }, "node_modules/@vitejs/plugin-vue-jsx": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-5.1.5.tgz", - "integrity": "sha512-jIAsvHOEtWpslLOI2MeElGFxH7M8pM83BU/Tor4RLyiwH0FM4nUW3xdvbw20EeU9wc5IspQwMq225K3CMnJEpA==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-5.1.6.tgz", + "integrity": "sha512-YXvi4as2clxt6DFw5+a0tTA97ntiQXm/raR8ofNj3aNwwdlVGTiG2gp7EvfZW17P50acL/9bP0ccF4XnqNmlgA==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.29.0", - "@babel/plugin-syntax-typescript": "^7.28.6", - "@babel/plugin-transform-typescript": "^7.28.6", - "@rolldown/pluginutils": "^1.0.0-rc.2", + "@babel/plugin-syntax-typescript": "^7.29.7", + "@babel/plugin-transform-typescript": "^7.29.7", + "@rolldown/pluginutils": "^1.0.1", "@vue/babel-plugin-jsx": "^2.0.1" }, "engines": { @@ -5297,9 +5297,9 @@ } }, "node_modules/esbuild": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", - "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", "devOptional": true, "hasInstallScript": true, "license": "MIT", @@ -5311,32 +5311,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.0", - "@esbuild/android-arm": "0.28.0", - "@esbuild/android-arm64": "0.28.0", - "@esbuild/android-x64": "0.28.0", - "@esbuild/darwin-arm64": "0.28.0", - "@esbuild/darwin-x64": "0.28.0", - "@esbuild/freebsd-arm64": "0.28.0", - "@esbuild/freebsd-x64": "0.28.0", - "@esbuild/linux-arm": "0.28.0", - "@esbuild/linux-arm64": "0.28.0", - "@esbuild/linux-ia32": "0.28.0", - "@esbuild/linux-loong64": "0.28.0", - "@esbuild/linux-mips64el": "0.28.0", - "@esbuild/linux-ppc64": "0.28.0", - "@esbuild/linux-riscv64": "0.28.0", - "@esbuild/linux-s390x": "0.28.0", - "@esbuild/linux-x64": "0.28.0", - "@esbuild/netbsd-arm64": "0.28.0", - "@esbuild/netbsd-x64": "0.28.0", - "@esbuild/openbsd-arm64": "0.28.0", - "@esbuild/openbsd-x64": "0.28.0", - "@esbuild/openharmony-arm64": "0.28.0", - "@esbuild/sunos-x64": "0.28.0", - "@esbuild/win32-arm64": "0.28.0", - "@esbuild/win32-ia32": "0.28.0", - "@esbuild/win32-x64": "0.28.0" + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" } }, "node_modules/escalade": { @@ -9633,9 +9633,9 @@ } }, "node_modules/undici-types": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", - "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", "dev": true, "license": "MIT" }, diff --git a/frontend/package.json b/frontend/package.json index 1c441d76b717..480d636c582f 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -61,15 +61,15 @@ }, "devDependencies": { "@tailwindcss/postcss": "^4.3.0", - "@types/node": "^25.9.1", + "@types/node": "^26.1.1", "@types/uuid": "^11.0.0", - "@typescript-eslint/eslint-plugin": "^8.62.1", - "@typescript-eslint/parser": "^8.62.1", + "@typescript-eslint/eslint-plugin": "^8.63.0", + "@typescript-eslint/parser": "^8.63.0", "@vitejs/plugin-vue": "^6.0.7", - "@vitejs/plugin-vue-jsx": "^5.1.5", + "@vitejs/plugin-vue-jsx": "^5.1.6", "@vue/compiler-sfc": "^3.5.35", "autoprefixer": "^10.5.0", - "esbuild": "^0.28.0", + "esbuild": "^0.28.1", "eslint": "^10.6.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.5", diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index a05d77c4ed36..a6837e42eb8e 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -4798,7 +4798,7 @@ const message = { regionPolicy: 'Region policy', provincePolicy: 'Province policy', provinceRuleLabel: 'Province', - provinceVersionAlert: 'OpenResty must be newer than 1.31.1.1-0 for province policies to take effect.', + openRestyFeatureVersionAlert: 'OpenResty must be newer than 1.31.1.1-0 for {0} to take effect.', ipLocation: 'IP Location', action: 'Action', ruleType: 'Attack Type', @@ -4887,6 +4887,7 @@ const message = { defaultUrlBlack: 'URL Rules', htmlRes: 'Intercept Page', urlSearchHelper: 'Enter the URL to support fuzzy search', + hostSearchHelper: 'Enter the Host to support fuzzy search', toCreate: 'Create', closeWaf: 'Close WAF', closeWafHelper: 'Closing WAF will cause the website to lose protection, do you want to continue', @@ -4902,6 +4903,7 @@ const message = { attackCount: 'Attack frequency limit', fileExtCheck: 'File upload limit', geoRestrict: 'Regional access restriction', + originProtect: 'CDN origin protection', attacklog: 'Interception Record', unknownWebsite: 'Unauthorized domain name access', geoRuleEmpty: 'Select at least one region or province', @@ -4953,6 +4955,7 @@ const message = { spiderIpHelper: 'When enabled, only selected spiders are allowed. When disabled, all spider access is blocked.', spiderIp: 'Spider IP Pool', + spider: 'Spider', spiderAllowlist: 'Allowed spiders', spiderAllowlistEmpty: 'No spiders selected. Saving will block all spider access.', geoIp: 'IP Address Library', @@ -5073,6 +5076,7 @@ const message = { totalFlow: 'Total Flow', logSize: 'Log File Size', realIPType: 'Real IP acquisition method', + realIPRecognition: 'Real IP detection', fromHeader: 'Get from HTTP Header', fromHeaders: 'Get from Header list', header: 'HTTP Header', @@ -5087,10 +5091,20 @@ const message = { monitorCDNHelper: 'Modifying the CDN configuration for website monitoring will also update the WAF CDN settings', wafCDNHelper: 'Modifying the WAF CDN configuration will also update the website monitoring CDN settings', + originProtection: 'Origin protection', + originProtectionHelper: + 'Only CDN nodes in the selected IP groups may connect to the origin. Visitor real-IP detection uses a separate switch.', + originProtectionIPGroups: 'CDN origin IP groups', + originProtectionIPGroupsPlaceholder: 'Select trusted CDN origin IP groups', + originProtectionWarning: + 'An incorrect configuration may make the website unavailable. Confirm that every CDN origin address is included.', + originProtectionEnableConfirm: + 'Connections outside the selected IP groups will be treated as direct origin access and blocked. Continue?', statusErr: 'Invalid status code format', shenma: 'Shenma Search', duckduckgo: 'DuckDuckGo', yandex: 'Yandex', + gptbot: 'GPTBot', excludeUri: 'Exclude URIs', top100Helper: 'Show the top 100 data', logSaveDay: 'Log Retention Period (days)', diff --git a/frontend/src/lang/modules/es-es.ts b/frontend/src/lang/modules/es-es.ts index 9a9b36eb4461..608e4ec0091a 100644 --- a/frontend/src/lang/modules/es-es.ts +++ b/frontend/src/lang/modules/es-es.ts @@ -4847,8 +4847,7 @@ const message = { regionPolicy: 'Política regional', provincePolicy: 'Política provincial', provinceRuleLabel: 'Provincia', - provinceVersionAlert: - 'OpenResty debe ser posterior a la versión 1.31.1.1-0 para que se apliquen las políticas provinciales.', + openRestyFeatureVersionAlert: 'OpenResty debe ser posterior a la versión 1.31.1.1-0 para que {0} funcione.', ipLocation: 'Ubicación IP', action: 'Acción', ruleType: 'Tipo de ataque', @@ -4935,6 +4934,7 @@ const message = { defaultUrlBlack: 'Reglas de URL', htmlRes: 'Página de intercepción', urlSearchHelper: 'Introduce la URL (búsqueda difusa)', + hostSearchHelper: 'Introduce el Host para búsqueda difusa', toCreate: 'Crear', closeWaf: 'Cerrar WAF', closeWafHelper: 'Cerrar WAF desprotege el sitio. ¿Continuar?', @@ -4950,6 +4950,7 @@ const message = { attackCount: 'Límite de frecuencia de ataques', fileExtCheck: 'Restricción de subida', geoRestrict: 'Restricción geográfica', + originProtect: 'Protección del origen CDN', attacklog: 'Registro de intercepciones', unknownWebsite: 'Acceso a dominio no autorizado', geoRuleEmpty: 'Selecciona al menos una región o provincia', @@ -4998,6 +4999,7 @@ const message = { spiderIpHelper: 'Al activarlo, solo se permiten los crawlers seleccionados; al desactivarlo, se bloquean todos.', spiderIp: 'Pool de IPs de crawlers', + spider: 'Crawler', spiderAllowlist: 'Crawlers permitidos', spiderAllowlistEmpty: 'No hay crawlers seleccionados. Al guardar, se bloquearán todos.', geoIp: 'Base de datos IP', @@ -5117,6 +5119,7 @@ const message = { totalFlow: 'Tráfico total', logSize: 'Tamaño de logs', realIPType: 'Método de obtención de IP real', + realIPRecognition: 'Identificación de IP real', fromHeader: 'Desde cabecera HTTP', fromHeaders: 'Desde lista de cabeceras', header: 'Cabecera HTTP', @@ -5128,10 +5131,20 @@ const message = { headersHelper: 'Obtiene la IP real de cabeceras comunes de CDN, tomando la primera disponible', monitorCDNHelper: 'Modificar la config de CDN en monitorización también actualiza la del WAF', wafCDNHelper: 'Modificar la config de CDN en el WAF también actualiza la monitorización', + originProtection: 'Protección del servidor de origen', + originProtectionHelper: + 'Solo los nodos CDN de los grupos IP seleccionados pueden conectarse al origen. La detección de la IP real usa otro interruptor.', + originProtectionIPGroups: 'Grupos IP de retorno CDN', + originProtectionIPGroupsPlaceholder: 'Seleccione grupos IP de retorno CDN de confianza', + originProtectionWarning: + 'Una configuración incorrecta puede impedir el acceso al sitio. Confirme que incluye todas las direcciones de retorno CDN.', + originProtectionEnableConfirm: + 'Las conexiones fuera de los grupos IP seleccionados se tratarán como acceso directo al origen y se bloquearán. ¿Continuar?', statusErr: 'Formato de código de estado inválido', shenma: 'Shenma', duckduckgo: 'DuckDuckGo', yandex: 'Yandex', + gptbot: 'GPTBot', excludeUri: 'Excluir URIs', top100Helper: 'Mostrar top 100', logSaveDay: 'Retención de logs (días)', diff --git a/frontend/src/lang/modules/fa.ts b/frontend/src/lang/modules/fa.ts index 852b69bb7a4a..754d49f439e6 100644 --- a/frontend/src/lang/modules/fa.ts +++ b/frontend/src/lang/modules/fa.ts @@ -4763,6 +4763,8 @@ const message = { geoRule: 'محدودیت دسترسی منطقه‌ای', geoHelper: 'دسترسی به وب‌سایت خود را از برخی مناطق محدود کنید، مثلاً: اگر دسترسی از سرزمین اصلی چین مجاز است، درخواست‌های خارج از سرزمین اصلی چین مسدود می‌شوند', + provincePolicy: 'سیاست استان', + openRestyFeatureVersionAlert: 'برای فعال شدن {0}، نسخه OpenResty باید جدیدتر از 1.31.1.1-0 باشد.', ipLocation: 'مکان IP', action: 'اقدام', ruleType: 'نوع حمله', @@ -4849,6 +4851,7 @@ const message = { defaultUrlBlack: 'قوانین URL', htmlRes: 'صفحه رهگیری', urlSearchHelper: 'URL را برای جستجوی فازی وارد کنید', + hostSearchHelper: 'Host را برای جستجوی فازی وارد کنید', toCreate: 'ایجاد', closeWaf: 'بستن WAF', closeWafHelper: 'بستن WAF باعث از دست رفتن محافظت وب‌سایت می‌شود، آیا ادامه می‌دهید؟', @@ -4864,6 +4867,7 @@ const message = { attackCount: 'محدودیت فرکانس حمله', fileExtCheck: 'محدودیت آپلود فایل', geoRestrict: 'محدودیت دسترسی منطقه‌ای', + originProtect: 'محافظت از مبدأ CDN', attacklog: 'رکورد رهگیری', unknownWebsite: 'دسترسی به دامنه غیرمجاز', geoRuleEmpty: 'منطقه نمی‌تواند خالی باشد', @@ -4914,6 +4918,7 @@ const message = { spiderIpHelper: 'در صورت فعال بودن، فقط خزنده‌های انتخاب‌شده مجازند؛ با غیرفعال کردن، دسترسی همه خزنده‌ها مسدود می‌شود.', spiderIp: 'مجموعه IP عنکبوت', + spider: 'عنکبوت', spiderAllowlist: 'خزنده‌های مجاز', spiderAllowlistEmpty: 'هیچ خزنده‌ای انتخاب نشده است. با ذخیره، دسترسی همه خزنده‌ها مسدود می‌شود.', geoIp: 'کتابخانه آدرس IP', @@ -5024,6 +5029,7 @@ const message = { totalFlow: 'مجموع ترافیک', logSize: 'اندازه فایل لاگ', realIPType: 'روش دریافت IP واقعی', + realIPRecognition: 'شناسایی IP واقعی', fromHeader: 'دریافت از هدر HTTP', fromHeaders: 'دریافت از لیست هدرها', header: 'هدر HTTP', @@ -5036,10 +5042,20 @@ const message = { headersHelper: 'IP واقعی را از هدرهای HTTP CDN رایج دریافت می‌کند و اولین مقدار موجود را انتخاب می‌کند', monitorCDNHelper: 'تغییر پیکربندی CDN برای نظارت وب‌سایت، تنظیمات CDN WAF را نیز به‌روزرسانی می‌کند', wafCDNHelper: 'تغییر پیکربندی CDN WAF، تنظیمات CDN نظارت وب‌سایت را نیز به‌روزرسانی می‌کند', + originProtection: 'محافظت از سرور مبدأ', + originProtectionHelper: + 'فقط گره‌های CDN در گروه‌های IP انتخاب‌شده می‌توانند به مبدأ متصل شوند. تشخیص IP واقعی بازدیدکننده کلید جداگانه دارد.', + originProtectionIPGroups: 'گروه‌های IP بازگشت CDN', + originProtectionIPGroupsPlaceholder: 'گروه‌های IP مورد اعتماد CDN را انتخاب کنید', + originProtectionWarning: + 'پیکربندی نادرست ممکن است وب‌سایت را از دسترس خارج کند. مطمئن شوید همه آدرس‌های بازگشت CDN اضافه شده‌اند.', + originProtectionEnableConfirm: + 'اتصال‌های خارج از گروه‌های IP انتخاب‌شده دسترسی مستقیم به مبدأ محسوب و مسدود می‌شوند. ادامه می‌دهید؟', statusErr: 'فرمت کد وضعیت نامعتبر است', shenma: 'جستجوی شنما', duckduckgo: 'داک‌داک‌گو', yandex: 'Yandex', + gptbot: 'GPTBot', excludeUri: 'رد کردن URI‌ها', top100Helper: 'نمایش ۱۰۰ داده برتر', logSaveDay: 'دوره نگهداری لاگ (روز)', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index 06ebb291f95c..74a1e442bec8 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -4815,8 +4815,8 @@ const message = { regionPolicy: '地域ポリシー', provincePolicy: '省ポリシー', provinceRuleLabel: '省', - provinceVersionAlert: - '省ポリシーを有効にするには、OpenResty のバージョンが 1.31.1.1-0 より新しい必要があります。', + openRestyFeatureVersionAlert: + '{0} を有効にするには、OpenResty のバージョンが 1.31.1.1-0 より新しい必要があります。', ipLocation: 'IP位置', action: 'アクション', ruleType: '攻撃タイプ', @@ -4903,6 +4903,7 @@ const message = { defaultUrlBlack: 'URLルール', htmlRes: 'インターセプトページ', urlSearchHelper: 'URLを入力して、曖昧検索をサポートしてください', + hostSearchHelper: 'Host を入力してください(曖昧検索対応)', toCreate: '作成', closeWaf: 'WAFを閉じる', closeWafHelper: 'WAFを閉じると、ウェブサイトは保護を失います。続行しますか?', @@ -4918,6 +4919,7 @@ const message = { attackCount: '攻撃頻度制限', fileExtCheck: 'ファイルアップロード制限', geoRestrict: '地域アクセス制限', + originProtect: 'CDN オリジン保護', attacklog: '遮断記録', unknownWebsite: '認証されていないドメイン名アクセス', geoRuleEmpty: '地域または省を1つ以上選択してください', @@ -4968,6 +4970,7 @@ const message = { spiderIpHelper: '有効にすると選択したクローラーのみ許可し、無効にするとすべてのクローラーをブロックします。', spiderIp: 'スパイダー IP プール', + spider: 'スパイダー', spiderAllowlist: '許可するクローラー', spiderAllowlistEmpty: 'クローラーが選択されていません。保存するとすべてのクローラーがブロックされます。', geoIp: 'IP アドレスライブラリ', @@ -5088,6 +5091,7 @@ const message = { totalFlow: '総トラフィック', logSize: 'ログファイルのサイズ', realIPType: '実際のIP取得方法', + realIPRecognition: 'リアル IP の識別', fromHeader: 'HTTPヘッダーから取得', fromHeaders: 'ヘッダーリストから取得', header: 'HTTPヘッダー', @@ -5100,10 +5104,20 @@ const message = { headersHelper: '一般的に使用されるCDNのHTTPヘッダーから実際のIPを取得し、最初の利用可能な値を選択', monitorCDNHelper: 'ウェブサイトモニタリングのためにCDN設定を変更すると、WAF CDN設定も更新されます', wafCDNHelper: 'WAF CDN設定を変更すると、ウェブサイトモニタリングのCDN設定も更新されます', + originProtection: 'オリジン保護', + originProtectionHelper: + '選択した IP グループ内の CDN ノードだけがオリジンへ接続できます。訪問者の実 IP 判定は別のスイッチです。', + originProtectionIPGroups: 'CDN オリジン IP グループ', + originProtectionIPGroupsPlaceholder: '信頼する CDN オリジン IP グループを選択', + originProtectionWarning: + '設定を誤るとサイトへ接続できなくなる可能性があります。すべての CDN 回送元アドレスを含めてください。', + originProtectionEnableConfirm: + '選択した IP グループ以外の接続はオリジンへの直接アクセスとしてブロックされます。続行しますか?', statusErr: '無効なステータスコード形式', shenma: '神馬検索', duckduckgo: 'DuckDuckGo', yandex: 'Yandex', + gptbot: 'GPTBot', excludeUri: 'URIを除外', top100Helper: '上位100データを表示', logSaveDay: 'ログ保持期間(日数)', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index d532a1f50592..f9dc10367927 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -4720,7 +4720,7 @@ const message = { regionPolicy: '지역 정책', provincePolicy: '성 정책', provinceRuleLabel: '성', - provinceVersionAlert: '성 정책을 적용하려면 OpenResty 버전이 1.31.1.1-0보다 높아야 합니다.', + openRestyFeatureVersionAlert: '{0}을(를) 적용하려면 OpenResty 버전이 1.31.1.1-0보다 높아야 합니다.', ipLocation: 'IP 위치', action: '동작', ruleType: '공격 유형', @@ -4806,6 +4806,7 @@ const message = { defaultUrlBlack: 'URL 규칙', htmlRes: '차단 페이지', urlSearchHelper: 'URL 을 입력하여 유사 검색을 지원합니다.', + hostSearchHelper: 'Host를 입력하여 유사 검색을 지원합니다.', toCreate: '생성', closeWaf: 'WAF 종료', closeWafHelper: 'WAF 를 종료하면 웹사이트 보호가 해제됩니다. 계속하시겠습니까?', @@ -4821,6 +4822,7 @@ const message = { attackCount: '공격 빈도 제한', fileExtCheck: '파일 업로드 제한', geoRestrict: '지역 접근 제한', + originProtect: 'CDN 원본 서버 보호', attacklog: '차단 기록', unknownWebsite: '허가되지 않은 도메인 접근', geoRuleEmpty: '지역 또는 성을 하나 이상 선택하세요.', @@ -4868,6 +4870,7 @@ const message = { noWhiteUrl: 'URL이 이미 허용 목록에 포함되어 있으므로 다시 추가할 필요가 없습니다', spiderIpHelper: '활성화하면 선택한 크롤러만 허용하고, 비활성화하면 모든 크롤러 접근을 차단합니다.', spiderIp: '스파이더 IP 풀', + spider: '스파이더', spiderAllowlist: '허용할 크롤러', spiderAllowlistEmpty: '선택한 크롤러가 없습니다. 저장하면 모든 크롤러 접근이 차단됩니다.', geoIp: 'IP 주소 라이브러리', @@ -4989,6 +4992,7 @@ const message = { totalFlow: '총 트래픽', logSize: '로그 파일 크기', realIPType: '실제 IP 가져오기 방법', + realIPRecognition: '실제 IP 식별', fromHeader: 'HTTP 헤더에서 가져오기', fromHeaders: '헤더 목록에서 가져오기', header: 'HTTP 헤더', @@ -5002,10 +5006,20 @@ const message = { '일반적으로 사용되는 CDN HTTP 헤더에서 실제 IP를 가져오며, 사용 가능한 첫 번째 값을 선택합니다', monitorCDNHelper: '웹사이트 모니터링을 위한 CDN 구성을 수정하면 WAF CDN 설정도 업데이트됩니다', wafCDNHelper: 'WAF CDN 구성을 수정하면 웹사이트 모니터링 CDN 설정도 업데이트됩니다', + originProtection: '원본 서버 보호', + originProtectionHelper: + '선택한 IP 그룹의 CDN 노드만 원본 서버에 연결할 수 있습니다. 방문자 실제 IP 식별은 별도 스위치를 사용합니다.', + originProtectionIPGroups: 'CDN 원본 IP 그룹', + originProtectionIPGroupsPlaceholder: '신뢰할 CDN 원본 IP 그룹을 선택하세요', + originProtectionWarning: + '잘못 설정하면 웹사이트에 접속할 수 없습니다. 모든 CDN 원본 주소가 포함되었는지 확인하세요.', + originProtectionEnableConfirm: + '선택한 IP 그룹 외의 연결은 원본 서버 직접 접근으로 간주되어 차단됩니다. 계속하시겠습니까?', statusErr: '잘못된 상태 코드 형식', shenma: '션마 검색', duckduckgo: '덕덕고', yandex: 'Yandex', + gptbot: 'GPTBot', excludeUri: 'URI 제외', top100Helper: '상위 100 개의 데이터를 표시합니다', logSaveDay: '로그 보관 기간 (일)', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 1b64bcccfb26..7215910c6240 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -4875,8 +4875,7 @@ const message = { regionPolicy: 'Dasar wilayah', provincePolicy: 'Dasar wilayah pentadbiran', provinceRuleLabel: 'Wilayah pentadbiran', - provinceVersionAlert: - 'OpenResty mestilah lebih baharu daripada 1.31.1.1-0 untuk dasar wilayah pentadbiran berfungsi.', + openRestyFeatureVersionAlert: 'OpenResty mesti lebih baharu daripada 1.31.1.1-0 agar {0} berfungsi.', ipLocation: 'Lokasi IP', action: 'Tindakan', ruleType: 'Jenis Serangan', @@ -4965,6 +4964,7 @@ const message = { defaultUrlBlack: 'Peraturan URL', htmlRes: 'Halaman Sekat', urlSearchHelper: 'Sila masukkan URL untuk sokongan carian samar', + hostSearchHelper: 'Masukkan Host untuk carian kabur', toCreate: 'Cipta', closeWaf: 'Tutup WAF', closeWafHelper: 'Menutup WAF akan menyebabkan laman web kehilangan perlindungan, adakah anda mahu teruskan', @@ -4980,6 +4980,7 @@ const message = { attackCount: 'Had Kekerapan Serangan', fileExtCheck: 'Had Muat Naik Fail', geoRestrict: 'Sekatan Akses Wilayah', + originProtect: 'Perlindungan origin CDN', attacklog: 'Rekod Sekat', unknownWebsite: 'Akses domain yang tidak sah', geoRuleEmpty: 'Pilih sekurang-kurangnya satu wilayah atau wilayah pentadbiran', @@ -5030,6 +5031,7 @@ const message = { spiderIpHelper: 'Apabila didayakan, hanya perangkak yang dipilih dibenarkan; apabila dilumpuhkan, semua akses perangkak disekat.', spiderIp: 'Kolam IP labah-labah', + spider: 'Spider', spiderAllowlist: 'Perangkak dibenarkan', spiderAllowlistEmpty: 'Tiada perangkak dipilih. Menyimpan akan menyekat semua akses perangkak.', geoIp: 'Pustaka Alamat IP', @@ -5150,6 +5152,7 @@ const message = { totalFlow: 'Jumlah Trafik', logSize: 'Saiz Fail Log', realIPType: 'Kaedah pemerolehan IP sebenar', + realIPRecognition: 'Pengenalpastian IP sebenar', fromHeader: 'Dapatkan dari Header HTTP', fromHeaders: 'Dapatkan dari senarai Header', header: 'Header HTTP', @@ -5164,10 +5167,20 @@ const message = { monitorCDNHelper: 'Mengubah konfigurasi CDN untuk pemantauan laman web juga akan mengemas kini tetapan WAF CDN', wafCDNHelper: 'Mengubah konfigurasi WAF CDN juga akan mengemas kini tetapan CDN pemantauan laman web', + originProtection: 'Perlindungan pelayan origin', + originProtectionHelper: + 'Hanya nod CDN dalam kumpulan IP terpilih boleh menyambung ke origin. Pengesanan IP sebenar pelawat menggunakan suis berasingan.', + originProtectionIPGroups: 'Kumpulan IP origin CDN', + originProtectionIPGroupsPlaceholder: 'Pilih kumpulan IP origin CDN yang dipercayai', + originProtectionWarning: + 'Konfigurasi yang salah boleh menyebabkan laman web tidak dapat dicapai. Pastikan semua alamat origin CDN disertakan.', + originProtectionEnableConfirm: + 'Sambungan di luar kumpulan IP terpilih akan dianggap sebagai akses terus ke origin dan disekat. Teruskan?', statusErr: 'Format kod status tidak sah', shenma: 'Shenma Search', duckduckgo: 'DuckDuckGo', yandex: 'Yandex', + gptbot: 'GPTBot', excludeUri: 'Kecualikan URI', top100Helper: 'Tunjukkan data 100 teratas', logSaveDay: 'Tempoh Penahanan Log (hari)', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index 3419cb23c2d4..f80e8afbecf0 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -5017,8 +5017,7 @@ const message = { regionPolicy: 'Política regional', provincePolicy: 'Política de província', provinceRuleLabel: 'Província', - provinceVersionAlert: - 'O OpenResty deve ser posterior à versão 1.31.1.1-0 para que as políticas de província funcionem.', + openRestyFeatureVersionAlert: 'A versão do OpenResty deve ser superior a 1.31.1.1-0 para que {0} funcione.', ipLocation: 'Localização do IP', action: 'Ação', ruleType: 'Tipo de ataque', @@ -5107,6 +5106,7 @@ const message = { defaultUrlBlack: 'Regras de URL', htmlRes: 'Página de interceptação', urlSearchHelper: 'Por favor, insira a URL para suportar a pesquisa difusa', + hostSearchHelper: 'Insira o Host para pesquisa aproximada', toCreate: 'Criar', closeWaf: 'Fechar WAF', closeWafHelper: 'Fechar o WAF fará com que o site perca a proteção, você deseja continuar?', @@ -5122,6 +5122,7 @@ const message = { attackCount: 'Limite de frequência de ataques', fileExtCheck: 'Limite de upload de arquivos', geoRestrict: 'Restrição de acesso regional', + originProtect: 'Proteção da origem CDN', attacklog: 'Registro de Interceptação', unknownWebsite: 'Acesso a nome de domínio não autorizado', geoRuleEmpty: 'Selecione pelo menos uma região ou província', @@ -5174,6 +5175,7 @@ const message = { spiderIpHelper: 'Quando ativado, apenas os spiders selecionados são permitidos; quando desativado, todos são bloqueados.', spiderIp: 'Pool de IPs de spiders', + spider: 'Spider', spiderAllowlist: 'Spiders permitidos', spiderAllowlistEmpty: 'Nenhum spider selecionado. Ao salvar, todos os spiders serão bloqueados.', geoIp: 'Biblioteca de endereços IP', @@ -5294,6 +5296,7 @@ const message = { totalFlow: 'Fluxo Total', logSize: 'Tamanho do Arquivo de Log', realIPType: 'Método de Obtenção do IP Real', + realIPRecognition: 'Identificação do IP real', fromHeader: 'Obter do Header HTTP', fromHeaders: 'Obter da lista de Headers', header: 'Header HTTP', @@ -5309,10 +5312,20 @@ const message = { 'Modificar a configuração da CDN para monitoramento do site também atualizará as configurações de CDN do WAF', wafCDNHelper: 'Modificar a configuração de CDN do WAF também atualizará as configurações de CDN do monitoramento do site', + originProtection: 'Proteção do servidor de origem', + originProtectionHelper: + 'Somente nós CDN nos grupos de IP selecionados podem conectar à origem. A detecção do IP real do visitante usa uma opção separada.', + originProtectionIPGroups: 'Grupos de IP de origem CDN', + originProtectionIPGroupsPlaceholder: 'Selecione grupos de IP de origem CDN confiáveis', + originProtectionWarning: + 'Uma configuração incorreta pode tornar o site indisponível. Confirme se todos os endereços de retorno da CDN estão incluídos.', + originProtectionEnableConfirm: + 'Conexões fora dos grupos de IP selecionados serão tratadas como acesso direto à origem e bloqueadas. Continuar?', statusErr: 'Formato de código de status inválido', shenma: 'Busca Shenma', duckduckgo: 'DuckDuckGo', yandex: 'Yandex', + gptbot: 'GPTBot', excludeUri: 'Excluir URIs', top100Helper: 'Mostrar os 100 principais dados', logSaveDay: 'Período de Retenção de Logs (dias)', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index f8023e84350d..18977fb1897f 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -4866,7 +4866,7 @@ const message = { regionPolicy: 'Правила регионов', provincePolicy: 'Правила провинций', provinceRuleLabel: 'Провинция', - provinceVersionAlert: 'Для работы правил провинций требуется версия OpenResty новее 1.31.1.1-0.', + openRestyFeatureVersionAlert: 'Для работы функции «{0}» требуется версия OpenResty новее 1.31.1.1-0.', ipLocation: 'Местоположение IP', action: 'Действие', ruleType: 'Тип атаки', @@ -4954,6 +4954,7 @@ const message = { defaultUrlBlack: 'Правила для URL', htmlRes: 'Страница перехвата', urlSearchHelper: 'Введите URL для поддержки нечеткого поиска', + hostSearchHelper: 'Введите Host для нечеткого поиска', toCreate: 'Создать', closeWaf: 'Закрыть WAF', closeWafHelper: 'Закрытие WAF приведет к потере защиты сайта, продолжить?', @@ -4969,6 +4970,7 @@ const message = { attackCount: 'Ограничение частоты атак', fileExtCheck: 'Ограничение на загрузку файлов', geoRestrict: 'Ограничение по региону', + originProtect: 'Защита источника CDN', attacklog: 'Запись перехвата', unknownWebsite: 'Неавторизованный доступ к домену', geoRuleEmpty: 'Выберите хотя бы один регион или провинцию', @@ -5021,6 +5023,7 @@ const message = { spiderIpHelper: 'Если включено, разрешены только выбранные поисковые роботы; если выключено, доступ всех роботов блокируется.', spiderIp: 'Пул IP-адресов поисковых роботов', + spider: 'Поисковые роботы', spiderAllowlist: 'Разрешенные поисковые роботы', spiderAllowlistEmpty: 'Поисковые роботы не выбраны. После сохранения доступ всех роботов будет заблокирован.', @@ -5142,6 +5145,7 @@ const message = { totalFlow: 'Общий трафик', logSize: 'Размер файла лога', realIPType: 'Метод получения реального IP', + realIPRecognition: 'Определение реального IP', fromHeader: 'Получение из заголовка HTTP', fromHeaders: 'Получение из списка заголовков', header: 'HTTP-заголовок', @@ -5155,10 +5159,20 @@ const message = { 'Получение реального IP из распространённых заголовков CDN HTTP, выбирая первое доступное значение', monitorCDNHelper: 'Изменение конфигурации CDN для мониторинга веб-сайта также обновит настройки WAF CDN', wafCDNHelper: 'Изменение конфигурации WAF CDN также обновит настройки мониторинга веб-сайта', + originProtection: 'Защита исходного сервера', + originProtectionHelper: + 'К источнику могут подключаться только узлы CDN из выбранных групп IP. Определение реального IP посетителя включается отдельно.', + originProtectionIPGroups: 'Группы IP источника CDN', + originProtectionIPGroupsPlaceholder: 'Выберите доверенные группы IP источника CDN', + originProtectionWarning: + 'Ошибка конфигурации может сделать сайт недоступным. Убедитесь, что добавлены все адреса обратного подключения CDN.', + originProtectionEnableConfirm: + 'Подключения вне выбранных групп IP будут считаться прямым доступом к источнику и блокироваться. Продолжить?', statusErr: 'Неверный формат статус-кода', shenma: 'Shenma Search', duckduckgo: 'DuckDuckGo', yandex: 'Yandex', + gptbot: 'GPTBot', excludeUri: 'Исключить URI', top100Helper: 'Показать топ 100 данных', logSaveDay: 'Период хранения логов (дни)', diff --git a/frontend/src/lang/modules/tr.ts b/frontend/src/lang/modules/tr.ts index 6a8091db39f9..366f4ddcfd7a 100644 --- a/frontend/src/lang/modules/tr.ts +++ b/frontend/src/lang/modules/tr.ts @@ -4864,8 +4864,8 @@ const message = { regionPolicy: 'Bölge politikası', provincePolicy: 'İl politikası', provinceRuleLabel: 'İl', - provinceVersionAlert: - 'İl politikalarının çalışması için OpenResty sürümü 1.31.1.1-0 sürümünden daha yeni olmalıdır.', + openRestyFeatureVersionAlert: + '{0} özelliğinin çalışması için OpenResty sürümü 1.31.1.1-0 sürümünden daha yeni olmalıdır.', ipLocation: 'IP Konumu', action: 'Eylem', ruleType: 'Saldırı Türü', @@ -4953,6 +4953,7 @@ const message = { defaultUrlBlack: 'URL Kuralları', htmlRes: 'Engelleme Sayfası', urlSearchHelper: 'Bulanık arama için URL girin', + hostSearchHelper: 'Bulanık arama için Host girin', toCreate: 'Oluştur', closeWaf: 'WAF’ı Kapat', closeWafHelper: @@ -4969,6 +4970,7 @@ const message = { attackCount: 'Saldırı sıklığı sınırı', fileExtCheck: 'Dosya yükleme sınırı', geoRestrict: 'Bölgesel erişim kısıtlaması', + originProtect: 'CDN kaynak koruması', attacklog: 'Engelleme Kaydı', unknownWebsite: 'Yetkisiz alan adı erişimi', geoRuleEmpty: 'En az bir bölge veya il seçin', @@ -5019,6 +5021,7 @@ const message = { spiderIpHelper: 'Etkinleştirildiğinde yalnızca seçilen tarayıcılara izin verilir; devre dışı bırakıldığında tüm tarayıcılar engellenir.', spiderIp: 'Örümcek IP Havuzu', + spider: 'Örümcek', spiderAllowlist: 'İzin verilen tarayıcılar', spiderAllowlistEmpty: 'Hiçbir tarayıcı seçilmedi. Kaydedildiğinde tüm tarayıcılar engellenecek.', geoIp: 'IP Adres Kütüphanesi', @@ -5139,6 +5142,7 @@ const message = { totalFlow: 'Toplam Trafik', logSize: 'Günlük Dosyası Boyutu', realIPType: 'Gerçek IP alma yöntemi', + realIPRecognition: 'Gerçek IP algılama', fromHeader: 'HTTP Başlığından Al', fromHeaders: 'Başlık listesinden Al', header: 'HTTP Başlığı', @@ -5152,10 +5156,20 @@ const message = { monitorCDNHelper: 'Web sitesi izleme için CDN yapılandırmasını değiştirmek, WAF CDN ayarlarını da güncelleyecektir', wafCDNHelper: 'WAF CDN yapılandırmasını değiştirmek, web sitesi izleme CDN ayarlarını da güncelleyecektir', + originProtection: 'Kaynak sunucu koruması', + originProtectionHelper: + 'Yalnızca seçilen IP gruplarındaki CDN düğümleri kaynağa bağlanabilir. Ziyaretçi gerçek IP tespiti ayrı bir anahtar kullanır.', + originProtectionIPGroups: 'CDN kaynak IP grupları', + originProtectionIPGroupsPlaceholder: 'Güvenilir CDN kaynak IP gruplarını seçin', + originProtectionWarning: + 'Hatalı yapılandırma siteyi erişilemez yapabilir. Tüm CDN kaynak adreslerinin eklendiğini doğrulayın.', + originProtectionEnableConfirm: + 'Seçilen IP grupları dışındaki bağlantılar kaynağa doğrudan erişim sayılarak engellenecektir. Devam edilsin mi?', statusErr: 'Geçersiz durum kodu formatı', shenma: 'Shenma Arama', duckduckgo: 'DuckDuckGo', yandex: 'Yandex', + gptbot: 'GPTBot', excludeUri: 'URI’leri Hariç Tut', top100Helper: 'İlk 100 veriyi göster', logSaveDay: 'Günlük Saklama Süresi (gün)', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index defcbb8d5a5f..93aa8da1e343 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -4467,7 +4467,7 @@ const message = { regionPolicy: '地區策略', provincePolicy: '省份策略', provinceRuleLabel: '省份', - provinceVersionAlert: 'OpenResty 版本需高於 1.31.1.1-0,省份策略才會生效。', + openRestyFeatureVersionAlert: 'OpenResty 版本需高於 1.31.1.1-0,{0}才會生效。', ipLocation: 'IP 歸屬地', action: '動作', ruleType: '攻擊類型', @@ -4551,6 +4551,7 @@ const message = { defaultUrlBlack: 'URL 規則', htmlRes: '攔截頁面', urlSearchHelper: '請輸入 URL,支援模糊搜尋', + hostSearchHelper: '請輸入 Host,支援模糊搜尋', toCreate: '去建立', closeWaf: '關閉 WAF', closeWafHelper: '關閉 WAF 會使網站失去防護,是否繼續', @@ -4566,6 +4567,7 @@ const message = { attackCount: '攻擊頻率限制', fileExtCheck: '檔案上傳限制', geoRestrict: '地區存取限制', + originProtect: 'CDN 來源站保護', attacklog: '攔截紀錄', unknownWebsite: '未授權網域存取', geoRuleEmpty: '地區或省份至少選擇一項', @@ -4610,6 +4612,7 @@ const message = { noWhiteUrl: 'URL 已加白,無需再次加白', spiderIpHelper: '啟用後僅放行已選取的蜘蛛,停用後會攔截所有蜘蛛存取', spiderIp: '蜘蛛 IP 池', + spider: '蜘蛛', spiderAllowlist: '蜘蛛放行範圍', spiderAllowlistEmpty: '未選取任何蜘蛛,儲存後將攔截所有蜘蛛存取', geoIp: 'IP 位址庫', @@ -4728,6 +4731,7 @@ const message = { totalFlow: '總流量', logSize: '日誌檔案大小', realIPType: '真實IP取得方式', + realIPRecognition: '真實 IP 識別', fromHeader: '從 HTTP Header 取得', fromHeaders: '從 Header 清單中取得', header: 'HTTP Header', @@ -4740,10 +4744,17 @@ const message = { headersHelper: '從下列常用的 CDN 攜帶真實 IP 的 HTTP Header 中取得,取第一個能取得到的值', monitorCDNHelper: '修改網站監控的 CDN 設定會同步更新 WAF 的 CDN 設定', wafCDNHelper: '修改 WAF 的 CDN 設定會同步更新網站監控的 CDN 設定', + originProtection: '來源站保護', + originProtectionHelper: '只允許所選 IP 群組中的 CDN 節點連線來源站,訪客真實 IP 識別使用獨立開關', + originProtectionIPGroups: 'CDN 回源 IP 群組', + originProtectionIPGroupsPlaceholder: '請選擇可信任的 CDN 回源 IP 群組', + originProtectionWarning: '設定錯誤可能導致網站無法存取,請先確認 IP 群組包含所有 CDN 回源位址', + originProtectionEnableConfirm: '開啟後,非所選 IP 群組的連線將視為直接連線來源站並遭到阻擋,是否繼續?', statusErr: '狀態碼格式錯誤', shenma: '神馬搜尋', duckduckgo: 'DuckDuckGo', yandex: 'Yandex', + gptbot: 'GPTBot', exceptUri: '排除 Uri', top100Helper: '顯示 Top 100 的資料', logSaveDay: '日誌儲存天數', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 1e548eb44095..3c69501731a1 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -3925,7 +3925,7 @@ const message = { regionPolicy: '地区策略', provincePolicy: '省份策略', provinceRuleLabel: '省份', - provinceVersionAlert: 'OpenResty 版本需高于 1.31.1.1-0,省份策略才会生效。', + openRestyFeatureVersionAlert: 'OpenResty 版本需高于 1.31.1.1-0,{0}才会生效。', ipLocation: 'IP 归属地', action: '动作', ruleType: '攻击类型', @@ -4009,6 +4009,7 @@ const message = { defaultUrlBlack: 'URL 规则', htmlRes: '拦截页面', urlSearchHelper: '请输入 URL,支持模糊搜索', + hostSearchHelper: '请输入 Host,支持模糊搜索', toCreate: '去创建', closeWaf: '关闭 WAF', closeWafHelper: '关闭 WAF 会使网站失去防护,是否继续', @@ -4024,6 +4025,7 @@ const message = { attackCount: '攻击频率限制', fileExtCheck: '文件上传限制', geoRestrict: '地区访问限制', + originProtect: 'CDN 源站保护', attacklog: '拦截记录', unknownWebsite: '未授权域名访问', geoRuleEmpty: '地区或省份至少选择一项', @@ -4068,6 +4070,7 @@ const message = { noWhiteUrl: 'URL 已加白,无需再次加白', spiderIpHelper: '开启后仅放行已选择的蜘蛛,关闭后会拦截所有蜘蛛访问', spiderIp: '蜘蛛 IP 池', + spider: '蜘蛛', spiderAllowlist: '蜘蛛放行范围', spiderAllowlistEmpty: '未选择任何蜘蛛,保存后将拦截所有蜘蛛访问', geoIp: 'IP 地址库', @@ -4181,6 +4184,7 @@ const message = { totalFlow: '总流量', logSize: '日志文件大小', realIPType: '真实IP获取方式', + realIPRecognition: '真实 IP 识别', fromHeader: '从 HTTP Header 中获取', fromHeaders: '从 Header 列表中获取', header: 'HTTP Header', @@ -4192,10 +4196,17 @@ const message = { headersHelper: '从下列常用的 CDN 携带真实 IP 的 HTTP Header 中获取,取第一个能获取到的值', monitorCDNHelper: '修改网站监控的 CDN 配置会同步更新 WAF 的 CDN 配置', wafCDNHelper: '修改 WAF 的 CDN 配置会同步更新网站监控的 CDN 配置', + originProtection: '源站保护', + originProtectionHelper: '只允许选定 IP 组中的 CDN 节点连接源站,访客真实 IP 识别使用独立开关', + originProtectionIPGroups: 'CDN 回源 IP 组', + originProtectionIPGroupsPlaceholder: '请选择可信 CDN 回源 IP 组', + originProtectionWarning: '配置错误可能导致网站无法访问,请先确认 IP 组包含全部 CDN 回源地址', + originProtectionEnableConfirm: '开启后,非所选 IP 组的连接将被视为源站直连并阻止访问,是否继续?', statusErr: '状态码格式错误', shenma: '神马搜索', duckduckgo: 'DuckDuckGo', yandex: 'Yandex', + gptbot: 'GPTBot', '360': '360 搜索', excludeUri: '排除 Uri', top100Helper: '显示 Top 100 的数据',