From d24ff143ef2a72cb4984a61582ef8a63dff4021f Mon Sep 17 00:00:00 2001 From: Joaquim Verges Date: Mon, 24 Mar 2025 22:22:23 +1300 Subject: [PATCH 1/3] Revert "[Service-Utils] feat: Add engine-cloud service definition (#6526)" This reverts commit 21389bbef6918a72df3ca1822ea7e5f697931c39. --- packages/service-utils/src/core/api.ts | 4 ---- packages/service-utils/src/core/services.ts | 8 -------- 2 files changed, 12 deletions(-) diff --git a/packages/service-utils/src/core/api.ts b/packages/service-utils/src/core/api.ts index 56daf87f9e3..d56f5f9c1ec 100644 --- a/packages/service-utils/src/core/api.ts +++ b/packages/service-utils/src/core/api.ts @@ -136,10 +136,6 @@ export type ProjectService = name: "nebula"; actions: never[]; } - | { - name: "engineCloud"; - actions: never[]; - } | ProjectBundlerService | ProjectEmbeddedWalletsService; diff --git a/packages/service-utils/src/core/services.ts b/packages/service-utils/src/core/services.ts index 2c539f3edac..84ba6257b1f 100644 --- a/packages/service-utils/src/core/services.ts +++ b/packages/service-utils/src/core/services.ts @@ -74,14 +74,6 @@ export const SERVICE_DEFINITIONS = { // all actions allowed actions: [], }, - engineCloud: { - name: "engineCloud", - title: "Server wallets", - description: - "Server wallets with high transaction throughput and low latency", - // all actions allowed - actions: [], - }, } as const; export const SERVICE_NAMES = Object.keys( From dc6f18e23e21452881b1b58d0633f29ee0cbcb67 Mon Sep 17 00:00:00 2001 From: Joaquim Verges Date: Tue, 25 Mar 2025 11:14:04 +1300 Subject: [PATCH 2/3] [Playground] Refactor Universal Bridge sidebar links and update order --- apps/playground-web/src/app/navLinks.ts | 53 ++++++++++++++----------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/apps/playground-web/src/app/navLinks.ts b/apps/playground-web/src/app/navLinks.ts index a1ce0f3f712..ee5228f079f 100644 --- a/apps/playground-web/src/app/navLinks.ts +++ b/apps/playground-web/src/app/navLinks.ts @@ -60,28 +60,6 @@ export const staticSidebarLinks: SidebarLink[] = [ }, ], }, - { - name: "Universal Bridge", - expanded: false, - links: [ - { - name: "UI Component", - href: "/connect/pay", - }, - { - name: "Fund Wallet", - href: "/connect/pay/fund-wallet", - }, - { - name: "Commerce", - href: "/connect/pay/commerce", - }, - { - name: "Transactions", - href: "/connect/pay/transactions", - }, - ], - }, { name: "Auth", href: "/connect/auth", @@ -124,6 +102,34 @@ export const staticSidebarLinks: SidebarLink[] = [ }, ]; +const universalBridgeSidebarLinks: SidebarLink = { + name: "Universal Bridge", + isCollapsible: false, + expanded: false, + links: [ + { + name: "UI Component", + href: "/connect/pay", + }, + { + name: "Fund Wallet", + href: "/connect/pay/fund-wallet", + }, + { + name: "Commerce", + href: "/connect/pay/commerce", + }, + { + name: "Transactions", + href: "/connect/pay/transactions", + }, + { + name: "Backend API", + href: "https://bridge.thirdweb.com/reference", + }, + ], +}; + const engineSidebarLinks: SidebarLink = { name: "Engine", isCollapsible: false, @@ -167,13 +173,14 @@ export async function getSidebarLinks() { const sidebarLinks: SidebarLink[] = [ ...staticSidebarLinks, + universalBridgeSidebarLinks, + engineSidebarLinks, { name: "Insight", isCollapsible: false, expanded: false, links: insightLinks, }, - engineSidebarLinks, ]; return sidebarLinks; From 46476a0fb1acf22c760df815af3d3b253fbaccac Mon Sep 17 00:00:00 2001 From: Joaquim Verges Date: Tue, 25 Mar 2025 11:15:00 +1300 Subject: [PATCH 3/3] Reapply "[Service-Utils] feat: Add engine-cloud service definition (#6526)" This reverts commit d24ff143ef2a72cb4984a61582ef8a63dff4021f. --- apps/playground-web/public/ub.png | Bin 0 -> 55689 bytes .../src/app/connect/pay/backend/layout.tsx | 21 +++++ .../src/app/connect/pay/backend/page.tsx | 79 ++++++++++++++++++ .../connect/pay/backend/reference/page.tsx | 70 ++++++++++++++++ .../src/app/connect/pay/backend/utils.ts | 13 +++ .../blueprint-playground.client.tsx | 9 +- .../src/app/insight/[blueprint_slug]/page.tsx | 5 ++ apps/playground-web/src/app/navLinks.ts | 2 +- apps/playground-web/src/lib/client.ts | 1 + .../TDoc/utils/getSidebarLinkgroups.ts | 2 + packages/service-utils/src/core/api.ts | 4 + packages/service-utils/src/core/services.ts | 8 ++ packages/thirdweb/scripts/typedoc.mjs | 3 + .../src/extensions/thirdweb/write/publish.ts | 2 +- .../thirdweb/src/react/web/ui/PayEmbed.tsx | 1 + 15 files changed, 214 insertions(+), 6 deletions(-) create mode 100644 apps/playground-web/public/ub.png create mode 100644 apps/playground-web/src/app/connect/pay/backend/layout.tsx create mode 100644 apps/playground-web/src/app/connect/pay/backend/page.tsx create mode 100644 apps/playground-web/src/app/connect/pay/backend/reference/page.tsx create mode 100644 apps/playground-web/src/app/connect/pay/backend/utils.ts diff --git a/apps/playground-web/public/ub.png b/apps/playground-web/public/ub.png new file mode 100644 index 0000000000000000000000000000000000000000..6448e1d2a109de92446759eea67d928f9aec9941 GIT binary patch literal 55689 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 A?*IS* literal 0 HcmV?d00001 diff --git a/apps/playground-web/src/app/connect/pay/backend/layout.tsx b/apps/playground-web/src/app/connect/pay/backend/layout.tsx new file mode 100644 index 00000000000..0b0c4052825 --- /dev/null +++ b/apps/playground-web/src/app/connect/pay/backend/layout.tsx @@ -0,0 +1,21 @@ +import type React from "react"; +import { APIHeader } from "../../../../components/blocks/APIHeader"; + +export default function Layout(props: { + children: React.ReactNode; +}) { + return ( +
+ HTTP API to bridge, swap and onramp to and from any currency + } + docsLink="https://portal.thirdweb.com/connect/pay/overview" + heroLink="/ub.png" + /> + + {props.children} +
+ ); +} diff --git a/apps/playground-web/src/app/connect/pay/backend/page.tsx b/apps/playground-web/src/app/connect/pay/backend/page.tsx new file mode 100644 index 00000000000..26681e88431 --- /dev/null +++ b/apps/playground-web/src/app/connect/pay/backend/page.tsx @@ -0,0 +1,79 @@ +import { Table, TableBody, TableCell, TableRow } from "@/components/ui/table"; +import Link from "next/link"; +import { getBridgePaths } from "./utils"; + +export default async function Page() { + try { + const paths = await getBridgePaths(); + return ( +
+

+ Universal Bridge REST API +

+

+ Directly interact with the Universal Bridge API from your backend, + using standard REST api. +

+ +
+ { + if (!pathObj) { + throw new Error(`Path not found: ${pathName}`); + } + return { + name: pathName, + description: pathObj.get?.description || "", + link: `/connect/pay/backend/reference?route=${pathName}`, + }; + })} + /> +
+
+ ); + } catch (error) { + console.error(error); + return
Error fetching API spec
; + } +} + +function BlueprintSection(props: { + title: string; + blueprints: { name: string; description: string; link: string }[]; +}) { + return ( +
+
+

{props.title}

+
+ + + {props.blueprints.map((item) => ( + + + + +
+

{item.name}

+

+ {item.description} +

+
+ +
+
+
+ ))} +
+
+
+ ); +} diff --git a/apps/playground-web/src/app/connect/pay/backend/reference/page.tsx b/apps/playground-web/src/app/connect/pay/backend/reference/page.tsx new file mode 100644 index 00000000000..1f2fda67f19 --- /dev/null +++ b/apps/playground-web/src/app/connect/pay/backend/reference/page.tsx @@ -0,0 +1,70 @@ +import { + Breadcrumb, + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbList, + BreadcrumbSeparator, +} from "@/components/ui/breadcrumb"; +import { redirect } from "next/navigation"; +import { THIRDWEB_CLIENT } from "../../../../../lib/client"; +import { isProd } from "../../../../../lib/env"; +import { BlueprintPlayground } from "../../../../insight/[blueprint_slug]/blueprint-playground.client"; +import { getBridgePaths } from "../utils"; + +export default async function Page(props: { + searchParams: Promise<{ + route: string; + }>; +}) { + const params = await props.searchParams; + + // invalid url + if (!params.route) { + redirect("/connect/pay/backend"); + } + + const thirdwebDomain = !isProd ? "thirdweb-dev" : "thirdweb"; + const domain = `https://bridge.${thirdwebDomain}.com`; + + const paths = await getBridgePaths(); + const pathMetadata = paths.find(([path]) => path === params.route)?.[1]?.get; + + // invalid url + if (!pathMetadata) { + redirect("/connect/pay/backend"); + } + + const title = pathMetadata.summary || ""; + return ( +
+ +

+ {title} +

+ +
+ ); +} + +function Breadcrumbs() { + return ( + + + + + Universal Bridge API + + + + + + ); +} diff --git a/apps/playground-web/src/app/connect/pay/backend/utils.ts b/apps/playground-web/src/app/connect/pay/backend/utils.ts new file mode 100644 index 00000000000..eb75e377ffc --- /dev/null +++ b/apps/playground-web/src/app/connect/pay/backend/utils.ts @@ -0,0 +1,13 @@ +import type { OpenAPIV3 } from "openapi-types"; +import { isProd } from "../../../../lib/env"; + +export async function getBridgePaths() { + const thirdwebDomain = !isProd ? "thirdweb-dev" : "thirdweb"; + const res = await fetch(`https://bridge.${thirdwebDomain}.com/openapi.json`); + const openapiJson = (await res.json()) as OpenAPIV3.Document; + return Object.entries(openapiJson.paths).filter( + ([, pathObj]) => + pathObj?.get?.deprecated === undefined || + pathObj?.get?.deprecated === false, + ); +} diff --git a/apps/playground-web/src/app/insight/[blueprint_slug]/blueprint-playground.client.tsx b/apps/playground-web/src/app/insight/[blueprint_slug]/blueprint-playground.client.tsx index 333e9462746..211271f62fa 100644 --- a/apps/playground-web/src/app/insight/[blueprint_slug]/blueprint-playground.client.tsx +++ b/apps/playground-web/src/app/insight/[blueprint_slug]/blueprint-playground.client.tsx @@ -35,7 +35,6 @@ import { useForm, } from "react-hook-form"; import { z } from "zod"; -import { isProd } from "../../../lib/env"; import type { BlueprintParameter, BlueprintPathMetadata } from "../utils"; export function BlueprintPlayground(props: { @@ -44,6 +43,7 @@ export function BlueprintPlayground(props: { clientId: string; path: string; supportedChainIds: number[]; + domain: string; }) { const [abortController, setAbortController] = useState(null); @@ -56,6 +56,9 @@ export function BlueprintPlayground(props: { try { const res = await fetch(url, { signal: controller.signal, + headers: { + "x-client-id": props.clientId, + }, }); return { status: res.status, @@ -78,8 +81,6 @@ export function BlueprintPlayground(props: { }, }); - const thirdwebDomain = !isProd ? "thirdweb-dev" : "thirdweb"; - return ( diff --git a/apps/playground-web/src/app/insight/[blueprint_slug]/page.tsx b/apps/playground-web/src/app/insight/[blueprint_slug]/page.tsx index e5fd2979d3a..9604218d930 100644 --- a/apps/playground-web/src/app/insight/[blueprint_slug]/page.tsx +++ b/apps/playground-web/src/app/insight/[blueprint_slug]/page.tsx @@ -7,6 +7,7 @@ import { } from "@/components/ui/breadcrumb"; import { redirect } from "next/navigation"; import { THIRDWEB_CLIENT } from "../../../lib/client"; +import { isProd } from "../../../lib/env"; import { fetchBlueprintSpec } from "../utils"; import { BlueprintPlayground } from "./blueprint-playground.client"; @@ -26,6 +27,9 @@ export default async function Page(props: { redirect("/insight"); } + const thirdwebDomain = !isProd ? "thirdweb-dev" : "thirdweb"; + const domain = `https://insight.${thirdwebDomain}.com`; + const [blueprintSpec] = await Promise.all([ fetchBlueprintSpec({ blueprintId: params.blueprint_slug, @@ -58,6 +62,7 @@ export default async function Page(props: { clientId={THIRDWEB_CLIENT.clientId} path={searchParams.path} supportedChainIds={supportedChainIds} + domain={domain} /> ); diff --git a/apps/playground-web/src/app/navLinks.ts b/apps/playground-web/src/app/navLinks.ts index ee5228f079f..037cc6beced 100644 --- a/apps/playground-web/src/app/navLinks.ts +++ b/apps/playground-web/src/app/navLinks.ts @@ -125,7 +125,7 @@ const universalBridgeSidebarLinks: SidebarLink = { }, { name: "Backend API", - href: "https://bridge.thirdweb.com/reference", + href: "/connect/pay/backend", }, ], }; diff --git a/apps/playground-web/src/lib/client.ts b/apps/playground-web/src/lib/client.ts index e6be51abf73..ed34bcc545f 100644 --- a/apps/playground-web/src/lib/client.ts +++ b/apps/playground-web/src/lib/client.ts @@ -19,6 +19,7 @@ export const THIRDWEB_CLIENT = createThirdwebClient( process.env.THIRDWEB_SECRET_KEY ? { secretKey: process.env.THIRDWEB_SECRET_KEY, + clientId: process.env.NEXT_PUBLIC_THIRDWEB_CLIENT_ID as string, config: { storage: isDev ? { diff --git a/apps/portal/src/app/references/components/TDoc/utils/getSidebarLinkgroups.ts b/apps/portal/src/app/references/components/TDoc/utils/getSidebarLinkgroups.ts index 780bc6428b9..1798f467815 100644 --- a/apps/portal/src/app/references/components/TDoc/utils/getSidebarLinkgroups.ts +++ b/apps/portal/src/app/references/components/TDoc/utils/getSidebarLinkgroups.ts @@ -35,6 +35,7 @@ const tagsToGroup = { "@extension": "Extensions", "@rpc": "RPC", "@transaction": "Transactions", + "@bridge": "Universal Bridge", "@buyCrypto": "Buy Crypto", "@utils": "Utils", "@chain": "Chain", @@ -60,6 +61,7 @@ const sidebarGroupOrder: TagKey[] = [ "@account", "@contract", "@transaction", + "@bridge", "@nebula", "@social", "@auth", diff --git a/packages/service-utils/src/core/api.ts b/packages/service-utils/src/core/api.ts index d56f5f9c1ec..56daf87f9e3 100644 --- a/packages/service-utils/src/core/api.ts +++ b/packages/service-utils/src/core/api.ts @@ -136,6 +136,10 @@ export type ProjectService = name: "nebula"; actions: never[]; } + | { + name: "engineCloud"; + actions: never[]; + } | ProjectBundlerService | ProjectEmbeddedWalletsService; diff --git a/packages/service-utils/src/core/services.ts b/packages/service-utils/src/core/services.ts index 84ba6257b1f..2c539f3edac 100644 --- a/packages/service-utils/src/core/services.ts +++ b/packages/service-utils/src/core/services.ts @@ -74,6 +74,14 @@ export const SERVICE_DEFINITIONS = { // all actions allowed actions: [], }, + engineCloud: { + name: "engineCloud", + title: "Server wallets", + description: + "Server wallets with high transaction throughput and low latency", + // all actions allowed + actions: [], + }, } as const; export const SERVICE_NAMES = Object.keys( diff --git a/packages/thirdweb/scripts/typedoc.mjs b/packages/thirdweb/scripts/typedoc.mjs index 2d42ffd0108..dd7f8ceddff 100644 --- a/packages/thirdweb/scripts/typedoc.mjs +++ b/packages/thirdweb/scripts/typedoc.mjs @@ -10,6 +10,9 @@ const app = await Application.bootstrapWithPlugins({ "src/adapters/eip1193/index.ts", "src/wallets/smart/presets/index.ts", "src/ai/index.ts", + "src/bridge/index.ts", + "src/bridge/Buy.ts", + "src/bridge/Sell.ts", ], exclude: [ "src/exports/*.native.ts", diff --git a/packages/thirdweb/src/extensions/thirdweb/write/publish.ts b/packages/thirdweb/src/extensions/thirdweb/write/publish.ts index 0c098feff2b..5ae855d6719 100644 --- a/packages/thirdweb/src/extensions/thirdweb/write/publish.ts +++ b/packages/thirdweb/src/extensions/thirdweb/write/publish.ts @@ -39,7 +39,7 @@ export type PublishContractParams = { * metadata, * }); * ``` - * @extension thirdweb + * @extension THIRDWEB */ export function publishContract( options: BaseTransactionOptions, diff --git a/packages/thirdweb/src/react/web/ui/PayEmbed.tsx b/packages/thirdweb/src/react/web/ui/PayEmbed.tsx index 7161d9e44c7..d7efb970c35 100644 --- a/packages/thirdweb/src/react/web/ui/PayEmbed.tsx +++ b/packages/thirdweb/src/react/web/ui/PayEmbed.tsx @@ -256,6 +256,7 @@ export type PayEmbedProps = { * buyWithFiat: false, * }} * /> + * ``` * * ### Customize the UI *