From a8d046e258097c95dc2892ca2333eb55ba46e1de Mon Sep 17 00:00:00 2001 From: Michael Yankelev Date: Tue, 30 Nov 2021 13:44:35 +0200 Subject: [PATCH 1/2] removing gaming dashboard from monorepo --- packages/gaming-ui/.env.example | 8 - packages/gaming-ui/.gitignore | 29 - packages/gaming-ui/.linguirc | 14 - packages/gaming-ui/.sentryclirc | 3 - packages/gaming-ui/README.md | 28 - packages/gaming-ui/craco.config.js | 48 -- packages/gaming-ui/cypress.json | 4 - .../gaming-ui/cypress/fixtures/loginData.ts | 3 - packages/gaming-ui/cypress/plugins/index.ts | 57 -- .../gaming-ui/cypress/support/commands.ts | 171 ------ packages/gaming-ui/cypress/support/index.ts | 32 - .../page-objects/authenticationPage.ts | 10 - .../cypress/support/page-objects/basePage.ts | 6 - .../cypress/support/page-objects/homePage.ts | 64 -- .../support/page-objects/navigationMenu.ts | 11 - .../support/page-objects/settingsPage.ts | 6 - .../cypress/support/utils/CustomBridge.ts | 82 --- .../cypress/support/utils/apiTestHelper.ts | 9 - .../cypress/tests/main-navigation-spec.ts | 32 - packages/gaming-ui/cypress/tsconfig.json | 10 - packages/gaming-ui/package.json | 89 --- packages/gaming-ui/public/ChainSafe-logo.png | Bin 23173 -> 0 bytes packages/gaming-ui/public/_redirects | 1 - .../public/android-chrome-192x192.png | Bin 23173 -> 0 bytes .../public/android-chrome-512x512.png | Bin 15170 -> 0 bytes .../gaming-ui/public/apple-touch-icon.png | Bin 23173 -> 0 bytes packages/gaming-ui/public/favicon-16x16.png | Bin 1438 -> 0 bytes packages/gaming-ui/public/favicon-32x32.png | Bin 2595 -> 0 bytes packages/gaming-ui/public/favicon.ico | Bin 21822 -> 0 bytes packages/gaming-ui/public/index.html | 58 -- packages/gaming-ui/public/manifest.json | 15 - packages/gaming-ui/public/robots.txt | 3 - .../public/serviceworker/redirect.html | 316 ---------- packages/gaming-ui/public/serviceworker/sw.js | 312 ---------- packages/gaming-ui/public/site.webmanifest | 19 - packages/gaming-ui/scripts/sentry.js | 37 -- packages/gaming-ui/src/App.tsx | 121 ---- .../src/Components/Elements/ApiKeyCard.tsx | 86 --- .../src/Components/Elements/CustomButton.tsx | 54 -- .../src/Components/Elements/CustomModal.tsx | 61 -- .../src/Components/Elements/SecretField.tsx | 34 - .../gaming-ui/src/Components/GamingRoutes.tsx | 51 -- .../src/Components/Layouts/AppHeader.tsx | 232 ------- .../src/Components/Layouts/AppNav.tsx | 272 -------- .../src/Components/Layouts/AppWrapper.tsx | 90 --- .../Components/Modules/DashboardModule.tsx | 263 -------- .../src/Components/Modules/LoginModule.tsx | 435 ------------- .../Modules/LoginModule/PasswordlessEmail.tsx | 300 --------- .../src/Components/Pages/DashboardPage.tsx | 11 - .../src/Components/Pages/LoginPage.tsx | 165 ----- .../src/Components/Pages/SettingsPage.tsx | 171 ------ .../src/Contexts/GamingApiContext.tsx | 429 ------------- .../src/Contexts/LanguageContext.tsx | 140 ----- .../gaming-ui/src/Contexts/UserContext.tsx | 93 --- packages/gaming-ui/src/Media/Empty.svg.tsx | 3 - packages/gaming-ui/src/Media/devices.png | Bin 75905 -> 0 bytes .../Media/landing/layers/ForegroundSVG.tsx | 16 - .../landing/layers/dark/Bottom.dark.svg.tsx | 3 - .../landing/layers/dark/Top.dark.svg.tsx | 3 - .../Media/landing/layers/dark/bottom-bg.svg | 1 - .../src/Media/landing/layers/dark/top-bg.svg | 1 - .../Media/landing/layers/desktop-mobile.png | Bin 93644 -> 0 bytes .../src/Media/landing/layers/foreground.svg | 1 - .../landing/layers/light/Bottom.light.svg.tsx | 3 - .../landing/layers/light/Top.light.svg.tsx | 3 - .../Media/landing/layers/light/bottom-bg.svg | 1 - .../src/Media/landing/layers/light/top-bg.svg | 1 - .../src/Media/landing/layers/password-key.png | Bin 37054 -> 0 bytes .../landing/layers/peaceful-succotash.png | Bin 64511 -> 0 bytes .../gaming-ui/src/Media/svgs/complete.svg | 1 - packages/gaming-ui/src/Media/svgs/empty.svg | 1 - packages/gaming-ui/src/Themes/Constants.ts | 161 ----- packages/gaming-ui/src/Themes/DarkTheme.ts | 580 ------------------ packages/gaming-ui/src/Themes/LightTheme.ts | 196 ------ packages/gaming-ui/src/Themes/types.ts | 4 - .../gaming-ui/src/Utils/StringHelpers.tsx | 14 - packages/gaming-ui/src/index.css | 27 - packages/gaming-ui/src/index.tsx | 12 - packages/gaming-ui/src/locales/en/messages.po | 185 ------ packages/gaming-ui/src/react-app-env.d.ts | 1 - packages/gaming-ui/src/serviceWorker.ts | 146 ----- packages/gaming-ui/src/setupTests.ts | 5 - packages/gaming-ui/tsconfig.json | 23 - 83 files changed, 5877 deletions(-) delete mode 100644 packages/gaming-ui/.env.example delete mode 100644 packages/gaming-ui/.gitignore delete mode 100644 packages/gaming-ui/.linguirc delete mode 100644 packages/gaming-ui/.sentryclirc delete mode 100644 packages/gaming-ui/README.md delete mode 100644 packages/gaming-ui/craco.config.js delete mode 100644 packages/gaming-ui/cypress.json delete mode 100644 packages/gaming-ui/cypress/fixtures/loginData.ts delete mode 100644 packages/gaming-ui/cypress/plugins/index.ts delete mode 100644 packages/gaming-ui/cypress/support/commands.ts delete mode 100644 packages/gaming-ui/cypress/support/index.ts delete mode 100644 packages/gaming-ui/cypress/support/page-objects/authenticationPage.ts delete mode 100644 packages/gaming-ui/cypress/support/page-objects/basePage.ts delete mode 100644 packages/gaming-ui/cypress/support/page-objects/homePage.ts delete mode 100644 packages/gaming-ui/cypress/support/page-objects/navigationMenu.ts delete mode 100644 packages/gaming-ui/cypress/support/page-objects/settingsPage.ts delete mode 100644 packages/gaming-ui/cypress/support/utils/CustomBridge.ts delete mode 100644 packages/gaming-ui/cypress/support/utils/apiTestHelper.ts delete mode 100644 packages/gaming-ui/cypress/tests/main-navigation-spec.ts delete mode 100644 packages/gaming-ui/cypress/tsconfig.json delete mode 100644 packages/gaming-ui/package.json delete mode 100644 packages/gaming-ui/public/ChainSafe-logo.png delete mode 100644 packages/gaming-ui/public/_redirects delete mode 100644 packages/gaming-ui/public/android-chrome-192x192.png delete mode 100644 packages/gaming-ui/public/android-chrome-512x512.png delete mode 100644 packages/gaming-ui/public/apple-touch-icon.png delete mode 100644 packages/gaming-ui/public/favicon-16x16.png delete mode 100644 packages/gaming-ui/public/favicon-32x32.png delete mode 100644 packages/gaming-ui/public/favicon.ico delete mode 100644 packages/gaming-ui/public/index.html delete mode 100644 packages/gaming-ui/public/manifest.json delete mode 100644 packages/gaming-ui/public/robots.txt delete mode 100644 packages/gaming-ui/public/serviceworker/redirect.html delete mode 100644 packages/gaming-ui/public/serviceworker/sw.js delete mode 100644 packages/gaming-ui/public/site.webmanifest delete mode 100644 packages/gaming-ui/scripts/sentry.js delete mode 100644 packages/gaming-ui/src/App.tsx delete mode 100644 packages/gaming-ui/src/Components/Elements/ApiKeyCard.tsx delete mode 100644 packages/gaming-ui/src/Components/Elements/CustomButton.tsx delete mode 100644 packages/gaming-ui/src/Components/Elements/CustomModal.tsx delete mode 100644 packages/gaming-ui/src/Components/Elements/SecretField.tsx delete mode 100644 packages/gaming-ui/src/Components/GamingRoutes.tsx delete mode 100644 packages/gaming-ui/src/Components/Layouts/AppHeader.tsx delete mode 100644 packages/gaming-ui/src/Components/Layouts/AppNav.tsx delete mode 100644 packages/gaming-ui/src/Components/Layouts/AppWrapper.tsx delete mode 100644 packages/gaming-ui/src/Components/Modules/DashboardModule.tsx delete mode 100644 packages/gaming-ui/src/Components/Modules/LoginModule.tsx delete mode 100644 packages/gaming-ui/src/Components/Modules/LoginModule/PasswordlessEmail.tsx delete mode 100644 packages/gaming-ui/src/Components/Pages/DashboardPage.tsx delete mode 100644 packages/gaming-ui/src/Components/Pages/LoginPage.tsx delete mode 100644 packages/gaming-ui/src/Components/Pages/SettingsPage.tsx delete mode 100644 packages/gaming-ui/src/Contexts/GamingApiContext.tsx delete mode 100644 packages/gaming-ui/src/Contexts/LanguageContext.tsx delete mode 100644 packages/gaming-ui/src/Contexts/UserContext.tsx delete mode 100644 packages/gaming-ui/src/Media/Empty.svg.tsx delete mode 100644 packages/gaming-ui/src/Media/devices.png delete mode 100644 packages/gaming-ui/src/Media/landing/layers/ForegroundSVG.tsx delete mode 100644 packages/gaming-ui/src/Media/landing/layers/dark/Bottom.dark.svg.tsx delete mode 100644 packages/gaming-ui/src/Media/landing/layers/dark/Top.dark.svg.tsx delete mode 100644 packages/gaming-ui/src/Media/landing/layers/dark/bottom-bg.svg delete mode 100644 packages/gaming-ui/src/Media/landing/layers/dark/top-bg.svg delete mode 100644 packages/gaming-ui/src/Media/landing/layers/desktop-mobile.png delete mode 100644 packages/gaming-ui/src/Media/landing/layers/foreground.svg delete mode 100644 packages/gaming-ui/src/Media/landing/layers/light/Bottom.light.svg.tsx delete mode 100644 packages/gaming-ui/src/Media/landing/layers/light/Top.light.svg.tsx delete mode 100644 packages/gaming-ui/src/Media/landing/layers/light/bottom-bg.svg delete mode 100644 packages/gaming-ui/src/Media/landing/layers/light/top-bg.svg delete mode 100644 packages/gaming-ui/src/Media/landing/layers/password-key.png delete mode 100644 packages/gaming-ui/src/Media/landing/layers/peaceful-succotash.png delete mode 100644 packages/gaming-ui/src/Media/svgs/complete.svg delete mode 100644 packages/gaming-ui/src/Media/svgs/empty.svg delete mode 100644 packages/gaming-ui/src/Themes/Constants.ts delete mode 100644 packages/gaming-ui/src/Themes/DarkTheme.ts delete mode 100644 packages/gaming-ui/src/Themes/LightTheme.ts delete mode 100644 packages/gaming-ui/src/Themes/types.ts delete mode 100644 packages/gaming-ui/src/Utils/StringHelpers.tsx delete mode 100644 packages/gaming-ui/src/index.css delete mode 100644 packages/gaming-ui/src/index.tsx delete mode 100644 packages/gaming-ui/src/locales/en/messages.po delete mode 100644 packages/gaming-ui/src/react-app-env.d.ts delete mode 100644 packages/gaming-ui/src/serviceWorker.ts delete mode 100644 packages/gaming-ui/src/setupTests.ts delete mode 100644 packages/gaming-ui/tsconfig.json diff --git a/packages/gaming-ui/.env.example b/packages/gaming-ui/.env.example deleted file mode 100644 index f1c140f7b7..0000000000 --- a/packages/gaming-ui/.env.example +++ /dev/null @@ -1,8 +0,0 @@ -PORT=3000 -HTTPS=false - -REACT_APP_API_URL=https://stage.imploy.site/api/v1 -REACT_APP_BLOCKNATIVE_ID= -REACT_APP_GOOGLE_CLIENT_ID= -REACT_APP_AUTH0_DOMAIN= -REACT_APP_AUTH0_CLIENT_ID= \ No newline at end of file diff --git a/packages/gaming-ui/.gitignore b/packages/gaming-ui/.gitignore deleted file mode 100644 index 9532771241..0000000000 --- a/packages/gaming-ui/.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -.env - -src/locales/*/messages.js -src/locales/_build - diff --git a/packages/gaming-ui/.linguirc b/packages/gaming-ui/.linguirc deleted file mode 100644 index 1b7ae61f54..0000000000 --- a/packages/gaming-ui/.linguirc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "catalogs": [{ - "path": "/src/locales/{locale}/messages", - "include": ["/src/**"], - "exclude": ["**/node_modules/**", "/src/locales/**"] - }], - "compileNamespace": "cjs", - "format": "po", - "formatOptions": { - "origins": false - }, - "locales": ["en"], - "sourceLocale": "en" -} \ No newline at end of file diff --git a/packages/gaming-ui/.sentryclirc b/packages/gaming-ui/.sentryclirc deleted file mode 100644 index b50913bad5..0000000000 --- a/packages/gaming-ui/.sentryclirc +++ /dev/null @@ -1,3 +0,0 @@ -[defaults] -org=chainsafe -project=gaming-ui diff --git a/packages/gaming-ui/README.md b/packages/gaming-ui/README.md deleted file mode 100644 index cba766f6f8..0000000000 --- a/packages/gaming-ui/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# ChainSafe Gaming UI Repo - -![Dev](https://github.com/imploy/files-ui/workflows/Dev/badge.svg?branch=dev) -[![Netlify Status](https://api.netlify.com/api/v1/badges/cb6afc46-ec5d-4cac-91c2-dbd0d866b89a/deploy-status)](https://app.netlify.com/sites/angry-lewin-719dd6/deploys) -[![Maintainability](https://api.codeclimate.com/v1/badges/6a9b1984bc9622792d3e/maintainability)](https://codeclimate.com/repos/5f0224802dfa0b018f0021b0/maintainability) -[![Test Coverage](https://api.codeclimate.com/v1/badges/6a9b1984bc9622792d3e/test_coverage)](https://codeclimate.com/repos/5f0224802dfa0b018f0021b0/test_coverage) - -## Run development (.env) - -``` -yarn install -yarn start -``` - -## Build production (.env) - -``` -yarn build -``` - -## Run test and test coverage - -``` -yarn test -yarn coverage -``` - -**Visit**: `http://localhost:3000` diff --git a/packages/gaming-ui/craco.config.js b/packages/gaming-ui/craco.config.js deleted file mode 100644 index 16c3b8144d..0000000000 --- a/packages/gaming-ui/craco.config.js +++ /dev/null @@ -1,48 +0,0 @@ -const TerserPlugin = require("terser-webpack-plugin") - -module.exports = { - babel: { - presets: [], - plugins: ["macros"], - loaderOptions: (babelLoaderOptions, { env, paths }) => { - return babelLoaderOptions - } - }, - webpack: { - configure: (webpackConfig) => ({ - ...webpackConfig, - optimization: { - ...webpackConfig.optimization, - minimizer: [ - new TerserPlugin({ - terserOptions: { - parse: { - ecma: 8 - }, - compress: { - ecma: 5, - warnings: false, - comparisons: false, - inline: 2, - drop_console: true - }, - mangle: { - safari10: true - }, - output: { - ecma: 5, - comments: false, - ascii_only: true - } - }, - parallel: 2, - cache: true, - sourceMap: true, - extractComments: false - }) - ] - }, - devtool: "source-map" - }) - } -} diff --git a/packages/gaming-ui/cypress.json b/packages/gaming-ui/cypress.json deleted file mode 100644 index fb59b54133..0000000000 --- a/packages/gaming-ui/cypress.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "integrationFolder": "cypress/tests", - "video": false -} diff --git a/packages/gaming-ui/cypress/fixtures/loginData.ts b/packages/gaming-ui/cypress/fixtures/loginData.ts deleted file mode 100644 index 9852d7c4c4..0000000000 --- a/packages/gaming-ui/cypress/fixtures/loginData.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const testPrivateKey = "0x4fd9a44c051834e28a919096f154e3f805f58d8f2d90a1ab9a29b0b46a6ac363" -export const testAddress = "0xDa1f70D176E0F7F16f2a3bB509cD37Bd36aFD902" -export const localHost = "http://localhost:3000" \ No newline at end of file diff --git a/packages/gaming-ui/cypress/plugins/index.ts b/packages/gaming-ui/cypress/plugins/index.ts deleted file mode 100644 index 77ca4f8215..0000000000 --- a/packages/gaming-ui/cypress/plugins/index.ts +++ /dev/null @@ -1,57 +0,0 @@ -/// -// *********************************************************** -// This example plugins/index.js can be used to load plugins -// -// You can change the location of this file or turn off loading -// the plugins file with the 'pluginsFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/plugins-guide -// *********************************************************** -import { existsSync, readFileSync } from "fs" - -// This function is called when a project is opened or re-opened (e.g. due to -// the project's config changing) - -/** - * @type {Cypress.PluginConfig} - */ - -export default (on: any) => { - // `on` is used to hook into various events Cypress emits - // `config` is the resolved Cypress config - - on("task", { - readFileMaybe(filename: string) { - if (existsSync(filename)) { - return readFileSync(filename, "utf8") - } - - return null - } - }) - - on("before:browser:launch", (browser: Cypress.Browser, launchOptions: Cypress.BrowserLaunchOptions) => { - if (browser.name === "chrome" && browser.isHeadless) { - // fullPage screenshot size is 1280x720 on non-retina screens - launchOptions.args.push("--window-size=1280,720") - - // force screen to be non-retina (1280x720 size) - launchOptions.args.push("--force-device-scale-factor=1") - } - - if (browser.name === "electron" && browser.isHeadless) { - // fullPage screenshot size is 12807200 - launchOptions.preferences.width = 1280 - launchOptions.preferences.height = 720 - } - - if (browser.name === "firefox" && browser.isHeadless) { - // menubars take up height on the screen - launchOptions.args.push("--width=1280") - launchOptions.args.push("--height=720") - } - - return launchOptions - }) -} diff --git a/packages/gaming-ui/cypress/support/commands.ts b/packages/gaming-ui/cypress/support/commands.ts deleted file mode 100644 index 134cb8f541..0000000000 --- a/packages/gaming-ui/cypress/support/commands.ts +++ /dev/null @@ -1,171 +0,0 @@ -/* eslint-disable @typescript-eslint/no-namespace */ -// *********************************************** -// This example commands.js shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** -// -// -// -- This is a parent command -- -// Cypress.Commands.add("login", (email, password) => { ... }) -// -// -// -- This is a child command -- -// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) -// -// -// -- This is a dual command -- -// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) -// -// -// -- This will overwrite an existing command -- -// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) - -import { authenticationPage } from "./page-objects/authenticationPage" -import { ethers, Wallet } from "ethers" -import { testPrivateKey, localHost } from "../fixtures/loginData" -import { CustomizedBridge } from "./utils/CustomBridge" -import "cypress-file-upload" -import { cidsPage } from "./page-objects/cidsPage" - -export type Storage = Record[]; - -export interface Web3LoginOptions { - url?: string - apiUrlBase?: string - saveBrowser?: boolean - useLocalAndSessionStorage?: boolean - clearCSFBucket?: boolean - clearTrashBucket?: boolean -} - -const SESSION_FILE = "cypress/fixtures/storage/sessionStorage.json" -const LOCAL_FILE = "cypress/fixtures/storage/localStorage.json" - -Cypress.Commands.add("saveLocalAndSession", () => { - // save local and session storage in files - cy.window().then((win) => { - const newLocal: Storage = [] - const newSession: Storage = [] - - Object.keys(win.localStorage).forEach((key) => { - newLocal.push({ key, value: win.localStorage.getItem(key) || "" }) - }) - - Object.keys(win.sessionStorage).forEach((key) => { - newSession.push({ key, value: win.sessionStorage.getItem(key) || "" }) - }) - - const newLocalString = JSON.stringify(newLocal) - const newSessionString = JSON.stringify(newSession) - - cy.writeFile(SESSION_FILE, newSessionString) - cy.writeFile(LOCAL_FILE, newLocalString) - }) -}) - -Cypress.Commands.add( - "web3Login", - ({ - url = localHost, - // apiUrlBase = "https://stage.imploy.site/api/v1", - useLocalAndSessionStorage = true - }: Web3LoginOptions = {}) => { - let session: Storage = [] - let local: Storage = [] - - cy.task("readFileMaybe", SESSION_FILE).then( - (unparsedSession) => { - session = (unparsedSession && JSON.parse(unparsedSession)) || [] - } - ) - - cy.task("readFileMaybe", LOCAL_FILE).then( - (unparsedLocal) => { - local = (unparsedLocal && JSON.parse(unparsedLocal)) || [] - } - ) - - cy.on("window:before:load", (win) => { - const provider = new ethers.providers.JsonRpcProvider( - "https://rinkeby.infura.io/v3/4bf032f2d38a4ed6bb975b80d6340847", - 4 - ) - const signer = new Wallet(testPrivateKey, provider) - // inject ethereum object in the global window - Object.defineProperty(win, "ethereum", { - get: () => new CustomizedBridge(signer as any, provider as any) - }) - - // clear session storage in any case, if previous session storage should be - // kept will be decided after. - // Note that Cypress keep the session storage between test but clears localStorage - win.sessionStorage.clear() - win.localStorage.clear() - - if (useLocalAndSessionStorage) { - session.forEach(({ key, value }) => { - win.sessionStorage.setItem(key, value) - }) - - local.forEach(({ key, value }) => { - win.localStorage.setItem(key, value) - }) - } - }) - - cy.visit(url) - - // with nothing in localstorage (and in session storage) - // the whole login flow should kick in - cy.then(() => { - cy.log( - "Logging in", - local.length > 0 && - "there is something in session storage ---> direct login" - ) - - if (local.length === 0) { - cy.log("nothing in session storage, --> click on web3 button") - authenticationPage.web3Button().click() - authenticationPage.metaMaskButton().click() - authenticationPage.web3SignInButton().click() - } - }) - - cidsPage.cidsHeaderLabel().should("be.visible") - - cy.saveLocalAndSession() - - } -) - -// Must be declared global to be detected by typescript (allows import/export) -// eslint-disable @typescript/interface-name -declare global { - namespace Cypress { - interface Chainable { - /** - * Login using Metamask to an instance of Files. - * @param {String} options.url - (default: "http://localhost:3000") - what url to visit. - * @param {String} apiUrlBase - (default: "https://stage.imploy.site/api/v1") - what url to call for the api. - * @param {Boolean} options.useLocalAndSessionStorage - (default: true) - use what could have been stored before to speedup login - * @example cy.web3Login({saveBrowser: true, url: 'http://localhost:8080'}) - */ - web3Login: (options?: Web3LoginOptions) => Chainable - - /** - * Save local and session storage to local files - * @example cy.saveLocalAndSession() - */ - saveLocalAndSession: () => Chainable - } - } -} - -// Convert this to a module instead of script (allows import/export) -export {} diff --git a/packages/gaming-ui/cypress/support/index.ts b/packages/gaming-ui/cypress/support/index.ts deleted file mode 100644 index cb8233c617..0000000000 --- a/packages/gaming-ui/cypress/support/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -/// -// *********************************************************** -// This example support/index.js is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** -// Import commands.js using ES2015 syntax: -import "./commands" - -// the following gets rid of the exception "ResizeObserver loop limit exceeded" -// which someone on the internet says we can safely ignore -// source https://stackoverflow.com/questions/49384120/resizeobserver-loop-limit-exceeded -Cypress.on("uncaught:exception", (err) => { - /* returning false here prevents Cypress from failing the test */ - if (err.message.includes("ResizeObserver loop limit exceeded")) { - // returning false here prevents Cypress from - // failing the test - return false - } -}) - -// Alternatively you can use CommonJS syntax: -// require('./commands') diff --git a/packages/gaming-ui/cypress/support/page-objects/authenticationPage.ts b/packages/gaming-ui/cypress/support/page-objects/authenticationPage.ts deleted file mode 100644 index ccd7a616d2..0000000000 --- a/packages/gaming-ui/cypress/support/page-objects/authenticationPage.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { basePage } from "./basePage" - -export const authenticationPage = { - ...basePage, - - // get started section elements - web3Button: () => cy.get("[data-cy=web3]", { timeout: 120000 }), - metaMaskButton: () => cy.get(".bn-onboard-modal-select-wallets > :nth-child(1) > .bn-onboard-custom"), - web3SignInButton: () => cy.get("[data-cy=sign-in-with-web3-button]") -} diff --git a/packages/gaming-ui/cypress/support/page-objects/basePage.ts b/packages/gaming-ui/cypress/support/page-objects/basePage.ts deleted file mode 100644 index bcf8f88e52..0000000000 --- a/packages/gaming-ui/cypress/support/page-objects/basePage.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Only add things here that could be applicable to all / most pages - -export const basePage = { - // Mobile view only element - hamburgerMenuButton: () => cy.get("[data-testId=hamburger-menu]") -} diff --git a/packages/gaming-ui/cypress/support/page-objects/homePage.ts b/packages/gaming-ui/cypress/support/page-objects/homePage.ts deleted file mode 100644 index b2a30da731..0000000000 --- a/packages/gaming-ui/cypress/support/page-objects/homePage.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { basePage } from "./basePage" - -export const click = ($el: JQuery) => $el.trigger("click") - -export const homePage = { - ...basePage - - // // main file browser elements - // uploadButton: () => cy.get("[data-cy=upload-modal-button]"), - // uploadFileForm: () => cy.get("[data-cy=upload-file-form] input", { timeout: 20000 }), - // moveSelectedButton: () => cy.get("[data-testId=button-move-selected-file]"), - // deleteSelectedButton: () => cy.get("[data-testId=button-delete-selected-file]"), - // deleteFileDialog: () => cy.get("[data-testid=modal-container-file-deletion]"), - // deleteFileCancelButton: () => cy.get("[data-testid=button-cancel-deletion]"), - // deleteFileConfirmButton: () => cy.get("[data-testid=button-confirm-deletion]"), - // uploadStatusToast: () => cy.get("[data-cy=upload-status-toast-message]", { timeout: 10000 }), - - // // file browser row elements - // fileItemRow: () => cy.get("[data-cy=file-item-row]", { timeout: 20000 }), - // fileItemName: () => cy.get("[data-cy=file-item-name]"), - // fileRenameInput: () => cy.get("[data-cy=rename-form] input"), - // fileRenameSubmitButton: () => cy.get("[data-cy=rename-submit-button]"), - // fileRenameErrorLabel: () => cy.get("[data-cy=rename-form] span.minimal.error"), - // fileItemKebabButton: () => cy.get("[data-testid=dropdown-title-fileDropdown]"), - - // // upload modal elements - // startUploadButton: () => cy.get("[data-testId=button-start-upload]"), - // uploadCancelButton: () => cy.get("[data-testId=button-cancel-upload]"), - // fileListRemoveButton: () => cy.get("[data-testid=button-remove-from-file-list]"), - // fileUploadList: () => cy.get("[data-testid=file-list-fileUpload] li"), - // fileUploadDropzone : () => cy.get("[data-testid=file-input-dropzone-fileUpload]"), - - // // menu elements - // previewMenuOption: () => cy.get("[data-cy=menu-preview]"), - // downloadMenuOption: () => cy.get("[data-cy=menu-download]"), - // infoMenuOption: () => cy.get("[data-cy=menu-info]"), - // renameMenuOption: () => cy.get("[data-cy=menu-rename]"), - // moveMenuOption: () => cy.get("[data-cy=menu-move]"), - // deleteMenuOption: () => cy.get("[data-cy=menu-delete]"), - - // clickUploadButton: () => homePage.startUploadButton() - // .should("not.be.disabled") - // // this pipe is needed to prevent https://github.com/ChainSafe/ui-monorepo/issues/1146 - // // as described https://www.cypress.io/blog/2019/01/22/when-can-the-test-click/ - // .pipe(click) - // .should(($el: JQuery) => { - // expect($el).to.not.be.visible - // }), - - // // helpers and convenience functions - // uploadFile(filePath: string) { - // this.uploadButton().click() - // this.uploadFileForm().attachFile(filePath) - // this.fileUploadList().should("have.length", 1) - // this.fileListRemoveButton().should("be.visible") - // this.clickUploadButton() - - // // ensure upload is complete before proceeding - // this.uploadFileForm().should("not.exist") - // this.uploadStatusToast().should("not.exist") - // } - -} - diff --git a/packages/gaming-ui/cypress/support/page-objects/navigationMenu.ts b/packages/gaming-ui/cypress/support/page-objects/navigationMenu.ts deleted file mode 100644 index a8fab10caf..0000000000 --- a/packages/gaming-ui/cypress/support/page-objects/navigationMenu.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { basePage } from "./basePage" - -export const navigationMenu = { - ...basePage, - homeNavButton: () => cy.get("[data-cy=home-nav]"), - settingsNavButton: () => cy.get("[data-cy=settings-nav]") - // spaceUsedLabel: () => cy.get("[data-cy=space-used-label]"), - // spaceUsedProgressBar: () => cy.get("[data-cy=space-used-progress-bar]"), - // sendFeedbackNavButton: () => cy.get("[data-cy=send-feedback-nav]"), - // signOutButton: () => cy.get("[data-cy=signout-nav]") -} diff --git a/packages/gaming-ui/cypress/support/page-objects/settingsPage.ts b/packages/gaming-ui/cypress/support/page-objects/settingsPage.ts deleted file mode 100644 index 40f6cf9bfe..0000000000 --- a/packages/gaming-ui/cypress/support/page-objects/settingsPage.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { basePage } from "./basePage" - -export const settingsPage = { - ...basePage - -} diff --git a/packages/gaming-ui/cypress/support/utils/CustomBridge.ts b/packages/gaming-ui/cypress/support/utils/CustomBridge.ts deleted file mode 100644 index 4924ecbbff..0000000000 --- a/packages/gaming-ui/cypress/support/utils/CustomBridge.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { Eip1193Bridge } from "@ethersproject/experimental/lib/eip1193-bridge" -import { toUtf8String } from "ethers/lib/utils" -import { testAddress } from "../../fixtures/loginData" - -export class CustomizedBridge extends Eip1193Bridge { - async sendAsync(...args: Array) { - return this.send(...args) - } - - async isMetaMask() { - return true - } - - async send(...args: Array) { - const isCallbackForm = typeof args[0] === "object" && typeof args[1] === "function" - let callback - let method - let params - if (isCallbackForm) { - callback = args[1] - method = args[0].method - params = args[0].params - } else { - method = args[0] - params = args[1] - } - - if (method === "personal_sign") { - const addr = params[1] - const message = params[0] - - if ( - (addr as string).toLowerCase() !== testAddress.toLowerCase() - ) { - return Promise.reject( - `Wrong address, expected ${testAddress}, but got ${addr}` - ) - } - - try { - const sig = await this.signer.signMessage(toUtf8String(message)) - return sig - } catch (e) { - return Promise.reject( - `Error in CustomizedBridge for personal_sign: ${e.message}` - ) - } - } - - if (method === "eth_requestAccounts" || method === "eth_accounts") { - if (isCallbackForm) { - callback({ result: [testAddress] }) - } else { - return Promise.resolve([testAddress]) - } - } - - if (method === "eth_chainId") { - if (isCallbackForm) { - callback(null, { result: "0x4" }) - } else { - return Promise.resolve("0x4") - } - } - - try { - const result = await super.send(method, params) - - if (isCallbackForm) { - callback(null, { result }) - } else { - return result - } - } catch (error) { - if (isCallbackForm) { - callback(error, null) - } else { - throw error - } - } - } -} \ No newline at end of file diff --git a/packages/gaming-ui/cypress/support/utils/apiTestHelper.ts b/packages/gaming-ui/cypress/support/utils/apiTestHelper.ts deleted file mode 100644 index 7f34ea2f37..0000000000 --- a/packages/gaming-ui/cypress/support/utils/apiTestHelper.ts +++ /dev/null @@ -1,9 +0,0 @@ -// import axios from "axios" -// import { FilesApiClient } from "@chainsafe/files-api-client" -// import { BucketType } from "@chainsafe/files-api-client" - -// const REFRESH_TOKEN_KEY = "csf.refreshToken" - -// export const apiTestHelper = { - -// } diff --git a/packages/gaming-ui/cypress/tests/main-navigation-spec.ts b/packages/gaming-ui/cypress/tests/main-navigation-spec.ts deleted file mode 100644 index b9a998cf33..0000000000 --- a/packages/gaming-ui/cypress/tests/main-navigation-spec.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { navigationMenu } from "../support/page-objects/navigationMenu" -import { homePage } from "../support/page-objects/homePage" - -describe("Main Navigation", () => { - - context("desktop", () => { - before(() => { - cy.web3Login() - }) - - it("can navigate to the cids page", () => { - navigationMenu.settingsNavButton().click() - cy.url().should("include", "/cids") - }) - }) - - context("mobile", () => { - before(() => { - cy.web3Login() - }) - - beforeEach(() => { - cy.viewport("iphone-6") - homePage.hamburgerMenuButton().click() - }) - - it("can navigate to the cids page", () => { - navigationMenu.settingsNavButton().click() - cy.url().should("include", "/cids") - }) - }) -}) diff --git a/packages/gaming-ui/cypress/tsconfig.json b/packages/gaming-ui/cypress/tsconfig.json deleted file mode 100644 index c58896952f..0000000000 --- a/packages/gaming-ui/cypress/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "compilerOptions": { - "strict": true, - "target": "es5", - "jsx": "react", - "lib": ["es5", "dom"], - "types": ["cypress", "cypress-file-upload"] - }, - "include": ["**/*.ts"] - } \ No newline at end of file diff --git a/packages/gaming-ui/package.json b/packages/gaming-ui/package.json deleted file mode 100644 index 22f8021c47..0000000000 --- a/packages/gaming-ui/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "name": "gaming-ui", - "version": "1.0.0", - "private": true, - "dependencies": { - "@babel/core": "^7.12.10", - "@babel/runtime": "^7.0.0", - "@chainsafe/browser-storage-hooks": "^1.0.1", - "@chainsafe/files-api-client": "^1.18.20", - "@chainsafe/web3-context": "1.1.4", - "@lingui/core": "^3.7.2", - "@lingui/react": "^3.7.2", - "@sentry/react": "^5.28.0", - "@toruslabs/torus-direct-web-sdk": "4.15.1", - "axios": "0.21.4", - "babel-loader": "8.1.0", - "babel-plugin-macros": "^2.8.0", - "babel-preset-env": "^1.7.0", - "babel-preset-react": "^6.24.1", - "bnc-onboard": "1.32.0", - "clsx": "^1.1.1", - "dayjs": "^1.9.7", - "eth-crypto": "^1.8.0", - "ethers": "^5.4.3", - "formik": "^2.2.5", - "mime-matcher": "^1.0.5", - "react": "^16.14.0", - "react-dom": "^16.14.0", - "react-hotkeys-hook": "^2.4.0", - "react-scripts": "3.4.4", - "react-swipeable": "^6.0.1", - "react-toast-notifications": "^2.4.0", - "react-use-hotjar": "1.0.8", - "react-zoom-pan-pinch": "^1.6.1", - "remark-gfm": "^1.0.0", - "typescript": "~4.0.5", - "yup": "^0.32.8", - "zxcvbn": "^4.4.2" - }, - "devDependencies": { - "@craco/craco": "^5.9.0", - "@ethersproject/experimental": "^5.1.2", - "@lingui/babel-preset-react": "^2.9.2", - "@lingui/cli": "^3.7.2", - "@lingui/macro": "3.7.2", - "@testing-library/jest-dom": "^5.11.6", - "@testing-library/react": "^11.2.2", - "@testing-library/user-event": "^12.5.0", - "@types/jest": "^26.0.16", - "@types/node": "^14.14.10", - "@types/react": "^17.0.0", - "@types/react-beforeunload": "^2.1.0", - "@types/react-dom": "^16.9.10", - "@types/react-pdf": "^5.0.0", - "@types/react-toast-notifications": "^2.4.0", - "@types/yup": "^0.29.9", - "@types/zxcvbn": "^4.4.0", - "babel-plugin-macros": "^2.8.0", - "cypress": "^9.0", - "cypress-file-upload": "^5.0.8", - "cypress-pipe": "^2.0.0" - }, - "scripts": { - "postinstall": "yarn compile", - "start": "yarn compile && craco --max_old_space_size=4096 start", - "build": "craco --max_old_space_size=4096 --openssl-legacy-provider build ", - "sentry": "(export REACT_APP_SENTRY_RELEASE=$(sentry-cli releases propose-version); node scripts/sentry.js)", - "release": "(export REACT_APP_SENTRY_RELEASE=$(sentry-cli releases propose-version); yarn compile && yarn build && node scripts/sentry.js)", - "test": "cypress open", - "test:ci": "cypress run --browser chrome --headless", - "analyze": "source-map-explorer 'build/static/js/*.js'", - "extract": "lingui extract", - "compile": "lingui compile", - "lingui-version": "lingui --version", - "lint": "eslint './{src, cypress}/**/*.{js,jsx,ts,tsx}'" - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - } -} diff --git a/packages/gaming-ui/public/ChainSafe-logo.png b/packages/gaming-ui/public/ChainSafe-logo.png deleted file mode 100644 index cfffdc4a8245eb62692ca59477cca53c72a83b0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23173 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 diff --git a/packages/gaming-ui/public/_redirects b/packages/gaming-ui/public/_redirects deleted file mode 100644 index 50a463356b..0000000000 --- a/packages/gaming-ui/public/_redirects +++ /dev/null @@ -1 +0,0 @@ -/* /index.html 200 \ No newline at end of file diff --git a/packages/gaming-ui/public/android-chrome-192x192.png b/packages/gaming-ui/public/android-chrome-192x192.png deleted file mode 100644 index cfffdc4a8245eb62692ca59477cca53c72a83b0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23173 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 diff --git a/packages/gaming-ui/public/android-chrome-512x512.png b/packages/gaming-ui/public/android-chrome-512x512.png deleted file mode 100644 index 300ed95cd243678f6a12cb4b7096e6f059235403..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15170 zcmZ|02{@Er8$bTcScVaX8YRh05{6WkWNc&Fq+~E-%hH0Bt*m98Fkik}sHBk06dBtn zOF~E~l9-~V>?unmTVt6lzw_vQ-|PRse%G%s&vT!1?sMOtdwK5XoHPGYjvkamZ$v{7 zBzeeupA7^Fk-)FEm=K@@+FMtF58=~hmSzz2I7wphgb29DoiewvgrKl(5JZoIAORrJ zM<6J8Cj^Zihaln|2wH#cZk4qW1R-K6N2vSZF*w{-@QcGKZ^kJr!Pm;*M+vv(zZWW? zgVJg%4!1=K51R0J_%GafGoZj1f5*ZDSH}X%f9P;4=&ba&|KEXIHg5qx|09C2TUXhd z5LF5b45}&(S60lYruJV?(%q@K<=eNt!2vs(8ciJS2&dgOkC?08%iJA%Y1gNZq_@qc zWRq>%w%{!-RKI`UYiFwtgm^joPH73z%R@8ehOWNOR$Gc%Xz-2` zt{Q$mTE|^A4E480NABEj1}4QB8L04hBm=#zo+mY}kE&@Awgd<6$bGn{`HcxZa+jI0 z%E5ixjvP`w4YSg#t2MHvsO#%)t$k*6DSFqvySt6{s2tp@y0WtJGeCSAm_aMZ=BO=% zA>o+M>B*Dlj`#26KBC;^E6q;Cw{<-2cCa7${QK8(!=L$2S`Uqm%=}zpyKAdWmVl9n zlZOxPqkGic^8z>G=gb`gAxJ_N{zZJ~iCP3iRL~*I{is3IMo}4!#a-jT3m}Alz)>oq z?S5!F1nGwy+Gj?+&^eyD5bNw1aLe1;g64E}*K1EyhT>_O$EVsuqXBtky0QIkeK9svRyshX~I6u(4)-J+Feoh4?Ln|HSOl=O!OO-#^hGej~!g59OYLi8U>3aheD~~Kdti?J&psXU!3GO z#1k4$mUD96I}~P6@p9g-J+w&!dsf%t1&6|i0&b<<*k)S7D;w{}@>w%gR@jq|-6OO@ zIsE&8C%Nd!i{WQEmVn5))ls=QiT6qWQ{2k13>Z*FJ&ZQF`NqAfQe`o^hY5OTP0ASZ zj%BpJ`P12Z-Ki7IHTEnuW6Geo$2cEzS!F;uloR?y)&8stl~ujC=s@G`cmHZJ?)GxH z27PEHR)2nTW4^r7Xc$4 zp`qQlaC*v`$ZNcLRL>ZwNGLoSo3(kB9&`AIv;UE>TWoSmM5#qlj!A6RYuQ*SaFf_@ znl$WW&r$@u^g05hB3j4p5E=+dS;An>-E4B;6ER%kR1pF)Hwd- zfZWsNM4Ft5L*|$tp`k_pZAI$DL? zfr*^%3%D{b~T2`12gz|Pd!X%i*ke&ZH}|LxH{4xlykY^APo;BIyB{&wayuIoDShg zt9q;lIIjz?7^%0)YSE`9=sgW|L6}Tf&HV(xZsdj)oP-4fLhvV?m8{MZ0E4Bo<@f8Q zb^0_jTKTWDUk?a0>>68x8NhAQ{PQt~8*+PFgAc-{*Xyd>W>NxM=FG4*QHDwbT`1U`YAGj3Pbjf7Rq|OFD3bpjCef!HfUSaXB$pUYE zw2I2}d&GR8-=@XqK^$zv(QQ^c(l<@-UAg`M;NW6CEU`K zZjmUpe4+uV`-gGhIrM@!-}cFIs^96+QzH5X|YVi+!o*1GKbgc8>BvKirJ*=3z=UW(E+aX zu~PJ!rdNFDMug2~0kD=R4Yc=?GK7*ptiV1n-KvK)QJ6uQDk8wd&e5+%?L&nQ$fYlb z4hdzmxe_q)h5^GH5n1CQz*iu3=}2HiMMIvMvcyYx2;ljTbQG}R!KKMFl7K6b@ixMi zLGjk>?a#fMQzmNugVJAAH(;;F?N>eEj+Y_PVO)}1gMT)WwdwA#Wj}gP3cas1+3+;2 zLV*Mr5<@u?m!oRs)k>0OaocC!fi$2MtCY~nkBW)B--AdOc8q?Ny4!D(U)6HBY9{NFD|7}9LvPS3=vS45*`;e7cW2#hoD)qLD|W~<UG(qOa6{2_GmLx3)?E9`Pb!P(@HH6pO9UT)QE;CCK8Bx;(6 z08;b!VmCTAt-%1FPZu@CWRATwn%|04YZ7R9)|Q5FzDY*e+`V*E7;_K!(AAyu>dGa@ z5vy$N-&blGmK+zN+ySxM*C~11sn;$R{f&hs<|m<7by{KJRm3_5P9*>=iM*JG$S#tL*bcb@eRTH z0)8hK+7IAr3GHm1(2V5Q!zriDvO3nPWs{2@dqNs1A6?ct7ev;CO73$Y0B5wFWE$+Ea2|x1s`}W)hdq6-7-y?vukoFOILVu$o&a?JZS?|DpIcKM;%@6{l;Gt?4*oE^Z`cX(6xOc~&BxP_h=rZb+a( z7Zla~qu@BHw8(^n?=1A59{S_5H0vh4-tofVys`l@+oKlb?X(F7qYo4ZV)H-AYoh3X z4K&vWo(LG&3D34gtY~=+Z(OSs4KydejVS&k5S{bi;0U3_cFfcq3mgg``Z?0BR2j-i zIzDv?GJhLk*nHwu+C-f=wlkfyPcD7)lj0r7&G#OvZ5FvOG=HpM_ssT8CF7;Xr-nD; zN|>KMo_IKc5B?fUG`_UpGx{dtGU`#I|J~Y0V+onwJuS|*|HPn;1D7I3ougHRbT>zT zJ-*4YnAdvBljFVRNpbY4tUb{O^gL_z=s&FpzwU={6k1yNXQ#iI@~pZ|9}2Ylh@@{7 zsYy}UO)q>D{eCF5r?%y({sVwzZTxjEWE0sNOnFFczW+LjMt8`hbUQ@xdgtqv#uG6yrW_A}>bE7%OBBNe; z)E?A{S022X7=7a_Lh0OO;CoA_TL0P@o2Xv;Vx`|7q;op@YFzuP0g0a((cbNquPG-M ztfTdco&{Oiuza?UpZY#*sfu+XDB?WM&6mdALn}IRC)4CniQ)4zKasZg^ttowzU&*? zecGhv^^1Kff?!Lb5YDSBIT6=w1RfmQ5wpOggB}KH6W8T1Yb6KA>)K|i$i{<)Z7RKS zY4brz)6W)+Ad^x3ygMy(=2i}g+lP3uR&#|1e>&?M?R-_xVk@dB^&p7DkGH8GD?VT; zGx+XzZulc*iP8St$9DGGqKYZQmbi$Hc#=%o!~uE=YPv1F?%TmDnq?c7xA!&&Z@;qm z3_PDhsVroS)B}UV+6~2vT~WE=DY3h7nb{XXaad*8{J0kz#=V;@sbo51ER7pH^4e~$ z-B?ChLh-1-@za~c5$4^>ew}HSds6NG^hGHoq_K%Ett$o-vd$nK;(@K-VmO9V z?V0J3#f=A9W#~NwkCY|CelF`uYjDNN%nQ%jV?x=wTZVrPH(b-)q_Hb$y>W@!D*`)8}~^6g!q(TFOPQ3-C~=KZ2h z!x5ZSGcuG@ZLGG%v$h(MZB$mbL~vCOG2Rc?#3lgKEd6b5#TU{hu0dz&25ZiAwd%e8 zrLvH4qe6*^dg=#$!2`D^y| zM$MTXA*S4_ji#?Z`z>EAWrkW13b)oZ8GX4Y1J!`c~lE>CRxo|3qYqs$Gp5-XJKW(BGQcrs47Ik%#W0UT@{JJ1^ZeY*& ziA^dqJxa`>!=}h!PN343i`;Wnxf}pq{P`;_a~OKrA?YERfvbhFSwro{7F;vOC?~(+ zs&6m%#GoaS=7#xe*@3<@>Tk{B6)OXmZXUXdr7=X2*~XviuVIvqt%<5aDdsCI{-&_H za)dh0MSAtS(Bv(QdTc$0tGZrpFq$#mgbUUd|B#UBBn9`KObx$i_pBupO>ej~eWnH& z*DRi3$Wv4beQp-73%!#{VHNXcFPkRjh9{fsq`1AJv8a&C_jbYtj}zk37mkW@-2XQ;YD-oa$PU@_ckIZ32ln`^>c~uR-U_H@D?YdHijS-7YjW(opptI#blt^5EBW z{jJA?l6q)jrZX-ZNedw~zJJZXfA+^6C-ffPK}WMr*Sl-iD!^xsdCVUwmY)#M$Cgn0pN%GpVSC*5IVEjV*3rLToMp(Yzu%A-H?PkQcin zO83H#SGM@iEur$zEBQqqv+~}Mxz{eupsdpAQ-L}_K@h?*{B-XD`h;h#1SEEDvh;%T z*J0Ip-3d$yWEB`@!_3dTn=87*7-{x#520UtGg~~4J z&pSFuc2%0VkwWBggT;R;t~uhLwuE}oBSLAxqt41-LFO@SAaIb``wER|Vwy9G8r!Axl1mT+t*TlGZoQVvPS7i6)EriI&m=76l zCeg1m7#S=>UJ-<(vV!CI_V1zQsG5+x%(3!RiAzEBNvgSHbh$abN-E0PkQX{>$OAcb zO5=yJAEb5#ErVNV?`-U%>O<>QtA2ZH$46W(>5^W6~hcXQq^Hp^nuF?R7&i9ICf-vbQ&wG7m zWmM;dwfhw4FW6jJ1X6LaDRV6LPUaY>l~;nTumQ~xFNNZs7UVx_4cE!!lxBGdN*Dd;*q=f4Hl*^;_MBcGjtrO#77$*9QXRS5DNm^(Ai{XJAStgld zW&p#Euypb5UGPPJ`;)1xh5*?y7`7B|#kum@% z4)aY#6`b3TW`)!e&>r)0Cy-^*3@f+({me+&}RYK2N6VG7XRtXr}_XF z_v;H%Q1TeR6TA)CBI0t%?Tcf@{fLvpRi}pq9#*$DB0)Xu;TFx1;x?7?pIj(TYz-!Z znay3J`E*FWqlQT29YT<)th;Ic$c~*vMkA=}iMvP%gp`RR+K3Nhb}E@;-y!ur2PcTdXuSrJIrFOC*?+4<;$Sjq0WUN?>5>BV5UfnkCJPesHyf*pAmgRwTM{%pA#ZN5< z-YE;rMBxS%{&ZL~0^DoGDXMgwR=!nFWvd9lHu@Kv{6nWtn5|6ubQIy`S!x>!PCluKc61HnIHxZcZ%YS zuoj?3hsu|I8l4=lEp%aE+8>|=2^q2PI+hV^+ZQ`Feja(NJOx<)gW^s0#6)5pwT zzx%u`(|a$7B`>d`3@G@IPeVnrvwg;fV2&l?g)OVc42G50b|6CHjckyE{-|>otogK{ zpjueXwqx(&NmXg$=U`3|Y`R|9bl*y^TiL3(lz(1HtQ3RP15a3CM>Bw)H6{vEx-=q| zxO?0=9LhF|i;5ihhXP)K5u*!V66$a0nxV#8`5&XZ#c+f8AVH0S+0rKfZ*SJsc{y#P z5u9oI%#+^lZl`8X$qnosdFMvYqXYtp`71u(iv^FEu^%dz7g=8_0LYe%sBgLCOkhl} zrqjw*&B-klhle|5z`N7v9U#cd%~}fTu~GrUf~mA0`b}~$9d@X_D@0WZ;?rPGBnT9i z7SNm9&+GbeH1W?EcxtSjDNZsbv1kd9%H&>y5$=8l$T`c9h&5gvfO$jL;U5vjXD|hk zPk9TJvS?>fwflT~zb%6I2AEg?6F&}2WGsk|IG=(*g!pRr39I#7IU+^WJzcAhA@bDV z_nk#xTeZRDN^dSAJ5W*xat#pu9Cg!@kAX zAgx0ZL>Q>^#VON)F$2oK!-kG6+YWYAiVBHYF&flgO{{E3rl^me-($r9`q)NC;NT^P zYlN*UFQRTk9?cf-#EI@TCplv9DuzN`l6i#QN+dExL!-P1r3gl7h(&B0yZz!)t?9q> z+?5v-NoBe@^IgJf$L!ATZH-V4;pj!{d_LAaAL{H=y13&YHr*_2A6@$&Nssqt2D+X3 zJt-Ic&zoWekNd*A`SAl280OtGE*`sfI1g8SEz%k89XLnO?b;+T6jt-^b~(Dh4CeHG zdr)6n{^L(>C4f39!KEfo}KP+4*z=JXaQY;JS(6yiivlF|IaQ^w=?{Kf-r`efl<&+)+5fn$IKo(*k_oBDW)&#--2O!^Bu_&VONy4l z>=1g2{h#+O1JBRWyh4k=a+T7&iS+OG;e6LQ0oDBR z%gcK&3$stszt>xRQ?yASY>j?ndjz#ELTg8&3h5&9HyTY@~Tvsfe^JG!quK-6Xhq9k#bUSUD ztyd$IDOxd{-dT!Mav({C#SSJpAkgC%%uR^YT>Zw&;9a~e9bKLY=0qbbbmqZI`FGp$ zqSP7;a{yr@YASsr%H%wCj28+ zH~qO7?8b;gq6mT{uC(3?PY8;%1xDV8Yp=I5BXs-;JB_5ul7?cl$W*WA{8nN1Cc2TR zsS2CR9Lp4^s6&x68d>#LLD;Z})SqLA=mW^#J;h6+rc=}ro2qGcI|RFqb*DBfa%ux7+J2V&)7n3?ltV)XeRfqwD*e8^~e@V2TZq$CH}s77b4l zvc@B+h9p(r$$EJaRvreCuK*w}4UG#;McFdMC?BCEhfRxjO<%qGmaRd>BlppV){Vv(6c%+?bik}s1JY@? zM6fWIx`F|-ep~}Pc&Ul+$??Qk3TQ@=q?P_Hs(9cR#bjeXE8%ScY{tC0w$YLCT)WQ^*cB_xy_{N|AHe2b`)$=naASNx=o;fltxzS$$yAQ!RUU-3 z5a9;Rd{8=%j6-s32Q5Vu^ztcN=$xTJaf~Qwi1&}*r(E(O$f<621Wyu!6!&yj9m_(i zKwhCkgL9&Y094ah?_4LD$Nx*y>uB7ZkpPW zJg)cgRsqG0-jFmrFoP#~LYA9f8c-|=9n#F6n)5T9D43fDb6bc4w#pH_Vk6AElOy;~ zHo)ZX3+hc9%8Sq}mqhJ-j4Gk6A)I1Ud$D9Z>E_LYzlQs(@}_G7sB8_A#n`wYI9j+# zmigxUSKA8Q-a7x5B^xRz1hq{{Pny$xKtQx+Z=I8iL;Kz?Bxgcre>$(l+0(b(JbeRQ zWCqe(C7}a>n@T<6A+Z5bg7ONOc6@Q{2%9`kW$TdwhMmF_F*p=h86@6EOWLv?Uh_Om z|ITw*x)+H2j^r9*!w@06tJh#Z7^W9NH&7=nvbrMPGm=Ipe6k{WW)Jn5m+imV+)Z2 zrLW53j?h!EUtV$!yvrwt#^h7hk{Sbs!#>U)CesD^T=f?ZH5O_-3);LTv(Z1G;Blay zCcW(NC~hERTAQu_QlOA|?Q9OeW{0pCgrhMqRpKYNd8*t)zk$Hg>{^@=z`{Q1#J7-v z_m9pIwj#@F^)}C6v!IipbO3`R%^Wg!4dwcF?gx^QuXSOWWF3hA3k;-yfw!NYubw0X zNiuya10&m~fJgy(T;QNj(Jlxt%5XY_5Xx>CmtvFm(ne%S(-LRu^lgxFqRFxq573fS z)@4CXE&Dcvg)l+gS|w;b+C<$0VKEHOcSdX;{$!B^^cOeAdl$LE*9y!sOK#z4fe=s5>#y_J9TS>Qxl`CH5uJp2Z z%9!)jJ>_LuUmuWPDkRV$m&11!dZ^!|!PLKYK11g`trwAEmhL#=mv07{U+%*DY`%U| z_XJh#o$!V=%q*kvs@nxY^p2;BG_PcI&e>;s5nH2a-CE`WX8B!pdIHszb#sS5DB!@7`LfcN z->z*}L}B3mL7PP%3Pb+B`nl4?^y1H&d-BpakC`R}jqOC=ynMEM(siKv-oiks0UaS` z;HO#uFI%9vp>>ouSs&NsVo4B| zsW9YNFz!OcaN}P=yI<{R*qK!vj-;~MPUt83P_xNe;92?V>CEA0vFPm_`jcuCV}>h* zaaNdJ8CX>3e7P>A(D2RX=YXF2?4mH<&;BYpO-Q#cu&7PGCGzJHO}S&0HjK`E%!>@q zF9dfXZs-z`M`cNgY^n&nmJ^2pXi0BOw`F*a(RO01D$VImknYl}GpQ94`COl`ug8r} zsk0F2gv_yZ4@@vvCm|br|K(a<%~}B-ArSEQoDLV;$C%~P#0D$_owCs$A|or=qt2l; z)|H9#C1^!N9#{V7(DiX7O--3(F-)BDx3OkjQA#T$$L|qFxcznk@8v=x)&7kKd})r1 zfL~i*+T**Qx||`Th%+~V!wLW^pv|xSeT+Pc9DR9W?o?Oh)1{*&5J6a>Lc@Yl0_i@H z&ih<^`ZXALxmLmkuR)(y@+os`yHZRB!F`h2B#O(J*-B+OVqf~d?@T7{(-k+coQa0dT+3M$!DTFwM3W;2D9^%7p z_pn-bTZU7u@7~3@S@Fo7^mSG_=u3GRziz)Cfu`I>u=6xdVLYOah>s4*{3&(tg5Kn= z2j@YK6NEu5EIDfKq^GoB_NL-@V#6+NtSC*&p(C>Ix^_Q6@2BA7p7xv&!#0a0%YF}# z{GNfDQf712M~1Fr2q|kpVm69aA2NJ{WMh8r??X`4c95D6KN(Yq`LD5J?OENB`i?Ig zf3exsZa&>o&WvfH>=p&1KFmWZ>j^;^GI)ZPhXBQy=9NLvy$lQ><;XY!eV{h!%~)d7 z^KMh|RC>y~#4*D)G_NP;zJ;&}?xM*z$OiY(W_hril%RW@3Po`$i~)hvUhLTd@}Eb9 zGAC)01v*C?TP0CUmImSbIqMZt2&}CvRe^Ic&(L38fBSAeY$hZIwmPG2C2P^fdshwp z9NyyV>Z6t>6vLjOv^OtVhy=D|fvpg*_r$|V0PK#J^c|8TF^=yLytc-xg1zPGcM)9^ zup@tds(1x`5s}SK9$RqxJ8Jg6KL$GuPi6Vn1yL;WJ?IR48sZMR-u1U6lgxq4ICb~Y zV}F1rSeSj;Rl zz0457fSqE()(#CSwgfg|+|y+XYnF&Nwi96khspRU_2Xd2`uhU(q%QA(9m^6I1F#%3 zA;bw`jt_O=6Lu7EMKQ3_RxVUAFDGU(U24aYaXxIb+yfl;5$v%3r?6GhpKnBn-ChX!4C6)l7V?k~w01g3)ODyU zO4Sj9|J2Y41eztigvJA!D`dCIr9{iAHZN;`tlv z8^ZUn7+0f!TY9UcZy{8?Bg0vzFJmZe0wVmD9~qL#2Sy9;i>S~94!GtaSpu8KEyax$ zr;gg;FV2XOx?6o59;1^Lg_@~oTI#|z zCYilHGGn{OOBxH8HW6N4fI0gg1|n}F`ih-lcYR{Z3TG15smw%{hG3Dvkg`ke8(A4grFV@O85y~7Y&^3uU24x(J!u>}aSzpv4*QQiaFd60tNBk@R@sMfgtIvjNsCxRJQ*<`USs8^t2 zu>Y>!$Rm*Ifvfsg<#Xi<(KNXrhZpwvj;EQ=Dk=%s#DKQYaoFhku=RYEf)W5U=MD2I zDJ^sFI%#73`yllC1sZ>tdm$|OYL_*`9orc%LF_JYVNiAm9-Z0x6y0#i-a<%eZX=2s>86v`eV`MwIcV))#hTxmkgWc zr!Ij9RZk)nPEebJp1TD178ar)|8$#);iIXy#~ol#bS-jbWdBfn@!7(LW%Lc@jD7Jo zq6?*nWOIL-y%tKy^0s66c?eX#=3|`o=eR~Qie?PYWw8^B4m!QW=GhX-0`dir*_c9A z=y%H^o#gq)ajj=wzY$t>xDsh1t|0k){vT-Gye_BkLG^J0l{Xmji11ta{HdfrdCC`M zQ`X~-!&CaFpRUEz%uU*KTpJry4N1>o*`7!fpXYJywM}|+T?Zc+ZG-Ry7-x`XMxY$> z^ck7C+2cYcauA|m6~edU=cwlOjXli`lmDud-c#8nOrZp{akK(PNrQfF6+}!BM8Qv$ zJ&R@^`{`Ww=Wz=nY_23yhzf_G)a@>V0`8ZLT?5q73s!#~Zvv}lCB{e^{&`D9B)1-{ zRO!?%OIX}$<^M5l(SmAhS%yr)Z?H)Dx}2SCq#tZ*r`vNz@c1qimP^*SL~YWCeP)t^ z_wXBCx1h)=H>l`Gj{S4CZL$I9Q9N#aF z;h>EhjzxQfj2G3QEzO1>DtK>?(sYBhIJa~QNOJ)0TpeDtakLevpZshYtu+(5<0<+~ zpzQ=Wm69}B6NCbXtX48^fip1^C_7du@6PCfRJ?uU9 zk4GQ10f_{Q_)y3QoZMoh(x@W`-Hx|f4u^0MVBue^|Ar$7a4EC+HH7RI%O0ilfnx!C zPj3)mdJ%$Po959*3Rd*55$7+7h&eF&0iI^@DXU#k^phEZtzJsvz|bJY8VW1gDLOv_6W5qF# z&~W}j+Op#BTs{!KCMpJsD+W^whbd>2770a;?)YiC3h z8}xnX#>07rym|!E4iDVppW9tMiYKI^c7G}%I_`r7^k4dzZaH);YR6>b>ChcBhdqwa zWAeCBKg>`fN^|vXv#uek5@@br90iWgOmOVM^c^($W!HSc25{6cM}fou{_B7GRb!-I z=Z_mV2nZ*K3s64DI1^WW()=&Zelyj7_qkFF#bk(3vEWqJE!7cRNFd}YROM=8vz_!9 z4#P~75u8%*7ee@??FQ0Q__5PtI>Ll~*fmm1Jx?A$4)RZN?%RkRNd(2kbz+!8bmsG- zIty$NMbz|9uTo{ep+m24H)}&NG`zFew+ORu-8gbSydCZzUEkNyZwI;wk0KJ1V<;%t~f z-;_Nb)DKJGKuCAT(*7?2leW5W0<2ihpBW5c2eu2}PQftQ1mX2TU`PE?V7sw>;aj1< zl>>OhfDW}4?Q5CIaLV*sA4Jd0`1SOZ%T~Z*o$^ei-UzPmEjZD4C(M@YDUEdBM9+ne0C-NO$_;IJM701e76L~s9Tp|x4* zaNzGr^Is`ew;Qf<`s?S*#^hFL)_j94D|4EvHqbvD z5!fsH9$^nV-nHAx6NfDXZ@w50tTkh_-Xmw2mB(foR{VR!5F4aX?i$=a(C*0SR{9q_*rlQz9#h$c zE&3l+R9uL>2GvLCtCy|uzrhYnY*rXm&2>m&{KkzZnPaG}%Foc)y+%Oym`ld4sJc<#`lli@vf16~7OQE?KrXe_0Xk(px8h#)>yM9^Y?^&jy@T zR4ne@o&PTjhk1f<#=<{!+523#wltA_2|>up<-}MeyA7*_dF>{ao6Y?o&c9Yg1mRoY zEN(p3ig8@KFY#D^84o<)33Xk!3NZUx1Dl(W8u@5MVO>mJcHDK5e2P7`?a8AjTD^S4tT1zKXy7J)^W;(nBAbpxu* z?^J&B4}r#F*N-oiqIRr|OH{Q+z@tB&=l!678)=T!ZjM0JWXENCt6{59d1TQv|M~j1 zZN25zHFTaJp^X(%a>UGmz1yESqDcDiLCz0qw;>r>^ z`P@r&Xi2|}sW4x=j|5%K8A(8g#Tc|>EsqsHxmdINGNB`M>7(ulEW9n_2$gL>1b|&8 z1hL32I(?IWB`u+`w9+PmU5nq{N4pe!O7mYlZ1K7BA^IYlQoy&rqWOqT&ZK%pa?-!K z*}Q1gqcvrx>-5cE7jZ4N#0F>?&lIs2OhRdo+2q?)^VSIemw#0j`*vN+v$k>94)qhm z>4doZWQ4K=_{Pom;Hu#ua31>a)B!$cOwYas!j-bg?{dR8QpJXE$R3b$0M)0nH6C1m zt$#vXAgq>WeF1m)eFzO`n~zCF*U&dDP6EZjCN^$_p6Lx%q`h5&zRi;6zw$c^NrX62 zjIu-_SUwTKfUzRB_^ou{isjZUnH%V@P(u^4pa|VlZ;f9ElY^~U*mc+!Py!Hyn9r5O zV98Jd@I?nK5=yu(V&{wvK*9I!*Z@(u&&h&h4brB?NB0Yol}XQBGj3TjTJDSZLAy$x zH|LWNd;teQfYmjs(P^4&ohg1wx864kQRHo1z7?qOr&qp#gx91yv0Ni%z?W&OyOC5o}l;t3zmn z6giwq$#cM#inS1j*^W}x@T;A{E{zZj$W=m$7!H^xIG-X5v;CM)7GGr>MgzMxK#MJ( zdiD`?F}T4nU(jumkNX!K5QHK8Zowk&UG3W66Ze(Sp#)0@tPD>LY^V6M)wI*V-hhB$ug>O?k+A(8d}&^yupv&C+q1k^RVcU&b{Amg4n0(`s{mwm zZ~@y3M}9g33XPqYAbnZSo>2xY|LW`m@+kmLp)R4JRqwJMl>vO_^2cM0&y}8!1qGO? z6OY3RForx$JAW*!pPe_h>Qy}$&P+WB4EJgybEl&ja4_}{e+LhV0&kPsAq1`_^HA1Ck$|1$@_@R+}!NG7Q4|5AiVOrif>YXcgDeNcT8 ze5eHNcL;Jn5#&KU72p9rAnl#nySDGt->$uzx^p*i*KVSYw#Lq##GN}IkmZ{He*=8| z-OqSl{C^Mlpu`CQ17zVDJT9E^B<=@)tUNsfJ%S*EosL&}GeGNx|Fu%iT=4L5*muU) r!!PiRzaO+mNBhe2Lz4e@AIJYspIv)iYAO$dKG324NB42a$7B8v|E9D3 diff --git a/packages/gaming-ui/public/apple-touch-icon.png b/packages/gaming-ui/public/apple-touch-icon.png deleted file mode 100644 index cfffdc4a8245eb62692ca59477cca53c72a83b0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23173 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 diff --git a/packages/gaming-ui/public/favicon-16x16.png b/packages/gaming-ui/public/favicon-16x16.png deleted file mode 100644 index c515dca67ee594461933f632592ab7dbe9e180c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1438 zcmZ`(4NOy46uz%OQ5lo5DGU|&BZ#0v!^mSs4hGMI)r# zkB}QuN((|e83+wZ5MmuiC~U`xt7}pa!hD&lviTH1iAa)NT^+C2bF^AcbaZ5MGh4B3 zo<@TY4-0PJUJe+NR4$8;?&(P#8A-EPI3^SK^5rEYiEjMLGMhO)J$PRq%q#l)ITaQ2 zHJVhbm8()E0rA>3=D1U!)3F~sSTQ`D_V{rsB!O*jYiJU5byYLhRMhs z9OTv3E(GcRe!RJPX;tMy02>Fm&!6)Un*8KRYG-G%Ue8r3<62vj&1UY?r?}b7)9LWG zHdaf^QiFk`(Xc@RMqS-vgkFQ1tybQ*H3|9oQC2H|U;uYG1nup~D%DcEoo_O6bUF@z z&!0~k84*~m9H_jeCIK=JAEu6u3iNvX#S6imJ5&?8x>BA!!<|k++0LlGJ{-!n+xWe` zY@3ZYVB{DK+)J03paoSy&A{#L#bvTN&?Oih9Vu`=XjN3iAr!4vr>ND-RVwJ=2V-Mt z4hP@m5*m$M;6f`%GMykq!w$aJn+`{j@EK zG`tH*uC!Qq&{(L=;}JQXaI9c-l<)JUyWJv-h3j?+|F{J{G%{ecGfF$0g>B`g;Puv-MK=R1vmmWg4%3?o_%zEGF*|<`y9o6iOL( zU%STx$v}lDgCA%NjG%|UJ^Pm9DMi{|D9*;zwYzE{ri*xZcKCxNbvK8Gqky}&BJvx; zd&;%i3N1APXvtj{>S7XOi$6URU*>zpZpVt9uOC8Hsp8+Z9PDlD4&H~5y|8N0>IQLq zS*hO%+VH#A&0%|dpQBhh9ZR{~(th|ZyS}!-uEs@9`Ig@Uh!mfuMYn8HF zu()#tchVnqwwtD-f}ox!TB7N&_cM|)b!OzO@6p+d8xnR2aY;zsLTFEkG)E-M$Uw0W zPeK7$D5Cx$7(57zK-7-|B9xBJcok=1F@Irb2z?<()MZeZbzsyGf>G-~J?$jz6(Z!M z-`_C>{qpQlF1RQKKS!~7qe9BcE0lsmiHyXA1&k#N5}DZyCM$u-T9g>aV6YgBQ=I8t z{~~PNzF96S{eQy!*^R|O2&ELHC2|>y57TOytVpUr%NV%_bl<>k*sI-4d5N?jhbP}E k-Bu*uz6~WXf0<}G@Lx#oKOvHh;gbP^M0_!?kt5mnJF+fuHvj+t diff --git a/packages/gaming-ui/public/favicon-32x32.png b/packages/gaming-ui/public/favicon-32x32.png deleted file mode 100644 index ee6522854f0560172530a262b7892a372dec33b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2595 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 HPxk)+bR~Wj diff --git a/packages/gaming-ui/public/index.html b/packages/gaming-ui/public/index.html deleted file mode 100644 index a955172684..0000000000 --- a/packages/gaming-ui/public/index.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - ChainSafe Gaming - - - -
- - - diff --git a/packages/gaming-ui/public/manifest.json b/packages/gaming-ui/public/manifest.json deleted file mode 100644 index 5bb42011c2..0000000000 --- a/packages/gaming-ui/public/manifest.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "short_name": "Chainsafe Gaming", - "name": "Chainsafe Gaming", - "icons": [ - { - "src": "ChainSafe-logo.png", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/packages/gaming-ui/public/robots.txt b/packages/gaming-ui/public/robots.txt deleted file mode 100644 index e9e57dc4d4..0000000000 --- a/packages/gaming-ui/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/packages/gaming-ui/public/serviceworker/redirect.html b/packages/gaming-ui/public/serviceworker/redirect.html deleted file mode 100644 index 3ed34e79f7..0000000000 --- a/packages/gaming-ui/public/serviceworker/redirect.html +++ /dev/null @@ -1,316 +0,0 @@ - - - - - - - Redirect - - - - -
-
-
-
-
-
-

- You can close this window now -

-
- - - - diff --git a/packages/gaming-ui/public/serviceworker/sw.js b/packages/gaming-ui/public/serviceworker/sw.js deleted file mode 100644 index e49ffdfb2b..0000000000 --- a/packages/gaming-ui/public/serviceworker/sw.js +++ /dev/null @@ -1,312 +0,0 @@ -// This service worker handles all OAuth redirects and calls, as well as parsing -// tokens returned, parsing said tokens and communication with the DirectAuth SDK. -// For more information see https://github.com/torusresearch/torus-direct-web-sdk/blob/master/README.md -// and https://docs.tor.us/direct-auth/integrating-directauth - -/* eslint-disable */ -function getScope() { - return self.registration.scope; -} - -self.addEventListener("message", function (event) { - if (event.data && event.data.type === "SKIP_WAITING") { - self.skipWaiting(); - } -}); - -self.addEventListener("fetch", function (event) { - try { - const url = new URL(event.request.url); - if (url.pathname.includes("redirect") && url.href.includes(getScope())) { - event.respondWith( - new Response( - new Blob( - [ - ` - - - - - - - Redirect - - - -
-
-
-
-
-
-

You can close this window now

-
- - - - - -${""} - `, - ], - { type: "text/html" } - ) - ) - ); - } - } catch (error) { - console.error(error); - } -}); diff --git a/packages/gaming-ui/public/site.webmanifest b/packages/gaming-ui/public/site.webmanifest deleted file mode 100644 index d3f31c43ac..0000000000 --- a/packages/gaming-ui/public/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "short_name": "Chainsafe Gaming", - "name": "Chainsafe Gaming", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/packages/gaming-ui/scripts/sentry.js b/packages/gaming-ui/scripts/sentry.js deleted file mode 100644 index efa38ef60a..0000000000 --- a/packages/gaming-ui/scripts/sentry.js +++ /dev/null @@ -1,37 +0,0 @@ -const SentryCli = require("@sentry/cli") -const dotenv = require("dotenv") -dotenv.config() - -async function createReleaseAndUpload() { - const release = process.env.REACT_APP_SENTRY_RELEASE - const environment = process.env.REACT_APP_SENTRY_ENV - - if (!release || !environment) { - console.warn("REACT_APP_SENTRY_RELEASE or REACT_APP_SENTRY_ENV is not set") - return - } - - const cli = new SentryCli() - - try { - console.log("Creating sentry release " + release) - await cli.releases.new(release) - - console.log("Uploading source maps") - await cli.releases.uploadSourceMaps(release, { - include: ["build/static/js"], - rewrite: true, - validate: true, - }) - - console.log("Finalizing release") - // await cli.releases.setCommits(release, {auto: true}) - await cli.releases.newDeploy(release, { env: environment }) - - await cli.releases.finalize(release) - } catch (e) { - console.error("Creating a release on Sentry failed.", e) - } -} - -createReleaseAndUpload() diff --git a/packages/gaming-ui/src/App.tsx b/packages/gaming-ui/src/App.tsx deleted file mode 100644 index ea78e7f068..0000000000 --- a/packages/gaming-ui/src/App.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import React, { useCallback } from "react" -import { init as initSentry, ErrorBoundary, showReportDialog } from "@sentry/react" -import { Web3Provider } from "@chainsafe/web3-context" -import { ThemeSwitcher } from "@chainsafe/common-theme" -import "@chainsafe/common-theme/dist/font-faces.css" -import { Button, CssBaseline, Modal, Router, ToastProvider, Typography } from "@chainsafe/common-components" -import StorageRoutes from "./Components/GamingRoutes" -import AppWrapper from "./Components/Layouts/AppWrapper" -import { LanguageProvider } from "./Contexts/LanguageContext" -import { lightTheme } from "./Themes/LightTheme" -import { darkTheme } from "./Themes/DarkTheme" -import { useLocalStorage } from "@chainsafe/browser-storage-hooks" -import { GamingApiProvider } from "./Contexts/GamingApiContext" -import { UserProvider } from "./Contexts/UserContext" - -if ( - process.env.NODE_ENV === "production" && - process.env.REACT_APP_SENTRY_DSN_URL -) { - initSentry({ - dsn: process.env.REACT_APP_SENTRY_DSN_URL, - release: process.env.REACT_APP_SENTRY_RELEASE, - environment: process.env.REACT_APP_SENTRY_ENV - }) -} - -const availableLanguages = [ - { id: "en", label: "English" } -] - -const onboardConfig = { - dappId: process.env.REACT_APP_BLOCKNATIVE_ID || "", - walletSelect: { - wallets: [ - { walletName: "coinbase" }, - { - walletName: "trust", - rpcUrl: - "https://mainnet.infura.io/v3/a7e16429d2254d488d396710084e2cd3" - }, - { walletName: "metamask", preferred: true }, - { walletName: "authereum" }, - { walletName: "opera" }, - { walletName: "operaTouch" }, - { walletName: "torus" }, - { walletName: "status" }, - { - walletName: "walletConnect", - infuraKey: "a7e16429d2254d488d396710084e2cd3", - preferred: true - } - ] - } -} - -const App = () => { - const { canUseLocalStorage } = useLocalStorage() - const apiUrl = process.env.REACT_APP_API_URL || "https://stage.imploy.site/api/v1" - // This will default to testnet unless mainnet is specifically set in the ENV - - const fallBack = useCallback(({ error, componentStack, eventId, resetError }) => ( - - - An error occurred and has been logged. If you would like to - provide additional info to help us debug and resolve the issue, - click the `"`Provide Additional Details`"` button - - {error?.message.toString()} - {componentStack} - {eventId} - - - - ), []) - - return ( - - window.location.reload()} - > - - - - - - - - - - - - - - - - - - - ) -} - -export default App diff --git a/packages/gaming-ui/src/Components/Elements/ApiKeyCard.tsx b/packages/gaming-ui/src/Components/Elements/ApiKeyCard.tsx deleted file mode 100644 index db489b7d8b..0000000000 --- a/packages/gaming-ui/src/Components/Elements/ApiKeyCard.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import React from "react" -import { AccessKey } from "@chainsafe/files-api-client" -import { makeStyles, createStyles } from "@chainsafe/common-theme" -import { CSGTheme } from "../../Themes/types" -import { Button, Typography, Paper } from "@chainsafe/common-components" -import { Trans } from "@lingui/macro" -import dayjs from "dayjs" - - -const useStyles = makeStyles(({ constants }: CSGTheme) => - createStyles({ - root: { - position: "relative", - margin: constants.generalUnit, - borderRadius: constants.generalUnit / 2, - maxWidth: 250, - padding: `${constants.generalUnit * 2}px ${constants.generalUnit}px` - }, - button: { - marginTop: constants.generalUnit * 2 - } - }) -) - -interface IApiKeyCard { - apiKey: AccessKey - deleteKey: () => void -} - -const ApiKeyCard = ({ apiKey, deleteKey }: IApiKeyCard) => { - const classes = useStyles() - - return ( - - - - Id: - - - - { apiKey.id } - - - - Status: - - - - { apiKey.status } - - - - Created on: - - - - { dayjs(apiKey.created_at).format("DD MMM YYYY h:mm a") } - - - - ) -} - -export default ApiKeyCard \ No newline at end of file diff --git a/packages/gaming-ui/src/Components/Elements/CustomButton.tsx b/packages/gaming-ui/src/Components/Elements/CustomButton.tsx deleted file mode 100644 index 3d9de50746..0000000000 --- a/packages/gaming-ui/src/Components/Elements/CustomButton.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { Button, IButtonProps } from "@chainsafe/common-components" -import { createStyles, ITheme, makeStyles } from "@chainsafe/common-theme" -import React, { ReactNode } from "react" -import clsx from "clsx" - -const useStyles = makeStyles(({ palette }: ITheme) => - createStyles({ - root: { - "&.gray": { - backgroundColor: palette.additional["gray"][3], - color: palette.additional["gray"][9] - } - } - }) -) - -const CUSTOM_VARIANTS = ["gray"] - -const temp = [...CUSTOM_VARIANTS] -type customVariant = typeof temp[0] - -type buttonVariant = IButtonProps["variant"] | customVariant - -interface ICustomButton extends Omit { - children: ReactNode - variant?: buttonVariant - className?: string -} - -const CustomButton: React.FC = ({ - className, - children, - variant, - ...rest -}: ICustomButton) => { - const classes = useStyles() - - const setVariant = - variant && CUSTOM_VARIANTS.includes(variant) - ? "primary" - : variant || "primary" - - return ( - - ) -} - -export default CustomButton diff --git a/packages/gaming-ui/src/Components/Elements/CustomModal.tsx b/packages/gaming-ui/src/Components/Elements/CustomModal.tsx deleted file mode 100644 index 224b120ab3..0000000000 --- a/packages/gaming-ui/src/Components/Elements/CustomModal.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { IModalProps, Modal } from "@chainsafe/common-components" -import { createStyles, makeStyles } from "@chainsafe/common-theme" -import React, { ReactNode } from "react" -import clsx from "clsx" -import { CSGTheme } from "../../Themes/types" - -const useStyles = makeStyles(({ constants, breakpoints }: CSGTheme) => - createStyles({ - root: { - "&:before": { - backgroundColor: constants.modalDefault.fadeBackground - } - }, - inner: { - [breakpoints.down("md")]: { - backgroundColor: constants.modalDefault.background, - top: "unset", - bottom: 0, - left: 0, - width: "100% !important", - transform: "unset", - borderRadiusLeftTop: `${constants.generalUnit * 1.5}px`, - borderRadiusRightTop: `${constants.generalUnit * 1.5}px`, - borderRadiusLeftBottom: 0, - borderRadiusRightBottom: 0 - } - }, - closeIcon: { - [breakpoints.down("md")]: {} - } - }) -) - -interface ICustomModal extends IModalProps { - children: ReactNode - className?: string -} - -const CustomModal: React.FC = ({ - className, - children, - injectedClass, - ...rest -}: ICustomModal) => { - const classes = useStyles() - - return ( - - {children} - - ) -} - -export default CustomModal diff --git a/packages/gaming-ui/src/Components/Elements/SecretField.tsx b/packages/gaming-ui/src/Components/Elements/SecretField.tsx deleted file mode 100644 index ba059aa666..0000000000 --- a/packages/gaming-ui/src/Components/Elements/SecretField.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import React, { useCallback, useState } from "react" -import { EyeOpenIcon, EyeClosedIcon, Typography } from "@chainsafe/common-components" -import { makeStyles, createStyles } from "@chainsafe/common-theme" - -interface Props { - value: string -} - -const useStyles = makeStyles(() => - createStyles({ - root: { - display: "flex", - justifyContent: "space-between" - } - }) -) - -const SecretField = ({ value }: Props) => { - const [showValue, setShowValue] = useState(false) - const classes = useStyles() - - const toggleShowValue = useCallback(() => { - setShowValue(!showValue) - }, [showValue]) - - return ( -
- {showValue ? value : "⚫⚫⚫⚫⚫⚫⚫⚫⚫" } - {showValue ? : } -
- ) -} - -export default SecretField \ No newline at end of file diff --git a/packages/gaming-ui/src/Components/GamingRoutes.tsx b/packages/gaming-ui/src/Components/GamingRoutes.tsx deleted file mode 100644 index 3936871e6b..0000000000 --- a/packages/gaming-ui/src/Components/GamingRoutes.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from "react" -import { Switch, ConditionalRoute } from "@chainsafe/common-components" -import LoginPage from "./Pages/LoginPage" -import { useGamingApi } from "../Contexts/GamingApiContext" -import SettingsPage from "./Pages/SettingsPage" -import DashboardPage from "./Pages/DashboardPage" - -export const SETTINGS_PATHS = ["apiKeys"] as const -export type SettingsPath = typeof SETTINGS_PATHS[number] - -export const ROUTE_LINKS = { - Landing: "/", - Dashboard: "/dashboard", - SettingsRoot: "/settings", - Settings: (path: SettingsPath) => `/settings/${path}`, - PrivacyPolicy: "https://files.chainsafe.io/privacy-policy", - Terms: "https://files.chainsafe.io/terms-of-service", - ChainSafe: "https://chainsafe.io/" -} - -const GamingRoutes = () => { - const { isLoggedIn } = useGamingApi() - - return ( - - - - - - ) -} - -export default GamingRoutes diff --git a/packages/gaming-ui/src/Components/Layouts/AppHeader.tsx b/packages/gaming-ui/src/Components/Layouts/AppHeader.tsx deleted file mode 100644 index 45ed28b61a..0000000000 --- a/packages/gaming-ui/src/Components/Layouts/AppHeader.tsx +++ /dev/null @@ -1,232 +0,0 @@ -import React, { useCallback } from "react" -import { createStyles, makeStyles, useThemeSwitcher } from "@chainsafe/common-theme" -import clsx from "clsx" -import { - Link, - Typography, - ChainsafeLogo, - HamburgerMenu, - MenuDropdown, - PowerDownSvg, - useHistory -} from "@chainsafe/common-components" -import { ROUTE_LINKS } from "../GamingRoutes" -import { Trans } from "@lingui/macro" -import { CSGTheme } from "../../Themes/types" -import { useGamingApi } from "../../Contexts/GamingApiContext" -import { useUser } from "../../Contexts/UserContext" - -const useStyles = makeStyles( - ({ palette, animation, breakpoints, constants, zIndex }: CSGTheme) => { - return createStyles({ - root: { - position: "fixed", - display: "flex", - flexDirection: "row", - top: 0, - transitionDuration: `${animation.translate}ms`, - visibility: "hidden", - [breakpoints.up("md")]: { - width: `calc(100% - ${constants.navWidth}px)`, - padding: `${0}px ${constants.contentPadding}px ${0}px ${ - constants.contentPadding - }px`, - left: Number(constants.navWidth), - opacity: 0, - - backgroundColor: constants.header.rootBackground, - - "& > *:first-child": { - flex: "1 1 0" - }, - "&.active": { - opacity: 1, - height: "auto", - visibility: "visible", - padding: `${constants.headerTopPadding}px ${ - constants.contentPadding - }px ${0}px ${constants.contentPadding}px`, - zIndex: zIndex?.layer1 - } - }, - [breakpoints.down("md")]: { - left: 0, - width: "100%", - justifyContent: "space-between", - alignItems: "center", - position: "fixed", - backgroundColor: palette.additional["gray"][3], - "&.active": { - opacity: 1, - visibility: "visible", - height: Number(constants.mobileHeaderHeight), - zIndex: Number(zIndex?.layer1) - } - } - }, - hamburgerMenu: { - position: "absolute", - "& span": { - backgroundColor: constants.header.hamburger - } - }, - logo: { - textDecoration: "none", - display: "flex", - flexDirection: "row", - alignItems: "center", - [breakpoints.up("md")]: { - "& img": { - height: constants.generalUnit * 5, - width: "auto" - } - }, - [breakpoints.down("md")]: { - position: "absolute", - left: "50%", - top: "50%", - transform: "translate(-50%,-50%)", - "& img": { - height: constants.generalUnit * 3.25, - width: "auto" - } - } - }, - accountControls: { - display: "flex", - justifyContent: "flex-end", - alignItems: "center", - flexDirection: "row", - [breakpoints.up("md")]: { - marginLeft: constants.accountControlsPadding - }, - "& > *:first-child": { - marginRight: constants.generalUnit * 2 - } - }, - searchModule: { - [breakpoints.down("md")]: { - height: constants.mobileHeaderHeight, - position: "absolute", - width: "100%", - zIndex: zIndex?.background, - "&.active": {} - } - }, - options: { - backgroundColor: constants.header.optionsBackground, - color: constants.header.optionsTextColor, - border: `1px solid ${constants.header.optionsBorder}`, - minWidth: 145 - }, - menuItem: { - width: "100%", - display: "flex", - flexDirection: "row", - alignItems: "center", - color: constants.header.menuItemTextColor, - "& svg": { - width: constants.generalUnit * 2, - height: constants.generalUnit * 2, - marginRight: constants.generalUnit, - fill: palette.additional["gray"][7], - stroke: palette.additional["gray"][7] - } - }, - icon: { - "& svg": { - fill: constants.header.iconColor - } - }, - title : { - marginLeft: constants.generalUnit - } - }) - } -) - -interface IAppHeader { - navOpen: boolean - setNavOpen: (state: boolean) => void -} - -const AppHeader = ({ navOpen, setNavOpen }: IAppHeader) => { - const { desktop } = useThemeSwitcher() - const classes = useStyles() - const { isLoggedIn, logout } = useGamingApi() - const { history } = useHistory() - const { getProfileTitle } = useUser() - - const signOut = useCallback(async () => { - logout() - history.replace("/", {}) - }, [logout, history]) - - return ( -
- {isLoggedIn && ( - <> - {desktop ? ( - <> -
- signOut(), - contents: ( -
- - - Sign Out - -
- ) - } - ]} - /> -
- - ) : ( - <> - setNavOpen(!navOpen)} - variant={navOpen ? "active" : "default"} - className={clsx(classes.hamburgerMenu, "hamburger-menu")} - testId="hamburger-menu" - /> - - - - Dashboard - - - - )} - - )} -
- ) -} - -export default AppHeader diff --git a/packages/gaming-ui/src/Components/Layouts/AppNav.tsx b/packages/gaming-ui/src/Components/Layouts/AppNav.tsx deleted file mode 100644 index 7746860bf1..0000000000 --- a/packages/gaming-ui/src/Components/Layouts/AppNav.tsx +++ /dev/null @@ -1,272 +0,0 @@ -import { - createStyles, - makeStyles, - useThemeSwitcher -} from "@chainsafe/common-theme" -import React, { useCallback } from "react" -import clsx from "clsx" -import { - Link, - Typography, - PowerDownSvg, - ChainsafeLogo -} from "@chainsafe/common-components" -import { ROUTE_LINKS } from "../GamingRoutes" -import { Trans } from "@lingui/macro" -import { CSGTheme } from "../../Themes/types" -import { useGamingApi } from "../../Contexts/GamingApiContext" - -const useStyles = makeStyles( - ({ palette, animation, breakpoints, constants, zIndex }: CSGTheme) => { - return createStyles({ - root: { - width: 0, - overflow: "hidden", - transitionDuration: `${animation.translate}ms`, - display: "flex", - flexDirection: "column", - position: "fixed", - left: 0, - opacity: 0, - "&.active": { - opacity: 1 - }, - [breakpoints.up("md")]: { - padding: `${constants.topPadding}px ${ - constants.generalUnit * 4.5 - }px`, - top: 0, - height: "100%", - backgroundColor: constants.nav.backgroundColor, - "&.active": { - width: `${constants.navWidth}px` - } - }, - [breakpoints.down("md")]: { - height: `calc(100% - ${constants.mobileHeaderHeight}px)`, - top: `${constants.mobileHeaderHeight}px`, - backgroundColor: constants.nav.mobileBackgroundColor, - zIndex: zIndex?.layer1, - padding: `0 ${constants.generalUnit * 4}px`, - maxWidth: "100vw", - visibility: "hidden", - "&.active": { - visibility: "visible", - width: `${constants.mobileNavWidth}px` - } - } - }, - blocker: { - display: "block", - backgroundColor: constants.nav.blocker, - position: "fixed", - top: Number(constants.mobileHeaderHeight), - left: 0, - height: `calc(100% - ${constants.mobileHeaderHeight}px)`, - width: "100%", - transitionDuration: `${animation.translate}ms`, - zIndex: zIndex?.background, - opacity: 0, - visibility: "hidden", - "&.active": { - visibility: "visible", - [breakpoints.down("md")]: { - opacity: 0.5 - } - } - }, - logo: { - textDecoration: "none", - display: "flex", - flexDirection: "row", - alignItems: "center", - - [breakpoints.up("md")]: { - "& img": { - height: constants.generalUnit * 5, - width: "auto" - }, - "& > *:first-child": { - marginRight: constants.generalUnit - } - }, - [breakpoints.down("md")]: { - position: "absolute", - left: "50%", - top: "50%", - transform: "translate(-50%,-50%)", - "& img": { - height: constants.generalUnit * 3.25, - width: "auto" - } - } - }, - navMenu: { - display: "flex", - flexDirection: "column", - marginBottom: constants.generalUnit * 8.5, - transitionDuration: `${animation.translate}ms` - }, - linksArea: { - display: "flex", - flexDirection: "column", - flex: "1 1 0", - justifyContent: "center", - transitionDuration: `${animation.translate}ms`, - "& > span": { - marginBottom: constants.generalUnit * 2 - }, - [breakpoints.up("md")]: { - height: 0 - }, - [breakpoints.down("md")]: { - transitionDuration: `${animation.translate}ms`, - color: palette.additional["gray"][3], - "&.active": {} - } - }, - navItem: { - textDecoration: "none", - display: "flex", - flexDirection: "row", - alignItems: "center", - cursor: "pointer", - padding: `${constants.generalUnit * 1.5}px 0`, - transitionDuration: `${animation.transform}ms`, - "& span": { - transitionDuration: `${animation.transform}ms`, - [breakpoints.up("md")]: { - color: constants.nav.itemColor - }, - [breakpoints.down("md")]: { - color: constants.nav.itemColorHover - } - }, - "& svg": { - transitionDuration: `${animation.transform}ms`, - width: Number(constants.svgWidth), - marginRight: constants.generalUnit * 2, - [breakpoints.up("md")]: { - fill: constants.nav.itemIconColor - }, - [breakpoints.down("md")]: { - fill: constants.nav.itemIconColorHover - } - }, - "&:hover": { - "& span": { - color: constants.nav.itemColorHover - }, - "& svg": { - fill: constants.nav.itemIconColorHover - } - }, - [breakpoints.down("md")]: { - minWidth: Number(constants.mobileNavWidth) - } - }, - navItemText: { - [breakpoints.down("md")]: { - color: palette.additional["gray"][3] - } - }, - menuItem: { - width: 100, - display: "flex", - flexDirection: "row", - alignItems: "center", - "& svg": { - width: constants.generalUnit * 2, - height: constants.generalUnit * 2, - marginRight: constants.generalUnit - } - }, - spaceUsedMargin: { - marginBottom: constants.generalUnit - }, - betaCaption: { - marginBottom: constants.generalUnit * 0.5 - } - }) - } -) - -interface IAppNav { - navOpen: boolean - setNavOpen: (state: boolean) => void -} - -const AppNav: React.FC = ({ navOpen, setNavOpen }: IAppNav) => { - const { desktop } = useThemeSwitcher() - const classes = useStyles() - - const { isLoggedIn, logout } = useGamingApi() - - const signOut = useCallback(() => { - logout() - }, [logout]) - - const handleOnClick = useCallback(() => { - if (!desktop && navOpen) { - setNavOpen(false) - } - }, [desktop, navOpen, setNavOpen]) - - return ( -
- {isLoggedIn && ( - <> - {desktop && ( -
- - - - Gaming - - -
- )} -
- -
-
- {!desktop && ( -
{ - handleOnClick() - signOut() - }} - > - - - Sign Out - -
- )} -
- {!desktop && ( -
setNavOpen(false)} - className={clsx(classes.blocker, { - active: navOpen - })} - >
- )} - - )} -
- ) -} - -export default AppNav \ No newline at end of file diff --git a/packages/gaming-ui/src/Components/Layouts/AppWrapper.tsx b/packages/gaming-ui/src/Components/Layouts/AppWrapper.tsx deleted file mode 100644 index e09654b091..0000000000 --- a/packages/gaming-ui/src/Components/Layouts/AppWrapper.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import { createStyles, ITheme, makeStyles } from "@chainsafe/common-theme" -import React, { useState } from "react" -import { ReactNode } from "react" -import clsx from "clsx" -import { useGamingApi } from "../../Contexts/GamingApiContext" -import { CssBaseline } from "@chainsafe/common-components" -import AppHeader from "./AppHeader" -import AppNav from "./AppNav" - -interface IAppWrapper { - children: ReactNode | ReactNode[] -} - -const useStyles = makeStyles( - ({ animation, breakpoints, constants }: ITheme) => { - return createStyles({ - root: { - minHeight: "100vh" - }, - bodyWrapper: { - transitionDuration: `${animation.translate}ms`, - [breakpoints.up("md")]: { - padding: "0", - "&.active": { - // This moves the content areas based on the size of the nav bar - - padding: `${0}px ${constants.contentPadding}px ${0}px ${ - Number(constants.navWidth) + - Number(constants.contentPadding) - }px` - } - }, - [breakpoints.down("md")]: {} - }, - content: { - minHeight: "100vh", - [breakpoints.up("md")]: { - height: "100%", - transitionDuration: `${animation.translate}ms`, - padding: 0, - "&.active": { - height: "initial", - padding: `${constants.contentTopPadding}px 0 0` - } - }, - [breakpoints.down("md")]: { - "&.active": { - height: "initial", - padding: `${constants.mobileHeaderHeight}px 0 0` - } - } - } - }) - } -) - -const AppWrapper: React.FC = ({ children }: IAppWrapper) => { - const classes = useStyles() - const [navOpen, setNavOpen] = useState(false) - const { isLoggedIn } = useGamingApi() - - return ( -
- - -
- -
- {children} -
-
-
- ) -} - -export default AppWrapper diff --git a/packages/gaming-ui/src/Components/Modules/DashboardModule.tsx b/packages/gaming-ui/src/Components/Modules/DashboardModule.tsx deleted file mode 100644 index 7d75feb1b8..0000000000 --- a/packages/gaming-ui/src/Components/Modules/DashboardModule.tsx +++ /dev/null @@ -1,263 +0,0 @@ -import { Button, CopyIcon, Modal, PlusIcon, Typography } from "@chainsafe/common-components" -import { createStyles, debounce, makeStyles } from "@chainsafe/common-theme" -import { AccessKey } from "@chainsafe/files-api-client" -import { Trans } from "@lingui/macro" -import React, { useCallback, useEffect, useState } from "react" -import { useGamingApi } from "../../Contexts/GamingApiContext" -import { CSGTheme } from "../../Themes/types" -import ApiKeyCard from "../Elements/ApiKeyCard" - -const useStyles = makeStyles(({ breakpoints, constants, palette, zIndex }: CSGTheme) => - createStyles({ - root: { - position: "relative", - margin: constants.generalUnit - }, - header: { - display: "flex", - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", - [breakpoints.down("md")]: { - marginTop: constants.generalUnit - } - }, - controls: { - display: "flex", - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", - "& > button": { - marginLeft: constants.generalUnit - } - }, - dataArea: { - marginTop: constants.generalUnit * 2, - display: "flex", - flexDirection: "row", - justifyContent: "space-between", - flexWrap: "wrap", - "& > *": { - margin: constants.generalUnit, - width:"100%", - [breakpoints.up("xs")]: { - maxWidth: `calc(100% - ${constants.generalUnit * 2}px)` - }, - [breakpoints.up("sm")]: { - maxWidth: `calc(50% - ${constants.generalUnit * 2}px)` - }, - [breakpoints.up("md")]: { - maxWidth: `calc(33% - ${constants.generalUnit * 2}px)` - }, - [breakpoints.up("lg")]: { - maxWidth: `calc(25% - ${constants.generalUnit * 2}px)` - }, - [breakpoints.up("xl")]: { - maxWidth: `calc(20% - ${constants.generalUnit * 2}px)` - } - } - }, - modalRoot: { - zIndex: zIndex?.blocker, - [breakpoints.down("md")]: {} - }, - modalInner: { - [breakpoints.down("md")]: { - bottom: - Number(constants?.mobileButtonHeight) + constants.generalUnit, - borderTopLeftRadius: `${constants.generalUnit * 1.5}px`, - borderTopRightRadius: `${constants.generalUnit * 1.5}px`, - maxWidth: `${breakpoints.width("md")}px !important` - } - }, - modalHeading: { - textAlign: "center", - marginBottom: constants.generalUnit * 4 - }, - modalContent: { - display: "flex", - flexDirection: "column", - padding: constants.generalUnit * 4 - }, - secretContainer: { - display: "flex", - justifyContent: "space-between", - marginBottom: constants.generalUnit * 0.5 - }, - copyBox: { - display: "flex", - justifyContent: "space-between", - alignItems: "center", - cursor: "pointer", - color: palette.text.secondary - }, - copyIcon: { - fontSize: "14px", - fill: constants.profile.icon, - [breakpoints.down("md")]: { - fontSize: "18px", - fill: palette.additional["gray"][9] - } - }, - secret: { - maxWidth: "95%", - overflowWrap: "anywhere" - }, - field: { - marginBottom: constants.generalUnit * 4 - } - }) -) - -const DashboardModule = () => { - const classes = useStyles() - const { gamingApiClient } = useGamingApi() - const [keys, setKeys] = useState([]) - const [newKey, setNewKey] = useState() - const [isNewKeyModalOpen, setIsNewKeyModalOpen] = useState(false) - const [copiedSecret, setCopiedSecret] = useState(false) - const debouncedCopiedSecret = - debounce(() => setCopiedSecret(false), 3000) - - const copySecret = async () => { - if (newKey?.secret) { - try { - await navigator.clipboard.writeText(newKey.secret) - setCopiedSecret(true) - debouncedCopiedSecret() - } catch (err) { - console.error(err) - } - } - } - - const fetchAccessKeys = useCallback(() => { - gamingApiClient.listAccessKeys() - .then(keys => setKeys(keys.filter(key => key.type === "gaming"))) - .catch(console.error) - }, [gamingApiClient]) - - const createGamingAccessKey = useCallback(() => { - gamingApiClient.createAccessKey({ type: "gaming" }) - .then((key) => { - setNewKey(key) - fetchAccessKeys() - setIsNewKeyModalOpen(true) - }) - .catch(console.error) - }, [fetchAccessKeys, gamingApiClient]) - - const deleteAccessKey = useCallback((id: string) => { - gamingApiClient.deleteAccessKey(id) - .then(fetchAccessKeys) - .catch(console.error) - }, [gamingApiClient, fetchAccessKeys]) - - useEffect(() => { - fetchAccessKeys() - }, [fetchAccessKeys]) - - return ( - <> -
-
- - - Dashboard - - -
- -
-
-
- { - keys.map((key: AccessKey, index: number) => ( - deleteAccessKey(key.id)} - apiKey={key} />)) - } -
-
- -
- - New Key - - - Key ID - - {newKey?.id} - - Secret - -
-
- - Make sure to save the secret, as it can only be displayed once. - - {copiedSecret && ( - - Copied! - - )} -
-
- - {newKey?.secret} - - -
-
- -
-
- - ) -} - -export default DashboardModule \ No newline at end of file diff --git a/packages/gaming-ui/src/Components/Modules/LoginModule.tsx b/packages/gaming-ui/src/Components/Modules/LoginModule.tsx deleted file mode 100644 index c4268a24c0..0000000000 --- a/packages/gaming-ui/src/Components/Modules/LoginModule.tsx +++ /dev/null @@ -1,435 +0,0 @@ -import React, { useState } from "react" -import { Button, GithubLogoIcon, GoogleLogoIcon, Loading, MailIcon, Typography } from "@chainsafe/common-components" -import { createStyles, makeStyles, useThemeSwitcher } from "@chainsafe/common-theme" -import { CSGTheme } from "../../Themes/types" -import { t, Trans } from "@lingui/macro" -import { useGamingApi } from "../../Contexts/GamingApiContext" -import { useWeb3 } from "@chainsafe/web3-context" -import { ROUTE_LINKS } from "../GamingRoutes" -import clsx from "clsx" -import { IdentityProvider } from "@chainsafe/files-api-client" -import PasswordlessEmail from "./LoginModule/PasswordlessEmail" - -const useStyles = makeStyles( - ({ constants, palette, breakpoints, typography }: CSGTheme) => - createStyles({ - root: { - backgroundColor: constants.loginModule.background, - border: `1px solid ${constants.landing.border}`, - boxShadow: constants.landing.boxShadow, - alignItems: "center", - borderRadius: 6, - [breakpoints.up("md")]:{ - minHeight: "64vh", - justifyContent: "space-between", - width: 440 - }, - [breakpoints.down("md")]: { - padding: `${constants.generalUnit * 4}px ${constants.generalUnit * 2}px`, - justifyContent: "center", - width: `calc(100vw - ${constants.generalUnit * 2}px)` - } - }, - buttonSection: { - [breakpoints.up("md")]: { - position: "absolute", - top: "50%", - left: "50%", - transform: "translate(-50%, -50%)" - }, - [breakpoints.down("md")]: { - display: "flex", - flexDirection: "column", - justifyContent: "space-evenly" - } - }, - connectingWallet: { - textAlign: "center", - alignItems: "center", - display: "flex", - flexDirection: "column", - "& > *": { - fontWeight: 400 - }, - [breakpoints.up("md")]: { - padding: `${constants.generalUnit * 20}px ${constants.generalUnit * 8}px`, - "& > *": { - paddingBottom: `${constants.generalUnit * 5}px` - } - }, - [breakpoints.down("md")]: { - justifyContent: "space-evenly" - } - }, - button: { - width: 240, - fontWeight: typography.fontWeight.medium, - marginBottom: constants.generalUnit * 2, - "& .icon" : { - fontSize: 25 - }, - "&:last-child": { - marginBottom: 0 - } - }, - error: { - color: palette.error.main, - paddingBottom: constants.generalUnit * 2, - maxWidth: 240 - }, - headerText: { - [breakpoints.up("md")]: { - paddingTop: constants.generalUnit * 4, - paddingBottom: constants.generalUnit * 8 - }, - [breakpoints.down("md")]: { - paddingTop: constants.generalUnit * 3, - paddingBottom: constants.generalUnit * 3, - textAlign: "center" - } - }, - footer: { - backgroundColor: constants.landing.footerBg, - color: constants.landing.footerText, - padding: `${constants.generalUnit * 2.5}px ${constants.generalUnit * 1.5}px`, - width: "100%", - "& > *": { - marginRight: constants.generalUnit * 3.5 - }, - [breakpoints.down("md")]: { - display: "none" - } - }, - connectWalletFooter: { - backgroundColor: constants.landing.background, - color: constants.landing.footerText, - padding: `${constants.generalUnit * 4.375}px ${constants.generalUnit * 7}px`, - width: "100%", - textAlign: "center", - "& > *": { - fontWeight: 400 - }, - [breakpoints.down("md")]: { - display: "none" - } - }, - loader: { - marginTop: constants.generalUnit, - padding: 0 - }, - buttonLink: { - color: palette.additional["gray"][10], - outline: "none", - textDecoration: "underline", - cursor: "pointer", - textAlign: "center" - }, - web3Button: { - minHeight: 41 - } - }) -) - -interface IInitialScreen { - className?: string -} - -const LoginModule = ({ className }: IInitialScreen) => { - const { selectWallet, resetAndSelectWallet, login, resetStatus, status } = useGamingApi() - const { desktop } = useThemeSwitcher() - const { wallet } = useWeb3() - const classes = useStyles() - const [loginMode, setLoginMode] = useState() - const [error, setError] = useState() - const maintenanceMode = process.env.REACT_APP_MAINTENANCE_MODE === "true" - const [isConnecting, setIsConnecting] = useState(false) - - const handleSelectWalletAndConnect = async () => { - setError(undefined) - try { - await selectWallet() - } catch (error) { - setError(t`There was an error connecting your wallet`) - } - } - - const handleResetAndSelectWallet = async () => { - setError(undefined) - try { - await resetAndSelectWallet() - } catch (error) { - setError(t`There was an error connecting your wallet`) - } - } - - const resetLogin = async () => { - setError(undefined) - setLoginMode(undefined) - resetStatus() - } - - const handleLogin = async (loginType: IdentityProvider) => { - setError("") - setIsConnecting(true) - setLoginMode(loginType) - try { - await login(loginType) - } catch (error: any) { - let errorMessage = t`There was an error authenticating` - - // Invalid signature, or contract wallet not deployed - if (error?.error?.code === 403 && error?.error?.message?.includes("Invalid signature")) { - errorMessage = t`Failed to validate signature. - If you are using a contract wallet, please make - sure you have activated your wallet.` - } - - // User rejected the signature request (WalletConnect be sassy) - if (error?.message === "Just nope" || error?.code === 4001) { - errorMessage = t`Failed to get signature` - } - - // DirectAuth popup was closed - if (error?.message === "user closed popup") { - errorMessage = t`The authentication popup was closed` - } - setError(errorMessage) - } - setIsConnecting(false) - } - - const ConnectWallet = () => { - if (!wallet) { - console.error("No wallet found") - return null - } - - return ( -
-
- - -
- - Go back - -
-
-
-
- )} - - const WalletConnection = () => { - return ( -
- Connect Wallet to Gaming - {status === "awaiting confirmation" && - - You will need to sign a message in your wallet to complete sign in. - } - {status === "logging in" && <> - - Hold on, we are logging you in… - - - } -
- ) - } - - const WalletSelection = () => { - return ( - <> -
- - -
-