mirror of
https://github.com/bolucat/Archive.git
synced 2025-10-05 00:03:19 +08:00
Update On Thu Jul 31 20:43:49 CEST 2025
This commit is contained in:
1
.github/update.log
vendored
1
.github/update.log
vendored
@@ -1075,3 +1075,4 @@ Update On Sun Jul 27 20:38:58 CEST 2025
|
|||||||
Update On Mon Jul 28 20:43:06 CEST 2025
|
Update On Mon Jul 28 20:43:06 CEST 2025
|
||||||
Update On Tue Jul 29 20:43:03 CEST 2025
|
Update On Tue Jul 29 20:43:03 CEST 2025
|
||||||
Update On Wed Jul 30 20:44:03 CEST 2025
|
Update On Wed Jul 30 20:44:03 CEST 2025
|
||||||
|
Update On Thu Jul 31 20:43:42 CEST 2025
|
||||||
|
@@ -3,14 +3,10 @@ package outbound
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"encoding/binary"
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"sync"
|
|
||||||
|
|
||||||
"github.com/metacubex/mihomo/common/convert"
|
"github.com/metacubex/mihomo/common/convert"
|
||||||
N "github.com/metacubex/mihomo/common/net"
|
N "github.com/metacubex/mihomo/common/net"
|
||||||
@@ -30,11 +26,6 @@ import (
|
|||||||
M "github.com/metacubex/sing/common/metadata"
|
M "github.com/metacubex/sing/common/metadata"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
// max packet length
|
|
||||||
maxLength = 1024 << 3
|
|
||||||
)
|
|
||||||
|
|
||||||
type Vless struct {
|
type Vless struct {
|
||||||
*Base
|
*Base
|
||||||
client *vless.Client
|
client *vless.Client
|
||||||
@@ -188,9 +179,6 @@ func (v *Vless) streamConnContext(ctx context.Context, c net.Conn, metadata *C.M
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
conn, err = v.client.StreamConn(c, parseVlessAddr(metadata, v.option.XUDP))
|
conn, err = v.client.StreamConn(c, parseVlessAddr(metadata, v.option.XUDP))
|
||||||
if v.option.PacketAddr {
|
|
||||||
conn = packetaddr.NewBindConn(conn)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
conn, err = v.client.StreamConn(c, parseVlessAddr(metadata, false))
|
conn, err = v.client.StreamConn(c, parseVlessAddr(metadata, false))
|
||||||
}
|
}
|
||||||
@@ -352,12 +340,11 @@ func (v *Vless) ListenPacketOnStreamConn(ctx context.Context, c net.Conn, metada
|
|||||||
), v), nil
|
), v), nil
|
||||||
} else if v.option.PacketAddr {
|
} else if v.option.PacketAddr {
|
||||||
return newPacketConn(N.NewThreadSafePacketConn(
|
return newPacketConn(N.NewThreadSafePacketConn(
|
||||||
packetaddr.NewConn(&vlessPacketConn{
|
packetaddr.NewConn(v.client.PacketConn(c, metadata.UDPAddr()),
|
||||||
Conn: c, rAddr: metadata.UDPAddr(),
|
M.SocksaddrFromNet(metadata.UDPAddr())),
|
||||||
}, M.SocksaddrFromNet(metadata.UDPAddr())),
|
|
||||||
), v), nil
|
), v), nil
|
||||||
}
|
}
|
||||||
return newPacketConn(N.NewThreadSafePacketConn(&vlessPacketConn{Conn: c, rAddr: metadata.UDPAddr()}), v), nil
|
return newPacketConn(N.NewThreadSafePacketConn(v.client.PacketConn(c, metadata.UDPAddr())), v), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SupportUOT implements C.ProxyAdapter
|
// SupportUOT implements C.ProxyAdapter
|
||||||
@@ -408,98 +395,6 @@ func parseVlessAddr(metadata *C.Metadata, xudp bool) *vless.DstAddr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type vlessPacketConn struct {
|
|
||||||
net.Conn
|
|
||||||
rAddr net.Addr
|
|
||||||
remain int
|
|
||||||
mux sync.Mutex
|
|
||||||
cache [2]byte
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *vlessPacketConn) writePacket(payload []byte) (int, error) {
|
|
||||||
binary.BigEndian.PutUint16(c.cache[:], uint16(len(payload)))
|
|
||||||
|
|
||||||
if _, err := c.Conn.Write(c.cache[:]); err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return c.Conn.Write(payload)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *vlessPacketConn) WriteTo(b []byte, addr net.Addr) (int, error) {
|
|
||||||
total := len(b)
|
|
||||||
if total == 0 {
|
|
||||||
return 0, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if total <= maxLength {
|
|
||||||
return c.writePacket(b)
|
|
||||||
}
|
|
||||||
|
|
||||||
offset := 0
|
|
||||||
|
|
||||||
for offset < total {
|
|
||||||
cursor := offset + maxLength
|
|
||||||
if cursor > total {
|
|
||||||
cursor = total
|
|
||||||
}
|
|
||||||
|
|
||||||
n, err := c.writePacket(b[offset:cursor])
|
|
||||||
if err != nil {
|
|
||||||
return offset + n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
offset = cursor
|
|
||||||
if offset == total {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return total, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *vlessPacketConn) ReadFrom(b []byte) (int, net.Addr, error) {
|
|
||||||
c.mux.Lock()
|
|
||||||
defer c.mux.Unlock()
|
|
||||||
|
|
||||||
if c.remain > 0 {
|
|
||||||
length := len(b)
|
|
||||||
if c.remain < length {
|
|
||||||
length = c.remain
|
|
||||||
}
|
|
||||||
|
|
||||||
n, err := c.Conn.Read(b[:length])
|
|
||||||
if err != nil {
|
|
||||||
return 0, c.rAddr, err
|
|
||||||
}
|
|
||||||
|
|
||||||
c.remain -= n
|
|
||||||
return n, c.rAddr, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := c.Conn.Read(b[:2]); err != nil {
|
|
||||||
return 0, c.rAddr, err
|
|
||||||
}
|
|
||||||
|
|
||||||
total := int(binary.BigEndian.Uint16(b[:2]))
|
|
||||||
if total == 0 {
|
|
||||||
return 0, c.rAddr, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
length := len(b)
|
|
||||||
if length > total {
|
|
||||||
length = total
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := io.ReadFull(c.Conn, b[:length]); err != nil {
|
|
||||||
return 0, c.rAddr, errors.New("read packet error")
|
|
||||||
}
|
|
||||||
|
|
||||||
c.remain = total - length
|
|
||||||
|
|
||||||
return length, c.rAddr, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewVless(option VlessOption) (*Vless, error) {
|
func NewVless(option VlessOption) (*Vless, error) {
|
||||||
var addons *vless.Addons
|
var addons *vless.Addons
|
||||||
if option.Network != "ws" && len(option.Flow) >= 16 {
|
if option.Network != "ws" && len(option.Flow) >= 16 {
|
||||||
|
@@ -31,7 +31,7 @@ require (
|
|||||||
github.com/metacubex/sing-shadowsocks2 v0.2.5
|
github.com/metacubex/sing-shadowsocks2 v0.2.5
|
||||||
github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2
|
github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2
|
||||||
github.com/metacubex/sing-tun v0.4.7-0.20250721020617-8e7c37ed3d97
|
github.com/metacubex/sing-tun v0.4.7-0.20250721020617-8e7c37ed3d97
|
||||||
github.com/metacubex/sing-vmess v0.2.3
|
github.com/metacubex/sing-vmess v0.2.4-0.20250731011226-ea28d589924d
|
||||||
github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f
|
github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f
|
||||||
github.com/metacubex/smux v0.0.0-20250503055512-501391591dee
|
github.com/metacubex/smux v0.0.0-20250503055512-501391591dee
|
||||||
github.com/metacubex/tfo-go v0.0.0-20250516165257-e29c16ae41d4
|
github.com/metacubex/tfo-go v0.0.0-20250516165257-e29c16ae41d4
|
||||||
|
@@ -131,8 +131,8 @@ github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2 h1:gXU+MY
|
|||||||
github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2/go.mod h1:mbfboaXauKJNIHJYxQRa+NJs4JU9NZfkA+I33dS2+9E=
|
github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2/go.mod h1:mbfboaXauKJNIHJYxQRa+NJs4JU9NZfkA+I33dS2+9E=
|
||||||
github.com/metacubex/sing-tun v0.4.7-0.20250721020617-8e7c37ed3d97 h1:YYpc60UZE2G0pUeHbRw9erDrUDZrPQy8QzWFqA3kHsk=
|
github.com/metacubex/sing-tun v0.4.7-0.20250721020617-8e7c37ed3d97 h1:YYpc60UZE2G0pUeHbRw9erDrUDZrPQy8QzWFqA3kHsk=
|
||||||
github.com/metacubex/sing-tun v0.4.7-0.20250721020617-8e7c37ed3d97/go.mod h1:2YywXPWW8Z97kTH7RffOeykKzU+l0aiKlglWV1PAS64=
|
github.com/metacubex/sing-tun v0.4.7-0.20250721020617-8e7c37ed3d97/go.mod h1:2YywXPWW8Z97kTH7RffOeykKzU+l0aiKlglWV1PAS64=
|
||||||
github.com/metacubex/sing-vmess v0.2.3 h1:QKLdIk5A2FcR3Y7m2/JO1XhfzgDA8tF4W9/ffsH9opo=
|
github.com/metacubex/sing-vmess v0.2.4-0.20250731011226-ea28d589924d h1:koSVAQiYqU/qtJ527e+wbsEPvTaM39HW75LSvh04IT0=
|
||||||
github.com/metacubex/sing-vmess v0.2.3/go.mod h1:21R5R1u90uUvBQF0owoooEu96/SAYYD56nDrwm6nFaM=
|
github.com/metacubex/sing-vmess v0.2.4-0.20250731011226-ea28d589924d/go.mod h1:21R5R1u90uUvBQF0owoooEu96/SAYYD56nDrwm6nFaM=
|
||||||
github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f h1:Sr/DYKYofKHKc4GF3qkRGNuj6XA6c0eqPgEDN+VAsYU=
|
github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f h1:Sr/DYKYofKHKc4GF3qkRGNuj6XA6c0eqPgEDN+VAsYU=
|
||||||
github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f/go.mod h1:jpAkVLPnCpGSfNyVmj6Cq4YbuZsFepm/Dc+9BAOcR80=
|
github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f/go.mod h1:jpAkVLPnCpGSfNyVmj6Cq4YbuZsFepm/Dc+9BAOcR80=
|
||||||
github.com/metacubex/smux v0.0.0-20250503055512-501391591dee h1:lp6hJ+4wCLZu113awp7P6odM2okB5s60HUyF0FMqKmo=
|
github.com/metacubex/smux v0.0.0-20250503055512-501391591dee h1:lp6hJ+4wCLZu113awp7P6odM2okB5s60HUyF0FMqKmo=
|
||||||
|
@@ -16,6 +16,7 @@ import (
|
|||||||
|
|
||||||
mux "github.com/metacubex/sing-mux"
|
mux "github.com/metacubex/sing-mux"
|
||||||
vmess "github.com/metacubex/sing-vmess"
|
vmess "github.com/metacubex/sing-vmess"
|
||||||
|
"github.com/metacubex/sing-vmess/packetaddr"
|
||||||
"github.com/metacubex/sing/common"
|
"github.com/metacubex/sing/common"
|
||||||
"github.com/metacubex/sing/common/buf"
|
"github.com/metacubex/sing/common/buf"
|
||||||
"github.com/metacubex/sing/common/bufio"
|
"github.com/metacubex/sing/common/bufio"
|
||||||
@@ -145,6 +146,10 @@ func (h *ListenerHandler) NewConnection(ctx context.Context, conn net.Conn, meta
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (h *ListenerHandler) NewPacketConnection(ctx context.Context, conn network.PacketConn, metadata M.Metadata) error {
|
func (h *ListenerHandler) NewPacketConnection(ctx context.Context, conn network.PacketConn, metadata M.Metadata) error {
|
||||||
|
if metadata.Destination.Fqdn == packetaddr.SeqPacketMagicAddress {
|
||||||
|
conn = packetaddr.NewConn(bufio.NewNetPacketConn(conn), M.Socksaddr{})
|
||||||
|
}
|
||||||
|
|
||||||
defer func() { _ = conn.Close() }()
|
defer func() { _ = conn.Close() }()
|
||||||
mutex := sync.Mutex{}
|
mutex := sync.Mutex{}
|
||||||
writer := bufio.NewNetPacketWriter(conn) // a new interface to set nil in defer
|
writer := bufio.NewNetPacketWriter(conn) // a new interface to set nil in defer
|
||||||
|
57
clash-meta/transport/vless/packet.go
Normal file
57
clash-meta/transport/vless/packet.go
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
package vless
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/binary"
|
||||||
|
"io"
|
||||||
|
"net"
|
||||||
|
|
||||||
|
"github.com/metacubex/mihomo/common/pool"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PacketConn struct {
|
||||||
|
net.Conn
|
||||||
|
rAddr net.Addr
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PacketConn) WriteTo(b []byte, addr net.Addr) (int, error) {
|
||||||
|
err := binary.Write(c.Conn, binary.BigEndian, uint16(len(b)))
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Conn.Write(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PacketConn) ReadFrom(b []byte) (int, net.Addr, error) {
|
||||||
|
var length uint16
|
||||||
|
err := binary.Read(c.Conn, binary.BigEndian, &length)
|
||||||
|
if err != nil {
|
||||||
|
return 0, nil, err
|
||||||
|
}
|
||||||
|
if len(b) < int(length) {
|
||||||
|
return 0, nil, io.ErrShortBuffer
|
||||||
|
}
|
||||||
|
n, err := io.ReadFull(c.Conn, b[:length])
|
||||||
|
return n, c.rAddr, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PacketConn) WaitReadFrom() (data []byte, put func(), addr net.Addr, err error) {
|
||||||
|
var length uint16
|
||||||
|
err = binary.Read(c.Conn, binary.BigEndian, &length)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
readBuf := pool.Get(int(length))
|
||||||
|
put = func() {
|
||||||
|
_ = pool.Put(readBuf)
|
||||||
|
}
|
||||||
|
n, err := io.ReadFull(c.Conn, readBuf)
|
||||||
|
if err != nil {
|
||||||
|
put()
|
||||||
|
put = nil
|
||||||
|
return
|
||||||
|
}
|
||||||
|
data = readBuf[:n]
|
||||||
|
addr = c.rAddr
|
||||||
|
return
|
||||||
|
}
|
@@ -51,6 +51,10 @@ func (c *Client) StreamConn(conn net.Conn, dst *DstAddr) (net.Conn, error) {
|
|||||||
return newConn(conn, c, dst)
|
return newConn(conn, c, dst)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) PacketConn(conn net.Conn, rAddr net.Addr) net.PacketConn {
|
||||||
|
return &PacketConn{conn, rAddr}
|
||||||
|
}
|
||||||
|
|
||||||
// NewClient return Client instance
|
// NewClient return Client instance
|
||||||
func NewClient(uuidStr string, addons *Addons) (*Client, error) {
|
func NewClient(uuidStr string, addons *Addons) (*Client, error) {
|
||||||
uid, err := utils.UUIDMap(uuidStr)
|
uid, err := utils.UUIDMap(uuidStr)
|
||||||
|
20
clash-nyanpasu/backend/Cargo.lock
generated
20
clash-nyanpasu/backend/Cargo.lock
generated
@@ -352,7 +352,7 @@ dependencies = [
|
|||||||
"objc2-foundation 0.3.1",
|
"objc2-foundation 0.3.1",
|
||||||
"parking_lot",
|
"parking_lot",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.52.0",
|
||||||
"wl-clipboard-rs",
|
"wl-clipboard-rs",
|
||||||
"x11rb",
|
"x11rb",
|
||||||
]
|
]
|
||||||
@@ -777,9 +777,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "backon"
|
name = "backon"
|
||||||
version = "1.5.1"
|
version = "1.5.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "302eaff5357a264a2c42f127ecb8bac761cf99749fc3dc95677e2743991f99e7"
|
checksum = "592277618714fbcecda9a02ba7a8781f319d26532a88553bbacc77ba5d2b3a8d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fastrand 2.3.0",
|
"fastrand 2.3.0",
|
||||||
"gloo-timers",
|
"gloo-timers",
|
||||||
@@ -1453,9 +1453,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "4.5.41"
|
version = "4.5.42"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9"
|
checksum = "ed87a9d530bb41a67537289bafcac159cb3ee28460e0a4571123d2a778a6a882"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap_builder",
|
"clap_builder",
|
||||||
"clap_derive",
|
"clap_derive",
|
||||||
@@ -1463,9 +1463,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_builder"
|
name = "clap_builder"
|
||||||
version = "4.5.41"
|
version = "4.5.42"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d"
|
checksum = "64f4f3f3c77c94aff3c7e9aac9a2ca1974a5adf392a8bb751e827d6d127ab966"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"anstyle",
|
"anstyle",
|
||||||
@@ -7289,7 +7289,7 @@ dependencies = [
|
|||||||
"once_cell",
|
"once_cell",
|
||||||
"socket2 0.5.10",
|
"socket2 0.5.10",
|
||||||
"tracing",
|
"tracing",
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -7854,7 +7854,7 @@ dependencies = [
|
|||||||
"errno",
|
"errno",
|
||||||
"libc",
|
"libc",
|
||||||
"linux-raw-sys 0.4.15",
|
"linux-raw-sys 0.4.15",
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -9510,7 +9510,7 @@ dependencies = [
|
|||||||
"getrandom 0.3.3",
|
"getrandom 0.3.3",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"rustix 1.0.8",
|
"rustix 1.0.8",
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
"@mui/icons-material": "7.2.0",
|
"@mui/icons-material": "7.2.0",
|
||||||
"@mui/lab": "7.0.0-beta.14",
|
"@mui/lab": "7.0.0-beta.14",
|
||||||
"@mui/material": "7.2.0",
|
"@mui/material": "7.2.0",
|
||||||
"@mui/x-date-pickers": "8.9.0",
|
"@mui/x-date-pickers": "8.9.2",
|
||||||
"@nyanpasu/interface": "workspace:^",
|
"@nyanpasu/interface": "workspace:^",
|
||||||
"@nyanpasu/ui": "workspace:^",
|
"@nyanpasu/ui": "workspace:^",
|
||||||
"@tailwindcss/postcss": "4.1.11",
|
"@tailwindcss/postcss": "4.1.11",
|
||||||
@@ -59,9 +59,9 @@
|
|||||||
"@iconify/json": "2.2.364",
|
"@iconify/json": "2.2.364",
|
||||||
"@monaco-editor/react": "4.7.0",
|
"@monaco-editor/react": "4.7.0",
|
||||||
"@tanstack/react-query": "5.83.0",
|
"@tanstack/react-query": "5.83.0",
|
||||||
"@tanstack/react-router": "1.130.8",
|
"@tanstack/react-router": "1.130.9",
|
||||||
"@tanstack/react-router-devtools": "1.130.8",
|
"@tanstack/react-router-devtools": "1.130.9",
|
||||||
"@tanstack/router-plugin": "1.130.8",
|
"@tanstack/router-plugin": "1.130.9",
|
||||||
"@tauri-apps/plugin-clipboard-manager": "2.3.0",
|
"@tauri-apps/plugin-clipboard-manager": "2.3.0",
|
||||||
"@tauri-apps/plugin-dialog": "2.3.0",
|
"@tauri-apps/plugin-dialog": "2.3.0",
|
||||||
"@tauri-apps/plugin-fs": "2.4.0",
|
"@tauri-apps/plugin-fs": "2.4.0",
|
||||||
@@ -86,13 +86,13 @@
|
|||||||
"sass-embedded": "1.89.2",
|
"sass-embedded": "1.89.2",
|
||||||
"shiki": "2.5.0",
|
"shiki": "2.5.0",
|
||||||
"unplugin-auto-import": "19.3.0",
|
"unplugin-auto-import": "19.3.0",
|
||||||
"unplugin-icons": "22.1.0",
|
"unplugin-icons": "22.2.0",
|
||||||
"validator": "13.15.15",
|
"validator": "13.15.15",
|
||||||
"vite": "7.0.6",
|
"vite": "7.0.6",
|
||||||
"vite-plugin-html": "3.2.2",
|
"vite-plugin-html": "3.2.2",
|
||||||
"vite-plugin-sass-dts": "1.3.31",
|
"vite-plugin-sass-dts": "1.3.31",
|
||||||
"vite-plugin-svgr": "4.3.0",
|
"vite-plugin-svgr": "4.3.0",
|
||||||
"vite-tsconfig-paths": "5.1.4",
|
"vite-tsconfig-paths": "5.1.4",
|
||||||
"zod": "4.0.13"
|
"zod": "4.0.14"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,10 +2,10 @@
|
|||||||
"manifest_version": 1,
|
"manifest_version": 1,
|
||||||
"latest": {
|
"latest": {
|
||||||
"mihomo": "v1.19.12",
|
"mihomo": "v1.19.12",
|
||||||
"mihomo_alpha": "alpha-0f1baeb",
|
"mihomo_alpha": "alpha-f04af73",
|
||||||
"clash_rs": "v0.8.1",
|
"clash_rs": "v0.8.1",
|
||||||
"clash_premium": "2023-09-05-gdcc8d87",
|
"clash_premium": "2023-09-05-gdcc8d87",
|
||||||
"clash_rs_alpha": "0.8.1-alpha+sha.b628d65"
|
"clash_rs_alpha": "0.8.1-alpha+sha.3164865"
|
||||||
},
|
},
|
||||||
"arch_template": {
|
"arch_template": {
|
||||||
"mihomo": {
|
"mihomo": {
|
||||||
@@ -69,5 +69,5 @@
|
|||||||
"linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf"
|
"linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"updated_at": "2025-07-29T22:21:38.343Z"
|
"updated_at": "2025-07-30T22:23:15.357Z"
|
||||||
}
|
}
|
||||||
|
201
clash-nyanpasu/pnpm-lock.yaml
generated
201
clash-nyanpasu/pnpm-lock.yaml
generated
@@ -237,8 +237,8 @@ importers:
|
|||||||
specifier: 7.2.0
|
specifier: 7.2.0
|
||||||
version: 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
version: 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||||
'@mui/x-date-pickers':
|
'@mui/x-date-pickers':
|
||||||
specifier: 8.9.0
|
specifier: 8.9.2
|
||||||
version: 8.9.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
version: 8.9.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||||
'@nyanpasu/interface':
|
'@nyanpasu/interface':
|
||||||
specifier: workspace:^
|
specifier: workspace:^
|
||||||
version: link:../interface
|
version: link:../interface
|
||||||
@@ -250,7 +250,7 @@ importers:
|
|||||||
version: 4.1.11
|
version: 4.1.11
|
||||||
'@tanstack/router-zod-adapter':
|
'@tanstack/router-zod-adapter':
|
||||||
specifier: 1.81.5
|
specifier: 1.81.5
|
||||||
version: 1.81.5(@tanstack/react-router@1.130.8(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(zod@4.0.13)
|
version: 1.81.5(@tanstack/react-router@1.130.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(zod@4.0.14)
|
||||||
'@tauri-apps/api':
|
'@tauri-apps/api':
|
||||||
specifier: 2.6.0
|
specifier: 2.6.0
|
||||||
version: 2.6.0
|
version: 2.6.0
|
||||||
@@ -286,7 +286,7 @@ importers:
|
|||||||
version: 0.4.0
|
version: 0.4.0
|
||||||
material-react-table:
|
material-react-table:
|
||||||
specifier: npm:@greenhat616/material-react-table@4.0.0
|
specifier: npm:@greenhat616/material-react-table@4.0.0
|
||||||
version: '@greenhat616/material-react-table@4.0.0(6ff01c831030565eab17de5b24a11831)'
|
version: '@greenhat616/material-react-table@4.0.0(1771d1dc89f6502acd08ab3379b879ff)'
|
||||||
monaco-editor:
|
monaco-editor:
|
||||||
specifier: 0.52.2
|
specifier: 0.52.2
|
||||||
version: 0.52.2
|
version: 0.52.2
|
||||||
@@ -307,7 +307,7 @@ importers:
|
|||||||
version: 1.6.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
version: 1.6.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||||
react-hook-form-mui:
|
react-hook-form-mui:
|
||||||
specifier: 7.6.2
|
specifier: 7.6.2
|
||||||
version: 7.6.2(c1dbd21c08dd04ab08146b7fc3df56ca)
|
version: 7.6.2(5bed6be4950c70f4147e918454a0d179)
|
||||||
react-i18next:
|
react-i18next:
|
||||||
specifier: 15.6.1
|
specifier: 15.6.1
|
||||||
version: 15.6.1(i18next@25.3.2(typescript@5.8.3))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.8.3)
|
version: 15.6.1(i18next@25.3.2(typescript@5.8.3))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.8.3)
|
||||||
@@ -352,14 +352,14 @@ importers:
|
|||||||
specifier: 5.83.0
|
specifier: 5.83.0
|
||||||
version: 5.83.0(react@19.1.1)
|
version: 5.83.0(react@19.1.1)
|
||||||
'@tanstack/react-router':
|
'@tanstack/react-router':
|
||||||
specifier: 1.130.8
|
specifier: 1.130.9
|
||||||
version: 1.130.8(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
version: 1.130.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||||
'@tanstack/react-router-devtools':
|
'@tanstack/react-router-devtools':
|
||||||
specifier: 1.130.8
|
specifier: 1.130.9
|
||||||
version: 1.130.8(@tanstack/react-router@1.130.8(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.130.8)(csstype@3.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.5)(tiny-invariant@1.3.3)
|
version: 1.130.9(@tanstack/react-router@1.130.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.130.9)(csstype@3.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.5)(tiny-invariant@1.3.3)
|
||||||
'@tanstack/router-plugin':
|
'@tanstack/router-plugin':
|
||||||
specifier: 1.130.8
|
specifier: 1.130.9
|
||||||
version: 1.130.8(@tanstack/react-router@1.130.8(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
version: 1.130.9(@tanstack/react-router@1.130.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||||
'@tauri-apps/plugin-clipboard-manager':
|
'@tauri-apps/plugin-clipboard-manager':
|
||||||
specifier: 2.3.0
|
specifier: 2.3.0
|
||||||
version: 2.3.0
|
version: 2.3.0
|
||||||
@@ -433,8 +433,8 @@ importers:
|
|||||||
specifier: 19.3.0
|
specifier: 19.3.0
|
||||||
version: 19.3.0
|
version: 19.3.0
|
||||||
unplugin-icons:
|
unplugin-icons:
|
||||||
specifier: 22.1.0
|
specifier: 22.2.0
|
||||||
version: 22.1.0(@svgr/core@8.1.0(typescript@5.8.3))
|
version: 22.2.0(@svgr/core@8.1.0(typescript@5.8.3))
|
||||||
validator:
|
validator:
|
||||||
specifier: 13.15.15
|
specifier: 13.15.15
|
||||||
version: 13.15.15
|
version: 13.15.15
|
||||||
@@ -454,8 +454,8 @@ importers:
|
|||||||
specifier: 5.1.4
|
specifier: 5.1.4
|
||||||
version: 5.1.4(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
version: 5.1.4(typescript@5.8.3)(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))
|
||||||
zod:
|
zod:
|
||||||
specifier: 4.0.13
|
specifier: 4.0.14
|
||||||
version: 4.0.13
|
version: 4.0.14
|
||||||
|
|
||||||
frontend/ui:
|
frontend/ui:
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -572,8 +572,8 @@ importers:
|
|||||||
specifier: 7.7.2
|
specifier: 7.7.2
|
||||||
version: 7.7.2
|
version: 7.7.2
|
||||||
zod:
|
zod:
|
||||||
specifier: 4.0.13
|
specifier: 4.0.14
|
||||||
version: 4.0.13
|
version: 4.0.14
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@octokit/types':
|
'@octokit/types':
|
||||||
specifier: 14.1.0
|
specifier: 14.1.0
|
||||||
@@ -640,8 +640,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
|
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
|
||||||
engines: {node: '>=6.0.0'}
|
engines: {node: '>=6.0.0'}
|
||||||
|
|
||||||
'@antfu/install-pkg@1.0.0':
|
'@antfu/install-pkg@1.1.0':
|
||||||
resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==}
|
resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
|
||||||
|
|
||||||
'@antfu/utils@8.1.1':
|
'@antfu/utils@8.1.1':
|
||||||
resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
|
resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
|
||||||
@@ -1271,6 +1271,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==}
|
resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
|
|
||||||
|
'@babel/runtime@7.28.2':
|
||||||
|
resolution: {integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==}
|
||||||
|
engines: {node: '>=6.9.0'}
|
||||||
|
|
||||||
'@babel/template@7.27.0':
|
'@babel/template@7.27.0':
|
||||||
resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==}
|
resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
@@ -1983,8 +1987,8 @@ packages:
|
|||||||
'@types/react':
|
'@types/react':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@mui/x-date-pickers@8.9.0':
|
'@mui/x-date-pickers@8.9.2':
|
||||||
resolution: {integrity: sha512-MD2/F63Tdsodygp3Z2VtfvvQhAiEVXvleuK9mqXuD6a1cCPOENICCJC98y2AKbOcsbVd37o6HCvWFOQsfsy7TQ==}
|
resolution: {integrity: sha512-xIXedP21GRL3XpuZlbz6FWqRPR7DakFN5ZQo1gHzL81BFMIuFHCF9S8DQPIW65Qc4Ms/DDXpXrkjas6ESIGHvg==}
|
||||||
engines: {node: '>=14.0.0'}
|
engines: {node: '>=14.0.0'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@emotion/react': ^11.9.0
|
'@emotion/react': ^11.9.0
|
||||||
@@ -2020,8 +2024,8 @@ packages:
|
|||||||
moment-jalaali:
|
moment-jalaali:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@mui/x-internals@8.8.0':
|
'@mui/x-internals@8.9.2':
|
||||||
resolution: {integrity: sha512-qTRK5oINkAjZ7sIHpSnESLNq1xtQUmmfmGscYUSEP0uHoYh6pKkNWH9+7yzggRHuTv+4011VBwN9s+efrk+xZg==}
|
resolution: {integrity: sha512-qQl0sacWirbvQUdJOrUecsBQkI+vxI3/E1K/Wst6n/rb8ajelsGLMFLQ1PBig73xBT2vADmdcf3XerfH7TKPqQ==}
|
||||||
engines: {node: '>=14.0.0'}
|
engines: {node: '>=14.0.0'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@mui/system': ^5.15.14 || ^6.0.0 || ^7.0.0
|
'@mui/system': ^5.15.14 || ^6.0.0 || ^7.0.0
|
||||||
@@ -2993,16 +2997,16 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: ^18 || ^19
|
react: ^18 || ^19
|
||||||
|
|
||||||
'@tanstack/react-router-devtools@1.130.8':
|
'@tanstack/react-router-devtools@1.130.9':
|
||||||
resolution: {integrity: sha512-tJ9A7fBJNaoaWzg8pAxelYDTd+JA7q0XyLvTGBEWv9xnK1Xke8APlCupBIVHqJ/sq7xaSJXTxEs9HxM+njwOhQ==}
|
resolution: {integrity: sha512-5eF5M4F+Mzg+2rxyE3EBF8sTCBkRHswoRXw3V8i7i3+c7C80j9SOYgYar/WHcA3IkBUSgVf6HCd38yxB0Vbvsg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@tanstack/react-router': ^1.130.8
|
'@tanstack/react-router': ^1.130.9
|
||||||
react: '>=18.0.0 || >=19.0.0'
|
react: '>=18.0.0 || >=19.0.0'
|
||||||
react-dom: '>=18.0.0 || >=19.0.0'
|
react-dom: '>=18.0.0 || >=19.0.0'
|
||||||
|
|
||||||
'@tanstack/react-router@1.130.8':
|
'@tanstack/react-router@1.130.9':
|
||||||
resolution: {integrity: sha512-ZLM609RhmvKO1jWwssG3f/b0AAnsESNshVqYF3aNshjbkGnIkdG4+qi3rhORNcQvl3e6cX0u0SQfCndooexgKw==}
|
resolution: {integrity: sha512-TAz21GvF51JoObEFq//Qc/TugwB/T5fUla+Z4DiflR3bggoCt+USdURsyrbt38EcH9j1doJXIcjaAbDnHAmY7Q==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: '>=18.0.0 || >=19.0.0'
|
react: '>=18.0.0 || >=19.0.0'
|
||||||
@@ -3027,15 +3031,15 @@ packages:
|
|||||||
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
|
|
||||||
'@tanstack/router-core@1.130.8':
|
'@tanstack/router-core@1.130.9':
|
||||||
resolution: {integrity: sha512-R/hbOAVeuRpU5/NNX2i8cDXZIjNUFThEkPQKw3JCr+OWYXKFJ2KBaaUkuGx7V83075mezsQZ9TTPDSaurTbj3w==}
|
resolution: {integrity: sha512-+1GUeSETgXXane/4XyU4zbpe0QOSY8y2ZQCPyZCVphDZSpVNQ7HGENd6LUnpm+dNEVXPjFJxoz6sQguQVrbheg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
|
||||||
'@tanstack/router-devtools-core@1.130.8':
|
'@tanstack/router-devtools-core@1.130.9':
|
||||||
resolution: {integrity: sha512-pVHUrB6Io5kAdW6kzbP79gzwLl2Pqyu47KWVgdcQDK6DcbNnjcowhY1ud9ilPfoPA7CLnVau+NMbjIccio5OQA==}
|
resolution: {integrity: sha512-t/bdb/tvWUWsDgN5pOez73K1/Mx30lXfu3P0NRmhrRUJ673khmf2haeQauMAafeTwLeZ3c17mBJwKnW2aCd1kA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@tanstack/router-core': ^1.130.8
|
'@tanstack/router-core': ^1.130.9
|
||||||
csstype: ^3.0.10
|
csstype: ^3.0.10
|
||||||
solid-js: '>=1.9.5'
|
solid-js: '>=1.9.5'
|
||||||
tiny-invariant: ^1.3.3
|
tiny-invariant: ^1.3.3
|
||||||
@@ -3043,16 +3047,16 @@ packages:
|
|||||||
csstype:
|
csstype:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tanstack/router-generator@1.130.8':
|
'@tanstack/router-generator@1.130.9':
|
||||||
resolution: {integrity: sha512-Kb1Ga+VfXMQml8404G2HXlzJ+6es3ClO81k0CevWw9kdeHqpGXe6oEK7Otpz6w2IWjWtDT9gCFa5dKifrunN/g==}
|
resolution: {integrity: sha512-DsQ7kLQmMk0L3K3/QtuMveILQWAarzfv6DpLMN9+fHlIFuw7OQinVrzD9i+9oAKcYzsBgM1iez5IMXYpCta1gA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
|
||||||
'@tanstack/router-plugin@1.130.8':
|
'@tanstack/router-plugin@1.130.9':
|
||||||
resolution: {integrity: sha512-V1kMoKV5yX21Q9QxzpKgJ+o1jIMnFrpfDO1UCMqEpJmOq2hA0MsEOVaeU643Nfp6Gmx1EirMW4NEMFLtXGuCqw==}
|
resolution: {integrity: sha512-/QmDbj+z/UysHeMi9F4sJqh76clSX4QFjIdOgO7u8nXkgjSBfPcyWos+1rw9ovn+DeDmyKlvzt3BEIU1+bvptA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@rsbuild/core': '>=1.0.2'
|
'@rsbuild/core': '>=1.0.2'
|
||||||
'@tanstack/react-router': ^1.130.8
|
'@tanstack/react-router': ^1.130.9
|
||||||
vite: '>=5.0.0 || >=6.0.0'
|
vite: '>=5.0.0 || >=6.0.0'
|
||||||
vite-plugin-solid: ^2.11.2
|
vite-plugin-solid: ^2.11.2
|
||||||
webpack: '>=5.92.0'
|
webpack: '>=5.92.0'
|
||||||
@@ -6172,10 +6176,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==}
|
resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==}
|
||||||
engines: {node: '>=18.0.0'}
|
engines: {node: '>=18.0.0'}
|
||||||
|
|
||||||
local-pkg@1.0.0:
|
|
||||||
resolution: {integrity: sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==}
|
|
||||||
engines: {node: '>=14'}
|
|
||||||
|
|
||||||
local-pkg@1.1.1:
|
local-pkg@1.1.1:
|
||||||
resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
|
resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
|
||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
@@ -6757,8 +6757,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA==}
|
resolution: {integrity: sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
|
|
||||||
package-manager-detector@0.2.9:
|
package-manager-detector@1.3.0:
|
||||||
resolution: {integrity: sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==}
|
resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==}
|
||||||
|
|
||||||
pako@2.1.0:
|
pako@2.1.0:
|
||||||
resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
|
resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
|
||||||
@@ -7982,9 +7982,6 @@ packages:
|
|||||||
tiny-warning@1.0.3:
|
tiny-warning@1.0.3:
|
||||||
resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
|
resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
|
||||||
|
|
||||||
tinyexec@0.3.2:
|
|
||||||
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
|
|
||||||
|
|
||||||
tinyexec@1.0.1:
|
tinyexec@1.0.1:
|
||||||
resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
|
resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
|
||||||
|
|
||||||
@@ -8238,8 +8235,8 @@ packages:
|
|||||||
'@vueuse/core':
|
'@vueuse/core':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
unplugin-icons@22.1.0:
|
unplugin-icons@22.2.0:
|
||||||
resolution: {integrity: sha512-ect2ZNtk1Zgwb0NVHd0C1IDW/MV+Jk/xaq4t8o6rYdVS3+L660ZdD5kTSQZvsgdwCvquRw+/wYn75hsweRjoIA==}
|
resolution: {integrity: sha512-OdrXCiXexC1rFd0QpliAgcd4cMEEEQtoCf2WIrRIGu4iW6auBPpQKMCBeWxoe55phYdRyZLUWNOtzyTX+HOFSA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@svgr/core': '>=7.0.0'
|
'@svgr/core': '>=7.0.0'
|
||||||
'@svgx/core': ^1.0.1
|
'@svgx/core': ^1.0.1
|
||||||
@@ -8265,10 +8262,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==}
|
resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==}
|
||||||
engines: {node: '>=18.12.0'}
|
engines: {node: '>=18.12.0'}
|
||||||
|
|
||||||
unplugin@2.2.0:
|
|
||||||
resolution: {integrity: sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==}
|
|
||||||
engines: {node: '>=18.12.0'}
|
|
||||||
|
|
||||||
unplugin@2.3.5:
|
unplugin@2.3.5:
|
||||||
resolution: {integrity: sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==}
|
resolution: {integrity: sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==}
|
||||||
engines: {node: '>=18.12.0'}
|
engines: {node: '>=18.12.0'}
|
||||||
@@ -8314,6 +8307,11 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
|
|
||||||
|
use-sync-external-store@1.5.0:
|
||||||
|
resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==}
|
||||||
|
peerDependencies:
|
||||||
|
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
|
|
||||||
utf-8-validate@5.0.10:
|
utf-8-validate@5.0.10:
|
||||||
resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
|
resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
|
||||||
engines: {node: '>=6.14.2'}
|
engines: {node: '>=6.14.2'}
|
||||||
@@ -8635,8 +8633,8 @@ packages:
|
|||||||
zod@3.25.76:
|
zod@3.25.76:
|
||||||
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
|
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
|
||||||
|
|
||||||
zod@4.0.13:
|
zod@4.0.14:
|
||||||
resolution: {integrity: sha512-jv+zRxuZQxTrFHzxZ46ezL2FtnE+M4HIJHJEwLsZ7UjrXHltdG6HrxvqM0twoVCWxJiYf8WqKjAcjztegpkB+Q==}
|
resolution: {integrity: sha512-nGFJTnJN6cM2v9kXL+SOBq3AtjQby3Mv5ySGFof5UGRHrRioSJ5iG680cYNjE/yWk671nROcpPj4hAS8nyLhSw==}
|
||||||
|
|
||||||
zwitch@2.0.4:
|
zwitch@2.0.4:
|
||||||
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
|
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
|
||||||
@@ -8668,10 +8666,10 @@ snapshots:
|
|||||||
'@jridgewell/gen-mapping': 0.3.12
|
'@jridgewell/gen-mapping': 0.3.12
|
||||||
'@jridgewell/trace-mapping': 0.3.29
|
'@jridgewell/trace-mapping': 0.3.29
|
||||||
|
|
||||||
'@antfu/install-pkg@1.0.0':
|
'@antfu/install-pkg@1.1.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
package-manager-detector: 0.2.9
|
package-manager-detector: 1.3.0
|
||||||
tinyexec: 0.3.2
|
tinyexec: 1.0.1
|
||||||
|
|
||||||
'@antfu/utils@8.1.1': {}
|
'@antfu/utils@8.1.1': {}
|
||||||
|
|
||||||
@@ -9499,6 +9497,8 @@ snapshots:
|
|||||||
|
|
||||||
'@babel/runtime@7.27.6': {}
|
'@babel/runtime@7.27.6': {}
|
||||||
|
|
||||||
|
'@babel/runtime@7.28.2': {}
|
||||||
|
|
||||||
'@babel/template@7.27.0':
|
'@babel/template@7.27.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/code-frame': 7.27.1
|
'@babel/code-frame': 7.27.1
|
||||||
@@ -9955,13 +9955,13 @@ snapshots:
|
|||||||
|
|
||||||
'@fastify/busboy@2.1.1': {}
|
'@fastify/busboy@2.1.1': {}
|
||||||
|
|
||||||
'@greenhat616/material-react-table@4.0.0(6ff01c831030565eab17de5b24a11831)':
|
'@greenhat616/material-react-table@4.0.0(1771d1dc89f6502acd08ab3379b879ff)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.1)
|
'@emotion/react': 11.14.0(@types/react@19.1.8)(react@19.1.1)
|
||||||
'@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1)
|
'@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1)
|
||||||
'@mui/icons-material': 7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.8)(react@19.1.1)
|
'@mui/icons-material': 7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.8)(react@19.1.1)
|
||||||
'@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
'@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||||
'@mui/x-date-pickers': 8.9.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
'@mui/x-date-pickers': 8.9.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||||
'@tanstack/match-sorter-utils': 8.19.4
|
'@tanstack/match-sorter-utils': 8.19.4
|
||||||
'@tanstack/react-table': 8.21.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
'@tanstack/react-table': 8.21.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||||
'@tanstack/react-virtual': 3.13.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
'@tanstack/react-virtual': 3.13.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||||
@@ -10006,7 +10006,7 @@ snapshots:
|
|||||||
|
|
||||||
'@iconify/utils@2.3.0':
|
'@iconify/utils@2.3.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@antfu/install-pkg': 1.0.0
|
'@antfu/install-pkg': 1.1.0
|
||||||
'@antfu/utils': 8.1.1
|
'@antfu/utils': 8.1.1
|
||||||
'@iconify/types': 2.0.0
|
'@iconify/types': 2.0.0
|
||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
@@ -10260,13 +10260,13 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@types/react': 19.1.8
|
'@types/react': 19.1.8
|
||||||
|
|
||||||
'@mui/x-date-pickers@8.9.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
|
'@mui/x-date-pickers@8.9.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/runtime': 7.27.6
|
'@babel/runtime': 7.28.2
|
||||||
'@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
'@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||||
'@mui/system': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1)
|
'@mui/system': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1)
|
||||||
'@mui/utils': 7.2.0(@types/react@19.1.8)(react@19.1.1)
|
'@mui/utils': 7.2.0(@types/react@19.1.8)(react@19.1.1)
|
||||||
'@mui/x-internals': 8.8.0(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1)
|
'@mui/x-internals': 8.9.2(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1)
|
||||||
'@types/react-transition-group': 4.4.12(@types/react@19.1.8)
|
'@types/react-transition-group': 4.4.12(@types/react@19.1.8)
|
||||||
clsx: 2.1.1
|
clsx: 2.1.1
|
||||||
prop-types: 15.8.1
|
prop-types: 15.8.1
|
||||||
@@ -10280,13 +10280,14 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@types/react'
|
- '@types/react'
|
||||||
|
|
||||||
'@mui/x-internals@8.8.0(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1)':
|
'@mui/x-internals@8.9.2(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/runtime': 7.27.6
|
'@babel/runtime': 7.28.2
|
||||||
'@mui/system': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1)
|
'@mui/system': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1)
|
||||||
'@mui/utils': 7.2.0(@types/react@19.1.8)(react@19.1.1)
|
'@mui/utils': 7.2.0(@types/react@19.1.8)(react@19.1.1)
|
||||||
react: 19.1.1
|
react: 19.1.1
|
||||||
reselect: 5.1.1
|
reselect: 5.1.1
|
||||||
|
use-sync-external-store: 1.5.0(react@19.1.1)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@types/react'
|
- '@types/react'
|
||||||
|
|
||||||
@@ -11140,10 +11141,10 @@ snapshots:
|
|||||||
'@tanstack/query-core': 5.83.0
|
'@tanstack/query-core': 5.83.0
|
||||||
react: 19.1.1
|
react: 19.1.1
|
||||||
|
|
||||||
'@tanstack/react-router-devtools@1.130.8(@tanstack/react-router@1.130.8(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.130.8)(csstype@3.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.5)(tiny-invariant@1.3.3)':
|
'@tanstack/react-router-devtools@1.130.9(@tanstack/react-router@1.130.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.130.9)(csstype@3.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.5)(tiny-invariant@1.3.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tanstack/react-router': 1.130.8(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
'@tanstack/react-router': 1.130.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||||
'@tanstack/router-devtools-core': 1.130.8(@tanstack/router-core@1.130.8)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)
|
'@tanstack/router-devtools-core': 1.130.9(@tanstack/router-core@1.130.9)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)
|
||||||
react: 19.1.1
|
react: 19.1.1
|
||||||
react-dom: 19.1.1(react@19.1.1)
|
react-dom: 19.1.1(react@19.1.1)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -11152,11 +11153,11 @@ snapshots:
|
|||||||
- solid-js
|
- solid-js
|
||||||
- tiny-invariant
|
- tiny-invariant
|
||||||
|
|
||||||
'@tanstack/react-router@1.130.8(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
|
'@tanstack/react-router@1.130.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tanstack/history': 1.129.7
|
'@tanstack/history': 1.129.7
|
||||||
'@tanstack/react-store': 0.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
'@tanstack/react-store': 0.7.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||||
'@tanstack/router-core': 1.130.8
|
'@tanstack/router-core': 1.130.9
|
||||||
isbot: 5.1.28
|
isbot: 5.1.28
|
||||||
react: 19.1.1
|
react: 19.1.1
|
||||||
react-dom: 19.1.1(react@19.1.1)
|
react-dom: 19.1.1(react@19.1.1)
|
||||||
@@ -11182,7 +11183,7 @@ snapshots:
|
|||||||
react: 19.1.1
|
react: 19.1.1
|
||||||
react-dom: 19.1.1(react@19.1.1)
|
react-dom: 19.1.1(react@19.1.1)
|
||||||
|
|
||||||
'@tanstack/router-core@1.130.8':
|
'@tanstack/router-core@1.130.9':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tanstack/history': 1.129.7
|
'@tanstack/history': 1.129.7
|
||||||
'@tanstack/store': 0.7.0
|
'@tanstack/store': 0.7.0
|
||||||
@@ -11192,9 +11193,9 @@ snapshots:
|
|||||||
tiny-invariant: 1.3.3
|
tiny-invariant: 1.3.3
|
||||||
tiny-warning: 1.0.3
|
tiny-warning: 1.0.3
|
||||||
|
|
||||||
'@tanstack/router-devtools-core@1.130.8(@tanstack/router-core@1.130.8)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)':
|
'@tanstack/router-devtools-core@1.130.9(@tanstack/router-core@1.130.9)(csstype@3.1.3)(solid-js@1.9.5)(tiny-invariant@1.3.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tanstack/router-core': 1.130.8
|
'@tanstack/router-core': 1.130.9
|
||||||
clsx: 2.1.1
|
clsx: 2.1.1
|
||||||
goober: 2.1.16(csstype@3.1.3)
|
goober: 2.1.16(csstype@3.1.3)
|
||||||
solid-js: 1.9.5
|
solid-js: 1.9.5
|
||||||
@@ -11202,9 +11203,9 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
csstype: 3.1.3
|
csstype: 3.1.3
|
||||||
|
|
||||||
'@tanstack/router-generator@1.130.8':
|
'@tanstack/router-generator@1.130.9':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tanstack/router-core': 1.130.8
|
'@tanstack/router-core': 1.130.9
|
||||||
'@tanstack/router-utils': 1.129.7
|
'@tanstack/router-utils': 1.129.7
|
||||||
'@tanstack/virtual-file-routes': 1.129.7
|
'@tanstack/virtual-file-routes': 1.129.7
|
||||||
prettier: 3.6.2
|
prettier: 3.6.2
|
||||||
@@ -11215,7 +11216,7 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@tanstack/router-plugin@1.130.8(@tanstack/react-router@1.130.8(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))':
|
'@tanstack/router-plugin@1.130.9(@tanstack/react-router@1.130.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(vite@7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.0
|
'@babel/core': 7.28.0
|
||||||
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0)
|
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0)
|
||||||
@@ -11223,8 +11224,8 @@ snapshots:
|
|||||||
'@babel/template': 7.27.2
|
'@babel/template': 7.27.2
|
||||||
'@babel/traverse': 7.28.0
|
'@babel/traverse': 7.28.0
|
||||||
'@babel/types': 7.28.1
|
'@babel/types': 7.28.1
|
||||||
'@tanstack/router-core': 1.130.8
|
'@tanstack/router-core': 1.130.9
|
||||||
'@tanstack/router-generator': 1.130.8
|
'@tanstack/router-generator': 1.130.9
|
||||||
'@tanstack/router-utils': 1.129.7
|
'@tanstack/router-utils': 1.129.7
|
||||||
'@tanstack/virtual-file-routes': 1.129.7
|
'@tanstack/virtual-file-routes': 1.129.7
|
||||||
babel-dead-code-elimination: 1.0.10
|
babel-dead-code-elimination: 1.0.10
|
||||||
@@ -11232,7 +11233,7 @@ snapshots:
|
|||||||
unplugin: 2.3.5
|
unplugin: 2.3.5
|
||||||
zod: 3.25.76
|
zod: 3.25.76
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@tanstack/react-router': 1.130.8(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
'@tanstack/react-router': 1.130.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||||
vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
vite: 7.0.6(@types/node@22.16.5)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.89.2)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.3)(yaml@2.8.0)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@@ -11248,10 +11249,10 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.130.8(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(zod@4.0.13)':
|
'@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.130.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(zod@4.0.14)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tanstack/react-router': 1.130.8(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
'@tanstack/react-router': 1.130.9(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||||
zod: 4.0.13
|
zod: 4.0.14
|
||||||
|
|
||||||
'@tanstack/store@0.7.0': {}
|
'@tanstack/store@0.7.0': {}
|
||||||
|
|
||||||
@@ -14766,11 +14767,6 @@ snapshots:
|
|||||||
rfdc: 1.4.1
|
rfdc: 1.4.1
|
||||||
wrap-ansi: 9.0.0
|
wrap-ansi: 9.0.0
|
||||||
|
|
||||||
local-pkg@1.0.0:
|
|
||||||
dependencies:
|
|
||||||
mlly: 1.7.4
|
|
||||||
pkg-types: 1.3.1
|
|
||||||
|
|
||||||
local-pkg@1.1.1:
|
local-pkg@1.1.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
mlly: 1.7.4
|
mlly: 1.7.4
|
||||||
@@ -15528,7 +15524,7 @@ snapshots:
|
|||||||
registry-url: 3.1.0
|
registry-url: 3.1.0
|
||||||
semver: 5.7.2
|
semver: 5.7.2
|
||||||
|
|
||||||
package-manager-detector@0.2.9: {}
|
package-manager-detector@1.3.0: {}
|
||||||
|
|
||||||
pako@2.1.0: {}
|
pako@2.1.0: {}
|
||||||
|
|
||||||
@@ -15807,14 +15803,14 @@ snapshots:
|
|||||||
react: 19.1.1
|
react: 19.1.1
|
||||||
react-dom: 19.1.1(react@19.1.1)
|
react-dom: 19.1.1(react@19.1.1)
|
||||||
|
|
||||||
react-hook-form-mui@7.6.2(c1dbd21c08dd04ab08146b7fc3df56ca):
|
react-hook-form-mui@7.6.2(5bed6be4950c70f4147e918454a0d179):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
'@mui/material': 7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||||
react: 19.1.1
|
react: 19.1.1
|
||||||
react-hook-form: 7.52.1(react@19.1.1)
|
react-hook-form: 7.52.1(react@19.1.1)
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@mui/icons-material': 7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.8)(react@19.1.1)
|
'@mui/icons-material': 7.2.0(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.8)(react@19.1.1)
|
||||||
'@mui/x-date-pickers': 8.9.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
'@mui/x-date-pickers': 8.9.2(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@mui/material@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@mui/system@7.2.0(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(react@19.1.1))(@types/react@19.1.8)(dayjs@1.11.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
|
||||||
|
|
||||||
react-hook-form@7.52.1(react@19.1.1):
|
react-hook-form@7.52.1(react@19.1.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -16794,8 +16790,6 @@ snapshots:
|
|||||||
|
|
||||||
tiny-warning@1.0.3: {}
|
tiny-warning@1.0.3: {}
|
||||||
|
|
||||||
tinyexec@0.3.2: {}
|
|
||||||
|
|
||||||
tinyexec@1.0.1: {}
|
tinyexec@1.0.1: {}
|
||||||
|
|
||||||
tinyglobby@0.2.13:
|
tinyglobby@0.2.13:
|
||||||
@@ -17100,13 +17094,13 @@ snapshots:
|
|||||||
unplugin: 2.3.5
|
unplugin: 2.3.5
|
||||||
unplugin-utils: 0.2.4
|
unplugin-utils: 0.2.4
|
||||||
|
|
||||||
unplugin-icons@22.1.0(@svgr/core@8.1.0(typescript@5.8.3)):
|
unplugin-icons@22.2.0(@svgr/core@8.1.0(typescript@5.8.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@antfu/install-pkg': 1.0.0
|
'@antfu/install-pkg': 1.1.0
|
||||||
'@iconify/utils': 2.3.0
|
'@iconify/utils': 2.3.0
|
||||||
debug: 4.4.0
|
debug: 4.4.1
|
||||||
local-pkg: 1.0.0
|
local-pkg: 1.1.1
|
||||||
unplugin: 2.2.0
|
unplugin: 2.3.5
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@svgr/core': 8.1.0(typescript@5.8.3)
|
'@svgr/core': 8.1.0(typescript@5.8.3)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -17117,11 +17111,6 @@ snapshots:
|
|||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
picomatch: 4.0.2
|
picomatch: 4.0.2
|
||||||
|
|
||||||
unplugin@2.2.0:
|
|
||||||
dependencies:
|
|
||||||
acorn: 8.14.0
|
|
||||||
webpack-virtual-modules: 0.6.2
|
|
||||||
|
|
||||||
unplugin@2.3.5:
|
unplugin@2.3.5:
|
||||||
dependencies:
|
dependencies:
|
||||||
acorn: 8.15.0
|
acorn: 8.15.0
|
||||||
@@ -17197,6 +17186,10 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
react: 19.1.1
|
react: 19.1.1
|
||||||
|
|
||||||
|
use-sync-external-store@1.5.0(react@19.1.1):
|
||||||
|
dependencies:
|
||||||
|
react: 19.1.1
|
||||||
|
|
||||||
utf-8-validate@5.0.10:
|
utf-8-validate@5.0.10:
|
||||||
dependencies:
|
dependencies:
|
||||||
node-gyp-build: 4.8.1
|
node-gyp-build: 4.8.1
|
||||||
@@ -17542,6 +17535,6 @@ snapshots:
|
|||||||
|
|
||||||
zod@3.25.76: {}
|
zod@3.25.76: {}
|
||||||
|
|
||||||
zod@4.0.13: {}
|
zod@4.0.14: {}
|
||||||
|
|
||||||
zwitch@2.0.4: {}
|
zwitch@2.0.4: {}
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
"filesize": "11.0.2",
|
"filesize": "11.0.2",
|
||||||
"p-retry": "6.2.1",
|
"p-retry": "6.2.1",
|
||||||
"semver": "7.7.2",
|
"semver": "7.7.2",
|
||||||
"zod": "4.0.13"
|
"zod": "4.0.14"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@octokit/types": "14.1.0",
|
"@octokit/types": "14.1.0",
|
||||||
|
@@ -2,6 +2,19 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||||
|
|
||||||
|
### [2.42.1](https://github.com/filebrowser/filebrowser/compare/v2.42.0...v2.42.1) (2025-07-31)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* Translate frontend/src/i18n/en.json in sk ([14ee054](https://github.com/filebrowser/filebrowser/commit/14ee0543599f2ec73b7f5d2dbd8415f47fe592aa))
|
||||||
|
* Translate frontend/src/i18n/en.json in vi ([75baf7c](https://github.com/filebrowser/filebrowser/commit/75baf7ce337671a1045f897ba4a19967a31b1aec))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* directory mode on config init ([4ff6347](https://github.com/filebrowser/filebrowser/commit/4ff634715543b65878943273dff70f340167900b))
|
||||||
|
|
||||||
## [2.42.0](https://github.com/filebrowser/filebrowser/compare/v2.41.0...v2.42.0) (2025-07-27)
|
## [2.42.0](https://github.com/filebrowser/filebrowser/compare/v2.41.0...v2.42.0) (2025-07-27)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -103,7 +103,7 @@ override the options.`,
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
s.DirMode, err = getMode(flags, "file-mode")
|
s.DirMode, err = getMode(flags, "dir-mode")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@@ -170,7 +170,7 @@
|
|||||||
"commandRunnerHelp": "Tại đây, bạn có thể thiết lập các lệnh được thực thi trong các sự kiện đã định. Bạn phải viết một lệnh trên mỗi dòng. Các biến môi trường {0} và {1} sẽ có sẵn, trong đó {0} tương đối với {1}. Để biết thêm thông tin về tính năng này và các biến môi trường có sẵn, vui lòng đọc {2}.",
|
"commandRunnerHelp": "Tại đây, bạn có thể thiết lập các lệnh được thực thi trong các sự kiện đã định. Bạn phải viết một lệnh trên mỗi dòng. Các biến môi trường {0} và {1} sẽ có sẵn, trong đó {0} tương đối với {1}. Để biết thêm thông tin về tính năng này và các biến môi trường có sẵn, vui lòng đọc {2}.",
|
||||||
"commandsUpdated": "Lệnh đã được cập nhật!",
|
"commandsUpdated": "Lệnh đã được cập nhật!",
|
||||||
"createUserDir": "Tự động tạo thư mục chính của người dùng khi thêm người dùng mới",
|
"createUserDir": "Tự động tạo thư mục chính của người dùng khi thêm người dùng mới",
|
||||||
"minimumPasswordLength": "Minimum password length",
|
"minimumPasswordLength": "Độ dài mật khẩu tối thiểu",
|
||||||
"tusUploads": "Tải lên theo phân đoạn",
|
"tusUploads": "Tải lên theo phân đoạn",
|
||||||
"tusUploadsHelp": "File Browser hỗ trợ tải lên tệp theo phân đoạn, giúp việc tải lên trở nên hiệu quả, đáng tin cậy, có thể tiếp tục và phù hợp với mạng không ổn định.",
|
"tusUploadsHelp": "File Browser hỗ trợ tải lên tệp theo phân đoạn, giúp việc tải lên trở nên hiệu quả, đáng tin cậy, có thể tiếp tục và phù hợp với mạng không ổn định.",
|
||||||
"tusUploadsChunkSize": "Kích thước tối đa của một yêu cầu (tải lên trực tiếp sẽ được sử dụng cho các tệp nhỏ hơn). Bạn có thể nhập một số nguyên biểu thị kích thước theo byte hoặc một chuỗi như 10MB, 1GB, v.v.",
|
"tusUploadsChunkSize": "Kích thước tối đa của một yêu cầu (tải lên trực tiếp sẽ được sử dụng cho các tệp nhỏ hơn). Bạn có thể nhập một số nguyên biểu thị kích thước theo byte hoặc một chuỗi như 10MB, 1GB, v.v.",
|
||||||
|
@@ -45,6 +45,7 @@ rockchip_setup_interfaces()
|
|||||||
radxa,e20c|\
|
radxa,e20c|\
|
||||||
radxa,e25|\
|
radxa,e25|\
|
||||||
seewo,sv21|\
|
seewo,sv21|\
|
||||||
|
radxa,rock-3b|\
|
||||||
rumu3f,fine-3399|\
|
rumu3f,fine-3399|\
|
||||||
xunlong,orangepi-5-plus|\
|
xunlong,orangepi-5-plus|\
|
||||||
widora,mangopi-m28k|\
|
widora,mangopi-m28k|\
|
||||||
|
@@ -47,27 +47,11 @@
|
|||||||
gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>;
|
gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>;
|
||||||
function = LED_FUNCTION_HEARTBEAT;
|
function = LED_FUNCTION_HEARTBEAT;
|
||||||
color = <LED_COLOR_ID_BLUE>;
|
color = <LED_COLOR_ID_BLUE>;
|
||||||
linux,default-trigger = "heartbeat";
|
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&user_led2>;
|
pinctrl-0 = <&user_led2>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
rk809-sound {
|
|
||||||
compatible = "simple-audio-card";
|
|
||||||
simple-audio-card,format = "i2s";
|
|
||||||
simple-audio-card,name = "Analog RK809";
|
|
||||||
simple-audio-card,mclk-fs = <256>;
|
|
||||||
|
|
||||||
simple-audio-card,cpu {
|
|
||||||
sound-dai = <&i2s1_8ch>;
|
|
||||||
};
|
|
||||||
|
|
||||||
simple-audio-card,codec {
|
|
||||||
sound-dai = <&rk809>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
sdio_pwrseq: sdio-pwrseq {
|
sdio_pwrseq: sdio-pwrseq {
|
||||||
compatible = "mmc-pwrseq-simple";
|
compatible = "mmc-pwrseq-simple";
|
||||||
clocks = <&rk809 1>;
|
clocks = <&rk809 1>;
|
||||||
@@ -215,11 +199,6 @@
|
|||||||
&gmac1m1_rgmii_clk
|
&gmac1m1_rgmii_clk
|
||||||
&gmac1m1_rgmii_bus
|
&gmac1m1_rgmii_bus
|
||||||
&gmac1m1_clkinout>;
|
&gmac1m1_clkinout>;
|
||||||
snps,reset-active-low;
|
|
||||||
snps,reset-delays-us = <0 20000 100000>;
|
|
||||||
snps,reset-gpio = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>;
|
|
||||||
tx_delay = <0x47>;
|
|
||||||
rx_delay = <0x27>;
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -275,15 +254,10 @@
|
|||||||
reg = <0x20>;
|
reg = <0x20>;
|
||||||
interrupt-parent = <&gpio0>;
|
interrupt-parent = <&gpio0>;
|
||||||
interrupts = <RK_PA3 IRQ_TYPE_LEVEL_LOW>;
|
interrupts = <RK_PA3 IRQ_TYPE_LEVEL_LOW>;
|
||||||
assigned-clocks = <&cru I2S1_MCLKOUT_TX>;
|
|
||||||
assigned-clock-parents = <&cru CLK_I2S1_8CH_TX>;
|
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
clock-names = "mclk";
|
|
||||||
clocks = <&cru I2S1_MCLKOUT_TX>;
|
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&pmic_int_l>, <&i2s1m0_mclk>;
|
pinctrl-0 = <&pmic_int_l>, <&i2s1m0_mclk>;
|
||||||
rockchip,system-power-controller;
|
rockchip,system-power-controller;
|
||||||
#sound-dai-cells = <0>;
|
|
||||||
vcc1-supply = <&vcc3v3_sys>;
|
vcc1-supply = <&vcc3v3_sys>;
|
||||||
vcc2-supply = <&vcc3v3_sys>;
|
vcc2-supply = <&vcc3v3_sys>;
|
||||||
vcc3-supply = <&vcc3v3_sys>;
|
vcc3-supply = <&vcc3v3_sys>;
|
||||||
@@ -510,6 +484,9 @@
|
|||||||
rgmii_phy1: ethernet-phy@1 {
|
rgmii_phy1: ethernet-phy@1 {
|
||||||
compatible = "ethernet-phy-ieee802.3-c22";
|
compatible = "ethernet-phy-ieee802.3-c22";
|
||||||
reg = <0x1>;
|
reg = <0x1>;
|
||||||
|
reset-assert-us = <20000>;
|
||||||
|
reset-deassert-us = <100000>;
|
||||||
|
reset-gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -605,7 +582,6 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&pwm15 {
|
&pwm15 {
|
||||||
pinctrl-names = "active";
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -629,7 +605,6 @@
|
|||||||
&sdmmc0 {
|
&sdmmc0 {
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>;
|
|
||||||
disable-wp;
|
disable-wp;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd &sdmmc0_det>;
|
pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd &sdmmc0_det>;
|
||||||
@@ -640,8 +615,6 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&sdmmc1 {
|
&sdmmc1 {
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
bus-width = <4>;
|
bus-width = <4>;
|
||||||
cap-sd-highspeed;
|
cap-sd-highspeed;
|
||||||
cap-sdio-irq;
|
cap-sdio-irq;
|
||||||
@@ -654,15 +627,6 @@
|
|||||||
vmmc-supply = <&vcc3v3_sys>;
|
vmmc-supply = <&vcc3v3_sys>;
|
||||||
vqmmc-supply = <&vcca1v8_pmu>;
|
vqmmc-supply = <&vcca1v8_pmu>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
wifi@1 {
|
|
||||||
reg = <1>;
|
|
||||||
interrupt-parent = <&gpio0>;
|
|
||||||
interrupts = <RK_PB7 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
interrupt-names = "host-wake";
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&wifi_host_wake_h>;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
&sfc {
|
&sfc {
|
||||||
|
@@ -32,6 +32,13 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gmac1_clkin: external-gmac1-clock {
|
||||||
|
compatible = "fixed-clock";
|
||||||
|
clock-frequency = <125000000>;
|
||||||
|
clock-output-names = "gmac1_clkin";
|
||||||
|
#clock-cells = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
leds {
|
leds {
|
||||||
compatible = "gpio-leds";
|
compatible = "gpio-leds";
|
||||||
|
|
||||||
@@ -67,6 +74,49 @@
|
|||||||
regulator-boot-on;
|
regulator-boot-on;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pcie30_avdd0v9: pcie30-avdd0v9-regulator {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "pcie30_avdd0v9";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <900000>;
|
||||||
|
regulator-max-microvolt = <900000>;
|
||||||
|
vin-supply = <&vcc3v3_sys>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pcie30_avdd1v8: pcie30-avdd1v8-regulator {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "pcie30_avdd1v8";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
vin-supply = <&vcc3v3_sys>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* pi6c pcie clock generator */
|
||||||
|
vcc3v3_pi6c_03: vcc3v3-pi6c-03-regulator {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "vcc3v3_pi6c_03";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
vin-supply = <&vcc5v0_sys>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vcc3v3_pcie: vcc3v3-pcie-regulator {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
enable-active-high;
|
||||||
|
gpios = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pcie_enable_h>;
|
||||||
|
regulator-name = "vcc3v3_pcie";
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
vin-supply = <&vcc5v0_sys>;
|
||||||
|
};
|
||||||
|
|
||||||
vcc3v3_sys: vcc3v3-sys-regulator {
|
vcc3v3_sys: vcc3v3-sys-regulator {
|
||||||
compatible = "regulator-fixed";
|
compatible = "regulator-fixed";
|
||||||
regulator-name = "vcc3v3_sys";
|
regulator-name = "vcc3v3_sys";
|
||||||
@@ -132,49 +182,6 @@
|
|||||||
vin-supply = <&vcc5v0_usb>;
|
vin-supply = <&vcc5v0_usb>;
|
||||||
};
|
};
|
||||||
|
|
||||||
pcie30_avdd0v9: pcie30-avdd0v9-regulator {
|
|
||||||
compatible = "regulator-fixed";
|
|
||||||
regulator-name = "pcie30_avdd0v9";
|
|
||||||
regulator-always-on;
|
|
||||||
regulator-boot-on;
|
|
||||||
regulator-min-microvolt = <900000>;
|
|
||||||
regulator-max-microvolt = <900000>;
|
|
||||||
vin-supply = <&vcc3v3_sys>;
|
|
||||||
};
|
|
||||||
|
|
||||||
pcie30_avdd1v8: pcie30-avdd1v8-regulator {
|
|
||||||
compatible = "regulator-fixed";
|
|
||||||
regulator-name = "pcie30_avdd1v8";
|
|
||||||
regulator-always-on;
|
|
||||||
regulator-boot-on;
|
|
||||||
regulator-min-microvolt = <1800000>;
|
|
||||||
regulator-max-microvolt = <1800000>;
|
|
||||||
vin-supply = <&vcc3v3_sys>;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* pi6c pcie clock generator */
|
|
||||||
vcc3v3_pi6c_03: vcc3v3-pi6c-03-regulator {
|
|
||||||
compatible = "regulator-fixed";
|
|
||||||
regulator-name = "vcc3v3_pi6c_03";
|
|
||||||
regulator-always-on;
|
|
||||||
regulator-boot-on;
|
|
||||||
regulator-min-microvolt = <3300000>;
|
|
||||||
regulator-max-microvolt = <3300000>;
|
|
||||||
vin-supply = <&vcc5v0_sys>;
|
|
||||||
};
|
|
||||||
|
|
||||||
vcc3v3_pcie: vcc3v3-pcie-regulator {
|
|
||||||
compatible = "regulator-fixed";
|
|
||||||
enable-active-high;
|
|
||||||
gpios = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>;
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&pcie_enable_h>;
|
|
||||||
regulator-name = "vcc3v3_pcie";
|
|
||||||
regulator-min-microvolt = <3300000>;
|
|
||||||
regulator-max-microvolt = <3300000>;
|
|
||||||
vin-supply = <&vcc5v0_sys>;
|
|
||||||
};
|
|
||||||
|
|
||||||
vcc_cam: vcc-cam-regulator {
|
vcc_cam: vcc-cam-regulator {
|
||||||
compatible = "regulator-fixed";
|
compatible = "regulator-fixed";
|
||||||
enable-active-high;
|
enable-active-high;
|
||||||
@@ -238,9 +245,8 @@
|
|||||||
|
|
||||||
&gmac1 {
|
&gmac1 {
|
||||||
assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>;
|
assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>;
|
||||||
assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>;
|
assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>, <&gmac1_clkin>;
|
||||||
assigned-clock-rates = <0>, <125000000>;
|
clock_in_out = "input";
|
||||||
clock_in_out = "output";
|
|
||||||
phy-handle = <&rgmii_phy1>;
|
phy-handle = <&rgmii_phy1>;
|
||||||
phy-mode = "rgmii-id";
|
phy-mode = "rgmii-id";
|
||||||
phy-supply = <&vcc_3v3>;
|
phy-supply = <&vcc_3v3>;
|
||||||
@@ -249,13 +255,8 @@
|
|||||||
&gmac1m1_tx_bus2
|
&gmac1m1_tx_bus2
|
||||||
&gmac1m1_rx_bus2
|
&gmac1m1_rx_bus2
|
||||||
&gmac1m1_rgmii_clk
|
&gmac1m1_rgmii_clk
|
||||||
|
&gmac1m1_clkinout
|
||||||
&gmac1m1_rgmii_bus>;
|
&gmac1m1_rgmii_bus>;
|
||||||
snps,reset-gpio = <&gpio3 RK_PB0 GPIO_ACTIVE_LOW>;
|
|
||||||
snps,reset-active-low;
|
|
||||||
/* Reset time is 20ms, 100ms for rtl8211f */
|
|
||||||
snps,reset-delays-us = <0 20000 100000>;
|
|
||||||
tx_delay = <0x42>;
|
|
||||||
rx_delay = <0x28>;
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -560,11 +561,20 @@
|
|||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&i2s2_2ch {
|
||||||
|
rockchip,trcm-sync-tx-only;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
&mdio1 {
|
&mdio1 {
|
||||||
rgmii_phy1: ethernet-phy@0 {
|
rgmii_phy1: ethernet-phy@0 {
|
||||||
compatible = "ethernet-phy-ieee802.3-c22";
|
compatible = "ethernet-phy-ieee802.3-c22";
|
||||||
reg = <0x0>;
|
reg = <0x0>;
|
||||||
realtek,led-data = <0x6d60>;
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <ð_phy_rst>;
|
||||||
|
reset-assert-us = <20000>;
|
||||||
|
reset-deassert-us = <100000>;
|
||||||
|
reset-gpios = <&gpio3 RK_PB0 GPIO_ACTIVE_LOW>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -602,6 +612,12 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ethernet {
|
||||||
|
eth_phy_rst: eth_phy_rst {
|
||||||
|
rockchip,pins = <3 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
hym8563 {
|
hym8563 {
|
||||||
hym8563_int: hym8563-int {
|
hym8563_int: hym8563-int {
|
||||||
rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>;
|
rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||||
@@ -658,10 +674,6 @@
|
|||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
&rng {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
&saradc {
|
&saradc {
|
||||||
vref-supply = <&vcca_1v8>;
|
vref-supply = <&vcca_1v8>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
@@ -0,0 +1,762 @@
|
|||||||
|
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
|
#include <dt-bindings/leds/common.h>
|
||||||
|
#include <dt-bindings/pinctrl/rockchip.h>
|
||||||
|
#include <dt-bindings/soc/rockchip,vop2.h>
|
||||||
|
#include "rk3568.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "Radxa ROCK 3B";
|
||||||
|
compatible = "radxa,rock-3b", "rockchip,rk3568";
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
ethernet0 = &gmac0;
|
||||||
|
ethernet1 = &gmac1;
|
||||||
|
mmc0 = &sdhci;
|
||||||
|
mmc1 = &sdmmc0;
|
||||||
|
mmc2 = &sdmmc2;
|
||||||
|
};
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
stdout-path = "serial2:1500000n8";
|
||||||
|
};
|
||||||
|
|
||||||
|
hdmi-con {
|
||||||
|
compatible = "hdmi-connector";
|
||||||
|
type = "a";
|
||||||
|
|
||||||
|
port {
|
||||||
|
hdmi_con_in: endpoint {
|
||||||
|
remote-endpoint = <&hdmi_out_con>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
ir-receiver {
|
||||||
|
compatible = "gpio-ir-receiver";
|
||||||
|
gpios = <&gpio0 RK_PC2 GPIO_ACTIVE_LOW>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pwm3_ir>;
|
||||||
|
};
|
||||||
|
|
||||||
|
leds {
|
||||||
|
compatible = "gpio-leds";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&led>;
|
||||||
|
|
||||||
|
led-0 {
|
||||||
|
color = <LED_COLOR_ID_GREEN>;
|
||||||
|
default-state = "on";
|
||||||
|
function = LED_FUNCTION_HEARTBEAT;
|
||||||
|
gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* pi6c pcie clock generator */
|
||||||
|
vcc3v3_pi6c_03: regulator-3v3-vcc-pi6c-03 {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
enable-active-high;
|
||||||
|
gpios = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pcie_pwren_h>;
|
||||||
|
regulator-name = "vcc3v3_pi6c_03";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
startup-delay-us = <10000>;
|
||||||
|
vin-supply = <&vcc5v0_sys>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vcc3v3_sys: regulator-3v3-vcc-sys {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "vcc3v3_sys";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
vin-supply = <&vcc5v0_sys>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vcc3v3_sys2: regulator-3v3-vcc-sys2 {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "vcc3v3_sys2";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
vin-supply = <&vcc5v0_sys>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vcc5v0_sys: regulator-5v0-vcc-sys {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "vcc5v0_sys";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <5000000>;
|
||||||
|
regulator-max-microvolt = <5000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vcc5v0_usb_host: regulator-5v0-vcc-usb-host {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
enable-active-high;
|
||||||
|
gpios = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&usb_host_pwren_h>;
|
||||||
|
regulator-name = "vcc5v0_usb_host";
|
||||||
|
regulator-min-microvolt = <5000000>;
|
||||||
|
regulator-max-microvolt = <5000000>;
|
||||||
|
vin-supply = <&vcc5v0_sys>;
|
||||||
|
};
|
||||||
|
|
||||||
|
vcc5v0_usb_otg: regulator-5v0-vcc-usb-otg {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
enable-active-high;
|
||||||
|
gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_HIGH>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&usb_otg_pwren_h>;
|
||||||
|
regulator-name = "vcc5v0_usb_otg";
|
||||||
|
regulator-min-microvolt = <5000000>;
|
||||||
|
regulator-max-microvolt = <5000000>;
|
||||||
|
vin-supply = <&vcc5v0_sys>;
|
||||||
|
};
|
||||||
|
|
||||||
|
sdio_pwrseq: sdio-pwrseq {
|
||||||
|
compatible = "mmc-pwrseq-simple";
|
||||||
|
clocks = <&rk809 1>;
|
||||||
|
clock-names = "ext_clock";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&wifi_reg_on_h>;
|
||||||
|
post-power-on-delay-ms = <100>;
|
||||||
|
power-off-delay-us = <5000000>;
|
||||||
|
reset-gpios = <&gpio3 RK_PD4 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
|
||||||
|
sound {
|
||||||
|
compatible = "simple-audio-card";
|
||||||
|
simple-audio-card,format = "i2s";
|
||||||
|
simple-audio-card,name = "Analog RK809";
|
||||||
|
simple-audio-card,mclk-fs = <256>;
|
||||||
|
|
||||||
|
simple-audio-card,cpu {
|
||||||
|
sound-dai = <&i2s1_8ch>;
|
||||||
|
};
|
||||||
|
|
||||||
|
simple-audio-card,codec {
|
||||||
|
sound-dai = <&rk809>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&combphy0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&combphy1 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&combphy2 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&cpu0 {
|
||||||
|
cpu-supply = <&vdd_cpu>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&cpu1 {
|
||||||
|
cpu-supply = <&vdd_cpu>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&cpu2 {
|
||||||
|
cpu-supply = <&vdd_cpu>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&cpu3 {
|
||||||
|
cpu-supply = <&vdd_cpu>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&gmac0 {
|
||||||
|
assigned-clocks = <&cru SCLK_GMAC0_RX_TX>, <&cru SCLK_GMAC0>;
|
||||||
|
assigned-clock-parents = <&cru SCLK_GMAC0_RGMII_SPEED>, <&cru CLK_MAC0_2TOP>;
|
||||||
|
clock_in_out = "input";
|
||||||
|
phy-handle = <&rgmii_phy0>;
|
||||||
|
phy-mode = "rgmii-id";
|
||||||
|
phy-supply = <&vcc_3v3>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&gmac0_miim
|
||||||
|
&gmac0_tx_bus2
|
||||||
|
&gmac0_rx_bus2
|
||||||
|
&gmac0_rgmii_clk
|
||||||
|
&gmac0_rgmii_bus
|
||||||
|
&gmac0_clkinout>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&gmac1 {
|
||||||
|
assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>;
|
||||||
|
assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>, <&cru CLK_MAC1_2TOP>;
|
||||||
|
clock_in_out = "input";
|
||||||
|
phy-handle = <&rgmii_phy1>;
|
||||||
|
phy-mode = "rgmii-id";
|
||||||
|
phy-supply = <&vcc_3v3>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&gmac1m1_miim
|
||||||
|
&gmac1m1_tx_bus2
|
||||||
|
&gmac1m1_rx_bus2
|
||||||
|
&gmac1m1_rgmii_clk
|
||||||
|
&gmac1m1_rgmii_bus
|
||||||
|
&gmac1m1_clkinout>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpu {
|
||||||
|
mali-supply = <&vdd_gpu>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&hdmi {
|
||||||
|
avdd-0v9-supply = <&vdda0v9_image>;
|
||||||
|
avdd-1v8-supply = <&vcca1v8_image>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&hdmi_in {
|
||||||
|
hdmi_in_vp0: endpoint {
|
||||||
|
remote-endpoint = <&vp0_out_hdmi>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&hdmi_out {
|
||||||
|
hdmi_out_con: endpoint {
|
||||||
|
remote-endpoint = <&hdmi_con_in>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&hdmi_sound {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c0 {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
vdd_cpu: regulator@1c {
|
||||||
|
compatible = "tcs,tcs4525";
|
||||||
|
reg = <0x1c>;
|
||||||
|
fcs,suspend-voltage-selector = <1>;
|
||||||
|
regulator-name = "vdd_cpu";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <800000>;
|
||||||
|
regulator-max-microvolt = <1150000>;
|
||||||
|
regulator-ramp-delay = <2300>;
|
||||||
|
vin-supply = <&vcc5v0_sys>;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-off-in-suspend;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
rk809: pmic@20 {
|
||||||
|
compatible = "rockchip,rk809";
|
||||||
|
reg = <0x20>;
|
||||||
|
assigned-clocks = <&cru I2S1_MCLKOUT_TX>;
|
||||||
|
assigned-clock-parents = <&cru CLK_I2S1_8CH_TX>;
|
||||||
|
#clock-cells = <1>;
|
||||||
|
clocks = <&cru I2S1_MCLKOUT_TX>;
|
||||||
|
clock-names = "mclk";
|
||||||
|
clock-output-names = "rk809-clkout1", "rk809-clkout2";
|
||||||
|
interrupt-parent = <&gpio0>;
|
||||||
|
interrupts = <RK_PA3 IRQ_TYPE_LEVEL_LOW>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pmic_int_l>, <&i2s1m0_mclk>;
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
system-power-controller;
|
||||||
|
wakeup-source;
|
||||||
|
|
||||||
|
vcc1-supply = <&vcc3v3_sys>;
|
||||||
|
vcc2-supply = <&vcc3v3_sys>;
|
||||||
|
vcc3-supply = <&vcc3v3_sys>;
|
||||||
|
vcc4-supply = <&vcc3v3_sys>;
|
||||||
|
vcc5-supply = <&vcc3v3_sys>;
|
||||||
|
vcc6-supply = <&vcc3v3_sys>;
|
||||||
|
vcc7-supply = <&vcc3v3_sys>;
|
||||||
|
vcc8-supply = <&vcc3v3_sys>;
|
||||||
|
vcc9-supply = <&vcc3v3_sys>;
|
||||||
|
|
||||||
|
regulators {
|
||||||
|
vdd_logic: DCDC_REG1 {
|
||||||
|
regulator-name = "vdd_logic";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-initial-mode = <0x2>;
|
||||||
|
regulator-min-microvolt = <500000>;
|
||||||
|
regulator-max-microvolt = <1350000>;
|
||||||
|
regulator-ramp-delay = <6001>;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-off-in-suspend;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vdd_gpu: DCDC_REG2 {
|
||||||
|
regulator-name = "vdd_gpu";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-initial-mode = <0x2>;
|
||||||
|
regulator-min-microvolt = <500000>;
|
||||||
|
regulator-max-microvolt = <1350000>;
|
||||||
|
regulator-ramp-delay = <6001>;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-off-in-suspend;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vcc_ddr: DCDC_REG3 {
|
||||||
|
regulator-name = "vcc_ddr";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-initial-mode = <0x2>;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-on-in-suspend;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vdd_npu: DCDC_REG4 {
|
||||||
|
regulator-name = "vdd_npu";
|
||||||
|
regulator-initial-mode = <0x2>;
|
||||||
|
regulator-min-microvolt = <500000>;
|
||||||
|
regulator-max-microvolt = <1350000>;
|
||||||
|
regulator-ramp-delay = <6001>;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-off-in-suspend;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vcc_1v8: DCDC_REG5 {
|
||||||
|
regulator-name = "vcc_1v8";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-off-in-suspend;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vdda0v9_image: LDO_REG1 {
|
||||||
|
regulator-name = "vdda0v9_image";
|
||||||
|
regulator-min-microvolt = <900000>;
|
||||||
|
regulator-max-microvolt = <900000>;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-off-in-suspend;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vdda_0v9: LDO_REG2 {
|
||||||
|
regulator-name = "vdda_0v9";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <900000>;
|
||||||
|
regulator-max-microvolt = <900000>;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-off-in-suspend;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vdda0v9_pmu: LDO_REG3 {
|
||||||
|
regulator-name = "vdda0v9_pmu";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <900000>;
|
||||||
|
regulator-max-microvolt = <900000>;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-on-in-suspend;
|
||||||
|
regulator-suspend-microvolt = <900000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vccio_acodec: LDO_REG4 {
|
||||||
|
regulator-name = "vccio_acodec";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-off-in-suspend;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vccio_sd: LDO_REG5 {
|
||||||
|
regulator-name = "vccio_sd";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-off-in-suspend;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vcc3v3_pmu: LDO_REG6 {
|
||||||
|
regulator-name = "vcc3v3_pmu";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-on-in-suspend;
|
||||||
|
regulator-suspend-microvolt = <3300000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vcca_1v8: LDO_REG7 {
|
||||||
|
regulator-name = "vcca_1v8";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-off-in-suspend;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vcca1v8_pmu: LDO_REG8 {
|
||||||
|
regulator-name = "vcca1v8_pmu";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-on-in-suspend;
|
||||||
|
regulator-suspend-microvolt = <1800000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vcca1v8_image: LDO_REG9 {
|
||||||
|
regulator-name = "vcca1v8_image";
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-off-in-suspend;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vcc_3v3: SWITCH_REG1 {
|
||||||
|
regulator-name = "vcc_3v3";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-off-in-suspend;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vcc3v3_sd: SWITCH_REG2 {
|
||||||
|
regulator-name = "vcc3v3_sd";
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
|
||||||
|
regulator-state-mem {
|
||||||
|
regulator-off-in-suspend;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c5 {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
hym8563: rtc@51 {
|
||||||
|
compatible = "haoyu,hym8563";
|
||||||
|
reg = <0x51>;
|
||||||
|
interrupt-parent = <&gpio0>;
|
||||||
|
interrupts = <RK_PD3 IRQ_TYPE_LEVEL_LOW>;
|
||||||
|
#clock-cells = <0>;
|
||||||
|
clock-output-names = "rtcic_32kout";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&rtcic_int_l>;
|
||||||
|
wakeup-source;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2s0_8ch {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2s1_8ch {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&i2s1m0_sclktx
|
||||||
|
&i2s1m0_lrcktx
|
||||||
|
&i2s1m0_sdi0
|
||||||
|
&i2s1m0_sdo0>;
|
||||||
|
rockchip,trcm-sync-tx-only;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&mdio0 {
|
||||||
|
rgmii_phy0: ethernet-phy@1 {
|
||||||
|
compatible = "ethernet-phy-ieee802.3-c22";
|
||||||
|
reg = <1>;
|
||||||
|
reset-assert-us = <20000>;
|
||||||
|
reset-deassert-us = <50000>;
|
||||||
|
reset-gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&mdio1 {
|
||||||
|
rgmii_phy1: ethernet-phy@1 {
|
||||||
|
compatible = "ethernet-phy-ieee802.3-c22";
|
||||||
|
reg = <1>;
|
||||||
|
reset-assert-us = <20000>;
|
||||||
|
reset-deassert-us = <50000>;
|
||||||
|
reset-gpios = <&gpio3 RK_PB0 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&pcie2x1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pcie20m1_pins>;
|
||||||
|
reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_HIGH>;
|
||||||
|
vpcie3v3-supply = <&vcc3v3_sys2>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&pcie30phy {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&pcie3x2 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pcie30x2m1_pins>;
|
||||||
|
reset-gpios = <&gpio2 RK_PD6 GPIO_ACTIVE_HIGH>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl {
|
||||||
|
bluetooth {
|
||||||
|
bt_reg_on_h: bt-reg-on-h {
|
||||||
|
rockchip,pins = <4 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||||
|
};
|
||||||
|
|
||||||
|
bt_wake_host_h: bt-wake-host-h {
|
||||||
|
rockchip,pins = <4 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||||
|
};
|
||||||
|
|
||||||
|
host_wake_bt_h: host-wake-bt-h {
|
||||||
|
rockchip,pins = <4 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
ir-receiver {
|
||||||
|
pwm3_ir: pwm3-ir {
|
||||||
|
rockchip,pins = <0 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
leds {
|
||||||
|
led: led {
|
||||||
|
rockchip,pins = <0 RK_PB7 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pcie {
|
||||||
|
pcie_pwren_h: pcie-pwren-h {
|
||||||
|
rockchip,pins = <0 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pmic {
|
||||||
|
pmic_int_l: pmic-int-l {
|
||||||
|
rockchip,pins = <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
rtc {
|
||||||
|
rtcic_int_l: rtcic-int-l {
|
||||||
|
rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
usb {
|
||||||
|
usb_host_pwren_h: usb-host-pwren-h {
|
||||||
|
rockchip,pins = <0 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||||
|
};
|
||||||
|
|
||||||
|
usb_otg_pwren_h: usb-otg-pwren-h {
|
||||||
|
rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi {
|
||||||
|
wifi_reg_on_h: wifi-reg-on-h {
|
||||||
|
rockchip,pins = <3 RK_PD4 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||||
|
};
|
||||||
|
|
||||||
|
wifi_wake_host_h: wifi-wake-host-h {
|
||||||
|
rockchip,pins = <3 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&pmu_io_domains {
|
||||||
|
pmuio1-supply = <&vcc3v3_pmu>;
|
||||||
|
pmuio2-supply = <&vcc3v3_pmu>;
|
||||||
|
vccio1-supply = <&vccio_acodec>;
|
||||||
|
vccio2-supply = <&vcc_1v8>;
|
||||||
|
vccio3-supply = <&vccio_sd>;
|
||||||
|
vccio4-supply = <&vcc_1v8>;
|
||||||
|
vccio5-supply = <&vcc_3v3>;
|
||||||
|
vccio6-supply = <&vcc_1v8>;
|
||||||
|
vccio7-supply = <&vcc_3v3>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&saradc {
|
||||||
|
vref-supply = <&vcca_1v8>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&sdhci {
|
||||||
|
bus-width = <8>;
|
||||||
|
cap-mmc-highspeed;
|
||||||
|
max-frequency = <200000000>;
|
||||||
|
mmc-hs200-1_8v;
|
||||||
|
non-removable;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&emmc_bus8 &emmc_clk &emmc_cmd &emmc_datastrobe>;
|
||||||
|
vmmc-supply = <&vcc_3v3>;
|
||||||
|
vqmmc-supply = <&vcc_1v8>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&sdmmc0 {
|
||||||
|
bus-width = <4>;
|
||||||
|
cap-sd-highspeed;
|
||||||
|
disable-wp;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd &sdmmc0_det>;
|
||||||
|
vmmc-supply = <&vcc3v3_sd>;
|
||||||
|
vqmmc-supply = <&vccio_sd>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&sdmmc2 {
|
||||||
|
bus-width = <4>;
|
||||||
|
cap-sd-highspeed;
|
||||||
|
cap-sdio-irq;
|
||||||
|
keep-power-in-suspend;
|
||||||
|
mmc-pwrseq = <&sdio_pwrseq>;
|
||||||
|
non-removable;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&sdmmc2m0_bus4 &sdmmc2m0_clk &sdmmc2m0_cmd>;
|
||||||
|
sd-uhs-sdr104;
|
||||||
|
vmmc-supply = <&vcc3v3_sys2>;
|
||||||
|
vqmmc-supply = <&vcc_1v8>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
&sfc {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
flash@0 {
|
||||||
|
compatible = "jedec,spi-nor";
|
||||||
|
reg = <0>;
|
||||||
|
spi-max-frequency = <104000000>;
|
||||||
|
spi-rx-bus-width = <4>;
|
||||||
|
spi-tx-bus-width = <1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&tsadc {
|
||||||
|
rockchip,hw-tshut-mode = <1>;
|
||||||
|
rockchip,hw-tshut-polarity = <0>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart2 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart8 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&uart8m0_xfer &uart8m0_ctsn &uart8m0_rtsn>;
|
||||||
|
uart-has-rtscts;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb_host0_ehci {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb_host0_ohci {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb_host0_xhci {
|
||||||
|
extcon = <&usb2phy0>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb_host1_xhci {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb2phy0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb2phy0_host {
|
||||||
|
phy-supply = <&vcc5v0_usb_host>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb2phy0_otg {
|
||||||
|
phy-supply = <&vcc5v0_usb_otg>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb2phy1 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb2phy1_otg {
|
||||||
|
phy-supply = <&vcc5v0_usb_host>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&vop {
|
||||||
|
assigned-clocks = <&cru DCLK_VOP0>, <&cru DCLK_VOP1>;
|
||||||
|
assigned-clock-parents = <&pmucru PLL_HPLL>, <&cru PLL_VPLL>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&vop_mmu {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&vp0 {
|
||||||
|
vp0_out_hdmi: endpoint@ROCKCHIP_VOP2_EP_HDMI0 {
|
||||||
|
reg = <ROCKCHIP_VOP2_EP_HDMI0>;
|
||||||
|
remote-endpoint = <&hdmi_in_vp0>;
|
||||||
|
};
|
||||||
|
};
|
@@ -170,6 +170,11 @@
|
|||||||
cpu-supply = <&vdd_cpu_lit_s0>;
|
cpu-supply = <&vdd_cpu_lit_s0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&gpu {
|
||||||
|
mali-supply = <&vdd_gpu_s0>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
&i2c0 {
|
&i2c0 {
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&i2c0m2_xfer>;
|
pinctrl-0 = <&i2c0m2_xfer>;
|
||||||
|
@@ -424,6 +424,15 @@ define Device/radxa_rock-3a
|
|||||||
endef
|
endef
|
||||||
TARGET_DEVICES += radxa_rock-3a
|
TARGET_DEVICES += radxa_rock-3a
|
||||||
|
|
||||||
|
define Device/radxa_rock-3b
|
||||||
|
DEVICE_VENDOR := Radxa
|
||||||
|
DEVICE_MODEL := ROCK 3B
|
||||||
|
SOC := rk3568
|
||||||
|
UBOOT_DEVICE_NAME := rock-3b-rk3568
|
||||||
|
IMAGE/sysupgrade.img.gz := boot-common | boot-script | pine64-img | gzip | append-metadata
|
||||||
|
endef
|
||||||
|
TARGET_DEVICES += radxa_rock-3b
|
||||||
|
|
||||||
define Device/radxa_rock-3c
|
define Device/radxa_rock-3c
|
||||||
DEVICE_VENDOR := Radxa
|
DEVICE_VENDOR := Radxa
|
||||||
DEVICE_MODEL := ROCK 3C
|
DEVICE_MODEL := ROCK 3C
|
||||||
|
@@ -32,7 +32,7 @@ PROJECT_NAME=$(shell basename "${ROOT}")
|
|||||||
# - pkg/version/current.go
|
# - pkg/version/current.go
|
||||||
#
|
#
|
||||||
# Use `tools/bump_version.sh` script to change all those files at one shot.
|
# Use `tools/bump_version.sh` script to change all those files at one shot.
|
||||||
VERSION="3.17.0"
|
VERSION="3.17.1"
|
||||||
|
|
||||||
# Build binaries and installation packages.
|
# Build binaries and installation packages.
|
||||||
.PHONY: build
|
.PHONY: build
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
Package: mieru
|
Package: mieru
|
||||||
Version: 3.17.0
|
Version: 3.17.1
|
||||||
Section: net
|
Section: net
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Architecture: amd64
|
Architecture: amd64
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
Name: mieru
|
Name: mieru
|
||||||
Version: 3.17.0
|
Version: 3.17.1
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Mieru proxy client
|
Summary: Mieru proxy client
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
Package: mieru
|
Package: mieru
|
||||||
Version: 3.17.0
|
Version: 3.17.1
|
||||||
Section: net
|
Section: net
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Architecture: arm64
|
Architecture: arm64
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
Name: mieru
|
Name: mieru
|
||||||
Version: 3.17.0
|
Version: 3.17.1
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Mieru proxy client
|
Summary: Mieru proxy client
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
Package: mita
|
Package: mita
|
||||||
Version: 3.17.0
|
Version: 3.17.1
|
||||||
Section: net
|
Section: net
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Architecture: amd64
|
Architecture: amd64
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
Name: mita
|
Name: mita
|
||||||
Version: 3.17.0
|
Version: 3.17.1
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Mieru proxy server
|
Summary: Mieru proxy server
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
Package: mita
|
Package: mita
|
||||||
Version: 3.17.0
|
Version: 3.17.1
|
||||||
Section: net
|
Section: net
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Architecture: arm64
|
Architecture: arm64
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
Name: mita
|
Name: mita
|
||||||
Version: 3.17.0
|
Version: 3.17.1
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Mieru proxy server
|
Summary: Mieru proxy server
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
|
@@ -18,32 +18,32 @@ Or you can manually install and configure proxy server using the steps below.
|
|||||||
|
|
||||||
```sh
|
```sh
|
||||||
# Debian / Ubuntu - X86_64
|
# Debian / Ubuntu - X86_64
|
||||||
curl -LSO https://github.com/enfein/mieru/releases/download/v3.17.0/mita_3.17.0_amd64.deb
|
curl -LSO https://github.com/enfein/mieru/releases/download/v3.17.1/mita_3.17.1_amd64.deb
|
||||||
|
|
||||||
# Debian / Ubuntu - ARM 64
|
# Debian / Ubuntu - ARM 64
|
||||||
curl -LSO https://github.com/enfein/mieru/releases/download/v3.17.0/mita_3.17.0_arm64.deb
|
curl -LSO https://github.com/enfein/mieru/releases/download/v3.17.1/mita_3.17.1_arm64.deb
|
||||||
|
|
||||||
# RedHat / CentOS / Rocky Linux - X86_64
|
# RedHat / CentOS / Rocky Linux - X86_64
|
||||||
curl -LSO https://github.com/enfein/mieru/releases/download/v3.17.0/mita-3.17.0-1.x86_64.rpm
|
curl -LSO https://github.com/enfein/mieru/releases/download/v3.17.1/mita-3.17.1-1.x86_64.rpm
|
||||||
|
|
||||||
# RedHat / CentOS / Rocky Linux - ARM 64
|
# RedHat / CentOS / Rocky Linux - ARM 64
|
||||||
curl -LSO https://github.com/enfein/mieru/releases/download/v3.17.0/mita-3.17.0-1.aarch64.rpm
|
curl -LSO https://github.com/enfein/mieru/releases/download/v3.17.1/mita-3.17.1-1.aarch64.rpm
|
||||||
```
|
```
|
||||||
|
|
||||||
## Install mita package
|
## Install mita package
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# Debian / Ubuntu - X86_64
|
# Debian / Ubuntu - X86_64
|
||||||
sudo dpkg -i mita_3.17.0_amd64.deb
|
sudo dpkg -i mita_3.17.1_amd64.deb
|
||||||
|
|
||||||
# Debian / Ubuntu - ARM 64
|
# Debian / Ubuntu - ARM 64
|
||||||
sudo dpkg -i mita_3.17.0_arm64.deb
|
sudo dpkg -i mita_3.17.1_arm64.deb
|
||||||
|
|
||||||
# RedHat / CentOS / Rocky Linux - X86_64
|
# RedHat / CentOS / Rocky Linux - X86_64
|
||||||
sudo rpm -Uvh --force mita-3.17.0-1.x86_64.rpm
|
sudo rpm -Uvh --force mita-3.17.1-1.x86_64.rpm
|
||||||
|
|
||||||
# RedHat / CentOS / Rocky Linux - ARM 64
|
# RedHat / CentOS / Rocky Linux - ARM 64
|
||||||
sudo rpm -Uvh --force mita-3.17.0-1.aarch64.rpm
|
sudo rpm -Uvh --force mita-3.17.1-1.aarch64.rpm
|
||||||
```
|
```
|
||||||
|
|
||||||
Those instructions can also be used to upgrade the version of mita software package.
|
Those instructions can also be used to upgrade the version of mita software package.
|
||||||
|
@@ -18,32 +18,32 @@ sudo python3 setup.py --lang=zh
|
|||||||
|
|
||||||
```sh
|
```sh
|
||||||
# Debian / Ubuntu - X86_64
|
# Debian / Ubuntu - X86_64
|
||||||
curl -LSO https://github.com/enfein/mieru/releases/download/v3.17.0/mita_3.17.0_amd64.deb
|
curl -LSO https://github.com/enfein/mieru/releases/download/v3.17.1/mita_3.17.1_amd64.deb
|
||||||
|
|
||||||
# Debian / Ubuntu - ARM 64
|
# Debian / Ubuntu - ARM 64
|
||||||
curl -LSO https://github.com/enfein/mieru/releases/download/v3.17.0/mita_3.17.0_arm64.deb
|
curl -LSO https://github.com/enfein/mieru/releases/download/v3.17.1/mita_3.17.1_arm64.deb
|
||||||
|
|
||||||
# RedHat / CentOS / Rocky Linux - X86_64
|
# RedHat / CentOS / Rocky Linux - X86_64
|
||||||
curl -LSO https://github.com/enfein/mieru/releases/download/v3.17.0/mita-3.17.0-1.x86_64.rpm
|
curl -LSO https://github.com/enfein/mieru/releases/download/v3.17.1/mita-3.17.1-1.x86_64.rpm
|
||||||
|
|
||||||
# RedHat / CentOS / Rocky Linux - ARM 64
|
# RedHat / CentOS / Rocky Linux - ARM 64
|
||||||
curl -LSO https://github.com/enfein/mieru/releases/download/v3.17.0/mita-3.17.0-1.aarch64.rpm
|
curl -LSO https://github.com/enfein/mieru/releases/download/v3.17.1/mita-3.17.1-1.aarch64.rpm
|
||||||
```
|
```
|
||||||
|
|
||||||
## 安装 mita 软件包
|
## 安装 mita 软件包
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# Debian / Ubuntu - X86_64
|
# Debian / Ubuntu - X86_64
|
||||||
sudo dpkg -i mita_3.17.0_amd64.deb
|
sudo dpkg -i mita_3.17.1_amd64.deb
|
||||||
|
|
||||||
# Debian / Ubuntu - ARM 64
|
# Debian / Ubuntu - ARM 64
|
||||||
sudo dpkg -i mita_3.17.0_arm64.deb
|
sudo dpkg -i mita_3.17.1_arm64.deb
|
||||||
|
|
||||||
# RedHat / CentOS / Rocky Linux - X86_64
|
# RedHat / CentOS / Rocky Linux - X86_64
|
||||||
sudo rpm -Uvh --force mita-3.17.0-1.x86_64.rpm
|
sudo rpm -Uvh --force mita-3.17.1-1.x86_64.rpm
|
||||||
|
|
||||||
# RedHat / CentOS / Rocky Linux - ARM 64
|
# RedHat / CentOS / Rocky Linux - ARM 64
|
||||||
sudo rpm -Uvh --force mita-3.17.0-1.aarch64.rpm
|
sudo rpm -Uvh --force mita-3.17.1-1.aarch64.rpm
|
||||||
```
|
```
|
||||||
|
|
||||||
上述指令也可以用来升级 mita 软件包的版本。
|
上述指令也可以用来升级 mita 软件包的版本。
|
||||||
|
@@ -817,19 +817,20 @@ var serverGetUsersFunc = func(_ []string) error {
|
|||||||
|
|
||||||
// Collect download and upload metrics of this user.
|
// Collect download and upload metrics of this user.
|
||||||
var down, up *metrics.Counter
|
var down, up *metrics.Counter
|
||||||
var err error
|
|
||||||
for _, metric := range userWithMetrics.GetMetrics() {
|
for _, metric := range userWithMetrics.GetMetrics() {
|
||||||
switch metric.GetName() {
|
switch metric.GetName() {
|
||||||
case metrics.UserMetricDownloadBytes:
|
case metrics.UserMetricDownloadBytes:
|
||||||
down, err = metrics.NewCounterFromMetricPB(metric)
|
downMetric, err := metrics.FromMetricPB(metric)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("metrics.NewCounterFromMetricPB() failed: %w", err)
|
return fmt.Errorf("metrics.FromMetricPB() failed: %w", err)
|
||||||
}
|
}
|
||||||
|
down = downMetric.(*metrics.Counter)
|
||||||
case metrics.UserMetricUploadBytes:
|
case metrics.UserMetricUploadBytes:
|
||||||
up, err = metrics.NewCounterFromMetricPB(metric)
|
upMetric, err := metrics.FromMetricPB(metric)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("metrics.NewCounterFromMetricPB() failed: %w", err)
|
return fmt.Errorf("metrics.FromMetricPB() failed: %w", err)
|
||||||
}
|
}
|
||||||
|
up = upMetric.(*metrics.Counter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -902,19 +903,20 @@ var serverGetQuotasFunc = func(_ []string) error {
|
|||||||
|
|
||||||
// Collect download and upload metrics of this user.
|
// Collect download and upload metrics of this user.
|
||||||
var down, up *metrics.Counter
|
var down, up *metrics.Counter
|
||||||
var err error
|
|
||||||
for _, metric := range userWithMetrics.GetMetrics() {
|
for _, metric := range userWithMetrics.GetMetrics() {
|
||||||
switch metric.GetName() {
|
switch metric.GetName() {
|
||||||
case metrics.UserMetricDownloadBytes:
|
case metrics.UserMetricDownloadBytes:
|
||||||
down, err = metrics.NewCounterFromMetricPB(metric)
|
downMetric, err := metrics.FromMetricPB(metric)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("metrics.NewCounterFromMetricPB() failed: %w", err)
|
return fmt.Errorf("metrics.FromMetricPB() failed: %w", err)
|
||||||
}
|
}
|
||||||
|
down = downMetric.(*metrics.Counter)
|
||||||
case metrics.UserMetricUploadBytes:
|
case metrics.UserMetricUploadBytes:
|
||||||
up, err = metrics.NewCounterFromMetricPB(metric)
|
upMetric, err := metrics.FromMetricPB(metric)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("metrics.NewCounterFromMetricPB() failed: %w", err)
|
return fmt.Errorf("metrics.FromMetricPB() failed: %w", err)
|
||||||
}
|
}
|
||||||
|
up = upMetric.(*metrics.Counter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if down == nil || up == nil {
|
if down == nil || up == nil {
|
||||||
|
@@ -26,7 +26,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
rollUpInterval = 1024
|
rollUpInterval = 1000
|
||||||
rollUpToSecond = 2 * time.Second
|
rollUpToSecond = 2 * time.Second
|
||||||
rollUpSecondToMinute = 120 * time.Second
|
rollUpSecondToMinute = 120 * time.Second
|
||||||
rollUpMinuteToHour = 120 * time.Minute
|
rollUpMinuteToHour = 120 * time.Minute
|
||||||
|
@@ -211,6 +211,7 @@ func ToMetricPB(src Metric) *pb.Metric {
|
|||||||
if src.Type() == COUNTER_TIME_SERIES {
|
if src.Type() == COUNTER_TIME_SERIES {
|
||||||
counter := src.(*Counter)
|
counter := src.(*Counter)
|
||||||
counter.mu.Lock()
|
counter.mu.Lock()
|
||||||
|
dst.Value = proto.Int64(counter.value) // Make sure value matches history.
|
||||||
dst.History = make([]*pb.History, len(counter.history))
|
dst.History = make([]*pb.History, len(counter.history))
|
||||||
copy(dst.History, counter.history)
|
copy(dst.History, counter.history)
|
||||||
counter.mu.Unlock()
|
counter.mu.Unlock()
|
||||||
@@ -218,20 +219,32 @@ func ToMetricPB(src Metric) *pb.Metric {
|
|||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewCounterFromMetricPB creates a counter metric from the protobuf.
|
// FromMetricPB creates a metric from the protobuf.
|
||||||
func NewCounterFromMetricPB(src *pb.Metric) (*Counter, error) {
|
func FromMetricPB(src *pb.Metric) (Metric, error) {
|
||||||
if src.GetType() != pb.MetricType_COUNTER && src.GetType() != pb.MetricType_COUNTER_TIME_SERIES {
|
if src.GetType() != pb.MetricType_COUNTER && src.GetType() != pb.MetricType_COUNTER_TIME_SERIES && src.GetType() != pb.MetricType_GAUGE {
|
||||||
return nil, fmt.Errorf("type %v can't be converted to Counter", src.GetType().String())
|
return nil, fmt.Errorf("metric type %v is invalid", src.GetType().String())
|
||||||
}
|
}
|
||||||
|
|
||||||
c := &Counter{
|
var m Metric
|
||||||
|
switch src.GetType() {
|
||||||
|
case pb.MetricType_COUNTER:
|
||||||
|
m = &Counter{
|
||||||
name: src.GetName(),
|
name: src.GetName(),
|
||||||
}
|
}
|
||||||
if src.GetType() == pb.MetricType_COUNTER_TIME_SERIES {
|
loadCounterFromMetricPB(m.(*Counter), src)
|
||||||
c.timeSeries = true
|
case pb.MetricType_COUNTER_TIME_SERIES:
|
||||||
|
m = &Counter{
|
||||||
|
name: src.GetName(),
|
||||||
|
timeSeries: true,
|
||||||
}
|
}
|
||||||
loadCounterFromMetricPB(c, src)
|
loadCounterFromMetricPB(m.(*Counter), src)
|
||||||
return c, nil
|
case pb.MetricType_GAUGE:
|
||||||
|
m = &Gauge{
|
||||||
|
name: src.GetName(),
|
||||||
|
}
|
||||||
|
loadGaugeFromMetricPB(m.(*Gauge), src)
|
||||||
|
}
|
||||||
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// LogMetricsNow writes the current metrics to log.
|
// LogMetricsNow writes the current metrics to log.
|
||||||
@@ -269,7 +282,7 @@ func logMetricsLoop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func loadCounterFromMetricPB(dst *Counter, src *pb.Metric) {
|
func loadCounterFromMetricPB(dst *Counter, src *pb.Metric) {
|
||||||
// Verify the name and type matches.
|
// Verify the type matches.
|
||||||
if src.GetName() != dst.Name() {
|
if src.GetName() != dst.Name() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -280,3 +293,12 @@ func loadCounterFromMetricPB(dst *Counter, src *pb.Metric) {
|
|||||||
dst.history = src.GetHistory()
|
dst.history = src.GetHistory()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func loadGaugeFromMetricPB(dst *Gauge, src *pb.Metric) {
|
||||||
|
// Verify the type matches.
|
||||||
|
if src.GetName() != dst.Name() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
dst.Store(src.GetValue())
|
||||||
|
}
|
||||||
|
@@ -17,8 +17,10 @@ package metrics
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
mrand "math/rand"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -62,24 +64,106 @@ func TestMetricsDump(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestToMetricPBConcurrent(t *testing.T) {
|
||||||
|
counter := &Counter{name: "counter", timeSeries: true}
|
||||||
|
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
stop := make(chan struct{})
|
||||||
|
|
||||||
|
// Goroutine to continuously add history.
|
||||||
|
wg.Add(1)
|
||||||
|
go func() {
|
||||||
|
defer wg.Done()
|
||||||
|
currentTime := time.Now()
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-stop:
|
||||||
|
return
|
||||||
|
default:
|
||||||
|
// Add a small random duration to the time to ensure it's always increasing.
|
||||||
|
currentTime = currentTime.Add(time.Duration(mrand.Intn(100)+1) * time.Millisecond)
|
||||||
|
counter.addWithTime(int64(mrand.Intn(100)), currentTime)
|
||||||
|
// Run the for loop enough times to trigger rollup.
|
||||||
|
time.Sleep(time.Microsecond)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
// Goroutine to verify the counter value matches the sum of history.
|
||||||
|
wg.Add(1)
|
||||||
|
go func() {
|
||||||
|
defer wg.Done()
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-stop:
|
||||||
|
return
|
||||||
|
default:
|
||||||
|
p := ToMetricPB(counter)
|
||||||
|
var sum int64
|
||||||
|
for _, h := range p.GetHistory() {
|
||||||
|
sum += h.GetDelta()
|
||||||
|
}
|
||||||
|
if p.GetValue() != sum {
|
||||||
|
t.Errorf("sum of history deltas (%d) does not match counter value (%d)", sum, p.GetValue())
|
||||||
|
}
|
||||||
|
time.Sleep(time.Duration(mrand.Intn(100)) * time.Microsecond)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
time.Sleep(time.Second)
|
||||||
|
close(stop)
|
||||||
|
wg.Wait()
|
||||||
|
}
|
||||||
|
|
||||||
func TestMetricPBConvertion(t *testing.T) {
|
func TestMetricPBConvertion(t *testing.T) {
|
||||||
p := &pb.Metric{
|
testCases := []struct {
|
||||||
Name: proto.String("counter"),
|
name string
|
||||||
|
metricPB *pb.Metric
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "CounterTimeSeries",
|
||||||
|
metricPB: &pb.Metric{
|
||||||
|
Name: proto.String("counter_ts"),
|
||||||
Type: pb.MetricType_COUNTER_TIME_SERIES.Enum(),
|
Type: pb.MetricType_COUNTER_TIME_SERIES.Enum(),
|
||||||
Value: proto.Int64(100),
|
Value: proto.Int64(100),
|
||||||
History: []*pb.History{
|
History: []*pb.History{
|
||||||
{
|
{
|
||||||
TimeUnixMilli: proto.Int64(time.Now().UnixMilli()),
|
TimeUnixMilli: proto.Int64(time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC).UnixMilli()),
|
||||||
Delta: proto.Int64(100),
|
Delta: proto.Int64(100),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Counter",
|
||||||
|
metricPB: &pb.Metric{
|
||||||
|
Name: proto.String("counter"),
|
||||||
|
Type: pb.MetricType_COUNTER.Enum(),
|
||||||
|
Value: proto.Int64(200),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Gauge",
|
||||||
|
metricPB: &pb.Metric{
|
||||||
|
Name: proto.String("gauge"),
|
||||||
|
Type: pb.MetricType_GAUGE.Enum(),
|
||||||
|
Value: proto.Int64(300),
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
c, err := NewCounterFromMetricPB(p)
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
m, err := FromMetricPB(tc.metricPB)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("NewCounterFromMetricPB() failed: %v", err)
|
t.Fatalf("FromMetricPB() failed: %v", err)
|
||||||
}
|
}
|
||||||
p2 := ToMetricPB(c)
|
p2 := ToMetricPB(m)
|
||||||
if !proto.Equal(p, p2) {
|
|
||||||
t.Errorf("metric protobuf doesn't match")
|
if !proto.Equal(tc.metricPB, p2) {
|
||||||
|
t.Errorf("metric protobuf doesn't match.\nwant: %v\ngot: %v", tc.metricPB, p2)
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,5 +16,5 @@
|
|||||||
package version
|
package version
|
||||||
|
|
||||||
const (
|
const (
|
||||||
AppVersion = "3.17.0"
|
AppVersion = "3.17.1"
|
||||||
)
|
)
|
||||||
|
@@ -3,14 +3,10 @@ package outbound
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"encoding/binary"
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"sync"
|
|
||||||
|
|
||||||
"github.com/metacubex/mihomo/common/convert"
|
"github.com/metacubex/mihomo/common/convert"
|
||||||
N "github.com/metacubex/mihomo/common/net"
|
N "github.com/metacubex/mihomo/common/net"
|
||||||
@@ -30,11 +26,6 @@ import (
|
|||||||
M "github.com/metacubex/sing/common/metadata"
|
M "github.com/metacubex/sing/common/metadata"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
// max packet length
|
|
||||||
maxLength = 1024 << 3
|
|
||||||
)
|
|
||||||
|
|
||||||
type Vless struct {
|
type Vless struct {
|
||||||
*Base
|
*Base
|
||||||
client *vless.Client
|
client *vless.Client
|
||||||
@@ -188,9 +179,6 @@ func (v *Vless) streamConnContext(ctx context.Context, c net.Conn, metadata *C.M
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
conn, err = v.client.StreamConn(c, parseVlessAddr(metadata, v.option.XUDP))
|
conn, err = v.client.StreamConn(c, parseVlessAddr(metadata, v.option.XUDP))
|
||||||
if v.option.PacketAddr {
|
|
||||||
conn = packetaddr.NewBindConn(conn)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
conn, err = v.client.StreamConn(c, parseVlessAddr(metadata, false))
|
conn, err = v.client.StreamConn(c, parseVlessAddr(metadata, false))
|
||||||
}
|
}
|
||||||
@@ -352,12 +340,11 @@ func (v *Vless) ListenPacketOnStreamConn(ctx context.Context, c net.Conn, metada
|
|||||||
), v), nil
|
), v), nil
|
||||||
} else if v.option.PacketAddr {
|
} else if v.option.PacketAddr {
|
||||||
return newPacketConn(N.NewThreadSafePacketConn(
|
return newPacketConn(N.NewThreadSafePacketConn(
|
||||||
packetaddr.NewConn(&vlessPacketConn{
|
packetaddr.NewConn(v.client.PacketConn(c, metadata.UDPAddr()),
|
||||||
Conn: c, rAddr: metadata.UDPAddr(),
|
M.SocksaddrFromNet(metadata.UDPAddr())),
|
||||||
}, M.SocksaddrFromNet(metadata.UDPAddr())),
|
|
||||||
), v), nil
|
), v), nil
|
||||||
}
|
}
|
||||||
return newPacketConn(N.NewThreadSafePacketConn(&vlessPacketConn{Conn: c, rAddr: metadata.UDPAddr()}), v), nil
|
return newPacketConn(N.NewThreadSafePacketConn(v.client.PacketConn(c, metadata.UDPAddr())), v), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SupportUOT implements C.ProxyAdapter
|
// SupportUOT implements C.ProxyAdapter
|
||||||
@@ -408,98 +395,6 @@ func parseVlessAddr(metadata *C.Metadata, xudp bool) *vless.DstAddr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type vlessPacketConn struct {
|
|
||||||
net.Conn
|
|
||||||
rAddr net.Addr
|
|
||||||
remain int
|
|
||||||
mux sync.Mutex
|
|
||||||
cache [2]byte
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *vlessPacketConn) writePacket(payload []byte) (int, error) {
|
|
||||||
binary.BigEndian.PutUint16(c.cache[:], uint16(len(payload)))
|
|
||||||
|
|
||||||
if _, err := c.Conn.Write(c.cache[:]); err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return c.Conn.Write(payload)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *vlessPacketConn) WriteTo(b []byte, addr net.Addr) (int, error) {
|
|
||||||
total := len(b)
|
|
||||||
if total == 0 {
|
|
||||||
return 0, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if total <= maxLength {
|
|
||||||
return c.writePacket(b)
|
|
||||||
}
|
|
||||||
|
|
||||||
offset := 0
|
|
||||||
|
|
||||||
for offset < total {
|
|
||||||
cursor := offset + maxLength
|
|
||||||
if cursor > total {
|
|
||||||
cursor = total
|
|
||||||
}
|
|
||||||
|
|
||||||
n, err := c.writePacket(b[offset:cursor])
|
|
||||||
if err != nil {
|
|
||||||
return offset + n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
offset = cursor
|
|
||||||
if offset == total {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return total, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *vlessPacketConn) ReadFrom(b []byte) (int, net.Addr, error) {
|
|
||||||
c.mux.Lock()
|
|
||||||
defer c.mux.Unlock()
|
|
||||||
|
|
||||||
if c.remain > 0 {
|
|
||||||
length := len(b)
|
|
||||||
if c.remain < length {
|
|
||||||
length = c.remain
|
|
||||||
}
|
|
||||||
|
|
||||||
n, err := c.Conn.Read(b[:length])
|
|
||||||
if err != nil {
|
|
||||||
return 0, c.rAddr, err
|
|
||||||
}
|
|
||||||
|
|
||||||
c.remain -= n
|
|
||||||
return n, c.rAddr, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := c.Conn.Read(b[:2]); err != nil {
|
|
||||||
return 0, c.rAddr, err
|
|
||||||
}
|
|
||||||
|
|
||||||
total := int(binary.BigEndian.Uint16(b[:2]))
|
|
||||||
if total == 0 {
|
|
||||||
return 0, c.rAddr, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
length := len(b)
|
|
||||||
if length > total {
|
|
||||||
length = total
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := io.ReadFull(c.Conn, b[:length]); err != nil {
|
|
||||||
return 0, c.rAddr, errors.New("read packet error")
|
|
||||||
}
|
|
||||||
|
|
||||||
c.remain = total - length
|
|
||||||
|
|
||||||
return length, c.rAddr, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewVless(option VlessOption) (*Vless, error) {
|
func NewVless(option VlessOption) (*Vless, error) {
|
||||||
var addons *vless.Addons
|
var addons *vless.Addons
|
||||||
if option.Network != "ws" && len(option.Flow) >= 16 {
|
if option.Network != "ws" && len(option.Flow) >= 16 {
|
||||||
|
@@ -31,7 +31,7 @@ require (
|
|||||||
github.com/metacubex/sing-shadowsocks2 v0.2.5
|
github.com/metacubex/sing-shadowsocks2 v0.2.5
|
||||||
github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2
|
github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2
|
||||||
github.com/metacubex/sing-tun v0.4.7-0.20250721020617-8e7c37ed3d97
|
github.com/metacubex/sing-tun v0.4.7-0.20250721020617-8e7c37ed3d97
|
||||||
github.com/metacubex/sing-vmess v0.2.3
|
github.com/metacubex/sing-vmess v0.2.4-0.20250731011226-ea28d589924d
|
||||||
github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f
|
github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f
|
||||||
github.com/metacubex/smux v0.0.0-20250503055512-501391591dee
|
github.com/metacubex/smux v0.0.0-20250503055512-501391591dee
|
||||||
github.com/metacubex/tfo-go v0.0.0-20250516165257-e29c16ae41d4
|
github.com/metacubex/tfo-go v0.0.0-20250516165257-e29c16ae41d4
|
||||||
|
@@ -131,8 +131,8 @@ github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2 h1:gXU+MY
|
|||||||
github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2/go.mod h1:mbfboaXauKJNIHJYxQRa+NJs4JU9NZfkA+I33dS2+9E=
|
github.com/metacubex/sing-shadowtls v0.0.0-20250503063515-5d9f966d17a2/go.mod h1:mbfboaXauKJNIHJYxQRa+NJs4JU9NZfkA+I33dS2+9E=
|
||||||
github.com/metacubex/sing-tun v0.4.7-0.20250721020617-8e7c37ed3d97 h1:YYpc60UZE2G0pUeHbRw9erDrUDZrPQy8QzWFqA3kHsk=
|
github.com/metacubex/sing-tun v0.4.7-0.20250721020617-8e7c37ed3d97 h1:YYpc60UZE2G0pUeHbRw9erDrUDZrPQy8QzWFqA3kHsk=
|
||||||
github.com/metacubex/sing-tun v0.4.7-0.20250721020617-8e7c37ed3d97/go.mod h1:2YywXPWW8Z97kTH7RffOeykKzU+l0aiKlglWV1PAS64=
|
github.com/metacubex/sing-tun v0.4.7-0.20250721020617-8e7c37ed3d97/go.mod h1:2YywXPWW8Z97kTH7RffOeykKzU+l0aiKlglWV1PAS64=
|
||||||
github.com/metacubex/sing-vmess v0.2.3 h1:QKLdIk5A2FcR3Y7m2/JO1XhfzgDA8tF4W9/ffsH9opo=
|
github.com/metacubex/sing-vmess v0.2.4-0.20250731011226-ea28d589924d h1:koSVAQiYqU/qtJ527e+wbsEPvTaM39HW75LSvh04IT0=
|
||||||
github.com/metacubex/sing-vmess v0.2.3/go.mod h1:21R5R1u90uUvBQF0owoooEu96/SAYYD56nDrwm6nFaM=
|
github.com/metacubex/sing-vmess v0.2.4-0.20250731011226-ea28d589924d/go.mod h1:21R5R1u90uUvBQF0owoooEu96/SAYYD56nDrwm6nFaM=
|
||||||
github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f h1:Sr/DYKYofKHKc4GF3qkRGNuj6XA6c0eqPgEDN+VAsYU=
|
github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f h1:Sr/DYKYofKHKc4GF3qkRGNuj6XA6c0eqPgEDN+VAsYU=
|
||||||
github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f/go.mod h1:jpAkVLPnCpGSfNyVmj6Cq4YbuZsFepm/Dc+9BAOcR80=
|
github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f/go.mod h1:jpAkVLPnCpGSfNyVmj6Cq4YbuZsFepm/Dc+9BAOcR80=
|
||||||
github.com/metacubex/smux v0.0.0-20250503055512-501391591dee h1:lp6hJ+4wCLZu113awp7P6odM2okB5s60HUyF0FMqKmo=
|
github.com/metacubex/smux v0.0.0-20250503055512-501391591dee h1:lp6hJ+4wCLZu113awp7P6odM2okB5s60HUyF0FMqKmo=
|
||||||
|
@@ -16,6 +16,7 @@ import (
|
|||||||
|
|
||||||
mux "github.com/metacubex/sing-mux"
|
mux "github.com/metacubex/sing-mux"
|
||||||
vmess "github.com/metacubex/sing-vmess"
|
vmess "github.com/metacubex/sing-vmess"
|
||||||
|
"github.com/metacubex/sing-vmess/packetaddr"
|
||||||
"github.com/metacubex/sing/common"
|
"github.com/metacubex/sing/common"
|
||||||
"github.com/metacubex/sing/common/buf"
|
"github.com/metacubex/sing/common/buf"
|
||||||
"github.com/metacubex/sing/common/bufio"
|
"github.com/metacubex/sing/common/bufio"
|
||||||
@@ -145,6 +146,10 @@ func (h *ListenerHandler) NewConnection(ctx context.Context, conn net.Conn, meta
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (h *ListenerHandler) NewPacketConnection(ctx context.Context, conn network.PacketConn, metadata M.Metadata) error {
|
func (h *ListenerHandler) NewPacketConnection(ctx context.Context, conn network.PacketConn, metadata M.Metadata) error {
|
||||||
|
if metadata.Destination.Fqdn == packetaddr.SeqPacketMagicAddress {
|
||||||
|
conn = packetaddr.NewConn(bufio.NewNetPacketConn(conn), M.Socksaddr{})
|
||||||
|
}
|
||||||
|
|
||||||
defer func() { _ = conn.Close() }()
|
defer func() { _ = conn.Close() }()
|
||||||
mutex := sync.Mutex{}
|
mutex := sync.Mutex{}
|
||||||
writer := bufio.NewNetPacketWriter(conn) // a new interface to set nil in defer
|
writer := bufio.NewNetPacketWriter(conn) // a new interface to set nil in defer
|
||||||
|
57
mihomo/transport/vless/packet.go
Normal file
57
mihomo/transport/vless/packet.go
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
package vless
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/binary"
|
||||||
|
"io"
|
||||||
|
"net"
|
||||||
|
|
||||||
|
"github.com/metacubex/mihomo/common/pool"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PacketConn struct {
|
||||||
|
net.Conn
|
||||||
|
rAddr net.Addr
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PacketConn) WriteTo(b []byte, addr net.Addr) (int, error) {
|
||||||
|
err := binary.Write(c.Conn, binary.BigEndian, uint16(len(b)))
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Conn.Write(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PacketConn) ReadFrom(b []byte) (int, net.Addr, error) {
|
||||||
|
var length uint16
|
||||||
|
err := binary.Read(c.Conn, binary.BigEndian, &length)
|
||||||
|
if err != nil {
|
||||||
|
return 0, nil, err
|
||||||
|
}
|
||||||
|
if len(b) < int(length) {
|
||||||
|
return 0, nil, io.ErrShortBuffer
|
||||||
|
}
|
||||||
|
n, err := io.ReadFull(c.Conn, b[:length])
|
||||||
|
return n, c.rAddr, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PacketConn) WaitReadFrom() (data []byte, put func(), addr net.Addr, err error) {
|
||||||
|
var length uint16
|
||||||
|
err = binary.Read(c.Conn, binary.BigEndian, &length)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
readBuf := pool.Get(int(length))
|
||||||
|
put = func() {
|
||||||
|
_ = pool.Put(readBuf)
|
||||||
|
}
|
||||||
|
n, err := io.ReadFull(c.Conn, readBuf)
|
||||||
|
if err != nil {
|
||||||
|
put()
|
||||||
|
put = nil
|
||||||
|
return
|
||||||
|
}
|
||||||
|
data = readBuf[:n]
|
||||||
|
addr = c.rAddr
|
||||||
|
return
|
||||||
|
}
|
@@ -51,6 +51,10 @@ func (c *Client) StreamConn(conn net.Conn, dst *DstAddr) (net.Conn, error) {
|
|||||||
return newConn(conn, c, dst)
|
return newConn(conn, c, dst)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) PacketConn(conn net.Conn, rAddr net.Addr) net.PacketConn {
|
||||||
|
return &PacketConn{conn, rAddr}
|
||||||
|
}
|
||||||
|
|
||||||
// NewClient return Client instance
|
// NewClient return Client instance
|
||||||
func NewClient(uuidStr string, addons *Addons) (*Client, error) {
|
func NewClient(uuidStr string, addons *Addons) (*Client, error) {
|
||||||
uid, err := utils.UUIDMap(uuidStr)
|
uid, err := utils.UUIDMap(uuidStr)
|
||||||
|
@@ -5,12 +5,12 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=filebrowser
|
PKG_NAME:=filebrowser
|
||||||
PKG_VERSION:=2.42.0
|
PKG_VERSION:=2.42.1
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=https://codeload.github.com/filebrowser/filebrowser/tar.gz/v${PKG_VERSION}?
|
PKG_SOURCE_URL:=https://codeload.github.com/filebrowser/filebrowser/tar.gz/v${PKG_VERSION}?
|
||||||
PKG_HASH:=8923381bcbf49e433091edb8ef36a31d16262338d74d230c30df0bc1c11632d7
|
PKG_HASH:=7e58321e9a3f494dc94b6d2f93954d0a3c8ff17768f8e670d8e9a001ed78ab82
|
||||||
|
|
||||||
PKG_LICENSE:=Apache-2.0
|
PKG_LICENSE:=Apache-2.0
|
||||||
PKG_LICENSE_FILES:=LICENSE
|
PKG_LICENSE_FILES:=LICENSE
|
||||||
|
@@ -30,11 +30,13 @@ o:value("https://ispip.clang.cn/all_cn.txt", translate("Clang.CN"))
|
|||||||
o:value("https://ispip.clang.cn/all_cn_cidr.txt", translate("Clang.CN.CIDR"))
|
o:value("https://ispip.clang.cn/all_cn_cidr.txt", translate("Clang.CN.CIDR"))
|
||||||
o:value("https://fastly.jsdelivr.net/gh/soffchen/GeoIP2-CN@release/CN-ip-cidr.txt", translate("soffchen/GeoIP2-CN"))
|
o:value("https://fastly.jsdelivr.net/gh/soffchen/GeoIP2-CN@release/CN-ip-cidr.txt", translate("soffchen/GeoIP2-CN"))
|
||||||
o:value("https://fastly.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/CN-ip-cidr.txt", translate("Hackl0us/GeoIP2-CN"))
|
o:value("https://fastly.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/CN-ip-cidr.txt", translate("Hackl0us/GeoIP2-CN"))
|
||||||
|
o:value("https://fastly.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/ChinaMax/ChinaMax_IP_No_IPv6.txt", translate("ios_rule_script/ChinaMax_IP_No_IPv6"))
|
||||||
|
|
||||||
----chnroute6 URL
|
----chnroute6 URL
|
||||||
o = s:option(DynamicList, "chnroute6_url", translate("China IPv6s(chnroute6) Update URL"))
|
o = s:option(DynamicList, "chnroute6_url", translate("China IPv6s(chnroute6) Update URL"))
|
||||||
o:value("https://fastly.jsdelivr.net/gh/gaoyifan/china-operator-ip@ip-lists/china6.txt", translate("gaoyifan/china-operator-ip/china6"))
|
o:value("https://fastly.jsdelivr.net/gh/gaoyifan/china-operator-ip@ip-lists/china6.txt", translate("gaoyifan/china-operator-ip/china6"))
|
||||||
o:value("https://ispip.clang.cn/all_cn_ipv6.txt", translate("Clang.CN.IPv6"))
|
o:value("https://ispip.clang.cn/all_cn_ipv6.txt", translate("Clang.CN.IPv6"))
|
||||||
|
o:value("https://fastly.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/ChinaMax/ChinaMax_IP.txt", translate("ios_rule_script/ChinaMax_IP"))
|
||||||
|
|
||||||
----chnlist URL
|
----chnlist URL
|
||||||
o = s:option(DynamicList, "chnlist_url", translate("China List(Chnlist) Update URL"))
|
o = s:option(DynamicList, "chnlist_url", translate("China List(Chnlist) Update URL"))
|
||||||
@@ -48,11 +50,11 @@ o:value("https://fastly.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule
|
|||||||
|
|
||||||
if has_xray or has_singbox then
|
if has_xray or has_singbox then
|
||||||
o = s:option(ListValue, "geoip_url", translate("GeoIP Update URL"))
|
o = s:option(ListValue, "geoip_url", translate("GeoIP Update URL"))
|
||||||
o:value("https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat", translate("Loyalsoldier/geoip"))
|
o:value("https://github.com/Loyalsoldier/geoip/releases/latest/download/geoip.dat", translate("Loyalsoldier/geoip"))
|
||||||
o:value("https://github.com/MetaCubeX/meta-rules-dat/releases/latest/download/geoip.dat", translate("MetaCubeX/geoip"))
|
o:value("https://github.com/MetaCubeX/meta-rules-dat/releases/latest/download/geoip.dat", translate("MetaCubeX/geoip"))
|
||||||
o:value("https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat", translate("Loyalsoldier/geoip (CDN)"))
|
o:value("https://fastly.jsdelivr.net/gh/Loyalsoldier/geoip@release/geoip.dat", translate("Loyalsoldier/geoip (CDN)"))
|
||||||
o:value("https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat", translate("MetaCubeX/geoip (CDN)"))
|
o:value("https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat", translate("MetaCubeX/geoip (CDN)"))
|
||||||
o.default = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat"
|
o.default = "https://github.com/Loyalsoldier/geoip/releases/latest/download/geoip.dat"
|
||||||
|
|
||||||
o = s:option(ListValue, "geosite_url", translate("Geosite Update URL"))
|
o = s:option(ListValue, "geosite_url", translate("Geosite Update URL"))
|
||||||
o:value("https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat", translate("Loyalsoldier/geosite"))
|
o:value("https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat", translate("Loyalsoldier/geosite"))
|
||||||
|
@@ -72,7 +72,7 @@ config global_rules
|
|||||||
list chnlist_url 'https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/accelerated-domains.china.conf'
|
list chnlist_url 'https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/accelerated-domains.china.conf'
|
||||||
list chnlist_url 'https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/apple.china.conf'
|
list chnlist_url 'https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/apple.china.conf'
|
||||||
option v2ray_location_asset '/usr/share/v2ray/'
|
option v2ray_location_asset '/usr/share/v2ray/'
|
||||||
option geoip_url 'https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat'
|
option geoip_url 'https://github.com/Loyalsoldier/geoip/releases/latest/download/geoip.dat'
|
||||||
option geosite_url 'https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat'
|
option geosite_url 'https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat'
|
||||||
|
|
||||||
config global_app
|
config global_app
|
||||||
|
@@ -33,14 +33,14 @@ local gfwlist_url = uci:get(name, "@global_rules[0]", "gfwlist_url") or {"https:
|
|||||||
local chnroute_url = uci:get(name, "@global_rules[0]", "chnroute_url") or {"https://ispip.clang.cn/all_cn.txt"}
|
local chnroute_url = uci:get(name, "@global_rules[0]", "chnroute_url") or {"https://ispip.clang.cn/all_cn.txt"}
|
||||||
local chnroute6_url = uci:get(name, "@global_rules[0]", "chnroute6_url") or {"https://ispip.clang.cn/all_cn_ipv6.txt"}
|
local chnroute6_url = uci:get(name, "@global_rules[0]", "chnroute6_url") or {"https://ispip.clang.cn/all_cn_ipv6.txt"}
|
||||||
local chnlist_url = uci:get(name, "@global_rules[0]", "chnlist_url") or {"https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/accelerated-domains.china.conf","https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/apple.china.conf","https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/google.china.conf"}
|
local chnlist_url = uci:get(name, "@global_rules[0]", "chnlist_url") or {"https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/accelerated-domains.china.conf","https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/apple.china.conf","https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/google.china.conf"}
|
||||||
local geoip_url = uci:get(name, "@global_rules[0]", "geoip_url") or "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat"
|
local geoip_url = uci:get(name, "@global_rules[0]", "geoip_url") or "https://github.com/Loyalsoldier/geoip/releases/latest/download/geoip.dat"
|
||||||
local geosite_url = uci:get(name, "@global_rules[0]", "geosite_url") or "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"
|
local geosite_url = uci:get(name, "@global_rules[0]", "geosite_url") or "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"
|
||||||
local asset_location = uci:get(name, "@global_rules[0]", "v2ray_location_asset") or "/usr/share/v2ray/"
|
local asset_location = uci:get(name, "@global_rules[0]", "v2ray_location_asset") or "/usr/share/v2ray/"
|
||||||
local use_nft = uci:get(name, "@global_forwarding[0]", "use_nft") or "0"
|
local use_nft = uci:get(name, "@global_forwarding[0]", "use_nft") or "0"
|
||||||
|
|
||||||
--兼容旧版本geo下载方式的配置,择机删除。
|
--兼容旧版本geo下载方式的配置,择机删除。
|
||||||
if geoip_url:match(".*/([^/]+)$") == "latest" then
|
if geoip_url:match(".*/([^/]+)$") == "latest" then
|
||||||
geoip_url = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat"
|
geoip_url = "https://github.com/Loyalsoldier/geoip/releases/latest/download/geoip.dat"
|
||||||
end
|
end
|
||||||
if geosite_url:match(".*/([^/]+)$") == "latest" then
|
if geosite_url:match(".*/([^/]+)$") == "latest" then
|
||||||
geosite_url = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"
|
geosite_url = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"
|
||||||
@@ -203,7 +203,7 @@ local function fetch_rule(rule_name,rule_type,url,exclude_domain)
|
|||||||
elseif rule_type == "ip4" then
|
elseif rule_type == "ip4" then
|
||||||
local out = io.open(unsort_file_tmp, "a")
|
local out = io.open(unsort_file_tmp, "a")
|
||||||
for line in io.lines(download_file_tmp..k) do
|
for line in io.lines(download_file_tmp..k) do
|
||||||
if string.match(line, ip4_ipset_pattern) and not string.match(line, "^0%.0%.0%.0(/%d+)?$") then
|
if string.match(line, ip4_ipset_pattern) and not string.match(line, "^0%..*") then
|
||||||
out:write(string.format("%s\n", line))
|
out:write(string.format("%s\n", line))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -235,7 +235,7 @@ local function fetch_rule(rule_name,rule_type,url,exclude_domain)
|
|||||||
end
|
end
|
||||||
out:close()
|
out:close()
|
||||||
end
|
end
|
||||||
sys.call("cat " ..unsort_file_tmp.. " | sort -u > "..file_tmp)
|
sys.call("LC_ALL=C sort -u " .. unsort_file_tmp .. " > " .. file_tmp)
|
||||||
os.remove(unsort_file_tmp)
|
os.remove(unsort_file_tmp)
|
||||||
|
|
||||||
local old_md5 = sys.exec("echo -n $(md5sum " .. rule_path .. "/" ..rule_name.. " | awk '{print $1}')"):gsub("\n", "")
|
local old_md5 = sys.exec("echo -n $(md5sum " .. rule_path .. "/" ..rule_name.. " | awk '{print $1}')"):gsub("\n", "")
|
||||||
|
@@ -15,11 +15,11 @@ import (
|
|||||||
"github.com/sagernet/sing-box/log"
|
"github.com/sagernet/sing-box/log"
|
||||||
"github.com/sagernet/sing-box/option"
|
"github.com/sagernet/sing-box/option"
|
||||||
"github.com/sagernet/sing-box/transport/v2ray"
|
"github.com/sagernet/sing-box/transport/v2ray"
|
||||||
"github.com/sagernet/sing-vmess"
|
|
||||||
"github.com/sagernet/sing-vmess/packetaddr"
|
"github.com/sagernet/sing-vmess/packetaddr"
|
||||||
"github.com/sagernet/sing-vmess/vless"
|
"github.com/sagernet/sing-vmess/vless"
|
||||||
"github.com/sagernet/sing/common"
|
"github.com/sagernet/sing/common"
|
||||||
"github.com/sagernet/sing/common/auth"
|
"github.com/sagernet/sing/common/auth"
|
||||||
|
"github.com/sagernet/sing/common/bufio"
|
||||||
E "github.com/sagernet/sing/common/exceptions"
|
E "github.com/sagernet/sing/common/exceptions"
|
||||||
F "github.com/sagernet/sing/common/format"
|
F "github.com/sagernet/sing/common/format"
|
||||||
"github.com/sagernet/sing/common/logger"
|
"github.com/sagernet/sing/common/logger"
|
||||||
@@ -189,7 +189,7 @@ func (h *Inbound) newPacketConnectionEx(ctx context.Context, conn N.PacketConn,
|
|||||||
}
|
}
|
||||||
if metadata.Destination.Fqdn == packetaddr.SeqPacketMagicAddress {
|
if metadata.Destination.Fqdn == packetaddr.SeqPacketMagicAddress {
|
||||||
metadata.Destination = M.Socksaddr{}
|
metadata.Destination = M.Socksaddr{}
|
||||||
conn = packetaddr.NewConn(conn.(vmess.PacketConn), metadata.Destination)
|
conn = packetaddr.NewConn(bufio.NewNetPacketConn(conn), metadata.Destination)
|
||||||
h.logger.InfoContext(ctx, "[", user, "] inbound packet addr connection")
|
h.logger.InfoContext(ctx, "[", user, "] inbound packet addr connection")
|
||||||
} else {
|
} else {
|
||||||
h.logger.InfoContext(ctx, "[", user, "] inbound packet connection to ", metadata.Destination)
|
h.logger.InfoContext(ctx, "[", user, "] inbound packet connection to ", metadata.Destination)
|
||||||
|
@@ -19,6 +19,7 @@ import (
|
|||||||
"github.com/sagernet/sing-vmess/packetaddr"
|
"github.com/sagernet/sing-vmess/packetaddr"
|
||||||
"github.com/sagernet/sing/common"
|
"github.com/sagernet/sing/common"
|
||||||
"github.com/sagernet/sing/common/auth"
|
"github.com/sagernet/sing/common/auth"
|
||||||
|
"github.com/sagernet/sing/common/bufio"
|
||||||
E "github.com/sagernet/sing/common/exceptions"
|
E "github.com/sagernet/sing/common/exceptions"
|
||||||
F "github.com/sagernet/sing/common/format"
|
F "github.com/sagernet/sing/common/format"
|
||||||
"github.com/sagernet/sing/common/logger"
|
"github.com/sagernet/sing/common/logger"
|
||||||
@@ -203,7 +204,7 @@ func (h *Inbound) newPacketConnectionEx(ctx context.Context, conn N.PacketConn,
|
|||||||
}
|
}
|
||||||
if metadata.Destination.Fqdn == packetaddr.SeqPacketMagicAddress {
|
if metadata.Destination.Fqdn == packetaddr.SeqPacketMagicAddress {
|
||||||
metadata.Destination = M.Socksaddr{}
|
metadata.Destination = M.Socksaddr{}
|
||||||
conn = packetaddr.NewConn(conn.(vmess.PacketConn), metadata.Destination)
|
conn = packetaddr.NewConn(bufio.NewNetPacketConn(conn), metadata.Destination)
|
||||||
h.logger.InfoContext(ctx, "[", user, "] inbound packet addr connection")
|
h.logger.InfoContext(ctx, "[", user, "] inbound packet addr connection")
|
||||||
} else {
|
} else {
|
||||||
h.logger.InfoContext(ctx, "[", user, "] inbound packet connection to ", metadata.Destination)
|
h.logger.InfoContext(ctx, "[", user, "] inbound packet connection to ", metadata.Destination)
|
||||||
|
@@ -381,8 +381,6 @@ config provider 'sub_Airport'
|
|||||||
list exclude_filter '重置|到期|过期|剩余|套餐'
|
list exclude_filter '重置|到期|过期|剩余|套餐'
|
||||||
list exclude_filter '海外用户|回国'
|
list exclude_filter '海外用户|回国'
|
||||||
option override_prefix '[Airport] '
|
option override_prefix '[Airport] '
|
||||||
option override_tfo '1'
|
|
||||||
option override_mptcp '1'
|
|
||||||
|
|
||||||
config ruleset 'rule_ChinaDNS'
|
config ruleset 'rule_ChinaDNS'
|
||||||
option label 'ChinaDNS'
|
option label 'ChinaDNS'
|
||||||
|
@@ -380,8 +380,6 @@ config provider 'sub_Airport'
|
|||||||
list exclude_filter '重置|到期|过期|剩余|套餐'
|
list exclude_filter '重置|到期|过期|剩余|套餐'
|
||||||
list exclude_filter '海外用户|回国'
|
list exclude_filter '海外用户|回国'
|
||||||
option override_prefix '[Airport] '
|
option override_prefix '[Airport] '
|
||||||
option override_tfo '1'
|
|
||||||
option override_mptcp '1'
|
|
||||||
|
|
||||||
config ruleset 'rule_ChinaDNS'
|
config ruleset 'rule_ChinaDNS'
|
||||||
option label 'ChinaDNS'
|
option label 'ChinaDNS'
|
||||||
|
@@ -1,14 +1,17 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Initialize necessary directories
|
||||||
for d in certs provider ruleset resources templates; do
|
for d in certs provider ruleset resources templates; do
|
||||||
mkdir -p "/etc/fchomo/$d/" 2>/dev/null
|
mkdir -p "/etc/fchomo/$d/" 2>/dev/null
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Initialize default mixed port authentication
|
||||||
if ! uci -q get fchomo.global.authentication >/dev/null; then
|
if ! uci -q get fchomo.global.authentication >/dev/null; then
|
||||||
uci add_list fchomo.global.authentication="fchomodef:$(cat /proc/sys/kernel/random/uuid)"
|
uci add_list fchomo.global.authentication="fchomodef:$(cat /proc/sys/kernel/random/uuid)"
|
||||||
uci commit fchomo
|
uci commit fchomo
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Initialize the default direct list
|
||||||
if [ ! -s "/etc/fchomo/resources/direct_list.yaml" ]; then
|
if [ ! -s "/etc/fchomo/resources/direct_list.yaml" ]; then
|
||||||
cat <<- EOF > "/etc/fchomo/resources/direct_list.yaml"
|
cat <<- EOF > "/etc/fchomo/resources/direct_list.yaml"
|
||||||
FQDN:
|
FQDN:
|
||||||
@@ -19,6 +22,7 @@ if [ ! -s "/etc/fchomo/resources/direct_list.yaml" ]; then
|
|||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Initialize the default proxy list
|
||||||
if [ ! -s "/etc/fchomo/resources/proxy_list.yaml" ]; then
|
if [ ! -s "/etc/fchomo/resources/proxy_list.yaml" ]; then
|
||||||
cat <<- EOF > "/etc/fchomo/resources/proxy_list.yaml"
|
cat <<- EOF > "/etc/fchomo/resources/proxy_list.yaml"
|
||||||
FQDN:
|
FQDN:
|
||||||
@@ -43,6 +47,7 @@ if [ ! -s "/etc/fchomo/resources/proxy_list.yaml" ]; then
|
|||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Initialize the default hosts
|
||||||
if [ ! -s "/etc/fchomo/templates/hosts.yaml" ]; then
|
if [ ! -s "/etc/fchomo/templates/hosts.yaml" ]; then
|
||||||
cat <<- EOF > "/etc/fchomo/templates/hosts.yaml"
|
cat <<- EOF > "/etc/fchomo/templates/hosts.yaml"
|
||||||
hosts:
|
hosts:
|
||||||
@@ -55,6 +60,7 @@ if [ ! -s "/etc/fchomo/templates/hosts.yaml" ]; then
|
|||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Initialize default firewall table
|
||||||
uci -q batch <<-EOF >"/dev/null"
|
uci -q batch <<-EOF >"/dev/null"
|
||||||
delete firewall.fchomo_pre
|
delete firewall.fchomo_pre
|
||||||
set firewall.fchomo_pre=include
|
set firewall.fchomo_pre=include
|
||||||
@@ -70,4 +76,10 @@ uci -q batch <<-EOF >"/dev/null"
|
|||||||
commit firewall
|
commit firewall
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
# fix dnsmasq
|
||||||
|
if ! uci -q get dhcp.@dnsmasq[0].cache_rr|grep -q '\bANY\b'; then
|
||||||
|
uci add_list dhcp.@dnsmasq[0].cache_rr="ANY"
|
||||||
|
uci commit dhcp
|
||||||
|
fi
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
@@ -1,4 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
# Migration script for fchomo rules & sub-rules
|
||||||
|
# Used to migrate LuCI application routing rules and sub-rules from `mihomo` format to `json` format.
|
||||||
|
|
||||||
. /lib/functions.sh
|
. /lib/functions.sh
|
||||||
. /usr/share/libubox/jshn.sh
|
. /usr/share/libubox/jshn.sh
|
||||||
|
@@ -30,11 +30,13 @@ o:value("https://ispip.clang.cn/all_cn.txt", translate("Clang.CN"))
|
|||||||
o:value("https://ispip.clang.cn/all_cn_cidr.txt", translate("Clang.CN.CIDR"))
|
o:value("https://ispip.clang.cn/all_cn_cidr.txt", translate("Clang.CN.CIDR"))
|
||||||
o:value("https://fastly.jsdelivr.net/gh/soffchen/GeoIP2-CN@release/CN-ip-cidr.txt", translate("soffchen/GeoIP2-CN"))
|
o:value("https://fastly.jsdelivr.net/gh/soffchen/GeoIP2-CN@release/CN-ip-cidr.txt", translate("soffchen/GeoIP2-CN"))
|
||||||
o:value("https://fastly.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/CN-ip-cidr.txt", translate("Hackl0us/GeoIP2-CN"))
|
o:value("https://fastly.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/CN-ip-cidr.txt", translate("Hackl0us/GeoIP2-CN"))
|
||||||
|
o:value("https://fastly.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/ChinaMax/ChinaMax_IP_No_IPv6.txt", translate("ios_rule_script/ChinaMax_IP_No_IPv6"))
|
||||||
|
|
||||||
----chnroute6 URL
|
----chnroute6 URL
|
||||||
o = s:option(DynamicList, "chnroute6_url", translate("China IPv6s(chnroute6) Update URL"))
|
o = s:option(DynamicList, "chnroute6_url", translate("China IPv6s(chnroute6) Update URL"))
|
||||||
o:value("https://fastly.jsdelivr.net/gh/gaoyifan/china-operator-ip@ip-lists/china6.txt", translate("gaoyifan/china-operator-ip/china6"))
|
o:value("https://fastly.jsdelivr.net/gh/gaoyifan/china-operator-ip@ip-lists/china6.txt", translate("gaoyifan/china-operator-ip/china6"))
|
||||||
o:value("https://ispip.clang.cn/all_cn_ipv6.txt", translate("Clang.CN.IPv6"))
|
o:value("https://ispip.clang.cn/all_cn_ipv6.txt", translate("Clang.CN.IPv6"))
|
||||||
|
o:value("https://fastly.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/ChinaMax/ChinaMax_IP.txt", translate("ios_rule_script/ChinaMax_IP"))
|
||||||
|
|
||||||
----chnlist URL
|
----chnlist URL
|
||||||
o = s:option(DynamicList, "chnlist_url", translate("China List(Chnlist) Update URL"))
|
o = s:option(DynamicList, "chnlist_url", translate("China List(Chnlist) Update URL"))
|
||||||
@@ -48,11 +50,11 @@ o:value("https://fastly.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule
|
|||||||
|
|
||||||
if has_xray or has_singbox then
|
if has_xray or has_singbox then
|
||||||
o = s:option(ListValue, "geoip_url", translate("GeoIP Update URL"))
|
o = s:option(ListValue, "geoip_url", translate("GeoIP Update URL"))
|
||||||
o:value("https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat", translate("Loyalsoldier/geoip"))
|
o:value("https://github.com/Loyalsoldier/geoip/releases/latest/download/geoip.dat", translate("Loyalsoldier/geoip"))
|
||||||
o:value("https://github.com/MetaCubeX/meta-rules-dat/releases/latest/download/geoip.dat", translate("MetaCubeX/geoip"))
|
o:value("https://github.com/MetaCubeX/meta-rules-dat/releases/latest/download/geoip.dat", translate("MetaCubeX/geoip"))
|
||||||
o:value("https://fastly.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat", translate("Loyalsoldier/geoip (CDN)"))
|
o:value("https://fastly.jsdelivr.net/gh/Loyalsoldier/geoip@release/geoip.dat", translate("Loyalsoldier/geoip (CDN)"))
|
||||||
o:value("https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat", translate("MetaCubeX/geoip (CDN)"))
|
o:value("https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat", translate("MetaCubeX/geoip (CDN)"))
|
||||||
o.default = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat"
|
o.default = "https://github.com/Loyalsoldier/geoip/releases/latest/download/geoip.dat"
|
||||||
|
|
||||||
o = s:option(ListValue, "geosite_url", translate("Geosite Update URL"))
|
o = s:option(ListValue, "geosite_url", translate("Geosite Update URL"))
|
||||||
o:value("https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat", translate("Loyalsoldier/geosite"))
|
o:value("https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat", translate("Loyalsoldier/geosite"))
|
||||||
|
@@ -72,7 +72,7 @@ config global_rules
|
|||||||
list chnlist_url 'https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/accelerated-domains.china.conf'
|
list chnlist_url 'https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/accelerated-domains.china.conf'
|
||||||
list chnlist_url 'https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/apple.china.conf'
|
list chnlist_url 'https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/apple.china.conf'
|
||||||
option v2ray_location_asset '/usr/share/v2ray/'
|
option v2ray_location_asset '/usr/share/v2ray/'
|
||||||
option geoip_url 'https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat'
|
option geoip_url 'https://github.com/Loyalsoldier/geoip/releases/latest/download/geoip.dat'
|
||||||
option geosite_url 'https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat'
|
option geosite_url 'https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat'
|
||||||
|
|
||||||
config global_app
|
config global_app
|
||||||
|
@@ -33,14 +33,14 @@ local gfwlist_url = uci:get(name, "@global_rules[0]", "gfwlist_url") or {"https:
|
|||||||
local chnroute_url = uci:get(name, "@global_rules[0]", "chnroute_url") or {"https://ispip.clang.cn/all_cn.txt"}
|
local chnroute_url = uci:get(name, "@global_rules[0]", "chnroute_url") or {"https://ispip.clang.cn/all_cn.txt"}
|
||||||
local chnroute6_url = uci:get(name, "@global_rules[0]", "chnroute6_url") or {"https://ispip.clang.cn/all_cn_ipv6.txt"}
|
local chnroute6_url = uci:get(name, "@global_rules[0]", "chnroute6_url") or {"https://ispip.clang.cn/all_cn_ipv6.txt"}
|
||||||
local chnlist_url = uci:get(name, "@global_rules[0]", "chnlist_url") or {"https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/accelerated-domains.china.conf","https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/apple.china.conf","https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/google.china.conf"}
|
local chnlist_url = uci:get(name, "@global_rules[0]", "chnlist_url") or {"https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/accelerated-domains.china.conf","https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/apple.china.conf","https://fastly.jsdelivr.net/gh/felixonmars/dnsmasq-china-list/google.china.conf"}
|
||||||
local geoip_url = uci:get(name, "@global_rules[0]", "geoip_url") or "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat"
|
local geoip_url = uci:get(name, "@global_rules[0]", "geoip_url") or "https://github.com/Loyalsoldier/geoip/releases/latest/download/geoip.dat"
|
||||||
local geosite_url = uci:get(name, "@global_rules[0]", "geosite_url") or "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"
|
local geosite_url = uci:get(name, "@global_rules[0]", "geosite_url") or "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"
|
||||||
local asset_location = uci:get(name, "@global_rules[0]", "v2ray_location_asset") or "/usr/share/v2ray/"
|
local asset_location = uci:get(name, "@global_rules[0]", "v2ray_location_asset") or "/usr/share/v2ray/"
|
||||||
local use_nft = uci:get(name, "@global_forwarding[0]", "use_nft") or "0"
|
local use_nft = uci:get(name, "@global_forwarding[0]", "use_nft") or "0"
|
||||||
|
|
||||||
--兼容旧版本geo下载方式的配置,择机删除。
|
--兼容旧版本geo下载方式的配置,择机删除。
|
||||||
if geoip_url:match(".*/([^/]+)$") == "latest" then
|
if geoip_url:match(".*/([^/]+)$") == "latest" then
|
||||||
geoip_url = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat"
|
geoip_url = "https://github.com/Loyalsoldier/geoip/releases/latest/download/geoip.dat"
|
||||||
end
|
end
|
||||||
if geosite_url:match(".*/([^/]+)$") == "latest" then
|
if geosite_url:match(".*/([^/]+)$") == "latest" then
|
||||||
geosite_url = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"
|
geosite_url = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"
|
||||||
@@ -203,7 +203,7 @@ local function fetch_rule(rule_name,rule_type,url,exclude_domain)
|
|||||||
elseif rule_type == "ip4" then
|
elseif rule_type == "ip4" then
|
||||||
local out = io.open(unsort_file_tmp, "a")
|
local out = io.open(unsort_file_tmp, "a")
|
||||||
for line in io.lines(download_file_tmp..k) do
|
for line in io.lines(download_file_tmp..k) do
|
||||||
if string.match(line, ip4_ipset_pattern) and not string.match(line, "^0%.0%.0%.0(/%d+)?$") then
|
if string.match(line, ip4_ipset_pattern) and not string.match(line, "^0%..*") then
|
||||||
out:write(string.format("%s\n", line))
|
out:write(string.format("%s\n", line))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -235,7 +235,7 @@ local function fetch_rule(rule_name,rule_type,url,exclude_domain)
|
|||||||
end
|
end
|
||||||
out:close()
|
out:close()
|
||||||
end
|
end
|
||||||
sys.call("cat " ..unsort_file_tmp.. " | sort -u > "..file_tmp)
|
sys.call("LC_ALL=C sort -u " .. unsort_file_tmp .. " > " .. file_tmp)
|
||||||
os.remove(unsort_file_tmp)
|
os.remove(unsort_file_tmp)
|
||||||
|
|
||||||
local old_md5 = sys.exec("echo -n $(md5sum " .. rule_path .. "/" ..rule_name.. " | awk '{print $1}')"):gsub("\n", "")
|
local old_md5 = sys.exec("echo -n $(md5sum " .. rule_path .. "/" ..rule_name.. " | awk '{print $1}')"):gsub("\n", "")
|
||||||
|
@@ -5,12 +5,12 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=mihomo
|
PKG_NAME:=mihomo
|
||||||
PKG_VERSION:=1.19.11
|
PKG_VERSION:=1.19.12
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=https://codeload.github.com/metacubex/mihomo/tar.gz/v$(PKG_VERSION)?
|
PKG_SOURCE_URL:=https://codeload.github.com/metacubex/mihomo/tar.gz/v$(PKG_VERSION)?
|
||||||
PKG_HASH:=72730aff2c89f1cba60bfc9318e17ac8161db4e6c69bd24b54eb37f9fa646540
|
PKG_HASH:=9f2d029f7d074cb2f0f9c7bc59f47fddf48bd9ce2ce3532cd91d00fd89ee25f7
|
||||||
|
|
||||||
PKG_MAINTAINER:=Anya Lin <hukk1996@gmail.com>
|
PKG_MAINTAINER:=Anya Lin <hukk1996@gmail.com>
|
||||||
PKG_LICENSE:=GPL-2.0
|
PKG_LICENSE:=GPL-2.0
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<Project>
|
<Project>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Version>7.13.4</Version>
|
<Version>7.13.5</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
@@ -130,7 +130,7 @@ public sealed class CoreInfoHandler
|
|||||||
{
|
{
|
||||||
CoreType = ECoreType.hysteria,
|
CoreType = ECoreType.hysteria,
|
||||||
CoreExes = ["hysteria"],
|
CoreExes = ["hysteria"],
|
||||||
Arguments = "",
|
Arguments = "-c {0}",
|
||||||
Url = GetCoreUrl(ECoreType.hysteria),
|
Url = GetCoreUrl(ECoreType.hysteria),
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -180,7 +180,7 @@ public sealed class CoreInfoHandler
|
|||||||
{
|
{
|
||||||
CoreType = ECoreType.hysteria2,
|
CoreType = ECoreType.hysteria2,
|
||||||
CoreExes = ["hysteria-windows-amd64", "hysteria-linux-amd64", "hysteria"],
|
CoreExes = ["hysteria-windows-amd64", "hysteria-linux-amd64", "hysteria"],
|
||||||
Arguments = "",
|
Arguments = "-c {0}",
|
||||||
Url = GetCoreUrl(ECoreType.hysteria2),
|
Url = GetCoreUrl(ECoreType.hysteria2),
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@@ -33,16 +33,20 @@ class StreaksBaseIE(InfoExtractor):
|
|||||||
**(headers or {}),
|
**(headers or {}),
|
||||||
})
|
})
|
||||||
except ExtractorError as e:
|
except ExtractorError as e:
|
||||||
if isinstance(e.cause, HTTPError) and e.cause.status in {403, 404}:
|
if isinstance(e.cause, HTTPError) and e.cause.status in (403, 404):
|
||||||
error = self._parse_json(e.cause.response.read().decode(), media_id, fatal=False)
|
error = self._parse_json(e.cause.response.read().decode(), media_id, fatal=False)
|
||||||
message = traverse_obj(error, ('message', {str}))
|
message = traverse_obj(error, ('message', {str}))
|
||||||
code = traverse_obj(error, ('code', {str}))
|
code = traverse_obj(error, ('code', {str}))
|
||||||
|
error_id = traverse_obj(error, ('id', {int}))
|
||||||
if code == 'REQUEST_FAILED':
|
if code == 'REQUEST_FAILED':
|
||||||
self.raise_geo_restricted(message, countries=self._GEO_COUNTRIES)
|
if error_id == 124:
|
||||||
elif code == 'MEDIA_NOT_FOUND':
|
self.raise_geo_restricted(countries=self._GEO_COUNTRIES)
|
||||||
raise ExtractorError(message, expected=True)
|
elif error_id == 126:
|
||||||
elif code or message:
|
raise ExtractorError('Access is denied (possibly due to invalid/missing API key)')
|
||||||
raise ExtractorError(join_nonempty(code, message, delim=': '))
|
if code == 'MEDIA_NOT_FOUND':
|
||||||
|
raise ExtractorError(join_nonempty(code, message, delim=': '), expected=True)
|
||||||
|
if code or message:
|
||||||
|
raise ExtractorError(join_nonempty(code, error_id, message, delim=': '))
|
||||||
raise
|
raise
|
||||||
|
|
||||||
streaks_id = response['id']
|
streaks_id = response['id']
|
||||||
|
@@ -1,12 +1,16 @@
|
|||||||
|
import datetime as dt
|
||||||
|
|
||||||
from .streaks import StreaksBaseIE
|
from .streaks import StreaksBaseIE
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
|
GeoRestrictedError,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
join_nonempty,
|
join_nonempty,
|
||||||
make_archive_id,
|
make_archive_id,
|
||||||
smuggle_url,
|
smuggle_url,
|
||||||
str_or_none,
|
str_or_none,
|
||||||
strip_or_none,
|
strip_or_none,
|
||||||
|
time_seconds,
|
||||||
update_url_query,
|
update_url_query,
|
||||||
)
|
)
|
||||||
from ..utils.traversal import require, traverse_obj
|
from ..utils.traversal import require, traverse_obj
|
||||||
@@ -96,6 +100,7 @@ class TVerIE(StreaksBaseIE):
|
|||||||
'Referer': 'https://tver.jp/',
|
'Referer': 'https://tver.jp/',
|
||||||
}
|
}
|
||||||
_PLATFORM_QUERY = {}
|
_PLATFORM_QUERY = {}
|
||||||
|
_STREAKS_API_INFO = {}
|
||||||
|
|
||||||
def _real_initialize(self):
|
def _real_initialize(self):
|
||||||
session_info = self._download_json(
|
session_info = self._download_json(
|
||||||
@@ -105,6 +110,9 @@ class TVerIE(StreaksBaseIE):
|
|||||||
'platform_uid': 'platform_uid',
|
'platform_uid': 'platform_uid',
|
||||||
'platform_token': 'platform_token',
|
'platform_token': 'platform_token',
|
||||||
}))
|
}))
|
||||||
|
self._STREAKS_API_INFO = self._download_json(
|
||||||
|
'https://player.tver.jp/player/streaks_info_v2.json', None,
|
||||||
|
'Downloading STREAKS API info', 'Unable to download STREAKS API info')
|
||||||
|
|
||||||
def _call_platform_api(self, path, video_id, note=None, fatal=True, query=None):
|
def _call_platform_api(self, path, video_id, note=None, fatal=True, query=None):
|
||||||
return self._download_json(
|
return self._download_json(
|
||||||
@@ -219,15 +227,26 @@ class TVerIE(StreaksBaseIE):
|
|||||||
'_type': 'url_transparent',
|
'_type': 'url_transparent',
|
||||||
'url': smuggle_url(
|
'url': smuggle_url(
|
||||||
self.BRIGHTCOVE_URL_TEMPLATE % (account_id, brightcove_id),
|
self.BRIGHTCOVE_URL_TEMPLATE % (account_id, brightcove_id),
|
||||||
{'geo_countries': ['JP']}),
|
{'geo_countries': self._GEO_COUNTRIES}),
|
||||||
'ie_key': 'BrightcoveNew',
|
'ie_key': 'BrightcoveNew',
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
project_id = video_info['streaks']['projectID']
|
||||||
**self._extract_from_streaks_api(video_info['streaks']['projectID'], streaks_id, {
|
key_idx = dt.datetime.fromtimestamp(time_seconds(hours=9), dt.timezone.utc).month % 6 or 6
|
||||||
|
|
||||||
|
try:
|
||||||
|
streaks_info = self._extract_from_streaks_api(project_id, streaks_id, {
|
||||||
'Origin': 'https://tver.jp',
|
'Origin': 'https://tver.jp',
|
||||||
'Referer': 'https://tver.jp/',
|
'Referer': 'https://tver.jp/',
|
||||||
}),
|
'X-Streaks-Api-Key': self._STREAKS_API_INFO[project_id]['api_key'][f'key0{key_idx}'],
|
||||||
|
})
|
||||||
|
except GeoRestrictedError as e:
|
||||||
|
# Catch and re-raise with metadata_available to support --ignore-no-formats-error
|
||||||
|
self.raise_geo_restricted(e.orig_msg, countries=self._GEO_COUNTRIES, metadata_available=True)
|
||||||
|
streaks_info = {}
|
||||||
|
|
||||||
|
return {
|
||||||
|
**streaks_info,
|
||||||
**metadata,
|
**metadata,
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
'_old_archive_ids': [make_archive_id('BrightcoveNew', brightcove_id)] if brightcove_id else None,
|
'_old_archive_ids': [make_archive_id('BrightcoveNew', brightcove_id)] if brightcove_id else None,
|
||||||
|
Reference in New Issue
Block a user