From e7175c122f4231be475b89732c5db8788bc2d6f9 Mon Sep 17 00:00:00 2001 From: Kien Ngo Date: Thu, 2 Jan 2025 08:55:14 +0700 Subject: [PATCH 1/4] update --- apps/portal/package.json | 1 + .../Document/ApiEndpointComponent.tsx | 395 ++++++++++++++++++ apps/portal/src/components/ui/badge.tsx | 36 ++ apps/portal/src/components/ui/collapsible.tsx | 11 + apps/portal/src/components/ui/select.tsx | 160 +++++++ pnpm-lock.yaml | 3 + 6 files changed, 606 insertions(+) create mode 100644 apps/portal/src/components/Document/ApiEndpointComponent.tsx create mode 100644 apps/portal/src/components/ui/badge.tsx create mode 100644 apps/portal/src/components/ui/collapsible.tsx create mode 100644 apps/portal/src/components/ui/select.tsx diff --git a/apps/portal/package.json b/apps/portal/package.json index 288f9be0e7d..3b257ffc081 100644 --- a/apps/portal/package.json +++ b/apps/portal/package.json @@ -22,6 +22,7 @@ "@next/mdx": "15.1.0", "@radix-ui/react-dialog": "1.1.4", "@radix-ui/react-dropdown-menu": "^2.1.3", + "@radix-ui/react-select": "^2.1.3", "@radix-ui/react-slot": "^1.1.1", "@radix-ui/react-tabs": "^1.1.2", "@tanstack/react-query": "5.62.16", diff --git a/apps/portal/src/components/Document/ApiEndpointComponent.tsx b/apps/portal/src/components/Document/ApiEndpointComponent.tsx new file mode 100644 index 00000000000..2117442aefd --- /dev/null +++ b/apps/portal/src/components/Document/ApiEndpointComponent.tsx @@ -0,0 +1,395 @@ +"use client"; + +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from "@/components/ui/collapsible"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { ChevronDown, ChevronUp, Copy, Minus, Plus } from "lucide-react"; +import React from "react"; + +const sectionClass = + "pt-6 mt-6 border-t border-border first:pt-0 first:mt-0 first:border-t-0"; + +interface NestedParameter { + name: string; + required: boolean; + description: string; + type: string; + properties?: NestedParameter[]; +} + +interface Parameter extends NestedParameter {} + +interface Header { + name: string; + required: boolean; + description: string; + type: string; +} + +interface ApiResponse { + status: string; + description: string; + code: string; +} + +interface CodeExample { + language: string; + code: string; +} + +interface ApiEndpointProps { + title: string; + method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH"; + description: string; + endpointUrl: string; + parameters: Parameter[]; + headers: Header[]; + bodyParameters: Parameter[]; + codeExamples: CodeExample[]; + apiResponses: ApiResponse[]; +} + +function ParameterItem({ + param, + depth = 0, +}: { param: NestedParameter; depth?: number }) { + const [isOpen, setIsOpen] = React.useState(false); + + return ( +
0 ? "ml-4" : ""}`} + > +
+
+ + {param.name} + + + {param.required ? "required" : "optional"} + + {param.type} +
+ {param.properties && param.properties.length > 0 && ( + + )} +
+

{param.description}

+ {isOpen && param.properties && ( +
+ {param.properties.map((subParam) => ( + + ))} +
+ )} +
+ ); +} + +export function ApiEndpoint({ + title, + method, + description, + endpointUrl, + parameters, + headers, + bodyParameters, + codeExamples, + apiResponses, +}: ApiEndpointProps) { + const [isHeadersOpen, setIsHeadersOpen] = React.useState(true); + const [isQueryParametersOpen, setIsQueryParametersOpen] = + React.useState(true); + const [isBodyParametersOpen, setIsBodyParametersOpen] = React.useState(true); + const [selectedLanguage, setSelectedLanguage] = React.useState( + codeExamples[0]?.language, + ); + + const toggleHeaders = () => { + setIsHeadersOpen(!isHeadersOpen); + }; + + const toggleQueryParameters = () => { + setIsQueryParametersOpen(!isQueryParametersOpen); + }; + + const toggleBodyParameters = () => { + setIsBodyParametersOpen(!isBodyParametersOpen); + }; + + const methodColors = { + GET: "bg-blue-500", + POST: "bg-green-500", + PUT: "bg-yellow-500", + DELETE: "bg-red-500", + PATCH: "bg-purple-500", + }; + + const getResponseType = (status: string) => { + const statusCode = Number.parseInt(status, 10); + return statusCode >= 200 && statusCode < 300 ? "success" : "error"; + }; + + const getCodeExample = (language: string) => { + return ( + codeExamples.find((example) => example.language === language)?.code || "" + ); + }; + + return ( +
+
+
+
+
+

{title}

+ + {method} + +
+

{description}

+
+
+ + {headers.length > 0 && ( +
+ +
+

HEADERS

+ + + +
+ + {headers.map((header) => ( +
+
+ + {header.name} + + + {header.required ? "required" : "optional"} + + + {header.type} + +
+

+ {header.description} +

+
+ ))} +
+
+
+ )} + + {parameters.length > 0 && ( +
+ +
+

+ QUERY PARAMS +

+ + + +
+ + {parameters.map((param) => ( + + ))} + +
+
+ )} + + {bodyParameters.length > 0 && ( +
+ +
+

+ BODY PARAMS +

+ + + +
+ + {bodyParameters.map((param) => ( + + ))} + +
+
+ )} +
+ +
+
+
+
+ + {method} + + + {endpointUrl} + +
+ +
+ {selectedLanguage && ( +
+
+ +
+
+                
+                  {getCodeExample(selectedLanguage)}
+                
+              
+
+ )} +
+ +
+ +
+

Response

+ + {apiResponses.map((response) => ( + + + + {response.status} + + + ))} + +
+ {apiResponses.map((response) => ( + +
+

+ {response.description} +

+
+
+ +
+
+                      {response.code}
+                    
+
+
+
+ ))} +
+
+
+
+ ); +} diff --git a/apps/portal/src/components/ui/badge.tsx b/apps/portal/src/components/ui/badge.tsx new file mode 100644 index 00000000000..6d5a5c0a5d2 --- /dev/null +++ b/apps/portal/src/components/ui/badge.tsx @@ -0,0 +1,36 @@ +import { type VariantProps, cva } from "class-variance-authority"; +import type * as React from "react"; + +import { cn } from "@/lib/utils"; + +const badgeVariants = cva( + "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground hover:bg-primary/80", + secondary: + "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return ( +
+ ); +} + +export { Badge, badgeVariants }; diff --git a/apps/portal/src/components/ui/collapsible.tsx b/apps/portal/src/components/ui/collapsible.tsx new file mode 100644 index 00000000000..9fa48946afd --- /dev/null +++ b/apps/portal/src/components/ui/collapsible.tsx @@ -0,0 +1,11 @@ +"use client" + +import * as CollapsiblePrimitive from "@radix-ui/react-collapsible" + +const Collapsible = CollapsiblePrimitive.Root + +const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger + +const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent + +export { Collapsible, CollapsibleTrigger, CollapsibleContent } diff --git a/apps/portal/src/components/ui/select.tsx b/apps/portal/src/components/ui/select.tsx new file mode 100644 index 00000000000..3c0034fea2b --- /dev/null +++ b/apps/portal/src/components/ui/select.tsx @@ -0,0 +1,160 @@ +"use client"; + +import * as SelectPrimitive from "@radix-ui/react-select"; +import { Check, ChevronDown, ChevronUp } from "lucide-react"; +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +const Select = SelectPrimitive.Root; + +const SelectGroup = SelectPrimitive.Group; + +const SelectValue = SelectPrimitive.Value; + +const SelectTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + span]:line-clamp-1", + className, + )} + {...props} + > + {children} + + + + +)); +SelectTrigger.displayName = SelectPrimitive.Trigger.displayName; + +const SelectScrollUpButton = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)); +SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName; + +const SelectScrollDownButton = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)); +SelectScrollDownButton.displayName = + SelectPrimitive.ScrollDownButton.displayName; + +const SelectContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, position = "popper", ...props }, ref) => ( + + + + + {children} + + + + +)); +SelectContent.displayName = SelectPrimitive.Content.displayName; + +const SelectLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +SelectLabel.displayName = SelectPrimitive.Label.displayName; + +const SelectItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + + {children} + +)); +SelectItem.displayName = SelectPrimitive.Item.displayName; + +const SelectSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +SelectSeparator.displayName = SelectPrimitive.Separator.displayName; + +export { + Select, + SelectGroup, + SelectValue, + SelectTrigger, + SelectContent, + SelectLabel, + SelectItem, + SelectSeparator, + SelectScrollUpButton, + SelectScrollDownButton, +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 391ae438885..457bc337428 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -561,6 +561,9 @@ importers: '@radix-ui/react-dropdown-menu': specifier: ^2.1.3 version: 2.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@radix-ui/react-select': + specifier: ^2.1.3 + version: 2.1.4(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-slot': specifier: ^1.1.1 version: 1.1.1(@types/react@19.0.2)(react@19.0.0) From 2dd92aff9d7ee182b0dfe3aa2dd736e92c20f8ea Mon Sep 17 00:00:00 2001 From: samina Date: Fri, 3 Jan 2025 14:18:05 -0700 Subject: [PATCH 2/4] tested component --- .../api-reference/update-session/data.jsx | 58 +++++++++++++++++++ .../api-reference/update-session/page.mdx | 28 +-------- apps/portal/src/components/Document/index.ts | 1 + 3 files changed, 62 insertions(+), 25 deletions(-) create mode 100644 apps/portal/src/app/nebula/api-reference/update-session/data.jsx diff --git a/apps/portal/src/app/nebula/api-reference/update-session/data.jsx b/apps/portal/src/app/nebula/api-reference/update-session/data.jsx new file mode 100644 index 00000000000..744ae3205b5 --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/update-session/data.jsx @@ -0,0 +1,58 @@ +export const sessionEndpointData = { + title: "Update Session", + method: "GET", + description: "Fetches details of a specific session using the session ID.", + endpointUrl: "/session/{session_id}", + parameters: [ + { + name: "session_id", + required: true, + description: "The unique identifier of the session to retrieve.", + type: "string", + }, + ], + headers: [ + { + name: "x-secret-key", + required: true, + description: "Your thirdweb secret key for authentication.", + type: "string", + }, + ], + bodyParameters: [], + codeExamples: [ + { + language: "curl", + code: `curl -X GET https://nebula-api.thirdweb.com/session/{session_id} \\ + -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY"`, + }, + { + language: "JavaScript", + code: "test", + }, + ], + apiResponses: [ + { + status: "200", + description: "Session details retrieved successfully.", + code: `{ + "session_id": "abc123", + "created_at": "2024-01-01T00:00:00Z", + "last_active": "2024-01-02T12:34:56Z", + "messages": [ + "message_id": "msg1", + "content": "Hello, how can I assist you?", + "timestamp": "2024-01-01T01:23:45Z" + // Additional messages... + ] +}`, + }, + { + status: "404", + description: "Session not found.", + code: `{ + "error": "Session with ID 'abc123' not found." +}`, + }, + ], +}; 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 index 1d2baeeb278..8c07794e256 100644 --- a/apps/portal/src/app/nebula/api-reference/update-session/page.mdx +++ b/apps/portal/src/app/nebula/api-reference/update-session/page.mdx @@ -1,26 +1,4 @@ -#### Update Session +import { ApiEndpoint} from '@doc'; +import { sessionEndpointData } from './data'; -Update an existing session. - -```bash -PUT /session/{session_id} -``` - -**Example curl:** -```bash -curl -X PUT https://nebula-api.thirdweb.com/session/abc123 \ - -H "Content-Type: application/json" \ - -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY" \ - -d '{ - "title": "Updated Title", - "is_public": true - }' -``` - -**Request Body:** -```tsx -{ - "title": "string", - "is_public": boolean -} -``` \ No newline at end of file + diff --git a/apps/portal/src/components/Document/index.ts b/apps/portal/src/components/Document/index.ts index efacfd832d0..d97f4d81f1d 100644 --- a/apps/portal/src/components/Document/index.ts +++ b/apps/portal/src/components/Document/index.ts @@ -27,3 +27,4 @@ export { ConnectCard } from "./Cards/ConnectCard"; export { AAChainList } from "./AAChainList"; export { AuthList } from "./AuthList"; export { FeatureCard } from "./FeatureCard"; +export { ApiEndpoint } from "./ApiEndpointComponent"; From 589dfc498baa5d3501fced1c4f08f294a8908239 Mon Sep 17 00:00:00 2001 From: samina Date: Fri, 3 Jan 2025 15:04:40 -0700 Subject: [PATCH 3/4] added data --- .../app/nebula/api-reference/chat/data.jsx | 100 ++++++++++++++++++ .../app/nebula/api-reference/chat/page.mdx | 78 +------------- .../api-reference/clear-session/data.jsx | 48 +++++++++ .../api-reference/clear-session/page.mdx | 15 +-- .../api-reference/create-session/data.jsx | 81 ++++++++++++++ .../api-reference/create-session/page.mdx | 34 +----- .../api-reference/delete-session/data.jsx | 44 ++++++++ .../api-reference/delete-session/page.mdx | 17 +-- .../app/nebula/api-reference/execute/data.jsx | 89 ++++++++++++++++ .../app/nebula/api-reference/execute/page.mdx | 78 +------------- .../nebula/api-reference/get-session/data.jsx | 58 ++++++++++ .../nebula/api-reference/get-session/page.mdx | 30 +----- .../api-reference/list-session/data.jsx | 68 ++++++++++++ .../api-reference/list-session/page.mdx | 31 +----- .../api-reference/update-session/data.jsx | 4 - 15 files changed, 509 insertions(+), 266 deletions(-) create mode 100644 apps/portal/src/app/nebula/api-reference/chat/data.jsx create mode 100644 apps/portal/src/app/nebula/api-reference/clear-session/data.jsx create mode 100644 apps/portal/src/app/nebula/api-reference/create-session/data.jsx create mode 100644 apps/portal/src/app/nebula/api-reference/delete-session/data.jsx create mode 100644 apps/portal/src/app/nebula/api-reference/execute/data.jsx create mode 100644 apps/portal/src/app/nebula/api-reference/get-session/data.jsx create mode 100644 apps/portal/src/app/nebula/api-reference/list-session/data.jsx diff --git a/apps/portal/src/app/nebula/api-reference/chat/data.jsx b/apps/portal/src/app/nebula/api-reference/chat/data.jsx new file mode 100644 index 00000000000..1aa7e7030ad --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/chat/data.jsx @@ -0,0 +1,100 @@ +// data.js + +export const chatEndpointData = { + title: "Initiate Chat", + method: "POST", + description: "Starts a new chat session with the specified parameters.", + endpointUrl: "/chat", + parameters: [], + headers: [ + { + name: "x-secret-key", + required: true, + description: "Your thirdweb secret key for authentication.", + type: "string", + }, + { + name: "Content-Type", + required: true, + description: "Indicates the media type of the request body.", + type: "string", + }, + ], + bodyParameters: [ + { + name: "user_id", + required: true, + description: "The unique identifier for the user starting the chat.", + type: "string", + }, + { + name: "message", + required: true, + description: "The initial message to start the chat.", + type: "string", + }, + { + name: "metadata", + required: false, + description: "Optional metadata associated with the chat session.", + type: "object", + }, + ], + codeExamples: [ + { + language: "curl", + code: `curl -X POST https://nebula-api.thirdweb.com/chat \\ + -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY" \\ + -H "Content-Type: application/json" \\ + -d '{"user_id": "user123", "message": "Hello!", "metadata": {"topic": "support"}}'`, + }, + { + language: "JavaScript", + code: `const axios = require('axios'); + + const secretKey = 'YOUR_THIRDWEB_SECRET_KEY'; + + axios.post('https://nebula-api.thirdweb.com/chat', { + user_id: 'user123', + message: 'Hello!', + metadata: { topic: 'support' }, + }, { + headers: { + 'x-secret-key': secretKey, + 'Content-Type': 'application/json', + }, + }) + .then(response => { + console.log("Chat initiated successfully.", response.data); + }) + .catch(error => { + console.error(error); + });`, + }, + ], + apiResponses: [ + { + status: "201", + description: "Chat initiated successfully.", + code: `{ + "chat_id": "chat123", + "status": "active", + "created_at": "2024-01-01T00:00:00Z" + }`, + }, + { + status: "400", + description: "Invalid input data.", + code: `{ + "error": "Missing user_id or message." + }`, + }, + { + status: "403", + description: "Unauthorized request.", + code: `{ + "error": "Invalid secret key." + }`, + }, + ], +}; diff --git a/apps/portal/src/app/nebula/api-reference/chat/page.mdx b/apps/portal/src/app/nebula/api-reference/chat/page.mdx index 1989835c3b6..2a1ee202494 100644 --- a/apps/portal/src/app/nebula/api-reference/chat/page.mdx +++ b/apps/portal/src/app/nebula/api-reference/chat/page.mdx @@ -1,79 +1,7 @@ -### Send Message +import { ApiEndpoint} from '@doc'; +import { chatEndpointData } from './data'; -```http -POST /chat -``` - -**Request Body:** -```json -{ - "message": "Find the last 5 blocks", - "session_id": "abc", - "stream": true, - "context_filter": { - "chain_ids": [137], - "contract_addresses": ["0x..."], - "wallet_addresses": ["0x..."] - }, - "execute_config": { - "mode": "client", - "signer_wallet_address": "0x..." - } -} -``` - -**Request Parameters:** - -- `message` (required) - - Type: string - - Description: The user's input message or command to be processed by Nebula - -- `session_id` (optional) - - Type: string - - Description: Identifier for maintaining conversation context - - Default: A new session will be created if omitted - -- `stream` (optional) - - Type: boolean - - Description: Controls whether the response is streamed or returned as a single response - - Default: false - -- `context_filter` (optional) - - Type: object - - Description: Controls which blockchain data sources are used for context - - Properties: - - `chain_ids`: Array of numbers representing blockchain network IDs - - `contract_addresses`: Array of strings containing contract addresses to focus on - -- `execute_config` (optional) - - Type: object - - Description: Configuration for transaction execution - - Properties: - - `mode`: String indicating execution mode (currently only "client" is supported) - - `signer_wallet_address`: String containing the wallet address that will sign transactions - - #### Chat Messages - -Chat messages are natural language responses from Nebula. They appear in the `message` field of the response and provide formatted information, explanations, or answers to your queries. Messages can include formatted text, blockchain data, and technical details. - -**Example Response with Chat Message:** -```json -{ - "message": "The last block on the Arbitrum mainnet is block number **284204124**. Here are the details:\n\n- **Block Hash:** 0xf42e3d624ae1e3fd6b89d4680f39943eb1cd3b8f0606918ef818d3021b7724f1\n- **Parent Hash:** 0x4c45cd0964281833b070b633980d8f530debdd21dfbdbf6eddf96cc93cbaac8e\n- **Timestamp:** 1734063299\n- **Gas Used:** 5,064,851\n- **Gas Limit:** 1,125,899,906,842,624\n- **Base Fee per Gas:** 10,000,000\n- **Transaction Count:** 7\n- **Withdrawals Count:** 0\n\nIf you need any more information about this block or related transactions, feel free to ask!", - "actions": [], - "session_id": "5d579903-5a63-434f-8667-788adfae9304", - "request_id": "d46cfb80-de6a-48a6-9a97-746e1708d066" -} -``` - -Response properties: -- `message`: A formatted string containing the response, which may include: - - Markdown formatting for better readability - - Technical data (hashes, addresses, numbers) - - Structured information about blockchain state -- `actions`: Array of actions (empty when no transactions are needed) -- `session_id`: Unique identifier for the current session -- `request_id`: Unique identifier for the specific request + #### Chat Actions diff --git a/apps/portal/src/app/nebula/api-reference/clear-session/data.jsx b/apps/portal/src/app/nebula/api-reference/clear-session/data.jsx new file mode 100644 index 00000000000..58e012bb235 --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/clear-session/data.jsx @@ -0,0 +1,48 @@ +// data.js + +export const clearSessionEndpointData = { + title: "Clear Session", + method: "POST", + description: + "Clears all messages for a specific session using the session ID.", + endpointUrl: "/session/{session_id}/clear", + parameters: [ + { + name: "session_id", + required: true, + description: "The unique identifier of the session to clear.", + type: "string", + }, + ], + headers: [ + { + name: "x-secret-key", + required: true, + description: "Your thirdweb secret key for authentication.", + type: "string", + }, + ], + bodyParameters: [], + codeExamples: [ + { + language: "curl", + code: `curl -X POST https://nebula-api.thirdweb.com/session/{session_id}/clear \\ + -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY"`, + }, + ], + apiResponses: [ + { + status: "200", + description: "Session messages cleared successfully.", + code: `{ + "message": "All session messages have been cleared." + }`, + }, + { + status: "404", + description: "Session not found.", + code: `{ + "error": "Session with ID 'abc123' not found." }`, + }, + ], +}; 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 index f337139cde0..092376c91e6 100644 --- a/apps/portal/src/app/nebula/api-reference/clear-session/page.mdx +++ b/apps/portal/src/app/nebula/api-reference/clear-session/page.mdx @@ -1,13 +1,4 @@ -#### Clear Session +import { ApiEndpoint} from '@doc'; +import { clearSessionEndpointData } from './data'; -Clear a session's message history. - -```bash -POST /session/{session_id}/clear -``` - -**Example curl:** -```bash -curl -X POST https://nebula-api.thirdweb.com/session/abc123/clear \ - -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY" -``` \ No newline at end of file + \ No newline at end of file diff --git a/apps/portal/src/app/nebula/api-reference/create-session/data.jsx b/apps/portal/src/app/nebula/api-reference/create-session/data.jsx new file mode 100644 index 00000000000..dcef3b9b45d --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/create-session/data.jsx @@ -0,0 +1,81 @@ +// data.js + +export const createSessionEndpointData = { + title: "Create Session", + method: "POST", + description: "Creates a new session.", + endpointUrl: "/session", + parameters: [], + headers: [ + { + name: "x-secret-key", + required: true, + description: "Your thirdweb secret key for authentication.", + type: "string", + }, + ], + bodyParameters: [ + { + name: "session_name", + required: true, + description: "The name for the new session.", + type: "string", + }, + { + name: "metadata", + required: false, + description: "Optional metadata to associate with the session.", + type: "object", + }, + ], + codeExamples: [ + { + language: "curl", + code: `curl -X POST https://nebula-api.thirdweb.com/session \\ + -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY" \\ + -d '{"session_name": "my_new_session", "metadata": {"key": "value"}}'`, + }, + { + language: "JavaScript", + code: `const axios = require('axios'); + + const secretKey = 'YOUR_THIRDWEB_SECRET_KEY'; + + axios.post('https://nebula-api.thirdweb.com/session', { + session_name: 'my_new_session', + metadata: { key: 'value' }, + }, { + headers: { + 'x-secret-key': secretKey, + }, + }) + .then(response => { + console.log("Session created successfully.", response.data); + }) + .catch(error => { + console.error(error); + });`, + }, + ], + apiResponses: [ + { + status: "201", + description: "Session created successfully.", + code: `{ + "session_id": "abc123", + "session_name": "my_new_session", + "metadata": { + "key": "value" + }, + "created_at": "2024-01-01T00:00:00Z" + }`, + }, + { + status: "400", + description: "Invalid input data.", + code: `{ + "error": "Invalid session name provided." + }`, + }, + ], +}; 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 index 1613fb7280a..926fdbe493e 100644 --- a/apps/portal/src/app/nebula/api-reference/create-session/page.mdx +++ b/apps/portal/src/app/nebula/api-reference/create-session/page.mdx @@ -1,32 +1,4 @@ -#### Create Session +import { ApiEndpoint } from '@doc'; +import { createSessionEndpointData } from './data'; -Create a new chat session. - -```bash -POST /session -``` -**Request Body:** -```tsx -{ - "title": "My DeFi Research", // Optional: Custom session title - "is_public": true, // Optional: Make session publicly accessible - "context_filter": { // Optional: Filter data sources - "chain_ids": [1], - "contract_addresses": ["0x..."] - } -} -``` - -**Example curl:** -```bash -curl -X POST https://nebula-api.thirdweb.com/session \ - -H "Content-Type: application/json" \ - -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY" \ - -d '{ - "title": "My DeFi Research", - "is_public": true, - "context_filter": { - "chain_ids": [1] - } - }' -``` \ No newline at end of file + \ No newline at end of file diff --git a/apps/portal/src/app/nebula/api-reference/delete-session/data.jsx b/apps/portal/src/app/nebula/api-reference/delete-session/data.jsx new file mode 100644 index 00000000000..e4d70bb9d5f --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/delete-session/data.jsx @@ -0,0 +1,44 @@ +export const deleteSessionEndpointData = { + title: "Delete Session", + method: "DELETE", + description: "Deletes a specific session using the session ID.", + endpointUrl: "/session/{session_id}", + parameters: [ + { + name: "session_id", + required: true, + description: "The unique identifier of the session to delete.", + type: "string", + }, + ], + headers: [ + { + name: "x-secret-key", + required: true, + description: "Your thirdweb secret key for authentication.", + type: "string", + }, + ], + bodyParameters: [], + codeExamples: [ + { + language: "curl", + code: `curl -X DELETE https://nebula-api.thirdweb.com/session/{session_id} \\ + -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY"`, + }, + ], + apiResponses: [ + { + status: "204", + description: "Session deleted successfully.", + code: "(No Content)", + }, + { + status: "404", + description: "Session not found.", + code: `{ + "error": "Session with ID 'abc123' not found." + }`, + }, + ], +}; 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 index c7734e15150..9088c3c87e1 100644 --- a/apps/portal/src/app/nebula/api-reference/delete-session/page.mdx +++ b/apps/portal/src/app/nebula/api-reference/delete-session/page.mdx @@ -1,15 +1,4 @@ -Delete Session +import { ApiEndpoint } from '@doc'; +import { deleteSessionEndpointData } from './data'; - -Delete a session. - -```bash -DELETE /session/{session_id} -``` - -Example curl: - -```bash -curl -X DELETE https://nebula-api.thirdweb.com/session/abc123 \ - -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY" -``` \ No newline at end of file + diff --git a/apps/portal/src/app/nebula/api-reference/execute/data.jsx b/apps/portal/src/app/nebula/api-reference/execute/data.jsx new file mode 100644 index 00000000000..43d7346648c --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/execute/data.jsx @@ -0,0 +1,89 @@ +export const executeEndpointData = { + title: "Execute Action", + method: "POST", + description: "Executes a specified action.", + endpointUrl: "/execute", + parameters: [], + headers: [ + { + name: "x-secret-key", + required: true, + description: "Your thirdweb secret key for authentication.", + type: "string", + }, + { + name: "Content-Type", + required: true, + description: "Indicates the media type of the request body.", + type: "string", + }, + ], + bodyParameters: [ + { + name: "action", + required: true, + description: "The action to execute.", + type: "string", + }, + { + name: "parameters", + required: false, + description: "Optional parameters for the action.", + type: "object", + }, + ], + codeExamples: [ + { + language: "curl", + code: `curl -X POST https://nebula-api.thirdweb.com/execute \\ + -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY" \\ + -H "Content-Type: application/json" \\ + -d '{"action": "your_action", "parameters": {"key": "value"}}'`, + }, + { + language: "JavaScript", + code: `const axios = require('axios'); + + const secretKey = 'YOUR_THIRDWEB_SECRET_KEY'; + + axios.post('https://nebula-api.thirdweb.com/execute', { + action: 'your_action', + parameters: { key: 'value' }, + }, { + headers: { + 'x-secret-key': secretKey, + 'Content-Type': 'application/json', + }, + }) + .then(response => { + console.log("Action executed successfully.", response.data); + }) + .catch(error => { + console.error(error); + });`, + }, + ], + apiResponses: [ + { + status: "200", + description: "Action executed successfully.", + code: `{ + "result": "Execution completed successfully." + }`, + }, + { + status: "400", + description: "Invalid input data.", + code: `{ + "error": "Invalid action specified." + }`, + }, + { + status: "403", + description: "Unauthorized request.", + code: `{ + "error": "Invalid secret key." + }`, + }, + ], +}; diff --git a/apps/portal/src/app/nebula/api-reference/execute/page.mdx b/apps/portal/src/app/nebula/api-reference/execute/page.mdx index 449879b9cc1..fe4f5d3b182 100644 --- a/apps/portal/src/app/nebula/api-reference/execute/page.mdx +++ b/apps/portal/src/app/nebula/api-reference/execute/page.mdx @@ -1,77 +1,5 @@ -### Execute -Execute specific blockchain commands or actions. This endpoint is designed for direct command execution without the conversational context of the chat endpoint. +import { ApiEndpoint } from '@doc'; +import { executeEndpointData } from './data'; -```bash -POST /execute -``` - -**Request Body:** -```bash -{ - "message": "send 0.0001 ETH on sepolia to vitalik.eth", - "user_id": "default-user", - "stream": false, - "execute_config": { - "mode": "client", - "signer_wallet_address": "0xc3F2b2a12Eba0f5989cD75B2964E31D56603a2cE" - } -} -``` - -**Request Parameters:** -- `message` (required): The command to execute -- `user_id` (optional): Identifier for the user making the request -- `stream` (optional): Whether to stream the response -- `execute_config` (optional): Configuration for transaction execution - - `mode`: Execution mode (currently only "client" is supported) - - `signer_wallet_address`: Address that will sign the transaction - -**Example Response:** -```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" -} -``` - -**Example curl:** -```bash -curl -X POST https://nebula-api.thirdweb.com/execute \ - -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, - "execute_config": { - "mode": "client", - "signer_wallet_address": "0xc3F2b2a12Eba0f5989cD75B2964E31D56603a2cE" - } - }' -``` - -**Response Properties:** -- `message`: A human-readable description of the action to be taken -- `actions`: Array of actions to be executed - - `session_id`: Unique identifier for the session - - `request_id`: Unique identifier for this request - - `type`: The type of action (e.g., "sign_transaction") - - `source`: Origin of the action - - `data`: Transaction data in hexadecimal format including: - - `chainId`: Network identifier - - `to`: Recipient's address - - `data`: Transaction data - - `value`: Amount to send in hex -- `session_id`: Session identifier for this execution -- `request_id`: Unique identifier for this request \ No newline at end of file + diff --git a/apps/portal/src/app/nebula/api-reference/get-session/data.jsx b/apps/portal/src/app/nebula/api-reference/get-session/data.jsx new file mode 100644 index 00000000000..4ba4aa9c5c9 --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/get-session/data.jsx @@ -0,0 +1,58 @@ +// data.js + +export const getSessionEndpointData = { + title: "Get Session", + method: "GET", + description: "Fetches details of a specific session using the session ID.", + endpointUrl: "/session/{session_id}", + parameters: [ + { + name: "session_id", + required: true, + description: "The unique identifier of the session to retrieve.", + type: "string", + }, + ], + headers: [ + { + name: "x-secret-key", + required: true, + description: "Your thirdweb secret key for authentication.", + type: "string", + }, + ], + bodyParameters: [], + codeExamples: [ + { + language: "curl", + code: `curl -X GET https://nebula-api.thirdweb.com/session/{session_id} \\ + -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY"`, + }, + ], + apiResponses: [ + { + status: "200", + description: "Session details retrieved successfully.", + code: `{ + "session_id": "abc123", + "created_at": "2024-01-01T00:00:00Z", + "last_active": "2024-01-02T12:34:56Z", + "messages": [ + { + "message_id": "msg1", + "content": "Hello, how can I assist you?", + "timestamp": "2024-01-01T01:23:45Z" + } + // Additional messages... + ] + }`, + }, + { + status: "404", + description: "Session not found.", + code: `{ + "error": "Session with ID 'abc123' not found." + }`, + }, + ], +}; 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 index 5503eff39e8..e15c6887cf9 100644 --- a/apps/portal/src/app/nebula/api-reference/get-session/page.mdx +++ b/apps/portal/src/app/nebula/api-reference/get-session/page.mdx @@ -1,28 +1,4 @@ -#### Get Session +import { ApiEndpoint } from '@doc'; +import { getSessionEndpointData } from './data'; -Get details for a specific session. - -```bash -GET /session/{session_id} -``` - -**Example curl:** -```bash -curl -X GET https://nebula-api.thirdweb.com/session/abc123 \ - -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY" -``` - -**Response:** -```tsx -{ - "result": { - "id": "string", - "title": "string", - "model_name": "string", - "is_public": boolean, - "created_at": "datetime", - "updated_at": "datetime", - "messages": [] - } -} -``` \ No newline at end of file + \ No newline at end of file diff --git a/apps/portal/src/app/nebula/api-reference/list-session/data.jsx b/apps/portal/src/app/nebula/api-reference/list-session/data.jsx new file mode 100644 index 00000000000..7698b850bc5 --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/list-session/data.jsx @@ -0,0 +1,68 @@ +// data.js + +export const listSessionsEndpointData = { + title: "List Sessions", + method: "GET", + description: "Fetches a list of all available sessions.", + endpointUrl: "/session/list", + parameters: [], + headers: [ + { + name: "x-secret-key", + required: true, + description: "Your thirdweb secret key for authentication.", + type: "string", + }, + ], + bodyParameters: [], + codeExamples: [ + { + language: "curl", + code: `curl -X GET https://nebula-api.thirdweb.com/session/list \\ + -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY"`, + }, + { + language: "JavaScript", + code: `const axios = require('axios'); + + const secretKey = 'YOUR_THIRDWEB_SECRET_KEY'; + + axios.get('https://nebula-api.thirdweb.com/session/list', { + headers: { + 'x-secret-key': secretKey, + }, + }) + .then(response => { + console.log(response.data); + }) + .catch(error => { + console.error(error); + });`, + }, + ], + apiResponses: [ + { + status: "200", + description: "List of sessions retrieved successfully.", + code: `[ + { + "session_id": "abc123", + "session_name": "Session 1", + "created_at": "2024-01-01T00:00:00Z" + }, + { + "session_id": "def456", + "session_name": "Session 2", + "created_at": "2024-01-02T00:00:00Z" + } + ]`, + }, + { + status: "403", + description: "Unauthorized request.", + code: `{ + "error": "Invalid secret key." + }`, + }, + ], +}; 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 index f34c8a97648..e121a7548a4 100644 --- a/apps/portal/src/app/nebula/api-reference/list-session/page.mdx +++ b/apps/portal/src/app/nebula/api-reference/list-session/page.mdx @@ -1,29 +1,4 @@ -#### List Sessions +import { ApiEndpoint} from '@doc'; +import { listSessionsEndpointData } from './data'; -Retrieve available sessions for the authenticated account. - -```bash -GET /session/list -``` - -**Example curl:** -```bash -curl -X GET https://nebula-api.thirdweb.com/session/list \ - -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY" -``` - -**Response:** -```bash -{ - "result": [ - { - "id": "string", - "title": "string", - "model_name": "string", - "is_public": boolean, - "created_at": "datetime", - "updated_at": "datetime" - } - ] -} -``` \ No newline at end of file + diff --git a/apps/portal/src/app/nebula/api-reference/update-session/data.jsx b/apps/portal/src/app/nebula/api-reference/update-session/data.jsx index 744ae3205b5..aa6b08498e3 100644 --- a/apps/portal/src/app/nebula/api-reference/update-session/data.jsx +++ b/apps/portal/src/app/nebula/api-reference/update-session/data.jsx @@ -26,10 +26,6 @@ export const sessionEndpointData = { code: `curl -X GET https://nebula-api.thirdweb.com/session/{session_id} \\ -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY"`, }, - { - language: "JavaScript", - code: "test", - }, ], apiResponses: [ { From 6a4cf2e975cf8712bbe637fc3b57fda8da448da7 Mon Sep 17 00:00:00 2001 From: samina Date: Fri, 3 Jan 2025 17:44:03 -0700 Subject: [PATCH 4/4] update --- .../src/app/nebula-app/(app)/api/chat.ts | 1 + apps/portal/mdx-components.tsx | 173 +++---- .../api-reference/chat/EndpointMetadata.tsx | 72 +++ .../app/nebula/api-reference/chat/data.jsx | 100 ---- .../app/nebula/api-reference/chat/page.mdx | 17 +- .../clear-session/EndpointMetadata.tsx | 31 ++ .../api-reference/clear-session/data.jsx | 48 -- .../api-reference/clear-session/page.mdx | 5 +- .../src/app/nebula/api-reference/common.ts | 124 +++++ .../create-session/EndpointMetadata.tsx | 42 ++ .../api-reference/create-session/data.jsx | 81 --- .../api-reference/create-session/page.mdx | 5 +- .../delete-session/EndpointMetadata.tsx | 39 ++ .../api-reference/delete-session/data.jsx | 44 -- .../api-reference/delete-session/page.mdx | 5 +- .../execute/EndpointMetadata.tsx | 72 +++ .../app/nebula/api-reference/execute/data.jsx | 89 ---- .../app/nebula/api-reference/execute/page.mdx | 6 +- .../get-session/EndpointMetadata.tsx | 32 ++ .../nebula/api-reference/get-session/data.jsx | 58 --- .../nebula/api-reference/get-session/page.mdx | 5 +- .../list-session/EndpointMetadata.tsx | 40 ++ .../api-reference/list-session/data.jsx | 68 --- .../api-reference/list-session/page.mdx | 5 +- .../update-session/EndpointMetadata.tsx | 44 ++ .../api-reference/update-session/data.jsx | 54 -- .../api-reference/update-session/page.mdx | 5 +- apps/portal/src/app/nebula/layout.tsx | 6 +- apps/portal/src/app/nebula/sidebar.tsx | 83 ++-- .../references/components/TDoc/Function.tsx | 3 +- .../references/components/TDoc/Summary.tsx | 3 +- .../Document/APIEndpointMeta/ApiEndpoint.tsx | 285 +++++++++++ .../APIEndpointMeta/RequestExample.tsx | 55 +++ .../Document/ApiEndpointComponent.tsx | 395 --------------- apps/portal/src/components/Document/Code.tsx | 40 +- .../src/components/Document/InlineCode.tsx | 18 + .../src/components/Document/List.module.css | 6 +- apps/portal/src/components/Document/index.ts | 5 +- .../src/components/Layouts/DocLayout.tsx | 2 +- apps/portal/src/components/ui/badge.tsx | 10 +- apps/portal/src/components/ui/collapsible.tsx | 11 - apps/portal/src/components/ui/select.tsx | 26 +- apps/portal/tailwind.config.ts | 207 ++++---- pnpm-lock.yaml | 461 +++++++++++++++++- 44 files changed, 1629 insertions(+), 1252 deletions(-) create mode 100644 apps/portal/src/app/nebula/api-reference/chat/EndpointMetadata.tsx delete mode 100644 apps/portal/src/app/nebula/api-reference/chat/data.jsx create mode 100644 apps/portal/src/app/nebula/api-reference/clear-session/EndpointMetadata.tsx delete mode 100644 apps/portal/src/app/nebula/api-reference/clear-session/data.jsx create mode 100644 apps/portal/src/app/nebula/api-reference/common.ts create mode 100644 apps/portal/src/app/nebula/api-reference/create-session/EndpointMetadata.tsx delete mode 100644 apps/portal/src/app/nebula/api-reference/create-session/data.jsx create mode 100644 apps/portal/src/app/nebula/api-reference/delete-session/EndpointMetadata.tsx delete mode 100644 apps/portal/src/app/nebula/api-reference/delete-session/data.jsx create mode 100644 apps/portal/src/app/nebula/api-reference/execute/EndpointMetadata.tsx delete mode 100644 apps/portal/src/app/nebula/api-reference/execute/data.jsx create mode 100644 apps/portal/src/app/nebula/api-reference/get-session/EndpointMetadata.tsx delete mode 100644 apps/portal/src/app/nebula/api-reference/get-session/data.jsx create mode 100644 apps/portal/src/app/nebula/api-reference/list-session/EndpointMetadata.tsx delete mode 100644 apps/portal/src/app/nebula/api-reference/list-session/data.jsx create mode 100644 apps/portal/src/app/nebula/api-reference/update-session/EndpointMetadata.tsx delete mode 100644 apps/portal/src/app/nebula/api-reference/update-session/data.jsx create mode 100644 apps/portal/src/components/Document/APIEndpointMeta/ApiEndpoint.tsx create mode 100644 apps/portal/src/components/Document/APIEndpointMeta/RequestExample.tsx delete mode 100644 apps/portal/src/components/Document/ApiEndpointComponent.tsx create mode 100644 apps/portal/src/components/Document/InlineCode.tsx delete mode 100644 apps/portal/src/components/ui/collapsible.tsx diff --git a/apps/dashboard/src/app/nebula-app/(app)/api/chat.ts b/apps/dashboard/src/app/nebula-app/(app)/api/chat.ts index 78147d23038..b3b7fc6e177 100644 --- a/apps/dashboard/src/app/nebula-app/(app)/api/chat.ts +++ b/apps/dashboard/src/app/nebula-app/(app)/api/chat.ts @@ -30,6 +30,7 @@ export async function promptNebula(params: { body.context_filter = { chain_ids: params.contextFilters.chainIds || [], contract_addresses: params.contextFilters.contractAddresses || [], + wallet_addresses: params.contextFilters.walletAddresses || [], }; } diff --git a/apps/portal/mdx-components.tsx b/apps/portal/mdx-components.tsx index 6faf4c5f2f7..5a4a1bc2b31 100644 --- a/apps/portal/mdx-components.tsx +++ b/apps/portal/mdx-components.tsx @@ -1,4 +1,4 @@ -import { CodeBlock, InlineCode } from "@/components/Document/Code"; +import { CodeBlock } from "@/components/Document/Code"; import { DocLink } from "@/components/Document/DocLink"; import { Heading } from "@/components/Document/Heading"; import { OrderedList, UnorderedList } from "@/components/Document/List"; @@ -8,97 +8,98 @@ import { TBody, Table, Td, Th, Tr } from "@/components/Document/Table"; import GithubSlugger from "github-slugger"; import type { MDXComponents } from "mdx/types"; import type { BuiltinLanguage } from "shiki"; +import { InlineCode } from "./src/components/Document"; export function useMDXComponents(components: MDXComponents): MDXComponents { - const slugger = new GithubSlugger(); + const slugger = new GithubSlugger(); - function nameToLink(name: React.ReactNode) { - if (typeof name !== "string") { - return undefined; - } + function nameToLink(name: React.ReactNode) { + if (typeof name !== "string") { + return undefined; + } - return slugger.slug(name); - } + return slugger.slug(name); + } - function getHeading( - depth: number, - props: { - children?: React.ReactNode; - id?: string; - }, - ) { - return ( - - {props.children} - - ); - } + function getHeading( + depth: number, + props: { + children?: React.ReactNode; + id?: string; + }, + ) { + return ( + + {props.children} + + ); + } - return { - ...components, - a(props) { - const { href, children } = props; - return {children}; - }, - h1(props) { - return getHeading(1, props); - }, - h2(props) { - return getHeading(2, props); - }, - h3(props) { - return getHeading(3, props); - }, - h4(props) { - return getHeading(4, props); - }, - h5(props) { - return getHeading(5, props); - }, - h6(props) { - return getHeading(6, props); - }, - code(props) { - const code = props.children; - const lang = props.className?.replace("language-", ""); + return { + ...components, + a(props) { + const { href, children } = props; + return {children}; + }, + h1(props) { + return getHeading(1, props); + }, + h2(props) { + return getHeading(2, props); + }, + h3(props) { + return getHeading(3, props); + }, + h4(props) { + return getHeading(4, props); + }, + h5(props) { + return getHeading(5, props); + }, + h6(props) { + return getHeading(6, props); + }, + code(props) { + const code = props.children; + const lang = props.className?.replace("language-", ""); - if (!props.className) { - return ; - } + if (!props.className) { + return ; + } - return ( - - ); - }, - p(props) { - return {props.children}; - }, - ul(props) { - return {props.children}; - }, - ol(props) { - return {props.children}; - }, - hr() { - return ; - }, - table(props) { - return {props.children}
; - }, - th(props) { - return {props.children}; - }, - td(props) { - return {props.children}; - }, - tr(props) { - return {props.children}; - }, - tbody(props) { - return {props.children}; - }, - }; + return ( + + ); + }, + p(props) { + return {props.children}; + }, + ul(props) { + return {props.children}; + }, + ol(props) { + return {props.children}; + }, + hr() { + return ; + }, + table(props) { + return {props.children}
; + }, + th(props) { + return {props.children}; + }, + td(props) { + return {props.children}; + }, + tr(props) { + return {props.children}; + }, + tbody(props) { + return {props.children}; + }, + }; } diff --git a/apps/portal/src/app/nebula/api-reference/chat/EndpointMetadata.tsx b/apps/portal/src/app/nebula/api-reference/chat/EndpointMetadata.tsx new file mode 100644 index 00000000000..d29b0825188 --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/chat/EndpointMetadata.tsx @@ -0,0 +1,72 @@ +import { ApiEndpoint } from "@/components/Document/APIEndpointMeta/ApiEndpoint"; +import { + nebulaAPI401Response, + nebulaAPI422Response, + nebulaContextFilterPathParameter, + nebulaExecuteConfigPathParameter, + nebulaSecretKeyHeaderParameter, + nebulaSessionIdPathParameter, +} 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/data.jsx b/apps/portal/src/app/nebula/api-reference/chat/data.jsx deleted file mode 100644 index 1aa7e7030ad..00000000000 --- a/apps/portal/src/app/nebula/api-reference/chat/data.jsx +++ /dev/null @@ -1,100 +0,0 @@ -// data.js - -export const chatEndpointData = { - title: "Initiate Chat", - method: "POST", - description: "Starts a new chat session with the specified parameters.", - endpointUrl: "/chat", - parameters: [], - headers: [ - { - name: "x-secret-key", - required: true, - description: "Your thirdweb secret key for authentication.", - type: "string", - }, - { - name: "Content-Type", - required: true, - description: "Indicates the media type of the request body.", - type: "string", - }, - ], - bodyParameters: [ - { - name: "user_id", - required: true, - description: "The unique identifier for the user starting the chat.", - type: "string", - }, - { - name: "message", - required: true, - description: "The initial message to start the chat.", - type: "string", - }, - { - name: "metadata", - required: false, - description: "Optional metadata associated with the chat session.", - type: "object", - }, - ], - codeExamples: [ - { - language: "curl", - code: `curl -X POST https://nebula-api.thirdweb.com/chat \\ - -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY" \\ - -H "Content-Type: application/json" \\ - -d '{"user_id": "user123", "message": "Hello!", "metadata": {"topic": "support"}}'`, - }, - { - language: "JavaScript", - code: `const axios = require('axios'); - - const secretKey = 'YOUR_THIRDWEB_SECRET_KEY'; - - axios.post('https://nebula-api.thirdweb.com/chat', { - user_id: 'user123', - message: 'Hello!', - metadata: { topic: 'support' }, - }, { - headers: { - 'x-secret-key': secretKey, - 'Content-Type': 'application/json', - }, - }) - .then(response => { - console.log("Chat initiated successfully.", response.data); - }) - .catch(error => { - console.error(error); - });`, - }, - ], - apiResponses: [ - { - status: "201", - description: "Chat initiated successfully.", - code: `{ - "chat_id": "chat123", - "status": "active", - "created_at": "2024-01-01T00:00:00Z" - }`, - }, - { - status: "400", - description: "Invalid input data.", - code: `{ - "error": "Missing user_id or message." - }`, - }, - { - status: "403", - description: "Unauthorized request.", - code: `{ - "error": "Invalid secret key." - }`, - }, - ], -}; diff --git a/apps/portal/src/app/nebula/api-reference/chat/page.mdx b/apps/portal/src/app/nebula/api-reference/chat/page.mdx index 2a1ee202494..ba428db248b 100644 --- a/apps/portal/src/app/nebula/api-reference/chat/page.mdx +++ b/apps/portal/src/app/nebula/api-reference/chat/page.mdx @@ -1,7 +1,6 @@ -import { ApiEndpoint} from '@doc'; -import { chatEndpointData } from './data'; +import { EndpointMetadata } from './EndpointMetadata'; - + #### Chat Actions @@ -45,11 +44,11 @@ When handling actions: **Example Implementation with thirdweb SDK:** ```javascript -import { - createThirdwebClient, - prepareTransaction, +import { + createThirdwebClient, + prepareTransaction, sendTransaction, - privateKeyToAccount + privateKeyToAccount } from "thirdweb"; // Example function to handle the API response @@ -68,7 +67,7 @@ async function handleNebulaResponse(response) { // 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); @@ -87,7 +86,7 @@ async function handleNebulaResponse(response) { transaction, account }); - + return result; } catch (error) { console.error("Error processing transaction:", error); 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 new file mode 100644 index 00000000000..c34fc6f7259 --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/clear-session/EndpointMetadata.tsx @@ -0,0 +1,31 @@ +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/data.jsx b/apps/portal/src/app/nebula/api-reference/clear-session/data.jsx deleted file mode 100644 index 58e012bb235..00000000000 --- a/apps/portal/src/app/nebula/api-reference/clear-session/data.jsx +++ /dev/null @@ -1,48 +0,0 @@ -// data.js - -export const clearSessionEndpointData = { - title: "Clear Session", - method: "POST", - description: - "Clears all messages for a specific session using the session ID.", - endpointUrl: "/session/{session_id}/clear", - parameters: [ - { - name: "session_id", - required: true, - description: "The unique identifier of the session to clear.", - type: "string", - }, - ], - headers: [ - { - name: "x-secret-key", - required: true, - description: "Your thirdweb secret key for authentication.", - type: "string", - }, - ], - bodyParameters: [], - codeExamples: [ - { - language: "curl", - code: `curl -X POST https://nebula-api.thirdweb.com/session/{session_id}/clear \\ - -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY"`, - }, - ], - apiResponses: [ - { - status: "200", - description: "Session messages cleared successfully.", - code: `{ - "message": "All session messages have been cleared." - }`, - }, - { - status: "404", - description: "Session not found.", - code: `{ - "error": "Session with ID 'abc123' not found." }`, - }, - ], -}; 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 index 092376c91e6..c019dd83bd1 100644 --- a/apps/portal/src/app/nebula/api-reference/clear-session/page.mdx +++ b/apps/portal/src/app/nebula/api-reference/clear-session/page.mdx @@ -1,4 +1,3 @@ -import { ApiEndpoint} from '@doc'; -import { clearSessionEndpointData } from './data'; +import { EndpointMetadata } from './EndpointMetadata'; - \ No newline at end of file + \ 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 new file mode 100644 index 00000000000..2ea3f409459 --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/common.ts @@ -0,0 +1,124 @@ +import type { APIParameter } from "../../../components/Document/APIEndpointMeta/ApiEndpoint"; + +export const nebulaFullSessionResponse = `\ +{ + "result": { + "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "account_id": "string", + "model_name": "string", + "is_public": true, + "execute_config": { + "mode": "client", + "signer_wallet_address": "string", + "engine_url": "string", + "engine_authorization_token": "string", + "engine_backend_wallet_address": "string", + "smart_account_address": "string", + "smart_account_factory_address": "string", + "smart_account_session_key": "string" + }, + "title": "string", + "memory": [ + {} + ], + "history": [ + {} + ], + "action": [ + {} + ], + "context_filter": { + "chain_ids": [ + "1", "137" + ], + "contract_addresses": [ + "0x..." + ], + "wallet_addresses": [ + "0x..." + ] + }, + "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 nebulaExecuteConfigType = `\ +{ + mode: "engine"; + engine_url: string; + engine_authorization_token: string; + engine_backend_wallet_address: string; +} | { + mode: "session_key"; + smart_account_address: string; + smart_account_factory_address: string; + smart_account_session_key: string; +} | { + mode: "client"; + signer_wallet_address: string; +}`; + +export const nebulaContextFilterType = `\ +{ + chainIds: string[] | null; + contractAddresses: string[] | null; + walletAddresses: string[] | null; +}`; + +export const nebulaSecretKeyHeaderParameter: APIParameter = { + name: "x-secret-key", + required: true, + description: "Your thirdweb secret key for authentication.", + type: "string", + example: "YOUR_THIRDWEB_SECRET_KEY", +}; + +export const nebulaSessionIdPathParameter: APIParameter = { + name: "session_id", + required: true, + description: "The unique ID of the session", + type: "string", + example: "3fa85f64-5717-4562-b3fc-2c963f66afa6", +}; + +export const nebulaExecuteConfigPathParameter: APIParameter = { + name: "execute_config", + required: false, + description: "The configuration for transaction execution", + type: nebulaExecuteConfigType, + example: { + mode: "client", + signer_wallet_address: "0xc3F2b2a12Eba0f5989cD75B2964E31D56603a2cE", + }, +}; + +export const nebulaContextFilterPathParameter: APIParameter = { + name: "context_filter", + required: false, + description: "Provide additional context information along with the message", + 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 new file mode 100644 index 00000000000..6d6309bc1b2 --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/create-session/EndpointMetadata.tsx @@ -0,0 +1,42 @@ +import { ApiEndpoint } from "@/components/Document/APIEndpointMeta/ApiEndpoint"; +import { + nebulaAPI401Response, + nebulaAPI422Response, + nebulaContextFilterPathParameter, + nebulaExecuteConfigPathParameter, + nebulaFullSessionResponse, + nebulaSecretKeyHeaderParameter, +} from "../common"; + +export function EndpointMetadata() { + return ( + + ); +} diff --git a/apps/portal/src/app/nebula/api-reference/create-session/data.jsx b/apps/portal/src/app/nebula/api-reference/create-session/data.jsx deleted file mode 100644 index dcef3b9b45d..00000000000 --- a/apps/portal/src/app/nebula/api-reference/create-session/data.jsx +++ /dev/null @@ -1,81 +0,0 @@ -// data.js - -export const createSessionEndpointData = { - title: "Create Session", - method: "POST", - description: "Creates a new session.", - endpointUrl: "/session", - parameters: [], - headers: [ - { - name: "x-secret-key", - required: true, - description: "Your thirdweb secret key for authentication.", - type: "string", - }, - ], - bodyParameters: [ - { - name: "session_name", - required: true, - description: "The name for the new session.", - type: "string", - }, - { - name: "metadata", - required: false, - description: "Optional metadata to associate with the session.", - type: "object", - }, - ], - codeExamples: [ - { - language: "curl", - code: `curl -X POST https://nebula-api.thirdweb.com/session \\ - -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY" \\ - -d '{"session_name": "my_new_session", "metadata": {"key": "value"}}'`, - }, - { - language: "JavaScript", - code: `const axios = require('axios'); - - const secretKey = 'YOUR_THIRDWEB_SECRET_KEY'; - - axios.post('https://nebula-api.thirdweb.com/session', { - session_name: 'my_new_session', - metadata: { key: 'value' }, - }, { - headers: { - 'x-secret-key': secretKey, - }, - }) - .then(response => { - console.log("Session created successfully.", response.data); - }) - .catch(error => { - console.error(error); - });`, - }, - ], - apiResponses: [ - { - status: "201", - description: "Session created successfully.", - code: `{ - "session_id": "abc123", - "session_name": "my_new_session", - "metadata": { - "key": "value" - }, - "created_at": "2024-01-01T00:00:00Z" - }`, - }, - { - status: "400", - description: "Invalid input data.", - code: `{ - "error": "Invalid session name provided." - }`, - }, - ], -}; 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 index 926fdbe493e..c019dd83bd1 100644 --- a/apps/portal/src/app/nebula/api-reference/create-session/page.mdx +++ b/apps/portal/src/app/nebula/api-reference/create-session/page.mdx @@ -1,4 +1,3 @@ -import { ApiEndpoint } from '@doc'; -import { createSessionEndpointData } from './data'; +import { EndpointMetadata } from './EndpointMetadata'; - \ No newline at end of file + \ 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 new file mode 100644 index 00000000000..95171c41b34 --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/delete-session/EndpointMetadata.tsx @@ -0,0 +1,39 @@ +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/data.jsx b/apps/portal/src/app/nebula/api-reference/delete-session/data.jsx deleted file mode 100644 index e4d70bb9d5f..00000000000 --- a/apps/portal/src/app/nebula/api-reference/delete-session/data.jsx +++ /dev/null @@ -1,44 +0,0 @@ -export const deleteSessionEndpointData = { - title: "Delete Session", - method: "DELETE", - description: "Deletes a specific session using the session ID.", - endpointUrl: "/session/{session_id}", - parameters: [ - { - name: "session_id", - required: true, - description: "The unique identifier of the session to delete.", - type: "string", - }, - ], - headers: [ - { - name: "x-secret-key", - required: true, - description: "Your thirdweb secret key for authentication.", - type: "string", - }, - ], - bodyParameters: [], - codeExamples: [ - { - language: "curl", - code: `curl -X DELETE https://nebula-api.thirdweb.com/session/{session_id} \\ - -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY"`, - }, - ], - apiResponses: [ - { - status: "204", - description: "Session deleted successfully.", - code: "(No Content)", - }, - { - status: "404", - description: "Session not found.", - code: `{ - "error": "Session with ID 'abc123' not found." - }`, - }, - ], -}; 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 index 9088c3c87e1..c019dd83bd1 100644 --- a/apps/portal/src/app/nebula/api-reference/delete-session/page.mdx +++ b/apps/portal/src/app/nebula/api-reference/delete-session/page.mdx @@ -1,4 +1,3 @@ -import { ApiEndpoint } from '@doc'; -import { deleteSessionEndpointData } from './data'; +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 new file mode 100644 index 00000000000..3ee9bd8d79e --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/execute/EndpointMetadata.tsx @@ -0,0 +1,72 @@ +import { ApiEndpoint } from "@/components/Document/APIEndpointMeta/ApiEndpoint"; +import { + nebulaAPI401Response, + nebulaAPI422Response, + nebulaContextFilterPathParameter, + nebulaExecuteConfigPathParameter, + nebulaSecretKeyHeaderParameter, + nebulaSessionIdPathParameter, +} 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/execute/data.jsx b/apps/portal/src/app/nebula/api-reference/execute/data.jsx deleted file mode 100644 index 43d7346648c..00000000000 --- a/apps/portal/src/app/nebula/api-reference/execute/data.jsx +++ /dev/null @@ -1,89 +0,0 @@ -export const executeEndpointData = { - title: "Execute Action", - method: "POST", - description: "Executes a specified action.", - endpointUrl: "/execute", - parameters: [], - headers: [ - { - name: "x-secret-key", - required: true, - description: "Your thirdweb secret key for authentication.", - type: "string", - }, - { - name: "Content-Type", - required: true, - description: "Indicates the media type of the request body.", - type: "string", - }, - ], - bodyParameters: [ - { - name: "action", - required: true, - description: "The action to execute.", - type: "string", - }, - { - name: "parameters", - required: false, - description: "Optional parameters for the action.", - type: "object", - }, - ], - codeExamples: [ - { - language: "curl", - code: `curl -X POST https://nebula-api.thirdweb.com/execute \\ - -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY" \\ - -H "Content-Type: application/json" \\ - -d '{"action": "your_action", "parameters": {"key": "value"}}'`, - }, - { - language: "JavaScript", - code: `const axios = require('axios'); - - const secretKey = 'YOUR_THIRDWEB_SECRET_KEY'; - - axios.post('https://nebula-api.thirdweb.com/execute', { - action: 'your_action', - parameters: { key: 'value' }, - }, { - headers: { - 'x-secret-key': secretKey, - 'Content-Type': 'application/json', - }, - }) - .then(response => { - console.log("Action executed successfully.", response.data); - }) - .catch(error => { - console.error(error); - });`, - }, - ], - apiResponses: [ - { - status: "200", - description: "Action executed successfully.", - code: `{ - "result": "Execution completed successfully." - }`, - }, - { - status: "400", - description: "Invalid input data.", - code: `{ - "error": "Invalid action specified." - }`, - }, - { - status: "403", - description: "Unauthorized request.", - code: `{ - "error": "Invalid secret key." - }`, - }, - ], -}; diff --git a/apps/portal/src/app/nebula/api-reference/execute/page.mdx b/apps/portal/src/app/nebula/api-reference/execute/page.mdx index fe4f5d3b182..c019dd83bd1 100644 --- a/apps/portal/src/app/nebula/api-reference/execute/page.mdx +++ b/apps/portal/src/app/nebula/api-reference/execute/page.mdx @@ -1,5 +1,3 @@ +import { EndpointMetadata } from './EndpointMetadata'; -import { ApiEndpoint } from '@doc'; -import { executeEndpointData } from './data'; - - + \ 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 new file mode 100644 index 00000000000..fbcdf0a2079 --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/get-session/EndpointMetadata.tsx @@ -0,0 +1,32 @@ +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/data.jsx b/apps/portal/src/app/nebula/api-reference/get-session/data.jsx deleted file mode 100644 index 4ba4aa9c5c9..00000000000 --- a/apps/portal/src/app/nebula/api-reference/get-session/data.jsx +++ /dev/null @@ -1,58 +0,0 @@ -// data.js - -export const getSessionEndpointData = { - title: "Get Session", - method: "GET", - description: "Fetches details of a specific session using the session ID.", - endpointUrl: "/session/{session_id}", - parameters: [ - { - name: "session_id", - required: true, - description: "The unique identifier of the session to retrieve.", - type: "string", - }, - ], - headers: [ - { - name: "x-secret-key", - required: true, - description: "Your thirdweb secret key for authentication.", - type: "string", - }, - ], - bodyParameters: [], - codeExamples: [ - { - language: "curl", - code: `curl -X GET https://nebula-api.thirdweb.com/session/{session_id} \\ - -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY"`, - }, - ], - apiResponses: [ - { - status: "200", - description: "Session details retrieved successfully.", - code: `{ - "session_id": "abc123", - "created_at": "2024-01-01T00:00:00Z", - "last_active": "2024-01-02T12:34:56Z", - "messages": [ - { - "message_id": "msg1", - "content": "Hello, how can I assist you?", - "timestamp": "2024-01-01T01:23:45Z" - } - // Additional messages... - ] - }`, - }, - { - status: "404", - description: "Session not found.", - code: `{ - "error": "Session with ID 'abc123' not found." - }`, - }, - ], -}; 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 index e15c6887cf9..c019dd83bd1 100644 --- a/apps/portal/src/app/nebula/api-reference/get-session/page.mdx +++ b/apps/portal/src/app/nebula/api-reference/get-session/page.mdx @@ -1,4 +1,3 @@ -import { ApiEndpoint } from '@doc'; -import { getSessionEndpointData } from './data'; +import { EndpointMetadata } from './EndpointMetadata'; - \ No newline at end of file + \ 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 new file mode 100644 index 00000000000..857355c13d5 --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/list-session/EndpointMetadata.tsx @@ -0,0 +1,40 @@ +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/data.jsx b/apps/portal/src/app/nebula/api-reference/list-session/data.jsx deleted file mode 100644 index 7698b850bc5..00000000000 --- a/apps/portal/src/app/nebula/api-reference/list-session/data.jsx +++ /dev/null @@ -1,68 +0,0 @@ -// data.js - -export const listSessionsEndpointData = { - title: "List Sessions", - method: "GET", - description: "Fetches a list of all available sessions.", - endpointUrl: "/session/list", - parameters: [], - headers: [ - { - name: "x-secret-key", - required: true, - description: "Your thirdweb secret key for authentication.", - type: "string", - }, - ], - bodyParameters: [], - codeExamples: [ - { - language: "curl", - code: `curl -X GET https://nebula-api.thirdweb.com/session/list \\ - -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY"`, - }, - { - language: "JavaScript", - code: `const axios = require('axios'); - - const secretKey = 'YOUR_THIRDWEB_SECRET_KEY'; - - axios.get('https://nebula-api.thirdweb.com/session/list', { - headers: { - 'x-secret-key': secretKey, - }, - }) - .then(response => { - console.log(response.data); - }) - .catch(error => { - console.error(error); - });`, - }, - ], - apiResponses: [ - { - status: "200", - description: "List of sessions retrieved successfully.", - code: `[ - { - "session_id": "abc123", - "session_name": "Session 1", - "created_at": "2024-01-01T00:00:00Z" - }, - { - "session_id": "def456", - "session_name": "Session 2", - "created_at": "2024-01-02T00:00:00Z" - } - ]`, - }, - { - status: "403", - description: "Unauthorized request.", - code: `{ - "error": "Invalid secret key." - }`, - }, - ], -}; 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 index e121a7548a4..c019dd83bd1 100644 --- a/apps/portal/src/app/nebula/api-reference/list-session/page.mdx +++ b/apps/portal/src/app/nebula/api-reference/list-session/page.mdx @@ -1,4 +1,3 @@ -import { ApiEndpoint} from '@doc'; -import { listSessionsEndpointData } from './data'; +import { EndpointMetadata } from './EndpointMetadata'; - + \ No newline at end of file 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 new file mode 100644 index 00000000000..2c9c6d72007 --- /dev/null +++ b/apps/portal/src/app/nebula/api-reference/update-session/EndpointMetadata.tsx @@ -0,0 +1,44 @@ +import { ApiEndpoint } from "@/components/Document/APIEndpointMeta/ApiEndpoint"; +import { + nebulaAPI401Response, + nebulaAPI422Response, + nebulaContextFilterPathParameter, + nebulaExecuteConfigPathParameter, + nebulaFullSessionResponse, + nebulaSecretKeyHeaderParameter, + nebulaSessionIdPathParameter, +} from "../common"; + +export function EndpointMetadata() { + return ( + + ); +} diff --git a/apps/portal/src/app/nebula/api-reference/update-session/data.jsx b/apps/portal/src/app/nebula/api-reference/update-session/data.jsx deleted file mode 100644 index aa6b08498e3..00000000000 --- a/apps/portal/src/app/nebula/api-reference/update-session/data.jsx +++ /dev/null @@ -1,54 +0,0 @@ -export const sessionEndpointData = { - title: "Update Session", - method: "GET", - description: "Fetches details of a specific session using the session ID.", - endpointUrl: "/session/{session_id}", - parameters: [ - { - name: "session_id", - required: true, - description: "The unique identifier of the session to retrieve.", - type: "string", - }, - ], - headers: [ - { - name: "x-secret-key", - required: true, - description: "Your thirdweb secret key for authentication.", - type: "string", - }, - ], - bodyParameters: [], - codeExamples: [ - { - language: "curl", - code: `curl -X GET https://nebula-api.thirdweb.com/session/{session_id} \\ - -H "x-secret-key: YOUR_THIRDWEB_SECRET_KEY"`, - }, - ], - apiResponses: [ - { - status: "200", - description: "Session details retrieved successfully.", - code: `{ - "session_id": "abc123", - "created_at": "2024-01-01T00:00:00Z", - "last_active": "2024-01-02T12:34:56Z", - "messages": [ - "message_id": "msg1", - "content": "Hello, how can I assist you?", - "timestamp": "2024-01-01T01:23:45Z" - // Additional messages... - ] -}`, - }, - { - status: "404", - description: "Session not found.", - code: `{ - "error": "Session with ID 'abc123' not found." -}`, - }, - ], -}; 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 index 8c07794e256..c019dd83bd1 100644 --- a/apps/portal/src/app/nebula/api-reference/update-session/page.mdx +++ b/apps/portal/src/app/nebula/api-reference/update-session/page.mdx @@ -1,4 +1,3 @@ -import { ApiEndpoint} from '@doc'; -import { sessionEndpointData } from './data'; +import { EndpointMetadata } from './EndpointMetadata'; - + \ No newline at end of file diff --git a/apps/portal/src/app/nebula/layout.tsx b/apps/portal/src/app/nebula/layout.tsx index 2c1a868e190..32388f23025 100644 --- a/apps/portal/src/app/nebula/layout.tsx +++ b/apps/portal/src/app/nebula/layout.tsx @@ -4,7 +4,11 @@ import { sidebar } from "./sidebar"; export default async function Layout(props: { children: React.ReactNode }) { return ( - + {props.children} ); diff --git a/apps/portal/src/app/nebula/sidebar.tsx b/apps/portal/src/app/nebula/sidebar.tsx index 5c12ff95597..ea29218d203 100644 --- a/apps/portal/src/app/nebula/sidebar.tsx +++ b/apps/portal/src/app/nebula/sidebar.tsx @@ -3,7 +3,6 @@ import { BrickIcon, CodeIcon, EditIcon, - GetIcon, NebulaSideIcon, PluginIcon, QuestionIcon, @@ -45,45 +44,61 @@ export const sidebar: SideBar = { icon: , links: [ { - name: "Send Message", - href: "/nebula/api-reference/chat", - icon: , + name: "GET", + expanded: true, + // isCollapsible: false, + links: [ + { + name: "List Sessions", + href: "/nebula/api-reference/list-session", + }, + { + name: "Get Session", + href: "/nebula/api-reference/get-session", + }, + ], }, { - name: "Execute Transaction", - href: "/nebula/api-reference/execute", - icon: , + name: "POST", + expanded: true, + links: [ + { + name: "Send Message", + href: "/nebula/api-reference/chat", + }, + { + name: "Execute Transaction", + href: "/nebula/api-reference/execute", + }, + { + name: "Create Session", + href: "/nebula/api-reference/create-session", + }, + { + name: "Clear Session", + href: "/nebula/api-reference/clear-session", + }, + ], }, { - name: "List Sessions", - href: "/nebula/api-reference/list-session", - icon: , + name: "PUT", + expanded: true, + links: [ + { + name: "Update Session", + href: "/nebula/api-reference/update-session", + }, + ], }, { - name: "Get Session", - href: "/nebula/api-reference/get-session", - icon: , - }, - { - name: "Create Session", - href: "/nebula/api-reference/create-session", - icon: , - }, - - { - name: "Update Session", - href: "/nebula/api-reference/update-session", - icon: , - }, - { - name: "Clear Session", - href: "/nebula/api-reference/clear-session", - icon: , - }, - { - name: "Delete Session", - href: "/nebula/api-reference/delete-session", - icon: , + name: "DELETE", + expanded: true, + links: [ + { + name: "Delete Session", + href: "/nebula/api-reference/delete-session", + }, + ], }, ], }, diff --git a/apps/portal/src/app/references/components/TDoc/Function.tsx b/apps/portal/src/app/references/components/TDoc/Function.tsx index 93f74035be5..3189959bac5 100644 --- a/apps/portal/src/app/references/components/TDoc/Function.tsx +++ b/apps/portal/src/app/references/components/TDoc/Function.tsx @@ -1,4 +1,5 @@ import { DocLink, Paragraph } from "@/components/Document"; +import { InlineCode } from "@/components/Document/InlineCode"; import { sluggerContext } from "@/contexts/slugger"; import invariant from "tiny-invariant"; import { @@ -11,7 +12,7 @@ import { getFunctionSignature, } from "typedoc-better-json"; import { Callout } from "../../../../components/Document/Callout"; -import { CodeBlock, InlineCode } from "../../../../components/Document/Code"; +import { CodeBlock } from "../../../../components/Document/Code"; import { Details } from "../../../../components/Document/Details"; import { Heading } from "../../../../components/Document/Heading"; import { DeprecatedCalloutTDoc } from "./Deprecated"; diff --git a/apps/portal/src/app/references/components/TDoc/Summary.tsx b/apps/portal/src/app/references/components/TDoc/Summary.tsx index f2912fec59c..d5c4df952a3 100644 --- a/apps/portal/src/app/references/components/TDoc/Summary.tsx +++ b/apps/portal/src/app/references/components/TDoc/Summary.tsx @@ -1,9 +1,10 @@ import { sluggerContext } from "@/contexts/slugger"; import invariant from "tiny-invariant"; import type { FunctionSignature } from "typedoc-better-json"; -import { CodeBlock, InlineCode } from "../../../../components/Document/Code"; +import { CodeBlock } from "../../../../components/Document/Code"; import { DocLink } from "../../../../components/Document/DocLink"; import { Heading } from "../../../../components/Document/Heading"; +import { InlineCode } from "../../../../components/Document/InlineCode"; import { OrderedList, UnorderedList, diff --git a/apps/portal/src/components/Document/APIEndpointMeta/ApiEndpoint.tsx b/apps/portal/src/components/Document/APIEndpointMeta/ApiEndpoint.tsx new file mode 100644 index 00000000000..0de0782e750 --- /dev/null +++ b/apps/portal/src/components/Document/APIEndpointMeta/ApiEndpoint.tsx @@ -0,0 +1,285 @@ +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: string; + type?: string; + example?: string | boolean | number | object; + } + | { + name: string; + required: true; + example: string; + description: string; + type?: string; + }; + +export type ApiEndpointMeta = { + title: string; + description: string; + 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, + }), + lang: "javascript", + label: "Fetch", + }, + { + code: createCurlCommand({ + metadata: props.metadata, + }), + lang: "bash", + label: "Curl", + }, + ]; + + 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 { + label: example.label, + code: ( + + ), + }; + })} + method={props.metadata.method} + endpointUrl={props.metadata.path} + /> +
+
+ +
+ + 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 new file mode 100644 index 00000000000..32bd70a61a5 --- /dev/null +++ b/apps/portal/src/components/Document/APIEndpointMeta/RequestExample.tsx @@ -0,0 +1,55 @@ +"use client"; + +import { Badge } from "@/components/ui/badge"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import { useState } from "react"; + +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/components/Document/ApiEndpointComponent.tsx b/apps/portal/src/components/Document/ApiEndpointComponent.tsx deleted file mode 100644 index 2117442aefd..00000000000 --- a/apps/portal/src/components/Document/ApiEndpointComponent.tsx +++ /dev/null @@ -1,395 +0,0 @@ -"use client"; - -import { Badge } from "@/components/ui/badge"; -import { Button } from "@/components/ui/button"; -import { - Collapsible, - CollapsibleContent, - CollapsibleTrigger, -} from "@/components/ui/collapsible"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; -import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; -import { ChevronDown, ChevronUp, Copy, Minus, Plus } from "lucide-react"; -import React from "react"; - -const sectionClass = - "pt-6 mt-6 border-t border-border first:pt-0 first:mt-0 first:border-t-0"; - -interface NestedParameter { - name: string; - required: boolean; - description: string; - type: string; - properties?: NestedParameter[]; -} - -interface Parameter extends NestedParameter {} - -interface Header { - name: string; - required: boolean; - description: string; - type: string; -} - -interface ApiResponse { - status: string; - description: string; - code: string; -} - -interface CodeExample { - language: string; - code: string; -} - -interface ApiEndpointProps { - title: string; - method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH"; - description: string; - endpointUrl: string; - parameters: Parameter[]; - headers: Header[]; - bodyParameters: Parameter[]; - codeExamples: CodeExample[]; - apiResponses: ApiResponse[]; -} - -function ParameterItem({ - param, - depth = 0, -}: { param: NestedParameter; depth?: number }) { - const [isOpen, setIsOpen] = React.useState(false); - - return ( -
0 ? "ml-4" : ""}`} - > -
-
- - {param.name} - - - {param.required ? "required" : "optional"} - - {param.type} -
- {param.properties && param.properties.length > 0 && ( - - )} -
-

{param.description}

- {isOpen && param.properties && ( -
- {param.properties.map((subParam) => ( - - ))} -
- )} -
- ); -} - -export function ApiEndpoint({ - title, - method, - description, - endpointUrl, - parameters, - headers, - bodyParameters, - codeExamples, - apiResponses, -}: ApiEndpointProps) { - const [isHeadersOpen, setIsHeadersOpen] = React.useState(true); - const [isQueryParametersOpen, setIsQueryParametersOpen] = - React.useState(true); - const [isBodyParametersOpen, setIsBodyParametersOpen] = React.useState(true); - const [selectedLanguage, setSelectedLanguage] = React.useState( - codeExamples[0]?.language, - ); - - const toggleHeaders = () => { - setIsHeadersOpen(!isHeadersOpen); - }; - - const toggleQueryParameters = () => { - setIsQueryParametersOpen(!isQueryParametersOpen); - }; - - const toggleBodyParameters = () => { - setIsBodyParametersOpen(!isBodyParametersOpen); - }; - - const methodColors = { - GET: "bg-blue-500", - POST: "bg-green-500", - PUT: "bg-yellow-500", - DELETE: "bg-red-500", - PATCH: "bg-purple-500", - }; - - const getResponseType = (status: string) => { - const statusCode = Number.parseInt(status, 10); - return statusCode >= 200 && statusCode < 300 ? "success" : "error"; - }; - - const getCodeExample = (language: string) => { - return ( - codeExamples.find((example) => example.language === language)?.code || "" - ); - }; - - return ( -
-
-
-
-
-

{title}

- - {method} - -
-

{description}

-
-
- - {headers.length > 0 && ( -
- -
-

HEADERS

- - - -
- - {headers.map((header) => ( -
-
- - {header.name} - - - {header.required ? "required" : "optional"} - - - {header.type} - -
-

- {header.description} -

-
- ))} -
-
-
- )} - - {parameters.length > 0 && ( -
- -
-

- QUERY PARAMS -

- - - -
- - {parameters.map((param) => ( - - ))} - -
-
- )} - - {bodyParameters.length > 0 && ( -
- -
-

- BODY PARAMS -

- - - -
- - {bodyParameters.map((param) => ( - - ))} - -
-
- )} -
- -
-
-
-
- - {method} - - - {endpointUrl} - -
- -
- {selectedLanguage && ( -
-
- -
-
-                
-                  {getCodeExample(selectedLanguage)}
-                
-              
-
- )} -
- -
- -
-

Response

- - {apiResponses.map((response) => ( - - - - {response.status} - - - ))} - -
- {apiResponses.map((response) => ( - -
-

- {response.description} -

-
-
- -
-
-                      {response.code}
-                    
-
-
-
- ))} -
-
-
-
- ); -} diff --git a/apps/portal/src/components/Document/Code.tsx b/apps/portal/src/components/Document/Code.tsx index 467d2091e6d..39055b87ee8 100644 --- a/apps/portal/src/components/Document/Code.tsx +++ b/apps/portal/src/components/Document/Code.tsx @@ -31,6 +31,9 @@ export async function CodeBlock(props: { code: string; lang: BuiltinLanguage | SpecialLanguage; tokenLinks?: Map; + className?: string; + containerClassName?: string; + scrollContainerClassName?: string; }) { let code = props.code; let lang = props.lang; @@ -40,6 +43,14 @@ export async function CodeBlock(props: { lang = "bash"; } + if (lang === "json") { + try { + code = JSON.stringify(JSON.parse(code), null, 2); + } catch { + // ignore + } + } + // format code if (jsOrTsLangs.has(lang)) { try { @@ -54,12 +65,18 @@ export async function CodeBlock(props: { } return ( -
+
- + @@ -71,23 +88,6 @@ export async function CodeBlock(props: { ); } -export function InlineCode(props: { code: string; className?: string }) { - return ( - - {props.code} - - ); -} - async function RenderCode(props: { code: string; lang: BuiltinLanguage | SpecialLanguage; diff --git a/apps/portal/src/components/Document/InlineCode.tsx b/apps/portal/src/components/Document/InlineCode.tsx new file mode 100644 index 00000000000..d9dd8dd7b60 --- /dev/null +++ b/apps/portal/src/components/Document/InlineCode.tsx @@ -0,0 +1,18 @@ +import { cn } from "../../lib/utils"; + +export function InlineCode(props: { code: string; className?: string }) { + return ( + + {props.code} + + ); +} diff --git a/apps/portal/src/components/Document/List.module.css b/apps/portal/src/components/Document/List.module.css index 42b5f268eca..a649b691b0d 100644 --- a/apps/portal/src/components/Document/List.module.css +++ b/apps/portal/src/components/Document/List.module.css @@ -1,14 +1,14 @@ .unorderedList, .orderedList { - @apply pl-5 leading-relaxed list-none mb-6 text-f-200; + @apply pl-5 leading-7 list-none mb-6 text-f-200; } .unorderedList > li { - @apply pb-0.5 pl-2 list-disc; + @apply my-1.5 pl-2 list-disc; } .orderedList > li { - @apply pb-0.5 pl-2 list-decimal; + @apply my-1.5 pl-2 list-decimal; } .unorderedList > li::marker { diff --git a/apps/portal/src/components/Document/index.ts b/apps/portal/src/components/Document/index.ts index d97f4d81f1d..29e1d6eaead 100644 --- a/apps/portal/src/components/Document/index.ts +++ b/apps/portal/src/components/Document/index.ts @@ -1,7 +1,7 @@ export { CustomAccordion } from "../others/CustomAccordion"; export { Breadcrumb } from "./Breadcrumb"; export { Callout } from "./Callout"; -export { CodeBlock, InlineCode } from "./Code"; +export { CodeBlock } from "./Code"; export { Details } from "./Details"; export { DocLink } from "./DocLink"; export { Heading } from "./Heading"; @@ -27,4 +27,5 @@ export { ConnectCard } from "./Cards/ConnectCard"; export { AAChainList } from "./AAChainList"; export { AuthList } from "./AuthList"; export { FeatureCard } from "./FeatureCard"; -export { ApiEndpoint } from "./ApiEndpointComponent"; +export { ApiEndpoint } from "./APIEndpointMeta/ApiEndpoint"; +export { InlineCode } from "./InlineCode"; diff --git a/apps/portal/src/components/Layouts/DocLayout.tsx b/apps/portal/src/components/Layouts/DocLayout.tsx index 56a24b86d05..3df54299acc 100644 --- a/apps/portal/src/components/Layouts/DocLayout.tsx +++ b/apps/portal/src/components/Layouts/DocLayout.tsx @@ -24,7 +24,7 @@ export type DocLayoutProps = { export function DocLayout(props: DocLayoutProps) { return (
, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => ( + React.ComponentPropsWithoutRef & { + chevronClassName?: string; + } +>(({ className, children, chevronClassName, ...props }, ref) => ( span]:line-clamp-1", +======= + "flex h-10 w-full items-center justify-between gap-2 rounded-md border border-border bg-b-900 px-3 py-2 text-sm ring-offset-background placeholder:text-f-200 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1", +>>>>>>> 92739d0f65 (update) className, )} {...props} > {children} - + )); @@ -75,7 +81,11 @@ const SelectContent = React.forwardRef< >>>>>> 92739d0f65 (update) position === "popper" && "data-[side=left]:-translate-x-1 data-[side=top]:-translate-y-1 data-[side=right]:translate-x-1 data-[side=bottom]:translate-y-1", className, @@ -83,7 +93,7 @@ const SelectContent = React.forwardRef< position={position} {...props} > - + {/* */} {children} - + {/* */} )); @@ -118,7 +128,11 @@ const SelectItem = React.forwardRef< >>>>>> 92739d0f65 (update) className, )} {...props} @@ -140,7 +154,7 @@ const SelectSeparator = React.forwardRef< >(({ className, ...props }, ref) => ( )); diff --git a/apps/portal/tailwind.config.ts b/apps/portal/tailwind.config.ts index 65f66211536..eb6d51f9234 100644 --- a/apps/portal/tailwind.config.ts +++ b/apps/portal/tailwind.config.ts @@ -1,107 +1,108 @@ /** @type {import('tailwindcss').Config} */ module.exports = { - darkMode: ["class"], - content: [ - "./components/**/*.{ts,tsx}", - "./app/**/*.{ts,tsx,mdx}", - "./src/**/*.{ts,tsx,mdx}", - ], + darkMode: ["class"], + content: [ + "./components/**/*.{ts,tsx}", + "./app/**/*.{ts,tsx,mdx}", + "./src/**/*.{ts,tsx,mdx}", + ], + theme: { + container: { + center: true, + padding: "1rem", + screens: { + "2xl": "1400px", + }, + }, - theme: { - container: { - center: true, - padding: "1rem", - screens: { - "2xl": "1400px", - }, - }, - colors: { - current: "currentColor", - border: "var(--border)", - input: "var(--b-700)", - ring: "var(--b-700)", - transparent: "transparent", - overlay: "var(--overlay)", - // backgrounds - b: { - 900: "var(--b-900)", - 800: "var(--b-800)", - 700: "var(--b-700)", - 600: "var(--b-600)", - }, - // foregrounds - f: { - 100: "var(--f-100)", - 200: "var(--f-200)", - 300: "var(--f-300)", - }, - "code-bg": "var(--code-bg)", - accent: { - 500: "var(--accent-500)", - 700: "var(--accent-700)", - 800: "var(--accent-800)", - 900: "var(--accent-900)", - }, - danger: { - 500: "var(--danger-500)", - 800: "var(--danger-800)", - 900: "var(--danger-900)", - }, - warning: { - 500: "var(--warning-500)", - 900: "var(--warning-900)", - 800: "var(--warning-800)", - }, - }, - zIndex: { - modal: 1400, - modalOverlay: 1300, - dropdownMenu: 1200, - menu: 1100, - // - stickyTop: 1000, - floatingButton: 1000, - stickyMobileSidebar: 500, - // - copyCodeButton: 20, - // - codeToken: 5, - codeTokenHighlight: 1, - // base - base: 0, - }, - borderRadius: { - lg: "var(--radius)", - md: "calc(var(--radius) - 2px)", - sm: "calc(var(--radius) - 4px)", - }, - fontFamily: { - sans: ["var(--font-sans)", "sans-serif"], - mono: ["var(--font-mono)", "monospace"], - }, - extend: { - spacing: { - "sticky-top-height": "var(--sticky-top-height)", - "sidebar-height": "calc(100vh - var(--sticky-top-height))", - "offset-top": "calc(var(--sticky-top-height) + 18px)", - "offset-top-mobile": "calc(var(--sticky-top-height) + 100px)", - }, - keyframes: { - "accordion-down": { - from: { height: 0, opacity: 0 }, - to: { height: "var(--radix-accordion-content-height)", opacity: 1 }, - }, - "accordion-up": { - from: { height: "var(--radix-accordion-content-height)", opacity: 1 }, - to: { height: 0, opacity: 0 }, - }, - }, - animation: { - "accordion-down": "accordion-down 0.2s ease-out", - "accordion-up": "accordion-up 0.2s ease-out", - "animate-in-slow": "animate-in 0.4s ease", - }, - }, - }, - plugins: [require("tailwindcss-animate")], + zIndex: { + modal: 1400, + modalOverlay: 1300, + dropdownMenu: 1200, + menu: 1100, + // + stickyTop: 1000, + floatingButton: 1000, + stickyMobileSidebar: 500, + // + copyCodeButton: 20, + // + codeToken: 5, + codeTokenHighlight: 1, + // base + base: 0, + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + full: "9999px", + }, + fontFamily: { + sans: ["var(--font-sans)", "sans-serif"], + mono: ["var(--font-mono)", "monospace"], + }, + extend: { + colors: { + current: "currentColor", + border: "var(--border)", + input: "var(--b-700)", + ring: "var(--b-700)", + transparent: "transparent", + overlay: "var(--overlay)", + // backgrounds + b: { + 900: "var(--b-900)", + 800: "var(--b-800)", + 700: "var(--b-700)", + 600: "var(--b-600)", + }, + // foregrounds + f: { + 100: "var(--f-100)", + 200: "var(--f-200)", + 300: "var(--f-300)", + }, + "code-bg": "var(--code-bg)", + accent: { + 500: "var(--accent-500)", + 700: "var(--accent-700)", + 800: "var(--accent-800)", + 900: "var(--accent-900)", + }, + danger: { + 500: "var(--danger-500)", + 800: "var(--danger-800)", + 900: "var(--danger-900)", + }, + warning: { + 500: "var(--warning-500)", + 900: "var(--warning-900)", + 800: "var(--warning-800)", + }, + }, + spacing: { + "sticky-top-height": "var(--sticky-top-height)", + "sidebar-height": "calc(100vh - var(--sticky-top-height))", + "offset-top": "calc(var(--sticky-top-height) + 18px)", + "offset-top-mobile": "calc(var(--sticky-top-height) + 100px)", + }, + keyframes: { + "accordion-down": { + from: { height: 0, opacity: 0 }, + to: { height: "var(--radix-accordion-content-height)", opacity: 1 }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)", opacity: 1 }, + to: { height: 0, opacity: 0 }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + "animate-in-slow": "animate-in 0.4s ease", + }, + }, + }, + plugins: [require("tailwindcss-animate")], }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 457bc337428..c0b778da4f0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -135,7 +135,11 @@ importers: version: 1.1.5(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@sentry/nextjs': specifier: 8.45.1 +<<<<<<< HEAD version: 8.45.1(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(next@15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(esbuild@0.24.2)) +======= + version: 8.45.1(@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(next@15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) +>>>>>>> 92739d0f65 (update) '@shazow/whatsabi': specifier: ^0.18.0 version: 0.18.0(@noble/hashes@1.7.0)(typescript@5.7.2)(zod@3.24.1) @@ -150,7 +154,11 @@ importers: version: link:../../packages/service-utils '@vercel/functions': specifier: ^1.5.2 +<<<<<<< HEAD version: 1.5.2(@aws-sdk/credential-provider-web-identity@3.587.0) +======= + version: 1.5.2(@aws-sdk/credential-provider-web-identity@3.709.0) +>>>>>>> 92739d0f65 (update) '@vercel/og': specifier: ^0.6.4 version: 0.6.4 @@ -285,7 +293,11 @@ importers: version: 2.6.0 tailwindcss-animate: specifier: ^1.0.7 +<<<<<<< HEAD version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))) +======= + version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2))) +>>>>>>> 92739d0f65 (update) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -334,7 +346,11 @@ importers: version: 8.4.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.3.3)) '@storybook/nextjs': specifier: 8.4.7 +<<<<<<< HEAD version: 8.4.7(esbuild@0.24.2)(next@15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.3.3))(type-fest@4.31.0)(typescript@5.7.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(esbuild@0.24.2)) +======= + version: 8.4.7(@swc/core@1.10.1)(esbuild@0.24.0)(next@15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(type-fest@4.30.1)(typescript@5.7.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) +>>>>>>> 92739d0f65 (update) '@storybook/react': specifier: 8.4.7 version: 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) @@ -382,7 +398,11 @@ importers: version: 10.4.20(postcss@8.4.49) checkly: specifier: ^4.15.0 +<<<<<<< HEAD version: 4.15.0(@types/node@22.10.2)(typescript@5.7.2) +======= + version: 4.15.0(@swc/core@1.10.1)(@types/node@22.10.2)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10) +>>>>>>> 92739d0f65 (update) eslint: specifier: 8.57.0 version: 8.57.0 @@ -409,7 +429,11 @@ importers: version: 8.4.7(prettier@3.3.3) tailwindcss: specifier: 3.4.16 +<<<<<<< HEAD version: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) +======= + version: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)) +>>>>>>> 92739d0f65 (update) typescript: specifier: 5.7.2 version: 5.7.2 @@ -533,10 +557,17 @@ importers: version: 8.4.49 tailwindcss: specifier: 3.4.16 +<<<<<<< HEAD version: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) tailwindcss-animate: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))) +======= + version: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)) + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2))) +>>>>>>> 92739d0f65 (update) typescript: specifier: 5.7.2 version: 5.7.2 @@ -638,7 +669,11 @@ importers: version: 2.6.0 tailwindcss-animate: specifier: ^1.0.7 +<<<<<<< HEAD version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))) +======= + version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2))) +>>>>>>> 92739d0f65 (update) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -705,7 +740,11 @@ importers: version: 8.4.49 tailwindcss: specifier: 3.4.16 +<<<<<<< HEAD version: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) +======= + version: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)) +>>>>>>> 92739d0f65 (update) tsx: specifier: 4.19.2 version: 4.19.2 @@ -774,7 +813,11 @@ importers: version: 2.6.0 tailwindcss-animate: specifier: ^1.0.7 +<<<<<<< HEAD version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))) +======= + version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2))) +>>>>>>> 92739d0f65 (update) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -823,7 +866,11 @@ importers: version: 6.0.1(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.7.0) tailwindcss: specifier: 3.4.16 +<<<<<<< HEAD version: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) +======= + version: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)) +>>>>>>> 92739d0f65 (update) typescript: specifier: 5.7.2 version: 5.7.2 @@ -13982,7 +14029,7 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.592.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/client-sso-oidc': 3.592.0 '@aws-sdk/client-sts': 3.592.0 '@aws-sdk/core': 3.592.0 '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0) @@ -14028,10 +14075,10 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.592.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/client-sso-oidc': 3.592.0 '@aws-sdk/client-sts': 3.592.0 '@aws-sdk/core': 3.592.0 - '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0) '@aws-sdk/middleware-host-header': 3.577.0 '@aws-sdk/middleware-logger': 3.577.0 '@aws-sdk/middleware-recursion-detection': 3.577.0 @@ -14074,10 +14121,10 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.592.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/client-sso-oidc': 3.592.0 '@aws-sdk/client-sts': 3.592.0 '@aws-sdk/core': 3.592.0 - '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0) '@aws-sdk/middleware-host-header': 3.577.0 '@aws-sdk/middleware-logger': 3.577.0 '@aws-sdk/middleware-recursion-detection': 3.577.0 @@ -14121,7 +14168,7 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0)': + '@aws-sdk/client-sso-oidc@3.592.0': dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 @@ -14164,7 +14211,6 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 transitivePeerDependencies: - - '@aws-sdk/client-sts' - aws-crt '@aws-sdk/client-sso@3.592.0': @@ -14214,7 +14260,7 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.592.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/client-sso-oidc': 3.592.0 '@aws-sdk/core': 3.592.0 '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) '@aws-sdk/middleware-host-header': 3.577.0 @@ -14341,6 +14387,7 @@ snapshots: '@smithy/util-stream': 3.3.4 tslib: 2.8.1 +<<<<<<< HEAD '@aws-sdk/credential-provider-ini@3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0)': dependencies: '@aws-sdk/client-sts': 3.592.0 @@ -14378,6 +14425,8 @@ snapshots: - aws-crt optional: true +======= +>>>>>>> 92739d0f65 (update) '@aws-sdk/credential-provider-ini@3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0)': dependencies: '@aws-sdk/client-sts': 3.592.0 @@ -14396,6 +14445,7 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt +<<<<<<< HEAD '@aws-sdk/credential-provider-node@3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0)': dependencies: '@aws-sdk/credential-provider-env': 3.587.0 @@ -14403,6 +14453,15 @@ snapshots: '@aws-sdk/credential-provider-ini': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) '@aws-sdk/credential-provider-process': 3.587.0 '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0) +======= + '@aws-sdk/credential-provider-ini@3.592.0(@aws-sdk/client-sso-oidc@3.712.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0)': + dependencies: + '@aws-sdk/client-sts': 3.592.0 + '@aws-sdk/credential-provider-env': 3.587.0 + '@aws-sdk/credential-provider-http': 3.587.0 + '@aws-sdk/credential-provider-process': 3.587.0 + '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.712.0(@aws-sdk/client-sts@3.592.0)) +>>>>>>> 92739d0f65 (update) '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0) '@aws-sdk/types': 3.577.0 '@smithy/credential-provider-imds': 3.2.8 @@ -14412,6 +14471,7 @@ snapshots: tslib: 2.8.1 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' +<<<<<<< HEAD - '@aws-sdk/client-sts' - aws-crt @@ -14423,6 +14483,18 @@ snapshots: '@aws-sdk/credential-provider-process': 3.587.0 '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0) '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0(@aws-sdk/client-sso-oidc@3.592.0)) +======= + - aws-crt + + '@aws-sdk/credential-provider-ini@3.592.0(@aws-sdk/client-sso-oidc@3.712.0(@aws-sdk/client-sts@3.712.0))(@aws-sdk/client-sts@3.592.0)': + dependencies: + '@aws-sdk/client-sts': 3.592.0 + '@aws-sdk/credential-provider-env': 3.587.0 + '@aws-sdk/credential-provider-http': 3.587.0 + '@aws-sdk/credential-provider-process': 3.587.0 + '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.712.0(@aws-sdk/client-sts@3.712.0)) + '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0) +>>>>>>> 92739d0f65 (update) '@aws-sdk/types': 3.577.0 '@smithy/credential-provider-imds': 3.2.8 '@smithy/property-provider': 3.1.11 @@ -14431,9 +14503,51 @@ snapshots: tslib: 2.8.1 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' +<<<<<<< HEAD - '@aws-sdk/client-sts' - aws-crt optional: true +======= + - aws-crt + + '@aws-sdk/credential-provider-ini@3.712.0(@aws-sdk/client-sso-oidc@3.712.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0)': + dependencies: + '@aws-sdk/client-sts': 3.592.0 + '@aws-sdk/core': 3.709.0 + '@aws-sdk/credential-provider-env': 3.709.0 + '@aws-sdk/credential-provider-http': 3.709.0 + '@aws-sdk/credential-provider-process': 3.709.0 + '@aws-sdk/credential-provider-sso': 3.712.0(@aws-sdk/client-sso-oidc@3.712.0(@aws-sdk/client-sts@3.592.0)) + '@aws-sdk/credential-provider-web-identity': 3.709.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/types': 3.709.0 + '@smithy/credential-provider-imds': 3.2.8 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-ini@3.712.0(@aws-sdk/client-sso-oidc@3.712.0(@aws-sdk/client-sts@3.712.0))(@aws-sdk/client-sts@3.712.0)': + dependencies: + '@aws-sdk/client-sts': 3.712.0 + '@aws-sdk/core': 3.709.0 + '@aws-sdk/credential-provider-env': 3.709.0 + '@aws-sdk/credential-provider-http': 3.709.0 + '@aws-sdk/credential-provider-process': 3.709.0 + '@aws-sdk/credential-provider-sso': 3.712.0(@aws-sdk/client-sso-oidc@3.712.0(@aws-sdk/client-sts@3.712.0)) + '@aws-sdk/credential-provider-web-identity': 3.709.0(@aws-sdk/client-sts@3.712.0) + '@aws-sdk/types': 3.709.0 + '@smithy/credential-provider-imds': 3.2.8 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt +>>>>>>> 92739d0f65 (update) '@aws-sdk/credential-provider-node@3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0)': dependencies: @@ -14575,7 +14689,7 @@ snapshots: '@aws-sdk/token-providers@3.587.0(@aws-sdk/client-sso-oidc@3.592.0)': dependencies: - '@aws-sdk/client-sso-oidc': 3.592.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/client-sso-oidc': 3.592.0 '@aws-sdk/types': 3.577.0 '@smithy/property-provider': 3.1.11 '@smithy/shared-ini-file-loader': 3.1.12 @@ -17346,10 +17460,13 @@ snapshots: dependencies: fast-glob: 3.3.1 +<<<<<<< HEAD '@next/eslint-plugin-next@15.1.3': dependencies: fast-glob: 3.3.1 +======= +>>>>>>> 92739d0f65 (update) '@next/mdx@15.1.0(@mdx-js/loader@2.3.0(webpack@5.97.1))(@mdx-js/react@2.3.0(react@19.0.0))': dependencies: source-map: 0.7.4 @@ -17512,7 +17629,11 @@ snapshots: widest-line: 3.1.0 wrap-ansi: 7.0.0 +<<<<<<< HEAD '@oclif/core@2.8.11(@types/node@22.10.2)(typescript@5.7.2)': +======= + '@oclif/core@2.8.11(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)': +>>>>>>> 92739d0f65 (update) dependencies: '@types/cli-progress': 3.11.6 ansi-escapes: 4.3.2 @@ -17538,7 +17659,11 @@ snapshots: strip-ansi: 6.0.1 supports-color: 8.1.1 supports-hyperlinks: 2.3.0 +<<<<<<< HEAD ts-node: 10.9.2(@types/node@22.10.2)(typescript@5.7.2) +======= + ts-node: 10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) +>>>>>>> 92739d0f65 (update) tslib: 2.8.1 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -17576,10 +17701,17 @@ snapshots: dependencies: '@oclif/core': 1.26.2 +<<<<<<< HEAD '@oclif/plugin-not-found@2.3.23(@types/node@22.10.2)(typescript@5.7.2)': dependencies: '@oclif/color': 1.0.13 '@oclif/core': 2.8.11(@types/node@22.10.2)(typescript@5.7.2) +======= + '@oclif/plugin-not-found@2.3.23(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)': + dependencies: + '@oclif/color': 1.0.13 + '@oclif/core': 2.8.11(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) +>>>>>>> 92739d0f65 (update) fast-levenshtein: 3.0.0 lodash: 4.17.21 transitivePeerDependencies: @@ -17604,9 +17736,15 @@ snapshots: transitivePeerDependencies: - supports-color +<<<<<<< HEAD '@oclif/plugin-warn-if-update-available@2.0.24(@types/node@22.10.2)(typescript@5.7.2)': dependencies: '@oclif/core': 2.8.11(@types/node@22.10.2)(typescript@5.7.2) +======= + '@oclif/plugin-warn-if-update-available@2.0.24(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)': + dependencies: + '@oclif/core': 2.8.11(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) +>>>>>>> 92739d0f65 (update) chalk: 4.1.2 debug: 4.4.0(supports-color@8.1.1) fs-extra: 9.1.0 @@ -17922,7 +18060,11 @@ snapshots: dependencies: playwright: 1.49.1 +<<<<<<< HEAD '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(type-fest@4.31.0)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(esbuild@0.24.2))': +======= + '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(type-fest@4.30.1)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0))': +>>>>>>> 92739d0f65 (update) dependencies: ansi-html: 0.0.9 core-js-pure: 3.39.0 @@ -17932,7 +18074,11 @@ snapshots: react-refresh: 0.14.2 schema-utils: 4.3.0 source-map: 0.7.4 +<<<<<<< HEAD webpack: 5.97.1(esbuild@0.24.2) +======= + webpack: 5.97.1(@swc/core@1.10.1)(esbuild@0.24.0) +>>>>>>> 92739d0f65 (update) optionalDependencies: type-fest: 4.31.0 webpack-hot-middleware: 2.26.1 @@ -18900,7 +19046,11 @@ snapshots: '@sentry/core@8.45.1': {} +<<<<<<< HEAD '@sentry/nextjs@8.45.1(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(next@15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(esbuild@0.24.2))': +======= + '@sentry/nextjs@8.45.1(@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(next@15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0))': +>>>>>>> 92739d0f65 (update) dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 @@ -18911,7 +19061,11 @@ snapshots: '@sentry/opentelemetry': 8.45.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.28.0) '@sentry/react': 8.45.1(react@19.0.0) '@sentry/vercel-edge': 8.45.1 +<<<<<<< HEAD '@sentry/webpack-plugin': 2.22.7(webpack@5.97.1(esbuild@0.24.2)) +======= + '@sentry/webpack-plugin': 2.22.7(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) +>>>>>>> 92739d0f65 (update) chalk: 3.0.0 next: 15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) resolve: 1.22.8 @@ -18987,12 +19141,20 @@ snapshots: '@opentelemetry/api': 1.9.0 '@sentry/core': 8.45.1 +<<<<<<< HEAD '@sentry/webpack-plugin@2.22.7(webpack@5.97.1(esbuild@0.24.2))': +======= + '@sentry/webpack-plugin@2.22.7(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0))': +>>>>>>> 92739d0f65 (update) dependencies: '@sentry/bundler-plugin-core': 2.22.7 unplugin: 1.0.1 uuid: 9.0.1 +<<<<<<< HEAD webpack: 5.97.1(esbuild@0.24.2) +======= + webpack: 5.97.1(@swc/core@1.10.1)(esbuild@0.24.0) +>>>>>>> 92739d0f65 (update) transitivePeerDependencies: - encoding - supports-color @@ -19633,7 +19795,11 @@ snapshots: ts-dedent: 2.2.0 vite: 6.0.3(@types/node@22.10.2)(jiti@2.4.2)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.7.0) +<<<<<<< HEAD '@storybook/builder-webpack5@8.4.7(esbuild@0.24.2)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': +======= + '@storybook/builder-webpack5@8.4.7(@swc/core@1.10.1)(esbuild@0.24.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2)': +>>>>>>> 92739d0f65 (update) dependencies: '@storybook/core-webpack': 8.4.7(storybook@8.4.7(prettier@3.3.3)) '@types/node': 22.10.2 @@ -19642,23 +19808,41 @@ snapshots: case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.1 constants-browserify: 1.0.0 +<<<<<<< HEAD css-loader: 6.11.0(webpack@5.97.1(esbuild@0.24.2)) es-module-lexer: 1.6.0 fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.7.2)(webpack@5.97.1(esbuild@0.24.2)) html-webpack-plugin: 5.6.3(webpack@5.97.1(esbuild@0.24.2)) +======= + css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) + es-module-lexer: 1.5.4 + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) + html-webpack-plugin: 5.6.3(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) +>>>>>>> 92739d0f65 (update) magic-string: 0.30.17 path-browserify: 1.0.1 process: 0.11.10 semver: 7.6.3 +<<<<<<< HEAD storybook: 8.4.7(prettier@3.3.3) style-loader: 3.3.4(webpack@5.97.1(esbuild@0.24.2)) terser-webpack-plugin: 5.3.11(esbuild@0.24.2)(webpack@5.97.1(esbuild@0.24.2)) +======= + storybook: 8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10) + style-loader: 3.3.4(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) + terser-webpack-plugin: 5.3.10(@swc/core@1.10.1)(esbuild@0.24.0)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) +>>>>>>> 92739d0f65 (update) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 +<<<<<<< HEAD webpack: 5.97.1(esbuild@0.24.2) webpack-dev-middleware: 6.1.3(webpack@5.97.1(esbuild@0.24.2)) +======= + webpack: 5.97.1(@swc/core@1.10.1)(esbuild@0.24.0) + webpack-dev-middleware: 6.1.3(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) +>>>>>>> 92739d0f65 (update) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: @@ -19731,7 +19915,19 @@ snapshots: dependencies: storybook: 8.4.7(prettier@3.3.3) +<<<<<<< HEAD '@storybook/nextjs@8.4.7(esbuild@0.24.2)(next@15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.3.3))(type-fest@4.31.0)(typescript@5.7.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(esbuild@0.24.2))': +======= + '@storybook/manager-api@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10))': + dependencies: + storybook: 8.4.7(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10) + + '@storybook/manager-api@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))': + dependencies: + storybook: 8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10) + + '@storybook/nextjs@8.4.7(@swc/core@1.10.1)(esbuild@0.24.0)(next@15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(type-fest@4.30.1)(typescript@5.7.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0))': +>>>>>>> 92739d0f65 (update) dependencies: '@babel/core': 7.26.0 '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0) @@ -19746,6 +19942,7 @@ snapshots: '@babel/preset-react': 7.26.3(@babel/core@7.26.0) '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) '@babel/runtime': 7.26.0 +<<<<<<< HEAD '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.2)(type-fest@4.31.0)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(esbuild@0.24.2)) '@storybook/builder-webpack5': 8.4.7(esbuild@0.24.2)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) '@storybook/preset-react-webpack': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(esbuild@0.24.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) @@ -19755,22 +19952,47 @@ snapshots: '@types/semver': 7.5.8 babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.97.1(esbuild@0.24.2)) css-loader: 6.11.0(webpack@5.97.1(esbuild@0.24.2)) +======= + '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.2)(type-fest@4.30.1)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) + '@storybook/builder-webpack5': 8.4.7(@swc/core@1.10.1)(esbuild@0.24.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) + '@storybook/preset-react-webpack': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(@swc/core@1.10.1)(esbuild@0.24.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) + '@storybook/react': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) + '@storybook/test': 8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)) + '@types/node': 22.10.2 + '@types/semver': 7.5.8 + babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) + css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) +>>>>>>> 92739d0f65 (update) find-up: 5.0.0 image-size: 1.2.0 loader-utils: 3.3.1 next: 15.1.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) +<<<<<<< HEAD node-polyfill-webpack-plugin: 2.0.1(webpack@5.97.1(esbuild@0.24.2)) pnp-webpack-plugin: 1.7.0(typescript@5.7.2) postcss: 8.4.49 postcss-loader: 8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1(esbuild@0.24.2)) +======= + node-polyfill-webpack-plugin: 2.0.1(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) + pnp-webpack-plugin: 1.7.0(typescript@5.7.2) + postcss: 8.4.49 + postcss-loader: 8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) +>>>>>>> 92739d0f65 (update) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) react-refresh: 0.14.2 resolve-url-loader: 5.0.0 +<<<<<<< HEAD sass-loader: 13.3.3(webpack@5.97.1(esbuild@0.24.2)) semver: 7.6.3 storybook: 8.4.7(prettier@3.3.3) style-loader: 3.3.4(webpack@5.97.1(esbuild@0.24.2)) +======= + sass-loader: 13.3.3(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) + semver: 7.6.3 + storybook: 8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10) + style-loader: 3.3.4(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) +>>>>>>> 92739d0f65 (update) styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.0.0) ts-dedent: 2.2.0 tsconfig-paths: 4.2.0 @@ -19778,7 +20000,11 @@ snapshots: optionalDependencies: sharp: 0.33.5 typescript: 5.7.2 +<<<<<<< HEAD webpack: 5.97.1(esbuild@0.24.2) +======= + webpack: 5.97.1(@swc/core@1.10.1)(esbuild@0.24.0) +>>>>>>> 92739d0f65 (update) transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -19798,11 +20024,19 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve +<<<<<<< HEAD '@storybook/preset-react-webpack@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(esbuild@0.24.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2)': dependencies: '@storybook/core-webpack': 8.4.7(storybook@8.4.7(prettier@3.3.3)) '@storybook/react': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.3.3)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.3.3))(typescript@5.7.2) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.7.2)(webpack@5.97.1(esbuild@0.24.2)) +======= + '@storybook/preset-react-webpack@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(@swc/core@1.10.1)(esbuild@0.24.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2)': + dependencies: + '@storybook/core-webpack': 8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)) + '@storybook/react': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) +>>>>>>> 92739d0f65 (update) '@types/node': 22.10.2 '@types/semver': 7.5.8 find-up: 5.0.0 @@ -19814,7 +20048,11 @@ snapshots: semver: 7.6.3 storybook: 8.4.7(prettier@3.3.3) tsconfig-paths: 4.2.0 +<<<<<<< HEAD webpack: 5.97.1(esbuild@0.24.2) +======= + webpack: 5.97.1(@swc/core@1.10.1)(esbuild@0.24.0) +>>>>>>> 92739d0f65 (update) optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: @@ -19829,7 +20067,15 @@ snapshots: dependencies: storybook: 8.4.7(prettier@3.3.3) +<<<<<<< HEAD '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.7.2)(webpack@5.97.1(esbuild@0.24.2))': +======= + '@storybook/preview-api@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))': + dependencies: + storybook: 8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10) + + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0))': +>>>>>>> 92739d0f65 (update) dependencies: debug: 4.4.0(supports-color@8.1.1) endent: 2.1.0 @@ -19839,7 +20085,11 @@ snapshots: react-docgen-typescript: 2.2.2(typescript@5.7.2) tslib: 2.8.1 typescript: 5.7.2 +<<<<<<< HEAD webpack: 5.97.1(esbuild@0.24.2) +======= + webpack: 5.97.1(@swc/core@1.10.1)(esbuild@0.24.0) +>>>>>>> 92739d0f65 (update) transitivePeerDependencies: - supports-color @@ -20238,6 +20488,57 @@ snapshots: '@swagger-api/apidom-parser-adapter-yaml-1-2': 1.0.0-beta.6 transitivePeerDependencies: - debug +<<<<<<< HEAD +======= + - tree_sitter + + '@swc/core-darwin-arm64@1.10.1': + optional: true + + '@swc/core-darwin-x64@1.10.1': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.10.1': + optional: true + + '@swc/core-linux-arm64-gnu@1.10.1': + optional: true + + '@swc/core-linux-arm64-musl@1.10.1': + optional: true + + '@swc/core-linux-x64-gnu@1.10.1': + optional: true + + '@swc/core-linux-x64-musl@1.10.1': + optional: true + + '@swc/core-win32-arm64-msvc@1.10.1': + optional: true + + '@swc/core-win32-ia32-msvc@1.10.1': + optional: true + + '@swc/core-win32-x64-msvc@1.10.1': + optional: true + + '@swc/core@1.10.1': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.17 + optionalDependencies: + '@swc/core-darwin-arm64': 1.10.1 + '@swc/core-darwin-x64': 1.10.1 + '@swc/core-linux-arm-gnueabihf': 1.10.1 + '@swc/core-linux-arm64-gnu': 1.10.1 + '@swc/core-linux-arm64-musl': 1.10.1 + '@swc/core-linux-x64-gnu': 1.10.1 + '@swc/core-linux-x64-musl': 1.10.1 + '@swc/core-win32-arm64-msvc': 1.10.1 + '@swc/core-win32-ia32-msvc': 1.10.1 + '@swc/core-win32-x64-msvc': 1.10.1 + optional: true +>>>>>>> 92739d0f65 (update) '@swc/counter@0.1.3': {} @@ -20776,7 +21077,11 @@ snapshots: '@urql/core': 5.1.0(graphql@16.10.0) wonka: 6.3.4 +<<<<<<< HEAD '@vercel/functions@1.5.2(@aws-sdk/credential-provider-web-identity@3.587.0)': +======= + '@vercel/functions@1.5.2(@aws-sdk/credential-provider-web-identity@3.709.0)': +>>>>>>> 92739d0f65 (update) optionalDependencies: '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0(@aws-sdk/client-sso-oidc@3.592.0)) @@ -21702,12 +22007,21 @@ snapshots: transitivePeerDependencies: - supports-color +<<<<<<< HEAD babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.97.1(esbuild@0.24.2)): dependencies: '@babel/core': 7.26.0 find-cache-dir: 4.0.0 schema-utils: 4.3.0 webpack: 5.97.1(esbuild@0.24.2) +======= + babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)): + dependencies: + '@babel/core': 7.26.0 + find-cache-dir: 4.0.0 + schema-utils: 4.2.0 + webpack: 5.97.1(@swc/core@1.10.1)(esbuild@0.24.0) +>>>>>>> 92739d0f65 (update) babel-plugin-istanbul@6.1.1: dependencies: @@ -22164,6 +22478,7 @@ snapshots: check-error@2.1.1: {} +<<<<<<< HEAD checkly@4.15.0(@types/node@22.10.2)(typescript@5.7.2): dependencies: '@oclif/core': 2.8.11(@types/node@22.10.2)(typescript@5.7.2) @@ -22171,6 +22486,15 @@ snapshots: '@oclif/plugin-not-found': 2.3.23(@types/node@22.10.2)(typescript@5.7.2) '@oclif/plugin-plugins': 5.4.4 '@oclif/plugin-warn-if-update-available': 2.0.24(@types/node@22.10.2)(typescript@5.7.2) +======= + checkly@4.15.0(@swc/core@1.10.1)(@types/node@22.10.2)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10): + dependencies: + '@oclif/core': 2.8.11(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) + '@oclif/plugin-help': 5.1.20 + '@oclif/plugin-not-found': 2.3.23(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) + '@oclif/plugin-plugins': 5.4.4 + '@oclif/plugin-warn-if-update-available': 2.0.24(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) +>>>>>>> 92739d0f65 (update) '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.7.2) acorn: 8.8.1 acorn-walk: 8.2.0 @@ -22599,7 +22923,11 @@ snapshots: css-gradient-parser@0.0.16: {} +<<<<<<< HEAD css-loader@6.11.0(webpack@5.97.1(esbuild@0.24.2)): +======= + css-loader@6.11.0(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)): +>>>>>>> 92739d0f65 (update) dependencies: icss-utils: 5.1.0(postcss@8.4.49) postcss: 8.4.49 @@ -22610,7 +22938,11 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: +<<<<<<< HEAD webpack: 5.97.1(esbuild@0.24.2) +======= + webpack: 5.97.1(@swc/core@1.10.1)(esbuild@0.24.0) +>>>>>>> 92739d0f65 (update) css-select@4.3.0: dependencies: @@ -23496,7 +23828,11 @@ snapshots: dependencies: fast-glob: 3.3.3 postcss: 8.4.49 +<<<<<<< HEAD tailwindcss: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) +======= + tailwindcss: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)) +>>>>>>> 92739d0f65 (update) eslint-scope@5.1.1: dependencies: @@ -24166,7 +24502,11 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 +<<<<<<< HEAD fork-ts-checker-webpack-plugin@8.0.0(typescript@5.7.2)(webpack@5.97.1(esbuild@0.24.2)): +======= + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)): +>>>>>>> 92739d0f65 (update) dependencies: '@babel/code-frame': 7.26.2 chalk: 4.1.2 @@ -24181,7 +24521,11 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.7.2 +<<<<<<< HEAD webpack: 5.97.1(esbuild@0.24.2) +======= + webpack: 5.97.1(@swc/core@1.10.1)(esbuild@0.24.0) +>>>>>>> 92739d0f65 (update) form-data-encoder@2.1.4: {} @@ -24652,7 +24996,11 @@ snapshots: html-void-elements@3.0.0: {} +<<<<<<< HEAD html-webpack-plugin@5.6.3(webpack@5.97.1(esbuild@0.24.2)): +======= + html-webpack-plugin@5.6.3(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)): +>>>>>>> 92739d0f65 (update) dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -24660,7 +25008,11 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: +<<<<<<< HEAD webpack: 5.97.1(esbuild@0.24.2) +======= + webpack: 5.97.1(@swc/core@1.10.1)(esbuild@0.24.0) +>>>>>>> 92739d0f65 (update) htmlparser2@3.10.1: dependencies: @@ -27068,7 +27420,11 @@ snapshots: node-int64@0.4.0: {} +<<<<<<< HEAD node-polyfill-webpack-plugin@2.0.1(webpack@5.97.1(esbuild@0.24.2)): +======= + node-polyfill-webpack-plugin@2.0.1(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)): +>>>>>>> 92739d0f65 (update) dependencies: assert: 2.1.0 browserify-zlib: 0.2.0 @@ -27095,7 +27451,11 @@ snapshots: url: 0.11.4 util: 0.12.5 vm-browserify: 1.1.2 +<<<<<<< HEAD webpack: 5.97.1(esbuild@0.24.2) +======= + webpack: 5.97.1(@swc/core@1.10.1)(esbuild@0.24.0) +>>>>>>> 92739d0f65 (update) node-releases@2.0.19: {} @@ -27710,13 +28070,21 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.49 +<<<<<<< HEAD postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)): +======= + postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)): +>>>>>>> 92739d0f65 (update) dependencies: lilconfig: 3.1.3 yaml: 2.7.0 optionalDependencies: postcss: 8.4.49 +<<<<<<< HEAD ts-node: 10.9.2(@types/node@22.10.2)(typescript@5.7.2) +======= + ts-node: 10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) +>>>>>>> 92739d0f65 (update) postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.7.0): dependencies: @@ -27727,14 +28095,22 @@ snapshots: tsx: 4.19.2 yaml: 2.7.0 +<<<<<<< HEAD postcss-loader@8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1(esbuild@0.24.2)): +======= + postcss-loader@8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)): +>>>>>>> 92739d0f65 (update) dependencies: cosmiconfig: 9.0.0(typescript@5.7.2) jiti: 1.21.7 postcss: 8.4.49 semver: 7.6.3 optionalDependencies: +<<<<<<< HEAD webpack: 5.97.1(esbuild@0.24.2) +======= + webpack: 5.97.1(@swc/core@1.10.1)(esbuild@0.24.0) +>>>>>>> 92739d0f65 (update) transitivePeerDependencies: - typescript @@ -28900,10 +29276,17 @@ snapshots: safer-buffer@2.1.2: {} +<<<<<<< HEAD sass-loader@13.3.3(webpack@5.97.1(esbuild@0.24.2)): dependencies: neo-async: 2.6.2 webpack: 5.97.1(esbuild@0.24.2) +======= + sass-loader@13.3.3(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)): + dependencies: + neo-async: 2.6.2 + webpack: 5.97.1(@swc/core@1.10.1)(esbuild@0.24.0) +>>>>>>> 92739d0f65 (update) satori@0.12.0: dependencies: @@ -29452,9 +29835,15 @@ snapshots: structured-headers@0.4.1: {} +<<<<<<< HEAD style-loader@3.3.4(webpack@5.97.1(esbuild@0.24.2)): dependencies: webpack: 5.97.1(esbuild@0.24.2) +======= + style-loader@3.3.4(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)): + dependencies: + webpack: 5.97.1(@swc/core@1.10.1)(esbuild@0.24.0) +>>>>>>> 92739d0f65 (update) style-to-object@0.4.4: dependencies: @@ -29592,11 +29981,19 @@ snapshots: tailwind-merge@2.6.0: {} +<<<<<<< HEAD tailwindcss-animate@1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))): dependencies: tailwindcss: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)): +======= + tailwindcss-animate@1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2))): + dependencies: + tailwindcss: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)) + + tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)): +>>>>>>> 92739d0f65 (update) dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -29615,7 +30012,11 @@ snapshots: postcss: 8.4.49 postcss-import: 15.1.0(postcss@8.4.49) postcss-js: 4.0.1(postcss@8.4.49) +<<<<<<< HEAD postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) +======= + postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)) +>>>>>>> 92739d0f65 (update) postcss-nested: 6.2.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 resolve: 1.22.10 @@ -29677,13 +30078,18 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 +<<<<<<< HEAD terser-webpack-plugin@5.3.11(esbuild@0.24.2)(webpack@5.97.1(esbuild@0.24.2)): +======= + terser-webpack-plugin@5.3.10(@swc/core@1.10.1)(esbuild@0.24.0)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)): +>>>>>>> 92739d0f65 (update) dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 4.3.0 serialize-javascript: 6.0.2 terser: 5.37.0 +<<<<<<< HEAD webpack: 5.97.1(esbuild@0.24.2) optionalDependencies: esbuild: 0.24.2 @@ -29693,6 +30099,18 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 4.3.0 +======= + webpack: 5.97.1(@swc/core@1.10.1)(esbuild@0.24.0) + optionalDependencies: + '@swc/core': 1.10.1 + esbuild: 0.24.0 + + terser-webpack-plugin@5.3.10(webpack@5.97.1): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 +>>>>>>> 92739d0f65 (update) serialize-javascript: 6.0.2 terser: 5.37.0 webpack: 5.97.1 @@ -29829,7 +30247,11 @@ snapshots: ts-mixer@6.0.4: {} +<<<<<<< HEAD ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2): +======= + ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2): +>>>>>>> 92739d0f65 (update) dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -29846,6 +30268,11 @@ snapshots: typescript: 5.7.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 +<<<<<<< HEAD +======= + optionalDependencies: + '@swc/core': 1.10.1 +>>>>>>> 92739d0f65 (update) ts-pnp@1.2.0(typescript@5.7.2): optionalDependencies: @@ -30583,7 +31010,11 @@ snapshots: - bufferutil - utf-8-validate +<<<<<<< HEAD webpack-dev-middleware@6.1.3(webpack@5.97.1(esbuild@0.24.2)): +======= + webpack-dev-middleware@6.1.3(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)): +>>>>>>> 92739d0f65 (update) dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -30591,7 +31022,11 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.0 optionalDependencies: +<<<<<<< HEAD webpack: 5.97.1(esbuild@0.24.2) +======= + webpack: 5.97.1(@swc/core@1.10.1)(esbuild@0.24.0) +>>>>>>> 92739d0f65 (update) webpack-hot-middleware@2.26.1: dependencies: @@ -30635,7 +31070,11 @@ snapshots: - esbuild - uglify-js +<<<<<<< HEAD webpack@5.97.1(esbuild@0.24.2): +======= + webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0): +>>>>>>> 92739d0f65 (update) dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -30657,7 +31096,11 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 +<<<<<<< HEAD terser-webpack-plugin: 5.3.11(esbuild@0.24.2)(webpack@5.97.1(esbuild@0.24.2)) +======= + terser-webpack-plugin: 5.3.10(@swc/core@1.10.1)(esbuild@0.24.0)(webpack@5.97.1(@swc/core@1.10.1)(esbuild@0.24.0)) +>>>>>>> 92739d0f65 (update) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: