Radish alpha
r
Radicle web interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
Remove SIWE functionality
Rūdolfs Ošiņš committed 3 years ago
commit 9e71823a99117609a3bd2d7ce7a46883b7996c36
parent df680677b58602a8d24475cd1798bfe1a00ac08f
11 files changed +30 -437
modified package-lock.json
@@ -23,7 +23,6 @@
        "md5": "^2.3.0",
        "plausible-tracker": "^0.3.8",
        "pure-svg-code": "^1.0.6",
-
        "siwe": "^2.0.5",
        "svelte": "^3.54.0",
        "twemoji": "^14.0.2",
        "util": "^0.12.5"
@@ -1278,46 +1277,6 @@
        "@sinonjs/commons": "^2.0.0"
      }
    },
-
    "node_modules/@spruceid/siwe-parser": {
-
      "version": "2.0.0",
-
      "resolved": "https://registry.npmjs.org/@spruceid/siwe-parser/-/siwe-parser-2.0.0.tgz",
-
      "integrity": "sha512-zXlPBRKaT9ecxhhLQqn/StAWlXvQBlFDFnIAlM7ceMVx/1NVZZ65GdW9A28tYGbhpesYxNYpsqegGsBcrWuASg==",
-
      "dependencies": {
-
        "apg-js": "^4.1.1",
-
        "uri-js": "^4.4.1",
-
        "valid-url": "^1.0.9"
-
      },
-
      "peerDependencies": {
-
        "keccak": "^3.0.2"
-
      }
-
    },
-
    "node_modules/@stablelib/binary": {
-
      "version": "1.0.1",
-
      "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz",
-
      "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==",
-
      "dependencies": {
-
        "@stablelib/int": "^1.0.1"
-
      }
-
    },
-
    "node_modules/@stablelib/int": {
-
      "version": "1.0.1",
-
      "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz",
-
      "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w=="
-
    },
-
    "node_modules/@stablelib/random": {
-
      "version": "1.0.2",
-
      "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz",
-
      "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==",
-
      "dependencies": {
-
        "@stablelib/binary": "^1.0.1",
-
        "@stablelib/wipe": "^1.0.1"
-
      }
-
    },
-
    "node_modules/@stablelib/wipe": {
-
      "version": "1.0.1",
-
      "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz",
-
      "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg=="
-
    },
    "node_modules/@stardazed/streams": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/@stardazed/streams/-/streams-3.1.0.tgz",
@@ -2151,11 +2110,6 @@
        "node": ">= 8"
      }
    },
-
    "node_modules/apg-js": {
-
      "version": "4.1.2",
-
      "resolved": "https://registry.npmjs.org/apg-js/-/apg-js-4.1.2.tgz",
-
      "integrity": "sha512-2OALKUe82NLVPe4NTooom8NykWIa2D7YxO7jG1pgnYWnkfhTUriXpITmLvVD8k8TzDfa9G5O4y8rPe2/uUB1Bg=="
-
    },
    "node_modules/argparse": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -4661,6 +4615,7 @@
      "version": "3.0.2",
      "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz",
      "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==",
+
      "dev": true,
      "hasInstallScript": true,
      "dependencies": {
        "node-addon-api": "^2.0.0",
@@ -4946,7 +4901,8 @@
    "node_modules/node-addon-api": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
-
      "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA=="
+
      "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==",
+
      "dev": true
    },
    "node_modules/node-fetch": {
      "version": "2.6.7",
@@ -4974,6 +4930,7 @@
      "version": "4.5.0",
      "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz",
      "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==",
+
      "dev": true,
      "bin": {
        "node-gyp-build": "bin.js",
        "node-gyp-build-optional": "optional.js",
@@ -5314,6 +5271,7 @@
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+
      "dev": true,
      "engines": {
        "node": ">=6"
      }
@@ -5390,6 +5348,7 @@
      "version": "3.6.0",
      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
      "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+
      "dev": true,
      "dependencies": {
        "inherits": "^2.0.3",
        "string_decoder": "^1.1.1",
@@ -5761,20 +5720,6 @@
        "url": "https://github.com/sponsors/ljharb"
      }
    },
-
    "node_modules/siwe": {
-
      "version": "2.0.5",
-
      "resolved": "https://registry.npmjs.org/siwe/-/siwe-2.0.5.tgz",
-
      "integrity": "sha512-PZku0+V915YvzVuProsC+RD6unKBo3208X/+t9ARk1WHjYMbtGnxuyBuMASdmLFI3nqJiorko5qrT0ihCFwlHQ==",
-
      "dependencies": {
-
        "@spruceid/siwe-parser": "2.0.0",
-
        "@stablelib/random": "^1.0.1",
-
        "uri-js": "^4.4.1",
-
        "valid-url": "^1.0.9"
-
      },
-
      "peerDependencies": {
-
        "ethers": "^5.5.1"
-
      }
-
    },
    "node_modules/slash": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -5843,6 +5788,7 @@
      "version": "1.3.0",
      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+
      "dev": true,
      "dependencies": {
        "safe-buffer": "~5.2.0"
      }
@@ -6363,6 +6309,7 @@
      "version": "4.4.1",
      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+
      "dev": true,
      "dependencies": {
        "punycode": "^2.1.0"
      }
@@ -6394,12 +6341,8 @@
    "node_modules/util-deprecate": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-
      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
-
    },
