diff --git a/.gitignore b/.gitignore index f617deccb..41ffebf9a 100644 --- a/.gitignore +++ b/.gitignore @@ -56,4 +56,8 @@ generated # app testing dir app-playground-data/* +# soley because i need the PORT to be 3002 due to WSL stuff +.env +apps/frontend/.env + .astro diff --git a/.idea/daedalus.iml b/.idea/daedalus.iml index 3d715289c..198021c44 100644 --- a/.idea/daedalus.iml +++ b/.idea/daedalus.iml @@ -7,6 +7,11 @@ + + + + + diff --git a/Cargo.lock b/Cargo.lock index eae0fdac3..11eac56e0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,7 +14,7 @@ dependencies = [ "futures-sink", "memchr", "pin-project-lite", - "tokio 1.41.0", + "tokio 1.41.1", "tokio-util", "tracing", ] @@ -90,7 +90,7 @@ dependencies = [ "rand 0.8.5", "sha1 0.10.6", "smallvec 1.13.2", - "tokio 1.41.0", + "tokio 1.41.1", "tokio-util", "tracing", "zstd 0.13.2", @@ -103,7 +103,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -129,7 +129,7 @@ dependencies = [ "serde_json", "serde_plain", "tempfile", - "tokio 1.41.0", + "tokio 1.41.1", ] [[package]] @@ -142,7 +142,7 @@ dependencies = [ "parse-size", "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -168,7 +168,7 @@ checksum = "24eda4e2a6e042aa4e55ac438a2ae052d3b5da0ecf83d7411e1a368946925208" dependencies = [ "actix-macros", "futures-core", - "tokio 1.41.0", + "tokio 1.41.1", ] [[package]] @@ -184,7 +184,7 @@ dependencies = [ "futures-util", "mio 1.0.2", "socket2", - "tokio 1.41.0", + "tokio 1.41.1", "tracing", ] @@ -228,7 +228,7 @@ dependencies = [ "bytes 1.8.0", "bytestring", "cfg-if 1.0.0", - "cookie", + "cookie 0.16.2", "derive_more", "encoding_rs", "futures-core", @@ -260,7 +260,7 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -288,7 +288,7 @@ dependencies = [ "actix-http", "actix-web", "futures-core", - "tokio 1.41.0", + "tokio 1.41.1", ] [[package]] @@ -300,12 +300,6 @@ dependencies = [ "gimli", ] -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "adler2" version = "2.0.0" @@ -373,9 +367,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" [[package]] name = "android-tzdata" @@ -394,15 +388,15 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.91" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" [[package]] name = "arbitrary" -version = "1.3.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" dependencies = [ "derive_arbitrary", ] @@ -439,9 +433,9 @@ checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" [[package]] name = "ashpd" -version = "0.9.2" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d43c03d9e36dd40cab48435be0b09646da362c278223ca535493877b2c1dee9" +checksum = "e9c39d707614dbcc6bed00015539f488d8e3fe3e66ed60961efc0c90f4b380b3" dependencies = [ "enumflags2", "futures-channel", @@ -450,12 +444,12 @@ dependencies = [ "raw-window-handle 0.6.2", "serde", "serde_repr", - "tokio 1.41.0", + "tokio 1.41.1", "url", "wayland-backend", "wayland-client", "wayland-protocols", - "zbus", + "zbus 5.1.1", ] [[package]] @@ -507,7 +501,7 @@ dependencies = [ "futures-io", "memchr", "pin-project-lite", - "tokio 1.41.0", + "tokio 1.41.1", "xz2", "zstd 0.13.2", "zstd-safe 7.2.1", @@ -521,8 +515,8 @@ checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.1.1", - "futures-lite 2.3.0", + "fastrand 2.2.0", + "futures-lite 2.5.0", "slab", ] @@ -534,22 +528,22 @@ checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" dependencies = [ "async-lock", "blocking", - "futures-lite 2.3.0", + "futures-lite 2.5.0", ] [[package]] name = "async-io" -version = "2.3.4" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ "async-lock", "cfg-if 1.0.0", "concurrent-queue", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "parking", - "polling 3.7.3", + "polling 3.7.4", "rustix", "slab", "tracing", @@ -581,7 +575,7 @@ dependencies = [ "blocking", "cfg-if 1.0.0", "event-listener 5.3.1", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "rustix", "tracing", ] @@ -594,7 +588,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -635,8 +629,8 @@ dependencies = [ "sha2 0.10.8", "smart-default", "smol_str", - "thiserror", - "tokio 1.41.0", + "thiserror 1.0.69", + "tokio 1.41.1", "uuid 0.8.2", ] @@ -654,7 +648,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -668,10 +662,10 @@ dependencies = [ "log", "pin-project-lite", "rustls-pki-types", - "tokio 1.41.0", + "tokio 1.41.1", "tokio-rustls 0.26.0", "tungstenite", - "webpki-roots", + "webpki-roots 0.26.6", ] [[package]] @@ -683,10 +677,10 @@ dependencies = [ "async-compression", "chrono", "crc32fast", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "pin-project", - "thiserror", - "tokio 1.41.0", + "thiserror 1.0.69", + "tokio 1.41.1", "tokio-util", ] @@ -737,23 +731,12 @@ dependencies = [ "http 0.2.12", "log", "native-tls", + "rustls 0.20.9", "serde", "serde_json", "url", -] - -[[package]] -name = "attohttpc" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f77d243921b0979fbbd728dd2d5162e68ac8252976797c24eb5b3a6af9090dc" -dependencies = [ - "http 0.2.12", - "log", - "native-tls", - "serde", - "serde_json", - "url", + "webpki", + "webpki-roots 0.22.6", ] [[package]] @@ -768,30 +751,13 @@ version = "0.34.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3776743bb68d4ad02ba30ba8f64373f1be4e082fe47651767171ce75bb2f6cf5" dependencies = [ - "attohttpc 0.22.0", + "attohttpc", "dirs 4.0.0", "log", "quick-xml 0.26.0", "rust-ini 0.18.0", "serde", - "thiserror", - "time", - "url", -] - -[[package]] -name = "aws-creds" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390ad3b77f3e21e01a4a0355865853b681daf1988510b0b15e31c0c4ae7eb0f6" -dependencies = [ - "attohttpc 0.26.1", - "home", - "log", - "quick-xml 0.30.0", - "rust-ini 0.19.0", - "serde", - "thiserror", + "thiserror 1.0.69", "time", "url", ] @@ -802,7 +768,7 @@ version = "0.25.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9aed3f9c7eac9be28662fdb3b0f4d1951e812f7c64fed4f0327ba702f459b3b" dependencies = [ - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -814,7 +780,7 @@ dependencies = [ "addr2line", "cfg-if 1.0.0", "libc", - "miniz_oxide 0.8.0", + "miniz_oxide", "object", "rustc-demangle", "windows-targets 0.52.6", @@ -964,15 +930,15 @@ dependencies = [ "async-channel 2.3.1", "async-task", "futures-io", - "futures-lite 2.3.0", + "futures-lite 2.5.0", "piper", ] [[package]] name = "borsh" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +checksum = "2506947f73ad44e344215ccd6403ac2ae18cd8e046e581a441bf8d199f257f03" dependencies = [ "borsh-derive", "cfg_aliases", @@ -980,16 +946,15 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" +checksum = "c2593a3b8b938bd68373196c9832f516be11fa487ef4ae745eb282e6a56a7244" dependencies = [ "once_cell", "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.82", - "syn_derive", + "syn 2.0.87", ] [[package]] @@ -1026,12 +991,12 @@ dependencies = [ [[package]] name = "bstr" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" +checksum = "1a68f1f47cdf0ec8ee4b941b2eee2a80cb796db73118c0dd09ac63fbe405be22" dependencies = [ "memchr", - "regex-automata 0.4.8", + "regex-automata 0.4.9", "serde", ] @@ -1141,7 +1106,7 @@ dependencies = [ "glib", "libc", "once_cell", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1184,7 +1149,7 @@ dependencies = [ "semver 1.0.23", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1205,9 +1170,9 @@ checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" [[package]] name = "cc" -version = "1.1.31" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" dependencies = [ "jobserver", "libc", @@ -1320,9 +1285,9 @@ dependencies = [ "sealed", "serde", "static_assertions", - "thiserror", + "thiserror 1.0.69", "time", - "tokio 1.41.0", + "tokio 1.41.1", "url", "uuid 1.11.0", ] @@ -1442,7 +1407,7 @@ dependencies = [ "futures-core", "memchr", "pin-project-lite", - "tokio 1.41.0", + "tokio 1.41.1", "tokio-util", ] @@ -1464,7 +1429,7 @@ dependencies = [ "encode_unicode 0.3.6", "lazy_static", "libc", - "unicode-width", + "unicode-width 0.1.14", "windows-sys 0.52.0", ] @@ -1532,6 +1497,16 @@ dependencies = [ "version_check", ] +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "time", + "version_check", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -1608,9 +1583,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" dependencies = [ "libc", ] @@ -1792,14 +1767,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] name = "csv" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" dependencies = [ "csv-core", "itoa 1.0.11", @@ -1823,7 +1798,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -1843,9 +1818,9 @@ dependencies = [ [[package]] name = "curl-sys" -version = "0.4.77+curl-8.10.1" +version = "0.4.78+curl-8.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f469e8a5991f277a208224f6c7ad72ecb5f986e36d09ae1f2c1bb9259478a480" +checksum = "8eec768341c5c7789611ae51cf6c459099f22e64a5d5d0ce4892434e33821eaf" dependencies = [ "cc", "libc", @@ -1865,7 +1840,7 @@ dependencies = [ "chrono", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1882,15 +1857,15 @@ dependencies = [ "indexmap 2.6.0", "itertools 0.13.0", "lazy_static", - "reqwest 0.12.8", - "rust-s3 0.34.0", + "reqwest 0.12.9", + "rust-s3", "semver 1.0.23", "serde", "serde-xml-rs", "serde_json", "sha1_smol", - "thiserror", - "tokio 1.41.0", + "thiserror 1.0.69", + "tokio 1.41.1", "tracing", "tracing-error", "tracing-futures", @@ -1942,7 +1917,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -1964,7 +1939,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -2020,7 +1995,7 @@ checksum = "6541a3916932fe57768d4be0b1ffb5ec7cbf74ca8c903fdfd5c0fe8aa958f0ed" dependencies = [ "deadpool-runtime", "num_cpus", - "tokio 1.41.0", + "tokio 1.41.1", ] [[package]] @@ -2039,7 +2014,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" dependencies = [ - "tokio 1.41.0", + "tokio 1.41.1", ] [[package]] @@ -2087,18 +2062,18 @@ checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] name = "derive_arbitrary" -version = "1.3.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -2142,7 +2117,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -2255,7 +2230,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -2287,7 +2262,7 @@ checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -2414,9 +2389,9 @@ checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449" [[package]] name = "embed-resource" -version = "2.5.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4e24052d7be71f0efb50c201557f6fe7d237cfd5a64fd5bcd7fd8fe32dbbffa" +checksum = "b68b6f9f63a0b6a38bc447d4ce84e2b388f3ec95c99c641c8ff0dd3ef89a6379" dependencies = [ "cc", "memchr", @@ -2446,9 +2421,9 @@ checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if 1.0.0", ] @@ -2477,7 +2452,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -2559,15 +2534,14 @@ dependencies = [ [[package]] name = "exr" -version = "1.72.0" +version = "1.73.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" +checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" dependencies = [ "bit_field", - "flume", "half", "lebe", - "miniz_oxide 0.7.4", + "miniz_oxide", "rayon-core", "smallvec 1.13.2", "zune-inflate", @@ -2594,15 +2568,15 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" [[package]] name = "fdeflate" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8090f921a24b04994d9929e204f50b498a33ea6ba559ffaa05e04f7ee7fb5ab" +checksum = "07c6f4c64c1d33a3111c4466f7365ebdcc37c5bd1ea0d62aae2e3d722aacbedb" dependencies = [ "simd-adler32", ] @@ -2653,21 +2627,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.34" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", - "miniz_oxide 0.8.0", -] - -[[package]] -name = "fluent-uri" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c704e9dbe1ddd863da1e6ff3567795087b1eb201ce80d8fa81162e1516500d" -dependencies = [ - "bitflags 1.3.2", + "miniz_oxide", ] [[package]] @@ -2714,7 +2679,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -2861,11 +2826,11 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" dependencies = [ - "fastrand 2.1.1", + "fastrand 2.2.0", "futures-core", "futures-io", "parking", @@ -2880,7 +2845,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -3066,8 +3031,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if 1.0.0", + "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] @@ -3102,7 +3069,7 @@ dependencies = [ "once_cell", "pin-project-lite", "smallvec 1.13.2", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3138,7 +3105,7 @@ dependencies = [ "memchr", "once_cell", "smallvec 1.13.2", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3152,7 +3119,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -3262,7 +3229,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -3279,7 +3246,7 @@ dependencies = [ "http 0.2.12", "indexmap 2.6.0", "slab", - "tokio 1.41.0", + "tokio 1.41.1", "tokio-util", "tracing", ] @@ -3298,7 +3265,7 @@ dependencies = [ "http 1.1.0", "indexmap 2.6.0", "slab", - "tokio 1.41.0", + "tokio 1.41.1", "tokio-util", "tracing", ] @@ -3322,12 +3289,6 @@ dependencies = [ "ahash 0.7.8", ] -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" - [[package]] name = "hashbrown" version = "0.14.5" @@ -3340,9 +3301,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" [[package]] name = "hashlink" @@ -3573,7 +3534,7 @@ dependencies = [ "itoa 1.0.11", "pin-project-lite", "socket2", - "tokio 1.41.0", + "tokio 1.41.1", "tower-service", "tracing", "want", @@ -3595,7 +3556,7 @@ dependencies = [ "itoa 1.0.11", "pin-project-lite", "smallvec 1.13.2", - "tokio 1.41.0", + "tokio 1.41.1", "want", ] @@ -3610,8 +3571,8 @@ dependencies = [ "hyper 0.14.31", "log", "rustls 0.21.12", - "rustls-native-certs", - "tokio 1.41.0", + "rustls-native-certs 0.6.3", + "tokio 1.41.1", "tokio-rustls 0.24.1", ] @@ -3625,12 +3586,13 @@ dependencies = [ "http 1.1.0", "hyper 1.5.0", "hyper-util", - "rustls 0.23.15", + "rustls 0.23.17", + "rustls-native-certs 0.8.0", "rustls-pki-types", - "tokio 1.41.0", + "tokio 1.41.1", "tokio-rustls 0.26.0", "tower-service", - "webpki-roots", + "webpki-roots 0.26.6", ] [[package]] @@ -3642,7 +3604,7 @@ dependencies = [ "bytes 1.8.0", "hyper 0.14.31", "native-tls", - "tokio 1.41.0", + "tokio 1.41.1", "tokio-native-tls", ] @@ -3657,16 +3619,16 @@ dependencies = [ "hyper 1.5.0", "hyper-util", "native-tls", - "tokio 1.41.0", + "tokio 1.41.1", "tokio-native-tls", "tower-service", ] [[package]] name = "hyper-util" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes 1.8.0", "futures-channel", @@ -3676,7 +3638,7 @@ dependencies = [ "hyper 1.5.0", "pin-project-lite", "socket2", - "tokio 1.41.0", + "tokio 1.41.1", "tower-service", "tracing", ] @@ -3829,7 +3791,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -3850,24 +3812,23 @@ dependencies = [ [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec 1.13.2", + "utf8_iter", ] [[package]] -name = "idna" -version = "1.0.2" +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd69211b9b519e98303c015e21a007e293db403b6c85b9b124e133d25e242cdd" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ "icu_normalizer", "icu_properties", - "smallvec 1.13.2", - "utf8_iter", ] [[package]] @@ -3896,9 +3857,9 @@ dependencies = [ [[package]] name = "image" -version = "0.25.4" +version = "0.25.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc144d44a31d753b02ce64093d532f55ff8dc4ebf2ffb8a63c0dda691385acae" +checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b" dependencies = [ "bytemuck", "byteorder-lite", @@ -3929,21 +3890,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.15.0", + "hashbrown 0.15.1", "serde", ] [[package]] name = "indicatif" -version = "0.17.8" +version = "0.17.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +checksum = "cbf675b85ed934d3c67b5c5469701eec7db22689d0a2139d856e0925fa28b281" dependencies = [ "console", - "instant", "number_prefix", "portable-atomic", - "unicode-width", + "unicode-width 0.2.0", + "web-time", ] [[package]] @@ -4191,7 +4152,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror", + "thiserror 1.0.69", "walkdir", "windows-sys 0.45.0", ] @@ -4229,39 +4190,16 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "json-patch" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b1fb8864823fad91877e6caea0baca82e49e8db50f8e5c9f9a453e27d3330fc" -dependencies = [ - "jsonptr 0.4.7", - "serde", - "serde_json", - "thiserror", -] - [[package]] name = "json-patch" version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" dependencies = [ - "jsonptr 0.6.3", - "serde", - "serde_json", - "thiserror", -] - -[[package]] -name = "jsonptr" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c6e529149475ca0b2820835d3dce8fcc41c6b943ca608d32f35b449255e4627" -dependencies = [ - "fluent-uri", + "jsonptr", "serde", "serde_json", + "thiserror 1.0.69", ] [[package]] @@ -4379,7 +4317,7 @@ dependencies = [ "image 0.24.9", "itertools 0.12.1", "jemallocator", - "json-patch 3.0.1", + "json-patch", "lazy_static", "lettre", "log", @@ -4391,7 +4329,7 @@ dependencies = [ "redis", "regex", "reqwest 0.11.27", - "rust-s3 0.33.0", + "rust-s3", "rust_decimal", "rust_iso3166", "rusty-money", @@ -4405,8 +4343,8 @@ dependencies = [ "spdx", "sqlx", "tar", - "thiserror", - "tokio 1.41.0", + "thiserror 1.0.69", + "tokio 1.41.1", "tokio-stream", "totp-rs", "url", @@ -4445,26 +4383,26 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "lettre" -version = "0.11.9" +version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f204773bab09b150320ea1c83db41dc6ee606a4bc36dc1f43005fe7b58ce06" +checksum = "0161e452348e399deb685ba05e55ee116cae9410f4f51fe42d597361444521d9" dependencies = [ "base64 0.22.1", "chumsky", "email-encoding", "email_address", - "fastrand 2.1.1", + "fastrand 2.2.0", "futures-util", "hostname", "httpdate", - "idna 1.0.2", + "idna 1.0.3", "mime", "native-tls", "nom", "percent-encoding", "quoted_printable", "socket2", - "tokio 1.41.0", + "tokio 1.41.1", "url", ] @@ -4494,9 +4432,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.161" +version = "0.2.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" +checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" [[package]] name = "libdbus-sys" @@ -4530,9 +4468,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] name = "libnghttp2-sys" @@ -4751,7 +4689,7 @@ checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -4806,7 +4744,7 @@ dependencies = [ "meilisearch-index-setting-macro", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "time", "uuid 1.11.0", "wasm-bindgen", @@ -4876,15 +4814,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a05b5d0594e0cb1ad8cee3373018d2b84e25905dc75b2468114cc9a8e86cfc20" -[[package]] -name = "miniz_oxide" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" -dependencies = [ - "adler", -] - [[package]] name = "miniz_oxide" version = "0.8.0" @@ -4964,9 +4893,9 @@ dependencies = [ [[package]] name = "muda" -version = "0.15.1" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8123dfd4996055ac9b15a60ad263b44b01e539007523ad7a4a533a3d93b0591" +checksum = "fdae9c00e61cc0579bcac625e8ad22104c60548a025bfc972dc83868a28e1484" dependencies = [ "crossbeam-channel", "dpi", @@ -4978,7 +4907,7 @@ dependencies = [ "once_cell", "png", "serde", - "thiserror", + "thiserror 1.0.69", "windows-sys 0.59.0", ] @@ -5004,7 +4933,7 @@ dependencies = [ "objc_id", "once_cell", "raw-window-handle 0.5.2", - "thiserror", + "thiserror 1.0.69", "versions", "wfd", "which", @@ -5040,7 +4969,7 @@ dependencies = [ "ndk-sys", "num_enum", "raw-window-handle 0.6.2", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -5264,7 +5193,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -5550,9 +5479,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "open" -version = "5.3.0" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a877bf6abd716642a53ef1b89fb498923a4afca5c754f9050b4d081c05c4b3" +checksum = "3ecd52f0b8d15c40ce4820aa251ed5de032e5d91fab27f7db2f40d42a8bdf69c" dependencies = [ "is-wsl", "libc", @@ -5595,7 +5524,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -5606,9 +5535,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "300.4.0+3.4.0" +version = "300.4.1+3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a709e02f2b4aca747929cca5ed248880847c650233cf8b8cdc48f40aaf4898a6" +checksum = "faa4eac4138c62414b5622d1b31c5c304f34b406b013c079c2bbc652fdd6678c" dependencies = [ "cc", ] @@ -5642,16 +5571,6 @@ dependencies = [ "hashbrown 0.12.3", ] -[[package]] -name = "ordered-multimap" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ed8acf08e98e744e5384c8bc63ceb0364e68a6854187221c18df61c4797690e" -dependencies = [ - "dlv-list 0.5.2", - "hashbrown 0.13.2", -] - [[package]] name = "ordered-multimap" version = "0.7.3" @@ -5962,7 +5881,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -6010,34 +5929,34 @@ dependencies = [ "serde", "serde_derive", "strum", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "pin-project" -version = "1.1.6" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf123a161dde1e524adf36f90bc5d8d3462824a9c43553ad07a8183161189ec" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.6" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -6052,7 +5971,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.1.1", + "fastrand 2.2.0", "futures-io", ] @@ -6106,7 +6025,7 @@ dependencies = [ "crc32fast", "fdeflate", "flate2", - "miniz_oxide 0.8.0", + "miniz_oxide", ] [[package]] @@ -6127,9 +6046,9 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.3" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if 1.0.0", "concurrent-queue", @@ -6178,7 +6097,7 @@ dependencies = [ "is-terminal", "lazy_static", "term", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] @@ -6293,14 +6212,14 @@ dependencies = [ "memchr", "parking_lot 0.12.3", "procfs", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "psm" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa37f80ca58604976033fae9515a8a2989fc13797d953f7c04fb8fa36a11f205" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" dependencies = [ "cc", ] @@ -6365,16 +6284,6 @@ dependencies = [ "serde", ] -[[package]] -name = "quick-xml" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "quick-xml" version = "0.31.0" @@ -6404,45 +6313,49 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" dependencies = [ "bytes 1.8.0", "pin-project-lite", "quinn-proto", "quinn-udp", "rustc-hash", - "rustls 0.23.15", + "rustls 0.23.17", "socket2", - "thiserror", - "tokio 1.41.0", + "thiserror 2.0.3", + "tokio 1.41.1", "tracing", ] [[package]] name = "quinn-proto" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes 1.8.0", + "getrandom 0.2.15", "rand 0.8.5", "ring 0.17.8", "rustc-hash", - "rustls 0.23.15", + "rustls 0.23.17", + "rustls-pki-types", "slab", - "thiserror", + "thiserror 2.0.3", "tinyvec", "tracing", + "web-time", ] [[package]] name = "quinn-udp" -version = "0.5.5" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" +checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da" dependencies = [ + "cfg_aliases", "libc", "once_cell", "socket2", @@ -6624,7 +6537,7 @@ dependencies = [ "ryu", "sha1_smol", "socket2", - "tokio 1.41.0", + "tokio 1.41.1", "tokio-util", "url", ] @@ -6652,18 +6565,18 @@ checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom 0.2.15", "libredox", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "regex" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.8", + "regex-automata 0.4.9", "regex-syntax 0.8.5", ] @@ -6678,9 +6591,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -6741,6 +6654,7 @@ dependencies = [ "http 0.2.12", "http-body 0.4.6", "hyper 0.14.31", + "hyper-rustls 0.24.2", "hyper-tls 0.5.0", "ipnet", "js-sys", @@ -6751,14 +6665,16 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "rustls 0.21.12", "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", "sync_wrapper 0.1.2", "system-configuration 0.5.1", - "tokio 1.41.0", + "tokio 1.41.1", "tokio-native-tls", + "tokio-rustls 0.24.1", "tokio-util", "tower-service", "url", @@ -6766,14 +6682,15 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", + "webpki-roots 0.25.4", "winreg 0.50.0", ] [[package]] name = "reqwest" -version = "0.12.8" +version = "0.12.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" dependencies = [ "async-compression", "base64 0.22.1", @@ -6799,7 +6716,8 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.15", + "rustls 0.23.17", + "rustls-native-certs 0.8.0", "rustls-pemfile 2.2.0", "rustls-pki-types", "serde", @@ -6807,7 +6725,7 @@ dependencies = [ "serde_urlencoded", "sync_wrapper 1.0.1", "system-configuration 0.6.1", - "tokio 1.41.0", + "tokio 1.41.1", "tokio-native-tls", "tokio-rustls 0.26.0", "tokio-util", @@ -6817,7 +6735,7 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots", + "webpki-roots 0.26.6", "windows-registry 0.2.0", ] @@ -6839,9 +6757,9 @@ dependencies = [ [[package]] name = "rfd" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8af382a047821a08aa6bfc09ab0d80ff48d45d8726f7cd8e44891f7cb4a4278e" +checksum = "46f6f80a9b882647d9014673ca9925d30ffc9750f2eed2b4490e189eaebd01e8" dependencies = [ "ashpd", "block2", @@ -6958,16 +6876,6 @@ dependencies = [ "ordered-multimap 0.4.3", ] -[[package]] -name = "rust-ini" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e2a3bcec1f113553ef1c88aae6c020a369d03d55b58de9869a0908930385091" -dependencies = [ - "cfg-if 1.0.0", - "ordered-multimap 0.6.0", -] - [[package]] name = "rust-ini" version = "0.21.1" @@ -6986,7 +6894,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b2ac5ff6acfbe74226fa701b5ef793aaa054055c13ebb7060ad36942956e027" dependencies = [ "async-trait", - "aws-creds 0.34.1", + "aws-creds", "aws-region", "base64 0.13.1", "bytes 1.8.0", @@ -7005,46 +6913,9 @@ dependencies = [ "serde", "serde_derive", "sha2 0.10.8", - "thiserror", + "thiserror 1.0.69", "time", - "tokio 1.41.0", - "tokio-stream", - "url", -] - -[[package]] -name = "rust-s3" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6679da8efaf4c6f0c161de0961dfe95fb6e9049c398d6fbdada2639f053aedb" -dependencies = [ - "async-trait", - "aws-creds 0.36.0", - "aws-region", - "base64 0.21.7", - "bytes 1.8.0", - "cfg-if 1.0.0", - "futures 0.3.31", - "hex", - "hmac 0.12.1", - "http 0.2.12", - "hyper 0.14.31", - "hyper-tls 0.5.0", - "log", - "maybe-async", - "md5", - "minidom", - "native-tls", - "percent-encoding", - "quick-xml 0.30.0", - "serde", - "serde_derive", - "serde_json", - "sha2 0.10.8", - "thiserror", - "time", - "tokio 1.41.0", - "tokio-native-tls", + "tokio 1.41.1", "tokio-stream", "url", ] @@ -7119,9 +6990,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.37" +version = "0.38.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" +checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0" dependencies = [ "bitflags 2.6.0", "errno", @@ -7130,6 +7001,18 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rustls" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" +dependencies = [ + "log", + "ring 0.16.20", + "sct", + "webpki", +] + [[package]] name = "rustls" version = "0.21.12" @@ -7144,10 +7027,25 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.15" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fbb44d7acc4e873d613422379f69f237a1b141928c02f6bc6ccfddddc2d7993" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" dependencies = [ + "log", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls" +version = "0.23.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f1a745511c54ba6d4465e8d5dfbd81b45791756de28d4981af70d6dca128f1e" +dependencies = [ + "log", "once_cell", "ring 0.17.8", "rustls-pki-types", @@ -7168,6 +7066,19 @@ dependencies = [ "security-framework", ] +[[package]] +name = "rustls-native-certs" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.2.0", + "rustls-pki-types", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -7191,6 +7102,9 @@ name = "rustls-pki-types" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +dependencies = [ + "web-time", +] [[package]] name = "rustls-webpki" @@ -7303,7 +7217,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals 0.29.1", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -7375,9 +7289,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" dependencies = [ "core-foundation-sys", "libc", @@ -7429,28 +7343,29 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "sentry" -version = "0.32.3" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00421ed8fa0c995f07cde48ba6c89e80f2b312f74ff637326f392fbfd23abe02" +checksum = "5484316556650182f03b43d4c746ce0e3e48074a21e2f51244b648b6542e1066" dependencies = [ "httpdate", - "native-tls", - "reqwest 0.12.8", + "reqwest 0.12.9", + "rustls 0.22.4", "sentry-backtrace", "sentry-contexts", "sentry-core", "sentry-debug-images", "sentry-panic", "sentry-tracing", - "tokio 1.41.0", + "tokio 1.41.1", "ureq", + "webpki-roots 0.26.6", ] [[package]] name = "sentry-actix" -version = "0.32.3" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1986312ea8425a28299262ead2483ca8f0e167994f9239848d5718041abcd49" +checksum = "e461c7d3a46d298b5ffc66127c1f16454dd11d3d89fcfb21023cd499d82b9a78" dependencies = [ "actix-web", "futures-util", @@ -7459,9 +7374,9 @@ dependencies = [ [[package]] name = "sentry-backtrace" -version = "0.32.3" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a79194074f34b0cbe5dd33896e5928bbc6ab63a889bd9df2264af5acb186921e" +checksum = "40aa225bb41e2ec9d7c90886834367f560efc1af028f1c5478a6cce6a59c463a" dependencies = [ "backtrace", "once_cell", @@ -7471,9 +7386,9 @@ dependencies = [ [[package]] name = "sentry-contexts" -version = "0.32.3" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eba8870c5dba2bfd9db25c75574a11429f6b95957b0a78ac02e2970dd7a5249a" +checksum = "1a8dd746da3d16cb8c39751619cefd4fcdbd6df9610f3310fd646b55f6e39910" dependencies = [ "hostname", "libc", @@ -7485,9 +7400,9 @@ dependencies = [ [[package]] name = "sentry-core" -version = "0.32.3" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a75011ea1c0d5c46e9e57df03ce81f5c7f0a9e199086334a1f9c0a541e0826" +checksum = "161283cfe8e99c8f6f236a402b9ccf726b201f365988b5bb637ebca0abbd4a30" dependencies = [ "once_cell", "rand 0.8.5", @@ -7498,9 +7413,9 @@ dependencies = [ [[package]] name = "sentry-debug-images" -version = "0.32.3" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ec2a486336559414ab66548da610da5e9626863c3c4ffca07d88f7dc71c8de8" +checksum = "8fc6b25e945fcaa5e97c43faee0267eebda9f18d4b09a251775d8fef1086238a" dependencies = [ "findshlibs", "once_cell", @@ -7509,9 +7424,9 @@ dependencies = [ [[package]] name = "sentry-panic" -version = "0.32.3" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eaa3ecfa3c8750c78dcfd4637cfa2598b95b52897ed184b4dc77fcf7d95060d" +checksum = "bc74f229c7186dd971a9491ffcbe7883544aa064d1589bd30b83fb856cd22d63" dependencies = [ "sentry-backtrace", "sentry-core", @@ -7519,9 +7434,9 @@ dependencies = [ [[package]] name = "sentry-tracing" -version = "0.32.3" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f715932bf369a61b7256687c6f0554141b7ce097287e30e3f7ed6e9de82498fe" +checksum = "cd3c5faf2103cd01eeda779ea439b68c4ee15adcdb16600836e97feafab362ec" dependencies = [ "sentry-backtrace", "sentry-core", @@ -7531,16 +7446,16 @@ dependencies = [ [[package]] name = "sentry-types" -version = "0.32.3" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4519c900ce734f7a0eb7aba0869dfb225a7af8820634a7dd51449e3b093cfb7c" +checksum = "5d68cdf6bc41b8ff3ae2a9c4671e97426dcdd154cc1d4b6b72813f285d6b163f" dependencies = [ "debugid", "hex", "rand 0.8.5", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "time", "url", "uuid 1.11.0", @@ -7548,9 +7463,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.213" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ea7893ff5e2466df8d720bb615088341b295f849602c6956047f8f80f0e9bc1" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" dependencies = [ "serde_derive", ] @@ -7574,19 +7489,19 @@ checksum = "fb3aa78ecda1ebc9ec9847d5d3aba7d618823446a049ba2491940506da6e2782" dependencies = [ "log", "serde", - "thiserror", + "thiserror 1.0.69", "xml-rs", ] [[package]] name = "serde_derive" -version = "1.0.213" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e85ad2009c50b58e87caa8cd6dac16bdf511bbfb7af6c33df902396aa480fa5" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -7608,7 +7523,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -7661,7 +7576,7 @@ checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" dependencies = [ "percent-encoding", "serde", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -7672,7 +7587,7 @@ checksum = "8cac3f1e2ca2fe333923a1ae72caca910b98ed0630bb35ef6f8c8517d6e81afa" dependencies = [ "percent-encoding", "serde", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -7683,7 +7598,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -7734,7 +7649,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -8010,9 +7925,9 @@ dependencies = [ [[package]] name = "spdx" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47317bbaf63785b53861e1ae2d11b80d6b624211d42cb20efcd210ee6f8a14bc" +checksum = "bae30cc7bfe3656d60ee99bf6836f472b0c53dddcbf335e253329abb16e535a2" dependencies = [ "smallvec 1.13.2", ] @@ -8103,19 +8018,19 @@ dependencies = [ "paste", "percent-encoding", "rust_decimal", - "rustls 0.23.15", + "rustls 0.23.17", "rustls-pemfile 2.2.0", "serde", "serde_json", "sha2 0.10.8", "smallvec 1.13.2", "sqlformat", - "thiserror", - "tokio 1.41.0", + "thiserror 1.0.69", + "tokio 1.41.1", "tokio-stream", "tracing", "url", - "webpki-roots", + "webpki-roots 0.26.6", ] [[package]] @@ -8128,7 +8043,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -8151,9 +8066,9 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.82", + "syn 2.0.87", "tempfile", - "tokio 1.41.0", + "tokio 1.41.1", "url", ] @@ -8196,7 +8111,7 @@ dependencies = [ "smallvec 1.13.2", "sqlx-core", "stringprep", - "thiserror", + "thiserror 1.0.69", "tracing", "whoami", ] @@ -8236,7 +8151,7 @@ dependencies = [ "smallvec 1.13.2", "sqlx-core", "stringprep", - "thiserror", + "thiserror 1.0.69", "tracing", "whoami", ] @@ -8364,7 +8279,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -8397,27 +8312,15 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.82" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83540f837a8afc019423a8edb95b52a8effe46957ee402287f4292fae35be021" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] -[[package]] -name = "syn_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.82", -] - [[package]] name = "sync_wrapper" version = "0.1.2" @@ -8441,7 +8344,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -8456,9 +8359,9 @@ dependencies = [ [[package]] name = "sys-locale" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e801cf239ecd6ccd71f03d270d67dd53d13e90aab208bf4b8fe4ad957ea949b0" +checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" dependencies = [ "libc", ] @@ -8535,9 +8438,9 @@ dependencies = [ [[package]] name = "tao" -version = "0.30.3" +version = "0.30.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0dbbebe82d02044dfa481adca1550d6dd7bd16e086bc34fa0fbecceb5a63751" +checksum = "6682a07cf5bab0b8a2bd20d0a542917ab928b5edb75ebd4eda6b05cbaab872da" dependencies = [ "bitflags 2.6.0", "cocoa 0.26.0", @@ -8580,7 +8483,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -8591,9 +8494,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tar" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ff6c40d3aedb5e06b57c6f669ad17ab063dd1e63d977c6a88e7f4dfa4f04020" +checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6" dependencies = [ "filetime", "libc", @@ -8608,9 +8511,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.0.6" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3889b392db6d32a105d3757230ea0220090b8f94c90d3e60b6c5eb91178ab1b" +checksum = "e545de0a2dfe296fa67db208266cd397c5a55ae782da77973ef4c4fac90e9f2c" dependencies = [ "anyhow", "bytes 1.8.0", @@ -8635,7 +8538,7 @@ dependencies = [ "percent-encoding", "plist", "raw-window-handle 0.6.2", - "reqwest 0.12.8", + "reqwest 0.12.9", "serde", "serde_json", "serde_repr", @@ -8646,8 +8549,8 @@ dependencies = [ "tauri-runtime", "tauri-runtime-wry", "tauri-utils", - "thiserror", - "tokio 1.41.0", + "thiserror 2.0.3", + "tokio 1.41.1", "tray-icon", "url", "urlpattern", @@ -8659,16 +8562,16 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.0.2" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f96827ccfb1aa40d55d0ded79562d18ba18566657a553f992a982d755148376" +checksum = "7bd2a4bcfaf5fb9f4be72520eefcb61ae565038f8ccba2a497d8c28f463b8c01" dependencies = [ "anyhow", "cargo_toml", "dirs 5.0.1", "glob", "heck 0.5.0", - "json-patch 3.0.1", + "json-patch", "quote", "schemars", "semver 1.0.23", @@ -8683,14 +8586,14 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.0.2" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947f16f47becd9e9cd39b74ee337fd1981574d78819be18e4384d85e5a0b82f" +checksum = "bf79faeecf301d3e969b1fae977039edb77a4c1f25cc0a961be298b54bff97cf" dependencies = [ "base64 0.22.1", "brotli 7.0.0", "ico", - "json-patch 2.0.0", + "json-patch", "plist", "png", "proc-macro2", @@ -8699,9 +8602,9 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.8", - "syn 2.0.82", + "syn 2.0.87", "tauri-utils", - "thiserror", + "thiserror 2.0.3", "time", "url", "uuid 1.11.0", @@ -8710,23 +8613,23 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.0.2" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bd1c8d4a66799d3438747c3a79705cd665a95d6f24cb5f315413ff7a981fe2a" +checksum = "c52027c8c5afb83166dacddc092ee8fff50772f9646d461d8c33ee887e447a03" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", "tauri-codegen", "tauri-utils", ] [[package]] name = "tauri-plugin" -version = "2.0.2" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fa4e6c94cb1d635f65a770c69e23de1bc054b0e4c554fa037a7cc7676333d39" +checksum = "e753f2a30933a9bbf0a202fa47d7cc4a3401f06e8d6dcc53b79aa62954828c79" dependencies = [ "anyhow", "glob", @@ -8753,7 +8656,7 @@ dependencies = [ "tauri", "tauri-plugin", "tauri-utils", - "thiserror", + "thiserror 1.0.69", "url", "windows-registry 0.3.0", "windows-result", @@ -8773,7 +8676,7 @@ dependencies = [ "tauri", "tauri-plugin", "tauri-plugin-fs", - "thiserror", + "thiserror 1.0.69", "url", ] @@ -8793,7 +8696,7 @@ dependencies = [ "serde_repr", "tauri", "tauri-plugin", - "thiserror", + "thiserror 1.0.69", "url", "uuid 1.11.0", ] @@ -8813,7 +8716,7 @@ dependencies = [ "sys-locale", "tauri", "tauri-plugin", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -8833,8 +8736,8 @@ dependencies = [ "shared_child", "tauri", "tauri-plugin", - "thiserror", - "tokio 1.41.0", + "thiserror 1.0.69", + "tokio 1.41.1", ] [[package]] @@ -8847,9 +8750,9 @@ dependencies = [ "serde", "serde_json", "tauri", - "thiserror", + "thiserror 1.0.69", "windows-sys 0.59.0", - "zbus", + "zbus 4.4.0", ] [[package]] @@ -8866,7 +8769,7 @@ dependencies = [ "infer 0.16.0", "minisign-verify", "percent-encoding", - "reqwest 0.12.8", + "reqwest 0.12.9", "semver 1.0.23", "serde", "serde_json", @@ -8874,9 +8777,9 @@ dependencies = [ "tauri", "tauri-plugin", "tempfile", - "thiserror", + "thiserror 1.0.69", "time", - "tokio 1.41.0", + "tokio 1.41.1", "url", "windows-sys 0.59.0", "zip 2.2.0", @@ -8884,9 +8787,9 @@ dependencies = [ [[package]] name = "tauri-plugin-window-state" -version = "2.0.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd1cef203a15b4772898e7bc8e57c1f34696e39848987dfcd294d51ba0525650" +checksum = "683c8764751fbbcebf3a594bcee24cf84c62773fa0080d1b40fc80698472421e" dependencies = [ "bitflags 2.6.0", "log", @@ -8894,14 +8797,14 @@ dependencies = [ "serde_json", "tauri", "tauri-plugin", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "tauri-runtime" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ef7363e7229ac8d04e8a5d405670dbd43dde8fc4bc3bc56105c35452d03784" +checksum = "cce18d43f80d4aba3aa8a0c953bbe835f3d0f2370aca75e8dbb14bd4bab27958" dependencies = [ "dpi", "gtk", @@ -8911,16 +8814,16 @@ dependencies = [ "serde", "serde_json", "tauri-utils", - "thiserror", + "thiserror 2.0.3", "url", "windows 0.58.0", ] [[package]] name = "tauri-runtime-wry" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62fa2068e8498ad007b54d5773d03d57c3ff6dd96f8c8ce58beff44d0d5e0d30" +checksum = "9f442a38863e10129ffe2cec7bd09c2dcf8a098a3a27801a476a304d5bb991d2" dependencies = [ "gtk", "http 1.1.0", @@ -8944,9 +8847,9 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.0.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc65d6f5c54e56b66258948a6d9e47a82ea41f4b5a7612bfbdd1634c2913ed0" +checksum = "9271a88f99b4adea0dc71d0baca4505475a0bbd139fb135f62958721aaa8fe54" dependencies = [ "brotli 7.0.0", "cargo_metadata", @@ -8954,8 +8857,9 @@ dependencies = [ "dunce", "glob", "html5ever", + "http 1.1.0", "infer 0.16.0", - "json-patch 2.0.0", + "json-patch", "kuchikiki", "log", "memchr", @@ -8970,7 +8874,7 @@ dependencies = [ "serde_json", "serde_with", "swift-rs", - "thiserror", + "thiserror 2.0.3", "toml 0.8.19", "url", "urlpattern", @@ -8990,12 +8894,12 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ "cfg-if 1.0.0", - "fastrand 2.1.1", + "fastrand 2.2.0", "once_cell", "rustix", "windows-sys 0.59.0", @@ -9058,7 +8962,7 @@ dependencies = [ "paste", "rand 0.8.5", "regex", - "reqwest 0.12.8", + "reqwest 0.12.9", "serde", "serde_ini", "serde_json", @@ -9069,8 +8973,8 @@ dependencies = [ "sysinfo", "tauri", "tempfile", - "thiserror", - "tokio 1.41.0", + "thiserror 1.0.69", + "tokio 1.41.1", "toml 0.8.19", "tracing", "tracing-error", @@ -9113,8 +9017,8 @@ dependencies = [ "tauri-plugin-updater", "tauri-plugin-window-state", "theseus", - "thiserror", - "tokio 1.41.0", + "thiserror 1.0.69", + "tokio 1.41.1", "tracing", "tracing-error", "url", @@ -9131,8 +9035,8 @@ dependencies = [ "serde", "serde_json", "theseus", - "thiserror", - "tokio 1.41.0", + "thiserror 1.0.69", + "tokio 1.41.1", "tracing", "tracing-error", "tracing-subscriber", @@ -9149,22 +9053,42 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" [[package]] name = "thiserror" -version = "1.0.65" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d11abd9594d9b38965ef50805c5e469ca9cc6f197f883f717e0269a3057b3d5" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +dependencies = [ + "thiserror-impl 2.0.3", ] [[package]] name = "thiserror-impl" -version = "1.0.65" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae71770322cbd277e69d762a16c444af02aa0575ac0d174f0b9562d3b37f8602" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] @@ -9279,9 +9203,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.41.0" +version = "1.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" dependencies = [ "backtrace", "bytes 1.8.0", @@ -9357,7 +9281,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -9367,7 +9291,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", - "tokio 1.41.0", + "tokio 1.41.1", ] [[package]] @@ -9396,7 +9320,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ "rustls 0.21.12", - "tokio 1.41.0", + "tokio 1.41.1", ] [[package]] @@ -9405,9 +9329,9 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.15", + "rustls 0.23.17", "rustls-pki-types", - "tokio 1.41.0", + "tokio 1.41.1", ] [[package]] @@ -9418,7 +9342,7 @@ checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" dependencies = [ "futures-core", "pin-project-lite", - "tokio 1.41.0", + "tokio 1.41.1", ] [[package]] @@ -9518,7 +9442,7 @@ dependencies = [ "futures-io", "futures-sink", "pin-project-lite", - "tokio 1.41.0", + "tokio 1.41.1", ] [[package]] @@ -9631,7 +9555,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -9713,7 +9637,7 @@ dependencies = [ "once_cell", "png", "serde", - "thiserror", + "thiserror 1.0.69", "windows-sys 0.59.0", ] @@ -9742,10 +9666,10 @@ dependencies = [ "httparse", "log", "rand 0.8.5", - "rustls 0.23.15", + "rustls 0.23.17", "rustls-pki-types", "sha1 0.10.6", - "thiserror", + "thiserror 1.0.69", "utf-8", ] @@ -9867,6 +9791,12 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" + [[package]] name = "unicode_categories" version = "0.1.1" @@ -9893,19 +9823,21 @@ checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" dependencies = [ "base64 0.22.1", "log", - "native-tls", "once_cell", + "rustls 0.23.17", + "rustls-pki-types", "url", + "webpki-roots 0.26.6", ] [[package]] name = "url" -version = "2.5.2" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" dependencies = [ "form_urlencoded", - "idna 0.5.0", + "idna 1.0.3", "percent-encoding", "serde", ] @@ -10140,7 +10072,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", "wasm-bindgen-shared", ] @@ -10174,7 +10106,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -10187,9 +10119,9 @@ checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "wasm-streams" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e072d4e72f700fb3443d8fe94a39315df013eef1104903cdb0a2abd322bbecd" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ "futures-util", "js-sys", @@ -10214,9 +10146,9 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.6" +version = "0.31.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3f45d1222915ef1fd2057220c1d9d9624b7654443ea35c3877f7a52bd0a5a2d" +checksum = "b66249d3fc69f76fd74c82cc319300faa554e9d865dab1f7cd66cc20db10b280" dependencies = [ "bitflags 2.6.0", "rustix", @@ -10226,9 +10158,9 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.32.4" +version = "0.32.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b5755d77ae9040bb872a25026555ce4cb0ae75fd923e90d25fba07d81057de0" +checksum = "7cd0ade57c4e6e9a8952741325c30bf82f4246885dca8bf561898b86d0c1f58e" dependencies = [ "bitflags 2.6.0", "wayland-backend", @@ -10268,6 +10200,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "webbrowser" version = "0.8.15" @@ -10335,10 +10277,35 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f53152f51fb5af0c08484c33d16cca96175881d1f3dec068c23b31a158c2d99" dependencies = [ - "image 0.25.4", + "image 0.25.5", "libwebp-sys", ] +[[package]] +name = "webpki" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "webpki-roots" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +dependencies = [ + "webpki", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + [[package]] name = "webpki-roots" version = "0.26.6" @@ -10370,7 +10337,7 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -10379,7 +10346,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3a3e2eeb58f82361c93f9777014668eb3d07e7d174ee4c819575a9208011886" dependencies = [ - "thiserror", + "thiserror 1.0.69", "windows 0.58.0", "windows-core 0.58.0", ] @@ -10542,7 +10509,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -10553,7 +10520,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -10891,12 +10858,13 @@ checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "wry" -version = "0.46.3" +version = "0.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd5cdf57c66813d97601181349c63b96994b3074fc3d7a31a8cce96e968e3bbd" +checksum = "553ca1ce149982123962fac2506aa75b8b76288779a77e72b12fa2fc34938647" dependencies = [ "base64 0.22.1", "block2", + "cookie 0.18.1", "crossbeam-channel", "dpi", "dunce", @@ -10920,7 +10888,8 @@ dependencies = [ "sha2 0.10.8", "soup3", "tao-macros", - "thiserror", + "thiserror 1.0.69", + "url", "webkit2gtk", "webkit2gtk-sys", "webview2-com", @@ -10993,9 +10962,9 @@ dependencies = [ [[package]] name = "xml-rs" -version = "0.8.22" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4e2e2f7cba5a093896c1e150fbfe177d1883e7448200efb81d40b9d339ef26" +checksum = "af310deaae937e48a26602b730250b4949e125f468f11e6990be3e5304ddd96f" [[package]] name = "xz2" @@ -11060,7 +11029,7 @@ checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", "synstructure", ] @@ -11093,14 +11062,43 @@ dependencies = [ "serde_repr", "sha1 0.10.6", "static_assertions", - "tokio 1.41.0", "tracing", "uds_windows", "windows-sys 0.52.0", "xdg-home", - "zbus_macros", - "zbus_names", - "zvariant", + "zbus_macros 4.4.0", + "zbus_names 3.0.0", + "zvariant 4.2.0", +] + +[[package]] +name = "zbus" +version = "5.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1162094dc63b1629fcc44150bcceeaa80798cd28bcbe7fa987b65a034c258608" +dependencies = [ + "async-broadcast", + "async-recursion", + "async-trait", + "enumflags2", + "event-listener 5.3.1", + "futures-core", + "futures-util", + "hex", + "nix", + "ordered-stream", + "serde", + "serde_repr", + "static_assertions", + "tokio 1.41.1", + "tracing", + "uds_windows", + "windows-sys 0.59.0", + "winnow 0.6.20", + "xdg-home", + "zbus_macros 5.1.1", + "zbus_names 4.1.0", + "zvariant 5.1.0", ] [[package]] @@ -11112,8 +11110,23 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.82", - "zvariant_utils", + "syn 2.0.87", + "zvariant_utils 2.1.0", +] + +[[package]] +name = "zbus_macros" +version = "5.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cd2dcdce3e2727f7d74b7e33b5a89539b3cc31049562137faf7ae4eb86cd16d" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.87", + "zbus_names 4.1.0", + "zvariant 5.1.0", + "zvariant_utils 3.0.2", ] [[package]] @@ -11124,7 +11137,19 @@ checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" dependencies = [ "serde", "static_assertions", - "zvariant", + "zvariant 4.2.0", +] + +[[package]] +name = "zbus_names" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "856b7a38811f71846fd47856ceee8bccaec8399ff53fb370247e66081ace647b" +dependencies = [ + "serde", + "static_assertions", + "winnow 0.6.20", + "zvariant 5.1.0", ] [[package]] @@ -11145,7 +11170,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -11165,7 +11190,7 @@ checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", "synstructure", ] @@ -11194,7 +11219,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", ] [[package]] @@ -11229,7 +11254,7 @@ dependencies = [ "displaydoc", "indexmap 2.6.0", "memchr", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -11293,13 +11318,28 @@ name = "zvariant" version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" +dependencies = [ + "endi", + "enumflags2", + "serde", + "static_assertions", + "zvariant_derive 4.2.0", +] + +[[package]] +name = "zvariant" +version = "5.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1200ee6ac32f1e5a312e455a949a4794855515d34f9909f4a3e082d14e1a56f" dependencies = [ "endi", "enumflags2", "serde", "static_assertions", "url", - "zvariant_derive", + "winnow 0.6.20", + "zvariant_derive 5.1.0", + "zvariant_utils 3.0.2", ] [[package]] @@ -11311,8 +11351,21 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.82", - "zvariant_utils", + "syn 2.0.87", + "zvariant_utils 2.1.0", +] + +[[package]] +name = "zvariant_derive" +version = "5.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "687e3b97fae6c9104fbbd36c73d27d149abf04fb874e2efbd84838763daa8916" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.87", + "zvariant_utils 3.0.2", ] [[package]] @@ -11323,7 +11376,21 @@ checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" dependencies = [ "proc-macro2", "quote", - "syn 2.0.82", + "syn 2.0.87", +] + +[[package]] +name = "zvariant_utils" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20d1d011a38f12360e5fcccceeff5e2c42a8eb7f27f0dcba97a0862ede05c9c6" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "static_assertions", + "syn 2.0.87", + "winnow 0.6.20", ] [[package]] diff --git a/apps/app-frontend/src/pages/Settings.vue b/apps/app-frontend/src/pages/Settings.vue index ce615e4ee..ffdb0ac97 100644 --- a/apps/app-frontend/src/pages/Settings.vue +++ b/apps/app-frontend/src/pages/Settings.vue @@ -402,7 +402,14 @@ await getBranches() The memory allocated to each instance when it is ran. - + diff --git a/apps/app/capabilities/plugins.json b/apps/app/capabilities/plugins.json index efca87b7f..b2beac297 100644 --- a/apps/app/capabilities/plugins.json +++ b/apps/app/capabilities/plugins.json @@ -2,9 +2,7 @@ "identifier": "plugins", "description": "", "local": true, - "windows": [ - "main" - ], + "windows": ["main"], "permissions": [ "dialog:allow-open", "dialog:allow-confirm", diff --git a/apps/app/gen/schemas/desktop-schema.json b/apps/app/gen/schemas/desktop-schema.json index ca5047808..e6a003aad 100644 --- a/apps/app/gen/schemas/desktop-schema.json +++ b/apps/app/gen/schemas/desktop-schema.json @@ -84,7 +84,7 @@ } }, "permissions": { - "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ```", + "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ] ```", "type": "array", "items": { "$ref": "#/definitions/PermissionEntry" diff --git a/apps/app/gen/schemas/macOS-schema.json b/apps/app/gen/schemas/macOS-schema.json index ca5047808..e6a003aad 100644 --- a/apps/app/gen/schemas/macOS-schema.json +++ b/apps/app/gen/schemas/macOS-schema.json @@ -84,7 +84,7 @@ } }, "permissions": { - "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ```", + "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ] ```", "type": "array", "items": { "$ref": "#/definitions/PermissionEntry" diff --git a/apps/app/gen/schemas/windows-schema.json b/apps/app/gen/schemas/windows-schema.json new file mode 100644 index 000000000..44b4ebb29 --- /dev/null +++ b/apps/app/gen/schemas/windows-schema.json @@ -0,0 +1,3314 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CapabilityFile", + "description": "Capability formats accepted in a capability file.", + "anyOf": [ + { + "description": "A single capability.", + "allOf": [ + { + "$ref": "#/definitions/Capability" + } + ] + }, + { + "description": "A list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + }, + { + "description": "A list of capabilities.", + "type": "object", + "required": [ + "capabilities" + ], + "properties": { + "capabilities": { + "description": "The list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + } + } + } + ], + "definitions": { + "Capability": { + "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows fine grained access to the Tauri core, application, or plugin commands. If a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, \"platforms\": [\"macOS\",\"windows\"] } ```", + "type": "object", + "required": [ + "identifier", + "permissions" + ], + "properties": { + "identifier": { + "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", + "type": "string" + }, + "description": { + "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.", + "default": "", + "type": "string" + }, + "remote": { + "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```", + "anyOf": [ + { + "$ref": "#/definitions/CapabilityRemote" + }, + { + "type": "null" + } + ] + }, + "local": { + "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", + "default": true, + "type": "boolean" + }, + "windows": { + "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nOn multiwebview windows, prefer [`Self::webviews`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "webviews": { + "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThis is only required when using on multiwebview contexts, by default all child webviews of a window that matches [`Self::windows`] are linked.\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", + "type": "array", + "items": { + "type": "string" + } + }, + "permissions": { + "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ```", + "type": "array", + "items": { + "$ref": "#/definitions/PermissionEntry" + }, + "uniqueItems": true + }, + "platforms": { + "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Target" + } + } + } + }, + "CapabilityRemote": { + "description": "Configuration for remote URLs that are associated with the capability.", + "type": "object", + "required": [ + "urls" + ], + "properties": { + "urls": { + "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "PermissionEntry": { + "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", + "anyOf": [ + { + "description": "Reference a permission or permission set by identifier.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + { + "description": "Reference a permission or permission set by identifier and extends its scope.", + "type": "object", + "allOf": [ + { + "if": { + "properties": { + "identifier": { + "anyOf": [ + { + "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", + "type": "string", + "const": "shell:default" + }, + { + "description": "Enables the execute command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-execute" + }, + { + "description": "Enables the kill command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-kill" + }, + { + "description": "Enables the open command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-open" + }, + { + "description": "Enables the spawn command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-spawn" + }, + { + "description": "Enables the stdin_write command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-stdin-write" + }, + { + "description": "Denies the execute command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-execute" + }, + { + "description": "Denies the kill command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-kill" + }, + { + "description": "Denies the open command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-open" + }, + { + "description": "Denies the spawn command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-spawn" + }, + { + "description": "Denies the stdin_write command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-stdin-write" + } + ] + } + } + }, + "then": { + "properties": { + "allow": { + "items": { + "title": "Entry", + "description": "A command allowed to be executed by the webview API.", + "type": "object", + "required": [ + "args", + "cmd", + "name", + "sidecar" + ], + "properties": { + "args": { + "description": "The allowed arguments for the command execution.", + "allOf": [ + { + "$ref": "#/definitions/ShellAllowedArgs" + } + ] + }, + "cmd": { + "description": "The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", + "type": "string" + }, + "name": { + "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", + "type": "string" + }, + "sidecar": { + "description": "If this command is a sidecar command.", + "type": "boolean" + } + } + } + }, + "deny": { + "items": { + "title": "Entry", + "description": "A command allowed to be executed by the webview API.", + "type": "object", + "required": [ + "args", + "cmd", + "name", + "sidecar" + ], + "properties": { + "args": { + "description": "The allowed arguments for the command execution.", + "allOf": [ + { + "$ref": "#/definitions/ShellAllowedArgs" + } + ] + }, + "cmd": { + "description": "The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.", + "type": "string" + }, + "name": { + "description": "The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.", + "type": "string" + }, + "sidecar": { + "description": "If this command is a sidecar command.", + "type": "boolean" + } + } + } + } + } + }, + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + } + } + }, + { + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + "allow": { + "description": "Data that defines what is allowed by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + }, + "deny": { + "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + } + } + } + ], + "required": [ + "identifier" + ] + } + ] + }, + "Identifier": { + "description": "Permission identifier", + "oneOf": [ + { + "description": "Default plugin permissions.", + "type": "string", + "const": "ads:default" + }, + { + "description": "Enables the get_ads_personalization command without any pre-configured scope.", + "type": "string", + "const": "ads:allow-get-ads-personalization" + }, + { + "description": "Enables the hide_ads_window command without any pre-configured scope.", + "type": "string", + "const": "ads:allow-hide-ads-window" + }, + { + "description": "Enables the init_ads_window command without any pre-configured scope.", + "type": "string", + "const": "ads:allow-init-ads-window" + }, + { + "description": "Enables the open_link command without any pre-configured scope.", + "type": "string", + "const": "ads:allow-open-link" + }, + { + "description": "Enables the record_ads_click command without any pre-configured scope.", + "type": "string", + "const": "ads:allow-record-ads-click" + }, + { + "description": "Enables the scroll_ads_window command without any pre-configured scope.", + "type": "string", + "const": "ads:allow-scroll-ads-window" + }, + { + "description": "Enables the show_ads_window command without any pre-configured scope.", + "type": "string", + "const": "ads:allow-show-ads-window" + }, + { + "description": "Denies the get_ads_personalization command without any pre-configured scope.", + "type": "string", + "const": "ads:deny-get-ads-personalization" + }, + { + "description": "Denies the hide_ads_window command without any pre-configured scope.", + "type": "string", + "const": "ads:deny-hide-ads-window" + }, + { + "description": "Denies the init_ads_window command without any pre-configured scope.", + "type": "string", + "const": "ads:deny-init-ads-window" + }, + { + "description": "Denies the open_link command without any pre-configured scope.", + "type": "string", + "const": "ads:deny-open-link" + }, + { + "description": "Denies the record_ads_click command without any pre-configured scope.", + "type": "string", + "const": "ads:deny-record-ads-click" + }, + { + "description": "Denies the scroll_ads_window command without any pre-configured scope.", + "type": "string", + "const": "ads:deny-scroll-ads-window" + }, + { + "description": "Denies the show_ads_window command without any pre-configured scope.", + "type": "string", + "const": "ads:deny-show-ads-window" + }, + { + "description": "Default plugin permissions.", + "type": "string", + "const": "auth:default" + }, + { + "description": "Enables the get_default_user command without any pre-configured scope.", + "type": "string", + "const": "auth:allow-get-default-user" + }, + { + "description": "Enables the get_users command without any pre-configured scope.", + "type": "string", + "const": "auth:allow-get-users" + }, + { + "description": "Enables the login command without any pre-configured scope.", + "type": "string", + "const": "auth:allow-login" + }, + { + "description": "Enables the remove_user command without any pre-configured scope.", + "type": "string", + "const": "auth:allow-remove-user" + }, + { + "description": "Enables the set_default_user command without any pre-configured scope.", + "type": "string", + "const": "auth:allow-set-default-user" + }, + { + "description": "Denies the get_default_user command without any pre-configured scope.", + "type": "string", + "const": "auth:deny-get-default-user" + }, + { + "description": "Denies the get_users command without any pre-configured scope.", + "type": "string", + "const": "auth:deny-get-users" + }, + { + "description": "Denies the login command without any pre-configured scope.", + "type": "string", + "const": "auth:deny-login" + }, + { + "description": "Denies the remove_user command without any pre-configured scope.", + "type": "string", + "const": "auth:deny-remove-user" + }, + { + "description": "Denies the set_default_user command without any pre-configured scope.", + "type": "string", + "const": "auth:deny-set-default-user" + }, + { + "description": "Default plugin permissions.", + "type": "string", + "const": "cache:default" + }, + { + "description": "Enables the get_organization command without any pre-configured scope.", + "type": "string", + "const": "cache:allow-get-organization" + }, + { + "description": "Enables the get_organization_many command without any pre-configured scope.", + "type": "string", + "const": "cache:allow-get-organization-many" + }, + { + "description": "Enables the get_project command without any pre-configured scope.", + "type": "string", + "const": "cache:allow-get-project" + }, + { + "description": "Enables the get_project_many command without any pre-configured scope.", + "type": "string", + "const": "cache:allow-get-project-many" + }, + { + "description": "Enables the get_search_results command without any pre-configured scope.", + "type": "string", + "const": "cache:allow-get-search-results" + }, + { + "description": "Enables the get_search_results_many command without any pre-configured scope.", + "type": "string", + "const": "cache:allow-get-search-results-many" + }, + { + "description": "Enables the get_team command without any pre-configured scope.", + "type": "string", + "const": "cache:allow-get-team" + }, + { + "description": "Enables the get_team_many command without any pre-configured scope.", + "type": "string", + "const": "cache:allow-get-team-many" + }, + { + "description": "Enables the get_user command without any pre-configured scope.", + "type": "string", + "const": "cache:allow-get-user" + }, + { + "description": "Enables the get_user_many command without any pre-configured scope.", + "type": "string", + "const": "cache:allow-get-user-many" + }, + { + "description": "Enables the get_version command without any pre-configured scope.", + "type": "string", + "const": "cache:allow-get-version" + }, + { + "description": "Enables the get_version_many command without any pre-configured scope.", + "type": "string", + "const": "cache:allow-get-version-many" + }, + { + "description": "Enables the purge_cache_types command without any pre-configured scope.", + "type": "string", + "const": "cache:allow-purge-cache-types" + }, + { + "description": "Denies the get_organization command without any pre-configured scope.", + "type": "string", + "const": "cache:deny-get-organization" + }, + { + "description": "Denies the get_organization_many command without any pre-configured scope.", + "type": "string", + "const": "cache:deny-get-organization-many" + }, + { + "description": "Denies the get_project command without any pre-configured scope.", + "type": "string", + "const": "cache:deny-get-project" + }, + { + "description": "Denies the get_project_many command without any pre-configured scope.", + "type": "string", + "const": "cache:deny-get-project-many" + }, + { + "description": "Denies the get_search_results command without any pre-configured scope.", + "type": "string", + "const": "cache:deny-get-search-results" + }, + { + "description": "Denies the get_search_results_many command without any pre-configured scope.", + "type": "string", + "const": "cache:deny-get-search-results-many" + }, + { + "description": "Denies the get_team command without any pre-configured scope.", + "type": "string", + "const": "cache:deny-get-team" + }, + { + "description": "Denies the get_team_many command without any pre-configured scope.", + "type": "string", + "const": "cache:deny-get-team-many" + }, + { + "description": "Denies the get_user command without any pre-configured scope.", + "type": "string", + "const": "cache:deny-get-user" + }, + { + "description": "Denies the get_user_many command without any pre-configured scope.", + "type": "string", + "const": "cache:deny-get-user-many" + }, + { + "description": "Denies the get_version command without any pre-configured scope.", + "type": "string", + "const": "cache:deny-get-version" + }, + { + "description": "Denies the get_version_many command without any pre-configured scope.", + "type": "string", + "const": "cache:deny-get-version-many" + }, + { + "description": "Denies the purge_cache_types command without any pre-configured scope.", + "type": "string", + "const": "cache:deny-purge-cache-types" + }, + { + "description": "Default core plugins set which includes:\n- 'core:path:default'\n- 'core:event:default'\n- 'core:window:default'\n- 'core:webview:default'\n- 'core:app:default'\n- 'core:image:default'\n- 'core:resources:default'\n- 'core:menu:default'\n- 'core:tray:default'\n", + "type": "string", + "const": "core:default" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:app:default" + }, + { + "description": "Enables the app_hide command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-app-hide" + }, + { + "description": "Enables the app_show command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-app-show" + }, + { + "description": "Enables the default_window_icon command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-default-window-icon" + }, + { + "description": "Enables the name command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-name" + }, + { + "description": "Enables the set_app_theme command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-set-app-theme" + }, + { + "description": "Enables the tauri_version command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-tauri-version" + }, + { + "description": "Enables the version command without any pre-configured scope.", + "type": "string", + "const": "core:app:allow-version" + }, + { + "description": "Denies the app_hide command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-app-hide" + }, + { + "description": "Denies the app_show command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-app-show" + }, + { + "description": "Denies the default_window_icon command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-default-window-icon" + }, + { + "description": "Denies the name command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-name" + }, + { + "description": "Denies the set_app_theme command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-set-app-theme" + }, + { + "description": "Denies the tauri_version command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-tauri-version" + }, + { + "description": "Denies the version command without any pre-configured scope.", + "type": "string", + "const": "core:app:deny-version" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:event:default" + }, + { + "description": "Enables the emit command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-emit" + }, + { + "description": "Enables the emit_to command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-emit-to" + }, + { + "description": "Enables the listen command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-listen" + }, + { + "description": "Enables the unlisten command without any pre-configured scope.", + "type": "string", + "const": "core:event:allow-unlisten" + }, + { + "description": "Denies the emit command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-emit" + }, + { + "description": "Denies the emit_to command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-emit-to" + }, + { + "description": "Denies the listen command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-listen" + }, + { + "description": "Denies the unlisten command without any pre-configured scope.", + "type": "string", + "const": "core:event:deny-unlisten" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:image:default" + }, + { + "description": "Enables the from_bytes command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-from-bytes" + }, + { + "description": "Enables the from_path command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-from-path" + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-new" + }, + { + "description": "Enables the rgba command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-rgba" + }, + { + "description": "Enables the size command without any pre-configured scope.", + "type": "string", + "const": "core:image:allow-size" + }, + { + "description": "Denies the from_bytes command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-from-bytes" + }, + { + "description": "Denies the from_path command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-from-path" + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-new" + }, + { + "description": "Denies the rgba command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-rgba" + }, + { + "description": "Denies the size command without any pre-configured scope.", + "type": "string", + "const": "core:image:deny-size" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:menu:default" + }, + { + "description": "Enables the append command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-append" + }, + { + "description": "Enables the create_default command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-create-default" + }, + { + "description": "Enables the get command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-get" + }, + { + "description": "Enables the insert command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-insert" + }, + { + "description": "Enables the is_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-is-checked" + }, + { + "description": "Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-is-enabled" + }, + { + "description": "Enables the items command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-items" + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-new" + }, + { + "description": "Enables the popup command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-popup" + }, + { + "description": "Enables the prepend command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-prepend" + }, + { + "description": "Enables the remove command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-remove" + }, + { + "description": "Enables the remove_at command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-remove-at" + }, + { + "description": "Enables the set_accelerator command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-accelerator" + }, + { + "description": "Enables the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-app-menu" + }, + { + "description": "Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-help-menu-for-nsapp" + }, + { + "description": "Enables the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-window-menu" + }, + { + "description": "Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-as-windows-menu-for-nsapp" + }, + { + "description": "Enables the set_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-checked" + }, + { + "description": "Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-enabled" + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-icon" + }, + { + "description": "Enables the set_text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-set-text" + }, + { + "description": "Enables the text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:allow-text" + }, + { + "description": "Denies the append command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-append" + }, + { + "description": "Denies the create_default command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-create-default" + }, + { + "description": "Denies the get command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-get" + }, + { + "description": "Denies the insert command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-insert" + }, + { + "description": "Denies the is_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-is-checked" + }, + { + "description": "Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-is-enabled" + }, + { + "description": "Denies the items command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-items" + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-new" + }, + { + "description": "Denies the popup command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-popup" + }, + { + "description": "Denies the prepend command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-prepend" + }, + { + "description": "Denies the remove command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-remove" + }, + { + "description": "Denies the remove_at command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-remove-at" + }, + { + "description": "Denies the set_accelerator command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-accelerator" + }, + { + "description": "Denies the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-app-menu" + }, + { + "description": "Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-help-menu-for-nsapp" + }, + { + "description": "Denies the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-window-menu" + }, + { + "description": "Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-as-windows-menu-for-nsapp" + }, + { + "description": "Denies the set_checked command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-checked" + }, + { + "description": "Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-enabled" + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-icon" + }, + { + "description": "Denies the set_text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-set-text" + }, + { + "description": "Denies the text command without any pre-configured scope.", + "type": "string", + "const": "core:menu:deny-text" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:path:default" + }, + { + "description": "Enables the basename command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-basename" + }, + { + "description": "Enables the dirname command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-dirname" + }, + { + "description": "Enables the extname command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-extname" + }, + { + "description": "Enables the is_absolute command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-is-absolute" + }, + { + "description": "Enables the join command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-join" + }, + { + "description": "Enables the normalize command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-normalize" + }, + { + "description": "Enables the resolve command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-resolve" + }, + { + "description": "Enables the resolve_directory command without any pre-configured scope.", + "type": "string", + "const": "core:path:allow-resolve-directory" + }, + { + "description": "Denies the basename command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-basename" + }, + { + "description": "Denies the dirname command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-dirname" + }, + { + "description": "Denies the extname command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-extname" + }, + { + "description": "Denies the is_absolute command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-is-absolute" + }, + { + "description": "Denies the join command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-join" + }, + { + "description": "Denies the normalize command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-normalize" + }, + { + "description": "Denies the resolve command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-resolve" + }, + { + "description": "Denies the resolve_directory command without any pre-configured scope.", + "type": "string", + "const": "core:path:deny-resolve-directory" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:resources:default" + }, + { + "description": "Enables the close command without any pre-configured scope.", + "type": "string", + "const": "core:resources:allow-close" + }, + { + "description": "Denies the close command without any pre-configured scope.", + "type": "string", + "const": "core:resources:deny-close" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:tray:default" + }, + { + "description": "Enables the get_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-get-by-id" + }, + { + "description": "Enables the new command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-new" + }, + { + "description": "Enables the remove_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-remove-by-id" + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-icon" + }, + { + "description": "Enables the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-icon-as-template" + }, + { + "description": "Enables the set_menu command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-menu" + }, + { + "description": "Enables the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-show-menu-on-left-click" + }, + { + "description": "Enables the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-temp-dir-path" + }, + { + "description": "Enables the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-title" + }, + { + "description": "Enables the set_tooltip command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-tooltip" + }, + { + "description": "Enables the set_visible command without any pre-configured scope.", + "type": "string", + "const": "core:tray:allow-set-visible" + }, + { + "description": "Denies the get_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-get-by-id" + }, + { + "description": "Denies the new command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-new" + }, + { + "description": "Denies the remove_by_id command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-remove-by-id" + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-icon" + }, + { + "description": "Denies the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-icon-as-template" + }, + { + "description": "Denies the set_menu command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-menu" + }, + { + "description": "Denies the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-show-menu-on-left-click" + }, + { + "description": "Denies the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-temp-dir-path" + }, + { + "description": "Denies the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-title" + }, + { + "description": "Denies the set_tooltip command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-tooltip" + }, + { + "description": "Denies the set_visible command without any pre-configured scope.", + "type": "string", + "const": "core:tray:deny-set-visible" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:webview:default" + }, + { + "description": "Enables the clear_all_browsing_data command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-clear-all-browsing-data" + }, + { + "description": "Enables the create_webview command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-create-webview" + }, + { + "description": "Enables the create_webview_window command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-create-webview-window" + }, + { + "description": "Enables the get_all_webviews command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-get-all-webviews" + }, + { + "description": "Enables the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-internal-toggle-devtools" + }, + { + "description": "Enables the print command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-print" + }, + { + "description": "Enables the reparent command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-reparent" + }, + { + "description": "Enables the set_webview_focus command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-focus" + }, + { + "description": "Enables the set_webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-position" + }, + { + "description": "Enables the set_webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-size" + }, + { + "description": "Enables the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-set-webview-zoom" + }, + { + "description": "Enables the webview_close command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-close" + }, + { + "description": "Enables the webview_hide command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-hide" + }, + { + "description": "Enables the webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-position" + }, + { + "description": "Enables the webview_show command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-show" + }, + { + "description": "Enables the webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:allow-webview-size" + }, + { + "description": "Denies the clear_all_browsing_data command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-clear-all-browsing-data" + }, + { + "description": "Denies the create_webview command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-create-webview" + }, + { + "description": "Denies the create_webview_window command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-create-webview-window" + }, + { + "description": "Denies the get_all_webviews command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-get-all-webviews" + }, + { + "description": "Denies the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-internal-toggle-devtools" + }, + { + "description": "Denies the print command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-print" + }, + { + "description": "Denies the reparent command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-reparent" + }, + { + "description": "Denies the set_webview_focus command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-focus" + }, + { + "description": "Denies the set_webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-position" + }, + { + "description": "Denies the set_webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-size" + }, + { + "description": "Denies the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-set-webview-zoom" + }, + { + "description": "Denies the webview_close command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-close" + }, + { + "description": "Denies the webview_hide command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-hide" + }, + { + "description": "Denies the webview_position command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-position" + }, + { + "description": "Denies the webview_show command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-show" + }, + { + "description": "Denies the webview_size command without any pre-configured scope.", + "type": "string", + "const": "core:webview:deny-webview-size" + }, + { + "description": "Default permissions for the plugin.", + "type": "string", + "const": "core:window:default" + }, + { + "description": "Enables the available_monitors command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-available-monitors" + }, + { + "description": "Enables the center command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-center" + }, + { + "description": "Enables the close command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-close" + }, + { + "description": "Enables the create command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-create" + }, + { + "description": "Enables the current_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-current-monitor" + }, + { + "description": "Enables the cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-cursor-position" + }, + { + "description": "Enables the destroy command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-destroy" + }, + { + "description": "Enables the get_all_windows command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-get-all-windows" + }, + { + "description": "Enables the hide command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-hide" + }, + { + "description": "Enables the inner_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-inner-position" + }, + { + "description": "Enables the inner_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-inner-size" + }, + { + "description": "Enables the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-internal-toggle-maximize" + }, + { + "description": "Enables the is_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-closable" + }, + { + "description": "Enables the is_decorated command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-decorated" + }, + { + "description": "Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-enabled" + }, + { + "description": "Enables the is_focused command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-focused" + }, + { + "description": "Enables the is_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-fullscreen" + }, + { + "description": "Enables the is_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-maximizable" + }, + { + "description": "Enables the is_maximized command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-maximized" + }, + { + "description": "Enables the is_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-minimizable" + }, + { + "description": "Enables the is_minimized command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-minimized" + }, + { + "description": "Enables the is_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-resizable" + }, + { + "description": "Enables the is_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-is-visible" + }, + { + "description": "Enables the maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-maximize" + }, + { + "description": "Enables the minimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-minimize" + }, + { + "description": "Enables the monitor_from_point command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-monitor-from-point" + }, + { + "description": "Enables the outer_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-outer-position" + }, + { + "description": "Enables the outer_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-outer-size" + }, + { + "description": "Enables the primary_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-primary-monitor" + }, + { + "description": "Enables the request_user_attention command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-request-user-attention" + }, + { + "description": "Enables the scale_factor command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-scale-factor" + }, + { + "description": "Enables the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-always-on-bottom" + }, + { + "description": "Enables the set_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-always-on-top" + }, + { + "description": "Enables the set_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-closable" + }, + { + "description": "Enables the set_content_protected command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-content-protected" + }, + { + "description": "Enables the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-grab" + }, + { + "description": "Enables the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-icon" + }, + { + "description": "Enables the set_cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-position" + }, + { + "description": "Enables the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-cursor-visible" + }, + { + "description": "Enables the set_decorations command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-decorations" + }, + { + "description": "Enables the set_effects command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-effects" + }, + { + "description": "Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-enabled" + }, + { + "description": "Enables the set_focus command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-focus" + }, + { + "description": "Enables the set_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-fullscreen" + }, + { + "description": "Enables the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-icon" + }, + { + "description": "Enables the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-ignore-cursor-events" + }, + { + "description": "Enables the set_max_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-max-size" + }, + { + "description": "Enables the set_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-maximizable" + }, + { + "description": "Enables the set_min_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-min-size" + }, + { + "description": "Enables the set_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-minimizable" + }, + { + "description": "Enables the set_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-position" + }, + { + "description": "Enables the set_progress_bar command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-progress-bar" + }, + { + "description": "Enables the set_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-resizable" + }, + { + "description": "Enables the set_shadow command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-shadow" + }, + { + "description": "Enables the set_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-size" + }, + { + "description": "Enables the set_size_constraints command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-size-constraints" + }, + { + "description": "Enables the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-skip-taskbar" + }, + { + "description": "Enables the set_theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-theme" + }, + { + "description": "Enables the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-title" + }, + { + "description": "Enables the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-title-bar-style" + }, + { + "description": "Enables the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-set-visible-on-all-workspaces" + }, + { + "description": "Enables the show command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-show" + }, + { + "description": "Enables the start_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-start-dragging" + }, + { + "description": "Enables the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-start-resize-dragging" + }, + { + "description": "Enables the theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-theme" + }, + { + "description": "Enables the title command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-title" + }, + { + "description": "Enables the toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-toggle-maximize" + }, + { + "description": "Enables the unmaximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-unmaximize" + }, + { + "description": "Enables the unminimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:allow-unminimize" + }, + { + "description": "Denies the available_monitors command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-available-monitors" + }, + { + "description": "Denies the center command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-center" + }, + { + "description": "Denies the close command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-close" + }, + { + "description": "Denies the create command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-create" + }, + { + "description": "Denies the current_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-current-monitor" + }, + { + "description": "Denies the cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-cursor-position" + }, + { + "description": "Denies the destroy command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-destroy" + }, + { + "description": "Denies the get_all_windows command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-get-all-windows" + }, + { + "description": "Denies the hide command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-hide" + }, + { + "description": "Denies the inner_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-inner-position" + }, + { + "description": "Denies the inner_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-inner-size" + }, + { + "description": "Denies the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-internal-toggle-maximize" + }, + { + "description": "Denies the is_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-closable" + }, + { + "description": "Denies the is_decorated command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-decorated" + }, + { + "description": "Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-enabled" + }, + { + "description": "Denies the is_focused command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-focused" + }, + { + "description": "Denies the is_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-fullscreen" + }, + { + "description": "Denies the is_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-maximizable" + }, + { + "description": "Denies the is_maximized command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-maximized" + }, + { + "description": "Denies the is_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-minimizable" + }, + { + "description": "Denies the is_minimized command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-minimized" + }, + { + "description": "Denies the is_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-resizable" + }, + { + "description": "Denies the is_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-is-visible" + }, + { + "description": "Denies the maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-maximize" + }, + { + "description": "Denies the minimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-minimize" + }, + { + "description": "Denies the monitor_from_point command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-monitor-from-point" + }, + { + "description": "Denies the outer_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-outer-position" + }, + { + "description": "Denies the outer_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-outer-size" + }, + { + "description": "Denies the primary_monitor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-primary-monitor" + }, + { + "description": "Denies the request_user_attention command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-request-user-attention" + }, + { + "description": "Denies the scale_factor command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-scale-factor" + }, + { + "description": "Denies the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-always-on-bottom" + }, + { + "description": "Denies the set_always_on_top command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-always-on-top" + }, + { + "description": "Denies the set_closable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-closable" + }, + { + "description": "Denies the set_content_protected command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-content-protected" + }, + { + "description": "Denies the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-grab" + }, + { + "description": "Denies the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-icon" + }, + { + "description": "Denies the set_cursor_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-position" + }, + { + "description": "Denies the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-cursor-visible" + }, + { + "description": "Denies the set_decorations command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-decorations" + }, + { + "description": "Denies the set_effects command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-effects" + }, + { + "description": "Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-enabled" + }, + { + "description": "Denies the set_focus command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-focus" + }, + { + "description": "Denies the set_fullscreen command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-fullscreen" + }, + { + "description": "Denies the set_icon command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-icon" + }, + { + "description": "Denies the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-ignore-cursor-events" + }, + { + "description": "Denies the set_max_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-max-size" + }, + { + "description": "Denies the set_maximizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-maximizable" + }, + { + "description": "Denies the set_min_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-min-size" + }, + { + "description": "Denies the set_minimizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-minimizable" + }, + { + "description": "Denies the set_position command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-position" + }, + { + "description": "Denies the set_progress_bar command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-progress-bar" + }, + { + "description": "Denies the set_resizable command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-resizable" + }, + { + "description": "Denies the set_shadow command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-shadow" + }, + { + "description": "Denies the set_size command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-size" + }, + { + "description": "Denies the set_size_constraints command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-size-constraints" + }, + { + "description": "Denies the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-skip-taskbar" + }, + { + "description": "Denies the set_theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-theme" + }, + { + "description": "Denies the set_title command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-title" + }, + { + "description": "Denies the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-title-bar-style" + }, + { + "description": "Denies the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-set-visible-on-all-workspaces" + }, + { + "description": "Denies the show command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-show" + }, + { + "description": "Denies the start_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-start-dragging" + }, + { + "description": "Denies the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-start-resize-dragging" + }, + { + "description": "Denies the theme command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-theme" + }, + { + "description": "Denies the title command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-title" + }, + { + "description": "Denies the toggle_maximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-toggle-maximize" + }, + { + "description": "Denies the unmaximize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-unmaximize" + }, + { + "description": "Denies the unminimize command without any pre-configured scope.", + "type": "string", + "const": "core:window:deny-unminimize" + }, + { + "description": "Allows reading the opened deep link via the get_current command", + "type": "string", + "const": "deep-link:default" + }, + { + "description": "Enables the get_current command without any pre-configured scope.", + "type": "string", + "const": "deep-link:allow-get-current" + }, + { + "description": "Enables the is_registered command without any pre-configured scope.", + "type": "string", + "const": "deep-link:allow-is-registered" + }, + { + "description": "Enables the register command without any pre-configured scope.", + "type": "string", + "const": "deep-link:allow-register" + }, + { + "description": "Enables the unregister command without any pre-configured scope.", + "type": "string", + "const": "deep-link:allow-unregister" + }, + { + "description": "Denies the get_current command without any pre-configured scope.", + "type": "string", + "const": "deep-link:deny-get-current" + }, + { + "description": "Denies the is_registered command without any pre-configured scope.", + "type": "string", + "const": "deep-link:deny-is-registered" + }, + { + "description": "Denies the register command without any pre-configured scope.", + "type": "string", + "const": "deep-link:deny-register" + }, + { + "description": "Denies the unregister command without any pre-configured scope.", + "type": "string", + "const": "deep-link:deny-unregister" + }, + { + "description": "This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n", + "type": "string", + "const": "dialog:default" + }, + { + "description": "Enables the ask command without any pre-configured scope.", + "type": "string", + "const": "dialog:allow-ask" + }, + { + "description": "Enables the confirm command without any pre-configured scope.", + "type": "string", + "const": "dialog:allow-confirm" + }, + { + "description": "Enables the message command without any pre-configured scope.", + "type": "string", + "const": "dialog:allow-message" + }, + { + "description": "Enables the open command without any pre-configured scope.", + "type": "string", + "const": "dialog:allow-open" + }, + { + "description": "Enables the save command without any pre-configured scope.", + "type": "string", + "const": "dialog:allow-save" + }, + { + "description": "Denies the ask command without any pre-configured scope.", + "type": "string", + "const": "dialog:deny-ask" + }, + { + "description": "Denies the confirm command without any pre-configured scope.", + "type": "string", + "const": "dialog:deny-confirm" + }, + { + "description": "Denies the message command without any pre-configured scope.", + "type": "string", + "const": "dialog:deny-message" + }, + { + "description": "Denies the open command without any pre-configured scope.", + "type": "string", + "const": "dialog:deny-open" + }, + { + "description": "Denies the save command without any pre-configured scope.", + "type": "string", + "const": "dialog:deny-save" + }, + { + "description": "Default plugin permissions.", + "type": "string", + "const": "import:default" + }, + { + "description": "Enables the get_default_launcher_path command without any pre-configured scope.", + "type": "string", + "const": "import:allow-get-default-launcher-path" + }, + { + "description": "Enables the get_importable_instances command without any pre-configured scope.", + "type": "string", + "const": "import:allow-get-importable-instances" + }, + { + "description": "Enables the import_instance command without any pre-configured scope.", + "type": "string", + "const": "import:allow-import-instance" + }, + { + "description": "Enables the is_valid_importable_instance command without any pre-configured scope.", + "type": "string", + "const": "import:allow-is-valid-importable-instance" + }, + { + "description": "Denies the get_default_launcher_path command without any pre-configured scope.", + "type": "string", + "const": "import:deny-get-default-launcher-path" + }, + { + "description": "Denies the get_importable_instances command without any pre-configured scope.", + "type": "string", + "const": "import:deny-get-importable-instances" + }, + { + "description": "Denies the import_instance command without any pre-configured scope.", + "type": "string", + "const": "import:deny-import-instance" + }, + { + "description": "Denies the is_valid_importable_instance command without any pre-configured scope.", + "type": "string", + "const": "import:deny-is-valid-importable-instance" + }, + { + "description": "Default plugin permissions.", + "type": "string", + "const": "jre:default" + }, + { + "description": "Enables the get_java_versions command without any pre-configured scope.", + "type": "string", + "const": "jre:allow-get-java-versions" + }, + { + "description": "Enables the jre_auto_install_java command without any pre-configured scope.", + "type": "string", + "const": "jre:allow-jre-auto-install-java" + }, + { + "description": "Enables the jre_find_filtered_jres command without any pre-configured scope.", + "type": "string", + "const": "jre:allow-jre-find-filtered-jres" + }, + { + "description": "Enables the jre_get_jre command without any pre-configured scope.", + "type": "string", + "const": "jre:allow-jre-get-jre" + }, + { + "description": "Enables the jre_get_max_memory command without any pre-configured scope.", + "type": "string", + "const": "jre:allow-jre-get-max-memory" + }, + { + "description": "Enables the jre_test_jre command without any pre-configured scope.", + "type": "string", + "const": "jre:allow-jre-test-jre" + }, + { + "description": "Enables the set_java_version command without any pre-configured scope.", + "type": "string", + "const": "jre:allow-set-java-version" + }, + { + "description": "Denies the get_java_versions command without any pre-configured scope.", + "type": "string", + "const": "jre:deny-get-java-versions" + }, + { + "description": "Denies the jre_auto_install_java command without any pre-configured scope.", + "type": "string", + "const": "jre:deny-jre-auto-install-java" + }, + { + "description": "Denies the jre_find_filtered_jres command without any pre-configured scope.", + "type": "string", + "const": "jre:deny-jre-find-filtered-jres" + }, + { + "description": "Denies the jre_get_jre command without any pre-configured scope.", + "type": "string", + "const": "jre:deny-jre-get-jre" + }, + { + "description": "Denies the jre_get_max_memory command without any pre-configured scope.", + "type": "string", + "const": "jre:deny-jre-get-max-memory" + }, + { + "description": "Denies the jre_test_jre command without any pre-configured scope.", + "type": "string", + "const": "jre:deny-jre-test-jre" + }, + { + "description": "Denies the set_java_version command without any pre-configured scope.", + "type": "string", + "const": "jre:deny-set-java-version" + }, + { + "description": "Default plugin permissions.", + "type": "string", + "const": "logs:default" + }, + { + "description": "Enables the logs_delete_logs command without any pre-configured scope.", + "type": "string", + "const": "logs:allow-logs-delete-logs" + }, + { + "description": "Enables the logs_delete_logs_by_filename command without any pre-configured scope.", + "type": "string", + "const": "logs:allow-logs-delete-logs-by-filename" + }, + { + "description": "Enables the logs_get_latest_log_cursor command without any pre-configured scope.", + "type": "string", + "const": "logs:allow-logs-get-latest-log-cursor" + }, + { + "description": "Enables the logs_get_logs command without any pre-configured scope.", + "type": "string", + "const": "logs:allow-logs-get-logs" + }, + { + "description": "Enables the logs_get_logs_by_filename command without any pre-configured scope.", + "type": "string", + "const": "logs:allow-logs-get-logs-by-filename" + }, + { + "description": "Enables the logs_get_output_by_filename command without any pre-configured scope.", + "type": "string", + "const": "logs:allow-logs-get-output-by-filename" + }, + { + "description": "Denies the logs_delete_logs command without any pre-configured scope.", + "type": "string", + "const": "logs:deny-logs-delete-logs" + }, + { + "description": "Denies the logs_delete_logs_by_filename command without any pre-configured scope.", + "type": "string", + "const": "logs:deny-logs-delete-logs-by-filename" + }, + { + "description": "Denies the logs_get_latest_log_cursor command without any pre-configured scope.", + "type": "string", + "const": "logs:deny-logs-get-latest-log-cursor" + }, + { + "description": "Denies the logs_get_logs command without any pre-configured scope.", + "type": "string", + "const": "logs:deny-logs-get-logs" + }, + { + "description": "Denies the logs_get_logs_by_filename command without any pre-configured scope.", + "type": "string", + "const": "logs:deny-logs-get-logs-by-filename" + }, + { + "description": "Denies the logs_get_output_by_filename command without any pre-configured scope.", + "type": "string", + "const": "logs:deny-logs-get-output-by-filename" + }, + { + "description": "Default plugin permissions.", + "type": "string", + "const": "metadata:default" + }, + { + "description": "Enables the metadata_get_game_versions command without any pre-configured scope.", + "type": "string", + "const": "metadata:allow-metadata-get-game-versions" + }, + { + "description": "Enables the metadata_get_loader_versions command without any pre-configured scope.", + "type": "string", + "const": "metadata:allow-metadata-get-loader-versions" + }, + { + "description": "Denies the metadata_get_game_versions command without any pre-configured scope.", + "type": "string", + "const": "metadata:deny-metadata-get-game-versions" + }, + { + "description": "Denies the metadata_get_loader_versions command without any pre-configured scope.", + "type": "string", + "const": "metadata:deny-metadata-get-loader-versions" + }, + { + "description": "Default plugin permissions.", + "type": "string", + "const": "mr-auth:default" + }, + { + "description": "Enables the create_account command without any pre-configured scope.", + "type": "string", + "const": "mr-auth:allow-create-account" + }, + { + "description": "Enables the get command without any pre-configured scope.", + "type": "string", + "const": "mr-auth:allow-get" + }, + { + "description": "Enables the login_2fa command without any pre-configured scope.", + "type": "string", + "const": "mr-auth:allow-login-2fa" + }, + { + "description": "Enables the login_pass command without any pre-configured scope.", + "type": "string", + "const": "mr-auth:allow-login-pass" + }, + { + "description": "Enables the logout command without any pre-configured scope.", + "type": "string", + "const": "mr-auth:allow-logout" + }, + { + "description": "Denies the create_account command without any pre-configured scope.", + "type": "string", + "const": "mr-auth:deny-create-account" + }, + { + "description": "Denies the get command without any pre-configured scope.", + "type": "string", + "const": "mr-auth:deny-get" + }, + { + "description": "Denies the login_2fa command without any pre-configured scope.", + "type": "string", + "const": "mr-auth:deny-login-2fa" + }, + { + "description": "Denies the login_pass command without any pre-configured scope.", + "type": "string", + "const": "mr-auth:deny-login-pass" + }, + { + "description": "Denies the logout command without any pre-configured scope.", + "type": "string", + "const": "mr-auth:deny-logout" + }, + { + "description": "This permission set configures which\noperating system information are available\nto gather from the frontend.\n\n#### Granted Permissions\n\nAll information except the host name are available.\n\n", + "type": "string", + "const": "os:default" + }, + { + "description": "Enables the arch command without any pre-configured scope.", + "type": "string", + "const": "os:allow-arch" + }, + { + "description": "Enables the exe_extension command without any pre-configured scope.", + "type": "string", + "const": "os:allow-exe-extension" + }, + { + "description": "Enables the family command without any pre-configured scope.", + "type": "string", + "const": "os:allow-family" + }, + { + "description": "Enables the hostname command without any pre-configured scope.", + "type": "string", + "const": "os:allow-hostname" + }, + { + "description": "Enables the locale command without any pre-configured scope.", + "type": "string", + "const": "os:allow-locale" + }, + { + "description": "Enables the os_type command without any pre-configured scope.", + "type": "string", + "const": "os:allow-os-type" + }, + { + "description": "Enables the platform command without any pre-configured scope.", + "type": "string", + "const": "os:allow-platform" + }, + { + "description": "Enables the version command without any pre-configured scope.", + "type": "string", + "const": "os:allow-version" + }, + { + "description": "Denies the arch command without any pre-configured scope.", + "type": "string", + "const": "os:deny-arch" + }, + { + "description": "Denies the exe_extension command without any pre-configured scope.", + "type": "string", + "const": "os:deny-exe-extension" + }, + { + "description": "Denies the family command without any pre-configured scope.", + "type": "string", + "const": "os:deny-family" + }, + { + "description": "Denies the hostname command without any pre-configured scope.", + "type": "string", + "const": "os:deny-hostname" + }, + { + "description": "Denies the locale command without any pre-configured scope.", + "type": "string", + "const": "os:deny-locale" + }, + { + "description": "Denies the os_type command without any pre-configured scope.", + "type": "string", + "const": "os:deny-os-type" + }, + { + "description": "Denies the platform command without any pre-configured scope.", + "type": "string", + "const": "os:deny-platform" + }, + { + "description": "Denies the version command without any pre-configured scope.", + "type": "string", + "const": "os:deny-version" + }, + { + "description": "Default plugin permissions.", + "type": "string", + "const": "pack:default" + }, + { + "description": "Enables the pack_get_profile_from_pack command without any pre-configured scope.", + "type": "string", + "const": "pack:allow-pack-get-profile-from-pack" + }, + { + "description": "Enables the pack_install command without any pre-configured scope.", + "type": "string", + "const": "pack:allow-pack-install" + }, + { + "description": "Denies the pack_get_profile_from_pack command without any pre-configured scope.", + "type": "string", + "const": "pack:deny-pack-get-profile-from-pack" + }, + { + "description": "Denies the pack_install command without any pre-configured scope.", + "type": "string", + "const": "pack:deny-pack-install" + }, + { + "description": "Default plugin permissions.", + "type": "string", + "const": "process:default" + }, + { + "description": "Enables the process_get_all command without any pre-configured scope.", + "type": "string", + "const": "process:allow-process-get-all" + }, + { + "description": "Enables the process_get_by_profile_path command without any pre-configured scope.", + "type": "string", + "const": "process:allow-process-get-by-profile-path" + }, + { + "description": "Enables the process_kill command without any pre-configured scope.", + "type": "string", + "const": "process:allow-process-kill" + }, + { + "description": "Enables the process_wait_for command without any pre-configured scope.", + "type": "string", + "const": "process:allow-process-wait-for" + }, + { + "description": "Denies the process_get_all command without any pre-configured scope.", + "type": "string", + "const": "process:deny-process-get-all" + }, + { + "description": "Denies the process_get_by_profile_path command without any pre-configured scope.", + "type": "string", + "const": "process:deny-process-get-by-profile-path" + }, + { + "description": "Denies the process_kill command without any pre-configured scope.", + "type": "string", + "const": "process:deny-process-kill" + }, + { + "description": "Denies the process_wait_for command without any pre-configured scope.", + "type": "string", + "const": "process:deny-process-wait-for" + }, + { + "description": "Default plugin permissions.", + "type": "string", + "const": "profile:default" + }, + { + "description": "Enables the profile_add_project_from_path command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-add-project-from-path" + }, + { + "description": "Enables the profile_add_project_from_version command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-add-project-from-version" + }, + { + "description": "Enables the profile_check_installed command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-check-installed" + }, + { + "description": "Enables the profile_edit command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-edit" + }, + { + "description": "Enables the profile_edit_icon command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-edit-icon" + }, + { + "description": "Enables the profile_export_mrpack command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-export-mrpack" + }, + { + "description": "Enables the profile_get command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-get" + }, + { + "description": "Enables the profile_get_full_path command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-get-full-path" + }, + { + "description": "Enables the profile_get_many command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-get-many" + }, + { + "description": "Enables the profile_get_mod_full_path command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-get-mod-full-path" + }, + { + "description": "Enables the profile_get_optimal_jre_key command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-get-optimal-jre-key" + }, + { + "description": "Enables the profile_get_pack_export_candidates command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-get-pack-export-candidates" + }, + { + "description": "Enables the profile_get_projects command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-get-projects" + }, + { + "description": "Enables the profile_install command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-install" + }, + { + "description": "Enables the profile_kill command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-kill" + }, + { + "description": "Enables the profile_list command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-list" + }, + { + "description": "Enables the profile_remove command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-remove" + }, + { + "description": "Enables the profile_remove_project command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-remove-project" + }, + { + "description": "Enables the profile_repair_managed_modrinth command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-repair-managed-modrinth" + }, + { + "description": "Enables the profile_run command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-run" + }, + { + "description": "Enables the profile_run_credentials command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-run-credentials" + }, + { + "description": "Enables the profile_toggle_disable_project command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-toggle-disable-project" + }, + { + "description": "Enables the profile_update_all command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-update-all" + }, + { + "description": "Enables the profile_update_managed_modrinth_version command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-update-managed-modrinth-version" + }, + { + "description": "Enables the profile_update_project command without any pre-configured scope.", + "type": "string", + "const": "profile:allow-profile-update-project" + }, + { + "description": "Denies the profile_add_project_from_path command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-add-project-from-path" + }, + { + "description": "Denies the profile_add_project_from_version command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-add-project-from-version" + }, + { + "description": "Denies the profile_check_installed command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-check-installed" + }, + { + "description": "Denies the profile_edit command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-edit" + }, + { + "description": "Denies the profile_edit_icon command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-edit-icon" + }, + { + "description": "Denies the profile_export_mrpack command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-export-mrpack" + }, + { + "description": "Denies the profile_get command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-get" + }, + { + "description": "Denies the profile_get_full_path command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-get-full-path" + }, + { + "description": "Denies the profile_get_many command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-get-many" + }, + { + "description": "Denies the profile_get_mod_full_path command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-get-mod-full-path" + }, + { + "description": "Denies the profile_get_optimal_jre_key command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-get-optimal-jre-key" + }, + { + "description": "Denies the profile_get_pack_export_candidates command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-get-pack-export-candidates" + }, + { + "description": "Denies the profile_get_projects command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-get-projects" + }, + { + "description": "Denies the profile_install command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-install" + }, + { + "description": "Denies the profile_kill command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-kill" + }, + { + "description": "Denies the profile_list command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-list" + }, + { + "description": "Denies the profile_remove command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-remove" + }, + { + "description": "Denies the profile_remove_project command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-remove-project" + }, + { + "description": "Denies the profile_repair_managed_modrinth command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-repair-managed-modrinth" + }, + { + "description": "Denies the profile_run command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-run" + }, + { + "description": "Denies the profile_run_credentials command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-run-credentials" + }, + { + "description": "Denies the profile_toggle_disable_project command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-toggle-disable-project" + }, + { + "description": "Denies the profile_update_all command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-update-all" + }, + { + "description": "Denies the profile_update_managed_modrinth_version command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-update-managed-modrinth-version" + }, + { + "description": "Denies the profile_update_project command without any pre-configured scope.", + "type": "string", + "const": "profile:deny-profile-update-project" + }, + { + "description": "Default plugin permissions.", + "type": "string", + "const": "profile-create:default" + }, + { + "description": "Enables the profile_create command without any pre-configured scope.", + "type": "string", + "const": "profile-create:allow-profile-create" + }, + { + "description": "Enables the profile_duplicate command without any pre-configured scope.", + "type": "string", + "const": "profile-create:allow-profile-duplicate" + }, + { + "description": "Denies the profile_create command without any pre-configured scope.", + "type": "string", + "const": "profile-create:deny-profile-create" + }, + { + "description": "Denies the profile_duplicate command without any pre-configured scope.", + "type": "string", + "const": "profile-create:deny-profile-duplicate" + }, + { + "description": "Default plugin permissions.", + "type": "string", + "const": "settings:default" + }, + { + "description": "Enables the cancel_directory_change command without any pre-configured scope.", + "type": "string", + "const": "settings:allow-cancel-directory-change" + }, + { + "description": "Enables the settings_get command without any pre-configured scope.", + "type": "string", + "const": "settings:allow-settings-get" + }, + { + "description": "Enables the settings_set command without any pre-configured scope.", + "type": "string", + "const": "settings:allow-settings-set" + }, + { + "description": "Denies the cancel_directory_change command without any pre-configured scope.", + "type": "string", + "const": "settings:deny-cancel-directory-change" + }, + { + "description": "Denies the settings_get command without any pre-configured scope.", + "type": "string", + "const": "settings:deny-settings-get" + }, + { + "description": "Denies the settings_set command without any pre-configured scope.", + "type": "string", + "const": "settings:deny-settings-set" + }, + { + "description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", + "type": "string", + "const": "shell:default" + }, + { + "description": "Enables the execute command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-execute" + }, + { + "description": "Enables the kill command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-kill" + }, + { + "description": "Enables the open command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-open" + }, + { + "description": "Enables the spawn command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-spawn" + }, + { + "description": "Enables the stdin_write command without any pre-configured scope.", + "type": "string", + "const": "shell:allow-stdin-write" + }, + { + "description": "Denies the execute command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-execute" + }, + { + "description": "Denies the kill command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-kill" + }, + { + "description": "Denies the open command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-open" + }, + { + "description": "Denies the spawn command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-spawn" + }, + { + "description": "Denies the stdin_write command without any pre-configured scope.", + "type": "string", + "const": "shell:deny-stdin-write" + }, + { + "description": "Default plugin permissions.", + "type": "string", + "const": "tags:default" + }, + { + "description": "Enables the tags_get_categories command without any pre-configured scope.", + "type": "string", + "const": "tags:allow-tags-get-categories" + }, + { + "description": "Enables the tags_get_donation_platforms command without any pre-configured scope.", + "type": "string", + "const": "tags:allow-tags-get-donation-platforms" + }, + { + "description": "Enables the tags_get_game_versions command without any pre-configured scope.", + "type": "string", + "const": "tags:allow-tags-get-game-versions" + }, + { + "description": "Enables the tags_get_loaders command without any pre-configured scope.", + "type": "string", + "const": "tags:allow-tags-get-loaders" + }, + { + "description": "Enables the tags_get_report_types command without any pre-configured scope.", + "type": "string", + "const": "tags:allow-tags-get-report-types" + }, + { + "description": "Denies the tags_get_categories command without any pre-configured scope.", + "type": "string", + "const": "tags:deny-tags-get-categories" + }, + { + "description": "Denies the tags_get_donation_platforms command without any pre-configured scope.", + "type": "string", + "const": "tags:deny-tags-get-donation-platforms" + }, + { + "description": "Denies the tags_get_game_versions command without any pre-configured scope.", + "type": "string", + "const": "tags:deny-tags-get-game-versions" + }, + { + "description": "Denies the tags_get_loaders command without any pre-configured scope.", + "type": "string", + "const": "tags:deny-tags-get-loaders" + }, + { + "description": "Denies the tags_get_report_types command without any pre-configured scope.", + "type": "string", + "const": "tags:deny-tags-get-report-types" + }, + { + "description": "This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n", + "type": "string", + "const": "updater:default" + }, + { + "description": "Enables the check command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-check" + }, + { + "description": "Enables the download command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-download" + }, + { + "description": "Enables the download_and_install command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-download-and-install" + }, + { + "description": "Enables the install command without any pre-configured scope.", + "type": "string", + "const": "updater:allow-install" + }, + { + "description": "Denies the check command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-check" + }, + { + "description": "Denies the download command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-download" + }, + { + "description": "Denies the download_and_install command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-download-and-install" + }, + { + "description": "Denies the install command without any pre-configured scope.", + "type": "string", + "const": "updater:deny-install" + }, + { + "description": "Default plugin permissions.", + "type": "string", + "const": "utils:default" + }, + { + "description": "Enables the get_opening_command command without any pre-configured scope.", + "type": "string", + "const": "utils:allow-get-opening-command" + }, + { + "description": "Enables the get_os command without any pre-configured scope.", + "type": "string", + "const": "utils:allow-get-os" + }, + { + "description": "Enables the highlight_in_folder command without any pre-configured scope.", + "type": "string", + "const": "utils:allow-highlight-in-folder" + }, + { + "description": "Enables the open_path command without any pre-configured scope.", + "type": "string", + "const": "utils:allow-open-path" + }, + { + "description": "Enables the progress_bars_list command without any pre-configured scope.", + "type": "string", + "const": "utils:allow-progress-bars-list" + }, + { + "description": "Enables the should_disable_mouseover command without any pre-configured scope.", + "type": "string", + "const": "utils:allow-should-disable-mouseover" + }, + { + "description": "Enables the show_launcher_logs_folder command without any pre-configured scope.", + "type": "string", + "const": "utils:allow-show-launcher-logs-folder" + }, + { + "description": "Denies the get_opening_command command without any pre-configured scope.", + "type": "string", + "const": "utils:deny-get-opening-command" + }, + { + "description": "Denies the get_os command without any pre-configured scope.", + "type": "string", + "const": "utils:deny-get-os" + }, + { + "description": "Denies the highlight_in_folder command without any pre-configured scope.", + "type": "string", + "const": "utils:deny-highlight-in-folder" + }, + { + "description": "Denies the open_path command without any pre-configured scope.", + "type": "string", + "const": "utils:deny-open-path" + }, + { + "description": "Denies the progress_bars_list command without any pre-configured scope.", + "type": "string", + "const": "utils:deny-progress-bars-list" + }, + { + "description": "Denies the should_disable_mouseover command without any pre-configured scope.", + "type": "string", + "const": "utils:deny-should-disable-mouseover" + }, + { + "description": "Denies the show_launcher_logs_folder command without any pre-configured scope.", + "type": "string", + "const": "utils:deny-show-launcher-logs-folder" + }, + { + "description": "This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", + "type": "string", + "const": "window-state:default" + }, + { + "description": "Enables the filename command without any pre-configured scope.", + "type": "string", + "const": "window-state:allow-filename" + }, + { + "description": "Enables the restore_state command without any pre-configured scope.", + "type": "string", + "const": "window-state:allow-restore-state" + }, + { + "description": "Enables the save_window_state command without any pre-configured scope.", + "type": "string", + "const": "window-state:allow-save-window-state" + }, + { + "description": "Denies the filename command without any pre-configured scope.", + "type": "string", + "const": "window-state:deny-filename" + }, + { + "description": "Denies the restore_state command without any pre-configured scope.", + "type": "string", + "const": "window-state:deny-restore-state" + }, + { + "description": "Denies the save_window_state command without any pre-configured scope.", + "type": "string", + "const": "window-state:deny-save-window-state" + } + ] + }, + "Value": { + "description": "All supported ACL values.", + "anyOf": [ + { + "description": "Represents a null JSON value.", + "type": "null" + }, + { + "description": "Represents a [`bool`].", + "type": "boolean" + }, + { + "description": "Represents a valid ACL [`Number`].", + "allOf": [ + { + "$ref": "#/definitions/Number" + } + ] + }, + { + "description": "Represents a [`String`].", + "type": "string" + }, + { + "description": "Represents a list of other [`Value`]s.", + "type": "array", + "items": { + "$ref": "#/definitions/Value" + } + }, + { + "description": "Represents a map of [`String`] keys to [`Value`]s.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Value" + } + } + ] + }, + "Number": { + "description": "A valid ACL number.", + "anyOf": [ + { + "description": "Represents an [`i64`].", + "type": "integer", + "format": "int64" + }, + { + "description": "Represents a [`f64`].", + "type": "number", + "format": "double" + } + ] + }, + "Target": { + "description": "Platform target.", + "oneOf": [ + { + "description": "MacOS.", + "type": "string", + "enum": [ + "macOS" + ] + }, + { + "description": "Windows.", + "type": "string", + "enum": [ + "windows" + ] + }, + { + "description": "Linux.", + "type": "string", + "enum": [ + "linux" + ] + }, + { + "description": "Android.", + "type": "string", + "enum": [ + "android" + ] + }, + { + "description": "iOS.", + "type": "string", + "enum": [ + "iOS" + ] + } + ] + }, + "ShellAllowedArg": { + "description": "A command argument allowed to be executed by the webview API.", + "anyOf": [ + { + "description": "A non-configurable argument that is passed to the command in the order it was specified.", + "type": "string" + }, + { + "description": "A variable that is set while calling the command from the webview API.", + "type": "object", + "required": [ + "validator" + ], + "properties": { + "raw": { + "description": "Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.", + "default": false, + "type": "boolean" + }, + "validator": { + "description": "[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: ", + "type": "string" + } + }, + "additionalProperties": false + } + ] + }, + "ShellAllowedArgs": { + "description": "A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration.", + "anyOf": [ + { + "description": "Use a simple boolean to allow all or disable all arguments to this command configuration.", + "type": "boolean" + }, + { + "description": "A specific set of [`ShellAllowedArg`] that are valid to call for the command configuration.", + "type": "array", + "items": { + "$ref": "#/definitions/ShellAllowedArg" + } + } + ] + } + } +} \ No newline at end of file diff --git a/apps/daedalus_client/Cargo.toml b/apps/daedalus_client/Cargo.toml index 37acaeb10..30b0f9db5 100644 --- a/apps/daedalus_client/Cargo.toml +++ b/apps/daedalus_client/Cargo.toml @@ -16,18 +16,27 @@ serde_json = "1.0" serde-xml-rs = "0.6.0" lazy_static = "1.4.0" thiserror = "1.0" -reqwest = { version = "0.12.5", features = ["stream", "json", "rustls-tls"] } +reqwest = { version = "0.12.5", default-features = false, features = [ + "stream", + "json", + "rustls-tls-native-roots", +] } async_zip = { version = "0.0.17", features = ["full"] } semver = "1.0" chrono = { version = "0.4", features = ["serde"] } bytes = "1.6.0" -rust-s3 = "0.34.0" +rust-s3 = { version = "0.33.0", default-features = false, features = [ + "fail-on-err", + "tags", + "tokio-rustls-tls", + "reqwest", +] } dashmap = "5.5.3" sha1_smol = { version = "1.0.0", features = ["std"] } -indexmap = { version = "2.2.6", features = ["serde"]} +indexmap = { version = "2.2.6", features = ["serde"] } itertools = "0.13.0" tracing-error = "0.2.0" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } -tracing-futures = { version = "0.2.5", features = ["futures", "tokio"] } \ No newline at end of file +tracing-futures = { version = "0.2.5", features = ["futures", "tokio"] } diff --git a/apps/daedalus_client/src/forge.rs b/apps/daedalus_client/src/forge.rs index b36266556..5591f3211 100644 --- a/apps/daedalus_client/src/forge.rs +++ b/apps/daedalus_client/src/forge.rs @@ -749,6 +749,7 @@ async fn fetch( let manifest = daedalus::modded::Manifest { game_versions: forge_versions .into_iter() + .sorted_by(|a, b| b.game_version.cmp(&a.game_version)) .rev() .chunk_by(|x| x.game_version.clone()) .into_iter() diff --git a/apps/docs/astro.config.mjs b/apps/docs/astro.config.mjs index a311a155f..4fcf82fa6 100644 --- a/apps/docs/astro.config.mjs +++ b/apps/docs/astro.config.mjs @@ -1,5 +1,5 @@ -import { defineConfig } from 'astro/config'; -import starlight from '@astrojs/starlight'; +import starlight from '@astrojs/starlight' +import { defineConfig } from 'astro/config' import starlightOpenAPI, { openAPISidebarGroups } from 'starlight-openapi' // https://astro.build/config @@ -8,15 +8,16 @@ export default defineConfig({ integrations: [ starlight({ title: 'Modrinth Documentation', + favicon: '/favicon.ico', editLink: { baseUrl: 'https://github.com/modrinth/code/edit/main/apps/docs/', }, social: { - github: 'https://github.com/modrinth/code', - discord: 'https://discord.modrinth.com', - 'x.com': 'https://x.com/modrinth', - mastodon: 'https://floss.social/@modrinth', - threads: 'https://threads.net/@modrinth', + github: 'https://github.com/modrinth/code', + discord: 'https://discord.modrinth.com', + 'x.com': 'https://x.com/modrinth', + mastodon: 'https://floss.social/@modrinth', + threads: 'https://threads.net/@modrinth', }, logo: { light: './src/assets/light-logo.svg', @@ -36,16 +37,16 @@ export default defineConfig({ label: 'Modrinth API', schema: './public/openapi.yaml', }, - ]) + ]), ], sidebar: [ { - label: 'Contributing to Modrinth', - autogenerate: { directory: 'contributing' }, + label: 'Contributing to Modrinth', + autogenerate: { directory: 'contributing' }, }, // Add the generated sidebar group to the sidebar. ...openAPISidebarGroups, ], }), ], -}); +}) diff --git a/apps/docs/public/openapi.yaml b/apps/docs/public/openapi.yaml index c4e023beb..1b7bd6968 100644 --- a/apps/docs/public/openapi.yaml +++ b/apps/docs/public/openapi.yaml @@ -339,8 +339,8 @@ components: type: array items: type: string - description: The mod loaders that this version supports - example: ["fabric", "forge"] + description: The mod loaders that this version supports. In case of resource packs, use "minecraft" + example: ["fabric", "forge", "minecraft"] featured: type: boolean description: Whether the version is featured or not diff --git a/apps/frontend/.eslintrc.cjs b/apps/frontend/.eslintrc.cjs index 5d253386a..b0faf8948 100644 --- a/apps/frontend/.eslintrc.cjs +++ b/apps/frontend/.eslintrc.cjs @@ -1,4 +1,7 @@ module.exports = { root: true, extends: ["../../packages/eslint-config-custom/nuxt.js"], + rules: { + "import/no-unresolved": "off", + }, }; diff --git a/apps/frontend/nuxt.config.ts b/apps/frontend/nuxt.config.ts index 867919706..966fe4fb1 100644 --- a/apps/frontend/nuxt.config.ts +++ b/apps/frontend/nuxt.config.ts @@ -176,7 +176,6 @@ export default defineNuxtConfig({ $fetch(`${API_URL}projects_random?count=60`, headers), $fetch(`${API_URL}search?limit=3&query=leave&index=relevance`, headers), $fetch(`${API_URL}search?limit=3&query=&index=updated`, headers), - // TODO: dehardcode $fetch(`${API_URL.replace("/v2/", "/_internal/")}billing/products`, headers), ]); @@ -321,8 +320,10 @@ export default defineNuxtConfig({ apiBaseUrl: process.env.BASE_URL ?? globalThis.BASE_URL ?? getApiUrl(), // @ts-ignore rateLimitKey: process.env.RATE_LIMIT_IGNORE_KEY ?? globalThis.RATE_LIMIT_IGNORE_KEY, + pyroBaseUrl: process.env.PYRO_BASE_URL, public: { apiBaseUrl: getApiUrl(), + pyroBaseUrl: process.env.PYRO_BASE_URL, siteUrl: getDomain(), production: isProduction(), featureFlagOverrides: getFeatureFlagOverrides(), @@ -361,7 +362,7 @@ export default defineNuxtConfig({ }, }, }, - modules: ["@vintl/nuxt", "@nuxtjs/turnstile"], + modules: ["@vintl/nuxt", "@nuxtjs/turnstile", "@pinia/nuxt"], vintl: { defaultLocale: "en-US", locales: [ @@ -462,6 +463,7 @@ function getDomain() { return "https://modrinth.com"; } } else { - return "http://localhost:3000"; + const port = process.env.PORT || 3000; + return `http://localhost:${port}`; } } diff --git a/apps/frontend/package.json b/apps/frontend/package.json index fca6cc271..3a13549f4 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -16,6 +16,7 @@ "@formatjs/cli": "^6.2.12", "@nuxt/devtools": "^1.3.3", "@nuxtjs/turnstile": "^0.8.0", + "@types/dompurify": "^3.0.5", "@types/node": "^20.1.0", "@vintl/compact-number": "^2.0.5", "@vintl/how-ago": "^3.0.1", @@ -38,8 +39,13 @@ "@modrinth/assets": "workspace:*", "@modrinth/ui": "workspace:*", "@modrinth/utils": "workspace:*", + "@pinia/nuxt": "^0.5.1", "@vintl/vintl": "^4.4.1", + "@vueuse/core": "^11.1.0", + "ace-builds": "^1.36.2", + "ansi-to-html": "^0.7.2", "dayjs": "^1.11.7", + "dompurify": "^3.1.7", "floating-vue": "2.0.0-beta.20", "fuse.js": "^6.6.2", "highlight.js": "^11.7.0", @@ -48,9 +54,12 @@ "jszip": "^3.10.1", "markdown-it": "14.1.0", "pathe": "^1.1.2", + "pinia": "^2.1.7", "qrcode.vue": "^3.4.0", "semver": "^7.5.4", - "vue-multiselect": "3.0.0", + "vue-multiselect": "3.0.0-alpha.2", + "vue-typed-virtual-list": "^1.0.10", + "vue3-ace-editor": "^2.2.4", "vue3-apexcharts": "^1.5.2", "xss": "^1.0.14" } diff --git a/apps/frontend/src/assets/images/badges/alpha-tester.svg b/apps/frontend/src/assets/images/badges/alpha-tester.svg new file mode 100644 index 000000000..487b25eb7 --- /dev/null +++ b/apps/frontend/src/assets/images/badges/alpha-tester.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/apps/frontend/src/assets/images/badges/beta-tester.svg b/apps/frontend/src/assets/images/badges/beta-tester.svg new file mode 100644 index 000000000..63d0c4003 --- /dev/null +++ b/apps/frontend/src/assets/images/badges/beta-tester.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/apps/frontend/src/assets/images/games/rinth.png b/apps/frontend/src/assets/images/games/rinth.png new file mode 100644 index 000000000..35b04a575 Binary files /dev/null and b/apps/frontend/src/assets/images/games/rinth.png differ diff --git a/apps/frontend/src/assets/images/servers/minecraft-background-dark.png b/apps/frontend/src/assets/images/servers/minecraft-background-dark.png new file mode 100644 index 000000000..bb22629be Binary files /dev/null and b/apps/frontend/src/assets/images/servers/minecraft-background-dark.png differ diff --git a/apps/frontend/src/assets/images/servers/minecraft_server_icon.png b/apps/frontend/src/assets/images/servers/minecraft_server_icon.png new file mode 100644 index 000000000..ec98382d4 Binary files /dev/null and b/apps/frontend/src/assets/images/servers/minecraft_server_icon.png differ diff --git a/apps/frontend/src/assets/images/servers/this-is-fine.gif b/apps/frontend/src/assets/images/servers/this-is-fine.gif new file mode 100644 index 000000000..3f175f231 Binary files /dev/null and b/apps/frontend/src/assets/images/servers/this-is-fine.gif differ diff --git a/apps/frontend/src/components/ui/Checkbox.vue b/apps/frontend/src/components/ui/Checkbox.vue index fc9390f9f..ddfe94366 100644 --- a/apps/frontend/src/components/ui/Checkbox.vue +++ b/apps/frontend/src/components/ui/Checkbox.vue @@ -119,7 +119,7 @@ export default { } svg { - color: var(--color-brand-inverted); + color: var(--color-accent-contrast, var(--color-brand-inverted)); stroke-width: 0.2rem; height: 0.8rem; width: 0.8rem; diff --git a/apps/frontend/src/components/ui/CopyCode.vue b/apps/frontend/src/components/ui/CopyCode.vue index e42fe01ee..7161a3a6b 100644 --- a/apps/frontend/src/components/ui/CopyCode.vue +++ b/apps/frontend/src/components/ui/CopyCode.vue @@ -45,7 +45,7 @@ export default { margin: 0; padding: 0.25rem 0.5rem; background-color: var(--color-code-bg); - width: min-content; + width: fit-content; border-radius: 10px; user-select: text; transition: @@ -55,7 +55,6 @@ export default { outline 0.2s ease-in-out; span { - max-width: 10rem; overflow: hidden; text-overflow: ellipsis; } diff --git a/apps/frontend/src/components/ui/NavTabs.vue b/apps/frontend/src/components/ui/NavTabs.vue index 9ab0bf4d0..3d7748297 100644 --- a/apps/frontend/src/components/ui/NavTabs.vue +++ b/apps/frontend/src/components/ui/NavTabs.vue @@ -1,6 +1,7 @@ {{ link.label }} +import { ref, computed, watch, onMounted } from "vue"; + const route = useNativeRoute(); interface Tab { @@ -47,12 +52,13 @@ const props = defineProps<{ query?: string; }>(); +const scrollContainer = ref(null); + const sliderLeft = ref(4); const sliderTop = ref(4); const sliderRight = ref(4); const sliderBottom = ref(4); const activeIndex = ref(-1); -const oldIndex = ref(-1); const subpageSelected = ref(false); const filteredLinks = computed(() => @@ -63,6 +69,8 @@ const sliderTopPx = computed(() => `${sliderTop.value}px`); const sliderRightPx = computed(() => `${sliderRight.value}px`); const sliderBottomPx = computed(() => `${sliderBottom.value}px`); +const tabLinkElements = ref(); + function pickLink() { let index = -1; subpageSelected.value = false; @@ -86,16 +94,13 @@ function pickLink() { if (activeIndex.value !== -1) { startAnimation(); } else { - oldIndex.value = -1; sliderLeft.value = 0; sliderRight.value = 0; } } -const tabLinkElements = ref(); - function startAnimation() { - const el = tabLinkElements.value[activeIndex.value].$el; + const el = tabLinkElements.value[activeIndex.value]?.$el; if (!el || !el.offsetParent) return; @@ -141,21 +146,19 @@ function startAnimation() { } onMounted(() => { - window.addEventListener("resize", pickLink); pickLink(); }); -onUnmounted(() => { - window.removeEventListener("resize", pickLink); -}); - -watch(route, () => pickLink()); +watch( + () => route.path, + () => pickLink(), +); + diff --git a/apps/frontend/src/components/ui/NotificationItem.vue b/apps/frontend/src/components/ui/NotificationItem.vue index 1d2132953..1f01cda87 100644 --- a/apps/frontend/src/components/ui/NotificationItem.vue +++ b/apps/frontend/src/components/ui/NotificationItem.vue @@ -571,6 +571,10 @@ function getMessages() { gap: var(--spacing-card-sm); } + .notification__actions .iconified-button.square-button svg { + margin-right: 0; + } + .unknown-type { color: var(--color-red); } diff --git a/apps/frontend/src/components/ui/ProjectMemberHeader.vue b/apps/frontend/src/components/ui/ProjectMemberHeader.vue index 087ddb73d..63f75715e 100644 --- a/apps/frontend/src/components/ui/ProjectMemberHeader.vue +++ b/apps/frontend/src/components/ui/ProjectMemberHeader.vue @@ -384,6 +384,8 @@ const submitForReview = async () => { } .author-actions { + margin-top: var(--spacing-card-md); + &:empty { display: none; } diff --git a/apps/frontend/src/components/ui/charts/ChartDisplay.vue b/apps/frontend/src/components/ui/charts/ChartDisplay.vue index 36a603f58..f60edd474 100644 --- a/apps/frontend/src/components/ui/charts/ChartDisplay.vue +++ b/apps/frontend/src/components/ui/charts/ChartDisplay.vue @@ -134,7 +134,6 @@ :data="analytics.formattedData.value.revenue.chart.data" :labels="analytics.formattedData.value.revenue.chart.labels" is-money - suffix="" :colors=" isUsingProjectColors ? analytics.formattedData.value.revenue.chart.colors @@ -193,15 +192,20 @@ class="country-value" > - + + + + + + - + + + + + + diff --git a/apps/frontend/src/components/ui/servers/BackupCreateModal.vue b/apps/frontend/src/components/ui/servers/BackupCreateModal.vue new file mode 100644 index 000000000..e0b674869 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/BackupCreateModal.vue @@ -0,0 +1,95 @@ + + + + Name + + + + + If left empty, the backup name will default to + Backup #{{ newBackupAmount }} + + + + + + + + Create backup + + + + + + Cancel + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/BackupDeleteModal.vue b/apps/frontend/src/components/ui/servers/BackupDeleteModal.vue new file mode 100644 index 000000000..44d0ac11e --- /dev/null +++ b/apps/frontend/src/components/ui/servers/BackupDeleteModal.vue @@ -0,0 +1,86 @@ + + + + + + {{ backupName }} + + + + {{ formattedDate }} + + + + + + + + Delete backup + + + + Cancel + + + + + + diff --git a/apps/frontend/src/components/ui/servers/BackupRenameModal.vue b/apps/frontend/src/components/ui/servers/BackupRenameModal.vue new file mode 100644 index 000000000..f1ab41e2f --- /dev/null +++ b/apps/frontend/src/components/ui/servers/BackupRenameModal.vue @@ -0,0 +1,86 @@ + + + + Name + + + + + + + Rename backup + + + + + + Cancel + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/BackupRestoreModal.vue b/apps/frontend/src/components/ui/servers/BackupRestoreModal.vue new file mode 100644 index 000000000..9439ecb2e --- /dev/null +++ b/apps/frontend/src/components/ui/servers/BackupRestoreModal.vue @@ -0,0 +1,82 @@ + + + + + + {{ backupName }} + + + + {{ formattedDate }} + + + + + + Restore backup + + + Cancel + + + + + + diff --git a/apps/frontend/src/components/ui/servers/BackupSettingsModal.vue b/apps/frontend/src/components/ui/servers/BackupSettingsModal.vue new file mode 100644 index 000000000..e85646309 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/BackupSettingsModal.vue @@ -0,0 +1,201 @@ + + + + + Auto backup + + Automatically create a backup of your server every + {{ autoBackupInterval == 1 ? "hour" : `${autoBackupInterval} hours` }} + + + + Loading settings... + + + + + Interval + + The amount of hours between each backup. This will only backup your server if it has + been modified since the last backup. + + + + + + + + + + + + + + + + + {{ autoBackupInterval == 1 ? "hour" : "hours" }} + + + + + + + {{ isSaving ? "Saving..." : "Save changes" }} + + + + + + Cancel + + + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/FileItem.vue b/apps/frontend/src/components/ui/servers/FileItem.vue new file mode 100644 index 000000000..78ca6100c --- /dev/null +++ b/apps/frontend/src/components/ui/servers/FileItem.vue @@ -0,0 +1,229 @@ + + e.key === 'Enter' && selectItem()" + > + + + + + + {{ name }} + + {{ subText }} + + + + + + {{ + formattedDate + }} + + + + Rename + Move + Download + Delete + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/FileManagerError.vue b/apps/frontend/src/components/ui/servers/FileManagerError.vue new file mode 100644 index 000000000..a15b5f826 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/FileManagerError.vue @@ -0,0 +1,40 @@ + + + + + {{ title }} + + {{ message }} + + + + + + Try again + + + + + + Go to home folder + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/FileVirtualList.vue b/apps/frontend/src/components/ui/servers/FileVirtualList.vue new file mode 100644 index 000000000..fe470cbef --- /dev/null +++ b/apps/frontend/src/components/ui/servers/FileVirtualList.vue @@ -0,0 +1,120 @@ + + + + + $emit('contextmenu', item, x, y)" + /> + + + + + + diff --git a/apps/frontend/src/components/ui/servers/FilesBrowseNavbar.vue b/apps/frontend/src/components/ui/servers/FilesBrowseNavbar.vue new file mode 100644 index 000000000..426007c5a --- /dev/null +++ b/apps/frontend/src/components/ui/servers/FilesBrowseNavbar.vue @@ -0,0 +1,231 @@ + + + + + + + + + + + Home + + + + + + + + + + + + {{ segment || "" }} + + + + + + + + + + + + + + + + + {{ sortMethodLabel }} + + + + Alphabetical + Date modified + Files only + Folders only + + + + Search folder + + + + + + + + + + + + New file + New folder + Upload file + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/FilesContextMenu.vue b/apps/frontend/src/components/ui/servers/FilesContextMenu.vue new file mode 100644 index 000000000..19acda990 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/FilesContextMenu.vue @@ -0,0 +1,106 @@ + + + + + + + Rename + + + + Move + + + + Download + + + + Delete + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/FilesCreateItemModal.vue b/apps/frontend/src/components/ui/servers/FilesCreateItemModal.vue new file mode 100644 index 000000000..0b29db261 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/FilesCreateItemModal.vue @@ -0,0 +1,95 @@ + + + + + Name + + {{ error }} + + + + + + Create + + + + + + Cancel + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/FilesDeleteItemModal.vue b/apps/frontend/src/components/ui/servers/FilesDeleteItemModal.vue new file mode 100644 index 000000000..f3879a58a --- /dev/null +++ b/apps/frontend/src/components/ui/servers/FilesDeleteItemModal.vue @@ -0,0 +1,77 @@ + + + + + + + + + + {{ item?.name }} + + {{ item?.count }} items + + + {{ ((item?.size ?? 0) / 1024 / 1024).toFixed(2) }} MB + + + + + + + + Delete {{ item?.type }} + + + + + + Cancel + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/FilesEditingNavbar.vue b/apps/frontend/src/components/ui/servers/FilesEditingNavbar.vue new file mode 100644 index 000000000..d359a9921 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/FilesEditingNavbar.vue @@ -0,0 +1,140 @@ + + + + + + + + + + Home + + + + + + + + + + {{ segment || "" }} + + + + + + {{ + fileName + }} + + + + + + + + + + + + + + Save + Save as... + + + + + Save & restart + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/FilesImageViewer.vue b/apps/frontend/src/components/ui/servers/FilesImageViewer.vue new file mode 100644 index 000000000..3792217d9 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/FilesImageViewer.vue @@ -0,0 +1,159 @@ + + + + + + + + + + Invalid or empty image file. + + + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/FilesMoveItemModal.vue b/apps/frontend/src/components/ui/servers/FilesMoveItemModal.vue new file mode 100644 index 000000000..3da9fbd6a --- /dev/null +++ b/apps/frontend/src/components/ui/servers/FilesMoveItemModal.vue @@ -0,0 +1,81 @@ + + + + + + + + New location: + + /root{{ newpath }} + + + + + + + Move + + + + + + Cancel + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/FilesRenameItemModal.vue b/apps/frontend/src/components/ui/servers/FilesRenameItemModal.vue new file mode 100644 index 000000000..de6657dda --- /dev/null +++ b/apps/frontend/src/components/ui/servers/FilesRenameItemModal.vue @@ -0,0 +1,94 @@ + + + + + Name + + {{ error }} + + + + + + Rename + + + + + + Cancel + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/LoaderSelector.vue b/apps/frontend/src/components/ui/servers/LoaderSelector.vue new file mode 100644 index 000000000..ceb3e3143 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/LoaderSelector.vue @@ -0,0 +1,76 @@ + + + + + + + + + + {{ loader.displayName }} + + + + Current + + + + {{ data.loader_version }} + + + + + + + + {{ isCurrentLoader(loader.name) ? "Reinstall" : "Install" }} + + + + + + diff --git a/apps/frontend/src/components/ui/servers/LogParser.vue b/apps/frontend/src/components/ui/servers/LogParser.vue new file mode 100644 index 000000000..efea31712 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/LogParser.vue @@ -0,0 +1,107 @@ + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/MOTDEditor.vue b/apps/frontend/src/components/ui/servers/MOTDEditor.vue new file mode 100644 index 000000000..aa4c5d0e8 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/MOTDEditor.vue @@ -0,0 +1,660 @@ + + + + + + + + {{ motd[lineIndex].reduce((sum, segment) => sum + segment.text.length, 0) }}/45 + characters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/ModrinthServersIcon.vue b/apps/frontend/src/components/ui/servers/ModrinthServersIcon.vue new file mode 100644 index 000000000..ea8832780 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ModrinthServersIcon.vue @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/PanelCopyIP.vue b/apps/frontend/src/components/ui/servers/PanelCopyIP.vue new file mode 100644 index 000000000..6bc45920d --- /dev/null +++ b/apps/frontend/src/components/ui/servers/PanelCopyIP.vue @@ -0,0 +1,31 @@ + + + + + Copy IP + + + + + diff --git a/apps/frontend/src/components/ui/servers/PanelOverviewLoading.vue b/apps/frontend/src/components/ui/servers/PanelOverviewLoading.vue new file mode 100644 index 000000000..7fbe45a37 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/PanelOverviewLoading.vue @@ -0,0 +1,77 @@ + + + + + + + + 0.00% + / 100% + + CPU usage + + + + + + + 0.00% + / 100% + + Memory usage + + + + + + 0 Bytes + / 0 Bytes + + Storage usage + + + + + + + + Console + + + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/PanelServerActionButton.vue b/apps/frontend/src/components/ui/servers/PanelServerActionButton.vue new file mode 100644 index 000000000..ebb5cf0b7 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/PanelServerActionButton.vue @@ -0,0 +1,312 @@ + + + + + Are you sure you want to {{ currentPendingAction }} the server? + + + + + + + {{ currentPendingActionFriendly }} server + + + + + + Cancel + + + + + + + + + + Close + + + + + + + Installing... + + + + + + + + {{ stopButtonText }} + + + + + + + + + + + + + {{ actionButtonText }} + + + + + + + + + + + + Kill server + + + + All servers + + + + Details + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/PanelServerStatus.vue b/apps/frontend/src/components/ui/servers/PanelServerStatus.vue new file mode 100644 index 000000000..81e6ebc6f --- /dev/null +++ b/apps/frontend/src/components/ui/servers/PanelServerStatus.vue @@ -0,0 +1,66 @@ + + + + + + + + + {{ getStatusText }} + + + + + + diff --git a/apps/frontend/src/components/ui/servers/PanelSpinner.vue b/apps/frontend/src/components/ui/servers/PanelSpinner.vue new file mode 100644 index 000000000..d9b5721de --- /dev/null +++ b/apps/frontend/src/components/ui/servers/PanelSpinner.vue @@ -0,0 +1,22 @@ + + + + + + diff --git a/apps/frontend/src/components/ui/servers/PanelTerminal.vue b/apps/frontend/src/components/ui/servers/PanelTerminal.vue new file mode 100644 index 000000000..47c0a8e84 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/PanelTerminal.vue @@ -0,0 +1,684 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Scroll to bottom + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/PanelTerminalFullscreen.vue b/apps/frontend/src/components/ui/servers/PanelTerminalFullscreen.vue new file mode 100644 index 000000000..c908aeabc --- /dev/null +++ b/apps/frontend/src/components/ui/servers/PanelTerminalFullscreen.vue @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/PanelTerminalMinimize.vue b/apps/frontend/src/components/ui/servers/PanelTerminalMinimize.vue new file mode 100644 index 000000000..109f532f9 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/PanelTerminalMinimize.vue @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/PoweredByPyro.vue b/apps/frontend/src/components/ui/servers/PoweredByPyro.vue new file mode 100644 index 000000000..f6c54fa3c --- /dev/null +++ b/apps/frontend/src/components/ui/servers/PoweredByPyro.vue @@ -0,0 +1,14 @@ + + + + Powered by Pyro + + + + diff --git a/apps/frontend/src/components/ui/servers/ProjectSelect.vue b/apps/frontend/src/components/ui/servers/ProjectSelect.vue new file mode 100644 index 000000000..bdc2e2ebd --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ProjectSelect.vue @@ -0,0 +1,167 @@ + + + + Search + + + + + + + + + + + {{ mod.title }} + + + {{ mod.description.substring(0, 100) }} + {{ mod.description.length > 100 ? "..." : "" }} + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/PyroLoading.vue b/apps/frontend/src/components/ui/servers/PyroLoading.vue new file mode 100644 index 000000000..3c72d239b --- /dev/null +++ b/apps/frontend/src/components/ui/servers/PyroLoading.vue @@ -0,0 +1,94 @@ + + + + + Loading... + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/PyroModal.vue b/apps/frontend/src/components/ui/servers/PyroModal.vue new file mode 100644 index 000000000..d2d9648cd --- /dev/null +++ b/apps/frontend/src/components/ui/servers/PyroModal.vue @@ -0,0 +1,60 @@ + + + + + + {{ props.header }} + + + + + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/SaveBanner.vue b/apps/frontend/src/components/ui/servers/SaveBanner.vue new file mode 100644 index 000000000..be754f733 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/SaveBanner.vue @@ -0,0 +1,75 @@ + + + + + + Careful, you have unsaved changes! + + + Reset + + + + {{ props.isUpdating ? "Saving..." : "Save" }} + + + + + {{ props.isUpdating ? "Saving..." : "Save & restart" }} + + + + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/ServerGameLabel.vue b/apps/frontend/src/components/ui/servers/ServerGameLabel.vue new file mode 100644 index 000000000..bef037812 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ServerGameLabel.vue @@ -0,0 +1,33 @@ + + + + + {{ game[0].toUpperCase() + game.slice(1) }} {{ mcVersion }} + + + {{ game[0].toUpperCase() + game.slice(1) }} {{ mcVersion }} + + + + + diff --git a/apps/frontend/src/components/ui/servers/ServerIcon.vue b/apps/frontend/src/components/ui/servers/ServerIcon.vue new file mode 100644 index 000000000..9e8d00b29 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ServerIcon.vue @@ -0,0 +1,26 @@ + + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/ServerInfoLabels.vue b/apps/frontend/src/components/ui/servers/ServerInfoLabels.vue new file mode 100644 index 000000000..a23430e78 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ServerInfoLabels.vue @@ -0,0 +1,41 @@ + + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/ServerListing.vue b/apps/frontend/src/components/ui/servers/ServerListing.vue new file mode 100644 index 000000000..18be551ff --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ServerListing.vue @@ -0,0 +1,101 @@ + + + + + + + {{ name }} + + + + + + Using {{ projectData?.title || "Unknown" }} + + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/ServerListingSkeleton.vue b/apps/frontend/src/components/ui/servers/ServerListingSkeleton.vue new file mode 100644 index 000000000..8ebe506e1 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ServerListingSkeleton.vue @@ -0,0 +1,20 @@ + + + + + + + + + + Your new server is being prepared. + It'll appear here once it's ready. + + + diff --git a/apps/frontend/src/components/ui/servers/ServerLoaderLabel.vue b/apps/frontend/src/components/ui/servers/ServerLoaderLabel.vue new file mode 100644 index 000000000..13e8694f8 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ServerLoaderLabel.vue @@ -0,0 +1,35 @@ + + + + + + + {{ loader }} {{ loaderVersion }} + + + {{ loader }} {{ loaderVersion }} + + + + + + diff --git a/apps/frontend/src/components/ui/servers/ServerManageEmptyState.vue b/apps/frontend/src/components/ui/servers/ServerManageEmptyState.vue new file mode 100644 index 000000000..dd7cde956 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ServerManageEmptyState.vue @@ -0,0 +1,19 @@ + + + + You don't have any servers yet! + Modrinth Servers is a new way to play modded Minecraft with your friends. + + Create a Server + + + + + diff --git a/apps/frontend/src/components/ui/servers/ServerSidebar.vue b/apps/frontend/src/components/ui/servers/ServerSidebar.vue new file mode 100644 index 000000000..0c44c9767 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ServerSidebar.vue @@ -0,0 +1,45 @@ + + + + + + + + + {{ link.label }} + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/ServerSkeleton.vue b/apps/frontend/src/components/ui/servers/ServerSkeleton.vue new file mode 100644 index 000000000..7429de93b --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ServerSkeleton.vue @@ -0,0 +1,18 @@ + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/ServerStats.vue b/apps/frontend/src/components/ui/servers/ServerStats.vue new file mode 100644 index 000000000..85547442a --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ServerStats.vue @@ -0,0 +1,330 @@ + + + + + + + {{ metric.value }} + + / {{ metric.max }} + + + {{ metric.title }} + + + + + + + + + + + + + + {{ formatBytes(animatedStorageUsage) }} + + + + Storage usage + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/ServerSubdomainLabel.vue b/apps/frontend/src/components/ui/servers/ServerSubdomainLabel.vue new file mode 100644 index 000000000..ed7d17966 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ServerSubdomainLabel.vue @@ -0,0 +1,40 @@ + + + + + + + {{ subdomain }}.modrinth.gg + + + + + + diff --git a/apps/frontend/src/components/ui/servers/ServerUptimeLabel.vue b/apps/frontend/src/components/ui/servers/ServerUptimeLabel.vue new file mode 100644 index 000000000..e57075315 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ServerUptimeLabel.vue @@ -0,0 +1,65 @@ + + + + + + + + {{ formattedUptime }} + + + + + + diff --git a/apps/frontend/src/components/ui/servers/TeleportDropdownMenu.vue b/apps/frontend/src/components/ui/servers/TeleportDropdownMenu.vue new file mode 100644 index 000000000..2038179b0 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/TeleportDropdownMenu.vue @@ -0,0 +1,444 @@ + + + + {{ selectedOption }} + + + + + + + + + + + + + {{ displayName(item.option) }} + + + + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/TeleportOverflowMenu.vue b/apps/frontend/src/components/ui/servers/TeleportOverflowMenu.vue new file mode 100644 index 000000000..8b808ec39 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/TeleportOverflowMenu.vue @@ -0,0 +1,433 @@ + + + + + + + + + + + {{ option.id }} + + + {{ option.id }} + + + {{ option.id }} + + + {{ option.id }} + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/Timer.vue b/apps/frontend/src/components/ui/servers/Timer.vue new file mode 100644 index 000000000..0de5f7a95 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/Timer.vue @@ -0,0 +1,17 @@ + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/icons/CodeFileIcon.vue b/apps/frontend/src/components/ui/servers/icons/CodeFileIcon.vue new file mode 100644 index 000000000..6f7f60003 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/icons/CodeFileIcon.vue @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/icons/CogFolderIcon.vue b/apps/frontend/src/components/ui/servers/icons/CogFolderIcon.vue new file mode 100644 index 000000000..f3e65a3fb --- /dev/null +++ b/apps/frontend/src/components/ui/servers/icons/CogFolderIcon.vue @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/icons/EarthIcon.vue b/apps/frontend/src/components/ui/servers/icons/EarthIcon.vue new file mode 100644 index 000000000..3e617ec8f --- /dev/null +++ b/apps/frontend/src/components/ui/servers/icons/EarthIcon.vue @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/icons/ImageFileIcon.vue b/apps/frontend/src/components/ui/servers/icons/ImageFileIcon.vue new file mode 100644 index 000000000..e7287ebf8 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/icons/ImageFileIcon.vue @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/icons/LoaderIcon.vue b/apps/frontend/src/components/ui/servers/icons/LoaderIcon.vue new file mode 100644 index 000000000..8647d9cd1 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/icons/LoaderIcon.vue @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/components/ui/servers/icons/LoadingIcon.vue b/apps/frontend/src/components/ui/servers/icons/LoadingIcon.vue new file mode 100644 index 000000000..c2277f280 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/icons/LoadingIcon.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/apps/frontend/src/components/ui/servers/icons/PanelErrorIcon.vue b/apps/frontend/src/components/ui/servers/icons/PanelErrorIcon.vue new file mode 100644 index 000000000..0904de9d7 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/icons/PanelErrorIcon.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/apps/frontend/src/components/ui/servers/icons/SlashIcon.vue b/apps/frontend/src/components/ui/servers/icons/SlashIcon.vue new file mode 100644 index 000000000..613ec2713 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/icons/SlashIcon.vue @@ -0,0 +1,10 @@ + + + + + diff --git a/apps/frontend/src/components/ui/servers/icons/TextFileIcon.vue b/apps/frontend/src/components/ui/servers/icons/TextFileIcon.vue new file mode 100644 index 000000000..fb1189117 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/icons/TextFileIcon.vue @@ -0,0 +1,20 @@ + + + + + + + + + diff --git a/apps/frontend/src/composables/auth.js b/apps/frontend/src/composables/auth.js index 606e401e5..8cdcd0dce 100644 --- a/apps/frontend/src/composables/auth.js +++ b/apps/frontend/src/composables/auth.js @@ -113,7 +113,7 @@ export const getAuthUrl = (provider, redirect = "") => { } const fullURL = `${config.public.siteUrl}${redirect}`; - return `${config.public.apiBaseUrl}auth/init?url=${fullURL}&provider=${provider}`; + return `${config.public.apiBaseUrl}auth/init?provider=${provider}&url=${fullURL}`; }; export const removeAuthProvider = async (provider) => { diff --git a/apps/frontend/src/composables/featureFlags.ts b/apps/frontend/src/composables/featureFlags.ts index d52368f50..179f3e6e3 100644 --- a/apps/frontend/src/composables/featureFlags.ts +++ b/apps/frontend/src/composables/featureFlags.ts @@ -23,6 +23,8 @@ export const DEFAULT_FEATURE_FLAGS = validateValues({ showAdsWithPlus: false, // Feature toggles + projectTypesPrimaryNav: false, + hidePlusPromoInUserMenu: false, // advancedRendering: true, // externalLinksNewTab: true, // notUsingBlockers: false, diff --git a/apps/frontend/src/composables/pyroFetch.ts b/apps/frontend/src/composables/pyroFetch.ts new file mode 100644 index 000000000..0d0da31b9 --- /dev/null +++ b/apps/frontend/src/composables/pyroFetch.ts @@ -0,0 +1,103 @@ +import { $fetch, FetchError } from "ofetch"; + +interface PyroFetchOptions { + method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; + contentType?: string; + body?: Record; + version?: number; + override?: { + url?: string; + token?: string; + }; + retry?: boolean; +} + +export class PyroFetchError extends Error { + constructor( + message: string, + public statusCode?: number, + public originalError?: Error, + ) { + super(message); + this.name = "PyroFetchError"; + } +} + +export async function usePyroFetch(path: string, options: PyroFetchOptions = {}): Promise { + const config = useRuntimeConfig(); + const auth = await useAuth(); + const authToken = auth.value?.token; + + if (!authToken) { + throw new PyroFetchError("Cannot pyrofetch without auth", 10000); + } + + const { method = "GET", contentType = "application/json", body, version = 0, override } = options; + + const base = (import.meta.server ? config.pyroBaseUrl : config.public.pyroBaseUrl)?.replace( + /\/$/, + "", + ); + + if (!base) { + throw new PyroFetchError( + "Cannot pyrofetch without base url. Make sure to set a PYRO_BASE_URL in environment variables", + 10001, + ); + } + + const fullUrl = override?.url + ? `https://${override.url}/${path.replace(/^\//, "")}` + : `${base}/modrinth/v${version}/${path.replace(/^\//, "")}`; + + type HeadersRecord = Record; + + const headers: HeadersRecord = { + Authorization: `Bearer ${override?.token ?? authToken}`, + "Access-Control-Allow-Headers": "Authorization", + "User-Agent": "Pyro/1.0 (https://pyro.host)", + Vary: "Accept, Origin", + "Content-Type": contentType, + }; + + if (import.meta.client && typeof window !== "undefined") { + headers.Origin = window.location.origin; + } + + try { + const response = await $fetch(fullUrl, { + method, + headers, + body: body && contentType === "application/json" ? JSON.stringify(body) : body ?? undefined, + timeout: 10000, + retry: options.retry !== false ? (method === "GET" ? 3 : 0) : 0, + }); + return response; + } catch (error) { + console.error("Fetch error:", error); + if (error instanceof FetchError) { + const statusCode = error.response?.status; + const statusText = error.response?.statusText || "Unknown error"; + const errorMessages: { [key: number]: string } = { + 400: "Bad Request", + 401: "Unauthorized", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 429: "Too Many Requests", + 500: "Internal Server Error", + 502: "Bad Gateway", + }; + const message = + statusCode && statusCode in errorMessages + ? errorMessages[statusCode] + : `HTTP Error: ${statusCode || "unknown"} ${statusText}`; + throw new PyroFetchError(`[PYROFETCH][PYRO] ${message}`, statusCode, error); + } + throw new PyroFetchError( + "[PYROFETCH][PYRO] An unexpected error occurred during the fetch operation.", + undefined, + error as Error, + ); + } +} diff --git a/apps/frontend/src/composables/pyroServers.ts b/apps/frontend/src/composables/pyroServers.ts new file mode 100644 index 000000000..811ca15d7 --- /dev/null +++ b/apps/frontend/src/composables/pyroServers.ts @@ -0,0 +1,1312 @@ +// usePyroServer is a composable that interfaces with the REDACTED API to get data and control the users server +import { $fetch, FetchError } from "ofetch"; + +interface PyroFetchOptions { + method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; + contentType?: string; + body?: Record; + version?: number; + override?: { + url?: string; + token?: string; + }; + retry?: boolean; +} + +async function PyroFetch(path: string, options: PyroFetchOptions = {}): Promise { + const config = useRuntimeConfig(); + const auth = await useAuth(); + const authToken = auth.value?.token; + + if (!authToken) { + throw new PyroFetchError("Cannot pyrofetch without auth", 10000); + } + + const { method = "GET", contentType = "application/json", body, version = 0, override } = options; + + const base = (import.meta.server ? config.pyroBaseUrl : config.public.pyroBaseUrl)?.replace( + /\/$/, + "", + ); + + if (!base) { + throw new PyroFetchError( + "Cannot pyrofetch without base url. Make sure to set a PYRO_BASE_URL in environment variables", + 10001, + ); + } + + const fullUrl = override?.url + ? `https://${override.url}/${path.replace(/^\//, "")}` + : `${base}/modrinth/v${version}/${path.replace(/^\//, "")}`; + + type HeadersRecord = Record; + + const headers: HeadersRecord = { + Authorization: `Bearer ${override?.token ?? authToken}`, + "Access-Control-Allow-Headers": "Authorization", + "User-Agent": "Pyro/1.0 (https://pyro.host)", + Vary: "Accept, Origin", + }; + + if (contentType !== "none") { + headers["Content-Type"] = contentType; + } + + if (import.meta.client && typeof window !== "undefined") { + headers.Origin = window.location.origin; + } + + try { + const response = await $fetch(fullUrl, { + method, + headers, + body: body && contentType === "application/json" ? JSON.stringify(body) : body ?? undefined, + timeout: 10000, + retry: options.retry !== false ? (method === "GET" ? 3 : 0) : 0, + }); + return response; + } catch (error) { + console.error("[PYROSERVERS]:", error); + if (error instanceof FetchError) { + const statusCode = error.response?.status; + const statusText = error.response?.statusText || "Unknown error"; + const errorMessages: { [key: number]: string } = { + 400: "Bad Request", + 401: "Unauthorized", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 429: "Too Many Requests", + 500: "Internal Server Error", + 502: "Bad Gateway", + }; + const message = + statusCode && statusCode in errorMessages + ? errorMessages[statusCode] + : `HTTP Error: ${statusCode || "unknown"} ${statusText}`; + throw new PyroFetchError(`[PYROSERVERS][PYRO] ${message}`, statusCode, error); + } + throw new PyroFetchError( + "[PYROSERVERS][PYRO] An unexpected error occurred during the fetch operation.", + undefined, + error as Error, + ); + } +} + +const internalServerRefrence = ref(null); + +interface License { + id: string; + name: string; + url: string; +} + +interface DonationUrl { + id: string; + platform: string; + url: string; +} + +interface GalleryItem { + url: string; + featured: boolean; + title: string; + description: string; + created: string; + ordering: number; +} + +export interface Project { + slug: string; + title: string; + description: string; + categories: string[]; + client_side: "required" | "optional"; + server_side: "required" | "optional"; + body: string; + status: "approved" | "pending" | "rejected"; + requested_status: "approved" | "pending" | "rejected"; + additional_categories: string[]; + issues_url: string; + source_url: string; + wiki_url: string; + discord_url: string; + donation_urls: DonationUrl[]; + project_type: "mod" | "resourcepack" | "map" | "plugin"; + downloads: number; + icon_url: string; + color: number; + thread_id: string; + monetization_status: "monetized" | "non-monetized"; + id: string; + team: string; + body_url: string | null; + moderator_message: string | null; + published: string; + updated: string; + approved: string; + queued: string; + followers: number; + license: License; + versions: string[]; + game_versions: string[]; + loaders: string[]; + gallery: GalleryItem[]; +} + +interface General { + server_id: string; + name: string; + net: { + ip: string; + port: number; + domain: string; + }; + game: string; + backup_quota: number; + used_backup_quota: number; + status: string; + suspension_reason: string; + loader: string; + loader_version: string; + mc_version: string; + upstream: { + kind: "modpack" | "mod" | "resourcepack"; + version_id: string; + project_id: string; + } | null; + motd?: string; + image?: string; + project?: Project; + sftp_username: string; + sftp_password: string; + sftp_host: string; + datacenter?: string; +} + +interface Allocation { + port: number; + name: string; +} + +interface Startup { + invocation: string; + original_invocation: string; + jdk_version: "lts8" | "lts11" | "lts17" | "lts21"; + jdk_build: "corretto" | "temurin" | "graal"; +} + +interface Mod { + filename: string; + project_id: string; + version_id: string; + name: string; + version_number: string; + icon_url: string; + disabled: boolean; +} + +interface Backup { + id: string; + name: string; + created_at: string; + ongoing: boolean; +} + +interface AutoBackupSettings { + enabled: boolean; + interval: number; +} + +interface JWTAuth { + url: string; + token: string; +} + +const constructServerProperties = (properties: any): string => { + let fileContent = `#Minecraft server properties\n#${new Date().toUTCString()}\n`; + + for (const [key, value] of Object.entries(properties)) { + if (typeof value === "object") { + fileContent += `${key}=${JSON.stringify(value)}\n`; + } else if (typeof value === "boolean") { + fileContent += `${key}=${value ? "true" : "false"}\n`; + } else { + fileContent += `${key}=${value}\n`; + } + } + + return fileContent; +}; + +const processImage = async (iconUrl: string | undefined) => { + const image = ref(null); + const auth = await PyroFetch(`servers/${internalServerRefrence.value.serverId}/fs`); + try { + const fileData = await PyroFetch(`/download?path=/server-icon-original.png`, { + override: auth, + retry: false, + }); + + if (fileData instanceof Blob) { + if (import.meta.client) { + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d"); + const img = new Image(); + img.src = URL.createObjectURL(fileData); + await new Promise((resolve) => { + img.onload = () => { + canvas.width = 512; + canvas.height = 512; + ctx?.drawImage(img, 0, 0, 512, 512); + const dataURL = canvas.toDataURL("image/png"); + internalServerRefrence.value.general.image = dataURL; + image.value = dataURL; + resolve(); + }; + }); + } + } + } catch (error) { + if (error instanceof PyroFetchError && error.statusCode === 404) { + console.log("[PYROSERVERS] No server icon found"); + } else { + console.error(error); + } + } + + if (image.value === null && iconUrl) { + console.log("iconUrl", iconUrl); + try { + const response = await fetch(iconUrl); + const file = await response.blob(); + const originalfile = new File([file], "server-icon-original.png", { + type: "image/png", + }); + if (import.meta.client) { + const scaledFile = await new Promise((resolve, reject) => { + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d"); + const img = new Image(); + img.src = URL.createObjectURL(file); + img.onload = () => { + canvas.width = 64; + canvas.height = 64; + ctx?.drawImage(img, 0, 0, 64, 64); + canvas.toBlob((blob) => { + if (blob) { + const data = new File([blob], "server-icon.png", { type: "image/png" }); + resolve(data); + } else { + reject(new Error("Canvas toBlob failed")); + } + }, "image/png"); + }; + img.onerror = reject; + }); + if (scaledFile) { + await PyroFetch(`/create?path=/server-icon.png&type=file`, { + method: "POST", + contentType: "application/octet-stream", + body: scaledFile, + override: auth, + }); + + await PyroFetch(`/create?path=/server-icon-original.png&type=file`, { + method: "POST", + contentType: "application/octet-stream", + body: originalfile, + override: auth, + }); + } + } + } catch (error) { + if (error instanceof PyroFetchError && error.statusCode === 404) { + console.log("[PYROSERVERS] No server icon found"); + } else { + console.error(error); + } + } + } + return image.value; +}; + +// ------------------ GENERAL ------------------ // + +const sendPowerAction = async (action: string) => { + try { + await PyroFetch(`servers/${internalServerRefrence.value.serverId}/power`, { + method: "POST", + body: { action }, + }); + + await new Promise((resolve) => setTimeout(resolve, 1000)); + await internalServerRefrence.value.refresh(); + } catch (error) { + console.error("Error changing power state:", error); + throw error; + } +}; + +const updateName = async (newName: string) => { + try { + await PyroFetch(`servers/${internalServerRefrence.value.serverId}/name`, { + method: "POST", + body: { name: newName }, + }); + } catch (error) { + console.error("Error updating server name:", error); + throw error; + } +}; + +const reinstallServer = async ( + serverId: string, + loader: boolean, + projectId: string, + versionId?: string, + loaderVersionId?: string, + hardReset: boolean = false, +) => { + try { + const hardResetParam = hardReset ? "true" : "false"; + if (loader) { + if (projectId.toLowerCase() === "neoforge") { + projectId = "NeoForge"; + } + await PyroFetch(`servers/${serverId}/reinstall?hard=${hardResetParam}`, { + method: "POST", + body: { loader: projectId, loader_version: loaderVersionId, game_version: versionId }, + }); + } else { + await PyroFetch(`servers/${serverId}/reinstall?hard=${hardResetParam}`, { + method: "POST", + body: { project_id: projectId, version_id: versionId }, + }); + } + } catch (error) { + console.error("Error reinstalling server:", error); + throw error; + } +}; + +const reinstallFromMrpack = async (mrpack: File, hardReset: boolean = false) => { + const hardResetParam = hardReset ? "true" : "false"; + try { + const auth = await PyroFetch( + `servers/${internalServerRefrence.value.serverId}/reinstallFromMrpack`, + ); + + const formData = new FormData(); + formData.append("file", mrpack); + + const response = await fetch( + `https://${auth.url}/reinstallMrpackMultiparted?hard=${hardResetParam}`, + { + method: "POST", + headers: { + Authorization: `Bearer ${auth.token}`, + }, + body: formData, + signal: AbortSignal.timeout(30 * 60 * 1000), + }, + ); + + if (!response.ok) { + throw new Error(`[pyroservers] native fetch err status: ${response.status}`); + } + } catch (error) { + console.error("Error reinstalling from mrpack:", error); + throw error; + } +}; + +const suspendServer = async (status: boolean) => { + try { + await PyroFetch(`servers/${internalServerRefrence.value.serverId}/suspend`, { + method: "POST", + body: { suspended: status }, + }); + } catch (error) { + console.error("Error suspending server:", error); + throw error; + } +}; + +const fetchConfigFile = async (fileName: string) => { + try { + return await PyroFetch(`servers/${internalServerRefrence.value.serverId}/config/${fileName}`); + } catch (error) { + console.error("Error fetching config file:", error); + throw error; + } +}; + +const getMotd = async () => { + try { + const props = await downloadFile("/server.properties"); + if (props) { + const lines = props.split("\n"); + for (const line of lines) { + if (line.startsWith("motd=")) { + return line.slice(5); + } + } + } + } catch { + return null; + } +}; + +const setMotd = async (motd: string) => { + try { + const props = (await fetchConfigFile("ServerProperties")) as any; + if (props) { + props.motd = motd; + const newProps = constructServerProperties(props); + const octetStream = new Blob([newProps], { type: "application/octet-stream" }); + const auth = await await PyroFetch( + `servers/${internalServerRefrence.value.serverId}/fs`, + ); + + return await PyroFetch(`/update?path=/server.properties`, { + method: "PUT", + contentType: "application/octet-stream", + body: octetStream, + override: auth, + }); + } + } catch (error) { + console.error("Error setting motd:", error); + } +}; + +// ------------------ MODS ------------------ // + +const installMod = async (projectId: string, versionId: string) => { + try { + await PyroFetch(`servers/${internalServerRefrence.value.serverId}/mods`, { + method: "POST", + body: { rinth_ids: { project_id: projectId, version_id: versionId } }, + }); + } catch (error) { + console.error("Error installing mod:", error); + throw error; + } +}; + +const removeMod = async (modId: string) => { + try { + await PyroFetch(`servers/${internalServerRefrence.value.serverId}/deleteMod`, { + method: "POST", + body: { + path: modId, + }, + }); + } catch (error) { + console.error("Error removing mod:", error); + throw error; + } +}; + +const reinstallMod = async (modId: string, versionId: string) => { + try { + await PyroFetch(`servers/${internalServerRefrence.value.serverId}/mods/${modId}`, { + method: "PUT", + body: { version_id: versionId }, + }); + } catch (error) { + console.error("Error reinstalling mod:", error); + throw error; + } +}; + +// ------------------ BACKUPS ------------------ // + +const createBackup = async (backupName: string) => { + try { + await PyroFetch(`servers/${internalServerRefrence.value.serverId}/backups`, { + method: "POST", + body: { name: backupName }, + }); + } catch (error) { + console.error("Error creating backup:", error); + throw error; + } +}; + +const renameBackup = async (backupId: string, newName: string) => { + try { + await PyroFetch(`servers/${internalServerRefrence.value.serverId}/backups/${backupId}/rename`, { + method: "POST", + body: { name: newName }, + }); + } catch (error) { + console.error("Error renaming backup:", error); + throw error; + } +}; + +const deleteBackup = async (backupId: string) => { + try { + await PyroFetch(`servers/${internalServerRefrence.value.serverId}/backups/${backupId}`, { + method: "DELETE", + }); + } catch (error) { + console.error("Error deleting backup:", error); + throw error; + } +}; + +const restoreBackup = async (backupId: string) => { + try { + await PyroFetch( + `servers/${internalServerRefrence.value.serverId}/backups/${backupId}/restore`, + { + method: "POST", + }, + ); + } catch (error) { + console.error("Error restoring backup:", error); + throw error; + } +}; + +const downloadBackup = async (backupId: string) => { + try { + return await PyroFetch(`servers/${internalServerRefrence.value.serverId}/backups/${backupId}`); + } catch (error) { + console.error("Error downloading backup:", error); + throw error; + } +}; + +const updateAutoBackup = async (autoBackup: "enable" | "disable", interval: number) => { + try { + return await PyroFetch(`servers/${internalServerRefrence.value.serverId}/autobackup`, { + method: "POST", + body: { set: autoBackup, interval }, + }); + } catch (error) { + console.error("Error updating auto backup:", error); + throw error; + } +}; + +const getAutoBackup = async () => { + try { + return await PyroFetch(`servers/${internalServerRefrence.value.serverId}/autobackup`); + } catch (error) { + console.error("Error getting auto backup settings:", error); + throw error; + } +}; + +// ------------------ NETWORK ------------------ // + +const reserveAllocation = async (name: string): Promise => { + try { + return await PyroFetch( + `servers/${internalServerRefrence.value.serverId}/allocations?name=${name}`, + { + method: "POST", + }, + ); + } catch (error) { + console.error("Error reserving new allocation:", error); + throw error; + } +}; + +const updateAllocation = async (port: number, name: string) => { + try { + await PyroFetch( + `servers/${internalServerRefrence.value.serverId}/allocations/${port}?name=${name}`, + { + method: "PUT", + }, + ); + } catch (error) { + console.error("Error updating allocations:", error); + throw error; + } +}; + +const deleteAllocation = async (port: number) => { + try { + await PyroFetch(`servers/${internalServerRefrence.value.serverId}/allocations/${port}`, { + method: "DELETE", + }); + } catch (error) { + console.error("Error deleting allocation:", error); + throw error; + } +}; + +const checkSubdomainAvailability = async (subdomain: string): Promise<{ available: boolean }> => { + try { + return (await PyroFetch(`subdomains/${subdomain}/isavailable`)) as { available: boolean }; + } catch (error) { + console.error("Error checking subdomain availability:", error); + throw error; + } +}; + +const changeSubdomain = async (subdomain: string) => { + try { + await PyroFetch(`servers/${internalServerRefrence.value.serverId}/subdomain`, { + method: "POST", + body: { subdomain }, + }); + } catch (error) { + console.error("Error changing subdomain:", error); + throw error; + } +}; + +// ------------------ STARTUP ------------------ // + +const updateStartupSettings = async ( + invocation: string, + jdkVersion: "lts8" | "lts11" | "lts17" | "lts21", + jdkBuild: "corretto" | "temurin" | "graal", +) => { + try { + await PyroFetch(`servers/${internalServerRefrence.value.serverId}/startup`, { + method: "POST", + body: { + invocation: invocation || null, + jdk_version: jdkVersion || null, + jdk_build: jdkBuild || null, + }, + }); + } catch (error) { + console.error("Error updating startup settings:", error); + throw error; + } +}; + +// ------------------ FS ------------------ // + +const retryWithAuth = async (requestFn: () => Promise) => { + try { + return await requestFn(); + } catch (error) { + if (error instanceof PyroFetchError && error.statusCode === 401) { + await internalServerRefrence.value.refresh(["fs"]); + return await requestFn(); + } + } +}; + +const listDirContents = (path: string, page: number, pageSize: number) => { + return retryWithAuth(async () => { + const encodedPath = encodeURIComponent(path); + return await PyroFetch(`/list?path=${encodedPath}&page=${page}&page_size=${pageSize}`, { + override: internalServerRefrence.value.fs.auth, + retry: false, + }); + }); +}; + +const createFileOrFolder = (path: string, type: "file" | "directory") => { + return retryWithAuth(async () => { + const encodedPath = encodeURIComponent(path); + return await PyroFetch(`/create?path=${encodedPath}&type=${type}`, { + method: "POST", + contentType: "application/octet-stream", + override: internalServerRefrence.value.fs.auth, + }); + }); +}; + +const uploadFile = (path: string, file: File) => { + return retryWithAuth(async () => { + const encodedPath = encodeURIComponent(path); + return await PyroFetch(`/create?path=${encodedPath}&type=file`, { + method: "POST", + contentType: "application/octet-stream", + body: file, + override: internalServerRefrence.value.fs.auth, + }); + }); +}; + +const renameFileOrFolder = (path: string, name: string) => { + const pathName = path.split("/").slice(0, -1).join("/") + "/" + name; + return retryWithAuth(async () => { + return await PyroFetch(`/move`, { + method: "POST", + override: internalServerRefrence.value.fs.auth, + body: { + source: path, + destination: pathName, + }, + }); + }); +}; + +const updateFile = (path: string, content: string) => { + const octetStream = new Blob([content], { type: "application/octet-stream" }); + return retryWithAuth(async () => { + return await PyroFetch(`/update?path=${path}`, { + method: "PUT", + contentType: "application/octet-stream", + body: octetStream, + override: internalServerRefrence.value.fs.auth, + }); + }); +}; + +const createMissingFolders = async (path: string) => { + if (path.startsWith("/")) { + path = path.substring(1); + } + const folders = path.split("/"); + console.log(folders); + let currentPath = ""; + + for (const folder of folders) { + currentPath += "/" + folder; + try { + await createFileOrFolder(currentPath, "directory"); + } catch {} + } +}; + +const moveFileOrFolder = (path: string, newPath: string) => { + return retryWithAuth(async () => { + console.log(path); + console.log(newPath); + console.log(newPath.substring(0, newPath.lastIndexOf("/"))); + await createMissingFolders(newPath.substring(0, newPath.lastIndexOf("/"))); + + return await PyroFetch(`/move`, { + method: "POST", + override: internalServerRefrence.value.fs.auth, + body: { + source: path, + destination: newPath, + }, + }); + }); +}; + +const deleteFileOrFolder = (path: string, recursive: boolean) => { + const encodedPath = encodeURIComponent(path); + return retryWithAuth(async () => { + return await PyroFetch(`/delete?path=${encodedPath}&recursive=${recursive}`, { + method: "DELETE", + override: internalServerRefrence.value.fs.auth, + }); + }); +}; + +const downloadFile = (path: string, raw?: boolean) => { + return retryWithAuth(async () => { + const encodedPath = encodeURIComponent(path); + const fileData = await PyroFetch(`/download?path=${encodedPath}`, { + override: internalServerRefrence.value.fs.auth, + }); + + if (fileData instanceof Blob) { + if (raw) { + return fileData; + } else { + return await fileData.text(); + } + } + }); +}; + +const modules: any = { + general: { + get: async (serverId: string) => { + try { + const data = await PyroFetch(`servers/${serverId}`); + // TODO: temp hack to fix hydration error + if (data.upstream?.project_id) { + const res = await $fetch( + `https://api.modrinth.com/v2/project/${data.upstream.project_id}`, + ); + data.project = res as Project; + } + if (import.meta.client) { + data.image = (await processImage(data.project?.icon_url)) ?? undefined; + } + const motd = await getMotd(); + if (motd === "A Minecraft Server") { + await setMotd( + `§b${data.project?.title || data.loader + " " + data.mc_version} §f♦ §aModrinth Servers`, + ); + } + data.motd = motd; + return data; + } catch (error) { + internalServerRefrence.value.setError(error); + return undefined; + } + }, + updateName, + power: sendPowerAction, + reinstall: reinstallServer, + reinstallFromMrpack, + suspend: suspendServer, + getMotd, + setMotd, + fetchConfigFile, + }, + mods: { + get: async (serverId: string) => { + try { + const mods = await PyroFetch(`servers/${serverId}/mods`); + return { + data: + internalServerRefrence.value.error === undefined + ? mods.sort((a, b) => (a?.name ?? "").localeCompare(b?.name ?? "")) + : [], + }; + } catch (error) { + internalServerRefrence.value.setError(error); + return undefined; + } + }, + install: installMod, + remove: removeMod, + reinstall: reinstallMod, + }, + backups: { + get: async (serverId: string) => { + try { + return { data: await PyroFetch(`servers/${serverId}/backups`) }; + } catch (error) { + internalServerRefrence.value.setError(error); + return undefined; + } + }, + create: createBackup, + rename: renameBackup, + delete: deleteBackup, + restore: restoreBackup, + download: downloadBackup, + updateAutoBackup, + getAutoBackup, + }, + network: { + get: async (serverId: string) => { + try { + return { allocations: await PyroFetch(`servers/${serverId}/allocations`) }; + } catch (error) { + internalServerRefrence.value.setError(error); + return undefined; + } + }, + reserveAllocation, + updateAllocation, + deleteAllocation, + checkSubdomainAvailability, + changeSubdomain, + }, + startup: { + get: async (serverId: string) => { + try { + return await PyroFetch(`servers/${serverId}/startup`); + } catch (error) { + internalServerRefrence.value.setError(error); + return undefined; + } + }, + update: updateStartupSettings, + }, + ws: { + get: async (serverId: string) => { + try { + return await PyroFetch(`servers/${serverId}/ws`); + } catch (error) { + internalServerRefrence.value.setError(error); + return undefined; + } + }, + }, + fs: { + get: async (serverId: string) => { + try { + return { auth: await PyroFetch(`servers/${serverId}/fs`) }; + } catch (error) { + internalServerRefrence.value.setError(error); + return undefined; + } + }, + listDirContents, + createFileOrFolder, + uploadFile, + renameFileOrFolder, + updateFile, + moveFileOrFolder, + deleteFileOrFolder, + downloadFile, + }, +}; + +type GeneralFunctions = { + /** + * INTERNAL: Gets the general settings of a server. + * @param serverId - The ID of the server. + */ + get: (serverId: string) => Promise; + + /** + * Updates the name of the server. + * @param newName - The new name for the server. + */ + updateName: (newName: string) => Promise; + + /** + * Sends a power action to the server. + + * @param action - The power action to send (e.g., "start", "stop", "restart"). + */ + power: (action: string) => Promise; + + /** + * Reinstalls the server with the specified project and version. + * @param loader - Whether to use a loader. + * @param projectId - The ID of the project. + * @param versionId - Optional version ID. + * @param loaderVersionId - Optional loader version ID. + * @param hardReset - Whether to perform a hard reset. + */ + reinstall: ( + serverId: string, + loader: boolean, + projectId: string, + versionId?: string, + loaderVersionId?: string, + hardReset?: boolean, + ) => Promise; + + /** + * Reinstalls the server from a mrpack. + * @param mrpack - The mrpack file. + * @param hardReset - Whether to perform a hard reset. + */ + reinstallFromMrpack: (mrpack: File, hardReset?: boolean) => Promise; + + /** + * Suspends or resumes the server. + * @param status - True to suspend the server, false to resume. + */ + suspend: (status: boolean) => Promise; + + /** + * INTERNAL: Gets the general settings of a server. + */ + getMotd: () => Promise; + + /** + * INTERNAL: Updates the general settings of a server. + * @param motd - The new motd. + */ + setMotd: (motd: string) => Promise; + + /** + * INTERNAL: Gets the config file of a server. + * @param fileName - The name of the file. + */ + fetchConfigFile: (fileName: string) => Promise; +}; + +type ModFunctions = { + /** + * INTERNAL: Gets the mods of a server. + * @param serverId - The ID of the server. + * @returns + */ + get: (serverId: string) => Promise; + + /** + * Installs a mod to a server. + * @param projectId - The ID of the project. + * @param versionId - The ID of the version. + */ + install: (projectId: string, versionId: string) => Promise; + + /** + * Removes a mod from a server. + * @param modId - The ID of the mod. + */ + remove: (modId: string) => Promise; + + /** + * Reinstalls a mod to a server. + * @param modId - The ID of the mod. + * @param versionId - The ID of the version. + */ + reinstall: (modId: string, versionId: string) => Promise; +}; + +type BackupFunctions = { + /** + * INTERNAL: Gets the backups of a server. + * @param serverId - The ID of the server. + * @returns + */ + get: (serverId: string) => Promise; + + /** + * Creates a new backup for the server. + * @param backupName - The name of the backup. + */ + create: (backupName: string) => Promise; + + /** + * Renames a backup for the server. + * @param backupId - The ID of the backup. + * @param newName - The new name for the backup. + */ + rename: (backupId: string, newName: string) => Promise; + + /** + * Deletes a backup for the server. + * @param backupId - The ID of the backup. + */ + delete: (backupId: string) => Promise; + + /** + * Restores a backup for the server. + * @param serverId - The ID of the server. + * @param backupId - The ID of the backup. + */ + restore: (backupId: string) => Promise; + + /** + * Downloads a backup for the server. + * @param backupId - The ID of the backup. + */ + download: (backupId: string) => Promise; + + /** + * Updates the auto backup settings of the server. + * @param autoBackup - Whether to enable auto backup. + * @param interval - The interval to backup at (in Hours). + */ + updateAutoBackup: (autoBackup: "enable" | "disable", interval: number) => Promise; + + /** + * Gets the auto backup settings of the server. + */ + getAutoBackup: () => Promise; +}; + +type NetworkFunctions = { + /** + * INTERNAL: Gets the network settings of a server. + * @param serverId - The ID of the server. + * @returns + */ + get: (serverId: string) => Promise; + + /** + * Reserves a new allocation for the server. + * @param name - The name of the allocation. + * @returns The allocated network port details. + */ + reserveAllocation: (name: string) => Promise; + + /** + * Updates the allocation for the server. + * @param port - The port to update. + * @param name - The new name for the allocation. + */ + updateAllocation: (port: number, name: string) => Promise; + + /** + * Deletes an allocation for the server. + * @param port - The port to delete. + */ + deleteAllocation: (port: number) => Promise; + + /** + * Checks if a subdomain is available. + * @param subdomain - The subdomain to check. + * @returns True if the subdomain is available, otherwise false. + */ + checkSubdomainAvailability: (subdomain: string) => Promise; + + /** + * Changes the subdomain of the server. + * @param subdomain - The new subdomain. + */ + changeSubdomain: (subdomain: string) => Promise; +}; + +type StartupFunctions = { + /** + * INTERNAL: Gets the startup settings of a server. + * @param serverId - The ID of the server. + * @returns + */ + get: (serverId: string) => Promise; + + /** + * Updates the startup settings of a server. + * @param invocation - The invocation of the server. + * @param jdkVersion - The version of the JDK. + * @param jdkBuild - The build of the JDK. + */ + update: ( + invocation: string, + jdkVersion: "lts8" | "lts11" | "lts17" | "lts21", + jdkBuild: "corretto" | "temurin" | "graal", + ) => Promise; +}; + +type FSFunctions = { + /** + * INTERNAL: Gets the file system settings of a server. + * @param serverId + * @returns + */ + get: (serverId: string) => Promise; + + /** + * @param path - The path to list the contents of. + * @param page - The page to list. + * @param pageSize - The page size to list. + * @returns + */ + listDirContents: (path: string, page: number, pageSize: number) => Promise; + + /** + * @param path - The path to create the file or folder at. + * @param type - The type of file or folder to create. + * @returns + */ + createFileOrFolder: (path: string, type: "file" | "directory") => Promise; + + /** + * @param path - The path to upload the file to. + * @param file - The file to upload. + * @returns + */ + uploadFile: (path: string, file: File) => Promise; + + /** + * @param path - The path to rename the file or folder at. + * @param name - The new name for the file or folder. + * @returns + */ + renameFileOrFolder: (path: string, name: string) => Promise; + + /** + * @param path - The path to update the file at. + * @param content - The new content for the file. + * @returns + */ + updateFile: (path: string, content: string) => Promise; + + /** + * @param path - The path to move the file or folder at. + * @param newPath - The new path for the file or folder. + * @returns + */ + moveFileOrFolder: (path: string, newPath: string) => Promise; + + /** + * @param path - The path to delete the file or folder at. + * @param recursive - Whether to delete the file or folder recursively. + * @returns + */ + deleteFileOrFolder: (path: string, recursive: boolean) => Promise; + + /** + * @param serverId - The ID of the server. + * @param path - The path to download the file from. + * @param raw - Whether to return the raw blob. + * @returns + */ + downloadFile: (path: string, raw?: boolean) => Promise; +}; + +type GeneralModule = General & GeneralFunctions; +type ModsModule = { data: Mod[] } & ModFunctions; +type BackupsModule = { data: Backup[] } & BackupFunctions; +type NetworkModule = { allocations: Allocation[] } & NetworkFunctions; +type StartupModule = Startup & StartupFunctions; +type FSModule = { auth: JWTAuth } & FSFunctions; + +type ModulesMap = { + general: GeneralModule; + mods: ModsModule; + backups: BackupsModule; + network: NetworkModule; + startup: StartupModule; + ws: JWTAuth; + fs: FSModule; +}; + +type avaliableModules = ("general" | "mods" | "backups" | "network" | "startup" | "ws" | "fs")[]; + +export type Server = { + [K in T[number]]?: ModulesMap[K]; +} & { + /** + * Refreshes the included modules of the server + * @param refreshModules - The modules to refresh. + */ + refresh: (refreshModules?: avaliableModules) => Promise; + setError: (error: Error) => void; + error?: Error; + serverId: string; +}; + +export const usePyroServer = async (serverId: string, includedModules: avaliableModules) => { + const server: Server = reactive({ + refresh: async (refreshModules?: avaliableModules) => { + const promises: Promise[] = []; + if (refreshModules) { + for (const module of refreshModules) { + promises.push( + (async () => { + const mods = modules[module]; + if (mods.get) { + const data = await mods.get(serverId); + server[module] = { ...server[module], ...data }; + } + })(), + ); + } + } else { + for (const module of includedModules) { + promises.push( + (async () => { + const mods = modules[module]; + if (mods.get) { + const data = await mods.get(serverId); + server[module] = { ...server[module], ...data }; + } + })(), + ); + } + } + await Promise.all(promises); + }, + setError: (error: Error) => { + server.error = error; + }, + serverId, + }); + + for (const module of includedModules) { + const mods = modules[module]; + server[module] = mods; + } + + internalServerRefrence.value = server; + + await server.refresh(); + + return server as Server; +}; diff --git a/apps/frontend/src/layouts/default.vue b/apps/frontend/src/layouts/default.vue index 8a452dac8..e70191c04 100644 --- a/apps/frontend/src/layouts/default.vue +++ b/apps/frontend/src/layouts/default.vue @@ -38,7 +38,7 @@ config.public.apiBaseUrl.startsWith('https://staging-api.modrinth.com') && !cosmetics.hideStagingBanner " - class="site-banner site-banner--warning" + class="site-banner site-banner--warning [&>*]:z-[6]" > @@ -54,7 +54,7 @@ @@ -62,121 +62,165 @@ - - - Mods + + + Mods - - Resource Packs + + + Resource Packs + - - Data Packs + + Data Packs - - Modpacks + + Modpacks - - Shaders + + Shaders - - Plugins + + Plugins - - - - + + + - Browse + + + + + + + + Discover content + Discover + Mods Resource Packs Data Packs - Plugins + Plugins Shaders Modpacks - - - - - - More - - Host a server - Get Modrinth App - - Upgrade to Modrinth+ - - - - - - - Host a server - - - - Get Modrinth App + + - - Upgrade to Modrinth+ - + + + Host a server + - + + + + Get Modrinth App + Modrinth App + + + @@ -224,7 +268,12 @@ Profile Notifications Saved projects + My servers + + Upgrade to Modrinth+ + Settings + Feature flags Projects Organizations @@ -302,6 +351,10 @@ {{ formatMessage(commonMessages.collectionsLabel) }} + + + {{ formatMessage(commonMessages.serversLabel) }} + [ { + id: "mods", label: formatMessage(getProjectTypeMessage("mod", true)), href: "/mods", }, @@ -766,6 +822,12 @@ const userMenuOptions = computed(() => { id: "profile", link: `/user/${auth.value.user.username}`, }, + { + id: "plus", + link: "/plus", + color: "purple", + shown: !flags.value.hidePlusPromoInUserMenu && !isPermission(auth.value.user.badges, 1 << 0), + }, { id: "notifications", link: "/dashboard/notifications", @@ -774,6 +836,15 @@ const userMenuOptions = computed(() => { id: "saved", link: "/dashboard/collections", }, + { + id: "servers", + link: "/servers/manage", + }, + { + id: "flags", + link: "/flags", + shown: flags.value.developerMode, + }, { id: "settings", link: "/settings", @@ -836,6 +907,10 @@ const userMenuOptions = computed(() => { return options; }); +const isDiscovering = computed(() => route.name && route.name.startsWith("search-")); + +const isDiscoveringSubpage = computed(() => route.name && route.name.startsWith("type-id")); + onMounted(() => { if (window && import.meta.client) { window.history.scrollRestoration = "auto"; @@ -894,19 +969,23 @@ function runAnalytics() { const config = useRuntimeConfig(); const replacedUrl = config.public.apiBaseUrl.replace("v2/", ""); - setTimeout(() => { - $fetch(`${replacedUrl}analytics/view`, { - method: "POST", - body: { - url: window.location.href, - }, - headers: { - Authorization: auth.value.token, - }, - }) - .then(() => {}) - .catch(() => {}); - }); + try { + setTimeout(() => { + $fetch(`${replacedUrl}analytics/view`, { + method: "POST", + body: { + url: window.location.href, + }, + headers: { + Authorization: auth.value.token, + }, + }) + .then(() => {}) + .catch(() => {}); + }); + } catch (e) { + console.error(`Sending analytics failed (CORS error? If so, ignore)`, e); + } } function toggleMobileMenu() { isMobileMenuOpen.value = !isMobileMenuOpen.value; @@ -1080,6 +1159,8 @@ function hideStagingBanner() { } .email-nag { + z-index: 6; + position: relative; background-color: var(--color-raised-bg); width: 100%; display: flex; @@ -1090,13 +1171,28 @@ function hideStagingBanner() { } .site-banner--warning { - background-color: var(--color-red-bg); + // On some pages, there's gradient backgrounds that seep underneath + // the banner, so we need to add a solid color underlay. + background-color: black; border-bottom: 2px solid var(--color-red); display: grid; gap: 0.5rem; grid-template: "title actions" "description actions"; padding-block: var(--gap-xl); padding-inline: max(calc((100% - 80rem) / 2 + var(--gap-md)), var(--gap-xl)); + z-index: 4; + position: relative; + + &::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: var(--color-red-bg); + z-index: 5; + } .site-banner__title { grid-area: title; @@ -1337,10 +1433,5 @@ function hideStagingBanner() { padding-top: 0.75rem; } } - -.temp-nav-buttons.router-link-exact-active { - color: var(--color-contrast) !important; - background-color: var(--color-brand-highlight) !important; -} diff --git a/apps/frontend/src/pages/[type]/[id].vue b/apps/frontend/src/pages/[type]/[id].vue index 9799a1c49..1afc0e82a 100644 --- a/apps/frontend/src/pages/[type]/[id].vue +++ b/apps/frontend/src/pages/[type]/[id].vue @@ -606,6 +606,7 @@ auth.user ? reportProject(project.id) : navigateTo('/auth/sign-in'), color: 'red', hoverOnly: true, + shown: !currentMember, }, { id: 'copy-id', action: () => copyId() }, ]" @@ -1383,7 +1384,7 @@ try { }, ), useAsyncData(`project/${route.params.id}/dependencies`, () => - useBaseFetch(`project/${route.params.id}/dependencies`), + useBaseFetch(`project/${route.params.id}/dependencies`, {}), ), useAsyncData(`project/${route.params.id}/version?featured=true`, () => useBaseFetch(`project/${route.params.id}/version?featured=true`), diff --git a/apps/frontend/src/pages/[type]/[id]/settings/description.vue b/apps/frontend/src/pages/[type]/[id]/settings/description.vue index 7b82eb4e2..d7b6f7c3d 100644 --- a/apps/frontend/src/pages/[type]/[id]/settings/description.vue +++ b/apps/frontend/src/pages/[type]/[id]/settings/description.vue @@ -124,8 +124,4 @@ export default defineNuxtComponent({ .markdown-disclaimer { margin-block: 1rem; } - -.universal-card { - margin-top: 1rem; -} diff --git a/apps/frontend/src/pages/[type]/[id]/settings/index.vue b/apps/frontend/src/pages/[type]/[id]/settings/index.vue index 6772eaece..11d38289b 100644 --- a/apps/frontend/src/pages/[type]/[id]/settings/index.vue +++ b/apps/frontend/src/pages/[type]/[id]/settings/index.vue @@ -445,4 +445,8 @@ svg { .small-multiselect { max-width: 15rem; } + +.button-group { + justify-content: flex-start; +} diff --git a/apps/frontend/src/pages/[type]/[id]/settings/links.vue b/apps/frontend/src/pages/[type]/[id]/settings/links.vue index e4b6c4385..dc250b836 100644 --- a/apps/frontend/src/pages/[type]/[id]/settings/links.vue +++ b/apps/frontend/src/pages/[type]/[id]/settings/links.vue @@ -268,4 +268,8 @@ function checkDifference(newLink, existingLink) { height: 40px; } } + +.button-group { + justify-content: flex-start; +} diff --git a/apps/frontend/src/pages/[type]/[id]/settings/tags.vue b/apps/frontend/src/pages/[type]/[id]/settings/tags.vue index e42144b48..d346a60cc 100644 --- a/apps/frontend/src/pages/[type]/[id]/settings/tags.vue +++ b/apps/frontend/src/pages/[type]/[id]/settings/tags.vue @@ -260,6 +260,10 @@ export default defineNuxtComponent({ } } +.button-group { + justify-content: flex-start; +} + .category-list { column-count: 4; column-gap: var(--spacing-card-lg); diff --git a/apps/frontend/src/pages/[type]/[id]/version/[version].vue b/apps/frontend/src/pages/[type]/[id]/version/[version].vue index dae2fe6ef..f03723a58 100644 --- a/apps/frontend/src/pages/[type]/[id]/version/[version].vue +++ b/apps/frontend/src/pages/[type]/[id]/version/[version].vue @@ -158,7 +158,7 @@ Report - + reportVersion(version.id)"> Report diff --git a/apps/frontend/src/pages/[type]/[id]/versions.vue b/apps/frontend/src/pages/[type]/[id]/versions.vue index 9129cb15f..1abdf5d12 100644 --- a/apps/frontend/src/pages/[type]/[id]/versions.vue +++ b/apps/frontend/src/pages/[type]/[id]/versions.vue @@ -205,6 +205,7 @@ color: 'red', hoverFilled: true, action: () => reportVersion(version.id), + shown: !currentMember, }, { divider: true, shown: currentMember }, { diff --git a/apps/frontend/src/pages/collection/[id].vue b/apps/frontend/src/pages/collection/[id].vue index 7dfd6a7ad..3ff01bc3d 100644 --- a/apps/frontend/src/pages/collection/[id].vue +++ b/apps/frontend/src/pages/collection/[id].vue @@ -35,7 +35,6 @@ accept="image/png,image/jpeg,image/gif,image/webp" class="btn btn-transparent upload" style="white-space: nowrap" - prompt="Upload icon" aria-label="Upload icon" @change="showPreviewImage" > diff --git a/apps/frontend/src/pages/index.vue b/apps/frontend/src/pages/index.vue index ebbcc5de3..b6bce53af 100644 --- a/apps/frontend/src/pages/index.vue +++ b/apps/frontend/src/pages/index.vue @@ -13,6 +13,7 @@ > {{ projectType.display }}s + servers mods @@ -724,6 +725,7 @@ async function updateSearchProjects() { display: -webkit-box; -webkit-line-clamp: 2; + line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; @@ -1166,7 +1168,7 @@ async function updateSearchProjects() { > span { position: absolute; top: 0; - animation: slide 10s infinite; + animation: slide 12s infinite; @media (prefers-reduced-motion) { animation-play-state: paused !important; @@ -1175,32 +1177,36 @@ async function updateSearchProjects() { @keyframes slide { 0%, - 13% { + 10% { top: 0; } - 17%, - 30% { + 13%, + 23% { top: -1.2em; } - 33%, - 46% { + 26%, + 36% { top: -2.4em; } - 50%, - 63% { + 39%, + 49% { top: -3.6em; } - 66%, - 79% { + 52%, + 62% { top: -4.8em; } - 83%, - 96% { + 65%, + 75% { top: -6em; } + 78%, + 88% { + top: -7.2em; + } 99.99997%, 99.99998% { - top: -7.2em; + top: -8.4em; } 99.99999% { top: 0; diff --git a/apps/frontend/src/pages/search/[searchProjectType].vue b/apps/frontend/src/pages/search/[searchProjectType].vue index 45dc64ccf..aaac004e3 100644 --- a/apps/frontend/src/pages/search/[searchProjectType].vue +++ b/apps/frontend/src/pages/search/[searchProjectType].vue @@ -13,8 +13,38 @@ aria-label="Filters" > + + + + + {{ server.general.name }} + {{ server.general.loader }} {{ server.general.mc_version }} + + + + + + @@ -204,14 +234,6 @@ - No results found for your query! @@ -243,10 +265,33 @@ :server-side="result.server_side" :categories="result.display_categories" :search="true" - :show-updated-date="sortType.name !== 'newest'" + :show-updated-date="!server && sortType.name !== 'newest'" + :show-created-date="!server" :hide-loaders="['resourcepack', 'datapack'].includes(projectType.id)" :color="result.color" - /> + > + + + + Installed + + + Installing... + + + + Install + + + @@ -263,8 +308,8 @@ diff --git a/apps/frontend/src/pages/servers/index.vue b/apps/frontend/src/pages/servers/index.vue new file mode 100644 index 000000000..0e652e9fd --- /dev/null +++ b/apps/frontend/src/pages/servers/index.vue @@ -0,0 +1,1008 @@ + + + + + + + + + Beta Release + + + Host your next server with Modrinth Servers + + + + Modrinth Servers is the easiest way to host your own Minecraft server. Seamlessly install + and play your favorite mods and modpacks, all within the Modrinth platform. + + + + + + + {{ hasServers ? "Start a new server" : "Start your server" }} + + + + + Manage your servers + + + + + + + + + + + + + + + + + + + + + + + Why Modrinth Servers? + + + Find a modpack. Now it's a server. + + + Choose from the thousands of modpacks on Modrinth or create your own. Invite your friends + when you're ready to play. + + + + + + + + + + Play where your mods are + + Modrinth Servers seamlessly integrates the mod and modpack installation process into + your server. + + + + + + All your favorite mods + + Choose between Vanilla, Fabric, Forge, Quilt and NeoForge. If it's on Modrinth, it can + run on your server. + + + + + + + + + + + + + + + Manage it all on Modrinth + + Your server, mods, players, and more are all on Modrinth. No need to switch between + platforms. + + + + + + + + + + Experience modern, reliable hosting powered by Pyro + + + Modrinth Servers are hosted on + 2023 Ryzen 7/9 CPUs with DDR5 RAM, running on + custom-built software to ensure your server performs smoothly. + + + + + + Consistently fast + + Under Pyro, infrastructure is never overloaded, meaning each Modrinth server always + runs at its full performance. + + See the infrastructure + + + + + + + + + + + + Included with your server + + + Comes with all the features you need. + + + Included with every server is a suite of features designed to provide a hosting experience + that only Modrinth can offer. + + + + + + + + + + + Custom URL + + Share your server with a custom + modrinth.gg URL. + + + {{ currentText }}.modrinth.gg + + + + + + + + + Backups included + + Every server comes with 15 backups stored securely off-site with Backblaze. + + + + + Easy to use file manager + + Search, manage, edit, and upload files directly to your server with ease. + + + + + + 8.49 GB used + + + + Sort + + + + + + + + + + + + A powerful console, server properties manager, and more + + + Modrinth Servers come with powerful tools to manage your server. + + + + + + + + + + Help when you need it + + Reach out to the Modrinth team for help with your server at any time. + + + + + + + + SFTP access + + Access your server files directly with SFTP built into Modrinth Servers. + + + + + Advanced networking management + + Add your own domain to your server, reserve up to 15 ports for mods that require them, + and more. + + + + + Frequently Asked Questions + + + + + + + What kind of CPUs do Modrinth Servers run on? + + + Modrinth Servers use 2023 Ryzen 7 and Ryzen 9 CPUs at 4+ GHz, paired with DDR5 + memory. + + + + + + + + + Do Modrinth Servers have DDoS protection? + + + Yes. All Modrinth Servers come with DDoS protection. Protection is powered by a + combination of in-house network filtering by Pyro as well as with our data center + provider. Your server is safe on Modrinth. + + + + + + + + + Where are Modrinth Servers located? Can I choose a region? + + + Currently, Modrinth Servers are located in New York, Los Angeles, and Miami. More + regions are coming soon! Your server's location is currently chosen algorithmically, + but you will be able to choose a region in the future. + + + + + + + + + Can I increase the storage on my server? + + + Yes, storage can be increased on your server at no additional cost. If you need more + storage, reach out to Modrinth Support. + + + + + + + + + How fast are Modrinth Servers? How many players can they handle? + + + During the Modrinth "Emergency SMP" test, we had over 80 players on a server running + on the Large plan. The server ran smoothly and was only limited by RAM. We're + confident that Modrinth Servers can handle a large number of players, with any kind + of modpack. + + + + + + + + + + + + Start your server on Modrinth + + + {{ + isAtCapacity && !loggedOut + ? "We are currently at capacity. Please try again later." + : "There's a plan for everyone! Choose the one that fits your needs." + }} + + Servers are currently US only, in New York, Los Angeles, and Miami. More regions coming + soon! + + + + + + Small + + S + + + + Perfect for vanilla multiplayer, small friend groups, SMPs, and light modding. + + + 4 GB RAM + + 32 GB Storage + + 2 vCPUs + + + $12/month + + + + Out of Stock + + + + Get Started + + + + + + + + Medium + + M + + + Great for modded multiplayer and small communities. + + 6 GB RAM + + 48 GB Storage + + 3 vCPUs + + + $18/month + + + + Out of Stock + + + + Get Started + + + + + + + + Large + + L + + + Ideal for larger communities, modpacks, and heavy modding. + + 8 GB RAM + + 64 GB Storage + + 4 vCPUs + + + $24/month + + + + Out of Stock + + + + Get Started + + + + + + + + + Build your own + + If you're a more technical server administrator, you can pick your own RAM and storage + options. + + + + + + + Build your own + + + + Starting at $3/GB RAM + + + + + + + + + + diff --git a/apps/frontend/src/pages/servers/manage/[id].vue b/apps/frontend/src/pages/servers/manage/[id].vue new file mode 100644 index 000000000..5dc51646d --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id].vue @@ -0,0 +1,823 @@ + + + + + + + + + + Server not found + + + You don't have permission to view this server or it no longer exists. If you believe + this is an error, please contact Modrinth support. + + + + router.push('/servers/manage')"> + Go back to all servers + + + + + + + + + + + Connection lost + + {{ + formattedTime == "00" + ? "Reconnecting..." + : `Retrying in ${formattedTime} seconds...` + }} + + + + Something went wrong, and we couldn't connect to your server. This is likely due to a + temporary network issue. You'll be reconnected automatically. + + + + reloadNuxtApp()" + > + Reload + + + + + + + + + + + All servers + + + + + {{ serverData.name }} + + + + + + + + + + + + + + + + + + + + + + {{ errorTitle }} + + + + + An invalid loader or Minecraft version was specified and could not be installed. + + + If this version of Minecraft was released recently, please check if Modrinth + Servers supports it. + + + If you've installed a modpack, it may have been packaged incorrectly or may + not be compatible with the loader. + + + Your server may need to be reinstalled with a valid mod loader and version. + You can change the loader by clicking the "Change Loader" button. + + + If you're stuck, please contact Modrinth support with the information below: + + + + + + + Copy Debug Info + + + + + An internal error occurred while installing your server. Don't fret — try + reinstalling your server, and if the problem persists, please contact Modrinth + support with your server's debug information. + + + + + Open Installation Log + + + + + + Copy Debug Info + + + + + + Change Loader + + + + + + + + + + + Something went wrong... + + + + + Hang on, we're reconnecting to your server. + + + + + We're preparing your server, this may take a few minutes. + + + + + + + + + + + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/backups.vue b/apps/frontend/src/pages/servers/manage/[id]/backups.vue new file mode 100644 index 000000000..af70fda27 --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/backups.vue @@ -0,0 +1,372 @@ + + + + + + + + + + + + + + + + {{ + data.used_backup_quota === 0 + ? "No backups" + : `You've created ${data.used_backup_quota} backup${data.used_backup_quota === 1 ? "" : "s"}` + }} + + + {{ + data.backup_quota - data.used_backup_quota === 0 + ? "You have reached your backup limit. Consider removing old backups to create new ones." + : `You can create ${data.backup_quota - data.used_backup_quota} more backups for your server.` + }} + + + + + + + Auto backups + + + + + + Create backup + + + + + + + + + + + + + + + + + + {{ backup.name }} + + + + Latest + + + + + {{ + new Date(backup.created_at).toLocaleString("en-US", { + month: "numeric", + day: "numeric", + year: "2-digit", + hour: "numeric", + minute: "numeric", + hour12: true, + }) + }} + + + + + + + Rename + Restore + Download + Delete + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/content.vue b/apps/frontend/src/pages/servers/manage/[id]/content.vue new file mode 100644 index 000000000..d0268351a --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/content.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/content/index.vue b/apps/frontend/src/pages/servers/manage/[id]/content/index.vue new file mode 100644 index 000000000..4f33c4bd9 --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/content/index.vue @@ -0,0 +1,507 @@ + + + + + + You're changing the version of + + + {{ currentMod?.name + "." }} + + + + + + + Your server was created from a modpack. Changing the mod version may cause unexpected + issues. + + + + + + + + + + + + Install + + + + + + Cancel + + + + + + + + + + + + + + Search + + + + + + + {{ filterMethodLabel }} + + + + All mods + Only enabled + Only disabled + + + + + + + Add content + + + + + + + + + + + + + + + + {{ + mod.name || mod.filename.replace(".disabled", "") + }} + Disabled + + {{ + mod.version_number || "External mod" + }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Edit + + + + Delete + + + + + + + + + + + + + + + + No mods found! + Add some mods to your server to manage them here. + + Add content + + + + + + + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/files.vue b/apps/frontend/src/pages/servers/manage/[id]/files.vue new file mode 100644 index 000000000..94aac0dde --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/files.vue @@ -0,0 +1,736 @@ + + + + + + + + + + + + + + + saveFileContent(true)" + @save-as="saveFileContentAs" + @save-restart="saveFileContentRestart" + @share="requestShareLink" + @navigate="navigateToSegment" + /> + + + + + + + + + + + + + This folder is empty + There are no files or folders. + + + + + + + + + + + Drop files here to upload + + + + + + + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/index.vue b/apps/frontend/src/pages/servers/manage/[id]/index.vue new file mode 100644 index 000000000..a04ca00ee --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/index.vue @@ -0,0 +1,710 @@ + + + + + + + + + + {{ serverData?.name }} shut down unexpectedly. We've automatically analyzed the logs + and found the following problems: + + + + + {{ problem.message }} + + + + {{ solution.message }} + + + + + + + + + + {{ serverData?.name }} shut down unexpectedly. + + We could not find any specific problems, but you can try restarting the server. + + + + + + + + + + + + + + + + Console + + + + + + + (selectedSuggestionIndex = index)" + > + {{ suggestion }} + + + + + {{ + " ".repeat(commandInput.length - 1) + }} + {{ bestSuggestion }} + + TAB + + + + + + + + + + + + + + + + Could not connect to the server. + + An error occurred while attempting to connect to your server. Please try refreshing the page. + (WebSocket Authentication Failed) + + + + Could not connect to the server. + + An error occurred while attempting to connect to your server. Please try refreshing the page. + (No further information) + + + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/options.vue b/apps/frontend/src/pages/servers/manage/[id]/options.vue new file mode 100644 index 000000000..8ae12f174 --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/options.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/options/billing.vue b/apps/frontend/src/pages/servers/manage/[id]/options/billing.vue new file mode 100644 index 000000000..ab22342a4 --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/options/billing.vue @@ -0,0 +1,12 @@ + + + You can manage your server's billing from Settings > Billing and subscriptions. + + Go to Billing + + + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/options/index.vue b/apps/frontend/src/pages/servers/manage/[id]/options/index.vue new file mode 100644 index 000000000..84f1e05c9 --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/options/index.vue @@ -0,0 +1,322 @@ + + + + + + + Server name + Change the name of your server. This name is only visible on Modrinth. + + + + + Server name must be at least 1 character long. + + + Server name can contain any character. + + + + + + + + Custom URL + Your friends can connect to your server using this URL. + + + + .modrinth.gg + + + + Subdomain must be at least 5 characters long. + + + Subdomain can only contain alphanumeric characters and dashes. + + + + + + + Server icon + + Change your server's icon. Changes will be visible on the Minecraft server list and on + Modrinth. + + + + + + + + + + + + + + + Sync icon + + + + + + + + + + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/options/info.vue b/apps/frontend/src/pages/servers/manage/[id]/options/info.vue new file mode 100644 index 000000000..b9f969413 --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/options/info.vue @@ -0,0 +1,156 @@ + + + + + + + SFTP + SFTP allows you to access your server's files from outside of Modrinth. + + + + + Launch SFTP + + + + + + + + {{ data?.sftp_host }} + + + server address + + + + + + + + + + + + + {{ data?.sftp_username }} + + + + + + + + + username + + + + + {{ + showPassword ? data?.sftp_password : "*".repeat(data?.sftp_password?.length ?? 0) + }} + + + + + + + + + + + + + + + + + password + + + + + + Info + + + + + {{ property.name }} + + + + + + + + + + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/options/loader.vue b/apps/frontend/src/pages/servers/manage/[id]/options/loader.vue new file mode 100644 index 000000000..18781fc64 --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/options/loader.vue @@ -0,0 +1,610 @@ + + + + + + + + + {{ + isSecondPhase + ? "This will reinstall your server and erase all data. You may want to back up your server before proceeding. Are you sure you want to continue?" + : "Choose the version of Minecraft you want to use for this server." + }} + + + + + + + Clean reinstall + + + + + + + {{ + isSecondPhase + ? "Erase and install" + : loadingServerCheck + ? "Loading..." + : isDangerous + ? "Erase and install" + : "Install" + }} + + + + + + {{ isSecondPhase ? "No" : "Cancel" }} + + + + + + + + + + + Clean reinstall + + + + + + + {{ + isSecondPhase + ? "Erase and install" + : loadingServerCheck + ? "Loading..." + : isDangerous + ? "Erase and install" + : "Install" + }} + + + + + + Cancel + + + + + + + + + + + Modpack + + + + + Change modpack + + + + + Upload .mrpack file + + + + + + + + + + + + {{ data.project?.title }} + + + {{ + data.project?.description && data.project.description.length > 150 + ? data.project.description.substring(0, 150) + "..." + : data.project?.description || "" + }} + + + + + + + + Reinstall + + + + + + + + + + Install a modpack + + + or + + + Upload .mrpack file + + + + + + + + Mod loader + Mod loaders allow you to run mods on your server. + + + + Your server was installed from a modpack, which automatically chooses the appropriate + mod loader. + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/options/network.vue b/apps/frontend/src/pages/servers/manage/[id]/options/network.vue new file mode 100644 index 000000000..ba3a3528a --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/options/network.vue @@ -0,0 +1,468 @@ + + + + + Name + + + + + Create allocation + + + + Cancel + + + + + + + + Name + + + + + Update Allocation + + + + Cancel + + + + + + + + + + + + + + + Generated DNS records + + Set up your personal domain to connect to your server via custom DNS records. + + + + + + + Export DNS records + + + + + + + + + + + + + + {{ record.type }} + + type + + + + + + {{ record.name }} + + name + + + + + + {{ record.content }} + + content + + + + + + + + + + + You must own your own domain to use this feature. + + + + + + + + + Allocations + + Configure additional ports for internet-facing features like map viewers or voice + chat mods. + + + + + + + New allocation + + + + + + + + + Primary allocation + + + + + + + + + + + + + + {{ allocation.name }} + + name + + + + {{ allocation.port }} + + port + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/options/preferences.vue b/apps/frontend/src/pages/servers/manage/[id]/options/preferences.vue new file mode 100644 index 000000000..f06e93514 --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/options/preferences.vue @@ -0,0 +1,122 @@ + + + + + Server preferences + Preferences apply per server and changes are only saved in your browser. + + + + {{ prefConfig.displayName }} + + Coming Soon + + + {{ prefConfig.description }} + + + + + + + + + + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue b/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue new file mode 100644 index 000000000..356abd29b --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue @@ -0,0 +1,286 @@ + + + + + + Server properties + + Edit the Minecraft server properties file. If you're unsure about a specific property, + the + + Minecraft Wiki + + has more detailed information about each property. + + + + + Search server properties + + + + + + {{ formatPropertyName(index) }} + + + + + + + + + + + + + + + + + + + + + + + + + + The server properties file has not been generated yet. Start up your server to generate it. + + + + + + + + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/options/startup.vue b/apps/frontend/src/pages/servers/manage/[id]/options/startup.vue new file mode 100644 index 000000000..ddf9fc605 --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/options/startup.vue @@ -0,0 +1,197 @@ + + + + + These settings are for advanced users. Changing them can break your server. + + + + + + + Startup command + The command that runs when your server is started. + + + + + Restore default command + + + + + + + + + + Java version + + The version of Java that your server will run on. Your server is running Minecraft + {{ data.mc_version }}. By default, only the Java versions compatible with this + version of Minecraft are shown. Some mods or modpacks may require a specific Java + version. + + + + + Show all Java versions + + + + + + Runtime + The Java runtime your server will use. + + + + + + + + + + + + + diff --git a/apps/frontend/src/pages/servers/manage/index.vue b/apps/frontend/src/pages/servers/manage/index.vue new file mode 100644 index 000000000..995b5757e --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/index.vue @@ -0,0 +1,154 @@ + + + + Servers + + + Search + + + + + + + New server + + + + + + + + + + + + + + No servers found. + + + + + + + + diff --git a/apps/frontend/src/pages/settings/billing/charges.vue b/apps/frontend/src/pages/settings/billing/charges.vue index c63148319..c1195d2a4 100644 --- a/apps/frontend/src/pages/settings/billing/charges.vue +++ b/apps/frontend/src/pages/settings/billing/charges.vue @@ -16,6 +16,9 @@ Modrinth Plus + + Modrinth Servers + Unknown product {{ charge.subscription_interval }} diff --git a/apps/frontend/src/pages/settings/billing/index.vue b/apps/frontend/src/pages/settings/billing/index.vue index cf53272d1..c785a3607 100644 --- a/apps/frontend/src/pages/settings/billing/index.vue +++ b/apps/frontend/src/pages/settings/billing/index.vue @@ -4,7 +4,7 @@ {{ formatMessage(messages.subscriptionDescription) }} { cancelSubscriptionId = midasSubscription.id; - $refs.modal_cancel.show(); + $refs.modalCancel.show(); }, }, ]" @@ -123,7 +123,7 @@ @click=" () => { cancelSubscriptionId = midasSubscription.id; - $refs.modal_cancel.show(); + $refs.modalCancel.show(); } " > @@ -152,7 +152,163 @@ + + + + + + + + + + A linked server couldn't be found with this subscription. It may have been deleted + or suspended. Please contact Modrinth support with the following information: + + + + + + + + {{ getProductSize(getPyroProduct(subscription)) }} Plan + + + + + + {{ getPyroProduct(subscription)?.metadata?.cpu }} vCores (CPU) + + + + + {{ + getPyroProduct(subscription)?.metadata?.ram + ? getPyroProduct(subscription).metadata.ram / 1024 + " GB RAM" + : "" + }} + + + + + + {{ + getPyroProduct(subscription)?.metadata?.swap + ? getPyroProduct(subscription).metadata.swap / 1024 + " GB Swap" + : "" + }} + + + + + + {{ + getPyroProduct(subscription)?.metadata?.storage + ? getPyroProduct(subscription).metadata.storage / 1024 + " GB SSD" + : "" + }} + + + + + + + + {{ + formatPrice( + vintl.locale, + getProductPrice(getPyroProduct(subscription), subscription.interval) + .prices.intervals[subscription.interval], + getProductPrice(getPyroProduct(subscription), subscription.interval) + .currency_code, + ) + }} + + /{{ subscription.interval.replace("ly", "") }} + + + + Since {{ $dayjs(subscription.created).format("MMMM D, YYYY") }} + + + Renews {{ $dayjs(getPyroCharge(subscription).due).format("MMMM D, YYYY") }} + + + Your payment is being processed. Perks will activate once payment is + complete. + + + Expires {{ $dayjs(getPyroCharge(subscription).due).format("MMMM D, YYYY") }} + + + Your subscription payment failed. Please update your payment method. + + + + + + + + Cancel + + + + Resubscribe + + + + + + + + + + + diff --git a/apps/frontend/src/pages/user/[id].vue b/apps/frontend/src/pages/user/[id].vue index f830c08ae..40069d039 100644 --- a/apps/frontend/src/pages/user/[id].vue +++ b/apps/frontend/src/pages/user/[id].vue @@ -35,7 +35,15 @@ {{ formatCompactNumber(sumDownloads) }} downloads - + Joined {{ formatRelativeTime(user.created) }} @@ -63,6 +71,7 @@ action: () => reportUser(user.id), color: 'red', hoverOnly: true, + shown: auth.user?.id !== user.id, }, { id: 'copy-id', action: () => copyId() }, ]" @@ -232,6 +241,8 @@ + + @@ -264,6 +275,8 @@ import ModBadge from "~/assets/images/badges/mod.svg?component"; import PlusBadge from "~/assets/images/badges/plus.svg?component"; import TenMClubBadge from "~/assets/images/badges/10m-club.svg?component"; import EarlyAdopterBadge from "~/assets/images/badges/early-adopter.svg?component"; +import AlphaTesterBadge from "~/assets/images/badges/alpha-tester.svg?component"; +import BetaTesterBadge from "~/assets/images/badges/beta-tester.svg?component"; import ReportIcon from "~/assets/images/utils/report.svg?component"; import UpToDate from "~/assets/images/illustrations/up_to_date.svg?component"; @@ -455,6 +468,10 @@ const sumDownloads = computed(() => { return sum; }); +const joinDate = computed(() => new Date(user.value.created)); +const MODRINTH_BETA_END_DATE = new Date("2022-02-27T08:00:00.000Z"); +const MODRINTH_ALPHA_END_DATE = new Date("2020-11-30T08:00:00.000Z"); + const badges = computed(() => { const badges = []; @@ -482,8 +499,10 @@ const badges = computed(() => { badges.push("early-adopter"); } - if (isPermission(user.value.badges, 1 << 4)) { + if (isPermission(user.value.badges, 1 << 4) || joinDate.value < MODRINTH_ALPHA_END_DATE) { badges.push("alpha-tester"); + } else if (isPermission(user.value.badges, 1 << 4) || joinDate.value < MODRINTH_BETA_END_DATE) { + badges.push("beta-tester"); } if (isPermission(user.value.badges, 1 << 5)) { @@ -498,7 +517,7 @@ const badges = computed(() => { }); async function copyId() { - await navigator.clipboard.writeText(project.value.id); + await navigator.clipboard.writeText(user.value.id); } const navLinks = computed(() => [ diff --git a/apps/frontend/src/public/Monocraft.ttf b/apps/frontend/src/public/Monocraft.ttf new file mode 100644 index 000000000..4066b0a98 Binary files /dev/null and b/apps/frontend/src/public/Monocraft.ttf differ diff --git a/apps/frontend/src/public/promo-frame.html b/apps/frontend/src/public/promo-frame.html index c0fcf84de..080aa8454 100644 --- a/apps/frontend/src/public/promo-frame.html +++ b/apps/frontend/src/public/promo-frame.html @@ -4,11 +4,8 @@ Modrinth App Ad - - + + diff --git a/packages/ui/src/components/modal/Modal.vue b/packages/ui/src/components/modal/Modal.vue index 6f3bea13a..7f034d7ee 100644 --- a/packages/ui/src/components/modal/Modal.vue +++ b/packages/ui/src/components/modal/Modal.vue @@ -148,8 +148,9 @@ defineExpose({ position: fixed; box-shadow: var(--shadow-raised), var(--shadow-inset); border-radius: var(--radius-lg); + background-color: var(--color-raised-bg); max-height: calc(100% - 2 * var(--gap-lg)); - overflow-y: auto; + overflow-y: visible; width: 600px; pointer-events: auto; @@ -166,10 +167,6 @@ defineExpose({ } } - .content { - background-color: var(--color-raised-bg); - } - transform: translateY(50vh); visibility: hidden; opacity: 0; diff --git a/packages/ui/src/components/modal/NewModal.vue b/packages/ui/src/components/modal/NewModal.vue index ed7c7a0a3..5847162dd 100644 --- a/packages/ui/src/components/modal/NewModal.vue +++ b/packages/ui/src/components/modal/NewModal.vue @@ -59,6 +59,7 @@ const props = withDefaults( warnOnClose?: boolean header?: string onHide?: () => void + onShow?: () => void }>(), { type: true, @@ -67,14 +68,29 @@ const props = withDefaults( closeOnEsc: true, warnOnClose: false, onHide: () => {}, + onShow: () => {}, }, ) const open = ref(false) const visible = ref(false) +// make modal opening not shift page when there's a vertical scrollbar +function addBodyPadding() { + const scrollBarWidth = window.innerWidth - document.documentElement.clientWidth + if (scrollBarWidth > 0) { + document.body.style.paddingRight = `${scrollBarWidth}px` + } else { + document.body.style.paddingRight = '' + } +} + function show(event?: MouseEvent) { + props.onShow() open.value = true + + addBodyPadding() + document.body.style.overflow = 'hidden' window.addEventListener('mousedown', updateMousePosition) window.addEventListener('keydown', handleKeyDown) if (event) { @@ -91,6 +107,8 @@ function show(event?: MouseEvent) { function hide() { props.onHide() visible.value = false + document.body.style.overflow = '' + document.body.style.paddingRight = '' window.removeEventListener('mousedown', updateMousePosition) window.removeEventListener('keydown', handleKeyDown) setTimeout(() => { @@ -143,12 +161,6 @@ function handleKeyDown(event: KeyboardEvent) { opacity: 0; transition: all 0.2s ease-out; background: linear-gradient(to bottom, rgba(29, 48, 43, 0.52) 0%, rgba(14, 21, 26, 0.95) 100%); - //transform: translate( - // calc((-50vw + var(--_mouse-x, 50vw) * 1px) / 2), - // calc((-50vh + var(--_mouse-y, 50vh) * 1px) / 2) - // ) - // scaleX(0.8) scaleY(0.5); - border-radius: 180px; filter: blur(5px); @media (prefers-reduced-motion) { @@ -159,8 +171,6 @@ function handleKeyDown(event: KeyboardEvent) { opacity: 1; visibility: visible; backdrop-filter: blur(5px); - transform: translate(0, 0) scaleX(1) scaleY(1); - border-radius: 0px; } &.noblur { diff --git a/packages/utils/index.d.ts b/packages/utils/index.d.ts index 99cbfbefb..905304bdd 100644 --- a/packages/utils/index.d.ts +++ b/packages/utils/index.d.ts @@ -1,6 +1,10 @@ export const BASE62_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' type Base62Char = (typeof BASE62_CHARS)[number] +export function formatPrice(locale: string, price: number, currency: string): string + +export function getCurrency(userCountry: string): string + declare global { type ModrinthId = `${Base62Char}`[] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f5bb63ba5..fd7108d0b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,8 +17,8 @@ importers: specifier: ^3.3.2 version: 3.3.3 turbo: - specifier: ^2.0.6 - version: 2.2.1 + specifier: ^2.2.3 + version: 2.2.3 vue: specifier: ^3.4.31 version: 3.5.12(typescript@5.6.3) @@ -79,7 +79,7 @@ importers: version: 1.11.13 floating-vue: specifier: ^5.2.2 - version: 5.2.2(@nuxt/kit@3.13.2(magicast@0.3.5))(vue@3.5.12(typescript@5.6.3)) + version: 5.2.2(@nuxt/kit@3.14.159(magicast@0.3.5)(rollup@4.24.0))(vue@3.5.12(typescript@5.6.3)) ofetch: specifier: ^1.3.4 version: 1.4.1 @@ -107,25 +107,25 @@ importers: devDependencies: '@eslint/compat': specifier: ^1.1.1 - version: 1.2.0(eslint@9.12.0(jiti@2.3.3)) + version: 1.2.3(eslint@9.15.0(jiti@2.4.0)) '@nuxt/eslint-config': specifier: ^0.5.6 - version: 0.5.7(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + version: 0.5.7(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) '@vitejs/plugin-vue': specifier: ^5.0.4 - version: 5.1.4(vite@5.4.9(@types/node@20.16.11)(sass@1.79.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3)) + version: 5.1.4(vite@5.4.9(@types/node@22.9.0)(sass@1.79.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3)) autoprefixer: specifier: ^10.4.19 version: 10.4.20(postcss@8.4.47) eslint: specifier: ^9.9.1 - version: 9.12.0(jiti@2.3.3) + version: 9.15.0(jiti@2.4.0) eslint-config-custom: specifier: workspace:* version: link:../../packages/eslint-config-custom eslint-plugin-turbo: specifier: ^2.1.1 - version: 2.1.3(eslint@9.12.0(jiti@2.3.3)) + version: 2.3.0(eslint@9.15.0(jiti@2.4.0)) postcss: specifier: ^8.4.39 version: 8.4.47 @@ -146,7 +146,7 @@ importers: version: 5.6.3 vite: specifier: ^5.2.8 - version: 5.4.9(@types/node@20.16.11)(sass@1.79.5)(terser@5.34.1) + version: 5.4.9(@types/node@22.9.0)(sass@1.79.5)(terser@5.34.1) vue-tsc: specifier: ^2.1.6 version: 2.1.6(typescript@5.6.3) @@ -166,19 +166,19 @@ importers: version: 0.9.4(prettier@3.3.3)(typescript@5.6.3) '@astrojs/starlight': specifier: ^0.26.3 - version: 0.26.4(astro@4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3)) + version: 0.26.4(astro@4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3)) '@modrinth/assets': specifier: workspace:* version: link:../../packages/assets astro: specifier: ^4.10.2 - version: 4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3) + version: 4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3) sharp: specifier: ^0.32.5 version: 0.32.6 starlight-openapi: specifier: ^0.7.0 - version: 0.7.0(@astrojs/markdown-remark@5.3.0)(@astrojs/starlight@0.26.4(astro@4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3)))(astro@4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3))(openapi-types@12.1.3) + version: 0.7.0(@astrojs/markdown-remark@5.3.0)(@astrojs/starlight@0.26.4(astro@4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3)))(astro@4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3))(openapi-types@12.1.3) typescript: specifier: ^5.5.4 version: 5.6.3 @@ -200,12 +200,27 @@ importers: '@modrinth/utils': specifier: workspace:* version: link:../../packages/utils + '@pinia/nuxt': + specifier: ^0.5.1 + version: 0.5.5(magicast@0.3.5)(rollup@4.24.0)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) '@vintl/vintl': specifier: ^4.4.1 version: 4.4.1(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + '@vueuse/core': + specifier: ^11.1.0 + version: 11.2.0(vue@3.5.12(typescript@5.6.3)) + ace-builds: + specifier: ^1.36.2 + version: 1.36.5 + ansi-to-html: + specifier: ^0.7.2 + version: 0.7.2 dayjs: specifier: ^1.11.7 version: 1.11.13 + dompurify: + specifier: ^3.1.7 + version: 3.2.0 floating-vue: specifier: 2.0.0-beta.20 version: 2.0.0-beta.20(vue@3.5.12(typescript@5.6.3)) @@ -230,6 +245,9 @@ importers: pathe: specifier: ^1.1.2 version: 1.1.2 + pinia: + specifier: ^2.1.7 + version: 2.2.6(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) qrcode.vue: specifier: ^3.4.0 version: 3.5.0(vue@3.5.12(typescript@5.6.3)) @@ -237,8 +255,14 @@ importers: specifier: ^7.5.4 version: 7.6.3 vue-multiselect: - specifier: 3.0.0 - version: 3.0.0 + specifier: 3.0.0-alpha.2 + version: 3.0.0-alpha.2 + vue-typed-virtual-list: + specifier: ^1.0.10 + version: 1.0.10(vue@3.5.12(typescript@5.6.3)) + vue3-ace-editor: + specifier: ^2.2.4 + version: 2.2.4(ace-builds@1.36.5)(vue@3.5.12(typescript@5.6.3)) vue3-apexcharts: specifier: ^1.5.2 version: 1.7.0(apexcharts@3.54.1)(vue@3.5.12(typescript@5.6.3)) @@ -255,6 +279,9 @@ importers: '@nuxtjs/turnstile': specifier: ^0.8.0 version: 0.8.0(magicast@0.3.5)(rollup@4.24.0) + '@types/dompurify': + specifier: ^3.0.5 + version: 3.0.5 '@types/node': specifier: ^20.1.0 version: 20.16.11 @@ -326,22 +353,22 @@ importers: devDependencies: '@nuxtjs/eslint-config-typescript': specifier: ^12.1.0 - version: 12.1.0(eslint-plugin-import-x@4.3.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + version: 12.1.0(eslint-plugin-import-x@4.4.2(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) '@vue/eslint-config-typescript': specifier: ^13.0.0 - version: 13.0.0(eslint-plugin-vue@9.29.0(eslint@9.12.0(jiti@2.3.3)))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + version: 13.0.0(eslint-plugin-vue@9.31.0(eslint@9.15.0(jiti@2.4.0)))(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@9.12.0(jiti@2.3.3)) + version: 9.1.0(eslint@9.15.0(jiti@2.4.0)) eslint-config-turbo: specifier: ^2.0.7 - version: 2.1.3(eslint@9.12.0(jiti@2.3.3)) + version: 2.3.0(eslint@9.15.0(jiti@2.4.0)) eslint-plugin-prettier: specifier: ^5.2.1 - version: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.12.0(jiti@2.3.3)))(eslint@9.12.0(jiti@2.3.3))(prettier@3.3.3) + version: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.15.0(jiti@2.4.0)))(eslint@9.15.0(jiti@2.4.0))(prettier@3.3.3) eslint-plugin-unicorn: specifier: ^54.0.0 - version: 54.0.0(eslint@9.12.0(jiti@2.3.3)) + version: 54.0.0(eslint@9.15.0(jiti@2.4.0)) typescript: specifier: ^5.5.3 version: 5.6.3 @@ -386,7 +413,7 @@ importers: version: 1.11.13 floating-vue: specifier: 2.0.0-beta.24 - version: 2.0.0-beta.24(@nuxt/kit@3.13.2(magicast@0.3.5))(vue@3.5.12(typescript@5.6.3)) + version: 2.0.0-beta.24(@nuxt/kit@3.14.159(magicast@0.3.5)(rollup@4.24.0))(vue@3.5.12(typescript@5.6.3)) highlight.js: specifier: ^11.9.0 version: 11.10.0 @@ -414,7 +441,7 @@ importers: version: 6.2.15(@vue/compiler-core@3.5.12)(vue@3.5.12(typescript@5.6.3)) '@vintl/unplugin': specifier: ^1.5.1 - version: 1.5.2(@vue/compiler-core@3.5.12)(vue@3.5.12(typescript@5.6.3)) + version: 1.5.2(@vue/compiler-core@3.5.12)(rollup@4.24.0)(vue@3.5.12(typescript@5.6.3)) '@vintl/vintl': specifier: ^4.4.1 version: 4.4.1(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) @@ -550,6 +577,10 @@ packages: resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.25.8': resolution: {integrity: sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==} engines: {node: '>=6.9.0'} @@ -620,6 +651,10 @@ packages: resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.25.7': resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} engines: {node: '>=6.9.0'} @@ -1206,12 +1241,22 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.11.1': resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/compat@1.2.0': - resolution: {integrity: sha512-CkPWddN7J9JPrQedEr2X7AjK9y1jaMJtxZ4A/+jTMFA2+n5BWhcKHW/EbJyARqg2zzQfgtWUtVmG3hrG6+nGpg==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/compat@1.2.3': + resolution: {integrity: sha512-wlZhwlDFxkxIZ571aH0FoK4h4Vwx7P3HJx62Gp8hTc10bfpwT2x0nULuAHmQSJBOWPgPeVf+9YtnD4j50zVHmA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^9.10.0 @@ -1219,36 +1264,36 @@ packages: eslint: optional: true - '@eslint/config-array@0.18.0': - resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} + '@eslint/config-array@0.19.0': + resolution: {integrity: sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.6.0': - resolution: {integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==} + '@eslint/core@0.9.0': + resolution: {integrity: sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/eslintrc@3.1.0': - resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/js@8.57.1': resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@9.12.0': - resolution: {integrity: sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==} + '@eslint/js@9.15.0': + resolution: {integrity: sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.4': resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.0': - resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==} + '@eslint/plugin-kit@0.2.3': + resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@expressive-code/core@0.35.6': @@ -1312,6 +1357,36 @@ packages: vue: optional: true + '@formatjs/cli-lib@6.6.3': + resolution: {integrity: sha512-BXKMmZxtzrdLDBDd0UAp8915x6TsHPziEfrvP21e/lTFCel+J1IOaD8EtGCJoLW0rZksWlUKLX+E2tALZr31DQ==} + engines: {node: '>= 16'} + peerDependencies: + '@glimmer/env': ^0.1.7 + '@glimmer/reference': ^0.91.1 || ^0.92.0 + '@glimmer/syntax': ^0.92.0 + '@glimmer/validator': ^0.92.0 + '@vue/compiler-core': ^3.4.0 + content-tag: ^2.0.1 + ember-template-recast: ^6.1.4 + vue: ^3.4.0 + peerDependenciesMeta: + '@glimmer/env': + optional: true + '@glimmer/reference': + optional: true + '@glimmer/syntax': + optional: true + '@glimmer/validator': + optional: true + '@vue/compiler-core': + optional: true + content-tag: + optional: true + ember-template-recast: + optional: true + vue: + optional: true + '@formatjs/cli@6.2.15': resolution: {integrity: sha512-s31YblAseSVqgFvY2EoIZaaEycifR/CadvMj1WcNvFvHK+2Xn02OuSX1jiKM/Nx29hX2x8k0raFJ6PtnXZgjtQ==} engines: {node: '>= 16'} @@ -1349,15 +1424,27 @@ packages: '@formatjs/ecma402-abstract@2.2.0': resolution: {integrity: sha512-IpM+ev1E4QLtstniOE29W1rqH9eTdx5hQdNL8pzrflMj/gogfaoONZqL83LUeQScHAvyMbpqP5C9MzNf+fFwhQ==} + '@formatjs/ecma402-abstract@2.2.3': + resolution: {integrity: sha512-aElGmleuReGnk2wtYOzYFmNWYoiWWmf1pPPCYg0oiIQSJj0mjc4eUfzUXaSOJ4S8WzI/cLqnCTWjqz904FT2OQ==} + '@formatjs/fast-memoize@2.2.1': resolution: {integrity: sha512-XS2RcOSyWxmUB7BUjj3mlPH0exsUzlf6QfhhijgI941WaJhVxXQ6mEWkdUFIdnKi3TuTYxRdelsgv3mjieIGIA==} + '@formatjs/fast-memoize@2.2.3': + resolution: {integrity: sha512-3jeJ+HyOfu8osl3GNSL4vVHUuWFXR03Iz9jjgI7RwjG6ysu/Ymdr0JRCPHfF5yGbTE6JCrd63EpvX1/WybYRbA==} + '@formatjs/icu-messageformat-parser@2.7.10': resolution: {integrity: sha512-wlQfqCZ7PURkUNL2+8VTEFavPovtADU/isSKLFvDbdFmV7QPZIYqFMkhklaDYgMyLSBJa/h2MVQ2aFvoEJhxgg==} + '@formatjs/icu-messageformat-parser@2.9.3': + resolution: {integrity: sha512-9L99QsH14XjOCIp4TmbT8wxuffJxGK8uLNO1zNhLtcZaVXvv626N0s4A2qgRCKG3dfYWx9psvGlFmvyVBa6u/w==} + '@formatjs/icu-skeleton-parser@1.8.4': resolution: {integrity: sha512-LMQ1+Wk1QSzU4zpd5aSu7+w5oeYhupRwZnMQckLPRYhSjf2/8JWQ882BauY9NyHxs5igpuQIXZDgfkaH3PoATg==} + '@formatjs/icu-skeleton-parser@1.8.7': + resolution: {integrity: sha512-fI+6SmS2g7h3srfAKSWa5dwreU5zNEfon2uFo99OToiLF6yxGE+WikvFSbsvMAYkscucvVmTYNlWlaDPp0n5HA==} + '@formatjs/intl-displaynames@6.6.10': resolution: {integrity: sha512-tUz5qT61og1WwMM0K1/p46J69gLl1YJbty8xhtbigDA9LhbBmW2ShDg4ld+aqJTwCq4WK3Sj0VlFCKvFYeY3rQ==} @@ -1373,6 +1460,9 @@ packages: '@formatjs/intl-localematcher@0.5.5': resolution: {integrity: sha512-t5tOGMgZ/i5+ALl2/offNqAQq/lfUnKLEw0mXQI4N4bqpedhrSE+fyKLpwnd22sK0dif6AV+ufQcTsKShB9J1g==} + '@formatjs/intl-localematcher@0.5.7': + resolution: {integrity: sha512-GGFtfHGQVFe/niOZp24Kal5b2i36eE2bNL0xi9Sg/yd0TR8aLjcteApZdHmismP5QQax1cMnZM9yWySUUjJteA==} + '@formatjs/intl@2.10.8': resolution: {integrity: sha512-eY8r8RMmrRTTkLdbNBOZLFGXN3OnrEmInaNt8s4msIVfo+xuLqAqvB3W1jevj0I9QjU6ueIP7tEk+1rj6Xbv5A==} peerDependencies: @@ -1389,12 +1479,20 @@ packages: ts-jest: optional: true - '@humanfs/core@0.19.0': - resolution: {integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==} + '@formatjs/ts-transformer@3.13.22': + resolution: {integrity: sha512-+Zfz0wZ6wkdQE2zePiIQWIf4dVWeJGFXjkZxoCwzqxXdDrRhyAsQm91kbdFRIcVrjILA6KV0gOz8X7OBbLP4fQ==} + peerDependencies: + ts-jest: '>=27' + peerDependenciesMeta: + ts-jest: + optional: true + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.5': - resolution: {integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==} + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} engines: {node: '>=18.18.0'} '@humanwhocodes/config-array@0.13.0': @@ -1418,6 +1516,10 @@ packages: resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} + '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -1651,10 +1753,18 @@ packages: resolution: {integrity: sha512-KvRw21zU//wdz25IeE1E5m/aFSzhJloBRAQtv+evcFeZvuroIxpIQuUqhbzuwznaUwpiWbmwlcsp5uOWmi4vwA==} engines: {node: ^14.18.0 || >=16.10.0} + '@nuxt/kit@3.14.159': + resolution: {integrity: sha512-ZqxsCI1NKV/gjfEUUZjMcr82sg0MKYZOuyB6bu9QY5Zr7NGpfIZY/z5Z822AKTmFxKGChnuz9M0UaS4ze6p42g==} + engines: {node: ^14.18.0 || >=16.10.0} + '@nuxt/schema@3.13.2': resolution: {integrity: sha512-CCZgpm+MkqtOMDEgF9SWgGPBXlQ01hV/6+2reDEpJuqFPGzV8HYKPBcIFvn7/z5ahtgutHLzjP71Na+hYcqSpw==} engines: {node: ^14.18.0 || >=16.10.0} + '@nuxt/schema@3.14.159': + resolution: {integrity: sha512-ggXA3F2f9udQoEy5WwrY6bTMvpDaErUYRLSEzdMqqCqjOQ5manfFgfuScGj3ooZiXLIX2TGLVTzcll4nnpDlnQ==} + engines: {node: ^14.18.0 || >=16.10.0} + '@nuxt/telemetry@2.6.0': resolution: {integrity: sha512-h4YJ1d32cU7tDKjjhjtIIEck4WF/w3DTQBT348E9Pz85YLttnLqktLM0Ez9Xc2LzCeUgBDQv1el7Ob/zT3KUqg==} hasBin: true @@ -1791,6 +1901,9 @@ packages: resolution: {integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==} engines: {node: '>= 10.0.0'} + '@pinia/nuxt@0.5.5': + resolution: {integrity: sha512-wjxS7YqIesh4OLK+qE3ZjhdOJ5pYZQ+VlEmZNtTwzQn1Kavei/khovx7mzXVXNA/mvSPXVhb9xBzhyS3XMURtw==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1893,6 +2006,15 @@ packages: rollup: optional: true + '@rollup/pluginutils@5.1.3': + resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/rollup-android-arm-eabi@4.24.0': resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} cpu: [arm] @@ -2033,8 +2155,8 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} - '@stylistic/eslint-plugin@2.9.0': - resolution: {integrity: sha512-OrDyFAYjBT61122MIY1a3SfEgy3YCMgt2vL4eoPmvTwDBwyQhAXurxNQznlRD/jESNfYWfID8Ej+31LljvF7Xg==} + '@stylistic/eslint-plugin@2.10.1': + resolution: {integrity: sha512-U+4yzNXElTf9q0kEfnloI9XbOyD4cnEQCxjUI94q0+W++0GAEQvJ/slwEj9lwjDHfGADRSr+Tco/z0XJvmDfCQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.40.0' @@ -2147,12 +2269,18 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/dompurify@3.0.5': + resolution: {integrity: sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==} + '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/fs-extra@11.0.4': + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + '@types/fs-extra@9.0.13': resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} @@ -2168,9 +2296,15 @@ packages: '@types/json-stable-stringify@1.0.36': resolution: {integrity: sha512-b7bq23s4fgBB76n34m2b3RBf6M369B0Z9uRR8aHTMd8kZISRkmDEpPD8hhpYvDFzr3bJCPES96cm3Q6qRNDbQw==} + '@types/json-stable-stringify@1.1.0': + resolution: {integrity: sha512-ESTsHWB72QQq+pjUFIbEz9uSCZppD31YrVkbt2rnUciTYEvcwN6uZIhX5JZeBHqRlFJ41x/7MewCs7E2Qux6Cg==} + '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/jsonfile@6.1.4': + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + '@types/linkify-it@5.0.0': resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} @@ -2201,6 +2335,9 @@ packages: '@types/node@20.16.11': resolution: {integrity: sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==} + '@types/node@22.9.0': + resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} + '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2213,12 +2350,21 @@ packages: '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/web-bluetooth@0.0.16': + resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + '@typescript-eslint/eslint-plugin@6.21.0': resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} @@ -2241,8 +2387,8 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.9.0': - resolution: {integrity: sha512-Y1n621OCy4m7/vTXNlCbMVp87zSd7NH0L9cXD8aIpOaNlzeWxIK4+Q19A68gSmTNRZn92UjocVUWDthGxtqHFg==} + '@typescript-eslint/eslint-plugin@8.14.0': + resolution: {integrity: sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -2272,8 +2418,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.9.0': - resolution: {integrity: sha512-U+BLn2rqTTHnc4FL3FJjxaXptTxmf9sNftJK62XLz4+GxG3hLHm/SUNaaXP5Y4uTiuYoL5YLy4JBCJe3+t8awQ==} + '@typescript-eslint/parser@8.14.0': + resolution: {integrity: sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2290,8 +2436,8 @@ packages: resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@8.9.0': - resolution: {integrity: sha512-bZu9bUud9ym1cabmOYH9S6TnbWRzpklVmwqICeOulTCZ9ue2/pczWzQvt/cGj2r2o1RdKoZbuEMalJJSYw3pHQ==} + '@typescript-eslint/scope-manager@8.14.0': + resolution: {integrity: sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/type-utils@6.21.0': @@ -2314,8 +2460,8 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.9.0': - resolution: {integrity: sha512-JD+/pCqlKqAk5961vxCluK+clkppHY07IbV3vett97KOV+8C6l+CPEPwpUuiMwgbOz/qrN3Ke4zzjqbT+ls+1Q==} + '@typescript-eslint/type-utils@8.14.0': + resolution: {integrity: sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -2331,8 +2477,8 @@ packages: resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.9.0': - resolution: {integrity: sha512-SjgkvdYyt1FAPhU9c6FiYCXrldwYYlIQLkuc+LfAhCna6ggp96ACncdtlbn8FmnG72tUkXclrDExOpEYf1nfJQ==} + '@typescript-eslint/types@8.14.0': + resolution: {integrity: sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@6.21.0': @@ -2353,8 +2499,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.9.0': - resolution: {integrity: sha512-9iJYTgKLDG6+iqegehc5+EqE6sqaee7kb8vWpmHZ86EqwDjmlqNNHeqDVqb9duh+BY6WCNHfIGvuVU3Tf9Db0g==} + '@typescript-eslint/typescript-estree@8.14.0': + resolution: {integrity: sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -2374,8 +2520,8 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@8.9.0': - resolution: {integrity: sha512-PKgMmaSo/Yg/F7kIZvrgrWa1+Vwn036CdNUvYFEkYbPwOH4i8xvkaRlu148W3vtheWK9ckKRIz7PBP5oUlkrvQ==} + '@typescript-eslint/utils@8.14.0': + resolution: {integrity: sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2388,8 +2534,8 @@ packages: resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.9.0': - resolution: {integrity: sha512-Ht4y38ubk4L5/U8xKUBfKNYGmvKvA1CANoxiTRMM+tOLk3lbF3DvzZCxJCRSE+2GdCMSh6zq9VZJc3asc1XuAA==} + '@typescript-eslint/visitor-keys@8.14.0': + resolution: {integrity: sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -2598,6 +2744,24 @@ packages: '@vue/tsconfig@0.5.1': resolution: {integrity: sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==} + '@vueuse/core@11.2.0': + resolution: {integrity: sha512-JIUwRcOqOWzcdu1dGlfW04kaJhW3EXnnjJJfLTtddJanymTL7lF1C0+dVVZ/siLfc73mWn+cGP1PE1PKPruRSA==} + + '@vueuse/core@9.13.0': + resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} + + '@vueuse/metadata@11.2.0': + resolution: {integrity: sha512-L0ZmtRmNx+ZW95DmrgD6vn484gSpVeRbgpWevFKXwqqQxW9hnSi2Ppuh2BzMjnbv4aJRiIw8tQatXT9uOB23dQ==} + + '@vueuse/metadata@9.13.0': + resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} + + '@vueuse/shared@11.2.0': + resolution: {integrity: sha512-VxFjie0EanOudYSgMErxXfq6fo8vhr5ICI+BuE3I9FnX7ePllEsVrRQ7O6Q1TLgApeLuPKcHQxAXpP+KnlrJsg==} + + '@vueuse/shared@9.13.0': + resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + '@yr/monotone-cubic-spline@1.0.3': resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} @@ -2608,6 +2772,9 @@ packages: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} + ace-builds@1.36.5: + resolution: {integrity: sha512-mZ5KVanRT6nLRDLqtG/1YQQLX/gZVC/v526cm1Ru/MTSlrbweSmqv2ZT0d2GaHpJq035MwCMIrj+LgDAUnDXrg==} + acorn-import-attributes@1.9.5: resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} peerDependencies: @@ -2628,6 +2795,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -2677,6 +2849,11 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + ansi-to-html@0.7.2: + resolution: {integrity: sha512-v6MqmEpNlxF+POuyhKkidusCHWWkaLcGRURzivcU3I9tv7k4JVhFcnukrM5Rlk2rUywdZuzYAZ+kbZqWCnfN3g==} + engines: {node: '>=8.0.0'} + hasBin: true + any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -2869,6 +3046,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + buffer-crc32@1.0.0: resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} engines: {node: '>=8.0.0'} @@ -2901,6 +3083,14 @@ packages: magicast: optional: true + c12@2.0.1: + resolution: {integrity: sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==} + peerDependencies: + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true + cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -2930,6 +3120,9 @@ packages: caniuse-lite@1.0.30001668: resolution: {integrity: sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==} + caniuse-lite@1.0.30001680: + resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2980,6 +3173,10 @@ packages: resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} engines: {node: '>=8'} + ci-info@4.1.0: + resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} + engines: {node: '>=8'} + citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} @@ -3055,6 +3252,10 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -3117,8 +3318,8 @@ packages: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} - core-js-compat@3.38.1: - resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} + core-js-compat@3.39.0: + resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -3150,6 +3351,10 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + cross-spawn@7.0.5: + resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} + engines: {node: '>= 8'} + crossws@0.2.4: resolution: {integrity: sha512-DAxroI2uSOgUKLz00NX6A8U/8EE3SZHmIND+10jkVSaypvyt57J5JEOxAQOL6lQxyzi/wZbTIwssU1uy69h5Vg==} peerDependencies: @@ -3254,6 +3459,9 @@ packages: de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -3405,6 +3613,9 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} + dompurify@3.2.0: + resolution: {integrity: sha512-AMdOzK44oFWqHEi0wpOqix/fUNY707OmoeFDnbi3Q5I8uOpy21ufUA5cDJPr0bosxrflOVD/H2DMSvuGKJGfmQ==} + domutils@3.1.0: resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} @@ -3436,6 +3647,9 @@ packages: electron-to-chromium@1.5.38: resolution: {integrity: sha512-VbeVexmZ1IFh+5EfrYz1I0HTzHVIlJa112UEWhciPyeOcKJGeTv6N8WnG4wsQB81DGCaVEGhpSb6o6a8WYFXXg==} + electron-to-chromium@1.5.62: + resolution: {integrity: sha512-t8c+zLmJHa9dJy96yBZRXGQYoiCEnHYgFwn1asvSPZSUdVxnB62A4RASd7k41ytG3ErFBA0TpHlKg9D9SQBmLg==} + emmet@2.4.11: resolution: {integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==} @@ -3463,6 +3677,9 @@ packages: resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + entities@3.0.1: resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} engines: {node: '>=0.12'} @@ -3480,8 +3697,8 @@ packages: errx@0.1.0: resolution: {integrity: sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q==} - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + es-abstract@1.23.5: + resolution: {integrity: sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==} engines: {node: '>= 0.4'} es-define-property@1.0.0: @@ -3570,8 +3787,8 @@ packages: eslint-plugin-n: '^15.0.0 || ^16.0.0 ' eslint-plugin-promise: ^6.0.0 - eslint-config-turbo@2.1.3: - resolution: {integrity: sha512-smdkhd01V/e/I4EjJxaZA1kxZ1vdFCHpyryolxLtRBP0bZTrHDYh1H6NAyZ3Fy1jkhsQzXw+L+6m17ygROvNFw==} + eslint-config-turbo@2.3.0: + resolution: {integrity: sha512-Nm9WZgNoUIJw4bpYQugGCDjzYy1TlUD4sQ/nGblL+HdNqJWCj5NqXbJ1k+TBfYedhr65dlGoAFPYUOfjUOmKVg==} peerDependencies: eslint: '>6.6.0' @@ -3627,8 +3844,8 @@ packages: peerDependencies: eslint: '>=4.19.1' - eslint-plugin-import-x@4.3.1: - resolution: {integrity: sha512-5TriWkXulDl486XnYYRgsL+VQoS/7mhN/2ci02iLCuL7gdhbiWxnsuL/NTcaKY9fpMgsMFjWZBtIGW7pb+RX0g==} + eslint-plugin-import-x@4.4.2: + resolution: {integrity: sha512-mDRXPSLQ0UQZQw91QdG4/qZT6hgeW2MJTczAbgPseUZuPEtIjjdPOolXroRkulnOn3fzj6gNgvk+wchMJiHElg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3643,8 +3860,8 @@ packages: '@typescript-eslint/parser': optional: true - eslint-plugin-jsdoc@50.4.1: - resolution: {integrity: sha512-OXIq+JJQPCLAKL473/esioFOwbXyRE5MAQ4HbZjcp3e+K3zdxt2uDpGs3FR+WezUXNStzEtTfgx15T+JFrVwBA==} + eslint-plugin-jsdoc@50.5.0: + resolution: {integrity: sha512-xTkshfZrUbiSHXBwZ/9d5ulZ2OcHXxSvm/NPo494H/hadLRJwOq5PMV0EUpMqsb9V+kQo+9BAgi6Z7aJtdBp2A==} engines: {node: '>=18'} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -3681,14 +3898,14 @@ packages: peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-regexp@2.6.0: - resolution: {integrity: sha512-FCL851+kislsTEQEMioAlpDuK5+E5vs0hi1bF8cFlPlHcEjeRhuAzEsGikXRreE+0j4WhW2uO54MqTjXtYOi3A==} + eslint-plugin-regexp@2.7.0: + resolution: {integrity: sha512-U8oZI77SBtH8U3ulZ05iu0qEzIizyEDXd+BWHvyVxTOjGwcDcvy/kEpgFG4DYca2ByRLiVPFZ2GeH7j1pdvZTA==} engines: {node: ^18 || >=20} peerDependencies: eslint: '>=8.44.0' - eslint-plugin-turbo@2.1.3: - resolution: {integrity: sha512-I9vPArzyOSYa6bm0iMCgD07MgdExc1VK2wGuVz21g4BUdj83w7mDKyCXR2rwOtCEW+wemFwgxanJ81imQZijNg==} + eslint-plugin-turbo@2.3.0: + resolution: {integrity: sha512-2iVUoIhrjp6kI8p0J4NewKPpXaKrHvL4K4eRnNXbqZvP/7xsm4Of+33B3b7m7OsS0UgX8HHOjlB9bEjigKMkMA==} peerDependencies: eslint: '>6.6.0' @@ -3710,8 +3927,8 @@ packages: peerDependencies: eslint: '>=8.56.0' - eslint-plugin-vue@9.29.0: - resolution: {integrity: sha512-hamyjrBhNH6Li6R1h1VF9KHfshJlKgKEg3ARbGTn72CMNDSMhWbgC7NdkRDEh25AFW+4SDATzyNM+3gWuZii8g==} + eslint-plugin-vue@9.31.0: + resolution: {integrity: sha512-aYMUCgivhz1o4tLkRHj5oq9YgYPM4/EJc0M7TAKRLCUA5OYxRLAhYEVD2nLtTwLyixEFI+/QXSvKU9ESZFgqjQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -3720,8 +3937,8 @@ packages: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-scope@8.1.0: - resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-utils@2.1.0: @@ -3746,8 +3963,8 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.1.0: - resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint@8.57.1: @@ -3756,8 +3973,8 @@ packages: deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true - eslint@9.12.0: - resolution: {integrity: sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==} + eslint@9.15.0: + resolution: {integrity: sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -3766,8 +3983,8 @@ packages: jiti: optional: true - espree@10.2.0: - resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} espree@9.6.1: @@ -4113,8 +4330,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.11.0: - resolution: {integrity: sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==} + globals@15.12.0: + resolution: {integrity: sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==} engines: {node: '>=18'} globalthis@1.0.4: @@ -4311,6 +4528,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@6.0.2: + resolution: {integrity: sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==} + engines: {node: '>= 4'} + image-meta@0.2.1: resolution: {integrity: sha512-K6acvFaelNxx8wc2VjbIzXKDVB0Khs0QT35U6NkGfTdCmjLNcO2945m7RFNR9/RPVFm48hq7QPzK8uGH18HCGw==} @@ -4578,6 +4799,10 @@ packages: resolution: {integrity: sha512-EX4oNDwcXSivPrw2qKH2LB5PoFxEvgtv2JgwW0bU858HoLQ+kutSvjLMUqBd0PeJYEinLWhoI9Ol0eYMqj/wNQ==} hasBin: true + jiti@2.4.0: + resolution: {integrity: sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==} + hasBin: true + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -5071,6 +5296,9 @@ packages: mlly@1.7.2: resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==} + mlly@1.7.3: + resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -5222,8 +5450,8 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} engines: {node: '>= 0.4'} object-keys@1.1.1: @@ -5447,6 +5675,18 @@ packages: typescript: optional: true + pinia@2.2.6: + resolution: {integrity: sha512-vIsR8JkDN5Ga2vAxqOE2cJj4VtsHnzpR1Fz30kClxlh0yCHfec6uoMeM3e/ddqmwFUejK3NlrcQa/shnpyT4hA==} + peerDependencies: + '@vue/composition-api': ^1.4.0 + typescript: '>=4.4.4' + vue: ^2.6.14 || ^3.5.11 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + typescript: + optional: true + pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} @@ -5961,6 +6201,9 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -6238,6 +6481,9 @@ packages: std-env@3.7.0: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + stdin-discarder@0.2.2: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} @@ -6485,8 +6731,8 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + ts-api-utils@1.4.0: + resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' @@ -6510,41 +6756,44 @@ packages: tslib@2.8.0: resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - turbo-darwin-64@2.2.1: - resolution: {integrity: sha512-jltMdSQ+7rQDVaorjW729PCw6fwAn1MgZSdoa0Gil7GZCOF3SnR/ok0uJw6G5mdm6F5XM8ZTlz+mdGzBLuBRaA==} + turbo-darwin-64@2.2.3: + resolution: {integrity: sha512-Rcm10CuMKQGcdIBS3R/9PMeuYnv6beYIHqfZFeKWVYEWH69sauj4INs83zKMTUiZJ3/hWGZ4jet9AOwhsssLyg==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.2.1: - resolution: {integrity: sha512-RHW0c1NonsJXXlutlZeunmhLanf0/WbeizFfYgWuTEaJE4MbbhyD/RG4Fm/7iob5kxQ4Es2TzfDPqyMqpIO0GA==} + turbo-darwin-arm64@2.2.3: + resolution: {integrity: sha512-+EIMHkuLFqUdJYsA3roj66t9+9IciCajgj+DVek+QezEdOJKcRxlvDOS2BUaeN8kEzVSsNiAGnoysFWYw4K0HA==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.2.1: - resolution: {integrity: sha512-RasrjV+i2B90hoR8r6B2Btf2/ebNT5MJbhkpY0G1EN06E1IkjCKfAXj/1Dwmjy9+Zo0NC2r69L3HxRrtpar8jQ==} + turbo-linux-64@2.2.3: + resolution: {integrity: sha512-UBhJCYnqtaeOBQLmLo8BAisWbc9v9daL9G8upLR+XGj6vuN/Nz6qUAhverN4Pyej1g4Nt1BhROnj6GLOPYyqxQ==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.2.1: - resolution: {integrity: sha512-LNkUUJuu1gNkhlo7Ky/zilXEiajLoGlWLiKT1XV5neEf+x1s+aU9Hzd/+HhSVMiyI8l7z6zLbrM1a6+v4co/SQ==} + turbo-linux-arm64@2.2.3: + resolution: {integrity: sha512-hJYT9dN06XCQ3jBka/EWvvAETnHRs3xuO/rb5bESmDfG+d9yQjeTMlhRXKrr4eyIMt6cLDt1LBfyi+6CQ+VAwQ==} cpu: [arm64] os: [linux] - turbo-windows-64@2.2.1: - resolution: {integrity: sha512-Mn5tlFrLzlQ6tW6wTWNlyT1osXuDUg0VT1VAjRpmRXlK2Zi3oKVVG0rs0nkkq4rmuheryD1xyuGPN9nFKbAn/A==} + turbo-windows-64@2.2.3: + resolution: {integrity: sha512-NPrjacrZypMBF31b4HE4ROg4P3nhMBPHKS5WTpMwf7wydZ8uvdEHpESVNMOtqhlp857zbnKYgP+yJF30H3N2dQ==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.2.1: - resolution: {integrity: sha512-bvYOJ3SMN00yiem+uAqwRMbUMau/KiMzJYxnD0YkFo6INc08z8gZi5g0GLZAR7g/L3JegktX3UQW2cJvryjvLg==} + turbo-windows-arm64@2.2.3: + resolution: {integrity: sha512-fnNrYBCqn6zgKPKLHu4sOkihBI/+0oYFr075duRxqUZ+1aLWTAGfHZLgjVeLh3zR37CVzuerGIPWAEkNhkWEIw==} cpu: [arm64] os: [win32] - turbo@2.2.1: - resolution: {integrity: sha512-clZFkh6U6NpsLKBVZYRjlZjRTfju1Z5STqvFVaOGu5443uM75alJe1nCYH9pQ9YJoiOvXAqA2rDHWN5kLS9JMg==} + turbo@2.2.3: + resolution: {integrity: sha512-5lDvSqIxCYJ/BAd6rQGK/AzFRhBkbu4JHVMLmGh/hCb7U3CqSnr5Tjwfy9vc+/5wG2DJ6wttgAaA7MoCgvBKZQ==} hasBin: true type-check@0.4.0: @@ -6649,6 +6898,9 @@ packages: unimport@3.13.1: resolution: {integrity: sha512-nNrVzcs93yrZQOW77qnyOVHtb68LegvhYFwxFMfuuWScmwQmyVCG/NBuN8tYsaGzgQUVYv34E/af+Cc9u4og4A==} + unimport@3.13.2: + resolution: {integrity: sha512-VKAepeIb6BWLtBl4tmyHY1/7rJgz3ynmZrWf8cU1a+v5Uv/k1gyyAEeGBnYcrwy8bxG5sflxEx4a9VQUqOVHUA==} + unist-util-find-after@5.0.0: resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} @@ -6700,6 +6952,10 @@ packages: webpack-sources: optional: true + unplugin@1.16.0: + resolution: {integrity: sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==} + engines: {node: '>=14.0.0'} + unstorage@1.12.0: resolution: {integrity: sha512-ARZYTXiC+e8z3lRM7/qY9oyaOkaozCeNd2xoz7sYK9fv7OLGhVsf+BZbmASqiK/HTZ7T6eAlnVq9JynZppyk3w==} peerDependencies: @@ -7028,6 +7284,10 @@ packages: resolution: {integrity: sha512-uupKdINgz7j83lQToCL7KkgQQxvG43el++hsR39YT9pCe1DwzUGmKzPxjVP6rqskXed5P6DtUASYAlCliW740Q==} engines: {node: '>= 14.18.1', npm: '>= 6.14.15'} + vue-multiselect@3.0.0-alpha.2: + resolution: {integrity: sha512-Xp9fGJECns45v+v8jXbCIsAkCybYkEg0lNwr7Z6HDUSMyx2TEIK2giipPE+qXiShEc1Ipn+ZtttH2iq9hwXP4Q==} + engines: {node: '>= 4.0.0', npm: '>= 3.0.0'} + vue-observe-visibility@2.0.0-alpha.1: resolution: {integrity: sha512-flFbp/gs9pZniXR6fans8smv1kDScJ8RS7rEpMjhVabiKeq7Qz3D9+eGsypncjfIyyU84saU88XZ0zjbD6Gq/g==} peerDependencies: @@ -7059,11 +7319,22 @@ packages: peerDependencies: typescript: '>=5.0.0' + vue-typed-virtual-list@1.0.10: + resolution: {integrity: sha512-StYs56ypKBY4Lu7Cz3Rnyywajxi3NgCxCcWuMJB2wfJ5qvicPw6YPV3sFUy1d1Cjm+AFCB0cZI7ymvgx8IvPIg==} + peerDependencies: + vue: ^3.2.45 + vue-virtual-scroller@2.0.0-beta.8: resolution: {integrity: sha512-b8/f5NQ5nIEBRTNi6GcPItE4s7kxNHw2AIHLtDp+2QvqdTjVN0FgONwX9cr53jWRgnu+HRLPaWDOR2JPI5MTfQ==} peerDependencies: vue: ^3.2.0 + vue3-ace-editor@2.2.4: + resolution: {integrity: sha512-FZkEyfpbH068BwjhMyNROxfEI8135Sc+x8ouxkMdCNkuj/Tuw83VP/gStFQqZHqljyX9/VfMTCdTqtOnJZGN8g==} + peerDependencies: + ace-builds: '*' + vue: ^3 + vue3-apexcharts@1.7.0: resolution: {integrity: sha512-BmWoS8+x5XLCtk2ml7rLVO+QU+fjgQUUCjUXSFW9cNQpCMa5Z0eRPvZjvYLt5aDKNREtuZoidlG9WRjZ/Af7lA==} peerDependencies: @@ -7312,12 +7583,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@3.1.8(astro@4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3))': + '@astrojs/mdx@3.1.8(astro@4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3))': dependencies: '@astrojs/markdown-remark': 5.3.0 '@mdx-js/mdx': 3.1.0(acorn@8.13.0) acorn: 8.13.0 - astro: 4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3) + astro: 4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3) es-module-lexer: 1.5.4 estree-util-visit: 2.0.0 gray-matter: 4.0.3 @@ -7342,15 +7613,15 @@ snapshots: stream-replace-string: 2.0.0 zod: 3.23.8 - '@astrojs/starlight@0.26.4(astro@4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3))': + '@astrojs/starlight@0.26.4(astro@4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3))': dependencies: - '@astrojs/mdx': 3.1.8(astro@4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3)) + '@astrojs/mdx': 3.1.8(astro@4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3)) '@astrojs/sitemap': 3.2.1 '@pagefind/default-ui': 1.1.1 '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - astro: 4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3) - astro-expressive-code: 0.35.6(astro@4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3)) + astro: 4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3) + astro-expressive-code: 0.35.6(astro@4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3)) bcp-47: 2.1.0 hast-util-from-html: 2.0.3 hast-util-select: 6.0.3 @@ -7390,6 +7661,12 @@ snapshots: '@babel/highlight': 7.25.7 picocolors: 1.1.1 + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/compat-data@7.25.8': {} '@babel/core@7.25.8': @@ -7463,7 +7740,7 @@ snapshots: '@babel/core': 7.25.8 '@babel/helper-module-imports': 7.25.7 '@babel/helper-simple-access': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 + '@babel/helper-validator-identifier': 7.25.9 '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color @@ -7501,6 +7778,8 @@ snapshots: '@babel/helper-validator-identifier@7.25.7': {} + '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-option@7.25.7': {} '@babel/helpers@7.25.7': @@ -7510,7 +7789,7 @@ snapshots: '@babel/highlight@7.25.7': dependencies: - '@babel/helper-validator-identifier': 7.25.7 + '@babel/helper-validator-identifier': 7.25.9 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.1 @@ -7719,7 +7998,7 @@ snapshots: '@emnapi/runtime@1.3.1': dependencies: - tslib: 2.8.0 + tslib: 2.8.1 optional: true '@es-joy/jsdoccomment@0.49.0': @@ -7943,18 +8222,20 @@ snapshots: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0(jiti@2.3.3))': + '@eslint-community/eslint-utils@4.4.1(eslint@9.15.0(jiti@2.4.0))': dependencies: - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.11.1': {} - '@eslint/compat@1.2.0(eslint@9.12.0(jiti@2.3.3))': - optionalDependencies: - eslint: 9.12.0(jiti@2.3.3) + '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.18.0': + '@eslint/compat@1.2.3(eslint@9.15.0(jiti@2.4.0))': + optionalDependencies: + eslint: 9.15.0(jiti@2.4.0) + + '@eslint/config-array@0.19.0': dependencies: '@eslint/object-schema': 2.1.4 debug: 4.3.7 @@ -7962,7 +8243,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/core@0.6.0': {} + '@eslint/core@0.9.0': {} '@eslint/eslintrc@2.1.4': dependencies: @@ -7978,11 +8259,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/eslintrc@3.1.0': + '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 debug: 4.3.7 - espree: 10.2.0 + espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 @@ -7994,11 +8275,11 @@ snapshots: '@eslint/js@8.57.1': {} - '@eslint/js@9.12.0': {} + '@eslint/js@9.15.0': {} '@eslint/object-schema@2.1.4': {} - '@eslint/plugin-kit@0.2.0': + '@eslint/plugin-kit@0.2.3': dependencies: levn: 0.4.1 @@ -8060,7 +8341,30 @@ snapshots: fs-extra: 10.1.0 json-stable-stringify: 1.1.1 loud-rejection: 2.2.0 - tslib: 2.8.0 + tslib: 2.8.1 + typescript: 5.6.3 + optionalDependencies: + '@vue/compiler-core': 3.5.12 + vue: 3.5.12(typescript@5.6.3) + transitivePeerDependencies: + - ts-jest + + '@formatjs/cli-lib@6.6.3(@vue/compiler-core@3.5.12)(vue@3.5.12(typescript@5.6.3))': + dependencies: + '@formatjs/icu-messageformat-parser': 2.9.3 + '@formatjs/icu-skeleton-parser': 1.8.7 + '@formatjs/ts-transformer': 3.13.22 + '@types/estree': 1.0.6 + '@types/fs-extra': 11.0.4 + '@types/json-stable-stringify': 1.1.0 + '@types/node': 22.9.0 + chalk: 4.1.2 + commander: 12.1.0 + fast-glob: 3.3.2 + fs-extra: 11.2.0 + json-stable-stringify: 1.1.1 + loud-rejection: 2.2.0 + tslib: 2.8.1 typescript: 5.6.3 optionalDependencies: '@vue/compiler-core': 3.5.12 @@ -8084,21 +8388,42 @@ snapshots: '@formatjs/intl-localematcher': 0.5.5 tslib: 2.8.0 + '@formatjs/ecma402-abstract@2.2.3': + dependencies: + '@formatjs/fast-memoize': 2.2.3 + '@formatjs/intl-localematcher': 0.5.7 + tslib: 2.8.1 + '@formatjs/fast-memoize@2.2.1': dependencies: tslib: 2.8.0 + '@formatjs/fast-memoize@2.2.3': + dependencies: + tslib: 2.8.1 + '@formatjs/icu-messageformat-parser@2.7.10': dependencies: '@formatjs/ecma402-abstract': 2.2.0 '@formatjs/icu-skeleton-parser': 1.8.4 tslib: 2.8.0 + '@formatjs/icu-messageformat-parser@2.9.3': + dependencies: + '@formatjs/ecma402-abstract': 2.2.3 + '@formatjs/icu-skeleton-parser': 1.8.7 + tslib: 2.8.1 + '@formatjs/icu-skeleton-parser@1.8.4': dependencies: '@formatjs/ecma402-abstract': 2.2.0 tslib: 2.8.0 + '@formatjs/icu-skeleton-parser@1.8.7': + dependencies: + '@formatjs/ecma402-abstract': 2.2.3 + tslib: 2.8.1 + '@formatjs/intl-displaynames@6.6.10': dependencies: '@formatjs/ecma402-abstract': 2.2.0 @@ -8123,6 +8448,10 @@ snapshots: dependencies: tslib: 2.8.0 + '@formatjs/intl-localematcher@0.5.7': + dependencies: + tslib: 2.8.1 + '@formatjs/intl@2.10.8(typescript@5.6.3)': dependencies: '@formatjs/ecma402-abstract': 2.2.0 @@ -8142,14 +8471,24 @@ snapshots: '@types/node': 18.19.55 chalk: 4.1.2 json-stable-stringify: 1.1.1 - tslib: 2.8.0 + tslib: 2.8.1 typescript: 5.6.3 - '@humanfs/core@0.19.0': {} - - '@humanfs/node@0.16.5': + '@formatjs/ts-transformer@3.13.22': dependencies: - '@humanfs/core': 0.19.0 + '@formatjs/icu-messageformat-parser': 2.9.3 + '@types/json-stable-stringify': 1.1.0 + '@types/node': 22.9.0 + chalk: 4.1.2 + json-stable-stringify: 1.1.1 + tslib: 2.8.1 + typescript: 5.6.3 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 '@humanwhocodes/retry': 0.3.1 '@humanwhocodes/config-array@0.13.0': @@ -8168,6 +8507,8 @@ snapshots: '@humanwhocodes/retry@0.3.1': {} + '@humanwhocodes/retry@0.4.1': {} + '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.4 @@ -8466,34 +8807,34 @@ snapshots: - vue - webpack-sources - '@nuxt/eslint-config@0.5.7(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@nuxt/eslint-config@0.5.7(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@eslint/js': 9.12.0 - '@nuxt/eslint-plugin': 0.5.7(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - '@stylistic/eslint-plugin': 2.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/eslint-plugin': 8.9.0(@typescript-eslint/parser@8.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/parser': 8.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - eslint: 9.12.0(jiti@2.3.3) - eslint-config-flat-gitignore: 0.3.0(eslint@9.12.0(jiti@2.3.3)) + '@eslint/js': 9.15.0 + '@nuxt/eslint-plugin': 0.5.7(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + '@stylistic/eslint-plugin': 2.10.1(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + '@typescript-eslint/parser': 8.14.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + eslint: 9.15.0(jiti@2.4.0) + eslint-config-flat-gitignore: 0.3.0(eslint@9.15.0(jiti@2.4.0)) eslint-flat-config-utils: 0.4.0 - eslint-plugin-import-x: 4.3.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - eslint-plugin-jsdoc: 50.4.1(eslint@9.12.0(jiti@2.3.3)) - eslint-plugin-regexp: 2.6.0(eslint@9.12.0(jiti@2.3.3)) - eslint-plugin-unicorn: 55.0.0(eslint@9.12.0(jiti@2.3.3)) - eslint-plugin-vue: 9.29.0(eslint@9.12.0(jiti@2.3.3)) - globals: 15.11.0 + eslint-plugin-import-x: 4.4.2(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + eslint-plugin-jsdoc: 50.5.0(eslint@9.15.0(jiti@2.4.0)) + eslint-plugin-regexp: 2.7.0(eslint@9.15.0(jiti@2.4.0)) + eslint-plugin-unicorn: 55.0.0(eslint@9.15.0(jiti@2.4.0)) + eslint-plugin-vue: 9.31.0(eslint@9.15.0(jiti@2.4.0)) + globals: 15.12.0 local-pkg: 0.5.0 pathe: 1.1.2 - vue-eslint-parser: 9.4.3(eslint@9.12.0(jiti@2.3.3)) + vue-eslint-parser: 9.4.3(eslint@9.15.0(jiti@2.4.0)) transitivePeerDependencies: - supports-color - typescript - '@nuxt/eslint-plugin@0.5.7(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@nuxt/eslint-plugin@0.5.7(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 8.9.0 - '@typescript-eslint/utils': 8.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - eslint: 9.12.0(jiti@2.3.3) + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/utils': 8.14.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + eslint: 9.15.0(jiti@2.4.0) transitivePeerDependencies: - supports-color - typescript @@ -8526,6 +8867,34 @@ snapshots: - supports-color - webpack-sources + '@nuxt/kit@3.14.159(magicast@0.3.5)(rollup@4.24.0)': + dependencies: + '@nuxt/schema': 3.14.159(magicast@0.3.5)(rollup@4.24.0) + c12: 2.0.1(magicast@0.3.5) + consola: 3.2.3 + defu: 6.1.4 + destr: 2.0.3 + globby: 14.0.2 + hash-sum: 2.0.0 + ignore: 6.0.2 + jiti: 2.4.0 + klona: 2.0.6 + knitwork: 1.1.0 + mlly: 1.7.3 + pathe: 1.1.2 + pkg-types: 1.2.1 + scule: 1.3.0 + semver: 7.6.3 + ufo: 1.5.4 + unctx: 2.3.1 + unimport: 3.13.2(rollup@4.24.0) + untyped: 1.5.1 + transitivePeerDependencies: + - magicast + - rollup + - supports-color + - webpack-sources + '@nuxt/schema@3.13.2(rollup@4.24.0)': dependencies: compatx: 0.1.8 @@ -8545,10 +8914,30 @@ snapshots: - supports-color - webpack-sources + '@nuxt/schema@3.14.159(magicast@0.3.5)(rollup@4.24.0)': + dependencies: + c12: 2.0.1(magicast@0.3.5) + compatx: 0.1.8 + consola: 3.2.3 + defu: 6.1.4 + hookable: 5.5.3 + pathe: 1.1.2 + pkg-types: 1.2.1 + scule: 1.3.0 + std-env: 3.8.0 + ufo: 1.5.4 + uncrypto: 0.1.3 + unimport: 3.13.2(rollup@4.24.0) + untyped: 1.5.1 + transitivePeerDependencies: + - magicast + - rollup + - supports-color + '@nuxt/telemetry@2.6.0(magicast@0.3.5)(rollup@4.24.0)': dependencies: '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0) - ci-info: 4.0.0 + ci-info: 4.1.0 consola: 3.2.3 create-require: 1.1.1 defu: 6.1.4 @@ -8630,15 +9019,15 @@ snapshots: - vue-tsc - webpack-sources - '@nuxtjs/eslint-config-typescript@12.1.0(eslint-plugin-import-x@4.3.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@nuxtjs/eslint-config-typescript@12.1.0(eslint-plugin-import-x@4.4.2(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@nuxtjs/eslint-config': 12.0.0(@typescript-eslint/parser@6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.12.0(jiti@2.3.3)) - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/parser': 6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - eslint: 9.12.0(jiti@2.3.3) - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import-x@4.3.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.12.0(jiti@2.3.3)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3)) - eslint-plugin-vue: 9.29.0(eslint@9.12.0(jiti@2.3.3)) + '@nuxtjs/eslint-config': 12.0.0(@typescript-eslint/parser@6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.15.0(jiti@2.4.0)) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + '@typescript-eslint/parser': 6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + eslint: 9.15.0(jiti@2.4.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-plugin-import-x@4.4.2(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.15.0(jiti@2.4.0)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.15.0(jiti@2.4.0)) + eslint-plugin-vue: 9.31.0(eslint@9.15.0(jiti@2.4.0)) transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -8646,16 +9035,16 @@ snapshots: - supports-color - typescript - '@nuxtjs/eslint-config@12.0.0(@typescript-eslint/parser@6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.12.0(jiti@2.3.3))': + '@nuxtjs/eslint-config@12.0.0(@typescript-eslint/parser@6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.15.0(jiti@2.4.0))': dependencies: - eslint: 9.12.0(jiti@2.3.3) - eslint-config-standard: 17.1.0(eslint-plugin-import@2.31.0)(eslint-plugin-n@15.7.0(eslint@9.12.0(jiti@2.3.3)))(eslint-plugin-promise@6.6.0(eslint@9.12.0(jiti@2.3.3)))(eslint@9.12.0(jiti@2.3.3)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.12.0(jiti@2.3.3)) - eslint-plugin-n: 15.7.0(eslint@9.12.0(jiti@2.3.3)) - eslint-plugin-node: 11.1.0(eslint@9.12.0(jiti@2.3.3)) - eslint-plugin-promise: 6.6.0(eslint@9.12.0(jiti@2.3.3)) - eslint-plugin-unicorn: 44.0.2(eslint@9.12.0(jiti@2.3.3)) - eslint-plugin-vue: 9.29.0(eslint@9.12.0(jiti@2.3.3)) + eslint: 9.15.0(jiti@2.4.0) + eslint-config-standard: 17.1.0(eslint-plugin-import@2.31.0)(eslint-plugin-n@15.7.0(eslint@9.15.0(jiti@2.4.0)))(eslint-plugin-promise@6.6.0(eslint@9.15.0(jiti@2.4.0)))(eslint@9.15.0(jiti@2.4.0)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.15.0(jiti@2.4.0)) + eslint-plugin-n: 15.7.0(eslint@9.15.0(jiti@2.4.0)) + eslint-plugin-node: 11.1.0(eslint@9.15.0(jiti@2.4.0)) + eslint-plugin-promise: 6.6.0(eslint@9.15.0(jiti@2.4.0)) + eslint-plugin-unicorn: 44.0.2(eslint@9.15.0(jiti@2.4.0)) + eslint-plugin-vue: 9.31.0(eslint@9.15.0(jiti@2.4.0)) local-pkg: 0.4.3 transitivePeerDependencies: - '@typescript-eslint/parser' @@ -8754,6 +9143,19 @@ snapshots: '@parcel/watcher-win32-ia32': 2.4.1 '@parcel/watcher-win32-x64': 2.4.1 + '@pinia/nuxt@0.5.5(magicast@0.3.5)(rollup@4.24.0)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))': + dependencies: + '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.24.0) + pinia: 2.2.6(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - magicast + - rollup + - supports-color + - typescript + - vue + - webpack-sources + '@pkgjs/parseargs@0.11.0': optional: true @@ -8858,6 +9260,14 @@ snapshots: optionalDependencies: rollup: 4.24.0 + '@rollup/pluginutils@5.1.3(rollup@4.24.0)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.24.0 + '@rollup/rollup-android-arm-eabi@4.24.0': optional: true @@ -8992,12 +9402,12 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} - '@stylistic/eslint-plugin@2.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@stylistic/eslint-plugin@2.10.1(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@typescript-eslint/utils': 8.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - eslint: 9.12.0(jiti@2.3.3) - eslint-visitor-keys: 4.1.0 - espree: 10.2.0 + '@typescript-eslint/utils': 8.14.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + eslint: 9.15.0(jiti@2.4.0) + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 estraverse: 5.3.0 picomatch: 4.0.2 transitivePeerDependencies: @@ -9102,12 +9512,21 @@ snapshots: dependencies: '@types/ms': 0.7.34 + '@types/dompurify@3.0.5': + dependencies: + '@types/trusted-types': 2.0.7 + '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.6 '@types/estree@1.0.6': {} + '@types/fs-extra@11.0.4': + dependencies: + '@types/jsonfile': 6.1.4 + '@types/node': 22.9.0 + '@types/fs-extra@9.0.13': dependencies: '@types/node': 18.19.55 @@ -9124,8 +9543,14 @@ snapshots: '@types/json-stable-stringify@1.0.36': {} + '@types/json-stable-stringify@1.1.0': {} + '@types/json5@0.0.29': {} + '@types/jsonfile@6.1.4': + dependencies: + '@types/node': 22.9.0 + '@types/linkify-it@5.0.0': {} '@types/markdown-it@14.1.2': @@ -9157,6 +9582,10 @@ snapshots: dependencies: undici-types: 6.19.8 + '@types/node@22.9.0': + dependencies: + undici-types: 6.19.8 + '@types/normalize-package-data@2.4.4': {} '@types/resolve@1.20.2': {} @@ -9167,100 +9596,106 @@ snapshots: '@types/semver@7.5.8': {} + '@types/trusted-types@2.0.7': {} + '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@types/web-bluetooth@0.0.16': {} + + '@types/web-bluetooth@0.0.20': {} + + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/utils': 6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/type-utils': 6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + '@typescript-eslint/utils': 6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.7 - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.3) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/utils': 7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/type-utils': 7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + '@typescript-eslint/utils': 7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) '@typescript-eslint/visitor-keys': 7.18.0 - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.6.3) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.9.0(@typescript-eslint/parser@8.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 8.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.9.0 - '@typescript-eslint/type-utils': 8.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/utils': 8.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.9.0 - eslint: 9.12.0(jiti@2.3.3) + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.14.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.14.0 + '@typescript-eslint/type-utils': 8.14.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + '@typescript-eslint/utils': 8.14.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.14.0 + eslint: 9.15.0(jiti@2.4.0) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.6.3) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/parser@6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.3) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.7 - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/parser@7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.3.7 - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/parser@8.14.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@typescript-eslint/scope-manager': 8.9.0 - '@typescript-eslint/types': 8.9.0 - '@typescript-eslint/typescript-estree': 8.9.0(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.9.0 + '@typescript-eslint/scope-manager': 8.14.0 + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.14.0 debug: 4.3.7 - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -9276,41 +9711,41 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/scope-manager@8.9.0': + '@typescript-eslint/scope-manager@8.14.0': dependencies: - '@typescript-eslint/types': 8.9.0 - '@typescript-eslint/visitor-keys': 8.9.0 + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/visitor-keys': 8.14.0 - '@typescript-eslint/type-utils@6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/type-utils@6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.3) - '@typescript-eslint/utils': 6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/utils': 6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) debug: 4.3.7 - eslint: 9.12.0(jiti@2.3.3) - ts-api-utils: 1.3.0(typescript@5.6.3) + eslint: 9.15.0(jiti@2.4.0) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/type-utils@7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) - '@typescript-eslint/utils': 7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/utils': 7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) debug: 4.3.7 - eslint: 9.12.0(jiti@2.3.3) - ts-api-utils: 1.3.0(typescript@5.6.3) + eslint: 9.15.0(jiti@2.4.0) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.14.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.9.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.14.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) debug: 4.3.7 - ts-api-utils: 1.3.0(typescript@5.6.3) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -9321,7 +9756,7 @@ snapshots: '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/types@8.9.0': {} + '@typescript-eslint/types@8.14.0': {} '@typescript-eslint/typescript-estree@6.21.0(typescript@5.6.3)': dependencies: @@ -9332,7 +9767,7 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.3) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -9347,59 +9782,59 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.3) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.9.0(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@8.14.0(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 8.9.0 - '@typescript-eslint/visitor-keys': 8.9.0 + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/visitor-keys': 8.14.0 debug: 4.3.7 fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.3) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/utils@6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0(jiti@2.4.0)) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.3) - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/utils@7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0(jiti@2.4.0)) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/utils@8.14.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) - '@typescript-eslint/scope-manager': 8.9.0 - '@typescript-eslint/types': 8.9.0 - '@typescript-eslint/typescript-estree': 8.9.0(typescript@5.6.3) - eslint: 9.12.0(jiti@2.3.3) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0(jiti@2.4.0)) + '@typescript-eslint/scope-manager': 8.14.0 + '@typescript-eslint/types': 8.14.0 + '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3) + eslint: 9.15.0(jiti@2.4.0) transitivePeerDependencies: - supports-color - typescript @@ -9414,9 +9849,9 @@ snapshots: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.9.0': + '@typescript-eslint/visitor-keys@8.14.0': dependencies: - '@typescript-eslint/types': 8.9.0 + '@typescript-eslint/types': 8.14.0 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} @@ -9512,15 +9947,17 @@ snapshots: - webpack - webpack-sources - '@vintl/unplugin@1.5.2(@vue/compiler-core@3.5.12)(vue@3.5.12(typescript@5.6.3))': + '@vintl/unplugin@1.5.2(@vue/compiler-core@3.5.12)(rollup@4.24.0)(vue@3.5.12(typescript@5.6.3))': dependencies: - '@formatjs/cli-lib': 6.4.5(@vue/compiler-core@3.5.12)(vue@3.5.12(typescript@5.6.3)) - '@formatjs/icu-messageformat-parser': 2.7.10 - '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@formatjs/cli-lib': 6.6.3(@vue/compiler-core@3.5.12)(vue@3.5.12(typescript@5.6.3)) + '@formatjs/icu-messageformat-parser': 2.9.3 + '@rollup/pluginutils': 5.1.3(rollup@4.24.0) glob: 10.4.5 import-meta-resolve: 4.1.0 pathe: 1.1.2 - unplugin: 1.14.1 + unplugin: 1.16.0 + optionalDependencies: + rollup: 4.24.0 transitivePeerDependencies: - '@glimmer/env' - '@glimmer/reference' @@ -9531,7 +9968,6 @@ snapshots: - ember-template-recast - ts-jest - vue - - webpack-sources '@vintl/unplugin@2.0.0(@vue/compiler-core@3.5.12)(rollup@4.24.0)(vite@5.4.9(@types/node@20.16.11)(sass@1.79.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))': dependencies: @@ -9583,6 +10019,11 @@ snapshots: vite: 5.4.9(@types/node@20.16.11)(sass@1.79.5)(terser@5.34.1) vue: 3.5.12(typescript@5.6.3) + '@vitejs/plugin-vue@5.1.4(vite@5.4.9(@types/node@22.9.0)(sass@1.79.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))': + dependencies: + vite: 5.4.9(@types/node@22.9.0)(sass@1.79.5)(terser@5.34.1) + vue: 3.5.12(typescript@5.6.3) + '@volar/kit@2.4.6(typescript@5.6.3)': dependencies: '@volar/language-service': 2.4.6 @@ -9739,13 +10180,13 @@ snapshots: dependencies: rfdc: 1.4.1 - '@vue/eslint-config-typescript@13.0.0(eslint-plugin-vue@9.29.0(eslint@9.12.0(jiti@2.3.3)))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)': + '@vue/eslint-config-typescript@13.0.0(eslint-plugin-vue@9.31.0(eslint@9.15.0(jiti@2.4.0)))(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3)': dependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/parser': 7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - eslint: 9.12.0(jiti@2.3.3) - eslint-plugin-vue: 9.29.0(eslint@9.12.0(jiti@2.3.3)) - vue-eslint-parser: 9.4.3(eslint@9.12.0(jiti@2.3.3)) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + '@typescript-eslint/parser': 7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + eslint: 9.15.0(jiti@2.4.0) + eslint-plugin-vue: 9.31.0(eslint@9.15.0(jiti@2.4.0)) + vue-eslint-parser: 9.4.3(eslint@9.15.0(jiti@2.4.0)) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -9790,6 +10231,44 @@ snapshots: '@vue/tsconfig@0.5.1': {} + '@vueuse/core@11.2.0(vue@3.5.12(typescript@5.6.3))': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 11.2.0 + '@vueuse/shared': 11.2.0(vue@3.5.12(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/core@9.13.0(vue@3.5.12(typescript@5.6.3))': + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.13.0 + '@vueuse/shared': 9.13.0(vue@3.5.12(typescript@5.6.3)) + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@11.2.0': {} + + '@vueuse/metadata@9.13.0': {} + + '@vueuse/shared@11.2.0(vue@3.5.12(typescript@5.6.3))': + dependencies: + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/shared@9.13.0(vue@3.5.12(typescript@5.6.3))': + dependencies: + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + '@yr/monotone-cubic-spline@1.0.3': {} abbrev@1.1.1: {} @@ -9798,6 +10277,8 @@ snapshots: dependencies: event-target-shim: 5.0.1 + ace-builds@1.36.5: {} + acorn-import-attributes@1.9.5(acorn@8.12.1): dependencies: acorn: 8.12.1 @@ -9810,10 +10291,16 @@ snapshots: dependencies: acorn: 8.13.0 + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + acorn@8.12.1: {} acorn@8.13.0: {} + acorn@8.14.0: {} + agent-base@6.0.2: dependencies: debug: 4.3.7 @@ -9862,6 +10349,10 @@ snapshots: ansi-styles@6.2.1: {} + ansi-to-html@0.7.2: + dependencies: + entities: 2.2.0 + any-promise@1.3.0: {} anymatch@3.1.3: @@ -9929,7 +10420,7 @@ snapshots: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 is-string: 1.0.7 @@ -9942,7 +10433,7 @@ snapshots: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 @@ -9951,14 +10442,14 @@ snapshots: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-shim-unscopables: 1.0.2 array.prototype.flatmap@1.3.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-shim-unscopables: 1.0.2 arraybuffer.prototype.slice@1.0.3: @@ -9966,7 +10457,7 @@ snapshots: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-errors: 1.3.0 get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 @@ -9984,12 +10475,12 @@ snapshots: astring@1.9.0: {} - astro-expressive-code@0.35.6(astro@4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3)): + astro-expressive-code@0.35.6(astro@4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3)): dependencies: - astro: 4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3) + astro: 4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3) rehype-expressive-code: 0.35.6 - astro@4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3): + astro@4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3): dependencies: '@astrojs/compiler': 2.10.3 '@astrojs/internal-helpers': 0.4.1 @@ -10045,8 +10536,8 @@ snapshots: tsconfck: 3.1.4(typescript@5.6.3) unist-util-visit: 5.0.0 vfile: 6.0.3 - vite: 5.4.9(@types/node@20.16.11)(sass@1.79.5)(terser@5.34.1) - vitefu: 1.0.3(vite@5.4.9(@types/node@20.16.11)(sass@1.79.5)(terser@5.34.1)) + vite: 5.4.9(@types/node@22.9.0)(sass@1.79.5)(terser@5.34.1) + vitefu: 1.0.3(vite@5.4.9(@types/node@22.9.0)(sass@1.79.5)(terser@5.34.1)) which-pm: 3.0.0 xxhash-wasm: 1.0.2 yargs-parser: 21.1.1 @@ -10176,6 +10667,13 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.0) + browserslist@4.24.2: + dependencies: + caniuse-lite: 1.0.30001680 + electron-to-chromium: 1.5.62 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + buffer-crc32@1.0.0: {} buffer-from@1.1.2: {} @@ -10217,6 +10715,23 @@ snapshots: optionalDependencies: magicast: 0.3.5 + c12@2.0.1(magicast@0.3.5): + dependencies: + chokidar: 4.0.1 + confbox: 0.1.8 + defu: 6.1.4 + dotenv: 16.4.5 + giget: 1.2.3 + jiti: 2.4.0 + mlly: 1.7.3 + ohash: 1.1.4 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.2.1 + rc9: 2.1.2 + optionalDependencies: + magicast: 0.3.5 + cac@6.7.14: {} call-bind@1.0.7: @@ -10237,13 +10752,15 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.24.0 - caniuse-lite: 1.0.30001668 + browserslist: 4.24.2 + caniuse-lite: 1.0.30001680 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 caniuse-lite@1.0.30001668: {} + caniuse-lite@1.0.30001680: {} + ccount@2.0.1: {} chalk@2.4.2: @@ -10291,6 +10808,8 @@ snapshots: ci-info@4.0.0: {} + ci-info@4.1.0: {} + citty@0.1.6: dependencies: consola: 3.2.3 @@ -10357,6 +10876,8 @@ snapshots: comma-separated-tokens@2.0.3: {} + commander@12.1.0: {} + commander@2.20.3: {} commander@4.1.1: {} @@ -10401,9 +10922,9 @@ snapshots: dependencies: is-what: 4.1.16 - core-js-compat@3.38.1: + core-js-compat@3.39.0: dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 core-util-is@1.0.3: {} @@ -10428,6 +10949,12 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + cross-spawn@7.0.5: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + crossws@0.2.4: {} crossws@0.3.1: @@ -10466,7 +10993,7 @@ snapshots: cssnano-preset-default@7.0.6(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 css-declaration-sorter: 7.2.0(postcss@8.4.47) cssnano-utils: 5.0.0(postcss@8.4.47) postcss: 8.4.47 @@ -10542,6 +11069,8 @@ snapshots: de-indent@1.0.2: {} + debounce@1.2.1: {} + debug@2.6.9: dependencies: ms: 2.0.0 @@ -10653,6 +11182,8 @@ snapshots: dependencies: domelementtype: 2.3.0 + dompurify@3.2.0: {} + domutils@3.1.0: dependencies: dom-serializer: 2.0.0 @@ -10677,6 +11208,8 @@ snapshots: electron-to-chromium@1.5.38: {} + electron-to-chromium@1.5.62: {} + emmet@2.4.11: dependencies: '@emmetio/abbreviation': 2.3.3 @@ -10701,6 +11234,8 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.1 + entities@2.2.0: {} + entities@3.0.1: {} entities@4.5.0: {} @@ -10713,7 +11248,7 @@ snapshots: errx@0.1.0: {} - es-abstract@1.23.3: + es-abstract@1.23.5: dependencies: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 @@ -10746,7 +11281,7 @@ snapshots: is-string: 1.0.7 is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.2 + object-inspect: 1.13.3 object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.3 @@ -10893,27 +11428,27 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-flat-gitignore@0.3.0(eslint@9.12.0(jiti@2.3.3)): + eslint-config-flat-gitignore@0.3.0(eslint@9.15.0(jiti@2.4.0)): dependencies: - '@eslint/compat': 1.2.0(eslint@9.12.0(jiti@2.3.3)) - eslint: 9.12.0(jiti@2.3.3) + '@eslint/compat': 1.2.3(eslint@9.15.0(jiti@2.4.0)) + eslint: 9.15.0(jiti@2.4.0) find-up-simple: 1.0.0 - eslint-config-prettier@9.1.0(eslint@9.12.0(jiti@2.3.3)): + eslint-config-prettier@9.1.0(eslint@9.15.0(jiti@2.4.0)): dependencies: - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) - eslint-config-standard@17.1.0(eslint-plugin-import@2.31.0)(eslint-plugin-n@15.7.0(eslint@9.12.0(jiti@2.3.3)))(eslint-plugin-promise@6.6.0(eslint@9.12.0(jiti@2.3.3)))(eslint@9.12.0(jiti@2.3.3)): + eslint-config-standard@17.1.0(eslint-plugin-import@2.31.0)(eslint-plugin-n@15.7.0(eslint@9.15.0(jiti@2.4.0)))(eslint-plugin-promise@6.6.0(eslint@9.15.0(jiti@2.4.0)))(eslint@9.15.0(jiti@2.4.0)): dependencies: - eslint: 9.12.0(jiti@2.3.3) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3)) - eslint-plugin-n: 15.7.0(eslint@9.12.0(jiti@2.3.3)) - eslint-plugin-promise: 6.6.0(eslint@9.12.0(jiti@2.3.3)) + eslint: 9.15.0(jiti@2.4.0) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.15.0(jiti@2.4.0)) + eslint-plugin-n: 15.7.0(eslint@9.15.0(jiti@2.4.0)) + eslint-plugin-promise: 6.6.0(eslint@9.15.0(jiti@2.4.0)) - eslint-config-turbo@2.1.3(eslint@9.12.0(jiti@2.3.3)): + eslint-config-turbo@2.3.0(eslint@9.15.0(jiti@2.4.0)): dependencies: - eslint: 9.12.0(jiti@2.3.3) - eslint-plugin-turbo: 2.1.3(eslint@9.12.0(jiti@2.3.3)) + eslint: 9.15.0(jiti@2.4.0) + eslint-plugin-turbo: 2.3.0(eslint@9.15.0(jiti@2.4.0)) eslint-flat-config-utils@0.4.0: dependencies: @@ -10927,77 +11462,76 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import-x@4.3.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.12.0(jiti@2.3.3)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-plugin-import-x@4.4.2(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.15.0(jiti@2.4.0)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.7 enhanced-resolve: 5.17.1 - eslint: 9.12.0(jiti@2.3.3) - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.12.0(jiti@2.3.3)) + eslint: 9.15.0(jiti@2.4.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.15.0(jiti@2.4.0)) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3)) - eslint-plugin-import-x: 4.3.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.15.0(jiti@2.4.0)) + eslint-plugin-import-x: 4.4.2(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.12.0(jiti@2.3.3)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.15.0(jiti@2.4.0)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - eslint: 9.12.0(jiti@2.3.3) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import-x@4.3.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.12.0(jiti@2.3.3)) + '@typescript-eslint/parser': 6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + eslint: 9.15.0(jiti@2.4.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-plugin-import-x@4.4.2(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-plugin-import@2.31.0)(eslint@9.15.0(jiti@2.4.0)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@2.3.3)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.15.0(jiti@2.4.0)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) - eslint: 9.12.0(jiti@2.3.3) + '@typescript-eslint/parser': 7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) + eslint: 9.15.0(jiti@2.4.0) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-es@3.0.1(eslint@9.12.0(jiti@2.3.3)): + eslint-plugin-es@3.0.1(eslint@9.15.0(jiti@2.4.0)): dependencies: - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-es@4.1.0(eslint@9.12.0(jiti@2.3.3)): + eslint-plugin-es@4.1.0(eslint@9.15.0(jiti@2.4.0)): dependencies: - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-import-x@4.3.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3): + eslint-plugin-import-x@4.4.2(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3): dependencies: - '@typescript-eslint/utils': 8.9.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/utils': 8.14.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) debug: 4.3.7 doctrine: 3.0.0 - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) eslint-import-resolver-node: 0.3.9 get-tsconfig: 4.8.1 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 stable-hash: 0.0.4 - tslib: 2.8.0 + tslib: 2.8.1 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.12.0(jiti@2.3.3)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@9.15.0(jiti@2.4.0)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -11006,9 +11540,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@2.3.3)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.15.0(jiti@2.4.0)) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -11020,13 +11554,13 @@ snapshots: string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/parser': 6.21.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.12.0(jiti@2.3.3)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint@9.15.0(jiti@2.4.0)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -11035,9 +11569,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0(jiti@2.3.3)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.15.0(jiti@2.4.0)) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -11049,21 +11583,21 @@ snapshots: string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/parser': 7.18.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsdoc@50.4.1(eslint@9.12.0(jiti@2.3.3)): + eslint-plugin-jsdoc@50.5.0(eslint@9.15.0(jiti@2.4.0)): dependencies: '@es-joy/jsdoccomment': 0.49.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.3.7 escape-string-regexp: 4.0.0 - eslint: 9.12.0(jiti@2.3.3) - espree: 10.2.0 + eslint: 9.15.0(jiti@2.4.0) + espree: 10.3.0 esquery: 1.6.0 parse-imports: 2.2.1 semver: 7.6.3 @@ -11072,64 +11606,64 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-n@15.7.0(eslint@9.12.0(jiti@2.3.3)): + eslint-plugin-n@15.7.0(eslint@9.15.0(jiti@2.4.0)): dependencies: builtins: 5.1.0 - eslint: 9.12.0(jiti@2.3.3) - eslint-plugin-es: 4.1.0(eslint@9.12.0(jiti@2.3.3)) - eslint-utils: 3.0.0(eslint@9.12.0(jiti@2.3.3)) + eslint: 9.15.0(jiti@2.4.0) + eslint-plugin-es: 4.1.0(eslint@9.15.0(jiti@2.4.0)) + eslint-utils: 3.0.0(eslint@9.15.0(jiti@2.4.0)) ignore: 5.3.2 is-core-module: 2.15.1 minimatch: 3.1.2 resolve: 1.22.8 semver: 7.6.3 - eslint-plugin-node@11.1.0(eslint@9.12.0(jiti@2.3.3)): + eslint-plugin-node@11.1.0(eslint@9.15.0(jiti@2.4.0)): dependencies: - eslint: 9.12.0(jiti@2.3.3) - eslint-plugin-es: 3.0.1(eslint@9.12.0(jiti@2.3.3)) + eslint: 9.15.0(jiti@2.4.0) + eslint-plugin-es: 3.0.1(eslint@9.15.0(jiti@2.4.0)) eslint-utils: 2.1.0 ignore: 5.3.2 minimatch: 3.1.2 resolve: 1.22.8 semver: 6.3.1 - eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.12.0(jiti@2.3.3)))(eslint@9.12.0(jiti@2.3.3))(prettier@3.3.3): + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.15.0(jiti@2.4.0)))(eslint@9.15.0(jiti@2.4.0))(prettier@3.3.3): dependencies: - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) prettier: 3.3.3 prettier-linter-helpers: 1.0.0 synckit: 0.9.2 optionalDependencies: - eslint-config-prettier: 9.1.0(eslint@9.12.0(jiti@2.3.3)) + eslint-config-prettier: 9.1.0(eslint@9.15.0(jiti@2.4.0)) - eslint-plugin-promise@6.6.0(eslint@9.12.0(jiti@2.3.3)): + eslint-plugin-promise@6.6.0(eslint@9.15.0(jiti@2.4.0)): dependencies: - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) - eslint-plugin-regexp@2.6.0(eslint@9.12.0(jiti@2.3.3)): + eslint-plugin-regexp@2.7.0(eslint@9.15.0(jiti@2.4.0)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) - '@eslint-community/regexpp': 4.11.1 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0(jiti@2.4.0)) + '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) jsdoc-type-pratt-parser: 4.1.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-turbo@2.1.3(eslint@9.12.0(jiti@2.3.3)): + eslint-plugin-turbo@2.3.0(eslint@9.15.0(jiti@2.4.0)): dependencies: dotenv: 16.0.3 - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) - eslint-plugin-unicorn@44.0.2(eslint@9.12.0(jiti@2.3.3)): + eslint-plugin-unicorn@44.0.2(eslint@9.15.0(jiti@2.4.0)): dependencies: - '@babel/helper-validator-identifier': 7.25.7 + '@babel/helper-validator-identifier': 7.25.9 ci-info: 3.9.0 clean-regexp: 1.0.0 - eslint: 9.12.0(jiti@2.3.3) - eslint-utils: 3.0.0(eslint@9.12.0(jiti@2.3.3)) + eslint: 9.15.0(jiti@2.4.0) + eslint-utils: 3.0.0(eslint@9.15.0(jiti@2.4.0)) esquery: 1.6.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -11141,15 +11675,15 @@ snapshots: semver: 7.6.3 strip-indent: 3.0.0 - eslint-plugin-unicorn@54.0.0(eslint@9.12.0(jiti@2.3.3)): + eslint-plugin-unicorn@54.0.0(eslint@9.15.0(jiti@2.4.0)): dependencies: - '@babel/helper-validator-identifier': 7.25.7 - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) - '@eslint/eslintrc': 3.1.0 - ci-info: 4.0.0 + '@babel/helper-validator-identifier': 7.25.9 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0(jiti@2.4.0)) + '@eslint/eslintrc': 3.2.0 + ci-info: 4.1.0 clean-regexp: 1.0.0 - core-js-compat: 3.38.1 - eslint: 9.12.0(jiti@2.3.3) + core-js-compat: 3.39.0 + eslint: 9.15.0(jiti@2.4.0) esquery: 1.6.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -11163,16 +11697,16 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-unicorn@55.0.0(eslint@9.12.0(jiti@2.3.3)): + eslint-plugin-unicorn@55.0.0(eslint@9.15.0(jiti@2.4.0)): dependencies: - '@babel/helper-validator-identifier': 7.25.7 - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) - ci-info: 4.0.0 + '@babel/helper-validator-identifier': 7.25.9 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0(jiti@2.4.0)) + ci-info: 4.1.0 clean-regexp: 1.0.0 - core-js-compat: 3.38.1 - eslint: 9.12.0(jiti@2.3.3) + core-js-compat: 3.39.0 + eslint: 9.15.0(jiti@2.4.0) esquery: 1.6.0 - globals: 15.11.0 + globals: 15.12.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 jsesc: 3.0.2 @@ -11183,16 +11717,16 @@ snapshots: semver: 7.6.3 strip-indent: 3.0.0 - eslint-plugin-vue@9.29.0(eslint@9.12.0(jiti@2.3.3)): + eslint-plugin-vue@9.31.0(eslint@9.15.0(jiti@2.4.0)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) - eslint: 9.12.0(jiti@2.3.3) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0(jiti@2.4.0)) + eslint: 9.15.0(jiti@2.4.0) globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.6.3 - vue-eslint-parser: 9.4.3(eslint@9.12.0(jiti@2.3.3)) + vue-eslint-parser: 9.4.3(eslint@9.15.0(jiti@2.4.0)) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -11202,7 +11736,7 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-scope@8.1.0: + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -11211,9 +11745,9 @@ snapshots: dependencies: eslint-visitor-keys: 1.3.0 - eslint-utils@3.0.0(eslint@9.12.0(jiti@2.3.3)): + eslint-utils@3.0.0(eslint@9.15.0(jiti@2.4.0)): dependencies: - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) eslint-visitor-keys: 2.1.0 eslint-visitor-keys@1.3.0: {} @@ -11222,7 +11756,7 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.1.0: {} + eslint-visitor-keys@4.2.0: {} eslint@8.57.1: dependencies: @@ -11267,28 +11801,28 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@9.12.0(jiti@2.3.3): + eslint@9.15.0(jiti@2.4.0): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3)) - '@eslint-community/regexpp': 4.11.1 - '@eslint/config-array': 0.18.0 - '@eslint/core': 0.6.0 - '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.12.0 - '@eslint/plugin-kit': 0.2.0 - '@humanfs/node': 0.16.5 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0(jiti@2.4.0)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.0 + '@eslint/core': 0.9.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.15.0 + '@eslint/plugin-kit': 0.2.3 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/retry': 0.4.1 '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 + cross-spawn: 7.0.5 debug: 4.3.7 escape-string-regexp: 4.0.0 - eslint-scope: 8.1.0 - eslint-visitor-keys: 4.1.0 - espree: 10.2.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -11303,17 +11837,16 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - text-table: 0.2.0 optionalDependencies: - jiti: 2.3.3 + jiti: 2.4.0 transitivePeerDependencies: - supports-color - espree@10.2.0: + espree@10.3.0: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 4.1.0 + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 espree@9.6.1: dependencies: @@ -11392,7 +11925,7 @@ snapshots: execa@8.0.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.5 get-stream: 8.0.1 human-signals: 5.0.0 is-stream: 3.0.0 @@ -11508,21 +12041,21 @@ snapshots: vue: 3.5.12(typescript@5.6.3) vue-resize: 2.0.0-alpha.1(vue@3.5.12(typescript@5.6.3)) - floating-vue@2.0.0-beta.24(@nuxt/kit@3.13.2(magicast@0.3.5))(vue@3.5.12(typescript@5.6.3)): + floating-vue@2.0.0-beta.24(@nuxt/kit@3.14.159(magicast@0.3.5)(rollup@4.24.0))(vue@3.5.12(typescript@5.6.3)): dependencies: '@floating-ui/dom': 1.1.1 vue: 3.5.12(typescript@5.6.3) vue-resize: 2.0.0-alpha.1(vue@3.5.12(typescript@5.6.3)) optionalDependencies: - '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0) + '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.24.0) - floating-vue@5.2.2(@nuxt/kit@3.13.2(magicast@0.3.5))(vue@3.5.12(typescript@5.6.3)): + floating-vue@5.2.2(@nuxt/kit@3.14.159(magicast@0.3.5)(rollup@4.24.0))(vue@3.5.12(typescript@5.6.3)): dependencies: '@floating-ui/dom': 1.1.1 vue: 3.5.12(typescript@5.6.3) vue-resize: 2.0.0-alpha.1(vue@3.5.12(typescript@5.6.3)) optionalDependencies: - '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0) + '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.24.0) for-each@0.3.3: dependencies: @@ -11566,7 +12099,7 @@ snapshots: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 functions-have-names: 1.2.3 functions-have-names@1.2.3: {} @@ -11687,7 +12220,7 @@ snapshots: globals@14.0.0: {} - globals@15.11.0: {} + globals@15.12.0: {} globalthis@1.0.4: dependencies: @@ -12014,6 +12547,8 @@ snapshots: ignore@5.3.2: {} + ignore@6.0.2: {} + image-meta@0.2.1: {} immediate@3.0.6: {} @@ -12255,6 +12790,8 @@ snapshots: jiti@2.3.3: {} + jiti@2.4.0: {} + js-tokens@4.0.0: {} js-tokens@9.0.0: {} @@ -12407,7 +12944,7 @@ snapshots: local-pkg@0.5.0: dependencies: - mlly: 1.7.2 + mlly: 1.7.3 pkg-types: 1.2.1 locate-path@5.0.0: @@ -13021,6 +13558,13 @@ snapshots: pkg-types: 1.2.1 ufo: 1.5.4 + mlly@1.7.3: + dependencies: + acorn: 8.14.0 + pathe: 1.1.2 + pkg-types: 1.2.1 + ufo: 1.5.4 + mri@1.2.0: {} mrmime@2.0.0: {} @@ -13325,7 +13869,7 @@ snapshots: object-hash@3.0.0: {} - object-inspect@1.13.2: {} + object-inspect@1.13.3: {} object-keys@1.1.1: {} @@ -13340,14 +13884,14 @@ snapshots: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-object-atoms: 1.0.0 object.groupby@1.0.3: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 object.values@1.2.0: dependencies: @@ -13498,7 +14042,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.25.7 + '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -13571,6 +14115,14 @@ snapshots: optionalDependencies: typescript: 5.6.3 + pinia@2.2.6(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.12(typescript@5.6.3) + vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3)) + optionalDependencies: + typescript: 5.6.3 + pirates@4.0.6: {} pkg-dir@4.2.0: @@ -13595,7 +14147,7 @@ snapshots: postcss-colormin@7.0.2(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.47 @@ -13603,7 +14155,7 @@ snapshots: postcss-convert-values@7.0.4(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 postcss: 8.4.47 postcss-value-parser: 4.2.0 @@ -13651,7 +14203,7 @@ snapshots: postcss-merge-rules@7.0.4(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 caniuse-api: 3.0.0 cssnano-utils: 5.0.0(postcss@8.4.47) postcss: 8.4.47 @@ -13671,7 +14223,7 @@ snapshots: postcss-minify-params@7.0.2(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 cssnano-utils: 5.0.0(postcss@8.4.47) postcss: 8.4.47 postcss-value-parser: 4.2.0 @@ -13718,7 +14270,7 @@ snapshots: postcss-normalize-unicode@7.0.2(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 postcss: 8.4.47 postcss-value-parser: 4.2.0 @@ -13740,7 +14292,7 @@ snapshots: postcss-reduce-initial@7.0.2(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 caniuse-api: 3.0.0 postcss: 8.4.47 @@ -13960,7 +14512,7 @@ snapshots: refa@0.12.1: dependencies: - '@eslint-community/regexpp': 4.11.1 + '@eslint-community/regexpp': 4.12.1 regenerator-runtime@0.14.1: {} @@ -13968,7 +14520,7 @@ snapshots: regexp-ast-analysis@0.7.1: dependencies: - '@eslint-community/regexpp': 4.11.1 + '@eslint-community/regexpp': 4.12.1 refa: 0.12.1 regexp-tree@0.1.27: {} @@ -14093,6 +14645,8 @@ snapshots: require-from-string@2.0.2: {} + resize-observer-polyfill@1.5.1: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -14212,7 +14766,7 @@ snapshots: scslre@0.3.0: dependencies: - '@eslint-community/regexpp': 4.11.1 + '@eslint-community/regexpp': 4.12.1 refa: 0.12.1 regexp-ast-analysis: 0.7.1 @@ -14346,7 +14900,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.2 + object-inspect: 1.13.3 signal-exit@3.0.7: {} @@ -14435,12 +14989,12 @@ snapshots: standard-as-callback@2.1.0: {} - starlight-openapi@0.7.0(@astrojs/markdown-remark@5.3.0)(@astrojs/starlight@0.26.4(astro@4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3)))(astro@4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3))(openapi-types@12.1.3): + starlight-openapi@0.7.0(@astrojs/markdown-remark@5.3.0)(@astrojs/starlight@0.26.4(astro@4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3)))(astro@4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3))(openapi-types@12.1.3): dependencies: '@astrojs/markdown-remark': 5.3.0 - '@astrojs/starlight': 0.26.4(astro@4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3)) + '@astrojs/starlight': 0.26.4(astro@4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3)) '@readme/openapi-parser': 2.5.0(openapi-types@12.1.3) - astro: 4.16.6(@types/node@20.16.11)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3) + astro: 4.16.6(@types/node@22.9.0)(rollup@4.24.0)(sass@1.79.5)(terser@5.34.1)(typescript@5.6.3) github-slugger: 2.0.0 transitivePeerDependencies: - openapi-types @@ -14449,6 +15003,8 @@ snapshots: std-env@3.7.0: {} + std-env@3.8.0: {} + stdin-discarder@0.2.2: {} stream-replace-string@2.0.0: {} @@ -14483,7 +15039,7 @@ snapshots: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-object-atoms: 1.0.0 string.prototype.trimend@1.0.8: @@ -14549,7 +15105,7 @@ snapshots: stylehacks@7.0.4(postcss@8.4.47): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 postcss: 8.4.47 postcss-selector-parser: 6.1.2 @@ -14625,7 +15181,7 @@ snapshots: synckit@0.9.2: dependencies: '@pkgr/core': 0.1.1 - tslib: 2.8.0 + tslib: 2.8.1 system-architecture@0.1.0: {} @@ -14745,7 +15301,7 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.3.0(typescript@5.6.3): + ts-api-utils@1.4.0(typescript@5.6.3): dependencies: typescript: 5.6.3 @@ -14764,36 +15320,38 @@ snapshots: tslib@2.8.0: {} + tslib@2.8.1: {} + tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 - turbo-darwin-64@2.2.1: + turbo-darwin-64@2.2.3: optional: true - turbo-darwin-arm64@2.2.1: + turbo-darwin-arm64@2.2.3: optional: true - turbo-linux-64@2.2.1: + turbo-linux-64@2.2.3: optional: true - turbo-linux-arm64@2.2.1: + turbo-linux-arm64@2.2.3: optional: true - turbo-windows-64@2.2.1: + turbo-windows-64@2.2.3: optional: true - turbo-windows-arm64@2.2.1: + turbo-windows-arm64@2.2.3: optional: true - turbo@2.2.1: + turbo@2.2.3: optionalDependencies: - turbo-darwin-64: 2.2.1 - turbo-darwin-arm64: 2.2.1 - turbo-linux-64: 2.2.1 - turbo-linux-arm64: 2.2.1 - turbo-windows-64: 2.2.1 - turbo-windows-arm64: 2.2.1 + turbo-darwin-64: 2.2.3 + turbo-darwin-arm64: 2.2.3 + turbo-linux-64: 2.2.3 + turbo-linux-arm64: 2.2.3 + turbo-windows-64: 2.2.3 + turbo-windows-arm64: 2.2.3 type-check@0.4.0: dependencies: @@ -14931,6 +15489,24 @@ snapshots: - rollup - webpack-sources + unimport@3.13.2(rollup@4.24.0): + dependencies: + '@rollup/pluginutils': 5.1.3(rollup@4.24.0) + acorn: 8.14.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + fast-glob: 3.3.2 + local-pkg: 0.5.0 + magic-string: 0.30.12 + mlly: 1.7.3 + pathe: 1.1.2 + pkg-types: 1.2.1 + scule: 1.3.0 + strip-literal: 2.1.0 + unplugin: 1.16.0 + transitivePeerDependencies: + - rollup + unist-util-find-after@5.0.0: dependencies: '@types/unist': 3.0.3 @@ -15007,6 +15583,11 @@ snapshots: acorn: 8.12.1 webpack-virtual-modules: 0.6.2 + unplugin@1.16.0: + dependencies: + acorn: 8.14.0 + webpack-virtual-modules: 0.6.2 + unstorage@1.12.0(ioredis@5.4.1): dependencies: anymatch: 3.1.3 @@ -15059,6 +15640,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.0 + update-browserslist-db@1.1.1(browserslist@4.24.2): + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.0 + uqr@0.1.2: {} uri-js@4.4.1: @@ -15182,9 +15769,20 @@ snapshots: sass: 1.79.5 terser: 5.34.1 - vitefu@1.0.3(vite@5.4.9(@types/node@20.16.11)(sass@1.79.5)(terser@5.34.1)): + vite@5.4.9(@types/node@22.9.0)(sass@1.79.5)(terser@5.34.1): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.24.0 optionalDependencies: - vite: 5.4.9(@types/node@20.16.11)(sass@1.79.5)(terser@5.34.1) + '@types/node': 22.9.0 + fsevents: 2.3.3 + sass: 1.79.5 + terser: 5.34.1 + + vitefu@1.0.3(vite@5.4.9(@types/node@22.9.0)(sass@1.79.5)(terser@5.34.1)): + optionalDependencies: + vite: 5.4.9(@types/node@22.9.0)(sass@1.79.5)(terser@5.34.1) volar-service-css@0.0.61(@volar/language-service@2.4.6): dependencies: @@ -15314,10 +15912,10 @@ snapshots: vue-devtools-stub@0.1.0: {} - vue-eslint-parser@9.4.3(eslint@9.12.0(jiti@2.3.3)): + vue-eslint-parser@9.4.3(eslint@9.15.0(jiti@2.4.0)): dependencies: debug: 4.3.7 - eslint: 9.12.0(jiti@2.3.3) + eslint: 9.15.0(jiti@2.4.0) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 @@ -15329,6 +15927,8 @@ snapshots: vue-multiselect@3.0.0: {} + vue-multiselect@3.0.0-alpha.2: {} + vue-observe-visibility@2.0.0-alpha.1(vue@3.5.12(typescript@5.6.3)): dependencies: vue: 3.5.12(typescript@5.6.3) @@ -15358,6 +15958,14 @@ snapshots: semver: 7.6.3 typescript: 5.6.3 + vue-typed-virtual-list@1.0.10(vue@3.5.12(typescript@5.6.3)): + dependencies: + '@vueuse/core': 9.13.0(vue@3.5.12(typescript@5.6.3)) + debounce: 1.2.1 + vue: 3.5.12(typescript@5.6.3) + transitivePeerDependencies: + - '@vue/composition-api' + vue-virtual-scroller@2.0.0-beta.8(vue@3.5.12(typescript@5.6.3)): dependencies: mitt: 2.1.0 @@ -15365,6 +15973,12 @@ snapshots: vue-observe-visibility: 2.0.0-alpha.1(vue@3.5.12(typescript@5.6.3)) vue-resize: 2.0.0-alpha.1(vue@3.5.12(typescript@5.6.3)) + vue3-ace-editor@2.2.4(ace-builds@1.36.5)(vue@3.5.12(typescript@5.6.3)): + dependencies: + ace-builds: 1.36.5 + resize-observer-polyfill: 1.5.1 + vue: 3.5.12(typescript@5.6.3) + vue3-apexcharts@1.7.0(apexcharts@3.54.1)(vue@3.5.12(typescript@5.6.3)): dependencies: apexcharts: 3.54.1 diff --git a/turbo.json b/turbo.json index 73dd66fc0..71cd9ce3b 100644 --- a/turbo.json +++ b/turbo.json @@ -16,13 +16,15 @@ "CF_PAGES_*", "HEROKU_APP_NAME", "STRIPE_PUBLISHABLE_KEY", + "PYRO_BASE_URL", + "PROD_OVERRIDE", + "PYRO_MASTER_KEY", + "PORT", "SQLX_OFFLINE" ] }, "lint": { - "env": [ - "SQLX_OFFLINE" - ] + "env": ["SQLX_OFFLINE"] }, "dev": { "cache": false, @@ -31,10 +33,7 @@ "env": ["DISPLAY", "WEBKIT_DISABLE_DMABUF_RENDERER"] }, "test": { - "env": [ - "SQLX_OFFLINE", - "DATABASE_URL" - ] + "env": ["SQLX_OFFLINE", "DATABASE_URL"] }, "fix": { "cache": false
+ Automatically create a backup of your server every + {{ autoBackupInterval == 1 ? "hour" : `${autoBackupInterval} hours` }} +
+ The amount of hours between each backup. This will only backup your server if it has + been modified since the last backup. +
+ {{ message }} +
Invalid or empty image file.
+ {{ data.loader_version }} +
Are you sure you want to {{ currentPendingAction }} the server?
+ Loading... +
It'll appear here once it's ready.
Modrinth Servers is a new way to play modded Minecraft with your friends.
No results found for your query!
+ Modrinth Servers use 2023 Ryzen 7 and Ryzen 9 CPUs at 4+ GHz, paired with DDR5 + memory. +
+ Yes. All Modrinth Servers come with DDoS protection. Protection is powered by a + combination of in-house network filtering by Pyro as well as with our data center + provider. Your server is safe on Modrinth. +
+ Currently, Modrinth Servers are located in New York, Los Angeles, and Miami. More + regions are coming soon! Your server's location is currently chosen algorithmically, + but you will be able to choose a region in the future. +
+ Yes, storage can be increased on your server at no additional cost. If you need more + storage, reach out to Modrinth Support. +
+ During the Modrinth "Emergency SMP" test, we had over 80 players on a server running + on the Large plan. The server ran smoothly and was only limited by RAM. We're + confident that Modrinth Servers can handle a large number of players, with any kind + of modpack. +
+ Perfect for vanilla multiplayer, small friend groups, SMPs, and light modding. +
4 GB RAM
32 GB Storage
2 vCPUs
Great for modded multiplayer and small communities.
6 GB RAM
48 GB Storage
3 vCPUs
Ideal for larger communities, modpacks, and heavy modding.
8 GB RAM
64 GB Storage
4 vCPUs
Starting at $3/GB RAM
+ You don't have permission to view this server or it no longer exists. If you believe + this is an error, please contact Modrinth support. +
+ Something went wrong, and we couldn't connect to your server. This is likely due to a + temporary network issue. You'll be reconnected automatically. +
No mods found!
Add some mods to your server to manage them here.
There are no files or folders.
Drop files here to upload
+ An error occurred while attempting to connect to your server. Please try refreshing the page. + (WebSocket Authentication Failed) +
+ An error occurred while attempting to connect to your server. Please try refreshing the page. + (No further information) +
You can manage your server's billing from Settings > Billing and subscriptions.
+ {{ + isSecondPhase + ? "This will reinstall your server and erase all data. You may want to back up your server before proceeding. Are you sure you want to continue?" + : "Choose the version of Minecraft you want to use for this server." + }} +
Mod loaders allow you to run mods on your server.
Preferences apply per server and changes are only saved in your browser.
+ The server properties file has not been generated yet. Start up your server to generate it. +
No servers found.
{{ formatMessage(messages.subscriptionDescription) }}
+ A linked server couldn't be found with this subscription. It may have been deleted + or suspended. Please contact Modrinth support with the following information: +