diff --git a/.github/workflows/mobile-build-android.yml b/.github/workflows/mobile-build-android.yml
index 55d3e2db9a..690764b922 100644
--- a/.github/workflows/mobile-build-android.yml
+++ b/.github/workflows/mobile-build-android.yml
@@ -36,6 +36,14 @@ jobs:
- name: Install node modules
run: yarn install
+ - name: Bump android versionNumber
+ if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
+ run: make bump-app-build-number
+
+ - name: Download service account from env
+ if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
+ run: echo ${{ secrets.GOOGLE_SERVICES_JSON }} | base64 --decode > ./service-account-android-submit.json
+
- name: Fix gitignore
run: npx tsx ./packages/scripts/app-build/fixGitignore.ts
@@ -57,7 +65,7 @@ jobs:
- name: Build android
run: eas build --local --non-interactive --platform=android
- - name: EAS Submit aab
+ - name: Update aab File path
run: |
AAB_FILE=$(find ./ -name 'build-*.aab' -type f)
if [ -z "$AAB_FILE" ]; then
@@ -65,9 +73,12 @@ jobs:
exit 1
fi
- # eas submit --platform=android --path=$AAB_FILE --profile=production
echo "AAB_FILE=$AAB_FILE" >> $GITHUB_ENV
+ - name: EAS Submit Android aab
+ if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
+ run: eas submit --platform=android --path=${{ env.AAB_FILE }} --profile=production
+
- name: Upload aab
uses: actions/upload-artifact@v3
with:
diff --git a/.github/workflows/mobile-build-ios.yml b/.github/workflows/mobile-build-ios.yml
index 5281a4f9f5..3959189785 100644
--- a/.github/workflows/mobile-build-ios.yml
+++ b/.github/workflows/mobile-build-ios.yml
@@ -38,7 +38,7 @@ jobs:
- name: Bump ios buildNumber
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
- run: make bump-ios-build-number
+ run: make bump-app-build-number
- name: Fix gitignore
run: npx tsx ./packages/scripts/app-build/fixGitignore.ts
diff --git a/Cargo.lock b/Cargo.lock
deleted file mode 100644
index ae8797f4d8..0000000000
--- a/Cargo.lock
+++ /dev/null
@@ -1,1025 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-version = 3
-
-[[package]]
-name = "ahash"
-version = "0.7.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd"
-dependencies = [
- "getrandom",
- "once_cell",
- "version_check",
-]
-
-[[package]]
-name = "base16ct"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
-
-[[package]]
-name = "base64"
-version = "0.21.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
-
-[[package]]
-name = "base64ct"
-version = "1.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
-
-[[package]]
-name = "bech32"
-version = "0.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445"
-
-[[package]]
-name = "block-buffer"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
-dependencies = [
- "generic-array",
-]
-
-[[package]]
-name = "block-buffer"
-version = "0.10.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
-dependencies = [
- "generic-array",
-]
-
-[[package]]
-name = "bnum"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56953345e39537a3e18bdaeba4cb0c58a78c1f61f361dc0fa7c5c7340ae87c5f"
-
-[[package]]
-name = "byteorder"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
-
-[[package]]
-name = "cfg-if"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-
-[[package]]
-name = "const-oid"
-version = "0.9.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
-
-[[package]]
-name = "const_panic"
-version = "0.2.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6051f239ecec86fde3410901ab7860d458d160371533842974fc61f96d15879b"
-
-[[package]]
-name = "convert_case"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
-dependencies = [
- "unicode-segmentation",
-]
-
-[[package]]
-name = "cosmwasm-crypto"
-version = "1.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9934c79e58d9676edfd592557dee765d2a6ef54c09d5aa2edb06156b00148966"
-dependencies = [
- "digest 0.10.7",
- "ecdsa",
- "ed25519-zebra",
- "k256",
- "rand_core 0.6.4",
- "thiserror",
-]
-
-[[package]]
-name = "cosmwasm-derive"
-version = "1.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc5e72e330bd3bdab11c52b5ecbdeb6a8697a004c57964caeb5d876f0b088b3c"
-dependencies = [
- "syn 1.0.109",
-]
-
-[[package]]
-name = "cosmwasm-schema"
-version = "1.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac3e3a2136e2a60e8b6582f5dffca5d1a683ed77bf38537d330bc1dfccd69010"
-dependencies = [
- "cosmwasm-schema-derive",
- "schemars",
- "serde",
- "serde_json",
- "thiserror",
-]
-
-[[package]]
-name = "cosmwasm-schema-derive"
-version = "1.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f5d803bea6bd9ed61bd1ee0b4a2eb09ee20dbb539cc6e0b8795614d20952ebb1"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "cosmwasm-std"
-version = "1.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef8666e572a3a2519010dde88c04d16e9339ae751b56b2bb35081fe3f7d6be74"
-dependencies = [
- "base64",
- "bech32",
- "bnum",
- "cosmwasm-crypto",
- "cosmwasm-derive",
- "derivative",
- "forward_ref",
- "hex",
- "schemars",
- "serde",
- "serde-json-wasm",
- "sha2 0.10.8",
- "static_assertions",
- "thiserror",
-]
-
-[[package]]
-name = "cpufeatures"
-version = "0.2.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "crypto-bigint"
-version = "0.5.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
-dependencies = [
- "generic-array",
- "rand_core 0.6.4",
- "subtle",
- "zeroize",
-]
-
-[[package]]
-name = "crypto-common"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
-dependencies = [
- "generic-array",
- "typenum",
-]
-
-[[package]]
-name = "curve25519-dalek"
-version = "3.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61"
-dependencies = [
- "byteorder",
- "digest 0.9.0",
- "rand_core 0.5.1",
- "subtle",
- "zeroize",
-]
-
-[[package]]
-name = "cw-storage-plus"
-version = "0.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc6cf70ef7686e2da9ad7b067c5942cd3e88dd9453f7af42f54557f8af300fb0"
-dependencies = [
- "cosmwasm-std",
- "schemars",
- "serde",
-]
-
-[[package]]
-name = "cw-storage-plus"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5ff29294ee99373e2cd5fd21786a3c0ced99a52fec2ca347d565489c61b723c"
-dependencies = [
- "cosmwasm-std",
- "schemars",
- "serde",
-]
-
-[[package]]
-name = "cw-utils"
-version = "0.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ae0b69fa7679de78825b4edeeec045066aa2b2c4b6e063d80042e565bb4da5c"
-dependencies = [
- "cosmwasm-schema",
- "cosmwasm-std",
- "cw2 0.15.1",
- "schemars",
- "semver",
- "serde",
- "thiserror",
-]
-
-[[package]]
-name = "cw-utils"
-version = "1.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c4a657e5caacc3a0d00ee96ca8618745d050b8f757c709babafb81208d4239c"
-dependencies = [
- "cosmwasm-schema",
- "cosmwasm-std",
- "cw2 1.1.2",
- "schemars",
- "semver",
- "serde",
- "thiserror",
-]
-
-[[package]]
-name = "cw2"
-version = "0.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5abb8ecea72e09afff830252963cb60faf945ce6cef2c20a43814516082653da"
-dependencies = [
- "cosmwasm-schema",
- "cosmwasm-std",
- "cw-storage-plus 0.15.1",
- "schemars",
- "serde",
-]
-
-[[package]]
-name = "cw2"
-version = "1.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6c120b24fbbf5c3bedebb97f2cc85fbfa1c3287e09223428e7e597b5293c1fa"
-dependencies = [
- "cosmwasm-schema",
- "cosmwasm-std",
- "cw-storage-plus 1.2.0",
- "schemars",
- "semver",
- "serde",
- "thiserror",
-]
-
-[[package]]
-name = "cw721"
-version = "0.15.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20dfe04f86e5327956b559ffcc86d9a43167391f37402afd8bf40b0be16bee4d"
-dependencies = [
- "cosmwasm-schema",
- "cosmwasm-std",
- "cw-utils 0.15.1",
- "schemars",
- "serde",
-]
-
-[[package]]
-name = "cw721"
-version = "0.18.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3c4d286625ccadc957fe480dd3bdc54ada19e0e6b5b9325379db3130569e914"
-dependencies = [
- "cosmwasm-schema",
- "cosmwasm-std",
- "cw-utils 1.0.3",
- "schemars",
- "serde",
-]
-
-[[package]]
-name = "cw721-base"
-version = "0.15.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62c3ee3b669fc2a8094301a73fd7be97a7454d4df2650c33599f737e8f254d24"
-dependencies = [
- "cosmwasm-schema",
- "cosmwasm-std",
- "cw-storage-plus 0.15.1",
- "cw-utils 0.15.1",
- "cw2 0.15.1",
- "cw721 0.15.0",
- "schemars",
- "serde",
- "thiserror",
-]
-
-[[package]]
-name = "cw721-metadata-onchain"
-version = "0.15.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6ac509607834958c513ccc679f8c8ba0d6f0a84b495af0568577e883ffee3df"
-dependencies = [
- "cosmwasm-schema",
- "cosmwasm-std",
- "cw2 0.15.1",
- "cw721 0.15.0",
- "cw721-base",
- "schemars",
- "serde",
-]
-
-[[package]]
-name = "cw721_membership"
-version = "0.1.0"
-dependencies = [
- "cosmwasm-schema",
- "cosmwasm-std",
- "cw-storage-plus 1.2.0",
- "cw721 0.18.0",
- "cw721-metadata-onchain",
- "schemars",
- "serde",
- "sylvia",
- "thiserror",
-]
-
-[[package]]
-name = "der"
-version = "0.7.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c"
-dependencies = [
- "const-oid",
- "zeroize",
-]
-
-[[package]]
-name = "derivative"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "digest"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
-dependencies = [
- "generic-array",
-]
-
-[[package]]
-name = "digest"
-version = "0.10.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
-dependencies = [
- "block-buffer 0.10.4",
- "const-oid",
- "crypto-common",
- "subtle",
-]
-
-[[package]]
-name = "dyn-clone"
-version = "1.0.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d"
-
-[[package]]
-name = "ecdsa"
-version = "0.16.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
-dependencies = [
- "der",
- "digest 0.10.7",
- "elliptic-curve",
- "rfc6979",
- "signature",
- "spki",
-]
-
-[[package]]
-name = "ed25519-zebra"
-version = "3.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6"
-dependencies = [
- "curve25519-dalek",
- "hashbrown 0.12.3",
- "hex",
- "rand_core 0.6.4",
- "serde",
- "sha2 0.9.9",
- "zeroize",
-]
-
-[[package]]
-name = "elliptic-curve"
-version = "0.13.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
-dependencies = [
- "base16ct",
- "crypto-bigint",
- "digest 0.10.7",
- "ff",
- "generic-array",
- "group",
- "pkcs8",
- "rand_core 0.6.4",
- "sec1",
- "subtle",
- "zeroize",
-]
-
-[[package]]
-name = "equivalent"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
-
-[[package]]
-name = "ff"
-version = "0.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
-dependencies = [
- "rand_core 0.6.4",
- "subtle",
-]
-
-[[package]]
-name = "forward_ref"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e"
-
-[[package]]
-name = "generic-array"
-version = "0.14.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
-dependencies = [
- "typenum",
- "version_check",
- "zeroize",
-]
-
-[[package]]
-name = "getrandom"
-version = "0.2.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
-dependencies = [
- "cfg-if",
- "libc",
- "wasi",
-]
-
-[[package]]
-name = "group"
-version = "0.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
-dependencies = [
- "ff",
- "rand_core 0.6.4",
- "subtle",
-]
-
-[[package]]
-name = "hashbrown"
-version = "0.12.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
-dependencies = [
- "ahash",
-]
-
-[[package]]
-name = "hashbrown"
-version = "0.14.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
-
-[[package]]
-name = "hex"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
-
-[[package]]
-name = "hmac"
-version = "0.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
-dependencies = [
- "digest 0.10.7",
-]
-
-[[package]]
-name = "indexmap"
-version = "2.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520"
-dependencies = [
- "equivalent",
- "hashbrown 0.14.3",
-]
-
-[[package]]
-name = "itoa"
-version = "1.0.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
-
-[[package]]
-name = "k256"
-version = "0.13.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc"
-dependencies = [
- "cfg-if",
- "ecdsa",
- "elliptic-curve",
- "once_cell",
- "sha2 0.10.8",
- "signature",
-]
-
-[[package]]
-name = "konst"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d712a8c49d4274f8d8a5cf61368cb5f3c143d149882b1a2918129e53395fdb0"
-dependencies = [
- "const_panic",
- "konst_kernel",
- "konst_proc_macros",
- "typewit",
-]
-
-[[package]]
-name = "konst_kernel"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dac6ea8c376b6e208a81cf39b8e82bebf49652454d98a4829e907dac16ef1790"
-dependencies = [
- "typewit",
-]
-
-[[package]]
-name = "konst_proc_macros"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e28ab1dc35e09d60c2b8c90d12a9a8d9666c876c10a3739a3196db0103b6043"
-
-[[package]]
-name = "libc"
-version = "0.2.153"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
-
-[[package]]
-name = "memchr"
-version = "2.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
-
-[[package]]
-name = "once_cell"
-version = "1.19.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
-
-[[package]]
-name = "opaque-debug"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
-
-[[package]]
-name = "pkcs8"
-version = "0.10.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
-dependencies = [
- "der",
- "spki",
-]
-
-[[package]]
-name = "proc-macro-crate"
-version = "1.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
-dependencies = [
- "once_cell",
- "toml_edit",
-]
-
-[[package]]
-name = "proc-macro-error"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
-dependencies = [
- "proc-macro-error-attr",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro-error-attr"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
-dependencies = [
- "proc-macro2",
- "quote",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.78"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
-dependencies = [
- "unicode-ident",
-]
-
-[[package]]
-name = "quote"
-version = "1.0.35"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "rand_core"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
-
-[[package]]
-name = "rand_core"
-version = "0.6.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
-dependencies = [
- "getrandom",
-]
-
-[[package]]
-name = "rfc6979"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
-dependencies = [
- "hmac",
- "subtle",
-]
-
-[[package]]
-name = "ryu"
-version = "1.0.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
-
-[[package]]
-name = "schemars"
-version = "0.8.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "45a28f4c49489add4ce10783f7911893516f15afe45d015608d41faca6bc4d29"
-dependencies = [
- "dyn-clone",
- "schemars_derive",
- "serde",
- "serde_json",
-]
-
-[[package]]
-name = "schemars_derive"
-version = "0.8.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c767fd6fa65d9ccf9cf026122c1b555f2ef9a4f0cea69da4d7dbc3e258d30967"
-dependencies = [
- "proc-macro2",
- "quote",
- "serde_derive_internals",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "sec1"
-version = "0.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
-dependencies = [
- "base16ct",
- "der",
- "generic-array",
- "pkcs8",
- "subtle",
- "zeroize",
-]
-
-[[package]]
-name = "semver"
-version = "1.0.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
-
-[[package]]
-name = "serde"
-version = "1.0.196"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
-dependencies = [
- "serde_derive",
-]
-
-[[package]]
-name = "serde-cw-value"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a75d32da6b8ed758b7d850b6c3c08f1d7df51a4df3cb201296e63e34a78e99d4"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "serde-json-wasm"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e9213a07d53faa0b8dd81e767a54a8188a242fdb9be99ab75ec576a774bfdd7"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "serde_derive"
-version = "1.0.196"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.48",
-]
-
-[[package]]
-name = "serde_derive_internals"
-version = "0.26.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "serde_json"
-version = "1.0.113"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79"
-dependencies = [
- "itoa",
- "ryu",
- "serde",
-]
-
-[[package]]
-name = "sha2"
-version = "0.9.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
-dependencies = [
- "block-buffer 0.9.0",
- "cfg-if",
- "cpufeatures",
- "digest 0.9.0",
- "opaque-debug",
-]
-
-[[package]]
-name = "sha2"
-version = "0.10.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
-dependencies = [
- "cfg-if",
- "cpufeatures",
- "digest 0.10.7",
-]
-
-[[package]]
-name = "signature"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
-dependencies = [
- "digest 0.10.7",
- "rand_core 0.6.4",
-]
-
-[[package]]
-name = "spki"
-version = "0.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
-dependencies = [
- "base64ct",
- "der",
-]
-
-[[package]]
-name = "static_assertions"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
-
-[[package]]
-name = "subtle"
-version = "2.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
-
-[[package]]
-name = "sylvia"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f358d505f46900e55154f028f18811961ebb58f7a92954ec03086ffb2b26cf51"
-dependencies = [
- "cosmwasm-schema",
- "cosmwasm-std",
- "konst",
- "schemars",
- "serde",
- "serde-cw-value",
- "serde-json-wasm",
- "sylvia-derive",
-]
-
-[[package]]
-name = "sylvia-derive"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bed182fb775d756fdfe7e87174a4e43f1c446c8f9aff1de38a2165dd04b7d805"
-dependencies = [
- "convert_case",
- "proc-macro-crate",
- "proc-macro-error",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "syn"
-version = "1.0.109"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "syn"
-version = "2.0.48"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "thiserror"
-version = "1.0.56"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad"
-dependencies = [
- "thiserror-impl",
-]
-
-[[package]]
-name = "thiserror-impl"
-version = "1.0.56"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.48",
-]
-
-[[package]]
-name = "toml_datetime"
-version = "0.6.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
-
-[[package]]
-name = "toml_edit"
-version = "0.19.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
-dependencies = [
- "indexmap",
- "toml_datetime",
- "winnow",
-]
-
-[[package]]
-name = "typenum"
-version = "1.17.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
-
-[[package]]
-name = "typewit"
-version = "1.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6fb9ae6a3cafaf0a5d14c2302ca525f9ae8e07a0f0e6949de88d882c37a6e24"
-dependencies = [
- "typewit_proc_macros",
-]
-
-[[package]]
-name = "typewit_proc_macros"
-version = "1.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e36a83ea2b3c704935a01b4642946aadd445cea40b10935e3f8bd8052b8193d6"
-
-[[package]]
-name = "unicode-ident"
-version = "1.0.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
-
-[[package]]
-name = "unicode-segmentation"
-version = "1.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202"
-
-[[package]]
-name = "version_check"
-version = "0.9.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-
-[[package]]
-name = "wasi"
-version = "0.11.0+wasi-snapshot-preview1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
-
-[[package]]
-name = "winnow"
-version = "0.5.39"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5389a154b01683d28c77f8f68f49dea75f0a4da32557a58f68ee51ebba472d29"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "zeroize"
-version = "1.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
diff --git a/Cargo.toml b/Cargo.toml
deleted file mode 100644
index 6e61c46f13..0000000000
--- a/Cargo.toml
+++ /dev/null
@@ -1,3 +0,0 @@
-[workspace]
-
-members = ["cosmwasm-contracts/*"]
diff --git a/Makefile b/Makefile
index e7dde61b97..6ff0632dd8 100644
--- a/Makefile
+++ b/Makefile
@@ -397,7 +397,7 @@ init-weshd-go:
cd ./weshd && go install golang.org/x/mobile/cmd/gomobile
cd ./weshd && gomobile init
-.PHONY: bump-ios-build-number
-bump-ios-build-number:
+.PHONY: bump-app-build-number
+bump-app-build-number:
npx tsx packages/scripts/app-build/bumpBuildNumber.ts $(shell echo $$(($$(git rev-list HEAD --count) + 10)))
diff --git a/app.config.js b/app.config.js
index 9e533a4f7f..ccc5618b6c 100644
--- a/app.config.js
+++ b/app.config.js
@@ -37,6 +37,7 @@ const config = {
backgroundColor: "#FFFFFF",
},
package: "com.teritori",
+ versionCode: "6",
},
web: {
bundler: "metro",
diff --git a/assets/icons/hand.svg b/assets/icons/hand.svg
new file mode 100644
index 0000000000..9a7ba014b6
--- /dev/null
+++ b/assets/icons/hand.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/points.svg b/assets/icons/points.svg
new file mode 100644
index 0000000000..f05d8e7292
--- /dev/null
+++ b/assets/icons/points.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/icons/select-Icon.svg b/assets/icons/select-Icon.svg
new file mode 100644
index 0000000000..22b3ee5df2
--- /dev/null
+++ b/assets/icons/select-Icon.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/assets/icons/unselect-icon.svg b/assets/icons/unselect-icon.svg
new file mode 100644
index 0000000000..c724cf4f70
--- /dev/null
+++ b/assets/icons/unselect-icon.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/cosmwasm-contracts/cw721-membership/Cargo.lock b/cosmwasm-contracts/cw721-membership/Cargo.lock
index a5b9b6e030..1a8a754b7c 100644
--- a/cosmwasm-contracts/cw721-membership/Cargo.lock
+++ b/cosmwasm-contracts/cw721-membership/Cargo.lock
@@ -13,6 +13,18 @@ dependencies = [
"version_check",
]
+[[package]]
+name = "anyhow"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
+
+[[package]]
+name = "base16ct"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
+
[[package]]
name = "base16ct"
version = "0.2.0"
@@ -67,6 +79,12 @@ version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
[[package]]
name = "cfg-if"
version = "1.0.0"
@@ -101,9 +119,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8bb3c77c3b7ce472056968c745eb501c440fbc07be5004eba02782c35bfbbe3"
dependencies = [
"digest 0.10.7",
- "ecdsa",
+ "ecdsa 0.16.9",
"ed25519-zebra",
- "k256",
+ "k256 0.13.2",
"rand_core 0.6.4",
"thiserror",
]
@@ -172,6 +190,18 @@ dependencies = [
"libc",
]
+[[package]]
+name = "crypto-bigint"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef"
+dependencies = [
+ "generic-array",
+ "rand_core 0.6.4",
+ "subtle",
+ "zeroize",
+]
+
[[package]]
name = "crypto-bigint"
version = "0.5.5"
@@ -207,6 +237,25 @@ dependencies = [
"zeroize",
]
+[[package]]
+name = "cw-multi-test"
+version = "0.16.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "127c7bb95853b8e828bdab97065c81cb5ddc20f7339180b61b2300565aaa99d1"
+dependencies = [
+ "anyhow",
+ "cosmwasm-std",
+ "cw-storage-plus 1.2.0",
+ "cw-utils 1.0.3",
+ "derivative",
+ "itertools",
+ "k256 0.11.6",
+ "prost",
+ "schemars",
+ "serde",
+ "thiserror",
+]
+
[[package]]
name = "cw-storage-plus"
version = "0.15.1"
@@ -330,6 +379,21 @@ dependencies = [
"thiserror",
]
+[[package]]
+name = "cw721-membership"
+version = "0.1.0"
+dependencies = [
+ "cosmwasm-schema",
+ "cosmwasm-std",
+ "cw-storage-plus 1.2.0",
+ "cw721 0.18.0",
+ "cw721-metadata-onchain",
+ "schemars",
+ "serde",
+ "sylvia",
+ "thiserror",
+]
+
[[package]]
name = "cw721-metadata-onchain"
version = "0.15.0"
@@ -346,18 +410,13 @@ dependencies = [
]
[[package]]
-name = "cw721_membership"
-version = "0.1.0"
+name = "der"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de"
dependencies = [
- "cosmwasm-schema",
- "cosmwasm-std",
- "cw-storage-plus 1.2.0",
- "cw721 0.18.0",
- "cw721-metadata-onchain",
- "schemars",
- "serde",
- "sylvia",
- "thiserror",
+ "const-oid",
+ "zeroize",
]
[[package]]
@@ -408,18 +467,30 @@ version = "1.0.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d"
+[[package]]
+name = "ecdsa"
+version = "0.14.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c"
+dependencies = [
+ "der 0.6.1",
+ "elliptic-curve 0.12.3",
+ "rfc6979 0.3.1",
+ "signature 1.6.4",
+]
+
[[package]]
name = "ecdsa"
version = "0.16.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
dependencies = [
- "der",
+ "der 0.7.8",
"digest 0.10.7",
- "elliptic-curve",
- "rfc6979",
- "signature",
- "spki",
+ "elliptic-curve 0.13.8",
+ "rfc6979 0.4.0",
+ "signature 2.2.0",
+ "spki 0.7.3",
]
[[package]]
@@ -437,21 +508,47 @@ dependencies = [
"zeroize",
]
+[[package]]
+name = "either"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a"
+
+[[package]]
+name = "elliptic-curve"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3"
+dependencies = [
+ "base16ct 0.1.1",
+ "crypto-bigint 0.4.9",
+ "der 0.6.1",
+ "digest 0.10.7",
+ "ff 0.12.1",
+ "generic-array",
+ "group 0.12.1",
+ "pkcs8 0.9.0",
+ "rand_core 0.6.4",
+ "sec1 0.3.0",
+ "subtle",
+ "zeroize",
+]
+
[[package]]
name = "elliptic-curve"
version = "0.13.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
dependencies = [
- "base16ct",
- "crypto-bigint",
+ "base16ct 0.2.0",
+ "crypto-bigint 0.5.5",
"digest 0.10.7",
- "ff",
+ "ff 0.13.0",
"generic-array",
- "group",
- "pkcs8",
+ "group 0.13.0",
+ "pkcs8 0.10.2",
"rand_core 0.6.4",
- "sec1",
+ "sec1 0.7.3",
"subtle",
"zeroize",
]
@@ -462,6 +559,16 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+[[package]]
+name = "ff"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
+dependencies = [
+ "rand_core 0.6.4",
+ "subtle",
+]
+
[[package]]
name = "ff"
version = "0.13.0"
@@ -500,13 +607,24 @@ dependencies = [
"wasi",
]
+[[package]]
+name = "group"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7"
+dependencies = [
+ "ff 0.12.1",
+ "rand_core 0.6.4",
+ "subtle",
+]
+
[[package]]
name = "group"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
dependencies = [
- "ff",
+ "ff 0.13.0",
"rand_core 0.6.4",
"subtle",
]
@@ -551,12 +669,33 @@ dependencies = [
"hashbrown 0.14.3",
]
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
[[package]]
name = "itoa"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+[[package]]
+name = "k256"
+version = "0.11.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b"
+dependencies = [
+ "cfg-if",
+ "ecdsa 0.14.8",
+ "elliptic-curve 0.12.3",
+ "sha2 0.10.8",
+]
+
[[package]]
name = "k256"
version = "0.13.2"
@@ -564,11 +703,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f01b677d82ef7a676aa37e099defd83a28e15687112cafdd112d60236b6115b"
dependencies = [
"cfg-if",
- "ecdsa",
- "elliptic-curve",
+ "ecdsa 0.16.9",
+ "elliptic-curve 0.13.8",
"once_cell",
"sha2 0.10.8",
- "signature",
+ "signature 2.2.0",
]
[[package]]
@@ -622,14 +761,24 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+[[package]]
+name = "pkcs8"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba"
+dependencies = [
+ "der 0.6.1",
+ "spki 0.6.0",
+]
+
[[package]]
name = "pkcs8"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
dependencies = [
- "der",
- "spki",
+ "der 0.7.8",
+ "spki 0.7.3",
]
[[package]]
@@ -675,6 +824,29 @@ dependencies = [
"unicode-ident",
]
+[[package]]
+name = "prost"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
+dependencies = [
+ "bytes",
+ "prost-derive",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
+dependencies = [
+ "anyhow",
+ "itertools",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
[[package]]
name = "quote"
version = "1.0.33"
@@ -699,6 +871,17 @@ dependencies = [
"getrandom",
]
+[[package]]
+name = "rfc6979"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb"
+dependencies = [
+ "crypto-bigint 0.4.9",
+ "hmac",
+ "zeroize",
+]
+
[[package]]
name = "rfc6979"
version = "0.4.0"
@@ -739,16 +922,30 @@ dependencies = [
"syn 1.0.109",
]
+[[package]]
+name = "sec1"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928"
+dependencies = [
+ "base16ct 0.1.1",
+ "der 0.6.1",
+ "generic-array",
+ "pkcs8 0.9.0",
+ "subtle",
+ "zeroize",
+]
+
[[package]]
name = "sec1"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
dependencies = [
- "base16ct",
- "der",
+ "base16ct 0.2.0",
+ "der 0.7.8",
"generic-array",
- "pkcs8",
+ "pkcs8 0.10.2",
"subtle",
"zeroize",
]
@@ -843,6 +1040,16 @@ dependencies = [
"digest 0.10.7",
]
+[[package]]
+name = "signature"
+version = "1.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c"
+dependencies = [
+ "digest 0.10.7",
+ "rand_core 0.6.4",
+]
+
[[package]]
name = "signature"
version = "2.2.0"
@@ -853,6 +1060,16 @@ dependencies = [
"rand_core 0.6.4",
]
+[[package]]
+name = "spki"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b"
+dependencies = [
+ "base64ct",
+ "der 0.6.1",
+]
+
[[package]]
name = "spki"
version = "0.7.3"
@@ -860,7 +1077,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
dependencies = [
"base64ct",
- "der",
+ "der 0.7.8",
]
[[package]]
@@ -881,8 +1098,11 @@ version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f358d505f46900e55154f028f18811961ebb58f7a92954ec03086ffb2b26cf51"
dependencies = [
+ "anyhow",
"cosmwasm-schema",
"cosmwasm-std",
+ "cw-multi-test",
+ "derivative",
"konst",
"schemars",
"serde",
diff --git a/cosmwasm-contracts/cw721-membership/Cargo.toml b/cosmwasm-contracts/cw721-membership/Cargo.toml
index d6c602b4c7..fba41f8221 100644
--- a/cosmwasm-contracts/cw721-membership/Cargo.toml
+++ b/cosmwasm-contracts/cw721-membership/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "cw721_membership"
+name = "cw721-membership"
version = "0.1.0"
edition = "2021"
@@ -16,3 +16,6 @@ cw-storage-plus = "1.1.0"
thiserror = "1.0.44"
cw721 = "0.18.0"
cw721-metadata-onchain = { version = "0.15.0", features = ["library"] }
+
+[dev-dependencies]
+sylvia = { version = "0.7.0", features = ["mt"] }
diff --git a/cosmwasm-contracts/cw721-membership/Makefile b/cosmwasm-contracts/cw721-membership/Makefile
index 20177c7fc1..fb0b08250b 100644
--- a/cosmwasm-contracts/cw721-membership/Makefile
+++ b/cosmwasm-contracts/cw721-membership/Makefile
@@ -1,8 +1,12 @@
-CODE_ID=13
ADMIN=testnet-adm
ADMIN_ADDR=$(shell teritorid keys show $(ADMIN) --keyring-backend test --output json | jq -r .address)
-TX_FLAGS=--from $(ADMIN) --chain-id teritori-test-6 --node https://rpc.testnet.teritori.com:443 --gas auto --gas-adjustment 1.3 -y -b sync --output json --keyring-backend test
-CONTRACT_ADDRESS=tori1yek2csaaw550wq52v06ztwp2snuxp8epkfzzvqfvkv8g6xfv3nqqzgz3p9
+NODE_FLAG=--node https://rpc.testnet.teritori.com:443
+TX_FLAGS=--from $(ADMIN) --chain-id teritori-test-6 $(NODE_FLAG) --gas auto --gas-adjustment 1.3 -y -b sync --output json --keyring-backend test -o json
+QUERY_FLAGS=$(NODE_FLAG) -o json
+
+# only informative
+CODE_ID=43
+CONTRACT_ADDRESS=tori1quf0cu5tlg54aqjd8z54gpvcnh29n6l8qcqmllgrl4gz6jlyn7tsrjllj8
artifacts/cw721_membership.wasm:
docker run --rm -v "$(PWD)":/code \
@@ -13,8 +17,13 @@ artifacts/cw721_membership.wasm:
.PHONY: deploy.testnet
deploy.testnet: artifacts/cw721_membership.wasm
- teritorid tx wasm store artifacts/cw721_membership.wasm $(TX_FLAGS)
+ set -o pipefail; \
+ TXHASH=$$(teritorid tx wasm store artifacts/cw721_membership.wasm $(TX_FLAGS) | jq -r .txhash); \
+ while ! teritorid query tx $$TXHASH $(QUERY_FLAGS) 2>/dev/null | jq -r '.logs[0].events[] | select(.type=="store_code").attributes[] | select(.key=="code_id").value'; do sleep 1; done
.PHONY: instantiate.testnet
instantiate.testnet:
- teritorid tx wasm instantiate $(CODE_ID) '{ "admin_addr": "$(ADMIN_ADDR)", "mint_royalties": 1000 }' --label Cw721Membership --admin $(ADMIN_ADDR) $(TX_FLAGS)
+ set -o pipefail; \
+ TXHASH=$$(teritorid tx wasm instantiate $(CODE_ID) '{ "admin_addr": "$(ADMIN_ADDR)", "mint_royalties": 1000 }' --label Cw721Membership --admin $(ADMIN_ADDR) $(TX_FLAGS) | jq -r .txhash); \
+ while ! teritorid query tx $$TXHASH $(QUERY_FLAGS) 2>/dev/null | jq -r '.logs[0].events[] | select(.type=="instantiate").attributes[] | select(.key=="_contract_address").value'; do sleep 1; done
+
diff --git a/cosmwasm-contracts/cw721-membership/schema/cw721_membership.json b/cosmwasm-contracts/cw721-membership/schema/cw721-membership.json
similarity index 96%
rename from cosmwasm-contracts/cw721-membership/schema/cw721_membership.json
rename to cosmwasm-contracts/cw721-membership/schema/cw721-membership.json
index 115d2e587c..b23821d020 100644
--- a/cosmwasm-contracts/cw721-membership/schema/cw721_membership.json
+++ b/cosmwasm-contracts/cw721-membership/schema/cw721-membership.json
@@ -1,5 +1,5 @@
{
- "contract_name": "cw721_membership",
+ "contract_name": "cw721-membership",
"contract_version": "0.1.0",
"idl_version": "1.0.0",
"instantiate": {
@@ -512,6 +512,34 @@
}
},
"additionalProperties": false
+ },
+ {
+ "type": "object",
+ "required": [
+ "all_tokens"
+ ],
+ "properties": {
+ "all_tokens": {
+ "type": "object",
+ "properties": {
+ "limit": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "uint32",
+ "minimum": 0.0
+ },
+ "start_after": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ }
+ }
+ },
+ "additionalProperties": false
}
]
}
@@ -799,6 +827,24 @@
}
}
},
+ "all_tokens": {
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TokensResponse",
+ "type": "object",
+ "required": [
+ "tokens"
+ ],
+ "properties": {
+ "tokens": {
+ "description": "Contains all token_ids in lexicographical ordering If there are more than `limit`, use `start_after` in future queries to achieve pagination.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
"channel": {
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "ChannelResponse",
diff --git a/cosmwasm-contracts/cw721-membership/schema/raw/query.json b/cosmwasm-contracts/cw721-membership/schema/raw/query.json
index 7d6613b1c7..2cb66d6d81 100644
--- a/cosmwasm-contracts/cw721-membership/schema/raw/query.json
+++ b/cosmwasm-contracts/cw721-membership/schema/raw/query.json
@@ -216,6 +216,34 @@
}
},
"additionalProperties": false
+ },
+ {
+ "type": "object",
+ "required": [
+ "all_tokens"
+ ],
+ "properties": {
+ "all_tokens": {
+ "type": "object",
+ "properties": {
+ "limit": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "format": "uint32",
+ "minimum": 0.0
+ },
+ "start_after": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ }
+ }
+ },
+ "additionalProperties": false
}
]
}
diff --git a/cosmwasm-contracts/cw721-membership/schema/raw/response_to_all_tokens.json b/cosmwasm-contracts/cw721-membership/schema/raw/response_to_all_tokens.json
new file mode 100644
index 0000000000..4728d37e2d
--- /dev/null
+++ b/cosmwasm-contracts/cw721-membership/schema/raw/response_to_all_tokens.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "TokensResponse",
+ "type": "object",
+ "required": [
+ "tokens"
+ ],
+ "properties": {
+ "tokens": {
+ "description": "Contains all token_ids in lexicographical ordering If there are more than `limit`, use `start_after` in future queries to achieve pagination.",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/cosmwasm-contracts/cw721-membership/src/contract.rs b/cosmwasm-contracts/cw721-membership/src/contract.rs
index acb9b5578c..468175d533 100644
--- a/cosmwasm-contracts/cw721-membership/src/contract.rs
+++ b/cosmwasm-contracts/cw721-membership/src/contract.rs
@@ -28,20 +28,20 @@ pub struct Cw721MembershipContract {
#[cw_serde]
pub struct MembershipConfig {
- display_name: String,
- description: String,
- nft_image_uri: String,
- nft_name_prefix: String,
- duration_seconds: Uint64,
- trade_royalties: u16, // 0-10000 = 0%-100%,
- price: Coin,
+ pub display_name: String,
+ pub description: String,
+ pub nft_image_uri: String,
+ pub nft_name_prefix: String,
+ pub duration_seconds: Uint64,
+ pub trade_royalties: u16, // 0-10000 = 0%-100%,
+ pub price: Coin,
}
#[cw_serde]
pub struct ChannelResponse {
- memberships_config: Vec,
- mint_royalties: u16, // 0-10000 = 0%-100%
- // TODO: tokens_count
+ pub memberships_config: Vec,
+ pub mint_royalties: u16, // 0-10000 = 0%-100%
+ // TODO: tokens_count
}
#[cw_serde]
@@ -215,13 +215,18 @@ impl Cw721MembershipContract {
image_uri: membership.nft_image_uri.to_owned(),
start_time: ctx.env.block.time.to_owned(),
duration_seconds: membership.duration_seconds,
- owner_addr: recipient_addr,
+ owner_addr: recipient_addr.to_owned(),
};
self.nfts.save(
ctx.deps.storage,
(channel_addr.to_owned(), nft_index.into()),
&nft,
)?;
+ self.by_owner.save(
+ ctx.deps.storage,
+ (recipient_addr, channel_addr.to_owned(), nft_index.into()),
+ &(),
+ )?;
channel.next_index = channel.next_index.checked_add(Uint64::one())?;
self.channels
@@ -678,11 +683,11 @@ impl Cw721MembershipContract {
) -> Result {
let owner_addr = ctx.deps.api.addr_validate(owner.as_str())?;
let limit = limit.map(|limit| limit as usize).unwrap_or(30);
- let start_after = match start_after {
+ let min_bound = match start_after {
Some(start_after) => {
let (channel_addr, nft_index) = parse_token_id(&start_after)?;
let channel_addr = Addr::unchecked(channel_addr.as_str());
- Some((channel_addr, nft_index))
+ Some(Bound::exclusive((channel_addr, nft_index)))
}
None => None,
};
@@ -690,12 +695,7 @@ impl Cw721MembershipContract {
let tokens: Result, _> = self
.by_owner
.sub_prefix(owner_addr)
- .range(
- ctx.deps.storage,
- start_after.map(|sa| Bound::exclusive(sa)),
- None,
- Order::Ascending,
- )
+ .range(ctx.deps.storage, min_bound, None, Order::Ascending)
.take(limit)
.map(|item| -> Result {
let ((channel_addr, nft_index), _) = item?;
@@ -705,6 +705,10 @@ impl Cw721MembershipContract {
Ok(TokensResponse { tokens: tokens? })
}
+ /// With Enumerable extension.
+ /// Returns all tokens
+ /// Return type: TokensResponse.
+ #[msg(query)]
pub fn all_tokens(
&self,
ctx: QueryCtx,
@@ -773,7 +777,7 @@ impl Cw721MembershipContract {
token_uri: None,
extension: NftExtension {
name: Some(nft.name),
- description: None,
+ description: Some(nft.description),
image: Some(nft.image_uri),
animation_url: None,
external_url: None,
diff --git a/cosmwasm-contracts/cw721-membership/src/lib.rs b/cosmwasm-contracts/cw721-membership/src/lib.rs
index ed72987554..ae5b855d2f 100644
--- a/cosmwasm-contracts/cw721-membership/src/lib.rs
+++ b/cosmwasm-contracts/cw721-membership/src/lib.rs
@@ -1,2 +1,4 @@
pub mod contract;
pub mod error;
+#[cfg(test)]
+pub mod multitest;
diff --git a/cosmwasm-contracts/cw721-membership/src/multitest.rs b/cosmwasm-contracts/cw721-membership/src/multitest.rs
new file mode 100644
index 0000000000..811f502172
--- /dev/null
+++ b/cosmwasm-contracts/cw721-membership/src/multitest.rs
@@ -0,0 +1,149 @@
+use cosmwasm_std::{Addr, Coin, Timestamp, Uint128, Uint64};
+use cw721::{NftInfoResponse, TokensResponse};
+use cw721_metadata_onchain::{Metadata, Trait};
+use sylvia::{anyhow::Error, multitest::App};
+
+use crate::contract::{
+ multitest_utils::CodeId, MembershipConfig, Subscription, SubscriptionResponse,
+};
+
+#[test]
+fn basic_full_flow() {
+ let app = App::default();
+ let code_id = CodeId::store_code(&app);
+
+ let creator = "creator";
+ let admin = "admin";
+ let channel_owner = "channel_owner";
+ let sub_user = "sub_user";
+ let mint_royalties = 5;
+
+ app.app_mut()
+ .init_modules(|router, _, storage| {
+ router.bank.init_balance(
+ storage,
+ &Addr::unchecked(sub_user.to_string()),
+ vec![Coin::new(1000000, "utori")],
+ )?;
+ Ok::<(), Error>(())
+ })
+ .unwrap();
+
+ let contract = code_id
+ .instantiate(admin.to_string(), mint_royalties)
+ .call(creator)
+ .unwrap();
+
+ let memberships_config = vec![MembershipConfig {
+ display_name: "Channel".to_string(),
+ description: "Channel description".to_string(),
+ nft_image_uri: "https://example.com/image.png".to_string(),
+ nft_name_prefix: "Sub".to_string(),
+ duration_seconds: Uint64::from(60u32 * 60 * 24 * 7),
+ price: Coin {
+ denom: "utori".to_string(),
+ amount: Uint128::from(1000000u32),
+ },
+ trade_royalties: 20,
+ }];
+
+ contract
+ .upsert_channel(memberships_config.clone())
+ .call(channel_owner)
+ .unwrap();
+
+ let channel_response = contract.channel(channel_owner.to_string()).unwrap();
+ assert_eq!(channel_response.memberships_config, memberships_config);
+ assert_eq!(channel_response.mint_royalties, mint_royalties);
+
+ contract
+ .subscribe(channel_owner.to_string(), sub_user.to_string(), 0)
+ .with_funds(&[Coin {
+ denom: "utori".to_string(),
+ amount: Uint128::from(1000000u32),
+ }])
+ .call(sub_user)
+ .unwrap();
+
+ let tokens_response = contract.tokens(sub_user.to_string(), None, None).unwrap();
+ assert_eq!(
+ tokens_response,
+ TokensResponse {
+ tokens: vec!["channel_owner#1".to_string()]
+ }
+ );
+
+ let all_tokens_response = contract.all_tokens(None, None).unwrap();
+ assert_eq!(
+ all_tokens_response,
+ TokensResponse {
+ tokens: vec!["channel_owner#1".to_string()]
+ }
+ );
+
+ let token_info_response = contract.nft_info("channel_owner#1".to_string()).unwrap();
+ assert_eq!(
+ token_info_response,
+ NftInfoResponse {
+ token_uri: None,
+ extension: Metadata {
+ image: Some("https://example.com/image.png".to_string()),
+ name: Some("Sub #1".to_string()),
+ description: Some("Channel description".to_string()),
+ attributes: Some(vec![
+ Trait {
+ display_type: Some("DISPLAY_TYPE_PROPERTY".to_string()),
+ trait_type: "Channel address".to_string(),
+ value: "channel_owner".to_string()
+ },
+ Trait {
+ display_type: Some("DISPLAY_TYPE_DATE".to_string()),
+ trait_type: "Starts".to_string(),
+ value: "1571797419.879305533".to_string()
+ },
+ Trait {
+ display_type: Some("DISPLAY_TYPE_PROPERTY".to_string()),
+ trait_type: "Duration in seconds".to_string(),
+ value: "604800".to_string()
+ },
+ ]),
+ ..Default::default()
+ }
+ }
+ );
+
+ // go 6 days into the future
+ app.update_block(|block| {
+ block.time = Timestamp::from_seconds(block.time.seconds() + 60 * 60 * 24 * 6);
+ });
+
+ let subscription = contract
+ .subscription(sub_user.to_string(), channel_owner.to_string())
+ .unwrap();
+ assert_eq!(
+ subscription,
+ SubscriptionResponse {
+ subscription: Some(Subscription {
+ expiration: Timestamp::from_nanos(1572402219879305533),
+ level_expiration: Timestamp::from_nanos(1572402219879305533)
+ }),
+ level: 1
+ }
+ );
+
+ // go 2 days into the future
+ app.update_block(|block| {
+ block.time = Timestamp::from_seconds(block.time.seconds() + 60 * 60 * 24 * 2);
+ });
+
+ let subscription = contract
+ .subscription(sub_user.to_string(), channel_owner.to_string())
+ .unwrap();
+ assert_eq!(
+ subscription,
+ SubscriptionResponse {
+ subscription: None,
+ level: 0
+ }
+ );
+}
diff --git a/eas.json b/eas.json
index 6dff45df29..87eccb946f 100644
--- a/eas.json
+++ b/eas.json
@@ -21,7 +21,9 @@
"submit": {
"production": {
"android": {
- "track": "internal"
+ "track": "internal",
+ "serviceAccountKeyPath": "./service-account-android-submit.json",
+ "releaseStatus": "draft"
},
"ios": {
"appleId": "sakulbudhathoki977@gmail.com",
diff --git a/go/pkg/p2e/seasons.go b/go/pkg/p2e/seasons.go
index 38478f3716..30e8bef569 100644
--- a/go/pkg/p2e/seasons.go
+++ b/go/pkg/p2e/seasons.go
@@ -209,4 +209,17 @@ var THE_RIOT_ETHEREUM_SEASONS = []Season{
StartsAt: "2024-02-07T00:00:00",
EndsAt: "2024-02-11T00:00:00",
},
+ // Season 1b
+ {
+ ID: "Season 1b - ETH",
+ GameID: THE_RIOT_GAME_ID,
+ Denom: "tori",
+ Decimals: 6,
+ TotalPrize: 1,
+ BossName: "Tori Pup",
+ BossImage: "https://bafkreidzf2kol7hi3lae33fpu6iryfw7mgbp5fbqnyewq64kagykc266h4.ipfs.cf-ipfs.com/",
+ TopN: 500,
+ StartsAt: "2024-02-11T00:00:00",
+ EndsAt: "2024-02-20T00:00:00",
+ },
}
diff --git a/networks.json b/networks.json
index dccb38f04e..f98febaa49 100644
--- a/networks.json
+++ b/networks.json
@@ -10939,7 +10939,7 @@
"featureObjects": [
{
"type": "CosmWasmPremiumFeed",
- "membershipContractAddress": "tori1yek2csaaw550wq52v06ztwp2snuxp8epkfzzvqfvkv8g6xfv3nqqzgz3p9",
+ "membershipContractAddress": "tori1quf0cu5tlg54aqjd8z54gpvcnh29n6l8qcqmllgrl4gz6jlyn7tsrjllj8",
"mintDenom": "utori"
}
],
diff --git a/package.json b/package.json
index 439de61215..fb7f2e0f6e 100644
--- a/package.json
+++ b/package.json
@@ -191,7 +191,7 @@
"rimraf": "^5.0.5",
"ts-proto": "^1.120.0",
"ts-unused-exports": "^10.0.1",
- "typescript": "^5.2.2"
+ "typescript": "^5.3.0"
},
"resolutions": {
"@gnolang/tm2-js-client@^1.0.0": "patch:@gnolang/tm2-js-client@npm%3A1.0.1#./.yarn/patches/@gnolang-tm2-js-client-npm-1.0.1-9e54bafbb3.patch",
diff --git a/packages/components/hub/ProfileButton.tsx b/packages/components/hub/ProfileButton.tsx
index 72e568fdf9..6ee1fefbfe 100644
--- a/packages/components/hub/ProfileButton.tsx
+++ b/packages/components/hub/ProfileButton.tsx
@@ -35,14 +35,23 @@ import { TextInputCustom } from "../inputs/TextInputCustom";
import ModalBase from "../modals/ModalBase";
import { SpacerColumn } from "../spacer";
+import { useTNS } from "@/context/TNSProvider";
import { ButtonsSize } from "@/utils/style/buttons";
export const ProfileButton: React.FC<{
buttonSize?: ButtonsSize;
style?: StyleProp;
isEdit?: boolean;
-}> = ({ style, isEdit, buttonSize = "XL" }) => {
+ setIsEditProfileModal?: (val: boolean) => void;
+}> = ({
+ style,
+ isEdit,
+ buttonSize = "XL",
+ setIsEditProfileModal = (val: boolean) => {},
+}) => {
const selectedWallet = useSelectedWallet();
+ const { setName } = useTNS();
+
const network = getNetwork(selectedWallet?.networkId);
const { metadata } = useNSUserInfo(selectedWallet?.userId);
if (!network?.features.includes(NetworkFeature.NameService)) {
@@ -50,37 +59,41 @@ export const ProfileButton: React.FC<{
}
if (selectedWallet && metadata?.tokenId)
- return (
-
+ if (isEdit) {
+ return (
{
+ const tokenName = metadata?.tokenId?.replace(".tori", "");
+ setIsEditProfileModal(true);
+ setName(tokenName || "");
+ }}
/>
-
- );
+ );
+ } else {
+ return (
+
+
+
+ );
+ }
return ;
};
diff --git a/packages/components/navigation/MiniModeNavigator.tsx b/packages/components/navigation/MiniModeNavigator.tsx
index 2063f0ac6b..414cdb37df 100644
--- a/packages/components/navigation/MiniModeNavigator.tsx
+++ b/packages/components/navigation/MiniModeNavigator.tsx
@@ -10,6 +10,7 @@ import { RootStackParamList } from "../../utils/navigation";
import { neutral00, secondaryColor } from "../../utils/style/colors";
import { TabBarIcon } from "../TabBarIcon";
+import { useOnboardedStatus } from "@/hooks/useOnboardStatus";
import { FeedPostViewScreen } from "@/screens/FeedPostView/FeedPostViewScreen";
import { NFTDetailScreen } from "@/screens/Marketplace/NFTDetailScreen";
import AboutScreen from "@/screens/Mini/About/AboutScreen";
@@ -54,7 +55,6 @@ import { CreateWalletScreen } from "@/screens/Wallet/Screens/CreateWalletScreen"
import { ImportWallet } from "@/screens/Wallet/Screens/ImportWallet";
import NativeWallet from "@/screens/Wallet/Screens/NativeWallet";
import { SuccessScreen } from "@/screens/Wallet/Screens/SucessScreen";
-import { ViewSeed } from "@/screens/Wallet/Screens/ViewSeed";
const Stack = createNativeStackNavigator();
const Tab = createBottomTabNavigator();
@@ -94,9 +94,15 @@ const MainTab = () => {
);
};
-export const MiniModeNavigator: React.FC = () => {
+export const MiniModeNavigator = () => {
+ const [isLoading, isOnboarded] = useOnboardedStatus();
+
+ if (isLoading) return null;
+
return (
-
+
{
options={{ header: () => null }}
component={MainTab}
/>
- null, title: "View Seed" }}
- />
{
component={NativeWallet}
options={{ header: () => null, title: screenTitle("Wallet Create") }}
/>
- null, title: screenTitle("View Seed") }}
- />
>();
@@ -136,6 +136,10 @@ export const NFTMainInfo: React.FC<{
}, [network?.id, nftInfo]);
const SelectedTabItemRendering: React.FC = () => {
+ const sectionContainerStyles: ViewStyle = {
+ width: width < 600 ? width : 600,
+ paddingVertical: layout.spacing_x3,
+ };
switch (selectedTab) {
case "about":
return (
@@ -231,6 +235,11 @@ export const NFTMainInfo: React.FC<{
default: module.CollapsablePriceHistory,
})),
);
+ const collapsableContainerStyles: ViewStyle = {
+ width: "100%",
+ maxWidth: screenContentMaxWidth,
+ marginBottom: layout.spacing_x2,
+ };
return (
<>
@@ -253,7 +262,7 @@ export const NFTMainInfo: React.FC<{
>
@@ -380,13 +389,3 @@ export const NFTMainInfo: React.FC<{
>
);
};
-
-const sectionContainerStyles: ViewStyle = {
- width: 600,
- paddingVertical: layout.spacing_x3,
-};
-const collapsableContainerStyles: ViewStyle = {
- width: "100%",
- maxWidth: screenContentMaxWidth,
- marginBottom: layout.spacing_x2,
-};
diff --git a/packages/components/tabs/Tabs.tsx b/packages/components/tabs/Tabs.tsx
index 17311ba845..2065303fdb 100644
--- a/packages/components/tabs/Tabs.tsx
+++ b/packages/components/tabs/Tabs.tsx
@@ -12,6 +12,7 @@ import {
ViewStyle,
} from "react-native";
+import pointsSVG from "../../../assets/icons/points.svg";
import {
gradientColorBlue,
gradientColorDarkerBlue,
@@ -19,6 +20,7 @@ import {
neutral33,
neutral77,
secondaryColor,
+ yellowPremium,
} from "../../utils/style/colors";
import { fontSemibold14 } from "../../utils/style/fonts";
import { layout } from "../../utils/style/layout";
@@ -30,6 +32,7 @@ import { TertiaryBadge } from "../badges/TertiaryBadge";
import { GradientText } from "../gradientText";
import { SpacerRow } from "../spacer";
+import { useDeveloperMode } from "@/hooks/useDeveloperMode";
import { TabDefinition } from "@/utils/types/tabs";
export const Tabs = ({
@@ -65,7 +68,7 @@ export const Tabs = ({
animated: false,
});
};
-
+ const [developerMode] = useDeveloperMode();
return (
// styles are applied weirdly to ScrollView, so it's better to apply them to a constraining view
<>
@@ -89,108 +92,128 @@ export const Tabs = ({
{itemsKeys.map((key, index) => {
const item = items[key];
const isSelected = selected === key;
- return (
-
- item.scrollTo
- ? scrollTo(item.scrollTo, { offset: -60 })
- : onSelect(key, item)
- }
- disabled={item.disabled}
- style={[
- {
- height: "100%",
- justifyContent: "center",
- marginRight:
- index !== itemsKeys.length - 1 ? layout.spacing_x3 : 0,
- },
- tabContainerStyle,
- ]}
- >
-
+ item.scrollTo
+ ? scrollTo(item.scrollTo, { offset: -60 })
+ : onSelect(key, item)
+ }
+ disabled={item.disabled}
+ style={[
+ {
+ height: "100%",
+ justifyContent: "center",
+ marginRight:
+ index !== itemsKeys.length - 1 ? layout.spacing_x3 : 0,
+ },
+ tabContainerStyle,
+ ]}
>
- {isSelected && gradientText ? (
-
- {item.name}
-
- ) : (
-
- {item.name}
-
- )}
-
- {!!item.badgeCount && }
- {item.badgeCount ? (
- isSelected ? (
-
- ) : (
-
- )
- ) : null}
-
- {item.iconSVG && (
-
-
-
- )}
-
- {!hideSelector && isSelected && (
- <>
- {gradientText ? (
-
- ) : (
+
+ {key === "premium-content" && (
+
+
+ )}
+ {isSelected && gradientText ? (
+
+ {item.name}
+
+ ) : (
+
+ >
+ {item.name}
+
)}
- >
- )}
-
- );
+
+ {!!item.badgeCount && }
+ {item.badgeCount ? (
+ isSelected ? (
+
+ ) : (
+
+ )
+ ) : null}
+
+ {item.iconSVG && (
+
+
+
+ )}
+
+ {!hideSelector && isSelected && (
+ <>
+ {gradientText ? (
+
+ ) : (
+
+ )}
+ >
+ )}
+
+ );
+ }
})}
diff --git a/packages/contracts-clients/cw721-membership/Cw721Membership.client.ts b/packages/contracts-clients/cw721-membership/Cw721Membership.client.ts
index 896b55473c..9c3c7c5d6c 100644
--- a/packages/contracts-clients/cw721-membership/Cw721Membership.client.ts
+++ b/packages/contracts-clients/cw721-membership/Cw721Membership.client.ts
@@ -6,7 +6,7 @@
import { CosmWasmClient, SigningCosmWasmClient, ExecuteResult } from "@cosmjs/cosmwasm-stargate";
import { StdFee } from "@cosmjs/amino";
-import { InstantiateMsg, ExecuteMsg, ExecMsg, Uint64, Uint128, MembershipConfig, Coin, QueryMsg, QueryMsg1, AdminFundsResponse, Expiration, Timestamp, AllNftInfoResponseForMetadata, OwnerOfResponse, Approval, NftInfoResponseForMetadata, Metadata, Trait, ChannelResponse, ChannelFundsResponse, ContractInfoResponse, NumTokensResponse, SubscriptionResponse, Subscription, TokensResponse } from "./Cw721Membership.types";
+import { InstantiateMsg, ExecuteMsg, ExecMsg, Uint64, Uint128, MembershipConfig, Coin, QueryMsg, QueryMsg1, AdminFundsResponse, Expiration, Timestamp, AllNftInfoResponseForMetadata, OwnerOfResponse, Approval, NftInfoResponseForMetadata, Metadata, Trait, TokensResponse, ChannelResponse, ChannelFundsResponse, ContractInfoResponse, NumTokensResponse, SubscriptionResponse, Subscription } from "./Cw721Membership.types";
export interface Cw721MembershipReadOnlyInterface {
contractAddress: string;
channel: ({
@@ -57,6 +57,13 @@ export interface Cw721MembershipReadOnlyInterface {
owner: string;
startAfter?: string;
}) => Promise;
+ allTokens: ({
+ limit,
+ startAfter
+ }: {
+ limit?: number;
+ startAfter?: string;
+ }) => Promise;
}
export class Cw721MembershipQueryClient implements Cw721MembershipReadOnlyInterface {
client: CosmWasmClient;
@@ -75,6 +82,7 @@ export class Cw721MembershipQueryClient implements Cw721MembershipReadOnlyInterf
this.nftInfo = this.nftInfo.bind(this);
this.allNftInfo = this.allNftInfo.bind(this);
this.tokens = this.tokens.bind(this);
+ this.allTokens = this.allTokens.bind(this);
}
channel = async ({
@@ -184,6 +192,20 @@ export class Cw721MembershipQueryClient implements Cw721MembershipReadOnlyInterf
}
});
};
+ allTokens = async ({
+ limit,
+ startAfter
+ }: {
+ limit?: number;
+ startAfter?: string;
+ }): Promise => {
+ return this.client.queryContractSmart(this.contractAddress, {
+ all_tokens: {
+ limit,
+ start_after: startAfter
+ }
+ });
+ };
}
export interface Cw721MembershipInterface extends Cw721MembershipReadOnlyInterface {
contractAddress: string;
diff --git a/packages/contracts-clients/cw721-membership/Cw721Membership.types.ts b/packages/contracts-clients/cw721-membership/Cw721Membership.types.ts
index 0165397d39..d2154f4bc6 100644
--- a/packages/contracts-clients/cw721-membership/Cw721Membership.types.ts
+++ b/packages/contracts-clients/cw721-membership/Cw721Membership.types.ts
@@ -126,6 +126,12 @@ export type QueryMsg1 = {
start_after?: string | null;
[k: string]: unknown;
};
+} | {
+ all_tokens: {
+ limit?: number | null;
+ start_after?: string | null;
+ [k: string]: unknown;
+ };
};
export interface AdminFundsResponse {
funds: Coin[];
@@ -170,6 +176,9 @@ export interface Trait {
trait_type: string;
value: string;
}
+export interface TokensResponse {
+ tokens: string[];
+}
export interface ChannelResponse {
memberships_config: MembershipConfig[];
mint_royalties: number;
@@ -191,7 +200,4 @@ export interface SubscriptionResponse {
export interface Subscription {
expiration: Timestamp;
level_expiration: Timestamp;
-}
-export interface TokensResponse {
- tokens: string[];
}
\ No newline at end of file
diff --git a/packages/hooks/feed/usePremiumChannel.ts b/packages/hooks/feed/usePremiumChannel.ts
index f20f906cc3..dcbf9c7dad 100644
--- a/packages/hooks/feed/usePremiumChannel.ts
+++ b/packages/hooks/feed/usePremiumChannel.ts
@@ -1,11 +1,6 @@
import { useQuery } from "@tanstack/react-query";
-import { Cw721MembershipQueryClient } from "@/contracts-clients/cw721-membership";
-import {
- NetworkFeature,
- getNetworkFeature,
- mustGetNonSigningCosmWasmClient,
-} from "@/networks";
+import { mustGetCw721MembershipQueryClient } from "@/utils/feed/client";
export const usePremiumChannel = (
networkId: string | undefined,
@@ -18,19 +13,7 @@ export const usePremiumChannel = (
return null;
}
- const premiumFeedFeature = getNetworkFeature(
- networkId,
- NetworkFeature.CosmWasmPremiumFeed,
- );
- if (!premiumFeedFeature) {
- return null;
- }
-
- const cosmwasmClient = await mustGetNonSigningCosmWasmClient(networkId);
- const client = new Cw721MembershipQueryClient(
- cosmwasmClient,
- premiumFeedFeature.membershipContractAddress,
- );
+ const client = await mustGetCw721MembershipQueryClient(networkId);
try {
const channel = await client.channel({ channelAddr: channelAddress });
diff --git a/packages/hooks/feed/usePremiumIsSubscribed.ts b/packages/hooks/feed/usePremiumIsSubscribed.ts
new file mode 100644
index 0000000000..bacb977e2a
--- /dev/null
+++ b/packages/hooks/feed/usePremiumIsSubscribed.ts
@@ -0,0 +1,12 @@
+import { usePremiumSubscription } from "./usePremiumSubscription";
+
+export const usePremiumIsSubscribed = (
+ channelUserId: string | undefined,
+ subUserId: string | undefined,
+) => {
+ const { data, ...other } = usePremiumSubscription(channelUserId, subUserId);
+ return {
+ data: data === undefined ? undefined : !!data?.subscription,
+ ...other,
+ };
+};
diff --git a/packages/hooks/feed/usePremiumSubscription.ts b/packages/hooks/feed/usePremiumSubscription.ts
new file mode 100644
index 0000000000..292480b2a2
--- /dev/null
+++ b/packages/hooks/feed/usePremiumSubscription.ts
@@ -0,0 +1,40 @@
+import { useQuery } from "@tanstack/react-query";
+
+import { parseUserId } from "@/networks";
+import { mustGetCw721MembershipQueryClient } from "@/utils/feed/client";
+
+export const usePremiumSubscription = (
+ channelUserId: string | undefined,
+ subUserId: string | undefined,
+) => {
+ console.log("use premium sub", channelUserId, subUserId);
+ return useQuery(
+ ["premium-is-subscribed", channelUserId, subUserId],
+ async () => {
+ console.log("fetch sub", channelUserId, subUserId);
+
+ const [network, channelAddr] = parseUserId(channelUserId);
+ const [, subAddr] = parseUserId(subUserId);
+
+ if (!network || !channelAddr || !subAddr) {
+ return null;
+ }
+
+ const client = await mustGetCw721MembershipQueryClient(network.id);
+
+ const tokens = await client.tokens({ owner: subAddr });
+ console.log("sub tokens", tokens);
+
+ const allTokens = await client.allTokens({});
+ console.log("all sub tokens", allTokens);
+
+ const result = await client.subscription({
+ channelAddr,
+ subAddr,
+ });
+ console.log("got sub", result);
+ return result;
+ },
+ { staleTime: Infinity },
+ );
+};
diff --git a/packages/hooks/useAppMode.ts b/packages/hooks/useAppMode.ts
index 476942bccd..ae1389c53f 100644
--- a/packages/hooks/useAppMode.ts
+++ b/packages/hooks/useAppMode.ts
@@ -3,7 +3,10 @@ import { useDispatch, useSelector } from "react-redux";
import { selectAppMode, setAppMode } from "@/store/slices/settings";
import { AppMode } from "@/utils/types/app-mode";
-export const useAppMode = () => {
+export const useAppMode = (): [
+ appMode: AppMode,
+ handleSet: (mode: AppMode) => void,
+] => {
const appMode = useSelector(selectAppMode);
const dispatch = useDispatch();
diff --git a/packages/hooks/useChatActivated.ts b/packages/hooks/useChatActivated.ts
new file mode 100644
index 0000000000..b4f095d63e
--- /dev/null
+++ b/packages/hooks/useChatActivated.ts
@@ -0,0 +1,20 @@
+import { useDispatch, useSelector } from "react-redux";
+
+import {
+ selectIsChatActivated,
+ setIsChatActivated,
+} from "@/store/slices/settings";
+
+export const useChatActivated = (): [
+ isChatActivated: boolean,
+ (status: boolean) => void,
+] => {
+ const isChatActivated = useSelector(selectIsChatActivated);
+ const dispatch = useDispatch();
+
+ const handleSet = (status: boolean) => {
+ dispatch(setIsChatActivated(status));
+ };
+
+ return [isChatActivated, handleSet];
+};
diff --git a/packages/hooks/useOnboardStatus.ts b/packages/hooks/useOnboardStatus.ts
new file mode 100644
index 0000000000..06e9a32a22
--- /dev/null
+++ b/packages/hooks/useOnboardStatus.ts
@@ -0,0 +1,24 @@
+import AsyncStorage from "@react-native-async-storage/async-storage";
+import { useEffect, useState } from "react";
+
+import { safeParseJSON } from "@/utils/sanitize";
+
+export function useOnboardedStatus(): [
+ isLoading: boolean,
+ isOnboarded: boolean,
+] {
+ const [isOnboarded, setIsOnboarded] = useState(false);
+ const [isLoading, setIsLoading] = useState(true);
+
+ useEffect(() => {
+ getOnboardedStatus();
+ }, []);
+ const getOnboardedStatus = async () => {
+ const onboarded = await AsyncStorage.getItem("ONBOARDED");
+ const isOnboardedStat = safeParseJSON(onboarded as string) as boolean;
+
+ setIsOnboarded(isOnboardedStat);
+ setIsLoading(false);
+ };
+ return [isLoading, isOnboarded];
+}
diff --git a/packages/networks/teritori-testnet/index.ts b/packages/networks/teritori-testnet/index.ts
index fe93fad3d6..8099aca859 100644
--- a/packages/networks/teritori-testnet/index.ts
+++ b/packages/networks/teritori-testnet/index.ts
@@ -31,7 +31,7 @@ export const teritoriTestnetNetwork: NetworkInfo = {
{
type: NetworkFeature.CosmWasmPremiumFeed,
membershipContractAddress:
- "tori1yek2csaaw550wq52v06ztwp2snuxp8epkfzzvqfvkv8g6xfv3nqqzgz3p9",
+ "tori1quf0cu5tlg54aqjd8z54gpvcnh29n6l8qcqmllgrl4gz6jlyn7tsrjllj8",
mintDenom: "utori",
},
],
diff --git a/packages/screens/DAppStore/query/getFromFile.ts b/packages/screens/DAppStore/query/getFromFile.ts
index cbbb0cf826..f325dc3004 100644
--- a/packages/screens/DAppStore/query/getFromFile.ts
+++ b/packages/screens/DAppStore/query/getFromFile.ts
@@ -63,20 +63,6 @@ export function getAvailableApps(): dAppGroup {
selectedByDefault: true,
alwaysOn: true,
},
- ...(Platform.OS !== "web"
- ? {
- toriwallet: {
- id: "toriwallet",
- title: "Tori Wallet",
- description: "Wallet",
- icon: pathwar,
- route: "NativeWallet",
- groupKey: "teritori-core-apps",
- selectedByDefault: true,
- alwaysOn: false,
- },
- }
- : {}),
launchpad: {
id: "launchpad",
title: "Launchpad",
diff --git a/packages/screens/Marketplace/NFTDetailScreen.tsx b/packages/screens/Marketplace/NFTDetailScreen.tsx
index 289e4fd5f3..173a5023a5 100644
--- a/packages/screens/Marketplace/NFTDetailScreen.tsx
+++ b/packages/screens/Marketplace/NFTDetailScreen.tsx
@@ -228,9 +228,11 @@ const Content: React.FC<{
/>
)}
-
-
-
+ {!isMobile && (
+
+
+
+ )}
{
+ const selectedWallet = useSelectedNativeWallet();
const [phrase, setPhrase] = useState();
- const getPhrase = async () => {
- const _phrase = await getMnemonic();
- setPhrase(_phrase);
- };
-
useEffect(() => {
- getPhrase();
- }, []);
+ (async () => {
+ const _phrase = await getMnemonic(selectedWallet?.index || 0);
+ setPhrase(_phrase);
+ })();
+ }, [selectedWallet?.index]);
return (
= ({
navigation,
+ route,
}) => {
const { width: windowWidth } = useWindowDimensions();
+ const [, handleSet] = useAppMode();
+ const [, handleChatSet] = useChatActivated();
+
const onActivatePress = () => {
navigation.navigate("NativeWallet");
+ handleChatSet(true);
+ handleSet(route.params.appMode);
};
+
const onNotNowPress = () => {
navigation.navigate("NativeWallet");
+ handleSet(route.params.appMode);
};
return (
= ({
navigation,
}) => {
const { width, height } = useWindowDimensions();
+ const [openModal, setModal] = useState(false);
+ const [appMode, setAppMode] = useState("mini");
const [activeIndex, setActiveIndex] = useState(0);
- const onSelectModePress = () => {
- navigation.navigate("ChatActivation");
+
+ const onNotNowPress = async () => {
+ await AsyncStorage.setItem("ONBOARDED", "true");
+ navigation.navigate("ChatActivation", { appMode });
};
return (
@@ -76,17 +86,74 @@ export const ModeSelectionScreen: ScreenFC<"ModeSelection"> = ({
/>
))}
-
+ >
+
+ setModal(true)}
+ width={width / 2 - 16}
+ />
+
+
+ setModal(false)}
+ innerContainerOptions={{ height: "50%" }}
+ >
+
+
+
+
+ Mini Mode
+
+
+ {
+ if (value) {
+ setAppMode("mini");
+ }
+ setAppMode("web3Addict");
+ }}
+ />
+
+
+
+ Disabling this will run your app in web3Addict mode.
+
+
+
+
);
};
diff --git a/packages/screens/Mini/Wallet/DepositTORIScreen.tsx b/packages/screens/Mini/Wallet/DepositTORIScreen.tsx
index 6d4c0b1780..5bd69c2ca7 100644
--- a/packages/screens/Mini/Wallet/DepositTORIScreen.tsx
+++ b/packages/screens/Mini/Wallet/DepositTORIScreen.tsx
@@ -18,6 +18,7 @@ import {
} from "@/utils/style/colors";
import { fontMedium13, fontMedium16 } from "@/utils/style/fonts";
import { layout } from "@/utils/style/layout";
+import { tinyAddress } from "@/utils/text";
import { findByBaseDenom } from "@/utils/wallet/chain-registry";
const QR_SIZE = 248;
@@ -34,13 +35,12 @@ export const DepositTORIScreen: ScreenFC<"MiniDepositTORI"> = ({
const selectedWallet = useSelectedNativeWallet();
- const accountDetails = {
- address: selectedWallet?.address,
- token: denom,
- };
const onCopyPress = async () => {
- await Clipboard.setStringAsync(JSON.stringify(accountDetails));
+ await Clipboard.setStringAsync(selectedWallet?.address || "");
setIsCopied(true);
+ setInterval(() => {
+ navigation.navigate("MiniWallets");
+ }, 2000);
};
const selectedToken = findByBaseDenom(denom)?.assets[0];
@@ -70,7 +70,7 @@ export const DepositTORIScreen: ScreenFC<"MiniDepositTORI"> = ({
borderRadius: layout.borderRadius,
}}
>
-
+
= ({
}}
>
- {accountDetails.address}
+ {/*Other wallets don't show account number*/}
+ {/*Account: {selectedWallet?.index}*/}
- {`( ${accountDetails.token.substring(
- 0,
- 5,
- )}...${accountDetails.token.substring(
- accountDetails.token.length - 4,
- accountDetails.token.length,
- )})`}
+ {tinyAddress(selectedWallet?.address, 30)}
= ({ navigation }) => {
useCheckAppLock();
+
const selectedWallet = useSelectedNativeWallet();
+ if (!selectedWallet) {
+ dispatch(setSelectedNativeWalletIndex(wallets[0].index));
+ }
const balances = useBalances(
selectedWallet?.networkId,
@@ -76,8 +86,8 @@ const TokenScreen: ScreenFC<"MiniWallets"> = ({ navigation }) => {
title="Deposit"
size="medium"
onPress={() =>
- navigation.navigate("MiniSelectToken", {
- navigateTo: "MiniDepositTORI",
+ navigation.navigate("MiniDepositTORI", {
+ denom: "utori",
})
}
/>
diff --git a/packages/screens/UserPublicProfile/UserPublicProfileScreen.tsx b/packages/screens/UserPublicProfile/UserPublicProfileScreen.tsx
index e8d1b37f61..7eb4db5a4c 100644
--- a/packages/screens/UserPublicProfile/UserPublicProfileScreen.tsx
+++ b/packages/screens/UserPublicProfile/UserPublicProfileScreen.tsx
@@ -9,6 +9,7 @@ import { MentionsPostsUPPScreen } from "./tabScreens/MentionsPostsUPPScreen";
import { MusicUPPScreen } from "./tabScreens/MusicUPPScreen";
import { NFTsUPPScreen } from "./tabScreens/NFTsUPPScreen";
import { PostsUPPScreen } from "./tabScreens/PostsUPPScreen";
+import { PremiumContentScreen } from "./tabScreens/PremiumContentScreen";
import { ProposalsUPPScreen } from "./tabScreens/ProposalsUPPScreen";
import { QuestsUPPScreen } from "./tabScreens/QuestsUPPScreen";
import { VideosUPPScreen } from "./tabScreens/VideosUPPScreen";
@@ -90,6 +91,13 @@ export const UserPublicProfileScreen: ScreenFC<"UserPublicProfile"> = ({
screenContainerOtherProps={screenContainerOtherProps}
/>
);
+ case UppTabKeys.premiumSubscribe:
+ return (
+
+ );
case UppTabKeys.mentionsPosts:
return (
();
+ const { setName } = useTNS();
+
+ const onCloseModalHandler = () => {
+ setIsEditProfileModal(false);
+ setName("");
+ };
const items: typeof uppTabItems = Object.entries(uppTabItems).reduce(
(o, [key, item]) => {
@@ -59,6 +68,7 @@ export const UPPHeader = memo(
setIsEditProfileModal(val)}
/>
+
+ {isEditProfileModal ? (
+ onCloseModalHandler()} />
+ ) : null}
>
);
},
diff --git a/packages/screens/UserPublicProfile/components/UPPIntro.tsx b/packages/screens/UserPublicProfile/components/UPPIntro.tsx
index 788282636f..2df92a2dad 100644
--- a/packages/screens/UserPublicProfile/components/UPPIntro.tsx
+++ b/packages/screens/UserPublicProfile/components/UPPIntro.tsx
@@ -1,6 +1,7 @@
import React, { useState } from "react";
import { Linking, useWindowDimensions, View } from "react-native";
+import { PremiumSubscriptionModal } from "./modals/PremiumSubscriptionModal";
import { SubscriptionSetupModal } from "./modals/SubscriptionSetupModal";
import defaultUserProfileBannerPNG from "@/assets/default-images/default-user-profile-banner.png";
@@ -20,9 +21,11 @@ import { SocialButton } from "@/components/buttons/SocialButton";
import { SocialButtonSecondary } from "@/components/buttons/SocialButtonSecondary";
import { ProfileButton } from "@/components/hub/ProfileButton";
import { UserAvatarWithFrame } from "@/components/images/AvatarWithFrame";
+import { usePremiumIsSubscribed } from "@/hooks/feed/usePremiumIsSubscribed";
import { useDeveloperMode } from "@/hooks/useDeveloperMode";
import { useMaxResolution } from "@/hooks/useMaxResolution";
import { useNSUserInfo } from "@/hooks/useNSUserInfo";
+import useSelectedWallet from "@/hooks/useSelectedWallet";
import { accountExplorerLink, parseUserId } from "@/networks";
import { DEFAULT_NAME } from "@/utils/social-feed";
import {
@@ -38,7 +41,9 @@ import { tinyAddress } from "@/utils/text";
export const UPPIntro: React.FC<{
userId: string;
isUserOwner?: boolean;
-}> = ({ userId, isUserOwner }) => {
+ setIsEditProfileModal?: (val: boolean) => void;
+}> = ({ userId, isUserOwner, setIsEditProfileModal = (val) => {} }) => {
+ const selectedWallet = useSelectedWallet();
const { metadata } = useNSUserInfo(userId);
const { copyToClipboard } = useCopyToClipboard();
const socialButtonStyle = { margin: layout.spacing_x0_75 };
@@ -46,10 +51,18 @@ export const UPPIntro: React.FC<{
const { width } = useMaxResolution();
const { width: windowWidth } = useWindowDimensions();
+ const { data: isSubscribed } = usePremiumIsSubscribed(
+ userId,
+ selectedWallet?.userId,
+ );
+
const [developerMode] = useDeveloperMode();
const [subscriptionSetupModalVisible, setSubscriptionSetupModalVisible] =
useState(false);
+ const [premiumSubscriptionModalVisible, setPremiumSubscriptionModalVisible] =
+ useState(false);
+
return (
<>
>
)}
-
+ {
+ setIsEditProfileModal(val);
+ }}
+ />
>
) : (
<>
+ {developerMode && (
+ <>
+ {isSubscribed ? (
+
+ ) : (
+ {
+ if (isUserOwner) {
+ setSubscriptionSetupModalVisible(true);
+ } else {
+ setPremiumSubscriptionModalVisible(true);
+ }
+ }}
+ />
+ )}
+ >
+ )}
+ setPremiumSubscriptionModalVisible(false)}
+ isVisible={premiumSubscriptionModalVisible}
+ userId={userId}
+ />
void;
+}
+
+export const AccordionSelectComponent: FC = ({
+ item,
+ networkId,
+ selectedItem,
+ onItemSelect,
+}) => {
+ const [isOpen, setIsOpen] = useState(false);
+ return (
+
+
+
+
+ {
+ onItemSelect(item);
+ }}
+ >
+
+
+
+
+
+
+ {item?.display_name || "Tier name"}
+
+
+
+
+
+ {prettyPrice(networkId, item?.price.amount, item?.price.denom)}
+
+ {
+ setIsOpen(!isOpen);
+ }}
+ >
+
+
+
+
+ {isOpen && (
+
+ {item?.description}
+
+ )}
+
+
+ );
+};
diff --git a/packages/screens/UserPublicProfile/components/modals/PremiumSubscriptionBottom.tsx b/packages/screens/UserPublicProfile/components/modals/PremiumSubscriptionBottom.tsx
new file mode 100644
index 0000000000..97923bd272
--- /dev/null
+++ b/packages/screens/UserPublicProfile/components/modals/PremiumSubscriptionBottom.tsx
@@ -0,0 +1,152 @@
+import React, { FC } from "react";
+import { View } from "react-native";
+
+import { PrimaryButton } from "../../../../components/buttons/PrimaryButton";
+import { layout } from "../../../../utils/style/layout";
+
+import { BrandText } from "@/components/BrandText";
+import { CurrencyIcon } from "@/components/CurrencyIcon";
+import { PrimaryBox } from "@/components/boxes/PrimaryBox";
+import { Separator } from "@/components/separators/Separator";
+import { SpacerColumn } from "@/components/spacer";
+import { MembershipConfig } from "@/contracts-clients/cw721-membership";
+import { useBalances } from "@/hooks/useBalances";
+import useSelectedWallet from "@/hooks/useSelectedWallet";
+import { getNativeCurrency } from "@/networks";
+import { prettyPrice } from "@/utils/coins";
+import { neutral33, neutral77, secondaryColor } from "@/utils/style/colors";
+import {
+ fontMedium14,
+ fontSemibold14,
+ fontSemibold20,
+} from "@/utils/style/fonts";
+
+export const PremiumSubscriptionBottom: FC<{
+ networkId: string;
+ item: MembershipConfig | undefined;
+ onSubscribe: () => Promise | void;
+}> = ({ networkId, item, onSubscribe }) => {
+ const selectedWallet = useSelectedWallet();
+ const balances = useBalances(networkId, selectedWallet?.address);
+
+ const mintDenom = item?.price.denom;
+
+ const nativeCurrency = getNativeCurrency(networkId, mintDenom);
+ const currencyBalance = balances.find((bal) => bal.denom === mintDenom);
+
+ return (
+
+
+
+
+
+
+ Subscription price:
+
+
+
+
+
+ {prettyPrice(networkId, item?.price.amount, item?.price.denom)}
+
+
+
+
+
+
+ Pay by:
+
+
+
+
+
+ {nativeCurrency?.displayName}
+
+
+
+
+
+
+ Balance:{" "}
+
+ {prettyPrice(
+ networkId,
+ currencyBalance?.amount || "0",
+ mintDenom,
+ )}
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/packages/screens/UserPublicProfile/components/modals/PremiumSubscriptionModal.tsx b/packages/screens/UserPublicProfile/components/modals/PremiumSubscriptionModal.tsx
new file mode 100644
index 0000000000..134cdf68d3
--- /dev/null
+++ b/packages/screens/UserPublicProfile/components/modals/PremiumSubscriptionModal.tsx
@@ -0,0 +1,133 @@
+import React, { useState } from "react";
+import { View } from "react-native";
+
+import { AccordionSelectComponent } from "./AccordionSelectComponent";
+import { PremiumSubscriptionBottom } from "./PremiumSubscriptionBottom";
+
+import { BrandText } from "@/components/BrandText";
+import { PrimaryBox } from "@/components/boxes/PrimaryBox";
+import { RoundedGradientImage } from "@/components/images/RoundedGradientImage";
+import ModalBase from "@/components/modals/ModalBase";
+import { SpacerColumn } from "@/components/spacer";
+import { useFeedbacks } from "@/context/FeedbacksProvider";
+import { usePremiumChannel } from "@/hooks/feed/usePremiumChannel";
+import { useNSUserInfo } from "@/hooks/useNSUserInfo";
+import useSelectedWallet from "@/hooks/useSelectedWallet";
+import { parseUserId } from "@/networks";
+import { mustGetCw721MembershipSigningClient } from "@/utils/feed/client";
+import { DEFAULT_NAME } from "@/utils/social-feed";
+import { neutral55, neutral77 } from "@/utils/style/colors";
+import { fontBold16, fontMedium14, fontSemibold16 } from "@/utils/style/fonts";
+import { layout } from "@/utils/style/layout";
+
+export const PremiumSubscriptionModal: React.FC<{
+ onClose: () => void;
+ isVisible: boolean;
+ userId: string;
+}> = ({ onClose, isVisible, userId }) => {
+ const { metadata } = useNSUserInfo(userId);
+ const [network, channelAddress] = parseUserId(userId);
+ const { data: channel } = usePremiumChannel(network?.id, channelAddress);
+ const selectedWallet = useSelectedWallet();
+ const { wrapWithFeedback } = useFeedbacks();
+
+ const [selectedItemIndex, setSelectedItemIndex] = useState(0);
+ const selectedItem = channel?.memberships_config[selectedItemIndex];
+
+ if (!network?.id || channel === undefined || !network) {
+ return null;
+ }
+
+ return (
+ {
+ try {
+ if (!selectedItem) {
+ throw new Error("No item selected");
+ }
+ if (!selectedWallet) {
+ throw new Error("No wallet selected");
+ }
+ const client = await mustGetCw721MembershipSigningClient(
+ selectedWallet.userId,
+ );
+ await client.subscribe(
+ {
+ channelAddr: channelAddress,
+ membershipKind: selectedItemIndex,
+ recipientAddr: selectedWallet.address,
+ },
+ undefined,
+ undefined,
+ [
+ {
+ amount: selectedItem.price.amount,
+ denom: selectedItem.price.denom,
+ },
+ ],
+ );
+ } finally {
+ onClose();
+ }
+ })}
+ />
+ }
+ >
+
+
+
+ You're going to subscribe to
+
+
+
+
+
+
+
+ {metadata?.tokenId ? metadata?.public_name : DEFAULT_NAME}
+
+
+ @{metadata?.tokenId ? metadata.tokenId : channelAddress}
+
+
+
+
+ {channel?.memberships_config?.map((memberships, index) => {
+ return (
+ {
+ setSelectedItemIndex(index);
+ }}
+ />
+ );
+ })}
+
+
+ );
+};
diff --git a/packages/screens/UserPublicProfile/components/modals/SubscriptionSetupModal.tsx b/packages/screens/UserPublicProfile/components/modals/SubscriptionSetupModal.tsx
index e44ac5b7ff..3eae5d4f2c 100644
--- a/packages/screens/UserPublicProfile/components/modals/SubscriptionSetupModal.tsx
+++ b/packages/screens/UserPublicProfile/components/modals/SubscriptionSetupModal.tsx
@@ -18,19 +18,14 @@ import { SpacerRow } from "@/components/spacer";
import { useFeedbacks } from "@/context/FeedbacksProvider";
import {
ChannelResponse,
- Cw721MembershipClient,
MembershipConfig,
} from "@/contracts-clients/cw721-membership";
import { usePremiumChannel } from "@/hooks/feed/usePremiumChannel";
import useSelectedWallet from "@/hooks/useSelectedWallet";
-import {
- getKeplrSigningCosmWasmClient,
- getNativeCurrency,
- getNetworkFeature,
- parseUserId,
-} from "@/networks";
+import { getNativeCurrency, getNetworkFeature, parseUserId } from "@/networks";
import { NetworkFeature } from "@/networks/features";
import { bigDaySeconds } from "@/utils/big-time";
+import { mustGetCw721MembershipSigningClient } from "@/utils/feed/client";
import { mapTierToFormElement } from "@/utils/feed/premium";
import {
neutral22,
@@ -301,25 +296,13 @@ const SubscriptionSetupForm: React.FC<{
if (!chainTiers) {
throw new Error("Invalid tiers");
}
- const sender = selectedWallet?.address;
- if (!sender) {
+ if (!selectedWallet) {
throw new Error("No wallet selected");
}
- const premiumFeedFeature = getNetworkFeature(
- networkId,
- NetworkFeature.CosmWasmPremiumFeed,
- );
- if (!premiumFeedFeature) {
- throw new Error("This network does not support premium feed");
- }
- const cosmWasmClient =
- await getKeplrSigningCosmWasmClient(networkId);
- const client = new Cw721MembershipClient(
- cosmWasmClient,
- sender,
- premiumFeedFeature.membershipContractAddress,
- );
+ const client = await mustGetCw721MembershipSigningClient(
+ selectedWallet.userId,
+ );
await client.upsertChannel({
membershipsConfig: chainTiers,
});
diff --git a/packages/screens/UserPublicProfile/tabScreens/PremiumContentScreen.tsx b/packages/screens/UserPublicProfile/tabScreens/PremiumContentScreen.tsx
new file mode 100644
index 0000000000..eb07b8ce9f
--- /dev/null
+++ b/packages/screens/UserPublicProfile/tabScreens/PremiumContentScreen.tsx
@@ -0,0 +1,85 @@
+import React, { FC, useState } from "react";
+import { View } from "react-native";
+
+import handSVG from "../../../../assets/icons/hand.svg";
+import { ScreenContainer } from "../../../components/ScreenContainer";
+import { UppTabKeys } from "../../../utils/upp";
+import { UppTabScreenProps } from "../UserPublicProfileScreen";
+import { UPPHeader } from "../components/UPPHeader";
+import { UPPScreenContentWrapper } from "../components/UPPScreenContentWrapper";
+import { PremiumSubscriptionModal } from "../components/modals/PremiumSubscriptionModal";
+
+import { BrandText } from "@/components/BrandText";
+import { SVG } from "@/components/SVG";
+import { PrimaryBox } from "@/components/boxes/PrimaryBox";
+import { SecondaryButton } from "@/components/buttons/SecondaryButton";
+import { SpacerColumn } from "@/components/spacer";
+import { neutral33, neutralA3, secondaryColor } from "@/utils/style/colors";
+import { fontSemibold13, fontSemibold16 } from "@/utils/style/fonts";
+
+export const PremiumContentScreen: FC = ({
+ userId,
+ screenContainerOtherProps,
+}) => {
+ const [premiumSubscriptionModalVisible, setPremiumSubscriptionModalVisible] =
+ useState(false);
+ return (
+
+
+
+
+
+
+
+
+
+
+ No access
+
+
+
+
+ This zone is restricted to Subscribers, to join click below
+
+
+
+ {
+ setPremiumSubscriptionModalVisible(true);
+ }}
+ />
+
+
+ setPremiumSubscriptionModalVisible(false)}
+ isVisible={premiumSubscriptionModalVisible}
+ userId={userId}
+ />
+
+
+ );
+};
diff --git a/packages/screens/Wallet/Screens/ViewSeed.tsx b/packages/screens/Wallet/Screens/ViewSeed.tsx
deleted file mode 100644
index 141a0f1e95..0000000000
--- a/packages/screens/Wallet/Screens/ViewSeed.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-/* eslint-disable */
-import {useFeedbacks} from "@/context/FeedbacksProvider";
-import {getValueFor} from "@/hooks/useMobileSecureStore";
-import {ScreenFC} from "@/utils/navigation";
-import {setMnemonic} from "@/hooks/wallet/getNativeWallet";
-import {createMnemonic} from "@/utils/wallet/seed";
-
-export const ViewSeed: ScreenFC<"ViewSeed"> = () => {
- const { wrapWithFeedback } = useFeedbacks();
-
- const createWallet = async () => {
- const fromStorage = await getValueFor("mnemonic");
- let mnemonic = "";
- if (fromStorage) {
- mnemonic = fromStorage;
- } else {
- mnemonic = createMnemonic();
- await setMnemonic(mnemonic);
- }
- };
-
- return null;
-};
diff --git a/packages/scripts/app-build/bumpBuildNumber.ts b/packages/scripts/app-build/bumpBuildNumber.ts
index 2cde0ef4a2..33e5cef210 100644
--- a/packages/scripts/app-build/bumpBuildNumber.ts
+++ b/packages/scripts/app-build/bumpBuildNumber.ts
@@ -1,16 +1,19 @@
import fs from "fs";
const FILE_PATH = "./app.config.js";
-const buildNumber = process.argv[2];
+const incrementalNumber = process.argv[2];
fs.readFile(FILE_PATH, "utf8", (err, data) => {
if (err) {
console.error("Error reading app.config.js", err);
process.exit(1);
}
- const regex = /buildNumber: "(\d+)"/;
+ const regexBuildNumber = /buildNumber: "(\d+)"/;
+ const regexVersionCode = /versionCode: "(\d+)"/;
- const updatedData = data.replace(regex, 'buildNumber: "' + buildNumber + '"');
+ const updatedData = data
+ .replace(regexBuildNumber, 'buildNumber: "' + incrementalNumber + '"')
+ .replace(regexVersionCode, 'versionCode: "' + incrementalNumber + '"');
fs.writeFile(FILE_PATH, updatedData, "utf8", (err) => {
if (err) {
diff --git a/packages/store/slices/settings.ts b/packages/store/slices/settings.ts
index 33fc37d370..110ae3eedf 100644
--- a/packages/store/slices/settings.ts
+++ b/packages/store/slices/settings.ts
@@ -32,6 +32,7 @@ const multisigTokensSelectors = multisigTokensAdapter.getSelectors();
interface Settings {
appMode: AppMode;
+ isChatActivated: boolean;
selectedNetworkId: string;
selectedWalletId: string | undefined;
NFTStorageAPI: string;
@@ -51,6 +52,7 @@ interface Settings {
const initialState: Settings = {
appMode: Platform.OS === "web" ? "normal" : "mini",
+ isChatActivated: false,
selectedWalletId: "",
selectedNetworkId: "",
NFTStorageAPI: process.env.NFT_STORAGE_API || "",
@@ -76,6 +78,9 @@ const initialState: Settings = {
export const selectAppMode = (state: RootState) => state.settings.appMode;
+export const selectIsChatActivated = (state: RootState) =>
+ state.settings.isChatActivated;
+
export const selectSelectedNetworkId = (state: RootState) =>
state.settings.selectedNetworkId;
@@ -239,6 +244,9 @@ const settingsSlice = createSlice({
setAppMode: (state, action: PayloadAction) => {
state.appMode = action.payload;
},
+ setIsChatActivated: (state, action: PayloadAction) => {
+ state.isChatActivated = action.payload;
+ },
setDeveloperMode: (state, action: PayloadAction) => {
state.developerMode = action.payload;
},
@@ -279,6 +287,7 @@ export const {
toggleNetwork,
setIsLightTheme,
setAppMode,
+ setIsChatActivated,
setDeveloperMode,
} = settingsSlice.actions;
diff --git a/packages/utils/feed/client.ts b/packages/utils/feed/client.ts
new file mode 100644
index 0000000000..08d34b01f3
--- /dev/null
+++ b/packages/utils/feed/client.ts
@@ -0,0 +1,49 @@
+import {
+ Cw721MembershipClient,
+ Cw721MembershipQueryClient,
+} from "@/contracts-clients/cw721-membership";
+import {
+ NetworkFeature,
+ getKeplrSigningCosmWasmClient,
+ getNetworkFeature,
+ mustGetNonSigningCosmWasmClient,
+ parseUserId,
+} from "@/networks";
+
+export const mustGetCw721MembershipQueryClient = async (networkId: string) => {
+ const pmFeature = getNetworkFeature(
+ networkId,
+ NetworkFeature.CosmWasmPremiumFeed,
+ );
+ if (!pmFeature) {
+ throw new Error(`Network ${networkId} does not support premium feed`);
+ }
+ const client = await mustGetNonSigningCosmWasmClient(networkId);
+ const pmClient = new Cw721MembershipQueryClient(
+ client,
+ pmFeature.membershipContractAddress,
+ );
+ return pmClient;
+};
+
+export const mustGetCw721MembershipSigningClient = async (userId: string) => {
+ const [network, callerAddress] = parseUserId(userId);
+ if (!network || !callerAddress) {
+ throw new Error(`Invalid user id ${userId}`);
+ }
+ const networkId = network.id;
+ const pmFeature = getNetworkFeature(
+ networkId,
+ NetworkFeature.CosmWasmPremiumFeed,
+ );
+ if (!pmFeature) {
+ throw new Error(`Network ${networkId} does not support premium feed`);
+ }
+ const client = await getKeplrSigningCosmWasmClient(networkId);
+ const pmClient = new Cw721MembershipClient(
+ client,
+ callerAddress,
+ pmFeature.membershipContractAddress,
+ );
+ return pmClient;
+};
diff --git a/packages/utils/navigation.ts b/packages/utils/navigation.ts
index 727b9ed6bd..b8449fe405 100644
--- a/packages/utils/navigation.ts
+++ b/packages/utils/navigation.ts
@@ -3,6 +3,7 @@ import { NativeStackNavigationProp } from "@react-navigation/native-stack";
import React from "react";
import { feedsTabItems } from "./social-feed";
+import { AppMode } from "./types/app-mode";
import { NewPostFormValues } from "./types/feed";
import { Conversation, MessageFriendsTabItem } from "./types/message";
import { uppTabItems } from "./upp";
@@ -128,7 +129,7 @@ export type RootStackParamList = {
MiniSelectToken: { navigateTo: RouteName };
MiniDepositTORI: { back?: RouteName; denom: string };
ModeSelection: undefined;
- ChatActivation: undefined;
+ ChatActivation: { appMode: AppMode };
MiniSendTori: { back?: RouteName; denom: string };
MiniSendingTori: {
back?: RouteName;
diff --git a/packages/utils/style/colors.ts b/packages/utils/style/colors.ts
index 5e77a872e8..cb2a1c74fc 100644
--- a/packages/utils/style/colors.ts
+++ b/packages/utils/style/colors.ts
@@ -6,6 +6,7 @@ export const successColor = "#C8FFAE";
export const errorColor = "#F46F76";
export const yellowDefault = "#FFE768";
+export const yellowPremium = "#F5C900";
export const pinkDefault = "#F46FBF";
export const purpleDark = "#5C26F5";
export const purpleDefault = "#9058EC";
diff --git a/packages/utils/upp.ts b/packages/utils/upp.ts
index dbfbdcbedd..edba70fbe5 100644
--- a/packages/utils/upp.ts
+++ b/packages/utils/upp.ts
@@ -3,6 +3,7 @@ import { TabDefinition } from "@/utils/types/tabs";
export enum UppTabKeys {
posts = "",
+ premiumSubscribe = "premium-content",
nfts = "nfts",
quests = "quests",
mentionsPosts = "mentions-posts",
@@ -20,6 +21,10 @@ export const uppTabItems: { [key: string]: TabDefinition } = {
name: "Posts",
networkFeatures: [NetworkFeature.SocialFeed],
},
+ [UppTabKeys.premiumSubscribe]: {
+ name: "Premium Content",
+ networkFeatures: [NetworkFeature.SocialFeed],
+ },
[UppTabKeys.nfts]: {
name: "NFTs",
networkFeatures: [NetworkFeature.NFTMarketplace],
diff --git a/yarn.lock b/yarn.lock
index ab1902c626..462579d951 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -19149,7 +19149,7 @@ __metadata:
ts-proto: ^1.120.0
ts-unused-exports: ^10.0.1
tsx: ^4.7.0
- typescript: ^5.2.2
+ typescript: ^5.3.0
uuid: ^9.0.0
victory: ^36.6.12
victory-native: ^36.6.8
@@ -19601,7 +19601,7 @@ __metadata:
languageName: node
linkType: hard
-"typescript@npm:^5.2.2":
+"typescript@npm:^5.3.0":
version: 5.3.3
resolution: "typescript@npm:5.3.3"
bin:
@@ -19621,7 +19621,7 @@ __metadata:
languageName: node
linkType: hard
-"typescript@patch:typescript@^5.2.2#~builtin":
+"typescript@patch:typescript@^5.3.0#~builtin":
version: 5.3.3
resolution: "typescript@patch:typescript@npm%3A5.3.3#~builtin::version=5.3.3&hash=85af82"
bin: