Live video on the AT Protocol

notify when someone you're following goes live!

See merge request streamplace/streamplace!91

Changelog: feature

+3702 -1714
+1 -1
.ci/dockerfile-hash.yaml
··· 1 1 variables: 2 - DOCKERFILE_HASH: 24a5abdbf165ddd6abd7e417548b67b0b73c5d23 2 + DOCKERFILE_HASH: 4c5b7b7979e1c6225b8f0e6db74176699bdffeb0
+31 -4
Makefile
··· 47 47 mkdir -p js/app/generated \ 48 48 && go run pkg/crypto/signers/eip712/export-schema/export-schema.go > js/app/generated/eip712-schema.json 49 49 50 + .PHONY: go-lexicons 51 + go-lexicons: 52 + rm -rf ./pkg/streamplace \ 53 + && mkdir -p ./pkg/streamplace \ 54 + && $(MAKE) lexgen \ 55 + && sed -i.bak 's/\tutil/\/\/\tutil/' $$(find ./pkg/streamplace -type f) \ 56 + && sed -i.bak -E 's/^(.+)github(.+)//' $$(find ./pkg/streamplace -type f) \ 57 + && go run ./pkg/gen/gen.go \ 58 + && $(MAKE) lexgen \ 59 + && rm -rf ./pkg/streamplace/*.bak 60 + 61 + .PHONY: lexgen 62 + lexgen: 63 + go run github.com/bluesky-social/indigo/cmd/lexgen --package streamplace \ 64 + --types-import place.stream:stream.place/streamplace/pkg/streamplace --outdir ./pkg/streamplace --prefix place.stream --build \ 65 + '[{"package": "streamplace","prefix": "place.stream","outdir": "./pkg/streamplace","import":"stream.place/streamplace"}]' lexicons/place/stream 66 + 50 67 .PHONY: test 51 68 test: 52 69 meson test -C $(BUILDDIR) go-tests ··· 100 117 meson test -C $(BUILDDIR) go-tests 101 118 102 119 .PHONY: android 103 - android: app .build/bundletool.jar 120 + android: android-release android-debug 121 + 122 + .PHONY: android-release 123 + android-release: app .build/bundletool.jar 104 124 export NODE_ENV=production \ 105 125 && cd ./js/app/android \ 106 126 && ./gradlew :app:bundleRelease \ 107 - && ./gradlew :app:bundleDebug \ 108 127 && cd - \ 109 128 && mv ./js/app/android/app/build/outputs/bundle/release/app-release.aab ./bin/streamplace-$(VERSION)-android-release.aab \ 110 - && mv ./js/app/android/app/build/outputs/bundle/debug/app-debug.aab ./bin/streamplace-$(VERSION)-android-debug.aab \ 111 129 && cd bin \ 112 130 && java -jar ../.build/bundletool.jar build-apks --ks ../my-release-key.keystore --ks-key-alias alias_name --ks-pass pass:aquareum --bundle=streamplace-$(VERSION)-android-release.aab --output=streamplace-$(VERSION)-android-release.apks --mode=universal \ 131 + && unzip streamplace-$(VERSION)-android-release.apks && mv universal.apk streamplace-$(VERSION)-android-release.apk && rm toc.pb 132 + 133 + .PHONY: android-debug 134 + android-debug: app .build/bundletool.jar 135 + export NODE_ENV=production \ 136 + && cd ./js/app/android \ 137 + && ./gradlew :app:bundleDebug \ 138 + && cd - \ 139 + && mv ./js/app/android/app/build/outputs/bundle/debug/app-debug.aab ./bin/streamplace-$(VERSION)-android-debug.aab \ 140 + && cd bin \ 113 141 && java -jar ../.build/bundletool.jar build-apks --ks ../my-release-key.keystore --ks-key-alias alias_name --ks-pass pass:aquareum --bundle=streamplace-$(VERSION)-android-debug.aab --output=streamplace-$(VERSION)-android-debug.apks --mode=universal \ 114 - && unzip streamplace-$(VERSION)-android-release.apks && mv universal.apk streamplace-$(VERSION)-android-release.apk && rm toc.pb \ 115 142 && unzip streamplace-$(VERSION)-android-debug.apks && mv universal.apk streamplace-$(VERSION)-android-debug.apk && rm toc.pb 116 143 117 144 .PHONY: ios
+1 -1
docker/build.Dockerfile
··· 6 6 ARG DOCKERFILE_HASH 7 7 ENV DOCKERFILE_HASH $DOCKERFILE_HASH 8 8 9 - ENV GO_VERSION 1.22.4 9 + ENV GO_VERSION 1.23.6 10 10 ENV NODE_VERSION 22.3.0 11 11 ENV DEBIAN_FRONTEND noninteractive 12 12
+51 -9
go.mod
··· 1 1 module stream.place/streamplace 2 2 3 - go 1.22.4 3 + go 1.23 4 + 5 + toolchain go1.23.3 4 6 5 7 replace github.com/livepeer/lpms => github.com/aquareum-tv/lpms v0.0.0-20240828210246-5ac9b407751e 6 8 7 9 replace github.com/ThalesGroup/crypto11 => github.com/aquareum-tv/crypto11 v0.0.0-20240821184406-43336abc768f 8 10 11 + replace github.com/gocql/gocql => github.com/scylladb/gocql v1.14.4 12 + 9 13 require ( 10 14 firebase.google.com/go/v4 v4.14.1 11 15 git.stream.place/streamplace/c2pa-go v0.0.0-20250129011218-a26b6bf7d3b0 16 + github.com/99designs/gqlgen v0.17.64 12 17 github.com/NYTimes/gziphandler v1.1.1 13 18 github.com/ThalesGroup/crypto11 v0.0.0-00010101000000-000000000000 14 - github.com/bluesky-social/indigo v0.0.0-20241119234843-9198b7903723 19 + github.com/bluesky-social/indigo v0.0.0-20250202033855-fd270fbccf0c 15 20 github.com/decred/dcrd/dcrec/secp256k1 v1.0.4 16 21 github.com/dunglas/httpsfv v1.0.2 17 22 github.com/ethereum/go-ethereum v1.14.7 ··· 21 26 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 22 27 github.com/golang/glog v1.2.0 23 28 github.com/google/uuid v1.6.0 29 + github.com/gorilla/websocket v1.5.1 24 30 github.com/ipfs/go-cid v0.4.1 25 31 github.com/ipfs/go-datastore v0.6.0 26 32 github.com/ipfs/go-ipfs-blockstore v1.3.1 ··· 42 48 gitlab.com/gitlab-org/release-cli v0.18.0 43 49 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 44 50 golang.org/x/image v0.22.0 45 - golang.org/x/net v0.31.0 46 - golang.org/x/sync v0.9.0 47 - golang.org/x/term v0.26.0 51 + golang.org/x/net v0.33.0 52 + golang.org/x/sync v0.10.0 53 + golang.org/x/term v0.27.0 48 54 google.golang.org/api v0.189.0 49 55 gorm.io/datatypes v1.2.4 50 56 gorm.io/driver/sqlite v1.5.5 ··· 54 60 github.com/jinzhu/inflection v1.0.0 // indirect 55 61 github.com/jinzhu/now v1.1.5 // indirect 56 62 github.com/mattn/go-isatty v0.0.20 57 - golang.org/x/sys v0.27.0 // indirect 63 + golang.org/x/sys v0.29.0 // indirect 58 64 gorm.io/gorm v1.25.11 59 65 ) 60 66 ··· 77 83 dario.cat/mergo v1.0.0 // indirect 78 84 filippo.io/edwards25519 v1.1.0 // indirect 79 85 github.com/BurntSushi/toml v1.4.0 // indirect 86 + github.com/DataDog/zstd v1.4.5 // indirect 80 87 github.com/MicahParks/keyfunc v1.9.0 // indirect 81 88 github.com/Microsoft/go-winio v0.6.2 // indirect 82 89 github.com/ProtonMail/go-crypto v1.0.0 // indirect 90 + github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b // indirect 91 + github.com/agnivade/levenshtein v1.2.0 // indirect 83 92 github.com/beorn7/perks v1.0.1 // indirect 84 93 github.com/bits-and-blooms/bitset v1.10.0 // indirect 85 94 github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect 86 95 github.com/carlmjohnson/versioninfo v0.22.5 // indirect 87 96 github.com/cespare/xxhash/v2 v2.3.0 // indirect 88 97 github.com/cloudflare/circl v1.3.7 // indirect 98 + github.com/cockroachdb/errors v1.11.3 // indirect 99 + github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect 100 + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect 101 + github.com/cockroachdb/pebble v1.1.2 // indirect 102 + github.com/cockroachdb/redact v1.1.5 // indirect 103 + github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect 89 104 github.com/consensys/bavard v0.1.13 // indirect 90 105 github.com/consensys/gnark-crypto v0.12.1 // indirect 91 106 github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect ··· 98 113 github.com/ethereum/c-kzg-4844 v1.0.0 // indirect 99 114 github.com/felixge/httpsnoop v1.0.4 // indirect 100 115 github.com/fsnotify/fsnotify v1.6.0 // indirect 116 + github.com/getsentry/sentry-go v0.27.0 // indirect 101 117 github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect 102 118 github.com/go-git/go-billy/v5 v5.5.0 // indirect 103 119 github.com/go-logr/logr v1.4.2 // indirect 104 120 github.com/go-logr/stdr v1.2.2 // indirect 105 121 github.com/go-sql-driver/mysql v1.8.1 // indirect 122 + github.com/gocql/gocql v0.0.0-00010101000000-000000000000 // indirect 106 123 github.com/gogo/protobuf v1.3.2 // indirect 107 124 github.com/golang-jwt/jwt/v4 v4.5.0 // indirect 108 125 github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect 109 126 github.com/golang/protobuf v1.5.4 // indirect 127 + github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect 110 128 github.com/google/s2a-go v0.1.7 // indirect 111 129 github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect 112 130 github.com/googleapis/gax-go/v2 v2.12.5 // indirect 131 + github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect 113 132 github.com/hashicorp/errwrap v1.1.0 // indirect 114 133 github.com/hashicorp/go-cleanhttp v0.5.2 // indirect 115 134 github.com/hashicorp/go-multierror v1.1.1 // indirect 116 135 github.com/hashicorp/go-retryablehttp v0.7.5 // indirect 117 136 github.com/hashicorp/go-version v1.4.0 // indirect 118 137 github.com/hashicorp/golang-lru v1.0.2 // indirect 138 + github.com/hashicorp/golang-lru/arc/v2 v2.0.6 // indirect 119 139 github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect 120 140 github.com/holiman/uint256 v1.3.0 // indirect 121 141 github.com/ipfs/bbloom v0.0.4 // indirect 122 142 github.com/ipfs/go-block-format v0.2.0 // indirect 143 + github.com/ipfs/go-blockservice v0.5.2 // indirect 123 144 github.com/ipfs/go-ipfs-ds-help v1.1.1 // indirect 145 + github.com/ipfs/go-ipfs-exchange-interface v0.2.1 // indirect 124 146 github.com/ipfs/go-ipfs-util v0.0.3 // indirect 125 147 github.com/ipfs/go-ipld-cbor v0.1.0 // indirect 126 148 github.com/ipfs/go-ipld-format v0.6.0 // indirect 149 + github.com/ipfs/go-ipld-legacy v0.2.1 // indirect 150 + github.com/ipfs/go-libipfs v0.7.0 // indirect 127 151 github.com/ipfs/go-log v1.0.5 // indirect 128 152 github.com/ipfs/go-log/v2 v2.5.1 // indirect 153 + github.com/ipfs/go-merkledag v0.11.0 // indirect 129 154 github.com/ipfs/go-metrics-interface v0.0.1 // indirect 155 + github.com/ipfs/go-verifcid v0.0.3 // indirect 156 + github.com/ipld/go-car v0.6.1-0.20230509095817-92d28eb23ba4 // indirect 130 157 github.com/ipld/go-car/v2 v2.13.1 // indirect 158 + github.com/ipld/go-codec-dagpb v1.6.0 // indirect 131 159 github.com/ipld/go-ipld-prime v0.21.0 // indirect 160 + github.com/jackc/pgpassfile v1.0.0 // indirect 161 + github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 // indirect 162 + github.com/jackc/pgx/v5 v5.5.5 // indirect 163 + github.com/jackc/puddle/v2 v2.2.1 // indirect 132 164 github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect 133 165 github.com/jbenet/goprocess v0.1.4 // indirect 134 166 github.com/jstemmer/go-junit-report v1.0.0 // indirect 135 167 github.com/kevinburke/ssh_config v1.2.0 // indirect 168 + github.com/klauspost/compress v1.17.3 // indirect 136 169 github.com/klauspost/cpuid/v2 v2.2.7 // indirect 170 + github.com/kr/pretty v0.3.1 // indirect 171 + github.com/kr/text v0.2.0 // indirect 137 172 github.com/livepeer/m3u8 v0.11.1 // indirect 138 173 github.com/mattn/go-pointer v0.0.1 // indirect 139 174 github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect ··· 171 206 github.com/prometheus/client_model v0.5.0 // indirect 172 207 github.com/prometheus/common v0.45.0 // indirect 173 208 github.com/prometheus/procfs v0.12.0 // indirect 209 + github.com/rogpeppe/go-internal v1.12.0 // indirect 174 210 github.com/russross/blackfriday/v2 v2.1.0 // indirect 175 211 github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect 176 212 github.com/sirupsen/logrus v1.9.3 // indirect 177 213 github.com/skeema/knownhosts v1.2.2 // indirect 214 + github.com/sosodev/duration v1.3.1 // indirect 178 215 github.com/spaolacci/murmur3 v1.1.0 // indirect 179 216 github.com/stretchr/objx v0.5.2 // indirect 180 217 github.com/supranational/blst v0.3.11 // indirect 181 218 github.com/thales-e-security/pool v0.0.2 // indirect 182 219 github.com/urfave/cli/v2 v2.27.5 // indirect 220 + github.com/vektah/gqlparser/v2 v2.5.22 // indirect 183 221 github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 // indirect 184 222 github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e // indirect 185 223 github.com/wlynxg/anet v0.0.5 // indirect ··· 196 234 go.uber.org/atomic v1.11.0 // indirect 197 235 go.uber.org/multierr v1.11.0 // indirect 198 236 go.uber.org/zap v1.26.0 // indirect 199 - golang.org/x/crypto v0.29.0 // indirect 237 + golang.org/x/crypto v0.31.0 // indirect 238 + golang.org/x/mod v0.20.0 // indirect 200 239 golang.org/x/oauth2 v0.21.0 // indirect 201 - golang.org/x/text v0.20.0 // indirect 240 + golang.org/x/text v0.21.0 // indirect 202 241 golang.org/x/time v0.5.0 // indirect 242 + golang.org/x/tools v0.24.0 // indirect 203 243 golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect 204 244 google.golang.org/appengine/v2 v2.0.2 // indirect 205 245 google.golang.org/genproto v0.0.0-20240722135656-d784300faade // indirect 206 246 google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect 207 247 google.golang.org/genproto/googleapis/rpc v0.0.0-20240722135656-d784300faade // indirect 208 248 google.golang.org/grpc v1.64.1 // indirect 209 - google.golang.org/protobuf v1.35.1 // indirect 249 + google.golang.org/protobuf v1.36.4 // indirect 250 + gopkg.in/inf.v0 v0.9.1 // indirect 210 251 gopkg.in/warnings.v0 v0.1.2 // indirect 211 252 gorm.io/driver/mysql v1.5.6 // indirect 253 + gorm.io/driver/postgres v1.5.7 // indirect 212 254 lukechampine.com/blake3 v1.2.1 // indirect 213 255 rsc.io/tmplfunc v0.0.3 // indirect 214 256 )
+139 -16
go.sum
··· 23 23 firebase.google.com/go/v4 v4.14.1/go.mod h1:fgk2XshgNDEKaioKco+AouiegSI9oTWVqRaBdTTGBoM= 24 24 git.stream.place/streamplace/c2pa-go v0.0.0-20250129011218-a26b6bf7d3b0 h1:dXB8DJxUxQsX6m2vR+O5wXiUfD9IGcxn8gV3mRbHI0k= 25 25 git.stream.place/streamplace/c2pa-go v0.0.0-20250129011218-a26b6bf7d3b0/go.mod h1:ymtm/Gk3K8Q67SuBoZUqmA0prdymNwAI9BjLj6plhBM= 26 + github.com/99designs/gqlgen v0.17.64 h1:BzpqO5ofQXyy2XOa93Q6fP1BHLRjTOeU35ovTEsbYlw= 27 + github.com/99designs/gqlgen v0.17.64/go.mod h1:kaxLetFxPGeBBwiuKk75NxuI1fe9HRvob17In74v/Zc= 26 28 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 27 29 github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= 28 30 github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= ··· 37 39 github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= 38 40 github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= 39 41 github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= 42 + github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b h1:5/++qT1/z812ZqBvqQt6ToRswSuPZ/B33m6xVHRzADU= 43 + github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b/go.mod h1:4+EPqMRApwwE/6yo6CxiHoSnBzjRr3jsqer7frxP8y4= 40 44 github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= 41 45 github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= 42 46 github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= 43 47 github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= 48 + github.com/agnivade/levenshtein v1.2.0 h1:U9L4IOT0Y3i0TIlUIDJ7rVUziKi/zPbrJGaFrtYH3SY= 49 + github.com/agnivade/levenshtein v1.2.0/go.mod h1:QVVI16kDrtSuwcpd0p1+xMC6Z/VfhtCyDIjcwga4/DU= 50 + github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 h1:iW0a5ljuFxkLGPNem5Ui+KBjFJzKg4Fv2fnxe4dvzpM= 51 + github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5/go.mod h1:Y2QMoi1vgtOIfc+6DhrMOGkLoGzqSV2rKp4Sm+opsyA= 52 + github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= 53 + github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= 44 54 github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= 45 55 github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= 46 56 github.com/aquareum-tv/crypto11 v0.0.0-20240821184406-43336abc768f h1:XSnkt/A222mS2ZeUMKQHoFVljHQHNMEEDxV/kRhltsM= 47 57 github.com/aquareum-tv/crypto11 v0.0.0-20240821184406-43336abc768f/go.mod h1:jxLjD0HWOu7iVqbL7hmvDoe6D/B+w0UW7CqK3jNjt5E= 48 58 github.com/aquareum-tv/lpms v0.0.0-20240828210246-5ac9b407751e h1:YMbqxUpsM7cjfPdO4y2FVH+VMBMC+ZG7DRbF7J5NMs0= 49 59 github.com/aquareum-tv/lpms v0.0.0-20240828210246-5ac9b407751e/go.mod h1:z5ROP1l5OzAKSoqVRLc34MjUdueil6wHSecQYV7llIw= 60 + github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q= 61 + github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= 50 62 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= 51 63 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= 52 64 github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= 65 + github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= 66 + github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= 53 67 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= 54 68 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= 69 + github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY= 70 + github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= 55 71 github.com/bits-and-blooms/bitset v1.10.0 h1:ePXTeiPEazB5+opbv5fr8umg2R/1NlzgDsyepwsSr88= 56 72 github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= 57 - github.com/bluesky-social/indigo v0.0.0-20241119234843-9198b7903723 h1:Is+KjMLL4Kp/Hvua18c3puZqhojEsoqyvMidszNH3Oo= 58 - github.com/bluesky-social/indigo v0.0.0-20241119234843-9198b7903723/go.mod h1:DRpwvwteIrSsbmyf6Mf+3NIy/s6LKrKLJFnqUh1eEsQ= 73 + github.com/bluesky-social/indigo v0.0.0-20250202033855-fd270fbccf0c h1:wbp2fKVXy5XtM1FfSagSFtl1vFm4CgA7vE3KEzX/XyQ= 74 + github.com/bluesky-social/indigo v0.0.0-20250202033855-fd270fbccf0c/go.mod h1:Qp4YqWf+AQ3TwQCxV5Ls8O2tXE55zVTGVs3zTmn7BOg= 75 + github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= 76 + github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= 59 77 github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= 60 78 github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= 61 79 github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= ··· 73 91 github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= 74 92 github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= 75 93 github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= 94 + github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= 95 + github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= 76 96 github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= 77 97 github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= 78 98 github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/esnpM7Geqxka4WSqI1SZc7sMJFd3y4= ··· 96 116 github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= 97 117 github.com/crate-crypto/go-kzg-4844 v1.0.0 h1:TsSgHwrkTKecKJ4kadtHi4b3xHW5dCFUDFnUp1TsawI= 98 118 github.com/crate-crypto/go-kzg-4844 v1.0.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= 119 + github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= 120 + github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0= 121 + github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis= 99 122 github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= 100 123 github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= 101 124 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= ··· 114 137 github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0/go.mod h1:3s92l0paYkZoIHuj4X93Teg/HB7eGM9x/zokGw+u4mY= 115 138 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= 116 139 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= 140 + github.com/dgryski/trifles v0.0.0-20230903005119-f50d829f2e54 h1:SG7nF6SRlWhcT7cNTs5R6Hk4V2lcmLz2NsG2VnInyNo= 141 + github.com/dgryski/trifles v0.0.0-20230903005119-f50d829f2e54/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= 117 142 github.com/dunglas/httpsfv v1.0.2 h1:iERDp/YAfnojSDJ7PW3dj1AReJz4MrwbECSSE59JWL0= 118 143 github.com/dunglas/httpsfv v1.0.2/go.mod h1:zID2mqw9mFsnt7YC3vYQ9/cjq30q41W+1AnDwH8TiMg= 119 144 github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= ··· 140 165 github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= 141 166 github.com/gliderlabs/ssh v0.3.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE= 142 167 github.com/gliderlabs/ssh v0.3.7/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8= 168 + github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= 169 + github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= 143 170 github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= 144 171 github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= 145 172 github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= ··· 159 186 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= 160 187 github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= 161 188 github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= 189 + github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg= 190 + github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= 162 191 github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= 163 192 github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= 164 193 github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= 194 + github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss= 195 + github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= 165 196 github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= 166 197 github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= 167 198 github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= ··· 196 227 github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= 197 228 github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= 198 229 github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= 230 + github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= 199 231 github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= 200 232 github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= 201 233 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= ··· 207 239 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 208 240 github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 209 241 github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 242 + github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= 243 + github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= 210 244 github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= 211 245 github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= 212 246 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= ··· 222 256 github.com/googleapis/gax-go/v2 v2.12.5/go.mod h1:BUDKcWo+RaKq5SC9vVYL0wLADa3VcfswbOMMRmB9H3E= 223 257 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= 224 258 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= 259 + github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= 260 + github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= 261 + github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= 262 + github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= 225 263 github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= 226 264 github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= 227 265 github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= ··· 238 276 github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= 239 277 github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= 240 278 github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= 279 + github.com/hashicorp/golang-lru/arc/v2 v2.0.6 h1:4NU7uP5vSoK6TbaMj3NtY478TTAWLso/vL1gpNrInHg= 280 + github.com/hashicorp/golang-lru/arc/v2 v2.0.6/go.mod h1:cfdDIX05DWvYV6/shsxDfa/OVcRieOt+q4FnM8x+Xno= 241 281 github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= 242 282 github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 243 283 github.com/holiman/uint256 v1.3.0 h1:4wdcm/tnd0xXdu7iS3ruNvxkWwrb4aeBQv19ayYn8F4= 244 284 github.com/holiman/uint256 v1.3.0/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= 285 + github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= 286 + github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= 245 287 github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs= 246 288 github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0= 247 289 github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA= 248 290 github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU= 291 + github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ= 292 + github.com/ipfs/go-bitswap v0.11.0/go.mod h1:05aE8H3XOU+LXpTedeAS0OZpcO1WFsj5niYQH9a1Tmk= 249 293 github.com/ipfs/go-block-format v0.2.0 h1:ZqrkxBA2ICbDRbK8KJs/u0O3dlp6gmAuuXUJNiW1Ycs= 250 294 github.com/ipfs/go-block-format v0.2.0/go.mod h1:+jpL11nFx5A/SPpsoBn6Bzkra/zaArfSmsknbPMYgzM= 295 + github.com/ipfs/go-blockservice v0.5.2 h1:in9Bc+QcXwd1apOVM7Un9t8tixPKdaHQFdLSUM1Xgk8= 296 + github.com/ipfs/go-blockservice v0.5.2/go.mod h1:VpMblFEqG67A/H2sHKAemeH9vlURVavlysbdUI632yk= 297 + github.com/ipfs/go-bs-sqlite3 v0.0.0-20221122195556-bfcee1be620d h1:9V+GGXCuOfDiFpdAHz58q9mKLg447xp0cQKvqQrAwYE= 298 + github.com/ipfs/go-bs-sqlite3 v0.0.0-20221122195556-bfcee1be620d/go.mod h1:pMbnFyNAGjryYCLCe59YDLRv/ujdN+zGJBT1umlvYRM= 251 299 github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= 252 300 github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= 253 301 github.com/ipfs/go-datastore v0.6.0 h1:JKyz+Gvz1QEZw0LsX1IBn+JFCJQH4SJVFtM4uWU0Myk= 254 302 github.com/ipfs/go-datastore v0.6.0/go.mod h1:rt5M3nNbSO/8q1t4LNkLyUwRs8HupMeN/8O4Vn9YAT8= 255 303 github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= 256 304 github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= 305 + github.com/ipfs/go-ds-flatfs v0.5.1 h1:ZCIO/kQOS/PSh3vcF1H6a8fkRGS7pOfwfPdx4n/KJH4= 306 + github.com/ipfs/go-ds-flatfs v0.5.1/go.mod h1:RWTV7oZD/yZYBKdbVIFXTX2fdY2Tbvl94NsWqmoyAX4= 257 307 github.com/ipfs/go-ipfs-blockstore v1.3.1 h1:cEI9ci7V0sRNivqaOr0elDsamxXFxJMMMy7PTTDQNsQ= 258 308 github.com/ipfs/go-ipfs-blockstore v1.3.1/go.mod h1:KgtZyc9fq+P2xJUiCAzbRdhhqJHvsw8u2Dlqy2MyRTE= 309 + github.com/ipfs/go-ipfs-blocksutil v0.0.1 h1:Eh/H4pc1hsvhzsQoMEP3Bke/aW5P5rVM1IWFJMcGIPQ= 310 + github.com/ipfs/go-ipfs-blocksutil v0.0.1/go.mod h1:Yq4M86uIOmxmGPUHv/uI7uKqZNtLb449gwKqXjIsnRk= 259 311 github.com/ipfs/go-ipfs-chunker v0.0.5 h1:ojCf7HV/m+uS2vhUGWcogIIxiO5ubl5O57Q7NapWLY8= 260 312 github.com/ipfs/go-ipfs-chunker v0.0.5/go.mod h1:jhgdF8vxRHycr00k13FM8Y0E+6BoalYeobXmUyTreP8= 313 + github.com/ipfs/go-ipfs-delay v0.0.1 h1:r/UXYyRcddO6thwOnhiznIAiSvxMECGgtv35Xs1IeRQ= 314 + github.com/ipfs/go-ipfs-delay v0.0.1/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= 261 315 github.com/ipfs/go-ipfs-ds-help v1.1.1 h1:B5UJOH52IbcfS56+Ul+sv8jnIV10lbjLF5eOO0C66Nw= 262 316 github.com/ipfs/go-ipfs-ds-help v1.1.1/go.mod h1:75vrVCkSdSFidJscs8n4W+77AtTpCIAdDGAwjitJMIo= 317 + github.com/ipfs/go-ipfs-exchange-interface v0.2.1 h1:jMzo2VhLKSHbVe+mHNzYgs95n0+t0Q69GQ5WhRDZV/s= 318 + github.com/ipfs/go-ipfs-exchange-interface v0.2.1/go.mod h1:MUsYn6rKbG6CTtsDp+lKJPmVt3ZrCViNyH3rfPGsZ2E= 319 + github.com/ipfs/go-ipfs-exchange-offline v0.3.0 h1:c/Dg8GDPzixGd0MC8Jh6mjOwU57uYokgWRFidfvEkuA= 320 + github.com/ipfs/go-ipfs-exchange-offline v0.3.0/go.mod h1:MOdJ9DChbb5u37M1IcbrRB02e++Z7521fMxqCNRrz9s= 321 + github.com/ipfs/go-ipfs-pq v0.0.3 h1:YpoHVJB+jzK15mr/xsWC574tyDLkezVrDNeaalQBsTE= 322 + github.com/ipfs/go-ipfs-pq v0.0.3/go.mod h1:btNw5hsHBpRcSSgZtiNm/SLj5gYIZ18AKtv3kERkRb4= 323 + github.com/ipfs/go-ipfs-routing v0.3.0 h1:9W/W3N+g+y4ZDeffSgqhgo7BsBSJwPMcyssET9OWevc= 324 + github.com/ipfs/go-ipfs-routing v0.3.0/go.mod h1:dKqtTFIql7e1zYsEuWLyuOU+E0WJWW8JjbTPLParDWo= 263 325 github.com/ipfs/go-ipfs-util v0.0.3 h1:2RFdGez6bu2ZlZdI+rWfIdbQb1KudQp3VGwPtdNCmE0= 264 326 github.com/ipfs/go-ipfs-util v0.0.3/go.mod h1:LHzG1a0Ig4G+iZ26UUOMjHd+lfM84LZCrn17xAKWBvs= 265 327 github.com/ipfs/go-ipld-cbor v0.1.0 h1:dx0nS0kILVivGhfWuB6dUpMa/LAwElHPw1yOGYopoYs= 266 328 github.com/ipfs/go-ipld-cbor v0.1.0/go.mod h1:U2aYlmVrJr2wsUBU67K4KgepApSZddGRDWBYR0H4sCk= 267 329 github.com/ipfs/go-ipld-format v0.6.0 h1:VEJlA2kQ3LqFSIm5Vu6eIlSxD/Ze90xtc4Meten1F5U= 268 330 github.com/ipfs/go-ipld-format v0.6.0/go.mod h1:g4QVMTn3marU3qXchwjpKPKgJv+zF+OlaKMyhJ4LHPg= 331 + github.com/ipfs/go-ipld-legacy v0.2.1 h1:mDFtrBpmU7b//LzLSypVrXsD8QxkEWxu5qVxN99/+tk= 332 + github.com/ipfs/go-ipld-legacy v0.2.1/go.mod h1:782MOUghNzMO2DER0FlBR94mllfdCJCkTtDtPM51otM= 333 + github.com/ipfs/go-libipfs v0.7.0 h1:Mi54WJTODaOL2/ZSm5loi3SwI3jI2OuFWUrQIkJ5cpM= 334 + github.com/ipfs/go-libipfs v0.7.0/go.mod h1:KsIf/03CqhICzyRGyGo68tooiBE2iFbI/rXW7FhAYr0= 269 335 github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8= 270 336 github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= 271 337 github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= 272 338 github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= 273 339 github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= 340 + github.com/ipfs/go-merkledag v0.11.0 h1:DgzwK5hprESOzS4O1t/wi6JDpyVQdvm9Bs59N/jqfBY= 341 + github.com/ipfs/go-merkledag v0.11.0/go.mod h1:Q4f/1ezvBiJV0YCIXvt51W/9/kqJGH4I1LsA7+djsM4= 274 342 github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg= 275 343 github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY= 344 + github.com/ipfs/go-peertaskqueue v0.8.1 h1:YhxAs1+wxb5jk7RvS0LHdyiILpNmRIRnZVztekOF0pg= 345 + github.com/ipfs/go-peertaskqueue v0.8.1/go.mod h1:Oxxd3eaK279FxeydSPPVGHzbwVeHjatZ2GA8XD+KbPU= 276 346 github.com/ipfs/go-unixfsnode v1.8.0 h1:yCkakzuE365glu+YkgzZt6p38CSVEBPgngL9ZkfnyQU= 277 347 github.com/ipfs/go-unixfsnode v1.8.0/go.mod h1:HxRu9HYHOjK6HUqFBAi++7DVoWAHn0o4v/nZ/VA+0g8= 348 + github.com/ipfs/go-verifcid v0.0.3 h1:gmRKccqhWDocCRkC+a59g5QW7uJw5bpX9HWBevXa0zs= 349 + github.com/ipfs/go-verifcid v0.0.3/go.mod h1:gcCtGniVzelKrbk9ooUSX/pM3xlH73fZZJDzQJRvOUw= 350 + github.com/ipld/go-car v0.6.1-0.20230509095817-92d28eb23ba4 h1:oFo19cBmcP0Cmg3XXbrr0V/c+xU9U1huEZp8+OgBzdI= 351 + github.com/ipld/go-car v0.6.1-0.20230509095817-92d28eb23ba4/go.mod h1:6nkFF8OmR5wLKBzRKi7/YFJpyYR7+oEn1DX+mMWnlLA= 278 352 github.com/ipld/go-car/v2 v2.13.1 h1:KnlrKvEPEzr5IZHKTXLAEub+tPrzeAFQVRlSQvuxBO4= 279 353 github.com/ipld/go-car/v2 v2.13.1/go.mod h1:QkdjjFNGit2GIkpQ953KBwowuoukoM75nP/JI1iDJdo= 280 354 github.com/ipld/go-codec-dagpb v1.6.0 h1:9nYazfyu9B1p3NAgfVdpRco3Fs2nFC72DqVsMj6rOcc= ··· 291 365 github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A= 292 366 github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= 293 367 github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= 368 + github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= 369 + github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= 294 370 github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= 295 371 github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= 296 372 github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= ··· 316 392 github.com/klauspost/compress v1.17.3/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= 317 393 github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= 318 394 github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= 395 + github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8= 396 + github.com/koron/go-ssdp v0.0.3/go.mod h1:b2MxI6yh02pKrsyNoQUsk4+YNikaGhe4894J+Q5lDvA= 319 397 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 320 398 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= 321 399 github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= ··· 329 407 github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= 330 408 github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= 331 409 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= 410 + github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= 411 + github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= 412 + github.com/libp2p/go-libp2p v0.25.1 h1:YK+YDCHpYyTvitKWVxa5PfElgIpOONU01X5UcLEwJGA= 413 + github.com/libp2p/go-libp2p v0.25.1/go.mod h1:xnK9/1d9+jeQCVvi/f1g12KqtVi/jP/SijtKV1hML3g= 414 + github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw= 415 + github.com/libp2p/go-libp2p-asn-util v0.2.0/go.mod h1:WoaWxbHKBymSN41hWSq/lGKJEca7TNm58+gGJi2WsLI= 416 + github.com/libp2p/go-libp2p-record v0.2.0 h1:oiNUOCWno2BFuxt3my4i1frNrt7PerzB3queqa1NkQ0= 417 + github.com/libp2p/go-libp2p-record v0.2.0/go.mod h1:I+3zMkvvg5m2OcSdoL0KPljyJyvNDFGKX7QdlpYUcwk= 418 + github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA= 419 + github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg= 420 + github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0= 421 + github.com/libp2p/go-msgio v0.3.0/go.mod h1:nyRM819GmVaF9LX3l03RMh10QdOroF++NBbxAb0mmDM= 422 + github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg= 423 + github.com/libp2p/go-nat v0.1.0/go.mod h1:X7teVkwRHNInVNWQiO/tAiAVRwSr5zoRz4YSTC3uRBM= 424 + github.com/libp2p/go-netroute v0.2.1 h1:V8kVrpD8GK0Riv15/7VN6RbUQ3URNZVosw7H2v9tksU= 425 + github.com/libp2p/go-netroute v0.2.1/go.mod h1:hraioZr0fhBjG0ZRXJJ6Zj2IVEVNx6tDTFQfSmcq7mQ= 332 426 github.com/livepeer/joy4 v0.1.2-0.20191121080656-b2fea45cbded/go.mod h1:xkDdm+akniYxVT9KW1Y2Y7Hso6aW+rZObz3nrA9yTHw= 333 427 github.com/livepeer/m3u8 v0.11.1 h1:VkUJzfNTyjy9mqsgp5JPvouwna8wGZMvd/gAfT5FinU= 334 428 github.com/livepeer/m3u8 v0.11.1/go.mod h1:IUqAtwWPAG2CblfQa4SVzTQoDcEMPyfNOaBSxqHMS04= ··· 347 441 github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= 348 442 github.com/microsoft/go-mssqldb v0.17.0 h1:Fto83dMZPnYv1Zwx5vHHxpNraeEaUlQ/hhHLgZiaenE= 349 443 github.com/microsoft/go-mssqldb v0.17.0/go.mod h1:OkoNGhGEs8EZqchVTtochlXruEhEOaO4S0d2sB5aeGQ= 444 + github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= 445 + github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= 350 446 github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU= 351 447 github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= 352 448 github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= ··· 364 460 github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= 365 461 github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= 366 462 github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= 463 + github.com/multiformats/go-multiaddr v0.8.0 h1:aqjksEcqK+iD/Foe1RRFsGZh8+XFiGo7FgUCZlpv3LU= 464 + github.com/multiformats/go-multiaddr v0.8.0/go.mod h1:Fs50eBDWvZu+l3/9S6xAE7ZYj6yhxlvaVZjakWN7xRs= 465 + github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= 466 + github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk= 467 + github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= 468 + github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= 367 469 github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= 368 470 github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= 369 471 github.com/multiformats/go-multicodec v0.9.0 h1:pb/dlPnzee/Sxv/j4PmkDRxCOi3hXTz3IbPKOXWJkmg= 370 472 github.com/multiformats/go-multicodec v0.9.0/go.mod h1:L3QTQvMIaVBkXOXXtVmYE+LI16i14xuaojr/H7Ai54k= 371 473 github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U= 372 474 github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= 475 + github.com/multiformats/go-multistream v0.4.1 h1:rFy0Iiyn3YT0asivDUIR05leAdwZq3de4741sbiSdfo= 476 + github.com/multiformats/go-multistream v0.4.1/go.mod h1:Mz5eykRVAjJWckE2U78c6xqdtyNUEhKSM0Lwar2p77Q= 373 477 github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= 374 478 github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= 375 479 github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= ··· 384 488 github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9/go.mod h1:x3N5drFsm2uilKKuuYo6LdyD8vZAW55sH/9w+pbo1sw= 385 489 github.com/peterbourgon/ff/v3 v3.3.1 h1:XSWvXxeNdgeppLNGGJEAOiXRdX2YMF/LuZfdnqQ1SNc= 386 490 github.com/peterbourgon/ff/v3 v3.3.1/go.mod h1:zjJVUhx+twciwfDl0zBcFzl4dW8axCRyXE/eKY9RztQ= 491 + github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= 492 + github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= 387 493 github.com/pion/datachannel v1.5.9 h1:LpIWAOYPyDrXtU+BW7X0Yt/vGtYxtXQ8ql7dFfYUVZA= 388 494 github.com/pion/datachannel v1.5.9/go.mod h1:kDUuk4CU4Uxp82NH4LQZbISULkX/HtzKa4P7ldf9izE= 389 495 github.com/pion/dtls/v3 v3.0.4 h1:44CZekewMzfrn9pmGrj5BNnTMDCFwr+6sLH+cCuLM7U= ··· 420 526 github.com/piprate/json-gold v0.5.0/go.mod h1:WZ501QQMbZZ+3pXFPhQKzNwS1+jls0oqov3uQ2WasLs= 421 527 github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= 422 528 github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= 529 + github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= 423 530 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 424 531 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= 425 532 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= ··· 441 548 github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= 442 549 github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= 443 550 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= 551 + github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= 444 552 github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= 445 553 github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= 446 554 github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= ··· 450 558 github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 451 559 github.com/samber/slog-http v1.4.0 h1:s2hSzMlQBFDIPTUBDm6G+SGfv7F4xR9q8edjxtY6aho= 452 560 github.com/samber/slog-http v1.4.0/go.mod h1:n6h4x2ZBeTgLqMKf95EuNlU6mcJF1b/RVLxo1od5+V0= 561 + github.com/scylladb/gocql v1.14.4 h1:MhevwCfyAraQ6RvZYFO3pF4Lt0YhvQlfg8Eo2HEqVQA= 562 + github.com/scylladb/gocql v1.14.4/go.mod h1:ZLEJ0EVE5JhmtxIW2stgHq/v1P4fWap0qyyXSKyV8K0= 453 563 github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= 454 564 github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= 455 565 github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= ··· 466 576 github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= 467 577 github.com/smartystreets/goconvey v1.7.2 h1:9RBaZCeXEQ3UselpuwUQHltGVXvdwm6cv1hgR6gDIPg= 468 578 github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM= 579 + github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= 580 + github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= 469 581 github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= 470 582 github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= 471 583 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= ··· 497 609 github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= 498 610 github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w= 499 611 github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ= 612 + github.com/vektah/gqlparser/v2 v2.5.22 h1:yaaeJ0fu+nv1vUMW0Hl+aS1eiv1vMfapBNjpffAda1I= 613 + github.com/vektah/gqlparser/v2 v2.5.22/go.mod h1:xMl+ta8a5M1Yo1A1Iwt/k7gSpscwSnHZdw7tfhEGfTM= 500 614 github.com/warpfork/go-testmark v0.12.1 h1:rMgCpJfwy1sJ50x0M0NgyphxYYPMOODIJHhsXyEHU0s= 501 615 github.com/warpfork/go-testmark v0.12.1/go.mod h1:kHwy7wfvGSPh1rQJYKayD4AbtNaeyZdcGi9tNJTaa5Y= 502 616 github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0 h1:GDDkbFiaK8jsSDJfjId/PEGEShv6ugrt4kYsC5UIDaQ= ··· 561 675 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= 562 676 golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= 563 677 golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= 564 - golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= 565 - golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= 678 + golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= 679 + golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= 566 680 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 567 681 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= 568 682 golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= ··· 578 692 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 579 693 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= 580 694 golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 695 + golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= 696 + golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= 581 697 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 582 698 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 583 699 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= ··· 590 706 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 591 707 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= 592 708 golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 709 + golang.org/x/net v0.0.0-20220526153639-5463443f8c37/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 593 710 golang.org/x/net v0.0.0-20220708220712-1185a9018129/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 594 711 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 595 712 golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= 596 713 golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 597 714 golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= 598 - golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= 599 - golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= 715 + golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= 716 + golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= 600 717 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= 601 718 golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= 602 719 golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= ··· 608 725 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 609 726 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 610 727 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 611 - golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= 612 - golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 728 + golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= 729 + golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 613 730 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 614 731 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 615 732 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= ··· 630 747 golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 631 748 golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 632 749 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 633 - golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= 634 - golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 750 + golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= 751 + golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 635 752 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 636 753 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 637 754 golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= 638 755 golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 639 756 golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= 640 - golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= 641 - golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= 757 + golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= 758 + golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= 642 759 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 643 760 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 644 761 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= ··· 646 763 golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 647 764 golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 648 765 golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= 649 - golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= 650 - golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= 766 + golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= 767 + golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= 651 768 golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= 652 769 golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= 653 770 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= ··· 665 782 golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 666 783 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 667 784 golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= 785 + golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= 786 + golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= 668 787 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 669 788 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 670 789 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= ··· 704 823 google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= 705 824 google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= 706 825 google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= 707 - google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= 708 - google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 826 + google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= 827 + google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 709 828 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 710 829 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 711 830 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 712 831 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= 713 832 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= 714 833 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= 834 + gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= 835 + gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= 715 836 gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= 716 837 gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= 717 838 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= ··· 742 863 lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= 743 864 rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= 744 865 rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= 866 + sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= 867 + sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
+1
js/app/.gitignore
··· 58 58 android 59 59 code-signing-dev 60 60 generated 61 + lexicons
+140
js/app/components/create-livestream.tsx
··· 1 + import { useEffect, useState } from "react"; 2 + import { Button, Label, Paragraph, TextArea, View } from "tamagui"; 3 + import { Switch } from "react-native"; 4 + import { useToastController } from "@tamagui/toast"; 5 + import { useIsFocused } from "@react-navigation/native"; 6 + import { 7 + createLivestreamRecord, 8 + golivePost, 9 + selectNewLivestream, 10 + selectUserProfile, 11 + } from "features/bluesky/blueskySlice"; 12 + import { useAppDispatch, useAppSelector } from "store/hooks"; 13 + import { useLiveUser } from "hooks/useLiveUser"; 14 + 15 + const Left = ({ children }: { children: React.ReactNode }) => { 16 + return ( 17 + <View f={2} fg={2} fb={0}> 18 + {children} 19 + </View> 20 + ); 21 + }; 22 + 23 + const Right = ({ children }: { children: React.ReactNode }) => { 24 + return ( 25 + <View f={6} fb={0} fg={6}> 26 + {children} 27 + </View> 28 + ); 29 + }; 30 + 31 + export default function CreateLivestream() { 32 + const dispatch = useAppDispatch(); 33 + const toast = useToastController(); 34 + // const { url } = useAquareumNode(); 35 + const userIsLive = useLiveUser(); 36 + const isFocused = useIsFocused(); 37 + const [title, setTitle] = useState(""); 38 + const [loading, setLoading] = useState(false); 39 + const [postToBluesky, setPostToBluesky] = useState(true); 40 + const profile = useAppSelector(selectUserProfile); 41 + const newLivestream = useAppSelector(selectNewLivestream); 42 + useEffect(() => { 43 + if (newLivestream?.record) { 44 + toast.show("Livestream announced", { 45 + message: newLivestream.record.title, 46 + }); 47 + setTitle(""); 48 + } 49 + }, [newLivestream?.record]); 50 + useEffect(() => { 51 + if (newLivestream?.error) { 52 + toast.show("Error creating livestream", { 53 + message: newLivestream.error, 54 + }); 55 + } 56 + }, [newLivestream?.error]); 57 + const disabled = !userIsLive || loading || title === ""; 58 + 59 + return ( 60 + <View 61 + f={1} 62 + ai="stretch" 63 + jc="center" 64 + gap="$4" 65 + w="100%" 66 + p="$4" 67 + maxWidth={500} 68 + > 69 + <Label asChild={true} display="flex"> 70 + <View flexDirection="row"> 71 + <Left> 72 + <Paragraph pb="$2">Streamer</Paragraph> 73 + </Left> 74 + <Right> 75 + <Paragraph pb="$2">@{profile?.handle}</Paragraph> 76 + </Right> 77 + </View> 78 + </Label> 79 + <Label asChild={true}> 80 + <View flexDirection="row"> 81 + <Left> 82 + <Paragraph pb="$2">Title</Paragraph> 83 + </Left> 84 + <Right> 85 + <TextArea 86 + value={title} 87 + onChangeText={setTitle} 88 + size="$4" 89 + minHeight={100} 90 + maxLength={140} 91 + /> 92 + </Right> 93 + </View> 94 + </Label> 95 + <Label asChild={true}> 96 + <View flexDirection="row"> 97 + <Left> 98 + <Paragraph pb="$2" pr="$2" lh={16}> 99 + Post to Bluesky 100 + </Paragraph> 101 + </Left> 102 + <Right> 103 + <View f={1} jc="center" alignItems="flex-start"> 104 + <Switch 105 + value={postToBluesky} 106 + onValueChange={setPostToBluesky} 107 + ></Switch> 108 + </View> 109 + </Right> 110 + </View> 111 + </Label> 112 + <View gap="$2" w="100%"> 113 + <Button 114 + disabled={disabled} 115 + opacity={disabled ? 0.5 : 1} 116 + w="100%" 117 + size="$4" 118 + onPress={() => { 119 + dispatch(createLivestreamRecord({ title })); 120 + if (postToBluesky) { 121 + dispatch(golivePost({ text: title })); 122 + } 123 + }} 124 + > 125 + {buttonText(loading, userIsLive)} 126 + </Button> 127 + </View> 128 + </View> 129 + ); 130 + } 131 + 132 + const buttonText = (loading: boolean, userIsLive: boolean) => { 133 + if (loading) { 134 + return "Loading..."; 135 + } 136 + if (!userIsLive) { 137 + return "Waiting for stream to start..."; 138 + } 139 + return "Announce Livestream!"; 140 + };
+11
js/app/components/live-dashboard/waiting.tsx
··· 1 + import Loading from "components/loading/loading"; 2 + import { View, Text } from "tamagui"; 3 + 4 + export default function Waiting() { 5 + return ( 6 + <View marginTop="$10" flexDirection="row" ai="center" jc="center"> 7 + <Loading /> 8 + <Text marginLeft="$5">Waiting for stream to start...</Text> 9 + </View> 10 + ); 11 + }
+1 -1
js/app/components/player/video.tsx
··· 23 23 import { useAppDispatch, useAppSelector } from "store/hooks"; 24 24 import { selectStoredKey } from "features/bluesky/blueskySlice"; 25 25 import { usePlayer } from "features/player/playerSlice"; 26 - import streamKey from "src/screens/stream-key"; 26 + import streamKey from "components/live-dashboard/stream-key"; 27 27 import { quietReceiver } from "./av-sync"; 28 28 29 29 type VideoProps = PlayerProps & { url: string };
+1 -3
js/app/components/settings/updates.native.tsx
··· 1 - import { StatusBar } from "expo-status-bar"; 2 1 import * as ExpoUpdates from "expo-updates"; 3 2 import { useEffect, useState } from "react"; 4 - import { Button, H2, H5, ScrollView, Text, View } from "tamagui"; 5 - import Constants from "expo-constants"; 3 + import { Button, H2, H5, Text, View } from "tamagui"; 6 4 import { ToastViewport, useToastController } from "@tamagui/toast"; 7 5 import pkg from "../../package.json"; 8 6 import { Platform } from "react-native";
+28 -38
js/app/components/stream-list/stream-list.tsx
··· 1 1 import AQLink from "components/aqlink"; 2 2 import ErrorBox from "components/error/error"; 3 3 import Loading from "components/loading/loading"; 4 + import { 5 + pollSegments, 6 + selectRecentSegments, 7 + } from "features/streamplace/streamplaceSlice"; 4 8 import useStreamplaceNode from "hooks/useStreamplaceNode"; 5 9 import { useEffect, useState } from "react"; 6 10 import { RefreshControl } from "react-native"; 11 + import { useAppDispatch, useAppSelector } from "store/hooks"; 7 12 import { H6, Image, ScrollView, ScrollViewProps, Text, View } from "tamagui"; 8 13 9 14 type Segment = { ··· 30 35 string 31 36 >; 32 37 }) { 33 - const [streams, setStreams] = useState<Segment[]>([]); 34 - const [error, setError] = useState<boolean>(false); 35 - const [loading, setLoading] = useState<boolean>(false); 36 - const [retryTime, setRetryTime] = useState<number>(Date.now()); 37 38 const { url } = useStreamplaceNode(); 39 + const { segments, error, loading } = useAppSelector(selectRecentSegments); 40 + const dispatch = useAppDispatch(); 41 + const [manualRefresh, setManualRefresh] = useState(false); 38 42 useEffect(() => { 39 - const interval = setInterval(() => { 40 - setRetryTime(Date.now()); 41 - }, 10000); 42 - return () => clearInterval(interval); 43 + dispatch(pollSegments()); 43 44 }, []); 44 45 useEffect(() => { 45 - setLoading(true); 46 - (async () => { 47 - try { 48 - const res = await fetch(`${url}/api/live-users`); 49 - if (!res.ok) { 50 - return; 51 - } 52 - const data = await res.json(); 53 - if (!Array.isArray(data)) { 54 - throw new Error("got non-array back from /api/live-users"); 55 - } 56 - setError(false); 57 - setStreams(data); 58 - } catch (e) { 59 - console.error(e); 60 - setError(true); 61 - } finally { 62 - setLoading(false); 63 - } 64 - })(); 65 - }, [url, retryTime]); 46 + if (!loading) { 47 + setManualRefresh(false); 48 + } 49 + }, [loading]); 66 50 if (error) { 51 + if (loading) { 52 + return <Loading />; 53 + } 67 54 return ( 68 55 <ErrorBox 69 56 onRetry={() => { 70 - setError(false); 71 - setRetryTime(Date.now()); 57 + dispatch(pollSegments()); 72 58 }} 73 59 /> 74 60 ); 75 - } 76 - if (loading && streams.length === 0) { 77 - return <Loading></Loading>; 78 61 } 79 62 return ( 80 63 <ScrollView ··· 86 69 }} 87 70 refreshControl={ 88 71 <RefreshControl 89 - refreshing={loading} 90 - onRefresh={() => setRetryTime(Date.now())} 72 + refreshing={manualRefresh} 73 + onRefresh={() => { 74 + dispatch(pollSegments()); 75 + setManualRefresh(true); 76 + }} 91 77 /> 92 78 } 93 79 > 94 - {streams.map((segment, i) => { 80 + {segments.map((segment, i) => { 95 81 const user = 96 82 segment.repo?.handle || segment.repoDID || segment.signingKeyDID; 97 83 return ( ··· 163 149 ); 164 150 })} 165 151 <View f={1} justifyContent="center" alignItems="center"> 166 - {streams.length === 0 && <H6>No one is streaming right now 😭</H6>} 152 + {segments.length === 0 && ( 153 + <> 154 + <H6>No one is streaming right now 😭</H6> 155 + </> 156 + )} 167 157 </View> 168 158 </ScrollView> 169 159 );
-11
js/app/features/bluesky/blueskyProvider.tsx
··· 1 1 import { useURL } from "expo-linking"; 2 - import { putIdentity } from "features/streamplace/streamplaceSlice"; 3 2 import useWallet from "hooks/useWallet"; 4 3 import { useEffect, useState } from "react"; 5 4 import { useAppDispatch, useAppSelector } from "store/hooks"; ··· 42 41 useEffect(() => { 43 42 if (oauthSession && !userProfile) { 44 43 dispatch(getProfile(oauthSession.did)); 45 - } 46 - if (oauthSession && userProfile && wallet.address) { 47 - dispatch( 48 - putIdentity({ 49 - handle: userProfile.handle, 50 - did: oauthSession?.did, 51 - address: wallet.address, 52 - signTypedData: wallet.signTypedData, 53 - }), 54 - ); 55 44 } 56 45 }, [oauthSession, userProfile, wallet.address]); 57 46 return <>{children}</>;
+87 -41
js/app/features/bluesky/blueskySlice.tsx
··· 1 1 import { Agent } from "@atproto/api"; 2 - import { ProfileViewDetailed } from "@atproto/api/dist/client/types/app/bsky/actor/defs"; 3 - import { OAuthSession } from "@atproto/oauth-client"; 4 2 import { StreamplaceState } from "features/streamplace/streamplaceSlice"; 5 3 import { openLoginLink } from "features/platform/platformSlice"; 6 4 import Storage from "storage"; 7 5 import { createAppSlice } from "../../hooks/createSlice"; 8 - import createOAuthClient, { StreamplaceOAuthClient } from "./oauthClient"; 6 + import createOAuthClient from "./oauthClient"; 9 7 import { Secp256k1Keypair, bytesToMultibase } from "@atproto/crypto"; 10 8 import { privateKeyToAccount } from "viem/accounts"; 11 - import { StreamKey } from "features/base/baseSlice"; 12 9 import { hydrate, STORED_KEY_KEY } from "features/base/baseSlice"; 13 10 import { isWeb } from "tamagui"; 14 - 15 - export interface BlueskyState { 16 - status: "start" | "loggedIn" | "loggedOut"; 17 - oauthState: null | string; 18 - oauthSession: null | OAuthSession; 19 - pdsAgent: null | Agent; 20 - profiles: { [key: string]: ProfileViewDetailed }; 21 - client: null | StreamplaceOAuthClient; 22 - login: { 23 - loading: boolean; 24 - error: null | string; 25 - }; 26 - pds: { 27 - url: string; 28 - loading: boolean; 29 - error: null | string; 30 - }; 31 - newKey: null | StreamKey; 32 - storedKey: null | StreamKey; 33 - } 11 + import { PlaceStreamKey, PlaceStreamLivestream } from "lexicons"; 12 + import { BlueskyState } from "./blueskyTypes"; 34 13 35 14 const initialState: BlueskyState = { 36 15 status: "start", ··· 50 29 }, 51 30 newKey: null, 52 31 storedKey: null, 32 + newLivestream: null, 53 33 }; 54 34 55 35 // clear atproto login query params from url ··· 113 93 client: client, 114 94 }; 115 95 }, 116 - rejected: (_, { error }) => { 117 - console.error("loadOAuthClient rejected", error); 118 - // state.status = "failed"; 96 + rejected: (state, { error }) => { 97 + return { 98 + ...state, 99 + status: "loggedOut", 100 + }; 119 101 }, 120 102 }, 121 103 ), ··· 173 155 logout: create.asyncThunk( 174 156 async (_, thunkAPI) => { 175 157 await Storage.removeItem("did"); 158 + await Storage.removeItem(STORED_KEY_KEY); 176 159 const { bluesky } = thunkAPI.getState() as { 177 160 bluesky: BlueskyState; 178 161 }; ··· 284 267 ), 285 268 286 269 golivePost: create.asyncThunk( 287 - async ( 288 - { 289 - nodeUrl, 290 - signingKey, 291 - text, 292 - }: { nodeUrl: string; signingKey: string; text: string }, 293 - thunkAPI, 294 - ) => { 295 - const { bluesky } = thunkAPI.getState() as { 270 + async ({ text }: { text: string }, thunkAPI) => { 271 + const { bluesky, streamplace } = thunkAPI.getState() as { 296 272 bluesky: BlueskyState; 273 + streamplace: StreamplaceState; 297 274 }; 298 275 if (!bluesky.pdsAgent) { 299 276 throw new Error("No agent"); ··· 306 283 if (!profile) { 307 284 throw new Error("No profile"); 308 285 } 309 - const u = new URL(nodeUrl); 286 + const u = new URL(streamplace.url); 310 287 const params = new URLSearchParams({ 311 - key: signingKey, 312 288 did: did, 313 289 time: new Date().toISOString(), 314 290 }); ··· 334 310 ]; 335 311 const record = { 336 312 text: content, 337 - "place.stream.key": signingKey, 338 313 facets, 339 314 }; 340 315 return await bluesky.pdsAgent.post(record); ··· 347 322 console.log("golivePost fulfilled", action.payload); 348 323 }, 349 324 rejected: (state, action) => { 350 - console.error("getProfile rejected", action.error); 325 + console.error("golivePost rejected", action.error); 351 326 // state.status = "failed"; 352 327 }, 353 328 }, ··· 386 361 did: keypair.did(), 387 362 address: account.address.toLowerCase(), 388 363 }; 389 - const record = { 364 + const record: PlaceStreamKey.Record = { 390 365 signingKey: keypair.did(), 391 366 createdAt: new Date().toISOString(), 392 367 }; ··· 464 439 }, 465 440 }, 466 441 ), 442 + 443 + createLivestreamRecord: create.asyncThunk( 444 + async ({ title }: { title }, thunkAPI) => { 445 + const { bluesky, streamplace } = thunkAPI.getState() as { 446 + bluesky: BlueskyState; 447 + streamplace: StreamplaceState; 448 + }; 449 + if (!bluesky.pdsAgent) { 450 + throw new Error("No agent"); 451 + } 452 + const did = bluesky.oauthSession?.did; 453 + if (!did) { 454 + throw new Error("No DID"); 455 + } 456 + const profile = bluesky.profiles[did]; 457 + if (!profile) { 458 + throw new Error("No profile"); 459 + } 460 + if (!did) { 461 + throw new Error("No DID"); 462 + } 463 + const record: PlaceStreamLivestream.Record = { 464 + title: title, 465 + url: streamplace.url, 466 + createdAt: new Date().toISOString(), 467 + }; 468 + await bluesky.pdsAgent.com.atproto.repo.createRecord({ 469 + repo: did, 470 + collection: "place.stream.livestream", 471 + record, 472 + }); 473 + return record; 474 + }, 475 + { 476 + pending: (state) => { 477 + return { 478 + ...state, 479 + newLivestream: { 480 + loading: true, 481 + error: null, 482 + record: null, 483 + }, 484 + }; 485 + }, 486 + fulfilled: (state, action) => { 487 + return { 488 + ...state, 489 + newLivestream: { 490 + loading: false, 491 + error: null, 492 + record: action.payload, 493 + }, 494 + }; 495 + }, 496 + rejected: (state, action) => { 497 + console.error("getProfile rejected", action.error); 498 + return { 499 + ...state, 500 + newLivestream: { 501 + loading: false, 502 + error: action.error?.message ?? null, 503 + record: null, 504 + }, 505 + }; 506 + }, 507 + }, 508 + ), 467 509 }), 468 510 469 511 // You can define your selectors here. These selectors receive the slice ··· 492 534 if (!profile) { 493 535 return false; 494 536 } 537 + 495 538 return true; 496 539 }, 540 + selectNewLivestream: (bluesky) => bluesky.newLivestream, 497 541 }, 498 542 }); 499 543 ··· 508 552 setPDS, 509 553 createStreamKeyRecord, 510 554 clearStreamKeyRecord, 555 + createLivestreamRecord, 511 556 } = blueskySlice.actions; 512 557 513 558 // Selectors returned by `slice.selectors` take the root state as their first argument. ··· 519 564 selectLogin, 520 565 selectStoredKey, 521 566 selectIsReady, 567 + selectNewLivestream, 522 568 } = blueskySlice.selectors;
+33
js/app/features/bluesky/blueskyTypes.tsx
··· 1 + import { OAuthSession } from "@aquareum/atproto-oauth-client-react-native"; 2 + import { Agent } from "@atproto/api"; 3 + import { ProfileViewDetailed } from "@atproto/api/dist/client/types/app/bsky/actor/defs"; 4 + import { StreamKey } from "features/base/baseSlice"; 5 + import { StreamplaceOAuthClient } from "./oauthClient"; 6 + import { PlaceStreamLivestream } from "lexicons"; 7 + 8 + type NewLivestream = { 9 + loading: boolean; 10 + error: string | null; 11 + record: PlaceStreamLivestream.Record | null; 12 + }; 13 + 14 + export interface BlueskyState { 15 + status: "start" | "loggedIn" | "loggedOut"; 16 + oauthState: null | string; 17 + oauthSession: null | OAuthSession; 18 + pdsAgent: null | Agent; 19 + profiles: { [key: string]: ProfileViewDetailed }; 20 + client: null | StreamplaceOAuthClient; 21 + login: { 22 + loading: boolean; 23 + error: null | string; 24 + }; 25 + pds: { 26 + url: string; 27 + loading: boolean; 28 + error: null | string; 29 + }; 30 + newKey: null | StreamKey; 31 + storedKey: null | StreamKey; 32 + newLivestream: null | NewLivestream; 33 + }
+169 -7
js/app/features/platform/platformSlice.native.tsx
··· 1 1 import { openAuthSessionAsync } from "expo-web-browser"; 2 2 import { createAppSlice } from "../../hooks/createSlice"; 3 3 import { oauthCallback } from "features/bluesky/blueskySlice"; 4 - 5 - export interface PlatformState { 6 - status: "idle" | "loading" | "failed"; 7 - } 4 + import messaging from "@react-native-firebase/messaging"; 5 + import { Platform, PermissionsAndroid } from "react-native"; 6 + import { 7 + initialState, 8 + RegisterNotificationTokenBody, 9 + PlatformState, 10 + } from "./shared"; 11 + import { BlueskyState } from "features/bluesky/blueskyTypes"; 8 12 9 - const initialState: PlatformState = { 10 - status: "idle", 13 + const checkApplicationPermission = async () => { 14 + if (Platform.OS === "android") { 15 + try { 16 + await PermissionsAndroid.request( 17 + PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS, 18 + ); 19 + } catch (error) { 20 + console.log("error getting notifications ", error); 21 + } 22 + } 11 23 }; 12 24 13 25 export const platformSlice = createAppSlice({ 14 26 name: "platform", 15 27 initialState, 16 28 reducers: (create) => ({ 29 + handleNotification: create.reducer( 30 + ( 31 + state, 32 + action: { payload: { [key: string]: string | object } | undefined }, 33 + ) => { 34 + if (!action.payload) { 35 + return state; 36 + } 37 + if (typeof action.payload.path !== "string") { 38 + return state; 39 + } 40 + return { 41 + ...state, 42 + notificationDestination: action.payload.path, 43 + }; 44 + }, 45 + ), 46 + clearNotification: create.reducer((state) => { 47 + return { 48 + ...state, 49 + notificationDestination: null, 50 + }; 51 + }), 17 52 openLoginLink: create.asyncThunk( 18 53 async (url: string, thunkAPI) => { 19 54 console.log("openLoginLink", url); ··· 35 70 }, 36 71 }, 37 72 ), 73 + 74 + initPushNotifications: create.asyncThunk( 75 + async (_, thunkAPI) => { 76 + const msg = messaging(); 77 + messaging().setBackgroundMessageHandler(async (remoteMessage) => { 78 + console.log("Message handled in the background!", remoteMessage); 79 + }); 80 + await checkApplicationPermission(); 81 + const authorizationStatus = await msg.requestPermission(); 82 + 83 + let perms = ""; 84 + 85 + if (authorizationStatus === messaging.AuthorizationStatus.AUTHORIZED) { 86 + console.log("User has notification permissions enabled."); 87 + perms += "authorized"; 88 + } else if ( 89 + authorizationStatus === messaging.AuthorizationStatus.PROVISIONAL 90 + ) { 91 + console.log("User has provisional notification permissions."); 92 + perms += "provisional"; 93 + } else { 94 + console.log("User has notification permissions disabled"); 95 + perms += "disabled"; 96 + } 97 + 98 + const token = await msg.getToken(); 99 + 100 + messaging() 101 + .subscribeToTopic("live") 102 + .then(() => console.log("Subscribed to live!")); 103 + 104 + messaging().onMessage((remoteMessage) => { 105 + console.log("Foreground message:", remoteMessage); 106 + // Display the notification to the user 107 + }); 108 + messaging().onNotificationOpenedApp((remoteMessage) => { 109 + console.log( 110 + "App opened by notification while in foreground:", 111 + remoteMessage, 112 + ); 113 + thunkAPI.dispatch(handleNotification(remoteMessage.data)); 114 + // Handle notification interaction when the app is in the foreground 115 + }); 116 + messaging() 117 + .getInitialNotification() 118 + .then((remoteMessage) => { 119 + if (!remoteMessage) { 120 + return; 121 + } 122 + console.log( 123 + "App opened by notification from closed state:", 124 + remoteMessage, 125 + ); 126 + thunkAPI.dispatch(handleNotification(remoteMessage.data)); 127 + }); 128 + 129 + return { token }; 130 + }, 131 + { 132 + pending: (state) => {}, 133 + fulfilled: (state, { payload }) => { 134 + return { 135 + ...state, 136 + notificationToken: payload.token, 137 + }; 138 + }, 139 + rejected: (state) => {}, 140 + }, 141 + ), 142 + 143 + registerNotificationToken: create.asyncThunk( 144 + async (_, thunkAPI) => { 145 + if (typeof process.env.EXPO_PUBLIC_STREAMPLACE_URL !== "string") { 146 + console.log("process.env.EXPO_PUBLIC_STREAMPLACE_URL undefined!"); 147 + return; 148 + } 149 + const { platform, bluesky } = thunkAPI.getState() as { 150 + platform: PlatformState; 151 + bluesky: BlueskyState; 152 + }; 153 + if (!platform.notificationToken) { 154 + throw new Error("No notification token"); 155 + } 156 + const body: RegisterNotificationTokenBody = { 157 + token: platform.notificationToken, 158 + }; 159 + const did = bluesky.oauthSession?.did; 160 + if (did) { 161 + body.repoDID = did; 162 + } 163 + try { 164 + const res = await fetch( 165 + `${process.env.EXPO_PUBLIC_STREAMPLACE_URL}/api/notification`, 166 + { 167 + method: "POST", 168 + headers: { 169 + "content-type": "application/json", 170 + }, 171 + body: JSON.stringify(body), 172 + }, 173 + ); 174 + console.log({ status: res.status }); 175 + } catch (e) { 176 + console.log(e); 177 + } 178 + }, 179 + { 180 + pending: (state) => {}, 181 + fulfilled: (state) => {}, 182 + rejected: (state) => {}, 183 + }, 184 + ), 38 185 }), 186 + 187 + selectors: { 188 + selectNotificationToken: (platform) => platform.notificationToken, 189 + selectNotificationDestination: (platform) => 190 + platform.notificationDestination, 191 + }, 39 192 }); 40 193 41 - export const { openLoginLink } = platformSlice.actions; 194 + export const { 195 + openLoginLink, 196 + initPushNotifications, 197 + registerNotificationToken, 198 + handleNotification, 199 + clearNotification, 200 + } = platformSlice.actions; 201 + 202 + export const { selectNotificationToken, selectNotificationDestination } = 203 + platformSlice.selectors;
+41 -9
js/app/features/platform/platformSlice.tsx
··· 1 1 import { createAppSlice } from "../../hooks/createSlice"; 2 - 3 - export interface PlatformState { 4 - status: "idle" | "loading" | "failed"; 5 - } 6 - 7 - const initialState: PlatformState = { 8 - status: "idle", 9 - }; 2 + import { initialState } from "./shared"; 10 3 11 4 export const platformSlice = createAppSlice({ 12 5 name: "platform", 13 6 initialState, 14 7 reducers: (create) => ({ 8 + handleNotification: create.reducer( 9 + ( 10 + state, 11 + action: { payload: { [key: string]: string | object } | undefined }, 12 + ) => { 13 + return state; 14 + }, 15 + ), 16 + clearNotification: create.reducer((state) => { 17 + return { 18 + ...state, 19 + notificationDestination: null, 20 + }; 21 + }), 15 22 openLoginLink: create.asyncThunk( 16 23 async (url: string) => { 17 24 window.location.href = url; ··· 28 35 }, 29 36 }, 30 37 ), 38 + 39 + initPushNotifications: create.asyncThunk( 40 + async () => { 41 + // someday we'll do web notifications but for now it's mobile-only 42 + }, 43 + { 44 + pending: (state) => {}, 45 + fulfilled: (state) => {}, 46 + rejected: (state) => {}, 47 + }, 48 + ), 49 + 50 + registerNotificationToken: create.asyncThunk(async () => {}, { 51 + pending: (state) => {}, 52 + fulfilled: (state) => {}, 53 + rejected: (state) => {}, 54 + }), 31 55 }), 56 + 57 + selectors: { 58 + selectNotificationToken: (platform) => platform.notificationToken, 59 + selectNotificationDestination: (platform) => 60 + platform.notificationDestination, 61 + }, 32 62 }); 33 63 34 - export const { openLoginLink } = platformSlice.actions; 64 + export const { openLoginLink, clearNotification } = platformSlice.actions; 65 + export const { selectNotificationToken, selectNotificationDestination } = 66 + platformSlice.selectors;
+16
js/app/features/platform/shared.tsx
··· 1 + export interface PlatformState { 2 + status: "idle" | "loading" | "failed"; 3 + notificationToken: string | null; 4 + notificationDestination: string | null; 5 + } 6 + 7 + export const initialState: PlatformState = { 8 + status: "idle", 9 + notificationToken: null, 10 + notificationDestination: null, 11 + }; 12 + 13 + export type RegisterNotificationTokenBody = { 14 + token: string; 15 + repoDID?: string; 16 + };
+65 -58
js/app/features/streamplace/streamplaceSlice.tsx
··· 1 1 import { createAppSlice } from "../../hooks/createSlice"; 2 2 import { isWeb } from "tamagui"; 3 - import { SignTypedDataFn } from "hooks/useWallet.shared"; 4 - import schema from "generated/eip712-schema.json"; 5 3 import Storage from "../../storage"; 6 4 7 5 let DEFAULT_URL = process.env.EXPO_PUBLIC_STREAMPLACE_URL as string; ··· 14 12 } 15 13 export { DEFAULT_URL }; 16 14 15 + export type Segment = { 16 + id: string; 17 + repoDID: string; 18 + signingKeyDID: string; 19 + startTime: string; 20 + repo: Repo; 21 + }; 22 + 23 + export type Repo = { 24 + did: string; 25 + handle: string; 26 + pds: string; 27 + version: string; 28 + rootCid: string; 29 + }; 30 + 17 31 export interface Identity { 18 32 id: string; 19 33 handle?: string; ··· 24 38 url: string; 25 39 identity: Identity | null; 26 40 initialized: boolean; 41 + recentSegments: { 42 + segments: Segment[]; 43 + error: string | null; 44 + loading: boolean; 45 + }; 27 46 } 28 47 29 48 const initialState: StreamplaceState = { 30 49 url: DEFAULT_URL, 31 50 identity: null, 32 51 initialized: false, 52 + recentSegments: { 53 + segments: [], 54 + error: null, 55 + loading: false, 56 + }, 33 57 }; 34 58 35 59 export const streamplaceSlice = createAppSlice({ ··· 97 121 }, 98 122 ), 99 123 100 - putIdentity: create.asyncThunk( 101 - async ( 102 - { 103 - handle, 104 - did, 105 - address, 106 - signTypedData, 107 - }: { 108 - handle: string; 109 - did: string; 110 - address: string; 111 - signTypedData: SignTypedDataFn; 112 - }, 113 - { getState, dispatch }, 114 - ) => { 115 - let { streamplace } = getState() as { 116 - streamplace: StreamplaceState; 117 - }; 118 - if (!streamplace.identity) { 119 - await dispatch(getIdentity()); 120 - } 121 - ({ streamplace } = getState() as { 124 + pollSegments: create.asyncThunk( 125 + async (_, { getState, dispatch }) => { 126 + const { streamplace } = getState() as { 122 127 streamplace: StreamplaceState; 123 - }); 124 - if (!streamplace.identity) { 125 - throw new Error("No identity"); 126 - } 127 - const message = { 128 - signer: address, 129 - time: Date.now(), 130 - data: { handle, did }, 131 128 }; 132 - const toSign = { 133 - types: schema.types, 134 - domain: schema.domain as any, 135 - primaryType: "Identity", 136 - message: message, 137 - }; 138 - const signature = await signTypedData(toSign); 139 - const res = await fetch( 140 - `${streamplace.url}/api/identity/${streamplace.identity.id}`, 141 - { 142 - method: "PUT", 143 - body: JSON.stringify({ 144 - primaryType: "Identity", 145 - domain: schema.domain, 146 - message: message, 147 - signature: signature, 148 - }), 149 - }, 150 - ); 129 + const res = await fetch(`${streamplace.url}/api/live-users`); 151 130 if (!res.ok) { 152 131 const text = await res.text(); 153 132 throw new Error(`http ${res.status} ${text}`); 154 133 } 134 + const data = await res.json(); 135 + if (!Array.isArray(data)) { 136 + throw new Error("got non-array back from /api/live-users"); 137 + } 155 138 156 - return await res.json(); 139 + return data; 157 140 }, 158 141 { 159 142 pending: (state) => { 160 - // state.status = "loading"; 143 + return { 144 + ...state, 145 + recentSegments: { 146 + ...state.recentSegments, 147 + loading: true, 148 + }, 149 + }; 150 + }, 151 + fulfilled: (state, action) => { 152 + return { 153 + ...state, 154 + recentSegments: { 155 + ...state.recentSegments, 156 + segments: action.payload, 157 + loading: false, 158 + error: null, 159 + }, 160 + }; 161 161 }, 162 - fulfilled: (state, action) => {}, 163 162 rejected: (state, err) => { 164 - console.error("putIdentity rejected", err); 165 - // state.status = "failed"; 163 + return { 164 + ...state, 165 + recentSegments: { 166 + ...state.recentSegments, 167 + error: err.error.message ?? null, 168 + loading: false, 169 + }, 170 + }; 166 171 }, 167 172 }, 168 173 ), ··· 170 175 171 176 selectors: { 172 177 selectStreamplace: (streamplace) => streamplace, 178 + selectRecentSegments: (streamplace) => streamplace.recentSegments, 173 179 }, 174 180 }); 175 181 176 182 // Action creators are generated for each case reducer function. 177 - export const { getIdentity, putIdentity, setURL, initialize } = 183 + export const { getIdentity, setURL, initialize, pollSegments } = 178 184 streamplaceSlice.actions; 179 - export const { selectStreamplace } = streamplaceSlice.selectors; 185 + export const { selectStreamplace, selectRecentSegments } = 186 + streamplaceSlice.selectors;
+2 -2
js/app/hooks/platform/index.tsx
··· 1 - import { initPushNotifications, topSafeHeight } from "./platform"; 1 + import { topSafeHeight } from "./platform"; 2 2 3 - export { initPushNotifications, topSafeHeight }; 3 + export { topSafeHeight };
-1
js/app/hooks/platform/platform.android.tsx
··· 1 1 import { StatusBar } from "react-native"; 2 2 3 - export * from "./platform.mobile"; 4 3 export const topSafeHeight = () => StatusBar.currentHeight;
-1
js/app/hooks/platform/platform.ios.tsx
··· 1 - export * from "./platform.mobile"; 2 1 export const topSafeHeight = () => 0;
-91
js/app/hooks/platform/platform.mobile.tsx
··· 1 - import messaging from "@react-native-firebase/messaging"; 2 - import { PermissionsAndroid, Platform } from "react-native"; 3 - 4 - const checkApplicationPermission = async () => { 5 - if (Platform.OS === "android") { 6 - try { 7 - await PermissionsAndroid.request( 8 - PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS, 9 - ); 10 - } catch (error) { 11 - console.log("error getting notifications ", error); 12 - } 13 - } 14 - }; 15 - 16 - export async function initPushNotifications() { 17 - try { 18 - const x = messaging(); 19 - messaging().setBackgroundMessageHandler(async (remoteMessage) => { 20 - console.log("Message handled in the background!", remoteMessage); 21 - }); 22 - await checkApplicationPermission(); 23 - const authorizationStatus = await x.requestPermission(); 24 - 25 - let perms = ""; 26 - 27 - if (authorizationStatus === messaging.AuthorizationStatus.AUTHORIZED) { 28 - console.log("User has notification permissions enabled."); 29 - perms += "authorized"; 30 - } else if ( 31 - authorizationStatus === messaging.AuthorizationStatus.PROVISIONAL 32 - ) { 33 - console.log("User has provisional notification permissions."); 34 - perms += "provisional"; 35 - } else { 36 - console.log("User has notification permissions disabled"); 37 - perms += "disabled"; 38 - } 39 - 40 - (async () => { 41 - if (typeof process.env.EXPO_PUBLIC_STREAMPLACE_URL !== "string") { 42 - console.log("process.env.EXPO_PUBLIC_STREAMPLACE_URL undefined!"); 43 - return; 44 - } 45 - try { 46 - const token = await x.getToken(); 47 - const res = await fetch( 48 - `${process.env.EXPO_PUBLIC_STREAMPLACE_URL}/api/notification`, 49 - { 50 - method: "POST", 51 - headers: { 52 - "content-type": "application/json", 53 - }, 54 - body: JSON.stringify({ token }), 55 - }, 56 - ); 57 - console.log({ status: res.status }); 58 - } catch (e) { 59 - console.log(e); 60 - } 61 - })(); 62 - // Register background handler 63 - 64 - messaging() 65 - .subscribeToTopic("live") 66 - .then(() => console.log("Subscribed to live!")); 67 - 68 - messaging().onMessage((remoteMessage) => { 69 - console.log("Foreground message:", remoteMessage); 70 - // Display the notification to the user 71 - }); 72 - messaging().onNotificationOpenedApp((remoteMessage) => { 73 - console.log( 74 - "App opened by notification while in foreground:", 75 - remoteMessage, 76 - ); 77 - // Handle notification interaction when the app is in the foreground 78 - }); 79 - messaging() 80 - .getInitialNotification() 81 - .then((remoteMessage) => { 82 - console.log( 83 - "App opened by notification from closed state:", 84 - remoteMessage, 85 - ); 86 - // Handle notification interaction when the app is opened from a closed state 87 - }); 88 - } catch (e) { 89 - console.log(e); 90 - } 91 - }
-3
js/app/hooks/platform/platform.tsx
··· 1 - export async function initPushNotifications() { 2 - // console.log("webby webby web"); 3 - } 4 1 export const topSafeHeight = () => 0;
+14
js/app/hooks/useLiveUser.tsx
··· 1 + import { selectUserProfile } from "features/bluesky/blueskySlice"; 2 + import { selectRecentSegments } from "features/streamplace/streamplaceSlice"; 3 + import { useAppSelector } from "store/hooks"; 4 + 5 + // composite selector that tells us when the current user is live 6 + export const useLiveUser = (): boolean => { 7 + const profile = useAppSelector(selectUserProfile); 8 + const { segments } = useAppSelector(selectRecentSegments); 9 + if (!profile) { 10 + return false; 11 + } 12 + const isLive = segments.some((segment) => segment.repo.did === profile.did); 13 + return isLive; 14 + };
js/app/hooks/useLoggedIn.tsx

This is a binary file and will not be displayed.

+1 -2
js/app/hooks/usePlatform.native.tsx
··· 1 1 import { Platform } from "react-native"; 2 - import { initPushNotifications, topSafeHeight } from "./platform"; 2 + import { topSafeHeight } from "./platform"; 3 3 import { IsPlatform } from "./usePlatform.shared"; 4 4 5 5 export default function usePlatform(): IsPlatform { 6 6 return { 7 - initPushNotifications, 8 7 topSafeHeight, 9 8 isNative: true, 10 9 isIOS: Platform.OS === "ios",
-1
js/app/hooks/usePlatform.shared.tsx
··· 14 14 // don't rely on this! just for defaults 15 15 isFirefox: boolean; 16 16 17 - initPushNotifications: () => Promise<void>; 18 17 topSafeHeight: () => number; 19 18 };
+1 -2
js/app/hooks/usePlatform.tsx
··· 1 1 import { IsPlatform } from "./usePlatform.shared"; 2 2 // it's only for setting defaults, i promise! 3 3 import uaParser from "ua-parser-js"; 4 - import { initPushNotifications, topSafeHeight } from "./platform"; 4 + import { topSafeHeight } from "./platform"; 5 5 6 6 function supportsHLS() { 7 7 var video = document.createElement("video"); ··· 20 20 } 21 21 const electron = typeof window["AQ_ELECTRON"] !== "undefined"; 22 22 return { 23 - initPushNotifications, 24 23 topSafeHeight, 25 24 isNative: false, 26 25 isIOS: false,
+6 -6
js/app/package.json
··· 39 39 "@react-navigation/native": "^6.1.18", 40 40 "@react-navigation/native-stack": "^6.11.0", 41 41 "@reduxjs/toolkit": "^2.3.0", 42 - "@tamagui/config": "^1.116.12", 43 - "@tamagui/lucide-icons": "^1.116.12", 44 - "@tamagui/toast": "^1.116.12", 42 + "@tamagui/config": "^1.123.17", 43 + "@tamagui/lucide-icons": "^1.123.17", 44 + "@tamagui/toast": "^1.123.17", 45 45 "@tanstack/react-query": "^5.59.19", 46 46 "@zxing/browser": "^0.1.5", 47 47 "@zxing/library": "^0.21.3", ··· 83 83 "react-native-webrtc": "^124.0.4", 84 84 "react-native-webview": "13.12.4", 85 85 "react-redux": "^9.1.2", 86 - "tamagui": "^1.116.12", 86 + "tamagui": "^1.123.17", 87 87 "ua-parser-js": "^2.0.0-rc.1", 88 88 "uuid": "^11.0.2", 89 89 "viem": "^2.21.40", ··· 100 100 "@config-plugins/react-native-webrtc": "^10.0.0", 101 101 "@expo/metro-config": "~0.19.0", 102 102 "@expo/metro-runtime": "~4.0.0", 103 - "@tamagui/babel-plugin": "^1.116.12", 104 - "@tamagui/metro-plugin": "^1.116.12", 103 + "@tamagui/babel-plugin": "^1.123.17", 104 + "@tamagui/metro-plugin": "^1.123.17", 105 105 "@types/babel__plugin-transform-runtime": "^7", 106 106 "@types/qrcode": "^1", 107 107 "@types/react": "~18.3.12",
+135 -42
js/app/src/router.tsx
··· 4 4 CommonActions, 5 5 DrawerActions, 6 6 LinkingOptions, 7 + NavigatorScreenParams, 8 + useLinkTo, 7 9 useNavigation, 8 10 } from "@react-navigation/native"; 9 11 import { createNativeStackNavigator } from "@react-navigation/native-stack"; ··· 14 16 Menu, 15 17 Settings as SettingsIcon, 16 18 User, 17 - Video, 18 19 ShieldQuestion, 19 20 Download, 21 + X, 22 + Video, 20 23 } from "@tamagui/lucide-icons"; 21 24 import { Provider, Settings } from "components"; 22 25 import AQLink from "components/aqlink"; ··· 24 27 import StreamList from "components/stream-list/stream-list"; 25 28 import { selectUserProfile } from "features/bluesky/blueskySlice"; 26 29 import usePlatform from "hooks/usePlatform"; 27 - import { useEffect } from "react"; 30 + import { useEffect, useState } from "react"; 28 31 import { 29 32 ImageBackground, 30 33 ImageSourcePropType, ··· 32 35 StatusBar, 33 36 } from "react-native"; 34 37 import { useAppDispatch, useAppSelector } from "store/hooks"; 35 - import { Text, useTheme, View } from "tamagui"; 38 + import { useTheme, Text, View, H3, Button } from "tamagui"; 36 39 import AppReturnScreen from "./screens/app-return"; 37 - import LiveScreen from "./screens/live"; 38 40 import MultiScreen from "./screens/multi"; 39 41 import StreamScreen from "./screens/stream"; 40 42 import SupportScreen from "./screens/support"; 41 - import WebcamScreen from "./screens/webcam"; 42 - import StreamKeyScreen from "./screens/stream-key"; 43 43 import AboutScreen from "./screens/about"; 44 44 import DownloadScreen from "./screens/download"; 45 45 import { hydrate, selectHydrated } from "features/base/baseSlice"; 46 46 import AVSyncScreen from "./screens/av-sync"; 47 + import { 48 + clearNotification, 49 + initPushNotifications, 50 + registerNotificationToken, 51 + selectNotificationDestination, 52 + selectNotificationToken, 53 + } from "features/platform/platformSlice.native"; 54 + import { pollSegments } from "features/streamplace/streamplaceSlice"; 55 + import { useLiveUser } from "hooks/useLiveUser"; 56 + import { useToastController } from "@tamagui/toast"; 57 + import LiveDashboard from "./screens/live-dashboard"; 47 58 function HomeScreen() { 48 59 return ( 49 60 <View f={1}> ··· 53 64 } 54 65 const Stack = createNativeStackNavigator(); 55 66 67 + type HomeStackParamList = { 68 + StreamList: undefined; 69 + Stream: { user: string }; 70 + }; 71 + 72 + type RootStackParamList = { 73 + Home: NavigatorScreenParams<HomeStackParamList>; 74 + Multi: { config: string }; 75 + Support: undefined; 76 + Settings: undefined; 77 + GoLive: undefined; 78 + LiveDashboard: undefined; 79 + Login: undefined; 80 + AVSync: undefined; 81 + AppReturn: { scheme: string }; 82 + About: undefined; 83 + Download: undefined; 84 + }; 85 + 86 + declare global { 87 + namespace ReactNavigation { 88 + interface RootParamList extends RootStackParamList {} 89 + } 90 + } 91 + 56 92 const linking: LinkingOptions<ReactNavigation.RootParamList> = { 57 93 prefixes: ["place.stream://", "place.stream.dev://"], 58 94 config: { ··· 69 105 Support: "support", 70 106 Settings: "settings", 71 107 GoLive: "golive", 72 - Live: "live", 73 - Webcam: "live/webcam", 74 - StreamKey: "live/stream-key", 108 + LiveDashboard: "live", 75 109 Login: "login", 76 110 AVSync: "sync-test", 77 111 AppReturn: "app-return/:scheme", ··· 133 167 }; 134 168 135 169 export default function Router() { 136 - const { initPushNotifications, isWeb, isElectron } = usePlatform(); 170 + const { isWeb, isElectron } = usePlatform(); 137 171 useEffect(() => { 138 - initPushNotifications(); 172 + if (isWeb && !isElectron) { 173 + linking.prefixes.push(document.location.origin); 174 + } 139 175 }, []); 140 - if (isWeb && !isElectron) { 141 - linking.prefixes.push(document.location.origin); 142 - } 143 176 return ( 144 177 <Provider linking={linking}> 145 178 <StreamplaceDrawer /> ··· 152 185 const { isWeb, isElectron, isNative, isBrowser } = usePlatform(); 153 186 const navigation = useNavigation(); 154 187 const dispatch = useAppDispatch(); 188 + const [poppedUp, setPoppedUp] = useState(false); 189 + const [livePopup, setLivePopup] = useState(false); 190 + 191 + // Top-level stuff to handle push notification registration 155 192 useEffect(() => { 156 193 dispatch(hydrate()); 157 - // const params = new URLSearchParams(document.location.search); 158 - // if (params.has("code")) { 159 - // navigation.dispatch( 160 - // CommonActions.reset({ 161 - // index: 0, 162 - // routes: [{ name: "Login" }], 163 - // }), 164 - // ); 165 - // } 194 + dispatch(initPushNotifications()); 166 195 }, []); 196 + const notificationToken = useAppSelector(selectNotificationToken); 197 + const userProfile = useAppSelector(selectUserProfile); 167 198 const hydrated = useAppSelector(selectHydrated); 199 + useEffect(() => { 200 + if (notificationToken) { 201 + dispatch(registerNotificationToken()); 202 + } 203 + }, [notificationToken, userProfile]); 204 + 205 + // Stuff to handle incoming push notification routing 206 + const notificationDestination = useAppSelector(selectNotificationDestination); 207 + const linkTo = useLinkTo(); 208 + 209 + useEffect(() => { 210 + if (notificationDestination) { 211 + linkTo(notificationDestination); 212 + dispatch(clearNotification()); 213 + } 214 + }, [notificationDestination]); 215 + 216 + // Top-level stuff to handle polling for live streamers 217 + useEffect(() => { 218 + dispatch(pollSegments()); 219 + const interval = setInterval(() => { 220 + dispatch(pollSegments()); 221 + }, 5000); 222 + return () => clearInterval(interval); 223 + }, []); 224 + 225 + const userIsLive = useLiveUser(); 226 + const toast = useToastController(); 227 + 228 + useEffect(() => { 229 + if (userIsLive && !poppedUp) { 230 + setPoppedUp(true); 231 + setLivePopup(true); 232 + } 233 + }, [userIsLive, poppedUp]); 234 + 168 235 if (!hydrated) { 169 236 return <View />; 170 237 } ··· 244 311 }} 245 312 /> 246 313 <Drawer.Screen 247 - name="Live" 248 - component={LiveScreen} 314 + name="LiveDashboard" 315 + component={LiveDashboard} 249 316 options={{ 250 - drawerLabel: () => <Text>Go Live</Text>, 317 + drawerLabel: () => <Text>Live Dashboard</Text>, 251 318 drawerIcon: () => <Video />, 252 319 drawerItemStyle: isNative ? { display: "none" } : undefined, 253 320 }} ··· 269 336 }} 270 337 /> 271 338 <Drawer.Screen 272 - name="Webcam" 273 - component={WebcamScreen} 274 - options={{ 275 - drawerLabel: () => null, 276 - drawerItemStyle: { display: "none" }, 277 - }} 278 - /> 279 - <Drawer.Screen 280 - name="StreamKey" 281 - component={StreamKeyScreen} 282 - options={{ 283 - drawerLabel: () => null, 284 - drawerItemStyle: { display: "none" }, 285 - }} 286 - /> 287 - <Drawer.Screen 288 339 name="AVSync" 289 340 component={AVSyncScreen} 290 341 options={{ ··· 302 353 }} 303 354 /> 304 355 </Drawer.Navigator> 356 + {livePopup && ( 357 + <View 358 + position="absolute" 359 + bottom="$8" 360 + f={1} 361 + alignItems="center" 362 + width="100%" 363 + > 364 + <View 365 + backgroundColor="#cc0000" 366 + f={1} 367 + alignItems="center" 368 + padding="$4" 369 + borderRadius="$4" 370 + cursor="pointer" 371 + onPress={() => { 372 + navigation.navigate("LiveDashboard"); 373 + setLivePopup(false); 374 + }} 375 + position="relative" 376 + > 377 + <H3>✨YOU ARE LIVE!!!✨</H3> 378 + <Button 379 + position="absolute" 380 + top="$0" 381 + right="$0" 382 + onPress={(e) => { 383 + e.stopPropagation(); 384 + setLivePopup(false); 385 + }} 386 + marginRight={-15} 387 + marginTop={-5} 388 + backgroundColor="transparent" 389 + > 390 + <X /> 391 + </Button> 392 + <Text> 393 + {isNative ? "Tap" : "Click"} here to go to the live dashboard 394 + </Text> 395 + </View> 396 + </View> 397 + )} 305 398 </> 306 399 ); 307 400 }
+154
js/app/src/screens/live-dashboard.tsx
··· 1 + import CreateLivestream from "components/create-livestream"; 2 + import { Button, isWeb, View } from "tamagui"; 3 + import { Player } from "components/player/player"; 4 + import Loading from "components/loading/loading"; 5 + import { 6 + selectIsReady, 7 + selectUserProfile, 8 + } from "features/bluesky/blueskySlice"; 9 + import { useAppSelector } from "store/hooks"; 10 + import { Redirect } from "components/aqlink"; 11 + import React, { useState } from "react"; 12 + import { useLiveUser } from "hooks/useLiveUser"; 13 + import StreamKeyScreen from "components/live-dashboard/stream-key"; 14 + 15 + enum StreamSource { 16 + Start, 17 + Camera, 18 + StreamKey, 19 + } 20 + 21 + export default function LiveDashboard() { 22 + const isReady = useAppSelector(selectIsReady); 23 + const userProfile = useAppSelector(selectUserProfile); 24 + const [streamSource, setStreamSource] = useState(StreamSource.Start); 25 + const isLive = useLiveUser(); 26 + if (!isReady) { 27 + return <Loading />; 28 + } 29 + if (!userProfile) { 30 + return <Redirect to={{ screen: "Login" }} />; 31 + } 32 + let topPane: React.ReactNode; 33 + let params = new URLSearchParams(); 34 + if (isWeb) { 35 + params = new URLSearchParams(window.location.search); 36 + } 37 + if (isLive && streamSource !== StreamSource.Camera) { 38 + topPane = <Player src={userProfile.did} name={userProfile.handle} />; 39 + } else if (streamSource === StreamSource.Start) { 40 + topPane = <StreamSourcePicker onPick={setStreamSource} />; 41 + } else if (streamSource === StreamSource.Camera) { 42 + topPane = ( 43 + <Player src={userProfile.did} name={userProfile.handle} ingest={true} /> 44 + ); 45 + } else if (streamSource === StreamSource.StreamKey) { 46 + topPane = <StreamKeyScreen />; 47 + } else { 48 + throw new Error("Invalid stream source"); 49 + } 50 + let closeButton: React.ReactNode = <></>; 51 + if (streamSource !== StreamSource.Start && !isLive) { 52 + closeButton = ( 53 + <Button 54 + position="absolute" 55 + top="$0" 56 + right="$0" 57 + onPress={(e) => { 58 + e.stopPropagation(); 59 + setStreamSource(StreamSource.Start); 60 + }} 61 + zIndex={1000} 62 + marginTop={10} 63 + marginRight={10} 64 + > 65 + <X /> 66 + </Button> 67 + ); 68 + } 69 + return ( 70 + <View f={1} ai="stretch" jc="center"> 71 + <View f={1} fb={0}> 72 + {topPane} 73 + {closeButton} 74 + </View> 75 + <View f={1} ai="center" jc="center" fb={0}> 76 + <CreateLivestream /> 77 + </View> 78 + </View> 79 + ); 80 + } 81 + 82 + import { Camera, FerrisWheel, X } from "@tamagui/lucide-icons"; 83 + import { H6, Text } from "tamagui"; 84 + import Waiting from "components/live-dashboard/waiting"; 85 + const elems = [ 86 + { 87 + title: "Stream your camera!", 88 + Icon: Camera, 89 + to: StreamSource.Camera, 90 + }, 91 + { 92 + title: "Stream from OBS!", 93 + Icon: FerrisWheel, 94 + to: StreamSource.StreamKey, 95 + }, 96 + ]; 97 + 98 + export function StreamSourcePicker({ 99 + onPick, 100 + }: { 101 + onPick: (source: StreamSource) => void; 102 + }) { 103 + const isReady = useAppSelector(selectIsReady); 104 + const userProfile = useAppSelector(selectUserProfile); 105 + if (!isReady) { 106 + return <Loading />; 107 + } 108 + if (!userProfile) { 109 + return <Redirect to={{ screen: "Login" }} />; 110 + } 111 + return ( 112 + <View 113 + f={1} 114 + jc="space-around" 115 + ai="stretch" 116 + padding="$3" 117 + flexDirection="row" 118 + backgroundColor="$gray1" 119 + > 120 + <View f={1} maxWidth={250} alignItems="stretch" justifyContent="center"> 121 + {elems.map(({ Icon, title, to }, i) => ( 122 + <React.Fragment key={i}> 123 + <View 124 + f={1} 125 + flexDirection="row" 126 + ai="center" 127 + jc="space-between" 128 + backgroundColor="$accentColor" 129 + // padding="$5" 130 + borderRadius="$10" 131 + cursor="pointer" 132 + onPress={() => onPick(to)} 133 + flexGrow={0} 134 + flexBasis={75} 135 + > 136 + <View padding="$5" paddingRight={0}> 137 + <Icon size={48} /> 138 + </View> 139 + <Text f={1} textAlign="right" paddingRight="$5"> 140 + {title} 141 + </Text> 142 + </View> 143 + {i < elems.length - 1 && ( 144 + <View jc="center" ai="center"> 145 + <H6 padding="$5">OR</H6> 146 + </View> 147 + )} 148 + </React.Fragment> 149 + ))} 150 + <Waiting /> 151 + </View> 152 + </View> 153 + ); 154 + }
+1 -1
js/app/src/screens/live.tsx js/app/components/live-dashboard/live-selector.tsx
··· 23 23 24 24 export default function StreamScreen({ route }) { 25 25 const isReady = useAppSelector(selectIsReady); 26 + const userProfile = useAppSelector(selectUserProfile); 26 27 if (!isReady) { 27 28 return <Loading />; 28 29 } 29 - const userProfile = useAppSelector(selectUserProfile); 30 30 if (!userProfile) { 31 31 return <Redirect to={{ screen: "Login" }} />; 32 32 }
+11 -1
js/app/src/screens/stream-key.tsx js/app/components/live-dashboard/stream-key.tsx
··· 10 10 import { useAppDispatch, useAppSelector } from "store/hooks"; 11 11 import { View, Paragraph, Button, Text } from "tamagui"; 12 12 import { Redirect } from "components/aqlink"; 13 + import Waiting from "./waiting"; 13 14 const Row = ({ children }: { children: React.ReactNode }) => { 14 15 return ( 15 16 <View w="100%" f={1} fd="row" padding="$4"> ··· 49 50 return <Loading />; 50 51 } 51 52 return ( 52 - <View f={1} ai="center" jc="center" gap="$4" w="100%" p="$4"> 53 + <View 54 + f={1} 55 + ai="center" 56 + jc="center" 57 + gap="$4" 58 + w="100%" 59 + p="$4" 60 + backgroundColor="$gray1" 61 + > 53 62 <View w="100%" maxWidth={600}> 54 63 <Row> 55 64 <Left> ··· 90 99 </Right> 91 100 </Row> 92 101 </View> 102 + <Waiting /> 93 103 </View> 94 104 ); 95 105 }
-5
js/app/src/screens/webcam.native.tsx
··· 1 - import { Player } from "components/player/player"; 2 - 3 - export default function StreamScreen({ route }) { 4 - return <Player ingest={true} src="live" />; 5 - }
-22
js/app/src/screens/webcam.tsx
··· 1 - import { Player } from "components/player/player"; 2 - import { queryToProps } from "./util"; 3 - import Loading from "components/loading/loading"; 4 - import { 5 - selectIsReady, 6 - selectUserProfile, 7 - } from "features/bluesky/blueskySlice"; 8 - import { useAppSelector } from "store/hooks"; 9 - import { Redirect } from "components/aqlink"; 10 - 11 - export default function StreamScreen() { 12 - const isReady = useAppSelector(selectIsReady); 13 - if (!isReady) { 14 - return <Loading />; 15 - } 16 - const userProfile = useAppSelector(selectUserProfile); 17 - if (!userProfile) { 18 - return <Redirect to={{ screen: "Login" }} />; 19 - } 20 - const params = new URLSearchParams(window.location.search); 21 - return <Player ingest={true} src="live" {...queryToProps(params)} />; 22 - }
+1
js/app/tamagui.config.ts
··· 97 97 ...configBase.themes.dark, 98 98 accentColor: "rgb(189 110 134)", 99 99 accentBackground: "rgb(17, 49, 35)", 100 + background2: "rgb(18, 18, 18)", 100 101 }, 101 102 }, 102 103 };
+28
lexicons/place/stream/key.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "place.stream.key", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "Record linking an atproto identity with a stream signing key", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": ["signingKey", "createdAt"], 12 + "properties": { 13 + "signingKey": { 14 + "type": "string", 15 + "maxLength": 57, 16 + "minLength": 57, 17 + "description": "The did:key signing key for the stream." 18 + }, 19 + "createdAt": { 20 + "type": "string", 21 + "format": "datetime", 22 + "description": "Client-declared timestamp when this key was created." 23 + } 24 + } 25 + } 26 + } 27 + } 28 + }
+33
lexicons/place/stream/livestream.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "place.stream.livestream", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "Record announcing a livestream is happening", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": ["title", "createdAt"], 12 + "properties": { 13 + "title": { 14 + "type": "string", 15 + "maxLength": 1400, 16 + "maxGraphemes": 140, 17 + "description": "The title of the livestream, as it will be announced to followers." 18 + }, 19 + "url": { 20 + "type": "string", 21 + "format": "uri", 22 + "description": "The URL where this stream can be found. This is primarily a hint for other Streamplace nodes to locate and replicate the stream." 23 + }, 24 + "createdAt": { 25 + "type": "string", 26 + "format": "datetime", 27 + "description": "Client-declared timestamp when this livestream started." 28 + } 29 + } 30 + } 31 + } 32 + } 33 + }
+4 -2
package.json
··· 8 8 "check": "yarn run check:workspaces && git ls-files | xargs prettier --check --ignore-unknown", 9 9 "check:workspaces": "cd js/app && yarn run check", 10 10 "fix": "git ls-files | xargs prettier --write --ignore-unknown", 11 - "postinstall": "husky", 11 + "postinstall": "husky && yarn run lexicons", 12 12 "build": "yarn workspaces foreach --all run build", 13 13 "prepare": "husky", 14 14 "release": "lerna publish --force-publish", 15 15 "precommit": "make precommit", 16 16 "app": "cd js/app && yarn run \"$@\"", 17 - "desktop": "cd js/desktop && yarn run \"$@\"" 17 + "desktop": "cd js/desktop && yarn run \"$@\"", 18 + "lexicons": "lex gen-api ./js/app/lexicons $(find ./lexicons -type f -name '*.json') --yes && echo 'import { ComAtprotoRepoCreateRecord, ComAtprotoRepoDeleteRecord, ComAtprotoRepoGetRecord, ComAtprotoRepoListRecords } from \"@atproto/api\"' >> ./js/app/lexicons/index.ts" 18 19 }, 19 20 "keywords": [], 20 21 "author": "Streamplace", 21 22 "license": "MIT", 22 23 "devDependencies": { 24 + "@atproto/lex-cli": "^0.5.6", 23 25 "husky": "^9.1.6", 24 26 "lerna": "^8.1.9", 25 27 "lint-staged": "^15.2.10",
+11 -2
pkg/api/api.go
··· 250 250 } 251 251 252 252 type NotificationPayload struct { 253 - Token string `json:"token"` 253 + Token string `json:"token"` 254 + RepoDID string `json:"repoDID"` 254 255 } 255 256 256 257 func (a *StreamplaceAPI) HandleAPI404(ctx context.Context) http.HandlerFunc { ··· 316 317 w.WriteHeader(400) 317 318 return 318 319 } 319 - err = a.Model.CreateNotification(n.Token) 320 + err = a.Model.CreateNotification(n.Token, n.RepoDID) 320 321 if err != nil { 321 322 log.Log(ctx, "error creating notification", "error", err) 322 323 w.WriteHeader(400) ··· 324 325 } 325 326 log.Log(ctx, "successfully created notification", "token", n.Token) 326 327 w.WriteHeader(200) 328 + if n.RepoDID != "" { 329 + go func() { 330 + _, err := atproto.SyncBlueskyRepo(ctx, n.RepoDID, a.Model) 331 + if err != nil { 332 + log.Error(ctx, "error syncing bluesky repo after notification creation", "error", err) 333 + } 334 + }() 335 + } 327 336 } 328 337 } 329 338
+82
pkg/api/api_internal.go
··· 26 26 "stream.place/streamplace/pkg/mist/mistconfig" 27 27 "stream.place/streamplace/pkg/mist/misttriggers" 28 28 "stream.place/streamplace/pkg/model" 29 + notificationpkg "stream.place/streamplace/pkg/notifications" 29 30 v0 "stream.place/streamplace/pkg/schema/v0" 30 31 ) 31 32 ··· 292 293 return 293 294 } 294 295 w.Write(bs) 296 + }) 297 + 298 + router.GET("/followers/:user", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) { 299 + user := p.ByName("user") 300 + if user == "" { 301 + errors.WriteHTTPBadRequest(w, "user required", nil) 302 + return 303 + } 304 + 305 + followers, err := a.Model.GetUserFollowers(ctx, user) 306 + if err != nil { 307 + errors.WriteHTTPInternalServerError(w, "unable to get followers", err) 308 + return 309 + } 310 + bs, err := json.Marshal(followers) 311 + if err != nil { 312 + errors.WriteHTTPInternalServerError(w, "unable to marshal json", err) 313 + return 314 + } 315 + w.Write(bs) 316 + }) 317 + 318 + router.GET("/following/:user", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) { 319 + user := p.ByName("user") 320 + if user == "" { 321 + errors.WriteHTTPBadRequest(w, "user required", nil) 322 + return 323 + } 324 + 325 + followers, err := a.Model.GetUserFollowing(ctx, user) 326 + if err != nil { 327 + errors.WriteHTTPInternalServerError(w, "unable to get followers", err) 328 + return 329 + } 330 + bs, err := json.Marshal(followers) 331 + if err != nil { 332 + errors.WriteHTTPInternalServerError(w, "unable to marshal json", err) 333 + return 334 + } 335 + w.Write(bs) 336 + }) 337 + 338 + router.GET("/notifications", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) { 339 + notifications, err := a.Model.ListNotifications() 340 + if err != nil { 341 + errors.WriteHTTPInternalServerError(w, "unable to get notifications", err) 342 + return 343 + } 344 + bs, err := json.Marshal(notifications) 345 + if err != nil { 346 + errors.WriteHTTPInternalServerError(w, "unable to marshal json", err) 347 + return 348 + } 349 + w.Write(bs) 350 + }) 351 + 352 + router.POST("/notification-blast", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) { 353 + var payload notificationpkg.NotificationBlast 354 + if err := json.NewDecoder(r.Body).Decode(&payload); err != nil { 355 + errors.WriteHTTPBadRequest(w, "invalid request body", err) 356 + return 357 + } 358 + notifications, err := a.Model.ListNotifications() 359 + if err != nil { 360 + errors.WriteHTTPInternalServerError(w, "unable to get notifications", err) 361 + return 362 + } 363 + if a.FirebaseNotifier == nil { 364 + errors.WriteHTTPInternalServerError(w, "firebase notifier not initialized", nil) 365 + return 366 + } 367 + tokens := []string{} 368 + for _, not := range notifications { 369 + tokens = append(tokens, not.Token) 370 + } 371 + err = a.FirebaseNotifier.Blast(ctx, tokens, &payload) 372 + if err != nil { 373 + errors.WriteHTTPInternalServerError(w, "unable to blast notifications", err) 374 + return 375 + } 376 + w.WriteHeader(http.StatusNoContent) 295 377 }) 296 378 297 379 router.PUT("/settings/:id", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
+1 -1
pkg/api/api_test.go
··· 85 85 type MockFirebase struct { 86 86 } 87 87 88 - func (m *MockFirebase) Blast(ctx context.Context, nots []model.Notification, nb *notifications.NotificationBlast) error { 88 + func (m *MockFirebase) Blast(ctx context.Context, nots []string, nb *notifications.NotificationBlast) error { 89 89 return nil 90 90 } 91 91
+2 -1
pkg/api/playback.go
··· 19 19 "golang.org/x/sync/errgroup" 20 20 "stream.place/streamplace/pkg/aqtime" 21 21 "stream.place/streamplace/pkg/atproto" 22 + "stream.place/streamplace/pkg/constants" 22 23 "stream.place/streamplace/pkg/errors" 23 24 apierrors "stream.place/streamplace/pkg/errors" 24 25 "stream.place/streamplace/pkg/log" ··· 31 32 user = alias 32 33 } 33 34 // did:key, pass through unaltered 34 - if strings.HasPrefix(user, atproto.DID_KEY_PREFIX) { 35 + if strings.HasPrefix(user, constants.DID_KEY_PREFIX) { 35 36 return user, nil 36 37 } 37 38 // only other allowed case is a bluesky handle
+77 -38
pkg/atproto/atproto.go
··· 4 4 "bytes" 5 5 "context" 6 6 "fmt" 7 + "reflect" 7 8 "strings" 8 9 "sync" 9 - "time" 10 10 11 11 comatproto "github.com/bluesky-social/indigo/api/atproto" 12 + "github.com/bluesky-social/indigo/api/bsky" 13 + _ "github.com/bluesky-social/indigo/api/bsky" 12 14 atcrypto "github.com/bluesky-social/indigo/atproto/crypto" 13 15 "github.com/bluesky-social/indigo/atproto/identity" 14 16 "github.com/bluesky-social/indigo/atproto/syntax" 17 + lexutil "github.com/bluesky-social/indigo/lex/util" 15 18 "github.com/bluesky-social/indigo/repo" 16 19 "github.com/bluesky-social/indigo/util" 17 20 "github.com/bluesky-social/indigo/xrpc" ··· 19 22 "github.com/ipfs/go-datastore" 20 23 blockstore "github.com/ipfs/go-ipfs-blockstore" 21 24 "stream.place/streamplace/pkg/aqhttp" 25 + "stream.place/streamplace/pkg/aqtime" 26 + "stream.place/streamplace/pkg/constants" 22 27 "stream.place/streamplace/pkg/log" 23 28 "stream.place/streamplace/pkg/model" 29 + "stream.place/streamplace/pkg/streamplace" 24 30 ) 25 31 26 32 var SyncGetRepo = comatproto.SyncGetRepo 27 - var STREAMPLACE_COLLECTION = "place.stream.key" 28 - var STREAMPLACE_SIGNING_KEY = "signingKey" 29 - 30 - const DID_KEY_PREFIX = "did:key" 31 - const ADDRESS_KEY_PREFIX = "0x" 32 33 33 34 // handleLocks provides per-handle synchronization 34 35 var handleLocks = struct { ··· 84 85 if oldRepo != nil { 85 86 log.Log(ctx, "found existing DID record", "did", oldRepo.DID, "version", oldRepo.Version) 86 87 rev = oldRepo.Version 88 + } else { 89 + // create an empty repo while we sync. this is useful because we'll start monitoring the firehose for 90 + // any new follows and such from this user while we're syncing, which can take a long time 91 + newRepo := model.Repo{ 92 + DID: ident.DID.String(), 93 + PDS: ident.PDSEndpoint(), 94 + Version: "", 95 + RootCID: "", 96 + Handle: ident.Handle.String(), 97 + } 98 + err = mod.UpdateRepo(&newRepo) 99 + if err != nil { 100 + return nil, fmt.Errorf("failed to create empty DID record for %s: %w", ident.DID.String(), err) 101 + } 87 102 } 88 103 89 104 log.Log(ctx, "resolved bluesky identity", "did", ident.DID, "handle", ident.Handle, "pds", ident.PDSEndpoint()) ··· 133 148 return nil, fmt.Errorf("failed to parse repo CAR data for %s: %w", ident.DID.String(), err) 134 149 } 135 150 151 + mstNodes := map[string]string{} 152 + r.ForEach(ctx, "", func(k string, v cid.Cid) error { 153 + nsid, rkey, err := syntax.ParseRepoPath(k) 154 + if err != nil { 155 + log.Warn(ctx, "failed to parse repo path", "k", k, "err", err) 156 + return err 157 + } 158 + hash := v.Hash().HexString() 159 + log.Debug(ctx, "got mst node", "cid", v, "rkey", rkey, "nsid", nsid, "hash", hash) 160 + mstNodes[hash] = rkey.String() 161 + return nil 162 + }) 163 + 136 164 // extract DID from repo commit 137 165 sc := r.SignedCommit() 138 166 signerDID, err := syntax.ParseDID(sc.Did) ··· 143 171 return nil, fmt.Errorf("signer DID %s does not match identity %s", signerDID, ident.DID.String()) 144 172 } 145 173 146 - processed := 0 147 174 bs = r.Blockstore() 148 175 cst := util.CborStore(bs) 149 176 allKeys, err := bs.AllKeysChan(ctx) 150 177 if err != nil { 151 178 return nil, fmt.Errorf("failed to get all keys: %w", err) 152 179 } 153 - signingKeys := []string{} 154 180 for k := range allKeys { 155 - log.Debug(ctx, "processing key", "key", k) 181 + blk, err := bs.Get(ctx, k) 182 + if err != nil { 183 + return nil, fmt.Errorf("failed to get block for key %s: %w", k, err) 184 + } 156 185 rec := map[string]any{} 157 - err := cst.Get(ctx, k, &rec) 186 + err = cst.Get(ctx, k, &rec) 158 187 if err != nil { 159 188 return nil, fmt.Errorf("failed to get block for key %s: %w", k, err) 160 189 } 161 - log.Debug(ctx, "got block", "key", k, "size", len(rec), "record", rec) 162 190 typ, ok := rec["$type"] 163 191 if !ok { 192 + log.Debug(ctx, "record type not found", "key", k) 164 193 continue 165 194 } 166 - if typ != STREAMPLACE_COLLECTION { 167 - continue 195 + log.Debug(ctx, "record type", "key", k, "type", typ) 196 + cb, err := lexutil.CborDecodeValue(blk.RawData()) 197 + log.Debug(ctx, "processing key", "key", k, "cbor", cb) 198 + switch rec := cb.(type) { 199 + case *bsky.GraphFollow: 200 + rec.UnmarshalCBOR(bytes.NewReader(blk.RawData())) 201 + log.Debug(ctx, "creating follow", "follow", rec) 202 + hash := k.Hash().HexString() 203 + rkey, ok := mstNodes[hash] 204 + if !ok { 205 + log.Warn(ctx, "no mst node found for follow", "key", k, "hash", hash) 206 + continue 207 + } 208 + err := mod.CreateFollow(ctx, signerDID.String(), rkey, rec) 209 + if err != nil { 210 + log.Error(ctx, "failed to create follow", "err", err) 211 + } 212 + case *streamplace.Key: 213 + log.Debug(ctx, "creating key", "key", rec) 214 + time, err := aqtime.FromString(rec.CreatedAt) 215 + if err != nil { 216 + log.Error(ctx, "failed to parse createdAt", "err", err) 217 + continue 218 + } 219 + key := model.SigningKey{ 220 + DID: rec.SigningKey, 221 + CreatedAt: time.Time(), 222 + RepoDID: ident.DID.String(), 223 + } 224 + err = mod.UpdateSigningKey(&key) 225 + if err != nil { 226 + log.Error(ctx, "failed to create signing key", "err", err) 227 + } 228 + default: 229 + log.Debug(ctx, "unhandled record type", "type", reflect.TypeOf(rec)) 168 230 } 169 - processed += 1 170 - streamplaceKeyAny, ok := rec[STREAMPLACE_SIGNING_KEY] 171 - if !ok { 172 - continue 173 - } 174 - streamplaceKey, ok := streamplaceKeyAny.(string) 175 - if !ok { 176 - continue 177 - } 178 - signingKeys = append(signingKeys, streamplaceKey) 179 - } 180 - log.Log(ctx, "processed new posts", "postCount", processed, "signingKeys", signingKeys) 181 - 182 - for _, key := range signingKeys { 183 - err := parseSigningKey(ctx, key) 184 231 if err != nil { 185 - log.Warn(ctx, "ignoring non-DID key", "key", key, "error", err) 232 + log.Debug(ctx, "failed to decode block for key", "key", k, "error", err) 186 233 continue 187 - } 188 - err = mod.UpdateSigningKey(&model.SigningKey{ 189 - DID: key, 190 - CreatedAt: time.Now(), 191 - RepoDID: ident.DID.String(), 192 - }) 193 - if err != nil { 194 - return nil, fmt.Errorf("failed to create signing key for %s: %w", key, err) 195 234 } 196 235 } 197 236 ··· 211 250 } 212 251 213 252 func parseSigningKey(ctx context.Context, key string) error { 214 - if !strings.HasPrefix(key, DID_KEY_PREFIX) { 253 + if !strings.HasPrefix(key, constants.DID_KEY_PREFIX) { 215 254 return fmt.Errorf("invalid key format for DID key: %s", key) 216 255 } 217 256 _, err := atcrypto.ParsePublicDIDKey(key)
+289
pkg/atproto/firehose.go
··· 1 + package atproto 2 + 3 + import ( 4 + "bytes" 5 + "context" 6 + "encoding/json" 7 + "fmt" 8 + "log/slog" 9 + "net/http" 10 + "net/url" 11 + "reflect" 12 + "runtime" 13 + "time" 14 + 15 + comatproto "github.com/bluesky-social/indigo/api/atproto" 16 + "github.com/bluesky-social/indigo/api/bsky" 17 + "github.com/bluesky-social/indigo/atproto/data" 18 + "github.com/bluesky-social/indigo/atproto/syntax" 19 + "github.com/bluesky-social/indigo/events" 20 + "github.com/bluesky-social/indigo/events/schedulers/parallel" 21 + lexutil "github.com/bluesky-social/indigo/lex/util" 22 + "github.com/bluesky-social/indigo/repo" 23 + "github.com/bluesky-social/indigo/repomgr" 24 + "golang.org/x/sync/errgroup" 25 + "stream.place/streamplace/pkg/aqhttp" 26 + "stream.place/streamplace/pkg/aqtime" 27 + "stream.place/streamplace/pkg/config" 28 + "stream.place/streamplace/pkg/constants" 29 + "stream.place/streamplace/pkg/log" 30 + "stream.place/streamplace/pkg/model" 31 + notificationpkg "stream.place/streamplace/pkg/notifications" 32 + "stream.place/streamplace/pkg/streamplace" 33 + 34 + "github.com/gorilla/websocket" 35 + ) 36 + 37 + type FirehoseConsumer struct { 38 + cli *config.CLI 39 + mod model.Model 40 + lastSeen time.Time 41 + lastEvent time.Time 42 + noter notificationpkg.FirebaseNotifier 43 + } 44 + 45 + func StartFirehose(ctx context.Context, cli *config.CLI, mod model.Model, noter notificationpkg.FirebaseNotifier) error { 46 + ctx = log.WithLogValues(ctx, "func", "StartFirehose") 47 + ctx, cancel := context.WithCancel(ctx) 48 + defer cancel() 49 + dialer := websocket.DefaultDialer 50 + u, err := url.Parse(cli.RelayHost) 51 + if err != nil { 52 + return fmt.Errorf("invalid relayHost URI: %w", err) 53 + } 54 + u.Path = "xrpc/com.atproto.sync.subscribeRepos" 55 + // if cursor != 0 { 56 + // u.RawQuery = fmt.Sprintf("cursor=%d", cursor) 57 + // } 58 + con, _, err := dialer.Dial(u.String(), http.Header{ 59 + "User-Agent": []string{aqhttp.UserAgent}, 60 + }) 61 + if err != nil { 62 + return fmt.Errorf("subscribing to firehose failed (dialing): %w", err) 63 + } 64 + 65 + fc := &FirehoseConsumer{ 66 + cli: cli, 67 + mod: mod, 68 + lastSeen: time.Now(), 69 + noter: noter, 70 + } 71 + 72 + rsc := &events.RepoStreamCallbacks{ 73 + RepoCommit: func(evt *comatproto.SyncSubscribeRepos_Commit) error { 74 + go fc.handleCommitEventOps(ctx, evt, mod) 75 + return nil 76 + }, 77 + Error: func(evt *events.ErrorFrame) error { 78 + log.Error(ctx, "firehose error", "err", evt.Error, "message", evt.Message) 79 + cancel() 80 + return fmt.Errorf("firehose error: %s", evt.Error) 81 + }, 82 + } 83 + 84 + scheduler := parallel.NewScheduler( 85 + 10, 86 + 100, 87 + cli.RelayHost, 88 + rsc.EventHandler, 89 + ) 90 + 91 + log.Log(ctx, "starting firehose consumer", "relayHost", cli.RelayHost) 92 + 93 + g, ctx := errgroup.WithContext(ctx) 94 + 95 + g.Go(func() error { 96 + return events.HandleRepoStream(ctx, con, scheduler, nil) 97 + }) 98 + 99 + g.Go(func() error { 100 + ticker := time.NewTicker(5 * time.Second) 101 + defer ticker.Stop() 102 + for { 103 + select { 104 + case <-ctx.Done(): 105 + return nil 106 + case <-ticker.C: 107 + since := time.Since(fc.lastEvent) 108 + goroutines := runtime.NumGoroutine() 109 + if since > 10*time.Second { 110 + log.Warn(ctx, fmt.Sprintf("firehose is %s behind real time", since), "goroutines", goroutines) 111 + } else { 112 + log.Debug(ctx, fmt.Sprintf("firehose is %s behind real time", since), "goroutines", goroutines) 113 + } 114 + if time.Since(fc.lastSeen) > 10*time.Second { 115 + log.Warn(ctx, fmt.Sprintf("firehose dry; no new events for %s", time.Since(fc.lastSeen))) 116 + } 117 + } 118 + } 119 + }) 120 + 121 + return g.Wait() 122 + } 123 + 124 + var CollectionFilter = []string{ 125 + constants.PLACE_STREAM_KEY, 126 + constants.PLACE_STREAM_LIVESTREAM, 127 + constants.APP_BSKY_GRAPH_FOLLOW, 128 + } 129 + 130 + func (fc *FirehoseConsumer) handleCommitEventOps(ctx context.Context, evt *comatproto.SyncSubscribeRepos_Commit, mod model.Model) error { 131 + ctx = log.WithLogValues(ctx, "event", "commit", "did", evt.Repo, "rev", evt.Rev, "seq", fmt.Sprintf("%d", evt.Seq), "func", "handleCommitEventOps") 132 + fc.lastSeen = time.Now() 133 + 134 + if evt.TooBig { 135 + log.Warn(ctx, "skipping tooBig events for now") 136 + return nil 137 + } 138 + 139 + rr, err := repo.ReadRepoFromCar(ctx, bytes.NewReader(evt.Blocks)) 140 + if err != nil { 141 + log.Error(ctx, "failed to read repo from car", "err", err) 142 + return nil 143 + } 144 + 145 + for _, op := range evt.Ops { 146 + collection, rkey, err := syntax.ParseRepoPath(op.Path) 147 + if err != nil { 148 + log.Error(ctx, "invalid path in repo op", "eventKind", op.Action, "path", op.Path) 149 + return nil 150 + } 151 + ctx = log.WithLogValues(ctx, "eventKind", op.Action, "collection", collection.String(), "rkey", rkey.String()) 152 + 153 + if len(CollectionFilter) > 0 { 154 + keep := false 155 + for _, c := range CollectionFilter { 156 + if collection.String() == c { 157 + keep = true 158 + break 159 + } 160 + } 161 + if !keep { 162 + continue 163 + } 164 + } 165 + 166 + aqt, err := aqtime.FromString(evt.Time) 167 + if err != nil { 168 + log.Error(ctx, "failed to parse time", "err", err) 169 + continue 170 + } 171 + fc.lastEvent = aqt.Time() 172 + 173 + r, err := mod.GetRepo(evt.Repo) 174 + if err != nil { 175 + log.Error(ctx, "failed to get repo", "err", err) 176 + continue 177 + } 178 + if r == nil { 179 + // someone we don't know aboutd 180 + continue 181 + } 182 + log.Warn(ctx, "got record we care about", "collection", collection, "rkey", rkey) 183 + 184 + out := make(map[string]interface{}) 185 + out["seq"] = evt.Seq 186 + out["repo"] = evt.Repo 187 + out["rev"] = evt.Rev 188 + out["time"] = evt.Time 189 + out["collection"] = collection 190 + out["rkey"] = rkey 191 + 192 + ek := repomgr.EventKind(op.Action) 193 + switch ek { 194 + case repomgr.EvtKindCreateRecord, repomgr.EvtKindUpdateRecord: 195 + // read the record bytes from blocks, and verify CID 196 + rc, recCBOR, err := rr.GetRecordBytes(ctx, op.Path) 197 + if err != nil { 198 + log.Error(ctx, "reading record from event blocks (CAR)", "err", err) 199 + break 200 + } 201 + if op.Cid == nil || lexutil.LexLink(rc) != *op.Cid { 202 + log.Error(ctx, "mismatch between commit op CID and record block", "recordCID", rc, "opCID", op.Cid) 203 + break 204 + } 205 + 206 + switch ek { 207 + case repomgr.EvtKindCreateRecord: 208 + out["action"] = "create" 209 + case repomgr.EvtKindUpdateRecord: 210 + out["action"] = "update" 211 + default: 212 + log.Error(ctx, "impossible event kind", "kind", ek) 213 + break 214 + } 215 + cb, err := lexutil.CborDecodeValue(*recCBOR) 216 + if err != nil { 217 + log.Error(ctx, "failed to parse record CBOR", "err", err) 218 + continue 219 + } 220 + switch rec := cb.(type) { 221 + case *bsky.GraphFollow: 222 + log.Debug(ctx, "creating follow", "userDID", evt.Repo, "subjectDID", rec.Subject, "rev", evt.Rev) 223 + err := mod.CreateFollow(ctx, evt.Repo, rkey.String(), rec) 224 + if err != nil { 225 + log.Error(ctx, "failed to create follow", "err", err) 226 + } 227 + case *streamplace.Livestream: 228 + var u string 229 + if rec.Url != nil { 230 + u = *rec.Url 231 + } 232 + log.Warn(ctx, "Livestream detected! Blasting followers!", "title", rec.Title, "url", u, "createdAt", rec.CreatedAt, "repo", evt.Repo) 233 + notifications, err := mod.GetFollowersNotificationTokens(evt.Repo) 234 + if err != nil { 235 + return err 236 + } 237 + 238 + nb := &notificationpkg.NotificationBlast{ 239 + Title: fmt.Sprintf("🔴 @%s is LIVE!", r.Handle), 240 + Body: rec.Title, 241 + Data: map[string]string{ 242 + "path": fmt.Sprintf("/%s", r.Handle), 243 + }, 244 + } 245 + if fc.noter != nil { 246 + err := fc.noter.Blast(ctx, notifications, nb) 247 + if err != nil { 248 + log.Error(ctx, "failed to blast notifications", "err", err) 249 + } else { 250 + log.Log(ctx, "sent notifications", "user", evt.Repo, "count", len(notifications), "content", nb) 251 + } 252 + } else { 253 + log.Log(ctx, "no notifier configured, skipping notifications", "user", evt.Repo, "count", len(notifications), "content", nb) 254 + } 255 + default: 256 + log.Debug(ctx, "unhandled record type", "type", reflect.TypeOf(rec)) 257 + } 258 + d, err := data.UnmarshalCBOR(*recCBOR) 259 + if err != nil { 260 + slog.Warn("failed to parse record CBOR") 261 + continue 262 + } 263 + out["cid"] = op.Cid.String() 264 + out["record"] = d 265 + b, err := json.Marshal(out) 266 + if err != nil { 267 + return err 268 + } 269 + log.Debug(ctx, "got record", "record", string(b)) 270 + case repomgr.EvtKindDeleteRecord: 271 + out["action"] = "delete" 272 + if collection.String() == constants.APP_BSKY_GRAPH_FOLLOW { 273 + log.Debug(ctx, "deleting follow", "userDID", evt.Repo, "subjectDID", rkey.String()) 274 + err := mod.DeleteFollow(ctx, evt.Repo, rkey.String()) 275 + if err != nil { 276 + log.Error(ctx, "failed to delete follow", "err", err) 277 + } 278 + } 279 + b, err := json.Marshal(out) 280 + if err != nil { 281 + return err 282 + } 283 + log.Debug(ctx, "got record", "record", string(b)) 284 + default: 285 + log.Error(ctx, "unexpected record op kind") 286 + } 287 + } 288 + return nil 289 + }
+5 -40
pkg/cmd/streamplace.go
··· 4 4 "bytes" 5 5 "context" 6 6 "crypto" 7 - "errors" 8 7 "flag" 9 8 "fmt" 10 9 "os" ··· 17 16 "time" 18 17 19 18 "golang.org/x/term" 20 - "gorm.io/gorm" 21 19 "stream.place/streamplace/pkg/aqhttp" 22 20 "stream.place/streamplace/pkg/aqtime" 23 21 "stream.place/streamplace/pkg/atproto" ··· 26 24 "stream.place/streamplace/pkg/log" 27 25 "stream.place/streamplace/pkg/media" 28 26 "stream.place/streamplace/pkg/notifications" 29 - notificationpkg "stream.place/streamplace/pkg/notifications" 30 27 "stream.place/streamplace/pkg/replication" 31 28 "stream.place/streamplace/pkg/replication/boring" 32 29 v0 "stream.place/streamplace/pkg/schema/v0" ··· 125 122 fs.BoolVar(&cli.TestStream, "test-stream", false, "run a built-in test stream on boot") 126 123 doValidate := fs.Bool("validate", false, "validate media") 127 124 verbosity := fs.String("v", "3", "log verbosity level") 128 - 125 + fs.StringVar(&cli.RelayHost, "relay-host", "wss://bsky.network", "websocket url for relay firehose") 129 126 fs.Bool("insecure", false, "DEPRECATED, does nothing.") 130 127 131 128 version := fs.Bool("version", false, "print version and exit") ··· 308 305 }) 309 306 310 307 group.Go(func() error { 308 + return atproto.StartFirehose(ctx, &cli, mod, noter) 309 + }) 310 + 311 + group.Go(func() error { 311 312 newSeg := mm.NewSegment() 312 313 for { 313 314 select { 314 315 case <-ctx.Done(): 315 316 return nil 316 317 case not := <-newSeg: 317 - prevSeg, prevErr := mod.LatestSegmentForUser(not.Segment.RepoDID) 318 318 err := mod.CreateSegment(not.Segment) 319 319 if err != nil { 320 320 log.Error(ctx, "could not add segment to database", "error", err) ··· 351 351 }() 352 352 if err != nil { 353 353 log.Error(ctx, "could not create thumbnail", "error", err) 354 - } 355 - }() 356 - go func() { 357 - err := func() error { 358 - if prevErr != nil && !errors.Is(prevErr, gorm.ErrRecordNotFound) { 359 - log.Error(ctx, "could not retreive previous segment", "error", prevErr) 360 - return prevErr 361 - } 362 - if prevSeg != nil { 363 - dur := not.Segment.StartTime.Sub(prevSeg.StartTime) 364 - if prevSeg != nil && dur < (5*time.Minute) { 365 - log.Debug(ctx, "skipping notification, less than 5 minutes since last segment", "user", not.Segment.RepoDID, "duration", dur) 366 - // it's been less than 5 minutes since the last segment, skip notification 367 - return nil 368 - } 369 - } 370 - 371 - notifications, err := mod.ListNotifications() 372 - if err != nil { 373 - return err 374 - } 375 - 376 - nb := &notificationpkg.NotificationBlast{ 377 - Streamer: not.Metadata.Creator, 378 - Title: not.Metadata.Title, 379 - } 380 - if noter != nil { 381 - noter.Blast(ctx, notifications, nb) 382 - } else { 383 - log.Log(ctx, "no notifier configured, skipping notifications", "user", not.Segment.RepoDID, "count", len(notifications), "content", nb) 384 - } 385 - return nil 386 - }() 387 - if err != nil { 388 - log.Error(ctx, "could not send notification", "error", err) 389 354 } 390 355 }() 391 356 }
+3 -2
pkg/config/config.go
··· 19 19 "github.com/peterbourgon/ff/v3" 20 20 "golang.org/x/exp/rand" 21 21 "stream.place/streamplace/pkg/aqtime" 22 - "stream.place/streamplace/pkg/atproto" 22 + "stream.place/streamplace/pkg/constants" 23 23 "stream.place/streamplace/pkg/crypto/aqpub" 24 24 ) 25 25 ··· 72 72 PKCS11KeypairLabel string 73 73 PKCS11KeypairID string 74 74 StreamerName string 75 + RelayHost string 75 76 Debug map[string]map[string]int 76 77 AllowedStreams []string 77 78 Peers []string ··· 334 335 // if the user set no test streams, anyone can stream 335 336 openServer := len(cli.AllowedStreams) == 0 || (cli.TestStream && len(cli.AllowedStreams) == 1) 336 337 // but only valid atproto accounts! did:key is only allowed for our local test stream 337 - isDIDKey := strings.HasPrefix(did, atproto.DID_KEY_PREFIX) 338 + isDIDKey := strings.HasPrefix(did, constants.DID_KEY_PREFIX) 338 339 if openServer && !isDIDKey { 339 340 return nil 340 341 }
+9
pkg/constants/constants.go
··· 1 + package constants 2 + 3 + var PLACE_STREAM_KEY = "place.stream.key" 4 + var PLACE_STREAM_LIVESTREAM = "place.stream.livestream" 5 + var STREAMPLACE_SIGNING_KEY = "signingKey" 6 + var APP_BSKY_GRAPH_FOLLOW = "app.bsky.graph.follow" 7 + 8 + const DID_KEY_PREFIX = "did:key" 9 + const ADDRESS_KEY_PREFIX = "0x"
+27
pkg/gen/gen.go
··· 1 + package main 2 + 3 + import ( 4 + "reflect" 5 + 6 + "github.com/bluesky-social/indigo/mst" 7 + "stream.place/streamplace/pkg/streamplace" 8 + 9 + cbg "github.com/whyrusleeping/cbor-gen" 10 + ) 11 + 12 + func main() { 13 + var typVals []any 14 + for _, typ := range mst.CBORTypes() { 15 + typVals = append(typVals, reflect.New(typ).Elem().Interface()) 16 + } 17 + 18 + genCfg := cbg.Gen{ 19 + MaxStringLength: 1_000_000, 20 + } 21 + 22 + if err := genCfg.WriteMapEncodersToFile("pkg/streamplace/cbor_gen.go", "streamplace", 23 + streamplace.Key{}, streamplace.Livestream{}, 24 + ); err != nil { 25 + panic(err) 26 + } 27 + }
+29 -14
pkg/log/log.go
··· 52 52 53 53 // basic type to represent logging container. logging context is immutable after 54 54 // creation, so we don't have to worry about locking. 55 - type metadata map[string]any 55 + type metadata [][]string 56 56 57 57 func init() { 58 58 // Set default v level to 3; this is overridden in main() but is useful for tests ··· 70 70 return &VerboseLogger{level: level} 71 71 } 72 72 73 + func (m metadata) Map() map[string]string { 74 + out := map[string]string{} 75 + for _, pair := range m { 76 + out[pair[0]] = pair[1] 77 + } 78 + return out 79 + } 80 + 73 81 func (m metadata) Flat() []any { 74 82 out := []any{} 75 - for k, v := range m { 76 - out = append(out, k) 77 - out = append(out, v) 83 + for _, pair := range m { 84 + out = append(out, pair[0]) 85 + out = append(out, pair[1]) 78 86 } 79 87 return out 80 88 } ··· 87 95 oldMetadata = metadata{} 88 96 } 89 97 var newMetadata = metadata{} 90 - for k, v := range oldMetadata { 91 - newMetadata[k] = v 98 + for _, pair := range oldMetadata { 99 + newMetadata = append(newMetadata, []string{pair[0], pair[1]}) 92 100 } 93 101 for i := range args { 94 102 if i%2 == 0 { 95 103 continue 96 104 } 97 - newMetadata[args[i-1]] = args[i] 105 + newKey := args[i-1] 106 + newValue := args[i] 107 + found := false 108 + for _, pair := range newMetadata { 109 + if pair[0] == newKey { 110 + pair[1] = newValue 111 + found = true 112 + break 113 + } 114 + } 115 + if !found { 116 + newMetadata = append(newMetadata, []string{newKey, newValue}) 117 + } 98 118 } 99 119 return context.WithValue(ctx, clogContextKey, newMetadata) 100 120 } ··· 121 141 // meta is {"func": "ToHLS", "file": "gstreamer.go"} 122 142 // we want to use the highest level between debug and meta 123 143 if debugOk && metaOk { 124 - for mk, mv := range meta { 144 + for mk, mv := range meta.Map() { 125 145 debugValuesForMetaValue, ok := debug[mk] 126 146 if !ok { 127 147 continue 128 148 } 129 - mvstr, ok := mv.(string) 130 - if !ok { 131 - // TODO: possible we will need to handle numeric types 132 - continue 133 - } 134 - ll, ok := debugValuesForMetaValue[mvstr] 149 + ll, ok := debugValuesForMetaValue[mv] 135 150 if !ok { 136 151 continue 137 152 }
+2 -1
pkg/media/media.go
··· 18 18 "stream.place/streamplace/pkg/aqtime" 19 19 "stream.place/streamplace/pkg/atproto" 20 20 "stream.place/streamplace/pkg/config" 21 + "stream.place/streamplace/pkg/constants" 21 22 "stream.place/streamplace/pkg/crypto/signers" 22 23 "stream.place/streamplace/pkg/log" 23 24 "stream.place/streamplace/pkg/model" ··· 343 344 // special case for test signers that are only signed with a key 344 345 var repoDID string 345 346 var signingKeyDID string 346 - if strings.HasPrefix(meta.Creator, atproto.DID_KEY_PREFIX) { 347 + if strings.HasPrefix(meta.Creator, constants.DID_KEY_PREFIX) { 347 348 signingKeyDID = meta.Creator 348 349 repoDID = meta.Creator 349 350 } else {
+51
pkg/model/follow.go
··· 1 + package model 2 + 3 + import ( 4 + "context" 5 + "fmt" 6 + "time" 7 + 8 + "github.com/bluesky-social/indigo/api/bsky" 9 + "stream.place/streamplace/pkg/aqtime" 10 + ) 11 + 12 + type Follow struct { 13 + UserDID string `gorm:"primaryKey;index:user_idx;column:user_did"` 14 + SubjectDID string `gorm:"primaryKey;index:subject_idx;column:subject_did"` 15 + RKey string `gorm:"index;column:rkey"` 16 + CreatedAt time.Time 17 + } 18 + 19 + func (m *DBModel) CreateFollow(ctx context.Context, userDID, rkey string, follow *bsky.GraphFollow) error { 20 + at, err := aqtime.FromString(follow.CreatedAt) 21 + if err != nil { 22 + return fmt.Errorf("failed to parse follow createdAt: %w", err) 23 + } 24 + return m.DB.Save(&Follow{ 25 + UserDID: userDID, 26 + SubjectDID: follow.Subject, 27 + RKey: rkey, 28 + CreatedAt: at.Time(), 29 + }).Error 30 + } 31 + 32 + func (m *DBModel) DeleteFollow(ctx context.Context, userDID, rkey string) error { 33 + res := m.DB.Where("user_did = ? AND rkey = ?", userDID, rkey).Delete(&Follow{}) 34 + if res.Error != nil { 35 + return fmt.Errorf("failed to delete follow: %w", res.Error) 36 + } 37 + if res.RowsAffected == 0 { 38 + return fmt.Errorf("no follow found for userDID %s and rkey %s", userDID, rkey) 39 + } 40 + return nil 41 + } 42 + 43 + func (m *DBModel) GetUserFollowing(ctx context.Context, userDID string) ([]Follow, error) { 44 + var follows []Follow 45 + return follows, m.DB.Where("user_did = ?", userDID).Find(&follows).Error 46 + } 47 + 48 + func (m *DBModel) GetUserFollowers(ctx context.Context, userDID string) ([]Follow, error) { 49 + var follows []Follow 50 + return follows, m.DB.Where("subject_did = ?", userDID).Find(&follows).Error 51 + }
+13 -2
pkg/model/model.go
··· 8 8 "strings" 9 9 "time" 10 10 11 + "github.com/bluesky-social/indigo/api/bsky" 11 12 "github.com/lmittmann/tint" 12 13 slogGorm "github.com/orandin/slog-gorm" 13 14 "gorm.io/driver/sqlite" ··· 20 21 } 21 22 22 23 type Model interface { 23 - CreateNotification(token string) error 24 + CreateNotification(token, repoDID string) error 24 25 ListNotifications() ([]Notification, error) 25 26 26 27 CreatePlayerEvent(event PlayerEventAPI) error ··· 48 49 UpdateSigningKey(key *SigningKey) error 49 50 GetSigningKey(did, repoDID string) (*SigningKey, error) 50 51 GetSigningKeysForRepo(repoDID string) ([]SigningKey, error) 52 + 53 + CreateFollow(ctx context.Context, userDID, rev string, follow *bsky.GraphFollow) error 54 + GetUserFollowing(ctx context.Context, userDID string) ([]Follow, error) 55 + GetUserFollowers(ctx context.Context, userDID string) ([]Follow, error) 56 + DeleteFollow(ctx context.Context, userDID, rev string) error 57 + GetFollowersNotificationTokens(userDID string) ([]string, error) 51 58 } 52 59 53 60 func MakeDB(dbURL string) (Model, error) { ··· 78 85 if err != nil { 79 86 return nil, fmt.Errorf("error starting database: %w", err) 80 87 } 81 - for _, model := range []any{Notification{}, PlayerEvent{}, Segment{}, Thumbnail{}, Identity{}, Repo{}, SigningKey{}} { 88 + err = db.Exec("PRAGMA journal_mode=WAL;").Error 89 + if err != nil { 90 + return nil, fmt.Errorf("error setting journal mode: %w", err) 91 + } 92 + for _, model := range []any{Notification{}, PlayerEvent{}, Segment{}, Thumbnail{}, Identity{}, Repo{}, SigningKey{}, Follow{}} { 82 93 err = db.AutoMigrate(model) 83 94 if err != nil { 84 95 return nil, err
+43 -3
pkg/model/notification.go
··· 9 9 10 10 type Notification struct { 11 11 Token string `gorm:"primarykey"` 12 + RepoDID string `json:"repoDID,omitempty" gorm:"column:repo_did;index"` 12 13 CreatedAt time.Time 13 14 UpdatedAt time.Time 14 15 DeletedAt gorm.DeletedAt `gorm:"index"` 15 16 } 16 17 17 - func (m *DBModel) CreateNotification(token string) error { 18 - err := m.DB.Model(Notification{}).Create(&Notification{ 18 + func (m *DBModel) CreateNotification(token string, repoDID string) error { 19 + not := Notification{ 19 20 Token: token, 20 - }).Error 21 + } 22 + if repoDID != "" { 23 + not.RepoDID = repoDID 24 + } 25 + err := m.DB.Save(&not).Error 21 26 if err != nil { 22 27 return err 23 28 } ··· 32 37 } 33 38 return nots, nil 34 39 } 40 + 41 + func (m *DBModel) ListUserNotifications(userDID string) ([]Notification, error) { 42 + nots := []Notification{} 43 + err := m.DB.Where("repo_did = ?", userDID).Find(&nots).Error 44 + if err != nil { 45 + return nil, fmt.Errorf("error retrieving notifications: %w", err) 46 + } 47 + return nots, nil 48 + } 49 + 50 + func (m *DBModel) GetFollowersNotificationTokens(userDID string) ([]string, error) { 51 + var tokens []string 52 + 53 + err := m.DB.Model(&Notification{}). 54 + Distinct("notifications.token"). 55 + Joins("JOIN follows ON follows.user_did = notifications.repo_did"). 56 + Where("follows.subject_did = ?", userDID). 57 + Pluck("notifications.token", &tokens). 58 + Error 59 + 60 + if err != nil { 61 + return nil, fmt.Errorf("error retrieving follower notification tokens: %w", err) 62 + } 63 + 64 + // also you prolly wanna get one for yourself 65 + nots, err := m.ListUserNotifications(userDID) 66 + if err != nil { 67 + return nil, fmt.Errorf("error retrieving user notifications: %w", err) 68 + } 69 + for _, not := range nots { 70 + tokens = append(tokens, not.Token) 71 + } 72 + 73 + return tokens, nil 74 + }
+8 -23
pkg/notifications/firebase.go
··· 10 10 "golang.org/x/net/context" 11 11 "google.golang.org/api/option" 12 12 "stream.place/streamplace/pkg/log" 13 - "stream.place/streamplace/pkg/model" 14 13 ) 15 14 16 15 type FirebaseNotifier interface { 17 - Blast(ctx context.Context, nots []model.Notification, golive *NotificationBlast) error 16 + Blast(ctx context.Context, tokens []string, golive *NotificationBlast) error 18 17 } 19 18 20 19 type FirebaseNotifierS struct { ··· 26 25 } 27 26 28 27 type NotificationBlast struct { 29 - Title string 30 - Streamer string 31 - } 32 - 33 - func (nb *NotificationBlast) String() string { 34 - return fmt.Sprintf("%s %s", nb.PrintTitle(), nb.PrintBody()) 35 - } 36 - 37 - func (nb *NotificationBlast) PrintTitle() string { 38 - return fmt.Sprintf("🔴 %s is LIVE!", nb.Streamer) 39 - } 40 - 41 - func (nb *NotificationBlast) PrintBody() string { 42 - return nb.Title 28 + Title string `json:"title"` 29 + Body string `json:"body"` 30 + Data map[string]string `json:"data"` 43 31 } 44 32 45 33 func MakeFirebaseNotifier(ctx context.Context, serviceAccountJSONb64 string) (FirebaseNotifier, error) { ··· 67 55 } 68 56 69 57 // refactor me when we have >500 users 70 - func (f *FirebaseNotifierS) Blast(ctx context.Context, nots []model.Notification, blast *NotificationBlast) error { 58 + func (f *FirebaseNotifierS) Blast(ctx context.Context, tokens []string, blast *NotificationBlast) error { 71 59 client, err := f.app.Messaging(ctx) 72 60 if err != nil { 73 61 return err 74 - } 75 - var tokens []string 76 - for _, n := range nots { 77 - tokens = append(tokens, n.Token) 78 62 } 79 63 80 64 notification := &messaging.MulticastMessage{ 81 65 Tokens: tokens, 66 + Data: blast.Data, 82 67 Notification: &messaging.Notification{ 83 - Title: blast.PrintTitle(), 84 - Body: blast.PrintBody(), 68 + Title: blast.Title, 69 + Body: blast.Body, 85 70 }, 86 71 Android: &messaging.AndroidConfig{ 87 72 Priority: "high",
+406
pkg/streamplace/cbor_gen.go
··· 1 + // Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. 2 + 3 + package streamplace 4 + 5 + import ( 6 + "fmt" 7 + "io" 8 + "math" 9 + "sort" 10 + 11 + cid "github.com/ipfs/go-cid" 12 + cbg "github.com/whyrusleeping/cbor-gen" 13 + xerrors "golang.org/x/xerrors" 14 + ) 15 + 16 + var _ = xerrors.Errorf 17 + var _ = cid.Undef 18 + var _ = math.E 19 + var _ = sort.Sort 20 + 21 + func (t *Key) MarshalCBOR(w io.Writer) error { 22 + if t == nil { 23 + _, err := w.Write(cbg.CborNull) 24 + return err 25 + } 26 + 27 + cw := cbg.NewCborWriter(w) 28 + 29 + if _, err := cw.Write([]byte{163}); err != nil { 30 + return err 31 + } 32 + 33 + // t.LexiconTypeID (string) (string) 34 + if len("$type") > 1000000 { 35 + return xerrors.Errorf("Value in field \"$type\" was too long") 36 + } 37 + 38 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("$type"))); err != nil { 39 + return err 40 + } 41 + if _, err := cw.WriteString(string("$type")); err != nil { 42 + return err 43 + } 44 + 45 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("place.stream.key"))); err != nil { 46 + return err 47 + } 48 + if _, err := cw.WriteString(string("place.stream.key")); err != nil { 49 + return err 50 + } 51 + 52 + // t.CreatedAt (string) (string) 53 + if len("createdAt") > 1000000 { 54 + return xerrors.Errorf("Value in field \"createdAt\" was too long") 55 + } 56 + 57 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("createdAt"))); err != nil { 58 + return err 59 + } 60 + if _, err := cw.WriteString(string("createdAt")); err != nil { 61 + return err 62 + } 63 + 64 + if len(t.CreatedAt) > 1000000 { 65 + return xerrors.Errorf("Value in field t.CreatedAt was too long") 66 + } 67 + 68 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.CreatedAt))); err != nil { 69 + return err 70 + } 71 + if _, err := cw.WriteString(string(t.CreatedAt)); err != nil { 72 + return err 73 + } 74 + 75 + // t.SigningKey (string) (string) 76 + if len("signingKey") > 1000000 { 77 + return xerrors.Errorf("Value in field \"signingKey\" was too long") 78 + } 79 + 80 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("signingKey"))); err != nil { 81 + return err 82 + } 83 + if _, err := cw.WriteString(string("signingKey")); err != nil { 84 + return err 85 + } 86 + 87 + if len(t.SigningKey) > 1000000 { 88 + return xerrors.Errorf("Value in field t.SigningKey was too long") 89 + } 90 + 91 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.SigningKey))); err != nil { 92 + return err 93 + } 94 + if _, err := cw.WriteString(string(t.SigningKey)); err != nil { 95 + return err 96 + } 97 + return nil 98 + } 99 + 100 + func (t *Key) UnmarshalCBOR(r io.Reader) (err error) { 101 + *t = Key{} 102 + 103 + cr := cbg.NewCborReader(r) 104 + 105 + maj, extra, err := cr.ReadHeader() 106 + if err != nil { 107 + return err 108 + } 109 + defer func() { 110 + if err == io.EOF { 111 + err = io.ErrUnexpectedEOF 112 + } 113 + }() 114 + 115 + if maj != cbg.MajMap { 116 + return fmt.Errorf("cbor input should be of type map") 117 + } 118 + 119 + if extra > cbg.MaxLength { 120 + return fmt.Errorf("Key: map struct too large (%d)", extra) 121 + } 122 + 123 + n := extra 124 + 125 + nameBuf := make([]byte, 10) 126 + for i := uint64(0); i < n; i++ { 127 + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 1000000) 128 + if err != nil { 129 + return err 130 + } 131 + 132 + if !ok { 133 + // Field doesn't exist on this type, so ignore it 134 + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { 135 + return err 136 + } 137 + continue 138 + } 139 + 140 + switch string(nameBuf[:nameLen]) { 141 + // t.LexiconTypeID (string) (string) 142 + case "$type": 143 + 144 + { 145 + sval, err := cbg.ReadStringWithMax(cr, 1000000) 146 + if err != nil { 147 + return err 148 + } 149 + 150 + t.LexiconTypeID = string(sval) 151 + } 152 + // t.CreatedAt (string) (string) 153 + case "createdAt": 154 + 155 + { 156 + sval, err := cbg.ReadStringWithMax(cr, 1000000) 157 + if err != nil { 158 + return err 159 + } 160 + 161 + t.CreatedAt = string(sval) 162 + } 163 + // t.SigningKey (string) (string) 164 + case "signingKey": 165 + 166 + { 167 + sval, err := cbg.ReadStringWithMax(cr, 1000000) 168 + if err != nil { 169 + return err 170 + } 171 + 172 + t.SigningKey = string(sval) 173 + } 174 + 175 + default: 176 + // Field doesn't exist on this type, so ignore it 177 + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { 178 + return err 179 + } 180 + } 181 + } 182 + 183 + return nil 184 + } 185 + func (t *Livestream) MarshalCBOR(w io.Writer) error { 186 + if t == nil { 187 + _, err := w.Write(cbg.CborNull) 188 + return err 189 + } 190 + 191 + cw := cbg.NewCborWriter(w) 192 + fieldCount := 4 193 + 194 + if t.Url == nil { 195 + fieldCount-- 196 + } 197 + 198 + if _, err := cw.Write(cbg.CborEncodeMajorType(cbg.MajMap, uint64(fieldCount))); err != nil { 199 + return err 200 + } 201 + 202 + // t.Url (string) (string) 203 + if t.Url != nil { 204 + 205 + if len("url") > 1000000 { 206 + return xerrors.Errorf("Value in field \"url\" was too long") 207 + } 208 + 209 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("url"))); err != nil { 210 + return err 211 + } 212 + if _, err := cw.WriteString(string("url")); err != nil { 213 + return err 214 + } 215 + 216 + if t.Url == nil { 217 + if _, err := cw.Write(cbg.CborNull); err != nil { 218 + return err 219 + } 220 + } else { 221 + if len(*t.Url) > 1000000 { 222 + return xerrors.Errorf("Value in field t.Url was too long") 223 + } 224 + 225 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(*t.Url))); err != nil { 226 + return err 227 + } 228 + if _, err := cw.WriteString(string(*t.Url)); err != nil { 229 + return err 230 + } 231 + } 232 + } 233 + 234 + // t.LexiconTypeID (string) (string) 235 + if len("$type") > 1000000 { 236 + return xerrors.Errorf("Value in field \"$type\" was too long") 237 + } 238 + 239 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("$type"))); err != nil { 240 + return err 241 + } 242 + if _, err := cw.WriteString(string("$type")); err != nil { 243 + return err 244 + } 245 + 246 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("place.stream.livestream"))); err != nil { 247 + return err 248 + } 249 + if _, err := cw.WriteString(string("place.stream.livestream")); err != nil { 250 + return err 251 + } 252 + 253 + // t.Title (string) (string) 254 + if len("title") > 1000000 { 255 + return xerrors.Errorf("Value in field \"title\" was too long") 256 + } 257 + 258 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("title"))); err != nil { 259 + return err 260 + } 261 + if _, err := cw.WriteString(string("title")); err != nil { 262 + return err 263 + } 264 + 265 + if len(t.Title) > 1000000 { 266 + return xerrors.Errorf("Value in field t.Title was too long") 267 + } 268 + 269 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Title))); err != nil { 270 + return err 271 + } 272 + if _, err := cw.WriteString(string(t.Title)); err != nil { 273 + return err 274 + } 275 + 276 + // t.CreatedAt (string) (string) 277 + if len("createdAt") > 1000000 { 278 + return xerrors.Errorf("Value in field \"createdAt\" was too long") 279 + } 280 + 281 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("createdAt"))); err != nil { 282 + return err 283 + } 284 + if _, err := cw.WriteString(string("createdAt")); err != nil { 285 + return err 286 + } 287 + 288 + if len(t.CreatedAt) > 1000000 { 289 + return xerrors.Errorf("Value in field t.CreatedAt was too long") 290 + } 291 + 292 + if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.CreatedAt))); err != nil { 293 + return err 294 + } 295 + if _, err := cw.WriteString(string(t.CreatedAt)); err != nil { 296 + return err 297 + } 298 + return nil 299 + } 300 + 301 + func (t *Livestream) UnmarshalCBOR(r io.Reader) (err error) { 302 + *t = Livestream{} 303 + 304 + cr := cbg.NewCborReader(r) 305 + 306 + maj, extra, err := cr.ReadHeader() 307 + if err != nil { 308 + return err 309 + } 310 + defer func() { 311 + if err == io.EOF { 312 + err = io.ErrUnexpectedEOF 313 + } 314 + }() 315 + 316 + if maj != cbg.MajMap { 317 + return fmt.Errorf("cbor input should be of type map") 318 + } 319 + 320 + if extra > cbg.MaxLength { 321 + return fmt.Errorf("Livestream: map struct too large (%d)", extra) 322 + } 323 + 324 + n := extra 325 + 326 + nameBuf := make([]byte, 9) 327 + for i := uint64(0); i < n; i++ { 328 + nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 1000000) 329 + if err != nil { 330 + return err 331 + } 332 + 333 + if !ok { 334 + // Field doesn't exist on this type, so ignore it 335 + if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil { 336 + return err 337 + } 338 + continue 339 + } 340 + 341 + switch string(nameBuf[:nameLen]) { 342 + // t.Url (string) (string) 343 + case "url": 344 + 345 + { 346 + b, err := cr.ReadByte() 347 + if err != nil { 348 + return err 349 + } 350 + if b != cbg.CborNull[0] { 351 + if err := cr.UnreadByte(); err != nil { 352 + return err 353 + } 354 + 355 + sval, err := cbg.ReadStringWithMax(cr, 1000000) 356 + if err != nil { 357 + return err 358 + } 359 + 360 + t.Url = (*string)(&sval) 361 + } 362 + } 363 + // t.LexiconTypeID (string) (string) 364 + case "$type": 365 + 366 + { 367 + sval, err := cbg.ReadStringWithMax(cr, 1000000) 368 + if err != nil { 369 + return err 370 + } 371 + 372 + t.LexiconTypeID = string(sval) 373 + } 374 + // t.Title (string) (string) 375 + case "title": 376 + 377 + { 378 + sval, err := cbg.ReadStringWithMax(cr, 1000000) 379 + if err != nil { 380 + return err 381 + } 382 + 383 + t.Title = string(sval) 384 + } 385 + // t.CreatedAt (string) (string) 386 + case "createdAt": 387 + 388 + { 389 + sval, err := cbg.ReadStringWithMax(cr, 1000000) 390 + if err != nil { 391 + return err 392 + } 393 + 394 + t.CreatedAt = string(sval) 395 + } 396 + 397 + default: 398 + // Field doesn't exist on this type, so ignore it 399 + if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil { 400 + return err 401 + } 402 + } 403 + } 404 + 405 + return nil 406 + }
+21
pkg/streamplace/streamkey.go
··· 1 + // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT. 2 + 3 + package streamplace 4 + 5 + // schema: place.stream.key 6 + 7 + import ( 8 + "github.com/bluesky-social/indigo/lex/util" 9 + ) 10 + 11 + func init() { 12 + util.RegisterType("place.stream.key", &Key{}) 13 + } // 14 + // RECORDTYPE: Key 15 + type Key struct { 16 + LexiconTypeID string `json:"$type,const=place.stream.key" cborgen:"$type,const=place.stream.key"` 17 + // createdAt: Client-declared timestamp when this key was created. 18 + CreatedAt string `json:"createdAt" cborgen:"createdAt"` 19 + // signingKey: The did:key signing key for the stream. 20 + SigningKey string `json:"signingKey" cborgen:"signingKey"` 21 + }
+23
pkg/streamplace/streamlivestream.go
··· 1 + // Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT. 2 + 3 + package streamplace 4 + 5 + // schema: place.stream.livestream 6 + 7 + import ( 8 + "github.com/bluesky-social/indigo/lex/util" 9 + ) 10 + 11 + func init() { 12 + util.RegisterType("place.stream.livestream", &Livestream{}) 13 + } // 14 + // RECORDTYPE: Livestream 15 + type Livestream struct { 16 + LexiconTypeID string `json:"$type,const=place.stream.livestream" cborgen:"$type,const=place.stream.livestream"` 17 + // createdAt: Client-declared timestamp when this livestream started. 18 + CreatedAt string `json:"createdAt" cborgen:"createdAt"` 19 + // title: The title of the livestream, as it will be announced to followers. 20 + Title string `json:"title" cborgen:"title"` 21 + // url: The URL where this stream can be found. This is primarily a hint for other Streamplace nodes to locate and replicate the stream. 22 + Url *string `json:"url,omitempty" cborgen:"url,omitempty"` 23 + }
+9
tools.go
··· 1 + //go:build tools 2 + 3 + package tools 4 + 5 + import ( 6 + _ "github.com/99designs/gqlgen" 7 + _ "github.com/99designs/gqlgen/graphql/introspection" 8 + _ "github.com/bluesky-social/indigo/cmd/lexgen" 9 + )
+1384 -1206
yarn.lock
··· 203 203 languageName: node 204 204 linkType: hard 205 205 206 + "@atproto/common-web@npm:^0.3.2": 207 + version: 0.3.2 208 + resolution: "@atproto/common-web@npm:0.3.2" 209 + dependencies: 210 + graphemer: "npm:^1.4.0" 211 + multiformats: "npm:^9.9.0" 212 + uint8arrays: "npm:3.0.0" 213 + zod: "npm:^3.23.8" 214 + checksum: 10/6c58fb57514ae6d26de511800492abea873ecd3f61c1bc7f01cac4630f62e51fa325b44bd47c23d06d3191b81b4b9d2fbe28bbfcad20e213cc42891945d71bd9 215 + languageName: node 216 + linkType: hard 217 + 206 218 "@atproto/crypto@npm:^0.4.2": 207 219 version: 0.4.2 208 220 resolution: "@atproto/crypto@npm:0.4.2" ··· 264 276 languageName: node 265 277 linkType: hard 266 278 279 + "@atproto/lex-cli@npm:^0.5.6": 280 + version: 0.5.6 281 + resolution: "@atproto/lex-cli@npm:0.5.6" 282 + dependencies: 283 + "@atproto/lexicon": "npm:^0.4.5" 284 + "@atproto/syntax": "npm:^0.3.1" 285 + chalk: "npm:^4.1.2" 286 + commander: "npm:^9.4.0" 287 + prettier: "npm:^3.2.5" 288 + ts-morph: "npm:^16.0.0" 289 + yesno: "npm:^0.4.0" 290 + zod: "npm:^3.23.8" 291 + bin: 292 + lex: dist/index.js 293 + checksum: 10/ba8cb51b626448e397b82a3cb7d08a53eb38a4816cdd8cfe93ec1c87a480870a30463049bbd4048294cd45d53db95bd0e22d7ac5de53b5dd86fca4128702d0c2 294 + languageName: node 295 + linkType: hard 296 + 267 297 "@atproto/lexicon@npm:^0.4.3": 268 298 version: 0.4.3 269 299 resolution: "@atproto/lexicon@npm:0.4.3" ··· 274 304 multiformats: "npm:^9.9.0" 275 305 zod: "npm:^3.23.8" 276 306 checksum: 10/c7b0616ffcd85eb77315b4a15bf17acfc2c9de6b4112321a8dad5f0723453c8a5464418a332f0e387e999ed863fb954ccb511097e9c733efacc9b3aacc0c611c 307 + languageName: node 308 + linkType: hard 309 + 310 + "@atproto/lexicon@npm:^0.4.5": 311 + version: 0.4.5 312 + resolution: "@atproto/lexicon@npm:0.4.5" 313 + dependencies: 314 + "@atproto/common-web": "npm:^0.3.2" 315 + "@atproto/syntax": "npm:^0.3.1" 316 + iso-datestring-validator: "npm:^2.2.2" 317 + multiformats: "npm:^9.9.0" 318 + zod: "npm:^3.23.8" 319 + checksum: 10/b6c4a868d36dc4f7f55fb9558065daa90ff39e4966ab1b36e527dbe6109f386b8f59a0c2611a02f82e10b468ede4ab9362df7f60728749d4dfc4a45b81d44261 277 320 languageName: node 278 321 linkType: hard 279 322 ··· 3409 3452 languageName: node 3410 3453 linkType: hard 3411 3454 3412 - "@esbuild-plugins/tsconfig-paths@npm:^0.1.2": 3413 - version: 0.1.2 3414 - resolution: "@esbuild-plugins/tsconfig-paths@npm:0.1.2" 3415 - dependencies: 3416 - debug: "npm:^4.3.1" 3417 - find-up: "npm:^5.0.0" 3418 - strip-json-comments: "npm:^3.1.1" 3419 - peerDependencies: 3420 - esbuild: "*" 3421 - typescript: "*" 3422 - checksum: 10/bbb927745aa1b5f7aeeb7a22445f51f62bc2eb055f7c2de63b5d204a62c09877bc4109e9a1b0d8a93499660e185e93cc20f1d5821573cebf7b908be42cd948b2 3423 - languageName: node 3424 - linkType: hard 3425 - 3426 - "@esbuild/aix-ppc64@npm:0.24.0": 3427 - version: 0.24.0 3428 - resolution: "@esbuild/aix-ppc64@npm:0.24.0" 3455 + "@esbuild/aix-ppc64@npm:0.24.2": 3456 + version: 0.24.2 3457 + resolution: "@esbuild/aix-ppc64@npm:0.24.2" 3429 3458 conditions: os=aix & cpu=ppc64 3430 3459 languageName: node 3431 3460 linkType: hard 3432 3461 3433 - "@esbuild/android-arm64@npm:0.24.0": 3434 - version: 0.24.0 3435 - resolution: "@esbuild/android-arm64@npm:0.24.0" 3462 + "@esbuild/android-arm64@npm:0.24.2": 3463 + version: 0.24.2 3464 + resolution: "@esbuild/android-arm64@npm:0.24.2" 3436 3465 conditions: os=android & cpu=arm64 3437 3466 languageName: node 3438 3467 linkType: hard 3439 3468 3440 - "@esbuild/android-arm@npm:0.24.0": 3441 - version: 0.24.0 3442 - resolution: "@esbuild/android-arm@npm:0.24.0" 3469 + "@esbuild/android-arm@npm:0.24.2": 3470 + version: 0.24.2 3471 + resolution: "@esbuild/android-arm@npm:0.24.2" 3443 3472 conditions: os=android & cpu=arm 3444 3473 languageName: node 3445 3474 linkType: hard 3446 3475 3447 - "@esbuild/android-x64@npm:0.24.0": 3448 - version: 0.24.0 3449 - resolution: "@esbuild/android-x64@npm:0.24.0" 3476 + "@esbuild/android-x64@npm:0.24.2": 3477 + version: 0.24.2 3478 + resolution: "@esbuild/android-x64@npm:0.24.2" 3450 3479 conditions: os=android & cpu=x64 3451 3480 languageName: node 3452 3481 linkType: hard 3453 3482 3454 - "@esbuild/darwin-arm64@npm:0.24.0": 3455 - version: 0.24.0 3456 - resolution: "@esbuild/darwin-arm64@npm:0.24.0" 3483 + "@esbuild/darwin-arm64@npm:0.24.2": 3484 + version: 0.24.2 3485 + resolution: "@esbuild/darwin-arm64@npm:0.24.2" 3457 3486 conditions: os=darwin & cpu=arm64 3458 3487 languageName: node 3459 3488 linkType: hard 3460 3489 3461 - "@esbuild/darwin-x64@npm:0.24.0": 3462 - version: 0.24.0 3463 - resolution: "@esbuild/darwin-x64@npm:0.24.0" 3490 + "@esbuild/darwin-x64@npm:0.24.2": 3491 + version: 0.24.2 3492 + resolution: "@esbuild/darwin-x64@npm:0.24.2" 3464 3493 conditions: os=darwin & cpu=x64 3465 3494 languageName: node 3466 3495 linkType: hard 3467 3496 3468 - "@esbuild/freebsd-arm64@npm:0.24.0": 3469 - version: 0.24.0 3470 - resolution: "@esbuild/freebsd-arm64@npm:0.24.0" 3497 + "@esbuild/freebsd-arm64@npm:0.24.2": 3498 + version: 0.24.2 3499 + resolution: "@esbuild/freebsd-arm64@npm:0.24.2" 3471 3500 conditions: os=freebsd & cpu=arm64 3472 3501 languageName: node 3473 3502 linkType: hard 3474 3503 3475 - "@esbuild/freebsd-x64@npm:0.24.0": 3476 - version: 0.24.0 3477 - resolution: "@esbuild/freebsd-x64@npm:0.24.0" 3504 + "@esbuild/freebsd-x64@npm:0.24.2": 3505 + version: 0.24.2 3506 + resolution: "@esbuild/freebsd-x64@npm:0.24.2" 3478 3507 conditions: os=freebsd & cpu=x64 3479 3508 languageName: node 3480 3509 linkType: hard 3481 3510 3482 - "@esbuild/linux-arm64@npm:0.24.0": 3483 - version: 0.24.0 3484 - resolution: "@esbuild/linux-arm64@npm:0.24.0" 3511 + "@esbuild/linux-arm64@npm:0.24.2": 3512 + version: 0.24.2 3513 + resolution: "@esbuild/linux-arm64@npm:0.24.2" 3485 3514 conditions: os=linux & cpu=arm64 3486 3515 languageName: node 3487 3516 linkType: hard 3488 3517 3489 - "@esbuild/linux-arm@npm:0.24.0": 3490 - version: 0.24.0 3491 - resolution: "@esbuild/linux-arm@npm:0.24.0" 3518 + "@esbuild/linux-arm@npm:0.24.2": 3519 + version: 0.24.2 3520 + resolution: "@esbuild/linux-arm@npm:0.24.2" 3492 3521 conditions: os=linux & cpu=arm 3493 3522 languageName: node 3494 3523 linkType: hard 3495 3524 3496 - "@esbuild/linux-ia32@npm:0.24.0": 3497 - version: 0.24.0 3498 - resolution: "@esbuild/linux-ia32@npm:0.24.0" 3525 + "@esbuild/linux-ia32@npm:0.24.2": 3526 + version: 0.24.2 3527 + resolution: "@esbuild/linux-ia32@npm:0.24.2" 3499 3528 conditions: os=linux & cpu=ia32 3500 3529 languageName: node 3501 3530 linkType: hard 3502 3531 3503 - "@esbuild/linux-loong64@npm:0.24.0": 3504 - version: 0.24.0 3505 - resolution: "@esbuild/linux-loong64@npm:0.24.0" 3532 + "@esbuild/linux-loong64@npm:0.24.2": 3533 + version: 0.24.2 3534 + resolution: "@esbuild/linux-loong64@npm:0.24.2" 3506 3535 conditions: os=linux & cpu=loong64 3507 3536 languageName: node 3508 3537 linkType: hard 3509 3538 3510 - "@esbuild/linux-mips64el@npm:0.24.0": 3511 - version: 0.24.0 3512 - resolution: "@esbuild/linux-mips64el@npm:0.24.0" 3539 + "@esbuild/linux-mips64el@npm:0.24.2": 3540 + version: 0.24.2 3541 + resolution: "@esbuild/linux-mips64el@npm:0.24.2" 3513 3542 conditions: os=linux & cpu=mips64el 3514 3543 languageName: node 3515 3544 linkType: hard 3516 3545 3517 - "@esbuild/linux-ppc64@npm:0.24.0": 3518 - version: 0.24.0 3519 - resolution: "@esbuild/linux-ppc64@npm:0.24.0" 3546 + "@esbuild/linux-ppc64@npm:0.24.2": 3547 + version: 0.24.2 3548 + resolution: "@esbuild/linux-ppc64@npm:0.24.2" 3520 3549 conditions: os=linux & cpu=ppc64 3521 3550 languageName: node 3522 3551 linkType: hard 3523 3552 3524 - "@esbuild/linux-riscv64@npm:0.24.0": 3525 - version: 0.24.0 3526 - resolution: "@esbuild/linux-riscv64@npm:0.24.0" 3553 + "@esbuild/linux-riscv64@npm:0.24.2": 3554 + version: 0.24.2 3555 + resolution: "@esbuild/linux-riscv64@npm:0.24.2" 3527 3556 conditions: os=linux & cpu=riscv64 3528 3557 languageName: node 3529 3558 linkType: hard 3530 3559 3531 - "@esbuild/linux-s390x@npm:0.24.0": 3532 - version: 0.24.0 3533 - resolution: "@esbuild/linux-s390x@npm:0.24.0" 3560 + "@esbuild/linux-s390x@npm:0.24.2": 3561 + version: 0.24.2 3562 + resolution: "@esbuild/linux-s390x@npm:0.24.2" 3534 3563 conditions: os=linux & cpu=s390x 3535 3564 languageName: node 3536 3565 linkType: hard 3537 3566 3538 - "@esbuild/linux-x64@npm:0.24.0": 3539 - version: 0.24.0 3540 - resolution: "@esbuild/linux-x64@npm:0.24.0" 3567 + "@esbuild/linux-x64@npm:0.24.2": 3568 + version: 0.24.2 3569 + resolution: "@esbuild/linux-x64@npm:0.24.2" 3541 3570 conditions: os=linux & cpu=x64 3542 3571 languageName: node 3543 3572 linkType: hard 3544 3573 3545 - "@esbuild/netbsd-x64@npm:0.24.0": 3546 - version: 0.24.0 3547 - resolution: "@esbuild/netbsd-x64@npm:0.24.0" 3574 + "@esbuild/netbsd-arm64@npm:0.24.2": 3575 + version: 0.24.2 3576 + resolution: "@esbuild/netbsd-arm64@npm:0.24.2" 3577 + conditions: os=netbsd & cpu=arm64 3578 + languageName: node 3579 + linkType: hard 3580 + 3581 + "@esbuild/netbsd-x64@npm:0.24.2": 3582 + version: 0.24.2 3583 + resolution: "@esbuild/netbsd-x64@npm:0.24.2" 3548 3584 conditions: os=netbsd & cpu=x64 3549 3585 languageName: node 3550 3586 linkType: hard 3551 3587 3552 - "@esbuild/openbsd-arm64@npm:0.24.0": 3553 - version: 0.24.0 3554 - resolution: "@esbuild/openbsd-arm64@npm:0.24.0" 3588 + "@esbuild/openbsd-arm64@npm:0.24.2": 3589 + version: 0.24.2 3590 + resolution: "@esbuild/openbsd-arm64@npm:0.24.2" 3555 3591 conditions: os=openbsd & cpu=arm64 3556 3592 languageName: node 3557 3593 linkType: hard 3558 3594 3559 - "@esbuild/openbsd-x64@npm:0.24.0": 3560 - version: 0.24.0 3561 - resolution: "@esbuild/openbsd-x64@npm:0.24.0" 3595 + "@esbuild/openbsd-x64@npm:0.24.2": 3596 + version: 0.24.2 3597 + resolution: "@esbuild/openbsd-x64@npm:0.24.2" 3562 3598 conditions: os=openbsd & cpu=x64 3563 3599 languageName: node 3564 3600 linkType: hard 3565 3601 3566 - "@esbuild/sunos-x64@npm:0.24.0": 3567 - version: 0.24.0 3568 - resolution: "@esbuild/sunos-x64@npm:0.24.0" 3602 + "@esbuild/sunos-x64@npm:0.24.2": 3603 + version: 0.24.2 3604 + resolution: "@esbuild/sunos-x64@npm:0.24.2" 3569 3605 conditions: os=sunos & cpu=x64 3570 3606 languageName: node 3571 3607 linkType: hard 3572 3608 3573 - "@esbuild/win32-arm64@npm:0.24.0": 3574 - version: 0.24.0 3575 - resolution: "@esbuild/win32-arm64@npm:0.24.0" 3609 + "@esbuild/win32-arm64@npm:0.24.2": 3610 + version: 0.24.2 3611 + resolution: "@esbuild/win32-arm64@npm:0.24.2" 3576 3612 conditions: os=win32 & cpu=arm64 3577 3613 languageName: node 3578 3614 linkType: hard 3579 3615 3580 - "@esbuild/win32-ia32@npm:0.24.0": 3581 - version: 0.24.0 3582 - resolution: "@esbuild/win32-ia32@npm:0.24.0" 3616 + "@esbuild/win32-ia32@npm:0.24.2": 3617 + version: 0.24.2 3618 + resolution: "@esbuild/win32-ia32@npm:0.24.2" 3583 3619 conditions: os=win32 & cpu=ia32 3584 3620 languageName: node 3585 3621 linkType: hard 3586 3622 3587 - "@esbuild/win32-x64@npm:0.24.0": 3588 - version: 0.24.0 3589 - resolution: "@esbuild/win32-x64@npm:0.24.0" 3623 + "@esbuild/win32-x64@npm:0.24.2": 3624 + version: 0.24.2 3625 + resolution: "@esbuild/win32-x64@npm:0.24.2" 3590 3626 conditions: os=win32 & cpu=x64 3591 3627 languageName: node 3592 3628 linkType: hard ··· 4685 4721 languageName: node 4686 4722 linkType: hard 4687 4723 4688 - "@floating-ui/react-native@npm:^0.10.6": 4689 - version: 0.10.6 4690 - resolution: "@floating-ui/react-native@npm:0.10.6" 4724 + "@floating-ui/react-native@npm:^0.10.7": 4725 + version: 0.10.7 4726 + resolution: "@floating-ui/react-native@npm:0.10.7" 4691 4727 dependencies: 4692 4728 "@floating-ui/core": "npm:^1.0.0" 4693 4729 peerDependencies: 4694 4730 react: ">=16.8.0" 4695 4731 react-native: ">=0.64.0" 4696 - checksum: 10/e7ee9a2fb93674ad5b690b770de70989bb7dfd2e871ab698ec2259c7fa38047558fc8a21ad9138a16da95408bad9445b3ab7abec1fa54f3ad79a21a1a1ef033b 4732 + checksum: 10/98f665b8bea1b02f8b8f6488d699716cca8e870bf137ae5e25d287bd7b31bfc9bbc07cfdd3bafc227128d08985af8b4bf985b7a48859a88ef862ff62a4af915b 4697 4733 languageName: node 4698 4734 linkType: hard 4699 4735 4700 - "@floating-ui/react@npm:^0.26.24": 4701 - version: 0.26.27 4702 - resolution: "@floating-ui/react@npm:0.26.27" 4736 + "@floating-ui/react@npm:^0.27.3": 4737 + version: 0.27.3 4738 + resolution: "@floating-ui/react@npm:0.27.3" 4703 4739 dependencies: 4704 4740 "@floating-ui/react-dom": "npm:^2.1.2" 4705 - "@floating-ui/utils": "npm:^0.2.8" 4741 + "@floating-ui/utils": "npm:^0.2.9" 4706 4742 tabbable: "npm:^6.0.0" 4707 4743 peerDependencies: 4708 - react: ">=16.8.0" 4709 - react-dom: ">=16.8.0" 4710 - checksum: 10/ab6d05e5cc2c29272a6830c06dff07e8330f2b90234674f2d74ed8084659ebe3ac9472770a5f0e76007dd2ae89f9da75189d188437aea4b8ac2789afc21bb6b2 4744 + react: ">=17.0.0" 4745 + react-dom: ">=17.0.0" 4746 + checksum: 10/91eef58241b2225420fa73dfc501934463310489e08f2a0681b320e0c639c9ee59044ab66645f2901b74a88328208ff4cc4afabe93917a7a28f9d18037965cb6 4711 4747 languageName: node 4712 4748 linkType: hard 4713 4749 ··· 4718 4754 languageName: node 4719 4755 linkType: hard 4720 4756 4721 - "@floating-ui/utils@npm:^0.2.8": 4722 - version: 0.2.8 4723 - resolution: "@floating-ui/utils@npm:0.2.8" 4724 - checksum: 10/3e3ea3b2de06badc4baebdf358b3dbd77ccd9474a257a6ef237277895943db2acbae756477ec64de65a2a1436d94aea3107129a1feeef6370675bf2b161c1abc 4757 + "@floating-ui/utils@npm:^0.2.9": 4758 + version: 0.2.9 4759 + resolution: "@floating-ui/utils@npm:0.2.9" 4760 + checksum: 10/0ca786347db3dd8d9034b86d1449fabb96642788e5900cc5f2aee433cd7b243efbcd7a165bead50b004ee3f20a90ddebb6a35296fc41d43cfd361b6f01b69ffb 4725 4761 languageName: node 4726 4762 linkType: hard 4727 4763 ··· 6099 6135 languageName: node 6100 6136 linkType: hard 6101 6137 6138 + "@oxc-transform/binding-darwin-arm64@npm:0.47.1": 6139 + version: 0.47.1 6140 + resolution: "@oxc-transform/binding-darwin-arm64@npm:0.47.1" 6141 + conditions: os=darwin & cpu=arm64 6142 + languageName: node 6143 + linkType: hard 6144 + 6145 + "@oxc-transform/binding-darwin-x64@npm:0.47.1": 6146 + version: 0.47.1 6147 + resolution: "@oxc-transform/binding-darwin-x64@npm:0.47.1" 6148 + conditions: os=darwin & cpu=x64 6149 + languageName: node 6150 + linkType: hard 6151 + 6152 + "@oxc-transform/binding-linux-arm64-gnu@npm:0.47.1": 6153 + version: 0.47.1 6154 + resolution: "@oxc-transform/binding-linux-arm64-gnu@npm:0.47.1" 6155 + conditions: os=linux & cpu=arm64 & libc=glibc 6156 + languageName: node 6157 + linkType: hard 6158 + 6159 + "@oxc-transform/binding-linux-arm64-musl@npm:0.47.1": 6160 + version: 0.47.1 6161 + resolution: "@oxc-transform/binding-linux-arm64-musl@npm:0.47.1" 6162 + conditions: os=linux & cpu=arm64 & libc=musl 6163 + languageName: node 6164 + linkType: hard 6165 + 6166 + "@oxc-transform/binding-linux-x64-gnu@npm:0.47.1": 6167 + version: 0.47.1 6168 + resolution: "@oxc-transform/binding-linux-x64-gnu@npm:0.47.1" 6169 + conditions: os=linux & cpu=x64 & libc=glibc 6170 + languageName: node 6171 + linkType: hard 6172 + 6173 + "@oxc-transform/binding-linux-x64-musl@npm:0.47.1": 6174 + version: 0.47.1 6175 + resolution: "@oxc-transform/binding-linux-x64-musl@npm:0.47.1" 6176 + conditions: os=linux & cpu=x64 & libc=musl 6177 + languageName: node 6178 + linkType: hard 6179 + 6180 + "@oxc-transform/binding-win32-arm64-msvc@npm:0.47.1": 6181 + version: 0.47.1 6182 + resolution: "@oxc-transform/binding-win32-arm64-msvc@npm:0.47.1" 6183 + conditions: os=win32 & cpu=arm64 6184 + languageName: node 6185 + linkType: hard 6186 + 6187 + "@oxc-transform/binding-win32-x64-msvc@npm:0.47.1": 6188 + version: 0.47.1 6189 + resolution: "@oxc-transform/binding-win32-x64-msvc@npm:0.47.1" 6190 + conditions: os=win32 & cpu=x64 6191 + languageName: node 6192 + linkType: hard 6193 + 6102 6194 "@parcel/watcher-android-arm64@npm:2.4.1": 6103 6195 version: 2.4.1 6104 6196 resolution: "@parcel/watcher-android-arm64@npm:2.4.1" ··· 7982 8074 languageName: node 7983 8075 linkType: hard 7984 8076 7985 - "@tamagui/accordion@npm:1.116.12": 7986 - version: 1.116.12 7987 - resolution: "@tamagui/accordion@npm:1.116.12" 8077 + "@tamagui/accordion@npm:1.123.17": 8078 + version: 1.123.17 8079 + resolution: "@tamagui/accordion@npm:1.123.17" 7988 8080 dependencies: 7989 - "@tamagui/collapsible": "npm:1.116.12" 7990 - "@tamagui/collection": "npm:1.116.12" 7991 - "@tamagui/compose-refs": "npm:1.116.12" 7992 - "@tamagui/constants": "npm:1.116.12" 7993 - "@tamagui/core": "npm:1.116.12" 7994 - "@tamagui/create-context": "npm:1.116.12" 7995 - "@tamagui/polyfill-dev": "npm:1.116.12" 7996 - "@tamagui/stacks": "npm:1.116.12" 7997 - "@tamagui/use-controllable-state": "npm:1.116.12" 8081 + "@tamagui/collapsible": "npm:1.123.17" 8082 + "@tamagui/collection": "npm:1.123.17" 8083 + "@tamagui/compose-refs": "npm:1.123.17" 8084 + "@tamagui/constants": "npm:1.123.17" 8085 + "@tamagui/core": "npm:1.123.17" 8086 + "@tamagui/create-context": "npm:1.123.17" 8087 + "@tamagui/polyfill-dev": "npm:1.123.17" 8088 + "@tamagui/stacks": "npm:1.123.17" 8089 + "@tamagui/text": "npm:1.123.17" 8090 + "@tamagui/use-controllable-state": "npm:1.123.17" 7998 8091 peerDependencies: 7999 8092 react: "*" 8000 - checksum: 10/8fffda8c539f4654a9afed224c75ec2d69331c7808bf504cf54ff0545902f078fcc7ba221b7d329002c86b19bc6c0268e8ffed69c47556805e2fba9e5e00f0f6 8093 + checksum: 10/7b85fcc055d54b49e423dec34bf383934125f3078c4e2615f9c93f7d4683669a86a44e15a74a7f96c7bb05e25444c97a6ae82bc53900d5ec645be61683a63e9e 8001 8094 languageName: node 8002 8095 linkType: hard 8003 8096 8004 - "@tamagui/adapt@npm:1.116.12": 8005 - version: 1.116.12 8006 - resolution: "@tamagui/adapt@npm:1.116.12" 8097 + "@tamagui/adapt@npm:1.123.17": 8098 + version: 1.123.17 8099 + resolution: "@tamagui/adapt@npm:1.123.17" 8007 8100 dependencies: 8008 - "@tamagui/constants": "npm:1.116.12" 8009 - "@tamagui/core": "npm:1.116.12" 8010 - "@tamagui/helpers": "npm:1.116.12" 8011 - "@tamagui/portal": "npm:1.116.12" 8012 - checksum: 10/daca38847578ac1b90a0ded8d2ccdd189d5419a1ce78fd67712e244d28c1b761accb69e88d3ea345dfa2800931f096783fa0b94525af8b75de00e701910d4243 8101 + "@tamagui/constants": "npm:1.123.17" 8102 + "@tamagui/core": "npm:1.123.17" 8103 + "@tamagui/helpers": "npm:1.123.17" 8104 + "@tamagui/portal": "npm:1.123.17" 8105 + checksum: 10/839de6f229dcd81f976b7e36b7e161477a992e93fa7b7018d9504894e2bed129cd5ce7c46cfbb2f3134755a8c9e6864d2f8ba79086889143800d025b85dcffe2 8013 8106 languageName: node 8014 8107 linkType: hard 8015 8108 8016 - "@tamagui/alert-dialog@npm:1.116.12": 8017 - version: 1.116.12 8018 - resolution: "@tamagui/alert-dialog@npm:1.116.12" 8109 + "@tamagui/alert-dialog@npm:1.123.17": 8110 + version: 1.123.17 8111 + resolution: "@tamagui/alert-dialog@npm:1.123.17" 8019 8112 dependencies: 8020 - "@tamagui/animate-presence": "npm:1.116.12" 8021 - "@tamagui/aria-hidden": "npm:1.116.12" 8022 - "@tamagui/compose-refs": "npm:1.116.12" 8023 - "@tamagui/constants": "npm:1.116.12" 8024 - "@tamagui/core": "npm:1.116.12" 8025 - "@tamagui/create-context": "npm:1.116.12" 8026 - "@tamagui/dialog": "npm:1.116.12" 8027 - "@tamagui/dismissable": "npm:1.116.12" 8028 - "@tamagui/focus-scope": "npm:1.116.12" 8029 - "@tamagui/helpers": "npm:1.116.12" 8030 - "@tamagui/polyfill-dev": "npm:1.116.12" 8031 - "@tamagui/popper": "npm:1.116.12" 8032 - "@tamagui/portal": "npm:1.116.12" 8033 - "@tamagui/remove-scroll": "npm:1.116.12" 8034 - "@tamagui/stacks": "npm:1.116.12" 8035 - "@tamagui/text": "npm:1.116.12" 8036 - "@tamagui/use-controllable-state": "npm:1.116.12" 8113 + "@tamagui/animate-presence": "npm:1.123.17" 8114 + "@tamagui/aria-hidden": "npm:1.123.17" 8115 + "@tamagui/compose-refs": "npm:1.123.17" 8116 + "@tamagui/constants": "npm:1.123.17" 8117 + "@tamagui/core": "npm:1.123.17" 8118 + "@tamagui/create-context": "npm:1.123.17" 8119 + "@tamagui/dialog": "npm:1.123.17" 8120 + "@tamagui/dismissable": "npm:1.123.17" 8121 + "@tamagui/focus-scope": "npm:1.123.17" 8122 + "@tamagui/helpers": "npm:1.123.17" 8123 + "@tamagui/polyfill-dev": "npm:1.123.17" 8124 + "@tamagui/popper": "npm:1.123.17" 8125 + "@tamagui/portal": "npm:1.123.17" 8126 + "@tamagui/remove-scroll": "npm:1.123.17" 8127 + "@tamagui/stacks": "npm:1.123.17" 8128 + "@tamagui/text": "npm:1.123.17" 8129 + "@tamagui/use-controllable-state": "npm:1.123.17" 8037 8130 peerDependencies: 8038 8131 react: "*" 8039 - checksum: 10/542d2e1c4feaba104d09e4e6045672122254caf100720adc2ed7dc7939c8200b97c4cfe1b737353a214fac86fbf7c1604b24a3b383fedff3b3a1f7036945c0eb 8132 + checksum: 10/088dea6f3d0bda5c2958ad164ce678aad7d2527a041f60d7050029bcb5530ae08b1f678694e9b6afb8c1c7030b1ca10c586891e250544f16b6a110e64ffa4968 8040 8133 languageName: node 8041 8134 linkType: hard 8042 8135 8043 - "@tamagui/animate-presence@npm:1.116.12": 8044 - version: 1.116.12 8045 - resolution: "@tamagui/animate-presence@npm:1.116.12" 8136 + "@tamagui/animate-presence@npm:1.123.17": 8137 + version: 1.123.17 8138 + resolution: "@tamagui/animate-presence@npm:1.123.17" 8046 8139 dependencies: 8047 - "@tamagui/helpers": "npm:1.116.12" 8048 - "@tamagui/use-constant": "npm:1.116.12" 8049 - "@tamagui/use-force-update": "npm:1.116.12" 8050 - "@tamagui/use-presence": "npm:1.116.12" 8051 - "@tamagui/web": "npm:1.116.12" 8052 - checksum: 10/8ca250c3bd75da02be98e15f8850cdcd7120fea913e4895d1155b37cbb3dcf4c4abe121f187f7d43ec357e035b41e5fd19ca33979f7d101fcf6518e0c9e24922 8140 + "@tamagui/helpers": "npm:1.123.17" 8141 + "@tamagui/use-constant": "npm:1.123.17" 8142 + "@tamagui/use-force-update": "npm:1.123.17" 8143 + "@tamagui/use-presence": "npm:1.123.17" 8144 + "@tamagui/web": "npm:1.123.17" 8145 + checksum: 10/9296149cb189d2c677d32dafab37b0bce5abaa103ea707f847c9034ff40bfc967714417b46afc9d9b5e867fedf417ad79cefed8bc9f4970289aade46042045e5 8053 8146 languageName: node 8054 8147 linkType: hard 8055 8148 8056 - "@tamagui/animate@npm:1.116.12": 8057 - version: 1.116.12 8058 - resolution: "@tamagui/animate@npm:1.116.12" 8149 + "@tamagui/animate@npm:1.123.17": 8150 + version: 1.123.17 8151 + resolution: "@tamagui/animate@npm:1.123.17" 8059 8152 dependencies: 8060 - "@tamagui/animate-presence": "npm:1.116.12" 8061 - checksum: 10/38f33794edc38a82f84885d09e17fa7a0a9d4eeb2c9929194e2c578dc73264150466bd367d3b725b3d188b50df25ff00c992c529910751b57bdf1ef230b23410 8153 + "@tamagui/animate-presence": "npm:1.123.17" 8154 + checksum: 10/e557b50669c3db138ca2552bd63ca06f7f078d0e46d9080c02af7c336599b809d4e3a68d25db6e657180e95c901f4559ac3a9627a2ffd664313046d9bb924290 8062 8155 languageName: node 8063 8156 linkType: hard 8064 8157 8065 - "@tamagui/animations-css@npm:1.116.12": 8066 - version: 1.116.12 8067 - resolution: "@tamagui/animations-css@npm:1.116.12" 8158 + "@tamagui/animations-css@npm:1.123.17": 8159 + version: 1.123.17 8160 + resolution: "@tamagui/animations-css@npm:1.123.17" 8068 8161 dependencies: 8069 - "@tamagui/constants": "npm:1.116.12" 8070 - "@tamagui/cubic-bezier-animator": "npm:1.116.12" 8071 - "@tamagui/use-presence": "npm:1.116.12" 8072 - "@tamagui/web": "npm:1.116.12" 8162 + "@tamagui/constants": "npm:1.123.17" 8163 + "@tamagui/cubic-bezier-animator": "npm:1.123.17" 8164 + "@tamagui/use-presence": "npm:1.123.17" 8165 + "@tamagui/web": "npm:1.123.17" 8073 8166 peerDependencies: 8074 8167 react: "*" 8075 - checksum: 10/bd3cb38e0f1e031771bbf5b03666f2cefde72a50036ad3fe9f4d778a53cb69794428c84ecb00f505de5bf8d955da4c246ace851142a0d2a16faa30082ac02298 8168 + react-dom: "*" 8169 + checksum: 10/846502027edaf97aad3b9910b2d8e24bbf01c8d3c4d86fc1ce921d9e701fc965aecb85312211bf383a239b413b58d68284211413617714e2d4ab1be69d9d0eec 8076 8170 languageName: node 8077 8171 linkType: hard 8078 8172 8079 - "@tamagui/animations-moti@npm:1.116.12": 8080 - version: 1.116.12 8081 - resolution: "@tamagui/animations-moti@npm:1.116.12" 8173 + "@tamagui/animations-moti@npm:1.123.17": 8174 + version: 1.123.17 8175 + resolution: "@tamagui/animations-moti@npm:1.123.17" 8082 8176 dependencies: 8083 - "@tamagui/use-presence": "npm:1.116.12" 8084 - "@tamagui/web": "npm:1.116.12" 8177 + "@tamagui/use-presence": "npm:1.123.17" 8178 + "@tamagui/web": "npm:1.123.17" 8085 8179 moti: "npm:^0.29.0" 8086 8180 peerDependencies: 8087 8181 react: "*" 8088 - checksum: 10/63c8f12ab2e695161749957086ba46163dfc807a9bb878c08b98f6f6ca8e0a6a789cbc7d2ebc8467b60daa09dc203ed96210cf24f49d4d55a1e7ed805d22d446 8182 + checksum: 10/11ce21ca428826c30dd572ab9327d699c2ddf11bf82f7fabaf62d0efb9d770ae22f07affc0f040bbd29a3f87a5d5fcfcf3393727cb39be6a34a0fc0676ffc5fe 8089 8183 languageName: node 8090 8184 linkType: hard 8091 8185 8092 - "@tamagui/animations-react-native@npm:1.116.12": 8093 - version: 1.116.12 8094 - resolution: "@tamagui/animations-react-native@npm:1.116.12" 8186 + "@tamagui/animations-react-native@npm:1.123.17": 8187 + version: 1.123.17 8188 + resolution: "@tamagui/animations-react-native@npm:1.123.17" 8095 8189 dependencies: 8096 - "@tamagui/constants": "npm:1.116.12" 8097 - "@tamagui/use-presence": "npm:1.116.12" 8098 - "@tamagui/web": "npm:1.116.12" 8190 + "@tamagui/constants": "npm:1.123.17" 8191 + "@tamagui/use-presence": "npm:1.123.17" 8192 + "@tamagui/web": "npm:1.123.17" 8099 8193 peerDependencies: 8100 8194 react: "*" 8101 - checksum: 10/19a182bf94e4ead592bf955961eb6655e9e78f972902b0d654978480fc3d6a577f72124e245979518c42eca03e7f5515a7bcc6b136a8906edbb3d0efd606bcbc 8195 + checksum: 10/7909a9531462618df91dcd8dcb1bc1de080fc1a493f5f19964cd98a7a9ded727fc293e7519228c38b1ee6adc000af70e03561ed8c76bfa3f44cab1422979eaa0 8102 8196 languageName: node 8103 8197 linkType: hard 8104 8198 8105 - "@tamagui/aria-hidden@npm:1.116.12": 8106 - version: 1.116.12 8107 - resolution: "@tamagui/aria-hidden@npm:1.116.12" 8199 + "@tamagui/aria-hidden@npm:1.123.17": 8200 + version: 1.123.17 8201 + resolution: "@tamagui/aria-hidden@npm:1.123.17" 8108 8202 dependencies: 8109 8203 aria-hidden: "npm:^1.1.3" 8110 8204 peerDependencies: 8111 8205 react: "*" 8112 - checksum: 10/a4de8718a426a6d4c594cb8700a70417d6648d4995440bdff6d1fc82776a95af1850cb20e579f3ba7748b9ea74b3c792400f284984fb1d445d2f44048b3090fc 8206 + checksum: 10/d7002539cc301bd96a25f66589280e54121e6d633d35a03b1e0d20bc9fd503be77acf733a162ba5856606685276c3595b0191c6b70facffb1da70ac0feaaccbd 8113 8207 languageName: node 8114 8208 linkType: hard 8115 8209 8116 - "@tamagui/avatar@npm:1.116.12": 8117 - version: 1.116.12 8118 - resolution: "@tamagui/avatar@npm:1.116.12" 8210 + "@tamagui/avatar@npm:1.123.17": 8211 + version: 1.123.17 8212 + resolution: "@tamagui/avatar@npm:1.123.17" 8119 8213 dependencies: 8120 - "@tamagui/core": "npm:1.116.12" 8121 - "@tamagui/helpers": "npm:1.116.12" 8122 - "@tamagui/image": "npm:1.116.12" 8123 - "@tamagui/shapes": "npm:1.116.12" 8124 - "@tamagui/text": "npm:1.116.12" 8214 + "@tamagui/core": "npm:1.123.17" 8215 + "@tamagui/helpers": "npm:1.123.17" 8216 + "@tamagui/image": "npm:1.123.17" 8217 + "@tamagui/shapes": "npm:1.123.17" 8218 + "@tamagui/text": "npm:1.123.17" 8125 8219 peerDependencies: 8126 8220 react: "*" 8127 - checksum: 10/ca6bb1fac9c32e0445906391ceaae4050ab6764bd20a77d56d0b44544b8ed1f7f14ebe19f237e6eec4e4ddb7f48ece0d0c709c925b938f11bbb90bde2e7351c7 8221 + checksum: 10/7cea8d8d624e969e4941df1a3c9a083f91bca9e98631bfe750dd5b8a8a6e9505aeff906c2af5df046792779dbdb7b41185a8561ea629062569970137a3de9cd7 8128 8222 languageName: node 8129 8223 linkType: hard 8130 8224 8131 - "@tamagui/babel-plugin-fully-specified@npm:1.116.12": 8132 - version: 1.116.12 8133 - resolution: "@tamagui/babel-plugin-fully-specified@npm:1.116.12" 8225 + "@tamagui/babel-plugin-fully-specified@npm:1.123.17": 8226 + version: 1.123.17 8227 + resolution: "@tamagui/babel-plugin-fully-specified@npm:1.123.17" 8134 8228 dependencies: 8135 8229 "@babel/core": "npm:^7.25.2" 8136 - checksum: 10/3062b346948a7443821c4b8c3a1871a7368d918c30854d9717c66a2038193c40c85c1b5eb28e2d2c3243c8b4716b62b39b8f15ddf20bd0da9c8706bf8bc9402a 8230 + checksum: 10/bcdfba06c2ddc88201587b6c13dfc18ea386f504de7e19ba56855344c597aeddcfdd8ec0fc7365afc3c79b8c863e9c6ae833893d0402db9f20a3f0b74f9a7fcf 8137 8231 languageName: node 8138 8232 linkType: hard 8139 8233 8140 - "@tamagui/babel-plugin@npm:^1.116.12": 8141 - version: 1.116.12 8142 - resolution: "@tamagui/babel-plugin@npm:1.116.12" 8234 + "@tamagui/babel-plugin@npm:^1.123.17": 8235 + version: 1.123.17 8236 + resolution: "@tamagui/babel-plugin@npm:1.123.17" 8143 8237 dependencies: 8238 + "@babel/core": "npm:^7.25.2" 8144 8239 "@babel/generator": "npm:^7.25.5" 8145 8240 "@babel/helper-plugin-utils": "npm:^7.24.8" 8146 8241 "@babel/template": "npm:^7.25.0" 8147 8242 "@babel/traverse": "npm:^7.25.4" 8148 - "@tamagui/static": "npm:1.116.12" 8149 - checksum: 10/bdce1d09c1571139cfe2db22ad5bf2ec55446d2c2f3edd5c37fe0d5e577832478003e2c02c0cfbed9a04b196c484cbf6c014c84f374a3bdeb1c4841d83fe1eca 8243 + "@tamagui/static": "npm:1.123.17" 8244 + checksum: 10/2a2b9e9481b2052a92144cc15860dce8928117ba92bfe1ea560d17461f56a608c2ad1df7bca3c0a08b308cb5ffe94cf6bec9df9d3e055a56fae54636637cd093 8150 8245 languageName: node 8151 8246 linkType: hard 8152 8247 8153 - "@tamagui/build@npm:1.116.12": 8154 - version: 1.116.12 8155 - resolution: "@tamagui/build@npm:1.116.12" 8248 + "@tamagui/build@npm:1.123.17": 8249 + version: 1.123.17 8250 + resolution: "@tamagui/build@npm:1.123.17" 8156 8251 dependencies: 8157 8252 "@babel/core": "npm:^7.25.2" 8158 8253 "@swc/core": "npm:^1.7.21" 8159 - "@tamagui/babel-plugin-fully-specified": "npm:1.116.12" 8254 + "@tamagui/babel-plugin-fully-specified": "npm:1.123.17" 8160 8255 "@types/fs-extra": "npm:^9.0.13" 8161 8256 chokidar: "npm:^3.5.2" 8162 - esbuild: "npm:^0.24.0" 8257 + esbuild: "npm:^0.24.2" 8163 8258 esbuild-plugin-es5: "npm:^2.1.1" 8164 8259 esbuild-register: "npm:^3.6.0" 8165 8260 execa: "npm:^5.0.0" 8166 8261 fast-glob: "npm:^3.2.11" 8167 8262 fs-extra: "npm:^11.2.0" 8168 8263 lodash.debounce: "npm:^4.0.8" 8169 - typescript: "npm:^5.6.3" 8264 + oxc-transform: "npm:^0.47.1" 8265 + typescript: "npm:^5.7.2" 8170 8266 bin: 8171 8267 tamagui-build: tamagui-build.js 8172 8268 teesx: teesx.sh 8173 - checksum: 10/a9bebd26a9f2c5eec629a08c25d03d46f136a0e016f049d0857bdb7f4a594a024018c8a13c1d84926615391ef5785876400d1894bc22b97f943a56741eb294ec 8269 + checksum: 10/220a7ba795e200500b9a019e456ea952607687910761dbfd4d0a41f5872f45d9e88376babbaddd5cb692f061a4ccc9a140806aeace6ed90b8bef665bfedab2be 8174 8270 languageName: node 8175 8271 linkType: hard 8176 8272 8177 - "@tamagui/button@npm:1.116.12": 8178 - version: 1.116.12 8179 - resolution: "@tamagui/button@npm:1.116.12" 8273 + "@tamagui/button@npm:1.123.17": 8274 + version: 1.123.17 8275 + resolution: "@tamagui/button@npm:1.123.17" 8180 8276 dependencies: 8181 - "@tamagui/font-size": "npm:1.116.12" 8182 - "@tamagui/get-button-sized": "npm:1.116.12" 8183 - "@tamagui/helpers": "npm:1.116.12" 8184 - "@tamagui/helpers-tamagui": "npm:1.116.12" 8185 - "@tamagui/stacks": "npm:1.116.12" 8186 - "@tamagui/text": "npm:1.116.12" 8187 - "@tamagui/web": "npm:1.116.12" 8277 + "@tamagui/font-size": "npm:1.123.17" 8278 + "@tamagui/get-button-sized": "npm:1.123.17" 8279 + "@tamagui/helpers": "npm:1.123.17" 8280 + "@tamagui/helpers-tamagui": "npm:1.123.17" 8281 + "@tamagui/stacks": "npm:1.123.17" 8282 + "@tamagui/text": "npm:1.123.17" 8283 + "@tamagui/web": "npm:1.123.17" 8188 8284 peerDependencies: 8189 8285 react: "*" 8190 - checksum: 10/df9c30f4fad419ac4860b0487e71133c81c36b24d0657566ad1a100cc1c90d93c4cb3b49b6198947bedf765b30798936c145ace16a5a612c2f7af9e62d983898 8286 + checksum: 10/7ab2dd682c62953f6ff2dd87f05afaade3a8586ca7e8382da77b4f71b231b223972e9b78a829913405ff23491dd01c29efb8d2f43098b94a3122af78a2c3d1eb 8191 8287 languageName: node 8192 8288 linkType: hard 8193 8289 8194 - "@tamagui/card@npm:1.116.12": 8195 - version: 1.116.12 8196 - resolution: "@tamagui/card@npm:1.116.12" 8290 + "@tamagui/card@npm:1.123.17": 8291 + version: 1.123.17 8292 + resolution: "@tamagui/card@npm:1.123.17" 8197 8293 dependencies: 8198 - "@tamagui/create-context": "npm:1.116.12" 8199 - "@tamagui/helpers": "npm:1.116.12" 8200 - "@tamagui/stacks": "npm:1.116.12" 8201 - "@tamagui/web": "npm:1.116.12" 8294 + "@tamagui/create-context": "npm:1.123.17" 8295 + "@tamagui/helpers": "npm:1.123.17" 8296 + "@tamagui/stacks": "npm:1.123.17" 8297 + "@tamagui/web": "npm:1.123.17" 8202 8298 peerDependencies: 8203 8299 react: "*" 8204 - checksum: 10/31a3e5c8d7edf3e7a359b09758b6cf40e96a5cff0af73853d6bae12171b31f55d9f56cc949fba3029f98c337b65045fa97f78f85f84752cdd620e0f2ea4f8684 8300 + checksum: 10/7441ed5fd0fde37b653f1e711f5e336c64e26098d73f80eb366de333cc971d887a465ea304400e0ad51cdc8022e2abea08c1b5987a10eb2aeffe2dc1fa7048a2 8205 8301 languageName: node 8206 8302 linkType: hard 8207 8303 8208 - "@tamagui/checkbox-headless@npm:1.116.12": 8209 - version: 1.116.12 8210 - resolution: "@tamagui/checkbox-headless@npm:1.116.12" 8304 + "@tamagui/checkbox-headless@npm:1.123.17": 8305 + version: 1.123.17 8306 + resolution: "@tamagui/checkbox-headless@npm:1.123.17" 8211 8307 dependencies: 8212 - "@tamagui/compose-refs": "npm:1.116.12" 8213 - "@tamagui/constants": "npm:1.116.12" 8214 - "@tamagui/create-context": "npm:1.116.12" 8215 - "@tamagui/focusable": "npm:1.116.12" 8216 - "@tamagui/helpers": "npm:1.116.12" 8217 - "@tamagui/label": "npm:1.116.12" 8218 - "@tamagui/use-controllable-state": "npm:1.116.12" 8219 - "@tamagui/use-previous": "npm:1.116.12" 8308 + "@tamagui/compose-refs": "npm:1.123.17" 8309 + "@tamagui/constants": "npm:1.123.17" 8310 + "@tamagui/create-context": "npm:1.123.17" 8311 + "@tamagui/focusable": "npm:1.123.17" 8312 + "@tamagui/helpers": "npm:1.123.17" 8313 + "@tamagui/label": "npm:1.123.17" 8314 + "@tamagui/use-controllable-state": "npm:1.123.17" 8315 + "@tamagui/use-previous": "npm:1.123.17" 8220 8316 peerDependencies: 8221 8317 react: "*" 8222 - checksum: 10/acdf34a5a8ffcb3211b9b8d24f18d20b19e9c46872f226e62028eef3537766432007ebeff6724a4b90cba467b4fb46e09010f42dfbcf9cdca4f04a17b870baea 8318 + checksum: 10/fecb366c3f678d2e8bfffddfb7ce868cd0a347be9f29bf5b3be207447bfad1fdca0a51df7de42da4beefa1a3c4d84db0f456c5b326f9e026291630b89bdab69c 8223 8319 languageName: node 8224 8320 linkType: hard 8225 8321 8226 - "@tamagui/checkbox@npm:1.116.12": 8227 - version: 1.116.12 8228 - resolution: "@tamagui/checkbox@npm:1.116.12" 8322 + "@tamagui/checkbox@npm:1.123.17": 8323 + version: 1.123.17 8324 + resolution: "@tamagui/checkbox@npm:1.123.17" 8229 8325 dependencies: 8230 - "@tamagui/checkbox-headless": "npm:1.116.12" 8231 - "@tamagui/compose-refs": "npm:1.116.12" 8232 - "@tamagui/constants": "npm:1.116.12" 8233 - "@tamagui/core": "npm:1.116.12" 8234 - "@tamagui/create-context": "npm:1.116.12" 8235 - "@tamagui/focusable": "npm:1.116.12" 8236 - "@tamagui/font-size": "npm:1.116.12" 8237 - "@tamagui/get-token": "npm:1.116.12" 8238 - "@tamagui/helpers": "npm:1.116.12" 8239 - "@tamagui/helpers-tamagui": "npm:1.116.12" 8240 - "@tamagui/label": "npm:1.116.12" 8241 - "@tamagui/stacks": "npm:1.116.12" 8242 - "@tamagui/use-controllable-state": "npm:1.116.12" 8243 - "@tamagui/use-previous": "npm:1.116.12" 8326 + "@tamagui/checkbox-headless": "npm:1.123.17" 8327 + "@tamagui/compose-refs": "npm:1.123.17" 8328 + "@tamagui/constants": "npm:1.123.17" 8329 + "@tamagui/core": "npm:1.123.17" 8330 + "@tamagui/create-context": "npm:1.123.17" 8331 + "@tamagui/focusable": "npm:1.123.17" 8332 + "@tamagui/font-size": "npm:1.123.17" 8333 + "@tamagui/get-token": "npm:1.123.17" 8334 + "@tamagui/helpers": "npm:1.123.17" 8335 + "@tamagui/helpers-tamagui": "npm:1.123.17" 8336 + "@tamagui/label": "npm:1.123.17" 8337 + "@tamagui/stacks": "npm:1.123.17" 8338 + "@tamagui/use-controllable-state": "npm:1.123.17" 8339 + "@tamagui/use-previous": "npm:1.123.17" 8244 8340 peerDependencies: 8245 8341 react: "*" 8246 - checksum: 10/c11164157ad3cee6fcbb9466ac3d9db9d5a109e7d0995730615cdf248d265958e912331c50f9d532900b1347409aeb7ca763cc28cbe54f3548c71021881ec879 8342 + checksum: 10/9b2320abfeeb4d4d810372db4c6c70be7bde049368e4da57b942064e7a031640e78f4019a7200bc44fcb82ed018463f6b31a4570d530a3c696a396267781b940 8247 8343 languageName: node 8248 8344 linkType: hard 8249 8345 8250 - "@tamagui/cli-color@npm:1.116.12": 8251 - version: 1.116.12 8252 - resolution: "@tamagui/cli-color@npm:1.116.12" 8253 - checksum: 10/7a496aa41da13ccdb3b5bb3403ceaacca760f16d1c8276da18d574d32257e2e21fcdca0beb37111bc931bf6f637e5291ce11577949f20877a1a087dccec7cecb 8346 + "@tamagui/cli-color@npm:1.123.17": 8347 + version: 1.123.17 8348 + resolution: "@tamagui/cli-color@npm:1.123.17" 8349 + checksum: 10/7a0395cc59ead1a0cbedfc6641259735f758959f9656afc8d4d74e0c84fcf042e3ec67a743acff8cd44ae62ab607e5361b38b0f7b469b62bda3fc6ed71ca7d1a 8254 8350 languageName: node 8255 8351 linkType: hard 8256 8352 8257 - "@tamagui/collapsible@npm:1.116.12": 8258 - version: 1.116.12 8259 - resolution: "@tamagui/collapsible@npm:1.116.12" 8353 + "@tamagui/collapsible@npm:1.123.17": 8354 + version: 1.123.17 8355 + resolution: "@tamagui/collapsible@npm:1.123.17" 8260 8356 dependencies: 8261 - "@tamagui/animate-presence": "npm:1.116.12" 8262 - "@tamagui/compose-refs": "npm:1.116.12" 8263 - "@tamagui/core": "npm:1.116.12" 8264 - "@tamagui/create-context": "npm:1.116.12" 8265 - "@tamagui/helpers": "npm:1.116.12" 8266 - "@tamagui/polyfill-dev": "npm:1.116.12" 8267 - "@tamagui/stacks": "npm:1.116.12" 8268 - "@tamagui/use-controllable-state": "npm:1.116.12" 8357 + "@tamagui/animate-presence": "npm:1.123.17" 8358 + "@tamagui/compose-refs": "npm:1.123.17" 8359 + "@tamagui/core": "npm:1.123.17" 8360 + "@tamagui/create-context": "npm:1.123.17" 8361 + "@tamagui/helpers": "npm:1.123.17" 8362 + "@tamagui/polyfill-dev": "npm:1.123.17" 8363 + "@tamagui/stacks": "npm:1.123.17" 8364 + "@tamagui/use-controllable-state": "npm:1.123.17" 8269 8365 peerDependencies: 8270 8366 react: "*" 8271 - checksum: 10/54fce1b55dc448bb96d42269aa1fdcb09510280e5a8a0340d00c168ee2117808c3bde1e55d782f7edf3745ab95a64022079d1965db34ddb084c1611171543336 8367 + checksum: 10/2dd27ef5d92704790ccd12719bd6e9c4b76924b99668dc1ba2ef24f7896a82a7cfb12696850a1f44232e27916658c5bedd7a697eca0b6d804ab10712f319496a 8272 8368 languageName: node 8273 8369 linkType: hard 8274 8370 8275 - "@tamagui/collection@npm:1.116.12": 8276 - version: 1.116.12 8277 - resolution: "@tamagui/collection@npm:1.116.12" 8371 + "@tamagui/collection@npm:1.123.17": 8372 + version: 1.123.17 8373 + resolution: "@tamagui/collection@npm:1.123.17" 8278 8374 dependencies: 8279 - "@tamagui/compose-refs": "npm:1.116.12" 8280 - "@tamagui/constants": "npm:1.116.12" 8281 - "@tamagui/core": "npm:1.116.12" 8282 - "@tamagui/create-context": "npm:1.116.12" 8283 - "@tamagui/polyfill-dev": "npm:1.116.12" 8284 - "@tamagui/stacks": "npm:1.116.12" 8285 - "@tamagui/use-controllable-state": "npm:1.116.12" 8375 + "@tamagui/compose-refs": "npm:1.123.17" 8376 + "@tamagui/constants": "npm:1.123.17" 8377 + "@tamagui/core": "npm:1.123.17" 8378 + "@tamagui/create-context": "npm:1.123.17" 8379 + "@tamagui/polyfill-dev": "npm:1.123.17" 8380 + "@tamagui/stacks": "npm:1.123.17" 8381 + "@tamagui/use-controllable-state": "npm:1.123.17" 8286 8382 peerDependencies: 8287 8383 react: "*" 8288 - checksum: 10/64afeb85e9b070427fe384ac6da94f7b6521684da7e1cc43bcdd7a89ca6a9706bd2b4d3f51ccb779aee7ccd00e1211bbccca50b742fb8181d7d7dd193a89b70a 8384 + checksum: 10/d2e367c25a30b68faa7e4f0c215e41edbc8872672571c4557a57294e7331f3ea2fb9289a09a0ad164081aef7d595ec5b63677a499db62ff9105aec51e3aae21d 8289 8385 languageName: node 8290 8386 linkType: hard 8291 8387 8292 - "@tamagui/colors@npm:1.116.12": 8293 - version: 1.116.12 8294 - resolution: "@tamagui/colors@npm:1.116.12" 8295 - checksum: 10/70423ad87d4092214bf63a5dd8d30ec37eb7b166a6799efdee9d3c9eb9cb20337029a7e256c52ba178ffcc22f10b552cc7e772d893110b68092196770c9ab673 8388 + "@tamagui/colors@npm:1.123.17": 8389 + version: 1.123.17 8390 + resolution: "@tamagui/colors@npm:1.123.17" 8391 + checksum: 10/65210c08790562aeda7258ab8ba184c8d3f28b015f76ecfd9ffaef8536110c45add17caa12d420557c1fa58fb1ebd828f5d588ff0b84f8eecd4cf0c93ae74164 8296 8392 languageName: node 8297 8393 linkType: hard 8298 8394 8299 - "@tamagui/compose-refs@npm:1.116.12": 8300 - version: 1.116.12 8301 - resolution: "@tamagui/compose-refs@npm:1.116.12" 8395 + "@tamagui/compose-refs@npm:1.123.17": 8396 + version: 1.123.17 8397 + resolution: "@tamagui/compose-refs@npm:1.123.17" 8302 8398 peerDependencies: 8303 8399 react: "*" 8304 - checksum: 10/5311880a1c777013cc96431e9c89cf6cc6336a9c8ac4bcc96843ae228fe46d33c8d31c68181805210183cf4db2ed8fbdb330e2542c053778fe88e3fa4a7834b1 8400 + checksum: 10/1827af909c8eef9ce889960711d808a0c433510a64ff6b9f783dce6ae0133e395f6af1b0d89a17823b5ed1580b2ca6f5aa04cb6c06fa9b9c28184b4a4d2e76f6 8305 8401 languageName: node 8306 8402 linkType: hard 8307 8403 8308 - "@tamagui/config-default@npm:1.116.12": 8309 - version: 1.116.12 8310 - resolution: "@tamagui/config-default@npm:1.116.12" 8404 + "@tamagui/config-default@npm:1.123.17": 8405 + version: 1.123.17 8406 + resolution: "@tamagui/config-default@npm:1.123.17" 8311 8407 dependencies: 8312 - "@tamagui/animations-css": "npm:1.116.12" 8313 - "@tamagui/core": "npm:1.116.12" 8314 - "@tamagui/shorthands": "npm:1.116.12" 8315 - checksum: 10/1d2fea13a5dfa8075906966bdaab2275987a2f637d123b467733faa99a4f0483cba7e00b1a92ab214f60ba1e1e8c7c877a15b87c07a2b8fe9ed81eccbde0f54e 8408 + "@tamagui/animations-css": "npm:1.123.17" 8409 + "@tamagui/core": "npm:1.123.17" 8410 + "@tamagui/shorthands": "npm:1.123.17" 8411 + checksum: 10/73321cc2b24c5a69a75598cdf22edc6f2efe1bd0ebcc680107ec1385711dea075d0961a6b7be27151aa3a6372f2af39bf0c14f475a1295de05d03308a055a7aa 8316 8412 languageName: node 8317 8413 linkType: hard 8318 8414 8319 - "@tamagui/config@npm:^1.116.12": 8320 - version: 1.116.12 8321 - resolution: "@tamagui/config@npm:1.116.12" 8415 + "@tamagui/config@npm:^1.123.17": 8416 + version: 1.123.17 8417 + resolution: "@tamagui/config@npm:1.123.17" 8322 8418 dependencies: 8323 - "@tamagui/animations-css": "npm:1.116.12" 8324 - "@tamagui/animations-moti": "npm:1.116.12" 8325 - "@tamagui/animations-react-native": "npm:1.116.12" 8326 - "@tamagui/colors": "npm:1.116.12" 8327 - "@tamagui/font-inter": "npm:1.116.12" 8328 - "@tamagui/font-silkscreen": "npm:1.116.12" 8329 - "@tamagui/react-native-media-driver": "npm:1.116.12" 8330 - "@tamagui/shorthands": "npm:1.116.12" 8331 - "@tamagui/themes": "npm:1.116.12" 8332 - "@tamagui/web": "npm:1.116.12" 8333 - checksum: 10/ba5d3f8eb0286fc0de023dbeab3d90263c184afd64629312435f3c7f486dc522d009510aeb47a401a03712518db2dc5f4da6651d37ffc42d10827ca069fd7a7d 8419 + "@tamagui/animations-css": "npm:1.123.17" 8420 + "@tamagui/animations-moti": "npm:1.123.17" 8421 + "@tamagui/animations-react-native": "npm:1.123.17" 8422 + "@tamagui/colors": "npm:1.123.17" 8423 + "@tamagui/font-inter": "npm:1.123.17" 8424 + "@tamagui/font-silkscreen": "npm:1.123.17" 8425 + "@tamagui/react-native-media-driver": "npm:1.123.17" 8426 + "@tamagui/shorthands": "npm:1.123.17" 8427 + "@tamagui/themes": "npm:1.123.17" 8428 + "@tamagui/web": "npm:1.123.17" 8429 + checksum: 10/6234e28fea45fcb4ef8e9c62ad79774ab15d65495a40268cd224ff0ed390974ccd9807afa9d7b4dbf641af88acaf82025e74c83735543c46dd3296680f374dde 8334 8430 languageName: node 8335 8431 linkType: hard 8336 8432 8337 - "@tamagui/constants@npm:1.116.12": 8338 - version: 1.116.12 8339 - resolution: "@tamagui/constants@npm:1.116.12" 8433 + "@tamagui/constants@npm:1.123.17": 8434 + version: 1.123.17 8435 + resolution: "@tamagui/constants@npm:1.123.17" 8340 8436 peerDependencies: 8341 8437 react: "*" 8342 - checksum: 10/8813c78ba00653a1c2832fa51816ef07430fa43aec719517c77c72fb8b63561cdd04ddd8b2ca0fb678aa8b839c6ee13eecbaf4f55c5b693c3ec101c1d4db23e7 8438 + checksum: 10/ed16b73325c6b7397363c3160e6786506d94dd1140d4160bbcb87350d33d4c9da80fc8e3e99baa74929670660e2d8bb423bfa842ca8524e5ab2a1b1796f8375f 8343 8439 languageName: node 8344 8440 linkType: hard 8345 8441 8346 - "@tamagui/core@npm:1.116.12": 8347 - version: 1.116.12 8348 - resolution: "@tamagui/core@npm:1.116.12" 8442 + "@tamagui/core@npm:1.123.17": 8443 + version: 1.123.17 8444 + resolution: "@tamagui/core@npm:1.123.17" 8349 8445 dependencies: 8350 - "@tamagui/react-native-use-pressable": "npm:1.116.12" 8351 - "@tamagui/react-native-use-responder-events": "npm:1.116.12" 8352 - "@tamagui/use-event": "npm:1.116.12" 8353 - "@tamagui/web": "npm:1.116.12" 8354 - checksum: 10/4b62fde4eab13e38c448bf5d1ccc195fcbc76a98a80f21f2e051c6314105d4ed3c062ece32003c5df3a9c434336bf05b165697dbfdc3837c5db20deb317e2e93 8446 + "@tamagui/react-native-media-driver": "npm:1.123.17" 8447 + "@tamagui/react-native-use-pressable": "npm:1.123.17" 8448 + "@tamagui/react-native-use-responder-events": "npm:1.123.17" 8449 + "@tamagui/use-event": "npm:1.123.17" 8450 + "@tamagui/web": "npm:1.123.17" 8451 + checksum: 10/8235521baa1570a1b97af9594f49d3bcd0e2972a8f8e559a22c88def332af26a6ca21391ab18190cce24f8d1f373697c3452f9c102409841dd52d31c9d073f55 8355 8452 languageName: node 8356 8453 linkType: hard 8357 8454 8358 - "@tamagui/create-context@npm:1.116.12": 8359 - version: 1.116.12 8360 - resolution: "@tamagui/create-context@npm:1.116.12" 8455 + "@tamagui/create-context@npm:1.123.17": 8456 + version: 1.123.17 8457 + resolution: "@tamagui/create-context@npm:1.123.17" 8361 8458 peerDependencies: 8362 8459 react: "*" 8363 - checksum: 10/7e32f82ed88d55aa543ed8726f843b4f14c3f2e0ba0216e571e89392e8e97075efc03470fc25eeb5fa539415e7134ec44c633744ba6ecd3ccc35b9a891920f14 8460 + checksum: 10/e7e13c61455673b95214b4159150b1e8d3cbc2bd4f264f1c376299f519176ae1f5a796b25412b32ac95c07d6c0aed0679d5b7a7428f0e0c335a4dcbb0782651f 8364 8461 languageName: node 8365 8462 linkType: hard 8366 8463 8367 - "@tamagui/create-theme@npm:1.116.12": 8368 - version: 1.116.12 8369 - resolution: "@tamagui/create-theme@npm:1.116.12" 8464 + "@tamagui/create-theme@npm:1.123.17": 8465 + version: 1.123.17 8466 + resolution: "@tamagui/create-theme@npm:1.123.17" 8370 8467 dependencies: 8371 - "@tamagui/web": "npm:1.116.12" 8372 - checksum: 10/04f029c87ab8a9183c560c441b4e3c9a51cce3e6fceb8a09a724dc9f9e8ca7a7871854c199ab210a19954c8edcdbbb5e5717d395ba33c84eff6564292ca0093b 8468 + "@tamagui/web": "npm:1.123.17" 8469 + checksum: 10/63d23bf16ac788db07a20f672d213c940bc5a7ce1bd8b952f59d729afff53a16e92ac413151f98915ecc39b605f798099bd18c3bebafbcd0adeeb906bd243d4c 8373 8470 languageName: node 8374 8471 linkType: hard 8375 8472 8376 - "@tamagui/cubic-bezier-animator@npm:1.116.12": 8377 - version: 1.116.12 8378 - resolution: "@tamagui/cubic-bezier-animator@npm:1.116.12" 8379 - checksum: 10/1d5e76da48a24afda7c3eebff65866e1b3c9dd464b00cca34fb2f38f021c16057a01cfc0ff2107400473f1a24e8760230a0108807f00d982fb5a03dd758866e7 8473 + "@tamagui/cubic-bezier-animator@npm:1.123.17": 8474 + version: 1.123.17 8475 + resolution: "@tamagui/cubic-bezier-animator@npm:1.123.17" 8476 + checksum: 10/8ac4301a3014d7252ea615b60341abdc2c93df2afc14393356548a88d10124c72949e95b4dde39b509c7d4cadea2f6f744083b7bdcce1bad9972881966d3390a 8380 8477 languageName: node 8381 8478 linkType: hard 8382 8479 8383 - "@tamagui/dialog@npm:1.116.12": 8384 - version: 1.116.12 8385 - resolution: "@tamagui/dialog@npm:1.116.12" 8480 + "@tamagui/dialog@npm:1.123.17": 8481 + version: 1.123.17 8482 + resolution: "@tamagui/dialog@npm:1.123.17" 8386 8483 dependencies: 8387 - "@tamagui/adapt": "npm:1.116.12" 8388 - "@tamagui/animate-presence": "npm:1.116.12" 8389 - "@tamagui/aria-hidden": "npm:1.116.12" 8390 - "@tamagui/compose-refs": "npm:1.116.12" 8391 - "@tamagui/constants": "npm:1.116.12" 8392 - "@tamagui/core": "npm:1.116.12" 8393 - "@tamagui/create-context": "npm:1.116.12" 8394 - "@tamagui/dismissable": "npm:1.116.12" 8395 - "@tamagui/focus-scope": "npm:1.116.12" 8396 - "@tamagui/helpers": "npm:1.116.12" 8397 - "@tamagui/polyfill-dev": "npm:1.116.12" 8398 - "@tamagui/popper": "npm:1.116.12" 8399 - "@tamagui/portal": "npm:1.116.12" 8400 - "@tamagui/remove-scroll": "npm:1.116.12" 8401 - "@tamagui/sheet": "npm:1.116.12" 8402 - "@tamagui/stacks": "npm:1.116.12" 8403 - "@tamagui/text": "npm:1.116.12" 8404 - "@tamagui/use-controllable-state": "npm:1.116.12" 8484 + "@tamagui/adapt": "npm:1.123.17" 8485 + "@tamagui/animate-presence": "npm:1.123.17" 8486 + "@tamagui/aria-hidden": "npm:1.123.17" 8487 + "@tamagui/compose-refs": "npm:1.123.17" 8488 + "@tamagui/constants": "npm:1.123.17" 8489 + "@tamagui/core": "npm:1.123.17" 8490 + "@tamagui/create-context": "npm:1.123.17" 8491 + "@tamagui/dismissable": "npm:1.123.17" 8492 + "@tamagui/focus-scope": "npm:1.123.17" 8493 + "@tamagui/helpers": "npm:1.123.17" 8494 + "@tamagui/polyfill-dev": "npm:1.123.17" 8495 + "@tamagui/popper": "npm:1.123.17" 8496 + "@tamagui/portal": "npm:1.123.17" 8497 + "@tamagui/remove-scroll": "npm:1.123.17" 8498 + "@tamagui/sheet": "npm:1.123.17" 8499 + "@tamagui/stacks": "npm:1.123.17" 8500 + "@tamagui/text": "npm:1.123.17" 8501 + "@tamagui/use-controllable-state": "npm:1.123.17" 8405 8502 peerDependencies: 8406 8503 react: "*" 8407 - checksum: 10/8e3b6c0e63b2c6a4429a41c04b2b5df22109fe1b3db21dfd4dcb2d0e82aea8b8290625c3b12c24965739c80b91a57b625f7a2f63613e2c31a8c1456635e95410 8504 + checksum: 10/23e1e35d87440c398d9d23168d38c1a87239c0a7f96c382f8c0322bb330c7152a662cd5f659d53b47e723fa6fbaadb61cfd58c781b6a236685bd1ae5a74ff548 8408 8505 languageName: node 8409 8506 linkType: hard 8410 8507 8411 - "@tamagui/dismissable@npm:1.116.12": 8412 - version: 1.116.12 8413 - resolution: "@tamagui/dismissable@npm:1.116.12" 8508 + "@tamagui/dismissable@npm:1.123.17": 8509 + version: 1.123.17 8510 + resolution: "@tamagui/dismissable@npm:1.123.17" 8414 8511 dependencies: 8415 - "@tamagui/compose-refs": "npm:1.116.12" 8416 - "@tamagui/core": "npm:1.116.12" 8417 - "@tamagui/helpers": "npm:1.116.12" 8418 - "@tamagui/use-escape-keydown": "npm:1.116.12" 8419 - "@tamagui/use-event": "npm:1.116.12" 8512 + "@tamagui/compose-refs": "npm:1.123.17" 8513 + "@tamagui/core": "npm:1.123.17" 8514 + "@tamagui/helpers": "npm:1.123.17" 8515 + "@tamagui/use-escape-keydown": "npm:1.123.17" 8516 + "@tamagui/use-event": "npm:1.123.17" 8420 8517 peerDependencies: 8421 8518 react: "*" 8422 - checksum: 10/a85de426f8b2165ea7f79ab79c6ead9e15312e0209319b95bad9a411cb9bfa242dd0326f53c49be68625d45dd6ef06b60203c9701a20f1b54aa3f96db4a029cb 8519 + checksum: 10/a13f26f55f647234b7f4494621333ae12a668f50283c13f6ac5869209bdc1eb58f0c66fa51a8304ceb091f8793fcfe9b21a80843993c4b9c8752e2258e544608 8423 8520 languageName: node 8424 8521 linkType: hard 8425 8522 8426 - "@tamagui/elements@npm:1.116.12": 8427 - version: 1.116.12 8428 - resolution: "@tamagui/elements@npm:1.116.12" 8523 + "@tamagui/elements@npm:1.123.17": 8524 + version: 1.123.17 8525 + resolution: "@tamagui/elements@npm:1.123.17" 8429 8526 dependencies: 8430 - "@tamagui/core": "npm:1.116.12" 8527 + "@tamagui/core": "npm:1.123.17" 8431 8528 peerDependencies: 8432 8529 react: "*" 8433 - checksum: 10/f6f30f830c0b37e61a5609256ff69d8d052cf8711318c411fdbb0e2773af5bbefa76d4cb4b8faec144837c76c8abc88db78e0657577ab45244dc82d01c498b89 8530 + checksum: 10/16aa3b6a235e7d68d7ec7da8f0276ac94a11716596f36778301bd3e238b57a074fe3f40985e445953e921167aae25f09807a6fd055a19646cce2dd0f39235295 8434 8531 languageName: node 8435 8532 linkType: hard 8436 8533 8437 - "@tamagui/fake-react-native@npm:1.116.12": 8438 - version: 1.116.12 8439 - resolution: "@tamagui/fake-react-native@npm:1.116.12" 8440 - checksum: 10/bc874e19d2799785e008c31f50fb36ac61984da987d3cfc5aa3aa299dbc90273899400a1c04ef63efec5c51950a3a70ef7d5ed275b1db9354d8fdc0056b8fa4c 8534 + "@tamagui/fake-react-native@npm:1.123.17": 8535 + version: 1.123.17 8536 + resolution: "@tamagui/fake-react-native@npm:1.123.17" 8537 + checksum: 10/50dff7468d1658a3ab46c2bf076b0e0f8c4654efe2384afee833e72ebef047da361b4471ec0f53772d7191b8cffabb9b594f9e61a045a7ce785c89cdc6b75ede 8441 8538 languageName: node 8442 8539 linkType: hard 8443 8540 8444 - "@tamagui/floating@npm:1.116.12": 8445 - version: 1.116.12 8446 - resolution: "@tamagui/floating@npm:1.116.12" 8541 + "@tamagui/floating@npm:1.123.17": 8542 + version: 1.123.17 8543 + resolution: "@tamagui/floating@npm:1.123.17" 8447 8544 dependencies: 8448 8545 "@floating-ui/react-dom": "npm:^2.1.2" 8449 - "@floating-ui/react-native": "npm:^0.10.6" 8546 + "@floating-ui/react-native": "npm:^0.10.7" 8450 8547 peerDependencies: 8451 8548 react: "*" 8452 - checksum: 10/491343ffac5726b50928f657afb1717b167f0b9fe585f183f8b1351fa7b6c139a531222c0389d7722808c724117f6961c43728e5bca93af9524d66afe6e44601 8549 + checksum: 10/aeb4845d9b94c4b001b35e9667bb45cfaa606ffce6e21c44d9af70786daec19ad5cc3e39efde2c4379f852342750e1ae47fb89d453c02cdc64ad1a6e1d6a4b2f 8453 8550 languageName: node 8454 8551 linkType: hard 8455 8552 8456 - "@tamagui/focus-scope@npm:1.116.12": 8457 - version: 1.116.12 8458 - resolution: "@tamagui/focus-scope@npm:1.116.12" 8553 + "@tamagui/focus-scope@npm:1.123.17": 8554 + version: 1.123.17 8555 + resolution: "@tamagui/focus-scope@npm:1.123.17" 8459 8556 dependencies: 8460 - "@tamagui/compose-refs": "npm:1.116.12" 8461 - "@tamagui/start-transition": "npm:1.116.12" 8462 - "@tamagui/use-event": "npm:1.116.12" 8557 + "@tamagui/compose-refs": "npm:1.123.17" 8558 + "@tamagui/start-transition": "npm:1.123.17" 8559 + "@tamagui/use-event": "npm:1.123.17" 8463 8560 peerDependencies: 8464 8561 react: "*" 8465 - checksum: 10/80fa70acdddb796bd80bc7c11ad208bdd9a98fb266bef4f1b17b178e03760919f19c968fd31a9b7e5bb2e00a046ab0f8f991530874b893385a39b9963deb2abc 8562 + checksum: 10/32df62d0df4cd2dcfb0d0c54bb2ffbfe9757709df80238d5cbd2a6a1ee0a00c2ab9d4d1aca72b092a27d9cb0156a016cd7dafbd56e1b95c35821420b1f965d24 8466 8563 languageName: node 8467 8564 linkType: hard 8468 8565 8469 - "@tamagui/focusable@npm:1.116.12": 8470 - version: 1.116.12 8471 - resolution: "@tamagui/focusable@npm:1.116.12" 8566 + "@tamagui/focusable@npm:1.123.17": 8567 + version: 1.123.17 8568 + resolution: "@tamagui/focusable@npm:1.123.17" 8472 8569 dependencies: 8473 - "@tamagui/compose-refs": "npm:1.116.12" 8474 - "@tamagui/web": "npm:1.116.12" 8570 + "@tamagui/compose-refs": "npm:1.123.17" 8571 + "@tamagui/web": "npm:1.123.17" 8475 8572 peerDependencies: 8476 8573 react: "*" 8477 - checksum: 10/c395db95515150dea18b6c5fced44951bc8f1a7ee2d715275740289c4357eb52433d369e95f52b9d110d531d2367b3fa3daf012c70c0ec99965b6cda9dbde748 8574 + checksum: 10/38b5a72c9f73375ebc31d4ca336a7d401b4911c40d2d444da754f79fe5bbd0d6e09205e8c0038abc21f0adec0107eea3aaa148b2b58930d2148ec845bb98f8da 8478 8575 languageName: node 8479 8576 linkType: hard 8480 8577 8481 - "@tamagui/font-inter@npm:1.116.12": 8482 - version: 1.116.12 8483 - resolution: "@tamagui/font-inter@npm:1.116.12" 8578 + "@tamagui/font-inter@npm:1.123.17": 8579 + version: 1.123.17 8580 + resolution: "@tamagui/font-inter@npm:1.123.17" 8484 8581 dependencies: 8485 - "@tamagui/core": "npm:1.116.12" 8486 - checksum: 10/91af27ec0324e364f107eac919fefed5bbfecef3e8d4f406980d4decb8cfc54cde3204c79f991ffb17406a886661346ebb2a5851ca570052bd079e22e5bcf713 8582 + "@tamagui/core": "npm:1.123.17" 8583 + checksum: 10/74dc6d65571ddef38fec97858ff430b83ed7518923b4885c21686a73fcd6b00854b171fe27d3277aa70945c06e77e541cb96396dbf2caeb9b4cbd75775e910cf 8487 8584 languageName: node 8488 8585 linkType: hard 8489 8586 8490 - "@tamagui/font-silkscreen@npm:1.116.12": 8491 - version: 1.116.12 8492 - resolution: "@tamagui/font-silkscreen@npm:1.116.12" 8587 + "@tamagui/font-silkscreen@npm:1.123.17": 8588 + version: 1.123.17 8589 + resolution: "@tamagui/font-silkscreen@npm:1.123.17" 8493 8590 dependencies: 8494 - "@tamagui/core": "npm:1.116.12" 8495 - checksum: 10/70c60c668c3dd7c0833c86c0506ac51a5be01af4b5a4013d2be4a52f6c7b0d47ef996f2405eb86257ad6cb5facfda85042b2c0511eeb6b7b39ad933c02b76860 8591 + "@tamagui/core": "npm:1.123.17" 8592 + checksum: 10/73ff0b5ba980163943d3326140e667a7669c4819bf914db8c526dea44beeb168b79525dee53d5ab2d95921a33cf97cad5408431418514ece8677958d2ee70163 8496 8593 languageName: node 8497 8594 linkType: hard 8498 8595 8499 - "@tamagui/font-size@npm:1.116.12": 8500 - version: 1.116.12 8501 - resolution: "@tamagui/font-size@npm:1.116.12" 8596 + "@tamagui/font-size@npm:1.123.17": 8597 + version: 1.123.17 8598 + resolution: "@tamagui/font-size@npm:1.123.17" 8502 8599 dependencies: 8503 - "@tamagui/core": "npm:1.116.12" 8600 + "@tamagui/core": "npm:1.123.17" 8504 8601 peerDependencies: 8505 8602 react: "*" 8506 - checksum: 10/01509cfa12671fce97b6e241a9e2d4c6810448bfdb7a76fa74224d3326539af261f29d2e8e8b323d781e4b320ff010c8411faac8cb4a74d7206331c895735c3c 8603 + checksum: 10/027ab05f7ab5ad75f430e743d8ead92fd02f65bba67273c972bd918e73ed8948bcda4749bc906fda86d51f69238dfdd437748a1c14fbf51baa43e260e1d2e54f 8507 8604 languageName: node 8508 8605 linkType: hard 8509 8606 8510 - "@tamagui/form@npm:1.116.12": 8511 - version: 1.116.12 8512 - resolution: "@tamagui/form@npm:1.116.12" 8607 + "@tamagui/form@npm:1.123.17": 8608 + version: 1.123.17 8609 + resolution: "@tamagui/form@npm:1.123.17" 8513 8610 dependencies: 8514 - "@tamagui/compose-refs": "npm:1.116.12" 8515 - "@tamagui/core": "npm:1.116.12" 8516 - "@tamagui/create-context": "npm:1.116.12" 8517 - "@tamagui/focusable": "npm:1.116.12" 8518 - "@tamagui/get-button-sized": "npm:1.116.12" 8519 - "@tamagui/get-font-sized": "npm:1.116.12" 8520 - "@tamagui/helpers": "npm:1.116.12" 8521 - "@tamagui/text": "npm:1.116.12" 8611 + "@tamagui/compose-refs": "npm:1.123.17" 8612 + "@tamagui/core": "npm:1.123.17" 8613 + "@tamagui/create-context": "npm:1.123.17" 8614 + "@tamagui/focusable": "npm:1.123.17" 8615 + "@tamagui/get-button-sized": "npm:1.123.17" 8616 + "@tamagui/get-font-sized": "npm:1.123.17" 8617 + "@tamagui/helpers": "npm:1.123.17" 8618 + "@tamagui/text": "npm:1.123.17" 8522 8619 peerDependencies: 8523 8620 react: "*" 8524 - checksum: 10/cc319bc9157fdb639c31b41ee4414fc26e02e405fc6e01c272d3319b7460f683687cb375f730ef2be53992ff779cfa1cf35d5e40cc82ae3a40fbfb0451cd7856 8621 + checksum: 10/893f43896334ed884ae2c3149d914f896af12f5ad3ae7d467f0b2b5f6ddb4590ed3a22bf36cfe7a3c9661499181bcd00d12a22c9daa8a3717a2ab8dc8b7e1fd3 8525 8622 languageName: node 8526 8623 linkType: hard 8527 8624 8528 - "@tamagui/generate-themes@npm:1.116.12": 8529 - version: 1.116.12 8530 - resolution: "@tamagui/generate-themes@npm:1.116.12" 8625 + "@tamagui/generate-themes@npm:1.123.17": 8626 + version: 1.123.17 8627 + resolution: "@tamagui/generate-themes@npm:1.123.17" 8531 8628 dependencies: 8532 - "@tamagui/create-theme": "npm:1.116.12" 8533 - "@tamagui/theme-builder": "npm:1.116.12" 8534 - "@tamagui/types": "npm:1.116.12" 8629 + "@tamagui/create-theme": "npm:1.123.17" 8630 + "@tamagui/theme-builder": "npm:1.123.17" 8631 + "@tamagui/types": "npm:1.123.17" 8535 8632 esbuild-register: "npm:^3.6.0" 8536 8633 fs-extra: "npm:^11.2.0" 8537 - checksum: 10/c1017366fe577a6486ef71493b9d415ba2ab91ad8eab59af600e425e9564bcb3c818338735543372c6abfe1024b10813e1f0fbe06be3af8b833972f6e648ce02 8634 + checksum: 10/779ace3a0082f94f7469af1dc694a655ad3ee63ae0e67140f61e1004bb251118f679a1f0ed78d06655e59ed628c57660785efb6c26ee0482257ba4327185854c 8538 8635 languageName: node 8539 8636 linkType: hard 8540 8637 8541 - "@tamagui/get-button-sized@npm:1.116.12": 8542 - version: 1.116.12 8543 - resolution: "@tamagui/get-button-sized@npm:1.116.12" 8638 + "@tamagui/get-button-sized@npm:1.123.17": 8639 + version: 1.123.17 8640 + resolution: "@tamagui/get-button-sized@npm:1.123.17" 8544 8641 dependencies: 8545 - "@tamagui/get-token": "npm:1.116.12" 8546 - "@tamagui/web": "npm:1.116.12" 8642 + "@tamagui/get-token": "npm:1.123.17" 8643 + "@tamagui/web": "npm:1.123.17" 8547 8644 peerDependencies: 8548 8645 react: "*" 8549 - checksum: 10/072c69c3c510dfbb5e93362922b7740f30490701a62d28cc734d2da935a86fad1c48617685d812ea60441713de600f3719e966452c84415c2dbd5cf0dcee9157 8646 + checksum: 10/8dd2c8771159f23dcebcee544d6fe4d7d5a9832513cf75d7d0432458c4e7ea746eadc177806bbec814d67b973e7ae8ec6c7e620d072e071fcff9917ac116eeba 8550 8647 languageName: node 8551 8648 linkType: hard 8552 8649 8553 - "@tamagui/get-font-sized@npm:1.116.12": 8554 - version: 1.116.12 8555 - resolution: "@tamagui/get-font-sized@npm:1.116.12" 8650 + "@tamagui/get-font-sized@npm:1.123.17": 8651 + version: 1.123.17 8652 + resolution: "@tamagui/get-font-sized@npm:1.123.17" 8556 8653 dependencies: 8557 - "@tamagui/constants": "npm:1.116.12" 8558 - "@tamagui/core": "npm:1.116.12" 8654 + "@tamagui/constants": "npm:1.123.17" 8655 + "@tamagui/core": "npm:1.123.17" 8559 8656 peerDependencies: 8560 8657 react: "*" 8561 - checksum: 10/6fa82fcdb11dc077ec2022ef4879147b090a83d4857e61ae76fd3ddf3e49b0a39ac5f39bee26f48614706172c5cf5874bc759cf80db50b68fa4ced21beef0a38 8658 + checksum: 10/07f59f8dbc31e56b09102892ee7b86c32984e7e5787ce3f1a6727ac80bec449fa45236a630e2402a2dc2551cb997ac9b4a6cb885176848b6bec3c260091633e0 8562 8659 languageName: node 8563 8660 linkType: hard 8564 8661 8565 - "@tamagui/get-token@npm:1.116.12": 8566 - version: 1.116.12 8567 - resolution: "@tamagui/get-token@npm:1.116.12" 8662 + "@tamagui/get-token@npm:1.123.17": 8663 + version: 1.123.17 8664 + resolution: "@tamagui/get-token@npm:1.123.17" 8568 8665 dependencies: 8569 - "@tamagui/web": "npm:1.116.12" 8666 + "@tamagui/web": "npm:1.123.17" 8570 8667 peerDependencies: 8571 8668 react: "*" 8572 - checksum: 10/1cf23e61a052cd91f66b011f4751331a472cd3dbc20caf805b303d304a989ccefb2e3aee3d896bda85527dfdf46a83dcad9705ecd719482d7a273db91f35ac3c 8669 + checksum: 10/c5c898baec07fcd5f549e8b0df81cbd3e6bf02babe51b9c63d1695393d4fce62d1c99d6feedc85a45765c95bbaff72c931c0c1bc5441ac28773e03f233cc0871 8573 8670 languageName: node 8574 8671 linkType: hard 8575 8672 8576 - "@tamagui/group@npm:1.116.12": 8577 - version: 1.116.12 8578 - resolution: "@tamagui/group@npm:1.116.12" 8673 + "@tamagui/group@npm:1.123.17": 8674 + version: 1.123.17 8675 + resolution: "@tamagui/group@npm:1.123.17" 8579 8676 dependencies: 8580 - "@tamagui/core": "npm:1.116.12" 8581 - "@tamagui/create-context": "npm:1.116.12" 8582 - "@tamagui/helpers": "npm:1.116.12" 8583 - "@tamagui/stacks": "npm:1.116.12" 8584 - "@tamagui/use-controllable-state": "npm:1.116.12" 8677 + "@tamagui/core": "npm:1.123.17" 8678 + "@tamagui/create-context": "npm:1.123.17" 8679 + "@tamagui/helpers": "npm:1.123.17" 8680 + "@tamagui/stacks": "npm:1.123.17" 8681 + "@tamagui/use-controllable-state": "npm:1.123.17" 8585 8682 peerDependencies: 8586 8683 react: "*" 8587 - checksum: 10/9721ecb8bdaf7827e1efa427bb0cabb37c646dae4207835040bc0fb2879cd7b44bb165777faaa9d85f4f3bcecafe26beffa6ebfdcfc392ae4baa210af9a00bd5 8684 + checksum: 10/ad9947025e72310a382a100389b7738c010127a95801bb6e2430419a6c2d04b209b8c2b6f390fd3c7757ff487bd878dfa32a4cf9913d4ceb48d21cba45ec5e77 8588 8685 languageName: node 8589 8686 linkType: hard 8590 8687 8591 - "@tamagui/helpers-icon@npm:1.116.12": 8592 - version: 1.116.12 8593 - resolution: "@tamagui/helpers-icon@npm:1.116.12" 8688 + "@tamagui/helpers-icon@npm:1.123.17": 8689 + version: 1.123.17 8690 + resolution: "@tamagui/helpers-icon@npm:1.123.17" 8594 8691 dependencies: 8595 - "@tamagui/core": "npm:1.116.12" 8692 + "@tamagui/core": "npm:1.123.17" 8596 8693 peerDependencies: 8597 8694 react: "*" 8598 8695 react-native-svg: ">=12" 8599 - checksum: 10/ef95c7d1b8e3ed354c6760d2c0e1c7cbc0ab67c649dbb7473b3fc8fdcebb8c2b8c2d193bea821ced8042e3b959b4835154cfdccc001898669f994d5d92aaeaad 8696 + checksum: 10/dbca782447c0cc7c2f490c0f652a90a3dd855221558c65312e50cf4ddc344703850740fd366838b89e23c756a2e8a76e6634c43c1c9221e4d1a107b2b63a51f2 8600 8697 languageName: node 8601 8698 linkType: hard 8602 8699 8603 - "@tamagui/helpers-node@npm:1.116.12": 8604 - version: 1.116.12 8605 - resolution: "@tamagui/helpers-node@npm:1.116.12" 8700 + "@tamagui/helpers-node@npm:1.123.17": 8701 + version: 1.123.17 8702 + resolution: "@tamagui/helpers-node@npm:1.123.17" 8606 8703 dependencies: 8607 - "@tamagui/types": "npm:1.116.12" 8608 - checksum: 10/8627cd9f574cb29e2f6ca4a18e9a73f9f3fa393290740d218303ba99b57598202b6cdd230fe3baa3d3bd6522bf650fa7e955d2f6b2e410f1e79edc498ba879e8 8704 + "@tamagui/types": "npm:1.123.17" 8705 + checksum: 10/603bc77fce83878a00f8820416f8ba9cd314ac7a2ea8682ce033710fabd0dbb777f2b87b0c6e51975622c01de02ff786953cbcc6ed8891480362d0e0a7e47e72 8609 8706 languageName: node 8610 8707 linkType: hard 8611 8708 8612 - "@tamagui/helpers-tamagui@npm:1.116.12": 8613 - version: 1.116.12 8614 - resolution: "@tamagui/helpers-tamagui@npm:1.116.12" 8709 + "@tamagui/helpers-tamagui@npm:1.123.17": 8710 + version: 1.123.17 8711 + resolution: "@tamagui/helpers-tamagui@npm:1.123.17" 8615 8712 dependencies: 8616 - "@tamagui/helpers": "npm:1.116.12" 8617 - "@tamagui/web": "npm:1.116.12" 8713 + "@tamagui/helpers": "npm:1.123.17" 8714 + "@tamagui/web": "npm:1.123.17" 8618 8715 peerDependencies: 8619 8716 react: "*" 8620 - checksum: 10/ddb7a805706cb2d9502b19d60e728f6e96fe06608a61c39d1091699f00e8ae6fefd9246633f0f145b68a1fd477e4fa3ad705ba4e0d62a87f8edbbffbc0d433db 8717 + checksum: 10/65f95a3f4e6cb9768bece03b0fd143a5ad2d1257e5a4aeb486ba8117ca2bdd23d6af8939be7dbfc069665a86bbeb91f9c9b17dbe61bb600c3fcd43c890276951 8621 8718 languageName: node 8622 8719 linkType: hard 8623 8720 8624 - "@tamagui/helpers@npm:1.116.12": 8625 - version: 1.116.12 8626 - resolution: "@tamagui/helpers@npm:1.116.12" 8721 + "@tamagui/helpers@npm:1.123.17": 8722 + version: 1.123.17 8723 + resolution: "@tamagui/helpers@npm:1.123.17" 8627 8724 dependencies: 8628 - "@tamagui/constants": "npm:1.116.12" 8629 - "@tamagui/simple-hash": "npm:1.116.12" 8630 - checksum: 10/0ac838c2e81ead3728378da72db9195d06eb81edb3d8e85a45c784d2fddc8bece13fa4daa0360f514d2ee58e4fcd1d11a027198f79d6e82fb01c6c0dff455782 8725 + "@tamagui/constants": "npm:1.123.17" 8726 + "@tamagui/simple-hash": "npm:1.123.17" 8727 + checksum: 10/f2e902585b43f0930cd166ffb78970a619e94b9db7dad693c2bd22fd97543b10f5afe7b1394f87a4a397a2e70fcca307f55d4af04c467404c7a339998c1c1189 8631 8728 languageName: node 8632 8729 linkType: hard 8633 8730 8634 - "@tamagui/image@npm:1.116.12": 8635 - version: 1.116.12 8636 - resolution: "@tamagui/image@npm:1.116.12" 8731 + "@tamagui/image@npm:1.123.17": 8732 + version: 1.123.17 8733 + resolution: "@tamagui/image@npm:1.123.17" 8637 8734 dependencies: 8638 - "@tamagui/constants": "npm:1.116.12" 8639 - "@tamagui/core": "npm:1.116.12" 8735 + "@tamagui/constants": "npm:1.123.17" 8736 + "@tamagui/core": "npm:1.123.17" 8640 8737 peerDependencies: 8641 8738 react: "*" 8642 - checksum: 10/7d37399c8099c2f12320e69b81cf7c2dc791d903199027335af9df587259ab2e75d556c962e59f218a079eed1af1d62c4e0b8372a4fc8b62084ab7bbebe15064 8739 + checksum: 10/cfa43ef103a6067695237601c8cefea9468da26559e80af4886d87b1e0b3f0fd57187eb7edccdced1e4ed6957809ec18054fff9d8d21c9ee23ff380e0a28a05d 8643 8740 languageName: node 8644 8741 linkType: hard 8645 8742 8646 - "@tamagui/label@npm:1.116.12": 8647 - version: 1.116.12 8648 - resolution: "@tamagui/label@npm:1.116.12" 8743 + "@tamagui/label@npm:1.123.17": 8744 + version: 1.123.17 8745 + resolution: "@tamagui/label@npm:1.123.17" 8649 8746 dependencies: 8650 - "@tamagui/compose-refs": "npm:1.116.12" 8651 - "@tamagui/constants": "npm:1.116.12" 8652 - "@tamagui/create-context": "npm:1.116.12" 8653 - "@tamagui/focusable": "npm:1.116.12" 8654 - "@tamagui/get-button-sized": "npm:1.116.12" 8655 - "@tamagui/get-font-sized": "npm:1.116.12" 8656 - "@tamagui/text": "npm:1.116.12" 8657 - "@tamagui/web": "npm:1.116.12" 8747 + "@tamagui/compose-refs": "npm:1.123.17" 8748 + "@tamagui/constants": "npm:1.123.17" 8749 + "@tamagui/create-context": "npm:1.123.17" 8750 + "@tamagui/focusable": "npm:1.123.17" 8751 + "@tamagui/get-button-sized": "npm:1.123.17" 8752 + "@tamagui/get-font-sized": "npm:1.123.17" 8753 + "@tamagui/text": "npm:1.123.17" 8754 + "@tamagui/web": "npm:1.123.17" 8658 8755 peerDependencies: 8659 8756 react: "*" 8660 8757 react-native: "*" 8661 - checksum: 10/d914f498432c988dfd2bb4eeb5323daa905415e000d13ba7db8ebc8625e324f24075fb7a9bbd10627b8480ddcb05e6f8032c45aaedcea15b2c8b4fb8a59c7640 8758 + checksum: 10/514f9af8f1b89f8fbe76ab893a172e0ffdd8fe2deb485ef3e568b08ddca76036f82b4a42b9301b97ab256ae9bb6b78224852793f440caa4b02d72df411783065 8662 8759 languageName: node 8663 8760 linkType: hard 8664 8761 8665 - "@tamagui/linear-gradient@npm:1.116.12": 8666 - version: 1.116.12 8667 - resolution: "@tamagui/linear-gradient@npm:1.116.12" 8762 + "@tamagui/linear-gradient@npm:1.123.17": 8763 + version: 1.123.17 8764 + resolution: "@tamagui/linear-gradient@npm:1.123.17" 8668 8765 dependencies: 8669 - "@tamagui/core": "npm:1.116.12" 8670 - "@tamagui/stacks": "npm:1.116.12" 8766 + "@tamagui/core": "npm:1.123.17" 8767 + "@tamagui/stacks": "npm:1.123.17" 8671 8768 peerDependencies: 8672 8769 react: "*" 8673 - checksum: 10/5e605bba90640f48e66be211e597280d40d5b27bc9ce33bbba7498964143e2494b96a400bebb4086ced4a2c79656ae9507a4ab724bbbc7dcdcd76091d645e5f1 8770 + checksum: 10/9dc7236c64ce6e356cd7268a8c59bce0d6eda15de3c9514018c3fd64721a75a832c09226934f9b7049adbbece2af3e07c31c7dde3221235cdd8dd77c53d936ad 8674 8771 languageName: node 8675 8772 linkType: hard 8676 8773 8677 - "@tamagui/list-item@npm:1.116.12": 8678 - version: 1.116.12 8679 - resolution: "@tamagui/list-item@npm:1.116.12" 8774 + "@tamagui/list-item@npm:1.123.17": 8775 + version: 1.123.17 8776 + resolution: "@tamagui/list-item@npm:1.123.17" 8680 8777 dependencies: 8681 - "@tamagui/font-size": "npm:1.116.12" 8682 - "@tamagui/get-font-sized": "npm:1.116.12" 8683 - "@tamagui/get-token": "npm:1.116.12" 8684 - "@tamagui/helpers": "npm:1.116.12" 8685 - "@tamagui/helpers-tamagui": "npm:1.116.12" 8686 - "@tamagui/stacks": "npm:1.116.12" 8687 - "@tamagui/text": "npm:1.116.12" 8688 - "@tamagui/web": "npm:1.116.12" 8778 + "@tamagui/font-size": "npm:1.123.17" 8779 + "@tamagui/get-font-sized": "npm:1.123.17" 8780 + "@tamagui/get-token": "npm:1.123.17" 8781 + "@tamagui/helpers": "npm:1.123.17" 8782 + "@tamagui/helpers-tamagui": "npm:1.123.17" 8783 + "@tamagui/stacks": "npm:1.123.17" 8784 + "@tamagui/text": "npm:1.123.17" 8785 + "@tamagui/web": "npm:1.123.17" 8689 8786 peerDependencies: 8690 8787 react: "*" 8691 - checksum: 10/67f4a9685d0e7e4a8e6e0755819f3b82efc4609504885a9e40721d3c27ef940536a23cbf67632b8e0cdafe144d28db4bd87f2380619b9f1187a3be5c46ffa521 8788 + checksum: 10/b0b22d76296aa12f0de00a27126e590817d7a717aa00f2b061fda2c7daee3393d9c403d238eba9f08a2a1d9943e6c3b3405bf5253f0107780c5930dbadfb2c9f 8692 8789 languageName: node 8693 8790 linkType: hard 8694 8791 8695 - "@tamagui/lucide-icons@npm:^1.116.12": 8696 - version: 1.116.12 8697 - resolution: "@tamagui/lucide-icons@npm:1.116.12" 8792 + "@tamagui/lucide-icons@npm:^1.123.17": 8793 + version: 1.123.17 8794 + resolution: "@tamagui/lucide-icons@npm:1.123.17" 8698 8795 dependencies: 8699 - "@tamagui/core": "npm:1.116.12" 8700 - "@tamagui/helpers-icon": "npm:1.116.12" 8796 + "@tamagui/core": "npm:1.123.17" 8797 + "@tamagui/helpers-icon": "npm:1.123.17" 8701 8798 peerDependencies: 8702 8799 react: "*" 8703 8800 react-native-svg: ">=12" 8704 - checksum: 10/d4cf13c7b99680774d0f069c7985ce8a14ce8f0e081fa779360d30c3dde033d0bef7809e999339074c73193b7514786c0b87ea78b0adf6713e3aec4ad789e037 8801 + checksum: 10/5ef0256991fdc3799c1aa27bf5956817577529d7c37396608c28bf3d166bcf07b499efb233b7c98a19e01ff908172b91c17e08bfdab83d4883b7515a7d76ebbd 8705 8802 languageName: node 8706 8803 linkType: hard 8707 8804 8708 - "@tamagui/metro-plugin@npm:^1.116.12": 8709 - version: 1.116.12 8710 - resolution: "@tamagui/metro-plugin@npm:1.116.12" 8805 + "@tamagui/metro-plugin@npm:^1.123.17": 8806 + version: 1.123.17 8807 + resolution: "@tamagui/metro-plugin@npm:1.123.17" 8711 8808 dependencies: 8712 - "@tamagui/static": "npm:1.116.12" 8809 + "@tamagui/static": "npm:1.123.17" 8713 8810 fs-extra: "npm:^11.2.0" 8714 8811 metro-config: "npm:^0.80.4" 8715 8812 metro-transform-worker: "npm:^0.80.4" 8716 - react-native-css-interop: "npm:~0.0.21" 8717 - checksum: 10/f99e1b64a7c49ccea4442d7f14265c0432e141e4951d9a3febafa7c02fa03b424df5cb922a41ae5020a9eec6e34eb5f102c3e5ef020c76fa0284c0bad47e21d8 8813 + react-native-css-interop: "npm:^0.1.22" 8814 + checksum: 10/738614c08fdce53fdd40175729e94e3d8118a336d2614cbfe04fd6602d4ab3a361647b37d52f84809d50360a2519ad294ce9bf920a8566f294da6753533ee409 8718 8815 languageName: node 8719 8816 linkType: hard 8720 8817 8721 - "@tamagui/normalize-css-color@npm:1.116.12": 8722 - version: 1.116.12 8723 - resolution: "@tamagui/normalize-css-color@npm:1.116.12" 8818 + "@tamagui/normalize-css-color@npm:1.123.17": 8819 + version: 1.123.17 8820 + resolution: "@tamagui/normalize-css-color@npm:1.123.17" 8724 8821 dependencies: 8725 8822 "@react-native/normalize-color": "npm:^2.1.0" 8726 - checksum: 10/4b4c590730f9a93f0630d0451259244aa879175be7e84edd6a7687795d8dbbaf5d387449f1cfae279a9ebcceca668a5e7bc0a7f4a05b13647215c36214868f68 8823 + checksum: 10/f96cbd4a888aa06866f4c3a5e03354be0a28882300e899df6ded8034fd3e6cd8d18f04fd3da4a7f3b973f569663957377a2f2a3b8afba7fcbd57db83f4b05a7f 8727 8824 languageName: node 8728 8825 linkType: hard 8729 8826 8730 - "@tamagui/polyfill-dev@npm:1.116.12": 8731 - version: 1.116.12 8732 - resolution: "@tamagui/polyfill-dev@npm:1.116.12" 8733 - checksum: 10/4cd3bbb418f39f7cc033096f575896d2a8d6b2366a493c1d7896333ee51fe4ce3ba24006a0a85fa15c475ff7e842e6ea11941fec5b3603fece6f06075016c909 8827 + "@tamagui/polyfill-dev@npm:1.123.17": 8828 + version: 1.123.17 8829 + resolution: "@tamagui/polyfill-dev@npm:1.123.17" 8830 + checksum: 10/cb7ead315aadc34e11300f5861e0ef999e03826b944e53430aa8675f07bd7800364eeebaadb58f661643b5774c569e374c55fd5bc3b077ea050d2ebdf4fb6db5 8734 8831 languageName: node 8735 8832 linkType: hard 8736 8833 8737 - "@tamagui/popover@npm:1.116.12": 8738 - version: 1.116.12 8739 - resolution: "@tamagui/popover@npm:1.116.12" 8834 + "@tamagui/popover@npm:1.123.17": 8835 + version: 1.123.17 8836 + resolution: "@tamagui/popover@npm:1.123.17" 8740 8837 dependencies: 8741 - "@floating-ui/react": "npm:^0.26.24" 8742 - "@tamagui/adapt": "npm:1.116.12" 8743 - "@tamagui/animate": "npm:1.116.12" 8744 - "@tamagui/aria-hidden": "npm:1.116.12" 8745 - "@tamagui/compose-refs": "npm:1.116.12" 8746 - "@tamagui/constants": "npm:1.116.12" 8747 - "@tamagui/core": "npm:1.116.12" 8748 - "@tamagui/dismissable": "npm:1.116.12" 8749 - "@tamagui/floating": "npm:1.116.12" 8750 - "@tamagui/focus-scope": "npm:1.116.12" 8751 - "@tamagui/helpers": "npm:1.116.12" 8752 - "@tamagui/polyfill-dev": "npm:1.116.12" 8753 - "@tamagui/popper": "npm:1.116.12" 8754 - "@tamagui/portal": "npm:1.116.12" 8755 - "@tamagui/remove-scroll": "npm:1.116.12" 8756 - "@tamagui/scroll-view": "npm:1.116.12" 8757 - "@tamagui/sheet": "npm:1.116.12" 8758 - "@tamagui/stacks": "npm:1.116.12" 8759 - "@tamagui/use-controllable-state": "npm:1.116.12" 8838 + "@floating-ui/react": "npm:^0.27.3" 8839 + "@tamagui/adapt": "npm:1.123.17" 8840 + "@tamagui/animate": "npm:1.123.17" 8841 + "@tamagui/aria-hidden": "npm:1.123.17" 8842 + "@tamagui/compose-refs": "npm:1.123.17" 8843 + "@tamagui/constants": "npm:1.123.17" 8844 + "@tamagui/core": "npm:1.123.17" 8845 + "@tamagui/dismissable": "npm:1.123.17" 8846 + "@tamagui/floating": "npm:1.123.17" 8847 + "@tamagui/focus-scope": "npm:1.123.17" 8848 + "@tamagui/helpers": "npm:1.123.17" 8849 + "@tamagui/polyfill-dev": "npm:1.123.17" 8850 + "@tamagui/popper": "npm:1.123.17" 8851 + "@tamagui/portal": "npm:1.123.17" 8852 + "@tamagui/remove-scroll": "npm:1.123.17" 8853 + "@tamagui/scroll-view": "npm:1.123.17" 8854 + "@tamagui/sheet": "npm:1.123.17" 8855 + "@tamagui/stacks": "npm:1.123.17" 8856 + "@tamagui/use-controllable-state": "npm:1.123.17" 8760 8857 react-freeze: "npm:^1.0.3" 8761 8858 peerDependencies: 8762 8859 react: "*" 8763 - checksum: 10/21d4f03b0873d04a9adcb5c9b02aba073cf5f6489f162bd30719fc96f239b6db86b7c38feb591fb8aec0a2b86e281ba2c22d45cbe4a100a362976df0ea844d68 8860 + checksum: 10/8f41bf7ab0805b2cb81c45649fe0dc812291084cd37b728631732086df09fd01e379921f94ddb701ef3042dc3d0675b580940b2e75a35475af2a2efea9193a49 8764 8861 languageName: node 8765 8862 linkType: hard 8766 8863 8767 - "@tamagui/popper@npm:1.116.12": 8768 - version: 1.116.12 8769 - resolution: "@tamagui/popper@npm:1.116.12" 8864 + "@tamagui/popper@npm:1.123.17": 8865 + version: 1.123.17 8866 + resolution: "@tamagui/popper@npm:1.123.17" 8770 8867 dependencies: 8771 - "@tamagui/compose-refs": "npm:1.116.12" 8772 - "@tamagui/constants": "npm:1.116.12" 8773 - "@tamagui/core": "npm:1.116.12" 8774 - "@tamagui/floating": "npm:1.116.12" 8775 - "@tamagui/get-token": "npm:1.116.12" 8776 - "@tamagui/stacks": "npm:1.116.12" 8777 - "@tamagui/start-transition": "npm:1.116.12" 8778 - "@tamagui/use-controllable-state": "npm:1.116.12" 8868 + "@tamagui/compose-refs": "npm:1.123.17" 8869 + "@tamagui/constants": "npm:1.123.17" 8870 + "@tamagui/core": "npm:1.123.17" 8871 + "@tamagui/floating": "npm:1.123.17" 8872 + "@tamagui/get-token": "npm:1.123.17" 8873 + "@tamagui/stacks": "npm:1.123.17" 8874 + "@tamagui/start-transition": "npm:1.123.17" 8875 + "@tamagui/use-controllable-state": "npm:1.123.17" 8779 8876 peerDependencies: 8780 8877 react: "*" 8781 - checksum: 10/685633894a957641db88980f8691ef75b10e6f193b7d4437477c1aa6dbf405a5d95d6da47be7b861cc77e2cb7049cb30497697dffff386f7a294864babf6f7b3 8878 + checksum: 10/5c7907ab3c0690598be9c20b7e1c20abe4aeb5f6248617c9b48ff719ff7aeccffdc3ff3d721ec835d522add7ba87f7d4ace648c04423d31784dad82756c79915 8782 8879 languageName: node 8783 8880 linkType: hard 8784 8881 8785 - "@tamagui/portal@npm:1.116.12": 8786 - version: 1.116.12 8787 - resolution: "@tamagui/portal@npm:1.116.12" 8882 + "@tamagui/portal@npm:1.123.17": 8883 + version: 1.123.17 8884 + resolution: "@tamagui/portal@npm:1.123.17" 8788 8885 dependencies: 8789 - "@tamagui/constants": "npm:1.116.12" 8790 - "@tamagui/core": "npm:1.116.12" 8791 - "@tamagui/stacks": "npm:1.116.12" 8792 - "@tamagui/start-transition": "npm:1.116.12" 8793 - "@tamagui/use-did-finish-ssr": "npm:1.116.12" 8794 - "@tamagui/use-event": "npm:1.116.12" 8795 - react: "npm:>=18.0.0" 8796 - react-dom: "npm:>=18.0.0" 8797 - checksum: 10/7144649ba71f3e94ce5b9cc7d47ff78202d2d735d157f09e3d1dc64cb90a1aadc1101e1e433c1c13f1b8844c9cdbe37b46c6bb2f609779f83bccd88587fe0f7d 8886 + "@tamagui/constants": "npm:1.123.17" 8887 + "@tamagui/core": "npm:1.123.17" 8888 + "@tamagui/stacks": "npm:1.123.17" 8889 + "@tamagui/start-transition": "npm:1.123.17" 8890 + "@tamagui/use-did-finish-ssr": "npm:1.123.17" 8891 + "@tamagui/use-event": "npm:1.123.17" 8892 + checksum: 10/725eff3e2e9f9b1859537f6d85db8060338dabd0333545df81631dc69a8360e4b407f7f3abff395fc768e59f9719f52e4dca9dbfb13c607755ef5e72a9ff3fe8 8798 8893 languageName: node 8799 8894 linkType: hard 8800 8895 8801 - "@tamagui/progress@npm:1.116.12": 8802 - version: 1.116.12 8803 - resolution: "@tamagui/progress@npm:1.116.12" 8896 + "@tamagui/progress@npm:1.123.17": 8897 + version: 1.123.17 8898 + resolution: "@tamagui/progress@npm:1.123.17" 8804 8899 dependencies: 8805 - "@tamagui/compose-refs": "npm:1.116.12" 8806 - "@tamagui/core": "npm:1.116.12" 8807 - "@tamagui/create-context": "npm:1.116.12" 8808 - "@tamagui/get-token": "npm:1.116.12" 8809 - "@tamagui/helpers": "npm:1.116.12" 8810 - "@tamagui/stacks": "npm:1.116.12" 8900 + "@tamagui/compose-refs": "npm:1.123.17" 8901 + "@tamagui/core": "npm:1.123.17" 8902 + "@tamagui/create-context": "npm:1.123.17" 8903 + "@tamagui/get-token": "npm:1.123.17" 8904 + "@tamagui/helpers": "npm:1.123.17" 8905 + "@tamagui/stacks": "npm:1.123.17" 8811 8906 peerDependencies: 8812 8907 react: "*" 8813 - checksum: 10/7ff348204f8ad742ddfd3d6a374ad8ea74dff79ae9e0c3d78d7d36ce1c1debf292dfb1774eb2a24882af76e90a7657c4920aff6daed537c224094a3f67caf6a0 8908 + checksum: 10/a8aeeadc72b7cd28164c3d5f2892288bca69459809f8a07025966977b9f2b75ffc6f544b32f1233ee3244729cf11265c1776a71933a819c21ebfe71bdcfb097f 8814 8909 languageName: node 8815 8910 linkType: hard 8816 8911 8817 - "@tamagui/proxy-worm@npm:1.116.12": 8818 - version: 1.116.12 8819 - resolution: "@tamagui/proxy-worm@npm:1.116.12" 8820 - checksum: 10/180ae15c4698749e52b4865139bed5fff6670a303b406546988223f3fc80d87eea12684844bc06c917e855cf281af25f1b2d633adc3f30d9bf865e65f759915e 8912 + "@tamagui/proxy-worm@npm:1.123.17": 8913 + version: 1.123.17 8914 + resolution: "@tamagui/proxy-worm@npm:1.123.17" 8915 + checksum: 10/a0a020300e34865bb6bbe1b74cdb7f1b470ea7d70b25617edcfa0dcd757fb8675b8f7299ad8ae09e7bc158c0b2cde45ab26843a30950400a2421129b4c8be239 8821 8916 languageName: node 8822 8917 linkType: hard 8823 8918 8824 - "@tamagui/radio-group@npm:1.116.12": 8825 - version: 1.116.12 8826 - resolution: "@tamagui/radio-group@npm:1.116.12" 8919 + "@tamagui/radio-group@npm:1.123.17": 8920 + version: 1.123.17 8921 + resolution: "@tamagui/radio-group@npm:1.123.17" 8827 8922 dependencies: 8828 - "@tamagui/compose-refs": "npm:1.116.12" 8829 - "@tamagui/constants": "npm:1.116.12" 8830 - "@tamagui/core": "npm:1.116.12" 8831 - "@tamagui/create-context": "npm:1.116.12" 8832 - "@tamagui/focusable": "npm:1.116.12" 8833 - "@tamagui/get-token": "npm:1.116.12" 8834 - "@tamagui/helpers": "npm:1.116.12" 8835 - "@tamagui/label": "npm:1.116.12" 8836 - "@tamagui/radio-headless": "npm:1.116.12" 8837 - "@tamagui/roving-focus": "npm:1.116.12" 8838 - "@tamagui/stacks": "npm:1.116.12" 8839 - "@tamagui/use-controllable-state": "npm:1.116.12" 8840 - "@tamagui/use-previous": "npm:1.116.12" 8923 + "@tamagui/compose-refs": "npm:1.123.17" 8924 + "@tamagui/constants": "npm:1.123.17" 8925 + "@tamagui/core": "npm:1.123.17" 8926 + "@tamagui/create-context": "npm:1.123.17" 8927 + "@tamagui/focusable": "npm:1.123.17" 8928 + "@tamagui/get-token": "npm:1.123.17" 8929 + "@tamagui/helpers": "npm:1.123.17" 8930 + "@tamagui/label": "npm:1.123.17" 8931 + "@tamagui/radio-headless": "npm:1.123.17" 8932 + "@tamagui/roving-focus": "npm:1.123.17" 8933 + "@tamagui/stacks": "npm:1.123.17" 8934 + "@tamagui/use-controllable-state": "npm:1.123.17" 8935 + "@tamagui/use-previous": "npm:1.123.17" 8841 8936 peerDependencies: 8842 8937 react: "*" 8843 - checksum: 10/d2f31bc00f9ba2e81071dd5ba4828b9aa3eb240c21f98d700481c5ed623485bd61bf650dc48f215f574319acaa3a0fdac53276b9343ce062efc55b62368460b7 8938 + checksum: 10/639e5d574c11cdadc24f94b0626d85519af721788aabe9925b8b689cbe354a897d4c7437908bd338e49790975827f958382a1f18fa79dfc004e97fe989922def 8844 8939 languageName: node 8845 8940 linkType: hard 8846 8941 8847 - "@tamagui/radio-headless@npm:1.116.12": 8848 - version: 1.116.12 8849 - resolution: "@tamagui/radio-headless@npm:1.116.12" 8942 + "@tamagui/radio-headless@npm:1.123.17": 8943 + version: 1.123.17 8944 + resolution: "@tamagui/radio-headless@npm:1.123.17" 8850 8945 dependencies: 8851 - "@tamagui/compose-refs": "npm:1.116.12" 8852 - "@tamagui/constants": "npm:1.116.12" 8853 - "@tamagui/create-context": "npm:1.116.12" 8854 - "@tamagui/focusable": "npm:1.116.12" 8855 - "@tamagui/helpers": "npm:1.116.12" 8856 - "@tamagui/label": "npm:1.116.12" 8857 - "@tamagui/use-controllable-state": "npm:1.116.12" 8858 - "@tamagui/use-previous": "npm:1.116.12" 8946 + "@tamagui/compose-refs": "npm:1.123.17" 8947 + "@tamagui/constants": "npm:1.123.17" 8948 + "@tamagui/create-context": "npm:1.123.17" 8949 + "@tamagui/focusable": "npm:1.123.17" 8950 + "@tamagui/helpers": "npm:1.123.17" 8951 + "@tamagui/label": "npm:1.123.17" 8952 + "@tamagui/use-controllable-state": "npm:1.123.17" 8953 + "@tamagui/use-previous": "npm:1.123.17" 8859 8954 peerDependencies: 8860 8955 react: "*" 8861 - checksum: 10/ee5c552f2f5afd702c0fb87017a4d0888d03688141cf09a6687ea964a995dcb2b7cb4fd93ea1486a50967226e04137b6614c9124a7ba67fdd22b82705db4f413 8956 + checksum: 10/881ac90b964030df2b388d3fe6797e13a4b5a7ccdf431adfefb8dfae8422bf8acf1ab1828644c8fd151601fec19131ffb0723b491bd527d18d5c4d7816088400 8862 8957 languageName: node 8863 8958 linkType: hard 8864 8959 8865 - "@tamagui/react-native-media-driver@npm:1.116.12": 8866 - version: 1.116.12 8867 - resolution: "@tamagui/react-native-media-driver@npm:1.116.12" 8960 + "@tamagui/react-native-media-driver@npm:1.123.17": 8961 + version: 1.123.17 8962 + resolution: "@tamagui/react-native-media-driver@npm:1.123.17" 8868 8963 dependencies: 8869 - "@tamagui/web": "npm:1.116.12" 8964 + "@tamagui/web": "npm:1.123.17" 8870 8965 peerDependencies: 8871 8966 react-native: "*" 8872 - checksum: 10/bd45a9f2623aa8dc30efe538e6281609dd9b3f1b6c0e3e36d6e52a636b16d3a8b6cdc3dfaed6efae1cb5d2d7fc4fd5c5ccdf49d6d1bfa69342b7f4ef7b2934f6 8967 + checksum: 10/66a956b3fd520fa83f001d8a5c0e3172922e8ea19ec7ee47c4761b7c9440814ac1f24b9cc741df27fdf268c235e2d804f04ef5d28b75b6779f94c302b6832eb8 8873 8968 languageName: node 8874 8969 linkType: hard 8875 8970 8876 - "@tamagui/react-native-use-pressable@npm:1.116.12": 8877 - version: 1.116.12 8878 - resolution: "@tamagui/react-native-use-pressable@npm:1.116.12" 8971 + "@tamagui/react-native-use-pressable@npm:1.123.17": 8972 + version: 1.123.17 8973 + resolution: "@tamagui/react-native-use-pressable@npm:1.123.17" 8879 8974 peerDependencies: 8880 8975 react: "*" 8881 - checksum: 10/33acfe30368d24b865da58c3f0f20c0269658fe56c9bdaaa9e4ebd51d1dc2fe983904e0fa51a6aaf9bfa90bbe266472db959f15bf5d66f09f35531a6fae8bb45 8976 + checksum: 10/de0ca9092bb39f3f91a4fd4a0b37f643540082a6e4f7de107f4b58857f85e955b8f485c52055605582bb4eb24889e1d31169e5b7926f3f2fdf20e3ff1fe4ca8e 8882 8977 languageName: node 8883 8978 linkType: hard 8884 8979 8885 - "@tamagui/react-native-use-responder-events@npm:1.116.12": 8886 - version: 1.116.12 8887 - resolution: "@tamagui/react-native-use-responder-events@npm:1.116.12" 8980 + "@tamagui/react-native-use-responder-events@npm:1.123.17": 8981 + version: 1.123.17 8982 + resolution: "@tamagui/react-native-use-responder-events@npm:1.123.17" 8888 8983 peerDependencies: 8889 8984 react: "*" 8890 - checksum: 10/6fed0b3aa7b14ecb39a0df765f3ffb0bc6c652560d7241fc32f0d074f43bfc3908a8c48dda6da338b69d148de22961b0c095aac971937720af4610ebc83310ce 8985 + checksum: 10/97bb489913bf96ba6d33116afaf542e25e3e365fab88c9f7c7b1de47d9cb4869c2ce132c258c88bc75a4e06baf8f6ee2f5c14d66a40f632849983b35d3e0ad20 8891 8986 languageName: node 8892 8987 linkType: hard 8893 8988 8894 - "@tamagui/react-native-web-internals@npm:1.116.12": 8895 - version: 1.116.12 8896 - resolution: "@tamagui/react-native-web-internals@npm:1.116.12" 8989 + "@tamagui/react-native-web-internals@npm:1.123.17": 8990 + version: 1.123.17 8991 + resolution: "@tamagui/react-native-web-internals@npm:1.123.17" 8897 8992 dependencies: 8898 - "@tamagui/normalize-css-color": "npm:1.116.12" 8899 - "@tamagui/react-native-use-pressable": "npm:1.116.12" 8900 - "@tamagui/react-native-use-responder-events": "npm:1.116.12" 8901 - "@tamagui/simple-hash": "npm:1.116.12" 8902 - "@tamagui/web": "npm:1.116.12" 8903 - react: "npm:>=18.0.0" 8904 - checksum: 10/b74be5379ecb24f1183d9610a2d057a641a89c357507220eda8f3f30f3cfad276390ad592aba86bc675e95f8f9496642791fcdd26ce4dbffa97851922801dd4f 8993 + "@tamagui/normalize-css-color": "npm:1.123.17" 8994 + "@tamagui/react-native-use-pressable": "npm:1.123.17" 8995 + "@tamagui/react-native-use-responder-events": "npm:1.123.17" 8996 + "@tamagui/simple-hash": "npm:1.123.17" 8997 + "@tamagui/web": "npm:1.123.17" 8998 + checksum: 10/97fad44668ff043a16693a80bfa6839421a7c44c3483bd7b3a597166acbb34082b46a7043e3dbcce835a2e2da0701beac8e26cc84719e0e7661f375493f19958 8905 8999 languageName: node 8906 9000 linkType: hard 8907 9001 8908 - "@tamagui/react-native-web-lite@npm:1.116.12": 8909 - version: 1.116.12 8910 - resolution: "@tamagui/react-native-web-lite@npm:1.116.12" 9002 + "@tamagui/react-native-web-lite@npm:1.123.17": 9003 + version: 1.123.17 9004 + resolution: "@tamagui/react-native-web-lite@npm:1.123.17" 8911 9005 dependencies: 8912 - "@tamagui/normalize-css-color": "npm:1.116.12" 8913 - "@tamagui/react-native-use-pressable": "npm:1.116.12" 8914 - "@tamagui/react-native-use-responder-events": "npm:1.116.12" 8915 - "@tamagui/react-native-web-internals": "npm:1.116.12" 9006 + "@tamagui/normalize-css-color": "npm:1.123.17" 9007 + "@tamagui/react-native-use-pressable": "npm:1.123.17" 9008 + "@tamagui/react-native-use-responder-events": "npm:1.123.17" 9009 + "@tamagui/react-native-web-internals": "npm:1.123.17" 8916 9010 invariant: "npm:^2.2.4" 8917 9011 peerDependencies: 8918 9012 react: "*" 8919 - checksum: 10/4104e24b93823accc68d3e1bd1df24e2fbe2f2b11d02e6b33ba6f3e0a59b4dfd8103013abf0ce52e31e90015248157cfec716d50bbe5d995627b3075f0e7e860 9013 + checksum: 10/d825385ae8a5e9a4f550fa617c4105613fd70adecda34a8bb7efd851ba54bf50052a3f7aac9d393fc2f1a00e82ec04654cc672b74d8b93f920fc26731560a15d 8920 9014 languageName: node 8921 9015 linkType: hard 8922 9016 8923 - "@tamagui/remove-scroll@npm:1.116.12": 8924 - version: 1.116.12 8925 - resolution: "@tamagui/remove-scroll@npm:1.116.12" 9017 + "@tamagui/remove-scroll@npm:1.123.17": 9018 + version: 1.123.17 9019 + resolution: "@tamagui/remove-scroll@npm:1.123.17" 8926 9020 dependencies: 8927 9021 react-remove-scroll: "npm:^2.6.0" 8928 9022 peerDependencies: 8929 9023 react: "*" 8930 - checksum: 10/f637b37677ef1bdf565e7c380f93604f09c642f2a651474b27e6ea43d90c120d043f66be0292d36e565431f124615feac24ca3e24d5351418c41a0aaa5c905fd 9024 + checksum: 10/fe5c22fda127eee45e3361b7ae4528573629bbc5d4ed16785687eab857d066df5f90d97df9f3708d73ec85141ab77ee9099272098f4fe076bcca899f4e662607 8931 9025 languageName: node 8932 9026 linkType: hard 8933 9027 8934 - "@tamagui/roving-focus@npm:1.116.12": 8935 - version: 1.116.12 8936 - resolution: "@tamagui/roving-focus@npm:1.116.12" 9028 + "@tamagui/roving-focus@npm:1.123.17": 9029 + version: 1.123.17 9030 + resolution: "@tamagui/roving-focus@npm:1.123.17" 8937 9031 dependencies: 8938 - "@tamagui/collection": "npm:1.116.12" 8939 - "@tamagui/compose-refs": "npm:1.116.12" 8940 - "@tamagui/constants": "npm:1.116.12" 8941 - "@tamagui/core": "npm:1.116.12" 8942 - "@tamagui/create-context": "npm:1.116.12" 8943 - "@tamagui/helpers": "npm:1.116.12" 8944 - "@tamagui/use-controllable-state": "npm:1.116.12" 8945 - "@tamagui/use-direction": "npm:1.116.12" 8946 - "@tamagui/use-event": "npm:1.116.12" 9032 + "@tamagui/collection": "npm:1.123.17" 9033 + "@tamagui/compose-refs": "npm:1.123.17" 9034 + "@tamagui/constants": "npm:1.123.17" 9035 + "@tamagui/core": "npm:1.123.17" 9036 + "@tamagui/create-context": "npm:1.123.17" 9037 + "@tamagui/helpers": "npm:1.123.17" 9038 + "@tamagui/use-controllable-state": "npm:1.123.17" 9039 + "@tamagui/use-direction": "npm:1.123.17" 9040 + "@tamagui/use-event": "npm:1.123.17" 8947 9041 peerDependencies: 8948 9042 react: "*" 8949 - checksum: 10/0cf49bb0ea51b324b4574a29dd76538b10d8cd196418715460142af3a62ebe37c1c388d86fd5d7edb2ac57242df1d2683fadce5a5e47aeadeedbc6f140932498 9043 + checksum: 10/9b81ee320572f7966a16081a8f0a8a238be94679c4b7fd4809f5daf04962964bd4923af8f969a4dfbdf767e2c6edcfcd0f97439c1ae7c56b85448db36361eff6 8950 9044 languageName: node 8951 9045 linkType: hard 8952 9046 8953 - "@tamagui/scroll-view@npm:1.116.12": 8954 - version: 1.116.12 8955 - resolution: "@tamagui/scroll-view@npm:1.116.12" 9047 + "@tamagui/scroll-view@npm:1.123.17": 9048 + version: 1.123.17 9049 + resolution: "@tamagui/scroll-view@npm:1.123.17" 8956 9050 dependencies: 8957 - "@tamagui/stacks": "npm:1.116.12" 8958 - "@tamagui/web": "npm:1.116.12" 9051 + "@tamagui/stacks": "npm:1.123.17" 9052 + "@tamagui/web": "npm:1.123.17" 8959 9053 peerDependencies: 8960 9054 react: "*" 8961 - checksum: 10/5276a0e35da8abcb992c510a04723e61ed1395c164b896c74fb43de7284aec761ac5aac796c6fb1f0bb07367a3ef14d2408891f103045a20910e7783717f6053 9055 + checksum: 10/1f2b1a954041b8c1e3013b2eb5681b4f2daadb7f8269e01b1062ee317650200373d46a531f19cde43f1ce42570a28f7462be78782c2e9e8c7e0c8e5d14051290 8962 9056 languageName: node 8963 9057 linkType: hard 8964 9058 8965 - "@tamagui/select@npm:1.116.12": 8966 - version: 1.116.12 8967 - resolution: "@tamagui/select@npm:1.116.12" 9059 + "@tamagui/select@npm:1.123.17": 9060 + version: 1.123.17 9061 + resolution: "@tamagui/select@npm:1.123.17" 8968 9062 dependencies: 8969 - "@floating-ui/react": "npm:^0.26.24" 9063 + "@floating-ui/react": "npm:^0.27.3" 8970 9064 "@floating-ui/react-dom": "npm:^2.1.2" 8971 - "@floating-ui/react-native": "npm:^0.10.6" 8972 - "@tamagui/adapt": "npm:1.116.12" 8973 - "@tamagui/animate-presence": "npm:1.116.12" 8974 - "@tamagui/compose-refs": "npm:1.116.12" 8975 - "@tamagui/constants": "npm:1.116.12" 8976 - "@tamagui/core": "npm:1.116.12" 8977 - "@tamagui/create-context": "npm:1.116.12" 8978 - "@tamagui/dismissable": "npm:1.116.12" 8979 - "@tamagui/focus-scope": "npm:1.116.12" 8980 - "@tamagui/get-token": "npm:1.116.12" 8981 - "@tamagui/helpers": "npm:1.116.12" 8982 - "@tamagui/list-item": "npm:1.116.12" 8983 - "@tamagui/portal": "npm:1.116.12" 8984 - "@tamagui/remove-scroll": "npm:1.116.12" 8985 - "@tamagui/separator": "npm:1.116.12" 8986 - "@tamagui/sheet": "npm:1.116.12" 8987 - "@tamagui/stacks": "npm:1.116.12" 8988 - "@tamagui/text": "npm:1.116.12" 8989 - "@tamagui/use-controllable-state": "npm:1.116.12" 8990 - "@tamagui/use-debounce": "npm:1.116.12" 8991 - "@tamagui/use-event": "npm:1.116.12" 8992 - "@tamagui/use-previous": "npm:1.116.12" 9065 + "@floating-ui/react-native": "npm:^0.10.7" 9066 + "@tamagui/adapt": "npm:1.123.17" 9067 + "@tamagui/animate-presence": "npm:1.123.17" 9068 + "@tamagui/compose-refs": "npm:1.123.17" 9069 + "@tamagui/constants": "npm:1.123.17" 9070 + "@tamagui/core": "npm:1.123.17" 9071 + "@tamagui/create-context": "npm:1.123.17" 9072 + "@tamagui/dismissable": "npm:1.123.17" 9073 + "@tamagui/focus-scope": "npm:1.123.17" 9074 + "@tamagui/get-token": "npm:1.123.17" 9075 + "@tamagui/helpers": "npm:1.123.17" 9076 + "@tamagui/list-item": "npm:1.123.17" 9077 + "@tamagui/portal": "npm:1.123.17" 9078 + "@tamagui/remove-scroll": "npm:1.123.17" 9079 + "@tamagui/separator": "npm:1.123.17" 9080 + "@tamagui/sheet": "npm:1.123.17" 9081 + "@tamagui/stacks": "npm:1.123.17" 9082 + "@tamagui/text": "npm:1.123.17" 9083 + "@tamagui/use-controllable-state": "npm:1.123.17" 9084 + "@tamagui/use-debounce": "npm:1.123.17" 9085 + "@tamagui/use-event": "npm:1.123.17" 9086 + "@tamagui/use-previous": "npm:1.123.17" 8993 9087 peerDependencies: 8994 9088 react: "*" 8995 - checksum: 10/4e502961366e8b257d5c0724ea45881b7df3895adaabdff9c0652a7342585a1806c4521f5aa3512770d34006bd7911bd6fd45f5ee662a13cda39212745a023a6 9089 + checksum: 10/2e52f8274191503781dd66bd6b33c2352eb916ff740b5f79f7cc431f3f35b3e44c82630208a4d5601feabb976846efb078c131b2dc3d871e3358accc346b9a31 8996 9090 languageName: node 8997 9091 linkType: hard 8998 9092 8999 - "@tamagui/separator@npm:1.116.12": 9000 - version: 1.116.12 9001 - resolution: "@tamagui/separator@npm:1.116.12" 9093 + "@tamagui/separator@npm:1.123.17": 9094 + version: 1.123.17 9095 + resolution: "@tamagui/separator@npm:1.123.17" 9002 9096 dependencies: 9003 - "@tamagui/constants": "npm:1.116.12" 9004 - "@tamagui/core": "npm:1.116.12" 9097 + "@tamagui/constants": "npm:1.123.17" 9098 + "@tamagui/core": "npm:1.123.17" 9005 9099 peerDependencies: 9006 9100 react: "*" 9007 - checksum: 10/1e9c468cffc2bb200249f4b5fc0140e41eacdef209b9eb1fb05492c61580ea4bf0e680dfcd181838ddc0c412db8691d6e747358bec5ea94e6d6347744f6693a6 9101 + checksum: 10/412cc92fb7c0247410eff1f3059da712fb902ea168807ace44494b71863159ded93ea8eedb32b05cc3bb14dc7497a12af660f6e716896d8f66c2dc35bd7fdbcf 9008 9102 languageName: node 9009 9103 linkType: hard 9010 9104 9011 - "@tamagui/shapes@npm:1.116.12": 9012 - version: 1.116.12 9013 - resolution: "@tamagui/shapes@npm:1.116.12" 9105 + "@tamagui/shapes@npm:1.123.17": 9106 + version: 1.123.17 9107 + resolution: "@tamagui/shapes@npm:1.123.17" 9014 9108 dependencies: 9015 - "@tamagui/stacks": "npm:1.116.12" 9016 - "@tamagui/web": "npm:1.116.12" 9109 + "@tamagui/stacks": "npm:1.123.17" 9110 + "@tamagui/web": "npm:1.123.17" 9017 9111 peerDependencies: 9018 9112 react: "*" 9019 - checksum: 10/edb91adfab2637d7e08eb805a0df801a025ed0858e6dc822a78b9cae5a8abfa72bc72681765f8f0350b18453c534aa5e2f9758fca8a350e766d50c78858433e6 9113 + checksum: 10/ad19af5afc3f2fb10a1702edb29257a3a18c220769b48cee527e1480347afdd671f9294064016d2555012461c20d1d178d598ea885c77d77456c8f3a6968cb58 9020 9114 languageName: node 9021 9115 linkType: hard 9022 9116 9023 - "@tamagui/sheet@npm:1.116.12": 9024 - version: 1.116.12 9025 - resolution: "@tamagui/sheet@npm:1.116.12" 9117 + "@tamagui/sheet@npm:1.123.17": 9118 + version: 1.123.17 9119 + resolution: "@tamagui/sheet@npm:1.123.17" 9026 9120 dependencies: 9027 - "@tamagui/adapt": "npm:1.116.12" 9028 - "@tamagui/animate-presence": "npm:1.116.12" 9029 - "@tamagui/animations-react-native": "npm:1.116.12" 9030 - "@tamagui/compose-refs": "npm:1.116.12" 9031 - "@tamagui/constants": "npm:1.116.12" 9032 - "@tamagui/core": "npm:1.116.12" 9033 - "@tamagui/create-context": "npm:1.116.12" 9034 - "@tamagui/helpers": "npm:1.116.12" 9035 - "@tamagui/portal": "npm:1.116.12" 9036 - "@tamagui/remove-scroll": "npm:1.116.12" 9037 - "@tamagui/scroll-view": "npm:1.116.12" 9038 - "@tamagui/stacks": "npm:1.116.12" 9039 - "@tamagui/use-constant": "npm:1.116.12" 9040 - "@tamagui/use-controllable-state": "npm:1.116.12" 9041 - "@tamagui/use-did-finish-ssr": "npm:1.116.12" 9042 - "@tamagui/use-keyboard-visible": "npm:1.116.12" 9121 + "@tamagui/adapt": "npm:1.123.17" 9122 + "@tamagui/animate-presence": "npm:1.123.17" 9123 + "@tamagui/animations-react-native": "npm:1.123.17" 9124 + "@tamagui/compose-refs": "npm:1.123.17" 9125 + "@tamagui/constants": "npm:1.123.17" 9126 + "@tamagui/core": "npm:1.123.17" 9127 + "@tamagui/create-context": "npm:1.123.17" 9128 + "@tamagui/helpers": "npm:1.123.17" 9129 + "@tamagui/portal": "npm:1.123.17" 9130 + "@tamagui/remove-scroll": "npm:1.123.17" 9131 + "@tamagui/scroll-view": "npm:1.123.17" 9132 + "@tamagui/stacks": "npm:1.123.17" 9133 + "@tamagui/use-constant": "npm:1.123.17" 9134 + "@tamagui/use-controllable-state": "npm:1.123.17" 9135 + "@tamagui/use-did-finish-ssr": "npm:1.123.17" 9136 + "@tamagui/use-keyboard-visible": "npm:1.123.17" 9043 9137 peerDependencies: 9044 9138 react: "*" 9045 - checksum: 10/b2356fdfda2bd3b8d74ed33bdbef8aaaddeb65e9bbd6251d1f1d3f0297196fefc137317d18eefdca39a9e92a6fc1b533ffb9c69020767557c01c8095cc33ba84 9139 + checksum: 10/b56d4494fe4eb0bf8f485304961eacf63c7b6b20c9ca76c6022619b12254ad22e8db7510986aa5042debc6b4950299349769cc88cafc0383ef12caf6e9d4dd95 9046 9140 languageName: node 9047 9141 linkType: hard 9048 9142 9049 - "@tamagui/shorthands@npm:1.116.12": 9050 - version: 1.116.12 9051 - resolution: "@tamagui/shorthands@npm:1.116.12" 9052 - checksum: 10/df8312077b2879fcdeefbc14707dedfd0d77b62300dc3dd0da7e4f9bba42b7d0cbc1304e8bf9e279fbf8711a24abce71438cac68f8834cb53e880802b8049484 9143 + "@tamagui/shorthands@npm:1.123.17": 9144 + version: 1.123.17 9145 + resolution: "@tamagui/shorthands@npm:1.123.17" 9146 + dependencies: 9147 + "@tamagui/web": "npm:1.123.17" 9148 + checksum: 10/1ccada50437cc3bf404bfce3d61aeed179c67690fc1af8fb39199f49646f35f9cf844a666cbac80af0194a6346f79ccc0fbcd3a83b10def0d8da56bdae32ea6f 9053 9149 languageName: node 9054 9150 linkType: hard 9055 9151 9056 - "@tamagui/simple-hash@npm:1.116.12": 9057 - version: 1.116.12 9058 - resolution: "@tamagui/simple-hash@npm:1.116.12" 9059 - checksum: 10/f4a638de3890ecab55e2b2d7b14312b9cc103067dd4d5821eb1fd6cb89e1a2b5517a24ecc1b12ab394b8157cca54ea9d8554994000bbb86e440ac52b5da29467 9152 + "@tamagui/simple-hash@npm:1.123.17": 9153 + version: 1.123.17 9154 + resolution: "@tamagui/simple-hash@npm:1.123.17" 9155 + checksum: 10/3cbb6bb8a37a31ea582731991aef6a7ef9cc89a52bbf6f00cb2d96315e1d15b6b631a5b5e90ccb29144cf408efd61e61f86cd421b02ab47e08823455bb823ad7 9060 9156 languageName: node 9061 9157 linkType: hard 9062 9158 9063 - "@tamagui/slider@npm:1.116.12": 9064 - version: 1.116.12 9065 - resolution: "@tamagui/slider@npm:1.116.12" 9159 + "@tamagui/slider@npm:1.123.17": 9160 + version: 1.123.17 9161 + resolution: "@tamagui/slider@npm:1.123.17" 9066 9162 dependencies: 9067 - "@tamagui/compose-refs": "npm:1.116.12" 9068 - "@tamagui/constants": "npm:1.116.12" 9069 - "@tamagui/core": "npm:1.116.12" 9070 - "@tamagui/create-context": "npm:1.116.12" 9071 - "@tamagui/get-token": "npm:1.116.12" 9072 - "@tamagui/helpers": "npm:1.116.12" 9073 - "@tamagui/stacks": "npm:1.116.12" 9074 - "@tamagui/use-controllable-state": "npm:1.116.12" 9075 - "@tamagui/use-debounce": "npm:1.116.12" 9076 - "@tamagui/use-direction": "npm:1.116.12" 9163 + "@tamagui/compose-refs": "npm:1.123.17" 9164 + "@tamagui/constants": "npm:1.123.17" 9165 + "@tamagui/core": "npm:1.123.17" 9166 + "@tamagui/create-context": "npm:1.123.17" 9167 + "@tamagui/get-token": "npm:1.123.17" 9168 + "@tamagui/helpers": "npm:1.123.17" 9169 + "@tamagui/stacks": "npm:1.123.17" 9170 + "@tamagui/use-controllable-state": "npm:1.123.17" 9171 + "@tamagui/use-debounce": "npm:1.123.17" 9172 + "@tamagui/use-direction": "npm:1.123.17" 9077 9173 peerDependencies: 9078 9174 react: "*" 9079 - checksum: 10/1a0371050ef84367ee715e34c52afd4f8d3cc9916f4275d694d763930696500bf1aa6d58a4da9082bea40f55af2b05df4f034e8c109b86ff81338281df29f0ea 9175 + checksum: 10/a052b2aa64f3820743f6d54cf65d2d9391619fa7a27420996a8a5a5afe153cc4c7369f526f4064d4814133110a9dd26070b22e4a89d7c2e15e66f359b9cfd220 9080 9176 languageName: node 9081 9177 linkType: hard 9082 9178 9083 - "@tamagui/stacks@npm:1.116.12": 9084 - version: 1.116.12 9085 - resolution: "@tamagui/stacks@npm:1.116.12" 9179 + "@tamagui/stacks@npm:1.123.17": 9180 + version: 1.123.17 9181 + resolution: "@tamagui/stacks@npm:1.123.17" 9086 9182 dependencies: 9087 - "@tamagui/core": "npm:1.116.12" 9183 + "@tamagui/core": "npm:1.123.17" 9088 9184 peerDependencies: 9089 9185 react: "*" 9090 - checksum: 10/eb25c43ae219a880a8b9726501677d3e69351302d8ed97ef7af83a3c668f797025fe45d4f32b11b38f0c4f169f645f46b491463ef237544a5bfa1750833268a1 9186 + checksum: 10/4f5ed86729e1542fb52b451161cbb4764a69443c5395339b83732919601dff4ea5b70a849d7f5e284b80900bd74bdf8df826d8ad6b8f42a13b9b83355853aada 9091 9187 languageName: node 9092 9188 linkType: hard 9093 9189 9094 - "@tamagui/start-transition@npm:1.116.12": 9095 - version: 1.116.12 9096 - resolution: "@tamagui/start-transition@npm:1.116.12" 9097 - dependencies: 9098 - react: "npm:>=18.0.0" 9099 - checksum: 10/eea1215590b515ec973ba7b5f2a6c752be530c75d8c2bf2a08f87a093a35ca3955a2cf5aed6e159b6e3dc450e7a83917be7aeef26645b6fe61282cba34828eb2 9190 + "@tamagui/start-transition@npm:1.123.17": 9191 + version: 1.123.17 9192 + resolution: "@tamagui/start-transition@npm:1.123.17" 9193 + checksum: 10/e5502722856ae03bec9b6af09f6d7c491d1a1abafece5945b6c28805b97e7bd565ad3deeee117fe76cbac52bf77f28c65c7370220db21e54175c4789d2b621b5 9100 9194 languageName: node 9101 9195 linkType: hard 9102 9196 9103 - "@tamagui/static@npm:1.116.12": 9104 - version: 1.116.12 9105 - resolution: "@tamagui/static@npm:1.116.12" 9197 + "@tamagui/static@npm:1.123.17": 9198 + version: 1.123.17 9199 + resolution: "@tamagui/static@npm:1.123.17" 9106 9200 dependencies: 9107 9201 "@babel/core": "npm:^7.25.2" 9108 9202 "@babel/generator": "npm:^7.25.5" ··· 9112 9206 "@babel/runtime": "npm:^7.25.4" 9113 9207 "@babel/traverse": "npm:^7.25.4" 9114 9208 "@babel/types": "npm:^7.25.4" 9115 - "@esbuild-plugins/tsconfig-paths": "npm:^0.1.2" 9116 - "@tamagui/build": "npm:1.116.12" 9117 - "@tamagui/cli-color": "npm:1.116.12" 9118 - "@tamagui/config-default": "npm:1.116.12" 9119 - "@tamagui/core": "npm:1.116.12" 9120 - "@tamagui/fake-react-native": "npm:1.116.12" 9121 - "@tamagui/generate-themes": "npm:1.116.12" 9122 - "@tamagui/helpers": "npm:1.116.12" 9123 - "@tamagui/helpers-node": "npm:1.116.12" 9124 - "@tamagui/proxy-worm": "npm:1.116.12" 9125 - "@tamagui/react-native-web-internals": "npm:1.116.12" 9126 - "@tamagui/react-native-web-lite": "npm:1.116.12" 9127 - "@tamagui/shorthands": "npm:1.116.12" 9128 - "@tamagui/types": "npm:1.116.12" 9209 + "@tamagui/build": "npm:1.123.17" 9210 + "@tamagui/cli-color": "npm:1.123.17" 9211 + "@tamagui/config-default": "npm:1.123.17" 9212 + "@tamagui/core": "npm:1.123.17" 9213 + "@tamagui/fake-react-native": "npm:1.123.17" 9214 + "@tamagui/generate-themes": "npm:1.123.17" 9215 + "@tamagui/helpers": "npm:1.123.17" 9216 + "@tamagui/helpers-node": "npm:1.123.17" 9217 + "@tamagui/proxy-worm": "npm:1.123.17" 9218 + "@tamagui/react-native-web-internals": "npm:1.123.17" 9219 + "@tamagui/react-native-web-lite": "npm:1.123.17" 9220 + "@tamagui/shorthands": "npm:1.123.17" 9221 + "@tamagui/types": "npm:1.123.17" 9129 9222 babel-literal-to-ast: "npm:^2.1.0" 9130 9223 browserslist: "npm:^4.22.2" 9131 9224 check-dependency-version-consistency: "npm:^4.1.0" 9132 - esbuild: "npm:^0.24.0" 9225 + esbuild: "npm:^0.24.2" 9133 9226 esbuild-register: "npm:^3.6.0" 9134 9227 fast-glob: "npm:^3.2.11" 9135 9228 find-cache-dir: "npm:^3.3.2" ··· 9138 9231 invariant: "npm:^2.2.4" 9139 9232 js-yaml: "npm:^4.1.0" 9140 9233 lodash: "npm:^4.17.21" 9141 - react-dom: "npm:>=18.0.0" 9142 - react-native-web: "npm:^0.19.12" 9234 + react-native-web: "npm:^0.19.0" 9143 9235 peerDependencies: 9144 9236 react: "*" 9145 - checksum: 10/73b121d353408355c2fea1c7719b228d18814c85651cdcd535becd898aa4535cebd423189889cd120fa6291c1f312c4b37be62098ee4f0eeb6f87984f719b7d4 9237 + checksum: 10/29fa5dc67f25bb3db0f3a2a31217e36cb04ce575dfcc73ed98756590ae9f4cc7eb33302cbb56ee315e95a814405adb8ef8c8938dd056f3fea4b9998ca7cc95f3 9146 9238 languageName: node 9147 9239 linkType: hard 9148 9240 9149 - "@tamagui/switch-headless@npm:1.116.12": 9150 - version: 1.116.12 9151 - resolution: "@tamagui/switch-headless@npm:1.116.12" 9241 + "@tamagui/switch-headless@npm:1.123.17": 9242 + version: 1.123.17 9243 + resolution: "@tamagui/switch-headless@npm:1.123.17" 9152 9244 dependencies: 9153 - "@tamagui/compose-refs": "npm:1.116.12" 9154 - "@tamagui/constants": "npm:1.116.12" 9155 - "@tamagui/helpers": "npm:1.116.12" 9156 - "@tamagui/label": "npm:1.116.12" 9157 - "@tamagui/use-previous": "npm:1.116.12" 9245 + "@tamagui/compose-refs": "npm:1.123.17" 9246 + "@tamagui/constants": "npm:1.123.17" 9247 + "@tamagui/helpers": "npm:1.123.17" 9248 + "@tamagui/label": "npm:1.123.17" 9249 + "@tamagui/use-previous": "npm:1.123.17" 9158 9250 peerDependencies: 9159 9251 react: "*" 9160 - checksum: 10/f4236ba75cab71f3eb0065c85c2837d7bb247a51569a41956230a4cd40744ce78cf527cb70527d14df475fa51799113b19a2e1a6c2312e0d0f60772668006531 9252 + checksum: 10/c71605b338db2a8f2f3d8bbc761bbbad60fd6fe9a6e439e04a22c135a37d6610aab82e6d72eb8380bc4af7ecd78e62690ef757eacf245ef70e1221cadada5be2 9161 9253 languageName: node 9162 9254 linkType: hard 9163 9255 9164 - "@tamagui/switch@npm:1.116.12": 9165 - version: 1.116.12 9166 - resolution: "@tamagui/switch@npm:1.116.12" 9256 + "@tamagui/switch@npm:1.123.17": 9257 + version: 1.123.17 9258 + resolution: "@tamagui/switch@npm:1.123.17" 9167 9259 dependencies: 9168 - "@tamagui/compose-refs": "npm:1.116.12" 9169 - "@tamagui/constants": "npm:1.116.12" 9170 - "@tamagui/core": "npm:1.116.12" 9171 - "@tamagui/focusable": "npm:1.116.12" 9172 - "@tamagui/get-token": "npm:1.116.12" 9173 - "@tamagui/helpers": "npm:1.116.12" 9174 - "@tamagui/label": "npm:1.116.12" 9175 - "@tamagui/stacks": "npm:1.116.12" 9176 - "@tamagui/switch-headless": "npm:1.116.12" 9177 - "@tamagui/use-controllable-state": "npm:1.116.12" 9178 - "@tamagui/use-previous": "npm:1.116.12" 9260 + "@tamagui/compose-refs": "npm:1.123.17" 9261 + "@tamagui/constants": "npm:1.123.17" 9262 + "@tamagui/core": "npm:1.123.17" 9263 + "@tamagui/focusable": "npm:1.123.17" 9264 + "@tamagui/get-token": "npm:1.123.17" 9265 + "@tamagui/helpers": "npm:1.123.17" 9266 + "@tamagui/label": "npm:1.123.17" 9267 + "@tamagui/stacks": "npm:1.123.17" 9268 + "@tamagui/switch-headless": "npm:1.123.17" 9269 + "@tamagui/use-controllable-state": "npm:1.123.17" 9270 + "@tamagui/use-previous": "npm:1.123.17" 9179 9271 peerDependencies: 9180 9272 react: "*" 9181 - checksum: 10/a67df026cdc74f54f22a65211f577efd25044cb5f10af773df9b086b3ceac4f0a9bc736fcca6975a1129aa8cf96674fb1a0e16856d673f5bf293cec9b6f2988c 9273 + checksum: 10/97d26ed691f984eec916198126fd49792f10a53aa35e6f30faf58be37bedea3bd3db989ab3afffb65c6e9edcf2526d3884d0c1775b7613f653875ae03a8a1b20 9182 9274 languageName: node 9183 9275 linkType: hard 9184 9276 9185 - "@tamagui/tabs@npm:1.116.12": 9186 - version: 1.116.12 9187 - resolution: "@tamagui/tabs@npm:1.116.12" 9277 + "@tamagui/tabs@npm:1.123.17": 9278 + version: 1.123.17 9279 + resolution: "@tamagui/tabs@npm:1.123.17" 9188 9280 dependencies: 9189 - "@tamagui/compose-refs": "npm:1.116.12" 9190 - "@tamagui/constants": "npm:1.116.12" 9191 - "@tamagui/create-context": "npm:1.116.12" 9192 - "@tamagui/get-button-sized": "npm:1.116.12" 9193 - "@tamagui/group": "npm:1.116.12" 9194 - "@tamagui/helpers": "npm:1.116.12" 9195 - "@tamagui/roving-focus": "npm:1.116.12" 9196 - "@tamagui/stacks": "npm:1.116.12" 9197 - "@tamagui/use-controllable-state": "npm:1.116.12" 9198 - "@tamagui/use-direction": "npm:1.116.12" 9199 - "@tamagui/web": "npm:1.116.12" 9281 + "@tamagui/compose-refs": "npm:1.123.17" 9282 + "@tamagui/constants": "npm:1.123.17" 9283 + "@tamagui/create-context": "npm:1.123.17" 9284 + "@tamagui/get-button-sized": "npm:1.123.17" 9285 + "@tamagui/group": "npm:1.123.17" 9286 + "@tamagui/helpers": "npm:1.123.17" 9287 + "@tamagui/roving-focus": "npm:1.123.17" 9288 + "@tamagui/stacks": "npm:1.123.17" 9289 + "@tamagui/use-controllable-state": "npm:1.123.17" 9290 + "@tamagui/use-direction": "npm:1.123.17" 9291 + "@tamagui/web": "npm:1.123.17" 9200 9292 peerDependencies: 9201 9293 react: "*" 9202 - checksum: 10/1bc564835bb8d684d723f2688acc5ea13849bf9cf0a67419556bbce5c0432752091db1191fe2e9a62284bf1920770687e1824e00cb79ad3a219fef7a176bad4f 9294 + checksum: 10/94f91b0fe6af74919eb5a0a693b5d587d6520210a7aacc11489e01d2ebe40a3544b9a6d48579a59d684efb7a4275e2e183b1bbbeb52c839e77b2bf8eaa10a0a5 9203 9295 languageName: node 9204 9296 linkType: hard 9205 9297 9206 - "@tamagui/text@npm:1.116.12": 9207 - version: 1.116.12 9208 - resolution: "@tamagui/text@npm:1.116.12" 9298 + "@tamagui/text@npm:1.123.17": 9299 + version: 1.123.17 9300 + resolution: "@tamagui/text@npm:1.123.17" 9209 9301 dependencies: 9210 - "@tamagui/get-font-sized": "npm:1.116.12" 9211 - "@tamagui/helpers-tamagui": "npm:1.116.12" 9212 - "@tamagui/web": "npm:1.116.12" 9302 + "@tamagui/get-font-sized": "npm:1.123.17" 9303 + "@tamagui/helpers-tamagui": "npm:1.123.17" 9304 + "@tamagui/web": "npm:1.123.17" 9213 9305 peerDependencies: 9214 9306 react: "*" 9215 - checksum: 10/ec98221aef73dddc9411c12e6d95aa5a46cb5d2ad76728fd6b9504246716ce856781565bc0c6a4091191850cdef44b3b265ead30f9cfcf955cec5afc1d741958 9307 + checksum: 10/b3e570fbd002022551ed1e8e93d847a5168fa43516bab780c625549f02edf2dcf3eae0866985bbd4f03132b2626fb5a3aacf1e3b5946b55f738f397b7a00d480 9216 9308 languageName: node 9217 9309 linkType: hard 9218 9310 9219 - "@tamagui/theme-builder@npm:1.116.12": 9220 - version: 1.116.12 9221 - resolution: "@tamagui/theme-builder@npm:1.116.12" 9311 + "@tamagui/theme-builder@npm:1.123.17": 9312 + version: 1.123.17 9313 + resolution: "@tamagui/theme-builder@npm:1.123.17" 9222 9314 dependencies: 9223 - "@tamagui/create-theme": "npm:1.116.12" 9315 + "@tamagui/create-theme": "npm:1.123.17" 9224 9316 color2k: "npm:^2.0.2" 9225 - checksum: 10/f7d853bd472726a76e9aeea23a5d6a6831dbb315d4a18bf9ea92c287a5dfa51e7664746d54ce556a1342ffd34e30148401f1b49685ca2699155f4f7c38ae1a00 9317 + checksum: 10/6146cb6eb9aa1d939975f8c30527d8074c38b8542568a0fc48d3ae42e742e4397e1e5643a76eb6a2e0f50ab3678630cee8501d44494379ad0659fcfc187d4489 9226 9318 languageName: node 9227 9319 linkType: hard 9228 9320 9229 - "@tamagui/theme@npm:1.116.12": 9230 - version: 1.116.12 9231 - resolution: "@tamagui/theme@npm:1.116.12" 9321 + "@tamagui/theme@npm:1.123.17": 9322 + version: 1.123.17 9323 + resolution: "@tamagui/theme@npm:1.123.17" 9232 9324 dependencies: 9233 - "@tamagui/constants": "npm:1.116.12" 9234 - "@tamagui/web": "npm:1.116.12" 9325 + "@tamagui/constants": "npm:1.123.17" 9326 + "@tamagui/web": "npm:1.123.17" 9235 9327 peerDependencies: 9236 9328 react: "*" 9237 - checksum: 10/4c0a83d4dd1f312702e591468babfc5838d0f123d514a47ea4fa64d928742e8c7e7488f1206cd405ac7406fdb71b3aa68e01ab8de30af54638868b7aca6d3eff 9329 + checksum: 10/8e2bbadbf5f1b6ef89fb955647acd01164b635dac220f63109d38203511e4bf73a1420e016d3364d736b7d33bd05748240ba975b4aea8212f4bac3201f149ec9 9238 9330 languageName: node 9239 9331 linkType: hard 9240 9332 9241 - "@tamagui/themes@npm:1.116.12": 9242 - version: 1.116.12 9243 - resolution: "@tamagui/themes@npm:1.116.12" 9333 + "@tamagui/themes@npm:1.123.17": 9334 + version: 1.123.17 9335 + resolution: "@tamagui/themes@npm:1.123.17" 9244 9336 dependencies: 9245 - "@tamagui/colors": "npm:1.116.12" 9246 - "@tamagui/create-theme": "npm:1.116.12" 9247 - "@tamagui/theme-builder": "npm:1.116.12" 9248 - "@tamagui/web": "npm:1.116.12" 9249 - checksum: 10/1857169f48081572a3b044207b95c4642681762af9089e5031cd971ec7ac5858acd93be222c8b376407f496780a3108ce8a9d525a6d9df147b0970511a2415a7 9337 + "@tamagui/colors": "npm:1.123.17" 9338 + "@tamagui/create-theme": "npm:1.123.17" 9339 + "@tamagui/theme-builder": "npm:1.123.17" 9340 + "@tamagui/web": "npm:1.123.17" 9341 + color2k: "npm:^2.0.2" 9342 + checksum: 10/0106c6a3a2d11ee765045d86c17cbdf4d0466e9149a16a6ed9ac9d57a9a1d20dc4762eeae4ef2f1ac41418906258b81fb2488933d49741eaac18560ce6d8ad73 9250 9343 languageName: node 9251 9344 linkType: hard 9252 9345 9253 - "@tamagui/timer@npm:1.116.12": 9254 - version: 1.116.12 9255 - resolution: "@tamagui/timer@npm:1.116.12" 9256 - checksum: 10/f8a50473ebcafeb3d2db2e517f5b8ecff57ced5f493a8b9cb1407d3371185f53eb3877f27f5911bc0e517af7661f22e71577242b994e65475c9800af7c59fd9a 9346 + "@tamagui/timer@npm:1.123.17": 9347 + version: 1.123.17 9348 + resolution: "@tamagui/timer@npm:1.123.17" 9349 + checksum: 10/09f7cedff473e5b5fff7fdf837155f6d47dbffa1aa7ed6e1657afe774a1677fa954cdb2dfe6e1a89969a06afdcf6359747825044c593e3a61184774f2a423e84 9257 9350 languageName: node 9258 9351 linkType: hard 9259 9352 9260 - "@tamagui/toast@npm:^1.116.12": 9261 - version: 1.116.12 9262 - resolution: "@tamagui/toast@npm:1.116.12" 9353 + "@tamagui/toast@npm:^1.123.17": 9354 + version: 1.123.17 9355 + resolution: "@tamagui/toast@npm:1.123.17" 9263 9356 dependencies: 9264 - "@tamagui/animate-presence": "npm:1.116.12" 9265 - "@tamagui/compose-refs": "npm:1.116.12" 9266 - "@tamagui/constants": "npm:1.116.12" 9267 - "@tamagui/core": "npm:1.116.12" 9268 - "@tamagui/create-context": "npm:1.116.12" 9269 - "@tamagui/dismissable": "npm:1.116.12" 9270 - "@tamagui/helpers": "npm:1.116.12" 9271 - "@tamagui/polyfill-dev": "npm:1.116.12" 9272 - "@tamagui/portal": "npm:1.116.12" 9273 - "@tamagui/stacks": "npm:1.116.12" 9274 - "@tamagui/start-transition": "npm:1.116.12" 9275 - "@tamagui/text": "npm:1.116.12" 9276 - "@tamagui/use-controllable-state": "npm:1.116.12" 9277 - "@tamagui/visually-hidden": "npm:1.116.12" 9357 + "@tamagui/animate-presence": "npm:1.123.17" 9358 + "@tamagui/compose-refs": "npm:1.123.17" 9359 + "@tamagui/constants": "npm:1.123.17" 9360 + "@tamagui/core": "npm:1.123.17" 9361 + "@tamagui/create-context": "npm:1.123.17" 9362 + "@tamagui/dismissable": "npm:1.123.17" 9363 + "@tamagui/helpers": "npm:1.123.17" 9364 + "@tamagui/polyfill-dev": "npm:1.123.17" 9365 + "@tamagui/portal": "npm:1.123.17" 9366 + "@tamagui/stacks": "npm:1.123.17" 9367 + "@tamagui/start-transition": "npm:1.123.17" 9368 + "@tamagui/text": "npm:1.123.17" 9369 + "@tamagui/use-controllable-state": "npm:1.123.17" 9370 + "@tamagui/visually-hidden": "npm:1.123.17" 9278 9371 peerDependencies: 9279 9372 react: "*" 9280 - checksum: 10/8961f71fea0241b3c70adb9ababf3513b6b8e634b3c033cc78872f43a976837a318046c67c4a91f2940831e80a0c22af1ca0d98c2094654d9d41caf0383fde24 9373 + checksum: 10/3eac9eb39aaf7bd75d4fa1c91877aca781344b90c5de2d5eb75f37fd687a4ce2bbae766c7869b039c3bf0aa7d57f6e26083e83e8ea96a3a088306b9fbc439472 9281 9374 languageName: node 9282 9375 linkType: hard 9283 9376 9284 - "@tamagui/toggle-group@npm:1.116.12": 9285 - version: 1.116.12 9286 - resolution: "@tamagui/toggle-group@npm:1.116.12" 9377 + "@tamagui/toggle-group@npm:1.123.17": 9378 + version: 1.123.17 9379 + resolution: "@tamagui/toggle-group@npm:1.123.17" 9287 9380 dependencies: 9288 - "@tamagui/constants": "npm:1.116.12" 9289 - "@tamagui/create-context": "npm:1.116.12" 9290 - "@tamagui/focusable": "npm:1.116.12" 9291 - "@tamagui/font-size": "npm:1.116.12" 9292 - "@tamagui/get-token": "npm:1.116.12" 9293 - "@tamagui/group": "npm:1.116.12" 9294 - "@tamagui/helpers": "npm:1.116.12" 9295 - "@tamagui/helpers-tamagui": "npm:1.116.12" 9296 - "@tamagui/roving-focus": "npm:1.116.12" 9297 - "@tamagui/stacks": "npm:1.116.12" 9298 - "@tamagui/use-controllable-state": "npm:1.116.12" 9299 - "@tamagui/use-direction": "npm:1.116.12" 9300 - "@tamagui/web": "npm:1.116.12" 9381 + "@tamagui/constants": "npm:1.123.17" 9382 + "@tamagui/create-context": "npm:1.123.17" 9383 + "@tamagui/focusable": "npm:1.123.17" 9384 + "@tamagui/font-size": "npm:1.123.17" 9385 + "@tamagui/get-token": "npm:1.123.17" 9386 + "@tamagui/group": "npm:1.123.17" 9387 + "@tamagui/helpers": "npm:1.123.17" 9388 + "@tamagui/helpers-tamagui": "npm:1.123.17" 9389 + "@tamagui/roving-focus": "npm:1.123.17" 9390 + "@tamagui/stacks": "npm:1.123.17" 9391 + "@tamagui/use-controllable-state": "npm:1.123.17" 9392 + "@tamagui/use-direction": "npm:1.123.17" 9393 + "@tamagui/web": "npm:1.123.17" 9301 9394 peerDependencies: 9302 9395 react: "*" 9303 - checksum: 10/9c51df8c8ed92616c0acc7ab06c883b32e05c88bd987be0dcb8c44ba76703fce3279673d0a61436620f35be10f08eed78b4d30ff38b123660fe4aa19b0b52f29 9396 + checksum: 10/a9972b786a8e9db5336cd0a1737399d84d8f3a10072fc77b261c99c7a199f5a9c39fc4b01cd9417401f103d3472d439a511966d8eef64d140ccb6a08b6709f0e 9304 9397 languageName: node 9305 9398 linkType: hard 9306 9399 9307 - "@tamagui/tooltip@npm:1.116.12": 9308 - version: 1.116.12 9309 - resolution: "@tamagui/tooltip@npm:1.116.12" 9400 + "@tamagui/tooltip@npm:1.123.17": 9401 + version: 1.123.17 9402 + resolution: "@tamagui/tooltip@npm:1.123.17" 9310 9403 dependencies: 9311 - "@floating-ui/react": "npm:^0.26.24" 9312 - "@tamagui/compose-refs": "npm:1.116.12" 9313 - "@tamagui/core": "npm:1.116.12" 9314 - "@tamagui/create-context": "npm:1.116.12" 9315 - "@tamagui/floating": "npm:1.116.12" 9316 - "@tamagui/get-token": "npm:1.116.12" 9317 - "@tamagui/helpers": "npm:1.116.12" 9318 - "@tamagui/polyfill-dev": "npm:1.116.12" 9319 - "@tamagui/popover": "npm:1.116.12" 9320 - "@tamagui/popper": "npm:1.116.12" 9321 - "@tamagui/stacks": "npm:1.116.12" 9322 - "@tamagui/text": "npm:1.116.12" 9323 - "@tamagui/use-controllable-state": "npm:1.116.12" 9404 + "@floating-ui/react": "npm:^0.27.3" 9405 + "@tamagui/compose-refs": "npm:1.123.17" 9406 + "@tamagui/core": "npm:1.123.17" 9407 + "@tamagui/create-context": "npm:1.123.17" 9408 + "@tamagui/floating": "npm:1.123.17" 9409 + "@tamagui/get-token": "npm:1.123.17" 9410 + "@tamagui/helpers": "npm:1.123.17" 9411 + "@tamagui/polyfill-dev": "npm:1.123.17" 9412 + "@tamagui/popover": "npm:1.123.17" 9413 + "@tamagui/popper": "npm:1.123.17" 9414 + "@tamagui/stacks": "npm:1.123.17" 9415 + "@tamagui/text": "npm:1.123.17" 9416 + "@tamagui/use-controllable-state": "npm:1.123.17" 9324 9417 peerDependencies: 9325 9418 react: "*" 9326 - checksum: 10/f4901e957fe19e9766bb2b4d8e2051cdcf1bf2224c48e3344310e28b93e333f296deb896726a9c9cf9d8ed7ac957d15ba30be669a6efc3ab33c3cd0b6e0e06a9 9419 + checksum: 10/22df4e7baae4cf46e6bb582a2035f2c77993d62b4db8bd85940261061ffd92ce3295272e61bb6fea15c3a187aee1a8c1361a6a468a62e5b3d0545c57c5082d2b 9327 9420 languageName: node 9328 9421 linkType: hard 9329 9422 9330 - "@tamagui/types@npm:1.116.12": 9331 - version: 1.116.12 9332 - resolution: "@tamagui/types@npm:1.116.12" 9333 - checksum: 10/35b616a7c3ee5614f3e385e6840433f6a30049d4a617dd40671b6061c7448d2aa27b2a5548bf76c7b038f5dd2002dbe50a3c5ece941e2204365ff2cbd394f9d1 9423 + "@tamagui/types@npm:1.123.17": 9424 + version: 1.123.17 9425 + resolution: "@tamagui/types@npm:1.123.17" 9426 + checksum: 10/1fff18fea19582f9f681e5600d81678b1086034c402df78545f89f5f2c218f0f056a4153ec03b02bc5ac720faa4bd82d3335b8824214569d3a2830e3c0b4c6fb 9334 9427 languageName: node 9335 9428 linkType: hard 9336 9429 9337 - "@tamagui/use-callback-ref@npm:1.116.12": 9338 - version: 1.116.12 9339 - resolution: "@tamagui/use-callback-ref@npm:1.116.12" 9340 - checksum: 10/1f41d5309f9b25f85471812a2617c66ed44804b1b29389f020cda9e020de2fab0b254616714d0ffd0e2c02ea8c9369ce381da06166823b6667a056cb8bb38065 9430 + "@tamagui/use-callback-ref@npm:1.123.17": 9431 + version: 1.123.17 9432 + resolution: "@tamagui/use-callback-ref@npm:1.123.17" 9433 + checksum: 10/004a39b9b7705119afc22216b3df70fd79a5c042e595220e77a45667f59cbd8d52e95693a5b4f1cb71c7572eb1b28583440001df51893127cc35316a37bb23c6 9341 9434 languageName: node 9342 9435 linkType: hard 9343 9436 9344 - "@tamagui/use-constant@npm:1.116.12": 9345 - version: 1.116.12 9346 - resolution: "@tamagui/use-constant@npm:1.116.12" 9437 + "@tamagui/use-constant@npm:1.123.17": 9438 + version: 1.123.17 9439 + resolution: "@tamagui/use-constant@npm:1.123.17" 9347 9440 peerDependencies: 9348 9441 react: "*" 9349 - checksum: 10/8ac0fe48b5d37be55184bcd4c2a6e800fc964aa8b77b1531aa3e18a2b0a14c807ec8afab7f6960be5b0569a46806679af1e7384d7c08ebe96d79824d347d4468 9442 + checksum: 10/5754c19b6bb041f835800c02598eba9cf58263fb0c4b03596e4b7ec99a12d9a4a9d5b15feaf57089584b1936057086e44bb4420ba9c99236410a1c2be24320f9 9350 9443 languageName: node 9351 9444 linkType: hard 9352 9445 9353 - "@tamagui/use-controllable-state@npm:1.116.12": 9354 - version: 1.116.12 9355 - resolution: "@tamagui/use-controllable-state@npm:1.116.12" 9446 + "@tamagui/use-controllable-state@npm:1.123.17": 9447 + version: 1.123.17 9448 + resolution: "@tamagui/use-controllable-state@npm:1.123.17" 9356 9449 dependencies: 9357 - "@tamagui/start-transition": "npm:1.116.12" 9358 - "@tamagui/use-event": "npm:1.116.12" 9450 + "@tamagui/start-transition": "npm:1.123.17" 9451 + "@tamagui/use-event": "npm:1.123.17" 9359 9452 peerDependencies: 9360 9453 react: "*" 9361 - checksum: 10/9776a9e729ba4dbaacc828a8e45968056140eefc9677dc6e8d93b3937743930842c93b948cb172b4e93e451188df815f93344cf4714306c97998967e4a4a5b87 9454 + checksum: 10/6f3c90cffe1a572e79da5b8ce05e3324724bc4df94ea8fc8103c18512f4299485b3d0a04d25e4c3db9fcf96476c68137c2954075e45d378f3338f6547e96ab1c 9362 9455 languageName: node 9363 9456 linkType: hard 9364 9457 9365 - "@tamagui/use-debounce@npm:1.116.12": 9366 - version: 1.116.12 9367 - resolution: "@tamagui/use-debounce@npm:1.116.12" 9458 + "@tamagui/use-debounce@npm:1.123.17": 9459 + version: 1.123.17 9460 + resolution: "@tamagui/use-debounce@npm:1.123.17" 9368 9461 peerDependencies: 9369 9462 react: "*" 9370 - checksum: 10/efe0b417ca7f13534b0ead9f5cf7599fb81ce34caa165258d8888117573deb49eb72f79553677fc4280358e39e5eeb47ccf6a70443f6a715c84b3f46ad8054ec 9463 + checksum: 10/3242b9669c802c561a37f23f215c31da7accdec9d2d33ce5f7c8ce2b54fdf182ca81c5d1c12ea5f117a38a679af5f63b718be96bea3574c1b522591bb796bac7 9371 9464 languageName: node 9372 9465 linkType: hard 9373 9466 9374 - "@tamagui/use-did-finish-ssr@npm:1.116.12": 9375 - version: 1.116.12 9376 - resolution: "@tamagui/use-did-finish-ssr@npm:1.116.12" 9467 + "@tamagui/use-did-finish-ssr@npm:1.123.17": 9468 + version: 1.123.17 9469 + resolution: "@tamagui/use-did-finish-ssr@npm:1.123.17" 9377 9470 peerDependencies: 9378 9471 react: "*" 9379 - checksum: 10/b07d7a75c855de395bb1e1cab78979993c3037811d9e297ec677174de4ba9947d193e971f0bc78f074b2d1865deaebb7cbc7d8e17f166863e1ea3f113fa00b0f 9472 + checksum: 10/44ac769fd278c1a316994ede26b730237b7a18bd66c4205c7def6fee154a04d5c730dd6a9167bbf4c72f5381744be6846a62906e7cc26dba88c273f5920d0f79 9380 9473 languageName: node 9381 9474 linkType: hard 9382 9475 9383 - "@tamagui/use-direction@npm:1.116.12": 9384 - version: 1.116.12 9385 - resolution: "@tamagui/use-direction@npm:1.116.12" 9476 + "@tamagui/use-direction@npm:1.123.17": 9477 + version: 1.123.17 9478 + resolution: "@tamagui/use-direction@npm:1.123.17" 9386 9479 peerDependencies: 9387 9480 react: "*" 9388 - checksum: 10/6ce14798cd230f0630949c9b36823058ee6eb7377ec99b226486888a0ccdeeb62ea4f9558eb53a7153e47d07513745c0fce61b684552f6e7525aa2144e0a02dd 9481 + checksum: 10/ac1060f560ea4f981958d2952e01907a335d588d57ebec6bf5b489d8063e52844e0abe214a9e3296d1fc7195b93ec894476a7c6cea7975a5569c704ad22a88d3 9389 9482 languageName: node 9390 9483 linkType: hard 9391 9484 9392 - "@tamagui/use-escape-keydown@npm:1.116.12": 9393 - version: 1.116.12 9394 - resolution: "@tamagui/use-escape-keydown@npm:1.116.12" 9485 + "@tamagui/use-escape-keydown@npm:1.123.17": 9486 + version: 1.123.17 9487 + resolution: "@tamagui/use-escape-keydown@npm:1.123.17" 9395 9488 dependencies: 9396 - "@tamagui/use-callback-ref": "npm:1.116.12" 9397 - checksum: 10/be51a73f2c8fcf962cceb37386b58ee66e8a217d12ce926a02909d6317fc7fb809d83cb9c539c7a767dc1fec690c34904fda05ab8fd7fcd6d307b55a3c2f0d8c 9489 + "@tamagui/use-callback-ref": "npm:1.123.17" 9490 + checksum: 10/385f247edb93c509d3d9ede83bb4a3b526ee8080968a5ade4ada05c4ad975d3b70623c942e1a4c8d0295190dab4f1260af69b073127b7b0531336d7c60c38232 9398 9491 languageName: node 9399 9492 linkType: hard 9400 9493 9401 - "@tamagui/use-event@npm:1.116.12": 9402 - version: 1.116.12 9403 - resolution: "@tamagui/use-event@npm:1.116.12" 9494 + "@tamagui/use-event@npm:1.123.17": 9495 + version: 1.123.17 9496 + resolution: "@tamagui/use-event@npm:1.123.17" 9404 9497 dependencies: 9405 - "@tamagui/constants": "npm:1.116.12" 9498 + "@tamagui/constants": "npm:1.123.17" 9406 9499 peerDependencies: 9407 9500 react: "*" 9408 - checksum: 10/6e4d598163ffcd7e6f6cf7b22172cd8f61ebf5e766635dda884964ed888581b7566591ce11e3177a6b45b148e2cc6b1a5cc004378d00323bec5380fd9ef1517f 9501 + checksum: 10/0d26bc3ed9e0862bac07af76b4e98357471daeefce0a9a3170965e14fdc69994297e8ee7080d7eeef5444a502558386cd94c3052a46cd044c831d35a1558fda3 9409 9502 languageName: node 9410 9503 linkType: hard 9411 9504 9412 - "@tamagui/use-force-update@npm:1.116.12": 9413 - version: 1.116.12 9414 - resolution: "@tamagui/use-force-update@npm:1.116.12" 9505 + "@tamagui/use-force-update@npm:1.123.17": 9506 + version: 1.123.17 9507 + resolution: "@tamagui/use-force-update@npm:1.123.17" 9415 9508 peerDependencies: 9416 9509 react: "*" 9417 - checksum: 10/ad675ecb01ecb0b99590c9a696172f5362a199d4777e00fd1e03bd29b41ccfad6ef017a323a096c3f960b5f5ac37392623a609e17d0250b9db6ffe44adb70d0d 9510 + checksum: 10/eb75e01bf2e75d1d8fe03f9fc965a68b543b98bead5545b13c7d87d501e85c80d95746e31f82f37b594588d5d49c6bc61b08c6bccc408ffa313a443baa429701 9418 9511 languageName: node 9419 9512 linkType: hard 9420 9513 9421 - "@tamagui/use-keyboard-visible@npm:1.116.12": 9422 - version: 1.116.12 9423 - resolution: "@tamagui/use-keyboard-visible@npm:1.116.12" 9514 + "@tamagui/use-keyboard-visible@npm:1.123.17": 9515 + version: 1.123.17 9516 + resolution: "@tamagui/use-keyboard-visible@npm:1.123.17" 9424 9517 peerDependencies: 9425 9518 react: "*" 9426 - checksum: 10/2d6760b56fd4402f8ce136142ded25af4c10a21c875a2052148f9d24c7c8f3092d32d60c0c318d67117802ef2897ae5972141a890b87f2e36ae7b1a270f96dc3 9519 + checksum: 10/bb2c0619cc2cb5f32fbc9c4d18118b7ecc5507838459fecb24db68448f7587603ca437391076722721bd5488b9267d5ce0dfee285ea61403457542d264e5962b 9427 9520 languageName: node 9428 9521 linkType: hard 9429 9522 9430 - "@tamagui/use-presence@npm:1.116.12": 9431 - version: 1.116.12 9432 - resolution: "@tamagui/use-presence@npm:1.116.12" 9523 + "@tamagui/use-presence@npm:1.123.17": 9524 + version: 1.123.17 9525 + resolution: "@tamagui/use-presence@npm:1.123.17" 9433 9526 dependencies: 9434 - "@tamagui/web": "npm:1.116.12" 9527 + "@tamagui/web": "npm:1.123.17" 9435 9528 peerDependencies: 9436 9529 react: "*" 9437 - checksum: 10/34a10ec7b7d595c9904a51bc7f05f8388446d4034b7f618db536871867324a285ea8e0a65413c5ad1e24f18688ac93003ae295e04a154e9489e54f0104c298b5 9530 + checksum: 10/463b8c3e2ffab7d0525cbf5f2e3ee0b60cfd47df601e327b523fe85bbd90b1c1cfaa691a781aef5cddd67f87caf51900a37d5bdc1168a0c58e1de4750f9da7e8 9438 9531 languageName: node 9439 9532 linkType: hard 9440 9533 9441 - "@tamagui/use-previous@npm:1.116.12": 9442 - version: 1.116.12 9443 - resolution: "@tamagui/use-previous@npm:1.116.12" 9444 - checksum: 10/8edd56a2ee0f11736e568ee561ca920521414c5bf1c50b88ea43e70197aea316fb784da915b446f697f3de486b9e7301c4ef3f5dc0cb208a57a3e990580cd1ce 9534 + "@tamagui/use-previous@npm:1.123.17": 9535 + version: 1.123.17 9536 + resolution: "@tamagui/use-previous@npm:1.123.17" 9537 + checksum: 10/3e386e25ca2f6833e62ee59661fcdd7ee91338ca8b7360776f331b7371bb62175b9bd725dce5765a694b4ca8ee7bedd21468e880ca09ffb5e315a8ad41dc4d20 9445 9538 languageName: node 9446 9539 linkType: hard 9447 9540 9448 - "@tamagui/use-window-dimensions@npm:1.116.12": 9449 - version: 1.116.12 9450 - resolution: "@tamagui/use-window-dimensions@npm:1.116.12" 9541 + "@tamagui/use-window-dimensions@npm:1.123.17": 9542 + version: 1.123.17 9543 + resolution: "@tamagui/use-window-dimensions@npm:1.123.17" 9451 9544 dependencies: 9452 - "@tamagui/constants": "npm:1.116.12" 9545 + "@tamagui/constants": "npm:1.123.17" 9453 9546 peerDependencies: 9454 9547 react: "*" 9455 - checksum: 10/71170efe0b42b3b41bc857be09ce9c28dbfcc26191362bf375c385ff41ae80de1d95a52c87ecdced3b554d320a4a91a3375f1440aec25a3e9c7a46011195cf1c 9548 + checksum: 10/bb47ce40b4f6477d8cfd45901dac79e8e3d48af30f4769878957a5d33216db81b25c6d932bf9d72b69ecfd71f9c38399204c98843671a6501b1bd8f0d72b0473 9456 9549 languageName: node 9457 9550 linkType: hard 9458 9551 9459 - "@tamagui/visually-hidden@npm:1.116.12": 9460 - version: 1.116.12 9461 - resolution: "@tamagui/visually-hidden@npm:1.116.12" 9552 + "@tamagui/visually-hidden@npm:1.123.17": 9553 + version: 1.123.17 9554 + resolution: "@tamagui/visually-hidden@npm:1.123.17" 9462 9555 dependencies: 9463 - "@tamagui/web": "npm:1.116.12" 9556 + "@tamagui/web": "npm:1.123.17" 9464 9557 peerDependencies: 9465 9558 react: "*" 9466 - checksum: 10/966019ec57c10899052fbf54a6a6d8ac7a8d61da695188f99a5957df891628c36d264168b2b15d3768313b1f9dd86ef6e69f08b198ee70b4233a4591e60936a1 9559 + checksum: 10/2940e160aacc8d0237c9c6c64c71486346707de4b8d70362220077ea5743fee63d8cf53e372e2a5e9ae5e49147d954315a7f2584c8a0be1b356797f93a848cfa 9467 9560 languageName: node 9468 9561 linkType: hard 9469 9562 9470 - "@tamagui/web@npm:1.116.12": 9471 - version: 1.116.12 9472 - resolution: "@tamagui/web@npm:1.116.12" 9563 + "@tamagui/web@npm:1.123.17": 9564 + version: 1.123.17 9565 + resolution: "@tamagui/web@npm:1.123.17" 9473 9566 dependencies: 9474 - "@tamagui/compose-refs": "npm:1.116.12" 9475 - "@tamagui/constants": "npm:1.116.12" 9476 - "@tamagui/helpers": "npm:1.116.12" 9477 - "@tamagui/normalize-css-color": "npm:1.116.12" 9478 - "@tamagui/timer": "npm:1.116.12" 9479 - "@tamagui/types": "npm:1.116.12" 9480 - "@tamagui/use-did-finish-ssr": "npm:1.116.12" 9481 - "@tamagui/use-event": "npm:1.116.12" 9482 - "@tamagui/use-force-update": "npm:1.116.12" 9483 - react: "npm:>=18.0.0" 9484 - react-dom: "npm:>=18.0.0" 9485 - checksum: 10/e39efcf242c2adc78a3e08b34f3f76a7409542a4fb6c7b88c3dfeb6aa5db3ccb228bb2f33d3509e3c7d003ec58e38fc63bedde68775071bf4eeb028ca923b3f2 9567 + "@tamagui/compose-refs": "npm:1.123.17" 9568 + "@tamagui/constants": "npm:1.123.17" 9569 + "@tamagui/helpers": "npm:1.123.17" 9570 + "@tamagui/normalize-css-color": "npm:1.123.17" 9571 + "@tamagui/timer": "npm:1.123.17" 9572 + "@tamagui/types": "npm:1.123.17" 9573 + "@tamagui/use-did-finish-ssr": "npm:1.123.17" 9574 + "@tamagui/use-event": "npm:1.123.17" 9575 + "@tamagui/use-force-update": "npm:1.123.17" 9576 + peerDependencies: 9577 + react: "*" 9578 + react-dom: "*" 9579 + checksum: 10/eb6ea4a32d3d90f1600306f2d52a511e0a0b8464c26bfd8bc2a70509663705cac7852efe2c664cd3a3d1882a993a54df962cc0a5d9f0fe6edc981d4226bc3b17 9486 9580 languageName: node 9487 9581 linkType: hard 9488 9582 ··· 9508 9602 version: 2.0.0 9509 9603 resolution: "@tootallnate/once@npm:2.0.0" 9510 9604 checksum: 10/ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 9605 + languageName: node 9606 + linkType: hard 9607 + 9608 + "@ts-morph/common@npm:~0.17.0": 9609 + version: 0.17.0 9610 + resolution: "@ts-morph/common@npm:0.17.0" 9611 + dependencies: 9612 + fast-glob: "npm:^3.2.11" 9613 + minimatch: "npm:^5.1.0" 9614 + mkdirp: "npm:^1.0.4" 9615 + path-browserify: "npm:^1.0.1" 9616 + checksum: 10/f27442601b982b0230ab9d0f4245c058e808ef0d09197d724e9ce630b81fde0884c7e7d2370a93205ed2e72202254996c8ea6ed81de4f77ff856ccd02f438fe0 9511 9617 languageName: node 9512 9618 linkType: hard 9513 9619 ··· 11770 11876 languageName: node 11771 11877 linkType: hard 11772 11878 11773 - "babel-plugin-tester@npm:^11.0.4": 11774 - version: 11.0.4 11775 - resolution: "babel-plugin-tester@npm:11.0.4" 11776 - dependencies: 11777 - core-js: "npm:^3.27.2" 11778 - debug: "npm:^4.3.4" 11779 - lodash.mergewith: "npm:^4.6.2" 11780 - prettier: "npm:^2.8.3" 11781 - strip-indent: "npm:^3.0.0" 11782 - peerDependencies: 11783 - "@babel/core": ">=7.11.6" 11784 - checksum: 10/e1550fb99903254c9e83e692056898a78e9a2a25636510e12488ff2a2c52d3ad448a569d90724d233fdda0ee23ae41d5f58320b5a8afaf15eef17be07dfaf1fb 11785 - languageName: node 11786 - linkType: hard 11787 - 11788 11879 "babel-plugin-transform-flow-enums@npm:^0.0.2": 11789 11880 version: 0.0.2 11790 11881 resolution: "babel-plugin-transform-flow-enums@npm:0.0.2" ··· 12883 12974 languageName: node 12884 12975 linkType: hard 12885 12976 12977 + "code-block-writer@npm:^11.0.3": 12978 + version: 11.0.3 12979 + resolution: "code-block-writer@npm:11.0.3" 12980 + checksum: 10/aecf33ec312c595164bb0f6fd6d92d1b7bada83352b787e033ae0e5a15c87146503ca68a258ab7f54cba1b46dc381271c1e0037a3b0869c9c6d57ef5d7bc3501 12981 + languageName: node 12982 + linkType: hard 12983 + 12886 12984 "color-convert@npm:^1.9.0": 12887 12985 version: 1.9.3 12888 12986 resolution: "color-convert@npm:1.9.3" ··· 13314 13412 languageName: node 13315 13413 linkType: hard 13316 13414 13317 - "core-js@npm:^3.27.2": 13318 - version: 3.37.1 13319 - resolution: "core-js@npm:3.37.1" 13320 - checksum: 10/25d6bd15fcc6ffd2a0ec0be57a78ff3358b3e1fdffdb6800fc93dcfdb3854037aee41f3d101aed8c37905d107daf98218b3e7ee95cec383710d2a66a5d9e541b 13321 - languageName: node 13322 - linkType: hard 13323 - 13324 13415 "core-util-is@npm:~1.0.0": 13325 13416 version: 1.0.3 13326 13417 resolution: "core-util-is@npm:1.0.3" ··· 13699 13790 languageName: node 13700 13791 linkType: hard 13701 13792 13793 + "debug@npm:^4.3.7": 13794 + version: 4.4.0 13795 + resolution: "debug@npm:4.4.0" 13796 + dependencies: 13797 + ms: "npm:^2.1.3" 13798 + peerDependenciesMeta: 13799 + supports-color: 13800 + optional: true 13801 + checksum: 10/1847944c2e3c2c732514b93d11886575625686056cd765336212dc15de2d2b29612b6cd80e1afba767bb8e1803b778caf9973e98169ef1a24a7a7009e1820367 13802 + languageName: node 13803 + linkType: hard 13804 + 13702 13805 "debug@npm:~4.3.1, debug@npm:~4.3.2": 13703 13806 version: 4.3.6 13704 13807 resolution: "debug@npm:4.3.6" ··· 14723 14826 languageName: node 14724 14827 linkType: hard 14725 14828 14726 - "esbuild@npm:^0.24.0": 14727 - version: 0.24.0 14728 - resolution: "esbuild@npm:0.24.0" 14829 + "esbuild@npm:^0.24.2": 14830 + version: 0.24.2 14831 + resolution: "esbuild@npm:0.24.2" 14729 14832 dependencies: 14730 - "@esbuild/aix-ppc64": "npm:0.24.0" 14731 - "@esbuild/android-arm": "npm:0.24.0" 14732 - "@esbuild/android-arm64": "npm:0.24.0" 14733 - "@esbuild/android-x64": "npm:0.24.0" 14734 - "@esbuild/darwin-arm64": "npm:0.24.0" 14735 - "@esbuild/darwin-x64": "npm:0.24.0" 14736 - "@esbuild/freebsd-arm64": "npm:0.24.0" 14737 - "@esbuild/freebsd-x64": "npm:0.24.0" 14738 - "@esbuild/linux-arm": "npm:0.24.0" 14739 - "@esbuild/linux-arm64": "npm:0.24.0" 14740 - "@esbuild/linux-ia32": "npm:0.24.0" 14741 - "@esbuild/linux-loong64": "npm:0.24.0" 14742 - "@esbuild/linux-mips64el": "npm:0.24.0" 14743 - "@esbuild/linux-ppc64": "npm:0.24.0" 14744 - "@esbuild/linux-riscv64": "npm:0.24.0" 14745 - "@esbuild/linux-s390x": "npm:0.24.0" 14746 - "@esbuild/linux-x64": "npm:0.24.0" 14747 - "@esbuild/netbsd-x64": "npm:0.24.0" 14748 - "@esbuild/openbsd-arm64": "npm:0.24.0" 14749 - "@esbuild/openbsd-x64": "npm:0.24.0" 14750 - "@esbuild/sunos-x64": "npm:0.24.0" 14751 - "@esbuild/win32-arm64": "npm:0.24.0" 14752 - "@esbuild/win32-ia32": "npm:0.24.0" 14753 - "@esbuild/win32-x64": "npm:0.24.0" 14833 + "@esbuild/aix-ppc64": "npm:0.24.2" 14834 + "@esbuild/android-arm": "npm:0.24.2" 14835 + "@esbuild/android-arm64": "npm:0.24.2" 14836 + "@esbuild/android-x64": "npm:0.24.2" 14837 + "@esbuild/darwin-arm64": "npm:0.24.2" 14838 + "@esbuild/darwin-x64": "npm:0.24.2" 14839 + "@esbuild/freebsd-arm64": "npm:0.24.2" 14840 + "@esbuild/freebsd-x64": "npm:0.24.2" 14841 + "@esbuild/linux-arm": "npm:0.24.2" 14842 + "@esbuild/linux-arm64": "npm:0.24.2" 14843 + "@esbuild/linux-ia32": "npm:0.24.2" 14844 + "@esbuild/linux-loong64": "npm:0.24.2" 14845 + "@esbuild/linux-mips64el": "npm:0.24.2" 14846 + "@esbuild/linux-ppc64": "npm:0.24.2" 14847 + "@esbuild/linux-riscv64": "npm:0.24.2" 14848 + "@esbuild/linux-s390x": "npm:0.24.2" 14849 + "@esbuild/linux-x64": "npm:0.24.2" 14850 + "@esbuild/netbsd-arm64": "npm:0.24.2" 14851 + "@esbuild/netbsd-x64": "npm:0.24.2" 14852 + "@esbuild/openbsd-arm64": "npm:0.24.2" 14853 + "@esbuild/openbsd-x64": "npm:0.24.2" 14854 + "@esbuild/sunos-x64": "npm:0.24.2" 14855 + "@esbuild/win32-arm64": "npm:0.24.2" 14856 + "@esbuild/win32-ia32": "npm:0.24.2" 14857 + "@esbuild/win32-x64": "npm:0.24.2" 14754 14858 dependenciesMeta: 14755 14859 "@esbuild/aix-ppc64": 14756 14860 optional: true ··· 14786 14890 optional: true 14787 14891 "@esbuild/linux-x64": 14788 14892 optional: true 14893 + "@esbuild/netbsd-arm64": 14894 + optional: true 14789 14895 "@esbuild/netbsd-x64": 14790 14896 optional: true 14791 14897 "@esbuild/openbsd-arm64": ··· 14802 14908 optional: true 14803 14909 bin: 14804 14910 esbuild: bin/esbuild 14805 - checksum: 10/500f83a1216d6548053007b85c070d8293395db344605b17418c6cf1217e5e8d338fa77fc8af27c23faa121c5528e5b0004d46d3a0cdeb87d48f1b5fa0164bc5 14911 + checksum: 10/95425071c9f24ff88bf61e0710b636ec0eb24ddf8bd1f7e1edef3044e1221104bbfa7bbb31c18018c8c36fa7902c5c0b843f829b981ebc89160cf5eebdaa58f4 14806 14912 languageName: node 14807 14913 linkType: hard 14808 14914 ··· 19320 19426 languageName: node 19321 19427 linkType: hard 19322 19428 19323 - "lightningcss-darwin-arm64@npm:1.22.0": 19324 - version: 1.22.0 19325 - resolution: "lightningcss-darwin-arm64@npm:1.22.0" 19326 - conditions: os=darwin & cpu=arm64 19327 - languageName: node 19328 - linkType: hard 19329 - 19330 19429 "lightningcss-darwin-arm64@npm:1.27.0": 19331 19430 version: 1.27.0 19332 19431 resolution: "lightningcss-darwin-arm64@npm:1.27.0" ··· 19334 19433 languageName: node 19335 19434 linkType: hard 19336 19435 19337 - "lightningcss-darwin-x64@npm:1.22.0": 19338 - version: 1.22.0 19339 - resolution: "lightningcss-darwin-x64@npm:1.22.0" 19340 - conditions: os=darwin & cpu=x64 19436 + "lightningcss-darwin-arm64@npm:1.29.1": 19437 + version: 1.29.1 19438 + resolution: "lightningcss-darwin-arm64@npm:1.29.1" 19439 + conditions: os=darwin & cpu=arm64 19341 19440 languageName: node 19342 19441 linkType: hard 19343 19442 ··· 19348 19447 languageName: node 19349 19448 linkType: hard 19350 19449 19351 - "lightningcss-freebsd-x64@npm:1.22.0": 19352 - version: 1.22.0 19353 - resolution: "lightningcss-freebsd-x64@npm:1.22.0" 19354 - conditions: os=freebsd & cpu=x64 19450 + "lightningcss-darwin-x64@npm:1.29.1": 19451 + version: 1.29.1 19452 + resolution: "lightningcss-darwin-x64@npm:1.29.1" 19453 + conditions: os=darwin & cpu=x64 19355 19454 languageName: node 19356 19455 linkType: hard 19357 19456 ··· 19362 19461 languageName: node 19363 19462 linkType: hard 19364 19463 19365 - "lightningcss-linux-arm-gnueabihf@npm:1.22.0": 19366 - version: 1.22.0 19367 - resolution: "lightningcss-linux-arm-gnueabihf@npm:1.22.0" 19368 - conditions: os=linux & cpu=arm 19464 + "lightningcss-freebsd-x64@npm:1.29.1": 19465 + version: 1.29.1 19466 + resolution: "lightningcss-freebsd-x64@npm:1.29.1" 19467 + conditions: os=freebsd & cpu=x64 19369 19468 languageName: node 19370 19469 linkType: hard 19371 19470 ··· 19376 19475 languageName: node 19377 19476 linkType: hard 19378 19477 19379 - "lightningcss-linux-arm64-gnu@npm:1.22.0": 19380 - version: 1.22.0 19381 - resolution: "lightningcss-linux-arm64-gnu@npm:1.22.0" 19382 - conditions: os=linux & cpu=arm64 & libc=glibc 19478 + "lightningcss-linux-arm-gnueabihf@npm:1.29.1": 19479 + version: 1.29.1 19480 + resolution: "lightningcss-linux-arm-gnueabihf@npm:1.29.1" 19481 + conditions: os=linux & cpu=arm 19383 19482 languageName: node 19384 19483 linkType: hard 19385 19484 ··· 19390 19489 languageName: node 19391 19490 linkType: hard 19392 19491 19393 - "lightningcss-linux-arm64-musl@npm:1.22.0": 19394 - version: 1.22.0 19395 - resolution: "lightningcss-linux-arm64-musl@npm:1.22.0" 19396 - conditions: os=linux & cpu=arm64 & libc=musl 19492 + "lightningcss-linux-arm64-gnu@npm:1.29.1": 19493 + version: 1.29.1 19494 + resolution: "lightningcss-linux-arm64-gnu@npm:1.29.1" 19495 + conditions: os=linux & cpu=arm64 & libc=glibc 19397 19496 languageName: node 19398 19497 linkType: hard 19399 19498 ··· 19404 19503 languageName: node 19405 19504 linkType: hard 19406 19505 19407 - "lightningcss-linux-x64-gnu@npm:1.22.0": 19408 - version: 1.22.0 19409 - resolution: "lightningcss-linux-x64-gnu@npm:1.22.0" 19410 - conditions: os=linux & cpu=x64 & libc=glibc 19506 + "lightningcss-linux-arm64-musl@npm:1.29.1": 19507 + version: 1.29.1 19508 + resolution: "lightningcss-linux-arm64-musl@npm:1.29.1" 19509 + conditions: os=linux & cpu=arm64 & libc=musl 19411 19510 languageName: node 19412 19511 linkType: hard 19413 19512 ··· 19418 19517 languageName: node 19419 19518 linkType: hard 19420 19519 19421 - "lightningcss-linux-x64-musl@npm:1.22.0": 19422 - version: 1.22.0 19423 - resolution: "lightningcss-linux-x64-musl@npm:1.22.0" 19424 - conditions: os=linux & cpu=x64 & libc=musl 19520 + "lightningcss-linux-x64-gnu@npm:1.29.1": 19521 + version: 1.29.1 19522 + resolution: "lightningcss-linux-x64-gnu@npm:1.29.1" 19523 + conditions: os=linux & cpu=x64 & libc=glibc 19425 19524 languageName: node 19426 19525 linkType: hard 19427 19526 ··· 19432 19531 languageName: node 19433 19532 linkType: hard 19434 19533 19534 + "lightningcss-linux-x64-musl@npm:1.29.1": 19535 + version: 1.29.1 19536 + resolution: "lightningcss-linux-x64-musl@npm:1.29.1" 19537 + conditions: os=linux & cpu=x64 & libc=musl 19538 + languageName: node 19539 + linkType: hard 19540 + 19435 19541 "lightningcss-win32-arm64-msvc@npm:1.27.0": 19436 19542 version: 1.27.0 19437 19543 resolution: "lightningcss-win32-arm64-msvc@npm:1.27.0" ··· 19439 19545 languageName: node 19440 19546 linkType: hard 19441 19547 19442 - "lightningcss-win32-x64-msvc@npm:1.22.0": 19443 - version: 1.22.0 19444 - resolution: "lightningcss-win32-x64-msvc@npm:1.22.0" 19445 - conditions: os=win32 & cpu=x64 19548 + "lightningcss-win32-arm64-msvc@npm:1.29.1": 19549 + version: 1.29.1 19550 + resolution: "lightningcss-win32-arm64-msvc@npm:1.29.1" 19551 + conditions: os=win32 & cpu=arm64 19446 19552 languageName: node 19447 19553 linkType: hard 19448 19554 ··· 19453 19559 languageName: node 19454 19560 linkType: hard 19455 19561 19456 - "lightningcss@npm:1.22.0": 19457 - version: 1.22.0 19458 - resolution: "lightningcss@npm:1.22.0" 19562 + "lightningcss-win32-x64-msvc@npm:1.29.1": 19563 + version: 1.29.1 19564 + resolution: "lightningcss-win32-x64-msvc@npm:1.29.1" 19565 + conditions: os=win32 & cpu=x64 19566 + languageName: node 19567 + linkType: hard 19568 + 19569 + "lightningcss@npm:^1.27.0": 19570 + version: 1.29.1 19571 + resolution: "lightningcss@npm:1.29.1" 19459 19572 dependencies: 19460 19573 detect-libc: "npm:^1.0.3" 19461 - lightningcss-darwin-arm64: "npm:1.22.0" 19462 - lightningcss-darwin-x64: "npm:1.22.0" 19463 - lightningcss-freebsd-x64: "npm:1.22.0" 19464 - lightningcss-linux-arm-gnueabihf: "npm:1.22.0" 19465 - lightningcss-linux-arm64-gnu: "npm:1.22.0" 19466 - lightningcss-linux-arm64-musl: "npm:1.22.0" 19467 - lightningcss-linux-x64-gnu: "npm:1.22.0" 19468 - lightningcss-linux-x64-musl: "npm:1.22.0" 19469 - lightningcss-win32-x64-msvc: "npm:1.22.0" 19574 + lightningcss-darwin-arm64: "npm:1.29.1" 19575 + lightningcss-darwin-x64: "npm:1.29.1" 19576 + lightningcss-freebsd-x64: "npm:1.29.1" 19577 + lightningcss-linux-arm-gnueabihf: "npm:1.29.1" 19578 + lightningcss-linux-arm64-gnu: "npm:1.29.1" 19579 + lightningcss-linux-arm64-musl: "npm:1.29.1" 19580 + lightningcss-linux-x64-gnu: "npm:1.29.1" 19581 + lightningcss-linux-x64-musl: "npm:1.29.1" 19582 + lightningcss-win32-arm64-msvc: "npm:1.29.1" 19583 + lightningcss-win32-x64-msvc: "npm:1.29.1" 19470 19584 dependenciesMeta: 19471 19585 lightningcss-darwin-arm64: 19472 19586 optional: true ··· 19484 19598 optional: true 19485 19599 lightningcss-linux-x64-musl: 19486 19600 optional: true 19601 + lightningcss-win32-arm64-msvc: 19602 + optional: true 19487 19603 lightningcss-win32-x64-msvc: 19488 19604 optional: true 19489 - checksum: 10/4a5917ba7b976c1adc3c83dd69eddc532b25647a4047f2ba480967adc2781f5bb44044f5eb91dc31d73b4a0d9e18f13f81780a223f30c37f9400a4344c51ba73 19605 + checksum: 10/c6428a695ca985fa28ea899eb72471e0c6a71715291cb62f938b038596a971b6b22d83415d882dec27841169b1b773989b16df173f5ce9075c3fdc22ff764cff 19490 19606 languageName: node 19491 19607 linkType: hard 19492 19608 ··· 19858 19974 languageName: node 19859 19975 linkType: hard 19860 19976 19861 - "lodash.mergewith@npm:^4.6.2": 19862 - version: 4.6.2 19863 - resolution: "lodash.mergewith@npm:4.6.2" 19864 - checksum: 10/aea75a4492541a4902ac7e551dc6c54b722da0c187f84385d02e8fc33a7ae3454b837822446e5f63fcd5ad1671534ea408740b776670ea4d9c7890b10105fce0 19865 - languageName: node 19866 - linkType: hard 19867 - 19868 19977 "lodash.once@npm:^4.0.0": 19869 19978 version: 4.1.1 19870 19979 resolution: "lodash.once@npm:4.1.1" ··· 20915 21024 languageName: node 20916 21025 linkType: hard 20917 21026 20918 - "minimatch@npm:^5.0.1": 21027 + "minimatch@npm:^5.0.1, minimatch@npm:^5.1.0": 20919 21028 version: 5.1.6 20920 21029 resolution: "minimatch@npm:5.1.6" 20921 21030 dependencies: ··· 22217 22326 typescript: 22218 22327 optional: true 22219 22328 checksum: 10/cba00f13289599ff03cee3dbc19167c1d0f01829379d119f962b4e951ee2bf0d14491c7a45974e6a2a745117b13b22e9e4131d285e1f5247ea4e1cbc43c5c3d8 22329 + languageName: node 22330 + linkType: hard 22331 + 22332 + "oxc-transform@npm:^0.47.1": 22333 + version: 0.47.1 22334 + resolution: "oxc-transform@npm:0.47.1" 22335 + dependencies: 22336 + "@oxc-transform/binding-darwin-arm64": "npm:0.47.1" 22337 + "@oxc-transform/binding-darwin-x64": "npm:0.47.1" 22338 + "@oxc-transform/binding-linux-arm64-gnu": "npm:0.47.1" 22339 + "@oxc-transform/binding-linux-arm64-musl": "npm:0.47.1" 22340 + "@oxc-transform/binding-linux-x64-gnu": "npm:0.47.1" 22341 + "@oxc-transform/binding-linux-x64-musl": "npm:0.47.1" 22342 + "@oxc-transform/binding-win32-arm64-msvc": "npm:0.47.1" 22343 + "@oxc-transform/binding-win32-x64-msvc": "npm:0.47.1" 22344 + dependenciesMeta: 22345 + "@oxc-transform/binding-darwin-arm64": 22346 + optional: true 22347 + "@oxc-transform/binding-darwin-x64": 22348 + optional: true 22349 + "@oxc-transform/binding-linux-arm64-gnu": 22350 + optional: true 22351 + "@oxc-transform/binding-linux-arm64-musl": 22352 + optional: true 22353 + "@oxc-transform/binding-linux-x64-gnu": 22354 + optional: true 22355 + "@oxc-transform/binding-linux-x64-musl": 22356 + optional: true 22357 + "@oxc-transform/binding-win32-arm64-msvc": 22358 + optional: true 22359 + "@oxc-transform/binding-win32-x64-msvc": 22360 + optional: true 22361 + checksum: 10/3845f9cfc5d80724c027c554bca88f66dd4916ab0c5667fbe1eeb00d7da41870f9a1ef86b6649df4e6f0a9ba76fe8158f968cbfeed896c5da9b3f0358af04485 22220 22362 languageName: node 22221 22363 linkType: hard 22222 22364 ··· 22567 22709 languageName: node 22568 22710 linkType: hard 22569 22711 22712 + "path-browserify@npm:^1.0.1": 22713 + version: 1.0.1 22714 + resolution: "path-browserify@npm:1.0.1" 22715 + checksum: 10/7e7368a5207e7c6b9051ef045711d0dc3c2b6203e96057e408e6e74d09f383061010d2be95cb8593fe6258a767c3e9fc6b2bfc7ce8d48ae8c3d9f6994cca9ad8 22716 + languageName: node 22717 + linkType: hard 22718 + 22570 22719 "path-exists@npm:^3.0.0": 22571 22720 version: 3.0.0 22572 22721 resolution: "path-exists@npm:3.0.0" ··· 22996 23145 languageName: node 22997 23146 linkType: hard 22998 23147 22999 - "prettier@npm:^2.8.3": 23000 - version: 2.8.8 23001 - resolution: "prettier@npm:2.8.8" 23148 + "prettier@npm:^3.2.5": 23149 + version: 3.4.2 23150 + resolution: "prettier@npm:3.4.2" 23002 23151 bin: 23003 - prettier: bin-prettier.js 23004 - checksum: 10/00cdb6ab0281f98306cd1847425c24cbaaa48a5ff03633945ab4c701901b8e96ad558eb0777364ffc312f437af9b5a07d0f45346266e8245beaf6247b9c62b24 23152 + prettier: bin/prettier.cjs 23153 + checksum: 10/a3e806fb0b635818964d472d35d27e21a4e17150c679047f5501e1f23bd4aa806adf660f0c0d35214a210d5d440da6896c2e86156da55f221a57938278dc326e 23005 23154 languageName: node 23006 23155 linkType: hard 23007 23156 ··· 23465 23614 languageName: node 23466 23615 linkType: hard 23467 23616 23468 - "react-dom@npm:18.3.1, react-dom@npm:>=18.0.0": 23617 + "react-dom@npm:18.3.1": 23469 23618 version: 18.3.1 23470 23619 resolution: "react-dom@npm:18.3.1" 23471 23620 dependencies: ··· 23500 23649 languageName: node 23501 23650 linkType: hard 23502 23651 23503 - "react-native-css-interop@npm:~0.0.21": 23504 - version: 0.0.36 23505 - resolution: "react-native-css-interop@npm:0.0.36" 23652 + "react-native-css-interop@npm:^0.1.22": 23653 + version: 0.1.22 23654 + resolution: "react-native-css-interop@npm:0.1.22" 23506 23655 dependencies: 23507 23656 "@babel/helper-module-imports": "npm:^7.22.15" 23508 23657 "@babel/traverse": "npm:^7.23.0" 23509 23658 "@babel/types": "npm:^7.23.0" 23510 - babel-plugin-tester: "npm:^11.0.4" 23511 - lightningcss: "npm:1.22.0" 23659 + debug: "npm:^4.3.7" 23660 + lightningcss: "npm:^1.27.0" 23661 + semver: "npm:^7.6.3" 23512 23662 peerDependencies: 23513 23663 react: ">=18" 23514 23664 react-native: "*" ··· 23519 23669 optional: true 23520 23670 react-native-svg: 23521 23671 optional: true 23522 - checksum: 10/5d99c7bfe0ef7b75032b60b162c3991fa162d200d3c5f64935e6a31c888173532bf06e6a551286b18ad20f419926af8fb64aa6884feccd76f38aacae517acbf5 23672 + checksum: 10/778520da829b3360e2a233af59c5c10720cf315cc60eac43869865ac2ce21ab09bb4ef483838451e2921e686859129b5aba26d44173a9477a9fa2caea4e8f311 23523 23673 languageName: node 23524 23674 linkType: hard 23525 23675 ··· 23650 23800 languageName: node 23651 23801 linkType: hard 23652 23802 23653 - "react-native-web@npm:^0.19.12": 23654 - version: 0.19.12 23655 - resolution: "react-native-web@npm:0.19.12" 23656 - dependencies: 23657 - "@babel/runtime": "npm:^7.18.6" 23658 - "@react-native/normalize-colors": "npm:^0.74.1" 23659 - fbjs: "npm:^3.0.4" 23660 - inline-style-prefixer: "npm:^6.0.1" 23661 - memoize-one: "npm:^6.0.0" 23662 - nullthrows: "npm:^1.1.1" 23663 - postcss-value-parser: "npm:^4.2.0" 23664 - styleq: "npm:^0.1.3" 23665 - peerDependencies: 23666 - react: ^18.0.0 23667 - react-dom: ^18.0.0 23668 - checksum: 10/6c326cc2fa07abcabfffcb99ea6df921c405402ead895ee4a142e8fdf55deda504fc4ce392bf50de9e6fe141a446ec2a93d8b872fcf079f10b92799fa9021732 23669 - languageName: node 23670 - linkType: hard 23671 - 23672 - "react-native-web@npm:^0.19.13": 23803 + "react-native-web@npm:^0.19.0, react-native-web@npm:^0.19.13": 23673 23804 version: 0.19.13 23674 23805 resolution: "react-native-web@npm:0.19.13" 23675 23806 dependencies: ··· 23859 23990 languageName: node 23860 23991 linkType: hard 23861 23992 23862 - "react@npm:18.3.1, react@npm:>=18.0.0": 23993 + "react@npm:18.3.1": 23863 23994 version: 18.3.1 23864 23995 resolution: "react@npm:18.3.1" 23865 23996 dependencies: ··· 24702 24833 languageName: node 24703 24834 linkType: hard 24704 24835 24836 + "semver@npm:^7.6.3": 24837 + version: 7.7.1 24838 + resolution: "semver@npm:7.7.1" 24839 + bin: 24840 + semver: bin/semver.js 24841 + checksum: 10/4cfa1eb91ef3751e20fc52e47a935a0118d56d6f15a837ab814da0c150778ba2ca4f1a4d9068b33070ea4273629e615066664c2cfcd7c272caf7a8a0f6518b2c 24842 + languageName: node 24843 + linkType: hard 24844 + 24705 24845 "send@npm:0.18.0": 24706 24846 version: 0.18.0 24707 24847 resolution: "send@npm:0.18.0" ··· 25483 25623 dependencies: 25484 25624 "@atproto/api": "npm:^0.13.16" 25485 25625 "@atproto/jwk-webcrypto": "npm:^0.1.2" 25626 + "@atproto/lex-cli": "npm:^0.5.6" 25486 25627 "@atproto/oauth-client-browser": "npm:^0.3.1" 25487 25628 firebase-admin: "npm:^12.7.0" 25488 25629 husky: "npm:^9.1.6" ··· 25520 25661 "@react-navigation/native": "npm:^6.1.18" 25521 25662 "@react-navigation/native-stack": "npm:^6.11.0" 25522 25663 "@reduxjs/toolkit": "npm:^2.3.0" 25523 - "@tamagui/babel-plugin": "npm:^1.116.12" 25524 - "@tamagui/config": "npm:^1.116.12" 25525 - "@tamagui/lucide-icons": "npm:^1.116.12" 25526 - "@tamagui/metro-plugin": "npm:^1.116.12" 25527 - "@tamagui/toast": "npm:^1.116.12" 25664 + "@tamagui/babel-plugin": "npm:^1.123.17" 25665 + "@tamagui/config": "npm:^1.123.17" 25666 + "@tamagui/lucide-icons": "npm:^1.123.17" 25667 + "@tamagui/metro-plugin": "npm:^1.123.17" 25668 + "@tamagui/toast": "npm:^1.123.17" 25528 25669 "@tanstack/react-query": "npm:^5.59.19" 25529 25670 "@types/babel__plugin-transform-runtime": "npm:^7" 25530 25671 "@types/qrcode": "npm:^1" ··· 25570 25711 react-native-webrtc: "npm:^124.0.4" 25571 25712 react-native-webview: "npm:13.12.4" 25572 25713 react-redux: "npm:^9.1.2" 25573 - tamagui: "npm:^1.116.12" 25714 + tamagui: "npm:^1.123.17" 25574 25715 typescript: "npm:~5.3.3" 25575 25716 ua-parser-js: "npm:^2.0.0-rc.1" 25576 25717 uuid: "npm:^11.0.2" ··· 25980 26121 languageName: node 25981 26122 linkType: hard 25982 26123 25983 - "tamagui@npm:^1.116.12": 25984 - version: 1.116.12 25985 - resolution: "tamagui@npm:1.116.12" 26124 + "tamagui@npm:^1.123.17": 26125 + version: 1.123.17 26126 + resolution: "tamagui@npm:1.123.17" 25986 26127 dependencies: 25987 - "@tamagui/accordion": "npm:1.116.12" 25988 - "@tamagui/adapt": "npm:1.116.12" 25989 - "@tamagui/alert-dialog": "npm:1.116.12" 25990 - "@tamagui/animate-presence": "npm:1.116.12" 25991 - "@tamagui/avatar": "npm:1.116.12" 25992 - "@tamagui/button": "npm:1.116.12" 25993 - "@tamagui/card": "npm:1.116.12" 25994 - "@tamagui/checkbox": "npm:1.116.12" 25995 - "@tamagui/compose-refs": "npm:1.116.12" 25996 - "@tamagui/constants": "npm:1.116.12" 25997 - "@tamagui/core": "npm:1.116.12" 25998 - "@tamagui/create-context": "npm:1.116.12" 25999 - "@tamagui/dialog": "npm:1.116.12" 26000 - "@tamagui/elements": "npm:1.116.12" 26001 - "@tamagui/fake-react-native": "npm:1.116.12" 26002 - "@tamagui/focusable": "npm:1.116.12" 26003 - "@tamagui/font-size": "npm:1.116.12" 26004 - "@tamagui/form": "npm:1.116.12" 26005 - "@tamagui/get-button-sized": "npm:1.116.12" 26006 - "@tamagui/get-font-sized": "npm:1.116.12" 26007 - "@tamagui/get-token": "npm:1.116.12" 26008 - "@tamagui/group": "npm:1.116.12" 26009 - "@tamagui/helpers-tamagui": "npm:1.116.12" 26010 - "@tamagui/image": "npm:1.116.12" 26011 - "@tamagui/label": "npm:1.116.12" 26012 - "@tamagui/linear-gradient": "npm:1.116.12" 26013 - "@tamagui/list-item": "npm:1.116.12" 26014 - "@tamagui/polyfill-dev": "npm:1.116.12" 26015 - "@tamagui/popover": "npm:1.116.12" 26016 - "@tamagui/popper": "npm:1.116.12" 26017 - "@tamagui/portal": "npm:1.116.12" 26018 - "@tamagui/progress": "npm:1.116.12" 26019 - "@tamagui/radio-group": "npm:1.116.12" 26020 - "@tamagui/react-native-media-driver": "npm:1.116.12" 26021 - "@tamagui/scroll-view": "npm:1.116.12" 26022 - "@tamagui/select": "npm:1.116.12" 26023 - "@tamagui/separator": "npm:1.116.12" 26024 - "@tamagui/shapes": "npm:1.116.12" 26025 - "@tamagui/sheet": "npm:1.116.12" 26026 - "@tamagui/slider": "npm:1.116.12" 26027 - "@tamagui/stacks": "npm:1.116.12" 26028 - "@tamagui/switch": "npm:1.116.12" 26029 - "@tamagui/tabs": "npm:1.116.12" 26030 - "@tamagui/text": "npm:1.116.12" 26031 - "@tamagui/theme": "npm:1.116.12" 26032 - "@tamagui/toggle-group": "npm:1.116.12" 26033 - "@tamagui/tooltip": "npm:1.116.12" 26034 - "@tamagui/use-controllable-state": "npm:1.116.12" 26035 - "@tamagui/use-debounce": "npm:1.116.12" 26036 - "@tamagui/use-force-update": "npm:1.116.12" 26037 - "@tamagui/use-window-dimensions": "npm:1.116.12" 26038 - "@tamagui/visually-hidden": "npm:1.116.12" 26128 + "@tamagui/accordion": "npm:1.123.17" 26129 + "@tamagui/adapt": "npm:1.123.17" 26130 + "@tamagui/alert-dialog": "npm:1.123.17" 26131 + "@tamagui/animate-presence": "npm:1.123.17" 26132 + "@tamagui/avatar": "npm:1.123.17" 26133 + "@tamagui/button": "npm:1.123.17" 26134 + "@tamagui/card": "npm:1.123.17" 26135 + "@tamagui/checkbox": "npm:1.123.17" 26136 + "@tamagui/compose-refs": "npm:1.123.17" 26137 + "@tamagui/constants": "npm:1.123.17" 26138 + "@tamagui/core": "npm:1.123.17" 26139 + "@tamagui/create-context": "npm:1.123.17" 26140 + "@tamagui/dialog": "npm:1.123.17" 26141 + "@tamagui/elements": "npm:1.123.17" 26142 + "@tamagui/fake-react-native": "npm:1.123.17" 26143 + "@tamagui/focusable": "npm:1.123.17" 26144 + "@tamagui/font-size": "npm:1.123.17" 26145 + "@tamagui/form": "npm:1.123.17" 26146 + "@tamagui/get-button-sized": "npm:1.123.17" 26147 + "@tamagui/get-font-sized": "npm:1.123.17" 26148 + "@tamagui/get-token": "npm:1.123.17" 26149 + "@tamagui/group": "npm:1.123.17" 26150 + "@tamagui/helpers-tamagui": "npm:1.123.17" 26151 + "@tamagui/image": "npm:1.123.17" 26152 + "@tamagui/label": "npm:1.123.17" 26153 + "@tamagui/linear-gradient": "npm:1.123.17" 26154 + "@tamagui/list-item": "npm:1.123.17" 26155 + "@tamagui/polyfill-dev": "npm:1.123.17" 26156 + "@tamagui/popover": "npm:1.123.17" 26157 + "@tamagui/popper": "npm:1.123.17" 26158 + "@tamagui/portal": "npm:1.123.17" 26159 + "@tamagui/progress": "npm:1.123.17" 26160 + "@tamagui/radio-group": "npm:1.123.17" 26161 + "@tamagui/react-native-media-driver": "npm:1.123.17" 26162 + "@tamagui/scroll-view": "npm:1.123.17" 26163 + "@tamagui/select": "npm:1.123.17" 26164 + "@tamagui/separator": "npm:1.123.17" 26165 + "@tamagui/shapes": "npm:1.123.17" 26166 + "@tamagui/sheet": "npm:1.123.17" 26167 + "@tamagui/slider": "npm:1.123.17" 26168 + "@tamagui/stacks": "npm:1.123.17" 26169 + "@tamagui/switch": "npm:1.123.17" 26170 + "@tamagui/tabs": "npm:1.123.17" 26171 + "@tamagui/text": "npm:1.123.17" 26172 + "@tamagui/theme": "npm:1.123.17" 26173 + "@tamagui/toggle-group": "npm:1.123.17" 26174 + "@tamagui/tooltip": "npm:1.123.17" 26175 + "@tamagui/use-controllable-state": "npm:1.123.17" 26176 + "@tamagui/use-debounce": "npm:1.123.17" 26177 + "@tamagui/use-force-update": "npm:1.123.17" 26178 + "@tamagui/use-window-dimensions": "npm:1.123.17" 26179 + "@tamagui/visually-hidden": "npm:1.123.17" 26039 26180 peerDependencies: 26040 26181 react: "*" 26041 - checksum: 10/4889444720077adfed534e34363b6e54405bbe8500ea99509e409b2c8081962659c7d20d7fb171680e5d25f64038e277e090bedb876b0fc6ff36863fbd7beda1 26182 + checksum: 10/8a8f8aaaa7497cdb21aab25d0a81cb6d7f0c5e8f12744c0fadfbff12bf8786f5e12e64c9561868b8d076c3b2093ee316ade1f552e2e710873891b3d93c113dd6 26042 26183 languageName: node 26043 26184 linkType: hard 26044 26185 ··· 26434 26575 languageName: node 26435 26576 linkType: hard 26436 26577 26578 + "ts-morph@npm:^16.0.0": 26579 + version: 16.0.0 26580 + resolution: "ts-morph@npm:16.0.0" 26581 + dependencies: 26582 + "@ts-morph/common": "npm:~0.17.0" 26583 + code-block-writer: "npm:^11.0.3" 26584 + checksum: 10/43b583b96ec1c1d34d1c4f4d1c3d0249f29136b735019e63d3caabe6cd74fc6bca3c92d9ff94f57d228c93362bee85422772024510d790cd6a086d90cbf97210 26585 + languageName: node 26586 + linkType: hard 26587 + 26437 26588 "ts-node@npm:^10.9.2": 26438 26589 version: 10.9.2 26439 26590 resolution: "ts-node@npm:10.9.2" ··· 26692 26843 languageName: node 26693 26844 linkType: hard 26694 26845 26695 - "typescript@npm:^5.6.3, typescript@npm:~5.6.3": 26696 - version: 5.6.3 26697 - resolution: "typescript@npm:5.6.3" 26846 + "typescript@npm:^5.7.2": 26847 + version: 5.7.3 26848 + resolution: "typescript@npm:5.7.3" 26698 26849 bin: 26699 26850 tsc: bin/tsc 26700 26851 tsserver: bin/tsserver 26701 - checksum: 10/c328e418e124b500908781d9f7b9b93cf08b66bf5936d94332b463822eea2f4e62973bfb3b8a745fdc038785cb66cf59d1092bac3ec2ac6a3e5854687f7833f1 26852 + checksum: 10/6a7e556de91db3d34dc51cd2600e8e91f4c312acd8e52792f243c7818dfadb27bae677175fad6947f9c81efb6c57eb6b2d0c736f196a6ee2f1f7d57b74fc92fa 26702 26853 languageName: node 26703 26854 linkType: hard 26704 26855 ··· 26709 26860 tsc: bin/tsc 26710 26861 tsserver: bin/tsserver 26711 26862 checksum: 10/6e4e6a14a50c222b3d14d4ea2f729e79f972fa536ac1522b91202a9a65af3605c2928c4a790a4a50aa13694d461c479ba92cedaeb1e7b190aadaa4e4b96b8e18 26863 + languageName: node 26864 + linkType: hard 26865 + 26866 + "typescript@npm:~5.6.3": 26867 + version: 5.6.3 26868 + resolution: "typescript@npm:5.6.3" 26869 + bin: 26870 + tsc: bin/tsc 26871 + tsserver: bin/tsserver 26872 + checksum: 10/c328e418e124b500908781d9f7b9b93cf08b66bf5936d94332b463822eea2f4e62973bfb3b8a745fdc038785cb66cf59d1092bac3ec2ac6a3e5854687f7833f1 26712 26873 languageName: node 26713 26874 linkType: hard 26714 26875 ··· 26722 26883 languageName: node 26723 26884 linkType: hard 26724 26885 26725 - "typescript@patch:typescript@npm%3A^5.6.3#optional!builtin<compat/typescript>, typescript@patch:typescript@npm%3A~5.6.3#optional!builtin<compat/typescript>": 26726 - version: 5.6.3 26727 - resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin<compat/typescript>::version=5.6.3&hash=b45daf" 26886 + "typescript@patch:typescript@npm%3A^5.7.2#optional!builtin<compat/typescript>": 26887 + version: 5.7.3 26888 + resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin<compat/typescript>::version=5.7.3&hash=b45daf" 26728 26889 bin: 26729 26890 tsc: bin/tsc 26730 26891 tsserver: bin/tsserver 26731 - checksum: 10/dc4bec403cd33a204b655b1152a096a08e7bad2c931cb59ef8ff26b6f2aa541bf98f09fc157958a60c921b1983a8dde9a85b692f9de60fa8f574fd131e3ae4dd 26892 + checksum: 10/3ac7b7e3e899273d2fbdce6e24b93d4d53a705ad7a7e4cc83b4c57bcb6d25948abcd2a21994f6b9c73ab03960f395aae95f0458de292a66ce0134233261714c3 26732 26893 languageName: node 26733 26894 linkType: hard 26734 26895 ··· 26739 26900 tsc: bin/tsc 26740 26901 tsserver: bin/tsserver 26741 26902 checksum: 10/c93786fcc9a70718ba1e3819bab56064ead5817004d1b8186f8ca66165f3a2d0100fee91fa64c840dcd45f994ca5d615d8e1f566d39a7470fc1e014dbb4cf15d 26903 + languageName: node 26904 + linkType: hard 26905 + 26906 + "typescript@patch:typescript@npm%3A~5.6.3#optional!builtin<compat/typescript>": 26907 + version: 5.6.3 26908 + resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin<compat/typescript>::version=5.6.3&hash=b45daf" 26909 + bin: 26910 + tsc: bin/tsc 26911 + tsserver: bin/tsserver 26912 + checksum: 10/dc4bec403cd33a204b655b1152a096a08e7bad2c931cb59ef8ff26b6f2aa541bf98f09fc157958a60c921b1983a8dde9a85b692f9de60fa8f574fd131e3ae4dd 26742 26913 languageName: node 26743 26914 linkType: hard 26744 26915 ··· 28187 28358 buffer-crc32: "npm:~0.2.3" 28188 28359 fd-slicer: "npm:~1.1.0" 28189 28360 checksum: 10/1e4c311050dc0cf2ee3dbe8854fe0a6cde50e420b3e561a8d97042526b4cf7a0718d6c8d89e9e526a152f4a9cec55bcea9c3617264115f48bd6704cf12a04445 28361 + languageName: node 28362 + linkType: hard 28363 + 28364 + "yesno@npm:^0.4.0": 28365 + version: 0.4.0 28366 + resolution: "yesno@npm:0.4.0" 28367 + checksum: 10/8bccf302d18cf5fb364ec5c51fbe1612accd10468ed41df4a5f62a350cbab4af596e84f895bab8135fc69fe1b7433d8f2ce7998fa5b8c8a5fbaf0d796b40bae4 28190 28368 languageName: node 28191 28369 linkType: hard 28192 28370