diff --git a/apps/portal/redirects.mjs b/apps/portal/redirects.mjs index 5c4d2c6a9b4..a054583cea9 100644 --- a/apps/portal/redirects.mjs +++ b/apps/portal/redirects.mjs @@ -1067,6 +1067,37 @@ const payRedirects = { "/connect/pay/webhooks": "/pay/webhooks", }; +const nebulaRedirects = { + "/nebula": "https://thirdweb.com/nebula", + "/nebula/get-started": "https://thirdweb.com/nebula", + "/nebula/faqs": "https://thirdweb.com/nebula", + "/nebula/troubleshoot": "https://thirdweb.com/nebula", + "/nebula/prompt-guide": "https://thirdweb.com/nebula", + "/nebula/api-reference": "https://thirdweb.com/nebula", + "/nebula/api-reference/chat": "https://thirdweb.com/nebula", + "/nebula/api-reference/execute": "https://thirdweb.com/nebula", + "/nebula/api-reference/list-session": "https://thirdweb.com/nebula", + "/nebula/api-reference/get-session": "https://thirdweb.com/nebula", + "/nebula/api-reference/create-session": "https://thirdweb.com/nebula", + "/nebula/api-reference/update-session": "https://thirdweb.com/nebula", + "/nebula/api-reference/clear-session": "https://thirdweb.com/nebula", + "/nebula/api-reference/delete-session": "https://thirdweb.com/nebula", + "/nebula/key-concepts/chat-execute": "https://thirdweb.com/nebula", + "/nebula/key-concepts/context-filters": "https://thirdweb.com/nebula", + "/nebula/key-concepts/execute-configuration": "https://thirdweb.com/nebula", + "/nebula/key-concepts/response-handling": "https://thirdweb.com/nebula", + "/nebula/key-concepts/sessions": "https://thirdweb.com/nebula", + "/nebula/plugins": "https://thirdweb.com/nebula", + "/nebula/plugins/openai": "https://thirdweb.com/nebula", + "/nebula/plugins/eliza": "https://thirdweb.com/nebula", + "/nebula/mcp-server/get-started": "https://thirdweb.com/nebula", + "/nebula/mcp-server/integrations/claude-desktop": + "https://thirdweb.com/nebula", + "/nebula/mcp-server/integrations/mcp-clients": "https://thirdweb.com/nebula", + "/nebula/tools": "https://thirdweb.com/nebula", + "/nebula/tools/python-sdk/installation": "https://thirdweb.com/nebula", +}; + /** * @type {import('next').NextConfig['redirects']} */ @@ -1088,6 +1119,7 @@ export const redirects = async () => { ...createRedirects(v4ToV5Redirects), ...createRedirects(glossaryRedirects), ...createRedirects(payRedirects), + ...createRedirects(nebulaRedirects), ]; }; diff --git a/apps/portal/src/app/Header.tsx b/apps/portal/src/app/Header.tsx index 6c84c250bd2..86d36a3df9b 100644 --- a/apps/portal/src/app/Header.tsx +++ b/apps/portal/src/app/Header.tsx @@ -51,10 +51,6 @@ const links = [ href: "/insight", name: "Insight", }, - { - href: "/nebula", - name: "Nebula", - }, { href: "/vault", name: "Vault", @@ -127,10 +123,6 @@ export const connectLinks: Array<{ ] as const; const apisLinks = [ - { - href: "/nebula/api-reference", - name: "Nebula", - }, { href: "https://insight.thirdweb.com/reference", name: "Insight", diff --git a/apps/portal/src/app/dotnet/nebula/quickstart/page.mdx b/apps/portal/src/app/dotnet/nebula/quickstart/page.mdx deleted file mode 100644 index fbb5dbac692..00000000000 --- a/apps/portal/src/app/dotnet/nebula/quickstart/page.mdx +++ /dev/null @@ -1,100 +0,0 @@ -import { Details, createMetadata } from "@doc"; - -export const metadata = createMetadata({ - title: "ThirdwebNebula | Thirdweb .NET SDK", - description: - "Instantiate Nebula to interact with a blockchain-powered AI assistant.", -}); - -# [Nebula AI](https://thirdweb.com/nebula) .NET Integration -The last piece of the puzzle required to create .NET apps and games leveraging a blockchain-powered AI assistant or NPC that also has the power to fully execute transactions. - -## Read, Write, Reason. -The best way to understand is to look at examples. - -We'll prepare some context for the AI - here, we'll generate a basic `PrivateKeyWallet` and upgrade it to a `SmartWallet` on Sepolia. -```csharp -// Prepare some context -var myChain = 11155111; // Sepolia -var mySigner = await PrivateKeyWallet.Generate(client); -var myWallet = await SmartWallet.Create(mySigner, myChain); -var myContractAddress = "0xe2cb0eb5147b42095c2FfA6F7ec953bb0bE347D8"; // DropERC1155 -var usdcAddress = "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238"; // Sepolia USDC -``` - -A one liner creates a Nebula session. -```csharp -// Create a Nebula session -var nebula = await ThirdwebNebula.Create(client); -``` - -You can **Chat** with Nebula. The Chat method accepts any `IThirdwebWallet` as an optional parameter, context will automatically be updated. -```csharp -// Chat, passing wallet context -var response1 = await nebula.Chat(message: "What is my wallet address?", wallet: myWallet); -Console.WriteLine($"Response 1: {response1.Message}"); -``` - -You may also pass it smart contract context. -```csharp -// Chat, passing contract context -var response2 = await nebula.Chat( - message: "What's the total supply of token id 0 for this contract?", - context: new NebulaContext(contractAddresses: new List { myContractAddress }, chainIds: new List { myChain }) -); -Console.WriteLine($"Response 2: {response2.Message}"); -``` - -You can have a full on conversation with it with our **Chat** override accepting multiple messages. -```csharp -// Chat, passing multiple messages and context -var response3 = await nebula.Chat( - messages: new List - { - new($"Tell me the name of this contract: {myContractAddress}", NebulaChatRole.User), - new("The name of the contract is CatDrop", NebulaChatRole.Assistant), - new("What's the symbol of this contract?", NebulaChatRole.User), - }, - context: new NebulaContext(contractAddresses: new List { myContractAddress }, chainIds: new List { myChain }) -); -Console.WriteLine($"Response 3: {response3.Message}"); -``` - -Chatting is cool, but what if I just want it to _**do**_ things and stop talking so much? - -You can **Execute** transactions directly with a simple prompt. -```csharp -// Execute, this directly sends transactions -var executionResult = await nebula.Execute("Approve 1 USDC to vitalik.eth", wallet: myWallet, context: new NebulaContext(contractAddresses: new List() { usdcAddress })); -if (executionResult.TransactionReceipts != null && executionResult.TransactionReceipts.Count > 0) -{ - Console.WriteLine($"Receipt: {executionResult.TransactionReceipts[0]}"); -} -else -{ - Console.WriteLine($"Message: {executionResult.Message}"); -} -``` - -Similarly, **Execute** can take in multiple messages. -```csharp -// Batch execute -var batchExecutionResult = await nebula.Execute( - new List - { - new("What's the address of vitalik.eth", NebulaChatRole.User), - new("The address of vitalik.eth is 0xd8dA6BF26964aF8E437eEa5e3616511D7G3a3298", NebulaChatRole.Assistant), - new("Approve 1 USDC to them", NebulaChatRole.User), - }, - wallet: myWallet, - context: new NebulaContext(contractAddresses: new List() { usdcAddress }) -); -if (batchExecutionResult.TransactionReceipts != null && batchExecutionResult.TransactionReceipts.Count > 0) -{ - Console.WriteLine($"Receipts: {JsonConvert.SerializeObject(batchExecutionResult.TransactionReceipts, Formatting.Indented)}"); -} -else -{ - Console.WriteLine($"Message: {batchExecutionResult.Message}"); -} -``` \ No newline at end of file diff --git a/apps/portal/src/app/knowledge-base/troubleshoot/page.mdx b/apps/portal/src/app/knowledge-base/troubleshoot/page.mdx deleted file mode 100644 index d90e588cd40..00000000000 --- a/apps/portal/src/app/knowledge-base/troubleshoot/page.mdx +++ /dev/null @@ -1,3 +0,0 @@ -# Nebula Troubleshoot Guide - -For any issues you encounter while using Nebula, please [visit our support site](https://thirdweb.com/support). \ No newline at end of file diff --git a/apps/portal/src/app/nebula/api-reference/chat/EndpointMetadata.tsx b/apps/portal/src/app/nebula/api-reference/chat/EndpointMetadata.tsx deleted file mode 100644 index c2f0856262c..00000000000 --- a/apps/portal/src/app/nebula/api-reference/chat/EndpointMetadata.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import { ApiEndpoint } from "@/components/Document/APIEndpointMeta/ApiEndpoint"; -import { - nebulaAPI401Response, - nebulaAPI422Response, - nebulaContextParameter, - nebulaSecretKeyHeaderParameter, -} from "../common"; - -const response200Example = `\ -{ - "message": "string", - "actions": [ - { - "session_id": "string", - "request_id": "string", - "type": "init", - "source": "string", - "data": "string" - } - ], - "session_id": "string", - "request_id": "string" -}`; - -export function EndpointMetadata() { - return ( - - ); -} diff --git a/apps/portal/src/app/nebula/api-reference/chat/page.mdx b/apps/portal/src/app/nebula/api-reference/chat/page.mdx deleted file mode 100644 index 11faeb82d91..00000000000 --- a/apps/portal/src/app/nebula/api-reference/chat/page.mdx +++ /dev/null @@ -1,116 +0,0 @@ -import { EndpointMetadata } from './EndpointMetadata'; - - - -# Chat Actions - -Chat actions represent blockchain transactions or operations that Nebula has prepared in response to your request. The response includes both a detailed explanation in the `message` field and the actual transaction data in the `actions` array. - -**Example Response with Chat Action:** -```json -{ - "message": "The transaction to transfer 0.0001 ETH to the address resolved from the ENS name `vitalik.eth` (which is `0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045`) is set up successfully. The simulation indicates that the transaction is likely to succeed.\n\nPlease proceed by signing and confirming the transaction.", - "actions": [ - { - "session_id": "437a0df7-d512-4ef4-95b5-6168ccbbe097", - "request_id": "c2b51ed6-da79-49ac-b411-206a42059509", - "type": "sign_transaction", - "source": "executor", - "data": "{\"chainId\": 11155111, \"to\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\", \"data\": \"0x\", \"value\": \"0x5af3107a4000\"}" - } - ], - "session_id": "437a0df7-d512-4ef4-95b5-6168ccbbe097", - "request_id": "c2b51ed6-da79-49ac-b411-206a42059509" -} -``` - -**Action Properties:** -- `session_id`: Unique identifier for the current session -- `request_id`: Unique identifier for the specific request -- `type`: The type of action (e.g., "sign_transaction") -- `source`: Origin of the action (e.g., "executor") -- `data`: Transaction parameters including: - - `chainId`: Network identifier (e.g., 11155111 for Sepolia) - - `to`: Recipient's address - - `data`: Transaction data (if any) - - `value`: Amount to send in wei - -When handling actions: -1. Parse the `message` field for human-readable transaction details -2. Extract the transaction data from the `actions` array -3. Present transaction details to the user for review -4. Use a local wallet to sign the transaction -5. Broadcast the signed transaction to the network - -**Example Implementation with thirdweb SDK:** -```javascript -import { - createThirdwebClient, - prepareTransaction, - sendTransaction, - privateKeyToAccount -} from "thirdweb"; - -// Example function to handle the API response -async function handleNebulaResponse(response) { - // Initialize thirdweb client - const client = createThirdwebClient({ - secretKey: process.env.THIRDWEB_SECRET_KEY - }); - - // Initialize account - const account = privateKeyToAccount({ - client, - privateKey: process.env.EOA_PRIVATE_KEY - }); - - // Check if we have any actions - if (response.actions && response.actions.length > 0) { - const action = response.actions[0]; - - // Parse the transaction data from the action - const txData = JSON.parse(action.data); - - try { - // Prepare transaction with client - const transaction = prepareTransaction({ - to: txData.to, - data: txData.data, - value: BigInt(txData.value), - chain: txData.chainId, - client - }); - - // Send transaction with account - const result = await sendTransaction({ - transaction, - account - }); - - return result; - } catch (error) { - console.error("Error processing transaction:", error); - throw error; - } - } -} - -// Example usage -const response = await fetch('https://nebula-api.thirdweb.com/chat', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'x-secret-key': 'YOUR_THIRDWEB_SECRET_KEY' - }, - body: JSON.stringify({ - message: "send 0.0001 ETH on sepolia to vitalik.eth", - execute_config: { - mode: "client", - signer_wallet_address: "0xc3F2b2a12Eba0f5989cD75B2964E31D56603a2cE" - } - }) -}); - -const data = await response.json(); -const result = await handleNebulaResponse(data); -``` diff --git a/apps/portal/src/app/nebula/api-reference/clear-session/EndpointMetadata.tsx b/apps/portal/src/app/nebula/api-reference/clear-session/EndpointMetadata.tsx deleted file mode 100644 index 4af16becf6c..00000000000 --- a/apps/portal/src/app/nebula/api-reference/clear-session/EndpointMetadata.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { ApiEndpoint } from "@/components/Document/APIEndpointMeta/ApiEndpoint"; -import { - nebulaAPI401Response, - nebulaFullSessionResponse, - nebulaSecretKeyHeaderParameter, - nebulaSessionIdPathParameter, -} from "../common"; - -export function EndpointMetadata() { - return ( - - ); -} diff --git a/apps/portal/src/app/nebula/api-reference/clear-session/page.mdx b/apps/portal/src/app/nebula/api-reference/clear-session/page.mdx deleted file mode 100644 index c019dd83bd1..00000000000 --- a/apps/portal/src/app/nebula/api-reference/clear-session/page.mdx +++ /dev/null @@ -1,3 +0,0 @@ -import { EndpointMetadata } from './EndpointMetadata'; - - \ No newline at end of file diff --git a/apps/portal/src/app/nebula/api-reference/common.ts b/apps/portal/src/app/nebula/api-reference/common.ts deleted file mode 100644 index f0d5f953cff..00000000000 --- a/apps/portal/src/app/nebula/api-reference/common.ts +++ /dev/null @@ -1,78 +0,0 @@ -import type { APIParameter } from "../../../components/Document/APIEndpointMeta/ApiEndpoint"; - -export const nebulaFullSessionResponse = `\ -{ - "result": { - "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", - "title": "string", - "context": { - "chain_ids": ["1", "137"], - "wallet_address": "0x..." - }, - "history": [ - {} - ], - "account_id": "string", - "model_name": "string", - "is_public": true, - "memory": [ - {} - ], - "action": [ - {} - ], - "archive_at": "2025-01-08T17:22:45.016Z", - "deleted_at": "2025-01-08T17:22:45.016Z", - "created_at": "2025-01-08T17:22:45.016Z", - "updated_at": "2025-01-08T17:22:45.016Z" - } -}`; - -export const nebulaAPI401Response = `\ -{ - "error": { - "message": "401: Authentication failed" - } -}`; - -export const nebulaAPI422Response = `\ -{ - "detail": [ - { - "loc": [ - "string", - 0 - ], - "msg": "string", - "type": "string" - } - ] -}`; - -export const nebulaSecretKeyHeaderParameter: APIParameter = { - description: "Your thirdweb secret key for authentication.", - example: "YOUR_THIRDWEB_SECRET_KEY", - name: "x-secret-key", - required: true, - type: "string", -}; - -export const nebulaSessionIdPathParameter: APIParameter = { - description: "The unique ID of the session", - example: "3fa85f64-5717-4562-b3fc-2c963f66afa6", - name: "session_id", - required: true, - type: "string", -}; -const nebulaContextFilterType = `\ -{ - chainIds: string[] | null; - walletAddress: string | null; -}`; - -export const nebulaContextParameter: APIParameter = { - description: "Provide additional context information along with the message", - name: "context", - required: false, - type: nebulaContextFilterType, -}; diff --git a/apps/portal/src/app/nebula/api-reference/create-session/EndpointMetadata.tsx b/apps/portal/src/app/nebula/api-reference/create-session/EndpointMetadata.tsx deleted file mode 100644 index 4772585a374..00000000000 --- a/apps/portal/src/app/nebula/api-reference/create-session/EndpointMetadata.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { ApiEndpoint } from "@/components/Document/APIEndpointMeta/ApiEndpoint"; -import { - nebulaAPI401Response, - nebulaAPI422Response, - nebulaContextParameter, - nebulaFullSessionResponse, - nebulaSecretKeyHeaderParameter, -} from "../common"; - -export function EndpointMetadata() { - return ( - - ); -} diff --git a/apps/portal/src/app/nebula/api-reference/create-session/page.mdx b/apps/portal/src/app/nebula/api-reference/create-session/page.mdx deleted file mode 100644 index c019dd83bd1..00000000000 --- a/apps/portal/src/app/nebula/api-reference/create-session/page.mdx +++ /dev/null @@ -1,3 +0,0 @@ -import { EndpointMetadata } from './EndpointMetadata'; - - \ No newline at end of file diff --git a/apps/portal/src/app/nebula/api-reference/delete-session/EndpointMetadata.tsx b/apps/portal/src/app/nebula/api-reference/delete-session/EndpointMetadata.tsx deleted file mode 100644 index 0e02d2b846d..00000000000 --- a/apps/portal/src/app/nebula/api-reference/delete-session/EndpointMetadata.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { ApiEndpoint } from "@/components/Document/APIEndpointMeta/ApiEndpoint"; -import { - nebulaAPI401Response, - nebulaAPI422Response, - nebulaSecretKeyHeaderParameter, - nebulaSessionIdPathParameter, -} from "../common"; - -const response200Example = `\ -{ - "result": { - "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", - "deleted_at": "2025-01-08T19:27:37.296Z" - } -}`; - -export function EndpointMetadata() { - return ( - - ); -} diff --git a/apps/portal/src/app/nebula/api-reference/delete-session/page.mdx b/apps/portal/src/app/nebula/api-reference/delete-session/page.mdx deleted file mode 100644 index c019dd83bd1..00000000000 --- a/apps/portal/src/app/nebula/api-reference/delete-session/page.mdx +++ /dev/null @@ -1,3 +0,0 @@ -import { EndpointMetadata } from './EndpointMetadata'; - - \ No newline at end of file diff --git a/apps/portal/src/app/nebula/api-reference/execute/EndpointMetadata.tsx b/apps/portal/src/app/nebula/api-reference/execute/EndpointMetadata.tsx deleted file mode 100644 index 9af5d5aa1ed..00000000000 --- a/apps/portal/src/app/nebula/api-reference/execute/EndpointMetadata.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import { ApiEndpoint } from "@/components/Document/APIEndpointMeta/ApiEndpoint"; -import { - nebulaAPI401Response, - nebulaAPI422Response, - nebulaContextParameter, - nebulaSecretKeyHeaderParameter, -} from "../common"; - -const response200Example = `\ -{ - "message": "string", - "actions": [ - { - "session_id": "string", - "request_id": "string", - "type": "init", - "source": "string", - "data": "string" - } - ], - "session_id": "string", - "request_id": "string" -}`; - -export function EndpointMetadata() { - return ( - - Executes a specified action.
It is similar to /chat but it - only handles transaction requests. It is designed to be used without - history context. - - ), - method: "POST", - origin: "https://nebula-api.thirdweb.com", - path: "/execute", - request: { - bodyParameters: [ - { - description: "The message to be processed.", - example: "Hello", - name: "message", - required: true, - type: "string", - }, - { - description: "Whether to stream the response or not", - example: false, - name: "stream", - required: false, - type: "boolean", - }, - { - description: - "The session ID to associate with the message. If not provided, a new session will be created.", - example: "3fa85f64-5717-4562-b3fc-2c963f66afa6", - name: "session_id", - required: false, - type: "string", - }, - nebulaContextParameter, - ], - headers: [nebulaSecretKeyHeaderParameter], - pathParameters: [], - }, - responseExamples: { - 200: response200Example, - 401: nebulaAPI401Response, - 422: nebulaAPI422Response, - }, - title: "Execute Action", - }} - /> - ); -} diff --git a/apps/portal/src/app/nebula/api-reference/execute/page.mdx b/apps/portal/src/app/nebula/api-reference/execute/page.mdx deleted file mode 100644 index c019dd83bd1..00000000000 --- a/apps/portal/src/app/nebula/api-reference/execute/page.mdx +++ /dev/null @@ -1,3 +0,0 @@ -import { EndpointMetadata } from './EndpointMetadata'; - - \ No newline at end of file diff --git a/apps/portal/src/app/nebula/api-reference/get-session/EndpointMetadata.tsx b/apps/portal/src/app/nebula/api-reference/get-session/EndpointMetadata.tsx deleted file mode 100644 index 2acd77f5132..00000000000 --- a/apps/portal/src/app/nebula/api-reference/get-session/EndpointMetadata.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { ApiEndpoint } from "@/components/Document/APIEndpointMeta/ApiEndpoint"; -import { - nebulaAPI401Response, - nebulaAPI422Response, - nebulaFullSessionResponse, - nebulaSecretKeyHeaderParameter, - nebulaSessionIdPathParameter, -} from "../common"; - -export function EndpointMetadata() { - return ( - - ); -} diff --git a/apps/portal/src/app/nebula/api-reference/get-session/page.mdx b/apps/portal/src/app/nebula/api-reference/get-session/page.mdx deleted file mode 100644 index c019dd83bd1..00000000000 --- a/apps/portal/src/app/nebula/api-reference/get-session/page.mdx +++ /dev/null @@ -1,3 +0,0 @@ -import { EndpointMetadata } from './EndpointMetadata'; - - \ No newline at end of file diff --git a/apps/portal/src/app/nebula/api-reference/list-session/EndpointMetadata.tsx b/apps/portal/src/app/nebula/api-reference/list-session/EndpointMetadata.tsx deleted file mode 100644 index 2b7ac71f436..00000000000 --- a/apps/portal/src/app/nebula/api-reference/list-session/EndpointMetadata.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { ApiEndpoint } from "@/components/Document/APIEndpointMeta/ApiEndpoint"; -import { - nebulaAPI401Response, - nebulaSecretKeyHeaderParameter, -} from "../common"; - -const response200Example = `\ -{ - "result": [ - { - "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", - "title": "string", - "created_at": "2025-01-08T10:52:40.293Z", - "updated_at": "2025-01-08T10:52:40.293Z" - } - ] -}`; - -export function EndpointMetadata() { - return ( - - ); -} diff --git a/apps/portal/src/app/nebula/api-reference/list-session/page.mdx b/apps/portal/src/app/nebula/api-reference/list-session/page.mdx deleted file mode 100644 index c019dd83bd1..00000000000 --- a/apps/portal/src/app/nebula/api-reference/list-session/page.mdx +++ /dev/null @@ -1,3 +0,0 @@ -import { EndpointMetadata } from './EndpointMetadata'; - - \ No newline at end of file diff --git a/apps/portal/src/app/nebula/api-reference/page.mdx b/apps/portal/src/app/nebula/api-reference/page.mdx deleted file mode 100644 index 9ffb69d50c0..00000000000 --- a/apps/portal/src/app/nebula/api-reference/page.mdx +++ /dev/null @@ -1,52 +0,0 @@ -import { createMetadata } from "@doc"; - -export const metadata = createMetadata({ - image: { - title: "API Reference", - icon: "nebula", - }, - title: "thirdweb Nebula API Reference", - description: - "Explore the thirdweb Nebula API reference to unlock the most powerful AI to interact with the blockchain and start building AI powered web3 apps.", -}); - -# Nebula API Reference - -Nebula provides a conversational interface to interact with blockchain data and services, and access to thirdweb tools. - - -## Base URL - -All API requests should be made to: - -```bash -https://nebula-api.thirdweb.com -``` - -## Authentication - -All API endpoints require authentication using the thirdweb secret key. [Learn how to obtain a secret key.](/nebula/get-started). - -Include this key in your request headers: - -```bash -x-secret-key: YOUR_THIRDWEB_SECRET_KEY -``` - -Example curl with authentication: -```bash -curl -X POST https://nebula-api.thirdweb.com/chat \ - -H "Content-Type: application/json" \ - -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY" \ - -d '{ - "message": "send 0.0001 ETH on sepolia to vitalik.eth", - "user_id": "default-user", - "stream": false, - }' -``` - - - - - - diff --git a/apps/portal/src/app/nebula/api-reference/update-session/EndpointMetadata.tsx b/apps/portal/src/app/nebula/api-reference/update-session/EndpointMetadata.tsx deleted file mode 100644 index 9c954c1f4ab..00000000000 --- a/apps/portal/src/app/nebula/api-reference/update-session/EndpointMetadata.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { ApiEndpoint } from "@/components/Document/APIEndpointMeta/ApiEndpoint"; -import { - nebulaAPI401Response, - nebulaAPI422Response, - nebulaContextParameter, - nebulaFullSessionResponse, - nebulaSecretKeyHeaderParameter, - nebulaSessionIdPathParameter, -} from "../common"; - -export function EndpointMetadata() { - return ( - - ); -} diff --git a/apps/portal/src/app/nebula/api-reference/update-session/page.mdx b/apps/portal/src/app/nebula/api-reference/update-session/page.mdx deleted file mode 100644 index c019dd83bd1..00000000000 --- a/apps/portal/src/app/nebula/api-reference/update-session/page.mdx +++ /dev/null @@ -1,3 +0,0 @@ -import { EndpointMetadata } from './EndpointMetadata'; - - \ No newline at end of file diff --git a/apps/portal/src/app/nebula/assets/context-filters.png b/apps/portal/src/app/nebula/assets/context-filters.png deleted file mode 100644 index 05f57b28cea..00000000000 Binary files a/apps/portal/src/app/nebula/assets/context-filters.png and /dev/null differ diff --git a/apps/portal/src/app/nebula/assets/keys.png b/apps/portal/src/app/nebula/assets/keys.png deleted file mode 100644 index d372453b1d0..00000000000 Binary files a/apps/portal/src/app/nebula/assets/keys.png and /dev/null differ diff --git a/apps/portal/src/app/nebula/assets/nebula-diagram.png b/apps/portal/src/app/nebula/assets/nebula-diagram.png deleted file mode 100644 index 3ee94cf6bc9..00000000000 Binary files a/apps/portal/src/app/nebula/assets/nebula-diagram.png and /dev/null differ diff --git a/apps/portal/src/app/nebula/assets/new-project.png b/apps/portal/src/app/nebula/assets/new-project.png deleted file mode 100644 index 8cbc736a17a..00000000000 Binary files a/apps/portal/src/app/nebula/assets/new-project.png and /dev/null differ diff --git a/apps/portal/src/app/nebula/assets/streamed-response.png b/apps/portal/src/app/nebula/assets/streamed-response.png deleted file mode 100644 index a745cd36537..00000000000 Binary files a/apps/portal/src/app/nebula/assets/streamed-response.png and /dev/null differ diff --git a/apps/portal/src/app/nebula/faqs/page.mdx b/apps/portal/src/app/nebula/faqs/page.mdx deleted file mode 100644 index e97c6339591..00000000000 --- a/apps/portal/src/app/nebula/faqs/page.mdx +++ /dev/null @@ -1,65 +0,0 @@ -import { Details } from "@doc"; - -# Nebula FAQs - -
-During Alpha, we are primarily testing the t0 model while conducting limited trials of the upcoming t1 model. -The t0 model utilizes a mixture-of-agents architecture. We are targeting an early Q2 launch for t1, and will -provide additional details around launch. -
- -
-Nebula supports reading and writing capabilities on any EVM-compatible chain. [View the chainlist](https://thirdweb.com/chainlist) for all supported chains. -
- -
-Yes, you may ask Nebula questions in any spoken language. -
- -
-1. Define the Role Clearly: Specify the character’s role and behavior in your prompt. - - Example, “You are an assistant embedded in a blockchain application, designed to provide insights and execute transactions without introducing yourself.” - -2. Avoid phrases that suggest personality traits or self-awareness: Use Contextual Instructions and add specific instructions to avoid unnecessary introductions. - - Example, “Respond directly to queries without stating your identity or greeting users.” - -3. Set Output Expectations: Guide the format of responses. - - Example, “Provide concise answers or actions based on the user’s input without additional commentary.” - -4. Preload Context: Use Nebula’s context filters to scope responses within a specific domain (e.g., blockchain data or transactions) and avoid generic replies. - -5. Session Handling: Utilize Nebula’s session handling feature to maintain relevant context throughout interactions, ensuring responses align with the established character behavior. -
- -
-We recommend using [context filters](/nebula/key-concepts/context-filters) to improve relevant responses. You may also modify hyperparameters such as temperature, top-p, -and more using the OpenAI API. Learn more about our [OpenAI API integration](/nebula/plugins/openai). -
- -
-Nebula supports the read and write context of any verified contract or any contract on the thirdweb dashboard. -For deploying through Nebula, supported contracts include [Token - ERC20](https://thirdweb.com/thirdweb.eth/TokenERC20), -[NFT Collection - ERC721](https://thirdweb.com/thirdweb.eth/TokenERC721), [Edition - ERC1155](https://thirdweb.com/thirdweb.eth/TokenERC1155), -and [Split](https://thirdweb.com/thirdweb.eth/Split) contracts. - -If you have a published contract you would like to enable for deployment through Nebula, please [contact us](https://thirdweb.com/contact-us). -
- -
-Nebula retains memory within the confines of a session. [Learn more about sessions](/nebula/key-concepts/sessions). -
- -
-The context size or window is 128k tokens or approximately 96,000 words which may vary depending on the specific language and text characteristics. -
- -
-Nebula is not currently open source. We are exploring open sourcing Nebula in the future. -
- -
-Depending on the use case, Nebula can be used in a stateless manner by not reusing the same session. Nebula learns from each session, so having more contextual requests will be beneficial and are recommended. -
diff --git a/apps/portal/src/app/nebula/get-started/page.mdx b/apps/portal/src/app/nebula/get-started/page.mdx deleted file mode 100644 index 69f82f416c8..00000000000 --- a/apps/portal/src/app/nebula/get-started/page.mdx +++ /dev/null @@ -1,184 +0,0 @@ -import { Step, Steps, DocImage, Callout, createMetadata } from "@doc"; -import NewProject from "../assets/new-project.png"; -import KeysSetup from "../assets/keys.png"; - -export const metadata = createMetadata({ - image: { - title: "Get Started", - icon: "nebula", - }, - title: "Get started with thirdweb Nebula: Set up Guide", - description: - "How to start building web3 capable apps with thirdweb Nebula, the most powerful AI to interact with the blockchain.", -}); - - -# Get Started - -Learn how to get set up and started with the Nebula API to successfully prepare and enable a connected user to sign a transfer . - -## Prerequisites - -Before you begin, ensure you have the following: - -- A thirdweb account -- A blockchain wallet for executing transactions -- Node.js and npm or yarn installed on your system - -## Obtain Client ID & Secret Key - - - - - -Navigate to the [projects dashboard](https://thirdweb.com/) and create a new project. - - - - - - - -Setup your project and obtain your client ID and secret key. Please note your secret key somewhere safe as it is not recoverable. - - -Client Id is used for client side usage and is restricted by the domain restrictions you set on your API key, it is a public identifier which can be used on the frontend safely. - -Secret key is used for server side or script usage and is not restricted by the domain restrictions. Never expose your secret key in client side code. - - - - - - - - -## Setup API (TypeScript SDK) - - - - - -Install the TypeScript SDK - -```bash -npm install thirdweb -``` - - - - -Setup environmental variables. - - - Ensure you keep your secret key safe and do not expose it in your codebase. We recommend using a - secret key manager such as [AWS Secret Manager](https://aws.amazon.com/secrets-manager/) or [Google Secret Manager](https://cloud.google.com/secret-manager). - - -```jsx -THIRDWEB_SECRET_KEY=your_thirdweb_secret_key -``` - - - - -Import required libraries from thirdweb. - -```jsx -import { - createThirdwebClient, - prepareTransaction, - sendTransaction, - privateKeyToAccount, -} from "thirdweb"; -``` - - - -This function processes the API's response and executes blockchain transactions. - -```jsx -import { generateAccount } from "thirdweb/wallets"; - -async function handleNebulaResponse(response) { - const client = createThirdwebClient({ - secretKey: process.env.THIRDWEB_SECRET_KEY, - }); - - // You can use any wallet- see https://portal.thirdweb.com/typescript/v5/supported-wallets - const account = await generateAccount({ client }); - - if (response.actions && response.actions.length > 0) { - const action = response.actions[0]; - const txData = JSON.parse(action.data); - - try { - const transaction = prepareTransaction({ - to: txData.to, - data: txData.data, - value: BigInt(txData.value), - chain: txData.chainId, - client, - }); - - const result = await sendTransaction({ - transaction, - account, - }); - - console.log("Transaction Successful:", result); - return result; - } catch (error) { - console.error("Error executing transaction:", error); - throw error; - } - } -} -``` - - - - -Send a request to the Nebula API to interpret your natural language command and retrieve the transaction details. - -```jsx -const response = await fetch("https://nebula-api.thirdweb.com/chat", { - method: "POST", - headers: { - "Content-Type": "application/json", - "x-secret-key": process.env.THIRDWEB_SECRET_KEY, - }, - body: JSON.stringify({ - message: "send 0.001 ETH on Sepolia to vitalik.eth", - execute_config: { - mode: "client", - signer_wallet_address: "0xYourWalletAddress", - }, - }), -}); - -const data = await response.json(); -await handleNebulaResponse(data); -``` - - - - -The response from the API will contain the transaction details. - -```jsx -Transaction Successful: { - transactionHash: "0x123abc...", - blockNumber: 1234567, - ... -} -``` - - -Congratulations! You have successfully set up the Nebula API and executed a transaction using the thirdweb SDK. - - -### Additional Resources - -- [Nebula API Documentation](https://portal.thirdweb.com/nebula/api-reference) -- [thirdweb SDK Documentation](https://portal.thirdweb.com/typescript/v5) \ No newline at end of file diff --git a/apps/portal/src/app/nebula/key-concepts/chat-execute/page.mdx b/apps/portal/src/app/nebula/key-concepts/chat-execute/page.mdx deleted file mode 100644 index 29f6750fd0b..00000000000 --- a/apps/portal/src/app/nebula/key-concepts/chat-execute/page.mdx +++ /dev/null @@ -1,5 +0,0 @@ -# Chat & Execute endpoints - -The `/chat` endpoint is used for **natural language interactions** with the AI. It allows users to ask questions, get explanations, or retrieve blockchain-related insights, and execute transactions. - -The `/execute` endpoint is used for **triggering actual blockchain transactions** through AI-generated execution logic. This endpoint **performs actions** on-chain and is designed to be used without historical context. diff --git a/apps/portal/src/app/nebula/key-concepts/context-filters/page.mdx b/apps/portal/src/app/nebula/key-concepts/context-filters/page.mdx deleted file mode 100644 index 8a1f8adec1f..00000000000 --- a/apps/portal/src/app/nebula/key-concepts/context-filters/page.mdx +++ /dev/null @@ -1,24 +0,0 @@ -# Context Filters - -Context filters help control what blockchain data the AI uses to generate responses. - -You can specify: - -- Chain IDs – Choose which blockchain networks to pull data from. -- Wallet Address – Focus on a specific wallet’s transactions, balances, and interactions. - -Benefits: - -- **More relevant answers:** AI focuses only on the data you care about. -- **Enable Scope**: Keep results relevant to networks and wallets specified. - -Example, - -```jsx -{ - "context": { - "chain_ids": ["1"], // Ethereum network - "wallet_address": "0x123...abc" // Specific wallet to analyze - } -} -``` \ No newline at end of file diff --git a/apps/portal/src/app/nebula/key-concepts/execute-configuration/page.mdx b/apps/portal/src/app/nebula/key-concepts/execute-configuration/page.mdx deleted file mode 100644 index 1ad3106f765..00000000000 --- a/apps/portal/src/app/nebula/key-concepts/execute-configuration/page.mdx +++ /dev/null @@ -1,19 +0,0 @@ -# Execute Configuration - -Configure transaction execution behavior using the execute config: - -```json -{ - "execute_config": { - "mode": "client", - "signer_wallet_address": "0x..." - } -} -``` - -Parameters: - -- `mode`: Execution mode (currently supports "client") -- `signer_wallet_address`: Wallet address for transaction signing - -When mode is "client", Nebula returns an unsigned transaction for local wallet signing. \ No newline at end of file diff --git a/apps/portal/src/app/nebula/key-concepts/response-handling/page.mdx b/apps/portal/src/app/nebula/key-concepts/response-handling/page.mdx deleted file mode 100644 index 383a5019270..00000000000 --- a/apps/portal/src/app/nebula/key-concepts/response-handling/page.mdx +++ /dev/null @@ -1,134 +0,0 @@ -import { DocImage } from '@doc'; -import StreamedResponse from "../../assets/streamed-response.png"; - -# Response Handling - -## Streamed vs non-streamed responses - -- **Streaming Responses**: This method streams data in real-time, providing immediate feedback as the response is generated. Set the `stream` parameter to `true` in your request, the API delivers responses via Server-Sent Events (SSE). -- **Non-Streaming Responses**: When the `stream` parameter is set to `false`, the API returns the complete response in a single JSON payload after processing is complete. - - - -For `stream:true`, you'll need to handle the following event types: - -- `init`: Initializes the stream and provides session information -- `presence`: Provides backend status updates about worker processing -- `action`: Contains blockchain transaction or action data -- `delta`: Contains chunks of the response message text -- `error`: Contains error information if something goes wrong - - -**Example SSE Stream:** - -```jsx -event: init -data: { - "session_id": "f4b45429-9570-4ee8-8c8f-8b267429915a", - "request_id": "9efc7f6a-8576-4d9c-8603-f6c72aa72164", - "type": "init", - "source": "user", - "data": "" -} - -event: presence -data: { - "session_id": "f4b45429-9570-4ee8-8c8f-8b267429915a", - "request_id": "9efc7f6a-8576-4d9c-8603-f6c72aa72164", - "type": "presence", - "source": "executor", - "data": "Performing function execution: ExecuteNativeTransferClientSigning" -} - -event: action -data: { - "session_id": "f4b45429-9570-4ee8-8c8f-8b267429915a", - "request_id": "9efc7f6a-8576-4d9c-8603-f6c72aa72164", - "type": "sign_transaction", - "source": "executor", - "data": "{\"chainId\": 11155111, \"to\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\", \"data\": \"0x\", \"value\": \"0x5af3107a4000\"}" -} - -event: delta -data: {"v": "To send 0.0001 ETH on the Sepolia network"} - -event: delta -data: {"v": " to the address associated with"} -``` -**JavaScript Example for handling streams:** - -```jsx -const eventSource = new EventSource("/chat", { - headers: { - "x-secret-key": "YOUR_THIRDWEB_SECRET_KEY", - }, -}); - -let messageText = ""; - -eventSource.addEventListener("init", (event) => { - const data = JSON.parse(event.data); - console.log("Stream initialized:", data); -}); - -eventSource.addEventListener("presence", (event) => { - const data = JSON.parse(event.data); - console.log("Backend status:", data.data); -}); - -eventSource.addEventListener("action", (event) => { - const data = JSON.parse(event.data); - console.log("Received action:", data); - if (data.type === "sign_transaction") { - // Handle transaction signing - handleTransaction(data); - } -}); - -eventSource.addEventListener("delta", (event) => { - const data = JSON.parse(event.data); - messageText += data.v; - console.log("Current message:", messageText); -}); - -eventSource.addEventListener("error", (event) => { - const error = JSON.parse(event.data); - console.error("Error:", error); - eventSource.close(); -}); -``` -## Response Format - -By default, responses are returned as JSON Objects. You may optionally specify the desired response format using the `response_format` parameter. - -- **JSON Object**: To receive the response as a JSON object, set `response_format` to `{ "type": "json_object" }`. -- **JSON Schema**: For responses adhering to a specific JSON schema, set `response_format` to `{ "type": "json_schema", "json_schema": { ... } }`, where you define the desired schema structure. - -Example with `json_schema` format, - -```jsx -curl -X POST https://nebula-api.thirdweb.com/chat \ --H "Content-Type: application/json" \ --H "x-secret-key: ...." \ --d '{ - "message": "what is the balance of eimanabdel.eth on contract 0xddC761FEb956Caf62dfa1c8b42e9f33Df424715A on sepolia", - "stream": false, - "response_format": { - "type": "json_schema", - "json_schema": { - "type": "object", - "properties": { - "ens_name": { - "type": "string", - "description": "The ENS name being queried" - }, - "balance": { - "type": "integer", - "description": "The balance of the address on the specified contract" - } - }, - "required": ["ens_name", "balance"] - } - } -}' -``` \ No newline at end of file diff --git a/apps/portal/src/app/nebula/key-concepts/sessions/page.mdx b/apps/portal/src/app/nebula/key-concepts/sessions/page.mdx deleted file mode 100644 index 0423b988301..00000000000 --- a/apps/portal/src/app/nebula/key-concepts/sessions/page.mdx +++ /dev/null @@ -1,15 +0,0 @@ - -# Sessions - -Sessions are a way to maintain context across multiple interactions with a user. Since LLMs are stateless by default, sessions help simulate continuity. - -- Sessions are created automatically when calling `/chat` without a `session_id` or can be created explicitly by calling the `/session` endpoint. -- Sessions can be managed through the following endpoints: - - [Create Session](/nebula/api-reference/create-session) - - [Get Session](/nebula/api-reference/get-session) - - [Clear Session](/nebula/api-reference/clear-session) - - [Update Session](/nebula/api-reference/update-session) - - [Delete Session](/nebula/api-reference/delete-session) - - [List Sessions](/nebula/api-reference/list-sessions) - -- Sessions persist your conversation history, custom configurations for blockchain data, and thirdweb tools interactions. diff --git a/apps/portal/src/app/nebula/layout.tsx b/apps/portal/src/app/nebula/layout.tsx deleted file mode 100644 index bdc827a9ce4..00000000000 --- a/apps/portal/src/app/nebula/layout.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { createMetadata } from "@doc"; -import { DocLayout } from "@/components/Layouts/DocLayout"; -import { sidebar } from "./sidebar"; - -export default async function Layout(props: { children: React.ReactNode }) { - return ( - - {props.children} - - ); -} - -export const metadata = createMetadata({ - description: - "thirdweb Nebula Docs : explore the Nebula API Reference and unlock the most powerful AI to interact with the blockchain yet.", - image: { - icon: "nebula", - title: "Nebula Docs", - }, - title: "thirdweb Nebula Documentation", -}); diff --git a/apps/portal/src/app/nebula/mcp-server/get-started/page.mdx b/apps/portal/src/app/nebula/mcp-server/get-started/page.mdx deleted file mode 100644 index 198afeb9a38..00000000000 --- a/apps/portal/src/app/nebula/mcp-server/get-started/page.mdx +++ /dev/null @@ -1,93 +0,0 @@ -import { OpenSourceCard, Callout } from "@doc"; - -# Get Started - -Learn how to get started with the thirdweb MCP server. - -### Prerequisites - -- Python 3.10 or higher -- uv - -### Run with uvx -```bash -THIRDWEB_SECRET_KEY=... \ - uvx thirdweb-mcp -``` - -### Install and run with pipx - -```bash -pipx install thirdweb-mcp - -THIRDWEB_SECRET_KEY=... \ - thirdweb-mcp -``` - -### Install from source - -```bash -git clone https://github.com/thirdweb-dev/ai.git thirdweb-ai -cd thirdweb-ai/python/thirdweb-mcp -uv sync -``` - -## Configuration - -The thirdweb MCP server requires configuration based on which services you want to enable: - -1. **thirdweb Secret Key**: Required for Nebula and Insight services. Obtain from the [thirdweb dashboard](https://thirdweb.com/dashboard). -2. **Chain IDs**: Blockchain network IDs to connect to (e.g., 1 for Ethereum mainnet, 137 for Polygon). -3. **Engine Configuration**: If using the Engine service, you'll need the Engine URL and authentication JWT. - -You can provide these through command-line options or environment variables. - -## Usage - -### Command-line options - -```bash -# Basic usage with default settings (stdio transport with Nebula and Insight) -THIRDWEB_SECRET_KEY=... thirdweb-mcp - -# Using SSE transport on a custom port -THIRDWEB_SECRET_KEY=... thirdweb-mcp --transport sse --port 8080 - -# Enabling all services with specific chain IDs -THIRDWEB_SECRET_KEY=... thirdweb-mcp --chain-id 1 --chain-id 137 \ - --engine-url YOUR_ENGINE_URL \ - --engine-auth-jwt YOUR_ENGINE_JWT \ - --engine-backend-wallet-address YOUR_ENGINE_BACKEND_WALLET_ADDRESS -``` - -### Environment variables - -You can also configure the MCP server using environment variables: - -- `THIRDWEB_SECRET_KEY`: Your thirdweb API secret key -- `THIRDWEB_ENGINE_URL`: URL endpoint for thirdweb Engine service -- `THIRDWEB_ENGINE_AUTH_JWT`: Authentication JWT token for Engine -- `THIRDWEB_ENGINE_BACKEND_WALLET_ADDRESS`: Wallet address for Engine backend - -## Available Services - -### Nebula - -Autonomous onchain execution and analysis: -- Analyze smart contract code -- Contract interactions and deployments -- Autonomous onchain tasks execution - -### Insight - -Offers blockchain data analysis capabilities: -- Query on-chain data across multiple networks -- Analyze transactions, blocks, and smart contract events -- Monitor wallet activities and token movements - -### Engine - -Integrates with thirdweb's backend infrastructure: -- Deploy smart contracts -- Interact with deployed contracts -- Manage wallet connections and transactions \ No newline at end of file diff --git a/apps/portal/src/app/nebula/mcp-server/integrations/claude-desktop/page.mdx b/apps/portal/src/app/nebula/mcp-server/integrations/claude-desktop/page.mdx deleted file mode 100644 index 580a3745ec2..00000000000 --- a/apps/portal/src/app/nebula/mcp-server/integrations/claude-desktop/page.mdx +++ /dev/null @@ -1,31 +0,0 @@ -# Claude Desktop - -Learn how to add the MCP server to Claude Desktop: - -1. Install the MCP: `pipx install thirdweb-mcp` - -2. Create or edit the Claude Desktop configuration file at: - - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json` - - Windows: `%APPDATA%\Claude\claude_desktop_config.json` - - Linux: `~/.config/Claude/claude_desktop_config.json` - -3. Add the following configuration: - - ```json - { - "mcpServers": { - "thirdweb-mcp": { - "command": "thirdweb-mcp", - "args": [], // add `--chain-id` optionally - "env": { - "THIRDWEB_SECRET_KEY": "your thirdweb secret key from dashboard", - "THIRDWEB_ENGINE_URL": "(OPTIONAL) your engine url", - "THIRDWEB_ENGINE_AUTH_JWT": "(OPTIONAL) your engine auth jwt", - "THIRDWEB_ENGINE_BACKEND_WALLET_ADDRESS": "(OPTIONAL) your engine backend wallet address", - }, - } - } - } - ``` - -4. Restart Claude Desktop for the changes to take effect. \ No newline at end of file diff --git a/apps/portal/src/app/nebula/mcp-server/integrations/mcp-clients/page.mdx b/apps/portal/src/app/nebula/mcp-server/integrations/mcp-clients/page.mdx deleted file mode 100644 index 682b378ed7a..00000000000 --- a/apps/portal/src/app/nebula/mcp-server/integrations/mcp-clients/page.mdx +++ /dev/null @@ -1,15 +0,0 @@ - -### MCP Clients - -Learn how to integrate the thirdweb MCP server with various clients. - -This server can be integrated with any client that supports the Model Context Protocol: - -1. Run the MCP server with the appropriate configuration -2. Connect your MCP client to the server using the selected transport (stdio or SSE) -3. Access thirdweb services through the exposed MCP tools - - -#### References - -[thirdweb-mcp references](https://github.com/thirdweb-dev/ai/tree/main/python/thirdweb-mcp) diff --git a/apps/portal/src/app/nebula/page.mdx b/apps/portal/src/app/nebula/page.mdx deleted file mode 100644 index 490248446ca..00000000000 --- a/apps/portal/src/app/nebula/page.mdx +++ /dev/null @@ -1,100 +0,0 @@ -import { WalletIcon, FileIcon, MessageCircleIcon, BracesIcon, BotIcon, BlocksIcon } from "lucide-react"; -import { DocImage, createMetadata, FeatureCard, GithubTemplateCard, Stack, Grid, ArticleCard, ArticleIconCard } from "@doc"; -import NebulaDiagram from "./assets/nebula-diagram.png"; -import SupportedChains from "../_images/supported-chains.png"; -import { ExternalLink } from "lucide-react"; - -export const metadata = createMetadata({ - image: { - title: "Nebula Documentation", - icon: "nebula", - }, - title: "thirdweb Nebula Documentation", - description: - "thirdweb Nebula Docs : explore the Nebula API Reference and unlock the most powerful AI to interact with the blockchain & build AI powered web3 apps.", -}); - -# Nebula - -Nebula is a natural language model with improved blockchain reasoning, autonomous transaction capabilities, and real-time access to the blockchain. [Learn more about Nebula.](https://blog.thirdweb.com/introducing-nebula-a-powerful-blockchain-model-to-read-write-and-reason-onchain/) - -Nebula is currently live in Beta. - - - - - -## Nebula API - - - -## Features - -
- } - /> - - } - /> - - } - /> - - } - /> -
- -## Video Tutorials - - - - - - - - - -## Templates - - - - - - - - - -## Supported Chains -Nebula is supported on every EVM compatible chain. To view the full list, visit [thirdweb chainlist](https://thirdweb.com/chainlist?service=nebula). - - - - - - diff --git a/apps/portal/src/app/nebula/plugins/eliza/page.mdx b/apps/portal/src/app/nebula/plugins/eliza/page.mdx deleted file mode 100644 index b883d6cf63e..00000000000 --- a/apps/portal/src/app/nebula/plugins/eliza/page.mdx +++ /dev/null @@ -1,106 +0,0 @@ -import { Callout, OpenSourceCard, Step, Steps, DocImage, createMetadata } from '@doc' -import NewProject from "../../assets/new-project.png"; -import KeysSetup from "../../assets/keys.png"; - -export const metadata = createMetadata({ - image: { - title: "Eliza x Nebula", - icon: "nebula", - }, - title: "Integrate ElizaOS x thirdweb Nebula", - description: - "Learn about how you can unlock advanced AI capabilities for your app with thirdweb Nebula and Eliza Integration.", -}); - -# Eliza - -Eliza is a simple, fast, and lightweight AI agent framework to build flexible, scalable, and secure conversational agents. - -With the thirdweb plugin, you can easily integrate Nebula into an AI agent built with Eliza to provide increasingly accurate read, write, and reasoning capabilities to blockchain-related prompts: - - - - -## Prerequisites - -- Create a thirdweb account -- Node.js 23+ and pnpm 9+ installed - -## Obtain Client ID & Secret Key - - - - - -Navigate to the [projects dashboard](https://thirdweb.com/) and create a new project. - - - - - - - -Setup your project and obtain your client ID and secret key. Please note your secret key somewhere safe as it is not recoverable. - - -Client Id is used for client side usage and is restricted by the domain restrictions you set on your API key, it is a public identifier which can be used on the frontend safely. - -Secret key is used for server side or script usage and is not restricted by the domain restrictions. Never expose your secret key in client side code. - - - - - - - - -## Setup Eliza Starter - -If you have not created a project with Eliza, it is recommended to start with the Eliza Starter repository: - - - - -The Nebula plugin is only available on version 0.1.8 of Eliza and above and is available by default. - - -Clone the starter repository - -```bash -git clone https://github.com/elizaos/eliza-starter.git -``` - - - -Create a .env file and add your secret key and any other environmental variables: - -```bash -THIRDWEB_SECRET_KEY=your_secret_key -``` - - -Client Id is used for client side usage and is restricted by the domain restrictions you set on your API key, it is a public identifier which can be used on the frontend safely. - -Secret key is used for server side or script usage and is not restricted by the domain restrictions. Never expose your secret key in client side code. - - - - -```bash -pnpm i -``` - - - -```bash -pnpm start -``` - - - - -### Additional Resources - -- [Eliza Documentation](https://elizaos.github.io/eliza/) \ No newline at end of file diff --git a/apps/portal/src/app/nebula/plugins/openai/page.mdx b/apps/portal/src/app/nebula/plugins/openai/page.mdx deleted file mode 100644 index 86c087952cd..00000000000 --- a/apps/portal/src/app/nebula/plugins/openai/page.mdx +++ /dev/null @@ -1,52 +0,0 @@ -import { createMetadata } from "@doc"; - -export const metadata = createMetadata({ - image: { - title: "OpenAI x Nebula", - icon: "nebula", - }, - title: "Integrate OpenAI x thirdweb Nebula", - description: - "Learn about how you can unlock advanced AI capabilities for your app with thirdweb Nebula and OpenAI integration.", -}); - -# OpenAI - -### Chat Completions API - -Compatible with OpenAI’s Chat Completion API to process chat history and generate context-aware responses. - -```python -from openai import OpenAI - -client = OpenAI( - base_url="https://nebula-api.thirdweb.com", - api_key="{{THIRDWEB_SECRET_KEY}}", -) -chat_completion = client.chat.completions.create( - model="t0", - messages=[{"role": "user", "content": "Hello Nebula!"}], - stream=False, - extra_body={ "context": { "wallet_address": "0x..." }} -) - -print(chat_completion) -``` - -### Models API - -Compatible with OpenAI’s Models API to list out models used. - -```python -from openai import OpenAI - -# https://nebula-api.thirdweb.com/models - -client = OpenAI( - base_url="https://nebula-api.thirdweb.com/", - api_key="", -) - -models = client.models.list() -print(models) -``` \ No newline at end of file diff --git a/apps/portal/src/app/nebula/plugins/page.mdx b/apps/portal/src/app/nebula/plugins/page.mdx deleted file mode 100644 index e2b30ec2dfc..00000000000 --- a/apps/portal/src/app/nebula/plugins/page.mdx +++ /dev/null @@ -1,20 +0,0 @@ -import { createMetadata } from "@doc"; - -export const metadata = createMetadata({ - image: { - title: "Plugins & Integrations", - icon: "nebula", - }, - title: "thirdweb Nebula Compatible AI Plugins", - description: - "Learn about AI plugins supported by thirdweb Nebula, such as OpenAI & Eliza.", -}); - -import { Callout } from '@doc' - -# Plugins - -- [OpenAI](/nebula/plugins/openai) -- [Eliza](/nebula/plugins/eliza) - -We are actively adding more integrations, for any specific requests please [contact us](https://thirdweb.com/contact). \ No newline at end of file diff --git a/apps/portal/src/app/nebula/prompt-guide/page.mdx b/apps/portal/src/app/nebula/prompt-guide/page.mdx deleted file mode 100644 index c93e4a6a47d..00000000000 --- a/apps/portal/src/app/nebula/prompt-guide/page.mdx +++ /dev/null @@ -1,28 +0,0 @@ -import {createMetadata} from "@doc"; - -export const metadata = createMetadata({ - image: { - title: "Prompt Guide", - icon: "nebula", - }, - title: "thirdweb Nebula Prompt Guide", - description: - "A comprehensive prompt guide to help you unlock the most powerful AI to interact with the blockchain & build AI powered web3 apps.", -}); - -# Prompt Guide - -Maximize the potential of Nebula. Whether you’re new to blockchain development or an experienced user, this document will help you craft prompts that fully leverage Nebula’s blockchain specific features. - -### Supported Actions - -| **Action** | **Description** | **Examples** | -|-----------------------------|----------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **Bridge & Swap** | Bridge and swap native currencies | • "Swap 1 USDC to 1 USDT on the Ethereum Mainnet"
• "Bridge 0.5 ETH from Ethereum Mainnet to Polygon"
| -| **Transfer** | Send native and ERC-20 currencies | • "Send 0.1 ETH to vitalik.eth"
• "Transfer 1 USDC to saminacodes.eth on Base"
| -| **Deploy** | Deploy published contracts | • "Deploy a Token ERC20 Contract with name "Hello World" and description "My Hello Contract" on Ethereum."
• "Deploy a Split contract with two recipients."
• "Deploy an ERC1155 Contract named 'Hello World' with description 'Hello badges on Ethereum'"
| -| **Understand** | Retrieve information about smart contracts. | • "What ERC standards are implemented by contract address 0x59325733eb952a92e069C87F0A6168b29E80627f on Ethereum?"
• "What functions can I use to mint more of my contract's NFTs?"
• "What is the total supply of NFTs on 0x8a90CAb2b38dba80c64b7734e58Ee1dB38B8992e?" | -| **Interact** | Query wallet balances, addresses, and token holdings. | • "How much ETH is in my wallet?"
• "What is the wallet address of vitalik.eth?"
• "Does my wallet hold USDC on Base?" | -| **Explore** | Access blockchain-specific data. | • "What is the last block on zkSync?"
• "What is the current gas price on Avalanche C-Chain?"
• "Can you show me transaction details for 0xdfc450bb39e44bd37c22e0bfd0e5212edbea571e4e534d87b5cbbf06f10b9e04 on Optimism?" | -| **Research** | Obtain details about tokens, their addresses, and current prices. | • "What is the address of USDC on Ethereum?"
• "Is there a UNI token on Arbitrum?"
• "What is the current price of ARB?" | -| **Build** | Implement features using Web3 SDKs and tools. | • "How can I add a connect wallet button to my web app? I want to support users connecting with both email/social wallets and MetaMask and use smart wallets."
• "Can you show me how to claim an NFT from an ERC721 using TypeScript?"
• "I have an ERC1155 contract from thirdweb. Can you show me how to generate and mint with a signature?" | diff --git a/apps/portal/src/app/nebula/sidebar.tsx b/apps/portal/src/app/nebula/sidebar.tsx deleted file mode 100644 index 149566ffd1d..00000000000 --- a/apps/portal/src/app/nebula/sidebar.tsx +++ /dev/null @@ -1,215 +0,0 @@ -import { - BlocksIcon, - BracesIcon, - CodeIcon, - ExternalLinkIcon, - KeyIcon, - MessageCircleQuestionIcon, - PencilRulerIcon, - RocketIcon, - WorkflowIcon, - WrenchIcon, -} from "lucide-react"; -import type { SideBar } from "@/components/Layouts/DocLayout"; -import { NebulaSideIcon, TypeScriptIcon, UnityIcon } from "@/icons"; - -export const sidebar: SideBar = { - links: [ - { - href: "/nebula", - icon: , - name: "Overview", - }, - { - href: "/nebula/prompt-guide", - icon: , - name: "Prompt Guide", - }, - { - href: "https://nebula.thirdweb.com", - icon: , - name: "Playground", - }, - { - separator: true, - }, - { - isCollapsible: false, - links: [ - { - href: "/nebula/get-started", - icon: , - name: "Get Started", - }, - { - icon: , - links: [ - { - href: "/nebula/key-concepts/chat-execute", - name: "Chat & Execute", - }, - { - href: "/nebula/key-concepts/context-filters", - name: "Context Filters", - }, - { - href: "/nebula/key-concepts/execute-configuration", - name: "Execute Config", - }, - { - href: "/nebula/key-concepts/response-handling", - name: "Response Handling", - }, - { - href: "/nebula/key-concepts/sessions", - name: "Sessions", - }, - ], - name: "Key Concepts", - }, - { - href: "/nebula/api-reference", - icon: , - links: [ - { - expanded: true, - links: [ - { - href: "/nebula/api-reference/chat", - name: "Send Message", - }, - { - href: "/nebula/api-reference/execute", - name: "Execute Action", - }, - ], - name: "Chat", - }, - { - expanded: true, - links: [ - { - href: "/nebula/api-reference/list-session", - name: "List Sessions", - }, - { - href: "/nebula/api-reference/get-session", - name: "Get Session", - }, - { - href: "/nebula/api-reference/create-session", - name: "Create Session", - }, - { - href: "/nebula/api-reference/update-session", - name: "Update Session", - }, - { - href: "/nebula/api-reference/clear-session", - name: "Clear Session", - }, - { - href: "/nebula/api-reference/delete-session", - name: "Delete Session", - }, - ], - name: "Session", - }, - ], - name: "API Reference", - }, - { - icon: , - links: [ - { - href: "/references/typescript/v5/chat", - icon: , - name: "Typescript", - }, - { - href: "/dotnet/nebula/quickstart", - icon: , - name: "Unity", - }, - ], - name: "SDK Reference", - }, - { - href: "/nebula/plugins", - icon: , - links: [ - { - href: "/nebula/plugins/openai", - name: "OpenAI", - }, - { - href: "/nebula/plugins/eliza", - name: "Eliza", - }, - ], - name: "Plugins & Integrations", - }, - ], - name: "Nebula (API)", - }, - { - isCollapsible: false, - links: [ - { - href: "/nebula/mcp-server/get-started", - icon: , - name: "Get Started", - }, - { - icon: , - links: [ - { - href: "/nebula/mcp-server/integrations/claude-desktop", - name: "Claude Desktop", - }, - { - href: "/nebula/mcp-server/integrations/mcp-clients", - name: "MCP Clients", - }, - ], - name: "Integrations", - }, - ], - name: "MCP Server", - }, - { - isCollapsible: false, - links: [ - { - icon: , - links: [ - { - href: "/nebula/tools/python-sdk/installation", - name: "Installation", - }, - { - href: "https://github.com/thirdweb-dev/ai/tree/main/python/examples", - name: "Examples", - }, - ], - name: "Python SDK", - }, - ], - name: "Tools", - }, - { - separator: true, - }, - { - href: "/nebula/troubleshoot", - icon: , - name: "Troubleshoot", - }, - { - href: "/nebula/faqs", - icon: , - name: "FAQs", - }, - ], - name: "AI", -}; diff --git a/apps/portal/src/app/nebula/tools/page.mdx b/apps/portal/src/app/nebula/tools/page.mdx deleted file mode 100644 index 4026317a86c..00000000000 --- a/apps/portal/src/app/nebula/tools/page.mdx +++ /dev/null @@ -1,2 +0,0 @@ -# Installation - diff --git a/apps/portal/src/app/nebula/tools/python-sdk/installation/page.mdx b/apps/portal/src/app/nebula/tools/python-sdk/installation/page.mdx deleted file mode 100644 index c4448a8e40c..00000000000 --- a/apps/portal/src/app/nebula/tools/python-sdk/installation/page.mdx +++ /dev/null @@ -1,50 +0,0 @@ -# Python SDK - -#### Installation - -```bash -# Install core package with all framework adapters -pip install "thirdweb-ai[all]" - -# Or install with specific framework adapters -pip install "thirdweb-ai[openai]" # For OpenAI Agents -pip install "thirdweb-ai[langchain]" # For LangChain -pip install "thirdweb-ai[agentkit]" # For Coinbase Agentkit -pip install "thirdweb-ai[goat]" # For GOAT SDK -# ... many more framework supported -``` - -See the list of [supported framework and installation guides](python/thirdweb-ai#install-with-framework-specific-adapters) - -#### Basic Usage - -```python -from thirdweb_ai import Engine, Insight, Nebula, Tool - -# Initialize services -insight = Insight(secret_key=...) -nebula = Nebula(secret_key=...) -engine = Engine(...) - -# Example: Create tools for AI agents -tools = [ - *insight.get_tools(), - *nebula.get_tools(), - *engine.get_tools(), - # Or pick an individual tool from the services -] - -# Example: Framework integration (LangChain) -from thirdweb_ai.adapters.langchain import get_langchain_tools -langchain_tools = get_langchain_tools(tools) -agent = create_tool_calling_agent(tools=langchain_tools, ...) - -# Example: Framework integration (OpenAI Agents) -from thirdweb_ai.adapters.openai import get_openai_tools -openai_tools = get_openai_tools(tools) -agent = Agent(name="thirdweb Assistant", tools=tools) - -# see python/examples for other framework integration -``` - -More [information](python/thirdweb-ai) \ No newline at end of file diff --git a/apps/portal/src/app/nebula/troubleshoot/page.mdx b/apps/portal/src/app/nebula/troubleshoot/page.mdx deleted file mode 100644 index d90e588cd40..00000000000 --- a/apps/portal/src/app/nebula/troubleshoot/page.mdx +++ /dev/null @@ -1,3 +0,0 @@ -# Nebula Troubleshoot Guide - -For any issues you encounter while using Nebula, please [visit our support site](https://thirdweb.com/support). \ No newline at end of file diff --git a/apps/portal/src/app/page.tsx b/apps/portal/src/app/page.tsx index 03eefb09404..e185f329b91 100644 --- a/apps/portal/src/app/page.tsx +++ b/apps/portal/src/app/page.tsx @@ -14,7 +14,6 @@ import { BridgeIcon } from "../icons/products/BridgeIcon"; import { ConnectIcon } from "../icons/products/ConnectIcon"; import { EngineIcon } from "../icons/products/EngineIcon"; import { InsightIcon } from "../icons/products/InsightIcon"; -import { NebulaIcon } from "../icons/products/NebulaIcon"; import { PlaygroundIcon } from "../icons/products/PlaygroundIcon"; import { cn } from "../lib/utils"; import DocsHeroDark from "./_images/docs-hero-dark.png"; @@ -148,12 +147,6 @@ function ReferenceSection() { iconClassName="text-muted-foreground" title="Bundler" /> - ); @@ -194,16 +187,10 @@ function LearningResourcesSection() { icon={InsightIcon} title="Insight" /> - diff --git a/apps/portal/src/components/Document/APIEndpointMeta/ApiEndpoint.tsx b/apps/portal/src/components/Document/APIEndpointMeta/ApiEndpoint.tsx deleted file mode 100644 index c57556e1a85..00000000000 --- a/apps/portal/src/components/Document/APIEndpointMeta/ApiEndpoint.tsx +++ /dev/null @@ -1,279 +0,0 @@ -import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; -import { cn } from "../../../lib/utils"; -import { CodeBlock } from "../Code"; -import { Details } from "../Details"; -import { Heading } from "../Heading"; -import { Paragraph } from "../Paragraph"; -import { RequestExample } from "./RequestExample"; - -export type APIParameter = - | { - name: string; - required: false; - description: React.ReactNode; - type?: string; - example?: string | boolean | number | object; - } - | { - name: string; - required: true; - example: string; - description: React.ReactNode; - type?: string; - }; - -type ApiEndpointMeta = { - title: string; - description: React.ReactNode; - path: string; - origin: string; - method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH"; - request: { - pathParameters: APIParameter[]; - headers: APIParameter[]; - bodyParameters: APIParameter[]; - }; - responseExamples: Record; -}; - -export function ApiEndpoint(props: { metadata: ApiEndpointMeta }) { - const { request, responseExamples } = props.metadata; - - const requestExamples: Array<{ - lang: "javascript" | "bash"; - code: string; - label: string; - }> = [ - { - code: createFetchCommand({ - metadata: props.metadata, - }), - label: "Fetch", - lang: "javascript", - }, - { - code: createCurlCommand({ - metadata: props.metadata, - }), - label: "Curl", - lang: "bash", - }, - ]; - - const responseKeys = Object.keys(responseExamples); - - return ( -
-
-
- - {props.metadata.title} - - {props.metadata.description} -
- - {/* Headers */} - {request.headers.length > 0 && ( - - )} - - {/* Path parameters */} - {request.pathParameters.length > 0 && ( - - )} - - {/* Body */} - {request.bodyParameters.length > 0 && ( - - )} -
- -
- - Request - -
- on server and pass it to client - codeExamples={requestExamples.map((example) => { - return { - code: ( - - ), - label: example.label, - }; - })} - endpointUrl={props.metadata.path} - method={props.metadata.method} - /> -
-
- -
- - Response - -
- - - {responseKeys.map((status) => ( - -
- - {status} -
-
- ))} -
- - {responseKeys.map((status) => ( - - - - ))} -
-
-
-
- ); -} - -function ParameterSection(props: { - title: string; - parameters: APIParameter[]; -}) { - return ( -
- - {props.title} - -
- {props.parameters - .sort((a, b) => { - if (a.required === b.required) { - return 0; - } - return a.required ? -1 : 1; - }) - .map((param) => ( - - ))} -
-
- ); -} - -function ParameterItem({ param }: { param: APIParameter }) { - return ( -
-
- {param.description} - {param.type && ( -
-

Type

- -
- )} -
-
- ); -} - -function createCurlCommand(params: { metadata: ApiEndpointMeta }) { - const url = `${params.metadata.origin}${params.metadata.path}`; - const bodyObj: Record = {}; - - const headers = params.metadata.request.headers - .filter((h) => h.example !== undefined) - .map((h) => { - return `-H "${h.name}:${ - typeof h.example === "object" && h !== null - ? JSON.stringify(h.example) - : h.example - }"`; - }) - .join(" \\\n"); - - for (const param of params.metadata.request.bodyParameters) { - if (param.example !== undefined) { - bodyObj[param.name] = param.example; - } - } - - const body = - Object.keys(bodyObj).length === 0 - ? "" - : `-d '${JSON.stringify(bodyObj, null, 2)}'`; - - const requestData = [url, headers, body].filter((s) => s).join(" \\\n"); - - return `curl -X ${params.metadata.method} ${requestData}`; -} - -function createFetchCommand(params: { metadata: ApiEndpointMeta }) { - const headersObj: Record = {}; - const bodyObj: Record = {}; - const { request } = params.metadata; - const url = `${params.metadata.origin}${params.metadata.path}`; - - for (const param of request.headers) { - if (param.example !== undefined) { - headersObj[param.name] = param.example; - } - } - - for (const param of request.bodyParameters) { - if (param.example !== undefined) { - bodyObj[param.name] = param.example; - } - } - - const fetchOptions: Record = { - method: params.metadata.method, - }; - - if (Object.keys(headersObj).length > 0) { - fetchOptions.headers = headersObj; - } - - if (Object.keys(bodyObj).length > 0) { - fetchOptions.body = bodyObj; - } - - return `fetch('${url}', ${JSON.stringify(fetchOptions, null, 2)})`; -} diff --git a/apps/portal/src/components/Document/APIEndpointMeta/RequestExample.tsx b/apps/portal/src/components/Document/APIEndpointMeta/RequestExample.tsx deleted file mode 100644 index 988165a6662..00000000000 --- a/apps/portal/src/components/Document/APIEndpointMeta/RequestExample.tsx +++ /dev/null @@ -1,57 +0,0 @@ -"use client"; - -import { useState } from "react"; -import { Badge } from "@/components/ui/badge"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; - -export function RequestExample(props: { - codeExamples: Array<{ - label: string; - code: React.ReactElement; - }>; - method: string; - endpointUrl: string; -}) { - const [selectedExample, setSelectedExample] = useState(props.codeExamples[0]); - - return ( -
-
-
- - {props.method} - - - {props.endpointUrl} - -
- -
-
{selectedExample?.code}
-
- ); -} diff --git a/apps/portal/src/icons/index.ts b/apps/portal/src/icons/index.ts index e5d69021b09..66ec6efffd3 100644 --- a/apps/portal/src/icons/index.ts +++ b/apps/portal/src/icons/index.ts @@ -21,5 +21,3 @@ export { ReactIcon } from "./sdks/ReactIcon"; export { TypeScriptIcon } from "./sdks/TypeScriptIcon"; export { UnityIcon } from "./sdks/UnityIcon"; export { UnrealEngineIcon } from "./sdks/UnrealEngineIcon"; -//sidebar -export { NebulaSideIcon } from "./sidebar/NebulaSideIcon"; diff --git a/apps/portal/src/icons/products/NebulaIcon.tsx b/apps/portal/src/icons/products/NebulaIcon.tsx deleted file mode 100644 index a1cb30ba209..00000000000 --- a/apps/portal/src/icons/products/NebulaIcon.tsx +++ /dev/null @@ -1,24 +0,0 @@ -export function NebulaIcon({ className }: { className?: string }) { - return ( - - - - - ); -} diff --git a/apps/portal/src/icons/sidebar/NebulaSideIcon.tsx b/apps/portal/src/icons/sidebar/NebulaSideIcon.tsx deleted file mode 100644 index 2463f2fd982..00000000000 --- a/apps/portal/src/icons/sidebar/NebulaSideIcon.tsx +++ /dev/null @@ -1,20 +0,0 @@ -export function NebulaSideIcon(props: { className?: string }) { - return ( - - Nebula Side Icon - - - ); -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 655afe3b603..2584db6ff5d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1201,7 +1201,7 @@ importers: version: 22.14.1 '@vitest/coverage-v8': specifier: 3.2.4 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.14.1)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.4.2)(lightningcss@1.30.1)(msw@2.10.2(@types/node@22.14.1)(typescript@5.8.3))(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) + version: 3.2.4(vitest@3.2.4) typescript: specifier: 5.8.3 version: 5.8.3 @@ -1319,7 +1319,7 @@ importers: version: 4.0.1(storybook@9.0.15(@testing-library/dom@10.4.0)(bufferutil@4.0.9)(prettier@3.6.2)(utf-8-validate@5.0.10)) '@codspeed/vitest-plugin': specifier: 4.0.1 - version: 4.0.1(vite@7.0.1(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(@vitest/ui@3.2.4)(happy-dom@17.4.4)(jiti@2.4.2)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.0.10)(typescript@5.8.3))(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) + version: 4.0.1(vite@7.0.1(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vitest@3.2.4) '@coinbase/wallet-mobile-sdk': specifier: 1.1.2 version: 1.1.2(expo@53.0.17(@babel/core@7.28.0)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.78.1(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@types/react@19.1.8)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)(utf-8-validate@5.0.10))(react-native@0.78.1(@babel/core@7.28.0)(@babel/preset-env@7.28.0(@babel/core@7.28.0))(@types/react@19.1.8)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) @@ -1370,7 +1370,7 @@ importers: version: 4.6.0(vite@7.0.1(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) '@vitest/coverage-v8': specifier: 3.2.4 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(@vitest/ui@3.2.4)(happy-dom@17.4.4)(jiti@2.4.2)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.0.10)(typescript@5.8.3))(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)) + version: 3.2.4(vitest@3.2.4) '@vitest/ui': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -18326,7 +18326,7 @@ snapshots: transitivePeerDependencies: - debug - '@codspeed/vitest-plugin@4.0.1(vite@7.0.1(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(@vitest/ui@3.2.4)(happy-dom@17.4.4)(jiti@2.4.2)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.0.10)(typescript@5.8.3))(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))': + '@codspeed/vitest-plugin@4.0.1(vite@7.0.1(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vitest@3.2.4)': dependencies: '@codspeed/core': 4.0.1 vite: 7.0.1(@types/node@24.0.10)(jiti@2.4.2)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0) @@ -25180,7 +25180,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.14.1)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.4.2)(lightningcss@1.30.1)(msw@2.10.2(@types/node@22.14.1)(typescript@5.8.3))(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4)': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -25199,25 +25199,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(@vitest/ui@3.2.4)(happy-dom@17.4.4)(jiti@2.4.2)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.0.10)(typescript@5.8.3))(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))': - dependencies: - '@ampproject/remapping': 2.3.0 - '@bcoe/v8-coverage': 1.0.2 - ast-v8-to-istanbul: 0.3.3 - debug: 4.4.1(supports-color@8.1.1) - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.1.7 - magic-string: 0.30.17 - magicast: 0.3.5 - std-env: 3.9.0 - test-exclude: 7.0.1 - tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.10)(@vitest/ui@3.2.4)(happy-dom@17.4.4)(jiti@2.4.2)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.0.10)(typescript@5.8.3))(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0) - transitivePeerDependencies: - - supports-color - '@vitest/expect@3.2.4': dependencies: '@types/chai': 5.2.2 @@ -28994,8 +28975,8 @@ snapshots: '@typescript-eslint/parser': 7.14.1(eslint@8.57.0)(typescript@5.8.3) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.0) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.0) eslint-plugin-react: 7.37.5(eslint@8.57.0) eslint-plugin-react-hooks: 5.2.0(eslint@8.57.0) @@ -29014,7 +28995,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.0): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0))(eslint@8.57.0): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.1(supports-color@8.1.1) @@ -29025,7 +29006,7 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.10.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) transitivePeerDependencies: - supports-color @@ -29050,18 +29031,18 @@ snapshots: - bluebird - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.12.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 7.14.1(eslint@8.57.0)(typescript@5.8.3) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0))(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.0): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -29072,7 +29053,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.8.3))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3