diff --git a/.eslintrc.js b/.eslintrc.js
index 118bd9c63c..b1effde04f 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -46,6 +46,7 @@ module.exports = {
"error",
{ "ts-expect-error": "allow-with-description" },
],
+ "no-fallthrough": "error",
"no-restricted-syntax": [
"error",
{
diff --git a/.gitignore b/.gitignore
index 4a858ff704..c9b2e3c887 100644
--- a/.gitignore
+++ b/.gitignore
@@ -107,4 +107,8 @@ artifacts
rust/cw-contracts/*/target
# cypress
-cypress/screenshots
\ No newline at end of file
+cypress/screenshots
+
+# multi-app
+/app-selector.js
+/app.config.js
diff --git a/.gnoversion b/.gnoversion
index ddef93042d..af62af00c7 100644
--- a/.gnoversion
+++ b/.gnoversion
@@ -1 +1 @@
-9786fa366f922f04e1251ec6f1df6423b4fd2bf4
+c8cd8f4b6ccbe9f4ee5622032228553496186d51
diff --git a/Cargo.lock b/Cargo.lock
index bb2df7da98..433b78dcc1 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -80,6 +80,12 @@ version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56953345e39537a3e18bdaeba4cb0c58a78c1f61f361dc0fa7c5c7340ae87c5f"
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
[[package]]
name = "byteorder"
version = "1.5.0"
@@ -820,8 +826,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
dependencies = [
"cfg-if",
+ "js-sys",
"libc",
"wasi",
+ "wasm-bindgen",
]
[[package]]
@@ -916,6 +924,15 @@ version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
+[[package]]
+name = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
[[package]]
name = "k256"
version = "0.11.6"
@@ -984,6 +1001,12 @@ version = "0.2.159"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5"
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
[[package]]
name = "memchr"
version = "2.7.4"
@@ -1195,6 +1218,21 @@ dependencies = [
"proc-macro2",
]
+[[package]]
+name = "rakki"
+version = "0.1.0"
+dependencies = [
+ "cosmwasm-schema",
+ "cosmwasm-std",
+ "cw-storage-plus 1.2.0",
+ "getrandom",
+ "schemars",
+ "serde",
+ "sha3",
+ "sylvia 0.9.3",
+ "thiserror",
+]
+
[[package]]
name = "rand_core"
version = "0.5.1"
@@ -1630,6 +1668,60 @@ version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.77",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.77",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
[[package]]
name = "winnow"
version = "0.5.40"
diff --git a/app-selector.js b/app-selector.js
new file mode 100644
index 0000000000..4e3081fb3e
--- /dev/null
+++ b/app-selector.js
@@ -0,0 +1 @@
+require("./apps/teritori/index");
diff --git a/app.config.js b/app.config.js
index 4c15a00f6d..f16da0f3e5 100644
--- a/app.config.js
+++ b/app.config.js
@@ -1,79 +1 @@
-const config = {
- expo: {
- name: "Teritori",
- slug: "teritori",
- version: "1.0.3",
- orientation: "portrait",
- icon: "./assets/app-icon.png",
- owner: "teritori",
- userInterfaceStyle: "light",
- splash: {
- image: "./assets/splash.png",
- resizeMode: "contain",
- backgroundColor: "#000000",
- },
- updates: {
- fallbackToCacheTimeout: 0,
- },
- assetBundlePatterns: ["**/*"],
- ios: {
- supportsTablet: true,
- bundleIdentifier: "com.teritori",
- buildNumber: "5",
- infoPlist: {
- NSBluetoothAlwaysUsageDescription: "Used for Bluetooth communications",
- NSBluetoothPeripheralUsageDescription:
- "Used for Bluetooth communications",
- NSPhotoLibraryUsageDescription:
- "Access to your photo library is required for image upload functionality.",
- ITSAppUsesNonExemptEncryption: false,
- UIBackgroundModes: ["audio"],
- },
- },
- android: {
- package: "com.teritori",
- versionCode: "6",
- permissions: [
- "WAKE_LOCK",
- "BLUETOOTH",
- "BLUETOOTH_ADMIN",
- "BLUETOOTH_ADVERTISE",
- "BLUETOOTH_SCAN",
- "BLUETOOTH_CONNECT",
- "ACCESS_NETWORK_STATE",
- "CHANGE_NETWORK_STATE",
- "CHANGE_WIFI_STATE",
- "ACCESS_WIFI_STATE",
- "CHANGE_WIFI_MULTICAST_STATE",
- "NFC",
- ],
- },
- web: {
- bundler: "metro",
- favicon: "./assets/favicon.png",
- },
- extra: {
- eas: {
- projectId: "9ce165de-0199-478c-b3bd-8688e5ce03eb",
- },
- },
- plugins: [
- "expo-font",
- [
- "expo-document-picker",
- {
- iCloudContainerEnvironment: "Production",
- },
- ],
- [
- "react-native-vision-camera",
- {
- cameraPermissionText: "$(PRODUCT_NAME) needs access to your Camera.",
- enableCodeScanner: true,
- },
- ],
- ],
- },
-};
-
-export default config;
+module.exports = require("./apps/teritori/app.config.js");
diff --git a/apps/gno-dapp/App.tsx b/apps/gnotribe/App.tsx
similarity index 80%
rename from apps/gno-dapp/App.tsx
rename to apps/gnotribe/App.tsx
index dc629459ca..e8a2b74a52 100644
--- a/apps/gno-dapp/App.tsx
+++ b/apps/gnotribe/App.tsx
@@ -1,3 +1,4 @@
+import logo from "@/assets/logos/gnotribe-toplogo.svg";
import { AppConfig } from "@/context/AppConfigProvider";
import AppRoot from "@/dapp-root/App";
@@ -8,6 +9,8 @@ const config: AppConfig = {
forceDAppsList: ["feed", "organizations"],
defaultNetworkId: "gno-test5",
homeScreen: "Feed",
+ browserTabsPrefix: "Gnotribe - ",
+ logo,
};
export const App: React.FC = () => {
diff --git a/apps/gnotribe/app.config.js b/apps/gnotribe/app.config.js
new file mode 100644
index 0000000000..1fe0ed14b7
--- /dev/null
+++ b/apps/gnotribe/app.config.js
@@ -0,0 +1,77 @@
+module.exports = {
+ expo: {
+ name: "Gnotribe",
+ slug: "gnotribe",
+ version: "1.0.3",
+ orientation: "portrait",
+ icon: "./apps/gnotribe/icon.png",
+ owner: "gnotribe",
+ userInterfaceStyle: "light",
+ splash: {
+ image: "./assets/splash.png",
+ resizeMode: "contain",
+ backgroundColor: "#000000",
+ },
+ updates: {
+ fallbackToCacheTimeout: 0,
+ },
+ assetBundlePatterns: ["**/*"],
+ ios: {
+ supportsTablet: true,
+ bundleIdentifier: "com.teritori.gnotribe",
+ buildNumber: "5",
+ infoPlist: {
+ NSBluetoothAlwaysUsageDescription: "Used for Bluetooth communications",
+ NSBluetoothPeripheralUsageDescription:
+ "Used for Bluetooth communications",
+ NSPhotoLibraryUsageDescription:
+ "Access to your photo library is required for image upload functionality.",
+ ITSAppUsesNonExemptEncryption: false,
+ UIBackgroundModes: ["audio"],
+ },
+ },
+ android: {
+ package: "com.teritori.gnotribe",
+ versionCode: 6,
+ permissions: [
+ "WAKE_LOCK",
+ "BLUETOOTH",
+ "BLUETOOTH_ADMIN",
+ "BLUETOOTH_ADVERTISE",
+ "BLUETOOTH_SCAN",
+ "BLUETOOTH_CONNECT",
+ "ACCESS_NETWORK_STATE",
+ "CHANGE_NETWORK_STATE",
+ "CHANGE_WIFI_STATE",
+ "ACCESS_WIFI_STATE",
+ "CHANGE_WIFI_MULTICAST_STATE",
+ "NFC",
+ ],
+ },
+ web: {
+ bundler: "metro",
+ favicon: "./apps/gnotribe/icon.png",
+ },
+ extra: {
+ eas: {
+ projectId: "9ce165de-0199-478c-b3bd-8688e5ce03eb",
+ },
+ },
+ plugins: [
+ "expo-font",
+ [
+ "expo-document-picker",
+ {
+ iCloudContainerEnvironment: "Production",
+ },
+ ],
+ [
+ "react-native-vision-camera",
+ {
+ cameraPermissionText: "$(PRODUCT_NAME) needs access to your Camera.",
+ enableCodeScanner: true,
+ },
+ ],
+ ],
+ },
+};
diff --git a/apps/gnotribe/icon.png b/apps/gnotribe/icon.png
new file mode 100644
index 0000000000..315ce7a7ed
Binary files /dev/null and b/apps/gnotribe/icon.png differ
diff --git a/apps/gno-dapp/index.js b/apps/gnotribe/index.js
similarity index 100%
rename from apps/gno-dapp/index.js
rename to apps/gnotribe/index.js
diff --git a/apps/teritori-dapp/netlify.toml b/apps/gnotribe/netlify.toml
similarity index 53%
rename from apps/teritori-dapp/netlify.toml
rename to apps/gnotribe/netlify.toml
index 3ad63160b1..06ee85e43a 100644
--- a/apps/teritori-dapp/netlify.toml
+++ b/apps/gnotribe/netlify.toml
@@ -1,5 +1,5 @@
[build]
-command = 'npm i -g sharp-cli && npx expo-optimize && npx expo export -p web'
+command = 'npx tsx packages/scripts/switch-app gnotribe && npm i -g sharp-cli && npx expo-optimize && npx expo export -p web'
publish = '/dist'
[build.environment]
NODE_OPTIONS = "--max_old_space_size=4096"
diff --git a/apps/teritori-dapp/App.tsx b/apps/teritori/App.tsx
similarity index 87%
rename from apps/teritori-dapp/App.tsx
rename to apps/teritori/App.tsx
index 15ddac3f08..24e876d9c4 100644
--- a/apps/teritori-dapp/App.tsx
+++ b/apps/teritori/App.tsx
@@ -4,6 +4,7 @@ import AppRoot from "@/dapp-root/App";
const config: AppConfig = {
defaultNetworkId: "teritori",
homeScreen: "Home",
+ browserTabsPrefix: "Teritori - ",
};
export const App: React.FC = () => {
diff --git a/apps/teritori/app.config.js b/apps/teritori/app.config.js
new file mode 100644
index 0000000000..6538d9dc85
--- /dev/null
+++ b/apps/teritori/app.config.js
@@ -0,0 +1,77 @@
+module.exports = {
+ expo: {
+ name: "Teritori",
+ slug: "teritori",
+ version: "1.0.3",
+ orientation: "portrait",
+ icon: "./assets/app-icon.png",
+ owner: "teritori",
+ userInterfaceStyle: "light",
+ splash: {
+ image: "./assets/splash.png",
+ resizeMode: "contain",
+ backgroundColor: "#000000",
+ },
+ updates: {
+ fallbackToCacheTimeout: 0,
+ },
+ assetBundlePatterns: ["**/*"],
+ ios: {
+ supportsTablet: true,
+ bundleIdentifier: "com.teritori",
+ buildNumber: "5",
+ infoPlist: {
+ NSBluetoothAlwaysUsageDescription: "Used for Bluetooth communications",
+ NSBluetoothPeripheralUsageDescription:
+ "Used for Bluetooth communications",
+ NSPhotoLibraryUsageDescription:
+ "Access to your photo library is required for image upload functionality.",
+ ITSAppUsesNonExemptEncryption: false,
+ UIBackgroundModes: ["audio"],
+ },
+ },
+ android: {
+ package: "com.teritori",
+ versionCode: 6,
+ permissions: [
+ "WAKE_LOCK",
+ "BLUETOOTH",
+ "BLUETOOTH_ADMIN",
+ "BLUETOOTH_ADVERTISE",
+ "BLUETOOTH_SCAN",
+ "BLUETOOTH_CONNECT",
+ "ACCESS_NETWORK_STATE",
+ "CHANGE_NETWORK_STATE",
+ "CHANGE_WIFI_STATE",
+ "ACCESS_WIFI_STATE",
+ "CHANGE_WIFI_MULTICAST_STATE",
+ "NFC",
+ ],
+ },
+ web: {
+ bundler: "metro",
+ favicon: "./assets/favicon.png",
+ },
+ extra: {
+ eas: {
+ projectId: "9ce165de-0199-478c-b3bd-8688e5ce03eb",
+ },
+ },
+ plugins: [
+ "expo-font",
+ [
+ "expo-document-picker",
+ {
+ iCloudContainerEnvironment: "Production",
+ },
+ ],
+ [
+ "react-native-vision-camera",
+ {
+ cameraPermissionText: "$(PRODUCT_NAME) needs access to your Camera.",
+ enableCodeScanner: true,
+ },
+ ],
+ ],
+ },
+};
diff --git a/apps/teritori-dapp/index.js b/apps/teritori/index.js
similarity index 100%
rename from apps/teritori-dapp/index.js
rename to apps/teritori/index.js
diff --git a/apps/gno-dapp/netlify.toml b/apps/teritori/netlify.toml
similarity index 53%
rename from apps/gno-dapp/netlify.toml
rename to apps/teritori/netlify.toml
index 1736587b69..275f2cd157 100644
--- a/apps/gno-dapp/netlify.toml
+++ b/apps/teritori/netlify.toml
@@ -1,5 +1,5 @@
[build]
-command = 'sed -i "s/teritori-dapp/gno-dapp/" package.json && npm i -g sharp-cli && npx expo-optimize && npx expo export -p web'
+command = 'npx tsx packages/scripts/switch-app teritori && npm i -g sharp-cli && npx expo-optimize && npx expo export -p web'
publish = '/dist'
[build.environment]
NODE_OPTIONS = "--max_old_space_size=4096"
diff --git a/assets/icons/eye.svg b/assets/icons/eye.svg
new file mode 100644
index 0000000000..6afc7667c6
--- /dev/null
+++ b/assets/icons/eye.svg
@@ -0,0 +1,5 @@
+
diff --git a/assets/icons/rakki-ticket.svg b/assets/icons/rakki-ticket.svg
new file mode 100644
index 0000000000..2f0c53237a
--- /dev/null
+++ b/assets/icons/rakki-ticket.svg
@@ -0,0 +1,11 @@
+
diff --git a/assets/icons/splitted-square.svg b/assets/icons/splitted-square.svg
new file mode 100644
index 0000000000..6634f661d9
--- /dev/null
+++ b/assets/icons/splitted-square.svg
@@ -0,0 +1,7 @@
+
diff --git a/assets/icons/ticket.svg b/assets/icons/ticket.svg
new file mode 100644
index 0000000000..f95928c5c4
--- /dev/null
+++ b/assets/icons/ticket.svg
@@ -0,0 +1,9 @@
+
diff --git a/assets/logos/gnotribe-logo.svg b/assets/logos/gnotribe-logo.svg
new file mode 100644
index 0000000000..55844c121e
--- /dev/null
+++ b/assets/logos/gnotribe-logo.svg
@@ -0,0 +1,83 @@
+
diff --git a/assets/logos/gnotribe-toplogo.svg b/assets/logos/gnotribe-toplogo.svg
new file mode 100644
index 0000000000..acc8742ae4
--- /dev/null
+++ b/assets/logos/gnotribe-toplogo.svg
@@ -0,0 +1,470 @@
+
\ No newline at end of file
diff --git a/assets/logos/rakki-ticket.png b/assets/logos/rakki-ticket.png
new file mode 100644
index 0000000000..498e7e67dd
Binary files /dev/null and b/assets/logos/rakki-ticket.png differ
diff --git a/assets/sidebar/side-notch.svg b/assets/sidebar/side-notch.svg
index f1143114be..e4a88d9fc8 100644
--- a/assets/sidebar/side-notch.svg
+++ b/assets/sidebar/side-notch.svg
@@ -1,8 +1,8 @@