Compare commits

..

1 commit

Author SHA1 Message Date
3aa455b43c
fix (backend): undefined reference to ApiError 2024-02-28 00:05:50 +09:00
92 changed files with 1211 additions and 1332 deletions

175
Cargo.lock generated
View file

@ -30,9 +30,9 @@ dependencies = [
[[package]] [[package]]
name = "ahash" name = "ahash"
version = "0.8.10" version = "0.8.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b79b82693f705137f8fb9b37871d99e4f9a7df12b917eed79c3d3954830a60b" checksum = "42cd52102d3df161c77a887b608d7a4897d7cc112886a9537b738a887a03aaff"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"getrandom", "getrandom",
@ -80,9 +80,9 @@ dependencies = [
[[package]] [[package]]
name = "anstream" name = "anstream"
version = "0.6.13" version = "0.6.12"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" checksum = "96b09b5178381e0874812a9b157f7fe84982617e48f71f4e3235482775e5b540"
dependencies = [ dependencies = [
"anstyle", "anstyle",
"anstyle-parse", "anstyle-parse",
@ -169,7 +169,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
@ -180,7 +180,7 @@ checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
@ -387,15 +387,15 @@ dependencies = [
"proc-macro-crate", "proc-macro-crate",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
"syn_derive", "syn_derive",
] ]
[[package]] [[package]]
name = "bumpalo" name = "bumpalo"
version = "3.15.3" version = "3.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" checksum = "d32a994c2b3ca201d9b263612a374263f05e7adde37c4707f693dcd375076d1f"
[[package]] [[package]]
name = "bytecheck" name = "bytecheck"
@ -439,9 +439,12 @@ checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
[[package]] [[package]]
name = "cc" name = "cc"
version = "1.0.88" version = "1.0.83"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02f341c093d19155a6e41631ce5971aac4e9a868262212153124c15fa22d1cdc" checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
dependencies = [
"libc",
]
[[package]] [[package]]
name = "cfg-if" name = "cfg-if"
@ -467,7 +470,7 @@ dependencies = [
"num-traits", "num-traits",
"serde", "serde",
"wasm-bindgen", "wasm-bindgen",
"windows-targets 0.52.3", "windows-targets 0.52.0",
] ]
[[package]] [[package]]
@ -511,7 +514,7 @@ dependencies = [
"heck", "heck",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
@ -608,12 +611,12 @@ dependencies = [
[[package]] [[package]]
name = "ctor" name = "ctor"
version = "0.2.7" version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad291aa74992b9b7a7e88c38acbbf6ad7e107f1d90ee8775b7bc1fc3394f485c" checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e"
dependencies = [ dependencies = [
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
@ -692,9 +695,9 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
[[package]] [[package]]
name = "dyn-clone" name = "dyn-clone"
version = "1.0.17" version = "1.0.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d"
[[package]] [[package]]
name = "either" name = "either"
@ -961,7 +964,7 @@ version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
dependencies = [ dependencies = [
"ahash 0.8.10", "ahash 0.8.8",
"allocator-api2", "allocator-api2",
] ]
@ -985,9 +988,9 @@ dependencies = [
[[package]] [[package]]
name = "hermit-abi" name = "hermit-abi"
version = "0.3.8" version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "379dada1584ad501b383485dd706b8afb7a70fcbc7f4da7d780638a5a6124a60" checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd"
[[package]] [[package]]
name = "hex" name = "hex"
@ -1131,7 +1134,7 @@ checksum = "0122b7114117e64a63ac49f752a5ca4624d534c7b1c7de796ac196381cd2d947"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
@ -1188,7 +1191,7 @@ version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a071f4f7efc9a9118dfb627a0a94ef247986e1ab8606a4c806ae2b3aa3b6978" checksum = "2a071f4f7efc9a9118dfb627a0a94ef247986e1ab8606a4c806ae2b3aa3b6978"
dependencies = [ dependencies = [
"ahash 0.8.10", "ahash 0.8.8",
"anyhow", "anyhow",
"base64", "base64",
"bytecount", "bytecount",
@ -1335,9 +1338,9 @@ dependencies = [
[[package]] [[package]]
name = "napi" name = "napi"
version = "2.16.0" version = "2.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54a63d0570e4c3e0daf7a8d380563610e159f538e20448d6c911337246f40e84" checksum = "efbf98e1bcb85cc441bbf7cdfb11070d2537a100e2697d75397b2584c32492d1"
dependencies = [ dependencies = [
"bitflags 2.4.2", "bitflags 2.4.2",
"chrono", "chrono",
@ -1358,23 +1361,23 @@ checksum = "2f9130fccc5f763cf2069b34a089a18f0d0883c66aceb81f2fad541a3d823c43"
[[package]] [[package]]
name = "napi-derive" name = "napi-derive"
version = "2.16.0" version = "2.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05bb7c37e3c1dda9312fdbe4a9fc7507fca72288ba154ec093e2d49114e727ce" checksum = "7622f0dbe0968af2dacdd64870eee6dee94f93c989c841f1ad8f300cf1abd514"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"convert_case", "convert_case",
"napi-derive-backend", "napi-derive-backend",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
name = "napi-derive-backend" name = "napi-derive-backend"
version = "1.0.62" version = "1.0.61"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f785a8b8d7b83e925f5aa6d2ae3c159d17fe137ac368dc185bef410e7acdaeb4" checksum = "d03b8f403a37007cad225039fc0323b961bb40d697eea744140920ebb689ff1d"
dependencies = [ dependencies = [
"convert_case", "convert_case",
"once_cell", "once_cell",
@ -1382,7 +1385,7 @@ dependencies = [
"quote", "quote",
"regex", "regex",
"semver", "semver",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
@ -1575,7 +1578,7 @@ dependencies = [
"proc-macro-error", "proc-macro-error",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
@ -1624,7 +1627,7 @@ dependencies = [
"regex", "regex",
"regex-syntax 0.7.5", "regex-syntax 0.7.5",
"structmeta", "structmeta",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
@ -2102,7 +2105,7 @@ dependencies = [
"proc-macro-error", "proc-macro-error",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
@ -2143,7 +2146,7 @@ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"sea-bae", "sea-bae",
"syn 2.0.51", "syn 2.0.49",
"unicode-ident", "unicode-ident",
] ]
@ -2194,22 +2197,22 @@ checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca"
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.197" version = "1.0.196"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
dependencies = [ dependencies = [
"serde_derive", "serde_derive",
] ]
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.197" version = "1.0.196"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
@ -2225,9 +2228,9 @@ dependencies = [
[[package]] [[package]]
name = "serde_json" name = "serde_json"
version = "1.0.114" version = "1.0.113"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79"
dependencies = [ dependencies = [
"itoa", "itoa",
"ryu", "ryu",
@ -2333,12 +2336,12 @@ checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
[[package]] [[package]]
name = "socket2" name = "socket2"
version = "0.5.6" version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
dependencies = [ dependencies = [
"libc", "libc",
"windows-sys 0.52.0", "windows-sys 0.48.0",
] ]
[[package]] [[package]]
@ -2396,7 +2399,7 @@ version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d84b0a3c3739e220d94b3239fd69fb1f74bc36e16643423bd99de3b43c21bfbd" checksum = "d84b0a3c3739e220d94b3239fd69fb1f74bc36e16643423bd99de3b43c21bfbd"
dependencies = [ dependencies = [
"ahash 0.8.10", "ahash 0.8.8",
"atoi", "atoi",
"bigdecimal", "bigdecimal",
"byteorder", "byteorder",
@ -2628,7 +2631,7 @@ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"structmeta-derive", "structmeta-derive",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
@ -2639,7 +2642,7 @@ checksum = "a60bcaff7397072dca0017d1db428e30d5002e00b6847703e2e42005c95fbe00"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
@ -2667,9 +2670,9 @@ dependencies = [
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.51" version = "2.0.49"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ab617d94515e94ae53b8406c628598680aa0c9587474ecbe58188f7b345d66c" checksum = "915aea9e586f80826ee59f8453c1101f9d1c4b3964cd2460185ee8e299ada496"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -2685,7 +2688,7 @@ dependencies = [
"proc-macro-error", "proc-macro-error",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
@ -2723,9 +2726,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
[[package]] [[package]]
name = "tempfile" name = "tempfile"
version = "3.10.1" version = "3.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"fastrand", "fastrand",
@ -2750,7 +2753,7 @@ checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
@ -2826,7 +2829,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
@ -2897,7 +2900,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]
@ -2935,9 +2938,9 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
[[package]] [[package]]
name = "unicode-normalization" name = "unicode-normalization"
version = "0.1.23" version = "0.1.22"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
dependencies = [ dependencies = [
"tinyvec", "tinyvec",
] ]
@ -3046,7 +3049,7 @@ dependencies = [
"once_cell", "once_cell",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
@ -3080,7 +3083,7 @@ checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
"wasm-bindgen-backend", "wasm-bindgen-backend",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
@ -3119,7 +3122,7 @@ version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
dependencies = [ dependencies = [
"windows-targets 0.52.3", "windows-targets 0.52.0",
] ]
[[package]] [[package]]
@ -3137,7 +3140,7 @@ version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [ dependencies = [
"windows-targets 0.52.3", "windows-targets 0.52.0",
] ]
[[package]] [[package]]
@ -3157,17 +3160,17 @@ dependencies = [
[[package]] [[package]]
name = "windows-targets" name = "windows-targets"
version = "0.52.3" version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d380ba1dc7187569a8a9e91ed34b8ccfc33123bbacb8c0aed2d1ad7f3ef2dc5f" checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
dependencies = [ dependencies = [
"windows_aarch64_gnullvm 0.52.3", "windows_aarch64_gnullvm 0.52.0",
"windows_aarch64_msvc 0.52.3", "windows_aarch64_msvc 0.52.0",
"windows_i686_gnu 0.52.3", "windows_i686_gnu 0.52.0",
"windows_i686_msvc 0.52.3", "windows_i686_msvc 0.52.0",
"windows_x86_64_gnu 0.52.3", "windows_x86_64_gnu 0.52.0",
"windows_x86_64_gnullvm 0.52.3", "windows_x86_64_gnullvm 0.52.0",
"windows_x86_64_msvc 0.52.3", "windows_x86_64_msvc 0.52.0",
] ]
[[package]] [[package]]
@ -3178,9 +3181,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]] [[package]]
name = "windows_aarch64_gnullvm" name = "windows_aarch64_gnullvm"
version = "0.52.3" version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68e5dcfb9413f53afd9c8f86e56a7b4d86d9a2fa26090ea2dc9e40fba56c6ec6" checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
[[package]] [[package]]
name = "windows_aarch64_msvc" name = "windows_aarch64_msvc"
@ -3190,9 +3193,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]] [[package]]
name = "windows_aarch64_msvc" name = "windows_aarch64_msvc"
version = "0.52.3" version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8dab469ebbc45798319e69eebf92308e541ce46760b49b18c6b3fe5e8965b30f" checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
[[package]] [[package]]
name = "windows_i686_gnu" name = "windows_i686_gnu"
@ -3202,9 +3205,9 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]] [[package]]
name = "windows_i686_gnu" name = "windows_i686_gnu"
version = "0.52.3" version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a4e9b6a7cac734a8b4138a4e1044eac3404d8326b6c0f939276560687a033fb" checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
[[package]] [[package]]
name = "windows_i686_msvc" name = "windows_i686_msvc"
@ -3214,9 +3217,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]] [[package]]
name = "windows_i686_msvc" name = "windows_i686_msvc"
version = "0.52.3" version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28b0ec9c422ca95ff34a78755cfa6ad4a51371da2a5ace67500cf7ca5f232c58" checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
[[package]] [[package]]
name = "windows_x86_64_gnu" name = "windows_x86_64_gnu"
@ -3226,9 +3229,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]] [[package]]
name = "windows_x86_64_gnu" name = "windows_x86_64_gnu"
version = "0.52.3" version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "704131571ba93e89d7cd43482277d6632589b18ecf4468f591fbae0a8b101614" checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
[[package]] [[package]]
name = "windows_x86_64_gnullvm" name = "windows_x86_64_gnullvm"
@ -3238,9 +3241,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]] [[package]]
name = "windows_x86_64_gnullvm" name = "windows_x86_64_gnullvm"
version = "0.52.3" version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42079295511643151e98d61c38c0acc444e52dd42ab456f7ccfd5152e8ecf21c" checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
[[package]] [[package]]
name = "windows_x86_64_msvc" name = "windows_x86_64_msvc"
@ -3250,9 +3253,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]] [[package]]
name = "windows_x86_64_msvc" name = "windows_x86_64_msvc"
version = "0.52.3" version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0770833d60a970638e989b3fa9fd2bb1aaadcf88963d1659fd7d9990196ed2d6" checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
[[package]] [[package]]
name = "winnow" name = "winnow"
@ -3305,7 +3308,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.51", "syn 2.0.49",
] ]
[[package]] [[package]]

View file

@ -3,9 +3,9 @@ members = ["packages/backend-rs"]
resolver = "2" resolver = "2"
[workspace.dependencies] [workspace.dependencies]
napi = { version = "2.16.0", default-features = false } napi = { version = "=2.15.0", default-features = false }
napi-build = "2.1.0" napi-build = "2.1.0"
napi-derive = "2.16.0" napi-derive = "=2.15.0"
argon2 = "0.5.3" argon2 = "0.5.3"
async-trait = "0.1.77" async-trait = "0.1.77"

View file

@ -35,22 +35,22 @@ pre-commit: test format shellcheck update-lockfiles regenerate-entities neko/ind
.PHONY: test .PHONY: test
test: # test-revert test: test-revert
# .PHONY: test-revert .PHONY: test-revert
# test-revert: $(T)/test-revert test-revert: $(T)/test-revert
# $(T)/test-revert: neko/revert.sql $(MIGRATIONS) $(T)/test-revert: neko/revert.sql $(MIGRATIONS)
# cd dev && \ cd dev && \
# podman-compose exec db \ podman-compose exec db \
# psql \ psql \
# --echo-all \ --echo-all \
# --user=$(POSTGRES_USER) \ --user=$(POSTGRES_USER) \
# --dbname=$(POSTGRES_DB) \ --dbname=$(POSTGRES_DB) \
# --set='ON_ERROR_STOP=1' \ --set='ON_ERROR_STOP=1' \
# --command="$$(printf '%s\nROLLBACK;' "$$(cat ../neko/revert.sql | sed '$$ d')")" --command="$$(printf '%s\nROLLBACK;' "$$(cat ../neko/revert.sql | sed '$$ d')")"
# touch $@ touch $@
.PHONY: update-lockfiles .PHONY: update-lockfiles
@ -106,7 +106,7 @@ $(T)/regenerate-entities: $(MIGRATIONS)
for file in src/model/entity/*; do \ for file in src/model/entity/*; do \
base=$$(basename -- "$${file}"); \ base=$$(basename -- "$${file}"); \
jsname=$$(printf '%s\n' "$${base%.*}" | perl -pe 's/(^|_)./uc($$&)/ge;s/_//g'); \ jsname=$$(printf '%s\n' "$${base%.*}" | perl -pe 's/(^|_)./uc($$&)/ge;s/_//g'); \
attribute=$$(printf 'napi_derive::napi(object, js_name = "%s", use_nullable = true)' "$${jsname}"); \ attribute=$$(printf 'napi_derive::napi(object, js_name = "%s")' "$${jsname}"); \
sed -i "s/NAPI_EXTRA_ATTR_PLACEHOLDER/$${attribute}/" "$${file}"; \ sed -i "s/NAPI_EXTRA_ATTR_PLACEHOLDER/$${attribute}/" "$${file}"; \
done done
sed -i 's/#\[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)\]/#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum)]\n#[napi_derive::napi]/' \ sed -i 's/#\[derive(Debug, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum)\]/#[derive(Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum)]\n#[napi_derive::napi]/' \

View file

@ -1,7 +1,6 @@
BEGIN; BEGIN;
DELETE FROM "migrations" WHERE name IN ( DELETE FROM "migrations" WHERE name IN (
'FixNoteUrlIndex1709129810501',
'IndexAltTextAndCw1708872574733', 'IndexAltTextAndCw1708872574733',
'SeparateHardMuteWordsAndPatterns1706413792769', 'SeparateHardMuteWordsAndPatterns1706413792769',
'RenameMetaColumns1705944717480', 'RenameMetaColumns1705944717480',

View file

@ -8,7 +8,7 @@
"engines": { "engines": {
"node": ">= 18.17.0" "node": ">= 18.17.0"
}, },
"packageManager": "pnpm@8.15.4", "packageManager": "pnpm@8.15.1",
"private": true, "private": true,
"scripts": { "scripts": {
"rebuild": "pnpm run clean && pnpm run build", "rebuild": "pnpm run clean && pnpm run build",
@ -33,8 +33,8 @@
"cleanall": "pnpm run clean-all" "cleanall": "pnpm run clean-all"
}, },
"dependencies": { "dependencies": {
"@bull-board/api": "5.14.2", "@bull-board/api": "5.14.0",
"@bull-board/ui": "5.14.2", "@bull-board/ui": "5.14.0",
"@napi-rs/cli": "2.18.0", "@napi-rs/cli": "2.18.0",
"gulp": "4.0.2", "gulp": "4.0.2",
"gulp-cssnano": "2.1.3", "gulp-cssnano": "2.1.3",
@ -48,9 +48,9 @@
"@biomejs/cli-darwin-x64": "1.5.3", "@biomejs/cli-darwin-x64": "1.5.3",
"@biomejs/cli-linux-arm64": "1.5.3", "@biomejs/cli-linux-arm64": "1.5.3",
"@biomejs/cli-linux-x64": "1.5.3", "@biomejs/cli-linux-x64": "1.5.3",
"@types/node": "20.11.21", "@types/node": "20.11.13",
"execa": "8.0.1", "execa": "8.0.1",
"pnpm": "8.15.4", "pnpm": "8.15.1",
"typescript": "5.3.3" "typescript": "5.3.3"
} }
} }

View file

@ -6,7 +6,7 @@ use std::fs;
#[derive(Clone, Debug, PartialEq, Deserialize)] #[derive(Clone, Debug, PartialEq, Deserialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
#[napi_derive::napi(object, use_nullable = true)] #[napi_derive::napi(object)]
pub struct ServerConfig { pub struct ServerConfig {
pub url: String, pub url: String,
pub db: DbConfig, pub db: DbConfig,
@ -15,7 +15,7 @@ pub struct ServerConfig {
} }
#[derive(Clone, Debug, PartialEq, Deserialize)] #[derive(Clone, Debug, PartialEq, Deserialize)]
#[napi_derive::napi(object, use_nullable = true)] #[napi_derive::napi(object)]
pub struct DbConfig { pub struct DbConfig {
pub host: String, pub host: String,
pub port: u32, pub port: u32,
@ -25,7 +25,7 @@ pub struct DbConfig {
} }
#[derive(Clone, Debug, PartialEq, Deserialize)] #[derive(Clone, Debug, PartialEq, Deserialize)]
#[napi_derive::napi(object, use_nullable = true)] #[napi_derive::napi(object)]
pub struct RedisConfig { pub struct RedisConfig {
pub host: String, pub host: String,
pub port: u32, pub port: u32,
@ -40,7 +40,7 @@ pub struct RedisConfig {
#[derive(Clone, Debug, PartialEq, Deserialize)] #[derive(Clone, Debug, PartialEq, Deserialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
#[napi_derive::napi(object, use_nullable = true)] #[napi_derive::napi(object)]
pub struct TlsConfig { pub struct TlsConfig {
pub host: String, pub host: String,
pub reject_unauthorized: bool, pub reject_unauthorized: bool,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "abuse_user_report")] #[sea_orm(table_name = "abuse_user_report")]
#[napi_derive::napi(object, js_name = "AbuseUserReport", use_nullable = true)] #[napi_derive::napi(object, js_name = "AbuseUserReport")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "access_token")] #[sea_orm(table_name = "access_token")]
#[napi_derive::napi(object, js_name = "AccessToken", use_nullable = true)] #[napi_derive::napi(object, js_name = "AccessToken")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "ad")] #[sea_orm(table_name = "ad")]
#[napi_derive::napi(object, js_name = "Ad", use_nullable = true)] #[napi_derive::napi(object, js_name = "Ad")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "announcement")] #[sea_orm(table_name = "announcement")]
#[napi_derive::napi(object, js_name = "Announcement", use_nullable = true)] #[napi_derive::napi(object, js_name = "Announcement")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "announcement_read")] #[sea_orm(table_name = "announcement_read")]
#[napi_derive::napi(object, js_name = "AnnouncementRead", use_nullable = true)] #[napi_derive::napi(object, js_name = "AnnouncementRead")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -5,7 +5,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "antenna")] #[sea_orm(table_name = "antenna")]
#[napi_derive::napi(object, js_name = "Antenna", use_nullable = true)] #[napi_derive::napi(object, js_name = "Antenna")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "app")] #[sea_orm(table_name = "app")]
#[napi_derive::napi(object, js_name = "App", use_nullable = true)] #[napi_derive::napi(object, js_name = "App")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "attestation_challenge")] #[sea_orm(table_name = "attestation_challenge")]
#[napi_derive::napi(object, js_name = "AttestationChallenge", use_nullable = true)] #[napi_derive::napi(object, js_name = "AttestationChallenge")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "auth_session")] #[sea_orm(table_name = "auth_session")]
#[napi_derive::napi(object, js_name = "AuthSession", use_nullable = true)] #[napi_derive::napi(object, js_name = "AuthSession")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "blocking")] #[sea_orm(table_name = "blocking")]
#[napi_derive::napi(object, js_name = "Blocking", use_nullable = true)] #[napi_derive::napi(object, js_name = "Blocking")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "channel")] #[sea_orm(table_name = "channel")]
#[napi_derive::napi(object, js_name = "Channel", use_nullable = true)] #[napi_derive::napi(object, js_name = "Channel")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "channel_following")] #[sea_orm(table_name = "channel_following")]
#[napi_derive::napi(object, js_name = "ChannelFollowing", use_nullable = true)] #[napi_derive::napi(object, js_name = "ChannelFollowing")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "channel_note_pining")] #[sea_orm(table_name = "channel_note_pining")]
#[napi_derive::napi(object, js_name = "ChannelNotePining", use_nullable = true)] #[napi_derive::napi(object, js_name = "ChannelNotePining")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "clip")] #[sea_orm(table_name = "clip")]
#[napi_derive::napi(object, js_name = "Clip", use_nullable = true)] #[napi_derive::napi(object, js_name = "Clip")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "clip_note")] #[sea_orm(table_name = "clip_note")]
#[napi_derive::napi(object, js_name = "ClipNote", use_nullable = true)] #[napi_derive::napi(object, js_name = "ClipNote")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "drive_file")] #[sea_orm(table_name = "drive_file")]
#[napi_derive::napi(object, js_name = "DriveFile", use_nullable = true)] #[napi_derive::napi(object, js_name = "DriveFile")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "drive_folder")] #[sea_orm(table_name = "drive_folder")]
#[napi_derive::napi(object, js_name = "DriveFolder", use_nullable = true)] #[napi_derive::napi(object, js_name = "DriveFolder")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "emoji")] #[sea_orm(table_name = "emoji")]
#[napi_derive::napi(object, js_name = "Emoji", use_nullable = true)] #[napi_derive::napi(object, js_name = "Emoji")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "follow_request")] #[sea_orm(table_name = "follow_request")]
#[napi_derive::napi(object, js_name = "FollowRequest", use_nullable = true)] #[napi_derive::napi(object, js_name = "FollowRequest")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "following")] #[sea_orm(table_name = "following")]
#[napi_derive::napi(object, js_name = "Following", use_nullable = true)] #[napi_derive::napi(object, js_name = "Following")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "gallery_like")] #[sea_orm(table_name = "gallery_like")]
#[napi_derive::napi(object, js_name = "GalleryLike", use_nullable = true)] #[napi_derive::napi(object, js_name = "GalleryLike")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "gallery_post")] #[sea_orm(table_name = "gallery_post")]
#[napi_derive::napi(object, js_name = "GalleryPost", use_nullable = true)] #[napi_derive::napi(object, js_name = "GalleryPost")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "hashtag")] #[sea_orm(table_name = "hashtag")]
#[napi_derive::napi(object, js_name = "Hashtag", use_nullable = true)] #[napi_derive::napi(object, js_name = "Hashtag")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "instance")] #[sea_orm(table_name = "instance")]
#[napi_derive::napi(object, js_name = "Instance", use_nullable = true)] #[napi_derive::napi(object, js_name = "Instance")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "messaging_message")] #[sea_orm(table_name = "messaging_message")]
#[napi_derive::napi(object, js_name = "MessagingMessage", use_nullable = true)] #[napi_derive::napi(object, js_name = "MessagingMessage")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "meta")] #[sea_orm(table_name = "meta")]
#[napi_derive::napi(object, js_name = "Meta", use_nullable = true)] #[napi_derive::napi(object, js_name = "Meta")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "migrations")] #[sea_orm(table_name = "migrations")]
#[napi_derive::napi(object, js_name = "Migrations", use_nullable = true)] #[napi_derive::napi(object, js_name = "Migrations")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key)] #[sea_orm(primary_key)]
pub id: i32, pub id: i32,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "moderation_log")] #[sea_orm(table_name = "moderation_log")]
#[napi_derive::napi(object, js_name = "ModerationLog", use_nullable = true)] #[napi_derive::napi(object, js_name = "ModerationLog")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -5,7 +5,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "muted_note")] #[sea_orm(table_name = "muted_note")]
#[napi_derive::napi(object, js_name = "MutedNote", use_nullable = true)] #[napi_derive::napi(object, js_name = "MutedNote")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "muting")] #[sea_orm(table_name = "muting")]
#[napi_derive::napi(object, js_name = "Muting", use_nullable = true)] #[napi_derive::napi(object, js_name = "Muting")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -5,7 +5,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "note")] #[sea_orm(table_name = "note")]
#[napi_derive::napi(object, js_name = "Note", use_nullable = true)] #[napi_derive::napi(object, js_name = "Note")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "note_edit")] #[sea_orm(table_name = "note_edit")]
#[napi_derive::napi(object, js_name = "NoteEdit", use_nullable = true)] #[napi_derive::napi(object, js_name = "NoteEdit")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "note_favorite")] #[sea_orm(table_name = "note_favorite")]
#[napi_derive::napi(object, js_name = "NoteFavorite", use_nullable = true)] #[napi_derive::napi(object, js_name = "NoteFavorite")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "note_reaction")] #[sea_orm(table_name = "note_reaction")]
#[napi_derive::napi(object, js_name = "NoteReaction", use_nullable = true)] #[napi_derive::napi(object, js_name = "NoteReaction")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "note_thread_muting")] #[sea_orm(table_name = "note_thread_muting")]
#[napi_derive::napi(object, js_name = "NoteThreadMuting", use_nullable = true)] #[napi_derive::napi(object, js_name = "NoteThreadMuting")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "note_unread")] #[sea_orm(table_name = "note_unread")]
#[napi_derive::napi(object, js_name = "NoteUnread", use_nullable = true)] #[napi_derive::napi(object, js_name = "NoteUnread")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "note_watching")] #[sea_orm(table_name = "note_watching")]
#[napi_derive::napi(object, js_name = "NoteWatching", use_nullable = true)] #[napi_derive::napi(object, js_name = "NoteWatching")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -5,7 +5,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "notification")] #[sea_orm(table_name = "notification")]
#[napi_derive::napi(object, js_name = "Notification", use_nullable = true)] #[napi_derive::napi(object, js_name = "Notification")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -5,7 +5,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "page")] #[sea_orm(table_name = "page")]
#[napi_derive::napi(object, js_name = "Page", use_nullable = true)] #[napi_derive::napi(object, js_name = "Page")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "page_like")] #[sea_orm(table_name = "page_like")]
#[napi_derive::napi(object, js_name = "PageLike", use_nullable = true)] #[napi_derive::napi(object, js_name = "PageLike")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "password_reset_request")] #[sea_orm(table_name = "password_reset_request")]
#[napi_derive::napi(object, js_name = "PasswordResetRequest", use_nullable = true)] #[napi_derive::napi(object, js_name = "PasswordResetRequest")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -5,7 +5,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "poll")] #[sea_orm(table_name = "poll")]
#[napi_derive::napi(object, js_name = "Poll", use_nullable = true)] #[napi_derive::napi(object, js_name = "Poll")]
pub struct Model { pub struct Model {
#[sea_orm(column_name = "noteId", primary_key, auto_increment = false, unique)] #[sea_orm(column_name = "noteId", primary_key, auto_increment = false, unique)]
pub note_id: String, pub note_id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "poll_vote")] #[sea_orm(table_name = "poll_vote")]
#[napi_derive::napi(object, js_name = "PollVote", use_nullable = true)] #[napi_derive::napi(object, js_name = "PollVote")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "promo_note")] #[sea_orm(table_name = "promo_note")]
#[napi_derive::napi(object, js_name = "PromoNote", use_nullable = true)] #[napi_derive::napi(object, js_name = "PromoNote")]
pub struct Model { pub struct Model {
#[sea_orm(column_name = "noteId", primary_key, auto_increment = false, unique)] #[sea_orm(column_name = "noteId", primary_key, auto_increment = false, unique)]
pub note_id: String, pub note_id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "promo_read")] #[sea_orm(table_name = "promo_read")]
#[napi_derive::napi(object, js_name = "PromoRead", use_nullable = true)] #[napi_derive::napi(object, js_name = "PromoRead")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "registration_ticket")] #[sea_orm(table_name = "registration_ticket")]
#[napi_derive::napi(object, js_name = "RegistrationTicket", use_nullable = true)] #[napi_derive::napi(object, js_name = "RegistrationTicket")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "registry_item")] #[sea_orm(table_name = "registry_item")]
#[napi_derive::napi(object, js_name = "RegistryItem", use_nullable = true)] #[napi_derive::napi(object, js_name = "RegistryItem")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -5,7 +5,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "relay")] #[sea_orm(table_name = "relay")]
#[napi_derive::napi(object, js_name = "Relay", use_nullable = true)] #[napi_derive::napi(object, js_name = "Relay")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "renote_muting")] #[sea_orm(table_name = "renote_muting")]
#[napi_derive::napi(object, js_name = "RenoteMuting", use_nullable = true)] #[napi_derive::napi(object, js_name = "RenoteMuting")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "reply_muting")] #[sea_orm(table_name = "reply_muting")]
#[napi_derive::napi(object, js_name = "ReplyMuting", use_nullable = true)] #[napi_derive::napi(object, js_name = "ReplyMuting")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "signin")] #[sea_orm(table_name = "signin")]
#[napi_derive::napi(object, js_name = "Signin", use_nullable = true)] #[napi_derive::napi(object, js_name = "Signin")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "sw_subscription")] #[sea_orm(table_name = "sw_subscription")]
#[napi_derive::napi(object, js_name = "SwSubscription", use_nullable = true)] #[napi_derive::napi(object, js_name = "SwSubscription")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "used_username")] #[sea_orm(table_name = "used_username")]
#[napi_derive::napi(object, js_name = "UsedUsername", use_nullable = true)] #[napi_derive::napi(object, js_name = "UsedUsername")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub username: String, pub username: String,

View file

@ -5,7 +5,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user")] #[sea_orm(table_name = "user")]
#[napi_derive::napi(object, js_name = "User", use_nullable = true)] #[napi_derive::napi(object, js_name = "User")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_group")] #[sea_orm(table_name = "user_group")]
#[napi_derive::napi(object, js_name = "UserGroup", use_nullable = true)] #[napi_derive::napi(object, js_name = "UserGroup")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_group_invitation")] #[sea_orm(table_name = "user_group_invitation")]
#[napi_derive::napi(object, js_name = "UserGroupInvitation", use_nullable = true)] #[napi_derive::napi(object, js_name = "UserGroupInvitation")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_group_invite")] #[sea_orm(table_name = "user_group_invite")]
#[napi_derive::napi(object, js_name = "UserGroupInvite", use_nullable = true)] #[napi_derive::napi(object, js_name = "UserGroupInvite")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_group_joining")] #[sea_orm(table_name = "user_group_joining")]
#[napi_derive::napi(object, js_name = "UserGroupJoining", use_nullable = true)] #[napi_derive::napi(object, js_name = "UserGroupJoining")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_ip")] #[sea_orm(table_name = "user_ip")]
#[napi_derive::napi(object, js_name = "UserIp", use_nullable = true)] #[napi_derive::napi(object, js_name = "UserIp")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key)] #[sea_orm(primary_key)]
pub id: i32, pub id: i32,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_keypair")] #[sea_orm(table_name = "user_keypair")]
#[napi_derive::napi(object, js_name = "UserKeypair", use_nullable = true)] #[napi_derive::napi(object, js_name = "UserKeypair")]
pub struct Model { pub struct Model {
#[sea_orm(column_name = "userId", primary_key, auto_increment = false, unique)] #[sea_orm(column_name = "userId", primary_key, auto_increment = false, unique)]
pub user_id: String, pub user_id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_list")] #[sea_orm(table_name = "user_list")]
#[napi_derive::napi(object, js_name = "UserList", use_nullable = true)] #[napi_derive::napi(object, js_name = "UserList")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_list_joining")] #[sea_orm(table_name = "user_list_joining")]
#[napi_derive::napi(object, js_name = "UserListJoining", use_nullable = true)] #[napi_derive::napi(object, js_name = "UserListJoining")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_note_pining")] #[sea_orm(table_name = "user_note_pining")]
#[napi_derive::napi(object, js_name = "UserNotePining", use_nullable = true)] #[napi_derive::napi(object, js_name = "UserNotePining")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_pending")] #[sea_orm(table_name = "user_pending")]
#[napi_derive::napi(object, js_name = "UserPending", use_nullable = true)] #[napi_derive::napi(object, js_name = "UserPending")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -6,7 +6,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_profile")] #[sea_orm(table_name = "user_profile")]
#[napi_derive::napi(object, js_name = "UserProfile", use_nullable = true)] #[napi_derive::napi(object, js_name = "UserProfile")]
pub struct Model { pub struct Model {
#[sea_orm(column_name = "userId", primary_key, auto_increment = false, unique)] #[sea_orm(column_name = "userId", primary_key, auto_increment = false, unique)]
pub user_id: String, pub user_id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_publickey")] #[sea_orm(table_name = "user_publickey")]
#[napi_derive::napi(object, js_name = "UserPublickey", use_nullable = true)] #[napi_derive::napi(object, js_name = "UserPublickey")]
pub struct Model { pub struct Model {
#[sea_orm(column_name = "userId", primary_key, auto_increment = false, unique)] #[sea_orm(column_name = "userId", primary_key, auto_increment = false, unique)]
pub user_id: String, pub user_id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "user_security_key")] #[sea_orm(table_name = "user_security_key")]
#[napi_derive::napi(object, js_name = "UserSecurityKey", use_nullable = true)] #[napi_derive::napi(object, js_name = "UserSecurityKey")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -4,7 +4,7 @@ use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "webhook")] #[sea_orm(table_name = "webhook")]
#[napi_derive::napi(object, js_name = "Webhook", use_nullable = true)] #[napi_derive::napi(object, js_name = "Webhook")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key, auto_increment = false)] #[sea_orm(primary_key, auto_increment = false)]
pub id: String, pub id: String,

View file

@ -1,4 +1,4 @@
#[napi_derive::napi(object, use_nullable = true)] #[napi_derive::napi(object)]
pub struct Acct { pub struct Acct {
pub username: String, pub username: String,
pub host: Option<String>, pub host: Option<String>,

View file

@ -5,7 +5,7 @@ use once_cell::sync::Lazy;
use regex::Regex; use regex::Regex;
use sea_orm::prelude::*; use sea_orm::prelude::*;
#[napi_derive::napi(object, use_nullable = true)] #[napi_derive::napi(object)]
pub struct NoteLike { pub struct NoteLike {
pub file_ids: Vec<String>, pub file_ids: Vec<String>,
pub user_id: Option<String>, pub user_id: Option<String>,

View file

@ -1,6 +1,6 @@
use napi; use napi;
#[napi_derive::napi(object, use_nullable = true)] #[napi_derive::napi(object)]
pub struct Post { pub struct Post {
pub text: Option<String>, pub text: Option<String>,
pub cw: Option<String>, pub cw: Option<String>,

View file

@ -41,7 +41,7 @@ pub async fn fetch_meta(conn: &JsDbConn, invalidate_cache: Option<bool>) -> napi
Ok(meta) Ok(meta)
} }
#[napi_derive::napi(object, use_nullable = true)] #[napi_derive::napi(object)]
pub struct PugArgs { pub struct PugArgs {
pub img: Option<String>, pub img: Option<String>,
pub title: String, pub title: String,

View file

@ -1,11 +0,0 @@
export class FixNoteUrlIndex1709129810501 {
name = "FixNoteUrlIndex1709129810501";
async up(queryRunner) {
await queryRunner.query(`DROP INDEX "IDX_note_url"`);
await queryRunner.query(`CREATE INDEX "IDX_note_url" ON "note" ("url")`);
}
async down(queryRunner) {
/* You don't revert this migration */
}
}

View file

@ -9,9 +9,9 @@
"migrate": "typeorm migration:run -d ormconfig.js", "migrate": "typeorm migration:run -d ormconfig.js",
"revertmigration": "typeorm migration:revert -d ormconfig.js", "revertmigration": "typeorm migration:revert -d ormconfig.js",
"check:connect": "node ./check_connect.js", "check:connect": "node ./check_connect.js",
"build": "pnpm swc src --out-dir built --source-maps false --copy-files --strip-leading-paths", "build": "pnpm swc src -d built -D",
"build:debug": "pnpm swc src --out-dir built --source-maps true --copy-files --strip-leading-paths", "build:debug": "pnpm swc src -d built -s -D",
"watch": "pnpm swc src --out-dir built --source-maps true --copy-files --strip-leading-paths --watch", "watch": "pnpm swc src -d built -D -w",
"lint": "pnpm biome check --apply **/*.ts ; pnpm run format", "lint": "pnpm biome check --apply **/*.ts ; pnpm run format",
"format": "pnpm biome format * --write" "format": "pnpm biome format * --write"
}, },
@ -19,22 +19,22 @@
"@swc/core-android-arm64": "1.3.11" "@swc/core-android-arm64": "1.3.11"
}, },
"dependencies": { "dependencies": {
"@bull-board/api": "5.14.2", "@bull-board/api": "5.14.0",
"@bull-board/koa": "5.14.2", "@bull-board/koa": "5.14.0",
"@bull-board/ui": "5.14.2", "@bull-board/ui": "5.14.0",
"@discordapp/twemoji": "^15.0.2", "@discordapp/twemoji": "^15.0.2",
"@koa/cors": "5.0.0", "@koa/cors": "5.0.0",
"@koa/multer": "3.0.2", "@koa/multer": "3.0.2",
"@koa/router": "12.0.1", "@koa/router": "12.0.1",
"@ladjs/koa-views": "9.0.0", "@ladjs/koa-views": "9.0.0",
"@peertube/http-signature": "1.7.0", "@peertube/http-signature": "1.7.0",
"@redocly/openapi-core": "1.9.1", "@redocly/openapi-core": "1.8.1",
"@sinonjs/fake-timers": "11.2.2", "@sinonjs/fake-timers": "11.2.2",
"@twemoji/parser": "^15.0.0", "@twemoji/parser": "^15.0.0",
"adm-zip": "^0.5.10", "adm-zip": "^0.5.10",
"ajv": "8.12.0", "ajv": "8.12.0",
"archiver": "6.0.2", "archiver": "6.0.1",
"aws-sdk": "2.1567.0", "aws-sdk": "2.1547.0",
"axios": "1.6.7", "axios": "1.6.7",
"backend-rs": "workspace:*", "backend-rs": "workspace:*",
"blurhash": "2.0.5", "blurhash": "2.0.5",
@ -49,15 +49,15 @@
"date-fns": "3.3.1", "date-fns": "3.3.1",
"decompress": "4.2.1", "decompress": "4.2.1",
"deep-email-validator": "0.1.21", "deep-email-validator": "0.1.21",
"deepl-node": "1.12.0", "deepl-node": "1.11.1",
"escape-regexp": "0.0.1", "escape-regexp": "0.0.1",
"feed": "4.2.2", "feed": "4.2.2",
"file-type": "19.0.0", "file-type": "19.0.0",
"fluent-ffmpeg": "2.1.2", "fluent-ffmpeg": "2.1.2",
"firefish-js": "workspace:*", "firefish-js": "workspace:*",
"got": "14.2.0", "got": "14.1.0",
"gunzip-maybe": "1.4.2", "gunzip-maybe": "1.4.2",
"happy-dom": "13.6.2", "happy-dom": "13.3.8",
"hpagent": "1.2.0", "hpagent": "1.2.0",
"ioredis": "5.3.2", "ioredis": "5.3.2",
"ip-cidr": "4.0.0", "ip-cidr": "4.0.0",
@ -65,7 +65,7 @@
"js-yaml": "4.1.0", "js-yaml": "4.1.0",
"json5": "2.2.3", "json5": "2.2.3",
"jsonld": "8.3.2", "jsonld": "8.3.2",
"jsrsasign": "11.1.0", "jsrsasign": "11.0.0",
"koa": "2.15.0", "koa": "2.15.0",
"koa-body": "6.0.1", "koa-body": "6.0.1",
"koa-bodyparser": "4.4.1", "koa-bodyparser": "4.4.1",
@ -83,7 +83,7 @@
"multer": "1.4.5-lts.1", "multer": "1.4.5-lts.1",
"nested-property": "4.0.0", "nested-property": "4.0.0",
"node-fetch": "3.3.2", "node-fetch": "3.3.2",
"nodemailer": "6.9.10", "nodemailer": "6.9.8",
"opencc-js": "1.0.5", "opencc-js": "1.0.5",
"os-utils": "0.0.14", "os-utils": "0.0.14",
"otpauth": "9.2.2", "otpauth": "9.2.2",
@ -103,17 +103,17 @@
"rename": "1.0.4", "rename": "1.0.4",
"rndstr": "1.0.0", "rndstr": "1.0.0",
"rss-parser": "3.13.0", "rss-parser": "3.13.0",
"sanitize-html": "2.12.1", "sanitize-html": "2.11.0",
"semver": "7.6.0", "semver": "7.5.4",
"sharp": "0.33.2", "sharp": "0.33.2",
"stringz": "2.1.0", "stringz": "2.1.0",
"summaly": "2.7.0", "summaly": "2.7.0",
"syslog-pro": "1.0.0", "syslog-pro": "1.0.0",
"systeminformation": "5.22.0", "systeminformation": "5.21.24",
"tar-stream": "3.1.7", "tar-stream": "3.1.7",
"tesseract.js": "5.0.5", "tesseract.js": "5.0.4",
"tinycolor2": "1.6.0", "tinycolor2": "1.6.0",
"tmp": "0.2.2", "tmp": "0.2.1",
"typeorm": "0.3.20", "typeorm": "0.3.20",
"ulid": "2.3.0", "ulid": "2.3.0",
"uuid": "9.0.1", "uuid": "9.0.1",
@ -122,15 +122,15 @@
"xev": "3.0.2" "xev": "3.0.2"
}, },
"devDependencies": { "devDependencies": {
"@swc/cli": "0.3.10", "@swc/cli": "0.1.65",
"@swc/core": "1.4.2", "@swc/core": "1.3.107",
"@types/adm-zip": "0.5.5", "@types/adm-zip": "0.5.5",
"@types/escape-regexp": "0.0.3", "@types/escape-regexp": "0.0.3",
"@types/fluent-ffmpeg": "2.1.24", "@types/fluent-ffmpeg": "2.1.24",
"@types/js-yaml": "4.0.9", "@types/js-yaml": "4.0.9",
"@types/jsonld": "1.5.13", "@types/jsonld": "1.5.13",
"@types/jsrsasign": "10.5.12", "@types/jsrsasign": "10.5.12",
"@types/koa": "2.15.0", "@types/koa": "2.14.0",
"@types/koa-bodyparser": "4.3.12", "@types/koa-bodyparser": "4.3.12",
"@types/koa-cors": "0.0.6", "@types/koa-cors": "0.0.6",
"@types/koa-favicon": "2.1.3", "@types/koa-favicon": "2.1.3",
@ -140,22 +140,22 @@
"@types/koa__cors": "5.0.0", "@types/koa__cors": "5.0.0",
"@types/koa__multer": "2.0.7", "@types/koa__multer": "2.0.7",
"@types/koa__router": "12.0.4", "@types/koa__router": "12.0.4",
"@types/node": "20.11.21", "@types/node": "20.11.13",
"@types/node-fetch": "2.6.11", "@types/node-fetch": "2.6.11",
"@types/nodemailer": "6.4.14", "@types/nodemailer": "6.4.14",
"@types/oauth": "0.9.4", "@types/oauth": "0.9.4",
"@types/opencc-js": "1.0.3", "@types/opencc-js": "1.0.3",
"@types/pg": "8.11.2", "@types/pg": "8.11.0",
"@types/probe-image-size": "7.2.4", "@types/probe-image-size": "7.2.4",
"@types/pug": "2.0.10", "@types/pug": "2.0.10",
"@types/punycode": "2.1.4", "@types/punycode": "2.1.3",
"@types/qrcode": "1.5.5", "@types/qrcode": "1.5.5",
"@types/qs": "6.9.12", "@types/qs": "6.9.11",
"@types/random-seed": "0.3.5", "@types/random-seed": "0.3.5",
"@types/ratelimiter": "3.4.6", "@types/ratelimiter": "3.4.6",
"@types/rename": "1.0.7", "@types/rename": "1.0.7",
"@types/sanitize-html": "2.11.0", "@types/sanitize-html": "2.9.5",
"@types/semver": "7.5.8", "@types/semver": "7.5.6",
"@types/sinonjs__fake-timers": "8.1.5", "@types/sinonjs__fake-timers": "8.1.5",
"@types/syslog-pro": "1.0.3", "@types/syslog-pro": "1.0.3",
"@types/tinycolor2": "1.4.6", "@types/tinycolor2": "1.4.6",
@ -165,15 +165,15 @@
"@types/websocket": "1.0.10", "@types/websocket": "1.0.10",
"@types/ws": "8.5.10", "@types/ws": "8.5.10",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"eslint": "8.57.0", "eslint": "8.56.0",
"pug": "3.0.2", "pug": "3.0.2",
"strict-event-emitter-types": "2.0.0", "strict-event-emitter-types": "2.0.0",
"swc-loader": "0.2.6", "swc-loader": "0.2.3",
"ts-loader": "9.5.1", "ts-loader": "9.5.1",
"ts-node": "10.9.2", "ts-node": "10.9.2",
"tsconfig-paths": "4.2.0", "tsconfig-paths": "4.2.0",
"typescript": "5.3.3", "typescript": "5.3.3",
"webpack": "5.90.3", "webpack": "5.90.0",
"ws": "8.16.0" "ws": "8.16.0"
} }
} }

