diff --git a/.ci/dockerfile-hash.yaml b/.ci/dockerfile-hash.yaml
index 42c302fa..422c6113 100644
--- a/.ci/dockerfile-hash.yaml
+++ b/.ci/dockerfile-hash.yaml
@@ -1,2 +1,2 @@
variables:
- DOCKERFILE_HASH: 24a5abdbf165ddd6abd7e417548b67b0b73c5d23
\ No newline at end of file
+ DOCKERFILE_HASH: 4c5b7b7979e1c6225b8f0e6db74176699bdffeb0
\ No newline at end of file
diff --git a/Makefile b/Makefile
index f6bbcfa2..f74cc248 100644
--- a/Makefile
+++ b/Makefile
@@ -47,6 +47,23 @@ schema:
mkdir -p js/app/generated \
&& go run pkg/crypto/signers/eip712/export-schema/export-schema.go > js/app/generated/eip712-schema.json
+.PHONY: go-lexicons
+go-lexicons:
+ rm -rf ./pkg/streamplace \
+ && mkdir -p ./pkg/streamplace \
+ && $(MAKE) lexgen \
+ && sed -i.bak 's/\tutil/\/\/\tutil/' $$(find ./pkg/streamplace -type f) \
+ && sed -i.bak -E 's/^(.+)github(.+)//' $$(find ./pkg/streamplace -type f) \
+ && go run ./pkg/gen/gen.go \
+ && $(MAKE) lexgen \
+ && rm -rf ./pkg/streamplace/*.bak
+
+.PHONY: lexgen
+lexgen:
+ go run github.com/bluesky-social/indigo/cmd/lexgen --package streamplace \
+ --types-import place.stream:stream.place/streamplace/pkg/streamplace --outdir ./pkg/streamplace --prefix place.stream --build \
+ '[{"package": "streamplace","prefix": "place.stream","outdir": "./pkg/streamplace","import":"stream.place/streamplace"}]' lexicons/place/stream
+
.PHONY: test
test:
meson test -C $(BUILDDIR) go-tests
@@ -100,18 +117,28 @@ ci-test: app
meson test -C $(BUILDDIR) go-tests
.PHONY: android
-android: app .build/bundletool.jar
+android: android-release android-debug
+
+.PHONY: android-release
+android-release: app .build/bundletool.jar
export NODE_ENV=production \
&& cd ./js/app/android \
&& ./gradlew :app:bundleRelease \
- && ./gradlew :app:bundleDebug \
&& cd - \
&& mv ./js/app/android/app/build/outputs/bundle/release/app-release.aab ./bin/streamplace-$(VERSION)-android-release.aab \
- && mv ./js/app/android/app/build/outputs/bundle/debug/app-debug.aab ./bin/streamplace-$(VERSION)-android-debug.aab \
&& cd bin \
&& 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 \
+ && unzip streamplace-$(VERSION)-android-release.apks && mv universal.apk streamplace-$(VERSION)-android-release.apk && rm toc.pb
+
+.PHONY: android-debug
+android-debug: app .build/bundletool.jar
+ export NODE_ENV=production \
+ && cd ./js/app/android \
+ && ./gradlew :app:bundleDebug \
+ && cd - \
+ && mv ./js/app/android/app/build/outputs/bundle/debug/app-debug.aab ./bin/streamplace-$(VERSION)-android-debug.aab \
+ && cd bin \
&& 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 \
- && unzip streamplace-$(VERSION)-android-release.apks && mv universal.apk streamplace-$(VERSION)-android-release.apk && rm toc.pb \
&& unzip streamplace-$(VERSION)-android-debug.apks && mv universal.apk streamplace-$(VERSION)-android-debug.apk && rm toc.pb
.PHONY: ios
diff --git a/docker/build.Dockerfile b/docker/build.Dockerfile
index 24a5abdb..4c5b7b79 100644
--- a/docker/build.Dockerfile
+++ b/docker/build.Dockerfile
@@ -6,7 +6,7 @@ ENV TARGETARCH $TARGETARCH
ARG DOCKERFILE_HASH
ENV DOCKERFILE_HASH $DOCKERFILE_HASH
-ENV GO_VERSION 1.22.4
+ENV GO_VERSION 1.23.6
ENV NODE_VERSION 22.3.0
ENV DEBIAN_FRONTEND noninteractive
diff --git a/go.mod b/go.mod
index aa20108e..a2af1ac6 100644
--- a/go.mod
+++ b/go.mod
@@ -1,17 +1,22 @@
module stream.place/streamplace
-go 1.22.4
+go 1.23
+
+toolchain go1.23.3
replace github.com/livepeer/lpms => github.com/aquareum-tv/lpms v0.0.0-20240828210246-5ac9b407751e
replace github.com/ThalesGroup/crypto11 => github.com/aquareum-tv/crypto11 v0.0.0-20240821184406-43336abc768f
+replace github.com/gocql/gocql => github.com/scylladb/gocql v1.14.4
+
require (
firebase.google.com/go/v4 v4.14.1
git.stream.place/streamplace/c2pa-go v0.0.0-20250129011218-a26b6bf7d3b0
+ github.com/99designs/gqlgen v0.17.64
github.com/NYTimes/gziphandler v1.1.1
github.com/ThalesGroup/crypto11 v0.0.0-00010101000000-000000000000
- github.com/bluesky-social/indigo v0.0.0-20241119234843-9198b7903723
+ github.com/bluesky-social/indigo v0.0.0-20250202033855-fd270fbccf0c
github.com/decred/dcrd/dcrec/secp256k1 v1.0.4
github.com/dunglas/httpsfv v1.0.2
github.com/ethereum/go-ethereum v1.14.7
@@ -21,6 +26,7 @@ require (
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
github.com/golang/glog v1.2.0
github.com/google/uuid v1.6.0
+ github.com/gorilla/websocket v1.5.1
github.com/ipfs/go-cid v0.4.1
github.com/ipfs/go-datastore v0.6.0
github.com/ipfs/go-ipfs-blockstore v1.3.1
@@ -42,9 +48,9 @@ require (
gitlab.com/gitlab-org/release-cli v0.18.0
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56
golang.org/x/image v0.22.0
- golang.org/x/net v0.31.0
- golang.org/x/sync v0.9.0
- golang.org/x/term v0.26.0
+ golang.org/x/net v0.33.0
+ golang.org/x/sync v0.10.0
+ golang.org/x/term v0.27.0
google.golang.org/api v0.189.0
gorm.io/datatypes v1.2.4
gorm.io/driver/sqlite v1.5.5
@@ -54,7 +60,7 @@ require (
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/mattn/go-isatty v0.0.20
- golang.org/x/sys v0.27.0 // indirect
+ golang.org/x/sys v0.29.0 // indirect
gorm.io/gorm v1.25.11
)
@@ -77,15 +83,24 @@ require (
dario.cat/mergo v1.0.0 // indirect
filippo.io/edwards25519 v1.1.0 // indirect
github.com/BurntSushi/toml v1.4.0 // indirect
+ github.com/DataDog/zstd v1.4.5 // indirect
github.com/MicahParks/keyfunc v1.9.0 // indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
github.com/ProtonMail/go-crypto v1.0.0 // indirect
+ github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b // indirect
+ github.com/agnivade/levenshtein v1.2.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bits-and-blooms/bitset v1.10.0 // indirect
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
github.com/carlmjohnson/versioninfo v0.22.5 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cloudflare/circl v1.3.7 // indirect
+ github.com/cockroachdb/errors v1.11.3 // indirect
+ github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect
+ github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
+ github.com/cockroachdb/pebble v1.1.2 // indirect
+ github.com/cockroachdb/redact v1.1.5 // indirect
+ github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect
github.com/consensys/bavard v0.1.13 // indirect
github.com/consensys/gnark-crypto v0.12.1 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect
@@ -98,42 +113,62 @@ require (
github.com/ethereum/c-kzg-4844 v1.0.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
+ github.com/getsentry/sentry-go v0.27.0 // indirect
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
github.com/go-git/go-billy/v5 v5.5.0 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-sql-driver/mysql v1.8.1 // indirect
+ github.com/gocql/gocql v0.0.0-00010101000000-000000000000 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.4 // indirect
+ github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect
github.com/google/s2a-go v0.1.7 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
github.com/googleapis/gax-go/v2 v2.12.5 // indirect
+ github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-retryablehttp v0.7.5 // indirect
github.com/hashicorp/go-version v1.4.0 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
+ github.com/hashicorp/golang-lru/arc/v2 v2.0.6 // indirect
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
github.com/holiman/uint256 v1.3.0 // indirect
github.com/ipfs/bbloom v0.0.4 // indirect
github.com/ipfs/go-block-format v0.2.0 // indirect
+ github.com/ipfs/go-blockservice v0.5.2 // indirect
github.com/ipfs/go-ipfs-ds-help v1.1.1 // indirect
+ github.com/ipfs/go-ipfs-exchange-interface v0.2.1 // indirect
github.com/ipfs/go-ipfs-util v0.0.3 // indirect
github.com/ipfs/go-ipld-cbor v0.1.0 // indirect
github.com/ipfs/go-ipld-format v0.6.0 // indirect
+ github.com/ipfs/go-ipld-legacy v0.2.1 // indirect
+ github.com/ipfs/go-libipfs v0.7.0 // indirect
github.com/ipfs/go-log v1.0.5 // indirect
github.com/ipfs/go-log/v2 v2.5.1 // indirect
+ github.com/ipfs/go-merkledag v0.11.0 // indirect
github.com/ipfs/go-metrics-interface v0.0.1 // indirect
+ github.com/ipfs/go-verifcid v0.0.3 // indirect
+ github.com/ipld/go-car v0.6.1-0.20230509095817-92d28eb23ba4 // indirect
github.com/ipld/go-car/v2 v2.13.1 // indirect
+ github.com/ipld/go-codec-dagpb v1.6.0 // indirect
github.com/ipld/go-ipld-prime v0.21.0 // indirect
+ github.com/jackc/pgpassfile v1.0.0 // indirect
+ github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 // indirect
+ github.com/jackc/pgx/v5 v5.5.5 // indirect
+ github.com/jackc/puddle/v2 v2.2.1 // indirect
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
github.com/jbenet/goprocess v0.1.4 // indirect
github.com/jstemmer/go-junit-report v1.0.0 // indirect
github.com/kevinburke/ssh_config v1.2.0 // indirect
+ github.com/klauspost/compress v1.17.3 // indirect
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
+ github.com/kr/pretty v0.3.1 // indirect
+ github.com/kr/text v0.2.0 // indirect
github.com/livepeer/m3u8 v0.11.1 // indirect
github.com/mattn/go-pointer v0.0.1 // indirect
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
@@ -171,15 +206,18 @@ require (
github.com/prometheus/client_model v0.5.0 // indirect
github.com/prometheus/common v0.45.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
+ github.com/rogpeppe/go-internal v1.12.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/skeema/knownhosts v1.2.2 // indirect
+ github.com/sosodev/duration v1.3.1 // indirect
github.com/spaolacci/murmur3 v1.1.0 // indirect
github.com/stretchr/objx v0.5.2 // indirect
github.com/supranational/blst v0.3.11 // indirect
github.com/thales-e-security/pool v0.0.2 // indirect
github.com/urfave/cli/v2 v2.27.5 // indirect
+ github.com/vektah/gqlparser/v2 v2.5.22 // indirect
github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 // indirect
github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e // indirect
github.com/wlynxg/anet v0.0.5 // indirect
@@ -196,19 +234,23 @@ require (
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.26.0 // indirect
- golang.org/x/crypto v0.29.0 // indirect
+ golang.org/x/crypto v0.31.0 // indirect
+ golang.org/x/mod v0.20.0 // indirect
golang.org/x/oauth2 v0.21.0 // indirect
- golang.org/x/text v0.20.0 // indirect
+ golang.org/x/text v0.21.0 // indirect
golang.org/x/time v0.5.0 // indirect
+ golang.org/x/tools v0.24.0 // indirect
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
google.golang.org/appengine/v2 v2.0.2 // indirect
google.golang.org/genproto v0.0.0-20240722135656-d784300faade // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240722135656-d784300faade // indirect
google.golang.org/grpc v1.64.1 // indirect
- google.golang.org/protobuf v1.35.1 // indirect
+ google.golang.org/protobuf v1.36.4 // indirect
+ gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
gorm.io/driver/mysql v1.5.6 // indirect
+ gorm.io/driver/postgres v1.5.7 // indirect
lukechampine.com/blake3 v1.2.1 // indirect
rsc.io/tmplfunc v0.0.3 // indirect
)
diff --git a/go.sum b/go.sum
index 1f16e948..8858402c 100644
--- a/go.sum
+++ b/go.sum
@@ -23,6 +23,8 @@ firebase.google.com/go/v4 v4.14.1 h1:4qiUETaFRWoFGE1XP5VbcEdtPX93Qs+8B/7KvP2825g
firebase.google.com/go/v4 v4.14.1/go.mod h1:fgk2XshgNDEKaioKco+AouiegSI9oTWVqRaBdTTGBoM=
git.stream.place/streamplace/c2pa-go v0.0.0-20250129011218-a26b6bf7d3b0 h1:dXB8DJxUxQsX6m2vR+O5wXiUfD9IGcxn8gV3mRbHI0k=
git.stream.place/streamplace/c2pa-go v0.0.0-20250129011218-a26b6bf7d3b0/go.mod h1:ymtm/Gk3K8Q67SuBoZUqmA0prdymNwAI9BjLj6plhBM=
+github.com/99designs/gqlgen v0.17.64 h1:BzpqO5ofQXyy2XOa93Q6fP1BHLRjTOeU35ovTEsbYlw=
+github.com/99designs/gqlgen v0.17.64/go.mod h1:kaxLetFxPGeBBwiuKk75NxuI1fe9HRvob17In74v/Zc=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
@@ -37,25 +39,41 @@ github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cq
github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78=
github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0=
+github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b h1:5/++qT1/z812ZqBvqQt6ToRswSuPZ/B33m6xVHRzADU=
+github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b/go.mod h1:4+EPqMRApwwE/6yo6CxiHoSnBzjRr3jsqer7frxP8y4=
github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA=
github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8=
github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI=
github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI=
+github.com/agnivade/levenshtein v1.2.0 h1:U9L4IOT0Y3i0TIlUIDJ7rVUziKi/zPbrJGaFrtYH3SY=
+github.com/agnivade/levenshtein v1.2.0/go.mod h1:QVVI16kDrtSuwcpd0p1+xMC6Z/VfhtCyDIjcwga4/DU=
+github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 h1:iW0a5ljuFxkLGPNem5Ui+KBjFJzKg4Fv2fnxe4dvzpM=
+github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5/go.mod h1:Y2QMoi1vgtOIfc+6DhrMOGkLoGzqSV2rKp4Sm+opsyA=
+github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
+github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
github.com/aquareum-tv/crypto11 v0.0.0-20240821184406-43336abc768f h1:XSnkt/A222mS2ZeUMKQHoFVljHQHNMEEDxV/kRhltsM=
github.com/aquareum-tv/crypto11 v0.0.0-20240821184406-43336abc768f/go.mod h1:jxLjD0HWOu7iVqbL7hmvDoe6D/B+w0UW7CqK3jNjt5E=
github.com/aquareum-tv/lpms v0.0.0-20240828210246-5ac9b407751e h1:YMbqxUpsM7cjfPdO4y2FVH+VMBMC+ZG7DRbF7J5NMs0=
github.com/aquareum-tv/lpms v0.0.0-20240828210246-5ac9b407751e/go.mod h1:z5ROP1l5OzAKSoqVRLc34MjUdueil6wHSecQYV7llIw=
+github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q=
+github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
+github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
+github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY=
+github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k=
github.com/bits-and-blooms/bitset v1.10.0 h1:ePXTeiPEazB5+opbv5fr8umg2R/1NlzgDsyepwsSr88=
github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8=
-github.com/bluesky-social/indigo v0.0.0-20241119234843-9198b7903723 h1:Is+KjMLL4Kp/Hvua18c3puZqhojEsoqyvMidszNH3Oo=
-github.com/bluesky-social/indigo v0.0.0-20241119234843-9198b7903723/go.mod h1:DRpwvwteIrSsbmyf6Mf+3NIy/s6LKrKLJFnqUh1eEsQ=
+github.com/bluesky-social/indigo v0.0.0-20250202033855-fd270fbccf0c h1:wbp2fKVXy5XtM1FfSagSFtl1vFm4CgA7vE3KEzX/XyQ=
+github.com/bluesky-social/indigo v0.0.0-20250202033855-fd270fbccf0c/go.mod h1:Qp4YqWf+AQ3TwQCxV5Ls8O2tXE55zVTGVs3zTmn7BOg=
+github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
+github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k=
github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU=
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
@@ -73,6 +91,8 @@ github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUK
github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4=
+github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU=
github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I=
github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8=
github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/esnpM7Geqxka4WSqI1SZc7sMJFd3y4=
@@ -96,6 +116,9 @@ github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c h1:uQYC5Z1mdLR
github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs=
github.com/crate-crypto/go-kzg-4844 v1.0.0 h1:TsSgHwrkTKecKJ4kadtHi4b3xHW5dCFUDFnUp1TsawI=
github.com/crate-crypto/go-kzg-4844 v1.0.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc=
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0=
+github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis=
github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -114,6 +137,8 @@ github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 h1:3GIJYXQDAKpLEFriGFN8SbSffak1
github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0/go.mod h1:3s92l0paYkZoIHuj4X93Teg/HB7eGM9x/zokGw+u4mY=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0=
+github.com/dgryski/trifles v0.0.0-20230903005119-f50d829f2e54 h1:SG7nF6SRlWhcT7cNTs5R6Hk4V2lcmLz2NsG2VnInyNo=
+github.com/dgryski/trifles v0.0.0-20230903005119-f50d829f2e54/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
github.com/dunglas/httpsfv v1.0.2 h1:iERDp/YAfnojSDJ7PW3dj1AReJz4MrwbECSSE59JWL0=
github.com/dunglas/httpsfv v1.0.2/go.mod h1:zID2mqw9mFsnt7YC3vYQ9/cjq30q41W+1AnDwH8TiMg=
github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU=
@@ -140,6 +165,8 @@ github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK
github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
github.com/gliderlabs/ssh v0.3.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE=
github.com/gliderlabs/ssh v0.3.7/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8=
+github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
+github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU=
@@ -159,9 +186,13 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
+github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg=
+github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
+github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss=
+github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0=
github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw=
github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
@@ -196,6 +227,7 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
+github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk=
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -207,6 +239,8 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8=
+github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo=
github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc=
github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
@@ -222,6 +256,10 @@ github.com/googleapis/gax-go/v2 v2.12.5 h1:8gw9KZK8TiVKB6q3zHY3SBzLnrGp6HQjyfYBY
github.com/googleapis/gax-go/v2 v2.12.5/go.mod h1:BUDKcWo+RaKq5SC9vVYL0wLADa3VcfswbOMMRmB9H3E=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
+github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
+github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8=
+github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -238,43 +276,79 @@ github.com/hashicorp/go-version v1.4.0 h1:aAQzgqIrRKRa7w75CKpbBxYsmUoPjzVm1W59ca
github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
+github.com/hashicorp/golang-lru/arc/v2 v2.0.6 h1:4NU7uP5vSoK6TbaMj3NtY478TTAWLso/vL1gpNrInHg=
+github.com/hashicorp/golang-lru/arc/v2 v2.0.6/go.mod h1:cfdDIX05DWvYV6/shsxDfa/OVcRieOt+q4FnM8x+Xno=
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
github.com/holiman/uint256 v1.3.0 h1:4wdcm/tnd0xXdu7iS3ruNvxkWwrb4aeBQv19ayYn8F4=
github.com/holiman/uint256 v1.3.0/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E=
+github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc=
+github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8=
github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs=
github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0=
github.com/ipfs/go-bitfield v1.1.0 h1:fh7FIo8bSwaJEh6DdTWbCeZ1eqOaOkKFI74SCnsWbGA=
github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL0HqsGWHU=
+github.com/ipfs/go-bitswap v0.11.0 h1:j1WVvhDX1yhG32NTC9xfxnqycqYIlhzEzLXG/cU1HyQ=
+github.com/ipfs/go-bitswap v0.11.0/go.mod h1:05aE8H3XOU+LXpTedeAS0OZpcO1WFsj5niYQH9a1Tmk=
github.com/ipfs/go-block-format v0.2.0 h1:ZqrkxBA2ICbDRbK8KJs/u0O3dlp6gmAuuXUJNiW1Ycs=
github.com/ipfs/go-block-format v0.2.0/go.mod h1:+jpL11nFx5A/SPpsoBn6Bzkra/zaArfSmsknbPMYgzM=
+github.com/ipfs/go-blockservice v0.5.2 h1:in9Bc+QcXwd1apOVM7Un9t8tixPKdaHQFdLSUM1Xgk8=
+github.com/ipfs/go-blockservice v0.5.2/go.mod h1:VpMblFEqG67A/H2sHKAemeH9vlURVavlysbdUI632yk=
+github.com/ipfs/go-bs-sqlite3 v0.0.0-20221122195556-bfcee1be620d h1:9V+GGXCuOfDiFpdAHz58q9mKLg447xp0cQKvqQrAwYE=
+github.com/ipfs/go-bs-sqlite3 v0.0.0-20221122195556-bfcee1be620d/go.mod h1:pMbnFyNAGjryYCLCe59YDLRv/ujdN+zGJBT1umlvYRM=
github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s=
github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk=
github.com/ipfs/go-datastore v0.6.0 h1:JKyz+Gvz1QEZw0LsX1IBn+JFCJQH4SJVFtM4uWU0Myk=
github.com/ipfs/go-datastore v0.6.0/go.mod h1:rt5M3nNbSO/8q1t4LNkLyUwRs8HupMeN/8O4Vn9YAT8=
github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk=
github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps=
+github.com/ipfs/go-ds-flatfs v0.5.1 h1:ZCIO/kQOS/PSh3vcF1H6a8fkRGS7pOfwfPdx4n/KJH4=
+github.com/ipfs/go-ds-flatfs v0.5.1/go.mod h1:RWTV7oZD/yZYBKdbVIFXTX2fdY2Tbvl94NsWqmoyAX4=
github.com/ipfs/go-ipfs-blockstore v1.3.1 h1:cEI9ci7V0sRNivqaOr0elDsamxXFxJMMMy7PTTDQNsQ=
github.com/ipfs/go-ipfs-blockstore v1.3.1/go.mod h1:KgtZyc9fq+P2xJUiCAzbRdhhqJHvsw8u2Dlqy2MyRTE=
+github.com/ipfs/go-ipfs-blocksutil v0.0.1 h1:Eh/H4pc1hsvhzsQoMEP3Bke/aW5P5rVM1IWFJMcGIPQ=
+github.com/ipfs/go-ipfs-blocksutil v0.0.1/go.mod h1:Yq4M86uIOmxmGPUHv/uI7uKqZNtLb449gwKqXjIsnRk=
github.com/ipfs/go-ipfs-chunker v0.0.5 h1:ojCf7HV/m+uS2vhUGWcogIIxiO5ubl5O57Q7NapWLY8=
github.com/ipfs/go-ipfs-chunker v0.0.5/go.mod h1:jhgdF8vxRHycr00k13FM8Y0E+6BoalYeobXmUyTreP8=
+github.com/ipfs/go-ipfs-delay v0.0.1 h1:r/UXYyRcddO6thwOnhiznIAiSvxMECGgtv35Xs1IeRQ=
+github.com/ipfs/go-ipfs-delay v0.0.1/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw=
github.com/ipfs/go-ipfs-ds-help v1.1.1 h1:B5UJOH52IbcfS56+Ul+sv8jnIV10lbjLF5eOO0C66Nw=
github.com/ipfs/go-ipfs-ds-help v1.1.1/go.mod h1:75vrVCkSdSFidJscs8n4W+77AtTpCIAdDGAwjitJMIo=
+github.com/ipfs/go-ipfs-exchange-interface v0.2.1 h1:jMzo2VhLKSHbVe+mHNzYgs95n0+t0Q69GQ5WhRDZV/s=
+github.com/ipfs/go-ipfs-exchange-interface v0.2.1/go.mod h1:MUsYn6rKbG6CTtsDp+lKJPmVt3ZrCViNyH3rfPGsZ2E=
+github.com/ipfs/go-ipfs-exchange-offline v0.3.0 h1:c/Dg8GDPzixGd0MC8Jh6mjOwU57uYokgWRFidfvEkuA=
+github.com/ipfs/go-ipfs-exchange-offline v0.3.0/go.mod h1:MOdJ9DChbb5u37M1IcbrRB02e++Z7521fMxqCNRrz9s=
+github.com/ipfs/go-ipfs-pq v0.0.3 h1:YpoHVJB+jzK15mr/xsWC574tyDLkezVrDNeaalQBsTE=
+github.com/ipfs/go-ipfs-pq v0.0.3/go.mod h1:btNw5hsHBpRcSSgZtiNm/SLj5gYIZ18AKtv3kERkRb4=
+github.com/ipfs/go-ipfs-routing v0.3.0 h1:9W/W3N+g+y4ZDeffSgqhgo7BsBSJwPMcyssET9OWevc=
+github.com/ipfs/go-ipfs-routing v0.3.0/go.mod h1:dKqtTFIql7e1zYsEuWLyuOU+E0WJWW8JjbTPLParDWo=
github.com/ipfs/go-ipfs-util v0.0.3 h1:2RFdGez6bu2ZlZdI+rWfIdbQb1KudQp3VGwPtdNCmE0=
github.com/ipfs/go-ipfs-util v0.0.3/go.mod h1:LHzG1a0Ig4G+iZ26UUOMjHd+lfM84LZCrn17xAKWBvs=
github.com/ipfs/go-ipld-cbor v0.1.0 h1:dx0nS0kILVivGhfWuB6dUpMa/LAwElHPw1yOGYopoYs=
github.com/ipfs/go-ipld-cbor v0.1.0/go.mod h1:U2aYlmVrJr2wsUBU67K4KgepApSZddGRDWBYR0H4sCk=
github.com/ipfs/go-ipld-format v0.6.0 h1:VEJlA2kQ3LqFSIm5Vu6eIlSxD/Ze90xtc4Meten1F5U=
github.com/ipfs/go-ipld-format v0.6.0/go.mod h1:g4QVMTn3marU3qXchwjpKPKgJv+zF+OlaKMyhJ4LHPg=
+github.com/ipfs/go-ipld-legacy v0.2.1 h1:mDFtrBpmU7b//LzLSypVrXsD8QxkEWxu5qVxN99/+tk=
+github.com/ipfs/go-ipld-legacy v0.2.1/go.mod h1:782MOUghNzMO2DER0FlBR94mllfdCJCkTtDtPM51otM=
+github.com/ipfs/go-libipfs v0.7.0 h1:Mi54WJTODaOL2/ZSm5loi3SwI3jI2OuFWUrQIkJ5cpM=
+github.com/ipfs/go-libipfs v0.7.0/go.mod h1:KsIf/03CqhICzyRGyGo68tooiBE2iFbI/rXW7FhAYr0=
github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8=
github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo=
github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g=
github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY=
github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI=
+github.com/ipfs/go-merkledag v0.11.0 h1:DgzwK5hprESOzS4O1t/wi6JDpyVQdvm9Bs59N/jqfBY=
+github.com/ipfs/go-merkledag v0.11.0/go.mod h1:Q4f/1ezvBiJV0YCIXvt51W/9/kqJGH4I1LsA7+djsM4=
github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg=
github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY=
+github.com/ipfs/go-peertaskqueue v0.8.1 h1:YhxAs1+wxb5jk7RvS0LHdyiILpNmRIRnZVztekOF0pg=
+github.com/ipfs/go-peertaskqueue v0.8.1/go.mod h1:Oxxd3eaK279FxeydSPPVGHzbwVeHjatZ2GA8XD+KbPU=
github.com/ipfs/go-unixfsnode v1.8.0 h1:yCkakzuE365glu+YkgzZt6p38CSVEBPgngL9ZkfnyQU=
github.com/ipfs/go-unixfsnode v1.8.0/go.mod h1:HxRu9HYHOjK6HUqFBAi++7DVoWAHn0o4v/nZ/VA+0g8=
+github.com/ipfs/go-verifcid v0.0.3 h1:gmRKccqhWDocCRkC+a59g5QW7uJw5bpX9HWBevXa0zs=
+github.com/ipfs/go-verifcid v0.0.3/go.mod h1:gcCtGniVzelKrbk9ooUSX/pM3xlH73fZZJDzQJRvOUw=
+github.com/ipld/go-car v0.6.1-0.20230509095817-92d28eb23ba4 h1:oFo19cBmcP0Cmg3XXbrr0V/c+xU9U1huEZp8+OgBzdI=
+github.com/ipld/go-car v0.6.1-0.20230509095817-92d28eb23ba4/go.mod h1:6nkFF8OmR5wLKBzRKi7/YFJpyYR7+oEn1DX+mMWnlLA=
github.com/ipld/go-car/v2 v2.13.1 h1:KnlrKvEPEzr5IZHKTXLAEub+tPrzeAFQVRlSQvuxBO4=
github.com/ipld/go-car/v2 v2.13.1/go.mod h1:QkdjjFNGit2GIkpQ953KBwowuoukoM75nP/JI1iDJdo=
github.com/ipld/go-codec-dagpb v1.6.0 h1:9nYazfyu9B1p3NAgfVdpRco3Fs2nFC72DqVsMj6rOcc=
@@ -291,6 +365,8 @@ github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw=
github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=
github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
+github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
+github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
@@ -316,6 +392,8 @@ github.com/klauspost/compress v1.17.3 h1:qkRjuerhUU1EmXLYGkSH6EZL+vPSxIrYjLNAK4s
github.com/klauspost/compress v1.17.3/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
+github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8=
+github.com/koron/go-ssdp v0.0.3/go.mod h1:b2MxI6yh02pKrsyNoQUsk4+YNikaGhe4894J+Q5lDvA=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
@@ -329,6 +407,22 @@ github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7
github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8=
github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8=
github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg=
+github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c=
+github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic=
+github.com/libp2p/go-libp2p v0.25.1 h1:YK+YDCHpYyTvitKWVxa5PfElgIpOONU01X5UcLEwJGA=
+github.com/libp2p/go-libp2p v0.25.1/go.mod h1:xnK9/1d9+jeQCVvi/f1g12KqtVi/jP/SijtKV1hML3g=
+github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw=
+github.com/libp2p/go-libp2p-asn-util v0.2.0/go.mod h1:WoaWxbHKBymSN41hWSq/lGKJEca7TNm58+gGJi2WsLI=
+github.com/libp2p/go-libp2p-record v0.2.0 h1:oiNUOCWno2BFuxt3my4i1frNrt7PerzB3queqa1NkQ0=
+github.com/libp2p/go-libp2p-record v0.2.0/go.mod h1:I+3zMkvvg5m2OcSdoL0KPljyJyvNDFGKX7QdlpYUcwk=
+github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA=
+github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg=
+github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0=
+github.com/libp2p/go-msgio v0.3.0/go.mod h1:nyRM819GmVaF9LX3l03RMh10QdOroF++NBbxAb0mmDM=
+github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg=
+github.com/libp2p/go-nat v0.1.0/go.mod h1:X7teVkwRHNInVNWQiO/tAiAVRwSr5zoRz4YSTC3uRBM=
+github.com/libp2p/go-netroute v0.2.1 h1:V8kVrpD8GK0Riv15/7VN6RbUQ3URNZVosw7H2v9tksU=
+github.com/libp2p/go-netroute v0.2.1/go.mod h1:hraioZr0fhBjG0ZRXJJ6Zj2IVEVNx6tDTFQfSmcq7mQ=
github.com/livepeer/joy4 v0.1.2-0.20191121080656-b2fea45cbded/go.mod h1:xkDdm+akniYxVT9KW1Y2Y7Hso6aW+rZObz3nrA9yTHw=
github.com/livepeer/m3u8 v0.11.1 h1:VkUJzfNTyjy9mqsgp5JPvouwna8wGZMvd/gAfT5FinU=
github.com/livepeer/m3u8 v0.11.1/go.mod h1:IUqAtwWPAG2CblfQa4SVzTQoDcEMPyfNOaBSxqHMS04=
@@ -347,6 +441,8 @@ github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvls
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
github.com/microsoft/go-mssqldb v0.17.0 h1:Fto83dMZPnYv1Zwx5vHHxpNraeEaUlQ/hhHLgZiaenE=
github.com/microsoft/go-mssqldb v0.17.0/go.mod h1:OkoNGhGEs8EZqchVTtochlXruEhEOaO4S0d2sB5aeGQ=
+github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA=
+github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU=
github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
@@ -364,12 +460,20 @@ github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aG
github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI=
github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0=
github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4=
+github.com/multiformats/go-multiaddr v0.8.0 h1:aqjksEcqK+iD/Foe1RRFsGZh8+XFiGo7FgUCZlpv3LU=
+github.com/multiformats/go-multiaddr v0.8.0/go.mod h1:Fs50eBDWvZu+l3/9S6xAE7ZYj6yhxlvaVZjakWN7xRs=
+github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A=
+github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk=
+github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E=
+github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo=
github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g=
github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk=
github.com/multiformats/go-multicodec v0.9.0 h1:pb/dlPnzee/Sxv/j4PmkDRxCOi3hXTz3IbPKOXWJkmg=
github.com/multiformats/go-multicodec v0.9.0/go.mod h1:L3QTQvMIaVBkXOXXtVmYE+LI16i14xuaojr/H7Ai54k=
github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U=
github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM=
+github.com/multiformats/go-multistream v0.4.1 h1:rFy0Iiyn3YT0asivDUIR05leAdwZq3de4741sbiSdfo=
+github.com/multiformats/go-multistream v0.4.1/go.mod h1:Mz5eykRVAjJWckE2U78c6xqdtyNUEhKSM0Lwar2p77Q=
github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8=
github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU=
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
@@ -384,6 +488,8 @@ github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 h1:1/WtZae0yGtPq+TI6+
github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9/go.mod h1:x3N5drFsm2uilKKuuYo6LdyD8vZAW55sH/9w+pbo1sw=
github.com/peterbourgon/ff/v3 v3.3.1 h1:XSWvXxeNdgeppLNGGJEAOiXRdX2YMF/LuZfdnqQ1SNc=
github.com/peterbourgon/ff/v3 v3.3.1/go.mod h1:zjJVUhx+twciwfDl0zBcFzl4dW8axCRyXE/eKY9RztQ=
+github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
+github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
github.com/pion/datachannel v1.5.9 h1:LpIWAOYPyDrXtU+BW7X0Yt/vGtYxtXQ8ql7dFfYUVZA=
github.com/pion/datachannel v1.5.9/go.mod h1:kDUuk4CU4Uxp82NH4LQZbISULkX/HtzKa4P7ldf9izE=
github.com/pion/dtls/v3 v3.0.4 h1:44CZekewMzfrn9pmGrj5BNnTMDCFwr+6sLH+cCuLM7U=
@@ -420,6 +526,7 @@ github.com/piprate/json-gold v0.5.0 h1:RmGh1PYboCFcchVFuh2pbSWAZy4XJaqTMU4KQYsAp
github.com/piprate/json-gold v0.5.0/go.mod h1:WZ501QQMbZZ+3pXFPhQKzNwS1+jls0oqov3uQ2WasLs=
github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4=
github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI=
+github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -441,6 +548,7 @@ github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3c
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
@@ -450,6 +558,8 @@ github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/samber/slog-http v1.4.0 h1:s2hSzMlQBFDIPTUBDm6G+SGfv7F4xR9q8edjxtY6aho=
github.com/samber/slog-http v1.4.0/go.mod h1:n6h4x2ZBeTgLqMKf95EuNlU6mcJF1b/RVLxo1od5+V0=
+github.com/scylladb/gocql v1.14.4 h1:MhevwCfyAraQ6RvZYFO3pF4Lt0YhvQlfg8Eo2HEqVQA=
+github.com/scylladb/gocql v1.14.4/go.mod h1:ZLEJ0EVE5JhmtxIW2stgHq/v1P4fWap0qyyXSKyV8K0=
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU=
@@ -466,6 +576,8 @@ github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N
github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
github.com/smartystreets/goconvey v1.7.2 h1:9RBaZCeXEQ3UselpuwUQHltGVXvdwm6cv1hgR6gDIPg=
github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM=
+github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4=
+github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg=
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -497,6 +609,8 @@ github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9f
github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w=
github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ=
+github.com/vektah/gqlparser/v2 v2.5.22 h1:yaaeJ0fu+nv1vUMW0Hl+aS1eiv1vMfapBNjpffAda1I=
+github.com/vektah/gqlparser/v2 v2.5.22/go.mod h1:xMl+ta8a5M1Yo1A1Iwt/k7gSpscwSnHZdw7tfhEGfTM=
github.com/warpfork/go-testmark v0.12.1 h1:rMgCpJfwy1sJ50x0M0NgyphxYYPMOODIJHhsXyEHU0s=
github.com/warpfork/go-testmark v0.12.1/go.mod h1:kHwy7wfvGSPh1rQJYKayD4AbtNaeyZdcGi9tNJTaa5Y=
github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0 h1:GDDkbFiaK8jsSDJfjId/PEGEShv6ugrt4kYsC5UIDaQ=
@@ -561,8 +675,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
-golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ=
-golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg=
+golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
+golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
@@ -578,6 +692,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
+golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -590,13 +706,14 @@ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwY
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20220526153639-5463443f8c37/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.0.0-20220708220712-1185a9018129/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
-golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo=
-golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM=
+golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
+golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=
golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
@@ -608,8 +725,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=
-golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
+golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -630,15 +747,15 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
-golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
+golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
-golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU=
-golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E=
+golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
+golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -646,8 +763,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
-golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
+golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
+golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -665,6 +782,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
+golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -704,14 +823,16 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
-google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
-google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
+google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM=
+google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
+gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@@ -742,3 +863,5 @@ lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI=
lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k=
rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU=
rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA=
+sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
+sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
diff --git a/js/app/.gitignore b/js/app/.gitignore
index dfdf4289..552d5f66 100644
--- a/js/app/.gitignore
+++ b/js/app/.gitignore
@@ -58,3 +58,4 @@ ios
android
code-signing-dev
generated
+lexicons
diff --git a/js/app/components/create-livestream.tsx b/js/app/components/create-livestream.tsx
new file mode 100644
index 00000000..3d8e9fe1
--- /dev/null
+++ b/js/app/components/create-livestream.tsx
@@ -0,0 +1,140 @@
+import { useEffect, useState } from "react";
+import { Button, Label, Paragraph, TextArea, View } from "tamagui";
+import { Switch } from "react-native";
+import { useToastController } from "@tamagui/toast";
+import { useIsFocused } from "@react-navigation/native";
+import {
+ createLivestreamRecord,
+ golivePost,
+ selectNewLivestream,
+ selectUserProfile,
+} from "features/bluesky/blueskySlice";
+import { useAppDispatch, useAppSelector } from "store/hooks";
+import { useLiveUser } from "hooks/useLiveUser";
+
+const Left = ({ children }: { children: React.ReactNode }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+const Right = ({ children }: { children: React.ReactNode }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+export default function CreateLivestream() {
+ const dispatch = useAppDispatch();
+ const toast = useToastController();
+ // const { url } = useAquareumNode();
+ const userIsLive = useLiveUser();
+ const isFocused = useIsFocused();
+ const [title, setTitle] = useState("");
+ const [loading, setLoading] = useState(false);
+ const [postToBluesky, setPostToBluesky] = useState(true);
+ const profile = useAppSelector(selectUserProfile);
+ const newLivestream = useAppSelector(selectNewLivestream);
+ useEffect(() => {
+ if (newLivestream?.record) {
+ toast.show("Livestream announced", {
+ message: newLivestream.record.title,
+ });
+ setTitle("");
+ }
+ }, [newLivestream?.record]);
+ useEffect(() => {
+ if (newLivestream?.error) {
+ toast.show("Error creating livestream", {
+ message: newLivestream.error,
+ });
+ }
+ }, [newLivestream?.error]);
+ const disabled = !userIsLive || loading || title === "";
+
+ return (
+
+
+
+
+
+
+
+
+ );
+}
+
+const buttonText = (loading: boolean, userIsLive: boolean) => {
+ if (loading) {
+ return "Loading...";
+ }
+ if (!userIsLive) {
+ return "Waiting for stream to start...";
+ }
+ return "Announce Livestream!";
+};
diff --git a/js/app/src/screens/live.tsx b/js/app/components/live-dashboard/live-selector.tsx
similarity index 100%
rename from js/app/src/screens/live.tsx
rename to js/app/components/live-dashboard/live-selector.tsx
index 7758c249..0e154808 100644
--- a/js/app/src/screens/live.tsx
+++ b/js/app/components/live-dashboard/live-selector.tsx
@@ -23,10 +23,10 @@ const elems = [
export default function StreamScreen({ route }) {
const isReady = useAppSelector(selectIsReady);
+ const userProfile = useAppSelector(selectUserProfile);
if (!isReady) {
return ;
}
- const userProfile = useAppSelector(selectUserProfile);
if (!userProfile) {
return ;
}
diff --git a/js/app/src/screens/stream-key.tsx b/js/app/components/live-dashboard/stream-key.tsx
similarity index 94%
rename from js/app/src/screens/stream-key.tsx
rename to js/app/components/live-dashboard/stream-key.tsx
index 49430a9e..6030113b 100644
--- a/js/app/src/screens/stream-key.tsx
+++ b/js/app/components/live-dashboard/stream-key.tsx
@@ -10,6 +10,7 @@ import { useEffect, useState } from "react";
import { useAppDispatch, useAppSelector } from "store/hooks";
import { View, Paragraph, Button, Text } from "tamagui";
import { Redirect } from "components/aqlink";
+import Waiting from "./waiting";
const Row = ({ children }: { children: React.ReactNode }) => {
return (
@@ -49,7 +50,15 @@ export default function StreamKeyScreen() {
return ;
}
return (
-
+
@@ -90,6 +99,7 @@ export default function StreamKeyScreen() {
+
);
}
diff --git a/js/app/components/live-dashboard/waiting.tsx b/js/app/components/live-dashboard/waiting.tsx
new file mode 100644
index 00000000..95569ea7
--- /dev/null
+++ b/js/app/components/live-dashboard/waiting.tsx
@@ -0,0 +1,11 @@
+import Loading from "components/loading/loading";
+import { View, Text } from "tamagui";
+
+export default function Waiting() {
+ return (
+
+
+ Waiting for stream to start...
+
+ );
+}
diff --git a/js/app/components/player/video.tsx b/js/app/components/player/video.tsx
index 46620fe7..e042440a 100644
--- a/js/app/components/player/video.tsx
+++ b/js/app/components/player/video.tsx
@@ -23,7 +23,7 @@ import useStreamplaceNode from "hooks/useStreamplaceNode";
import { useAppDispatch, useAppSelector } from "store/hooks";
import { selectStoredKey } from "features/bluesky/blueskySlice";
import { usePlayer } from "features/player/playerSlice";
-import streamKey from "src/screens/stream-key";
+import streamKey from "components/live-dashboard/stream-key";
import { quietReceiver } from "./av-sync";
type VideoProps = PlayerProps & { url: string };
diff --git a/js/app/components/settings/updates.native.tsx b/js/app/components/settings/updates.native.tsx
index e4552a45..53b66682 100644
--- a/js/app/components/settings/updates.native.tsx
+++ b/js/app/components/settings/updates.native.tsx
@@ -1,8 +1,6 @@
-import { StatusBar } from "expo-status-bar";
import * as ExpoUpdates from "expo-updates";
import { useEffect, useState } from "react";
-import { Button, H2, H5, ScrollView, Text, View } from "tamagui";
-import Constants from "expo-constants";
+import { Button, H2, H5, Text, View } from "tamagui";
import { ToastViewport, useToastController } from "@tamagui/toast";
import pkg from "../../package.json";
import { Platform } from "react-native";
diff --git a/js/app/components/stream-list/stream-list.tsx b/js/app/components/stream-list/stream-list.tsx
index 23aaae3e..02772e4d 100644
--- a/js/app/components/stream-list/stream-list.tsx
+++ b/js/app/components/stream-list/stream-list.tsx
@@ -1,9 +1,14 @@
import AQLink from "components/aqlink";
import ErrorBox from "components/error/error";
import Loading from "components/loading/loading";
+import {
+ pollSegments,
+ selectRecentSegments,
+} from "features/streamplace/streamplaceSlice";
import useStreamplaceNode from "hooks/useStreamplaceNode";
import { useEffect, useState } from "react";
import { RefreshControl } from "react-native";
+import { useAppDispatch, useAppSelector } from "store/hooks";
import { H6, Image, ScrollView, ScrollViewProps, Text, View } from "tamagui";
type Segment = {
@@ -30,52 +35,30 @@ export default function StreamList({
string
>;
}) {
- const [streams, setStreams] = useState([]);
- const [error, setError] = useState(false);
- const [loading, setLoading] = useState(false);
- const [retryTime, setRetryTime] = useState(Date.now());
const { url } = useStreamplaceNode();
+ const { segments, error, loading } = useAppSelector(selectRecentSegments);
+ const dispatch = useAppDispatch();
+ const [manualRefresh, setManualRefresh] = useState(false);
useEffect(() => {
- const interval = setInterval(() => {
- setRetryTime(Date.now());
- }, 10000);
- return () => clearInterval(interval);
+ dispatch(pollSegments());
}, []);
useEffect(() => {
- setLoading(true);
- (async () => {
- try {
- const res = await fetch(`${url}/api/live-users`);
- if (!res.ok) {
- return;
- }
- const data = await res.json();
- if (!Array.isArray(data)) {
- throw new Error("got non-array back from /api/live-users");
- }
- setError(false);
- setStreams(data);
- } catch (e) {
- console.error(e);
- setError(true);
- } finally {
- setLoading(false);
- }
- })();
- }, [url, retryTime]);
+ if (!loading) {
+ setManualRefresh(false);
+ }
+ }, [loading]);
if (error) {
+ if (loading) {
+ return ;
+ }
return (
{
- setError(false);
- setRetryTime(Date.now());
+ dispatch(pollSegments());
}}
/>
);
}
- if (loading && streams.length === 0) {
- return ;
- }
return (
setRetryTime(Date.now())}
+ refreshing={manualRefresh}
+ onRefresh={() => {
+ dispatch(pollSegments());
+ setManualRefresh(true);
+ }}
/>
}
>
- {streams.map((segment, i) => {
+ {segments.map((segment, i) => {
const user =
segment.repo?.handle || segment.repoDID || segment.signingKeyDID;
return (
@@ -163,7 +149,11 @@ export default function StreamList({
);
})}
- {streams.length === 0 && No one is streaming right now ðŸ˜
}
+ {segments.length === 0 && (
+ <>
+ No one is streaming right now ðŸ˜
+ >
+ )}
);
diff --git a/js/app/features/bluesky/blueskyProvider.tsx b/js/app/features/bluesky/blueskyProvider.tsx
index 0cf4d291..81abaef4 100644
--- a/js/app/features/bluesky/blueskyProvider.tsx
+++ b/js/app/features/bluesky/blueskyProvider.tsx
@@ -1,5 +1,4 @@
import { useURL } from "expo-linking";
-import { putIdentity } from "features/streamplace/streamplaceSlice";
import useWallet from "hooks/useWallet";
import { useEffect, useState } from "react";
import { useAppDispatch, useAppSelector } from "store/hooks";
@@ -43,16 +42,6 @@ export default function BlueskyProvider({
if (oauthSession && !userProfile) {
dispatch(getProfile(oauthSession.did));
}
- if (oauthSession && userProfile && wallet.address) {
- dispatch(
- putIdentity({
- handle: userProfile.handle,
- did: oauthSession?.did,
- address: wallet.address,
- signTypedData: wallet.signTypedData,
- }),
- );
- }
}, [oauthSession, userProfile, wallet.address]);
return <>{children}>;
}
diff --git a/js/app/features/bluesky/blueskySlice.tsx b/js/app/features/bluesky/blueskySlice.tsx
index 5bd2bc40..7a49e094 100644
--- a/js/app/features/bluesky/blueskySlice.tsx
+++ b/js/app/features/bluesky/blueskySlice.tsx
@@ -1,36 +1,15 @@
import { Agent } from "@atproto/api";
-import { ProfileViewDetailed } from "@atproto/api/dist/client/types/app/bsky/actor/defs";
-import { OAuthSession } from "@atproto/oauth-client";
import { StreamplaceState } from "features/streamplace/streamplaceSlice";
import { openLoginLink } from "features/platform/platformSlice";
import Storage from "storage";
import { createAppSlice } from "../../hooks/createSlice";
-import createOAuthClient, { StreamplaceOAuthClient } from "./oauthClient";
+import createOAuthClient from "./oauthClient";
import { Secp256k1Keypair, bytesToMultibase } from "@atproto/crypto";
import { privateKeyToAccount } from "viem/accounts";
-import { StreamKey } from "features/base/baseSlice";
import { hydrate, STORED_KEY_KEY } from "features/base/baseSlice";
import { isWeb } from "tamagui";
-
-export interface BlueskyState {
- status: "start" | "loggedIn" | "loggedOut";
- oauthState: null | string;
- oauthSession: null | OAuthSession;
- pdsAgent: null | Agent;
- profiles: { [key: string]: ProfileViewDetailed };
- client: null | StreamplaceOAuthClient;
- login: {
- loading: boolean;
- error: null | string;
- };
- pds: {
- url: string;
- loading: boolean;
- error: null | string;
- };
- newKey: null | StreamKey;
- storedKey: null | StreamKey;
-}
+import { PlaceStreamKey, PlaceStreamLivestream } from "lexicons";
+import { BlueskyState } from "./blueskyTypes";
const initialState: BlueskyState = {
status: "start",
@@ -50,6 +29,7 @@ const initialState: BlueskyState = {
},
newKey: null,
storedKey: null,
+ newLivestream: null,
};
// clear atproto login query params from url
@@ -113,9 +93,11 @@ export const blueskySlice = createAppSlice({
client: client,
};
},
- rejected: (_, { error }) => {
- console.error("loadOAuthClient rejected", error);
- // state.status = "failed";
+ rejected: (state, { error }) => {
+ return {
+ ...state,
+ status: "loggedOut",
+ };
},
},
),
@@ -173,6 +155,7 @@ export const blueskySlice = createAppSlice({
logout: create.asyncThunk(
async (_, thunkAPI) => {
await Storage.removeItem("did");
+ await Storage.removeItem(STORED_KEY_KEY);
const { bluesky } = thunkAPI.getState() as {
bluesky: BlueskyState;
};
@@ -284,16 +267,10 @@ export const blueskySlice = createAppSlice({
),
golivePost: create.asyncThunk(
- async (
- {
- nodeUrl,
- signingKey,
- text,
- }: { nodeUrl: string; signingKey: string; text: string },
- thunkAPI,
- ) => {
- const { bluesky } = thunkAPI.getState() as {
+ async ({ text }: { text: string }, thunkAPI) => {
+ const { bluesky, streamplace } = thunkAPI.getState() as {
bluesky: BlueskyState;
+ streamplace: StreamplaceState;
};
if (!bluesky.pdsAgent) {
throw new Error("No agent");
@@ -306,9 +283,8 @@ export const blueskySlice = createAppSlice({
if (!profile) {
throw new Error("No profile");
}
- const u = new URL(nodeUrl);
+ const u = new URL(streamplace.url);
const params = new URLSearchParams({
- key: signingKey,
did: did,
time: new Date().toISOString(),
});
@@ -334,7 +310,6 @@ export const blueskySlice = createAppSlice({
];
const record = {
text: content,
- "place.stream.key": signingKey,
facets,
};
return await bluesky.pdsAgent.post(record);
@@ -347,7 +322,7 @@ export const blueskySlice = createAppSlice({
console.log("golivePost fulfilled", action.payload);
},
rejected: (state, action) => {
- console.error("getProfile rejected", action.error);
+ console.error("golivePost rejected", action.error);
// state.status = "failed";
},
},
@@ -386,7 +361,7 @@ export const blueskySlice = createAppSlice({
did: keypair.did(),
address: account.address.toLowerCase(),
};
- const record = {
+ const record: PlaceStreamKey.Record = {
signingKey: keypair.did(),
createdAt: new Date().toISOString(),
};
@@ -464,6 +439,73 @@ export const blueskySlice = createAppSlice({
},
},
),
+
+ createLivestreamRecord: create.asyncThunk(
+ async ({ title }: { title }, thunkAPI) => {
+ const { bluesky, streamplace } = thunkAPI.getState() as {
+ bluesky: BlueskyState;
+ streamplace: StreamplaceState;
+ };
+ if (!bluesky.pdsAgent) {
+ throw new Error("No agent");
+ }
+ const did = bluesky.oauthSession?.did;
+ if (!did) {
+ throw new Error("No DID");
+ }
+ const profile = bluesky.profiles[did];
+ if (!profile) {
+ throw new Error("No profile");
+ }
+ if (!did) {
+ throw new Error("No DID");
+ }
+ const record: PlaceStreamLivestream.Record = {
+ title: title,
+ url: streamplace.url,
+ createdAt: new Date().toISOString(),
+ };
+ await bluesky.pdsAgent.com.atproto.repo.createRecord({
+ repo: did,
+ collection: "place.stream.livestream",
+ record,
+ });
+ return record;
+ },
+ {
+ pending: (state) => {
+ return {
+ ...state,
+ newLivestream: {
+ loading: true,
+ error: null,
+ record: null,
+ },
+ };
+ },
+ fulfilled: (state, action) => {
+ return {
+ ...state,
+ newLivestream: {
+ loading: false,
+ error: null,
+ record: action.payload,
+ },
+ };
+ },
+ rejected: (state, action) => {
+ console.error("getProfile rejected", action.error);
+ return {
+ ...state,
+ newLivestream: {
+ loading: false,
+ error: action.error?.message ?? null,
+ record: null,
+ },
+ };
+ },
+ },
+ ),
}),
// You can define your selectors here. These selectors receive the slice
@@ -492,8 +534,10 @@ export const blueskySlice = createAppSlice({
if (!profile) {
return false;
}
+
return true;
},
+ selectNewLivestream: (bluesky) => bluesky.newLivestream,
},
});
@@ -508,6 +552,7 @@ export const {
setPDS,
createStreamKeyRecord,
clearStreamKeyRecord,
+ createLivestreamRecord,
} = blueskySlice.actions;
// Selectors returned by `slice.selectors` take the root state as their first argument.
@@ -519,4 +564,5 @@ export const {
selectLogin,
selectStoredKey,
selectIsReady,
+ selectNewLivestream,
} = blueskySlice.selectors;
diff --git a/js/app/features/bluesky/blueskyTypes.tsx b/js/app/features/bluesky/blueskyTypes.tsx
new file mode 100644
index 00000000..df780802
--- /dev/null
+++ b/js/app/features/bluesky/blueskyTypes.tsx
@@ -0,0 +1,33 @@
+import { OAuthSession } from "@aquareum/atproto-oauth-client-react-native";
+import { Agent } from "@atproto/api";
+import { ProfileViewDetailed } from "@atproto/api/dist/client/types/app/bsky/actor/defs";
+import { StreamKey } from "features/base/baseSlice";
+import { StreamplaceOAuthClient } from "./oauthClient";
+import { PlaceStreamLivestream } from "lexicons";
+
+type NewLivestream = {
+ loading: boolean;
+ error: string | null;
+ record: PlaceStreamLivestream.Record | null;
+};
+
+export interface BlueskyState {
+ status: "start" | "loggedIn" | "loggedOut";
+ oauthState: null | string;
+ oauthSession: null | OAuthSession;
+ pdsAgent: null | Agent;
+ profiles: { [key: string]: ProfileViewDetailed };
+ client: null | StreamplaceOAuthClient;
+ login: {
+ loading: boolean;
+ error: null | string;
+ };
+ pds: {
+ url: string;
+ loading: boolean;
+ error: null | string;
+ };
+ newKey: null | StreamKey;
+ storedKey: null | StreamKey;
+ newLivestream: null | NewLivestream;
+}
diff --git a/js/app/features/platform/platformSlice.native.tsx b/js/app/features/platform/platformSlice.native.tsx
index bba702d6..4df51680 100644
--- a/js/app/features/platform/platformSlice.native.tsx
+++ b/js/app/features/platform/platformSlice.native.tsx
@@ -1,19 +1,54 @@
import { openAuthSessionAsync } from "expo-web-browser";
import { createAppSlice } from "../../hooks/createSlice";
import { oauthCallback } from "features/bluesky/blueskySlice";
+import messaging from "@react-native-firebase/messaging";
+import { Platform, PermissionsAndroid } from "react-native";
+import {
+ initialState,
+ RegisterNotificationTokenBody,
+ PlatformState,
+} from "./shared";
+import { BlueskyState } from "features/bluesky/blueskyTypes";
-export interface PlatformState {
- status: "idle" | "loading" | "failed";
-}
-
-const initialState: PlatformState = {
- status: "idle",
+const checkApplicationPermission = async () => {
+ if (Platform.OS === "android") {
+ try {
+ await PermissionsAndroid.request(
+ PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS,
+ );
+ } catch (error) {
+ console.log("error getting notifications ", error);
+ }
+ }
};
export const platformSlice = createAppSlice({
name: "platform",
initialState,
reducers: (create) => ({
+ handleNotification: create.reducer(
+ (
+ state,
+ action: { payload: { [key: string]: string | object } | undefined },
+ ) => {
+ if (!action.payload) {
+ return state;
+ }
+ if (typeof action.payload.path !== "string") {
+ return state;
+ }
+ return {
+ ...state,
+ notificationDestination: action.payload.path,
+ };
+ },
+ ),
+ clearNotification: create.reducer((state) => {
+ return {
+ ...state,
+ notificationDestination: null,
+ };
+ }),
openLoginLink: create.asyncThunk(
async (url: string, thunkAPI) => {
console.log("openLoginLink", url);
@@ -35,7 +70,134 @@ export const platformSlice = createAppSlice({
},
},
),
+
+ initPushNotifications: create.asyncThunk(
+ async (_, thunkAPI) => {
+ const msg = messaging();
+ messaging().setBackgroundMessageHandler(async (remoteMessage) => {
+ console.log("Message handled in the background!", remoteMessage);
+ });
+ await checkApplicationPermission();
+ const authorizationStatus = await msg.requestPermission();
+
+ let perms = "";
+
+ if (authorizationStatus === messaging.AuthorizationStatus.AUTHORIZED) {
+ console.log("User has notification permissions enabled.");
+ perms += "authorized";
+ } else if (
+ authorizationStatus === messaging.AuthorizationStatus.PROVISIONAL
+ ) {
+ console.log("User has provisional notification permissions.");
+ perms += "provisional";
+ } else {
+ console.log("User has notification permissions disabled");
+ perms += "disabled";
+ }
+
+ const token = await msg.getToken();
+
+ messaging()
+ .subscribeToTopic("live")
+ .then(() => console.log("Subscribed to live!"));
+
+ messaging().onMessage((remoteMessage) => {
+ console.log("Foreground message:", remoteMessage);
+ // Display the notification to the user
+ });
+ messaging().onNotificationOpenedApp((remoteMessage) => {
+ console.log(
+ "App opened by notification while in foreground:",
+ remoteMessage,
+ );
+ thunkAPI.dispatch(handleNotification(remoteMessage.data));
+ // Handle notification interaction when the app is in the foreground
+ });
+ messaging()
+ .getInitialNotification()
+ .then((remoteMessage) => {
+ if (!remoteMessage) {
+ return;
+ }
+ console.log(
+ "App opened by notification from closed state:",
+ remoteMessage,
+ );
+ thunkAPI.dispatch(handleNotification(remoteMessage.data));
+ });
+
+ return { token };
+ },
+ {
+ pending: (state) => {},
+ fulfilled: (state, { payload }) => {
+ return {
+ ...state,
+ notificationToken: payload.token,
+ };
+ },
+ rejected: (state) => {},
+ },
+ ),
+
+ registerNotificationToken: create.asyncThunk(
+ async (_, thunkAPI) => {
+ if (typeof process.env.EXPO_PUBLIC_STREAMPLACE_URL !== "string") {
+ console.log("process.env.EXPO_PUBLIC_STREAMPLACE_URL undefined!");
+ return;
+ }
+ const { platform, bluesky } = thunkAPI.getState() as {
+ platform: PlatformState;
+ bluesky: BlueskyState;
+ };
+ if (!platform.notificationToken) {
+ throw new Error("No notification token");
+ }
+ const body: RegisterNotificationTokenBody = {
+ token: platform.notificationToken,
+ };
+ const did = bluesky.oauthSession?.did;
+ if (did) {
+ body.repoDID = did;
+ }
+ try {
+ const res = await fetch(
+ `${process.env.EXPO_PUBLIC_STREAMPLACE_URL}/api/notification`,
+ {
+ method: "POST",
+ headers: {
+ "content-type": "application/json",
+ },
+ body: JSON.stringify(body),
+ },
+ );
+ console.log({ status: res.status });
+ } catch (e) {
+ console.log(e);
+ }
+ },
+ {
+ pending: (state) => {},
+ fulfilled: (state) => {},
+ rejected: (state) => {},
+ },
+ ),
}),
+
+ selectors: {
+ selectNotificationToken: (platform) => platform.notificationToken,
+ selectNotificationDestination: (platform) =>
+ platform.notificationDestination,
+ },
});
-export const { openLoginLink } = platformSlice.actions;
+export const {
+ openLoginLink,
+ initPushNotifications,
+ registerNotificationToken,
+ handleNotification,
+ clearNotification,
+} = platformSlice.actions;
+
+export const { selectNotificationToken, selectNotificationDestination } =
+ platformSlice.selectors;
diff --git a/js/app/features/platform/platformSlice.tsx b/js/app/features/platform/platformSlice.tsx
index 697940cd..ae5c8fa4 100644
--- a/js/app/features/platform/platformSlice.tsx
+++ b/js/app/features/platform/platformSlice.tsx
@@ -1,17 +1,24 @@
import { createAppSlice } from "../../hooks/createSlice";
-
-export interface PlatformState {
- status: "idle" | "loading" | "failed";
-}
-
-const initialState: PlatformState = {
- status: "idle",
-};
+import { initialState } from "./shared";
export const platformSlice = createAppSlice({
name: "platform",
initialState,
reducers: (create) => ({
+ handleNotification: create.reducer(
+ (
+ state,
+ action: { payload: { [key: string]: string | object } | undefined },
+ ) => {
+ return state;
+ },
+ ),
+ clearNotification: create.reducer((state) => {
+ return {
+ ...state,
+ notificationDestination: null,
+ };
+ }),
openLoginLink: create.asyncThunk(
async (url: string) => {
window.location.href = url;
@@ -28,7 +35,32 @@ export const platformSlice = createAppSlice({
},
},
),
+
+ initPushNotifications: create.asyncThunk(
+ async () => {
+ // someday we'll do web notifications but for now it's mobile-only
+ },
+ {
+ pending: (state) => {},
+ fulfilled: (state) => {},
+ rejected: (state) => {},
+ },
+ ),
+
+ registerNotificationToken: create.asyncThunk(async () => {}, {
+ pending: (state) => {},
+ fulfilled: (state) => {},
+ rejected: (state) => {},
+ }),
}),
+
+ selectors: {
+ selectNotificationToken: (platform) => platform.notificationToken,
+ selectNotificationDestination: (platform) =>
+ platform.notificationDestination,
+ },
});
-export const { openLoginLink } = platformSlice.actions;
+export const { openLoginLink, clearNotification } = platformSlice.actions;
+export const { selectNotificationToken, selectNotificationDestination } =
+ platformSlice.selectors;
diff --git a/js/app/features/platform/shared.tsx b/js/app/features/platform/shared.tsx
new file mode 100644
index 00000000..a3b086fd
--- /dev/null
+++ b/js/app/features/platform/shared.tsx
@@ -0,0 +1,16 @@
+export interface PlatformState {
+ status: "idle" | "loading" | "failed";
+ notificationToken: string | null;
+ notificationDestination: string | null;
+}
+
+export const initialState: PlatformState = {
+ status: "idle",
+ notificationToken: null,
+ notificationDestination: null,
+};
+
+export type RegisterNotificationTokenBody = {
+ token: string;
+ repoDID?: string;
+};
diff --git a/js/app/features/streamplace/streamplaceSlice.tsx b/js/app/features/streamplace/streamplaceSlice.tsx
index 1f6dfa43..dbc9c29c 100644
--- a/js/app/features/streamplace/streamplaceSlice.tsx
+++ b/js/app/features/streamplace/streamplaceSlice.tsx
@@ -1,7 +1,5 @@
import { createAppSlice } from "../../hooks/createSlice";
import { isWeb } from "tamagui";
-import { SignTypedDataFn } from "hooks/useWallet.shared";
-import schema from "generated/eip712-schema.json";
import Storage from "../../storage";
let DEFAULT_URL = process.env.EXPO_PUBLIC_STREAMPLACE_URL as string;
@@ -14,6 +12,22 @@ if (isWeb && process.env.EXPO_PUBLIC_WEB_TRY_LOCAL === "true") {
}
export { DEFAULT_URL };
+export type Segment = {
+ id: string;
+ repoDID: string;
+ signingKeyDID: string;
+ startTime: string;
+ repo: Repo;
+};
+
+export type Repo = {
+ did: string;
+ handle: string;
+ pds: string;
+ version: string;
+ rootCid: string;
+};
+
export interface Identity {
id: string;
handle?: string;
@@ -24,12 +38,22 @@ export interface StreamplaceState {
url: string;
identity: Identity | null;
initialized: boolean;
+ recentSegments: {
+ segments: Segment[];
+ error: string | null;
+ loading: boolean;
+ };
}
const initialState: StreamplaceState = {
url: DEFAULT_URL,
identity: null,
initialized: false,
+ recentSegments: {
+ segments: [],
+ error: null,
+ loading: false,
+ },
};
export const streamplaceSlice = createAppSlice({
@@ -97,72 +121,53 @@ export const streamplaceSlice = createAppSlice({
},
),
- putIdentity: create.asyncThunk(
- async (
- {
- handle,
- did,
- address,
- signTypedData,
- }: {
- handle: string;
- did: string;
- address: string;
- signTypedData: SignTypedDataFn;
- },
- { getState, dispatch },
- ) => {
- let { streamplace } = getState() as {
+ pollSegments: create.asyncThunk(
+ async (_, { getState, dispatch }) => {
+ const { streamplace } = getState() as {
streamplace: StreamplaceState;
};
- if (!streamplace.identity) {
- await dispatch(getIdentity());
- }
- ({ streamplace } = getState() as {
- streamplace: StreamplaceState;
- });
- if (!streamplace.identity) {
- throw new Error("No identity");
- }
- const message = {
- signer: address,
- time: Date.now(),
- data: { handle, did },
- };
- const toSign = {
- types: schema.types,
- domain: schema.domain as any,
- primaryType: "Identity",
- message: message,
- };
- const signature = await signTypedData(toSign);
- const res = await fetch(
- `${streamplace.url}/api/identity/${streamplace.identity.id}`,
- {
- method: "PUT",
- body: JSON.stringify({
- primaryType: "Identity",
- domain: schema.domain,
- message: message,
- signature: signature,
- }),
- },
- );
+ const res = await fetch(`${streamplace.url}/api/live-users`);
if (!res.ok) {
const text = await res.text();
throw new Error(`http ${res.status} ${text}`);
}
+ const data = await res.json();
+ if (!Array.isArray(data)) {
+ throw new Error("got non-array back from /api/live-users");
+ }
- return await res.json();
+ return data;
},
{
pending: (state) => {
- // state.status = "loading";
+ return {
+ ...state,
+ recentSegments: {
+ ...state.recentSegments,
+ loading: true,
+ },
+ };
+ },
+ fulfilled: (state, action) => {
+ return {
+ ...state,
+ recentSegments: {
+ ...state.recentSegments,
+ segments: action.payload,
+ loading: false,
+ error: null,
+ },
+ };
},
- fulfilled: (state, action) => {},
rejected: (state, err) => {
- console.error("putIdentity rejected", err);
- // state.status = "failed";
+ return {
+ ...state,
+ recentSegments: {
+ ...state.recentSegments,
+ error: err.error.message ?? null,
+ loading: false,
+ },
+ };
},
},
),
@@ -170,10 +175,12 @@ export const streamplaceSlice = createAppSlice({
selectors: {
selectStreamplace: (streamplace) => streamplace,
+ selectRecentSegments: (streamplace) => streamplace.recentSegments,
},
});
// Action creators are generated for each case reducer function.
-export const { getIdentity, putIdentity, setURL, initialize } =
+export const { getIdentity, setURL, initialize, pollSegments } =
streamplaceSlice.actions;
-export const { selectStreamplace } = streamplaceSlice.selectors;
+export const { selectStreamplace, selectRecentSegments } =
+ streamplaceSlice.selectors;
diff --git a/js/app/hooks/platform/index.tsx b/js/app/hooks/platform/index.tsx
index 0aede5b4..442481ea 100644
--- a/js/app/hooks/platform/index.tsx
+++ b/js/app/hooks/platform/index.tsx
@@ -1,3 +1,3 @@
-import { initPushNotifications, topSafeHeight } from "./platform";
+import { topSafeHeight } from "./platform";
-export { initPushNotifications, topSafeHeight };
+export { topSafeHeight };
diff --git a/js/app/hooks/platform/platform.android.tsx b/js/app/hooks/platform/platform.android.tsx
index 2a4bc90f..c8273f0c 100644
--- a/js/app/hooks/platform/platform.android.tsx
+++ b/js/app/hooks/platform/platform.android.tsx
@@ -1,4 +1,3 @@
import { StatusBar } from "react-native";
-export * from "./platform.mobile";
export const topSafeHeight = () => StatusBar.currentHeight;
diff --git a/js/app/hooks/platform/platform.ios.tsx b/js/app/hooks/platform/platform.ios.tsx
index 5e88524f..1e390597 100644
--- a/js/app/hooks/platform/platform.ios.tsx
+++ b/js/app/hooks/platform/platform.ios.tsx
@@ -1,2 +1 @@
-export * from "./platform.mobile";
export const topSafeHeight = () => 0;
diff --git a/js/app/hooks/platform/platform.mobile.tsx b/js/app/hooks/platform/platform.mobile.tsx
index 1d8d3711..e69de29b 100644
--- a/js/app/hooks/platform/platform.mobile.tsx
+++ b/js/app/hooks/platform/platform.mobile.tsx
@@ -1,91 +0,0 @@
-import messaging from "@react-native-firebase/messaging";
-import { PermissionsAndroid, Platform } from "react-native";
-
-const checkApplicationPermission = async () => {
- if (Platform.OS === "android") {
- try {
- await PermissionsAndroid.request(
- PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS,
- );
- } catch (error) {
- console.log("error getting notifications ", error);
- }
- }
-};
-
-export async function initPushNotifications() {
- try {
- const x = messaging();
- messaging().setBackgroundMessageHandler(async (remoteMessage) => {
- console.log("Message handled in the background!", remoteMessage);
- });
- await checkApplicationPermission();
- const authorizationStatus = await x.requestPermission();
-
- let perms = "";
-
- if (authorizationStatus === messaging.AuthorizationStatus.AUTHORIZED) {
- console.log("User has notification permissions enabled.");
- perms += "authorized";
- } else if (
- authorizationStatus === messaging.AuthorizationStatus.PROVISIONAL
- ) {
- console.log("User has provisional notification permissions.");
- perms += "provisional";
- } else {
- console.log("User has notification permissions disabled");
- perms += "disabled";
- }
-
- (async () => {
- if (typeof process.env.EXPO_PUBLIC_STREAMPLACE_URL !== "string") {
- console.log("process.env.EXPO_PUBLIC_STREAMPLACE_URL undefined!");
- return;
- }
- try {
- const token = await x.getToken();
- const res = await fetch(
- `${process.env.EXPO_PUBLIC_STREAMPLACE_URL}/api/notification`,
- {
- method: "POST",
- headers: {
- "content-type": "application/json",
- },
- body: JSON.stringify({ token }),
- },
- );
- console.log({ status: res.status });
- } catch (e) {
- console.log(e);
- }
- })();
- // Register background handler
-
- messaging()
- .subscribeToTopic("live")
- .then(() => console.log("Subscribed to live!"));
-
- messaging().onMessage((remoteMessage) => {
- console.log("Foreground message:", remoteMessage);
- // Display the notification to the user
- });
- messaging().onNotificationOpenedApp((remoteMessage) => {
- console.log(
- "App opened by notification while in foreground:",
- remoteMessage,
- );
- // Handle notification interaction when the app is in the foreground
- });
- messaging()
- .getInitialNotification()
- .then((remoteMessage) => {
- console.log(
- "App opened by notification from closed state:",
- remoteMessage,
- );
- // Handle notification interaction when the app is opened from a closed state
- });
- } catch (e) {
- console.log(e);
- }
-}
diff --git a/js/app/hooks/platform/platform.tsx b/js/app/hooks/platform/platform.tsx
index 6bd0e9cf..1e390597 100644
--- a/js/app/hooks/platform/platform.tsx
+++ b/js/app/hooks/platform/platform.tsx
@@ -1,4 +1 @@
-export async function initPushNotifications() {
- // console.log("webby webby web");
-}
export const topSafeHeight = () => 0;
diff --git a/js/app/hooks/useLiveUser.tsx b/js/app/hooks/useLiveUser.tsx
new file mode 100644
index 00000000..5467b573
--- /dev/null
+++ b/js/app/hooks/useLiveUser.tsx
@@ -0,0 +1,14 @@
+import { selectUserProfile } from "features/bluesky/blueskySlice";
+import { selectRecentSegments } from "features/streamplace/streamplaceSlice";
+import { useAppSelector } from "store/hooks";
+
+// composite selector that tells us when the current user is live
+export const useLiveUser = (): boolean => {
+ const profile = useAppSelector(selectUserProfile);
+ const { segments } = useAppSelector(selectRecentSegments);
+ if (!profile) {
+ return false;
+ }
+ const isLive = segments.some((segment) => segment.repo.did === profile.did);
+ return isLive;
+};
diff --git a/js/app/hooks/useLoggedIn.tsx b/js/app/hooks/useLoggedIn.tsx
new file mode 100644
index 00000000..e69de29b
diff --git a/js/app/hooks/usePlatform.native.tsx b/js/app/hooks/usePlatform.native.tsx
index 50c9a26c..cfacb8d9 100644
--- a/js/app/hooks/usePlatform.native.tsx
+++ b/js/app/hooks/usePlatform.native.tsx
@@ -1,10 +1,9 @@
import { Platform } from "react-native";
-import { initPushNotifications, topSafeHeight } from "./platform";
+import { topSafeHeight } from "./platform";
import { IsPlatform } from "./usePlatform.shared";
export default function usePlatform(): IsPlatform {
return {
- initPushNotifications,
topSafeHeight,
isNative: true,
isIOS: Platform.OS === "ios",
diff --git a/js/app/hooks/usePlatform.shared.tsx b/js/app/hooks/usePlatform.shared.tsx
index 0619d706..442adb10 100644
--- a/js/app/hooks/usePlatform.shared.tsx
+++ b/js/app/hooks/usePlatform.shared.tsx
@@ -14,6 +14,5 @@ export type IsPlatform = {
// don't rely on this! just for defaults
isFirefox: boolean;
- initPushNotifications: () => Promise;
topSafeHeight: () => number;
};
diff --git a/js/app/hooks/usePlatform.tsx b/js/app/hooks/usePlatform.tsx
index dc8aaa97..6ee25b53 100644
--- a/js/app/hooks/usePlatform.tsx
+++ b/js/app/hooks/usePlatform.tsx
@@ -1,7 +1,7 @@
import { IsPlatform } from "./usePlatform.shared";
// it's only for setting defaults, i promise!
import uaParser from "ua-parser-js";
-import { initPushNotifications, topSafeHeight } from "./platform";
+import { topSafeHeight } from "./platform";
function supportsHLS() {
var video = document.createElement("video");
@@ -20,7 +20,6 @@ export default function usePlatform(): IsPlatform {
}
const electron = typeof window["AQ_ELECTRON"] !== "undefined";
return {
- initPushNotifications,
topSafeHeight,
isNative: false,
isIOS: false,
diff --git a/js/app/package.json b/js/app/package.json
index 56e91dac..b77862e7 100644
--- a/js/app/package.json
+++ b/js/app/package.json
@@ -39,9 +39,9 @@
"@react-navigation/native": "^6.1.18",
"@react-navigation/native-stack": "^6.11.0",
"@reduxjs/toolkit": "^2.3.0",
- "@tamagui/config": "^1.116.12",
- "@tamagui/lucide-icons": "^1.116.12",
- "@tamagui/toast": "^1.116.12",
+ "@tamagui/config": "^1.123.17",
+ "@tamagui/lucide-icons": "^1.123.17",
+ "@tamagui/toast": "^1.123.17",
"@tanstack/react-query": "^5.59.19",
"@zxing/browser": "^0.1.5",
"@zxing/library": "^0.21.3",
@@ -83,7 +83,7 @@
"react-native-webrtc": "^124.0.4",
"react-native-webview": "13.12.4",
"react-redux": "^9.1.2",
- "tamagui": "^1.116.12",
+ "tamagui": "^1.123.17",
"ua-parser-js": "^2.0.0-rc.1",
"uuid": "^11.0.2",
"viem": "^2.21.40",
@@ -100,8 +100,8 @@
"@config-plugins/react-native-webrtc": "^10.0.0",
"@expo/metro-config": "~0.19.0",
"@expo/metro-runtime": "~4.0.0",
- "@tamagui/babel-plugin": "^1.116.12",
- "@tamagui/metro-plugin": "^1.116.12",
+ "@tamagui/babel-plugin": "^1.123.17",
+ "@tamagui/metro-plugin": "^1.123.17",
"@types/babel__plugin-transform-runtime": "^7",
"@types/qrcode": "^1",
"@types/react": "~18.3.12",
diff --git a/js/app/src/router.tsx b/js/app/src/router.tsx
index 2bc009c0..e1d43ab6 100644
--- a/js/app/src/router.tsx
+++ b/js/app/src/router.tsx
@@ -4,6 +4,8 @@ import {
CommonActions,
DrawerActions,
LinkingOptions,
+ NavigatorScreenParams,
+ useLinkTo,
useNavigation,
} from "@react-navigation/native";
import { createNativeStackNavigator } from "@react-navigation/native-stack";
@@ -14,9 +16,10 @@ import {
Menu,
Settings as SettingsIcon,
User,
- Video,
ShieldQuestion,
Download,
+ X,
+ Video,
} from "@tamagui/lucide-icons";
import { Provider, Settings } from "components";
import AQLink from "components/aqlink";
@@ -24,7 +27,7 @@ import Login from "components/login/login";
import StreamList from "components/stream-list/stream-list";
import { selectUserProfile } from "features/bluesky/blueskySlice";
import usePlatform from "hooks/usePlatform";
-import { useEffect } from "react";
+import { useEffect, useState } from "react";
import {
ImageBackground,
ImageSourcePropType,
@@ -32,18 +35,26 @@ import {
StatusBar,
} from "react-native";
import { useAppDispatch, useAppSelector } from "store/hooks";
-import { Text, useTheme, View } from "tamagui";
+import { useTheme, Text, View, H3, Button } from "tamagui";
import AppReturnScreen from "./screens/app-return";
-import LiveScreen from "./screens/live";
import MultiScreen from "./screens/multi";
import StreamScreen from "./screens/stream";
import SupportScreen from "./screens/support";
-import WebcamScreen from "./screens/webcam";
-import StreamKeyScreen from "./screens/stream-key";
import AboutScreen from "./screens/about";
import DownloadScreen from "./screens/download";
import { hydrate, selectHydrated } from "features/base/baseSlice";
import AVSyncScreen from "./screens/av-sync";
+import {
+ clearNotification,
+ initPushNotifications,
+ registerNotificationToken,
+ selectNotificationDestination,
+ selectNotificationToken,
+} from "features/platform/platformSlice.native";
+import { pollSegments } from "features/streamplace/streamplaceSlice";
+import { useLiveUser } from "hooks/useLiveUser";
+import { useToastController } from "@tamagui/toast";
+import LiveDashboard from "./screens/live-dashboard";
function HomeScreen() {
return (
@@ -53,6 +64,31 @@ function HomeScreen() {
}
const Stack = createNativeStackNavigator();
+type HomeStackParamList = {
+ StreamList: undefined;
+ Stream: { user: string };
+};
+
+type RootStackParamList = {
+ Home: NavigatorScreenParams;
+ Multi: { config: string };
+ Support: undefined;
+ Settings: undefined;
+ GoLive: undefined;
+ LiveDashboard: undefined;
+ Login: undefined;
+ AVSync: undefined;
+ AppReturn: { scheme: string };
+ About: undefined;
+ Download: undefined;
+};
+
+declare global {
+ namespace ReactNavigation {
+ interface RootParamList extends RootStackParamList {}
+ }
+}
+
const linking: LinkingOptions = {
prefixes: ["place.stream://", "place.stream.dev://"],
config: {
@@ -69,9 +105,7 @@ const linking: LinkingOptions = {
Support: "support",
Settings: "settings",
GoLive: "golive",
- Live: "live",
- Webcam: "live/webcam",
- StreamKey: "live/stream-key",
+ LiveDashboard: "live",
Login: "login",
AVSync: "sync-test",
AppReturn: "app-return/:scheme",
@@ -133,13 +167,12 @@ const AvatarButton = () => {
};
export default function Router() {
- const { initPushNotifications, isWeb, isElectron } = usePlatform();
+ const { isWeb, isElectron } = usePlatform();
useEffect(() => {
- initPushNotifications();
+ if (isWeb && !isElectron) {
+ linking.prefixes.push(document.location.origin);
+ }
}, []);
- if (isWeb && !isElectron) {
- linking.prefixes.push(document.location.origin);
- }
return (
@@ -152,19 +185,53 @@ export function StreamplaceDrawer() {
const { isWeb, isElectron, isNative, isBrowser } = usePlatform();
const navigation = useNavigation();
const dispatch = useAppDispatch();
+ const [poppedUp, setPoppedUp] = useState(false);
+ const [livePopup, setLivePopup] = useState(false);
+
+ // Top-level stuff to handle push notification registration
useEffect(() => {
dispatch(hydrate());
- // const params = new URLSearchParams(document.location.search);
- // if (params.has("code")) {
- // navigation.dispatch(
- // CommonActions.reset({
- // index: 0,
- // routes: [{ name: "Login" }],
- // }),
- // );
- // }
+ dispatch(initPushNotifications());
}, []);
+ const notificationToken = useAppSelector(selectNotificationToken);
+ const userProfile = useAppSelector(selectUserProfile);
const hydrated = useAppSelector(selectHydrated);
+ useEffect(() => {
+ if (notificationToken) {
+ dispatch(registerNotificationToken());
+ }
+ }, [notificationToken, userProfile]);
+
+ // Stuff to handle incoming push notification routing
+ const notificationDestination = useAppSelector(selectNotificationDestination);
+ const linkTo = useLinkTo();
+
+ useEffect(() => {
+ if (notificationDestination) {
+ linkTo(notificationDestination);
+ dispatch(clearNotification());
+ }
+ }, [notificationDestination]);
+
+ // Top-level stuff to handle polling for live streamers
+ useEffect(() => {
+ dispatch(pollSegments());
+ const interval = setInterval(() => {
+ dispatch(pollSegments());
+ }, 5000);
+ return () => clearInterval(interval);
+ }, []);
+
+ const userIsLive = useLiveUser();
+ const toast = useToastController();
+
+ useEffect(() => {
+ if (userIsLive && !poppedUp) {
+ setPoppedUp(true);
+ setLivePopup(true);
+ }
+ }, [userIsLive, poppedUp]);
+
if (!hydrated) {
return ;
}
@@ -244,10 +311,10 @@ export function StreamplaceDrawer() {
}}
/>
Go Live,
+ drawerLabel: () => Live Dashboard,
drawerIcon: () => ,
drawerItemStyle: isNative ? { display: "none" } : undefined,
}}
@@ -268,22 +335,6 @@ export function StreamplaceDrawer() {
drawerItemStyle: { display: "none" },
}}
/>
- null,
- drawerItemStyle: { display: "none" },
- }}
- />
- null,
- drawerItemStyle: { display: "none" },
- }}
- />
+ {livePopup && (
+
+ {
+ navigation.navigate("LiveDashboard");
+ setLivePopup(false);
+ }}
+ position="relative"
+ >
+ ✨YOU ARE LIVE!!!✨
+
+
+ {isNative ? "Tap" : "Click"} here to go to the live dashboard
+
+
+
+ )}
>
);
}
diff --git a/js/app/src/screens/live-dashboard.tsx b/js/app/src/screens/live-dashboard.tsx
new file mode 100644
index 00000000..ae7b7bfe
--- /dev/null
+++ b/js/app/src/screens/live-dashboard.tsx
@@ -0,0 +1,154 @@
+import CreateLivestream from "components/create-livestream";
+import { Button, isWeb, View } from "tamagui";
+import { Player } from "components/player/player";
+import Loading from "components/loading/loading";
+import {
+ selectIsReady,
+ selectUserProfile,
+} from "features/bluesky/blueskySlice";
+import { useAppSelector } from "store/hooks";
+import { Redirect } from "components/aqlink";
+import React, { useState } from "react";
+import { useLiveUser } from "hooks/useLiveUser";
+import StreamKeyScreen from "components/live-dashboard/stream-key";
+
+enum StreamSource {
+ Start,
+ Camera,
+ StreamKey,
+}
+
+export default function LiveDashboard() {
+ const isReady = useAppSelector(selectIsReady);
+ const userProfile = useAppSelector(selectUserProfile);
+ const [streamSource, setStreamSource] = useState(StreamSource.Start);
+ const isLive = useLiveUser();
+ if (!isReady) {
+ return ;
+ }
+ if (!userProfile) {
+ return ;
+ }
+ let topPane: React.ReactNode;
+ let params = new URLSearchParams();
+ if (isWeb) {
+ params = new URLSearchParams(window.location.search);
+ }
+ if (isLive && streamSource !== StreamSource.Camera) {
+ topPane = ;
+ } else if (streamSource === StreamSource.Start) {
+ topPane = ;
+ } else if (streamSource === StreamSource.Camera) {
+ topPane = (
+
+ );
+ } else if (streamSource === StreamSource.StreamKey) {
+ topPane = ;
+ } else {
+ throw new Error("Invalid stream source");
+ }
+ let closeButton: React.ReactNode = <>>;
+ if (streamSource !== StreamSource.Start && !isLive) {
+ closeButton = (
+
+ );
+ }
+ return (
+
+
+ {topPane}
+ {closeButton}
+
+
+
+
+
+ );
+}
+
+import { Camera, FerrisWheel, X } from "@tamagui/lucide-icons";
+import { H6, Text } from "tamagui";
+import Waiting from "components/live-dashboard/waiting";
+const elems = [
+ {
+ title: "Stream your camera!",
+ Icon: Camera,
+ to: StreamSource.Camera,
+ },
+ {
+ title: "Stream from OBS!",
+ Icon: FerrisWheel,
+ to: StreamSource.StreamKey,
+ },
+];
+
+export function StreamSourcePicker({
+ onPick,
+}: {
+ onPick: (source: StreamSource) => void;
+}) {
+ const isReady = useAppSelector(selectIsReady);
+ const userProfile = useAppSelector(selectUserProfile);
+ if (!isReady) {
+ return ;
+ }
+ if (!userProfile) {
+ return ;
+ }
+ return (
+
+
+ {elems.map(({ Icon, title, to }, i) => (
+
+ onPick(to)}
+ flexGrow={0}
+ flexBasis={75}
+ >
+
+
+
+
+ {title}
+
+
+ {i < elems.length - 1 && (
+
+ OR
+
+ )}
+
+ ))}
+
+
+
+ );
+}
diff --git a/js/app/src/screens/webcam.native.tsx b/js/app/src/screens/webcam.native.tsx
deleted file mode 100644
index 3b5f75c2..00000000
--- a/js/app/src/screens/webcam.native.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { Player } from "components/player/player";
-
-export default function StreamScreen({ route }) {
- return ;
-}
diff --git a/js/app/src/screens/webcam.tsx b/js/app/src/screens/webcam.tsx
deleted file mode 100644
index facce823..00000000
--- a/js/app/src/screens/webcam.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import { Player } from "components/player/player";
-import { queryToProps } from "./util";
-import Loading from "components/loading/loading";
-import {
- selectIsReady,
- selectUserProfile,
-} from "features/bluesky/blueskySlice";
-import { useAppSelector } from "store/hooks";
-import { Redirect } from "components/aqlink";
-
-export default function StreamScreen() {
- const isReady = useAppSelector(selectIsReady);
- if (!isReady) {
- return ;
- }
- const userProfile = useAppSelector(selectUserProfile);
- if (!userProfile) {
- return ;
- }
- const params = new URLSearchParams(window.location.search);
- return ;
-}
diff --git a/js/app/tamagui.config.ts b/js/app/tamagui.config.ts
index 1ccc4fff..fdea029c 100644
--- a/js/app/tamagui.config.ts
+++ b/js/app/tamagui.config.ts
@@ -97,6 +97,7 @@ const streamplaceConfig = {
...configBase.themes.dark,
accentColor: "rgb(189 110 134)",
accentBackground: "rgb(17, 49, 35)",
+ background2: "rgb(18, 18, 18)",
},
},
};
diff --git a/lexicons/place/stream/key.json b/lexicons/place/stream/key.json
new file mode 100644
index 00000000..d2b13921
--- /dev/null
+++ b/lexicons/place/stream/key.json
@@ -0,0 +1,28 @@
+{
+ "lexicon": 1,
+ "id": "place.stream.key",
+ "defs": {
+ "main": {
+ "type": "record",
+ "description": "Record linking an atproto identity with a stream signing key",
+ "key": "tid",
+ "record": {
+ "type": "object",
+ "required": ["signingKey", "createdAt"],
+ "properties": {
+ "signingKey": {
+ "type": "string",
+ "maxLength": 57,
+ "minLength": 57,
+ "description": "The did:key signing key for the stream."
+ },
+ "createdAt": {
+ "type": "string",
+ "format": "datetime",
+ "description": "Client-declared timestamp when this key was created."
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/lexicons/place/stream/livestream.json b/lexicons/place/stream/livestream.json
new file mode 100644
index 00000000..b9b6c744
--- /dev/null
+++ b/lexicons/place/stream/livestream.json
@@ -0,0 +1,33 @@
+{
+ "lexicon": 1,
+ "id": "place.stream.livestream",
+ "defs": {
+ "main": {
+ "type": "record",
+ "description": "Record announcing a livestream is happening",
+ "key": "tid",
+ "record": {
+ "type": "object",
+ "required": ["title", "createdAt"],
+ "properties": {
+ "title": {
+ "type": "string",
+ "maxLength": 1400,
+ "maxGraphemes": 140,
+ "description": "The title of the livestream, as it will be announced to followers."
+ },
+ "url": {
+ "type": "string",
+ "format": "uri",
+ "description": "The URL where this stream can be found. This is primarily a hint for other Streamplace nodes to locate and replicate the stream."
+ },
+ "createdAt": {
+ "type": "string",
+ "format": "datetime",
+ "description": "Client-declared timestamp when this livestream started."
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index dc26fd36..4073f717 100644
--- a/package.json
+++ b/package.json
@@ -8,18 +8,20 @@
"check": "yarn run check:workspaces && git ls-files | xargs prettier --check --ignore-unknown",
"check:workspaces": "cd js/app && yarn run check",
"fix": "git ls-files | xargs prettier --write --ignore-unknown",
- "postinstall": "husky",
+ "postinstall": "husky && yarn run lexicons",
"build": "yarn workspaces foreach --all run build",
"prepare": "husky",
"release": "lerna publish --force-publish",
"precommit": "make precommit",
"app": "cd js/app && yarn run \"$@\"",
- "desktop": "cd js/desktop && yarn run \"$@\""
+ "desktop": "cd js/desktop && yarn run \"$@\"",
+ "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"
},
"keywords": [],
"author": "Streamplace",
"license": "MIT",
"devDependencies": {
+ "@atproto/lex-cli": "^0.5.6",
"husky": "^9.1.6",
"lerna": "^8.1.9",
"lint-staged": "^15.2.10",
diff --git a/pkg/api/api.go b/pkg/api/api.go
index 9f7faba6..3b1d3dbd 100644
--- a/pkg/api/api.go
+++ b/pkg/api/api.go
@@ -250,7 +250,8 @@ func (a *StreamplaceAPI) RedirectHandler(ctx context.Context) (http.Handler, err
}
type NotificationPayload struct {
- Token string `json:"token"`
+ Token string `json:"token"`
+ RepoDID string `json:"repoDID"`
}
func (a *StreamplaceAPI) HandleAPI404(ctx context.Context) http.HandlerFunc {
@@ -316,7 +317,7 @@ func (a *StreamplaceAPI) HandleNotification(ctx context.Context) http.HandlerFun
w.WriteHeader(400)
return
}
- err = a.Model.CreateNotification(n.Token)
+ err = a.Model.CreateNotification(n.Token, n.RepoDID)
if err != nil {
log.Log(ctx, "error creating notification", "error", err)
w.WriteHeader(400)
@@ -324,6 +325,14 @@ func (a *StreamplaceAPI) HandleNotification(ctx context.Context) http.HandlerFun
}
log.Log(ctx, "successfully created notification", "token", n.Token)
w.WriteHeader(200)
+ if n.RepoDID != "" {
+ go func() {
+ _, err := atproto.SyncBlueskyRepo(ctx, n.RepoDID, a.Model)
+ if err != nil {
+ log.Error(ctx, "error syncing bluesky repo after notification creation", "error", err)
+ }
+ }()
+ }
}
}
diff --git a/pkg/api/api_internal.go b/pkg/api/api_internal.go
index 23a6e6ed..6926653c 100644
--- a/pkg/api/api_internal.go
+++ b/pkg/api/api_internal.go
@@ -26,6 +26,7 @@ import (
"stream.place/streamplace/pkg/mist/mistconfig"
"stream.place/streamplace/pkg/mist/misttriggers"
"stream.place/streamplace/pkg/model"
+ notificationpkg "stream.place/streamplace/pkg/notifications"
v0 "stream.place/streamplace/pkg/schema/v0"
)
@@ -294,6 +295,87 @@ func (a *StreamplaceAPI) InternalHandler(ctx context.Context) (http.Handler, err
w.Write(bs)
})
+ router.GET("/followers/:user", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
+ user := p.ByName("user")
+ if user == "" {
+ errors.WriteHTTPBadRequest(w, "user required", nil)
+ return
+ }
+
+ followers, err := a.Model.GetUserFollowers(ctx, user)
+ if err != nil {
+ errors.WriteHTTPInternalServerError(w, "unable to get followers", err)
+ return
+ }
+ bs, err := json.Marshal(followers)
+ if err != nil {
+ errors.WriteHTTPInternalServerError(w, "unable to marshal json", err)
+ return
+ }
+ w.Write(bs)
+ })
+
+ router.GET("/following/:user", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
+ user := p.ByName("user")
+ if user == "" {
+ errors.WriteHTTPBadRequest(w, "user required", nil)
+ return
+ }
+
+ followers, err := a.Model.GetUserFollowing(ctx, user)
+ if err != nil {
+ errors.WriteHTTPInternalServerError(w, "unable to get followers", err)
+ return
+ }
+ bs, err := json.Marshal(followers)
+ if err != nil {
+ errors.WriteHTTPInternalServerError(w, "unable to marshal json", err)
+ return
+ }
+ w.Write(bs)
+ })
+
+ router.GET("/notifications", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
+ notifications, err := a.Model.ListNotifications()
+ if err != nil {
+ errors.WriteHTTPInternalServerError(w, "unable to get notifications", err)
+ return
+ }
+ bs, err := json.Marshal(notifications)
+ if err != nil {
+ errors.WriteHTTPInternalServerError(w, "unable to marshal json", err)
+ return
+ }
+ w.Write(bs)
+ })
+
+ router.POST("/notification-blast", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
+ var payload notificationpkg.NotificationBlast
+ if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
+ errors.WriteHTTPBadRequest(w, "invalid request body", err)
+ return
+ }
+ notifications, err := a.Model.ListNotifications()
+ if err != nil {
+ errors.WriteHTTPInternalServerError(w, "unable to get notifications", err)
+ return
+ }
+ if a.FirebaseNotifier == nil {
+ errors.WriteHTTPInternalServerError(w, "firebase notifier not initialized", nil)
+ return
+ }
+ tokens := []string{}
+ for _, not := range notifications {
+ tokens = append(tokens, not.Token)
+ }
+ err = a.FirebaseNotifier.Blast(ctx, tokens, &payload)
+ if err != nil {
+ errors.WriteHTTPInternalServerError(w, "unable to blast notifications", err)
+ return
+ }
+ w.WriteHeader(http.StatusNoContent)
+ })
+
router.PUT("/settings/:id", func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Methods", "PUT")
diff --git a/pkg/api/api_test.go b/pkg/api/api_test.go
index 5646e681..36a869b4 100644
--- a/pkg/api/api_test.go
+++ b/pkg/api/api_test.go
@@ -85,7 +85,7 @@ func TestRedirectHandler(t *testing.T) {
type MockFirebase struct {
}
-func (m *MockFirebase) Blast(ctx context.Context, nots []model.Notification, nb *notifications.NotificationBlast) error {
+func (m *MockFirebase) Blast(ctx context.Context, nots []string, nb *notifications.NotificationBlast) error {
return nil
}
diff --git a/pkg/api/playback.go b/pkg/api/playback.go
index 7ff50213..f9c68b6e 100644
--- a/pkg/api/playback.go
+++ b/pkg/api/playback.go
@@ -19,6 +19,7 @@ import (
"golang.org/x/sync/errgroup"
"stream.place/streamplace/pkg/aqtime"
"stream.place/streamplace/pkg/atproto"
+ "stream.place/streamplace/pkg/constants"
"stream.place/streamplace/pkg/errors"
apierrors "stream.place/streamplace/pkg/errors"
"stream.place/streamplace/pkg/log"
@@ -31,7 +32,7 @@ func (a *StreamplaceAPI) NormalizeUser(ctx context.Context, user string) (string
user = alias
}
// did:key, pass through unaltered
- if strings.HasPrefix(user, atproto.DID_KEY_PREFIX) {
+ if strings.HasPrefix(user, constants.DID_KEY_PREFIX) {
return user, nil
}
// only other allowed case is a bluesky handle
diff --git a/pkg/atproto/atproto.go b/pkg/atproto/atproto.go
index 680e170c..003ab39c 100644
--- a/pkg/atproto/atproto.go
+++ b/pkg/atproto/atproto.go
@@ -4,14 +4,17 @@ import (
"bytes"
"context"
"fmt"
+ "reflect"
"strings"
"sync"
- "time"
comatproto "github.com/bluesky-social/indigo/api/atproto"
+ "github.com/bluesky-social/indigo/api/bsky"
+ _ "github.com/bluesky-social/indigo/api/bsky"
atcrypto "github.com/bluesky-social/indigo/atproto/crypto"
"github.com/bluesky-social/indigo/atproto/identity"
"github.com/bluesky-social/indigo/atproto/syntax"
+ lexutil "github.com/bluesky-social/indigo/lex/util"
"github.com/bluesky-social/indigo/repo"
"github.com/bluesky-social/indigo/util"
"github.com/bluesky-social/indigo/xrpc"
@@ -19,16 +22,14 @@ import (
"github.com/ipfs/go-datastore"
blockstore "github.com/ipfs/go-ipfs-blockstore"
"stream.place/streamplace/pkg/aqhttp"
+ "stream.place/streamplace/pkg/aqtime"
+ "stream.place/streamplace/pkg/constants"
"stream.place/streamplace/pkg/log"
"stream.place/streamplace/pkg/model"
+ "stream.place/streamplace/pkg/streamplace"
)
var SyncGetRepo = comatproto.SyncGetRepo
-var STREAMPLACE_COLLECTION = "place.stream.key"
-var STREAMPLACE_SIGNING_KEY = "signingKey"
-
-const DID_KEY_PREFIX = "did:key"
-const ADDRESS_KEY_PREFIX = "0x"
// handleLocks provides per-handle synchronization
var handleLocks = struct {
@@ -84,6 +85,20 @@ func SyncBlueskyRepo(ctx context.Context, handle string, mod model.Model) (*mode
if oldRepo != nil {
log.Log(ctx, "found existing DID record", "did", oldRepo.DID, "version", oldRepo.Version)
rev = oldRepo.Version
+ } else {
+ // create an empty repo while we sync. this is useful because we'll start monitoring the firehose for
+ // any new follows and such from this user while we're syncing, which can take a long time
+ newRepo := model.Repo{
+ DID: ident.DID.String(),
+ PDS: ident.PDSEndpoint(),
+ Version: "",
+ RootCID: "",
+ Handle: ident.Handle.String(),
+ }
+ err = mod.UpdateRepo(&newRepo)
+ if err != nil {
+ return nil, fmt.Errorf("failed to create empty DID record for %s: %w", ident.DID.String(), err)
+ }
}
log.Log(ctx, "resolved bluesky identity", "did", ident.DID, "handle", ident.Handle, "pds", ident.PDSEndpoint())
@@ -133,6 +148,19 @@ func SyncBlueskyRepo(ctx context.Context, handle string, mod model.Model) (*mode
return nil, fmt.Errorf("failed to parse repo CAR data for %s: %w", ident.DID.String(), err)
}
+ mstNodes := map[string]string{}
+ r.ForEach(ctx, "", func(k string, v cid.Cid) error {
+ nsid, rkey, err := syntax.ParseRepoPath(k)
+ if err != nil {
+ log.Warn(ctx, "failed to parse repo path", "k", k, "err", err)
+ return err
+ }
+ hash := v.Hash().HexString()
+ log.Debug(ctx, "got mst node", "cid", v, "rkey", rkey, "nsid", nsid, "hash", hash)
+ mstNodes[hash] = rkey.String()
+ return nil
+ })
+
// extract DID from repo commit
sc := r.SignedCommit()
signerDID, err := syntax.ParseDID(sc.Did)
@@ -143,56 +171,67 @@ func SyncBlueskyRepo(ctx context.Context, handle string, mod model.Model) (*mode
return nil, fmt.Errorf("signer DID %s does not match identity %s", signerDID, ident.DID.String())
}
- processed := 0
bs = r.Blockstore()
cst := util.CborStore(bs)
allKeys, err := bs.AllKeysChan(ctx)
if err != nil {
return nil, fmt.Errorf("failed to get all keys: %w", err)
}
- signingKeys := []string{}
for k := range allKeys {
- log.Debug(ctx, "processing key", "key", k)
+ blk, err := bs.Get(ctx, k)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get block for key %s: %w", k, err)
+ }
rec := map[string]any{}
- err := cst.Get(ctx, k, &rec)
+ err = cst.Get(ctx, k, &rec)
if err != nil {
return nil, fmt.Errorf("failed to get block for key %s: %w", k, err)
}
- log.Debug(ctx, "got block", "key", k, "size", len(rec), "record", rec)
typ, ok := rec["$type"]
if !ok {
+ log.Debug(ctx, "record type not found", "key", k)
continue
}
- if typ != STREAMPLACE_COLLECTION {
- continue
+ log.Debug(ctx, "record type", "key", k, "type", typ)
+ cb, err := lexutil.CborDecodeValue(blk.RawData())
+ log.Debug(ctx, "processing key", "key", k, "cbor", cb)
+ switch rec := cb.(type) {
+ case *bsky.GraphFollow:
+ rec.UnmarshalCBOR(bytes.NewReader(blk.RawData()))
+ log.Debug(ctx, "creating follow", "follow", rec)
+ hash := k.Hash().HexString()
+ rkey, ok := mstNodes[hash]
+ if !ok {
+ log.Warn(ctx, "no mst node found for follow", "key", k, "hash", hash)
+ continue
+ }
+ err := mod.CreateFollow(ctx, signerDID.String(), rkey, rec)
+ if err != nil {
+ log.Error(ctx, "failed to create follow", "err", err)
+ }
+ case *streamplace.Key:
+ log.Debug(ctx, "creating key", "key", rec)
+ time, err := aqtime.FromString(rec.CreatedAt)
+ if err != nil {
+ log.Error(ctx, "failed to parse createdAt", "err", err)
+ continue
+ }
+ key := model.SigningKey{
+ DID: rec.SigningKey,
+ CreatedAt: time.Time(),
+ RepoDID: ident.DID.String(),
+ }
+ err = mod.UpdateSigningKey(&key)
+ if err != nil {
+ log.Error(ctx, "failed to create signing key", "err", err)
+ }
+ default:
+ log.Debug(ctx, "unhandled record type", "type", reflect.TypeOf(rec))
}
- processed += 1
- streamplaceKeyAny, ok := rec[STREAMPLACE_SIGNING_KEY]
- if !ok {
- continue
- }
- streamplaceKey, ok := streamplaceKeyAny.(string)
- if !ok {
- continue
- }
- signingKeys = append(signingKeys, streamplaceKey)
- }
- log.Log(ctx, "processed new posts", "postCount", processed, "signingKeys", signingKeys)
-
- for _, key := range signingKeys {
- err := parseSigningKey(ctx, key)
if err != nil {
- log.Warn(ctx, "ignoring non-DID key", "key", key, "error", err)
+ log.Debug(ctx, "failed to decode block for key", "key", k, "error", err)
continue
}
- err = mod.UpdateSigningKey(&model.SigningKey{
- DID: key,
- CreatedAt: time.Now(),
- RepoDID: ident.DID.String(),
- })
- if err != nil {
- return nil, fmt.Errorf("failed to create signing key for %s: %w", key, err)
- }
}
newRepo := model.Repo{
@@ -211,7 +250,7 @@ func SyncBlueskyRepo(ctx context.Context, handle string, mod model.Model) (*mode
}
func parseSigningKey(ctx context.Context, key string) error {
- if !strings.HasPrefix(key, DID_KEY_PREFIX) {
+ if !strings.HasPrefix(key, constants.DID_KEY_PREFIX) {
return fmt.Errorf("invalid key format for DID key: %s", key)
}
_, err := atcrypto.ParsePublicDIDKey(key)
diff --git a/pkg/atproto/firehose.go b/pkg/atproto/firehose.go
new file mode 100644
index 00000000..884d84cf
--- /dev/null
+++ b/pkg/atproto/firehose.go
@@ -0,0 +1,289 @@
+package atproto
+
+import (
+ "bytes"
+ "context"
+ "encoding/json"
+ "fmt"
+ "log/slog"
+ "net/http"
+ "net/url"
+ "reflect"
+ "runtime"
+ "time"
+
+ comatproto "github.com/bluesky-social/indigo/api/atproto"
+ "github.com/bluesky-social/indigo/api/bsky"
+ "github.com/bluesky-social/indigo/atproto/data"
+ "github.com/bluesky-social/indigo/atproto/syntax"
+ "github.com/bluesky-social/indigo/events"
+ "github.com/bluesky-social/indigo/events/schedulers/parallel"
+ lexutil "github.com/bluesky-social/indigo/lex/util"
+ "github.com/bluesky-social/indigo/repo"
+ "github.com/bluesky-social/indigo/repomgr"
+ "golang.org/x/sync/errgroup"
+ "stream.place/streamplace/pkg/aqhttp"
+ "stream.place/streamplace/pkg/aqtime"
+ "stream.place/streamplace/pkg/config"
+ "stream.place/streamplace/pkg/constants"
+ "stream.place/streamplace/pkg/log"
+ "stream.place/streamplace/pkg/model"
+ notificationpkg "stream.place/streamplace/pkg/notifications"
+ "stream.place/streamplace/pkg/streamplace"
+
+ "github.com/gorilla/websocket"
+)
+
+type FirehoseConsumer struct {
+ cli *config.CLI
+ mod model.Model
+ lastSeen time.Time
+ lastEvent time.Time
+ noter notificationpkg.FirebaseNotifier
+}
+
+func StartFirehose(ctx context.Context, cli *config.CLI, mod model.Model, noter notificationpkg.FirebaseNotifier) error {
+ ctx = log.WithLogValues(ctx, "func", "StartFirehose")
+ ctx, cancel := context.WithCancel(ctx)
+ defer cancel()
+ dialer := websocket.DefaultDialer
+ u, err := url.Parse(cli.RelayHost)
+ if err != nil {
+ return fmt.Errorf("invalid relayHost URI: %w", err)
+ }
+ u.Path = "xrpc/com.atproto.sync.subscribeRepos"
+ // if cursor != 0 {
+ // u.RawQuery = fmt.Sprintf("cursor=%d", cursor)
+ // }
+ con, _, err := dialer.Dial(u.String(), http.Header{
+ "User-Agent": []string{aqhttp.UserAgent},
+ })
+ if err != nil {
+ return fmt.Errorf("subscribing to firehose failed (dialing): %w", err)
+ }
+
+ fc := &FirehoseConsumer{
+ cli: cli,
+ mod: mod,
+ lastSeen: time.Now(),
+ noter: noter,
+ }
+
+ rsc := &events.RepoStreamCallbacks{
+ RepoCommit: func(evt *comatproto.SyncSubscribeRepos_Commit) error {
+ go fc.handleCommitEventOps(ctx, evt, mod)
+ return nil
+ },
+ Error: func(evt *events.ErrorFrame) error {
+ log.Error(ctx, "firehose error", "err", evt.Error, "message", evt.Message)
+ cancel()
+ return fmt.Errorf("firehose error: %s", evt.Error)
+ },
+ }
+
+ scheduler := parallel.NewScheduler(
+ 10,
+ 100,
+ cli.RelayHost,
+ rsc.EventHandler,
+ )
+
+ log.Log(ctx, "starting firehose consumer", "relayHost", cli.RelayHost)
+
+ g, ctx := errgroup.WithContext(ctx)
+
+ g.Go(func() error {
+ return events.HandleRepoStream(ctx, con, scheduler, nil)
+ })
+
+ g.Go(func() error {
+ ticker := time.NewTicker(5 * time.Second)
+ defer ticker.Stop()
+ for {
+ select {
+ case <-ctx.Done():
+ return nil
+ case <-ticker.C:
+ since := time.Since(fc.lastEvent)
+ goroutines := runtime.NumGoroutine()
+ if since > 10*time.Second {
+ log.Warn(ctx, fmt.Sprintf("firehose is %s behind real time", since), "goroutines", goroutines)
+ } else {
+ log.Debug(ctx, fmt.Sprintf("firehose is %s behind real time", since), "goroutines", goroutines)
+ }
+ if time.Since(fc.lastSeen) > 10*time.Second {
+ log.Warn(ctx, fmt.Sprintf("firehose dry; no new events for %s", time.Since(fc.lastSeen)))
+ }
+ }
+ }
+ })
+
+ return g.Wait()
+}
+
+var CollectionFilter = []string{
+ constants.PLACE_STREAM_KEY,
+ constants.PLACE_STREAM_LIVESTREAM,
+ constants.APP_BSKY_GRAPH_FOLLOW,
+}
+
+func (fc *FirehoseConsumer) handleCommitEventOps(ctx context.Context, evt *comatproto.SyncSubscribeRepos_Commit, mod model.Model) error {
+ ctx = log.WithLogValues(ctx, "event", "commit", "did", evt.Repo, "rev", evt.Rev, "seq", fmt.Sprintf("%d", evt.Seq), "func", "handleCommitEventOps")
+ fc.lastSeen = time.Now()
+
+ if evt.TooBig {
+ log.Warn(ctx, "skipping tooBig events for now")
+ return nil
+ }
+
+ rr, err := repo.ReadRepoFromCar(ctx, bytes.NewReader(evt.Blocks))
+ if err != nil {
+ log.Error(ctx, "failed to read repo from car", "err", err)
+ return nil
+ }
+
+ for _, op := range evt.Ops {
+ collection, rkey, err := syntax.ParseRepoPath(op.Path)
+ if err != nil {
+ log.Error(ctx, "invalid path in repo op", "eventKind", op.Action, "path", op.Path)
+ return nil
+ }
+ ctx = log.WithLogValues(ctx, "eventKind", op.Action, "collection", collection.String(), "rkey", rkey.String())
+
+ if len(CollectionFilter) > 0 {
+ keep := false
+ for _, c := range CollectionFilter {
+ if collection.String() == c {
+ keep = true
+ break
+ }
+ }
+ if !keep {
+ continue
+ }
+ }
+
+ aqt, err := aqtime.FromString(evt.Time)
+ if err != nil {
+ log.Error(ctx, "failed to parse time", "err", err)
+ continue
+ }
+ fc.lastEvent = aqt.Time()
+
+ r, err := mod.GetRepo(evt.Repo)
+ if err != nil {
+ log.Error(ctx, "failed to get repo", "err", err)
+ continue
+ }
+ if r == nil {
+ // someone we don't know aboutd
+ continue
+ }
+ log.Warn(ctx, "got record we care about", "collection", collection, "rkey", rkey)
+
+ out := make(map[string]interface{})
+ out["seq"] = evt.Seq
+ out["repo"] = evt.Repo
+ out["rev"] = evt.Rev
+ out["time"] = evt.Time
+ out["collection"] = collection
+ out["rkey"] = rkey
+
+ ek := repomgr.EventKind(op.Action)
+ switch ek {
+ case repomgr.EvtKindCreateRecord, repomgr.EvtKindUpdateRecord:
+ // read the record bytes from blocks, and verify CID
+ rc, recCBOR, err := rr.GetRecordBytes(ctx, op.Path)
+ if err != nil {
+ log.Error(ctx, "reading record from event blocks (CAR)", "err", err)
+ break
+ }
+ if op.Cid == nil || lexutil.LexLink(rc) != *op.Cid {
+ log.Error(ctx, "mismatch between commit op CID and record block", "recordCID", rc, "opCID", op.Cid)
+ break
+ }
+
+ switch ek {
+ case repomgr.EvtKindCreateRecord:
+ out["action"] = "create"
+ case repomgr.EvtKindUpdateRecord:
+ out["action"] = "update"
+ default:
+ log.Error(ctx, "impossible event kind", "kind", ek)
+ break
+ }
+ cb, err := lexutil.CborDecodeValue(*recCBOR)
+ if err != nil {
+ log.Error(ctx, "failed to parse record CBOR", "err", err)
+ continue
+ }
+ switch rec := cb.(type) {
+ case *bsky.GraphFollow:
+ log.Debug(ctx, "creating follow", "userDID", evt.Repo, "subjectDID", rec.Subject, "rev", evt.Rev)
+ err := mod.CreateFollow(ctx, evt.Repo, rkey.String(), rec)
+ if err != nil {
+ log.Error(ctx, "failed to create follow", "err", err)
+ }
+ case *streamplace.Livestream:
+ var u string
+ if rec.Url != nil {
+ u = *rec.Url
+ }
+ log.Warn(ctx, "Livestream detected! Blasting followers!", "title", rec.Title, "url", u, "createdAt", rec.CreatedAt, "repo", evt.Repo)
+ notifications, err := mod.GetFollowersNotificationTokens(evt.Repo)
+ if err != nil {
+ return err
+ }
+
+ nb := ¬ificationpkg.NotificationBlast{
+ Title: fmt.Sprintf("🔴 @%s is LIVE!", r.Handle),
+ Body: rec.Title,
+ Data: map[string]string{
+ "path": fmt.Sprintf("/%s", r.Handle),
+ },
+ }
+ if fc.noter != nil {
+ err := fc.noter.Blast(ctx, notifications, nb)
+ if err != nil {
+ log.Error(ctx, "failed to blast notifications", "err", err)
+ } else {
+ log.Log(ctx, "sent notifications", "user", evt.Repo, "count", len(notifications), "content", nb)
+ }
+ } else {
+ log.Log(ctx, "no notifier configured, skipping notifications", "user", evt.Repo, "count", len(notifications), "content", nb)
+ }
+ default:
+ log.Debug(ctx, "unhandled record type", "type", reflect.TypeOf(rec))
+ }
+ d, err := data.UnmarshalCBOR(*recCBOR)
+ if err != nil {
+ slog.Warn("failed to parse record CBOR")
+ continue
+ }
+ out["cid"] = op.Cid.String()
+ out["record"] = d
+ b, err := json.Marshal(out)
+ if err != nil {
+ return err
+ }
+ log.Debug(ctx, "got record", "record", string(b))
+ case repomgr.EvtKindDeleteRecord:
+ out["action"] = "delete"
+ if collection.String() == constants.APP_BSKY_GRAPH_FOLLOW {
+ log.Debug(ctx, "deleting follow", "userDID", evt.Repo, "subjectDID", rkey.String())
+ err := mod.DeleteFollow(ctx, evt.Repo, rkey.String())
+ if err != nil {
+ log.Error(ctx, "failed to delete follow", "err", err)
+ }
+ }
+ b, err := json.Marshal(out)
+ if err != nil {
+ return err
+ }
+ log.Debug(ctx, "got record", "record", string(b))
+ default:
+ log.Error(ctx, "unexpected record op kind")
+ }
+ }
+ return nil
+}
diff --git a/pkg/cmd/streamplace.go b/pkg/cmd/streamplace.go
index 0136f0b1..f57b0323 100644
--- a/pkg/cmd/streamplace.go
+++ b/pkg/cmd/streamplace.go
@@ -4,7 +4,6 @@ import (
"bytes"
"context"
"crypto"
- "errors"
"flag"
"fmt"
"os"
@@ -17,7 +16,6 @@ import (
"time"
"golang.org/x/term"
- "gorm.io/gorm"
"stream.place/streamplace/pkg/aqhttp"
"stream.place/streamplace/pkg/aqtime"
"stream.place/streamplace/pkg/atproto"
@@ -26,7 +24,6 @@ import (
"stream.place/streamplace/pkg/log"
"stream.place/streamplace/pkg/media"
"stream.place/streamplace/pkg/notifications"
- notificationpkg "stream.place/streamplace/pkg/notifications"
"stream.place/streamplace/pkg/replication"
"stream.place/streamplace/pkg/replication/boring"
v0 "stream.place/streamplace/pkg/schema/v0"
@@ -125,7 +122,7 @@ func start(build *config.BuildFlags, platformJobs []jobFunc) error {
fs.BoolVar(&cli.TestStream, "test-stream", false, "run a built-in test stream on boot")
doValidate := fs.Bool("validate", false, "validate media")
verbosity := fs.String("v", "3", "log verbosity level")
-
+ fs.StringVar(&cli.RelayHost, "relay-host", "wss://bsky.network", "websocket url for relay firehose")
fs.Bool("insecure", false, "DEPRECATED, does nothing.")
version := fs.Bool("version", false, "print version and exit")
@@ -307,6 +304,10 @@ func start(build *config.BuildFlags, platformJobs []jobFunc) error {
return a.ServeInternalHTTP(ctx)
})
+ group.Go(func() error {
+ return atproto.StartFirehose(ctx, &cli, mod, noter)
+ })
+
group.Go(func() error {
newSeg := mm.NewSegment()
for {
@@ -314,7 +315,6 @@ func start(build *config.BuildFlags, platformJobs []jobFunc) error {
case <-ctx.Done():
return nil
case not := <-newSeg:
- prevSeg, prevErr := mod.LatestSegmentForUser(not.Segment.RepoDID)
err := mod.CreateSegment(not.Segment)
if err != nil {
log.Error(ctx, "could not add segment to database", "error", err)
@@ -353,41 +353,6 @@ func start(build *config.BuildFlags, platformJobs []jobFunc) error {
log.Error(ctx, "could not create thumbnail", "error", err)
}
}()
- go func() {
- err := func() error {
- if prevErr != nil && !errors.Is(prevErr, gorm.ErrRecordNotFound) {
- log.Error(ctx, "could not retreive previous segment", "error", prevErr)
- return prevErr
- }
- if prevSeg != nil {
- dur := not.Segment.StartTime.Sub(prevSeg.StartTime)
- if prevSeg != nil && dur < (5*time.Minute) {
- log.Debug(ctx, "skipping notification, less than 5 minutes since last segment", "user", not.Segment.RepoDID, "duration", dur)
- // it's been less than 5 minutes since the last segment, skip notification
- return nil
- }
- }
-
- notifications, err := mod.ListNotifications()
- if err != nil {
- return err
- }
-
- nb := ¬ificationpkg.NotificationBlast{
- Streamer: not.Metadata.Creator,
- Title: not.Metadata.Title,
- }
- if noter != nil {
- noter.Blast(ctx, notifications, nb)
- } else {
- log.Log(ctx, "no notifier configured, skipping notifications", "user", not.Segment.RepoDID, "count", len(notifications), "content", nb)
- }
- return nil
- }()
- if err != nil {
- log.Error(ctx, "could not send notification", "error", err)
- }
- }()
}
}
})
diff --git a/pkg/config/config.go b/pkg/config/config.go
index 505d2683..36fe1222 100644
--- a/pkg/config/config.go
+++ b/pkg/config/config.go
@@ -19,7 +19,7 @@ import (
"github.com/peterbourgon/ff/v3"
"golang.org/x/exp/rand"
"stream.place/streamplace/pkg/aqtime"
- "stream.place/streamplace/pkg/atproto"
+ "stream.place/streamplace/pkg/constants"
"stream.place/streamplace/pkg/crypto/aqpub"
)
@@ -72,6 +72,7 @@ type CLI struct {
PKCS11KeypairLabel string
PKCS11KeypairID string
StreamerName string
+ RelayHost string
Debug map[string]map[string]int
AllowedStreams []string
Peers []string
@@ -334,7 +335,7 @@ func (cli *CLI) StreamIsAllowed(did string) error {
// if the user set no test streams, anyone can stream
openServer := len(cli.AllowedStreams) == 0 || (cli.TestStream && len(cli.AllowedStreams) == 1)
// but only valid atproto accounts! did:key is only allowed for our local test stream
- isDIDKey := strings.HasPrefix(did, atproto.DID_KEY_PREFIX)
+ isDIDKey := strings.HasPrefix(did, constants.DID_KEY_PREFIX)
if openServer && !isDIDKey {
return nil
}
diff --git a/pkg/constants/constants.go b/pkg/constants/constants.go
new file mode 100644
index 00000000..b87be6b2
--- /dev/null
+++ b/pkg/constants/constants.go
@@ -0,0 +1,9 @@
+package constants
+
+var PLACE_STREAM_KEY = "place.stream.key"
+var PLACE_STREAM_LIVESTREAM = "place.stream.livestream"
+var STREAMPLACE_SIGNING_KEY = "signingKey"
+var APP_BSKY_GRAPH_FOLLOW = "app.bsky.graph.follow"
+
+const DID_KEY_PREFIX = "did:key"
+const ADDRESS_KEY_PREFIX = "0x"
diff --git a/pkg/gen/gen.go b/pkg/gen/gen.go
new file mode 100644
index 00000000..d428eeec
--- /dev/null
+++ b/pkg/gen/gen.go
@@ -0,0 +1,27 @@
+package main
+
+import (
+ "reflect"
+
+ "github.com/bluesky-social/indigo/mst"
+ "stream.place/streamplace/pkg/streamplace"
+
+ cbg "github.com/whyrusleeping/cbor-gen"
+)
+
+func main() {
+ var typVals []any
+ for _, typ := range mst.CBORTypes() {
+ typVals = append(typVals, reflect.New(typ).Elem().Interface())
+ }
+
+ genCfg := cbg.Gen{
+ MaxStringLength: 1_000_000,
+ }
+
+ if err := genCfg.WriteMapEncodersToFile("pkg/streamplace/cbor_gen.go", "streamplace",
+ streamplace.Key{}, streamplace.Livestream{},
+ ); err != nil {
+ panic(err)
+ }
+}
diff --git a/pkg/log/log.go b/pkg/log/log.go
index 50848bf8..b46ee864 100644
--- a/pkg/log/log.go
+++ b/pkg/log/log.go
@@ -52,7 +52,7 @@ var traceLogLevel glog.Level = 9
// basic type to represent logging container. logging context is immutable after
// creation, so we don't have to worry about locking.
-type metadata map[string]any
+type metadata [][]string
func init() {
// Set default v level to 3; this is overridden in main() but is useful for tests
@@ -70,11 +70,19 @@ func V(level glog.Level) *VerboseLogger {
return &VerboseLogger{level: level}
}
+func (m metadata) Map() map[string]string {
+ out := map[string]string{}
+ for _, pair := range m {
+ out[pair[0]] = pair[1]
+ }
+ return out
+}
+
func (m metadata) Flat() []any {
out := []any{}
- for k, v := range m {
- out = append(out, k)
- out = append(out, v)
+ for _, pair := range m {
+ out = append(out, pair[0])
+ out = append(out, pair[1])
}
return out
}
@@ -87,14 +95,26 @@ func WithLogValues(ctx context.Context, args ...string) context.Context {
oldMetadata = metadata{}
}
var newMetadata = metadata{}
- for k, v := range oldMetadata {
- newMetadata[k] = v
+ for _, pair := range oldMetadata {
+ newMetadata = append(newMetadata, []string{pair[0], pair[1]})
}
for i := range args {
if i%2 == 0 {
continue
}
- newMetadata[args[i-1]] = args[i]
+ newKey := args[i-1]
+ newValue := args[i]
+ found := false
+ for _, pair := range newMetadata {
+ if pair[0] == newKey {
+ pair[1] = newValue
+ found = true
+ break
+ }
+ }
+ if !found {
+ newMetadata = append(newMetadata, []string{newKey, newValue})
+ }
}
return context.WithValue(ctx, clogContextKey, newMetadata)
}
@@ -121,17 +141,12 @@ func (v *VerboseLogger) log(ctx context.Context, message string, fn func(string,
// meta is {"func": "ToHLS", "file": "gstreamer.go"}
// we want to use the highest level between debug and meta
if debugOk && metaOk {
- for mk, mv := range meta {
+ for mk, mv := range meta.Map() {
debugValuesForMetaValue, ok := debug[mk]
if !ok {
continue
}
- mvstr, ok := mv.(string)
- if !ok {
- // TODO: possible we will need to handle numeric types
- continue
- }
- ll, ok := debugValuesForMetaValue[mvstr]
+ ll, ok := debugValuesForMetaValue[mv]
if !ok {
continue
}
diff --git a/pkg/media/media.go b/pkg/media/media.go
index 12338e08..1161e174 100644
--- a/pkg/media/media.go
+++ b/pkg/media/media.go
@@ -18,6 +18,7 @@ import (
"stream.place/streamplace/pkg/aqtime"
"stream.place/streamplace/pkg/atproto"
"stream.place/streamplace/pkg/config"
+ "stream.place/streamplace/pkg/constants"
"stream.place/streamplace/pkg/crypto/signers"
"stream.place/streamplace/pkg/log"
"stream.place/streamplace/pkg/model"
@@ -343,7 +344,7 @@ func (mm *MediaManager) ValidateMP4(ctx context.Context, input io.Reader) error
// special case for test signers that are only signed with a key
var repoDID string
var signingKeyDID string
- if strings.HasPrefix(meta.Creator, atproto.DID_KEY_PREFIX) {
+ if strings.HasPrefix(meta.Creator, constants.DID_KEY_PREFIX) {
signingKeyDID = meta.Creator
repoDID = meta.Creator
} else {
diff --git a/pkg/model/follow.go b/pkg/model/follow.go
new file mode 100644
index 00000000..79688960
--- /dev/null
+++ b/pkg/model/follow.go
@@ -0,0 +1,51 @@
+package model
+
+import (
+ "context"
+ "fmt"
+ "time"
+
+ "github.com/bluesky-social/indigo/api/bsky"
+ "stream.place/streamplace/pkg/aqtime"
+)
+
+type Follow struct {
+ UserDID string `gorm:"primaryKey;index:user_idx;column:user_did"`
+ SubjectDID string `gorm:"primaryKey;index:subject_idx;column:subject_did"`
+ RKey string `gorm:"index;column:rkey"`
+ CreatedAt time.Time
+}
+
+func (m *DBModel) CreateFollow(ctx context.Context, userDID, rkey string, follow *bsky.GraphFollow) error {
+ at, err := aqtime.FromString(follow.CreatedAt)
+ if err != nil {
+ return fmt.Errorf("failed to parse follow createdAt: %w", err)
+ }
+ return m.DB.Save(&Follow{
+ UserDID: userDID,
+ SubjectDID: follow.Subject,
+ RKey: rkey,
+ CreatedAt: at.Time(),
+ }).Error
+}
+
+func (m *DBModel) DeleteFollow(ctx context.Context, userDID, rkey string) error {
+ res := m.DB.Where("user_did = ? AND rkey = ?", userDID, rkey).Delete(&Follow{})
+ if res.Error != nil {
+ return fmt.Errorf("failed to delete follow: %w", res.Error)
+ }
+ if res.RowsAffected == 0 {
+ return fmt.Errorf("no follow found for userDID %s and rkey %s", userDID, rkey)
+ }
+ return nil
+}
+
+func (m *DBModel) GetUserFollowing(ctx context.Context, userDID string) ([]Follow, error) {
+ var follows []Follow
+ return follows, m.DB.Where("user_did = ?", userDID).Find(&follows).Error
+}
+
+func (m *DBModel) GetUserFollowers(ctx context.Context, userDID string) ([]Follow, error) {
+ var follows []Follow
+ return follows, m.DB.Where("subject_did = ?", userDID).Find(&follows).Error
+}
diff --git a/pkg/model/model.go b/pkg/model/model.go
index d6f47c0a..68a88bd3 100644
--- a/pkg/model/model.go
+++ b/pkg/model/model.go
@@ -8,6 +8,7 @@ import (
"strings"
"time"
+ "github.com/bluesky-social/indigo/api/bsky"
"github.com/lmittmann/tint"
slogGorm "github.com/orandin/slog-gorm"
"gorm.io/driver/sqlite"
@@ -20,7 +21,7 @@ type DBModel struct {
}
type Model interface {
- CreateNotification(token string) error
+ CreateNotification(token, repoDID string) error
ListNotifications() ([]Notification, error)
CreatePlayerEvent(event PlayerEventAPI) error
@@ -48,6 +49,12 @@ type Model interface {
UpdateSigningKey(key *SigningKey) error
GetSigningKey(did, repoDID string) (*SigningKey, error)
GetSigningKeysForRepo(repoDID string) ([]SigningKey, error)
+
+ CreateFollow(ctx context.Context, userDID, rev string, follow *bsky.GraphFollow) error
+ GetUserFollowing(ctx context.Context, userDID string) ([]Follow, error)
+ GetUserFollowers(ctx context.Context, userDID string) ([]Follow, error)
+ DeleteFollow(ctx context.Context, userDID, rev string) error
+ GetFollowersNotificationTokens(userDID string) ([]string, error)
}
func MakeDB(dbURL string) (Model, error) {
@@ -78,7 +85,11 @@ func MakeDB(dbURL string) (Model, error) {
if err != nil {
return nil, fmt.Errorf("error starting database: %w", err)
}
- for _, model := range []any{Notification{}, PlayerEvent{}, Segment{}, Thumbnail{}, Identity{}, Repo{}, SigningKey{}} {
+ err = db.Exec("PRAGMA journal_mode=WAL;").Error
+ if err != nil {
+ return nil, fmt.Errorf("error setting journal mode: %w", err)
+ }
+ for _, model := range []any{Notification{}, PlayerEvent{}, Segment{}, Thumbnail{}, Identity{}, Repo{}, SigningKey{}, Follow{}} {
err = db.AutoMigrate(model)
if err != nil {
return nil, err
diff --git a/pkg/model/notification.go b/pkg/model/notification.go
index d0a278cb..d0cb35f0 100644
--- a/pkg/model/notification.go
+++ b/pkg/model/notification.go
@@ -9,15 +9,20 @@ import (
type Notification struct {
Token string `gorm:"primarykey"`
+ RepoDID string `json:"repoDID,omitempty" gorm:"column:repo_did;index"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
}
-func (m *DBModel) CreateNotification(token string) error {
- err := m.DB.Model(Notification{}).Create(&Notification{
+func (m *DBModel) CreateNotification(token string, repoDID string) error {
+ not := Notification{
Token: token,
- }).Error
+ }
+ if repoDID != "" {
+ not.RepoDID = repoDID
+ }
+ err := m.DB.Save(¬).Error
if err != nil {
return err
}
@@ -32,3 +37,38 @@ func (m *DBModel) ListNotifications() ([]Notification, error) {
}
return nots, nil
}
+
+func (m *DBModel) ListUserNotifications(userDID string) ([]Notification, error) {
+ nots := []Notification{}
+ err := m.DB.Where("repo_did = ?", userDID).Find(¬s).Error
+ if err != nil {
+ return nil, fmt.Errorf("error retrieving notifications: %w", err)
+ }
+ return nots, nil
+}
+
+func (m *DBModel) GetFollowersNotificationTokens(userDID string) ([]string, error) {
+ var tokens []string
+
+ err := m.DB.Model(&Notification{}).
+ Distinct("notifications.token").
+ Joins("JOIN follows ON follows.user_did = notifications.repo_did").
+ Where("follows.subject_did = ?", userDID).
+ Pluck("notifications.token", &tokens).
+ Error
+
+ if err != nil {
+ return nil, fmt.Errorf("error retrieving follower notification tokens: %w", err)
+ }
+
+ // also you prolly wanna get one for yourself
+ nots, err := m.ListUserNotifications(userDID)
+ if err != nil {
+ return nil, fmt.Errorf("error retrieving user notifications: %w", err)
+ }
+ for _, not := range nots {
+ tokens = append(tokens, not.Token)
+ }
+
+ return tokens, nil
+}
diff --git a/pkg/notifications/firebase.go b/pkg/notifications/firebase.go
index 2b45c934..a501f062 100644
--- a/pkg/notifications/firebase.go
+++ b/pkg/notifications/firebase.go
@@ -10,11 +10,10 @@ import (
"golang.org/x/net/context"
"google.golang.org/api/option"
"stream.place/streamplace/pkg/log"
- "stream.place/streamplace/pkg/model"
)
type FirebaseNotifier interface {
- Blast(ctx context.Context, nots []model.Notification, golive *NotificationBlast) error
+ Blast(ctx context.Context, tokens []string, golive *NotificationBlast) error
}
type FirebaseNotifierS struct {
@@ -26,20 +25,9 @@ type GoogleCredential struct {
}
type NotificationBlast struct {
- Title string
- Streamer string
-}
-
-func (nb *NotificationBlast) String() string {
- return fmt.Sprintf("%s %s", nb.PrintTitle(), nb.PrintBody())
-}
-
-func (nb *NotificationBlast) PrintTitle() string {
- return fmt.Sprintf("🔴 %s is LIVE!", nb.Streamer)
-}
-
-func (nb *NotificationBlast) PrintBody() string {
- return nb.Title
+ Title string `json:"title"`
+ Body string `json:"body"`
+ Data map[string]string `json:"data"`
}
func MakeFirebaseNotifier(ctx context.Context, serviceAccountJSONb64 string) (FirebaseNotifier, error) {
@@ -67,21 +55,18 @@ func MakeFirebaseNotifier(ctx context.Context, serviceAccountJSONb64 string) (Fi
}
// refactor me when we have >500 users
-func (f *FirebaseNotifierS) Blast(ctx context.Context, nots []model.Notification, blast *NotificationBlast) error {
+func (f *FirebaseNotifierS) Blast(ctx context.Context, tokens []string, blast *NotificationBlast) error {
client, err := f.app.Messaging(ctx)
if err != nil {
return err
}
- var tokens []string
- for _, n := range nots {
- tokens = append(tokens, n.Token)
- }
notification := &messaging.MulticastMessage{
Tokens: tokens,
+ Data: blast.Data,
Notification: &messaging.Notification{
- Title: blast.PrintTitle(),
- Body: blast.PrintBody(),
+ Title: blast.Title,
+ Body: blast.Body,
},
Android: &messaging.AndroidConfig{
Priority: "high",
diff --git a/pkg/streamplace/cbor_gen.go b/pkg/streamplace/cbor_gen.go
new file mode 100644
index 00000000..4dd48276
--- /dev/null
+++ b/pkg/streamplace/cbor_gen.go
@@ -0,0 +1,406 @@
+// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT.
+
+package streamplace
+
+import (
+ "fmt"
+ "io"
+ "math"
+ "sort"
+
+ cid "github.com/ipfs/go-cid"
+ cbg "github.com/whyrusleeping/cbor-gen"
+ xerrors "golang.org/x/xerrors"
+)
+
+var _ = xerrors.Errorf
+var _ = cid.Undef
+var _ = math.E
+var _ = sort.Sort
+
+func (t *Key) MarshalCBOR(w io.Writer) error {
+ if t == nil {
+ _, err := w.Write(cbg.CborNull)
+ return err
+ }
+
+ cw := cbg.NewCborWriter(w)
+
+ if _, err := cw.Write([]byte{163}); err != nil {
+ return err
+ }
+
+ // t.LexiconTypeID (string) (string)
+ if len("$type") > 1000000 {
+ return xerrors.Errorf("Value in field \"$type\" was too long")
+ }
+
+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("$type"))); err != nil {
+ return err
+ }
+ if _, err := cw.WriteString(string("$type")); err != nil {
+ return err
+ }
+
+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("place.stream.key"))); err != nil {
+ return err
+ }
+ if _, err := cw.WriteString(string("place.stream.key")); err != nil {
+ return err
+ }
+
+ // t.CreatedAt (string) (string)
+ if len("createdAt") > 1000000 {
+ return xerrors.Errorf("Value in field \"createdAt\" was too long")
+ }
+
+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("createdAt"))); err != nil {
+ return err
+ }
+ if _, err := cw.WriteString(string("createdAt")); err != nil {
+ return err
+ }
+
+ if len(t.CreatedAt) > 1000000 {
+ return xerrors.Errorf("Value in field t.CreatedAt was too long")
+ }
+
+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.CreatedAt))); err != nil {
+ return err
+ }
+ if _, err := cw.WriteString(string(t.CreatedAt)); err != nil {
+ return err
+ }
+
+ // t.SigningKey (string) (string)
+ if len("signingKey") > 1000000 {
+ return xerrors.Errorf("Value in field \"signingKey\" was too long")
+ }
+
+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("signingKey"))); err != nil {
+ return err
+ }
+ if _, err := cw.WriteString(string("signingKey")); err != nil {
+ return err
+ }
+
+ if len(t.SigningKey) > 1000000 {
+ return xerrors.Errorf("Value in field t.SigningKey was too long")
+ }
+
+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.SigningKey))); err != nil {
+ return err
+ }
+ if _, err := cw.WriteString(string(t.SigningKey)); err != nil {
+ return err
+ }
+ return nil
+}
+
+func (t *Key) UnmarshalCBOR(r io.Reader) (err error) {
+ *t = Key{}
+
+ cr := cbg.NewCborReader(r)
+
+ maj, extra, err := cr.ReadHeader()
+ if err != nil {
+ return err
+ }
+ defer func() {
+ if err == io.EOF {
+ err = io.ErrUnexpectedEOF
+ }
+ }()
+
+ if maj != cbg.MajMap {
+ return fmt.Errorf("cbor input should be of type map")
+ }
+
+ if extra > cbg.MaxLength {
+ return fmt.Errorf("Key: map struct too large (%d)", extra)
+ }
+
+ n := extra
+
+ nameBuf := make([]byte, 10)
+ for i := uint64(0); i < n; i++ {
+ nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 1000000)
+ if err != nil {
+ return err
+ }
+
+ if !ok {
+ // Field doesn't exist on this type, so ignore it
+ if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil {
+ return err
+ }
+ continue
+ }
+
+ switch string(nameBuf[:nameLen]) {
+ // t.LexiconTypeID (string) (string)
+ case "$type":
+
+ {
+ sval, err := cbg.ReadStringWithMax(cr, 1000000)
+ if err != nil {
+ return err
+ }
+
+ t.LexiconTypeID = string(sval)
+ }
+ // t.CreatedAt (string) (string)
+ case "createdAt":
+
+ {
+ sval, err := cbg.ReadStringWithMax(cr, 1000000)
+ if err != nil {
+ return err
+ }
+
+ t.CreatedAt = string(sval)
+ }
+ // t.SigningKey (string) (string)
+ case "signingKey":
+
+ {
+ sval, err := cbg.ReadStringWithMax(cr, 1000000)
+ if err != nil {
+ return err
+ }
+
+ t.SigningKey = string(sval)
+ }
+
+ default:
+ // Field doesn't exist on this type, so ignore it
+ if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil {
+ return err
+ }
+ }
+ }
+
+ return nil
+}
+func (t *Livestream) MarshalCBOR(w io.Writer) error {
+ if t == nil {
+ _, err := w.Write(cbg.CborNull)
+ return err
+ }
+
+ cw := cbg.NewCborWriter(w)
+ fieldCount := 4
+
+ if t.Url == nil {
+ fieldCount--
+ }
+
+ if _, err := cw.Write(cbg.CborEncodeMajorType(cbg.MajMap, uint64(fieldCount))); err != nil {
+ return err
+ }
+
+ // t.Url (string) (string)
+ if t.Url != nil {
+
+ if len("url") > 1000000 {
+ return xerrors.Errorf("Value in field \"url\" was too long")
+ }
+
+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("url"))); err != nil {
+ return err
+ }
+ if _, err := cw.WriteString(string("url")); err != nil {
+ return err
+ }
+
+ if t.Url == nil {
+ if _, err := cw.Write(cbg.CborNull); err != nil {
+ return err
+ }
+ } else {
+ if len(*t.Url) > 1000000 {
+ return xerrors.Errorf("Value in field t.Url was too long")
+ }
+
+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(*t.Url))); err != nil {
+ return err
+ }
+ if _, err := cw.WriteString(string(*t.Url)); err != nil {
+ return err
+ }
+ }
+ }
+
+ // t.LexiconTypeID (string) (string)
+ if len("$type") > 1000000 {
+ return xerrors.Errorf("Value in field \"$type\" was too long")
+ }
+
+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("$type"))); err != nil {
+ return err
+ }
+ if _, err := cw.WriteString(string("$type")); err != nil {
+ return err
+ }
+
+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("place.stream.livestream"))); err != nil {
+ return err
+ }
+ if _, err := cw.WriteString(string("place.stream.livestream")); err != nil {
+ return err
+ }
+
+ // t.Title (string) (string)
+ if len("title") > 1000000 {
+ return xerrors.Errorf("Value in field \"title\" was too long")
+ }
+
+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("title"))); err != nil {
+ return err
+ }
+ if _, err := cw.WriteString(string("title")); err != nil {
+ return err
+ }
+
+ if len(t.Title) > 1000000 {
+ return xerrors.Errorf("Value in field t.Title was too long")
+ }
+
+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.Title))); err != nil {
+ return err
+ }
+ if _, err := cw.WriteString(string(t.Title)); err != nil {
+ return err
+ }
+
+ // t.CreatedAt (string) (string)
+ if len("createdAt") > 1000000 {
+ return xerrors.Errorf("Value in field \"createdAt\" was too long")
+ }
+
+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len("createdAt"))); err != nil {
+ return err
+ }
+ if _, err := cw.WriteString(string("createdAt")); err != nil {
+ return err
+ }
+
+ if len(t.CreatedAt) > 1000000 {
+ return xerrors.Errorf("Value in field t.CreatedAt was too long")
+ }
+
+ if err := cw.WriteMajorTypeHeader(cbg.MajTextString, uint64(len(t.CreatedAt))); err != nil {
+ return err
+ }
+ if _, err := cw.WriteString(string(t.CreatedAt)); err != nil {
+ return err
+ }
+ return nil
+}
+
+func (t *Livestream) UnmarshalCBOR(r io.Reader) (err error) {
+ *t = Livestream{}
+
+ cr := cbg.NewCborReader(r)
+
+ maj, extra, err := cr.ReadHeader()
+ if err != nil {
+ return err
+ }
+ defer func() {
+ if err == io.EOF {
+ err = io.ErrUnexpectedEOF
+ }
+ }()
+
+ if maj != cbg.MajMap {
+ return fmt.Errorf("cbor input should be of type map")
+ }
+
+ if extra > cbg.MaxLength {
+ return fmt.Errorf("Livestream: map struct too large (%d)", extra)
+ }
+
+ n := extra
+
+ nameBuf := make([]byte, 9)
+ for i := uint64(0); i < n; i++ {
+ nameLen, ok, err := cbg.ReadFullStringIntoBuf(cr, nameBuf, 1000000)
+ if err != nil {
+ return err
+ }
+
+ if !ok {
+ // Field doesn't exist on this type, so ignore it
+ if err := cbg.ScanForLinks(cr, func(cid.Cid) {}); err != nil {
+ return err
+ }
+ continue
+ }
+
+ switch string(nameBuf[:nameLen]) {
+ // t.Url (string) (string)
+ case "url":
+
+ {
+ b, err := cr.ReadByte()
+ if err != nil {
+ return err
+ }
+ if b != cbg.CborNull[0] {
+ if err := cr.UnreadByte(); err != nil {
+ return err
+ }
+
+ sval, err := cbg.ReadStringWithMax(cr, 1000000)
+ if err != nil {
+ return err
+ }
+
+ t.Url = (*string)(&sval)
+ }
+ }
+ // t.LexiconTypeID (string) (string)
+ case "$type":
+
+ {
+ sval, err := cbg.ReadStringWithMax(cr, 1000000)
+ if err != nil {
+ return err
+ }
+
+ t.LexiconTypeID = string(sval)
+ }
+ // t.Title (string) (string)
+ case "title":
+
+ {
+ sval, err := cbg.ReadStringWithMax(cr, 1000000)
+ if err != nil {
+ return err
+ }
+
+ t.Title = string(sval)
+ }
+ // t.CreatedAt (string) (string)
+ case "createdAt":
+
+ {
+ sval, err := cbg.ReadStringWithMax(cr, 1000000)
+ if err != nil {
+ return err
+ }
+
+ t.CreatedAt = string(sval)
+ }
+
+ default:
+ // Field doesn't exist on this type, so ignore it
+ if err := cbg.ScanForLinks(r, func(cid.Cid) {}); err != nil {
+ return err
+ }
+ }
+ }
+
+ return nil
+}
diff --git a/pkg/streamplace/streamkey.go b/pkg/streamplace/streamkey.go
new file mode 100644
index 00000000..2e4bf28b
--- /dev/null
+++ b/pkg/streamplace/streamkey.go
@@ -0,0 +1,21 @@
+// Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
+
+package streamplace
+
+// schema: place.stream.key
+
+import (
+ "github.com/bluesky-social/indigo/lex/util"
+)
+
+func init() {
+ util.RegisterType("place.stream.key", &Key{})
+} //
+// RECORDTYPE: Key
+type Key struct {
+ LexiconTypeID string `json:"$type,const=place.stream.key" cborgen:"$type,const=place.stream.key"`
+ // createdAt: Client-declared timestamp when this key was created.
+ CreatedAt string `json:"createdAt" cborgen:"createdAt"`
+ // signingKey: The did:key signing key for the stream.
+ SigningKey string `json:"signingKey" cborgen:"signingKey"`
+}
diff --git a/pkg/streamplace/streamlivestream.go b/pkg/streamplace/streamlivestream.go
new file mode 100644
index 00000000..f2d998b8
--- /dev/null
+++ b/pkg/streamplace/streamlivestream.go
@@ -0,0 +1,23 @@
+// Code generated by cmd/lexgen (see Makefile's lexgen); DO NOT EDIT.
+
+package streamplace
+
+// schema: place.stream.livestream
+
+import (
+ "github.com/bluesky-social/indigo/lex/util"
+)
+
+func init() {
+ util.RegisterType("place.stream.livestream", &Livestream{})
+} //
+// RECORDTYPE: Livestream
+type Livestream struct {
+ LexiconTypeID string `json:"$type,const=place.stream.livestream" cborgen:"$type,const=place.stream.livestream"`
+ // createdAt: Client-declared timestamp when this livestream started.
+ CreatedAt string `json:"createdAt" cborgen:"createdAt"`
+ // title: The title of the livestream, as it will be announced to followers.
+ Title string `json:"title" cborgen:"title"`
+ // url: The URL where this stream can be found. This is primarily a hint for other Streamplace nodes to locate and replicate the stream.
+ Url *string `json:"url,omitempty" cborgen:"url,omitempty"`
+}
diff --git a/tools.go b/tools.go
new file mode 100644
index 00000000..92e3a783
--- /dev/null
+++ b/tools.go
@@ -0,0 +1,9 @@
+//go:build tools
+
+package tools
+
+import (
+ _ "github.com/99designs/gqlgen"
+ _ "github.com/99designs/gqlgen/graphql/introspection"
+ _ "github.com/bluesky-social/indigo/cmd/lexgen"
+)
diff --git a/yarn.lock b/yarn.lock
index f373f924..2ad9620d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -203,6 +203,18 @@ __metadata:
languageName: node
linkType: hard
+"@atproto/common-web@npm:^0.3.2":
+ version: 0.3.2
+ resolution: "@atproto/common-web@npm:0.3.2"
+ dependencies:
+ graphemer: "npm:^1.4.0"
+ multiformats: "npm:^9.9.0"
+ uint8arrays: "npm:3.0.0"
+ zod: "npm:^3.23.8"
+ checksum: 10/6c58fb57514ae6d26de511800492abea873ecd3f61c1bc7f01cac4630f62e51fa325b44bd47c23d06d3191b81b4b9d2fbe28bbfcad20e213cc42891945d71bd9
+ languageName: node
+ linkType: hard
+
"@atproto/crypto@npm:^0.4.2":
version: 0.4.2
resolution: "@atproto/crypto@npm:0.4.2"
@@ -264,6 +276,24 @@ __metadata:
languageName: node
linkType: hard
+"@atproto/lex-cli@npm:^0.5.6":
+ version: 0.5.6
+ resolution: "@atproto/lex-cli@npm:0.5.6"
+ dependencies:
+ "@atproto/lexicon": "npm:^0.4.5"
+ "@atproto/syntax": "npm:^0.3.1"
+ chalk: "npm:^4.1.2"
+ commander: "npm:^9.4.0"
+ prettier: "npm:^3.2.5"
+ ts-morph: "npm:^16.0.0"
+ yesno: "npm:^0.4.0"
+ zod: "npm:^3.23.8"
+ bin:
+ lex: dist/index.js
+ checksum: 10/ba8cb51b626448e397b82a3cb7d08a53eb38a4816cdd8cfe93ec1c87a480870a30463049bbd4048294cd45d53db95bd0e22d7ac5de53b5dd86fca4128702d0c2
+ languageName: node
+ linkType: hard
+
"@atproto/lexicon@npm:^0.4.3":
version: 0.4.3
resolution: "@atproto/lexicon@npm:0.4.3"
@@ -277,6 +307,19 @@ __metadata:
languageName: node
linkType: hard
+"@atproto/lexicon@npm:^0.4.5":
+ version: 0.4.5
+ resolution: "@atproto/lexicon@npm:0.4.5"
+ dependencies:
+ "@atproto/common-web": "npm:^0.3.2"
+ "@atproto/syntax": "npm:^0.3.1"
+ iso-datestring-validator: "npm:^2.2.2"
+ multiformats: "npm:^9.9.0"
+ zod: "npm:^3.23.8"
+ checksum: 10/b6c4a868d36dc4f7f55fb9558065daa90ff39e4966ab1b36e527dbe6109f386b8f59a0c2611a02f82e10b468ede4ab9362df7f60728749d4dfc4a45b81d44261
+ languageName: node
+ linkType: hard
+
"@atproto/oauth-client-browser@npm:0.3.2":
version: 0.3.2
resolution: "@atproto/oauth-client-browser@npm:0.3.2"
@@ -3409,184 +3452,177 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild-plugins/tsconfig-paths@npm:^0.1.2":
- version: 0.1.2
- resolution: "@esbuild-plugins/tsconfig-paths@npm:0.1.2"
- dependencies:
- debug: "npm:^4.3.1"
- find-up: "npm:^5.0.0"
- strip-json-comments: "npm:^3.1.1"
- peerDependencies:
- esbuild: "*"
- typescript: "*"
- checksum: 10/bbb927745aa1b5f7aeeb7a22445f51f62bc2eb055f7c2de63b5d204a62c09877bc4109e9a1b0d8a93499660e185e93cc20f1d5821573cebf7b908be42cd948b2
- languageName: node
- linkType: hard
-
-"@esbuild/aix-ppc64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/aix-ppc64@npm:0.24.0"
+"@esbuild/aix-ppc64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/aix-ppc64@npm:0.24.2"
conditions: os=aix & cpu=ppc64
languageName: node
linkType: hard
-"@esbuild/android-arm64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/android-arm64@npm:0.24.0"
+"@esbuild/android-arm64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/android-arm64@npm:0.24.2"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/android-arm@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/android-arm@npm:0.24.0"
+"@esbuild/android-arm@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/android-arm@npm:0.24.2"
conditions: os=android & cpu=arm
languageName: node
linkType: hard
-"@esbuild/android-x64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/android-x64@npm:0.24.0"
+"@esbuild/android-x64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/android-x64@npm:0.24.2"
conditions: os=android & cpu=x64
languageName: node
linkType: hard
-"@esbuild/darwin-arm64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/darwin-arm64@npm:0.24.0"
+"@esbuild/darwin-arm64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/darwin-arm64@npm:0.24.2"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/darwin-x64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/darwin-x64@npm:0.24.0"
+"@esbuild/darwin-x64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/darwin-x64@npm:0.24.2"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
-"@esbuild/freebsd-arm64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/freebsd-arm64@npm:0.24.0"
+"@esbuild/freebsd-arm64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/freebsd-arm64@npm:0.24.2"
conditions: os=freebsd & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/freebsd-x64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/freebsd-x64@npm:0.24.0"
+"@esbuild/freebsd-x64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/freebsd-x64@npm:0.24.2"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
-"@esbuild/linux-arm64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/linux-arm64@npm:0.24.0"
+"@esbuild/linux-arm64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-arm64@npm:0.24.2"
conditions: os=linux & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/linux-arm@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/linux-arm@npm:0.24.0"
+"@esbuild/linux-arm@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-arm@npm:0.24.2"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
-"@esbuild/linux-ia32@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/linux-ia32@npm:0.24.0"
+"@esbuild/linux-ia32@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-ia32@npm:0.24.2"
conditions: os=linux & cpu=ia32
languageName: node
linkType: hard
-"@esbuild/linux-loong64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/linux-loong64@npm:0.24.0"
+"@esbuild/linux-loong64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-loong64@npm:0.24.2"
conditions: os=linux & cpu=loong64
languageName: node
linkType: hard
-"@esbuild/linux-mips64el@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/linux-mips64el@npm:0.24.0"
+"@esbuild/linux-mips64el@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-mips64el@npm:0.24.2"
conditions: os=linux & cpu=mips64el
languageName: node
linkType: hard
-"@esbuild/linux-ppc64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/linux-ppc64@npm:0.24.0"
+"@esbuild/linux-ppc64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-ppc64@npm:0.24.2"
conditions: os=linux & cpu=ppc64
languageName: node
linkType: hard
-"@esbuild/linux-riscv64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/linux-riscv64@npm:0.24.0"
+"@esbuild/linux-riscv64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-riscv64@npm:0.24.2"
conditions: os=linux & cpu=riscv64
languageName: node
linkType: hard
-"@esbuild/linux-s390x@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/linux-s390x@npm:0.24.0"
+"@esbuild/linux-s390x@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-s390x@npm:0.24.2"
conditions: os=linux & cpu=s390x
languageName: node
linkType: hard
-"@esbuild/linux-x64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/linux-x64@npm:0.24.0"
+"@esbuild/linux-x64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/linux-x64@npm:0.24.2"
conditions: os=linux & cpu=x64
languageName: node
linkType: hard
-"@esbuild/netbsd-x64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/netbsd-x64@npm:0.24.0"
+"@esbuild/netbsd-arm64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/netbsd-arm64@npm:0.24.2"
+ conditions: os=netbsd & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@esbuild/netbsd-x64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/netbsd-x64@npm:0.24.2"
conditions: os=netbsd & cpu=x64
languageName: node
linkType: hard
-"@esbuild/openbsd-arm64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/openbsd-arm64@npm:0.24.0"
+"@esbuild/openbsd-arm64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/openbsd-arm64@npm:0.24.2"
conditions: os=openbsd & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/openbsd-x64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/openbsd-x64@npm:0.24.0"
+"@esbuild/openbsd-x64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/openbsd-x64@npm:0.24.2"
conditions: os=openbsd & cpu=x64
languageName: node
linkType: hard
-"@esbuild/sunos-x64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/sunos-x64@npm:0.24.0"
+"@esbuild/sunos-x64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/sunos-x64@npm:0.24.2"
conditions: os=sunos & cpu=x64
languageName: node
linkType: hard
-"@esbuild/win32-arm64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/win32-arm64@npm:0.24.0"
+"@esbuild/win32-arm64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/win32-arm64@npm:0.24.2"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/win32-ia32@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/win32-ia32@npm:0.24.0"
+"@esbuild/win32-ia32@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/win32-ia32@npm:0.24.2"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
-"@esbuild/win32-x64@npm:0.24.0":
- version: 0.24.0
- resolution: "@esbuild/win32-x64@npm:0.24.0"
+"@esbuild/win32-x64@npm:0.24.2":
+ version: 0.24.2
+ resolution: "@esbuild/win32-x64@npm:0.24.2"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
@@ -4685,29 +4721,29 @@ __metadata:
languageName: node
linkType: hard
-"@floating-ui/react-native@npm:^0.10.6":
- version: 0.10.6
- resolution: "@floating-ui/react-native@npm:0.10.6"
+"@floating-ui/react-native@npm:^0.10.7":
+ version: 0.10.7
+ resolution: "@floating-ui/react-native@npm:0.10.7"
dependencies:
"@floating-ui/core": "npm:^1.0.0"
peerDependencies:
react: ">=16.8.0"
react-native: ">=0.64.0"
- checksum: 10/e7ee9a2fb93674ad5b690b770de70989bb7dfd2e871ab698ec2259c7fa38047558fc8a21ad9138a16da95408bad9445b3ab7abec1fa54f3ad79a21a1a1ef033b
+ checksum: 10/98f665b8bea1b02f8b8f6488d699716cca8e870bf137ae5e25d287bd7b31bfc9bbc07cfdd3bafc227128d08985af8b4bf985b7a48859a88ef862ff62a4af915b
languageName: node
linkType: hard
-"@floating-ui/react@npm:^0.26.24":
- version: 0.26.27
- resolution: "@floating-ui/react@npm:0.26.27"
+"@floating-ui/react@npm:^0.27.3":
+ version: 0.27.3
+ resolution: "@floating-ui/react@npm:0.27.3"
dependencies:
"@floating-ui/react-dom": "npm:^2.1.2"
- "@floating-ui/utils": "npm:^0.2.8"
+ "@floating-ui/utils": "npm:^0.2.9"
tabbable: "npm:^6.0.0"
peerDependencies:
- react: ">=16.8.0"
- react-dom: ">=16.8.0"
- checksum: 10/ab6d05e5cc2c29272a6830c06dff07e8330f2b90234674f2d74ed8084659ebe3ac9472770a5f0e76007dd2ae89f9da75189d188437aea4b8ac2789afc21bb6b2
+ react: ">=17.0.0"
+ react-dom: ">=17.0.0"
+ checksum: 10/91eef58241b2225420fa73dfc501934463310489e08f2a0681b320e0c639c9ee59044ab66645f2901b74a88328208ff4cc4afabe93917a7a28f9d18037965cb6
languageName: node
linkType: hard
@@ -4718,10 +4754,10 @@ __metadata:
languageName: node
linkType: hard
-"@floating-ui/utils@npm:^0.2.8":
- version: 0.2.8
- resolution: "@floating-ui/utils@npm:0.2.8"
- checksum: 10/3e3ea3b2de06badc4baebdf358b3dbd77ccd9474a257a6ef237277895943db2acbae756477ec64de65a2a1436d94aea3107129a1feeef6370675bf2b161c1abc
+"@floating-ui/utils@npm:^0.2.9":
+ version: 0.2.9
+ resolution: "@floating-ui/utils@npm:0.2.9"
+ checksum: 10/0ca786347db3dd8d9034b86d1449fabb96642788e5900cc5f2aee433cd7b243efbcd7a165bead50b004ee3f20a90ddebb6a35296fc41d43cfd361b6f01b69ffb
languageName: node
linkType: hard
@@ -6099,6 +6135,62 @@ __metadata:
languageName: node
linkType: hard
+"@oxc-transform/binding-darwin-arm64@npm:0.47.1":
+ version: 0.47.1
+ resolution: "@oxc-transform/binding-darwin-arm64@npm:0.47.1"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@oxc-transform/binding-darwin-x64@npm:0.47.1":
+ version: 0.47.1
+ resolution: "@oxc-transform/binding-darwin-x64@npm:0.47.1"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@oxc-transform/binding-linux-arm64-gnu@npm:0.47.1":
+ version: 0.47.1
+ resolution: "@oxc-transform/binding-linux-arm64-gnu@npm:0.47.1"
+ conditions: os=linux & cpu=arm64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@oxc-transform/binding-linux-arm64-musl@npm:0.47.1":
+ version: 0.47.1
+ resolution: "@oxc-transform/binding-linux-arm64-musl@npm:0.47.1"
+ conditions: os=linux & cpu=arm64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@oxc-transform/binding-linux-x64-gnu@npm:0.47.1":
+ version: 0.47.1
+ resolution: "@oxc-transform/binding-linux-x64-gnu@npm:0.47.1"
+ conditions: os=linux & cpu=x64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@oxc-transform/binding-linux-x64-musl@npm:0.47.1":
+ version: 0.47.1
+ resolution: "@oxc-transform/binding-linux-x64-musl@npm:0.47.1"
+ conditions: os=linux & cpu=x64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@oxc-transform/binding-win32-arm64-msvc@npm:0.47.1":
+ version: 0.47.1
+ resolution: "@oxc-transform/binding-win32-arm64-msvc@npm:0.47.1"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@oxc-transform/binding-win32-x64-msvc@npm:0.47.1":
+ version: 0.47.1
+ resolution: "@oxc-transform/binding-win32-x64-msvc@npm:0.47.1"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
"@parcel/watcher-android-arm64@npm:2.4.1":
version: 2.4.1
resolution: "@parcel/watcher-android-arm64@npm:2.4.1"
@@ -7982,1127 +8074,1129 @@ __metadata:
languageName: node
linkType: hard
-"@tamagui/accordion@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/accordion@npm:1.116.12"
+"@tamagui/accordion@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/accordion@npm:1.123.17"
dependencies:
- "@tamagui/collapsible": "npm:1.116.12"
- "@tamagui/collection": "npm:1.116.12"
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/polyfill-dev": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
+ "@tamagui/collapsible": "npm:1.123.17"
+ "@tamagui/collection": "npm:1.123.17"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/polyfill-dev": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/text": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/8fffda8c539f4654a9afed224c75ec2d69331c7808bf504cf54ff0545902f078fcc7ba221b7d329002c86b19bc6c0268e8ffed69c47556805e2fba9e5e00f0f6
+ checksum: 10/7b85fcc055d54b49e423dec34bf383934125f3078c4e2615f9c93f7d4683669a86a44e15a74a7f96c7bb05e25444c97a6ae82bc53900d5ec645be61683a63e9e
languageName: node
linkType: hard
-"@tamagui/adapt@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/adapt@npm:1.116.12"
+"@tamagui/adapt@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/adapt@npm:1.123.17"
dependencies:
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/portal": "npm:1.116.12"
- checksum: 10/daca38847578ac1b90a0ded8d2ccdd189d5419a1ce78fd67712e244d28c1b761accb69e88d3ea345dfa2800931f096783fa0b94525af8b75de00e701910d4243
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/portal": "npm:1.123.17"
+ checksum: 10/839de6f229dcd81f976b7e36b7e161477a992e93fa7b7018d9504894e2bed129cd5ce7c46cfbb2f3134755a8c9e6864d2f8ba79086889143800d025b85dcffe2
languageName: node
linkType: hard
-"@tamagui/alert-dialog@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/alert-dialog@npm:1.116.12"
+"@tamagui/alert-dialog@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/alert-dialog@npm:1.123.17"
dependencies:
- "@tamagui/animate-presence": "npm:1.116.12"
- "@tamagui/aria-hidden": "npm:1.116.12"
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/dialog": "npm:1.116.12"
- "@tamagui/dismissable": "npm:1.116.12"
- "@tamagui/focus-scope": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/polyfill-dev": "npm:1.116.12"
- "@tamagui/popper": "npm:1.116.12"
- "@tamagui/portal": "npm:1.116.12"
- "@tamagui/remove-scroll": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/text": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
+ "@tamagui/animate-presence": "npm:1.123.17"
+ "@tamagui/aria-hidden": "npm:1.123.17"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/dialog": "npm:1.123.17"
+ "@tamagui/dismissable": "npm:1.123.17"
+ "@tamagui/focus-scope": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/polyfill-dev": "npm:1.123.17"
+ "@tamagui/popper": "npm:1.123.17"
+ "@tamagui/portal": "npm:1.123.17"
+ "@tamagui/remove-scroll": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/text": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/542d2e1c4feaba104d09e4e6045672122254caf100720adc2ed7dc7939c8200b97c4cfe1b737353a214fac86fbf7c1604b24a3b383fedff3b3a1f7036945c0eb
+ checksum: 10/088dea6f3d0bda5c2958ad164ce678aad7d2527a041f60d7050029bcb5530ae08b1f678694e9b6afb8c1c7030b1ca10c586891e250544f16b6a110e64ffa4968
languageName: node
linkType: hard
-"@tamagui/animate-presence@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/animate-presence@npm:1.116.12"
+"@tamagui/animate-presence@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/animate-presence@npm:1.123.17"
dependencies:
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/use-constant": "npm:1.116.12"
- "@tamagui/use-force-update": "npm:1.116.12"
- "@tamagui/use-presence": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
- checksum: 10/8ca250c3bd75da02be98e15f8850cdcd7120fea913e4895d1155b37cbb3dcf4c4abe121f187f7d43ec357e035b41e5fd19ca33979f7d101fcf6518e0c9e24922
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/use-constant": "npm:1.123.17"
+ "@tamagui/use-force-update": "npm:1.123.17"
+ "@tamagui/use-presence": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
+ checksum: 10/9296149cb189d2c677d32dafab37b0bce5abaa103ea707f847c9034ff40bfc967714417b46afc9d9b5e867fedf417ad79cefed8bc9f4970289aade46042045e5
languageName: node
linkType: hard
-"@tamagui/animate@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/animate@npm:1.116.12"
+"@tamagui/animate@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/animate@npm:1.123.17"
dependencies:
- "@tamagui/animate-presence": "npm:1.116.12"
- checksum: 10/38f33794edc38a82f84885d09e17fa7a0a9d4eeb2c9929194e2c578dc73264150466bd367d3b725b3d188b50df25ff00c992c529910751b57bdf1ef230b23410
+ "@tamagui/animate-presence": "npm:1.123.17"
+ checksum: 10/e557b50669c3db138ca2552bd63ca06f7f078d0e46d9080c02af7c336599b809d4e3a68d25db6e657180e95c901f4559ac3a9627a2ffd664313046d9bb924290
languageName: node
linkType: hard
-"@tamagui/animations-css@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/animations-css@npm:1.116.12"
+"@tamagui/animations-css@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/animations-css@npm:1.123.17"
dependencies:
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/cubic-bezier-animator": "npm:1.116.12"
- "@tamagui/use-presence": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/cubic-bezier-animator": "npm:1.123.17"
+ "@tamagui/use-presence": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/bd3cb38e0f1e031771bbf5b03666f2cefde72a50036ad3fe9f4d778a53cb69794428c84ecb00f505de5bf8d955da4c246ace851142a0d2a16faa30082ac02298
+ react-dom: "*"
+ checksum: 10/846502027edaf97aad3b9910b2d8e24bbf01c8d3c4d86fc1ce921d9e701fc965aecb85312211bf383a239b413b58d68284211413617714e2d4ab1be69d9d0eec
languageName: node
linkType: hard
-"@tamagui/animations-moti@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/animations-moti@npm:1.116.12"
+"@tamagui/animations-moti@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/animations-moti@npm:1.123.17"
dependencies:
- "@tamagui/use-presence": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/use-presence": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
moti: "npm:^0.29.0"
peerDependencies:
react: "*"
- checksum: 10/63c8f12ab2e695161749957086ba46163dfc807a9bb878c08b98f6f6ca8e0a6a789cbc7d2ebc8467b60daa09dc203ed96210cf24f49d4d55a1e7ed805d22d446
+ checksum: 10/11ce21ca428826c30dd572ab9327d699c2ddf11bf82f7fabaf62d0efb9d770ae22f07affc0f040bbd29a3f87a5d5fcfcf3393727cb39be6a34a0fc0676ffc5fe
languageName: node
linkType: hard
-"@tamagui/animations-react-native@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/animations-react-native@npm:1.116.12"
+"@tamagui/animations-react-native@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/animations-react-native@npm:1.123.17"
dependencies:
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/use-presence": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/use-presence": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/19a182bf94e4ead592bf955961eb6655e9e78f972902b0d654978480fc3d6a577f72124e245979518c42eca03e7f5515a7bcc6b136a8906edbb3d0efd606bcbc
+ checksum: 10/7909a9531462618df91dcd8dcb1bc1de080fc1a493f5f19964cd98a7a9ded727fc293e7519228c38b1ee6adc000af70e03561ed8c76bfa3f44cab1422979eaa0
languageName: node
linkType: hard
-"@tamagui/aria-hidden@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/aria-hidden@npm:1.116.12"
+"@tamagui/aria-hidden@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/aria-hidden@npm:1.123.17"
dependencies:
aria-hidden: "npm:^1.1.3"
peerDependencies:
react: "*"
- checksum: 10/a4de8718a426a6d4c594cb8700a70417d6648d4995440bdff6d1fc82776a95af1850cb20e579f3ba7748b9ea74b3c792400f284984fb1d445d2f44048b3090fc
+ checksum: 10/d7002539cc301bd96a25f66589280e54121e6d633d35a03b1e0d20bc9fd503be77acf733a162ba5856606685276c3595b0191c6b70facffb1da70ac0feaaccbd
languageName: node
linkType: hard
-"@tamagui/avatar@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/avatar@npm:1.116.12"
+"@tamagui/avatar@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/avatar@npm:1.123.17"
dependencies:
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/image": "npm:1.116.12"
- "@tamagui/shapes": "npm:1.116.12"
- "@tamagui/text": "npm:1.116.12"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/image": "npm:1.123.17"
+ "@tamagui/shapes": "npm:1.123.17"
+ "@tamagui/text": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/ca6bb1fac9c32e0445906391ceaae4050ab6764bd20a77d56d0b44544b8ed1f7f14ebe19f237e6eec4e4ddb7f48ece0d0c709c925b938f11bbb90bde2e7351c7
+ checksum: 10/7cea8d8d624e969e4941df1a3c9a083f91bca9e98631bfe750dd5b8a8a6e9505aeff906c2af5df046792779dbdb7b41185a8561ea629062569970137a3de9cd7
languageName: node
linkType: hard
-"@tamagui/babel-plugin-fully-specified@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/babel-plugin-fully-specified@npm:1.116.12"
+"@tamagui/babel-plugin-fully-specified@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/babel-plugin-fully-specified@npm:1.123.17"
dependencies:
"@babel/core": "npm:^7.25.2"
- checksum: 10/3062b346948a7443821c4b8c3a1871a7368d918c30854d9717c66a2038193c40c85c1b5eb28e2d2c3243c8b4716b62b39b8f15ddf20bd0da9c8706bf8bc9402a
+ checksum: 10/bcdfba06c2ddc88201587b6c13dfc18ea386f504de7e19ba56855344c597aeddcfdd8ec0fc7365afc3c79b8c863e9c6ae833893d0402db9f20a3f0b74f9a7fcf
languageName: node
linkType: hard
-"@tamagui/babel-plugin@npm:^1.116.12":
- version: 1.116.12
- resolution: "@tamagui/babel-plugin@npm:1.116.12"
+"@tamagui/babel-plugin@npm:^1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/babel-plugin@npm:1.123.17"
dependencies:
+ "@babel/core": "npm:^7.25.2"
"@babel/generator": "npm:^7.25.5"
"@babel/helper-plugin-utils": "npm:^7.24.8"
"@babel/template": "npm:^7.25.0"
"@babel/traverse": "npm:^7.25.4"
- "@tamagui/static": "npm:1.116.12"
- checksum: 10/bdce1d09c1571139cfe2db22ad5bf2ec55446d2c2f3edd5c37fe0d5e577832478003e2c02c0cfbed9a04b196c484cbf6c014c84f374a3bdeb1c4841d83fe1eca
+ "@tamagui/static": "npm:1.123.17"
+ checksum: 10/2a2b9e9481b2052a92144cc15860dce8928117ba92bfe1ea560d17461f56a608c2ad1df7bca3c0a08b308cb5ffe94cf6bec9df9d3e055a56fae54636637cd093
languageName: node
linkType: hard
-"@tamagui/build@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/build@npm:1.116.12"
+"@tamagui/build@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/build@npm:1.123.17"
dependencies:
"@babel/core": "npm:^7.25.2"
"@swc/core": "npm:^1.7.21"
- "@tamagui/babel-plugin-fully-specified": "npm:1.116.12"
+ "@tamagui/babel-plugin-fully-specified": "npm:1.123.17"
"@types/fs-extra": "npm:^9.0.13"
chokidar: "npm:^3.5.2"
- esbuild: "npm:^0.24.0"
+ esbuild: "npm:^0.24.2"
esbuild-plugin-es5: "npm:^2.1.1"
esbuild-register: "npm:^3.6.0"
execa: "npm:^5.0.0"
fast-glob: "npm:^3.2.11"
fs-extra: "npm:^11.2.0"
lodash.debounce: "npm:^4.0.8"
- typescript: "npm:^5.6.3"
+ oxc-transform: "npm:^0.47.1"
+ typescript: "npm:^5.7.2"
bin:
tamagui-build: tamagui-build.js
teesx: teesx.sh
- checksum: 10/a9bebd26a9f2c5eec629a08c25d03d46f136a0e016f049d0857bdb7f4a594a024018c8a13c1d84926615391ef5785876400d1894bc22b97f943a56741eb294ec
+ checksum: 10/220a7ba795e200500b9a019e456ea952607687910761dbfd4d0a41f5872f45d9e88376babbaddd5cb692f061a4ccc9a140806aeace6ed90b8bef665bfedab2be
languageName: node
linkType: hard
-"@tamagui/button@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/button@npm:1.116.12"
+"@tamagui/button@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/button@npm:1.123.17"
dependencies:
- "@tamagui/font-size": "npm:1.116.12"
- "@tamagui/get-button-sized": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/helpers-tamagui": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/text": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/font-size": "npm:1.123.17"
+ "@tamagui/get-button-sized": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/helpers-tamagui": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/text": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/df9c30f4fad419ac4860b0487e71133c81c36b24d0657566ad1a100cc1c90d93c4cb3b49b6198947bedf765b30798936c145ace16a5a612c2f7af9e62d983898
+ checksum: 10/7ab2dd682c62953f6ff2dd87f05afaade3a8586ca7e8382da77b4f71b231b223972e9b78a829913405ff23491dd01c29efb8d2f43098b94a3122af78a2c3d1eb
languageName: node
linkType: hard
-"@tamagui/card@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/card@npm:1.116.12"
+"@tamagui/card@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/card@npm:1.123.17"
dependencies:
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/31a3e5c8d7edf3e7a359b09758b6cf40e96a5cff0af73853d6bae12171b31f55d9f56cc949fba3029f98c337b65045fa97f78f85f84752cdd620e0f2ea4f8684
+ checksum: 10/7441ed5fd0fde37b653f1e711f5e336c64e26098d73f80eb366de333cc971d887a465ea304400e0ad51cdc8022e2abea08c1b5987a10eb2aeffe2dc1fa7048a2
languageName: node
linkType: hard
-"@tamagui/checkbox-headless@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/checkbox-headless@npm:1.116.12"
+"@tamagui/checkbox-headless@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/checkbox-headless@npm:1.123.17"
dependencies:
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/focusable": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/label": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
- "@tamagui/use-previous": "npm:1.116.12"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/focusable": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/label": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
+ "@tamagui/use-previous": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/acdf34a5a8ffcb3211b9b8d24f18d20b19e9c46872f226e62028eef3537766432007ebeff6724a4b90cba467b4fb46e09010f42dfbcf9cdca4f04a17b870baea
+ checksum: 10/fecb366c3f678d2e8bfffddfb7ce868cd0a347be9f29bf5b3be207447bfad1fdca0a51df7de42da4beefa1a3c4d84db0f456c5b326f9e026291630b89bdab69c
languageName: node
linkType: hard
-"@tamagui/checkbox@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/checkbox@npm:1.116.12"
+"@tamagui/checkbox@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/checkbox@npm:1.123.17"
dependencies:
- "@tamagui/checkbox-headless": "npm:1.116.12"
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/focusable": "npm:1.116.12"
- "@tamagui/font-size": "npm:1.116.12"
- "@tamagui/get-token": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/helpers-tamagui": "npm:1.116.12"
- "@tamagui/label": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
- "@tamagui/use-previous": "npm:1.116.12"
+ "@tamagui/checkbox-headless": "npm:1.123.17"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/focusable": "npm:1.123.17"
+ "@tamagui/font-size": "npm:1.123.17"
+ "@tamagui/get-token": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/helpers-tamagui": "npm:1.123.17"
+ "@tamagui/label": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
+ "@tamagui/use-previous": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/c11164157ad3cee6fcbb9466ac3d9db9d5a109e7d0995730615cdf248d265958e912331c50f9d532900b1347409aeb7ca763cc28cbe54f3548c71021881ec879
+ checksum: 10/9b2320abfeeb4d4d810372db4c6c70be7bde049368e4da57b942064e7a031640e78f4019a7200bc44fcb82ed018463f6b31a4570d530a3c696a396267781b940
languageName: node
linkType: hard
-"@tamagui/cli-color@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/cli-color@npm:1.116.12"
- checksum: 10/7a496aa41da13ccdb3b5bb3403ceaacca760f16d1c8276da18d574d32257e2e21fcdca0beb37111bc931bf6f637e5291ce11577949f20877a1a087dccec7cecb
+"@tamagui/cli-color@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/cli-color@npm:1.123.17"
+ checksum: 10/7a0395cc59ead1a0cbedfc6641259735f758959f9656afc8d4d74e0c84fcf042e3ec67a743acff8cd44ae62ab607e5361b38b0f7b469b62bda3fc6ed71ca7d1a
languageName: node
linkType: hard
-"@tamagui/collapsible@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/collapsible@npm:1.116.12"
+"@tamagui/collapsible@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/collapsible@npm:1.123.17"
dependencies:
- "@tamagui/animate-presence": "npm:1.116.12"
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/polyfill-dev": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
+ "@tamagui/animate-presence": "npm:1.123.17"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/polyfill-dev": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/54fce1b55dc448bb96d42269aa1fdcb09510280e5a8a0340d00c168ee2117808c3bde1e55d782f7edf3745ab95a64022079d1965db34ddb084c1611171543336
+ checksum: 10/2dd27ef5d92704790ccd12719bd6e9c4b76924b99668dc1ba2ef24f7896a82a7cfb12696850a1f44232e27916658c5bedd7a697eca0b6d804ab10712f319496a
languageName: node
linkType: hard
-"@tamagui/collection@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/collection@npm:1.116.12"
+"@tamagui/collection@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/collection@npm:1.123.17"
dependencies:
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/polyfill-dev": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/polyfill-dev": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/64afeb85e9b070427fe384ac6da94f7b6521684da7e1cc43bcdd7a89ca6a9706bd2b4d3f51ccb779aee7ccd00e1211bbccca50b742fb8181d7d7dd193a89b70a
+ checksum: 10/d2e367c25a30b68faa7e4f0c215e41edbc8872672571c4557a57294e7331f3ea2fb9289a09a0ad164081aef7d595ec5b63677a499db62ff9105aec51e3aae21d
languageName: node
linkType: hard
-"@tamagui/colors@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/colors@npm:1.116.12"
- checksum: 10/70423ad87d4092214bf63a5dd8d30ec37eb7b166a6799efdee9d3c9eb9cb20337029a7e256c52ba178ffcc22f10b552cc7e772d893110b68092196770c9ab673
+"@tamagui/colors@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/colors@npm:1.123.17"
+ checksum: 10/65210c08790562aeda7258ab8ba184c8d3f28b015f76ecfd9ffaef8536110c45add17caa12d420557c1fa58fb1ebd828f5d588ff0b84f8eecd4cf0c93ae74164
languageName: node
linkType: hard
-"@tamagui/compose-refs@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/compose-refs@npm:1.116.12"
+"@tamagui/compose-refs@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/compose-refs@npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/5311880a1c777013cc96431e9c89cf6cc6336a9c8ac4bcc96843ae228fe46d33c8d31c68181805210183cf4db2ed8fbdb330e2542c053778fe88e3fa4a7834b1
+ checksum: 10/1827af909c8eef9ce889960711d808a0c433510a64ff6b9f783dce6ae0133e395f6af1b0d89a17823b5ed1580b2ca6f5aa04cb6c06fa9b9c28184b4a4d2e76f6
languageName: node
linkType: hard
-"@tamagui/config-default@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/config-default@npm:1.116.12"
+"@tamagui/config-default@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/config-default@npm:1.123.17"
dependencies:
- "@tamagui/animations-css": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/shorthands": "npm:1.116.12"
- checksum: 10/1d2fea13a5dfa8075906966bdaab2275987a2f637d123b467733faa99a4f0483cba7e00b1a92ab214f60ba1e1e8c7c877a15b87c07a2b8fe9ed81eccbde0f54e
+ "@tamagui/animations-css": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/shorthands": "npm:1.123.17"
+ checksum: 10/73321cc2b24c5a69a75598cdf22edc6f2efe1bd0ebcc680107ec1385711dea075d0961a6b7be27151aa3a6372f2af39bf0c14f475a1295de05d03308a055a7aa
languageName: node
linkType: hard
-"@tamagui/config@npm:^1.116.12":
- version: 1.116.12
- resolution: "@tamagui/config@npm:1.116.12"
+"@tamagui/config@npm:^1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/config@npm:1.123.17"
dependencies:
- "@tamagui/animations-css": "npm:1.116.12"
- "@tamagui/animations-moti": "npm:1.116.12"
- "@tamagui/animations-react-native": "npm:1.116.12"
- "@tamagui/colors": "npm:1.116.12"
- "@tamagui/font-inter": "npm:1.116.12"
- "@tamagui/font-silkscreen": "npm:1.116.12"
- "@tamagui/react-native-media-driver": "npm:1.116.12"
- "@tamagui/shorthands": "npm:1.116.12"
- "@tamagui/themes": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
- checksum: 10/ba5d3f8eb0286fc0de023dbeab3d90263c184afd64629312435f3c7f486dc522d009510aeb47a401a03712518db2dc5f4da6651d37ffc42d10827ca069fd7a7d
+ "@tamagui/animations-css": "npm:1.123.17"
+ "@tamagui/animations-moti": "npm:1.123.17"
+ "@tamagui/animations-react-native": "npm:1.123.17"
+ "@tamagui/colors": "npm:1.123.17"
+ "@tamagui/font-inter": "npm:1.123.17"
+ "@tamagui/font-silkscreen": "npm:1.123.17"
+ "@tamagui/react-native-media-driver": "npm:1.123.17"
+ "@tamagui/shorthands": "npm:1.123.17"
+ "@tamagui/themes": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
+ checksum: 10/6234e28fea45fcb4ef8e9c62ad79774ab15d65495a40268cd224ff0ed390974ccd9807afa9d7b4dbf641af88acaf82025e74c83735543c46dd3296680f374dde
languageName: node
linkType: hard
-"@tamagui/constants@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/constants@npm:1.116.12"
+"@tamagui/constants@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/constants@npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/8813c78ba00653a1c2832fa51816ef07430fa43aec719517c77c72fb8b63561cdd04ddd8b2ca0fb678aa8b839c6ee13eecbaf4f55c5b693c3ec101c1d4db23e7
+ checksum: 10/ed16b73325c6b7397363c3160e6786506d94dd1140d4160bbcb87350d33d4c9da80fc8e3e99baa74929670660e2d8bb423bfa842ca8524e5ab2a1b1796f8375f
languageName: node
linkType: hard
-"@tamagui/core@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/core@npm:1.116.12"
+"@tamagui/core@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/core@npm:1.123.17"
dependencies:
- "@tamagui/react-native-use-pressable": "npm:1.116.12"
- "@tamagui/react-native-use-responder-events": "npm:1.116.12"
- "@tamagui/use-event": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
- checksum: 10/4b62fde4eab13e38c448bf5d1ccc195fcbc76a98a80f21f2e051c6314105d4ed3c062ece32003c5df3a9c434336bf05b165697dbfdc3837c5db20deb317e2e93
+ "@tamagui/react-native-media-driver": "npm:1.123.17"
+ "@tamagui/react-native-use-pressable": "npm:1.123.17"
+ "@tamagui/react-native-use-responder-events": "npm:1.123.17"
+ "@tamagui/use-event": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
+ checksum: 10/8235521baa1570a1b97af9594f49d3bcd0e2972a8f8e559a22c88def332af26a6ca21391ab18190cce24f8d1f373697c3452f9c102409841dd52d31c9d073f55
languageName: node
linkType: hard
-"@tamagui/create-context@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/create-context@npm:1.116.12"
+"@tamagui/create-context@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/create-context@npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/7e32f82ed88d55aa543ed8726f843b4f14c3f2e0ba0216e571e89392e8e97075efc03470fc25eeb5fa539415e7134ec44c633744ba6ecd3ccc35b9a891920f14
+ checksum: 10/e7e13c61455673b95214b4159150b1e8d3cbc2bd4f264f1c376299f519176ae1f5a796b25412b32ac95c07d6c0aed0679d5b7a7428f0e0c335a4dcbb0782651f
languageName: node
linkType: hard
-"@tamagui/create-theme@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/create-theme@npm:1.116.12"
+"@tamagui/create-theme@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/create-theme@npm:1.123.17"
dependencies:
- "@tamagui/web": "npm:1.116.12"
- checksum: 10/04f029c87ab8a9183c560c441b4e3c9a51cce3e6fceb8a09a724dc9f9e8ca7a7871854c199ab210a19954c8edcdbbb5e5717d395ba33c84eff6564292ca0093b
+ "@tamagui/web": "npm:1.123.17"
+ checksum: 10/63d23bf16ac788db07a20f672d213c940bc5a7ce1bd8b952f59d729afff53a16e92ac413151f98915ecc39b605f798099bd18c3bebafbcd0adeeb906bd243d4c
languageName: node
linkType: hard
-"@tamagui/cubic-bezier-animator@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/cubic-bezier-animator@npm:1.116.12"
- checksum: 10/1d5e76da48a24afda7c3eebff65866e1b3c9dd464b00cca34fb2f38f021c16057a01cfc0ff2107400473f1a24e8760230a0108807f00d982fb5a03dd758866e7
+"@tamagui/cubic-bezier-animator@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/cubic-bezier-animator@npm:1.123.17"
+ checksum: 10/8ac4301a3014d7252ea615b60341abdc2c93df2afc14393356548a88d10124c72949e95b4dde39b509c7d4cadea2f6f744083b7bdcce1bad9972881966d3390a
languageName: node
linkType: hard
-"@tamagui/dialog@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/dialog@npm:1.116.12"
+"@tamagui/dialog@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/dialog@npm:1.123.17"
dependencies:
- "@tamagui/adapt": "npm:1.116.12"
- "@tamagui/animate-presence": "npm:1.116.12"
- "@tamagui/aria-hidden": "npm:1.116.12"
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/dismissable": "npm:1.116.12"
- "@tamagui/focus-scope": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/polyfill-dev": "npm:1.116.12"
- "@tamagui/popper": "npm:1.116.12"
- "@tamagui/portal": "npm:1.116.12"
- "@tamagui/remove-scroll": "npm:1.116.12"
- "@tamagui/sheet": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/text": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
+ "@tamagui/adapt": "npm:1.123.17"
+ "@tamagui/animate-presence": "npm:1.123.17"
+ "@tamagui/aria-hidden": "npm:1.123.17"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/dismissable": "npm:1.123.17"
+ "@tamagui/focus-scope": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/polyfill-dev": "npm:1.123.17"
+ "@tamagui/popper": "npm:1.123.17"
+ "@tamagui/portal": "npm:1.123.17"
+ "@tamagui/remove-scroll": "npm:1.123.17"
+ "@tamagui/sheet": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/text": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/8e3b6c0e63b2c6a4429a41c04b2b5df22109fe1b3db21dfd4dcb2d0e82aea8b8290625c3b12c24965739c80b91a57b625f7a2f63613e2c31a8c1456635e95410
+ checksum: 10/23e1e35d87440c398d9d23168d38c1a87239c0a7f96c382f8c0322bb330c7152a662cd5f659d53b47e723fa6fbaadb61cfd58c781b6a236685bd1ae5a74ff548
languageName: node
linkType: hard
-"@tamagui/dismissable@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/dismissable@npm:1.116.12"
+"@tamagui/dismissable@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/dismissable@npm:1.123.17"
dependencies:
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/use-escape-keydown": "npm:1.116.12"
- "@tamagui/use-event": "npm:1.116.12"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/use-escape-keydown": "npm:1.123.17"
+ "@tamagui/use-event": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/a85de426f8b2165ea7f79ab79c6ead9e15312e0209319b95bad9a411cb9bfa242dd0326f53c49be68625d45dd6ef06b60203c9701a20f1b54aa3f96db4a029cb
+ checksum: 10/a13f26f55f647234b7f4494621333ae12a668f50283c13f6ac5869209bdc1eb58f0c66fa51a8304ceb091f8793fcfe9b21a80843993c4b9c8752e2258e544608
languageName: node
linkType: hard
-"@tamagui/elements@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/elements@npm:1.116.12"
+"@tamagui/elements@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/elements@npm:1.123.17"
dependencies:
- "@tamagui/core": "npm:1.116.12"
+ "@tamagui/core": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/f6f30f830c0b37e61a5609256ff69d8d052cf8711318c411fdbb0e2773af5bbefa76d4cb4b8faec144837c76c8abc88db78e0657577ab45244dc82d01c498b89
+ checksum: 10/16aa3b6a235e7d68d7ec7da8f0276ac94a11716596f36778301bd3e238b57a074fe3f40985e445953e921167aae25f09807a6fd055a19646cce2dd0f39235295
languageName: node
linkType: hard
-"@tamagui/fake-react-native@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/fake-react-native@npm:1.116.12"
- checksum: 10/bc874e19d2799785e008c31f50fb36ac61984da987d3cfc5aa3aa299dbc90273899400a1c04ef63efec5c51950a3a70ef7d5ed275b1db9354d8fdc0056b8fa4c
+"@tamagui/fake-react-native@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/fake-react-native@npm:1.123.17"
+ checksum: 10/50dff7468d1658a3ab46c2bf076b0e0f8c4654efe2384afee833e72ebef047da361b4471ec0f53772d7191b8cffabb9b594f9e61a045a7ce785c89cdc6b75ede
languageName: node
linkType: hard
-"@tamagui/floating@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/floating@npm:1.116.12"
+"@tamagui/floating@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/floating@npm:1.123.17"
dependencies:
"@floating-ui/react-dom": "npm:^2.1.2"
- "@floating-ui/react-native": "npm:^0.10.6"
+ "@floating-ui/react-native": "npm:^0.10.7"
peerDependencies:
react: "*"
- checksum: 10/491343ffac5726b50928f657afb1717b167f0b9fe585f183f8b1351fa7b6c139a531222c0389d7722808c724117f6961c43728e5bca93af9524d66afe6e44601
+ checksum: 10/aeb4845d9b94c4b001b35e9667bb45cfaa606ffce6e21c44d9af70786daec19ad5cc3e39efde2c4379f852342750e1ae47fb89d453c02cdc64ad1a6e1d6a4b2f
languageName: node
linkType: hard
-"@tamagui/focus-scope@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/focus-scope@npm:1.116.12"
+"@tamagui/focus-scope@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/focus-scope@npm:1.123.17"
dependencies:
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/start-transition": "npm:1.116.12"
- "@tamagui/use-event": "npm:1.116.12"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/start-transition": "npm:1.123.17"
+ "@tamagui/use-event": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/80fa70acdddb796bd80bc7c11ad208bdd9a98fb266bef4f1b17b178e03760919f19c968fd31a9b7e5bb2e00a046ab0f8f991530874b893385a39b9963deb2abc
+ checksum: 10/32df62d0df4cd2dcfb0d0c54bb2ffbfe9757709df80238d5cbd2a6a1ee0a00c2ab9d4d1aca72b092a27d9cb0156a016cd7dafbd56e1b95c35821420b1f965d24
languageName: node
linkType: hard
-"@tamagui/focusable@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/focusable@npm:1.116.12"
+"@tamagui/focusable@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/focusable@npm:1.123.17"
dependencies:
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/c395db95515150dea18b6c5fced44951bc8f1a7ee2d715275740289c4357eb52433d369e95f52b9d110d531d2367b3fa3daf012c70c0ec99965b6cda9dbde748
+ checksum: 10/38b5a72c9f73375ebc31d4ca336a7d401b4911c40d2d444da754f79fe5bbd0d6e09205e8c0038abc21f0adec0107eea3aaa148b2b58930d2148ec845bb98f8da
languageName: node
linkType: hard
-"@tamagui/font-inter@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/font-inter@npm:1.116.12"
+"@tamagui/font-inter@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/font-inter@npm:1.123.17"
dependencies:
- "@tamagui/core": "npm:1.116.12"
- checksum: 10/91af27ec0324e364f107eac919fefed5bbfecef3e8d4f406980d4decb8cfc54cde3204c79f991ffb17406a886661346ebb2a5851ca570052bd079e22e5bcf713
+ "@tamagui/core": "npm:1.123.17"
+ checksum: 10/74dc6d65571ddef38fec97858ff430b83ed7518923b4885c21686a73fcd6b00854b171fe27d3277aa70945c06e77e541cb96396dbf2caeb9b4cbd75775e910cf
languageName: node
linkType: hard
-"@tamagui/font-silkscreen@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/font-silkscreen@npm:1.116.12"
+"@tamagui/font-silkscreen@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/font-silkscreen@npm:1.123.17"
dependencies:
- "@tamagui/core": "npm:1.116.12"
- checksum: 10/70c60c668c3dd7c0833c86c0506ac51a5be01af4b5a4013d2be4a52f6c7b0d47ef996f2405eb86257ad6cb5facfda85042b2c0511eeb6b7b39ad933c02b76860
+ "@tamagui/core": "npm:1.123.17"
+ checksum: 10/73ff0b5ba980163943d3326140e667a7669c4819bf914db8c526dea44beeb168b79525dee53d5ab2d95921a33cf97cad5408431418514ece8677958d2ee70163
languageName: node
linkType: hard
-"@tamagui/font-size@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/font-size@npm:1.116.12"
+"@tamagui/font-size@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/font-size@npm:1.123.17"
dependencies:
- "@tamagui/core": "npm:1.116.12"
+ "@tamagui/core": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/01509cfa12671fce97b6e241a9e2d4c6810448bfdb7a76fa74224d3326539af261f29d2e8e8b323d781e4b320ff010c8411faac8cb4a74d7206331c895735c3c
+ checksum: 10/027ab05f7ab5ad75f430e743d8ead92fd02f65bba67273c972bd918e73ed8948bcda4749bc906fda86d51f69238dfdd437748a1c14fbf51baa43e260e1d2e54f
languageName: node
linkType: hard
-"@tamagui/form@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/form@npm:1.116.12"
+"@tamagui/form@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/form@npm:1.123.17"
dependencies:
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/focusable": "npm:1.116.12"
- "@tamagui/get-button-sized": "npm:1.116.12"
- "@tamagui/get-font-sized": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/text": "npm:1.116.12"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/focusable": "npm:1.123.17"
+ "@tamagui/get-button-sized": "npm:1.123.17"
+ "@tamagui/get-font-sized": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/text": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/cc319bc9157fdb639c31b41ee4414fc26e02e405fc6e01c272d3319b7460f683687cb375f730ef2be53992ff779cfa1cf35d5e40cc82ae3a40fbfb0451cd7856
+ checksum: 10/893f43896334ed884ae2c3149d914f896af12f5ad3ae7d467f0b2b5f6ddb4590ed3a22bf36cfe7a3c9661499181bcd00d12a22c9daa8a3717a2ab8dc8b7e1fd3
languageName: node
linkType: hard
-"@tamagui/generate-themes@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/generate-themes@npm:1.116.12"
+"@tamagui/generate-themes@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/generate-themes@npm:1.123.17"
dependencies:
- "@tamagui/create-theme": "npm:1.116.12"
- "@tamagui/theme-builder": "npm:1.116.12"
- "@tamagui/types": "npm:1.116.12"
+ "@tamagui/create-theme": "npm:1.123.17"
+ "@tamagui/theme-builder": "npm:1.123.17"
+ "@tamagui/types": "npm:1.123.17"
esbuild-register: "npm:^3.6.0"
fs-extra: "npm:^11.2.0"
- checksum: 10/c1017366fe577a6486ef71493b9d415ba2ab91ad8eab59af600e425e9564bcb3c818338735543372c6abfe1024b10813e1f0fbe06be3af8b833972f6e648ce02
+ checksum: 10/779ace3a0082f94f7469af1dc694a655ad3ee63ae0e67140f61e1004bb251118f679a1f0ed78d06655e59ed628c57660785efb6c26ee0482257ba4327185854c
languageName: node
linkType: hard
-"@tamagui/get-button-sized@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/get-button-sized@npm:1.116.12"
+"@tamagui/get-button-sized@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/get-button-sized@npm:1.123.17"
dependencies:
- "@tamagui/get-token": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/get-token": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/072c69c3c510dfbb5e93362922b7740f30490701a62d28cc734d2da935a86fad1c48617685d812ea60441713de600f3719e966452c84415c2dbd5cf0dcee9157
+ checksum: 10/8dd2c8771159f23dcebcee544d6fe4d7d5a9832513cf75d7d0432458c4e7ea746eadc177806bbec814d67b973e7ae8ec6c7e620d072e071fcff9917ac116eeba
languageName: node
linkType: hard
-"@tamagui/get-font-sized@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/get-font-sized@npm:1.116.12"
+"@tamagui/get-font-sized@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/get-font-sized@npm:1.123.17"
dependencies:
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/6fa82fcdb11dc077ec2022ef4879147b090a83d4857e61ae76fd3ddf3e49b0a39ac5f39bee26f48614706172c5cf5874bc759cf80db50b68fa4ced21beef0a38
+ checksum: 10/07f59f8dbc31e56b09102892ee7b86c32984e7e5787ce3f1a6727ac80bec449fa45236a630e2402a2dc2551cb997ac9b4a6cb885176848b6bec3c260091633e0
languageName: node
linkType: hard
-"@tamagui/get-token@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/get-token@npm:1.116.12"
+"@tamagui/get-token@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/get-token@npm:1.123.17"
dependencies:
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/1cf23e61a052cd91f66b011f4751331a472cd3dbc20caf805b303d304a989ccefb2e3aee3d896bda85527dfdf46a83dcad9705ecd719482d7a273db91f35ac3c
+ checksum: 10/c5c898baec07fcd5f549e8b0df81cbd3e6bf02babe51b9c63d1695393d4fce62d1c99d6feedc85a45765c95bbaff72c931c0c1bc5441ac28773e03f233cc0871
languageName: node
linkType: hard
-"@tamagui/group@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/group@npm:1.116.12"
+"@tamagui/group@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/group@npm:1.123.17"
dependencies:
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/9721ecb8bdaf7827e1efa427bb0cabb37c646dae4207835040bc0fb2879cd7b44bb165777faaa9d85f4f3bcecafe26beffa6ebfdcfc392ae4baa210af9a00bd5
+ checksum: 10/ad9947025e72310a382a100389b7738c010127a95801bb6e2430419a6c2d04b209b8c2b6f390fd3c7757ff487bd878dfa32a4cf9913d4ceb48d21cba45ec5e77
languageName: node
linkType: hard
-"@tamagui/helpers-icon@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/helpers-icon@npm:1.116.12"
+"@tamagui/helpers-icon@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/helpers-icon@npm:1.123.17"
dependencies:
- "@tamagui/core": "npm:1.116.12"
+ "@tamagui/core": "npm:1.123.17"
peerDependencies:
react: "*"
react-native-svg: ">=12"
- checksum: 10/ef95c7d1b8e3ed354c6760d2c0e1c7cbc0ab67c649dbb7473b3fc8fdcebb8c2b8c2d193bea821ced8042e3b959b4835154cfdccc001898669f994d5d92aaeaad
+ checksum: 10/dbca782447c0cc7c2f490c0f652a90a3dd855221558c65312e50cf4ddc344703850740fd366838b89e23c756a2e8a76e6634c43c1c9221e4d1a107b2b63a51f2
languageName: node
linkType: hard
-"@tamagui/helpers-node@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/helpers-node@npm:1.116.12"
+"@tamagui/helpers-node@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/helpers-node@npm:1.123.17"
dependencies:
- "@tamagui/types": "npm:1.116.12"
- checksum: 10/8627cd9f574cb29e2f6ca4a18e9a73f9f3fa393290740d218303ba99b57598202b6cdd230fe3baa3d3bd6522bf650fa7e955d2f6b2e410f1e79edc498ba879e8
+ "@tamagui/types": "npm:1.123.17"
+ checksum: 10/603bc77fce83878a00f8820416f8ba9cd314ac7a2ea8682ce033710fabd0dbb777f2b87b0c6e51975622c01de02ff786953cbcc6ed8891480362d0e0a7e47e72
languageName: node
linkType: hard
-"@tamagui/helpers-tamagui@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/helpers-tamagui@npm:1.116.12"
+"@tamagui/helpers-tamagui@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/helpers-tamagui@npm:1.123.17"
dependencies:
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/ddb7a805706cb2d9502b19d60e728f6e96fe06608a61c39d1091699f00e8ae6fefd9246633f0f145b68a1fd477e4fa3ad705ba4e0d62a87f8edbbffbc0d433db
+ checksum: 10/65f95a3f4e6cb9768bece03b0fd143a5ad2d1257e5a4aeb486ba8117ca2bdd23d6af8939be7dbfc069665a86bbeb91f9c9b17dbe61bb600c3fcd43c890276951
languageName: node
linkType: hard
-"@tamagui/helpers@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/helpers@npm:1.116.12"
+"@tamagui/helpers@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/helpers@npm:1.123.17"
dependencies:
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/simple-hash": "npm:1.116.12"
- checksum: 10/0ac838c2e81ead3728378da72db9195d06eb81edb3d8e85a45c784d2fddc8bece13fa4daa0360f514d2ee58e4fcd1d11a027198f79d6e82fb01c6c0dff455782
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/simple-hash": "npm:1.123.17"
+ checksum: 10/f2e902585b43f0930cd166ffb78970a619e94b9db7dad693c2bd22fd97543b10f5afe7b1394f87a4a397a2e70fcca307f55d4af04c467404c7a339998c1c1189
languageName: node
linkType: hard
-"@tamagui/image@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/image@npm:1.116.12"
+"@tamagui/image@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/image@npm:1.123.17"
dependencies:
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/7d37399c8099c2f12320e69b81cf7c2dc791d903199027335af9df587259ab2e75d556c962e59f218a079eed1af1d62c4e0b8372a4fc8b62084ab7bbebe15064
+ checksum: 10/cfa43ef103a6067695237601c8cefea9468da26559e80af4886d87b1e0b3f0fd57187eb7edccdced1e4ed6957809ec18054fff9d8d21c9ee23ff380e0a28a05d
languageName: node
linkType: hard
-"@tamagui/label@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/label@npm:1.116.12"
+"@tamagui/label@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/label@npm:1.123.17"
dependencies:
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/focusable": "npm:1.116.12"
- "@tamagui/get-button-sized": "npm:1.116.12"
- "@tamagui/get-font-sized": "npm:1.116.12"
- "@tamagui/text": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/focusable": "npm:1.123.17"
+ "@tamagui/get-button-sized": "npm:1.123.17"
+ "@tamagui/get-font-sized": "npm:1.123.17"
+ "@tamagui/text": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
react-native: "*"
- checksum: 10/d914f498432c988dfd2bb4eeb5323daa905415e000d13ba7db8ebc8625e324f24075fb7a9bbd10627b8480ddcb05e6f8032c45aaedcea15b2c8b4fb8a59c7640
+ checksum: 10/514f9af8f1b89f8fbe76ab893a172e0ffdd8fe2deb485ef3e568b08ddca76036f82b4a42b9301b97ab256ae9bb6b78224852793f440caa4b02d72df411783065
languageName: node
linkType: hard
-"@tamagui/linear-gradient@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/linear-gradient@npm:1.116.12"
+"@tamagui/linear-gradient@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/linear-gradient@npm:1.123.17"
dependencies:
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/5e605bba90640f48e66be211e597280d40d5b27bc9ce33bbba7498964143e2494b96a400bebb4086ced4a2c79656ae9507a4ab724bbbc7dcdcd76091d645e5f1
+ checksum: 10/9dc7236c64ce6e356cd7268a8c59bce0d6eda15de3c9514018c3fd64721a75a832c09226934f9b7049adbbece2af3e07c31c7dde3221235cdd8dd77c53d936ad
languageName: node
linkType: hard
-"@tamagui/list-item@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/list-item@npm:1.116.12"
+"@tamagui/list-item@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/list-item@npm:1.123.17"
dependencies:
- "@tamagui/font-size": "npm:1.116.12"
- "@tamagui/get-font-sized": "npm:1.116.12"
- "@tamagui/get-token": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/helpers-tamagui": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/text": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/font-size": "npm:1.123.17"
+ "@tamagui/get-font-sized": "npm:1.123.17"
+ "@tamagui/get-token": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/helpers-tamagui": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/text": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/67f4a9685d0e7e4a8e6e0755819f3b82efc4609504885a9e40721d3c27ef940536a23cbf67632b8e0cdafe144d28db4bd87f2380619b9f1187a3be5c46ffa521
+ checksum: 10/b0b22d76296aa12f0de00a27126e590817d7a717aa00f2b061fda2c7daee3393d9c403d238eba9f08a2a1d9943e6c3b3405bf5253f0107780c5930dbadfb2c9f
languageName: node
linkType: hard
-"@tamagui/lucide-icons@npm:^1.116.12":
- version: 1.116.12
- resolution: "@tamagui/lucide-icons@npm:1.116.12"
+"@tamagui/lucide-icons@npm:^1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/lucide-icons@npm:1.123.17"
dependencies:
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/helpers-icon": "npm:1.116.12"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/helpers-icon": "npm:1.123.17"
peerDependencies:
react: "*"
react-native-svg: ">=12"
- checksum: 10/d4cf13c7b99680774d0f069c7985ce8a14ce8f0e081fa779360d30c3dde033d0bef7809e999339074c73193b7514786c0b87ea78b0adf6713e3aec4ad789e037
+ checksum: 10/5ef0256991fdc3799c1aa27bf5956817577529d7c37396608c28bf3d166bcf07b499efb233b7c98a19e01ff908172b91c17e08bfdab83d4883b7515a7d76ebbd
languageName: node
linkType: hard
-"@tamagui/metro-plugin@npm:^1.116.12":
- version: 1.116.12
- resolution: "@tamagui/metro-plugin@npm:1.116.12"
+"@tamagui/metro-plugin@npm:^1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/metro-plugin@npm:1.123.17"
dependencies:
- "@tamagui/static": "npm:1.116.12"
+ "@tamagui/static": "npm:1.123.17"
fs-extra: "npm:^11.2.0"
metro-config: "npm:^0.80.4"
metro-transform-worker: "npm:^0.80.4"
- react-native-css-interop: "npm:~0.0.21"
- checksum: 10/f99e1b64a7c49ccea4442d7f14265c0432e141e4951d9a3febafa7c02fa03b424df5cb922a41ae5020a9eec6e34eb5f102c3e5ef020c76fa0284c0bad47e21d8
+ react-native-css-interop: "npm:^0.1.22"
+ checksum: 10/738614c08fdce53fdd40175729e94e3d8118a336d2614cbfe04fd6602d4ab3a361647b37d52f84809d50360a2519ad294ce9bf920a8566f294da6753533ee409
languageName: node
linkType: hard
-"@tamagui/normalize-css-color@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/normalize-css-color@npm:1.116.12"
+"@tamagui/normalize-css-color@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/normalize-css-color@npm:1.123.17"
dependencies:
"@react-native/normalize-color": "npm:^2.1.0"
- checksum: 10/4b4c590730f9a93f0630d0451259244aa879175be7e84edd6a7687795d8dbbaf5d387449f1cfae279a9ebcceca668a5e7bc0a7f4a05b13647215c36214868f68
- languageName: node
- linkType: hard
-
-"@tamagui/polyfill-dev@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/polyfill-dev@npm:1.116.12"
- checksum: 10/4cd3bbb418f39f7cc033096f575896d2a8d6b2366a493c1d7896333ee51fe4ce3ba24006a0a85fa15c475ff7e842e6ea11941fec5b3603fece6f06075016c909
- languageName: node
- linkType: hard
-
-"@tamagui/popover@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/popover@npm:1.116.12"
- dependencies:
- "@floating-ui/react": "npm:^0.26.24"
- "@tamagui/adapt": "npm:1.116.12"
- "@tamagui/animate": "npm:1.116.12"
- "@tamagui/aria-hidden": "npm:1.116.12"
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/dismissable": "npm:1.116.12"
- "@tamagui/floating": "npm:1.116.12"
- "@tamagui/focus-scope": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/polyfill-dev": "npm:1.116.12"
- "@tamagui/popper": "npm:1.116.12"
- "@tamagui/portal": "npm:1.116.12"
- "@tamagui/remove-scroll": "npm:1.116.12"
- "@tamagui/scroll-view": "npm:1.116.12"
- "@tamagui/sheet": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
+ checksum: 10/f96cbd4a888aa06866f4c3a5e03354be0a28882300e899df6ded8034fd3e6cd8d18f04fd3da4a7f3b973f569663957377a2f2a3b8afba7fcbd57db83f4b05a7f
+ languageName: node
+ linkType: hard
+
+"@tamagui/polyfill-dev@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/polyfill-dev@npm:1.123.17"
+ checksum: 10/cb7ead315aadc34e11300f5861e0ef999e03826b944e53430aa8675f07bd7800364eeebaadb58f661643b5774c569e374c55fd5bc3b077ea050d2ebdf4fb6db5
+ languageName: node
+ linkType: hard
+
+"@tamagui/popover@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/popover@npm:1.123.17"
+ dependencies:
+ "@floating-ui/react": "npm:^0.27.3"
+ "@tamagui/adapt": "npm:1.123.17"
+ "@tamagui/animate": "npm:1.123.17"
+ "@tamagui/aria-hidden": "npm:1.123.17"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/dismissable": "npm:1.123.17"
+ "@tamagui/floating": "npm:1.123.17"
+ "@tamagui/focus-scope": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/polyfill-dev": "npm:1.123.17"
+ "@tamagui/popper": "npm:1.123.17"
+ "@tamagui/portal": "npm:1.123.17"
+ "@tamagui/remove-scroll": "npm:1.123.17"
+ "@tamagui/scroll-view": "npm:1.123.17"
+ "@tamagui/sheet": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
react-freeze: "npm:^1.0.3"
peerDependencies:
react: "*"
- checksum: 10/21d4f03b0873d04a9adcb5c9b02aba073cf5f6489f162bd30719fc96f239b6db86b7c38feb591fb8aec0a2b86e281ba2c22d45cbe4a100a362976df0ea844d68
+ checksum: 10/8f41bf7ab0805b2cb81c45649fe0dc812291084cd37b728631732086df09fd01e379921f94ddb701ef3042dc3d0675b580940b2e75a35475af2a2efea9193a49
languageName: node
linkType: hard
-"@tamagui/popper@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/popper@npm:1.116.12"
+"@tamagui/popper@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/popper@npm:1.123.17"
dependencies:
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/floating": "npm:1.116.12"
- "@tamagui/get-token": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/start-transition": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/floating": "npm:1.123.17"
+ "@tamagui/get-token": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/start-transition": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/685633894a957641db88980f8691ef75b10e6f193b7d4437477c1aa6dbf405a5d95d6da47be7b861cc77e2cb7049cb30497697dffff386f7a294864babf6f7b3
+ checksum: 10/5c7907ab3c0690598be9c20b7e1c20abe4aeb5f6248617c9b48ff719ff7aeccffdc3ff3d721ec835d522add7ba87f7d4ace648c04423d31784dad82756c79915
languageName: node
linkType: hard
-"@tamagui/portal@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/portal@npm:1.116.12"
+"@tamagui/portal@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/portal@npm:1.123.17"
dependencies:
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/start-transition": "npm:1.116.12"
- "@tamagui/use-did-finish-ssr": "npm:1.116.12"
- "@tamagui/use-event": "npm:1.116.12"
- react: "npm:>=18.0.0"
- react-dom: "npm:>=18.0.0"
- checksum: 10/7144649ba71f3e94ce5b9cc7d47ff78202d2d735d157f09e3d1dc64cb90a1aadc1101e1e433c1c13f1b8844c9cdbe37b46c6bb2f609779f83bccd88587fe0f7d
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/start-transition": "npm:1.123.17"
+ "@tamagui/use-did-finish-ssr": "npm:1.123.17"
+ "@tamagui/use-event": "npm:1.123.17"
+ checksum: 10/725eff3e2e9f9b1859537f6d85db8060338dabd0333545df81631dc69a8360e4b407f7f3abff395fc768e59f9719f52e4dca9dbfb13c607755ef5e72a9ff3fe8
languageName: node
linkType: hard
-"@tamagui/progress@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/progress@npm:1.116.12"
+"@tamagui/progress@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/progress@npm:1.123.17"
dependencies:
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/get-token": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/get-token": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/7ff348204f8ad742ddfd3d6a374ad8ea74dff79ae9e0c3d78d7d36ce1c1debf292dfb1774eb2a24882af76e90a7657c4920aff6daed537c224094a3f67caf6a0
+ checksum: 10/a8aeeadc72b7cd28164c3d5f2892288bca69459809f8a07025966977b9f2b75ffc6f544b32f1233ee3244729cf11265c1776a71933a819c21ebfe71bdcfb097f
languageName: node
linkType: hard
-"@tamagui/proxy-worm@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/proxy-worm@npm:1.116.12"
- checksum: 10/180ae15c4698749e52b4865139bed5fff6670a303b406546988223f3fc80d87eea12684844bc06c917e855cf281af25f1b2d633adc3f30d9bf865e65f759915e
+"@tamagui/proxy-worm@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/proxy-worm@npm:1.123.17"
+ checksum: 10/a0a020300e34865bb6bbe1b74cdb7f1b470ea7d70b25617edcfa0dcd757fb8675b8f7299ad8ae09e7bc158c0b2cde45ab26843a30950400a2421129b4c8be239
languageName: node
linkType: hard
-"@tamagui/radio-group@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/radio-group@npm:1.116.12"
+"@tamagui/radio-group@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/radio-group@npm:1.123.17"
dependencies:
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/focusable": "npm:1.116.12"
- "@tamagui/get-token": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/label": "npm:1.116.12"
- "@tamagui/radio-headless": "npm:1.116.12"
- "@tamagui/roving-focus": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
- "@tamagui/use-previous": "npm:1.116.12"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/focusable": "npm:1.123.17"
+ "@tamagui/get-token": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/label": "npm:1.123.17"
+ "@tamagui/radio-headless": "npm:1.123.17"
+ "@tamagui/roving-focus": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
+ "@tamagui/use-previous": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/d2f31bc00f9ba2e81071dd5ba4828b9aa3eb240c21f98d700481c5ed623485bd61bf650dc48f215f574319acaa3a0fdac53276b9343ce062efc55b62368460b7
+ checksum: 10/639e5d574c11cdadc24f94b0626d85519af721788aabe9925b8b689cbe354a897d4c7437908bd338e49790975827f958382a1f18fa79dfc004e97fe989922def
languageName: node
linkType: hard
-"@tamagui/radio-headless@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/radio-headless@npm:1.116.12"
+"@tamagui/radio-headless@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/radio-headless@npm:1.123.17"
dependencies:
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/focusable": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/label": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
- "@tamagui/use-previous": "npm:1.116.12"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/focusable": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/label": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
+ "@tamagui/use-previous": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/ee5c552f2f5afd702c0fb87017a4d0888d03688141cf09a6687ea964a995dcb2b7cb4fd93ea1486a50967226e04137b6614c9124a7ba67fdd22b82705db4f413
+ checksum: 10/881ac90b964030df2b388d3fe6797e13a4b5a7ccdf431adfefb8dfae8422bf8acf1ab1828644c8fd151601fec19131ffb0723b491bd527d18d5c4d7816088400
languageName: node
linkType: hard
-"@tamagui/react-native-media-driver@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/react-native-media-driver@npm:1.116.12"
+"@tamagui/react-native-media-driver@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/react-native-media-driver@npm:1.123.17"
dependencies:
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react-native: "*"
- checksum: 10/bd45a9f2623aa8dc30efe538e6281609dd9b3f1b6c0e3e36d6e52a636b16d3a8b6cdc3dfaed6efae1cb5d2d7fc4fd5c5ccdf49d6d1bfa69342b7f4ef7b2934f6
+ checksum: 10/66a956b3fd520fa83f001d8a5c0e3172922e8ea19ec7ee47c4761b7c9440814ac1f24b9cc741df27fdf268c235e2d804f04ef5d28b75b6779f94c302b6832eb8
languageName: node
linkType: hard
-"@tamagui/react-native-use-pressable@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/react-native-use-pressable@npm:1.116.12"
+"@tamagui/react-native-use-pressable@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/react-native-use-pressable@npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/33acfe30368d24b865da58c3f0f20c0269658fe56c9bdaaa9e4ebd51d1dc2fe983904e0fa51a6aaf9bfa90bbe266472db959f15bf5d66f09f35531a6fae8bb45
+ checksum: 10/de0ca9092bb39f3f91a4fd4a0b37f643540082a6e4f7de107f4b58857f85e955b8f485c52055605582bb4eb24889e1d31169e5b7926f3f2fdf20e3ff1fe4ca8e
languageName: node
linkType: hard
-"@tamagui/react-native-use-responder-events@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/react-native-use-responder-events@npm:1.116.12"
+"@tamagui/react-native-use-responder-events@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/react-native-use-responder-events@npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/6fed0b3aa7b14ecb39a0df765f3ffb0bc6c652560d7241fc32f0d074f43bfc3908a8c48dda6da338b69d148de22961b0c095aac971937720af4610ebc83310ce
+ checksum: 10/97bb489913bf96ba6d33116afaf542e25e3e365fab88c9f7c7b1de47d9cb4869c2ce132c258c88bc75a4e06baf8f6ee2f5c14d66a40f632849983b35d3e0ad20
languageName: node
linkType: hard
-"@tamagui/react-native-web-internals@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/react-native-web-internals@npm:1.116.12"
+"@tamagui/react-native-web-internals@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/react-native-web-internals@npm:1.123.17"
dependencies:
- "@tamagui/normalize-css-color": "npm:1.116.12"
- "@tamagui/react-native-use-pressable": "npm:1.116.12"
- "@tamagui/react-native-use-responder-events": "npm:1.116.12"
- "@tamagui/simple-hash": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
- react: "npm:>=18.0.0"
- checksum: 10/b74be5379ecb24f1183d9610a2d057a641a89c357507220eda8f3f30f3cfad276390ad592aba86bc675e95f8f9496642791fcdd26ce4dbffa97851922801dd4f
+ "@tamagui/normalize-css-color": "npm:1.123.17"
+ "@tamagui/react-native-use-pressable": "npm:1.123.17"
+ "@tamagui/react-native-use-responder-events": "npm:1.123.17"
+ "@tamagui/simple-hash": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
+ checksum: 10/97fad44668ff043a16693a80bfa6839421a7c44c3483bd7b3a597166acbb34082b46a7043e3dbcce835a2e2da0701beac8e26cc84719e0e7661f375493f19958
languageName: node
linkType: hard
-"@tamagui/react-native-web-lite@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/react-native-web-lite@npm:1.116.12"
+"@tamagui/react-native-web-lite@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/react-native-web-lite@npm:1.123.17"
dependencies:
- "@tamagui/normalize-css-color": "npm:1.116.12"
- "@tamagui/react-native-use-pressable": "npm:1.116.12"
- "@tamagui/react-native-use-responder-events": "npm:1.116.12"
- "@tamagui/react-native-web-internals": "npm:1.116.12"
+ "@tamagui/normalize-css-color": "npm:1.123.17"
+ "@tamagui/react-native-use-pressable": "npm:1.123.17"
+ "@tamagui/react-native-use-responder-events": "npm:1.123.17"
+ "@tamagui/react-native-web-internals": "npm:1.123.17"
invariant: "npm:^2.2.4"
peerDependencies:
react: "*"
- checksum: 10/4104e24b93823accc68d3e1bd1df24e2fbe2f2b11d02e6b33ba6f3e0a59b4dfd8103013abf0ce52e31e90015248157cfec716d50bbe5d995627b3075f0e7e860
+ checksum: 10/d825385ae8a5e9a4f550fa617c4105613fd70adecda34a8bb7efd851ba54bf50052a3f7aac9d393fc2f1a00e82ec04654cc672b74d8b93f920fc26731560a15d
languageName: node
linkType: hard
-"@tamagui/remove-scroll@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/remove-scroll@npm:1.116.12"
+"@tamagui/remove-scroll@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/remove-scroll@npm:1.123.17"
dependencies:
react-remove-scroll: "npm:^2.6.0"
peerDependencies:
react: "*"
- checksum: 10/f637b37677ef1bdf565e7c380f93604f09c642f2a651474b27e6ea43d90c120d043f66be0292d36e565431f124615feac24ca3e24d5351418c41a0aaa5c905fd
+ checksum: 10/fe5c22fda127eee45e3361b7ae4528573629bbc5d4ed16785687eab857d066df5f90d97df9f3708d73ec85141ab77ee9099272098f4fe076bcca899f4e662607
languageName: node
linkType: hard
-"@tamagui/roving-focus@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/roving-focus@npm:1.116.12"
+"@tamagui/roving-focus@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/roving-focus@npm:1.123.17"
dependencies:
- "@tamagui/collection": "npm:1.116.12"
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
- "@tamagui/use-direction": "npm:1.116.12"
- "@tamagui/use-event": "npm:1.116.12"
+ "@tamagui/collection": "npm:1.123.17"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
+ "@tamagui/use-direction": "npm:1.123.17"
+ "@tamagui/use-event": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/0cf49bb0ea51b324b4574a29dd76538b10d8cd196418715460142af3a62ebe37c1c388d86fd5d7edb2ac57242df1d2683fadce5a5e47aeadeedbc6f140932498
+ checksum: 10/9b81ee320572f7966a16081a8f0a8a238be94679c4b7fd4809f5daf04962964bd4923af8f969a4dfbdf767e2c6edcfcd0f97439c1ae7c56b85448db36361eff6
languageName: node
linkType: hard
-"@tamagui/scroll-view@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/scroll-view@npm:1.116.12"
+"@tamagui/scroll-view@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/scroll-view@npm:1.123.17"
dependencies:
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/5276a0e35da8abcb992c510a04723e61ed1395c164b896c74fb43de7284aec761ac5aac796c6fb1f0bb07367a3ef14d2408891f103045a20910e7783717f6053
+ checksum: 10/1f2b1a954041b8c1e3013b2eb5681b4f2daadb7f8269e01b1062ee317650200373d46a531f19cde43f1ce42570a28f7462be78782c2e9e8c7e0c8e5d14051290
languageName: node
linkType: hard
-"@tamagui/select@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/select@npm:1.116.12"
+"@tamagui/select@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/select@npm:1.123.17"
dependencies:
- "@floating-ui/react": "npm:^0.26.24"
+ "@floating-ui/react": "npm:^0.27.3"
"@floating-ui/react-dom": "npm:^2.1.2"
- "@floating-ui/react-native": "npm:^0.10.6"
- "@tamagui/adapt": "npm:1.116.12"
- "@tamagui/animate-presence": "npm:1.116.12"
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/dismissable": "npm:1.116.12"
- "@tamagui/focus-scope": "npm:1.116.12"
- "@tamagui/get-token": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/list-item": "npm:1.116.12"
- "@tamagui/portal": "npm:1.116.12"
- "@tamagui/remove-scroll": "npm:1.116.12"
- "@tamagui/separator": "npm:1.116.12"
- "@tamagui/sheet": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/text": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
- "@tamagui/use-debounce": "npm:1.116.12"
- "@tamagui/use-event": "npm:1.116.12"
- "@tamagui/use-previous": "npm:1.116.12"
+ "@floating-ui/react-native": "npm:^0.10.7"
+ "@tamagui/adapt": "npm:1.123.17"
+ "@tamagui/animate-presence": "npm:1.123.17"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/dismissable": "npm:1.123.17"
+ "@tamagui/focus-scope": "npm:1.123.17"
+ "@tamagui/get-token": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/list-item": "npm:1.123.17"
+ "@tamagui/portal": "npm:1.123.17"
+ "@tamagui/remove-scroll": "npm:1.123.17"
+ "@tamagui/separator": "npm:1.123.17"
+ "@tamagui/sheet": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/text": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
+ "@tamagui/use-debounce": "npm:1.123.17"
+ "@tamagui/use-event": "npm:1.123.17"
+ "@tamagui/use-previous": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/4e502961366e8b257d5c0724ea45881b7df3895adaabdff9c0652a7342585a1806c4521f5aa3512770d34006bd7911bd6fd45f5ee662a13cda39212745a023a6
+ checksum: 10/2e52f8274191503781dd66bd6b33c2352eb916ff740b5f79f7cc431f3f35b3e44c82630208a4d5601feabb976846efb078c131b2dc3d871e3358accc346b9a31
languageName: node
linkType: hard
-"@tamagui/separator@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/separator@npm:1.116.12"
+"@tamagui/separator@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/separator@npm:1.123.17"
dependencies:
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/1e9c468cffc2bb200249f4b5fc0140e41eacdef209b9eb1fb05492c61580ea4bf0e680dfcd181838ddc0c412db8691d6e747358bec5ea94e6d6347744f6693a6
+ checksum: 10/412cc92fb7c0247410eff1f3059da712fb902ea168807ace44494b71863159ded93ea8eedb32b05cc3bb14dc7497a12af660f6e716896d8f66c2dc35bd7fdbcf
languageName: node
linkType: hard
-"@tamagui/shapes@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/shapes@npm:1.116.12"
+"@tamagui/shapes@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/shapes@npm:1.123.17"
dependencies:
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/edb91adfab2637d7e08eb805a0df801a025ed0858e6dc822a78b9cae5a8abfa72bc72681765f8f0350b18453c534aa5e2f9758fca8a350e766d50c78858433e6
- languageName: node
- linkType: hard
-
-"@tamagui/sheet@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/sheet@npm:1.116.12"
- dependencies:
- "@tamagui/adapt": "npm:1.116.12"
- "@tamagui/animate-presence": "npm:1.116.12"
- "@tamagui/animations-react-native": "npm:1.116.12"
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/portal": "npm:1.116.12"
- "@tamagui/remove-scroll": "npm:1.116.12"
- "@tamagui/scroll-view": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/use-constant": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
- "@tamagui/use-did-finish-ssr": "npm:1.116.12"
- "@tamagui/use-keyboard-visible": "npm:1.116.12"
+ checksum: 10/ad19af5afc3f2fb10a1702edb29257a3a18c220769b48cee527e1480347afdd671f9294064016d2555012461c20d1d178d598ea885c77d77456c8f3a6968cb58
+ languageName: node
+ linkType: hard
+
+"@tamagui/sheet@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/sheet@npm:1.123.17"
+ dependencies:
+ "@tamagui/adapt": "npm:1.123.17"
+ "@tamagui/animate-presence": "npm:1.123.17"
+ "@tamagui/animations-react-native": "npm:1.123.17"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/portal": "npm:1.123.17"
+ "@tamagui/remove-scroll": "npm:1.123.17"
+ "@tamagui/scroll-view": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/use-constant": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
+ "@tamagui/use-did-finish-ssr": "npm:1.123.17"
+ "@tamagui/use-keyboard-visible": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/b2356fdfda2bd3b8d74ed33bdbef8aaaddeb65e9bbd6251d1f1d3f0297196fefc137317d18eefdca39a9e92a6fc1b533ffb9c69020767557c01c8095cc33ba84
+ checksum: 10/b56d4494fe4eb0bf8f485304961eacf63c7b6b20c9ca76c6022619b12254ad22e8db7510986aa5042debc6b4950299349769cc88cafc0383ef12caf6e9d4dd95
languageName: node
linkType: hard
-"@tamagui/shorthands@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/shorthands@npm:1.116.12"
- checksum: 10/df8312077b2879fcdeefbc14707dedfd0d77b62300dc3dd0da7e4f9bba42b7d0cbc1304e8bf9e279fbf8711a24abce71438cac68f8834cb53e880802b8049484
+"@tamagui/shorthands@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/shorthands@npm:1.123.17"
+ dependencies:
+ "@tamagui/web": "npm:1.123.17"
+ checksum: 10/1ccada50437cc3bf404bfce3d61aeed179c67690fc1af8fb39199f49646f35f9cf844a666cbac80af0194a6346f79ccc0fbcd3a83b10def0d8da56bdae32ea6f
languageName: node
linkType: hard
-"@tamagui/simple-hash@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/simple-hash@npm:1.116.12"
- checksum: 10/f4a638de3890ecab55e2b2d7b14312b9cc103067dd4d5821eb1fd6cb89e1a2b5517a24ecc1b12ab394b8157cca54ea9d8554994000bbb86e440ac52b5da29467
+"@tamagui/simple-hash@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/simple-hash@npm:1.123.17"
+ checksum: 10/3cbb6bb8a37a31ea582731991aef6a7ef9cc89a52bbf6f00cb2d96315e1d15b6b631a5b5e90ccb29144cf408efd61e61f86cd421b02ab47e08823455bb823ad7
languageName: node
linkType: hard
-"@tamagui/slider@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/slider@npm:1.116.12"
+"@tamagui/slider@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/slider@npm:1.123.17"
dependencies:
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/get-token": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
- "@tamagui/use-debounce": "npm:1.116.12"
- "@tamagui/use-direction": "npm:1.116.12"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/get-token": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
+ "@tamagui/use-debounce": "npm:1.123.17"
+ "@tamagui/use-direction": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/1a0371050ef84367ee715e34c52afd4f8d3cc9916f4275d694d763930696500bf1aa6d58a4da9082bea40f55af2b05df4f034e8c109b86ff81338281df29f0ea
+ checksum: 10/a052b2aa64f3820743f6d54cf65d2d9391619fa7a27420996a8a5a5afe153cc4c7369f526f4064d4814133110a9dd26070b22e4a89d7c2e15e66f359b9cfd220
languageName: node
linkType: hard
-"@tamagui/stacks@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/stacks@npm:1.116.12"
+"@tamagui/stacks@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/stacks@npm:1.123.17"
dependencies:
- "@tamagui/core": "npm:1.116.12"
+ "@tamagui/core": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/eb25c43ae219a880a8b9726501677d3e69351302d8ed97ef7af83a3c668f797025fe45d4f32b11b38f0c4f169f645f46b491463ef237544a5bfa1750833268a1
+ checksum: 10/4f5ed86729e1542fb52b451161cbb4764a69443c5395339b83732919601dff4ea5b70a849d7f5e284b80900bd74bdf8df826d8ad6b8f42a13b9b83355853aada
languageName: node
linkType: hard
-"@tamagui/start-transition@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/start-transition@npm:1.116.12"
- dependencies:
- react: "npm:>=18.0.0"
- checksum: 10/eea1215590b515ec973ba7b5f2a6c752be530c75d8c2bf2a08f87a093a35ca3955a2cf5aed6e159b6e3dc450e7a83917be7aeef26645b6fe61282cba34828eb2
+"@tamagui/start-transition@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/start-transition@npm:1.123.17"
+ checksum: 10/e5502722856ae03bec9b6af09f6d7c491d1a1abafece5945b6c28805b97e7bd565ad3deeee117fe76cbac52bf77f28c65c7370220db21e54175c4789d2b621b5
languageName: node
linkType: hard
-"@tamagui/static@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/static@npm:1.116.12"
+"@tamagui/static@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/static@npm:1.123.17"
dependencies:
"@babel/core": "npm:^7.25.2"
"@babel/generator": "npm:^7.25.5"
@@ -9112,24 +9206,23 @@ __metadata:
"@babel/runtime": "npm:^7.25.4"
"@babel/traverse": "npm:^7.25.4"
"@babel/types": "npm:^7.25.4"
- "@esbuild-plugins/tsconfig-paths": "npm:^0.1.2"
- "@tamagui/build": "npm:1.116.12"
- "@tamagui/cli-color": "npm:1.116.12"
- "@tamagui/config-default": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/fake-react-native": "npm:1.116.12"
- "@tamagui/generate-themes": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/helpers-node": "npm:1.116.12"
- "@tamagui/proxy-worm": "npm:1.116.12"
- "@tamagui/react-native-web-internals": "npm:1.116.12"
- "@tamagui/react-native-web-lite": "npm:1.116.12"
- "@tamagui/shorthands": "npm:1.116.12"
- "@tamagui/types": "npm:1.116.12"
+ "@tamagui/build": "npm:1.123.17"
+ "@tamagui/cli-color": "npm:1.123.17"
+ "@tamagui/config-default": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/fake-react-native": "npm:1.123.17"
+ "@tamagui/generate-themes": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/helpers-node": "npm:1.123.17"
+ "@tamagui/proxy-worm": "npm:1.123.17"
+ "@tamagui/react-native-web-internals": "npm:1.123.17"
+ "@tamagui/react-native-web-lite": "npm:1.123.17"
+ "@tamagui/shorthands": "npm:1.123.17"
+ "@tamagui/types": "npm:1.123.17"
babel-literal-to-ast: "npm:^2.1.0"
browserslist: "npm:^4.22.2"
check-dependency-version-consistency: "npm:^4.1.0"
- esbuild: "npm:^0.24.0"
+ esbuild: "npm:^0.24.2"
esbuild-register: "npm:^3.6.0"
fast-glob: "npm:^3.2.11"
find-cache-dir: "npm:^3.3.2"
@@ -9138,351 +9231,352 @@ __metadata:
invariant: "npm:^2.2.4"
js-yaml: "npm:^4.1.0"
lodash: "npm:^4.17.21"
- react-dom: "npm:>=18.0.0"
- react-native-web: "npm:^0.19.12"
+ react-native-web: "npm:^0.19.0"
peerDependencies:
react: "*"
- checksum: 10/73b121d353408355c2fea1c7719b228d18814c85651cdcd535becd898aa4535cebd423189889cd120fa6291c1f312c4b37be62098ee4f0eeb6f87984f719b7d4
+ checksum: 10/29fa5dc67f25bb3db0f3a2a31217e36cb04ce575dfcc73ed98756590ae9f4cc7eb33302cbb56ee315e95a814405adb8ef8c8938dd056f3fea4b9998ca7cc95f3
languageName: node
linkType: hard
-"@tamagui/switch-headless@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/switch-headless@npm:1.116.12"
+"@tamagui/switch-headless@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/switch-headless@npm:1.123.17"
dependencies:
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/label": "npm:1.116.12"
- "@tamagui/use-previous": "npm:1.116.12"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/label": "npm:1.123.17"
+ "@tamagui/use-previous": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/f4236ba75cab71f3eb0065c85c2837d7bb247a51569a41956230a4cd40744ce78cf527cb70527d14df475fa51799113b19a2e1a6c2312e0d0f60772668006531
+ checksum: 10/c71605b338db2a8f2f3d8bbc761bbbad60fd6fe9a6e439e04a22c135a37d6610aab82e6d72eb8380bc4af7ecd78e62690ef757eacf245ef70e1221cadada5be2
languageName: node
linkType: hard
-"@tamagui/switch@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/switch@npm:1.116.12"
+"@tamagui/switch@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/switch@npm:1.123.17"
dependencies:
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/focusable": "npm:1.116.12"
- "@tamagui/get-token": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/label": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/switch-headless": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
- "@tamagui/use-previous": "npm:1.116.12"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/focusable": "npm:1.123.17"
+ "@tamagui/get-token": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/label": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/switch-headless": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
+ "@tamagui/use-previous": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/a67df026cdc74f54f22a65211f577efd25044cb5f10af773df9b086b3ceac4f0a9bc736fcca6975a1129aa8cf96674fb1a0e16856d673f5bf293cec9b6f2988c
+ checksum: 10/97d26ed691f984eec916198126fd49792f10a53aa35e6f30faf58be37bedea3bd3db989ab3afffb65c6e9edcf2526d3884d0c1775b7613f653875ae03a8a1b20
languageName: node
linkType: hard
-"@tamagui/tabs@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/tabs@npm:1.116.12"
+"@tamagui/tabs@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/tabs@npm:1.123.17"
dependencies:
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/get-button-sized": "npm:1.116.12"
- "@tamagui/group": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/roving-focus": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
- "@tamagui/use-direction": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/get-button-sized": "npm:1.123.17"
+ "@tamagui/group": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/roving-focus": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
+ "@tamagui/use-direction": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/1bc564835bb8d684d723f2688acc5ea13849bf9cf0a67419556bbce5c0432752091db1191fe2e9a62284bf1920770687e1824e00cb79ad3a219fef7a176bad4f
+ checksum: 10/94f91b0fe6af74919eb5a0a693b5d587d6520210a7aacc11489e01d2ebe40a3544b9a6d48579a59d684efb7a4275e2e183b1bbbeb52c839e77b2bf8eaa10a0a5
languageName: node
linkType: hard
-"@tamagui/text@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/text@npm:1.116.12"
+"@tamagui/text@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/text@npm:1.123.17"
dependencies:
- "@tamagui/get-font-sized": "npm:1.116.12"
- "@tamagui/helpers-tamagui": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/get-font-sized": "npm:1.123.17"
+ "@tamagui/helpers-tamagui": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/ec98221aef73dddc9411c12e6d95aa5a46cb5d2ad76728fd6b9504246716ce856781565bc0c6a4091191850cdef44b3b265ead30f9cfcf955cec5afc1d741958
+ checksum: 10/b3e570fbd002022551ed1e8e93d847a5168fa43516bab780c625549f02edf2dcf3eae0866985bbd4f03132b2626fb5a3aacf1e3b5946b55f738f397b7a00d480
languageName: node
linkType: hard
-"@tamagui/theme-builder@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/theme-builder@npm:1.116.12"
+"@tamagui/theme-builder@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/theme-builder@npm:1.123.17"
dependencies:
- "@tamagui/create-theme": "npm:1.116.12"
+ "@tamagui/create-theme": "npm:1.123.17"
color2k: "npm:^2.0.2"
- checksum: 10/f7d853bd472726a76e9aeea23a5d6a6831dbb315d4a18bf9ea92c287a5dfa51e7664746d54ce556a1342ffd34e30148401f1b49685ca2699155f4f7c38ae1a00
+ checksum: 10/6146cb6eb9aa1d939975f8c30527d8074c38b8542568a0fc48d3ae42e742e4397e1e5643a76eb6a2e0f50ab3678630cee8501d44494379ad0659fcfc187d4489
languageName: node
linkType: hard
-"@tamagui/theme@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/theme@npm:1.116.12"
+"@tamagui/theme@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/theme@npm:1.123.17"
dependencies:
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/4c0a83d4dd1f312702e591468babfc5838d0f123d514a47ea4fa64d928742e8c7e7488f1206cd405ac7406fdb71b3aa68e01ab8de30af54638868b7aca6d3eff
+ checksum: 10/8e2bbadbf5f1b6ef89fb955647acd01164b635dac220f63109d38203511e4bf73a1420e016d3364d736b7d33bd05748240ba975b4aea8212f4bac3201f149ec9
languageName: node
linkType: hard
-"@tamagui/themes@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/themes@npm:1.116.12"
+"@tamagui/themes@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/themes@npm:1.123.17"
dependencies:
- "@tamagui/colors": "npm:1.116.12"
- "@tamagui/create-theme": "npm:1.116.12"
- "@tamagui/theme-builder": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
- checksum: 10/1857169f48081572a3b044207b95c4642681762af9089e5031cd971ec7ac5858acd93be222c8b376407f496780a3108ce8a9d525a6d9df147b0970511a2415a7
+ "@tamagui/colors": "npm:1.123.17"
+ "@tamagui/create-theme": "npm:1.123.17"
+ "@tamagui/theme-builder": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
+ color2k: "npm:^2.0.2"
+ checksum: 10/0106c6a3a2d11ee765045d86c17cbdf4d0466e9149a16a6ed9ac9d57a9a1d20dc4762eeae4ef2f1ac41418906258b81fb2488933d49741eaac18560ce6d8ad73
languageName: node
linkType: hard
-"@tamagui/timer@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/timer@npm:1.116.12"
- checksum: 10/f8a50473ebcafeb3d2db2e517f5b8ecff57ced5f493a8b9cb1407d3371185f53eb3877f27f5911bc0e517af7661f22e71577242b994e65475c9800af7c59fd9a
+"@tamagui/timer@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/timer@npm:1.123.17"
+ checksum: 10/09f7cedff473e5b5fff7fdf837155f6d47dbffa1aa7ed6e1657afe774a1677fa954cdb2dfe6e1a89969a06afdcf6359747825044c593e3a61184774f2a423e84
languageName: node
linkType: hard
-"@tamagui/toast@npm:^1.116.12":
- version: 1.116.12
- resolution: "@tamagui/toast@npm:1.116.12"
+"@tamagui/toast@npm:^1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/toast@npm:1.123.17"
dependencies:
- "@tamagui/animate-presence": "npm:1.116.12"
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/dismissable": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/polyfill-dev": "npm:1.116.12"
- "@tamagui/portal": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/start-transition": "npm:1.116.12"
- "@tamagui/text": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
- "@tamagui/visually-hidden": "npm:1.116.12"
+ "@tamagui/animate-presence": "npm:1.123.17"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/dismissable": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/polyfill-dev": "npm:1.123.17"
+ "@tamagui/portal": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/start-transition": "npm:1.123.17"
+ "@tamagui/text": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
+ "@tamagui/visually-hidden": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/8961f71fea0241b3c70adb9ababf3513b6b8e634b3c033cc78872f43a976837a318046c67c4a91f2940831e80a0c22af1ca0d98c2094654d9d41caf0383fde24
+ checksum: 10/3eac9eb39aaf7bd75d4fa1c91877aca781344b90c5de2d5eb75f37fd687a4ce2bbae766c7869b039c3bf0aa7d57f6e26083e83e8ea96a3a088306b9fbc439472
languageName: node
linkType: hard
-"@tamagui/toggle-group@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/toggle-group@npm:1.116.12"
+"@tamagui/toggle-group@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/toggle-group@npm:1.123.17"
dependencies:
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/focusable": "npm:1.116.12"
- "@tamagui/font-size": "npm:1.116.12"
- "@tamagui/get-token": "npm:1.116.12"
- "@tamagui/group": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/helpers-tamagui": "npm:1.116.12"
- "@tamagui/roving-focus": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
- "@tamagui/use-direction": "npm:1.116.12"
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/focusable": "npm:1.123.17"
+ "@tamagui/font-size": "npm:1.123.17"
+ "@tamagui/get-token": "npm:1.123.17"
+ "@tamagui/group": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/helpers-tamagui": "npm:1.123.17"
+ "@tamagui/roving-focus": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
+ "@tamagui/use-direction": "npm:1.123.17"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/9c51df8c8ed92616c0acc7ab06c883b32e05c88bd987be0dcb8c44ba76703fce3279673d0a61436620f35be10f08eed78b4d30ff38b123660fe4aa19b0b52f29
+ checksum: 10/a9972b786a8e9db5336cd0a1737399d84d8f3a10072fc77b261c99c7a199f5a9c39fc4b01cd9417401f103d3472d439a511966d8eef64d140ccb6a08b6709f0e
languageName: node
linkType: hard
-"@tamagui/tooltip@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/tooltip@npm:1.116.12"
+"@tamagui/tooltip@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/tooltip@npm:1.123.17"
dependencies:
- "@floating-ui/react": "npm:^0.26.24"
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/floating": "npm:1.116.12"
- "@tamagui/get-token": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/polyfill-dev": "npm:1.116.12"
- "@tamagui/popover": "npm:1.116.12"
- "@tamagui/popper": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/text": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
+ "@floating-ui/react": "npm:^0.27.3"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/floating": "npm:1.123.17"
+ "@tamagui/get-token": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/polyfill-dev": "npm:1.123.17"
+ "@tamagui/popover": "npm:1.123.17"
+ "@tamagui/popper": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/text": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/f4901e957fe19e9766bb2b4d8e2051cdcf1bf2224c48e3344310e28b93e333f296deb896726a9c9cf9d8ed7ac957d15ba30be669a6efc3ab33c3cd0b6e0e06a9
+ checksum: 10/22df4e7baae4cf46e6bb582a2035f2c77993d62b4db8bd85940261061ffd92ce3295272e61bb6fea15c3a187aee1a8c1361a6a468a62e5b3d0545c57c5082d2b
languageName: node
linkType: hard
-"@tamagui/types@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/types@npm:1.116.12"
- checksum: 10/35b616a7c3ee5614f3e385e6840433f6a30049d4a617dd40671b6061c7448d2aa27b2a5548bf76c7b038f5dd2002dbe50a3c5ece941e2204365ff2cbd394f9d1
+"@tamagui/types@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/types@npm:1.123.17"
+ checksum: 10/1fff18fea19582f9f681e5600d81678b1086034c402df78545f89f5f2c218f0f056a4153ec03b02bc5ac720faa4bd82d3335b8824214569d3a2830e3c0b4c6fb
languageName: node
linkType: hard
-"@tamagui/use-callback-ref@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/use-callback-ref@npm:1.116.12"
- checksum: 10/1f41d5309f9b25f85471812a2617c66ed44804b1b29389f020cda9e020de2fab0b254616714d0ffd0e2c02ea8c9369ce381da06166823b6667a056cb8bb38065
+"@tamagui/use-callback-ref@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/use-callback-ref@npm:1.123.17"
+ checksum: 10/004a39b9b7705119afc22216b3df70fd79a5c042e595220e77a45667f59cbd8d52e95693a5b4f1cb71c7572eb1b28583440001df51893127cc35316a37bb23c6
languageName: node
linkType: hard
-"@tamagui/use-constant@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/use-constant@npm:1.116.12"
+"@tamagui/use-constant@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/use-constant@npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/8ac0fe48b5d37be55184bcd4c2a6e800fc964aa8b77b1531aa3e18a2b0a14c807ec8afab7f6960be5b0569a46806679af1e7384d7c08ebe96d79824d347d4468
+ checksum: 10/5754c19b6bb041f835800c02598eba9cf58263fb0c4b03596e4b7ec99a12d9a4a9d5b15feaf57089584b1936057086e44bb4420ba9c99236410a1c2be24320f9
languageName: node
linkType: hard
-"@tamagui/use-controllable-state@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/use-controllable-state@npm:1.116.12"
+"@tamagui/use-controllable-state@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/use-controllable-state@npm:1.123.17"
dependencies:
- "@tamagui/start-transition": "npm:1.116.12"
- "@tamagui/use-event": "npm:1.116.12"
+ "@tamagui/start-transition": "npm:1.123.17"
+ "@tamagui/use-event": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/9776a9e729ba4dbaacc828a8e45968056140eefc9677dc6e8d93b3937743930842c93b948cb172b4e93e451188df815f93344cf4714306c97998967e4a4a5b87
+ checksum: 10/6f3c90cffe1a572e79da5b8ce05e3324724bc4df94ea8fc8103c18512f4299485b3d0a04d25e4c3db9fcf96476c68137c2954075e45d378f3338f6547e96ab1c
languageName: node
linkType: hard
-"@tamagui/use-debounce@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/use-debounce@npm:1.116.12"
+"@tamagui/use-debounce@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/use-debounce@npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/efe0b417ca7f13534b0ead9f5cf7599fb81ce34caa165258d8888117573deb49eb72f79553677fc4280358e39e5eeb47ccf6a70443f6a715c84b3f46ad8054ec
+ checksum: 10/3242b9669c802c561a37f23f215c31da7accdec9d2d33ce5f7c8ce2b54fdf182ca81c5d1c12ea5f117a38a679af5f63b718be96bea3574c1b522591bb796bac7
languageName: node
linkType: hard
-"@tamagui/use-did-finish-ssr@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/use-did-finish-ssr@npm:1.116.12"
+"@tamagui/use-did-finish-ssr@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/use-did-finish-ssr@npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/b07d7a75c855de395bb1e1cab78979993c3037811d9e297ec677174de4ba9947d193e971f0bc78f074b2d1865deaebb7cbc7d8e17f166863e1ea3f113fa00b0f
+ checksum: 10/44ac769fd278c1a316994ede26b730237b7a18bd66c4205c7def6fee154a04d5c730dd6a9167bbf4c72f5381744be6846a62906e7cc26dba88c273f5920d0f79
languageName: node
linkType: hard
-"@tamagui/use-direction@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/use-direction@npm:1.116.12"
+"@tamagui/use-direction@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/use-direction@npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/6ce14798cd230f0630949c9b36823058ee6eb7377ec99b226486888a0ccdeeb62ea4f9558eb53a7153e47d07513745c0fce61b684552f6e7525aa2144e0a02dd
+ checksum: 10/ac1060f560ea4f981958d2952e01907a335d588d57ebec6bf5b489d8063e52844e0abe214a9e3296d1fc7195b93ec894476a7c6cea7975a5569c704ad22a88d3
languageName: node
linkType: hard
-"@tamagui/use-escape-keydown@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/use-escape-keydown@npm:1.116.12"
+"@tamagui/use-escape-keydown@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/use-escape-keydown@npm:1.123.17"
dependencies:
- "@tamagui/use-callback-ref": "npm:1.116.12"
- checksum: 10/be51a73f2c8fcf962cceb37386b58ee66e8a217d12ce926a02909d6317fc7fb809d83cb9c539c7a767dc1fec690c34904fda05ab8fd7fcd6d307b55a3c2f0d8c
+ "@tamagui/use-callback-ref": "npm:1.123.17"
+ checksum: 10/385f247edb93c509d3d9ede83bb4a3b526ee8080968a5ade4ada05c4ad975d3b70623c942e1a4c8d0295190dab4f1260af69b073127b7b0531336d7c60c38232
languageName: node
linkType: hard
-"@tamagui/use-event@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/use-event@npm:1.116.12"
+"@tamagui/use-event@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/use-event@npm:1.123.17"
dependencies:
- "@tamagui/constants": "npm:1.116.12"
+ "@tamagui/constants": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/6e4d598163ffcd7e6f6cf7b22172cd8f61ebf5e766635dda884964ed888581b7566591ce11e3177a6b45b148e2cc6b1a5cc004378d00323bec5380fd9ef1517f
+ checksum: 10/0d26bc3ed9e0862bac07af76b4e98357471daeefce0a9a3170965e14fdc69994297e8ee7080d7eeef5444a502558386cd94c3052a46cd044c831d35a1558fda3
languageName: node
linkType: hard
-"@tamagui/use-force-update@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/use-force-update@npm:1.116.12"
+"@tamagui/use-force-update@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/use-force-update@npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/ad675ecb01ecb0b99590c9a696172f5362a199d4777e00fd1e03bd29b41ccfad6ef017a323a096c3f960b5f5ac37392623a609e17d0250b9db6ffe44adb70d0d
+ checksum: 10/eb75e01bf2e75d1d8fe03f9fc965a68b543b98bead5545b13c7d87d501e85c80d95746e31f82f37b594588d5d49c6bc61b08c6bccc408ffa313a443baa429701
languageName: node
linkType: hard
-"@tamagui/use-keyboard-visible@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/use-keyboard-visible@npm:1.116.12"
+"@tamagui/use-keyboard-visible@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/use-keyboard-visible@npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/2d6760b56fd4402f8ce136142ded25af4c10a21c875a2052148f9d24c7c8f3092d32d60c0c318d67117802ef2897ae5972141a890b87f2e36ae7b1a270f96dc3
+ checksum: 10/bb2c0619cc2cb5f32fbc9c4d18118b7ecc5507838459fecb24db68448f7587603ca437391076722721bd5488b9267d5ce0dfee285ea61403457542d264e5962b
languageName: node
linkType: hard
-"@tamagui/use-presence@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/use-presence@npm:1.116.12"
+"@tamagui/use-presence@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/use-presence@npm:1.123.17"
dependencies:
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/34a10ec7b7d595c9904a51bc7f05f8388446d4034b7f618db536871867324a285ea8e0a65413c5ad1e24f18688ac93003ae295e04a154e9489e54f0104c298b5
+ checksum: 10/463b8c3e2ffab7d0525cbf5f2e3ee0b60cfd47df601e327b523fe85bbd90b1c1cfaa691a781aef5cddd67f87caf51900a37d5bdc1168a0c58e1de4750f9da7e8
languageName: node
linkType: hard
-"@tamagui/use-previous@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/use-previous@npm:1.116.12"
- checksum: 10/8edd56a2ee0f11736e568ee561ca920521414c5bf1c50b88ea43e70197aea316fb784da915b446f697f3de486b9e7301c4ef3f5dc0cb208a57a3e990580cd1ce
+"@tamagui/use-previous@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/use-previous@npm:1.123.17"
+ checksum: 10/3e386e25ca2f6833e62ee59661fcdd7ee91338ca8b7360776f331b7371bb62175b9bd725dce5765a694b4ca8ee7bedd21468e880ca09ffb5e315a8ad41dc4d20
languageName: node
linkType: hard
-"@tamagui/use-window-dimensions@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/use-window-dimensions@npm:1.116.12"
+"@tamagui/use-window-dimensions@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/use-window-dimensions@npm:1.123.17"
dependencies:
- "@tamagui/constants": "npm:1.116.12"
+ "@tamagui/constants": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/71170efe0b42b3b41bc857be09ce9c28dbfcc26191362bf375c385ff41ae80de1d95a52c87ecdced3b554d320a4a91a3375f1440aec25a3e9c7a46011195cf1c
+ checksum: 10/bb47ce40b4f6477d8cfd45901dac79e8e3d48af30f4769878957a5d33216db81b25c6d932bf9d72b69ecfd71f9c38399204c98843671a6501b1bd8f0d72b0473
languageName: node
linkType: hard
-"@tamagui/visually-hidden@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/visually-hidden@npm:1.116.12"
+"@tamagui/visually-hidden@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/visually-hidden@npm:1.123.17"
dependencies:
- "@tamagui/web": "npm:1.116.12"
+ "@tamagui/web": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/966019ec57c10899052fbf54a6a6d8ac7a8d61da695188f99a5957df891628c36d264168b2b15d3768313b1f9dd86ef6e69f08b198ee70b4233a4591e60936a1
+ checksum: 10/2940e160aacc8d0237c9c6c64c71486346707de4b8d70362220077ea5743fee63d8cf53e372e2a5e9ae5e49147d954315a7f2584c8a0be1b356797f93a848cfa
languageName: node
linkType: hard
-"@tamagui/web@npm:1.116.12":
- version: 1.116.12
- resolution: "@tamagui/web@npm:1.116.12"
+"@tamagui/web@npm:1.123.17":
+ version: 1.123.17
+ resolution: "@tamagui/web@npm:1.123.17"
dependencies:
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/helpers": "npm:1.116.12"
- "@tamagui/normalize-css-color": "npm:1.116.12"
- "@tamagui/timer": "npm:1.116.12"
- "@tamagui/types": "npm:1.116.12"
- "@tamagui/use-did-finish-ssr": "npm:1.116.12"
- "@tamagui/use-event": "npm:1.116.12"
- "@tamagui/use-force-update": "npm:1.116.12"
- react: "npm:>=18.0.0"
- react-dom: "npm:>=18.0.0"
- checksum: 10/e39efcf242c2adc78a3e08b34f3f76a7409542a4fb6c7b88c3dfeb6aa5db3ccb228bb2f33d3509e3c7d003ec58e38fc63bedde68775071bf4eeb028ca923b3f2
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/helpers": "npm:1.123.17"
+ "@tamagui/normalize-css-color": "npm:1.123.17"
+ "@tamagui/timer": "npm:1.123.17"
+ "@tamagui/types": "npm:1.123.17"
+ "@tamagui/use-did-finish-ssr": "npm:1.123.17"
+ "@tamagui/use-event": "npm:1.123.17"
+ "@tamagui/use-force-update": "npm:1.123.17"
+ peerDependencies:
+ react: "*"
+ react-dom: "*"
+ checksum: 10/eb6ea4a32d3d90f1600306f2d52a511e0a0b8464c26bfd8bc2a70509663705cac7852efe2c664cd3a3d1882a993a54df962cc0a5d9f0fe6edc981d4226bc3b17
languageName: node
linkType: hard
@@ -9511,6 +9605,18 @@ __metadata:
languageName: node
linkType: hard
+"@ts-morph/common@npm:~0.17.0":
+ version: 0.17.0
+ resolution: "@ts-morph/common@npm:0.17.0"
+ dependencies:
+ fast-glob: "npm:^3.2.11"
+ minimatch: "npm:^5.1.0"
+ mkdirp: "npm:^1.0.4"
+ path-browserify: "npm:^1.0.1"
+ checksum: 10/f27442601b982b0230ab9d0f4245c058e808ef0d09197d724e9ce630b81fde0884c7e7d2370a93205ed2e72202254996c8ea6ed81de4f77ff856ccd02f438fe0
+ languageName: node
+ linkType: hard
+
"@tsconfig/node10@npm:^1.0.7":
version: 1.0.11
resolution: "@tsconfig/node10@npm:1.0.11"
@@ -11770,21 +11876,6 @@ __metadata:
languageName: node
linkType: hard
-"babel-plugin-tester@npm:^11.0.4":
- version: 11.0.4
- resolution: "babel-plugin-tester@npm:11.0.4"
- dependencies:
- core-js: "npm:^3.27.2"
- debug: "npm:^4.3.4"
- lodash.mergewith: "npm:^4.6.2"
- prettier: "npm:^2.8.3"
- strip-indent: "npm:^3.0.0"
- peerDependencies:
- "@babel/core": ">=7.11.6"
- checksum: 10/e1550fb99903254c9e83e692056898a78e9a2a25636510e12488ff2a2c52d3ad448a569d90724d233fdda0ee23ae41d5f58320b5a8afaf15eef17be07dfaf1fb
- languageName: node
- linkType: hard
-
"babel-plugin-transform-flow-enums@npm:^0.0.2":
version: 0.0.2
resolution: "babel-plugin-transform-flow-enums@npm:0.0.2"
@@ -12883,6 +12974,13 @@ __metadata:
languageName: node
linkType: hard
+"code-block-writer@npm:^11.0.3":
+ version: 11.0.3
+ resolution: "code-block-writer@npm:11.0.3"
+ checksum: 10/aecf33ec312c595164bb0f6fd6d92d1b7bada83352b787e033ae0e5a15c87146503ca68a258ab7f54cba1b46dc381271c1e0037a3b0869c9c6d57ef5d7bc3501
+ languageName: node
+ linkType: hard
+
"color-convert@npm:^1.9.0":
version: 1.9.3
resolution: "color-convert@npm:1.9.3"
@@ -13314,13 +13412,6 @@ __metadata:
languageName: node
linkType: hard
-"core-js@npm:^3.27.2":
- version: 3.37.1
- resolution: "core-js@npm:3.37.1"
- checksum: 10/25d6bd15fcc6ffd2a0ec0be57a78ff3358b3e1fdffdb6800fc93dcfdb3854037aee41f3d101aed8c37905d107daf98218b3e7ee95cec383710d2a66a5d9e541b
- languageName: node
- linkType: hard
-
"core-util-is@npm:~1.0.0":
version: 1.0.3
resolution: "core-util-is@npm:1.0.3"
@@ -13699,6 +13790,18 @@ __metadata:
languageName: node
linkType: hard
+"debug@npm:^4.3.7":
+ version: 4.4.0
+ resolution: "debug@npm:4.4.0"
+ dependencies:
+ ms: "npm:^2.1.3"
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ checksum: 10/1847944c2e3c2c732514b93d11886575625686056cd765336212dc15de2d2b29612b6cd80e1afba767bb8e1803b778caf9973e98169ef1a24a7a7009e1820367
+ languageName: node
+ linkType: hard
+
"debug@npm:~4.3.1, debug@npm:~4.3.2":
version: 4.3.6
resolution: "debug@npm:4.3.6"
@@ -14723,34 +14826,35 @@ __metadata:
languageName: node
linkType: hard
-"esbuild@npm:^0.24.0":
- version: 0.24.0
- resolution: "esbuild@npm:0.24.0"
- dependencies:
- "@esbuild/aix-ppc64": "npm:0.24.0"
- "@esbuild/android-arm": "npm:0.24.0"
- "@esbuild/android-arm64": "npm:0.24.0"
- "@esbuild/android-x64": "npm:0.24.0"
- "@esbuild/darwin-arm64": "npm:0.24.0"
- "@esbuild/darwin-x64": "npm:0.24.0"
- "@esbuild/freebsd-arm64": "npm:0.24.0"
- "@esbuild/freebsd-x64": "npm:0.24.0"
- "@esbuild/linux-arm": "npm:0.24.0"
- "@esbuild/linux-arm64": "npm:0.24.0"
- "@esbuild/linux-ia32": "npm:0.24.0"
- "@esbuild/linux-loong64": "npm:0.24.0"
- "@esbuild/linux-mips64el": "npm:0.24.0"
- "@esbuild/linux-ppc64": "npm:0.24.0"
- "@esbuild/linux-riscv64": "npm:0.24.0"
- "@esbuild/linux-s390x": "npm:0.24.0"
- "@esbuild/linux-x64": "npm:0.24.0"
- "@esbuild/netbsd-x64": "npm:0.24.0"
- "@esbuild/openbsd-arm64": "npm:0.24.0"
- "@esbuild/openbsd-x64": "npm:0.24.0"
- "@esbuild/sunos-x64": "npm:0.24.0"
- "@esbuild/win32-arm64": "npm:0.24.0"
- "@esbuild/win32-ia32": "npm:0.24.0"
- "@esbuild/win32-x64": "npm:0.24.0"
+"esbuild@npm:^0.24.2":
+ version: 0.24.2
+ resolution: "esbuild@npm:0.24.2"
+ dependencies:
+ "@esbuild/aix-ppc64": "npm:0.24.2"
+ "@esbuild/android-arm": "npm:0.24.2"
+ "@esbuild/android-arm64": "npm:0.24.2"
+ "@esbuild/android-x64": "npm:0.24.2"
+ "@esbuild/darwin-arm64": "npm:0.24.2"
+ "@esbuild/darwin-x64": "npm:0.24.2"
+ "@esbuild/freebsd-arm64": "npm:0.24.2"
+ "@esbuild/freebsd-x64": "npm:0.24.2"
+ "@esbuild/linux-arm": "npm:0.24.2"
+ "@esbuild/linux-arm64": "npm:0.24.2"
+ "@esbuild/linux-ia32": "npm:0.24.2"
+ "@esbuild/linux-loong64": "npm:0.24.2"
+ "@esbuild/linux-mips64el": "npm:0.24.2"
+ "@esbuild/linux-ppc64": "npm:0.24.2"
+ "@esbuild/linux-riscv64": "npm:0.24.2"
+ "@esbuild/linux-s390x": "npm:0.24.2"
+ "@esbuild/linux-x64": "npm:0.24.2"
+ "@esbuild/netbsd-arm64": "npm:0.24.2"
+ "@esbuild/netbsd-x64": "npm:0.24.2"
+ "@esbuild/openbsd-arm64": "npm:0.24.2"
+ "@esbuild/openbsd-x64": "npm:0.24.2"
+ "@esbuild/sunos-x64": "npm:0.24.2"
+ "@esbuild/win32-arm64": "npm:0.24.2"
+ "@esbuild/win32-ia32": "npm:0.24.2"
+ "@esbuild/win32-x64": "npm:0.24.2"
dependenciesMeta:
"@esbuild/aix-ppc64":
optional: true
@@ -14786,6 +14890,8 @@ __metadata:
optional: true
"@esbuild/linux-x64":
optional: true
+ "@esbuild/netbsd-arm64":
+ optional: true
"@esbuild/netbsd-x64":
optional: true
"@esbuild/openbsd-arm64":
@@ -14802,7 +14908,7 @@ __metadata:
optional: true
bin:
esbuild: bin/esbuild
- checksum: 10/500f83a1216d6548053007b85c070d8293395db344605b17418c6cf1217e5e8d338fa77fc8af27c23faa121c5528e5b0004d46d3a0cdeb87d48f1b5fa0164bc5
+ checksum: 10/95425071c9f24ff88bf61e0710b636ec0eb24ddf8bd1f7e1edef3044e1221104bbfa7bbb31c18018c8c36fa7902c5c0b843f829b981ebc89160cf5eebdaa58f4
languageName: node
linkType: hard
@@ -19320,13 +19426,6 @@ __metadata:
languageName: node
linkType: hard
-"lightningcss-darwin-arm64@npm:1.22.0":
- version: 1.22.0
- resolution: "lightningcss-darwin-arm64@npm:1.22.0"
- conditions: os=darwin & cpu=arm64
- languageName: node
- linkType: hard
-
"lightningcss-darwin-arm64@npm:1.27.0":
version: 1.27.0
resolution: "lightningcss-darwin-arm64@npm:1.27.0"
@@ -19334,10 +19433,10 @@ __metadata:
languageName: node
linkType: hard
-"lightningcss-darwin-x64@npm:1.22.0":
- version: 1.22.0
- resolution: "lightningcss-darwin-x64@npm:1.22.0"
- conditions: os=darwin & cpu=x64
+"lightningcss-darwin-arm64@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-darwin-arm64@npm:1.29.1"
+ conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
@@ -19348,10 +19447,10 @@ __metadata:
languageName: node
linkType: hard
-"lightningcss-freebsd-x64@npm:1.22.0":
- version: 1.22.0
- resolution: "lightningcss-freebsd-x64@npm:1.22.0"
- conditions: os=freebsd & cpu=x64
+"lightningcss-darwin-x64@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-darwin-x64@npm:1.29.1"
+ conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
@@ -19362,10 +19461,10 @@ __metadata:
languageName: node
linkType: hard
-"lightningcss-linux-arm-gnueabihf@npm:1.22.0":
- version: 1.22.0
- resolution: "lightningcss-linux-arm-gnueabihf@npm:1.22.0"
- conditions: os=linux & cpu=arm
+"lightningcss-freebsd-x64@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-freebsd-x64@npm:1.29.1"
+ conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
@@ -19376,10 +19475,10 @@ __metadata:
languageName: node
linkType: hard
-"lightningcss-linux-arm64-gnu@npm:1.22.0":
- version: 1.22.0
- resolution: "lightningcss-linux-arm64-gnu@npm:1.22.0"
- conditions: os=linux & cpu=arm64 & libc=glibc
+"lightningcss-linux-arm-gnueabihf@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-linux-arm-gnueabihf@npm:1.29.1"
+ conditions: os=linux & cpu=arm
languageName: node
linkType: hard
@@ -19390,10 +19489,10 @@ __metadata:
languageName: node
linkType: hard
-"lightningcss-linux-arm64-musl@npm:1.22.0":
- version: 1.22.0
- resolution: "lightningcss-linux-arm64-musl@npm:1.22.0"
- conditions: os=linux & cpu=arm64 & libc=musl
+"lightningcss-linux-arm64-gnu@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-linux-arm64-gnu@npm:1.29.1"
+ conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
@@ -19404,10 +19503,10 @@ __metadata:
languageName: node
linkType: hard
-"lightningcss-linux-x64-gnu@npm:1.22.0":
- version: 1.22.0
- resolution: "lightningcss-linux-x64-gnu@npm:1.22.0"
- conditions: os=linux & cpu=x64 & libc=glibc
+"lightningcss-linux-arm64-musl@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-linux-arm64-musl@npm:1.29.1"
+ conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
@@ -19418,10 +19517,10 @@ __metadata:
languageName: node
linkType: hard
-"lightningcss-linux-x64-musl@npm:1.22.0":
- version: 1.22.0
- resolution: "lightningcss-linux-x64-musl@npm:1.22.0"
- conditions: os=linux & cpu=x64 & libc=musl
+"lightningcss-linux-x64-gnu@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-linux-x64-gnu@npm:1.29.1"
+ conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
@@ -19432,6 +19531,13 @@ __metadata:
languageName: node
linkType: hard
+"lightningcss-linux-x64-musl@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-linux-x64-musl@npm:1.29.1"
+ conditions: os=linux & cpu=x64 & libc=musl
+ languageName: node
+ linkType: hard
+
"lightningcss-win32-arm64-msvc@npm:1.27.0":
version: 1.27.0
resolution: "lightningcss-win32-arm64-msvc@npm:1.27.0"
@@ -19439,10 +19545,10 @@ __metadata:
languageName: node
linkType: hard
-"lightningcss-win32-x64-msvc@npm:1.22.0":
- version: 1.22.0
- resolution: "lightningcss-win32-x64-msvc@npm:1.22.0"
- conditions: os=win32 & cpu=x64
+"lightningcss-win32-arm64-msvc@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-win32-arm64-msvc@npm:1.29.1"
+ conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
@@ -19453,20 +19559,28 @@ __metadata:
languageName: node
linkType: hard
-"lightningcss@npm:1.22.0":
- version: 1.22.0
- resolution: "lightningcss@npm:1.22.0"
+"lightningcss-win32-x64-msvc@npm:1.29.1":
+ version: 1.29.1
+ resolution: "lightningcss-win32-x64-msvc@npm:1.29.1"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
+"lightningcss@npm:^1.27.0":
+ version: 1.29.1
+ resolution: "lightningcss@npm:1.29.1"
dependencies:
detect-libc: "npm:^1.0.3"
- lightningcss-darwin-arm64: "npm:1.22.0"
- lightningcss-darwin-x64: "npm:1.22.0"
- lightningcss-freebsd-x64: "npm:1.22.0"
- lightningcss-linux-arm-gnueabihf: "npm:1.22.0"
- lightningcss-linux-arm64-gnu: "npm:1.22.0"
- lightningcss-linux-arm64-musl: "npm:1.22.0"
- lightningcss-linux-x64-gnu: "npm:1.22.0"
- lightningcss-linux-x64-musl: "npm:1.22.0"
- lightningcss-win32-x64-msvc: "npm:1.22.0"
+ lightningcss-darwin-arm64: "npm:1.29.1"
+ lightningcss-darwin-x64: "npm:1.29.1"
+ lightningcss-freebsd-x64: "npm:1.29.1"
+ lightningcss-linux-arm-gnueabihf: "npm:1.29.1"
+ lightningcss-linux-arm64-gnu: "npm:1.29.1"
+ lightningcss-linux-arm64-musl: "npm:1.29.1"
+ lightningcss-linux-x64-gnu: "npm:1.29.1"
+ lightningcss-linux-x64-musl: "npm:1.29.1"
+ lightningcss-win32-arm64-msvc: "npm:1.29.1"
+ lightningcss-win32-x64-msvc: "npm:1.29.1"
dependenciesMeta:
lightningcss-darwin-arm64:
optional: true
@@ -19484,9 +19598,11 @@ __metadata:
optional: true
lightningcss-linux-x64-musl:
optional: true
+ lightningcss-win32-arm64-msvc:
+ optional: true
lightningcss-win32-x64-msvc:
optional: true
- checksum: 10/4a5917ba7b976c1adc3c83dd69eddc532b25647a4047f2ba480967adc2781f5bb44044f5eb91dc31d73b4a0d9e18f13f81780a223f30c37f9400a4344c51ba73
+ checksum: 10/c6428a695ca985fa28ea899eb72471e0c6a71715291cb62f938b038596a971b6b22d83415d882dec27841169b1b773989b16df173f5ce9075c3fdc22ff764cff
languageName: node
linkType: hard
@@ -19858,13 +19974,6 @@ __metadata:
languageName: node
linkType: hard
-"lodash.mergewith@npm:^4.6.2":
- version: 4.6.2
- resolution: "lodash.mergewith@npm:4.6.2"
- checksum: 10/aea75a4492541a4902ac7e551dc6c54b722da0c187f84385d02e8fc33a7ae3454b837822446e5f63fcd5ad1671534ea408740b776670ea4d9c7890b10105fce0
- languageName: node
- linkType: hard
-
"lodash.once@npm:^4.0.0":
version: 4.1.1
resolution: "lodash.once@npm:4.1.1"
@@ -20915,7 +21024,7 @@ __metadata:
languageName: node
linkType: hard
-"minimatch@npm:^5.0.1":
+"minimatch@npm:^5.0.1, minimatch@npm:^5.1.0":
version: 5.1.6
resolution: "minimatch@npm:5.1.6"
dependencies:
@@ -22220,6 +22329,39 @@ __metadata:
languageName: node
linkType: hard
+"oxc-transform@npm:^0.47.1":
+ version: 0.47.1
+ resolution: "oxc-transform@npm:0.47.1"
+ dependencies:
+ "@oxc-transform/binding-darwin-arm64": "npm:0.47.1"
+ "@oxc-transform/binding-darwin-x64": "npm:0.47.1"
+ "@oxc-transform/binding-linux-arm64-gnu": "npm:0.47.1"
+ "@oxc-transform/binding-linux-arm64-musl": "npm:0.47.1"
+ "@oxc-transform/binding-linux-x64-gnu": "npm:0.47.1"
+ "@oxc-transform/binding-linux-x64-musl": "npm:0.47.1"
+ "@oxc-transform/binding-win32-arm64-msvc": "npm:0.47.1"
+ "@oxc-transform/binding-win32-x64-msvc": "npm:0.47.1"
+ dependenciesMeta:
+ "@oxc-transform/binding-darwin-arm64":
+ optional: true
+ "@oxc-transform/binding-darwin-x64":
+ optional: true
+ "@oxc-transform/binding-linux-arm64-gnu":
+ optional: true
+ "@oxc-transform/binding-linux-arm64-musl":
+ optional: true
+ "@oxc-transform/binding-linux-x64-gnu":
+ optional: true
+ "@oxc-transform/binding-linux-x64-musl":
+ optional: true
+ "@oxc-transform/binding-win32-arm64-msvc":
+ optional: true
+ "@oxc-transform/binding-win32-x64-msvc":
+ optional: true
+ checksum: 10/3845f9cfc5d80724c027c554bca88f66dd4916ab0c5667fbe1eeb00d7da41870f9a1ef86b6649df4e6f0a9ba76fe8158f968cbfeed896c5da9b3f0358af04485
+ languageName: node
+ linkType: hard
+
"p-cancelable@npm:^2.0.0":
version: 2.1.1
resolution: "p-cancelable@npm:2.1.1"
@@ -22567,6 +22709,13 @@ __metadata:
languageName: node
linkType: hard
+"path-browserify@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "path-browserify@npm:1.0.1"
+ checksum: 10/7e7368a5207e7c6b9051ef045711d0dc3c2b6203e96057e408e6e74d09f383061010d2be95cb8593fe6258a767c3e9fc6b2bfc7ce8d48ae8c3d9f6994cca9ad8
+ languageName: node
+ linkType: hard
+
"path-exists@npm:^3.0.0":
version: 3.0.0
resolution: "path-exists@npm:3.0.0"
@@ -22996,12 +23145,12 @@ __metadata:
languageName: node
linkType: hard
-"prettier@npm:^2.8.3":
- version: 2.8.8
- resolution: "prettier@npm:2.8.8"
+"prettier@npm:^3.2.5":
+ version: 3.4.2
+ resolution: "prettier@npm:3.4.2"
bin:
- prettier: bin-prettier.js
- checksum: 10/00cdb6ab0281f98306cd1847425c24cbaaa48a5ff03633945ab4c701901b8e96ad558eb0777364ffc312f437af9b5a07d0f45346266e8245beaf6247b9c62b24
+ prettier: bin/prettier.cjs
+ checksum: 10/a3e806fb0b635818964d472d35d27e21a4e17150c679047f5501e1f23bd4aa806adf660f0c0d35214a210d5d440da6896c2e86156da55f221a57938278dc326e
languageName: node
linkType: hard
@@ -23465,7 +23614,7 @@ __metadata:
languageName: node
linkType: hard
-"react-dom@npm:18.3.1, react-dom@npm:>=18.0.0":
+"react-dom@npm:18.3.1":
version: 18.3.1
resolution: "react-dom@npm:18.3.1"
dependencies:
@@ -23500,15 +23649,16 @@ __metadata:
languageName: node
linkType: hard
-"react-native-css-interop@npm:~0.0.21":
- version: 0.0.36
- resolution: "react-native-css-interop@npm:0.0.36"
+"react-native-css-interop@npm:^0.1.22":
+ version: 0.1.22
+ resolution: "react-native-css-interop@npm:0.1.22"
dependencies:
"@babel/helper-module-imports": "npm:^7.22.15"
"@babel/traverse": "npm:^7.23.0"
"@babel/types": "npm:^7.23.0"
- babel-plugin-tester: "npm:^11.0.4"
- lightningcss: "npm:1.22.0"
+ debug: "npm:^4.3.7"
+ lightningcss: "npm:^1.27.0"
+ semver: "npm:^7.6.3"
peerDependencies:
react: ">=18"
react-native: "*"
@@ -23519,7 +23669,7 @@ __metadata:
optional: true
react-native-svg:
optional: true
- checksum: 10/5d99c7bfe0ef7b75032b60b162c3991fa162d200d3c5f64935e6a31c888173532bf06e6a551286b18ad20f419926af8fb64aa6884feccd76f38aacae517acbf5
+ checksum: 10/778520da829b3360e2a233af59c5c10720cf315cc60eac43869865ac2ce21ab09bb4ef483838451e2921e686859129b5aba26d44173a9477a9fa2caea4e8f311
languageName: node
linkType: hard
@@ -23650,26 +23800,7 @@ __metadata:
languageName: node
linkType: hard
-"react-native-web@npm:^0.19.12":
- version: 0.19.12
- resolution: "react-native-web@npm:0.19.12"
- dependencies:
- "@babel/runtime": "npm:^7.18.6"
- "@react-native/normalize-colors": "npm:^0.74.1"
- fbjs: "npm:^3.0.4"
- inline-style-prefixer: "npm:^6.0.1"
- memoize-one: "npm:^6.0.0"
- nullthrows: "npm:^1.1.1"
- postcss-value-parser: "npm:^4.2.0"
- styleq: "npm:^0.1.3"
- peerDependencies:
- react: ^18.0.0
- react-dom: ^18.0.0
- checksum: 10/6c326cc2fa07abcabfffcb99ea6df921c405402ead895ee4a142e8fdf55deda504fc4ce392bf50de9e6fe141a446ec2a93d8b872fcf079f10b92799fa9021732
- languageName: node
- linkType: hard
-
-"react-native-web@npm:^0.19.13":
+"react-native-web@npm:^0.19.0, react-native-web@npm:^0.19.13":
version: 0.19.13
resolution: "react-native-web@npm:0.19.13"
dependencies:
@@ -23859,7 +23990,7 @@ __metadata:
languageName: node
linkType: hard
-"react@npm:18.3.1, react@npm:>=18.0.0":
+"react@npm:18.3.1":
version: 18.3.1
resolution: "react@npm:18.3.1"
dependencies:
@@ -24702,6 +24833,15 @@ __metadata:
languageName: node
linkType: hard
+"semver@npm:^7.6.3":
+ version: 7.7.1
+ resolution: "semver@npm:7.7.1"
+ bin:
+ semver: bin/semver.js
+ checksum: 10/4cfa1eb91ef3751e20fc52e47a935a0118d56d6f15a837ab814da0c150778ba2ca4f1a4d9068b33070ea4273629e615066664c2cfcd7c272caf7a8a0f6518b2c
+ languageName: node
+ linkType: hard
+
"send@npm:0.18.0":
version: 0.18.0
resolution: "send@npm:0.18.0"
@@ -25483,6 +25623,7 @@ __metadata:
dependencies:
"@atproto/api": "npm:^0.13.16"
"@atproto/jwk-webcrypto": "npm:^0.1.2"
+ "@atproto/lex-cli": "npm:^0.5.6"
"@atproto/oauth-client-browser": "npm:^0.3.1"
firebase-admin: "npm:^12.7.0"
husky: "npm:^9.1.6"
@@ -25520,11 +25661,11 @@ __metadata:
"@react-navigation/native": "npm:^6.1.18"
"@react-navigation/native-stack": "npm:^6.11.0"
"@reduxjs/toolkit": "npm:^2.3.0"
- "@tamagui/babel-plugin": "npm:^1.116.12"
- "@tamagui/config": "npm:^1.116.12"
- "@tamagui/lucide-icons": "npm:^1.116.12"
- "@tamagui/metro-plugin": "npm:^1.116.12"
- "@tamagui/toast": "npm:^1.116.12"
+ "@tamagui/babel-plugin": "npm:^1.123.17"
+ "@tamagui/config": "npm:^1.123.17"
+ "@tamagui/lucide-icons": "npm:^1.123.17"
+ "@tamagui/metro-plugin": "npm:^1.123.17"
+ "@tamagui/toast": "npm:^1.123.17"
"@tanstack/react-query": "npm:^5.59.19"
"@types/babel__plugin-transform-runtime": "npm:^7"
"@types/qrcode": "npm:^1"
@@ -25570,7 +25711,7 @@ __metadata:
react-native-webrtc: "npm:^124.0.4"
react-native-webview: "npm:13.12.4"
react-redux: "npm:^9.1.2"
- tamagui: "npm:^1.116.12"
+ tamagui: "npm:^1.123.17"
typescript: "npm:~5.3.3"
ua-parser-js: "npm:^2.0.0-rc.1"
uuid: "npm:^11.0.2"
@@ -25980,65 +26121,65 @@ __metadata:
languageName: node
linkType: hard
-"tamagui@npm:^1.116.12":
- version: 1.116.12
- resolution: "tamagui@npm:1.116.12"
- dependencies:
- "@tamagui/accordion": "npm:1.116.12"
- "@tamagui/adapt": "npm:1.116.12"
- "@tamagui/alert-dialog": "npm:1.116.12"
- "@tamagui/animate-presence": "npm:1.116.12"
- "@tamagui/avatar": "npm:1.116.12"
- "@tamagui/button": "npm:1.116.12"
- "@tamagui/card": "npm:1.116.12"
- "@tamagui/checkbox": "npm:1.116.12"
- "@tamagui/compose-refs": "npm:1.116.12"
- "@tamagui/constants": "npm:1.116.12"
- "@tamagui/core": "npm:1.116.12"
- "@tamagui/create-context": "npm:1.116.12"
- "@tamagui/dialog": "npm:1.116.12"
- "@tamagui/elements": "npm:1.116.12"
- "@tamagui/fake-react-native": "npm:1.116.12"
- "@tamagui/focusable": "npm:1.116.12"
- "@tamagui/font-size": "npm:1.116.12"
- "@tamagui/form": "npm:1.116.12"
- "@tamagui/get-button-sized": "npm:1.116.12"
- "@tamagui/get-font-sized": "npm:1.116.12"
- "@tamagui/get-token": "npm:1.116.12"
- "@tamagui/group": "npm:1.116.12"
- "@tamagui/helpers-tamagui": "npm:1.116.12"
- "@tamagui/image": "npm:1.116.12"
- "@tamagui/label": "npm:1.116.12"
- "@tamagui/linear-gradient": "npm:1.116.12"
- "@tamagui/list-item": "npm:1.116.12"
- "@tamagui/polyfill-dev": "npm:1.116.12"
- "@tamagui/popover": "npm:1.116.12"
- "@tamagui/popper": "npm:1.116.12"
- "@tamagui/portal": "npm:1.116.12"
- "@tamagui/progress": "npm:1.116.12"
- "@tamagui/radio-group": "npm:1.116.12"
- "@tamagui/react-native-media-driver": "npm:1.116.12"
- "@tamagui/scroll-view": "npm:1.116.12"
- "@tamagui/select": "npm:1.116.12"
- "@tamagui/separator": "npm:1.116.12"
- "@tamagui/shapes": "npm:1.116.12"
- "@tamagui/sheet": "npm:1.116.12"
- "@tamagui/slider": "npm:1.116.12"
- "@tamagui/stacks": "npm:1.116.12"
- "@tamagui/switch": "npm:1.116.12"
- "@tamagui/tabs": "npm:1.116.12"
- "@tamagui/text": "npm:1.116.12"
- "@tamagui/theme": "npm:1.116.12"
- "@tamagui/toggle-group": "npm:1.116.12"
- "@tamagui/tooltip": "npm:1.116.12"
- "@tamagui/use-controllable-state": "npm:1.116.12"
- "@tamagui/use-debounce": "npm:1.116.12"
- "@tamagui/use-force-update": "npm:1.116.12"
- "@tamagui/use-window-dimensions": "npm:1.116.12"
- "@tamagui/visually-hidden": "npm:1.116.12"
+"tamagui@npm:^1.123.17":
+ version: 1.123.17
+ resolution: "tamagui@npm:1.123.17"
+ dependencies:
+ "@tamagui/accordion": "npm:1.123.17"
+ "@tamagui/adapt": "npm:1.123.17"
+ "@tamagui/alert-dialog": "npm:1.123.17"
+ "@tamagui/animate-presence": "npm:1.123.17"
+ "@tamagui/avatar": "npm:1.123.17"
+ "@tamagui/button": "npm:1.123.17"
+ "@tamagui/card": "npm:1.123.17"
+ "@tamagui/checkbox": "npm:1.123.17"
+ "@tamagui/compose-refs": "npm:1.123.17"
+ "@tamagui/constants": "npm:1.123.17"
+ "@tamagui/core": "npm:1.123.17"
+ "@tamagui/create-context": "npm:1.123.17"
+ "@tamagui/dialog": "npm:1.123.17"
+ "@tamagui/elements": "npm:1.123.17"
+ "@tamagui/fake-react-native": "npm:1.123.17"
+ "@tamagui/focusable": "npm:1.123.17"
+ "@tamagui/font-size": "npm:1.123.17"
+ "@tamagui/form": "npm:1.123.17"
+ "@tamagui/get-button-sized": "npm:1.123.17"
+ "@tamagui/get-font-sized": "npm:1.123.17"
+ "@tamagui/get-token": "npm:1.123.17"
+ "@tamagui/group": "npm:1.123.17"
+ "@tamagui/helpers-tamagui": "npm:1.123.17"
+ "@tamagui/image": "npm:1.123.17"
+ "@tamagui/label": "npm:1.123.17"
+ "@tamagui/linear-gradient": "npm:1.123.17"
+ "@tamagui/list-item": "npm:1.123.17"
+ "@tamagui/polyfill-dev": "npm:1.123.17"
+ "@tamagui/popover": "npm:1.123.17"
+ "@tamagui/popper": "npm:1.123.17"
+ "@tamagui/portal": "npm:1.123.17"
+ "@tamagui/progress": "npm:1.123.17"
+ "@tamagui/radio-group": "npm:1.123.17"
+ "@tamagui/react-native-media-driver": "npm:1.123.17"
+ "@tamagui/scroll-view": "npm:1.123.17"
+ "@tamagui/select": "npm:1.123.17"
+ "@tamagui/separator": "npm:1.123.17"
+ "@tamagui/shapes": "npm:1.123.17"
+ "@tamagui/sheet": "npm:1.123.17"
+ "@tamagui/slider": "npm:1.123.17"
+ "@tamagui/stacks": "npm:1.123.17"
+ "@tamagui/switch": "npm:1.123.17"
+ "@tamagui/tabs": "npm:1.123.17"
+ "@tamagui/text": "npm:1.123.17"
+ "@tamagui/theme": "npm:1.123.17"
+ "@tamagui/toggle-group": "npm:1.123.17"
+ "@tamagui/tooltip": "npm:1.123.17"
+ "@tamagui/use-controllable-state": "npm:1.123.17"
+ "@tamagui/use-debounce": "npm:1.123.17"
+ "@tamagui/use-force-update": "npm:1.123.17"
+ "@tamagui/use-window-dimensions": "npm:1.123.17"
+ "@tamagui/visually-hidden": "npm:1.123.17"
peerDependencies:
react: "*"
- checksum: 10/4889444720077adfed534e34363b6e54405bbe8500ea99509e409b2c8081962659c7d20d7fb171680e5d25f64038e277e090bedb876b0fc6ff36863fbd7beda1
+ checksum: 10/8a8f8aaaa7497cdb21aab25d0a81cb6d7f0c5e8f12744c0fadfbff12bf8786f5e12e64c9561868b8d076c3b2093ee316ade1f552e2e710873891b3d93c113dd6
languageName: node
linkType: hard
@@ -26434,6 +26575,16 @@ __metadata:
languageName: node
linkType: hard
+"ts-morph@npm:^16.0.0":
+ version: 16.0.0
+ resolution: "ts-morph@npm:16.0.0"
+ dependencies:
+ "@ts-morph/common": "npm:~0.17.0"
+ code-block-writer: "npm:^11.0.3"
+ checksum: 10/43b583b96ec1c1d34d1c4f4d1c3d0249f29136b735019e63d3caabe6cd74fc6bca3c92d9ff94f57d228c93362bee85422772024510d790cd6a086d90cbf97210
+ languageName: node
+ linkType: hard
+
"ts-node@npm:^10.9.2":
version: 10.9.2
resolution: "ts-node@npm:10.9.2"
@@ -26692,13 +26843,13 @@ __metadata:
languageName: node
linkType: hard
-"typescript@npm:^5.6.3, typescript@npm:~5.6.3":
- version: 5.6.3
- resolution: "typescript@npm:5.6.3"
+"typescript@npm:^5.7.2":
+ version: 5.7.3
+ resolution: "typescript@npm:5.7.3"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
- checksum: 10/c328e418e124b500908781d9f7b9b93cf08b66bf5936d94332b463822eea2f4e62973bfb3b8a745fdc038785cb66cf59d1092bac3ec2ac6a3e5854687f7833f1
+ checksum: 10/6a7e556de91db3d34dc51cd2600e8e91f4c312acd8e52792f243c7818dfadb27bae677175fad6947f9c81efb6c57eb6b2d0c736f196a6ee2f1f7d57b74fc92fa
languageName: node
linkType: hard
@@ -26712,6 +26863,16 @@ __metadata:
languageName: node
linkType: hard
+"typescript@npm:~5.6.3":
+ version: 5.6.3
+ resolution: "typescript@npm:5.6.3"
+ bin:
+ tsc: bin/tsc
+ tsserver: bin/tsserver
+ checksum: 10/c328e418e124b500908781d9f7b9b93cf08b66bf5936d94332b463822eea2f4e62973bfb3b8a745fdc038785cb66cf59d1092bac3ec2ac6a3e5854687f7833f1
+ languageName: node
+ linkType: hard
+
"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin":
version: 5.5.3
resolution: "typescript@patch:typescript@npm%3A5.5.3#optional!builtin::version=5.5.3&hash=b45daf"
@@ -26722,13 +26883,13 @@ __metadata:
languageName: node
linkType: hard
-"typescript@patch:typescript@npm%3A^5.6.3#optional!builtin, typescript@patch:typescript@npm%3A~5.6.3#optional!builtin":
- version: 5.6.3
- resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=b45daf"
+"typescript@patch:typescript@npm%3A^5.7.2#optional!builtin":
+ version: 5.7.3
+ resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=b45daf"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
- checksum: 10/dc4bec403cd33a204b655b1152a096a08e7bad2c931cb59ef8ff26b6f2aa541bf98f09fc157958a60c921b1983a8dde9a85b692f9de60fa8f574fd131e3ae4dd
+ checksum: 10/3ac7b7e3e899273d2fbdce6e24b93d4d53a705ad7a7e4cc83b4c57bcb6d25948abcd2a21994f6b9c73ab03960f395aae95f0458de292a66ce0134233261714c3
languageName: node
linkType: hard
@@ -26742,6 +26903,16 @@ __metadata:
languageName: node
linkType: hard
+"typescript@patch:typescript@npm%3A~5.6.3#optional!builtin":
+ version: 5.6.3
+ resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=b45daf"
+ bin:
+ tsc: bin/tsc
+ tsserver: bin/tsserver
+ checksum: 10/dc4bec403cd33a204b655b1152a096a08e7bad2c931cb59ef8ff26b6f2aa541bf98f09fc157958a60c921b1983a8dde9a85b692f9de60fa8f574fd131e3ae4dd
+ languageName: node
+ linkType: hard
+
"ua-parser-js@npm:^1.0.35, ua-parser-js@npm:^1.0.37":
version: 1.0.38
resolution: "ua-parser-js@npm:1.0.38"
@@ -28190,6 +28361,13 @@ __metadata:
languageName: node
linkType: hard
+"yesno@npm:^0.4.0":
+ version: 0.4.0
+ resolution: "yesno@npm:0.4.0"
+ checksum: 10/8bccf302d18cf5fb364ec5c51fbe1612accd10468ed41df4a5f62a350cbab4af596e84f895bab8135fc69fe1b7433d8f2ce7998fa5b8c8a5fbaf0d796b40bae4
+ languageName: node
+ linkType: hard
+
"yn@npm:3.1.1":
version: 3.1.1
resolution: "yn@npm:3.1.1"