-
    "node_modules/valid-url": {
-
      "version": "1.0.9",
-
      "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz",
-
      "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA=="
+
      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+
      "dev": true
    },
    "node_modules/vite": {
      "version": "4.0.0",
@@ -7388,43 +7331,6 @@
        "@sinonjs/commons": "^2.0.0"
      }
    },
-
    "@spruceid/siwe-parser": {
-
      "version": "2.0.0",
-
      "resolved": "https://registry.npmjs.org/@spruceid/siwe-parser/-/siwe-parser-2.0.0.tgz",
-
      "integrity": "sha512-zXlPBRKaT9ecxhhLQqn/StAWlXvQBlFDFnIAlM7ceMVx/1NVZZ65GdW9A28tYGbhpesYxNYpsqegGsBcrWuASg==",
-
      "requires": {
-
        "apg-js": "^4.1.1",
-
        "uri-js": "^4.4.1",
-
        "valid-url": "^1.0.9"
-
      }
-
    },
-
    "@stablelib/binary": {
-
      "version": "1.0.1",
-
      "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz",
-
      "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==",
-
      "requires": {
-
        "@stablelib/int": "^1.0.1"
-
      }
-
    },
-
    "@stablelib/int": {
-
      "version": "1.0.1",
-
      "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz",
-
      "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w=="
-
    },
-
    "@stablelib/random": {
-
      "version": "1.0.2",
-
      "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz",
-
      "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==",
-
      "requires": {
-
        "@stablelib/binary": "^1.0.1",
-
        "@stablelib/wipe": "^1.0.1"
-
      }
-
    },
-
    "@stablelib/wipe": {
-
      "version": "1.0.1",
-
      "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz",
-
      "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg=="
-
    },
    "@stardazed/streams": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/@stardazed/streams/-/streams-3.1.0.tgz",
@@ -8057,11 +7963,6 @@
        "picomatch": "^2.0.4"
      }
    },
-
    "apg-js": {
-
      "version": "4.1.2",
-
      "resolved": "https://registry.npmjs.org/apg-js/-/apg-js-4.1.2.tgz",
-
      "integrity": "sha512-2OALKUe82NLVPe4NTooom8NykWIa2D7YxO7jG1pgnYWnkfhTUriXpITmLvVD8k8TzDfa9G5O4y8rPe2/uUB1Bg=="
-
    },
    "argparse": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -9995,6 +9896,7 @@
      "version": "3.0.2",
      "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz",
      "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==",