View file

@ -47,6 +47,10 @@ export default define(meta, paramDef, async (ps, user) => {
throw new Error("incorrect password"); throw new Error("incorrect password");
} }
if (!profile.twoFactorEnabled) {
throw new Error("2fa not enabled");
}
const clientData = JSON.parse(ps.clientDataJSON); const clientData = JSON.parse(ps.clientDataJSON);
if (clientData.type !== "webauthn.create") { if (clientData.type !== "webauthn.create") {
@ -144,8 +148,6 @@ export default define(meta, paramDef, async (ps, user) => {
}), }),
); );
UserProfiles.update(user.id, { securityKeysAvailable: true });
return { return {
id: credentialIdString, id: credentialIdString,
name: ps.name, name: ps.name,

View file

@ -32,6 +32,10 @@ export default define(meta, paramDef, async (ps, user) => {
throw new Error("incorrect password"); throw new Error("incorrect password");
} }
// if (!profile.twoFactorEnabled) {
// throw new Error("2fa not enabled");
// }
// 32 byte challenge // 32 byte challenge
const entropy = await randomBytes(32); const entropy = await randomBytes(32);
const challenge = entropy const challenge = entropy

View file

@ -47,9 +47,8 @@ export default define(meta, paramDef, async (ps, user) => {
}); });
if (keyCount === 0) { if (keyCount === 0) {
await UserProfiles.update(user.id, { await UserProfiles.update(me.id, {
usePasswordLessLogin: false, usePasswordLessLogin: false,
securityKeysAvailable: false,
}); });
} }

