From ea6ee89809447e7232da54043dc1ea067e19edfe Mon Sep 17 00:00:00 2001 From: 0xFirekeeper <0xFirekeeper@gmail.com> Date: Sat, 1 Nov 2025 05:57:22 +0700 Subject: [PATCH 1/4] Add Epic Games as new auth provider Introduces Epic Games ('epic') as a supported authentication provider across dashboard, portal, playground, and analytics chart components. Adds the EpicIcon SVG, updates type definitions, test coverage, and icon mapping to support the new provider. --- apps/dashboard/src/@/api/team/ecosystems.ts | 3 ++- .../src/@/icons/brand-icons/EpicIcon.tsx | 18 ++++++++++++++++++ .../client/auth-options-form.client.tsx | 1 + .../InAppWalletUsersChartCard.stories.tsx | 1 + .../components/InAppWalletFormGroup.tsx | 1 + .../src/components/Document/AuthList.tsx | 1 + .../src/react/core/utils/walletIcon.test.ts | 4 ++++ .../src/react/core/utils/walletIcon.ts | 5 +++++ .../react/native/ui/components/WalletImage.tsx | 3 +++ .../react/native/ui/connect/InAppWalletUI.tsx | 2 ++ .../thirdweb/src/react/native/ui/icons/svgs.ts | 5 +++++ .../shared/ConnectWalletSocialOptions.tsx | 1 + .../react/web/wallets/shared/oauthSignIn.ts | 1 + .../src/stories/ConnectEmbed.stories.tsx | 1 + .../in-app/core/authentication/types.ts | 1 + .../wallets/in-app/native/native-connector.ts | 1 + .../wallets/in-app/web/lib/web-connector.ts | 2 ++ packages/thirdweb/src/wallets/types.ts | 1 + 18 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 apps/dashboard/src/@/icons/brand-icons/EpicIcon.tsx diff --git a/apps/dashboard/src/@/api/team/ecosystems.ts b/apps/dashboard/src/@/api/team/ecosystems.ts index 5220e51d1a1..c0aed4fd47e 100644 --- a/apps/dashboard/src/@/api/team/ecosystems.ts +++ b/apps/dashboard/src/@/api/team/ecosystems.ts @@ -21,7 +21,8 @@ export type AuthOption = | "steam" | "apple" | "coinbase" - | "line"; + | "line" + | "epic"; export type Ecosystem = { name: string; diff --git a/apps/dashboard/src/@/icons/brand-icons/EpicIcon.tsx b/apps/dashboard/src/@/icons/brand-icons/EpicIcon.tsx new file mode 100644 index 00000000000..5d9a881dda1 --- /dev/null +++ b/apps/dashboard/src/@/icons/brand-icons/EpicIcon.tsx @@ -0,0 +1,18 @@ +import type { SVGProps } from "react"; + +export const EpicIcon = (props: SVGProps) => { + return ( + + Epic Games + + + ); +}; diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/[slug]/(active)/configuration/components/client/auth-options-form.client.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/[slug]/(active)/configuration/components/client/auth-options-form.client.tsx index 7907f9ce133..7ca148f25c8 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/[slug]/(active)/configuration/components/client/auth-options-form.client.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/[slug]/(active)/configuration/components/client/auth-options-form.client.tsx @@ -58,6 +58,7 @@ const authOptions = [ "apple", "coinbase", "line", + "epic", ] as const satisfies AuthOption[]; type AuthOptionsFormData = { diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/analytics/chart/InAppWalletUsersChartCard.stories.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/analytics/chart/InAppWalletUsersChartCard.stories.tsx index a0ebb56d6e0..0da4d996b3d 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/analytics/chart/InAppWalletUsersChartCard.stories.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/analytics/chart/InAppWalletUsersChartCard.stories.tsx @@ -87,6 +87,7 @@ const authMethodsToPickFrom: InAppWalletAuth[] = [ "line", "x", "tiktok", + "epic", "coinbase", "farcaster", "telegram", diff --git a/apps/playground-web/src/app/wallets/sign-in/components/InAppWalletFormGroup.tsx b/apps/playground-web/src/app/wallets/sign-in/components/InAppWalletFormGroup.tsx index c4bdc1834ed..0876dd2f19f 100644 --- a/apps/playground-web/src/app/wallets/sign-in/components/InAppWalletFormGroup.tsx +++ b/apps/playground-web/src/app/wallets/sign-in/components/InAppWalletFormGroup.tsx @@ -20,6 +20,7 @@ const allInAppWalletLoginMethods: InAppWalletAuth[] = [ "line", "x", "tiktok", + "epic", "facebook", "apple", "coinbase", diff --git a/apps/portal/src/components/Document/AuthList.tsx b/apps/portal/src/components/Document/AuthList.tsx index bed6db4802b..2809d7d37d5 100644 --- a/apps/portal/src/components/Document/AuthList.tsx +++ b/apps/portal/src/components/Document/AuthList.tsx @@ -15,6 +15,7 @@ const authOptions: InAppWalletAuth[] = [ "facebook", "x", "tiktok", + "epic", "discord", "telegram", "twitch", diff --git a/packages/thirdweb/src/react/core/utils/walletIcon.test.ts b/packages/thirdweb/src/react/core/utils/walletIcon.test.ts index 239470dec27..505ad32e044 100644 --- a/packages/thirdweb/src/react/core/utils/walletIcon.test.ts +++ b/packages/thirdweb/src/react/core/utils/walletIcon.test.ts @@ -55,6 +55,10 @@ describe("walletIcon", () => { expect(getSocialIcon("tiktok")).toBe(socialIcons.tiktok); }); + it("should return epic icon", () => { + expect(getSocialIcon("epic")).toBe(socialIcons.epic); + }); + it("should return farcaster icon", () => { expect(getSocialIcon("farcaster")).toBe(socialIcons.farcaster); }); diff --git a/packages/thirdweb/src/react/core/utils/walletIcon.ts b/packages/thirdweb/src/react/core/utils/walletIcon.ts index 9ee3e6ff5b3..9d22288c056 100644 --- a/packages/thirdweb/src/react/core/utils/walletIcon.ts +++ b/packages/thirdweb/src/react/core/utils/walletIcon.ts @@ -31,6 +31,8 @@ const xIcon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIwIiBoZWlnaHQ9IjMyMCIgdmlld0JveD0iMCAwIDMyMCAzMjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIzMjAiIGhlaWdodD0iMzIwIiByeD0iMjQiIGZpbGw9ImJsYWNrIi8+CjxwYXRoIGQ9Ik0xNzcuMzE1IDE0NS4zMzVMMjQ1LjA2OCA2N0gyMjkuMDEzTDE3MC4xODIgMTM1LjAxN0wxMjMuMTk1IDY3SDY5TDE0MC4wNTUgMTY5Ljg1NEw2OSAyNTJIODUuMDU2M0wxNDcuMTgzIDE4MC4xNzJMMTk2LjgwNSAyNTJIMjUxTDE3Ny4zMTEgMTQ1LjMzNUgxNzcuMzE1Wk0xNTUuMzIzIDE3MC43NkwxNDguMTI0IDE2MC41MThMOTAuODQxNyA3OS4wMjJIMTE1LjUwM0wxNjEuNzMxIDE0NC43OTJMMTY4LjkzIDE1NS4wMzRMMjI5LjAyIDI0MC41MjVIMjA0LjM1OUwxNTUuMzIzIDE3MC43NjRWMTcwLjc2WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg=="; const tiktokIconUri = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjAwIDEyMDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPgogIDxwYXRoIGQ9Ik02MzYgMTIwMWMtMjMuMDIgMC00Ni4wNDIgMC02OS42OTctLjQwOC05Ljc5NC0xLjEzNS0xOC45OTYtMS41MTgtMjguMTAxLTIuNjY1LTE2LjQyNC0yLjA2Ny0zMi45Ni0zLjc3NS00OS4xNC03LjEyNi0yMS42OTYtNC40OTQtNDMuMjM2LTkuOTA3LTY0LjU4OS0xNS44NDItMjQuMjYtNi43NDMtNDcuNjQ1LTE2LjAyLTcwLjU3Ny0yNi40OC0yNi4yMjYtMTEuOTYzLTUxLjkxMy0yNC45NjQtNzUuNzk4LTQxLjA5OC0xOC43NDYtMTIuNjYzLTM3LjA1Ny0yNi4wNC01NC44OTktMzkuOTQ4LTEzLjU1LTEwLjU2My0yNi43MjktMjEuNzkxLTM4Ljg2Ni0zMy45My0xNi4xOS0xNi4xOS0zMS42NTgtMzMuMTYyLTQ2LjU4Mi01MC41MzItMTAuOTY1LTEyLjc2Mi0yMS4yMS0yNi4yNjUtMzAuNTk3LTQwLjIzLTExLjM3OS0xNi45MjUtMjIuMTc4LTM0LjMyMS0zMi4wMS01Mi4xODUtMTAuMTM2LTE4LjQyLTE5LjYyOC0zNy4yOTUtMjcuOTE3LTU2LjYwOC0xMC43NDEtMjUuMDI1LTE5LjkzMS01MC43MjQtMjYuMjE0LTc3LjMwNy00LjU5Mi0xOS40MjctOS4yOTgtMzguODYzLTEyLjgxMy01OC40OTktMi42NjYtMTQuODkyLTMuNS0zMC4xMS01LjI3Mi00NS4xNjdDMi44MDQgNjUxLjkyMiAxLjY2NiA2NTAuOTg5IDEgNjUwYzAtLjQ0NCAwLS44ODkuMzk5LTEuODIuMTMzLTMuNzE4LS4xMzMtNi45NS0uMzk5LTEwLjE4IDAtMjQuMzU0IDAtNDguNzA4LjM5OS03My42ODUuMTMzLTMuODUzLS4xMzMtNy4wODQtLjM5OS0xMC4zMTUgMC0uNDQ0IDAtLjg4OS4zOTEtMS43OS43OTUtMS4xMzggMS40ODUtMS43ODkgMS41Ni0yLjUwMy43NC03LjE1NiAxLjI0Ni0xNC4zMzggMi4wOC0yMS40ODIgMS4yMjgtMTAuNSAyLjAyOS0yMS4xMDcgNC4xNjMtMzEuNDMgMy44MS0xOC40MjYgOC4zMDMtMzYuNzE3IDEyLjgyNy01NC45ODYgNy44ODUtMzEuODQgMTkuNDA0LTYyLjQ2NyAzMy4yMTMtOTIuMTExIDE1LjM3NS0zMy4wMDcgMzMuMzUzLTY0LjU4NCA1NC41MjMtOTQuMzg1IDE2LjM2NC0yMy4wMzYgMzQuMTc3LTQ0LjggNTMuMjE3LTY1LjU2NSA5LjczNS0xMC42MTcgMjAuNTg5LTIwLjIxMyAzMS4wMS0zMC4xOTUgMTcuMjMtMTYuNTA2IDM1Ljg4Mi0zMS4yNSA1NS4xNDItNDUuMzMgMjEuODk3LTE2LjAwOSA0NC42NDctMzAuNjc4IDY4LjczLTQzLjAxIDIwLjgyOC0xMC42NjggNDIuMTE4LTIwLjY2NSA2My45LTI5LjE3NyAyMS43NDUtOC40OTggNDQuMTcxLTE1LjQyNiA2Ni42MzYtMjEuODYzIDIzLjkyMS02Ljg1NCA0OC4zNTQtMTEuNzI4IDczLjE5LTE0LjE4IDEzLjgyNC0xLjM2NSAyNy42NTgtMi42NSA0MS40ODItNC4wMjQgMS0uMSAxLjk1OC0uNjM2IDIuOTM2LS45NjkgMjMuMDIgMCA0Ni4wNDIgMCA2OS42OTcuNDA4IDkuNzk3IDEuMTM1IDE5LjAwMyAxLjUxMyAyOC4xMTEgMi42NjYgMTYuMjY0IDIuMDYgMzIuNjM0IDMuNzg5IDQ4LjY1NyA3LjExMyAyMS44NiA0LjUzNiA0My41NzYgOS45MzYgNjUuMSAxNS44ODMgMjQuMjggNi43MSA0Ny42NDEgMTYuMDY5IDcwLjYwNyAyNi40NzQgMjUuOTc2IDExLjc3IDUxLjA4MiAyNS4xMTggNzUuMTUgNDAuMzYgMzIuMDkgMjAuMzI0IDYxLjk2NyA0My42MjYgODkuNTUgNjkuNjk4IDEzLjY5NSAxMi45NDUgMjYuNjIgMjYuNzk2IDM5LjAwNCA0MS4wMTIgMTIuNDkgMTQuMzM5IDI0LjAyNyAyOS41MjMgMzUuNzE1IDQ0LjU0NCAxNi4xNzQgMjAuNzg3IDI5LjczNCA0My4zMjQgNDIuMTc3IDY2LjQ0MiAxOS41ODkgMzYuMzk3IDM1LjU1NCA3NC40MTggNDcuMDc2IDExNC4xNTMgNC43NDEgMTYuMzUyIDguNTM4IDMzLjAxIDEyLjAzOSA0OS42OCAyLjkyNSAxMy45MyA1LjE2NCAyOC4wMzMgNy4wMjQgNDIuMTUgMS44MTUgMTMuNzY4IDIuNzUgMjcuNjUyIDQuMTI0IDQxLjQ4LjEgMS4wMDEuNjM2IDEuOTYuOTY5IDIuOTM3IDAgMjMuMDIgMCA0Ni4wNDItLjQwOCA2OS42OTctMS4xMzUgOS43OTctMS41MTMgMTkuMDAzLTIuNjY2IDI4LjExMS0yLjA2IDE2LjI2NC0zLjgxNyAzMi42MjYtNy4xMDcgNDguNjU5LTQuNDU4IDIxLjcyMS05LjYxMyA0My4zNDctMTUuNjE2IDY0LjY5MS03LjE2MyAyNS40NzItMTYuODc1IDUwLjExLTI4IDc0LjEyNy0xMS45NzggMjUuODU4LTI1LjQ3MyA1MC45MjYtNDAuOTE4IDc0Ljg5M2E1OTguNSA1OTguNSAwIDAgMS02Ny44OSA4Ni42OWMtMTIuOTMzIDEzLjcwNS0yNi43OTIgMjYuNjI0LTQxLjAwOCAzOS4wMDctMTQuMzQgMTIuNDkxLTI5LjUyMyAyNC4wMjgtNDQuNTQ1IDM1LjcxNi0yMC43ODYgMTYuMTc0LTQzLjMyMyAyOS43MzQtNjYuNDQyIDQyLjE3Ny0zNi4zOTcgMTkuNTg5LTc0LjQxOCAzNS41NTQtMTE0LjE1MyA0Ny4wNzYtMTYuMzUyIDQuNzQxLTMzLjAxIDguNTM4LTQ5LjY4IDEyLjAzOS0xMy45MyAyLjkyNS0yOC4wMzQgNS4xNjQtNDIuMTUgNy4wMjUtMTMuNzY4IDEuODE0LTI3LjY1MiAyLjc0OC00MS40OCA0LjEyMy0xLjAwMS4xLTEuOTYuNjM2LTIuOTM3Ljk2OW0xNzkuOTM0LTg1NS45NDhzLS4wMjQuMDg3LjA0LS42NDNjLTEuMjg4LTEuNjctMi42My0zLjMtMy44NTgtNS4wMTQtOS42ODgtMTMuNTE5LTE3Ljk2NS0yNy44Mi0yNC4xMTQtNDMuMzE3LTYuMzMzLTE1Ljk2LTEwLjY0OC0zMi4zOTctMTIuMDA0LTQ5LjU1Ni0uNTA0LTYuMzY3LTEtMTIuNzMzLTEuNTItMTkuMzczLTExLjc1IDAtMjMuNTIgMC0zNS40MzYtLjE4NSAwIDAtLjE4Ni0uMTQ2LS40NjMtLjg4NmwtMy40OTItMzIuODU2SDYwMHY2LjA4NWMwIDE3Ny4wNzktLjAxNyAzNTQuMTU3LjAyOSA1MzEuMjM2LjAwNCAxNS42MDItMy44OTMgMzAuMzE0LTEwLjQ3NiA0NC4xODQtMTEuNjY4IDI0LjU4LTI5LjkxIDQyLjgwNS01NC43NTMgNTQuMzMzLTIzLjU4NiAxMC45NDUtNDcuOTU4IDEzLjY1NC03My4xMzIgNy4xMTMtOC4wNC0yLjA4OS0xNS43ODgtNS4zMDYtMjQuMjY1LTguMjUzLS44LS42OTUtMS42LTEuMzktMi40MjItMi43OS0yNi4xNy00MC43MDctMjguNTk2LTgzLjExMS0yLjI0OC0xMjMuNDc3IDMwLjA1OS00Ni4wNTEgNzQuMjQ5LTYxLjIwOCAxMjcuODktNDcuODc4VjUxNS4zMDdjLTEzLjA1LS4zOTMtMjUuNzQyLS43NzYtMzguNTgtMS4zNDMgMCAwLS4xODctLjE0NS0uMDU4LTEuMDVWNDgxLjQ5Yy0xMS4zODYtLjUwNC0yMi41My0xLjYyMy0zMy42MzYtMS4zMzMtMTQuNDUuMzc2LTI5LjAzOC44NDUtNDMuMjY0IDMuMTQ3LTE3LjE4NiAyLjc4MS0zMy44ODcgNy44NzgtNTAuMTQyIDE0LjU0LTI3LjY5NCAxMS4zNS01Mi42MzkgMjYuODM3LTc0LjQzNCA0Ny4yNzctNy40ODUgNy4wMi0xNC40NzUgMTQuNjA0LTIxLjMwOSAyMi4yNzItMTEuMDY0IDEyLjQxNS0yMC4yMzcgMjYuMTg3LTI4LjI0MiA0MC43NjQtMTEuMzYgMjAuNjg1LTE5Ljk3IDQyLjQ4MS0yNC42NzggNjUuNTU1LTIuNzY1IDEzLjU0OC0zLjgyNyAyNy40NjktNS4xNzMgNDEuMjY5LS42MjcgNi40MzItLjQ0IDEyLjk5Ny0uMDM1IDE5LjQ2NS43NiAxMi4xMTUgMS4wMjkgMjQuMzY3IDMuMTQyIDM2LjI3IDQuODYyIDI3LjM3OCAxMy45ODMgNTMuMzc0IDI3LjggNzcuNjU4IDE0LjY0IDI1LjczIDMzLjAyNCA0OC4zNDMgNTUuNTI1IDY3LjU2MyAzLjkwMSAzLjMzMiA4LjMzMSA2LjA0NiAxMi40ODkgOS4wMzQgMCAwLS4wMTMtLjAyNy4wNC41Ni41OS40OSAxLjE3OC45ODEgMi4wNTggMi4xMTEgMi4yOSAxLjg0MiA0LjU4MSAzLjY4MyA3LjA5MiA2LjA4LjY0Mi40IDEuMjg0Ljc5OCAxLjg0MyAxLjIzIDAgMCAuMDEyLS4wODguMDcuNjAxIDEyLjc3NCAxMC41MjEgMjUuMDEgMjEuNzk0IDM4LjQ0MyAzMS4zOSAyMS4wOCAxNS4wNTYgNDQuNjMgMjUuNDM1IDY5LjUzIDMyLjYxIDE4LjQzIDUuMzEyIDM3LjMxMiA4LjM2MyA1Ni40MTUgOS4zMiAxOC40NzEuOTI3IDM2Ljg2Ny0uNTY4IDU1LjE0NS0zLjc5NSAyNy4wMS00Ljc3IDUyLjQ0OS0xMy43MDcgNzYuNDA0LTI3LjA1OSAyNi4xMDMtMTQuNTQ4IDQ4LjgyNS0zMy4xMjYgNjguMjk3LTU1LjgwNyAxMi44MjktMTQuOTQ0IDI0LjIxLTMwLjkxMyAzMi41MjUtNDguNzAyIDYuNTgtMTQuMDggMTIuMDEyLTI4Ljc2MiAxNy4wMy00My40OTEgNi45MDctMjAuMjY1IDkuODA1LTQxLjQ4IDkuOTAzLTYyLjczMS40MTctOTAuMTQzLjE3Ny0xODAuMjg4LjE3Ny0yNzAuNDMzdi02Ljc0NGM1Ni42NSAzOC45MiAxMTguMDM4IDU4Ljk2NiAxODUuNzQzIDU4Ljk4NXYtMTM0LjUyYy04LjU4Ni0uODc2LTE2LjkwNC0xLjY3Ni0yNS4yMDktMi41OTUtNC41MjQtLjUtOS4wMjUtMS4yMDMtMTQuMDgtMi4wMjUtLjIwNi0uMzE3LS40MTMtLjYzNS0uMjI2LTEuNzE5di0yNy43NDVjLTcuODE4LS44Mi0xNS43ODgtMS42Ni0yMy43NTktMi40ODktMTMuOTE4LTEuNDQ2LTI3LjQ0LTQuNzU4LTQwLjMwNi0xMC4xMDUtMTEuMDE3LTQuNTc4LTIxLjYwNS0xMC4xOS0zMi40NjYtMTUuNDc0IDAgMC0uMjM0LS4yLS42NjQtLjgyM2EyMSAyMSAwIDAgMS0yLjY4LS43MzJjLTEuMTczLTEuMjg4LTIuMzQ2LTIuNTc3LTMuNTMtNC40ODctLjY1OS0uNDM1LTEuMzE4LS44Ny0xLjg4OS0xLjMzIiBzdHlsZT0iLS1kYXJrcmVhZGVyLWlubGluZS1maWxsOnZhcigtLWRhcmtyZWFkZXItYmFja2dyb3VuZC0wMDAwMDAsICMwMDAwMDApOy0tZGFya3JlYWRlci1pbmxpbmUtc3Ryb2tlOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO29wYWNpdHk6MSIgZGF0YS1pbmRleD0iMCIvPgogIDxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0xIDU1NC40NTRjLjI2NiAyLjc3Ny41MzIgNi4wMDguMzk5IDkuMzkyQzEgNTYwLjk3IDEgNTU3Ljk0IDEgNTU0LjQ1NCIgc3R5bGU9Ii0tZGFya3JlYWRlci1pbmxpbmUtZmlsbDp2YXIoLS1kYXJrcmVhZGVyLXRleHQtZmZmZmZmLCAjZThlNmUzKTstLWRhcmtyZWFkZXItaW5saW5lLXN0cm9rZTpub25lO3Zpc2liaWxpdHk6dmlzaWJsZSIgZGF0YS1pbmRleD0iNSIvPgogIDxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0xIDYzOC40NTRjLjI2NiAyLjc3Ny41MzIgNi4wMDguMzk5IDkuMzkyQzEgNjQ0Ljk3IDEgNjQxLjk0IDEgNjM4LjQ1NCIgc3R5bGU9Ii0tZGFya3JlYWRlci1pbmxpbmUtZmlsbDp2YXIoLS1kYXJrcmVhZGVyLXRleHQtZmZmZmZmLCAjZThlNmUzKTstLWRhcmtyZWFkZXItaW5saW5lLXN0cm9rZTpub25lO3Zpc2liaWxpdHk6dmlzaWJsZSIgZGF0YS1pbmRleD0iNiIvPgogIDxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik04MjQuNDYzIDM1Mi4yMjJzLjIzNC4yLjA1NC42MjljNC44OTggNS4zNjIgOS44NTcgMTAuNDI1IDE1LjA3NSAxNS4yMDYgMTUuMjUgMTMuOTcxIDMyLjY5NCAyNC41NTYgNTEuOTIzIDMxLjk2NCA5LjUxNCAzLjY2NiAxOS41MyA2LjAyOSAyOS4zMTkgOC45OC4yMDcuMzE5LjQxNC42MzcuODkzIDEuNTE3LjI3MiAzNS4xMzUuMjcyIDY5LjcwOC4yNzIgMTA0LjU3OS0zMy44NjYtLjA1Ni02Ni4yMDMtNS4wODctOTcuNzc1LTE1LjEyNC0zMS41MTYtMTAuMDItNjAuNzIyLTI0Ljc0NS04OC4yMjQtNDMuOTcyIDAgMS41NDYuMDAzIDIuMzY1IDAgMy4xODQtLjMzMyA5NC4yMzUtLjU3NiAxODguNDctMS4xMzEgMjgyLjcwMy0uMDYgMTAuMTIxLTEuMjA0IDIwLjM3My0zLjEyOCAzMC4zMTctMy41NTMgMTguMzU1LTkuMDQ5IDM2LjE1LTE2LjQ2IDUzLjQ0Mi0xMS4xMzkgMjUuOTkxLTI2LjI5IDQ5LjI4OS00NS41MTMgNjkuODAxLTkuMzMgOS45NTYtMTkuNTczIDE5LjMxLTMwLjUxOCAyNy40MzQtMTIuODk5IDkuNTc1LTI2LjU4OCAxOC4yOS00MC42OTQgMjUuOTg0YTE5MC4zIDE5MC4zIDAgMCAxLTU1LjMxIDE5LjgzOGMtMTUuODY4IDMuMDQxLTMyLjA0OCA0LjY4LTQ4LjE2NCA2LjExOC03LjgzNy42OTgtMTUuODk5LS4wMDgtMjMuNzYtLjkyNi0xMy45MzQtMS42MjctMjcuOTY3LTMuMTAyLTQxLjY0NC02LjA4NS0yMi42OS00Ljk0OC00NC4wNzEtMTMuNjQyLTY0LjExMi0yNS41My00LjY1OS0yLjc2My05LjY1My00Ljk2LTE0LjQ5My03LjQxOCAwIDAtLjAxMi4wODcuMjE0LS4yNjctLjYxMy0uNzEyLTEuNDUtMS4wNzEtMi4yOS0xLjQzLTIuMjktMS44NDItNC41OC0zLjY4My02Ljk2NS02LjIxLS43MzQtMS4xMjktMS4zNzYtMS41Ny0yLjAxNy0yLjAxMyAwIDAgLjAxMy4wMjcuMjAzLS4zMDYtLjk1NS0xLjkzOS0xLjk4Mi0zLjY0NC0zLjI2Mi01LjEzMi0xNC44NTEtMTcuMjc1LTI2LjU3Ni0zNi40NjgtMzUuOTQ0LTU3LjIyLTExLjc2NS0yNi4wNjYtMTkuMDc1LTUzLjM5NS0yMC42OC04MS43ODgtMS4wNS0xOC41OTQtLjAwOS0zNy40NzggMi4wMS01Ni4wMjQgMS45MzgtMTcuODE4IDcuMTE4LTM1LjEzMSAxMy42LTUxLjk4NSAxMS4yMDUtMjkuMTI2IDI3LjI3Ni01NS4yODUgNDguNDQtNzguMDY0IDEwLjA4NC0xMC44NTQgMjEuMzI1LTIwLjgxMiAzMi45NjgtMzAuMDAzIDE5LjUwNy0xNS4zOTkgNDEuMjMzLTI3LjA3MiA2NC42OTUtMzUuNTU0IDI1LjgyOC05LjMzNyA1Mi40MDMtMTQuMzAyIDc5LjgxMS0xNS4wNDggMCAwIC4xODYuMTQ1LjE3OS42OS0uMDA3IDM1LjQ1OS0uMDA3IDcwLjM3NC0uMDA3IDEwNS4yMjctOS4xNzQtMS42NDMtMTcuNzQ2LTMuODQ2LTI2LjQ0Mi00LjU4LTEzLjY3Ni0xLjE1NC0yNy4xNy43MjMtNDAuMzIgNC44NTUtMjcuODg4IDguNzY0LTQ5LjQwMSAyNS44My02NC4xMDYgNTAuODgtMTIuNzg5IDIxLjc4Ni0xNy42MzcgNDUuNDY5LTE0LjI3NyA3MC44MTUgMi4wNyAxNS42MTggNy4wMDggMzAuMDc2IDE1LjE4OSA0My4zOTQgMTAuNjYgMTcuMzUzIDI0Ljc1IDMxLjIzNiA0Mi45MyA0MC43MzQuOC42OTYgMS42IDEuMzkxIDIuNzEyIDIuNTU0IDcuNDU1IDEwLjUyMiAxNi4zMzYgMTguODE3IDI2LjUzNSAyNS42MzcgMjUuNDA2IDE2Ljk4OSA1My4zMjIgMjMuNTA5IDgzLjM5NiAxNy43OTMgMzAuNDQtNS43ODUgNTQuNDk3LTIyLjE4NyA3Mi4xOTMtNDcuNTE2IDExLjI3NS0xNi4xMzkgMTguODUxLTM0LjMyOCAxOC45MzgtNTMuOTgyLjcyOC0xNjQuMTg0Ljg5My0zMjguMzcgMS4yMi00OTIuNTU2LjAzLTE1LjE1OC4wMDQtMzAuMzE3LjAwNC00NS40NzZWMjI3YzIuNSAwIDQuNDU5LjAwMyA2LjQxNyAwbDkyLjQ0LS4xODJzLjE4NS4xNDYuMTc4LjYzOGMtLjAxMS45OS0uMTE4IDEuNTE1LS4wMDYgMS45ODYgNC41MjMgMTkuMDI3IDEwLjY0MiAzNy4zOCAyMC4zMzQgNTQuNTY3IDExLjg2OCAyMS4wNDggMjcuMzMgMzguOTA3IDQ1LjY3NiA1NC4zODUgMy4yMjUgMi43MiA3LjIyNyA0LjUyIDEwLjg3IDYuNzQ1IDAgMCAuMDI1LS4wODctLjIyOC4yMzYuNTQ5Ljc1OCAxLjM1MSAxLjE5MyAyLjE1MyAxLjYyOGEyMTMgMjEzIDAgMCAwIDQuMDUgNC4zNTdjMS4yMTUuNjE1IDEuODk3LjczOSAyLjU3OS44NjIiIHN0eWxlPSItLWRhcmtyZWFkZXItaW5saW5lLWZpbGw6dmFyKC0tZGFya3JlYWRlci1iYWNrZ3JvdW5kLWZmZmZmZiwgIzE4MWExYik7LS1kYXJrcmVhZGVyLWlubGluZS1zdHJva2U6bm9uZTtvcGFjaXR5OjEiIGRhdGEtaW5kZXg9IjciLz4KICA8cGF0aCBmaWxsPSIjRkUyQzU1IiBkPSJNMzUxLjEwMiA5MzUuMjA3YzQuODEgMi4xMTMgOS44MDUgNC4zMSAxNC40NjQgNy4wNzQgMjAuMDQgMTEuODg4IDQxLjQyMyAyMC41ODIgNjQuMTEyIDI1LjUzIDEzLjY3NyAyLjk4MyAyNy43MSA0LjQ1OCA0MS42NDUgNi4wODUgNy44Ni45MTggMTUuOTIyIDEuNjI0IDIzLjc1OS45MjYgMTYuMTE2LTEuNDM3IDMyLjI5Ni0zLjA3NyA0OC4xNjQtNi4xMThhMTkwLjMgMTkwLjMgMCAwIDAgNTUuMzEtMTkuODM4YzE0LjEwNi03LjY5NSAyNy43OTUtMTYuNDA5IDQwLjY5NC0yNS45ODQgMTAuOTQ1LTguMTI1IDIxLjE4Ny0xNy40NzggMzAuNTE4LTI3LjQzNCAxOS4yMjMtMjAuNTEyIDM0LjM3NC00My44MSA0NS41MTMtNjkuOCA3LjQxMS0xNy4yOTQgMTIuOTA3LTM1LjA4OCAxNi40Ni01My40NDMgMS45MjQtOS45NDQgMy4wNjgtMjAuMTk2IDMuMTI4LTMwLjMxNy41NTUtOTQuMjMzLjc5OC0xODguNDY4IDEuMTMtMjgyLjcwMy4wMDQtLjgyLjAwMS0xLjYzOC4wMDEtMy4xODQgMjcuNTAyIDE5LjIyNyA1Ni43MDggMzMuOTUzIDg4LjIyNCA0My45NzIgMzEuNTcyIDEwLjAzNyA2My45MSAxNS4wNjggOTcuNzc1IDE1LjEyNGwtLjAwMS0xMDQuNDc0YzQuNTEuMTU0IDkuMDEyLjg1NyAxMy41MzYgMS4zNTcgOC4zMDUuOTE5IDE2LjYyMyAxLjcxOSAyNS4yMDkgMi41OTZ2MTM0LjUxOWMtNjcuNzA1LS4wMi0xMjkuMDkzLTIwLjA2Ni0xODUuNzQzLTU4Ljk4NXY2Ljc0NGMwIDkwLjE0NS4yNCAxODAuMjktLjE3NyAyNzAuNDMzLS4wOTggMjEuMjUxLTIuOTk2IDQyLjQ2Ni05LjkwMiA2Mi43My01LjAyIDE0LjczLTEwLjQ1IDI5LjQxMi0xNy4wMzEgNDMuNDkyLTguMzE0IDE3Ljc4OS0xOS42OTYgMzMuNzU4LTMyLjUyNSA0OC43MDItMTkuNDcyIDIyLjY4LTQyLjE5NCA0MS4yNTktNjguMjk3IDU1LjgwNy0yMy45NTUgMTMuMzUyLTQ5LjM5NSAyMi4yOS03Ni40MDQgMjcuMDU5LTE4LjI3OCAzLjIyNy0zNi42NzQgNC43MjItNTUuMTQ1IDMuNzk2LTE5LjEwMy0uOTU4LTM3Ljk4NC00LjAwOS01Ni40MTUtOS4zMi0yNC45LTcuMTc2LTQ4LjQ1LTE3LjU1NS02OS41My0zMi42MTEtMTMuNDM0LTkuNTk2LTI1LjY3LTIwLjg2OS0zOC40NzItMzEuNzM1IiBzdHlsZT0iLS1kYXJrcmVhZGVyLWlubGluZS1maWxsOnZhcigtLWRhcmtyZWFkZXItYmFja2dyb3VuZC1mZTJjNTUsICNiMTAxMjMpOy0tZGFya3JlYWRlci1pbmxpbmUtc3Ryb2tlOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO29wYWNpdHk6MSIgZGF0YS1pbmRleD0iOCIvPgogIDxwYXRoIGZpbGw9IiMyNUY0RUUiIGQ9Ik03MzguNzE4IDIyNi40NDhjLTMwLjY3NS40MzEtNjEuNDg4LjQ5Mi05Mi4zMDEuNTUxLTEuOTU4LjAwNC0zLjkxNi4wMDEtNi40MTcuMDAxdjUuMjg4YzAgMTUuMTU5LjAyNiAzMC4zMTgtLjAwNCA0NS40NzYtLjMyNyAxNjQuMTg2LS40OTIgMzI4LjM3Mi0xLjIyIDQ5Mi41NTYtLjA4NyAxOS42NTQtNy42NjMgMzcuODQzLTE4LjkzOCA1My45ODItMTcuNjk2IDI1LjMyOS00MS43NTMgNDEuNzMtNzIuMTkzIDQ3LjUxNi0zMC4wNzQgNS43MTYtNTcuOTktLjgwNC04My4zOTYtMTcuNzkzLTEwLjE5OS02LjgyLTE5LjA4LTE1LjExNS0yNi4yMzctMjUuNTE0IDcuODY4IDIuMzU2IDE1LjYxNiA1LjU3MyAyMy42NTYgNy42NjIgMjUuMTc0IDYuNTQxIDQ5LjU0NiAzLjgzMiA3My4xMzItNy4xMTMgMjQuODQzLTExLjUyOCA0My4wODUtMjkuNzUzIDU0Ljc1My01NC4zMzMgNi41ODMtMTMuODcgMTAuNDgtMjguNTgyIDEwLjQ3Ni00NC4xODQtLjA0Ni0xNzcuMDc5LS4wMjktMzU0LjE1Ny0uMDI5LTUzMS4yMzZ2LTYuMDg1aDEzNS4wODdjMS4xODIgMTEuMTE1IDIuMzM3IDIxLjk4NSAzLjYzIDMzLjIyNiIgc3R5bGU9Ii0tZGFya3JlYWRlci1pbmxpbmUtZmlsbDp2YXIoLS1kYXJrcmVhZGVyLWJhY2tncm91bmQtMjVmNGVlLCAjMDliM2IwKTstLWRhcmtyZWFkZXItaW5saW5lLXN0cm9rZTpub25lO29wYWNpdHk6MSIgZGF0YS1pbmRleD0iOSIvPgogIDxwYXRoIGZpbGw9IiMyNUY0RUUiIGQ9Ik01MjEuOTIgNTEzLjM2N2MtMjcuNDcyIDEuMTk4LTU0LjA0NyA2LjE2My03OS44NzUgMTUuNS0yMy40NjIgOC40ODItNDUuMTg4IDIwLjE1NS02NC42OTUgMzUuNTU0LTExLjY0MyA5LjE5MS0yMi44ODQgMTkuMTQ5LTMyLjk2OSAzMC4wMDMtMjEuMTYzIDIyLjc3OS0zNy4yMzQgNDguOTM4LTQ4LjQzOCA3OC4wNjQtNi40ODMgMTYuODU0LTExLjY2MyAzNC4xNjctMTMuNjAyIDUxLjk4NS0yLjAxOCAxOC41NDYtMy4wNTkgMzcuNDMtMi4wMDggNTYuMDI0IDEuNjA0IDI4LjM5MyA4LjkxNCA1NS43MjIgMjAuNjggODEuNzg4IDkuMzY3IDIwLjc1MiAyMS4wOTIgMzkuOTQ1IDM1Ljk0MyA1Ny4yMiAxLjI4IDEuNDg4IDIuMzA3IDMuMTkzIDMuMjc2IDUuMTM3LTQuMzYyLTIuNjYtOC43OTItNS4zNzQtMTIuNjkzLTguNzA2LTIyLjUwMS0xOS4yMi00MC44ODUtNDEuODMyLTU1LjUyNS02Ny41NjMtMTMuODE3LTI0LjI4NC0yMi45MzgtNTAuMjgtMjcuOC03Ny42NTgtMi4xMTMtMTEuOTAzLTIuMzgyLTI0LjE1NS0zLjE0Mi0zNi4yNy0uNDA2LTYuNDY4LS41OTItMTMuMDMzLjAzNS0xOS40NjUgMS4zNDYtMTMuOCAyLjQwOC0yNy43MjEgNS4xNzMtNDEuMjY5IDQuNzA5LTIzLjA3NCAxMy4zMTktNDQuODcgMjQuNjc4LTY1LjU1NSA4LjAwNS0xNC41NzcgMTcuMTc4LTI4LjM1IDI4LjI0Mi00MC43NjQgNi44MzQtNy42NjggMTMuODI0LTE1LjI1MyAyMS4zMDktMjIuMjcyIDIxLjc5NS0yMC40NCA0Ni43NC0zNS45MjcgNzQuNDM0LTQ3LjI3NyAxNi4yNTUtNi42NjIgMzIuOTU2LTExLjc1OSA1MC4xNDItMTQuNTQgMTQuMjI2LTIuMzAyIDI4LjgxMy0yLjc3IDQzLjI2NC0zLjE0NyAxMS4xMDctLjI5IDIyLjI1LjgyOSAzMy42MzYgMS4zMzMgMCAxMS4xNDUgMCAyMS4yODUtLjA2NCAzMS44NzgiIHN0eWxlPSItLWRhcmtyZWFkZXItaW5saW5lLWZpbGw6dmFyKC0tZGFya3JlYWRlci1iYWNrZ3JvdW5kLTI1ZjRlZSwgIzA5YjNiMCk7LS1kYXJrcmVhZGVyLWlubGluZS1zdHJva2U6dmFyKC0tZGFya3JlYWRlci10ZXh0LTBkOTlmZiwgIzIzYTNmZik7b3BhY2l0eToxIiBkYXRhLWluZGV4PSIxMCIvPgogIDxwYXRoIGZpbGw9IiNGRTJDNTUiIGQ9Ik00MzQuOTkyIDgyNS40ODJjLTE4LjE3LTkuMTQ2LTMyLjI2LTIzLjAyOS00Mi45Mi00MC4zODItOC4xOC0xMy4zMTgtMTMuMTItMjcuNzc2LTE1LjE5LTQzLjM5NC0zLjM1OS0yNS4zNDYgMS40OS00OS4wMjkgMTQuMjc4LTcwLjgxNSAxNC43MDUtMjUuMDUgMzYuMjE4LTQyLjExNiA2NC4xMDYtNTAuODggMTMuMTUtNC4xMzIgMjYuNjQ0LTYuMDA5IDQwLjMyLTQuODU1IDguNjk2LjczNCAxNy4yNjggMi45MzcgMjYuNDQyIDQuNTggMC0zNC44NTMgMC02OS43NjguMDgtMTA1LjEzNSAxMi43NzMtLjA3IDI1LjQ2Ni4zMTMgMzguNTE0LjcwNnYxMzguNDY4Yy01My42NC0xMy4zMy05Ny44MyAxLjgyNy0xMjcuODkgNDcuODc4LTI2LjM0NyA0MC4zNjYtMjMuOTIxIDgyLjc3IDIuMjYgMTIzLjgyOSIgc3R5bGU9Ii0tZGFya3JlYWRlci1pbmxpbmUtZmlsbDp2YXIoLS1kYXJrcmVhZGVyLWJhY2tncm91bmQtZmUyYzU1LCAjYjEwMTIzKTstLWRhcmtyZWFkZXItaW5saW5lLXN0cm9rZTpub25lO29wYWNpdHk6MSIgZGF0YS1pbmRleD0iMTEiLz4KICA8cGF0aCBmaWxsPSIjRkUyQzU1IiBkPSJNODE1Ljk0MiAzNDQuNzc0Yy0zLjY3Ni0xLjg2LTcuNjc4LTMuNjYtMTAuOTAzLTYuMzgtMTguMzQ1LTE1LjQ3OC0zMy44MDgtMzMuMzM3LTQ1LjY3Ni01NC4zODUtOS42OTItMTcuMTg3LTE1LjgxMS0zNS41NC0yMC4zMzQtNTQuNTY3LS4xMTItLjQ3MS0uMDA1LS45OTUuMDgtMS44OTQgMTEuODQ5LS4zOTkgMjMuNjE4LS4zOTkgMzUuMzY5LS4zOTkuNTIgNi42NCAxLjAxNiAxMy4wMDYgMS41MiAxOS4zNzMgMS4zNTYgMTcuMTYgNS42NyAzMy41OTUgMTIuMDA0IDQ5LjU1NiA2LjE1IDE1LjQ5OCAxNC40MjYgMjkuNzk4IDI0LjExNCA0My4zMTcgMS4yMjcgMS43MTMgMi41NyAzLjM0NCAzLjgyNiA1LjM3OSIgc3R5bGU9Ii0tZGFya3JlYWRlci1pbmxpbmUtZmlsbDp2YXIoLS1kYXJrcmVhZGVyLWJhY2tncm91bmQtZmUyYzU1LCAjYjEwMTIzKTstLWRhcmtyZWFkZXItaW5saW5lLXN0cm9rZTpub25lIiBkYXRhLWluZGV4PSIxMiIvPgogIDxwYXRoIGZpbGw9IiMyNUY0RUUiIGQ9Ik05MjEuMDMgNDA4LjYxOWMtOS45ODUtMi41Ny0yMC00LjkzMi0yOS41MTUtOC41OTgtMTkuMjMtNy40MDgtMzYuNjczLTE3Ljk5My01MS45MjMtMzEuOTY0LTUuMjE4LTQuNzgtMTAuMTc3LTkuODQ0LTE1LjAzMy0xNS4xNDEgMTEgNC43OTIgMjEuNTg3IDEwLjQwMyAzMi42MDQgMTQuOTgxIDEyLjg2NyA1LjM0NyAyNi4zODggOC42NiA0MC4zMDYgMTAuMTA1IDcuOTcxLjgyOCAxNS45NCAxLjY3IDIzLjc1OSAyLjQ5IDAgOS4wODYgMCAxOC40MTUtLjE5NyAyOC4xMjciIHN0eWxlPSItLWRhcmtyZWFkZXItaW5saW5lLWZpbGw6dmFyKC0tZGFya3JlYWRlci10ZXh0LTI1ZjRlZSwgIzM2ZjVlZik7LS1kYXJrcmVhZGVyLWlubGluZS1zdHJva2U6dmFyKC0tZGFya3JlYWRlci10ZXh0LTBkOTlmZiwgIzIzYTNmZik7b3BhY2l0eToxIiBkYXRhLWluZGV4PSIxMyIvPgogIDxwYXRoIGZpbGw9IiNGRTJDNTUiIGQ9Ik04MTcuODI5IDM0Ni42OTJhMy41IDMuNSAwIDAgMS0yLjE5Mi0xLjMwNWMuODY4LjEyNCAxLjUyNy41NTkgMi4xOTIgMS4zMDUiIHN0eWxlPSItLWRhcmtyZWFkZXItaW5saW5lLWZpbGw6dmFyKC0tZGFya3JlYWRlci10ZXh0LWZlMmM1NSwgI2ZlMzk1Zik7LS1kYXJrcmVhZGVyLWlubGluZS1zdHJva2U6bm9uZSIgZGF0YS1pbmRleD0iMTQiLz4KICA8cGF0aCBmaWxsPSIjMjVGNEVFIiBkPSJNMzQwLjA0MiA5MjUuMjM3Yy42MTQuMTQ4IDEuMjU2LjU5IDEuODQ1IDEuMzk5LS42NC0uMTI1LTEuMjMtLjYxNS0xLjg0NS0xLjQiIHN0eWxlPSItLWRhcmtyZWFkZXItaW5saW5lLWZpbGw6dmFyKC0tZGFya3JlYWRlci10ZXh0LTI1ZjRlZSwgIzM2ZjVlZik7LS1kYXJrcmVhZGVyLWlubGluZS1zdHJva2U6bm9uZTt2aXNpYmlsaXR5OnZpc2libGUiIGRhdGEtaW5kZXg9IjE1Ii8+CiAgPHBhdGggZmlsbD0iI0ZFMkM1NSIgZD0iTTM0OS4xMDggOTMzLjQ0M2EzLjY2IDMuNjYgMCAwIDEgMi4yMiAxLjEzOGMtLjgyNi0uMDYyLTEuNDY4LS40Ni0yLjIyLTEuMTM4IiBzdHlsZT0iLS1kYXJrcmVhZGVyLWlubGluZS1maWxsOnZhcigtLWRhcmtyZWFkZXItdGV4dC1mZTJjNTUsICNmZTM5NWYpOy0tZGFya3JlYWRlci1pbmxpbmUtc3Ryb2tlOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlIiBkYXRhLWluZGV4PSIxNiIvPgogIDxwYXRoIGZpbGw9IiMyNUY0RUUiIGQ9Ik04MjQuMjQ4IDM1MS45MTFjLS40NjcuMTg4LTEuMTUuMDY0LTIuMDQtLjQwMi40Ny0uMTk4IDEuMTQ3LS4wNTMgMi4wNC40MDIiIHN0eWxlPSItLWRhcmtyZWFkZXItaW5saW5lLWZpbGw6dmFyKC0tZGFya3JlYWRlci10ZXh0LTI1ZjRlZSwgIzM2ZjVlZik7LS1kYXJrcmVhZGVyLWlubGluZS1zdHJva2U6bm9uZSIgZGF0YS1pbmRleD0iMTciLz4KPC9zdmc+Cg=="; +const epicIconUri = + "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IS0tIFVwbG9hZGVkIHRvOiBTVkcgUmVwbywgd3d3LnN2Z3JlcG8uY29tLCBHZW5lcmF0b3I6IFNWRyBSZXBvIE1peGVyIFRvb2xzIC0tPgo8c3ZnIHdpZHRoPSI4MDBweCIgaGVpZ2h0PSI4MDBweCIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgPGNpcmNsZSBjeD0iNTEyIiBjeT0iNTEyIiByPSI1MTIiIHN0eWxlPSJmaWxsOiMzMTMxMzEiLz4KICAgPHBhdGggZD0iTTMzMS40IDI3NmMtMjkuMyAwLTQwLjEgMTAuOC00MC4xIDQwLjF2MzUzLjRjMCAzLjMuMSA2LjQuNCA5LjIuNyA2LjQuOCAxMi43IDYuOCAxOS43LjYuOCA2LjYgNS4yIDYuNiA1LjIgMy4yIDEuNiA1LjUgMi43IDkuMiA0LjNsMTc3LjggNzQuNWM5LjIgNC4yIDEzLjEgNS45IDE5LjggNS43aC4xYzYuOC4yIDEwLjYtMS41IDE5LjgtNS43bDE3Ny44LTc0LjVjMy43LTEuNSA1LjktMi42IDkuMi00LjMgMCAwIDYuMS00LjUgNi42LTUuMiA2LTcgNi0xMy4yIDYuOC0xOS43LjMtMi44LjQtNS45LjQtOS4yVjMxNmMwLTI5LjMtMTAuOC00MC00MC4xLTQwSDMzMS40em0yODUgNjYuM2gxNC41YzI0LjIgMCAzNiAxMS44IDM2IDM2LjJ2NDAuMWgtMjkuM3YtMzguNWMwLTcuOC0zLjYtMTEuNS0xMS4yLTExLjVoLTVjLTcuOCAwLTExLjUgMy42LTExLjUgMTEuNXYxMjRjMCA3LjggMy42IDExLjQgMTEuNSAxMS40aDUuNWM3LjUgMCAxMS4xLTMuNiAxMS4xLTExLjR2LTQ0LjRoMjkuNHY0NS43YzAgMjQuNC0xMiAzNi40LTM2LjMgMzYuNGgtMTQuOGMtMjQuMyAwLTM2LjMtMTIuMS0zNi4zLTM2LjRWMzc4LjhjLjEtMjQuNCAxMi4xLTM2LjUgMzYuNC0zNi41em0tMjYwIDEuNmg2Ni40djI3LjJoLTM2LjZ2NTUuNmgzNS4ydjI3LjJoLTM1LjJ2NTkuMmgzNy4xdjI3LjJoLTY2LjlWMzQzLjl6bTgxLjQgMGg0Ni45YzI0LjMgMCAzNi4zIDEyLjEgMzYuMyAzNi41djUyLjJjMCAyNC40LTEyIDM2LjUtMzYuMyAzNi41aC0xNi45djcxLjJoLTI5LjlsLS4xLTE5Ni40em05Ni42IDBoMjkuOHYxOTYuNGgtMjkuOFYzNDMuOXptLTY2LjggMjYuNXY3Mi4zSDQ4MGM3LjUgMCAxMS4xLTMuNiAxMS4xLTExLjV2LTQ5LjNjMC03LjktMy42LTExLjUtMTEuMS0xMS41aC0xMi40ek0zODUuNCA1ODdoNC40bDEgLjFoMS42bC44LjNoLjhsLjguMi44LjIuNy4xLjcuMi43LjEuOC4zLjYuMS42LjMuOC4yLjYuMy44LjMuNy4zLjYuNC44LjMuNi40LjguNC42LjQuNy40LjYuNS42LjQuNi41LjcuNS42LjYuNi41LS41LjYtLjYuNi0uNS42LS42LjYtLjUuNi0uNS42LS42LjYtLjUuNi0uNS42LS42LjYtLjUuNi0uNi42LS41LjYtLjUuNi0uNi42LS41LjctLjYuNi0uNS42LS42LS41LS42LS42LS42LS40LS43LS41LS42LS40LS43LS40LS42LS40LS43LS40LS42LS4zLS42LS4zLS42LS4yLS43LS4zLS44LS4yLS42LS4yLS44LS4yLS44LS4yLS44LS4xaC0uOWwtMS0uMmgtMS42bC0uOC4xaC0uOGwtLjguMi0uNy4yLS43LjItLjguMi0uNi4zLS44LjMtLjYuNC0uNi40LS42LjQtLjYuNS0uNi41LS42LjUtLjUuNi0uNi42LS40LjYtLjQuNi0uNS42LS4zLjctLjQuNi0uNC43LS4yLjctLjMuNy0uMi44LS4xLjgtLjIuNy0uMi45di44bC0uMS44djEuOWwuMS44LjEuNy4xLjguMi44LjIuNi4xLjguMi42LjMuNi4zLjguNC44LjMuNi40LjYuNS43LjUuNi40LjYuNi42LjUuNi42LjUuNi41LjYuNS43LjQuNi40LjcuMy44LjMuNi4zLjguMi44LjMuOC4xLjguMi44LjEgMSAuMWgyLjZsMS0uMWguOGwuOC0uMy44LS4xLjgtLjMuNy0uMS43LS4zLjYtLjMuOC0uMy41LS4zLjYtLjR2LTcuNGgtMTEuOHYtMTEuOWgyNi42djI2LjZsLS42LjUtLjYuNS0uNi40LS42LjUtLjYuNC0uNi41LS42LjQtLjcuNC0uOC40LS43LjQtLjYuNC0uOC4zLS42LjQtLjguMy0uOC4zLS44LjMtLjcuMy0uNy4yLS43LjMtLjguMi0uNy4yLS44LjMtLjcuMS0uOC4yLS44LjItLjguMS0uOC4xLS44LjEtLjguMS0xIC4xLS44LjEtLjkuMWgtNC4ybC0uNy42aC0uOGwtLjgtLjFoLS44bC0uOC0uMy0uOC0uMS0uOC0uMi0uOC0uMS0uNi0uMy0uOC0uMS0uOC0uMy0uNy0uMy0uNy0uMi0uOC0uMy0uNy0uMy0uOC0uMy0uNi0uMy0uOC0uNC0uNi0uNC0uOC0uNC0uNi0uNC0uNi0uNC0uNi0uNS0uNi0uNS0uNy0uNS0uNS0uNS0uNi0uNS0uNi0uNi0uNi0uNS0uNi0uNi0uNy0uNi0uNi0uNi0uNS0uNi0uNS0uNi0uNC0uNi0uNS0uNi0uNC0uNi0uNC0uNi0uNC0uNy0uNC0uNi0uMy0uNy0uMy0uNy0uMy0uNy0uMy0uNy0uMi0uNi0uMy0uNy0uMi0uNy0uMi0uNy0uMi0uOC0uMi0uNy0uMi0uOC0uMS0uNy0uMi0uOC0uMS0uNy0uMS0uOC0uMS0uOC0uMS0uOHYtNC40bC4yLS44di0uOWwuMi0uOHYtLjhsLjMtLjguMy0uOC4xLS44LjItLjcuMy0uOC4yLS43LjMtLjguMy0uNy4zLS43LjMtLjcuMy0uNy40LS43LjQtLjYuNC0uNi40LS42LjQtLjYuNS0uNy41LS42LjUtLjYuNi0uNi41LS42LjUtLjYuNi0uNi41LS42LjYtLjUuNi0uNi42LS41LjYtLjUuNi0uNC42LS41LjYtLjQuNy0uNC43LS40LjgtLjQuNi0uNC44LS4zLjctLjMuOC0uNC42LS4yLjgtLjMuNy0uMy43LS4yLjctLjIuOC0uMi43LS4yLjgtLjJoLjhsLjgtLjJoLjhsLjgtLjJoLjhsMS4zLTF6bTI1NS44LjJoNC40bDEgLjJoMS42bC44LjJoMWwuOC4zLjcuMS44LjIuOC4xLjcuMi44LjIuOC4zLjYuMS44LjMuOC4zLjYuMy44LjMuOC4zLjcuNC42LjMuOC40LjcuNC42LjQuNy41LjYuNC42LjUuNi41LjYuNS0uNS42LS40LjctLjUuNi0uNS42LS41LjctLjQuNi0uNS42LS41LjctLjQuNi0uNS42LS41LjYtLjUuNy0uNC43LS41LjYtLjYuNi0uNC42LS41LjctLjYtLjUtLjctLjQtLjYtLjQtLjYtLjUtLjctLjMtLjYtLjQtLjgtLjMtLjYtLjMtLjgtLjMtLjYtLjMtLjYtLjItLjctLjMtLjgtLjItLjgtLjMtLjgtLjItLjktLjItLjgtLjEtLjgtLjItLjgtLjEtLjgtLjEtLjctLjFoLTEuOGwtLjkuMS0uOC4yLS44LjEtLjYuMy0uNi4zLS43LjYtLjUuNy0uMy43djJsLjQuOS4zLjUuNi42LjguNC42LjQuOC4zLjguMyAxIC4zLjYuMi42LjIuOC4yLjYuMi44LjIuOS4yLjkuMi45LjMuOS4xLjguMy45LjIuOC4yLjguMi44LjIuOC4zLjguMi43LjIuOC4zLjguMy44LjQuOC4zLjguNC44LjQuNi40LjYuNC43LjUuNi40LjcuNi42LjYuNi42LjYuNi40LjYuNi44LjQuNi4zLjguNC42LjIuOC4zLjYuMS44LjIuOC4xLjguMS44LjEuOHYybC0uMS45LS4xLjgtLjEuOS0uMi44LS4yLjgtLjIuOC0uMi44LS4zLjctLjMuNi0uMy43LS40LjYtLjUuNi0uNC42LS40LjctLjYuNi0uNS42LS42LjUtLjYuNi0uNi41LS42LjUtLjYuNC0uNy41LS44LjQtLjYuMy0uOC40LS44LjMtLjguMy0uOC4zLS44LjItLjYuMi0uOC4yLS44LjItLjYuMS0uOC4yaC0uM2wtLjguMWgtLjhsLS44LjJoLTZsLS44LS4xLS44LS4xLS45LS4xLS44LS4yLS44LS4xLS44LS4xLS44LS4yLS45LS4yLS44LS4yLS44LS4yLS44LS4yLS44LS4yLS44LS4zLS44LS4zLS43LS4yLS44LS4yLS44LS4zLS42LS4zLS44LS4zLS42LS40LS44LS4zLS43LS40LS42LS40LS44LS40LS42LS40LS43LS40LS42LS41LS42LS41LS42LS41LS42LS41LS42LS41LS42LS42LjUtLjYuNi0uNi41LS42LjYtLjYuNS0uNi41LS42LjYtLjYuNS0uNi42LS42LjUtLjYuNi0uNi41LS42LjUtLjYuNi0uNi41LS42LjYtLjYuNi0uNi42LjUuOC41LjYuNS44LjUuNi40LjcuNS42LjQuNy4zLjYuNC43LjMuOC4zLjYuMy44LjIuNi4zLjguMi44LjMuOC4zLjguMS44LjIuOC4xaC45bC44LjNoNC40bC44LS4yLjgtLjIuNi0uMS42LS4yLjYtLjMuNy0uNS40LS42LjQtLjYuMi0uOHYtMS45bC0uMy0uOC0uNS0uNi0uNS0uNS0uNy0uNS0uNi0uMy0uOC0uMy0uOC0uMy0xLS40LS42LS4xLS42LS4yLS44LS4yLS42LS4yLS44LS4zLS44LS4xLS45LS4zLS44LS4xLS45LS4zLS44LS4xLS44LS4zLS44LS4xLS44LS4zLS44LS4yLS44LS4yLS43LS4zLS43LS4yLS43LS4zLS44LS4zLS45LS4zLS44LS4zLS44LS4zLS44LS40LS44LS40LS42LS40LS44LS40LS42LS41LS43LS40LS41LS41LS42LS42LS42LS42LS41LS42LS41LS42LS40LS42LS40LS42LS40LS43LS4zLS42LS4zLS42LS4yLS43LS4yLS42LS4yLS44LS4xLS43di0uOGwtLjItLjh2LTMuNWwuMS0uOC4xLS44LjEtLjYuMi0uOC4yLS42LjItLjguMy0uNi4zLS44LjMtLjYuNC0uOC40LS42LjYtLjYuNC0uNi42LS42LjYtLjYuNS0uNi43LS42LjUtLjQuNy0uNS42LS41LjYtLjQuOC0uNC42LS4zLjgtLjQuNi0uMy44LS4zLjgtLjMuOC0uMi42LS4yLjgtLjEuNi0uMi44LS4xLjgtLjIuOC0uMS44LS4xLjgtLjEuNi0uMXptLTE5Ny4xLjZoMTUuMWwuMy43LjMuNy4zLjcuMi44LjMuNy4zLjcuMy43LjMuNy4yLjcuNC44LjMuNy4zLjcuMi43LjMuNy40LjcuMy44LjMuNy4yLjcuMy43LjQuNy4yLjcuMy44LjIuOC4zLjYuNC44LjMuNi4zLjguMy44LjIuNi40LjguMy42LjMuOC4yLjYuMy44LjQuOC4zLjcuMi43LjIuNy4zLjcuNC43LjMuOC4zLjcuMi43LjMuNy4zLjcuMy43LjMuOC4zLjcuMy43LjQuNy4zLjcuMy43LjIuOC4zLjcuNC43LjMuNy4yLjcuMy43LjMuOC40LjguMi42LjMuOC4yLjYuMy44LjQuOC4zLjYuMi44LjMuNi4yLjguNC42LjMuOC4yLjguMy42LjMuOC40LjYuMy44LjIuOC4zLjYuMy44LjQuNkg0NjZsLS40LS43LS4yLS43LS4zLS43LS4zLS44LS4yLS43LS4zLS43LS4zLS43LS4zLS43LS4zLS43LS4zLS43LS4yLS43LS4zLS44LS4zLS43LS4zLS43LS4zLS43aC0yMy4ybC0uMy44LS4yLjYtLjMuOC0uNC44LS4yLjYtLjMuOC0uMy42LS4yLjgtLjMuNi0uMy44LS4zLjYtLjMuOC0uMy44LS4zLjYtLjIuOGgtMTYuNWwuMy0uOC4zLS43LjMtLjcuMy0uOC4yLS43LjQtLjcuMy0uNy4zLS43LjItLjcuMy0uOC40LS43LjMtLjcuMy0uNy4yLS43LjMtLjcuNC0uOC4zLS43LjMtLjcuMy0uNy4zLS43LjMtLjcuMy0uOC4zLS44LjMtLjYuMy0uOC40LS42LjMtLjguMi0uOC4yLS42LjMtLjguNC0uNi4zLS44LjMtLjYuMi0uOC4zLS44LjQtLjYuMi0uOC4zLS42LjMtLjguMy0uOC40LS42LjMtLjguMi0uNi4zLS44LjMtLjYuNC0uOC4zLS44LjMtLjcuMi0uNy4zLS43LjQtLjcuMy0uNy4yLS44LjMtLjcuMy0uNy40LS43LjMtLjcuMi0uNy4zLS44LjMtLjguMy0uNi4zLS44LjItLjYuMy0uOC4zLS44LjQtLjYuMy0uOC4zLS42LjItLjguMy0uNi40LS44LjMtLjguMy0uNi4zLS44LjMtLjYuNC0uOC4yLS44LjItLjYuMy0uOCAyLjgtLjZ6bTQ2LjguNGgxNi41bC41LjYuNC43LjUuNi40LjcuNC42LjQuNy40LjYuNS43LjQuNi40LjYuNC43LjQuNi42LjcuMy42LjQuNy41LjYuNS42LjMuNy41LjYuNC43LjMuNi42LjcuNC42LjQuNy40LjYuNC42LjUuNy40LjYuNC43LjQuNi40LjcuNS42LjQuNy40LjYuNS0uNi4zLS44LjUtLjYuNS0uOC40LS42LjMtLjguNi0uNi40LS44LjMtLjYuNS0uNi41LS44LjQtLjYuNC0uOC40LS42LjUtLjguNC0uNi40LS44LjQtLjYuNC0uNi41LS44LjQtLjYuNC0uOC41LS42LjQtLjguNC0uNi41LS42LjQtLjguNS0uNi40LS44LjQtLjYuNC0uOC41LS42LjQtLjguNC0uNkg1NTN2NTkuNWgtMTUuN3YtMzVsLS40LjYtLjUuOC0uNC42LS41LjYtLjQuOC0uNS42LS40LjYtLjUuOC0uNC42LS40LjYtLjYuNi0uNC44LS41LjYtLjQuNi0uNC44LS41LjYtLjQuNi0uNS44LS40LjYtLjUuNi0uNC44LS40LjYtLjUuNi0uNC44LS41LjYtLjUuNi0uNC42LS40LjgtLjUuNi0uNS42LS4zLjgtLjYuNi0uNC42LS41LjgtLjQuNmgtLjNsLS41LS43LS40LS42LS41LS43LS40LS42LS41LS43LS40LS42LS41LS43LS40LS42LS41LS43LS40LS42LS42LS43LS4zLS42LS41LS43LS41LS42LS40LS43LS41LS42LS40LS44LS41LS42LS40LS43LS41LS42LS40LS43LS41LS42LS40LS43LS41LS42LS40LS43LS41LS42LS40LS43LS41LS42LS40LS43LS41LS42LS40LS43LS42LS42LS4zLS43LS41LS42djM1LjFINDkxdi01OC45bC0uMS0uMnptNzQgMGg0Ni45djEzLjRoLTMxLjR2OS41aDI4LjJ2MTIuN2gtMjguMlY2MzRoMzEuOHYxMy41SDU2NXYtNTguOWwtLjEtLjR6bS0xMTMuNSAxOC4yLS4zLjgtLjMuNi0uMy44LS4zLjgtLjIuNy0uMy43LS4zLjgtLjMuOC0uMi42LS4zLjgtLjMuNi0uMy44LS4zLjgtLjMuNi0uMi44LS4zLjYtLjMuOC0uNiAxLjItLjIuNi0uMy44LS4zLjgtLjIuNi0uMy44aDEzLjdsLS4zLS44LS4zLS43LS4zLS44LS4zLS43LS4yLS43LS4zLS43LS4zLS44LS4zLS43LS4zLS43LS4zLS43LS4yLS43LS4zLS44LS4zLS43LS4zLS43LS4zLS43LS4yLS43LS4zLS44LS4zLS44LS4zLS42LS4zLS44LS4zLS44LS4yLS43LS44LTEuMXptLTI0LjUgMTExLjRoMTcxbC04Ny4zIDI4LjgtODMuNy0yOC44eiIgc3R5bGU9ImZpbGw6I2ZmZiIvPgo8L3N2Zz4="; const emailIcon = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEzLjMzMzUgMi42NjY1SDIuNjY2ODNDMS45MzA0NSAyLjY2NjUgMS4zMzM1IDMuMjYzNDYgMS4zMzM1IDMuOTk5ODRWMTEuOTk5OEMxLjMzMzUgMTIuNzM2MiAxLjkzMDQ1IDEzLjMzMzIgMi42NjY4MyAxMy4zMzMySDEzLjMzMzVDMTQuMDY5OSAxMy4zMzMyIDE0LjY2NjggMTIuNzM2MiAxNC42NjY4IDExLjk5OThWMy45OTk4NEMxNC42NjY4IDMuMjYzNDYgMTQuMDY5OSAyLjY2NjUgMTMuMzMzNSAyLjY2NjVaIiBzdHJva2U9IiMzMzg1RkYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTQuNjY2OCA0LjY2NjVMOC42ODY4MyA4LjQ2NjVDOC40ODEwMSA4LjU5NTQ1IDguMjQzMDQgOC42NjM4NCA4LjAwMDE2IDguNjYzODRDNy43NTcyOCA4LjY2Mzg0IDcuNTE5MzEgOC41OTU0NSA3LjMxMzUgOC40NjY1TDEuMzMzNSA0LjY2NjUiIHN0cm9rZT0iIzMzODVGRiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo="; const phoneIcon = @@ -61,6 +63,7 @@ export const socialIcons = { twitch: twitchIconUri, x: xIcon, tiktok: tiktokIconUri, + epic: epicIconUri, }; /** @@ -99,6 +102,8 @@ export function getSocialIcon(provider: AuthOption | ({} & string)): string { return xIcon; case "tiktok": return tiktokIconUri; + case "epic": + return epicIconUri; case "farcaster": return farcasterIconUri; case "telegram": diff --git a/packages/thirdweb/src/react/native/ui/components/WalletImage.tsx b/packages/thirdweb/src/react/native/ui/components/WalletImage.tsx index 51983797e59..435da415b00 100644 --- a/packages/thirdweb/src/react/native/ui/components/WalletImage.tsx +++ b/packages/thirdweb/src/react/native/ui/components/WalletImage.tsx @@ -11,6 +11,7 @@ import { APPLE_ICON, DISCORD_ICON, EMAIL_ICON, + EPIC_ICON, FACEBOOK_ICON, FARCASTER_ICON, GITHUB_ICON, @@ -106,6 +107,8 @@ export function getAuthProviderImage(authProvider: string | null): string { return X_ICON; case "tiktok": return TIKTOK_ICON; + case "epic": + return EPIC_ICON; case "farcaster": return FARCASTER_ICON; case "telegram": diff --git a/packages/thirdweb/src/react/native/ui/connect/InAppWalletUI.tsx b/packages/thirdweb/src/react/native/ui/connect/InAppWalletUI.tsx index 0c7d919c6c7..bb94340cdc3 100644 --- a/packages/thirdweb/src/react/native/ui/connect/InAppWalletUI.tsx +++ b/packages/thirdweb/src/react/native/ui/connect/InAppWalletUI.tsx @@ -32,6 +32,7 @@ import { APPLE_ICON, COINBASE_ICON, DISCORD_ICON, + EPIC_ICON, FACEBOOK_ICON, FARCASTER_ICON, GITHUB_ICON, @@ -69,6 +70,7 @@ const socialIcons = { twitch: TWITCH_ICON, x: X_ICON, tiktok: TIKTOK_ICON, + epic: EPIC_ICON, }; type InAppWalletFormUIProps = { diff --git a/packages/thirdweb/src/react/native/ui/icons/svgs.ts b/packages/thirdweb/src/react/native/ui/icons/svgs.ts index 9d846dbf379..4626f714d3f 100644 --- a/packages/thirdweb/src/react/native/ui/icons/svgs.ts +++ b/packages/thirdweb/src/react/native/ui/icons/svgs.ts @@ -155,6 +155,11 @@ export const TIKTOK_ICON = ` + + +`; + export const GUEST_ICON = ``; export const WALLET_ICON = ` diff --git a/packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx b/packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx index af3ed95e2d2..e959e82899a 100644 --- a/packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx +++ b/packages/thirdweb/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx @@ -119,6 +119,7 @@ export const ConnectWalletSocialOptions = ( twitch: "Twitch", x: "X", tiktok: "TikTok", + epic: "Epic", }; const { data: ecosystemAuthOptions, isLoading } = useQuery({ diff --git a/packages/thirdweb/src/react/web/wallets/shared/oauthSignIn.ts b/packages/thirdweb/src/react/web/wallets/shared/oauthSignIn.ts index 57b5fb6448c..80fbc8cbc6b 100644 --- a/packages/thirdweb/src/react/web/wallets/shared/oauthSignIn.ts +++ b/packages/thirdweb/src/react/web/wallets/shared/oauthSignIn.ts @@ -44,6 +44,7 @@ function getOauthLoginPath( case "line": case "x": case "tiktok": + case "epic": case "guest": case "coinbase": case "discord": diff --git a/packages/thirdweb/src/stories/ConnectEmbed.stories.tsx b/packages/thirdweb/src/stories/ConnectEmbed.stories.tsx index 1abe85531a8..cab7b800bf7 100644 --- a/packages/thirdweb/src/stories/ConnectEmbed.stories.tsx +++ b/packages/thirdweb/src/stories/ConnectEmbed.stories.tsx @@ -89,6 +89,7 @@ export function AllInAppWalletAuthMethods() { "discord", "x", "tiktok", + "epic", "coinbase", "farcaster", "telegram", diff --git a/packages/thirdweb/src/wallets/in-app/core/authentication/types.ts b/packages/thirdweb/src/wallets/in-app/core/authentication/types.ts index 1311dc573ef..f82220e0bbe 100644 --- a/packages/thirdweb/src/wallets/in-app/core/authentication/types.ts +++ b/packages/thirdweb/src/wallets/in-app/core/authentication/types.ts @@ -103,6 +103,7 @@ export type AuthProvider = | "Coinbase" | "X" | "TikTok" + | "Epic" | "Line" | "Twitch" | "Steam" diff --git a/packages/thirdweb/src/wallets/in-app/native/native-connector.ts b/packages/thirdweb/src/wallets/in-app/native/native-connector.ts index 564d28965c7..5b6f6ad43c3 100644 --- a/packages/thirdweb/src/wallets/in-app/native/native-connector.ts +++ b/packages/thirdweb/src/wallets/in-app/native/native-connector.ts @@ -199,6 +199,7 @@ export class InAppNativeConnector implements InAppConnector { case "line": case "x": case "tiktok": + case "epic": case "apple": { const { socialAuth } = await import("./auth/native-auth.js"); const ExpoLinking = require("expo-linking"); diff --git a/packages/thirdweb/src/wallets/in-app/web/lib/web-connector.ts b/packages/thirdweb/src/wallets/in-app/web/lib/web-connector.ts index 908a24c23c3..6aee164ae11 100644 --- a/packages/thirdweb/src/wallets/in-app/web/lib/web-connector.ts +++ b/packages/thirdweb/src/wallets/in-app/web/lib/web-connector.ts @@ -338,6 +338,7 @@ export class InAppWebConnector implements InAppConnector { case "line": case "x": case "tiktok": + case "epic": case "steam": case "coinbase": case "discord": { @@ -411,6 +412,7 @@ export class InAppWebConnector implements InAppConnector { case "line": case "x": case "tiktok": + case "epic": case "guest": case "coinbase": case "twitch": diff --git a/packages/thirdweb/src/wallets/types.ts b/packages/thirdweb/src/wallets/types.ts index daf16784ef8..5d41ac52d2e 100644 --- a/packages/thirdweb/src/wallets/types.ts +++ b/packages/thirdweb/src/wallets/types.ts @@ -27,6 +27,7 @@ export const socialAuthOptions = [ "line", "x", "tiktok", + "epic", "coinbase", "farcaster", "telegram", From de77de10a84b6b46fad733c2524b3f860b83f542 Mon Sep 17 00:00:00 2001 From: 0xFirekeeper <0xFirekeeper@gmail.com> Date: Sat, 1 Nov 2025 06:02:34 +0700 Subject: [PATCH 2/4] Create beige-candles-happen.md --- .changeset/beige-candles-happen.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/beige-candles-happen.md diff --git a/.changeset/beige-candles-happen.md b/.changeset/beige-candles-happen.md new file mode 100644 index 00000000000..c39e04be48c --- /dev/null +++ b/.changeset/beige-candles-happen.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Added Epic Games Authentication From 60d924193123a2288aa097b73bf1b42b11abf42a Mon Sep 17 00:00:00 2001 From: 0xFirekeeper <0xFirekeeper@gmail.com> Date: Sat, 1 Nov 2025 06:13:20 +0700 Subject: [PATCH 3/4] Delete EpicIcon.tsx --- .../src/@/icons/brand-icons/EpicIcon.tsx | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 apps/dashboard/src/@/icons/brand-icons/EpicIcon.tsx diff --git a/apps/dashboard/src/@/icons/brand-icons/EpicIcon.tsx b/apps/dashboard/src/@/icons/brand-icons/EpicIcon.tsx deleted file mode 100644 index 5d9a881dda1..00000000000 --- a/apps/dashboard/src/@/icons/brand-icons/EpicIcon.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import type { SVGProps } from "react"; - -export const EpicIcon = (props: SVGProps) => { - return ( - - Epic Games - - - ); -}; From 9d71fa545968489d90073201cae7d0742c02a610 Mon Sep 17 00:00:00 2001 From: 0xFirekeeper <0xFirekeeper@gmail.com> Date: Fri, 7 Nov 2025 06:02:08 +0700 Subject: [PATCH 4/4] Add Line, TikTok, and Epic Games OAuth support Extended the AuthMethodsTabs component to include Line, TikTok, and Epic Games as new OAuth authentication methods. Updated all relevant type definitions, UI labels, and provider mappings to support these new options. --- .../components/Document/AuthMethodsTabs.tsx | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/apps/portal/src/components/Document/AuthMethodsTabs.tsx b/apps/portal/src/components/Document/AuthMethodsTabs.tsx index 07fc2d36bab..850e6f599d5 100644 --- a/apps/portal/src/components/Document/AuthMethodsTabs.tsx +++ b/apps/portal/src/components/Document/AuthMethodsTabs.tsx @@ -29,6 +29,9 @@ type AuthMethod = | "telegram" | "farcaster" | "github" + | "line" + | "tiktok" + | "epic" | "passkey" | "wallet" | "guest" @@ -55,6 +58,9 @@ const authMethods: { id: AuthMethod; label: string; description: string }[] = [ { id: "telegram", label: "Telegram", description: "Telegram OAuth" }, { id: "farcaster", label: "Farcaster", description: "Farcaster OAuth" }, { id: "github", label: "GitHub", description: "GitHub OAuth" }, + { id: "line", label: "Line", description: "Line OAuth" }, + { id: "tiktok", label: "TikTok", description: "TikTok OAuth" }, + { id: "epic", label: "Epic Games", description: "Epic Games OAuth" }, { id: "passkey", label: "Passkey", description: "WebAuthn passkey" }, { id: "wallet", @@ -244,6 +250,9 @@ const account = await wallet.connect({ case "telegram": case "farcaster": case "github": + case "line": + case "tiktok": + case "epic": return ( baseSetup + `// ${authMethod.charAt(0).toUpperCase() + authMethod.slice(1)} OAuth @@ -561,6 +570,9 @@ function PrebuiltUIExample() { case "telegram": case "farcaster": case "github": + case "line": + case "tiktok": + case "epic": return ( baseSetup + ` await wallet.connect({\n client,\n strategy: "${authMethod}",\n });\n` + @@ -639,7 +651,10 @@ var address = await wallet.LoginWithOtp("123456");` case "x": case "telegram": case "farcaster": - case "github": { + case "github": + case "line": + case "tiktok": + case "epic": { const providerMap: Record = { google: "Google", apple: "Apple", @@ -649,6 +664,9 @@ var address = await wallet.LoginWithOtp("123456");` telegram: "Telegram", farcaster: "Farcaster", github: "Github", + line: "Line", + tiktok: "TikTok", + epic: "Epic", }; return ( baseSetup + @@ -746,7 +764,10 @@ var wallet = await ThirdwebManager.Instance.ConnectWallet(options);` case "x": case "telegram": case "farcaster": - case "github": { + case "github": + case "line": + case "tiktok": + case "epic": { const providerMap: Record = { google: "Google", apple: "Apple", @@ -756,6 +777,9 @@ var wallet = await ThirdwebManager.Instance.ConnectWallet(options);` telegram: "Telegram", farcaster: "Farcaster", github: "Github", + line: "Line", + tiktok: "TikTok", + epic: "Epic", }; return ( baseSetup +