+
      "dev": true,
      "requires": {
        "node-addon-api": "^2.0.0",
        "node-gyp-build": "^4.2.0",
@@ -10210,7 +10112,8 @@
    "node-addon-api": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
-
      "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA=="
+
      "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==",
+
      "dev": true
    },
    "node-fetch": {
      "version": "2.6.7",
@@ -10226,7 +10129,8 @@
    "node-gyp-build": {
      "version": "4.5.0",
      "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz",
-
      "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg=="
+
      "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==",
+
      "dev": true
    },
    "normalize-path": {
      "version": "3.0.0",
@@ -10464,7 +10368,8 @@
    "punycode": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-
      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+
      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+
      "dev": true
    },
    "pure-svg-code": {
      "version": "1.0.6",
@@ -10515,6 +10420,7 @@
      "version": "3.6.0",
      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
      "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+
      "dev": true,
      "requires": {
        "inherits": "^2.0.3",
        "string_decoder": "^1.1.1",
@@ -10775,17 +10681,6 @@
        "object-inspect": "^1.9.0"
      }
    },
-
    "siwe": {
-
      "version": "2.0.5",
-
      "resolved": "https://registry.npmjs.org/siwe/-/siwe-2.0.5.tgz",
-
      "integrity": "sha512-PZku0+V915YvzVuProsC+RD6unKBo3208X/+t9ARk1WHjYMbtGnxuyBuMASdmLFI3nqJiorko5qrT0ihCFwlHQ==",
-
      "requires": {
-
        "@spruceid/siwe-parser": "2.0.0",
-
        "@stablelib/random": "^1.0.1",
-
        "uri-js": "^4.4.1",
-
        "valid-url": "^1.0.9"
-
      }
-
    },
    "slash": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -10836,6 +10731,7 @@
      "version": "1.3.0",
      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+
      "dev": true,
      "requires": {
        "safe-buffer": "~5.2.0"
      }
@@ -11215,6 +11111,7 @@
      "version": "4.4.1",
      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+
      "dev": true,
      "requires": {
        "punycode": "^2.1.0"
      }
@@ -11246,12 +11143,8 @@
    "util-deprecate": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-
      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
-
    },
-
    "valid-url": {
-
      "version": "1.0.9",
-
      "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz",
-
      "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA=="
+
      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+
      "dev": true
    },
    "vite": {
      "version": "4.0.0",
modified package.json
@@ -57,7 +57,6 @@
    "md5": "^2.3.0",
    "plausible-tracker": "^0.3.8",
    "pure-svg-code": "^1.0.6",
-
    "siwe": "^2.0.5",
    "svelte": "^3.54.0",
    "twemoji": "^14.0.2",
    "util": "^0.12.5"
modified src/App.svelte
@@ -95,10 +95,7 @@
      {:else if $activeRouteStore.resource === "faucet"}
        <Faucet {wallet} activeRoute={$activeRouteStore} />
      {:else if $activeRouteStore.resource === "seeds"}
-
        <Seeds
-
          {wallet}
-
          session={$session}
-
          host={$activeRouteStore.params.host} />
+
        <Seeds host={$activeRouteStore.params.host} />
      {:else if $activeRouteStore.resource === "registrations"}
        <Registrations
          {wallet}
modified src/Header.svelte
@@ -13,7 +13,6 @@
  import Logo from "@app/Logo.svelte";
  import Search from "@app/Search.svelte";
  import SearchResults from "@app/components/Modal/SearchResults.svelte";
-
  import SeedDropdown from "@app/SeedDropdown.svelte";
  import SettingsDropdown from "@app/components/SettingsDropdown.svelte";

  import { Profile, ProfileType } from "@app/profile";
@@ -49,15 +48,6 @@
    height: var(--button-regular-height);
    gap: 1rem;
  }
-
  .nav {
-
    display: inline-block;
-
    height: 100%;
-
    margin-left: 1.5rem;
-
    white-space: nowrap;
-
  }
-
  .nav .seeds-container {
-
    display: inline-block;
-
  }
  .logo {
    display: flex;
    height: var(--button-regular-height);
@@ -110,7 +100,6 @@
    }
    .network,
    .search,
-
    header .nav,
    .register,
    .balance {
      display: none;
@@ -162,18 +151,6 @@
          ({ query, results } = e.detail);
        }} />
    </div>
-
    <div class="nav">
