# Ethereum Comments Protocol > A decentralized protocol for adding comments to any Ethereum address or transaction ## How It Works The Ethereum Comments Protocol enables decentralized commenting through a combination of smart contracts and an indexing infrastructure. ### Architecture Overview ```mermaid graph TD AppServer[fa:fa-window-maximize App server] SDK["fa:fa-file-code SDK"] Contracts["fa:fa-file-contract Contracts\n"] Indexer[fa:fa-server Indexer] Indexer[fa:fa-server Indexer] Database@{ shape: cyl, label: "fa:fa-database Database" } AppServer <--> SDK SDK -->|Invokes| Contracts SDK -->|Fetches comments| Indexer Indexer -->|Stores comments| Database Contracts -->|emit events| Indexer Indexer -->|subscribes to events| Contracts subgraph "Contracts" CommentManager[fa:fa-file-contract CommentManager] --> ChannelManager[fa:fa-file-contract ChannelManager] end ``` #### 1. Comment Manager (Smart Contract) * Manages comment storage and threading relationships * Emits events for comment additions, deletions, and approvals * Implements a [dual-signature system](/dual-signature-system), allowing both authors and app signers to authorize actions See [CommentManager](/contracts#comment-manager-contract-details) for more details. #### 2. Channel Manager (Smart Contract) * Manages channel storage * Handles fees for channel creation and comment posting * Pluggable via hooks See [ChannelManager](/contracts#channel-manager-contract-details) for more details. #### 3. Indexer * Listens for comment events onchain * Processes and indexes comments for efficient querying * Maintains a synchronized database of all comments #### 4. SDK * Provides easy-to-use interfaces for developers * Handles interaction with smart contracts * Manages connections to indexer services ## Channels Each comment in ECP is associated with a **Channel**. If not specified, the comment is associated with the default channel with id 0. Channels are [ERC721 NFTs](https://eips.ethereum.org/EIPS/eip-721) that can be owned, transferred, or traded. The channel owner can set the **hooks** for their channel that enable flexible and powerful behaviors for comments in the channel, such as: * Gating who can comment - by onchain primitives like NFTs or tokens * Charging a small fee to post a comment * Integrating with other protocols, such as tokens or NFTs To prevent spam and ensure quality channels, creating a new channel requires paying a small fee. The current channel creation fee can be retrieved by calling `getChannelCreationFee` from the SDK. This fee helps maintain the quality of channels in the protocol while still keeping channel creation accessible. Together with [hooks](/hooks), channels create a flexible system for building onchain communities and apps with customizable rules. Creating a channel currently requires paying a fee, currently set to 0.02 ETH, to deter initial spam, while we figure out how to combat it. If you are building an app that will create channels, feel free to reach out to us and we may be able to sponsor the channel fee. ### Getting Started You can create channels and hooks using our [TypeScript SDK](/sdk-reference) or by interacting with our [smart contracts](/contracts). For full code examples used in this guide, check out the [examples](https://github.com/ecp-eth/comments-monorepo/tree/main/examples/channels-and-hooks). ### TypeScript Examples #### Creating a channel Import the necessary functions from the `@ecp.eth/sdk` package: ```typescript import { createChannel, getChannelCreationFee, } from "@ecp.eth/sdk/channel-manager"; ... import { privateKeyToAccount } from "viem/accounts"; ``` Initialize the account using `viem`. Ensure the account has enough balance to cover the channel creation fee: ```typescript const account = privateKeyToAccount(privateKey); ``` The code below retrieves the channel creation fee and calls the `createChannel` function from the SDK to create a new channel: ```typescript const { fee } = await getChannelCreationFee({ readContract: publicClient.readContract, }); const { wait } = await createChannel({ name: "Ethereum Comments Protocol Updates", description: "Latest updates and announcements from the Ethereum Comments Protocol", metadata: JSON.stringify({ category: "blog", rules: ["Be respectful", "No spam"], }), hook: "0x0000000000000000000000000000000000000000", // No hook initially fee: fee, writeContract: walletClient.writeContract, }); ``` ##### Retrieve the channel ID from Event Logs Due to EVM limitations, return values from state-changing (write) contract calls are not propagated to off-chain callers. To make things easier, the SDK provides a helper function to wait for the transaction to be mined and return the channel data from the event logs: ```typescript const { wait } = await createChannel({...}); const createChannelEvent = await wait({ getContractEvents: publicClient.getContractEvents, waitForTransactionReceipt: publicClient.waitForTransactionReceipt, }); if (!createChannelEvent) { throw new Error("Channel creation event not found"); } console.log("Channel created, id:", createChannelEvent.channelId); ``` * See the full example [here](https://github.com/ecp-eth/comments-monorepo/tree/main/examples/channels-and-hooks/typescript/create-channel.ts). * For more details about the SDK functionality, check out our [SDK Reference](/sdk-reference). ### Solidity examples #### Creating a channel First, retrieve the current channel creation fee: ```solidity uint256 fee = channelManager.getChannelCreationFee(); ``` Then create the channel and pass the fee: ```solidity uint256 channelId = channelManager.createChannel{value: fee}( "My Channel", "Description", "{}", address(0) ); ``` * See the full example [here](https://github.com/ecp-eth/comments-monorepo/tree/main/examples/channels-and-hooks/solidity/CreateChannel.s.sol). ### Links * [Protocol Reference](/protocol-reference) * [SDK Reference](/sdk-reference) * [Protocol Source Code](https://github.com/ecp-eth/comments-monorepo/tree/main/packages/protocol) * [Examples](https://github.com/ecp-eth/comments-monorepo/tree/main/examples/channels-and-hooks) ## Comment The `Comment` is a data structure that contains the essential information of a comment. ### `content` The comment content stores the plain text content of the comment. * Please use `\n` for line breaks. (Most browsers will normalize the line breaks to `\n` regardless of the OS). * any media or links that should be displayed to users should be stored in the content property and rendered by clients based on the media type at the uri. * For **reactions** (commentType = 1), the content field contains the reaction type as a lower case string, such as `"like"`, `"dislike"`, `"repost"`, or whichever custom reaction type your app wants to use. #### Reaction Content Types When `commentType = 1` (reaction), the `content` field should contain a string indicating the type of reaction: ##### Standardized Reaction Types * `"like"` - General approval or appreciation * `"downvote"` - Disagreement or negative feedback * `"repost"` - Sharing or amplifying the content ##### Implementation Notes * Reaction content should be a simple string identifier (lowercase recommended) * Applications should validate reaction types against their supported list * Unknown reaction types should be handled gracefully by displaying a generic reaction icon or ignored * Consider internationalization when displaying reaction labels to users ### `authMethod` The `authMethod` field indicates how the comment was authenticated when it was created. This provides transparency about the trust model used for each comment. [Read more about the authentication methods](./dual-signature-system.mdx) #### Authentication Methods * **`0` (DIRECT\_TX)** - The user signed the transaction directly (msg.sender == author) * **`1` (APP\_APPROVAL)** - The user has pre-approved the app to post on their behalf * **`2` (AUTHOR\_SIGNATURE)** - The user signed the comment hash offline (meta-transaction) ### `metadata` The `metadata` property stores additional data as key-value pairs that shouldn't be shown to the user as-is. * Stored as an array of `MetadataEntry` structures with `bytes32 key` and `bytes value` fields * Keys should be UTF-8 encoded strings with format "type key" (e.g., "category string", "priority uint256") * Values are stored as `bytes` and can contain any encoded data type, encoded via `abi.encodePacked` * Please be mindful that storing large amounts of metadata on the chain will increase the gas cost of the transaction. #### Metadata Access ```solidity // Get all metadata for a comment Metadata.MetadataEntry[] memory metadata = commentManager.getCommentMetadata(commentId); // Get specific metadata value bytes memory value = commentManager.getCommentMetadataValue(commentId, keccak256("category string")); // Get all metadata keys bytes32[] memory keys = commentManager.getCommentMetadataKeys(commentId); ``` #### Metadata Format Conversion The SDK provides functions to convert between two metadata formats: **JS/SDK Format (easier to work with):** ```typescript Record; ``` **Contract Format (used by blockchain):** ```solidity struct MetadataEntry { bytes32 key; bytes value; } ``` ##### Converting Between Formats ```typescript import { convertRecordToContractFormat, convertContractToRecordFormat, createKeyTypeMap, } from "@ecp.eth/sdk/comments"; // Before sending to contract const contractData = convertRecordToContractFormat(jsMetadata); // After receiving from contract (requires key mapping) const keyTypeMap = createKeyTypeMap([ { key: "status", type: "string" }, { key: "reputation", type: "uint256" }, ]); const jsMetadata = convertContractToRecordFormat(contractData, keyTypeMap); ``` **Supported types:** `string`, `bool`, `uint256`, `address`, `bytes32`, `bytes`, and other numeric types. **Best practice:** Maintain a mapping of your known metadata keys and types for proper conversion. ### `targetUri` It serves as a unique identifier for locating comments. Be careful when choosing the value for the `targetUri` property as an inconsistent `targetUri` will result in some comments missing from the indexer response. * Any URIs, as long as it is a unique string that follows the [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) standard. * If your web page is dynamic and accepts query parameters, you should carefully consider which parameters are necessary to locate the correct comments. As a general rule: 1. Normalize the URL, e.g. using [`normalize-url`](https://www.npmjs.com/package/normalize-url). 2. Sort the query parameters using `sortQueryParameters` from [`normalize-url`](https://www.npmjs.com/package/normalize-url). 3. Do not include query parameters unrelated to page content, such as tracking or feature flags. * If the comment is a reply to a comment then set the value to `undefined`. #### App/Chain Agnostic URIs Whenever possible, it is recommended to use app or chain agnostic URIs, e.g. [CAIP-19](https://github.com/ChainAgnostic/namespaces/blob/main/eip155/caip19.md) specification for referencing onchain or offchain assets. This ensures the reference is consistent and maximal compatibility across different applications and chains. Example (NFT and collection): ``` chain://eip155:1/erc721:0xa723a8a69d9b8cf0bc93b92f9cb41532c1a27f8f/11 chain://eip155:1/erc721:0xa723a8a69d9b8cf0bc93b92f9cb41532c1a27f8f ``` ### `parentId` The `parentId` property is used to store the parent comment id. * If the comment is a reply to a comment, set the `parentId` to the id of the parent comment. * If the comment is a top-level comment, leave it `undefined`. ### `author` The `author` property is used to store the author's address. It is the address of the account that created and owns the comment. ### `app` The `app` property is used to store the app signer's address. The app signer represents the the owner of the app or community. If you are creating features just for yourself to post, such as a blog, you can use your own address as the `app`. To see detailed explanation please refer to the [Dual-signature System](./dual-signature-system.mdx) page. ### `deadline` The deadline is a timestamp in seconds since the epoch. Posting a comment with an expired deadline will result in the transaction being reverted. * It must be a future timestamp. * It provides a guarantee around the timestamp when the user or app countersigned the comment. ### `commentType` The `commentType` property uses a `uint8` value to efficiently categorize different types of comments. #### Valid Comment Type Values | Value | Name | Description | Usage | | ----- | --------------------- | ---------------------- | ------------------------------------------- | | `0` | **Comment** (Default) | Standard text comments | Regular discussions, replies, conversations | | `1` | **Reaction** | Reactions to content | Likes, dislikes, hearts, thumbs up/down | #### Implementation Notes * **Default Behavior**: If `commentType` is not explicitly set, it defaults to `0` (standard comment) * **Immutable**: Comment type cannot be changed after creation (not included in `EditComment` struct) * **Validation**: Applications should validate that reaction content contains valid reaction types * **Extensibility**: Additional comment types can be added in future versions ### `channelId` The `channelId` property is used to organize comments into different channels or categories. * Must be a numeric identifier (`uint256`). * Allows applications to segment comments into different groups, communities, or topics. * Comments with the same `channelId` are logically grouped together. * Applications can use this to implement features like multiple comment sections, communities, or discussion boards. ### `createdAt` (automatic) * Timestamp when the comment was first created (in seconds since epoch). * Set automatically when the comment is posted to the blockchain. * Cannot be modified after creation. ### `updatedAt` (automatic) * Timestamp when the comment was last modified (in seconds since epoch). * Updated automatically whenever the comment content or metadata is edited. * Initially equals `createdAt` for new comments. ### `hookData` (added by hooks) Hook metadata is additional data that can be added by hooks during comment processing, stored separately from regular metadata. * Stored as key-value pairs similar to regular metadata * Used by the protocol's hook system to attach additional information to comments * The specific format and content depend on the hooks implemented by the application * Applications can use this for custom features like moderation flags, additional metadata, or integration data * Since `hookData` is added by hooks, it is not signed by the author nor the app. #### Hook Metadata Access ```solidity // Get all hook metadata for a comment Metadata.MetadataEntry[] memory hookMetadata = commentManager.getCommentHookMetadata(commentId); // Get specific hook metadata value bytes memory value = commentManager.getCommentHookMetadataValue(commentId, keccak256("moderationStatus string")); // Get all hook metadata keys bytes32[] memory keys = commentManager.getCommentHookMetadataKeys(commentId); ``` ## Comments Protocol Contract The contracts are currently only deployed on the Base Sepolia as we decide where to deploy the production contracts. | Network | Contract Address | Contract | | ------------ | --------------------------------------- | ------------------------------------------------------------------------------------------ | | Base Mainnet | `%BASE_MAINNET_COMMENT_MANAGER_ADDRESS` | [Base Mainnet](https://basescan.org/address/%BASE_MAINNET_COMMENT_MANAGER_ADDRESS) | | Base Sepolia | `%BASE_SEPOLIA_COMMENT_MANAGER_ADDRESS` | [Base Sepolia](https://sepolia.basescan.org/address/%BASE_SEPOLIA_COMMENT_MANAGER_ADDRESS) | ### Importing ABIs You can import the contract ABIs directly from the SDK: ```typescript import { CommentManagerABI, ChannelManagerABI } from "@ecp.eth/sdk/abis"; ``` * **Contract ABI Reference:** [View ABI Documentation](/protocol-reference/CommentManager) | [GitHub Source](https://github.com/ecp-eth/comments-monorepo/blob/main/packages/protocol/abis.ts) #### Comment Manager Contract Functions | Function | Description | Note | | ------------------------- | -------------------------------------------------- | ------------------------------------------------------------- | | `postComment` | Post a comment with app signature verification | Requires author to be msg.sender | | `postCommentWithSig` | Post a comment with both author and app signatures | Allows posting on behalf of author with signatures | | `editComment` | Edit a comment with app signature verification | Requires author to be msg.sender | | `editCommentWithSig` | Edit a comment with both author and app signatures | Allows editing on behalf of author with signatures | | `deleteComment` | Delete a comment when called by the author | ⚠️ Deleted data may still be traceable or recoverable onchain | | `deleteCommentWithSig` | Delete a comment with signature verification | ⚠️ Deleted data may still be traceable or recoverable onchain | | `addApproval` | Approve an app signer directly | Called by the author | | `addApprovalWithSig` | Approve an app signer with signature | Allows approving on behalf of author with signature | | `revokeApproval` | Remove an app signer approval directly | Called by the author | | `removeApprovalWithSig` | Remove an app signer approval with signature | Allows revoking on behalf of author with signature | | `getComment` | Get a comment by ID | | | `getCommentMetadataKeys` | Get the metadata keys for a comment | | | `getCommentMetadataValue` | Get the metadata value for a comment | | | ... | ... | ... | For detailed information about all functions, events, and structs, please refer to the [Contract ABI Documentation](/protocol-reference/CommentManager). ### Channel Manager Contract Details * **Contract ABI:** [View ABI Documentation](/protocol-reference/ChannelManager) | [GitHub Source](https://github.com/ecp-eth/comments-monorepo/blob/main/packages/protocol/abis.ts) | Network | Contract Address | Contract | | ------------ | --------------------------------------- | ------------------------------------------------------------------------------------------ | | Base Mainnet | `%BASE_MAINNET_CHANNEL_MANAGER_ADDRESS` | [Base Mainnet](https://basescan.org/address/%BASE_MAINNET_CHANNEL_MANAGER_ADDRESS) | | Base Sepolia | `%BASE_SEPOLIA_CHANNEL_MANAGER_ADDRESS` | [Base Sepolia](https://sepolia.basescan.org/address/%BASE_SEPOLIA_CHANNEL_MANAGER_ADDRESS) | #### ChannelManager Contract Functions | Function | Description | Note | | --------------- | ------------------------------------------------------------------------------------- | ------------------------------- | | `createChannel` | Creates a new channel with specified name, description, metadata, and optional hook | Requires channel creation fee | | `updateChannel` | Updates an existing channel's name, description, and metadata | Only callable by channel owner | | `setHook` | Sets or updates a hook contract for a channel | Only callable by channel owner | | `getChannel` | Retrieves channel information including name, description, metadata, and hook address | | | `channelExists` | Checks if a channel ID exists | | | `setBaseURI` | Sets the base URI for token metadata | Only callable by contract owner | | `ownerOf` | Gets the owner address of a channel | | For detailed information about all functions, events, and structs, please refer to the [Contract ABI Documentation](/protocol-reference/ChannelManager). ## Signatures & Approvals ### Approvals The protocol implements an approvals system that allows comment authors to delegate the ability for an app to post comments on their behalf. This enables a smooth UX by which a user signs a one time approval transaction, and the app can post comments on their behalf without the need for the user to sign each transaction. These approvals can be revoked by the user at any time. #### Approval Expiry Approvals include expiry functionality for enhanced security. When granting approval to an app, users must specify an expiry timestamp. This provides several benefits: * **Automatic Expiration:** Compromised approvals will automatically expire without user intervention * **User Control:** Users explicitly choose how long to grant approval (e.g., 30 days, 1 year) ##### Granting Approval with Expiry ```typescript import { addApproval } from "@ecp.eth/sdk"; // Grant approval for 30 days const expiry = Date.now() + 30 * 24 * 60 * 60 * 1000; // 30 days from now await addApproval({ app: appAddress, expiry: Math.floor(expiry / 1000), // Convert to seconds writeContract, }); ``` ##### Checking Approval Status ```typescript import { isApproved, getApprovalExpiry } from "@ecp.eth/sdk"; // Check if currently approved const approved = await isApproved({ author, app, readContract }); // Get expiry timestamp const expiry = await getApprovalExpiry({ author, app, readContract }); if (expiry > 0 && expiry > Math.floor(Date.now() / 1000)) { console.log("Approval is valid until:", new Date(expiry * 1000)); } else { console.log("No valid approval exists"); } ``` ##### Smart Contract Interface The approval functions now require an expiry parameter: ```solidity // Add approval with expiry function addApproval(address app, uint256 expiry) external; // Add approval with signature and expiry function addApprovalWithSig( address author, address app, uint256 expiry, uint256 nonce, uint256 deadline, bytes calldata signature ) external; // Get approval expiry timestamp function getApprovalExpiry( address author, address app ) external view returns (uint256); ``` ### Signatures Comments require different signatures depending on whether the author has granted approval to the app: **With Approval:** When a user has granted approval to an app, comments only need to be signed by the app. The app can post comments on the user's behalf using the pre-existing approval. **Without Approval:** When no approval exists, comments must be signed by both the app and the comment author. This means that every comment is attributable to an app and author. This enables the app to impose offchain limitations and gating on which comments it wants to co-sign, as well as allowing the app to choose whether to index and display comments from other apps or not. If interacting with the protocol directly, the user can also choose to self sign the comment, signing with their address as the app and author. ### Authentication Methods Each comment stores how it was authenticated onchain via an `authMethod` field. * **`0` (DIRECT\_TX)** - User signed transaction directly * **`1` (APP\_APPROVAL)** - User pre-approved the app * **`2` (AUTHOR\_SIGNATURE)** - User signed comment hash ### Paymaster and Proxy Contract Attribution When using paymasters, or other proxy contract systems that relay transactions, be aware that comments may appear to originate from these proxy contracts rather than the intended app. **Key points:** * **Paymasters can be tricked:** A malicious actor could craft a transaction with the paymaster's address as the `app` field, causing the comment to appear as if it came from the paymaster * **Paymaster attribution should not be trusted:** Comments showing a paymaster or proxy contract as the app should not be considered as actually originating from that service This is an inherent limitation of any system that accepts `msg.sender` as a form of authentication when used with transaction relay services. ## FAQ ### Isn't putting content onchain expensive? See [Gas Costs](/gas-costs) for more information - blockspace is pretty cheap already, and only getting cheaper. ### There's a protocol fee switch with no timelock on the governance contract. Isn't this a risk of frontrunning transactions with fee changes on short notice? This is a temporary tradeoff for the simplicity of the ECP contracts. We will publicly announce any fee increases at least 48 hours in advance. We plan to transfer the protocol ownership to a Governor contract that will have appropriate timelocks on protocol settings. ### Is there a way to delete channel? No, but you can freeze the channel from receiving new comments by sending the channel NFT to the zero address, or setting a hook for the channel that reverts on every hook call. ### Why is there a fee to create a channel? We want to initially prevent too many low quality channels from being created. We may remove this fee in the future. ### Is there a fee to create comments? The comment fee is controlled by a protocol fee switch, similar to the channel creation fee. This allows the protocol to collect a small fee on each comment to support ongoing development and maintenance. The fee can be adjusted by governance, and any excess fees beyond the protocol's share are passed to the channel's hook contract if one is set. There is currently no fee to create comments, and the plan is to not have a fee, unless hooks monetize entirely through non-ETH fees, in which case a small fee similar to the gas fee per comment may be the most viable way to sustain the protocol. ### Are your contracts upgradeable? No, we want to minimize the need for developers to maintain the infrastructure to keep their apps and integrations running. ### Are there ECP profiles? What about other social primitives like follows? No, that's the role of another protocol. We don't want apps to have to choose between the user experience costs of onboarding users to a new profile and getting the benefits of onchain composability. We recommend using [ENS](https://ens.domains) for profiles, and [EFP](https://efp.app) for follows ### Will ECP be available on my favorite EVM chain? If there's enough interest from developers we are open to adding support for new chains, please reach out to us. ### Will ECP build an App to compete with my App built on ECP? We want to avoid misalignment and competition between the ECP protocol team and potential integrators. We may build apps in the future to try to help drive the growth of ECP, but our current approach is focused on aligning other builders to build on ECP, and avoiding building a traditional social super app. ### Is there a way to quickly deploy signer api? Yes, we have a [Signer API Service](/demos/signer-api-service) that you can deploy to your own infrastructure. ### Any limitations? Yes. We have made the following tradeoffs with the contract design: 1. Hooks are responsible for refunding any excess value sent to them. 2. Hooks are not permissioned and you should only interact with hooks you trust. 3. Paymasters can be tricked into signing messages that they did not intend to be considered authors of. 4. Hooks are allowed to re-enter the CommentManager to post/edit/delete comments in the same transaction, so as to reply, for example. 5. Channels names, descriptions and Comment contents can be really long, beyond what is reasonable for an app to index or display. 6. Channels can change their hooks, frontrunning users posting to them. This can be mitigated by transferring ownership of the channel to a contract that implements a timelock. 7. Protocol parameters can be changed at a moments notice, frontrunning users. This will be mitigated by transferring ownership of the protocol contracts to a governance contract with timelocks. 8. Long deadlines can be exploited to delay sharing a comment 9. Deduplication of identical comments by the same author should be done via using a different deadline for each comment. 10. Metadata is limited to 1000 items to prevent gas-DOS attacks. 11. An approval gives the app the permission to delete comments, including comments posted by another app for this user. import { GasEstimationTable } from "../components/GasEstimationTable"; ## Gas Costs This page provides an overview of typical gas costs for posting comments on different chains using the Ethereum Comments Protocol (ECP). *Please note that the figures on this page are provided as estimates to give a general idea of transaction costs. The actual figures will vary.* ### Base Network Base is an Ethereum L2 that offers significantly lower gas costs compared to Ethereum mainnet. Here are estimated fees based on various L2 gas price: ### Ethereum Mainnet ## Example transactions: For example a [`postComment`](/protocol-reference/CommentManager#postcommentstruct-commentscommentdata-commentdata-bytes-appsignature-external) that replies to a comment, the [transaction](https://basescan.org/tx/0x189c08c3b6bda7f098a649574e27d203aa1e760848197f447e9adfdbc8a3a465) is initiated and paid by the author, it costs around `73,657` gas units, with a limit of `74,532` gas units on Base L2; `4,324` gas units on L1: * With a gas price of `0.002915116 Gwei` on L2, the transaction fee on Base L2 is `0.000000218753205117 ETH`. * With a gas price of `0.411140238 Gwei` on L1, after adjustment the final L1 fee is `0.000000004034505905 ETH`. The user total paid for `0.000000218753205117 ETH` for the transaction, and at the time of transaction, it was `0.000439 USD`. * Gas costs are estimates and may vary based on: * The length of the comment content * Network congestion * Current gas prices * Additional metadata included * Gas prices are highly variable. Check current gas prices on: * [Base Gas Tracker](https://basescan.org/gastracker) * [Ethereum Gas Tracker](https://etherscan.io/gastracker) * Dollar amounts are approximate and will vary based on: * Current ETH price * Gas price at time of transaction * Network conditions ## Hooks **Hooks** are smart contracts that can be set on a [Channel](/channels). A **Hook** defines the rules for commenting on the specified **Channel**. They unlock flexible and powerful behaviors, such as: 1. Defining who can comment and how comments behave 2. Charging a small fee to post a comment 3. Integrating with other protocols, such as tokens or NFTs ### Protocol Fee When sending ETH value to a hook, a protocol fee is automatically deducted from the value. This fee is used to support the protocol's development and maintenance. The remaining value is passed to the hook. The current protocol fee is set to 2%, but this value is subject to change in the future. Any fee changes will be announced at least 48 hours in advance. ### Available hook Functions [`onInitialize`](/protocol-reference/interfaces/IHook#onInitialize) - Called when a channel is initialized [`onCommentAdd`](/protocol-reference/interfaces/IHook#onCommentAdd) - Called when a comment is added [`onCommentEdit`](/protocol-reference/interfaces/IHook#onCommentEdit) - Called when a comment is edited [`onCommentDelete`](/protocol-reference/interfaces/IHook#onCommentDelete) - Called when a comment is deleted [`onChannelUpdate`](/protocol-reference/interfaces/IHook#onChannelUpdate) - Called when a channel is updated [`onCommentHookDataUpdate`](/protocol-reference/interfaces/IHook#onCommentHookDataUpdate) - Called when hook metadata is updated for an existing comment See [IHook](/protocol-reference/interfaces/IHook) or [BaseHook](/protocol-reference/hooks/BaseHook) #### Discover community created hooks [Awesome hooks](https://github.com/ecp-eth/awesome-ecp-hooks) is a collection of hooks that can be used to build on top of ECP. #### Modifying the hook on a channel ```solidity channelManager.setHook(channelId, hookAddress); ``` #### Updating hook metadata The `updateCommentHookData` function allows you to trigger a hook to update its metadata for an existing comment. This is useful for scenarios where hook metadata needs to be refreshed based on external conditions or time-based changes. ```solidity // Trigger hook metadata update for a specific comment commentManager.updateCommentHookData(commentId); ``` **Key Features:** * **Gas Efficient**: Only updates specified metadata fields using SET and DELETE operations * **Explicit Operations**: Hooks return precise operations instead of replacing all metadata * **Non-Payable**: No ETH required for metadata updates * **Permission-Based**: Only works if the channel's hook has `onCommentHookDataUpdate: true` **Hook Implementation Example:** ```solidity function _onCommentHookDataUpdate( Comments.Comment calldata commentData, Metadata.MetadataEntry[] calldata metadata, Metadata.MetadataEntry[] calldata hookMetadata, address msgSender, bytes32 commentId ) internal override returns (Comments.MetadataEntryOp[] memory) { Comments.MetadataEntryOp[] memory operations = new Comments.MetadataEntryOp[]( 2 ); // Update an existing field operations[0] = Comments.MetadataEntryOp({ operation: Comments.MetadataOperation.SET, key: "string score", value: abi.encode(calculateNewScore(commentData)) }); // Delete a field operations[1] = Comments.MetadataEntryOp({ operation: Comments.MetadataOperation.DELETE, key: "string temp_data", value: "" // Ignored for DELETE operations }); return operations; } ``` ### Writing Your Own hooks Hooks allow you to customize channel behavior. To create a custom hook: 1. Inherit from [BaseHook](/protocol-reference/hooks/BaseHook) 2. Override the desired hook functions 3. Implement the required permissions #### Basic hook example ```solidity // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import { BaseHook } from "@ecp.eth/protocol/src/hooks/BaseHook.sol"; import { Hooks } from "@ecp.eth/protocol/src/types/Hooks.sol"; import { Comments } from "@ecp.eth/protocol/src/types/Comments.sol"; import { Channels } from "@ecp.eth/protocol/src/types/Channels.sol"; contract MyCustomHook is BaseHook { function _getHookPermissions() internal pure override returns (Hooks.Permissions memory) { return Hooks.Permissions({ onInitialize: true, // Enable channel initialization hook onCommentAdd: true, // Enable comment addition hook onCommentEdit: false, // Disable comment editing hook onCommentDelete: false, // Disable comment deletion hook onChannelUpdate: false, // Disable channel update hook onCommentHookDataUpdate: false // Disable comment hook update hook }); } function _onInitialize( address channelManager, Channels.Channel memory channelData, uint256 channelId, Metadata.MetadataEntry[] calldata metadata ) internal override returns (bool) { // Your initialization logic here return true; } function _onCommentAdd( Comments.Comment calldata commentData, address msgSender, bytes32 commentId ) internal override returns (string memory) { // Your comment addition logic here return ""; } } ``` ### Best Practices 1. **Hook Implementation** * Keep hook logic gas-efficient * Handle errors gracefully * Validate inputs thoroughly 2. **Channel Management** * Use meaningful channel names and descriptions * Keep track of channel IDs 3. **Security** * Validate all inputs in hooks * Be cautious with external calls * Test hooks thoroughly * Consider implementing a ReentrancyGuard in your hook if you want to prevent reentrancy attacks 4. **Fees** * Consider refunding any excess fees to the user * use `channelManager.calculateMsgValueWithHookFee` to calculate the correct amount of ETH to send to your hook ### Troubleshooting 1. **Hook Not Working** * Check if hook permissions are set correctly * Verify the hook implementation * Ensure the hook is properly set on the channel * Remember that hooks are called after modifying contract state, and any revert in a hook will revert the entire transaction 2. **Channel Creation Fails** * Ensure you have enough ETH for the creation fee * Check if the channel name/description is valid * Verify that metadata is valid JSON * Verify the hook is approved by the ECP team 3. **Hook Reverts** * Check the hook implementation for errors * Verify input validation * Check gas limits ## Using Index Supply as the Indexer The Ethereum Comments Protocol can be integrated with [Index Supply](https://www.indexsupply.net/) as an alternative indexing solution. This guide will walk you through the steps to setup Index Supply to query comments from the protocol. ### Event Signatures All events emitted by the `CommentManager` contract [can be found here](/protocol-reference/CommentManager#events). #### Struct to Tuple Conversion Index Supply does not recognize `struct` in event signatures. all `struct`s must be converted into a `tuple` according to [Human Readable ABI format](https://docs.ethers.org/v5/api/utils/abi/formats/#abi-formats--human-readable-abi). For example, the `CommentAdded` event was defined as: ```solidity event CommentAdded( bytes32 indexed commentId, address indexed author, address indexed app, CommentData commentData ); ``` It must be converted to the following tuple form in order to work with Index Supply: ```solidity CommentAdded(bytes32 indexed commentId, address indexed author, address indexed app, (string content, string metadata, string targetUri, bytes32 parentId, address author, address app, bytes32 salt, uint256 deadline) commentData) ``` *please note: at the time of writing, Index Supply's query interface doesn't support multi-line event signatures.* ### Dependencies All examples below requires installing the following dependencies: ```bash npm install @ecp.eth/sdk zod ``` ### Fetching Comments We will build a `fetchComments()` function to fetch comments for a given URI via Index Supply. :::steps #### Create Index Supply Client Create a simple client wrapper for Index Supply: ```typescript export type ISPrimitive = string | number | boolean | null; export type ISRow = ISPrimitive[]; export type ISRows = ISRow[]; export type ISResponse = { block_height: number; result: [[string[], ...ISRows]]; }; export const indexSupplyClient = { async query(chain: string, query: string, eventSignatures: string[]) { const params = new URLSearchParams({ chain, query, event_signatures: eventSignatures.join(","), }); const response = await fetch( `https://api.indexsupply.net/query?${params.toString()}` ); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.json() as Promise; }, }; ``` #### Fetch Comments function for a URI Here's how to fetch comments for a specific URI using Index Supply: ```typescript import { z } from "zod"; import { COMMENT_MANAGER_ADDRESS } from "@ecp.eth/sdk"; import { HexSchema } from "@ecp.eth/sdk/core"; import { indexSupplyClient, ISPrimitive } from "./isClient"; const COMMENT_ADDED_EVENT = `CommentAdded( bytes32 indexed commentId, address indexed author, address indexed app, ( string content, string metadata, string targetUri, bytes32 parentId, address author, address app, bytes32 salt, uint256 deadline ) commentData )`; const commentSchema = z.object({ id: z.string(), content: z.string(), targetUri: z.string(), author: HexSchema, app: HexSchema, parentId: z.string().nullable(), blockNumber: z.number(), transactionHash: HexSchema, }); type Comment = z.infer; async function fetchComments( targetUri: string, app: string, chain = "8453" ): Promise { const query = ` SELECT commentId as "id", (commentData->>'content') as "content", (commentData->>'targetUri') as "targetUri", "author", "app", (commentData->>'parentId') as "parentId", block_num as "blockNumber", tx_hash as "transactionHash" FROM CommentAdded WHERE address = ${COMMENT_MANAGER_ADDRESS} AND app = ${app} AND commentData->>'targetUri' = '${targetUri}' ORDER BY block_num DESC LIMIT 10 `; try { const response = await indexSupplyClient.query(chain, query, [ COMMENT_ADDED_EVENT, ]); if (!response.result?.[0]) { return []; } const [columns, ...rows] = response.result[0]; if (!columns) { return []; } return rows .map>((row: ISPrimitive[]) => { return row.reduce>( (record, value: ISPrimitive, index: number) => { if (!columns[index]) { return record; } record[columns[index]] = value; return record; }, {} as Record ); }) .filter((maybeComment): maybeComment is Comment => { const result = commentSchema.safeParse(maybeComment); if (!result.success) { console.warn("Invalid comment", result.error); } return result.success; }); } catch (error) { console.error("Error fetching comments:", error); throw error; } } ``` #### Run it ```typescript import { fetchComments } from "./fetchComments"; console.log( await fetchComments( "https://demo.ethcomments.xyz/", "0xe86a6df8ead873600050fb669e7bc8d3b8587f3d" ) ); ``` #### Done ::: ### Limitations and Considerations * Index Supply requires proper query optimization for best performance * Consider using pagination for large result sets * Add appropriate error handling for API rate limits and network issues * The free tier has limitations on query complexity and frequency ### Additional Resources * [Index Supply Documentation](https://www.indexsupply.net/docs) * [ECP Protocol Reference](/protocol-reference/CommentManager) ## LLM Context Files The following context files adhere to the [llms.txt standard](https://llmstxt.org/). ### Full Context (Recommended) A comprehensive guide including all technical details, API references, and implementation examples. **Download:** [llms-full.txt](https://docs.ethcomments.xyz/llms-full.txt) ### Minimal Context A concise overview of the Ethereum Comments Protocol for LLMs. **Download:** [llms.txt](https://docs.ethcomments.xyz/llms.txt) ### ⚠️ CAUTION Large language models and agents can sometimes 'hallucinate' responses or return otherwise inaccurate data. Always verify information against the official documentation and source code. ### About These Files These context files provide LLMs with structured information about the Ethereum Comments Protocol, including: * Protocol overview and architecture * Smart contract addresses and ABIs * API endpoints and schemas * Integration examples and code snippets * Best practices and security considerations The files are designed to help LLMs provide accurate, contextual assistance when working with the Ethereum Comments Protocol ecosystem. ## Logo Assets ### Light Logo
Light Logo
Download: logo-light.svg ### Dark Logo
Dark Logo
Download: logo-dark.svg ### Light ECP Logo
Light ECP Logo
Download: logo-ecp-light.svg ### Dark ECP Logo
Dark ECP Logo
Download: logo-ecp-dark.svg ### Usage Guidelines * Maintain the aspect ratio when resizing * Provide adequate padding around the logo * Do not modify the colors or alter the logo design ## Spam Prevention & Content Moderation > **Important Note**: The protocol itself does not perform any moderation. Each application (demo, embed, or custom implementations) is responsible for implementing their own moderation strategies using the tools provided below or through their own mechanisms. The ECP hosted indexer provides an opinionated moderation stack. ### The Challenge of Content Moderation Content moderation is a notoriously difficult problem that remains broadly unsolved across the internet. The challenges include: * Balancing free speech with content quality * Scaling moderation across different languages and cultures * Detecting sophisticated spam and abuse patterns * Managing the costs and complexity of human moderation Recognizing this complexity, specialized infrastructure providers exist to help solve moderation challenges and can index ECP data to provide advanced moderation services for applications that need them. ### ECP's Multi-Layer Moderation Approach ECP makes moderation easier by providing multiple layers of protection that work together: #### Layer A: Pre-Cosigning App Moderation Apps can moderate content **before** cosigning a comment with their app, enabling them to filter out unwanted content based on offchain rules before it ever makes it onchain. This includes: * **Rate Limiting**: Comments are rate-limited per author address. When rate limit is exceeded, requests return a 429 status code with a `Retry-After` header * **Content Filtering**: Basic profanity detection using the `obscenity` library, rejecting comments containing profane words * **CAPTCHA Systems**: Challenge-response systems to prevent automated spam * **Custom Validation**: Any application-specific rules or filters When combined with indexing only comments from your app, this approach can be highly effective at maintaining content quality. #### Layer B: Onchain Gating with hooks You can use hooks that apply onchain gating mechanisms to limit who can comment: * **Token gating**: Only token holders can comment, significantly limiting spam vectors * **NFT requirements**: Require ownership of specific NFTs to participate * **Staking mechanisms**: Require users to stake tokens to comment * **Reputation systems**: Base commenting permissions on onchain reputation These onchain restrictions create economic and social barriers that make spam less profitable. #### Layer C: Indexer-Level Moderation The indexer service implements additional spam prevention measures and tools: 1. **Muted Address Detection** * Maintains a list of known muted addresses that you can mark to hide them from your app * Comments from addresses marked as muted are not indexed * Muted accounts can be managed using the [Admin CLI](/indexer/admin-cli-muted-accounts) 2. **Content Validation (Opt in)** * Implements basic profanity detection * Can be extended with more advanced content analysis 3. **Automatic Content Classification (Opt in)** * Uses [mbd.xyz](https://www.mbd.xyz) API to automatically classify comments for specific moderation labels * Labels include: spam, harassment, hate speech, sexual content, violence, self-harm, and more * Each label comes with a confidence score between 0 and 1 * API users can: * Filter out comments with specific moderation labels using `excludeModerationLabels` * Set a global moderation score threshold using `moderationScore` to exclude comments with high scores * This helps maintain content quality without manual intervention > **Important**: If you want to use only automatic content classification and ignore premoderation, you must explicitly request comments of all moderation statuses (using the `moderationStatus` parameter) when premoderation is enabled on the indexer. This allows you to "opt out" of premoderation and rely solely on automatic classification. 4. **Comment Premoderation (Opt in)** * Comments can be configured to require moderator approval before appearing in the feed * When enabled, new comments are initially hidden and only become visible after explicit approval * Moderators can approve or reject comments through the [Admin CLI](/indexer/admin-cli-comments-premoderation), directly through [Indexer API](/indexer-reference/restful) or through a Telegram bot * This provides an additional layer of control over content quality and spam prevention #### Layer D: Hosted Infrastructure Moderation The ECP team is currently responsible for moderation on the free hosted indexer and actively uses premoderation on comments to ensure quality standards are maintained for applications using the hosted service - at our discretion. You can self host your own indexer to run your own moderation. ### Recommendations & Future improvements For production deployments, consider implementing or using service providers foradditional spam prevention measures: * Machine learning-based content analysis * IP-based rate limiting * Advanced pattern matching for spam detection * User reputation scoring * Integration with specialized moderation service providers * Community-based moderation systems * CAPTCHA or similar challenge-response systems ### Commenting UX Flows There are several approaches to posting a comment, each with its own pros and cons. In this guide, we are going through these different options for posting a comment. It is recommended to finish the [architecture overview](/architecture-overview) and [dual signature system](/dual-signature-system) first. #### 1. Author pays gas The simplest approach is having the author pay the gas fee directly. The process works as follows: 1. The author creates a post comment request containing the comment details 2. The app server signs this request using its `app` to authorize the post action 3. The app server returns the signature to the author This provides a direct path for posting comments, though it requires the author to have funds for gas fees. ```mermaid sequenceDiagram actor Author participant App server participant Contract participant Indexer %% Flow 1: Author pays gas Note over Author,Indexer: Flow 1: Author pays gas Author->>App server: Post the comment request App server->>App server: Signs the comment request App server-->>Author: Responds comment data and app signature Author->>Contract: CommentManager.postComment(commentData, appSignature) Contract->>Indexer: Emit comment event Indexer->>Indexer: Store the comment Indexer-->>Author: Responds with updated comments feed ``` While this approach requires authors to interact with their wallet and pay gas fees, which impacts user experience, it provides the strongest security guarantees. Comments can only be published with explicit authorization from the author's wallet, ensuring full control over their content and preventing unauthorized posts. #### 2. Gasless transaction (submitter pays gas) This approach is similar to the first one, but with a key difference in who pays the gas fees. Instead of the author directly interacting with the contract and paying gas, the author sign a message authorizing a single comment to be posted on their behalf. The app server's submitter wallet then handles submitting the transaction and pays the gas fees on behalf of the author. This enables a smoother user experience since authors don't need to hold network tokens for gas. The app server takes on the responsibility of transaction costs while still maintaining security through the author's signature. ```mermaid sequenceDiagram actor Author participant App server participant Contract participant Indexer %% Flow 2: Submitter pays gas Note over Author,Indexer: Flow 2: Submitter pays gas Author->>App server: Post the comment request App server->>App server: Signs the comment request App server-->>Author: Responds comment data and appSignature Author->>Author: Author signs the comment data and appSignature Author->>App server: Post comment data and authorSignature App server->>Contract: CommentManager.postCommentWithSig(commentData, authorSignature, appSignature) Contract->>Indexer: Emit comment event Indexer->>Indexer: Store the comment Indexer-->>Author: Responds with updated comments feed ``` This approach significantly improves the user experience by eliminating the need for authors to pay gas fees or maintain token balances. The app server handles all transaction costs, making the commenting process seamless for end users. While this adds some implementation complexity for the app server developer - requiring proper signature verification and gas fee management - it provides an optimal balance between security and usability. The user's signature still ensures full content ownership and authorization, while removing friction from the interaction process. #### 3. Gasless transaction with prior approval Both approaches 1 and 2 require the author to sign each transaction, which can be cumbersome for frequent commenters. Approach 3 streamlines this process by implementing a prior approval system - the author grants permission to the app server once, allowing it to post comments on their behalf going forward. This significantly reduces friction for active users while maintaining security through the initial authorization. ```mermaid sequenceDiagram actor Author participant App server participant Contract participant Indexer %% Flow 3: Gasless transaction with prior approval Note over Author,Indexer: Author approves app signer Author->>App server: Request to approve app signer App server->>Contract: Check if the author has approved the app signer alt Author approved Contract-->>App server: Responds with approved=true App server-->>Author: Responds with approved=true else Author is not approved Contract-->>App server: Responds with approved=false App server->>App server: Sign approval request with app signer App server-->>Author: Responds with app signature Author->>Author: Sign the approval request with author signer Author->>App server: Post approval request, author signature, app signature App server->>App server: Verify app signature App server->>Contract: CommentManager.addApprovalWithSig(authorAddress, appAddress, authorSignature) end Note over Author,Indexer: Gasless transaction with prior approval Author->>App server: Post the comment request App server->>App server: Signs the comment request App server->>Contract: CommentManager.postComment(commentData, appSignature) Contract->>Indexer: Emit comment event Indexer->>Indexer: Store the comment Indexer-->>Author: Responds with updated comments feed ``` ## Profanity Detection By default, the protocol does not include profanity detection to remain neutral and accommodate multi-language communities. This design choice helps avoid potential false positives that can occur with language-specific profanity filters. ### Implementing Your Own Filter You can guard against profane comments in two places: 1. When the app signer signs the comment — this prevents the comment from being broadcast to the network. 2. When the comment is returned to the app — this prevents it from being displayed to users. Taking the comment signing API as an example (see our [demo app](\(https://github.com/ecp-eth/comments-monorepo/blob/main/apps/demo/src/app/api/sign-comment/route.ts\))), you can add profanity detection by filtering the comment content using a zod schema: ```typescript const CommentSchema = z.object({ author: HexSchema, content: z .string() .trim() .nonempty() .refine((val) => !isProfane(val), "Comment contains profanity"), }); ``` Use it in your comment signing API to parse the request body: ```typescript const parseResult = CommentSchema.safeParse(await req.json()); ``` ### Popular Profanity Detection Libraries 1. [obscenity](https://www.npmjs.com/package/obscenity) 2. [bad-words](https://www.npmjs.com/package/bad-words) 3. [leo-profanity](https://www.npmjs.com/package/leo-profanity) 4. [profanity-check](https://www.npmjs.com/package/profanity-check) Choose a solution that best fits your community's language and moderation needs. Remember to: * Test thoroughly to minimize false positives * Consider maintaining custom word lists * Allow for cultural and linguistic context * Consider implementing an appeals process for false positives ## Test with Anvil Anvil is a local Ethereum node that is used for testing and development. It comes with `foundry` and is a perfect tool for local testing and development. You can get started by installing `foundryup` which is a tool to install [`foundry`](https://book.getfoundry.sh/getting-started/installation). Once you have `foundry` installed, you can start the anvil node by running: ```bash anvil ``` Then you can deploy our `CommentManager` contract to the anvil node by running: ```bash cd packages/protocol forge script script/Dev.s.sol:DevScript --rpc-url http://localhost:8545 --broadcast ``` **Please note that every time anvil shuts down, it will reset the blockchain state. You will need to re-deploy the contract.** You can also combine above 2 steps by running `pnpm run dev` in `/packages/protocol/`, ## Guides ### Next.js Demo #### Post the comment as the author In this section, we will walk through the code from the [demo app](https://github.com/ecp-eth/comments-monorepo/tree/main/apps/demo) to illustrate the process of posting a comment as the author. The ECP supports 4 types of comment posting flows, each with its pros and cons. Here we will discuss [the simplest flow](/post-comment-flows#1-author-pays-gas): * The author posts and pays for gas, see ["author pays for the gas"](/post-comment-flows#1-author-pays-gas). * The app server authorizes the post by signing the comment data. You may want to read more about the [post comment flows](/post-comment-flows) for more details. ##### The Contract * For the latest contract address, see [SUPPORTED\_CHAINS](/sdk-reference/defaultExports/variables/SUPPORTED_CHAINS) or [contracts](/contracts). * We will call [`postComment()`](/protocol-reference/CommentManager#postcommentstruct-commentscommentdata-commentdata-bytes-appsignature-external) method to post the comment. ##### Demo Dependencies Here is a quick run-down of some of the dependencies used in the demo app: 1. `@ecp.eth/sdk` - for comment data creation, retrieving, and interaction with the indexer. 2. `wagmi` - for react based wallet connection 3. `viem` - for contract interaction 4. `@rainbow-me/rainbowkit` - for wallet connection UI 5. `@tanstack/react-query` - for data fetching and caching ##### Test environment * We use [Anvil](https://book.getfoundry.sh/anvil/) for local testing and development, follow the steps in [Test with Anvil](/test-with-anvil) to set up the environment. * You may want to set up an indexer locally as well, see [Indexer](/indexer-reference/) for more details. Now let's go through the steps to post a comment! :::steps ##### Collect the comment data and send it to the server for signing We will start by collecting the [comment data](/comment-data-props) and send it to the server for signing: The comment data is sent to the server for signing: ```typescript const response = await fetch("/api/sign-comment", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ content, targetUri: window.location.href, parentId, author: address, chainId, }), }); ``` 🧑‍💻 *[/apps/demo/src/components/comments/CommentBox.tsx#L62](https://github.com/ecp-eth/comments-monorepo/blob/094bcde2bca079bd7451c6571f26c5687b2ad128/apps/demo/src/components/comments/CommentBox.tsx#L62)* ##### The App Server signs the comment data Once the data reaches the app server, it creates a `CommentData` using `createCommentData` from `@ecp.eth/sdk`: ```typescript const commentData = createCommentData({ content, targetUri, parentId, author, app: app.address, }); ``` See [`Comment Data`](/comment-data-props) for more details on the properties of the comment data. Create a typed data structure from `commentData` according to EIP-712: ```typescript const typedCommentData = createCommentTypedData({ commentData, chainId: chain.id, }); ``` Finally, sign the typed data using the app signer's private key and return both `signature` and `commentData`: ```typescript const signature = await app.signTypedData(typedCommentData); return { signature, commentData, }; ``` 🧑‍💻 *[/apps/demo/src/app/api/sign-comment/route.ts#L48-L61](https://github.com/ecp-eth/comments-monorepo/blob/094bcde2bca079bd7451c6571f26c5687b2ad128/apps/demo/src/app/api/sign-comment/route.ts#L48-L61)* **Note**: * Do not expose the app signer's private key on the client side. In the demo, we store the private key in the environment variable `APP_SIGNER_PRIVATE_KEY`. Next.js ensures that the environment variable without `NEXT_PUBLIC_` prefix is only available on the server side. Now that we have finished server-side signing, let's move on to the client side. ##### The Author signs and sends the transaction In the demo, we use a combination of `wagmi` and `rainbowkit` to connect the user wallet and send the transaction to the contract. You can find out how it was set up in the `providers` component: ```tsx {children} ``` 🧑‍💻 *[/apps/demo/src/app/providers.tsx#L16-L20](https://github.com/ecp-eth/comments-monorepo/blob/094bcde2bca079bd7451c6571f26c5687b2ad128/apps/demo/src/app/providers.tsx#L16-L20)* Now with the wagmi ready to go, and the comment data and app signature returned from the server, we can now post the comment to the contract: ```typescript await writeContractAsync({ abi: CommentManagerABI, address: COMMENT_MANAGER_ADDRESS, functionName: "postComment", args: [commentData, appSignature], }); ``` 🧑‍💻 *[/apps/demo/src/lib/contract.ts#L40-L45](https://github.com/ecp-eth/comments-monorepo/blob/094bcde2bca079bd7451c6571f26c5687b2ad128/apps/demo/src/lib/contract.ts#L40-L45)* ##### Congratulations! You've completed the tutorial! ::: #### Best Practices 1. Implement proper error handling 2. Monitor gas costs and adjust gas limits accordingly 3. Consider implementing retry mechanisms for failed transactions 4. Keep private keys secure and never expose them in client-side code 5. While the contract doesn't impose rate limits, consider implementing application-level rate limiting to prevent spam and manage gas costs effectively. 6. Consider anti-spam measures #### Additional Resources * Check out **gasless** [post comment flows](/post-comment-flows) * See [Protocol API Reference](/protocol-reference/CommentManager) for more functions and details. * See [Demo App Source Code](https://github.com/ecp-eth/comments-monorepo/tree/main/apps/demo) for implementations of: 1. The other post comment flows. 2. Request permission from the user for gasless posting. 3. Deleting comments. ## Admin CLI - API Key Management The Admin CLI provides tools to manage API keys for the indexer service. API keys are used to authenticate requests to protected endpoints of the indexer. ### Prerequisites * Node.js installed * Access to the indexer database * Checked out the [Comments monorepo](https://github.com/ecp-eth/comments-monorepo) ### Database Connection All commands require a database connection. You can provide the database URL in two ways: 1. Set the `DATABASE_URL` environment variable 2. Use the `-d` or `--db-url` option with each command ### Commands #### Adding a New API Key To add a new API key, use the following command: ```bash bin/admin.js auth accounts add ``` Replace `` with a descriptive name for the API key. Example: ```bash bin/admin.js auth accounts add "production-api-key" ``` The command will output: * ID: Unique identifier for the API key * Name: The name you provided * Private key: The private key (store this securely) * Public key: The public key ⚠️ **Important**: Save the private key immediately after creation. It will not be shown again. #### Listing API Keys To list all existing API keys: ```bash bin/admin.js auth accounts list ``` This will display a table with: * ID: The unique identifier * Created at: Timestamp of creation * Last used at: Timestamp of last usage #### Deleting an API Key To delete an API key: ```bash bin/admin.js auth accounts delete ``` Replace `` with the ID of the API key you want to delete. Example: ```bash bin/admin.js auth accounts delete abc123def456 ``` ### Using API Keys When making requests to protected endpoints, you'll need to include the API key in the request headers: * `X-API-Key`: The API key ID * `X-API-Timestamp`: Current timestamp in milliseconds * `X-API-Signature`: A signature generated using the private key The signature is created by: 1. Concatenating the HTTP method, path, timestamp, and request body 2. Converting the string to bytes 3. Signing the bytes with the private key using Ed25519 ### Security Best Practices 1. Store private keys securely and never share them 2. Use descriptive names for API keys to track their purpose 3. Regularly rotate API keys 4. Delete unused API keys 5. Use different API keys for different environments (development, staging, production) ## Comment Reports Management The Indexer's Admin CLI provides commands to manage comment reports through the `reports` command group. This allows administrators to view and manage reports submitted by users regarding comments. ### Prerequisites Before using the reports management commands, ensure you have: * Access to the indexer service * An API key with appropriate permissions * The Comments mono repository checked out ### Common Options All reports management commands require the following options: * `-i, --id ` - The ID of the API key to use (required) * `-k, --private-key ` - The private key of the API key (required) * `-u, --url ` - The URL of the indexer service (default: [https://api.ethcomments.xyz](https://api.ethcomments.xyz)) ### Available Commands #### List Reports View all pending reports: ```bash bin/admin.js reports list ``` This command displays a list of pending reports with the following information for each report: * Report ID * Creation timestamp * Reportee address * Report message (if provided) #### Close Report Mark a report as closed without taking action: ```bash bin/admin.js reports close ``` This command changes the status of a report to "closed". Use this when a report doesn't require any action. #### Resolve Report Mark a report as resolved after taking appropriate action: ```bash bin/admin.js reports resolve ``` This command changes the status of a report to "resolved". Use this when you've taken action on the report (e.g., [moderating the reported comment](/indexer/admin-cli-comments-premoderation)). ### Error Handling The CLI will handle errors by: 1. Displaying an error message with details about the failure 2. Exiting with a non-zero status code Common error scenarios include: * Invalid API key or private key * Network connectivity issues * Invalid report IDs * Server-side errors ### Security Notes * Keep your API private keys secure and never share them * All requests are authenticated using Ed25519 signatures * Requests are timestamped to prevent replay attacks ## Admin CLI - Comments Premoderation The Comments Premoderation CLI allows you to manage comment moderation in the indexer service. This functionality requires proper authentication using API keys and is disabled by default. ### Prerequisites Before using the comments premoderation commands, you need: * [An API key ID](/indexer/admin-cli-api-key-management) * The corresponding private key * Access to the indexer service * Checked out the [Comments mono repository](https://github.com/ecp-eth/comments-monorepo) ### Enabling Premoderation Comment premoderation is disabled by default. To enable it, you need to set the `MODERATION_ENABLED` environment variable to `1` in your indexer service configuration. ### Commands #### Listing Pending Comments Lists all comments that are pending moderation. ```bash bin/admin.js moderate-comments list -i -k [--url ] ``` **Options:** * `-i, --id ` - The ID of the API key to use (required) * `-k, --private-key ` - The private key of the API key (required) * `-u, --url ` - The URL of the indexer service (default: [https://api.ethcomments.xyz](https://api.ethcomments.xyz)) **Example Output:** ``` comment-id-123 ┌───────────────────────────────────────────────────────────────┐ │ (index) │ Value │ ├──────────────────┼────────────────────────────────────────────┤ │ Comment ID │ comment-id-123 │ │ Timestamp │ 2024-03-20T10:30:00Z │ │ Author (address) │ 0x1234...5678 │ │ Author (ENS) │ example.eth │ │ Author (FC) │ example │ └──────────────────┴────────────────────────────────────────────┘ Content---------- This is the comment content that needs moderation. ---------- ``` #### Approving a Comment Approves a pending comment, making it visible to users. ```bash bin/admin.js moderate-comments approve -i -k [--url ] ``` **Arguments:** * `comment-id` - The ID of the comment to approve **Options:** * `-i, --id ` - The ID of the API key to use (required) * `-k, --private-key ` - The private key of the API key (required) * `-u, --url ` - The URL of the indexer service (default: [https://api.ethcomments.xyz](https://api.ethcomments.xyz)) **Example:** ```bash bin/admin.js moderate-comments approve comment-id-123 -i your-api-key-id -k your-private-key ``` #### Rejecting a Comment Rejects a pending comment, preventing it from being displayed. ```bash bin/admin.js moderate-comments reject -i -k [--url ] ``` **Arguments:** * `comment-id` - The ID of the comment to reject **Options:** * `-i, --id ` - The ID of the API key to use (required) * `-k, --private-key ` - The private key of the API key (required) * `-u, --url ` - The URL of the indexer service (default: [https://api.ethcomments.xyz](https://api.ethcomments.xyz)) **Example:** ```bash bin/admin.js moderate-comments reject comment-id-123 -i your-api-key-id -k your-private-key ``` ### Error Handling If any command fails, the CLI will: 1. Display an error message with details about the failure 2. Exit with a non-zero status code Common error scenarios include: * Invalid API key or private key * Invalid comment ID * Network connectivity issues * Server-side errors * Moderation not enabled on the instance ### Security Notes * Keep your API private keys secure and never share them * Use environment variables or secure key management systems to store sensitive credentials * The CLI uses Ed25519 signatures for authentication * All requests are timestamped to prevent replay attacks ## Admin CLI - Muted Accounts Management The Muted Accounts Management CLI allows you to mute and unmute accounts in the indexer service. This functionality requires proper authentication using API keys. ### Prerequisites Before using the muted accounts management commands, you need: * [An API key ID](/indexer/admin-cli-api-key-management) * The corresponding private key * Access to the indexer service * Checked out the [Comments mono repository](https://github.com/ecp-eth/comments-monorepo) ### Commands #### Muting an account Adds a new address to the muted accounts list. ```bash bin/admin.js muted-accounts mute
-i -k [--url ] ``` **Arguments:** * `address` - The Ethereum address to mark as muted (must be a valid hex address) **Options:** * `-i, --id ` - The ID of the API key to use (required) * `-k, --private-key ` - The private key of the API key (required) * `-u, --url ` - The URL of the indexer service (default: [https://api.ethcomments.xyz](https://api.ethcomments.xyz)) * `-r, --reason ` - The reason for muting the account (optional) **Example:** ```bash bin/admin.js muted-accounts mute 0x1234...5678 -i your-api-key-id -k your-private-key ``` #### Unmuting an account Removes an address from the muted accounts list. ```bash bin/admin.js muted-accounts unmute
-i -k [--url ] ``` **Arguments:** * `address` - The Ethereum address to remove from the muted accounts list **Options:** * `-i, --id ` - The ID of the API key to use (required) * `-k, --private-key ` - The private key of the API key (required) * `-u, --url ` - The URL of the indexer service (default: [https://api.ethcomments.xyz](https://api.ethcomments.xyz)) **Example:** ```bash bin/admin.js muted-accounts unmute 0x1234...5678 -i your-api-key-id -k your-private-key ``` ### Error Handling If any command fails, the CLI will: 1. Display an error message with details about the failure 2. Exit with a non-zero status code Common error scenarios include: * Invalid API key or private key * Invalid address format * Network connectivity issues * Server-side errors ### Security Notes * Keep your API private keys secure and never share them * Use environment variables or secure key management systems to store sensitive credentials * The CLI uses Ed25519 signatures for authentication * All requests are timestamped to prevent replay attacks ## Admin CLI The Indexer provides an admin CLI tool (`bin/admin.js`) for managing various aspects of an indexer instance. This tool requires proper authentication using API keys. ### Prerequisites Before using the admin CLI commands, you need: * Access to the indexer service * Checked out the [Comments mono repository](https://github.com/ecp-eth/comments-monorepo) ### Usage To see available commands and their descriptions: ```bash bin/admin.js help ``` ### Common Options Most admin CLI commands require the following options: * `-i, --id ` - The ID of the API key to use (required) * `-k, --private-key ` - The private key of the API key (required) * `-u, --url ` - The URL of the indexer service (default: [https://api.ethcomments.xyz](https://api.ethcomments.xyz)) ### Error Handling If any command fails, the CLI will: 1. Display an error message with details about the failure 2. Exit with a non-zero status code Common error scenarios include: * Invalid API key or private key * Network connectivity issues * Server-side errors * Invalid command arguments ### Security Notes * Keep your API private keys secure and never share them * Use environment variables or secure key management systems to store sensitive credentials * The CLI uses Ed25519 signatures for authentication * All requests are timestamped to prevent replay attacks ## Read Comments from the Indexer To accommodate different use cases, the ECP offers multiple ways to read comments from the indexer. ### Typescript SDK The Typescript SDK provides a set of functions to read comments and replies from the indexer. See [Typescript SDK](/integration-options/typescript-sdk) for more details. ### REST API The REST API endpoints are available at `https://api.ethcomments.xyz/**/*`. See [REST API Reference](/indexer-reference/restful) for more details. ### Direct GraphQL access The GraphQL API is available at `https://api.ethcomments.xyz/graphql`. You can query the data using [your favorite GraphQL client](https://github.com/chentsulin/awesome-graphql), or simply visit the GraphQL playground at [https://api.ethcomments.xyz/](https://api.ethcomments.xyz/) to try it out. #### Example queries Query a comment by its ID: ```graphql query { comment( id: "0xc4f012eaaa9285b0ffa7df432a7eb8f17145c34cfd50de688273b2b7df6bef08" ) { content } } ``` Filter comments by `targetUri` and limit the number of results: ```graphql query { comments(where: { targetUri: "https://demo.ethcomments.xyz" }, limit: 10) { # pagination info pageInfo { startCursor endCursor hasNextPage hasPreviousPage } # comment details items { id content } # total number of comments filtered by targetUri totalCount } } ``` ### Direct database access via ponder client Ponder access is available at `https://api.ethcomments.xyz/sql`, it allows you to query the indexer database directly. You can use direct database access for quick investigations and debugging, but this approach is not recommended for production use since the database schema may change without notice. Changes to the schema could break your queries and affect application stability. #### Install `ponder` and `@ponder/client` :::code-group ```bash [npm] npm install ponder @ponder/client ``` ```bash [yarn] yarn add ponder @ponder/client ``` ```bash [pnpm] pnpm add ponder @ponder/client ``` ::: `ponder` package is required by the schema file. #### Get a copy of the database schema We are currently working on determining the best way to distribute the database schema. In the meantime, you can obtain it by cloning our repository: ```bash git clone https://github.com/ecp-eth/comments-monorepo.git ``` The schema is located at `comments-monorepo/apps/indexer/ponder.schema.ts`. #### Create a ponder client and query ``` import { createClient, sql } from "@ponder/client"; import * as schema from "./schema"; // create a ponder client with specified schema const client = createClient("https://api.ethcomments.xyz/sql", { schema }); // query the database for comments const result = await client.db.select() .from(schema.comment) // filter comments by target uri .where(sql`${schema.comment.targetUri} = 'https://demo.ethcomments.xyz'`) // limit the result to 10 .limit(10); console.log(result) ``` See detailed explanation of ponder client at [Ponder client](https://ponder.sh/docs/api-reference/ponder-client). {/* !!DO NOT EDIT!! Automatically generated doc. run `pnpm run ref:gen:indexer:index` to update !!DO NOT EDIT!! */} ## Open source Ponder based indexer We provide an open source [Ponder](https://ponder.sh/) Indexer service that indexes and processes comments from the EVM-compatible blockchains. It provides REST API endpoints that allow clients to efficiently query and access the indexed comment data. ### Overview The ECP Indexer monitors `CommentManager` contract events for comment-related activities and processes them into a queryable database. It supports the following features: * Indexes comments from ECP smart contracts * Processes comment metadata and content * Maintains relationships between comments (replies, threads) * Provides REST API endpoints for querying indexed comments #### Free Hosted Indexer We are running a free hosted version of this indexer at [https://api.ethcomments.xyz](https://api.ethcomments.xyz). If you are an enterprise user of the API please consider self hosting - we may throttle this API. #### Links * [API endpoints](https://api.ethcomments.xyz/) * [Restful API reference and playground](https://docs.ethcomments.xyz/indexer-reference/restful) * [OpenAPI spec](https://docs.ethcomments.xyz/indexer-openapi.yaml) * [GraphQL references and playground](https://api.ethcomments.xyz/graphql) * [Source code](https://github.com/ecp-eth/comments-monorepo/tree/main/apps/indexer) ### Self hosting the Indexer Clone the repo from the [Source code](https://github.com/ecp-eth/comments-monorepo/tree/main/apps/indexer) #### Prerequisites * Node.js + pnpm * Access to an Ethereum node (e.g., Infura) * PostgreSQL database - SQLite will be used if not provided #### Installation 1. Clone the repository 2. Install dependencies: ```bash pnpm install ``` 3. Set up environment variables in `.env.local` for local development: ```bash cp .env.example .env.local ``` 4. Configure your database and Ethereum node connection in `.env.local` #### Start development server ```bash pnpm run dev ``` #### Start production server ```bash pnpm run start ``` #### Deployment on Railway To deploy indexer to Railway, follow the below steps: 1. Create a new Railway project and connect it to your GitHub repository. 2. Create a new PostgreSQL database and connect it to the project via `DATABASE_URL` environment variable reference or connect it to your own PostgreSQL database. 3. Configure the following environment variables: * `DATABASE_URL`: PostgreSQL connection string * `PONDER_RPC_URL_[chain id]`: Ethereum node RPC URL for the chain you want to index, you can add multiple RPC URLs for different chains. * `PONDER_START_BLOCK_[chain id]`: Block number for indexer to start from (default to 0). Nixpacks on Railway by default uses `npm` to install dependencies. The ECP repo uses `pnpm` instead. If you want dependency consistency, to make Railway respect the `pnpm` lock files when installing dependencies, follow these steps (larger deployment size and longer deployment time): 1. Configure the below environment variables to use `pnpm`: * `NIXPACKS_INSTALL_CMD`: set value to `pnpm install --frozen-lockfile` to use pnpm to install dependencies. * `NIXPACKS_BUILD_CMD`: set value to `pnpm run build` to tell nixpacks to use pnpm to build. * `NIXPACKS_START_CMD`: set value to `cd apps/indexer/ && pnpm run start --schema $RAILWAY_DEPLOYMENT_ID` to start indexer. If you don't mind dependency consistencies but prefer faster and smaller deployment, you can do the following: 1. Select the Railway project and then click "Add Root Directory", set the root directory to `apps/indexer`. 2. Under deploy section, configure "Custom start command" to `npm run start --schema $RAILWAY_DEPLOYMENT_ID` ## Integration Options ### Contract Interaction #### Protocol Integration Guide This guide explains how to integrate the ECP protocol into your own smart contracts. The protocol consists of two main contracts: 1. `CommentManager` - Handles comment creation, editing, and deletion 2. `ChannelManager` - Manages comment channels and their associated hooks #### Core Concepts ##### Channels Channels are the primary organizational unit in the ECP protocol. Each channel: * Is represented as an NFT (ERC721) * Can have one custom hook attached to it * Has its own metadata * Can enforce specific rules for comments ##### Hooks A hook is a smart contract that can be attached to a channel (one hook per channel) to: * Validate comments before they're posted * Add custom metadata to comments * Implement custom business logic * Monetize channels through various mechanisms The hook is set during channel creation or can be updated later using the `setHook` function in the `ChannelManager` contract. When a hook is set, it can define which operations it wants to participate in through its permissions. #### Integration Methods ##### 1. Direct Contract Calls The simplest way to integrate is by directly calling the protocol contracts: ```solidity // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "@ecp.eth/protocol/src/interfaces/ICommentManager.sol"; import "@ecp.eth/protocol/src/interfaces/IChannelManager.sol"; import "@ecp.eth/protocol/src/types/Comments.sol"; import "@ecp.eth/protocol/src/types/Metadata.sol"; contract MyProtocol { ICommentManager public commentManager; IChannelManager public channelManager; constructor(address _commentManager, address _channelManager) { commentManager = ICommentManager(_commentManager); channelManager = IChannelManager(_channelManager); } /// @notice Posts a comment through the protocol /// @param commentData The comment data including content, metadata, and other parameters /// @return The ID of the created comment function postComment( Comments.CreateComment memory commentData, bytes memory authorSignature ) external payable returns (bytes32) { require(address(this) == commentData.app, "Only the app can post comments"); // When msg.sender equals app (address(this)), the protocol skips app signature verification // This is why we can pass an empty string as appSignature return commentManager.postCommentWithSig{ value: msg.value }( commentData, authorSignature, "" ); } } ``` ##### 2. Custom Hook Implementation For more advanced integration, you can implement a custom hook: ```solidity // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "@ecp.eth/protocol/src/interfaces/IHook.sol"; import "@ecp.eth/protocol/src/types/Hooks.sol"; import "@ecp.eth/protocol/src/types/Comments.sol"; import "@ecp.eth/protocol/src/types/Channels.sol"; import "@ecp.eth/protocol/src/types/Metadata.sol"; contract MyCustomHook is IHook { function supportsInterface(bytes4 interfaceId) external pure returns (bool) { return interfaceId == type(IHook).interfaceId; } function getHookPermissions() external pure returns (Hooks.Permissions memory) { return Hooks.Permissions({ onInitialize: false, onCommentAdd: true, onCommentDelete: false, onCommentEdit: false, onChannelUpdate: false, onCommentHookDataUpdate: false }); } /// @notice Execute after a hook is initialized on a channel function onInitialize( address channelManager, Channels.Channel memory channelData, uint256 channelId, Metadata.MetadataEntry[] calldata metadata ) external returns (bool success) { // Your custom initialization logic here // For example, set up initial state for the channel return true; } /// @notice Execute after a comment is processed function onCommentAdd( Comments.Comment calldata comment, Metadata.MetadataEntry[] calldata metadata, address caller, bytes32 commentId ) external payable returns (Metadata.MetadataEntry[] memory) { // Your custom logic here // For example, validate comments, add metadata, etc. Metadata.MetadataEntry[] memory hookMetadata = new Metadata.MetadataEntry[]( 1 ); hookMetadata[0] = Metadata.MetadataEntry({ key: "string custom_data", value: abi.encode("my custom data") }); return hookMetadata; } /// @notice Execute after a comment is deleted function onCommentDelete( Comments.Comment calldata comment, Metadata.MetadataEntry[] calldata metadata, Metadata.MetadataEntry[] calldata hookMetadata, address caller, bytes32 commentId ) external returns (bool success) { // Your custom deletion logic here // For example, clean up associated data, update counters, etc. return true; } /// @notice Execute after a comment is edited function onCommentEdit( Comments.Comment calldata comment, Metadata.MetadataEntry[] calldata metadata, address caller, bytes32 commentId ) external payable returns (Metadata.MetadataEntry[] memory) { // Your custom edit logic here // For example, validate edits, update metadata, etc. return new Metadata.MetadataEntry[](0); } /// @notice Execute after a channel is updated function onChannelUpdate( address channel, uint256 channelId, Channels.Channel calldata channelData, Metadata.MetadataEntry[] calldata metadata ) external returns (bool success) { // Your custom channel update logic here // For example, update hook state, validate changes, etc. return true; } /// @notice Execute to update hook data for an existing comment function onCommentHookDataUpdate( Comments.Comment calldata comment, Metadata.MetadataEntry[] calldata metadata, Metadata.MetadataEntry[] calldata hookMetadata, address caller, bytes32 commentId ) external returns (Metadata.MetadataEntryOp[] memory operations) { // Your custom hook data update logic here // For example, modify existing hook metadata, add new entries, etc. return new Metadata.MetadataEntryOp[](0); } } ``` **Note:** Metadata keys should be UTF-8 encoded strings in the format `"type key"` (e.g., `"string custom_data"`, `"uint256 count"`, `"bool verified"`). In Solidity, you can use string literals directly for `bytes32` fields - no explicit conversion is needed. #### Protocol Fees The protocol implements several fee mechanisms: 1. Channel Creation Fee (default: 0.02 ETH) * Paid when creating a new channel * Can be adjusted by protocol owner 2. Comment Creation Fee (default: 0) * Can be enabled for spam prevention * Set by protocol owner 3. Hook Transaction Fee (default: 2%) * Applied to ETH sent to hooks * Basis points (1 bp = 0.01%) * Maximum 100% #### Best Practices 1. **Security** * Always verify channel existence before posting comments * Implement proper access control in your hooks * Handle protocol fees correctly * Use reentrancy guards when necessary 2. **Gas Optimization** * Batch metadata operations when possible * Use efficient data structures for hook storage * Consider gas costs when implementing hook logic 3. **Error Handling** * Implement proper error handling for all protocol interactions * Handle failed transactions gracefully * Consider implementing retry mechanisms 4. **Testing** * Test your integration with the protocol thoroughly * Use the provided test hooks (NoopHook) for development * Test with different fee configurations #### Example Use Cases 1. **Token-Gated Comments** * Create a channel for a specific token * Implement a hook that verifies token ownership * Allow only token holders to comment 2. **Monetized Channels** * Create a channel with a custom hook * Implement payment logic in the hook * Share revenue with channel owners 3. **Moderated Comments** * Create a channel with moderation rules * Implement a hook that enforces moderation * Allow only approved addresses to comment #### Additional Resources * [Protocol API Reference](/protocol-reference/CommentManager) * [Hook Interface Reference](/protocol-reference/interfaces/IHook) * [Channel Manager Reference](/protocol-reference/ChannelManager) * [Example Hooks](https://github.com/ecp-eth/comments-monorepo/tree/main/packages/protocol/src/hooks) import IframeConfigurator from "../../components/IframeConfigurator"; import { ScrollToCommentButton } from "../../components/ScrollToCommentButton"; ## Integration Options ### Iframe Embedding The iframe embedding option allows you to integrate comments into any website without requiring React or any other JavaScript framework. This is ideal for static websites or platforms where you can't modify the JavaScript code. ### Demo #### Generate an iframe code for your website #### URI Guidelines When entering your page URI in the configurator, follow these guidelines: * Must be a valid URL following [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) * Include query parameters that affect page content * Arrange query parameters alphabetically * Ensure the URI uniquely identifies the content being commented on #### Dynamic Height Support If you want the iframe to automatically adjust its height based on content, add this JavaScript code: ```html ``` #### Security Best Practices * Always use HTTPS for the iframe source * Consider adding `sandbox` attribute if you need to restrict iframe capabilities * Verify the origin of resize messages as shown in the dynamic height example #### Notion Integration You can embed the comments iframe in a Notion page by using a Notion embed block: 1. In your Notion page, click the `+` button to add a new block 2. Search for "Embed" and select the embed block 3. Paste the iframe URL (the `src` attribute from the generated iframe code) 4. Click "Embed link" to add the comments to your page The comments will appear directly in your Notion page and update in real-time. #### Next Steps * Check out how to [retrieve comments and replies](/indexer/read-comments/) * Learn about [React Integration](/integration-options/react-integration) for React applications import { ScrollToCommentButton } from "../../components/ScrollToCommentButton"; ## Integration Options ### React Integration The Ethereum Comments Protocol provides comprehensive React integration options for both displaying and creating comments. This guide covers two main approaches: 1. **React Component Library** - For displaying and embedding comments 2. **React Editor** - For creating and editing comments with rich text capabilities ### React Component Library The React component library provides pre-built, customizable UI components for seamless integration into your React applications. This is the recommended approach for most web applications that need to display comments. #### Demo #### Installation :::code-group ```bash [npm] npm install @ecp.eth/sdk # install peer dependencies npm install react react-dom viem wagmi @tanstack/react-query @tanstack/query-core ``` ```bash [yarn] yarn add @ecp.eth/sdk # install peer dependencies yarn add react react-dom viem wagmi @tanstack/react-query @tanstack/query-core ``` ```bash [pnpm] pnpm add @ecp.eth/sdk # install peer dependencies pnpm add react react-dom viem wagmi @tanstack/react-query @tanstack/query-core ``` ::: #### Usage ```tsx twoslash /// // ---cut--- import React from "react"; import { CommentsEmbed } from "@ecp.eth/sdk/embed"; export function Comments() { return (

Comments

); } ``` * Please note that if you are rendering the `CommentsEmbed` with server-side rendering (SSR), you do not have access to the `window` object. Instead, you may want to construct the `uri` out of the `HttpRequest` object of your server-side framework. * Please also read the `targetUri` carefully in [Comment Data](/comment-data-props) for choosing an appropriate `uri`. ##### API reference * [`CommentsEmbed`](/sdk-reference/embed/functions/CommentsEmbed) * [`CommentsEmbedProps`](/sdk-reference/embed/type-aliases/CommentsEmbedProps) * [`EmbedConfigThemeSchema`](/sdk-reference/embed/variables/EmbedConfigThemeSchema) - detailed theme customization options ### React Editor The React Editor provides a powerful, customizable rich text editor built on top of [TipTap](https://tiptap.dev/) that supports mentions, file uploads, and seamless integration with the Ethereum Comments Protocol. This is the easiest way to add comment creation capabilities to your [React](https://react.dev/) or [Next.js](https://nextjs.org/) application. #### Features * **Rich Text Editing**: Built on TipTap with support for paragraphs, links, and formatting * **Mentions**: Support for ENS, Farcaster, and ERC-20 token mentions with autocomplete * **File Uploads**: Drag-and-drop file uploads with support for images, videos, and documents * **Reference Extraction**: Extract structured references from editor content * **Content Parsing**: Parse plain text with references back into rich content * **Customizable Components**: Fully customizable media components and themes * **TypeScript Support**: Full TypeScript support with comprehensive type definitions #### Installation :::code-group ```bash [npm] npm install @ecp.eth/react-editor # install peer dependencies npm install @tanstack/react-query pinata react viem ``` ```bash [yarn] yarn add @ecp.eth/react-editor # install peer dependencies yarn add @tanstack/react-query pinata react viem ``` ```bash [pnpm] pnpm add @ecp.eth/react-editor # install peer dependencies pnpm add @tanstack/react-query pinata react viem ``` ::: #### Quick Start ```tsx twoslash // @moduleResolution: bundler // @errors: 2554 import React from "react"; import { Editor } from "@ecp.eth/react-editor/editor"; import { useIndexerSuggestions, usePinataUploadFiles, } from "@ecp.eth/react-editor/hooks"; function CommentEditor() { const suggestions = useIndexerSuggestions(); const uploads = usePinataUploadFiles({ pinataGatewayUrl: "https://api.pinata.cloud", generateUploadUrl: async (filename) => { // Implement your own upload URL generation logic return `https://api.pinata.cloud/files/${filename}`; }, }); return ( console.log("Editor lost focus")} /> ); } ``` #### Core Components ##### Editor The main editor component with full rich text editing capabilities. ```tsx twoslash // @moduleResolution: bundler // @errors: 2686 2304 import React from "react"; import { Editor, type EditorRef } from "@ecp.eth/react-editor/editor"; import type { EditorSuggestionsService, UploadFilesService, } from "@ecp.eth/react-editor/types"; import { useRef } from "react"; declare const suggestionsService: EditorSuggestionsService; declare const uploadsService: UploadFilesService; function CommentEditor() { const editorRef = useRef(null); return ( console.log("Editor lost focus")} onEscapePress={() => console.log("Escape pressed")} /> ); } ``` #### Hooks ##### useIndexerSuggestions Provides suggestions for ENS, Farcaster, and ERC-20 mentions using the ECP Indexer. ```tsx twoslash // @moduleResolution: bundler import { useIndexerSuggestions } from "@ecp.eth/react-editor/hooks"; const suggestions = useIndexerSuggestions(); ``` ##### usePinataUploadFiles Provides file upload functionality using Pinata IPFS service. ```tsx twoslash // @moduleResolution: bundler import { usePinataUploadFiles } from "@ecp.eth/react-editor/hooks"; const uploads = usePinataUploadFiles({ pinataGatewayUrl: "some.pinata.gateway.url", generateUploadUrl: async (filename) => { // Implement your own upload URL generation logic return `https://api.pinata.cloud/files/${filename}`; }, }); ``` ##### useHandleDefaultEditorValue Handles setting default editor values with content and references. ```tsx twoslash // @moduleResolution: bundler import { useHandleDefaultEditorValue } from "@ecp.eth/react-editor/hooks"; const content = useHandleDefaultEditorValue("some content", []); ``` #### Utilities ##### extractReferences Extract structured references from editor content. ```tsx twoslash // @moduleResolution: bundler // @errors: 2304 import type { EditorRef } from "@ecp.eth/react-editor/editor"; import { extractReferences } from "@ecp.eth/react-editor/extract-references"; declare const editorRef: React.RefObject; const editorContent = editorRef.current!.editor!.getJSON(); const references = extractReferences(editorContent); ``` ##### parse Parse plain text with references back into rich content. ```tsx twoslash // @moduleResolution: bundler // @errors: 2304 import type { IndexerAPICommentReferencesSchemaType } from "@ecp.eth/sdk/indexer/schemas"; import { parse } from "@ecp.eth/react-editor/parser"; declare const plainText: string; declare const references: IndexerAPICommentReferencesSchemaType; const richContent = parse(plainText, references); ``` #### Configuration ##### File Upload Limits ```tsx twoslash // Default limits const ALLOWED_UPLOAD_MIME_TYPES = [ "image/png", "image/jpeg", "image/gif", "image/webp", "video/mp4", "video/webm", "video/avi", "video/quicktime", ]; const MAX_UPLOAD_FILE_SIZE = 1024 * 1024 * 10; // 10MB ``` ##### Custom Media Components You can customize how media files are displayed: ```tsx twoslash // @moduleResolution: bundler // @errors: 2307 2739 2686 import React from "react"; import { Editor } from "@ecp.eth/react-editor/editor"; import type { UploadTrackerImageComponent, UploadTrackerVideoComponent, UploadTrackerFileComponent, UploadFilesService, EditorSuggestionsService, } from "@ecp.eth/react-editor/types"; declare const CustomImageComponent: UploadTrackerImageComponent; declare const CustomVideoComponent: UploadTrackerVideoComponent; declare const CustomFileComponent: UploadTrackerFileComponent; declare const uploadsService: UploadFilesService; declare const suggestionsService: EditorSuggestionsService; ; ``` #### Advanced Usage ##### Custom Suggestions Service ```tsx twoslash // @moduleResolution: bundler import type { EditorSuggestionsService } from "@ecp.eth/react-editor/types"; const customSuggestions: EditorSuggestionsService = { search: async (query: string) => { // Implement your own search logic return { results: [ { type: "ens", address: "0x...", name: "example.eth", value: "0x...", avatarUrl: null, url: "https://app.ens.domains/example.eth", }, { type: "farcaster", fid: 0, username: "example", address: "0x...", fname: "example", value: "0x...", avatarUrl: null, url: "https://app.farcaster.xyz/example", }, ], }; }, }; ``` ##### Custom Upload Service ```tsx twoslash // @moduleResolution: bundler // @errors: 2304 import type { UploadFilesService, UploadTrackerFileToUpload, } from "@ecp.eth/react-editor/types"; declare const uploadToYourService: ( file: UploadTrackerFileToUpload, ) => Promise; const customUploads: UploadFilesService = { allowedMimeTypes: ["image/png", "image/jpeg"], maxFileSize: 5 * 1024 * 1024, // 5MB uploadFile: async (file, callbacks) => { // Implement your own upload logic const response = await uploadToYourService(file); callbacks?.onSuccess?.( { id: file.id, name: file.name, url: response, mimeType: file.mimeType, }, response, ); return response; }, uploadFiles: async (files, callbacks) => { // Implement batch upload logic return Promise.all( files.map((file) => customUploads.uploadFile(file, callbacks)), ); }, }; ``` ### Complete Example Here's how you might combine both the Component Library and Editor in a single application: ```tsx twoslash // @moduleResolution: bundler // @errors: 2554 2686 2304 import React, { useState } from "react"; import { CommentsEmbed } from "@ecp.eth/sdk/embed"; import { Editor } from "@ecp.eth/react-editor/editor"; import { useIndexerSuggestions, usePinataUploadFiles, } from "@ecp.eth/react-editor/hooks"; function CommentsSection() { const [showEditor, setShowEditor] = useState(false); const suggestions = useIndexerSuggestions(); const uploads = usePinataUploadFiles({ pinataGatewayUrl: "https://api.pinata.cloud", generateUploadUrl: async (filename) => { return `https://api.pinata.cloud/files/${filename}`; }, }); return (

Comments

{/* Display existing comments */} {/* Add new comment button */} {/* Comment editor */} {showEditor && (
setShowEditor(false)} />
)}
); } ``` ### Next Steps * Check out how to [retrieve comments and replies](/indexer/read-comments/) * Learn about [contract interactions](/integration-options/contract-interactions) for direct blockchain integration * Explore the [TypeScript SDK](/integration-options/typescript-sdk) for programmatic access ## Integration Options ### Typescript SDK The `@ecp.eth/sdk` provides a comprehensive set of tools for interacting with the ECP protocol, including: * Creating and managing comments * Interacting with the smart contract * Fetching comments and replies from the indexer * Handling comment data and signatures #### Installation :::code-group ```bash [npm] npm install @ecp.eth/sdk # install required peer dependencies npm install viem wagmi @tanstack/react-query @tanstack/query-core ``` ```bash [yarn] yarn add @ecp.eth/sdk # install required peer dependencies yarn add viem wagmi @tanstack/react-query @tanstack/query-core ``` ```bash [pnpm] pnpm add @ecp.eth/sdk # install required peer dependencies pnpm add viem wagmi @tanstack/react-query @tanstack/query-core ``` ::: #### Core Concepts ##### Comment Data The SDK provides utilities for creating and managing comment data. Each comment requires: * Content * Author address * App address * Either parent ID for replies or target URI for top-level comments ##### Contract Interaction The SDK supports multiple comment posting flows, with the simplest being the "author pays gas" flow where: 1. The author posts and pays for gas 2. The app server authorizes the post by signing the comment data For more details on different posting flows, see [Post Comment Flows](/post-comment-flows). #### Examples ##### Creating and Posting Comments Here's how to create and post a comment using the SDK: ```ts import { createCommentData } from "@ecp.eth/sdk/comments"; import { usePostComment } from "@ecp.eth/sdk/comments/react"; import { waitForTransactionReceipt } from "wagmi"; import { parseEther } from "viem"; const comment = { content: "Hello, world!", author: "0x...", // author's address targetUri: "https://example.com", }; // 1. Obtain the app signature from your backend // You can use the Signer API Service to generate the signature // @see https://github.com/ecp-eth/comments-monorepo/blob/main/apps/signer/README.md // // Or see the next section for server-side signing const { signature: appSignature, commentData } = await fetch("/api/sign", { method: "POST", body: JSON.stringify({ comment, }), }).then((res) => res.json()); // 2. Post the comment (using wagmi) // You can use the `usePostComment` hook to post the comment const { mutateAsync: postCommentAsync } = usePostComment(); const { txHash } = await postCommentAsync({ variables: { comment: commentData, appSignature, fee: parseEther("0.001"), // optional, fee to pay for the comment }, }); await waitForTransactionReceipt({ hash: txHash, }); ``` ##### Server-Side Signing For security, the app signature should be generated on the server: ```ts import { createCommentData, createCommentTypedData, } from "@ecp.eth/sdk/comments"; import { SUPPORTED_CHAINS } from "@ecp.eth/sdk"; import { privateKeyToAccount } from "viem/accounts"; import { baseSepolia } from "viem/chains"; import { hashTypedData } from "viem"; const chainConfig = SUPPORTED_CHAINS[baseSepolia.id]; const app = privateKeyToAccount(process.env.APP_SIGNER_PRIVATE_KEY); const content = ""; // content obtained from the client const author = ""; // author's address obtained from the client const targetUri = ""; // target URI obtained from the client // 1. Create comment data const commentData = createCommentData({ content, targetUri, author, app: app.address, }); // 2. Create typed data for signing (EIP-712) const typedCommentData = createCommentTypedData({ commentData, chainId: chainConfig.chain.id, }); // Sign using app's private key const signature = await app.signTypedData(typedCommentData); const hash = hashTypedData(typedCommentData); return { hash, signature, commentData, }; ``` ##### Fetching Comments ```ts import { fetchComments } from "@ecp.eth/sdk/indexer"; const comments = await fetchComments({ apiUrl: "https://api.ethcomments.xyz", targetUri: "https://example.com", }); console.log("Comments:", comments); ``` The response includes a list of comments and pagination information, see [`IndexerAPIListCommentsSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPIListCommentsSchemaType). ##### Fetching Replies ```ts import { fetchCommentReplies } from "@ecp.eth/sdk/indexer"; const replies = await fetchCommentReplies({ apiUrl: "https://api.ethcomments.xyz", commentId: "0xdce24de208a5e15b6b9b7e7c1ccdc5c08d8a7d8ab20c37c60e1d96a2aa1f9941", }); ``` #### Best Practices 1. **Security** * Never expose app signer's private key on the client side * Store private keys in environment variables (without `NEXT_PUBLIC_` prefix for Next.js) * Implement proper error handling 2. **Performance** * Monitor gas costs and adjust gas limits accordingly * Implement retry mechanisms for failed transactions * Consider implementing application-level rate limiting 3. **User Experience** * Consider implementing anti-spam measures * Provide clear feedback for transaction status * Handle network errors gracefully #### API Reference ##### Core Functions * [`createCommentData`](/sdk-reference/comments/functions/createCommentData) * [`createCommentTypedData`](/sdk-reference/comments/functions/createCommentTypedData) * [`postComment`](/sdk-reference/comments/variables/postComment) * [`postCommentWithSig`](/sdk-reference/comments/variables/postCommentWithSig) ##### Indexer Functions * [`fetchComments`](/sdk-reference/indexer/functions/fetchComments) * [`fetchCommentReplies`](/sdk-reference/indexer/functions/fetchCommentReplies) ##### Types * [`PostCommentParams`](/sdk-reference/comments/type-aliases/PostCommentParams) * [`FetchCommentsOptions`](/sdk-reference/indexer/type-aliases/FetchCommentsOptions) * [`FetchCommentRepliesOptions`](/sdk-reference/indexer/type-aliases/FetchCommentRepliesOptions) * [`IndexerAPIListCommentsSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPIListCommentsSchemaType) #### Additional Resources * [Protocol API Reference](/protocol-reference/CommentManager) for contract functions * [Demo App Source Code](https://github.com/ecp-eth/comments-monorepo/tree/main/apps/demo) for complete implementation examples * [Post Comment Flows](/post-comment-flows) for different posting strategies * [Test with Anvil](/test-with-anvil) for local development setup ##### @ecp.eth/protocol *** ## `ChannelManager` This contract allows creation and management of channels with configurable hooks, where each channel is an NFT Implements channel management with the following security features: ### Functions #### constructor(address initialOwner) (public) Constructor sets the contract owner and initializes ERC721 #### getChannel(uint256 channelId) → [struct Channels.Channel](/protocol-reference/types/Channels#channel) (external) Get a channel by its ID #### \_getChannelId(address creator, string name, string description, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata) → uint256 (internal) Calculates a unique hash for a channel #### \_channelExists(uint256 channelId) → bool (internal) Internal function to check if a channel exists #### \_hashMetadataArray([struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata) → bytes32 (internal) Internal function to hash metadata array for deterministic channel ID generation #### createChannel(string name, string description, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata, address hook) → uint256 channelId (external) Creates a new channel #### updateChannel(uint256 channelId, string name, string description, [struct Metadata.MetadataEntryOp\[\]](/protocol-reference/types/Metadata#metadataentryop) metadataOperations) (external) Updates an existing channel's configuration #### setHook(uint256 channelId, address hook) (external) Sets the hook for a channel #### \_setHook(uint256 channelId, address hook) (internal) Internal function to set the hook for a channel #### channelExists(uint256 channelId) → bool (external) Checks if a channel exists #### setBaseURI(string baseURI\_) (external) Sets the base URI for NFT metadata #### \_baseURI() → string (internal) Returns the base URI for token metadata Internal function that overrides ERC721's \_baseURI() #### \_createChannelMetadata(uint256 channelId, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata) (internal) Internal function to create channel metadata #### \_setChannelMetadata(uint256 channelId, [struct Metadata.MetadataEntryOp\[\]](/protocol-reference/types/Metadata#metadataentryop) operations) (internal) Sets metadata for a channel #### \_deleteChannelMetadataKey(uint256 channelId, bytes32 keyToDelete) (internal) Internal function to delete a specific channel metadata key #### \_channelMetadataKeyExists(uint256 channelId, bytes32 targetKey) → bool (internal) Internal function to check if a channel metadata key exists #### getChannelMetadata(uint256 channelId) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) (public) Get all metadata for a channel #### getChannelMetadataValue(uint256 channelId, bytes32 key) → bytes (external) Get metadata value for a specific key #### getChannelMetadataKeys(uint256 channelId) → bytes32\[] (external) Get all metadata keys for a channel ##### @ecp.eth/protocol *** ## `CommentManager` This contract allows users to post and manage comments with optional app-signer approval and channel-specific hooks Implements EIP-712 for typed structured data hashing and signing ### Modifiers #### `channelExists(uint256 channelId)` #### `commentDoesNotExist(bytes32 commentId)` #### `commentExists(bytes32 commentId)` #### `notStale(uint256 deadline)` #### `onlyReplyInSameChannel(bytes32 parentId, uint256 channelId)` #### `onlyParentIdOrTargetUri(bytes32 parentId, string targetUri)` #### `noEditingReactions(uint8 commentType)` #### `validateNonce(address author, address app, uint256 nonce)` #### `onlyAuthor(address author)` #### `reactionHasTargetOrParent(uint8 commentType, bytes32 parentId, string targetUri)` ### Functions #### constructor(address initialOwner) (public) Constructor initializes the contract with the deployer as owner and channel manager Sets up EIP-712 domain separator #### postComment([struct Comments.CreateComment](/protocol-reference/types/Comments#createcomment) commentData, bytes appSignature) → bytes32 (external) Posts a comment directly from the author's address #### \_postComment([struct Comments.CreateComment](/protocol-reference/types/Comments#createcomment) commentData, bytes appSignature, uint256 value) → bytes32 (internal) Internal function to handle comment posting with explicit value #### postCommentWithSig([struct Comments.CreateComment](/protocol-reference/types/Comments#createcomment) commentData, bytes authorSignature, bytes appSignature) → bytes32 (external) Posts a comment with both author and app signer signatures #### \_postCommentWithSig([struct Comments.CreateComment](/protocol-reference/types/Comments#createcomment) commentData, bytes authorSignature, bytes appSignature, uint256 value) → bytes32 (internal) Internal function to handle comment posting with signature and explicit value This function is used to post a comment with a signature and explicit value #### \_createComment(bytes32 commentId, [struct Comments.CreateComment](/protocol-reference/types/Comments#createcomment) commentData, [enum Comments.AuthorAuthMethod](/protocol-reference/types/Comments#authorauthmethod) authMethod, uint256 value) (internal) #### editComment(bytes32 commentId, [struct Comments.EditComment](/protocol-reference/types/Comments#editcomment) editData, bytes appSignature) (external) Edits a comment when called by the author directly #### \_editCommentDirect(bytes32 commentId, [struct Comments.EditComment](/protocol-reference/types/Comments#editcomment) editData, bytes appSignature, uint256 value) (internal) Internal function to handle comment editing with explicit value This function is used to edit a comment with an explicit value #### editCommentWithSig(bytes32 commentId, [struct Comments.EditComment](/protocol-reference/types/Comments#editcomment) editData, bytes authorSignature, bytes appSignature) (external) Edits a comment with both author and app signer signatures #### \_editCommentWithSig(bytes32 commentId, [struct Comments.EditComment](/protocol-reference/types/Comments#editcomment) editData, bytes authorSignature, bytes appSignature, uint256 value) (internal) Internal function to handle comment editing with signature and explicit value This function is used to edit a comment with a signature and explicit value #### \_editComment(bytes32 commentId, [struct Comments.EditComment](/protocol-reference/types/Comments#editcomment) editData, [enum Comments.AuthorAuthMethod](/protocol-reference/types/Comments#authorauthmethod) authMethod, uint256 value) (internal) Internal function to handle comment editing logic #### deleteComment(bytes32 commentId) (public) Deletes a comment when called by the author directly #### \_deleteComment(bytes32 commentId, address author) (internal) Internal function to handle comment deletion logic #### deleteCommentWithSig(bytes32 commentId, address app, uint256 deadline, bytes authorSignature, bytes appSignature) (external) Deletes a comment with author signature verification #### \_deleteCommentWithSig(bytes32 commentId, address app, uint256 deadline, bytes authorSignature, bytes appSignature) (internal) Internal function to handle comment deletion with signature logic #### addApproval(address app, uint256 expiry) (external) Approves an app signer when called directly by the author #### addApprovalWithSig(address author, address app, uint256 expiry, uint256 nonce, uint256 deadline, bytes authorSignature) (external) Approves an app signer with signature verification #### revokeApproval(address app) (external) Removes an app signer approval when called directly by the author #### removeApprovalWithSig(address author, address app, uint256 nonce, uint256 deadline, bytes authorSignature) (external) Removes an app signer approval with signature verification #### updateCommentHookData(bytes32 commentId) (external) Updates hook metadata for an existing comment using merge mode (gas-efficient). Anyone can call this function. Only updates provided metadata fields without clearing existing ones #### getAddApprovalHash(address author, address app, uint256 expiry, uint256 nonce, uint256 deadline) → bytes32 (public) Calculates the EIP-712 hash for a permit #### getRemoveApprovalHash(address author, address app, uint256 nonce, uint256 deadline) → bytes32 (public) Calculates the EIP-712 hash for removing an approval #### getDeleteCommentHash(bytes32 commentId, address author, address app, uint256 deadline) → bytes32 (public) Calculates the EIP-712 hash for deleting a comment #### getEditCommentHash(bytes32 commentId, address author, [struct Comments.EditComment](/protocol-reference/types/Comments#editcomment) editData) → bytes32 (public) Calculates the EIP-712 hash for editing a comment #### getCommentId([struct Comments.CreateComment](/protocol-reference/types/Comments#createcomment) commentData) → bytes32 (public) Calculates the EIP-712 hash for a comment #### updateChannelContract(address \_channelContract) (external) Updates the channel manager contract address (only owner) #### getComment(bytes32 commentId) → [struct Comments.Comment](/protocol-reference/types/Comments#comment) (external) Get a comment by its ID #### getCommentMetadata(bytes32 commentId) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) (external) Get metadata for a comment #### getCommentHookMetadata(bytes32 commentId) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) (external) Get hook metadata for a comment #### getCommentMetadataValue(bytes32 commentId, bytes32 key) → bytes (external) Get a specific metadata value for a comment #### getCommentHookMetadataValue(bytes32 commentId, bytes32 key) → bytes (external) Get a specific hook metadata value for a comment #### getCommentMetadataKeys(bytes32 commentId) → bytes32\[] (external) Get all metadata keys for a comment #### getCommentHookMetadataKeys(bytes32 commentId) → bytes32\[] (external) Get all hook metadata keys for a comment #### isApproved(address author, address app) → bool (external) Get the approval status for an author and app #### getApprovalExpiry(address author, address app) → uint256 (external) Get the approval expiry timestamp for an author and app #### getNonce(address author, address app) → uint256 (external) Get the nonce for an author and app #### isDeleted(bytes32 commentId) → bool (external) Get the deleted status for a comment #### batchOperations([struct Comments.BatchOperation\[\]](/protocol-reference/types/Comments#batchoperation) operations) → bytes\[] results (external) Executes multiple operations (post, edit, delete) in a single transaction preserving order #### \_executeBatchOperation([struct Comments.BatchOperation](/protocol-reference/types/Comments#batchoperation) operation, uint256 operationIndex) → bytes result (internal) Internal function to execute a single batch operation #### \_executePostCommentBatch([struct Comments.BatchOperation](/protocol-reference/types/Comments#batchoperation) operation) → bytes (internal) #### \_executePostCommentWithSigBatch([struct Comments.BatchOperation](/protocol-reference/types/Comments#batchoperation) operation) → bytes (internal) #### \_executeEditCommentBatch([struct Comments.BatchOperation](/protocol-reference/types/Comments#batchoperation) operation) → bytes (internal) #### \_executeEditCommentWithSigBatch([struct Comments.BatchOperation](/protocol-reference/types/Comments#batchoperation) operation) → bytes (internal) #### \_executeDeleteCommentBatch([struct Comments.BatchOperation](/protocol-reference/types/Comments#batchoperation) operation) → bytes (internal) #### \_executeDeleteCommentWithSigBatch([struct Comments.BatchOperation](/protocol-reference/types/Comments#batchoperation) operation) → bytes (internal) ##### @ecp.eth/protocol *** ## `ProtocolFees` This contract handles all fee-related functionality including channel creation, hook registration, and transaction fees Implements fee management with the following features: 1. Fee Configuration: * Channel creation fee * Hook registration fee * Hook transaction fee percentage 2. Fee Collection: * Accumulates fees from various operations * Allows withdrawal of accumulated fees 3. Fee Updates: * Only owner can update fee amounts * Fee percentage capped at 100% ### Functions #### constructor(address initialOwner) (internal) Constructor sets the initial owner #### setChannelCreationFee(uint96 fee) (external) Sets the fee for creating a new channel #### setCommentCreationFee(uint96 fee) (external) Sets the fee for creating a new comment #### setHookTransactionFee(uint16 feeBasisPoints) (external) Sets the fee percentage taken from hook transactions #### getChannelCreationFee() → uint96 (external) Gets the current channel creation fee #### getCommentCreationFee() → uint96 (external) Gets the current comment creation fee #### getHookTransactionFee() → uint16 (external) Gets the current hook transaction fee percentage #### withdrawFees(address recipient) → uint256 amount (external) Withdraws accumulated fees to a specified address #### \_collectChannelCreationFee() → uint96 (internal) Collects the protocol fee for channel creation #### collectCommentCreationFee() → uint96 (external) Collects the protocol fee for comment creation #### \_collectFeeWithRefund(uint96 requiredFee) → uint96 (internal) Internal function to guard against insufficient fee with refund of excess #### deductProtocolHookTransactionFee(uint256 value) → uint256 hookValue (external) Calculates the hook transaction fee by deducting the protocol fee #### calculateMsgValueWithHookFee(uint256 postFeeAmountForwardedToHook) → uint256 (external) Calculates the required input value to achieve a desired output after protocol fee deduction #### receive() (external) Allows the contract to receive ETH ## Protocol Reference ### Core Contracts * [CommentManager](/protocol-reference/CommentManager) - Comment posting and management with signature verification * [ChannelManager](/protocol-reference/ChannelManager) - NFT-based channel creation and management * [ProtocolFees](/protocol-reference/ProtocolFees) - Fee management for protocol operations ### Hooks * [BaseHook](/protocol-reference/hooks/BaseHook/) - Abstract base contract for hook implementations * [NoopHook](/protocol-reference/hooks/NoopHook/) - No-operation hook implementation for testing * [TokenCreatorHook](/protocol-reference/hooks/TokenCreatorHook/) - Hook that restricts top-level comments to predefined token creators ### Interfaces #### Core * [IChannelManager](/protocol-reference/interfaces/IChannelManager/) - Channel management interface * [ICommentManager](/protocol-reference/interfaces/ICommentManager/) - Comment management interface * [IProtocolFees](/protocol-reference/interfaces/IProtocolFees/) - Protocol fee management interface * [IHook](/protocol-reference/interfaces/IHook/) - Base hook interface #### Hooks * [IHook](/protocol-reference/interfaces/IHook/) - Base hook interface ### Libraries * [MetadataOps](/protocol-reference/libraries/MetadataOps/) - Metadata operations utilities * [CommentSigning](/protocol-reference/libraries/CommentSigning/) - Comment signature verification utilities * [CommentOps](/protocol-reference/libraries/CommentOps/) - Comment operation utilities * [Batching](/protocol-reference/libraries/Batching/) - Batching operation utilities * [Approvals](/protocol-reference/libraries/Approvals/) - Approval management utilities ### Types * [Channels](/protocol-reference/types/Channels/) - Channel data structures * [Comments](/protocol-reference/types/Comments/) - Comment data structures * [Hooks](/protocol-reference/types/Hooks/) - Hook data structures * [Metadata](/protocol-reference/types/Metadata/) - Metadata data structures {/* !!DO NOT EDIT!! Automatically generated doc. run `pnpm run ref:gen:react-editor` to update !!DO NOT EDIT!! */} ## `@ecp.eth/react-editor` A React-based rich text editor for the Ethereum Comments Protocol. The ECP React Editor provides a powerful, customizable rich text editor built on top of TipTap that supports mentions, file uploads, and seamless integration with the Ethereum Comments Protocol. For comprehensive documentation and guides, visit our [documentation website](https://docs.ethcomments.xyz). ### Installation ```bash npm install @ecp.eth/react-editor # or yarn add @ecp.eth/react-editor # or pnpm add @ecp.eth/react-editor ``` ### Features * **Rich Text Editing**: Built on TipTap with support for paragraphs, links, and formatting * **Mentions**: Support for ENS, Farcaster, and ERC-20 token mentions with autocomplete * **File Uploads**: Drag-and-drop file uploads with support for images, videos, and documents * **Reference Extraction**: Extract structured references from editor content * **Content Parsing**: Parse plain text with references back into rich content * **Customizable Components**: Fully customizable media components and themes * **TypeScript Support**: Full TypeScript support with comprehensive type definitions ### Quick Start ```tsx import { Editor } from "@ecp.eth/react-editor"; import { useIndexerSuggestions } from "@ecp.eth/react-editor/hooks"; import { usePinataUploadFiles } from "@ecp.eth/react-editor/hooks"; function CommentEditor() { const suggestions = useIndexerSuggestions(); const uploads = usePinataUploadFiles(); return ( console.log("Editor lost focus")} /> ); } ``` ### Core Components #### Editor The main editor component with full rich text editing capabilities. ```tsx import { Editor, type EditorRef } from "@ecp.eth/react-editor"; const editorRef = useRef(null); console.log("Editor lost focus")} onEscapePress={() => console.log("Escape pressed")} />; ``` #### EditorRef Methods The editor ref provides several useful methods: ```tsx // Focus the editor editorRef.current?.focus(); // Clear editor content editorRef.current?.clear(); // Add files programmatically editorRef.current?.addFiles([file1, file2]); // Get uploaded files const uploadedFiles = editorRef.current?.getUploadedFiles(); // Get files pending upload const pendingFiles = editorRef.current?.getFilesForUpload(); // Mark file as uploaded editorRef.current?.setFileAsUploaded(uploadedFile); // Mark file upload as failed editorRef.current?.setFileUploadAsFailed(fileId); ``` ### Hooks #### useIndexerSuggestions Provides suggestions for ENS, Farcaster, and ERC-20 mentions using the ECP Indexer. ```tsx import { useIndexerSuggestions } from "@ecp.eth/react-editor/hooks"; const suggestions = useIndexerSuggestions({ indexerUrl: "https://indexer.ethcomments.xyz", }); ``` #### usePinataUploadFiles Provides file upload functionality using Pinata IPFS service. ```tsx import { usePinataUploadFiles } from "@ecp.eth/react-editor/hooks"; const uploads = usePinataUploadFiles({ pinataApiKey: "your-pinata-api-key", pinataSecretApiKey: "your-pinata-secret-key", }); ``` #### useHandleDefaultEditorValue Handles setting default editor values with content and references. ```tsx import { useHandleDefaultEditorValue } from "@ecp.eth/react-editor/hooks"; const content = useHandleDefaultEditorValue( defaultValue?.content, defaultValue?.references, ); ``` ### Utilities #### extractReferences Extract structured references from editor content. ```tsx import { extractReferences } from "@ecp.eth/react-editor/extract-references"; const editorContent = editorRef.current?.editor?.getJSON(); const references = extractReferences(editorContent); ``` #### parse Parse plain text with references back into rich content. ```tsx import { parse } from "@ecp.eth/react-editor/parser"; const richContent = parse(plainText, references); ``` ### Configuration #### File Upload Limits ```tsx // Default limits const ALLOWED_UPLOAD_MIME_TYPES = [ "image/png", "image/jpeg", "image/gif", "image/webp", "video/mp4", "video/webm", "video/avi", "video/quicktime", ]; const MAX_UPLOAD_FILE_SIZE = 1024 * 1024 * 10; // 10MB ``` #### Custom Media Components You can customize how media files are displayed: ```tsx import { CustomImageComponent } from "./CustomImageComponent"; import { CustomVideoComponent } from "./CustomVideoComponent"; import { CustomFileComponent } from "./CustomFileComponent"; ; ``` ### Types The package exports comprehensive TypeScript types: ```tsx import type { EditorRef, EditorProps, EditorSuggestionsService, UploadFilesService, MentionItem, LinkAttributes, MentionsExtensionTheme, } from "@ecp.eth/react-editor/types"; ``` ### Advanced Usage #### Custom Suggestions Service ```tsx const customSuggestions: EditorSuggestionsService = { search: async (query: string) => { // Implement your own search logic return [ { type: "ens", address: "0x...", name: "example.eth" }, { type: "farcaster", address: "0x...", fname: "example" }, ]; }, }; ``` #### Custom Upload Service ```tsx const customUploads: UploadFilesService = { allowedMimeTypes: ["image/png", "image/jpeg"], maxFileSize: 5 * 1024 * 1024, // 5MB uploadFile: async (file, callbacks) => { // Implement your own upload logic const response = await uploadToYourService(file); callbacks?.onSuccess?.(uploadedFile, response); return response; }, uploadFiles: async (files, callbacks) => { // Implement batch upload logic return Promise.all( files.map((file) => customUploads.uploadFile(file, callbacks)), ); }, }; ``` ### Peer Dependencies This package requires the following peer dependencies: * `@tanstack/react-query` >= 5.0.0 * `pinata` ^2.4.3 * `react` 18 || 19 * `viem` ^2.29.2 ### License MIT {/* !!DO NOT EDIT!! Automatically generated doc. run `pnpm run ref:gen:sdk` to update !!DO NOT EDIT!! */} **@ecp.eth/sdk** *** ## `@ecp.eth/sdk` The Ethereum Comments Protocol SDK. The ECP SDK provides a simple way to integrate decentralized comments into your Ethereum-based applications. For comprehensive documentation and guides, visit our [documentation website](https://docs.ethcomments.xyz). ### Installation ```bash npm install @ecp.eth/sdk # or yarn add @ecp.eth/sdk # or pnpm add @ecp.eth/sdk ``` ### Modules | Module | Description | | ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | | [channel-manager](/sdk-reference/channel-manager/index.mdx) | Ethereum Comments Protocol SDK Channel Manager Core functionality for managing comment channels | | [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) | Ethereum Comments Protocol SDK Channel Manager for React React hooks for managing comment channels | | [channel-manager/types](/sdk-reference/channel-manager/types/index.mdx) | - | | [comments](/sdk-reference/comments/index.mdx) | Ethereum Comments Protocol SDK Comments Core functionality for managing comments and approvals | | [comments/react](/sdk-reference/comments/react/index.mdx) | Ethereum Comments Protocol SDK Comments for React React hooks and components for managing comments and approvals | | [core](/sdk-reference/core/index.mdx) | Ethereum Comments Protocol SDK Core Core functionality for the Ethereum Comments Protocol | | [defaultExports](/sdk-reference/defaultExports/index.mdx) | Ethereum Comments Protocol SDK default exports | | [embed](/sdk-reference/embed/index.mdx) | Ethereum Comments Protocol SDK Embed Functionality for embedding comments in web applications | | [indexer](/sdk-reference/indexer/index.mdx) | Ethereum Comments Protocol SDK Indexer Functionality for indexing and querying comments data | {/* !!DO NOT EDIT!! Automatically generated doc. run `pnpm run ref:gen:demo:blog` to update !!DO NOT EDIT!! */} ## Boilerplate Blog with \ [Demo](https://demo-blog.ethcomments.xyz/blog/spaces-vs-tabs) | [Source code](https://github.com/ecp-eth/comments-monorepo/tree/main/apps/embed-demo-blog) The example showcases how to integrate the Ethereum Comments Protocol into a Next.js blog using the `` react component: * Embed comments on blog posts * Display comments by a specific author * Customize the comment embed appearance * Handle dark/light theme modes ### Installation ```bash pnpm install ``` ### Development 1. Copy `.env.example` to `.env.local`: ```bash cp .env.example .env.local ``` 2. Configure environment variables in `.env.local`: * `NEXT_PUBLIC_ECP_ETH_EMBED_URL` (Optional): URL to ecp.eth embed renderer. Defaults to locally hosted embed server. * `NEXT_PUBLIC_URL`: URL of the embed demo blog deployment, used to construct target URI for embedded comments. 3. Start the development server: ```bash pnpm dev ``` The application will be available at [http://localhost:3003](http://localhost:3003). ### Building for Production ```bash pnpm build ``` ### Starting Production Server ```bash pnpm start ``` {/* !!DO NOT EDIT!! Automatically generated doc. run `pnpm run ref:gen:demo:demo` to update !!DO NOT EDIT!! */} ## Next.js Boilerplate App [Demo](https://demo.ethcomments.xyz/) | [Source code](https://github.com/ecp-eth/comments-monorepo/tree/main/apps/demo) This is a [Next.js](https://nextjs.org) project that demonstrates core functionality of the Ethereum Comments Protocol: * Custom commenting UI (React) * Core protocol implementation * Comment creation and retrieval * Wallet integration * App signer * Gasless transactions * Interaction with indexer API endpoints {/* !!DO NOT EDIT!! Automatically generated doc. run `pnpm run ref:gen:demo:react-native` to update !!DO NOT EDIT!! */} ## Boilerplate React-native (Expo) Demo App [Source code](https://github.com/ecp-eth/comments-monorepo/tree/main/apps/demo-rn-expo) This is React Native (Expo) demo app for the [Ethereum Comments Protocol](https://docs.ethcomments.xyz). It is very similar to the [react demo app](https://github.com/ecp-eth/comments-monorepo/tree/main/apps/demo), but built with a React Native tech stack. * Custom commenting UI * Wallet integration via Reown AppKit * Post and reply contract interactions via Reown AppKit * Infinite scroll using `FlatList` ### Running the app #### Prerequisites 1. Start your local Anvil chain and deploy the protocols to your local chain. Folllow [the instruction here](https://docs.ethcomments.xyz/test-with-anvil). 2. Configure your wallet app in your phone to use the local chain. In MetaMask, you need to make sure the RPC URL of local chain is accessible from your phone in order to add the custom RPC network. 3. Follow the instruction in readme to start the [indexer](https://github.com/ecp-eth/comments-monorepo/tree/main/apps/indexer) and the [react demo app](https://github.com/ecp-eth/comments-monorepo/tree/main/apps/demo), as this demo uses the signing API from the react demo app. You may want to test the app on your phone because it requires wallet app to post comments: 1. Install dependencies: ```bash pnpm install ``` 2. Create a `.env` file based on the `.env.sample` file: ```bash cp .env.example .env ``` 3. Update the `.env` file with your own values. 4. Run the app: ```bash pnpm run ios ``` alternatively, run the app as development build: ``` pnpm run dev:ios ``` 5. Scan the QR code from the terminal with the [Expo Go](https://expo.dev/go) app on your phone. ## Known issues: * PNPM: Although PNPM team consider that is correct behavior, we experienced a couple times when upgrading libs (totally unrelated to wagmi, such as react-native-async-storage) in this repo, causing a duplicated `wagmi` package gets referenced by `sdk` and `shared` packages, this cause build issues for the other apps in the monorepo. We've tried solution from [this issue](https://github.com/pnpm/pnpm/issues/5585) but none of them permanently fixed the issue, we should consider writing a custom script to force linking the packages into the same folder. * AppKit: For error message about "\_reactNative.BackHandler.removeEventListener is not a function (it is undefined)", please see: [https://github.com/reown-com/appkit-react-native/issues/339](https://github.com/reown-com/appkit-react-native/issues/339) ## Integration Options ### Signer API Service The Signer API Service is a Next.js API service that provides both standard signing and gasless signing endpoints for the Ethereum Comments Protocol. It allows you to sign comments and optionally submit them without user gas costs. #### Features * **Standard Signing**: Sign comments with app signature * **Gasless Signing**: Submit comments without user gas costs * **Approval Checking**: Automatically submit comments if user has approved the app * **Edit Comment Support**: Sign and submit comment edits * **Delete Comment Support**: Sign and submit comment deletions * **Multi-Chain Support**: Configure multiple chains with individual RPC URLs * **Conditional Endpoints**: Gasless endpoint only available when properly configured * **Type Safety**: Full TypeScript support with Zod validation * **Vercel Ready**: Optimized for Vercel deployment #### Quick Start ##### Deploy to Vercel [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fecp-eth%2Fcomments-monorepo%2Fapps%2Fsigner\&env=ENABLED_CHAINS,APP_SIGNER_PRIVATE_KEY) ##### Manual Setup 1. **Clone and install dependencies:** ```bash git clone https://github.com/ecp-eth/comments-monorepo.git cd apps/signer pnpm install ``` 2. **Set up environment variables:** ```bash cp .env.example .env.local # Edit .env.local with your values ``` 3. **Run the development server:** ```bash pnpm dev ``` #### Environment Variables ##### Required * `ENABLED_CHAINS`: Comma-separated list of chain IDs supported by the endpoints (must be supported by @ecp.eth/sdk) * `DEFAULT_CHAIN_ID`: Default chain ID for the service (must be one of the enabled chains and supported by @ecp.eth/sdk) * `RPC_URL_{chainId}`: RPC URL for each enabled chain (e.g., `RPC_URL_31337` for chain 31337) ##### Optional * `APP_SIGNER_PRIVATE_KEY`: Private key for app signer used to sign comments using `/api/sign`. If not set, the endpoint will return 404 * `COMMENTS_INDEXER_URL`: Comments indexer URL for muted account checking. If not set, the check is disabled ##### Gasless Configuration For gasless (sponsored) transactions, you can use either private key method or Privy method. If both are configured, the private key method will be used. ##### Method Selection * `GASLESS_METHOD`: Which method to use for preparing and sending comments * `"private-key"`: Uses `GASLESS_APP_SIGNER_PRIVATE_KEY` + `GASLESS_SUBMITTER_PRIVATE_KEY` * `"privy"`: Uses `GASLESS_PRIVY_APP_SIGNER_PRIVATE_KEY` + `GASLESS_PRIVY_*` variables * If not set, gasless endpoints will return 404 ##### Private Key Method (`"private-key"`) * `GASLESS_APP_SIGNER_PRIVATE_KEY`: Used to sign comment data using `/api/gasless/prepare` endpoint. If not set, `GASLESS_SUBMITTER_PRIVATE_KEY` will be used * `GASLESS_SUBMITTER_PRIVATE_KEY`: **Required** - Used to send signed comment data using `/api/gasless/send` endpoint ##### Privy Method (`"privy"`) * `GASLESS_PRIVY_APP_SIGNER_PRIVATE_KEY`: Used to sign comment data using `/api/gasless/sign` endpoint. If not set, the Privy account is used to sign * `GASLESS_PRIVY_APP_ID`: **Required** - Privy app ID * `GASLESS_PRIVY_SECRET`: **Required** - Privy secret * `GASLESS_PRIVY_AUTHORIZATION_KEY`: **Required** - Privy authorization key * `GASLESS_PRIVY_WALLET_ADDRESS`: **Required** - Privy wallet address * `GASLESS_PRIVY_WALLET_ID`: **Required** - Privy wallet ID #### API Endpoints ##### POST /api/post-comment/sign Standard comment signing endpoint. Always available when `APP_SIGNER_PRIVATE_KEY` is configured. **Request:** ```json { "author": "0x1234567890abcdef1234567890abcdef1234567890", "content": "Your comment text", "metadata": [], "targetUri": "https://example.com" } ``` **Response:** ```json { "signature": "0x...", "hash": "0x...", "data": { "id": "0x...", "content": "Your comment text", "author": "0x1234567890abcdef1234567890abcdef1234567890", "app": "0x...", "targetUri": "https://example.com", "metadata": [], "timestamp": "1234567890" } } ``` ##### POST /api/post-comment/gasless/prepare Prepare gasless comment data. Returns 404 if gasless method is not configured. **Request:** ```json { "author": "0x1234567890abcdef1234567890abcdef1234567890", "content": "Your comment text", "metadata": [], "targetUri": "https://example.com", "submitIfApproved": true } ``` **Response (Not Approved):** ```json { "signTypedDataParams": { ... }, "id": "0x...", "appSignature": "0x...", "commentData": { ... }, "chainId": 1 } ``` **Response (Approved and Submitted):** ```json { "txHash": "0x...", "id": "0x...", "appSignature": "0x...", "commentData": { ... }, "chainId": 1 } ``` ##### POST /api/post-comment/gasless/send Send signed gasless comment data. Returns 404 if gasless method is not configured. **Request:** ```json { "signTypedDataParams": { ... }, "appSignature": "0x...", "authorSignature": "0x...", "chainId": 1 } ``` **Response:** ```json { "txHash": "0x..." } ``` #### Edit Comment Endpoints ##### POST /api/edit-comment/sign Standard edit comment signing endpoint. Always available when `APP_SIGNER_PRIVATE_KEY` is configured. **Request:** ```json { "commentId": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "content": "Updated comment text", "author": "0x1234567890abcdef1234567890abcdef1234567890", "metadata": [], "chainId": 1 } ``` **Response:** ```json { "signature": "0x...", "hash": "0x...", "data": { "commentId": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "content": "Updated comment text", "app": "0x...", "nonce": "1234567890", "deadline": "1234567890", "metadata": [] } } ``` ##### POST /api/edit-comment/gasless/prepare Prepare gasless edit comment data. Returns 404 if gasless method is not configured. **Request:** ```json { "commentId": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "content": "Updated comment text", "author": "0x1234567890abcdef1234567890abcdef1234567890", "metadata": [], "submitIfApproved": true, "chainId": 1 } ``` **Response (Not Approved):** ```json { "signTypedDataParams": { ... }, "appSignature": "0x...", "chainId": 1, "edit": { ... } } ``` **Response (Approved and Submitted):** ```json { "txHash": "0x...", "appSignature": "0x...", "chainId": 1, "edit": { ... } } ``` ##### POST /api/edit-comment/gasless/send Send signed gasless edit comment data. Returns 404 if gasless method is not configured. **Request:** ```json { "signTypedDataParams": { ... }, "appSignature": "0x...", "authorSignature": "0x...", "edit": { ... }, "chainId": 1 } ``` **Response:** ```json { "txHash": "0x..." } ``` #### Delete Comment Endpoints ##### POST /api/delete-comment/gasless/prepare Prepare gasless delete comment data. Returns 404 if gasless method is not configured. **Request:** ```json { "author": "0x1234567890abcdef1234567890abcdef1234567890", "commentId": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "submitIfApproved": true, "chainId": 1 } ``` **Response (Not Approved):** ```json { "signTypedDataParams": { ... }, "appSignature": "0x..." } ``` **Response (Approved and Submitted):** ```json { "txHash": "0x..." } ``` ##### POST /api/delete-comment/gasless/send Send signed gasless delete comment data. Returns 404 if gasless method is not configured. **Request:** ```json { "signTypedDataParams": { ... }, "appSignature": "0x...", "authorSignature": "0x...", "chainId": 1 } ``` **Response:** ```json { "txHash": "0x..." } ``` #### Usage Examples ##### cURL - Standard Signing ```bash curl -X POST http://localhost:3000/api/post-comment/sign \ -H "Content-Type: application/json" \ -d '{ "author": "0x1234567890abcdef1234567890abcdef1234567890", "content": "Hello, world!", "metadata": [], "targetUri": "https://example.com" }' ``` ##### cURL - Gasless Prepare ```bash curl -X POST http://localhost:3000/api/post-comment/gasless/prepare \ -H "Content-Type: application/json" \ -d '{ "author": "0x1234567890abcdef1234567890abcdef1234567890", "content": "Hello, world!", "metadata": [], "targetUri": "https://example.com", "submitIfApproved": true }' ``` ##### cURL - Gasless Send ```bash curl -X POST http://localhost:3000/api/post-comment/gasless/send \ -H "Content-Type: application/json" \ -d '{ "signTypedDataParams": { ... }, "appSignature": "0x...", "authorSignature": "0x...", "chainId": 1 }' ``` ##### cURL - Edit Comment Sign ```bash curl -X POST http://localhost:3000/api/edit-comment/sign \ -H "Content-Type: application/json" \ -d '{ "commentId": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "content": "Updated comment text", "author": "0x1234567890abcdef1234567890abcdef1234567890", "metadata": [], "chainId": 1 }' ``` ##### cURL - Edit Comment Gasless Prepare ```bash curl -X POST http://localhost:3000/api/edit-comment/gasless/prepare \ -H "Content-Type: application/json" \ -d '{ "commentId": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "content": "Updated comment text", "author": "0x1234567890abcdef1234567890abcdef1234567890", "metadata": [], "submitIfApproved": true, "chainId": 1 }' ``` ##### cURL - Edit Comment Gasless Send ```bash curl -X POST http://localhost:3000/api/edit-comment/gasless/send \ -H "Content-Type: application/json" \ -d '{ "signTypedDataParams": { ... }, "appSignature": "0x...", "authorSignature": "0x...", "edit": { ... }, "chainId": 1 }' ``` ##### cURL - Delete Comment Gasless Prepare ```bash curl -X POST http://localhost:3000/api/delete-comment/gasless/prepare \ -H "Content-Type: application/json" \ -d '{ "author": "0x1234567890abcdef1234567890abcdef1234567890", "commentId": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", "submitIfApproved": true, "chainId": 1 }' ``` ##### cURL - Delete Comment Gasless Send ```bash curl -X POST http://localhost:3000/api/delete-comment/gasless/send \ -H "Content-Type: application/json" \ -d '{ "signTypedDataParams": { ... }, "appSignature": "0x...", "authorSignature": "0x...", "chainId": 1 }' ``` ##### TypeScript ```typescript // Standard signing const response = await fetch("/api/post-comment/sign", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ author: "0x1234567890abcdef1234567890abcdef1234567890", content: "Hello, world!", metadata: [], targetUri: "https://example.com", }), }); const result = await response.json(); console.log(result.signature); // Gasless flow with approval checking const prepareResponse = await fetch("/api/post-comment/gasless/prepare", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ author: "0x1234567890abcdef1234567890abcdef1234567890", content: "Hello, world!", metadata: [], targetUri: "https://example.com", submitIfApproved: true, // Check if user has approved the app }), }); const prepareResult = await prepareResponse.json(); // Check if comment was already submitted (user has approval) if (prepareResult.txHash) { console.log("Comment submitted automatically:", prepareResult.txHash); } else { // User needs to sign the data with their wallet const userSignature = await userWallet.signTypedData( prepareResult.signTypedDataParams, ); // Send the signed data const sendResponse = await fetch("/api/post-comment/gasless/send", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ signTypedDataParams: prepareResult.signTypedDataParams, appSignature: prepareResult.appSignature, authorSignature: userSignature, chainId: 1, }), }); const sendResult = await sendResponse.json(); console.log(sendResult.txHash); } // Edit comment - Standard signing const editResponse = await fetch("/api/edit-comment/sign", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ commentId: "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", content: "Updated comment text", author: "0x1234567890abcdef1234567890abcdef1234567890", metadata: [], chainId: 1, }), }); const editResult = await editResponse.json(); console.log(editResult.signature); // Edit comment - Gasless flow const editPrepareResponse = await fetch("/api/edit-comment/gasless/prepare", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ commentId: "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", content: "Updated comment text", author: "0x1234567890abcdef1234567890abcdef1234567890", metadata: [], submitIfApproved: true, chainId: 1, }), }); const editPrepareResult = await editPrepareResponse.json(); // If not approved, user needs to sign if (!editPrepareResult.txHash) { const userEditSignature = await userWallet.signTypedData( editPrepareResult.signTypedDataParams, ); // Send the signed edit data const editSendResponse = await fetch("/api/edit-comment/gasless/send", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ signTypedDataParams: editPrepareResult.signTypedDataParams, appSignature: editPrepareResult.appSignature, authorSignature: userEditSignature, edit: editPrepareResult.edit, chainId: 1, }), }); const editSendResult = await editSendResponse.json(); console.log(editSendResult.txHash); } else { // Already approved and submitted console.log(editPrepareResult.txHash); } // Delete comment - Gasless flow const deletePrepareResponse = await fetch( "/api/delete-comment/gasless/prepare", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ author: "0x1234567890abcdef1234567890abcdef1234567890", commentId: "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", submitIfApproved: true, chainId: 1, }), }, ); const deletePrepareResult = await deletePrepareResponse.json(); // If not approved, user needs to sign if (!deletePrepareResult.txHash) { const userDeleteSignature = await userWallet.signTypedData( deletePrepareResult.signTypedDataParams, ); // Send the signed delete data const deleteSendResponse = await fetch("/api/delete-comment/gasless/send", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ signTypedDataParams: deletePrepareResult.signTypedDataParams, appSignature: deletePrepareResult.appSignature, authorSignature: userDeleteSignature, chainId: 1, }), }); const deleteSendResult = await deleteSendResponse.json(); console.log(deleteSendResult.txHash); } else { // Already approved and submitted console.log(deletePrepareResult.txHash); } ``` #### Error Handling * **400 Bad Request**: Invalid request data * **404 Not Found**: Gasless endpoint not configured * **500 Internal Server Error**: Server-side error #### Development ```bash # Install dependencies pnpm install # Run development server pnpm dev # Build for production pnpm build # Start production server pnpm start # Type checking pnpm check-types # Linting pnpm lint ``` #### Best Practices 1. **Security**: Keep private keys secure and never expose them in client-side code 2. **Error Handling**: Implement proper error handling for all API calls 3. **Rate Limiting**: Consider implementing application-level rate limiting to prevent spam 4. **Monitoring**: Monitor gas costs and adjust gas limits accordingly 5. **Retry Logic**: Implement retry mechanisms for failed transactions 6. **Validation**: Always validate comment data before signing 7. **Approval Flow**: Use the `submitIfApproved` flag to optimize gasless flows when users have already approved your app #### Additional Resources * See [Contract Interactions](/integration-options/contract-interactions) for manual contract interaction * Check out [Post Comment Flows](/post-comment-flows) for different comment posting strategies * See [Protocol API Reference](/protocol-reference/CommentManager) for contract details * View the [Signer App Source Code](https://github.com/epc-eth/comments-monorepo/tree/main/apps/signer) for implementation details ##### @ecp.eth/protocol *** ## `BaseHook` Abstract base contract for all hook implementations Provides default implementations that throw HookNotImplemented if not overridden ### Functions #### supportsInterface(bytes4 interfaceId) → bool (public) Checks if the contract implements the specified interface #### getHookPermissions() → [struct Hooks.Permissions](/protocol-reference/types/Hooks#permissions) (external) #### \_getHookPermissions() → [struct Hooks.Permissions](/protocol-reference/types/Hooks#permissions) (internal) #### onInitialize(address channelManager, [struct Channels.Channel](/protocol-reference/types/Channels#channel) channelData, uint256 channelId, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata) → bool (external) Execute after a hook is initialized on a channel #### \_onInitialize(address, [struct Channels.Channel](/protocol-reference/types/Channels#channel), uint256, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry)) → bool (internal) #### onCommentAdd([struct Comments.Comment](/protocol-reference/types/Comments#comment) commentData, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata, address msgSender, bytes32 commentId) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) (external) Execute after a comment is processed #### \_onCommentAdd([struct Comments.Comment](/protocol-reference/types/Comments#comment), [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry), address, bytes32) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) (internal) #### onCommentDelete([struct Comments.Comment](/protocol-reference/types/Comments#comment) commentData, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) hookMetadata, address msgSender, bytes32 commentId) → bool (external) Execute after a comment is deleted #### \_onCommentDelete([struct Comments.Comment](/protocol-reference/types/Comments#comment), [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry), [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry), address, bytes32) → bool (internal) #### onCommentEdit([struct Comments.Comment](/protocol-reference/types/Comments#comment) commentData, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata, address msgSender, bytes32 commentId) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) (external) Execute after a comment is edited #### \_onCommentEdit([struct Comments.Comment](/protocol-reference/types/Comments#comment), [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry), address, bytes32) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) (internal) #### onChannelUpdate(address channel, uint256 channelId, [struct Channels.Channel](/protocol-reference/types/Channels#channel) channelData, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata) → bool (external) Execute after a channel is updated #### \_onChannelUpdate(address, uint256, [struct Channels.Channel](/protocol-reference/types/Channels#channel), [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry)) → bool (internal) #### onCommentHookDataUpdate([struct Comments.Comment](/protocol-reference/types/Comments#comment) commentData, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) hookMetadata, address msgSender, bytes32 commentId) → [struct Metadata.MetadataEntryOp\[\]](/protocol-reference/types/Metadata#metadataentryop) (external) Execute to update hook data for an existing comment #### \_onCommentHookDataUpdate([struct Comments.Comment](/protocol-reference/types/Comments#comment), [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry), [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry), address, bytes32) → [struct Metadata.MetadataEntryOp\[\]](/protocol-reference/types/Metadata#metadataentryop) (internal) ##### @ecp.eth/protocol *** ## `NoopHook` ### Functions #### supportsInterface(bytes4 interfaceId) → bool (external) #### getHookPermissions() → [struct Hooks.Permissions](/protocol-reference/types/Hooks#permissions) (external) #### onCommentAdd([struct Comments.Comment](/protocol-reference/types/Comments#comment), [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry), address, bytes32) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) (external) #### onInitialize(address, [struct Channels.Channel](/protocol-reference/types/Channels#channel), uint256, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry)) → bool (external) #### onCommentDelete([struct Comments.Comment](/protocol-reference/types/Comments#comment), [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry), [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry), address, bytes32) → bool (external) #### onCommentEdit([struct Comments.Comment](/protocol-reference/types/Comments#comment), [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry), address, bytes32) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) (external) #### onChannelUpdate(address, uint256, [struct Channels.Channel](/protocol-reference/types/Channels#channel), [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry)) → bool (external) #### onCommentHookDataUpdate([struct Comments.Comment](/protocol-reference/types/Comments#comment), [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry), [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry), address, bytes32) → [struct Metadata.MetadataEntryOp\[\]](/protocol-reference/types/Metadata#metadataentryop) (external) ##### @ecp.eth/protocol *** ## `TokenCreatorHook` Hook that gates channels to only allow token creators to post top-level comments. Similar to telegram channels. Requires channel metadata to contain tokenAddress and tokenCreator fields ### Structs #### `TokenInfo` Structure to store token information * **tokenAddress:** (address) The address of the token contract * **tokenCreator:** (address) The address of the token creator * **tokenChainId:** (uint256) The chain ID where the token exists ### Events #### `ChannelSetup(uint256 channelId, address tokenAddress, address tokenCreator, uint256 tokenChainId)` Event emitted when token info for a channel is set up ### Functions #### getChannelCount() → uint256 (public) Get the total number of channels #### getChannelIdAt(uint256 index) → uint256 (public) Get the channel ID at a specific index #### getChannelTokenInfo(uint256 channelId) → [struct TokenCreatorHook.TokenInfo](/protocol-reference/hooks/TokenCreatorHook#tokeninfo) (public) Get token information for a specific channel #### channelExists(uint256 channelId) → bool (public) Check if a channel exists #### getAllChannels() → uint256\[] channelIds, [struct TokenCreatorHook.TokenInfo\[\]](/protocol-reference/hooks/TokenCreatorHook#tokeninfo) tokenInfos (public) Get all channels with their token information #### \_getHookPermissions() → [struct Hooks.Permissions](/protocol-reference/types/Hooks#permissions) (internal) #### \_onInitialize(address, [struct Channels.Channel](/protocol-reference/types/Channels#channel), uint256 channelId, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata) → bool (internal) #### \_isValidTokenCAIP19(string targetUri, address tokenAddress, uint256 tokenChainId) → bool (internal) #### \_onCommentAdd([struct Comments.Comment](/protocol-reference/types/Comments#comment) commentData, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry), address, bytes32) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) (internal) ##### @ecp.eth/protocol *** ## `IChannelManager` This interface defines the core functionality for managing channels and their associated hooks ### Events #### `BaseURIUpdated(string baseURI)` Emitted when the base URI for NFT metadata is updated #### `ChannelCreated(uint256 channelId, string name, string description, [struct Metadata.MetadataEntry[]](/protocol-reference/types/Metadata#metadataentry) metadata, address hook, address owner)` Emitted when a new channel is created #### `ChannelUpdated(uint256 channelId, string name, string description, [struct Metadata.MetadataEntry[]](/protocol-reference/types/Metadata#metadataentry) metadata)` Emitted when a channel's configuration is updated #### `HookSet(uint256 channelId, address hook)` Emitted when a hook is set for a channel #### `HookStatusUpdated(uint256 channelId, address hook, bool enabled)` Emitted when a hook's enabled status is updated #### `ChannelMetadataSet(uint256 channelId, bytes32 key, bytes value)` Emitted when channel metadata is set ### Functions #### createChannel(string name, string description, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata, address hook) → uint256 channelId (external) Creates a new channel #### getChannel(uint256 channelId) → [struct Channels.Channel](/protocol-reference/types/Channels#channel) (external) Get a channel by its ID #### updateChannel(uint256 channelId, string name, string description, [struct Metadata.MetadataEntryOp\[\]](/protocol-reference/types/Metadata#metadataentryop) metadataOperations) (external) Updates an existing channel's configuration #### setHook(uint256 channelId, address hook) (external) Sets the hook for a channel #### setBaseURI(string baseURI\_) (external) Sets the base URI for NFT metadata #### channelExists(uint256 channelId) → bool (external) Checks if a channel exists #### getChannelMetadata(uint256 channelId) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) (external) Get all metadata for a channel #### getChannelMetadataValue(uint256 channelId, bytes32 key) → bytes (external) Get metadata value for a specific key #### getChannelMetadataKeys(uint256 channelId) → bytes32\[] (external) Get all metadata keys for a channel ##### @ecp.eth/protocol *** ## `ICommentManager` This interface defines the functions and events for the Comments contract ### Events #### `CommentAdded(bytes32 commentId, address author, address app, uint256 channelId, bytes32 parentId, uint96 createdAt, string content, string targetUri, uint8 commentType, uint8 authMethod, [struct Metadata.MetadataEntry[]](/protocol-reference/types/Metadata#metadataentry) metadata)` Emitted when a new comment is added #### `CommentMetadataSet(bytes32 commentId, bytes32 key, bytes value)` Emitted when metadata is set for a comment #### `CommentHookMetadataSet(bytes32 commentId, bytes32 key, bytes value)` Emitted when hook metadata is set for a comment #### `CommentDeleted(bytes32 commentId, address author)` Emitted when a comment is deleted #### `CommentEdited(bytes32 commentId, address author, address editedByApp, uint256 channelId, bytes32 parentId, uint96 createdAt, uint96 updatedAt, string content, string targetUri, uint8 commentType, uint8 authMethod, [struct Metadata.MetadataEntry[]](/protocol-reference/types/Metadata#metadataentry) metadata)` Emitted when a comment is edited #### `CommentHookDataUpdate(bytes32 commentId, [struct Metadata.MetadataEntryOp[]](/protocol-reference/types/Metadata#metadataentryop) operations)` Emitted when hook metadata is updated #### `ApprovalAdded(address author, address app, uint256 expiry)` Emitted when an author approves an app signer #### `ApprovalRemoved(address author, address app)` Emitted when an author removes an app signer's approval #### `BatchOperationExecuted(address sender, uint256 operationsCount, uint256 totalValue)` Emitted when a batch operation is executed ### Functions #### postComment([struct Comments.CreateComment](/protocol-reference/types/Comments#createcomment) commentData, bytes appSignature) → bytes32 commentId (external) Posts a comment directly from the author's address #### postCommentWithSig([struct Comments.CreateComment](/protocol-reference/types/Comments#createcomment) commentData, bytes authorSignature, bytes appSignature) → bytes32 commentId (external) Posts a comment with both author and app signer signatures #### deleteComment(bytes32 commentId) (external) Deletes a comment when called by the author directly #### deleteCommentWithSig(bytes32 commentId, address app, uint256 deadline, bytes authorSignature, bytes appSignature) (external) Deletes a comment with author signature verification #### editComment(bytes32 commentId, [struct Comments.EditComment](/protocol-reference/types/Comments#editcomment) editData, bytes appSignature) (external) Edits a comment when called by the author directly #### editCommentWithSig(bytes32 commentId, [struct Comments.EditComment](/protocol-reference/types/Comments#editcomment) editData, bytes authorSignature, bytes appSignature) (external) Edits a comment with both author and app signer signatures #### updateCommentHookData(bytes32 commentId) (external) Updates hook metadata for an existing comment using merge mode (gas-efficient). Anyone can call this function. Only updates provided metadata fields without clearing existing ones #### addApproval(address app, uint256 expiry) (external) Approves an app signer when called directly by the author #### revokeApproval(address app) (external) Removes an app signer approval when called directly by the author #### addApprovalWithSig(address author, address app, uint256 expiry, uint256 nonce, uint256 deadline, bytes signature) (external) Approves an app signer with signature verification #### removeApprovalWithSig(address author, address app, uint256 nonce, uint256 deadline, bytes signature) (external) Removes an app signer approval with signature verification #### getAddApprovalHash(address author, address app, uint256 expiry, uint256 nonce, uint256 deadline) → bytes32 (external) Calculates the EIP-712 hash for a permit #### getRemoveApprovalHash(address author, address app, uint256 nonce, uint256 deadline) → bytes32 (external) Calculates the EIP-712 hash for removing an approval #### getDeleteCommentHash(bytes32 commentId, address author, address app, uint256 deadline) → bytes32 (external) Calculates the EIP-712 hash for deleting a comment #### getEditCommentHash(bytes32 commentId, address author, [struct Comments.EditComment](/protocol-reference/types/Comments#editcomment) editData) → bytes32 (external) Calculates the EIP-712 hash for editing a comment #### getCommentId([struct Comments.CreateComment](/protocol-reference/types/Comments#createcomment) commentData) → bytes32 (external) Calculates the EIP-712 hash for a comment #### updateChannelContract(address \_channelContract) (external) Updates the channel manager contract address (only owner) #### getComment(bytes32 commentId) → [struct Comments.Comment](/protocol-reference/types/Comments#comment) (external) Get a comment by its ID #### getCommentMetadata(bytes32 commentId) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) (external) Get metadata for a comment #### getCommentHookMetadata(bytes32 commentId) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) (external) Get hook metadata for a comment #### getCommentMetadataValue(bytes32 commentId, bytes32 key) → bytes (external) Get a specific metadata value for a comment #### getCommentHookMetadataValue(bytes32 commentId, bytes32 key) → bytes (external) Get a specific hook metadata value for a comment #### getCommentMetadataKeys(bytes32 commentId) → bytes32\[] (external) Get all metadata keys for a comment #### getCommentHookMetadataKeys(bytes32 commentId) → bytes32\[] (external) Get all hook metadata keys for a comment #### isApproved(address author, address app) → bool (external) Get the approval status for an author and app #### getApprovalExpiry(address author, address app) → uint256 (external) Get the approval expiry timestamp for an author and app #### getNonce(address author, address app) → uint256 (external) Get the nonce for an author and app #### isDeleted(bytes32 commentId) → bool (external) Get the deleted status for a comment #### batchOperations([struct Comments.BatchOperation\[\]](/protocol-reference/types/Comments#batchoperation) operations) → bytes\[] results (external) Executes multiple operations (post, edit, delete) in a single transaction preserving order ##### @ecp.eth/protocol *** ## `IHook` ### Functions #### getHookPermissions() → [struct Hooks.Permissions](/protocol-reference/types/Hooks#permissions) (external) #### onInitialize(address channelManager, [struct Channels.Channel](/protocol-reference/types/Channels#channel) channelData, uint256 channelId, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata) → bool success (external) Execute after a hook is initialized on a channel #### onCommentAdd([struct Comments.Comment](/protocol-reference/types/Comments#comment) commentData, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata, address msgSender, bytes32 commentId) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) hookMetadata (external) Execute after a comment is processed #### onCommentDelete([struct Comments.Comment](/protocol-reference/types/Comments#comment) commentData, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) hookMetadata, address msgSender, bytes32 commentId) → bool success (external) Execute after a comment is deleted #### onCommentEdit([struct Comments.Comment](/protocol-reference/types/Comments#comment) commentData, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata, address msgSender, bytes32 commentId) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) hookMetadata (external) Execute after a comment is edited #### onChannelUpdate(address channel, uint256 channelId, [struct Channels.Channel](/protocol-reference/types/Channels#channel) channelData, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata) → bool success (external) Execute after a channel is updated #### onCommentHookDataUpdate([struct Comments.Comment](/protocol-reference/types/Comments#comment) commentData, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) hookMetadata, address msgSender, bytes32 commentId) → [struct Metadata.MetadataEntryOp\[\]](/protocol-reference/types/Metadata#metadataentryop) operations (external) Execute to update hook data for an existing comment ##### @ecp.eth/protocol *** ## `IProtocolFees` This interface defines functions for managing various protocol fees ### Events #### `ChannelCreationFeeUpdated(uint96 newFee)` Emitted when channel creation fee is updated #### `CommentCreationFeeUpdated(uint96 newFee)` Emitted when comment creation fee is updated #### `HookTransactionFeeUpdated(uint16 newBasisPoints)` Emitted when hook transaction fee percentage is updated #### `FeesWithdrawn(address recipient, uint256 amount)` Emitted when fees are withdrawn ### Functions #### setChannelCreationFee(uint96 fee) (external) Sets the fee for creating a new channel #### getChannelCreationFee() → uint96 fee (external) Gets the current channel creation fee #### setCommentCreationFee(uint96 fee) (external) Sets the fee for creating a new comment #### getCommentCreationFee() → uint96 fee (external) Gets the current comment creation fee #### setHookTransactionFee(uint16 feeBasisPoints) (external) Sets the fee percentage taken from hook transactions #### getHookTransactionFee() → uint16 feeBasisPoints (external) Gets the current hook transaction fee percentage #### withdrawFees(address recipient) → uint256 amount (external) Withdraws accumulated fees to a specified address #### collectCommentCreationFee() → uint96 (external) Collects the protocol fee for comment creation #### deductProtocolHookTransactionFee(uint256 value) → uint256 hookValue (external) Calculates the hook transaction fee by deducting the protocol fee #### calculateMsgValueWithHookFee(uint256 postFeeAmountForwardedToHook) → uint256 (external) Calculates the required input value to achieve a desired output after protocol fee deduction ##### @ecp.eth/protocol *** ## `Approvals` ### Events #### `ApprovalAdded(address author, address app, uint256 expiry)` Event emitted when an author approves an app signer #### `ApprovalRemoved(address author, address app)` Event emitted when an author removes an app signer's approval ### Functions #### addApproval(address author, address app, uint256 expiry, mapping(address => mapping(address => uint256)) approvals) (external) Add an app signer approval #### revokeApproval(address author, address app, mapping(address => mapping(address => uint256)) approvals) (external) Remove an app signer approval #### isApproved(address author, address app, mapping(address => mapping(address => uint256)) approvals) → bool approved (external) Check if an app is approved for an author #### getApprovalExpiry(address author, address app, mapping(address => mapping(address => uint256)) approvals) → uint256 expiry (external) Get approval expiry timestamp #### getNonce(address author, address app, mapping(address => mapping(address => uint256)) nonces) → uint256 nonce (external) Get nonce for author-app pair #### incrementNonce(address author, address app, mapping(address => mapping(address => uint256)) nonces) (external) Increment nonce for author-app pair #### validateNonce(address author, address app, uint256 expectedNonce, mapping(address => mapping(address => uint256)) nonces) (external) Validate nonce for author-app pair ##### @ecp.eth/protocol *** ## `Batching` ### Functions #### validateBatchOperations([struct Comments.BatchOperation\[\]](/protocol-reference/types/Comments#batchoperation) operations, uint256 msgValue) → uint256 totalRequiredValue (external) Validate batch operations structure and value distribution #### validateBatchOperationSignatures([struct Comments.BatchOperation](/protocol-reference/types/Comments#batchoperation) operation, uint256 operationIndex) (external) Validate a single batch operation's signature requirements #### decodePostCommentData([struct Comments.BatchOperation](/protocol-reference/types/Comments#batchoperation) operation) → [struct Comments.CreateComment](/protocol-reference/types/Comments#createcomment) commentData (external) Decode batch operation data for POST\_COMMENT and POST\_COMMENT\_WITH\_SIG #### decodeEditCommentData([struct Comments.BatchOperation](/protocol-reference/types/Comments#batchoperation) operation) → bytes32 commentId, [struct Comments.EditComment](/protocol-reference/types/Comments#editcomment) editData (external) Decode batch operation data for EDIT\_COMMENT and EDIT\_COMMENT\_WITH\_SIG #### decodeDeleteCommentData([struct Comments.BatchOperation](/protocol-reference/types/Comments#batchoperation) operation) → bytes32 commentId (external) Decode batch operation data for DELETE\_COMMENT #### decodeDeleteCommentWithSigData([struct Comments.BatchOperation](/protocol-reference/types/Comments#batchoperation) operation) → [struct Comments.BatchDeleteData](/protocol-reference/types/Comments#batchdeletedata) deleteData (external) Decode batch operation data for DELETE\_COMMENT\_WITH\_SIG #### encodeCommentIdResult(bytes32 commentId) → bytes result (external) Encode a comment ID as result data ##### @ecp.eth/protocol *** ## `CommentOps` ### Functions #### createComment(bytes32 commentId, [struct Comments.CreateComment](/protocol-reference/types/Comments#createcomment) commentData, [enum Comments.AuthorAuthMethod](/protocol-reference/types/Comments#authorauthmethod) authMethod, uint256 value, uint96 commentCreationFee, contract IChannelManager channelManager, mapping(bytes32 => struct Comments.Comment) comments, mapping(bytes32 => mapping(bytes32 => bytes)) commentMetadata, mapping(bytes32 => bytes32\[]) commentMetadataKeys, mapping(bytes32 => mapping(bytes32 => bytes)) commentHookMetadata, mapping(bytes32 => bytes32\[]) commentHookMetadataKeys, address msgSender) (external) Create a new comment #### editComment(bytes32 commentId, [struct Comments.EditComment](/protocol-reference/types/Comments#editcomment) editData, [enum Comments.AuthorAuthMethod](/protocol-reference/types/Comments#authorauthmethod) authMethod, uint256 value, contract IChannelManager channelManager, mapping(bytes32 => struct Comments.Comment) comments, mapping(bytes32 => mapping(bytes32 => bytes)) commentMetadata, mapping(bytes32 => bytes32\[]) commentMetadataKeys, mapping(bytes32 => mapping(bytes32 => bytes)) commentHookMetadata, mapping(bytes32 => bytes32\[]) commentHookMetadataKeys, address msgSender) (external) Edit an existing comment #### deleteComment(bytes32 commentId, address author, contract IChannelManager channelManager, mapping(bytes32 => struct Comments.Comment) comments, mapping(bytes32 => bool) deleted, mapping(bytes32 => mapping(bytes32 => bytes)) commentMetadata, mapping(bytes32 => bytes32\[]) commentMetadataKeys, mapping(bytes32 => mapping(bytes32 => bytes)) commentHookMetadata, mapping(bytes32 => bytes32\[]) commentHookMetadataKeys, address msgSender) (external) Delete a comment #### updateCommentHookData(bytes32 commentId, contract IChannelManager channelManager, mapping(bytes32 => struct Comments.Comment) comments, mapping(bytes32 => mapping(bytes32 => bytes)) commentMetadata, mapping(bytes32 => bytes32\[]) commentMetadataKeys, mapping(bytes32 => mapping(bytes32 => bytes)) commentHookMetadata, mapping(bytes32 => bytes32\[]) commentHookMetadataKeys, address msgSender) (external) Update hook metadata for a comment ##### @ecp.eth/protocol *** ## `CommentSigning` Handles EIP-712 signing, hash generation, and signature verification for comments ### Functions #### generateDomainSeparator(string name, string version, uint256 chainId, address verifyingContract) → bytes32 (internal) Generate EIP-712 domain separator #### hashMetadataArray([struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata) → bytes32 (internal) Hash metadata array for EIP-712 #### getCommentId([struct Comments.CreateComment](/protocol-reference/types/Comments#createcomment) commentData, bytes32 domainSeparator) → bytes32 (internal) Generate comment ID hash #### getEditCommentHash(bytes32 commentId, address author, [struct Comments.EditComment](/protocol-reference/types/Comments#editcomment) editData, bytes32 domainSeparator) → bytes32 (internal) Generate edit comment hash #### getDeleteCommentHash(bytes32 commentId, address author, address app, uint256 deadline, bytes32 domainSeparator) → bytes32 (internal) Generate delete comment hash #### getAddApprovalHash(address author, address app, uint256 expiry, uint256 nonce, uint256 deadline, bytes32 domainSeparator) → bytes32 (internal) Generate add approval hash #### getRemoveApprovalHash(address author, address app, uint256 nonce, uint256 deadline, bytes32 domainSeparator) → bytes32 (internal) Generate remove approval hash #### verifyAppSignature(address app, bytes32 hash, bytes signature, address msgSender) → bool (internal) Verify app signature for comment operations #### verifyAuthorSignature(address author, bytes32 hash, bytes signature) → bool (internal) Verify author signature ##### @ecp.eth/protocol *** ## `MetadataOps` ### Functions #### getCommentMetadata(bytes32 commentId, mapping(bytes32 => mapping(bytes32 => bytes)) commentMetadata, mapping(bytes32 => bytes32\[]) commentMetadataKeys) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) (external) Get metadata for a comment #### getCommentHookMetadata(bytes32 commentId, mapping(bytes32 => mapping(bytes32 => bytes)) commentHookMetadata, mapping(bytes32 => bytes32\[]) commentHookMetadataKeys) → [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) (external) Get hook metadata for a comment #### clearCommentMetadata(bytes32 commentId, mapping(bytes32 => mapping(bytes32 => bytes)) commentMetadata, mapping(bytes32 => bytes32\[]) commentMetadataKeys) (external) Clear all metadata for a comment #### clearCommentHookMetadata(bytes32 commentId, mapping(bytes32 => mapping(bytes32 => bytes)) commentHookMetadata, mapping(bytes32 => bytes32\[]) commentHookMetadataKeys) (external) Clear all hook metadata for a comment #### applyHookMetadataOperations(bytes32 commentId, [struct Metadata.MetadataEntryOp\[\]](/protocol-reference/types/Metadata#metadataentryop) operations, mapping(bytes32 => mapping(bytes32 => bytes)) commentHookMetadata, mapping(bytes32 => bytes32\[]) commentHookMetadataKeys) (external) Apply hook metadata operations efficiently #### deleteCommentHookMetadataKey(bytes32 commentId, bytes32 keyToDelete, mapping(bytes32 => mapping(bytes32 => bytes)) commentHookMetadata, mapping(bytes32 => bytes32\[]) commentHookMetadataKeys) (external) Delete a specific hook metadata key #### \_deleteCommentHookMetadataKey(bytes32 commentId, bytes32 keyToDelete, mapping(bytes32 => mapping(bytes32 => bytes)) commentHookMetadata, mapping(bytes32 => bytes32\[]) commentHookMetadataKeys) (internal) Internal function to delete a specific hook metadata key #### hookMetadataKeyExists(bytes32 commentId, bytes32 targetKey, mapping(bytes32 => bytes32\[]) commentHookMetadataKeys) → bool exists (external) Check if a hook metadata key exists #### \_hookMetadataKeyExists(bytes32 commentId, bytes32 targetKey, mapping(bytes32 => bytes32\[]) commentHookMetadataKeys) → bool exists (internal) Internal function to check if a hook metadata key exists #### storeCommentMetadata(bytes32 commentId, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata, mapping(bytes32 => mapping(bytes32 => bytes)) commentMetadata, mapping(bytes32 => bytes32\[]) commentMetadataKeys) (external) Store metadata entries for a comment #### storeCommentHookMetadata(bytes32 commentId, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) hookMetadata, mapping(bytes32 => mapping(bytes32 => bytes)) commentHookMetadata, mapping(bytes32 => bytes32\[]) commentHookMetadataKeys) (external) Store hook metadata entries for a comment ##### @ecp.eth/protocol *** ## `Channels` ### Structs #### `Channel` Struct containing channel configuration * **name:** (string) The name of the channel * **description:** (string) The description of the channel * **hook:** (address) The hook of the channel. Hook must implement IHook interface. * **permissions:** (struct Hooks.Permissions) The hook permissions of the channel ##### @ecp.eth/protocol *** ## `Comments` ### Structs #### `Comment` Struct containing all comment data * **author:** (address) The address of the comment author * **createdAt:** (uint88) The timestamp when the comment was created * **authMethod:** (enum Comments.AuthorAuthMethod) The authentication method used to create this comment * **app:** (address) The address of the application signer that authorized this comment * **updatedAt:** (uint88) The timestamp when the comment was last updated * **commentType:** (uint8) The type of the comment (0=comment, 1=reaction) * **channelId:** (uint256) The channel ID associated with the comment * **parentId:** (bytes32) The ID of the parent comment if this is a reply, otherwise bytes32(0) * **content:** (string) The text content of the comment - may contain urls, images and mentions * **targetUri:** (string) the URI about which the comment is being made #### `CreateComment` Struct containing all comment data for creating a comment * **author:** (address) The address of the comment author * **app:** (address) The address of the application signer that authorized this comment * **channelId:** (uint256) The channel ID associated with the comment * **deadline:** (uint256) Timestamp after which the signatures for this comment become invalid * **parentId:** (bytes32) The ID of the parent comment if this is a reply, otherwise bytes32(0) * **commentType:** (uint8) The type of the comment (0=comment, 1=reaction) * **content:** (string) The actual text content of the comment. If the commentType is COMMENT\_TYPE\_REACTION, the content should be the reaction type, such as "like", "downvote", "repost" etc. * **metadata:** (struct Metadata.MetadataEntry\[]) Array of key-value pairs for additional data * **targetUri:** (string) the URI about which the comment is being made #### `EditComment` Struct containing all comment data for editing a comment * **app:** (address) The address of the application signer that authorized this comment * **nonce:** (uint256) The nonce for the comment * **deadline:** (uint256) Timestamp after which the signatures for this comment become invalid * **content:** (string) The actual text content of the comment * **metadata:** (struct Metadata.MetadataEntry\[]) Array of key-value pairs for additional data #### `BatchDeleteData` Struct for batch delete operation data * **commentId:** (bytes32) The unique identifier of the comment to delete * **app:** (address) The address of the app signer (only for deleteCommentWithSig) * **deadline:** (uint256) Timestamp after which the signature becomes invalid (only for deleteCommentWithSig) #### `BatchOperation` Struct containing a single batch operation * **operationType:** (enum Comments.BatchOperationType) The type of operation to perform * **value:** (uint256) The amount of ETH to send with this operation * **data:** (bytes) Encoded operation-specific data * **signatures:** (bytes\[]) Array of signatures required for this operation ### Enums #### `AuthorAuthMethod` DIRECT\_TX APP\_APPROVAL AUTHOR\_SIGNATURE #### `BatchOperationType` POST\_COMMENT POST\_COMMENT\_WITH\_SIG EDIT\_COMMENT EDIT\_COMMENT\_WITH\_SIG DELETE\_COMMENT DELETE\_COMMENT\_WITH\_SIG ##### @ecp.eth/protocol *** ## `Hooks` Type definitions for hook-related structs ### Structs #### `Permissions` Struct defining which hook functions are enabled Each boolean indicates whether the corresponding hook function is enabled * **onInitialize:** (bool) * **onCommentAdd:** (bool) * **onCommentDelete:** (bool) * **onCommentEdit:** (bool) * **onChannelUpdate:** (bool) * **onCommentHookDataUpdate:** (bool) ##### @ecp.eth/protocol *** ## `Metadata` ### Structs #### `MetadataEntry` Struct containing metadata key-value pair * **key:** (bytes32) UTF-8 encoded string of format "type key". Must fit in 32 bytes. * **value:** (bytes) The metadata value as bytes #### `MetadataEntryOp` Struct for hook metadata operations with explicit operation type * **operation:** (enum Metadata.MetadataOperation) The operation to perform (SET or DELETE) * **key:** (bytes32) The metadata key * **value:** (bytes) The metadata value (ignored for DELETE operations) ### Enums #### `MetadataOperation` SET DELETE [**@ecp.eth/sdk**](../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / channel-manager ## channel-manager Ethereum Comments Protocol SDK Channel Manager Core functionality for managing comment channels ### Type Aliases | Type Alias | Description | | -------------------------------------------------------------------------------------------------------------------------------- | ----------- | | [ChannelExistsParams](/sdk-reference/channel-manager/type-aliases/ChannelExistsParams.mdx) | - | | [CreateChannelParams](/sdk-reference/channel-manager/type-aliases/CreateChannelParams.mdx) | - | | [CreateChannelResult](/sdk-reference/channel-manager/type-aliases/CreateChannelResult.mdx) | - | | [DeductProtocolHookTransactionFeeParams](/sdk-reference/channel-manager/type-aliases/DeductProtocolHookTransactionFeeParams.mdx) | - | | [DeductProtocolHookTransactionFeeResult](/sdk-reference/channel-manager/type-aliases/DeductProtocolHookTransactionFeeResult.mdx) | - | | [GetChannelCreationFeeParams](/sdk-reference/channel-manager/type-aliases/GetChannelCreationFeeParams.mdx) | - | | [GetChannelCreationFeeResult](/sdk-reference/channel-manager/type-aliases/GetChannelCreationFeeResult.mdx) | - | | [GetChannelMetadataParams](/sdk-reference/channel-manager/type-aliases/GetChannelMetadataParams.mdx) | - | | [GetChannelMetadataResult](/sdk-reference/channel-manager/type-aliases/GetChannelMetadataResult.mdx) | - | | [GetChannelParams](/sdk-reference/channel-manager/type-aliases/GetChannelParams.mdx) | - | | [GetChannelResult](/sdk-reference/channel-manager/type-aliases/GetChannelResult.mdx) | - | | [GetHookTransactionFeeParams](/sdk-reference/channel-manager/type-aliases/GetHookTransactionFeeParams.mdx) | - | | [GetHookTransactionFeeResult](/sdk-reference/channel-manager/type-aliases/GetHookTransactionFeeResult.mdx) | - | | [OwnerOfParams](/sdk-reference/channel-manager/type-aliases/OwnerOfParams.mdx) | - | | [OwnerOfResult](/sdk-reference/channel-manager/type-aliases/OwnerOfResult.mdx) | - | | [SetBaseURIParams](/sdk-reference/channel-manager/type-aliases/SetBaseURIParams.mdx) | - | | [SetBaseURIResult](/sdk-reference/channel-manager/type-aliases/SetBaseURIResult.mdx) | - | | [SetChannelCreationFeeParams](/sdk-reference/channel-manager/type-aliases/SetChannelCreationFeeParams.mdx) | - | | [SetChannelCreationFeeResult](/sdk-reference/channel-manager/type-aliases/SetChannelCreationFeeResult.mdx) | - | | [SetHookParams](/sdk-reference/channel-manager/type-aliases/SetHookParams.mdx) | - | | [SetHookResult](/sdk-reference/channel-manager/type-aliases/SetHookResult.mdx) | - | | [SetHookTransactionFeeParams](/sdk-reference/channel-manager/type-aliases/SetHookTransactionFeeParams.mdx) | - | | [SetHookTransactionFeeResult](/sdk-reference/channel-manager/type-aliases/SetHookTransactionFeeResult.mdx) | - | | [UpdateChannelParams](/sdk-reference/channel-manager/type-aliases/UpdateChannelParams.mdx) | - | | [UpdateChannelResult](/sdk-reference/channel-manager/type-aliases/UpdateChannelResult.mdx) | - | | [WithdrawFeesParams](/sdk-reference/channel-manager/type-aliases/WithdrawFeesParams.mdx) | - | | [WithdrawFeesResult](/sdk-reference/channel-manager/type-aliases/WithdrawFeesResult.mdx) | - | ### Variables | Variable | Description | | --------------------------------------------------------------------------- | -------------------- | | [createChannel](/sdk-reference/channel-manager/variables/createChannel.mdx) | Create a new channel | | [updateChannel](/sdk-reference/channel-manager/variables/updateChannel.mdx) | Update a channel | ### Functions | Function | Description | | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | | [channelExists](/sdk-reference/channel-manager/functions/channelExists.mdx) | Check if a channel exists | | [deductProtocolHookTransactionFee](/sdk-reference/channel-manager/functions/deductProtocolHookTransactionFee.mdx) | Calculates the hook transaction fee by deducting the protocol fee | | [getChannel](/sdk-reference/channel-manager/functions/getChannel.mdx) | Get a channel | | [getChannelCreationFee](/sdk-reference/channel-manager/functions/getChannelCreationFee.mdx) | Get the creation fee from channel manager | | [getChannelMetadata](/sdk-reference/channel-manager/functions/getChannelMetadata.mdx) | Get channel metadata | | [getHookTransactionFee](/sdk-reference/channel-manager/functions/getHookTransactionFee.mdx) | Get the hook transaction fee from channel manager | | [ownerOf](/sdk-reference/channel-manager/functions/ownerOf.mdx) | Get the owner of a channel | | [setBaseURI](/sdk-reference/channel-manager/functions/setBaseURI.mdx) | Sets the base URI for NFT metadata | | [setChannelCreationFee](/sdk-reference/channel-manager/functions/setChannelCreationFee.mdx) | Set the fee for creating a new channel | | [setHook](/sdk-reference/channel-manager/functions/setHook.mdx) | Set the hook for a channel | | [setHookTransactionFee](/sdk-reference/channel-manager/functions/setHookTransactionFee.mdx) | Set the percentage of the fee for the hook transaction | | [withdrawFees](/sdk-reference/channel-manager/functions/withdrawFees.mdx) | Withdraws accumulated fees to a specified address | ### References #### Channel Re-exports [Channel](/sdk-reference/channel-manager/types/type-aliases/Channel.mdx) *** #### ChannelManagerABIType Re-exports [ChannelManagerABIType](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx) *** #### ChannelPermissions Re-exports [ChannelPermissions](/sdk-reference/channel-manager/types/type-aliases/ChannelPermissions.mdx) *** #### ContractReadFunctions Re-exports [ContractReadFunctions](/sdk-reference/channel-manager/types/type-aliases/ContractReadFunctions.mdx) *** #### ContractWriteFunctions Re-exports [ContractWriteFunctions](/sdk-reference/channel-manager/types/type-aliases/ContractWriteFunctions.mdx) [**@ecp.eth/sdk**](../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / comments ## comments Ethereum Comments Protocol SDK Comments Core functionality for managing comments and approvals ### Enumerations | Enumeration | Description | | ------------------------------------------------------------------------------- | ----------- | | [AuthorAuthMethod](/sdk-reference/comments/enumerations/AuthorAuthMethod.mdx) | - | | [MetadataOperation](/sdk-reference/comments/enumerations/MetadataOperation.mdx) | - | ### Type Aliases | Type Alias | Description | | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | | [AddApprovalParams](/sdk-reference/comments/type-aliases/AddApprovalParams.mdx) | - | | [AddApprovalResult](/sdk-reference/comments/type-aliases/AddApprovalResult.mdx) | - | | [AddApprovalTypedDataSchemaType](/sdk-reference/comments/type-aliases/AddApprovalTypedDataSchemaType.mdx) | - | | [AddApprovalWithSigParams](/sdk-reference/comments/type-aliases/AddApprovalWithSigParams.mdx) | - | | [AddApprovalWithSigResult](/sdk-reference/comments/type-aliases/AddApprovalWithSigResult.mdx) | - | | [AddCommentTypedDataSchemaType](/sdk-reference/comments/type-aliases/AddCommentTypedDataSchemaType.mdx) | - | | [BaseEditCommentDataParams](/sdk-reference/comments/type-aliases/BaseEditCommentDataParams.mdx) | - | | [CommentData](/sdk-reference/comments/type-aliases/CommentData.mdx) | The data structure of a comment returned by the contract | | [CommentInputData](/sdk-reference/comments/type-aliases/CommentInputData.mdx) | Comment input data schema. This is used as input of the functions. | | [CommentManagerABIType](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx) | - | | [CommentTypeSchemaType](/sdk-reference/comments/type-aliases/CommentTypeSchemaType.mdx) | - | | [ContractReadFunctions](/sdk-reference/comments/type-aliases/ContractReadFunctions.mdx) | - | | [ContractWriteFunctions](/sdk-reference/comments/type-aliases/ContractWriteFunctions.mdx) | - | | [CreateApprovalTypedDataParams](/sdk-reference/comments/type-aliases/CreateApprovalTypedDataParams.mdx) | - | | [CreateApprovalTypedDataResult](/sdk-reference/comments/type-aliases/CreateApprovalTypedDataResult.mdx) | - | | [CreateCommentData](/sdk-reference/comments/type-aliases/CreateCommentData.mdx) | - | | [CreateCommentDataParams](/sdk-reference/comments/type-aliases/CreateCommentDataParams.mdx) | - | | [CreateCommentDataParamsShared](/sdk-reference/comments/type-aliases/CreateCommentDataParamsShared.mdx) | The shared parameters for creating a comment | | [CreateCommentTypedDataParams](/sdk-reference/comments/type-aliases/CreateCommentTypedDataParams.mdx) | - | | [CreateDeleteCommentTypedDataParams](/sdk-reference/comments/type-aliases/CreateDeleteCommentTypedDataParams.mdx) | - | | [CreateEditCommentTypedDataParams](/sdk-reference/comments/type-aliases/CreateEditCommentTypedDataParams.mdx) | - | | [CreateRemoveApprovalTypedDataParams](/sdk-reference/comments/type-aliases/CreateRemoveApprovalTypedDataParams.mdx) | - | | [CreateRemoveApprovalTypedDataResult](/sdk-reference/comments/type-aliases/CreateRemoveApprovalTypedDataResult.mdx) | - | | [CreateReplyCommentDataParams](/sdk-reference/comments/type-aliases/CreateReplyCommentDataParams.mdx) | The parameters for creating a reply comment | | [CreateReportCommentTypedDataParams](/sdk-reference/comments/type-aliases/CreateReportCommentTypedDataParams.mdx) | - | | [CreateRootCommentDataParams](/sdk-reference/comments/type-aliases/CreateRootCommentDataParams.mdx) | The parameters for creating a root comment | | [DeleteCommentParams](/sdk-reference/comments/type-aliases/DeleteCommentParams.mdx) | - | | [DeleteCommentResult](/sdk-reference/comments/type-aliases/DeleteCommentResult.mdx) | - | | [DeleteCommentTypedDataSchemaType](/sdk-reference/comments/type-aliases/DeleteCommentTypedDataSchemaType.mdx) | - | | [DeleteCommentWithSigParams](/sdk-reference/comments/type-aliases/DeleteCommentWithSigParams.mdx) | - | | [DeleteCommentWithSigResult](/sdk-reference/comments/type-aliases/DeleteCommentWithSigResult.mdx) | - | | [EditCommentData](/sdk-reference/comments/type-aliases/EditCommentData.mdx) | Edit comment data schema. This is used as input of the functions. | | [EditCommentDataParams](/sdk-reference/comments/type-aliases/EditCommentDataParams.mdx) | - | | [EditCommentDataParamsWithMetadataEntries](/sdk-reference/comments/type-aliases/EditCommentDataParamsWithMetadataEntries.mdx) | - | | [EditCommentParams](/sdk-reference/comments/type-aliases/EditCommentParams.mdx) | - | | [EditCommentResult](/sdk-reference/comments/type-aliases/EditCommentResult.mdx) | - | | [EditCommentTypedDataSchemaType](/sdk-reference/comments/type-aliases/EditCommentTypedDataSchemaType.mdx) | - | | [EditCommentWithSigParams](/sdk-reference/comments/type-aliases/EditCommentWithSigParams.mdx) | - | | [EditCommentWithSigResult](/sdk-reference/comments/type-aliases/EditCommentWithSigResult.mdx) | - | | [GetAddApprovalHashData](/sdk-reference/comments/type-aliases/GetAddApprovalHashData.mdx) | - | | [GetAddApprovalHashParams](/sdk-reference/comments/type-aliases/GetAddApprovalHashParams.mdx) | - | | [GetAddApprovalHashResult](/sdk-reference/comments/type-aliases/GetAddApprovalHashResult.mdx) | - | | [GetChannelManagerParams](/sdk-reference/comments/type-aliases/GetChannelManagerParams.mdx) | - | | [GetCommentIdParams](/sdk-reference/comments/type-aliases/GetCommentIdParams.mdx) | - | | [GetCommentParams](/sdk-reference/comments/type-aliases/GetCommentParams.mdx) | - | | [GetCommentResult](/sdk-reference/comments/type-aliases/GetCommentResult.mdx) | - | | [GetContractNameParams](/sdk-reference/comments/type-aliases/GetContractNameParams.mdx) | - | | [GetContractVersionParams](/sdk-reference/comments/type-aliases/GetContractVersionParams.mdx) | - | | [GetDeleteCommentHashParams](/sdk-reference/comments/type-aliases/GetDeleteCommentHashParams.mdx) | - | | [GetDomainSeparatorParams](/sdk-reference/comments/type-aliases/GetDomainSeparatorParams.mdx) | - | | [GetEditCommentHashParams](/sdk-reference/comments/type-aliases/GetEditCommentHashParams.mdx) | - | | [GetNonceParams](/sdk-reference/comments/type-aliases/GetNonceParams.mdx) | - | | [GetRemoveApprovalHashParams](/sdk-reference/comments/type-aliases/GetRemoveApprovalHashParams.mdx) | - | | [GetRemoveApprovalHashResult](/sdk-reference/comments/type-aliases/GetRemoveApprovalHashResult.mdx) | - | | [IsApprovedParams](/sdk-reference/comments/type-aliases/IsApprovedParams.mdx) | - | | [Json](/sdk-reference/comments/type-aliases/Json.mdx) | - | | [JsonArray](/sdk-reference/comments/type-aliases/JsonArray.mdx) | - | | [JsonLiteral](/sdk-reference/comments/type-aliases/JsonLiteral.mdx) | - | | [JsonObject](/sdk-reference/comments/type-aliases/JsonObject.mdx) | - | | [MetadataEntry](/sdk-reference/comments/type-aliases/MetadataEntry.mdx) | Metadata entry structure that matches the smart contract | | [MetadataEntryOp](/sdk-reference/comments/type-aliases/MetadataEntryOp.mdx) | - | | [MetadataRecord](/sdk-reference/comments/type-aliases/MetadataRecord.mdx) | JS/SDK/Indexer format for metadata storage | | [MetadataType](/sdk-reference/comments/type-aliases/MetadataType.mdx) | Type representing the supported on-chain serializable types | | [PostCommentParams](/sdk-reference/comments/type-aliases/PostCommentParams.mdx) | - | | [PostCommentResult](/sdk-reference/comments/type-aliases/PostCommentResult.mdx) | - | | [PostCommentWithSigParams](/sdk-reference/comments/type-aliases/PostCommentWithSigParams.mdx) | - | | [PostCommentWithSigResult](/sdk-reference/comments/type-aliases/PostCommentWithSigResult.mdx) | - | | [RemoveApprovalTypedDataSchemaType](/sdk-reference/comments/type-aliases/RemoveApprovalTypedDataSchemaType.mdx) | - | | [ReportCommentTypedDataSchemaType](/sdk-reference/comments/type-aliases/ReportCommentTypedDataSchemaType.mdx) | - | | [RevokeApprovalParams](/sdk-reference/comments/type-aliases/RevokeApprovalParams.mdx) | - | | [RevokeApprovalResult](/sdk-reference/comments/type-aliases/RevokeApprovalResult.mdx) | - | | [RevokeApprovalWithSigParams](/sdk-reference/comments/type-aliases/RevokeApprovalWithSigParams.mdx) | - | | [RevokeApprovalWithSigResult](/sdk-reference/comments/type-aliases/RevokeApprovalWithSigResult.mdx) | - | | [UpdateChannelContractParams](/sdk-reference/comments/type-aliases/UpdateChannelContractParams.mdx) | - | | [UpdateChannelContractResult](/sdk-reference/comments/type-aliases/UpdateChannelContractResult.mdx) | - | ### Variables | Variable | Description | | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | [ADD\_APPROVAL\_TYPE](/sdk-reference/comments/variables/ADD_APPROVAL_TYPE.mdx) | - | | [ADD\_COMMENT\_TYPE](/sdk-reference/comments/variables/ADD_COMMENT_TYPE.mdx) | - | | [AddApprovalTypedDataSchema](/sdk-reference/comments/variables/AddApprovalTypedDataSchema.mdx) | - | | [AddCommentTypedDataSchema](/sdk-reference/comments/variables/AddCommentTypedDataSchema.mdx) | - | | [CommentDataSchema](/sdk-reference/comments/variables/CommentDataSchema.mdx) | - | | [CommentInputDataSchema](/sdk-reference/comments/variables/CommentInputDataSchema.mdx) | Comment input data schema. This is used as input of the functions. | | [CommentTypeSchema](/sdk-reference/comments/variables/CommentTypeSchema.mdx) | - | | [CreateCommentDataSchema](/sdk-reference/comments/variables/CreateCommentDataSchema.mdx) | - | | [DELETE\_COMMENT\_TYPE](/sdk-reference/comments/variables/DELETE_COMMENT_TYPE.mdx) | - | | [deleteComment](/sdk-reference/comments/variables/deleteComment.mdx) | Delete a comment as an author | | [DeleteCommentTypedDataSchema](/sdk-reference/comments/variables/DeleteCommentTypedDataSchema.mdx) | - | | [deleteCommentWithSig](/sdk-reference/comments/variables/deleteCommentWithSig.mdx) | Delete a comment with app signature verification | | [DOMAIN\_NAME](/sdk-reference/comments/variables/DOMAIN_NAME.mdx) | - | | [DOMAIN\_VERSION](/sdk-reference/comments/variables/DOMAIN_VERSION.mdx) | - | | [EDIT\_COMMENT\_TYPE](/sdk-reference/comments/variables/EDIT_COMMENT_TYPE.mdx) | - | | [editComment](/sdk-reference/comments/variables/editComment.mdx) | Edit a comment as an author | | [EditCommentDataSchema](/sdk-reference/comments/variables/EditCommentDataSchema.mdx) | Edit comment data schema. This is used as input of the functions. | | [EditCommentTypedDataSchema](/sdk-reference/comments/variables/EditCommentTypedDataSchema.mdx) | - | | [editCommentWithSig](/sdk-reference/comments/variables/editCommentWithSig.mdx) | Edit a comment | | [JsonLiteralSchema](/sdk-reference/comments/variables/JsonLiteralSchema.mdx) | - | | [JsonObjectSchema](/sdk-reference/comments/variables/JsonObjectSchema.mdx) | - | | [JsonSchema](/sdk-reference/comments/variables/JsonSchema.mdx) | - | | [METADATA\_ENTRY\_TYPE](/sdk-reference/comments/variables/METADATA_ENTRY_TYPE.mdx) | - | | [MetadataArrayOpSchema](/sdk-reference/comments/variables/MetadataArrayOpSchema.mdx) | - | | [MetadataArraySchema](/sdk-reference/comments/variables/MetadataArraySchema.mdx) | - | | [MetadataEntryOpSchema](/sdk-reference/comments/variables/MetadataEntryOpSchema.mdx) | - | | [MetadataEntrySchema](/sdk-reference/comments/variables/MetadataEntrySchema.mdx) | - | | [MetadataTypeValues](/sdk-reference/comments/variables/MetadataTypeValues.mdx) | Constants object for MetadataType values - provides runtime access to all metadata types | | [postComment](/sdk-reference/comments/variables/postComment.mdx) | Posts a comment as an author | | [postCommentWithSig](/sdk-reference/comments/variables/postCommentWithSig.mdx) | Posts a comment with author signature verification | | [REMOVE\_APPROVAL\_TYPE](/sdk-reference/comments/variables/REMOVE_APPROVAL_TYPE.mdx) | - | | [RemoveApprovalTypedDataSchema](/sdk-reference/comments/variables/RemoveApprovalTypedDataSchema.mdx) | - | | [ReplyCommentInputDataSchema](/sdk-reference/comments/variables/ReplyCommentInputDataSchema.mdx) | - | | [REPORT\_COMMENT\_TYPE](/sdk-reference/comments/variables/REPORT_COMMENT_TYPE.mdx) | - | | [ReportCommentTypedDataSchema](/sdk-reference/comments/variables/ReportCommentTypedDataSchema.mdx) | - | | [RootCommentInputDataSchema](/sdk-reference/comments/variables/RootCommentInputDataSchema.mdx) | - | ### Functions | Function | Description | | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | [addApproval](/sdk-reference/comments/functions/addApproval.mdx) | Approves an app signer directly as author | | [addApprovalWithSig](/sdk-reference/comments/functions/addApprovalWithSig.mdx) | Adds an app signer approval with signature verification | | [convertContractToRecordFormat](/sdk-reference/comments/functions/convertContractToRecordFormat.mdx) | Converts from contract MetadataEntry array format to JS/SDK Record format Note: This requires knowledge of the original key string and type, which are lost in the contract format. This function attempts to reverse-engineer them from common patterns used in the codebase. | | [convertRecordToContractFormat](/sdk-reference/comments/functions/convertRecordToContractFormat.mdx) | Converts from JS/SDK Record format to contract MetadataEntry array format | | [createApprovalTypedData](/sdk-reference/comments/functions/createApprovalTypedData.mdx) | Create the EIP-712 typed data structure for approving comment | | [createCommentData](/sdk-reference/comments/functions/createCommentData.mdx) | Create the data structure of a comment | | [createCommentTypedData](/sdk-reference/comments/functions/createCommentTypedData.mdx) | Create the EIP-712 typed data structure for adding comment | | [createCustomMetadataEntry](/sdk-reference/comments/functions/createCustomMetadataEntry.mdx) | Creates a metadata entry with a custom type | | [createDeleteCommentTypedData](/sdk-reference/comments/functions/createDeleteCommentTypedData.mdx) | Create the EIP-712 typed data structure for deleting comment | | [createEditCommentData](/sdk-reference/comments/functions/createEditCommentData.mdx) | Create the data structure of a comment for editing | | [createEditCommentTypedData](/sdk-reference/comments/functions/createEditCommentTypedData.mdx) | Create the EIP-712 typed data structure for editing comment | | [createKeyTypeMap](/sdk-reference/comments/functions/createKeyTypeMap.mdx) | Helper function to create a key-type mapping for known metadata keys This should be maintained by applications to properly convert from contract format | | [createMetadataEntries](/sdk-reference/comments/functions/createMetadataEntries.mdx) | Creates multiple metadata entries from an object with explicit types | | [createMetadataEntry](/sdk-reference/comments/functions/createMetadataEntry.mdx) | Creates a metadata entry from a key-value pair with explicit type specification | | [createMetadataKey](/sdk-reference/comments/functions/createMetadataKey.mdx) | Creates a metadata key by encoding a string in the format "type key" using abi.encodePacked | | [createRemoveApprovalTypedData](/sdk-reference/comments/functions/createRemoveApprovalTypedData.mdx) | Create the EIP-712 typed data structure for removing approval | | [createReportCommentTypedData](/sdk-reference/comments/functions/createReportCommentTypedData.mdx) | Create the EIP-712 typed data structure for reporting a comment | | [decodeAddressValue](/sdk-reference/comments/functions/decodeAddressValue.mdx) | Decodes an address value from encoded metadata bytes | | [decodeBoolValue](/sdk-reference/comments/functions/decodeBoolValue.mdx) | Decodes a boolean value from encoded metadata bytes | | [decodeBytesValue](/sdk-reference/comments/functions/decodeBytesValue.mdx) | Decodes a bytes value from encoded metadata bytes | | [decodeMetadataTypes](/sdk-reference/comments/functions/decodeMetadataTypes.mdx) | Decodes metadata types from on-chain metadata entries by reverse-engineering the type information from the encoded key field. Works without requiring prior knowledge of the key-type mappings. | | [decodeMetadataValue](/sdk-reference/comments/functions/decodeMetadataValue.mdx) | Decodes a metadata entry value based on its type | | [decodeNumberValue](/sdk-reference/comments/functions/decodeNumberValue.mdx) | Decodes a number value from encoded metadata bytes | | [decodeStringValue](/sdk-reference/comments/functions/decodeStringValue.mdx) | Decodes a string value from encoded metadata bytes | | [encodeBoolValue](/sdk-reference/comments/functions/encodeBoolValue.mdx) | Encodes a boolean value as bytes for metadata | | [encodeJsonValue](/sdk-reference/comments/functions/encodeJsonValue.mdx) | Encodes a JSON object as bytes for metadata | | [encodeNumberValue](/sdk-reference/comments/functions/encodeNumberValue.mdx) | Encodes a number value as bytes for metadata | | [encodeStringValue](/sdk-reference/comments/functions/encodeStringValue.mdx) | Encodes a string value as bytes for metadata | | [getAddApprovalHash](/sdk-reference/comments/functions/getAddApprovalHash.mdx) | Gets the EIP-712 hash for adding approval | | [getChannelManager](/sdk-reference/comments/functions/getChannelManager.mdx) | Gets the channel manager contract address | | [getComment](/sdk-reference/comments/functions/getComment.mdx) | Get a comment by ID | | [getCommentId](/sdk-reference/comments/functions/getCommentId.mdx) | Get the ID for a comment before it is posted | | [getContractName](/sdk-reference/comments/functions/getContractName.mdx) | Gets the contract name | | [getContractVersion](/sdk-reference/comments/functions/getContractVersion.mdx) | Gets the contract version | | [getDeleteCommentHash](/sdk-reference/comments/functions/getDeleteCommentHash.mdx) | Get the hash for deleting a comment | | [getDomainSeparator](/sdk-reference/comments/functions/getDomainSeparator.mdx) | Gets the EIP-712 domain separator | | [getEditCommentHash](/sdk-reference/comments/functions/getEditCommentHash.mdx) | Get the hash for editing a comment | | [getNonce](/sdk-reference/comments/functions/getNonce.mdx) | Get the nonce for the author and app signer | | [getRemoveApprovalHash](/sdk-reference/comments/functions/getRemoveApprovalHash.mdx) | Gets the EIP-712 hash for removing approval | | [isApproved](/sdk-reference/comments/functions/isApproved.mdx) | Checks if an app signer is approved for an author | | [parseMetadataFromContract](/sdk-reference/comments/functions/parseMetadataFromContract.mdx) | Convenience function to convert metadata from contracts for JS/SDK use | | [prepareMetadataForContract](/sdk-reference/comments/functions/prepareMetadataForContract.mdx) | Convenience function to convert metadata for sending to contracts Handles both Record format and direct MetadataEntry array | | [revokeApproval](/sdk-reference/comments/functions/revokeApproval.mdx) | Revokes an app signer approval directly as author | | [revokeApprovalWithSig](/sdk-reference/comments/functions/revokeApprovalWithSig.mdx) | Removes an app signer approval with signature verification | | [updateChannelContract](/sdk-reference/comments/functions/updateChannelContract.mdx) | Updates the channel manager contract address (only owner) | [**@ecp.eth/sdk**](../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / core ## core Ethereum Comments Protocol SDK Core Core functionality for the Ethereum Comments Protocol ### Type Aliases | Type Alias | Description | | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | | [Hex](/sdk-reference/core/type-aliases/Hex.mdx) | type for hex format string, e.g. `0x1234567890abcdef` | | [RunAsyncOptions](/sdk-reference/core/type-aliases/RunAsyncOptions.mdx) | - | | [WaitableWriteContractHelperResult](/sdk-reference/core/type-aliases/WaitableWriteContractHelperResult.mdx) | - | | [WriteContractHelperResult](/sdk-reference/core/type-aliases/WriteContractHelperResult.mdx) | The result of a write contract function | ### Variables | Variable | Description | | -------------------------------------------------------- | ----------- | | [HexSchema](/sdk-reference/core/variables/HexSchema.mdx) | - | ### Functions | Function | Description | | -------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [createWaitableWriteContractHelper](/sdk-reference/core/functions/createWaitableWriteContractHelper.mdx) | This function wraps the write function to add a `wait()` method in the returned object. The `wait()` method waits the transaction receipt and returns the event arguments specified by the write function, within the transaction. | | [isZeroHex](/sdk-reference/core/functions/isZeroHex.mdx) | Check if a hex string is zero | | [runAsync](/sdk-reference/core/functions/runAsync.mdx) | Run an async function with retries and backoff. | [**@ecp.eth/sdk**](../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / defaultExports ## defaultExports Ethereum Comments Protocol SDK default exports ### Type Aliases | Type Alias | Description | | ------------------------------------------------------------------------------------------- | ----------- | | [SupportedChainConfig](/sdk-reference/defaultExports/type-aliases/SupportedChainConfig.mdx) | - | ### Variables | Variable | Description | | ------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [CHANNEL\_MANAGER\_ADDRESS](/sdk-reference/defaultExports/variables/CHANNEL_MANAGER_ADDRESS.mdx) | The address of the ChannelManager contract. | | [ChannelManagerABI](/sdk-reference/defaultExports/variables/ChannelManagerABI.mdx) | ABI of the ChannelManager contract. | | [COMMENT\_MANAGER\_ADDRESS](/sdk-reference/defaultExports/variables/COMMENT_MANAGER_ADDRESS.mdx) | The address of the `CommentManager` contract. It is created using the CREATE2 opcode so should be identical across chains if no collisions occur. | | [COMMENT\_TYPE\_COMMENT](/sdk-reference/defaultExports/variables/COMMENT_TYPE_COMMENT.mdx) | Comment type constants | | [COMMENT\_TYPE\_REACTION](/sdk-reference/defaultExports/variables/COMMENT_TYPE_REACTION.mdx) | - | | [CommentManagerABI](/sdk-reference/defaultExports/variables/CommentManagerABI.mdx) | ABI of the CommentManager contract. | | [COMMENTS\_EMBED\_DEFAULT\_BY\_AUTHOR\_URL](/sdk-reference/defaultExports/variables/COMMENTS_EMBED_DEFAULT_BY_AUTHOR_URL.mdx) | The default `embedUri` for the CommentsByAuthorEmbed component. It runs a service that creates app signatures for requests and submits the transaction to the `CommentManager` contract. | | [COMMENTS\_EMBED\_DEFAULT\_BY\_REPLIES\_URL](/sdk-reference/defaultExports/variables/COMMENTS_EMBED_DEFAULT_BY_REPLIES_URL.mdx) | The default `embedUri` for the CommentsByRepliesEmbed component. It runs a service that creates app signatures for requests and submits the transaction to the `CommentManager` contract. | | [COMMENTS\_EMBED\_DEFAULT\_URL](/sdk-reference/defaultExports/variables/COMMENTS_EMBED_DEFAULT_URL.mdx) | The default `embedUri` for the CommentsEmbed component. It runs a service that creates app signatures for requests and submits the transaction to the `CommentManager` contract. | | [DEFAULT\_CHAIN\_ID](/sdk-reference/defaultExports/variables/DEFAULT_CHAIN_ID.mdx) | - | | [DEFAULT\_CHAIN\_ID\_DEV](/sdk-reference/defaultExports/variables/DEFAULT_CHAIN_ID_DEV.mdx) | - | | [DEFAULT\_CHANNEL\_ID](/sdk-reference/defaultExports/variables/DEFAULT_CHANNEL_ID.mdx) | The default channel ID for the CommentManager contract. | | [DEFAULT\_COMMENT\_TYPE](/sdk-reference/defaultExports/variables/DEFAULT_COMMENT_TYPE.mdx) | The default comment type for the `CommentManager` contract. | | [EMPTY\_PARENT\_ID](/sdk-reference/defaultExports/variables/EMPTY_PARENT_ID.mdx) | The parent ID for comments that are not replies. | | [INDEXER\_API\_URL](/sdk-reference/defaultExports/variables/INDEXER_API_URL.mdx) | The default URL for the Indexer API. | | [MAX\_COMMENT\_REPORT\_MESSAGE\_LENGTH](/sdk-reference/defaultExports/variables/MAX_COMMENT_REPORT_MESSAGE_LENGTH.mdx) | The maximum length of a message for comment report. | | [SUPPORTED\_CHAINS](/sdk-reference/defaultExports/variables/SUPPORTED_CHAINS.mdx) | The supported chains and their corresponding contract addresses. | | [ZERO\_ADDRESS](/sdk-reference/defaultExports/variables/ZERO_ADDRESS.mdx) | The zero address. | [**@ecp.eth/sdk**](../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / embed ## embed Ethereum Comments Protocol SDK Embed Functionality for embedding comments in web applications ### Components | Function | Description | | ----------------------------------------------------------------------------------- | ---------------------------------------------------------------- | | [CommentsByAuthorEmbed](/sdk-reference/embed/functions/CommentsByAuthorEmbed.mdx) | Renders comments embed iframe for the given author. | | [CommentsByRepliesEmbed](/sdk-reference/embed/functions/CommentsByRepliesEmbed.mdx) | Renders comments embed iframe for replies to a specific comment. | | [CommentsEmbed](/sdk-reference/embed/functions/CommentsEmbed.mdx) | Renders comments embed iframe for the given uri. | ### Other | Name | Description | | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | | [CommentsByAuthorEmbedProps](/sdk-reference/embed/type-aliases/CommentsByAuthorEmbedProps.mdx) | - | | [CommentsByRepliesEmbedProps](/sdk-reference/embed/type-aliases/CommentsByRepliesEmbedProps.mdx) | - | | [CommentsEmbedProps](/sdk-reference/embed/type-aliases/CommentsEmbedProps.mdx) | The props for `` component. | | [CreateCommentsEmbedURLParams](/sdk-reference/embed/type-aliases/CreateCommentsEmbedURLParams.mdx) | Parameters for `createCommentsEmbedURL` | | [EmbedConfigFontSchemaType](/sdk-reference/embed/type-aliases/EmbedConfigFontSchemaType.mdx) | - | | [EmbedConfigSchemaInputType](/sdk-reference/embed/type-aliases/EmbedConfigSchemaInputType.mdx) | Custom configuration for `` component. | | [EmbedConfigSchemaOutputType](/sdk-reference/embed/type-aliases/EmbedConfigSchemaOutputType.mdx) | - | | [EmbedConfigSupportedChainIdsSchemaType](/sdk-reference/embed/type-aliases/EmbedConfigSupportedChainIdsSchemaType.mdx) | The type for supported chain ids | | [EmbedConfigThemeColorsSchemaType](/sdk-reference/embed/type-aliases/EmbedConfigThemeColorsSchemaType.mdx) | - | | [EmbedConfigThemeOtherSchemaType](/sdk-reference/embed/type-aliases/EmbedConfigThemeOtherSchemaType.mdx) | - | | [EmbedConfigThemePaletteSchemaType](/sdk-reference/embed/type-aliases/EmbedConfigThemePaletteSchemaType.mdx) | - | | [EmbedConfigThemeSchemaType](/sdk-reference/embed/type-aliases/EmbedConfigThemeSchemaType.mdx) | The type for embed theme configuration | | [EmbedGetDimensionsEventSchemaType](/sdk-reference/embed/type-aliases/EmbedGetDimensionsEventSchemaType.mdx) | - | | [EmbedResizedEventSchemaType](/sdk-reference/embed/type-aliases/EmbedResizedEventSchemaType.mdx) | - | | [EmbedConfigFontSchema](/sdk-reference/embed/variables/EmbedConfigFontSchema.mdx) | - | | [EmbedConfigFontSizeSchema](/sdk-reference/embed/variables/EmbedConfigFontSizeSchema.mdx) | - | | [EmbedConfigSchema](/sdk-reference/embed/variables/EmbedConfigSchema.mdx) | The zod schema for `EmbedConfigSchemaType` | | [EmbedConfigSupportedChainIdsSchema](/sdk-reference/embed/variables/EmbedConfigSupportedChainIdsSchema.mdx) | The zod schema for supported chain ids | | [EmbedConfigSupportedFont](/sdk-reference/embed/variables/EmbedConfigSupportedFont.mdx) | It supports the following fonts from GoogleFonts | | [EmbedConfigThemeColorsSchema](/sdk-reference/embed/variables/EmbedConfigThemeColorsSchema.mdx) | - | | [EmbedConfigThemeOtherSchema](/sdk-reference/embed/variables/EmbedConfigThemeOtherSchema.mdx) | - | | [EmbedConfigThemePaletteSchema](/sdk-reference/embed/variables/EmbedConfigThemePaletteSchema.mdx) | - | | [EmbedConfigThemeSchema](/sdk-reference/embed/variables/EmbedConfigThemeSchema.mdx) | The zod schema for embed theme configuration | | [EmbedGetDimensionsEventSchema](/sdk-reference/embed/variables/EmbedGetDimensionsEventSchema.mdx) | - | | [EmbedResizedEventSchema](/sdk-reference/embed/variables/EmbedResizedEventSchema.mdx) | - | | [createCommentsEmbedURL](/sdk-reference/embed/functions/createCommentsEmbedURL.mdx) | Creates a URL for the comments embed iframe. | [**@ecp.eth/sdk**](../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / indexer ## indexer Ethereum Comments Protocol SDK Indexer Functionality for indexing and querying comments data ### Type Aliases | Type Alias | Description | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | | [FetchAuthorDataOptions](/sdk-reference/indexer/type-aliases/FetchAuthorDataOptions.mdx) | The options for `fetchAuthorData()` | | [FetchAutocompleteOptions](/sdk-reference/indexer/type-aliases/FetchAutocompleteOptions.mdx) | The options for `fetchAutocomplete()` | | [FetchChannelOptions](/sdk-reference/indexer/type-aliases/FetchChannelOptions.mdx) | The options for `fetchChannel()` | | [FetchChannelsOptions](/sdk-reference/indexer/type-aliases/FetchChannelsOptions.mdx) | The options for `fetchChannels()` | | [FetchCommentOptions](/sdk-reference/indexer/type-aliases/FetchCommentOptions.mdx) | - | | [FetchCommentRepliesOptions](/sdk-reference/indexer/type-aliases/FetchCommentRepliesOptions.mdx) | The options for `fetchCommentReplies()` | | [FetchCommentsOptions](/sdk-reference/indexer/type-aliases/FetchCommentsOptions.mdx) | The options for `fetchComments()` | | [IndexerAPIAuthorDataSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIAuthorDataSchemaType.mdx) | - | | [IndexerAPIAuthorEnsDataSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIAuthorEnsDataSchemaType.mdx) | - | | [IndexerAPIAutocompleteENSSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIAutocompleteENSSchemaType.mdx) | - | | [IndexerAPIAutocompleteERC20SchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIAutocompleteERC20SchemaType.mdx) | - | | [IndexerAPIAutocompleteFarcasterSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIAutocompleteFarcasterSchemaType.mdx) | - | | [IndexerAPIAutocompleteSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIAutocompleteSchemaType.mdx) | - | | [IndexerAPIChannelOutputSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIChannelOutputSchemaType.mdx) | - | | [IndexerAPIChannelSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIChannelSchemaType.mdx) | - | | [IndexerAPICommentListModeSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentListModeSchemaType.mdx) | - | | [IndexerAPICommentModerationStatusSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentModerationStatusSchemaType.mdx) | - | | [IndexerAPICommentOutputSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentOutputSchemaType.mdx) | - | | [IndexerAPICommentReactionSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentReactionSchemaType.mdx) | - | | [IndexerAPICommentReferenceENSSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentReferenceENSSchemaType.mdx) | - | | [IndexerAPICommentReferenceERC20SchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentReferenceERC20SchemaType.mdx) | - | | [IndexerAPICommentReferenceFarcasterSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentReferenceFarcasterSchemaType.mdx) | - | | [IndexerAPICommentReferenceSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentReferenceSchemaType.mdx) | - | | [IndexerAPICommentReferencesSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentReferencesSchemaType.mdx) | - | | [IndexerAPICommentReferenceURLFileSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentReferenceURLFileSchemaType.mdx) | - | | [IndexerAPICommentReferenceURLImageSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentReferenceURLImageSchemaType.mdx) | - | | [IndexerAPICommentReferenceURLVideoSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentReferenceURLVideoSchemaType.mdx) | - | | [IndexerAPICommentReferenceURLWebPageSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentReferenceURLWebPageSchemaType.mdx) | - | | [IndexerAPICommentSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx) | - | | [IndexerAPICommentWithRepliesOutputSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentWithRepliesOutputSchemaType.mdx) | - | | [IndexerAPICommentWithRepliesSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentWithRepliesSchemaType.mdx) | - | | [IndexerAPICommentZeroExSwapSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentZeroExSwapSchemaType.mdx) | - | | [IndexerAPICursorPaginationSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICursorPaginationSchemaType.mdx) | - | | [IndexerAPIExtraSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIExtraSchemaType.mdx) | - | | [IndexerAPIFarcasterDataSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIFarcasterDataSchemaType.mdx) | - | | [IndexerAPIGetAutocompleteOutputSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIGetAutocompleteOutputSchemaType.mdx) | - | | [IndexerAPIListChannelsOutputSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIListChannelsOutputSchemaType.mdx) | - | | [IndexerAPIListChannelsSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIListChannelsSchemaType.mdx) | - | | [IndexerAPIListCommentRepliesOutputSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIListCommentRepliesOutputSchemaType.mdx) | - | | [IndexerAPIListCommentRepliesSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIListCommentRepliesSchemaType.mdx) | - | | [IndexerAPIListCommentsOutputSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIListCommentsOutputSchemaType.mdx) | - | | [IndexerAPIListCommentsSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIListCommentsSchemaType.mdx) | - | | [IndexerAPIMetadataEntrySchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIMetadataEntrySchemaType.mdx) | - | | [IndexerAPIMetadataSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIMetadataSchemaType.mdx) | - | | [IndexerAPIModerationChangeModerationStatusOnCommentOutputSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIModerationChangeModerationStatusOnCommentOutputSchemaType.mdx) | - | | [IndexerAPIModerationChangeModerationStatusOnCommentSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIModerationChangeModerationStatusOnCommentSchemaType.mdx) | - | | [IndexerAPIModerationClassificationLabelSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIModerationClassificationLabelSchemaType.mdx) | - | | [IndexerAPIModerationGetPendingCommentsOutputSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIModerationGetPendingCommentsOutputSchemaType.mdx) | - | | [IndexerAPIModerationGetPendingCommentsSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIModerationGetPendingCommentsSchemaType.mdx) | - | | [IndexerAPIPaginationSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIPaginationSchemaType.mdx) | - | | [IndexerAPIReportOutputSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIReportOutputSchemaType.mdx) | - | | [IndexerAPIReportSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIReportSchemaType.mdx) | - | | [IndexerAPIReportsListPendingOutputSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIReportsListPendingOutputSchemaType.mdx) | - | | [IndexerAPIReportsListPendingSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIReportsListPendingSchemaType.mdx) | - | | [IndexerAPISortSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPISortSchemaType.mdx) | - | | [IsMutedOptions](/sdk-reference/indexer/type-aliases/IsMutedOptions.mdx) | The options for `isMuted()` | | [ReportCommentOptions](/sdk-reference/indexer/type-aliases/ReportCommentOptions.mdx) | The options for `reportComment()` | ### Variables | Variable | Description | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | | [IndexerAPIAuthorDataSchema](/sdk-reference/indexer/variables/IndexerAPIAuthorDataSchema.mdx) | - | | [IndexerAPIAuthorEnsDataSchema](/sdk-reference/indexer/variables/IndexerAPIAuthorEnsDataSchema.mdx) | - | | [IndexerAPIAutocompleteENSSchema](/sdk-reference/indexer/variables/IndexerAPIAutocompleteENSSchema.mdx) | - | | [IndexerAPIAutocompleteERC20Schema](/sdk-reference/indexer/variables/IndexerAPIAutocompleteERC20Schema.mdx) | - | | [IndexerAPIAutocompleteFarcasterSchema](/sdk-reference/indexer/variables/IndexerAPIAutocompleteFarcasterSchema.mdx) | - | | [IndexerAPIAutocompleteSchema](/sdk-reference/indexer/variables/IndexerAPIAutocompleteSchema.mdx) | - | | [IndexerAPIChannelOutputSchema](/sdk-reference/indexer/variables/IndexerAPIChannelOutputSchema.mdx) | - | | [IndexerAPIChannelSchema](/sdk-reference/indexer/variables/IndexerAPIChannelSchema.mdx) | - | | [IndexerAPICommentListModeSchema](/sdk-reference/indexer/variables/IndexerAPICommentListModeSchema.mdx) | - | | [IndexerAPICommentModerationStatusSchema](/sdk-reference/indexer/variables/IndexerAPICommentModerationStatusSchema.mdx) | - | | [IndexerAPICommentOutputSchema](/sdk-reference/indexer/variables/IndexerAPICommentOutputSchema.mdx) | - | | [IndexerAPICommentReactionOutputSchema](/sdk-reference/indexer/variables/IndexerAPICommentReactionOutputSchema.mdx) | - | | [IndexerAPICommentReactionSchema](/sdk-reference/indexer/variables/IndexerAPICommentReactionSchema.mdx) | - | | [IndexerAPICommentReferenceENSSchema](/sdk-reference/indexer/variables/IndexerAPICommentReferenceENSSchema.mdx) | - | | [IndexerAPICommentReferenceERC20Schema](/sdk-reference/indexer/variables/IndexerAPICommentReferenceERC20Schema.mdx) | - | | [IndexerAPICommentReferenceFarcasterSchema](/sdk-reference/indexer/variables/IndexerAPICommentReferenceFarcasterSchema.mdx) | - | | [IndexerAPICommentReferencePositionSchema](/sdk-reference/indexer/variables/IndexerAPICommentReferencePositionSchema.mdx) | - | | [IndexerAPICommentReferenceSchema](/sdk-reference/indexer/variables/IndexerAPICommentReferenceSchema.mdx) | - | | [IndexerAPICommentReferencesSchema](/sdk-reference/indexer/variables/IndexerAPICommentReferencesSchema.mdx) | - | | [IndexerAPICommentReferenceURLFileSchema](/sdk-reference/indexer/variables/IndexerAPICommentReferenceURLFileSchema.mdx) | - | | [IndexerAPICommentReferenceURLImageSchema](/sdk-reference/indexer/variables/IndexerAPICommentReferenceURLImageSchema.mdx) | - | | [IndexerAPICommentReferenceURLVideoSchema](/sdk-reference/indexer/variables/IndexerAPICommentReferenceURLVideoSchema.mdx) | - | | [IndexerAPICommentReferenceURLWebPageSchema](/sdk-reference/indexer/variables/IndexerAPICommentReferenceURLWebPageSchema.mdx) | - | | [IndexerAPICommentSchema](/sdk-reference/indexer/variables/IndexerAPICommentSchema.mdx) | - | | [IndexerAPICommentWithRepliesOutputSchema](/sdk-reference/indexer/variables/IndexerAPICommentWithRepliesOutputSchema.mdx) | - | | [IndexerAPICommentWithRepliesSchema](/sdk-reference/indexer/variables/IndexerAPICommentWithRepliesSchema.mdx) | - | | [IndexerAPICommentZeroExSwapSchema](/sdk-reference/indexer/variables/IndexerAPICommentZeroExSwapSchema.mdx) | - | | [IndexerAPICursorPaginationSchema](/sdk-reference/indexer/variables/IndexerAPICursorPaginationSchema.mdx) | - | | [IndexerAPIExtraSchema](/sdk-reference/indexer/variables/IndexerAPIExtraSchema.mdx) | - | | [IndexerAPIFarcasterDataSchema](/sdk-reference/indexer/variables/IndexerAPIFarcasterDataSchema.mdx) | - | | [IndexerAPIGetAutocompleteOutputSchema](/sdk-reference/indexer/variables/IndexerAPIGetAutocompleteOutputSchema.mdx) | - | | [IndexerAPIListChannelsOutputSchema](/sdk-reference/indexer/variables/IndexerAPIListChannelsOutputSchema.mdx) | - | | [IndexerAPIListChannelsSchema](/sdk-reference/indexer/variables/IndexerAPIListChannelsSchema.mdx) | - | | [IndexerAPIListCommentRepliesOutputSchema](/sdk-reference/indexer/variables/IndexerAPIListCommentRepliesOutputSchema.mdx) | - | | [IndexerAPIListCommentRepliesSchema](/sdk-reference/indexer/variables/IndexerAPIListCommentRepliesSchema.mdx) | - | | [IndexerAPIListCommentsOutputSchema](/sdk-reference/indexer/variables/IndexerAPIListCommentsOutputSchema.mdx) | - | | [IndexerAPIListCommentsSchema](/sdk-reference/indexer/variables/IndexerAPIListCommentsSchema.mdx) | - | | [IndexerAPIMetadataEntrySchema](/sdk-reference/indexer/variables/IndexerAPIMetadataEntrySchema.mdx) | - | | [IndexerAPIMetadataSchema](/sdk-reference/indexer/variables/IndexerAPIMetadataSchema.mdx) | - | | [IndexerAPIModerationChangeModerationStatusOnCommentOutputSchema](/sdk-reference/indexer/variables/IndexerAPIModerationChangeModerationStatusOnCommentOutputSchema.mdx) | - | | [IndexerAPIModerationChangeModerationStatusOnCommentSchema](/sdk-reference/indexer/variables/IndexerAPIModerationChangeModerationStatusOnCommentSchema.mdx) | - | | [IndexerAPIModerationClassificationLabelSchema](/sdk-reference/indexer/variables/IndexerAPIModerationClassificationLabelSchema.mdx) | - | | [IndexerAPIModerationGetPendingCommentsOutputSchema](/sdk-reference/indexer/variables/IndexerAPIModerationGetPendingCommentsOutputSchema.mdx) | - | | [IndexerAPIModerationGetPendingCommentsSchema](/sdk-reference/indexer/variables/IndexerAPIModerationGetPendingCommentsSchema.mdx) | - | | [IndexerAPIPaginationSchema](/sdk-reference/indexer/variables/IndexerAPIPaginationSchema.mdx) | - | | [IndexerAPIReportOutputSchema](/sdk-reference/indexer/variables/IndexerAPIReportOutputSchema.mdx) | - | | [IndexerAPIReportSchema](/sdk-reference/indexer/variables/IndexerAPIReportSchema.mdx) | - | | [IndexerAPIReportsListPendingOutputSchema](/sdk-reference/indexer/variables/IndexerAPIReportsListPendingOutputSchema.mdx) | - | | [IndexerAPIReportsListPendingSchema](/sdk-reference/indexer/variables/IndexerAPIReportsListPendingSchema.mdx) | - | | [IndexerAPIReportStatusSchema](/sdk-reference/indexer/variables/IndexerAPIReportStatusSchema.mdx) | - | | [IndexerAPISortSchema](/sdk-reference/indexer/variables/IndexerAPISortSchema.mdx) | - | | [IndexerAPIZeroExSwapPossibleEmptyAddressSchema](/sdk-reference/indexer/variables/IndexerAPIZeroExSwapPossibleEmptyAddressSchema.mdx) | - | | [IndexerAPIZeroExSwapPossiblyEmptyTokenAmountSchema](/sdk-reference/indexer/variables/IndexerAPIZeroExSwapPossiblyEmptyTokenAmountSchema.mdx) | - | | [IndexerAPIZeroExTokenAmountSchema](/sdk-reference/indexer/variables/IndexerAPIZeroExTokenAmountSchema.mdx) | - | ### Functions | Function | Description | | ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | | [convertIndexerMetadataToRecord](/sdk-reference/indexer/functions/convertIndexerMetadataToRecord.mdx) | Converts IndexerAPI MetadataEntry array to Record format for easier manipulation | | [convertRecordToIndexerMetadata](/sdk-reference/indexer/functions/convertRecordToIndexerMetadata.mdx) | Converts Record format metadata to IndexerAPI MetadataEntry array format | | [fetchAuthorData](/sdk-reference/indexer/functions/fetchAuthorData.mdx) | Fetch author data from the Indexer API | | [fetchAutocomplete](/sdk-reference/indexer/functions/fetchAutocomplete.mdx) | Fetch autocomplete suggestions from the Indexer API | | [fetchChannel](/sdk-reference/indexer/functions/fetchChannel.mdx) | Fetch a single channel by ID from the Indexer API | | [fetchChannels](/sdk-reference/indexer/functions/fetchChannels.mdx) | Fetch channels from the Indexer API | | [fetchComment](/sdk-reference/indexer/functions/fetchComment.mdx) | Fetch one single comment from the Indexer API | | [fetchCommentReplies](/sdk-reference/indexer/functions/fetchCommentReplies.mdx) | Fetch replies for a comment from the Indexer API | | [fetchComments](/sdk-reference/indexer/functions/fetchComments.mdx) | Fetch comments from the Indexer API | | [getChannelCursor](/sdk-reference/indexer/functions/getChannelCursor.mdx) | Get the cursor for a channel | | [getCommentCursor](/sdk-reference/indexer/functions/getCommentCursor.mdx) | Get the cursor for a comment | | [getReportsCursor](/sdk-reference/indexer/functions/getReportsCursor.mdx) | Get the cursor for a report | | [isMuted](/sdk-reference/indexer/functions/isMuted.mdx) | Checks if an address is marked as a muted on the indexer of your choice. | | [reportComment](/sdk-reference/indexer/functions/reportComment.mdx) | Report a comment to the Indexer API | ### References #### convertContractToRecordFormat Re-exports [convertContractToRecordFormat](/sdk-reference/comments/functions/convertContractToRecordFormat.mdx) *** #### convertRecordToContractFormat Re-exports [convertRecordToContractFormat](/sdk-reference/comments/functions/convertRecordToContractFormat.mdx) *** #### createKeyTypeMap Re-exports [createKeyTypeMap](/sdk-reference/comments/functions/createKeyTypeMap.mdx) *** #### MetadataRecord Re-exports [MetadataRecord](/sdk-reference/comments/type-aliases/MetadataRecord.mdx) *** #### MetadataType Re-exports [MetadataType](/sdk-reference/comments/type-aliases/MetadataType.mdx) *** #### parseMetadataFromContract Re-exports [parseMetadataFromContract](/sdk-reference/comments/functions/parseMetadataFromContract.mdx) *** #### prepareMetadataForContract Re-exports [prepareMetadataForContract](/sdk-reference/comments/functions/prepareMetadataForContract.mdx) [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / channelExists ## Function: channelExists() ```ts function channelExists(params): Promise; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:283 Check if a channel exists ### Parameters #### params [`ChannelExistsParams`](/sdk-reference/channel-manager/type-aliases/ChannelExistsParams.mdx) The parameters for checking if a channel exists ### Returns `Promise`\<`boolean`> Whether the channel exists [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / deductProtocolHookTransactionFee ## Function: deductProtocolHookTransactionFee() ```ts function deductProtocolHookTransactionFee(params): Promise; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:176 Calculates the hook transaction fee by deducting the protocol fee ### Parameters #### params [`DeductProtocolHookTransactionFeeParams`](/sdk-reference/channel-manager/type-aliases/DeductProtocolHookTransactionFeeParams.mdx) The total value sent with the transaction ### Returns `Promise`\<[`DeductProtocolHookTransactionFeeResult`](/sdk-reference/channel-manager/type-aliases/DeductProtocolHookTransactionFeeResult.mdx)> The amount that should be passed to the hook [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / getChannel ## Function: getChannel() ```ts function getChannel(params): Promise; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:123 Get a channel ### Parameters #### params [`GetChannelParams`](/sdk-reference/channel-manager/type-aliases/GetChannelParams.mdx) The parameters for getting a channel ### Returns `Promise`\<[`GetChannelResult`](/sdk-reference/channel-manager/type-aliases/GetChannelResult.mdx)> The channel ### Throws If the channel does not exist [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / getChannelCreationFee ## Function: getChannelCreationFee() ```ts function getChannelCreationFee(params): Promise; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:368 Get the creation fee from channel manager ### Parameters #### params [`GetChannelCreationFeeParams`](/sdk-reference/channel-manager/type-aliases/GetChannelCreationFeeParams.mdx) The parameters for getting the creation fee from channel manager ### Returns `Promise`\<[`GetChannelCreationFeeResult`](/sdk-reference/channel-manager/type-aliases/GetChannelCreationFeeResult.mdx)> The creation fee from channel manager [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / getChannelMetadata ## Function: getChannelMetadata() ```ts function getChannelMetadata(params): Promise; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:174 Get channel metadata ### Parameters #### params [`GetChannelMetadataParams`](/sdk-reference/channel-manager/type-aliases/GetChannelMetadataParams.mdx) The parameters for getting channel metadata ### Returns `Promise`\<[`GetChannelMetadataResult`](/sdk-reference/channel-manager/type-aliases/GetChannelMetadataResult.mdx)> The channel metadata ### Throws If the channel does not exist [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / getHookTransactionFee ## Function: getHookTransactionFee() ```ts function getHookTransactionFee(params): Promise; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:81 Get the hook transaction fee from channel manager ### Parameters #### params [`GetHookTransactionFeeParams`](/sdk-reference/channel-manager/type-aliases/GetHookTransactionFeeParams.mdx) The parameters for getting the hook transaction fee from channel manager ### Returns `Promise`\<[`GetHookTransactionFeeResult`](/sdk-reference/channel-manager/type-aliases/GetHookTransactionFeeResult.mdx)> The hook transaction fee from channel manager [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / ownerOf ## Function: ownerOf() ```ts function ownerOf(params): Promise; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:328 Get the owner of a channel ### Parameters #### params [`OwnerOfParams`](/sdk-reference/channel-manager/type-aliases/OwnerOfParams.mdx) The parameters for getting the owner of a channel ### Returns `Promise`\<[`OwnerOfResult`](/sdk-reference/channel-manager/type-aliases/OwnerOfResult.mdx)> The owner of the channel [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / setBaseURI ## Function: setBaseURI() ```ts function setBaseURI(params): Promise; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:503 Sets the base URI for NFT metadata ### Parameters #### params [`SetBaseURIParams`](/sdk-reference/channel-manager/type-aliases/SetBaseURIParams.mdx) The parameters for setting the base URI for NFT metadata ### Returns `Promise`\<[`SetBaseURIResult`](/sdk-reference/channel-manager/type-aliases/SetBaseURIResult.mdx)> The transaction hash of the set base URI [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / setChannelCreationFee ## Function: setChannelCreationFee() ```ts function setChannelCreationFee(params): Promise; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:413 Set the fee for creating a new channel ### Parameters #### params [`SetChannelCreationFeeParams`](/sdk-reference/channel-manager/type-aliases/SetChannelCreationFeeParams.mdx) The parameters for setting the fee for creating a new channel ### Returns `Promise`\<[`SetChannelCreationFeeResult`](/sdk-reference/channel-manager/type-aliases/SetChannelCreationFeeResult.mdx)> The transaction hash of the set creation fee [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / setHook ## Function: setHook() ```ts function setHook(params): Promise; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:41 Set the hook for a channel ### Parameters #### params [`SetHookParams`](/sdk-reference/channel-manager/type-aliases/SetHookParams.mdx) The parameters for setting the hook for a channel ### Returns `Promise`\<[`SetHookResult`](/sdk-reference/channel-manager/type-aliases/SetHookResult.mdx)> The transaction hash of the set hook [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / setHookTransactionFee ## Function: setHookTransactionFee() ```ts function setHookTransactionFee(params): Promise; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:125 Set the percentage of the fee for the hook transaction ### Parameters #### params [`SetHookTransactionFeeParams`](/sdk-reference/channel-manager/type-aliases/SetHookTransactionFeeParams.mdx) The parameters for setting the fee for the hook transaction ### Returns `Promise`\<[`SetHookTransactionFeeResult`](/sdk-reference/channel-manager/type-aliases/SetHookTransactionFeeResult.mdx)> The transaction hash of the set hook transaction fee [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / withdrawFees ## Function: withdrawFees() ```ts function withdrawFees(params): Promise; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:458 Withdraws accumulated fees to a specified address ### Parameters #### params [`WithdrawFeesParams`](/sdk-reference/channel-manager/type-aliases/WithdrawFeesParams.mdx) The parameters for withdrawing accumulated fees ### Returns `Promise`\<[`WithdrawFeesResult`](/sdk-reference/channel-manager/type-aliases/WithdrawFeesResult.mdx)> The transaction hash of the withdrawal [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / channel-manager/react ## channel-manager/react Ethereum Comments Protocol SDK Channel Manager for React React hooks for managing comment channels ### Type Aliases | Type Alias | Description | | ------------------------------------------------------------------------------------------------------------------------ | ----------- | | [UseChannelExistsOptions](/sdk-reference/channel-manager/react/type-aliases/UseChannelExistsOptions.mdx) | - | | [UseChannelExistsParams](/sdk-reference/channel-manager/react/type-aliases/UseChannelExistsParams.mdx) | - | | [UseChannelExistsResult](/sdk-reference/channel-manager/react/type-aliases/UseChannelExistsResult.mdx) | - | | [UseCreateChannelOptions](/sdk-reference/channel-manager/react/type-aliases/UseCreateChannelOptions.mdx) | - | | [UseCreateChannelParams](/sdk-reference/channel-manager/react/type-aliases/UseCreateChannelParams.mdx) | - | | [UseCreateChannelResult](/sdk-reference/channel-manager/react/type-aliases/UseCreateChannelResult.mdx) | - | | [UseGetChannelCreationFeeOptions](/sdk-reference/channel-manager/react/type-aliases/UseGetChannelCreationFeeOptions.mdx) | - | | [UseGetChannelCreationFeeParams](/sdk-reference/channel-manager/react/type-aliases/UseGetChannelCreationFeeParams.mdx) | - | | [UseGetChannelCreationFeeResult](/sdk-reference/channel-manager/react/type-aliases/UseGetChannelCreationFeeResult.mdx) | - | | [UseGetChannelOptions](/sdk-reference/channel-manager/react/type-aliases/UseGetChannelOptions.mdx) | - | | [UseGetChannelParams](/sdk-reference/channel-manager/react/type-aliases/UseGetChannelParams.mdx) | - | | [UseGetChannelResult](/sdk-reference/channel-manager/react/type-aliases/UseGetChannelResult.mdx) | - | | [UseGetHookTransactionFeeOptions](/sdk-reference/channel-manager/react/type-aliases/UseGetHookTransactionFeeOptions.mdx) | - | | [UseGetHookTransactionFeeParams](/sdk-reference/channel-manager/react/type-aliases/UseGetHookTransactionFeeParams.mdx) | - | | [UseGetHookTransactionFeeResult](/sdk-reference/channel-manager/react/type-aliases/UseGetHookTransactionFeeResult.mdx) | - | | [UseOwnerOfOptions](/sdk-reference/channel-manager/react/type-aliases/UseOwnerOfOptions.mdx) | - | | [UseOwnerOfParams](/sdk-reference/channel-manager/react/type-aliases/UseOwnerOfParams.mdx) | - | | [UseOwnerOfResult](/sdk-reference/channel-manager/react/type-aliases/UseOwnerOfResult.mdx) | - | | [UseSetBaseURIOptions](/sdk-reference/channel-manager/react/type-aliases/UseSetBaseURIOptions.mdx) | - | | [UseSetBaseURIParams](/sdk-reference/channel-manager/react/type-aliases/UseSetBaseURIParams.mdx) | - | | [UseSetBaseURIResult](/sdk-reference/channel-manager/react/type-aliases/UseSetBaseURIResult.mdx) | - | | [UseSetChannelCreationFeeOptions](/sdk-reference/channel-manager/react/type-aliases/UseSetChannelCreationFeeOptions.mdx) | - | | [UseSetChannelCreationFeeParams](/sdk-reference/channel-manager/react/type-aliases/UseSetChannelCreationFeeParams.mdx) | - | | [UseSetChannelCreationFeeResult](/sdk-reference/channel-manager/react/type-aliases/UseSetChannelCreationFeeResult.mdx) | - | | [UseSetHookOptions](/sdk-reference/channel-manager/react/type-aliases/UseSetHookOptions.mdx) | - | | [UseSetHookParams](/sdk-reference/channel-manager/react/type-aliases/UseSetHookParams.mdx) | - | | [UseSetHookResult](/sdk-reference/channel-manager/react/type-aliases/UseSetHookResult.mdx) | - | | [UseSetHookTransactionFeeOptions](/sdk-reference/channel-manager/react/type-aliases/UseSetHookTransactionFeeOptions.mdx) | - | | [UseSetHookTransactionFeeParams](/sdk-reference/channel-manager/react/type-aliases/UseSetHookTransactionFeeParams.mdx) | - | | [UseSetHookTransactionFeeResult](/sdk-reference/channel-manager/react/type-aliases/UseSetHookTransactionFeeResult.mdx) | - | | [UseUpdateChannelOptions](/sdk-reference/channel-manager/react/type-aliases/UseUpdateChannelOptions.mdx) | - | | [UseUpdateChannelParams](/sdk-reference/channel-manager/react/type-aliases/UseUpdateChannelParams.mdx) | - | | [UseUpdateChannelResult](/sdk-reference/channel-manager/react/type-aliases/UseUpdateChannelResult.mdx) | - | | [UseWithdrawFeesOptions](/sdk-reference/channel-manager/react/type-aliases/UseWithdrawFeesOptions.mdx) | - | | [UseWithdrawFeesParams](/sdk-reference/channel-manager/react/type-aliases/UseWithdrawFeesParams.mdx) | - | | [UseWithdrawFeesResult](/sdk-reference/channel-manager/react/type-aliases/UseWithdrawFeesResult.mdx) | - | ### Functions | Function | Description | | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | | [useChannelExists](/sdk-reference/channel-manager/react/functions/useChannelExists.mdx) | Check if a channel exists | | [useCreateChannel](/sdk-reference/channel-manager/react/functions/useCreateChannel.mdx) | Create a new channel | | [useGetChannel](/sdk-reference/channel-manager/react/functions/useGetChannel.mdx) | Get a channel | | [useGetChannelCreationFee](/sdk-reference/channel-manager/react/functions/useGetChannelCreationFee.mdx) | Get the creation fee from channel manager | | [useGetHookTransactionFee](/sdk-reference/channel-manager/react/functions/useGetHookTransactionFee.mdx) | Get the hook transaction fee from channel manager | | [useOwnerOf](/sdk-reference/channel-manager/react/functions/useOwnerOf.mdx) | Get the owner of a channel | | [useSetBaseURI](/sdk-reference/channel-manager/react/functions/useSetBaseURI.mdx) | Sets the base URI for NFT metadata | | [useSetChannelCreationFee](/sdk-reference/channel-manager/react/functions/useSetChannelCreationFee.mdx) | Set the fee for creating a new channel | | [useSetHook](/sdk-reference/channel-manager/react/functions/useSetHook.mdx) | Set the hook for a channel | | [useSetHookTransactionFee](/sdk-reference/channel-manager/react/functions/useSetHookTransactionFee.mdx) | Set the percentage of the fee for the hook transaction | | [useUpdateChannel](/sdk-reference/channel-manager/react/functions/useUpdateChannel.mdx) | Update a channel | | [useWithdrawFees](/sdk-reference/channel-manager/react/functions/useWithdrawFees.mdx) | Withdraws accumulated fees to a specified address | [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / ChannelExistsParams ## Type Alias: ChannelExistsParams ```ts type ChannelExistsParams = { channelId: bigint; channelManagerAddress?: Hex; readContract: ContractReadFunctions["channelExists"]; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:258 ### Properties #### channelId ```ts channelId: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:262 The ID of the channel to check *** #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:268 The address of the channel manager ##### Default ```ts CHANNEL_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["channelExists"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:269 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / CreateChannelParams ## Type Alias: CreateChannelParams ```ts type CreateChannelParams = { channelManagerAddress?: Hex; description?: string; fee?: bigint; hook?: Hex; metadata?: MetadataEntry[]; name: string; writeContract: ContractWriteFunctions["createChannel"]; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:23 ### Properties #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:49 The address of the channel manager ##### Default ```ts CHANNEL_MANAGER_ADDRESS ``` *** #### description? ```ts optional description: string; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:31 The description of the channel *** #### fee? ```ts optional fee: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:43 The fee for creating the channel this will be paid in the ETH by the caller. *** #### hook? ```ts optional hook: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:39 The hook of the channel *** #### metadata? ```ts optional metadata: MetadataEntry[]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:35 The metadata of the channel *** #### name ```ts name: string; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:27 The name of the channel *** #### writeContract ```ts writeContract: ContractWriteFunctions["createChannel"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:50 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / CreateChannelResult ## Type Alias: CreateChannelResult ```ts type CreateChannelResult = WaitableWriteContractHelperResult; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:53 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / DeductProtocolHookTransactionFeeParams ## Type Alias: DeductProtocolHookTransactionFeeParams ```ts type DeductProtocolHookTransactionFeeParams = { channelManagerAddress?: Hex; readContract: ContractReadFunctions["deductProtocolHookTransactionFee"]; }; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:143 ### Properties #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:149 The address of the channel manager ##### Default ```ts CHANNEL_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["deductProtocolHookTransactionFee"]; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:150 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / DeductProtocolHookTransactionFeeResult ## Type Alias: DeductProtocolHookTransactionFeeResult ```ts type DeductProtocolHookTransactionFeeResult = { deductedFee: bigint; }; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:153 ### Properties #### deductedFee ```ts deductedFee: bigint; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:154 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / GetChannelCreationFeeParams ## Type Alias: GetChannelCreationFeeParams ```ts type GetChannelCreationFeeParams = { channelManagerAddress?: Hex; readContract: ContractReadFunctions["getChannelCreationFee"]; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:344 ### Properties #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:350 The address of the channel manager ##### Default ```ts CHANNEL_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["getChannelCreationFee"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:351 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / GetChannelCreationFeeResult ## Type Alias: GetChannelCreationFeeResult ```ts type GetChannelCreationFeeResult = { fee: bigint; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:354 ### Properties #### fee ```ts fee: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:355 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / GetChannelMetadataParams ## Type Alias: GetChannelMetadataParams ```ts type GetChannelMetadataParams = { channelId: bigint; channelManagerAddress?: Hex; readContract: ContractReadFunctions["getChannelMetadata"]; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:144 ### Properties #### channelId ```ts channelId: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:148 The ID of the channel to get metadata for *** #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:154 The address of the channel manager ##### Default ```ts CHANNEL_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["getChannelMetadata"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:155 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / GetChannelMetadataResult ## Type Alias: GetChannelMetadataResult ```ts type GetChannelMetadataResult = { metadata: MetadataEntry[]; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:158 ### Properties #### metadata ```ts metadata: MetadataEntry[]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:159 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / GetChannelParams ## Type Alias: GetChannelParams ```ts type GetChannelParams = { channelId: bigint; channelManagerAddress?: Hex; readContract: ContractReadFunctions["getChannel"]; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:95 ### Properties #### channelId ```ts channelId: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:99 The ID of the channel to get *** #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:105 The address of the channel manager ##### Default ```ts CHANNEL_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["getChannel"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:106 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / GetChannelResult ## Type Alias: GetChannelResult ```ts type GetChannelResult = Omit; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:109 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / GetHookTransactionFeeParams ## Type Alias: GetHookTransactionFeeParams ```ts type GetHookTransactionFeeParams = { channelManagerAddress?: Hex; readContract: ContractReadFunctions["getHookTransactionFee"]; }; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:57 ### Properties #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:63 The address of the channel manager ##### Default ```ts CHANNEL_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["getHookTransactionFee"]; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:64 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / GetHookTransactionFeeResult ## Type Alias: GetHookTransactionFeeResult ```ts type GetHookTransactionFeeResult = { fee: number; }; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:67 ### Properties #### fee ```ts fee: number; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:68 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / OwnerOfParams ## Type Alias: OwnerOfParams ```ts type OwnerOfParams = { channelId: bigint; channelManagerAddress?: Hex; readContract: ContractReadFunctions["ownerOf"]; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:299 ### Properties #### channelId ```ts channelId: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:303 The ID of the channel to get the owner of *** #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:309 The address of the channel manager ##### Default ```ts CHANNEL_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["ownerOf"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:310 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / OwnerOfResult ## Type Alias: OwnerOfResult ```ts type OwnerOfResult = { owner: Hex; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:313 ### Properties #### owner ```ts owner: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:314 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / SetBaseURIParams ## Type Alias: SetBaseURIParams ```ts type SetBaseURIParams = { baseURI: string; channelManagerAddress?: Hex; writeContract: ContractWriteFunctions["setBaseURI"]; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:476 ### Properties #### baseURI ```ts baseURI: string; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:480 The new base URI for NFT metadata *** #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:484 The address of the channel manager *** #### writeContract ```ts writeContract: ContractWriteFunctions["setBaseURI"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:485 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / SetBaseURIResult ## Type Alias: SetBaseURIResult ```ts type SetBaseURIResult = { txHash: Hex; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:488 ### Properties #### txHash ```ts txHash: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:489 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / SetChannelCreationFeeParams ## Type Alias: SetChannelCreationFeeParams ```ts type SetChannelCreationFeeParams = { channelManagerAddress?: Hex; fee: bigint; writeContract: ContractWriteFunctions["setChannelCreationFee"]; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:384 ### Properties #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:394 The address of the channel manager ##### Default ```ts CHANNEL_MANAGER_ADDRESS ``` *** #### fee ```ts fee: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:388 The fee for creating a channel in wei *** #### writeContract ```ts writeContract: ContractWriteFunctions["setChannelCreationFee"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:395 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / SetChannelCreationFeeResult ## Type Alias: SetChannelCreationFeeResult ```ts type SetChannelCreationFeeResult = { txHash: Hex; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:398 ### Properties #### txHash ```ts txHash: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:399 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / SetHookParams ## Type Alias: SetHookParams ```ts type SetHookParams = { channelId: bigint; channelManagerAddress?: Hex; hook: Hex; writeContract: ContractWriteFunctions["setHook"]; }; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:7 ### Properties #### channelId ```ts channelId: bigint; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:11 The ID of the channel to set the hook for *** #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:21 The address of the channel manager ##### Default ```ts CHANNEL_MANAGER_ADDRESS ``` *** #### hook ```ts hook: Hex; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:15 The address of the hook to set *** #### writeContract ```ts writeContract: ContractWriteFunctions["setHook"]; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:22 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / SetHookResult ## Type Alias: SetHookResult ```ts type SetHookResult = { txHash: Hex; }; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:25 ### Properties #### txHash ```ts txHash: Hex; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:26 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / SetHookTransactionFeeParams ## Type Alias: SetHookTransactionFeeParams ```ts type SetHookTransactionFeeParams = { channelManagerAddress?: Hex; feeBasisPoints: number; writeContract: ContractWriteFunctions["setHookTransactionFee"]; }; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:96 ### Properties #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:106 The address of the channel manager ##### Default ```ts CHANNEL_MANAGER_ADDRESS ``` *** #### feeBasisPoints ```ts feeBasisPoints: number; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:100 The fee for the hook transaction in basis points (0.01% = 1 point) *** #### writeContract ```ts writeContract: ContractWriteFunctions["setHookTransactionFee"]; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:107 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / SetHookTransactionFeeResult ## Type Alias: SetHookTransactionFeeResult ```ts type SetHookTransactionFeeResult = { txHash: Hex; }; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:110 ### Properties #### txHash ```ts txHash: Hex; ``` Defined in: packages/sdk/src/channel-manager/hook.ts:111 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / UpdateChannelParams ## Type Alias: UpdateChannelParams ```ts type UpdateChannelParams = { channelId: bigint; channelManagerAddress?: Hex; description?: string; metadata?: MetadataEntryOp[]; name: string; writeContract: ContractWriteFunctions["updateChannel"]; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:192 ### Properties #### channelId ```ts channelId: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:196 The ID of the channel to update *** #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:214 The address of the channel manager ##### Default ```ts CHANNEL_MANAGER_ADDRESS ``` *** #### description? ```ts optional description: string; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:204 The description of the channel *** #### metadata? ```ts optional metadata: MetadataEntryOp[]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:208 The metadata of the channel *** #### name ```ts name: string; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:200 The name of the channel *** #### writeContract ```ts writeContract: ContractWriteFunctions["updateChannel"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:215 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / UpdateChannelResult ## Type Alias: UpdateChannelResult ```ts type UpdateChannelResult = WaitableWriteContractHelperResult; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:218 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / WithdrawFeesParams ## Type Alias: WithdrawFeesParams ```ts type WithdrawFeesParams = { channelManagerAddress?: Hex; recipient: Hex; writeContract: ContractWriteFunctions["withdrawFees"]; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:431 ### Properties #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:439 The address of the channel manager *** #### recipient ```ts recipient: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:435 The address of the recipient *** #### writeContract ```ts writeContract: ContractWriteFunctions["withdrawFees"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:440 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / WithdrawFeesResult ## Type Alias: WithdrawFeesResult ```ts type WithdrawFeesResult = { txHash: Hex; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:443 ### Properties #### txHash ```ts txHash: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:444 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / channel-manager/types ## channel-manager/types ### Type Aliases | Type Alias | Description | | ------------------------------------------------------------------------------------------------------ | ----------- | | [Channel](/sdk-reference/channel-manager/types/type-aliases/Channel.mdx) | - | | [ChannelManagerABIType](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx) | - | | [ChannelPermissions](/sdk-reference/channel-manager/types/type-aliases/ChannelPermissions.mdx) | - | | [ContractReadFunctions](/sdk-reference/channel-manager/types/type-aliases/ContractReadFunctions.mdx) | - | | [ContractWriteFunctions](/sdk-reference/channel-manager/types/type-aliases/ContractWriteFunctions.mdx) | - | [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / createChannel ## Variable: createChannel() ```ts const createChannel: (...args) => Promise>; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:72 Create a new channel ### Parameters #### args ...\[[`CreateChannelParams`](/sdk-reference/channel-manager/type-aliases/CreateChannelParams.mdx)] ### Returns `Promise`\<[`WaitableWriteContractHelperResult`](/sdk-reference/core/type-aliases/WaitableWriteContractHelperResult.mdx)\> The transaction hash of the created channel [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / updateChannel ## Variable: updateChannel() ```ts const updateChannel: (...args) => Promise>; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:236 Update a channel ### Parameters #### args ...\[[`UpdateChannelParams`](/sdk-reference/channel-manager/type-aliases/UpdateChannelParams.mdx)] ### Returns `Promise`\<[`WaitableWriteContractHelperResult`](/sdk-reference/core/type-aliases/WaitableWriteContractHelperResult.mdx)\> The transaction hash of the updated channel [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / AuthorAuthMethod ## Enumeration: AuthorAuthMethod Defined in: packages/sdk/src/comments/types.ts:19 ### Enumeration Members #### APP\_APPROVAL ```ts APP_APPROVAL: 1; ``` Defined in: packages/sdk/src/comments/types.ts:21 *** #### AUTHOR\_SIGNATURE ```ts AUTHOR_SIGNATURE: 2; ``` Defined in: packages/sdk/src/comments/types.ts:22 *** #### DIRECT\_TX ```ts DIRECT_TX: 0; ``` Defined in: packages/sdk/src/comments/types.ts:20 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / MetadataOperation ## Enumeration: MetadataOperation Defined in: packages/sdk/src/comments/types.ts:35 ### Enumeration Members #### DELETE ```ts DELETE: 1; ``` Defined in: packages/sdk/src/comments/types.ts:37 *** #### SET ```ts SET: 0; ``` Defined in: packages/sdk/src/comments/types.ts:36 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / addApproval ## Function: addApproval() ```ts function addApproval(params): Promise; ``` Defined in: packages/sdk/src/comments/approval.ts:97 Approves an app signer directly as author ### Parameters #### params [`AddApprovalParams`](/sdk-reference/comments/type-aliases/AddApprovalParams.mdx) The parameters for approving an app signer ### Returns `Promise`\<[`AddApprovalResult`](/sdk-reference/comments/type-aliases/AddApprovalResult.mdx)> The transaction hash of the approval [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / addApprovalWithSig ## Function: addApprovalWithSig() ```ts function addApprovalWithSig(params): Promise; ``` Defined in: packages/sdk/src/comments/approval.ts:158 Adds an app signer approval with signature verification ### Parameters #### params [`AddApprovalWithSigParams`](/sdk-reference/comments/type-aliases/AddApprovalWithSigParams.mdx) The parameters for adding an app signer approval ### Returns `Promise`\<[`AddApprovalWithSigResult`](/sdk-reference/comments/type-aliases/AddApprovalWithSigResult.mdx)> The transaction hash of the approval [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / convertContractToRecordFormat ## Function: convertContractToRecordFormat() ```ts function convertContractToRecordFormat(metadataEntries, keyTypeMap?): MetadataRecord; ``` Defined in: packages/sdk/src/comments/metadata.ts:269 Converts from contract MetadataEntry array format to JS/SDK Record format Note: This requires knowledge of the original key string and type, which are lost in the contract format. This function attempts to reverse-engineer them from common patterns used in the codebase. ### Parameters #### metadataEntries [`MetadataEntry`](/sdk-reference/comments/type-aliases/MetadataEntry.mdx)\[] Array of MetadataEntry from contracts #### keyTypeMap? `Record`\<`` `0x${string}` ``, \{ `key`: `string`; `type`: [`MetadataType`](/sdk-reference/comments/type-aliases/MetadataType.mdx); }> Optional mapping of known keys to their original string and type ### Returns [`MetadataRecord`](/sdk-reference/comments/type-aliases/MetadataRecord.mdx) The metadata in Record format [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / convertRecordToContractFormat ## Function: convertRecordToContractFormat() ```ts function convertRecordToContractFormat(metadataRecord): MetadataEntry[]; ``` Defined in: packages/sdk/src/comments/metadata.ts:250 Converts from JS/SDK Record format to contract MetadataEntry array format ### Parameters #### metadataRecord [`MetadataRecord`](/sdk-reference/comments/type-aliases/MetadataRecord.mdx) The metadata in Record format ### Returns [`MetadataEntry`](/sdk-reference/comments/type-aliases/MetadataEntry.mdx)\[] Array of MetadataEntry for contract use [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / createApprovalTypedData ## Function: createApprovalTypedData() ```ts function createApprovalTypedData(params): { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: { app: `0x${string}`; author: `0x${string}`; deadline: bigint; expiry: bigint; nonce: bigint; }; primaryType: "AddApproval"; types: { AddApproval: ( | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; } | { name: "expiry"; type: "uint256"; })[]; }; }; ``` Defined in: packages/sdk/src/comments/approval.ts:490 Create the EIP-712 typed data structure for approving comment ### Parameters #### params [`CreateApprovalTypedDataParams`](/sdk-reference/comments/type-aliases/CreateApprovalTypedDataParams.mdx) ### Returns ```ts { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: { app: `0x${string}`; author: `0x${string}`; deadline: bigint; expiry: bigint; nonce: bigint; }; primaryType: "AddApproval"; types: { AddApproval: ( | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; } | { name: "expiry"; type: "uint256"; })[]; }; } ``` The typed data #### domain ```ts domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; ``` ##### domain.chainId ```ts chainId: number; ``` ##### domain.name ```ts name: "Ethereum Comments Protocol"; ``` ##### domain.verifyingContract ```ts verifyingContract: `0x${string}` = HexSchema; ``` ##### domain.version ```ts version: "1"; ``` #### message ```ts message: { app: `0x${string}`; author: `0x${string}`; deadline: bigint; expiry: bigint; nonce: bigint; }; ``` ##### message.app ```ts app: `0x${string}` = HexSchema; ``` ##### message.author ```ts author: `0x${string}` = HexSchema; ``` ##### message.deadline ```ts deadline: bigint; ``` ##### message.expiry ```ts expiry: bigint; ``` ##### message.nonce ```ts nonce: bigint; ``` #### primaryType ```ts primaryType: "AddApproval"; ``` #### types ```ts types: { AddApproval: ( | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; } | { name: "expiry"; type: "uint256"; })[]; }; ``` ##### types.AddApproval ```ts AddApproval: ( | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; } | { name: "expiry"; type: "uint256"; })[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / createCommentData ## Function: createCommentData() ```ts function createCommentData(__namedParameters): | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: string; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: ""; }; ``` Defined in: packages/sdk/src/comments/comment.ts:560 Create the data structure of a comment ### Parameters #### \_\_namedParameters [`CreateCommentDataParams`](/sdk-reference/comments/type-aliases/CreateCommentDataParams.mdx) ### Returns \| \{ `app`: `` `0x${string}` ``; `author`: `` `0x${string}` ``; `channelId`: `bigint`; `commentType`: `number`; `content`: `string`; `deadline`: `bigint`; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `parentId`: `` `0x${string}` ``; `targetUri`: `string`; } \| \{ `app`: `` `0x${string}` ``; `author`: `` `0x${string}` ``; `channelId`: `bigint`; `commentType`: `number`; `content`: `string`; `deadline`: `bigint`; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `parentId`: `` `0x${string}` ``; `targetUri`: `""`; } [CommentInputData](/sdk-reference/comments/type-aliases/CommentInputData.mdx) The data structure of a comment [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / createCommentTypedData ## Function: createCommentTypedData() ```ts function createCommentTypedData(params): { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: string; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: ""; }; primaryType: "AddComment"; types: { AddComment: ( | { name: "content"; type: "string"; } | { name: "metadata"; type: "MetadataEntry[]"; } | { name: "targetUri"; type: "string"; } | { name: "commentType"; type: "uint8"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "channelId"; type: "uint256"; } | { name: "deadline"; type: "uint256"; } | { name: "parentId"; type: "bytes32"; })[]; MetadataEntry: ( | { name: "key"; type: "bytes32"; } | { name: "value"; type: "bytes"; })[]; }; }; ``` Defined in: packages/sdk/src/comments/comment.ts:535 Create the EIP-712 typed data structure for adding comment ### Parameters #### params [`CreateCommentTypedDataParams`](/sdk-reference/comments/type-aliases/CreateCommentTypedDataParams.mdx) ### Returns ```ts { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: string; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: ""; }; primaryType: "AddComment"; types: { AddComment: ( | { name: "content"; type: "string"; } | { name: "metadata"; type: "MetadataEntry[]"; } | { name: "targetUri"; type: "string"; } | { name: "commentType"; type: "uint8"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "channelId"; type: "uint256"; } | { name: "deadline"; type: "uint256"; } | { name: "parentId"; type: "bytes32"; })[]; MetadataEntry: ( | { name: "key"; type: "bytes32"; } | { name: "value"; type: "bytes"; })[]; }; } ``` The typed data #### domain ```ts domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; ``` ##### domain.chainId ```ts chainId: number; ``` ##### domain.name ```ts name: "Ethereum Comments Protocol"; ``` ##### domain.verifyingContract ```ts verifyingContract: `0x${string}` = HexSchema; ``` ##### domain.version ```ts version: "1"; ``` #### message ```ts message: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: string; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: ""; } = CommentInputDataSchema; ``` #### primaryType ```ts primaryType: "AddComment"; ``` #### types ```ts types: { AddComment: ( | { name: "content"; type: "string"; } | { name: "metadata"; type: "MetadataEntry[]"; } | { name: "targetUri"; type: "string"; } | { name: "commentType"; type: "uint8"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "channelId"; type: "uint256"; } | { name: "deadline"; type: "uint256"; } | { name: "parentId"; type: "bytes32"; })[]; MetadataEntry: ( | { name: "key"; type: "bytes32"; } | { name: "value"; type: "bytes"; })[]; }; ``` ##### types.AddComment ```ts AddComment: ( | { name: "content"; type: "string"; } | { name: "metadata"; type: "MetadataEntry[]"; } | { name: "targetUri"; type: "string"; } | { name: "commentType"; type: "uint8"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "channelId"; type: "uint256"; } | { name: "deadline"; type: "uint256"; } | { name: "parentId"; type: "bytes32"; })[]; ``` ##### types.MetadataEntry ```ts MetadataEntry: ( | { name: "key"; type: "bytes32"; } | { name: "value"; type: "bytes"; })[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / createCustomMetadataEntry ## Function: createCustomMetadataEntry() ```ts function createCustomMetadataEntry( keyString, valueType, encodedValue): MetadataEntry; ``` Defined in: packages/sdk/src/comments/metadata.ts:184 Creates a metadata entry with a custom type ### Parameters #### keyString `string` The key string #### valueType [`MetadataType`](/sdk-reference/comments/type-aliases/MetadataType.mdx) The type string MetadataType #### encodedValue `` `0x${string}` `` The pre-encoded value as hex ### Returns [`MetadataEntry`](/sdk-reference/comments/type-aliases/MetadataEntry.mdx) The MetadataEntry [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / createDeleteCommentTypedData ## Function: createDeleteCommentTypedData() ```ts function createDeleteCommentTypedData(params): { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: { app: `0x${string}`; author: `0x${string}`; commentId: `0x${string}`; deadline: bigint; }; primaryType: "DeleteComment"; types: { DeleteComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "deadline"; type: "uint256"; })[]; }; }; ``` Defined in: packages/sdk/src/comments/comment.ts:634 Create the EIP-712 typed data structure for deleting comment The comment won't be really deleted because of the nature of the blockchain. The purpose of this is to mark comment as deleted so indexers can do their logic for deletions. ### Parameters #### params [`CreateDeleteCommentTypedDataParams`](/sdk-reference/comments/type-aliases/CreateDeleteCommentTypedDataParams.mdx) ### Returns ```ts { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: { app: `0x${string}`; author: `0x${string}`; commentId: `0x${string}`; deadline: bigint; }; primaryType: "DeleteComment"; types: { DeleteComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "deadline"; type: "uint256"; })[]; }; } ``` The typed data #### domain ```ts domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; ``` ##### domain.chainId ```ts chainId: number; ``` ##### domain.name ```ts name: "Ethereum Comments Protocol"; ``` ##### domain.verifyingContract ```ts verifyingContract: `0x${string}` = HexSchema; ``` ##### domain.version ```ts version: "1"; ``` #### message ```ts message: { app: `0x${string}`; author: `0x${string}`; commentId: `0x${string}`; deadline: bigint; }; ``` ##### message.app ```ts app: `0x${string}` = HexSchema; ``` ##### message.author ```ts author: `0x${string}` = HexSchema; ``` ##### message.commentId ```ts commentId: `0x${string}` = HexSchema; ``` ##### message.deadline ```ts deadline: bigint; ``` #### primaryType ```ts primaryType: "DeleteComment"; ``` #### types ```ts types: { DeleteComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "deadline"; type: "uint256"; })[]; }; ``` ##### types.DeleteComment ```ts DeleteComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "deadline"; type: "uint256"; })[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / createEditCommentData ## Function: createEditCommentData() ```ts function createEditCommentData(params): { app: `0x${string}`; commentId: `0x${string}`; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; nonce: bigint; }; ``` Defined in: packages/sdk/src/comments/comment.ts:744 Create the data structure of a comment for editing ### Parameters #### params [`EditCommentDataParamsWithMetadataEntries`](/sdk-reference/comments/type-aliases/EditCommentDataParamsWithMetadataEntries.mdx) ### Returns ```ts { app: `0x${string}`; commentId: `0x${string}`; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; nonce: bigint; } ``` [EditCommentData](/sdk-reference/comments/type-aliases/EditCommentData.mdx) The data structure of a comment for editing #### app ```ts app: `0x${string}` = HexSchema; ``` #### commentId ```ts commentId: `0x${string}` = HexSchema; ``` #### content ```ts content: string; ``` #### deadline ```ts deadline: bigint; ``` #### metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[]; ``` #### nonce ```ts nonce: bigint; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / createEditCommentTypedData ## Function: createEditCommentTypedData() ```ts function createEditCommentTypedData(params): { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: { app: `0x${string}`; author: `0x${string}`; commentId: `0x${string}`; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; nonce: bigint; }; primaryType: "EditComment"; types: { EditComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "content"; type: "string"; } | { name: "metadata"; type: "MetadataEntry[]"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; })[]; MetadataEntry: ( | { name: "key"; type: "bytes32"; } | { name: "value"; type: "bytes"; })[]; }; }; ``` Defined in: packages/sdk/src/comments/comment.ts:800 Create the EIP-712 typed data structure for editing comment ### Parameters #### params [`CreateEditCommentTypedDataParams`](/sdk-reference/comments/type-aliases/CreateEditCommentTypedDataParams.mdx) ### Returns ```ts { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: { app: `0x${string}`; author: `0x${string}`; commentId: `0x${string}`; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; nonce: bigint; }; primaryType: "EditComment"; types: { EditComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "content"; type: "string"; } | { name: "metadata"; type: "MetadataEntry[]"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; })[]; MetadataEntry: ( | { name: "key"; type: "bytes32"; } | { name: "value"; type: "bytes"; })[]; }; } ``` The typed data #### domain ```ts domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; ``` ##### domain.chainId ```ts chainId: number; ``` ##### domain.name ```ts name: "Ethereum Comments Protocol"; ``` ##### domain.verifyingContract ```ts verifyingContract: `0x${string}` = HexSchema; ``` ##### domain.version ```ts version: "1"; ``` #### message ```ts message: { app: `0x${string}`; author: `0x${string}`; commentId: `0x${string}`; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; nonce: bigint; }; ``` ##### message.app ```ts app: `0x${string}` = HexSchema; ``` ##### message.author ```ts author: `0x${string}` = HexSchema; ``` ##### message.commentId ```ts commentId: `0x${string}` = HexSchema; ``` ##### message.content ```ts content: string; ``` ##### message.deadline ```ts deadline: bigint; ``` ##### message.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = MetadataArraySchema; ``` ##### message.nonce ```ts nonce: bigint; ``` #### primaryType ```ts primaryType: "EditComment"; ``` #### types ```ts types: { EditComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "content"; type: "string"; } | { name: "metadata"; type: "MetadataEntry[]"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; })[]; MetadataEntry: ( | { name: "key"; type: "bytes32"; } | { name: "value"; type: "bytes"; })[]; }; ``` ##### types.EditComment ```ts EditComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "content"; type: "string"; } | { name: "metadata"; type: "MetadataEntry[]"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; })[]; ``` ##### types.MetadataEntry ```ts MetadataEntry: ( | { name: "key"; type: "bytes32"; } | { name: "value"; type: "bytes"; })[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / createKeyTypeMap ## Function: createKeyTypeMap() ```ts function createKeyTypeMap(knownKeys): Record; ``` Defined in: packages/sdk/src/comments/metadata.ts:311 Helper function to create a key-type mapping for known metadata keys This should be maintained by applications to properly convert from contract format ### Parameters #### knownKeys \{ `key`: `string`; `type`: [`MetadataType`](/sdk-reference/comments/type-aliases/MetadataType.mdx); }\[] Array of known key-type pairs ### Returns `Record`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx), \{ `key`: `string`; `type`: [`MetadataType`](/sdk-reference/comments/type-aliases/MetadataType.mdx); }> Mapping from hashed key to original key and type [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / createMetadataEntries ## Function: createMetadataEntries() ```ts function createMetadataEntries(metadata): MetadataEntry[]; ``` Defined in: packages/sdk/src/comments/metadata.ts:162 Creates multiple metadata entries from an object with explicit types ### Parameters #### metadata `Record`\<`string`, \{ `type`: [`MetadataType`](/sdk-reference/comments/type-aliases/MetadataType.mdx); `value`: | `string` \| `boolean` \| `number` \| `bigint` \| [`JsonObject`](/sdk-reference/comments/type-aliases/JsonObject.mdx); }> An object with key-value pairs and their types ### Returns [`MetadataEntry`](/sdk-reference/comments/type-aliases/MetadataEntry.mdx)\[] Array of MetadataEntry [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / createMetadataEntry ## Function: createMetadataEntry() ```ts function createMetadataEntry( keyString, valueType, value): MetadataEntry; ``` Defined in: packages/sdk/src/comments/metadata.ts:93 Creates a metadata entry from a key-value pair with explicit type specification ### Parameters #### keyString `string` The key string #### valueType [`MetadataType`](/sdk-reference/comments/type-aliases/MetadataType.mdx) The metadata type (string, bool, uint256, etc.) #### value The value (string, boolean, number, bigint, or JsonObject) `string` | `number` | `bigint` | `boolean` | [`JsonObject`](/sdk-reference/comments/type-aliases/JsonObject.mdx) ### Returns [`MetadataEntry`](/sdk-reference/comments/type-aliases/MetadataEntry.mdx) The MetadataEntry [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / createMetadataKey ## Function: createMetadataKey() ```ts function createMetadataKey(keyString, valueType): `0x${string}`; ``` Defined in: packages/sdk/src/comments/metadata.ts:12 Creates a metadata key by encoding a string in the format "type key" using abi.encodePacked ### Parameters #### keyString `string` The key string (e.g., "status", "author", "url") #### valueType [`MetadataType`](/sdk-reference/comments/type-aliases/MetadataType.mdx) The type of the value MetadataType ### Returns `` `0x${string}` `` The keccak256 hash of the abi.encodePacked "type key" string [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / createRemoveApprovalTypedData ## Function: createRemoveApprovalTypedData() ```ts function createRemoveApprovalTypedData(params): { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: { app: `0x${string}`; author: `0x${string}`; deadline: bigint; nonce: bigint; }; primaryType: "RemoveApproval"; types: { RemoveApproval: ( | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; })[]; }; }; ``` Defined in: packages/sdk/src/comments/approval.ts:566 Create the EIP-712 typed data structure for removing approval ### Parameters #### params [`CreateRemoveApprovalTypedDataParams`](/sdk-reference/comments/type-aliases/CreateRemoveApprovalTypedDataParams.mdx) ### Returns ```ts { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: { app: `0x${string}`; author: `0x${string}`; deadline: bigint; nonce: bigint; }; primaryType: "RemoveApproval"; types: { RemoveApproval: ( | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; })[]; }; } ``` The typed data #### domain ```ts domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; ``` ##### domain.chainId ```ts chainId: number; ``` ##### domain.name ```ts name: "Ethereum Comments Protocol"; ``` ##### domain.verifyingContract ```ts verifyingContract: `0x${string}` = HexSchema; ``` ##### domain.version ```ts version: "1"; ``` #### message ```ts message: { app: `0x${string}`; author: `0x${string}`; deadline: bigint; nonce: bigint; }; ``` ##### message.app ```ts app: `0x${string}` = HexSchema; ``` ##### message.author ```ts author: `0x${string}` = HexSchema; ``` ##### message.deadline ```ts deadline: bigint; ``` ##### message.nonce ```ts nonce: bigint; ``` #### primaryType ```ts primaryType: "RemoveApproval"; ``` #### types ```ts types: { RemoveApproval: ( | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; })[]; }; ``` ##### types.RemoveApproval ```ts RemoveApproval: ( | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; })[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / createReportCommentTypedData ## Function: createReportCommentTypedData() ```ts function createReportCommentTypedData(params): { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: { commentId: `0x${string}`; message: string; reportee: `0x${string}`; }; primaryType: "ReportComment"; types: { ReportComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "reportee"; type: "address"; } | { name: "message"; type: "string"; })[]; }; }; ``` Defined in: packages/sdk/src/comments/comment.ts:990 Create the EIP-712 typed data structure for reporting a comment ### Parameters #### params [`CreateReportCommentTypedDataParams`](/sdk-reference/comments/type-aliases/CreateReportCommentTypedDataParams.mdx) ### Returns ```ts { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: { commentId: `0x${string}`; message: string; reportee: `0x${string}`; }; primaryType: "ReportComment"; types: { ReportComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "reportee"; type: "address"; } | { name: "message"; type: "string"; })[]; }; } ``` The typed data #### domain ```ts domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; ``` ##### domain.chainId ```ts chainId: number; ``` ##### domain.name ```ts name: "Ethereum Comments Protocol"; ``` ##### domain.verifyingContract ```ts verifyingContract: `0x${string}` = HexSchema; ``` ##### domain.version ```ts version: "1"; ``` #### message ```ts message: { commentId: `0x${string}`; message: string; reportee: `0x${string}`; }; ``` ##### message.commentId ```ts commentId: `0x${string}` = HexSchema; ``` ##### message.message ```ts message: string; ``` ##### message.reportee ```ts reportee: `0x${string}` = HexSchema; ``` #### primaryType ```ts primaryType: "ReportComment"; ``` #### types ```ts types: { ReportComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "reportee"; type: "address"; } | { name: "message"; type: "string"; })[]; }; ``` ##### types.ReportComment ```ts ReportComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "reportee"; type: "address"; } | { name: "message"; type: "string"; })[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / decodeAddressValue ## Function: decodeAddressValue() ```ts function decodeAddressValue(encodedValue): `0x${string}`; ``` Defined in: packages/sdk/src/comments/metadata.ts:492 Decodes an address value from encoded metadata bytes ### Parameters #### encodedValue `` `0x${string}` `` The hex-encoded address ### Returns `` `0x${string}` `` The decoded address as hex string [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / decodeBoolValue ## Function: decodeBoolValue() ```ts function decodeBoolValue(encodedValue): boolean; ``` Defined in: packages/sdk/src/comments/metadata.ts:451 Decodes a boolean value from encoded metadata bytes ### Parameters #### encodedValue `` `0x${string}` `` The hex-encoded bytes (32 bytes, 1 for true, 0 for false) ### Returns `boolean` The decoded boolean value [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / decodeBytesValue ## Function: decodeBytesValue() ```ts function decodeBytesValue(encodedValue): `0x${string}`; ``` Defined in: packages/sdk/src/comments/metadata.ts:503 Decodes a bytes value from encoded metadata bytes ### Parameters #### encodedValue `` `0x${string}` `` The hex-encoded bytes ### Returns `` `0x${string}` `` The decoded bytes as hex string [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / decodeMetadataTypes ## Function: decodeMetadataTypes() ```ts function decodeMetadataTypes(metadataEntries): Record; ``` Defined in: packages/sdk/src/comments/metadata.ts:362 Decodes metadata types from on-chain metadata entries by reverse-engineering the type information from the encoded key field. Works without requiring prior knowledge of the key-type mappings. ### Parameters #### metadataEntries [`MetadataEntry`](/sdk-reference/comments/type-aliases/MetadataEntry.mdx)\[] Array of MetadataEntry from contracts ### Returns `Record`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx), \{ `key`: `string`; `type`: [`MetadataType`](/sdk-reference/comments/type-aliases/MetadataType.mdx); }> Mapping from hashed key to original key and type information [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / decodeMetadataValue ## Function: decodeMetadataValue() ```ts function decodeMetadataValue(entry, type): bigint | Json; ``` Defined in: packages/sdk/src/comments/metadata.ts:515 Decodes a metadata entry value based on its type ### Parameters #### entry [`MetadataEntry`](/sdk-reference/comments/type-aliases/MetadataEntry.mdx) The metadata entry to decode #### type [`MetadataType`](/sdk-reference/comments/type-aliases/MetadataType.mdx) The metadata type for proper decoding ### Returns `bigint` | [`Json`](/sdk-reference/comments/type-aliases/Json.mdx) The decoded value in its original JavaScript type [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / decodeNumberValue ## Function: decodeNumberValue() ```ts function decodeNumberValue(encodedValue, isSigned): bigint; ``` Defined in: packages/sdk/src/comments/metadata.ts:468 Decodes a number value from encoded metadata bytes ### Parameters #### encodedValue `` `0x${string}` `` The hex-encoded bytes (32 bytes big-endian) #### isSigned `boolean` = `false` Whether the number is signed (for two's complement handling) ### Returns `bigint` The decoded number value (as bigint for safety) [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / decodeStringValue ## Function: decodeStringValue() ```ts function decodeStringValue(encodedValue): Json; ``` Defined in: packages/sdk/src/comments/metadata.ts:422 Decodes a string value from encoded metadata bytes ### Parameters #### encodedValue `` `0x${string}` `` The hex-encoded bytes ### Returns [`Json`](/sdk-reference/comments/type-aliases/Json.mdx) The decoded string value [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / encodeBoolValue ## Function: encodeBoolValue() ```ts function encodeBoolValue(value): `0x${string}`; ``` Defined in: packages/sdk/src/comments/metadata.ts:47 Encodes a boolean value as bytes for metadata ### Parameters #### value `boolean` The boolean value to encode ### Returns `` `0x${string}` `` The hex-encoded bytes (32 bytes, 1 for true, 0 for false) [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / encodeJsonValue ## Function: encodeJsonValue() ```ts function encodeJsonValue(value): `0x${string}`; ``` Defined in: packages/sdk/src/comments/metadata.ts:81 Encodes a JSON object as bytes for metadata ### Parameters #### value [`JsonObject`](/sdk-reference/comments/type-aliases/JsonObject.mdx) The JSON object to encode ### Returns `` `0x${string}` `` The hex-encoded bytes of the JSON string [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / encodeNumberValue ## Function: encodeNumberValue() ```ts function encodeNumberValue(value): `0x${string}`; ``` Defined in: packages/sdk/src/comments/metadata.ts:57 Encodes a number value as bytes for metadata ### Parameters #### value The number value to encode `number` | `bigint` ### Returns `` `0x${string}` `` The hex-encoded bytes (32 bytes big-endian) [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / encodeStringValue ## Function: encodeStringValue() ```ts function encodeStringValue(value): `0x${string}`; ``` Defined in: packages/sdk/src/comments/metadata.ts:37 Encodes a string value as bytes for metadata ### Parameters #### value `string` The string value to encode ### Returns `` `0x${string}` `` The hex-encoded bytes [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / getAddApprovalHash ## Function: getAddApprovalHash() ```ts function getAddApprovalHash(params): Promise; ``` Defined in: packages/sdk/src/comments/approval.ts:357 Gets the EIP-712 hash for adding approval ### Parameters #### params [`GetAddApprovalHashParams`](/sdk-reference/comments/type-aliases/GetAddApprovalHashParams.mdx) The parameters for getting the add approval hash ### Returns `Promise`\<[`GetAddApprovalHashResult`](/sdk-reference/comments/type-aliases/GetAddApprovalHashResult.mdx)> The computed hash [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / getChannelManager ## Function: getChannelManager() ```ts function getChannelManager(params): Promise<`0x${string}`>; ``` Defined in: packages/sdk/src/comments/contract.ts:173 Gets the channel manager contract address ### Parameters #### params [`GetChannelManagerParams`](/sdk-reference/comments/type-aliases/GetChannelManagerParams.mdx) The parameters for getting the channel manager ### Returns `Promise`\<`` `0x${string}` ``> The channel manager contract address [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / getComment ## Function: getComment() ```ts function getComment(params): Promise; ``` Defined in: packages/sdk/src/comments/comment.ts:220 Get a comment by ID ### Parameters #### params [`GetCommentParams`](/sdk-reference/comments/type-aliases/GetCommentParams.mdx) The parameters for getting a comment ### Returns `Promise`\<[`GetCommentResult`](/sdk-reference/comments/type-aliases/GetCommentResult.mdx)> The comment data [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / getCommentId ## Function: getCommentId() ```ts function getCommentId(params): Promise<`0x${string}`>; ``` Defined in: packages/sdk/src/comments/comment.ts:263 Get the ID for a comment before it is posted ### Parameters #### params [`GetCommentIdParams`](/sdk-reference/comments/type-aliases/GetCommentIdParams.mdx) The parameters for getting a comment ID ### Returns `Promise`\<`` `0x${string}` ``> The comment ID [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / getContractName ## Function: getContractName() ```ts function getContractName(params): Promise; ``` Defined in: packages/sdk/src/comments/contract.ts:72 Gets the contract name ### Parameters #### params [`GetContractNameParams`](/sdk-reference/comments/type-aliases/GetContractNameParams.mdx) The parameters for getting the contract name ### Returns `Promise`\<`string`> The contract name [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / getContractVersion ## Function: getContractVersion() ```ts function getContractVersion(params): Promise; ``` Defined in: packages/sdk/src/comments/contract.ts:105 Gets the contract version ### Parameters #### params [`GetContractVersionParams`](/sdk-reference/comments/type-aliases/GetContractVersionParams.mdx) The parameters for getting the contract version ### Returns `Promise`\<`string`> The contract version [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / getDeleteCommentHash ## Function: getDeleteCommentHash() ```ts function getDeleteCommentHash(params): Promise<`0x${string}`>; ``` Defined in: packages/sdk/src/comments/comment.ts:457 Get the hash for deleting a comment ### Parameters #### params [`GetDeleteCommentHashParams`](/sdk-reference/comments/type-aliases/GetDeleteCommentHashParams.mdx) The parameters for getting a delete comment hash ### Returns `Promise`\<`` `0x${string}` ``> The delete comment hash [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / getDomainSeparator ## Function: getDomainSeparator() ```ts function getDomainSeparator(params): Promise<`0x${string}`>; ``` Defined in: packages/sdk/src/comments/contract.ts:139 Gets the EIP-712 domain separator ### Parameters #### params [`GetDomainSeparatorParams`](/sdk-reference/comments/type-aliases/GetDomainSeparatorParams.mdx) The parameters for getting the domain separator ### Returns `Promise`\<`` `0x${string}` ``> The domain separator [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / getEditCommentHash ## Function: getEditCommentHash() ```ts function getEditCommentHash(params): Promise<`0x${string}`>; ``` Defined in: packages/sdk/src/comments/comment.ts:689 Get the hash for editing a comment ### Parameters #### params [`GetEditCommentHashParams`](/sdk-reference/comments/type-aliases/GetEditCommentHashParams.mdx) ### Returns `Promise`\<`` `0x${string}` ``> The edit comment hash [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / getNonce ## Function: getNonce() ```ts function getNonce(params): Promise; ``` Defined in: packages/sdk/src/comments/comment.ts:502 Get the nonce for the author and app signer ### Parameters #### params [`GetNonceParams`](/sdk-reference/comments/type-aliases/GetNonceParams.mdx) The parameters for getting a nonce ### Returns `Promise`\<`bigint`> The nonce [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / getRemoveApprovalHash ## Function: getRemoveApprovalHash() ```ts function getRemoveApprovalHash(params): Promise; ``` Defined in: packages/sdk/src/comments/approval.ts:436 Gets the EIP-712 hash for removing approval ### Parameters #### params [`GetRemoveApprovalHashParams`](/sdk-reference/comments/type-aliases/GetRemoveApprovalHashParams.mdx) The parameters for getting the remove approval hash ### Returns `Promise`\<[`GetRemoveApprovalHashResult`](/sdk-reference/comments/type-aliases/GetRemoveApprovalHashResult.mdx)> The computed hash [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / isApproved ## Function: isApproved() ```ts function isApproved(params): Promise; ``` Defined in: packages/sdk/src/comments/approval.ts:48 Checks if an app signer is approved for an author ### Parameters #### params [`IsApprovedParams`](/sdk-reference/comments/type-aliases/IsApprovedParams.mdx) The parameters for checking approval ### Returns `Promise`\<`boolean`> Whether the app signer is approved [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / parseMetadataFromContract ## Function: parseMetadataFromContract() ```ts function parseMetadataFromContract(metadata, keyTypeMap?): MetadataRecord; ``` Defined in: packages/sdk/src/comments/metadata.ts:347 Convenience function to convert metadata from contracts for JS/SDK use ### Parameters #### metadata [`MetadataEntry`](/sdk-reference/comments/type-aliases/MetadataEntry.mdx)\[] MetadataEntry array from contract #### keyTypeMap? `Record`\<`` `0x${string}` ``, \{ `key`: `string`; `type`: [`MetadataType`](/sdk-reference/comments/type-aliases/MetadataType.mdx); }> Optional mapping of known keys ### Returns [`MetadataRecord`](/sdk-reference/comments/type-aliases/MetadataRecord.mdx) Metadata in Record format [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / prepareMetadataForContract ## Function: prepareMetadataForContract() ```ts function prepareMetadataForContract(metadata): MetadataEntry[]; ``` Defined in: packages/sdk/src/comments/metadata.ts:331 Convenience function to convert metadata for sending to contracts Handles both Record format and direct MetadataEntry array ### Parameters #### metadata Metadata in either Record or MetadataEntry array format [`MetadataEntry`](/sdk-reference/comments/type-aliases/MetadataEntry.mdx)\[] | [`MetadataRecord`](/sdk-reference/comments/type-aliases/MetadataRecord.mdx) ### Returns [`MetadataEntry`](/sdk-reference/comments/type-aliases/MetadataEntry.mdx)\[] MetadataEntry array ready for contract calls [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / revokeApproval ## Function: revokeApproval() ```ts function revokeApproval(params): Promise; ``` Defined in: packages/sdk/src/comments/approval.ts:213 Revokes an app signer approval directly as author ### Parameters #### params [`RevokeApprovalParams`](/sdk-reference/comments/type-aliases/RevokeApprovalParams.mdx) The parameters for revoking an app signer approval ### Returns `Promise`\<[`RevokeApprovalResult`](/sdk-reference/comments/type-aliases/RevokeApprovalResult.mdx)> The transaction hash of the revocation [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / revokeApprovalWithSig ## Function: revokeApprovalWithSig() ```ts function revokeApprovalWithSig(params): Promise; ``` Defined in: packages/sdk/src/comments/approval.ts:271 Removes an app signer approval with signature verification ### Parameters #### params [`RevokeApprovalWithSigParams`](/sdk-reference/comments/type-aliases/RevokeApprovalWithSigParams.mdx) The parameters for removing an app signer approval ### Returns `Promise`\<[`RevokeApprovalWithSigResult`](/sdk-reference/comments/type-aliases/RevokeApprovalWithSigResult.mdx)> The transaction hash of the removal [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / updateChannelContract ## Function: updateChannelContract() ```ts function updateChannelContract(params): Promise; ``` Defined in: packages/sdk/src/comments/contract.ts:35 Updates the channel manager contract address (only owner) ### Parameters #### params [`UpdateChannelContractParams`](/sdk-reference/comments/type-aliases/UpdateChannelContractParams.mdx) The parameters for updating the channel contract ### Returns `Promise`\<[`UpdateChannelContractResult`](/sdk-reference/comments/type-aliases/UpdateChannelContractResult.mdx)> The transaction hash [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / comments/react ## comments/react Ethereum Comments Protocol SDK Comments for React React hooks and components for managing comments and approvals ### Hooks | Function | Description | | ------------------------------------------------------------------------------------------ | --------------------------------------------- | | [useGaslessTransaction](/sdk-reference/comments/react/functions/useGaslessTransaction.mdx) | A hook for repeat gasless transaction pattern | ### Other | Name | Description | | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | | [UseAddApprovalOptions](/sdk-reference/comments/react/type-aliases/UseAddApprovalOptions.mdx) | - | | [UseAddApprovalParams](/sdk-reference/comments/react/type-aliases/UseAddApprovalParams.mdx) | - | | [UseAddApprovalResult](/sdk-reference/comments/react/type-aliases/UseAddApprovalResult.mdx) | - | | [UseAddApprovalWithSigOptions](/sdk-reference/comments/react/type-aliases/UseAddApprovalWithSigOptions.mdx) | - | | [UseAddApprovalWithSigParams](/sdk-reference/comments/react/type-aliases/UseAddApprovalWithSigParams.mdx) | - | | [UseAddApprovalWithSigResult](/sdk-reference/comments/react/type-aliases/UseAddApprovalWithSigResult.mdx) | - | | [UseDeleteCommentOptions](/sdk-reference/comments/react/type-aliases/UseDeleteCommentOptions.mdx) | - | | [UseDeleteCommentParams](/sdk-reference/comments/react/type-aliases/UseDeleteCommentParams.mdx) | - | | [UseDeleteCommentResult](/sdk-reference/comments/react/type-aliases/UseDeleteCommentResult.mdx) | - | | [UseDeleteCommentWithSigOptions](/sdk-reference/comments/react/type-aliases/UseDeleteCommentWithSigOptions.mdx) | - | | [UseDeleteCommentWithSigParams](/sdk-reference/comments/react/type-aliases/UseDeleteCommentWithSigParams.mdx) | - | | [UseDeleteCommentWithSigResult](/sdk-reference/comments/react/type-aliases/UseDeleteCommentWithSigResult.mdx) | - | | [UseEditCommentOptions](/sdk-reference/comments/react/type-aliases/UseEditCommentOptions.mdx) | - | | [UseEditCommentParams](/sdk-reference/comments/react/type-aliases/UseEditCommentParams.mdx) | - | | [UseEditCommentResult](/sdk-reference/comments/react/type-aliases/UseEditCommentResult.mdx) | - | | [UseEditCommentWithSigOptions](/sdk-reference/comments/react/type-aliases/UseEditCommentWithSigOptions.mdx) | - | | [UseEditCommentWithSigParams](/sdk-reference/comments/react/type-aliases/UseEditCommentWithSigParams.mdx) | - | | [UseEditCommentWithSigResult](/sdk-reference/comments/react/type-aliases/UseEditCommentWithSigResult.mdx) | - | | [UseGetChannelManagerOptions](/sdk-reference/comments/react/type-aliases/UseGetChannelManagerOptions.mdx) | - | | [UseGetChannelManagerParams](/sdk-reference/comments/react/type-aliases/UseGetChannelManagerParams.mdx) | - | | [UseGetChannelManagerResult](/sdk-reference/comments/react/type-aliases/UseGetChannelManagerResult.mdx) | - | | [UseGetCommentIdOptions](/sdk-reference/comments/react/type-aliases/UseGetCommentIdOptions.mdx) | - | | [UseGetCommentIdParams](/sdk-reference/comments/react/type-aliases/UseGetCommentIdParams.mdx) | - | | [UseGetCommentIdResult](/sdk-reference/comments/react/type-aliases/UseGetCommentIdResult.mdx) | - | | [UseGetCommentOptions](/sdk-reference/comments/react/type-aliases/UseGetCommentOptions.mdx) | - | | [UseGetCommentParams](/sdk-reference/comments/react/type-aliases/UseGetCommentParams.mdx) | - | | [UseGetCommentResult](/sdk-reference/comments/react/type-aliases/UseGetCommentResult.mdx) | - | | [UseGetContractNameOptions](/sdk-reference/comments/react/type-aliases/UseGetContractNameOptions.mdx) | - | | [UseGetContractNameParams](/sdk-reference/comments/react/type-aliases/UseGetContractNameParams.mdx) | - | | [UseGetContractNameResult](/sdk-reference/comments/react/type-aliases/UseGetContractNameResult.mdx) | - | | [UseGetContractVersionOptions](/sdk-reference/comments/react/type-aliases/UseGetContractVersionOptions.mdx) | - | | [UseGetContractVersionParams](/sdk-reference/comments/react/type-aliases/UseGetContractVersionParams.mdx) | - | | [UseGetContractVersionResult](/sdk-reference/comments/react/type-aliases/UseGetContractVersionResult.mdx) | - | | [UseGetDeleteCommentHashOptions](/sdk-reference/comments/react/type-aliases/UseGetDeleteCommentHashOptions.mdx) | - | | [UseGetDeleteCommentHashParams](/sdk-reference/comments/react/type-aliases/UseGetDeleteCommentHashParams.mdx) | - | | [UseGetDeleteCommentHashResult](/sdk-reference/comments/react/type-aliases/UseGetDeleteCommentHashResult.mdx) | - | | [UseGetDomainSeparatorOptions](/sdk-reference/comments/react/type-aliases/UseGetDomainSeparatorOptions.mdx) | - | | [UseGetDomainSeparatorParams](/sdk-reference/comments/react/type-aliases/UseGetDomainSeparatorParams.mdx) | - | | [UseGetDomainSeparatorResult](/sdk-reference/comments/react/type-aliases/UseGetDomainSeparatorResult.mdx) | - | | [UseGetEditCommentHashOptions](/sdk-reference/comments/react/type-aliases/UseGetEditCommentHashOptions.mdx) | - | | [UseGetEditCommentHashParams](/sdk-reference/comments/react/type-aliases/UseGetEditCommentHashParams.mdx) | - | | [UseGetEditCommentHashResult](/sdk-reference/comments/react/type-aliases/UseGetEditCommentHashResult.mdx) | - | | [UseIsApprovedOptions](/sdk-reference/comments/react/type-aliases/UseIsApprovedOptions.mdx) | - | | [UseIsApprovedParams](/sdk-reference/comments/react/type-aliases/UseIsApprovedParams.mdx) | - | | [UseIsApprovedResult](/sdk-reference/comments/react/type-aliases/UseIsApprovedResult.mdx) | - | | [UsePostCommentOptions](/sdk-reference/comments/react/type-aliases/UsePostCommentOptions.mdx) | - | | [UsePostCommentParams](/sdk-reference/comments/react/type-aliases/UsePostCommentParams.mdx) | - | | [UsePostCommentResult](/sdk-reference/comments/react/type-aliases/UsePostCommentResult.mdx) | - | | [UsePostCommentWithSigOptions](/sdk-reference/comments/react/type-aliases/UsePostCommentWithSigOptions.mdx) | - | | [UsePostCommentWithSigParams](/sdk-reference/comments/react/type-aliases/UsePostCommentWithSigParams.mdx) | - | | [UsePostCommentWithSigResult](/sdk-reference/comments/react/type-aliases/UsePostCommentWithSigResult.mdx) | - | | [UseRevokeApprovalOptions](/sdk-reference/comments/react/type-aliases/UseRevokeApprovalOptions.mdx) | - | | [UseRevokeApprovalParams](/sdk-reference/comments/react/type-aliases/UseRevokeApprovalParams.mdx) | - | | [UseRevokeApprovalResult](/sdk-reference/comments/react/type-aliases/UseRevokeApprovalResult.mdx) | - | | [UseRevokeApprovalWithSigOptions](/sdk-reference/comments/react/type-aliases/UseRevokeApprovalWithSigOptions.mdx) | - | | [UseRevokeApprovalWithSigParams](/sdk-reference/comments/react/type-aliases/UseRevokeApprovalWithSigParams.mdx) | - | | [UseRevokeApprovalWithSigResult](/sdk-reference/comments/react/type-aliases/UseRevokeApprovalWithSigResult.mdx) | - | | [UseUpdateChannelContractOptions](/sdk-reference/comments/react/type-aliases/UseUpdateChannelContractOptions.mdx) | - | | [UseUpdateChannelContractParams](/sdk-reference/comments/react/type-aliases/UseUpdateChannelContractParams.mdx) | - | | [UseUpdateChannelContractResult](/sdk-reference/comments/react/type-aliases/UseUpdateChannelContractResult.mdx) | - | | [useAddApproval](/sdk-reference/comments/react/functions/useAddApproval.mdx) | React hook to approve an app signer directly as author | | [useAddApprovalWithSig](/sdk-reference/comments/react/functions/useAddApprovalWithSig.mdx) | React hook to add an app signer approval with signature verification | | [useDeleteComment](/sdk-reference/comments/react/functions/useDeleteComment.mdx) | React hook to delete a comment as an author | | [useDeleteCommentWithSig](/sdk-reference/comments/react/functions/useDeleteCommentWithSig.mdx) | React hook to delete a comment with app signature verification | | [useEditComment](/sdk-reference/comments/react/functions/useEditComment.mdx) | React hook to edit a comment as an author | | [useEditCommentWithSig](/sdk-reference/comments/react/functions/useEditCommentWithSig.mdx) | React hook to edit a comment with app signature verification | | [useGetChannelManager](/sdk-reference/comments/react/functions/useGetChannelManager.mdx) | React hook to get the channel manager contract address | | [useGetComment](/sdk-reference/comments/react/functions/useGetComment.mdx) | React hook to get a comment by ID | | [useGetCommentId](/sdk-reference/comments/react/functions/useGetCommentId.mdx) | React hook to get the ID for a comment before it is posted | | [useGetContractName](/sdk-reference/comments/react/functions/useGetContractName.mdx) | React hook to get the contract name | | [useGetContractVersion](/sdk-reference/comments/react/functions/useGetContractVersion.mdx) | React hook to get the contract version | | [useGetDeleteCommentHash](/sdk-reference/comments/react/functions/useGetDeleteCommentHash.mdx) | React hook to get the hash for deleting a comment | | [useGetDomainSeparator](/sdk-reference/comments/react/functions/useGetDomainSeparator.mdx) | React hook to get the EIP-712 domain separator | | [useGetEditCommentHash](/sdk-reference/comments/react/functions/useGetEditCommentHash.mdx) | React hook to get the hash for editing a comment | | [useGetNonce](/sdk-reference/comments/react/functions/useGetNonce.mdx) | React hook to get the nonce for the author and app signer | | [useIsApproved](/sdk-reference/comments/react/functions/useIsApproved.mdx) | React hook to check if an app signer is approved for an author | | [usePostComment](/sdk-reference/comments/react/functions/usePostComment.mdx) | React hook to post a comment as an author | | [usePostCommentWithSig](/sdk-reference/comments/react/functions/usePostCommentWithSig.mdx) | React hook to post a comment with author signature verification | | [useRevokeApproval](/sdk-reference/comments/react/functions/useRevokeApproval.mdx) | React hook to revoke an app signer approval directly as author | | [useRevokeApprovalWithSig](/sdk-reference/comments/react/functions/useRevokeApprovalWithSig.mdx) | React hook to remove an app signer approval with signature verification | | [useUpdateChannelContract](/sdk-reference/comments/react/functions/useUpdateChannelContract.mdx) | React hook to update the channel manager contract address (only owner) | [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / AddApprovalParams ## Type Alias: AddApprovalParams ```ts type AddApprovalParams = { app: Hex; commentsAddress?: Hex; expiry?: bigint; writeContract: ContractWriteFunctions["addApproval"]; }; ``` Defined in: packages/sdk/src/comments/approval.ts:61 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:65 The address of the app signer being approved *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:76 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### expiry? ```ts optional expiry: bigint; ``` Defined in: packages/sdk/src/comments/approval.ts:70 Timestamp when the approval expires ##### Default ```ts 1 year from now ``` *** #### writeContract ```ts writeContract: ContractWriteFunctions["addApproval"]; ``` Defined in: packages/sdk/src/comments/approval.ts:77 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / AddApprovalResult ## Type Alias: AddApprovalResult ```ts type AddApprovalResult = { txHash: Hex; }; ``` Defined in: packages/sdk/src/comments/approval.ts:80 ### Properties #### txHash ```ts txHash: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:81 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / AddApprovalTypedDataSchemaType ## Type Alias: AddApprovalTypedDataSchemaType ```ts type AddApprovalTypedDataSchemaType = { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: { app: `0x${string}`; author: `0x${string}`; deadline: bigint; expiry: bigint; nonce: bigint; }; primaryType: "AddApproval"; types: { AddApproval: ( | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; } | { name: "expiry"; type: "uint256"; })[]; }; }; ``` Defined in: packages/sdk/src/comments/schemas.ts:296 ### Type declaration #### domain ```ts domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; ``` ##### domain.chainId ```ts chainId: number; ``` ##### domain.name ```ts name: "Ethereum Comments Protocol"; ``` ##### domain.verifyingContract ```ts verifyingContract: `0x${string}` = HexSchema; ``` ##### domain.version ```ts version: "1"; ``` #### message ```ts message: { app: `0x${string}`; author: `0x${string}`; deadline: bigint; expiry: bigint; nonce: bigint; }; ``` ##### message.app ```ts app: `0x${string}` = HexSchema; ``` ##### message.author ```ts author: `0x${string}` = HexSchema; ``` ##### message.deadline ```ts deadline: bigint; ``` ##### message.expiry ```ts expiry: bigint; ``` ##### message.nonce ```ts nonce: bigint; ``` #### primaryType ```ts primaryType: "AddApproval"; ``` #### types ```ts types: { AddApproval: ( | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; } | { name: "expiry"; type: "uint256"; })[]; }; ``` ##### types.AddApproval ```ts AddApproval: ( | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; } | { name: "expiry"; type: "uint256"; })[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / AddApprovalWithSigParams ## Type Alias: AddApprovalWithSigParams ```ts type AddApprovalWithSigParams = { commentsAddress?: Hex; signature: Hex; typedData: AddApprovalTypedDataSchemaType; writeContract: ContractWriteFunctions["addApproval"]; }; ``` Defined in: packages/sdk/src/comments/approval.ts:119 ### Properties #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:135 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### signature ```ts signature: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:129 Author's signature for typed data *** #### typedData ```ts typedData: AddApprovalTypedDataSchemaType; ``` Defined in: packages/sdk/src/comments/approval.ts:125 The typed data for the approval You can obtain this value by using createApprovalTypedData() *** #### writeContract ```ts writeContract: ContractWriteFunctions["addApproval"]; ``` Defined in: packages/sdk/src/comments/approval.ts:136 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / AddApprovalWithSigResult ## Type Alias: AddApprovalWithSigResult ```ts type AddApprovalWithSigResult = { txHash: Hex; }; ``` Defined in: packages/sdk/src/comments/approval.ts:139 ### Properties #### txHash ```ts txHash: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:140 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / AddCommentTypedDataSchemaType ## Type Alias: AddCommentTypedDataSchemaType ```ts type AddCommentTypedDataSchemaType = { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: string; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: ""; }; primaryType: "AddComment"; types: { AddComment: ( | { name: "content"; type: "string"; } | { name: "metadata"; type: "MetadataEntry[]"; } | { name: "targetUri"; type: "string"; } | { name: "commentType"; type: "uint8"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "channelId"; type: "uint256"; } | { name: "deadline"; type: "uint256"; } | { name: "parentId"; type: "bytes32"; })[]; MetadataEntry: ( | { name: "key"; type: "bytes32"; } | { name: "value"; type: "bytes"; })[]; }; }; ``` Defined in: packages/sdk/src/comments/schemas.ts:189 ### Type declaration #### domain ```ts domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; ``` ##### domain.chainId ```ts chainId: number; ``` ##### domain.name ```ts name: "Ethereum Comments Protocol"; ``` ##### domain.verifyingContract ```ts verifyingContract: `0x${string}` = HexSchema; ``` ##### domain.version ```ts version: "1"; ``` #### message ```ts message: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: string; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: ""; } = CommentInputDataSchema; ``` #### primaryType ```ts primaryType: "AddComment"; ``` #### types ```ts types: { AddComment: ( | { name: "content"; type: "string"; } | { name: "metadata"; type: "MetadataEntry[]"; } | { name: "targetUri"; type: "string"; } | { name: "commentType"; type: "uint8"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "channelId"; type: "uint256"; } | { name: "deadline"; type: "uint256"; } | { name: "parentId"; type: "bytes32"; })[]; MetadataEntry: ( | { name: "key"; type: "bytes32"; } | { name: "value"; type: "bytes"; })[]; }; ``` ##### types.AddComment ```ts AddComment: ( | { name: "content"; type: "string"; } | { name: "metadata"; type: "MetadataEntry[]"; } | { name: "targetUri"; type: "string"; } | { name: "commentType"; type: "uint8"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "channelId"; type: "uint256"; } | { name: "deadline"; type: "uint256"; } | { name: "parentId"; type: "bytes32"; })[]; ``` ##### types.MetadataEntry ```ts MetadataEntry: ( | { name: "key"; type: "bytes32"; } | { name: "value"; type: "bytes"; })[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / BaseEditCommentDataParams ## Type Alias: BaseEditCommentDataParams ```ts type BaseEditCommentDataParams = { app: Hex; commentId: Hex; content: string; deadline?: bigint; nonce: bigint; }; ``` Defined in: packages/sdk/src/comments/comment.ts:705 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:713 The app *** #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:709 The ID of the comment to edit *** #### content ```ts content: string; ``` Defined in: packages/sdk/src/comments/comment.ts:717 The content of the comment (either updated or original) *** #### deadline? ```ts optional deadline: bigint; ``` Defined in: packages/sdk/src/comments/comment.ts:727 The deadline of the comment ##### Default ```ts 1 day from now ``` *** #### nonce ```ts nonce: bigint; ``` Defined in: packages/sdk/src/comments/comment.ts:721 The nonce for the signature [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CommentData ## Type Alias: CommentData ```ts type CommentData = { app: Hex; authMethod: AuthorAuthMethod; author: Hex; channelId: bigint; commentType: number; content: string; createdAt: bigint; parentId: Hex; targetUri: string; updatedAt: bigint; }; ``` Defined in: packages/sdk/src/comments/types.ts:102 The data structure of a comment returned by the contract ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/types.ts:137 The address of the app signer *** #### authMethod ```ts authMethod: AuthorAuthMethod; ``` Defined in: packages/sdk/src/comments/types.ts:119 The authentication method used to create this comment 0 = DIRECT\_TX, 1 = APP\_APPROVAL, 2 = AUTHOR\_SIGNATURE *** #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/types.ts:133 The address of the author of the comment *** #### channelId ```ts channelId: bigint; ``` Defined in: packages/sdk/src/comments/types.ts:123 The ID of the channel *** #### commentType ```ts commentType: number; ``` Defined in: packages/sdk/src/comments/types.ts:114 The type of the comment (0 = comment, 1 = reaction) *** #### content ```ts content: string; ``` Defined in: packages/sdk/src/comments/types.ts:106 The content of the comment *** #### createdAt ```ts createdAt: bigint; ``` Defined in: packages/sdk/src/comments/types.ts:141 The timestamp of the comment creation in seconds since epoch *** #### parentId ```ts parentId: Hex; ``` Defined in: packages/sdk/src/comments/types.ts:129 id of parent comments if it has one, 0x for no parent comment ##### Remarks This zero address (32 bytes of zeros) indicates the comment has no parent and is a top-level comment *** #### targetUri ```ts targetUri: string; ``` Defined in: packages/sdk/src/comments/types.ts:110 Empty string for replies *** #### updatedAt ```ts updatedAt: bigint; ``` Defined in: packages/sdk/src/comments/types.ts:145 The timestamp of the comment update in seconds since epoch [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CommentInputData ## Type Alias: CommentInputData ```ts type CommentInputData = | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: string; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: ""; }; ``` Defined in: packages/sdk/src/comments/schemas.ts:135 Comment input data schema. This is used as input of the functions. It validates precisely what shapes we expect in case of a comment or a reply. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CommentManagerABIType ## Type Alias: CommentManagerABIType ```ts type CommentManagerABIType = typeof CommentManagerABI; ``` Defined in: packages/sdk/src/comments/types.ts:17 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CommentTypeSchemaType ## Type Alias: CommentTypeSchemaType ```ts type CommentTypeSchemaType = number; ``` Defined in: packages/sdk/src/comments/schemas.ts:21 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / ContractReadFunctions ## Type Alias: ContractReadFunctions ```ts type ContractReadFunctions = { channelManager: (args) => Promise>; DOMAIN_SEPARATOR: (args) => Promise>; getAddApprovalHash: (args) => Promise>; getComment: (args) => Promise>; getCommentId: (args) => Promise>; getDeleteCommentHash: (args) => Promise>; getEditCommentHash: (args) => Promise>; getIsApproved: (args) => Promise>; getNonce: (args) => Promise>; getRemoveApprovalHash: (args) => Promise>; name: (args) => Promise>; version: (args) => Promise>; }; ``` Defined in: packages/sdk/src/comments/types.ts:246 ### Properties #### channelManager() ```ts channelManager: (args) => Promise>; ``` Defined in: packages/sdk/src/comments/types.ts:304 ##### Parameters ##### args `ReadContractParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"channelManager"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"channelManager"`>> *** #### DOMAIN\_SEPARATOR() ```ts DOMAIN_SEPARATOR: (args) => Promise>; ``` Defined in: packages/sdk/src/comments/types.ts:298 ##### Parameters ##### args `ReadContractParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"DOMAIN_SEPARATOR"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"DOMAIN_SEPARATOR"`>> *** #### getAddApprovalHash() ```ts getAddApprovalHash: (args) => Promise>; ``` Defined in: packages/sdk/src/comments/types.ts:247 ##### Parameters ##### args `ReadContractParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"getAddApprovalHash"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"getAddApprovalHash"`>> *** #### getComment() ```ts getComment: (args) => Promise>; ``` Defined in: packages/sdk/src/comments/types.ts:278 ##### Parameters ##### args `ReadContractParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"getComment"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"getComment"`>> *** #### getCommentId() ```ts getCommentId: (args) => Promise>; ``` Defined in: packages/sdk/src/comments/types.ts:274 ##### Parameters ##### args `ReadContractParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"getCommentId"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"getCommentId"`>> *** #### getDeleteCommentHash() ```ts getDeleteCommentHash: (args) => Promise>; ``` Defined in: packages/sdk/src/comments/types.ts:262 ##### Parameters ##### args `ReadContractParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"getDeleteCommentHash"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"getDeleteCommentHash"`>> *** #### getEditCommentHash() ```ts getEditCommentHash: (args) => Promise>; ``` Defined in: packages/sdk/src/comments/types.ts:268 ##### Parameters ##### args `ReadContractParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"getEditCommentHash"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"getEditCommentHash"`>> *** #### getIsApproved() ```ts getIsApproved: (args) => Promise>; ``` Defined in: packages/sdk/src/comments/types.ts:282 ##### Parameters ##### args `ReadContractParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"isApproved"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"isApproved"`>> *** #### getNonce() ```ts getNonce: (args) => Promise>; ``` Defined in: packages/sdk/src/comments/types.ts:286 ##### Parameters ##### args `ReadContractParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"getNonce"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"getNonce"`>> *** #### getRemoveApprovalHash() ```ts getRemoveApprovalHash: (args) => Promise>; ``` Defined in: packages/sdk/src/comments/types.ts:253 ##### Parameters ##### args `ReadContractParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"getRemoveApprovalHash"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"getRemoveApprovalHash"`>> *** #### name() ```ts name: (args) => Promise>; ``` Defined in: packages/sdk/src/comments/types.ts:290 ##### Parameters ##### args `ReadContractParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"name"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"name"`>> *** #### version() ```ts version: (args) => Promise>; ``` Defined in: packages/sdk/src/comments/types.ts:294 ##### Parameters ##### args `ReadContractParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"version"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"version"`>> [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / ContractWriteFunctions ## Type Alias: ContractWriteFunctions ```ts type ContractWriteFunctions = { addApproval: (args) => Promise; addApprovalWithSig: (args) => Promise; deleteComment: (args) => Promise; deleteCommentWithSig: (args) => Promise; editComment: (args) => Promise; editCommentWithSig: (args) => Promise; postComment: (args) => Promise; postCommentWithSig: (args) => Promise; removeApprovalWithSig: (args) => Promise; revokeApproval: (args) => Promise; updateChannelContract: (args) => Promise; }; ``` Defined in: packages/sdk/src/comments/types.ts:148 ### Properties #### addApproval() ```ts addApproval: (args) => Promise; ``` Defined in: packages/sdk/src/comments/types.ts:177 ##### Parameters ##### args `ContractFunctionParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"nonpayable"`, `"addApproval"`> ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### addApprovalWithSig() ```ts addApprovalWithSig: (args) => Promise; ``` Defined in: packages/sdk/src/comments/types.ts:169 ##### Parameters ##### args `ContractFunctionParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"nonpayable"`, `"addApprovalWithSig"`> ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### deleteComment() ```ts deleteComment: (args) => Promise; ``` Defined in: packages/sdk/src/comments/types.ts:193 ##### Parameters ##### args `ContractFunctionParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"nonpayable"`, `"deleteComment"`> ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### deleteCommentWithSig() ```ts deleteCommentWithSig: (args) => Promise; ``` Defined in: packages/sdk/src/comments/types.ts:185 ##### Parameters ##### args `ContractFunctionParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"nonpayable"`, `"deleteCommentWithSig"`> ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### editComment() ```ts editComment: (args) => Promise; ``` Defined in: packages/sdk/src/comments/types.ts:211 ##### Parameters ##### args `ContractFunctionParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"payable"`, `"editComment"`> & \{ `value?`: `bigint`; } ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### editCommentWithSig() ```ts editCommentWithSig: (args) => Promise; ``` Defined in: packages/sdk/src/comments/types.ts:201 ##### Parameters ##### args `ContractFunctionParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"payable"`, `"editCommentWithSig"`> & \{ `value?`: `bigint`; } ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### postComment() ```ts postComment: (args) => Promise; ``` Defined in: packages/sdk/src/comments/types.ts:159 ##### Parameters ##### args `ContractFunctionParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"payable"`, `"postComment"`> & \{ `value?`: `bigint`; } ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### postCommentWithSig() ```ts postCommentWithSig: (args) => Promise; ``` Defined in: packages/sdk/src/comments/types.ts:149 ##### Parameters ##### args `ContractFunctionParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"payable"`, `"postCommentWithSig"`> & \{ `value?`: `bigint`; } ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### removeApprovalWithSig() ```ts removeApprovalWithSig: (args) => Promise; ``` Defined in: packages/sdk/src/comments/types.ts:221 ##### Parameters ##### args `ContractFunctionParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"nonpayable"`, `"removeApprovalWithSig"`> ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### revokeApproval() ```ts revokeApproval: (args) => Promise; ``` Defined in: packages/sdk/src/comments/types.ts:229 ##### Parameters ##### args `ContractFunctionParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"nonpayable"`, `"revokeApproval"`> ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### updateChannelContract() ```ts updateChannelContract: (args) => Promise; ``` Defined in: packages/sdk/src/comments/types.ts:237 ##### Parameters ##### args `ContractFunctionParameters`\<[`CommentManagerABIType`](/sdk-reference/comments/type-aliases/CommentManagerABIType.mdx), `"nonpayable"`, `"updateChannelContract"`> ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CreateApprovalTypedDataParams ## Type Alias: CreateApprovalTypedDataParams ```ts type CreateApprovalTypedDataParams = { app: Hex; author: Hex; chainId: number; commentsAddress?: Hex; deadline?: bigint; nonce: bigint; }; ``` Defined in: packages/sdk/src/comments/approval.ts:454 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:456 *** #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:455 *** #### chainId ```ts chainId: number; ``` Defined in: packages/sdk/src/comments/approval.ts:460 The chain ID *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:472 The address of the comments contract *** #### deadline? ```ts optional deadline: bigint; ``` Defined in: packages/sdk/src/comments/approval.ts:468 Timestamp after which the signature becomes invalid *** #### nonce ```ts nonce: bigint; ``` Defined in: packages/sdk/src/comments/approval.ts:464 The current nonce for the author and app signer [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CreateApprovalTypedDataResult ## Type Alias: CreateApprovalTypedDataResult ```ts type CreateApprovalTypedDataResult = AddApprovalTypedDataSchemaType; ``` Defined in: packages/sdk/src/comments/approval.ts:475 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CreateCommentData ## Type Alias: CreateCommentData ```ts type CreateCommentData = { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: string; }; ``` Defined in: packages/sdk/src/comments/schemas.ts:83 ### Type declaration #### app ```ts app: `0x${string}` = HexSchema; ``` #### author ```ts author: `0x${string}` = HexSchema; ``` #### channelId ```ts channelId: bigint; ``` #### commentType ```ts commentType: number = CommentTypeSchema; ``` #### content ```ts content: string; ``` #### deadline ```ts deadline: bigint; ``` #### metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[]; ``` #### parentId ```ts parentId: `0x${string}` = HexSchema; ``` #### targetUri ```ts targetUri: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CreateCommentDataParams ## Type Alias: CreateCommentDataParams ```ts type CreateCommentDataParams = | CreateRootCommentDataParams | CreateReplyCommentDataParams; ``` Defined in: packages/sdk/src/comments/types.ts:95 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CreateCommentDataParamsShared ## Type Alias: CreateCommentDataParamsShared ```ts type CreateCommentDataParamsShared = { app: Hex; author: Hex; channelId?: bigint; commentType?: number; content: string; deadline?: bigint; metadata?: MetadataEntry[]; }; ``` Defined in: packages/sdk/src/comments/types.ts:49 The shared parameters for creating a comment ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/types.ts:74 The address of the app signer *** #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/types.ts:72 The address of the author of the comment *** #### channelId? ```ts optional channelId: bigint; ``` Defined in: packages/sdk/src/comments/types.ts:59 The ID of the channel the comment is being made in If not provided, the default channel ID (0) will be used ##### Default ```ts 0n ``` *** #### commentType? ```ts optional commentType: number; ``` Defined in: packages/sdk/src/comments/types.ts:68 The type of the comment 0 = standard comment, 1 = reaction If not provided, the default comment type (0) will be used ##### Default ```ts 0 ``` *** #### content ```ts content: string; ``` Defined in: packages/sdk/src/comments/types.ts:51 The content of the comment *** #### deadline? ```ts optional deadline: bigint; ``` Defined in: packages/sdk/src/comments/types.ts:76 The deadline of the comment submission in seconds since epoch *** #### metadata? ```ts optional metadata: MetadataEntry[]; ``` Defined in: packages/sdk/src/comments/types.ts:70 Metadata about the comment as key-value pairs [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CreateCommentTypedDataParams ## Type Alias: CreateCommentTypedDataParams ```ts type CreateCommentTypedDataParams = { chainId: number; commentData: CommentInputData; commentsAddress?: Hex; }; ``` Defined in: packages/sdk/src/comments/comment.ts:515 ### Properties #### chainId ```ts chainId: number; ``` Defined in: packages/sdk/src/comments/comment.ts:517 *** #### commentData ```ts commentData: CommentInputData; ``` Defined in: packages/sdk/src/comments/comment.ts:516 *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:522 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CreateDeleteCommentTypedDataParams ## Type Alias: CreateDeleteCommentTypedDataParams ```ts type CreateDeleteCommentTypedDataParams = { app: Hex; author: Hex; chainId: number; commentId: Hex; commentsAddress?: Hex; deadline?: bigint; }; ``` Defined in: packages/sdk/src/comments/comment.ts:593 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:603 The app signer *** #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:599 The author of the comment *** #### chainId ```ts chainId: number; ``` Defined in: packages/sdk/src/comments/comment.ts:595 *** #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:594 *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:614 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### deadline? ```ts optional deadline: bigint; ``` Defined in: packages/sdk/src/comments/comment.ts:609 The deadline of the comment ##### Default ```ts 1 day from now ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CreateEditCommentTypedDataParams ## Type Alias: CreateEditCommentTypedDataParams ```ts type CreateEditCommentTypedDataParams = { author: Hex; chainId: number; commentsAddress?: Hex; edit: EditCommentData; }; ``` Defined in: packages/sdk/src/comments/comment.ts:766 ### Properties #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:770 The author of the comment *** #### chainId ```ts chainId: number; ``` Defined in: packages/sdk/src/comments/comment.ts:780 The chain ID *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:785 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### edit ```ts edit: EditCommentData; ``` Defined in: packages/sdk/src/comments/comment.ts:776 The edit data You can obtain this by using the `createEditCommentData()` function [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CreateRemoveApprovalTypedDataParams ## Type Alias: CreateRemoveApprovalTypedDataParams ```ts type CreateRemoveApprovalTypedDataParams = { app: Hex; author: Hex; chainId: number; commentsAddress?: Hex; deadline?: bigint; nonce: bigint; }; ``` Defined in: packages/sdk/src/comments/approval.ts:523 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:531 The address of the app signer *** #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:527 The address of the author *** #### chainId ```ts chainId: number; ``` Defined in: packages/sdk/src/comments/approval.ts:535 The chain ID *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:547 The address of the comments contract *** #### deadline? ```ts optional deadline: bigint; ``` Defined in: packages/sdk/src/comments/approval.ts:543 Timestamp after which the signature becomes invalid *** #### nonce ```ts nonce: bigint; ``` Defined in: packages/sdk/src/comments/approval.ts:539 The current nonce for the author and app signer [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CreateRemoveApprovalTypedDataResult ## Type Alias: CreateRemoveApprovalTypedDataResult ```ts type CreateRemoveApprovalTypedDataResult = RemoveApprovalTypedDataSchemaType; ``` Defined in: packages/sdk/src/comments/approval.ts:550 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CreateReplyCommentDataParams ## Type Alias: CreateReplyCommentDataParams ```ts type CreateReplyCommentDataParams = CreateCommentDataParamsShared & { parentId: Hex; }; ``` Defined in: packages/sdk/src/comments/types.ts:90 The parameters for creating a reply comment ### Type declaration #### parentId ```ts parentId: Hex; ``` The ID of the parent comment [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CreateReportCommentTypedDataParams ## Type Alias: CreateReportCommentTypedDataParams ```ts type CreateReportCommentTypedDataParams = { chainId: number; commentId: Hex; commentsAddress?: Hex; message?: string; reportee: Hex; }; ``` Defined in: packages/sdk/src/comments/comment.ts:970 ### Properties #### chainId ```ts chainId: number; ``` Defined in: packages/sdk/src/comments/comment.ts:974 *** #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:971 *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:975 *** #### message? ```ts optional message: string; ``` Defined in: packages/sdk/src/comments/comment.ts:973 *** #### reportee ```ts reportee: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:972 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CreateRootCommentDataParams ## Type Alias: CreateRootCommentDataParams ```ts type CreateRootCommentDataParams = CreateCommentDataParamsShared & { targetUri: string; }; ``` Defined in: packages/sdk/src/comments/types.ts:82 The parameters for creating a root comment ### Type declaration #### targetUri ```ts targetUri: string; ``` The URI of the page the comment is about [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / DeleteCommentParams ## Type Alias: DeleteCommentParams ```ts type DeleteCommentParams = { commentId: Hex; commentsAddress?: Hex; writeContract: ContractWriteFunctions["deleteComment"]; }; ``` Defined in: packages/sdk/src/comments/comment.ts:277 ### Properties #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:281 The ID of the comment to delete *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:286 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### writeContract ```ts writeContract: ContractWriteFunctions["deleteComment"]; ``` Defined in: packages/sdk/src/comments/comment.ts:287 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / DeleteCommentResult ## Type Alias: DeleteCommentResult ```ts type DeleteCommentResult = WaitableWriteContractHelperResult; ``` Defined in: packages/sdk/src/comments/comment.ts:290 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / DeleteCommentTypedDataSchemaType ## Type Alias: DeleteCommentTypedDataSchemaType ```ts type DeleteCommentTypedDataSchemaType = { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: { app: `0x${string}`; author: `0x${string}`; commentId: `0x${string}`; deadline: bigint; }; primaryType: "DeleteComment"; types: { DeleteComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "deadline"; type: "uint256"; })[]; }; }; ``` Defined in: packages/sdk/src/comments/schemas.ts:219 ### Type declaration #### domain ```ts domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; ``` ##### domain.chainId ```ts chainId: number; ``` ##### domain.name ```ts name: "Ethereum Comments Protocol"; ``` ##### domain.verifyingContract ```ts verifyingContract: `0x${string}` = HexSchema; ``` ##### domain.version ```ts version: "1"; ``` #### message ```ts message: { app: `0x${string}`; author: `0x${string}`; commentId: `0x${string}`; deadline: bigint; }; ``` ##### message.app ```ts app: `0x${string}` = HexSchema; ``` ##### message.author ```ts author: `0x${string}` = HexSchema; ``` ##### message.commentId ```ts commentId: `0x${string}` = HexSchema; ``` ##### message.deadline ```ts deadline: bigint; ``` #### primaryType ```ts primaryType: "DeleteComment"; ``` #### types ```ts types: { DeleteComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "deadline"; type: "uint256"; })[]; }; ``` ##### types.DeleteComment ```ts DeleteComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "deadline"; type: "uint256"; })[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / DeleteCommentWithSigParams ## Type Alias: DeleteCommentWithSigParams ```ts type DeleteCommentWithSigParams = { app: Hex; appSignature: Hex; authorSignature?: Hex; commentId: Hex; commentsAddress?: Hex; deadline: bigint; writeContract: ContractWriteFunctions["deleteCommentWithSig"]; }; ``` Defined in: packages/sdk/src/comments/comment.ts:327 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:335 The app signer *** #### appSignature ```ts appSignature: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:348 The app signature *** #### authorSignature? ```ts optional authorSignature: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:352 The author signature. Necessary if the author hasn't approved the signer to delete comments on their behalf. *** #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:331 The ID of the comment to delete *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:344 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### deadline ```ts deadline: bigint; ``` Defined in: packages/sdk/src/comments/comment.ts:339 The deadline for the signature *** #### writeContract ```ts writeContract: ContractWriteFunctions["deleteCommentWithSig"]; ``` Defined in: packages/sdk/src/comments/comment.ts:356 The write contract function [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / DeleteCommentWithSigResult ## Type Alias: DeleteCommentWithSigResult ```ts type DeleteCommentWithSigResult = WaitableWriteContractHelperResult; ``` Defined in: packages/sdk/src/comments/comment.ts:359 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / EditCommentData ## Type Alias: EditCommentData ```ts type EditCommentData = { app: `0x${string}`; commentId: `0x${string}`; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; nonce: bigint; }; ``` Defined in: packages/sdk/src/comments/schemas.ts:152 Edit comment data schema. This is used as input of the functions. ### Type declaration #### app ```ts app: `0x${string}` = HexSchema; ``` #### commentId ```ts commentId: `0x${string}` = HexSchema; ``` #### content ```ts content: string; ``` #### deadline ```ts deadline: bigint; ``` #### metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[]; ``` #### nonce ```ts nonce: bigint; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / EditCommentDataParams ## Type Alias: EditCommentDataParams ```ts type EditCommentDataParams = EditCommentDataParamsWithMetadataEntries; ``` Defined in: packages/sdk/src/comments/comment.ts:738 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / EditCommentDataParamsWithMetadataEntries ## Type Alias: EditCommentDataParamsWithMetadataEntries ```ts type EditCommentDataParamsWithMetadataEntries = BaseEditCommentDataParams & { metadata: MetadataEntry[]; }; ``` Defined in: packages/sdk/src/comments/comment.ts:730 ### Type declaration #### metadata ```ts metadata: MetadataEntry[]; ``` The metadata of the comment as MetadataEntry array (new format) [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / EditCommentParams ## Type Alias: EditCommentParams ```ts type EditCommentParams = { appSignature: Hex; commentsAddress?: Hex; edit: EditCommentData; fee?: bigint; writeContract: ContractWriteFunctions["editComment"]; }; ``` Defined in: packages/sdk/src/comments/comment.ts:823 ### Properties #### appSignature ```ts appSignature: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:842 The author signature. *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:838 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### edit ```ts edit: EditCommentData; ``` Defined in: packages/sdk/src/comments/comment.ts:829 The edit data You can obtain this by using the `createEditCommentData()` function *** #### fee? ```ts optional fee: bigint; ``` Defined in: packages/sdk/src/comments/comment.ts:833 The fee for the edit operation *** #### writeContract ```ts writeContract: ContractWriteFunctions["editComment"]; ``` Defined in: packages/sdk/src/comments/comment.ts:846 The write contract function [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / EditCommentResult ## Type Alias: EditCommentResult ```ts type EditCommentResult = WaitableWriteContractHelperResult; ``` Defined in: packages/sdk/src/comments/comment.ts:856 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / EditCommentTypedDataSchemaType ## Type Alias: EditCommentTypedDataSchemaType ```ts type EditCommentTypedDataSchemaType = { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: { app: `0x${string}`; author: `0x${string}`; commentId: `0x${string}`; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; nonce: bigint; }; primaryType: "EditComment"; types: { EditComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "content"; type: "string"; } | { name: "metadata"; type: "MetadataEntry[]"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; })[]; MetadataEntry: ( | { name: "key"; type: "bytes32"; } | { name: "value"; type: "bytes"; })[]; }; }; ``` Defined in: packages/sdk/src/comments/schemas.ts:264 ### Type declaration #### domain ```ts domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; ``` ##### domain.chainId ```ts chainId: number; ``` ##### domain.name ```ts name: "Ethereum Comments Protocol"; ``` ##### domain.verifyingContract ```ts verifyingContract: `0x${string}` = HexSchema; ``` ##### domain.version ```ts version: "1"; ``` #### message ```ts message: { app: `0x${string}`; author: `0x${string}`; commentId: `0x${string}`; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; nonce: bigint; }; ``` ##### message.app ```ts app: `0x${string}` = HexSchema; ``` ##### message.author ```ts author: `0x${string}` = HexSchema; ``` ##### message.commentId ```ts commentId: `0x${string}` = HexSchema; ``` ##### message.content ```ts content: string; ``` ##### message.deadline ```ts deadline: bigint; ``` ##### message.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = MetadataArraySchema; ``` ##### message.nonce ```ts nonce: bigint; ``` #### primaryType ```ts primaryType: "EditComment"; ``` #### types ```ts types: { EditComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "content"; type: "string"; } | { name: "metadata"; type: "MetadataEntry[]"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; })[]; MetadataEntry: ( | { name: "key"; type: "bytes32"; } | { name: "value"; type: "bytes"; })[]; }; ``` ##### types.EditComment ```ts EditComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "content"; type: "string"; } | { name: "metadata"; type: "MetadataEntry[]"; } | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; })[]; ``` ##### types.MetadataEntry ```ts MetadataEntry: ( | { name: "key"; type: "bytes32"; } | { name: "value"; type: "bytes"; })[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / EditCommentWithSigParams ## Type Alias: EditCommentWithSigParams ```ts type EditCommentWithSigParams = { appSignature: Hex; authorSignature?: Hex; commentsAddress?: Hex; edit: EditCommentData; fee?: bigint; writeContract: ContractWriteFunctions["editCommentWithSig"]; }; ``` Defined in: packages/sdk/src/comments/comment.ts:890 ### Properties #### appSignature ```ts appSignature: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:909 The app signature *** #### authorSignature? ```ts optional authorSignature: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:913 The author signature. Necessary if the author hasn't approved the signer to edit comments on their behalf. *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:905 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### edit ```ts edit: EditCommentData; ``` Defined in: packages/sdk/src/comments/comment.ts:896 The edit data You can obtain this by using the `createEditCommentData()` function *** #### fee? ```ts optional fee: bigint; ``` Defined in: packages/sdk/src/comments/comment.ts:900 The fee for the edit operation *** #### writeContract ```ts writeContract: ContractWriteFunctions["editCommentWithSig"]; ``` Defined in: packages/sdk/src/comments/comment.ts:917 The write contract function [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / EditCommentWithSigResult ## Type Alias: EditCommentWithSigResult ```ts type EditCommentWithSigResult = WaitableWriteContractHelperResult; ``` Defined in: packages/sdk/src/comments/comment.ts:928 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / GetAddApprovalHashData ## Type Alias: GetAddApprovalHashData ```ts type GetAddApprovalHashData = { app: Hex; author: Hex; deadline: bigint; nonce: bigint; }; ``` Defined in: packages/sdk/src/comments/approval.ts:330 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:332 *** #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:331 *** #### deadline ```ts deadline: bigint; ``` Defined in: packages/sdk/src/comments/approval.ts:334 *** #### nonce ```ts nonce: bigint; ``` Defined in: packages/sdk/src/comments/approval.ts:333 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / GetAddApprovalHashParams ## Type Alias: GetAddApprovalHashParams ```ts type GetAddApprovalHashParams = { app: Hex; author: Hex; commentsAddress?: Hex; deadline?: bigint; expiry?: bigint; nonce: bigint; readContract: ContractReadFunctions["getAddApprovalHash"]; }; ``` Defined in: packages/sdk/src/comments/approval.ts:297 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:305 The address of the app signer *** #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:301 The address of the author *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:326 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### deadline? ```ts optional deadline: bigint; ``` Defined in: packages/sdk/src/comments/approval.ts:315 Timestamp after which the signature becomes invalid ##### Default ```ts 1 day from now ``` *** #### expiry? ```ts optional expiry: bigint; ``` Defined in: packages/sdk/src/comments/approval.ts:320 Timestamp when the approval expires ##### Default ```ts 1 year from now ``` *** #### nonce ```ts nonce: bigint; ``` Defined in: packages/sdk/src/comments/approval.ts:309 The current nonce for the author *** #### readContract ```ts readContract: ContractReadFunctions["getAddApprovalHash"]; ``` Defined in: packages/sdk/src/comments/approval.ts:327 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / GetAddApprovalHashResult ## Type Alias: GetAddApprovalHashResult ```ts type GetAddApprovalHashResult = { data: GetAddApprovalHashData; hash: Hex; }; ``` Defined in: packages/sdk/src/comments/approval.ts:337 ### Properties #### data ```ts data: GetAddApprovalHashData; ``` Defined in: packages/sdk/src/comments/approval.ts:339 *** #### hash ```ts hash: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:338 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / GetChannelManagerParams ## Type Alias: GetChannelManagerParams ```ts type GetChannelManagerParams = { commentsContractAddress?: Hex; readContract: ContractReadFunctions["channelManager"]; }; ``` Defined in: packages/sdk/src/comments/contract.ts:154 ### Properties #### commentsContractAddress? ```ts optional commentsContractAddress: Hex; ``` Defined in: packages/sdk/src/comments/contract.ts:159 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["channelManager"]; ``` Defined in: packages/sdk/src/comments/contract.ts:160 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / GetCommentIdParams ## Type Alias: GetCommentIdParams ```ts type GetCommentIdParams = { commentData: CreateCommentDataParams; commentsAddress?: Hex; readContract: ContractReadFunctions["getCommentId"]; }; ``` Defined in: packages/sdk/src/comments/comment.ts:239 ### Properties #### commentData ```ts commentData: CreateCommentDataParams; ``` Defined in: packages/sdk/src/comments/comment.ts:243 The comment data to get ID for *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:248 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["getCommentId"]; ``` Defined in: packages/sdk/src/comments/comment.ts:249 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / GetCommentParams ## Type Alias: GetCommentParams ```ts type GetCommentParams = { commentId: Hex; commentsAddress?: Hex; readContract: ContractReadFunctions["getComment"]; }; ``` Defined in: packages/sdk/src/comments/comment.ts:192 ### Properties #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:196 The ID of the comment to get *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:201 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["getComment"]; ``` Defined in: packages/sdk/src/comments/comment.ts:202 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / GetCommentResult ## Type Alias: GetCommentResult ```ts type GetCommentResult = { comment: CommentData; }; ``` Defined in: packages/sdk/src/comments/comment.ts:205 ### Properties #### comment ```ts comment: CommentData; ``` Defined in: packages/sdk/src/comments/comment.ts:206 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / GetContractNameParams ## Type Alias: GetContractNameParams ```ts type GetContractNameParams = { commentsContractAddress?: Hex; readContract: ContractReadFunctions["name"]; }; ``` Defined in: packages/sdk/src/comments/contract.ts:53 ### Properties #### commentsContractAddress? ```ts optional commentsContractAddress: Hex; ``` Defined in: packages/sdk/src/comments/contract.ts:58 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["name"]; ``` Defined in: packages/sdk/src/comments/contract.ts:59 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / GetContractVersionParams ## Type Alias: GetContractVersionParams ```ts type GetContractVersionParams = { commentsContractAddress?: Hex; readContract: ContractReadFunctions["version"]; }; ``` Defined in: packages/sdk/src/comments/contract.ts:86 ### Properties #### commentsContractAddress? ```ts optional commentsContractAddress: Hex; ``` Defined in: packages/sdk/src/comments/contract.ts:91 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["version"]; ``` Defined in: packages/sdk/src/comments/contract.ts:92 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / GetDeleteCommentHashParams ## Type Alias: GetDeleteCommentHashParams ```ts type GetDeleteCommentHashParams = { app: Hex; author: Hex; commentId: Hex; commentsAddress?: Hex; deadline: bigint; readContract: ContractReadFunctions["getDeleteCommentHash"]; }; ``` Defined in: packages/sdk/src/comments/comment.ts:416 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:428 The app signer *** #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:424 The author of the comment *** #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:420 The ID of the comment to delete *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:439 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### deadline ```ts deadline: bigint; ``` Defined in: packages/sdk/src/comments/comment.ts:434 The deadline for the signature ##### Default ```ts 1 day from now ``` *** #### readContract ```ts readContract: ContractReadFunctions["getDeleteCommentHash"]; ``` Defined in: packages/sdk/src/comments/comment.ts:440 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / GetDomainSeparatorParams ## Type Alias: GetDomainSeparatorParams ```ts type GetDomainSeparatorParams = { commentsContractAddress?: Hex; readContract: ContractReadFunctions["DOMAIN_SEPARATOR"]; }; ``` Defined in: packages/sdk/src/comments/contract.ts:120 ### Properties #### commentsContractAddress? ```ts optional commentsContractAddress: Hex; ``` Defined in: packages/sdk/src/comments/contract.ts:125 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["DOMAIN_SEPARATOR"]; ``` Defined in: packages/sdk/src/comments/contract.ts:126 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / GetEditCommentHashParams ## Type Alias: GetEditCommentHashParams ```ts type GetEditCommentHashParams = { author: Hex; commentsAddress?: Hex; edit: EditCommentData; readContract: ContractReadFunctions["getEditCommentHash"]; }; ``` Defined in: packages/sdk/src/comments/comment.ts:662 ### Properties #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:666 The author of the comment *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:675 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### edit ```ts edit: EditCommentData; ``` Defined in: packages/sdk/src/comments/comment.ts:670 The edit data *** #### readContract ```ts readContract: ContractReadFunctions["getEditCommentHash"]; ``` Defined in: packages/sdk/src/comments/comment.ts:676 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / GetNonceParams ## Type Alias: GetNonceParams ```ts type GetNonceParams = { app: Hex; author: Hex; commentsAddress?: Hex; readContract: ContractReadFunctions["getNonce"]; }; ``` Defined in: packages/sdk/src/comments/comment.ts:473 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:481 The app signer *** #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:477 The author of the comment *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:486 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["getNonce"]; ``` Defined in: packages/sdk/src/comments/comment.ts:487 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / GetRemoveApprovalHashParams ## Type Alias: GetRemoveApprovalHashParams ```ts type GetRemoveApprovalHashParams = { app: Hex; author: Hex; commentsAddress?: Hex; deadline: bigint; nonce: bigint; readContract: ContractReadFunctions["getRemoveApprovalHash"]; }; ``` Defined in: packages/sdk/src/comments/approval.ts:392 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:400 The address of the app signer *** #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:396 The address of the author *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:414 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### deadline ```ts deadline: bigint; ``` Defined in: packages/sdk/src/comments/approval.ts:408 Timestamp after which the signature becomes invalid *** #### nonce ```ts nonce: bigint; ``` Defined in: packages/sdk/src/comments/approval.ts:404 The current nonce for the author *** #### readContract ```ts readContract: ContractReadFunctions["getRemoveApprovalHash"]; ``` Defined in: packages/sdk/src/comments/approval.ts:415 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / GetRemoveApprovalHashResult ## Type Alias: GetRemoveApprovalHashResult ```ts type GetRemoveApprovalHashResult = { hash: Hex; }; ``` Defined in: packages/sdk/src/comments/approval.ts:418 ### Properties #### hash ```ts hash: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:419 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / IsApprovedParams ## Type Alias: IsApprovedParams ```ts type IsApprovedParams = { app: Hex; author: Hex; commentsAddress?: Hex; readContract: ContractReadFunctions["getIsApproved"]; }; ``` Defined in: packages/sdk/src/comments/approval.ts:19 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:27 The app signer address *** #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:23 The author address *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:32 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["getIsApproved"]; ``` Defined in: packages/sdk/src/comments/approval.ts:33 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / Json ## Type Alias: Json ```ts type Json = | JsonLiteral | JsonArray | JsonObject; ``` Defined in: packages/sdk/src/comments/types.ts:15 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / JsonArray ## Type Alias: JsonArray ```ts type JsonArray = Json[]; ``` Defined in: packages/sdk/src/comments/types.ts:11 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / JsonLiteral ## Type Alias: JsonLiteral ```ts type JsonLiteral = string | number | boolean | null; ``` Defined in: packages/sdk/src/comments/types.ts:9 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / JsonObject ## Type Alias: JsonObject ```ts type JsonObject = { [key: string]: Json; }; ``` Defined in: packages/sdk/src/comments/types.ts:13 ### Index Signature ```ts [key: string]: Json ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / MetadataEntry ## Type Alias: MetadataEntry ```ts type MetadataEntry = { key: Hex; value: Hex; }; ``` Defined in: packages/sdk/src/comments/types.ts:28 Metadata entry structure that matches the smart contract ### Properties #### key ```ts key: Hex; ``` Defined in: packages/sdk/src/comments/types.ts:30 UTF-8 encoded string of format "type key" *** #### value ```ts value: Hex; ``` Defined in: packages/sdk/src/comments/types.ts:32 The metadata value as bytes [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / MetadataEntryOp ## Type Alias: MetadataEntryOp ```ts type MetadataEntryOp = { key: Hex; operation: MetadataOperation; value: Hex; }; ``` Defined in: packages/sdk/src/comments/types.ts:40 ### Properties #### key ```ts key: Hex; ``` Defined in: packages/sdk/src/comments/types.ts:42 *** #### operation ```ts operation: MetadataOperation; ``` Defined in: packages/sdk/src/comments/types.ts:41 *** #### value ```ts value: Hex; ``` Defined in: packages/sdk/src/comments/types.ts:43 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / MetadataRecord ## Type Alias: MetadataRecord ```ts type MetadataRecord = Record; ``` Defined in: packages/sdk/src/comments/metadata.ts:235 JS/SDK/Indexer format for metadata storage [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / MetadataType ## Type Alias: MetadataType ```ts type MetadataType = | "string" | "bool" | "uint256" | "address" | "bytes32" | "bytes" | "uint8" | "uint16" | "uint32" | "uint64" | "uint128" | "int256" | "int128"; ``` Defined in: packages/sdk/src/comments/metadata.ts:198 Type representing the supported on-chain serializable types [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / PostCommentParams ## Type Alias: PostCommentParams ```ts type PostCommentParams = { appSignature: Hex; comment: CommentInputData; commentsAddress?: Hex; fee?: bigint; writeContract: ContractWriteFunctions["postComment"]; }; ``` Defined in: packages/sdk/src/comments/comment.ts:49 ### Properties #### appSignature ```ts appSignature: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:59 The app signature *** #### comment ```ts comment: CommentInputData; ``` Defined in: packages/sdk/src/comments/comment.ts:55 The comment data You can obtain this by using the `createCommentData()` function *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:68 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### fee? ```ts optional fee: bigint; ``` Defined in: packages/sdk/src/comments/comment.ts:63 The fee for the comment *** #### writeContract ```ts writeContract: ContractWriteFunctions["postComment"]; ``` Defined in: packages/sdk/src/comments/comment.ts:72 The write contract function [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / PostCommentResult ## Type Alias: PostCommentResult ```ts type PostCommentResult = WaitableWriteContractHelperResult; ``` Defined in: packages/sdk/src/comments/comment.ts:75 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / PostCommentWithSigParams ## Type Alias: PostCommentWithSigParams ```ts type PostCommentWithSigParams = { appSignature: Hex; authorSignature?: Hex; comment: CommentInputData; commentsAddress?: Hex; fee?: bigint; writeContract: ContractWriteFunctions["postCommentWithSig"]; }; ``` Defined in: packages/sdk/src/comments/comment.ts:117 ### Properties #### appSignature ```ts appSignature: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:127 The app signature *** #### authorSignature? ```ts optional authorSignature: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:131 The author signature. Necessary if the author hasn't approved the signer to post comments on their behalf. *** #### comment ```ts comment: CommentInputData; ``` Defined in: packages/sdk/src/comments/comment.ts:123 The comment data You can obtain this by using the `createCommentData()` function *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:140 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### fee? ```ts optional fee: bigint; ``` Defined in: packages/sdk/src/comments/comment.ts:135 The fee for the comment *** #### writeContract ```ts writeContract: ContractWriteFunctions["postCommentWithSig"]; ``` Defined in: packages/sdk/src/comments/comment.ts:144 The write contract function [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / PostCommentWithSigResult ## Type Alias: PostCommentWithSigResult ```ts type PostCommentWithSigResult = WaitableWriteContractHelperResult; ``` Defined in: packages/sdk/src/comments/comment.ts:147 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / RemoveApprovalTypedDataSchemaType ## Type Alias: RemoveApprovalTypedDataSchemaType ```ts type RemoveApprovalTypedDataSchemaType = { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: { app: `0x${string}`; author: `0x${string}`; deadline: bigint; nonce: bigint; }; primaryType: "RemoveApproval"; types: { RemoveApproval: ( | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; })[]; }; }; ``` Defined in: packages/sdk/src/comments/schemas.ts:326 ### Type declaration #### domain ```ts domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; ``` ##### domain.chainId ```ts chainId: number; ``` ##### domain.name ```ts name: "Ethereum Comments Protocol"; ``` ##### domain.verifyingContract ```ts verifyingContract: `0x${string}` = HexSchema; ``` ##### domain.version ```ts version: "1"; ``` #### message ```ts message: { app: `0x${string}`; author: `0x${string}`; deadline: bigint; nonce: bigint; }; ``` ##### message.app ```ts app: `0x${string}` = HexSchema; ``` ##### message.author ```ts author: `0x${string}` = HexSchema; ``` ##### message.deadline ```ts deadline: bigint; ``` ##### message.nonce ```ts nonce: bigint; ``` #### primaryType ```ts primaryType: "RemoveApproval"; ``` #### types ```ts types: { RemoveApproval: ( | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; })[]; }; ``` ##### types.RemoveApproval ```ts RemoveApproval: ( | { name: "author"; type: "address"; } | { name: "app"; type: "address"; } | { name: "nonce"; type: "uint256"; } | { name: "deadline"; type: "uint256"; })[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / ReportCommentTypedDataSchemaType ## Type Alias: ReportCommentTypedDataSchemaType ```ts type ReportCommentTypedDataSchemaType = { domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; message: { commentId: `0x${string}`; message: string; reportee: `0x${string}`; }; primaryType: "ReportComment"; types: { ReportComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "reportee"; type: "address"; } | { name: "message"; type: "string"; })[]; }; }; ``` Defined in: packages/sdk/src/comments/schemas.ts:354 ### Type declaration #### domain ```ts domain: { chainId: number; name: "Ethereum Comments Protocol"; verifyingContract: `0x${string}`; version: "1"; }; ``` ##### domain.chainId ```ts chainId: number; ``` ##### domain.name ```ts name: "Ethereum Comments Protocol"; ``` ##### domain.verifyingContract ```ts verifyingContract: `0x${string}` = HexSchema; ``` ##### domain.version ```ts version: "1"; ``` #### message ```ts message: { commentId: `0x${string}`; message: string; reportee: `0x${string}`; }; ``` ##### message.commentId ```ts commentId: `0x${string}` = HexSchema; ``` ##### message.message ```ts message: string; ``` ##### message.reportee ```ts reportee: `0x${string}` = HexSchema; ``` #### primaryType ```ts primaryType: "ReportComment"; ``` #### types ```ts types: { ReportComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "reportee"; type: "address"; } | { name: "message"; type: "string"; })[]; }; ``` ##### types.ReportComment ```ts ReportComment: ( | { name: "commentId"; type: "bytes32"; } | { name: "reportee"; type: "address"; } | { name: "message"; type: "string"; })[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / RevokeApprovalParams ## Type Alias: RevokeApprovalParams ```ts type RevokeApprovalParams = { app: Hex; commentsAddress?: Hex; writeContract: ContractWriteFunctions["revokeApproval"]; }; ``` Defined in: packages/sdk/src/comments/approval.ts:183 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:187 The address of the app signer being unapproved *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:193 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### writeContract ```ts writeContract: ContractWriteFunctions["revokeApproval"]; ``` Defined in: packages/sdk/src/comments/approval.ts:194 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / RevokeApprovalResult ## Type Alias: RevokeApprovalResult ```ts type RevokeApprovalResult = { txHash: Hex; }; ``` Defined in: packages/sdk/src/comments/approval.ts:197 ### Properties #### txHash ```ts txHash: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:198 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / RevokeApprovalWithSigParams ## Type Alias: RevokeApprovalWithSigParams ```ts type RevokeApprovalWithSigParams = { commentsAddress?: Hex; signature: Hex; typedData: RemoveApprovalTypedDataSchemaType; writeContract: ContractWriteFunctions["removeApprovalWithSig"]; }; ``` Defined in: packages/sdk/src/comments/approval.ts:232 ### Properties #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:248 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### signature ```ts signature: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:242 The signature of the author *** #### typedData ```ts typedData: RemoveApprovalTypedDataSchemaType; ``` Defined in: packages/sdk/src/comments/approval.ts:238 The typed data for the removal You can obtain this value by using createRemoveApprovalTypedData() *** #### writeContract ```ts writeContract: ContractWriteFunctions["removeApprovalWithSig"]; ``` Defined in: packages/sdk/src/comments/approval.ts:249 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / RevokeApprovalWithSigResult ## Type Alias: RevokeApprovalWithSigResult ```ts type RevokeApprovalWithSigResult = { txHash: Hex; }; ``` Defined in: packages/sdk/src/comments/approval.ts:252 ### Properties #### txHash ```ts txHash: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:253 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / UpdateChannelContractParams ## Type Alias: UpdateChannelContractParams ```ts type UpdateChannelContractParams = { channelContract: Hex; commentsContractAddress?: Hex; writeContract: ContractWriteFunctions["updateChannelContract"]; }; ``` Defined in: packages/sdk/src/comments/contract.ts:7 ### Properties #### channelContract ```ts channelContract: Hex; ``` Defined in: packages/sdk/src/comments/contract.ts:11 The new channel manager contract address *** #### commentsContractAddress? ```ts optional commentsContractAddress: Hex; ``` Defined in: packages/sdk/src/comments/contract.ts:16 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### writeContract ```ts writeContract: ContractWriteFunctions["updateChannelContract"]; ``` Defined in: packages/sdk/src/comments/contract.ts:17 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / UpdateChannelContractResult ## Type Alias: UpdateChannelContractResult ```ts type UpdateChannelContractResult = { txHash: Hex; }; ``` Defined in: packages/sdk/src/comments/contract.ts:20 ### Properties #### txHash ```ts txHash: Hex; ``` Defined in: packages/sdk/src/comments/contract.ts:21 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / ADD\_APPROVAL\_TYPE ## Variable: ADD\_APPROVAL\_TYPE ```ts const ADD_APPROVAL_TYPE: { AddApproval: readonly [{ name: "author"; type: "address"; }, { name: "app"; type: "address"; }, { name: "expiry"; type: "uint256"; }, { name: "nonce"; type: "uint256"; }, { name: "deadline"; type: "uint256"; }]; }; ``` Defined in: packages/sdk/src/comments/eip712.ts:48 ### Type declaration #### AddApproval ```ts readonly AddApproval: readonly [{ name: "author"; type: "address"; }, { name: "app"; type: "address"; }, { name: "expiry"; type: "uint256"; }, { name: "nonce"; type: "uint256"; }, { name: "deadline"; type: "uint256"; }]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / ADD\_COMMENT\_TYPE ## Variable: ADD\_COMMENT\_TYPE ```ts const ADD_COMMENT_TYPE: { AddComment: readonly [{ name: "content"; type: "string"; }, { name: "metadata"; type: "MetadataEntry[]"; }, { name: "targetUri"; type: "string"; }, { name: "commentType"; type: "uint8"; }, { name: "author"; type: "address"; }, { name: "app"; type: "address"; }, { name: "channelId"; type: "uint256"; }, { name: "deadline"; type: "uint256"; }, { name: "parentId"; type: "bytes32"; }]; MetadataEntry: readonly [{ name: "key"; type: "bytes32"; }, { name: "value"; type: "bytes"; }]; }; ``` Defined in: packages/sdk/src/comments/eip712.ts:11 ### Type declaration #### AddComment ```ts readonly AddComment: readonly [{ name: "content"; type: "string"; }, { name: "metadata"; type: "MetadataEntry[]"; }, { name: "targetUri"; type: "string"; }, { name: "commentType"; type: "uint8"; }, { name: "author"; type: "address"; }, { name: "app"; type: "address"; }, { name: "channelId"; type: "uint256"; }, { name: "deadline"; type: "uint256"; }, { name: "parentId"; type: "bytes32"; }]; ``` #### MetadataEntry ```ts readonly MetadataEntry: readonly [{ name: "key"; type: "bytes32"; }, { name: "value"; type: "bytes"; }]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / AddApprovalTypedDataSchema ## Variable: AddApprovalTypedDataSchema ```ts const AddApprovalTypedDataSchema: ZodObject; ``` Defined in: packages/sdk/src/comments/schemas.ts:268 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / AddCommentTypedDataSchema ## Variable: AddCommentTypedDataSchema ```ts const AddCommentTypedDataSchema: ZodObject; ``` Defined in: packages/sdk/src/comments/schemas.ts:154 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CommentDataSchema ## Variable: CommentDataSchema ```ts const CommentDataSchema: ZodObject<{ app: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; authMethod: ZodNativeEnum; author: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; channelId: ZodBigInt; commentType: ZodNumber; content: ZodString; createdAt: ZodBigInt; metadata: ZodDefault; value: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; }, "strip", ZodTypeAny, { key: `0x${string}`; value: `0x${string}`; }, { key: `0x${string}`; value: `0x${string}`; }>, "many">>; parentId: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; targetUri: ZodString; updatedAt: ZodBigInt; }, "strip", ZodTypeAny, { app: `0x${string}`; authMethod: AuthorAuthMethod; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: string; updatedAt: bigint; }, { app: `0x${string}`; authMethod: AuthorAuthMethod; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: bigint; metadata?: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: string; updatedAt: bigint; }>; ``` Defined in: packages/sdk/src/comments/schemas.ts:54 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CommentInputDataSchema ## Variable: CommentInputDataSchema ```ts const CommentInputDataSchema: ZodUnion; ``` Defined in: packages/sdk/src/comments/schemas.ts:130 Comment input data schema. This is used as input of the functions. It validates precisely what shapes we expect in case of a comment or a reply. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CommentTypeSchema ## Variable: CommentTypeSchema ```ts const CommentTypeSchema: ZodNumber; ``` Defined in: packages/sdk/src/comments/schemas.ts:19 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CreateCommentDataSchema ## Variable: CreateCommentDataSchema ```ts const CreateCommentDataSchema: ZodObject; ``` Defined in: packages/sdk/src/comments/schemas.ts:74 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / DELETE\_COMMENT\_TYPE ## Variable: DELETE\_COMMENT\_TYPE ```ts const DELETE_COMMENT_TYPE: { DeleteComment: readonly [{ name: "commentId"; type: "bytes32"; }, { name: "author"; type: "address"; }, { name: "app"; type: "address"; }, { name: "deadline"; type: "uint256"; }]; }; ``` Defined in: packages/sdk/src/comments/eip712.ts:26 ### Type declaration #### DeleteComment ```ts readonly DeleteComment: readonly [{ name: "commentId"; type: "bytes32"; }, { name: "author"; type: "address"; }, { name: "app"; type: "address"; }, { name: "deadline"; type: "uint256"; }]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / DOMAIN\_NAME ## Variable: DOMAIN\_NAME ```ts const DOMAIN_NAME: "Ethereum Comments Protocol" = "Ethereum Comments Protocol"; ``` Defined in: packages/sdk/src/comments/eip712.ts:1 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / DOMAIN\_VERSION ## Variable: DOMAIN\_VERSION ```ts const DOMAIN_VERSION: "1" = "1"; ``` Defined in: packages/sdk/src/comments/eip712.ts:2 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / DeleteCommentTypedDataSchema ## Variable: DeleteCommentTypedDataSchema ```ts const DeleteCommentTypedDataSchema: ZodObject; ``` Defined in: packages/sdk/src/comments/schemas.ts:193 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / EDIT\_COMMENT\_TYPE ## Variable: EDIT\_COMMENT\_TYPE ```ts const EDIT_COMMENT_TYPE: { EditComment: readonly [{ name: "commentId"; type: "bytes32"; }, { name: "content"; type: "string"; }, { name: "metadata"; type: "MetadataEntry[]"; }, { name: "author"; type: "address"; }, { name: "app"; type: "address"; }, { name: "nonce"; type: "uint256"; }, { name: "deadline"; type: "uint256"; }]; MetadataEntry: readonly [{ name: "key"; type: "bytes32"; }, { name: "value"; type: "bytes"; }]; }; ``` Defined in: packages/sdk/src/comments/eip712.ts:35 ### Type declaration #### EditComment ```ts readonly EditComment: readonly [{ name: "commentId"; type: "bytes32"; }, { name: "content"; type: "string"; }, { name: "metadata"; type: "MetadataEntry[]"; }, { name: "author"; type: "address"; }, { name: "app"; type: "address"; }, { name: "nonce"; type: "uint256"; }, { name: "deadline"; type: "uint256"; }]; ``` #### MetadataEntry ```ts readonly MetadataEntry: readonly [{ name: "key"; type: "bytes32"; }, { name: "value"; type: "bytes"; }]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / EditCommentDataSchema ## Variable: EditCommentDataSchema ```ts const EditCommentDataSchema: ZodObject; ``` Defined in: packages/sdk/src/comments/schemas.ts:143 Edit comment data schema. This is used as input of the functions. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / EditCommentTypedDataSchema ## Variable: EditCommentTypedDataSchema ```ts const EditCommentTypedDataSchema: ZodObject; ``` Defined in: packages/sdk/src/comments/schemas.ts:223 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / JsonLiteralSchema ## Variable: JsonLiteralSchema ```ts const JsonLiteralSchema: ZodUnion<[ZodString, ZodNumber, ZodBoolean, ZodNull]>; ``` Defined in: packages/sdk/src/comments/schemas.ts:23 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / JsonObjectSchema ## Variable: JsonObjectSchema ```ts const JsonObjectSchema: z.ZodType; ``` Defined in: packages/sdk/src/comments/schemas.ts:34 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / JsonSchema ## Variable: JsonSchema ```ts const JsonSchema: z.ZodType; ``` Defined in: packages/sdk/src/comments/schemas.ts:30 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / METADATA\_ENTRY\_TYPE ## Variable: METADATA\_ENTRY\_TYPE ```ts const METADATA_ENTRY_TYPE: { MetadataEntry: readonly [{ name: "key"; type: "bytes32"; }, { name: "value"; type: "bytes"; }]; }; ``` Defined in: packages/sdk/src/comments/eip712.ts:4 ### Type declaration #### MetadataEntry ```ts readonly MetadataEntry: readonly [{ name: "key"; type: "bytes32"; }, { name: "value"; type: "bytes"; }]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / MetadataArrayOpSchema ## Variable: MetadataArrayOpSchema ```ts const MetadataArrayOpSchema: ZodArray; operation: ZodNativeEnum; value: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; }, "strip", ZodTypeAny, { key: `0x${string}`; operation: MetadataOperation; value: `0x${string}`; }, { key: `0x${string}`; operation: MetadataOperation; value: `0x${string}`; }>, "many">; ``` Defined in: packages/sdk/src/comments/schemas.ts:52 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / MetadataArraySchema ## Variable: MetadataArraySchema ```ts const MetadataArraySchema: ZodArray; value: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; }, "strip", ZodTypeAny, { key: `0x${string}`; value: `0x${string}`; }, { key: `0x${string}`; value: `0x${string}`; }>, "many">; ``` Defined in: packages/sdk/src/comments/schemas.ts:44 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / MetadataEntryOpSchema ## Variable: MetadataEntryOpSchema ```ts const MetadataEntryOpSchema: ZodObject<{ key: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; operation: ZodNativeEnum; value: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; }, "strip", ZodTypeAny, { key: `0x${string}`; operation: MetadataOperation; value: `0x${string}`; }, { key: `0x${string}`; operation: MetadataOperation; value: `0x${string}`; }>; ``` Defined in: packages/sdk/src/comments/schemas.ts:46 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / MetadataEntrySchema ## Variable: MetadataEntrySchema ```ts const MetadataEntrySchema: ZodObject<{ key: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; value: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; }, "strip", ZodTypeAny, { key: `0x${string}`; value: `0x${string}`; }, { key: `0x${string}`; value: `0x${string}`; }>; ``` Defined in: packages/sdk/src/comments/schemas.ts:39 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / MetadataTypeValues ## Variable: MetadataTypeValues ```ts const MetadataTypeValues: { ADDRESS: "address"; BOOL: "bool"; BYTES: "bytes"; BYTES32: "bytes32"; INT128: "int128"; INT256: "int256"; STRING: "string"; UINT128: "uint128"; UINT16: "uint16"; UINT256: "uint256"; UINT32: "uint32"; UINT64: "uint64"; UINT8: "uint8"; }; ``` Defined in: packages/sdk/src/comments/metadata.ts:216 Constants object for MetadataType values - provides runtime access to all metadata types ### Type declaration #### ADDRESS ```ts readonly ADDRESS: "address"; ``` #### BOOL ```ts readonly BOOL: "bool"; ``` #### BYTES ```ts readonly BYTES: "bytes"; ``` #### BYTES32 ```ts readonly BYTES32: "bytes32"; ``` #### INT128 ```ts readonly INT128: "int128"; ``` #### INT256 ```ts readonly INT256: "int256"; ``` #### STRING ```ts readonly STRING: "string"; ``` #### UINT128 ```ts readonly UINT128: "uint128"; ``` #### UINT16 ```ts readonly UINT16: "uint16"; ``` #### UINT256 ```ts readonly UINT256: "uint256"; ``` #### UINT32 ```ts readonly UINT32: "uint32"; ``` #### UINT64 ```ts readonly UINT64: "uint64"; ``` #### UINT8 ```ts readonly UINT8: "uint8"; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / REMOVE\_APPROVAL\_TYPE ## Variable: REMOVE\_APPROVAL\_TYPE ```ts const REMOVE_APPROVAL_TYPE: { RemoveApproval: readonly [{ name: "author"; type: "address"; }, { name: "app"; type: "address"; }, { name: "nonce"; type: "uint256"; }, { name: "deadline"; type: "uint256"; }]; }; ``` Defined in: packages/sdk/src/comments/eip712.ts:58 ### Type declaration #### RemoveApproval ```ts readonly RemoveApproval: readonly [{ name: "author"; type: "address"; }, { name: "app"; type: "address"; }, { name: "nonce"; type: "uint256"; }, { name: "deadline"; type: "uint256"; }]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / REPORT\_COMMENT\_TYPE ## Variable: REPORT\_COMMENT\_TYPE ```ts const REPORT_COMMENT_TYPE: { ReportComment: readonly [{ name: "commentId"; type: "bytes32"; }, { name: "reportee"; type: "address"; }, { name: "message"; type: "string"; }]; }; ``` Defined in: packages/sdk/src/comments/eip712.ts:67 ### Type declaration #### ReportComment ```ts readonly ReportComment: readonly [{ name: "commentId"; type: "bytes32"; }, { name: "reportee"; type: "address"; }, { name: "message"; type: "string"; }]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / RemoveApprovalTypedDataSchema ## Variable: RemoveApprovalTypedDataSchema ```ts const RemoveApprovalTypedDataSchema: ZodObject; ``` Defined in: packages/sdk/src/comments/schemas.ts:300 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / ReplyCommentInputDataSchema ## Variable: ReplyCommentInputDataSchema ```ts const ReplyCommentInputDataSchema: ZodObject; author: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; channelId: ZodDefault; commentType: ZodDefault; content: ZodString; deadline: ZodBigInt; metadata: ZodDefault; value: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; }, "strip", ZodTypeAny, { key: `0x${string}`; value: `0x${string}`; }, { key: `0x${string}`; value: `0x${string}`; }>, "many">>; parentId: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; targetUri: ZodString; }, "targetUri"> & { targetUri: ZodLiteral<"">; }, "strip", ZodTypeAny, { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: ""; }, { app: `0x${string}`; author: `0x${string}`; channelId?: bigint; commentType?: number; content: string; deadline: bigint; metadata?: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: ""; }>; ``` Defined in: packages/sdk/src/comments/schemas.ts:113 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / ReportCommentTypedDataSchema ## Variable: ReportCommentTypedDataSchema ```ts const ReportCommentTypedDataSchema: ZodObject; ``` Defined in: packages/sdk/src/comments/schemas.ts:330 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / RootCommentInputDataSchema ## Variable: RootCommentInputDataSchema ```ts const RootCommentInputDataSchema: ZodObject; author: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; channelId: ZodDefault; commentType: ZodDefault; content: ZodString; deadline: ZodBigInt; metadata: ZodDefault; value: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; }, "strip", ZodTypeAny, { key: `0x${string}`; value: `0x${string}`; }, { key: `0x${string}`; value: `0x${string}`; }>, "many">>; parentId: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; targetUri: ZodString; }, "parentId" | "targetUri"> & { parentId: ZodLiteral<`0x${string}`>; targetUri: ZodString; }, "strip", ZodTypeAny, { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; deadline: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: string; }, { app: `0x${string}`; author: `0x${string}`; channelId?: bigint; commentType?: number; content: string; deadline: bigint; metadata?: { key: `0x${string}`; value: `0x${string}`; }[]; parentId: `0x${string}`; targetUri: string; }>; ``` Defined in: packages/sdk/src/comments/schemas.ts:99 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / deleteComment ## Variable: deleteComment() ```ts const deleteComment: (...args) => Promise>; ``` Defined in: packages/sdk/src/comments/comment.ts:305 Delete a comment as an author ### Parameters #### args ...\[[`DeleteCommentParams`](/sdk-reference/comments/type-aliases/DeleteCommentParams.mdx)] ### Returns `Promise`\<[`WaitableWriteContractHelperResult`](/sdk-reference/core/type-aliases/WaitableWriteContractHelperResult.mdx)\> The transaction hash [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / deleteCommentWithSig ## Variable: deleteCommentWithSig() ```ts const deleteCommentWithSig: (...args) => Promise>; ``` Defined in: packages/sdk/src/comments/comment.ts:378 Delete a comment with app signature verification ### Parameters #### args ...\[[`DeleteCommentWithSigParams`](/sdk-reference/comments/type-aliases/DeleteCommentWithSigParams.mdx)] ### Returns `Promise`\<[`WaitableWriteContractHelperResult`](/sdk-reference/core/type-aliases/WaitableWriteContractHelperResult.mdx)\> The transaction hash [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / editComment ## Variable: editComment() ```ts const editComment: (...args) => Promise>; ``` Defined in: packages/sdk/src/comments/comment.ts:866 Edit a comment as an author ### Parameters #### args ...\[[`EditCommentParams`](/sdk-reference/comments/type-aliases/EditCommentParams.mdx)] ### Returns `Promise`\<[`WaitableWriteContractHelperResult`](/sdk-reference/core/type-aliases/WaitableWriteContractHelperResult.mdx)\> The transaction hash [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / editCommentWithSig ## Variable: editCommentWithSig() ```ts const editCommentWithSig: (...args) => Promise>; ``` Defined in: packages/sdk/src/comments/comment.ts:938 Edit a comment ### Parameters #### args ...\[[`EditCommentWithSigParams`](/sdk-reference/comments/type-aliases/EditCommentWithSigParams.mdx)] ### Returns `Promise`\<[`WaitableWriteContractHelperResult`](/sdk-reference/core/type-aliases/WaitableWriteContractHelperResult.mdx)\> The transaction hash [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / postComment ## Variable: postComment() ```ts const postComment: (...args) => Promise>; ``` Defined in: packages/sdk/src/comments/comment.ts:93 Posts a comment as an author ### Parameters #### args ...\[[`PostCommentParams`](/sdk-reference/comments/type-aliases/PostCommentParams.mdx)] ### Returns `Promise`\<[`WaitableWriteContractHelperResult`](/sdk-reference/core/type-aliases/WaitableWriteContractHelperResult.mdx)\> The transaction hash [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / postCommentWithSig ## Variable: postCommentWithSig() ```ts const postCommentWithSig: (...args) => Promise>; ``` Defined in: packages/sdk/src/comments/comment.ts:165 Posts a comment with author signature verification ### Parameters #### args ...\[[`PostCommentWithSigParams`](/sdk-reference/comments/type-aliases/PostCommentWithSigParams.mdx)] ### Returns `Promise`\<[`WaitableWriteContractHelperResult`](/sdk-reference/core/type-aliases/WaitableWriteContractHelperResult.mdx)\> The transaction hash [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [core](/sdk-reference/core/index.mdx) / createWaitableWriteContractHelper ## Function: createWaitableWriteContractHelper() ```ts function createWaitableWriteContractHelper(writeFunc, __namedParameters): (...args) => Promise>; ``` Defined in: packages/sdk/src/core/utils.ts:85 This function wraps the write function to add a `wait()` method in the returned object. The `wait()` method waits the transaction receipt and returns the event arguments specified by the write function, within the transaction. This is due to EVM limitations, the return value of a contract write cannot be returned directly. We had to use the events to expose certain useful values related to the write. ### Type Parameters #### TArgs `TArgs` *extends* `unknown`\[] #### TAbi `TAbi` *extends* `Abi` #### TEventName `TEventName` *extends* `string` #### TWriteContractHelperResult `TWriteContractHelperResult` *extends* [`WriteContractHelperResult`](/sdk-reference/core/type-aliases/WriteContractHelperResult.mdx) ### Parameters #### writeFunc (...`args`) => `Promise`\<`TWriteContractHelperResult`> #### \_\_namedParameters ##### abi `TAbi` ##### eventName `TEventName` ### Returns ```ts (...args): Promise>; ``` #### Parameters ##### args ...`TArgs` #### Returns `Promise`\<[`WaitableWriteContractHelperResult`](/sdk-reference/core/type-aliases/WaitableWriteContractHelperResult.mdx)\<`TAbi`, `TEventName`>> [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [core](/sdk-reference/core/index.mdx) / isZeroHex ## Function: isZeroHex() ```ts function isZeroHex(hex): boolean; ``` Defined in: packages/sdk/src/core/utils.ts:18 Check if a hex string is zero ### Parameters #### hex `` `0x${string}` `` The hex string to check ### Returns `boolean` True if the hex string is zero, false otherwise [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [core](/sdk-reference/core/index.mdx) / runAsync ## Function: runAsync() ```ts function runAsync(func, options): Promise; ``` Defined in: packages/sdk/src/core/utils.ts:155 Run an async function with retries and backoff. ### Type Parameters #### T `T` ### Parameters #### func (`signal?`) => `Promise`\<`T`> The async function to run. The function receives the signal as a parameter. #### options [`RunAsyncOptions`](/sdk-reference/core/type-aliases/RunAsyncOptions.mdx) The options for the function. ### Returns `Promise`\<`T`> The result of the function. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [core](/sdk-reference/core/index.mdx) / Hex ## Type Alias: Hex ```ts type Hex = `0x${string}`; ``` Defined in: packages/sdk/src/core/schemas.ts:14 type for hex format string, e.g. `0x1234567890abcdef` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [core](/sdk-reference/core/index.mdx) / RunAsyncOptions ## Type Alias: RunAsyncOptions ```ts type RunAsyncOptions = { backoff?: | { delay: number; type: "exponential"; } | { delay: number; type: "constant"; } | { type: "none"; }; retries?: number; signal?: AbortSignal; }; ``` Defined in: packages/sdk/src/core/utils.ts:126 ### Properties #### backoff? ```ts optional backoff: | { delay: number; type: "exponential"; } | { delay: number; type: "constant"; } | { type: "none"; }; ``` Defined in: packages/sdk/src/core/utils.ts:142 The backoff strategy to use. ##### Default ```ts { type: "none" } ``` *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/core/utils.ts:136 The number of times to retry the function in case of failure. If omitted, the function won't be retried. *** #### signal? ```ts optional signal: AbortSignal; ``` Defined in: packages/sdk/src/core/utils.ts:130 The signal to abort the function. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [core](/sdk-reference/core/index.mdx) / WaitableWriteContractHelperResult ## Type Alias: WaitableWriteContractHelperResult\ ```ts type WaitableWriteContractHelperResult = WriteContractHelperResult & { wait: (params) => Promise< | GetContractEventsReturnType[number]["args"] | undefined>; }; ``` Defined in: packages/sdk/src/core/types.ts:22 ### Type declaration #### wait() ```ts wait: (params) => Promise< | GetContractEventsReturnType[number]["args"] | undefined>; ``` Wait for the return value of the method call ##### Parameters ##### params ###### getContractEvents `PublicActions`\[`"getContractEvents"`] ###### waitForTransactionReceipt `PublicActions`\[`"waitForTransactionReceipt"`] ##### Returns `Promise`\< \| `GetContractEventsReturnType`\<`TAbi`, `TEventName`, `true`>\[`number`]\[`"args"`] \| `undefined`> ### Type Parameters #### TAbi `TAbi` *extends* `Abi` #### TEventName `TEventName` *extends* `ContractEventName`\<`TAbi`> [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [core](/sdk-reference/core/index.mdx) / WriteContractHelperResult ## Type Alias: WriteContractHelperResult ```ts type WriteContractHelperResult = { txHash: Hex; }; ``` Defined in: packages/sdk/src/core/types.ts:13 The result of a write contract function ### Properties #### txHash ```ts txHash: Hex; ``` Defined in: packages/sdk/src/core/types.ts:17 The transaction hash [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [core](/sdk-reference/core/index.mdx) / HexSchema ## Variable: HexSchema ```ts const HexSchema: ZodType; ``` Defined in: packages/sdk/src/core/schemas.ts:3 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / SupportedChainConfig ## Type Alias: SupportedChainConfig ```ts type SupportedChainConfig = { chain: Chain; channelManagerAddress: Hex; commentManagerAddress: Hex; }; ``` Defined in: packages/sdk/src/constants.ts:26 ### Properties #### chain ```ts chain: Chain; ``` Defined in: packages/sdk/src/constants.ts:27 *** #### channelManagerAddress ```ts channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/constants.ts:29 *** #### commentManagerAddress ```ts commentManagerAddress: Hex; ``` Defined in: packages/sdk/src/constants.ts:28 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / CHANNEL\_MANAGER\_ADDRESS ## Variable: CHANNEL\_MANAGER\_ADDRESS ```ts const CHANNEL_MANAGER_ADDRESS: `0x${string}`; ``` Defined in: packages/sdk/src/constants.ts:22 The address of the ChannelManager contract. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / COMMENTS\_EMBED\_DEFAULT\_BY\_AUTHOR\_URL ## Variable: COMMENTS\_EMBED\_DEFAULT\_BY\_AUTHOR\_URL ```ts const COMMENTS_EMBED_DEFAULT_BY_AUTHOR_URL: "https://embed.ethcomments.xyz/by-author" = "https://embed.ethcomments.xyz/by-author"; ``` Defined in: packages/sdk/src/constants.ts:86 The default `embedUri` for the CommentsByAuthorEmbed component. It runs a service that creates app signatures for requests and submits the transaction to the `CommentManager` contract. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / COMMENTS\_EMBED\_DEFAULT\_BY\_REPLIES\_URL ## Variable: COMMENTS\_EMBED\_DEFAULT\_BY\_REPLIES\_URL ```ts const COMMENTS_EMBED_DEFAULT_BY_REPLIES_URL: "https://embed.ethcomments.xyz/by-replies" = "https://embed.ethcomments.xyz/by-replies"; ``` Defined in: packages/sdk/src/constants.ts:94 The default `embedUri` for the CommentsByRepliesEmbed component. It runs a service that creates app signatures for requests and submits the transaction to the `CommentManager` contract. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / COMMENTS\_EMBED\_DEFAULT\_URL ## Variable: COMMENTS\_EMBED\_DEFAULT\_URL ```ts const COMMENTS_EMBED_DEFAULT_URL: "https://embed.ethcomments.xyz" = "https://embed.ethcomments.xyz"; ``` Defined in: packages/sdk/src/constants.ts:79 The default `embedUri` for the CommentsEmbed component. It runs a service that creates app signatures for requests and submits the transaction to the `CommentManager` contract. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / COMMENT\_MANAGER\_ADDRESS ## Variable: COMMENT\_MANAGER\_ADDRESS ```ts const COMMENT_MANAGER_ADDRESS: `0x${string}`; ``` Defined in: packages/sdk/src/constants.ts:15 The address of the `CommentManager` contract. It is created using the CREATE2 opcode so should be identical across chains if no collisions occur. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / COMMENT\_TYPE\_COMMENT ## Variable: COMMENT\_TYPE\_COMMENT ```ts const COMMENT_TYPE_COMMENT: 0 = 0; ``` Defined in: packages/sdk/src/constants.ts:66 Comment type constants [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / COMMENT\_TYPE\_REACTION ## Variable: COMMENT\_TYPE\_REACTION ```ts const COMMENT_TYPE_REACTION: 1 = 1; ``` Defined in: packages/sdk/src/constants.ts:67 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / ChannelManagerABI ## Variable: ChannelManagerABI ```ts const ChannelManagerABI: readonly [{ inputs: readonly [{ internalType: "address"; name: "initialOwner"; type: "address"; }]; stateMutability: "nonpayable"; type: "constructor"; }, { stateMutability: "payable"; type: "receive"; }, { inputs: readonly [{ internalType: "address"; name: "to"; type: "address"; }, { internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "approve"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "owner"; type: "address"; }]; name: "balanceOf"; outputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "postFeeAmountForwardedToHook"; type: "uint256"; }]; name: "calculateMsgValueWithHookFee"; outputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "cancelOwnershipHandover"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "channelId"; type: "uint256"; }]; name: "channelExists"; outputs: readonly [{ internalType: "bool"; name: ""; type: "bool"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }, { internalType: "bytes32"; name: ""; type: "bytes32"; }]; name: "channelMetadata"; outputs: readonly [{ internalType: "bytes"; name: ""; type: "bytes"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }, { internalType: "uint256"; name: ""; type: "uint256"; }]; name: "channelMetadataKeys"; outputs: readonly [{ internalType: "bytes32"; name: ""; type: "bytes32"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "collectCommentCreationFee"; outputs: readonly [{ internalType: "uint96"; name: ""; type: "uint96"; }]; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "pendingOwner"; type: "address"; }]; name: "completeOwnershipHandover"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "string"; name: "name"; type: "string"; }, { internalType: "string"; name: "description"; type: "string"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }, { internalType: "address"; name: "hook"; type: "address"; }]; name: "createChannel"; outputs: readonly [{ internalType: "uint256"; name: "channelId"; type: "uint256"; }]; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "value"; type: "uint256"; }]; name: "deductProtocolHookTransactionFee"; outputs: readonly [{ internalType: "uint256"; name: "hookValue"; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "getApproved"; outputs: readonly [{ internalType: "address"; name: ""; type: "address"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "channelId"; type: "uint256"; }]; name: "getChannel"; outputs: readonly [{ components: readonly [{ internalType: "string"; name: "name"; type: "string"; }, { internalType: "string"; name: "description"; type: "string"; }, { internalType: "address"; name: "hook"; type: "address"; }, { components: readonly [{ internalType: "bool"; name: "onInitialize"; type: "bool"; }, { internalType: "bool"; name: "onCommentAdd"; type: "bool"; }, { internalType: "bool"; name: "onCommentDelete"; type: "bool"; }, { internalType: "bool"; name: "onCommentEdit"; type: "bool"; }, { internalType: "bool"; name: "onChannelUpdate"; type: "bool"; }, { internalType: "bool"; name: "onCommentHookDataUpdate"; type: "bool"; }]; internalType: "struct Hooks.Permissions"; name: "permissions"; type: "tuple"; }]; internalType: "struct Channels.Channel"; name: ""; type: "tuple"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "getChannelCreationFee"; outputs: readonly [{ internalType: "uint96"; name: ""; type: "uint96"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "channelId"; type: "uint256"; }]; name: "getChannelMetadata"; outputs: readonly [{ components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: ""; type: "tuple[]"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "channelId"; type: "uint256"; }]; name: "getChannelMetadataKeys"; outputs: readonly [{ internalType: "bytes32[]"; name: ""; type: "bytes32[]"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "channelId"; type: "uint256"; }, { internalType: "bytes32"; name: "key"; type: "bytes32"; }]; name: "getChannelMetadataValue"; outputs: readonly [{ internalType: "bytes"; name: ""; type: "bytes"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "getCommentCreationFee"; outputs: readonly [{ internalType: "uint96"; name: ""; type: "uint96"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "getHookTransactionFee"; outputs: readonly [{ internalType: "uint16"; name: ""; type: "uint16"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "owner"; type: "address"; }, { internalType: "address"; name: "operator"; type: "address"; }]; name: "isApprovedForAll"; outputs: readonly [{ internalType: "bool"; name: ""; type: "bool"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "name"; outputs: readonly [{ internalType: "string"; name: ""; type: "string"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "owner"; outputs: readonly [{ internalType: "address"; name: "result"; type: "address"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "ownerOf"; outputs: readonly [{ internalType: "address"; name: ""; type: "address"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "pendingOwner"; type: "address"; }]; name: "ownershipHandoverExpiresAt"; outputs: readonly [{ internalType: "uint256"; name: "result"; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "renounceOwnership"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly []; name: "requestOwnershipHandover"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "from"; type: "address"; }, { internalType: "address"; name: "to"; type: "address"; }, { internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "safeTransferFrom"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "from"; type: "address"; }, { internalType: "address"; name: "to"; type: "address"; }, { internalType: "uint256"; name: "tokenId"; type: "uint256"; }, { internalType: "bytes"; name: "data"; type: "bytes"; }]; name: "safeTransferFrom"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "operator"; type: "address"; }, { internalType: "bool"; name: "approved"; type: "bool"; }]; name: "setApprovalForAll"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "string"; name: "baseURI_"; type: "string"; }]; name: "setBaseURI"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "uint96"; name: "fee"; type: "uint96"; }]; name: "setChannelCreationFee"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "uint96"; name: "fee"; type: "uint96"; }]; name: "setCommentCreationFee"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "channelId"; type: "uint256"; }, { internalType: "address"; name: "hook"; type: "address"; }]; name: "setHook"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "uint16"; name: "feeBasisPoints"; type: "uint16"; }]; name: "setHookTransactionFee"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "bytes4"; name: "interfaceId"; type: "bytes4"; }]; name: "supportsInterface"; outputs: readonly [{ internalType: "bool"; name: ""; type: "bool"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "symbol"; outputs: readonly [{ internalType: "string"; name: ""; type: "string"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "index"; type: "uint256"; }]; name: "tokenByIndex"; outputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "owner"; type: "address"; }, { internalType: "uint256"; name: "index"; type: "uint256"; }]; name: "tokenOfOwnerByIndex"; outputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "tokenURI"; outputs: readonly [{ internalType: "string"; name: ""; type: "string"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "totalSupply"; outputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "from"; type: "address"; }, { internalType: "address"; name: "to"; type: "address"; }, { internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "transferFrom"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "newOwner"; type: "address"; }]; name: "transferOwnership"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "uint256"; name: "channelId"; type: "uint256"; }, { internalType: "string"; name: "name"; type: "string"; }, { internalType: "string"; name: "description"; type: "string"; }, { components: readonly [{ internalType: "enum Metadata.MetadataOperation"; name: "operation"; type: "uint8"; }, { internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntryOp[]"; name: "metadataOperations"; type: "tuple[]"; }]; name: "updateChannel"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "recipient"; type: "address"; }]; name: "withdrawFees"; outputs: readonly [{ internalType: "uint256"; name: "amount"; type: "uint256"; }]; stateMutability: "nonpayable"; type: "function"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "owner"; type: "address"; }, { indexed: true; internalType: "address"; name: "approved"; type: "address"; }, { indexed: true; internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "Approval"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "owner"; type: "address"; }, { indexed: true; internalType: "address"; name: "operator"; type: "address"; }, { indexed: false; internalType: "bool"; name: "approved"; type: "bool"; }]; name: "ApprovalForAll"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: false; internalType: "string"; name: "baseURI"; type: "string"; }]; name: "BaseURIUpdated"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "uint256"; name: "channelId"; type: "uint256"; }, { indexed: false; internalType: "string"; name: "name"; type: "string"; }, { indexed: false; internalType: "string"; name: "description"; type: "string"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; indexed: false; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }, { indexed: false; internalType: "address"; name: "hook"; type: "address"; }, { indexed: false; internalType: "address"; name: "owner"; type: "address"; }]; name: "ChannelCreated"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: false; internalType: "uint96"; name: "newFee"; type: "uint96"; }]; name: "ChannelCreationFeeUpdated"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "uint256"; name: "channelId"; type: "uint256"; }, { indexed: true; internalType: "bytes32"; name: "key"; type: "bytes32"; }, { indexed: false; internalType: "bytes"; name: "value"; type: "bytes"; }]; name: "ChannelMetadataSet"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "uint256"; name: "channelId"; type: "uint256"; }, { indexed: false; internalType: "string"; name: "name"; type: "string"; }, { indexed: false; internalType: "string"; name: "description"; type: "string"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; indexed: false; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }]; name: "ChannelUpdated"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: false; internalType: "uint96"; name: "newFee"; type: "uint96"; }]; name: "CommentCreationFeeUpdated"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "recipient"; type: "address"; }, { indexed: false; internalType: "uint256"; name: "amount"; type: "uint256"; }]; name: "FeesWithdrawn"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "uint256"; name: "channelId"; type: "uint256"; }, { indexed: true; internalType: "address"; name: "hook"; type: "address"; }]; name: "HookSet"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "uint256"; name: "channelId"; type: "uint256"; }, { indexed: true; internalType: "address"; name: "hook"; type: "address"; }, { indexed: false; internalType: "bool"; name: "enabled"; type: "bool"; }]; name: "HookStatusUpdated"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: false; internalType: "uint16"; name: "newBasisPoints"; type: "uint16"; }]; name: "HookTransactionFeeUpdated"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "pendingOwner"; type: "address"; }]; name: "OwnershipHandoverCanceled"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "pendingOwner"; type: "address"; }]; name: "OwnershipHandoverRequested"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "oldOwner"; type: "address"; }, { indexed: true; internalType: "address"; name: "newOwner"; type: "address"; }]; name: "OwnershipTransferred"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "from"; type: "address"; }, { indexed: true; internalType: "address"; name: "to"; type: "address"; }, { indexed: true; internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "Transfer"; type: "event"; }, { inputs: readonly []; name: "AlreadyInitialized"; type: "error"; }, { inputs: readonly []; name: "ChannelAlreadyExists"; type: "error"; }, { inputs: readonly []; name: "ChannelDoesNotExist"; type: "error"; }, { inputs: readonly []; name: "ERC721EnumerableForbiddenBatchMint"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "sender"; type: "address"; }, { internalType: "uint256"; name: "tokenId"; type: "uint256"; }, { internalType: "address"; name: "owner"; type: "address"; }]; name: "ERC721IncorrectOwner"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "operator"; type: "address"; }, { internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "ERC721InsufficientApproval"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "approver"; type: "address"; }]; name: "ERC721InvalidApprover"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "operator"; type: "address"; }]; name: "ERC721InvalidOperator"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "owner"; type: "address"; }]; name: "ERC721InvalidOwner"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "receiver"; type: "address"; }]; name: "ERC721InvalidReceiver"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "sender"; type: "address"; }]; name: "ERC721InvalidSender"; type: "error"; }, { inputs: readonly [{ internalType: "uint256"; name: "tokenId"; type: "uint256"; }]; name: "ERC721NonexistentToken"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "owner"; type: "address"; }, { internalType: "uint256"; name: "index"; type: "uint256"; }]; name: "ERC721OutOfBoundsIndex"; type: "error"; }, { inputs: readonly []; name: "EmptyChannelName"; type: "error"; }, { inputs: readonly []; name: "HookAlreadySet"; type: "error"; }, { inputs: readonly []; name: "InsufficientFee"; type: "error"; }, { inputs: readonly []; name: "InvalidBaseURI"; type: "error"; }, { inputs: readonly []; name: "InvalidFee"; type: "error"; }, { inputs: readonly []; name: "InvalidHookInterface"; type: "error"; }, { inputs: readonly []; name: "InvalidKey"; type: "error"; }, { inputs: readonly []; name: "NewOwnerIsZeroAddress"; type: "error"; }, { inputs: readonly []; name: "NoHandoverRequest"; type: "error"; }, { inputs: readonly []; name: "Reentrancy"; type: "error"; }, { inputs: readonly []; name: "Unauthorized"; type: "error"; }, { inputs: readonly []; name: "UnauthorizedCaller"; type: "error"; }, { inputs: readonly []; name: "ZeroAddress"; type: "error"; }]; ``` Defined in: packages/sdk/src/abis.ts:1975 ABI of the ChannelManager contract. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / CommentManagerABI ## Variable: CommentManagerABI ```ts const CommentManagerABI: readonly [{ inputs: readonly [{ internalType: "address"; name: "initialOwner"; type: "address"; }]; stateMutability: "nonpayable"; type: "constructor"; }, { inputs: readonly []; name: "DOMAIN_SEPARATOR"; outputs: readonly [{ internalType: "bytes32"; name: ""; type: "bytes32"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "app"; type: "address"; }, { internalType: "uint256"; name: "expiry"; type: "uint256"; }]; name: "addApproval"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "author"; type: "address"; }, { internalType: "address"; name: "app"; type: "address"; }, { internalType: "uint256"; name: "expiry"; type: "uint256"; }, { internalType: "uint256"; name: "nonce"; type: "uint256"; }, { internalType: "uint256"; name: "deadline"; type: "uint256"; }, { internalType: "bytes"; name: "authorSignature"; type: "bytes"; }]; name: "addApprovalWithSig"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ components: readonly [{ internalType: "enum Comments.BatchOperationType"; name: "operationType"; type: "uint8"; }, { internalType: "uint256"; name: "value"; type: "uint256"; }, { internalType: "bytes"; name: "data"; type: "bytes"; }, { internalType: "bytes[]"; name: "signatures"; type: "bytes[]"; }]; internalType: "struct Comments.BatchOperation[]"; name: "operations"; type: "tuple[]"; }]; name: "batchOperations"; outputs: readonly [{ internalType: "bytes[]"; name: "results"; type: "bytes[]"; }]; stateMutability: "payable"; type: "function"; }, { inputs: readonly []; name: "cancelOwnershipHandover"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly []; name: "channelManager"; outputs: readonly [{ internalType: "contract IChannelManager"; name: ""; type: "address"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: ""; type: "bytes32"; }, { internalType: "bytes32"; name: ""; type: "bytes32"; }]; name: "commentHookMetadata"; outputs: readonly [{ internalType: "bytes"; name: ""; type: "bytes"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: ""; type: "bytes32"; }, { internalType: "uint256"; name: ""; type: "uint256"; }]; name: "commentHookMetadataKeys"; outputs: readonly [{ internalType: "bytes32"; name: ""; type: "bytes32"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: ""; type: "bytes32"; }, { internalType: "bytes32"; name: ""; type: "bytes32"; }]; name: "commentMetadata"; outputs: readonly [{ internalType: "bytes"; name: ""; type: "bytes"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: ""; type: "bytes32"; }, { internalType: "uint256"; name: ""; type: "uint256"; }]; name: "commentMetadataKeys"; outputs: readonly [{ internalType: "bytes32"; name: ""; type: "bytes32"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "pendingOwner"; type: "address"; }]; name: "completeOwnershipHandover"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: "commentId"; type: "bytes32"; }]; name: "deleteComment"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: "commentId"; type: "bytes32"; }, { internalType: "address"; name: "app"; type: "address"; }, { internalType: "uint256"; name: "deadline"; type: "uint256"; }, { internalType: "bytes"; name: "authorSignature"; type: "bytes"; }, { internalType: "bytes"; name: "appSignature"; type: "bytes"; }]; name: "deleteCommentWithSig"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: "commentId"; type: "bytes32"; }, { components: readonly [{ internalType: "address"; name: "app"; type: "address"; }, { internalType: "uint256"; name: "nonce"; type: "uint256"; }, { internalType: "uint256"; name: "deadline"; type: "uint256"; }, { internalType: "string"; name: "content"; type: "string"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }]; internalType: "struct Comments.EditComment"; name: "editData"; type: "tuple"; }, { internalType: "bytes"; name: "appSignature"; type: "bytes"; }]; name: "editComment"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: "commentId"; type: "bytes32"; }, { components: readonly [{ internalType: "address"; name: "app"; type: "address"; }, { internalType: "uint256"; name: "nonce"; type: "uint256"; }, { internalType: "uint256"; name: "deadline"; type: "uint256"; }, { internalType: "string"; name: "content"; type: "string"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }]; internalType: "struct Comments.EditComment"; name: "editData"; type: "tuple"; }, { internalType: "bytes"; name: "authorSignature"; type: "bytes"; }, { internalType: "bytes"; name: "appSignature"; type: "bytes"; }]; name: "editCommentWithSig"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "author"; type: "address"; }, { internalType: "address"; name: "app"; type: "address"; }, { internalType: "uint256"; name: "expiry"; type: "uint256"; }, { internalType: "uint256"; name: "nonce"; type: "uint256"; }, { internalType: "uint256"; name: "deadline"; type: "uint256"; }]; name: "getAddApprovalHash"; outputs: readonly [{ internalType: "bytes32"; name: ""; type: "bytes32"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "author"; type: "address"; }, { internalType: "address"; name: "app"; type: "address"; }]; name: "getApprovalExpiry"; outputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: "commentId"; type: "bytes32"; }]; name: "getComment"; outputs: readonly [{ components: readonly [{ internalType: "address"; name: "author"; type: "address"; }, { internalType: "uint88"; name: "createdAt"; type: "uint88"; }, { internalType: "enum Comments.AuthorAuthMethod"; name: "authMethod"; type: "uint8"; }, { internalType: "address"; name: "app"; type: "address"; }, { internalType: "uint88"; name: "updatedAt"; type: "uint88"; }, { internalType: "uint8"; name: "commentType"; type: "uint8"; }, { internalType: "uint256"; name: "channelId"; type: "uint256"; }, { internalType: "bytes32"; name: "parentId"; type: "bytes32"; }, { internalType: "string"; name: "content"; type: "string"; }, { internalType: "string"; name: "targetUri"; type: "string"; }]; internalType: "struct Comments.Comment"; name: ""; type: "tuple"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: "commentId"; type: "bytes32"; }]; name: "getCommentHookMetadata"; outputs: readonly [{ components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: ""; type: "tuple[]"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: "commentId"; type: "bytes32"; }]; name: "getCommentHookMetadataKeys"; outputs: readonly [{ internalType: "bytes32[]"; name: ""; type: "bytes32[]"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: "commentId"; type: "bytes32"; }, { internalType: "bytes32"; name: "key"; type: "bytes32"; }]; name: "getCommentHookMetadataValue"; outputs: readonly [{ internalType: "bytes"; name: ""; type: "bytes"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ components: readonly [{ internalType: "address"; name: "author"; type: "address"; }, { internalType: "address"; name: "app"; type: "address"; }, { internalType: "uint256"; name: "channelId"; type: "uint256"; }, { internalType: "uint256"; name: "deadline"; type: "uint256"; }, { internalType: "bytes32"; name: "parentId"; type: "bytes32"; }, { internalType: "uint8"; name: "commentType"; type: "uint8"; }, { internalType: "string"; name: "content"; type: "string"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }, { internalType: "string"; name: "targetUri"; type: "string"; }]; internalType: "struct Comments.CreateComment"; name: "commentData"; type: "tuple"; }]; name: "getCommentId"; outputs: readonly [{ internalType: "bytes32"; name: ""; type: "bytes32"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: "commentId"; type: "bytes32"; }]; name: "getCommentMetadata"; outputs: readonly [{ components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: ""; type: "tuple[]"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: "commentId"; type: "bytes32"; }]; name: "getCommentMetadataKeys"; outputs: readonly [{ internalType: "bytes32[]"; name: ""; type: "bytes32[]"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: "commentId"; type: "bytes32"; }, { internalType: "bytes32"; name: "key"; type: "bytes32"; }]; name: "getCommentMetadataValue"; outputs: readonly [{ internalType: "bytes"; name: ""; type: "bytes"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: "commentId"; type: "bytes32"; }, { internalType: "address"; name: "author"; type: "address"; }, { internalType: "address"; name: "app"; type: "address"; }, { internalType: "uint256"; name: "deadline"; type: "uint256"; }]; name: "getDeleteCommentHash"; outputs: readonly [{ internalType: "bytes32"; name: ""; type: "bytes32"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: "commentId"; type: "bytes32"; }, { internalType: "address"; name: "author"; type: "address"; }, { components: readonly [{ internalType: "address"; name: "app"; type: "address"; }, { internalType: "uint256"; name: "nonce"; type: "uint256"; }, { internalType: "uint256"; name: "deadline"; type: "uint256"; }, { internalType: "string"; name: "content"; type: "string"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }]; internalType: "struct Comments.EditComment"; name: "editData"; type: "tuple"; }]; name: "getEditCommentHash"; outputs: readonly [{ internalType: "bytes32"; name: ""; type: "bytes32"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "author"; type: "address"; }, { internalType: "address"; name: "app"; type: "address"; }]; name: "getNonce"; outputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "author"; type: "address"; }, { internalType: "address"; name: "app"; type: "address"; }, { internalType: "uint256"; name: "nonce"; type: "uint256"; }, { internalType: "uint256"; name: "deadline"; type: "uint256"; }]; name: "getRemoveApprovalHash"; outputs: readonly [{ internalType: "bytes32"; name: ""; type: "bytes32"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "author"; type: "address"; }, { internalType: "address"; name: "app"; type: "address"; }]; name: "isApproved"; outputs: readonly [{ internalType: "bool"; name: ""; type: "bool"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: "commentId"; type: "bytes32"; }]; name: "isDeleted"; outputs: readonly [{ internalType: "bool"; name: ""; type: "bool"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "name"; outputs: readonly [{ internalType: "string"; name: ""; type: "string"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "owner"; outputs: readonly [{ internalType: "address"; name: "result"; type: "address"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "pendingOwner"; type: "address"; }]; name: "ownershipHandoverExpiresAt"; outputs: readonly [{ internalType: "uint256"; name: "result"; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ components: readonly [{ internalType: "address"; name: "author"; type: "address"; }, { internalType: "address"; name: "app"; type: "address"; }, { internalType: "uint256"; name: "channelId"; type: "uint256"; }, { internalType: "uint256"; name: "deadline"; type: "uint256"; }, { internalType: "bytes32"; name: "parentId"; type: "bytes32"; }, { internalType: "uint8"; name: "commentType"; type: "uint8"; }, { internalType: "string"; name: "content"; type: "string"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }, { internalType: "string"; name: "targetUri"; type: "string"; }]; internalType: "struct Comments.CreateComment"; name: "commentData"; type: "tuple"; }, { internalType: "bytes"; name: "appSignature"; type: "bytes"; }]; name: "postComment"; outputs: readonly [{ internalType: "bytes32"; name: ""; type: "bytes32"; }]; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ components: readonly [{ internalType: "address"; name: "author"; type: "address"; }, { internalType: "address"; name: "app"; type: "address"; }, { internalType: "uint256"; name: "channelId"; type: "uint256"; }, { internalType: "uint256"; name: "deadline"; type: "uint256"; }, { internalType: "bytes32"; name: "parentId"; type: "bytes32"; }, { internalType: "uint8"; name: "commentType"; type: "uint8"; }, { internalType: "string"; name: "content"; type: "string"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }, { internalType: "string"; name: "targetUri"; type: "string"; }]; internalType: "struct Comments.CreateComment"; name: "commentData"; type: "tuple"; }, { internalType: "bytes"; name: "authorSignature"; type: "bytes"; }, { internalType: "bytes"; name: "appSignature"; type: "bytes"; }]; name: "postCommentWithSig"; outputs: readonly [{ internalType: "bytes32"; name: ""; type: "bytes32"; }]; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "author"; type: "address"; }, { internalType: "address"; name: "app"; type: "address"; }, { internalType: "uint256"; name: "nonce"; type: "uint256"; }, { internalType: "uint256"; name: "deadline"; type: "uint256"; }, { internalType: "bytes"; name: "authorSignature"; type: "bytes"; }]; name: "removeApprovalWithSig"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly []; name: "renounceOwnership"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly []; name: "requestOwnershipHandover"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "app"; type: "address"; }]; name: "revokeApproval"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "newOwner"; type: "address"; }]; name: "transferOwnership"; outputs: readonly []; stateMutability: "payable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "_channelContract"; type: "address"; }]; name: "updateChannelContract"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "bytes32"; name: "commentId"; type: "bytes32"; }]; name: "updateCommentHookData"; outputs: readonly []; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly []; name: "version"; outputs: readonly [{ internalType: "string"; name: ""; type: "string"; }]; stateMutability: "view"; type: "function"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "author"; type: "address"; }, { indexed: true; internalType: "address"; name: "app"; type: "address"; }, { indexed: false; internalType: "uint256"; name: "expiry"; type: "uint256"; }]; name: "ApprovalAdded"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "author"; type: "address"; }, { indexed: true; internalType: "address"; name: "app"; type: "address"; }]; name: "ApprovalRemoved"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "sender"; type: "address"; }, { indexed: false; internalType: "uint256"; name: "operationsCount"; type: "uint256"; }, { indexed: false; internalType: "uint256"; name: "totalValue"; type: "uint256"; }]; name: "BatchOperationExecuted"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "bytes32"; name: "commentId"; type: "bytes32"; }, { indexed: true; internalType: "address"; name: "author"; type: "address"; }, { indexed: true; internalType: "address"; name: "app"; type: "address"; }, { indexed: false; internalType: "uint256"; name: "channelId"; type: "uint256"; }, { indexed: false; internalType: "bytes32"; name: "parentId"; type: "bytes32"; }, { indexed: false; internalType: "uint96"; name: "createdAt"; type: "uint96"; }, { indexed: false; internalType: "string"; name: "content"; type: "string"; }, { indexed: false; internalType: "string"; name: "targetUri"; type: "string"; }, { indexed: false; internalType: "uint8"; name: "commentType"; type: "uint8"; }, { indexed: false; internalType: "uint8"; name: "authMethod"; type: "uint8"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; indexed: false; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }]; name: "CommentAdded"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "bytes32"; name: "commentId"; type: "bytes32"; }, { indexed: true; internalType: "address"; name: "author"; type: "address"; }]; name: "CommentDeleted"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "bytes32"; name: "commentId"; type: "bytes32"; }, { indexed: true; internalType: "address"; name: "author"; type: "address"; }, { indexed: true; internalType: "address"; name: "editedByApp"; type: "address"; }, { indexed: false; internalType: "uint256"; name: "channelId"; type: "uint256"; }, { indexed: false; internalType: "bytes32"; name: "parentId"; type: "bytes32"; }, { indexed: false; internalType: "uint96"; name: "createdAt"; type: "uint96"; }, { indexed: false; internalType: "uint96"; name: "updatedAt"; type: "uint96"; }, { indexed: false; internalType: "string"; name: "content"; type: "string"; }, { indexed: false; internalType: "string"; name: "targetUri"; type: "string"; }, { indexed: false; internalType: "uint8"; name: "commentType"; type: "uint8"; }, { indexed: false; internalType: "uint8"; name: "authMethod"; type: "uint8"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; indexed: false; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }]; name: "CommentEdited"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "bytes32"; name: "commentId"; type: "bytes32"; }, { components: readonly [{ internalType: "enum Metadata.MetadataOperation"; name: "operation"; type: "uint8"; }, { internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; indexed: false; internalType: "struct Metadata.MetadataEntryOp[]"; name: "operations"; type: "tuple[]"; }]; name: "CommentHookDataUpdate"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "bytes32"; name: "commentId"; type: "bytes32"; }, { indexed: true; internalType: "bytes32"; name: "key"; type: "bytes32"; }, { indexed: false; internalType: "bytes"; name: "value"; type: "bytes"; }]; name: "CommentHookMetadataSet"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "bytes32"; name: "commentId"; type: "bytes32"; }, { indexed: true; internalType: "bytes32"; name: "key"; type: "bytes32"; }, { indexed: false; internalType: "bytes"; name: "value"; type: "bytes"; }]; name: "CommentMetadataSet"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "pendingOwner"; type: "address"; }]; name: "OwnershipHandoverCanceled"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "pendingOwner"; type: "address"; }]; name: "OwnershipHandoverRequested"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "oldOwner"; type: "address"; }, { indexed: true; internalType: "address"; name: "newOwner"; type: "address"; }]; name: "OwnershipTransferred"; type: "event"; }, { inputs: readonly []; name: "AlreadyInitialized"; type: "error"; }, { inputs: readonly [{ internalType: "uint256"; name: "operationIndex"; type: "uint256"; }, { internalType: "bytes"; name: "reason"; type: "bytes"; }]; name: "BatchOperationFailed"; type: "error"; }, { inputs: readonly []; name: "ChannelDoesNotExist"; type: "error"; }, { inputs: readonly []; name: "CommentAlreadyDeleted"; type: "error"; }, { inputs: readonly []; name: "CommentAlreadyExists"; type: "error"; }, { inputs: readonly []; name: "CommentDoesNotExist"; type: "error"; }, { inputs: readonly []; name: "HookMetadataTooLong"; type: "error"; }, { inputs: readonly []; name: "HookNotEnabled"; type: "error"; }, { inputs: readonly [{ internalType: "uint256"; name: "providedValue"; type: "uint256"; }, { internalType: "uint256"; name: "requiredValue"; type: "uint256"; }]; name: "InsufficientValue"; type: "error"; }, { inputs: readonly []; name: "InvalidAppSignature"; type: "error"; }, { inputs: readonly []; name: "InvalidApprovalExpiry"; type: "error"; }, { inputs: readonly []; name: "InvalidAuthorSignature"; type: "error"; }, { inputs: readonly [{ internalType: "uint256"; name: "operationIndex"; type: "uint256"; }, { internalType: "string"; name: "reason"; type: "string"; }]; name: "InvalidBatchOperation"; type: "error"; }, { inputs: readonly [{ internalType: "string"; name: "message"; type: "string"; }]; name: "InvalidCommentReference"; type: "error"; }, { inputs: readonly []; name: "InvalidKey"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "author"; type: "address"; }, { internalType: "address"; name: "app"; type: "address"; }, { internalType: "uint256"; name: "expected"; type: "uint256"; }, { internalType: "uint256"; name: "provided"; type: "uint256"; }]; name: "InvalidNonce"; type: "error"; }, { inputs: readonly [{ internalType: "string"; name: "reason"; type: "string"; }]; name: "InvalidReactionReference"; type: "error"; }, { inputs: readonly []; name: "InvalidSignatureLength"; type: "error"; }, { inputs: readonly []; name: "InvalidSignatureS"; type: "error"; }, { inputs: readonly [{ internalType: "uint256"; name: "providedValue"; type: "uint256"; }, { internalType: "uint256"; name: "requiredValue"; type: "uint256"; }]; name: "InvalidValueDistribution"; type: "error"; }, { inputs: readonly []; name: "MetadataTooLong"; type: "error"; }, { inputs: readonly []; name: "NewOwnerIsZeroAddress"; type: "error"; }, { inputs: readonly []; name: "NoHandoverRequest"; type: "error"; }, { inputs: readonly [{ internalType: "address"; name: "caller"; type: "address"; }, { internalType: "address"; name: "requiredCaller"; type: "address"; }]; name: "NotAuthorized"; type: "error"; }, { inputs: readonly []; name: "ParentCommentHasNeverExisted"; type: "error"; }, { inputs: readonly []; name: "ParentCommentNotInSameChannel"; type: "error"; }, { inputs: readonly []; name: "ReactionCannotBeEdited"; type: "error"; }, { inputs: readonly []; name: "Reentrancy"; type: "error"; }, { inputs: readonly [{ internalType: "uint256"; name: "deadline"; type: "uint256"; }, { internalType: "uint256"; name: "currentTime"; type: "uint256"; }]; name: "SignatureDeadlineReached"; type: "error"; }, { inputs: readonly []; name: "Unauthorized"; type: "error"; }, { inputs: readonly []; name: "ZeroAddress"; type: "error"; }]; ``` Defined in: packages/sdk/src/abis.ts:4 ABI of the CommentManager contract. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / DEFAULT\_CHAIN\_ID ## Variable: DEFAULT\_CHAIN\_ID ```ts const DEFAULT_CHAIN_ID: 8453 = 8453; ``` Defined in: packages/sdk/src/constants.ts:116 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / DEFAULT\_CHAIN\_ID\_DEV ## Variable: DEFAULT\_CHAIN\_ID\_DEV ```ts const DEFAULT_CHAIN_ID_DEV: 31337 = 31337; ``` Defined in: packages/sdk/src/constants.ts:117 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / DEFAULT\_CHANNEL\_ID ## Variable: DEFAULT\_CHANNEL\_ID ```ts const DEFAULT_CHANNEL_ID: 0n = 0n; ``` Defined in: packages/sdk/src/constants.ts:61 The default channel ID for the CommentManager contract. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / DEFAULT\_COMMENT\_TYPE ## Variable: DEFAULT\_COMMENT\_TYPE ```ts const DEFAULT_COMMENT_TYPE: 0 = COMMENT_TYPE_COMMENT; ``` Defined in: packages/sdk/src/constants.ts:72 The default comment type for the `CommentManager` contract. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / EMPTY\_PARENT\_ID ## Variable: EMPTY\_PARENT\_ID ```ts const EMPTY_PARENT_ID: `0x${string}`; ``` Defined in: packages/sdk/src/constants.ts:109 The parent ID for comments that are not replies. This is bytes32(0) [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / INDEXER\_API\_URL ## Variable: INDEXER\_API\_URL ```ts const INDEXER_API_URL: "https://api.ethcomments.xyz" = "https://api.ethcomments.xyz"; ``` Defined in: packages/sdk/src/constants.ts:102 The default URL for the Indexer API. It is used to fetch comments and replies. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / MAX\_COMMENT\_REPORT\_MESSAGE\_LENGTH ## Variable: MAX\_COMMENT\_REPORT\_MESSAGE\_LENGTH ```ts const MAX_COMMENT_REPORT_MESSAGE_LENGTH: 200 = 200; ``` Defined in: packages/sdk/src/constants.ts:114 The maximum length of a message for comment report. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / SUPPORTED\_CHAINS ## Variable: SUPPORTED\_CHAINS ```ts const SUPPORTED_CHAINS: { 31337: SupportedChainConfig; 8453: SupportedChainConfig; 84532: SupportedChainConfig; }; ``` Defined in: packages/sdk/src/constants.ts:35 The supported chains and their corresponding contract addresses. ### Type declaration #### 31337 ```ts readonly 31337: SupportedChainConfig; ``` #### 8453 ```ts readonly 8453: SupportedChainConfig; ``` #### 84532 ```ts readonly 84532: SupportedChainConfig; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / ZERO\_ADDRESS ## Variable: ZERO\_ADDRESS ```ts const ZERO_ADDRESS: `0x${string}`; ``` Defined in: packages/sdk/src/constants.ts:56 The zero address. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / CommentsByAuthorEmbed ## Function: CommentsByAuthorEmbed() ```ts function CommentsByAuthorEmbed(props): Element; ``` Defined in: packages/sdk/src/embed/react.tsx:137 Renders comments embed iframe for the given author. This is client component only. ### Parameters #### props [`CommentsByAuthorEmbedProps`](/sdk-reference/embed/type-aliases/CommentsByAuthorEmbedProps.mdx) ### Returns `Element` ### Examples ```tsx ``` ```tsx // force dark theme ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / CommentsByRepliesEmbed ## Function: CommentsByRepliesEmbed() ```ts function CommentsByRepliesEmbed(props): Element; ``` Defined in: packages/sdk/src/embed/react.tsx:180 Renders comments embed iframe for replies to a specific comment. This is client component only. ### Parameters #### props [`CommentsByRepliesEmbedProps`](/sdk-reference/embed/type-aliases/CommentsByRepliesEmbedProps.mdx) ### Returns `Element` ### Examples ```tsx ``` ```tsx // force dark theme ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / CommentsEmbed ## Function: CommentsEmbed() ```ts function CommentsEmbed(props): Element; ``` Defined in: packages/sdk/src/embed/react.tsx:56 Renders comments embed iframe for the given uri. This is client component only. ### Parameters #### props [`CommentsEmbedProps`](/sdk-reference/embed/type-aliases/CommentsEmbedProps.mdx) ### Returns `Element` ### Examples ```tsx ``` ```tsx // force dark theme ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / createCommentsEmbedURL ## Function: createCommentsEmbedURL() ```ts function createCommentsEmbedURL(options): string; ``` Defined in: packages/sdk/src/embed/utils.ts:35 Creates a URL for the comments embed iframe. ### Parameters #### options [`CreateCommentsEmbedURLParams`](/sdk-reference/embed/type-aliases/CreateCommentsEmbedURLParams.mdx) ### Returns `string` The URL for the comments embed iframe. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / CommentsByAuthorEmbedProps ## Type Alias: CommentsByAuthorEmbedProps ```ts type CommentsByAuthorEmbedProps = { author: Hex; containerProps?: React.HTMLAttributes; embedUri?: string; iframeProps?: React.IframeHTMLAttributes; } & EmbedConfigSchemaInputType; ``` Defined in: packages/sdk/src/embed/react.tsx:80 ### Type declaration #### author ```ts author: Hex; ``` The author address to filter comments by #### containerProps? ```ts optional containerProps: React.HTMLAttributes; ``` Allows to pass custom props to iframe's wrapper element #### embedUri? ```ts optional embedUri: string; ``` URL of the comments embed iframe page. This page is rendered in the iframe. #### iframeProps? ```ts optional iframeProps: React.IframeHTMLAttributes; ``` Allows to pass custom props to iframe [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / CommentsByRepliesEmbedProps ## Type Alias: CommentsByRepliesEmbedProps ```ts type CommentsByRepliesEmbedProps = { commentId: Hex; containerProps?: React.HTMLAttributes; embedUri?: string; iframeProps?: React.IframeHTMLAttributes; } & EmbedConfigSchemaInputType; ``` Defined in: packages/sdk/src/embed/react.tsx:99 ### Type declaration #### commentId ```ts commentId: Hex; ``` The comment ID to filter replies by #### containerProps? ```ts optional containerProps: React.HTMLAttributes; ``` Allows to pass custom props to iframe's wrapper element #### embedUri? ```ts optional embedUri: string; ``` URL of the comments embed iframe page. This page is rendered in the iframe. #### iframeProps? ```ts optional iframeProps: React.IframeHTMLAttributes; ``` Allows to pass custom props to iframe [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / CommentsEmbedProps ## Type Alias: CommentsEmbedProps ```ts type CommentsEmbedProps = { containerProps?: React.HTMLAttributes; embedUri?: string; iframeProps?: React.IframeHTMLAttributes; uri: string | URL; } & EmbedConfigSchemaInputType; ``` Defined in: packages/sdk/src/embed/react.tsx:18 The props for `` component. ### Type declaration #### containerProps? ```ts optional containerProps: React.HTMLAttributes; ``` Allows to pass custom props to iframe's wrapper element #### embedUri? ```ts optional embedUri: string; ``` URL of the comments embed iframe page. This page is rendered in the iframe. #### iframeProps? ```ts optional iframeProps: React.IframeHTMLAttributes; ``` Allows to pass custom props to iframe #### uri ```ts uri: string | URL; ``` URL of the page to embed comments for. Comments for this uri are rendered in iframe's page. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / CreateCommentsEmbedURLParams ## Type Alias: CreateCommentsEmbedURLParams ```ts type CreateCommentsEmbedURLParams = { config?: EmbedConfigSchemaInputType; embedUri: string; source: | { targetUri: string; } | { author: Hex; } | { commentId: Hex; }; }; ``` Defined in: packages/sdk/src/embed/utils.ts:13 Parameters for `createCommentsEmbedURL` ### Properties #### config? ```ts optional config: EmbedConfigSchemaInputType; ``` Defined in: packages/sdk/src/embed/utils.ts:25 The configuration for the comments embed. *** #### embedUri ```ts embedUri: string; ``` Defined in: packages/sdk/src/embed/utils.ts:17 The URI of the comments embed iframe page. *** #### source ```ts source: | { targetUri: string; } | { author: Hex; } | { commentId: Hex; }; ``` Defined in: packages/sdk/src/embed/utils.ts:21 The target URI, author address, or comment ID to embed comments for. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigFontSchemaType ## Type Alias: EmbedConfigFontSchemaType ```ts type EmbedConfigFontSchemaType = { fontFamily?: | { system: string; } | { google?: | "ABeeZee" | "ADLaM_Display" | "AR_One_Sans" | "Abel" | "Abhaya_Libre" | "Aboreto" | "Abril_Fatface" | "Abyssinica_SIL" | "Aclonica" | "Acme" | "Actor" | "Adamina" | "Advent_Pro" | "Afacad" | "Afacad_Flux" | "Agbalumo" | "Agdasima" | "Aguafina_Script" | "Akatab" | "Akaya_Kanadaka" | "Akaya_Telivigala" | "Akronim" | "Akshar" | "Aladin" | "Alata" | "Alatsi" | "Albert_Sans" | "Aldrich" | "Alef" | "Alegreya" | "Alegreya_SC" | "Alegreya_Sans" | "Alegreya_Sans_SC" | "Aleo" | "Alex_Brush" | "Alexandria" | "Alfa_Slab_One" | "Alice" | "Alike" | "Alike_Angular" | "Alkalami" | "Alkatra" | "Allan" | "Allerta" | "Allerta_Stencil" | "Allison" | "Allura" | "Almarai" | "Almendra" | "Almendra_Display" | "Almendra_SC" | "Alumni_Sans" | "Alumni_Sans_Collegiate_One" | "Alumni_Sans_Inline_One" | "Alumni_Sans_Pinstripe" | "Amarante" | "Amaranth" | "Amatic_SC" | "Amethysta" | "Amiko" | "Amiri" | "Amiri_Quran" | "Amita" | "Anaheim" | "Andada_Pro" | "Andika" | "Anek_Bangla" | "Anek_Devanagari" | "Anek_Gujarati" | "Anek_Gurmukhi" | "Anek_Kannada" | "Anek_Latin" | "Anek_Malayalam" | "Anek_Odia" | "Anek_Tamil" | "Anek_Telugu" | "Angkor" | "Annapurna_SIL" | "Annie_Use_Your_Telescope" | "Anonymous_Pro" | "Anta" | "Antic" | "Antic_Didone" | "Antic_Slab" | "Anton" | "Anton_SC" | "Antonio" | "Anuphan" | "Anybody" | "Aoboshi_One" | "Arapey" | "Arbutus" | "Arbutus_Slab" | "Architects_Daughter" | "Archivo" | "Archivo_Black" | "Archivo_Narrow" | "Are_You_Serious" | "Aref_Ruqaa" | "Aref_Ruqaa_Ink" | "Arima" | "Arimo" | "Arizonia" | "Armata" | "Arsenal" | "Arsenal_SC" | "Artifika" | "Arvo" | "Arya" | "Asap" | "Asap_Condensed" | "Asar" | "Asset" | "Assistant" | "Astloch" | "Asul" | "Athiti" | "Atkinson_Hyperlegible" | "Atma" | "Atomic_Age" | "Aubrey" | "Audiowide" | "Autour_One" | "Average" | "Average_Sans" | "Averia_Gruesa_Libre" | "Averia_Libre" | "Averia_Sans_Libre" | "Averia_Serif_Libre" | "Azeret_Mono" | "B612" | "B612_Mono" | "BIZ_UDGothic" | "BIZ_UDMincho" | "BIZ_UDPGothic" | "BIZ_UDPMincho" | "Babylonica" | "Bacasime_Antique" | "Bad_Script" | "Bagel_Fat_One" | "Bahiana" | "Bahianita" | "Bai_Jamjuree" | "Bakbak_One" | "Ballet" | "Baloo_2" | "Baloo_Bhai_2" | "Baloo_Bhaijaan_2" | "Baloo_Bhaina_2" | "Baloo_Chettan_2" | "Baloo_Da_2" | "Baloo_Paaji_2" | "Baloo_Tamma_2" | "Baloo_Tammudu_2" | "Baloo_Thambi_2" | "Balsamiq_Sans" | "Balthazar" | "Bangers" | "Barlow" | "Barlow_Condensed" | "Barlow_Semi_Condensed" | "Barriecito" | "Barrio" | "Basic" | "Baskervville" | "Baskervville_SC" | "Battambang" | "Baumans" | "Bayon" | "Be_Vietnam_Pro" | "Beau_Rivage" | "Bebas_Neue" | "Beiruti" | "Belanosima" | "Belgrano" | "Bellefair" | "Belleza" | "Bellota" | "Bellota_Text" | "BenchNine" | "Benne" | "Bentham" | "Berkshire_Swash" | "Besley" | "Beth_Ellen" | "Bevan" | "BhuTuka_Expanded_One" | "Big_Shoulders_Display" | "Big_Shoulders_Inline_Display" | "Big_Shoulders_Inline_Text" | "Big_Shoulders_Stencil_Display" | "Big_Shoulders_Stencil_Text" | "Big_Shoulders_Text" | "Bigelow_Rules" | "Bigshot_One" | "Bilbo" | "Bilbo_Swash_Caps" | "BioRhyme" | "BioRhyme_Expanded" | "Birthstone" | "Birthstone_Bounce" | "Biryani" | "Bitter" | "Black_And_White_Picture" | "Black_Han_Sans" | "Black_Ops_One" | "Blaka" | "Blaka_Hollow" | "Blaka_Ink" | "Blinker" | "Bodoni_Moda" | "Bodoni_Moda_SC" | "Bokor" | "Bona_Nova" | "Bona_Nova_SC" | "Bonbon" | "Bonheur_Royale" | "Boogaloo" | "Borel" | "Bowlby_One" | "Bowlby_One_SC" | "Braah_One" | "Brawler" | "Bree_Serif" | "Bricolage_Grotesque" | "Bruno_Ace" | "Bruno_Ace_SC" | "Brygada_1918" | "Bubblegum_Sans" | "Bubbler_One" | "Buda" | "Buenard" | "Bungee" | "Bungee_Hairline" | "Bungee_Inline" | "Bungee_Outline" | "Bungee_Shade" | "Bungee_Spice" | "Bungee_Tint" | "Butcherman" | "Butterfly_Kids" | "Cabin" | "Cabin_Condensed" | "Cabin_Sketch" | "Cactus_Classical_Serif" | "Caesar_Dressing" | "Cagliostro" | "Cairo" | "Cairo_Play" | "Caladea" | "Calistoga" | "Calligraffitti" | "Cambay" | "Cambo" | "Candal" | "Cantarell" | "Cantata_One" | "Cantora_One" | "Caprasimo" | "Capriola" | "Caramel" | "Carattere" | "Cardo" | "Carlito" | "Carme" | "Carrois_Gothic" | "Carrois_Gothic_SC" | "Carter_One" | "Castoro" | "Castoro_Titling" | "Catamaran" | "Caudex" | "Caveat" | "Caveat_Brush" | "Cedarville_Cursive" | "Ceviche_One" | "Chakra_Petch" | "Changa" | "Changa_One" | "Chango" | "Charis_SIL" | "Charm" | "Charmonman" | "Chathura" | "Chau_Philomene_One" | "Chela_One" | "Chelsea_Market" | "Chenla" | "Cherish" | "Cherry_Bomb_One" | "Cherry_Cream_Soda" | "Cherry_Swash" | "Chewy" | "Chicle" | "Chilanka" | "Chivo" | "Chivo_Mono" | "Chocolate_Classical_Sans" | "Chokokutai" | "Chonburi" | "Cinzel" | "Cinzel_Decorative" | "Clicker_Script" | "Climate_Crisis" | "Coda" | "Codystar" | "Coiny" | "Combo" | "Comfortaa" | "Comforter" | "Comforter_Brush" | "Comic_Neue" | "Coming_Soon" | "Comme" | "Commissioner" | "Concert_One" | "Condiment" | "Content" | "Contrail_One" | "Convergence" | "Cookie" | "Copse" | "Corben" | "Corinthia" | "Cormorant" | "Cormorant_Garamond" | "Cormorant_Infant" | "Cormorant_SC" | "Cormorant_Unicase" | "Cormorant_Upright" | "Courgette" | "Courier_Prime" | "Cousine" | "Coustard" | "Covered_By_Your_Grace" | "Crafty_Girls" | "Creepster" | "Crete_Round" | "Crimson_Pro" | "Crimson_Text" | "Croissant_One" | "Crushed" | "Cuprum" | "Cute_Font" | "Cutive" | "Cutive_Mono" | "DM_Mono" | "DM_Sans" | "DM_Serif_Display" | "DM_Serif_Text" | "Dai_Banna_SIL" | "Damion" | "Dancing_Script" | "Danfo" | "Dangrek" | "Darker_Grotesque" | "Darumadrop_One" | "David_Libre" | "Dawning_of_a_New_Day" | "Days_One" | "Dekko" | "Dela_Gothic_One" | "Delicious_Handrawn" | "Delius" | "Delius_Swash_Caps" | "Delius_Unicase" | "Della_Respira" | "Denk_One" | "Devonshire" | "Dhurjati" | "Didact_Gothic" | "Diphylleia" | "Diplomata" | "Diplomata_SC" | "Do_Hyeon" | "Dokdo" | "Domine" | "Donegal_One" | "Dongle" | "Doppio_One" | "Dorsa" | "Dosis" | "DotGothic16" | "Doto" | "Dr_Sugiyama" | "Duru_Sans" | "DynaPuff" | "Dynalight" | "EB_Garamond" | "Eagle_Lake" | "East_Sea_Dokdo" | "Eater" | "Economica" | "Eczar" | "Edu_AU_VIC_WA_NT_Arrows" | "Edu_AU_VIC_WA_NT_Dots" | "Edu_AU_VIC_WA_NT_Guides" | "Edu_AU_VIC_WA_NT_Hand" | "Edu_AU_VIC_WA_NT_Pre" | "Edu_NSW_ACT_Foundation" | "Edu_QLD_Beginner" | "Edu_SA_Beginner" | "Edu_TAS_Beginner" | "Edu_VIC_WA_NT_Beginner" | "El_Messiri" | "Electrolize" | "Elsie" | "Elsie_Swash_Caps" | "Emblema_One" | "Emilys_Candy" | "Encode_Sans" | "Encode_Sans_Condensed" | "Encode_Sans_Expanded" | "Encode_Sans_SC" | "Encode_Sans_Semi_Condensed" | "Encode_Sans_Semi_Expanded" | "Engagement" | "Englebert" | "Enriqueta" | "Ephesis" | "Epilogue" | "Erica_One" | "Esteban" | "Estonia" | "Euphoria_Script" | "Ewert" | "Exo" | "Exo_2" | "Expletus_Sans" | "Explora" | "Faculty_Glyphic" | "Fahkwang" | "Familjen_Grotesk" | "Fanwood_Text" | "Farro" | "Farsan" | "Fascinate" | "Fascinate_Inline" | "Faster_One" | "Fasthand" | "Fauna_One" | "Faustina" | "Federant" | "Federo" | "Felipa" | "Fenix" | "Festive" | "Figtree" | "Finger_Paint" | "Finlandica" | "Fira_Code" | "Fira_Mono" | "Fira_Sans" | "Fira_Sans_Condensed" | "Fira_Sans_Extra_Condensed" | "Fjalla_One" | "Fjord_One" | "Flamenco" | "Flavors" | "Fleur_De_Leah" | "Flow_Block" | "Flow_Circular" | "Flow_Rounded" | "Foldit" | "Fondamento" | "Fontdiner_Swanky" | "Forum" | "Fragment_Mono" | "Francois_One" | "Frank_Ruhl_Libre" | "Fraunces" | "Freckle_Face" | "Fredericka_the_Great" | "Fredoka" | "Freehand" | "Freeman" | "Fresca" | "Frijole" | "Fruktur" | "Fugaz_One" | "Fuggles" | "Funnel_Display" | "Funnel_Sans" | "Fustat" | "Fuzzy_Bubbles" | "GFS_Didot" | "GFS_Neohellenic" | "Ga_Maamli" | "Gabarito" | "Gabriela" | "Gaegu" | "Gafata" | "Gajraj_One" | "Galada" | "Galdeano" | "Galindo" | "Gamja_Flower" | "Gantari" | "Gasoek_One" | "Gayathri" | "Geist" | "Geist_Mono" | "Gelasio" | "Gemunu_Libre" | "Genos" | "Gentium_Book_Plus" | "Gentium_Plus" | "Geo" | "Geologica" | "Georama" | "Geostar" | "Geostar_Fill" | "Germania_One" | "Gideon_Roman" | "Gidugu" | "Gilda_Display" | "Girassol" | "Give_You_Glory" | "Glass_Antiqua" | "Glegoo" | "Gloock" | "Gloria_Hallelujah" | "Glory" | "Gluten" | "Goblin_One" | "Gochi_Hand" | "Goldman" | "Golos_Text" | "Gorditas" | "Gothic_A1" | "Gotu" | "Goudy_Bookletter_1911" | "Gowun_Batang" | "Gowun_Dodum" | "Graduate" | "Grand_Hotel" | "Grandiflora_One" | "Grandstander" | "Grape_Nuts" | "Gravitas_One" | "Great_Vibes" | "Grechen_Fuemen" | "Grenze" | "Grenze_Gotisch" | "Grey_Qo" | "Griffy" | "Gruppo" | "Gudea" | "Gugi" | "Gulzar" | "Gupter" | "Gurajada" | "Gwendolyn" | "Habibi" | "Hachi_Maru_Pop" | "Hahmlet" | "Halant" | "Hammersmith_One" | "Hanalei" | "Hanalei_Fill" | "Handjet" | "Handlee" | "Hanken_Grotesk" | "Hanuman" | "Happy_Monkey" | "Harmattan" | "Headland_One" | "Hedvig_Letters_Sans" | "Hedvig_Letters_Serif" | "Heebo" | "Henny_Penny" | "Hepta_Slab" | "Herr_Von_Muellerhoff" | "Hi_Melody" | "Hina_Mincho" | "Hind" | "Hind_Guntur" | "Hind_Madurai" | "Hind_Siliguri" | "Hind_Vadodara" | "Holtwood_One_SC" | "Homemade_Apple" | "Homenaje" | "Honk" | "Host_Grotesk" | "Hubballi" | "Hubot_Sans" | "Hurricane" | "IBM_Plex_Mono" | "IBM_Plex_Sans" | "IBM_Plex_Sans_Arabic" | "IBM_Plex_Sans_Condensed" | "IBM_Plex_Sans_Devanagari" | "IBM_Plex_Sans_Hebrew" | "IBM_Plex_Sans_JP" | "IBM_Plex_Sans_KR" | "IBM_Plex_Sans_Thai" | "IBM_Plex_Sans_Thai_Looped" | "IBM_Plex_Serif" | "IM_Fell_DW_Pica" | "IM_Fell_DW_Pica_SC" | "IM_Fell_Double_Pica" | "IM_Fell_Double_Pica_SC" | "IM_Fell_English" | "IM_Fell_English_SC" | "IM_Fell_French_Canon" | "IM_Fell_French_Canon_SC" | "IM_Fell_Great_Primer" | "IM_Fell_Great_Primer_SC" | "Ibarra_Real_Nova" | "Iceberg" | "Iceland" | "Imbue" | "Imperial_Script" | "Imprima" | "Inclusive_Sans" | "Inconsolata" | "Inder" | "Indie_Flower" | "Ingrid_Darling" | "Inika" | "Inknut_Antiqua" | "Inria_Sans" | "Inria_Serif" | "Inspiration" | "Instrument_Sans" | "Instrument_Serif" | "Inter" | "Inter_Tight" | "Irish_Grover" | "Island_Moments" | "Istok_Web" | "Italiana" | "Italianno" | "Itim" | "Jacquard_12" | "Jacquard_12_Charted" | "Jacquard_24" | "Jacquard_24_Charted" | "Jacquarda_Bastarda_9" | "Jacquarda_Bastarda_9_Charted" | "Jacques_Francois" | "Jacques_Francois_Shadow" | "Jaini" | "Jaini_Purva" | "Jaldi" | "Jaro" | "Jersey_10" | "Jersey_10_Charted" | "Jersey_15" | "Jersey_15_Charted" | "Jersey_20" | "Jersey_20_Charted" | "Jersey_25" | "Jersey_25_Charted" | "JetBrains_Mono" | "Jim_Nightshade" | "Joan" | "Jockey_One" | "Jolly_Lodger" | "Jomhuria" | "Jomolhari" | "Josefin_Sans" | "Josefin_Slab" | "Jost" | "Joti_One" | "Jua" | "Judson" | "Julee" | "Julius_Sans_One" | "Junge" | "Jura" | "Just_Another_Hand" | "Just_Me_Again_Down_Here" | "K2D" | "Kablammo" | "Kadwa" | "Kaisei_Decol" | "Kaisei_HarunoUmi" | "Kaisei_Opti" | "Kaisei_Tokumin" | "Kalam" | "Kalnia" | "Kalnia_Glaze" | "Kameron" | "Kanit" | "Kantumruy_Pro" | "Karantina" | "Karla" | "Karla_Tamil_Inclined" | "Karla_Tamil_Upright" | "Karma" | "Katibeh" | "Kaushan_Script" | "Kavivanar" | "Kavoon" | "Kay_Pho_Du" | "Kdam_Thmor_Pro" | "Keania_One" | "Kelly_Slab" | "Kenia" | "Khand" | "Khmer" | "Khula" | "Kings" | "Kirang_Haerang" | "Kite_One" | "Kiwi_Maru" | "Klee_One" | "Knewave" | "KoHo" | "Kodchasan" | "Kode_Mono" | "Koh_Santepheap" | "Kolker_Brush" | "Konkhmer_Sleokchher" | "Kosugi" | "Kosugi_Maru" | "Kotta_One" | "Koulen" | "Kranky" | "Kreon" | "Kristi" | "Krona_One" | "Krub" | "Kufam" | "Kulim_Park" | "Kumar_One" | "Kumar_One_Outline" | "Kumbh_Sans" | "Kurale" | "LXGW_WenKai_Mono_TC" | "LXGW_WenKai_TC" | "La_Belle_Aurore" | "Labrada" | "Lacquer" | "Laila" | "Lakki_Reddy" | "Lalezar" | "Lancelot" | "Langar" | "Lateef" | "Lato" | "Lavishly_Yours" | "League_Gothic" | "League_Script" | "League_Spartan" | "Leckerli_One" | "Ledger" | "Lekton" | "Lemon" | "Lemonada" | "Lexend" | "Lexend_Deca" | "Lexend_Exa" | "Lexend_Giga" | "Lexend_Mega" | "Lexend_Peta" | "Lexend_Tera" | "Lexend_Zetta" | "Libre_Barcode_128" | "Libre_Barcode_128_Text" | "Libre_Barcode_39" | "Libre_Barcode_39_Extended" | "Libre_Barcode_39_Extended_Text" | "Libre_Barcode_39_Text" | "Libre_Barcode_EAN13_Text" | "Libre_Baskerville" | "Libre_Bodoni" | "Libre_Caslon_Display" | "Libre_Caslon_Text" | "Libre_Franklin" | "Licorice" | "Life_Savers" | "Lilita_One" | "Lily_Script_One" | "Limelight" | "Linden_Hill" | "Linefont" | "Lisu_Bosa" | "Literata" | "Liu_Jian_Mao_Cao" | "Livvic" | "Lobster" | "Lobster_Two" | "Londrina_Outline" | "Londrina_Shadow" | "Londrina_Sketch" | "Londrina_Solid" | "Long_Cang" | "Lora" | "Love_Light" | "Love_Ya_Like_A_Sister" | "Loved_by_the_King" | "Lovers_Quarrel" | "Luckiest_Guy" | "Lugrasimo" | "Lumanosimo" | "Lunasima" | "Lusitana" | "Lustria" | "Luxurious_Roman" | "Luxurious_Script" | "M_PLUS_1" | "M_PLUS_1_Code" | "M_PLUS_1p" | "M_PLUS_2" | "M_PLUS_Code_Latin" | "M_PLUS_Rounded_1c" | "Ma_Shan_Zheng" | "Macondo" | "Macondo_Swash_Caps" | "Mada" | "Madimi_One" | "Magra" | "Maiden_Orange" | "Maitree" | "Major_Mono_Display" | "Mako" | "Mali" | "Mallanna" | "Maname" | "Mandali" | "Manjari" | "Manrope" | "Mansalva" | "Manuale" | "Marcellus" | "Marcellus_SC" | "Marck_Script" | "Margarine" | "Marhey" | "Markazi_Text" | "Marko_One" | "Marmelad" | "Martel" | "Martel_Sans" | "Martian_Mono" | "Marvel" | "Mate" | "Mate_SC" | "Matemasie" | "Maven_Pro" | "McLaren" | "Mea_Culpa" | "Meddon" | "MedievalSharp" | "Medula_One" | "Meera_Inimai" | "Megrim" | "Meie_Script" | "Meow_Script" | "Merienda" | "Merriweather" | "Merriweather_Sans" | "Metal" | "Metal_Mania" | "Metamorphous" | "Metrophobic" | "Michroma" | "Micro_5" | "Micro_5_Charted" | "Milonga" | "Miltonian" | "Miltonian_Tattoo" | "Mina" | "Mingzat" | "Miniver" | "Miriam_Libre" | "Mirza" | "Miss_Fajardose" | "Mitr" | "Mochiy_Pop_One" | "Mochiy_Pop_P_One" | "Modak" | "Modern_Antiqua" | "Moderustic" | "Mogra" | "Mohave" | "Moirai_One" | "Molengo" | "Molle" | "Mona_Sans" | "Monda" | "Monofett" | "Monomaniac_One" | "Monoton" | "Monsieur_La_Doulaise" | "Montaga" | "Montagu_Slab" | "MonteCarlo" | "Montez" | "Montserrat" | "Montserrat_Alternates" | "Montserrat_Subrayada" | "Moo_Lah_Lah" | "Mooli" | "Moon_Dance" | "Moul" | "Moulpali" | "Mountains_of_Christmas" | "Mouse_Memoirs" | "Mr_Bedfort" | "Mr_Dafoe" | "Mr_De_Haviland" | "Mrs_Saint_Delafield" | "Mrs_Sheppards" | "Ms_Madi" | "Mukta" | "Mukta_Mahee" | "Mukta_Malar" | "Mukta_Vaani" | "Mulish" | "Murecho" | "MuseoModerno" | "My_Soul" | "Mynerve" | "Mystery_Quest" | "NTR" | "Nabla" | "Namdhinggo" | "Nanum_Brush_Script" | "Nanum_Gothic" | "Nanum_Gothic_Coding" | "Nanum_Myeongjo" | "Nanum_Pen_Script" | "Narnoor" | "Neonderthaw" | "Nerko_One" | "Neucha" | "Neuton" | "New_Amsterdam" | "New_Rocker" | "New_Tegomin" | "News_Cycle" | "Newsreader" | "Niconne" | "Niramit" | "Nixie_One" | "Nobile" | "Nokora" | "Norican" | "Nosifer" | "Notable" | "Nothing_You_Could_Do" | "Noticia_Text" | "Noto_Color_Emoji" | "Noto_Emoji" | "Noto_Kufi_Arabic" | "Noto_Music" | "Noto_Naskh_Arabic" | "Noto_Nastaliq_Urdu" | "Noto_Rashi_Hebrew" | "Noto_Sans" | "Noto_Sans_Adlam" | "Noto_Sans_Adlam_Unjoined" | "Noto_Sans_Anatolian_Hieroglyphs" | "Noto_Sans_Arabic" | "Noto_Sans_Armenian" | "Noto_Sans_Avestan" | "Noto_Sans_Balinese" | "Noto_Sans_Bamum" | "Noto_Sans_Bassa_Vah" | "Noto_Sans_Batak" | "Noto_Sans_Bengali" | "Noto_Sans_Bhaiksuki" | "Noto_Sans_Brahmi" | "Noto_Sans_Buginese" | "Noto_Sans_Buhid" | "Noto_Sans_Canadian_Aboriginal" | "Noto_Sans_Carian" | "Noto_Sans_Caucasian_Albanian" | "Noto_Sans_Chakma" | "Noto_Sans_Cham" | "Noto_Sans_Cherokee" | "Noto_Sans_Chorasmian" | "Noto_Sans_Coptic" | "Noto_Sans_Cuneiform" | "Noto_Sans_Cypriot" | "Noto_Sans_Cypro_Minoan" | "Noto_Sans_Deseret" | "Noto_Sans_Devanagari" | "Noto_Sans_Display" | "Noto_Sans_Duployan" | "Noto_Sans_Egyptian_Hieroglyphs" | "Noto_Sans_Elbasan" | "Noto_Sans_Elymaic" | "Noto_Sans_Ethiopic" | "Noto_Sans_Georgian" | "Noto_Sans_Glagolitic" | "Noto_Sans_Gothic" | "Noto_Sans_Grantha" | "Noto_Sans_Gujarati" | "Noto_Sans_Gunjala_Gondi" | "Noto_Sans_Gurmukhi" | "Noto_Sans_HK" | "Noto_Sans_Hanifi_Rohingya" | "Noto_Sans_Hanunoo" | "Noto_Sans_Hatran" | "Noto_Sans_Hebrew" | "Noto_Sans_Imperial_Aramaic" | "Noto_Sans_Indic_Siyaq_Numbers" | "Noto_Sans_Inscriptional_Pahlavi" | "Noto_Sans_Inscriptional_Parthian" | "Noto_Sans_JP" | "Noto_Sans_Javanese" | "Noto_Sans_KR" | "Noto_Sans_Kaithi" | "Noto_Sans_Kannada" | "Noto_Sans_Kawi" | "Noto_Sans_Kayah_Li" | "Noto_Sans_Kharoshthi" | "Noto_Sans_Khmer" | "Noto_Sans_Khojki" | "Noto_Sans_Khudawadi" | "Noto_Sans_Lao" | "Noto_Sans_Lao_Looped" | "Noto_Sans_Lepcha" | "Noto_Sans_Limbu" | "Noto_Sans_Linear_A" | "Noto_Sans_Linear_B" | "Noto_Sans_Lisu" | "Noto_Sans_Lycian" | "Noto_Sans_Lydian" | "Noto_Sans_Mahajani" | "Noto_Sans_Malayalam" | "Noto_Sans_Mandaic" | "Noto_Sans_Manichaean" | "Noto_Sans_Marchen" | "Noto_Sans_Masaram_Gondi" | "Noto_Sans_Math" | "Noto_Sans_Mayan_Numerals" | "Noto_Sans_Medefaidrin" | "Noto_Sans_Meetei_Mayek" | "Noto_Sans_Mende_Kikakui" | "Noto_Sans_Meroitic" | "Noto_Sans_Miao" | "Noto_Sans_Modi" | "Noto_Sans_Mongolian" | "Noto_Sans_Mono" | "Noto_Sans_Mro" | "Noto_Sans_Multani" | "Noto_Sans_Myanmar" | "Noto_Sans_NKo" | "Noto_Sans_NKo_Unjoined" | "Noto_Sans_Nabataean" | "Noto_Sans_Nag_Mundari" | "Noto_Sans_Nandinagari" | "Noto_Sans_New_Tai_Lue" | "Noto_Sans_Newa" | "Noto_Sans_Nushu" | "Noto_Sans_Ogham" | "Noto_Sans_Ol_Chiki" | "Noto_Sans_Old_Hungarian" | "Noto_Sans_Old_Italic" | "Noto_Sans_Old_North_Arabian" | "Noto_Sans_Old_Permic" | "Noto_Sans_Old_Persian" | "Noto_Sans_Old_Sogdian" | "Noto_Sans_Old_South_Arabian" | "Noto_Sans_Old_Turkic" | "Noto_Sans_Oriya" | "Noto_Sans_Osage" | "Noto_Sans_Osmanya" | "Noto_Sans_Pahawh_Hmong" | "Noto_Sans_Palmyrene" | "Noto_Sans_Pau_Cin_Hau" | "Noto_Sans_Phags_Pa" | "Noto_Sans_Phoenician" | "Noto_Sans_Psalter_Pahlavi" | "Noto_Sans_Rejang" | "Noto_Sans_Runic" | "Noto_Sans_SC" | "Noto_Sans_Samaritan" | "Noto_Sans_Saurashtra" | "Noto_Sans_Sharada" | "Noto_Sans_Shavian" | "Noto_Sans_Siddham" | "Noto_Sans_SignWriting" | "Noto_Sans_Sinhala" | "Noto_Sans_Sogdian" | "Noto_Sans_Sora_Sompeng" | "Noto_Sans_Soyombo" | "Noto_Sans_Sundanese" | "Noto_Sans_Syloti_Nagri" | "Noto_Sans_Symbols" | "Noto_Sans_Symbols_2" | "Noto_Sans_Syriac" | "Noto_Sans_Syriac_Eastern" | "Noto_Sans_TC" | "Noto_Sans_Tagalog" | "Noto_Sans_Tagbanwa" | "Noto_Sans_Tai_Le" | "Noto_Sans_Tai_Tham" | "Noto_Sans_Tai_Viet" | "Noto_Sans_Takri" | "Noto_Sans_Tamil" | "Noto_Sans_Tamil_Supplement" | "Noto_Sans_Tangsa" | "Noto_Sans_Telugu" | "Noto_Sans_Thaana" | "Noto_Sans_Thai" | "Noto_Sans_Thai_Looped" | "Noto_Sans_Tifinagh" | "Noto_Sans_Tirhuta" | "Noto_Sans_Ugaritic" | "Noto_Sans_Vai" | "Noto_Sans_Vithkuqi" | "Noto_Sans_Wancho" | "Noto_Sans_Warang_Citi" | "Noto_Sans_Yi" | "Noto_Sans_Zanabazar_Square" | "Noto_Serif" | "Noto_Serif_Ahom" | "Noto_Serif_Armenian" | "Noto_Serif_Balinese" | "Noto_Serif_Bengali" | "Noto_Serif_Devanagari" | "Noto_Serif_Display" | "Noto_Serif_Dogra" | "Noto_Serif_Ethiopic" | "Noto_Serif_Georgian" | "Noto_Serif_Grantha" | "Noto_Serif_Gujarati" | "Noto_Serif_Gurmukhi" | "Noto_Serif_HK" | "Noto_Serif_Hebrew" | "Noto_Serif_JP" | "Noto_Serif_KR" | "Noto_Serif_Kannada" | "Noto_Serif_Khitan_Small_Script" | "Noto_Serif_Khmer" | "Noto_Serif_Khojki" | "Noto_Serif_Lao" | "Noto_Serif_Makasar" | "Noto_Serif_Malayalam" | "Noto_Serif_Myanmar" | "Noto_Serif_NP_Hmong" | "Noto_Serif_Old_Uyghur" | "Noto_Serif_Oriya" | "Noto_Serif_Ottoman_Siyaq" | "Noto_Serif_SC" | "Noto_Serif_Sinhala" | "Noto_Serif_TC" | "Noto_Serif_Tamil" | "Noto_Serif_Tangut" | "Noto_Serif_Telugu" | "Noto_Serif_Thai" | "Noto_Serif_Tibetan" | "Noto_Serif_Toto" | "Noto_Serif_Vithkuqi" | "Noto_Serif_Yezidi" | "Noto_Traditional_Nushu" | "Noto_Znamenny_Musical_Notation" | "Nova_Cut" | "Nova_Flat" | "Nova_Mono" | "Nova_Oval" | "Nova_Round" | "Nova_Script" | "Nova_Slim" | "Nova_Square" | "Numans" | "Nunito" | "Nunito_Sans" | "Nuosu_SIL" | "Odibee_Sans" | "Odor_Mean_Chey" | "Offside" | "Oi" | "Ojuju" | "Old_Standard_TT" | "Oldenburg" | "Ole" | "Oleo_Script" | "Oleo_Script_Swash_Caps" | "Onest" | "Oooh_Baby" | "Open_Sans" | "Oranienbaum" | "Orbit" | "Orbitron" | "Oregano" | "Orelega_One" | "Orienta" | "Original_Surfer" | "Oswald" | "Outfit" | "Over_the_Rainbow" | "Overlock" | "Overlock_SC" | "Overpass" | "Overpass_Mono" | "Ovo" | "Oxanium" | "Oxygen" | "Oxygen_Mono" | "PT_Mono" | "PT_Sans" | "PT_Sans_Caption" | "PT_Sans_Narrow" | "PT_Serif" | "PT_Serif_Caption" | "Pacifico" | "Padauk" | "Padyakke_Expanded_One" | "Palanquin" | "Palanquin_Dark" | "Palette_Mosaic" | "Pangolin" | "Paprika" | "Parisienne" | "Parkinsans" | "Passero_One" | "Passion_One" | "Passions_Conflict" | "Pathway_Extreme" | "Pathway_Gothic_One" | "Patrick_Hand" | "Patrick_Hand_SC" | "Pattaya" | "Patua_One" | "Pavanam" | "Paytone_One" | "Peddana" | "Peralta" | "Permanent_Marker" | "Petemoss" | "Petit_Formal_Script" | "Petrona" | "Phetsarath" | "Philosopher" | "Phudu" | "Piazzolla" | "Piedra" | "Pinyon_Script" | "Pirata_One" | "Pixelify_Sans" | "Plaster" | "Platypi" | "Play" | "Playball" | "Playfair" | "Playfair_Display" | "Playfair_Display_SC" | "Playpen_Sans" | "Playwrite_AR" | "Playwrite_AT" | "Playwrite_AU_NSW" | "Playwrite_AU_QLD" | "Playwrite_AU_SA" | "Playwrite_AU_TAS" | "Playwrite_AU_VIC" | "Playwrite_BE_VLG" | "Playwrite_BE_WAL" | "Playwrite_BR" | "Playwrite_CA" | "Playwrite_CL" | "Playwrite_CO" | "Playwrite_CU" | "Playwrite_CZ" | "Playwrite_DE_Grund" | "Playwrite_DE_LA" | "Playwrite_DE_SAS" | "Playwrite_DE_VA" | "Playwrite_DK_Loopet" | "Playwrite_DK_Uloopet" | "Playwrite_ES" | "Playwrite_ES_Deco" | "Playwrite_FR_Moderne" | "Playwrite_FR_Trad" | "Playwrite_GB_J" | "Playwrite_GB_S" | "Playwrite_HR" | "Playwrite_HR_Lijeva" | "Playwrite_HU" | "Playwrite_ID" | "Playwrite_IE" | "Playwrite_IN" | "Playwrite_IS" | "Playwrite_IT_Moderna" | "Playwrite_IT_Trad" | "Playwrite_MX" | "Playwrite_NG_Modern" | "Playwrite_NL" | "Playwrite_NO" | "Playwrite_NZ" | "Playwrite_PE" | "Playwrite_PL" | "Playwrite_PT" | "Playwrite_RO" | "Playwrite_SK" | "Playwrite_TZ" | "Playwrite_US_Modern" | "Playwrite_US_Trad" | "Playwrite_VN" | "Playwrite_ZA" | "Plus_Jakarta_Sans" | "Podkova" | "Poetsen_One" | "Poiret_One" | "Poller_One" | "Poltawski_Nowy" | "Poly" | "Pompiere" | "Ponnala" | "Pontano_Sans" | "Poor_Story" | "Poppins" | "Port_Lligat_Sans" | "Port_Lligat_Slab" | "Potta_One" | "Pragati_Narrow" | "Praise" | "Prata" | "Preahvihear" | "Press_Start_2P" | "Pridi" | "Princess_Sofia" | "Prociono" | "Prompt" | "Prosto_One" | "Protest_Guerrilla" | "Protest_Revolution" | "Protest_Riot" | "Protest_Strike" | "Proza_Libre" | "Public_Sans" | "Puppies_Play" | "Puritan" | "Purple_Purse" | "Qahiri" | "Quando" | "Quantico" | "Quattrocento" | "Quattrocento_Sans" | "Questrial" | "Quicksand" | "Quintessential" | "Qwigley" | "Qwitcher_Grypen" | "REM" | "Racing_Sans_One" | "Radio_Canada" | "Radio_Canada_Big" | "Radley" | "Rajdhani" | "Rakkas" | "Raleway" | "Raleway_Dots" | "Ramabhadra" | "Ramaraja" | "Rambla" | "Rammetto_One" | "Rampart_One" | "Ranchers" | "Rancho" | "Ranga" | "Rasa" | "Rationale" | "Ravi_Prakash" | "Readex_Pro" | "Recursive" | "Red_Hat_Display" | "Red_Hat_Mono" | "Red_Hat_Text" | "Red_Rose" | "Redacted" | "Redacted_Script" | "Reddit_Mono" | "Reddit_Sans" | "Reddit_Sans_Condensed" | "Redressed" | "Reem_Kufi" | "Reem_Kufi_Fun" | "Reem_Kufi_Ink" | "Reenie_Beanie" | "Reggae_One" | "Rethink_Sans" | "Revalia" | "Rhodium_Libre" | "Ribeye" | "Ribeye_Marrow" | "Righteous" | "Risque" | "Road_Rage" | "Roboto" | "Roboto_Condensed" | "Roboto_Flex" | "Roboto_Mono" | "Roboto_Serif" | "Roboto_Slab" | "Rochester" | "Rock_3D" | "Rock_Salt" | "RocknRoll_One" | "Rokkitt" | "Romanesco" | "Ropa_Sans" | "Rosario" | "Rosarivo" | "Rouge_Script" | "Rowdies" | "Rozha_One" | "Rubik" | "Rubik_80s_Fade" | "Rubik_Beastly" | "Rubik_Broken_Fax" | "Rubik_Bubbles" | "Rubik_Burned" | "Rubik_Dirt" | "Rubik_Distressed" | "Rubik_Doodle_Shadow" | "Rubik_Doodle_Triangles" | "Rubik_Gemstones" | "Rubik_Glitch" | "Rubik_Glitch_Pop" | "Rubik_Iso" | "Rubik_Lines" | "Rubik_Maps" | "Rubik_Marker_Hatch" | "Rubik_Maze" | "Rubik_Microbe" | "Rubik_Mono_One" | "Rubik_Moonrocks" | "Rubik_Pixels" | "Rubik_Puddles" | "Rubik_Scribble" | "Rubik_Spray_Paint" | "Rubik_Storm" | "Rubik_Vinyl" | "Rubik_Wet_Paint" | "Ruda" | "Rufina" | "Ruge_Boogie" | "Ruluko" | "Rum_Raisin" | "Ruslan_Display" | "Russo_One" | "Ruthie" | "Ruwudu" | "Rye" | "STIX_Two_Text" | "SUSE" | "Sacramento" | "Sahitya" | "Sail" | "Saira" | "Saira_Condensed" | "Saira_Extra_Condensed" | "Saira_Semi_Condensed" | "Saira_Stencil_One" | "Salsa" | "Sanchez" | "Sancreek" | "Sankofa_Display" | "Sansita" | "Sansita_Swashed" | "Sarabun" | "Sarala" | "Sarina" | "Sarpanch" | "Sassy_Frass" | "Satisfy" | "Sawarabi_Gothic" | "Sawarabi_Mincho" | "Scada" | "Scheherazade_New" | "Schibsted_Grotesk" | "Schoolbell" | "Scope_One" | "Seaweed_Script" | "Secular_One" | "Sedan" | "Sedan_SC" | "Sedgwick_Ave" | "Sedgwick_Ave_Display" | "Sen" | "Send_Flowers" | "Sevillana" | "Seymour_One" | "Shadows_Into_Light" | "Shadows_Into_Light_Two" | "Shalimar" | "Shantell_Sans" | "Shanti" | "Share" | "Share_Tech" | "Share_Tech_Mono" | "Shippori_Antique" | "Shippori_Antique_B1" | "Shippori_Mincho" | "Shippori_Mincho_B1" | "Shizuru" | "Shojumaru" | "Short_Stack" | "Shrikhand" | "Siemreap" | "Sigmar" | "Sigmar_One" | "Signika" | "Signika_Negative" | "Silkscreen" | "Simonetta" | "Single_Day" | "Sintony" | "Sirin_Stencil" | "Six_Caps" | "Sixtyfour" | "Sixtyfour_Convergence" | "Skranji" | "Slabo_13px" | "Slabo_27px" | "Slackey" | "Slackside_One" | "Smokum" | "Smooch" | "Smooch_Sans" | "Smythe" | "Sniglet" | "Snippet" | "Snowburst_One" | "Sofadi_One" | "Sofia" | "Sofia_Sans" | "Sofia_Sans_Condensed" | "Sofia_Sans_Extra_Condensed" | "Sofia_Sans_Semi_Condensed" | "Solitreo" | "Solway" | "Sometype_Mono" | "Song_Myung" | "Sono" | "Sonsie_One" | "Sora" | "Sorts_Mill_Goudy" | "Sour_Gummy" | "Source_Code_Pro" | "Source_Sans_3" | "Source_Serif_4" | "Space_Grotesk" | "Space_Mono" | "Special_Elite" | "Spectral" | "Spectral_SC" | "Spicy_Rice" | "Spinnaker" | "Spirax" | "Splash" | "Spline_Sans" | "Spline_Sans_Mono" | "Squada_One" | "Square_Peg" | "Sree_Krushnadevaraya" | "Sriracha" | "Srisakdi" | "Staatliches" | "Stalemate" | "Stalinist_One" | "Stardos_Stencil" | "Stick" | "Stick_No_Bills" | "Stint_Ultra_Condensed" | "Stint_Ultra_Expanded" | "Stoke" | "Strait" | "Style_Script" | "Stylish" | "Sue_Ellen_Francisco" | "Suez_One" | "Sulphur_Point" | "Sumana" | "Sunflower" | "Sunshiney" | "Supermercado_One" | "Sura" | "Suranna" | "Suravaram" | "Suwannaphum" | "Swanky_and_Moo_Moo" | "Syncopate" | "Syne" | "Syne_Mono" | "Syne_Tactile" | "Tac_One" | "Tai_Heritage_Pro" | "Tajawal" | "Tangerine" | "Tapestry" | "Taprom" | "Tauri" | "Taviraj" | "Teachers" | "Teko" | "Tektur" | "Telex" | "Tenali_Ramakrishna" | "Tenor_Sans" | "Text_Me_One" | "Texturina" | "Thasadith" | "The_Girl_Next_Door" | "The_Nautigal" | "Tienne" | "Tillana" | "Tilt_Neon" | "Tilt_Prism" | "Tilt_Warp" | "Timmana" | "Tinos" | "Tiny5" | "Tiro_Bangla" | "Tiro_Devanagari_Hindi" | "Tiro_Devanagari_Marathi" | "Tiro_Devanagari_Sanskrit" | "Tiro_Gurmukhi" | "Tiro_Kannada" | "Tiro_Tamil" | "Tiro_Telugu" | "Titan_One" | "Titillium_Web" | "Tomorrow" | "Tourney" | "Trade_Winds" | "Train_One" | "Trirong" | "Trispace" | "Trocchi" | "Trochut" | "Truculenta" | "Trykker" | "Tsukimi_Rounded" | "Tulpen_One" | "Turret_Road" | "Twinkle_Star" | "Ubuntu" | "Ubuntu_Condensed" | "Ubuntu_Mono" | "Ubuntu_Sans" | "Ubuntu_Sans_Mono" | "Uchen" | "Ultra" | "Unbounded" | "Uncial_Antiqua" | "Underdog" | "Unica_One" | "UnifrakturCook" | "UnifrakturMaguntia" | "Unkempt" | "Unlock" | "Unna" | "Updock" | "Urbanist" | "VT323" | "Vampiro_One" | "Varela" | "Varela_Round" | "Varta" | "Vast_Shadow" | "Vazirmatn" | "Vesper_Libre" | "Viaoda_Libre" | "Vibes" | "Vibur" | "Victor_Mono" | "Vidaloka" | "Viga" | "Vina_Sans" | "Voces" | "Volkhov" | "Vollkorn" | "Vollkorn_SC" | "Voltaire" | "Vujahday_Script" | "Waiting_for_the_Sunrise" | "Wallpoet" | "Walter_Turncoat" | "Warnes" | "Water_Brush" | "Waterfall" | "Wavefont" | "Wellfleet" | "Wendy_One" | "Whisper" | "WindSong" | "Wire_One" | "Wittgenstein" | "Wix_Madefor_Display" | "Wix_Madefor_Text" | "Work_Sans" | "Workbench" | "Xanh_Mono" | "Yaldevi" | "Yanone_Kaffeesatz" | "Yantramanav" | "Yarndings_12" | "Yarndings_12_Charted" | "Yarndings_20" | "Yarndings_20_Charted" | "Yatra_One" | "Yellowtail" | "Yeon_Sung" | "Yeseva_One" | "Yesteryear" | "Yomogi" | "Young_Serif" | "Yrsa" | "Ysabeau" | "Ysabeau_Infant" | "Ysabeau_Office" | "Ysabeau_SC" | "Yuji_Boku" | "Yuji_Hentaigana_Akari" | "Yuji_Hentaigana_Akebono" | "Yuji_Mai" | "Yuji_Syuku" | "Yusei_Magic" | "ZCOOL_KuaiLe" | "ZCOOL_QingKe_HuangYou" | "ZCOOL_XiaoWei" | "Zain" | "Zen_Antique" | "Zen_Antique_Soft" | "Zen_Dots" | "Zen_Kaku_Gothic_Antique" | "Zen_Kaku_Gothic_New" | "Zen_Kurenaido" | "Zen_Loop" | "Zen_Maru_Gothic" | "Zen_Old_Mincho" | "Zen_Tokyo_Zoo" | "Zeyada" | "Zhi_Mang_Xing" | "Zilla_Slab" | "Zilla_Slab_Highlight"; }; sizes?: { base?: { lineHeight?: string; size?: string; }; empty-screen-title?: { lineHeight?: string; size?: string; }; error-screen-title?: { lineHeight?: string; size?: string; }; headline?: { lineHeight?: string; size?: string; }; sm?: { lineHeight?: string; size?: string; }; xs?: { lineHeight?: string; size?: string; }; }; }; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:140 ### Type declaration #### fontFamily? ```ts optional fontFamily: | { system: string; } | { google?: | "ABeeZee" | "ADLaM_Display" | "AR_One_Sans" | "Abel" | "Abhaya_Libre" | "Aboreto" | "Abril_Fatface" | "Abyssinica_SIL" | "Aclonica" | "Acme" | "Actor" | "Adamina" | "Advent_Pro" | "Afacad" | "Afacad_Flux" | "Agbalumo" | "Agdasima" | "Aguafina_Script" | "Akatab" | "Akaya_Kanadaka" | "Akaya_Telivigala" | "Akronim" | "Akshar" | "Aladin" | "Alata" | "Alatsi" | "Albert_Sans" | "Aldrich" | "Alef" | "Alegreya" | "Alegreya_SC" | "Alegreya_Sans" | "Alegreya_Sans_SC" | "Aleo" | "Alex_Brush" | "Alexandria" | "Alfa_Slab_One" | "Alice" | "Alike" | "Alike_Angular" | "Alkalami" | "Alkatra" | "Allan" | "Allerta" | "Allerta_Stencil" | "Allison" | "Allura" | "Almarai" | "Almendra" | "Almendra_Display" | "Almendra_SC" | "Alumni_Sans" | "Alumni_Sans_Collegiate_One" | "Alumni_Sans_Inline_One" | "Alumni_Sans_Pinstripe" | "Amarante" | "Amaranth" | "Amatic_SC" | "Amethysta" | "Amiko" | "Amiri" | "Amiri_Quran" | "Amita" | "Anaheim" | "Andada_Pro" | "Andika" | "Anek_Bangla" | "Anek_Devanagari" | "Anek_Gujarati" | "Anek_Gurmukhi" | "Anek_Kannada" | "Anek_Latin" | "Anek_Malayalam" | "Anek_Odia" | "Anek_Tamil" | "Anek_Telugu" | "Angkor" | "Annapurna_SIL" | "Annie_Use_Your_Telescope" | "Anonymous_Pro" | "Anta" | "Antic" | "Antic_Didone" | "Antic_Slab" | "Anton" | "Anton_SC" | "Antonio" | "Anuphan" | "Anybody" | "Aoboshi_One" | "Arapey" | "Arbutus" | "Arbutus_Slab" | "Architects_Daughter" | "Archivo" | "Archivo_Black" | "Archivo_Narrow" | "Are_You_Serious" | "Aref_Ruqaa" | "Aref_Ruqaa_Ink" | "Arima" | "Arimo" | "Arizonia" | "Armata" | "Arsenal" | "Arsenal_SC" | "Artifika" | "Arvo" | "Arya" | "Asap" | "Asap_Condensed" | "Asar" | "Asset" | "Assistant" | "Astloch" | "Asul" | "Athiti" | "Atkinson_Hyperlegible" | "Atma" | "Atomic_Age" | "Aubrey" | "Audiowide" | "Autour_One" | "Average" | "Average_Sans" | "Averia_Gruesa_Libre" | "Averia_Libre" | "Averia_Sans_Libre" | "Averia_Serif_Libre" | "Azeret_Mono" | "B612" | "B612_Mono" | "BIZ_UDGothic" | "BIZ_UDMincho" | "BIZ_UDPGothic" | "BIZ_UDPMincho" | "Babylonica" | "Bacasime_Antique" | "Bad_Script" | "Bagel_Fat_One" | "Bahiana" | "Bahianita" | "Bai_Jamjuree" | "Bakbak_One" | "Ballet" | "Baloo_2" | "Baloo_Bhai_2" | "Baloo_Bhaijaan_2" | "Baloo_Bhaina_2" | "Baloo_Chettan_2" | "Baloo_Da_2" | "Baloo_Paaji_2" | "Baloo_Tamma_2" | "Baloo_Tammudu_2" | "Baloo_Thambi_2" | "Balsamiq_Sans" | "Balthazar" | "Bangers" | "Barlow" | "Barlow_Condensed" | "Barlow_Semi_Condensed" | "Barriecito" | "Barrio" | "Basic" | "Baskervville" | "Baskervville_SC" | "Battambang" | "Baumans" | "Bayon" | "Be_Vietnam_Pro" | "Beau_Rivage" | "Bebas_Neue" | "Beiruti" | "Belanosima" | "Belgrano" | "Bellefair" | "Belleza" | "Bellota" | "Bellota_Text" | "BenchNine" | "Benne" | "Bentham" | "Berkshire_Swash" | "Besley" | "Beth_Ellen" | "Bevan" | "BhuTuka_Expanded_One" | "Big_Shoulders_Display" | "Big_Shoulders_Inline_Display" | "Big_Shoulders_Inline_Text" | "Big_Shoulders_Stencil_Display" | "Big_Shoulders_Stencil_Text" | "Big_Shoulders_Text" | "Bigelow_Rules" | "Bigshot_One" | "Bilbo" | "Bilbo_Swash_Caps" | "BioRhyme" | "BioRhyme_Expanded" | "Birthstone" | "Birthstone_Bounce" | "Biryani" | "Bitter" | "Black_And_White_Picture" | "Black_Han_Sans" | "Black_Ops_One" | "Blaka" | "Blaka_Hollow" | "Blaka_Ink" | "Blinker" | "Bodoni_Moda" | "Bodoni_Moda_SC" | "Bokor" | "Bona_Nova" | "Bona_Nova_SC" | "Bonbon" | "Bonheur_Royale" | "Boogaloo" | "Borel" | "Bowlby_One" | "Bowlby_One_SC" | "Braah_One" | "Brawler" | "Bree_Serif" | "Bricolage_Grotesque" | "Bruno_Ace" | "Bruno_Ace_SC" | "Brygada_1918" | "Bubblegum_Sans" | "Bubbler_One" | "Buda" | "Buenard" | "Bungee" | "Bungee_Hairline" | "Bungee_Inline" | "Bungee_Outline" | "Bungee_Shade" | "Bungee_Spice" | "Bungee_Tint" | "Butcherman" | "Butterfly_Kids" | "Cabin" | "Cabin_Condensed" | "Cabin_Sketch" | "Cactus_Classical_Serif" | "Caesar_Dressing" | "Cagliostro" | "Cairo" | "Cairo_Play" | "Caladea" | "Calistoga" | "Calligraffitti" | "Cambay" | "Cambo" | "Candal" | "Cantarell" | "Cantata_One" | "Cantora_One" | "Caprasimo" | "Capriola" | "Caramel" | "Carattere" | "Cardo" | "Carlito" | "Carme" | "Carrois_Gothic" | "Carrois_Gothic_SC" | "Carter_One" | "Castoro" | "Castoro_Titling" | "Catamaran" | "Caudex" | "Caveat" | "Caveat_Brush" | "Cedarville_Cursive" | "Ceviche_One" | "Chakra_Petch" | "Changa" | "Changa_One" | "Chango" | "Charis_SIL" | "Charm" | "Charmonman" | "Chathura" | "Chau_Philomene_One" | "Chela_One" | "Chelsea_Market" | "Chenla" | "Cherish" | "Cherry_Bomb_One" | "Cherry_Cream_Soda" | "Cherry_Swash" | "Chewy" | "Chicle" | "Chilanka" | "Chivo" | "Chivo_Mono" | "Chocolate_Classical_Sans" | "Chokokutai" | "Chonburi" | "Cinzel" | "Cinzel_Decorative" | "Clicker_Script" | "Climate_Crisis" | "Coda" | "Codystar" | "Coiny" | "Combo" | "Comfortaa" | "Comforter" | "Comforter_Brush" | "Comic_Neue" | "Coming_Soon" | "Comme" | "Commissioner" | "Concert_One" | "Condiment" | "Content" | "Contrail_One" | "Convergence" | "Cookie" | "Copse" | "Corben" | "Corinthia" | "Cormorant" | "Cormorant_Garamond" | "Cormorant_Infant" | "Cormorant_SC" | "Cormorant_Unicase" | "Cormorant_Upright" | "Courgette" | "Courier_Prime" | "Cousine" | "Coustard" | "Covered_By_Your_Grace" | "Crafty_Girls" | "Creepster" | "Crete_Round" | "Crimson_Pro" | "Crimson_Text" | "Croissant_One" | "Crushed" | "Cuprum" | "Cute_Font" | "Cutive" | "Cutive_Mono" | "DM_Mono" | "DM_Sans" | "DM_Serif_Display" | "DM_Serif_Text" | "Dai_Banna_SIL" | "Damion" | "Dancing_Script" | "Danfo" | "Dangrek" | "Darker_Grotesque" | "Darumadrop_One" | "David_Libre" | "Dawning_of_a_New_Day" | "Days_One" | "Dekko" | "Dela_Gothic_One" | "Delicious_Handrawn" | "Delius" | "Delius_Swash_Caps" | "Delius_Unicase" | "Della_Respira" | "Denk_One" | "Devonshire" | "Dhurjati" | "Didact_Gothic" | "Diphylleia" | "Diplomata" | "Diplomata_SC" | "Do_Hyeon" | "Dokdo" | "Domine" | "Donegal_One" | "Dongle" | "Doppio_One" | "Dorsa" | "Dosis" | "DotGothic16" | "Doto" | "Dr_Sugiyama" | "Duru_Sans" | "DynaPuff" | "Dynalight" | "EB_Garamond" | "Eagle_Lake" | "East_Sea_Dokdo" | "Eater" | "Economica" | "Eczar" | "Edu_AU_VIC_WA_NT_Arrows" | "Edu_AU_VIC_WA_NT_Dots" | "Edu_AU_VIC_WA_NT_Guides" | "Edu_AU_VIC_WA_NT_Hand" | "Edu_AU_VIC_WA_NT_Pre" | "Edu_NSW_ACT_Foundation" | "Edu_QLD_Beginner" | "Edu_SA_Beginner" | "Edu_TAS_Beginner" | "Edu_VIC_WA_NT_Beginner" | "El_Messiri" | "Electrolize" | "Elsie" | "Elsie_Swash_Caps" | "Emblema_One" | "Emilys_Candy" | "Encode_Sans" | "Encode_Sans_Condensed" | "Encode_Sans_Expanded" | "Encode_Sans_SC" | "Encode_Sans_Semi_Condensed" | "Encode_Sans_Semi_Expanded" | "Engagement" | "Englebert" | "Enriqueta" | "Ephesis" | "Epilogue" | "Erica_One" | "Esteban" | "Estonia" | "Euphoria_Script" | "Ewert" | "Exo" | "Exo_2" | "Expletus_Sans" | "Explora" | "Faculty_Glyphic" | "Fahkwang" | "Familjen_Grotesk" | "Fanwood_Text" | "Farro" | "Farsan" | "Fascinate" | "Fascinate_Inline" | "Faster_One" | "Fasthand" | "Fauna_One" | "Faustina" | "Federant" | "Federo" | "Felipa" | "Fenix" | "Festive" | "Figtree" | "Finger_Paint" | "Finlandica" | "Fira_Code" | "Fira_Mono" | "Fira_Sans" | "Fira_Sans_Condensed" | "Fira_Sans_Extra_Condensed" | "Fjalla_One" | "Fjord_One" | "Flamenco" | "Flavors" | "Fleur_De_Leah" | "Flow_Block" | "Flow_Circular" | "Flow_Rounded" | "Foldit" | "Fondamento" | "Fontdiner_Swanky" | "Forum" | "Fragment_Mono" | "Francois_One" | "Frank_Ruhl_Libre" | "Fraunces" | "Freckle_Face" | "Fredericka_the_Great" | "Fredoka" | "Freehand" | "Freeman" | "Fresca" | "Frijole" | "Fruktur" | "Fugaz_One" | "Fuggles" | "Funnel_Display" | "Funnel_Sans" | "Fustat" | "Fuzzy_Bubbles" | "GFS_Didot" | "GFS_Neohellenic" | "Ga_Maamli" | "Gabarito" | "Gabriela" | "Gaegu" | "Gafata" | "Gajraj_One" | "Galada" | "Galdeano" | "Galindo" | "Gamja_Flower" | "Gantari" | "Gasoek_One" | "Gayathri" | "Geist" | "Geist_Mono" | "Gelasio" | "Gemunu_Libre" | "Genos" | "Gentium_Book_Plus" | "Gentium_Plus" | "Geo" | "Geologica" | "Georama" | "Geostar" | "Geostar_Fill" | "Germania_One" | "Gideon_Roman" | "Gidugu" | "Gilda_Display" | "Girassol" | "Give_You_Glory" | "Glass_Antiqua" | "Glegoo" | "Gloock" | "Gloria_Hallelujah" | "Glory" | "Gluten" | "Goblin_One" | "Gochi_Hand" | "Goldman" | "Golos_Text" | "Gorditas" | "Gothic_A1" | "Gotu" | "Goudy_Bookletter_1911" | "Gowun_Batang" | "Gowun_Dodum" | "Graduate" | "Grand_Hotel" | "Grandiflora_One" | "Grandstander" | "Grape_Nuts" | "Gravitas_One" | "Great_Vibes" | "Grechen_Fuemen" | "Grenze" | "Grenze_Gotisch" | "Grey_Qo" | "Griffy" | "Gruppo" | "Gudea" | "Gugi" | "Gulzar" | "Gupter" | "Gurajada" | "Gwendolyn" | "Habibi" | "Hachi_Maru_Pop" | "Hahmlet" | "Halant" | "Hammersmith_One" | "Hanalei" | "Hanalei_Fill" | "Handjet" | "Handlee" | "Hanken_Grotesk" | "Hanuman" | "Happy_Monkey" | "Harmattan" | "Headland_One" | "Hedvig_Letters_Sans" | "Hedvig_Letters_Serif" | "Heebo" | "Henny_Penny" | "Hepta_Slab" | "Herr_Von_Muellerhoff" | "Hi_Melody" | "Hina_Mincho" | "Hind" | "Hind_Guntur" | "Hind_Madurai" | "Hind_Siliguri" | "Hind_Vadodara" | "Holtwood_One_SC" | "Homemade_Apple" | "Homenaje" | "Honk" | "Host_Grotesk" | "Hubballi" | "Hubot_Sans" | "Hurricane" | "IBM_Plex_Mono" | "IBM_Plex_Sans" | "IBM_Plex_Sans_Arabic" | "IBM_Plex_Sans_Condensed" | "IBM_Plex_Sans_Devanagari" | "IBM_Plex_Sans_Hebrew" | "IBM_Plex_Sans_JP" | "IBM_Plex_Sans_KR" | "IBM_Plex_Sans_Thai" | "IBM_Plex_Sans_Thai_Looped" | "IBM_Plex_Serif" | "IM_Fell_DW_Pica" | "IM_Fell_DW_Pica_SC" | "IM_Fell_Double_Pica" | "IM_Fell_Double_Pica_SC" | "IM_Fell_English" | "IM_Fell_English_SC" | "IM_Fell_French_Canon" | "IM_Fell_French_Canon_SC" | "IM_Fell_Great_Primer" | "IM_Fell_Great_Primer_SC" | "Ibarra_Real_Nova" | "Iceberg" | "Iceland" | "Imbue" | "Imperial_Script" | "Imprima" | "Inclusive_Sans" | "Inconsolata" | "Inder" | "Indie_Flower" | "Ingrid_Darling" | "Inika" | "Inknut_Antiqua" | "Inria_Sans" | "Inria_Serif" | "Inspiration" | "Instrument_Sans" | "Instrument_Serif" | "Inter" | "Inter_Tight" | "Irish_Grover" | "Island_Moments" | "Istok_Web" | "Italiana" | "Italianno" | "Itim" | "Jacquard_12" | "Jacquard_12_Charted" | "Jacquard_24" | "Jacquard_24_Charted" | "Jacquarda_Bastarda_9" | "Jacquarda_Bastarda_9_Charted" | "Jacques_Francois" | "Jacques_Francois_Shadow" | "Jaini" | "Jaini_Purva" | "Jaldi" | "Jaro" | "Jersey_10" | "Jersey_10_Charted" | "Jersey_15" | "Jersey_15_Charted" | "Jersey_20" | "Jersey_20_Charted" | "Jersey_25" | "Jersey_25_Charted" | "JetBrains_Mono" | "Jim_Nightshade" | "Joan" | "Jockey_One" | "Jolly_Lodger" | "Jomhuria" | "Jomolhari" | "Josefin_Sans" | "Josefin_Slab" | "Jost" | "Joti_One" | "Jua" | "Judson" | "Julee" | "Julius_Sans_One" | "Junge" | "Jura" | "Just_Another_Hand" | "Just_Me_Again_Down_Here" | "K2D" | "Kablammo" | "Kadwa" | "Kaisei_Decol" | "Kaisei_HarunoUmi" | "Kaisei_Opti" | "Kaisei_Tokumin" | "Kalam" | "Kalnia" | "Kalnia_Glaze" | "Kameron" | "Kanit" | "Kantumruy_Pro" | "Karantina" | "Karla" | "Karla_Tamil_Inclined" | "Karla_Tamil_Upright" | "Karma" | "Katibeh" | "Kaushan_Script" | "Kavivanar" | "Kavoon" | "Kay_Pho_Du" | "Kdam_Thmor_Pro" | "Keania_One" | "Kelly_Slab" | "Kenia" | "Khand" | "Khmer" | "Khula" | "Kings" | "Kirang_Haerang" | "Kite_One" | "Kiwi_Maru" | "Klee_One" | "Knewave" | "KoHo" | "Kodchasan" | "Kode_Mono" | "Koh_Santepheap" | "Kolker_Brush" | "Konkhmer_Sleokchher" | "Kosugi" | "Kosugi_Maru" | "Kotta_One" | "Koulen" | "Kranky" | "Kreon" | "Kristi" | "Krona_One" | "Krub" | "Kufam" | "Kulim_Park" | "Kumar_One" | "Kumar_One_Outline" | "Kumbh_Sans" | "Kurale" | "LXGW_WenKai_Mono_TC" | "LXGW_WenKai_TC" | "La_Belle_Aurore" | "Labrada" | "Lacquer" | "Laila" | "Lakki_Reddy" | "Lalezar" | "Lancelot" | "Langar" | "Lateef" | "Lato" | "Lavishly_Yours" | "League_Gothic" | "League_Script" | "League_Spartan" | "Leckerli_One" | "Ledger" | "Lekton" | "Lemon" | "Lemonada" | "Lexend" | "Lexend_Deca" | "Lexend_Exa" | "Lexend_Giga" | "Lexend_Mega" | "Lexend_Peta" | "Lexend_Tera" | "Lexend_Zetta" | "Libre_Barcode_128" | "Libre_Barcode_128_Text" | "Libre_Barcode_39" | "Libre_Barcode_39_Extended" | "Libre_Barcode_39_Extended_Text" | "Libre_Barcode_39_Text" | "Libre_Barcode_EAN13_Text" | "Libre_Baskerville" | "Libre_Bodoni" | "Libre_Caslon_Display" | "Libre_Caslon_Text" | "Libre_Franklin" | "Licorice" | "Life_Savers" | "Lilita_One" | "Lily_Script_One" | "Limelight" | "Linden_Hill" | "Linefont" | "Lisu_Bosa" | "Literata" | "Liu_Jian_Mao_Cao" | "Livvic" | "Lobster" | "Lobster_Two" | "Londrina_Outline" | "Londrina_Shadow" | "Londrina_Sketch" | "Londrina_Solid" | "Long_Cang" | "Lora" | "Love_Light" | "Love_Ya_Like_A_Sister" | "Loved_by_the_King" | "Lovers_Quarrel" | "Luckiest_Guy" | "Lugrasimo" | "Lumanosimo" | "Lunasima" | "Lusitana" | "Lustria" | "Luxurious_Roman" | "Luxurious_Script" | "M_PLUS_1" | "M_PLUS_1_Code" | "M_PLUS_1p" | "M_PLUS_2" | "M_PLUS_Code_Latin" | "M_PLUS_Rounded_1c" | "Ma_Shan_Zheng" | "Macondo" | "Macondo_Swash_Caps" | "Mada" | "Madimi_One" | "Magra" | "Maiden_Orange" | "Maitree" | "Major_Mono_Display" | "Mako" | "Mali" | "Mallanna" | "Maname" | "Mandali" | "Manjari" | "Manrope" | "Mansalva" | "Manuale" | "Marcellus" | "Marcellus_SC" | "Marck_Script" | "Margarine" | "Marhey" | "Markazi_Text" | "Marko_One" | "Marmelad" | "Martel" | "Martel_Sans" | "Martian_Mono" | "Marvel" | "Mate" | "Mate_SC" | "Matemasie" | "Maven_Pro" | "McLaren" | "Mea_Culpa" | "Meddon" | "MedievalSharp" | "Medula_One" | "Meera_Inimai" | "Megrim" | "Meie_Script" | "Meow_Script" | "Merienda" | "Merriweather" | "Merriweather_Sans" | "Metal" | "Metal_Mania" | "Metamorphous" | "Metrophobic" | "Michroma" | "Micro_5" | "Micro_5_Charted" | "Milonga" | "Miltonian" | "Miltonian_Tattoo" | "Mina" | "Mingzat" | "Miniver" | "Miriam_Libre" | "Mirza" | "Miss_Fajardose" | "Mitr" | "Mochiy_Pop_One" | "Mochiy_Pop_P_One" | "Modak" | "Modern_Antiqua" | "Moderustic" | "Mogra" | "Mohave" | "Moirai_One" | "Molengo" | "Molle" | "Mona_Sans" | "Monda" | "Monofett" | "Monomaniac_One" | "Monoton" | "Monsieur_La_Doulaise" | "Montaga" | "Montagu_Slab" | "MonteCarlo" | "Montez" | "Montserrat" | "Montserrat_Alternates" | "Montserrat_Subrayada" | "Moo_Lah_Lah" | "Mooli" | "Moon_Dance" | "Moul" | "Moulpali" | "Mountains_of_Christmas" | "Mouse_Memoirs" | "Mr_Bedfort" | "Mr_Dafoe" | "Mr_De_Haviland" | "Mrs_Saint_Delafield" | "Mrs_Sheppards" | "Ms_Madi" | "Mukta" | "Mukta_Mahee" | "Mukta_Malar" | "Mukta_Vaani" | "Mulish" | "Murecho" | "MuseoModerno" | "My_Soul" | "Mynerve" | "Mystery_Quest" | "NTR" | "Nabla" | "Namdhinggo" | "Nanum_Brush_Script" | "Nanum_Gothic" | "Nanum_Gothic_Coding" | "Nanum_Myeongjo" | "Nanum_Pen_Script" | "Narnoor" | "Neonderthaw" | "Nerko_One" | "Neucha" | "Neuton" | "New_Amsterdam" | "New_Rocker" | "New_Tegomin" | "News_Cycle" | "Newsreader" | "Niconne" | "Niramit" | "Nixie_One" | "Nobile" | "Nokora" | "Norican" | "Nosifer" | "Notable" | "Nothing_You_Could_Do" | "Noticia_Text" | "Noto_Color_Emoji" | "Noto_Emoji" | "Noto_Kufi_Arabic" | "Noto_Music" | "Noto_Naskh_Arabic" | "Noto_Nastaliq_Urdu" | "Noto_Rashi_Hebrew" | "Noto_Sans" | "Noto_Sans_Adlam" | "Noto_Sans_Adlam_Unjoined" | "Noto_Sans_Anatolian_Hieroglyphs" | "Noto_Sans_Arabic" | "Noto_Sans_Armenian" | "Noto_Sans_Avestan" | "Noto_Sans_Balinese" | "Noto_Sans_Bamum" | "Noto_Sans_Bassa_Vah" | "Noto_Sans_Batak" | "Noto_Sans_Bengali" | "Noto_Sans_Bhaiksuki" | "Noto_Sans_Brahmi" | "Noto_Sans_Buginese" | "Noto_Sans_Buhid" | "Noto_Sans_Canadian_Aboriginal" | "Noto_Sans_Carian" | "Noto_Sans_Caucasian_Albanian" | "Noto_Sans_Chakma" | "Noto_Sans_Cham" | "Noto_Sans_Cherokee" | "Noto_Sans_Chorasmian" | "Noto_Sans_Coptic" | "Noto_Sans_Cuneiform" | "Noto_Sans_Cypriot" | "Noto_Sans_Cypro_Minoan" | "Noto_Sans_Deseret" | "Noto_Sans_Devanagari" | "Noto_Sans_Display" | "Noto_Sans_Duployan" | "Noto_Sans_Egyptian_Hieroglyphs" | "Noto_Sans_Elbasan" | "Noto_Sans_Elymaic" | "Noto_Sans_Ethiopic" | "Noto_Sans_Georgian" | "Noto_Sans_Glagolitic" | "Noto_Sans_Gothic" | "Noto_Sans_Grantha" | "Noto_Sans_Gujarati" | "Noto_Sans_Gunjala_Gondi" | "Noto_Sans_Gurmukhi" | "Noto_Sans_HK" | "Noto_Sans_Hanifi_Rohingya" | "Noto_Sans_Hanunoo" | "Noto_Sans_Hatran" | "Noto_Sans_Hebrew" | "Noto_Sans_Imperial_Aramaic" | "Noto_Sans_Indic_Siyaq_Numbers" | "Noto_Sans_Inscriptional_Pahlavi" | "Noto_Sans_Inscriptional_Parthian" | "Noto_Sans_JP" | "Noto_Sans_Javanese" | "Noto_Sans_KR" | "Noto_Sans_Kaithi" | "Noto_Sans_Kannada" | "Noto_Sans_Kawi" | "Noto_Sans_Kayah_Li" | "Noto_Sans_Kharoshthi" | "Noto_Sans_Khmer" | "Noto_Sans_Khojki" | "Noto_Sans_Khudawadi" | "Noto_Sans_Lao" | "Noto_Sans_Lao_Looped" | "Noto_Sans_Lepcha" | "Noto_Sans_Limbu" | "Noto_Sans_Linear_A" | "Noto_Sans_Linear_B" | "Noto_Sans_Lisu" | "Noto_Sans_Lycian" | "Noto_Sans_Lydian" | "Noto_Sans_Mahajani" | "Noto_Sans_Malayalam" | "Noto_Sans_Mandaic" | "Noto_Sans_Manichaean" | "Noto_Sans_Marchen" | "Noto_Sans_Masaram_Gondi" | "Noto_Sans_Math" | "Noto_Sans_Mayan_Numerals" | "Noto_Sans_Medefaidrin" | "Noto_Sans_Meetei_Mayek" | "Noto_Sans_Mende_Kikakui" | "Noto_Sans_Meroitic" | "Noto_Sans_Miao" | "Noto_Sans_Modi" | "Noto_Sans_Mongolian" | "Noto_Sans_Mono" | "Noto_Sans_Mro" | "Noto_Sans_Multani" | "Noto_Sans_Myanmar" | "Noto_Sans_NKo" | "Noto_Sans_NKo_Unjoined" | "Noto_Sans_Nabataean" | "Noto_Sans_Nag_Mundari" | "Noto_Sans_Nandinagari" | "Noto_Sans_New_Tai_Lue" | "Noto_Sans_Newa" | "Noto_Sans_Nushu" | "Noto_Sans_Ogham" | "Noto_Sans_Ol_Chiki" | "Noto_Sans_Old_Hungarian" | "Noto_Sans_Old_Italic" | "Noto_Sans_Old_North_Arabian" | "Noto_Sans_Old_Permic" | "Noto_Sans_Old_Persian" | "Noto_Sans_Old_Sogdian" | "Noto_Sans_Old_South_Arabian" | "Noto_Sans_Old_Turkic" | "Noto_Sans_Oriya" | "Noto_Sans_Osage" | "Noto_Sans_Osmanya" | "Noto_Sans_Pahawh_Hmong" | "Noto_Sans_Palmyrene" | "Noto_Sans_Pau_Cin_Hau" | "Noto_Sans_Phags_Pa" | "Noto_Sans_Phoenician" | "Noto_Sans_Psalter_Pahlavi" | "Noto_Sans_Rejang" | "Noto_Sans_Runic" | "Noto_Sans_SC" | "Noto_Sans_Samaritan" | "Noto_Sans_Saurashtra" | "Noto_Sans_Sharada" | "Noto_Sans_Shavian" | "Noto_Sans_Siddham" | "Noto_Sans_SignWriting" | "Noto_Sans_Sinhala" | "Noto_Sans_Sogdian" | "Noto_Sans_Sora_Sompeng" | "Noto_Sans_Soyombo" | "Noto_Sans_Sundanese" | "Noto_Sans_Syloti_Nagri" | "Noto_Sans_Symbols" | "Noto_Sans_Symbols_2" | "Noto_Sans_Syriac" | "Noto_Sans_Syriac_Eastern" | "Noto_Sans_TC" | "Noto_Sans_Tagalog" | "Noto_Sans_Tagbanwa" | "Noto_Sans_Tai_Le" | "Noto_Sans_Tai_Tham" | "Noto_Sans_Tai_Viet" | "Noto_Sans_Takri" | "Noto_Sans_Tamil" | "Noto_Sans_Tamil_Supplement" | "Noto_Sans_Tangsa" | "Noto_Sans_Telugu" | "Noto_Sans_Thaana" | "Noto_Sans_Thai" | "Noto_Sans_Thai_Looped" | "Noto_Sans_Tifinagh" | "Noto_Sans_Tirhuta" | "Noto_Sans_Ugaritic" | "Noto_Sans_Vai" | "Noto_Sans_Vithkuqi" | "Noto_Sans_Wancho" | "Noto_Sans_Warang_Citi" | "Noto_Sans_Yi" | "Noto_Sans_Zanabazar_Square" | "Noto_Serif" | "Noto_Serif_Ahom" | "Noto_Serif_Armenian" | "Noto_Serif_Balinese" | "Noto_Serif_Bengali" | "Noto_Serif_Devanagari" | "Noto_Serif_Display" | "Noto_Serif_Dogra" | "Noto_Serif_Ethiopic" | "Noto_Serif_Georgian" | "Noto_Serif_Grantha" | "Noto_Serif_Gujarati" | "Noto_Serif_Gurmukhi" | "Noto_Serif_HK" | "Noto_Serif_Hebrew" | "Noto_Serif_JP" | "Noto_Serif_KR" | "Noto_Serif_Kannada" | "Noto_Serif_Khitan_Small_Script" | "Noto_Serif_Khmer" | "Noto_Serif_Khojki" | "Noto_Serif_Lao" | "Noto_Serif_Makasar" | "Noto_Serif_Malayalam" | "Noto_Serif_Myanmar" | "Noto_Serif_NP_Hmong" | "Noto_Serif_Old_Uyghur" | "Noto_Serif_Oriya" | "Noto_Serif_Ottoman_Siyaq" | "Noto_Serif_SC" | "Noto_Serif_Sinhala" | "Noto_Serif_TC" | "Noto_Serif_Tamil" | "Noto_Serif_Tangut" | "Noto_Serif_Telugu" | "Noto_Serif_Thai" | "Noto_Serif_Tibetan" | "Noto_Serif_Toto" | "Noto_Serif_Vithkuqi" | "Noto_Serif_Yezidi" | "Noto_Traditional_Nushu" | "Noto_Znamenny_Musical_Notation" | "Nova_Cut" | "Nova_Flat" | "Nova_Mono" | "Nova_Oval" | "Nova_Round" | "Nova_Script" | "Nova_Slim" | "Nova_Square" | "Numans" | "Nunito" | "Nunito_Sans" | "Nuosu_SIL" | "Odibee_Sans" | "Odor_Mean_Chey" | "Offside" | "Oi" | "Ojuju" | "Old_Standard_TT" | "Oldenburg" | "Ole" | "Oleo_Script" | "Oleo_Script_Swash_Caps" | "Onest" | "Oooh_Baby" | "Open_Sans" | "Oranienbaum" | "Orbit" | "Orbitron" | "Oregano" | "Orelega_One" | "Orienta" | "Original_Surfer" | "Oswald" | "Outfit" | "Over_the_Rainbow" | "Overlock" | "Overlock_SC" | "Overpass" | "Overpass_Mono" | "Ovo" | "Oxanium" | "Oxygen" | "Oxygen_Mono" | "PT_Mono" | "PT_Sans" | "PT_Sans_Caption" | "PT_Sans_Narrow" | "PT_Serif" | "PT_Serif_Caption" | "Pacifico" | "Padauk" | "Padyakke_Expanded_One" | "Palanquin" | "Palanquin_Dark" | "Palette_Mosaic" | "Pangolin" | "Paprika" | "Parisienne" | "Parkinsans" | "Passero_One" | "Passion_One" | "Passions_Conflict" | "Pathway_Extreme" | "Pathway_Gothic_One" | "Patrick_Hand" | "Patrick_Hand_SC" | "Pattaya" | "Patua_One" | "Pavanam" | "Paytone_One" | "Peddana" | "Peralta" | "Permanent_Marker" | "Petemoss" | "Petit_Formal_Script" | "Petrona" | "Phetsarath" | "Philosopher" | "Phudu" | "Piazzolla" | "Piedra" | "Pinyon_Script" | "Pirata_One" | "Pixelify_Sans" | "Plaster" | "Platypi" | "Play" | "Playball" | "Playfair" | "Playfair_Display" | "Playfair_Display_SC" | "Playpen_Sans" | "Playwrite_AR" | "Playwrite_AT" | "Playwrite_AU_NSW" | "Playwrite_AU_QLD" | "Playwrite_AU_SA" | "Playwrite_AU_TAS" | "Playwrite_AU_VIC" | "Playwrite_BE_VLG" | "Playwrite_BE_WAL" | "Playwrite_BR" | "Playwrite_CA" | "Playwrite_CL" | "Playwrite_CO" | "Playwrite_CU" | "Playwrite_CZ" | "Playwrite_DE_Grund" | "Playwrite_DE_LA" | "Playwrite_DE_SAS" | "Playwrite_DE_VA" | "Playwrite_DK_Loopet" | "Playwrite_DK_Uloopet" | "Playwrite_ES" | "Playwrite_ES_Deco" | "Playwrite_FR_Moderne" | "Playwrite_FR_Trad" | "Playwrite_GB_J" | "Playwrite_GB_S" | "Playwrite_HR" | "Playwrite_HR_Lijeva" | "Playwrite_HU" | "Playwrite_ID" | "Playwrite_IE" | "Playwrite_IN" | "Playwrite_IS" | "Playwrite_IT_Moderna" | "Playwrite_IT_Trad" | "Playwrite_MX" | "Playwrite_NG_Modern" | "Playwrite_NL" | "Playwrite_NO" | "Playwrite_NZ" | "Playwrite_PE" | "Playwrite_PL" | "Playwrite_PT" | "Playwrite_RO" | "Playwrite_SK" | "Playwrite_TZ" | "Playwrite_US_Modern" | "Playwrite_US_Trad" | "Playwrite_VN" | "Playwrite_ZA" | "Plus_Jakarta_Sans" | "Podkova" | "Poetsen_One" | "Poiret_One" | "Poller_One" | "Poltawski_Nowy" | "Poly" | "Pompiere" | "Ponnala" | "Pontano_Sans" | "Poor_Story" | "Poppins" | "Port_Lligat_Sans" | "Port_Lligat_Slab" | "Potta_One" | "Pragati_Narrow" | "Praise" | "Prata" | "Preahvihear" | "Press_Start_2P" | "Pridi" | "Princess_Sofia" | "Prociono" | "Prompt" | "Prosto_One" | "Protest_Guerrilla" | "Protest_Revolution" | "Protest_Riot" | "Protest_Strike" | "Proza_Libre" | "Public_Sans" | "Puppies_Play" | "Puritan" | "Purple_Purse" | "Qahiri" | "Quando" | "Quantico" | "Quattrocento" | "Quattrocento_Sans" | "Questrial" | "Quicksand" | "Quintessential" | "Qwigley" | "Qwitcher_Grypen" | "REM" | "Racing_Sans_One" | "Radio_Canada" | "Radio_Canada_Big" | "Radley" | "Rajdhani" | "Rakkas" | "Raleway" | "Raleway_Dots" | "Ramabhadra" | "Ramaraja" | "Rambla" | "Rammetto_One" | "Rampart_One" | "Ranchers" | "Rancho" | "Ranga" | "Rasa" | "Rationale" | "Ravi_Prakash" | "Readex_Pro" | "Recursive" | "Red_Hat_Display" | "Red_Hat_Mono" | "Red_Hat_Text" | "Red_Rose" | "Redacted" | "Redacted_Script" | "Reddit_Mono" | "Reddit_Sans" | "Reddit_Sans_Condensed" | "Redressed" | "Reem_Kufi" | "Reem_Kufi_Fun" | "Reem_Kufi_Ink" | "Reenie_Beanie" | "Reggae_One" | "Rethink_Sans" | "Revalia" | "Rhodium_Libre" | "Ribeye" | "Ribeye_Marrow" | "Righteous" | "Risque" | "Road_Rage" | "Roboto" | "Roboto_Condensed" | "Roboto_Flex" | "Roboto_Mono" | "Roboto_Serif" | "Roboto_Slab" | "Rochester" | "Rock_3D" | "Rock_Salt" | "RocknRoll_One" | "Rokkitt" | "Romanesco" | "Ropa_Sans" | "Rosario" | "Rosarivo" | "Rouge_Script" | "Rowdies" | "Rozha_One" | "Rubik" | "Rubik_80s_Fade" | "Rubik_Beastly" | "Rubik_Broken_Fax" | "Rubik_Bubbles" | "Rubik_Burned" | "Rubik_Dirt" | "Rubik_Distressed" | "Rubik_Doodle_Shadow" | "Rubik_Doodle_Triangles" | "Rubik_Gemstones" | "Rubik_Glitch" | "Rubik_Glitch_Pop" | "Rubik_Iso" | "Rubik_Lines" | "Rubik_Maps" | "Rubik_Marker_Hatch" | "Rubik_Maze" | "Rubik_Microbe" | "Rubik_Mono_One" | "Rubik_Moonrocks" | "Rubik_Pixels" | "Rubik_Puddles" | "Rubik_Scribble" | "Rubik_Spray_Paint" | "Rubik_Storm" | "Rubik_Vinyl" | "Rubik_Wet_Paint" | "Ruda" | "Rufina" | "Ruge_Boogie" | "Ruluko" | "Rum_Raisin" | "Ruslan_Display" | "Russo_One" | "Ruthie" | "Ruwudu" | "Rye" | "STIX_Two_Text" | "SUSE" | "Sacramento" | "Sahitya" | "Sail" | "Saira" | "Saira_Condensed" | "Saira_Extra_Condensed" | "Saira_Semi_Condensed" | "Saira_Stencil_One" | "Salsa" | "Sanchez" | "Sancreek" | "Sankofa_Display" | "Sansita" | "Sansita_Swashed" | "Sarabun" | "Sarala" | "Sarina" | "Sarpanch" | "Sassy_Frass" | "Satisfy" | "Sawarabi_Gothic" | "Sawarabi_Mincho" | "Scada" | "Scheherazade_New" | "Schibsted_Grotesk" | "Schoolbell" | "Scope_One" | "Seaweed_Script" | "Secular_One" | "Sedan" | "Sedan_SC" | "Sedgwick_Ave" | "Sedgwick_Ave_Display" | "Sen" | "Send_Flowers" | "Sevillana" | "Seymour_One" | "Shadows_Into_Light" | "Shadows_Into_Light_Two" | "Shalimar" | "Shantell_Sans" | "Shanti" | "Share" | "Share_Tech" | "Share_Tech_Mono" | "Shippori_Antique" | "Shippori_Antique_B1" | "Shippori_Mincho" | "Shippori_Mincho_B1" | "Shizuru" | "Shojumaru" | "Short_Stack" | "Shrikhand" | "Siemreap" | "Sigmar" | "Sigmar_One" | "Signika" | "Signika_Negative" | "Silkscreen" | "Simonetta" | "Single_Day" | "Sintony" | "Sirin_Stencil" | "Six_Caps" | "Sixtyfour" | "Sixtyfour_Convergence" | "Skranji" | "Slabo_13px" | "Slabo_27px" | "Slackey" | "Slackside_One" | "Smokum" | "Smooch" | "Smooch_Sans" | "Smythe" | "Sniglet" | "Snippet" | "Snowburst_One" | "Sofadi_One" | "Sofia" | "Sofia_Sans" | "Sofia_Sans_Condensed" | "Sofia_Sans_Extra_Condensed" | "Sofia_Sans_Semi_Condensed" | "Solitreo" | "Solway" | "Sometype_Mono" | "Song_Myung" | "Sono" | "Sonsie_One" | "Sora" | "Sorts_Mill_Goudy" | "Sour_Gummy" | "Source_Code_Pro" | "Source_Sans_3" | "Source_Serif_4" | "Space_Grotesk" | "Space_Mono" | "Special_Elite" | "Spectral" | "Spectral_SC" | "Spicy_Rice" | "Spinnaker" | "Spirax" | "Splash" | "Spline_Sans" | "Spline_Sans_Mono" | "Squada_One" | "Square_Peg" | "Sree_Krushnadevaraya" | "Sriracha" | "Srisakdi" | "Staatliches" | "Stalemate" | "Stalinist_One" | "Stardos_Stencil" | "Stick" | "Stick_No_Bills" | "Stint_Ultra_Condensed" | "Stint_Ultra_Expanded" | "Stoke" | "Strait" | "Style_Script" | "Stylish" | "Sue_Ellen_Francisco" | "Suez_One" | "Sulphur_Point" | "Sumana" | "Sunflower" | "Sunshiney" | "Supermercado_One" | "Sura" | "Suranna" | "Suravaram" | "Suwannaphum" | "Swanky_and_Moo_Moo" | "Syncopate" | "Syne" | "Syne_Mono" | "Syne_Tactile" | "Tac_One" | "Tai_Heritage_Pro" | "Tajawal" | "Tangerine" | "Tapestry" | "Taprom" | "Tauri" | "Taviraj" | "Teachers" | "Teko" | "Tektur" | "Telex" | "Tenali_Ramakrishna" | "Tenor_Sans" | "Text_Me_One" | "Texturina" | "Thasadith" | "The_Girl_Next_Door" | "The_Nautigal" | "Tienne" | "Tillana" | "Tilt_Neon" | "Tilt_Prism" | "Tilt_Warp" | "Timmana" | "Tinos" | "Tiny5" | "Tiro_Bangla" | "Tiro_Devanagari_Hindi" | "Tiro_Devanagari_Marathi" | "Tiro_Devanagari_Sanskrit" | "Tiro_Gurmukhi" | "Tiro_Kannada" | "Tiro_Tamil" | "Tiro_Telugu" | "Titan_One" | "Titillium_Web" | "Tomorrow" | "Tourney" | "Trade_Winds" | "Train_One" | "Trirong" | "Trispace" | "Trocchi" | "Trochut" | "Truculenta" | "Trykker" | "Tsukimi_Rounded" | "Tulpen_One" | "Turret_Road" | "Twinkle_Star" | "Ubuntu" | "Ubuntu_Condensed" | "Ubuntu_Mono" | "Ubuntu_Sans" | "Ubuntu_Sans_Mono" | "Uchen" | "Ultra" | "Unbounded" | "Uncial_Antiqua" | "Underdog" | "Unica_One" | "UnifrakturCook" | "UnifrakturMaguntia" | "Unkempt" | "Unlock" | "Unna" | "Updock" | "Urbanist" | "VT323" | "Vampiro_One" | "Varela" | "Varela_Round" | "Varta" | "Vast_Shadow" | "Vazirmatn" | "Vesper_Libre" | "Viaoda_Libre" | "Vibes" | "Vibur" | "Victor_Mono" | "Vidaloka" | "Viga" | "Vina_Sans" | "Voces" | "Volkhov" | "Vollkorn" | "Vollkorn_SC" | "Voltaire" | "Vujahday_Script" | "Waiting_for_the_Sunrise" | "Wallpoet" | "Walter_Turncoat" | "Warnes" | "Water_Brush" | "Waterfall" | "Wavefont" | "Wellfleet" | "Wendy_One" | "Whisper" | "WindSong" | "Wire_One" | "Wittgenstein" | "Wix_Madefor_Display" | "Wix_Madefor_Text" | "Work_Sans" | "Workbench" | "Xanh_Mono" | "Yaldevi" | "Yanone_Kaffeesatz" | "Yantramanav" | "Yarndings_12" | "Yarndings_12_Charted" | "Yarndings_20" | "Yarndings_20_Charted" | "Yatra_One" | "Yellowtail" | "Yeon_Sung" | "Yeseva_One" | "Yesteryear" | "Yomogi" | "Young_Serif" | "Yrsa" | "Ysabeau" | "Ysabeau_Infant" | "Ysabeau_Office" | "Ysabeau_SC" | "Yuji_Boku" | "Yuji_Hentaigana_Akari" | "Yuji_Hentaigana_Akebono" | "Yuji_Mai" | "Yuji_Syuku" | "Yusei_Magic" | "ZCOOL_KuaiLe" | "ZCOOL_QingKe_HuangYou" | "ZCOOL_XiaoWei" | "Zain" | "Zen_Antique" | "Zen_Antique_Soft" | "Zen_Dots" | "Zen_Kaku_Gothic_Antique" | "Zen_Kaku_Gothic_New" | "Zen_Kurenaido" | "Zen_Loop" | "Zen_Maru_Gothic" | "Zen_Old_Mincho" | "Zen_Tokyo_Zoo" | "Zeyada" | "Zhi_Mang_Xing" | "Zilla_Slab" | "Zilla_Slab_Highlight"; }; ``` #### sizes? ```ts optional sizes: { base?: { lineHeight?: string; size?: string; }; empty-screen-title?: { lineHeight?: string; size?: string; }; error-screen-title?: { lineHeight?: string; size?: string; }; headline?: { lineHeight?: string; size?: string; }; sm?: { lineHeight?: string; size?: string; }; xs?: { lineHeight?: string; size?: string; }; }; ``` ##### sizes.base? ```ts optional base: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### sizes.base.lineHeight? ```ts optional lineHeight: string; ``` ##### sizes.base.size? ```ts optional size: string; ``` ##### sizes.empty-screen-title? ```ts optional empty-screen-title: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### sizes.empty-screen-title.lineHeight? ```ts optional lineHeight: string; ``` ##### sizes.empty-screen-title.size? ```ts optional size: string; ``` ##### sizes.error-screen-title? ```ts optional error-screen-title: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### sizes.error-screen-title.lineHeight? ```ts optional lineHeight: string; ``` ##### sizes.error-screen-title.size? ```ts optional size: string; ``` ##### sizes.headline? ```ts optional headline: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### sizes.headline.lineHeight? ```ts optional lineHeight: string; ``` ##### sizes.headline.size? ```ts optional size: string; ``` ##### sizes.sm? ```ts optional sm: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### sizes.sm.lineHeight? ```ts optional lineHeight: string; ``` ##### sizes.sm.size? ```ts optional size: string; ``` ##### sizes.xs? ```ts optional xs: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### sizes.xs.lineHeight? ```ts optional lineHeight: string; ``` ##### sizes.xs.size? ```ts optional size: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigSchemaInputType ## Type Alias: EmbedConfigSchemaInputType ```ts type EmbedConfigSchemaInputType = { chainId?: 8453 | 31337; disablePromotion?: boolean; restrictMaximumContainerWidth?: boolean; theme?: { colors?: { dark?: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; light?: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; }; font?: { fontFamily?: | { system: string; } | { google?: | "ABeeZee" | "ADLaM_Display" | "AR_One_Sans" | "Abel" | "Abhaya_Libre" | "Aboreto" | "Abril_Fatface" | "Abyssinica_SIL" | "Aclonica" | "Acme" | "Actor" | "Adamina" | "Advent_Pro" | "Afacad" | "Afacad_Flux" | "Agbalumo" | "Agdasima" | "Aguafina_Script" | "Akatab" | "Akaya_Kanadaka" | "Akaya_Telivigala" | "Akronim" | "Akshar" | "Aladin" | "Alata" | "Alatsi" | "Albert_Sans" | "Aldrich" | "Alef" | "Alegreya" | "Alegreya_SC" | "Alegreya_Sans" | "Alegreya_Sans_SC" | "Aleo" | "Alex_Brush" | "Alexandria" | "Alfa_Slab_One" | "Alice" | "Alike" | "Alike_Angular" | "Alkalami" | "Alkatra" | "Allan" | "Allerta" | "Allerta_Stencil" | "Allison" | "Allura" | "Almarai" | "Almendra" | "Almendra_Display" | "Almendra_SC" | "Alumni_Sans" | "Alumni_Sans_Collegiate_One" | "Alumni_Sans_Inline_One" | "Alumni_Sans_Pinstripe" | "Amarante" | "Amaranth" | "Amatic_SC" | "Amethysta" | "Amiko" | "Amiri" | "Amiri_Quran" | "Amita" | "Anaheim" | "Andada_Pro" | "Andika" | "Anek_Bangla" | "Anek_Devanagari" | "Anek_Gujarati" | "Anek_Gurmukhi" | "Anek_Kannada" | "Anek_Latin" | "Anek_Malayalam" | "Anek_Odia" | "Anek_Tamil" | "Anek_Telugu" | "Angkor" | "Annapurna_SIL" | "Annie_Use_Your_Telescope" | "Anonymous_Pro" | "Anta" | "Antic" | "Antic_Didone" | "Antic_Slab" | "Anton" | "Anton_SC" | "Antonio" | "Anuphan" | "Anybody" | "Aoboshi_One" | "Arapey" | "Arbutus" | "Arbutus_Slab" | "Architects_Daughter" | "Archivo" | "Archivo_Black" | "Archivo_Narrow" | "Are_You_Serious" | "Aref_Ruqaa" | "Aref_Ruqaa_Ink" | "Arima" | "Arimo" | "Arizonia" | "Armata" | "Arsenal" | "Arsenal_SC" | "Artifika" | "Arvo" | "Arya" | "Asap" | "Asap_Condensed" | "Asar" | "Asset" | "Assistant" | "Astloch" | "Asul" | "Athiti" | "Atkinson_Hyperlegible" | "Atma" | "Atomic_Age" | "Aubrey" | "Audiowide" | "Autour_One" | "Average" | "Average_Sans" | "Averia_Gruesa_Libre" | "Averia_Libre" | "Averia_Sans_Libre" | "Averia_Serif_Libre" | "Azeret_Mono" | "B612" | "B612_Mono" | "BIZ_UDGothic" | "BIZ_UDMincho" | "BIZ_UDPGothic" | "BIZ_UDPMincho" | "Babylonica" | "Bacasime_Antique" | "Bad_Script" | "Bagel_Fat_One" | "Bahiana" | "Bahianita" | "Bai_Jamjuree" | "Bakbak_One" | "Ballet" | "Baloo_2" | "Baloo_Bhai_2" | "Baloo_Bhaijaan_2" | "Baloo_Bhaina_2" | "Baloo_Chettan_2" | "Baloo_Da_2" | "Baloo_Paaji_2" | "Baloo_Tamma_2" | "Baloo_Tammudu_2" | "Baloo_Thambi_2" | "Balsamiq_Sans" | "Balthazar" | "Bangers" | "Barlow" | "Barlow_Condensed" | "Barlow_Semi_Condensed" | "Barriecito" | "Barrio" | "Basic" | "Baskervville" | "Baskervville_SC" | "Battambang" | "Baumans" | "Bayon" | "Be_Vietnam_Pro" | "Beau_Rivage" | "Bebas_Neue" | "Beiruti" | "Belanosima" | "Belgrano" | "Bellefair" | "Belleza" | "Bellota" | "Bellota_Text" | "BenchNine" | "Benne" | "Bentham" | "Berkshire_Swash" | "Besley" | "Beth_Ellen" | "Bevan" | "BhuTuka_Expanded_One" | "Big_Shoulders_Display" | "Big_Shoulders_Inline_Display" | "Big_Shoulders_Inline_Text" | "Big_Shoulders_Stencil_Display" | "Big_Shoulders_Stencil_Text" | "Big_Shoulders_Text" | "Bigelow_Rules" | "Bigshot_One" | "Bilbo" | "Bilbo_Swash_Caps" | "BioRhyme" | "BioRhyme_Expanded" | "Birthstone" | "Birthstone_Bounce" | "Biryani" | "Bitter" | "Black_And_White_Picture" | "Black_Han_Sans" | "Black_Ops_One" | "Blaka" | "Blaka_Hollow" | "Blaka_Ink" | "Blinker" | "Bodoni_Moda" | "Bodoni_Moda_SC" | "Bokor" | "Bona_Nova" | "Bona_Nova_SC" | "Bonbon" | "Bonheur_Royale" | "Boogaloo" | "Borel" | "Bowlby_One" | "Bowlby_One_SC" | "Braah_One" | "Brawler" | "Bree_Serif" | "Bricolage_Grotesque" | "Bruno_Ace" | "Bruno_Ace_SC" | "Brygada_1918" | "Bubblegum_Sans" | "Bubbler_One" | "Buda" | "Buenard" | "Bungee" | "Bungee_Hairline" | "Bungee_Inline" | "Bungee_Outline" | "Bungee_Shade" | "Bungee_Spice" | "Bungee_Tint" | "Butcherman" | "Butterfly_Kids" | "Cabin" | "Cabin_Condensed" | "Cabin_Sketch" | "Cactus_Classical_Serif" | "Caesar_Dressing" | "Cagliostro" | "Cairo" | "Cairo_Play" | "Caladea" | "Calistoga" | "Calligraffitti" | "Cambay" | "Cambo" | "Candal" | "Cantarell" | "Cantata_One" | "Cantora_One" | "Caprasimo" | "Capriola" | "Caramel" | "Carattere" | "Cardo" | "Carlito" | "Carme" | "Carrois_Gothic" | "Carrois_Gothic_SC" | "Carter_One" | "Castoro" | "Castoro_Titling" | "Catamaran" | "Caudex" | "Caveat" | "Caveat_Brush" | "Cedarville_Cursive" | "Ceviche_One" | "Chakra_Petch" | "Changa" | "Changa_One" | "Chango" | "Charis_SIL" | "Charm" | "Charmonman" | "Chathura" | "Chau_Philomene_One" | "Chela_One" | "Chelsea_Market" | "Chenla" | "Cherish" | "Cherry_Bomb_One" | "Cherry_Cream_Soda" | "Cherry_Swash" | "Chewy" | "Chicle" | "Chilanka" | "Chivo" | "Chivo_Mono" | "Chocolate_Classical_Sans" | "Chokokutai" | "Chonburi" | "Cinzel" | "Cinzel_Decorative" | "Clicker_Script" | "Climate_Crisis" | "Coda" | "Codystar" | "Coiny" | "Combo" | "Comfortaa" | "Comforter" | "Comforter_Brush" | "Comic_Neue" | "Coming_Soon" | "Comme" | "Commissioner" | "Concert_One" | "Condiment" | "Content" | "Contrail_One" | "Convergence" | "Cookie" | "Copse" | "Corben" | "Corinthia" | "Cormorant" | "Cormorant_Garamond" | "Cormorant_Infant" | "Cormorant_SC" | "Cormorant_Unicase" | "Cormorant_Upright" | "Courgette" | "Courier_Prime" | "Cousine" | "Coustard" | "Covered_By_Your_Grace" | "Crafty_Girls" | "Creepster" | "Crete_Round" | "Crimson_Pro" | "Crimson_Text" | "Croissant_One" | "Crushed" | "Cuprum" | "Cute_Font" | "Cutive" | "Cutive_Mono" | "DM_Mono" | "DM_Sans" | "DM_Serif_Display" | "DM_Serif_Text" | "Dai_Banna_SIL" | "Damion" | "Dancing_Script" | "Danfo" | "Dangrek" | "Darker_Grotesque" | "Darumadrop_One" | "David_Libre" | "Dawning_of_a_New_Day" | "Days_One" | "Dekko" | "Dela_Gothic_One" | "Delicious_Handrawn" | "Delius" | "Delius_Swash_Caps" | "Delius_Unicase" | "Della_Respira" | "Denk_One" | "Devonshire" | "Dhurjati" | "Didact_Gothic" | "Diphylleia" | "Diplomata" | "Diplomata_SC" | "Do_Hyeon" | "Dokdo" | "Domine" | "Donegal_One" | "Dongle" | "Doppio_One" | "Dorsa" | "Dosis" | "DotGothic16" | "Doto" | "Dr_Sugiyama" | "Duru_Sans" | "DynaPuff" | "Dynalight" | "EB_Garamond" | "Eagle_Lake" | "East_Sea_Dokdo" | "Eater" | "Economica" | "Eczar" | "Edu_AU_VIC_WA_NT_Arrows" | "Edu_AU_VIC_WA_NT_Dots" | "Edu_AU_VIC_WA_NT_Guides" | "Edu_AU_VIC_WA_NT_Hand" | "Edu_AU_VIC_WA_NT_Pre" | "Edu_NSW_ACT_Foundation" | "Edu_QLD_Beginner" | "Edu_SA_Beginner" | "Edu_TAS_Beginner" | "Edu_VIC_WA_NT_Beginner" | "El_Messiri" | "Electrolize" | "Elsie" | "Elsie_Swash_Caps" | "Emblema_One" | "Emilys_Candy" | "Encode_Sans" | "Encode_Sans_Condensed" | "Encode_Sans_Expanded" | "Encode_Sans_SC" | "Encode_Sans_Semi_Condensed" | "Encode_Sans_Semi_Expanded" | "Engagement" | "Englebert" | "Enriqueta" | "Ephesis" | "Epilogue" | "Erica_One" | "Esteban" | "Estonia" | "Euphoria_Script" | "Ewert" | "Exo" | "Exo_2" | "Expletus_Sans" | "Explora" | "Faculty_Glyphic" | "Fahkwang" | "Familjen_Grotesk" | "Fanwood_Text" | "Farro" | "Farsan" | "Fascinate" | "Fascinate_Inline" | "Faster_One" | "Fasthand" | "Fauna_One" | "Faustina" | "Federant" | "Federo" | "Felipa" | "Fenix" | "Festive" | "Figtree" | "Finger_Paint" | "Finlandica" | "Fira_Code" | "Fira_Mono" | "Fira_Sans" | "Fira_Sans_Condensed" | "Fira_Sans_Extra_Condensed" | "Fjalla_One" | "Fjord_One" | "Flamenco" | "Flavors" | "Fleur_De_Leah" | "Flow_Block" | "Flow_Circular" | "Flow_Rounded" | "Foldit" | "Fondamento" | "Fontdiner_Swanky" | "Forum" | "Fragment_Mono" | "Francois_One" | "Frank_Ruhl_Libre" | "Fraunces" | "Freckle_Face" | "Fredericka_the_Great" | "Fredoka" | "Freehand" | "Freeman" | "Fresca" | "Frijole" | "Fruktur" | "Fugaz_One" | "Fuggles" | "Funnel_Display" | "Funnel_Sans" | "Fustat" | "Fuzzy_Bubbles" | "GFS_Didot" | "GFS_Neohellenic" | "Ga_Maamli" | "Gabarito" | "Gabriela" | "Gaegu" | "Gafata" | "Gajraj_One" | "Galada" | "Galdeano" | "Galindo" | "Gamja_Flower" | "Gantari" | "Gasoek_One" | "Gayathri" | "Geist" | "Geist_Mono" | "Gelasio" | "Gemunu_Libre" | "Genos" | "Gentium_Book_Plus" | "Gentium_Plus" | "Geo" | "Geologica" | "Georama" | "Geostar" | "Geostar_Fill" | "Germania_One" | "Gideon_Roman" | "Gidugu" | "Gilda_Display" | "Girassol" | "Give_You_Glory" | "Glass_Antiqua" | "Glegoo" | "Gloock" | "Gloria_Hallelujah" | "Glory" | "Gluten" | "Goblin_One" | "Gochi_Hand" | "Goldman" | "Golos_Text" | "Gorditas" | "Gothic_A1" | "Gotu" | "Goudy_Bookletter_1911" | "Gowun_Batang" | "Gowun_Dodum" | "Graduate" | "Grand_Hotel" | "Grandiflora_One" | "Grandstander" | "Grape_Nuts" | "Gravitas_One" | "Great_Vibes" | "Grechen_Fuemen" | "Grenze" | "Grenze_Gotisch" | "Grey_Qo" | "Griffy" | "Gruppo" | "Gudea" | "Gugi" | "Gulzar" | "Gupter" | "Gurajada" | "Gwendolyn" | "Habibi" | "Hachi_Maru_Pop" | "Hahmlet" | "Halant" | "Hammersmith_One" | "Hanalei" | "Hanalei_Fill" | "Handjet" | "Handlee" | "Hanken_Grotesk" | "Hanuman" | "Happy_Monkey" | "Harmattan" | "Headland_One" | "Hedvig_Letters_Sans" | "Hedvig_Letters_Serif" | "Heebo" | "Henny_Penny" | "Hepta_Slab" | "Herr_Von_Muellerhoff" | "Hi_Melody" | "Hina_Mincho" | "Hind" | "Hind_Guntur" | "Hind_Madurai" | "Hind_Siliguri" | "Hind_Vadodara" | "Holtwood_One_SC" | "Homemade_Apple" | "Homenaje" | "Honk" | "Host_Grotesk" | "Hubballi" | "Hubot_Sans" | "Hurricane" | "IBM_Plex_Mono" | "IBM_Plex_Sans" | "IBM_Plex_Sans_Arabic" | "IBM_Plex_Sans_Condensed" | "IBM_Plex_Sans_Devanagari" | "IBM_Plex_Sans_Hebrew" | "IBM_Plex_Sans_JP" | "IBM_Plex_Sans_KR" | "IBM_Plex_Sans_Thai" | "IBM_Plex_Sans_Thai_Looped" | "IBM_Plex_Serif" | "IM_Fell_DW_Pica" | "IM_Fell_DW_Pica_SC" | "IM_Fell_Double_Pica" | "IM_Fell_Double_Pica_SC" | "IM_Fell_English" | "IM_Fell_English_SC" | "IM_Fell_French_Canon" | "IM_Fell_French_Canon_SC" | "IM_Fell_Great_Primer" | "IM_Fell_Great_Primer_SC" | "Ibarra_Real_Nova" | "Iceberg" | "Iceland" | "Imbue" | "Imperial_Script" | "Imprima" | "Inclusive_Sans" | "Inconsolata" | "Inder" | "Indie_Flower" | "Ingrid_Darling" | "Inika" | "Inknut_Antiqua" | "Inria_Sans" | "Inria_Serif" | "Inspiration" | "Instrument_Sans" | "Instrument_Serif" | "Inter" | "Inter_Tight" | "Irish_Grover" | "Island_Moments" | "Istok_Web" | "Italiana" | "Italianno" | "Itim" | "Jacquard_12" | "Jacquard_12_Charted" | "Jacquard_24" | "Jacquard_24_Charted" | "Jacquarda_Bastarda_9" | "Jacquarda_Bastarda_9_Charted" | "Jacques_Francois" | "Jacques_Francois_Shadow" | "Jaini" | "Jaini_Purva" | "Jaldi" | "Jaro" | "Jersey_10" | "Jersey_10_Charted" | "Jersey_15" | "Jersey_15_Charted" | "Jersey_20" | "Jersey_20_Charted" | "Jersey_25" | "Jersey_25_Charted" | "JetBrains_Mono" | "Jim_Nightshade" | "Joan" | "Jockey_One" | "Jolly_Lodger" | "Jomhuria" | "Jomolhari" | "Josefin_Sans" | "Josefin_Slab" | "Jost" | "Joti_One" | "Jua" | "Judson" | "Julee" | "Julius_Sans_One" | "Junge" | "Jura" | "Just_Another_Hand" | "Just_Me_Again_Down_Here" | "K2D" | "Kablammo" | "Kadwa" | "Kaisei_Decol" | "Kaisei_HarunoUmi" | "Kaisei_Opti" | "Kaisei_Tokumin" | "Kalam" | "Kalnia" | "Kalnia_Glaze" | "Kameron" | "Kanit" | "Kantumruy_Pro" | "Karantina" | "Karla" | "Karla_Tamil_Inclined" | "Karla_Tamil_Upright" | "Karma" | "Katibeh" | "Kaushan_Script" | "Kavivanar" | "Kavoon" | "Kay_Pho_Du" | "Kdam_Thmor_Pro" | "Keania_One" | "Kelly_Slab" | "Kenia" | "Khand" | "Khmer" | "Khula" | "Kings" | "Kirang_Haerang" | "Kite_One" | "Kiwi_Maru" | "Klee_One" | "Knewave" | "KoHo" | "Kodchasan" | "Kode_Mono" | "Koh_Santepheap" | "Kolker_Brush" | "Konkhmer_Sleokchher" | "Kosugi" | "Kosugi_Maru" | "Kotta_One" | "Koulen" | "Kranky" | "Kreon" | "Kristi" | "Krona_One" | "Krub" | "Kufam" | "Kulim_Park" | "Kumar_One" | "Kumar_One_Outline" | "Kumbh_Sans" | "Kurale" | "LXGW_WenKai_Mono_TC" | "LXGW_WenKai_TC" | "La_Belle_Aurore" | "Labrada" | "Lacquer" | "Laila" | "Lakki_Reddy" | "Lalezar" | "Lancelot" | "Langar" | "Lateef" | "Lato" | "Lavishly_Yours" | "League_Gothic" | "League_Script" | "League_Spartan" | "Leckerli_One" | "Ledger" | "Lekton" | "Lemon" | "Lemonada" | "Lexend" | "Lexend_Deca" | "Lexend_Exa" | "Lexend_Giga" | "Lexend_Mega" | "Lexend_Peta" | "Lexend_Tera" | "Lexend_Zetta" | "Libre_Barcode_128" | "Libre_Barcode_128_Text" | "Libre_Barcode_39" | "Libre_Barcode_39_Extended" | "Libre_Barcode_39_Extended_Text" | "Libre_Barcode_39_Text" | "Libre_Barcode_EAN13_Text" | "Libre_Baskerville" | "Libre_Bodoni" | "Libre_Caslon_Display" | "Libre_Caslon_Text" | "Libre_Franklin" | "Licorice" | "Life_Savers" | "Lilita_One" | "Lily_Script_One" | "Limelight" | "Linden_Hill" | "Linefont" | "Lisu_Bosa" | "Literata" | "Liu_Jian_Mao_Cao" | "Livvic" | "Lobster" | "Lobster_Two" | "Londrina_Outline" | "Londrina_Shadow" | "Londrina_Sketch" | "Londrina_Solid" | "Long_Cang" | "Lora" | "Love_Light" | "Love_Ya_Like_A_Sister" | "Loved_by_the_King" | "Lovers_Quarrel" | "Luckiest_Guy" | "Lugrasimo" | "Lumanosimo" | "Lunasima" | "Lusitana" | "Lustria" | "Luxurious_Roman" | "Luxurious_Script" | "M_PLUS_1" | "M_PLUS_1_Code" | "M_PLUS_1p" | "M_PLUS_2" | "M_PLUS_Code_Latin" | "M_PLUS_Rounded_1c" | "Ma_Shan_Zheng" | "Macondo" | "Macondo_Swash_Caps" | "Mada" | "Madimi_One" | "Magra" | "Maiden_Orange" | "Maitree" | "Major_Mono_Display" | "Mako" | "Mali" | "Mallanna" | "Maname" | "Mandali" | "Manjari" | "Manrope" | "Mansalva" | "Manuale" | "Marcellus" | "Marcellus_SC" | "Marck_Script" | "Margarine" | "Marhey" | "Markazi_Text" | "Marko_One" | "Marmelad" | "Martel" | "Martel_Sans" | "Martian_Mono" | "Marvel" | "Mate" | "Mate_SC" | "Matemasie" | "Maven_Pro" | "McLaren" | "Mea_Culpa" | "Meddon" | "MedievalSharp" | "Medula_One" | "Meera_Inimai" | "Megrim" | "Meie_Script" | "Meow_Script" | "Merienda" | "Merriweather" | "Merriweather_Sans" | "Metal" | "Metal_Mania" | "Metamorphous" | "Metrophobic" | "Michroma" | "Micro_5" | "Micro_5_Charted" | "Milonga" | "Miltonian" | "Miltonian_Tattoo" | "Mina" | "Mingzat" | "Miniver" | "Miriam_Libre" | "Mirza" | "Miss_Fajardose" | "Mitr" | "Mochiy_Pop_One" | "Mochiy_Pop_P_One" | "Modak" | "Modern_Antiqua" | "Moderustic" | "Mogra" | "Mohave" | "Moirai_One" | "Molengo" | "Molle" | "Mona_Sans" | "Monda" | "Monofett" | "Monomaniac_One" | "Monoton" | "Monsieur_La_Doulaise" | "Montaga" | "Montagu_Slab" | "MonteCarlo" | "Montez" | "Montserrat" | "Montserrat_Alternates" | "Montserrat_Subrayada" | "Moo_Lah_Lah" | "Mooli" | "Moon_Dance" | "Moul" | "Moulpali" | "Mountains_of_Christmas" | "Mouse_Memoirs" | "Mr_Bedfort" | "Mr_Dafoe" | "Mr_De_Haviland" | "Mrs_Saint_Delafield" | "Mrs_Sheppards" | "Ms_Madi" | "Mukta" | "Mukta_Mahee" | "Mukta_Malar" | "Mukta_Vaani" | "Mulish" | "Murecho" | "MuseoModerno" | "My_Soul" | "Mynerve" | "Mystery_Quest" | "NTR" | "Nabla" | "Namdhinggo" | "Nanum_Brush_Script" | "Nanum_Gothic" | "Nanum_Gothic_Coding" | "Nanum_Myeongjo" | "Nanum_Pen_Script" | "Narnoor" | "Neonderthaw" | "Nerko_One" | "Neucha" | "Neuton" | "New_Amsterdam" | "New_Rocker" | "New_Tegomin" | "News_Cycle" | "Newsreader" | "Niconne" | "Niramit" | "Nixie_One" | "Nobile" | "Nokora" | "Norican" | "Nosifer" | "Notable" | "Nothing_You_Could_Do" | "Noticia_Text" | "Noto_Color_Emoji" | "Noto_Emoji" | "Noto_Kufi_Arabic" | "Noto_Music" | "Noto_Naskh_Arabic" | "Noto_Nastaliq_Urdu" | "Noto_Rashi_Hebrew" | "Noto_Sans" | "Noto_Sans_Adlam" | "Noto_Sans_Adlam_Unjoined" | "Noto_Sans_Anatolian_Hieroglyphs" | "Noto_Sans_Arabic" | "Noto_Sans_Armenian" | "Noto_Sans_Avestan" | "Noto_Sans_Balinese" | "Noto_Sans_Bamum" | "Noto_Sans_Bassa_Vah" | "Noto_Sans_Batak" | "Noto_Sans_Bengali" | "Noto_Sans_Bhaiksuki" | "Noto_Sans_Brahmi" | "Noto_Sans_Buginese" | "Noto_Sans_Buhid" | "Noto_Sans_Canadian_Aboriginal" | "Noto_Sans_Carian" | "Noto_Sans_Caucasian_Albanian" | "Noto_Sans_Chakma" | "Noto_Sans_Cham" | "Noto_Sans_Cherokee" | "Noto_Sans_Chorasmian" | "Noto_Sans_Coptic" | "Noto_Sans_Cuneiform" | "Noto_Sans_Cypriot" | "Noto_Sans_Cypro_Minoan" | "Noto_Sans_Deseret" | "Noto_Sans_Devanagari" | "Noto_Sans_Display" | "Noto_Sans_Duployan" | "Noto_Sans_Egyptian_Hieroglyphs" | "Noto_Sans_Elbasan" | "Noto_Sans_Elymaic" | "Noto_Sans_Ethiopic" | "Noto_Sans_Georgian" | "Noto_Sans_Glagolitic" | "Noto_Sans_Gothic" | "Noto_Sans_Grantha" | "Noto_Sans_Gujarati" | "Noto_Sans_Gunjala_Gondi" | "Noto_Sans_Gurmukhi" | "Noto_Sans_HK" | "Noto_Sans_Hanifi_Rohingya" | "Noto_Sans_Hanunoo" | "Noto_Sans_Hatran" | "Noto_Sans_Hebrew" | "Noto_Sans_Imperial_Aramaic" | "Noto_Sans_Indic_Siyaq_Numbers" | "Noto_Sans_Inscriptional_Pahlavi" | "Noto_Sans_Inscriptional_Parthian" | "Noto_Sans_JP" | "Noto_Sans_Javanese" | "Noto_Sans_KR" | "Noto_Sans_Kaithi" | "Noto_Sans_Kannada" | "Noto_Sans_Kawi" | "Noto_Sans_Kayah_Li" | "Noto_Sans_Kharoshthi" | "Noto_Sans_Khmer" | "Noto_Sans_Khojki" | "Noto_Sans_Khudawadi" | "Noto_Sans_Lao" | "Noto_Sans_Lao_Looped" | "Noto_Sans_Lepcha" | "Noto_Sans_Limbu" | "Noto_Sans_Linear_A" | "Noto_Sans_Linear_B" | "Noto_Sans_Lisu" | "Noto_Sans_Lycian" | "Noto_Sans_Lydian" | "Noto_Sans_Mahajani" | "Noto_Sans_Malayalam" | "Noto_Sans_Mandaic" | "Noto_Sans_Manichaean" | "Noto_Sans_Marchen" | "Noto_Sans_Masaram_Gondi" | "Noto_Sans_Math" | "Noto_Sans_Mayan_Numerals" | "Noto_Sans_Medefaidrin" | "Noto_Sans_Meetei_Mayek" | "Noto_Sans_Mende_Kikakui" | "Noto_Sans_Meroitic" | "Noto_Sans_Miao" | "Noto_Sans_Modi" | "Noto_Sans_Mongolian" | "Noto_Sans_Mono" | "Noto_Sans_Mro" | "Noto_Sans_Multani" | "Noto_Sans_Myanmar" | "Noto_Sans_NKo" | "Noto_Sans_NKo_Unjoined" | "Noto_Sans_Nabataean" | "Noto_Sans_Nag_Mundari" | "Noto_Sans_Nandinagari" | "Noto_Sans_New_Tai_Lue" | "Noto_Sans_Newa" | "Noto_Sans_Nushu" | "Noto_Sans_Ogham" | "Noto_Sans_Ol_Chiki" | "Noto_Sans_Old_Hungarian" | "Noto_Sans_Old_Italic" | "Noto_Sans_Old_North_Arabian" | "Noto_Sans_Old_Permic" | "Noto_Sans_Old_Persian" | "Noto_Sans_Old_Sogdian" | "Noto_Sans_Old_South_Arabian" | "Noto_Sans_Old_Turkic" | "Noto_Sans_Oriya" | "Noto_Sans_Osage" | "Noto_Sans_Osmanya" | "Noto_Sans_Pahawh_Hmong" | "Noto_Sans_Palmyrene" | "Noto_Sans_Pau_Cin_Hau" | "Noto_Sans_Phags_Pa" | "Noto_Sans_Phoenician" | "Noto_Sans_Psalter_Pahlavi" | "Noto_Sans_Rejang" | "Noto_Sans_Runic" | "Noto_Sans_SC" | "Noto_Sans_Samaritan" | "Noto_Sans_Saurashtra" | "Noto_Sans_Sharada" | "Noto_Sans_Shavian" | "Noto_Sans_Siddham" | "Noto_Sans_SignWriting" | "Noto_Sans_Sinhala" | "Noto_Sans_Sogdian" | "Noto_Sans_Sora_Sompeng" | "Noto_Sans_Soyombo" | "Noto_Sans_Sundanese" | "Noto_Sans_Syloti_Nagri" | "Noto_Sans_Symbols" | "Noto_Sans_Symbols_2" | "Noto_Sans_Syriac" | "Noto_Sans_Syriac_Eastern" | "Noto_Sans_TC" | "Noto_Sans_Tagalog" | "Noto_Sans_Tagbanwa" | "Noto_Sans_Tai_Le" | "Noto_Sans_Tai_Tham" | "Noto_Sans_Tai_Viet" | "Noto_Sans_Takri" | "Noto_Sans_Tamil" | "Noto_Sans_Tamil_Supplement" | "Noto_Sans_Tangsa" | "Noto_Sans_Telugu" | "Noto_Sans_Thaana" | "Noto_Sans_Thai" | "Noto_Sans_Thai_Looped" | "Noto_Sans_Tifinagh" | "Noto_Sans_Tirhuta" | "Noto_Sans_Ugaritic" | "Noto_Sans_Vai" | "Noto_Sans_Vithkuqi" | "Noto_Sans_Wancho" | "Noto_Sans_Warang_Citi" | "Noto_Sans_Yi" | "Noto_Sans_Zanabazar_Square" | "Noto_Serif" | "Noto_Serif_Ahom" | "Noto_Serif_Armenian" | "Noto_Serif_Balinese" | "Noto_Serif_Bengali" | "Noto_Serif_Devanagari" | "Noto_Serif_Display" | "Noto_Serif_Dogra" | "Noto_Serif_Ethiopic" | "Noto_Serif_Georgian" | "Noto_Serif_Grantha" | "Noto_Serif_Gujarati" | "Noto_Serif_Gurmukhi" | "Noto_Serif_HK" | "Noto_Serif_Hebrew" | "Noto_Serif_JP" | "Noto_Serif_KR" | "Noto_Serif_Kannada" | "Noto_Serif_Khitan_Small_Script" | "Noto_Serif_Khmer" | "Noto_Serif_Khojki" | "Noto_Serif_Lao" | "Noto_Serif_Makasar" | "Noto_Serif_Malayalam" | "Noto_Serif_Myanmar" | "Noto_Serif_NP_Hmong" | "Noto_Serif_Old_Uyghur" | "Noto_Serif_Oriya" | "Noto_Serif_Ottoman_Siyaq" | "Noto_Serif_SC" | "Noto_Serif_Sinhala" | "Noto_Serif_TC" | "Noto_Serif_Tamil" | "Noto_Serif_Tangut" | "Noto_Serif_Telugu" | "Noto_Serif_Thai" | "Noto_Serif_Tibetan" | "Noto_Serif_Toto" | "Noto_Serif_Vithkuqi" | "Noto_Serif_Yezidi" | "Noto_Traditional_Nushu" | "Noto_Znamenny_Musical_Notation" | "Nova_Cut" | "Nova_Flat" | "Nova_Mono" | "Nova_Oval" | "Nova_Round" | "Nova_Script" | "Nova_Slim" | "Nova_Square" | "Numans" | "Nunito" | "Nunito_Sans" | "Nuosu_SIL" | "Odibee_Sans" | "Odor_Mean_Chey" | "Offside" | "Oi" | "Ojuju" | "Old_Standard_TT" | "Oldenburg" | "Ole" | "Oleo_Script" | "Oleo_Script_Swash_Caps" | "Onest" | "Oooh_Baby" | "Open_Sans" | "Oranienbaum" | "Orbit" | "Orbitron" | "Oregano" | "Orelega_One" | "Orienta" | "Original_Surfer" | "Oswald" | "Outfit" | "Over_the_Rainbow" | "Overlock" | "Overlock_SC" | "Overpass" | "Overpass_Mono" | "Ovo" | "Oxanium" | "Oxygen" | "Oxygen_Mono" | "PT_Mono" | "PT_Sans" | "PT_Sans_Caption" | "PT_Sans_Narrow" | "PT_Serif" | "PT_Serif_Caption" | "Pacifico" | "Padauk" | "Padyakke_Expanded_One" | "Palanquin" | "Palanquin_Dark" | "Palette_Mosaic" | "Pangolin" | "Paprika" | "Parisienne" | "Parkinsans" | "Passero_One" | "Passion_One" | "Passions_Conflict" | "Pathway_Extreme" | "Pathway_Gothic_One" | "Patrick_Hand" | "Patrick_Hand_SC" | "Pattaya" | "Patua_One" | "Pavanam" | "Paytone_One" | "Peddana" | "Peralta" | "Permanent_Marker" | "Petemoss" | "Petit_Formal_Script" | "Petrona" | "Phetsarath" | "Philosopher" | "Phudu" | "Piazzolla" | "Piedra" | "Pinyon_Script" | "Pirata_One" | "Pixelify_Sans" | "Plaster" | "Platypi" | "Play" | "Playball" | "Playfair" | "Playfair_Display" | "Playfair_Display_SC" | "Playpen_Sans" | "Playwrite_AR" | "Playwrite_AT" | "Playwrite_AU_NSW" | "Playwrite_AU_QLD" | "Playwrite_AU_SA" | "Playwrite_AU_TAS" | "Playwrite_AU_VIC" | "Playwrite_BE_VLG" | "Playwrite_BE_WAL" | "Playwrite_BR" | "Playwrite_CA" | "Playwrite_CL" | "Playwrite_CO" | "Playwrite_CU" | "Playwrite_CZ" | "Playwrite_DE_Grund" | "Playwrite_DE_LA" | "Playwrite_DE_SAS" | "Playwrite_DE_VA" | "Playwrite_DK_Loopet" | "Playwrite_DK_Uloopet" | "Playwrite_ES" | "Playwrite_ES_Deco" | "Playwrite_FR_Moderne" | "Playwrite_FR_Trad" | "Playwrite_GB_J" | "Playwrite_GB_S" | "Playwrite_HR" | "Playwrite_HR_Lijeva" | "Playwrite_HU" | "Playwrite_ID" | "Playwrite_IE" | "Playwrite_IN" | "Playwrite_IS" | "Playwrite_IT_Moderna" | "Playwrite_IT_Trad" | "Playwrite_MX" | "Playwrite_NG_Modern" | "Playwrite_NL" | "Playwrite_NO" | "Playwrite_NZ" | "Playwrite_PE" | "Playwrite_PL" | "Playwrite_PT" | "Playwrite_RO" | "Playwrite_SK" | "Playwrite_TZ" | "Playwrite_US_Modern" | "Playwrite_US_Trad" | "Playwrite_VN" | "Playwrite_ZA" | "Plus_Jakarta_Sans" | "Podkova" | "Poetsen_One" | "Poiret_One" | "Poller_One" | "Poltawski_Nowy" | "Poly" | "Pompiere" | "Ponnala" | "Pontano_Sans" | "Poor_Story" | "Poppins" | "Port_Lligat_Sans" | "Port_Lligat_Slab" | "Potta_One" | "Pragati_Narrow" | "Praise" | "Prata" | "Preahvihear" | "Press_Start_2P" | "Pridi" | "Princess_Sofia" | "Prociono" | "Prompt" | "Prosto_One" | "Protest_Guerrilla" | "Protest_Revolution" | "Protest_Riot" | "Protest_Strike" | "Proza_Libre" | "Public_Sans" | "Puppies_Play" | "Puritan" | "Purple_Purse" | "Qahiri" | "Quando" | "Quantico" | "Quattrocento" | "Quattrocento_Sans" | "Questrial" | "Quicksand" | "Quintessential" | "Qwigley" | "Qwitcher_Grypen" | "REM" | "Racing_Sans_One" | "Radio_Canada" | "Radio_Canada_Big" | "Radley" | "Rajdhani" | "Rakkas" | "Raleway" | "Raleway_Dots" | "Ramabhadra" | "Ramaraja" | "Rambla" | "Rammetto_One" | "Rampart_One" | "Ranchers" | "Rancho" | "Ranga" | "Rasa" | "Rationale" | "Ravi_Prakash" | "Readex_Pro" | "Recursive" | "Red_Hat_Display" | "Red_Hat_Mono" | "Red_Hat_Text" | "Red_Rose" | "Redacted" | "Redacted_Script" | "Reddit_Mono" | "Reddit_Sans" | "Reddit_Sans_Condensed" | "Redressed" | "Reem_Kufi" | "Reem_Kufi_Fun" | "Reem_Kufi_Ink" | "Reenie_Beanie" | "Reggae_One" | "Rethink_Sans" | "Revalia" | "Rhodium_Libre" | "Ribeye" | "Ribeye_Marrow" | "Righteous" | "Risque" | "Road_Rage" | "Roboto" | "Roboto_Condensed" | "Roboto_Flex" | "Roboto_Mono" | "Roboto_Serif" | "Roboto_Slab" | "Rochester" | "Rock_3D" | "Rock_Salt" | "RocknRoll_One" | "Rokkitt" | "Romanesco" | "Ropa_Sans" | "Rosario" | "Rosarivo" | "Rouge_Script" | "Rowdies" | "Rozha_One" | "Rubik" | "Rubik_80s_Fade" | "Rubik_Beastly" | "Rubik_Broken_Fax" | "Rubik_Bubbles" | "Rubik_Burned" | "Rubik_Dirt" | "Rubik_Distressed" | "Rubik_Doodle_Shadow" | "Rubik_Doodle_Triangles" | "Rubik_Gemstones" | "Rubik_Glitch" | "Rubik_Glitch_Pop" | "Rubik_Iso" | "Rubik_Lines" | "Rubik_Maps" | "Rubik_Marker_Hatch" | "Rubik_Maze" | "Rubik_Microbe" | "Rubik_Mono_One" | "Rubik_Moonrocks" | "Rubik_Pixels" | "Rubik_Puddles" | "Rubik_Scribble" | "Rubik_Spray_Paint" | "Rubik_Storm" | "Rubik_Vinyl" | "Rubik_Wet_Paint" | "Ruda" | "Rufina" | "Ruge_Boogie" | "Ruluko" | "Rum_Raisin" | "Ruslan_Display" | "Russo_One" | "Ruthie" | "Ruwudu" | "Rye" | "STIX_Two_Text" | "SUSE" | "Sacramento" | "Sahitya" | "Sail" | "Saira" | "Saira_Condensed" | "Saira_Extra_Condensed" | "Saira_Semi_Condensed" | "Saira_Stencil_One" | "Salsa" | "Sanchez" | "Sancreek" | "Sankofa_Display" | "Sansita" | "Sansita_Swashed" | "Sarabun" | "Sarala" | "Sarina" | "Sarpanch" | "Sassy_Frass" | "Satisfy" | "Sawarabi_Gothic" | "Sawarabi_Mincho" | "Scada" | "Scheherazade_New" | "Schibsted_Grotesk" | "Schoolbell" | "Scope_One" | "Seaweed_Script" | "Secular_One" | "Sedan" | "Sedan_SC" | "Sedgwick_Ave" | "Sedgwick_Ave_Display" | "Sen" | "Send_Flowers" | "Sevillana" | "Seymour_One" | "Shadows_Into_Light" | "Shadows_Into_Light_Two" | "Shalimar" | "Shantell_Sans" | "Shanti" | "Share" | "Share_Tech" | "Share_Tech_Mono" | "Shippori_Antique" | "Shippori_Antique_B1" | "Shippori_Mincho" | "Shippori_Mincho_B1" | "Shizuru" | "Shojumaru" | "Short_Stack" | "Shrikhand" | "Siemreap" | "Sigmar" | "Sigmar_One" | "Signika" | "Signika_Negative" | "Silkscreen" | "Simonetta" | "Single_Day" | "Sintony" | "Sirin_Stencil" | "Six_Caps" | "Sixtyfour" | "Sixtyfour_Convergence" | "Skranji" | "Slabo_13px" | "Slabo_27px" | "Slackey" | "Slackside_One" | "Smokum" | "Smooch" | "Smooch_Sans" | "Smythe" | "Sniglet" | "Snippet" | "Snowburst_One" | "Sofadi_One" | "Sofia" | "Sofia_Sans" | "Sofia_Sans_Condensed" | "Sofia_Sans_Extra_Condensed" | "Sofia_Sans_Semi_Condensed" | "Solitreo" | "Solway" | "Sometype_Mono" | "Song_Myung" | "Sono" | "Sonsie_One" | "Sora" | "Sorts_Mill_Goudy" | "Sour_Gummy" | "Source_Code_Pro" | "Source_Sans_3" | "Source_Serif_4" | "Space_Grotesk" | "Space_Mono" | "Special_Elite" | "Spectral" | "Spectral_SC" | "Spicy_Rice" | "Spinnaker" | "Spirax" | "Splash" | "Spline_Sans" | "Spline_Sans_Mono" | "Squada_One" | "Square_Peg" | "Sree_Krushnadevaraya" | "Sriracha" | "Srisakdi" | "Staatliches" | "Stalemate" | "Stalinist_One" | "Stardos_Stencil" | "Stick" | "Stick_No_Bills" | "Stint_Ultra_Condensed" | "Stint_Ultra_Expanded" | "Stoke" | "Strait" | "Style_Script" | "Stylish" | "Sue_Ellen_Francisco" | "Suez_One" | "Sulphur_Point" | "Sumana" | "Sunflower" | "Sunshiney" | "Supermercado_One" | "Sura" | "Suranna" | "Suravaram" | "Suwannaphum" | "Swanky_and_Moo_Moo" | "Syncopate" | "Syne" | "Syne_Mono" | "Syne_Tactile" | "Tac_One" | "Tai_Heritage_Pro" | "Tajawal" | "Tangerine" | "Tapestry" | "Taprom" | "Tauri" | "Taviraj" | "Teachers" | "Teko" | "Tektur" | "Telex" | "Tenali_Ramakrishna" | "Tenor_Sans" | "Text_Me_One" | "Texturina" | "Thasadith" | "The_Girl_Next_Door" | "The_Nautigal" | "Tienne" | "Tillana" | "Tilt_Neon" | "Tilt_Prism" | "Tilt_Warp" | "Timmana" | "Tinos" | "Tiny5" | "Tiro_Bangla" | "Tiro_Devanagari_Hindi" | "Tiro_Devanagari_Marathi" | "Tiro_Devanagari_Sanskrit" | "Tiro_Gurmukhi" | "Tiro_Kannada" | "Tiro_Tamil" | "Tiro_Telugu" | "Titan_One" | "Titillium_Web" | "Tomorrow" | "Tourney" | "Trade_Winds" | "Train_One" | "Trirong" | "Trispace" | "Trocchi" | "Trochut" | "Truculenta" | "Trykker" | "Tsukimi_Rounded" | "Tulpen_One" | "Turret_Road" | "Twinkle_Star" | "Ubuntu" | "Ubuntu_Condensed" | "Ubuntu_Mono" | "Ubuntu_Sans" | "Ubuntu_Sans_Mono" | "Uchen" | "Ultra" | "Unbounded" | "Uncial_Antiqua" | "Underdog" | "Unica_One" | "UnifrakturCook" | "UnifrakturMaguntia" | "Unkempt" | "Unlock" | "Unna" | "Updock" | "Urbanist" | "VT323" | "Vampiro_One" | "Varela" | "Varela_Round" | "Varta" | "Vast_Shadow" | "Vazirmatn" | "Vesper_Libre" | "Viaoda_Libre" | "Vibes" | "Vibur" | "Victor_Mono" | "Vidaloka" | "Viga" | "Vina_Sans" | "Voces" | "Volkhov" | "Vollkorn" | "Vollkorn_SC" | "Voltaire" | "Vujahday_Script" | "Waiting_for_the_Sunrise" | "Wallpoet" | "Walter_Turncoat" | "Warnes" | "Water_Brush" | "Waterfall" | "Wavefont" | "Wellfleet" | "Wendy_One" | "Whisper" | "WindSong" | "Wire_One" | "Wittgenstein" | "Wix_Madefor_Display" | "Wix_Madefor_Text" | "Work_Sans" | "Workbench" | "Xanh_Mono" | "Yaldevi" | "Yanone_Kaffeesatz" | "Yantramanav" | "Yarndings_12" | "Yarndings_12_Charted" | "Yarndings_20" | "Yarndings_20_Charted" | "Yatra_One" | "Yellowtail" | "Yeon_Sung" | "Yeseva_One" | "Yesteryear" | "Yomogi" | "Young_Serif" | "Yrsa" | "Ysabeau" | "Ysabeau_Infant" | "Ysabeau_Office" | "Ysabeau_SC" | "Yuji_Boku" | "Yuji_Hentaigana_Akari" | "Yuji_Hentaigana_Akebono" | "Yuji_Mai" | "Yuji_Syuku" | "Yusei_Magic" | "ZCOOL_KuaiLe" | "ZCOOL_QingKe_HuangYou" | "ZCOOL_XiaoWei" | "Zain" | "Zen_Antique" | "Zen_Antique_Soft" | "Zen_Dots" | "Zen_Kaku_Gothic_Antique" | "Zen_Kaku_Gothic_New" | "Zen_Kurenaido" | "Zen_Loop" | "Zen_Maru_Gothic" | "Zen_Old_Mincho" | "Zen_Tokyo_Zoo" | "Zeyada" | "Zhi_Mang_Xing" | "Zilla_Slab" | "Zilla_Slab_Highlight"; }; sizes?: { base?: { lineHeight?: string; size?: string; }; empty-screen-title?: { lineHeight?: string; size?: string; }; error-screen-title?: { lineHeight?: string; size?: string; }; headline?: { lineHeight?: string; size?: string; }; sm?: { lineHeight?: string; size?: string; }; xs?: { lineHeight?: string; size?: string; }; }; }; mode?: "dark" | "light"; other?: { radius?: string; root-padding-horizontal?: string; root-padding-vertical?: string; }; }; }; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:209 Custom configuration for `` component. ### Type declaration #### chainId? ```ts optional chainId: 8453 | 31337 = EmbedConfigSupportedChainIdsSchema; ``` The id of the chain to post the comments to. We don't filter chain id when fetching comments. default to [DEFAULT\_CHAIN\_ID](/sdk-reference/defaultExports/variables/DEFAULT_CHAIN_ID.mdx) #### disablePromotion? ```ts optional disablePromotion: boolean; ``` Hide powered by ECP link ##### Default ```ts false ``` #### restrictMaximumContainerWidth? ```ts optional restrictMaximumContainerWidth: boolean; ``` Restrict the maximum container width ##### Default ```ts true ``` #### theme? ```ts optional theme: { colors?: { dark?: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; light?: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; }; font?: { fontFamily?: | { system: string; } | { google?: | "ABeeZee" | "ADLaM_Display" | "AR_One_Sans" | "Abel" | "Abhaya_Libre" | "Aboreto" | "Abril_Fatface" | "Abyssinica_SIL" | "Aclonica" | "Acme" | "Actor" | "Adamina" | "Advent_Pro" | "Afacad" | "Afacad_Flux" | "Agbalumo" | "Agdasima" | "Aguafina_Script" | "Akatab" | "Akaya_Kanadaka" | "Akaya_Telivigala" | "Akronim" | "Akshar" | "Aladin" | "Alata" | "Alatsi" | "Albert_Sans" | "Aldrich" | "Alef" | "Alegreya" | "Alegreya_SC" | "Alegreya_Sans" | "Alegreya_Sans_SC" | "Aleo" | "Alex_Brush" | "Alexandria" | "Alfa_Slab_One" | "Alice" | "Alike" | "Alike_Angular" | "Alkalami" | "Alkatra" | "Allan" | "Allerta" | "Allerta_Stencil" | "Allison" | "Allura" | "Almarai" | "Almendra" | "Almendra_Display" | "Almendra_SC" | "Alumni_Sans" | "Alumni_Sans_Collegiate_One" | "Alumni_Sans_Inline_One" | "Alumni_Sans_Pinstripe" | "Amarante" | "Amaranth" | "Amatic_SC" | "Amethysta" | "Amiko" | "Amiri" | "Amiri_Quran" | "Amita" | "Anaheim" | "Andada_Pro" | "Andika" | "Anek_Bangla" | "Anek_Devanagari" | "Anek_Gujarati" | "Anek_Gurmukhi" | "Anek_Kannada" | "Anek_Latin" | "Anek_Malayalam" | "Anek_Odia" | "Anek_Tamil" | "Anek_Telugu" | "Angkor" | "Annapurna_SIL" | "Annie_Use_Your_Telescope" | "Anonymous_Pro" | "Anta" | "Antic" | "Antic_Didone" | "Antic_Slab" | "Anton" | "Anton_SC" | "Antonio" | "Anuphan" | "Anybody" | "Aoboshi_One" | "Arapey" | "Arbutus" | "Arbutus_Slab" | "Architects_Daughter" | "Archivo" | "Archivo_Black" | "Archivo_Narrow" | "Are_You_Serious" | "Aref_Ruqaa" | "Aref_Ruqaa_Ink" | "Arima" | "Arimo" | "Arizonia" | "Armata" | "Arsenal" | "Arsenal_SC" | "Artifika" | "Arvo" | "Arya" | "Asap" | "Asap_Condensed" | "Asar" | "Asset" | "Assistant" | "Astloch" | "Asul" | "Athiti" | "Atkinson_Hyperlegible" | "Atma" | "Atomic_Age" | "Aubrey" | "Audiowide" | "Autour_One" | "Average" | "Average_Sans" | "Averia_Gruesa_Libre" | "Averia_Libre" | "Averia_Sans_Libre" | "Averia_Serif_Libre" | "Azeret_Mono" | "B612" | "B612_Mono" | "BIZ_UDGothic" | "BIZ_UDMincho" | "BIZ_UDPGothic" | "BIZ_UDPMincho" | "Babylonica" | "Bacasime_Antique" | "Bad_Script" | "Bagel_Fat_One" | "Bahiana" | "Bahianita" | "Bai_Jamjuree" | "Bakbak_One" | "Ballet" | "Baloo_2" | "Baloo_Bhai_2" | "Baloo_Bhaijaan_2" | "Baloo_Bhaina_2" | "Baloo_Chettan_2" | "Baloo_Da_2" | "Baloo_Paaji_2" | "Baloo_Tamma_2" | "Baloo_Tammudu_2" | "Baloo_Thambi_2" | "Balsamiq_Sans" | "Balthazar" | "Bangers" | "Barlow" | "Barlow_Condensed" | "Barlow_Semi_Condensed" | "Barriecito" | "Barrio" | "Basic" | "Baskervville" | "Baskervville_SC" | "Battambang" | "Baumans" | "Bayon" | "Be_Vietnam_Pro" | "Beau_Rivage" | "Bebas_Neue" | "Beiruti" | "Belanosima" | "Belgrano" | "Bellefair" | "Belleza" | "Bellota" | "Bellota_Text" | "BenchNine" | "Benne" | "Bentham" | "Berkshire_Swash" | "Besley" | "Beth_Ellen" | "Bevan" | "BhuTuka_Expanded_One" | "Big_Shoulders_Display" | "Big_Shoulders_Inline_Display" | "Big_Shoulders_Inline_Text" | "Big_Shoulders_Stencil_Display" | "Big_Shoulders_Stencil_Text" | "Big_Shoulders_Text" | "Bigelow_Rules" | "Bigshot_One" | "Bilbo" | "Bilbo_Swash_Caps" | "BioRhyme" | "BioRhyme_Expanded" | "Birthstone" | "Birthstone_Bounce" | "Biryani" | "Bitter" | "Black_And_White_Picture" | "Black_Han_Sans" | "Black_Ops_One" | "Blaka" | "Blaka_Hollow" | "Blaka_Ink" | "Blinker" | "Bodoni_Moda" | "Bodoni_Moda_SC" | "Bokor" | "Bona_Nova" | "Bona_Nova_SC" | "Bonbon" | "Bonheur_Royale" | "Boogaloo" | "Borel" | "Bowlby_One" | "Bowlby_One_SC" | "Braah_One" | "Brawler" | "Bree_Serif" | "Bricolage_Grotesque" | "Bruno_Ace" | "Bruno_Ace_SC" | "Brygada_1918" | "Bubblegum_Sans" | "Bubbler_One" | "Buda" | "Buenard" | "Bungee" | "Bungee_Hairline" | "Bungee_Inline" | "Bungee_Outline" | "Bungee_Shade" | "Bungee_Spice" | "Bungee_Tint" | "Butcherman" | "Butterfly_Kids" | "Cabin" | "Cabin_Condensed" | "Cabin_Sketch" | "Cactus_Classical_Serif" | "Caesar_Dressing" | "Cagliostro" | "Cairo" | "Cairo_Play" | "Caladea" | "Calistoga" | "Calligraffitti" | "Cambay" | "Cambo" | "Candal" | "Cantarell" | "Cantata_One" | "Cantora_One" | "Caprasimo" | "Capriola" | "Caramel" | "Carattere" | "Cardo" | "Carlito" | "Carme" | "Carrois_Gothic" | "Carrois_Gothic_SC" | "Carter_One" | "Castoro" | "Castoro_Titling" | "Catamaran" | "Caudex" | "Caveat" | "Caveat_Brush" | "Cedarville_Cursive" | "Ceviche_One" | "Chakra_Petch" | "Changa" | "Changa_One" | "Chango" | "Charis_SIL" | "Charm" | "Charmonman" | "Chathura" | "Chau_Philomene_One" | "Chela_One" | "Chelsea_Market" | "Chenla" | "Cherish" | "Cherry_Bomb_One" | "Cherry_Cream_Soda" | "Cherry_Swash" | "Chewy" | "Chicle" | "Chilanka" | "Chivo" | "Chivo_Mono" | "Chocolate_Classical_Sans" | "Chokokutai" | "Chonburi" | "Cinzel" | "Cinzel_Decorative" | "Clicker_Script" | "Climate_Crisis" | "Coda" | "Codystar" | "Coiny" | "Combo" | "Comfortaa" | "Comforter" | "Comforter_Brush" | "Comic_Neue" | "Coming_Soon" | "Comme" | "Commissioner" | "Concert_One" | "Condiment" | "Content" | "Contrail_One" | "Convergence" | "Cookie" | "Copse" | "Corben" | "Corinthia" | "Cormorant" | "Cormorant_Garamond" | "Cormorant_Infant" | "Cormorant_SC" | "Cormorant_Unicase" | "Cormorant_Upright" | "Courgette" | "Courier_Prime" | "Cousine" | "Coustard" | "Covered_By_Your_Grace" | "Crafty_Girls" | "Creepster" | "Crete_Round" | "Crimson_Pro" | "Crimson_Text" | "Croissant_One" | "Crushed" | "Cuprum" | "Cute_Font" | "Cutive" | "Cutive_Mono" | "DM_Mono" | "DM_Sans" | "DM_Serif_Display" | "DM_Serif_Text" | "Dai_Banna_SIL" | "Damion" | "Dancing_Script" | "Danfo" | "Dangrek" | "Darker_Grotesque" | "Darumadrop_One" | "David_Libre" | "Dawning_of_a_New_Day" | "Days_One" | "Dekko" | "Dela_Gothic_One" | "Delicious_Handrawn" | "Delius" | "Delius_Swash_Caps" | "Delius_Unicase" | "Della_Respira" | "Denk_One" | "Devonshire" | "Dhurjati" | "Didact_Gothic" | "Diphylleia" | "Diplomata" | "Diplomata_SC" | "Do_Hyeon" | "Dokdo" | "Domine" | "Donegal_One" | "Dongle" | "Doppio_One" | "Dorsa" | "Dosis" | "DotGothic16" | "Doto" | "Dr_Sugiyama" | "Duru_Sans" | "DynaPuff" | "Dynalight" | "EB_Garamond" | "Eagle_Lake" | "East_Sea_Dokdo" | "Eater" | "Economica" | "Eczar" | "Edu_AU_VIC_WA_NT_Arrows" | "Edu_AU_VIC_WA_NT_Dots" | "Edu_AU_VIC_WA_NT_Guides" | "Edu_AU_VIC_WA_NT_Hand" | "Edu_AU_VIC_WA_NT_Pre" | "Edu_NSW_ACT_Foundation" | "Edu_QLD_Beginner" | "Edu_SA_Beginner" | "Edu_TAS_Beginner" | "Edu_VIC_WA_NT_Beginner" | "El_Messiri" | "Electrolize" | "Elsie" | "Elsie_Swash_Caps" | "Emblema_One" | "Emilys_Candy" | "Encode_Sans" | "Encode_Sans_Condensed" | "Encode_Sans_Expanded" | "Encode_Sans_SC" | "Encode_Sans_Semi_Condensed" | "Encode_Sans_Semi_Expanded" | "Engagement" | "Englebert" | "Enriqueta" | "Ephesis" | "Epilogue" | "Erica_One" | "Esteban" | "Estonia" | "Euphoria_Script" | "Ewert" | "Exo" | "Exo_2" | "Expletus_Sans" | "Explora" | "Faculty_Glyphic" | "Fahkwang" | "Familjen_Grotesk" | "Fanwood_Text" | "Farro" | "Farsan" | "Fascinate" | "Fascinate_Inline" | "Faster_One" | "Fasthand" | "Fauna_One" | "Faustina" | "Federant" | "Federo" | "Felipa" | "Fenix" | "Festive" | "Figtree" | "Finger_Paint" | "Finlandica" | "Fira_Code" | "Fira_Mono" | "Fira_Sans" | "Fira_Sans_Condensed" | "Fira_Sans_Extra_Condensed" | "Fjalla_One" | "Fjord_One" | "Flamenco" | "Flavors" | "Fleur_De_Leah" | "Flow_Block" | "Flow_Circular" | "Flow_Rounded" | "Foldit" | "Fondamento" | "Fontdiner_Swanky" | "Forum" | "Fragment_Mono" | "Francois_One" | "Frank_Ruhl_Libre" | "Fraunces" | "Freckle_Face" | "Fredericka_the_Great" | "Fredoka" | "Freehand" | "Freeman" | "Fresca" | "Frijole" | "Fruktur" | "Fugaz_One" | "Fuggles" | "Funnel_Display" | "Funnel_Sans" | "Fustat" | "Fuzzy_Bubbles" | "GFS_Didot" | "GFS_Neohellenic" | "Ga_Maamli" | "Gabarito" | "Gabriela" | "Gaegu" | "Gafata" | "Gajraj_One" | "Galada" | "Galdeano" | "Galindo" | "Gamja_Flower" | "Gantari" | "Gasoek_One" | "Gayathri" | "Geist" | "Geist_Mono" | "Gelasio" | "Gemunu_Libre" | "Genos" | "Gentium_Book_Plus" | "Gentium_Plus" | "Geo" | "Geologica" | "Georama" | "Geostar" | "Geostar_Fill" | "Germania_One" | "Gideon_Roman" | "Gidugu" | "Gilda_Display" | "Girassol" | "Give_You_Glory" | "Glass_Antiqua" | "Glegoo" | "Gloock" | "Gloria_Hallelujah" | "Glory" | "Gluten" | "Goblin_One" | "Gochi_Hand" | "Goldman" | "Golos_Text" | "Gorditas" | "Gothic_A1" | "Gotu" | "Goudy_Bookletter_1911" | "Gowun_Batang" | "Gowun_Dodum" | "Graduate" | "Grand_Hotel" | "Grandiflora_One" | "Grandstander" | "Grape_Nuts" | "Gravitas_One" | "Great_Vibes" | "Grechen_Fuemen" | "Grenze" | "Grenze_Gotisch" | "Grey_Qo" | "Griffy" | "Gruppo" | "Gudea" | "Gugi" | "Gulzar" | "Gupter" | "Gurajada" | "Gwendolyn" | "Habibi" | "Hachi_Maru_Pop" | "Hahmlet" | "Halant" | "Hammersmith_One" | "Hanalei" | "Hanalei_Fill" | "Handjet" | "Handlee" | "Hanken_Grotesk" | "Hanuman" | "Happy_Monkey" | "Harmattan" | "Headland_One" | "Hedvig_Letters_Sans" | "Hedvig_Letters_Serif" | "Heebo" | "Henny_Penny" | "Hepta_Slab" | "Herr_Von_Muellerhoff" | "Hi_Melody" | "Hina_Mincho" | "Hind" | "Hind_Guntur" | "Hind_Madurai" | "Hind_Siliguri" | "Hind_Vadodara" | "Holtwood_One_SC" | "Homemade_Apple" | "Homenaje" | "Honk" | "Host_Grotesk" | "Hubballi" | "Hubot_Sans" | "Hurricane" | "IBM_Plex_Mono" | "IBM_Plex_Sans" | "IBM_Plex_Sans_Arabic" | "IBM_Plex_Sans_Condensed" | "IBM_Plex_Sans_Devanagari" | "IBM_Plex_Sans_Hebrew" | "IBM_Plex_Sans_JP" | "IBM_Plex_Sans_KR" | "IBM_Plex_Sans_Thai" | "IBM_Plex_Sans_Thai_Looped" | "IBM_Plex_Serif" | "IM_Fell_DW_Pica" | "IM_Fell_DW_Pica_SC" | "IM_Fell_Double_Pica" | "IM_Fell_Double_Pica_SC" | "IM_Fell_English" | "IM_Fell_English_SC" | "IM_Fell_French_Canon" | "IM_Fell_French_Canon_SC" | "IM_Fell_Great_Primer" | "IM_Fell_Great_Primer_SC" | "Ibarra_Real_Nova" | "Iceberg" | "Iceland" | "Imbue" | "Imperial_Script" | "Imprima" | "Inclusive_Sans" | "Inconsolata" | "Inder" | "Indie_Flower" | "Ingrid_Darling" | "Inika" | "Inknut_Antiqua" | "Inria_Sans" | "Inria_Serif" | "Inspiration" | "Instrument_Sans" | "Instrument_Serif" | "Inter" | "Inter_Tight" | "Irish_Grover" | "Island_Moments" | "Istok_Web" | "Italiana" | "Italianno" | "Itim" | "Jacquard_12" | "Jacquard_12_Charted" | "Jacquard_24" | "Jacquard_24_Charted" | "Jacquarda_Bastarda_9" | "Jacquarda_Bastarda_9_Charted" | "Jacques_Francois" | "Jacques_Francois_Shadow" | "Jaini" | "Jaini_Purva" | "Jaldi" | "Jaro" | "Jersey_10" | "Jersey_10_Charted" | "Jersey_15" | "Jersey_15_Charted" | "Jersey_20" | "Jersey_20_Charted" | "Jersey_25" | "Jersey_25_Charted" | "JetBrains_Mono" | "Jim_Nightshade" | "Joan" | "Jockey_One" | "Jolly_Lodger" | "Jomhuria" | "Jomolhari" | "Josefin_Sans" | "Josefin_Slab" | "Jost" | "Joti_One" | "Jua" | "Judson" | "Julee" | "Julius_Sans_One" | "Junge" | "Jura" | "Just_Another_Hand" | "Just_Me_Again_Down_Here" | "K2D" | "Kablammo" | "Kadwa" | "Kaisei_Decol" | "Kaisei_HarunoUmi" | "Kaisei_Opti" | "Kaisei_Tokumin" | "Kalam" | "Kalnia" | "Kalnia_Glaze" | "Kameron" | "Kanit" | "Kantumruy_Pro" | "Karantina" | "Karla" | "Karla_Tamil_Inclined" | "Karla_Tamil_Upright" | "Karma" | "Katibeh" | "Kaushan_Script" | "Kavivanar" | "Kavoon" | "Kay_Pho_Du" | "Kdam_Thmor_Pro" | "Keania_One" | "Kelly_Slab" | "Kenia" | "Khand" | "Khmer" | "Khula" | "Kings" | "Kirang_Haerang" | "Kite_One" | "Kiwi_Maru" | "Klee_One" | "Knewave" | "KoHo" | "Kodchasan" | "Kode_Mono" | "Koh_Santepheap" | "Kolker_Brush" | "Konkhmer_Sleokchher" | "Kosugi" | "Kosugi_Maru" | "Kotta_One" | "Koulen" | "Kranky" | "Kreon" | "Kristi" | "Krona_One" | "Krub" | "Kufam" | "Kulim_Park" | "Kumar_One" | "Kumar_One_Outline" | "Kumbh_Sans" | "Kurale" | "LXGW_WenKai_Mono_TC" | "LXGW_WenKai_TC" | "La_Belle_Aurore" | "Labrada" | "Lacquer" | "Laila" | "Lakki_Reddy" | "Lalezar" | "Lancelot" | "Langar" | "Lateef" | "Lato" | "Lavishly_Yours" | "League_Gothic" | "League_Script" | "League_Spartan" | "Leckerli_One" | "Ledger" | "Lekton" | "Lemon" | "Lemonada" | "Lexend" | "Lexend_Deca" | "Lexend_Exa" | "Lexend_Giga" | "Lexend_Mega" | "Lexend_Peta" | "Lexend_Tera" | "Lexend_Zetta" | "Libre_Barcode_128" | "Libre_Barcode_128_Text" | "Libre_Barcode_39" | "Libre_Barcode_39_Extended" | "Libre_Barcode_39_Extended_Text" | "Libre_Barcode_39_Text" | "Libre_Barcode_EAN13_Text" | "Libre_Baskerville" | "Libre_Bodoni" | "Libre_Caslon_Display" | "Libre_Caslon_Text" | "Libre_Franklin" | "Licorice" | "Life_Savers" | "Lilita_One" | "Lily_Script_One" | "Limelight" | "Linden_Hill" | "Linefont" | "Lisu_Bosa" | "Literata" | "Liu_Jian_Mao_Cao" | "Livvic" | "Lobster" | "Lobster_Two" | "Londrina_Outline" | "Londrina_Shadow" | "Londrina_Sketch" | "Londrina_Solid" | "Long_Cang" | "Lora" | "Love_Light" | "Love_Ya_Like_A_Sister" | "Loved_by_the_King" | "Lovers_Quarrel" | "Luckiest_Guy" | "Lugrasimo" | "Lumanosimo" | "Lunasima" | "Lusitana" | "Lustria" | "Luxurious_Roman" | "Luxurious_Script" | "M_PLUS_1" | "M_PLUS_1_Code" | "M_PLUS_1p" | "M_PLUS_2" | "M_PLUS_Code_Latin" | "M_PLUS_Rounded_1c" | "Ma_Shan_Zheng" | "Macondo" | "Macondo_Swash_Caps" | "Mada" | "Madimi_One" | "Magra" | "Maiden_Orange" | "Maitree" | "Major_Mono_Display" | "Mako" | "Mali" | "Mallanna" | "Maname" | "Mandali" | "Manjari" | "Manrope" | "Mansalva" | "Manuale" | "Marcellus" | "Marcellus_SC" | "Marck_Script" | "Margarine" | "Marhey" | "Markazi_Text" | "Marko_One" | "Marmelad" | "Martel" | "Martel_Sans" | "Martian_Mono" | "Marvel" | "Mate" | "Mate_SC" | "Matemasie" | "Maven_Pro" | "McLaren" | "Mea_Culpa" | "Meddon" | "MedievalSharp" | "Medula_One" | "Meera_Inimai" | "Megrim" | "Meie_Script" | "Meow_Script" | "Merienda" | "Merriweather" | "Merriweather_Sans" | "Metal" | "Metal_Mania" | "Metamorphous" | "Metrophobic" | "Michroma" | "Micro_5" | "Micro_5_Charted" | "Milonga" | "Miltonian" | "Miltonian_Tattoo" | "Mina" | "Mingzat" | "Miniver" | "Miriam_Libre" | "Mirza" | "Miss_Fajardose" | "Mitr" | "Mochiy_Pop_One" | "Mochiy_Pop_P_One" | "Modak" | "Modern_Antiqua" | "Moderustic" | "Mogra" | "Mohave" | "Moirai_One" | "Molengo" | "Molle" | "Mona_Sans" | "Monda" | "Monofett" | "Monomaniac_One" | "Monoton" | "Monsieur_La_Doulaise" | "Montaga" | "Montagu_Slab" | "MonteCarlo" | "Montez" | "Montserrat" | "Montserrat_Alternates" | "Montserrat_Subrayada" | "Moo_Lah_Lah" | "Mooli" | "Moon_Dance" | "Moul" | "Moulpali" | "Mountains_of_Christmas" | "Mouse_Memoirs" | "Mr_Bedfort" | "Mr_Dafoe" | "Mr_De_Haviland" | "Mrs_Saint_Delafield" | "Mrs_Sheppards" | "Ms_Madi" | "Mukta" | "Mukta_Mahee" | "Mukta_Malar" | "Mukta_Vaani" | "Mulish" | "Murecho" | "MuseoModerno" | "My_Soul" | "Mynerve" | "Mystery_Quest" | "NTR" | "Nabla" | "Namdhinggo" | "Nanum_Brush_Script" | "Nanum_Gothic" | "Nanum_Gothic_Coding" | "Nanum_Myeongjo" | "Nanum_Pen_Script" | "Narnoor" | "Neonderthaw" | "Nerko_One" | "Neucha" | "Neuton" | "New_Amsterdam" | "New_Rocker" | "New_Tegomin" | "News_Cycle" | "Newsreader" | "Niconne" | "Niramit" | "Nixie_One" | "Nobile" | "Nokora" | "Norican" | "Nosifer" | "Notable" | "Nothing_You_Could_Do" | "Noticia_Text" | "Noto_Color_Emoji" | "Noto_Emoji" | "Noto_Kufi_Arabic" | "Noto_Music" | "Noto_Naskh_Arabic" | "Noto_Nastaliq_Urdu" | "Noto_Rashi_Hebrew" | "Noto_Sans" | "Noto_Sans_Adlam" | "Noto_Sans_Adlam_Unjoined" | "Noto_Sans_Anatolian_Hieroglyphs" | "Noto_Sans_Arabic" | "Noto_Sans_Armenian" | "Noto_Sans_Avestan" | "Noto_Sans_Balinese" | "Noto_Sans_Bamum" | "Noto_Sans_Bassa_Vah" | "Noto_Sans_Batak" | "Noto_Sans_Bengali" | "Noto_Sans_Bhaiksuki" | "Noto_Sans_Brahmi" | "Noto_Sans_Buginese" | "Noto_Sans_Buhid" | "Noto_Sans_Canadian_Aboriginal" | "Noto_Sans_Carian" | "Noto_Sans_Caucasian_Albanian" | "Noto_Sans_Chakma" | "Noto_Sans_Cham" | "Noto_Sans_Cherokee" | "Noto_Sans_Chorasmian" | "Noto_Sans_Coptic" | "Noto_Sans_Cuneiform" | "Noto_Sans_Cypriot" | "Noto_Sans_Cypro_Minoan" | "Noto_Sans_Deseret" | "Noto_Sans_Devanagari" | "Noto_Sans_Display" | "Noto_Sans_Duployan" | "Noto_Sans_Egyptian_Hieroglyphs" | "Noto_Sans_Elbasan" | "Noto_Sans_Elymaic" | "Noto_Sans_Ethiopic" | "Noto_Sans_Georgian" | "Noto_Sans_Glagolitic" | "Noto_Sans_Gothic" | "Noto_Sans_Grantha" | "Noto_Sans_Gujarati" | "Noto_Sans_Gunjala_Gondi" | "Noto_Sans_Gurmukhi" | "Noto_Sans_HK" | "Noto_Sans_Hanifi_Rohingya" | "Noto_Sans_Hanunoo" | "Noto_Sans_Hatran" | "Noto_Sans_Hebrew" | "Noto_Sans_Imperial_Aramaic" | "Noto_Sans_Indic_Siyaq_Numbers" | "Noto_Sans_Inscriptional_Pahlavi" | "Noto_Sans_Inscriptional_Parthian" | "Noto_Sans_JP" | "Noto_Sans_Javanese" | "Noto_Sans_KR" | "Noto_Sans_Kaithi" | "Noto_Sans_Kannada" | "Noto_Sans_Kawi" | "Noto_Sans_Kayah_Li" | "Noto_Sans_Kharoshthi" | "Noto_Sans_Khmer" | "Noto_Sans_Khojki" | "Noto_Sans_Khudawadi" | "Noto_Sans_Lao" | "Noto_Sans_Lao_Looped" | "Noto_Sans_Lepcha" | "Noto_Sans_Limbu" | "Noto_Sans_Linear_A" | "Noto_Sans_Linear_B" | "Noto_Sans_Lisu" | "Noto_Sans_Lycian" | "Noto_Sans_Lydian" | "Noto_Sans_Mahajani" | "Noto_Sans_Malayalam" | "Noto_Sans_Mandaic" | "Noto_Sans_Manichaean" | "Noto_Sans_Marchen" | "Noto_Sans_Masaram_Gondi" | "Noto_Sans_Math" | "Noto_Sans_Mayan_Numerals" | "Noto_Sans_Medefaidrin" | "Noto_Sans_Meetei_Mayek" | "Noto_Sans_Mende_Kikakui" | "Noto_Sans_Meroitic" | "Noto_Sans_Miao" | "Noto_Sans_Modi" | "Noto_Sans_Mongolian" | "Noto_Sans_Mono" | "Noto_Sans_Mro" | "Noto_Sans_Multani" | "Noto_Sans_Myanmar" | "Noto_Sans_NKo" | "Noto_Sans_NKo_Unjoined" | "Noto_Sans_Nabataean" | "Noto_Sans_Nag_Mundari" | "Noto_Sans_Nandinagari" | "Noto_Sans_New_Tai_Lue" | "Noto_Sans_Newa" | "Noto_Sans_Nushu" | "Noto_Sans_Ogham" | "Noto_Sans_Ol_Chiki" | "Noto_Sans_Old_Hungarian" | "Noto_Sans_Old_Italic" | "Noto_Sans_Old_North_Arabian" | "Noto_Sans_Old_Permic" | "Noto_Sans_Old_Persian" | "Noto_Sans_Old_Sogdian" | "Noto_Sans_Old_South_Arabian" | "Noto_Sans_Old_Turkic" | "Noto_Sans_Oriya" | "Noto_Sans_Osage" | "Noto_Sans_Osmanya" | "Noto_Sans_Pahawh_Hmong" | "Noto_Sans_Palmyrene" | "Noto_Sans_Pau_Cin_Hau" | "Noto_Sans_Phags_Pa" | "Noto_Sans_Phoenician" | "Noto_Sans_Psalter_Pahlavi" | "Noto_Sans_Rejang" | "Noto_Sans_Runic" | "Noto_Sans_SC" | "Noto_Sans_Samaritan" | "Noto_Sans_Saurashtra" | "Noto_Sans_Sharada" | "Noto_Sans_Shavian" | "Noto_Sans_Siddham" | "Noto_Sans_SignWriting" | "Noto_Sans_Sinhala" | "Noto_Sans_Sogdian" | "Noto_Sans_Sora_Sompeng" | "Noto_Sans_Soyombo" | "Noto_Sans_Sundanese" | "Noto_Sans_Syloti_Nagri" | "Noto_Sans_Symbols" | "Noto_Sans_Symbols_2" | "Noto_Sans_Syriac" | "Noto_Sans_Syriac_Eastern" | "Noto_Sans_TC" | "Noto_Sans_Tagalog" | "Noto_Sans_Tagbanwa" | "Noto_Sans_Tai_Le" | "Noto_Sans_Tai_Tham" | "Noto_Sans_Tai_Viet" | "Noto_Sans_Takri" | "Noto_Sans_Tamil" | "Noto_Sans_Tamil_Supplement" | "Noto_Sans_Tangsa" | "Noto_Sans_Telugu" | "Noto_Sans_Thaana" | "Noto_Sans_Thai" | "Noto_Sans_Thai_Looped" | "Noto_Sans_Tifinagh" | "Noto_Sans_Tirhuta" | "Noto_Sans_Ugaritic" | "Noto_Sans_Vai" | "Noto_Sans_Vithkuqi" | "Noto_Sans_Wancho" | "Noto_Sans_Warang_Citi" | "Noto_Sans_Yi" | "Noto_Sans_Zanabazar_Square" | "Noto_Serif" | "Noto_Serif_Ahom" | "Noto_Serif_Armenian" | "Noto_Serif_Balinese" | "Noto_Serif_Bengali" | "Noto_Serif_Devanagari" | "Noto_Serif_Display" | "Noto_Serif_Dogra" | "Noto_Serif_Ethiopic" | "Noto_Serif_Georgian" | "Noto_Serif_Grantha" | "Noto_Serif_Gujarati" | "Noto_Serif_Gurmukhi" | "Noto_Serif_HK" | "Noto_Serif_Hebrew" | "Noto_Serif_JP" | "Noto_Serif_KR" | "Noto_Serif_Kannada" | "Noto_Serif_Khitan_Small_Script" | "Noto_Serif_Khmer" | "Noto_Serif_Khojki" | "Noto_Serif_Lao" | "Noto_Serif_Makasar" | "Noto_Serif_Malayalam" | "Noto_Serif_Myanmar" | "Noto_Serif_NP_Hmong" | "Noto_Serif_Old_Uyghur" | "Noto_Serif_Oriya" | "Noto_Serif_Ottoman_Siyaq" | "Noto_Serif_SC" | "Noto_Serif_Sinhala" | "Noto_Serif_TC" | "Noto_Serif_Tamil" | "Noto_Serif_Tangut" | "Noto_Serif_Telugu" | "Noto_Serif_Thai" | "Noto_Serif_Tibetan" | "Noto_Serif_Toto" | "Noto_Serif_Vithkuqi" | "Noto_Serif_Yezidi" | "Noto_Traditional_Nushu" | "Noto_Znamenny_Musical_Notation" | "Nova_Cut" | "Nova_Flat" | "Nova_Mono" | "Nova_Oval" | "Nova_Round" | "Nova_Script" | "Nova_Slim" | "Nova_Square" | "Numans" | "Nunito" | "Nunito_Sans" | "Nuosu_SIL" | "Odibee_Sans" | "Odor_Mean_Chey" | "Offside" | "Oi" | "Ojuju" | "Old_Standard_TT" | "Oldenburg" | "Ole" | "Oleo_Script" | "Oleo_Script_Swash_Caps" | "Onest" | "Oooh_Baby" | "Open_Sans" | "Oranienbaum" | "Orbit" | "Orbitron" | "Oregano" | "Orelega_One" | "Orienta" | "Original_Surfer" | "Oswald" | "Outfit" | "Over_the_Rainbow" | "Overlock" | "Overlock_SC" | "Overpass" | "Overpass_Mono" | "Ovo" | "Oxanium" | "Oxygen" | "Oxygen_Mono" | "PT_Mono" | "PT_Sans" | "PT_Sans_Caption" | "PT_Sans_Narrow" | "PT_Serif" | "PT_Serif_Caption" | "Pacifico" | "Padauk" | "Padyakke_Expanded_One" | "Palanquin" | "Palanquin_Dark" | "Palette_Mosaic" | "Pangolin" | "Paprika" | "Parisienne" | "Parkinsans" | "Passero_One" | "Passion_One" | "Passions_Conflict" | "Pathway_Extreme" | "Pathway_Gothic_One" | "Patrick_Hand" | "Patrick_Hand_SC" | "Pattaya" | "Patua_One" | "Pavanam" | "Paytone_One" | "Peddana" | "Peralta" | "Permanent_Marker" | "Petemoss" | "Petit_Formal_Script" | "Petrona" | "Phetsarath" | "Philosopher" | "Phudu" | "Piazzolla" | "Piedra" | "Pinyon_Script" | "Pirata_One" | "Pixelify_Sans" | "Plaster" | "Platypi" | "Play" | "Playball" | "Playfair" | "Playfair_Display" | "Playfair_Display_SC" | "Playpen_Sans" | "Playwrite_AR" | "Playwrite_AT" | "Playwrite_AU_NSW" | "Playwrite_AU_QLD" | "Playwrite_AU_SA" | "Playwrite_AU_TAS" | "Playwrite_AU_VIC" | "Playwrite_BE_VLG" | "Playwrite_BE_WAL" | "Playwrite_BR" | "Playwrite_CA" | "Playwrite_CL" | "Playwrite_CO" | "Playwrite_CU" | "Playwrite_CZ" | "Playwrite_DE_Grund" | "Playwrite_DE_LA" | "Playwrite_DE_SAS" | "Playwrite_DE_VA" | "Playwrite_DK_Loopet" | "Playwrite_DK_Uloopet" | "Playwrite_ES" | "Playwrite_ES_Deco" | "Playwrite_FR_Moderne" | "Playwrite_FR_Trad" | "Playwrite_GB_J" | "Playwrite_GB_S" | "Playwrite_HR" | "Playwrite_HR_Lijeva" | "Playwrite_HU" | "Playwrite_ID" | "Playwrite_IE" | "Playwrite_IN" | "Playwrite_IS" | "Playwrite_IT_Moderna" | "Playwrite_IT_Trad" | "Playwrite_MX" | "Playwrite_NG_Modern" | "Playwrite_NL" | "Playwrite_NO" | "Playwrite_NZ" | "Playwrite_PE" | "Playwrite_PL" | "Playwrite_PT" | "Playwrite_RO" | "Playwrite_SK" | "Playwrite_TZ" | "Playwrite_US_Modern" | "Playwrite_US_Trad" | "Playwrite_VN" | "Playwrite_ZA" | "Plus_Jakarta_Sans" | "Podkova" | "Poetsen_One" | "Poiret_One" | "Poller_One" | "Poltawski_Nowy" | "Poly" | "Pompiere" | "Ponnala" | "Pontano_Sans" | "Poor_Story" | "Poppins" | "Port_Lligat_Sans" | "Port_Lligat_Slab" | "Potta_One" | "Pragati_Narrow" | "Praise" | "Prata" | "Preahvihear" | "Press_Start_2P" | "Pridi" | "Princess_Sofia" | "Prociono" | "Prompt" | "Prosto_One" | "Protest_Guerrilla" | "Protest_Revolution" | "Protest_Riot" | "Protest_Strike" | "Proza_Libre" | "Public_Sans" | "Puppies_Play" | "Puritan" | "Purple_Purse" | "Qahiri" | "Quando" | "Quantico" | "Quattrocento" | "Quattrocento_Sans" | "Questrial" | "Quicksand" | "Quintessential" | "Qwigley" | "Qwitcher_Grypen" | "REM" | "Racing_Sans_One" | "Radio_Canada" | "Radio_Canada_Big" | "Radley" | "Rajdhani" | "Rakkas" | "Raleway" | "Raleway_Dots" | "Ramabhadra" | "Ramaraja" | "Rambla" | "Rammetto_One" | "Rampart_One" | "Ranchers" | "Rancho" | "Ranga" | "Rasa" | "Rationale" | "Ravi_Prakash" | "Readex_Pro" | "Recursive" | "Red_Hat_Display" | "Red_Hat_Mono" | "Red_Hat_Text" | "Red_Rose" | "Redacted" | "Redacted_Script" | "Reddit_Mono" | "Reddit_Sans" | "Reddit_Sans_Condensed" | "Redressed" | "Reem_Kufi" | "Reem_Kufi_Fun" | "Reem_Kufi_Ink" | "Reenie_Beanie" | "Reggae_One" | "Rethink_Sans" | "Revalia" | "Rhodium_Libre" | "Ribeye" | "Ribeye_Marrow" | "Righteous" | "Risque" | "Road_Rage" | "Roboto" | "Roboto_Condensed" | "Roboto_Flex" | "Roboto_Mono" | "Roboto_Serif" | "Roboto_Slab" | "Rochester" | "Rock_3D" | "Rock_Salt" | "RocknRoll_One" | "Rokkitt" | "Romanesco" | "Ropa_Sans" | "Rosario" | "Rosarivo" | "Rouge_Script" | "Rowdies" | "Rozha_One" | "Rubik" | "Rubik_80s_Fade" | "Rubik_Beastly" | "Rubik_Broken_Fax" | "Rubik_Bubbles" | "Rubik_Burned" | "Rubik_Dirt" | "Rubik_Distressed" | "Rubik_Doodle_Shadow" | "Rubik_Doodle_Triangles" | "Rubik_Gemstones" | "Rubik_Glitch" | "Rubik_Glitch_Pop" | "Rubik_Iso" | "Rubik_Lines" | "Rubik_Maps" | "Rubik_Marker_Hatch" | "Rubik_Maze" | "Rubik_Microbe" | "Rubik_Mono_One" | "Rubik_Moonrocks" | "Rubik_Pixels" | "Rubik_Puddles" | "Rubik_Scribble" | "Rubik_Spray_Paint" | "Rubik_Storm" | "Rubik_Vinyl" | "Rubik_Wet_Paint" | "Ruda" | "Rufina" | "Ruge_Boogie" | "Ruluko" | "Rum_Raisin" | "Ruslan_Display" | "Russo_One" | "Ruthie" | "Ruwudu" | "Rye" | "STIX_Two_Text" | "SUSE" | "Sacramento" | "Sahitya" | "Sail" | "Saira" | "Saira_Condensed" | "Saira_Extra_Condensed" | "Saira_Semi_Condensed" | "Saira_Stencil_One" | "Salsa" | "Sanchez" | "Sancreek" | "Sankofa_Display" | "Sansita" | "Sansita_Swashed" | "Sarabun" | "Sarala" | "Sarina" | "Sarpanch" | "Sassy_Frass" | "Satisfy" | "Sawarabi_Gothic" | "Sawarabi_Mincho" | "Scada" | "Scheherazade_New" | "Schibsted_Grotesk" | "Schoolbell" | "Scope_One" | "Seaweed_Script" | "Secular_One" | "Sedan" | "Sedan_SC" | "Sedgwick_Ave" | "Sedgwick_Ave_Display" | "Sen" | "Send_Flowers" | "Sevillana" | "Seymour_One" | "Shadows_Into_Light" | "Shadows_Into_Light_Two" | "Shalimar" | "Shantell_Sans" | "Shanti" | "Share" | "Share_Tech" | "Share_Tech_Mono" | "Shippori_Antique" | "Shippori_Antique_B1" | "Shippori_Mincho" | "Shippori_Mincho_B1" | "Shizuru" | "Shojumaru" | "Short_Stack" | "Shrikhand" | "Siemreap" | "Sigmar" | "Sigmar_One" | "Signika" | "Signika_Negative" | "Silkscreen" | "Simonetta" | "Single_Day" | "Sintony" | "Sirin_Stencil" | "Six_Caps" | "Sixtyfour" | "Sixtyfour_Convergence" | "Skranji" | "Slabo_13px" | "Slabo_27px" | "Slackey" | "Slackside_One" | "Smokum" | "Smooch" | "Smooch_Sans" | "Smythe" | "Sniglet" | "Snippet" | "Snowburst_One" | "Sofadi_One" | "Sofia" | "Sofia_Sans" | "Sofia_Sans_Condensed" | "Sofia_Sans_Extra_Condensed" | "Sofia_Sans_Semi_Condensed" | "Solitreo" | "Solway" | "Sometype_Mono" | "Song_Myung" | "Sono" | "Sonsie_One" | "Sora" | "Sorts_Mill_Goudy" | "Sour_Gummy" | "Source_Code_Pro" | "Source_Sans_3" | "Source_Serif_4" | "Space_Grotesk" | "Space_Mono" | "Special_Elite" | "Spectral" | "Spectral_SC" | "Spicy_Rice" | "Spinnaker" | "Spirax" | "Splash" | "Spline_Sans" | "Spline_Sans_Mono" | "Squada_One" | "Square_Peg" | "Sree_Krushnadevaraya" | "Sriracha" | "Srisakdi" | "Staatliches" | "Stalemate" | "Stalinist_One" | "Stardos_Stencil" | "Stick" | "Stick_No_Bills" | "Stint_Ultra_Condensed" | "Stint_Ultra_Expanded" | "Stoke" | "Strait" | "Style_Script" | "Stylish" | "Sue_Ellen_Francisco" | "Suez_One" | "Sulphur_Point" | "Sumana" | "Sunflower" | "Sunshiney" | "Supermercado_One" | "Sura" | "Suranna" | "Suravaram" | "Suwannaphum" | "Swanky_and_Moo_Moo" | "Syncopate" | "Syne" | "Syne_Mono" | "Syne_Tactile" | "Tac_One" | "Tai_Heritage_Pro" | "Tajawal" | "Tangerine" | "Tapestry" | "Taprom" | "Tauri" | "Taviraj" | "Teachers" | "Teko" | "Tektur" | "Telex" | "Tenali_Ramakrishna" | "Tenor_Sans" | "Text_Me_One" | "Texturina" | "Thasadith" | "The_Girl_Next_Door" | "The_Nautigal" | "Tienne" | "Tillana" | "Tilt_Neon" | "Tilt_Prism" | "Tilt_Warp" | "Timmana" | "Tinos" | "Tiny5" | "Tiro_Bangla" | "Tiro_Devanagari_Hindi" | "Tiro_Devanagari_Marathi" | "Tiro_Devanagari_Sanskrit" | "Tiro_Gurmukhi" | "Tiro_Kannada" | "Tiro_Tamil" | "Tiro_Telugu" | "Titan_One" | "Titillium_Web" | "Tomorrow" | "Tourney" | "Trade_Winds" | "Train_One" | "Trirong" | "Trispace" | "Trocchi" | "Trochut" | "Truculenta" | "Trykker" | "Tsukimi_Rounded" | "Tulpen_One" | "Turret_Road" | "Twinkle_Star" | "Ubuntu" | "Ubuntu_Condensed" | "Ubuntu_Mono" | "Ubuntu_Sans" | "Ubuntu_Sans_Mono" | "Uchen" | "Ultra" | "Unbounded" | "Uncial_Antiqua" | "Underdog" | "Unica_One" | "UnifrakturCook" | "UnifrakturMaguntia" | "Unkempt" | "Unlock" | "Unna" | "Updock" | "Urbanist" | "VT323" | "Vampiro_One" | "Varela" | "Varela_Round" | "Varta" | "Vast_Shadow" | "Vazirmatn" | "Vesper_Libre" | "Viaoda_Libre" | "Vibes" | "Vibur" | "Victor_Mono" | "Vidaloka" | "Viga" | "Vina_Sans" | "Voces" | "Volkhov" | "Vollkorn" | "Vollkorn_SC" | "Voltaire" | "Vujahday_Script" | "Waiting_for_the_Sunrise" | "Wallpoet" | "Walter_Turncoat" | "Warnes" | "Water_Brush" | "Waterfall" | "Wavefont" | "Wellfleet" | "Wendy_One" | "Whisper" | "WindSong" | "Wire_One" | "Wittgenstein" | "Wix_Madefor_Display" | "Wix_Madefor_Text" | "Work_Sans" | "Workbench" | "Xanh_Mono" | "Yaldevi" | "Yanone_Kaffeesatz" | "Yantramanav" | "Yarndings_12" | "Yarndings_12_Charted" | "Yarndings_20" | "Yarndings_20_Charted" | "Yatra_One" | "Yellowtail" | "Yeon_Sung" | "Yeseva_One" | "Yesteryear" | "Yomogi" | "Young_Serif" | "Yrsa" | "Ysabeau" | "Ysabeau_Infant" | "Ysabeau_Office" | "Ysabeau_SC" | "Yuji_Boku" | "Yuji_Hentaigana_Akari" | "Yuji_Hentaigana_Akebono" | "Yuji_Mai" | "Yuji_Syuku" | "Yusei_Magic" | "ZCOOL_KuaiLe" | "ZCOOL_QingKe_HuangYou" | "ZCOOL_XiaoWei" | "Zain" | "Zen_Antique" | "Zen_Antique_Soft" | "Zen_Dots" | "Zen_Kaku_Gothic_Antique" | "Zen_Kaku_Gothic_New" | "Zen_Kurenaido" | "Zen_Loop" | "Zen_Maru_Gothic" | "Zen_Old_Mincho" | "Zen_Tokyo_Zoo" | "Zeyada" | "Zhi_Mang_Xing" | "Zilla_Slab" | "Zilla_Slab_Highlight"; }; sizes?: { base?: { lineHeight?: string; size?: string; }; empty-screen-title?: { lineHeight?: string; size?: string; }; error-screen-title?: { lineHeight?: string; size?: string; }; headline?: { lineHeight?: string; size?: string; }; sm?: { lineHeight?: string; size?: string; }; xs?: { lineHeight?: string; size?: string; }; }; }; mode?: "dark" | "light"; other?: { radius?: string; root-padding-horizontal?: string; root-padding-vertical?: string; }; }; ``` The theme of the embed. currently support `light` and `dark`. ##### theme.colors? ```ts optional colors: { dark?: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; light?: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; }; ``` ##### theme.colors.dark? ```ts optional dark: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; ``` ##### theme.colors.dark.account-edit-link? ```ts optional account-edit-link: string; ``` ##### theme.colors.dark.background? ```ts optional background: string; ``` ##### theme.colors.dark.border? ```ts optional border: string; ``` ##### theme.colors.dark.border-focus? ```ts optional border-focus: string; ``` ##### theme.colors.dark.destructive? ```ts optional destructive: string; ``` ##### theme.colors.dark.destructive-foreground? ```ts optional destructive-foreground: string; ``` ##### theme.colors.dark.foreground? ```ts optional foreground: string; ``` ##### theme.colors.dark.input? ```ts optional input: string; ``` ##### theme.colors.dark.input-foreground? ```ts optional input-foreground: string; ``` ##### theme.colors.dark.muted-foreground? ```ts optional muted-foreground: string; ``` ##### theme.colors.dark.primary? ```ts optional primary: string; ``` ##### theme.colors.dark.primary-foreground? ```ts optional primary-foreground: string; ``` ##### theme.colors.dark.ring? ```ts optional ring: string; ``` ##### theme.colors.dark.secondary? ```ts optional secondary: string; ``` ##### theme.colors.dark.secondary-foreground? ```ts optional secondary-foreground: string; ``` ##### theme.colors.light? ```ts optional light: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; ``` ##### theme.colors.light.account-edit-link? ```ts optional account-edit-link: string; ``` ##### theme.colors.light.background? ```ts optional background: string; ``` ##### theme.colors.light.border? ```ts optional border: string; ``` ##### theme.colors.light.border-focus? ```ts optional border-focus: string; ``` ##### theme.colors.light.destructive? ```ts optional destructive: string; ``` ##### theme.colors.light.destructive-foreground? ```ts optional destructive-foreground: string; ``` ##### theme.colors.light.foreground? ```ts optional foreground: string; ``` ##### theme.colors.light.input? ```ts optional input: string; ``` ##### theme.colors.light.input-foreground? ```ts optional input-foreground: string; ``` ##### theme.colors.light.muted-foreground? ```ts optional muted-foreground: string; ``` ##### theme.colors.light.primary? ```ts optional primary: string; ``` ##### theme.colors.light.primary-foreground? ```ts optional primary-foreground: string; ``` ##### theme.colors.light.ring? ```ts optional ring: string; ``` ##### theme.colors.light.secondary? ```ts optional secondary: string; ``` ##### theme.colors.light.secondary-foreground? ```ts optional secondary-foreground: string; ``` ##### theme.font? ```ts optional font: { fontFamily?: | { system: string; } | { google?: | "ABeeZee" | "ADLaM_Display" | "AR_One_Sans" | "Abel" | "Abhaya_Libre" | "Aboreto" | "Abril_Fatface" | "Abyssinica_SIL" | "Aclonica" | "Acme" | "Actor" | "Adamina" | "Advent_Pro" | "Afacad" | "Afacad_Flux" | "Agbalumo" | "Agdasima" | "Aguafina_Script" | "Akatab" | "Akaya_Kanadaka" | "Akaya_Telivigala" | "Akronim" | "Akshar" | "Aladin" | "Alata" | "Alatsi" | "Albert_Sans" | "Aldrich" | "Alef" | "Alegreya" | "Alegreya_SC" | "Alegreya_Sans" | "Alegreya_Sans_SC" | "Aleo" | "Alex_Brush" | "Alexandria" | "Alfa_Slab_One" | "Alice" | "Alike" | "Alike_Angular" | "Alkalami" | "Alkatra" | "Allan" | "Allerta" | "Allerta_Stencil" | "Allison" | "Allura" | "Almarai" | "Almendra" | "Almendra_Display" | "Almendra_SC" | "Alumni_Sans" | "Alumni_Sans_Collegiate_One" | "Alumni_Sans_Inline_One" | "Alumni_Sans_Pinstripe" | "Amarante" | "Amaranth" | "Amatic_SC" | "Amethysta" | "Amiko" | "Amiri" | "Amiri_Quran" | "Amita" | "Anaheim" | "Andada_Pro" | "Andika" | "Anek_Bangla" | "Anek_Devanagari" | "Anek_Gujarati" | "Anek_Gurmukhi" | "Anek_Kannada" | "Anek_Latin" | "Anek_Malayalam" | "Anek_Odia" | "Anek_Tamil" | "Anek_Telugu" | "Angkor" | "Annapurna_SIL" | "Annie_Use_Your_Telescope" | "Anonymous_Pro" | "Anta" | "Antic" | "Antic_Didone" | "Antic_Slab" | "Anton" | "Anton_SC" | "Antonio" | "Anuphan" | "Anybody" | "Aoboshi_One" | "Arapey" | "Arbutus" | "Arbutus_Slab" | "Architects_Daughter" | "Archivo" | "Archivo_Black" | "Archivo_Narrow" | "Are_You_Serious" | "Aref_Ruqaa" | "Aref_Ruqaa_Ink" | "Arima" | "Arimo" | "Arizonia" | "Armata" | "Arsenal" | "Arsenal_SC" | "Artifika" | "Arvo" | "Arya" | "Asap" | "Asap_Condensed" | "Asar" | "Asset" | "Assistant" | "Astloch" | "Asul" | "Athiti" | "Atkinson_Hyperlegible" | "Atma" | "Atomic_Age" | "Aubrey" | "Audiowide" | "Autour_One" | "Average" | "Average_Sans" | "Averia_Gruesa_Libre" | "Averia_Libre" | "Averia_Sans_Libre" | "Averia_Serif_Libre" | "Azeret_Mono" | "B612" | "B612_Mono" | "BIZ_UDGothic" | "BIZ_UDMincho" | "BIZ_UDPGothic" | "BIZ_UDPMincho" | "Babylonica" | "Bacasime_Antique" | "Bad_Script" | "Bagel_Fat_One" | "Bahiana" | "Bahianita" | "Bai_Jamjuree" | "Bakbak_One" | "Ballet" | "Baloo_2" | "Baloo_Bhai_2" | "Baloo_Bhaijaan_2" | "Baloo_Bhaina_2" | "Baloo_Chettan_2" | "Baloo_Da_2" | "Baloo_Paaji_2" | "Baloo_Tamma_2" | "Baloo_Tammudu_2" | "Baloo_Thambi_2" | "Balsamiq_Sans" | "Balthazar" | "Bangers" | "Barlow" | "Barlow_Condensed" | "Barlow_Semi_Condensed" | "Barriecito" | "Barrio" | "Basic" | "Baskervville" | "Baskervville_SC" | "Battambang" | "Baumans" | "Bayon" | "Be_Vietnam_Pro" | "Beau_Rivage" | "Bebas_Neue" | "Beiruti" | "Belanosima" | "Belgrano" | "Bellefair" | "Belleza" | "Bellota" | "Bellota_Text" | "BenchNine" | "Benne" | "Bentham" | "Berkshire_Swash" | "Besley" | "Beth_Ellen" | "Bevan" | "BhuTuka_Expanded_One" | "Big_Shoulders_Display" | "Big_Shoulders_Inline_Display" | "Big_Shoulders_Inline_Text" | "Big_Shoulders_Stencil_Display" | "Big_Shoulders_Stencil_Text" | "Big_Shoulders_Text" | "Bigelow_Rules" | "Bigshot_One" | "Bilbo" | "Bilbo_Swash_Caps" | "BioRhyme" | "BioRhyme_Expanded" | "Birthstone" | "Birthstone_Bounce" | "Biryani" | "Bitter" | "Black_And_White_Picture" | "Black_Han_Sans" | "Black_Ops_One" | "Blaka" | "Blaka_Hollow" | "Blaka_Ink" | "Blinker" | "Bodoni_Moda" | "Bodoni_Moda_SC" | "Bokor" | "Bona_Nova" | "Bona_Nova_SC" | "Bonbon" | "Bonheur_Royale" | "Boogaloo" | "Borel" | "Bowlby_One" | "Bowlby_One_SC" | "Braah_One" | "Brawler" | "Bree_Serif" | "Bricolage_Grotesque" | "Bruno_Ace" | "Bruno_Ace_SC" | "Brygada_1918" | "Bubblegum_Sans" | "Bubbler_One" | "Buda" | "Buenard" | "Bungee" | "Bungee_Hairline" | "Bungee_Inline" | "Bungee_Outline" | "Bungee_Shade" | "Bungee_Spice" | "Bungee_Tint" | "Butcherman" | "Butterfly_Kids" | "Cabin" | "Cabin_Condensed" | "Cabin_Sketch" | "Cactus_Classical_Serif" | "Caesar_Dressing" | "Cagliostro" | "Cairo" | "Cairo_Play" | "Caladea" | "Calistoga" | "Calligraffitti" | "Cambay" | "Cambo" | "Candal" | "Cantarell" | "Cantata_One" | "Cantora_One" | "Caprasimo" | "Capriola" | "Caramel" | "Carattere" | "Cardo" | "Carlito" | "Carme" | "Carrois_Gothic" | "Carrois_Gothic_SC" | "Carter_One" | "Castoro" | "Castoro_Titling" | "Catamaran" | "Caudex" | "Caveat" | "Caveat_Brush" | "Cedarville_Cursive" | "Ceviche_One" | "Chakra_Petch" | "Changa" | "Changa_One" | "Chango" | "Charis_SIL" | "Charm" | "Charmonman" | "Chathura" | "Chau_Philomene_One" | "Chela_One" | "Chelsea_Market" | "Chenla" | "Cherish" | "Cherry_Bomb_One" | "Cherry_Cream_Soda" | "Cherry_Swash" | "Chewy" | "Chicle" | "Chilanka" | "Chivo" | "Chivo_Mono" | "Chocolate_Classical_Sans" | "Chokokutai" | "Chonburi" | "Cinzel" | "Cinzel_Decorative" | "Clicker_Script" | "Climate_Crisis" | "Coda" | "Codystar" | "Coiny" | "Combo" | "Comfortaa" | "Comforter" | "Comforter_Brush" | "Comic_Neue" | "Coming_Soon" | "Comme" | "Commissioner" | "Concert_One" | "Condiment" | "Content" | "Contrail_One" | "Convergence" | "Cookie" | "Copse" | "Corben" | "Corinthia" | "Cormorant" | "Cormorant_Garamond" | "Cormorant_Infant" | "Cormorant_SC" | "Cormorant_Unicase" | "Cormorant_Upright" | "Courgette" | "Courier_Prime" | "Cousine" | "Coustard" | "Covered_By_Your_Grace" | "Crafty_Girls" | "Creepster" | "Crete_Round" | "Crimson_Pro" | "Crimson_Text" | "Croissant_One" | "Crushed" | "Cuprum" | "Cute_Font" | "Cutive" | "Cutive_Mono" | "DM_Mono" | "DM_Sans" | "DM_Serif_Display" | "DM_Serif_Text" | "Dai_Banna_SIL" | "Damion" | "Dancing_Script" | "Danfo" | "Dangrek" | "Darker_Grotesque" | "Darumadrop_One" | "David_Libre" | "Dawning_of_a_New_Day" | "Days_One" | "Dekko" | "Dela_Gothic_One" | "Delicious_Handrawn" | "Delius" | "Delius_Swash_Caps" | "Delius_Unicase" | "Della_Respira" | "Denk_One" | "Devonshire" | "Dhurjati" | "Didact_Gothic" | "Diphylleia" | "Diplomata" | "Diplomata_SC" | "Do_Hyeon" | "Dokdo" | "Domine" | "Donegal_One" | "Dongle" | "Doppio_One" | "Dorsa" | "Dosis" | "DotGothic16" | "Doto" | "Dr_Sugiyama" | "Duru_Sans" | "DynaPuff" | "Dynalight" | "EB_Garamond" | "Eagle_Lake" | "East_Sea_Dokdo" | "Eater" | "Economica" | "Eczar" | "Edu_AU_VIC_WA_NT_Arrows" | "Edu_AU_VIC_WA_NT_Dots" | "Edu_AU_VIC_WA_NT_Guides" | "Edu_AU_VIC_WA_NT_Hand" | "Edu_AU_VIC_WA_NT_Pre" | "Edu_NSW_ACT_Foundation" | "Edu_QLD_Beginner" | "Edu_SA_Beginner" | "Edu_TAS_Beginner" | "Edu_VIC_WA_NT_Beginner" | "El_Messiri" | "Electrolize" | "Elsie" | "Elsie_Swash_Caps" | "Emblema_One" | "Emilys_Candy" | "Encode_Sans" | "Encode_Sans_Condensed" | "Encode_Sans_Expanded" | "Encode_Sans_SC" | "Encode_Sans_Semi_Condensed" | "Encode_Sans_Semi_Expanded" | "Engagement" | "Englebert" | "Enriqueta" | "Ephesis" | "Epilogue" | "Erica_One" | "Esteban" | "Estonia" | "Euphoria_Script" | "Ewert" | "Exo" | "Exo_2" | "Expletus_Sans" | "Explora" | "Faculty_Glyphic" | "Fahkwang" | "Familjen_Grotesk" | "Fanwood_Text" | "Farro" | "Farsan" | "Fascinate" | "Fascinate_Inline" | "Faster_One" | "Fasthand" | "Fauna_One" | "Faustina" | "Federant" | "Federo" | "Felipa" | "Fenix" | "Festive" | "Figtree" | "Finger_Paint" | "Finlandica" | "Fira_Code" | "Fira_Mono" | "Fira_Sans" | "Fira_Sans_Condensed" | "Fira_Sans_Extra_Condensed" | "Fjalla_One" | "Fjord_One" | "Flamenco" | "Flavors" | "Fleur_De_Leah" | "Flow_Block" | "Flow_Circular" | "Flow_Rounded" | "Foldit" | "Fondamento" | "Fontdiner_Swanky" | "Forum" | "Fragment_Mono" | "Francois_One" | "Frank_Ruhl_Libre" | "Fraunces" | "Freckle_Face" | "Fredericka_the_Great" | "Fredoka" | "Freehand" | "Freeman" | "Fresca" | "Frijole" | "Fruktur" | "Fugaz_One" | "Fuggles" | "Funnel_Display" | "Funnel_Sans" | "Fustat" | "Fuzzy_Bubbles" | "GFS_Didot" | "GFS_Neohellenic" | "Ga_Maamli" | "Gabarito" | "Gabriela" | "Gaegu" | "Gafata" | "Gajraj_One" | "Galada" | "Galdeano" | "Galindo" | "Gamja_Flower" | "Gantari" | "Gasoek_One" | "Gayathri" | "Geist" | "Geist_Mono" | "Gelasio" | "Gemunu_Libre" | "Genos" | "Gentium_Book_Plus" | "Gentium_Plus" | "Geo" | "Geologica" | "Georama" | "Geostar" | "Geostar_Fill" | "Germania_One" | "Gideon_Roman" | "Gidugu" | "Gilda_Display" | "Girassol" | "Give_You_Glory" | "Glass_Antiqua" | "Glegoo" | "Gloock" | "Gloria_Hallelujah" | "Glory" | "Gluten" | "Goblin_One" | "Gochi_Hand" | "Goldman" | "Golos_Text" | "Gorditas" | "Gothic_A1" | "Gotu" | "Goudy_Bookletter_1911" | "Gowun_Batang" | "Gowun_Dodum" | "Graduate" | "Grand_Hotel" | "Grandiflora_One" | "Grandstander" | "Grape_Nuts" | "Gravitas_One" | "Great_Vibes" | "Grechen_Fuemen" | "Grenze" | "Grenze_Gotisch" | "Grey_Qo" | "Griffy" | "Gruppo" | "Gudea" | "Gugi" | "Gulzar" | "Gupter" | "Gurajada" | "Gwendolyn" | "Habibi" | "Hachi_Maru_Pop" | "Hahmlet" | "Halant" | "Hammersmith_One" | "Hanalei" | "Hanalei_Fill" | "Handjet" | "Handlee" | "Hanken_Grotesk" | "Hanuman" | "Happy_Monkey" | "Harmattan" | "Headland_One" | "Hedvig_Letters_Sans" | "Hedvig_Letters_Serif" | "Heebo" | "Henny_Penny" | "Hepta_Slab" | "Herr_Von_Muellerhoff" | "Hi_Melody" | "Hina_Mincho" | "Hind" | "Hind_Guntur" | "Hind_Madurai" | "Hind_Siliguri" | "Hind_Vadodara" | "Holtwood_One_SC" | "Homemade_Apple" | "Homenaje" | "Honk" | "Host_Grotesk" | "Hubballi" | "Hubot_Sans" | "Hurricane" | "IBM_Plex_Mono" | "IBM_Plex_Sans" | "IBM_Plex_Sans_Arabic" | "IBM_Plex_Sans_Condensed" | "IBM_Plex_Sans_Devanagari" | "IBM_Plex_Sans_Hebrew" | "IBM_Plex_Sans_JP" | "IBM_Plex_Sans_KR" | "IBM_Plex_Sans_Thai" | "IBM_Plex_Sans_Thai_Looped" | "IBM_Plex_Serif" | "IM_Fell_DW_Pica" | "IM_Fell_DW_Pica_SC" | "IM_Fell_Double_Pica" | "IM_Fell_Double_Pica_SC" | "IM_Fell_English" | "IM_Fell_English_SC" | "IM_Fell_French_Canon" | "IM_Fell_French_Canon_SC" | "IM_Fell_Great_Primer" | "IM_Fell_Great_Primer_SC" | "Ibarra_Real_Nova" | "Iceberg" | "Iceland" | "Imbue" | "Imperial_Script" | "Imprima" | "Inclusive_Sans" | "Inconsolata" | "Inder" | "Indie_Flower" | "Ingrid_Darling" | "Inika" | "Inknut_Antiqua" | "Inria_Sans" | "Inria_Serif" | "Inspiration" | "Instrument_Sans" | "Instrument_Serif" | "Inter" | "Inter_Tight" | "Irish_Grover" | "Island_Moments" | "Istok_Web" | "Italiana" | "Italianno" | "Itim" | "Jacquard_12" | "Jacquard_12_Charted" | "Jacquard_24" | "Jacquard_24_Charted" | "Jacquarda_Bastarda_9" | "Jacquarda_Bastarda_9_Charted" | "Jacques_Francois" | "Jacques_Francois_Shadow" | "Jaini" | "Jaini_Purva" | "Jaldi" | "Jaro" | "Jersey_10" | "Jersey_10_Charted" | "Jersey_15" | "Jersey_15_Charted" | "Jersey_20" | "Jersey_20_Charted" | "Jersey_25" | "Jersey_25_Charted" | "JetBrains_Mono" | "Jim_Nightshade" | "Joan" | "Jockey_One" | "Jolly_Lodger" | "Jomhuria" | "Jomolhari" | "Josefin_Sans" | "Josefin_Slab" | "Jost" | "Joti_One" | "Jua" | "Judson" | "Julee" | "Julius_Sans_One" | "Junge" | "Jura" | "Just_Another_Hand" | "Just_Me_Again_Down_Here" | "K2D" | "Kablammo" | "Kadwa" | "Kaisei_Decol" | "Kaisei_HarunoUmi" | "Kaisei_Opti" | "Kaisei_Tokumin" | "Kalam" | "Kalnia" | "Kalnia_Glaze" | "Kameron" | "Kanit" | "Kantumruy_Pro" | "Karantina" | "Karla" | "Karla_Tamil_Inclined" | "Karla_Tamil_Upright" | "Karma" | "Katibeh" | "Kaushan_Script" | "Kavivanar" | "Kavoon" | "Kay_Pho_Du" | "Kdam_Thmor_Pro" | "Keania_One" | "Kelly_Slab" | "Kenia" | "Khand" | "Khmer" | "Khula" | "Kings" | "Kirang_Haerang" | "Kite_One" | "Kiwi_Maru" | "Klee_One" | "Knewave" | "KoHo" | "Kodchasan" | "Kode_Mono" | "Koh_Santepheap" | "Kolker_Brush" | "Konkhmer_Sleokchher" | "Kosugi" | "Kosugi_Maru" | "Kotta_One" | "Koulen" | "Kranky" | "Kreon" | "Kristi" | "Krona_One" | "Krub" | "Kufam" | "Kulim_Park" | "Kumar_One" | "Kumar_One_Outline" | "Kumbh_Sans" | "Kurale" | "LXGW_WenKai_Mono_TC" | "LXGW_WenKai_TC" | "La_Belle_Aurore" | "Labrada" | "Lacquer" | "Laila" | "Lakki_Reddy" | "Lalezar" | "Lancelot" | "Langar" | "Lateef" | "Lato" | "Lavishly_Yours" | "League_Gothic" | "League_Script" | "League_Spartan" | "Leckerli_One" | "Ledger" | "Lekton" | "Lemon" | "Lemonada" | "Lexend" | "Lexend_Deca" | "Lexend_Exa" | "Lexend_Giga" | "Lexend_Mega" | "Lexend_Peta" | "Lexend_Tera" | "Lexend_Zetta" | "Libre_Barcode_128" | "Libre_Barcode_128_Text" | "Libre_Barcode_39" | "Libre_Barcode_39_Extended" | "Libre_Barcode_39_Extended_Text" | "Libre_Barcode_39_Text" | "Libre_Barcode_EAN13_Text" | "Libre_Baskerville" | "Libre_Bodoni" | "Libre_Caslon_Display" | "Libre_Caslon_Text" | "Libre_Franklin" | "Licorice" | "Life_Savers" | "Lilita_One" | "Lily_Script_One" | "Limelight" | "Linden_Hill" | "Linefont" | "Lisu_Bosa" | "Literata" | "Liu_Jian_Mao_Cao" | "Livvic" | "Lobster" | "Lobster_Two" | "Londrina_Outline" | "Londrina_Shadow" | "Londrina_Sketch" | "Londrina_Solid" | "Long_Cang" | "Lora" | "Love_Light" | "Love_Ya_Like_A_Sister" | "Loved_by_the_King" | "Lovers_Quarrel" | "Luckiest_Guy" | "Lugrasimo" | "Lumanosimo" | "Lunasima" | "Lusitana" | "Lustria" | "Luxurious_Roman" | "Luxurious_Script" | "M_PLUS_1" | "M_PLUS_1_Code" | "M_PLUS_1p" | "M_PLUS_2" | "M_PLUS_Code_Latin" | "M_PLUS_Rounded_1c" | "Ma_Shan_Zheng" | "Macondo" | "Macondo_Swash_Caps" | "Mada" | "Madimi_One" | "Magra" | "Maiden_Orange" | "Maitree" | "Major_Mono_Display" | "Mako" | "Mali" | "Mallanna" | "Maname" | "Mandali" | "Manjari" | "Manrope" | "Mansalva" | "Manuale" | "Marcellus" | "Marcellus_SC" | "Marck_Script" | "Margarine" | "Marhey" | "Markazi_Text" | "Marko_One" | "Marmelad" | "Martel" | "Martel_Sans" | "Martian_Mono" | "Marvel" | "Mate" | "Mate_SC" | "Matemasie" | "Maven_Pro" | "McLaren" | "Mea_Culpa" | "Meddon" | "MedievalSharp" | "Medula_One" | "Meera_Inimai" | "Megrim" | "Meie_Script" | "Meow_Script" | "Merienda" | "Merriweather" | "Merriweather_Sans" | "Metal" | "Metal_Mania" | "Metamorphous" | "Metrophobic" | "Michroma" | "Micro_5" | "Micro_5_Charted" | "Milonga" | "Miltonian" | "Miltonian_Tattoo" | "Mina" | "Mingzat" | "Miniver" | "Miriam_Libre" | "Mirza" | "Miss_Fajardose" | "Mitr" | "Mochiy_Pop_One" | "Mochiy_Pop_P_One" | "Modak" | "Modern_Antiqua" | "Moderustic" | "Mogra" | "Mohave" | "Moirai_One" | "Molengo" | "Molle" | "Mona_Sans" | "Monda" | "Monofett" | "Monomaniac_One" | "Monoton" | "Monsieur_La_Doulaise" | "Montaga" | "Montagu_Slab" | "MonteCarlo" | "Montez" | "Montserrat" | "Montserrat_Alternates" | "Montserrat_Subrayada" | "Moo_Lah_Lah" | "Mooli" | "Moon_Dance" | "Moul" | "Moulpali" | "Mountains_of_Christmas" | "Mouse_Memoirs" | "Mr_Bedfort" | "Mr_Dafoe" | "Mr_De_Haviland" | "Mrs_Saint_Delafield" | "Mrs_Sheppards" | "Ms_Madi" | "Mukta" | "Mukta_Mahee" | "Mukta_Malar" | "Mukta_Vaani" | "Mulish" | "Murecho" | "MuseoModerno" | "My_Soul" | "Mynerve" | "Mystery_Quest" | "NTR" | "Nabla" | "Namdhinggo" | "Nanum_Brush_Script" | "Nanum_Gothic" | "Nanum_Gothic_Coding" | "Nanum_Myeongjo" | "Nanum_Pen_Script" | "Narnoor" | "Neonderthaw" | "Nerko_One" | "Neucha" | "Neuton" | "New_Amsterdam" | "New_Rocker" | "New_Tegomin" | "News_Cycle" | "Newsreader" | "Niconne" | "Niramit" | "Nixie_One" | "Nobile" | "Nokora" | "Norican" | "Nosifer" | "Notable" | "Nothing_You_Could_Do" | "Noticia_Text" | "Noto_Color_Emoji" | "Noto_Emoji" | "Noto_Kufi_Arabic" | "Noto_Music" | "Noto_Naskh_Arabic" | "Noto_Nastaliq_Urdu" | "Noto_Rashi_Hebrew" | "Noto_Sans" | "Noto_Sans_Adlam" | "Noto_Sans_Adlam_Unjoined" | "Noto_Sans_Anatolian_Hieroglyphs" | "Noto_Sans_Arabic" | "Noto_Sans_Armenian" | "Noto_Sans_Avestan" | "Noto_Sans_Balinese" | "Noto_Sans_Bamum" | "Noto_Sans_Bassa_Vah" | "Noto_Sans_Batak" | "Noto_Sans_Bengali" | "Noto_Sans_Bhaiksuki" | "Noto_Sans_Brahmi" | "Noto_Sans_Buginese" | "Noto_Sans_Buhid" | "Noto_Sans_Canadian_Aboriginal" | "Noto_Sans_Carian" | "Noto_Sans_Caucasian_Albanian" | "Noto_Sans_Chakma" | "Noto_Sans_Cham" | "Noto_Sans_Cherokee" | "Noto_Sans_Chorasmian" | "Noto_Sans_Coptic" | "Noto_Sans_Cuneiform" | "Noto_Sans_Cypriot" | "Noto_Sans_Cypro_Minoan" | "Noto_Sans_Deseret" | "Noto_Sans_Devanagari" | "Noto_Sans_Display" | "Noto_Sans_Duployan" | "Noto_Sans_Egyptian_Hieroglyphs" | "Noto_Sans_Elbasan" | "Noto_Sans_Elymaic" | "Noto_Sans_Ethiopic" | "Noto_Sans_Georgian" | "Noto_Sans_Glagolitic" | "Noto_Sans_Gothic" | "Noto_Sans_Grantha" | "Noto_Sans_Gujarati" | "Noto_Sans_Gunjala_Gondi" | "Noto_Sans_Gurmukhi" | "Noto_Sans_HK" | "Noto_Sans_Hanifi_Rohingya" | "Noto_Sans_Hanunoo" | "Noto_Sans_Hatran" | "Noto_Sans_Hebrew" | "Noto_Sans_Imperial_Aramaic" | "Noto_Sans_Indic_Siyaq_Numbers" | "Noto_Sans_Inscriptional_Pahlavi" | "Noto_Sans_Inscriptional_Parthian" | "Noto_Sans_JP" | "Noto_Sans_Javanese" | "Noto_Sans_KR" | "Noto_Sans_Kaithi" | "Noto_Sans_Kannada" | "Noto_Sans_Kawi" | "Noto_Sans_Kayah_Li" | "Noto_Sans_Kharoshthi" | "Noto_Sans_Khmer" | "Noto_Sans_Khojki" | "Noto_Sans_Khudawadi" | "Noto_Sans_Lao" | "Noto_Sans_Lao_Looped" | "Noto_Sans_Lepcha" | "Noto_Sans_Limbu" | "Noto_Sans_Linear_A" | "Noto_Sans_Linear_B" | "Noto_Sans_Lisu" | "Noto_Sans_Lycian" | "Noto_Sans_Lydian" | "Noto_Sans_Mahajani" | "Noto_Sans_Malayalam" | "Noto_Sans_Mandaic" | "Noto_Sans_Manichaean" | "Noto_Sans_Marchen" | "Noto_Sans_Masaram_Gondi" | "Noto_Sans_Math" | "Noto_Sans_Mayan_Numerals" | "Noto_Sans_Medefaidrin" | "Noto_Sans_Meetei_Mayek" | "Noto_Sans_Mende_Kikakui" | "Noto_Sans_Meroitic" | "Noto_Sans_Miao" | "Noto_Sans_Modi" | "Noto_Sans_Mongolian" | "Noto_Sans_Mono" | "Noto_Sans_Mro" | "Noto_Sans_Multani" | "Noto_Sans_Myanmar" | "Noto_Sans_NKo" | "Noto_Sans_NKo_Unjoined" | "Noto_Sans_Nabataean" | "Noto_Sans_Nag_Mundari" | "Noto_Sans_Nandinagari" | "Noto_Sans_New_Tai_Lue" | "Noto_Sans_Newa" | "Noto_Sans_Nushu" | "Noto_Sans_Ogham" | "Noto_Sans_Ol_Chiki" | "Noto_Sans_Old_Hungarian" | "Noto_Sans_Old_Italic" | "Noto_Sans_Old_North_Arabian" | "Noto_Sans_Old_Permic" | "Noto_Sans_Old_Persian" | "Noto_Sans_Old_Sogdian" | "Noto_Sans_Old_South_Arabian" | "Noto_Sans_Old_Turkic" | "Noto_Sans_Oriya" | "Noto_Sans_Osage" | "Noto_Sans_Osmanya" | "Noto_Sans_Pahawh_Hmong" | "Noto_Sans_Palmyrene" | "Noto_Sans_Pau_Cin_Hau" | "Noto_Sans_Phags_Pa" | "Noto_Sans_Phoenician" | "Noto_Sans_Psalter_Pahlavi" | "Noto_Sans_Rejang" | "Noto_Sans_Runic" | "Noto_Sans_SC" | "Noto_Sans_Samaritan" | "Noto_Sans_Saurashtra" | "Noto_Sans_Sharada" | "Noto_Sans_Shavian" | "Noto_Sans_Siddham" | "Noto_Sans_SignWriting" | "Noto_Sans_Sinhala" | "Noto_Sans_Sogdian" | "Noto_Sans_Sora_Sompeng" | "Noto_Sans_Soyombo" | "Noto_Sans_Sundanese" | "Noto_Sans_Syloti_Nagri" | "Noto_Sans_Symbols" | "Noto_Sans_Symbols_2" | "Noto_Sans_Syriac" | "Noto_Sans_Syriac_Eastern" | "Noto_Sans_TC" | "Noto_Sans_Tagalog" | "Noto_Sans_Tagbanwa" | "Noto_Sans_Tai_Le" | "Noto_Sans_Tai_Tham" | "Noto_Sans_Tai_Viet" | "Noto_Sans_Takri" | "Noto_Sans_Tamil" | "Noto_Sans_Tamil_Supplement" | "Noto_Sans_Tangsa" | "Noto_Sans_Telugu" | "Noto_Sans_Thaana" | "Noto_Sans_Thai" | "Noto_Sans_Thai_Looped" | "Noto_Sans_Tifinagh" | "Noto_Sans_Tirhuta" | "Noto_Sans_Ugaritic" | "Noto_Sans_Vai" | "Noto_Sans_Vithkuqi" | "Noto_Sans_Wancho" | "Noto_Sans_Warang_Citi" | "Noto_Sans_Yi" | "Noto_Sans_Zanabazar_Square" | "Noto_Serif" | "Noto_Serif_Ahom" | "Noto_Serif_Armenian" | "Noto_Serif_Balinese" | "Noto_Serif_Bengali" | "Noto_Serif_Devanagari" | "Noto_Serif_Display" | "Noto_Serif_Dogra" | "Noto_Serif_Ethiopic" | "Noto_Serif_Georgian" | "Noto_Serif_Grantha" | "Noto_Serif_Gujarati" | "Noto_Serif_Gurmukhi" | "Noto_Serif_HK" | "Noto_Serif_Hebrew" | "Noto_Serif_JP" | "Noto_Serif_KR" | "Noto_Serif_Kannada" | "Noto_Serif_Khitan_Small_Script" | "Noto_Serif_Khmer" | "Noto_Serif_Khojki" | "Noto_Serif_Lao" | "Noto_Serif_Makasar" | "Noto_Serif_Malayalam" | "Noto_Serif_Myanmar" | "Noto_Serif_NP_Hmong" | "Noto_Serif_Old_Uyghur" | "Noto_Serif_Oriya" | "Noto_Serif_Ottoman_Siyaq" | "Noto_Serif_SC" | "Noto_Serif_Sinhala" | "Noto_Serif_TC" | "Noto_Serif_Tamil" | "Noto_Serif_Tangut" | "Noto_Serif_Telugu" | "Noto_Serif_Thai" | "Noto_Serif_Tibetan" | "Noto_Serif_Toto" | "Noto_Serif_Vithkuqi" | "Noto_Serif_Yezidi" | "Noto_Traditional_Nushu" | "Noto_Znamenny_Musical_Notation" | "Nova_Cut" | "Nova_Flat" | "Nova_Mono" | "Nova_Oval" | "Nova_Round" | "Nova_Script" | "Nova_Slim" | "Nova_Square" | "Numans" | "Nunito" | "Nunito_Sans" | "Nuosu_SIL" | "Odibee_Sans" | "Odor_Mean_Chey" | "Offside" | "Oi" | "Ojuju" | "Old_Standard_TT" | "Oldenburg" | "Ole" | "Oleo_Script" | "Oleo_Script_Swash_Caps" | "Onest" | "Oooh_Baby" | "Open_Sans" | "Oranienbaum" | "Orbit" | "Orbitron" | "Oregano" | "Orelega_One" | "Orienta" | "Original_Surfer" | "Oswald" | "Outfit" | "Over_the_Rainbow" | "Overlock" | "Overlock_SC" | "Overpass" | "Overpass_Mono" | "Ovo" | "Oxanium" | "Oxygen" | "Oxygen_Mono" | "PT_Mono" | "PT_Sans" | "PT_Sans_Caption" | "PT_Sans_Narrow" | "PT_Serif" | "PT_Serif_Caption" | "Pacifico" | "Padauk" | "Padyakke_Expanded_One" | "Palanquin" | "Palanquin_Dark" | "Palette_Mosaic" | "Pangolin" | "Paprika" | "Parisienne" | "Parkinsans" | "Passero_One" | "Passion_One" | "Passions_Conflict" | "Pathway_Extreme" | "Pathway_Gothic_One" | "Patrick_Hand" | "Patrick_Hand_SC" | "Pattaya" | "Patua_One" | "Pavanam" | "Paytone_One" | "Peddana" | "Peralta" | "Permanent_Marker" | "Petemoss" | "Petit_Formal_Script" | "Petrona" | "Phetsarath" | "Philosopher" | "Phudu" | "Piazzolla" | "Piedra" | "Pinyon_Script" | "Pirata_One" | "Pixelify_Sans" | "Plaster" | "Platypi" | "Play" | "Playball" | "Playfair" | "Playfair_Display" | "Playfair_Display_SC" | "Playpen_Sans" | "Playwrite_AR" | "Playwrite_AT" | "Playwrite_AU_NSW" | "Playwrite_AU_QLD" | "Playwrite_AU_SA" | "Playwrite_AU_TAS" | "Playwrite_AU_VIC" | "Playwrite_BE_VLG" | "Playwrite_BE_WAL" | "Playwrite_BR" | "Playwrite_CA" | "Playwrite_CL" | "Playwrite_CO" | "Playwrite_CU" | "Playwrite_CZ" | "Playwrite_DE_Grund" | "Playwrite_DE_LA" | "Playwrite_DE_SAS" | "Playwrite_DE_VA" | "Playwrite_DK_Loopet" | "Playwrite_DK_Uloopet" | "Playwrite_ES" | "Playwrite_ES_Deco" | "Playwrite_FR_Moderne" | "Playwrite_FR_Trad" | "Playwrite_GB_J" | "Playwrite_GB_S" | "Playwrite_HR" | "Playwrite_HR_Lijeva" | "Playwrite_HU" | "Playwrite_ID" | "Playwrite_IE" | "Playwrite_IN" | "Playwrite_IS" | "Playwrite_IT_Moderna" | "Playwrite_IT_Trad" | "Playwrite_MX" | "Playwrite_NG_Modern" | "Playwrite_NL" | "Playwrite_NO" | "Playwrite_NZ" | "Playwrite_PE" | "Playwrite_PL" | "Playwrite_PT" | "Playwrite_RO" | "Playwrite_SK" | "Playwrite_TZ" | "Playwrite_US_Modern" | "Playwrite_US_Trad" | "Playwrite_VN" | "Playwrite_ZA" | "Plus_Jakarta_Sans" | "Podkova" | "Poetsen_One" | "Poiret_One" | "Poller_One" | "Poltawski_Nowy" | "Poly" | "Pompiere" | "Ponnala" | "Pontano_Sans" | "Poor_Story" | "Poppins" | "Port_Lligat_Sans" | "Port_Lligat_Slab" | "Potta_One" | "Pragati_Narrow" | "Praise" | "Prata" | "Preahvihear" | "Press_Start_2P" | "Pridi" | "Princess_Sofia" | "Prociono" | "Prompt" | "Prosto_One" | "Protest_Guerrilla" | "Protest_Revolution" | "Protest_Riot" | "Protest_Strike" | "Proza_Libre" | "Public_Sans" | "Puppies_Play" | "Puritan" | "Purple_Purse" | "Qahiri" | "Quando" | "Quantico" | "Quattrocento" | "Quattrocento_Sans" | "Questrial" | "Quicksand" | "Quintessential" | "Qwigley" | "Qwitcher_Grypen" | "REM" | "Racing_Sans_One" | "Radio_Canada" | "Radio_Canada_Big" | "Radley" | "Rajdhani" | "Rakkas" | "Raleway" | "Raleway_Dots" | "Ramabhadra" | "Ramaraja" | "Rambla" | "Rammetto_One" | "Rampart_One" | "Ranchers" | "Rancho" | "Ranga" | "Rasa" | "Rationale" | "Ravi_Prakash" | "Readex_Pro" | "Recursive" | "Red_Hat_Display" | "Red_Hat_Mono" | "Red_Hat_Text" | "Red_Rose" | "Redacted" | "Redacted_Script" | "Reddit_Mono" | "Reddit_Sans" | "Reddit_Sans_Condensed" | "Redressed" | "Reem_Kufi" | "Reem_Kufi_Fun" | "Reem_Kufi_Ink" | "Reenie_Beanie" | "Reggae_One" | "Rethink_Sans" | "Revalia" | "Rhodium_Libre" | "Ribeye" | "Ribeye_Marrow" | "Righteous" | "Risque" | "Road_Rage" | "Roboto" | "Roboto_Condensed" | "Roboto_Flex" | "Roboto_Mono" | "Roboto_Serif" | "Roboto_Slab" | "Rochester" | "Rock_3D" | "Rock_Salt" | "RocknRoll_One" | "Rokkitt" | "Romanesco" | "Ropa_Sans" | "Rosario" | "Rosarivo" | "Rouge_Script" | "Rowdies" | "Rozha_One" | "Rubik" | "Rubik_80s_Fade" | "Rubik_Beastly" | "Rubik_Broken_Fax" | "Rubik_Bubbles" | "Rubik_Burned" | "Rubik_Dirt" | "Rubik_Distressed" | "Rubik_Doodle_Shadow" | "Rubik_Doodle_Triangles" | "Rubik_Gemstones" | "Rubik_Glitch" | "Rubik_Glitch_Pop" | "Rubik_Iso" | "Rubik_Lines" | "Rubik_Maps" | "Rubik_Marker_Hatch" | "Rubik_Maze" | "Rubik_Microbe" | "Rubik_Mono_One" | "Rubik_Moonrocks" | "Rubik_Pixels" | "Rubik_Puddles" | "Rubik_Scribble" | "Rubik_Spray_Paint" | "Rubik_Storm" | "Rubik_Vinyl" | "Rubik_Wet_Paint" | "Ruda" | "Rufina" | "Ruge_Boogie" | "Ruluko" | "Rum_Raisin" | "Ruslan_Display" | "Russo_One" | "Ruthie" | "Ruwudu" | "Rye" | "STIX_Two_Text" | "SUSE" | "Sacramento" | "Sahitya" | "Sail" | "Saira" | "Saira_Condensed" | "Saira_Extra_Condensed" | "Saira_Semi_Condensed" | "Saira_Stencil_One" | "Salsa" | "Sanchez" | "Sancreek" | "Sankofa_Display" | "Sansita" | "Sansita_Swashed" | "Sarabun" | "Sarala" | "Sarina" | "Sarpanch" | "Sassy_Frass" | "Satisfy" | "Sawarabi_Gothic" | "Sawarabi_Mincho" | "Scada" | "Scheherazade_New" | "Schibsted_Grotesk" | "Schoolbell" | "Scope_One" | "Seaweed_Script" | "Secular_One" | "Sedan" | "Sedan_SC" | "Sedgwick_Ave" | "Sedgwick_Ave_Display" | "Sen" | "Send_Flowers" | "Sevillana" | "Seymour_One" | "Shadows_Into_Light" | "Shadows_Into_Light_Two" | "Shalimar" | "Shantell_Sans" | "Shanti" | "Share" | "Share_Tech" | "Share_Tech_Mono" | "Shippori_Antique" | "Shippori_Antique_B1" | "Shippori_Mincho" | "Shippori_Mincho_B1" | "Shizuru" | "Shojumaru" | "Short_Stack" | "Shrikhand" | "Siemreap" | "Sigmar" | "Sigmar_One" | "Signika" | "Signika_Negative" | "Silkscreen" | "Simonetta" | "Single_Day" | "Sintony" | "Sirin_Stencil" | "Six_Caps" | "Sixtyfour" | "Sixtyfour_Convergence" | "Skranji" | "Slabo_13px" | "Slabo_27px" | "Slackey" | "Slackside_One" | "Smokum" | "Smooch" | "Smooch_Sans" | "Smythe" | "Sniglet" | "Snippet" | "Snowburst_One" | "Sofadi_One" | "Sofia" | "Sofia_Sans" | "Sofia_Sans_Condensed" | "Sofia_Sans_Extra_Condensed" | "Sofia_Sans_Semi_Condensed" | "Solitreo" | "Solway" | "Sometype_Mono" | "Song_Myung" | "Sono" | "Sonsie_One" | "Sora" | "Sorts_Mill_Goudy" | "Sour_Gummy" | "Source_Code_Pro" | "Source_Sans_3" | "Source_Serif_4" | "Space_Grotesk" | "Space_Mono" | "Special_Elite" | "Spectral" | "Spectral_SC" | "Spicy_Rice" | "Spinnaker" | "Spirax" | "Splash" | "Spline_Sans" | "Spline_Sans_Mono" | "Squada_One" | "Square_Peg" | "Sree_Krushnadevaraya" | "Sriracha" | "Srisakdi" | "Staatliches" | "Stalemate" | "Stalinist_One" | "Stardos_Stencil" | "Stick" | "Stick_No_Bills" | "Stint_Ultra_Condensed" | "Stint_Ultra_Expanded" | "Stoke" | "Strait" | "Style_Script" | "Stylish" | "Sue_Ellen_Francisco" | "Suez_One" | "Sulphur_Point" | "Sumana" | "Sunflower" | "Sunshiney" | "Supermercado_One" | "Sura" | "Suranna" | "Suravaram" | "Suwannaphum" | "Swanky_and_Moo_Moo" | "Syncopate" | "Syne" | "Syne_Mono" | "Syne_Tactile" | "Tac_One" | "Tai_Heritage_Pro" | "Tajawal" | "Tangerine" | "Tapestry" | "Taprom" | "Tauri" | "Taviraj" | "Teachers" | "Teko" | "Tektur" | "Telex" | "Tenali_Ramakrishna" | "Tenor_Sans" | "Text_Me_One" | "Texturina" | "Thasadith" | "The_Girl_Next_Door" | "The_Nautigal" | "Tienne" | "Tillana" | "Tilt_Neon" | "Tilt_Prism" | "Tilt_Warp" | "Timmana" | "Tinos" | "Tiny5" | "Tiro_Bangla" | "Tiro_Devanagari_Hindi" | "Tiro_Devanagari_Marathi" | "Tiro_Devanagari_Sanskrit" | "Tiro_Gurmukhi" | "Tiro_Kannada" | "Tiro_Tamil" | "Tiro_Telugu" | "Titan_One" | "Titillium_Web" | "Tomorrow" | "Tourney" | "Trade_Winds" | "Train_One" | "Trirong" | "Trispace" | "Trocchi" | "Trochut" | "Truculenta" | "Trykker" | "Tsukimi_Rounded" | "Tulpen_One" | "Turret_Road" | "Twinkle_Star" | "Ubuntu" | "Ubuntu_Condensed" | "Ubuntu_Mono" | "Ubuntu_Sans" | "Ubuntu_Sans_Mono" | "Uchen" | "Ultra" | "Unbounded" | "Uncial_Antiqua" | "Underdog" | "Unica_One" | "UnifrakturCook" | "UnifrakturMaguntia" | "Unkempt" | "Unlock" | "Unna" | "Updock" | "Urbanist" | "VT323" | "Vampiro_One" | "Varela" | "Varela_Round" | "Varta" | "Vast_Shadow" | "Vazirmatn" | "Vesper_Libre" | "Viaoda_Libre" | "Vibes" | "Vibur" | "Victor_Mono" | "Vidaloka" | "Viga" | "Vina_Sans" | "Voces" | "Volkhov" | "Vollkorn" | "Vollkorn_SC" | "Voltaire" | "Vujahday_Script" | "Waiting_for_the_Sunrise" | "Wallpoet" | "Walter_Turncoat" | "Warnes" | "Water_Brush" | "Waterfall" | "Wavefont" | "Wellfleet" | "Wendy_One" | "Whisper" | "WindSong" | "Wire_One" | "Wittgenstein" | "Wix_Madefor_Display" | "Wix_Madefor_Text" | "Work_Sans" | "Workbench" | "Xanh_Mono" | "Yaldevi" | "Yanone_Kaffeesatz" | "Yantramanav" | "Yarndings_12" | "Yarndings_12_Charted" | "Yarndings_20" | "Yarndings_20_Charted" | "Yatra_One" | "Yellowtail" | "Yeon_Sung" | "Yeseva_One" | "Yesteryear" | "Yomogi" | "Young_Serif" | "Yrsa" | "Ysabeau" | "Ysabeau_Infant" | "Ysabeau_Office" | "Ysabeau_SC" | "Yuji_Boku" | "Yuji_Hentaigana_Akari" | "Yuji_Hentaigana_Akebono" | "Yuji_Mai" | "Yuji_Syuku" | "Yusei_Magic" | "ZCOOL_KuaiLe" | "ZCOOL_QingKe_HuangYou" | "ZCOOL_XiaoWei" | "Zain" | "Zen_Antique" | "Zen_Antique_Soft" | "Zen_Dots" | "Zen_Kaku_Gothic_Antique" | "Zen_Kaku_Gothic_New" | "Zen_Kurenaido" | "Zen_Loop" | "Zen_Maru_Gothic" | "Zen_Old_Mincho" | "Zen_Tokyo_Zoo" | "Zeyada" | "Zhi_Mang_Xing" | "Zilla_Slab" | "Zilla_Slab_Highlight"; }; sizes?: { base?: { lineHeight?: string; size?: string; }; empty-screen-title?: { lineHeight?: string; size?: string; }; error-screen-title?: { lineHeight?: string; size?: string; }; headline?: { lineHeight?: string; size?: string; }; sm?: { lineHeight?: string; size?: string; }; xs?: { lineHeight?: string; size?: string; }; }; }; ``` ##### theme.font.fontFamily? ```ts optional fontFamily: | { system: string; } | { google?: | "ABeeZee" | "ADLaM_Display" | "AR_One_Sans" | "Abel" | "Abhaya_Libre" | "Aboreto" | "Abril_Fatface" | "Abyssinica_SIL" | "Aclonica" | "Acme" | "Actor" | "Adamina" | "Advent_Pro" | "Afacad" | "Afacad_Flux" | "Agbalumo" | "Agdasima" | "Aguafina_Script" | "Akatab" | "Akaya_Kanadaka" | "Akaya_Telivigala" | "Akronim" | "Akshar" | "Aladin" | "Alata" | "Alatsi" | "Albert_Sans" | "Aldrich" | "Alef" | "Alegreya" | "Alegreya_SC" | "Alegreya_Sans" | "Alegreya_Sans_SC" | "Aleo" | "Alex_Brush" | "Alexandria" | "Alfa_Slab_One" | "Alice" | "Alike" | "Alike_Angular" | "Alkalami" | "Alkatra" | "Allan" | "Allerta" | "Allerta_Stencil" | "Allison" | "Allura" | "Almarai" | "Almendra" | "Almendra_Display" | "Almendra_SC" | "Alumni_Sans" | "Alumni_Sans_Collegiate_One" | "Alumni_Sans_Inline_One" | "Alumni_Sans_Pinstripe" | "Amarante" | "Amaranth" | "Amatic_SC" | "Amethysta" | "Amiko" | "Amiri" | "Amiri_Quran" | "Amita" | "Anaheim" | "Andada_Pro" | "Andika" | "Anek_Bangla" | "Anek_Devanagari" | "Anek_Gujarati" | "Anek_Gurmukhi" | "Anek_Kannada" | "Anek_Latin" | "Anek_Malayalam" | "Anek_Odia" | "Anek_Tamil" | "Anek_Telugu" | "Angkor" | "Annapurna_SIL" | "Annie_Use_Your_Telescope" | "Anonymous_Pro" | "Anta" | "Antic" | "Antic_Didone" | "Antic_Slab" | "Anton" | "Anton_SC" | "Antonio" | "Anuphan" | "Anybody" | "Aoboshi_One" | "Arapey" | "Arbutus" | "Arbutus_Slab" | "Architects_Daughter" | "Archivo" | "Archivo_Black" | "Archivo_Narrow" | "Are_You_Serious" | "Aref_Ruqaa" | "Aref_Ruqaa_Ink" | "Arima" | "Arimo" | "Arizonia" | "Armata" | "Arsenal" | "Arsenal_SC" | "Artifika" | "Arvo" | "Arya" | "Asap" | "Asap_Condensed" | "Asar" | "Asset" | "Assistant" | "Astloch" | "Asul" | "Athiti" | "Atkinson_Hyperlegible" | "Atma" | "Atomic_Age" | "Aubrey" | "Audiowide" | "Autour_One" | "Average" | "Average_Sans" | "Averia_Gruesa_Libre" | "Averia_Libre" | "Averia_Sans_Libre" | "Averia_Serif_Libre" | "Azeret_Mono" | "B612" | "B612_Mono" | "BIZ_UDGothic" | "BIZ_UDMincho" | "BIZ_UDPGothic" | "BIZ_UDPMincho" | "Babylonica" | "Bacasime_Antique" | "Bad_Script" | "Bagel_Fat_One" | "Bahiana" | "Bahianita" | "Bai_Jamjuree" | "Bakbak_One" | "Ballet" | "Baloo_2" | "Baloo_Bhai_2" | "Baloo_Bhaijaan_2" | "Baloo_Bhaina_2" | "Baloo_Chettan_2" | "Baloo_Da_2" | "Baloo_Paaji_2" | "Baloo_Tamma_2" | "Baloo_Tammudu_2" | "Baloo_Thambi_2" | "Balsamiq_Sans" | "Balthazar" | "Bangers" | "Barlow" | "Barlow_Condensed" | "Barlow_Semi_Condensed" | "Barriecito" | "Barrio" | "Basic" | "Baskervville" | "Baskervville_SC" | "Battambang" | "Baumans" | "Bayon" | "Be_Vietnam_Pro" | "Beau_Rivage" | "Bebas_Neue" | "Beiruti" | "Belanosima" | "Belgrano" | "Bellefair" | "Belleza" | "Bellota" | "Bellota_Text" | "BenchNine" | "Benne" | "Bentham" | "Berkshire_Swash" | "Besley" | "Beth_Ellen" | "Bevan" | "BhuTuka_Expanded_One" | "Big_Shoulders_Display" | "Big_Shoulders_Inline_Display" | "Big_Shoulders_Inline_Text" | "Big_Shoulders_Stencil_Display" | "Big_Shoulders_Stencil_Text" | "Big_Shoulders_Text" | "Bigelow_Rules" | "Bigshot_One" | "Bilbo" | "Bilbo_Swash_Caps" | "BioRhyme" | "BioRhyme_Expanded" | "Birthstone" | "Birthstone_Bounce" | "Biryani" | "Bitter" | "Black_And_White_Picture" | "Black_Han_Sans" | "Black_Ops_One" | "Blaka" | "Blaka_Hollow" | "Blaka_Ink" | "Blinker" | "Bodoni_Moda" | "Bodoni_Moda_SC" | "Bokor" | "Bona_Nova" | "Bona_Nova_SC" | "Bonbon" | "Bonheur_Royale" | "Boogaloo" | "Borel" | "Bowlby_One" | "Bowlby_One_SC" | "Braah_One" | "Brawler" | "Bree_Serif" | "Bricolage_Grotesque" | "Bruno_Ace" | "Bruno_Ace_SC" | "Brygada_1918" | "Bubblegum_Sans" | "Bubbler_One" | "Buda" | "Buenard" | "Bungee" | "Bungee_Hairline" | "Bungee_Inline" | "Bungee_Outline" | "Bungee_Shade" | "Bungee_Spice" | "Bungee_Tint" | "Butcherman" | "Butterfly_Kids" | "Cabin" | "Cabin_Condensed" | "Cabin_Sketch" | "Cactus_Classical_Serif" | "Caesar_Dressing" | "Cagliostro" | "Cairo" | "Cairo_Play" | "Caladea" | "Calistoga" | "Calligraffitti" | "Cambay" | "Cambo" | "Candal" | "Cantarell" | "Cantata_One" | "Cantora_One" | "Caprasimo" | "Capriola" | "Caramel" | "Carattere" | "Cardo" | "Carlito" | "Carme" | "Carrois_Gothic" | "Carrois_Gothic_SC" | "Carter_One" | "Castoro" | "Castoro_Titling" | "Catamaran" | "Caudex" | "Caveat" | "Caveat_Brush" | "Cedarville_Cursive" | "Ceviche_One" | "Chakra_Petch" | "Changa" | "Changa_One" | "Chango" | "Charis_SIL" | "Charm" | "Charmonman" | "Chathura" | "Chau_Philomene_One" | "Chela_One" | "Chelsea_Market" | "Chenla" | "Cherish" | "Cherry_Bomb_One" | "Cherry_Cream_Soda" | "Cherry_Swash" | "Chewy" | "Chicle" | "Chilanka" | "Chivo" | "Chivo_Mono" | "Chocolate_Classical_Sans" | "Chokokutai" | "Chonburi" | "Cinzel" | "Cinzel_Decorative" | "Clicker_Script" | "Climate_Crisis" | "Coda" | "Codystar" | "Coiny" | "Combo" | "Comfortaa" | "Comforter" | "Comforter_Brush" | "Comic_Neue" | "Coming_Soon" | "Comme" | "Commissioner" | "Concert_One" | "Condiment" | "Content" | "Contrail_One" | "Convergence" | "Cookie" | "Copse" | "Corben" | "Corinthia" | "Cormorant" | "Cormorant_Garamond" | "Cormorant_Infant" | "Cormorant_SC" | "Cormorant_Unicase" | "Cormorant_Upright" | "Courgette" | "Courier_Prime" | "Cousine" | "Coustard" | "Covered_By_Your_Grace" | "Crafty_Girls" | "Creepster" | "Crete_Round" | "Crimson_Pro" | "Crimson_Text" | "Croissant_One" | "Crushed" | "Cuprum" | "Cute_Font" | "Cutive" | "Cutive_Mono" | "DM_Mono" | "DM_Sans" | "DM_Serif_Display" | "DM_Serif_Text" | "Dai_Banna_SIL" | "Damion" | "Dancing_Script" | "Danfo" | "Dangrek" | "Darker_Grotesque" | "Darumadrop_One" | "David_Libre" | "Dawning_of_a_New_Day" | "Days_One" | "Dekko" | "Dela_Gothic_One" | "Delicious_Handrawn" | "Delius" | "Delius_Swash_Caps" | "Delius_Unicase" | "Della_Respira" | "Denk_One" | "Devonshire" | "Dhurjati" | "Didact_Gothic" | "Diphylleia" | "Diplomata" | "Diplomata_SC" | "Do_Hyeon" | "Dokdo" | "Domine" | "Donegal_One" | "Dongle" | "Doppio_One" | "Dorsa" | "Dosis" | "DotGothic16" | "Doto" | "Dr_Sugiyama" | "Duru_Sans" | "DynaPuff" | "Dynalight" | "EB_Garamond" | "Eagle_Lake" | "East_Sea_Dokdo" | "Eater" | "Economica" | "Eczar" | "Edu_AU_VIC_WA_NT_Arrows" | "Edu_AU_VIC_WA_NT_Dots" | "Edu_AU_VIC_WA_NT_Guides" | "Edu_AU_VIC_WA_NT_Hand" | "Edu_AU_VIC_WA_NT_Pre" | "Edu_NSW_ACT_Foundation" | "Edu_QLD_Beginner" | "Edu_SA_Beginner" | "Edu_TAS_Beginner" | "Edu_VIC_WA_NT_Beginner" | "El_Messiri" | "Electrolize" | "Elsie" | "Elsie_Swash_Caps" | "Emblema_One" | "Emilys_Candy" | "Encode_Sans" | "Encode_Sans_Condensed" | "Encode_Sans_Expanded" | "Encode_Sans_SC" | "Encode_Sans_Semi_Condensed" | "Encode_Sans_Semi_Expanded" | "Engagement" | "Englebert" | "Enriqueta" | "Ephesis" | "Epilogue" | "Erica_One" | "Esteban" | "Estonia" | "Euphoria_Script" | "Ewert" | "Exo" | "Exo_2" | "Expletus_Sans" | "Explora" | "Faculty_Glyphic" | "Fahkwang" | "Familjen_Grotesk" | "Fanwood_Text" | "Farro" | "Farsan" | "Fascinate" | "Fascinate_Inline" | "Faster_One" | "Fasthand" | "Fauna_One" | "Faustina" | "Federant" | "Federo" | "Felipa" | "Fenix" | "Festive" | "Figtree" | "Finger_Paint" | "Finlandica" | "Fira_Code" | "Fira_Mono" | "Fira_Sans" | "Fira_Sans_Condensed" | "Fira_Sans_Extra_Condensed" | "Fjalla_One" | "Fjord_One" | "Flamenco" | "Flavors" | "Fleur_De_Leah" | "Flow_Block" | "Flow_Circular" | "Flow_Rounded" | "Foldit" | "Fondamento" | "Fontdiner_Swanky" | "Forum" | "Fragment_Mono" | "Francois_One" | "Frank_Ruhl_Libre" | "Fraunces" | "Freckle_Face" | "Fredericka_the_Great" | "Fredoka" | "Freehand" | "Freeman" | "Fresca" | "Frijole" | "Fruktur" | "Fugaz_One" | "Fuggles" | "Funnel_Display" | "Funnel_Sans" | "Fustat" | "Fuzzy_Bubbles" | "GFS_Didot" | "GFS_Neohellenic" | "Ga_Maamli" | "Gabarito" | "Gabriela" | "Gaegu" | "Gafata" | "Gajraj_One" | "Galada" | "Galdeano" | "Galindo" | "Gamja_Flower" | "Gantari" | "Gasoek_One" | "Gayathri" | "Geist" | "Geist_Mono" | "Gelasio" | "Gemunu_Libre" | "Genos" | "Gentium_Book_Plus" | "Gentium_Plus" | "Geo" | "Geologica" | "Georama" | "Geostar" | "Geostar_Fill" | "Germania_One" | "Gideon_Roman" | "Gidugu" | "Gilda_Display" | "Girassol" | "Give_You_Glory" | "Glass_Antiqua" | "Glegoo" | "Gloock" | "Gloria_Hallelujah" | "Glory" | "Gluten" | "Goblin_One" | "Gochi_Hand" | "Goldman" | "Golos_Text" | "Gorditas" | "Gothic_A1" | "Gotu" | "Goudy_Bookletter_1911" | "Gowun_Batang" | "Gowun_Dodum" | "Graduate" | "Grand_Hotel" | "Grandiflora_One" | "Grandstander" | "Grape_Nuts" | "Gravitas_One" | "Great_Vibes" | "Grechen_Fuemen" | "Grenze" | "Grenze_Gotisch" | "Grey_Qo" | "Griffy" | "Gruppo" | "Gudea" | "Gugi" | "Gulzar" | "Gupter" | "Gurajada" | "Gwendolyn" | "Habibi" | "Hachi_Maru_Pop" | "Hahmlet" | "Halant" | "Hammersmith_One" | "Hanalei" | "Hanalei_Fill" | "Handjet" | "Handlee" | "Hanken_Grotesk" | "Hanuman" | "Happy_Monkey" | "Harmattan" | "Headland_One" | "Hedvig_Letters_Sans" | "Hedvig_Letters_Serif" | "Heebo" | "Henny_Penny" | "Hepta_Slab" | "Herr_Von_Muellerhoff" | "Hi_Melody" | "Hina_Mincho" | "Hind" | "Hind_Guntur" | "Hind_Madurai" | "Hind_Siliguri" | "Hind_Vadodara" | "Holtwood_One_SC" | "Homemade_Apple" | "Homenaje" | "Honk" | "Host_Grotesk" | "Hubballi" | "Hubot_Sans" | "Hurricane" | "IBM_Plex_Mono" | "IBM_Plex_Sans" | "IBM_Plex_Sans_Arabic" | "IBM_Plex_Sans_Condensed" | "IBM_Plex_Sans_Devanagari" | "IBM_Plex_Sans_Hebrew" | "IBM_Plex_Sans_JP" | "IBM_Plex_Sans_KR" | "IBM_Plex_Sans_Thai" | "IBM_Plex_Sans_Thai_Looped" | "IBM_Plex_Serif" | "IM_Fell_DW_Pica" | "IM_Fell_DW_Pica_SC" | "IM_Fell_Double_Pica" | "IM_Fell_Double_Pica_SC" | "IM_Fell_English" | "IM_Fell_English_SC" | "IM_Fell_French_Canon" | "IM_Fell_French_Canon_SC" | "IM_Fell_Great_Primer" | "IM_Fell_Great_Primer_SC" | "Ibarra_Real_Nova" | "Iceberg" | "Iceland" | "Imbue" | "Imperial_Script" | "Imprima" | "Inclusive_Sans" | "Inconsolata" | "Inder" | "Indie_Flower" | "Ingrid_Darling" | "Inika" | "Inknut_Antiqua" | "Inria_Sans" | "Inria_Serif" | "Inspiration" | "Instrument_Sans" | "Instrument_Serif" | "Inter" | "Inter_Tight" | "Irish_Grover" | "Island_Moments" | "Istok_Web" | "Italiana" | "Italianno" | "Itim" | "Jacquard_12" | "Jacquard_12_Charted" | "Jacquard_24" | "Jacquard_24_Charted" | "Jacquarda_Bastarda_9" | "Jacquarda_Bastarda_9_Charted" | "Jacques_Francois" | "Jacques_Francois_Shadow" | "Jaini" | "Jaini_Purva" | "Jaldi" | "Jaro" | "Jersey_10" | "Jersey_10_Charted" | "Jersey_15" | "Jersey_15_Charted" | "Jersey_20" | "Jersey_20_Charted" | "Jersey_25" | "Jersey_25_Charted" | "JetBrains_Mono" | "Jim_Nightshade" | "Joan" | "Jockey_One" | "Jolly_Lodger" | "Jomhuria" | "Jomolhari" | "Josefin_Sans" | "Josefin_Slab" | "Jost" | "Joti_One" | "Jua" | "Judson" | "Julee" | "Julius_Sans_One" | "Junge" | "Jura" | "Just_Another_Hand" | "Just_Me_Again_Down_Here" | "K2D" | "Kablammo" | "Kadwa" | "Kaisei_Decol" | "Kaisei_HarunoUmi" | "Kaisei_Opti" | "Kaisei_Tokumin" | "Kalam" | "Kalnia" | "Kalnia_Glaze" | "Kameron" | "Kanit" | "Kantumruy_Pro" | "Karantina" | "Karla" | "Karla_Tamil_Inclined" | "Karla_Tamil_Upright" | "Karma" | "Katibeh" | "Kaushan_Script" | "Kavivanar" | "Kavoon" | "Kay_Pho_Du" | "Kdam_Thmor_Pro" | "Keania_One" | "Kelly_Slab" | "Kenia" | "Khand" | "Khmer" | "Khula" | "Kings" | "Kirang_Haerang" | "Kite_One" | "Kiwi_Maru" | "Klee_One" | "Knewave" | "KoHo" | "Kodchasan" | "Kode_Mono" | "Koh_Santepheap" | "Kolker_Brush" | "Konkhmer_Sleokchher" | "Kosugi" | "Kosugi_Maru" | "Kotta_One" | "Koulen" | "Kranky" | "Kreon" | "Kristi" | "Krona_One" | "Krub" | "Kufam" | "Kulim_Park" | "Kumar_One" | "Kumar_One_Outline" | "Kumbh_Sans" | "Kurale" | "LXGW_WenKai_Mono_TC" | "LXGW_WenKai_TC" | "La_Belle_Aurore" | "Labrada" | "Lacquer" | "Laila" | "Lakki_Reddy" | "Lalezar" | "Lancelot" | "Langar" | "Lateef" | "Lato" | "Lavishly_Yours" | "League_Gothic" | "League_Script" | "League_Spartan" | "Leckerli_One" | "Ledger" | "Lekton" | "Lemon" | "Lemonada" | "Lexend" | "Lexend_Deca" | "Lexend_Exa" | "Lexend_Giga" | "Lexend_Mega" | "Lexend_Peta" | "Lexend_Tera" | "Lexend_Zetta" | "Libre_Barcode_128" | "Libre_Barcode_128_Text" | "Libre_Barcode_39" | "Libre_Barcode_39_Extended" | "Libre_Barcode_39_Extended_Text" | "Libre_Barcode_39_Text" | "Libre_Barcode_EAN13_Text" | "Libre_Baskerville" | "Libre_Bodoni" | "Libre_Caslon_Display" | "Libre_Caslon_Text" | "Libre_Franklin" | "Licorice" | "Life_Savers" | "Lilita_One" | "Lily_Script_One" | "Limelight" | "Linden_Hill" | "Linefont" | "Lisu_Bosa" | "Literata" | "Liu_Jian_Mao_Cao" | "Livvic" | "Lobster" | "Lobster_Two" | "Londrina_Outline" | "Londrina_Shadow" | "Londrina_Sketch" | "Londrina_Solid" | "Long_Cang" | "Lora" | "Love_Light" | "Love_Ya_Like_A_Sister" | "Loved_by_the_King" | "Lovers_Quarrel" | "Luckiest_Guy" | "Lugrasimo" | "Lumanosimo" | "Lunasima" | "Lusitana" | "Lustria" | "Luxurious_Roman" | "Luxurious_Script" | "M_PLUS_1" | "M_PLUS_1_Code" | "M_PLUS_1p" | "M_PLUS_2" | "M_PLUS_Code_Latin" | "M_PLUS_Rounded_1c" | "Ma_Shan_Zheng" | "Macondo" | "Macondo_Swash_Caps" | "Mada" | "Madimi_One" | "Magra" | "Maiden_Orange" | "Maitree" | "Major_Mono_Display" | "Mako" | "Mali" | "Mallanna" | "Maname" | "Mandali" | "Manjari" | "Manrope" | "Mansalva" | "Manuale" | "Marcellus" | "Marcellus_SC" | "Marck_Script" | "Margarine" | "Marhey" | "Markazi_Text" | "Marko_One" | "Marmelad" | "Martel" | "Martel_Sans" | "Martian_Mono" | "Marvel" | "Mate" | "Mate_SC" | "Matemasie" | "Maven_Pro" | "McLaren" | "Mea_Culpa" | "Meddon" | "MedievalSharp" | "Medula_One" | "Meera_Inimai" | "Megrim" | "Meie_Script" | "Meow_Script" | "Merienda" | "Merriweather" | "Merriweather_Sans" | "Metal" | "Metal_Mania" | "Metamorphous" | "Metrophobic" | "Michroma" | "Micro_5" | "Micro_5_Charted" | "Milonga" | "Miltonian" | "Miltonian_Tattoo" | "Mina" | "Mingzat" | "Miniver" | "Miriam_Libre" | "Mirza" | "Miss_Fajardose" | "Mitr" | "Mochiy_Pop_One" | "Mochiy_Pop_P_One" | "Modak" | "Modern_Antiqua" | "Moderustic" | "Mogra" | "Mohave" | "Moirai_One" | "Molengo" | "Molle" | "Mona_Sans" | "Monda" | "Monofett" | "Monomaniac_One" | "Monoton" | "Monsieur_La_Doulaise" | "Montaga" | "Montagu_Slab" | "MonteCarlo" | "Montez" | "Montserrat" | "Montserrat_Alternates" | "Montserrat_Subrayada" | "Moo_Lah_Lah" | "Mooli" | "Moon_Dance" | "Moul" | "Moulpali" | "Mountains_of_Christmas" | "Mouse_Memoirs" | "Mr_Bedfort" | "Mr_Dafoe" | "Mr_De_Haviland" | "Mrs_Saint_Delafield" | "Mrs_Sheppards" | "Ms_Madi" | "Mukta" | "Mukta_Mahee" | "Mukta_Malar" | "Mukta_Vaani" | "Mulish" | "Murecho" | "MuseoModerno" | "My_Soul" | "Mynerve" | "Mystery_Quest" | "NTR" | "Nabla" | "Namdhinggo" | "Nanum_Brush_Script" | "Nanum_Gothic" | "Nanum_Gothic_Coding" | "Nanum_Myeongjo" | "Nanum_Pen_Script" | "Narnoor" | "Neonderthaw" | "Nerko_One" | "Neucha" | "Neuton" | "New_Amsterdam" | "New_Rocker" | "New_Tegomin" | "News_Cycle" | "Newsreader" | "Niconne" | "Niramit" | "Nixie_One" | "Nobile" | "Nokora" | "Norican" | "Nosifer" | "Notable" | "Nothing_You_Could_Do" | "Noticia_Text" | "Noto_Color_Emoji" | "Noto_Emoji" | "Noto_Kufi_Arabic" | "Noto_Music" | "Noto_Naskh_Arabic" | "Noto_Nastaliq_Urdu" | "Noto_Rashi_Hebrew" | "Noto_Sans" | "Noto_Sans_Adlam" | "Noto_Sans_Adlam_Unjoined" | "Noto_Sans_Anatolian_Hieroglyphs" | "Noto_Sans_Arabic" | "Noto_Sans_Armenian" | "Noto_Sans_Avestan" | "Noto_Sans_Balinese" | "Noto_Sans_Bamum" | "Noto_Sans_Bassa_Vah" | "Noto_Sans_Batak" | "Noto_Sans_Bengali" | "Noto_Sans_Bhaiksuki" | "Noto_Sans_Brahmi" | "Noto_Sans_Buginese" | "Noto_Sans_Buhid" | "Noto_Sans_Canadian_Aboriginal" | "Noto_Sans_Carian" | "Noto_Sans_Caucasian_Albanian" | "Noto_Sans_Chakma" | "Noto_Sans_Cham" | "Noto_Sans_Cherokee" | "Noto_Sans_Chorasmian" | "Noto_Sans_Coptic" | "Noto_Sans_Cuneiform" | "Noto_Sans_Cypriot" | "Noto_Sans_Cypro_Minoan" | "Noto_Sans_Deseret" | "Noto_Sans_Devanagari" | "Noto_Sans_Display" | "Noto_Sans_Duployan" | "Noto_Sans_Egyptian_Hieroglyphs" | "Noto_Sans_Elbasan" | "Noto_Sans_Elymaic" | "Noto_Sans_Ethiopic" | "Noto_Sans_Georgian" | "Noto_Sans_Glagolitic" | "Noto_Sans_Gothic" | "Noto_Sans_Grantha" | "Noto_Sans_Gujarati" | "Noto_Sans_Gunjala_Gondi" | "Noto_Sans_Gurmukhi" | "Noto_Sans_HK" | "Noto_Sans_Hanifi_Rohingya" | "Noto_Sans_Hanunoo" | "Noto_Sans_Hatran" | "Noto_Sans_Hebrew" | "Noto_Sans_Imperial_Aramaic" | "Noto_Sans_Indic_Siyaq_Numbers" | "Noto_Sans_Inscriptional_Pahlavi" | "Noto_Sans_Inscriptional_Parthian" | "Noto_Sans_JP" | "Noto_Sans_Javanese" | "Noto_Sans_KR" | "Noto_Sans_Kaithi" | "Noto_Sans_Kannada" | "Noto_Sans_Kawi" | "Noto_Sans_Kayah_Li" | "Noto_Sans_Kharoshthi" | "Noto_Sans_Khmer" | "Noto_Sans_Khojki" | "Noto_Sans_Khudawadi" | "Noto_Sans_Lao" | "Noto_Sans_Lao_Looped" | "Noto_Sans_Lepcha" | "Noto_Sans_Limbu" | "Noto_Sans_Linear_A" | "Noto_Sans_Linear_B" | "Noto_Sans_Lisu" | "Noto_Sans_Lycian" | "Noto_Sans_Lydian" | "Noto_Sans_Mahajani" | "Noto_Sans_Malayalam" | "Noto_Sans_Mandaic" | "Noto_Sans_Manichaean" | "Noto_Sans_Marchen" | "Noto_Sans_Masaram_Gondi" | "Noto_Sans_Math" | "Noto_Sans_Mayan_Numerals" | "Noto_Sans_Medefaidrin" | "Noto_Sans_Meetei_Mayek" | "Noto_Sans_Mende_Kikakui" | "Noto_Sans_Meroitic" | "Noto_Sans_Miao" | "Noto_Sans_Modi" | "Noto_Sans_Mongolian" | "Noto_Sans_Mono" | "Noto_Sans_Mro" | "Noto_Sans_Multani" | "Noto_Sans_Myanmar" | "Noto_Sans_NKo" | "Noto_Sans_NKo_Unjoined" | "Noto_Sans_Nabataean" | "Noto_Sans_Nag_Mundari" | "Noto_Sans_Nandinagari" | "Noto_Sans_New_Tai_Lue" | "Noto_Sans_Newa" | "Noto_Sans_Nushu" | "Noto_Sans_Ogham" | "Noto_Sans_Ol_Chiki" | "Noto_Sans_Old_Hungarian" | "Noto_Sans_Old_Italic" | "Noto_Sans_Old_North_Arabian" | "Noto_Sans_Old_Permic" | "Noto_Sans_Old_Persian" | "Noto_Sans_Old_Sogdian" | "Noto_Sans_Old_South_Arabian" | "Noto_Sans_Old_Turkic" | "Noto_Sans_Oriya" | "Noto_Sans_Osage" | "Noto_Sans_Osmanya" | "Noto_Sans_Pahawh_Hmong" | "Noto_Sans_Palmyrene" | "Noto_Sans_Pau_Cin_Hau" | "Noto_Sans_Phags_Pa" | "Noto_Sans_Phoenician" | "Noto_Sans_Psalter_Pahlavi" | "Noto_Sans_Rejang" | "Noto_Sans_Runic" | "Noto_Sans_SC" | "Noto_Sans_Samaritan" | "Noto_Sans_Saurashtra" | "Noto_Sans_Sharada" | "Noto_Sans_Shavian" | "Noto_Sans_Siddham" | "Noto_Sans_SignWriting" | "Noto_Sans_Sinhala" | "Noto_Sans_Sogdian" | "Noto_Sans_Sora_Sompeng" | "Noto_Sans_Soyombo" | "Noto_Sans_Sundanese" | "Noto_Sans_Syloti_Nagri" | "Noto_Sans_Symbols" | "Noto_Sans_Symbols_2" | "Noto_Sans_Syriac" | "Noto_Sans_Syriac_Eastern" | "Noto_Sans_TC" | "Noto_Sans_Tagalog" | "Noto_Sans_Tagbanwa" | "Noto_Sans_Tai_Le" | "Noto_Sans_Tai_Tham" | "Noto_Sans_Tai_Viet" | "Noto_Sans_Takri" | "Noto_Sans_Tamil" | "Noto_Sans_Tamil_Supplement" | "Noto_Sans_Tangsa" | "Noto_Sans_Telugu" | "Noto_Sans_Thaana" | "Noto_Sans_Thai" | "Noto_Sans_Thai_Looped" | "Noto_Sans_Tifinagh" | "Noto_Sans_Tirhuta" | "Noto_Sans_Ugaritic" | "Noto_Sans_Vai" | "Noto_Sans_Vithkuqi" | "Noto_Sans_Wancho" | "Noto_Sans_Warang_Citi" | "Noto_Sans_Yi" | "Noto_Sans_Zanabazar_Square" | "Noto_Serif" | "Noto_Serif_Ahom" | "Noto_Serif_Armenian" | "Noto_Serif_Balinese" | "Noto_Serif_Bengali" | "Noto_Serif_Devanagari" | "Noto_Serif_Display" | "Noto_Serif_Dogra" | "Noto_Serif_Ethiopic" | "Noto_Serif_Georgian" | "Noto_Serif_Grantha" | "Noto_Serif_Gujarati" | "Noto_Serif_Gurmukhi" | "Noto_Serif_HK" | "Noto_Serif_Hebrew" | "Noto_Serif_JP" | "Noto_Serif_KR" | "Noto_Serif_Kannada" | "Noto_Serif_Khitan_Small_Script" | "Noto_Serif_Khmer" | "Noto_Serif_Khojki" | "Noto_Serif_Lao" | "Noto_Serif_Makasar" | "Noto_Serif_Malayalam" | "Noto_Serif_Myanmar" | "Noto_Serif_NP_Hmong" | "Noto_Serif_Old_Uyghur" | "Noto_Serif_Oriya" | "Noto_Serif_Ottoman_Siyaq" | "Noto_Serif_SC" | "Noto_Serif_Sinhala" | "Noto_Serif_TC" | "Noto_Serif_Tamil" | "Noto_Serif_Tangut" | "Noto_Serif_Telugu" | "Noto_Serif_Thai" | "Noto_Serif_Tibetan" | "Noto_Serif_Toto" | "Noto_Serif_Vithkuqi" | "Noto_Serif_Yezidi" | "Noto_Traditional_Nushu" | "Noto_Znamenny_Musical_Notation" | "Nova_Cut" | "Nova_Flat" | "Nova_Mono" | "Nova_Oval" | "Nova_Round" | "Nova_Script" | "Nova_Slim" | "Nova_Square" | "Numans" | "Nunito" | "Nunito_Sans" | "Nuosu_SIL" | "Odibee_Sans" | "Odor_Mean_Chey" | "Offside" | "Oi" | "Ojuju" | "Old_Standard_TT" | "Oldenburg" | "Ole" | "Oleo_Script" | "Oleo_Script_Swash_Caps" | "Onest" | "Oooh_Baby" | "Open_Sans" | "Oranienbaum" | "Orbit" | "Orbitron" | "Oregano" | "Orelega_One" | "Orienta" | "Original_Surfer" | "Oswald" | "Outfit" | "Over_the_Rainbow" | "Overlock" | "Overlock_SC" | "Overpass" | "Overpass_Mono" | "Ovo" | "Oxanium" | "Oxygen" | "Oxygen_Mono" | "PT_Mono" | "PT_Sans" | "PT_Sans_Caption" | "PT_Sans_Narrow" | "PT_Serif" | "PT_Serif_Caption" | "Pacifico" | "Padauk" | "Padyakke_Expanded_One" | "Palanquin" | "Palanquin_Dark" | "Palette_Mosaic" | "Pangolin" | "Paprika" | "Parisienne" | "Parkinsans" | "Passero_One" | "Passion_One" | "Passions_Conflict" | "Pathway_Extreme" | "Pathway_Gothic_One" | "Patrick_Hand" | "Patrick_Hand_SC" | "Pattaya" | "Patua_One" | "Pavanam" | "Paytone_One" | "Peddana" | "Peralta" | "Permanent_Marker" | "Petemoss" | "Petit_Formal_Script" | "Petrona" | "Phetsarath" | "Philosopher" | "Phudu" | "Piazzolla" | "Piedra" | "Pinyon_Script" | "Pirata_One" | "Pixelify_Sans" | "Plaster" | "Platypi" | "Play" | "Playball" | "Playfair" | "Playfair_Display" | "Playfair_Display_SC" | "Playpen_Sans" | "Playwrite_AR" | "Playwrite_AT" | "Playwrite_AU_NSW" | "Playwrite_AU_QLD" | "Playwrite_AU_SA" | "Playwrite_AU_TAS" | "Playwrite_AU_VIC" | "Playwrite_BE_VLG" | "Playwrite_BE_WAL" | "Playwrite_BR" | "Playwrite_CA" | "Playwrite_CL" | "Playwrite_CO" | "Playwrite_CU" | "Playwrite_CZ" | "Playwrite_DE_Grund" | "Playwrite_DE_LA" | "Playwrite_DE_SAS" | "Playwrite_DE_VA" | "Playwrite_DK_Loopet" | "Playwrite_DK_Uloopet" | "Playwrite_ES" | "Playwrite_ES_Deco" | "Playwrite_FR_Moderne" | "Playwrite_FR_Trad" | "Playwrite_GB_J" | "Playwrite_GB_S" | "Playwrite_HR" | "Playwrite_HR_Lijeva" | "Playwrite_HU" | "Playwrite_ID" | "Playwrite_IE" | "Playwrite_IN" | "Playwrite_IS" | "Playwrite_IT_Moderna" | "Playwrite_IT_Trad" | "Playwrite_MX" | "Playwrite_NG_Modern" | "Playwrite_NL" | "Playwrite_NO" | "Playwrite_NZ" | "Playwrite_PE" | "Playwrite_PL" | "Playwrite_PT" | "Playwrite_RO" | "Playwrite_SK" | "Playwrite_TZ" | "Playwrite_US_Modern" | "Playwrite_US_Trad" | "Playwrite_VN" | "Playwrite_ZA" | "Plus_Jakarta_Sans" | "Podkova" | "Poetsen_One" | "Poiret_One" | "Poller_One" | "Poltawski_Nowy" | "Poly" | "Pompiere" | "Ponnala" | "Pontano_Sans" | "Poor_Story" | "Poppins" | "Port_Lligat_Sans" | "Port_Lligat_Slab" | "Potta_One" | "Pragati_Narrow" | "Praise" | "Prata" | "Preahvihear" | "Press_Start_2P" | "Pridi" | "Princess_Sofia" | "Prociono" | "Prompt" | "Prosto_One" | "Protest_Guerrilla" | "Protest_Revolution" | "Protest_Riot" | "Protest_Strike" | "Proza_Libre" | "Public_Sans" | "Puppies_Play" | "Puritan" | "Purple_Purse" | "Qahiri" | "Quando" | "Quantico" | "Quattrocento" | "Quattrocento_Sans" | "Questrial" | "Quicksand" | "Quintessential" | "Qwigley" | "Qwitcher_Grypen" | "REM" | "Racing_Sans_One" | "Radio_Canada" | "Radio_Canada_Big" | "Radley" | "Rajdhani" | "Rakkas" | "Raleway" | "Raleway_Dots" | "Ramabhadra" | "Ramaraja" | "Rambla" | "Rammetto_One" | "Rampart_One" | "Ranchers" | "Rancho" | "Ranga" | "Rasa" | "Rationale" | "Ravi_Prakash" | "Readex_Pro" | "Recursive" | "Red_Hat_Display" | "Red_Hat_Mono" | "Red_Hat_Text" | "Red_Rose" | "Redacted" | "Redacted_Script" | "Reddit_Mono" | "Reddit_Sans" | "Reddit_Sans_Condensed" | "Redressed" | "Reem_Kufi" | "Reem_Kufi_Fun" | "Reem_Kufi_Ink" | "Reenie_Beanie" | "Reggae_One" | "Rethink_Sans" | "Revalia" | "Rhodium_Libre" | "Ribeye" | "Ribeye_Marrow" | "Righteous" | "Risque" | "Road_Rage" | "Roboto" | "Roboto_Condensed" | "Roboto_Flex" | "Roboto_Mono" | "Roboto_Serif" | "Roboto_Slab" | "Rochester" | "Rock_3D" | "Rock_Salt" | "RocknRoll_One" | "Rokkitt" | "Romanesco" | "Ropa_Sans" | "Rosario" | "Rosarivo" | "Rouge_Script" | "Rowdies" | "Rozha_One" | "Rubik" | "Rubik_80s_Fade" | "Rubik_Beastly" | "Rubik_Broken_Fax" | "Rubik_Bubbles" | "Rubik_Burned" | "Rubik_Dirt" | "Rubik_Distressed" | "Rubik_Doodle_Shadow" | "Rubik_Doodle_Triangles" | "Rubik_Gemstones" | "Rubik_Glitch" | "Rubik_Glitch_Pop" | "Rubik_Iso" | "Rubik_Lines" | "Rubik_Maps" | "Rubik_Marker_Hatch" | "Rubik_Maze" | "Rubik_Microbe" | "Rubik_Mono_One" | "Rubik_Moonrocks" | "Rubik_Pixels" | "Rubik_Puddles" | "Rubik_Scribble" | "Rubik_Spray_Paint" | "Rubik_Storm" | "Rubik_Vinyl" | "Rubik_Wet_Paint" | "Ruda" | "Rufina" | "Ruge_Boogie" | "Ruluko" | "Rum_Raisin" | "Ruslan_Display" | "Russo_One" | "Ruthie" | "Ruwudu" | "Rye" | "STIX_Two_Text" | "SUSE" | "Sacramento" | "Sahitya" | "Sail" | "Saira" | "Saira_Condensed" | "Saira_Extra_Condensed" | "Saira_Semi_Condensed" | "Saira_Stencil_One" | "Salsa" | "Sanchez" | "Sancreek" | "Sankofa_Display" | "Sansita" | "Sansita_Swashed" | "Sarabun" | "Sarala" | "Sarina" | "Sarpanch" | "Sassy_Frass" | "Satisfy" | "Sawarabi_Gothic" | "Sawarabi_Mincho" | "Scada" | "Scheherazade_New" | "Schibsted_Grotesk" | "Schoolbell" | "Scope_One" | "Seaweed_Script" | "Secular_One" | "Sedan" | "Sedan_SC" | "Sedgwick_Ave" | "Sedgwick_Ave_Display" | "Sen" | "Send_Flowers" | "Sevillana" | "Seymour_One" | "Shadows_Into_Light" | "Shadows_Into_Light_Two" | "Shalimar" | "Shantell_Sans" | "Shanti" | "Share" | "Share_Tech" | "Share_Tech_Mono" | "Shippori_Antique" | "Shippori_Antique_B1" | "Shippori_Mincho" | "Shippori_Mincho_B1" | "Shizuru" | "Shojumaru" | "Short_Stack" | "Shrikhand" | "Siemreap" | "Sigmar" | "Sigmar_One" | "Signika" | "Signika_Negative" | "Silkscreen" | "Simonetta" | "Single_Day" | "Sintony" | "Sirin_Stencil" | "Six_Caps" | "Sixtyfour" | "Sixtyfour_Convergence" | "Skranji" | "Slabo_13px" | "Slabo_27px" | "Slackey" | "Slackside_One" | "Smokum" | "Smooch" | "Smooch_Sans" | "Smythe" | "Sniglet" | "Snippet" | "Snowburst_One" | "Sofadi_One" | "Sofia" | "Sofia_Sans" | "Sofia_Sans_Condensed" | "Sofia_Sans_Extra_Condensed" | "Sofia_Sans_Semi_Condensed" | "Solitreo" | "Solway" | "Sometype_Mono" | "Song_Myung" | "Sono" | "Sonsie_One" | "Sora" | "Sorts_Mill_Goudy" | "Sour_Gummy" | "Source_Code_Pro" | "Source_Sans_3" | "Source_Serif_4" | "Space_Grotesk" | "Space_Mono" | "Special_Elite" | "Spectral" | "Spectral_SC" | "Spicy_Rice" | "Spinnaker" | "Spirax" | "Splash" | "Spline_Sans" | "Spline_Sans_Mono" | "Squada_One" | "Square_Peg" | "Sree_Krushnadevaraya" | "Sriracha" | "Srisakdi" | "Staatliches" | "Stalemate" | "Stalinist_One" | "Stardos_Stencil" | "Stick" | "Stick_No_Bills" | "Stint_Ultra_Condensed" | "Stint_Ultra_Expanded" | "Stoke" | "Strait" | "Style_Script" | "Stylish" | "Sue_Ellen_Francisco" | "Suez_One" | "Sulphur_Point" | "Sumana" | "Sunflower" | "Sunshiney" | "Supermercado_One" | "Sura" | "Suranna" | "Suravaram" | "Suwannaphum" | "Swanky_and_Moo_Moo" | "Syncopate" | "Syne" | "Syne_Mono" | "Syne_Tactile" | "Tac_One" | "Tai_Heritage_Pro" | "Tajawal" | "Tangerine" | "Tapestry" | "Taprom" | "Tauri" | "Taviraj" | "Teachers" | "Teko" | "Tektur" | "Telex" | "Tenali_Ramakrishna" | "Tenor_Sans" | "Text_Me_One" | "Texturina" | "Thasadith" | "The_Girl_Next_Door" | "The_Nautigal" | "Tienne" | "Tillana" | "Tilt_Neon" | "Tilt_Prism" | "Tilt_Warp" | "Timmana" | "Tinos" | "Tiny5" | "Tiro_Bangla" | "Tiro_Devanagari_Hindi" | "Tiro_Devanagari_Marathi" | "Tiro_Devanagari_Sanskrit" | "Tiro_Gurmukhi" | "Tiro_Kannada" | "Tiro_Tamil" | "Tiro_Telugu" | "Titan_One" | "Titillium_Web" | "Tomorrow" | "Tourney" | "Trade_Winds" | "Train_One" | "Trirong" | "Trispace" | "Trocchi" | "Trochut" | "Truculenta" | "Trykker" | "Tsukimi_Rounded" | "Tulpen_One" | "Turret_Road" | "Twinkle_Star" | "Ubuntu" | "Ubuntu_Condensed" | "Ubuntu_Mono" | "Ubuntu_Sans" | "Ubuntu_Sans_Mono" | "Uchen" | "Ultra" | "Unbounded" | "Uncial_Antiqua" | "Underdog" | "Unica_One" | "UnifrakturCook" | "UnifrakturMaguntia" | "Unkempt" | "Unlock" | "Unna" | "Updock" | "Urbanist" | "VT323" | "Vampiro_One" | "Varela" | "Varela_Round" | "Varta" | "Vast_Shadow" | "Vazirmatn" | "Vesper_Libre" | "Viaoda_Libre" | "Vibes" | "Vibur" | "Victor_Mono" | "Vidaloka" | "Viga" | "Vina_Sans" | "Voces" | "Volkhov" | "Vollkorn" | "Vollkorn_SC" | "Voltaire" | "Vujahday_Script" | "Waiting_for_the_Sunrise" | "Wallpoet" | "Walter_Turncoat" | "Warnes" | "Water_Brush" | "Waterfall" | "Wavefont" | "Wellfleet" | "Wendy_One" | "Whisper" | "WindSong" | "Wire_One" | "Wittgenstein" | "Wix_Madefor_Display" | "Wix_Madefor_Text" | "Work_Sans" | "Workbench" | "Xanh_Mono" | "Yaldevi" | "Yanone_Kaffeesatz" | "Yantramanav" | "Yarndings_12" | "Yarndings_12_Charted" | "Yarndings_20" | "Yarndings_20_Charted" | "Yatra_One" | "Yellowtail" | "Yeon_Sung" | "Yeseva_One" | "Yesteryear" | "Yomogi" | "Young_Serif" | "Yrsa" | "Ysabeau" | "Ysabeau_Infant" | "Ysabeau_Office" | "Ysabeau_SC" | "Yuji_Boku" | "Yuji_Hentaigana_Akari" | "Yuji_Hentaigana_Akebono" | "Yuji_Mai" | "Yuji_Syuku" | "Yusei_Magic" | "ZCOOL_KuaiLe" | "ZCOOL_QingKe_HuangYou" | "ZCOOL_XiaoWei" | "Zain" | "Zen_Antique" | "Zen_Antique_Soft" | "Zen_Dots" | "Zen_Kaku_Gothic_Antique" | "Zen_Kaku_Gothic_New" | "Zen_Kurenaido" | "Zen_Loop" | "Zen_Maru_Gothic" | "Zen_Old_Mincho" | "Zen_Tokyo_Zoo" | "Zeyada" | "Zhi_Mang_Xing" | "Zilla_Slab" | "Zilla_Slab_Highlight"; }; ``` ##### theme.font.sizes? ```ts optional sizes: { base?: { lineHeight?: string; size?: string; }; empty-screen-title?: { lineHeight?: string; size?: string; }; error-screen-title?: { lineHeight?: string; size?: string; }; headline?: { lineHeight?: string; size?: string; }; sm?: { lineHeight?: string; size?: string; }; xs?: { lineHeight?: string; size?: string; }; }; ``` ##### theme.font.sizes.base? ```ts optional base: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### theme.font.sizes.base.lineHeight? ```ts optional lineHeight: string; ``` ##### theme.font.sizes.base.size? ```ts optional size: string; ``` ##### theme.font.sizes.empty-screen-title? ```ts optional empty-screen-title: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### theme.font.sizes.empty-screen-title.lineHeight? ```ts optional lineHeight: string; ``` ##### theme.font.sizes.empty-screen-title.size? ```ts optional size: string; ``` ##### theme.font.sizes.error-screen-title? ```ts optional error-screen-title: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### theme.font.sizes.error-screen-title.lineHeight? ```ts optional lineHeight: string; ``` ##### theme.font.sizes.error-screen-title.size? ```ts optional size: string; ``` ##### theme.font.sizes.headline? ```ts optional headline: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### theme.font.sizes.headline.lineHeight? ```ts optional lineHeight: string; ``` ##### theme.font.sizes.headline.size? ```ts optional size: string; ``` ##### theme.font.sizes.sm? ```ts optional sm: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### theme.font.sizes.sm.lineHeight? ```ts optional lineHeight: string; ``` ##### theme.font.sizes.sm.size? ```ts optional size: string; ``` ##### theme.font.sizes.xs? ```ts optional xs: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### theme.font.sizes.xs.lineHeight? ```ts optional lineHeight: string; ``` ##### theme.font.sizes.xs.size? ```ts optional size: string; ``` ##### theme.mode? ```ts optional mode: "dark" | "light"; ``` ##### theme.other? ```ts optional other: { radius?: string; root-padding-horizontal?: string; root-padding-vertical?: string; }; ``` ##### theme.other.radius? ```ts optional radius: string; ``` ##### theme.other.root-padding-horizontal? ```ts optional root-padding-horizontal: string; ``` ##### theme.other.root-padding-vertical? ```ts optional root-padding-vertical: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigSchemaOutputType ## Type Alias: EmbedConfigSchemaOutputType ```ts type EmbedConfigSchemaOutputType = z.output; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:210 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigSupportedChainIdsSchemaType ## Type Alias: EmbedConfigSupportedChainIdsSchemaType ```ts type EmbedConfigSupportedChainIdsSchemaType = 8453 | 31337; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:173 The type for supported chain ids [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigThemeColorsSchemaType ## Type Alias: EmbedConfigThemeColorsSchemaType ```ts type EmbedConfigThemeColorsSchemaType = { dark?: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; light?: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; }; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:94 ### Type declaration #### dark? ```ts optional dark: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; ``` ##### dark.account-edit-link? ```ts optional account-edit-link: string; ``` ##### dark.background? ```ts optional background: string; ``` ##### dark.border? ```ts optional border: string; ``` ##### dark.border-focus? ```ts optional border-focus: string; ``` ##### dark.destructive? ```ts optional destructive: string; ``` ##### dark.destructive-foreground? ```ts optional destructive-foreground: string; ``` ##### dark.foreground? ```ts optional foreground: string; ``` ##### dark.input? ```ts optional input: string; ``` ##### dark.input-foreground? ```ts optional input-foreground: string; ``` ##### dark.muted-foreground? ```ts optional muted-foreground: string; ``` ##### dark.primary? ```ts optional primary: string; ``` ##### dark.primary-foreground? ```ts optional primary-foreground: string; ``` ##### dark.ring? ```ts optional ring: string; ``` ##### dark.secondary? ```ts optional secondary: string; ``` ##### dark.secondary-foreground? ```ts optional secondary-foreground: string; ``` #### light? ```ts optional light: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; ``` ##### light.account-edit-link? ```ts optional account-edit-link: string; ``` ##### light.background? ```ts optional background: string; ``` ##### light.border? ```ts optional border: string; ``` ##### light.border-focus? ```ts optional border-focus: string; ``` ##### light.destructive? ```ts optional destructive: string; ``` ##### light.destructive-foreground? ```ts optional destructive-foreground: string; ``` ##### light.foreground? ```ts optional foreground: string; ``` ##### light.input? ```ts optional input: string; ``` ##### light.input-foreground? ```ts optional input-foreground: string; ``` ##### light.muted-foreground? ```ts optional muted-foreground: string; ``` ##### light.primary? ```ts optional primary: string; ``` ##### light.primary-foreground? ```ts optional primary-foreground: string; ``` ##### light.ring? ```ts optional ring: string; ``` ##### light.secondary? ```ts optional secondary: string; ``` ##### light.secondary-foreground? ```ts optional secondary-foreground: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigThemeOtherSchemaType ## Type Alias: EmbedConfigThemeOtherSchemaType ```ts type EmbedConfigThemeOtherSchemaType = { radius?: string; root-padding-horizontal?: string; root-padding-vertical?: string; }; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:104 ### Type declaration #### radius? ```ts optional radius: string; ``` #### root-padding-horizontal? ```ts optional root-padding-horizontal: string; ``` #### root-padding-vertical? ```ts optional root-padding-vertical: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigThemePaletteSchemaType ## Type Alias: EmbedConfigThemePaletteSchemaType ```ts type EmbedConfigThemePaletteSchemaType = { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:85 ### Type declaration #### account-edit-link? ```ts optional account-edit-link: string; ``` #### background? ```ts optional background: string; ``` #### border? ```ts optional border: string; ``` #### border-focus? ```ts optional border-focus: string; ``` #### destructive? ```ts optional destructive: string; ``` #### destructive-foreground? ```ts optional destructive-foreground: string; ``` #### foreground? ```ts optional foreground: string; ``` #### input? ```ts optional input: string; ``` #### input-foreground? ```ts optional input-foreground: string; ``` #### muted-foreground? ```ts optional muted-foreground: string; ``` #### primary? ```ts optional primary: string; ``` #### primary-foreground? ```ts optional primary-foreground: string; ``` #### ring? ```ts optional ring: string; ``` #### secondary? ```ts optional secondary: string; ``` #### secondary-foreground? ```ts optional secondary-foreground: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigThemeSchemaType ## Type Alias: EmbedConfigThemeSchemaType ```ts type EmbedConfigThemeSchemaType = { colors?: { dark?: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; light?: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; }; font?: { fontFamily?: | { system: string; } | { google?: | "ABeeZee" | "ADLaM_Display" | "AR_One_Sans" | "Abel" | "Abhaya_Libre" | "Aboreto" | "Abril_Fatface" | "Abyssinica_SIL" | "Aclonica" | "Acme" | "Actor" | "Adamina" | "Advent_Pro" | "Afacad" | "Afacad_Flux" | "Agbalumo" | "Agdasima" | "Aguafina_Script" | "Akatab" | "Akaya_Kanadaka" | "Akaya_Telivigala" | "Akronim" | "Akshar" | "Aladin" | "Alata" | "Alatsi" | "Albert_Sans" | "Aldrich" | "Alef" | "Alegreya" | "Alegreya_SC" | "Alegreya_Sans" | "Alegreya_Sans_SC" | "Aleo" | "Alex_Brush" | "Alexandria" | "Alfa_Slab_One" | "Alice" | "Alike" | "Alike_Angular" | "Alkalami" | "Alkatra" | "Allan" | "Allerta" | "Allerta_Stencil" | "Allison" | "Allura" | "Almarai" | "Almendra" | "Almendra_Display" | "Almendra_SC" | "Alumni_Sans" | "Alumni_Sans_Collegiate_One" | "Alumni_Sans_Inline_One" | "Alumni_Sans_Pinstripe" | "Amarante" | "Amaranth" | "Amatic_SC" | "Amethysta" | "Amiko" | "Amiri" | "Amiri_Quran" | "Amita" | "Anaheim" | "Andada_Pro" | "Andika" | "Anek_Bangla" | "Anek_Devanagari" | "Anek_Gujarati" | "Anek_Gurmukhi" | "Anek_Kannada" | "Anek_Latin" | "Anek_Malayalam" | "Anek_Odia" | "Anek_Tamil" | "Anek_Telugu" | "Angkor" | "Annapurna_SIL" | "Annie_Use_Your_Telescope" | "Anonymous_Pro" | "Anta" | "Antic" | "Antic_Didone" | "Antic_Slab" | "Anton" | "Anton_SC" | "Antonio" | "Anuphan" | "Anybody" | "Aoboshi_One" | "Arapey" | "Arbutus" | "Arbutus_Slab" | "Architects_Daughter" | "Archivo" | "Archivo_Black" | "Archivo_Narrow" | "Are_You_Serious" | "Aref_Ruqaa" | "Aref_Ruqaa_Ink" | "Arima" | "Arimo" | "Arizonia" | "Armata" | "Arsenal" | "Arsenal_SC" | "Artifika" | "Arvo" | "Arya" | "Asap" | "Asap_Condensed" | "Asar" | "Asset" | "Assistant" | "Astloch" | "Asul" | "Athiti" | "Atkinson_Hyperlegible" | "Atma" | "Atomic_Age" | "Aubrey" | "Audiowide" | "Autour_One" | "Average" | "Average_Sans" | "Averia_Gruesa_Libre" | "Averia_Libre" | "Averia_Sans_Libre" | "Averia_Serif_Libre" | "Azeret_Mono" | "B612" | "B612_Mono" | "BIZ_UDGothic" | "BIZ_UDMincho" | "BIZ_UDPGothic" | "BIZ_UDPMincho" | "Babylonica" | "Bacasime_Antique" | "Bad_Script" | "Bagel_Fat_One" | "Bahiana" | "Bahianita" | "Bai_Jamjuree" | "Bakbak_One" | "Ballet" | "Baloo_2" | "Baloo_Bhai_2" | "Baloo_Bhaijaan_2" | "Baloo_Bhaina_2" | "Baloo_Chettan_2" | "Baloo_Da_2" | "Baloo_Paaji_2" | "Baloo_Tamma_2" | "Baloo_Tammudu_2" | "Baloo_Thambi_2" | "Balsamiq_Sans" | "Balthazar" | "Bangers" | "Barlow" | "Barlow_Condensed" | "Barlow_Semi_Condensed" | "Barriecito" | "Barrio" | "Basic" | "Baskervville" | "Baskervville_SC" | "Battambang" | "Baumans" | "Bayon" | "Be_Vietnam_Pro" | "Beau_Rivage" | "Bebas_Neue" | "Beiruti" | "Belanosima" | "Belgrano" | "Bellefair" | "Belleza" | "Bellota" | "Bellota_Text" | "BenchNine" | "Benne" | "Bentham" | "Berkshire_Swash" | "Besley" | "Beth_Ellen" | "Bevan" | "BhuTuka_Expanded_One" | "Big_Shoulders_Display" | "Big_Shoulders_Inline_Display" | "Big_Shoulders_Inline_Text" | "Big_Shoulders_Stencil_Display" | "Big_Shoulders_Stencil_Text" | "Big_Shoulders_Text" | "Bigelow_Rules" | "Bigshot_One" | "Bilbo" | "Bilbo_Swash_Caps" | "BioRhyme" | "BioRhyme_Expanded" | "Birthstone" | "Birthstone_Bounce" | "Biryani" | "Bitter" | "Black_And_White_Picture" | "Black_Han_Sans" | "Black_Ops_One" | "Blaka" | "Blaka_Hollow" | "Blaka_Ink" | "Blinker" | "Bodoni_Moda" | "Bodoni_Moda_SC" | "Bokor" | "Bona_Nova" | "Bona_Nova_SC" | "Bonbon" | "Bonheur_Royale" | "Boogaloo" | "Borel" | "Bowlby_One" | "Bowlby_One_SC" | "Braah_One" | "Brawler" | "Bree_Serif" | "Bricolage_Grotesque" | "Bruno_Ace" | "Bruno_Ace_SC" | "Brygada_1918" | "Bubblegum_Sans" | "Bubbler_One" | "Buda" | "Buenard" | "Bungee" | "Bungee_Hairline" | "Bungee_Inline" | "Bungee_Outline" | "Bungee_Shade" | "Bungee_Spice" | "Bungee_Tint" | "Butcherman" | "Butterfly_Kids" | "Cabin" | "Cabin_Condensed" | "Cabin_Sketch" | "Cactus_Classical_Serif" | "Caesar_Dressing" | "Cagliostro" | "Cairo" | "Cairo_Play" | "Caladea" | "Calistoga" | "Calligraffitti" | "Cambay" | "Cambo" | "Candal" | "Cantarell" | "Cantata_One" | "Cantora_One" | "Caprasimo" | "Capriola" | "Caramel" | "Carattere" | "Cardo" | "Carlito" | "Carme" | "Carrois_Gothic" | "Carrois_Gothic_SC" | "Carter_One" | "Castoro" | "Castoro_Titling" | "Catamaran" | "Caudex" | "Caveat" | "Caveat_Brush" | "Cedarville_Cursive" | "Ceviche_One" | "Chakra_Petch" | "Changa" | "Changa_One" | "Chango" | "Charis_SIL" | "Charm" | "Charmonman" | "Chathura" | "Chau_Philomene_One" | "Chela_One" | "Chelsea_Market" | "Chenla" | "Cherish" | "Cherry_Bomb_One" | "Cherry_Cream_Soda" | "Cherry_Swash" | "Chewy" | "Chicle" | "Chilanka" | "Chivo" | "Chivo_Mono" | "Chocolate_Classical_Sans" | "Chokokutai" | "Chonburi" | "Cinzel" | "Cinzel_Decorative" | "Clicker_Script" | "Climate_Crisis" | "Coda" | "Codystar" | "Coiny" | "Combo" | "Comfortaa" | "Comforter" | "Comforter_Brush" | "Comic_Neue" | "Coming_Soon" | "Comme" | "Commissioner" | "Concert_One" | "Condiment" | "Content" | "Contrail_One" | "Convergence" | "Cookie" | "Copse" | "Corben" | "Corinthia" | "Cormorant" | "Cormorant_Garamond" | "Cormorant_Infant" | "Cormorant_SC" | "Cormorant_Unicase" | "Cormorant_Upright" | "Courgette" | "Courier_Prime" | "Cousine" | "Coustard" | "Covered_By_Your_Grace" | "Crafty_Girls" | "Creepster" | "Crete_Round" | "Crimson_Pro" | "Crimson_Text" | "Croissant_One" | "Crushed" | "Cuprum" | "Cute_Font" | "Cutive" | "Cutive_Mono" | "DM_Mono" | "DM_Sans" | "DM_Serif_Display" | "DM_Serif_Text" | "Dai_Banna_SIL" | "Damion" | "Dancing_Script" | "Danfo" | "Dangrek" | "Darker_Grotesque" | "Darumadrop_One" | "David_Libre" | "Dawning_of_a_New_Day" | "Days_One" | "Dekko" | "Dela_Gothic_One" | "Delicious_Handrawn" | "Delius" | "Delius_Swash_Caps" | "Delius_Unicase" | "Della_Respira" | "Denk_One" | "Devonshire" | "Dhurjati" | "Didact_Gothic" | "Diphylleia" | "Diplomata" | "Diplomata_SC" | "Do_Hyeon" | "Dokdo" | "Domine" | "Donegal_One" | "Dongle" | "Doppio_One" | "Dorsa" | "Dosis" | "DotGothic16" | "Doto" | "Dr_Sugiyama" | "Duru_Sans" | "DynaPuff" | "Dynalight" | "EB_Garamond" | "Eagle_Lake" | "East_Sea_Dokdo" | "Eater" | "Economica" | "Eczar" | "Edu_AU_VIC_WA_NT_Arrows" | "Edu_AU_VIC_WA_NT_Dots" | "Edu_AU_VIC_WA_NT_Guides" | "Edu_AU_VIC_WA_NT_Hand" | "Edu_AU_VIC_WA_NT_Pre" | "Edu_NSW_ACT_Foundation" | "Edu_QLD_Beginner" | "Edu_SA_Beginner" | "Edu_TAS_Beginner" | "Edu_VIC_WA_NT_Beginner" | "El_Messiri" | "Electrolize" | "Elsie" | "Elsie_Swash_Caps" | "Emblema_One" | "Emilys_Candy" | "Encode_Sans" | "Encode_Sans_Condensed" | "Encode_Sans_Expanded" | "Encode_Sans_SC" | "Encode_Sans_Semi_Condensed" | "Encode_Sans_Semi_Expanded" | "Engagement" | "Englebert" | "Enriqueta" | "Ephesis" | "Epilogue" | "Erica_One" | "Esteban" | "Estonia" | "Euphoria_Script" | "Ewert" | "Exo" | "Exo_2" | "Expletus_Sans" | "Explora" | "Faculty_Glyphic" | "Fahkwang" | "Familjen_Grotesk" | "Fanwood_Text" | "Farro" | "Farsan" | "Fascinate" | "Fascinate_Inline" | "Faster_One" | "Fasthand" | "Fauna_One" | "Faustina" | "Federant" | "Federo" | "Felipa" | "Fenix" | "Festive" | "Figtree" | "Finger_Paint" | "Finlandica" | "Fira_Code" | "Fira_Mono" | "Fira_Sans" | "Fira_Sans_Condensed" | "Fira_Sans_Extra_Condensed" | "Fjalla_One" | "Fjord_One" | "Flamenco" | "Flavors" | "Fleur_De_Leah" | "Flow_Block" | "Flow_Circular" | "Flow_Rounded" | "Foldit" | "Fondamento" | "Fontdiner_Swanky" | "Forum" | "Fragment_Mono" | "Francois_One" | "Frank_Ruhl_Libre" | "Fraunces" | "Freckle_Face" | "Fredericka_the_Great" | "Fredoka" | "Freehand" | "Freeman" | "Fresca" | "Frijole" | "Fruktur" | "Fugaz_One" | "Fuggles" | "Funnel_Display" | "Funnel_Sans" | "Fustat" | "Fuzzy_Bubbles" | "GFS_Didot" | "GFS_Neohellenic" | "Ga_Maamli" | "Gabarito" | "Gabriela" | "Gaegu" | "Gafata" | "Gajraj_One" | "Galada" | "Galdeano" | "Galindo" | "Gamja_Flower" | "Gantari" | "Gasoek_One" | "Gayathri" | "Geist" | "Geist_Mono" | "Gelasio" | "Gemunu_Libre" | "Genos" | "Gentium_Book_Plus" | "Gentium_Plus" | "Geo" | "Geologica" | "Georama" | "Geostar" | "Geostar_Fill" | "Germania_One" | "Gideon_Roman" | "Gidugu" | "Gilda_Display" | "Girassol" | "Give_You_Glory" | "Glass_Antiqua" | "Glegoo" | "Gloock" | "Gloria_Hallelujah" | "Glory" | "Gluten" | "Goblin_One" | "Gochi_Hand" | "Goldman" | "Golos_Text" | "Gorditas" | "Gothic_A1" | "Gotu" | "Goudy_Bookletter_1911" | "Gowun_Batang" | "Gowun_Dodum" | "Graduate" | "Grand_Hotel" | "Grandiflora_One" | "Grandstander" | "Grape_Nuts" | "Gravitas_One" | "Great_Vibes" | "Grechen_Fuemen" | "Grenze" | "Grenze_Gotisch" | "Grey_Qo" | "Griffy" | "Gruppo" | "Gudea" | "Gugi" | "Gulzar" | "Gupter" | "Gurajada" | "Gwendolyn" | "Habibi" | "Hachi_Maru_Pop" | "Hahmlet" | "Halant" | "Hammersmith_One" | "Hanalei" | "Hanalei_Fill" | "Handjet" | "Handlee" | "Hanken_Grotesk" | "Hanuman" | "Happy_Monkey" | "Harmattan" | "Headland_One" | "Hedvig_Letters_Sans" | "Hedvig_Letters_Serif" | "Heebo" | "Henny_Penny" | "Hepta_Slab" | "Herr_Von_Muellerhoff" | "Hi_Melody" | "Hina_Mincho" | "Hind" | "Hind_Guntur" | "Hind_Madurai" | "Hind_Siliguri" | "Hind_Vadodara" | "Holtwood_One_SC" | "Homemade_Apple" | "Homenaje" | "Honk" | "Host_Grotesk" | "Hubballi" | "Hubot_Sans" | "Hurricane" | "IBM_Plex_Mono" | "IBM_Plex_Sans" | "IBM_Plex_Sans_Arabic" | "IBM_Plex_Sans_Condensed" | "IBM_Plex_Sans_Devanagari" | "IBM_Plex_Sans_Hebrew" | "IBM_Plex_Sans_JP" | "IBM_Plex_Sans_KR" | "IBM_Plex_Sans_Thai" | "IBM_Plex_Sans_Thai_Looped" | "IBM_Plex_Serif" | "IM_Fell_DW_Pica" | "IM_Fell_DW_Pica_SC" | "IM_Fell_Double_Pica" | "IM_Fell_Double_Pica_SC" | "IM_Fell_English" | "IM_Fell_English_SC" | "IM_Fell_French_Canon" | "IM_Fell_French_Canon_SC" | "IM_Fell_Great_Primer" | "IM_Fell_Great_Primer_SC" | "Ibarra_Real_Nova" | "Iceberg" | "Iceland" | "Imbue" | "Imperial_Script" | "Imprima" | "Inclusive_Sans" | "Inconsolata" | "Inder" | "Indie_Flower" | "Ingrid_Darling" | "Inika" | "Inknut_Antiqua" | "Inria_Sans" | "Inria_Serif" | "Inspiration" | "Instrument_Sans" | "Instrument_Serif" | "Inter" | "Inter_Tight" | "Irish_Grover" | "Island_Moments" | "Istok_Web" | "Italiana" | "Italianno" | "Itim" | "Jacquard_12" | "Jacquard_12_Charted" | "Jacquard_24" | "Jacquard_24_Charted" | "Jacquarda_Bastarda_9" | "Jacquarda_Bastarda_9_Charted" | "Jacques_Francois" | "Jacques_Francois_Shadow" | "Jaini" | "Jaini_Purva" | "Jaldi" | "Jaro" | "Jersey_10" | "Jersey_10_Charted" | "Jersey_15" | "Jersey_15_Charted" | "Jersey_20" | "Jersey_20_Charted" | "Jersey_25" | "Jersey_25_Charted" | "JetBrains_Mono" | "Jim_Nightshade" | "Joan" | "Jockey_One" | "Jolly_Lodger" | "Jomhuria" | "Jomolhari" | "Josefin_Sans" | "Josefin_Slab" | "Jost" | "Joti_One" | "Jua" | "Judson" | "Julee" | "Julius_Sans_One" | "Junge" | "Jura" | "Just_Another_Hand" | "Just_Me_Again_Down_Here" | "K2D" | "Kablammo" | "Kadwa" | "Kaisei_Decol" | "Kaisei_HarunoUmi" | "Kaisei_Opti" | "Kaisei_Tokumin" | "Kalam" | "Kalnia" | "Kalnia_Glaze" | "Kameron" | "Kanit" | "Kantumruy_Pro" | "Karantina" | "Karla" | "Karla_Tamil_Inclined" | "Karla_Tamil_Upright" | "Karma" | "Katibeh" | "Kaushan_Script" | "Kavivanar" | "Kavoon" | "Kay_Pho_Du" | "Kdam_Thmor_Pro" | "Keania_One" | "Kelly_Slab" | "Kenia" | "Khand" | "Khmer" | "Khula" | "Kings" | "Kirang_Haerang" | "Kite_One" | "Kiwi_Maru" | "Klee_One" | "Knewave" | "KoHo" | "Kodchasan" | "Kode_Mono" | "Koh_Santepheap" | "Kolker_Brush" | "Konkhmer_Sleokchher" | "Kosugi" | "Kosugi_Maru" | "Kotta_One" | "Koulen" | "Kranky" | "Kreon" | "Kristi" | "Krona_One" | "Krub" | "Kufam" | "Kulim_Park" | "Kumar_One" | "Kumar_One_Outline" | "Kumbh_Sans" | "Kurale" | "LXGW_WenKai_Mono_TC" | "LXGW_WenKai_TC" | "La_Belle_Aurore" | "Labrada" | "Lacquer" | "Laila" | "Lakki_Reddy" | "Lalezar" | "Lancelot" | "Langar" | "Lateef" | "Lato" | "Lavishly_Yours" | "League_Gothic" | "League_Script" | "League_Spartan" | "Leckerli_One" | "Ledger" | "Lekton" | "Lemon" | "Lemonada" | "Lexend" | "Lexend_Deca" | "Lexend_Exa" | "Lexend_Giga" | "Lexend_Mega" | "Lexend_Peta" | "Lexend_Tera" | "Lexend_Zetta" | "Libre_Barcode_128" | "Libre_Barcode_128_Text" | "Libre_Barcode_39" | "Libre_Barcode_39_Extended" | "Libre_Barcode_39_Extended_Text" | "Libre_Barcode_39_Text" | "Libre_Barcode_EAN13_Text" | "Libre_Baskerville" | "Libre_Bodoni" | "Libre_Caslon_Display" | "Libre_Caslon_Text" | "Libre_Franklin" | "Licorice" | "Life_Savers" | "Lilita_One" | "Lily_Script_One" | "Limelight" | "Linden_Hill" | "Linefont" | "Lisu_Bosa" | "Literata" | "Liu_Jian_Mao_Cao" | "Livvic" | "Lobster" | "Lobster_Two" | "Londrina_Outline" | "Londrina_Shadow" | "Londrina_Sketch" | "Londrina_Solid" | "Long_Cang" | "Lora" | "Love_Light" | "Love_Ya_Like_A_Sister" | "Loved_by_the_King" | "Lovers_Quarrel" | "Luckiest_Guy" | "Lugrasimo" | "Lumanosimo" | "Lunasima" | "Lusitana" | "Lustria" | "Luxurious_Roman" | "Luxurious_Script" | "M_PLUS_1" | "M_PLUS_1_Code" | "M_PLUS_1p" | "M_PLUS_2" | "M_PLUS_Code_Latin" | "M_PLUS_Rounded_1c" | "Ma_Shan_Zheng" | "Macondo" | "Macondo_Swash_Caps" | "Mada" | "Madimi_One" | "Magra" | "Maiden_Orange" | "Maitree" | "Major_Mono_Display" | "Mako" | "Mali" | "Mallanna" | "Maname" | "Mandali" | "Manjari" | "Manrope" | "Mansalva" | "Manuale" | "Marcellus" | "Marcellus_SC" | "Marck_Script" | "Margarine" | "Marhey" | "Markazi_Text" | "Marko_One" | "Marmelad" | "Martel" | "Martel_Sans" | "Martian_Mono" | "Marvel" | "Mate" | "Mate_SC" | "Matemasie" | "Maven_Pro" | "McLaren" | "Mea_Culpa" | "Meddon" | "MedievalSharp" | "Medula_One" | "Meera_Inimai" | "Megrim" | "Meie_Script" | "Meow_Script" | "Merienda" | "Merriweather" | "Merriweather_Sans" | "Metal" | "Metal_Mania" | "Metamorphous" | "Metrophobic" | "Michroma" | "Micro_5" | "Micro_5_Charted" | "Milonga" | "Miltonian" | "Miltonian_Tattoo" | "Mina" | "Mingzat" | "Miniver" | "Miriam_Libre" | "Mirza" | "Miss_Fajardose" | "Mitr" | "Mochiy_Pop_One" | "Mochiy_Pop_P_One" | "Modak" | "Modern_Antiqua" | "Moderustic" | "Mogra" | "Mohave" | "Moirai_One" | "Molengo" | "Molle" | "Mona_Sans" | "Monda" | "Monofett" | "Monomaniac_One" | "Monoton" | "Monsieur_La_Doulaise" | "Montaga" | "Montagu_Slab" | "MonteCarlo" | "Montez" | "Montserrat" | "Montserrat_Alternates" | "Montserrat_Subrayada" | "Moo_Lah_Lah" | "Mooli" | "Moon_Dance" | "Moul" | "Moulpali" | "Mountains_of_Christmas" | "Mouse_Memoirs" | "Mr_Bedfort" | "Mr_Dafoe" | "Mr_De_Haviland" | "Mrs_Saint_Delafield" | "Mrs_Sheppards" | "Ms_Madi" | "Mukta" | "Mukta_Mahee" | "Mukta_Malar" | "Mukta_Vaani" | "Mulish" | "Murecho" | "MuseoModerno" | "My_Soul" | "Mynerve" | "Mystery_Quest" | "NTR" | "Nabla" | "Namdhinggo" | "Nanum_Brush_Script" | "Nanum_Gothic" | "Nanum_Gothic_Coding" | "Nanum_Myeongjo" | "Nanum_Pen_Script" | "Narnoor" | "Neonderthaw" | "Nerko_One" | "Neucha" | "Neuton" | "New_Amsterdam" | "New_Rocker" | "New_Tegomin" | "News_Cycle" | "Newsreader" | "Niconne" | "Niramit" | "Nixie_One" | "Nobile" | "Nokora" | "Norican" | "Nosifer" | "Notable" | "Nothing_You_Could_Do" | "Noticia_Text" | "Noto_Color_Emoji" | "Noto_Emoji" | "Noto_Kufi_Arabic" | "Noto_Music" | "Noto_Naskh_Arabic" | "Noto_Nastaliq_Urdu" | "Noto_Rashi_Hebrew" | "Noto_Sans" | "Noto_Sans_Adlam" | "Noto_Sans_Adlam_Unjoined" | "Noto_Sans_Anatolian_Hieroglyphs" | "Noto_Sans_Arabic" | "Noto_Sans_Armenian" | "Noto_Sans_Avestan" | "Noto_Sans_Balinese" | "Noto_Sans_Bamum" | "Noto_Sans_Bassa_Vah" | "Noto_Sans_Batak" | "Noto_Sans_Bengali" | "Noto_Sans_Bhaiksuki" | "Noto_Sans_Brahmi" | "Noto_Sans_Buginese" | "Noto_Sans_Buhid" | "Noto_Sans_Canadian_Aboriginal" | "Noto_Sans_Carian" | "Noto_Sans_Caucasian_Albanian" | "Noto_Sans_Chakma" | "Noto_Sans_Cham" | "Noto_Sans_Cherokee" | "Noto_Sans_Chorasmian" | "Noto_Sans_Coptic" | "Noto_Sans_Cuneiform" | "Noto_Sans_Cypriot" | "Noto_Sans_Cypro_Minoan" | "Noto_Sans_Deseret" | "Noto_Sans_Devanagari" | "Noto_Sans_Display" | "Noto_Sans_Duployan" | "Noto_Sans_Egyptian_Hieroglyphs" | "Noto_Sans_Elbasan" | "Noto_Sans_Elymaic" | "Noto_Sans_Ethiopic" | "Noto_Sans_Georgian" | "Noto_Sans_Glagolitic" | "Noto_Sans_Gothic" | "Noto_Sans_Grantha" | "Noto_Sans_Gujarati" | "Noto_Sans_Gunjala_Gondi" | "Noto_Sans_Gurmukhi" | "Noto_Sans_HK" | "Noto_Sans_Hanifi_Rohingya" | "Noto_Sans_Hanunoo" | "Noto_Sans_Hatran" | "Noto_Sans_Hebrew" | "Noto_Sans_Imperial_Aramaic" | "Noto_Sans_Indic_Siyaq_Numbers" | "Noto_Sans_Inscriptional_Pahlavi" | "Noto_Sans_Inscriptional_Parthian" | "Noto_Sans_JP" | "Noto_Sans_Javanese" | "Noto_Sans_KR" | "Noto_Sans_Kaithi" | "Noto_Sans_Kannada" | "Noto_Sans_Kawi" | "Noto_Sans_Kayah_Li" | "Noto_Sans_Kharoshthi" | "Noto_Sans_Khmer" | "Noto_Sans_Khojki" | "Noto_Sans_Khudawadi" | "Noto_Sans_Lao" | "Noto_Sans_Lao_Looped" | "Noto_Sans_Lepcha" | "Noto_Sans_Limbu" | "Noto_Sans_Linear_A" | "Noto_Sans_Linear_B" | "Noto_Sans_Lisu" | "Noto_Sans_Lycian" | "Noto_Sans_Lydian" | "Noto_Sans_Mahajani" | "Noto_Sans_Malayalam" | "Noto_Sans_Mandaic" | "Noto_Sans_Manichaean" | "Noto_Sans_Marchen" | "Noto_Sans_Masaram_Gondi" | "Noto_Sans_Math" | "Noto_Sans_Mayan_Numerals" | "Noto_Sans_Medefaidrin" | "Noto_Sans_Meetei_Mayek" | "Noto_Sans_Mende_Kikakui" | "Noto_Sans_Meroitic" | "Noto_Sans_Miao" | "Noto_Sans_Modi" | "Noto_Sans_Mongolian" | "Noto_Sans_Mono" | "Noto_Sans_Mro" | "Noto_Sans_Multani" | "Noto_Sans_Myanmar" | "Noto_Sans_NKo" | "Noto_Sans_NKo_Unjoined" | "Noto_Sans_Nabataean" | "Noto_Sans_Nag_Mundari" | "Noto_Sans_Nandinagari" | "Noto_Sans_New_Tai_Lue" | "Noto_Sans_Newa" | "Noto_Sans_Nushu" | "Noto_Sans_Ogham" | "Noto_Sans_Ol_Chiki" | "Noto_Sans_Old_Hungarian" | "Noto_Sans_Old_Italic" | "Noto_Sans_Old_North_Arabian" | "Noto_Sans_Old_Permic" | "Noto_Sans_Old_Persian" | "Noto_Sans_Old_Sogdian" | "Noto_Sans_Old_South_Arabian" | "Noto_Sans_Old_Turkic" | "Noto_Sans_Oriya" | "Noto_Sans_Osage" | "Noto_Sans_Osmanya" | "Noto_Sans_Pahawh_Hmong" | "Noto_Sans_Palmyrene" | "Noto_Sans_Pau_Cin_Hau" | "Noto_Sans_Phags_Pa" | "Noto_Sans_Phoenician" | "Noto_Sans_Psalter_Pahlavi" | "Noto_Sans_Rejang" | "Noto_Sans_Runic" | "Noto_Sans_SC" | "Noto_Sans_Samaritan" | "Noto_Sans_Saurashtra" | "Noto_Sans_Sharada" | "Noto_Sans_Shavian" | "Noto_Sans_Siddham" | "Noto_Sans_SignWriting" | "Noto_Sans_Sinhala" | "Noto_Sans_Sogdian" | "Noto_Sans_Sora_Sompeng" | "Noto_Sans_Soyombo" | "Noto_Sans_Sundanese" | "Noto_Sans_Syloti_Nagri" | "Noto_Sans_Symbols" | "Noto_Sans_Symbols_2" | "Noto_Sans_Syriac" | "Noto_Sans_Syriac_Eastern" | "Noto_Sans_TC" | "Noto_Sans_Tagalog" | "Noto_Sans_Tagbanwa" | "Noto_Sans_Tai_Le" | "Noto_Sans_Tai_Tham" | "Noto_Sans_Tai_Viet" | "Noto_Sans_Takri" | "Noto_Sans_Tamil" | "Noto_Sans_Tamil_Supplement" | "Noto_Sans_Tangsa" | "Noto_Sans_Telugu" | "Noto_Sans_Thaana" | "Noto_Sans_Thai" | "Noto_Sans_Thai_Looped" | "Noto_Sans_Tifinagh" | "Noto_Sans_Tirhuta" | "Noto_Sans_Ugaritic" | "Noto_Sans_Vai" | "Noto_Sans_Vithkuqi" | "Noto_Sans_Wancho" | "Noto_Sans_Warang_Citi" | "Noto_Sans_Yi" | "Noto_Sans_Zanabazar_Square" | "Noto_Serif" | "Noto_Serif_Ahom" | "Noto_Serif_Armenian" | "Noto_Serif_Balinese" | "Noto_Serif_Bengali" | "Noto_Serif_Devanagari" | "Noto_Serif_Display" | "Noto_Serif_Dogra" | "Noto_Serif_Ethiopic" | "Noto_Serif_Georgian" | "Noto_Serif_Grantha" | "Noto_Serif_Gujarati" | "Noto_Serif_Gurmukhi" | "Noto_Serif_HK" | "Noto_Serif_Hebrew" | "Noto_Serif_JP" | "Noto_Serif_KR" | "Noto_Serif_Kannada" | "Noto_Serif_Khitan_Small_Script" | "Noto_Serif_Khmer" | "Noto_Serif_Khojki" | "Noto_Serif_Lao" | "Noto_Serif_Makasar" | "Noto_Serif_Malayalam" | "Noto_Serif_Myanmar" | "Noto_Serif_NP_Hmong" | "Noto_Serif_Old_Uyghur" | "Noto_Serif_Oriya" | "Noto_Serif_Ottoman_Siyaq" | "Noto_Serif_SC" | "Noto_Serif_Sinhala" | "Noto_Serif_TC" | "Noto_Serif_Tamil" | "Noto_Serif_Tangut" | "Noto_Serif_Telugu" | "Noto_Serif_Thai" | "Noto_Serif_Tibetan" | "Noto_Serif_Toto" | "Noto_Serif_Vithkuqi" | "Noto_Serif_Yezidi" | "Noto_Traditional_Nushu" | "Noto_Znamenny_Musical_Notation" | "Nova_Cut" | "Nova_Flat" | "Nova_Mono" | "Nova_Oval" | "Nova_Round" | "Nova_Script" | "Nova_Slim" | "Nova_Square" | "Numans" | "Nunito" | "Nunito_Sans" | "Nuosu_SIL" | "Odibee_Sans" | "Odor_Mean_Chey" | "Offside" | "Oi" | "Ojuju" | "Old_Standard_TT" | "Oldenburg" | "Ole" | "Oleo_Script" | "Oleo_Script_Swash_Caps" | "Onest" | "Oooh_Baby" | "Open_Sans" | "Oranienbaum" | "Orbit" | "Orbitron" | "Oregano" | "Orelega_One" | "Orienta" | "Original_Surfer" | "Oswald" | "Outfit" | "Over_the_Rainbow" | "Overlock" | "Overlock_SC" | "Overpass" | "Overpass_Mono" | "Ovo" | "Oxanium" | "Oxygen" | "Oxygen_Mono" | "PT_Mono" | "PT_Sans" | "PT_Sans_Caption" | "PT_Sans_Narrow" | "PT_Serif" | "PT_Serif_Caption" | "Pacifico" | "Padauk" | "Padyakke_Expanded_One" | "Palanquin" | "Palanquin_Dark" | "Palette_Mosaic" | "Pangolin" | "Paprika" | "Parisienne" | "Parkinsans" | "Passero_One" | "Passion_One" | "Passions_Conflict" | "Pathway_Extreme" | "Pathway_Gothic_One" | "Patrick_Hand" | "Patrick_Hand_SC" | "Pattaya" | "Patua_One" | "Pavanam" | "Paytone_One" | "Peddana" | "Peralta" | "Permanent_Marker" | "Petemoss" | "Petit_Formal_Script" | "Petrona" | "Phetsarath" | "Philosopher" | "Phudu" | "Piazzolla" | "Piedra" | "Pinyon_Script" | "Pirata_One" | "Pixelify_Sans" | "Plaster" | "Platypi" | "Play" | "Playball" | "Playfair" | "Playfair_Display" | "Playfair_Display_SC" | "Playpen_Sans" | "Playwrite_AR" | "Playwrite_AT" | "Playwrite_AU_NSW" | "Playwrite_AU_QLD" | "Playwrite_AU_SA" | "Playwrite_AU_TAS" | "Playwrite_AU_VIC" | "Playwrite_BE_VLG" | "Playwrite_BE_WAL" | "Playwrite_BR" | "Playwrite_CA" | "Playwrite_CL" | "Playwrite_CO" | "Playwrite_CU" | "Playwrite_CZ" | "Playwrite_DE_Grund" | "Playwrite_DE_LA" | "Playwrite_DE_SAS" | "Playwrite_DE_VA" | "Playwrite_DK_Loopet" | "Playwrite_DK_Uloopet" | "Playwrite_ES" | "Playwrite_ES_Deco" | "Playwrite_FR_Moderne" | "Playwrite_FR_Trad" | "Playwrite_GB_J" | "Playwrite_GB_S" | "Playwrite_HR" | "Playwrite_HR_Lijeva" | "Playwrite_HU" | "Playwrite_ID" | "Playwrite_IE" | "Playwrite_IN" | "Playwrite_IS" | "Playwrite_IT_Moderna" | "Playwrite_IT_Trad" | "Playwrite_MX" | "Playwrite_NG_Modern" | "Playwrite_NL" | "Playwrite_NO" | "Playwrite_NZ" | "Playwrite_PE" | "Playwrite_PL" | "Playwrite_PT" | "Playwrite_RO" | "Playwrite_SK" | "Playwrite_TZ" | "Playwrite_US_Modern" | "Playwrite_US_Trad" | "Playwrite_VN" | "Playwrite_ZA" | "Plus_Jakarta_Sans" | "Podkova" | "Poetsen_One" | "Poiret_One" | "Poller_One" | "Poltawski_Nowy" | "Poly" | "Pompiere" | "Ponnala" | "Pontano_Sans" | "Poor_Story" | "Poppins" | "Port_Lligat_Sans" | "Port_Lligat_Slab" | "Potta_One" | "Pragati_Narrow" | "Praise" | "Prata" | "Preahvihear" | "Press_Start_2P" | "Pridi" | "Princess_Sofia" | "Prociono" | "Prompt" | "Prosto_One" | "Protest_Guerrilla" | "Protest_Revolution" | "Protest_Riot" | "Protest_Strike" | "Proza_Libre" | "Public_Sans" | "Puppies_Play" | "Puritan" | "Purple_Purse" | "Qahiri" | "Quando" | "Quantico" | "Quattrocento" | "Quattrocento_Sans" | "Questrial" | "Quicksand" | "Quintessential" | "Qwigley" | "Qwitcher_Grypen" | "REM" | "Racing_Sans_One" | "Radio_Canada" | "Radio_Canada_Big" | "Radley" | "Rajdhani" | "Rakkas" | "Raleway" | "Raleway_Dots" | "Ramabhadra" | "Ramaraja" | "Rambla" | "Rammetto_One" | "Rampart_One" | "Ranchers" | "Rancho" | "Ranga" | "Rasa" | "Rationale" | "Ravi_Prakash" | "Readex_Pro" | "Recursive" | "Red_Hat_Display" | "Red_Hat_Mono" | "Red_Hat_Text" | "Red_Rose" | "Redacted" | "Redacted_Script" | "Reddit_Mono" | "Reddit_Sans" | "Reddit_Sans_Condensed" | "Redressed" | "Reem_Kufi" | "Reem_Kufi_Fun" | "Reem_Kufi_Ink" | "Reenie_Beanie" | "Reggae_One" | "Rethink_Sans" | "Revalia" | "Rhodium_Libre" | "Ribeye" | "Ribeye_Marrow" | "Righteous" | "Risque" | "Road_Rage" | "Roboto" | "Roboto_Condensed" | "Roboto_Flex" | "Roboto_Mono" | "Roboto_Serif" | "Roboto_Slab" | "Rochester" | "Rock_3D" | "Rock_Salt" | "RocknRoll_One" | "Rokkitt" | "Romanesco" | "Ropa_Sans" | "Rosario" | "Rosarivo" | "Rouge_Script" | "Rowdies" | "Rozha_One" | "Rubik" | "Rubik_80s_Fade" | "Rubik_Beastly" | "Rubik_Broken_Fax" | "Rubik_Bubbles" | "Rubik_Burned" | "Rubik_Dirt" | "Rubik_Distressed" | "Rubik_Doodle_Shadow" | "Rubik_Doodle_Triangles" | "Rubik_Gemstones" | "Rubik_Glitch" | "Rubik_Glitch_Pop" | "Rubik_Iso" | "Rubik_Lines" | "Rubik_Maps" | "Rubik_Marker_Hatch" | "Rubik_Maze" | "Rubik_Microbe" | "Rubik_Mono_One" | "Rubik_Moonrocks" | "Rubik_Pixels" | "Rubik_Puddles" | "Rubik_Scribble" | "Rubik_Spray_Paint" | "Rubik_Storm" | "Rubik_Vinyl" | "Rubik_Wet_Paint" | "Ruda" | "Rufina" | "Ruge_Boogie" | "Ruluko" | "Rum_Raisin" | "Ruslan_Display" | "Russo_One" | "Ruthie" | "Ruwudu" | "Rye" | "STIX_Two_Text" | "SUSE" | "Sacramento" | "Sahitya" | "Sail" | "Saira" | "Saira_Condensed" | "Saira_Extra_Condensed" | "Saira_Semi_Condensed" | "Saira_Stencil_One" | "Salsa" | "Sanchez" | "Sancreek" | "Sankofa_Display" | "Sansita" | "Sansita_Swashed" | "Sarabun" | "Sarala" | "Sarina" | "Sarpanch" | "Sassy_Frass" | "Satisfy" | "Sawarabi_Gothic" | "Sawarabi_Mincho" | "Scada" | "Scheherazade_New" | "Schibsted_Grotesk" | "Schoolbell" | "Scope_One" | "Seaweed_Script" | "Secular_One" | "Sedan" | "Sedan_SC" | "Sedgwick_Ave" | "Sedgwick_Ave_Display" | "Sen" | "Send_Flowers" | "Sevillana" | "Seymour_One" | "Shadows_Into_Light" | "Shadows_Into_Light_Two" | "Shalimar" | "Shantell_Sans" | "Shanti" | "Share" | "Share_Tech" | "Share_Tech_Mono" | "Shippori_Antique" | "Shippori_Antique_B1" | "Shippori_Mincho" | "Shippori_Mincho_B1" | "Shizuru" | "Shojumaru" | "Short_Stack" | "Shrikhand" | "Siemreap" | "Sigmar" | "Sigmar_One" | "Signika" | "Signika_Negative" | "Silkscreen" | "Simonetta" | "Single_Day" | "Sintony" | "Sirin_Stencil" | "Six_Caps" | "Sixtyfour" | "Sixtyfour_Convergence" | "Skranji" | "Slabo_13px" | "Slabo_27px" | "Slackey" | "Slackside_One" | "Smokum" | "Smooch" | "Smooch_Sans" | "Smythe" | "Sniglet" | "Snippet" | "Snowburst_One" | "Sofadi_One" | "Sofia" | "Sofia_Sans" | "Sofia_Sans_Condensed" | "Sofia_Sans_Extra_Condensed" | "Sofia_Sans_Semi_Condensed" | "Solitreo" | "Solway" | "Sometype_Mono" | "Song_Myung" | "Sono" | "Sonsie_One" | "Sora" | "Sorts_Mill_Goudy" | "Sour_Gummy" | "Source_Code_Pro" | "Source_Sans_3" | "Source_Serif_4" | "Space_Grotesk" | "Space_Mono" | "Special_Elite" | "Spectral" | "Spectral_SC" | "Spicy_Rice" | "Spinnaker" | "Spirax" | "Splash" | "Spline_Sans" | "Spline_Sans_Mono" | "Squada_One" | "Square_Peg" | "Sree_Krushnadevaraya" | "Sriracha" | "Srisakdi" | "Staatliches" | "Stalemate" | "Stalinist_One" | "Stardos_Stencil" | "Stick" | "Stick_No_Bills" | "Stint_Ultra_Condensed" | "Stint_Ultra_Expanded" | "Stoke" | "Strait" | "Style_Script" | "Stylish" | "Sue_Ellen_Francisco" | "Suez_One" | "Sulphur_Point" | "Sumana" | "Sunflower" | "Sunshiney" | "Supermercado_One" | "Sura" | "Suranna" | "Suravaram" | "Suwannaphum" | "Swanky_and_Moo_Moo" | "Syncopate" | "Syne" | "Syne_Mono" | "Syne_Tactile" | "Tac_One" | "Tai_Heritage_Pro" | "Tajawal" | "Tangerine" | "Tapestry" | "Taprom" | "Tauri" | "Taviraj" | "Teachers" | "Teko" | "Tektur" | "Telex" | "Tenali_Ramakrishna" | "Tenor_Sans" | "Text_Me_One" | "Texturina" | "Thasadith" | "The_Girl_Next_Door" | "The_Nautigal" | "Tienne" | "Tillana" | "Tilt_Neon" | "Tilt_Prism" | "Tilt_Warp" | "Timmana" | "Tinos" | "Tiny5" | "Tiro_Bangla" | "Tiro_Devanagari_Hindi" | "Tiro_Devanagari_Marathi" | "Tiro_Devanagari_Sanskrit" | "Tiro_Gurmukhi" | "Tiro_Kannada" | "Tiro_Tamil" | "Tiro_Telugu" | "Titan_One" | "Titillium_Web" | "Tomorrow" | "Tourney" | "Trade_Winds" | "Train_One" | "Trirong" | "Trispace" | "Trocchi" | "Trochut" | "Truculenta" | "Trykker" | "Tsukimi_Rounded" | "Tulpen_One" | "Turret_Road" | "Twinkle_Star" | "Ubuntu" | "Ubuntu_Condensed" | "Ubuntu_Mono" | "Ubuntu_Sans" | "Ubuntu_Sans_Mono" | "Uchen" | "Ultra" | "Unbounded" | "Uncial_Antiqua" | "Underdog" | "Unica_One" | "UnifrakturCook" | "UnifrakturMaguntia" | "Unkempt" | "Unlock" | "Unna" | "Updock" | "Urbanist" | "VT323" | "Vampiro_One" | "Varela" | "Varela_Round" | "Varta" | "Vast_Shadow" | "Vazirmatn" | "Vesper_Libre" | "Viaoda_Libre" | "Vibes" | "Vibur" | "Victor_Mono" | "Vidaloka" | "Viga" | "Vina_Sans" | "Voces" | "Volkhov" | "Vollkorn" | "Vollkorn_SC" | "Voltaire" | "Vujahday_Script" | "Waiting_for_the_Sunrise" | "Wallpoet" | "Walter_Turncoat" | "Warnes" | "Water_Brush" | "Waterfall" | "Wavefont" | "Wellfleet" | "Wendy_One" | "Whisper" | "WindSong" | "Wire_One" | "Wittgenstein" | "Wix_Madefor_Display" | "Wix_Madefor_Text" | "Work_Sans" | "Workbench" | "Xanh_Mono" | "Yaldevi" | "Yanone_Kaffeesatz" | "Yantramanav" | "Yarndings_12" | "Yarndings_12_Charted" | "Yarndings_20" | "Yarndings_20_Charted" | "Yatra_One" | "Yellowtail" | "Yeon_Sung" | "Yeseva_One" | "Yesteryear" | "Yomogi" | "Young_Serif" | "Yrsa" | "Ysabeau" | "Ysabeau_Infant" | "Ysabeau_Office" | "Ysabeau_SC" | "Yuji_Boku" | "Yuji_Hentaigana_Akari" | "Yuji_Hentaigana_Akebono" | "Yuji_Mai" | "Yuji_Syuku" | "Yusei_Magic" | "ZCOOL_KuaiLe" | "ZCOOL_QingKe_HuangYou" | "ZCOOL_XiaoWei" | "Zain" | "Zen_Antique" | "Zen_Antique_Soft" | "Zen_Dots" | "Zen_Kaku_Gothic_Antique" | "Zen_Kaku_Gothic_New" | "Zen_Kurenaido" | "Zen_Loop" | "Zen_Maru_Gothic" | "Zen_Old_Mincho" | "Zen_Tokyo_Zoo" | "Zeyada" | "Zhi_Mang_Xing" | "Zilla_Slab" | "Zilla_Slab_Highlight"; }; sizes?: { base?: { lineHeight?: string; size?: string; }; empty-screen-title?: { lineHeight?: string; size?: string; }; error-screen-title?: { lineHeight?: string; size?: string; }; headline?: { lineHeight?: string; size?: string; }; sm?: { lineHeight?: string; size?: string; }; xs?: { lineHeight?: string; size?: string; }; }; }; mode?: "dark" | "light"; other?: { radius?: string; root-padding-horizontal?: string; root-padding-vertical?: string; }; }; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:160 The type for embed theme configuration ### Type declaration #### colors? ```ts optional colors: { dark?: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; light?: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; }; ``` ##### colors.dark? ```ts optional dark: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; ``` ##### colors.dark.account-edit-link? ```ts optional account-edit-link: string; ``` ##### colors.dark.background? ```ts optional background: string; ``` ##### colors.dark.border? ```ts optional border: string; ``` ##### colors.dark.border-focus? ```ts optional border-focus: string; ``` ##### colors.dark.destructive? ```ts optional destructive: string; ``` ##### colors.dark.destructive-foreground? ```ts optional destructive-foreground: string; ``` ##### colors.dark.foreground? ```ts optional foreground: string; ``` ##### colors.dark.input? ```ts optional input: string; ``` ##### colors.dark.input-foreground? ```ts optional input-foreground: string; ``` ##### colors.dark.muted-foreground? ```ts optional muted-foreground: string; ``` ##### colors.dark.primary? ```ts optional primary: string; ``` ##### colors.dark.primary-foreground? ```ts optional primary-foreground: string; ``` ##### colors.dark.ring? ```ts optional ring: string; ``` ##### colors.dark.secondary? ```ts optional secondary: string; ``` ##### colors.dark.secondary-foreground? ```ts optional secondary-foreground: string; ``` ##### colors.light? ```ts optional light: { account-edit-link?: string; background?: string; border?: string; border-focus?: string; destructive?: string; destructive-foreground?: string; foreground?: string; input?: string; input-foreground?: string; muted-foreground?: string; primary?: string; primary-foreground?: string; ring?: string; secondary?: string; secondary-foreground?: string; }; ``` ##### colors.light.account-edit-link? ```ts optional account-edit-link: string; ``` ##### colors.light.background? ```ts optional background: string; ``` ##### colors.light.border? ```ts optional border: string; ``` ##### colors.light.border-focus? ```ts optional border-focus: string; ``` ##### colors.light.destructive? ```ts optional destructive: string; ``` ##### colors.light.destructive-foreground? ```ts optional destructive-foreground: string; ``` ##### colors.light.foreground? ```ts optional foreground: string; ``` ##### colors.light.input? ```ts optional input: string; ``` ##### colors.light.input-foreground? ```ts optional input-foreground: string; ``` ##### colors.light.muted-foreground? ```ts optional muted-foreground: string; ``` ##### colors.light.primary? ```ts optional primary: string; ``` ##### colors.light.primary-foreground? ```ts optional primary-foreground: string; ``` ##### colors.light.ring? ```ts optional ring: string; ``` ##### colors.light.secondary? ```ts optional secondary: string; ``` ##### colors.light.secondary-foreground? ```ts optional secondary-foreground: string; ``` #### font? ```ts optional font: { fontFamily?: | { system: string; } | { google?: | "ABeeZee" | "ADLaM_Display" | "AR_One_Sans" | "Abel" | "Abhaya_Libre" | "Aboreto" | "Abril_Fatface" | "Abyssinica_SIL" | "Aclonica" | "Acme" | "Actor" | "Adamina" | "Advent_Pro" | "Afacad" | "Afacad_Flux" | "Agbalumo" | "Agdasima" | "Aguafina_Script" | "Akatab" | "Akaya_Kanadaka" | "Akaya_Telivigala" | "Akronim" | "Akshar" | "Aladin" | "Alata" | "Alatsi" | "Albert_Sans" | "Aldrich" | "Alef" | "Alegreya" | "Alegreya_SC" | "Alegreya_Sans" | "Alegreya_Sans_SC" | "Aleo" | "Alex_Brush" | "Alexandria" | "Alfa_Slab_One" | "Alice" | "Alike" | "Alike_Angular" | "Alkalami" | "Alkatra" | "Allan" | "Allerta" | "Allerta_Stencil" | "Allison" | "Allura" | "Almarai" | "Almendra" | "Almendra_Display" | "Almendra_SC" | "Alumni_Sans" | "Alumni_Sans_Collegiate_One" | "Alumni_Sans_Inline_One" | "Alumni_Sans_Pinstripe" | "Amarante" | "Amaranth" | "Amatic_SC" | "Amethysta" | "Amiko" | "Amiri" | "Amiri_Quran" | "Amita" | "Anaheim" | "Andada_Pro" | "Andika" | "Anek_Bangla" | "Anek_Devanagari" | "Anek_Gujarati" | "Anek_Gurmukhi" | "Anek_Kannada" | "Anek_Latin" | "Anek_Malayalam" | "Anek_Odia" | "Anek_Tamil" | "Anek_Telugu" | "Angkor" | "Annapurna_SIL" | "Annie_Use_Your_Telescope" | "Anonymous_Pro" | "Anta" | "Antic" | "Antic_Didone" | "Antic_Slab" | "Anton" | "Anton_SC" | "Antonio" | "Anuphan" | "Anybody" | "Aoboshi_One" | "Arapey" | "Arbutus" | "Arbutus_Slab" | "Architects_Daughter" | "Archivo" | "Archivo_Black" | "Archivo_Narrow" | "Are_You_Serious" | "Aref_Ruqaa" | "Aref_Ruqaa_Ink" | "Arima" | "Arimo" | "Arizonia" | "Armata" | "Arsenal" | "Arsenal_SC" | "Artifika" | "Arvo" | "Arya" | "Asap" | "Asap_Condensed" | "Asar" | "Asset" | "Assistant" | "Astloch" | "Asul" | "Athiti" | "Atkinson_Hyperlegible" | "Atma" | "Atomic_Age" | "Aubrey" | "Audiowide" | "Autour_One" | "Average" | "Average_Sans" | "Averia_Gruesa_Libre" | "Averia_Libre" | "Averia_Sans_Libre" | "Averia_Serif_Libre" | "Azeret_Mono" | "B612" | "B612_Mono" | "BIZ_UDGothic" | "BIZ_UDMincho" | "BIZ_UDPGothic" | "BIZ_UDPMincho" | "Babylonica" | "Bacasime_Antique" | "Bad_Script" | "Bagel_Fat_One" | "Bahiana" | "Bahianita" | "Bai_Jamjuree" | "Bakbak_One" | "Ballet" | "Baloo_2" | "Baloo_Bhai_2" | "Baloo_Bhaijaan_2" | "Baloo_Bhaina_2" | "Baloo_Chettan_2" | "Baloo_Da_2" | "Baloo_Paaji_2" | "Baloo_Tamma_2" | "Baloo_Tammudu_2" | "Baloo_Thambi_2" | "Balsamiq_Sans" | "Balthazar" | "Bangers" | "Barlow" | "Barlow_Condensed" | "Barlow_Semi_Condensed" | "Barriecito" | "Barrio" | "Basic" | "Baskervville" | "Baskervville_SC" | "Battambang" | "Baumans" | "Bayon" | "Be_Vietnam_Pro" | "Beau_Rivage" | "Bebas_Neue" | "Beiruti" | "Belanosima" | "Belgrano" | "Bellefair" | "Belleza" | "Bellota" | "Bellota_Text" | "BenchNine" | "Benne" | "Bentham" | "Berkshire_Swash" | "Besley" | "Beth_Ellen" | "Bevan" | "BhuTuka_Expanded_One" | "Big_Shoulders_Display" | "Big_Shoulders_Inline_Display" | "Big_Shoulders_Inline_Text" | "Big_Shoulders_Stencil_Display" | "Big_Shoulders_Stencil_Text" | "Big_Shoulders_Text" | "Bigelow_Rules" | "Bigshot_One" | "Bilbo" | "Bilbo_Swash_Caps" | "BioRhyme" | "BioRhyme_Expanded" | "Birthstone" | "Birthstone_Bounce" | "Biryani" | "Bitter" | "Black_And_White_Picture" | "Black_Han_Sans" | "Black_Ops_One" | "Blaka" | "Blaka_Hollow" | "Blaka_Ink" | "Blinker" | "Bodoni_Moda" | "Bodoni_Moda_SC" | "Bokor" | "Bona_Nova" | "Bona_Nova_SC" | "Bonbon" | "Bonheur_Royale" | "Boogaloo" | "Borel" | "Bowlby_One" | "Bowlby_One_SC" | "Braah_One" | "Brawler" | "Bree_Serif" | "Bricolage_Grotesque" | "Bruno_Ace" | "Bruno_Ace_SC" | "Brygada_1918" | "Bubblegum_Sans" | "Bubbler_One" | "Buda" | "Buenard" | "Bungee" | "Bungee_Hairline" | "Bungee_Inline" | "Bungee_Outline" | "Bungee_Shade" | "Bungee_Spice" | "Bungee_Tint" | "Butcherman" | "Butterfly_Kids" | "Cabin" | "Cabin_Condensed" | "Cabin_Sketch" | "Cactus_Classical_Serif" | "Caesar_Dressing" | "Cagliostro" | "Cairo" | "Cairo_Play" | "Caladea" | "Calistoga" | "Calligraffitti" | "Cambay" | "Cambo" | "Candal" | "Cantarell" | "Cantata_One" | "Cantora_One" | "Caprasimo" | "Capriola" | "Caramel" | "Carattere" | "Cardo" | "Carlito" | "Carme" | "Carrois_Gothic" | "Carrois_Gothic_SC" | "Carter_One" | "Castoro" | "Castoro_Titling" | "Catamaran" | "Caudex" | "Caveat" | "Caveat_Brush" | "Cedarville_Cursive" | "Ceviche_One" | "Chakra_Petch" | "Changa" | "Changa_One" | "Chango" | "Charis_SIL" | "Charm" | "Charmonman" | "Chathura" | "Chau_Philomene_One" | "Chela_One" | "Chelsea_Market" | "Chenla" | "Cherish" | "Cherry_Bomb_One" | "Cherry_Cream_Soda" | "Cherry_Swash" | "Chewy" | "Chicle" | "Chilanka" | "Chivo" | "Chivo_Mono" | "Chocolate_Classical_Sans" | "Chokokutai" | "Chonburi" | "Cinzel" | "Cinzel_Decorative" | "Clicker_Script" | "Climate_Crisis" | "Coda" | "Codystar" | "Coiny" | "Combo" | "Comfortaa" | "Comforter" | "Comforter_Brush" | "Comic_Neue" | "Coming_Soon" | "Comme" | "Commissioner" | "Concert_One" | "Condiment" | "Content" | "Contrail_One" | "Convergence" | "Cookie" | "Copse" | "Corben" | "Corinthia" | "Cormorant" | "Cormorant_Garamond" | "Cormorant_Infant" | "Cormorant_SC" | "Cormorant_Unicase" | "Cormorant_Upright" | "Courgette" | "Courier_Prime" | "Cousine" | "Coustard" | "Covered_By_Your_Grace" | "Crafty_Girls" | "Creepster" | "Crete_Round" | "Crimson_Pro" | "Crimson_Text" | "Croissant_One" | "Crushed" | "Cuprum" | "Cute_Font" | "Cutive" | "Cutive_Mono" | "DM_Mono" | "DM_Sans" | "DM_Serif_Display" | "DM_Serif_Text" | "Dai_Banna_SIL" | "Damion" | "Dancing_Script" | "Danfo" | "Dangrek" | "Darker_Grotesque" | "Darumadrop_One" | "David_Libre" | "Dawning_of_a_New_Day" | "Days_One" | "Dekko" | "Dela_Gothic_One" | "Delicious_Handrawn" | "Delius" | "Delius_Swash_Caps" | "Delius_Unicase" | "Della_Respira" | "Denk_One" | "Devonshire" | "Dhurjati" | "Didact_Gothic" | "Diphylleia" | "Diplomata" | "Diplomata_SC" | "Do_Hyeon" | "Dokdo" | "Domine" | "Donegal_One" | "Dongle" | "Doppio_One" | "Dorsa" | "Dosis" | "DotGothic16" | "Doto" | "Dr_Sugiyama" | "Duru_Sans" | "DynaPuff" | "Dynalight" | "EB_Garamond" | "Eagle_Lake" | "East_Sea_Dokdo" | "Eater" | "Economica" | "Eczar" | "Edu_AU_VIC_WA_NT_Arrows" | "Edu_AU_VIC_WA_NT_Dots" | "Edu_AU_VIC_WA_NT_Guides" | "Edu_AU_VIC_WA_NT_Hand" | "Edu_AU_VIC_WA_NT_Pre" | "Edu_NSW_ACT_Foundation" | "Edu_QLD_Beginner" | "Edu_SA_Beginner" | "Edu_TAS_Beginner" | "Edu_VIC_WA_NT_Beginner" | "El_Messiri" | "Electrolize" | "Elsie" | "Elsie_Swash_Caps" | "Emblema_One" | "Emilys_Candy" | "Encode_Sans" | "Encode_Sans_Condensed" | "Encode_Sans_Expanded" | "Encode_Sans_SC" | "Encode_Sans_Semi_Condensed" | "Encode_Sans_Semi_Expanded" | "Engagement" | "Englebert" | "Enriqueta" | "Ephesis" | "Epilogue" | "Erica_One" | "Esteban" | "Estonia" | "Euphoria_Script" | "Ewert" | "Exo" | "Exo_2" | "Expletus_Sans" | "Explora" | "Faculty_Glyphic" | "Fahkwang" | "Familjen_Grotesk" | "Fanwood_Text" | "Farro" | "Farsan" | "Fascinate" | "Fascinate_Inline" | "Faster_One" | "Fasthand" | "Fauna_One" | "Faustina" | "Federant" | "Federo" | "Felipa" | "Fenix" | "Festive" | "Figtree" | "Finger_Paint" | "Finlandica" | "Fira_Code" | "Fira_Mono" | "Fira_Sans" | "Fira_Sans_Condensed" | "Fira_Sans_Extra_Condensed" | "Fjalla_One" | "Fjord_One" | "Flamenco" | "Flavors" | "Fleur_De_Leah" | "Flow_Block" | "Flow_Circular" | "Flow_Rounded" | "Foldit" | "Fondamento" | "Fontdiner_Swanky" | "Forum" | "Fragment_Mono" | "Francois_One" | "Frank_Ruhl_Libre" | "Fraunces" | "Freckle_Face" | "Fredericka_the_Great" | "Fredoka" | "Freehand" | "Freeman" | "Fresca" | "Frijole" | "Fruktur" | "Fugaz_One" | "Fuggles" | "Funnel_Display" | "Funnel_Sans" | "Fustat" | "Fuzzy_Bubbles" | "GFS_Didot" | "GFS_Neohellenic" | "Ga_Maamli" | "Gabarito" | "Gabriela" | "Gaegu" | "Gafata" | "Gajraj_One" | "Galada" | "Galdeano" | "Galindo" | "Gamja_Flower" | "Gantari" | "Gasoek_One" | "Gayathri" | "Geist" | "Geist_Mono" | "Gelasio" | "Gemunu_Libre" | "Genos" | "Gentium_Book_Plus" | "Gentium_Plus" | "Geo" | "Geologica" | "Georama" | "Geostar" | "Geostar_Fill" | "Germania_One" | "Gideon_Roman" | "Gidugu" | "Gilda_Display" | "Girassol" | "Give_You_Glory" | "Glass_Antiqua" | "Glegoo" | "Gloock" | "Gloria_Hallelujah" | "Glory" | "Gluten" | "Goblin_One" | "Gochi_Hand" | "Goldman" | "Golos_Text" | "Gorditas" | "Gothic_A1" | "Gotu" | "Goudy_Bookletter_1911" | "Gowun_Batang" | "Gowun_Dodum" | "Graduate" | "Grand_Hotel" | "Grandiflora_One" | "Grandstander" | "Grape_Nuts" | "Gravitas_One" | "Great_Vibes" | "Grechen_Fuemen" | "Grenze" | "Grenze_Gotisch" | "Grey_Qo" | "Griffy" | "Gruppo" | "Gudea" | "Gugi" | "Gulzar" | "Gupter" | "Gurajada" | "Gwendolyn" | "Habibi" | "Hachi_Maru_Pop" | "Hahmlet" | "Halant" | "Hammersmith_One" | "Hanalei" | "Hanalei_Fill" | "Handjet" | "Handlee" | "Hanken_Grotesk" | "Hanuman" | "Happy_Monkey" | "Harmattan" | "Headland_One" | "Hedvig_Letters_Sans" | "Hedvig_Letters_Serif" | "Heebo" | "Henny_Penny" | "Hepta_Slab" | "Herr_Von_Muellerhoff" | "Hi_Melody" | "Hina_Mincho" | "Hind" | "Hind_Guntur" | "Hind_Madurai" | "Hind_Siliguri" | "Hind_Vadodara" | "Holtwood_One_SC" | "Homemade_Apple" | "Homenaje" | "Honk" | "Host_Grotesk" | "Hubballi" | "Hubot_Sans" | "Hurricane" | "IBM_Plex_Mono" | "IBM_Plex_Sans" | "IBM_Plex_Sans_Arabic" | "IBM_Plex_Sans_Condensed" | "IBM_Plex_Sans_Devanagari" | "IBM_Plex_Sans_Hebrew" | "IBM_Plex_Sans_JP" | "IBM_Plex_Sans_KR" | "IBM_Plex_Sans_Thai" | "IBM_Plex_Sans_Thai_Looped" | "IBM_Plex_Serif" | "IM_Fell_DW_Pica" | "IM_Fell_DW_Pica_SC" | "IM_Fell_Double_Pica" | "IM_Fell_Double_Pica_SC" | "IM_Fell_English" | "IM_Fell_English_SC" | "IM_Fell_French_Canon" | "IM_Fell_French_Canon_SC" | "IM_Fell_Great_Primer" | "IM_Fell_Great_Primer_SC" | "Ibarra_Real_Nova" | "Iceberg" | "Iceland" | "Imbue" | "Imperial_Script" | "Imprima" | "Inclusive_Sans" | "Inconsolata" | "Inder" | "Indie_Flower" | "Ingrid_Darling" | "Inika" | "Inknut_Antiqua" | "Inria_Sans" | "Inria_Serif" | "Inspiration" | "Instrument_Sans" | "Instrument_Serif" | "Inter" | "Inter_Tight" | "Irish_Grover" | "Island_Moments" | "Istok_Web" | "Italiana" | "Italianno" | "Itim" | "Jacquard_12" | "Jacquard_12_Charted" | "Jacquard_24" | "Jacquard_24_Charted" | "Jacquarda_Bastarda_9" | "Jacquarda_Bastarda_9_Charted" | "Jacques_Francois" | "Jacques_Francois_Shadow" | "Jaini" | "Jaini_Purva" | "Jaldi" | "Jaro" | "Jersey_10" | "Jersey_10_Charted" | "Jersey_15" | "Jersey_15_Charted" | "Jersey_20" | "Jersey_20_Charted" | "Jersey_25" | "Jersey_25_Charted" | "JetBrains_Mono" | "Jim_Nightshade" | "Joan" | "Jockey_One" | "Jolly_Lodger" | "Jomhuria" | "Jomolhari" | "Josefin_Sans" | "Josefin_Slab" | "Jost" | "Joti_One" | "Jua" | "Judson" | "Julee" | "Julius_Sans_One" | "Junge" | "Jura" | "Just_Another_Hand" | "Just_Me_Again_Down_Here" | "K2D" | "Kablammo" | "Kadwa" | "Kaisei_Decol" | "Kaisei_HarunoUmi" | "Kaisei_Opti" | "Kaisei_Tokumin" | "Kalam" | "Kalnia" | "Kalnia_Glaze" | "Kameron" | "Kanit" | "Kantumruy_Pro" | "Karantina" | "Karla" | "Karla_Tamil_Inclined" | "Karla_Tamil_Upright" | "Karma" | "Katibeh" | "Kaushan_Script" | "Kavivanar" | "Kavoon" | "Kay_Pho_Du" | "Kdam_Thmor_Pro" | "Keania_One" | "Kelly_Slab" | "Kenia" | "Khand" | "Khmer" | "Khula" | "Kings" | "Kirang_Haerang" | "Kite_One" | "Kiwi_Maru" | "Klee_One" | "Knewave" | "KoHo" | "Kodchasan" | "Kode_Mono" | "Koh_Santepheap" | "Kolker_Brush" | "Konkhmer_Sleokchher" | "Kosugi" | "Kosugi_Maru" | "Kotta_One" | "Koulen" | "Kranky" | "Kreon" | "Kristi" | "Krona_One" | "Krub" | "Kufam" | "Kulim_Park" | "Kumar_One" | "Kumar_One_Outline" | "Kumbh_Sans" | "Kurale" | "LXGW_WenKai_Mono_TC" | "LXGW_WenKai_TC" | "La_Belle_Aurore" | "Labrada" | "Lacquer" | "Laila" | "Lakki_Reddy" | "Lalezar" | "Lancelot" | "Langar" | "Lateef" | "Lato" | "Lavishly_Yours" | "League_Gothic" | "League_Script" | "League_Spartan" | "Leckerli_One" | "Ledger" | "Lekton" | "Lemon" | "Lemonada" | "Lexend" | "Lexend_Deca" | "Lexend_Exa" | "Lexend_Giga" | "Lexend_Mega" | "Lexend_Peta" | "Lexend_Tera" | "Lexend_Zetta" | "Libre_Barcode_128" | "Libre_Barcode_128_Text" | "Libre_Barcode_39" | "Libre_Barcode_39_Extended" | "Libre_Barcode_39_Extended_Text" | "Libre_Barcode_39_Text" | "Libre_Barcode_EAN13_Text" | "Libre_Baskerville" | "Libre_Bodoni" | "Libre_Caslon_Display" | "Libre_Caslon_Text" | "Libre_Franklin" | "Licorice" | "Life_Savers" | "Lilita_One" | "Lily_Script_One" | "Limelight" | "Linden_Hill" | "Linefont" | "Lisu_Bosa" | "Literata" | "Liu_Jian_Mao_Cao" | "Livvic" | "Lobster" | "Lobster_Two" | "Londrina_Outline" | "Londrina_Shadow" | "Londrina_Sketch" | "Londrina_Solid" | "Long_Cang" | "Lora" | "Love_Light" | "Love_Ya_Like_A_Sister" | "Loved_by_the_King" | "Lovers_Quarrel" | "Luckiest_Guy" | "Lugrasimo" | "Lumanosimo" | "Lunasima" | "Lusitana" | "Lustria" | "Luxurious_Roman" | "Luxurious_Script" | "M_PLUS_1" | "M_PLUS_1_Code" | "M_PLUS_1p" | "M_PLUS_2" | "M_PLUS_Code_Latin" | "M_PLUS_Rounded_1c" | "Ma_Shan_Zheng" | "Macondo" | "Macondo_Swash_Caps" | "Mada" | "Madimi_One" | "Magra" | "Maiden_Orange" | "Maitree" | "Major_Mono_Display" | "Mako" | "Mali" | "Mallanna" | "Maname" | "Mandali" | "Manjari" | "Manrope" | "Mansalva" | "Manuale" | "Marcellus" | "Marcellus_SC" | "Marck_Script" | "Margarine" | "Marhey" | "Markazi_Text" | "Marko_One" | "Marmelad" | "Martel" | "Martel_Sans" | "Martian_Mono" | "Marvel" | "Mate" | "Mate_SC" | "Matemasie" | "Maven_Pro" | "McLaren" | "Mea_Culpa" | "Meddon" | "MedievalSharp" | "Medula_One" | "Meera_Inimai" | "Megrim" | "Meie_Script" | "Meow_Script" | "Merienda" | "Merriweather" | "Merriweather_Sans" | "Metal" | "Metal_Mania" | "Metamorphous" | "Metrophobic" | "Michroma" | "Micro_5" | "Micro_5_Charted" | "Milonga" | "Miltonian" | "Miltonian_Tattoo" | "Mina" | "Mingzat" | "Miniver" | "Miriam_Libre" | "Mirza" | "Miss_Fajardose" | "Mitr" | "Mochiy_Pop_One" | "Mochiy_Pop_P_One" | "Modak" | "Modern_Antiqua" | "Moderustic" | "Mogra" | "Mohave" | "Moirai_One" | "Molengo" | "Molle" | "Mona_Sans" | "Monda" | "Monofett" | "Monomaniac_One" | "Monoton" | "Monsieur_La_Doulaise" | "Montaga" | "Montagu_Slab" | "MonteCarlo" | "Montez" | "Montserrat" | "Montserrat_Alternates" | "Montserrat_Subrayada" | "Moo_Lah_Lah" | "Mooli" | "Moon_Dance" | "Moul" | "Moulpali" | "Mountains_of_Christmas" | "Mouse_Memoirs" | "Mr_Bedfort" | "Mr_Dafoe" | "Mr_De_Haviland" | "Mrs_Saint_Delafield" | "Mrs_Sheppards" | "Ms_Madi" | "Mukta" | "Mukta_Mahee" | "Mukta_Malar" | "Mukta_Vaani" | "Mulish" | "Murecho" | "MuseoModerno" | "My_Soul" | "Mynerve" | "Mystery_Quest" | "NTR" | "Nabla" | "Namdhinggo" | "Nanum_Brush_Script" | "Nanum_Gothic" | "Nanum_Gothic_Coding" | "Nanum_Myeongjo" | "Nanum_Pen_Script" | "Narnoor" | "Neonderthaw" | "Nerko_One" | "Neucha" | "Neuton" | "New_Amsterdam" | "New_Rocker" | "New_Tegomin" | "News_Cycle" | "Newsreader" | "Niconne" | "Niramit" | "Nixie_One" | "Nobile" | "Nokora" | "Norican" | "Nosifer" | "Notable" | "Nothing_You_Could_Do" | "Noticia_Text" | "Noto_Color_Emoji" | "Noto_Emoji" | "Noto_Kufi_Arabic" | "Noto_Music" | "Noto_Naskh_Arabic" | "Noto_Nastaliq_Urdu" | "Noto_Rashi_Hebrew" | "Noto_Sans" | "Noto_Sans_Adlam" | "Noto_Sans_Adlam_Unjoined" | "Noto_Sans_Anatolian_Hieroglyphs" | "Noto_Sans_Arabic" | "Noto_Sans_Armenian" | "Noto_Sans_Avestan" | "Noto_Sans_Balinese" | "Noto_Sans_Bamum" | "Noto_Sans_Bassa_Vah" | "Noto_Sans_Batak" | "Noto_Sans_Bengali" | "Noto_Sans_Bhaiksuki" | "Noto_Sans_Brahmi" | "Noto_Sans_Buginese" | "Noto_Sans_Buhid" | "Noto_Sans_Canadian_Aboriginal" | "Noto_Sans_Carian" | "Noto_Sans_Caucasian_Albanian" | "Noto_Sans_Chakma" | "Noto_Sans_Cham" | "Noto_Sans_Cherokee" | "Noto_Sans_Chorasmian" | "Noto_Sans_Coptic" | "Noto_Sans_Cuneiform" | "Noto_Sans_Cypriot" | "Noto_Sans_Cypro_Minoan" | "Noto_Sans_Deseret" | "Noto_Sans_Devanagari" | "Noto_Sans_Display" | "Noto_Sans_Duployan" | "Noto_Sans_Egyptian_Hieroglyphs" | "Noto_Sans_Elbasan" | "Noto_Sans_Elymaic" | "Noto_Sans_Ethiopic" | "Noto_Sans_Georgian" | "Noto_Sans_Glagolitic" | "Noto_Sans_Gothic" | "Noto_Sans_Grantha" | "Noto_Sans_Gujarati" | "Noto_Sans_Gunjala_Gondi" | "Noto_Sans_Gurmukhi" | "Noto_Sans_HK" | "Noto_Sans_Hanifi_Rohingya" | "Noto_Sans_Hanunoo" | "Noto_Sans_Hatran" | "Noto_Sans_Hebrew" | "Noto_Sans_Imperial_Aramaic" | "Noto_Sans_Indic_Siyaq_Numbers" | "Noto_Sans_Inscriptional_Pahlavi" | "Noto_Sans_Inscriptional_Parthian" | "Noto_Sans_JP" | "Noto_Sans_Javanese" | "Noto_Sans_KR" | "Noto_Sans_Kaithi" | "Noto_Sans_Kannada" | "Noto_Sans_Kawi" | "Noto_Sans_Kayah_Li" | "Noto_Sans_Kharoshthi" | "Noto_Sans_Khmer" | "Noto_Sans_Khojki" | "Noto_Sans_Khudawadi" | "Noto_Sans_Lao" | "Noto_Sans_Lao_Looped" | "Noto_Sans_Lepcha" | "Noto_Sans_Limbu" | "Noto_Sans_Linear_A" | "Noto_Sans_Linear_B" | "Noto_Sans_Lisu" | "Noto_Sans_Lycian" | "Noto_Sans_Lydian" | "Noto_Sans_Mahajani" | "Noto_Sans_Malayalam" | "Noto_Sans_Mandaic" | "Noto_Sans_Manichaean" | "Noto_Sans_Marchen" | "Noto_Sans_Masaram_Gondi" | "Noto_Sans_Math" | "Noto_Sans_Mayan_Numerals" | "Noto_Sans_Medefaidrin" | "Noto_Sans_Meetei_Mayek" | "Noto_Sans_Mende_Kikakui" | "Noto_Sans_Meroitic" | "Noto_Sans_Miao" | "Noto_Sans_Modi" | "Noto_Sans_Mongolian" | "Noto_Sans_Mono" | "Noto_Sans_Mro" | "Noto_Sans_Multani" | "Noto_Sans_Myanmar" | "Noto_Sans_NKo" | "Noto_Sans_NKo_Unjoined" | "Noto_Sans_Nabataean" | "Noto_Sans_Nag_Mundari" | "Noto_Sans_Nandinagari" | "Noto_Sans_New_Tai_Lue" | "Noto_Sans_Newa" | "Noto_Sans_Nushu" | "Noto_Sans_Ogham" | "Noto_Sans_Ol_Chiki" | "Noto_Sans_Old_Hungarian" | "Noto_Sans_Old_Italic" | "Noto_Sans_Old_North_Arabian" | "Noto_Sans_Old_Permic" | "Noto_Sans_Old_Persian" | "Noto_Sans_Old_Sogdian" | "Noto_Sans_Old_South_Arabian" | "Noto_Sans_Old_Turkic" | "Noto_Sans_Oriya" | "Noto_Sans_Osage" | "Noto_Sans_Osmanya" | "Noto_Sans_Pahawh_Hmong" | "Noto_Sans_Palmyrene" | "Noto_Sans_Pau_Cin_Hau" | "Noto_Sans_Phags_Pa" | "Noto_Sans_Phoenician" | "Noto_Sans_Psalter_Pahlavi" | "Noto_Sans_Rejang" | "Noto_Sans_Runic" | "Noto_Sans_SC" | "Noto_Sans_Samaritan" | "Noto_Sans_Saurashtra" | "Noto_Sans_Sharada" | "Noto_Sans_Shavian" | "Noto_Sans_Siddham" | "Noto_Sans_SignWriting" | "Noto_Sans_Sinhala" | "Noto_Sans_Sogdian" | "Noto_Sans_Sora_Sompeng" | "Noto_Sans_Soyombo" | "Noto_Sans_Sundanese" | "Noto_Sans_Syloti_Nagri" | "Noto_Sans_Symbols" | "Noto_Sans_Symbols_2" | "Noto_Sans_Syriac" | "Noto_Sans_Syriac_Eastern" | "Noto_Sans_TC" | "Noto_Sans_Tagalog" | "Noto_Sans_Tagbanwa" | "Noto_Sans_Tai_Le" | "Noto_Sans_Tai_Tham" | "Noto_Sans_Tai_Viet" | "Noto_Sans_Takri" | "Noto_Sans_Tamil" | "Noto_Sans_Tamil_Supplement" | "Noto_Sans_Tangsa" | "Noto_Sans_Telugu" | "Noto_Sans_Thaana" | "Noto_Sans_Thai" | "Noto_Sans_Thai_Looped" | "Noto_Sans_Tifinagh" | "Noto_Sans_Tirhuta" | "Noto_Sans_Ugaritic" | "Noto_Sans_Vai" | "Noto_Sans_Vithkuqi" | "Noto_Sans_Wancho" | "Noto_Sans_Warang_Citi" | "Noto_Sans_Yi" | "Noto_Sans_Zanabazar_Square" | "Noto_Serif" | "Noto_Serif_Ahom" | "Noto_Serif_Armenian" | "Noto_Serif_Balinese" | "Noto_Serif_Bengali" | "Noto_Serif_Devanagari" | "Noto_Serif_Display" | "Noto_Serif_Dogra" | "Noto_Serif_Ethiopic" | "Noto_Serif_Georgian" | "Noto_Serif_Grantha" | "Noto_Serif_Gujarati" | "Noto_Serif_Gurmukhi" | "Noto_Serif_HK" | "Noto_Serif_Hebrew" | "Noto_Serif_JP" | "Noto_Serif_KR" | "Noto_Serif_Kannada" | "Noto_Serif_Khitan_Small_Script" | "Noto_Serif_Khmer" | "Noto_Serif_Khojki" | "Noto_Serif_Lao" | "Noto_Serif_Makasar" | "Noto_Serif_Malayalam" | "Noto_Serif_Myanmar" | "Noto_Serif_NP_Hmong" | "Noto_Serif_Old_Uyghur" | "Noto_Serif_Oriya" | "Noto_Serif_Ottoman_Siyaq" | "Noto_Serif_SC" | "Noto_Serif_Sinhala" | "Noto_Serif_TC" | "Noto_Serif_Tamil" | "Noto_Serif_Tangut" | "Noto_Serif_Telugu" | "Noto_Serif_Thai" | "Noto_Serif_Tibetan" | "Noto_Serif_Toto" | "Noto_Serif_Vithkuqi" | "Noto_Serif_Yezidi" | "Noto_Traditional_Nushu" | "Noto_Znamenny_Musical_Notation" | "Nova_Cut" | "Nova_Flat" | "Nova_Mono" | "Nova_Oval" | "Nova_Round" | "Nova_Script" | "Nova_Slim" | "Nova_Square" | "Numans" | "Nunito" | "Nunito_Sans" | "Nuosu_SIL" | "Odibee_Sans" | "Odor_Mean_Chey" | "Offside" | "Oi" | "Ojuju" | "Old_Standard_TT" | "Oldenburg" | "Ole" | "Oleo_Script" | "Oleo_Script_Swash_Caps" | "Onest" | "Oooh_Baby" | "Open_Sans" | "Oranienbaum" | "Orbit" | "Orbitron" | "Oregano" | "Orelega_One" | "Orienta" | "Original_Surfer" | "Oswald" | "Outfit" | "Over_the_Rainbow" | "Overlock" | "Overlock_SC" | "Overpass" | "Overpass_Mono" | "Ovo" | "Oxanium" | "Oxygen" | "Oxygen_Mono" | "PT_Mono" | "PT_Sans" | "PT_Sans_Caption" | "PT_Sans_Narrow" | "PT_Serif" | "PT_Serif_Caption" | "Pacifico" | "Padauk" | "Padyakke_Expanded_One" | "Palanquin" | "Palanquin_Dark" | "Palette_Mosaic" | "Pangolin" | "Paprika" | "Parisienne" | "Parkinsans" | "Passero_One" | "Passion_One" | "Passions_Conflict" | "Pathway_Extreme" | "Pathway_Gothic_One" | "Patrick_Hand" | "Patrick_Hand_SC" | "Pattaya" | "Patua_One" | "Pavanam" | "Paytone_One" | "Peddana" | "Peralta" | "Permanent_Marker" | "Petemoss" | "Petit_Formal_Script" | "Petrona" | "Phetsarath" | "Philosopher" | "Phudu" | "Piazzolla" | "Piedra" | "Pinyon_Script" | "Pirata_One" | "Pixelify_Sans" | "Plaster" | "Platypi" | "Play" | "Playball" | "Playfair" | "Playfair_Display" | "Playfair_Display_SC" | "Playpen_Sans" | "Playwrite_AR" | "Playwrite_AT" | "Playwrite_AU_NSW" | "Playwrite_AU_QLD" | "Playwrite_AU_SA" | "Playwrite_AU_TAS" | "Playwrite_AU_VIC" | "Playwrite_BE_VLG" | "Playwrite_BE_WAL" | "Playwrite_BR" | "Playwrite_CA" | "Playwrite_CL" | "Playwrite_CO" | "Playwrite_CU" | "Playwrite_CZ" | "Playwrite_DE_Grund" | "Playwrite_DE_LA" | "Playwrite_DE_SAS" | "Playwrite_DE_VA" | "Playwrite_DK_Loopet" | "Playwrite_DK_Uloopet" | "Playwrite_ES" | "Playwrite_ES_Deco" | "Playwrite_FR_Moderne" | "Playwrite_FR_Trad" | "Playwrite_GB_J" | "Playwrite_GB_S" | "Playwrite_HR" | "Playwrite_HR_Lijeva" | "Playwrite_HU" | "Playwrite_ID" | "Playwrite_IE" | "Playwrite_IN" | "Playwrite_IS" | "Playwrite_IT_Moderna" | "Playwrite_IT_Trad" | "Playwrite_MX" | "Playwrite_NG_Modern" | "Playwrite_NL" | "Playwrite_NO" | "Playwrite_NZ" | "Playwrite_PE" | "Playwrite_PL" | "Playwrite_PT" | "Playwrite_RO" | "Playwrite_SK" | "Playwrite_TZ" | "Playwrite_US_Modern" | "Playwrite_US_Trad" | "Playwrite_VN" | "Playwrite_ZA" | "Plus_Jakarta_Sans" | "Podkova" | "Poetsen_One" | "Poiret_One" | "Poller_One" | "Poltawski_Nowy" | "Poly" | "Pompiere" | "Ponnala" | "Pontano_Sans" | "Poor_Story" | "Poppins" | "Port_Lligat_Sans" | "Port_Lligat_Slab" | "Potta_One" | "Pragati_Narrow" | "Praise" | "Prata" | "Preahvihear" | "Press_Start_2P" | "Pridi" | "Princess_Sofia" | "Prociono" | "Prompt" | "Prosto_One" | "Protest_Guerrilla" | "Protest_Revolution" | "Protest_Riot" | "Protest_Strike" | "Proza_Libre" | "Public_Sans" | "Puppies_Play" | "Puritan" | "Purple_Purse" | "Qahiri" | "Quando" | "Quantico" | "Quattrocento" | "Quattrocento_Sans" | "Questrial" | "Quicksand" | "Quintessential" | "Qwigley" | "Qwitcher_Grypen" | "REM" | "Racing_Sans_One" | "Radio_Canada" | "Radio_Canada_Big" | "Radley" | "Rajdhani" | "Rakkas" | "Raleway" | "Raleway_Dots" | "Ramabhadra" | "Ramaraja" | "Rambla" | "Rammetto_One" | "Rampart_One" | "Ranchers" | "Rancho" | "Ranga" | "Rasa" | "Rationale" | "Ravi_Prakash" | "Readex_Pro" | "Recursive" | "Red_Hat_Display" | "Red_Hat_Mono" | "Red_Hat_Text" | "Red_Rose" | "Redacted" | "Redacted_Script" | "Reddit_Mono" | "Reddit_Sans" | "Reddit_Sans_Condensed" | "Redressed" | "Reem_Kufi" | "Reem_Kufi_Fun" | "Reem_Kufi_Ink" | "Reenie_Beanie" | "Reggae_One" | "Rethink_Sans" | "Revalia" | "Rhodium_Libre" | "Ribeye" | "Ribeye_Marrow" | "Righteous" | "Risque" | "Road_Rage" | "Roboto" | "Roboto_Condensed" | "Roboto_Flex" | "Roboto_Mono" | "Roboto_Serif" | "Roboto_Slab" | "Rochester" | "Rock_3D" | "Rock_Salt" | "RocknRoll_One" | "Rokkitt" | "Romanesco" | "Ropa_Sans" | "Rosario" | "Rosarivo" | "Rouge_Script" | "Rowdies" | "Rozha_One" | "Rubik" | "Rubik_80s_Fade" | "Rubik_Beastly" | "Rubik_Broken_Fax" | "Rubik_Bubbles" | "Rubik_Burned" | "Rubik_Dirt" | "Rubik_Distressed" | "Rubik_Doodle_Shadow" | "Rubik_Doodle_Triangles" | "Rubik_Gemstones" | "Rubik_Glitch" | "Rubik_Glitch_Pop" | "Rubik_Iso" | "Rubik_Lines" | "Rubik_Maps" | "Rubik_Marker_Hatch" | "Rubik_Maze" | "Rubik_Microbe" | "Rubik_Mono_One" | "Rubik_Moonrocks" | "Rubik_Pixels" | "Rubik_Puddles" | "Rubik_Scribble" | "Rubik_Spray_Paint" | "Rubik_Storm" | "Rubik_Vinyl" | "Rubik_Wet_Paint" | "Ruda" | "Rufina" | "Ruge_Boogie" | "Ruluko" | "Rum_Raisin" | "Ruslan_Display" | "Russo_One" | "Ruthie" | "Ruwudu" | "Rye" | "STIX_Two_Text" | "SUSE" | "Sacramento" | "Sahitya" | "Sail" | "Saira" | "Saira_Condensed" | "Saira_Extra_Condensed" | "Saira_Semi_Condensed" | "Saira_Stencil_One" | "Salsa" | "Sanchez" | "Sancreek" | "Sankofa_Display" | "Sansita" | "Sansita_Swashed" | "Sarabun" | "Sarala" | "Sarina" | "Sarpanch" | "Sassy_Frass" | "Satisfy" | "Sawarabi_Gothic" | "Sawarabi_Mincho" | "Scada" | "Scheherazade_New" | "Schibsted_Grotesk" | "Schoolbell" | "Scope_One" | "Seaweed_Script" | "Secular_One" | "Sedan" | "Sedan_SC" | "Sedgwick_Ave" | "Sedgwick_Ave_Display" | "Sen" | "Send_Flowers" | "Sevillana" | "Seymour_One" | "Shadows_Into_Light" | "Shadows_Into_Light_Two" | "Shalimar" | "Shantell_Sans" | "Shanti" | "Share" | "Share_Tech" | "Share_Tech_Mono" | "Shippori_Antique" | "Shippori_Antique_B1" | "Shippori_Mincho" | "Shippori_Mincho_B1" | "Shizuru" | "Shojumaru" | "Short_Stack" | "Shrikhand" | "Siemreap" | "Sigmar" | "Sigmar_One" | "Signika" | "Signika_Negative" | "Silkscreen" | "Simonetta" | "Single_Day" | "Sintony" | "Sirin_Stencil" | "Six_Caps" | "Sixtyfour" | "Sixtyfour_Convergence" | "Skranji" | "Slabo_13px" | "Slabo_27px" | "Slackey" | "Slackside_One" | "Smokum" | "Smooch" | "Smooch_Sans" | "Smythe" | "Sniglet" | "Snippet" | "Snowburst_One" | "Sofadi_One" | "Sofia" | "Sofia_Sans" | "Sofia_Sans_Condensed" | "Sofia_Sans_Extra_Condensed" | "Sofia_Sans_Semi_Condensed" | "Solitreo" | "Solway" | "Sometype_Mono" | "Song_Myung" | "Sono" | "Sonsie_One" | "Sora" | "Sorts_Mill_Goudy" | "Sour_Gummy" | "Source_Code_Pro" | "Source_Sans_3" | "Source_Serif_4" | "Space_Grotesk" | "Space_Mono" | "Special_Elite" | "Spectral" | "Spectral_SC" | "Spicy_Rice" | "Spinnaker" | "Spirax" | "Splash" | "Spline_Sans" | "Spline_Sans_Mono" | "Squada_One" | "Square_Peg" | "Sree_Krushnadevaraya" | "Sriracha" | "Srisakdi" | "Staatliches" | "Stalemate" | "Stalinist_One" | "Stardos_Stencil" | "Stick" | "Stick_No_Bills" | "Stint_Ultra_Condensed" | "Stint_Ultra_Expanded" | "Stoke" | "Strait" | "Style_Script" | "Stylish" | "Sue_Ellen_Francisco" | "Suez_One" | "Sulphur_Point" | "Sumana" | "Sunflower" | "Sunshiney" | "Supermercado_One" | "Sura" | "Suranna" | "Suravaram" | "Suwannaphum" | "Swanky_and_Moo_Moo" | "Syncopate" | "Syne" | "Syne_Mono" | "Syne_Tactile" | "Tac_One" | "Tai_Heritage_Pro" | "Tajawal" | "Tangerine" | "Tapestry" | "Taprom" | "Tauri" | "Taviraj" | "Teachers" | "Teko" | "Tektur" | "Telex" | "Tenali_Ramakrishna" | "Tenor_Sans" | "Text_Me_One" | "Texturina" | "Thasadith" | "The_Girl_Next_Door" | "The_Nautigal" | "Tienne" | "Tillana" | "Tilt_Neon" | "Tilt_Prism" | "Tilt_Warp" | "Timmana" | "Tinos" | "Tiny5" | "Tiro_Bangla" | "Tiro_Devanagari_Hindi" | "Tiro_Devanagari_Marathi" | "Tiro_Devanagari_Sanskrit" | "Tiro_Gurmukhi" | "Tiro_Kannada" | "Tiro_Tamil" | "Tiro_Telugu" | "Titan_One" | "Titillium_Web" | "Tomorrow" | "Tourney" | "Trade_Winds" | "Train_One" | "Trirong" | "Trispace" | "Trocchi" | "Trochut" | "Truculenta" | "Trykker" | "Tsukimi_Rounded" | "Tulpen_One" | "Turret_Road" | "Twinkle_Star" | "Ubuntu" | "Ubuntu_Condensed" | "Ubuntu_Mono" | "Ubuntu_Sans" | "Ubuntu_Sans_Mono" | "Uchen" | "Ultra" | "Unbounded" | "Uncial_Antiqua" | "Underdog" | "Unica_One" | "UnifrakturCook" | "UnifrakturMaguntia" | "Unkempt" | "Unlock" | "Unna" | "Updock" | "Urbanist" | "VT323" | "Vampiro_One" | "Varela" | "Varela_Round" | "Varta" | "Vast_Shadow" | "Vazirmatn" | "Vesper_Libre" | "Viaoda_Libre" | "Vibes" | "Vibur" | "Victor_Mono" | "Vidaloka" | "Viga" | "Vina_Sans" | "Voces" | "Volkhov" | "Vollkorn" | "Vollkorn_SC" | "Voltaire" | "Vujahday_Script" | "Waiting_for_the_Sunrise" | "Wallpoet" | "Walter_Turncoat" | "Warnes" | "Water_Brush" | "Waterfall" | "Wavefont" | "Wellfleet" | "Wendy_One" | "Whisper" | "WindSong" | "Wire_One" | "Wittgenstein" | "Wix_Madefor_Display" | "Wix_Madefor_Text" | "Work_Sans" | "Workbench" | "Xanh_Mono" | "Yaldevi" | "Yanone_Kaffeesatz" | "Yantramanav" | "Yarndings_12" | "Yarndings_12_Charted" | "Yarndings_20" | "Yarndings_20_Charted" | "Yatra_One" | "Yellowtail" | "Yeon_Sung" | "Yeseva_One" | "Yesteryear" | "Yomogi" | "Young_Serif" | "Yrsa" | "Ysabeau" | "Ysabeau_Infant" | "Ysabeau_Office" | "Ysabeau_SC" | "Yuji_Boku" | "Yuji_Hentaigana_Akari" | "Yuji_Hentaigana_Akebono" | "Yuji_Mai" | "Yuji_Syuku" | "Yusei_Magic" | "ZCOOL_KuaiLe" | "ZCOOL_QingKe_HuangYou" | "ZCOOL_XiaoWei" | "Zain" | "Zen_Antique" | "Zen_Antique_Soft" | "Zen_Dots" | "Zen_Kaku_Gothic_Antique" | "Zen_Kaku_Gothic_New" | "Zen_Kurenaido" | "Zen_Loop" | "Zen_Maru_Gothic" | "Zen_Old_Mincho" | "Zen_Tokyo_Zoo" | "Zeyada" | "Zhi_Mang_Xing" | "Zilla_Slab" | "Zilla_Slab_Highlight"; }; sizes?: { base?: { lineHeight?: string; size?: string; }; empty-screen-title?: { lineHeight?: string; size?: string; }; error-screen-title?: { lineHeight?: string; size?: string; }; headline?: { lineHeight?: string; size?: string; }; sm?: { lineHeight?: string; size?: string; }; xs?: { lineHeight?: string; size?: string; }; }; }; ``` ##### font.fontFamily? ```ts optional fontFamily: | { system: string; } | { google?: | "ABeeZee" | "ADLaM_Display" | "AR_One_Sans" | "Abel" | "Abhaya_Libre" | "Aboreto" | "Abril_Fatface" | "Abyssinica_SIL" | "Aclonica" | "Acme" | "Actor" | "Adamina" | "Advent_Pro" | "Afacad" | "Afacad_Flux" | "Agbalumo" | "Agdasima" | "Aguafina_Script" | "Akatab" | "Akaya_Kanadaka" | "Akaya_Telivigala" | "Akronim" | "Akshar" | "Aladin" | "Alata" | "Alatsi" | "Albert_Sans" | "Aldrich" | "Alef" | "Alegreya" | "Alegreya_SC" | "Alegreya_Sans" | "Alegreya_Sans_SC" | "Aleo" | "Alex_Brush" | "Alexandria" | "Alfa_Slab_One" | "Alice" | "Alike" | "Alike_Angular" | "Alkalami" | "Alkatra" | "Allan" | "Allerta" | "Allerta_Stencil" | "Allison" | "Allura" | "Almarai" | "Almendra" | "Almendra_Display" | "Almendra_SC" | "Alumni_Sans" | "Alumni_Sans_Collegiate_One" | "Alumni_Sans_Inline_One" | "Alumni_Sans_Pinstripe" | "Amarante" | "Amaranth" | "Amatic_SC" | "Amethysta" | "Amiko" | "Amiri" | "Amiri_Quran" | "Amita" | "Anaheim" | "Andada_Pro" | "Andika" | "Anek_Bangla" | "Anek_Devanagari" | "Anek_Gujarati" | "Anek_Gurmukhi" | "Anek_Kannada" | "Anek_Latin" | "Anek_Malayalam" | "Anek_Odia" | "Anek_Tamil" | "Anek_Telugu" | "Angkor" | "Annapurna_SIL" | "Annie_Use_Your_Telescope" | "Anonymous_Pro" | "Anta" | "Antic" | "Antic_Didone" | "Antic_Slab" | "Anton" | "Anton_SC" | "Antonio" | "Anuphan" | "Anybody" | "Aoboshi_One" | "Arapey" | "Arbutus" | "Arbutus_Slab" | "Architects_Daughter" | "Archivo" | "Archivo_Black" | "Archivo_Narrow" | "Are_You_Serious" | "Aref_Ruqaa" | "Aref_Ruqaa_Ink" | "Arima" | "Arimo" | "Arizonia" | "Armata" | "Arsenal" | "Arsenal_SC" | "Artifika" | "Arvo" | "Arya" | "Asap" | "Asap_Condensed" | "Asar" | "Asset" | "Assistant" | "Astloch" | "Asul" | "Athiti" | "Atkinson_Hyperlegible" | "Atma" | "Atomic_Age" | "Aubrey" | "Audiowide" | "Autour_One" | "Average" | "Average_Sans" | "Averia_Gruesa_Libre" | "Averia_Libre" | "Averia_Sans_Libre" | "Averia_Serif_Libre" | "Azeret_Mono" | "B612" | "B612_Mono" | "BIZ_UDGothic" | "BIZ_UDMincho" | "BIZ_UDPGothic" | "BIZ_UDPMincho" | "Babylonica" | "Bacasime_Antique" | "Bad_Script" | "Bagel_Fat_One" | "Bahiana" | "Bahianita" | "Bai_Jamjuree" | "Bakbak_One" | "Ballet" | "Baloo_2" | "Baloo_Bhai_2" | "Baloo_Bhaijaan_2" | "Baloo_Bhaina_2" | "Baloo_Chettan_2" | "Baloo_Da_2" | "Baloo_Paaji_2" | "Baloo_Tamma_2" | "Baloo_Tammudu_2" | "Baloo_Thambi_2" | "Balsamiq_Sans" | "Balthazar" | "Bangers" | "Barlow" | "Barlow_Condensed" | "Barlow_Semi_Condensed" | "Barriecito" | "Barrio" | "Basic" | "Baskervville" | "Baskervville_SC" | "Battambang" | "Baumans" | "Bayon" | "Be_Vietnam_Pro" | "Beau_Rivage" | "Bebas_Neue" | "Beiruti" | "Belanosima" | "Belgrano" | "Bellefair" | "Belleza" | "Bellota" | "Bellota_Text" | "BenchNine" | "Benne" | "Bentham" | "Berkshire_Swash" | "Besley" | "Beth_Ellen" | "Bevan" | "BhuTuka_Expanded_One" | "Big_Shoulders_Display" | "Big_Shoulders_Inline_Display" | "Big_Shoulders_Inline_Text" | "Big_Shoulders_Stencil_Display" | "Big_Shoulders_Stencil_Text" | "Big_Shoulders_Text" | "Bigelow_Rules" | "Bigshot_One" | "Bilbo" | "Bilbo_Swash_Caps" | "BioRhyme" | "BioRhyme_Expanded" | "Birthstone" | "Birthstone_Bounce" | "Biryani" | "Bitter" | "Black_And_White_Picture" | "Black_Han_Sans" | "Black_Ops_One" | "Blaka" | "Blaka_Hollow" | "Blaka_Ink" | "Blinker" | "Bodoni_Moda" | "Bodoni_Moda_SC" | "Bokor" | "Bona_Nova" | "Bona_Nova_SC" | "Bonbon" | "Bonheur_Royale" | "Boogaloo" | "Borel" | "Bowlby_One" | "Bowlby_One_SC" | "Braah_One" | "Brawler" | "Bree_Serif" | "Bricolage_Grotesque" | "Bruno_Ace" | "Bruno_Ace_SC" | "Brygada_1918" | "Bubblegum_Sans" | "Bubbler_One" | "Buda" | "Buenard" | "Bungee" | "Bungee_Hairline" | "Bungee_Inline" | "Bungee_Outline" | "Bungee_Shade" | "Bungee_Spice" | "Bungee_Tint" | "Butcherman" | "Butterfly_Kids" | "Cabin" | "Cabin_Condensed" | "Cabin_Sketch" | "Cactus_Classical_Serif" | "Caesar_Dressing" | "Cagliostro" | "Cairo" | "Cairo_Play" | "Caladea" | "Calistoga" | "Calligraffitti" | "Cambay" | "Cambo" | "Candal" | "Cantarell" | "Cantata_One" | "Cantora_One" | "Caprasimo" | "Capriola" | "Caramel" | "Carattere" | "Cardo" | "Carlito" | "Carme" | "Carrois_Gothic" | "Carrois_Gothic_SC" | "Carter_One" | "Castoro" | "Castoro_Titling" | "Catamaran" | "Caudex" | "Caveat" | "Caveat_Brush" | "Cedarville_Cursive" | "Ceviche_One" | "Chakra_Petch" | "Changa" | "Changa_One" | "Chango" | "Charis_SIL" | "Charm" | "Charmonman" | "Chathura" | "Chau_Philomene_One" | "Chela_One" | "Chelsea_Market" | "Chenla" | "Cherish" | "Cherry_Bomb_One" | "Cherry_Cream_Soda" | "Cherry_Swash" | "Chewy" | "Chicle" | "Chilanka" | "Chivo" | "Chivo_Mono" | "Chocolate_Classical_Sans" | "Chokokutai" | "Chonburi" | "Cinzel" | "Cinzel_Decorative" | "Clicker_Script" | "Climate_Crisis" | "Coda" | "Codystar" | "Coiny" | "Combo" | "Comfortaa" | "Comforter" | "Comforter_Brush" | "Comic_Neue" | "Coming_Soon" | "Comme" | "Commissioner" | "Concert_One" | "Condiment" | "Content" | "Contrail_One" | "Convergence" | "Cookie" | "Copse" | "Corben" | "Corinthia" | "Cormorant" | "Cormorant_Garamond" | "Cormorant_Infant" | "Cormorant_SC" | "Cormorant_Unicase" | "Cormorant_Upright" | "Courgette" | "Courier_Prime" | "Cousine" | "Coustard" | "Covered_By_Your_Grace" | "Crafty_Girls" | "Creepster" | "Crete_Round" | "Crimson_Pro" | "Crimson_Text" | "Croissant_One" | "Crushed" | "Cuprum" | "Cute_Font" | "Cutive" | "Cutive_Mono" | "DM_Mono" | "DM_Sans" | "DM_Serif_Display" | "DM_Serif_Text" | "Dai_Banna_SIL" | "Damion" | "Dancing_Script" | "Danfo" | "Dangrek" | "Darker_Grotesque" | "Darumadrop_One" | "David_Libre" | "Dawning_of_a_New_Day" | "Days_One" | "Dekko" | "Dela_Gothic_One" | "Delicious_Handrawn" | "Delius" | "Delius_Swash_Caps" | "Delius_Unicase" | "Della_Respira" | "Denk_One" | "Devonshire" | "Dhurjati" | "Didact_Gothic" | "Diphylleia" | "Diplomata" | "Diplomata_SC" | "Do_Hyeon" | "Dokdo" | "Domine" | "Donegal_One" | "Dongle" | "Doppio_One" | "Dorsa" | "Dosis" | "DotGothic16" | "Doto" | "Dr_Sugiyama" | "Duru_Sans" | "DynaPuff" | "Dynalight" | "EB_Garamond" | "Eagle_Lake" | "East_Sea_Dokdo" | "Eater" | "Economica" | "Eczar" | "Edu_AU_VIC_WA_NT_Arrows" | "Edu_AU_VIC_WA_NT_Dots" | "Edu_AU_VIC_WA_NT_Guides" | "Edu_AU_VIC_WA_NT_Hand" | "Edu_AU_VIC_WA_NT_Pre" | "Edu_NSW_ACT_Foundation" | "Edu_QLD_Beginner" | "Edu_SA_Beginner" | "Edu_TAS_Beginner" | "Edu_VIC_WA_NT_Beginner" | "El_Messiri" | "Electrolize" | "Elsie" | "Elsie_Swash_Caps" | "Emblema_One" | "Emilys_Candy" | "Encode_Sans" | "Encode_Sans_Condensed" | "Encode_Sans_Expanded" | "Encode_Sans_SC" | "Encode_Sans_Semi_Condensed" | "Encode_Sans_Semi_Expanded" | "Engagement" | "Englebert" | "Enriqueta" | "Ephesis" | "Epilogue" | "Erica_One" | "Esteban" | "Estonia" | "Euphoria_Script" | "Ewert" | "Exo" | "Exo_2" | "Expletus_Sans" | "Explora" | "Faculty_Glyphic" | "Fahkwang" | "Familjen_Grotesk" | "Fanwood_Text" | "Farro" | "Farsan" | "Fascinate" | "Fascinate_Inline" | "Faster_One" | "Fasthand" | "Fauna_One" | "Faustina" | "Federant" | "Federo" | "Felipa" | "Fenix" | "Festive" | "Figtree" | "Finger_Paint" | "Finlandica" | "Fira_Code" | "Fira_Mono" | "Fira_Sans" | "Fira_Sans_Condensed" | "Fira_Sans_Extra_Condensed" | "Fjalla_One" | "Fjord_One" | "Flamenco" | "Flavors" | "Fleur_De_Leah" | "Flow_Block" | "Flow_Circular" | "Flow_Rounded" | "Foldit" | "Fondamento" | "Fontdiner_Swanky" | "Forum" | "Fragment_Mono" | "Francois_One" | "Frank_Ruhl_Libre" | "Fraunces" | "Freckle_Face" | "Fredericka_the_Great" | "Fredoka" | "Freehand" | "Freeman" | "Fresca" | "Frijole" | "Fruktur" | "Fugaz_One" | "Fuggles" | "Funnel_Display" | "Funnel_Sans" | "Fustat" | "Fuzzy_Bubbles" | "GFS_Didot" | "GFS_Neohellenic" | "Ga_Maamli" | "Gabarito" | "Gabriela" | "Gaegu" | "Gafata" | "Gajraj_One" | "Galada" | "Galdeano" | "Galindo" | "Gamja_Flower" | "Gantari" | "Gasoek_One" | "Gayathri" | "Geist" | "Geist_Mono" | "Gelasio" | "Gemunu_Libre" | "Genos" | "Gentium_Book_Plus" | "Gentium_Plus" | "Geo" | "Geologica" | "Georama" | "Geostar" | "Geostar_Fill" | "Germania_One" | "Gideon_Roman" | "Gidugu" | "Gilda_Display" | "Girassol" | "Give_You_Glory" | "Glass_Antiqua" | "Glegoo" | "Gloock" | "Gloria_Hallelujah" | "Glory" | "Gluten" | "Goblin_One" | "Gochi_Hand" | "Goldman" | "Golos_Text" | "Gorditas" | "Gothic_A1" | "Gotu" | "Goudy_Bookletter_1911" | "Gowun_Batang" | "Gowun_Dodum" | "Graduate" | "Grand_Hotel" | "Grandiflora_One" | "Grandstander" | "Grape_Nuts" | "Gravitas_One" | "Great_Vibes" | "Grechen_Fuemen" | "Grenze" | "Grenze_Gotisch" | "Grey_Qo" | "Griffy" | "Gruppo" | "Gudea" | "Gugi" | "Gulzar" | "Gupter" | "Gurajada" | "Gwendolyn" | "Habibi" | "Hachi_Maru_Pop" | "Hahmlet" | "Halant" | "Hammersmith_One" | "Hanalei" | "Hanalei_Fill" | "Handjet" | "Handlee" | "Hanken_Grotesk" | "Hanuman" | "Happy_Monkey" | "Harmattan" | "Headland_One" | "Hedvig_Letters_Sans" | "Hedvig_Letters_Serif" | "Heebo" | "Henny_Penny" | "Hepta_Slab" | "Herr_Von_Muellerhoff" | "Hi_Melody" | "Hina_Mincho" | "Hind" | "Hind_Guntur" | "Hind_Madurai" | "Hind_Siliguri" | "Hind_Vadodara" | "Holtwood_One_SC" | "Homemade_Apple" | "Homenaje" | "Honk" | "Host_Grotesk" | "Hubballi" | "Hubot_Sans" | "Hurricane" | "IBM_Plex_Mono" | "IBM_Plex_Sans" | "IBM_Plex_Sans_Arabic" | "IBM_Plex_Sans_Condensed" | "IBM_Plex_Sans_Devanagari" | "IBM_Plex_Sans_Hebrew" | "IBM_Plex_Sans_JP" | "IBM_Plex_Sans_KR" | "IBM_Plex_Sans_Thai" | "IBM_Plex_Sans_Thai_Looped" | "IBM_Plex_Serif" | "IM_Fell_DW_Pica" | "IM_Fell_DW_Pica_SC" | "IM_Fell_Double_Pica" | "IM_Fell_Double_Pica_SC" | "IM_Fell_English" | "IM_Fell_English_SC" | "IM_Fell_French_Canon" | "IM_Fell_French_Canon_SC" | "IM_Fell_Great_Primer" | "IM_Fell_Great_Primer_SC" | "Ibarra_Real_Nova" | "Iceberg" | "Iceland" | "Imbue" | "Imperial_Script" | "Imprima" | "Inclusive_Sans" | "Inconsolata" | "Inder" | "Indie_Flower" | "Ingrid_Darling" | "Inika" | "Inknut_Antiqua" | "Inria_Sans" | "Inria_Serif" | "Inspiration" | "Instrument_Sans" | "Instrument_Serif" | "Inter" | "Inter_Tight" | "Irish_Grover" | "Island_Moments" | "Istok_Web" | "Italiana" | "Italianno" | "Itim" | "Jacquard_12" | "Jacquard_12_Charted" | "Jacquard_24" | "Jacquard_24_Charted" | "Jacquarda_Bastarda_9" | "Jacquarda_Bastarda_9_Charted" | "Jacques_Francois" | "Jacques_Francois_Shadow" | "Jaini" | "Jaini_Purva" | "Jaldi" | "Jaro" | "Jersey_10" | "Jersey_10_Charted" | "Jersey_15" | "Jersey_15_Charted" | "Jersey_20" | "Jersey_20_Charted" | "Jersey_25" | "Jersey_25_Charted" | "JetBrains_Mono" | "Jim_Nightshade" | "Joan" | "Jockey_One" | "Jolly_Lodger" | "Jomhuria" | "Jomolhari" | "Josefin_Sans" | "Josefin_Slab" | "Jost" | "Joti_One" | "Jua" | "Judson" | "Julee" | "Julius_Sans_One" | "Junge" | "Jura" | "Just_Another_Hand" | "Just_Me_Again_Down_Here" | "K2D" | "Kablammo" | "Kadwa" | "Kaisei_Decol" | "Kaisei_HarunoUmi" | "Kaisei_Opti" | "Kaisei_Tokumin" | "Kalam" | "Kalnia" | "Kalnia_Glaze" | "Kameron" | "Kanit" | "Kantumruy_Pro" | "Karantina" | "Karla" | "Karla_Tamil_Inclined" | "Karla_Tamil_Upright" | "Karma" | "Katibeh" | "Kaushan_Script" | "Kavivanar" | "Kavoon" | "Kay_Pho_Du" | "Kdam_Thmor_Pro" | "Keania_One" | "Kelly_Slab" | "Kenia" | "Khand" | "Khmer" | "Khula" | "Kings" | "Kirang_Haerang" | "Kite_One" | "Kiwi_Maru" | "Klee_One" | "Knewave" | "KoHo" | "Kodchasan" | "Kode_Mono" | "Koh_Santepheap" | "Kolker_Brush" | "Konkhmer_Sleokchher" | "Kosugi" | "Kosugi_Maru" | "Kotta_One" | "Koulen" | "Kranky" | "Kreon" | "Kristi" | "Krona_One" | "Krub" | "Kufam" | "Kulim_Park" | "Kumar_One" | "Kumar_One_Outline" | "Kumbh_Sans" | "Kurale" | "LXGW_WenKai_Mono_TC" | "LXGW_WenKai_TC" | "La_Belle_Aurore" | "Labrada" | "Lacquer" | "Laila" | "Lakki_Reddy" | "Lalezar" | "Lancelot" | "Langar" | "Lateef" | "Lato" | "Lavishly_Yours" | "League_Gothic" | "League_Script" | "League_Spartan" | "Leckerli_One" | "Ledger" | "Lekton" | "Lemon" | "Lemonada" | "Lexend" | "Lexend_Deca" | "Lexend_Exa" | "Lexend_Giga" | "Lexend_Mega" | "Lexend_Peta" | "Lexend_Tera" | "Lexend_Zetta" | "Libre_Barcode_128" | "Libre_Barcode_128_Text" | "Libre_Barcode_39" | "Libre_Barcode_39_Extended" | "Libre_Barcode_39_Extended_Text" | "Libre_Barcode_39_Text" | "Libre_Barcode_EAN13_Text" | "Libre_Baskerville" | "Libre_Bodoni" | "Libre_Caslon_Display" | "Libre_Caslon_Text" | "Libre_Franklin" | "Licorice" | "Life_Savers" | "Lilita_One" | "Lily_Script_One" | "Limelight" | "Linden_Hill" | "Linefont" | "Lisu_Bosa" | "Literata" | "Liu_Jian_Mao_Cao" | "Livvic" | "Lobster" | "Lobster_Two" | "Londrina_Outline" | "Londrina_Shadow" | "Londrina_Sketch" | "Londrina_Solid" | "Long_Cang" | "Lora" | "Love_Light" | "Love_Ya_Like_A_Sister" | "Loved_by_the_King" | "Lovers_Quarrel" | "Luckiest_Guy" | "Lugrasimo" | "Lumanosimo" | "Lunasima" | "Lusitana" | "Lustria" | "Luxurious_Roman" | "Luxurious_Script" | "M_PLUS_1" | "M_PLUS_1_Code" | "M_PLUS_1p" | "M_PLUS_2" | "M_PLUS_Code_Latin" | "M_PLUS_Rounded_1c" | "Ma_Shan_Zheng" | "Macondo" | "Macondo_Swash_Caps" | "Mada" | "Madimi_One" | "Magra" | "Maiden_Orange" | "Maitree" | "Major_Mono_Display" | "Mako" | "Mali" | "Mallanna" | "Maname" | "Mandali" | "Manjari" | "Manrope" | "Mansalva" | "Manuale" | "Marcellus" | "Marcellus_SC" | "Marck_Script" | "Margarine" | "Marhey" | "Markazi_Text" | "Marko_One" | "Marmelad" | "Martel" | "Martel_Sans" | "Martian_Mono" | "Marvel" | "Mate" | "Mate_SC" | "Matemasie" | "Maven_Pro" | "McLaren" | "Mea_Culpa" | "Meddon" | "MedievalSharp" | "Medula_One" | "Meera_Inimai" | "Megrim" | "Meie_Script" | "Meow_Script" | "Merienda" | "Merriweather" | "Merriweather_Sans" | "Metal" | "Metal_Mania" | "Metamorphous" | "Metrophobic" | "Michroma" | "Micro_5" | "Micro_5_Charted" | "Milonga" | "Miltonian" | "Miltonian_Tattoo" | "Mina" | "Mingzat" | "Miniver" | "Miriam_Libre" | "Mirza" | "Miss_Fajardose" | "Mitr" | "Mochiy_Pop_One" | "Mochiy_Pop_P_One" | "Modak" | "Modern_Antiqua" | "Moderustic" | "Mogra" | "Mohave" | "Moirai_One" | "Molengo" | "Molle" | "Mona_Sans" | "Monda" | "Monofett" | "Monomaniac_One" | "Monoton" | "Monsieur_La_Doulaise" | "Montaga" | "Montagu_Slab" | "MonteCarlo" | "Montez" | "Montserrat" | "Montserrat_Alternates" | "Montserrat_Subrayada" | "Moo_Lah_Lah" | "Mooli" | "Moon_Dance" | "Moul" | "Moulpali" | "Mountains_of_Christmas" | "Mouse_Memoirs" | "Mr_Bedfort" | "Mr_Dafoe" | "Mr_De_Haviland" | "Mrs_Saint_Delafield" | "Mrs_Sheppards" | "Ms_Madi" | "Mukta" | "Mukta_Mahee" | "Mukta_Malar" | "Mukta_Vaani" | "Mulish" | "Murecho" | "MuseoModerno" | "My_Soul" | "Mynerve" | "Mystery_Quest" | "NTR" | "Nabla" | "Namdhinggo" | "Nanum_Brush_Script" | "Nanum_Gothic" | "Nanum_Gothic_Coding" | "Nanum_Myeongjo" | "Nanum_Pen_Script" | "Narnoor" | "Neonderthaw" | "Nerko_One" | "Neucha" | "Neuton" | "New_Amsterdam" | "New_Rocker" | "New_Tegomin" | "News_Cycle" | "Newsreader" | "Niconne" | "Niramit" | "Nixie_One" | "Nobile" | "Nokora" | "Norican" | "Nosifer" | "Notable" | "Nothing_You_Could_Do" | "Noticia_Text" | "Noto_Color_Emoji" | "Noto_Emoji" | "Noto_Kufi_Arabic" | "Noto_Music" | "Noto_Naskh_Arabic" | "Noto_Nastaliq_Urdu" | "Noto_Rashi_Hebrew" | "Noto_Sans" | "Noto_Sans_Adlam" | "Noto_Sans_Adlam_Unjoined" | "Noto_Sans_Anatolian_Hieroglyphs" | "Noto_Sans_Arabic" | "Noto_Sans_Armenian" | "Noto_Sans_Avestan" | "Noto_Sans_Balinese" | "Noto_Sans_Bamum" | "Noto_Sans_Bassa_Vah" | "Noto_Sans_Batak" | "Noto_Sans_Bengali" | "Noto_Sans_Bhaiksuki" | "Noto_Sans_Brahmi" | "Noto_Sans_Buginese" | "Noto_Sans_Buhid" | "Noto_Sans_Canadian_Aboriginal" | "Noto_Sans_Carian" | "Noto_Sans_Caucasian_Albanian" | "Noto_Sans_Chakma" | "Noto_Sans_Cham" | "Noto_Sans_Cherokee" | "Noto_Sans_Chorasmian" | "Noto_Sans_Coptic" | "Noto_Sans_Cuneiform" | "Noto_Sans_Cypriot" | "Noto_Sans_Cypro_Minoan" | "Noto_Sans_Deseret" | "Noto_Sans_Devanagari" | "Noto_Sans_Display" | "Noto_Sans_Duployan" | "Noto_Sans_Egyptian_Hieroglyphs" | "Noto_Sans_Elbasan" | "Noto_Sans_Elymaic" | "Noto_Sans_Ethiopic" | "Noto_Sans_Georgian" | "Noto_Sans_Glagolitic" | "Noto_Sans_Gothic" | "Noto_Sans_Grantha" | "Noto_Sans_Gujarati" | "Noto_Sans_Gunjala_Gondi" | "Noto_Sans_Gurmukhi" | "Noto_Sans_HK" | "Noto_Sans_Hanifi_Rohingya" | "Noto_Sans_Hanunoo" | "Noto_Sans_Hatran" | "Noto_Sans_Hebrew" | "Noto_Sans_Imperial_Aramaic" | "Noto_Sans_Indic_Siyaq_Numbers" | "Noto_Sans_Inscriptional_Pahlavi" | "Noto_Sans_Inscriptional_Parthian" | "Noto_Sans_JP" | "Noto_Sans_Javanese" | "Noto_Sans_KR" | "Noto_Sans_Kaithi" | "Noto_Sans_Kannada" | "Noto_Sans_Kawi" | "Noto_Sans_Kayah_Li" | "Noto_Sans_Kharoshthi" | "Noto_Sans_Khmer" | "Noto_Sans_Khojki" | "Noto_Sans_Khudawadi" | "Noto_Sans_Lao" | "Noto_Sans_Lao_Looped" | "Noto_Sans_Lepcha" | "Noto_Sans_Limbu" | "Noto_Sans_Linear_A" | "Noto_Sans_Linear_B" | "Noto_Sans_Lisu" | "Noto_Sans_Lycian" | "Noto_Sans_Lydian" | "Noto_Sans_Mahajani" | "Noto_Sans_Malayalam" | "Noto_Sans_Mandaic" | "Noto_Sans_Manichaean" | "Noto_Sans_Marchen" | "Noto_Sans_Masaram_Gondi" | "Noto_Sans_Math" | "Noto_Sans_Mayan_Numerals" | "Noto_Sans_Medefaidrin" | "Noto_Sans_Meetei_Mayek" | "Noto_Sans_Mende_Kikakui" | "Noto_Sans_Meroitic" | "Noto_Sans_Miao" | "Noto_Sans_Modi" | "Noto_Sans_Mongolian" | "Noto_Sans_Mono" | "Noto_Sans_Mro" | "Noto_Sans_Multani" | "Noto_Sans_Myanmar" | "Noto_Sans_NKo" | "Noto_Sans_NKo_Unjoined" | "Noto_Sans_Nabataean" | "Noto_Sans_Nag_Mundari" | "Noto_Sans_Nandinagari" | "Noto_Sans_New_Tai_Lue" | "Noto_Sans_Newa" | "Noto_Sans_Nushu" | "Noto_Sans_Ogham" | "Noto_Sans_Ol_Chiki" | "Noto_Sans_Old_Hungarian" | "Noto_Sans_Old_Italic" | "Noto_Sans_Old_North_Arabian" | "Noto_Sans_Old_Permic" | "Noto_Sans_Old_Persian" | "Noto_Sans_Old_Sogdian" | "Noto_Sans_Old_South_Arabian" | "Noto_Sans_Old_Turkic" | "Noto_Sans_Oriya" | "Noto_Sans_Osage" | "Noto_Sans_Osmanya" | "Noto_Sans_Pahawh_Hmong" | "Noto_Sans_Palmyrene" | "Noto_Sans_Pau_Cin_Hau" | "Noto_Sans_Phags_Pa" | "Noto_Sans_Phoenician" | "Noto_Sans_Psalter_Pahlavi" | "Noto_Sans_Rejang" | "Noto_Sans_Runic" | "Noto_Sans_SC" | "Noto_Sans_Samaritan" | "Noto_Sans_Saurashtra" | "Noto_Sans_Sharada" | "Noto_Sans_Shavian" | "Noto_Sans_Siddham" | "Noto_Sans_SignWriting" | "Noto_Sans_Sinhala" | "Noto_Sans_Sogdian" | "Noto_Sans_Sora_Sompeng" | "Noto_Sans_Soyombo" | "Noto_Sans_Sundanese" | "Noto_Sans_Syloti_Nagri" | "Noto_Sans_Symbols" | "Noto_Sans_Symbols_2" | "Noto_Sans_Syriac" | "Noto_Sans_Syriac_Eastern" | "Noto_Sans_TC" | "Noto_Sans_Tagalog" | "Noto_Sans_Tagbanwa" | "Noto_Sans_Tai_Le" | "Noto_Sans_Tai_Tham" | "Noto_Sans_Tai_Viet" | "Noto_Sans_Takri" | "Noto_Sans_Tamil" | "Noto_Sans_Tamil_Supplement" | "Noto_Sans_Tangsa" | "Noto_Sans_Telugu" | "Noto_Sans_Thaana" | "Noto_Sans_Thai" | "Noto_Sans_Thai_Looped" | "Noto_Sans_Tifinagh" | "Noto_Sans_Tirhuta" | "Noto_Sans_Ugaritic" | "Noto_Sans_Vai" | "Noto_Sans_Vithkuqi" | "Noto_Sans_Wancho" | "Noto_Sans_Warang_Citi" | "Noto_Sans_Yi" | "Noto_Sans_Zanabazar_Square" | "Noto_Serif" | "Noto_Serif_Ahom" | "Noto_Serif_Armenian" | "Noto_Serif_Balinese" | "Noto_Serif_Bengali" | "Noto_Serif_Devanagari" | "Noto_Serif_Display" | "Noto_Serif_Dogra" | "Noto_Serif_Ethiopic" | "Noto_Serif_Georgian" | "Noto_Serif_Grantha" | "Noto_Serif_Gujarati" | "Noto_Serif_Gurmukhi" | "Noto_Serif_HK" | "Noto_Serif_Hebrew" | "Noto_Serif_JP" | "Noto_Serif_KR" | "Noto_Serif_Kannada" | "Noto_Serif_Khitan_Small_Script" | "Noto_Serif_Khmer" | "Noto_Serif_Khojki" | "Noto_Serif_Lao" | "Noto_Serif_Makasar" | "Noto_Serif_Malayalam" | "Noto_Serif_Myanmar" | "Noto_Serif_NP_Hmong" | "Noto_Serif_Old_Uyghur" | "Noto_Serif_Oriya" | "Noto_Serif_Ottoman_Siyaq" | "Noto_Serif_SC" | "Noto_Serif_Sinhala" | "Noto_Serif_TC" | "Noto_Serif_Tamil" | "Noto_Serif_Tangut" | "Noto_Serif_Telugu" | "Noto_Serif_Thai" | "Noto_Serif_Tibetan" | "Noto_Serif_Toto" | "Noto_Serif_Vithkuqi" | "Noto_Serif_Yezidi" | "Noto_Traditional_Nushu" | "Noto_Znamenny_Musical_Notation" | "Nova_Cut" | "Nova_Flat" | "Nova_Mono" | "Nova_Oval" | "Nova_Round" | "Nova_Script" | "Nova_Slim" | "Nova_Square" | "Numans" | "Nunito" | "Nunito_Sans" | "Nuosu_SIL" | "Odibee_Sans" | "Odor_Mean_Chey" | "Offside" | "Oi" | "Ojuju" | "Old_Standard_TT" | "Oldenburg" | "Ole" | "Oleo_Script" | "Oleo_Script_Swash_Caps" | "Onest" | "Oooh_Baby" | "Open_Sans" | "Oranienbaum" | "Orbit" | "Orbitron" | "Oregano" | "Orelega_One" | "Orienta" | "Original_Surfer" | "Oswald" | "Outfit" | "Over_the_Rainbow" | "Overlock" | "Overlock_SC" | "Overpass" | "Overpass_Mono" | "Ovo" | "Oxanium" | "Oxygen" | "Oxygen_Mono" | "PT_Mono" | "PT_Sans" | "PT_Sans_Caption" | "PT_Sans_Narrow" | "PT_Serif" | "PT_Serif_Caption" | "Pacifico" | "Padauk" | "Padyakke_Expanded_One" | "Palanquin" | "Palanquin_Dark" | "Palette_Mosaic" | "Pangolin" | "Paprika" | "Parisienne" | "Parkinsans" | "Passero_One" | "Passion_One" | "Passions_Conflict" | "Pathway_Extreme" | "Pathway_Gothic_One" | "Patrick_Hand" | "Patrick_Hand_SC" | "Pattaya" | "Patua_One" | "Pavanam" | "Paytone_One" | "Peddana" | "Peralta" | "Permanent_Marker" | "Petemoss" | "Petit_Formal_Script" | "Petrona" | "Phetsarath" | "Philosopher" | "Phudu" | "Piazzolla" | "Piedra" | "Pinyon_Script" | "Pirata_One" | "Pixelify_Sans" | "Plaster" | "Platypi" | "Play" | "Playball" | "Playfair" | "Playfair_Display" | "Playfair_Display_SC" | "Playpen_Sans" | "Playwrite_AR" | "Playwrite_AT" | "Playwrite_AU_NSW" | "Playwrite_AU_QLD" | "Playwrite_AU_SA" | "Playwrite_AU_TAS" | "Playwrite_AU_VIC" | "Playwrite_BE_VLG" | "Playwrite_BE_WAL" | "Playwrite_BR" | "Playwrite_CA" | "Playwrite_CL" | "Playwrite_CO" | "Playwrite_CU" | "Playwrite_CZ" | "Playwrite_DE_Grund" | "Playwrite_DE_LA" | "Playwrite_DE_SAS" | "Playwrite_DE_VA" | "Playwrite_DK_Loopet" | "Playwrite_DK_Uloopet" | "Playwrite_ES" | "Playwrite_ES_Deco" | "Playwrite_FR_Moderne" | "Playwrite_FR_Trad" | "Playwrite_GB_J" | "Playwrite_GB_S" | "Playwrite_HR" | "Playwrite_HR_Lijeva" | "Playwrite_HU" | "Playwrite_ID" | "Playwrite_IE" | "Playwrite_IN" | "Playwrite_IS" | "Playwrite_IT_Moderna" | "Playwrite_IT_Trad" | "Playwrite_MX" | "Playwrite_NG_Modern" | "Playwrite_NL" | "Playwrite_NO" | "Playwrite_NZ" | "Playwrite_PE" | "Playwrite_PL" | "Playwrite_PT" | "Playwrite_RO" | "Playwrite_SK" | "Playwrite_TZ" | "Playwrite_US_Modern" | "Playwrite_US_Trad" | "Playwrite_VN" | "Playwrite_ZA" | "Plus_Jakarta_Sans" | "Podkova" | "Poetsen_One" | "Poiret_One" | "Poller_One" | "Poltawski_Nowy" | "Poly" | "Pompiere" | "Ponnala" | "Pontano_Sans" | "Poor_Story" | "Poppins" | "Port_Lligat_Sans" | "Port_Lligat_Slab" | "Potta_One" | "Pragati_Narrow" | "Praise" | "Prata" | "Preahvihear" | "Press_Start_2P" | "Pridi" | "Princess_Sofia" | "Prociono" | "Prompt" | "Prosto_One" | "Protest_Guerrilla" | "Protest_Revolution" | "Protest_Riot" | "Protest_Strike" | "Proza_Libre" | "Public_Sans" | "Puppies_Play" | "Puritan" | "Purple_Purse" | "Qahiri" | "Quando" | "Quantico" | "Quattrocento" | "Quattrocento_Sans" | "Questrial" | "Quicksand" | "Quintessential" | "Qwigley" | "Qwitcher_Grypen" | "REM" | "Racing_Sans_One" | "Radio_Canada" | "Radio_Canada_Big" | "Radley" | "Rajdhani" | "Rakkas" | "Raleway" | "Raleway_Dots" | "Ramabhadra" | "Ramaraja" | "Rambla" | "Rammetto_One" | "Rampart_One" | "Ranchers" | "Rancho" | "Ranga" | "Rasa" | "Rationale" | "Ravi_Prakash" | "Readex_Pro" | "Recursive" | "Red_Hat_Display" | "Red_Hat_Mono" | "Red_Hat_Text" | "Red_Rose" | "Redacted" | "Redacted_Script" | "Reddit_Mono" | "Reddit_Sans" | "Reddit_Sans_Condensed" | "Redressed" | "Reem_Kufi" | "Reem_Kufi_Fun" | "Reem_Kufi_Ink" | "Reenie_Beanie" | "Reggae_One" | "Rethink_Sans" | "Revalia" | "Rhodium_Libre" | "Ribeye" | "Ribeye_Marrow" | "Righteous" | "Risque" | "Road_Rage" | "Roboto" | "Roboto_Condensed" | "Roboto_Flex" | "Roboto_Mono" | "Roboto_Serif" | "Roboto_Slab" | "Rochester" | "Rock_3D" | "Rock_Salt" | "RocknRoll_One" | "Rokkitt" | "Romanesco" | "Ropa_Sans" | "Rosario" | "Rosarivo" | "Rouge_Script" | "Rowdies" | "Rozha_One" | "Rubik" | "Rubik_80s_Fade" | "Rubik_Beastly" | "Rubik_Broken_Fax" | "Rubik_Bubbles" | "Rubik_Burned" | "Rubik_Dirt" | "Rubik_Distressed" | "Rubik_Doodle_Shadow" | "Rubik_Doodle_Triangles" | "Rubik_Gemstones" | "Rubik_Glitch" | "Rubik_Glitch_Pop" | "Rubik_Iso" | "Rubik_Lines" | "Rubik_Maps" | "Rubik_Marker_Hatch" | "Rubik_Maze" | "Rubik_Microbe" | "Rubik_Mono_One" | "Rubik_Moonrocks" | "Rubik_Pixels" | "Rubik_Puddles" | "Rubik_Scribble" | "Rubik_Spray_Paint" | "Rubik_Storm" | "Rubik_Vinyl" | "Rubik_Wet_Paint" | "Ruda" | "Rufina" | "Ruge_Boogie" | "Ruluko" | "Rum_Raisin" | "Ruslan_Display" | "Russo_One" | "Ruthie" | "Ruwudu" | "Rye" | "STIX_Two_Text" | "SUSE" | "Sacramento" | "Sahitya" | "Sail" | "Saira" | "Saira_Condensed" | "Saira_Extra_Condensed" | "Saira_Semi_Condensed" | "Saira_Stencil_One" | "Salsa" | "Sanchez" | "Sancreek" | "Sankofa_Display" | "Sansita" | "Sansita_Swashed" | "Sarabun" | "Sarala" | "Sarina" | "Sarpanch" | "Sassy_Frass" | "Satisfy" | "Sawarabi_Gothic" | "Sawarabi_Mincho" | "Scada" | "Scheherazade_New" | "Schibsted_Grotesk" | "Schoolbell" | "Scope_One" | "Seaweed_Script" | "Secular_One" | "Sedan" | "Sedan_SC" | "Sedgwick_Ave" | "Sedgwick_Ave_Display" | "Sen" | "Send_Flowers" | "Sevillana" | "Seymour_One" | "Shadows_Into_Light" | "Shadows_Into_Light_Two" | "Shalimar" | "Shantell_Sans" | "Shanti" | "Share" | "Share_Tech" | "Share_Tech_Mono" | "Shippori_Antique" | "Shippori_Antique_B1" | "Shippori_Mincho" | "Shippori_Mincho_B1" | "Shizuru" | "Shojumaru" | "Short_Stack" | "Shrikhand" | "Siemreap" | "Sigmar" | "Sigmar_One" | "Signika" | "Signika_Negative" | "Silkscreen" | "Simonetta" | "Single_Day" | "Sintony" | "Sirin_Stencil" | "Six_Caps" | "Sixtyfour" | "Sixtyfour_Convergence" | "Skranji" | "Slabo_13px" | "Slabo_27px" | "Slackey" | "Slackside_One" | "Smokum" | "Smooch" | "Smooch_Sans" | "Smythe" | "Sniglet" | "Snippet" | "Snowburst_One" | "Sofadi_One" | "Sofia" | "Sofia_Sans" | "Sofia_Sans_Condensed" | "Sofia_Sans_Extra_Condensed" | "Sofia_Sans_Semi_Condensed" | "Solitreo" | "Solway" | "Sometype_Mono" | "Song_Myung" | "Sono" | "Sonsie_One" | "Sora" | "Sorts_Mill_Goudy" | "Sour_Gummy" | "Source_Code_Pro" | "Source_Sans_3" | "Source_Serif_4" | "Space_Grotesk" | "Space_Mono" | "Special_Elite" | "Spectral" | "Spectral_SC" | "Spicy_Rice" | "Spinnaker" | "Spirax" | "Splash" | "Spline_Sans" | "Spline_Sans_Mono" | "Squada_One" | "Square_Peg" | "Sree_Krushnadevaraya" | "Sriracha" | "Srisakdi" | "Staatliches" | "Stalemate" | "Stalinist_One" | "Stardos_Stencil" | "Stick" | "Stick_No_Bills" | "Stint_Ultra_Condensed" | "Stint_Ultra_Expanded" | "Stoke" | "Strait" | "Style_Script" | "Stylish" | "Sue_Ellen_Francisco" | "Suez_One" | "Sulphur_Point" | "Sumana" | "Sunflower" | "Sunshiney" | "Supermercado_One" | "Sura" | "Suranna" | "Suravaram" | "Suwannaphum" | "Swanky_and_Moo_Moo" | "Syncopate" | "Syne" | "Syne_Mono" | "Syne_Tactile" | "Tac_One" | "Tai_Heritage_Pro" | "Tajawal" | "Tangerine" | "Tapestry" | "Taprom" | "Tauri" | "Taviraj" | "Teachers" | "Teko" | "Tektur" | "Telex" | "Tenali_Ramakrishna" | "Tenor_Sans" | "Text_Me_One" | "Texturina" | "Thasadith" | "The_Girl_Next_Door" | "The_Nautigal" | "Tienne" | "Tillana" | "Tilt_Neon" | "Tilt_Prism" | "Tilt_Warp" | "Timmana" | "Tinos" | "Tiny5" | "Tiro_Bangla" | "Tiro_Devanagari_Hindi" | "Tiro_Devanagari_Marathi" | "Tiro_Devanagari_Sanskrit" | "Tiro_Gurmukhi" | "Tiro_Kannada" | "Tiro_Tamil" | "Tiro_Telugu" | "Titan_One" | "Titillium_Web" | "Tomorrow" | "Tourney" | "Trade_Winds" | "Train_One" | "Trirong" | "Trispace" | "Trocchi" | "Trochut" | "Truculenta" | "Trykker" | "Tsukimi_Rounded" | "Tulpen_One" | "Turret_Road" | "Twinkle_Star" | "Ubuntu" | "Ubuntu_Condensed" | "Ubuntu_Mono" | "Ubuntu_Sans" | "Ubuntu_Sans_Mono" | "Uchen" | "Ultra" | "Unbounded" | "Uncial_Antiqua" | "Underdog" | "Unica_One" | "UnifrakturCook" | "UnifrakturMaguntia" | "Unkempt" | "Unlock" | "Unna" | "Updock" | "Urbanist" | "VT323" | "Vampiro_One" | "Varela" | "Varela_Round" | "Varta" | "Vast_Shadow" | "Vazirmatn" | "Vesper_Libre" | "Viaoda_Libre" | "Vibes" | "Vibur" | "Victor_Mono" | "Vidaloka" | "Viga" | "Vina_Sans" | "Voces" | "Volkhov" | "Vollkorn" | "Vollkorn_SC" | "Voltaire" | "Vujahday_Script" | "Waiting_for_the_Sunrise" | "Wallpoet" | "Walter_Turncoat" | "Warnes" | "Water_Brush" | "Waterfall" | "Wavefont" | "Wellfleet" | "Wendy_One" | "Whisper" | "WindSong" | "Wire_One" | "Wittgenstein" | "Wix_Madefor_Display" | "Wix_Madefor_Text" | "Work_Sans" | "Workbench" | "Xanh_Mono" | "Yaldevi" | "Yanone_Kaffeesatz" | "Yantramanav" | "Yarndings_12" | "Yarndings_12_Charted" | "Yarndings_20" | "Yarndings_20_Charted" | "Yatra_One" | "Yellowtail" | "Yeon_Sung" | "Yeseva_One" | "Yesteryear" | "Yomogi" | "Young_Serif" | "Yrsa" | "Ysabeau" | "Ysabeau_Infant" | "Ysabeau_Office" | "Ysabeau_SC" | "Yuji_Boku" | "Yuji_Hentaigana_Akari" | "Yuji_Hentaigana_Akebono" | "Yuji_Mai" | "Yuji_Syuku" | "Yusei_Magic" | "ZCOOL_KuaiLe" | "ZCOOL_QingKe_HuangYou" | "ZCOOL_XiaoWei" | "Zain" | "Zen_Antique" | "Zen_Antique_Soft" | "Zen_Dots" | "Zen_Kaku_Gothic_Antique" | "Zen_Kaku_Gothic_New" | "Zen_Kurenaido" | "Zen_Loop" | "Zen_Maru_Gothic" | "Zen_Old_Mincho" | "Zen_Tokyo_Zoo" | "Zeyada" | "Zhi_Mang_Xing" | "Zilla_Slab" | "Zilla_Slab_Highlight"; }; ``` ##### font.sizes? ```ts optional sizes: { base?: { lineHeight?: string; size?: string; }; empty-screen-title?: { lineHeight?: string; size?: string; }; error-screen-title?: { lineHeight?: string; size?: string; }; headline?: { lineHeight?: string; size?: string; }; sm?: { lineHeight?: string; size?: string; }; xs?: { lineHeight?: string; size?: string; }; }; ``` ##### font.sizes.base? ```ts optional base: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### font.sizes.base.lineHeight? ```ts optional lineHeight: string; ``` ##### font.sizes.base.size? ```ts optional size: string; ``` ##### font.sizes.empty-screen-title? ```ts optional empty-screen-title: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### font.sizes.empty-screen-title.lineHeight? ```ts optional lineHeight: string; ``` ##### font.sizes.empty-screen-title.size? ```ts optional size: string; ``` ##### font.sizes.error-screen-title? ```ts optional error-screen-title: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### font.sizes.error-screen-title.lineHeight? ```ts optional lineHeight: string; ``` ##### font.sizes.error-screen-title.size? ```ts optional size: string; ``` ##### font.sizes.headline? ```ts optional headline: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### font.sizes.headline.lineHeight? ```ts optional lineHeight: string; ``` ##### font.sizes.headline.size? ```ts optional size: string; ``` ##### font.sizes.sm? ```ts optional sm: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### font.sizes.sm.lineHeight? ```ts optional lineHeight: string; ``` ##### font.sizes.sm.size? ```ts optional size: string; ``` ##### font.sizes.xs? ```ts optional xs: { lineHeight?: string; size?: string; } = EmbedConfigFontSizeSchema; ``` ##### font.sizes.xs.lineHeight? ```ts optional lineHeight: string; ``` ##### font.sizes.xs.size? ```ts optional size: string; ``` #### mode? ```ts optional mode: "dark" | "light"; ``` #### other? ```ts optional other: { radius?: string; root-padding-horizontal?: string; root-padding-vertical?: string; }; ``` ##### other.radius? ```ts optional radius: string; ``` ##### other.root-padding-horizontal? ```ts optional root-padding-horizontal: string; ``` ##### other.root-padding-vertical? ```ts optional root-padding-vertical: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedGetDimensionsEventSchemaType ## Type Alias: EmbedGetDimensionsEventSchemaType ```ts type EmbedGetDimensionsEventSchemaType = { type: "@ecp.eth/sdk/embed/get-dimensions"; }; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:225 ### Type declaration #### type ```ts type: "@ecp.eth/sdk/embed/get-dimensions"; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedResizedEventSchemaType ## Type Alias: EmbedResizedEventSchemaType ```ts type EmbedResizedEventSchemaType = { height: number; type: "@ecp.eth/sdk/embed/resize"; }; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:217 ### Type declaration #### height ```ts height: number; ``` #### type ```ts type: "@ecp.eth/sdk/embed/resize"; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigFontSchema ## Variable: EmbedConfigFontSchema ```ts const EmbedConfigFontSchema: ZodObject; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:115 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigFontSizeSchema ## Variable: EmbedConfigFontSizeSchema ```ts const EmbedConfigFontSizeSchema: ZodObject<{ lineHeight: ZodOptional>; size: ZodOptional>; }, "strip", ZodTypeAny, { lineHeight?: string; size?: string; }, { lineHeight?: string; size?: string; }>; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:108 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigSchema ## Variable: EmbedConfigSchema ```ts const EmbedConfigSchema: ZodObject; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:180 The zod schema for `EmbedConfigSchemaType` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigSupportedChainIdsSchema ## Variable: EmbedConfigSupportedChainIdsSchema ```ts const EmbedConfigSupportedChainIdsSchema: ZodDefault; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:165 The zod schema for supported chain ids [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigSupportedFont ## Variable: EmbedConfigSupportedFont ```ts const EmbedConfigSupportedFont: ZodEnum<["ABeeZee", "ADLaM_Display", "AR_One_Sans", "Abel", "Abhaya_Libre", "Aboreto", "Abril_Fatface", "Abyssinica_SIL", "Aclonica", "Acme", "Actor", "Adamina", "Advent_Pro", "Afacad", "Afacad_Flux"]>; ``` Defined in: packages/sdk/src/embed/schemas/fonts.ts:6 It supports the following fonts from GoogleFonts [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigThemeColorsSchema ## Variable: EmbedConfigThemeColorsSchema ```ts const EmbedConfigThemeColorsSchema: ZodObject; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:89 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigThemeOtherSchema ## Variable: EmbedConfigThemeOtherSchema ```ts const EmbedConfigThemeOtherSchema: ZodObject; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:98 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigThemePaletteSchema ## Variable: EmbedConfigThemePaletteSchema ```ts const EmbedConfigThemePaletteSchema: ZodObject; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:53 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigThemeSchema ## Variable: EmbedConfigThemeSchema ```ts const EmbedConfigThemeSchema: ZodObject; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:145 The zod schema for embed theme configuration [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedGetDimensionsEventSchema ## Variable: EmbedGetDimensionsEventSchema ```ts const EmbedGetDimensionsEventSchema: ZodObject; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:221 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedResizedEventSchema ## Variable: EmbedResizedEventSchema ```ts const EmbedResizedEventSchema: ZodObject; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:212 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / convertIndexerMetadataToRecord ## Function: convertIndexerMetadataToRecord() ```ts function convertIndexerMetadataToRecord(metadataEntries, keyTypeMap?): MetadataRecord; ``` Defined in: packages/sdk/src/indexer/schemas.ts:520 Converts IndexerAPI MetadataEntry array to Record format for easier manipulation ### Parameters #### metadataEntries \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[] Array of MetadataEntry from indexer API #### keyTypeMap? `Record`\<`` `0x${string}` ``, \{ `key`: `string`; `type`: [`MetadataType`](/sdk-reference/comments/type-aliases/MetadataType.mdx); }> Optional mapping of known keys to their original string and type ### Returns [`MetadataRecord`](/sdk-reference/comments/type-aliases/MetadataRecord.mdx) The metadata in Record format [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / convertRecordToIndexerMetadata ## Function: convertRecordToIndexerMetadata() ```ts function convertRecordToIndexerMetadata(metadataRecord): { key: `0x${string}`; value: `0x${string}`; }[]; ``` Defined in: packages/sdk/src/indexer/schemas.ts:533 Converts Record format metadata to IndexerAPI MetadataEntry array format ### Parameters #### metadataRecord [`MetadataRecord`](/sdk-reference/comments/type-aliases/MetadataRecord.mdx) The metadata in Record format ### Returns \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[] Array of MetadataEntry for indexer API use [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / fetchAuthorData ## Function: fetchAuthorData() ```ts function fetchAuthorData(options): Promise<{ address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }>; ``` Defined in: packages/sdk/src/indexer/api.ts:628 Fetch author data from the Indexer API ### Parameters #### options [`FetchAuthorDataOptions`](/sdk-reference/indexer/type-aliases/FetchAuthorDataOptions.mdx) ### Returns `Promise`\<\{ `address`: `` `0x${string}` ``; `ens?`: \{ `avatarUrl`: `null` | `string`; `name`: `string`; }; `farcaster?`: \{ `displayName?`: `string`; `fid`: `number`; `pfpUrl?`: `string`; `username`: `string`; }; }> A promise that resolves author data fetched from the Indexer API [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / fetchAutocomplete ## Function: fetchAutocomplete() ```ts function fetchAutocomplete(options): Promise<{ results: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; type: "ens"; url: string; value: `0x${string}`; } | { address: `0x${string}`; caip19: string; chainId: number; decimals: number; logoURI: null | string; name: string; symbol: string; type: "erc20"; value: string; } | { address: `0x${string}`; displayName?: null | string; fid: number; fname: string; pfpUrl?: null | string; type: "farcaster"; url: string; username: string; value: `0x${string}`; })[]; }>; ``` Defined in: packages/sdk/src/indexer/api.ts:940 Fetch autocomplete suggestions from the Indexer API ### Parameters #### options [`FetchAutocompleteOptions`](/sdk-reference/indexer/type-aliases/FetchAutocompleteOptions.mdx) ### Returns `Promise`\<\{ `results`: ( \| \{ `address`: `` `0x${string}` ``; `avatarUrl`: `null` | `string`; `name`: `string`; `type`: `"ens"`; `url`: `string`; `value`: `` `0x${string}` ``; } \| \{ `address`: `` `0x${string}` ``; `caip19`: `string`; `chainId`: `number`; `decimals`: `number`; `logoURI`: `null` | `string`; `name`: `string`; `symbol`: `string`; `type`: `"erc20"`; `value`: `string`; } \| \{ `address`: `` `0x${string}` ``; `displayName?`: `null` | `string`; `fid`: `number`; `fname`: `string`; `pfpUrl?`: `null` | `string`; `type`: `"farcaster"`; `url`: `string`; `username`: `string`; `value`: `` `0x${string}` ``; })\[]; }> A promise that resolves to autocomplete suggestions fetched from the Indexer API [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / fetchChannel ## Function: fetchChannel() ```ts function fetchChannel(options): Promise<{ chainId: number; createdAt: string; description: string; hook: null | `0x${string}`; id: string; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; owner: `0x${string}`; updatedAt: string; }>; ``` Defined in: packages/sdk/src/indexer/api.ts:868 Fetch a single channel by ID from the Indexer API ### Parameters #### options [`FetchChannelOptions`](/sdk-reference/indexer/type-aliases/FetchChannelOptions.mdx) ### Returns `Promise`\<\{ `chainId`: `number`; `createdAt`: `string`; `description`: `string`; `hook`: `null` | `` `0x${string}` ``; `id`: `string`; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `name`: `string`; `owner`: `` `0x${string}` ``; `updatedAt`: `string`; }> A promise that resolves to the channel data fetched from the Indexer API [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / fetchChannels ## Function: fetchChannels() ```ts function fetchChannels(options): Promise<{ pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { chainId: number; createdAt: Date; description: string; hook: null | `0x${string}`; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; owner: `0x${string}`; updatedAt: Date; }[]; }>; ``` Defined in: packages/sdk/src/indexer/api.ts:785 Fetch channels from the Indexer API ### Parameters #### options [`FetchChannelsOptions`](/sdk-reference/indexer/type-aliases/FetchChannelsOptions.mdx) ### Returns `Promise`\<\{ `pagination`: \{ `endCursor?`: `` `0x${string}` ``; `hasNext`: `boolean`; `hasPrevious`: `boolean`; `limit`: `number`; `startCursor?`: `` `0x${string}` ``; }; `results`: \{ `chainId`: `number`; `createdAt`: `Date`; `description`: `string`; `hook`: `null` | `` `0x${string}` ``; `id`: `bigint`; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `name`: `string`; `owner`: `` `0x${string}` ``; `updatedAt`: `Date`; }\[]; }> A promise that resolves channels fetched from the Indexer API [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / fetchComment ## Function: fetchComment() ```ts function fetchComment(options): Promise<{ app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ... | ...; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: ...; avatarUrl: ...; name: ...; position: ...; type: ...; url: ...; } | { address: ...; displayName: ...; fid: ...; fname: ...; pfpUrl: ...; position: ...; type: ...; url: ...; username: ...; } | { address: ...; chainId: ...; chains: ...; decimals: ...; logoURI: ...; name: ...; position: ...; symbol: ...; type: ...; } | { description: ...; favicon: ...; opengraph: ...; position: ...; title: ...; type: ...; url: ...; } | { mediaType: ...; position: ...; type: ...; url: ...; } | { mediaType: ...; position: ...; type: ...; url: ...; } | { mediaType: ...; position: ...; type: ...; url: ...; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: ...; amount: ...; symbol: ...; }; to: { address: ...; amount: ...; symbol: ...; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ... | ...; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }>; ``` Defined in: packages/sdk/src/indexer/api.ts:79 Fetch one single comment from the Indexer API ### Parameters #### options ##### apiUrl? `string` = `...` URL on which /api/comments endpoint will be called **Default** ```ts "https://api.ethcomments.xyz" ``` ##### chainId `number` | `number`\[] = `...` Filter comments by chain ID(s) ##### commentId `` `0x${string}` `` = `HexSchema` The ID of the comment to fetch ##### commentType? `number` = `...` Filter comments by comment type ##### mode? `"flat"` | `"nested"` = `...` The mode to fetch comments in by default it returns only the first level of comments. If flat is used it will return all comments sorted by timestamp in descending order. **Default** ```ts "nested" ``` ##### retries? `number` = `...` Number of times to retry the signing operation in case of failure. **Default** ```ts 3 ``` ##### signal? `AbortSignal` = `...` The signal to abort the request ##### viewer? `` `0x${string}` `` = `...` The viewer's address. This is useful when the content moderation is enabled on the indexer. ### Returns `Promise`\<\{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${string}` ``; `ens?`: \{ `avatarUrl`: `null` | `string`; `name`: `string`; }; `farcaster?`: \{ `displayName?`: `string`; `fid`: `number`; `pfpUrl?`: `string`; `username`: `string`; }; }; `chainId`: `number`; `channelId`: `bigint`; `commentType`: `number`; `content`: `string`; `createdAt`: `Date`; `cursor`: `` `0x${string}` ``; `deletedAt`: `null` | `Date`; `hookMetadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `id`: `` `0x${string}` ``; `logIndex`: `null` | `number`; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `moderationClassifierResult`: `Record`\<`string`, `number`>; `moderationClassifierScore`: `number`; `moderationStatus`: `"approved"` | `"pending"` | `"rejected"`; `moderationStatusChangedAt`: `Date`; `parentId`: `null` | `` `0x${string}` ``; `reactionCounts`: `Record`\<`string`, `number`>; `references`: ( \| \{ `address`: `` `0x${string}` ``; `avatarUrl`: `null` | `string`; `name`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"ens"`; `url`: `string`; } \| \{ `address`: `` `0x${string}` ``; `displayName`: `null` | `string`; `fid`: `number`; `fname`: `string`; `pfpUrl`: `null` | `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"farcaster"`; `url`: `string`; `username`: `string`; } \| \{ `address`: `` `0x${string}` ``; `chainId`: `null` | `number`; `chains`: \{ `caip`: `string`; `chainId`: `number`; }\[]; `decimals`: `number`; `logoURI`: `null` | `string`; `name`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `symbol`: `string`; `type`: `"erc20"`; } \| \{ `description`: `null` | `string`; `favicon`: `null` | `string`; `opengraph`: | `null` \| \{ `description`: `null` | `string`; `image`: `string`; `title`: `string`; `url`: `string`; }; `position`: \{ `end`: `number`; `start`: `number`; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"file"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"video"`; `url`: `string`; })\[]; `replies`: \{ `extra`: \{ `moderationEnabled`: `boolean`; `moderationKnownReactions`: `string`\[]; }; `pagination`: \{ `endCursor?`: `` `0x${string}` ``; `hasNext`: `boolean`; `hasPrevious`: `boolean`; `limit`: `number`; `startCursor?`: `` `0x${string}` ``; }; `results`: \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${string}` ``; `ens?`: \{ `avatarUrl`: `null` | `string`; `name`: `string`; }; `farcaster?`: \{ `displayName?`: `string`; `fid`: `number`; `pfpUrl?`: `string`; `username`: `string`; }; }; `chainId`: `number`; `channelId`: `bigint`; `commentType`: `number`; `content`: `string`; `createdAt`: `Date`; `cursor`: `` `0x${string}` ``; `deletedAt`: `null` | `Date`; `hookMetadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `id`: `` `0x${string}` ``; `logIndex`: `null` | `number`; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `moderationClassifierResult`: `Record`\<`string`, `number`>; `moderationClassifierScore`: `number`; `moderationStatus`: `"approved"` | `"pending"` | `"rejected"`; `moderationStatusChangedAt`: `Date`; `parentId`: `null` | `` `0x${string}` ``; `reactionCounts`: `Record`\<`string`, `number`>; `references`: ( \| \{ `address`: `` `0x${string}` ``; `avatarUrl`: `null` | `string`; `name`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"ens"`; `url`: `string`; } \| \{ `address`: `` `0x${string}` ``; `displayName`: `null` | `string`; `fid`: `number`; `fname`: `string`; `pfpUrl`: `null` | `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"farcaster"`; `url`: `string`; `username`: `string`; } \| \{ `address`: `` `0x${string}` ``; `chainId`: `null` | `number`; `chains`: \{ `caip`: `string`; `chainId`: `number`; }\[]; `decimals`: `number`; `logoURI`: `null` | `string`; `name`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `symbol`: `string`; `type`: `"erc20"`; } \| \{ `description`: `null` | `string`; `favicon`: `null` | `string`; `opengraph`: | `null` \| \{ `description`: ... | ...; `image`: `string`; `title`: `string`; `url`: `string`; }; `position`: \{ `end`: `number`; `start`: `number`; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"file"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"video"`; `url`: `string`; })\[]; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<`string`, \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${string}` ``; `ens?`: \{ `avatarUrl`: ...; `name`: ...; }; `farcaster?`: \{ `displayName?`: ...; `fid`: ...; `pfpUrl?`: ...; `username`: ...; }; }; `chainId`: `number`; `channelId`: `bigint`; `commentType`: `number`; `content`: `string`; `createdAt`: `Date`; `cursor`: `` `0x${string}` ``; `deletedAt`: `null` | `Date`; `hookMetadata`: \{ `key`: `` `0x${(...)}` ``; `value`: `` `0x${(...)}` ``; }\[]; `id`: `` `0x${string}` ``; `logIndex`: `null` | `number`; `metadata`: \{ `key`: `` `0x${(...)}` ``; `value`: `` `0x${(...)}` ``; }\[]; `moderationClassifierResult`: `Record`\<`string`, `number`>; `moderationClassifierScore`: `number`; `moderationStatus`: `"approved"` | `"pending"` | `"rejected"`; `moderationStatusChangedAt`: `Date`; `parentId`: `null` | `` `0x${string}` ``; `references`: ( \| \{ `address`: ...; `avatarUrl`: ...; `name`: ...; `position`: ...; `type`: ...; `url`: ...; } \| \{ `address`: ...; `displayName`: ...; `fid`: ...; `fname`: ...; `pfpUrl`: ...; `position`: ...; `type`: ...; `url`: ...; `username`: ...; } \| \{ `address`: ...; `chainId`: ...; `chains`: ...; `decimals`: ...; `logoURI`: ...; `name`: ...; `position`: ...; `symbol`: ...; `type`: ...; } \| \{ `description`: ...; `favicon`: ...; `opengraph`: ...; `position`: ...; `title`: ...; `type`: ...; `url`: ...; } \| \{ `mediaType`: ...; `position`: ...; `type`: ...; `url`: ...; } \| \{ `mediaType`: ...; `position`: ...; `type`: ...; `url`: ...; } \| \{ `mediaType`: ...; `position`: ...; `type`: ...; `url`: ...; })\[]; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: ...; `amount`: ...; `symbol`: ...; }; `to`: \{ `address`: ...; `amount`: ...; `symbol`: ...; }; }; }\[]>; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${string}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: `""` | `` `0x${string}` ``; `amount`: `string`; `symbol`: `string`; }; }; }\[]; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<`string`, \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${string}` ``; `ens?`: \{ `avatarUrl`: `null` | `string`; `name`: `string`; }; `farcaster?`: \{ `displayName?`: `string`; `fid`: `number`; `pfpUrl?`: `string`; `username`: `string`; }; }; `chainId`: `number`; `channelId`: `bigint`; `commentType`: `number`; `content`: `string`; `createdAt`: `Date`; `cursor`: `` `0x${string}` ``; `deletedAt`: `null` | `Date`; `hookMetadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `id`: `` `0x${string}` ``; `logIndex`: `null` | `number`; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `moderationClassifierResult`: `Record`\<`string`, `number`>; `moderationClassifierScore`: `number`; `moderationStatus`: `"approved"` | `"pending"` | `"rejected"`; `moderationStatusChangedAt`: `Date`; `parentId`: `null` | `` `0x${string}` ``; `references`: ( \| \{ `address`: `` `0x${string}` ``; `avatarUrl`: `null` | `string`; `name`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"ens"`; `url`: `string`; } \| \{ `address`: `` `0x${string}` ``; `displayName`: `null` | `string`; `fid`: `number`; `fname`: `string`; `pfpUrl`: `null` | `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"farcaster"`; `url`: `string`; `username`: `string`; } \| \{ `address`: `` `0x${string}` ``; `chainId`: `null` | `number`; `chains`: \{ `caip`: `string`; `chainId`: `number`; }\[]; `decimals`: `number`; `logoURI`: `null` | `string`; `name`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `symbol`: `string`; `type`: `"erc20"`; } \| \{ `description`: `null` | `string`; `favicon`: `null` | `string`; `opengraph`: | `null` \| \{ `description`: ... | ...; `image`: `string`; `title`: `string`; `url`: `string`; }; `position`: \{ `end`: `number`; `start`: `number`; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"file"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"video"`; `url`: `string`; })\[]; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${string}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: `""` | `` `0x${string}` ``; `amount`: `string`; `symbol`: `string`; }; }; }\[]>; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${string}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: `""` | `` `0x${string}` ``; `amount`: `string`; `symbol`: `string`; }; }; }> A promise that resolves the comment fetched from the Indexer API [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / fetchCommentReplies ## Function: fetchCommentReplies() ```ts function fetchCommentReplies(options): Promise<{ extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: ... | ...; name: string; }; farcaster?: { displayName?: ... | ...; fid: number; pfpUrl?: ... | ...; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${(...)}`; avatarUrl: ... | ...; name: string; position: { end: ...; start: ...; }; type: "ens"; url: string; } | { address: `0x${(...)}`; displayName: ... | ...; fid: number; fname: string; pfpUrl: ... | ...; position: { end: ...; start: ...; }; type: "farcaster"; url: string; username: string; } | { address: `0x${(...)}`; chainId: ... | ...; chains: ...[]; decimals: number; logoURI: ... | ...; name: string; position: { end: ...; start: ...; }; symbol: string; type: "erc20"; } | { description: ... | ...; favicon: ... | ...; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: ... | ... | ...; moderationStatusChangedAt: Date; parentId: ... | ...; references: ...[]; revision: number; targetUri: string; txHash: `0x${(...)}`; updatedAt: Date; zeroExSwap: ... | ...; }[]>; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${(...)}`; avatarUrl: ... | ...; name: string; position: { end: ...; start: ...; }; type: "ens"; url: string; } | { address: `0x${(...)}`; displayName: ... | ...; fid: number; fname: string; pfpUrl: ... | ...; position: { end: ...; start: ...; }; type: "farcaster"; url: string; username: string; } | { address: `0x${(...)}`; chainId: ... | ...; chains: ...[]; decimals: number; logoURI: ... | ...; name: string; position: { end: ...; start: ...; }; symbol: string; type: "erc20"; } | { description: ... | ...; favicon: ... | ...; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; }>; ``` Defined in: packages/sdk/src/indexer/api.ts:491 Fetch replies for a comment from the Indexer API ### Parameters #### options [`FetchCommentRepliesOptions`](/sdk-reference/indexer/type-aliases/FetchCommentRepliesOptions.mdx) ### Returns `Promise`\<\{ `extra`: \{ `moderationEnabled`: `boolean`; `moderationKnownReactions`: `string`\[]; }; `pagination`: \{ `endCursor?`: `` `0x${string}` ``; `hasNext`: `boolean`; `hasPrevious`: `boolean`; `limit`: `number`; `startCursor?`: `` `0x${string}` ``; }; `results`: \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${string}` ``; `ens?`: \{ `avatarUrl`: `null` | `string`; `name`: `string`; }; `farcaster?`: \{ `displayName?`: `string`; `fid`: `number`; `pfpUrl?`: `string`; `username`: `string`; }; }; `chainId`: `number`; `channelId`: `bigint`; `commentType`: `number`; `content`: `string`; `createdAt`: `Date`; `cursor`: `` `0x${string}` ``; `deletedAt`: `null` | `Date`; `hookMetadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `id`: `` `0x${string}` ``; `logIndex`: `null` | `number`; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `moderationClassifierResult`: `Record`\<`string`, `number`>; `moderationClassifierScore`: `number`; `moderationStatus`: `"approved"` | `"pending"` | `"rejected"`; `moderationStatusChangedAt`: `Date`; `parentId`: `null` | `` `0x${string}` ``; `reactionCounts`: `Record`\<`string`, `number`>; `references`: ( \| \{ `address`: `` `0x${string}` ``; `avatarUrl`: `null` | `string`; `name`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"ens"`; `url`: `string`; } \| \{ `address`: `` `0x${string}` ``; `displayName`: `null` | `string`; `fid`: `number`; `fname`: `string`; `pfpUrl`: `null` | `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"farcaster"`; `url`: `string`; `username`: `string`; } \| \{ `address`: `` `0x${string}` ``; `chainId`: `null` | `number`; `chains`: \{ `caip`: `string`; `chainId`: `number`; }\[]; `decimals`: `number`; `logoURI`: `null` | `string`; `name`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `symbol`: `string`; `type`: `"erc20"`; } \| \{ `description`: `null` | `string`; `favicon`: `null` | `string`; `opengraph`: | `null` \| \{ `description`: `null` | `string`; `image`: `string`; `title`: `string`; `url`: `string`; }; `position`: \{ `end`: `number`; `start`: `number`; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"file"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"video"`; `url`: `string`; })\[]; `replies`: \{ `extra`: \{ `moderationEnabled`: `boolean`; `moderationKnownReactions`: `string`\[]; }; `pagination`: \{ `endCursor?`: `` `0x${string}` ``; `hasNext`: `boolean`; `hasPrevious`: `boolean`; `limit`: `number`; `startCursor?`: `` `0x${string}` ``; }; `results`: \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${string}` ``; `ens?`: \{ `avatarUrl`: ... | ...; `name`: `string`; }; `farcaster?`: \{ `displayName?`: ... | ...; `fid`: `number`; `pfpUrl?`: ... | ...; `username`: `string`; }; }; `chainId`: `number`; `channelId`: `bigint`; `commentType`: `number`; `content`: `string`; `createdAt`: `Date`; `cursor`: `` `0x${string}` ``; `deletedAt`: `null` | `Date`; `hookMetadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `id`: `` `0x${string}` ``; `logIndex`: `null` | `number`; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `moderationClassifierResult`: `Record`\<`string`, `number`>; `moderationClassifierScore`: `number`; `moderationStatus`: `"approved"` | `"pending"` | `"rejected"`; `moderationStatusChangedAt`: `Date`; `parentId`: `null` | `` `0x${string}` ``; `reactionCounts`: `Record`\<`string`, `number`>; `references`: ( \| \{ `address`: `` `0x${(...)}` ``; `avatarUrl`: ... | ...; `name`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"ens"`; `url`: `string`; } \| \{ `address`: `` `0x${(...)}` ``; `displayName`: ... | ...; `fid`: `number`; `fname`: `string`; `pfpUrl`: ... | ...; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"farcaster"`; `url`: `string`; `username`: `string`; } \| \{ `address`: `` `0x${(...)}` ``; `chainId`: ... | ...; `chains`: ...\[]; `decimals`: `number`; `logoURI`: ... | ...; `name`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `symbol`: `string`; `type`: `"erc20"`; } \| \{ `description`: ... | ...; `favicon`: ... | ...; `opengraph`: ... | ...; `position`: \{ `end`: ...; `start`: ...; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"file"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"video"`; `url`: `string`; })\[]; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<`string`, \{ `app`: `` `0x${(...)}` ``; `author`: \{ `address`: ...; `ens?`: ...; `farcaster?`: ...; }; `chainId`: `number`; `channelId`: `bigint`; `commentType`: `number`; `content`: `string`; `createdAt`: `Date`; `cursor`: `` `0x${(...)}` ``; `deletedAt`: ... | ...; `hookMetadata`: ...\[]; `id`: `` `0x${(...)}` ``; `logIndex`: ... | ...; `metadata`: ...\[]; `moderationClassifierResult`: `Record`\<..., ...>; `moderationClassifierScore`: `number`; `moderationStatus`: ... | ... | ...; `moderationStatusChangedAt`: `Date`; `parentId`: ... | ...; `references`: ...\[]; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${(...)}` ``; `updatedAt`: `Date`; `zeroExSwap`: ... | ...; }\[]>; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${(...)}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: ... | ...; `amount`: `string`; `symbol`: `string`; }; }; }\[]; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<`string`, \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${string}` ``; `ens?`: \{ `avatarUrl`: ... | ...; `name`: `string`; }; `farcaster?`: \{ `displayName?`: ... | ...; `fid`: `number`; `pfpUrl?`: ... | ...; `username`: `string`; }; }; `chainId`: `number`; `channelId`: `bigint`; `commentType`: `number`; `content`: `string`; `createdAt`: `Date`; `cursor`: `` `0x${string}` ``; `deletedAt`: `null` | `Date`; `hookMetadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `id`: `` `0x${string}` ``; `logIndex`: `null` | `number`; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `moderationClassifierResult`: `Record`\<`string`, `number`>; `moderationClassifierScore`: `number`; `moderationStatus`: `"approved"` | `"pending"` | `"rejected"`; `moderationStatusChangedAt`: `Date`; `parentId`: `null` | `` `0x${string}` ``; `references`: ( \| \{ `address`: `` `0x${(...)}` ``; `avatarUrl`: ... | ...; `name`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"ens"`; `url`: `string`; } \| \{ `address`: `` `0x${(...)}` ``; `displayName`: ... | ...; `fid`: `number`; `fname`: `string`; `pfpUrl`: ... | ...; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"farcaster"`; `url`: `string`; `username`: `string`; } \| \{ `address`: `` `0x${(...)}` ``; `chainId`: ... | ...; `chains`: ...\[]; `decimals`: `number`; `logoURI`: ... | ...; `name`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `symbol`: `string`; `type`: `"erc20"`; } \| \{ `description`: ... | ...; `favicon`: ... | ...; `opengraph`: ... | ...; `position`: \{ `end`: ...; `start`: ...; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"file"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"video"`; `url`: `string`; })\[]; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${(...)}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: ... | ...; `amount`: `string`; `symbol`: `string`; }; }; }\[]>; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${string}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: `""` | `` `0x${string}` ``; `amount`: `string`; `symbol`: `string`; }; }; }\[]; }> A promise that resolves replies fetched from the Indexer API [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / fetchComments ## Function: fetchComments() ```ts function fetchComments(options): Promise<{ extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: ... | ...; name: string; }; farcaster?: { displayName?: ... | ...; fid: number; pfpUrl?: ... | ...; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${(...)}`; avatarUrl: ... | ...; name: string; position: { end: ...; start: ...; }; type: "ens"; url: string; } | { address: `0x${(...)}`; displayName: ... | ...; fid: number; fname: string; pfpUrl: ... | ...; position: { end: ...; start: ...; }; type: "farcaster"; url: string; username: string; } | { address: `0x${(...)}`; chainId: ... | ...; chains: ...[]; decimals: number; logoURI: ... | ...; name: string; position: { end: ...; start: ...; }; symbol: string; type: "erc20"; } | { description: ... | ...; favicon: ... | ...; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: ... | ... | ...; moderationStatusChangedAt: Date; parentId: ... | ...; references: ...[]; revision: number; targetUri: string; txHash: `0x${(...)}`; updatedAt: Date; zeroExSwap: ... | ...; }[]>; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${(...)}`; avatarUrl: ... | ...; name: string; position: { end: ...; start: ...; }; type: "ens"; url: string; } | { address: `0x${(...)}`; displayName: ... | ...; fid: number; fname: string; pfpUrl: ... | ...; position: { end: ...; start: ...; }; type: "farcaster"; url: string; username: string; } | { address: `0x${(...)}`; chainId: ... | ...; chains: ...[]; decimals: number; logoURI: ... | ...; name: string; position: { end: ...; start: ...; }; symbol: string; type: "erc20"; } | { description: ... | ...; favicon: ... | ...; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; }>; ``` Defined in: packages/sdk/src/indexer/api.ts:263 Fetch comments from the Indexer API ### Parameters #### options [`FetchCommentsOptions`](/sdk-reference/indexer/type-aliases/FetchCommentsOptions.mdx) ### Returns `Promise`\<\{ `extra`: \{ `moderationEnabled`: `boolean`; `moderationKnownReactions`: `string`\[]; }; `pagination`: \{ `endCursor?`: `` `0x${string}` ``; `hasNext`: `boolean`; `hasPrevious`: `boolean`; `limit`: `number`; `startCursor?`: `` `0x${string}` ``; }; `results`: \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${string}` ``; `ens?`: \{ `avatarUrl`: `null` | `string`; `name`: `string`; }; `farcaster?`: \{ `displayName?`: `string`; `fid`: `number`; `pfpUrl?`: `string`; `username`: `string`; }; }; `chainId`: `number`; `channelId`: `bigint`; `commentType`: `number`; `content`: `string`; `createdAt`: `Date`; `cursor`: `` `0x${string}` ``; `deletedAt`: `null` | `Date`; `hookMetadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `id`: `` `0x${string}` ``; `logIndex`: `null` | `number`; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `moderationClassifierResult`: `Record`\<`string`, `number`>; `moderationClassifierScore`: `number`; `moderationStatus`: `"approved"` | `"pending"` | `"rejected"`; `moderationStatusChangedAt`: `Date`; `parentId`: `null` | `` `0x${string}` ``; `reactionCounts`: `Record`\<`string`, `number`>; `references`: ( \| \{ `address`: `` `0x${string}` ``; `avatarUrl`: `null` | `string`; `name`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"ens"`; `url`: `string`; } \| \{ `address`: `` `0x${string}` ``; `displayName`: `null` | `string`; `fid`: `number`; `fname`: `string`; `pfpUrl`: `null` | `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"farcaster"`; `url`: `string`; `username`: `string`; } \| \{ `address`: `` `0x${string}` ``; `chainId`: `null` | `number`; `chains`: \{ `caip`: `string`; `chainId`: `number`; }\[]; `decimals`: `number`; `logoURI`: `null` | `string`; `name`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `symbol`: `string`; `type`: `"erc20"`; } \| \{ `description`: `null` | `string`; `favicon`: `null` | `string`; `opengraph`: | `null` \| \{ `description`: `null` | `string`; `image`: `string`; `title`: `string`; `url`: `string`; }; `position`: \{ `end`: `number`; `start`: `number`; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"file"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"video"`; `url`: `string`; })\[]; `replies`: \{ `extra`: \{ `moderationEnabled`: `boolean`; `moderationKnownReactions`: `string`\[]; }; `pagination`: \{ `endCursor?`: `` `0x${string}` ``; `hasNext`: `boolean`; `hasPrevious`: `boolean`; `limit`: `number`; `startCursor?`: `` `0x${string}` ``; }; `results`: \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${string}` ``; `ens?`: \{ `avatarUrl`: ... | ...; `name`: `string`; }; `farcaster?`: \{ `displayName?`: ... | ...; `fid`: `number`; `pfpUrl?`: ... | ...; `username`: `string`; }; }; `chainId`: `number`; `channelId`: `bigint`; `commentType`: `number`; `content`: `string`; `createdAt`: `Date`; `cursor`: `` `0x${string}` ``; `deletedAt`: `null` | `Date`; `hookMetadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `id`: `` `0x${string}` ``; `logIndex`: `null` | `number`; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `moderationClassifierResult`: `Record`\<`string`, `number`>; `moderationClassifierScore`: `number`; `moderationStatus`: `"approved"` | `"pending"` | `"rejected"`; `moderationStatusChangedAt`: `Date`; `parentId`: `null` | `` `0x${string}` ``; `reactionCounts`: `Record`\<`string`, `number`>; `references`: ( \| \{ `address`: `` `0x${(...)}` ``; `avatarUrl`: ... | ...; `name`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"ens"`; `url`: `string`; } \| \{ `address`: `` `0x${(...)}` ``; `displayName`: ... | ...; `fid`: `number`; `fname`: `string`; `pfpUrl`: ... | ...; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"farcaster"`; `url`: `string`; `username`: `string`; } \| \{ `address`: `` `0x${(...)}` ``; `chainId`: ... | ...; `chains`: ...\[]; `decimals`: `number`; `logoURI`: ... | ...; `name`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `symbol`: `string`; `type`: `"erc20"`; } \| \{ `description`: ... | ...; `favicon`: ... | ...; `opengraph`: ... | ...; `position`: \{ `end`: ...; `start`: ...; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"file"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"video"`; `url`: `string`; })\[]; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<`string`, \{ `app`: `` `0x${(...)}` ``; `author`: \{ `address`: ...; `ens?`: ...; `farcaster?`: ...; }; `chainId`: `number`; `channelId`: `bigint`; `commentType`: `number`; `content`: `string`; `createdAt`: `Date`; `cursor`: `` `0x${(...)}` ``; `deletedAt`: ... | ...; `hookMetadata`: ...\[]; `id`: `` `0x${(...)}` ``; `logIndex`: ... | ...; `metadata`: ...\[]; `moderationClassifierResult`: `Record`\<..., ...>; `moderationClassifierScore`: `number`; `moderationStatus`: ... | ... | ...; `moderationStatusChangedAt`: `Date`; `parentId`: ... | ...; `references`: ...\[]; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${(...)}` ``; `updatedAt`: `Date`; `zeroExSwap`: ... | ...; }\[]>; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${(...)}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: ... | ...; `amount`: `string`; `symbol`: `string`; }; }; }\[]; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<`string`, \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${string}` ``; `ens?`: \{ `avatarUrl`: ... | ...; `name`: `string`; }; `farcaster?`: \{ `displayName?`: ... | ...; `fid`: `number`; `pfpUrl?`: ... | ...; `username`: `string`; }; }; `chainId`: `number`; `channelId`: `bigint`; `commentType`: `number`; `content`: `string`; `createdAt`: `Date`; `cursor`: `` `0x${string}` ``; `deletedAt`: `null` | `Date`; `hookMetadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `id`: `` `0x${string}` ``; `logIndex`: `null` | `number`; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `moderationClassifierResult`: `Record`\<`string`, `number`>; `moderationClassifierScore`: `number`; `moderationStatus`: `"approved"` | `"pending"` | `"rejected"`; `moderationStatusChangedAt`: `Date`; `parentId`: `null` | `` `0x${string}` ``; `references`: ( \| \{ `address`: `` `0x${(...)}` ``; `avatarUrl`: ... | ...; `name`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"ens"`; `url`: `string`; } \| \{ `address`: `` `0x${(...)}` ``; `displayName`: ... | ...; `fid`: `number`; `fname`: `string`; `pfpUrl`: ... | ...; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"farcaster"`; `url`: `string`; `username`: `string`; } \| \{ `address`: `` `0x${(...)}` ``; `chainId`: ... | ...; `chains`: ...\[]; `decimals`: `number`; `logoURI`: ... | ...; `name`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `symbol`: `string`; `type`: `"erc20"`; } \| \{ `description`: ... | ...; `favicon`: ... | ...; `opengraph`: ... | ...; `position`: \{ `end`: ...; `start`: ...; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"file"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"video"`; `url`: `string`; })\[]; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${(...)}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: ... | ...; `amount`: `string`; `symbol`: `string`; }; }; }\[]>; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${string}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: `""` | `` `0x${string}` ``; `amount`: `string`; `symbol`: `string`; }; }; }\[]; }> A promise that resolves comments fetched from the Indexer API [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / getChannelCursor ## Function: getChannelCursor() ```ts function getChannelCursor(channelId, timestamp): `0x${string}`; ``` Defined in: packages/sdk/src/indexer/utils.ts:20 Get the cursor for a channel ### Parameters #### channelId `bigint` The ID of the channel #### timestamp `Date` The timestamp of the channel ### Returns `` `0x${string}` `` The cursor for the channel [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / getCommentCursor ## Function: getCommentCursor() ```ts function getCommentCursor(commentId, timestamp): `0x${string}`; ``` Defined in: packages/sdk/src/indexer/utils.ts:10 Get the cursor for a comment ### Parameters #### commentId `` `0x${string}` `` The ID of the comment #### timestamp `Date` The timestamp of the comment ### Returns `` `0x${string}` `` The cursor for the comment [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / getReportsCursor ## Function: getReportsCursor() ```ts function getReportsCursor(id, timestamp): `0x${string}`; ``` Defined in: packages/sdk/src/indexer/utils.ts:30 Get the cursor for a report ### Parameters #### id `string` The ID of the report #### timestamp `Date` The timestamp of the report ### Returns `` `0x${string}` `` The cursor for the report [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / isMuted ## Function: isMuted() ```ts function isMuted(options): Promise; ``` Defined in: packages/sdk/src/indexer/api.ts:696 Checks if an address is marked as a muted on the indexer of your choice. ### Parameters #### options The options for checking if an address is muted ##### address `` `0x${string}` `` = `HexSchema` Author's address ##### apiUrl? `string` = `...` URL on which /api/muted-accounts/$address endpoint will be called **Default** ```ts "https://api.ethcomments.xyz" ``` ##### retries? `number` = `...` Number of times to retry the signing operation in case of failure. **Default** ```ts 3 ``` ##### signal? `AbortSignal` = `...` Abort signal for requests ### Returns `Promise`\<`boolean`> A promise that resolves to `true` if the address is marked as muted, `false` otherwise [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / reportComment ## Function: reportComment() ```ts function reportComment(options): Promise; ``` Defined in: packages/sdk/src/indexer/api.ts:1029 Report a comment to the Indexer API ### Parameters #### options [`ReportCommentOptions`](/sdk-reference/indexer/type-aliases/ReportCommentOptions.mdx) ### Returns `Promise`\<`void`> A promise that resolves when the comment is reported successfully [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / FetchAuthorDataOptions ## Type Alias: FetchAuthorDataOptions ```ts type FetchAuthorDataOptions = { address: Hex; apiUrl?: string; retries?: number; signal?: AbortSignal; }; ``` Defined in: packages/sdk/src/indexer/api.ts:596 The options for `fetchAuthorData()` ### Properties #### address ```ts address: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:600 Author's address *** #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:612 URL on which /api/authors/$address endpoint will be called ##### Default ```ts "https://api.ethcomments.xyz" ``` *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/indexer/api.ts:606 Number of times to retry the signing operation in case of failure. ##### Default ```ts 3 ``` *** #### signal? ```ts optional signal: AbortSignal; ``` Defined in: packages/sdk/src/indexer/api.ts:613 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / FetchAutocompleteOptions ## Type Alias: FetchAutocompleteOptions ```ts type FetchAutocompleteOptions = { apiUrl?: string; char: "@" | "$"; query: string; retries?: number; signal?: AbortSignal; }; ``` Defined in: packages/sdk/src/indexer/api.ts:902 The options for `fetchAutocomplete()` ### Properties #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:917 URL on which /api/autocomplete endpoint will be called ##### Default ```ts "https://api.ethcomments.xyz" ``` *** #### char ```ts char: "@" | "$"; ``` Defined in: packages/sdk/src/indexer/api.ts:911 The prefix character. $ is more specific and looks only for ERC20 tokens (by address or symbol), @ is more general and looks for ENS/Farcaster name and ERC20 tokens. *** #### query ```ts query: string; ``` Defined in: packages/sdk/src/indexer/api.ts:906 The query to autocomplete *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/indexer/api.ts:923 Number of times to retry the signing operation in case of failure. ##### Default ```ts 3 ``` *** #### signal? ```ts optional signal: AbortSignal; ``` Defined in: packages/sdk/src/indexer/api.ts:924 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / FetchChannelOptions ## Type Alias: FetchChannelOptions ```ts type FetchChannelOptions = { apiUrl?: string; channelId: bigint; retries?: number; signal?: AbortSignal; }; ``` Defined in: packages/sdk/src/indexer/api.ts:836 The options for `fetchChannel()` ### Properties #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:846 URL on which /api/channels/$channelId endpoint will be called ##### Default ```ts "https://api.ethcomments.xyz" ``` *** #### channelId ```ts channelId: bigint; ``` Defined in: packages/sdk/src/indexer/api.ts:840 The ID of the channel to fetch *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/indexer/api.ts:852 Number of times to retry the signing operation in case of failure. ##### Default ```ts 3 ``` *** #### signal? ```ts optional signal: AbortSignal; ``` Defined in: packages/sdk/src/indexer/api.ts:853 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / FetchChannelsOptions ## Type Alias: FetchChannelsOptions ```ts type FetchChannelsOptions = { apiUrl?: string; chainId: number | number[]; cursor?: Hex; limit?: number; owner?: Hex; retries?: number; signal?: AbortSignal; sort?: IndexerAPISortSchemaType; }; ``` Defined in: packages/sdk/src/indexer/api.ts:729 The options for `fetchChannels()` ### Properties #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:735 URL on which /api/channels endpoint will be called ##### Default ```ts "https://api.ethcomments.xyz" ``` *** #### chainId ```ts chainId: number | number[]; ``` Defined in: packages/sdk/src/indexer/api.ts:743 Filter channels by chain ID(s) *** #### cursor? ```ts optional cursor: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:753 The cursor to fetch channels from *** #### limit? ```ts optional limit: number; ``` Defined in: packages/sdk/src/indexer/api.ts:765 The number of channels to fetch ##### Default ```ts 50 ``` *** #### owner? ```ts optional owner: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:739 Filter channels by owner *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/indexer/api.ts:749 Number of times to retry the signing operation in case of failure. ##### Default ```ts 3 ``` *** #### signal? ```ts optional signal: AbortSignal; ``` Defined in: packages/sdk/src/indexer/api.ts:766 *** #### sort? ```ts optional sort: IndexerAPISortSchemaType; ``` Defined in: packages/sdk/src/indexer/api.ts:759 The sort order, either `asc` or `desc` ##### Default ```ts "desc" ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / FetchCommentOptions ## Type Alias: FetchCommentOptions ```ts type FetchCommentOptions = { apiUrl?: string; chainId: number | number[]; commentId: `0x${string}`; commentType?: number; mode?: "flat" | "nested"; retries?: number; signal?: AbortSignal; viewer?: `0x${string}`; }; ``` Defined in: packages/sdk/src/indexer/api.ts:72 ### Type declaration #### apiUrl? ```ts optional apiUrl: string; ``` URL on which /api/comments endpoint will be called ##### Default ```ts "https://api.ethcomments.xyz" ``` #### chainId ```ts chainId: number | number[]; ``` Filter comments by chain ID(s) #### commentId ```ts commentId: `0x${string}` = HexSchema; ``` The ID of the comment to fetch #### commentType? ```ts optional commentType: number; ``` Filter comments by comment type #### mode? ```ts optional mode: "flat" | "nested"; ``` The mode to fetch comments in by default it returns only the first level of comments. If flat is used it will return all comments sorted by timestamp in descending order. ##### Default ```ts "nested" ``` #### retries? ```ts optional retries: number; ``` Number of times to retry the signing operation in case of failure. ##### Default ```ts 3 ``` #### signal? ```ts optional signal: AbortSignal; ``` The signal to abort the request #### viewer? ```ts optional viewer: `0x${string}`; ``` The viewer's address. This is useful when the content moderation is enabled on the indexer. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / FetchCommentRepliesOptions ## Type Alias: FetchCommentRepliesOptions ```ts type FetchCommentRepliesOptions = { apiUrl?: string; app?: Hex; chainId: number | number[]; channelId?: bigint; commentId: Hex; commentType?: number; cursor?: Hex; excludeByModerationLabels?: IndexerAPIModerationClassificationLabelSchemaType[]; limit?: number; mode?: IndexerAPICommentListModeSchemaType; moderationScore?: number; moderationStatus?: | IndexerAPICommentModerationStatusSchemaType | IndexerAPICommentModerationStatusSchemaType[]; retries?: number; signal?: AbortSignal; sort?: IndexerAPISortSchemaType; viewer?: Hex; }; ``` Defined in: packages/sdk/src/indexer/api.ts:377 The options for `fetchCommentReplies()` ### Properties #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:395 URL on which /api/comments/$commentId/replies endpoint will be called ##### Default ```ts "https://api.ethcomments.xyz" ``` *** #### app? ```ts optional app: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:399 Filters to only comments sent using this app signer key. *** #### chainId ```ts chainId: number | number[]; ``` Defined in: packages/sdk/src/indexer/api.ts:385 Filter replies by chain ID(s) *** #### channelId? ```ts optional channelId: bigint; ``` Defined in: packages/sdk/src/indexer/api.ts:455 Filter replies by channel ID *** #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:381 The ID of the comment to fetch replies for *** #### commentType? ```ts optional commentType: number; ``` Defined in: packages/sdk/src/indexer/api.ts:424 Filter replies by comment type *** #### cursor? ```ts optional cursor: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:409 The cursor to fetch comments from *** #### excludeByModerationLabels? ```ts optional excludeByModerationLabels: IndexerAPIModerationClassificationLabelSchemaType[]; ``` Defined in: packages/sdk/src/indexer/api.ts:451 Filter replies by moderation labels. Only comments with moderation labels not included in the provided array are returned. This can be used to bypass premoderation, make sure to pass all moderation statuses to moderationStatus parameter if the premoderation is enabled. *** #### limit? ```ts optional limit: number; ``` Defined in: packages/sdk/src/indexer/api.ts:459 ##### Default ```ts 50 ``` *** #### mode? ```ts optional mode: IndexerAPICommentListModeSchemaType; ``` Defined in: packages/sdk/src/indexer/api.ts:420 The mode to fetch replies in by default it returns only the first level of replies. If flat is used it will return all replies sorted by timestamp in descending order. ##### Default ```ts "nested" ``` *** #### moderationScore? ```ts optional moderationScore: number; ``` Defined in: packages/sdk/src/indexer/api.ts:443 Filter replies by moderation score. Only comments with moderation score lower or equal to the provided value are returned. This can be used to bypass premoderation, make sure to pass all moderation statuses to moderationStatus parameter if the premoderation is enabled. *** #### moderationStatus? ```ts optional moderationStatus: | IndexerAPICommentModerationStatusSchemaType | IndexerAPICommentModerationStatusSchemaType[]; ``` Defined in: packages/sdk/src/indexer/api.ts:433 Filter replies by moderation status. By default API returns only approved comments if moderation is enabled for all comments except when the viewer is provided, for viewer it returns all comments regardless of status. If moderation is disabled, this parameter is ignored. *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/indexer/api.ts:405 Number of times to retry the signing operation in case of failure. ##### Default ```ts 3 ``` *** #### signal? ```ts optional signal: AbortSignal; ``` Defined in: packages/sdk/src/indexer/api.ts:460 *** #### sort? ```ts optional sort: IndexerAPISortSchemaType; ``` Defined in: packages/sdk/src/indexer/api.ts:413 ##### Default ```ts "desc" ``` *** #### viewer? ```ts optional viewer: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:389 The viewer's address. This is useful when the content moderation is enabled on the indexer. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / FetchCommentsOptions ## Type Alias: FetchCommentsOptions ```ts type FetchCommentsOptions = { apiUrl?: string; app?: Hex; author?: Hex; chainId: number | number[]; channelId?: bigint; commentType?: number; cursor?: Hex; excludeByModerationLabels?: IndexerAPIModerationClassificationLabelSchemaType[]; limit?: number; mode?: IndexerAPICommentListModeSchemaType; moderationScore?: number; moderationStatus?: | IndexerAPICommentModerationStatusSchemaType | IndexerAPICommentModerationStatusSchemaType[]; retries?: number; signal?: AbortSignal; sort?: IndexerAPISortSchemaType; targetUri?: string; viewer?: Hex; }; ``` Defined in: packages/sdk/src/indexer/api.ts:140 The options for `fetchComments()` ### Properties #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:162 URL on which /api/comments endpoint will be called ##### Default ```ts "https://api.ethcomments.xyz" ``` *** #### app? ```ts optional app: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:166 Filter comments sent using this app signer key. *** #### author? ```ts optional author: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:148 Filter comments by author *** #### chainId ```ts chainId: number | number[]; ``` Defined in: packages/sdk/src/indexer/api.ts:152 Filter comments by chain ID(s) *** #### channelId? ```ts optional channelId: bigint; ``` Defined in: packages/sdk/src/indexer/api.ts:170 Filter comments by channel ID *** #### commentType? ```ts optional commentType: number; ``` Defined in: packages/sdk/src/indexer/api.ts:174 Filter comments by comment type *** #### cursor? ```ts optional cursor: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:195 The cursor to fetch comments from *** #### excludeByModerationLabels? ```ts optional excludeByModerationLabels: IndexerAPIModerationClassificationLabelSchemaType[]; ``` Defined in: packages/sdk/src/indexer/api.ts:224 Filter comments by moderation labels. Only comments with moderation labels not included in the provided array are returned. This can be used to bypass premoderation, make sure to pass all moderation statuses to moderationStatus parameter if the premoderation is enabled. *** #### limit? ```ts optional limit: number; ``` Defined in: packages/sdk/src/indexer/api.ts:230 The number of comments to fetch ##### Default ```ts 50 ``` *** #### mode? ```ts optional mode: IndexerAPICommentListModeSchemaType; ``` Defined in: packages/sdk/src/indexer/api.ts:208 The mode to fetch comments in by default it returns only the first level of comments. If flat is used it will return all comments sorted by timestamp in descending order. ##### Default ```ts "nested" ``` *** #### moderationScore? ```ts optional moderationScore: number; ``` Defined in: packages/sdk/src/indexer/api.ts:216 Filter comments by moderation score. Only comments with moderation score lower or equal to the provided value are returned. This can be used to bypass premoderation, make sure to pass all moderation statuses to moderationStatus parameter if the premoderation is enabled. *** #### moderationStatus? ```ts optional moderationStatus: | IndexerAPICommentModerationStatusSchemaType | IndexerAPICommentModerationStatusSchemaType[]; ``` Defined in: packages/sdk/src/indexer/api.ts:183 Filter comments by moderation status. By default API returns only approved comments if moderation is enabled for all comments except when the viewer is provided, for viewer it returns all comments regardless of status. If moderation is disabled, this parameter is ignored. *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/indexer/api.ts:191 Number of times to retry the signing operation in case of failure. ##### Default ```ts 3 ``` *** #### signal? ```ts optional signal: AbortSignal; ``` Defined in: packages/sdk/src/indexer/api.ts:231 *** #### sort? ```ts optional sort: IndexerAPISortSchemaType; ``` Defined in: packages/sdk/src/indexer/api.ts:201 The sort order, either `asc` or `desc` ##### Default ```ts "desc" ``` *** #### targetUri? ```ts optional targetUri: string; ``` Defined in: packages/sdk/src/indexer/api.ts:144 The target URI to fetch comments for *** #### viewer? ```ts optional viewer: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:156 The viewer's address. This is useful when the content moderation is enabled on the indexer. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIAuthorDataSchemaType ## Type Alias: IndexerAPIAuthorDataSchemaType ```ts type IndexerAPIAuthorDataSchemaType = { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:131 ### Type declaration #### address ```ts address: `0x${string}` = HexSchema; ``` #### ens? ```ts optional ens: { avatarUrl: null | string; name: string; }; ``` ##### ens.avatarUrl ```ts avatarUrl: null | string; ``` ##### ens.name ```ts name: string; ``` #### farcaster? ```ts optional farcaster: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` ##### farcaster.displayName? ```ts optional displayName: string; ``` ##### farcaster.fid ```ts fid: number; ``` ##### farcaster.pfpUrl? ```ts optional pfpUrl: string; ``` ##### farcaster.username ```ts username: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIAuthorEnsDataSchemaType ## Type Alias: IndexerAPIAuthorEnsDataSchemaType ```ts type IndexerAPIAuthorEnsDataSchemaType = { avatarUrl: null | string; name: string; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:110 ### Type declaration #### avatarUrl ```ts avatarUrl: null | string; ``` #### name ```ts name: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIAutocompleteENSSchemaType ## Type Alias: IndexerAPIAutocompleteENSSchemaType ```ts type IndexerAPIAutocompleteENSSchemaType = { address: `0x${string}`; avatarUrl: null | string; name: string; type: "ens"; url: string; value: `0x${string}`; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:550 ### Type declaration #### address ```ts address: `0x${string}` = HexSchema; ``` #### avatarUrl ```ts avatarUrl: null | string; ``` #### name ```ts name: string; ``` #### type ```ts type: "ens"; ``` #### url ```ts url: string; ``` #### value ```ts value: `0x${string}`; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIAutocompleteERC20SchemaType ## Type Alias: IndexerAPIAutocompleteERC20SchemaType ```ts type IndexerAPIAutocompleteERC20SchemaType = { address: `0x${string}`; caip19: string; chainId: number; decimals: number; logoURI: null | string; name: string; symbol: string; type: "erc20"; value: string; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:570 ### Type declaration #### address ```ts address: `0x${string}` = HexSchema; ``` #### caip19 ```ts caip19: string; ``` #### chainId ```ts chainId: number; ``` #### decimals ```ts decimals: number; ``` #### logoURI ```ts logoURI: null | string; ``` #### name ```ts name: string; ``` #### symbol ```ts symbol: string; ``` #### type ```ts type: "erc20"; ``` #### value ```ts value: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIAutocompleteFarcasterSchemaType ## Type Alias: IndexerAPIAutocompleteFarcasterSchemaType ```ts type IndexerAPIAutocompleteFarcasterSchemaType = { address: `0x${string}`; displayName?: null | string; fid: number; fname: string; pfpUrl?: null | string; type: "farcaster"; url: string; username: string; value: `0x${string}`; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:588 ### Type declaration #### address ```ts address: `0x${string}` = HexSchema; ``` #### displayName? ```ts optional displayName: null | string; ``` #### fid ```ts fid: number; ``` #### fname ```ts fname: string; ``` #### pfpUrl? ```ts optional pfpUrl: null | string; ``` #### type ```ts type: "farcaster"; ``` #### url ```ts url: string; ``` #### username ```ts username: string; ``` #### value ```ts value: `0x${string}`; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIAutocompleteSchemaType ## Type Alias: IndexerAPIAutocompleteSchemaType ```ts type IndexerAPIAutocompleteSchemaType = | { address: `0x${string}`; avatarUrl: null | string; name: string; type: "ens"; url: string; value: `0x${string}`; } | { address: `0x${string}`; caip19: string; chainId: number; decimals: number; logoURI: null | string; name: string; symbol: string; type: "erc20"; value: string; } | { address: `0x${string}`; displayName?: null | string; fid: number; fname: string; pfpUrl?: null | string; type: "farcaster"; url: string; username: string; value: `0x${string}`; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:598 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIChannelOutputSchemaType ## Type Alias: IndexerAPIChannelOutputSchemaType ```ts type IndexerAPIChannelOutputSchemaType = { chainId: number; createdAt: string; description: string; hook: null | `0x${string}`; id: string; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; owner: `0x${string}`; updatedAt: string; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:82 ### Type declaration #### chainId ```ts chainId: number; ``` #### createdAt ```ts createdAt: string = dateToString; ``` #### description ```ts description: string; ``` #### hook ```ts hook: null | `0x${string}`; ``` #### id ```ts id: string = bigintToString; ``` #### metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` #### name ```ts name: string; ``` #### owner ```ts owner: `0x${string}` = HexSchema; ``` #### updatedAt ```ts updatedAt: string = dateToString; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIChannelSchemaType ## Type Alias: IndexerAPIChannelSchemaType ```ts type IndexerAPIChannelSchemaType = { chainId: number; createdAt: Date; description: string; hook: null | `0x${string}`; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; owner: `0x${string}`; updatedAt: Date; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:72 ### Type declaration #### chainId ```ts chainId: number; ``` #### createdAt ```ts createdAt: Date; ``` #### description ```ts description: string; ``` #### hook ```ts hook: null | `0x${string}`; ``` #### id ```ts id: bigint; ``` #### metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` #### name ```ts name: string; ``` #### owner ```ts owner: `0x${string}` = HexSchema; ``` #### updatedAt ```ts updatedAt: Date; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentListModeSchemaType ## Type Alias: IndexerAPICommentListModeSchemaType ```ts type IndexerAPICommentListModeSchemaType = "flat" | "nested"; ``` Defined in: packages/sdk/src/indexer/schemas.ts:147 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentModerationStatusSchemaType ## Type Alias: IndexerAPICommentModerationStatusSchemaType ```ts type IndexerAPICommentModerationStatusSchemaType = "approved" | "pending" | "rejected"; ``` Defined in: packages/sdk/src/indexer/schemas.ts:141 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentOutputSchemaType ## Type Alias: IndexerAPICommentOutputSchemaType ```ts type IndexerAPICommentOutputSchemaType = { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:363 ### Type declaration #### app ```ts app: `0x${string}` = HexSchema; ``` #### author ```ts author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; } = IndexerAPIAuthorDataSchema; ``` ##### author.address ```ts address: `0x${string}` = HexSchema; ``` ##### author.ens? ```ts optional ens: { avatarUrl: null | string; name: string; }; ``` ##### author.ens.avatarUrl ```ts avatarUrl: null | string; ``` ##### author.ens.name ```ts name: string; ``` ##### author.farcaster? ```ts optional farcaster: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` ##### author.farcaster.displayName? ```ts optional displayName: string; ``` ##### author.farcaster.fid ```ts fid: number; ``` ##### author.farcaster.pfpUrl? ```ts optional pfpUrl: string; ``` ##### author.farcaster.username ```ts username: string; ``` #### chainId ```ts chainId: number; ``` #### channelId ```ts channelId: string = bigintToString; ``` #### commentType ```ts commentType: number; ``` #### content ```ts content: string; ``` #### createdAt ```ts createdAt: string = dateToString; ``` #### cursor ```ts cursor: `0x${string}` = HexSchema; ``` #### deletedAt ```ts deletedAt: null | string; ``` #### hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` #### id ```ts id: `0x${string}` = HexSchema; ``` #### logIndex ```ts logIndex: null | number; ``` #### metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` #### moderationClassifierResult ```ts moderationClassifierResult: Record; ``` #### moderationClassifierScore ```ts moderationClassifierScore: number; ``` #### moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = IndexerAPICommentModerationStatusSchema; ``` #### moderationStatusChangedAt ```ts moderationStatusChangedAt: string = dateToString; ``` #### parentId ```ts parentId: null | `0x${string}`; ``` #### references ```ts references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[] = IndexerAPICommentReferencesSchema; ``` #### revision ```ts revision: number; ``` #### targetUri ```ts targetUri: string; ``` #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` #### updatedAt ```ts updatedAt: string = dateToString; ``` #### zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReactionSchemaType ## Type Alias: IndexerAPICommentReactionSchemaType ```ts type IndexerAPICommentReactionSchemaType = { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:372 ### Type declaration #### app ```ts app: `0x${string}` = HexSchema; ``` #### author ```ts author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; } = IndexerAPIAuthorDataSchema; ``` ##### author.address ```ts address: `0x${string}` = HexSchema; ``` ##### author.ens? ```ts optional ens: { avatarUrl: null | string; name: string; }; ``` ##### author.ens.avatarUrl ```ts avatarUrl: null | string; ``` ##### author.ens.name ```ts name: string; ``` ##### author.farcaster? ```ts optional farcaster: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` ##### author.farcaster.displayName? ```ts optional displayName: string; ``` ##### author.farcaster.fid ```ts fid: number; ``` ##### author.farcaster.pfpUrl? ```ts optional pfpUrl: string; ``` ##### author.farcaster.username ```ts username: string; ``` #### chainId ```ts chainId: number; ``` #### channelId ```ts channelId: bigint; ``` #### commentType ```ts commentType: number; ``` #### content ```ts content: string; ``` #### createdAt ```ts createdAt: Date; ``` #### cursor ```ts cursor: `0x${string}` = HexSchema; ``` #### deletedAt ```ts deletedAt: null | Date; ``` #### hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` #### id ```ts id: `0x${string}` = HexSchema; ``` #### logIndex ```ts logIndex: null | number; ``` #### metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` #### moderationClassifierResult ```ts moderationClassifierResult: Record; ``` #### moderationClassifierScore ```ts moderationClassifierScore: number; ``` #### moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = IndexerAPICommentModerationStatusSchema; ``` #### moderationStatusChangedAt ```ts moderationStatusChangedAt: Date; ``` #### parentId ```ts parentId: null | `0x${string}`; ``` #### reactionCounts ```ts reactionCounts: Record; ``` #### references ```ts references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[] = IndexerAPICommentReferencesSchema; ``` #### revision ```ts revision: number; ``` #### targetUri ```ts targetUri: string; ``` #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` #### updatedAt ```ts updatedAt: Date; ``` #### viewerReactions ```ts viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]>; ``` #### zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceENSSchemaType ## Type Alias: IndexerAPICommentReferenceENSSchemaType ```ts type IndexerAPICommentReferenceENSSchemaType = { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:200 ### Type declaration #### address ```ts address: `0x${string}` = HexSchema; ``` #### avatarUrl ```ts avatarUrl: null | string; ``` #### name ```ts name: string; ``` #### position ```ts position: { end: number; start: number; } = IndexerAPICommentReferencePositionSchema; ``` ##### position.end ```ts end: number; ``` ##### position.start ```ts start: number; ``` #### type ```ts type: "ens"; ``` #### url ```ts url: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceERC20SchemaType ## Type Alias: IndexerAPICommentReferenceERC20SchemaType ```ts type IndexerAPICommentReferenceERC20SchemaType = { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:241 ### Type declaration #### address ```ts address: `0x${string}` = HexSchema; ``` #### chainId ```ts chainId: null | number; ``` #### chains ```ts chains: { caip: string; chainId: number; }[]; ``` #### decimals ```ts decimals: number; ``` #### logoURI ```ts logoURI: null | string; ``` #### name ```ts name: string; ``` #### position ```ts position: { end: number; start: number; } = IndexerAPICommentReferencePositionSchema; ``` ##### position.end ```ts end: number; ``` ##### position.start ```ts start: number; ``` #### symbol ```ts symbol: string; ``` #### type ```ts type: "erc20"; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceFarcasterSchemaType ## Type Alias: IndexerAPICommentReferenceFarcasterSchemaType ```ts type IndexerAPICommentReferenceFarcasterSchemaType = { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:216 ### Type declaration #### address ```ts address: `0x${string}` = HexSchema; ``` #### displayName ```ts displayName: null | string; ``` #### fid ```ts fid: number; ``` #### fname ```ts fname: string; ``` #### pfpUrl ```ts pfpUrl: null | string; ``` #### position ```ts position: { end: number; start: number; } = IndexerAPICommentReferencePositionSchema; ``` ##### position.end ```ts end: number; ``` ##### position.start ```ts start: number; ``` #### type ```ts type: "farcaster"; ``` #### url ```ts url: string; ``` #### username ```ts username: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceSchemaType ## Type Alias: IndexerAPICommentReferenceSchemaType ```ts type IndexerAPICommentReferenceSchemaType = | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:309 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceURLFileSchemaType ## Type Alias: IndexerAPICommentReferenceURLFileSchemaType ```ts type IndexerAPICommentReferenceURLFileSchemaType = { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:273 ### Type declaration #### mediaType ```ts mediaType: string; ``` #### position ```ts position: { end: number; start: number; } = IndexerAPICommentReferencePositionSchema; ``` ##### position.end ```ts end: number; ``` ##### position.start ```ts start: number; ``` #### type ```ts type: "file"; ``` #### url ```ts url: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceURLImageSchemaType ## Type Alias: IndexerAPICommentReferenceURLImageSchemaType ```ts type IndexerAPICommentReferenceURLImageSchemaType = { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:284 ### Type declaration #### mediaType ```ts mediaType: string; ``` #### position ```ts position: { end: number; start: number; } = IndexerAPICommentReferencePositionSchema; ``` ##### position.end ```ts end: number; ``` ##### position.start ```ts start: number; ``` #### type ```ts type: "image"; ``` #### url ```ts url: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceURLVideoSchemaType ## Type Alias: IndexerAPICommentReferenceURLVideoSchemaType ```ts type IndexerAPICommentReferenceURLVideoSchemaType = { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:295 ### Type declaration #### mediaType ```ts mediaType: string; ``` #### position ```ts position: { end: number; start: number; } = IndexerAPICommentReferencePositionSchema; ``` ##### position.end ```ts end: number; ``` ##### position.start ```ts start: number; ``` #### type ```ts type: "video"; ``` #### url ```ts url: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceURLWebPageSchemaType ## Type Alias: IndexerAPICommentReferenceURLWebPageSchemaType ```ts type IndexerAPICommentReferenceURLWebPageSchemaType = { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:262 ### Type declaration #### description ```ts description: null | string; ``` #### favicon ```ts favicon: null | string; ``` #### opengraph ```ts opengraph: | null | { description: null | string; image: string; title: string; url: string; }; ``` #### position ```ts position: { end: number; start: number; } = IndexerAPICommentReferencePositionSchema; ``` ##### position.end ```ts end: number; ``` ##### position.start ```ts start: number; ``` #### title ```ts title: string; ``` #### type ```ts type: "webpage"; ``` #### url ```ts url: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferencesSchemaType ## Type Alias: IndexerAPICommentReferencesSchemaType ```ts type IndexerAPICommentReferencesSchemaType = ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; ``` Defined in: packages/sdk/src/indexer/schemas.ts:317 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentSchemaType ## Type Alias: IndexerAPICommentSchemaType ```ts type IndexerAPICommentSchemaType = { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:351 ### Type declaration #### app ```ts app: `0x${string}` = HexSchema; ``` #### author ```ts author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; } = IndexerAPIAuthorDataSchema; ``` ##### author.address ```ts address: `0x${string}` = HexSchema; ``` ##### author.ens? ```ts optional ens: { avatarUrl: null | string; name: string; }; ``` ##### author.ens.avatarUrl ```ts avatarUrl: null | string; ``` ##### author.ens.name ```ts name: string; ``` ##### author.farcaster? ```ts optional farcaster: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` ##### author.farcaster.displayName? ```ts optional displayName: string; ``` ##### author.farcaster.fid ```ts fid: number; ``` ##### author.farcaster.pfpUrl? ```ts optional pfpUrl: string; ``` ##### author.farcaster.username ```ts username: string; ``` #### chainId ```ts chainId: number; ``` #### channelId ```ts channelId: bigint; ``` #### commentType ```ts commentType: number; ``` #### content ```ts content: string; ``` #### createdAt ```ts createdAt: Date; ``` #### cursor ```ts cursor: `0x${string}` = HexSchema; ``` #### deletedAt ```ts deletedAt: null | Date; ``` #### hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` #### id ```ts id: `0x${string}` = HexSchema; ``` #### logIndex ```ts logIndex: null | number; ``` #### metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` #### moderationClassifierResult ```ts moderationClassifierResult: Record; ``` #### moderationClassifierScore ```ts moderationClassifierScore: number; ``` #### moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = IndexerAPICommentModerationStatusSchema; ``` #### moderationStatusChangedAt ```ts moderationStatusChangedAt: Date; ``` #### parentId ```ts parentId: null | `0x${string}`; ``` #### references ```ts references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[] = IndexerAPICommentReferencesSchema; ``` #### revision ```ts revision: number; ``` #### targetUri ```ts targetUri: string; ``` #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` #### updatedAt ```ts updatedAt: Date; ``` #### zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentWithRepliesOutputSchemaType ## Type Alias: IndexerAPICommentWithRepliesOutputSchemaType ```ts type IndexerAPICommentWithRepliesOutputSchemaType = { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; references: ( | { address: `0x${(...)}`; avatarUrl: ... | ...; name: string; position: { end: ...; start: ...; }; type: "ens"; url: string; } | { address: `0x${(...)}`; displayName: ... | ...; fid: number; fname: string; pfpUrl: ... | ...; position: { end: ...; start: ...; }; type: "farcaster"; url: string; username: string; } | { address: `0x${(...)}`; chainId: ... | ...; chains: ...[]; decimals: number; logoURI: ... | ...; name: string; position: { end: ...; start: ...; }; symbol: string; type: "erc20"; } | { description: ... | ...; favicon: ... | ...; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:421 ### Type declaration #### app ```ts app: `0x${string}` = HexSchema; ``` #### author ```ts author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; } = IndexerAPIAuthorDataSchema; ``` ##### author.address ```ts address: `0x${string}` = HexSchema; ``` ##### author.ens? ```ts optional ens: { avatarUrl: null | string; name: string; }; ``` ##### author.ens.avatarUrl ```ts avatarUrl: null | string; ``` ##### author.ens.name ```ts name: string; ``` ##### author.farcaster? ```ts optional farcaster: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` ##### author.farcaster.displayName? ```ts optional displayName: string; ``` ##### author.farcaster.fid ```ts fid: number; ``` ##### author.farcaster.pfpUrl? ```ts optional pfpUrl: string; ``` ##### author.farcaster.username ```ts username: string; ``` #### chainId ```ts chainId: number; ``` #### channelId ```ts channelId: string = bigintToString; ``` #### commentType ```ts commentType: number; ``` #### content ```ts content: string; ``` #### createdAt ```ts createdAt: string = dateToString; ``` #### cursor ```ts cursor: `0x${string}` = HexSchema; ``` #### deletedAt ```ts deletedAt: null | string; ``` #### hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` #### id ```ts id: `0x${string}` = HexSchema; ``` #### logIndex ```ts logIndex: null | number; ``` #### metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` #### moderationClassifierResult ```ts moderationClassifierResult: Record; ``` #### moderationClassifierScore ```ts moderationClassifierScore: number; ``` #### moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = IndexerAPICommentModerationStatusSchema; ``` #### moderationStatusChangedAt ```ts moderationStatusChangedAt: string = dateToString; ``` #### parentId ```ts parentId: null | `0x${string}`; ``` #### reactionCounts ```ts reactionCounts: Record; ``` #### references ```ts references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[] = IndexerAPICommentReferencesSchema; ``` #### replies ```ts replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; references: ( | { address: `0x${(...)}`; avatarUrl: ... | ...; name: string; position: { end: ...; start: ...; }; type: "ens"; url: string; } | { address: `0x${(...)}`; displayName: ... | ...; fid: number; fname: string; pfpUrl: ... | ...; position: { end: ...; start: ...; }; type: "farcaster"; url: string; username: string; } | { address: `0x${(...)}`; chainId: ... | ...; chains: ...[]; decimals: number; logoURI: ... | ...; name: string; position: { end: ...; start: ...; }; symbol: string; type: "erc20"; } | { description: ... | ...; favicon: ... | ...; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; }; ``` ##### replies.extra ```ts extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; } = IndexerAPIExtraSchema; ``` ##### replies.extra.moderationEnabled ```ts moderationEnabled: boolean; ``` ##### replies.extra.moderationKnownReactions ```ts moderationKnownReactions: string[]; ``` ##### replies.pagination ```ts pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorPaginationSchema; ``` ##### replies.pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### replies.pagination.hasNext ```ts hasNext: boolean; ``` ##### replies.pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### replies.pagination.limit ```ts limit: number; ``` ##### replies.pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` ##### replies.results ```ts results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; references: ( | { address: `0x${(...)}`; avatarUrl: ... | ...; name: string; position: { end: ...; start: ...; }; type: "ens"; url: string; } | { address: `0x${(...)}`; displayName: ... | ...; fid: number; fname: string; pfpUrl: ... | ...; position: { end: ...; start: ...; }; type: "farcaster"; url: string; username: string; } | { address: `0x${(...)}`; chainId: ... | ...; chains: ...[]; decimals: number; logoURI: ... | ...; name: string; position: { end: ...; start: ...; }; symbol: string; type: "erc20"; } | { description: ... | ...; favicon: ... | ...; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; ``` #### revision ```ts revision: number; ``` #### targetUri ```ts targetUri: string; ``` #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` #### updatedAt ```ts updatedAt: string = dateToString; ``` #### viewerReactions ```ts viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]>; ``` #### zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentWithRepliesSchemaType ## Type Alias: IndexerAPICommentWithRepliesSchemaType ```ts type IndexerAPICommentWithRepliesSchemaType = { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${(...)}`; avatarUrl: ... | ...; name: string; position: { end: ...; start: ...; }; type: "ens"; url: string; } | { address: `0x${(...)}`; displayName: ... | ...; fid: number; fname: string; pfpUrl: ... | ...; position: { end: ...; start: ...; }; type: "farcaster"; url: string; username: string; } | { address: `0x${(...)}`; chainId: ... | ...; chains: ...[]; decimals: number; logoURI: ... | ...; name: string; position: { end: ...; start: ...; }; symbol: string; type: "erc20"; } | { description: ... | ...; favicon: ... | ...; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:408 ### Type declaration #### app ```ts app: `0x${string}` = HexSchema; ``` #### author ```ts author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; } = IndexerAPIAuthorDataSchema; ``` ##### author.address ```ts address: `0x${string}` = HexSchema; ``` ##### author.ens? ```ts optional ens: { avatarUrl: null | string; name: string; }; ``` ##### author.ens.avatarUrl ```ts avatarUrl: null | string; ``` ##### author.ens.name ```ts name: string; ``` ##### author.farcaster? ```ts optional farcaster: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` ##### author.farcaster.displayName? ```ts optional displayName: string; ``` ##### author.farcaster.fid ```ts fid: number; ``` ##### author.farcaster.pfpUrl? ```ts optional pfpUrl: string; ``` ##### author.farcaster.username ```ts username: string; ``` #### chainId ```ts chainId: number; ``` #### channelId ```ts channelId: bigint; ``` #### commentType ```ts commentType: number; ``` #### content ```ts content: string; ``` #### createdAt ```ts createdAt: Date; ``` #### cursor ```ts cursor: `0x${string}` = HexSchema; ``` #### deletedAt ```ts deletedAt: null | Date; ``` #### hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` #### id ```ts id: `0x${string}` = HexSchema; ``` #### logIndex ```ts logIndex: null | number; ``` #### metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` #### moderationClassifierResult ```ts moderationClassifierResult: Record; ``` #### moderationClassifierScore ```ts moderationClassifierScore: number; ``` #### moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = IndexerAPICommentModerationStatusSchema; ``` #### moderationStatusChangedAt ```ts moderationStatusChangedAt: Date; ``` #### parentId ```ts parentId: null | `0x${string}`; ``` #### reactionCounts ```ts reactionCounts: Record; ``` #### references ```ts references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[] = IndexerAPICommentReferencesSchema; ``` #### replies ```ts replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${(...)}`; avatarUrl: ... | ...; name: string; position: { end: ...; start: ...; }; type: "ens"; url: string; } | { address: `0x${(...)}`; displayName: ... | ...; fid: number; fname: string; pfpUrl: ... | ...; position: { end: ...; start: ...; }; type: "farcaster"; url: string; username: string; } | { address: `0x${(...)}`; chainId: ... | ...; chains: ...[]; decimals: number; logoURI: ... | ...; name: string; position: { end: ...; start: ...; }; symbol: string; type: "erc20"; } | { description: ... | ...; favicon: ... | ...; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; }; ``` ##### replies.extra ```ts extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; } = IndexerAPIExtraSchema; ``` ##### replies.extra.moderationEnabled ```ts moderationEnabled: boolean; ``` ##### replies.extra.moderationKnownReactions ```ts moderationKnownReactions: string[]; ``` ##### replies.pagination ```ts pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorPaginationSchema; ``` ##### replies.pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### replies.pagination.hasNext ```ts hasNext: boolean; ``` ##### replies.pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### replies.pagination.limit ```ts limit: number; ``` ##### replies.pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` ##### replies.results ```ts results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${(...)}`; avatarUrl: ... | ...; name: string; position: { end: ...; start: ...; }; type: "ens"; url: string; } | { address: `0x${(...)}`; displayName: ... | ...; fid: number; fname: string; pfpUrl: ... | ...; position: { end: ...; start: ...; }; type: "farcaster"; url: string; username: string; } | { address: `0x${(...)}`; chainId: ... | ...; chains: ...[]; decimals: number; logoURI: ... | ...; name: string; position: { end: ...; start: ...; }; symbol: string; type: "erc20"; } | { description: ... | ...; favicon: ... | ...; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; ``` #### revision ```ts revision: number; ``` #### targetUri ```ts targetUri: string; ``` #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` #### updatedAt ```ts updatedAt: Date; ``` #### viewerReactions ```ts viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]>; ``` #### zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentZeroExSwapSchemaType ## Type Alias: IndexerAPICommentZeroExSwapSchemaType ```ts type IndexerAPICommentZeroExSwapSchemaType = { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:182 ### Type declaration #### from ```ts from: { address: `0x${string}`; amount: string; symbol: string; }; ``` ##### from.address ```ts address: `0x${string}` = HexSchema; ``` ##### from.amount ```ts amount: string = IndexerAPIZeroExTokenAmountSchema; ``` ##### from.symbol ```ts symbol: string; ``` #### to ```ts to: { address: "" | `0x${string}`; amount: string; symbol: string; }; ``` ##### to.address ```ts address: "" | `0x${string}` = IndexerAPIZeroExSwapPossibleEmptyAddressSchema; ``` ##### to.amount ```ts amount: string = IndexerAPIZeroExSwapPossiblyEmptyTokenAmountSchema; ``` ##### to.symbol ```ts symbol: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICursorPaginationSchemaType ## Type Alias: IndexerAPICursorPaginationSchemaType ```ts type IndexerAPICursorPaginationSchemaType = { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:41 ### Type declaration #### endCursor? ```ts optional endCursor: `0x${string}`; ``` #### hasNext ```ts hasNext: boolean; ``` #### hasPrevious ```ts hasPrevious: boolean; ``` #### limit ```ts limit: number; ``` #### startCursor? ```ts optional startCursor: `0x${string}`; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIExtraSchemaType ## Type Alias: IndexerAPIExtraSchemaType ```ts type IndexerAPIExtraSchemaType = { moderationEnabled: boolean; moderationKnownReactions: string[]; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:397 ### Type declaration #### moderationEnabled ```ts moderationEnabled: boolean; ``` #### moderationKnownReactions ```ts moderationKnownReactions: string[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIFarcasterDataSchemaType ## Type Alias: IndexerAPIFarcasterDataSchemaType ```ts type IndexerAPIFarcasterDataSchemaType = { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:121 ### Type declaration #### displayName? ```ts optional displayName: string; ``` #### fid ```ts fid: number; ``` #### pfpUrl? ```ts optional pfpUrl: string; ``` #### username ```ts username: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIGetAutocompleteOutputSchemaType ## Type Alias: IndexerAPIGetAutocompleteOutputSchemaType ```ts type IndexerAPIGetAutocompleteOutputSchemaType = { results: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; type: "ens"; url: string; value: `0x${string}`; } | { address: `0x${string}`; caip19: string; chainId: number; decimals: number; logoURI: null | string; name: string; symbol: string; type: "erc20"; value: string; } | { address: `0x${string}`; displayName?: null | string; fid: number; fname: string; pfpUrl?: null | string; type: "farcaster"; url: string; username: string; value: `0x${string}`; })[]; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:606 ### Type declaration #### results ```ts results: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; type: "ens"; url: string; value: `0x${string}`; } | { address: `0x${string}`; caip19: string; chainId: number; decimals: number; logoURI: null | string; name: string; symbol: string; type: "erc20"; value: string; } | { address: `0x${string}`; displayName?: null | string; fid: number; fname: string; pfpUrl?: null | string; type: "farcaster"; url: string; username: string; value: `0x${string}`; })[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIListChannelsOutputSchemaType ## Type Alias: IndexerAPIListChannelsOutputSchemaType ```ts type IndexerAPIListChannelsOutputSchemaType = { pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { chainId: number; createdAt: string; description: string; hook: null | `0x${string}`; id: string; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; owner: `0x${string}`; updatedAt: string; }[]; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:101 ### Type declaration #### pagination ```ts pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorPaginationSchema; ``` ##### pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### pagination.hasNext ```ts hasNext: boolean; ``` ##### pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### pagination.limit ```ts limit: number; ``` ##### pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` #### results ```ts results: { chainId: number; createdAt: string; description: string; hook: null | `0x${string}`; id: string; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; owner: `0x${string}`; updatedAt: string; }[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIListChannelsSchemaType ## Type Alias: IndexerAPIListChannelsSchemaType ```ts type IndexerAPIListChannelsSchemaType = { pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { chainId: number; createdAt: Date; description: string; hook: null | `0x${string}`; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; owner: `0x${string}`; updatedAt: Date; }[]; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:91 ### Type declaration #### pagination ```ts pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorPaginationSchema; ``` ##### pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### pagination.hasNext ```ts hasNext: boolean; ``` ##### pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### pagination.limit ```ts limit: number; ``` ##### pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` #### results ```ts results: { chainId: number; createdAt: Date; description: string; hook: null | `0x${string}`; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; owner: `0x${string}`; updatedAt: Date; }[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIListCommentRepliesOutputSchemaType ## Type Alias: IndexerAPIListCommentRepliesOutputSchemaType ```ts type IndexerAPIListCommentRepliesOutputSchemaType = { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: ...; chainId: ...; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ...; image: ...; title: ...; url: ...; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${(...)}`; references: (... | ... | ... | ... | ... | ... | ...)[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: ...; to: ...; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: ...; chainId: ...; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ...; image: ...; title: ...; url: ...; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:463 ### Type declaration #### extra ```ts extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; } = IndexerAPIExtraSchema; ``` ##### extra.moderationEnabled ```ts moderationEnabled: boolean; ``` ##### extra.moderationKnownReactions ```ts moderationKnownReactions: string[]; ``` #### pagination ```ts pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorPaginationSchema; ``` ##### pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### pagination.hasNext ```ts hasNext: boolean; ``` ##### pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### pagination.limit ```ts limit: number; ``` ##### pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` #### results ```ts results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: ...; chainId: ...; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ...; image: ...; title: ...; url: ...; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${(...)}`; references: (... | ... | ... | ... | ... | ... | ...)[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: ...; to: ...; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: ...; chainId: ...; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ...; image: ...; title: ...; url: ...; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIListCommentRepliesSchemaType ## Type Alias: IndexerAPIListCommentRepliesSchemaType ```ts type IndexerAPIListCommentRepliesSchemaType = { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: ...; chainId: ...; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ...; image: ...; title: ...; url: ...; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; references: (... | ... | ... | ... | ... | ... | ...)[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: ...; to: ...; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: ...; chainId: ...; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ...; image: ...; title: ...; url: ...; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:452 ### Type declaration #### extra ```ts extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; } = IndexerAPIExtraSchema; ``` ##### extra.moderationEnabled ```ts moderationEnabled: boolean; ``` ##### extra.moderationKnownReactions ```ts moderationKnownReactions: string[]; ``` #### pagination ```ts pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorPaginationSchema; ``` ##### pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### pagination.hasNext ```ts hasNext: boolean; ``` ##### pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### pagination.limit ```ts limit: number; ``` ##### pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` #### results ```ts results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: ...; chainId: ...; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ...; image: ...; title: ...; url: ...; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; references: (... | ... | ... | ... | ... | ... | ...)[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: ...; to: ...; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: ...; chainId: ...; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ...; image: ...; title: ...; url: ...; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIListCommentsOutputSchemaType ## Type Alias: IndexerAPIListCommentsOutputSchemaType ```ts type IndexerAPIListCommentsOutputSchemaType = { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: ...; chainId: ...; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ...; image: ...; title: ...; url: ...; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${(...)}`; references: (... | ... | ... | ... | ... | ... | ...)[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: ...; to: ...; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: ...; chainId: ...; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ...; image: ...; title: ...; url: ...; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:442 ### Type declaration #### extra ```ts extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; } = IndexerAPIExtraSchema; ``` ##### extra.moderationEnabled ```ts moderationEnabled: boolean; ``` ##### extra.moderationKnownReactions ```ts moderationKnownReactions: string[]; ``` #### pagination ```ts pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorPaginationSchema; ``` ##### pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### pagination.hasNext ```ts hasNext: boolean; ``` ##### pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### pagination.limit ```ts limit: number; ``` ##### pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` #### results ```ts results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: ...; chainId: ...; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ...; image: ...; title: ...; url: ...; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${(...)}`; references: (... | ... | ... | ... | ... | ... | ...)[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: ...; to: ...; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: ...; chainId: ...; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ...; image: ...; title: ...; url: ...; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIListCommentsSchemaType ## Type Alias: IndexerAPIListCommentsSchemaType ```ts type IndexerAPIListCommentsSchemaType = { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: ...; chainId: ...; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ...; image: ...; title: ...; url: ...; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; references: (... | ... | ... | ... | ... | ... | ...)[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: ...; to: ...; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: ...; chainId: ...; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ...; image: ...; title: ...; url: ...; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:431 ### Type declaration #### extra ```ts extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; } = IndexerAPIExtraSchema; ``` ##### extra.moderationEnabled ```ts moderationEnabled: boolean; ``` ##### extra.moderationKnownReactions ```ts moderationKnownReactions: string[]; ``` #### pagination ```ts pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorPaginationSchema; ``` ##### pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### pagination.hasNext ```ts hasNext: boolean; ``` ##### pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### pagination.limit ```ts limit: number; ``` ##### pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` #### results ```ts results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: ...; chainId: ...; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ...; image: ...; title: ...; url: ...; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; references: (... | ... | ... | ... | ... | ... | ...)[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: ...; to: ...; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: ...; chainId: ...; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ...; image: ...; title: ...; url: ...; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIMetadataEntrySchemaType ## Type Alias: IndexerAPIMetadataEntrySchemaType ```ts type IndexerAPIMetadataEntrySchemaType = { key: `0x${string}`; value: `0x${string}`; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:50 ### Type declaration #### key ```ts key: `0x${string}` = HexSchema; ``` #### value ```ts value: `0x${string}` = HexSchema; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIMetadataSchemaType ## Type Alias: IndexerAPIMetadataSchemaType ```ts type IndexerAPIMetadataSchemaType = { key: `0x${string}`; value: `0x${string}`; }[]; ``` Defined in: packages/sdk/src/indexer/schemas.ts:56 ### Type declaration #### key ```ts key: `0x${string}` = HexSchema; ``` #### value ```ts value: `0x${string}` = HexSchema; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIModerationChangeModerationStatusOnCommentOutputSchemaType ## Type Alias: IndexerAPIModerationChangeModerationStatusOnCommentOutputSchemaType ```ts type IndexerAPIModerationChangeModerationStatusOnCommentOutputSchemaType = { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:497 ### Type declaration #### app ```ts app: `0x${string}` = HexSchema; ``` #### author ```ts author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; } = IndexerAPIAuthorDataSchema; ``` ##### author.address ```ts address: `0x${string}` = HexSchema; ``` ##### author.ens? ```ts optional ens: { avatarUrl: null | string; name: string; }; ``` ##### author.ens.avatarUrl ```ts avatarUrl: null | string; ``` ##### author.ens.name ```ts name: string; ``` ##### author.farcaster? ```ts optional farcaster: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` ##### author.farcaster.displayName? ```ts optional displayName: string; ``` ##### author.farcaster.fid ```ts fid: number; ``` ##### author.farcaster.pfpUrl? ```ts optional pfpUrl: string; ``` ##### author.farcaster.username ```ts username: string; ``` #### chainId ```ts chainId: number; ``` #### channelId ```ts channelId: string = bigintToString; ``` #### commentType ```ts commentType: number; ``` #### content ```ts content: string; ``` #### createdAt ```ts createdAt: Date; ``` #### cursor ```ts cursor: `0x${string}` = HexSchema; ``` #### deletedAt ```ts deletedAt: null | Date; ``` #### hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` #### id ```ts id: `0x${string}` = HexSchema; ``` #### logIndex ```ts logIndex: null | number; ``` #### metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` #### moderationClassifierResult ```ts moderationClassifierResult: Record; ``` #### moderationClassifierScore ```ts moderationClassifierScore: number; ``` #### moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = IndexerAPICommentModerationStatusSchema; ``` #### moderationStatusChangedAt ```ts moderationStatusChangedAt: Date; ``` #### parentId ```ts parentId: null | `0x${string}`; ``` #### references ```ts references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[] = IndexerAPICommentReferencesSchema; ``` #### revision ```ts revision: number; ``` #### targetUri ```ts targetUri: string; ``` #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` #### updatedAt ```ts updatedAt: Date; ``` #### zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIModerationChangeModerationStatusOnCommentSchemaType ## Type Alias: IndexerAPIModerationChangeModerationStatusOnCommentSchemaType ```ts type IndexerAPIModerationChangeModerationStatusOnCommentSchemaType = { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:489 ### Type declaration #### app ```ts app: `0x${string}` = HexSchema; ``` #### author ```ts author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; } = IndexerAPIAuthorDataSchema; ``` ##### author.address ```ts address: `0x${string}` = HexSchema; ``` ##### author.ens? ```ts optional ens: { avatarUrl: null | string; name: string; }; ``` ##### author.ens.avatarUrl ```ts avatarUrl: null | string; ``` ##### author.ens.name ```ts name: string; ``` ##### author.farcaster? ```ts optional farcaster: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` ##### author.farcaster.displayName? ```ts optional displayName: string; ``` ##### author.farcaster.fid ```ts fid: number; ``` ##### author.farcaster.pfpUrl? ```ts optional pfpUrl: string; ``` ##### author.farcaster.username ```ts username: string; ``` #### chainId ```ts chainId: number; ``` #### channelId ```ts channelId: bigint; ``` #### commentType ```ts commentType: number; ``` #### content ```ts content: string; ``` #### createdAt ```ts createdAt: Date; ``` #### cursor ```ts cursor: `0x${string}` = HexSchema; ``` #### deletedAt ```ts deletedAt: null | Date; ``` #### hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` #### id ```ts id: `0x${string}` = HexSchema; ``` #### logIndex ```ts logIndex: null | number; ``` #### metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` #### moderationClassifierResult ```ts moderationClassifierResult: Record; ``` #### moderationClassifierScore ```ts moderationClassifierScore: number; ``` #### moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = IndexerAPICommentModerationStatusSchema; ``` #### moderationStatusChangedAt ```ts moderationStatusChangedAt: Date; ``` #### parentId ```ts parentId: null | `0x${string}`; ``` #### references ```ts references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[] = IndexerAPICommentReferencesSchema; ``` #### revision ```ts revision: number; ``` #### targetUri ```ts targetUri: string; ``` #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` #### updatedAt ```ts updatedAt: Date; ``` #### zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIModerationClassificationLabelSchemaType ## Type Alias: IndexerAPIModerationClassificationLabelSchemaType ```ts type IndexerAPIModerationClassificationLabelSchemaType = | "llm_generated" | "spam" | "sexual" | "hate" | "violence" | "harassment" | "self_harm" | "sexual_minors" | "hate_threatening" | "violence_graphic"; ``` Defined in: packages/sdk/src/indexer/schemas.ts:29 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIModerationGetPendingCommentsOutputSchemaType ## Type Alias: IndexerAPIModerationGetPendingCommentsOutputSchemaType ```ts type IndexerAPIModerationGetPendingCommentsOutputSchemaType = { pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:482 ### Type declaration #### pagination ```ts pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorPaginationSchema; ``` ##### pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### pagination.hasNext ```ts hasNext: boolean; ``` ##### pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### pagination.limit ```ts limit: number; ``` ##### pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` #### results ```ts results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIModerationGetPendingCommentsSchemaType ## Type Alias: IndexerAPIModerationGetPendingCommentsSchemaType ```ts type IndexerAPIModerationGetPendingCommentsSchemaType = { pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:472 ### Type declaration #### pagination ```ts pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorPaginationSchema; ``` ##### pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### pagination.hasNext ```ts hasNext: boolean; ``` ##### pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### pagination.limit ```ts limit: number; ``` ##### pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` #### results ```ts results: { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIPaginationSchemaType ## Type Alias: IndexerAPIPaginationSchemaType ```ts type IndexerAPIPaginationSchemaType = { hasMore: boolean; limit: number; offset: number; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:388 ### Type declaration #### hasMore ```ts hasMore: boolean; ``` #### limit ```ts limit: number; ``` #### offset ```ts offset: number; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIReportOutputSchemaType ## Type Alias: IndexerAPIReportOutputSchemaType ```ts type IndexerAPIReportOutputSchemaType = { commentId: `0x${string}`; createdAt: string; id: string; message: string; reportee: `0x${string}`; status: "pending" | "resolved" | "closed"; updatedAt: string; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:634 ### Type declaration #### commentId ```ts commentId: `0x${string}` = HexSchema; ``` #### createdAt ```ts createdAt: string = dateToString; ``` #### id ```ts id: string; ``` #### message ```ts message: string; ``` #### reportee ```ts reportee: `0x${string}` = HexSchema; ``` #### status ```ts status: "pending" | "resolved" | "closed" = IndexerAPIReportStatusSchema; ``` #### updatedAt ```ts updatedAt: string = dateToString; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIReportSchemaType ## Type Alias: IndexerAPIReportSchemaType ```ts type IndexerAPIReportSchemaType = { commentId: `0x${string}`; createdAt: Date; id: string; message: string; reportee: `0x${string}`; status: "pending" | "resolved" | "closed"; updatedAt: Date; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:626 ### Type declaration #### commentId ```ts commentId: `0x${string}` = HexSchema; ``` #### createdAt ```ts createdAt: Date; ``` #### id ```ts id: string; ``` #### message ```ts message: string; ``` #### reportee ```ts reportee: `0x${string}` = HexSchema; ``` #### status ```ts status: "pending" | "resolved" | "closed" = IndexerAPIReportStatusSchema; ``` #### updatedAt ```ts updatedAt: Date; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIReportsListPendingOutputSchemaType ## Type Alias: IndexerAPIReportsListPendingOutputSchemaType ```ts type IndexerAPIReportsListPendingOutputSchemaType = { pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { commentId: `0x${string}`; createdAt: string; id: string; message: string; reportee: `0x${string}`; status: "pending" | "resolved" | "closed"; updatedAt: string; }[]; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:653 ### Type declaration #### pagination ```ts pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorPaginationSchema; ``` ##### pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### pagination.hasNext ```ts hasNext: boolean; ``` ##### pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### pagination.limit ```ts limit: number; ``` ##### pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` #### results ```ts results: { commentId: `0x${string}`; createdAt: string; id: string; message: string; reportee: `0x${string}`; status: "pending" | "resolved" | "closed"; updatedAt: string; }[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIReportsListPendingSchemaType ## Type Alias: IndexerAPIReportsListPendingSchemaType ```ts type IndexerAPIReportsListPendingSchemaType = { pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: { commentId: `0x${string}`; createdAt: Date; id: string; message: string; reportee: `0x${string}`; status: "pending" | "resolved" | "closed"; updatedAt: Date; }[]; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:643 ### Type declaration #### pagination ```ts pagination: { endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorPaginationSchema; ``` ##### pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### pagination.hasNext ```ts hasNext: boolean; ``` ##### pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### pagination.limit ```ts limit: number; ``` ##### pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` #### results ```ts results: { commentId: `0x${string}`; createdAt: Date; id: string; message: string; reportee: `0x${string}`; status: "pending" | "resolved" | "closed"; updatedAt: Date; }[]; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPISortSchemaType ## Type Alias: IndexerAPISortSchemaType ```ts type IndexerAPISortSchemaType = "asc" | "desc"; ``` Defined in: packages/sdk/src/indexer/schemas.ts:153 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IsMutedOptions ## Type Alias: IsMutedOptions ```ts type IsMutedOptions = { address: `0x${string}`; apiUrl?: string; retries?: number; signal?: AbortSignal; }; ``` Defined in: packages/sdk/src/indexer/api.ts:688 The options for `isMuted()` ### Type declaration #### address ```ts address: `0x${string}` = HexSchema; ``` Author's address #### apiUrl? ```ts optional apiUrl: string; ``` URL on which /api/muted-accounts/$address endpoint will be called ##### Default ```ts "https://api.ethcomments.xyz" ``` #### retries? ```ts optional retries: number; ``` Number of times to retry the signing operation in case of failure. ##### Default ```ts 3 ``` #### signal? ```ts optional signal: AbortSignal; ``` Abort signal for requests [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / ReportCommentOptions ## Type Alias: ReportCommentOptions ```ts type ReportCommentOptions = { apiUrl?: string; chainId: number; commentId: Hex; message?: string; reportee: Hex; retries?: number; signal?: AbortSignal; signature: Hex; }; ``` Defined in: packages/sdk/src/indexer/api.ts:977 The options for `reportComment()` ### Properties #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:1003 URL on which /api/comments/$commentId/reports endpoint will be called ##### Default ```ts "https://api.ethcomments.xyz" ``` *** #### chainId ```ts chainId: number; ``` Defined in: packages/sdk/src/indexer/api.ts:997 The chain ID where the comment was posted *** #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:981 The ID of the comment to report *** #### message? ```ts optional message: string; ``` Defined in: packages/sdk/src/indexer/api.ts:989 Optional message explaining the reason for the report *** #### reportee ```ts reportee: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:985 The address of the user reporting the comment *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/indexer/api.ts:1009 Number of times to retry the operation in case of failure. ##### Default ```ts 3 ``` *** #### signal? ```ts optional signal: AbortSignal; ``` Defined in: packages/sdk/src/indexer/api.ts:1010 *** #### signature ```ts signature: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:993 The signature of the report typed data [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIAuthorDataSchema ## Variable: IndexerAPIAuthorDataSchema ```ts const IndexerAPIAuthorDataSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:125 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIAuthorEnsDataSchema ## Variable: IndexerAPIAuthorEnsDataSchema ```ts const IndexerAPIAuthorEnsDataSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:105 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIAutocompleteENSSchema ## Variable: IndexerAPIAutocompleteENSSchema ```ts const IndexerAPIAutocompleteENSSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:539 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIAutocompleteERC20Schema ## Variable: IndexerAPIAutocompleteERC20Schema ```ts const IndexerAPIAutocompleteERC20Schema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:554 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIAutocompleteFarcasterSchema ## Variable: IndexerAPIAutocompleteFarcasterSchema ```ts const IndexerAPIAutocompleteFarcasterSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:574 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIAutocompleteSchema ## Variable: IndexerAPIAutocompleteSchema ```ts const IndexerAPIAutocompleteSchema: ZodDiscriminatedUnion; ``` Defined in: packages/sdk/src/indexer/schemas.ts:592 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIChannelOutputSchema ## Variable: IndexerAPIChannelOutputSchema ```ts const IndexerAPIChannelOutputSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:76 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIChannelSchema ## Variable: IndexerAPIChannelSchema ```ts const IndexerAPIChannelSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:60 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentListModeSchema ## Variable: IndexerAPICommentListModeSchema ```ts const IndexerAPICommentListModeSchema: ZodEnum; ``` Defined in: packages/sdk/src/indexer/schemas.ts:145 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentModerationStatusSchema ## Variable: IndexerAPICommentModerationStatusSchema ```ts const IndexerAPICommentModerationStatusSchema: ZodEnum; ``` Defined in: packages/sdk/src/indexer/schemas.ts:135 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentOutputSchema ## Variable: IndexerAPICommentOutputSchema ```ts const IndexerAPICommentOutputSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:355 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReactionOutputSchema ## Variable: IndexerAPICommentReactionOutputSchema ```ts const IndexerAPICommentReactionOutputSchema: ZodObject<{ app: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; author: ZodObject<{ address: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; ens: ZodOptional; name: ZodString; }, "strip", ZodTypeAny, { avatarUrl: null | string; name: string; }, { avatarUrl: null | string; name: string; }>>; farcaster: ZodOptional; fid: ZodNumber; pfpUrl: ZodOptional; username: ZodString; }, "strip", ZodTypeAny, { displayName?: string; fid: number; pfpUrl?: string; username: string; }, { displayName?: string; fid: number; pfpUrl?: string; username: string; }>>; }, "strip", ZodTypeAny, { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }, { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }>; chainId: ZodNumber; commentType: ZodNumber; content: ZodString; cursor: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; hookMetadata: ZodArray; value: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; }, "strip", ZodTypeAny, { key: `0x${string}`; value: `0x${string}`; }, { key: `0x${string}`; value: `0x${string}`; }>, "many">; id: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; logIndex: ZodNullable; metadata: ZodArray; value: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; }, "strip", ZodTypeAny, { key: `0x${string}`; value: `0x${string}`; }, { key: `0x${string}`; value: `0x${string}`; }>, "many">; moderationClassifierResult: ZodRecord, ZodString]>, ZodNumber>; moderationClassifierScore: ZodNumber; moderationStatus: ZodEnum<["approved", "rejected", "pending"]>; parentId: ZodNullable>; references: ZodArray; avatarUrl: ZodNullable; name: ZodString; position: ZodObject<{ end: ZodNumber; start: ZodNumber; }, "strip", ZodTypeAny, { end: number; start: number; }, { end: number; start: number; }>; type: ZodLiteral<"ens">; url: ZodString; }, "strip", ZodTypeAny, { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; }, { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; }>, ZodObject<{ address: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; chainId: ZodNullable; chains: ZodArray, "many">; decimals: ZodNumber; logoURI: ZodNullable; name: ZodString; position: ZodObject<{ end: ZodNumber; start: ZodNumber; }, "strip", ZodTypeAny, { end: number; start: number; }, { end: number; start: number; }>; symbol: ZodString; type: ZodLiteral<"erc20">; }, "strip", ZodTypeAny, { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; }, { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; }>, ZodObject<{ address: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; displayName: ZodNullable; fid: ZodNumber; fname: ZodString; pfpUrl: ZodNullable; position: ZodObject<{ end: ZodNumber; start: ZodNumber; }, "strip", ZodTypeAny, { end: number; start: number; }, { end: number; start: number; }>; type: ZodLiteral<"farcaster">; url: ZodString; username: ZodString; }, "strip", ZodTypeAny, { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; }, { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; }>]>, "many">; revision: ZodNumber; targetUri: ZodString; txHash: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; zeroExSwap: ZodNullable; amount: ZodString; symbol: ZodString; }, "strip", ZodTypeAny, { address: `0x${string}`; amount: string; symbol: string; }, { address: `0x${string}`; amount: string; symbol: string; }>; to: ZodObject<{ address: ZodUnion<[ZodType<..., ..., ...>, ZodLiteral<...>]>; amount: ZodUnion<[ZodString, ZodLiteral<...>]>; symbol: ZodString; }, "strip", ZodTypeAny, { address: "" | `0x${string}`; amount: string; symbol: string; }, { address: "" | `0x${string}`; amount: string; symbol: string; }>; }, "strip", ZodTypeAny, { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }, { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }>>; } & { channelId: ZodEffects; createdAt: ZodEffects; deletedAt: ZodNullable>; moderationStatusChangedAt: ZodEffects; updatedAt: ZodEffects; } & { reactionCounts: ZodRecord; viewerReactions: ZodRecord; author: ZodObject<{ address: ZodType<..., ..., ...>; ens: ZodOptional<...>; farcaster: ZodOptional<...>; }, "strip", ZodTypeAny, { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }, { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }>; chainId: ZodNumber; commentType: ZodNumber; content: ZodString; cursor: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; hookMetadata: ZodArray, "many">; id: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; logIndex: ZodNullable; metadata: ZodArray, "many">; moderationClassifierResult: ZodRecord, ZodNumber>; moderationClassifierScore: ZodNumber; moderationStatus: ZodEnum<["approved", "rejected", "pending"]>; parentId: ZodNullable>; references: ZodArray, "many">; revision: ZodNumber; targetUri: ZodString; txHash: ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>; zeroExSwap: ZodNullable>; } & { channelId: ZodEffects; createdAt: ZodEffects; deletedAt: ZodNullable>; moderationStatusChangedAt: ZodEffects; updatedAt: ZodEffects; }, "strip", ZodTypeAny, { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: ... | ...; name: string; }; farcaster?: { displayName?: ... | ...; fid: number; pfpUrl?: ... | ...; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; references: ( | { address: `0x${(...)}`; avatarUrl: ... | ...; name: string; position: { end: ...; start: ...; }; type: "ens"; url: string; } | { address: `0x${(...)}`; displayName: ... | ...; fid: number; fname: string; pfpUrl: ... | ...; position: { end: ...; start: ...; }; type: "farcaster"; url: string; username: string; } | { address: `0x${(...)}`; chainId: ... | ...; chains: ...[]; decimals: number; logoURI: ... | ...; name: string; position: { end: ...; start: ...; }; symbol: string; type: "erc20"; } | { description: ... | ...; favicon: ... | ...; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }, { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: ... | ...; name: string; }; farcaster?: { displayName?: ... | ...; fid: number; pfpUrl?: ... | ...; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${(...)}`; avatarUrl: ... | ...; name: string; position: { end: ...; start: ...; }; type: "ens"; url: string; } | { address: `0x${(...)}`; displayName: ... | ...; fid: number; fname: string; pfpUrl: ... | ...; position: { end: ...; start: ...; }; type: "farcaster"; url: string; username: string; } | { address: `0x${(...)}`; chainId: ... | ...; chains: ...[]; decimals: number; logoURI: ... | ...; name: string; position: { end: ...; start: ...; }; symbol: string; type: "erc20"; } | { description: ... | ...; favicon: ... | ...; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }>, "many">>; }, "strip", ZodTypeAny, { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: string; commentType: number; content: string; createdAt: string; cursor: `0x${string}`; deletedAt: null | string; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: string; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ... | ...; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }, { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; reactionCounts: Record; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: null | string; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${string}`; references: ( | { address: `0x${string}`; avatarUrl: null | string; name: string; position: { end: number; start: number; }; type: "ens"; url: string; } | { address: `0x${string}`; displayName: null | string; fid: number; fname: string; pfpUrl: null | string; position: { end: number; start: number; }; type: "farcaster"; url: string; username: string; } | { address: `0x${string}`; chainId: null | number; chains: { caip: string; chainId: number; }[]; decimals: number; logoURI: null | string; name: string; position: { end: number; start: number; }; symbol: string; type: "erc20"; } | { description: null | string; favicon: null | string; opengraph: | null | { description: ... | ...; image: string; title: string; url: string; }; position: { end: number; start: number; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "file"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; })[]; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }[]>; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }>; ``` Defined in: packages/sdk/src/indexer/schemas.ts:376 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReactionSchema ## Variable: IndexerAPICommentReactionSchema ```ts const IndexerAPICommentReactionSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:367 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceENSSchema ## Variable: IndexerAPICommentReferenceENSSchema ```ts const IndexerAPICommentReferenceENSSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:191 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceERC20Schema ## Variable: IndexerAPICommentReferenceERC20Schema ```ts const IndexerAPICommentReferenceERC20Schema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:220 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceFarcasterSchema ## Variable: IndexerAPICommentReferenceFarcasterSchema ```ts const IndexerAPICommentReferenceFarcasterSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:204 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferencePositionSchema ## Variable: IndexerAPICommentReferencePositionSchema ```ts const IndexerAPICommentReferencePositionSchema: ZodObject<{ end: ZodNumber; start: ZodNumber; }, "strip", ZodTypeAny, { end: number; start: number; }, { end: number; start: number; }>; ``` Defined in: packages/sdk/src/indexer/schemas.ts:186 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceSchema ## Variable: IndexerAPICommentReferenceSchema ```ts const IndexerAPICommentReferenceSchema: ZodUnion; ``` Defined in: packages/sdk/src/indexer/schemas.ts:299 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceURLFileSchema ## Variable: IndexerAPICommentReferenceURLFileSchema ```ts const IndexerAPICommentReferenceURLFileSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:266 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceURLImageSchema ## Variable: IndexerAPICommentReferenceURLImageSchema ```ts const IndexerAPICommentReferenceURLImageSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:277 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceURLVideoSchema ## Variable: IndexerAPICommentReferenceURLVideoSchema ```ts const IndexerAPICommentReferenceURLVideoSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:288 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceURLWebPageSchema ## Variable: IndexerAPICommentReferenceURLWebPageSchema ```ts const IndexerAPICommentReferenceURLWebPageSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:245 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferencesSchema ## Variable: IndexerAPICommentReferencesSchema ```ts const IndexerAPICommentReferencesSchema: ZodArray; ``` Defined in: packages/sdk/src/indexer/schemas.ts:313 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentSchema ## Variable: IndexerAPICommentSchema ```ts const IndexerAPICommentSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:321 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentWithRepliesOutputSchema ## Variable: IndexerAPICommentWithRepliesOutputSchema ```ts const IndexerAPICommentWithRepliesOutputSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:412 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentWithRepliesSchema ## Variable: IndexerAPICommentWithRepliesSchema ```ts const IndexerAPICommentWithRepliesSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:399 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentZeroExSwapSchema ## Variable: IndexerAPICommentZeroExSwapSchema ```ts const IndexerAPICommentZeroExSwapSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:167 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICursorPaginationSchema ## Variable: IndexerAPICursorPaginationSchema ```ts const IndexerAPICursorPaginationSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:33 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIExtraSchema ## Variable: IndexerAPIExtraSchema ```ts const IndexerAPIExtraSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:392 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIFarcasterDataSchema ## Variable: IndexerAPIFarcasterDataSchema ```ts const IndexerAPIFarcasterDataSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:114 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIGetAutocompleteOutputSchema ## Variable: IndexerAPIGetAutocompleteOutputSchema ```ts const IndexerAPIGetAutocompleteOutputSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:602 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIListChannelsOutputSchema ## Variable: IndexerAPIListChannelsOutputSchema ```ts const IndexerAPIListChannelsOutputSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:95 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIListChannelsSchema ## Variable: IndexerAPIListChannelsSchema ```ts const IndexerAPIListChannelsSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:86 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIListCommentRepliesOutputSchema ## Variable: IndexerAPIListCommentRepliesOutputSchema ```ts const IndexerAPIListCommentRepliesOutputSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:456 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIListCommentRepliesSchema ## Variable: IndexerAPIListCommentRepliesSchema ```ts const IndexerAPIListCommentRepliesSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:446 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIListCommentsOutputSchema ## Variable: IndexerAPIListCommentsOutputSchema ```ts const IndexerAPIListCommentsOutputSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:435 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIListCommentsSchema ## Variable: IndexerAPIListCommentsSchema ```ts const IndexerAPIListCommentsSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:425 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIMetadataEntrySchema ## Variable: IndexerAPIMetadataEntrySchema ```ts const IndexerAPIMetadataEntrySchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:45 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIMetadataSchema ## Variable: IndexerAPIMetadataSchema ```ts const IndexerAPIMetadataSchema: ZodArray; ``` Defined in: packages/sdk/src/indexer/schemas.ts:54 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIModerationChangeModerationStatusOnCommentOutputSchema ## Variable: IndexerAPIModerationChangeModerationStatusOnCommentOutputSchema ```ts const IndexerAPIModerationChangeModerationStatusOnCommentOutputSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:492 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIModerationChangeModerationStatusOnCommentSchema ## Variable: IndexerAPIModerationChangeModerationStatusOnCommentSchema ```ts const IndexerAPIModerationChangeModerationStatusOnCommentSchema: ZodObject = IndexerAPICommentSchema; ``` Defined in: packages/sdk/src/indexer/schemas.ts:486 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIModerationClassificationLabelSchema ## Variable: IndexerAPIModerationClassificationLabelSchema ```ts const IndexerAPIModerationClassificationLabelSchema: ZodEnum; ``` Defined in: packages/sdk/src/indexer/schemas.ts:16 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIModerationGetPendingCommentsOutputSchema ## Variable: IndexerAPIModerationGetPendingCommentsOutputSchema ```ts const IndexerAPIModerationGetPendingCommentsOutputSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:476 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIModerationGetPendingCommentsSchema ## Variable: IndexerAPIModerationGetPendingCommentsSchema ```ts const IndexerAPIModerationGetPendingCommentsSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:467 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIPaginationSchema ## Variable: IndexerAPIPaginationSchema ```ts const IndexerAPIPaginationSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:382 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIReportOutputSchema ## Variable: IndexerAPIReportOutputSchema ```ts const IndexerAPIReportOutputSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:628 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIReportSchema ## Variable: IndexerAPIReportSchema ```ts const IndexerAPIReportSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:616 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIReportStatusSchema ## Variable: IndexerAPIReportStatusSchema ```ts const IndexerAPIReportStatusSchema: ZodEnum<["pending", "resolved", "closed"]>; ``` Defined in: packages/sdk/src/indexer/schemas.ts:610 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIReportsListPendingOutputSchema ## Variable: IndexerAPIReportsListPendingOutputSchema ```ts const IndexerAPIReportsListPendingOutputSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:647 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIReportsListPendingSchema ## Variable: IndexerAPIReportsListPendingSchema ```ts const IndexerAPIReportsListPendingSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:638 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPISortSchema ## Variable: IndexerAPISortSchema ```ts const IndexerAPISortSchema: ZodEnum; ``` Defined in: packages/sdk/src/indexer/schemas.ts:151 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIZeroExSwapPossibleEmptyAddressSchema ## Variable: IndexerAPIZeroExSwapPossibleEmptyAddressSchema ```ts const IndexerAPIZeroExSwapPossibleEmptyAddressSchema: ZodUnion<[ZodType<`0x${string}`, ZodTypeDef, `0x${string}`>, ZodLiteral<"">]>; ``` Defined in: packages/sdk/src/indexer/schemas.ts:161 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIZeroExSwapPossiblyEmptyTokenAmountSchema ## Variable: IndexerAPIZeroExSwapPossiblyEmptyTokenAmountSchema ```ts const IndexerAPIZeroExSwapPossiblyEmptyTokenAmountSchema: ZodUnion<[ZodString, ZodLiteral<"">]>; ``` Defined in: packages/sdk/src/indexer/schemas.ts:164 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIZeroExTokenAmountSchema ## Variable: IndexerAPIZeroExTokenAmountSchema ```ts const IndexerAPIZeroExTokenAmountSchema: ZodString; ``` Defined in: packages/sdk/src/indexer/schemas.ts:155 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / useChannelExists ## Function: useChannelExists() ```ts function useChannelExists(params, options): UseChannelExistsResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:159 Check if a channel exists ### Parameters #### params [`UseChannelExistsParams`](/sdk-reference/channel-manager/react/type-aliases/UseChannelExistsParams.mdx) The parameters for checking if a channel exists #### options [`UseChannelExistsOptions`](/sdk-reference/channel-manager/react/type-aliases/UseChannelExistsOptions.mdx) = `{}` The options for the query ### Returns [`UseChannelExistsResult`](/sdk-reference/channel-manager/react/type-aliases/UseChannelExistsResult.mdx) The result of the query [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / useCreateChannel ## Function: useCreateChannel() ```ts function useCreateChannel(options): UseCreateChannelResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:56 Create a new channel ### Parameters #### options [`UseCreateChannelOptions`](/sdk-reference/channel-manager/react/type-aliases/UseCreateChannelOptions.mdx) = `{}` The options for the mutation ### Returns [`UseCreateChannelResult`](/sdk-reference/channel-manager/react/type-aliases/UseCreateChannelResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / useGetChannel ## Function: useGetChannel() ```ts function useGetChannel(params, options): UseGetChannelResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:119 Get a channel ### Parameters #### params [`UseGetChannelParams`](/sdk-reference/channel-manager/react/type-aliases/UseGetChannelParams.mdx) The parameters for getting a channel #### options [`UseGetChannelOptions`](/sdk-reference/channel-manager/react/type-aliases/UseGetChannelOptions.mdx) = `{}` The options for the query ### Returns [`UseGetChannelResult`](/sdk-reference/channel-manager/react/type-aliases/UseGetChannelResult.mdx) The result of the query [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / useGetChannelCreationFee ## Function: useGetChannelCreationFee() ```ts function useGetChannelCreationFee(params, options): UseGetChannelCreationFeeResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:245 Get the creation fee from channel manager ### Parameters #### params [`UseGetChannelCreationFeeParams`](/sdk-reference/channel-manager/react/type-aliases/UseGetChannelCreationFeeParams.mdx) = `{}` The parameters for getting the creation fee from channel manager #### options [`UseGetChannelCreationFeeOptions`](/sdk-reference/channel-manager/react/type-aliases/UseGetChannelCreationFeeOptions.mdx) = `{}` The options for the query ### Returns [`UseGetChannelCreationFeeResult`](/sdk-reference/channel-manager/react/type-aliases/UseGetChannelCreationFeeResult.mdx) The result of the query [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / useGetHookTransactionFee ## Function: useGetHookTransactionFee() ```ts function useGetHookTransactionFee(params, options): UseGetHookTransactionFeeResult; ``` Defined in: packages/sdk/src/channel-manager/react/hook.ts:73 Get the hook transaction fee from channel manager ### Parameters #### params [`UseGetHookTransactionFeeParams`](/sdk-reference/channel-manager/react/type-aliases/UseGetHookTransactionFeeParams.mdx) = `{}` The parameters for getting the hook transaction fee from channel manager #### options [`UseGetHookTransactionFeeOptions`](/sdk-reference/channel-manager/react/type-aliases/UseGetHookTransactionFeeOptions.mdx) = `{}` The options for the query ### Returns [`UseGetHookTransactionFeeResult`](/sdk-reference/channel-manager/react/type-aliases/UseGetHookTransactionFeeResult.mdx) The result of the query [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / useOwnerOf ## Function: useOwnerOf() ```ts function useOwnerOf(params, options): UseOwnerOfResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:199 Get the owner of a channel ### Parameters #### params [`UseOwnerOfParams`](/sdk-reference/channel-manager/react/type-aliases/UseOwnerOfParams.mdx) The parameters for getting the owner of a channel #### options [`UseOwnerOfOptions`](/sdk-reference/channel-manager/react/type-aliases/UseOwnerOfOptions.mdx) = `{}` The options for the query ### Returns [`UseOwnerOfResult`](/sdk-reference/channel-manager/react/type-aliases/UseOwnerOfResult.mdx) The result of the query [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / useSetBaseURI ## Function: useSetBaseURI() ```ts function useSetBaseURI(options): UseSetBaseURIResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:361 Sets the base URI for NFT metadata ### Parameters #### options [`UseSetBaseURIOptions`](/sdk-reference/channel-manager/react/type-aliases/UseSetBaseURIOptions.mdx) = `{}` The options for the mutation ### Returns [`UseSetBaseURIResult`](/sdk-reference/channel-manager/react/type-aliases/UseSetBaseURIResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / useSetChannelCreationFee ## Function: useSetChannelCreationFee() ```ts function useSetChannelCreationFee(options): UseSetChannelCreationFeeResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:295 Set the fee for creating a new channel ### Parameters #### options [`UseSetChannelCreationFeeOptions`](/sdk-reference/channel-manager/react/type-aliases/UseSetChannelCreationFeeOptions.mdx) = `{}` The options for the mutation ### Returns [`UseSetChannelCreationFeeResult`](/sdk-reference/channel-manager/react/type-aliases/UseSetChannelCreationFeeResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / useSetHook ## Function: useSetHook() ```ts function useSetHook(options): UseSetHookResult; ``` Defined in: packages/sdk/src/channel-manager/react/hook.ts:39 Set the hook for a channel ### Parameters #### options [`UseSetHookOptions`](/sdk-reference/channel-manager/react/type-aliases/UseSetHookOptions.mdx) = `{}` The options for the mutation ### Returns [`UseSetHookResult`](/sdk-reference/channel-manager/react/type-aliases/UseSetHookResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / useSetHookTransactionFee ## Function: useSetHookTransactionFee() ```ts function useSetHookTransactionFee(options): UseSetHookTransactionFeeResult; ``` Defined in: packages/sdk/src/channel-manager/react/hook.ts:123 Set the percentage of the fee for the hook transaction ### Parameters #### options [`UseSetHookTransactionFeeOptions`](/sdk-reference/channel-manager/react/type-aliases/UseSetHookTransactionFeeOptions.mdx) = `{}` The options for the mutation ### Returns [`UseSetHookTransactionFeeResult`](/sdk-reference/channel-manager/react/type-aliases/UseSetHookTransactionFeeResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / useUpdateChannel ## Function: useUpdateChannel() ```ts function useUpdateChannel(options): UseUpdateChannelResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:89 Update a channel ### Parameters #### options [`UseUpdateChannelOptions`](/sdk-reference/channel-manager/react/type-aliases/UseUpdateChannelOptions.mdx) = `{}` The options for the mutation ### Returns [`UseUpdateChannelResult`](/sdk-reference/channel-manager/react/type-aliases/UseUpdateChannelResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / useWithdrawFees ## Function: useWithdrawFees() ```ts function useWithdrawFees(options): UseWithdrawFeesResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:328 Withdraws accumulated fees to a specified address ### Parameters #### options [`UseWithdrawFeesOptions`](/sdk-reference/channel-manager/react/type-aliases/UseWithdrawFeesOptions.mdx) = `{}` The options for the mutation ### Returns [`UseWithdrawFeesResult`](/sdk-reference/channel-manager/react/type-aliases/UseWithdrawFeesResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseChannelExistsOptions ## Type Alias: UseChannelExistsOptions ```ts type UseChannelExistsOptions = Omit, "queryKey" | "queryFn">; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:146 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseChannelExistsParams ## Type Alias: UseChannelExistsParams ```ts type UseChannelExistsParams = Omit; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:145 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseChannelExistsResult ## Type Alias: UseChannelExistsResult ```ts type UseChannelExistsResult = UseQueryResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:150 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseCreateChannelOptions ## Type Alias: UseCreateChannelOptions ```ts type UseCreateChannelOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:40 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseCreateChannelParams ## Type Alias: UseCreateChannelParams ```ts type UseCreateChannelParams = Omit; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:39 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseCreateChannelResult ## Type Alias: UseCreateChannelResult ```ts type UseCreateChannelResult = UseMutationResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:44 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseGetChannelCreationFeeOptions ## Type Alias: UseGetChannelCreationFeeOptions ```ts type UseGetChannelCreationFeeOptions = Omit, "queryKey" | "queryFn">; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:229 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseGetChannelCreationFeeParams ## Type Alias: UseGetChannelCreationFeeParams ```ts type UseGetChannelCreationFeeParams = Omit; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:225 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseGetChannelCreationFeeResult ## Type Alias: UseGetChannelCreationFeeResult ```ts type UseGetChannelCreationFeeResult = UseQueryResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:233 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseGetChannelOptions ## Type Alias: UseGetChannelOptions ```ts type UseGetChannelOptions = Omit, "queryKey" | "queryFn">; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:106 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseGetChannelParams ## Type Alias: UseGetChannelParams ```ts type UseGetChannelParams = Omit; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:105 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseGetChannelResult ## Type Alias: UseGetChannelResult ```ts type UseGetChannelResult = UseQueryResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:110 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseGetHookTransactionFeeOptions ## Type Alias: UseGetHookTransactionFeeOptions ```ts type UseGetHookTransactionFeeOptions = Omit, "queryKey" | "queryFn">; ``` Defined in: packages/sdk/src/channel-manager/react/hook.ts:57 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseGetHookTransactionFeeParams ## Type Alias: UseGetHookTransactionFeeParams ```ts type UseGetHookTransactionFeeParams = Omit; ``` Defined in: packages/sdk/src/channel-manager/react/hook.ts:53 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseGetHookTransactionFeeResult ## Type Alias: UseGetHookTransactionFeeResult ```ts type UseGetHookTransactionFeeResult = UseQueryResult; ``` Defined in: packages/sdk/src/channel-manager/react/hook.ts:61 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseOwnerOfOptions ## Type Alias: UseOwnerOfOptions ```ts type UseOwnerOfOptions = Omit, "queryKey" | "queryFn">; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:186 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseOwnerOfParams ## Type Alias: UseOwnerOfParams ```ts type UseOwnerOfParams = Omit; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:185 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseOwnerOfResult ## Type Alias: UseOwnerOfResult ```ts type UseOwnerOfResult = UseQueryResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:190 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseSetBaseURIOptions ## Type Alias: UseSetBaseURIOptions ```ts type UseSetBaseURIOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:345 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseSetBaseURIParams ## Type Alias: UseSetBaseURIParams ```ts type UseSetBaseURIParams = Omit; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:344 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseSetBaseURIResult ## Type Alias: UseSetBaseURIResult ```ts type UseSetBaseURIResult = UseMutationResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:349 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseSetChannelCreationFeeOptions ## Type Alias: UseSetChannelCreationFeeOptions ```ts type UseSetChannelCreationFeeOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:275 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseSetChannelCreationFeeParams ## Type Alias: UseSetChannelCreationFeeParams ```ts type UseSetChannelCreationFeeParams = Omit; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:271 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseSetChannelCreationFeeResult ## Type Alias: UseSetChannelCreationFeeResult ```ts type UseSetChannelCreationFeeResult = UseMutationResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:283 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseSetHookOptions ## Type Alias: UseSetHookOptions ```ts type UseSetHookOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/channel-manager/react/hook.ts:23 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseSetHookParams ## Type Alias: UseSetHookParams ```ts type UseSetHookParams = Omit; ``` Defined in: packages/sdk/src/channel-manager/react/hook.ts:22 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseSetHookResult ## Type Alias: UseSetHookResult ```ts type UseSetHookResult = UseMutationResult; ``` Defined in: packages/sdk/src/channel-manager/react/hook.ts:27 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseSetHookTransactionFeeOptions ## Type Alias: UseSetHookTransactionFeeOptions ```ts type UseSetHookTransactionFeeOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/channel-manager/react/hook.ts:103 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseSetHookTransactionFeeParams ## Type Alias: UseSetHookTransactionFeeParams ```ts type UseSetHookTransactionFeeParams = Omit; ``` Defined in: packages/sdk/src/channel-manager/react/hook.ts:99 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseSetHookTransactionFeeResult ## Type Alias: UseSetHookTransactionFeeResult ```ts type UseSetHookTransactionFeeResult = UseMutationResult; ``` Defined in: packages/sdk/src/channel-manager/react/hook.ts:111 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseUpdateChannelOptions ## Type Alias: UseUpdateChannelOptions ```ts type UseUpdateChannelOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:73 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseUpdateChannelParams ## Type Alias: UseUpdateChannelParams ```ts type UseUpdateChannelParams = Omit; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:72 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseUpdateChannelResult ## Type Alias: UseUpdateChannelResult ```ts type UseUpdateChannelResult = UseMutationResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:77 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseWithdrawFeesOptions ## Type Alias: UseWithdrawFeesOptions ```ts type UseWithdrawFeesOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:312 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseWithdrawFeesParams ## Type Alias: UseWithdrawFeesParams ```ts type UseWithdrawFeesParams = Omit; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:311 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseWithdrawFeesResult ## Type Alias: UseWithdrawFeesResult ```ts type UseWithdrawFeesResult = UseMutationResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:316 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/types](/sdk-reference/channel-manager/types/index.mdx) / Channel ## Type Alias: Channel ```ts type Channel = { description: string | undefined; hook: Hex | undefined; metadata: | MetadataEntry[] | undefined; name: string; permissions: ChannelPermissions; }; ``` Defined in: packages/sdk/src/channel-manager/types.ts:20 ### Properties #### description ```ts description: string | undefined; ``` Defined in: packages/sdk/src/channel-manager/types.ts:22 *** #### hook ```ts hook: Hex | undefined; ``` Defined in: packages/sdk/src/channel-manager/types.ts:24 *** #### metadata ```ts metadata: | MetadataEntry[] | undefined; ``` Defined in: packages/sdk/src/channel-manager/types.ts:23 *** #### name ```ts name: string; ``` Defined in: packages/sdk/src/channel-manager/types.ts:21 *** #### permissions ```ts permissions: ChannelPermissions; ``` Defined in: packages/sdk/src/channel-manager/types.ts:25 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/types](/sdk-reference/channel-manager/types/index.mdx) / ChannelManagerABIType ## Type Alias: ChannelManagerABIType ```ts type ChannelManagerABIType = typeof ChannelManagerABI; ``` Defined in: packages/sdk/src/channel-manager/types.ts:10 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/types](/sdk-reference/channel-manager/types/index.mdx) / ChannelPermissions ## Type Alias: ChannelPermissions ```ts type ChannelPermissions = { onChannelUpdate: boolean; onCommentAdd: boolean; onCommentDelete: boolean; onCommentEdit: boolean; onInitialize: boolean; }; ``` Defined in: packages/sdk/src/channel-manager/types.ts:12 ### Properties #### onChannelUpdate ```ts onChannelUpdate: boolean; ``` Defined in: packages/sdk/src/channel-manager/types.ts:17 *** #### onCommentAdd ```ts onCommentAdd: boolean; ``` Defined in: packages/sdk/src/channel-manager/types.ts:14 *** #### onCommentDelete ```ts onCommentDelete: boolean; ``` Defined in: packages/sdk/src/channel-manager/types.ts:15 *** #### onCommentEdit ```ts onCommentEdit: boolean; ``` Defined in: packages/sdk/src/channel-manager/types.ts:16 *** #### onInitialize ```ts onInitialize: boolean; ``` Defined in: packages/sdk/src/channel-manager/types.ts:13 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/types](/sdk-reference/channel-manager/types/index.mdx) / ContractReadFunctions ## Type Alias: ContractReadFunctions ```ts type ContractReadFunctions = { channelExists: (args) => Promise>; deductProtocolHookTransactionFee: (args) => Promise>; getChannel: (args) => Promise>; getChannelCreationFee: (args) => Promise>; getChannelMetadata: (args) => Promise>; getHookTransactionFee: (args) => Promise>; ownerOf: (args) => Promise>; }; ``` Defined in: packages/sdk/src/channel-manager/types.ts:90 ### Properties #### channelExists() ```ts channelExists: (args) => Promise>; ``` Defined in: packages/sdk/src/channel-manager/types.ts:101 ##### Parameters ##### args `ReadContractParameters`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"channelExists"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"channelExists"`>> *** #### deductProtocolHookTransactionFee() ```ts deductProtocolHookTransactionFee: (args) => Promise>; ``` Defined in: packages/sdk/src/channel-manager/types.ts:127 ##### Parameters ##### args `ReadContractParameters`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"deductProtocolHookTransactionFee"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"deductProtocolHookTransactionFee"`>> *** #### getChannel() ```ts getChannel: (args) => Promise>; ``` Defined in: packages/sdk/src/channel-manager/types.ts:91 ##### Parameters ##### args `ReadContractParameters`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"getChannel"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"getChannel"`>> *** #### getChannelCreationFee() ```ts getChannelCreationFee: (args) => Promise>; ``` Defined in: packages/sdk/src/channel-manager/types.ts:109 ##### Parameters ##### args `ReadContractParameters`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"getChannelCreationFee"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"getChannelCreationFee"`>> *** #### getChannelMetadata() ```ts getChannelMetadata: (args) => Promise>; ``` Defined in: packages/sdk/src/channel-manager/types.ts:95 ##### Parameters ##### args `ReadContractParameters`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"getChannelMetadata"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"getChannelMetadata"`>> *** #### getHookTransactionFee() ```ts getHookTransactionFee: (args) => Promise>; ``` Defined in: packages/sdk/src/channel-manager/types.ts:118 ##### Parameters ##### args `ReadContractParameters`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"getHookTransactionFee"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"getHookTransactionFee"`>> *** #### ownerOf() ```ts ownerOf: (args) => Promise>; ``` Defined in: packages/sdk/src/channel-manager/types.ts:105 ##### Parameters ##### args `ReadContractParameters`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"ownerOf"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"ownerOf"`>> [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/types](/sdk-reference/channel-manager/types/index.mdx) / ContractWriteFunctions ## Type Alias: ContractWriteFunctions ```ts type ContractWriteFunctions = { createChannel: (args) => Promise; setBaseURI: (args) => Promise; setChannelCreationFee: (args) => Promise; setHook: (args) => Promise; setHookTransactionFee: (args) => Promise; updateChannel: (args) => Promise; withdrawFees: (args) => Promise; }; ``` Defined in: packages/sdk/src/channel-manager/types.ts:30 ### Properties #### createChannel() ```ts createChannel: (args) => Promise; ``` Defined in: packages/sdk/src/channel-manager/types.ts:31 ##### Parameters ##### args `ContractFunctionParameters`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"payable"`, `"createChannel"`> & \{ `value?`: `bigint`; } ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### setBaseURI() ```ts setBaseURI: (args) => Promise; ``` Defined in: packages/sdk/src/channel-manager/types.ts:41 ##### Parameters ##### args `ContractFunctionParameters`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"nonpayable"`, `"setBaseURI"`> ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### setChannelCreationFee() ```ts setChannelCreationFee: (args) => Promise; ``` Defined in: packages/sdk/src/channel-manager/types.ts:49 ##### Parameters ##### args `ContractFunctionParameters`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"nonpayable"`, `"setChannelCreationFee"`> ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### setHook() ```ts setHook: (args) => Promise; ``` Defined in: packages/sdk/src/channel-manager/types.ts:57 ##### Parameters ##### args `ContractFunctionParameters`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"nonpayable"`, `"setHook"`> ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### setHookTransactionFee() ```ts setHookTransactionFee: (args) => Promise; ``` Defined in: packages/sdk/src/channel-manager/types.ts:65 ##### Parameters ##### args `ContractFunctionParameters`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"nonpayable"`, `"setHookTransactionFee"`> ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### updateChannel() ```ts updateChannel: (args) => Promise; ``` Defined in: packages/sdk/src/channel-manager/types.ts:73 ##### Parameters ##### args `ContractFunctionParameters`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"nonpayable"`, `"updateChannel"`> ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### withdrawFees() ```ts withdrawFees: (args) => Promise; ``` Defined in: packages/sdk/src/channel-manager/types.ts:81 ##### Parameters ##### args `ContractFunctionParameters`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"nonpayable"`, `"withdrawFees"`> ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useAddApproval ## Function: useAddApproval() ```ts function useAddApproval(options): UseAddApprovalResult; ``` Defined in: packages/sdk/src/comments/react/approval.ts:84 React hook to approve an app signer directly as author ### Parameters #### options [`UseAddApprovalOptions`](/sdk-reference/comments/react/type-aliases/UseAddApprovalOptions.mdx) = `{}` The options for the mutation ### Returns [`UseAddApprovalResult`](/sdk-reference/comments/react/type-aliases/UseAddApprovalResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useAddApprovalWithSig ## Function: useAddApprovalWithSig() ```ts function useAddApprovalWithSig(options): UseAddApprovalWithSigResult; ``` Defined in: packages/sdk/src/comments/react/approval.ts:124 React hook to add an app signer approval with signature verification ### Parameters #### options [`UseAddApprovalWithSigOptions`](/sdk-reference/comments/react/type-aliases/UseAddApprovalWithSigOptions.mdx) = `{}` The options for the mutation ### Returns [`UseAddApprovalWithSigResult`](/sdk-reference/comments/react/type-aliases/UseAddApprovalWithSigResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useDeleteComment ## Function: useDeleteComment() ```ts function useDeleteComment(options): UseDeleteCommentResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:212 React hook to delete a comment as an author ### Parameters #### options [`UseDeleteCommentOptions`](/sdk-reference/comments/react/type-aliases/UseDeleteCommentOptions.mdx) = `{}` The options for the mutation ### Returns [`UseDeleteCommentResult`](/sdk-reference/comments/react/type-aliases/UseDeleteCommentResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useDeleteCommentWithSig ## Function: useDeleteCommentWithSig() ```ts function useDeleteCommentWithSig(options): UseDeleteCommentWithSigResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:248 React hook to delete a comment with app signature verification ### Parameters #### options [`UseDeleteCommentWithSigOptions`](/sdk-reference/comments/react/type-aliases/UseDeleteCommentWithSigOptions.mdx) = `{}` The options for the mutation ### Returns [`UseDeleteCommentWithSigResult`](/sdk-reference/comments/react/type-aliases/UseDeleteCommentWithSigResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useEditComment ## Function: useEditComment() ```ts function useEditComment(options): UseEditCommentResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:346 React hook to edit a comment as an author ### Parameters #### options [`UseEditCommentOptions`](/sdk-reference/comments/react/type-aliases/UseEditCommentOptions.mdx) = `{}` The options for the mutation ### Returns [`UseEditCommentResult`](/sdk-reference/comments/react/type-aliases/UseEditCommentResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useEditCommentWithSig ## Function: useEditCommentWithSig() ```ts function useEditCommentWithSig(options): UseEditCommentWithSigResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:313 React hook to edit a comment with app signature verification ### Parameters #### options [`UseEditCommentWithSigOptions`](/sdk-reference/comments/react/type-aliases/UseEditCommentWithSigOptions.mdx) = `{}` The options for the mutation ### Returns [`UseEditCommentWithSigResult`](/sdk-reference/comments/react/type-aliases/UseEditCommentWithSigResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useGaslessTransaction ## Function: useGaslessTransaction() ```ts function useGaslessTransaction(props): UseMutationResult; ``` Defined in: packages/sdk/src/comments/react/hooks.ts:20 A hook for repeat gasless transaction pattern Gasless transaction typically requires 3 steps: 1. prepare typed data to be passed to `signTypedData`, typically this is also created from server side with an app signature. 2. sign typed data on client side 3. send the dual signed data to server This hook abstracts these steps and help with the repetition of the pattern. ### Type Parameters #### TVariables `TVariables` *extends* `undefined` | `object` #### TReturnValue `TReturnValue` #### TInputVariables `TInputVariables` = `void` #### TSignTypedDataParams `TSignTypedDataParams` *extends* \{ `account?`: `` `0x${string}` `` | `Account`; `connector?`: `Connector`; `domain?`: \{ `chainId?`: `number` | `bigint`; `name?`: `string`; `salt?`: `` `0x${string}` ``; `verifyingContract?`: `` `0x${string}` ``; `version?`: `string`; }; `message`: `Record`\<`string`, `unknown`>; `primaryType`: `string`; `types`: \{ \[`key`: `string`]: readonly `TypedDataParameter`\[]; \[`key`: `` `string[${string}]` ``]: `undefined`; \[`key`: `` `function[${string}]` ``]: `undefined`; \[`key`: `` `address[${string}]` ``]: `undefined`; \[`key`: `` `bytes32[${string}]` ``]: `undefined`; \[`key`: `` `uint256[${string}]` ``]: `undefined`; \[`key`: `` `bytes[${string}]` ``]: `undefined`; \[`key`: `` `uint8[${string}]` ``]: `undefined`; \[`key`: `` `uint88[${string}]` ``]: `undefined`; \[`key`: `` `bool[${string}]` ``]: `undefined`; \[`key`: `` `uint96[${string}]` ``]: `undefined`; \[`key`: `` `uint16[${string}]` ``]: `undefined`; \[`key`: `` `bytes4[${string}]` ``]: `undefined`; \[`key`: `` `bytes1[${string}]` ``]: `undefined`; \[`key`: `` `bytes2[${string}]` ``]: `undefined`; \[`key`: `` `bytes6[${string}]` ``]: `undefined`; \[`key`: `` `bytes5[${string}]` ``]: `undefined`; \[`key`: `` `bytes3[${string}]` ``]: `undefined`; \[`key`: `` `bytes10[${string}]` ``]: `undefined`; \[`key`: `` `bytes9[${string}]` ``]: `undefined`; \[`key`: `` `bytes11[${string}]` ``]: `undefined`; \[`key`: `` `bytes12[${string}]` ``]: `undefined`; \[`key`: `` `bytes20[${string}]` ``]: `undefined`; \[`key`: `` `bytes18[${string}]` ``]: `undefined`; \[`key`: `` `bytes7[${string}]` ``]: `undefined`; \[`key`: `` `bytes8[${string}]` ``]: `undefined`; \[`key`: `` `bytes13[${string}]` ``]: `undefined`; \[`key`: `` `bytes14[${string}]` ``]: `undefined`; \[`key`: `` `bytes15[${string}]` ``]: `undefined`; \[`key`: `` `bytes16[${string}]` ``]: `undefined`; \[`key`: `` `bytes17[${string}]` ``]: `undefined`; \[`key`: `` `bytes19[${string}]` ``]: `undefined`; \[`key`: `` `bytes21[${string}]` ``]: `undefined`; \[`key`: `` `bytes22[${string}]` ``]: `undefined`; \[`key`: `` `bytes23[${string}]` ``]: `undefined`; \[`key`: `` `bytes24[${string}]` ``]: `undefined`; \[`key`: `` `bytes25[${string}]` ``]: `undefined`; \[`key`: `` `bytes26[${string}]` ``]: `undefined`; \[`key`: `` `bytes27[${string}]` ``]: `undefined`; \[`key`: `` `bytes28[${string}]` ``]: `undefined`; \[`key`: `` `bytes29[${string}]` ``]: `undefined`; \[`key`: `` `bytes30[${string}]` ``]: `undefined`; \[`key`: `` `bytes31[${string}]` ``]: `undefined`; \[`key`: `` `int[${string}]` ``]: `undefined`; \[`key`: `` `int88[${string}]` ``]: `undefined`; \[`key`: `` `int32[${string}]` ``]: `undefined`; \[`key`: `` `int200[${string}]` ``]: `undefined`; \[`key`: `` `int8[${string}]` ``]: `undefined`; \[`key`: `` `int16[${string}]` ``]: `undefined`; \[`key`: `` `int24[${string}]` ``]: `undefined`; \[`key`: `` `int40[${string}]` ``]: `undefined`; \[`key`: `` `int48[${string}]` ``]: `undefined`; \[`key`: `` `int56[${string}]` ``]: `undefined`; \[`key`: `` `int64[${string}]` ``]: `undefined`; \[`key`: `` `int72[${string}]` ``]: `undefined`; \[`key`: `` `int80[${string}]` ``]: `undefined`; \[`key`: `` `int96[${string}]` ``]: `undefined`; \[`key`: `` `int104[${string}]` ``]: `undefined`; \[`key`: `` `int112[${string}]` ``]: `undefined`; \[`key`: `` `int120[${string}]` ``]: `undefined`; \[`key`: `` `int128[${string}]` ``]: `undefined`; \[`key`: `` `int136[${string}]` ``]: `undefined`; \[`key`: `` `int144[${string}]` ``]: `undefined`; \[`key`: `` `int152[${string}]` ``]: `undefined`; \[`key`: `` `int160[${string}]` ``]: `undefined`; \[`key`: `` `int168[${string}]` ``]: `undefined`; \[`key`: `` `int176[${string}]` ``]: `undefined`; \[`key`: `` `int184[${string}]` ``]: `undefined`; \[`key`: `` `int192[${string}]` ``]: `undefined`; \[`key`: `` `int208[${string}]` ``]: `undefined`; \[`key`: `` `int216[${string}]` ``]: `undefined`; \[`key`: `` `int224[${string}]` ``]: `undefined`; \[`key`: `` `int232[${string}]` ``]: `undefined`; \[`key`: `` `int240[${string}]` ``]: `undefined`; \[`key`: `` `int248[${string}]` ``]: `undefined`; \[`key`: `` `int256[${string}]` ``]: `undefined`; \[`key`: `` `uint[${string}]` ``]: `undefined`; \[`key`: `` `uint32[${string}]` ``]: `undefined`; \[`key`: `` `uint200[${string}]` ``]: `undefined`; \[`key`: `` `uint24[${string}]` ``]: `undefined`; \[`key`: `` `uint40[${string}]` ``]: `undefined`; \[`key`: `` `uint48[${string}]` ``]: `undefined`; \[`key`: `` `uint56[${string}]` ``]: `undefined`; \[`key`: `` `uint64[${string}]` ``]: `undefined`; \[`key`: `` `uint72[${string}]` ``]: `undefined`; \[`key`: `` `uint80[${string}]` ``]: `undefined`; \[`key`: `` `uint104[${string}]` ``]: `undefined`; \[`key`: `` `uint112[${string}]` ``]: `undefined`; \[`key`: `` `uint120[${string}]` ``]: `undefined`; \[`key`: `` `uint128[${string}]` ``]: `undefined`; \[`key`: `` `uint136[${string}]` ``]: `undefined`; \[`key`: `` `uint144[${string}]` ``]: `undefined`; \[`key`: `` `uint152[${string}]` ``]: `undefined`; \[`key`: `` `uint160[${string}]` ``]: `undefined`; \[`key`: `` `uint168[${string}]` ``]: `undefined`; \[`key`: `` `uint176[${string}]` ``]: `undefined`; \[`key`: `` `uint184[${string}]` ``]: `undefined`; \[`key`: `` `uint192[${string}]` ``]: `undefined`; \[`key`: `` `uint208[${string}]` ``]: `undefined`; \[`key`: `` `uint216[${string}]` ``]: `undefined`; \[`key`: `` `uint224[${string}]` ``]: `undefined`; \[`key`: `` `uint232[${string}]` ``]: `undefined`; \[`key`: `` `uint240[${string}]` ``]: `undefined`; \[`key`: `` `uint248[${string}]` ``]: `undefined`; `address?`: `undefined`; `bool?`: `undefined`; `bytes?`: `undefined`; `bytes1?`: `undefined`; `bytes10?`: `undefined`; `bytes11?`: `undefined`; `bytes12?`: `undefined`; `bytes13?`: `undefined`; `bytes14?`: `undefined`; `bytes15?`: `undefined`; `bytes16?`: `undefined`; `bytes17?`: `undefined`; `bytes18?`: `undefined`; `bytes19?`: `undefined`; `bytes2?`: `undefined`; `bytes20?`: `undefined`; `bytes21?`: `undefined`; `bytes22?`: `undefined`; `bytes23?`: `undefined`; `bytes24?`: `undefined`; `bytes25?`: `undefined`; `bytes26?`: `undefined`; `bytes27?`: `undefined`; `bytes28?`: `undefined`; `bytes29?`: `undefined`; `bytes3?`: `undefined`; `bytes30?`: `undefined`; `bytes31?`: `undefined`; `bytes32?`: `undefined`; `bytes4?`: `undefined`; `bytes5?`: `undefined`; `bytes6?`: `undefined`; `bytes7?`: `undefined`; `bytes8?`: `undefined`; `bytes9?`: `undefined`; `int104?`: `undefined`; `int112?`: `undefined`; `int120?`: `undefined`; `int128?`: `undefined`; `int136?`: `undefined`; `int144?`: `undefined`; `int152?`: `undefined`; `int16?`: `undefined`; `int160?`: `undefined`; `int168?`: `undefined`; `int176?`: `undefined`; `int184?`: `undefined`; `int192?`: `undefined`; `int200?`: `undefined`; `int208?`: `undefined`; `int216?`: `undefined`; `int224?`: `undefined`; `int232?`: `undefined`; `int24?`: `undefined`; `int240?`: `undefined`; `int248?`: `undefined`; `int256?`: `undefined`; `int32?`: `undefined`; `int40?`: `undefined`; `int48?`: `undefined`; `int56?`: `undefined`; `int64?`: `undefined`; `int72?`: `undefined`; `int8?`: `undefined`; `int80?`: `undefined`; `int88?`: `undefined`; `int96?`: `undefined`; `string?`: `undefined`; `uint104?`: `undefined`; `uint112?`: `undefined`; `uint120?`: `undefined`; `uint128?`: `undefined`; `uint136?`: `undefined`; `uint144?`: `undefined`; `uint152?`: `undefined`; `uint16?`: `undefined`; `uint160?`: `undefined`; `uint168?`: `undefined`; `uint176?`: `undefined`; `uint184?`: `undefined`; `uint192?`: `undefined`; `uint200?`: `undefined`; `uint208?`: `undefined`; `uint216?`: `undefined`; `uint224?`: `undefined`; `uint232?`: `undefined`; `uint24?`: `undefined`; `uint240?`: `undefined`; `uint248?`: `undefined`; `uint256?`: `undefined`; `uint32?`: `undefined`; `uint40?`: `undefined`; `uint48?`: `undefined`; `uint56?`: `undefined`; `uint64?`: `undefined`; `uint72?`: `undefined`; `uint8?`: `undefined`; `uint80?`: `undefined`; `uint88?`: `undefined`; `uint96?`: `undefined`; }; } = \{ `account?`: `` `0x${string}` `` | `Account`; `connector?`: `Connector`; `domain?`: \{ `chainId?`: `number` | `bigint`; `name?`: `string`; `salt?`: `` `0x${string}` ``; `verifyingContract?`: `` `0x${string}` ``; `version?`: `string`; }; `message`: `Record`\<`string`, `unknown`>; `primaryType`: `string`; `types`: \{ \[`key`: `string`]: readonly `TypedDataParameter`\[]; \[`key`: `` `string[${string}]` ``]: `undefined`; \[`key`: `` `function[${string}]` ``]: `undefined`; \[`key`: `` `address[${string}]` ``]: `undefined`; \[`key`: `` `bytes32[${string}]` ``]: `undefined`; \[`key`: `` `uint256[${string}]` ``]: `undefined`; \[`key`: `` `bytes[${string}]` ``]: `undefined`; \[`key`: `` `uint8[${string}]` ``]: `undefined`; \[`key`: `` `uint88[${string}]` ``]: `undefined`; \[`key`: `` `bool[${string}]` ``]: `undefined`; \[`key`: `` `uint96[${string}]` ``]: `undefined`; \[`key`: `` `uint16[${string}]` ``]: `undefined`; \[`key`: `` `bytes4[${string}]` ``]: `undefined`; \[`key`: `` `bytes1[${string}]` ``]: `undefined`; \[`key`: `` `bytes2[${string}]` ``]: `undefined`; \[`key`: `` `bytes6[${string}]` ``]: `undefined`; \[`key`: `` `bytes5[${string}]` ``]: `undefined`; \[`key`: `` `bytes3[${string}]` ``]: `undefined`; \[`key`: `` `bytes10[${string}]` ``]: `undefined`; \[`key`: `` `bytes9[${string}]` ``]: `undefined`; \[`key`: `` `bytes11[${string}]` ``]: `undefined`; \[`key`: `` `bytes12[${string}]` ``]: `undefined`; \[`key`: `` `bytes20[${string}]` ``]: `undefined`; \[`key`: `` `bytes18[${string}]` ``]: `undefined`; \[`key`: `` `bytes7[${string}]` ``]: `undefined`; \[`key`: `` `bytes8[${string}]` ``]: `undefined`; \[`key`: `` `bytes13[${string}]` ``]: `undefined`; \[`key`: `` `bytes14[${string}]` ``]: `undefined`; \[`key`: `` `bytes15[${string}]` ``]: `undefined`; \[`key`: `` `bytes16[${string}]` ``]: `undefined`; \[`key`: `` `bytes17[${string}]` ``]: `undefined`; \[`key`: `` `bytes19[${string}]` ``]: `undefined`; \[`key`: `` `bytes21[${string}]` ``]: `undefined`; \[`key`: `` `bytes22[${string}]` ``]: `undefined`; \[`key`: `` `bytes23[${string}]` ``]: `undefined`; \[`key`: `` `bytes24[${string}]` ``]: `undefined`; \[`key`: `` `bytes25[${string}]` ``]: `undefined`; \[`key`: `` `bytes26[${string}]` ``]: `undefined`; \[`key`: `` `bytes27[${string}]` ``]: `undefined`; \[`key`: `` `bytes28[${string}]` ``]: `undefined`; \[`key`: `` `bytes29[${string}]` ``]: `undefined`; \[`key`: `` `bytes30[${string}]` ``]: `undefined`; \[`key`: `` `bytes31[${string}]` ``]: `undefined`; \[`key`: `` `int[${string}]` ``]: `undefined`; \[`key`: `` `int88[${string}]` ``]: `undefined`; \[`key`: `` `int32[${string}]` ``]: `undefined`; \[`key`: `` `int200[${string}]` ``]: `undefined`; \[`key`: `` `int8[${string}]` ``]: `undefined`; \[`key`: `` `int16[${string}]` ``]: `undefined`; \[`key`: `` `int24[${string}]` ``]: `undefined`; \[`key`: `` `int40[${string}]` ``]: `undefined`; \[`key`: `` `int48[${string}]` ``]: `undefined`; \[`key`: `` `int56[${string}]` ``]: `undefined`; \[`key`: `` `int64[${string}]` ``]: `undefined`; \[`key`: `` `int72[${string}]` ``]: `undefined`; \[`key`: `` `int80[${string}]` ``]: `undefined`; \[`key`: `` `int96[${string}]` ``]: `undefined`; \[`key`: `` `int104[${string}]` ``]: `undefined`; \[`key`: `` `int112[${string}]` ``]: `undefined`; \[`key`: `` `int120[${string}]` ``]: `undefined`; \[`key`: `` `int128[${string}]` ``]: `undefined`; \[`key`: `` `int136[${string}]` ``]: `undefined`; \[`key`: `` `int144[${string}]` ``]: `undefined`; \[`key`: `` `int152[${string}]` ``]: `undefined`; \[`key`: `` `int160[${string}]` ``]: `undefined`; \[`key`: `` `int168[${string}]` ``]: `undefined`; \[`key`: `` `int176[${string}]` ``]: `undefined`; \[`key`: `` `int184[${string}]` ``]: `undefined`; \[`key`: `` `int192[${string}]` ``]: `undefined`; \[`key`: `` `int208[${string}]` ``]: `undefined`; \[`key`: `` `int216[${string}]` ``]: `undefined`; \[`key`: `` `int224[${string}]` ``]: `undefined`; \[`key`: `` `int232[${string}]` ``]: `undefined`; \[`key`: `` `int240[${string}]` ``]: `undefined`; \[`key`: `` `int248[${string}]` ``]: `undefined`; \[`key`: `` `int256[${string}]` ``]: `undefined`; \[`key`: `` `uint[${string}]` ``]: `undefined`; \[`key`: `` `uint32[${string}]` ``]: `undefined`; \[`key`: `` `uint200[${string}]` ``]: `undefined`; \[`key`: `` `uint24[${string}]` ``]: `undefined`; \[`key`: `` `uint40[${string}]` ``]: `undefined`; \[`key`: `` `uint48[${string}]` ``]: `undefined`; \[`key`: `` `uint56[${string}]` ``]: `undefined`; \[`key`: `` `uint64[${string}]` ``]: `undefined`; \[`key`: `` `uint72[${string}]` ``]: `undefined`; \[`key`: `` `uint80[${string}]` ``]: `undefined`; \[`key`: `` `uint104[${string}]` ``]: `undefined`; \[`key`: `` `uint112[${string}]` ``]: `undefined`; \[`key`: `` `uint120[${string}]` ``]: `undefined`; \[`key`: `` `uint128[${string}]` ``]: `undefined`; \[`key`: `` `uint136[${string}]` ``]: `undefined`; \[`key`: `` `uint144[${string}]` ``]: `undefined`; \[`key`: `` `uint152[${string}]` ``]: `undefined`; \[`key`: `` `uint160[${string}]` ``]: `undefined`; \[`key`: `` `uint168[${string}]` ``]: `undefined`; \[`key`: `` `uint176[${string}]` ``]: `undefined`; \[`key`: `` `uint184[${string}]` ``]: `undefined`; \[`key`: `` `uint192[${string}]` ``]: `undefined`; \[`key`: `` `uint208[${string}]` ``]: `undefined`; \[`key`: `` `uint216[${string}]` ``]: `undefined`; \[`key`: `` `uint224[${string}]` ``]: `undefined`; \[`key`: `` `uint232[${string}]` ``]: `undefined`; \[`key`: `` `uint240[${string}]` ``]: `undefined`; \[`key`: `` `uint248[${string}]` ``]: `undefined`; `address?`: `undefined`; `bool?`: `undefined`; `bytes?`: `undefined`; `bytes1?`: `undefined`; `bytes10?`: `undefined`; `bytes11?`: `undefined`; `bytes12?`: `undefined`; `bytes13?`: `undefined`; `bytes14?`: `undefined`; `bytes15?`: `undefined`; `bytes16?`: `undefined`; `bytes17?`: `undefined`; `bytes18?`: `undefined`; `bytes19?`: `undefined`; `bytes2?`: `undefined`; `bytes20?`: `undefined`; `bytes21?`: `undefined`; `bytes22?`: `undefined`; `bytes23?`: `undefined`; `bytes24?`: `undefined`; `bytes25?`: `undefined`; `bytes26?`: `undefined`; `bytes27?`: `undefined`; `bytes28?`: `undefined`; `bytes29?`: `undefined`; `bytes3?`: `undefined`; `bytes30?`: `undefined`; `bytes31?`: `undefined`; `bytes32?`: `undefined`; `bytes4?`: `undefined`; `bytes5?`: `undefined`; `bytes6?`: `undefined`; `bytes7?`: `undefined`; `bytes8?`: `undefined`; `bytes9?`: `undefined`; `int104?`: `undefined`; `int112?`: `undefined`; `int120?`: `undefined`; `int128?`: `undefined`; `int136?`: `undefined`; `int144?`: `undefined`; `int152?`: `undefined`; `int16?`: `undefined`; `int160?`: `undefined`; `int168?`: `undefined`; `int176?`: `undefined`; `int184?`: `undefined`; `int192?`: `undefined`; `int200?`: `undefined`; `int208?`: `undefined`; `int216?`: `undefined`; `int224?`: `undefined`; `int232?`: `undefined`; `int24?`: `undefined`; `int240?`: `undefined`; `int248?`: `undefined`; `int256?`: `undefined`; `int32?`: `undefined`; `int40?`: `undefined`; `int48?`: `undefined`; `int56?`: `undefined`; `int64?`: `undefined`; `int72?`: `undefined`; `int8?`: `undefined`; `int80?`: `undefined`; `int88?`: `undefined`; `int96?`: `undefined`; `string?`: `undefined`; `uint104?`: `undefined`; `uint112?`: `undefined`; `uint120?`: `undefined`; `uint128?`: `undefined`; `uint136?`: `undefined`; `uint144?`: `undefined`; `uint152?`: `undefined`; `uint16?`: `undefined`; `uint160?`: `undefined`; `uint168?`: `undefined`; `uint176?`: `undefined`; `uint184?`: `undefined`; `uint192?`: `undefined`; `uint200?`: `undefined`; `uint208?`: `undefined`; `uint216?`: `undefined`; `uint224?`: `undefined`; `uint232?`: `undefined`; `uint24?`: `undefined`; `uint240?`: `undefined`; `uint248?`: `undefined`; `uint256?`: `undefined`; `uint32?`: `undefined`; `uint40?`: `undefined`; `uint48?`: `undefined`; `uint56?`: `undefined`; `uint64?`: `undefined`; `uint72?`: `undefined`; `uint8?`: `undefined`; `uint80?`: `undefined`; `uint88?`: `undefined`; `uint96?`: `undefined`; }; } ### Parameters #### props ##### prepareSignTypedDataParams (`variables`) => `Promise`\< \| `TSignTypedDataParams` \| \{ `signTypedDataParams`: `TSignTypedDataParams`; `variables`: `TVariables`; }> ##### sendSignedData (`args`) => `Promise`\<`TReturnValue`> ##### signTypedData? (`signTypedDataParams`) => `Promise`\<`` `0x${string}` ``> ### Returns `UseMutationResult`\<`TReturnValue`, `Error`, `TInputVariables`, `unknown`> [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useGetChannelManager ## Function: useGetChannelManager() ```ts function useGetChannelManager(params, options): UseGetChannelManagerResult; ``` Defined in: packages/sdk/src/comments/react/contract.ts:210 React hook to get the channel manager contract address ### Parameters #### params [`UseGetChannelManagerParams`](/sdk-reference/comments/react/type-aliases/UseGetChannelManagerParams.mdx) = `{}` The parameters for getting the channel manager #### options [`UseGetChannelManagerOptions`](/sdk-reference/comments/react/type-aliases/UseGetChannelManagerOptions.mdx) = `{}` The options for the query ### Returns [`UseGetChannelManagerResult`](/sdk-reference/comments/react/type-aliases/UseGetChannelManagerResult.mdx) The result of the query [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useGetComment ## Function: useGetComment() ```ts function useGetComment(params, options): UseGetCommentResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:129 React hook to get a comment by ID ### Parameters #### params [`UseGetCommentParams`](/sdk-reference/comments/react/type-aliases/UseGetCommentParams.mdx) The parameters for getting a comment #### options [`UseGetCommentOptions`](/sdk-reference/comments/react/type-aliases/UseGetCommentOptions.mdx) = `{}` The options for the query ### Returns [`UseGetCommentResult`](/sdk-reference/comments/react/type-aliases/UseGetCommentResult.mdx) The result of the query [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useGetCommentId ## Function: useGetCommentId() ```ts function useGetCommentId(params, options): UseGetCommentIdResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:169 React hook to get the ID for a comment before it is posted ### Parameters #### params [`UseGetCommentIdParams`](/sdk-reference/comments/react/type-aliases/UseGetCommentIdParams.mdx) The parameters for getting a comment ID #### options [`UseGetCommentIdOptions`](/sdk-reference/comments/react/type-aliases/UseGetCommentIdOptions.mdx) = `{}` The options for the query ### Returns [`UseGetCommentIdResult`](/sdk-reference/comments/react/type-aliases/UseGetCommentIdResult.mdx) The result of the query [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useGetContractName ## Function: useGetContractName() ```ts function useGetContractName(params, options): UseGetContractNameResult; ``` Defined in: packages/sdk/src/comments/react/contract.ts:81 React hook to get the contract name ### Parameters #### params [`UseGetContractNameParams`](/sdk-reference/comments/react/type-aliases/UseGetContractNameParams.mdx) = `{}` The parameters for getting the contract name #### options [`UseGetContractNameOptions`](/sdk-reference/comments/react/type-aliases/UseGetContractNameOptions.mdx) = `{}` The options for the query ### Returns [`UseGetContractNameResult`](/sdk-reference/comments/react/type-aliases/UseGetContractNameResult.mdx) The result of the query [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useGetContractVersion ## Function: useGetContractVersion() ```ts function useGetContractVersion(params, options): UseGetContractVersionResult; ``` Defined in: packages/sdk/src/comments/react/contract.ts:124 React hook to get the contract version ### Parameters #### params [`UseGetContractVersionParams`](/sdk-reference/comments/react/type-aliases/UseGetContractVersionParams.mdx) = `{}` The parameters for getting the contract version #### options [`UseGetContractVersionOptions`](/sdk-reference/comments/react/type-aliases/UseGetContractVersionOptions.mdx) = `{}` The options for the query ### Returns [`UseGetContractVersionResult`](/sdk-reference/comments/react/type-aliases/UseGetContractVersionResult.mdx) The result of the query [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useGetDeleteCommentHash ## Function: useGetDeleteCommentHash() ```ts function useGetDeleteCommentHash(params, options): UseGetDeleteCommentHashResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:422 React hook to get the hash for deleting a comment ### Parameters #### params [`UseGetDeleteCommentHashParams`](/sdk-reference/comments/react/type-aliases/UseGetDeleteCommentHashParams.mdx) The parameters for getting the delete comment hash #### options [`UseGetDeleteCommentHashOptions`](/sdk-reference/comments/react/type-aliases/UseGetDeleteCommentHashOptions.mdx) = `{}` The options for the query ### Returns [`UseGetDeleteCommentHashResult`](/sdk-reference/comments/react/type-aliases/UseGetDeleteCommentHashResult.mdx) The result of the query [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useGetDomainSeparator ## Function: useGetDomainSeparator() ```ts function useGetDomainSeparator(params, options): UseGetDomainSeparatorResult; ``` Defined in: packages/sdk/src/comments/react/contract.ts:167 React hook to get the EIP-712 domain separator ### Parameters #### params [`UseGetDomainSeparatorParams`](/sdk-reference/comments/react/type-aliases/UseGetDomainSeparatorParams.mdx) = `{}` The parameters for getting the domain separator #### options [`UseGetDomainSeparatorOptions`](/sdk-reference/comments/react/type-aliases/UseGetDomainSeparatorOptions.mdx) = `{}` The options for the query ### Returns [`UseGetDomainSeparatorResult`](/sdk-reference/comments/react/type-aliases/UseGetDomainSeparatorResult.mdx) The result of the query [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useGetEditCommentHash ## Function: useGetEditCommentHash() ```ts function useGetEditCommentHash(params, options): UseGetEditCommentHashResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:379 React hook to get the hash for editing a comment ### Parameters #### params [`UseGetEditCommentHashParams`](/sdk-reference/comments/react/type-aliases/UseGetEditCommentHashParams.mdx) The parameters for getting the edit comment hash #### options [`UseGetEditCommentHashOptions`](/sdk-reference/comments/react/type-aliases/UseGetEditCommentHashOptions.mdx) = `{}` The options for the query ### Returns [`UseGetEditCommentHashResult`](/sdk-reference/comments/react/type-aliases/UseGetEditCommentHashResult.mdx) The result of the query [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useGetNonce ## Function: useGetNonce() ```ts function useGetNonce(): (params) => Promise; ``` Defined in: packages/sdk/src/comments/react/comment.ts:269 React hook to get the nonce for the author and app signer ### Returns The result of the query ```ts (params): Promise; ``` Get the nonce for the author and app signer #### Parameters ##### params [`GetNonceParams`](/sdk-reference/comments/type-aliases/GetNonceParams.mdx) The parameters for getting a nonce #### Returns `Promise`\<`bigint`> The nonce [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useIsApproved ## Function: useIsApproved() ```ts function useIsApproved(params, options): UseIsApprovedResult; ``` Defined in: packages/sdk/src/comments/react/approval.ts:41 React hook to check if an app signer is approved for an author ### Parameters #### params [`UseIsApprovedParams`](/sdk-reference/comments/react/type-aliases/UseIsApprovedParams.mdx) The parameters for checking approval #### options [`UseIsApprovedOptions`](/sdk-reference/comments/react/type-aliases/UseIsApprovedOptions.mdx) = `{}` The options for the query ### Returns [`UseIsApprovedResult`](/sdk-reference/comments/react/type-aliases/UseIsApprovedResult.mdx) The result of the query [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / usePostComment ## Function: usePostComment() ```ts function usePostComment(options): UsePostCommentResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:59 React hook to post a comment as an author ### Parameters #### options [`UsePostCommentOptions`](/sdk-reference/comments/react/type-aliases/UsePostCommentOptions.mdx) = `{}` The options for the mutation ### Returns [`UsePostCommentResult`](/sdk-reference/comments/react/type-aliases/UsePostCommentResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / usePostCommentWithSig ## Function: usePostCommentWithSig() ```ts function usePostCommentWithSig(options): UsePostCommentWithSigResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:99 React hook to post a comment with author signature verification ### Parameters #### options [`UsePostCommentWithSigOptions`](/sdk-reference/comments/react/type-aliases/UsePostCommentWithSigOptions.mdx) = `{}` The options for the mutation ### Returns [`UsePostCommentWithSigResult`](/sdk-reference/comments/react/type-aliases/UsePostCommentWithSigResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useRevokeApproval ## Function: useRevokeApproval() ```ts function useRevokeApproval(options): UseRevokeApprovalResult; ``` Defined in: packages/sdk/src/comments/react/approval.ts:160 React hook to revoke an app signer approval directly as author ### Parameters #### options [`UseRevokeApprovalOptions`](/sdk-reference/comments/react/type-aliases/UseRevokeApprovalOptions.mdx) = `{}` The options for the mutation ### Returns [`UseRevokeApprovalResult`](/sdk-reference/comments/react/type-aliases/UseRevokeApprovalResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useRevokeApprovalWithSig ## Function: useRevokeApprovalWithSig() ```ts function useRevokeApprovalWithSig(options): UseRevokeApprovalWithSigResult; ``` Defined in: packages/sdk/src/comments/react/approval.ts:200 React hook to remove an app signer approval with signature verification ### Parameters #### options [`UseRevokeApprovalWithSigOptions`](/sdk-reference/comments/react/type-aliases/UseRevokeApprovalWithSigOptions.mdx) = `{}` The options for the mutation ### Returns [`UseRevokeApprovalWithSigResult`](/sdk-reference/comments/react/type-aliases/UseRevokeApprovalWithSigResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / useUpdateChannelContract ## Function: useUpdateChannelContract() ```ts function useUpdateChannelContract(options): UseUpdateChannelContractResult; ``` Defined in: packages/sdk/src/comments/react/contract.ts:48 React hook to update the channel manager contract address (only owner) ### Parameters #### options [`UseUpdateChannelContractOptions`](/sdk-reference/comments/react/type-aliases/UseUpdateChannelContractOptions.mdx) = `{}` The options for the mutation ### Returns [`UseUpdateChannelContractResult`](/sdk-reference/comments/react/type-aliases/UseUpdateChannelContractResult.mdx) The result of the mutation [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseAddApprovalOptions ## Type Alias: UseAddApprovalOptions ```ts type UseAddApprovalOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/comments/react/approval.ts:68 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseAddApprovalParams ## Type Alias: UseAddApprovalParams ```ts type UseAddApprovalParams = Omit; ``` Defined in: packages/sdk/src/comments/react/approval.ts:67 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseAddApprovalResult ## Type Alias: UseAddApprovalResult ```ts type UseAddApprovalResult = UseMutationResult; ``` Defined in: packages/sdk/src/comments/react/approval.ts:72 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseAddApprovalWithSigOptions ## Type Alias: UseAddApprovalWithSigOptions ```ts type UseAddApprovalWithSigOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/comments/react/approval.ts:104 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseAddApprovalWithSigParams ## Type Alias: UseAddApprovalWithSigParams ```ts type UseAddApprovalWithSigParams = Omit; ``` Defined in: packages/sdk/src/comments/react/approval.ts:100 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseAddApprovalWithSigResult ## Type Alias: UseAddApprovalWithSigResult ```ts type UseAddApprovalWithSigResult = UseMutationResult; ``` Defined in: packages/sdk/src/comments/react/approval.ts:112 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseDeleteCommentOptions ## Type Alias: UseDeleteCommentOptions ```ts type UseDeleteCommentOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/comments/react/comment.ts:196 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseDeleteCommentParams ## Type Alias: UseDeleteCommentParams ```ts type UseDeleteCommentParams = Omit; ``` Defined in: packages/sdk/src/comments/react/comment.ts:195 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseDeleteCommentResult ## Type Alias: UseDeleteCommentResult ```ts type UseDeleteCommentResult = UseMutationResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:200 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseDeleteCommentWithSigOptions ## Type Alias: UseDeleteCommentWithSigOptions ```ts type UseDeleteCommentWithSigOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/comments/react/comment.ts:232 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseDeleteCommentWithSigParams ## Type Alias: UseDeleteCommentWithSigParams ```ts type UseDeleteCommentWithSigParams = Omit; ``` Defined in: packages/sdk/src/comments/react/comment.ts:228 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseDeleteCommentWithSigResult ## Type Alias: UseDeleteCommentWithSigResult ```ts type UseDeleteCommentWithSigResult = UseMutationResult<{ txHash: Hex; }, Error, UseDeleteCommentWithSigParams>; ``` Defined in: packages/sdk/src/comments/react/comment.ts:236 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseEditCommentOptions ## Type Alias: UseEditCommentOptions ```ts type UseEditCommentOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/comments/react/comment.ts:330 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseEditCommentParams ## Type Alias: UseEditCommentParams ```ts type UseEditCommentParams = Omit; ``` Defined in: packages/sdk/src/comments/react/comment.ts:329 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseEditCommentResult ## Type Alias: UseEditCommentResult ```ts type UseEditCommentResult = UseMutationResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:334 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseEditCommentWithSigOptions ## Type Alias: UseEditCommentWithSigOptions ```ts type UseEditCommentWithSigOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/comments/react/comment.ts:293 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseEditCommentWithSigParams ## Type Alias: UseEditCommentWithSigParams ```ts type UseEditCommentWithSigParams = Omit; ``` Defined in: packages/sdk/src/comments/react/comment.ts:289 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseEditCommentWithSigResult ## Type Alias: UseEditCommentWithSigResult ```ts type UseEditCommentWithSigResult = UseMutationResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:301 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetChannelManagerOptions ## Type Alias: UseGetChannelManagerOptions ```ts type UseGetChannelManagerOptions = Omit, "queryKey" | "queryFn">; ``` Defined in: packages/sdk/src/comments/react/contract.ts:197 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetChannelManagerParams ## Type Alias: UseGetChannelManagerParams ```ts type UseGetChannelManagerParams = Omit; ``` Defined in: packages/sdk/src/comments/react/contract.ts:193 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetChannelManagerResult ## Type Alias: UseGetChannelManagerResult ```ts type UseGetChannelManagerResult = UseQueryResult; ``` Defined in: packages/sdk/src/comments/react/contract.ts:201 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetCommentIdOptions ## Type Alias: UseGetCommentIdOptions ```ts type UseGetCommentIdOptions = Omit, "queryKey" | "queryFn">; ``` Defined in: packages/sdk/src/comments/react/comment.ts:156 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetCommentIdParams ## Type Alias: UseGetCommentIdParams ```ts type UseGetCommentIdParams = Omit; ``` Defined in: packages/sdk/src/comments/react/comment.ts:155 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetCommentIdResult ## Type Alias: UseGetCommentIdResult ```ts type UseGetCommentIdResult = UseQueryResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:160 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetCommentOptions ## Type Alias: UseGetCommentOptions ```ts type UseGetCommentOptions = Omit, "queryKey" | "queryFn">; ``` Defined in: packages/sdk/src/comments/react/comment.ts:116 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetCommentParams ## Type Alias: UseGetCommentParams ```ts type UseGetCommentParams = Omit; ``` Defined in: packages/sdk/src/comments/react/comment.ts:115 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetCommentResult ## Type Alias: UseGetCommentResult ```ts type UseGetCommentResult = UseQueryResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:120 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetContractNameOptions ## Type Alias: UseGetContractNameOptions ```ts type UseGetContractNameOptions = Omit, "queryKey" | "queryFn">; ``` Defined in: packages/sdk/src/comments/react/contract.ts:68 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetContractNameParams ## Type Alias: UseGetContractNameParams ```ts type UseGetContractNameParams = Omit; ``` Defined in: packages/sdk/src/comments/react/contract.ts:64 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetContractNameResult ## Type Alias: UseGetContractNameResult ```ts type UseGetContractNameResult = UseQueryResult; ``` Defined in: packages/sdk/src/comments/react/contract.ts:72 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetContractVersionOptions ## Type Alias: UseGetContractVersionOptions ```ts type UseGetContractVersionOptions = Omit, "queryKey" | "queryFn">; ``` Defined in: packages/sdk/src/comments/react/contract.ts:111 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetContractVersionParams ## Type Alias: UseGetContractVersionParams ```ts type UseGetContractVersionParams = Omit; ``` Defined in: packages/sdk/src/comments/react/contract.ts:107 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetContractVersionResult ## Type Alias: UseGetContractVersionResult ```ts type UseGetContractVersionResult = UseQueryResult; ``` Defined in: packages/sdk/src/comments/react/contract.ts:115 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetDeleteCommentHashOptions ## Type Alias: UseGetDeleteCommentHashOptions ```ts type UseGetDeleteCommentHashOptions = Omit, "queryKey" | "queryFn">; ``` Defined in: packages/sdk/src/comments/react/comment.ts:409 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetDeleteCommentHashParams ## Type Alias: UseGetDeleteCommentHashParams ```ts type UseGetDeleteCommentHashParams = Omit; ``` Defined in: packages/sdk/src/comments/react/comment.ts:405 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetDeleteCommentHashResult ## Type Alias: UseGetDeleteCommentHashResult ```ts type UseGetDeleteCommentHashResult = UseQueryResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:413 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetDomainSeparatorOptions ## Type Alias: UseGetDomainSeparatorOptions ```ts type UseGetDomainSeparatorOptions = Omit, "queryKey" | "queryFn">; ``` Defined in: packages/sdk/src/comments/react/contract.ts:154 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetDomainSeparatorParams ## Type Alias: UseGetDomainSeparatorParams ```ts type UseGetDomainSeparatorParams = Omit; ``` Defined in: packages/sdk/src/comments/react/contract.ts:150 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetDomainSeparatorResult ## Type Alias: UseGetDomainSeparatorResult ```ts type UseGetDomainSeparatorResult = UseQueryResult; ``` Defined in: packages/sdk/src/comments/react/contract.ts:158 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetEditCommentHashOptions ## Type Alias: UseGetEditCommentHashOptions ```ts type UseGetEditCommentHashOptions = Omit, "queryKey" | "queryFn">; ``` Defined in: packages/sdk/src/comments/react/comment.ts:366 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetEditCommentHashParams ## Type Alias: UseGetEditCommentHashParams ```ts type UseGetEditCommentHashParams = Omit; ``` Defined in: packages/sdk/src/comments/react/comment.ts:362 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseGetEditCommentHashResult ## Type Alias: UseGetEditCommentHashResult ```ts type UseGetEditCommentHashResult = UseQueryResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:370 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseIsApprovedOptions ## Type Alias: UseIsApprovedOptions ```ts type UseIsApprovedOptions = Omit, "queryKey" | "queryFn">; ``` Defined in: packages/sdk/src/comments/react/approval.ts:28 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseIsApprovedParams ## Type Alias: UseIsApprovedParams ```ts type UseIsApprovedParams = Omit; ``` Defined in: packages/sdk/src/comments/react/approval.ts:27 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseIsApprovedResult ## Type Alias: UseIsApprovedResult ```ts type UseIsApprovedResult = UseQueryResult; ``` Defined in: packages/sdk/src/comments/react/approval.ts:32 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UsePostCommentOptions ## Type Alias: UsePostCommentOptions ```ts type UsePostCommentOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/comments/react/comment.ts:43 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UsePostCommentParams ## Type Alias: UsePostCommentParams ```ts type UsePostCommentParams = Omit; ``` Defined in: packages/sdk/src/comments/react/comment.ts:42 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UsePostCommentResult ## Type Alias: UsePostCommentResult ```ts type UsePostCommentResult = UseMutationResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:47 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UsePostCommentWithSigOptions ## Type Alias: UsePostCommentWithSigOptions ```ts type UsePostCommentWithSigOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/comments/react/comment.ts:79 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UsePostCommentWithSigParams ## Type Alias: UsePostCommentWithSigParams ```ts type UsePostCommentWithSigParams = Omit; ``` Defined in: packages/sdk/src/comments/react/comment.ts:75 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UsePostCommentWithSigResult ## Type Alias: UsePostCommentWithSigResult ```ts type UsePostCommentWithSigResult = UseMutationResult; ``` Defined in: packages/sdk/src/comments/react/comment.ts:87 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseRevokeApprovalOptions ## Type Alias: UseRevokeApprovalOptions ```ts type UseRevokeApprovalOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/comments/react/approval.ts:144 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseRevokeApprovalParams ## Type Alias: UseRevokeApprovalParams ```ts type UseRevokeApprovalParams = Omit; ``` Defined in: packages/sdk/src/comments/react/approval.ts:140 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseRevokeApprovalResult ## Type Alias: UseRevokeApprovalResult ```ts type UseRevokeApprovalResult = UseMutationResult; ``` Defined in: packages/sdk/src/comments/react/approval.ts:148 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseRevokeApprovalWithSigOptions ## Type Alias: UseRevokeApprovalWithSigOptions ```ts type UseRevokeApprovalWithSigOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/comments/react/approval.ts:180 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseRevokeApprovalWithSigParams ## Type Alias: UseRevokeApprovalWithSigParams ```ts type UseRevokeApprovalWithSigParams = Omit; ``` Defined in: packages/sdk/src/comments/react/approval.ts:176 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseRevokeApprovalWithSigResult ## Type Alias: UseRevokeApprovalWithSigResult ```ts type UseRevokeApprovalWithSigResult = UseMutationResult; ``` Defined in: packages/sdk/src/comments/react/approval.ts:188 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseUpdateChannelContractOptions ## Type Alias: UseUpdateChannelContractOptions ```ts type UseUpdateChannelContractOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/comments/react/contract.ts:28 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseUpdateChannelContractParams ## Type Alias: UseUpdateChannelContractParams ```ts type UseUpdateChannelContractParams = Omit; ``` Defined in: packages/sdk/src/comments/react/contract.ts:24 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments/react](/sdk-reference/comments/react/index.mdx) / UseUpdateChannelContractResult ## Type Alias: UseUpdateChannelContractResult ```ts type UseUpdateChannelContractResult = UseMutationResult; ``` Defined in: packages/sdk/src/comments/react/contract.ts:36