From 6acc47ef092235a7135a9e6ba376d9738368c07c Mon Sep 17 00:00:00 2001 From: jake <77554505+brxken128@users.noreply.github.com> Date: Wed, 23 Aug 2023 07:28:25 +0100 Subject: [PATCH] [ENG-980] Barebones, essential telemetry (#1237) * rename everything to "full" telemetry and re-word onboarding * impl the `ping` event every 4.5 mins, or on path change * fix debug popover * update mobile * remove callback (and cargo lock update?) * add to mobile, remove eslint ignore, remove console log --------- Co-authored-by: Utku <74243531+utkubakir@users.noreply.github.com> --- Cargo.lock | 309 +++++++++--------- apps/mobile/src/App.tsx | 18 +- .../screens/onboarding/CreatingLibrary.tsx | 4 +- .../mobile/src/screens/onboarding/Privacy.tsx | 14 +- apps/mobile/tests/onboarding.yml | 16 +- .../Layout/Sidebar/DebugPopover.tsx | 16 +- interface/app/$libraryId/Layout/index.tsx | 20 +- .../$libraryId/settings/client/privacy.tsx | 12 +- interface/app/onboarding/context.tsx | 12 +- interface/app/onboarding/privacy.tsx | 2 +- packages/client/src/hooks/useDebugState.ts | 4 +- .../client/src/hooks/useOnboardingStore.ts | 2 +- packages/client/src/hooks/usePlausible.tsx | 60 +++- .../client/src/hooks/useTelemetryState.tsx | 4 +- 14 files changed, 283 insertions(+), 210 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2e497d442..ac763b361 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -156,9 +156,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8f9420f797f2d9e935edf629310eb938a0d839f984e25327f3c7eed22300c" +checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a" dependencies = [ "memchr", ] @@ -244,9 +244,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.72" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "aovec" @@ -420,18 +420,18 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] name = "async-trait" -version = "0.1.72" +version = "0.1.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6dde6e4ed435a4c1ee4e73592f5ba9da2151af10076cc04858746af9352d09" +checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -689,9 +689,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" [[package]] name = "bitvec" @@ -945,9 +945,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ "jobserver", "libc", @@ -1122,9 +1122,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.3.21" +version = "4.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c27cdf28c0f604ba3f512b0c9a409f8de8513e4816705deb0498b627e7c3a3fd" +checksum = "03aef18ddf7d879c15ce20f04826ef8418101c7e528014c3eeea13321047dca3" dependencies = [ "clap_builder", "clap_derive", @@ -1133,9 +1133,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.3.21" +version = "4.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a9f1ab5e9f01a9b81f202e8562eb9a10de70abf9eaeac1be465c28b75aa4aa" +checksum = "f8ce6fffb678c9b80a70b6b6de0aad31df727623a70fd9a842c30cd573e2fa98" dependencies = [ "anstream", "anstyle", @@ -1152,7 +1152,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -1495,7 +1495,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -1584,18 +1584,31 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.0.0-rc.1" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d4ba9852b42210c7538b75484f9daa0655e9a3ac04f693747bb0f02cf3cfe16" +checksum = "f711ade317dd348950a9910f81c5947e3d8907ebd2b83f76203ff1807e6a2bc2" dependencies = [ "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", "fiat-crypto", - "packed_simd_2", "platforms", + "rustc_version", "subtle", "zeroize", ] +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.29", +] + [[package]] name = "darling" version = "0.14.4" @@ -1641,7 +1654,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -1663,7 +1676,7 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core 0.20.3", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -1781,9 +1794,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7684a49fb1af197853ef7b2ee694bc1f5b4179556f1e5710e1760c5db6f5e929" +checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" dependencies = [ "serde", ] @@ -1928,7 +1941,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -2129,7 +2142,7 @@ checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -2140,7 +2153,7 @@ checksum = "b893c4eb2dc092c811165f84dc7447fae16fb66521717968c34c509b39b1a5c5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -2319,9 +2332,9 @@ checksum = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33" [[package]] name = "flate2" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" dependencies = [ "crc32fast", "miniz_oxide", @@ -2434,13 +2447,15 @@ dependencies = [ [[package]] name = "futures-concurrency" -version = "7.3.0" +version = "7.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b726119e6cd29cf120724495b2085e1ed3d17821ea17b86de54576d1aa565f5e" +checksum = "0cf49eababd62240534b6e7178bd8b20fac90318ed4295917b0565b6708ed670" dependencies = [ "bitvec", "futures-core", "pin-project", + "slab", + "smallvec 1.11.0", ] [[package]] @@ -2501,7 +2516,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -2816,7 +2831,7 @@ version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d" dependencies = [ - "aho-corasick 1.0.3", + "aho-corasick 1.0.4", "bstr", "fnv", "log", @@ -3135,9 +3150,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "httpz" @@ -3518,7 +3533,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ "hermit-abi", - "rustix 0.38.7", + "rustix 0.38.8", "windows-sys 0.48.0", ] @@ -3771,12 +3786,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "libm" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" - [[package]] name = "libp2p" version = "0.51.3" @@ -4170,9 +4179,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "loom" @@ -4457,9 +4466,9 @@ dependencies = [ [[package]] name = "mini-moka" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "452ebc1428a585e31e637b928b76355ef2fd72d765b2530d72fe475e514cd1eb" +checksum = "23e0b72e7c9042467008b10279fc732326bd605459ae03bda88825909dd19b56" dependencies = [ "crossbeam-channel", "crossbeam-utils", @@ -4897,9 +4906,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" dependencies = [ "num-traits", ] @@ -5101,7 +5110,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -5227,16 +5236,6 @@ dependencies = [ "sha2 0.10.7", ] -[[package]] -name = "packed_simd_2" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282" -dependencies = [ - "cfg-if", - "libm", -] - [[package]] name = "pango" version = "0.15.10" @@ -5335,7 +5334,7 @@ dependencies = [ "libc", "redox_syscall 0.3.5", "smallvec 1.11.0", - "windows-targets 0.48.1", + "windows-targets 0.48.5", ] [[package]] @@ -5433,7 +5432,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -5572,7 +5571,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -5625,9 +5624,9 @@ dependencies = [ [[package]] name = "png" -version = "0.17.9" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59871cc5b6cce7eaccca5a802b4173377a1c2ba90654246789a8fa2334426d11" +checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" dependencies = [ "bitflags 1.3.2", "crc32fast", @@ -5721,7 +5720,7 @@ dependencies = [ [[package]] name = "prisma-client-rust" version = "0.6.8" -source = "git+https://github.com/Brendonovich/prisma-client-rust?branch=spacedrive#f00f2689f26dcc818fb0d05b0c4d8826973a2989" +source = "git+https://github.com/Brendonovich/prisma-client-rust?branch=spacedrive#f4f98ab7f30b6f6550cd058e9889570a58501822" dependencies = [ "base64 0.13.1", "bigdecimal", @@ -5754,7 +5753,7 @@ dependencies = [ [[package]] name = "prisma-client-rust-cli" version = "0.6.8" -source = "git+https://github.com/Brendonovich/prisma-client-rust?branch=spacedrive#f00f2689f26dcc818fb0d05b0c4d8826973a2989" +source = "git+https://github.com/Brendonovich/prisma-client-rust?branch=spacedrive#f4f98ab7f30b6f6550cd058e9889570a58501822" dependencies = [ "directories", "flate2", @@ -5774,7 +5773,7 @@ dependencies = [ [[package]] name = "prisma-client-rust-generator" version = "0.6.8" -source = "git+https://github.com/Brendonovich/prisma-client-rust?branch=spacedrive#f00f2689f26dcc818fb0d05b0c4d8826973a2989" +source = "git+https://github.com/Brendonovich/prisma-client-rust?branch=spacedrive#f4f98ab7f30b6f6550cd058e9889570a58501822" dependencies = [ "directories", "flate2", @@ -5794,7 +5793,7 @@ dependencies = [ [[package]] name = "prisma-client-rust-macros" version = "0.6.8" -source = "git+https://github.com/Brendonovich/prisma-client-rust?branch=spacedrive#f00f2689f26dcc818fb0d05b0c4d8826973a2989" +source = "git+https://github.com/Brendonovich/prisma-client-rust?branch=spacedrive#f4f98ab7f30b6f6550cd058e9889570a58501822" dependencies = [ "convert_case 0.6.0", "proc-macro2", @@ -5806,7 +5805,7 @@ dependencies = [ [[package]] name = "prisma-client-rust-sdk" version = "0.6.8" -source = "git+https://github.com/Brendonovich/prisma-client-rust?branch=spacedrive#f00f2689f26dcc818fb0d05b0c4d8826973a2989" +source = "git+https://github.com/Brendonovich/prisma-client-rust?branch=spacedrive#f4f98ab7f30b6f6550cd058e9889570a58501822" dependencies = [ "convert_case 0.5.0", "dmmf", @@ -5926,13 +5925,13 @@ dependencies = [ [[package]] name = "prometheus-client-derive-encode" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b6a5217beb0ad503ee7fa752d451c905113d70721b937126158f3106a48cc1" +checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.29", ] [[package]] @@ -6160,9 +6159,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.32" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -6398,7 +6397,7 @@ version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a" dependencies = [ - "aho-corasick 1.0.3", + "aho-corasick 1.0.4", "memchr", "regex-automata 0.3.6", "regex-syntax 0.7.4", @@ -6419,7 +6418,7 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69" dependencies = [ - "aho-corasick 1.0.3", + "aho-corasick 1.0.4", "memchr", "regex-syntax 0.7.4", ] @@ -6722,11 +6721,11 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.7" +version = "0.38.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "172891ebdceb05aa0005f533a6cbfca599ddd7d966f6f5d4d9b2e70478e70399" +checksum = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.0", "errno", "libc", "linux-raw-sys 0.4.5", @@ -7342,9 +7341,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.183" +version = "1.0.185" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c" +checksum = "be9b6f69f1dfd54c3b568ffa45c310d6973a5e5148fd40cf515acaf38cf5bc31" dependencies = [ "serde_derive", ] @@ -7388,20 +7387,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.183" +version = "1.0.185" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816" +checksum = "dc59dfdcbad1437773485e0367fea4b090a2e0a16d9ffc46af47764536a298ec" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] name = "serde_json" -version = "1.0.104" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c" +checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360" dependencies = [ "indexmap 2.0.0", "itoa 1.0.9", @@ -7427,7 +7426,7 @@ checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -7469,9 +7468,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1402f54f9a3b9e2efe71c1cea24e648acce55887983553eeb858cf3115acfd49" +checksum = "1ca3b16a3d82c4088f343b7480a93550b3eabe1a358569c2dfe38bbcead07237" dependencies = [ "base64 0.21.2", "chrono", @@ -7480,7 +7479,7 @@ dependencies = [ "indexmap 2.0.0", "serde", "serde_json", - "serde_with_macros 3.2.0", + "serde_with_macros 3.3.0", "time 0.3.25", ] @@ -7493,19 +7492,19 @@ dependencies = [ "darling 0.20.3", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] name = "serde_with_macros" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9197f1ad0e3c173a0222d3c4404fb04c3afe87e962bcb327af73e8301fa203c7" +checksum = "2e6be15c453eb305019bfa438b1593c731f36a289a7853f7707ee29e870b3b3c" dependencies = [ "darling 0.20.3", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -7716,14 +7715,14 @@ checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" [[package]] name = "snow" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ccba027ba85743e09d15c03296797cad56395089b832b48b5a5217880f57733" +checksum = "0c9d1425eb528a21de2755c75af4c9b5d57f50a0d4c3b7f1828a4cd03f8ba155" dependencies = [ "aes-gcm 0.9.4", "blake2", "chacha20poly1305 0.9.1", - "curve25519-dalek 4.0.0-rc.1", + "curve25519-dalek 4.0.0", "rand_core 0.6.4", "ring", "rustc_version", @@ -8080,9 +8079,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.28" +version = "2.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567" +checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" dependencies = [ "proc-macro2", "quote", @@ -8237,9 +8236,9 @@ dependencies = [ [[package]] name = "tao-macros" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b27a4bcc5eb524658234589bdffc7e7bfb996dbae6ce9393bfd39cb4159b445" +checksum = "ec114582505d158b669b136e6851f85840c109819d77c42bb7c0709f727d18c2" dependencies = [ "proc-macro2", "quote", @@ -8461,7 +8460,7 @@ dependencies = [ "semver", "serde", "serde_json", - "serde_with 3.2.0", + "serde_with 3.3.0", "thiserror", "url", "walkdir", @@ -8490,14 +8489,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.7.1" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc02fddf48964c42031a0b3fe0428320ecf3a73c401040fc0096f97794310651" +checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" dependencies = [ "cfg-if", "fastrand 2.0.0", "redox_syscall 0.3.5", - "rustix 0.38.7", + "rustix 0.38.8", "windows-sys 0.48.0", ] @@ -8529,22 +8528,22 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" [[package]] name = "thiserror" -version = "1.0.44" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" +checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.44" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" +checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -8633,9 +8632,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.30.0" +version = "1.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3ce25f50619af8b0aec2eb23deebe84249e19e2ddd393a6e16e3300a6dadfd" +checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" dependencies = [ "backtrace", "bytes", @@ -8658,7 +8657,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -8762,7 +8761,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55ae70283aba8d2a8b411c695c437fe25b8b5e44e23e780662002fc72fb47a82" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.0", "bytes", "futures-core", "futures-util", @@ -8835,7 +8834,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -8845,7 +8844,7 @@ source = "git+https://github.com/tokio-rs/tracing?rev=29146260fb4615d271d2e899ad dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] @@ -9404,7 +9403,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", "wasm-bindgen-shared", ] @@ -9438,7 +9437,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -9622,9 +9621,9 @@ dependencies = [ [[package]] name = "webrtc-dtls" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942be5bd85f072c3128396f6e5a9bfb93ca8c1939ded735d177b7bcba9a13d05" +checksum = "c4a00f4242f2db33307347bd5be53263c52a0331c96c14292118c9a6bb48d267" dependencies = [ "aes 0.6.0", "aes-gcm 0.10.2", @@ -9639,12 +9638,11 @@ dependencies = [ "hkdf 0.12.3", "hmac 0.12.1", "log", - "oid-registry 0.6.1", "p256", "p384", "rand 0.8.5", "rand_core 0.6.4", - "rcgen 0.9.3", + "rcgen 0.10.0", "ring", "rustls 0.19.1", "sec1", @@ -9657,7 +9655,7 @@ dependencies = [ "tokio", "webpki 0.21.4", "webrtc-util", - "x25519-dalek 2.0.0-pre.1", + "x25519-dalek 2.0.0", "x509-parser 0.13.2", ] @@ -9912,7 +9910,7 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ - "windows-targets 0.48.1", + "windows-targets 0.48.5", ] [[package]] @@ -9971,7 +9969,7 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.1", + "windows-targets 0.48.5", ] [[package]] @@ -9991,17 +9989,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] @@ -10018,9 +10016,9 @@ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" @@ -10048,9 +10046,9 @@ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" @@ -10078,9 +10076,9 @@ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" @@ -10108,9 +10106,9 @@ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" @@ -10138,9 +10136,9 @@ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" @@ -10150,9 +10148,9 @@ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" @@ -10180,15 +10178,15 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winnow" -version = "0.5.4" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acaaa1190073b2b101e15083c38ee8ec891b5e05cbee516521e94ec008f61e64" +checksum = "d09770118a7eb1ccaf4a594a221334119a44a814fcb0d31c5b85e83e97227a97" dependencies = [ "memchr", ] @@ -10303,12 +10301,13 @@ dependencies = [ [[package]] name = "x25519-dalek" -version = "2.0.0-pre.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5da623d8af10a62342bcbbb230e33e58a63255a58012f8653c578e54bab48df" +checksum = "fb66477291e7e8d2b0ff1bcb900bf29489a9692816d79874bea351e7a8b6de96" dependencies = [ - "curve25519-dalek 3.2.0", + "curve25519-dalek 4.0.0", "rand_core 0.6.4", + "serde", "zeroize", ] @@ -10419,7 +10418,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.29", ] [[package]] diff --git a/apps/mobile/src/App.tsx b/apps/mobile/src/App.tsx index b64cd29d4..e783ab045 100644 --- a/apps/mobile/src/App.tsx +++ b/apps/mobile/src/App.tsx @@ -25,7 +25,9 @@ import { initPlausible, useClientContext, useInvalidateQuery, - usePlausiblePageViewMonitor + usePlausibleEvent, + usePlausiblePageViewMonitor, + usePlausiblePingMonitor } from '@sd/client'; import { GlobalModals } from './components/modal/GlobalModals'; import { useTheme } from './hooks/useTheme'; @@ -46,6 +48,7 @@ changeTwTheme('dark'); function AppNavigation() { const { libraries, library } = useClientContext(); + const plausibleEvent = usePlausibleEvent(); // TODO: Make sure library has actually been loaded by this point - precache with useCachedLibraries? // if (library === undefined) throw new Error("Tried to render AppNavigation before libraries fetched!") @@ -56,6 +59,19 @@ function AppNavigation() { const [currentPath, setCurrentPath] = useState('/'); usePlausiblePageViewMonitor({ currentPath }); + usePlausiblePingMonitor({ currentPath }); + + useEffect(() => { + const interval = setInterval(() => { + plausibleEvent({ + event: { + type: 'ping' + } + }); + }, 270 * 1000); + + return () => clearInterval(interval); + }, []); if (library === null && libraries.data) { currentLibraryStore.id = libraries.data[0]?.uuid ?? null; diff --git a/apps/mobile/src/screens/onboarding/CreatingLibrary.tsx b/apps/mobile/src/screens/onboarding/CreatingLibrary.tsx index 5b9706086..fda13913b 100644 --- a/apps/mobile/src/screens/onboarding/CreatingLibrary.tsx +++ b/apps/mobile/src/screens/onboarding/CreatingLibrary.tsx @@ -34,7 +34,7 @@ const CreatingLibraryScreen = ({ navigation }: OnboardingStackScreenProps<'Creat ]); // Switch to the new library currentLibraryStore.id = lib.uuid; - if (obStore.shareTelemetry) { + if (obStore.shareFullTelemetry) { submitPlausibleEvent({ event: { type: 'libraryCreate' } }); } }, @@ -48,7 +48,7 @@ const CreatingLibraryScreen = ({ navigation }: OnboardingStackScreenProps<'Creat const created = useRef(false); const create = async () => { - telemetryStore.shareTelemetry = obStore.shareTelemetry; + telemetryStore.shareFullTelemetry = obStore.shareFullTelemetry; createLibrary.mutate({ name: obStore.newLibraryName }); }; diff --git a/apps/mobile/src/screens/onboarding/Privacy.tsx b/apps/mobile/src/screens/onboarding/Privacy.tsx index 0acc1e1e7..3cb60142f 100644 --- a/apps/mobile/src/screens/onboarding/Privacy.tsx +++ b/apps/mobile/src/screens/onboarding/Privacy.tsx @@ -39,12 +39,12 @@ const RadioButton = ({ title, description, isSelected, style }: RadioButtonProps }; const PrivacyScreen = ({ navigation }: OnboardingStackScreenProps<'Privacy'>) => { - const [shareTelemetry, setShareTelemetry] = useState<'share-telemetry' | 'no-share-telemetry'>( + const [shareTelemetry, setShareTelemetry] = useState<'share-telemetry' | 'share-minimal'>( 'share-telemetry' ); const onPress = () => { - getOnboardingStore().shareTelemetry = shareTelemetry === 'share-telemetry'; + getOnboardingStore().shareFullTelemetry = shareTelemetry === 'share-telemetry'; navigation.navigate('CreatingLibrary'); }; @@ -65,13 +65,13 @@ const PrivacyScreen = ({ navigation }: OnboardingStackScreenProps<'Privacy'>) => /> setShareTelemetry('no-share-telemetry')} + testID="share-minimal" + onPress={() => setShareTelemetry('share-minimal')} > diff --git a/apps/mobile/tests/onboarding.yml b/apps/mobile/tests/onboarding.yml index d75fbd0b2..13a07302d 100644 --- a/apps/mobile/tests/onboarding.yml +++ b/apps/mobile/tests/onboarding.yml @@ -2,14 +2,14 @@ appId: com.spacedrive.app --- - launchApp: clearState: true -- tapOn: 'Get Started' +- tapOn: "Get Started" - tapOn: - id: 'library-name' -- inputText: 'TestLib' -- tapOn: 'New Library' + id: "library-name" +- inputText: "TestLib" +- tapOn: "New Library" - tapOn: - id: 'share-nothing' -- tapOn: 'Continue' + id: "share-minimal" +- tapOn: "Continue" - tapOn: - id: 'drawer-toggle' -- assertVisible: 'TestLib' + id: "drawer-toggle" +- assertVisible: "TestLib" diff --git a/interface/app/$libraryId/Layout/Sidebar/DebugPopover.tsx b/interface/app/$libraryId/Layout/Sidebar/DebugPopover.tsx index 13181dbef..1f3d38749 100644 --- a/interface/app/$libraryId/Layout/Sidebar/DebugPopover.tsx +++ b/interface/app/$libraryId/Layout/Sidebar/DebugPopover.tsx @@ -47,13 +47,16 @@ export default () => { description="Share telemetry, even in debug mode (telemetry sharing must also be enabled in your client settings)" > { // if debug telemetry sharing is about to be disabled, but telemetry logging is enabled // then disable it - if (!debugState.shareTelemetry === false && debugState.telemetryLogging) + if ( + !debugState.shareFullTelemetry === false && + debugState.telemetryLogging + ) getDebugState().telemetryLogging = false; - getDebugState().shareTelemetry = !debugState.shareTelemetry; + getDebugState().shareFullTelemetry = !debugState.shareFullTelemetry; }} /> @@ -67,8 +70,11 @@ export default () => { onClick={() => { // if telemetry logging is about to be enabled, but debug telemetry sharing is disabled // then enable it - if (!debugState.telemetryLogging && debugState.shareTelemetry === false) - getDebugState().shareTelemetry = true; + if ( + !debugState.telemetryLogging && + debugState.shareFullTelemetry === false + ) + getDebugState().shareFullTelemetry = true; getDebugState().telemetryLogging = !debugState.telemetryLogging; }} /> diff --git a/interface/app/$libraryId/Layout/index.tsx b/interface/app/$libraryId/Layout/index.tsx index f927c05e2..eef0411d9 100644 --- a/interface/app/$libraryId/Layout/index.tsx +++ b/interface/app/$libraryId/Layout/index.tsx @@ -1,12 +1,14 @@ import clsx from 'clsx'; -import { Suspense, useMemo, useRef } from 'react'; +import { Suspense, useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { Navigate, Outlet } from 'react-router-dom'; import { ClientContextProvider, LibraryContextProvider, initPlausible, useClientContext, - usePlausiblePageViewMonitor + usePlausibleEvent, + usePlausiblePageViewMonitor, + usePlausiblePingMonitor } from '@sd/client'; import { useRootContext } from '~/app/RootContext'; import { LibraryIdParamsSchema } from '~/app/route-schemas'; @@ -20,6 +22,7 @@ import Toasts from './Toasts'; const Layout = () => { const { libraries, library } = useClientContext(); const os = useOperatingSystem(); + const plausibleEvent = usePlausibleEvent(); const layoutRef = useRef(null); @@ -30,6 +33,19 @@ const Layout = () => { const { rawPath } = useRootContext(); usePlausiblePageViewMonitor({ currentPath: rawPath }); + usePlausiblePingMonitor({ currentPath: rawPath }); + + useEffect(() => { + const interval = setInterval(() => { + plausibleEvent({ + event: { + type: 'ping' + } + }); + }, 270 * 1000); + + return () => clearInterval(interval); + }, []); const ctxValue = useMemo(() => ({ ref: layoutRef }), [layoutRef]); diff --git a/interface/app/$libraryId/settings/client/privacy.tsx b/interface/app/$libraryId/settings/client/privacy.tsx index b8d1b0495..4b64e2f92 100644 --- a/interface/app/$libraryId/settings/client/privacy.tsx +++ b/interface/app/$libraryId/settings/client/privacy.tsx @@ -4,19 +4,21 @@ import { Heading } from '../Layout'; import Setting from '../Setting'; export const Component = () => { - const shareTelemetry = useTelemetryState().shareTelemetry; + const fullTelemetry = useTelemetryState().shareFullTelemetry; return ( <> (telemetryStore.shareTelemetry = !shareTelemetry)} + checked={fullTelemetry} + onClick={() => (telemetryStore.shareFullTelemetry = !fullTelemetry)} className="m-2 ml-4" size="md" /> diff --git a/interface/app/onboarding/context.tsx b/interface/app/onboarding/context.tsx index dc9e37f47..1d92ffa17 100644 --- a/interface/app/onboarding/context.tsx +++ b/interface/app/onboarding/context.tsx @@ -33,16 +33,16 @@ export const useContextValue = () => { export const shareTelemetry = RadioGroupField.options([ z.literal('share-telemetry'), - z.literal('no-telemetry') + z.literal('minimal-telemetry') ]).details({ 'share-telemetry': { heading: 'Share anonymous usage', description: 'Share completely anonymous telemetry data to help the developers improve the app' }, - 'no-telemetry': { - heading: 'Share nothing', - description: 'Do not share any telemetry data with the developers' + 'minimal-telemetry': { + heading: 'Share the bare minimum', + description: 'Only share that I am an active user of Spacedrive and a few technical bits' } }); @@ -74,7 +74,7 @@ const useFormState = () => { // opted to place this here as users could change their mind before library creation/onboarding finalization // it feels more fitting to configure it here (once) - telemetryStore.shareTelemetry = getOnboardingStore().shareTelemetry; + telemetryStore.shareFullTelemetry = getOnboardingStore().shareFullTelemetry; try { // show creation screen for a bit for smoothness @@ -90,7 +90,7 @@ const useFormState = () => { library ]); - if (telemetryStore.shareTelemetry) { + if (telemetryStore.shareFullTelemetry) { submitPlausibleEvent({ event: { type: 'libraryCreate' } }); } diff --git a/interface/app/onboarding/privacy.tsx b/interface/app/onboarding/privacy.tsx index 41f32dd85..26bd51dfa 100644 --- a/interface/app/onboarding/privacy.tsx +++ b/interface/app/onboarding/privacy.tsx @@ -10,7 +10,7 @@ export default function OnboardingPrivacy() {
{ - getOnboardingStore().shareTelemetry = + getOnboardingStore().shareFullTelemetry = form.getValues('shareTelemetry') === 'share-telemetry'; return onSubmit(e); }} diff --git a/packages/client/src/hooks/useDebugState.ts b/packages/client/src/hooks/useDebugState.ts index ae473b4a5..6f6faafb5 100644 --- a/packages/client/src/hooks/useDebugState.ts +++ b/packages/client/src/hooks/useDebugState.ts @@ -6,7 +6,7 @@ export interface DebugState { enabled: boolean; rspcLogger: boolean; reactQueryDevtools: 'enabled' | 'disabled' | 'invisible'; - shareTelemetry: boolean; // used for sending telemetry even if the app is in debug mode, and ONLY if client settings also allow telemetry sharing + shareFullTelemetry: boolean; // used for sending telemetry even if the app is in debug mode telemetryLogging: boolean; } @@ -14,7 +14,7 @@ const debugState: DebugState = valtioPersist('sd-debugState', { enabled: globalThis.isDev, rspcLogger: false, reactQueryDevtools: globalThis.isDev ? 'invisible' : 'enabled', - shareTelemetry: false, + shareFullTelemetry: false, telemetryLogging: false }); diff --git a/packages/client/src/hooks/useOnboardingStore.ts b/packages/client/src/hooks/useOnboardingStore.ts index 4a2b047ec..34dee79fe 100644 --- a/packages/client/src/hooks/useOnboardingStore.ts +++ b/packages/client/src/hooks/useOnboardingStore.ts @@ -13,7 +13,7 @@ const onboardingStoreDefaults = () => ({ newLibraryName: '', unlockedScreens: ['alpha'], lastActiveScreen: null as string | null, - shareTelemetry: true, + shareFullTelemetry: true, useCases: [] as UseCase[], grantedFullDiskAccess: false }); diff --git a/packages/client/src/hooks/usePlausible.tsx b/packages/client/src/hooks/usePlausible.tsx index b38ac13ba..d0cbc29c8 100644 --- a/packages/client/src/hooks/usePlausible.tsx +++ b/packages/client/src/hooks/usePlausible.tsx @@ -6,7 +6,8 @@ import { PlausiblePlatformType, telemetryStore, useTelemetryState } from './useT /** * This should be in sync with the Core's version. */ -const VERSION = '0.1.0'; +const CORE_VERSION = '0.1.0'; // This will need to be embedded accordingly +const APP_VERSION = '0.1.0'; // This is specific to desktop/web/mobile and will need to be embedded accordingly const DOMAIN = 'app.spacedrive.com'; const MOBILE_DOMAIN = 'mobile.spacedrive.com'; @@ -86,6 +87,8 @@ type TagCreateEvent = BasePlausibleEvent<'tagCreate'>; type TagDeleteEvent = BasePlausibleEvent<'tagDelete'>; type TagAssignEvent = BasePlausibleEvent<'tagAssign'>; +type PingEvent = BasePlausibleEvent<'ping'>; + /** * All union of available, ready-to-use events. * @@ -99,7 +102,8 @@ type PlausibleEvent = | LocationDeleteEvent | TagCreateEvent | TagDeleteEvent - | TagAssignEvent; + | TagAssignEvent + | PingEvent; /** * An event information wrapper for internal use only. @@ -110,7 +114,9 @@ interface PlausibleTrackerEvent { eventName: string; props: { platform: PlausiblePlatformType; - version: string; + fullTelemetry: boolean; + coreVersion: string; + appVersion: string; debug: boolean; }; options: PlausibleTrackerOptions; @@ -135,18 +141,18 @@ interface SubmitEventProps { */ screenWidth?: number; /** - * Whether or not telemetry sharing is enabled for the current client. + * Whether or not full telemetry sharing is enabled for the current client. * - * It is **crucial** that this is the direct output of `useTelemetryState().shareTelemetry`, + * It is **crucial** that this is the direct output of `useTelemetryState().shareFullTelemetry`, * regardless of other conditions that may affect whether we share it (such as event overrides). */ - shareTelemetry: boolean; + shareFullTelemetry: boolean; /** * It is **crucial** that this is sourced from the output of `useDebugState()` */ debugState: { enabled: boolean; - shareTelemetry: boolean; + shareFullTelemetry: boolean; telemetryLogging: boolean; }; } @@ -175,11 +181,11 @@ interface SubmitEventProps { */ const submitPlausibleEvent = async ({ event, debugState, ...props }: SubmitEventProps) => { if (props.platformType === 'unknown') return; - if (debugState.enabled && debugState.shareTelemetry !== true) return; + // if (debugState.enabled && debugState.shareFullTelemetry !== true) return; if ( 'plausibleOptions' in event && 'telemetryOverride' in event.plausibleOptions ? event.plausibleOptions.telemetryOverride !== true - : props.shareTelemetry !== true + : props.shareFullTelemetry !== true && event.type !== 'ping' ) return; @@ -187,7 +193,9 @@ const submitPlausibleEvent = async ({ event, debugState, ...props }: SubmitEvent eventName: event.type, props: { platform: props.platformType, - version: VERSION, + fullTelemetry: props.shareFullTelemetry, + coreVersion: CORE_VERSION, + appVersion: APP_VERSION, debug: debugState.enabled }, options: { @@ -270,7 +278,7 @@ export const usePlausibleEvent = () => { submitPlausibleEvent({ debugState, - shareTelemetry: telemetryState.shareTelemetry, + shareFullTelemetry: telemetryState.shareFullTelemetry, platformType: telemetryState.platform, ...props }); @@ -279,7 +287,7 @@ export const usePlausibleEvent = () => { ); }; -export interface PageViewMonitorProps { +export interface PlausibleMonitorProps { /** * This should be sanitized, containing no user-specific information. * @@ -313,7 +321,7 @@ export interface PageViewMonitorProps { * }); * ``` */ -export const usePlausiblePageViewMonitor = ({ currentPath }: PageViewMonitorProps) => { +export const usePlausiblePageViewMonitor = ({ currentPath }: PlausibleMonitorProps) => { const plausibleEvent = usePlausibleEvent(); useEffect(() => { @@ -326,6 +334,32 @@ export const usePlausiblePageViewMonitor = ({ currentPath }: PageViewMonitorProp }, [currentPath, plausibleEvent]); }; +/** + * A Plausible Analytics `ping` monitoring hook. It watches the router's current + * path, and sends events if a change in the path is detected. + * + * This should be included next to the {@link usePlausiblePageViewMonitor}. + * + * For desktop/web, we use this hook in the `$libraryId` layout and it covers the + * entire app (excluding onboarding, which should not be monitored). + * + * @remarks + * This will submit an 'ping' event, independently of what the currernt telemetry + * sharing settings are (minimum or full). + * + */ +export const usePlausiblePingMonitor = ({ currentPath }: PlausibleMonitorProps) => { + const plausibleEvent = usePlausibleEvent(); + + useEffect(() => { + plausibleEvent({ + event: { + type: 'ping' + } + }); + }, [currentPath, plausibleEvent]); +}; + export const initPlausible = ({ platformType }: { platformType: PlausiblePlatformType }) => { telemetryStore.platform = platformType; return; diff --git a/packages/client/src/hooks/useTelemetryState.tsx b/packages/client/src/hooks/useTelemetryState.tsx index 7362ac52e..8e8da9a1d 100644 --- a/packages/client/src/hooks/useTelemetryState.tsx +++ b/packages/client/src/hooks/useTelemetryState.tsx @@ -10,12 +10,12 @@ import { valtioPersist } from '../lib'; export type PlausiblePlatformType = 'web' | 'mobile' | 'desktop' | 'unknown'; type TelemetryState = { - shareTelemetry: boolean; + shareFullTelemetry: boolean; platform: PlausiblePlatformType; }; export const telemetryStore = valtioPersist('sd-telemetryStore', { - shareTelemetry: false, // false by default, so functions cannot accidentally send data if the user has not decided + shareFullTelemetry: false, // false by default platform: 'unknown' });