View file

@ -116,7 +116,7 @@ export default async (ctx: Koa.Context) => {
); );
} }
if (!profile.twoFactorEnabled && !profile.securityKeysAvailable) { if (!profile.twoFactorEnabled) {
if (same) { if (same) {
signin(ctx, user); signin(ctx, user);
return; return;
@ -128,7 +128,7 @@ export default async (ctx: Koa.Context) => {
} }
} }
if (token && profile.twoFactorEnabled) { if (token) {
if (!same) { if (!same) {
await fail(403, { await fail(403, {
id: "932c904e-9460-45b7-9ce6-7ed33be7eb2c", id: "932c904e-9460-45b7-9ce6-7ed33be7eb2c",

View file

@ -44,5 +44,5 @@
"compileOnSave": false, "compileOnSave": false,
"include": [ "include": [
"./src/**/*.ts" "./src/**/*.ts"
] ],
} }

View file

@ -11,7 +11,7 @@
"format": "pnpm biome format * --write && pnpm prettier --write '**/*.{scss,vue}' --cache --cache-strategy metadata" "format": "pnpm biome format * --write && pnpm prettier --write '**/*.{scss,vue}' --cache --cache-strategy metadata"
}, },
"devDependencies": { "devDependencies": {
"@eslint-sets/eslint-config-vue3": "^5.12.0", "@eslint-sets/eslint-config-vue3": "^5.11.0",
"@eslint-sets/eslint-config-vue3-ts": "^3.3.0", "@eslint-sets/eslint-config-vue3-ts": "^3.3.0",
"@phosphor-icons/web": "^2.0.3", "@phosphor-icons/web": "^2.0.3",
"@rollup/plugin-alias": "5.1.0", "@rollup/plugin-alias": "5.1.0",
@ -26,14 +26,14 @@
"@types/katex": "0.16.7", "@types/katex": "0.16.7",
"@types/matter-js": "0.19.6", "@types/matter-js": "0.19.6",
"@types/prismjs": "1.26.3", "@types/prismjs": "1.26.3",
"@types/punycode": "2.1.4", "@types/punycode": "2.1.3",
"@types/seedrandom": "3.0.8", "@types/seedrandom": "3.0.8",
"@types/textarea-caret": "3.0.3", "@types/textarea-caret": "3.0.3",
"@types/throttle-debounce": "5.0.2", "@types/throttle-debounce": "5.0.2",
"@types/tinycolor2": "1.4.6", "@types/tinycolor2": "1.4.6",
"@types/uuid": "9.0.8", "@types/uuid": "9.0.8",
"@vitejs/plugin-vue": "5.0.4", "@vitejs/plugin-vue": "5.0.3",
"@vue/runtime-core": "3.4.21", "@vue/runtime-core": "3.4.15",
"autobind-decorator": "2.4.0", "autobind-decorator": "2.4.0",
"autosize": "6.0.1", "autosize": "6.0.1",
"blurhash": "2.0.5", "blurhash": "2.0.5",
@ -66,27 +66,27 @@
"mfm-js": "0.24.0", "mfm-js": "0.24.0",
"moment": "^2.30.1", "moment": "^2.30.1",
"photoswipe": "5.4.3", "photoswipe": "5.4.3",
"prettier": "3.2.5", "prettier": "3.2.4",
"prismjs": "1.29.0", "prismjs": "1.29.0",
"punycode": "2.3.1", "punycode": "2.3.1",
"rollup": "4.12.0", "rollup": "4.9.6",
"s-age": "1.1.2", "s-age": "1.1.2",
"sass": "1.71.1", "sass": "1.70.0",
"seedrandom": "3.0.5", "seedrandom": "3.0.5",
"stringz": "2.1.0", "stringz": "2.1.0",
"swiper": "11.0.7", "swiper": "11.0.5",
"syuilo-password-strength": "0.0.1", "syuilo-password-strength": "0.0.1",
"textarea-caret": "3.1.0", "textarea-caret": "3.1.0",
"three": "0.161.0", "three": "0.160.1",
"throttle-debounce": "5.0.0", "throttle-debounce": "5.0.0",
"tinycolor2": "1.6.0", "tinycolor2": "1.6.0",
"tinyld": "^1.3.4", "tinyld": "^1.3.4",
"typescript": "5.3.3", "typescript": "5.3.3",
"unicode-emoji-json": "0.4.0", "unicode-emoji-json": "0.4.0",
"uuid": "9.0.1", "uuid": "9.0.1",
"vite": "5.1.4", "vite": "5.0.12",
"vite-plugin-compression": "0.5.1", "vite-plugin-compression": "0.5.1",
"vue": "3.4.21", "vue": "3.4.15",
"vue-draggable-plus": "^0.3.5", "vue-draggable-plus": "^0.3.5",
"vue-plyr": "^7.0.0", "vue-plyr": "^7.0.0",
"vue-prism-editor": "2.0.0-alpha.2" "vue-prism-editor": "2.0.0-alpha.2"

View file

@ -79,16 +79,10 @@
{{ i18n.ts.retry }} {{ i18n.ts.retry }}
</MkButton> </MkButton>
</div> </div>
<div <div v-if="user && user.securityKeys" class="or-hr">
v-if="user && user.securityKeys && user.twoFactorEnabled"
class="or-hr"
>
<p class="or-msg">{{ i18n.ts.or }}</p> <p class="or-msg">{{ i18n.ts.or }}</p>
</div> </div>
<div <div class="twofa-group totp-group">
v-if="user.twoFactorEnabled"
class="twofa-group totp-group"
>
<p style="margin-bottom: 0"> <p style="margin-bottom: 0">
{{ i18n.ts.twoStepAuthentication }} {{ i18n.ts.twoStepAuthentication }}
</p> </p>
@ -253,23 +247,25 @@ function queryKey() {
function onSubmit() { function onSubmit() {
signing.value = true; signing.value = true;
console.log("submit"); console.log("submit");
if (window.PublicKeyCredential && user.value.securityKeys) { if (!totpLogin.value && user.value && user.value.twoFactorEnabled) {
os.api("signin", { if (window.PublicKeyCredential && user.value.securityKeys) {
username: username.value, os.api("signin", {
password: password.value, username: username.value,
"hcaptcha-response": hCaptchaResponse.value, password: password.value,
"g-recaptcha-response": reCaptchaResponse.value, "hcaptcha-response": hCaptchaResponse.value,
}) "g-recaptcha-response": reCaptchaResponse.value,
.then((res) => {
totpLogin.value = true;
signing.value = false;
challengeData.value = res;
return queryKey();
}) })
.catch(loginFailed); .then((res) => {
} else if (!totpLogin.value && user.value && user.value.twoFactorEnabled) { totpLogin.value = true;
totpLogin.value = true; signing.value = false;
signing.value = false; challengeData.value = res;
return queryKey();
})
.catch(loginFailed);
} else {
totpLogin.value = true;
signing.value = false;
}
} else { } else {
os.api("signin", { os.api("signin", {
username: username.value, username: username.value,

View file

@ -14,7 +14,17 @@
<template #caption>{{ i18n.ts.totpDescription }}</template> <template #caption>{{ i18n.ts.totpDescription }}</template>
<div v-if="$i.twoFactorEnabled" class="_gaps_s"> <div v-if="$i.twoFactorEnabled" class="_gaps_s">
<div v-text="i18n.ts._2fa.alreadyRegistered" /> <div v-text="i18n.ts._2fa.alreadyRegistered" />
<MkButton @click="unregisterTOTP" <template v-if="$i.securityKeysList.length > 0">
<MkButton @click="renewTOTP"
><i
:class="icon('ph-shield-check')"
style="margin-inline-end: 0.5rem"
></i
>{{ i18n.ts._2fa.renewTOTP }}</MkButton
>
<MkInfo>{{ i18n.ts._2fa.whyTOTPOnlyRenew }}</MkInfo>
</template>
<MkButton v-else @click="unregisterTOTP"
><i ><i
:class="icon('ph-shield-slash')" :class="icon('ph-shield-slash')"
style="margin-inline-end: 0.5rem" style="margin-inline-end: 0.5rem"
@ -49,6 +59,13 @@
{{ i18n.ts._2fa.securityKeyNotSupported }} {{ i18n.ts._2fa.securityKeyNotSupported }}
</MkInfo> </MkInfo>
<MkInfo
v-else-if="supportsCredentials && !$i.twoFactorEnabled"
warn
>
{{ i18n.ts._2fa.registerTOTPBeforeKey }}
</MkInfo>
<template v-else> <template v-else>
<MkButton primary @click="addSecurityKey" <MkButton primary @click="addSecurityKey"
><i ><i
@ -188,6 +205,19 @@ function unregisterTOTP() {
}); });
} }
function renewTOTP() {
os.confirm({
type: "question",
title: i18n.ts._2fa.renewTOTP,
text: i18n.ts._2fa.renewTOTPConfirm,
okText: i18n.ts._2fa.renewTOTPOk,
cancelText: i18n.ts._2fa.renewTOTPCancel,
}).then(({ canceled }) => {
if (canceled) return;
registerTOTP();
});
}
async function unregisterKey(key) { async function unregisterKey(key) {
const confirm = await os.confirm({ const confirm = await os.confirm({
type: "question", type: "question",

View file

@ -7,10 +7,9 @@
"types": "./built/index.d.ts", "types": "./built/index.d.ts",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"build": "pnpm swc src --out-dir built --source-maps false --copy-files --strip-leading-paths", "build": "pnpm swc src -d built -D",
"build:types": "pnpm tsc --emitDeclarationOnly", "build:types": "pnpm tsc --emitDeclarationOnly",
"build:debug": "pnpm swc src --out-dir built --source-maps true --copy-files --strip-leading-paths", "build:debug": "pnpm swc src -d built -s -D",
"watch": "pnpm swc src --out-dir built --source-maps true --copy-files --strip-leading-paths --watch",
"lint": "pnpm biome check --apply src", "lint": "pnpm biome check --apply src",
"format": "pnpm biome format --write src" "format": "pnpm biome format --write src"
}, },
@ -19,12 +18,12 @@
"url": "https://code.naskya.net/naskya/firefish" "url": "https://code.naskya.net/naskya/firefish"
}, },
"devDependencies": { "devDependencies": {
"@swc/cli": "0.3.10", "@swc/cli": "0.1.65",
"@swc/core": "1.4.2", "@swc/core": "1.3.107",
"@swc/types": "0.1.5", "@swc/types": "0.1.5",
"@types/node": "20.11.21", "@types/node": "20.11.13",
"ts-node": "10.9.2", "ts-node": "10.9.2",
"tsd": "0.30.7", "tsd": "0.30.4",
"typescript": "5.3.3" "typescript": "5.3.3"
}, },
"files": [ "files": [

24
packages/sw/.swcrc Normal file
View file

@ -0,0 +1,24 @@
{
"$schema": "https://json.schemastore.org/swcrc",
"jsc": {
"parser": {
"syntax": "typescript",
"dynamicImport": true,
"decorators": true
},
"transform": {
"decoratorMetadata": true
},
"experimental": {
"keepImportAssertions": true
},
"baseUrl": ".",
"paths": {
"@/*": [
"./src/*"
]
},
"target": "es2022"
},
"minify": false
}

View file

@ -5,13 +5,20 @@
"scripts": { "scripts": {
"build": "pnpm vite build --emptyOutDir", "build": "pnpm vite build --emptyOutDir",
"build:debug": "pnpm run build", "build:debug": "pnpm run build",
"watch": "pnpm swc src -d built -D -w",
"lint": "pnpm biome check *.ts --apply", "lint": "pnpm biome check *.ts --apply",
"format": "pnpm biome format * --write" "format": "pnpm biome format * --write"
}, },
"devDependencies": { "devDependencies": {
"@swc/cli": "0.1.65",
"@swc/core": "1.3.107",
"@swc/core-android-arm64": "1.3.11",
"firefish-js": "workspace:*", "firefish-js": "workspace:*",
"idb-keyval": "6.2.1", "idb-keyval": "6.2.1",
"vite": "5.1.4", "vite": "5.0.12",
"vite-plugin-compression": "0.5.1" "vite-plugin-compression": "0.5.1"
},
"optionalDependencies": {
"@swc/core-android-arm64": "1.3.11"
} }
} }

File diff suppressed because it is too large Load diff