-
      {#if session && Object.keys(session.siwe).length > 0}
-
        <span class="seeds-container">
-
          <Floating>
-
            <span slot="toggle">Seeds</span>
-
            <svelte:fragment slot="modal">
-
              <SeedDropdown seeds={session.siwe} />
-
            </svelte:fragment>
-
          </Floating>
-
        </span>
-
      {/if}
-
    </div>
  </div>

  <div class="right">
deleted src/SeedDropdown.svelte
@@ -1,37 +0,0 @@
-
<script lang="ts">
-
  import type { SeedSession } from "@app/siwe";
-

-
  import * as router from "@app/router";
-
  import Dropdown from "@app/Dropdown.svelte";
-
  import { Seed } from "@app/base/seeds/Seed";
-
  import { closeFocused } from "@app/Floating.svelte";
-

-
  export let seeds: { [key: string]: SeedSession };
-

-
  // When a user signs into a new seed we want to update the seed listing
-
  $: formatSeeds = async () => {
-
    return await Promise.all(
-
      Object.values(seeds).map(async session => {
-
        const seed = await Seed.lookup(session.domain);
-
        const key = `${seed.emoji} ${seed.host}`;
-

-
        return {
-
          key,
-
          value: seed.host,
-
          title: `Go to ${seed.host}`,
-
          badge: null,
-
        };
-
      }),
-
    );
-
  };
-
</script>
-

-
{#await formatSeeds() then items}
-
  <Dropdown
-
    {items}
-
    selected={null}
-
    on:select={item => {
-
      closeFocused();
-
      router.push({ resource: "seeds", params: { host: item.detail } });
-
    }} />
-
{/await}
deleted src/SiweConnect.svelte
@@ -1,52 +0,0 @@
-
<script lang="ts">
-
  import Avatar from "@app/Avatar.svelte";
-
  import type { Seed } from "@app/base/seeds/Seed";
-
  import type { Wallet } from "@app/wallet";
-
  import { signInWithEthereum } from "@app/siwe";
-
  import Loading from "@app/Loading.svelte";
-
  import { Connection } from "@app/session";
-
  import Button from "@app/Button.svelte";
-

-
  export let seed: Seed;
-
  export let wallet: Wallet;
-
  export let caption = "Sign in";
-
  export let tooltip = "";
-
  export let disabled = false;
-
  export let address: string | null = null;
-

-
  let connection: Connection = Connection.Disconnected;
-
</script>
-

-
<style>
-
  .align {
-
    display: flex;
-
    align-items: center;
-
    justify-content: flex-start;
-
  }
-
</style>
-

-
<Button
-
  variant="secondary"
-
  size="small"
-
  title={tooltip}
-
  disabled={disabled || connection === Connection.Connecting}
-
  on:click={async () => {
-
    connection = Connection.Connecting;
-
    try {
-
      await signInWithEthereum(seed, wallet);
-
    } catch (e) {
-
      console.error("Sign in", e);
-
      connection = Connection.Disconnected;
-
    }
-
  }}>
-
  <span class="align">
-
    {#if address}
-
      <Avatar title={address} source={address} inline />
-
    {/if}
-
    {#if connection === Connection.Connecting}
-
      <Loading small />
-
    {:else}
-
      {caption}
-
    {/if}
-
  </span>
-
</Button>
modified src/base/seeds/Routes.svelte
@@ -1,15 +1,11 @@
<script lang="ts">
  import View from "@app/base/seeds/View.svelte";
-
  import type { Wallet } from "@app/wallet";
-
  import type { Session } from "@app/session";

-
  export let wallet: Wallet;
-
  export let session: Session | null;
  export let host: string;
</script>

{#if host === "radicle.local"}
-
  <View {wallet} {session} hostAndPort={"0.0.0.0"} />
+
  <View hostAndPort={"0.0.0.0"} />
{:else}
-
  <View {wallet} {session} hostAndPort={host} />
+
  <View hostAndPort={host} />
{/if}
modified src/base/seeds/View.svelte
@@ -1,5 +1,4 @@
<script lang="ts">
-
  import type { Wallet } from "@app/wallet";
  import type { Stats } from "@app/base/seeds/Seed";
  import type { ProjectInfo } from "@app/project";
  import { formatSeedId, formatSeedHost, twemoji } from "@app/utils";
@@ -9,16 +8,10 @@
  import NotFound from "@app/NotFound.svelte";
  import Clipboard from "@app/Clipboard.svelte";
  import Projects from "@app/base/seeds/View/Projects.svelte";
-
  import type { Session } from "@app/session";
-
  import Address from "@app/Address.svelte";
-
  import SiweConnect from "@app/SiweConnect.svelte";
-
  import type { SeedSession } from "@app/siwe";
  import Async from "@app/Async.svelte";
  import { Project } from "@app/project";
  import type { Host } from "@app/api";

-
  export let wallet: Wallet;
-
  export let session: Session | null;
  export let hostAndPort: string;

  const [host, port] = hostAndPort.includes(":")
@@ -27,7 +20,6 @@

  const hostName = formatSeedHost(host);
  const seedHost: Host = { host, port: Number(port) };
-
  let siweSession: SeedSession | null = null;

  const getProjectsAndStats = async (
    seed: Seed,
@@ -39,14 +31,6 @@
    const projects = await Project.getProjects(seedHost, { perPage: 10 });
    return { stats, projects };
  };
-

-
  $: if (session?.siwe) {
-
    const entries = Object.entries(session.siwe);
-
    const result = entries.find(([, session]) => session.domain === host);
-
    if (result) {
-
      siweSession = result[1];
-
    }
-
  }
</script>

<style>
@@ -77,17 +61,6 @@
    display: flex;
    align-items: center;
  }
-
  .signed-in {
-
    color: var(--color-foreground-5);
-
    margin-right: 0.5rem;
-
  }
-
  .session-info {
-
    display: flex;
-
    flex-direction: row;
-
    background: var(--color-secondary-2);
-
    padding: 0.25rem 0.5rem;
-
    border-radius: var(--border-radius);
-
  }
  .seed-label {
    display: flex;
    align-items: center;
@@ -98,9 +71,6 @@
      width: 100%;
      padding: 1.5rem;
    }
-
    .signed-in {
-
      display: none;
-
    }
    .fields {
      grid-template-columns: 5rem auto;
    }
@@ -124,30 +94,6 @@
          <span class="layout-desktop-inline" use:twemoji>{seed.emoji}</span>
        </span>
      </span>
-
      <!-- User Session -->
-
      <div class="siwe">
-
        {#if session?.signer}
-
          {#if siweSession}
-
            <div class="session-info">
-
              <span class="signed-in txt-small">Signed in as</span>
-
              <Address
-
                address={siweSession.address}
-
                {wallet}
-
                small
-
                compact
-
                resolve />
-
            </div>
-
          {:else}
-
            <SiweConnect {seed} address={session.address} {wallet} />
-
          {/if}
-
        {:else}
-
          <SiweConnect
-
            disabled
-
            {seed}
-
            {wallet}
-
            tooltip={"Connect your wallet to sign in"} />
-
        {/if}
-
      </div>
    </header>

    <div class="fields">
modified src/session.ts
@@ -10,7 +10,6 @@ import { Unreachable, assert, assertEq } from "@app/error";
import type { TypedDataSigner } from "@ethersproject/abstract-signer";
import type { WalletConnectSigner } from "./WalletConnectSigner";
import * as ethers from "ethers";
-
import type { SeedSession } from "./siwe";

export enum Connection {
  Disconnected,
@@ -49,7 +48,6 @@ export interface Session {
  address: string;
  signer: Signer | null;
  signerType: SignerType;
-
  siwe: { [key: string]: SeedSession };
  tokenBalance: BigNumber | null; // `null` means it isn't loaded yet.
  tx: TxState;
}
@@ -58,7 +56,6 @@ export interface Store extends Readable<State> {
  connectMetamask(wallet: Wallet): Promise<void>;
  connectWalletConnect(wallet: Wallet): Promise<void>;
  updateBalance(n: BigNumber): void;
-
  connectSeed(seed: { id: string; session: SeedSession }): void;
  refreshBalance(wallet: Wallet): Promise<void>;
  setTxSigning(): void;
  setTxPending(tx: TransactionResponse): void;
@@ -68,8 +65,6 @@ export interface Store extends Readable<State> {

export const loadState = (initial: State): Store => {
  const store = writable<State>(initial);
-
  // Loads from localStorage all active seed sessions.
-
  const siwe = loadSeedSessions();

  return {
    subscribe: store.subscribe,
@@ -88,7 +83,6 @@ export const loadState = (initial: State): Store => {
          address: metamask.address,
          signer,
          signerType: SignerType.MetaMask,
-
          siwe,
          tokenBalance,
          tx: null,
        };
@@ -122,7 +116,6 @@ export const loadState = (initial: State): Store => {
          address,
          signer,
          signerType: SignerType.MetaMask,
-
          siwe,
          tokenBalance,
          tx: null,
        };
@@ -152,7 +145,6 @@ export const loadState = (initial: State): Store => {
          address,
          signer,
          signerType: SignerType.WalletConnect,
-
          siwe,
          tokenBalance,
          tx: null,
        };
@@ -215,20 +207,6 @@ export const loadState = (initial: State): Store => {
      }
    },

-
    connectSeed: ({ id, session }: { id: string; session: SeedSession }) => {
-
      store.update((s: State) => {
-
        switch (s.connection) {
-
          case Connection.Connected:
-
            s.session.siwe[id] = session;
-
            saveSeedSession(s.session);
-

-
            return s;
-
          default:
-
            return s;
-
        }
-
      });
-
    },
-

    updateBalance: (n: BigNumber) => {
      store.update((s: State) => {
        assert(s.connection === Connection.Connected);
@@ -376,34 +354,6 @@ export async function changeAccounts(
  state.refreshBalance(wallet);
}

-
export function loadSeedSessions(): { [key: string]: SeedSession } {
-
  const siweStorage = localStorage.getItem("siwe");
-

-
  if (siweStorage) {
-
    const siwe: { [key: string]: SeedSession } = JSON.parse(siweStorage);
-

-
    // We only keep the sessions that are still valid, and remove expired ones from `localStorage`.
-
    // For a session to be valid the expiration time has to be bigger or equal than the current time.
-
    const activeSessions = Object.fromEntries(
-
      Object.entries(siwe).filter(([, value]) => {
-
        return new Date(value.expirationTime) >= new Date();
-
      }),
-
    );
-
    window.localStorage.setItem("siwe", JSON.stringify({ ...activeSessions }));
-

-
    return activeSessions;
-
  }
-

-
  return {};
-
}
-

-
export async function connectSeed(seedSession: {
-
  id: string;
-
  session: SeedSession;
-
}): Promise<void> {
-
  state.connectSeed(seedSession);
-
}
-

export async function approveSpender(
  spender: string,
  amount: BigNumber,
@@ -434,10 +384,6 @@ export function disconnectWallet(wallet: Wallet): void {
  disconnectMetamask();
}

-
function saveSeedSession(session: Session): void {
-
  window.localStorage.setItem("siwe", JSON.stringify(session.siwe));
-
}
-

function saveMetamaskSession(session: Session): void {
  window.localStorage.setItem(
    "metamask",
deleted src/siwe.ts
@@ -1,75 +0,0 @@
-
/* eslint-disable @typescript-eslint/naming-convention */
-
import { SiweMessage } from "siwe";
-
import { Request, type Host } from "@app/api";
-
import type { Wallet } from "@app/wallet";
-
import { connectSeed } from "@app/session";
-
import type { Seed } from "@app/base/seeds/Seed";
-

-
export interface SeedSession {
-
  domain: string;
-
  address: string;
-
  statement?: string;
-
  uri: string;
-
  version: string;
-
  chainId: string;
-
  nonce: string;
-
  issuedAt: number;
-
  expirationTime: number;
-
  resources: string[];
-
}
-

-
export function createSiweMessage(
-
  seed: Seed,
-
  address: string,
-
  nonce: string,
-
  wallet: Wallet,
-
): string {
-
  const nextWeek = new Date();
-
  nextWeek.setDate(nextWeek.getDate() + 7);
-

-
  const message = new SiweMessage({
-
    domain: seed.api.host,
-
    address,
-
    statement: "It's a Radicle world!",
-
    uri: window.location.origin,
-
    nonce,
-
    version: "1",
-
    expirationTime: nextWeek.toISOString(),
-
    chainId: wallet.network.chainId,
-
  });
-

-
  return message.prepareMessage();
-
}
-

-
export async function createUnauthorizedSession(
-
  host: Host,
-
): Promise<{ nonce: string; id: string }> {
-
  return await new Request(`sessions`, host).post();
-
}
-

-
/// Signs the user into given seed and returns when successfull a session id
-
export async function signInWithEthereum(
-
  seed: Seed,
-
  wallet: Wallet,
-
): Promise<{ id: string } | null> {
-
  if (!wallet.signer) {
-
    return null;
-
  }
-

-
  const address = await wallet.signer.getAddress();
-
  const result = await createUnauthorizedSession(seed.api);
-
  const message = createSiweMessage(seed, address, result.nonce, wallet);
-
  const signature = await wallet.signer.signMessage(message);
-

-
  const auth: {
-
    id: string;
-
    session: SeedSession;
-
  } = await new Request(`sessions/${result.id}`, seed.api).put({
-
    message,
-
    signature,
-
  });
-

-
  connectSeed({ id: result.id, session: auth.session });
-

-
  return { id: result.id };
-
}
modified vite.config.ts
@@ -63,8 +63,11 @@ export default defineConfig({
    rollupOptions: {
      output: {
        manualChunks: {
-
          ethers: ["ethers", "@ethersproject/abstract-provider"],
-
          auth: ["siwe", "@walletconnect/client"],
+
          ethereum: [
+
            "ethers",
+
            "@ethersproject/abstract-provider",
+
            "@walletconnect/client",
+
          ],
          cache: ["lru-cache", "@stardazed/streams"],
          markdown: ["katex", "dompurify", "marked", "@radicle/gray-matter"],
          dom: ["svelte", "pure-svg-code", "twemoji"],