From 801c3869cfa35a4e9f894a63ed31921e3b3beede Mon Sep 17 00:00:00 2001 From: Danila Simonov Date: Tue, 28 Nov 2023 11:52:09 +0100 Subject: [PATCH 1/5] WIP: Ylide forum (#1365) * Initial * update envs * Update dev.preset.sh * Update dev.preset.sh * Update .env.eth * filters, sortings, chats * editorjs for new threads * walletconnect + evm chains switching * small fixes before mobile * Mobile version + tags + txDiscuss/addressDiscuss + bookmarks * bookmarks/watches/addrdiscuss/txdiscuss/tags * realtime chats + watched/bookmarked topics/threads * fix for single child of popovertrigger * bookmark/watch in Thread, replies reload, fix tags selection * scroll on reply * Chats v2 * chats switches chain + back-arrow in bookmarks/watches * remove Create Thread from txs/addrs topics * Chats list -> Chats everywhere * Errors in chats + no watches for accountpopover * only evm chats * telegram pushes on watches + pagination fixes * remote three dots from replies * fixes * Envs for forum & CI * Forum Env variables for CI * Add forum env variables for validation * Fix metadata for forum routes * TS fix on getPageType.ts * Fix default eth envs + fix fetch types for address verificaion --- .vscode/settings.json | 5 +- configs/app/features/forum.ts | 32 + configs/app/features/index.ts | 1 + configs/envs/.env.eth | 5 + deploy/tools/envs-validator/schema.ts | 14 + deploy/tools/envs-validator/test/.env.base | 5 +- deploy/values/l2-optimism-goerli/values.yaml | 2 + deploy/values/main/values.yaml | 3 + deploy/values/review-l2/values.yaml.gotmpl | 2 + deploy/values/review/values.yaml.gotmpl | 2 + docs/ENVS.md | 13 + icons/account.svg | 9 + icons/arrows/arrow-back.svg | 3 + icons/arrows/arrow-down.svg | 3 + icons/arrows/arrow-up.svg | 3 + icons/arrows/caret-down.svg | 3 + icons/arrows/caret-right.svg | 3 + icons/attachment.svg | 3 + icons/bookmark.svg | 3 + icons/bookmark_filled.svg | 3 + icons/chat.svg | 3 + icons/chat_list.svg | 4 + icons/eye.svg | 4 + icons/eye_filled.svg | 3 + icons/forum.svg | 3 + icons/horizontal_dots.svg | 3 + icons/logout.svg | 3 + icons/proceedTOWalletArrow.svg | 9 + icons/reply.svg | 3 + icons/send.svg | 3 + jest/lib.tsx | 8 +- lib/ago.ts | 20 + lib/api/ylideApi/ChatsPersonalApi.ts | 110 ++ lib/api/ylideApi/ForumPersonalApi.ts | 167 ++ lib/api/ylideApi/ForumPublicApi.ts | 227 +++ lib/api/ylideApi/ForumTelegramApi.ts | 27 + lib/api/ylideApi/types.ts | 78 + lib/api/ylideApi/useChatsApiFetch.ts | 43 + lib/api/ylideApi/useForumApiFetch.ts | 41 + lib/api/ylideApi/useTelegramApiFetch.ts | 27 + lib/api/ylideApi/utils.ts | 21 + lib/contexts/app.tsx | 2 + lib/contexts/ylide/constants.tsx | 515 ++++++ lib/contexts/ylide/editor-utils.ts | 220 +++ lib/contexts/ylide/index.tsx | 678 +++++++ .../ylide/logos/network/ArbitrumLogo.tsx | 57 + .../ylide/logos/network/AuroraLogo.tsx | 64 + .../ylide/logos/network/AvalancheLogo.tsx | 35 + .../ylide/logos/network/BNBChainLogo.tsx | 46 + lib/contexts/ylide/logos/network/BaseLogo.tsx | 1576 +++++++++++++++++ lib/contexts/ylide/logos/network/CeloLogo.tsx | 35 + .../ylide/logos/network/CronosLogo.tsx | 56 + .../ylide/logos/network/EthereumLogo.tsx | 47 + .../ylide/logos/network/FantomLogo.tsx | 37 + .../ylide/logos/network/GnosisLogo.tsx | 41 + .../ylide/logos/network/KlaytnLogo.tsx | 26 + .../ylide/logos/network/LineaLogo.tsx | 20 + .../ylide/logos/network/MetisLogo.tsx | 45 + .../ylide/logos/network/MoonbeamLogo.tsx | 132 ++ .../ylide/logos/network/MoonriverLogo.tsx | 103 ++ .../ylide/logos/network/OptimismLogo.tsx | 35 + .../ylide/logos/network/PolygonLogo.tsx | 29 + lib/contexts/ylide/logos/network/ZetaLogo.tsx | 20 + .../ylide/logos/wallets/BinanceWalletLogo.tsx | 26 + .../logos/wallets/CoinbaseWalletLogo.tsx | 29 + .../ylide/logos/wallets/FrontierLogo.tsx | 51 + .../ylide/logos/wallets/MetaMaskLogo.tsx | 95 + .../ylide/logos/wallets/TrustWalletLogo.tsx | 24 + .../ylide/logos/wallets/WalletConnectLogo.tsx | 45 + lib/contexts/ylide/modals.ts | 70 + lib/contexts/ylide/types.ts | 61 + lib/contexts/ylide/useYlideAccounts.ts | 71 + lib/contexts/ylide/useYlideFaucet.ts | 74 + lib/contexts/ylide/useYlidePushes.ts | 43 + lib/ensurePageLoaded.ts | 13 + lib/formatDateTime.ts | 29 + lib/hooks/useFetch.tsx | 12 +- lib/hooks/useNavItems.tsx | 7 + lib/metadata/getPageOgType.ts | 10 + lib/metadata/templates/description.ts | 9 + lib/metadata/templates/title.ts | 9 + lib/mixpanel/getPageType.ts | 9 + lib/shortDate.ts | 16 + nextjs/csp/generateCspPolicy.ts | 1 + nextjs/csp/policies/index.ts | 1 + nextjs/csp/policies/ylideRpcs.ts | 83 + nextjs/getServerSideProps.ts | 4 + nextjs/nextjs-routes.d.ts | 8 + package.json | 12 + pages/_app.tsx | 5 +- pages/forum/[topic]/[thread]/index.tsx | 20 + pages/forum/[topic]/create-thread.tsx | 20 + pages/forum/[topic]/index.tsx | 20 + pages/forum/bookmarks/[hash].tsx | 20 + pages/forum/chats/[hash].tsx | 20 + pages/forum/chats/index.tsx | 20 + pages/forum/index.tsx | 20 + pages/forum/watches/[hash].tsx | 20 + playwright/TestApp.tsx | 7 +- tools/scripts/dev.preset.sh | 2 +- types/api/forum.ts | 18 + ui/Forum.png | Bin 0 -> 428386 bytes ui/address/AddressDiscuss.tsx | 69 + ui/addressVerification/types.ts | 8 +- ui/connectAccountModal/BlockChainLabel.tsx | 50 + ui/connectAccountModal/WalletTag.tsx | 56 + ui/connectAccountModal/index.tsx | 486 +++++ ui/createTopicModal/index.tsx | 82 + ui/pages/Address.tsx | 6 + ui/pages/Bookmarks.tsx | 77 + ui/pages/Chat.tsx | 336 ++++ ui/pages/Chats.tsx | 122 ++ ui/pages/CreateThread.tsx | 198 +++ ui/pages/Thread.tsx | 185 ++ ui/pages/Threads.tsx | 123 ++ ui/pages/Topics.tsx | 191 ++ ui/pages/Transaction.tsx | 2 + ui/pages/Watches.tsx | 77 + ui/selectWalletModal/TabSwitcher.tsx | 79 + ui/selectWalletModal/WalletButton.tsx | 68 + ui/selectWalletModal/WalletsList.tsx | 58 + ui/selectWalletModal/WrappedQRCode.tsx | 112 ++ ui/selectWalletModal/index.tsx | 352 ++++ ui/shared/Page/PageTitle.tsx | 10 +- ui/shared/Tabs/useAdaptiveTabs.tsx | 4 +- ui/shared/Web3ModalProvider.tsx | 29 +- ui/shared/forum/AccountsPopover.tsx | 166 ++ ui/shared/forum/BookmarkedThreads.tsx | 14 + ui/shared/forum/BookmarkedTopics.tsx | 14 + ui/shared/forum/ChatEntity.tsx | 94 + ui/shared/forum/ChatsAccountsBar.tsx | 69 + ui/shared/forum/ChatsList.tsx | 34 + ui/shared/forum/DevForumHero.tsx | 26 + ui/shared/forum/Editor.tsx | 89 + ui/shared/forum/PopoverByAccount.tsx | 109 ++ ui/shared/forum/PopoverCompactSorting.tsx | 59 + ui/shared/forum/PopoverSorting.tsx | 33 + ui/shared/forum/RepliesList.tsx | 27 + ui/shared/forum/ReplyEntity.tsx | 119 ++ ui/shared/forum/SelectAccountDropdown.tsx | 77 + ui/shared/forum/SelectBlockchainDropdown.tsx | 105 ++ ui/shared/forum/SortingList.tsx | 53 + ui/shared/forum/TabbedTagList.tsx | 59 + ui/shared/forum/TagsList.tsx | 24 + ui/shared/forum/ThreadReplies.tsx | 255 +++ ui/shared/forum/ThreadsHighlight.tsx | 55 + ui/shared/forum/ThreadsList.tsx | 238 +++ ui/shared/forum/TopicsList.tsx | 178 ++ ui/shared/forum/WatchedThreads.tsx | 14 + ui/shared/forum/WatchedTopics.tsx | 14 + ui/shared/forum/useThreadsContent.tsx | 145 ++ ui/shared/forum/useTopicsContent.tsx | 156 ++ ui/tx/TxDiscuss.tsx | 69 + yarn.lock | 1209 ++++++++++++- 154 files changed, 11983 insertions(+), 48 deletions(-) create mode 100644 configs/app/features/forum.ts create mode 100644 icons/account.svg create mode 100644 icons/arrows/arrow-back.svg create mode 100644 icons/arrows/arrow-down.svg create mode 100644 icons/arrows/arrow-up.svg create mode 100644 icons/arrows/caret-down.svg create mode 100644 icons/arrows/caret-right.svg create mode 100644 icons/attachment.svg create mode 100644 icons/bookmark.svg create mode 100644 icons/bookmark_filled.svg create mode 100644 icons/chat.svg create mode 100644 icons/chat_list.svg create mode 100644 icons/eye.svg create mode 100644 icons/eye_filled.svg create mode 100644 icons/forum.svg create mode 100644 icons/horizontal_dots.svg create mode 100644 icons/logout.svg create mode 100644 icons/proceedTOWalletArrow.svg create mode 100644 icons/reply.svg create mode 100644 icons/send.svg create mode 100644 lib/ago.ts create mode 100644 lib/api/ylideApi/ChatsPersonalApi.ts create mode 100644 lib/api/ylideApi/ForumPersonalApi.ts create mode 100644 lib/api/ylideApi/ForumPublicApi.ts create mode 100644 lib/api/ylideApi/ForumTelegramApi.ts create mode 100644 lib/api/ylideApi/types.ts create mode 100644 lib/api/ylideApi/useChatsApiFetch.ts create mode 100644 lib/api/ylideApi/useForumApiFetch.ts create mode 100644 lib/api/ylideApi/useTelegramApiFetch.ts create mode 100644 lib/api/ylideApi/utils.ts create mode 100644 lib/contexts/ylide/constants.tsx create mode 100644 lib/contexts/ylide/editor-utils.ts create mode 100644 lib/contexts/ylide/index.tsx create mode 100644 lib/contexts/ylide/logos/network/ArbitrumLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/AuroraLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/AvalancheLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/BNBChainLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/BaseLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/CeloLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/CronosLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/EthereumLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/FantomLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/GnosisLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/KlaytnLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/LineaLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/MetisLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/MoonbeamLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/MoonriverLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/OptimismLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/PolygonLogo.tsx create mode 100644 lib/contexts/ylide/logos/network/ZetaLogo.tsx create mode 100644 lib/contexts/ylide/logos/wallets/BinanceWalletLogo.tsx create mode 100644 lib/contexts/ylide/logos/wallets/CoinbaseWalletLogo.tsx create mode 100644 lib/contexts/ylide/logos/wallets/FrontierLogo.tsx create mode 100644 lib/contexts/ylide/logos/wallets/MetaMaskLogo.tsx create mode 100644 lib/contexts/ylide/logos/wallets/TrustWalletLogo.tsx create mode 100644 lib/contexts/ylide/logos/wallets/WalletConnectLogo.tsx create mode 100644 lib/contexts/ylide/modals.ts create mode 100644 lib/contexts/ylide/types.ts create mode 100644 lib/contexts/ylide/useYlideAccounts.ts create mode 100644 lib/contexts/ylide/useYlideFaucet.ts create mode 100644 lib/contexts/ylide/useYlidePushes.ts create mode 100644 lib/ensurePageLoaded.ts create mode 100644 lib/formatDateTime.ts create mode 100644 lib/shortDate.ts create mode 100644 nextjs/csp/policies/ylideRpcs.ts create mode 100644 pages/forum/[topic]/[thread]/index.tsx create mode 100644 pages/forum/[topic]/create-thread.tsx create mode 100644 pages/forum/[topic]/index.tsx create mode 100644 pages/forum/bookmarks/[hash].tsx create mode 100644 pages/forum/chats/[hash].tsx create mode 100644 pages/forum/chats/index.tsx create mode 100644 pages/forum/index.tsx create mode 100644 pages/forum/watches/[hash].tsx create mode 100644 types/api/forum.ts create mode 100644 ui/Forum.png create mode 100644 ui/address/AddressDiscuss.tsx create mode 100644 ui/connectAccountModal/BlockChainLabel.tsx create mode 100644 ui/connectAccountModal/WalletTag.tsx create mode 100644 ui/connectAccountModal/index.tsx create mode 100644 ui/createTopicModal/index.tsx create mode 100644 ui/pages/Bookmarks.tsx create mode 100644 ui/pages/Chat.tsx create mode 100644 ui/pages/Chats.tsx create mode 100644 ui/pages/CreateThread.tsx create mode 100644 ui/pages/Thread.tsx create mode 100644 ui/pages/Threads.tsx create mode 100644 ui/pages/Topics.tsx create mode 100644 ui/pages/Watches.tsx create mode 100644 ui/selectWalletModal/TabSwitcher.tsx create mode 100644 ui/selectWalletModal/WalletButton.tsx create mode 100644 ui/selectWalletModal/WalletsList.tsx create mode 100644 ui/selectWalletModal/WrappedQRCode.tsx create mode 100644 ui/selectWalletModal/index.tsx create mode 100644 ui/shared/forum/AccountsPopover.tsx create mode 100644 ui/shared/forum/BookmarkedThreads.tsx create mode 100644 ui/shared/forum/BookmarkedTopics.tsx create mode 100644 ui/shared/forum/ChatEntity.tsx create mode 100644 ui/shared/forum/ChatsAccountsBar.tsx create mode 100644 ui/shared/forum/ChatsList.tsx create mode 100644 ui/shared/forum/DevForumHero.tsx create mode 100644 ui/shared/forum/Editor.tsx create mode 100644 ui/shared/forum/PopoverByAccount.tsx create mode 100644 ui/shared/forum/PopoverCompactSorting.tsx create mode 100644 ui/shared/forum/PopoverSorting.tsx create mode 100644 ui/shared/forum/RepliesList.tsx create mode 100644 ui/shared/forum/ReplyEntity.tsx create mode 100644 ui/shared/forum/SelectAccountDropdown.tsx create mode 100644 ui/shared/forum/SelectBlockchainDropdown.tsx create mode 100644 ui/shared/forum/SortingList.tsx create mode 100644 ui/shared/forum/TabbedTagList.tsx create mode 100644 ui/shared/forum/TagsList.tsx create mode 100644 ui/shared/forum/ThreadReplies.tsx create mode 100644 ui/shared/forum/ThreadsHighlight.tsx create mode 100644 ui/shared/forum/ThreadsList.tsx create mode 100644 ui/shared/forum/TopicsList.tsx create mode 100644 ui/shared/forum/WatchedThreads.tsx create mode 100644 ui/shared/forum/WatchedTopics.tsx create mode 100644 ui/shared/forum/useThreadsContent.tsx create mode 100644 ui/shared/forum/useTopicsContent.tsx create mode 100644 ui/tx/TxDiscuss.tsx diff --git a/.vscode/settings.json b/.vscode/settings.json index 55712c19f1..8397362a2b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,6 @@ { - "typescript.tsdk": "node_modules/typescript/lib" + "typescript.tsdk": "node_modules/typescript/lib", + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + } } \ No newline at end of file diff --git a/configs/app/features/forum.ts b/configs/app/features/forum.ts new file mode 100644 index 0000000000..5b82a0da5b --- /dev/null +++ b/configs/app/features/forum.ts @@ -0,0 +1,32 @@ +import type { Feature } from './types'; + +import stripTrailingSlash from 'lib/stripTrailingSlash'; + +import { getEnvValue } from '../utils'; + +const indexerUrl = stripTrailingSlash(getEnvValue('NEXT_PUBLIC_FORUM_INDEXER_URL') || '') || null; +const walletConnectProjectId = getEnvValue('NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID') || ''; + +const title = 'Forum'; + +const config: Feature<{ indexerUrl: string; walletConnectProjectId: string }> = (() => { + if ( + getEnvValue('NEXT_PUBLIC_IS_FORUM_SUPPORTED') === 'true' && + indexerUrl && + walletConnectProjectId + ) { + return Object.freeze({ + title, + isEnabled: true, + walletConnectProjectId, + indexerUrl, + }); + } + + return Object.freeze({ + title, + isEnabled: false, + }); +})(); + +export default config; diff --git a/configs/app/features/index.ts b/configs/app/features/index.ts index ad45f9a4a1..fe445a41be 100644 --- a/configs/app/features/index.ts +++ b/configs/app/features/index.ts @@ -6,6 +6,7 @@ export { default as beaconChain } from './beaconChain'; export { default as bridgedTokens } from './bridgedTokens'; export { default as blockchainInteraction } from './blockchainInteraction'; export { default as csvExport } from './csvExport'; +export { default as forum } from './forum'; export { default as googleAnalytics } from './googleAnalytics'; export { default as graphqlApiDocs } from './graphqlApiDocs'; export { default as marketplace } from './marketplace'; diff --git a/configs/envs/.env.eth b/configs/envs/.env.eth index 71dc3fdd4d..5493cd7c08 100644 --- a/configs/envs/.env.eth +++ b/configs/envs/.env.eth @@ -45,3 +45,8 @@ NEXT_PUBLIC_ADMIN_SERVICE_API_HOST=https://admin-rs.services.blockscout.com #meta NEXT_PUBLIC_OG_IMAGE_URL=https://github.com/blockscout/frontend-configs/blob/main/configs/og-images/eth.jpg?raw=true + +# ylide +NEXT_PUBLIC_IS_FORUM_SUPPORTED=true +NEXT_PUBLIC_FORUM_INDEXER_URL=https://forum-blockscout.ylide.io +NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID=e9deead089b3383b2db777961e3fa244 \ No newline at end of file diff --git a/deploy/tools/envs-validator/schema.ts b/deploy/tools/envs-validator/schema.ts index 7940f55a48..69ff1ff5b2 100644 --- a/deploy/tools/envs-validator/schema.ts +++ b/deploy/tools/envs-validator/schema.ts @@ -182,6 +182,19 @@ const sentrySchema = yup }), }); +const ylideSchema = yup + .object() + .shape({ + NEXT_PUBLIC_IS_FORUM_SUPPORTED: yup.boolean(), + NEXT_PUBLIC_FORUM_INDEXER_URL: yup + .string() + .when('NEXT_PUBLIC_IS_FORUM_SUPPORTED', { + is: (value: boolean) => value, + then: (schema) => schema.test(urlTest).required(), + otherwise: (schema) => schema.max(-1, 'NEXT_PUBLIC_FORUM_INDEXER_URL cannot not be used if NEXT_PUBLIC_IS_FORUM_SUPPORTED is not set to "true"'), + }), + }); + const accountSchema = yup .object() .shape({ @@ -453,6 +466,7 @@ const schema = yup NEXT_PUBLIC_USE_NEXT_JS_PROXY: yup.boolean(), }) .concat(accountSchema) + .concat(ylideSchema) .concat(adsBannerSchema) .concat(marketplaceSchema) .concat(rollupSchema) diff --git a/deploy/tools/envs-validator/test/.env.base b/deploy/tools/envs-validator/test/.env.base index 578d5f91f6..d9f5c79c49 100644 --- a/deploy/tools/envs-validator/test/.env.base +++ b/deploy/tools/envs-validator/test/.env.base @@ -50,4 +50,7 @@ NEXT_PUBLIC_VIEWS_TX_ADDITIONAL_FIELDS=['fee_per_gas'] NEXT_PUBLIC_VIEWS_TX_HIDDEN_FIELDS=['value','fee_currency','gas_price','tx_fee','gas_fees','burnt_fees'] NEXT_PUBLIC_VISUALIZE_API_HOST=https://example.com NEXT_PUBLIC_WEB3_DISABLE_ADD_TOKEN_TO_WALLET=false -NEXT_PUBLIC_WEB3_WALLETS=['coinbase','metamask','token_pocket'] \ No newline at end of file +NEXT_PUBLIC_WEB3_WALLETS=['coinbase','metamask','token_pocket'] +NEXT_PUBLIC_IS_FORUM_SUPPORTED=true +NEXT_PUBLIC_FORUM_INDEXER_URL=https://forum-blockscout.ylide.io +NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID=e9deead089b3383b2db777961e3fa244 \ No newline at end of file diff --git a/deploy/values/l2-optimism-goerli/values.yaml b/deploy/values/l2-optimism-goerli/values.yaml index 1d695580d4..0cc8861bc0 100644 --- a/deploy/values/l2-optimism-goerli/values.yaml +++ b/deploy/values/l2-optimism-goerli/values.yaml @@ -194,6 +194,8 @@ frontend: NEXT_PUBLIC_L1_BASE_URL: https://eth-goerli.blockscout.com/ NEXT_PUBLIC_OPTIMISTIC_L2_WITHDRAWAL_URL: https://app.optimism.io/bridge/withdraw NEXT_PUBLIC_GRAPHIQL_TRANSACTION: 0x4a0ed8ddf751a7cb5297f827699117b0f6d21a0b2907594d300dc9fed75c7e62 + NEXT_PUBLIC_IS_FORUM_SUPPORTED: true + NEXT_PUBLIC_FORUM_INDEXER_URL: https://forum-blockscout.ylide.io envFromSecret: NEXT_PUBLIC_AUTH0_CLIENT_ID: ref+vault://deployment-values/blockscout/dev/front-main?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_AUTH0_CLIENT_ID NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID: ref+vault://deployment-values/blockscout/dev/front-main?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID diff --git a/deploy/values/main/values.yaml b/deploy/values/main/values.yaml index 65f36f4dcd..5768c26fb4 100644 --- a/deploy/values/main/values.yaml +++ b/deploy/values/main/values.yaml @@ -160,6 +160,9 @@ frontend: NEXT_PUBLIC_GRAPHIQL_TRANSACTION: 0xf7d4972356e6ae44ae948d0cf19ef2beaf0e574c180997e969a2837da15e349d NEXT_PUBLIC_WEB3_WALLETS: "['token_pocket','coinbase','metamask']" NEXT_PUBLIC_VIEWS_NFT_MARKETPLACES: "[{'name':'LooksRare','collection_url':'https://goerli.looksrare.org/collections/{hash}','instance_url':'https://goerli.looksrare.org/collections/{hash}/{id}','logo_url':'https://raw.githubusercontent.com/blockscout/frontend-configs/main/configs/nft-marketplace-logos/looks-rare.png'}]" + + NEXT_PUBLIC_IS_FORUM_SUPPORTED: true + NEXT_PUBLIC_FORUM_INDEXER_URL: https://forum-blockscout.ylide.io envFromSecret: NEXT_PUBLIC_SENTRY_DSN: ref+vault://deployment-values/blockscout/dev/front-main?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_SENTRY_DSN SENTRY_CSP_REPORT_URI: ref+vault://deployment-values/blockscout/dev/front-main?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/SENTRY_CSP_REPORT_URI diff --git a/deploy/values/review-l2/values.yaml.gotmpl b/deploy/values/review-l2/values.yaml.gotmpl index e55c460edf..df954e173a 100644 --- a/deploy/values/review-l2/values.yaml.gotmpl +++ b/deploy/values/review-l2/values.yaml.gotmpl @@ -69,6 +69,8 @@ frontend: NEXT_PUBLIC_L1_BASE_URL: https://blockscout-main.k8s-dev.blockscout.com NEXT_PUBLIC_GRAPHIQL_TRANSACTION: 0x4a0ed8ddf751a7cb5297f827699117b0f6d21a0b2907594d300dc9fed75c7e62 NEXT_PUBLIC_USE_NEXT_JS_PROXY: true + NEXT_PUBLIC_IS_FORUM_SUPPORTED: true + NEXT_PUBLIC_FORUM_INDEXER_URL: https://forum-blockscout.ylide.io envFromSecret: NEXT_PUBLIC_SENTRY_DSN: ref+vault://deployment-values/blockscout/dev/review-l2?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_SENTRY_DSN SENTRY_CSP_REPORT_URI: ref+vault://deployment-values/blockscout/dev/review-l2?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/SENTRY_CSP_REPORT_URI diff --git a/deploy/values/review/values.yaml.gotmpl b/deploy/values/review/values.yaml.gotmpl index b720f05d2b..184c277ccc 100644 --- a/deploy/values/review/values.yaml.gotmpl +++ b/deploy/values/review/values.yaml.gotmpl @@ -74,6 +74,8 @@ frontend: OTEL_SDK_ENABLED: true OTEL_EXPORTER_OTLP_ENDPOINT: http://jaeger-collector.jaeger.svc.cluster.local:4318 NEXT_OTEL_VERBOSE: 1 + NEXT_PUBLIC_IS_FORUM_SUPPORTED: true + NEXT_PUBLIC_FORUM_INDEXER_URL: https://forum-blockscout.ylide.io envFromSecret: NEXT_PUBLIC_SENTRY_DSN: ref+vault://deployment-values/blockscout/dev/review?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_SENTRY_DSN SENTRY_CSP_REPORT_URI: ref+vault://deployment-values/blockscout/dev/review?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/SENTRY_CSP_REPORT_URI diff --git a/docs/ENVS.md b/docs/ENVS.md index b405ff8178..2be61fe275 100644 --- a/docs/ENVS.md +++ b/docs/ENVS.md @@ -50,6 +50,7 @@ Please be aware that all environment variables prefixed with `NEXT_PUBLIC_` will - [SUAVE chain](ENVS.md#suave-chain) - [Sentry error monitoring](ENVS.md#sentry-error-monitoring) - [OpenTelemetry](ENVS.md#opentelemetry) + - [Ylide Forum](ENVS.md#ylide) - [3rd party services configuration](ENVS.md#external-services-configuration)   @@ -547,6 +548,18 @@ OpenTelemetry SDK for Node.js app could be enabled by passing `OTEL_SDK_ENABLED=   +### Ylide Forum + +Decenrtalized forum feature could be enabled by passing `NEXT_PUBLIC_IS_FORUM_SUPPORTED=true` variable. After deploying the forum indexer Docker image, you should pass the public url of backend API to the variable `NEXT_PUBLIC_FORUM_INDEXER_URL` (without trailing slash). If you want to support WalletConnect protocol for authorization, please, kindly sign up in the [Wallet Connect Cloud](https://cloud.walletconnect.com/sign-in) and provide the WalletConnect project ID to the `NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID` variable. + +| Variable | Type| Description | Compulsoriness | Default value | Example value | +| --- | --- | --- | --- | --- | --- | +| NEXT_PUBLIC_IS_FORUM_SUPPORTED | `boolean` | Flag to enable the feature | Required | `false` | `true` | +| NEXT_PUBLIC_FORUM_INDEXER_URL | `string` | URL of the forum public indexer | Optional | `` | `https://forum-blockscout.ylide.io` | +| NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID | `string` | Flag to enable the feature | Optional | `` | `e9deead089b3383b2db777961e3fa244` | + +  + ## External services configuration ### Google ReCaptcha diff --git a/icons/account.svg b/icons/account.svg new file mode 100644 index 0000000000..489c88bd1b --- /dev/null +++ b/icons/account.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/icons/arrows/arrow-back.svg b/icons/arrows/arrow-back.svg new file mode 100644 index 0000000000..594cf996fe --- /dev/null +++ b/icons/arrows/arrow-back.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/arrows/arrow-down.svg b/icons/arrows/arrow-down.svg new file mode 100644 index 0000000000..fe7dd0df74 --- /dev/null +++ b/icons/arrows/arrow-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/arrows/arrow-up.svg b/icons/arrows/arrow-up.svg new file mode 100644 index 0000000000..4f07a7a86b --- /dev/null +++ b/icons/arrows/arrow-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/arrows/caret-down.svg b/icons/arrows/caret-down.svg new file mode 100644 index 0000000000..d5818e3a75 --- /dev/null +++ b/icons/arrows/caret-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/arrows/caret-right.svg b/icons/arrows/caret-right.svg new file mode 100644 index 0000000000..08a42e8f4a --- /dev/null +++ b/icons/arrows/caret-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/attachment.svg b/icons/attachment.svg new file mode 100644 index 0000000000..7c91577f4d --- /dev/null +++ b/icons/attachment.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/bookmark.svg b/icons/bookmark.svg new file mode 100644 index 0000000000..81078f42a8 --- /dev/null +++ b/icons/bookmark.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/bookmark_filled.svg b/icons/bookmark_filled.svg new file mode 100644 index 0000000000..6f3a0716ff --- /dev/null +++ b/icons/bookmark_filled.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/chat.svg b/icons/chat.svg new file mode 100644 index 0000000000..ecaebea99d --- /dev/null +++ b/icons/chat.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/chat_list.svg b/icons/chat_list.svg new file mode 100644 index 0000000000..dcca43382f --- /dev/null +++ b/icons/chat_list.svg @@ -0,0 +1,4 @@ + + + + diff --git a/icons/eye.svg b/icons/eye.svg new file mode 100644 index 0000000000..61c7295694 --- /dev/null +++ b/icons/eye.svg @@ -0,0 +1,4 @@ + + + + diff --git a/icons/eye_filled.svg b/icons/eye_filled.svg new file mode 100644 index 0000000000..87b0d7bee3 --- /dev/null +++ b/icons/eye_filled.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/forum.svg b/icons/forum.svg new file mode 100644 index 0000000000..7e0ecd7df6 --- /dev/null +++ b/icons/forum.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/horizontal_dots.svg b/icons/horizontal_dots.svg new file mode 100644 index 0000000000..ab24132b9a --- /dev/null +++ b/icons/horizontal_dots.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/logout.svg b/icons/logout.svg new file mode 100644 index 0000000000..fb76af6369 --- /dev/null +++ b/icons/logout.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/proceedTOWalletArrow.svg b/icons/proceedTOWalletArrow.svg new file mode 100644 index 0000000000..85debd96b0 --- /dev/null +++ b/icons/proceedTOWalletArrow.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/icons/reply.svg b/icons/reply.svg new file mode 100644 index 0000000000..7cb24d4dd7 --- /dev/null +++ b/icons/reply.svg @@ -0,0 +1,3 @@ + + + diff --git a/icons/send.svg b/icons/send.svg new file mode 100644 index 0000000000..5fe7ec2d0e --- /dev/null +++ b/icons/send.svg @@ -0,0 +1,3 @@ + + + diff --git a/jest/lib.tsx b/jest/lib.tsx index 2c590932cf..f08f9b335c 100644 --- a/jest/lib.tsx +++ b/jest/lib.tsx @@ -6,9 +6,9 @@ import React from 'react'; import { AppContextProvider } from 'lib/contexts/app'; import { ScrollDirectionProvider } from 'lib/contexts/scrollDirection'; +import { YlideProvider } from 'lib/contexts/ylide'; import { SocketProvider } from 'lib/socket/context'; import theme from 'theme'; - import 'lib/setLocale'; const PAGE_PROPS = { @@ -19,6 +19,8 @@ const PAGE_PROPS = { hash: '', number: '', q: '', + topic: '', + thread: '', }; const TestApp = ({ children }: {children: React.ReactNode}) => { @@ -37,7 +39,9 @@ const TestApp = ({ children }: {children: React.ReactNode}) => { - { children } + + { children } + diff --git a/lib/ago.ts b/lib/ago.ts new file mode 100644 index 0000000000..bffba6ca3c --- /dev/null +++ b/lib/ago.ts @@ -0,0 +1,20 @@ +export default function ago(timestamp: number, now = Date.now()) { + const seconds = Math.floor((now - timestamp) / 1000); + const minutes = Math.floor(seconds / 60); + const hours = Math.floor(minutes / 60); + const days = Math.floor(hours / 24); + + if (seconds < 60) { + return `${ seconds } second${ seconds === 1 ? '' : 's' } ago`; + } + + if (minutes < 60) { + return `${ minutes } minute${ minutes === 1 ? '' : 's' } ago`; + } + + if (hours < 24) { + return `${ hours } hour${ hours === 1 ? '' : 's' } ago`; + } + + return `${ days } day${ days === 1 ? '' : 's' } ago`; +} diff --git a/lib/api/ylideApi/ChatsPersonalApi.ts b/lib/api/ylideApi/ChatsPersonalApi.ts new file mode 100644 index 0000000000..2742c789d0 --- /dev/null +++ b/lib/api/ylideApi/ChatsPersonalApi.ts @@ -0,0 +1,110 @@ +import type { IMessage } from '@ylide/sdk'; +import React from 'react'; + +import { DEFAULT_CHAINS } from 'ui/shared/forum/SelectBlockchainDropdown'; + +import useChatsApiFetch from './useChatsApiFetch'; + +const useChatsGetList = () => { + const fetch = useChatsApiFetch(); + + return React.useCallback((myAddress: string, offset = 0, limit = 100) => { + return fetch<{ + result: true; + data: { + totalCount: string; + entries: Array<{ + address: string; + msgId: string; + metadata: Omit & { key: Array }; + isSentByYou: boolean; + lastMessageTimestamp: number; + }>; + }; + }>({ + url: '/v2/chats', + fetchParams: { + method: 'POST', + body: { + myAddress, + offset, + limit, + blockchain: DEFAULT_CHAINS, + }, + }, + }).then(response => ({ + ...response, + data: { + ...response.data, + entries: response.data.entries.map(e => ({ + ...e, + metadata: { + ...e.metadata, + key: new Uint8Array(e.metadata.key), + }, + })), + }, + })); + }, [ fetch ]); +}; + +const useChatsGetMessages = () => { + const fetch = useChatsApiFetch(); + + return React.useCallback(( + myAddress: string, + recipientAddress: string, + offset = 0, + limit = 100, + ) => { + return fetch<{ + result: true; + data: { + totalCount: string; + entries: Array<{ + id: string; + type: 'message'; + isIncoming: boolean; + msg: IMessage; + }>; + }; + }>({ + url: '/v2/thread', + fetchParams: { + method: 'POST', + body: { + myAddress, + recipientAddress, + offset, + limit, + blockchain: DEFAULT_CHAINS, + }, + }, + }).then(result => { + if (result.result) { + return { + ...result, + data: { + ...result.data, + entries: result.data.entries.map(m => ({ + ...m, + msg: { + ...m.msg, + key: new Uint8Array(m.msg.key), + }, + })), + }, + }; + } else { + return result; + } + }); + }, [ fetch ]); +}; + +const publicApi = { + useGetChats: useChatsGetList, + useGetMessages: useChatsGetMessages, +}; + +export default publicApi; diff --git a/lib/api/ylideApi/ForumPersonalApi.ts b/lib/api/ylideApi/ForumPersonalApi.ts new file mode 100644 index 0000000000..37216d2e1f --- /dev/null +++ b/lib/api/ylideApi/ForumPersonalApi.ts @@ -0,0 +1,167 @@ +import React from 'react'; + +import type { ForumThread, ForumTopic } from './types'; + +import useYlideApiFetch from './useForumApiFetch'; + +const useForumBackendAcquireAuthKey = () => { + const fetch = useYlideApiFetch(); + + return React.useCallback((body: { + messageEncrypted: string; + publicKey: string; + address: string; + }) => { + return fetch<{ token: string }>({ + url: '/auth/', + fetchParams: { + method: 'POST', + body, + }, + }).then(({ token }: { token: string }) => token); + }, [ fetch ]); +}; + +const useForumBackendCreateTopic = (token: string) => { + const fetch = useYlideApiFetch(token); + + return React.useCallback((body: { + title: string; + description: string; + adminOnly: boolean; + }) => { + return fetch({ + url: '/topic/', + fetchParams: { + method: 'POST', + body, + }, + }); + }, [ fetch ]); +}; + +const useForumBackendBookmarkTopic = () => { + const fetch = useYlideApiFetch(); + + return React.useCallback((body: { + token: string; + id: string; + enable: boolean; + }) => { + return fetch({ + url: '/topic/bookmark/', + fetchParams: { + method: 'POST', + body: { + id: body.id, + enable: body.enable, + }, + }, + tokens: body.token, + }); + }, [ fetch ]); +}; + +const useForumBackendWatchTopic = () => { + const fetch = useYlideApiFetch(); + + return React.useCallback((body: { + token: string; + id: string; + enable: boolean; + }) => { + return fetch({ + url: '/topic/watch/', + fetchParams: { + method: 'POST', + body: { + id: body.id, + enable: body.enable, + }, + }, + tokens: body.token, + }); + }, [ fetch ]); +}; + +const useForumBackendBookmarkThread = () => { + const fetch = useYlideApiFetch(); + + return React.useCallback((body: { + token: string; + id: string; + enable: boolean; + }) => { + return fetch({ + url: '/thread/bookmark/', + fetchParams: { + method: 'POST', + body: { + id: body.id, + enable: body.enable, + }, + }, + tokens: body.token, + }); + }, [ fetch ]); +}; + +const useForumBackendWatchThread = () => { + const fetch = useYlideApiFetch(); + + return React.useCallback((body: { + token: string; + id: string; + enable: boolean; + }) => { + return fetch({ + url: '/thread/watch/', + fetchParams: { + method: 'POST', + body: { + id: body.id, + enable: body.enable, + }, + }, + tokens: body.token, + }); + }, [ fetch ]); +}; + +export interface ThreadCreateParams { + topic: string; + title: string; + description: string; + + parentFeedId?: string; + tags: Array; + blockchainAddress?: string; + blockchainTx?: string; + comissions?: string; +} + +const useForumBackendCreateThread = (token: string) => { + const fetch = useYlideApiFetch(token); + + return React.useCallback((body: ThreadCreateParams) => { + return fetch({ + url: '/thread/', + fetchParams: { + method: 'POST', + body, + }, + }); + }, [ fetch ]); +}; + +const personalApi = { + useAcquireAuthKey: useForumBackendAcquireAuthKey, + useCreateTopic: useForumBackendCreateTopic, + useCreateThread: useForumBackendCreateThread, + useBookmarkTopic: useForumBackendBookmarkTopic, + useBookmarkThread: useForumBackendBookmarkThread, + useWatchTopic: useForumBackendWatchTopic, + useWatchThread: useForumBackendWatchThread, +}; + +export default personalApi; diff --git a/lib/api/ylideApi/ForumPublicApi.ts b/lib/api/ylideApi/ForumPublicApi.ts new file mode 100644 index 0000000000..506551d0eb --- /dev/null +++ b/lib/api/ylideApi/ForumPublicApi.ts @@ -0,0 +1,227 @@ +import type { Uint256 } from '@ylide/sdk'; +import React from 'react'; + +import type { PaginatedArray, ForumTopic, ForumThread, ForumReply } from './types'; + +import { useYlide } from 'lib/contexts/ylide'; + +import useForumApiFetch from './useForumApiFetch'; + +const useForumBackendGetMe = (tokens: Array) => { + const fetch = useForumApiFetch(tokens); + + return React.useCallback(() => { + return fetch>({ + url: '/auth/me', + fetchParams: { + method: 'GET', + }, + }); + }, [ fetch ]); +}; + +const useForumBackendGetTopics = (tokens?: Array, criteria: 'all' | 'bookmarked' | 'watched' = 'all') => { + const fetch = useForumApiFetch(tokens); + + return React.useCallback((query: string, sort: [string, 'ASC' | 'DESC'], range: [number, number]) => { + const queryParams: Record = query ? { + sort: JSON.stringify(sort), + search: query, + } : { + sort: JSON.stringify(sort), + }; + if (criteria === 'bookmarked') { + queryParams.onlyBookmarked = 'true'; + } else + if (criteria === 'watched') { + queryParams.onlyWatched = 'true'; + } + queryParams.range = JSON.stringify(range); + return fetch>({ + url: '/topic/', + queryParams, + fetchParams: { + method: 'GET', + }, + }); + }, [ fetch, criteria ]); +}; + +const useForumBackendGetTopic = (id: string) => { + const { accounts: { tokens } } = useYlide(); + const fetch = useForumApiFetch(tokens); + + return React.useCallback(() => { + return fetch({ + url: `/topic/${ id }`, + fetchParams: { + method: 'GET', + }, + }); + }, [ fetch, id ]); +}; + +const useForumBackendGetThreads = ( + tokens?: Array, + topicSlug?: string, + criteria: 'all' | 'bookmarked' | 'watched' = 'all', + tag?: string, +) => { + const fetch = useForumApiFetch(tokens); + + return React.useCallback((query: string, sort: [string, 'ASC' | 'DESC'], range: [number, number]) => { + const queryParams: Record = query ? { + sort: JSON.stringify(sort), + search: query, + } : { + sort: JSON.stringify(sort), + }; + if (topicSlug) { + queryParams.topicSlug = topicSlug; + } + if (criteria === 'bookmarked') { + queryParams.onlyBookmarked = 'true'; + } else + if (criteria === 'watched') { + queryParams.onlyWatched = 'true'; + } + if (tag) { + queryParams.tags = tag; + } + queryParams.range = JSON.stringify(range); + return fetch>({ + url: `/thread/`, + queryParams, + fetchParams: { + method: 'GET', + }, + }); + }, [ fetch, topicSlug, criteria, tag ]); +}; + +const useForumBackendGetThreadsMeta = (topicSlug: string) => { + const { accounts: { tokens } } = useYlide(); + const fetch = useForumApiFetch(tokens); + + return React.useCallback(() => { + return fetch<{ + pinnedThreads: Array; + topTags: Array<{ name: string; count: string }>; + }>({ + url: `/topic/${ topicSlug }/meta`, + fetchParams: { + method: 'GET', + }, + }); + }, [ fetch, topicSlug ]); +}; + +const useForumBackendGetBestThreads = () => { + const fetch = useForumApiFetch(); + + return React.useCallback(() => { + return fetch<{ + latest: Array; + newest: Array; + popular: Array; + }>({ + url: `/thread/best`, + fetchParams: { + method: 'GET', + }, + }); + }, [ fetch ]); +}; + +const useForumBackendGetThread = (id: string) => { + const { accounts: { tokens } } = useYlide(); + const fetch = useForumApiFetch(tokens); + + return React.useCallback(() => { + return fetch({ + url: `/thread/${ id }`, + fetchParams: { + method: 'GET', + }, + }); + }, [ fetch, id ]); +}; + +const useForumBackendGetThreadByTx = (txHash: string) => { + const { accounts: { tokens } } = useYlide(); + const fetch = useForumApiFetch(tokens); + + return React.useCallback(() => { + return fetch({ + url: `/thread//blockchain/transaction/${ txHash }`, + fetchParams: { + method: 'GET', + }, + }); + }, [ fetch, txHash ]); +}; + +const useForumBackendGetThreadByAddress = (address: string) => { + const { accounts: { tokens } } = useYlide(); + const fetch = useForumApiFetch(tokens); + + return React.useCallback(() => { + return fetch({ + url: `/thread//blockchain/address/${ address }`, + fetchParams: { + method: 'GET', + }, + }); + }, [ fetch, address ]); +}; + +const useForumBackendGetReplies = () => { + const { accounts: { tokens } } = useYlide(); + const fetch = useForumApiFetch(tokens); + + return React.useCallback((feedId: Uint256, sort: [string, 'ASC' | 'DESC']) => { + return fetch>({ + url: `/reply/`, + queryParams: { + feedId, + sort: JSON.stringify(sort), + }, + fetchParams: { + method: 'GET', + }, + }); + }, [ fetch ]); +}; + +const useForumBackendGetReply = () => { + const { accounts: { tokens } } = useYlide(); + const fetch = useForumApiFetch(tokens); + + return React.useCallback((id: string) => { + return fetch({ + url: `/reply/${ id }`, + fetchParams: { + method: 'GET', + }, + }); + }, [ fetch ]); +}; + +const publicApi = { + useGetMe: useForumBackendGetMe, + + useGetTopics: useForumBackendGetTopics, + useGetTopic: useForumBackendGetTopic, + + useGetThreads: useForumBackendGetThreads, + useGetThreadsMeta: useForumBackendGetThreadsMeta, + useGetBestThreads: useForumBackendGetBestThreads, + useGetThread: useForumBackendGetThread, + useGetThreadByTx: useForumBackendGetThreadByTx, + useGetThreadByAddress: useForumBackendGetThreadByAddress, + + useGetReplies: useForumBackendGetReplies, + useGetReply: useForumBackendGetReply, +}; + +export default publicApi; diff --git a/lib/api/ylideApi/ForumTelegramApi.ts b/lib/api/ylideApi/ForumTelegramApi.ts new file mode 100644 index 0000000000..03604cb64b --- /dev/null +++ b/lib/api/ylideApi/ForumTelegramApi.ts @@ -0,0 +1,27 @@ +import React from 'react'; + +import useTelegramApiFetch from './useTelegramApiFetch'; + +const useForumTelegramGetLink = () => { + const fetch = useTelegramApiFetch(); + + return React.useCallback(( + addresses: Array, + ) => { + return fetch<{ + result: true; + data: string; + }>({ + url: `/get-link?${ addresses.map(address => `addresses=${ encodeURIComponent(address) }`).join('&') }`, + fetchParams: { + method: 'GET', + }, + }).then(res => res.data); + }, [ fetch ]); +}; + +const forumTelegramApi = { + useGetLink: useForumTelegramGetLink, +}; + +export default forumTelegramApi; diff --git a/lib/api/ylideApi/types.ts b/lib/api/ylideApi/types.ts new file mode 100644 index 0000000000..d959aa61c5 --- /dev/null +++ b/lib/api/ylideApi/types.ts @@ -0,0 +1,78 @@ +import type { Uint256 } from '@ylide/sdk'; + +export interface PaginatedState { + loading: boolean; + error: NonNullable | null; + data: PaginatedArray; +} + +export interface PaginatedArray { + count: number; + items: Array; +} + +export interface ForumTopic { + id: string; + title: string; + description: string; + adminOnly: boolean; + creatorAddress: string; + slug: string; + threadsCount: string; + bookmarked: Array | null; + watched: Array | null; +} + +export interface ForumThreadCompact { + slug: string; + feedId: Uint256; + createTimestamp: number; + updateTimestamp: number | null; + + topic: string; + title: string; + description: string; + tags: Array; + + blockchainAddress: string | null; + blockchainTx: string | null; + comissions: Record; + creatorAddress: string; + messageFeedId: Uint256; + parentFeedId: Uint256 | null; + + bookmarked: Array | null; + watched: Array | null; +} + +export interface ForumThread extends ForumThreadCompact { + activated: boolean; + replyCount: string; + tags: Array; + topicId: string; + topicSlug: string; +} + +export interface ForumReply { + id: string; + + createTimestamp: number; + + blockchain: string; + feedId: Uint256; + sender: string; + + contentText: string; + + banned: boolean; + isAdmin: boolean; +} + +export const defaultPaginatedState: () => PaginatedState = () => ({ + loading: true, + error: null, + data: { + count: 0, + items: [], + }, +}); diff --git a/lib/api/ylideApi/useChatsApiFetch.ts b/lib/api/ylideApi/useChatsApiFetch.ts new file mode 100644 index 0000000000..f9d19ba81b --- /dev/null +++ b/lib/api/ylideApi/useChatsApiFetch.ts @@ -0,0 +1,43 @@ +// const { entries: enteriesRaw } = await indexerRequest<{ +// totalCount: number +// entries: { type: 'message' | string; id: string; isIncoming: boolean; msg: IMessage }[] +// }>(CHAT_ENDPOINT, { +// myAddress: account, +// recipientAddress: recipientAddress || recipientName, +// offset: 0, +// limit: 1000, +// }) + +import _pickBy from 'lodash/pickBy'; +import React from 'react'; + +import useFetch from 'lib/hooks/useFetch'; +import type { Params as FetchParams } from 'lib/hooks/useFetch'; + +export interface Params { + url?: string; + queryParams?: Record; + fetchParams?: Pick; +} + +const baseUrl = `https://idx1.ylide.io`; + +export default function useChatsApiFetch() { + const fetch = useFetch(); + + return React.useCallback(( + { url, queryParams, fetchParams }: Params = {}, + ) => { + const headers = _pickBy({ + 'Content-type': fetchParams?.body ? 'text/plain' : undefined, + }, Boolean) as HeadersInit; + + return fetch( + `${ baseUrl }${ url }?${ new URLSearchParams(queryParams || {}).toString() }`, + { + headers, + ...fetchParams, + }, + ); + }, [ fetch ]); +} diff --git a/lib/api/ylideApi/useForumApiFetch.ts b/lib/api/ylideApi/useForumApiFetch.ts new file mode 100644 index 0000000000..8ef1a4c7ae --- /dev/null +++ b/lib/api/ylideApi/useForumApiFetch.ts @@ -0,0 +1,41 @@ +import _pickBy from 'lodash/pickBy'; +import React from 'react'; + +import type { Params as FetchParams } from 'lib/hooks/useFetch'; +import useFetch from 'lib/hooks/useFetch'; + +export interface Params { + url?: string; + queryParams?: Record | Array>; + fetchParams?: Pick; + tokens?: string | Array; +} + +const baseUrl = `https://blockscout-feed1.ylide.io`; + +const mergeTokens = (tokens?: string | Array, overrideTokens?: string | Array) => { + const firstTokens = typeof tokens === 'string' ? [ tokens ] : tokens || []; + const secondTokens = typeof overrideTokens === 'string' ? [ overrideTokens ] : overrideTokens || []; + return [ ...new Set(firstTokens.concat(secondTokens)).values() ]; +}; + +export default function useForumApiFetch(tokens?: string | Array) { + const fetch = useFetch(); + + return React.useCallback(( + { url, queryParams, fetchParams, tokens: overrideTokens }: Params = {}, + ) => { + const mergedTokens = mergeTokens(tokens, overrideTokens); + const headers = _pickBy({ + Authorization: mergedTokens ? `Bearer ${ typeof mergedTokens === 'string' ? mergedTokens : mergedTokens.join(' ') }` : undefined, + }, Boolean) as HeadersInit; + + return fetch( + `${ baseUrl }${ url }?${ new URLSearchParams(queryParams || {}).toString() }`, + { + headers, + ...fetchParams, + }, + ); + }, [ fetch, tokens ]); +} diff --git a/lib/api/ylideApi/useTelegramApiFetch.ts b/lib/api/ylideApi/useTelegramApiFetch.ts new file mode 100644 index 0000000000..834c17a8b0 --- /dev/null +++ b/lib/api/ylideApi/useTelegramApiFetch.ts @@ -0,0 +1,27 @@ +import React from 'react'; + +import useFetch from 'lib/hooks/useFetch'; +import type { Params as FetchParams } from 'lib/hooks/useFetch'; + +export interface Params { + url?: string; + queryParams?: Record; + fetchParams?: Pick; +} + +const baseUrl = `https://bss-tg.ylide.io`; + +export default function useTelegramApiFetch() { + const fetch = useFetch(); + + return React.useCallback(( + { url, queryParams, fetchParams }: Params = {}, + ) => { + return fetch( + `${ baseUrl }${ url }${ queryParams ? `?${ new URLSearchParams(queryParams || {}).toString() }` : '' }`, + { + ...fetchParams, + }, + ); + }, [ fetch ]); +} diff --git a/lib/api/ylideApi/utils.ts b/lib/api/ylideApi/utils.ts new file mode 100644 index 0000000000..d9e37fb074 --- /dev/null +++ b/lib/api/ylideApi/utils.ts @@ -0,0 +1,21 @@ +import type { PaginatedState } from './types'; +import type { PaginationParams } from 'ui/shared/pagination/types'; + +export const calcForumPagination = ( + pageSize: number, + page: number, + setPage: (_page: number) => void, + state: PaginatedState, +): PaginationParams => { + return { + page, + onNextPageClick: () => setPage(page + 1), + onPrevPageClick: () => setPage(page - 1), + resetPage: () => setPage(1), + hasPages: state.data.count > pageSize, + hasNextPage: state.data.count > pageSize * page, + canGoBackwards: page > 1, + isLoading: state.loading, + isVisible: state.data.count > pageSize, + }; +}; diff --git a/lib/contexts/app.tsx b/lib/contexts/app.tsx index f0a1eec14e..4c21e6c3a2 100644 --- a/lib/contexts/app.tsx +++ b/lib/contexts/app.tsx @@ -15,6 +15,8 @@ const AppContext = createContext({ hash: '', number: '', q: '', + topic: '', + thread: '', }); export function AppContextProvider({ children, pageProps }: Props) { diff --git a/lib/contexts/ylide/constants.tsx b/lib/contexts/ylide/constants.tsx new file mode 100644 index 0000000000..9d64411a08 --- /dev/null +++ b/lib/contexts/ylide/constants.tsx @@ -0,0 +1,515 @@ +import { EVM_NAMES, EVMNetwork } from '@ylide/ethereum'; +import React from 'react'; + +import { ArbitrumLogo } from './logos/network/ArbitrumLogo'; +import { AuroraLogo } from './logos/network/AuroraLogo'; +import { AvalancheLogo } from './logos/network/AvalancheLogo'; +import { BaseLogo } from './logos/network/BaseLogo'; +import { BNBChainLogo } from './logos/network/BNBChainLogo'; +import { CeloLogo } from './logos/network/CeloLogo'; +import { CronosLogo } from './logos/network/CronosLogo'; +import { EthereumLogo } from './logos/network/EthereumLogo'; +import { FantomLogo } from './logos/network/FantomLogo'; +import { GnosisLogo } from './logos/network/GnosisLogo'; +import { KlaytnLogo } from './logos/network/KlaytnLogo'; +import { LineaLogo } from './logos/network/LineaLogo'; +import { MetisLogo } from './logos/network/MetisLogo'; +import { MoonbeamLogo } from './logos/network/MoonbeamLogo'; +import { MoonriverLogo } from './logos/network/MoonriverLogo'; +import { OptimismLogo } from './logos/network/OptimismLogo'; +import { PolygonLogo } from './logos/network/PolygonLogo'; +import { ZetaLogo } from './logos/network/ZetaLogo'; +import { BinanceWalletLogo } from './logos/wallets/BinanceWalletLogo'; +import { CoinbaseWalletLogo } from './logos/wallets/CoinbaseWalletLogo'; +import { FrontierLogo } from './logos/wallets/FrontierLogo'; +import { MetaMaskLogo } from './logos/wallets/MetaMaskLogo'; +import { TrustWalletLogo } from './logos/wallets/TrustWalletLogo'; +import { WalletConnectLogo } from './logos/wallets/WalletConnectLogo'; + +export const BlockchainName = { + LOCAL_HARDHAT: EVM_NAMES[EVMNetwork.LOCAL_HARDHAT], + CRONOS: EVM_NAMES[EVMNetwork.CRONOS], + ETHEREUM: EVM_NAMES[EVMNetwork.ETHEREUM], + BNBCHAIN: EVM_NAMES[EVMNetwork.BNBCHAIN], + ARBITRUM: EVM_NAMES[EVMNetwork.ARBITRUM], + AVALANCHE: EVM_NAMES[EVMNetwork.AVALANCHE], + OPTIMISM: EVM_NAMES[EVMNetwork.OPTIMISM], + POLYGON: EVM_NAMES[EVMNetwork.POLYGON], + FANTOM: EVM_NAMES[EVMNetwork.FANTOM], + KLAYTN: EVM_NAMES[EVMNetwork.KLAYTN], + GNOSIS: EVM_NAMES[EVMNetwork.GNOSIS], + AURORA: EVM_NAMES[EVMNetwork.AURORA], + CELO: EVM_NAMES[EVMNetwork.CELO], + MOONBEAM: EVM_NAMES[EVMNetwork.MOONBEAM], + MOONRIVER: EVM_NAMES[EVMNetwork.MOONRIVER], + METIS: EVM_NAMES[EVMNetwork.METIS], + ASTAR: EVM_NAMES[EVMNetwork.ASTAR], + BASE: EVM_NAMES[EVMNetwork.BASE], + ZETA: EVM_NAMES[EVMNetwork.ZETA], + LINEA: EVM_NAMES[EVMNetwork.LINEA], +}; + +export interface IEthereumNetworkDescriptor { + chainId: string; + chainName: string; + nativeCurrency: { + name: string; + symbol: string; + decimals: 18; + }; + rpcUrls: Array; + blockExplorerUrls: Array; +} + +export const blockchainMeta: Record< +string, +{ + title: string; + logo: (s?: number) => JSX.Element; + ethNetwork: IEthereumNetworkDescriptor; +} +> = { + [BlockchainName.LINEA]: { + title: 'Linea', + logo: (s = 16) => , + ethNetwork: { + chainId: '0xe708', + chainName: 'Linea', + nativeCurrency: { + name: 'ETH', + symbol: 'ETH', + decimals: 18, + }, + rpcUrls: [ 'https://linea.blockpi.network/v1/rpc/public' ], + blockExplorerUrls: [ 'https://lineascan.build' ], + }, + }, + [BlockchainName.BASE]: { + title: 'Base', + logo: (s = 16) => , + ethNetwork: { + chainId: '0x2105', + chainName: 'Base', + nativeCurrency: { + name: 'ETH', + symbol: 'ETH', + decimals: 18, + }, + rpcUrls: [ 'https://base.blockpi.network/v1/rpc/public' ], + blockExplorerUrls: [ 'https://basescan.org' ], + }, + }, + [BlockchainName.ZETA]: { + title: 'ZetaChain', + logo: (s = 16) => , + ethNetwork: { + chainId: '0x1B59', + chainName: 'Zeta Chain', + nativeCurrency: { + name: 'aZETA', + symbol: 'aZETA', + decimals: 18, + }, + rpcUrls: [ 'https://zetachain-athens-evm.blockpi.network/v1/rpc/public' ], + blockExplorerUrls: [ 'https://zetachain-athens-3.blockscout.com' ], + }, + }, + [BlockchainName.LOCAL_HARDHAT]: { + title: 'LocalNet', + logo: (s = 16) => , + ethNetwork: { + chainId: '0x7A69', + chainName: 'Hardhat Local', + nativeCurrency: { + name: 'GoEther', + symbol: 'GO', + decimals: 18, + }, + rpcUrls: [], + blockExplorerUrls: [], + }, + }, + [BlockchainName.CRONOS]: { + title: 'Cronos', + logo: (s = 16) => , + ethNetwork: { + chainId: '0x19', + chainName: 'Cronos Mainnet Beta', + nativeCurrency: { + name: 'Cronos', + symbol: 'CRO', + decimals: 18, + }, + rpcUrls: [ + 'https://evm.cronos.org', + 'https://cronos-rpc.heavenswail.one', + 'https://cronosrpc-1.xstaking.sg', + 'https://cronos-rpc.elk.finance', + ], + blockExplorerUrls: [ 'https://cronoscan.com' ], + }, + }, + [BlockchainName.ETHEREUM]: { + title: 'Ethereum', + logo: (s = 16) => , + ethNetwork: { + chainId: '0x1', + chainName: 'Ethereum Mainnet', + nativeCurrency: { + name: 'Ether', + symbol: 'ETH', + decimals: 18, + }, + rpcUrls: [ + 'https://api.mycryptoapi.com/eth', + 'https://cloudflare-eth.com', + 'https://rpc.flashbots.net', + 'https://eth-mainnet.gateway.pokt.network/v1/5f3453978e354ab992c4da79', + 'https://mainnet-nethermind.blockscout.com', + 'https://nodes.mewapi.io/rpc/eth', + 'https://main-rpc.linkpool.io', + 'https://mainnet.eth.cloud.ava.do', + 'https://ethereumnodelight.app.runonflux.io', + 'https://rpc.ankr.com/eth', + 'https://eth-rpc.gateway.pokt.network', + 'https://main-light.eth.linkpool.io', + 'https://eth-mainnet.public.blastapi.io', + 'http://18.211.207.34:8545', + 'https://eth-mainnet.nodereal.io/v1/1659dfb40aa24bbb8153a677b98064d7', + 'https://api.bitstack.com/v1/wNFxbiJyQsSeLrX8RRCHi7NpRxrlErZk/DjShIqLishPCTB9HiMkPHXjUM9CNM9Na/ETH/mainnet', + 'https://eth-mainnet.unifra.io/v1/d157f0245608423091f5b4b9c8e2103e', + 'https://1rpc.io/eth', + 'https://eth-mainnet.rpcfast.com', + 'https://eth-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf', + 'https://api.securerpc.com/v1', + ], + blockExplorerUrls: [ 'https://etherscan.io' ], + }, + }, + [BlockchainName.BNBCHAIN]: { + title: 'BNB Chain', + logo: (s = 16) => , + ethNetwork: { + chainId: '0x38', + chainName: 'Binance Smart Chain Mainnet', + nativeCurrency: { + name: 'Binance Chain Native Token', + symbol: 'BNB', + decimals: 18, + }, + rpcUrls: [ + 'https://bsc-dataseed1.binance.org', + 'https://bsc-dataseed2.binance.org', + 'https://bsc-dataseed3.binance.org', + 'https://bsc-dataseed4.binance.org', + 'https://bsc-dataseed1.defibit.io', + 'https://bsc-dataseed2.defibit.io', + 'https://bsc-dataseed3.defibit.io', + 'https://bsc-dataseed4.defibit.io', + 'https://bsc-dataseed1.ninicoin.io', + 'https://bsc-dataseed2.ninicoin.io', + 'https://bsc-dataseed3.ninicoin.io', + 'https://bsc-dataseed4.ninicoin.io', + 'wss://bsc-ws-node.nariox.org', + 'https://bsc-dataseed.binance.org', + 'https://bsc-mainnet.nodereal.io/v1/64a9df0874fb4a93b9d0a3849de012d3', + 'https://rpc.ankr.com/bsc', + 'https://bscrpc.com', + 'https://bsc.mytokenpocket.vip', + 'https://binance.nodereal.io', + 'https://rpc-bsc.bnb48.club', + 'https://bscapi.terminet.io/rpc', + 'https://1rpc.io/bnb', + 'https://bsc-mainnet.rpcfast.com', + 'https://bsc-mainnet.rpcfast.com?api_key=S3X5aFCCW9MobqVatVZX93fMtWCzff0MfRj9pvjGKSiX5Nas7hz33HwwlrT5tXRM', + ], + blockExplorerUrls: [ 'https://bscscan.com' ], + }, + }, + [BlockchainName.ARBITRUM]: { + title: 'Arbitrum', + logo: (s = 16) => , + ethNetwork: { + chainId: '0xa4b1', + chainName: 'Arbitrum One', + nativeCurrency: { + name: 'Ether', + symbol: 'ETH', + decimals: 18, + }, + rpcUrls: [ 'https://arb1.arbitrum.io/rpc', 'https://rpc.ankr.com/arbitrum', 'https://1rpc.io/arb' ], + blockExplorerUrls: [ 'https://arbiscan.io' ], + }, + }, + [BlockchainName.AVALANCHE]: { + title: 'Avalanche', + logo: (s = 16) => , + ethNetwork: { + chainId: '0xa86a', + chainName: 'Avalanche C-Chain', + nativeCurrency: { + name: 'Avalanche', + symbol: 'AVAX', + decimals: 18, + }, + rpcUrls: [ + 'https://api.avax.network/ext/bc/C/rpc', + 'https://rpc.ankr.com/avalanche', + 'https://ava-mainnet.public.blastapi.io/ext/bc/C/rpc', + 'https://avalancheapi.terminet.io/ext/bc/C/rpc', + 'https://1rpc.io/avax/c', + ], + blockExplorerUrls: [ 'https://snowtrace.io' ], + }, + }, + [BlockchainName.OPTIMISM]: { + title: 'Optimism', + logo: (s = 16) => , + ethNetwork: { + chainId: '0xa', + chainName: 'Optimism', + nativeCurrency: { + name: 'Ether', + symbol: 'ETH', + decimals: 18, + }, + rpcUrls: [ + 'https://mainnet.optimism.io', + 'https://optimism-mainnet.public.blastapi.io', + 'https://rpc.ankr.com/optimism', + 'https://1rpc.io/op', + ], + blockExplorerUrls: [ 'https://optimistic.etherscan.io' ], + }, + }, + [BlockchainName.POLYGON]: { + title: 'Polygon', + logo: (s = 16) => , + ethNetwork: { + chainId: '0x89', + chainName: 'Polygon Mainnet', + nativeCurrency: { + name: 'MATIC', + symbol: 'MATIC', + decimals: 18, + }, + rpcUrls: [ + 'https://polygon-rpc.com', + 'https://rpc-mainnet.matic.network', + 'https://matic-mainnet.chainstacklabs.com', + 'https://rpc-mainnet.maticvigil.com', + 'https://rpc-mainnet.matic.quiknode.pro', + 'https://matic-mainnet-full-rpc.bwarelabs.com', + 'https://matic-mainnet-archive-rpc.bwarelabs.com', + 'https://poly-rpc.gateway.pokt.network', + 'https://rpc.ankr.com/polygon', + 'https://polygon-mainnet.public.blastapi.io', + 'https://polygonapi.terminet.io/rpc', + 'https://1rpc.io/matic', + 'https://polygon-mainnet.rpcfast.com', + 'https://polygon-mainnet.rpcfast.com?api_key=eQhI7SkwYXeQJyOLWrKNvpRnW9fTNoqkX0CErPfEsZjBBtYmn2e2uLKZtQkHkZdT', + 'https://polygon-bor.publicnode.com', + 'https://matic.slingshot.finance', + ], + blockExplorerUrls: [ 'https://polygonscan.com' ], + }, + }, + [BlockchainName.FANTOM]: { + title: 'Fantom', + logo: (s = 16) => , + ethNetwork: { + chainId: '0xfa', + chainName: 'Fantom Opera', + nativeCurrency: { + name: 'Fantom', + symbol: 'FTM', + decimals: 18, + }, + rpcUrls: [ + 'https://rpc.ftm.tools', + 'https://fantom-mainnet.gateway.pokt.network/v1/lb/62759259ea1b320039c9e7ac', + 'https://rpc.ankr.com/fantom', + 'https://rpc.fantom.network', + 'https://rpc2.fantom.network', + 'https://rpc3.fantom.network', + 'https://rpcapi.fantom.network', + 'https://fantom-mainnet.public.blastapi.io', + ], + blockExplorerUrls: [ 'https://ftmscan.com' ], + }, + }, + [BlockchainName.KLAYTN]: { + title: 'Klaytn', + logo: (s = 16) => , + ethNetwork: { + chainId: '0x2019', + chainName: 'Klaytn Mainnet Cypress', + nativeCurrency: { + name: 'KLAY', + symbol: 'KLAY', + decimals: 18, + }, + rpcUrls: [ + 'https://public-node-api.klaytnapi.com/v1/cypress', + 'https://klaytn01.fandom.finance', + 'https://klaytn02.fandom.finance', + 'https://klaytn03.fandom.finance', + 'https://klaytn04.fandom.finance', + 'https://klaytn05.fandom.finance', + 'https://cypress.fandom.finance/archive', + ], + blockExplorerUrls: [ 'https://scope.klaytn.com' ], + }, + }, + [BlockchainName.GNOSIS]: { + title: 'Gnosis', + logo: (s = 16) => , + ethNetwork: { + chainId: '0x64', + chainName: 'Gnosis', + nativeCurrency: { + name: 'xDAI', + symbol: 'xDAI', + decimals: 18, + }, + rpcUrls: [ + 'https://rpc.gnosischain.com', + 'https://rpc.ankr.com/gnosis', + 'https://gnosischain-rpc.gateway.pokt.network', + 'https://gnosis-mainnet.public.blastapi.io', + 'wss://rpc.gnosischain.com/wss', + 'https://xdai-rpc.gateway.pokt.network', + 'https://xdai-archive.blockscout.com', + 'https://rpc.ap-southeast-1.gateway.fm/v1/gnosis/non-archival/mainnet', + ], + blockExplorerUrls: [ 'https://gnosisscan.io' ], + }, + }, + [BlockchainName.AURORA]: { + title: 'Aurora', + logo: (s = 16) => , + ethNetwork: { + chainId: '0x4e454152', + chainName: 'Aurora Mainnet', + nativeCurrency: { + name: 'Ether', + symbol: 'ETH', + decimals: 18, + }, + rpcUrls: [ 'https://mainnet.aurora.dev' ], + blockExplorerUrls: [ 'https://aurorascan.dev' ], + }, + }, + [BlockchainName.CELO]: { + title: 'Celo', + logo: (s = 16) => , + ethNetwork: { + chainId: '0xa4ec', + chainName: 'Celo Mainnet', + nativeCurrency: { + name: 'CELO', + symbol: 'CELO', + decimals: 18, + }, + rpcUrls: [ 'https://forno.celo.org', 'wss://forno.celo.org/ws', 'https://rpc.ankr.com/celo' ], + blockExplorerUrls: [ 'https://celoscan.io' ], + }, + }, + [BlockchainName.MOONBEAM]: { + title: 'Moonbeam', + logo: (s = 16) => , + ethNetwork: { + chainId: '0x504', + chainName: 'Moonbeam', + nativeCurrency: { + name: 'Glimmer', + symbol: 'GLMR', + decimals: 18, + }, + rpcUrls: [ + 'https://rpc.api.moonbeam.network', + 'wss://wss.api.moonbeam.network', + 'https://moonbeam.public.blastapi.io', + 'https://rpc.ankr.com/moonbeam', + 'https://1rpc.io/glmr', + ], + blockExplorerUrls: [ 'https://moonbeam.moonscan.io' ], + }, + }, + [BlockchainName.MOONRIVER]: { + title: 'Moonriver', + logo: (s = 16) => , + ethNetwork: { + chainId: '0x505', + chainName: 'Moonriver', + nativeCurrency: { + name: 'Moonriver', + symbol: 'MOVR', + decimals: 18, + }, + rpcUrls: [ + 'https://rpc.api.moonriver.moonbeam.network', + 'wss://wss.api.moonriver.moonbeam.network', + 'https://moonriver.api.onfinality.io/rpc?apikey=673e1fae-c9c9-4c7f-a3d5-2121e8274366', + 'https://moonriver.api.onfinality.io/public', + 'https://moonriver.public.blastapi.io', + ], + blockExplorerUrls: [ 'https://moonriver.moonscan.io' ], + }, + }, + [BlockchainName.METIS]: { + title: 'Metis', + logo: (s = 16) => , + ethNetwork: { + chainId: '0x440', + chainName: 'Metis Andromeda Mainnet', + nativeCurrency: { + name: 'Metis', + symbol: 'METIS', + decimals: 18, + }, + rpcUrls: [ 'https://andromeda.metis.io/?owner=1088' ], + blockExplorerUrls: [ 'https://andromeda-explorer.metis.io' ], + }, + }, +}; + +export interface WalletMeta { + title: string; + link: string; + logo: (size?: number) => JSX.Element; +} + +export const walletsMeta: Record = { + // EVM + metamask: { + title: 'MetaMask', + logo: (s = 30) => , + link: 'https://metamask.io/', + }, + frontier: { + title: 'Frontier', + logo: (s = 30) => , + link: 'https://www.frontier.xyz/', + }, + walletconnect: { + title: 'WalletConnect', + logo: (s = 30) => , + link: 'https://walletconnect.com/', + }, + coinbase: { + title: 'Coinbase', + logo: (s = 30) => , + link: 'https://www.coinbase.com/wallet', + }, + trustwallet: { + title: 'TrustWallet', + logo: (s = 30) => , + link: 'https://trustwallet.com/', + }, + binance: { + title: 'BinanceWallet', + logo: (s = 30) => , + link: 'https://chrome.google.com/webstore/detail/binance-wallet/fhbohimaelbohpjbbldcngcnapndodjp', + }, +}; diff --git a/lib/contexts/ylide/editor-utils.ts b/lib/contexts/ylide/editor-utils.ts new file mode 100644 index 0000000000..8a55b5121a --- /dev/null +++ b/lib/contexts/ylide/editor-utils.ts @@ -0,0 +1,220 @@ +import type { OutputData } from '@editorjs/editorjs'; +import type { IYMFTagNode } from '@ylide/sdk'; +import { YMF, randomBytes } from '@ylide/sdk'; +import { SmartBuffer } from '@ylide/smart-buffer'; + +export function htmlSelfClosingTagsToXHtml(html: string) { + return html.replace( + // eslint-disable-next-line regexp/no-super-linear-backtracking + /<(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr|command|keygen|menuitem|frame)\b(.*?)[ /]*>/, + '<$1$2 />', + ); +} + +const EMPTY_OUTPUT_DATA: OutputData = { + time: 1676587472156, + version: '2.26.5', + blocks: [], +}; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function parseEditorJsJson(json: any) { + try { + json = typeof json === 'string' ? JSON.parse(json) : json; + } catch (e) { + return typeof json === 'string' ? json : JSON.stringify(json); + } + let result = ''; + + for (const block of json.blocks) { + if (block.type === 'paragraph') { + result += block.data.text + '\n'; + } else if (block.type === 'header') { + result += '#'.repeat(block.data.level) + ' ' + block.data.text + '\n'; + } else if (block.type === 'list') { + let i = 1; + for (const item of block.data.items) { + result += (block.data.style === 'ordered' ? `${ i }. ` : '- ') + item + '\n'; + i++; + } + } else if (block.type === 'delimiter') { + result += '\n'; + } else if (block.type === 'image') { + result += block.data.caption + '\n'; + } else if (block.type === 'embed') { + result += block.data.caption + '\n'; + } else if (block.type === 'table') { + result += block.data.caption + '\n'; + } else if (block.type === 'quote') { + result += block.data.caption + '\n'; + } else if (block.type === 'code') { + result += block.data.caption + '\n'; + } else if (block.type === 'raw') { + result += block.data.caption + '\n'; + } else if (block.type === 'warning') { + result += block.data.caption + '\n'; + } else if (block.type === 'linkTool') { + result += block.data.caption + '\n'; + } else if (block.type === 'marker') { + result += block.data.caption + '\n'; + } else if (block.type === 'checklist') { + result += block.data.caption + '\n'; + } else if (block.type === 'inlineCode') { + result += block.data.caption + '\n'; + } else if (block.type === 'simpleImage') { + result += block.data.caption + '\n'; + } else if (block.type === 'underline') { + result += block.data.caption + '\n'; + } else if (block.type === 'strikethrough') { + result += block.data.caption + '\n'; + } else if (block.type === 'superscript') { + result += block.data.caption + '\n'; + } else if (block.type === 'subscript') { + result += block.data.caption + '\n'; + } else if (block.type === 'link') { + result += block.data.caption + '\n'; + } else if (block.type === 'alignment') { + result += block.data.caption + '\n'; + } else if (block.type === 'rawTool') { + result += block.data.caption + '\n'; + } else if (block.type === 'del') { + result += block.data.caption + '\n'; + } else if (block.type === 'inlineLink') { + result += block.data.caption + '\n'; + } else if (block.type === 'mention') { + result += block.data.caption + '\n'; + } + } + + return result.replaceAll('
', '\n'); +} + +export function editorJsToYMF(data: OutputData | undefined) { + if (!data) { + return YMF.fromPlainText(''); + } + + const prepareText = (text: string) => htmlSelfClosingTagsToXHtml(text); + + const nodes: Array = []; + for (const block of data.blocks) { + if (block.type === 'paragraph') { + nodes.push(`

${ prepareText(block.data.text) }

`); // data.text + } else if (block.type === 'header') { + // data.level -- number + // data.text -- string + nodes.push( + `${ prepareText(block.data.text) }`, + ); + } else if (block.type === 'list') { + // data.style: 'ordered' | 'unordered' + // data.items: string[] + if (block.data.style === 'ordered') { + const innerNodes: Array = []; + for (let i = 0; i < block.data.items.length; i++) { + innerNodes.push(`
  • ${ i + 1 }. ${ prepareText(block.data.items[i]) }
  • `); + } + nodes.push(`
      ${ innerNodes.join('\n') }
    `); + } else if (block.data.style === 'unordered') { + const innerNodes: Array = []; + for (let i = 0; i < block.data.items.length; i++) { + innerNodes.push(`
  • ${ prepareText(block.data.items[i]) }
  • `); + } + nodes.push(`
      ${ innerNodes.join('\n') }
    `); + } + } else { + // nothing + } + } + + return YMF.fromYMFText(`${ nodes.join('\n') }`); +} + +export function ymfToEditorJs(ymf: YMF) { + if ( + ymf.root.children.length === 1 && + ymf.root.children[0].type === 'tag' && + ymf.root.children[0].tag === 'editorjs' + ) { + const root: IYMFTagNode = ymf.root.children[0]; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const blocks: Array = []; + for (const child of root.children) { + if (child.type === 'text') { + // do nothing, skip line breaks + } else if (child.type === 'tag') { + if (child.tag === 'p') { + blocks.push({ + id: child.attributes['ejs-id'], + type: 'paragraph', + data: { + text: child.children.map(c => YMF.nodeToYMFText(c)).join(''), + }, + }); + } else if (child.tag.startsWith('h')) { + const level = parseInt(child.tag[1], 10); + blocks.push({ + id: child.attributes['ejs-id'], + type: 'header', + data: { + text: child.children.map(c => YMF.nodeToYMFText(c)).join(''), + level, + }, + }); + } else if (child.tag === 'ol') { + blocks.push({ + id: child.attributes['ejs-id'], + type: 'list', + data: { + style: 'ordered', + items: child.children + .filter(c => c.type === 'tag') + .map(c => + (c as IYMFTagNode).children + .slice(1) + .map(c => YMF.nodeToYMFText(c)) + .join(''), + ), + }, + }); + } else if (child.tag === 'ul') { + blocks.push({ + id: child.attributes['ejs-id'], + type: 'list', + data: { + style: 'unordered', + items: child.children + .filter(c => c.type === 'tag') + .map(c => + (c as IYMFTagNode).children + .slice(1) + .map(c => YMF.nodeToYMFText(c)) + .join(''), + ), + }, + }); + } else { + // do nothing + } + } + } + + return { + ...EMPTY_OUTPUT_DATA, + blocks, + }; + } else { + return { + ...EMPTY_OUTPUT_DATA, + blocks: [ { id: generateEditorJsId(), type: 'paragraph', data: { text: ymf.toPlainText() } } ], + }; + } +} + +function generateEditorJsId() { + return new SmartBuffer(randomBytes(8)).toHexString(); +} + +export function isEmptyYMF(ymf: YMF) { + return !ymf.toString(); +} diff --git a/lib/contexts/ylide/index.tsx b/lib/contexts/ylide/index.tsx new file mode 100644 index 0000000000..e0cc80e987 --- /dev/null +++ b/lib/contexts/ylide/index.tsx @@ -0,0 +1,678 @@ +import { EthereumProvider } from '@walletconnect/ethereum-provider'; +import type { EVMWalletController } from '@ylide/ethereum'; +import { evm, EVM_CHAINS, EVM_NAMES, EVM_RPCS, EVMNetwork, evmWalletFactories } from '@ylide/ethereum'; +import type { AbstractWalletController, IMessage, MessageAttachment, RecipientInfo, Uint256, WalletAccount, WalletControllerFactory } from '@ylide/sdk'; +import { + BrowserLocalStorage, MessageContentV4, MessageContentV5, PrivateKeyAvailabilityState, stringToSemver, Ylide, YlideKeysRegistry, YMF, +} from '@ylide/sdk'; +import { SmartBuffer } from '@ylide/smart-buffer'; +import type { ReactNode } from 'react'; +import React, { createContext, useContext, useEffect, useState, useMemo, useCallback } from 'react'; + +import type { DomainAccount, IAppRegistry } from './types'; + +import ForumPersonalApi from 'lib/api/ylideApi/ForumPersonalApi'; +import ForumPublicApi from 'lib/api/ylideApi/ForumPublicApi'; +import { ensurePageLoaded } from 'lib/ensurePageLoaded'; + +import { blockchainMeta } from './constants'; +import { useYlideAccountModal, useYlideSelectWalletModal } from './modals'; +import { useYlideAccounts } from './useYlideAccounts'; +import { useYlideFaucet } from './useYlideFaucet'; +import { useYlidePushes } from './useYlidePushes'; + +export enum MessageDecodedTextDataType { + PLAIN = 'plain', + YMF = 'YMF', +} + +export type IMessageDecodedTextData = + | { type: MessageDecodedTextDataType.PLAIN; value: string } + | { type: MessageDecodedTextDataType.YMF; value: YMF }; + +export interface IMessageDecodedContent { + msgId: string; + decodedTextData: IMessageDecodedTextData; + decodedSubject: string; + attachments: Array; + recipientInfos: Array; +} + +const YlideContext = createContext(undefined as unknown as ReturnType); + +export interface WalletConnectConnection { + readonly walletName: string; + readonly provider: InstanceType; +} + +const useWalletConnectState = ( + ylide: Ylide, + ylideIsInitialized: boolean, + wallets: Array, + updateWallets: (newWallets: Array) => void, +) => { + const [ initialized, setInitialized ] = useState(false); + const [ connection, setConnection ] = useState(undefined); + const [ url, setUrl ] = useState(''); + + const disconnectWalletConnect = useCallback(async() => { + if (!initialized || !connection) { + return; + } + + const wc = wallets.find(w => w.wallet() === 'walletconnect'); + + if (wc) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + await (wc as EVMWalletController).signer.provider.provider.disconnect(); + // TODO: pizdec + document.location.reload(); + } + }, [ connection, initialized, wallets ]); + + const initWallet = useCallback(async(factory: WalletControllerFactory) => { + if (!initialized || !connection) { + return false; + } + await ylide.controllers.addWallet( + factory.wallet, + { + dev: false, + faucet: { + registrar: 1, + apiKey: { type: 'client', key: 'clfaf6c3e695452c2a' }, + }, + walletConnectProvider: initialized && connection ? connection.provider : null, + }, + factory.blockchainGroup, + ); + updateWallets([ ...ylide.controllers.wallets ]); + return true; + }, [ ylide, initialized, connection, updateWallets ]); + + const init = useCallback(async() => { + const rpcMap = { + // Metamask only supports ethereum chain :( + [EVM_CHAINS[EVMNetwork.ETHEREUM]]: (EVM_RPCS[EVMNetwork.ETHEREUM].find( + r => !r.rpc.startsWith('ws'), + ) as { + rpc: string; + blockLimit?: number; + lastestNotSupported?: boolean; + batchNotSupported?: boolean; + }).rpc, + }; + const chains = Object.keys(rpcMap).map(Number); + let isAvailable = true; + const projectId = 'e9deead089b3383b2db777961e3fa244'; + const wcTest = await EthereumProvider.init({ + projectId, + chains, + // TODO: remove after fix by WalletConnect - https://github.com/WalletConnect/walletconnect-monorepo/issues/2641 + // WalletConnect couldn't reproduce the issue, but we had it. + // Need further to debug, but currently it does not break anything. Propose to leave it. + optionalChains: [ 100500 ], + rpcMap, + showQrModal: true, + }); + wcTest.modal?.subscribeModal(({ open }: { open: boolean }) => { + if (open) { + wcTest.modal?.closeModal(); + isAvailable = false; + } + }); + try { + await wcTest.enable(); + } catch (err) { + isAvailable = false; + } + + if (isAvailable) { + setInitialized(true); + setConnection({ + walletName: wcTest.session?.peer.metadata.name || '', + provider: wcTest, + }); + } else { + const wcReal = await EthereumProvider.init({ + projectId, + chains, + // TODO: remove after fix by WalletConnect - https://github.com/WalletConnect/walletconnect-monorepo/issues/2641 + // WalletConnect couldn't reproduce the issue, but we had it. + // Need further to debug, but currently it does not break anything. Propose to leave it. + optionalChains: [ 100500 ], + rpcMap, + showQrModal: false, + }); + wcReal.on('display_uri', url => { + setInitialized(true); + setConnection(undefined); + setUrl(url); + }); + wcReal.on('connect', async() => { + setInitialized(true); + setConnection({ + walletName: wcReal.session?.peer.metadata.name || '', + provider: wcReal, + }); + }); + + wcReal.enable(); + } + }, []); + + useEffect(() => { + if (ylideIsInitialized) { + init(); + } + }, [ ylideIsInitialized, init ]); + + useEffect(() => { + if (ylideIsInitialized && initialized && connection) { + const wcFactory = ylide.walletsList.find(w => w.wallet === 'walletconnect'); + if (wcFactory) { + initWallet(wcFactory.factory); + } + } + }, [ ylideIsInitialized, initialized, connection, ylide, initWallet ]); + + return { + initialized, + connection, + url, + disconnectWalletConnect, + }; +}; + +const useWalletConnectRegistry = () => { + const [ registry, setRegistry ] = useState({}); + const [ loading, setLoading ] = useState(true); + + const refetch = useCallback(async() => { + try { + setLoading(true); + + const response = await fetch('https://registry.walletconnect.com/api/v2/wallets'); + const data = await response.json() as { listings: IAppRegistry }; + + setRegistry(data.listings); + } finally { + setLoading(false); + } + }, []); + + useEffect(() => { + refetch(); + }, [ refetch ]); + + return { registry, loading, refetch }; +}; + +const REACT_APP_FEED_PUBLIC_KEY = '9b939eaca8b685f46d8311698669e25ec50015d96644bf671ed35264d754a977'; + +const useAccountController = ( + ylide: Ylide, + keysRegistry: YlideKeysRegistry, + wallets: Array, + ylideInitialized: boolean, + disconnectWalletConnect: () => void, +) => { + const { savedAccounts, addAccount, deleteAccount, setAccountAuthKey } = useYlideAccounts(); + const selectWalletModal = useYlideSelectWalletModal(); + const accountModal = useYlideAccountModal(); + const acquireBackendAuthKey = ForumPersonalApi.useAcquireAuthKey(); + const [ backendAccountsData, setBackendAccountsData ] = useState>({}); + const [ initialized, setInitialized ] = useState(false); + + const domainAccounts = useMemo(() => { + return savedAccounts.map(acc => ({ + name: acc.name, + wallet: wallets.find(w => w.wallet() === acc.wallet), + account: acc.account, + backendAuthKey: acc.backendAuthKey, + })).filter(acc => Boolean(acc.wallet)) as Array; + }, [ wallets, savedAccounts ]); + + const tokens = useMemo(() => { + return domainAccounts.map(acc => acc.backendAuthKey).filter(Boolean) as Array; + }, [ domainAccounts ]); + + const getMe = ForumPublicApi.useGetMe(tokens); + + const isAdmin = useMemo(() => { + return domainAccounts.reduce((acc, cur) => ({ + ...acc, + [cur.account.address]: backendAccountsData[cur.account.address]?.isAdmin ?? false, + }), {} as Record); + }, [ domainAccounts, backendAccountsData ]); + + const admins = useMemo(() => { + return domainAccounts.filter(acc => isAdmin[acc.account.address]); + }, [ domainAccounts, isAdmin ]); + + useEffect(() => { + if (!ylideInitialized) { + return; + } + (async() => { + try { + const data = await getMe(); + setBackendAccountsData(data); + } catch (err) { + // console.error('getting ylide identities: ', err); + } + setInitialized(true); + })(); + }, [ getMe, ylideInitialized ]); + + const constructBackendAuthKeySignature = useCallback(async(account: DomainAccount) => { + const localPrivateKeys = keysRegistry.getLocalPrivateKeys(account.account.address); + const availableKeys = localPrivateKeys.filter(key => key.availabilityState === PrivateKeyAvailabilityState.AVAILABLE); + if (availableKeys[0]) { + const mvPublicKey = SmartBuffer.ofHexString(REACT_APP_FEED_PUBLIC_KEY).bytes; + + const messageBytes = SmartBuffer.ofUTF8String( + JSON.stringify({ address: account.account.address, timestamp: Date.now() }), + ).bytes; + + return availableKeys[0].execute( + async privateKey => ({ + messageEncrypted: new SmartBuffer(privateKey.encrypt(messageBytes, mvPublicKey)).toHexString(), + publicKey: new SmartBuffer(privateKey.publicKey).toHexString(), + address: account.account.address, + }), + // TODO: handle users with password + // { + // onPrivateKeyRequest: async (address: string, magicString: string) => + // await this.wallet.controller.signMagicString(this.account, magicString), + // onYlidePasswordRequest: async _ => password, + // }, + ); + } + return null; + }, [ keysRegistry ]); + + const connectAccount = useCallback(async() => { + const wallet = await selectWalletModal.openWithPromise(); + if (!wallet) { + return; + } + + const account = await wallet.requestAuthentication(); + + if (!account) { + return; + } + + if (savedAccounts.find((a) => a.account.address === account.address)) { + return; + } + + const remoteKeys = await ylide.core.getAddressKeys(account.address); + + const domainAccount = await accountModal.openWithPromise({ + wallet, + account, + remoteKeys: remoteKeys.remoteKeys, + }); + + if (!domainAccount) { + return; + } + + addAccount('New Account', domainAccount.account, domainAccount.wallet.wallet(), null); + + (async() => { + const signature = await constructBackendAuthKeySignature(domainAccount); + + if (signature) { + const key = await acquireBackendAuthKey(signature); + if (key) { + setAccountAuthKey(domainAccount.account, key); + } + } + })(); + + return domainAccount; + }, [ + selectWalletModal, savedAccounts, ylide.core, accountModal, addAccount, constructBackendAuthKeySignature, + acquireBackendAuthKey, setAccountAuthKey, + ]); + + const disconnectAccount = useCallback(async(account: DomainAccount) => { + const privateKeys = keysRegistry.getLocalPrivateKeys(account.account.address); + for (const key of privateKeys) { + await keysRegistry.removeLocalPrivateKey(key); + } + const currentAccount = await account.wallet.getAuthenticatedAccount(); + if (currentAccount && currentAccount.address === account.account.address) { + await account.wallet.disconnectAccount(account.account); + } + if (account.wallet.wallet() === 'walletconnect') { + disconnectWalletConnect(); + } + deleteAccount(account.account); + }, [ deleteAccount, keysRegistry, disconnectWalletConnect ]); + + // export async function activateAccount(params: { account: DomainAccount }) { + // const account = params.account; + // const wallet = account.wallet; + // const remoteKeys = await domain.ylide.core.getAddressKeys(account.account.address); + // const qqs = getQueryString(); + + // await showStaticComponent(resolve => ( + // + // )); + // } + + return { + initialized, + selectWalletModal, + accountModal, + savedAccounts, + domainAccounts, + tokens, + isAdmin, + admins, + disconnectAccount, + connectAccount, + }; +}; + +const useBalances = (ylide: Ylide, accounts: Array) => { + const [ balances, setBalances ] = useState>>({}); + + const getBalanceOf = useCallback(async(address: string) => { + const chains = ylide.controllers.blockchains; + const balances: Array<{ original: string; numeric: number; e18: string }> = await Promise.all( + chains.map(async chain => { + try { + return await new Promise((resolve, reject) => { + chain.getBalance(address).then(resolve).catch(reject); + setTimeout(reject, 3000); + }); + } catch (err) { + return { + original: '0', + numeric: 0, + e18: '0', + }; + } + }), + ); + return chains.reduce( + (p, c, i) => ({ + ...p, + [c.blockchain()]: balances[i], + }), + {} as Record, + ); + }, [ ylide ]); + + useEffect(() => { + (async() => { + let isNew = false; + const newBalances = await Promise.all(accounts.map(async(account) => { + if (balances[account.account.address]) { + return [ account.account.address, balances[account.account.address] ]; + } else { + isNew = true; + return [ account.account.address, await getBalanceOf(account.account.address) ]; + } + })); + if (isNew) { + setBalances(Object.fromEntries(newBalances)); + } + })(); + }, [ accounts, balances, getBalanceOf ]); + + return balances; +}; + +const useYlideService = () => { + const keysRegistry = useMemo(() => new YlideKeysRegistry(new BrowserLocalStorage()), []); + const ylide = useMemo(() => { + const ylide = new Ylide(keysRegistry); + ylide.add(evm); + return ylide; + }, [ keysRegistry ]); + const faucet = useYlideFaucet(ylide, keysRegistry); + + const [ initialized, setInitialized ] = useState(false); + const [ wallets, setWallets ] = useState>([]); + const walletConnectRegistry = useWalletConnectRegistry(); + const walletConnectState = useWalletConnectState(ylide, initialized, wallets, setWallets); + const accounts = useAccountController(ylide, keysRegistry, wallets, initialized, walletConnectState.disconnectWalletConnect); + const balances = useBalances(ylide, accounts.domainAccounts); + const { addressesWithPushes, setAccountPushState } = useYlidePushes(); + + const switchEVMChain = useCallback(async(wallet: AbstractWalletController, needNetwork: EVMNetwork) => { + try { + const bData = blockchainMeta[EVM_NAMES[needNetwork]]; + if (!walletConnectState.connection) { + await (wallet as EVMWalletController).providerObject.request({ + method: 'wallet_addEthereumChain', + params: [ bData.ethNetwork ], + }); + } + } catch (error) { + // console.error('error: ', error); + } + if (walletConnectState.connection) { + const wc = wallets.find(w => w.wallet() === 'walletconnect'); + if (wc) { + await (wallet as EVMWalletController).signer.provider.send('wallet_switchEthereumChain', [ + { chainId: '0x' + Number(EVM_CHAINS[needNetwork]).toString(16) }, + ]); + } + } else { + await (wallet as EVMWalletController).providerObject.request({ + method: 'wallet_switchEthereumChain', + params: [ { chainId: '0x' + Number(EVM_CHAINS[needNetwork]).toString(16) } ], // chainId must be in hexadecimal numbers + }); + } + }, [ walletConnectState.connection, wallets ]); + + const switchEVMChainRef = React.useRef(switchEVMChain); + + useEffect(() => { + switchEVMChainRef.current = switchEVMChain; + }, [ switchEVMChain ]); + + const broadcastMessage = useCallback(async(account: DomainAccount, feedId: string, subject: string, content: YMF, blockchain?: string) => { + const foundNetwork = Object.keys(EVM_NAMES).find(n => EVM_NAMES[Number(n) as EVMNetwork] === blockchain); + let network: undefined | EVMNetwork = undefined; + if (typeof foundNetwork !== 'undefined') { + network = Number(foundNetwork) as EVMNetwork; + } + return await ylide.core.broadcastMessage({ + feedId: feedId as Uint256, + wallet: account.wallet, + sender: account.account, + content: new MessageContentV5({ + subject: subject, + content: content, + attachments: [], + extraBytes: new Uint8Array(0), + extraJson: {}, + recipientInfos: [], + sendingAgentName: 'Blockscout', + sendingAgentVersion: stringToSemver('0.0.1'), + }), + serviceCode: 7, + }, { + isPersonal: false, + isGenericFeed: true, + network, + }); + }, [ ylide ]); + + const sendMessage = useCallback(async( + account: DomainAccount, + recipients: Array, + feedId: string, + subject: string, + content: string, + blockchain?: string, + ) => { + const foundNetwork = Object.keys(EVM_NAMES).find(n => EVM_NAMES[Number(n) as EVMNetwork] === blockchain); + let network: undefined | EVMNetwork = undefined; + if (typeof foundNetwork !== 'undefined') { + network = Number(foundNetwork) as EVMNetwork; + } + return await ylide.core.sendMessage({ + feedId: feedId as Uint256, + wallet: account.wallet, + sender: account.account, + content: MessageContentV5.simple(subject, content), + recipients: recipients, + serviceCode: 7, + }, { + isPersonal: false, + isGenericFeed: true, + network, + }); + }, [ ylide ]); + + const decodeDirectMessage = useCallback(async( + msgId: string, + msg: IMessage, + recipient: WalletAccount, + ): Promise => { + const content = await ylide.core.getMessageContent(msg); + + if (!content || content.corrupted) { + return null; + } + + try { + const result = await ylide.core.decryptMessageContent(recipient, msg, content); + + return { + msgId, + decodedSubject: result.content.subject, + decodedTextData: + result.content.content instanceof YMF ? + { + type: MessageDecodedTextDataType.YMF, + value: result.content.content, + } : + { + type: MessageDecodedTextDataType.PLAIN, + value: result.content.content, + }, + attachments: + result.content instanceof MessageContentV4 || result.content instanceof MessageContentV5 ? + result.content.attachments : + [], + recipientInfos: result.content instanceof MessageContentV5 ? result.content.recipientInfos : [], + }; + } catch (err) { + return null; + } + }, [ ylide ]); + + const decodeBroadcastMessage = useCallback(async( + msgId: string, + msg: IMessage, + ): Promise => { + const content = await ylide.core.getMessageContent(msg); + + if (!content || content.corrupted) { + return null; + } + + const result = ylide.core.decryptBroadcastContent(msg, content); + + return { + msgId, + decodedSubject: result.content.subject, + decodedTextData: + result.content.content instanceof YMF ? + { + type: MessageDecodedTextDataType.YMF, + value: result.content.content, + } : + { + type: MessageDecodedTextDataType.PLAIN, + value: result.content.content, + }, + attachments: + result.content instanceof MessageContentV4 || result.content instanceof MessageContentV5 ? + result.content.attachments : + [], + recipientInfos: result.content instanceof MessageContentV5 ? result.content.recipientInfos : [], + }; + }, [ ylide ]); + + useEffect(() => { + const f = async() => { + await ensurePageLoaded; + await ylide.init(); + ylide.registerWalletFactory(evmWalletFactories.walletconnect); + setWallets(ylide.controllers.wallets); + setInitialized(true); + }; + f(); + }, [ ylide, keysRegistry ]); + + useEffect(() => { + wallets.forEach(w => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + w.onNetworkSwitchRequest = async( + reason: string, + currentNetwork: EVMNetwork | undefined, + needNetwork: EVMNetwork, + ) => { + switchEVMChainRef.current(w, needNetwork); + }; + }); + }, [ wallets ]); + + return { + ylide, + keysRegistry, + wallets, + initialized, + walletConnectRegistry, + walletConnectState, + accounts, + faucet, + balances, + addressesWithPushes, + setAccountPushState, + broadcastMessage, + sendMessage, + decodeBroadcastMessage, + decodeDirectMessage, + }; +}; + +export function YlideProvider({ children }: { children?: ReactNode | undefined }) { + return ( + + { children } + + ); +} + +export function useYlide() { + return useContext(YlideContext); +} diff --git a/lib/contexts/ylide/logos/network/ArbitrumLogo.tsx b/lib/contexts/ylide/logos/network/ArbitrumLogo.tsx new file mode 100644 index 0000000000..a3b855672e --- /dev/null +++ b/lib/contexts/ylide/logos/network/ArbitrumLogo.tsx @@ -0,0 +1,57 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function ArbitrumLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/AuroraLogo.tsx b/lib/contexts/ylide/logos/network/AuroraLogo.tsx new file mode 100644 index 0000000000..a4c0ac4395 --- /dev/null +++ b/lib/contexts/ylide/logos/network/AuroraLogo.tsx @@ -0,0 +1,64 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function AuroraLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/AvalancheLogo.tsx b/lib/contexts/ylide/logos/network/AvalancheLogo.tsx new file mode 100644 index 0000000000..59d403d5bb --- /dev/null +++ b/lib/contexts/ylide/logos/network/AvalancheLogo.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function AvalancheLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/BNBChainLogo.tsx b/lib/contexts/ylide/logos/network/BNBChainLogo.tsx new file mode 100644 index 0000000000..1997315856 --- /dev/null +++ b/lib/contexts/ylide/logos/network/BNBChainLogo.tsx @@ -0,0 +1,46 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function BNBChainLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/BaseLogo.tsx b/lib/contexts/ylide/logos/network/BaseLogo.tsx new file mode 100644 index 0000000000..3ffd7953f7 --- /dev/null +++ b/lib/contexts/ylide/logos/network/BaseLogo.tsx @@ -0,0 +1,1576 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function BaseLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/CeloLogo.tsx b/lib/contexts/ylide/logos/network/CeloLogo.tsx new file mode 100644 index 0000000000..b6e0df4e89 --- /dev/null +++ b/lib/contexts/ylide/logos/network/CeloLogo.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function CeloLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/CronosLogo.tsx b/lib/contexts/ylide/logos/network/CronosLogo.tsx new file mode 100644 index 0000000000..5c031da09a --- /dev/null +++ b/lib/contexts/ylide/logos/network/CronosLogo.tsx @@ -0,0 +1,56 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function CronosLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + + + + + + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/EthereumLogo.tsx b/lib/contexts/ylide/logos/network/EthereumLogo.tsx new file mode 100644 index 0000000000..68f49a8a5d --- /dev/null +++ b/lib/contexts/ylide/logos/network/EthereumLogo.tsx @@ -0,0 +1,47 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function EthereumLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + + + + + + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/FantomLogo.tsx b/lib/contexts/ylide/logos/network/FantomLogo.tsx new file mode 100644 index 0000000000..995d2e801a --- /dev/null +++ b/lib/contexts/ylide/logos/network/FantomLogo.tsx @@ -0,0 +1,37 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function FantomLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + + + + fa + + + + + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/GnosisLogo.tsx b/lib/contexts/ylide/logos/network/GnosisLogo.tsx new file mode 100644 index 0000000000..eeb36356a1 --- /dev/null +++ b/lib/contexts/ylide/logos/network/GnosisLogo.tsx @@ -0,0 +1,41 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function GnosisLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/KlaytnLogo.tsx b/lib/contexts/ylide/logos/network/KlaytnLogo.tsx new file mode 100644 index 0000000000..35cae22d06 --- /dev/null +++ b/lib/contexts/ylide/logos/network/KlaytnLogo.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function KlaytnLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/LineaLogo.tsx b/lib/contexts/ylide/logos/network/LineaLogo.tsx new file mode 100644 index 0000000000..c11ae8a492 --- /dev/null +++ b/lib/contexts/ylide/logos/network/LineaLogo.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function LineaLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/MetisLogo.tsx b/lib/contexts/ylide/logos/network/MetisLogo.tsx new file mode 100644 index 0000000000..1f33b5a248 --- /dev/null +++ b/lib/contexts/ylide/logos/network/MetisLogo.tsx @@ -0,0 +1,45 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function MetisLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/MoonbeamLogo.tsx b/lib/contexts/ylide/logos/network/MoonbeamLogo.tsx new file mode 100644 index 0000000000..6afa6d0b6b --- /dev/null +++ b/lib/contexts/ylide/logos/network/MoonbeamLogo.tsx @@ -0,0 +1,132 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function MoonbeamLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + + + + + + + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/MoonriverLogo.tsx b/lib/contexts/ylide/logos/network/MoonriverLogo.tsx new file mode 100644 index 0000000000..41b4581893 --- /dev/null +++ b/lib/contexts/ylide/logos/network/MoonriverLogo.tsx @@ -0,0 +1,103 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function MoonriverLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + + + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/OptimismLogo.tsx b/lib/contexts/ylide/logos/network/OptimismLogo.tsx new file mode 100644 index 0000000000..d8e2d26dbc --- /dev/null +++ b/lib/contexts/ylide/logos/network/OptimismLogo.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function OptimismLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/PolygonLogo.tsx b/lib/contexts/ylide/logos/network/PolygonLogo.tsx new file mode 100644 index 0000000000..301c85661e --- /dev/null +++ b/lib/contexts/ylide/logos/network/PolygonLogo.tsx @@ -0,0 +1,29 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function PolygonLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/network/ZetaLogo.tsx b/lib/contexts/ylide/logos/network/ZetaLogo.tsx new file mode 100644 index 0000000000..9795f8042d --- /dev/null +++ b/lib/contexts/ylide/logos/network/ZetaLogo.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function ZetaLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + ); +} diff --git a/lib/contexts/ylide/logos/wallets/BinanceWalletLogo.tsx b/lib/contexts/ylide/logos/wallets/BinanceWalletLogo.tsx new file mode 100644 index 0000000000..451585e87b --- /dev/null +++ b/lib/contexts/ylide/logos/wallets/BinanceWalletLogo.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function BinanceWalletLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/wallets/CoinbaseWalletLogo.tsx b/lib/contexts/ylide/logos/wallets/CoinbaseWalletLogo.tsx new file mode 100644 index 0000000000..9aecf522a5 --- /dev/null +++ b/lib/contexts/ylide/logos/wallets/CoinbaseWalletLogo.tsx @@ -0,0 +1,29 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function CoinbaseWalletLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + ); +} diff --git a/lib/contexts/ylide/logos/wallets/FrontierLogo.tsx b/lib/contexts/ylide/logos/wallets/FrontierLogo.tsx new file mode 100644 index 0000000000..34088b2e89 --- /dev/null +++ b/lib/contexts/ylide/logos/wallets/FrontierLogo.tsx @@ -0,0 +1,51 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function FrontierLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + + + + + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/wallets/MetaMaskLogo.tsx b/lib/contexts/ylide/logos/wallets/MetaMaskLogo.tsx new file mode 100644 index 0000000000..8787d1359d --- /dev/null +++ b/lib/contexts/ylide/logos/wallets/MetaMaskLogo.tsx @@ -0,0 +1,95 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function MetaMaskLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/lib/contexts/ylide/logos/wallets/TrustWalletLogo.tsx b/lib/contexts/ylide/logos/wallets/TrustWalletLogo.tsx new file mode 100644 index 0000000000..d5544d1ba2 --- /dev/null +++ b/lib/contexts/ylide/logos/wallets/TrustWalletLogo.tsx @@ -0,0 +1,24 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function TrustWalletLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + ); +} diff --git a/lib/contexts/ylide/logos/wallets/WalletConnectLogo.tsx b/lib/contexts/ylide/logos/wallets/WalletConnectLogo.tsx new file mode 100644 index 0000000000..a35eb42b9f --- /dev/null +++ b/lib/contexts/ylide/logos/wallets/WalletConnectLogo.tsx @@ -0,0 +1,45 @@ +import React from 'react'; +import type { CSSProperties } from 'react'; + +export function WalletConnectLogo({ size = 16, style }: { size?: number; style?: CSSProperties }) { + return ( + + + + + + + + + + + ); +} diff --git a/lib/contexts/ylide/modals.ts b/lib/contexts/ylide/modals.ts new file mode 100644 index 0000000000..f45aeabaf9 --- /dev/null +++ b/lib/contexts/ylide/modals.ts @@ -0,0 +1,70 @@ +import { useDisclosure } from '@chakra-ui/react'; +import type { AbstractWalletController, WalletAccount } from '@ylide/sdk'; +import { useCallback, useState } from 'react'; + +import type { DomainAccount } from './types'; + +import type { YlideConnectAccountModalProps } from 'ui/connectAccountModal'; +import type { SelectWalletModalProps } from 'ui/selectWalletModal'; + +export const useYlideSelectWalletModal = () => { + const { onOpen, onClose, isOpen } = useDisclosure(); + const [ props, setProps ] = useState({}); + + const triggerOpen = useCallback((props: SelectWalletModalProps) => { + setProps({ + onClose: (w?: AbstractWalletController) => { + onClose(); + props.onClose?.(w); + }, + }); + onOpen(); + }, [ onOpen, onClose ]); + + const triggerClose = useCallback(() => { + props.onClose?.(); + onClose(); + }, [ onClose, props ]); + + return { + props, + open: triggerOpen, + openWithPromise: () => new Promise(resolve => triggerOpen({ onClose: resolve })), + close: triggerClose, + isOpen, + }; +}; + +export const useYlideAccountModal = () => { + const { onOpen, onClose, isOpen } = useDisclosure(); + const [ props, setProps ] = useState({ + wallet: null as unknown as AbstractWalletController, + account: null as unknown as WalletAccount, + remoteKeys: {}, + }); + + const triggerOpen = useCallback((props: YlideConnectAccountModalProps) => { + setProps({ + ...props, + onClose: (w?: DomainAccount) => { + onClose(); + props.onClose?.(w); + }, + }); + onOpen(); + }, [ onOpen, onClose ]); + + const triggerClose = useCallback(() => { + props.onClose?.(); + onClose(); + }, [ onClose, props ]); + + return { + open: triggerOpen, + openWithPromise: (props: Omit) => + new Promise(resolve => triggerOpen({ ...props, onClose: resolve })), + close: triggerClose, + props, + isOpen, + }; +}; diff --git a/lib/contexts/ylide/types.ts b/lib/contexts/ylide/types.ts new file mode 100644 index 0000000000..a9747f7ba5 --- /dev/null +++ b/lib/contexts/ylide/types.ts @@ -0,0 +1,61 @@ +import type { AbstractWalletController, WalletAccount } from '@ylide/sdk'; + +export interface IAppEntry { + id: string; + name: string; + homepage: string; + chains: Array; + image_id: string; + image_url: { + sm: string; + md: string; + lg: string; + }; + app: { + browser: string; + ios: string; + android: string; + mac: string; + windows: string; + linux: string; + }; + mobile: { + native: string; + universal: string; + }; + desktop: { + native: string; + universal: string; + }; + metadata: { + shortName: string; + colors: { + primary: string; + secondary: string; + }; + }; +} + +export interface IAppRegistry { + [id: string]: IAppEntry; +} + +export interface DomainAccount { + name: string; + backendAuthKey: string | null; + wallet: AbstractWalletController; + account: WalletAccount; + reloadKeys: () => Promise; +} + +export interface YlideSavedAccount { + name: string; + account: WalletAccount; + wallet: string; + backendAuthKey: string | null; +} + +export interface YlideAccountPushes { + lowercaseAddress: string; + isEnabled: boolean; +} diff --git a/lib/contexts/ylide/useYlideAccounts.ts b/lib/contexts/ylide/useYlideAccounts.ts new file mode 100644 index 0000000000..995c9e42a6 --- /dev/null +++ b/lib/contexts/ylide/useYlideAccounts.ts @@ -0,0 +1,71 @@ +import { WalletAccount } from '@ylide/sdk'; +import { useState, useCallback } from 'react'; + +import type { YlideSavedAccount } from './types'; + +const serializeAccounts = (accounts: Array) => { + return JSON.stringify(accounts.map(acc => ({ + name: acc.name, + account: acc.account.toBase64(), + wallet: acc.wallet, + backendAuthKey: acc.backendAuthKey, + }))); +}; + +const deserializeAccounts = (serialized: string) => { + const parsed = JSON.parse(serialized) as Array<{ name: string; account: string; wallet: string; backendAuthKey: string | null }>; + if (!Array.isArray(parsed)) { + return []; + } else { + return parsed.map((acc) => ({ + ...acc, + backendAuthKey: acc.backendAuthKey || null, + account: WalletAccount.fromBase64(acc.account), + })); + } +}; + +export const useYlideAccounts = () => { + const localStorage = typeof window === 'undefined' ? undefined : window?.localStorage; + + const loadAccountsFromBrowserStorage = useCallback(() => { + const savedAccounts = localStorage?.getItem('ylide-accounts'); + if (savedAccounts) { + return deserializeAccounts(savedAccounts); + } + return []; + }, [ localStorage ]); + + const [ savedAccounts, setAccounts ] = useState>(loadAccountsFromBrowserStorage()); + + const addAccount = useCallback((name: string, account: WalletAccount, wallet: string, backendAuthKey: string | null) => { + const newSavedAccount = { name, account, wallet, backendAuthKey }; + const newAccounts = [ ...savedAccounts, newSavedAccount ]; + localStorage?.setItem('ylide-accounts', serializeAccounts(newAccounts)); + setAccounts(newAccounts); + return newSavedAccount; + }, [ savedAccounts, localStorage ]); + + const deleteAccount = useCallback((account: WalletAccount) => { + const newAccounts = savedAccounts.filter((acc) => acc.account.address !== account.address); + localStorage?.setItem('ylide-accounts', serializeAccounts(newAccounts)); + setAccounts(newAccounts); + }, [ savedAccounts, localStorage ]); + + const setAccountAuthKey = useCallback((account: WalletAccount, authKey: string | null) => { + const actualAccounts = loadAccountsFromBrowserStorage(); + const newAccounts = actualAccounts.map((acc) => { + if (acc.account.address === account.address) { + return { + ...acc, + backendAuthKey: authKey, + }; + } + return acc; + }); + localStorage?.setItem('ylide-accounts', serializeAccounts(newAccounts)); + setAccounts(newAccounts); + }, [ loadAccountsFromBrowserStorage, localStorage ]); + + return { savedAccounts, addAccount, deleteAccount, setAccountAuthKey }; +}; diff --git a/lib/contexts/ylide/useYlideFaucet.ts b/lib/contexts/ylide/useYlideFaucet.ts new file mode 100644 index 0000000000..16abb6d66d --- /dev/null +++ b/lib/contexts/ylide/useYlideFaucet.ts @@ -0,0 +1,74 @@ +import { EVM_NAMES, type EVMNetwork } from '@ylide/ethereum'; +import type { PublicKey, Ylide, YlideKeysRegistry } from '@ylide/sdk'; +import { useCallback, useState } from 'react'; + +import type { DomainAccount } from './types'; + +export const useYlideFaucet = (ylide: Ylide, keysRegistry: YlideKeysRegistry) => { + const [ publishingTxHash, setPublishingTxHash ] = useState(''); + const [ isTxPublishing, setIsTxPublishing ] = useState(false); + const [ txPlateVisible, setTxPlateVisible ] = useState(false); + + const getFaucetSignature = useCallback(async( + account: DomainAccount, + publicKey: PublicKey, + faucetType: EVMNetwork.GNOSIS, + ) => { + const faucet = await account.wallet.getFaucet({ faucetType }); + + const registrar = 7; + + const data = await faucet.authorizePublishing(account.account, publicKey, registrar, { + type: 'client', + key: 'clfaf6c3e695452c2a', + }); + + return { + faucet, + data, + blockchain: EVM_NAMES[faucetType], + account, + publicKey, + faucetType, + }; + }, []); + + const publishThroughFaucet = useCallback(async(faucetData: Awaited>) => { + try { + try { + const result = await faucetData.faucet.attachPublicKey(faucetData.data); + + const key = await ylide.core.waitForPublicKey( + faucetData.blockchain, + faucetData.account.account.address, + faucetData.publicKey.keyBytes, + ); + + if (key) { + await keysRegistry.addRemotePublicKey(key); + + faucetData.account.reloadKeys(); + + setPublishingTxHash(result.txHash); + setIsTxPublishing(false); + } else { + setIsTxPublishing(false); + // console.error( + // 'Something went wrong with key publishing :(\n\n' + JSON.stringify(result, null, '\t'), + // ); + } + } catch (err) { + // console.error(`Something went wrong with key publishing: ${ err.message }`, err.stack); + // toast('Something went wrong with key publishing :( Please, try again'); + setIsTxPublishing(false); + setTxPlateVisible(false); + } + } catch (err) { + // console.error('faucet publication error: ', err); + setIsTxPublishing(false); + setTxPlateVisible(false); + } + }, [ ylide, keysRegistry ]); + + return { getFaucetSignature, publishThroughFaucet, publishingTxHash, isTxPublishing, txPlateVisible, setTxPlateVisible }; +}; diff --git a/lib/contexts/ylide/useYlidePushes.ts b/lib/contexts/ylide/useYlidePushes.ts new file mode 100644 index 0000000000..b6fa3bac9b --- /dev/null +++ b/lib/contexts/ylide/useYlidePushes.ts @@ -0,0 +1,43 @@ +import { useState, useCallback, useMemo } from 'react'; + +import type { YlideAccountPushes } from './types'; + +const serializePushes = (accounts: Array) => { + return JSON.stringify(accounts); +}; + +const deserializePushes = (serialized: string) => { + return JSON.parse(serialized) as Array; +}; + +export const useYlidePushes = () => { + const localStorage = typeof window === 'undefined' ? undefined : window?.localStorage; + + const loadPushesFromBrowserStorage = useCallback(() => { + const savedPushes = localStorage?.getItem('ylide-pushes'); + if (savedPushes) { + return deserializePushes(savedPushes); + } + return []; + }, [ localStorage ]); + + const [ pushes, setPushes ] = useState>(loadPushesFromBrowserStorage()); + + const addressesWithPushes = useMemo(() => pushes.map(p => p.lowercaseAddress), [ pushes ]); + + const setAccountPushState = useCallback((address: string, isEnabled: boolean) => { + const actualPushes = loadPushesFromBrowserStorage(); + const newPushes = [ ...actualPushes ]; + address = address.toLowerCase(); + const acc = newPushes.find(a => a.lowercaseAddress === address); + if (acc) { + acc.isEnabled = isEnabled; + } else { + newPushes.push({ lowercaseAddress: address, isEnabled }); + } + localStorage?.setItem('ylide-pushes', serializePushes(newPushes)); + setPushes(newPushes); + }, [ loadPushesFromBrowserStorage, localStorage ]); + + return { addressesWithPushes, setAccountPushState }; +}; diff --git a/lib/ensurePageLoaded.ts b/lib/ensurePageLoaded.ts new file mode 100644 index 0000000000..1c53de1df5 --- /dev/null +++ b/lib/ensurePageLoaded.ts @@ -0,0 +1,13 @@ +let ensurePageLoaded: Promise; + +if (typeof document === 'undefined' || document.readyState === 'complete') { + ensurePageLoaded = Promise.resolve(); +} else { + ensurePageLoaded = new Promise(resolve => { + window.addEventListener('load', () => { + resolve(); + }); + }); +} + +export { ensurePageLoaded }; diff --git a/lib/formatDateTime.ts b/lib/formatDateTime.ts new file mode 100644 index 0000000000..f729169500 --- /dev/null +++ b/lib/formatDateTime.ts @@ -0,0 +1,29 @@ +export default function formatDateTime(t: Date, options?: { + showTime?: boolean; + showDate?: boolean; + timeWithoutSeconds?: boolean; + dateWithoutYear?: boolean; +}) { + const seconds = t.getSeconds().toString().padStart(2, '0'); + const minutes = t.getMinutes().toString().padStart(2, '0'); + const hours = t.getHours().toString().padStart(2, '0'); + + const day = t.getDate().toString().padStart(2, '0'); + const month = (t.getMonth() + 1).toString().padStart(2, '0'); + const year = (t.getFullYear() % 100).toString().padStart(2, '0'); + + const date = `${ day }/${ month }${ options?.dateWithoutYear ? '' : `/${ year }` }`; + const time = `${ hours }:${ minutes }${ options?.timeWithoutSeconds ? '' : `:${ seconds }` }`; + + if (options?.showDate && options?.showTime) { + return `${ date } ${ time }`; + } else + if (options?.showDate) { + return date; + } else + if (options?.showTime) { + return time; + } + + return `${ date } ${ time }`; +} diff --git a/lib/hooks/useFetch.tsx b/lib/hooks/useFetch.tsx index 06eea3fcae..4cffe3b6d9 100644 --- a/lib/hooks/useFetch.tsx +++ b/lib/hooks/useFetch.tsx @@ -8,7 +8,7 @@ export interface Params { method?: RequestInit['method']; headers?: RequestInit['headers']; signal?: RequestInit['signal']; - body?: Record | FormData; + body?: NonNullable | FormData; credentials?: RequestCredentials; } @@ -18,7 +18,7 @@ interface Meta { } export default function useFetch() { - return React.useCallback((path: string, params?: Params, meta?: Meta): Promise> => { + return React.useCallback((path: string, params?: Params, meta?: Meta): Promise => { const _body = params?.body; const isFormData = _body instanceof FormData; const withBody = isBodyAllowed(params?.method); @@ -65,14 +65,18 @@ export default function useFetch() { payload: jsonError as Error, status: response.status, statusText: response.statusText, - }), + } as ResourceError), () => { return Promise.reject(error); }, ); } else { - return response.json() as Promise; + if (response.status === 204) { + return Promise.resolve({} as Success); + } else { + return response.json() as Promise; + } } }); }, [ ]); diff --git a/lib/hooks/useNavItems.tsx b/lib/hooks/useNavItems.tsx index 4a6e2552ae..9a16717e17 100644 --- a/lib/hooks/useNavItems.tsx +++ b/lib/hooks/useNavItems.tsx @@ -10,6 +10,7 @@ import appsIcon from 'icons/apps.svg'; import withdrawalsIcon from 'icons/arrows/north-east.svg'; import depositsIcon from 'icons/arrows/south-east.svg'; import blocksIcon from 'icons/block.svg'; +import forumIcon from 'icons/forum.svg'; import gearIcon from 'icons/gear.svg'; import globeIcon from 'icons/globe-b.svg'; import graphQLIcon from 'icons/graphQL.svg'; @@ -176,6 +177,12 @@ export default function useNavItems(): ReturnType { isActive: apiNavItems.some(item => isInternalItem(item) && item.isActive), subItems: apiNavItems, }, + config.features.forum.isEnabled ? { + text: 'Forum', + icon: forumIcon, + nextRoute: { pathname: '/forum' as const }, + isActive: pathname.startsWith('/forum/') || pathname === '/forum', + } : null, config.UI.sidebar.otherLinks.length > 0 ? { text: 'Other', icon: gearIcon, diff --git a/lib/metadata/getPageOgType.ts b/lib/metadata/getPageOgType.ts index 5da92870b1..1a58c2d7bb 100644 --- a/lib/metadata/getPageOgType.ts +++ b/lib/metadata/getPageOgType.ts @@ -48,6 +48,16 @@ const OG_TYPE_DICT: Record = { '/api/healthz': 'Regular page', '/auth/auth0': 'Regular page', '/auth/unverified-email': 'Regular page', + + // forum routes: + '/forum': 'Root page', + '/forum/[topic]': 'Regular page', + '/forum/[topic]/create-thread': 'Regular page', + '/forum/[topic]/[thread]': 'Regular page', + '/forum/chats': 'Root page', + '/forum/chats/[hash]': 'Regular page', + '/forum/bookmarks/[hash]': 'Regular page', + '/forum/watches/[hash]': 'Regular page', }; export default function getPageOgType(pathname: Route['pathname']) { diff --git a/lib/metadata/templates/description.ts b/lib/metadata/templates/description.ts index 25ced418dd..33ad91edeb 100644 --- a/lib/metadata/templates/description.ts +++ b/lib/metadata/templates/description.ts @@ -51,6 +51,15 @@ const TEMPLATE_MAP: Record = { '/api/healthz': DEFAULT_TEMPLATE, '/auth/auth0': DEFAULT_TEMPLATE, '/auth/unverified-email': DEFAULT_TEMPLATE, + + '/forum': DEFAULT_TEMPLATE, + '/forum/[topic]': DEFAULT_TEMPLATE, + '/forum/[topic]/create-thread': DEFAULT_TEMPLATE, + '/forum/[topic]/[thread]': DEFAULT_TEMPLATE, + '/forum/chats': DEFAULT_TEMPLATE, + '/forum/chats/[hash]': DEFAULT_TEMPLATE, + '/forum/bookmarks/[hash]': DEFAULT_TEMPLATE, + '/forum/watches/[hash]': DEFAULT_TEMPLATE, }; export function make(pathname: Route['pathname']) { diff --git a/lib/metadata/templates/title.ts b/lib/metadata/templates/title.ts index a47e94cf5e..2c718389dd 100644 --- a/lib/metadata/templates/title.ts +++ b/lib/metadata/templates/title.ts @@ -46,6 +46,15 @@ const TEMPLATE_MAP: Record = { '/api/healthz': 'node API health check', '/auth/auth0': 'authentication', '/auth/unverified-email': 'unverified email', + + '/forum': 'forum', + '/forum/[topic]': 'topic', + '/forum/[topic]/create-thread': 'create thread', + '/forum/[topic]/[thread]': 'thread', + '/forum/chats': 'chats', + '/forum/chats/[hash]': 'chat', + '/forum/bookmarks/[hash]': 'bookmarks', + '/forum/watches/[hash]': 'watches', }; export function make(pathname: Route['pathname']) { diff --git a/lib/mixpanel/getPageType.ts b/lib/mixpanel/getPageType.ts index dec0e8dc30..4fb399f977 100644 --- a/lib/mixpanel/getPageType.ts +++ b/lib/mixpanel/getPageType.ts @@ -46,6 +46,15 @@ export const PAGE_TYPE_DICT: Record = { '/api/healthz': 'Node API: Health check', '/auth/auth0': 'Auth', '/auth/unverified-email': 'Unverified email', + + '/forum': 'Forum', + '/forum/[topic]': 'Forum ttopic', + '/forum/[topic]/create-thread': 'Forum: Create thread', + '/forum/[topic]/[thread]': 'Forum thread', + '/forum/chats': 'Chats', + '/forum/chats/[hash]': 'Chat', + '/forum/bookmarks/[hash]': 'Bookmarks', + '/forum/watches/[hash]': 'Watches', }; export default function getPageType(pathname: Route['pathname']) { diff --git a/lib/shortDate.ts b/lib/shortDate.ts new file mode 100644 index 0000000000..2b6fc3d612 --- /dev/null +++ b/lib/shortDate.ts @@ -0,0 +1,16 @@ +export default function shortDate(timestamp: number) { + const now = new Date(); + const currentYear = now.getFullYear(); + const date = new Date(timestamp); + const year = date.getFullYear(); + + const zp = (n: number) => n.toString().padStart(2, '0'); + + const time = `${ zp(date.getHours()) }:${ zp(date.getMinutes()) }`; + + if (year === currentYear) { + return `${ zp(date.getDate()) }/${ zp(date.getMonth() + 1) } ${ time }`; + } else { + return `${ zp(date.getDate()) }/${ zp(date.getMonth() + 1) }/${ zp(year % 100) } ${ time }`; + } +} diff --git a/nextjs/csp/generateCspPolicy.ts b/nextjs/csp/generateCspPolicy.ts index 4b626625a6..98b08986a9 100644 --- a/nextjs/csp/generateCspPolicy.ts +++ b/nextjs/csp/generateCspPolicy.ts @@ -14,6 +14,7 @@ function generateCspPolicy() { descriptors.safe(), descriptors.sentry(), descriptors.walletConnect(), + descriptors.ylideRpcs(), ); return makePolicyString(policyDescriptor); diff --git a/nextjs/csp/policies/index.ts b/nextjs/csp/policies/index.ts index e8377eb9c3..71073c9175 100644 --- a/nextjs/csp/policies/index.ts +++ b/nextjs/csp/policies/index.ts @@ -9,3 +9,4 @@ export { monaco } from './monaco'; export { safe } from './safe'; export { sentry } from './sentry'; export { walletConnect } from './walletConnect'; +export { ylideRpcs } from './ylideRpcs'; diff --git a/nextjs/csp/policies/ylideRpcs.ts b/nextjs/csp/policies/ylideRpcs.ts new file mode 100644 index 0000000000..a7aacd2a5d --- /dev/null +++ b/nextjs/csp/policies/ylideRpcs.ts @@ -0,0 +1,83 @@ +import type CspDev from 'csp-dev'; + +import config from 'configs/app'; + +export function ylideRpcs(): CspDev.DirectiveDescriptor { + if (!config.features.forum.isEnabled) { + return {}; + } + + return { + 'connect-src': [ + '*.ylide.io', + '*.terminet.io', + '*.blockpi.network', + '*.blockscout.com', + '*.gateway.pokt.network', + '*.linkpool.io', + '*.rpcfast.com', + '*.public.blastapi.io', + '*.binance.org', + '*.defibit.io', + '*.ninicoin.io', + '*.nodereal.io', + '*.bwarelabs.com', + '*.bwarelabs.com', + '*.fandom.finance', + '*.api.onfinality.io', + '*.moonbeam.network', + '*.moonscan.io', + '*.fantom.network', + '*.mytokenpocket.vip', + 'evm.cronos.org', + 'cronos-rpc.heavenswail.one', + 'cronosrpc-1.xstaking.sg', + 'cronos-rpc.elk.finance', + 'api.mycryptoapi.com', + 'rpc.flashbots.net', + 'rpc.ankr.com', + '1rpc.io', + 'lineascan.build', + 'basescan.org', + 'cronoscan.com', + 'cloudflare-eth.com', + 'nodes.mewapi.io', + 'mainnet.eth.cloud.ava.do', + 'ethereumnodelight.app.runonflux.io', + 'api.bitstack.com', + 'eth-mainnet.unifra.io', + 'api.securerpc.com', + 'etherscan.io', + 'bscrpc.com', + 'rpc-bsc.bnb48.club', + 'bscscan.com', + 'arb1.arbitrum.io', + 'arbiscan.io', + 'api.avax.network', + 'snowtrace.io', + 'mainnet.optimism.io', + 'optimistic.etherscan.io', + 'polygon-rpc.com', + 'rpc-mainnet.matic.network', + 'matic-mainnet.chainstacklabs.com', + 'rpc-mainnet.maticvigil.com', + 'rpc-mainnet.matic.quiknode.pro', + 'polygon-bor.publicnode.com', + 'matic.slingshot.finance', + 'polygonscan.com', + 'rpc.ftm.tools', + 'ftmscan.com', + 'public-node-api.klaytnapi.com', + 'scope.klaytn.com', + 'rpc.gnosischain.com', + 'rpc.ap-southeast-1.gateway.fm', + 'gnosisscan.io', + 'mainnet.aurora.dev', + 'aurorascan.dev', + 'forno.celo.org', + 'celoscan.io', + 'andromeda.metis.io', + 'andromeda-explorer.metis.io', + ], + }; +} diff --git a/nextjs/getServerSideProps.ts b/nextjs/getServerSideProps.ts index 2f62492617..70e02d132e 100644 --- a/nextjs/getServerSideProps.ts +++ b/nextjs/getServerSideProps.ts @@ -10,6 +10,8 @@ export type Props = { hash: string; number: string; q: string; + topic: string; + thread: string; } export const base: GetServerSideProps = async({ req, query }) => { @@ -22,6 +24,8 @@ export const base: GetServerSideProps = async({ req, query }) => { height_or_hash: query.height_or_hash?.toString() || '', number: query.number?.toString() || '', q: query.q?.toString() || '', + topic: query.topic?.toString() || '', + thread: query.thread?.toString() || '', }, }; }; diff --git a/nextjs/nextjs-routes.d.ts b/nextjs/nextjs-routes.d.ts index a39e9e3884..f5297f3472 100644 --- a/nextjs/nextjs-routes.d.ts +++ b/nextjs/nextjs-routes.d.ts @@ -29,6 +29,14 @@ declare module "nextjs-routes" { | DynamicRoute<"/block/[height_or_hash]", { "height_or_hash": string }> | StaticRoute<"/blocks"> | StaticRoute<"/csv-export"> + | DynamicRoute<"/forum/[topic]/[thread]", { "topic": string; "thread": string }> + | DynamicRoute<"/forum/[topic]/create-thread", { "topic": string }> + | DynamicRoute<"/forum/[topic]", { "topic": string }> + | DynamicRoute<"/forum/bookmarks/[hash]", { "hash": string }> + | DynamicRoute<"/forum/chats/[hash]", { "hash": string }> + | StaticRoute<"/forum/chats"> + | StaticRoute<"/forum"> + | DynamicRoute<"/forum/watches/[hash]", { "hash": string }> | StaticRoute<"/graphiql"> | StaticRoute<"/"> | StaticRoute<"/l2-deposits"> diff --git a/package.json b/package.json index 918c4419f3..afbea6711e 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,10 @@ "dependencies": { "@chakra-ui/react": "2.7.1", "@chakra-ui/theme-tools": "^2.0.18", + "@editorjs/editorjs": "2.27.2", + "@editorjs/header": "2.7.0", + "@editorjs/list": "1.8.0", + "@editorjs/paragraph": "2.9.0", "@emotion/react": "^11.10.4", "@emotion/styled": "^11.10.4", "@metamask/post-message-stream": "^7.0.0", @@ -53,8 +57,12 @@ "@tanstack/react-query-devtools": "^5.4.3", "@types/papaparse": "^5.3.5", "@types/react-scroll": "^1.8.4", + "@walletconnect/browser-utils": "^1.8.0", "@web3modal/ethereum": "^2.6.2", "@web3modal/react": "^2.6.2", + "@ylide/ethereum": "0.9.0-beta.11", + "@ylide/sdk": "0.9.0-beta.8", + "@ylide/smart-buffer": "0.0.17", "bignumber.js": "^9.1.0", "blo": "^1.1.1", "chakra-react-select": "^4.4.3", @@ -83,11 +91,14 @@ "react": "18.2.0", "react-device-detect": "^2.2.3", "react-dom": "18.2.0", + "react-draft-wysiwyg": "^1.15.0", + "react-editor-js": "2.1.0", "react-google-recaptcha": "^2.1.0", "react-hook-form": "^7.33.1", "react-identicons": "^1.2.5", "react-intersection-observer": "^9.5.2", "react-jazzicon": "^1.0.4", + "react-qr-code": "^2.0.12", "react-scroll": "^1.8.7", "swagger-ui-react": "^5.9.0", "use-font-face-observer": "^1.2.1", @@ -106,6 +117,7 @@ "@types/csp-dev": "^1.0.0", "@types/d3": "^7.4.0", "@types/dom-to-image": "^2.6.4", + "@types/editorjs__header": "^2.6.1", "@types/jest": "^29.2.0", "@types/js-cookie": "^3.0.2", "@types/mixpanel-browser": "^2.38.1", diff --git a/pages/_app.tsx b/pages/_app.tsx index b9d77d5c53..8bfa92a786 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -12,6 +12,7 @@ import useQueryClientConfig from 'lib/api/useQueryClientConfig'; import { AppContextProvider } from 'lib/contexts/app'; import { ChakraProvider } from 'lib/contexts/chakra'; import { ScrollDirectionProvider } from 'lib/contexts/scrollDirection'; +import { YlideProvider } from 'lib/contexts/ylide'; import { SocketProvider } from 'lib/socket/context'; import theme from 'theme'; import AppErrorBoundary from 'ui/shared/AppError/AppErrorBoundary'; @@ -56,7 +57,9 @@ function MyApp({ Component, pageProps }: AppPropsWithLayout) { - { getLayout() } + + { getLayout() } + diff --git a/pages/forum/[topic]/[thread]/index.tsx b/pages/forum/[topic]/[thread]/index.tsx new file mode 100644 index 0000000000..1ed4c6e733 --- /dev/null +++ b/pages/forum/[topic]/[thread]/index.tsx @@ -0,0 +1,20 @@ +import type { NextPage } from 'next'; +import dynamic from 'next/dynamic'; +import React from 'react'; + +import type { Props } from 'nextjs/getServerSideProps'; +import PageNextJs from 'nextjs/PageNextJs'; + +const Thread = dynamic(() => import('ui/pages/Thread'), { ssr: false }); + +const Page: NextPage = (props: Props) => { + return ( + + + + ); +}; + +export default Page; + +export { base as getServerSideProps } from 'nextjs/getServerSideProps'; diff --git a/pages/forum/[topic]/create-thread.tsx b/pages/forum/[topic]/create-thread.tsx new file mode 100644 index 0000000000..cee47297ea --- /dev/null +++ b/pages/forum/[topic]/create-thread.tsx @@ -0,0 +1,20 @@ +import type { NextPage } from 'next'; +import dynamic from 'next/dynamic'; +import React from 'react'; + +import type { Props } from 'nextjs/getServerSideProps'; +import PageNextJs from 'nextjs/PageNextJs'; + +const CreateThread = dynamic(() => import('ui/pages/CreateThread'), { ssr: false }); + +const Page: NextPage = (props: Props) => { + return ( + + + + ); +}; + +export default Page; + +export { base as getServerSideProps } from 'nextjs/getServerSideProps'; diff --git a/pages/forum/[topic]/index.tsx b/pages/forum/[topic]/index.tsx new file mode 100644 index 0000000000..e2e1bfea66 --- /dev/null +++ b/pages/forum/[topic]/index.tsx @@ -0,0 +1,20 @@ +import type { NextPage } from 'next'; +import dynamic from 'next/dynamic'; +import React from 'react'; + +import type { Props } from 'nextjs/getServerSideProps'; +import PageNextJs from 'nextjs/PageNextJs'; + +const Threads = dynamic(() => import('ui/pages/Threads'), { ssr: false }); + +const Page: NextPage = (props: Props) => { + return ( + + + + ); +}; + +export default Page; + +export { base as getServerSideProps } from 'nextjs/getServerSideProps'; diff --git a/pages/forum/bookmarks/[hash].tsx b/pages/forum/bookmarks/[hash].tsx new file mode 100644 index 0000000000..4db121b376 --- /dev/null +++ b/pages/forum/bookmarks/[hash].tsx @@ -0,0 +1,20 @@ +import type { NextPage } from 'next'; +import dynamic from 'next/dynamic'; +import React from 'react'; + +import type { Props } from 'nextjs/getServerSideProps'; +import PageNextJs from 'nextjs/PageNextJs'; + +const Bookmarks = dynamic(() => import('ui/pages/Bookmarks'), { ssr: false }); + +const Page: NextPage = (props: Props) => { + return ( + + + + ); +}; + +export default Page; + +export { base as getServerSideProps } from 'nextjs/getServerSideProps'; diff --git a/pages/forum/chats/[hash].tsx b/pages/forum/chats/[hash].tsx new file mode 100644 index 0000000000..4a0cd41c81 --- /dev/null +++ b/pages/forum/chats/[hash].tsx @@ -0,0 +1,20 @@ +import type { NextPage } from 'next'; +import dynamic from 'next/dynamic'; +import React from 'react'; + +import type { Props } from 'nextjs/getServerSideProps'; +import PageNextJs from 'nextjs/PageNextJs'; + +const Chat = dynamic(() => import('ui/pages/Chat'), { ssr: false }); + +const Page: NextPage = (props: Props) => { + return ( + + + + ); +}; + +export default Page; + +export { base as getServerSideProps } from 'nextjs/getServerSideProps'; diff --git a/pages/forum/chats/index.tsx b/pages/forum/chats/index.tsx new file mode 100644 index 0000000000..d21b9806bd --- /dev/null +++ b/pages/forum/chats/index.tsx @@ -0,0 +1,20 @@ +import type { NextPage } from 'next'; +import dynamic from 'next/dynamic'; +import React from 'react'; + +import type { Props } from 'nextjs/getServerSideProps'; +import PageNextJs from 'nextjs/PageNextJs'; + +const Chats = dynamic(() => import('ui/pages/Chats'), { ssr: false }); + +const Page: NextPage = (props: Props) => { + return ( + + + + ); +}; + +export default Page; + +export { base as getServerSideProps } from 'nextjs/getServerSideProps'; diff --git a/pages/forum/index.tsx b/pages/forum/index.tsx new file mode 100644 index 0000000000..b7f63546ed --- /dev/null +++ b/pages/forum/index.tsx @@ -0,0 +1,20 @@ +import type { NextPage } from 'next'; +import dynamic from 'next/dynamic'; +import React from 'react'; + +import type { Props } from 'nextjs/getServerSideProps'; +import PageNextJs from 'nextjs/PageNextJs'; + +const Topics = dynamic(() => import('ui/pages/Topics'), { ssr: false }); + +const Page: NextPage = (props: Props) => { + return ( + + + + ); +}; + +export default Page; + +export { base as getServerSideProps } from 'nextjs/getServerSideProps'; diff --git a/pages/forum/watches/[hash].tsx b/pages/forum/watches/[hash].tsx new file mode 100644 index 0000000000..20e7d04fdf --- /dev/null +++ b/pages/forum/watches/[hash].tsx @@ -0,0 +1,20 @@ +import type { NextPage } from 'next'; +import dynamic from 'next/dynamic'; +import React from 'react'; + +import type { Props } from 'nextjs/getServerSideProps'; +import PageNextJs from 'nextjs/PageNextJs'; + +const Watches = dynamic(() => import('ui/pages/Watches'), { ssr: false }); + +const Page: NextPage = (props: Props) => { + return ( + + + + ); +}; + +export default Page; + +export { base as getServerSideProps } from 'nextjs/getServerSideProps'; diff --git a/playwright/TestApp.tsx b/playwright/TestApp.tsx index fc644a9ad8..8fe9e1fd28 100644 --- a/playwright/TestApp.tsx +++ b/playwright/TestApp.tsx @@ -8,6 +8,7 @@ import { mainnet } from 'wagmi/chains'; import type { Props as PageProps } from 'nextjs/getServerSideProps'; import { AppContextProvider } from 'lib/contexts/app'; +import { YlideProvider } from 'lib/contexts/ylide'; import { SocketProvider } from 'lib/socket/context'; import * as app from 'playwright/utils/app'; import theme from 'theme'; @@ -29,6 +30,8 @@ const defaultAppContext = { hash: '', number: '', q: '', + topic: '', + thread: '', }, }; @@ -63,7 +66,9 @@ const TestApp = ({ children, withSocket, appContext = defaultAppContext }: Props - { children } + + { children } + diff --git a/tools/scripts/dev.preset.sh b/tools/scripts/dev.preset.sh index 1110089f72..73900812e9 100755 --- a/tools/scripts/dev.preset.sh +++ b/tools/scripts/dev.preset.sh @@ -30,5 +30,5 @@ dotenv \ -v NEXT_PUBLIC_GIT_TAG=$(git describe --tags --abbrev=0) \ -e $config_file \ -e $secrets_file \ - -- bash -c './deploy/scripts/make_envs_script.sh && next dev -- -p $NEXT_PUBLIC_APP_PORT' | + -- bash -c './deploy/scripts/make_envs_script.sh && next dev -- -p $NEXT_PUBLIC_APP_LISTEN_PORT' | pino-pretty \ No newline at end of file diff --git a/types/api/forum.ts b/types/api/forum.ts new file mode 100644 index 0000000000..529b0dd249 --- /dev/null +++ b/types/api/forum.ts @@ -0,0 +1,18 @@ +export type TopicsFilters = { q: string }; + +export interface TopicsSorting { + sort: 'popular' | 'name' | 'updated'; + order: 'asc' | 'desc'; +} + +export type ThreadsFilters = { q: string; tag?: string }; + +export interface ThreadsSorting { + sort: 'popular' | 'name' | 'updated'; + order: 'asc' | 'desc'; +} + +export interface RepliesSorting { + sort: 'time'; + order: 'asc' | 'desc'; +} diff --git a/ui/Forum.png b/ui/Forum.png new file mode 100644 index 0000000000000000000000000000000000000000..e7df51e2b172883e62d6d344006f7a928f92e61f GIT binary patch literal 428386 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≥C#kvOpFQEqmIoNG!K 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%0A{o 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 e8OQ%Nj!VSBoklkh%A7U)|4I9E$I6a+-u++R { + const router = useRouter(); + const hash = getQueryParamString(router.query.hash).toLowerCase(); + const { accounts: { initialized, tokens } } = useYlide(); + const [ thread, setThread ] = React.useState(); + const getThread = ForumPublicApi.useGetThreadByAddress(hash); + const createThread = ForumPersonalApi.useCreateThread(tokens[0]); + const toast = useToast(); + + useEffect(() => { + if (!initialized) { + return; + } + getThread().then(setThread); + }, [ getThread, initialized ]); + + const handleCreateDiscussion = React.useCallback(async() => { + // blockchainAddress + // blockchainTx + try { + const thread = await createThread({ + title: `Let's discuss address "${ hash }"`, + description: `Address "${ hash }" discussion`, + blockchainTx: hash, + topic: '27', + tags: [], + }); + setThread(thread); + } catch (err) { + toast({ + position: 'top-right', + title: 'Error', + description: (err as ({ payload: string } | undefined))?.payload || 'There was an error while creating thread.', + status: 'error', + variant: 'subtle', + isClosable: true, + }); + } + }, [ hash, createThread, toast ]); + + const mutedColor = useColorModeValue('gray.500', 'gray.500'); + + if (!thread) { + return ( + + There’s no discussions about this address yet. + + + ); + } + + return ( + + ); +}; + +export default AddressDiscuss; diff --git a/ui/addressVerification/types.ts b/ui/addressVerification/types.ts index e2bc66180d..1340b5ad38 100644 --- a/ui/addressVerification/types.ts +++ b/ui/addressVerification/types.ts @@ -23,10 +23,10 @@ export type AddressCheckResponseSuccess = { status: 'SUCCESS'; result: AddressCheckStatusSuccess; } | -{ status: 'IS_OWNER_ERROR' } | -{ status: 'OWNERSHIP_VERIFIED_ERROR' } | -{ status: 'SOURCE_CODE_NOT_VERIFIED_ERROR' } | -{ status: 'INVALID_ADDRESS_ERROR' }; +{ status: 'IS_OWNER_ERROR'; payload?: { message?: string } } | +{ status: 'OWNERSHIP_VERIFIED_ERROR'; payload?: { message?: string } } | +{ status: 'SOURCE_CODE_NOT_VERIFIED_ERROR'; payload?: { message?: string } } | +{ status: 'INVALID_ADDRESS_ERROR'; payload?: { message?: string } }; export interface AddressVerificationResponseError { code: number; diff --git a/ui/connectAccountModal/BlockChainLabel.tsx b/ui/connectAccountModal/BlockChainLabel.tsx new file mode 100644 index 0000000000..a4ac20bf71 --- /dev/null +++ b/ui/connectAccountModal/BlockChainLabel.tsx @@ -0,0 +1,50 @@ +import { Box, useColorModeValue } from '@chakra-ui/react'; +import React from 'react'; + +import { blockchainMeta } from 'lib/contexts/ylide/constants'; + +export interface BlockChainLabelProps { + blockchain: string; +} + +export function BlockChainLabel({ blockchain }: BlockChainLabelProps) { + const backgroundColor = useColorModeValue('blackAlpha.100', 'whiteAlpha.100'); + return ( + + + { blockchainMeta[blockchain].logo(12) } + { blockchain.toUpperCase() } + + + ); +} diff --git a/ui/connectAccountModal/WalletTag.tsx b/ui/connectAccountModal/WalletTag.tsx new file mode 100644 index 0000000000..7e4bcfdc3c --- /dev/null +++ b/ui/connectAccountModal/WalletTag.tsx @@ -0,0 +1,56 @@ +import { Flex, useColorModeValue } from '@chakra-ui/react'; +import React from 'react'; + +import { walletsMeta } from 'lib/contexts/ylide/constants'; +import shortenString from 'lib/shortenString'; + +interface WalletTagProps { + wallet: string; + address?: string; +} + +export function WalletTag({ wallet, address }: WalletTagProps) { + const borderColor = useColorModeValue('blackAlpha.400', 'whiteAlpha.400'); + return ( + + { walletsMeta[wallet].logo(20) } + { walletsMeta[wallet].title } + { Boolean(address) && ( + + { shortenString(address || null) } + + ) } + + ); +} diff --git a/ui/connectAccountModal/index.tsx b/ui/connectAccountModal/index.tsx new file mode 100644 index 0000000000..552f51dc5a --- /dev/null +++ b/ui/connectAccountModal/index.tsx @@ -0,0 +1,486 @@ +import { Box, Button, Flex, Input, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, Spinner } from '@chakra-ui/react'; +import { EVMNetwork } from '@ylide/ethereum'; +import type { AbstractWalletController, RemotePublicKey, WalletAccount, YlideKeysRegistry, YlidePrivateKey } from '@ylide/sdk'; +import { asyncDelay, PrivateKeyAvailabilityState, YlideKeyVersion } from '@ylide/sdk'; +import type { PropsWithChildren, ReactNode } from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; + +import type { DomainAccount } from 'lib/contexts/ylide/types'; + +import ProceedToWalletArrowSvg from 'icons/proceedTOWalletArrow.svg'; +import { useYlide } from 'lib/contexts/ylide'; + +import { BlockChainLabel } from './BlockChainLabel'; +import { WalletTag } from './WalletTag'; + +enum Step { + LOADING, + ENTER_PASSWORD, + GENERATE_KEY, + PUBLISH_KEY, + PUBLISHING_KEY, +} + +interface ActionModalProps extends PropsWithChildren> { + title?: ReactNode; + buttons?: ReactNode; + onClose: () => void; +} + +function ActionModal({ children, title, buttons, onClose }: ActionModalProps) { + return ( + + + + { title != null && { title } } + + { children != null && { children } } + { buttons != null && { buttons } } + + + ); +} + +interface LoadingModalProps { + reason?: ReactNode; +} + +export function LoadingModal({ reason }: LoadingModalProps) { + const handleClose = useCallback(() => {}, []); + return ( + + + + + { reason && { reason } } + + + ); +} + +export interface YlideConnectAccountModalProps { + wallet: AbstractWalletController; + account: WalletAccount; + remoteKeys: Record; + onClose?: (account?: DomainAccount) => void; +} + +async function constructLocalKeyV3(keysRegistry: YlideKeysRegistry, controller: AbstractWalletController, account: WalletAccount) { + return await keysRegistry.instantiateNewPrivateKey( + account.blockchainGroup, + account.address, + YlideKeyVersion.KEY_V3, + PrivateKeyAvailabilityState.AVAILABLE, + { + onPrivateKeyRequest: async(address, magicString) => + await controller.signMagicString(account, magicString), + }, + ); +} + +async function constructLocalKeyV2(keysRegistry: YlideKeysRegistry, controller: AbstractWalletController, account: WalletAccount, password: string) { + return await keysRegistry.instantiateNewPrivateKey( + account.blockchainGroup, + account.address, + YlideKeyVersion.KEY_V2, + PrivateKeyAvailabilityState.AVAILABLE, + { + onPrivateKeyRequest: async(address, magicString) => + await controller.signMagicString(account, magicString), + onYlidePasswordRequest: async() => password, + }, + ); +} + +async function constructLocalKeyV1(keysRegistry: YlideKeysRegistry, controller: AbstractWalletController, account: WalletAccount, password: string) { + return await keysRegistry.instantiateNewPrivateKey( + account.blockchainGroup, + account.address, + YlideKeyVersion.INSECURE_KEY_V1, + PrivateKeyAvailabilityState.AVAILABLE, + { + onPrivateKeyRequest: async(address, magicString) => + await controller.signMagicString(account, magicString), + onYlidePasswordRequest: async() => password, + }, + ); +} + +export function YlideConnectAccountModal({ + wallet, + account, + remoteKeys, + onClose, +}: YlideConnectAccountModalProps): JSX.Element { + const freshestKey: { key: RemotePublicKey; blockchain: string } | undefined = useMemo( + () => + Object.keys(remoteKeys) + .filter(t => Boolean(remoteKeys[t])) + .map(t => ({ + key: remoteKeys[t] as RemotePublicKey, + blockchain: t, + })) + .sort((a, b) => b.key.timestamp - a.key.timestamp)[0], + [ remoteKeys ], + ); + const keyVersion = freshestKey?.key.publicKey.keyVersion || 0; + const isPasswordNeeded = keyVersion === 1 || keyVersion === 2; + + const { faucet, keysRegistry } = useYlide(); + + const [ step, setStep ] = useState(Step.ENTER_PASSWORD); + + const [ password, setPassword ] = useState(''); + + const waitTxPublishing = false; + + // const [ network, setNetwork ] = useState(); + // useEffect(() => { + // if (wallet.factory.blockchainGroup === 'evm') { + // getEvmWalletNetwork(wallet).then(setNetwork); + // } + // }, [ wallet ]); + + // const domainAccountRef = useRef(); + + const createDomainAccount = useCallback(async( + wallet: AbstractWalletController, + account: WalletAccount, + privateKey: YlidePrivateKey, + ): Promise => { + // const acc = await wallet.createNewDomainAccount(account); + // await acc.addNewLocalPrivateKey(privateKey); + // domainAccountRef.current = acc; + await keysRegistry.addLocalPrivateKey(privateKey); + return { + wallet, + account, + name: 'New Account', + backendAuthKey: null, + reloadKeys: async() => { + // await keysRegistry.reloadLocalPrivateKeys(); + await asyncDelay(1000); + }, + }; + // return acc; + }, [ keysRegistry ]); + + // function exitUnsuccessfully(error?: { message: string; e?: any }) { + // // if (error) { + // // console.error(error.message, error.e); + // // toast(error.message); + // // } + + // // if (domainAccountRef.current) { + // // disconnectAccount({ account: domainAccountRef.current }).catch(); + // // } + + // onClose?.(); + // } + + const createLocalKey = useCallback(async({ + password, + forceNew, + withoutPassword, + }: { + password: string; + forceNew?: boolean; + withoutPassword?: boolean; + }) => { + setStep(Step.GENERATE_KEY); + + let tempLocalKey: YlidePrivateKey; + const needToRepublishKey = false; + try { + const forceSecond = false; + if (withoutPassword) { + // console.warn('createLocalKey', 'withoutPassword'); + tempLocalKey = await constructLocalKeyV3(keysRegistry, wallet, account); + } else if (forceNew) { + // console.warn('createLocalKey', 'forceNew'); + tempLocalKey = await constructLocalKeyV2(keysRegistry, wallet, account, password); + } else if (freshestKey?.key.publicKey.keyVersion === YlideKeyVersion.INSECURE_KEY_V1) { + if (freshestKey.blockchain === 'venom-testnet') { + // strange... I'm not sure Qamon keys work here + if (forceSecond) { + // console.warn('createLocalKey', 'INSECURE_KEY_V1 venom-testnet'); + tempLocalKey = await constructLocalKeyV1(keysRegistry, wallet, account, password); + } else { + // console.warn('createLocalKey', 'INSECURE_KEY_V1 venom-testnet'); + tempLocalKey = await constructLocalKeyV2(keysRegistry, wallet, account, password); + } + } else { + // strange... I'm not sure Qamon keys work here + if (forceSecond) { + // console.warn('createLocalKey', 'INSECURE_KEY_V2 non-venom'); + tempLocalKey = await constructLocalKeyV2(keysRegistry, wallet, account, password); + } else { + // console.warn('createLocalKey', 'INSECURE_KEY_V1 non-venom'); + tempLocalKey = await constructLocalKeyV1(keysRegistry, wallet, account, password); + } + } + } else if (freshestKey?.key.publicKey.keyVersion === YlideKeyVersion.KEY_V2) { + // if user already using password - we should use it too + // console.warn('createLocalKey', 'KEY_V2'); + tempLocalKey = await constructLocalKeyV2(keysRegistry, wallet, account, password); + } else if (freshestKey?.key.publicKey.keyVersion === YlideKeyVersion.KEY_V3) { + // if user is not using password - we should not use it too + // console.warn('createLocalKey', 'KEY_V3'); + tempLocalKey = await constructLocalKeyV3(keysRegistry, wallet, account); + } else { + // user have no key at all - use passwordless version + // console.warn('createLocalKey', 'no key'); + tempLocalKey = await constructLocalKeyV3(keysRegistry, wallet, account); + } + } catch (e) { + // exitUnsuccessfully({ message: 'Failed to create local key 😒', e }); + return; + } + + setStep(Step.LOADING); + + if (!freshestKey || needToRepublishKey) { + const domainAccount = await createDomainAccount(wallet, account, tempLocalKey); + const actualFaucetType = EVMNetwork.GNOSIS; + + setStep(Step.GENERATE_KEY); + + const faucetData = await faucet.getFaucetSignature( + domainAccount, + tempLocalKey.publicKey, + actualFaucetType, + ); + + setStep(Step.LOADING); + + const promise = faucet.publishThroughFaucet(faucetData); + + if (waitTxPublishing) { + await promise; + } + + onClose?.(domainAccount); + } else if (freshestKey.key.publicKey.equals(tempLocalKey.publicKey)) { + await keysRegistry.addRemotePublicKeys( + Object.values(remoteKeys).filter(it => Boolean(it)) as Array, + ); + const domainAccount = await createDomainAccount(wallet, account, tempLocalKey); + onClose?.(domainAccount); + } else if (forceNew || withoutPassword) { + + // await createDomainAccount(wallet, account, tempLocalKey); + // await publishLocalKey(tempLocalKey, network); + } else { + alert('Password is wrong. Please try again ❤'); + setStep(Step.ENTER_PASSWORD); + } + }, [ account, createDomainAccount, faucet, freshestKey, keysRegistry, onClose, remoteKeys, waitTxPublishing, wallet ]); + + const handleClose = useCallback(() => { + onClose?.(); + }, [ onClose ]); + + const handleCreateLocalKey = useCallback(() => { + createLocalKey({ password }); + }, [ password, createLocalKey ]); + + const handlePasswordChange = useCallback((e: React.ChangeEvent) => { + setPassword(e.target.value); + }, []); + + const handlePasswordKeyDown = useCallback((e: React.KeyboardEvent) => { + if (e.key === 'Enter') { + createLocalKey({ password }); + } + }, [ password, createLocalKey ]); + + const handleForgotPassword = useCallback(() => { + // showStaticComponent(resolve => ( + // { + // if (result?.withoutPassword) { + // createLocalKey({ + // password: '', + // withoutPassword: true, + // }); + // } else if (result?.password) { + // createLocalKey({ + // password: result.password, + // forceNew: true, + // }); + // } + + // resolve(); + // } } + // /> + // )) + // .catch(console.error); + }, []); + + const handleCancelKeyGeneration = useCallback(() => { + if (isPasswordNeeded) { + setStep(Step.ENTER_PASSWORD); + } else { + handleClose(); + } + }, [ handleClose, isPasswordNeeded ]); + + const handleCancelKeyPublishing = useCallback(() => { + setStep( + isPasswordNeeded ? + Step.ENTER_PASSWORD : + Step.GENERATE_KEY, + ); + }, [ isPasswordNeeded ]); + + const steps: Record JSX.Element> = { + [Step.LOADING]: () => , + [Step.ENTER_PASSWORD]: () => ( + + + + + ) } + onClose={ handleClose } + > + + + { freshestKey ? ( + <> +

    + + { isPasswordNeeded && ( +
    + + +
    + +
    +
    + ) } + + ) : ( +
    +To get your private Ylide communication key, please, press "Sign" button below and sign the +authorization message in your wallet. +
    + ) } + + ), + [Step.GENERATE_KEY]: () => ( + +Cancel + + ) } + onClose={ handleClose } + > + + +
    + +
    + +
    Confirm the message
    + +
    + { isPasswordNeeded ? + 'We need you to sign your password so we can generate you a unique communication key.' : + 'We need you to sign authorization message so we can generate you a unique communication key.' } +
    +
    + ), + [Step.PUBLISH_KEY]: () => ( + Cancel + ) } + onClose={ handleClose }// () => exitUnsuccessfully() } + > + + +
    + +
    + +
    Confirm the transaction
    + +
    Please sign the transaction in your wallet to publish your unique communication key.
    +
    + ), + [Step.PUBLISHING_KEY]: () => ( + // () => exitUnsuccessfully() } + + + + + + + + Publishing the key + + Please, wait for the transaction to be completed + + ), + }; + + const result: JSX.Element = steps[step](); + + return result; +} diff --git a/ui/createTopicModal/index.tsx b/ui/createTopicModal/index.tsx new file mode 100644 index 0000000000..713900bd27 --- /dev/null +++ b/ui/createTopicModal/index.tsx @@ -0,0 +1,82 @@ +import { Button, Checkbox, Input, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, Textarea } from '@chakra-ui/react'; +import type { PropsWithChildren, ReactNode } from 'react'; +import React, { useCallback, useState } from 'react'; + +import ForumPersonalApi from 'lib/api/ylideApi/ForumPersonalApi'; +import { useYlide } from 'lib/contexts/ylide'; + +interface ActionModalProps extends PropsWithChildren> { + title?: ReactNode; + buttons?: ReactNode; + onClose: () => void; +} + +function ActionModal({ children, title, buttons, onClose }: ActionModalProps) { + return ( + + + + { title != null && { title } } + + { children != null && { children } } + { buttons != null && { buttons } } + + + ); +} + +export interface CreateTopicModalProps { + onClose: () => void; +} + +export function CreateTopicModal({ + onClose, +}: CreateTopicModalProps): JSX.Element { + const { accounts: { admins } } = useYlide(); + const [ topic, setTopic ] = useState(''); + const [ description, setDescription ] = useState(''); + const [ adminOnly, setAdminOnly ] = useState(false); + const createTopic = ForumPersonalApi.useCreateTopic((admins.length && admins[0].backendAuthKey) || ''); + + const handleTopicChange = useCallback((e: React.ChangeEvent) => { + setTopic(e.target.value); + }, []); + + const handleDescriptionChange = useCallback((e: React.ChangeEvent) => { + setDescription(e.target.value); + }, []); + + const handleAdminOnlyChange = useCallback((e: React.ChangeEvent) => { + setAdminOnly(e.target.checked); + }, []); + + const handleCreate = useCallback(async() => { + await createTopic({ + title: topic, + description, + adminOnly, + }); + onClose(); + }, [ onClose, createTopic, topic, description, adminOnly ]); + + const handleClose = useCallback(() => { + onClose(); + }, [ onClose ]); + + return ( + + + + + ) } + onClose={ handleClose } + > + +