# 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 Channel creation is currently free. The protocol retains the ability to introduce a channel creation fee in the future if needed for spam prevention, which can be checked by calling `getChannelCreationFee` from the SDK. Together with [hooks](/hooks), channels create a flexible system for building onchain communities and apps with customizable rules. ### 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/snippets). ### 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/snippets/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/snippets/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/snippets) ## 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): ``` eip155:1/erc721:0xa723a8a69d9b8cf0bc93b92f9cb41532c1a27f8f/11 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 where a user signs a one-time approval transaction, and the app can post comments on their behalf without requiring the user to sign each comment. 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 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, the app can post comments on the user’s behalf. This is done using the `withSig` methods (e.g. `postCommentWithSig`), where: * The **author signature can be omitted** (pass an empty string). * The app signature is required, and the transaction can be sent by any relayer (this enables gasless UX) or the app itself. ```typescript await postCommentWithSig({ author, app, content, // authorSignature: omitted appSignature, ... }); ``` > 🔒 **Note:** The simpler `postComment` method is **not suitable** for use with approvals, because it must be called directly by the author and cannot rely on app-level delegation. #### Without Approval If no approval exists, comments must be signed by both the app and the 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 and submitted the 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. ### Does ECP support reposting or quoting an existing comment? If we define a **repost** as re-publishing an existing comment *without adding any new content*—while preserving the original comment’s text, author, and metadata—then yes:\ a repost is represented as a **reaction comment** (`commentType = 1`, see [commentType](./comment-data-props.mdx#commentType)) with the `content` field set to `"repost"`.\ It is then up to the indexer and client UI to render the repost appropriately. A **quote-post**, however, is usually more complex. Many platforms treat a quote-post as a way to **add commentary to the original comment**.\ Our recommended approach is described in the [ECPIP draft spec](https://github.com/ecp-eth/ECPIP/discussions/2).\ In short, a quote-post is created by including [CAIP-373 URIs](https://chainagnostic.org/CAIPs/caip-373) in the `content` field of the comment (`commentType = 0`).\ The client should extract the CAIP-373 URIs from the `content` field and render both the original comment and the accompanying commentary. Here is an example of quote-post comment data: ```json { "commentType": 0, "content": "Key insight:\n\neip155:8453:0xb262C9278fBcac384Ef59Fc49E24d800152E19b1:call:0x8c20d5876bbab7fa5d988676b01e9b5b72913319de5b835063fa8751ea1155078de81034" } ``` * [ECPIP draft spec](https://github.com/ecp-eth/ECPIP/discussions/2). * [CAIP-373 URIs](https://chainagnostic.org/CAIPs/caip-373) 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 For detailed information about protocol fees, including hook fees, see the [Protocol Fees](/protocol-fee) page. ### 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 ### Bypassing Moderation for Immediate Display If you want comments to appear immediately in your application without waiting for moderation approval, you can bypass the moderation system by including both approved and pending comments in your queries: #### Using the SDK ```typescript import { fetchComments } from "@ecp.eth/sdk/indexer"; const comments = await fetchComments({ moderationStatus: ["approved", "pending"], // Show comments immediately chainId: 8453, }); ``` #### Using the REST API ```bash curl "https://api.ethcomments.xyz/api/comments?chainId=8453&moderationStatus=approved,pending" ``` This approach allows you to display comments as soon as they are posted while still maintaining the ability to remove inappropriate content through the moderation system if needed. ### 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 ## Protocol Fees The protocol implements several fee mechanisms: 1. Channel Creation Fee (default: 0 - free) * Channel creation is currently free * Can be adjusted by the protocol owner if needed in the future * Can be retrieved by calling `getChannelCreationFee()`\[/protocol-reference/ProtocolFees#getchannelcreationfee--uint96-external] on `ChannelManager` 2. Comment Creation Fee (default: 0) * Can be enabled for spam prevention * Set by the protocol owner * Can be retrieved by calling `getCommentCreationFee()`\[/protocol-reference/ProtocolFees#getcommentcreationfee--uint96-external] on `ChannelManager` 3. Hook Transaction Fee (default: 2%) * Applied to the total fee passed to hooks * Measured in basis points (1 bp = 0.01%) * This fee is used to support the protocol's development and maintenance * The remaining value is passed to the hook as the `hook fee` 4. Hook Fee * The hook contract may or may not implement a fee mechanism * How the fee is taken is entirely up to the hook contract implementation * There is currently no standard way to retrieve the hook fee value * **We are working on an SDK helper function** to estimate the required fee based on known hook contracts ### Calculating fee required for posting a comment > ⚠️ Before you dive into the details, please note that we've implemented helper functions to calculate the total fee required for posting/editing a comment on a channel. > Please see the links at the end of this section. When posting a comment (including replies), the fee consists of the `comment creation fee` and the `total fee passed to the hook`. ``` Total fee required = Comment creation fee + Total fee passed to the hook ``` The `total fee passed to the hook` is calculated as follows: ``` Total fee passed to the hook = fee required by the hook / (1 - Hook transaction fee) ``` ### SDK Helper Functions We’ve added helper functions to simplify fee calculations when posting or editing comments in a channel. Instead of manually gathering all the required details, these helpers handle the logic for you and return the total fee directly. * [estimateChannelPostCommentFee](https://comments-monorepo-docs-git-feat-estimatable-hook-discove.vercel.app/sdk-reference/channel-manager/functions/estimateChannelPostCommentFee) * [estimateChannelEditCommentFee](https://comments-monorepo-docs-git-feat-estimatable-hook-discove.vercel.app/sdk-reference/channel-manager/functions/estimateChannelEditCommentFee) Example of using the helper functions can be found in the [examples](https://github.com/ecp-eth/comments-monorepo/tree/main/examples/snippets/typescript/retrieve-estimatable-channel-hook-fee-via-sdk.ts) #### Example: Calculating fee required for posting a comment on the "Takes" channel Let's use the "Takes" channel used by [interface.social](https://interface.social) as an example. Here are the steps required to calculate the total fee needed to post a comment: ```typescript ... // 1. Get the comment creation fee required by the protocol const { fee: commentCreationFee } = await getCommentCreationFee({ readContract: publicClient.readContract, }); console.log("Comment creation fee:", commentCreationFee); // 2. Get the hook address from the channel const channel = await getChannel({ channelId, readContract: publicClient.readContract, }); console.log("Channel hook address:", channel.hook); // if the channel has no hook, use the comment creation fee as the total fee required if (!channel.hook) { return commentCreationFee; } // 3. Get the hook transaction fee required by the protocol const { fee: transactionHookFee } = await getHookTransactionFee({ readContract: publicClient.readContract, }); console.log("Transaction hook fee:", transactionHookFee); // 4. Since we know the hook is a "Takes" channel hook, we know they have a // commentFee function to retrieve the fee required by the hook const takesChannelHookCommentFeeABI = parseAbi([ "function commentFee() view returns (uint256)", ]); const hookCommentFee = await publicClient.readContract({ abi: takesChannelHookCommentFeeABI, address: channel.hook ?? never('hook address not found'), functionName: "commentFee", }); console.log("Hook comment fee:", hookCommentFee); // 5. Calculate the total fee required const totalFee = commentCreationFee + (hookCommentFee * 10000n) / BigInt(10000 - transactionHookFee); console.log("Total fee required:", totalFee); return totalFee; ``` For full examples, please refer to the [examples](https://github.com/ecp-eth/comments-monorepo/tree/main/examples/snippets/typescript/retrieve-takes-channel-hook-post-fee.ts) ## 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 } } ``` Search comments by content using `content_contains`: ```bash curl -X POST https://api.ethcomments.xyz/graphql \ -H "Content-Type: application/json" \ -d '{"query":"query MyQuery { comments(where: {content_contains: \"build\"}) { items { id content } } }"}' ``` **Important**: The hosted indexer has moderation enabled by default. If you want comments to appear immediately without waiting for moderation approval, you can filter by moderation status in your GraphQL queries: ```graphql query { comments( where: { OR: [{ moderationStatus: "approved" }, { moderationStatus: "pending" }] } limit: 10 ) { items { id content moderationStatus } } } ``` ### 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) ##### TypeScript SDK You can query the Indexer directly from your app using our TypeScript SDK: :::code-group ```bash [npm] npm install @ecp.eth/sdk ``` ```bash [yarn] yarn add @ecp.eth/sdk ``` ```bash [pnpm] pnpm add @ecp.eth/sdk ``` ::: * [Integration guide](https://docs.ethcomments.xyz/integration-options/typescript-sdk) * [Indexer SDK reference](https://docs.ethcomments.xyz/sdk-reference/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 See [Protocol Fees](/protocol-fee.mdx) for more information. #### 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 ``` #### 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 ## Integration Options ### Indexer Webhooks Manage your apps, webhooks, and deliveries at `https://dashboard.ethcomments.xyz`. #### What you configure * **App**: A container for your webhooks. Each app has a generated secret used to sign deliveries. * **Webhook**: Subscribes to one or more event types and delivers to your HTTPS endpoint. Supports auth (no auth, HTTP Basic, or a custom header). * **Deliveries**: Individual attempts to send an event to your endpoint. Logged with status, response code, and retries. #### Delivery semantics * **Ordering**: In-order delivery per webhook subscription (FIFO per subscription identifier). * **Non-blocking**: A failed delivery does not block subsequent events for that subscription. * **Retries**: Failed deliveries are retried with exponential backoff up to 20 total attempts. * **Timeouts**: Request timeout is 5 seconds per attempt. * **Success**: Any 2xx–3xx status code is treated as success; redirects are not followed. * **Idempotency**: Each event includes a `uid` you can use to deduplicate. #### Event schema and SDK Use the SDK to parse and verify webhook requests and access strongly typed events. * SDK reference: see [@ecp.eth/sdk/indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx). * Functions: [`constructEventFromRequest`](/sdk-reference/indexer/webhooks/functions/constructEventFromRequest.mdx), [`constructEvent`](/sdk-reference/indexer/webhooks/functions/constructEvent.mdx) * Event types and schemas: see the [Type Aliases](/sdk-reference/indexer/webhooks/index.mdx#type-aliases) and [Variables](/sdk-reference/indexer/webhooks/index.mdx#variables) on the same page (e.g., [`CommentAddedEvent`](/sdk-reference/indexer/webhooks/type-aliases/CommentAddedEvent.mdx), [`ChannelCreatedEvent`](/sdk-reference/indexer/webhooks/type-aliases/ChannelCreatedEvent.mdx), etc.). ##### Verify and parse in a Next.js/Fetch handler ```ts import { constructEventFromRequest } from "@ecp.eth/sdk/indexer/webhooks"; export async function POST(request: Request) { // Your app secret from the Indexer App dashboard const event = await constructEventFromRequest({ appSecret: process.env.APP_SECRET!, request, }); switch (event.event) { case "comment:added": // handle event.data break; case "channel:created": // ... break; } return new Response("ok"); } ``` ##### Verify and parse with raw headers/body ```ts import { constructEvent } from "@ecp.eth/sdk/indexer/webhooks"; export async function POST(request: Request) { const body = await request.text(); const signature = request.headers.get("x-ecp-webhook-signature")!; const timestamp = request.headers.get("x-ecp-webhook-timestamp")!; const event = constructEvent({ appSecret: process.env.APP_SECRET!, requestBody: body, requestSignature: signature, requestTimestamp: timestamp, }); return new Response("ok"); } ``` See the SDK pages for the exact shapes of all events and fields. #### Authentication to your endpoint * **No auth**: No headers added by the Indexer. * **HTTP Basic**: We will send the `Authorization: Basic ...` header you configure. * **Custom header**: Provide a name and value; we will include that header with every delivery. Configure these per webhook in the dashboard at `https://dashboard.ethcomments.xyz`. #### Data stored and retention * We store the app name and its generated secret key. * For each webhook: name, endpoint URL, subscribed event types, selected authentication config, and delivery logs. * When you delete a webhook, its delivery logs are deleted. When you delete an app, its webhooks and logs are deleted. #### Recommendations * Validate the signature for each request using the SDK. * Use `uid` for idempotency to safely handle retries. * Respond quickly (under 5s) and perform heavy work asynchronously. * Make your endpoint highly available and accept JSON requests over HTTPS. #### Managing and testing * Create apps, add webhooks, and view delivery logs at `https://dashboard.ethcomments.xyz`. * Use the dashboard to send a "Test" event to verify your endpoint. The test payload type is documented at [`TestEvent`](/sdk-reference/indexer/webhooks/type-aliases/TestEvent.mdx). 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

); } ``` ##### Showing All Comments (Bypassing Moderation Filter) When moderation is enabled, only approved comments are shown by default. Pass `moderationStatus` to include pending or rejected comments: ```tsx twoslash /// // ---cut--- import React from "react"; import { CommentsEmbed } from "@ecp.eth/sdk/embed"; export function AdminComments() { return ( ); } ``` * 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 ## Share to ECP [share.ethcomments.xyz](https://share.ethcomments.xyz) is a ready-to-use posting tool for ECP. The easiest way to add commenting to your project is to link to share.ethcomments.xyz, prefilling the content via URL query parameters. ```html ECP Logo Share ``` ### URL Structure Share.ethcomments.xyz accepts query parameters to prefill the comment form: #### Basic Parameters (all optional) * `targetUri` - The target URL for the comment * `channelId` - The channel ID to select * `content` - The comment content/text * `metadata` - The comment metadata ### Examples #### Simple Comment with Target URL ``` https://share.ethcomments.xyz/?targetUri=https://example.com&content=Great%20article! ``` #### Comment with Channel and Metadata ``` https://share.ethcomments.xyz/?targetUri=https://example.com&channelId=123&content=Amazing%20content&metadata=category:review:string ``` #### Comment with Multiple Metadata Entries ``` https://share.ethcomments.xyz/?targetUri=https://example.com&metadata=category:review:string,rating:5:uint256,author:john:string ``` ### URL Encoding Remember to URL encode your parameters, especially for: * URLs in `targetUri` * Special characters in content The form will automatically decode URL-encoded values. ### Source code share.ethcomments.xyz is [MIT licensed and available on GitHub](https://github.com/ecp-eth/share.ethcomments.xyz) ## 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/examples/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", chainId: 8453, }); console.log("Comments:", comments); ``` **Important**: The hosted indexer has moderation enabled by default. If you want comments to appear immediately without waiting for moderation approval, add `moderationStatus: ["approved", "pending"]` to your query parameters. This will show both approved comments and comments pending moderation review. ```ts const comments = await fetchComments({ moderationStatus: ["approved", "pending"], chainId: 8453, }); ``` 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). See an example of the React Editor in action at [share.ethcomments.xyz](https://share.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 (Web) ```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")} /> ); } ``` ### React Native Usage The editor also supports React Native! Import the native version and wrap your app with `PortalProvider`: ```tsx import { Editor, type EditorRef } from "@ecp.eth/react-editor/editor.native"; import { PortalProvider } from "@gorhom/portal"; import { useIndexerSuggestions } from "@ecp.eth/react-editor/hooks"; import { usePinataUploadFiles } from "@ecp.eth/react-editor/hooks"; function App() { return ( ); } function CommentEditor() { const editorRef = useRef(null); const suggestions = useIndexerSuggestions(); const uploads = usePinataUploadFiles(); return ( console.log("Editor lost focus")} /> ); } ``` **Important:** The `PortalProvider` from `@gorhom/portal` is required for React Native to ensure the suggestion UI displays correctly. Make sure to wrap your app (or at least the component tree containing the editor) with `PortalProvider`. ### 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 = await editorRef.current?.getUploadedFiles(); // Get files pending upload const pendingFiles = await 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://api.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 #### Web (React) * `@tanstack/react-query` >= 5.0.0 * `pinata` ^2.5.0 * `react` 18 || 19 * `react-dom` 18 || 19 * `viem` ^2.29.2 #### React Native All web dependencies plus: * `@gorhom/portal` >= 1.0.14 (required for suggestion UI) * `react-native` >= 0.81.0 * `react-native-safe-area-context` >= 5.6.0 * `react-native-reanimated` >= 4.1.1 * `react-native-webview` >= 13.16.0 * `react-native-worklets` >= 0.7.1 ### 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 | | [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) | Ethereum Comments Protocol SDK Indexer Functionality for constructing events from webhook requests. | {/* !!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/examples/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%2Ftree%2Ftemplate-signer-api\&env=RPC_URL_8453,APP_SIGNER_PRIVATE_KEY,COMMENTS_INDEXER_URL\&envDescription=For%20detailed%20Environment%20Variables%20configuration%20please%20see%3A\&envLink=https%3A%2F%2Fdocs.ethcomments.xyz%2Fdemos%2Fsigner-api-service%23environment-variables\&project-name=signer-api-service\&repository-name=signer-api-service) ##### Manual Setup 1. **Clone and install dependencies:** ```bash git clone https://github.com/ecp-eth/comments-monorepo.git cd examples/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/ecp-eth/comments-monorepo/tree/main/examples/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 *** ## `BroadcastHook` Hook that gates channels to only allow whitelisted creators to create channels and post top-level comments. Similar to TokenCreatorHook but uses a whitelist instead of token ownership ### Events #### `ChannelCreated(uint256 channelId, address creator, string name, string description, [struct Metadata.MetadataEntry[]](/protocol-reference/types/Metadata#metadataentry) metadata)` Event emitted when a channel is created #### `WhitelistModeSet(bool enabled)` Event emitted when whitelist mode is toggled #### `WhitelistStatusChanged(address user, bool isWhitelisted)` Event emitted when an address is whitelisted/unwhitelisted ### Functions #### constructor(address \_channelManager) (public) #### createChannel(string name, string description, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata) → uint256 (external) Create a new channel #### setWhitelistMode(bool enabled) (external) Enable or disable whitelist mode #### setWhitelistStatus(address user, bool status) (external) Add or remove an address from the whitelist #### isWhitelisted(address user) → bool (external) Check if an address is whitelisted #### \_getHookPermissions() → [struct Hooks.Permissions](/protocol-reference/types/Hooks#permissions) (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) #### onERC721Received(address, address, uint256, bytes) → bytes4 (external) Allows the contract to receive ERC721 tokens #### receive() (external) Allows the contract to receive ETH ##### @ecp.eth/protocol *** ## `NoFeeHook` Abstract base contract for hooks that do not require a fee. Only derive from this contract if the hook absolutely does not require a fee. ### Functions #### supportsInterface(bytes4 interfaceId) → bool (public) #### estimateAddCommentFee([struct Comments.Comment](/protocol-reference/types/Comments#comment), [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry), address) → [struct FeeEstimatable.FeeEstimation](/protocol-reference/types/FeeEstimatable#feeestimation) feeEstimation (external) #### estimateEditCommentFee([struct Comments.Comment](/protocol-reference/types/Comments#comment), [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry), address) → [struct FeeEstimatable.FeeEstimation](/protocol-reference/types/FeeEstimatable#feeestimation) feeEstimation (external) ##### @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 *** ## `IFeeEstimatableHook` ### Functions #### estimateAddCommentFee([struct Comments.Comment](/protocol-reference/types/Comments#comment) commentData, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata, address msgSender) → [struct FeeEstimatable.FeeEstimation](/protocol-reference/types/FeeEstimatable#feeestimation) feeEstimation (external) Should return the fee estimation for adding a comment #### estimateEditCommentFee([struct Comments.Comment](/protocol-reference/types/Comments#comment) commentData, [struct Metadata.MetadataEntry\[\]](/protocol-reference/types/Metadata#metadataentry) metadata, address msgSender) → [struct FeeEstimatable.FeeEstimation](/protocol-reference/types/FeeEstimatable#feeestimation) feeEstimation (external) Should return the fee estimation for editing a comment ##### @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 *** ## `FeeEstimatable` ### Structs #### `FeeEstimation` Details of a fee estimation * **amount:** (uint256) The fee required for the specific comment action * **asset:** (address) The address of the asset, use 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE for the native token * **description:** (string) A description of the hook's behaviour, gating rules and any fee that can be shown by apps to the user * **metadata:** (struct Metadata.MetadataEntry\[]) Additional app-specific data of the estimation ##### @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) | - | | [GetCommentCreationFeeParams](/sdk-reference/channel-manager/type-aliases/GetCommentCreationFeeParams.mdx) | - | | [GetCommentCreationFeeResult](/sdk-reference/channel-manager/type-aliases/GetCommentCreationFeeResult.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) | - | | [SetCommentCreationFeeParams](/sdk-reference/channel-manager/type-aliases/SetCommentCreationFeeParams.mdx) | - | | [SetCommentCreationFeeResult](/sdk-reference/channel-manager/type-aliases/SetCommentCreationFeeResult.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 | | [createEstimateChannelPostOrEditCommentFeeData](/sdk-reference/channel-manager/functions/createEstimateChannelPostOrEditCommentFeeData.mdx) | - | | [deductProtocolHookTransactionFee](/sdk-reference/channel-manager/functions/deductProtocolHookTransactionFee.mdx) | Calculates the hook transaction fee by deducting the protocol fee | | [estimateChannelEditCommentFee](/sdk-reference/channel-manager/functions/estimateChannelEditCommentFee.mdx) | Best-effort estimation of the total fee for editing a comment to a channel | | [estimateChannelPostCommentFee](/sdk-reference/channel-manager/functions/estimateChannelPostCommentFee.mdx) | Best-effort estimation of the total fee for posting a comment to a channel | | [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 | | [getCommentCreationFee](/sdk-reference/channel-manager/functions/getCommentCreationFee.mdx) | Get the creation fee from channel manager | | [getEstimatedChannelEditCommentHookFee](/sdk-reference/channel-manager/functions/getEstimatedChannelEditCommentHookFee.mdx) | It calls the `estimateEditCommentFee` function on the hook to retrieve the estimated fee for editing a comment to a channel. It also tries to probe if the hook is any known legacy hook and return corresponding fee estimation. For estimation of total fee, use the `estimateChannelEditCommentFee` helper | | [getEstimatedChannelPostCommentHookFee](/sdk-reference/channel-manager/functions/getEstimatedChannelPostCommentHookFee.mdx) | It calls the `estimateAddCommentFee` function on the hook to retrieve the estimated fee for posting a comment to a channel. It also tries to probe if the hook is any known legacy hook and return corresponding fee estimation. For estimation of total fee, use the `estimateChannelPostCommentFee` helper | | [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 | | [setCommentCreationFee](/sdk-reference/channel-manager/functions/setCommentCreationFee.mdx) | Set the fee for creating a new comment | | [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 #### BaseHookABIType Re-exports [BaseHookABIType](/sdk-reference/channel-manager/types/type-aliases/BaseHookABIType.mdx) *** #### 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) *** #### ContractBasedAssetERCType Re-exports [ContractBasedAssetERCType](/sdk-reference/channel-manager/types/type-aliases/ContractBasedAssetERCType.mdx) *** #### ContractBasedAssetType Re-exports [ContractBasedAssetType](/sdk-reference/channel-manager/types/type-aliases/ContractBasedAssetType.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) *** #### HookContractReadFunctions Re-exports [HookContractReadFunctions](/sdk-reference/channel-manager/types/type-aliases/HookContractReadFunctions.mdx) *** #### HookFeeEstimation Re-exports [HookFeeEstimation](/sdk-reference/channel-manager/types/type-aliases/HookFeeEstimation.mdx) *** #### TotalFeeEstimation Re-exports [TotalFeeEstimation](/sdk-reference/channel-manager/types/type-aliases/TotalFeeEstimation.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) | - | ### Classes | Class | Description | | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | [CAIP373Error](/sdk-reference/comments/classes/CAIP373Error.mdx) | Base error for CAIP-373 errors | | [InvalidCommentIdError](/sdk-reference/comments/classes/InvalidCommentIdError.mdx) | Error thrown when the comment id is invalid | | [InvalidCommentManagerAddressError](/sdk-reference/comments/classes/InvalidCommentManagerAddressError.mdx) | Error thrown when the comment manager address is not the same as the chain's comment manager address | | [InvalidFunctionCallDataError](/sdk-reference/comments/classes/InvalidFunctionCallDataError.mdx) | Error thrown when the function call data is invalid | | [MalformedCaip373Error](/sdk-reference/comments/classes/MalformedCaip373Error.mdx) | Error thrown when the CAIP-373 is malformed | | [UnsupportedChainError](/sdk-reference/comments/classes/UnsupportedChainError.mdx) | Error thrown when the chain is unsupported | ### 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) | - | | [CAIP373QuotedComment](/sdk-reference/comments/type-aliases/CAIP373QuotedComment.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 | | [DecodedQuotedCommentFromCaip373Result](/sdk-reference/comments/type-aliases/DecodedQuotedCommentFromCaip373Result.mdx) | - | | [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) | - | | [MetadataKeyDefinition](/sdk-reference/comments/type-aliases/MetadataKeyDefinition.mdx) | - | | [MetadataKeyTypeMap](/sdk-reference/comments/type-aliases/MetadataKeyTypeMap.mdx) | Mapping of known hex-encoded keys to their original key and type | | [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". | | [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 | | [decodeJsonValue](/sdk-reference/comments/functions/decodeJsonValue.mdx) | Decodes a JSON object from encoded metadata bytes | | [decodeMetadataKey](/sdk-reference/comments/functions/decodeMetadataKey.mdx) | Decodes a metadata key from a hex-encoded key | | [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. | | [decodeQuotedCommentFromCaip373](/sdk-reference/comments/functions/decodeQuotedCommentFromCaip373.mdx) | Parses a CAIP-373 quoted comment. | | [decodeStringValue](/sdk-reference/comments/functions/decodeStringValue.mdx) | Decodes a string value from encoded metadata bytes. | | [encodeAddressValue](/sdk-reference/comments/functions/encodeAddressValue.mdx) | Encodes an address value as bytes for metadata | | [encodeBoolValue](/sdk-reference/comments/functions/encodeBoolValue.mdx) | Encodes a boolean value as bytes for metadata | | [encodeBytesValue](/sdk-reference/comments/functions/encodeBytesValue.mdx) | Encodes a bytes 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. | | [encodeQuotedCommentFromCaip373](/sdk-reference/comments/functions/encodeQuotedCommentFromCaip373.mdx) | Encodes a quoted comment from a CAIP-373 | | [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. | | [getOneDayFromNowInSeconds](/sdk-reference/core/functions/getOneDayFromNowInSeconds.mdx) | Get the number of seconds to one day from now | | [getOneMinuteFromNowInSeconds](/sdk-reference/core/functions/getOneMinuteFromNowInSeconds.mdx) | Get the number of seconds to one minute from now | | [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 | | --------------------------------------------------------------------------------------------------------------------------------- | ----------- | | [ERC165ContractReadFunctions](/sdk-reference/defaultExports/type-aliases/ERC165ContractReadFunctions.mdx) | - | | [ERC20ContractReadFunctions](/sdk-reference/defaultExports/type-aliases/ERC20ContractReadFunctions.mdx) | - | | [LegacyTakesChannelContractReadFunctions](/sdk-reference/defaultExports/type-aliases/LegacyTakesChannelContractReadFunctions.mdx) | - | | [SupportedChainConfig](/sdk-reference/defaultExports/type-aliases/SupportedChainConfig.mdx) | - | ### Variables | Variable | Description | | ------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [BaseHookABI](/sdk-reference/defaultExports/variables/BaseHookABI.mdx) | ABI of the BaseHook contract. | | [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\_CHANNEL\_URL](/sdk-reference/defaultExports/variables/COMMENTS_EMBED_DEFAULT_BY_CHANNEL_URL.mdx) | The default `embedUri` for the CommentsByChannelEmbed 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. | | [ERC165\_ABI](/sdk-reference/defaultExports/variables/ERC165_ABI.mdx) | - | | [ERC20\_ABI](/sdk-reference/defaultExports/variables/ERC20_ABI.mdx) | - | | [INDEXER\_API\_URL](/sdk-reference/defaultExports/variables/INDEXER_API_URL.mdx) | The default URL for the Indexer API. | | [INTERFACE\_ID\_ERC1155](/sdk-reference/defaultExports/variables/INTERFACE_ID_ERC1155.mdx) | The ERC165 interface ID for the ERC1155 contracts. | | [INTERFACE\_ID\_ERC165](/sdk-reference/defaultExports/variables/INTERFACE_ID_ERC165.mdx) | The ERC165 interface ID for the ERC165 contracts. | | [INTERFACE\_ID\_ERC721](/sdk-reference/defaultExports/variables/INTERFACE_ID_ERC721.mdx) | The ERC165 interface ID for the ERC721 contracts. | | [LEGACY\_TAKES\_CHANNEL\_ABI](/sdk-reference/defaultExports/variables/LEGACY_TAKES_CHANNEL_ABI.mdx) | - | | [MAX\_COMMENT\_REPORT\_MESSAGE\_LENGTH](/sdk-reference/defaultExports/variables/MAX_COMMENT_REPORT_MESSAGE_LENGTH.mdx) | The maximum length of a message for comment report. | | [NATIVE\_ASSET\_ADDRESS](/sdk-reference/defaultExports/variables/NATIVE_ASSET_ADDRESS.mdx) | Asset address used for representing native assets. | | [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. | | [CommentsByChannelEmbed](/sdk-reference/embed/functions/CommentsByChannelEmbed.mdx) | Renders comments embed iframe for a specific channel. | | [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) | - | | [CommentsByChannelEmbedProps](/sdk-reference/embed/type-aliases/CommentsByChannelEmbedProps.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) | - | | [EmbedConfigHotSortingSchemaType](/sdk-reference/embed/type-aliases/EmbedConfigHotSortingSchemaType.mdx) | - | | [EmbedConfigReactionSchemaType](/sdk-reference/embed/type-aliases/EmbedConfigReactionSchemaType.mdx) | - | | [EmbedConfigSchemaInputType](/sdk-reference/embed/type-aliases/EmbedConfigSchemaInputType.mdx) | Custom configuration for `` component. | | [EmbedConfigSchemaOutputType](/sdk-reference/embed/type-aliases/EmbedConfigSchemaOutputType.mdx) | - | | [EmbedConfigSortingAlgorithmSchemaType](/sdk-reference/embed/type-aliases/EmbedConfigSortingAlgorithmSchemaType.mdx) | - | | [EmbedConfigSortingSchemaType](/sdk-reference/embed/type-aliases/EmbedConfigSortingSchemaType.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) | - | | [EMBED\_DEFAULT\_REACTIONS](/sdk-reference/embed/variables/EMBED_DEFAULT_REACTIONS.mdx) | Fallback reaction when no custom reactions are configured. | | [EMBED\_REACTION\_ICON\_PRESETS](/sdk-reference/embed/variables/EMBED_REACTION_ICON_PRESETS.mdx) | - | | [EMBED\_REACTION\_PRESETS](/sdk-reference/embed/variables/EMBED_REACTION_PRESETS.mdx) | Built-in reaction presets for iframe configurators. | | [EmbedConfigFontSchema](/sdk-reference/embed/variables/EmbedConfigFontSchema.mdx) | - | | [EmbedConfigFontSizeSchema](/sdk-reference/embed/variables/EmbedConfigFontSizeSchema.mdx) | - | | [EmbedConfigHotSortingSchema](/sdk-reference/embed/variables/EmbedConfigHotSortingSchema.mdx) | - | | [EmbedConfigReactionSchema](/sdk-reference/embed/variables/EmbedConfigReactionSchema.mdx) | - | | [EmbedConfigReactionsSchema](/sdk-reference/embed/variables/EmbedConfigReactionsSchema.mdx) | - | | [EmbedConfigSchema](/sdk-reference/embed/variables/EmbedConfigSchema.mdx) | The zod schema for `EmbedConfigSchemaType` | | [EmbedConfigSortingAlgorithmSchema](/sdk-reference/embed/variables/EmbedConfigSortingAlgorithmSchema.mdx) | - | | [EmbedConfigSortingSchema](/sdk-reference/embed/variables/EmbedConfigSortingSchema.mdx) | - | | [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. | | [parseCommentsEmbedConfig](/sdk-reference/embed/functions/parseCommentsEmbedConfig.mdx) | Parse compressed config from `config` search param. | [**@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 ### Classes | Class | Description | | ----------------------------------------------------------------- | ------------------------------------------------------------------- | | [ResponseError](/sdk-reference/indexer/classes/ResponseError.mdx) | An error thrown when a response from the indexer is not successful. | ### 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()` | | [FetchGroupedNotificationsOptions](/sdk-reference/indexer/type-aliases/FetchGroupedNotificationsOptions.mdx) | The options for `fetchGroupedNotifications()` | | [FetchNotificationsOptions](/sdk-reference/indexer/type-aliases/FetchNotificationsOptions.mdx) | The options for `fetchNotifications()` | | [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) | - | | [IndexerAPICommentReferenceENSSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentReferenceENSSchemaType.mdx) | - | | [IndexerAPICommentReferenceERC20SchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentReferenceERC20SchemaType.mdx) | - | | [IndexerAPICommentReferenceFarcasterSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentReferenceFarcasterSchemaType.mdx) | - | | [IndexerAPICommentReferenceQuotedCommentSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentReferenceQuotedCommentSchemaType.mdx) | Handles caip373 quoted comment | | [IndexerAPICommentReferenceSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentReferenceSchemaType.mdx) | - | | [IndexerAPICommentReferencesSchemaInputType](/sdk-reference/indexer/type-aliases/IndexerAPICommentReferencesSchemaInputType.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) | - | | [IndexerAPICommentSchemaInputType](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaInputType.mdx) | - | | [IndexerAPICommentSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx) | - | | [IndexerAPICommentZeroExSwapSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICommentZeroExSwapSchemaType.mdx) | - | | [IndexerAPICursorPaginationSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICursorPaginationSchemaType.mdx) | - | | [IndexerAPICursorRepliesPaginationSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPICursorRepliesPaginationSchemaType.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) | - | | [IndexerAPIListCommentsOutputSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIListCommentsOutputSchemaType.mdx) | - | | [IndexerAPIListCommentsSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIListCommentsSchemaType.mdx) | - | | [IndexerAPIListGroupedNotificationsSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIListGroupedNotificationsSchemaType.mdx) | The list grouped notifications schema returned by fetchGroupedNotifications() | | [IndexerAPIListNotificationsSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIListNotificationsSchemaType.mdx) | The list notifications schema returned by fetchNotifications() | | [IndexerAPIMarkNotificationsAsSeenSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPIMarkNotificationsAsSeenSchemaType.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) | - | | [IndexerAPINotificationMentionSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPINotificationMentionSchemaType.mdx) | - | | [IndexerAPINotificationQuoteSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPINotificationQuoteSchemaType.mdx) | - | | [IndexerAPINotificationReactionSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPINotificationReactionSchemaType.mdx) | - | | [IndexerAPINotificationReplySchemaType](/sdk-reference/indexer/type-aliases/IndexerAPINotificationReplySchemaType.mdx) | - | | [IndexerAPINotificationSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPINotificationSchemaType.mdx) | The notification schema | | [IndexerAPINotificationTypeSchemaType](/sdk-reference/indexer/type-aliases/IndexerAPINotificationTypeSchemaType.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()` | | [MarkNotificationsAsSeenOptions](/sdk-reference/indexer/type-aliases/MarkNotificationsAsSeenOptions.mdx) | - | | [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) | - | | [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) | - | | [IndexerAPICommentReferenceQuotedCommentSchema](/sdk-reference/indexer/variables/IndexerAPICommentReferenceQuotedCommentSchema.mdx) | Handles caip373 quoted comment | | [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) | - | | [IndexerAPICommentZeroExSwapSchema](/sdk-reference/indexer/variables/IndexerAPICommentZeroExSwapSchema.mdx) | - | | [IndexerAPICursorPaginationSchema](/sdk-reference/indexer/variables/IndexerAPICursorPaginationSchema.mdx) | - | | [IndexerAPICursorRepliesPaginationSchema](/sdk-reference/indexer/variables/IndexerAPICursorRepliesPaginationSchema.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) | - | | [IndexerAPIListCommentsOutputSchema](/sdk-reference/indexer/variables/IndexerAPIListCommentsOutputSchema.mdx) | - | | [IndexerAPIListCommentsSchema](/sdk-reference/indexer/variables/IndexerAPIListCommentsSchema.mdx) | - | | [IndexerAPIListGroupedNotificationsSchema](/sdk-reference/indexer/variables/IndexerAPIListGroupedNotificationsSchema.mdx) | The list grouped notifications schema returned by fetchGroupedNotifications() | | [IndexerAPIListNotificationsSchema](/sdk-reference/indexer/variables/IndexerAPIListNotificationsSchema.mdx) | The list notifications schema returned by fetchNotifications() | | [IndexerAPIMarkNotificationsAsSeenSchema](/sdk-reference/indexer/variables/IndexerAPIMarkNotificationsAsSeenSchema.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) | - | | [IndexerAPINotificationBaseSchema](/sdk-reference/indexer/variables/IndexerAPINotificationBaseSchema.mdx) | - | | [IndexerAPINotificationMentionSchema](/sdk-reference/indexer/variables/IndexerAPINotificationMentionSchema.mdx) | - | | [IndexerAPINotificationQuoteSchema](/sdk-reference/indexer/variables/IndexerAPINotificationQuoteSchema.mdx) | - | | [IndexerAPINotificationReactionSchema](/sdk-reference/indexer/variables/IndexerAPINotificationReactionSchema.mdx) | - | | [IndexerAPINotificationReplySchema](/sdk-reference/indexer/variables/IndexerAPINotificationReplySchema.mdx) | - | | [IndexerAPINotificationSchema](/sdk-reference/indexer/variables/IndexerAPINotificationSchema.mdx) | The notification schema | | [IndexerAPINotificationTypeSchema](/sdk-reference/indexer/variables/IndexerAPINotificationTypeSchema.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 | | [fetchGroupedNotifications](/sdk-reference/indexer/functions/fetchGroupedNotifications.mdx) | Fetch grouped notifications from the Indexer API | | [fetchNotifications](/sdk-reference/indexer/functions/fetchNotifications.mdx) | Fetch notifications 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 | | [indexerApiRetryCondition](/sdk-reference/indexer/functions/indexerApiRetryCondition.mdx) | Determine if a fetch error from the indexer API should be retried | | [isMuted](/sdk-reference/indexer/functions/isMuted.mdx) | Checks if an address is marked as muted on the indexer of your choice. | | [isRetryableHttpResponse](/sdk-reference/indexer/functions/isRetryableHttpResponse.mdx) | Check if a response is retryable | | [markNotificationsAsSeen](/sdk-reference/indexer/functions/markNotificationsAsSeen.mdx) | Mark notifications as seen | | [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:313 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) / createEstimateChannelPostOrEditCommentFeeData ## Function: createEstimateChannelPostOrEditCommentFeeData() ```ts function createEstimateChannelPostOrEditCommentFeeData(__namedParameters): CommentData; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:945 ### Parameters #### \_\_namedParameters `Omit`\<`Omit`\<[`CommentData`](/sdk-reference/comments/type-aliases/CommentData.mdx), `"parentId"` | `"targetUri"`>, `"createdAt"` | `"authMethod"` | `"updatedAt"` | `"commentType"` | `"channelId"`> & `ExactPartial`\<`Pick`\<`Omit`\<[`CommentData`](/sdk-reference/comments/type-aliases/CommentData.mdx), `"parentId"` | `"targetUri"`>, `"createdAt"` | `"authMethod"` | `"updatedAt"` | `"commentType"` | `"channelId"`>> & \| \{ `targetUri`: `string`; } \| \{ `parentId`: `` `0x${string}` ``; } ### Returns [`CommentData`](/sdk-reference/comments/type-aliases/CommentData.mdx) [**@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) / estimateChannelEditCommentFee ## Function: estimateChannelEditCommentFee() ```ts function estimateChannelEditCommentFee(estimatedChannelEditCommentHookFeeParams): Promise; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:928 Best-effort estimation of the total fee for editing a comment to a channel ### Parameters #### estimatedChannelEditCommentHookFeeParams `Omit`\<`EstimateChannelCommentActionFeeParams`\<*typeof* [`getEstimatedChannelEditCommentHookFee`](/sdk-reference/channel-manager/functions/getEstimatedChannelEditCommentHookFee.mdx)>, `"commentActionFunc"`> The parameters for estimating the fee for editing a comment to a channel ### Returns `Promise`\<[`TotalFeeEstimation`](/sdk-reference/channel-manager/types/type-aliases/TotalFeeEstimation.mdx)> The estimated fee for editing a comment to a channel [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / estimateChannelPostCommentFee ## Function: estimateChannelPostCommentFee() ```ts function estimateChannelPostCommentFee(estimatedChannelPostCommentHookFeeParams): Promise; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:908 Best-effort estimation of the total fee for posting a comment to a channel ### Parameters #### estimatedChannelPostCommentHookFeeParams `Omit`\<`EstimateChannelCommentActionFeeParams`\<*typeof* [`getEstimatedChannelPostCommentHookFee`](/sdk-reference/channel-manager/functions/getEstimatedChannelPostCommentHookFee.mdx)>, `"commentActionFunc"`> The parameters for estimating the fee for posting a comment to a channel ### Returns `Promise`\<[`TotalFeeEstimation`](/sdk-reference/channel-manager/types/type-aliases/TotalFeeEstimation.mdx)> The estimated fee for posting a comment to a channel [**@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:153 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:398 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:204 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) / getCommentCreationFee ## Function: getCommentCreationFee() ```ts function getCommentCreationFee(params): Promise; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:485 Get the creation fee from channel manager ### Parameters #### params [`GetCommentCreationFeeParams`](/sdk-reference/channel-manager/type-aliases/GetCommentCreationFeeParams.mdx) The parameters for getting the creation fee from channel manager ### Returns `Promise`\<[`GetCommentCreationFeeResult`](/sdk-reference/channel-manager/type-aliases/GetCommentCreationFeeResult.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) / getEstimatedChannelEditCommentHookFee ## Function: getEstimatedChannelEditCommentHookFee() ```ts function getEstimatedChannelEditCommentHookFee(getEstimateChannelEditCommentHookFeeParams): Promise; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:754 It calls the `estimateEditCommentFee` function on the hook to retrieve the estimated fee for editing a comment to a channel. It also tries to probe if the hook is any known legacy hook and return corresponding fee estimation. For estimation of total fee, use the `estimateChannelEditCommentFee` helper ### Parameters #### getEstimateChannelEditCommentHookFeeParams `GetEstimatedChannelEditCommentHookFeeParams` The parameters for estimating the fee for editing a comment to a channel ### Returns `Promise`\<[`HookFeeEstimation`](/sdk-reference/channel-manager/types/type-aliases/HookFeeEstimation.mdx)> The estimated fee for editing a comment to a channel [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / getEstimatedChannelPostCommentHookFee ## Function: getEstimatedChannelPostCommentHookFee() ```ts function getEstimatedChannelPostCommentHookFee(getEstimatedChannelPostCommentHookFeeParams): Promise; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:657 It calls the `estimateAddCommentFee` function on the hook to retrieve the estimated fee for posting a comment to a channel. It also tries to probe if the hook is any known legacy hook and return corresponding fee estimation. For estimation of total fee, use the `estimateChannelPostCommentFee` helper ### Parameters #### getEstimatedChannelPostCommentHookFeeParams `GetEstimatedChannelPostCommentHookFeeParams` The parameters for estimating the fee for posting a comment to a channel ### Returns `Promise`\<[`HookFeeEstimation`](/sdk-reference/channel-manager/types/type-aliases/HookFeeEstimation.mdx)> The estimated fee for posting a comment to a channel [**@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:358 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:620 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:443 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) / setCommentCreationFee ## Function: setCommentCreationFee() ```ts function setCommentCreationFee(params): Promise; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:530 Set the fee for creating a new comment ### Parameters #### params [`SetCommentCreationFeeParams`](/sdk-reference/channel-manager/type-aliases/SetCommentCreationFeeParams.mdx) The parameters for setting the fee for creating a new comment ### Returns `Promise`\<[`SetCommentCreationFeeResult`](/sdk-reference/channel-manager/type-aliases/SetCommentCreationFeeResult.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:575 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) | - | | [UseGetCommentCreationFeeOptions](/sdk-reference/channel-manager/react/type-aliases/UseGetCommentCreationFeeOptions.mdx) | - | | [UseGetCommentCreationFeeParams](/sdk-reference/channel-manager/react/type-aliases/UseGetCommentCreationFeeParams.mdx) | - | | [UseGetCommentCreationFeeResult](/sdk-reference/channel-manager/react/type-aliases/UseGetCommentCreationFeeResult.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) | - | | [UseSetCommentCreationFeeOptions](/sdk-reference/channel-manager/react/type-aliases/UseSetCommentCreationFeeOptions.mdx) | - | | [UseSetCommentCreationFeeParams](/sdk-reference/channel-manager/react/type-aliases/UseSetCommentCreationFeeParams.mdx) | - | | [UseSetCommentCreationFeeResult](/sdk-reference/channel-manager/react/type-aliases/UseSetCommentCreationFeeResult.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 | | [useGetCommentCreationFee](/sdk-reference/channel-manager/react/functions/useGetCommentCreationFee.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 | | [useSetCommentCreationFee](/sdk-reference/channel-manager/react/functions/useSetCommentCreationFee.mdx) | Set the fee for creating a new comment | | [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:288 ### Properties #### channelId ```ts channelId: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:292 The ID of the channel to check *** #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:298 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:299 [**@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:53 ### Properties #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:79 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:61 The description of the channel *** #### fee? ```ts optional fee: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:73 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:69 The hook of the channel *** #### metadata? ```ts optional metadata: MetadataEntry[]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:65 The metadata of the channel *** #### name ```ts name: string; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:57 The name of the channel *** #### writeContract ```ts writeContract: ContractWriteFunctions["createChannel"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:80 [**@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:83 [**@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:374 ### Properties #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:380 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:381 [**@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:384 ### Properties #### fee ```ts fee: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:385 [**@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:174 ### Properties #### channelId ```ts channelId: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:178 The ID of the channel to get metadata for *** #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:184 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:185 [**@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:188 ### Properties #### metadata ```ts metadata: MetadataEntry[]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:189 [**@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:125 ### Properties #### channelId ```ts channelId: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:129 The ID of the channel to get *** #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:135 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:136 [**@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:139 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / GetCommentCreationFeeParams ## Type Alias: GetCommentCreationFeeParams ```ts type GetCommentCreationFeeParams = { channelManagerAddress?: Hex; readContract: ContractReadFunctions["getCommentCreationFee"]; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:461 ### Properties #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:467 The address of the channel manager ##### Default ```ts CHANNEL_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["getCommentCreationFee"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:468 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / GetCommentCreationFeeResult ## Type Alias: GetCommentCreationFeeResult ```ts type GetCommentCreationFeeResult = { fee: bigint; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:471 ### Properties #### fee ```ts fee: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:472 [**@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:329 ### Properties #### channelId ```ts channelId: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:333 The ID of the channel to get the owner of *** #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:339 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:340 [**@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:343 ### Properties #### owner ```ts owner: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:344 [**@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:593 ### Properties #### baseURI ```ts baseURI: string; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:597 The new base URI for NFT metadata *** #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:601 The address of the channel manager *** #### writeContract ```ts writeContract: ContractWriteFunctions["setBaseURI"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:602 [**@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:605 ### Properties #### txHash ```ts txHash: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:606 [**@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:414 ### Properties #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:424 The address of the channel manager ##### Default ```ts CHANNEL_MANAGER_ADDRESS ``` *** #### fee ```ts fee: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:418 The fee for creating a channel in wei *** #### writeContract ```ts writeContract: ContractWriteFunctions["setChannelCreationFee"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:425 [**@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:428 ### Properties #### txHash ```ts txHash: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:429 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / SetCommentCreationFeeParams ## Type Alias: SetCommentCreationFeeParams ```ts type SetCommentCreationFeeParams = { channelManagerAddress?: Hex; fee: bigint; writeContract: ContractWriteFunctions["setCommentCreationFee"]; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:501 ### Properties #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:511 The address of the channel manager ##### Default ```ts CHANNEL_MANAGER_ADDRESS ``` *** #### fee ```ts fee: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:505 The fee for creating a comment in wei *** #### writeContract ```ts writeContract: ContractWriteFunctions["setCommentCreationFee"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:512 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager](/sdk-reference/channel-manager/index.mdx) / SetCommentCreationFeeResult ## Type Alias: SetCommentCreationFeeResult ```ts type SetCommentCreationFeeResult = { txHash: Hex; }; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:515 ### Properties #### txHash ```ts txHash: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:516 [**@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:222 ### Properties #### channelId ```ts channelId: bigint; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:226 The ID of the channel to update *** #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:244 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:234 The description of the channel *** #### metadata? ```ts optional metadata: MetadataEntryOp[]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:238 The metadata of the channel *** #### name ```ts name: string; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:230 The name of the channel *** #### writeContract ```ts writeContract: ContractWriteFunctions["updateChannel"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:245 [**@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:248 [**@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:548 ### Properties #### channelManagerAddress? ```ts optional channelManagerAddress: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:556 The address of the channel manager *** #### recipient ```ts recipient: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:552 The address of the recipient *** #### writeContract ```ts writeContract: ContractWriteFunctions["withdrawFees"]; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:557 [**@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:560 ### Properties #### txHash ```ts txHash: Hex; ``` Defined in: packages/sdk/src/channel-manager/channel.ts:561 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / channel-manager/types ## channel-manager/types ### Type Aliases | Type Alias | Description | | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------- | | [BaseHookABIType](/sdk-reference/channel-manager/types/type-aliases/BaseHookABIType.mdx) | - | | [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) | - | | [ContractBasedAssetERCType](/sdk-reference/channel-manager/types/type-aliases/ContractBasedAssetERCType.mdx) | - | | [ContractBasedAssetType](/sdk-reference/channel-manager/types/type-aliases/ContractBasedAssetType.mdx) | - | | [ContractReadFunctions](/sdk-reference/channel-manager/types/type-aliases/ContractReadFunctions.mdx) | - | | [ContractWriteFunctions](/sdk-reference/channel-manager/types/type-aliases/ContractWriteFunctions.mdx) | - | | [HookContractReadFunctions](/sdk-reference/channel-manager/types/type-aliases/HookContractReadFunctions.mdx) | - | | [HookFeeEstimation](/sdk-reference/channel-manager/types/type-aliases/HookFeeEstimation.mdx) | HookFeeEstimation struct returned from hook fee estimator functions | | [TotalFeeEstimation](/sdk-reference/channel-manager/types/type-aliases/TotalFeeEstimation.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:102 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:266 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) / CAIP373Error ## Class: CAIP373Error Defined in: packages/sdk/src/comments/caip373.ts:10 Base error for CAIP-373 errors ### Extends * `Error` ### Extended by * [`MalformedCaip373Error`](/sdk-reference/comments/classes/MalformedCaip373Error.mdx) * [`UnsupportedChainError`](/sdk-reference/comments/classes/UnsupportedChainError.mdx) * [`InvalidFunctionCallDataError`](/sdk-reference/comments/classes/InvalidFunctionCallDataError.mdx) * [`InvalidCommentManagerAddressError`](/sdk-reference/comments/classes/InvalidCommentManagerAddressError.mdx) * [`InvalidCommentIdError`](/sdk-reference/comments/classes/InvalidCommentIdError.mdx) ### Constructors #### Constructor ```ts new CAIP373Error(message): CAIP373Error; ``` Defined in: packages/sdk/src/comments/caip373.ts:11 ##### Parameters ##### message `string` ##### Returns `CAIP373Error` ##### Overrides ```ts Error.constructor ``` ### Properties #### cause? ```ts optional cause: unknown; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es2022.error.d.ts:26 ##### Inherited from ```ts Error.cause ``` *** #### message ```ts message: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1077 ##### Inherited from ```ts Error.message ``` *** #### name ```ts name: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1076 ##### Inherited from ```ts Error.name ``` *** #### stack? ```ts optional stack: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1078 ##### Inherited from ```ts Error.stack ``` *** #### stackTraceLimit ```ts static stackTraceLimit: number; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:68 The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`). The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed. If set to a non-number value, or set to a negative number, stack traces will not capture any frames. ##### Inherited from ```ts Error.stackTraceLimit ``` ### Methods #### captureStackTrace() ```ts static captureStackTrace(targetObject, constructorOpt?): void; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:52 Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called. ```js const myObject = {}; Error.captureStackTrace(myObject); myObject.stack; // Similar to `new Error().stack` ``` The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`. The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace. The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance: ```js function a() { b(); } function b() { c(); } function c() { // Create an error without stack trace to avoid calculating the stack trace twice. const { stackTraceLimit } = Error; Error.stackTraceLimit = 0; const error = new Error(); Error.stackTraceLimit = stackTraceLimit; // Capture the stack trace above function b Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace throw error; } a(); ``` ##### Parameters ##### targetObject `object` ##### constructorOpt? `Function` ##### Returns `void` ##### Inherited from ```ts Error.captureStackTrace ``` *** #### prepareStackTrace() ```ts static prepareStackTrace(err, stackTraces): any; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:56 ##### Parameters ##### err `Error` ##### stackTraces `CallSite`\[] ##### Returns `any` ##### See [https://v8.dev/docs/stack-trace-api#customizing-stack-traces](https://v8.dev/docs/stack-trace-api#customizing-stack-traces) ##### Inherited from ```ts Error.prepareStackTrace ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / InvalidCommentIdError ## Class: InvalidCommentIdError Defined in: packages/sdk/src/comments/caip373.ts:62 Error thrown when the comment id is invalid ### Extends * [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx) ### Constructors #### Constructor ```ts new InvalidCommentIdError(commentId): InvalidCommentIdError; ``` Defined in: packages/sdk/src/comments/caip373.ts:63 ##### Parameters ##### commentId `` `0x${string}` `` ##### Returns `InvalidCommentIdError` ##### Overrides [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`constructor`](/sdk-reference/comments/classes/CAIP373Error.mdx#constructor) ### Properties #### cause? ```ts optional cause: unknown; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es2022.error.d.ts:26 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`cause`](/sdk-reference/comments/classes/CAIP373Error.mdx#cause) *** #### message ```ts message: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1077 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`message`](/sdk-reference/comments/classes/CAIP373Error.mdx#message) *** #### name ```ts name: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1076 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`name`](/sdk-reference/comments/classes/CAIP373Error.mdx#name) *** #### stack? ```ts optional stack: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1078 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`stack`](/sdk-reference/comments/classes/CAIP373Error.mdx#stack) *** #### stackTraceLimit ```ts static stackTraceLimit: number; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:68 The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`). The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed. If set to a non-number value, or set to a negative number, stack traces will not capture any frames. ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`stackTraceLimit`](/sdk-reference/comments/classes/CAIP373Error.mdx#stacktracelimit) ### Methods #### captureStackTrace() ```ts static captureStackTrace(targetObject, constructorOpt?): void; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:52 Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called. ```js const myObject = {}; Error.captureStackTrace(myObject); myObject.stack; // Similar to `new Error().stack` ``` The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`. The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace. The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance: ```js function a() { b(); } function b() { c(); } function c() { // Create an error without stack trace to avoid calculating the stack trace twice. const { stackTraceLimit } = Error; Error.stackTraceLimit = 0; const error = new Error(); Error.stackTraceLimit = stackTraceLimit; // Capture the stack trace above function b Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace throw error; } a(); ``` ##### Parameters ##### targetObject `object` ##### constructorOpt? `Function` ##### Returns `void` ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`captureStackTrace`](/sdk-reference/comments/classes/CAIP373Error.mdx#capturestacktrace) *** #### prepareStackTrace() ```ts static prepareStackTrace(err, stackTraces): any; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:56 ##### Parameters ##### err `Error` ##### stackTraces `CallSite`\[] ##### Returns `any` ##### See [https://v8.dev/docs/stack-trace-api#customizing-stack-traces](https://v8.dev/docs/stack-trace-api#customizing-stack-traces) ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`prepareStackTrace`](/sdk-reference/comments/classes/CAIP373Error.mdx#preparestacktrace) [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / InvalidCommentManagerAddressError ## Class: InvalidCommentManagerAddressError Defined in: packages/sdk/src/comments/caip373.ts:50 Error thrown when the comment manager address is not the same as the chain's comment manager address ### Extends * [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx) ### Constructors #### Constructor ```ts new InvalidCommentManagerAddressError(commentManagerAddress, chainCommentManagerAddress): InvalidCommentManagerAddressError; ``` Defined in: packages/sdk/src/comments/caip373.ts:51 ##### Parameters ##### commentManagerAddress `` `0x${string}` `` ##### chainCommentManagerAddress `` `0x${string}` `` ##### Returns `InvalidCommentManagerAddressError` ##### Overrides [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`constructor`](/sdk-reference/comments/classes/CAIP373Error.mdx#constructor) ### Properties #### cause? ```ts optional cause: unknown; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es2022.error.d.ts:26 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`cause`](/sdk-reference/comments/classes/CAIP373Error.mdx#cause) *** #### message ```ts message: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1077 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`message`](/sdk-reference/comments/classes/CAIP373Error.mdx#message) *** #### name ```ts name: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1076 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`name`](/sdk-reference/comments/classes/CAIP373Error.mdx#name) *** #### stack? ```ts optional stack: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1078 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`stack`](/sdk-reference/comments/classes/CAIP373Error.mdx#stack) *** #### stackTraceLimit ```ts static stackTraceLimit: number; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:68 The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`). The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed. If set to a non-number value, or set to a negative number, stack traces will not capture any frames. ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`stackTraceLimit`](/sdk-reference/comments/classes/CAIP373Error.mdx#stacktracelimit) ### Methods #### captureStackTrace() ```ts static captureStackTrace(targetObject, constructorOpt?): void; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:52 Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called. ```js const myObject = {}; Error.captureStackTrace(myObject); myObject.stack; // Similar to `new Error().stack` ``` The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`. The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace. The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance: ```js function a() { b(); } function b() { c(); } function c() { // Create an error without stack trace to avoid calculating the stack trace twice. const { stackTraceLimit } = Error; Error.stackTraceLimit = 0; const error = new Error(); Error.stackTraceLimit = stackTraceLimit; // Capture the stack trace above function b Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace throw error; } a(); ``` ##### Parameters ##### targetObject `object` ##### constructorOpt? `Function` ##### Returns `void` ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`captureStackTrace`](/sdk-reference/comments/classes/CAIP373Error.mdx#capturestacktrace) *** #### prepareStackTrace() ```ts static prepareStackTrace(err, stackTraces): any; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:56 ##### Parameters ##### err `Error` ##### stackTraces `CallSite`\[] ##### Returns `any` ##### See [https://v8.dev/docs/stack-trace-api#customizing-stack-traces](https://v8.dev/docs/stack-trace-api#customizing-stack-traces) ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`prepareStackTrace`](/sdk-reference/comments/classes/CAIP373Error.mdx#preparestacktrace) [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / InvalidFunctionCallDataError ## Class: InvalidFunctionCallDataError Defined in: packages/sdk/src/comments/caip373.ts:40 Error thrown when the function call data is invalid ### Extends * [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx) ### Constructors #### Constructor ```ts new InvalidFunctionCallDataError(functionCallData): InvalidFunctionCallDataError; ``` Defined in: packages/sdk/src/comments/caip373.ts:41 ##### Parameters ##### functionCallData `` `0x${string}` `` ##### Returns `InvalidFunctionCallDataError` ##### Overrides [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`constructor`](/sdk-reference/comments/classes/CAIP373Error.mdx#constructor) ### Properties #### cause? ```ts optional cause: unknown; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es2022.error.d.ts:26 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`cause`](/sdk-reference/comments/classes/CAIP373Error.mdx#cause) *** #### message ```ts message: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1077 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`message`](/sdk-reference/comments/classes/CAIP373Error.mdx#message) *** #### name ```ts name: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1076 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`name`](/sdk-reference/comments/classes/CAIP373Error.mdx#name) *** #### stack? ```ts optional stack: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1078 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`stack`](/sdk-reference/comments/classes/CAIP373Error.mdx#stack) *** #### stackTraceLimit ```ts static stackTraceLimit: number; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:68 The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`). The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed. If set to a non-number value, or set to a negative number, stack traces will not capture any frames. ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`stackTraceLimit`](/sdk-reference/comments/classes/CAIP373Error.mdx#stacktracelimit) ### Methods #### captureStackTrace() ```ts static captureStackTrace(targetObject, constructorOpt?): void; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:52 Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called. ```js const myObject = {}; Error.captureStackTrace(myObject); myObject.stack; // Similar to `new Error().stack` ``` The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`. The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace. The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance: ```js function a() { b(); } function b() { c(); } function c() { // Create an error without stack trace to avoid calculating the stack trace twice. const { stackTraceLimit } = Error; Error.stackTraceLimit = 0; const error = new Error(); Error.stackTraceLimit = stackTraceLimit; // Capture the stack trace above function b Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace throw error; } a(); ``` ##### Parameters ##### targetObject `object` ##### constructorOpt? `Function` ##### Returns `void` ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`captureStackTrace`](/sdk-reference/comments/classes/CAIP373Error.mdx#capturestacktrace) *** #### prepareStackTrace() ```ts static prepareStackTrace(err, stackTraces): any; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:56 ##### Parameters ##### err `Error` ##### stackTraces `CallSite`\[] ##### Returns `any` ##### See [https://v8.dev/docs/stack-trace-api#customizing-stack-traces](https://v8.dev/docs/stack-trace-api#customizing-stack-traces) ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`prepareStackTrace`](/sdk-reference/comments/classes/CAIP373Error.mdx#preparestacktrace) [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / MalformedCaip373Error ## Class: MalformedCaip373Error Defined in: packages/sdk/src/comments/caip373.ts:20 Error thrown when the CAIP-373 is malformed ### Extends * [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx) ### Constructors #### Constructor ```ts new MalformedCaip373Error(caip373): MalformedCaip373Error; ``` Defined in: packages/sdk/src/comments/caip373.ts:21 ##### Parameters ##### caip373 `string` ##### Returns `MalformedCaip373Error` ##### Overrides [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`constructor`](/sdk-reference/comments/classes/CAIP373Error.mdx#constructor) ### Properties #### cause? ```ts optional cause: unknown; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es2022.error.d.ts:26 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`cause`](/sdk-reference/comments/classes/CAIP373Error.mdx#cause) *** #### message ```ts message: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1077 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`message`](/sdk-reference/comments/classes/CAIP373Error.mdx#message) *** #### name ```ts name: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1076 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`name`](/sdk-reference/comments/classes/CAIP373Error.mdx#name) *** #### stack? ```ts optional stack: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1078 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`stack`](/sdk-reference/comments/classes/CAIP373Error.mdx#stack) *** #### stackTraceLimit ```ts static stackTraceLimit: number; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:68 The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`). The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed. If set to a non-number value, or set to a negative number, stack traces will not capture any frames. ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`stackTraceLimit`](/sdk-reference/comments/classes/CAIP373Error.mdx#stacktracelimit) ### Methods #### captureStackTrace() ```ts static captureStackTrace(targetObject, constructorOpt?): void; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:52 Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called. ```js const myObject = {}; Error.captureStackTrace(myObject); myObject.stack; // Similar to `new Error().stack` ``` The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`. The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace. The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance: ```js function a() { b(); } function b() { c(); } function c() { // Create an error without stack trace to avoid calculating the stack trace twice. const { stackTraceLimit } = Error; Error.stackTraceLimit = 0; const error = new Error(); Error.stackTraceLimit = stackTraceLimit; // Capture the stack trace above function b Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace throw error; } a(); ``` ##### Parameters ##### targetObject `object` ##### constructorOpt? `Function` ##### Returns `void` ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`captureStackTrace`](/sdk-reference/comments/classes/CAIP373Error.mdx#capturestacktrace) *** #### prepareStackTrace() ```ts static prepareStackTrace(err, stackTraces): any; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:56 ##### Parameters ##### err `Error` ##### stackTraces `CallSite`\[] ##### Returns `any` ##### See [https://v8.dev/docs/stack-trace-api#customizing-stack-traces](https://v8.dev/docs/stack-trace-api#customizing-stack-traces) ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`prepareStackTrace`](/sdk-reference/comments/classes/CAIP373Error.mdx#preparestacktrace) [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / UnsupportedChainError ## Class: UnsupportedChainError Defined in: packages/sdk/src/comments/caip373.ts:30 Error thrown when the chain is unsupported ### Extends * [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx) ### Constructors #### Constructor ```ts new UnsupportedChainError(chainId): UnsupportedChainError; ``` Defined in: packages/sdk/src/comments/caip373.ts:31 ##### Parameters ##### chainId `number` ##### Returns `UnsupportedChainError` ##### Overrides [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`constructor`](/sdk-reference/comments/classes/CAIP373Error.mdx#constructor) ### Properties #### cause? ```ts optional cause: unknown; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es2022.error.d.ts:26 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`cause`](/sdk-reference/comments/classes/CAIP373Error.mdx#cause) *** #### message ```ts message: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1077 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`message`](/sdk-reference/comments/classes/CAIP373Error.mdx#message) *** #### name ```ts name: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1076 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`name`](/sdk-reference/comments/classes/CAIP373Error.mdx#name) *** #### stack? ```ts optional stack: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1078 ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`stack`](/sdk-reference/comments/classes/CAIP373Error.mdx#stack) *** #### stackTraceLimit ```ts static stackTraceLimit: number; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:68 The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`). The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed. If set to a non-number value, or set to a negative number, stack traces will not capture any frames. ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`stackTraceLimit`](/sdk-reference/comments/classes/CAIP373Error.mdx#stacktracelimit) ### Methods #### captureStackTrace() ```ts static captureStackTrace(targetObject, constructorOpt?): void; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:52 Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called. ```js const myObject = {}; Error.captureStackTrace(myObject); myObject.stack; // Similar to `new Error().stack` ``` The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`. The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace. The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance: ```js function a() { b(); } function b() { c(); } function c() { // Create an error without stack trace to avoid calculating the stack trace twice. const { stackTraceLimit } = Error; Error.stackTraceLimit = 0; const error = new Error(); Error.stackTraceLimit = stackTraceLimit; // Capture the stack trace above function b Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace throw error; } a(); ``` ##### Parameters ##### targetObject `object` ##### constructorOpt? `Function` ##### Returns `void` ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`captureStackTrace`](/sdk-reference/comments/classes/CAIP373Error.mdx#capturestacktrace) *** #### prepareStackTrace() ```ts static prepareStackTrace(err, stackTraces): any; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:56 ##### Parameters ##### err `Error` ##### stackTraces `CallSite`\[] ##### Returns `any` ##### See [https://v8.dev/docs/stack-trace-api#customizing-stack-traces](https://v8.dev/docs/stack-trace-api#customizing-stack-traces) ##### Inherited from [`CAIP373Error`](/sdk-reference/comments/classes/CAIP373Error.mdx).[`prepareStackTrace`](/sdk-reference/comments/classes/CAIP373Error.mdx#preparestacktrace) [**@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:98 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:564 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? [`MetadataKeyTypeMap`](/sdk-reference/comments/type-aliases/MetadataKeyTypeMap.mdx) Optional mapping of known keys to their original string and type. If not provided, the key in the record will be the hex hash of the key and the type will be "bytes". ### Returns [`MetadataRecord`](/sdk-reference/comments/type-aliases/MetadataRecord.mdx) The metadata in Record format ### Examples ```ts // if key to type map provided is provided const result = convertContractToRecordFormat(metadataEntries, createKeyTypeMap([{ key: "status", type: "string" }])); console.log(result); // { // "strin status": { // key: "status", // type: "string", // value: "0x0000000000000000000000000000000000000000000000000000000000000000", // }, } ``` ```ts // if key to type map not provided returns object like this const result = convertContractToRecordFormat(metadataEntries); console.log(result); // { // "0x0000000000000000000000000000000000000000000000000000000000000000": { // key: "0x0000000000000000000000000000000000000000000000000000000000000000", // type: "bytes", // value: "0x0000000000000000000000000000000000000000000000000000000000000000", // }, } ``` [**@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:521 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:563 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:538 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:504 Creates a metadata entry with a custom type ### Parameters #### keyString `string` The key string e.g. "status", "author", etc. #### valueType [`MetadataType`](/sdk-reference/comments/type-aliases/MetadataType.mdx) The type string MetadataType e.g. "string", "uint256", etc. #### encodedValue `` `0x${string}` `` The pre-hex-encoded value as hex. For example by using encodeStringValue, encodeBoolValue, encodeNumberValue, encodeJsonValue, etc. ### Returns [`MetadataEntry`](/sdk-reference/comments/type-aliases/MetadataEntry.mdx) The MetadataEntry ### Example ```ts const metadataEntry = createCustomMetadataEntry("status", "string", encodeStringValue("status")); console.log(metadataEntry); // { // key: "0x0000000000000000000000000000000000000000000000000000000000000000", // value: "0x0000000000000000000000000000000000000000000000000000000000000000", // } ``` [**@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:637 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:746 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:801 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): MetadataKeyTypeMap; ``` Defined in: packages/sdk/src/comments/metadata.ts:606 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 [`MetadataKeyTypeMap`](/sdk-reference/comments/type-aliases/MetadataKeyTypeMap.mdx) Mapping from hex-encoded 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:474 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 ### Example ```ts const metadata = { "status": { type: "string", value: "status", }, }; const metadataEntries = createMetadataEntries(metadata); console.log(metadataEntries); // [ // { // key: "0x0000000000000000000000000000000000000000000000000000000000000000", // value: "0x0000000000000000000000000000000000000000000000000000000000000000", // }, // ] ``` [**@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:336 Creates a metadata entry from a key-value pair with explicit type specification ### Parameters #### keyString `string` The key string e.g. "status", "author", etc. #### 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). Will be encoded to the appropriate type. `string` | `number` | `bigint` | `boolean` | [`JsonObject`](/sdk-reference/comments/type-aliases/JsonObject.mdx) | `Uint8Array`\<`ArrayBufferLike`> ### 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:109 Creates a metadata key by encoding a string in the format "type key". ### 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 hex-encoded bytes of the "type key" string of length 32 bytes padded from the left with leading zeros. ### Throws If the value type + key string exceeds 32 bytes [**@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:563 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:991 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:705 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:216 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. If the value can't be decoded, it will return false. [**@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:732 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) / decodeJsonValue ## Function: decodeJsonValue() ```ts function decodeJsonValue(value): JsonObject; ``` Defined in: packages/sdk/src/comments/metadata.ts:311 Decodes a JSON object from encoded metadata bytes ### Parameters #### value `` `0x${string}` `` The hex-encoded bytes of the JSON string ### Returns [`JsonObject`](/sdk-reference/comments/type-aliases/JsonObject.mdx) The decoded JSON object ### Throws If the value is not a valid JSON object ### Example ```ts const decodedValue = decodeJsonValue("0x0000000000000000000000000000000000000000000000000000000000000000"); console.log(decodedValue); // { test: true } ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / decodeMetadataKey ## Function: decodeMetadataKey() ```ts function decodeMetadataKey(key): MetadataKeyDefinition; ``` Defined in: packages/sdk/src/comments/metadata.ts:142 Decodes a metadata key from a hex-encoded key ### Parameters #### key `` `0x${string}` `` The hex-encoded key ### Returns [`MetadataKeyDefinition`](/sdk-reference/comments/type-aliases/MetadataKeyDefinition.mdx) The decoded metadata key ### Throws If the metadata type is unknown ### Throws If the key is not a valid hex string ### Example ```ts const decodedKey = decodeMetadataKey("0x0000000000000000000000000000000000000000737472696e67207469746c65"); console.log(decodedKey); // { key: "title", type: "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): MetadataKeyTypeMap; ``` Defined in: packages/sdk/src/comments/metadata.ts:662 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 [`MetadataKeyTypeMap`](/sdk-reference/comments/type-aliases/MetadataKeyTypeMap.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:744 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:266 Decodes a number value from encoded metadata bytes. Be careful this returns only big ints, decimal numbers are not supported. ### 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). If the value can't be decoded, it will return 0n. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / decodeQuotedCommentFromCaip373 ## Function: decodeQuotedCommentFromCaip373() ```ts function decodeQuotedCommentFromCaip373(caip373): DecodedQuotedCommentFromCaip373Result; ``` Defined in: packages/sdk/src/comments/caip373.ts:89 Parses a CAIP-373 quoted comment. This function does not validate if the comment really exists. See [https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-373.md](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-373.md) and [https://github.com/ecp-eth/ECPIP/discussions/2](https://github.com/ecp-eth/ECPIP/discussions/2) ### Parameters #### caip373 `string` ### Returns [`DecodedQuotedCommentFromCaip373Result`](/sdk-reference/comments/type-aliases/DecodedQuotedCommentFromCaip373Result.mdx) The parsed quoted comment from the CAIP-373 [**@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:184 Decodes a string value from encoded metadata bytes. If the string is valid JSON value, it returns the parsed JSON value. Otherwise it returns string. ### Parameters #### encodedValue `` `0x${string}` `` The hex-encoded bytes ### Returns [`Json`](/sdk-reference/comments/type-aliases/Json.mdx) The decoded string value. If the value can't be decoded, it will return an empty string. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / encodeAddressValue ## Function: encodeAddressValue() ```ts function encodeAddressValue(value): `0x${string}`; ``` Defined in: packages/sdk/src/comments/metadata.ts:689 Encodes an address value as bytes for metadata ### Parameters #### value `` `0x${string}` `` The address value to use ### Returns `` `0x${string}` `` The address as is if valid ### Throws If the value is not a valid address in hex format [**@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:206 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) / encodeBytesValue ## Function: encodeBytesValue() ```ts function encodeBytesValue(value): `0x${string}`; ``` Defined in: packages/sdk/src/comments/metadata.ts:718 Encodes a bytes value as bytes for metadata ### Parameters #### value The bytes value to use `` `0x${string}` `` | `Uint8Array`\<`ArrayBufferLike`> ### Returns `` `0x${string}` `` The bytes as is if valid ### Throws If the value is not a valid hex string [**@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:290 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:235 Encodes a number value as bytes for metadata. Be careful this function works only with integers, decimal numbers are not supported. ### Parameters #### value The number value to encode `number` | `bigint` ### Returns `` `0x${string}` `` The hex-encoded bytes (32 bytes big-endian) ### Throws If the value is not an integer [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / encodeQuotedCommentFromCaip373 ## Function: encodeQuotedCommentFromCaip373() ```ts function encodeQuotedCommentFromCaip373(__namedParameters): CAIP373QuotedComment; ``` Defined in: packages/sdk/src/comments/caip373.ts:164 Encodes a quoted comment from a CAIP-373 See [https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-373.md](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-373.md) and [https://github.com/ecp-eth/ECPIP/discussions/2](https://github.com/ecp-eth/ECPIP/discussions/2) ### Parameters #### \_\_namedParameters ##### blockNumber? `number` ##### chainId `number` ##### commentId `` `0x${string}` `` ### Returns [`CAIP373QuotedComment`](/sdk-reference/comments/type-aliases/CAIP373QuotedComment.mdx) The encoded quoted comment from the CAIP-373 [**@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:172 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:223 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:266 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:460 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:691 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:505 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:49 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:647 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? [`MetadataKeyTypeMap`](/sdk-reference/comments/type-aliases/MetadataKeyTypeMap.mdx) Optional mapping of known keys. If not provided, the key in the record will be the hex hash of the key. ### 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:631 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:62 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:66 The address of the app signer being approved *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:77 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### expiry? ```ts optional expiry: bigint; ``` Defined in: packages/sdk/src/comments/approval.ts:71 Timestamp when the approval expires ##### Default ```ts 1 year from now ``` *** #### writeContract ```ts writeContract: ContractWriteFunctions["addApproval"]; ``` Defined in: packages/sdk/src/comments/approval.ts:78 [**@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:81 ### Properties #### txHash ```ts txHash: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:82 [**@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:707 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:715 The app *** #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:711 The ID of the comment to edit *** #### content ```ts content: string; ``` Defined in: packages/sdk/src/comments/comment.ts:719 The content of the comment (either updated or original) *** #### deadline? ```ts optional deadline: bigint; ``` Defined in: packages/sdk/src/comments/comment.ts:729 The deadline of the comment ##### Default ```ts 1 day from now ``` *** #### nonce ```ts nonce: bigint; ``` Defined in: packages/sdk/src/comments/comment.ts:723 The nonce for the signature [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / CAIP373QuotedComment ## Type Alias: CAIP373QuotedComment ```ts type CAIP373QuotedComment = | `eip155:${number}:${Hex}:call:${Hex}` | `eip155:${number}:${Hex}:call:${Hex}:${number}`; ``` Defined in: packages/sdk/src/comments/caip373.ts:152 [**@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:518 ### Properties #### chainId ```ts chainId: number; ``` Defined in: packages/sdk/src/comments/comment.ts:520 *** #### commentData ```ts commentData: CommentInputData; ``` Defined in: packages/sdk/src/comments/comment.ts:519 *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:525 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:596 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:606 The app signer *** #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:602 The author of the comment *** #### chainId ```ts chainId: number; ``` Defined in: packages/sdk/src/comments/comment.ts:598 *** #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:597 *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:617 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### deadline? ```ts optional deadline: bigint; ``` Defined in: packages/sdk/src/comments/comment.ts:612 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:767 ### Properties #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:771 The author of the comment *** #### chainId ```ts chainId: number; ``` Defined in: packages/sdk/src/comments/comment.ts:781 The chain ID *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:786 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### edit ```ts edit: EditCommentData; ``` Defined in: packages/sdk/src/comments/comment.ts:777 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:520 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:528 The address of the app signer *** #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:524 The address of the author *** #### chainId ```ts chainId: number; ``` Defined in: packages/sdk/src/comments/approval.ts:532 The chain ID *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:544 The address of the comments contract *** #### deadline? ```ts optional deadline: bigint; ``` Defined in: packages/sdk/src/comments/approval.ts:540 Timestamp after which the signature becomes invalid *** #### nonce ```ts nonce: bigint; ``` Defined in: packages/sdk/src/comments/approval.ts:536 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:547 [**@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:971 ### Properties #### chainId ```ts chainId: number; ``` Defined in: packages/sdk/src/comments/comment.ts:975 *** #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:972 *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:976 *** #### message? ```ts optional message: string; ``` Defined in: packages/sdk/src/comments/comment.ts:974 *** #### reportee ```ts reportee: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:973 [**@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) / DecodedQuotedCommentFromCaip373Result ## Type Alias: DecodedQuotedCommentFromCaip373Result ```ts type DecodedQuotedCommentFromCaip373Result = { blockNumber: number | undefined; chainId: number; commentId: Hex; commentManagerAddress: Hex; }; ``` Defined in: packages/sdk/src/comments/caip373.ts:72 ### Properties #### blockNumber ```ts blockNumber: number | undefined; ``` Defined in: packages/sdk/src/comments/caip373.ts:76 *** #### chainId ```ts chainId: number; ``` Defined in: packages/sdk/src/comments/caip373.ts:74 *** #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/comments/caip373.ts:75 *** #### commentManagerAddress ```ts commentManagerAddress: Hex; ``` Defined in: packages/sdk/src/comments/caip373.ts:73 [**@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:280 ### Properties #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:284 The ID of the comment to delete *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:289 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### writeContract ```ts writeContract: ContractWriteFunctions["deleteComment"]; ``` 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) / DeleteCommentResult ## Type Alias: DeleteCommentResult ```ts type DeleteCommentResult = WaitableWriteContractHelperResult; ``` Defined in: packages/sdk/src/comments/comment.ts:293 [**@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:330 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:338 The app signer *** #### appSignature ```ts appSignature: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:351 The app signature *** #### authorSignature? ```ts optional authorSignature: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:355 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:334 The ID of the comment to delete *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:347 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### deadline ```ts deadline: bigint; ``` Defined in: packages/sdk/src/comments/comment.ts:342 The deadline for the signature *** #### writeContract ```ts writeContract: ContractWriteFunctions["deleteCommentWithSig"]; ``` Defined in: packages/sdk/src/comments/comment.ts:359 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:362 [**@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:740 [**@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:732 ### 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:824 ### Properties #### appSignature ```ts appSignature: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:843 The author signature. *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:839 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### edit ```ts edit: EditCommentData; ``` Defined in: packages/sdk/src/comments/comment.ts:830 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:834 The fee for the edit operation *** #### writeContract ```ts writeContract: ContractWriteFunctions["editComment"]; ``` Defined in: packages/sdk/src/comments/comment.ts:847 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:857 [**@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:891 ### Properties #### appSignature ```ts appSignature: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:910 The app signature *** #### authorSignature? ```ts optional authorSignature: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:914 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:906 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### edit ```ts edit: EditCommentData; ``` Defined in: packages/sdk/src/comments/comment.ts:897 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:901 The fee for the edit operation *** #### writeContract ```ts writeContract: ContractWriteFunctions["editCommentWithSig"]; ``` Defined in: packages/sdk/src/comments/comment.ts:918 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:929 [**@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:242 ### Properties #### commentData ```ts commentData: CreateCommentDataParams; ``` Defined in: packages/sdk/src/comments/comment.ts:246 The comment data to get ID for *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:251 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["getCommentId"]; ``` Defined in: packages/sdk/src/comments/comment.ts:252 [**@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:195 ### Properties #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:199 The ID of the comment to get *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:204 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["getComment"]; ``` Defined in: packages/sdk/src/comments/comment.ts:205 [**@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:208 ### Properties #### comment ```ts comment: CommentData; ``` Defined in: packages/sdk/src/comments/comment.ts:209 [**@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:419 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:431 The app signer *** #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:427 The author of the comment *** #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:423 The ID of the comment to delete *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:442 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### deadline ```ts deadline: bigint; ``` Defined in: packages/sdk/src/comments/comment.ts:437 The deadline for the signature ##### Default ```ts 1 day from now ``` *** #### readContract ```ts readContract: ContractReadFunctions["getDeleteCommentHash"]; ``` Defined in: packages/sdk/src/comments/comment.ts:443 [**@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:664 ### Properties #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:668 The author of the comment *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:677 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### edit ```ts edit: EditCommentData; ``` Defined in: packages/sdk/src/comments/comment.ts:672 The edit data *** #### readContract ```ts readContract: ContractReadFunctions["getEditCommentHash"]; ``` Defined in: packages/sdk/src/comments/comment.ts:678 [**@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:476 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:484 The app signer *** #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:480 The author of the comment *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:489 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["getNonce"]; ``` Defined in: packages/sdk/src/comments/comment.ts:490 [**@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:20 ### Properties #### app ```ts app: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:28 The app signer address *** #### author ```ts author: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:24 The author address *** #### commentsAddress? ```ts optional commentsAddress: Hex; ``` Defined in: packages/sdk/src/comments/approval.ts:33 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### readContract ```ts readContract: ContractReadFunctions["getIsApproved"]; ``` Defined in: packages/sdk/src/comments/approval.ts:34 [**@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 32 bytes hex encoded value of the UTF-8 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) / MetadataKeyDefinition ## Type Alias: MetadataKeyDefinition ```ts type MetadataKeyDefinition = { key: string; type: MetadataType; }; ``` Defined in: packages/sdk/src/comments/metadata.ts:84 ### Properties #### key ```ts key: string; ``` Defined in: packages/sdk/src/comments/metadata.ts:88 The original key e.g. "status", "author", etc. *** #### type ```ts type: MetadataType; ``` Defined in: packages/sdk/src/comments/metadata.ts:92 The type of the key e.g. "string", "uint256", etc. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [comments](/sdk-reference/comments/index.mdx) / MetadataKeyTypeMap ## Type Alias: MetadataKeyTypeMap ```ts type MetadataKeyTypeMap = Record; ``` Defined in: packages/sdk/src/comments/metadata.ts:98 Mapping of known hex-encoded keys to their original key and type [**@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:75 JS/SDK/Indexer format for metadata storage The keys is either in format "type key" if the key to type map has been provided, or just the hex hash of the key if not. ### Examples ```ts // "key to type map provided" { "string status": { key: "status", type: "string", value: "0x0000000000000000000000000000000000000000000000000000000000000000", }, } ``` ```ts // "key to type map not provided" { "0x0000000000000000000000000000000000000000000000000000000000000000": { key: "0x0000000000000000000000000000000000000000000000000000000000000000", type: "bytes", value: "0x0000000000000000000000000000000000000000000000000000000000000000", }, } ``` [**@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:16 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:52 ### Properties #### appSignature ```ts appSignature: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:62 The app signature *** #### comment ```ts comment: CommentInputData; ``` Defined in: packages/sdk/src/comments/comment.ts:58 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:71 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### fee? ```ts optional fee: bigint; ``` Defined in: packages/sdk/src/comments/comment.ts:66 The fee for the comment *** #### writeContract ```ts writeContract: ContractWriteFunctions["postComment"]; ``` Defined in: packages/sdk/src/comments/comment.ts:75 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:78 [**@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:120 ### Properties #### appSignature ```ts appSignature: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:130 The app signature *** #### authorSignature? ```ts optional authorSignature: Hex; ``` Defined in: packages/sdk/src/comments/comment.ts:134 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:126 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:143 The address of the comments contract ##### Default ```ts COMMENT_MANAGER_ADDRESS ``` *** #### fee? ```ts optional fee: bigint; ``` Defined in: packages/sdk/src/comments/comment.ts:138 The fee for the comment *** #### writeContract ```ts writeContract: ContractWriteFunctions["postCommentWithSig"]; ``` Defined in: packages/sdk/src/comments/comment.ts:147 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:150 [**@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: ZodEffects; authMethod: ZodNativeEnum; author: ZodEffects; channelId: ZodBigInt; commentType: ZodNumber; content: ZodString; createdAt: ZodBigInt; metadata: ZodDefault; value: ZodEffects; }, "strip", ZodTypeAny, { key: `0x${string}`; value: `0x${string}`; }, { key: `0x${string}`; value: `0x${string}`; }>, "many">>; parentId: ZodEffects; 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: ZodEffects; }, "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: ZodEffects; }, "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: ZodEffects; operation: ZodNativeEnum; value: ZodEffects; }, "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: ZodEffects; value: ZodEffects; }, "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:34 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: ZodEffects; channelId: ZodDefault; commentType: ZodDefault; content: ZodString; deadline: ZodBigInt; metadata: ZodDefault; value: ZodEffects; }, "strip", ZodTypeAny, { key: `0x${string}`; value: `0x${string}`; }, { key: `0x${string}`; value: `0x${string}`; }>, "many">>; parentId: ZodEffects; 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: ZodEffects; channelId: ZodDefault; commentType: ZodDefault; content: ZodString; deadline: ZodBigInt; metadata: ZodDefault; value: ZodEffects; }, "strip", ZodTypeAny, { key: `0x${string}`; value: `0x${string}`; }, { key: `0x${string}`; value: `0x${string}`; }>, "many">>; parentId: ZodEffects; 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:308 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:381 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:867 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:939 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:96 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:168 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) / getOneDayFromNowInSeconds ## Function: getOneDayFromNowInSeconds() ```ts function getOneDayFromNowInSeconds(): bigint; ``` Defined in: packages/sdk/src/core/utils.ts:225 Get the number of seconds to one day from now ### Returns `bigint` one day from now in seconds in bigint [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [core](/sdk-reference/core/index.mdx) / getOneMinuteFromNowInSeconds ## Function: getOneMinuteFromNowInSeconds() ```ts function getOneMinuteFromNowInSeconds(): bigint; ``` Defined in: packages/sdk/src/core/utils.ts:233 Get the number of seconds to one minute from now ### Returns `bigint` one minute from now in seconds in bigint [**@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:165 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:31 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; retryCondition?: (error) => boolean; 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. *** #### retryCondition()? ```ts optional retryCondition: (error) => boolean; ``` Defined in: packages/sdk/src/core/utils.ts:155 A function to determine if the function should be retried. By default, the function will always retry until the number of retries is reached. If the number of retries is not set then this function will be ignored. ##### Parameters ##### error `unknown` The error that occurred. ##### Returns `boolean` True if the function should be retried, false otherwise. *** #### 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: ZodEffects; ``` 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) / ERC165ContractReadFunctions ## Type Alias: ERC165ContractReadFunctions ```ts type ERC165ContractReadFunctions = { supportsInterface: (args) => Promise>; }; ``` Defined in: packages/sdk/src/types.ts:12 ### Properties #### supportsInterface() ```ts supportsInterface: (args) => Promise>; ``` Defined in: packages/sdk/src/types.ts:13 ##### Parameters ##### args `ReadContractParameters`\<`ERC165Type`, `"supportsInterface"`> ##### Returns `Promise`\<`ReadContractReturnType`\<`ERC165Type`, `"supportsInterface"`>> [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / ERC20ContractReadFunctions ## Type Alias: ERC20ContractReadFunctions ```ts type ERC20ContractReadFunctions = { decimals: (args) => Promise>; name: (args) => Promise>; symbol: (args) => Promise>; totalSupply: (args) => Promise>; }; ``` Defined in: packages/sdk/src/types.ts:18 ### Properties #### decimals() ```ts decimals: (args) => Promise>; ``` Defined in: packages/sdk/src/types.ts:25 ##### Parameters ##### args `ReadContractParameters`\<`ERC20Type`, `"decimals"`> ##### Returns `Promise`\<`ReadContractReturnType`\<`ERC20Type`, `"decimals"`>> *** #### name() ```ts name: (args) => Promise>; ``` Defined in: packages/sdk/src/types.ts:19 ##### Parameters ##### args `ReadContractParameters`\<`ERC20Type`, `"name"`> ##### Returns `Promise`\<`ReadContractReturnType`\<`ERC20Type`, `"name"`>> *** #### symbol() ```ts symbol: (args) => Promise>; ``` Defined in: packages/sdk/src/types.ts:22 ##### Parameters ##### args `ReadContractParameters`\<`ERC20Type`, `"symbol"`> ##### Returns `Promise`\<`ReadContractReturnType`\<`ERC20Type`, `"symbol"`>> *** #### totalSupply() ```ts totalSupply: (args) => Promise>; ``` Defined in: packages/sdk/src/types.ts:28 ##### Parameters ##### args `ReadContractParameters`\<`ERC20Type`, `"totalSupply"`> ##### Returns `Promise`\<`ReadContractReturnType`\<`ERC20Type`, `"totalSupply"`>> [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / LegacyTakesChannelContractReadFunctions ## Type Alias: LegacyTakesChannelContractReadFunctions ```ts type LegacyTakesChannelContractReadFunctions = { commentFee: (args) => Promise>; }; ``` Defined in: packages/sdk/src/types.ts:33 ### Properties #### commentFee() ```ts commentFee: (args) => Promise>; ``` Defined in: packages/sdk/src/types.ts:34 ##### Parameters ##### args `ReadContractParameters`\<`LegacyTakesChannelType`, `"commentFee"`> ##### Returns `Promise`\<`ReadContractReturnType`\<`LegacyTakesChannelType`, `"commentFee"`>> [**@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) / BaseHookABI ## Variable: BaseHookABI ```ts const BaseHookABI: readonly [{ inputs: 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: "commentData"; type: "tuple"; }, { 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: "msgSender"; type: "address"; }]; name: "estimateAddCommentFee"; outputs: readonly [{ components: readonly [{ internalType: "uint256"; name: "amount"; type: "uint256"; }, { internalType: "address"; name: "asset"; type: "address"; }, { 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: "struct FeeEstimatable.FeeEstimation"; name: "feeEstimation"; type: "tuple"; }]; stateMutability: "view"; type: "function"; }, { inputs: 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: "commentData"; type: "tuple"; }, { 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: "msgSender"; type: "address"; }]; name: "estimateEditCommentFee"; outputs: readonly [{ components: readonly [{ internalType: "uint256"; name: "amount"; type: "uint256"; }, { internalType: "address"; name: "asset"; type: "address"; }, { 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: "struct FeeEstimatable.FeeEstimation"; name: "feeEstimation"; type: "tuple"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "getHookPermissions"; outputs: readonly [{ 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: ""; type: "tuple"; }]; stateMutability: "pure"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "channel"; type: "address"; }, { internalType: "uint256"; name: "channelId"; type: "uint256"; }, { 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: "channelData"; type: "tuple"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }]; name: "onChannelUpdate"; outputs: readonly [{ internalType: "bool"; name: ""; type: "bool"; }]; stateMutability: "nonpayable"; type: "function"; }, { inputs: 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: "commentData"; type: "tuple"; }, { 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: "msgSender"; type: "address"; }, { internalType: "bytes32"; name: "commentId"; type: "bytes32"; }]; name: "onCommentAdd"; outputs: readonly [{ components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: ""; type: "tuple[]"; }]; stateMutability: "payable"; type: "function"; }, { inputs: 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: "commentData"; type: "tuple"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: "hookMetadata"; type: "tuple[]"; }, { internalType: "address"; name: "msgSender"; type: "address"; }, { internalType: "bytes32"; name: "commentId"; type: "bytes32"; }]; name: "onCommentDelete"; outputs: readonly [{ internalType: "bool"; name: ""; type: "bool"; }]; stateMutability: "nonpayable"; type: "function"; }, { inputs: 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: "commentData"; type: "tuple"; }, { 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: "msgSender"; type: "address"; }, { internalType: "bytes32"; name: "commentId"; type: "bytes32"; }]; name: "onCommentEdit"; outputs: readonly [{ components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: ""; type: "tuple[]"; }]; stateMutability: "payable"; type: "function"; }, { inputs: 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: "commentData"; type: "tuple"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: "hookMetadata"; type: "tuple[]"; }, { internalType: "address"; name: "msgSender"; type: "address"; }, { internalType: "bytes32"; name: "commentId"; type: "bytes32"; }]; name: "onCommentHookDataUpdate"; outputs: readonly [{ 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: ""; type: "tuple[]"; }]; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "channelManager"; type: "address"; }, { 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: "channelData"; type: "tuple"; }, { internalType: "uint256"; name: "channelId"; type: "uint256"; }, { components: readonly [{ internalType: "bytes32"; name: "key"; type: "bytes32"; }, { internalType: "bytes"; name: "value"; type: "bytes"; }]; internalType: "struct Metadata.MetadataEntry[]"; name: "metadata"; type: "tuple[]"; }]; name: "onInitialize"; outputs: readonly [{ internalType: "bool"; name: ""; type: "bool"; }]; 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: "HookNotImplemented"; type: "error"; }]; ``` Defined in: packages/sdk/src/abis.ts:3432 ABI of the BaseHook contract. [**@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\_CHANNEL\_URL ## Variable: COMMENTS\_EMBED\_DEFAULT\_BY\_CHANNEL\_URL ```ts const COMMENTS_EMBED_DEFAULT_BY_CHANNEL_URL: "https://embed.ethcomments.xyz/by-channel" = "https://embed.ethcomments.xyz/by-channel"; ``` Defined in: packages/sdk/src/constants.ts:102 The default `embedUri` for the CommentsByChannelEmbed 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:124 [**@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:125 [**@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:117 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) / ERC165\_ABI ## Variable: ERC165\_ABI ```ts const ERC165_ABI: readonly [{ inputs: readonly [{ internalType: "bytes4"; name: "interfaceId"; type: "bytes4"; }]; name: "supportsInterface"; outputs: readonly [{ internalType: "bool"; name: ""; type: "bool"; }]; stateMutability: "view"; type: "function"; }]; ``` Defined in: packages/sdk/src/extraABIs.ts:7 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / ERC20\_ABI ## Variable: ERC20\_ABI ```ts const ERC20_ABI: readonly [{ inputs: readonly []; name: "name"; outputs: readonly [{ internalType: "string"; name: ""; type: "string"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "symbol"; outputs: readonly [{ internalType: "string"; name: ""; type: "string"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "decimals"; outputs: readonly [{ internalType: "uint8"; name: ""; type: "uint8"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly []; name: "totalSupply"; outputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "account"; type: "address"; }]; name: "balanceOf"; outputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "recipient"; type: "address"; }, { internalType: "uint256"; name: "amount"; type: "uint256"; }]; name: "transfer"; outputs: readonly [{ internalType: "bool"; name: ""; type: "bool"; }]; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "sender"; type: "address"; }, { internalType: "address"; name: "recipient"; type: "address"; }, { internalType: "uint256"; name: "amount"; type: "uint256"; }]; name: "transferFrom"; outputs: readonly [{ internalType: "bool"; name: ""; type: "bool"; }]; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "spender"; type: "address"; }, { internalType: "uint256"; name: "amount"; type: "uint256"; }]; name: "approve"; outputs: readonly [{ internalType: "bool"; name: ""; type: "bool"; }]; stateMutability: "nonpayable"; type: "function"; }, { inputs: readonly [{ internalType: "address"; name: "owner"; type: "address"; }, { internalType: "address"; name: "spender"; type: "address"; }]; name: "allowance"; outputs: readonly [{ internalType: "uint256"; name: ""; type: "uint256"; }]; stateMutability: "view"; type: "function"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "from"; type: "address"; }, { indexed: true; internalType: "address"; name: "to"; type: "address"; }, { indexed: false; internalType: "uint256"; name: "value"; type: "uint256"; }]; name: "Transfer"; type: "event"; }, { anonymous: false; inputs: readonly [{ indexed: true; internalType: "address"; name: "owner"; type: "address"; }, { indexed: true; internalType: "address"; name: "spender"; type: "address"; }, { indexed: false; internalType: "uint256"; name: "value"; type: "uint256"; }]; name: "Approval"; type: "event"; }]; ``` Defined in: packages/sdk/src/extraABIs.ts:29 [**@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:110 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) / INTERFACE\_ID\_ERC1155 ## Variable: INTERFACE\_ID\_ERC1155 ```ts const INTERFACE_ID_ERC1155: "0xd9b67a26" = "0xd9b67a26"; ``` Defined in: packages/sdk/src/constants.ts:144 The ERC165 interface ID for the ERC1155 contracts. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / INTERFACE\_ID\_ERC165 ## Variable: INTERFACE\_ID\_ERC165 ```ts const INTERFACE_ID_ERC165: "0x01ffc9a7" = "0x01ffc9a7"; ``` Defined in: packages/sdk/src/constants.ts:136 The ERC165 interface ID for the ERC165 contracts. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / INTERFACE\_ID\_ERC721 ## Variable: INTERFACE\_ID\_ERC721 ```ts const INTERFACE_ID_ERC721: "0x80ac58cd" = "0x80ac58cd"; ``` Defined in: packages/sdk/src/constants.ts:140 The ERC165 interface ID for the ERC721 contracts. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [defaultExports](/sdk-reference/defaultExports/index.mdx) / LEGACY\_TAKES\_CHANNEL\_ABI ## Variable: LEGACY\_TAKES\_CHANNEL\_ABI ```ts const LEGACY_TAKES_CHANNEL_ABI: readonly [{ inputs: readonly []; name: "commentFee"; outputs: readonly [{ type: "uint256"; }]; stateMutability: "view"; type: "function"; }]; ``` Defined in: packages/sdk/src/extraABIs.ts:254 [**@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:122 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) / NATIVE\_ASSET\_ADDRESS ## Variable: NATIVE\_ASSET\_ADDRESS ```ts const NATIVE_ASSET_ADDRESS: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; ``` Defined in: packages/sdk/src/constants.ts:130 Asset address used for representing native assets. [**@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:157 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) / CommentsByChannelEmbed ## Function: CommentsByChannelEmbed() ```ts function CommentsByChannelEmbed(props): null | Element; ``` Defined in: packages/sdk/src/embed/react.tsx:232 Renders comments embed iframe for a specific channel. This is client component only. ### Parameters #### props [`CommentsByChannelEmbedProps`](/sdk-reference/embed/type-aliases/CommentsByChannelEmbedProps.mdx) ### Returns `null` | `Element` [**@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:200 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:57 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:64 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) / parseCommentsEmbedConfig ## Function: parseCommentsEmbedConfig() ```ts function parseCommentsEmbedConfig(compressedConfig): | undefined | { app: `0x${string}` | "all" | "embed"; chainId: 8453 | 31337; channelId?: bigint; disablePromotion: boolean; gasSponsorship: "not-gasless" | "gasless-not-preapproved" | "gasless-preapproved"; hideEmptyScreen: boolean; hookFeeWarningThresholdUsd: number; moderationStatus?: ("approved" | "pending" | "rejected")[]; reactions?: { icon: string; value: string; }[]; restrictMaximumContainerWidth: boolean; sorting: { algorithm: "chronological" | "hot"; hot: { reaction: string; volumeMetadataKey: string; }; }; 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?: ... | ...; size?: ... | ...; }; empty-screen-title?: { lineHeight?: ... | ...; size?: ... | ...; }; error-screen-title?: { lineHeight?: ... | ...; size?: ... | ...; }; headline?: { lineHeight?: ... | ...; size?: ... | ...; }; sm?: { lineHeight?: ... | ...; size?: ... | ...; }; xs?: { lineHeight?: ... | ...; size?: ... | ...; }; }; }; mode?: "dark" | "light"; other?: { radius?: string; root-padding-horizontal?: string; root-padding-vertical?: string; }; }; title?: string; }; ``` Defined in: packages/sdk/src/embed/utils.ts:126 Parse compressed config from `config` search param. ### Parameters #### compressedConfig `string` ### Returns `undefined` ```ts { app: `0x${string}` | "all" | "embed"; chainId: 8453 | 31337; channelId?: bigint; disablePromotion: boolean; gasSponsorship: "not-gasless" | "gasless-not-preapproved" | "gasless-preapproved"; hideEmptyScreen: boolean; hookFeeWarningThresholdUsd: number; moderationStatus?: ("approved" | "pending" | "rejected")[]; reactions?: { icon: string; value: string; }[]; restrictMaximumContainerWidth: boolean; sorting: { algorithm: "chronological" | "hot"; hot: { reaction: string; volumeMetadataKey: string; }; }; 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?: ... | ...; size?: ... | ...; }; empty-screen-title?: { lineHeight?: ... | ...; size?: ... | ...; }; error-screen-title?: { lineHeight?: ... | ...; size?: ... | ...; }; headline?: { lineHeight?: ... | ...; size?: ... | ...; }; sm?: { lineHeight?: ... | ...; size?: ... | ...; }; xs?: { lineHeight?: ... | ...; size?: ... | ...; }; }; }; mode?: "dark" | "light"; other?: { radius?: string; root-padding-horizontal?: string; root-padding-vertical?: string; }; }; title?: string; } ``` #### app ```ts app: `0x${string}` | "all" | "embed"; ``` Specify the app signer address the comments associated with. * Set it to "all" will cause the embed to retrieve all comments from all apps. * Set it to "embed" will cause the embed to retrieve all comments posted by the embed app. * Set it to a valid hex address will cause the embed to retrieve all comments posted by the specified app. ##### Default ```ts "all" ``` #### chainId ```ts 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) #### channelId? ```ts optional channelId: bigint; ``` The id of the channel to post the comments to. #### disablePromotion ```ts disablePromotion: boolean; ``` Hide powered by ECP link ##### Default ```ts false ``` #### gasSponsorship ```ts gasSponsorship: "not-gasless" | "gasless-not-preapproved" | "gasless-preapproved"; ``` The gas sponsorship to use when posting comments. ##### Default ```ts "gasless-not-preapproved" ``` #### hideEmptyScreen ```ts hideEmptyScreen: boolean; ``` Hide the empty state screen shown when there are no comments. ##### Default ```ts false ``` #### hookFeeWarningThresholdUsd ```ts hookFeeWarningThresholdUsd: number; ``` USD threshold for showing a warning before hook transactions. When a channel hook charges fees exceeding this amount, a confirmation dialog is shown before opening the wallet. Set to 0 to always warn. ##### Default ```ts 1 ``` #### moderationStatus? ```ts optional moderationStatus: ("approved" | "pending" | "rejected")[]; ``` Filter comments by moderation status. Pass an array of statuses to include, e.g. `["approved"]` for only approved comments, or `["approved", "rejected", "pending"]` to show all comments regardless of moderation status. When omitted the indexer applies its default moderation filtering. #### reactions? ```ts optional reactions: { icon: string; value: string; }[]; ``` Reactions rendered as action buttons under each comment. Each reaction is a pair of `{ value, icon }`. #### restrictMaximumContainerWidth ```ts restrictMaximumContainerWidth: boolean; ``` Restrict the maximum container width ##### Default ```ts true ``` #### sorting ```ts sorting: { algorithm: "chronological" | "hot"; hot: { reaction: string; volumeMetadataKey: string; }; }; ``` Sorting configuration for comments in the embed. ##### sorting.algorithm ```ts algorithm: "chronological" | "hot"; ``` Sorting algorithm. * "chronological" sorts by creation time descending. * "hot" applies a Hacker News-style time-decayed ranking score. ##### Default ```ts "chronological" ``` ##### sorting.hot ```ts hot: { reaction: string; volumeMetadataKey: string; }; ``` Hot ranking configuration. ##### sorting.hot.reaction ```ts reaction: string; ``` Reaction key used as score input for hot sorting. ##### Default ```ts "like" ``` ##### sorting.hot.volumeMetadataKey ```ts volumeMetadataKey: string; ``` Metadata key used to read a numeric volume score from hook metadata. ##### Default ```ts "volume" ``` #### 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?: ... | ...; size?: ... | ...; }; empty-screen-title?: { lineHeight?: ... | ...; size?: ... | ...; }; error-screen-title?: { lineHeight?: ... | ...; size?: ... | ...; }; headline?: { lineHeight?: ... | ...; size?: ... | ...; }; sm?: { lineHeight?: ... | ...; size?: ... | ...; }; xs?: { lineHeight?: ... | ...; size?: ... | ...; }; }; }; 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?: ... | ...; size?: ... | ...; }; empty-screen-title?: { lineHeight?: ... | ...; size?: ... | ...; }; error-screen-title?: { lineHeight?: ... | ...; size?: ... | ...; }; headline?: { lineHeight?: ... | ...; size?: ... | ...; }; sm?: { lineHeight?: ... | ...; size?: ... | ...; }; xs?: { lineHeight?: ... | ...; size?: ... | ...; }; }; }; ``` ##### 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?: ... | ...; size?: ... | ...; }; empty-screen-title?: { lineHeight?: ... | ...; size?: ... | ...; }; error-screen-title?: { lineHeight?: ... | ...; size?: ... | ...; }; headline?: { lineHeight?: ... | ...; size?: ... | ...; }; sm?: { lineHeight?: ... | ...; size?: ... | ...; }; xs?: { lineHeight?: ... | ...; size?: ... | ...; }; }; ``` ##### theme.font.sizes.base? ```ts optional base: { lineHeight?: ... | ...; size?: ... | ...; } = EmbedConfigFontSizeSchema; ``` ##### theme.font.sizes.base.lineHeight? ```ts optional lineHeight: ... | ...; ``` ##### theme.font.sizes.base.size? ```ts optional size: ... | ...; ``` ##### theme.font.sizes.empty-screen-title? ```ts optional empty-screen-title: { lineHeight?: ... | ...; size?: ... | ...; } = EmbedConfigFontSizeSchema; ``` ##### theme.font.sizes.empty-screen-title.lineHeight? ```ts optional lineHeight: ... | ...; ``` ##### theme.font.sizes.empty-screen-title.size? ```ts optional size: ... | ...; ``` ##### theme.font.sizes.error-screen-title? ```ts optional error-screen-title: { lineHeight?: ... | ...; size?: ... | ...; } = EmbedConfigFontSizeSchema; ``` ##### theme.font.sizes.error-screen-title.lineHeight? ```ts optional lineHeight: ... | ...; ``` ##### theme.font.sizes.error-screen-title.size? ```ts optional size: ... | ...; ``` ##### theme.font.sizes.headline? ```ts optional headline: { lineHeight?: ... | ...; size?: ... | ...; } = EmbedConfigFontSizeSchema; ``` ##### theme.font.sizes.headline.lineHeight? ```ts optional lineHeight: ... | ...; ``` ##### theme.font.sizes.headline.size? ```ts optional size: ... | ...; ``` ##### theme.font.sizes.sm? ```ts optional sm: { lineHeight?: ... | ...; size?: ... | ...; } = EmbedConfigFontSizeSchema; ``` ##### theme.font.sizes.sm.lineHeight? ```ts optional lineHeight: ... | ...; ``` ##### theme.font.sizes.sm.size? ```ts optional size: ... | ...; ``` ##### theme.font.sizes.xs? ```ts optional xs: { lineHeight?: ... | ...; size?: ... | ...; } = EmbedConfigFontSizeSchema; ``` ##### theme.font.sizes.xs.lineHeight? ```ts optional lineHeight: ... | ...; ``` ##### theme.font.sizes.xs.size? ```ts optional size: ... | ...; ``` ##### 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; ``` #### title? ```ts optional title: string; ``` Custom heading text displayed at the top of the comment section. ##### Default ```ts "Comments" ``` Parsed config or `undefined` when parsing fails. [**@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:81 ### 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) / CommentsByChannelEmbedProps ## Type Alias: CommentsByChannelEmbedProps ```ts type CommentsByChannelEmbedProps = { channelId: string | bigint; containerProps?: React.HTMLAttributes; embedUri?: string; iframeProps?: React.IframeHTMLAttributes; } & Omit; ``` Defined in: packages/sdk/src/embed/react.tsx:119 ### Type declaration #### channelId ```ts channelId: string | bigint; ``` The channel ID 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:100 ### 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:19 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; } | { channelId: string | bigint; }; }; ``` Defined in: packages/sdk/src/embed/utils.ts:38 Parameters for `createCommentsEmbedURL` ### Properties #### config? ```ts optional config: EmbedConfigSchemaInputType; ``` Defined in: packages/sdk/src/embed/utils.ts:54 The configuration for the comments embed. *** #### embedUri ```ts embedUri: string; ``` Defined in: packages/sdk/src/embed/utils.ts:42 The URI of the comments embed iframe page. *** #### source ```ts source: | { targetUri: string; } | { author: Hex; } | { commentId: Hex; } | { channelId: string | bigint; }; ``` Defined in: packages/sdk/src/embed/utils.ts:46 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:142 ### 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) / EmbedConfigHotSortingSchemaType ## Type Alias: EmbedConfigHotSortingSchemaType ```ts type EmbedConfigHotSortingSchemaType = { reaction: string; volumeMetadataKey: string; }; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:251 ### Type declaration #### reaction ```ts reaction: string; ``` Reaction key used as score input for hot sorting. ##### Default ```ts "like" ``` #### volumeMetadataKey ```ts volumeMetadataKey: string; ``` Metadata key used to read a numeric volume score from hook metadata. ##### Default ```ts "volume" ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigReactionSchemaType ## Type Alias: EmbedConfigReactionSchemaType ```ts type EmbedConfigReactionSchemaType = { icon: string; value: string; }; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:204 ### Type declaration #### icon ```ts icon: string; ``` Icon token, supports emoji (e.g. "🔥") or a Phosphor icon slug (e.g. "heart", "arrow-fat-up"). #### value ```ts value: string; ``` Lowercase value used as reaction content. [**@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 = { app?: `0x${string}` | "all" | "embed"; chainId?: 8453 | 31337; channelId?: bigint; disablePromotion?: boolean; gasSponsorship?: "not-gasless" | "gasless-not-preapproved" | "gasless-preapproved"; hideEmptyScreen?: boolean; hookFeeWarningThresholdUsd?: number; moderationStatus?: ("approved" | "pending" | "rejected")[]; reactions?: { icon: string; value: string; }[]; restrictMaximumContainerWidth?: boolean; sorting?: { algorithm?: "chronological" | "hot"; hot?: { reaction?: string; volumeMetadataKey?: string; }; }; 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; }; }; title?: string; }; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:376 Custom configuration for `` component. ### Type declaration #### app? ```ts optional app: `0x${string}` | "all" | "embed"; ``` Specify the app signer address the comments associated with. * Set it to "all" will cause the embed to retrieve all comments from all apps. * Set it to "embed" will cause the embed to retrieve all comments posted by the embed app. * Set it to a valid hex address will cause the embed to retrieve all comments posted by the specified app. ##### Default ```ts "all" ``` #### 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) #### channelId? ```ts optional channelId: bigint; ``` The id of the channel to post the comments to. #### disablePromotion? ```ts optional disablePromotion: boolean; ``` Hide powered by ECP link ##### Default ```ts false ``` #### gasSponsorship? ```ts optional gasSponsorship: "not-gasless" | "gasless-not-preapproved" | "gasless-preapproved"; ``` The gas sponsorship to use when posting comments. ##### Default ```ts "gasless-not-preapproved" ``` #### hideEmptyScreen? ```ts optional hideEmptyScreen: boolean; ``` Hide the empty state screen shown when there are no comments. ##### Default ```ts false ``` #### hookFeeWarningThresholdUsd? ```ts optional hookFeeWarningThresholdUsd: number; ``` USD threshold for showing a warning before hook transactions. When a channel hook charges fees exceeding this amount, a confirmation dialog is shown before opening the wallet. Set to 0 to always warn. ##### Default ```ts 1 ``` #### moderationStatus? ```ts optional moderationStatus: ("approved" | "pending" | "rejected")[]; ``` Filter comments by moderation status. Pass an array of statuses to include, e.g. `["approved"]` for only approved comments, or `["approved", "rejected", "pending"]` to show all comments regardless of moderation status. When omitted the indexer applies its default moderation filtering. #### reactions? ```ts optional reactions: { icon: string; value: string; }[]; ``` Reactions rendered as action buttons under each comment. Each reaction is a pair of `{ value, icon }`. #### restrictMaximumContainerWidth? ```ts optional restrictMaximumContainerWidth: boolean; ``` Restrict the maximum container width ##### Default ```ts true ``` #### sorting? ```ts optional sorting: { algorithm?: "chronological" | "hot"; hot?: { reaction?: string; volumeMetadataKey?: string; }; }; ``` Sorting configuration for comments in the embed. ##### sorting.algorithm? ```ts optional algorithm: "chronological" | "hot"; ``` Sorting algorithm. * "chronological" sorts by creation time descending. * "hot" applies a Hacker News-style time-decayed ranking score. ##### Default ```ts "chronological" ``` ##### sorting.hot? ```ts optional hot: { reaction?: string; volumeMetadataKey?: string; }; ``` Hot ranking configuration. ##### sorting.hot.reaction? ```ts optional reaction: string; ``` Reaction key used as score input for hot sorting. ##### Default ```ts "like" ``` ##### sorting.hot.volumeMetadataKey? ```ts optional volumeMetadataKey: string; ``` Metadata key used to read a numeric volume score from hook metadata. ##### Default ```ts "volume" ``` #### 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; ``` #### title? ```ts optional title: string; ``` Custom heading text displayed at the top of the comment section. ##### Default ```ts "Comments" ``` [**@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:377 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigSortingAlgorithmSchemaType ## Type Alias: EmbedConfigSortingAlgorithmSchemaType ```ts type EmbedConfigSortingAlgorithmSchemaType = "chronological" | "hot"; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:232 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigSortingSchemaType ## Type Alias: EmbedConfigSortingSchemaType ```ts type EmbedConfigSortingSchemaType = { algorithm: "chronological" | "hot"; hot: { reaction: string; volumeMetadataKey: string; }; }; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:271 ### Type declaration #### algorithm ```ts algorithm: "chronological" | "hot"; ``` Sorting algorithm. * "chronological" sorts by creation time descending. * "hot" applies a Hacker News-style time-decayed ranking score. ##### Default ```ts "chronological" ``` #### hot ```ts hot: { reaction: string; volumeMetadataKey: string; }; ``` Hot ranking configuration. ##### hot.reaction ```ts reaction: string; ``` Reaction key used as score input for hot sorting. ##### Default ```ts "like" ``` ##### hot.volumeMetadataKey ```ts volumeMetadataKey: string; ``` Metadata key used to read a numeric volume score from hook metadata. ##### Default ```ts "volume" ``` [**@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:175 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:96 ### 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:106 ### 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:87 ### 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:162 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:392 ### 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:384 ### 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) / EMBED\_DEFAULT\_REACTIONS ## Variable: EMBED\_DEFAULT\_REACTIONS ```ts const EMBED_DEFAULT_REACTIONS: readonly [{ icon: "heart"; value: "like"; }]; ``` Defined in: packages/sdk/src/embed/reactions.ts:30 Fallback reaction when no custom reactions are configured. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EMBED\_REACTION\_ICON\_PRESETS ## Variable: EMBED\_REACTION\_ICON\_PRESETS ```ts const EMBED_REACTION_ICON_PRESETS: readonly ["heart", "repost", "caret-up", "caret-down"]; ``` Defined in: packages/sdk/src/embed/reactions.ts:37 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EMBED\_REACTION\_PRESETS ## Variable: EMBED\_REACTION\_PRESETS ```ts const EMBED_REACTION_PRESETS: readonly [{ icon: "heart"; value: "like"; }, { icon: "caret-up"; value: "upvote"; }, { icon: "caret-down"; value: "downvote"; }, { icon: "repost"; value: "repost"; }]; ``` Defined in: packages/sdk/src/embed/reactions.ts:8 Built-in reaction presets for iframe configurators. Values are intentionally lowercase. [**@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:117 [**@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:110 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigHotSortingSchema ## Variable: EmbedConfigHotSortingSchema ```ts const EmbedConfigHotSortingSchema: ZodObject; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:236 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigReactionSchema ## Variable: EmbedConfigReactionSchema ```ts const EmbedConfigReactionSchema: ZodObject; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:179 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigReactionsSchema ## Variable: EmbedConfigReactionsSchema ```ts const EmbedConfigReactionsSchema: ZodEffects, "many">, { icon: string; value: string; }[], { icon: string; value: string; }[]>; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:208 [**@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:278 The zod schema for `EmbedConfigSchemaType` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigSortingAlgorithmSchema ## Variable: EmbedConfigSortingAlgorithmSchema ```ts const EmbedConfigSortingAlgorithmSchema: ZodEnum; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:227 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [embed](/sdk-reference/embed/index.mdx) / EmbedConfigSortingSchema ## Variable: EmbedConfigSortingSchema ```ts const EmbedConfigSortingSchema: ZodObject; ``` Defined in: packages/sdk/src/embed/schemas/index.ts:255 [**@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:167 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:91 [**@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:100 [**@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:55 [**@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:147 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:388 [**@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:379 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / ResponseError ## Class: ResponseError Defined in: packages/sdk/src/indexer/errors.ts:4 An error thrown when a response from the indexer is not successful. ### Extends * `Error` ### Constructors #### Constructor ```ts new ResponseError(message, response): ResponseError; ``` Defined in: packages/sdk/src/indexer/errors.ts:5 ##### Parameters ##### message `string` ##### response `Response` ##### Returns `ResponseError` ##### Overrides ```ts Error.constructor ``` ### Properties #### cause? ```ts optional cause: unknown; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es2022.error.d.ts:26 ##### Inherited from ```ts Error.cause ``` *** #### message ```ts message: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1077 ##### Inherited from ```ts Error.message ``` *** #### name ```ts name: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1076 ##### Inherited from ```ts Error.name ``` *** #### response ```ts readonly response: Response; ``` Defined in: packages/sdk/src/indexer/errors.ts:7 *** #### stack? ```ts optional stack: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1078 ##### Inherited from ```ts Error.stack ``` *** #### stackTraceLimit ```ts static stackTraceLimit: number; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:68 The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`). The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed. If set to a non-number value, or set to a negative number, stack traces will not capture any frames. ##### Inherited from ```ts Error.stackTraceLimit ``` ### Methods #### captureStackTrace() ```ts static captureStackTrace(targetObject, constructorOpt?): void; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:52 Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called. ```js const myObject = {}; Error.captureStackTrace(myObject); myObject.stack; // Similar to `new Error().stack` ``` The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`. The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace. The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance: ```js function a() { b(); } function b() { c(); } function c() { // Create an error without stack trace to avoid calculating the stack trace twice. const { stackTraceLimit } = Error; Error.stackTraceLimit = 0; const error = new Error(); Error.stackTraceLimit = stackTraceLimit; // Capture the stack trace above function b Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace throw error; } a(); ``` ##### Parameters ##### targetObject `object` ##### constructorOpt? `Function` ##### Returns `void` ##### Inherited from ```ts Error.captureStackTrace ``` *** #### prepareStackTrace() ```ts static prepareStackTrace(err, stackTraces): any; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:56 ##### Parameters ##### err `Error` ##### stackTraces `CallSite`\[] ##### Returns `any` ##### See [https://v8.dev/docs/stack-trace-api#customizing-stack-traces](https://v8.dev/docs/stack-trace-api#customizing-stack-traces) ##### Inherited from ```ts Error.prepareStackTrace ``` [**@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:624 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:637 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:714 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 ### Throws If there is some request failure. [**@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:1063 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 ### Throws If there is some request failure. [**@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:982 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 ### Throws If there is some request failure. [**@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:890 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 ### Throws If there is some request failure. [**@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; ``` Defined in: packages/sdk/src/indexer/api.ts:109 Fetch one single comment from the Indexer API ### Parameters #### options [`FetchCommentOptions`](/sdk-reference/indexer/type-aliases/FetchCommentOptions.mdx) ### Returns `Promise`\<[`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)> A promise that resolves the comment fetched from the Indexer API ### Throws If the comment is not available on given chain(s) or there is some request failure. [**@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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; 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:563 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}` ``; `path`: `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`; `mediaType`: `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`; } \| \{ `dimension?`: \{ `height`: `number`; `width`: `number`; }; `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"video"`; `url`: `string`; `videoTracks?`: \{ `codec?`: ... | ...; `dimension`: \{ `height`: ...; `width`: ...; }; }\[]; } \| \{ `chainId`: `number`; `id`: `` `0x${string}` ``; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"quoted_comment"`; })\[]; `replies`: \{ `extra`: \{ `moderationEnabled`: `boolean`; `moderationKnownReactions`: `string`\[]; }; `pagination`: \{ `count`: `number`; `endCursor?`: `` `0x${string}` ``; `hasNext`: `boolean`; `hasPrevious`: `boolean`; `limit`: `number`; `startCursor?`: `` `0x${string}` ``; }; `results`: [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<`string`, [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]>; `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 ### Throws If there is some request failure. [**@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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; 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:314 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}` ``; `path`: `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`; `mediaType`: `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`; } \| \{ `dimension?`: \{ `height`: `number`; `width`: `number`; }; `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"video"`; `url`: `string`; `videoTracks?`: \{ `codec?`: ... | ...; `dimension`: \{ `height`: ...; `width`: ...; }; }\[]; } \| \{ `chainId`: `number`; `id`: `` `0x${string}` ``; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"quoted_comment"`; })\[]; `replies`: \{ `extra`: \{ `moderationEnabled`: `boolean`; `moderationKnownReactions`: `string`\[]; }; `pagination`: \{ `count`: `number`; `endCursor?`: `` `0x${string}` ``; `hasNext`: `boolean`; `hasPrevious`: `boolean`; `limit`: `number`; `startCursor?`: `` `0x${string}` ``; }; `results`: [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<`string`, [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]>; `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 ### Throws If there is some request failure. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / fetchGroupedNotifications ## Function: fetchGroupedNotifications() ```ts function fetchGroupedNotifications(options): Promise<{ extra: { unseenCount: bigint; }; notifications: { cursor: string; groupedBy: { notificationType: "reply" | "mention" | "reaction" | "quote"; parent: { comment: { 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}`; path: 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: ... | ...; mediaType: string; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { dimension?: ... | ...; mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; videoTracks?: ... | ...; } | { chainId: number; id: `0x${(...)}`; position: { end: ...; start: ...; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${(...)}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${(...)}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }; type: "comment"; }; }; notifications: { extra: { unseenCount: bigint; }; notifications: { cursor: string; notification: | { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; comment: { 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: ... | ...; path: string; reactionCounts: Record<..., ...>; references: ...[]; replies: { extra: ...; pagination: ...; results: ...; }; revision: number; targetUri: string; txHash: `0x${(...)}`; updatedAt: Date; viewerReactions: Record<..., ...>; zeroExSwap: ... | ...; }; createdAt: Date; id: bigint; replyingTo: { 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: ... | ...; path: string; reactionCounts: Record<..., ...>; references: ...[]; replies: { extra: ...; pagination: ...; results: ...; }; revision: number; targetUri: string; txHash: `0x${(...)}`; updatedAt: Date; viewerReactions: Record<..., ...>; zeroExSwap: ... | ...; }; seen: boolean; seenAt: null | Date; type: "reply"; } | { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; comment: { 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: ... | ...; path: string; reactionCounts: Record<..., ...>; references: ...[]; replies: { extra: ...; pagination: ...; results: ...; }; revision: number; targetUri: string; txHash: `0x${(...)}`; updatedAt: Date; viewerReactions: Record<..., ...>; zeroExSwap: ... | ...; }; createdAt: Date; id: bigint; mentionedUser: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; seen: boolean; seenAt: null | Date; type: "mention"; } | { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; comment: { 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: ... | ...; path: string; reactionCounts: Record<..., ...>; references: ...[]; replies: { extra: ...; pagination: ...; results: ...; }; revision: number; targetUri: string; txHash: `0x${(...)}`; updatedAt: Date; viewerReactions: Record<..., ...>; zeroExSwap: ... | ...; }; createdAt: Date; id: bigint; reactingTo: { 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: ... | ...; path: string; reactionCounts: Record<..., ...>; references: ...[]; replies: { extra: ...; pagination: ...; results: ...; }; revision: number; targetUri: string; txHash: `0x${(...)}`; updatedAt: Date; viewerReactions: Record<..., ...>; zeroExSwap: ... | ...; }; seen: boolean; seenAt: null | Date; type: "reaction"; } | { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; comment: { 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: ... | ...; path: string; reactionCounts: Record<..., ...>; references: ...[]; replies: { extra: ...; pagination: ...; results: ...; }; revision: number; targetUri: string; txHash: `0x${(...)}`; updatedAt: Date; viewerReactions: Record<..., ...>; zeroExSwap: ... | ...; }; createdAt: Date; id: bigint; quotedComment: { 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: ... | ...; path: string; reactionCounts: Record<..., ...>; references: ...[]; replies: { extra: ...; pagination: ...; results: ...; }; revision: number; targetUri: string; txHash: `0x${(...)}`; updatedAt: Date; viewerReactions: Record<..., ...>; zeroExSwap: ... | ...; }; seen: boolean; seenAt: null | Date; type: "quote"; }; }[]; pageInfo: { endCursor?: string; hasNextPage: boolean; hasPreviousPage: boolean; startCursor?: string; }; }; }[]; pageInfo: { endCursor?: string; hasNextPage: boolean; hasPreviousPage: boolean; startCursor?: string; }; }>; ``` Defined in: packages/sdk/src/indexer/api.ts:1471 Fetch grouped notifications from the Indexer API ### Parameters #### options [`FetchGroupedNotificationsOptions`](/sdk-reference/indexer/type-aliases/FetchGroupedNotificationsOptions.mdx) ### Returns `Promise`\<\{ `extra`: \{ `unseenCount`: `bigint`; }; `notifications`: \{ `cursor`: `string`; `groupedBy`: \{ `notificationType`: `"reply"` | `"mention"` | `"reaction"` | `"quote"`; `parent`: \{ `comment`: \{ `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}` ``; `path`: `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`: ... | ...; `mediaType`: `string`; `opengraph`: ... | ...; `position`: \{ `end`: ...; `start`: ...; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"file"`; `url`: `string`; } \| \{ `dimension?`: ... | ...; `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"video"`; `url`: `string`; `videoTracks?`: ... | ...; } \| \{ `chainId`: `number`; `id`: `` `0x${(...)}` ``; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"quoted_comment"`; })\[]; `replies`: \{ `extra`: \{ `moderationEnabled`: `boolean`; `moderationKnownReactions`: `string`\[]; }; `pagination`: \{ `count`: `number`; `endCursor?`: `` `0x${(...)}` ``; `hasNext`: `boolean`; `hasPrevious`: `boolean`; `limit`: `number`; `startCursor?`: `` `0x${(...)}` ``; }; `results`: [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<`string`, [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]>; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${(...)}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: ... | ...; `amount`: `string`; `symbol`: `string`; }; }; }; `type`: `"comment"`; }; }; `notifications`: \{ `extra`: \{ `unseenCount`: `bigint`; }; `notifications`: \{ `cursor`: `string`; `notification`: | \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${(...)}` ``; `ens?`: ... | ...; `farcaster?`: ... | ...; }; `comment`: \{ `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`: ... | ...; `path`: `string`; `reactionCounts`: `Record`\<..., ...>; `references`: ...\[]; `replies`: \{ `extra`: ...; `pagination`: ...; `results`: ...; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${(...)}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<..., ...>; `zeroExSwap`: ... | ...; }; `createdAt`: `Date`; `id`: `bigint`; `replyingTo`: \{ `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`: ... | ...; `path`: `string`; `reactionCounts`: `Record`\<..., ...>; `references`: ...\[]; `replies`: \{ `extra`: ...; `pagination`: ...; `results`: ...; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${(...)}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<..., ...>; `zeroExSwap`: ... | ...; }; `seen`: `boolean`; `seenAt`: `null` | `Date`; `type`: `"reply"`; } \| \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${(...)}` ``; `ens?`: ... | ...; `farcaster?`: ... | ...; }; `comment`: \{ `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`: ... | ...; `path`: `string`; `reactionCounts`: `Record`\<..., ...>; `references`: ...\[]; `replies`: \{ `extra`: ...; `pagination`: ...; `results`: ...; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${(...)}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<..., ...>; `zeroExSwap`: ... | ...; }; `createdAt`: `Date`; `id`: `bigint`; `mentionedUser`: \{ `address`: `` `0x${(...)}` ``; `ens?`: ... | ...; `farcaster?`: ... | ...; }; `seen`: `boolean`; `seenAt`: `null` | `Date`; `type`: `"mention"`; } \| \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${(...)}` ``; `ens?`: ... | ...; `farcaster?`: ... | ...; }; `comment`: \{ `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`: ... | ...; `path`: `string`; `reactionCounts`: `Record`\<..., ...>; `references`: ...\[]; `replies`: \{ `extra`: ...; `pagination`: ...; `results`: ...; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${(...)}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<..., ...>; `zeroExSwap`: ... | ...; }; `createdAt`: `Date`; `id`: `bigint`; `reactingTo`: \{ `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`: ... | ...; `path`: `string`; `reactionCounts`: `Record`\<..., ...>; `references`: ...\[]; `replies`: \{ `extra`: ...; `pagination`: ...; `results`: ...; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${(...)}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<..., ...>; `zeroExSwap`: ... | ...; }; `seen`: `boolean`; `seenAt`: `null` | `Date`; `type`: `"reaction"`; } \| \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${(...)}` ``; `ens?`: ... | ...; `farcaster?`: ... | ...; }; `comment`: \{ `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`: ... | ...; `path`: `string`; `reactionCounts`: `Record`\<..., ...>; `references`: ...\[]; `replies`: \{ `extra`: ...; `pagination`: ...; `results`: ...; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${(...)}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<..., ...>; `zeroExSwap`: ... | ...; }; `createdAt`: `Date`; `id`: `bigint`; `quotedComment`: \{ `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`: ... | ...; `path`: `string`; `reactionCounts`: `Record`\<..., ...>; `references`: ...\[]; `replies`: \{ `extra`: ...; `pagination`: ...; `results`: ...; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${(...)}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<..., ...>; `zeroExSwap`: ... | ...; }; `seen`: `boolean`; `seenAt`: `null` | `Date`; `type`: `"quote"`; }; }\[]; `pageInfo`: \{ `endCursor?`: `string`; `hasNextPage`: `boolean`; `hasPreviousPage`: `boolean`; `startCursor?`: `string`; }; }; }\[]; `pageInfo`: \{ `endCursor?`: `string`; `hasNextPage`: `boolean`; `hasPreviousPage`: `boolean`; `startCursor?`: `string`; }; }> A promise that resolves to grouped notifications fetched from the Indexer API ### Throws If there is some request failure. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / fetchNotifications ## Function: fetchNotifications() ```ts function fetchNotifications(options): Promise<{ extra: { unseenCount: bigint; }; notifications: { cursor: string; notification: | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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: ... | ...; mediaType: string; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { dimension?: ... | ...; mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; videoTracks?: ... | ...; } | { chainId: number; id: `0x${(...)}`; position: { end: ...; start: ...; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${(...)}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${(...)}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; replyingTo: { 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}`; path: 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: ... | ...; mediaType: string; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { dimension?: ... | ...; mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; videoTracks?: ... | ...; } | { chainId: number; id: `0x${(...)}`; position: { end: ...; start: ...; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${(...)}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${(...)}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }; seen: boolean; seenAt: null | Date; type: "reply"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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: ... | ...; mediaType: string; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { dimension?: ... | ...; mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; videoTracks?: ... | ...; } | { chainId: number; id: `0x${(...)}`; position: { end: ...; start: ...; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${(...)}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${(...)}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; mentionedUser: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; seen: boolean; seenAt: null | Date; type: "mention"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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: ... | ...; mediaType: string; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { dimension?: ... | ...; mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; videoTracks?: ... | ...; } | { chainId: number; id: `0x${(...)}`; position: { end: ...; start: ...; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${(...)}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${(...)}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; reactingTo: { 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}`; path: 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: ... | ...; mediaType: string; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { dimension?: ... | ...; mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; videoTracks?: ... | ...; } | { chainId: number; id: `0x${(...)}`; position: { end: ...; start: ...; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${(...)}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${(...)}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }; seen: boolean; seenAt: null | Date; type: "reaction"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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: ... | ...; mediaType: string; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { dimension?: ... | ...; mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; videoTracks?: ... | ...; } | { chainId: number; id: `0x${(...)}`; position: { end: ...; start: ...; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${(...)}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${(...)}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; quotedComment: { 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}`; path: 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: ... | ...; mediaType: string; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { dimension?: ... | ...; mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; videoTracks?: ... | ...; } | { chainId: number; id: `0x${(...)}`; position: { end: ...; start: ...; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${(...)}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${(...)}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }; seen: boolean; seenAt: null | Date; type: "quote"; }; }[]; pageInfo: { endCursor?: string; hasNextPage: boolean; hasPreviousPage: boolean; startCursor?: string; }; }>; ``` Defined in: packages/sdk/src/indexer/api.ts:1307 Fetch notifications from the Indexer API ### Parameters #### options [`FetchNotificationsOptions`](/sdk-reference/indexer/type-aliases/FetchNotificationsOptions.mdx) ### Returns `Promise`\<\{ `extra`: \{ `unseenCount`: `bigint`; }; `notifications`: \{ `cursor`: `string`; `notification`: | \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${string}` ``; `ens?`: \{ `avatarUrl`: `null` | `string`; `name`: `string`; }; `farcaster?`: \{ `displayName?`: `string`; `fid`: `number`; `pfpUrl?`: `string`; `username`: `string`; }; }; `comment`: \{ `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}` ``; `path`: `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`: ... | ...; `mediaType`: `string`; `opengraph`: ... | ...; `position`: \{ `end`: ...; `start`: ...; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"file"`; `url`: `string`; } \| \{ `dimension?`: ... | ...; `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"video"`; `url`: `string`; `videoTracks?`: ... | ...; } \| \{ `chainId`: `number`; `id`: `` `0x${(...)}` ``; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"quoted_comment"`; })\[]; `replies`: \{ `extra`: \{ `moderationEnabled`: `boolean`; `moderationKnownReactions`: `string`\[]; }; `pagination`: \{ `count`: `number`; `endCursor?`: `` `0x${(...)}` ``; `hasNext`: `boolean`; `hasPrevious`: `boolean`; `limit`: `number`; `startCursor?`: `` `0x${(...)}` ``; }; `results`: [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<`string`, [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]>; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${(...)}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: ... | ...; `amount`: `string`; `symbol`: `string`; }; }; }; `createdAt`: `Date`; `id`: `bigint`; `replyingTo`: \{ `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}` ``; `path`: `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`: ... | ...; `mediaType`: `string`; `opengraph`: ... | ...; `position`: \{ `end`: ...; `start`: ...; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"file"`; `url`: `string`; } \| \{ `dimension?`: ... | ...; `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"video"`; `url`: `string`; `videoTracks?`: ... | ...; } \| \{ `chainId`: `number`; `id`: `` `0x${(...)}` ``; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"quoted_comment"`; })\[]; `replies`: \{ `extra`: \{ `moderationEnabled`: `boolean`; `moderationKnownReactions`: `string`\[]; }; `pagination`: \{ `count`: `number`; `endCursor?`: `` `0x${(...)}` ``; `hasNext`: `boolean`; `hasPrevious`: `boolean`; `limit`: `number`; `startCursor?`: `` `0x${(...)}` ``; }; `results`: [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<`string`, [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]>; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${(...)}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: ... | ...; `amount`: `string`; `symbol`: `string`; }; }; }; `seen`: `boolean`; `seenAt`: `null` | `Date`; `type`: `"reply"`; } \| \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${string}` ``; `ens?`: \{ `avatarUrl`: `null` | `string`; `name`: `string`; }; `farcaster?`: \{ `displayName?`: `string`; `fid`: `number`; `pfpUrl?`: `string`; `username`: `string`; }; }; `comment`: \{ `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}` ``; `path`: `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`: ... | ...; `mediaType`: `string`; `opengraph`: ... | ...; `position`: \{ `end`: ...; `start`: ...; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"file"`; `url`: `string`; } \| \{ `dimension?`: ... | ...; `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"video"`; `url`: `string`; `videoTracks?`: ... | ...; } \| \{ `chainId`: `number`; `id`: `` `0x${(...)}` ``; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"quoted_comment"`; })\[]; `replies`: \{ `extra`: \{ `moderationEnabled`: `boolean`; `moderationKnownReactions`: `string`\[]; }; `pagination`: \{ `count`: `number`; `endCursor?`: `` `0x${(...)}` ``; `hasNext`: `boolean`; `hasPrevious`: `boolean`; `limit`: `number`; `startCursor?`: `` `0x${(...)}` ``; }; `results`: [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<`string`, [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]>; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${(...)}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: ... | ...; `amount`: `string`; `symbol`: `string`; }; }; }; `createdAt`: `Date`; `id`: `bigint`; `mentionedUser`: \{ `address`: `` `0x${string}` ``; `ens?`: \{ `avatarUrl`: `null` | `string`; `name`: `string`; }; `farcaster?`: \{ `displayName?`: `string`; `fid`: `number`; `pfpUrl?`: `string`; `username`: `string`; }; }; `seen`: `boolean`; `seenAt`: `null` | `Date`; `type`: `"mention"`; } \| \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${string}` ``; `ens?`: \{ `avatarUrl`: `null` | `string`; `name`: `string`; }; `farcaster?`: \{ `displayName?`: `string`; `fid`: `number`; `pfpUrl?`: `string`; `username`: `string`; }; }; `comment`: \{ `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}` ``; `path`: `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`: ... | ...; `mediaType`: `string`; `opengraph`: ... | ...; `position`: \{ `end`: ...; `start`: ...; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"file"`; `url`: `string`; } \| \{ `dimension?`: ... | ...; `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"video"`; `url`: `string`; `videoTracks?`: ... | ...; } \| \{ `chainId`: `number`; `id`: `` `0x${(...)}` ``; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"quoted_comment"`; })\[]; `replies`: \{ `extra`: \{ `moderationEnabled`: `boolean`; `moderationKnownReactions`: `string`\[]; }; `pagination`: \{ `count`: `number`; `endCursor?`: `` `0x${(...)}` ``; `hasNext`: `boolean`; `hasPrevious`: `boolean`; `limit`: `number`; `startCursor?`: `` `0x${(...)}` ``; }; `results`: [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<`string`, [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]>; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${(...)}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: ... | ...; `amount`: `string`; `symbol`: `string`; }; }; }; `createdAt`: `Date`; `id`: `bigint`; `reactingTo`: \{ `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}` ``; `path`: `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`: ... | ...; `mediaType`: `string`; `opengraph`: ... | ...; `position`: \{ `end`: ...; `start`: ...; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"file"`; `url`: `string`; } \| \{ `dimension?`: ... | ...; `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"video"`; `url`: `string`; `videoTracks?`: ... | ...; } \| \{ `chainId`: `number`; `id`: `` `0x${(...)}` ``; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"quoted_comment"`; })\[]; `replies`: \{ `extra`: \{ `moderationEnabled`: `boolean`; `moderationKnownReactions`: `string`\[]; }; `pagination`: \{ `count`: `number`; `endCursor?`: `` `0x${(...)}` ``; `hasNext`: `boolean`; `hasPrevious`: `boolean`; `limit`: `number`; `startCursor?`: `` `0x${(...)}` ``; }; `results`: [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<`string`, [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]>; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${(...)}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: ... | ...; `amount`: `string`; `symbol`: `string`; }; }; }; `seen`: `boolean`; `seenAt`: `null` | `Date`; `type`: `"reaction"`; } \| \{ `app`: `` `0x${string}` ``; `author`: \{ `address`: `` `0x${string}` ``; `ens?`: \{ `avatarUrl`: `null` | `string`; `name`: `string`; }; `farcaster?`: \{ `displayName?`: `string`; `fid`: `number`; `pfpUrl?`: `string`; `username`: `string`; }; }; `comment`: \{ `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}` ``; `path`: `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`: ... | ...; `mediaType`: `string`; `opengraph`: ... | ...; `position`: \{ `end`: ...; `start`: ...; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"file"`; `url`: `string`; } \| \{ `dimension?`: ... | ...; `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"video"`; `url`: `string`; `videoTracks?`: ... | ...; } \| \{ `chainId`: `number`; `id`: `` `0x${(...)}` ``; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"quoted_comment"`; })\[]; `replies`: \{ `extra`: \{ `moderationEnabled`: `boolean`; `moderationKnownReactions`: `string`\[]; }; `pagination`: \{ `count`: `number`; `endCursor?`: `` `0x${(...)}` ``; `hasNext`: `boolean`; `hasPrevious`: `boolean`; `limit`: `number`; `startCursor?`: `` `0x${(...)}` ``; }; `results`: [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<`string`, [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]>; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${(...)}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: ... | ...; `amount`: `string`; `symbol`: `string`; }; }; }; `createdAt`: `Date`; `id`: `bigint`; `quotedComment`: \{ `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}` ``; `path`: `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`: ... | ...; `mediaType`: `string`; `opengraph`: ... | ...; `position`: \{ `end`: ...; `start`: ...; }; `title`: `string`; `type`: `"webpage"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"file"`; `url`: `string`; } \| \{ `dimension?`: ... | ...; `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"video"`; `url`: `string`; `videoTracks?`: ... | ...; } \| \{ `chainId`: `number`; `id`: `` `0x${(...)}` ``; `position`: \{ `end`: ...; `start`: ...; }; `type`: `"quoted_comment"`; })\[]; `replies`: \{ `extra`: \{ `moderationEnabled`: `boolean`; `moderationKnownReactions`: `string`\[]; }; `pagination`: \{ `count`: `number`; `endCursor?`: `` `0x${(...)}` ``; `hasNext`: `boolean`; `hasPrevious`: `boolean`; `limit`: `number`; `startCursor?`: `` `0x${(...)}` ``; }; `results`: [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]; }; `revision`: `number`; `targetUri`: `string`; `txHash`: `` `0x${string}` ``; `updatedAt`: `Date`; `viewerReactions`: `Record`\<`string`, [`IndexerAPICommentSchemaType`](/sdk-reference/indexer/type-aliases/IndexerAPICommentSchemaType.mdx)\[]>; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${(...)}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: ... | ...; `amount`: `string`; `symbol`: `string`; }; }; }; `seen`: `boolean`; `seenAt`: `null` | `Date`; `type`: `"quote"`; }; }\[]; `pageInfo`: \{ `endCursor?`: `string`; `hasNextPage`: `boolean`; `hasPreviousPage`: `boolean`; `startCursor?`: `string`; }; }> A promise that resolves to notifications fetched from the Indexer API ### Throws If there is some request failure. [**@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:22 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:12 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:32 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) / indexerApiRetryCondition ## Function: indexerApiRetryCondition() ```ts function indexerApiRetryCondition(error): boolean; ``` Defined in: packages/sdk/src/indexer/utils.ts:55 Determine if a fetch error from the indexer API should be retried ### Parameters #### error `unknown` The error to check ### Returns `boolean` True if the error should be retried, false otherwise [**@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:794 Checks if an address is marked as muted on the indexer of your choice. ### Parameters #### options [`IsMutedOptions`](/sdk-reference/indexer/type-aliases/IsMutedOptions.mdx) The options for checking if an address is muted ### Returns `Promise`\<`boolean`> A promise that resolves to `true` if the address is marked as muted, `false` otherwise ### Throws If there is some request failure. [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / isRetryableHttpResponse ## Function: isRetryableHttpResponse() ```ts function isRetryableHttpResponse(response): boolean; ``` Defined in: packages/sdk/src/indexer/utils.ts:41 Check if a response is retryable ### Parameters #### response `Response` The response to check ### Returns `boolean` True if the response is retryable, false otherwise [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / markNotificationsAsSeen ## Function: markNotificationsAsSeen() ```ts function markNotificationsAsSeen(options): Promise<{ count: number; }>; ``` Defined in: packages/sdk/src/indexer/api.ts:1610 Mark notifications as seen ### Parameters #### options [`MarkNotificationsAsSeenOptions`](/sdk-reference/indexer/type-aliases/MarkNotificationsAsSeenOptions.mdx) ### Returns `Promise`\<\{ `count`: `number`; }> A promise that resolves to the number of notifications marked as seen ### Throws If there is some request failure. [**@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:1161 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 ### Throws If there is some request failure. [**@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:676 The options for `fetchAuthorData()` ### Properties #### address ```ts address: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:680 Author's address *** #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:692 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:686 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:693 [**@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:1019 The options for `fetchAutocomplete()` ### Properties #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:1034 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:1028 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:1023 The query to autocomplete *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/indexer/api.ts:1040 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:1041 [**@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:944 The options for `fetchChannel()` ### Properties #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:954 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:948 The ID of the channel to fetch *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/indexer/api.ts:960 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:961 [**@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:828 The options for `fetchChannels()` ### Properties #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:834 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:842 Filter channels by chain ID(s) *** #### cursor? ```ts optional cursor: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:852 The cursor to fetch channels from *** #### limit? ```ts optional limit: number; ``` Defined in: packages/sdk/src/indexer/api.ts:864 The number of channels to fetch ##### Default ```ts 50 ``` *** #### owner? ```ts optional owner: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:838 Filter channels by owner *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/indexer/api.ts:848 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:865 *** #### sort? ```ts optional sort: IndexerAPISortSchemaType; ``` Defined in: packages/sdk/src/indexer/api.ts:858 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: Hex; commentType?: number; isReplyDeleted?: boolean; mode?: IndexerAPICommentListModeSchemaType; retries?: number; signal?: AbortSignal; viewer?: Hex; }; ``` Defined in: packages/sdk/src/indexer/api.ts:50 ### Properties #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:85 URL on which /api/comments endpoint will be called ##### Default ```ts "https://api.ethcomments.xyz" ``` *** #### chainId ```ts chainId: number | number[]; ``` Defined in: packages/sdk/src/indexer/api.ts:58 Filter comment and replies by chain ID(s). If the comment is not available on given chain(s) the function will throw a ResponseError. *** #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:54 The ID of the comment to fetch *** #### commentType? ```ts optional commentType: number; ``` Defined in: packages/sdk/src/indexer/api.ts:79 Filter replies by comment type *** #### isReplyDeleted? ```ts optional isReplyDeleted: boolean; ``` Defined in: packages/sdk/src/indexer/api.ts:75 Whether to return only deleted replies or only undeleted replies. If omitted it will return both deleted and undeleted replies. *** #### mode? ```ts optional mode: IndexerAPICommentListModeSchemaType; ``` Defined in: packages/sdk/src/indexer/api.ts:70 The mode to fetch replies, by default it returns only the first level of replies. * "flat" mode returns all replies (no matter the nesting level) sorted by timestamp in descending order. * "nested" mode returns only the first level of replies sorted by timestamp in descending order. ##### Default ```ts "nested" ``` *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/indexer/api.ts:95 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:89 The signal to abort the request *** #### viewer? ```ts optional viewer: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:62 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[]; isReplyDeleted?: boolean; 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:436 The options for `fetchCommentReplies()` ### Properties #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:459 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:463 Filters to only comments sent using this app signer key. *** #### chainId ```ts chainId: number | number[]; ``` Defined in: packages/sdk/src/indexer/api.ts:444 Filter replies by chain ID(s) *** #### channelId? ```ts optional channelId: bigint; ``` Defined in: packages/sdk/src/indexer/api.ts:520 Filter replies by channel ID *** #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:440 The ID of the comment to fetch replies for *** #### commentType? ```ts optional commentType: number; ``` Defined in: packages/sdk/src/indexer/api.ts:489 Filter replies by comment type *** #### cursor? ```ts optional cursor: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:473 The cursor to fetch comments from *** #### excludeByModerationLabels? ```ts optional excludeByModerationLabels: IndexerAPIModerationClassificationLabelSchemaType[]; ``` Defined in: packages/sdk/src/indexer/api.ts:516 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. *** #### isReplyDeleted? ```ts optional isReplyDeleted: boolean; ``` Defined in: packages/sdk/src/indexer/api.ts:449 Whether to return only deleted replies or only undeleted replies. If omitted it will return both deleted and undeleted replies. *** #### limit? ```ts optional limit: number; ``` Defined in: packages/sdk/src/indexer/api.ts:524 ##### Default ```ts 50 ``` *** #### mode? ```ts optional mode: IndexerAPICommentListModeSchemaType; ``` Defined in: packages/sdk/src/indexer/api.ts:485 The mode to fetch replies, by default it returns only the first level of replies. * "flat" mode returns all replies (no matter the nesting level) sorted by timestamp in descending order. * "nested" mode returns only the first level of replies sorted by timestamp in descending order. ##### Default ```ts "nested" ``` *** #### moderationScore? ```ts optional moderationScore: number; ``` Defined in: packages/sdk/src/indexer/api.ts:508 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:498 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:469 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:525 *** #### sort? ```ts optional sort: IndexerAPISortSchemaType; ``` Defined in: packages/sdk/src/indexer/api.ts:477 ##### Default ```ts "desc" ``` *** #### viewer? ```ts optional viewer: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:453 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[]; isDeleted?: boolean; 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:178 The options for `fetchComments()` ### Properties #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:200 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:204 Filter comments sent using this app signer key. *** #### author? ```ts optional author: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:186 Filter comments by author *** #### chainId ```ts chainId: number | number[]; ``` Defined in: packages/sdk/src/indexer/api.ts:190 Filter comments by chain ID(s) *** #### channelId? ```ts optional channelId: bigint; ``` Defined in: packages/sdk/src/indexer/api.ts:208 Filter comments by channel ID *** #### commentType? ```ts optional commentType: number; ``` Defined in: packages/sdk/src/indexer/api.ts:212 Filter comments by comment type *** #### cursor? ```ts optional cursor: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:238 The cursor to fetch comments from *** #### excludeByModerationLabels? ```ts optional excludeByModerationLabels: IndexerAPIModerationClassificationLabelSchemaType[]; ``` Defined in: packages/sdk/src/indexer/api.ts:268 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. *** #### isDeleted? ```ts optional isDeleted: boolean; ``` Defined in: packages/sdk/src/indexer/api.ts:217 Whether to return only deleted comments or only undeleted comments. If omitted it will return both deleted and undeleted comments. *** #### limit? ```ts optional limit: number; ``` Defined in: packages/sdk/src/indexer/api.ts:274 The number of comments to fetch ##### Default ```ts 50 ``` *** #### mode? ```ts optional mode: IndexerAPICommentListModeSchemaType; ``` Defined in: packages/sdk/src/indexer/api.ts:252 The mode to fetch replies, by default it returns only the first level of replies. * "flat" mode returns all replies (no matter the nesting level) sorted by timestamp in descending order. * "nested" mode returns only the first level of replies sorted by timestamp in descending order. ##### Default ```ts "nested" ``` *** #### moderationScore? ```ts optional moderationScore: number; ``` Defined in: packages/sdk/src/indexer/api.ts:260 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:226 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:234 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:275 *** #### sort? ```ts optional sort: IndexerAPISortSchemaType; ``` Defined in: packages/sdk/src/indexer/api.ts:244 The sort order, either `asc` or `desc` ##### Default ```ts "desc" ``` *** #### targetUri? ```ts optional targetUri: string; ``` Defined in: packages/sdk/src/indexer/api.ts:182 The target URI to fetch comments for *** #### viewer? ```ts optional viewer: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:194 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) / FetchGroupedNotificationsOptions ## Type Alias: FetchGroupedNotificationsOptions ```ts type FetchGroupedNotificationsOptions = { after?: string; apiUrl?: string; app?: | Hex | Hex[]; appSecretKey: string; before?: string; limit?: number; retries?: number; seen?: boolean; signal?: AbortSignal; type?: | IndexerAPINotificationTypeSchemaType | IndexerAPINotificationTypeSchemaType[]; user: Hex | string; }; ``` Defined in: packages/sdk/src/indexer/api.ts:1387 The options for `fetchGroupedNotifications()` ### Properties #### after? ```ts optional after: string; ``` Defined in: packages/sdk/src/indexer/api.ts:1420 After cursor to fetch grouped notifications from (older grouped notifications) *** #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:1393 URL on which /api/notifications/grouped endpoint will be called ##### Default ```ts "https://api.ethcomments.xyz" ``` *** #### app? ```ts optional app: | Hex | Hex[]; ``` Defined in: packages/sdk/src/indexer/api.ts:1406 The app signers to fetch grouped notifications for *** #### appSecretKey ```ts appSecretKey: string; ``` Defined in: packages/sdk/src/indexer/api.ts:1398 App secret key to authenticate the request. Can be found in the [https://dashboard.ethcomments.xyz](https://dashboard.ethcomments.xyz) after creating an app. *** #### before? ```ts optional before: string; ``` Defined in: packages/sdk/src/indexer/api.ts:1416 Before cursor to fetch grouped notifications from (newer grouped notifications) *** #### limit? ```ts optional limit: number; ``` Defined in: packages/sdk/src/indexer/api.ts:1432 The number of grouped notifications to fetch ##### Default ```ts 10 ``` *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/indexer/api.ts:1438 Number of times to retry the request in case of failure (non‑parsing/network errors). ##### Default ```ts 3 ``` *** #### seen? ```ts optional seen: boolean; ``` Defined in: packages/sdk/src/indexer/api.ts:1426 Whether to fetch only seen or unseen notifications ##### Default ```ts undefined - fetches all grouped notifications ``` *** #### signal? ```ts optional signal: AbortSignal; ``` Defined in: packages/sdk/src/indexer/api.ts:1442 The signal to abort the request *** #### type? ```ts optional type: | IndexerAPINotificationTypeSchemaType | IndexerAPINotificationTypeSchemaType[]; ``` Defined in: packages/sdk/src/indexer/api.ts:1410 The types of grouped notifications to fetch *** #### user ```ts user: Hex | string; ``` Defined in: packages/sdk/src/indexer/api.ts:1402 The user to fetch grouped notifications for, either ETH address or ENS name [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / FetchNotificationsOptions ## Type Alias: FetchNotificationsOptions ```ts type FetchNotificationsOptions = { after?: string; apiUrl?: string; app?: | Hex | Hex[]; appSecretKey: string; before?: string; limit?: number; parentId?: Hex; retries?: number; seen?: boolean; signal?: AbortSignal; type?: | IndexerAPINotificationTypeSchemaType | IndexerAPINotificationTypeSchemaType[]; user: Hex | string; }; ``` Defined in: packages/sdk/src/indexer/api.ts:1209 The options for `fetchNotifications()` ### Properties #### after? ```ts optional after: string; ``` Defined in: packages/sdk/src/indexer/api.ts:1242 After cursor to fetch notifications from (older notifications) *** #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:1215 URL on which /api/notifications endpoint will be called ##### Default ```ts "https://api.ethcomments.xyz" ``` *** #### app? ```ts optional app: | Hex | Hex[]; ``` Defined in: packages/sdk/src/indexer/api.ts:1228 The app signers to fetch notifications for *** #### appSecretKey ```ts appSecretKey: string; ``` Defined in: packages/sdk/src/indexer/api.ts:1220 App secret key to authenticate the request. Can be found in the [https://dashboard.ethcomments.xyz](https://dashboard.ethcomments.xyz) after creating an app. *** #### before? ```ts optional before: string; ``` Defined in: packages/sdk/src/indexer/api.ts:1238 Before cursor to fetch notifications from (newer notifications) *** #### limit? ```ts optional limit: number; ``` Defined in: packages/sdk/src/indexer/api.ts:1258 The number of notifications to fetch ##### Default ```ts 10 ``` *** #### parentId? ```ts optional parentId: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:1246 Fetch notifications for a specific parent id *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/indexer/api.ts:1264 Number of times to retry the request in case of failure (non‑parsing/network errors). ##### Default ```ts 3 ``` *** #### seen? ```ts optional seen: boolean; ``` Defined in: packages/sdk/src/indexer/api.ts:1252 Whether to fetch only seen or unseen notifications ##### Default ```ts undefined - fetches all notifications ``` *** #### signal? ```ts optional signal: AbortSignal; ``` Defined in: packages/sdk/src/indexer/api.ts:1268 The signal to abort the request *** #### type? ```ts optional type: | IndexerAPINotificationTypeSchemaType | IndexerAPINotificationTypeSchemaType[]; ``` Defined in: packages/sdk/src/indexer/api.ts:1232 The types of notifications to fetch *** #### user ```ts user: Hex | string; ``` Defined in: packages/sdk/src/indexer/api.ts:1224 The user to fetch notifications for, either ETH address or ENS name [**@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:140 ### 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:119 ### 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:654 ### 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:674 ### 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:692 ### 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:702 [**@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:91 ### 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:81 ### 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:156 [**@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:150 [**@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 = BaseIndexerAPICommentOutputSchemaType & { reactionCounts: Record; replies: { extra: IndexerAPIExtraSchemaType; pagination: IndexerAPICursorRepliesPaginationSchemaType; results: IndexerAPICommentOutputSchemaType[]; }; viewerReactions: Record; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:510 ### Type declaration #### reactionCounts ```ts reactionCounts: Record; ``` #### replies ```ts replies: { extra: IndexerAPIExtraSchemaType; pagination: IndexerAPICursorRepliesPaginationSchemaType; results: IndexerAPICommentOutputSchemaType[]; }; ``` ##### replies.extra ```ts extra: IndexerAPIExtraSchemaType; ``` ##### replies.pagination ```ts pagination: IndexerAPICursorRepliesPaginationSchemaType; ``` ##### replies.results ```ts results: IndexerAPICommentOutputSchemaType[]; ``` #### viewerReactions ```ts viewerReactions: Record; ``` [**@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:209 ### 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:250 ### 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:225 ### 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) / IndexerAPICommentReferenceQuotedCommentSchemaType ## Type Alias: IndexerAPICommentReferenceQuotedCommentSchemaType ```ts type IndexerAPICommentReferenceQuotedCommentSchemaType = { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:338 Handles caip373 quoted comment See [https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-373.md](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-373.md) and [https://github.com/ecp-eth/ECPIP/discussions/2](https://github.com/ecp-eth/ECPIP/discussions/2) ### Type declaration #### chainId ```ts chainId: number; ``` #### id ```ts id: `0x${string}` = HexSchema; ``` #### position ```ts position: { end: number; start: number; } = IndexerAPICommentReferencePositionSchema; ``` ##### position.end ```ts end: number; ``` ##### position.start ```ts start: number; ``` #### type ```ts type: "quoted_comment"; ``` [**@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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:353 [**@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:283 ### 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 = { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:300 ### Type declaration #### dimension? ```ts optional dimension: { height: number; width: number; }; ``` ##### dimension.height ```ts height: number; ``` ##### dimension.width ```ts width: number; ``` #### 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; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:321 ### 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; ``` #### videoTracks? ```ts optional videoTracks: { codec?: string; dimension: { height: number; width: number; }; }[]; ``` [**@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; mediaType: 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:272 ### Type declaration #### description ```ts description: null | string; ``` #### favicon ```ts favicon: null | string; ``` #### mediaType ```ts mediaType: 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) / IndexerAPICommentReferencesSchemaInputType ## Type Alias: IndexerAPICommentReferencesSchemaInputType ```ts type IndexerAPICommentReferencesSchemaInputType = ( | { 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; ``` Defined in: packages/sdk/src/indexer/schemas.ts:386 [**@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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; ``` 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) / IndexerAPICommentSchemaInputType ## Type Alias: IndexerAPICommentSchemaInputType ```ts type IndexerAPICommentSchemaInputType = BaseIndexerAPICommentSchemaInputType & { reactionCounts: Record; replies: { extra: IndexerAPIExtraSchemaType; pagination: IndexerAPICursorRepliesPaginationSchemaType; results: IndexerAPICommentSchemaInputType[]; }; viewerReactions: Record; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:471 ### Type declaration #### reactionCounts ```ts reactionCounts: Record; ``` #### replies ```ts replies: { extra: IndexerAPIExtraSchemaType; pagination: IndexerAPICursorRepliesPaginationSchemaType; results: IndexerAPICommentSchemaInputType[]; }; ``` ##### replies.extra ```ts extra: IndexerAPIExtraSchemaType; ``` ##### replies.pagination ```ts pagination: IndexerAPICursorRepliesPaginationSchemaType; ``` ##### replies.results ```ts results: IndexerAPICommentSchemaInputType[]; ``` #### viewerReactions ```ts viewerReactions: Record; ``` [**@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 = BaseIndexerAPICommentSchemaType & { reactionCounts: Record; replies: { extra: IndexerAPIExtraSchemaType; pagination: IndexerAPICursorRepliesPaginationSchemaType; results: IndexerAPICommentSchemaType[]; }; viewerReactions: Record; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:461 ### Type declaration #### reactionCounts ```ts reactionCounts: Record; ``` #### replies ```ts replies: { extra: IndexerAPIExtraSchemaType; pagination: IndexerAPICursorRepliesPaginationSchemaType; results: IndexerAPICommentSchemaType[]; }; ``` ##### replies.extra ```ts extra: IndexerAPIExtraSchemaType; ``` ##### replies.pagination ```ts pagination: IndexerAPICursorRepliesPaginationSchemaType; ``` ##### replies.results ```ts results: IndexerAPICommentSchemaType[]; ``` #### viewerReactions ```ts viewerReactions: Record; ``` [**@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:191 ### 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:50 ### 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) / IndexerAPICursorRepliesPaginationSchemaType ## Type Alias: IndexerAPICursorRepliesPaginationSchemaType ```ts type IndexerAPICursorRepliesPaginationSchemaType = { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:46 ### Type declaration #### count ```ts count: number; ``` #### 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:459 ### 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:130 ### 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:710 ### 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:110 ### 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:100 ### 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) / 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentOutputSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; 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:567 ### 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentOutputSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; 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:556 ### 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; 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) / IndexerAPIListGroupedNotificationsSchemaType ## Type Alias: IndexerAPIListGroupedNotificationsSchemaType ```ts type IndexerAPIListGroupedNotificationsSchemaType = { extra: { unseenCount: bigint; }; notifications: { cursor: string; groupedBy: { notificationType: "reply" | "mention" | "reaction" | "quote"; parent: { comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }; type: "comment"; }; }; notifications: { extra: { unseenCount: bigint; }; notifications: { cursor: string; notification: | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: ...; name: ...; }; farcaster?: { displayName?: ...; fid: ...; pfpUrl?: ...; username: ...; }; }; comment: { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: ...; value: ...; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: ...; value: ...; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; path: string; reactionCounts: Record; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; replies: { extra: { moderationEnabled: ...; moderationKnownReactions: ...; }; pagination: { count: ...; endCursor?: ...; hasNext: ...; hasPrevious: ...; limit: ...; startCursor?: ...; }; results: ...[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: ...; to: ...; }; }; createdAt: Date; id: bigint; replyingTo: { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: ...; value: ...; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: ...; value: ...; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; path: string; reactionCounts: Record; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; replies: { extra: { moderationEnabled: ...; moderationKnownReactions: ...; }; pagination: { count: ...; endCursor?: ...; hasNext: ...; hasPrevious: ...; limit: ...; startCursor?: ...; }; results: ...[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: ...; to: ...; }; }; seen: boolean; seenAt: null | Date; type: "reply"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: ...; name: ...; }; farcaster?: { displayName?: ...; fid: ...; pfpUrl?: ...; username: ...; }; }; comment: { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: ...; value: ...; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: ...; value: ...; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; path: string; reactionCounts: Record; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; replies: { extra: { moderationEnabled: ...; moderationKnownReactions: ...; }; pagination: { count: ...; endCursor?: ...; hasNext: ...; hasPrevious: ...; limit: ...; startCursor?: ...; }; results: ...[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: ...; to: ...; }; }; createdAt: Date; id: bigint; mentionedUser: { address: `0x${string}`; ens?: { avatarUrl: ...; name: ...; }; farcaster?: { displayName?: ...; fid: ...; pfpUrl?: ...; username: ...; }; }; seen: boolean; seenAt: null | Date; type: "mention"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: ...; name: ...; }; farcaster?: { displayName?: ...; fid: ...; pfpUrl?: ...; username: ...; }; }; comment: { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: ...; value: ...; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: ...; value: ...; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; path: string; reactionCounts: Record; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; replies: { extra: { moderationEnabled: ...; moderationKnownReactions: ...; }; pagination: { count: ...; endCursor?: ...; hasNext: ...; hasPrevious: ...; limit: ...; startCursor?: ...; }; results: ...[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: ...; to: ...; }; }; createdAt: Date; id: bigint; reactingTo: { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: ...; value: ...; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: ...; value: ...; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; path: string; reactionCounts: Record; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; replies: { extra: { moderationEnabled: ...; moderationKnownReactions: ...; }; pagination: { count: ...; endCursor?: ...; hasNext: ...; hasPrevious: ...; limit: ...; startCursor?: ...; }; results: ...[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: ...; to: ...; }; }; seen: boolean; seenAt: null | Date; type: "reaction"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: ...; name: ...; }; farcaster?: { displayName?: ...; fid: ...; pfpUrl?: ...; username: ...; }; }; comment: { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: ...; value: ...; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: ...; value: ...; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; path: string; reactionCounts: Record; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; replies: { extra: { moderationEnabled: ...; moderationKnownReactions: ...; }; pagination: { count: ...; endCursor?: ...; hasNext: ...; hasPrevious: ...; limit: ...; startCursor?: ...; }; results: ...[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: ...; to: ...; }; }; createdAt: Date; id: bigint; quotedComment: { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: ...; value: ...; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: ...; value: ...; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; path: string; reactionCounts: Record; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; replies: { extra: { moderationEnabled: ...; moderationKnownReactions: ...; }; pagination: { count: ...; endCursor?: ...; hasNext: ...; hasPrevious: ...; limit: ...; startCursor?: ...; }; results: ...[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: ...; to: ...; }; }; seen: boolean; seenAt: null | Date; type: "quote"; }; }[]; pageInfo: { endCursor?: string; hasNextPage: boolean; hasPreviousPage: boolean; startCursor?: string; }; }; }[]; pageInfo: { endCursor?: string; hasNextPage: boolean; hasPreviousPage: boolean; startCursor?: string; }; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:889 The list grouped notifications schema returned by fetchGroupedNotifications() ### Type declaration #### extra ```ts extra: { unseenCount: bigint; }; ``` ##### extra.unseenCount ```ts unseenCount: bigint; ``` #### notifications ```ts notifications: { cursor: string; groupedBy: { notificationType: "reply" | "mention" | "reaction" | "quote"; parent: { comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }; type: "comment"; }; }; notifications: { extra: { unseenCount: bigint; }; notifications: { cursor: string; notification: | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: ...; name: ...; }; farcaster?: { displayName?: ...; fid: ...; pfpUrl?: ...; username: ...; }; }; comment: { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: ...; value: ...; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: ...; value: ...; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; path: string; reactionCounts: Record; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; replies: { extra: { moderationEnabled: ...; moderationKnownReactions: ...; }; pagination: { count: ...; endCursor?: ...; hasNext: ...; hasPrevious: ...; limit: ...; startCursor?: ...; }; results: ...[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: ...; to: ...; }; }; createdAt: Date; id: bigint; replyingTo: { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: ...; value: ...; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: ...; value: ...; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; path: string; reactionCounts: Record; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; replies: { extra: { moderationEnabled: ...; moderationKnownReactions: ...; }; pagination: { count: ...; endCursor?: ...; hasNext: ...; hasPrevious: ...; limit: ...; startCursor?: ...; }; results: ...[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: ...; to: ...; }; }; seen: boolean; seenAt: null | Date; type: "reply"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: ...; name: ...; }; farcaster?: { displayName?: ...; fid: ...; pfpUrl?: ...; username: ...; }; }; comment: { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: ...; value: ...; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: ...; value: ...; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; path: string; reactionCounts: Record; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; replies: { extra: { moderationEnabled: ...; moderationKnownReactions: ...; }; pagination: { count: ...; endCursor?: ...; hasNext: ...; hasPrevious: ...; limit: ...; startCursor?: ...; }; results: ...[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: ...; to: ...; }; }; createdAt: Date; id: bigint; mentionedUser: { address: `0x${string}`; ens?: { avatarUrl: ...; name: ...; }; farcaster?: { displayName?: ...; fid: ...; pfpUrl?: ...; username: ...; }; }; seen: boolean; seenAt: null | Date; type: "mention"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: ...; name: ...; }; farcaster?: { displayName?: ...; fid: ...; pfpUrl?: ...; username: ...; }; }; comment: { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: ...; value: ...; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: ...; value: ...; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; path: string; reactionCounts: Record; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; replies: { extra: { moderationEnabled: ...; moderationKnownReactions: ...; }; pagination: { count: ...; endCursor?: ...; hasNext: ...; hasPrevious: ...; limit: ...; startCursor?: ...; }; results: ...[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: ...; to: ...; }; }; createdAt: Date; id: bigint; reactingTo: { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: ...; value: ...; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: ...; value: ...; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; path: string; reactionCounts: Record; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; replies: { extra: { moderationEnabled: ...; moderationKnownReactions: ...; }; pagination: { count: ...; endCursor?: ...; hasNext: ...; hasPrevious: ...; limit: ...; startCursor?: ...; }; results: ...[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: ...; to: ...; }; }; seen: boolean; seenAt: null | Date; type: "reaction"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: ...; name: ...; }; farcaster?: { displayName?: ...; fid: ...; pfpUrl?: ...; username: ...; }; }; comment: { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: ...; value: ...; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: ...; value: ...; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; path: string; reactionCounts: Record; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; replies: { extra: { moderationEnabled: ...; moderationKnownReactions: ...; }; pagination: { count: ...; endCursor?: ...; hasNext: ...; hasPrevious: ...; limit: ...; startCursor?: ...; }; results: ...[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: ...; to: ...; }; }; createdAt: Date; id: bigint; quotedComment: { app: `0x${string}`; author: { address: `0x${(...)}`; ens?: ... | ...; farcaster?: ... | ...; }; chainId: number; channelId: bigint; commentType: number; content: string; createdAt: Date; cursor: `0x${string}`; deletedAt: null | Date; hookMetadata: { key: ...; value: ...; }[]; id: `0x${string}`; logIndex: null | number; metadata: { key: ...; value: ...; }[]; moderationClassifierResult: Record; moderationClassifierScore: number; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; parentId: null | `0x${(...)}`; path: string; reactionCounts: Record; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; replies: { extra: { moderationEnabled: ...; moderationKnownReactions: ...; }; pagination: { count: ...; endCursor?: ...; hasNext: ...; hasPrevious: ...; limit: ...; startCursor?: ...; }; results: ...[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: ...; to: ...; }; }; seen: boolean; seenAt: null | Date; type: "quote"; }; }[]; pageInfo: { endCursor?: string; hasNextPage: boolean; hasPreviousPage: boolean; startCursor?: string; }; }; }[]; ``` #### pageInfo ```ts pageInfo: { endCursor?: string; hasNextPage: boolean; hasPreviousPage: boolean; startCursor?: string; }; ``` ##### pageInfo.endCursor? ```ts optional endCursor: string; ``` ##### pageInfo.hasNextPage ```ts hasNextPage: boolean; ``` ##### pageInfo.hasPreviousPage ```ts hasPreviousPage: boolean; ``` ##### pageInfo.startCursor? ```ts optional startCursor: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIListNotificationsSchemaType ## Type Alias: IndexerAPIListNotificationsSchemaType ```ts type IndexerAPIListNotificationsSchemaType = { extra: { unseenCount: bigint; }; notifications: { cursor: string; notification: | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; replyingTo: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }; seen: boolean; seenAt: null | Date; type: "reply"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; mentionedUser: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; seen: boolean; seenAt: null | Date; type: "mention"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; reactingTo: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }; seen: boolean; seenAt: null | Date; type: "reaction"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; quotedComment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }; seen: boolean; seenAt: null | Date; type: "quote"; }; }[]; pageInfo: { endCursor?: string; hasNextPage: boolean; hasPreviousPage: boolean; startCursor?: string; }; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:857 The list notifications schema returned by fetchNotifications() ### Type declaration #### extra ```ts extra: { unseenCount: bigint; }; ``` ##### extra.unseenCount ```ts unseenCount: bigint; ``` #### notifications ```ts notifications: { cursor: string; notification: | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; replyingTo: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }; seen: boolean; seenAt: null | Date; type: "reply"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; mentionedUser: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; seen: boolean; seenAt: null | Date; type: "mention"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; reactingTo: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }; seen: boolean; seenAt: null | Date; type: "reaction"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; quotedComment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }; }; seen: boolean; seenAt: null | Date; type: "quote"; }; }[]; ``` #### pageInfo ```ts pageInfo: { endCursor?: string; hasNextPage: boolean; hasPreviousPage: boolean; startCursor?: string; }; ``` ##### pageInfo.endCursor? ```ts optional endCursor: string; ``` ##### pageInfo.hasNextPage ```ts hasNextPage: boolean; ``` ##### pageInfo.hasPreviousPage ```ts hasPreviousPage: boolean; ``` ##### pageInfo.startCursor? ```ts optional startCursor: string; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIMarkNotificationsAsSeenSchemaType ## Type Alias: IndexerAPIMarkNotificationsAsSeenSchemaType ```ts type IndexerAPIMarkNotificationsAsSeenSchemaType = { count: number; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:897 ### Type declaration #### count ```ts count: number; ``` [**@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:59 ### 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:65 ### 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; 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:601 ### 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}`; ``` #### path ```ts path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[] = IndexerAPICommentReferencesSchema; ``` #### replies ```ts replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; ``` ##### 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: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorRepliesPaginationSchema; ``` ##### replies.pagination.count ```ts count: number; ``` ##### 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: IndexerAPICommentSchemaType[]; ``` #### revision ```ts revision: number; ``` #### targetUri ```ts targetUri: string; ``` #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` #### updatedAt ```ts updatedAt: Date; ``` #### viewerReactions ```ts viewerReactions: Record; ``` #### 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; 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:593 ### 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}`; ``` #### path ```ts path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[] = IndexerAPICommentReferencesSchema; ``` #### replies ```ts replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; ``` ##### 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: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorRepliesPaginationSchema; ``` ##### replies.pagination.count ```ts count: number; ``` ##### 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: IndexerAPICommentSchemaType[]; ``` #### revision ```ts revision: number; ``` #### targetUri ```ts targetUri: string; ``` #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` #### updatedAt ```ts updatedAt: Date; ``` #### viewerReactions ```ts viewerReactions: Record; ``` #### 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentOutputSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; 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:586 ### 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentOutputSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; 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:576 ### 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; 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) / IndexerAPINotificationMentionSchemaType ## Type Alias: IndexerAPINotificationMentionSchemaType ```ts type IndexerAPINotificationMentionSchemaType = { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; mentionedUser: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; seen: boolean; seenAt: null | Date; type: "mention"; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:787 ### 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; ``` #### comment ```ts comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; } = IndexerAPICommentSchema; ``` ##### comment.app ```ts app: `0x${string}` = HexSchema; ``` ##### comment.author ```ts author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; } = IndexerAPIAuthorDataSchema; ``` ##### comment.author.address ```ts address: `0x${string}` = HexSchema; ``` ##### comment.author.ens? ```ts optional ens: { avatarUrl: null | string; name: string; }; ``` ##### comment.author.ens.avatarUrl ```ts avatarUrl: null | string; ``` ##### comment.author.ens.name ```ts name: string; ``` ##### comment.author.farcaster? ```ts optional farcaster: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` ##### comment.author.farcaster.displayName? ```ts optional displayName: string; ``` ##### comment.author.farcaster.fid ```ts fid: number; ``` ##### comment.author.farcaster.pfpUrl? ```ts optional pfpUrl: string; ``` ##### comment.author.farcaster.username ```ts username: string; ``` ##### comment.chainId ```ts chainId: number; ``` ##### comment.channelId ```ts channelId: bigint; ``` ##### comment.commentType ```ts commentType: number; ``` ##### comment.content ```ts content: string; ``` ##### comment.createdAt ```ts createdAt: Date; ``` ##### comment.cursor ```ts cursor: `0x${string}` = HexSchema; ``` ##### comment.deletedAt ```ts deletedAt: null | Date; ``` ##### comment.hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` ##### comment.id ```ts id: `0x${string}` = HexSchema; ``` ##### comment.logIndex ```ts logIndex: null | number; ``` ##### comment.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` ##### comment.moderationClassifierResult ```ts moderationClassifierResult: Record; ``` ##### comment.moderationClassifierScore ```ts moderationClassifierScore: number; ``` ##### comment.moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = IndexerAPICommentModerationStatusSchema; ``` ##### comment.moderationStatusChangedAt ```ts moderationStatusChangedAt: Date; ``` ##### comment.parentId ```ts parentId: null | `0x${string}`; ``` ##### comment.path ```ts path: string; ``` ##### comment.reactionCounts ```ts reactionCounts: Record; ``` ##### comment.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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[] = IndexerAPICommentReferencesSchema; ``` ##### comment.replies ```ts replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; ``` ##### comment.replies.extra ```ts extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; } = IndexerAPIExtraSchema; ``` ##### comment.replies.extra.moderationEnabled ```ts moderationEnabled: boolean; ``` ##### comment.replies.extra.moderationKnownReactions ```ts moderationKnownReactions: string[]; ``` ##### comment.replies.pagination ```ts pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorRepliesPaginationSchema; ``` ##### comment.replies.pagination.count ```ts count: number; ``` ##### comment.replies.pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### comment.replies.pagination.hasNext ```ts hasNext: boolean; ``` ##### comment.replies.pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### comment.replies.pagination.limit ```ts limit: number; ``` ##### comment.replies.pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` ##### comment.replies.results ```ts results: IndexerAPICommentSchemaType[]; ``` ##### comment.revision ```ts revision: number; ``` ##### comment.targetUri ```ts targetUri: string; ``` ##### comment.txHash ```ts txHash: `0x${string}` = HexSchema; ``` ##### comment.updatedAt ```ts updatedAt: Date; ``` ##### comment.viewerReactions ```ts viewerReactions: Record; ``` ##### comment.zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` #### createdAt ```ts createdAt: Date; ``` #### id ```ts id: bigint; ``` #### mentionedUser ```ts mentionedUser: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; } = IndexerAPIAuthorDataSchema; ``` ##### mentionedUser.address ```ts address: `0x${string}` = HexSchema; ``` ##### mentionedUser.ens? ```ts optional ens: { avatarUrl: null | string; name: string; }; ``` ##### mentionedUser.ens.avatarUrl ```ts avatarUrl: null | string; ``` ##### mentionedUser.ens.name ```ts name: string; ``` ##### mentionedUser.farcaster? ```ts optional farcaster: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` ##### mentionedUser.farcaster.displayName? ```ts optional displayName: string; ``` ##### mentionedUser.farcaster.fid ```ts fid: number; ``` ##### mentionedUser.farcaster.pfpUrl? ```ts optional pfpUrl: string; ``` ##### mentionedUser.farcaster.username ```ts username: string; ``` #### seen ```ts seen: boolean; ``` #### seenAt ```ts seenAt: null | Date; ``` #### type ```ts type: "mention"; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPINotificationQuoteSchemaType ## Type Alias: IndexerAPINotificationQuoteSchemaType ```ts type IndexerAPINotificationQuoteSchemaType = { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; quotedComment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; seen: boolean; seenAt: null | Date; type: "quote"; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:807 ### 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; ``` #### comment ```ts comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; } = IndexerAPICommentSchema; ``` ##### comment.app ```ts app: `0x${string}` = HexSchema; ``` ##### comment.author ```ts author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; } = IndexerAPIAuthorDataSchema; ``` ##### comment.author.address ```ts address: `0x${string}` = HexSchema; ``` ##### comment.author.ens? ```ts optional ens: { avatarUrl: null | string; name: string; }; ``` ##### comment.author.ens.avatarUrl ```ts avatarUrl: null | string; ``` ##### comment.author.ens.name ```ts name: string; ``` ##### comment.author.farcaster? ```ts optional farcaster: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` ##### comment.author.farcaster.displayName? ```ts optional displayName: string; ``` ##### comment.author.farcaster.fid ```ts fid: number; ``` ##### comment.author.farcaster.pfpUrl? ```ts optional pfpUrl: string; ``` ##### comment.author.farcaster.username ```ts username: string; ``` ##### comment.chainId ```ts chainId: number; ``` ##### comment.channelId ```ts channelId: bigint; ``` ##### comment.commentType ```ts commentType: number; ``` ##### comment.content ```ts content: string; ``` ##### comment.createdAt ```ts createdAt: Date; ``` ##### comment.cursor ```ts cursor: `0x${string}` = HexSchema; ``` ##### comment.deletedAt ```ts deletedAt: null | Date; ``` ##### comment.hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` ##### comment.id ```ts id: `0x${string}` = HexSchema; ``` ##### comment.logIndex ```ts logIndex: null | number; ``` ##### comment.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` ##### comment.moderationClassifierResult ```ts moderationClassifierResult: Record; ``` ##### comment.moderationClassifierScore ```ts moderationClassifierScore: number; ``` ##### comment.moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = IndexerAPICommentModerationStatusSchema; ``` ##### comment.moderationStatusChangedAt ```ts moderationStatusChangedAt: Date; ``` ##### comment.parentId ```ts parentId: null | `0x${string}`; ``` ##### comment.path ```ts path: string; ``` ##### comment.reactionCounts ```ts reactionCounts: Record; ``` ##### comment.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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[] = IndexerAPICommentReferencesSchema; ``` ##### comment.replies ```ts replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; ``` ##### comment.replies.extra ```ts extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; } = IndexerAPIExtraSchema; ``` ##### comment.replies.extra.moderationEnabled ```ts moderationEnabled: boolean; ``` ##### comment.replies.extra.moderationKnownReactions ```ts moderationKnownReactions: string[]; ``` ##### comment.replies.pagination ```ts pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorRepliesPaginationSchema; ``` ##### comment.replies.pagination.count ```ts count: number; ``` ##### comment.replies.pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### comment.replies.pagination.hasNext ```ts hasNext: boolean; ``` ##### comment.replies.pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### comment.replies.pagination.limit ```ts limit: number; ``` ##### comment.replies.pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` ##### comment.replies.results ```ts results: IndexerAPICommentSchemaType[]; ``` ##### comment.revision ```ts revision: number; ``` ##### comment.targetUri ```ts targetUri: string; ``` ##### comment.txHash ```ts txHash: `0x${string}` = HexSchema; ``` ##### comment.updatedAt ```ts updatedAt: Date; ``` ##### comment.viewerReactions ```ts viewerReactions: Record; ``` ##### comment.zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` #### createdAt ```ts createdAt: Date; ``` #### id ```ts id: bigint; ``` #### quotedComment ```ts quotedComment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; } = IndexerAPICommentSchema; ``` ##### quotedComment.app ```ts app: `0x${string}` = HexSchema; ``` ##### quotedComment.author ```ts author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; } = IndexerAPIAuthorDataSchema; ``` ##### quotedComment.author.address ```ts address: `0x${string}` = HexSchema; ``` ##### quotedComment.author.ens? ```ts optional ens: { avatarUrl: null | string; name: string; }; ``` ##### quotedComment.author.ens.avatarUrl ```ts avatarUrl: null | string; ``` ##### quotedComment.author.ens.name ```ts name: string; ``` ##### quotedComment.author.farcaster? ```ts optional farcaster: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` ##### quotedComment.author.farcaster.displayName? ```ts optional displayName: string; ``` ##### quotedComment.author.farcaster.fid ```ts fid: number; ``` ##### quotedComment.author.farcaster.pfpUrl? ```ts optional pfpUrl: string; ``` ##### quotedComment.author.farcaster.username ```ts username: string; ``` ##### quotedComment.chainId ```ts chainId: number; ``` ##### quotedComment.channelId ```ts channelId: bigint; ``` ##### quotedComment.commentType ```ts commentType: number; ``` ##### quotedComment.content ```ts content: string; ``` ##### quotedComment.createdAt ```ts createdAt: Date; ``` ##### quotedComment.cursor ```ts cursor: `0x${string}` = HexSchema; ``` ##### quotedComment.deletedAt ```ts deletedAt: null | Date; ``` ##### quotedComment.hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` ##### quotedComment.id ```ts id: `0x${string}` = HexSchema; ``` ##### quotedComment.logIndex ```ts logIndex: null | number; ``` ##### quotedComment.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` ##### quotedComment.moderationClassifierResult ```ts moderationClassifierResult: Record; ``` ##### quotedComment.moderationClassifierScore ```ts moderationClassifierScore: number; ``` ##### quotedComment.moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = IndexerAPICommentModerationStatusSchema; ``` ##### quotedComment.moderationStatusChangedAt ```ts moderationStatusChangedAt: Date; ``` ##### quotedComment.parentId ```ts parentId: null | `0x${string}`; ``` ##### quotedComment.path ```ts path: string; ``` ##### quotedComment.reactionCounts ```ts reactionCounts: Record; ``` ##### quotedComment.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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[] = IndexerAPICommentReferencesSchema; ``` ##### quotedComment.replies ```ts replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; ``` ##### quotedComment.replies.extra ```ts extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; } = IndexerAPIExtraSchema; ``` ##### quotedComment.replies.extra.moderationEnabled ```ts moderationEnabled: boolean; ``` ##### quotedComment.replies.extra.moderationKnownReactions ```ts moderationKnownReactions: string[]; ``` ##### quotedComment.replies.pagination ```ts pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorRepliesPaginationSchema; ``` ##### quotedComment.replies.pagination.count ```ts count: number; ``` ##### quotedComment.replies.pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### quotedComment.replies.pagination.hasNext ```ts hasNext: boolean; ``` ##### quotedComment.replies.pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### quotedComment.replies.pagination.limit ```ts limit: number; ``` ##### quotedComment.replies.pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` ##### quotedComment.replies.results ```ts results: IndexerAPICommentSchemaType[]; ``` ##### quotedComment.revision ```ts revision: number; ``` ##### quotedComment.targetUri ```ts targetUri: string; ``` ##### quotedComment.txHash ```ts txHash: `0x${string}` = HexSchema; ``` ##### quotedComment.updatedAt ```ts updatedAt: Date; ``` ##### quotedComment.viewerReactions ```ts viewerReactions: Record; ``` ##### quotedComment.zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` #### seen ```ts seen: boolean; ``` #### seenAt ```ts seenAt: null | Date; ``` #### type ```ts type: "quote"; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPINotificationReactionSchemaType ## Type Alias: IndexerAPINotificationReactionSchemaType ```ts type IndexerAPINotificationReactionSchemaType = { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; reactingTo: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; seen: boolean; seenAt: null | Date; type: "reaction"; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:797 ### 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; ``` #### comment ```ts comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; } = IndexerAPICommentSchema; ``` ##### comment.app ```ts app: `0x${string}` = HexSchema; ``` ##### comment.author ```ts author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; } = IndexerAPIAuthorDataSchema; ``` ##### comment.author.address ```ts address: `0x${string}` = HexSchema; ``` ##### comment.author.ens? ```ts optional ens: { avatarUrl: null | string; name: string; }; ``` ##### comment.author.ens.avatarUrl ```ts avatarUrl: null | string; ``` ##### comment.author.ens.name ```ts name: string; ``` ##### comment.author.farcaster? ```ts optional farcaster: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` ##### comment.author.farcaster.displayName? ```ts optional displayName: string; ``` ##### comment.author.farcaster.fid ```ts fid: number; ``` ##### comment.author.farcaster.pfpUrl? ```ts optional pfpUrl: string; ``` ##### comment.author.farcaster.username ```ts username: string; ``` ##### comment.chainId ```ts chainId: number; ``` ##### comment.channelId ```ts channelId: bigint; ``` ##### comment.commentType ```ts commentType: number; ``` ##### comment.content ```ts content: string; ``` ##### comment.createdAt ```ts createdAt: Date; ``` ##### comment.cursor ```ts cursor: `0x${string}` = HexSchema; ``` ##### comment.deletedAt ```ts deletedAt: null | Date; ``` ##### comment.hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` ##### comment.id ```ts id: `0x${string}` = HexSchema; ``` ##### comment.logIndex ```ts logIndex: null | number; ``` ##### comment.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` ##### comment.moderationClassifierResult ```ts moderationClassifierResult: Record; ``` ##### comment.moderationClassifierScore ```ts moderationClassifierScore: number; ``` ##### comment.moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = IndexerAPICommentModerationStatusSchema; ``` ##### comment.moderationStatusChangedAt ```ts moderationStatusChangedAt: Date; ``` ##### comment.parentId ```ts parentId: null | `0x${string}`; ``` ##### comment.path ```ts path: string; ``` ##### comment.reactionCounts ```ts reactionCounts: Record; ``` ##### comment.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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[] = IndexerAPICommentReferencesSchema; ``` ##### comment.replies ```ts replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; ``` ##### comment.replies.extra ```ts extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; } = IndexerAPIExtraSchema; ``` ##### comment.replies.extra.moderationEnabled ```ts moderationEnabled: boolean; ``` ##### comment.replies.extra.moderationKnownReactions ```ts moderationKnownReactions: string[]; ``` ##### comment.replies.pagination ```ts pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorRepliesPaginationSchema; ``` ##### comment.replies.pagination.count ```ts count: number; ``` ##### comment.replies.pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### comment.replies.pagination.hasNext ```ts hasNext: boolean; ``` ##### comment.replies.pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### comment.replies.pagination.limit ```ts limit: number; ``` ##### comment.replies.pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` ##### comment.replies.results ```ts results: IndexerAPICommentSchemaType[]; ``` ##### comment.revision ```ts revision: number; ``` ##### comment.targetUri ```ts targetUri: string; ``` ##### comment.txHash ```ts txHash: `0x${string}` = HexSchema; ``` ##### comment.updatedAt ```ts updatedAt: Date; ``` ##### comment.viewerReactions ```ts viewerReactions: Record; ``` ##### comment.zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` #### createdAt ```ts createdAt: Date; ``` #### id ```ts id: bigint; ``` #### reactingTo ```ts reactingTo: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; } = IndexerAPICommentSchema; ``` ##### reactingTo.app ```ts app: `0x${string}` = HexSchema; ``` ##### reactingTo.author ```ts author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; } = IndexerAPIAuthorDataSchema; ``` ##### reactingTo.author.address ```ts address: `0x${string}` = HexSchema; ``` ##### reactingTo.author.ens? ```ts optional ens: { avatarUrl: null | string; name: string; }; ``` ##### reactingTo.author.ens.avatarUrl ```ts avatarUrl: null | string; ``` ##### reactingTo.author.ens.name ```ts name: string; ``` ##### reactingTo.author.farcaster? ```ts optional farcaster: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` ##### reactingTo.author.farcaster.displayName? ```ts optional displayName: string; ``` ##### reactingTo.author.farcaster.fid ```ts fid: number; ``` ##### reactingTo.author.farcaster.pfpUrl? ```ts optional pfpUrl: string; ``` ##### reactingTo.author.farcaster.username ```ts username: string; ``` ##### reactingTo.chainId ```ts chainId: number; ``` ##### reactingTo.channelId ```ts channelId: bigint; ``` ##### reactingTo.commentType ```ts commentType: number; ``` ##### reactingTo.content ```ts content: string; ``` ##### reactingTo.createdAt ```ts createdAt: Date; ``` ##### reactingTo.cursor ```ts cursor: `0x${string}` = HexSchema; ``` ##### reactingTo.deletedAt ```ts deletedAt: null | Date; ``` ##### reactingTo.hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` ##### reactingTo.id ```ts id: `0x${string}` = HexSchema; ``` ##### reactingTo.logIndex ```ts logIndex: null | number; ``` ##### reactingTo.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` ##### reactingTo.moderationClassifierResult ```ts moderationClassifierResult: Record; ``` ##### reactingTo.moderationClassifierScore ```ts moderationClassifierScore: number; ``` ##### reactingTo.moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = IndexerAPICommentModerationStatusSchema; ``` ##### reactingTo.moderationStatusChangedAt ```ts moderationStatusChangedAt: Date; ``` ##### reactingTo.parentId ```ts parentId: null | `0x${string}`; ``` ##### reactingTo.path ```ts path: string; ``` ##### reactingTo.reactionCounts ```ts reactionCounts: Record; ``` ##### reactingTo.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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[] = IndexerAPICommentReferencesSchema; ``` ##### reactingTo.replies ```ts replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; ``` ##### reactingTo.replies.extra ```ts extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; } = IndexerAPIExtraSchema; ``` ##### reactingTo.replies.extra.moderationEnabled ```ts moderationEnabled: boolean; ``` ##### reactingTo.replies.extra.moderationKnownReactions ```ts moderationKnownReactions: string[]; ``` ##### reactingTo.replies.pagination ```ts pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorRepliesPaginationSchema; ``` ##### reactingTo.replies.pagination.count ```ts count: number; ``` ##### reactingTo.replies.pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### reactingTo.replies.pagination.hasNext ```ts hasNext: boolean; ``` ##### reactingTo.replies.pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### reactingTo.replies.pagination.limit ```ts limit: number; ``` ##### reactingTo.replies.pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` ##### reactingTo.replies.results ```ts results: IndexerAPICommentSchemaType[]; ``` ##### reactingTo.revision ```ts revision: number; ``` ##### reactingTo.targetUri ```ts targetUri: string; ``` ##### reactingTo.txHash ```ts txHash: `0x${string}` = HexSchema; ``` ##### reactingTo.updatedAt ```ts updatedAt: Date; ``` ##### reactingTo.viewerReactions ```ts viewerReactions: Record; ``` ##### reactingTo.zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` #### seen ```ts seen: boolean; ``` #### seenAt ```ts seenAt: null | Date; ``` #### type ```ts type: "reaction"; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPINotificationReplySchemaType ## Type Alias: IndexerAPINotificationReplySchemaType ```ts type IndexerAPINotificationReplySchemaType = { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; replyingTo: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; seen: boolean; seenAt: null | Date; type: "reply"; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:777 ### 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; ``` #### comment ```ts comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; } = IndexerAPICommentSchema; ``` ##### comment.app ```ts app: `0x${string}` = HexSchema; ``` ##### comment.author ```ts author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; } = IndexerAPIAuthorDataSchema; ``` ##### comment.author.address ```ts address: `0x${string}` = HexSchema; ``` ##### comment.author.ens? ```ts optional ens: { avatarUrl: null | string; name: string; }; ``` ##### comment.author.ens.avatarUrl ```ts avatarUrl: null | string; ``` ##### comment.author.ens.name ```ts name: string; ``` ##### comment.author.farcaster? ```ts optional farcaster: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` ##### comment.author.farcaster.displayName? ```ts optional displayName: string; ``` ##### comment.author.farcaster.fid ```ts fid: number; ``` ##### comment.author.farcaster.pfpUrl? ```ts optional pfpUrl: string; ``` ##### comment.author.farcaster.username ```ts username: string; ``` ##### comment.chainId ```ts chainId: number; ``` ##### comment.channelId ```ts channelId: bigint; ``` ##### comment.commentType ```ts commentType: number; ``` ##### comment.content ```ts content: string; ``` ##### comment.createdAt ```ts createdAt: Date; ``` ##### comment.cursor ```ts cursor: `0x${string}` = HexSchema; ``` ##### comment.deletedAt ```ts deletedAt: null | Date; ``` ##### comment.hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` ##### comment.id ```ts id: `0x${string}` = HexSchema; ``` ##### comment.logIndex ```ts logIndex: null | number; ``` ##### comment.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` ##### comment.moderationClassifierResult ```ts moderationClassifierResult: Record; ``` ##### comment.moderationClassifierScore ```ts moderationClassifierScore: number; ``` ##### comment.moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = IndexerAPICommentModerationStatusSchema; ``` ##### comment.moderationStatusChangedAt ```ts moderationStatusChangedAt: Date; ``` ##### comment.parentId ```ts parentId: null | `0x${string}`; ``` ##### comment.path ```ts path: string; ``` ##### comment.reactionCounts ```ts reactionCounts: Record; ``` ##### comment.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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[] = IndexerAPICommentReferencesSchema; ``` ##### comment.replies ```ts replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; ``` ##### comment.replies.extra ```ts extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; } = IndexerAPIExtraSchema; ``` ##### comment.replies.extra.moderationEnabled ```ts moderationEnabled: boolean; ``` ##### comment.replies.extra.moderationKnownReactions ```ts moderationKnownReactions: string[]; ``` ##### comment.replies.pagination ```ts pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorRepliesPaginationSchema; ``` ##### comment.replies.pagination.count ```ts count: number; ``` ##### comment.replies.pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### comment.replies.pagination.hasNext ```ts hasNext: boolean; ``` ##### comment.replies.pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### comment.replies.pagination.limit ```ts limit: number; ``` ##### comment.replies.pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` ##### comment.replies.results ```ts results: IndexerAPICommentSchemaType[]; ``` ##### comment.revision ```ts revision: number; ``` ##### comment.targetUri ```ts targetUri: string; ``` ##### comment.txHash ```ts txHash: `0x${string}` = HexSchema; ``` ##### comment.updatedAt ```ts updatedAt: Date; ``` ##### comment.viewerReactions ```ts viewerReactions: Record; ``` ##### comment.zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` #### createdAt ```ts createdAt: Date; ``` #### id ```ts id: bigint; ``` #### replyingTo ```ts replyingTo: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; } = IndexerAPICommentSchema; ``` ##### replyingTo.app ```ts app: `0x${string}` = HexSchema; ``` ##### replyingTo.author ```ts author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; } = IndexerAPIAuthorDataSchema; ``` ##### replyingTo.author.address ```ts address: `0x${string}` = HexSchema; ``` ##### replyingTo.author.ens? ```ts optional ens: { avatarUrl: null | string; name: string; }; ``` ##### replyingTo.author.ens.avatarUrl ```ts avatarUrl: null | string; ``` ##### replyingTo.author.ens.name ```ts name: string; ``` ##### replyingTo.author.farcaster? ```ts optional farcaster: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; ``` ##### replyingTo.author.farcaster.displayName? ```ts optional displayName: string; ``` ##### replyingTo.author.farcaster.fid ```ts fid: number; ``` ##### replyingTo.author.farcaster.pfpUrl? ```ts optional pfpUrl: string; ``` ##### replyingTo.author.farcaster.username ```ts username: string; ``` ##### replyingTo.chainId ```ts chainId: number; ``` ##### replyingTo.channelId ```ts channelId: bigint; ``` ##### replyingTo.commentType ```ts commentType: number; ``` ##### replyingTo.content ```ts content: string; ``` ##### replyingTo.createdAt ```ts createdAt: Date; ``` ##### replyingTo.cursor ```ts cursor: `0x${string}` = HexSchema; ``` ##### replyingTo.deletedAt ```ts deletedAt: null | Date; ``` ##### replyingTo.hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` ##### replyingTo.id ```ts id: `0x${string}` = HexSchema; ``` ##### replyingTo.logIndex ```ts logIndex: null | number; ``` ##### replyingTo.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = IndexerAPIMetadataSchema; ``` ##### replyingTo.moderationClassifierResult ```ts moderationClassifierResult: Record; ``` ##### replyingTo.moderationClassifierScore ```ts moderationClassifierScore: number; ``` ##### replyingTo.moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = IndexerAPICommentModerationStatusSchema; ``` ##### replyingTo.moderationStatusChangedAt ```ts moderationStatusChangedAt: Date; ``` ##### replyingTo.parentId ```ts parentId: null | `0x${string}`; ``` ##### replyingTo.path ```ts path: string; ``` ##### replyingTo.reactionCounts ```ts reactionCounts: Record; ``` ##### replyingTo.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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[] = IndexerAPICommentReferencesSchema; ``` ##### replyingTo.replies ```ts replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; ``` ##### replyingTo.replies.extra ```ts extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; } = IndexerAPIExtraSchema; ``` ##### replyingTo.replies.extra.moderationEnabled ```ts moderationEnabled: boolean; ``` ##### replyingTo.replies.extra.moderationKnownReactions ```ts moderationKnownReactions: string[]; ``` ##### replyingTo.replies.pagination ```ts pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; } = IndexerAPICursorRepliesPaginationSchema; ``` ##### replyingTo.replies.pagination.count ```ts count: number; ``` ##### replyingTo.replies.pagination.endCursor? ```ts optional endCursor: `0x${string}`; ``` ##### replyingTo.replies.pagination.hasNext ```ts hasNext: boolean; ``` ##### replyingTo.replies.pagination.hasPrevious ```ts hasPrevious: boolean; ``` ##### replyingTo.replies.pagination.limit ```ts limit: number; ``` ##### replyingTo.replies.pagination.startCursor? ```ts optional startCursor: `0x${string}`; ``` ##### replyingTo.replies.results ```ts results: IndexerAPICommentSchemaType[]; ``` ##### replyingTo.revision ```ts revision: number; ``` ##### replyingTo.targetUri ```ts targetUri: string; ``` ##### replyingTo.txHash ```ts txHash: `0x${string}` = HexSchema; ``` ##### replyingTo.updatedAt ```ts updatedAt: Date; ``` ##### replyingTo.viewerReactions ```ts viewerReactions: Record; ``` ##### replyingTo.zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` #### seen ```ts seen: boolean; ``` #### seenAt ```ts seenAt: null | Date; ``` #### type ```ts type: "reply"; ``` [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPINotificationSchemaType ## Type Alias: IndexerAPINotificationSchemaType ```ts type IndexerAPINotificationSchemaType = | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; replyingTo: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; seen: boolean; seenAt: null | Date; type: "reply"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; mentionedUser: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; seen: boolean; seenAt: null | Date; type: "mention"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; reactingTo: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; seen: boolean; seenAt: null | Date; type: "reaction"; } | { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; quotedComment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; seen: boolean; seenAt: null | Date; type: "quote"; }; ``` Defined in: packages/sdk/src/indexer/schemas.ts:821 The notification schema [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPINotificationTypeSchemaType ## Type Alias: IndexerAPINotificationTypeSchemaType ```ts type IndexerAPINotificationTypeSchemaType = "reply" | "mention" | "reaction" | "quote"; ``` Defined in: packages/sdk/src/indexer/schemas.ts:832 [**@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:450 ### 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:738 ### 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:730 ### 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:757 ### 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:747 ### 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:162 [**@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: Hex; apiUrl?: string; retries?: number; signal?: AbortSignal; }; ``` Defined in: packages/sdk/src/indexer/api.ts:761 The options for `isMuted()` ### Properties #### address ```ts address: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:765 Author's address *** #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:771 URL on which /api/muted-accounts/$address endpoint will be called ##### Default ```ts "https://api.ethcomments.xyz" ``` *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/indexer/api.ts:781 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:775 Abort signal for requests [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / MarkNotificationsAsSeenOptions ## Type Alias: MarkNotificationsAsSeenOptions ```ts type MarkNotificationsAsSeenOptions = { apiUrl?: string; app?: | Hex | Hex[]; appSecretKey: string; lastSeenNotificationDate?: Date; retries?: number; signal?: AbortSignal; type?: | IndexerAPINotificationTypeSchemaType | IndexerAPINotificationTypeSchemaType[]; user: Hex | string; }; ``` Defined in: packages/sdk/src/indexer/api.ts:1545 ### Properties #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:1551 URL on which /api/notifications/seen endpoint will be called ##### Default ```ts "https://api.ethcomments.xyz" ``` *** #### app? ```ts optional app: | Hex | Hex[]; ``` Defined in: packages/sdk/src/indexer/api.ts:1564 The app signers to mark notifications as seen for *** #### appSecretKey ```ts appSecretKey: string; ``` Defined in: packages/sdk/src/indexer/api.ts:1556 App secret key to authenticate the request. Can be found in the [https://dashboard.ethcomments.xyz](https://dashboard.ethcomments.xyz) after creating an app. *** #### lastSeenNotificationDate? ```ts optional lastSeenNotificationDate: Date; ``` Defined in: packages/sdk/src/indexer/api.ts:1568 The date of the last seen notification, will mark as seen notifications created after this date *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/indexer/api.ts:1580 Number of times to retry the request in case of failure (non‑parsing/network errors). ##### Default ```ts 3 ``` *** #### signal? ```ts optional signal: AbortSignal; ``` Defined in: packages/sdk/src/indexer/api.ts:1584 The signal to abort the request *** #### type? ```ts optional type: | IndexerAPINotificationTypeSchemaType | IndexerAPINotificationTypeSchemaType[]; ``` Defined in: packages/sdk/src/indexer/api.ts:1572 The types of notifications to mark as seen *** #### user ```ts user: Hex | string; ``` Defined in: packages/sdk/src/indexer/api.ts:1560 The user to mark notifications as seen for, either ETH address or ENS name [**@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:1103 The options for `reportComment()` ### Properties #### apiUrl? ```ts optional apiUrl: string; ``` Defined in: packages/sdk/src/indexer/api.ts:1129 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:1123 The chain ID where the comment was posted *** #### commentId ```ts commentId: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:1107 The ID of the comment to report *** #### message? ```ts optional message: string; ``` Defined in: packages/sdk/src/indexer/api.ts:1115 Optional message explaining the reason for the report *** #### reportee ```ts reportee: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:1111 The address of the user reporting the comment *** #### retries? ```ts optional retries: number; ``` Defined in: packages/sdk/src/indexer/api.ts:1135 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:1136 *** #### signature ```ts signature: Hex; ``` Defined in: packages/sdk/src/indexer/api.ts:1119 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:134 [**@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:114 [**@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:643 [**@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:658 [**@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:678 [**@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:696 [**@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:85 [**@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:69 [**@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:154 [**@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:144 [**@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<{ app: ZodEffects; author: ZodObject<{ address: ZodEffects; 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: ZodEffects; hookMetadata: ZodArray; value: ZodEffects; }, "strip", ZodTypeAny, { key: `0x${string}`; value: `0x${string}`; }, { key: `0x${string}`; value: `0x${string}`; }>, "many">; id: ZodEffects; logIndex: ZodNullable; metadata: ZodArray; value: ZodEffects; }, "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>; path: ZodString; references: ZodType<( | { 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[], ZodTypeDef, ( | { 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]>; revision: ZodNumber; targetUri: ZodString; txHash: ZodEffects; 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<[ZodEffects<..., ..., ...>, 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; replies: ZodObject<{ extra: ZodObject<{ moderationEnabled: ZodBoolean; moderationKnownReactions: ZodArray; }, "strip", ZodTypeAny, { moderationEnabled: boolean; moderationKnownReactions: string[]; }, { moderationEnabled: boolean; moderationKnownReactions: string[]; }>; pagination: ZodObject<{ endCursor: ZodOptional>; hasNext: ZodBoolean; hasPrevious: ZodBoolean; limit: ZodNumber; startCursor: ZodOptional>; } & { count: ZodNumber; }, "strip", ZodTypeAny, { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }, { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }>; results: ZodArray>, "many">; }, "strip", ZodTypeAny, { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentOutputSchemaType[]; }, { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }>; viewerReactions: ZodRecord>, "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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentOutputSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: string; viewerReactions: Record; 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; 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:521 [**@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:200 [**@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:229 [**@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:213 [**@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:195 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferenceQuotedCommentSchema ## Variable: IndexerAPICommentReferenceQuotedCommentSchema ```ts const IndexerAPICommentReferenceQuotedCommentSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:331 Handles caip373 quoted comment See [https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-373.md](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-373.md) and [https://github.com/ecp-eth/ECPIP/discussions/2](https://github.com/ecp-eth/ECPIP/discussions/2) [**@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:342 [**@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:276 [**@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:292 [**@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:304 [**@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:254 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPICommentReferencesSchema ## Variable: IndexerAPICommentReferencesSchema ```ts const IndexerAPICommentReferencesSchema: ZodType; ``` Defined in: packages/sdk/src/indexer/schemas.ts:357 [**@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<{ app: ZodEffects; author: ZodObject<{ address: ZodEffects; 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; channelId: ZodBigInt; commentType: ZodNumber; content: ZodString; createdAt: ZodDate; cursor: ZodEffects; deletedAt: ZodNullable; hookMetadata: ZodArray; value: ZodEffects; }, "strip", ZodTypeAny, { key: `0x${string}`; value: `0x${string}`; }, { key: `0x${string}`; value: `0x${string}`; }>, "many">; id: ZodEffects; logIndex: ZodNullable; metadata: ZodArray; value: ZodEffects; }, "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"]>; moderationStatusChangedAt: ZodDate; parentId: ZodNullable>; path: ZodString; references: ZodType<( | { 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[], ZodTypeDef, ( | { 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]>; revision: ZodNumber; targetUri: ZodString; txHash: ZodEffects; updatedAt: ZodDate; 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<[ZodEffects<..., ..., ...>, 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; }; }>>; } & { reactionCounts: ZodRecord; replies: ZodObject<{ extra: ZodObject<{ moderationEnabled: ZodBoolean; moderationKnownReactions: ZodArray; }, "strip", ZodTypeAny, { moderationEnabled: boolean; moderationKnownReactions: string[]; }, { moderationEnabled: boolean; moderationKnownReactions: string[]; }>; pagination: ZodObject<{ endCursor: ZodOptional>; hasNext: ZodBoolean; hasPrevious: ZodBoolean; limit: ZodNumber; startCursor: ZodOptional>; } & { count: ZodNumber; }, "strip", ZodTypeAny, { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }, { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }>; results: ZodArray>, "many">; }, "strip", ZodTypeAny, { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }, { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaInputType[]; }>; viewerReactions: ZodRecord>, "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: 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaInputType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; 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 [**@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:176 [**@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) / IndexerAPICursorRepliesPaginationSchema ## Variable: IndexerAPICursorRepliesPaginationSchema ```ts const IndexerAPICursorRepliesPaginationSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:41 [**@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:454 [**@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:123 [**@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:706 [**@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:104 [**@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:95 [**@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:560 [**@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:550 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIListGroupedNotificationsSchema ## Variable: IndexerAPIListGroupedNotificationsSchema ```ts const IndexerAPIListGroupedNotificationsSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:864 The list grouped notifications schema returned by fetchGroupedNotifications() [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIListNotificationsSchema ## Variable: IndexerAPIListNotificationsSchema ```ts const IndexerAPIListNotificationsSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:839 The list notifications schema returned by fetchNotifications() [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPIMarkNotificationsAsSeenSchema ## Variable: IndexerAPIMarkNotificationsAsSeenSchema ```ts const IndexerAPIMarkNotificationsAsSeenSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:893 [**@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:54 [**@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:63 [**@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:596 [**@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:590 [**@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:580 [**@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:571 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPINotificationBaseSchema ## Variable: IndexerAPINotificationBaseSchema ```ts const IndexerAPINotificationBaseSchema: ZodObject<{ app: ZodEffects; author: ZodObject<{ address: ZodEffects; 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; }; }>; comment: ZodObject<{ app: ZodEffects; author: ZodObject<{ address: ZodEffects; ens: ZodOptional; name: ZodString; }, "strip", ZodTypeAny, { avatarUrl: ... | ...; name: string; }, { avatarUrl: ... | ...; name: string; }>>; farcaster: ZodOptional; fid: ZodNumber; pfpUrl: ZodOptional<...>; username: ZodString; }, "strip", ZodTypeAny, { displayName?: ... | ...; fid: number; pfpUrl?: ... | ...; username: string; }, { displayName?: ... | ...; fid: number; pfpUrl?: ... | ...; 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; channelId: ZodBigInt; commentType: ZodNumber; content: ZodString; createdAt: ZodDate; cursor: ZodEffects; deletedAt: ZodNullable; hookMetadata: ZodArray; value: ZodEffects; }, "strip", ZodTypeAny, { key: `0x${string}`; value: `0x${string}`; }, { key: `0x${string}`; value: `0x${string}`; }>, "many">; id: ZodEffects; logIndex: ZodNullable; metadata: ZodArray; value: ZodEffects; }, "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"]>; moderationStatusChangedAt: ZodDate; parentId: ZodNullable>; path: ZodString; references: ZodType<( | { 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[], ZodTypeDef, ( | { 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]>; revision: ZodNumber; targetUri: ZodString; txHash: ZodEffects; updatedAt: ZodDate; zeroExSwap: ZodNullable; amount: ZodString; symbol: ZodString; }, "strip", ZodTypeAny, { address: `0x${(...)}`; amount: string; symbol: string; }, { address: `0x${(...)}`; amount: string; symbol: string; }>; to: ZodObject<{ address: ZodUnion<...>; amount: ZodUnion<...>; symbol: ZodString; }, "strip", ZodTypeAny, { address: ... | ...; amount: string; symbol: string; }, { address: ... | ...; amount: string; symbol: string; }>; }, "strip", ZodTypeAny, { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }, { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${(...)}`; amount: string; symbol: string; }; }>>; } & { reactionCounts: ZodRecord; replies: ZodObject<{ extra: ZodObject<{ moderationEnabled: ZodBoolean; moderationKnownReactions: ZodArray; }, "strip", ZodTypeAny, { moderationEnabled: boolean; moderationKnownReactions: string[]; }, { moderationEnabled: boolean; moderationKnownReactions: string[]; }>; pagination: ZodObject<{ endCursor: ZodOptional<...>; hasNext: ZodBoolean; hasPrevious: ZodBoolean; limit: ZodNumber; startCursor: ZodOptional<...>; } & { count: ZodNumber; }, "strip", ZodTypeAny, { count: number; endCursor?: `0x${(...)}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${(...)}`; }, { count: number; endCursor?: `0x${(...)}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${(...)}`; }>; results: ZodArray>, "many">; }, "strip", ZodTypeAny, { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }, { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaInputType[]; }>; viewerReactions: ZodRecord>, "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: 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaInputType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }>; createdAt: ZodDate; id: ZodBigInt; seen: ZodBoolean; seenAt: ZodNullable; }, "strip", ZodTypeAny, { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; seen: boolean; seenAt: null | Date; }, { app: `0x${string}`; author: { address: `0x${string}`; ens?: { avatarUrl: null | string; name: string; }; farcaster?: { displayName?: string; fid: number; pfpUrl?: string; username: string; }; }; comment: { 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}`; path: 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; replies: { extra: { moderationEnabled: boolean; moderationKnownReactions: string[]; }; pagination: { count: number; endCursor?: `0x${string}`; hasNext: boolean; hasPrevious: boolean; limit: number; startCursor?: `0x${string}`; }; results: IndexerAPICommentSchemaInputType[]; }; revision: number; targetUri: string; txHash: `0x${string}`; updatedAt: Date; viewerReactions: Record; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; createdAt: Date; id: bigint; seen: boolean; seenAt: null | Date; }>; ``` Defined in: packages/sdk/src/indexer/schemas.ts:761 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPINotificationMentionSchema ## Variable: IndexerAPINotificationMentionSchema ```ts const IndexerAPINotificationMentionSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:781 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPINotificationQuoteSchema ## Variable: IndexerAPINotificationQuoteSchema ```ts const IndexerAPINotificationQuoteSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:801 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPINotificationReactionSchema ## Variable: IndexerAPINotificationReactionSchema ```ts const IndexerAPINotificationReactionSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:791 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPINotificationReplySchema ## Variable: IndexerAPINotificationReplySchema ```ts const IndexerAPINotificationReplySchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/schemas.ts:771 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPINotificationSchema ## Variable: IndexerAPINotificationSchema ```ts const IndexerAPINotificationSchema: ZodDiscriminatedUnion; ``` Defined in: packages/sdk/src/indexer/schemas.ts:814 The notification schema [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer](/sdk-reference/indexer/index.mdx) / IndexerAPINotificationTypeSchema ## Variable: IndexerAPINotificationTypeSchema ```ts const IndexerAPINotificationTypeSchema: ZodEnum; ``` Defined in: packages/sdk/src/indexer/schemas.ts:825 [**@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:444 [**@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:732 [**@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:720 [**@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:714 [**@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:751 [**@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:742 [**@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:160 [**@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<[ZodEffects, ZodLiteral<"">]>; ``` Defined in: packages/sdk/src/indexer/schemas.ts:170 [**@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:173 [**@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:164 [**@ecp.eth/sdk**](../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / indexer/webhooks ## indexer/webhooks Ethereum Comments Protocol SDK Indexer Functionality for constructing events from webhook requests. ### Classes | Class | Description | | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | | [InvalidEventError](/sdk-reference/indexer/webhooks/classes/InvalidEventError.mdx) | Thrown when the event is invalid. | | [InvalidEventSignatureError](/sdk-reference/indexer/webhooks/classes/InvalidEventSignatureError.mdx) | Thrown when the event signature is invalid. | | [InvalidRequestBodyError](/sdk-reference/indexer/webhooks/classes/InvalidRequestBodyError.mdx) | Thrown when the request body is not valid JSON object. | ### Type Aliases | Type Alias | Description | | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | | [ApprovalAddedEvent](/sdk-reference/indexer/webhooks/type-aliases/ApprovalAddedEvent.mdx) | An event sent to webhook when an approval is added | | [ApprovalExpiredEvent](/sdk-reference/indexer/webhooks/type-aliases/ApprovalExpiredEvent.mdx) | An event sent to webhook when an approval expires | | [ApprovalRemovedEvent](/sdk-reference/indexer/webhooks/type-aliases/ApprovalRemovedEvent.mdx) | An event sent to webhook when an approval is removed | | [ChannelCreatedEvent](/sdk-reference/indexer/webhooks/type-aliases/ChannelCreatedEvent.mdx) | An event sent to webhook when a channel is created. | | [ChannelHookStatusUpdatedEvent](/sdk-reference/indexer/webhooks/type-aliases/ChannelHookStatusUpdatedEvent.mdx) | An event sent to webhook when a channel hook status is updated. | | [ChannelMetadataSetEvent](/sdk-reference/indexer/webhooks/type-aliases/ChannelMetadataSetEvent.mdx) | An event sent to webhook when a channel metadata is set. | | [ChannelTransferredEvent](/sdk-reference/indexer/webhooks/type-aliases/ChannelTransferredEvent.mdx) | An event sent to webhook when a channel is transferred. | | [ChannelUpdatedEvent](/sdk-reference/indexer/webhooks/type-aliases/ChannelUpdatedEvent.mdx) | An event sent to webhook when a channel is updated. | | [CommentAddedEvent](/sdk-reference/indexer/webhooks/type-aliases/CommentAddedEvent.mdx) | An event sent to webhook when a comment is added. | | [CommentDeletedEvent](/sdk-reference/indexer/webhooks/type-aliases/CommentDeletedEvent.mdx) | An event sent to webhook when a comment is deleted. | | [CommentEditedEvent](/sdk-reference/indexer/webhooks/type-aliases/CommentEditedEvent.mdx) | An event sent to webhook when a comment is edited. | | [CommentHookMetadataSetEvent](/sdk-reference/indexer/webhooks/type-aliases/CommentHookMetadataSetEvent.mdx) | An event sent to webhook when a comment hook metadata is set. | | [CommentModerationStatus](/sdk-reference/indexer/webhooks/type-aliases/CommentModerationStatus.mdx) | Comment moderation status schema. | | [CommentModerationStatusUpdatedEvent](/sdk-reference/indexer/webhooks/type-aliases/CommentModerationStatusUpdatedEvent.mdx) | An event sent to webhook when a comment moderation status is updated. | | [CommentReactionsUpdatedEvent](/sdk-reference/indexer/webhooks/type-aliases/CommentReactionsUpdatedEvent.mdx) | An event sent to webhook when a comment reactions are updated. | | [CommentReferencesUpdatedEvent](/sdk-reference/indexer/webhooks/type-aliases/CommentReferencesUpdatedEvent.mdx) | - | | [ConstructEventResult](/sdk-reference/indexer/webhooks/type-aliases/ConstructEventResult.mdx) | All events schema. | | [TestEvent](/sdk-reference/indexer/webhooks/type-aliases/TestEvent.mdx) | An event sent to webhook when a test event is triggered. | ### Variables | Variable | Description | | ------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------- | | [AllEvents](/sdk-reference/indexer/webhooks/variables/AllEvents.mdx) | All events. | | [AllEventsSchema](/sdk-reference/indexer/webhooks/variables/AllEventsSchema.mdx) | All events schema. | | [ApprovalAddedEventSchema](/sdk-reference/indexer/webhooks/variables/ApprovalAddedEventSchema.mdx) | An event sent to webhook when an approval is added | | [ApprovalAddedEventV1Schema](/sdk-reference/indexer/webhooks/variables/ApprovalAddedEventV1Schema.mdx) | - | | [ApprovalAddedEventV2Schema](/sdk-reference/indexer/webhooks/variables/ApprovalAddedEventV2Schema.mdx) | - | | [ApprovalEvents](/sdk-reference/indexer/webhooks/variables/ApprovalEvents.mdx) | Approval events. | | [ApprovalEventsSchema](/sdk-reference/indexer/webhooks/variables/ApprovalEventsSchema.mdx) | Approval events schema. | | [ApprovalExpiredEventSchema](/sdk-reference/indexer/webhooks/variables/ApprovalExpiredEventSchema.mdx) | An event sent to webhook when an approval expires | | [ApprovalRemovedEventSchema](/sdk-reference/indexer/webhooks/variables/ApprovalRemovedEventSchema.mdx) | An event sent to webhook when an approval is removed | | [ChannelCreatedEventSchema](/sdk-reference/indexer/webhooks/variables/ChannelCreatedEventSchema.mdx) | An event sent to webhook when a channel is created. | | [ChannelEvents](/sdk-reference/indexer/webhooks/variables/ChannelEvents.mdx) | Channel events. | | [ChannelEventsSchema](/sdk-reference/indexer/webhooks/variables/ChannelEventsSchema.mdx) | Channel events schema. | | [ChannelHookStatusUpdatedEventSchema](/sdk-reference/indexer/webhooks/variables/ChannelHookStatusUpdatedEventSchema.mdx) | An event sent to webhook when a channel hook status is updated. | | [ChannelMetadataSetEventSchema](/sdk-reference/indexer/webhooks/variables/ChannelMetadataSetEventSchema.mdx) | An event sent to webhook when a channel metadata is set. | | [ChannelTransferredEventSchema](/sdk-reference/indexer/webhooks/variables/ChannelTransferredEventSchema.mdx) | An event sent to webhook when a channel is transferred. | | [ChannelUpdatedEventSchema](/sdk-reference/indexer/webhooks/variables/ChannelUpdatedEventSchema.mdx) | An event sent to webhook when a channel is updated. | | [CommentAddedEventSchema](/sdk-reference/indexer/webhooks/variables/CommentAddedEventSchema.mdx) | An event sent to webhook when a comment is added. | | [CommentDeletedEventSchema](/sdk-reference/indexer/webhooks/variables/CommentDeletedEventSchema.mdx) | An event sent to webhook when a comment is deleted. | | [CommentEditedEventSchema](/sdk-reference/indexer/webhooks/variables/CommentEditedEventSchema.mdx) | An event sent to webhook when a comment is edited. | | [CommentEvents](/sdk-reference/indexer/webhooks/variables/CommentEvents.mdx) | Comment events. | | [CommentEventsSchema](/sdk-reference/indexer/webhooks/variables/CommentEventsSchema.mdx) | Comment events schema. | | [CommentHookMetadataSetEventSchema](/sdk-reference/indexer/webhooks/variables/CommentHookMetadataSetEventSchema.mdx) | An event sent to webhook when a comment hook metadata is set. | | [CommentModerationStatusSchema](/sdk-reference/indexer/webhooks/variables/CommentModerationStatusSchema.mdx) | Comment moderation status schema. | | [CommentModerationStatusUpdatedEventSchema](/sdk-reference/indexer/webhooks/variables/CommentModerationStatusUpdatedEventSchema.mdx) | An event sent to webhook when a comment moderation status is updated. | | [CommentReactionsUpdatedEventSchema](/sdk-reference/indexer/webhooks/variables/CommentReactionsUpdatedEventSchema.mdx) | An event sent to webhook when a comment reactions are updated. | | [CommentReferencesUpdatedEventSchema](/sdk-reference/indexer/webhooks/variables/CommentReferencesUpdatedEventSchema.mdx) | - | | [EVENT\_APPROVAL\_ADDED](/sdk-reference/indexer/webhooks/variables/EVENT_APPROVAL_ADDED.mdx) | - | | [EVENT\_APPROVAL\_EXPIRED](/sdk-reference/indexer/webhooks/variables/EVENT_APPROVAL_EXPIRED.mdx) | - | | [EVENT\_APPROVAL\_REMOVED](/sdk-reference/indexer/webhooks/variables/EVENT_APPROVAL_REMOVED.mdx) | - | | [EVENT\_CHANNEL\_CREATED](/sdk-reference/indexer/webhooks/variables/EVENT_CHANNEL_CREATED.mdx) | - | | [EVENT\_CHANNEL\_HOOK\_STATUS\_UPDATED](/sdk-reference/indexer/webhooks/variables/EVENT_CHANNEL_HOOK_STATUS_UPDATED.mdx) | - | | [EVENT\_CHANNEL\_METADATA\_SET](/sdk-reference/indexer/webhooks/variables/EVENT_CHANNEL_METADATA_SET.mdx) | - | | [EVENT\_CHANNEL\_TRANSFERRED](/sdk-reference/indexer/webhooks/variables/EVENT_CHANNEL_TRANSFERRED.mdx) | - | | [EVENT\_CHANNEL\_UPDATED](/sdk-reference/indexer/webhooks/variables/EVENT_CHANNEL_UPDATED.mdx) | - | | [EVENT\_COMMENT\_ADDED](/sdk-reference/indexer/webhooks/variables/EVENT_COMMENT_ADDED.mdx) | - | | [EVENT\_COMMENT\_DELETED](/sdk-reference/indexer/webhooks/variables/EVENT_COMMENT_DELETED.mdx) | - | | [EVENT\_COMMENT\_EDITED](/sdk-reference/indexer/webhooks/variables/EVENT_COMMENT_EDITED.mdx) | - | | [EVENT\_COMMENT\_HOOK\_METADATA\_SET](/sdk-reference/indexer/webhooks/variables/EVENT_COMMENT_HOOK_METADATA_SET.mdx) | - | | [EVENT\_COMMENT\_MODERATION\_STATUS\_UPDATED](/sdk-reference/indexer/webhooks/variables/EVENT_COMMENT_MODERATION_STATUS_UPDATED.mdx) | - | | [EVENT\_COMMENT\_REACTIONS\_UPDATED](/sdk-reference/indexer/webhooks/variables/EVENT_COMMENT_REACTIONS_UPDATED.mdx) | - | | [EVENT\_COMMENT\_REFERENCES\_UPDATED](/sdk-reference/indexer/webhooks/variables/EVENT_COMMENT_REFERENCES_UPDATED.mdx) | - | | [EVENT\_TEST](/sdk-reference/indexer/webhooks/variables/EVENT_TEST.mdx) | - | | [EventBaseSchema](/sdk-reference/indexer/webhooks/variables/EventBaseSchema.mdx) | - | | [EventFromChainSchema](/sdk-reference/indexer/webhooks/variables/EventFromChainSchema.mdx) | Common schema for all events coming from a chain. | | [EventV1Schema](/sdk-reference/indexer/webhooks/variables/EventV1Schema.mdx) | Common schema for all v1 events. | | [ISO8601DateSchema](/sdk-reference/indexer/webhooks/variables/ISO8601DateSchema.mdx) | ISO 8601 date schema. Used to convert the ISO 8601 date from JSON to date. | | [MetadataSetOperationSchema](/sdk-reference/indexer/webhooks/variables/MetadataSetOperationSchema.mdx) | Common schema for all metadata set operations. | | [StringBigintSchema](/sdk-reference/indexer/webhooks/variables/StringBigintSchema.mdx) | Stringified bigint schema. Used to convert the stringified bigint from JSON to bigint. | | [TestEvents](/sdk-reference/indexer/webhooks/variables/TestEvents.mdx) | Test events. | | [TestEventSchema](/sdk-reference/indexer/webhooks/variables/TestEventSchema.mdx) | An event sent to webhook when a test event is triggered. | ### Functions | Function | Description | | ---------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | | [constructEvent](/sdk-reference/indexer/webhooks/functions/constructEvent.mdx) | Constructs an event from the request body, signature, and timestamp. | | [constructEventFromRequest](/sdk-reference/indexer/webhooks/functions/constructEventFromRequest.mdx) | Constructs an event from a request. | [**@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:165 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:62 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:125 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:251 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) / useGetCommentCreationFee ## Function: useGetCommentCreationFee() ```ts function useGetCommentCreationFee(params, options): UseGetCommentCreationFeeResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:337 Get the creation fee from channel manager ### Parameters #### params [`UseGetCommentCreationFeeParams`](/sdk-reference/channel-manager/react/type-aliases/UseGetCommentCreationFeeParams.mdx) = `{}` The parameters for getting the creation fee from channel manager #### options [`UseGetCommentCreationFeeOptions`](/sdk-reference/channel-manager/react/type-aliases/UseGetCommentCreationFeeOptions.mdx) = `{}` The options for the query ### Returns [`UseGetCommentCreationFeeResult`](/sdk-reference/channel-manager/react/type-aliases/UseGetCommentCreationFeeResult.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:205 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:453 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:301 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) / useSetCommentCreationFee ## Function: useSetCommentCreationFee() ```ts function useSetCommentCreationFee(options): UseSetCommentCreationFeeResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:387 Set the fee for creating a new comment ### Parameters #### options [`UseSetCommentCreationFeeOptions`](/sdk-reference/channel-manager/react/type-aliases/UseSetCommentCreationFeeOptions.mdx) = `{}` The options for the mutation ### Returns [`UseSetCommentCreationFeeResult`](/sdk-reference/channel-manager/react/type-aliases/UseSetCommentCreationFeeResult.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:95 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:420 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:152 [**@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:151 [**@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:156 [**@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:46 [**@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:45 [**@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:50 [**@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:235 [**@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:231 [**@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:239 [**@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:112 [**@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:111 [**@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:116 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseGetCommentCreationFeeOptions ## Type Alias: UseGetCommentCreationFeeOptions ```ts type UseGetCommentCreationFeeOptions = Omit, "queryKey" | "queryFn">; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:321 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseGetCommentCreationFeeParams ## Type Alias: UseGetCommentCreationFeeParams ```ts type UseGetCommentCreationFeeParams = Omit; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:317 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseGetCommentCreationFeeResult ## Type Alias: UseGetCommentCreationFeeResult ```ts type UseGetCommentCreationFeeResult = UseQueryResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:325 [**@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:192 [**@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:191 [**@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:196 [**@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:437 [**@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:436 [**@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:441 [**@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:281 [**@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:277 [**@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:289 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseSetCommentCreationFeeOptions ## Type Alias: UseSetCommentCreationFeeOptions ```ts type UseSetCommentCreationFeeOptions = Omit, "mutationFn">; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:367 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseSetCommentCreationFeeParams ## Type Alias: UseSetCommentCreationFeeParams ```ts type UseSetCommentCreationFeeParams = Omit; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:363 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/react](/sdk-reference/channel-manager/react/index.mdx) / UseSetCommentCreationFeeResult ## Type Alias: UseSetCommentCreationFeeResult ```ts type UseSetCommentCreationFeeResult = UseMutationResult; ``` Defined in: packages/sdk/src/channel-manager/react/channel.ts:375 [**@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:79 [**@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:78 [**@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:83 [**@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:404 [**@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:403 [**@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:408 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/types](/sdk-reference/channel-manager/types/index.mdx) / BaseHookABIType ## Type Alias: BaseHookABIType ```ts type BaseHookABIType = typeof BaseHookABI; ``` Defined in: packages/sdk/src/channel-manager/types.ts:11 [**@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:21 ### Properties #### description ```ts description: string | undefined; ``` Defined in: packages/sdk/src/channel-manager/types.ts:23 *** #### hook ```ts hook: Hex | undefined; ``` Defined in: packages/sdk/src/channel-manager/types.ts:25 *** #### metadata ```ts metadata: | MetadataEntry[] | undefined; ``` Defined in: packages/sdk/src/channel-manager/types.ts:24 *** #### name ```ts name: string; ``` Defined in: packages/sdk/src/channel-manager/types.ts:22 *** #### permissions ```ts permissions: ChannelPermissions; ``` Defined in: packages/sdk/src/channel-manager/types.ts:26 [**@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:13 ### Properties #### onChannelUpdate ```ts onChannelUpdate: boolean; ``` Defined in: packages/sdk/src/channel-manager/types.ts:18 *** #### onCommentAdd ```ts onCommentAdd: boolean; ``` Defined in: packages/sdk/src/channel-manager/types.ts:15 *** #### onCommentDelete ```ts onCommentDelete: boolean; ``` Defined in: packages/sdk/src/channel-manager/types.ts:16 *** #### onCommentEdit ```ts onCommentEdit: boolean; ``` Defined in: packages/sdk/src/channel-manager/types.ts:17 *** #### onInitialize ```ts onInitialize: boolean; ``` Defined in: packages/sdk/src/channel-manager/types.ts:14 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/types](/sdk-reference/channel-manager/types/index.mdx) / ContractBasedAssetERCType ## Type Alias: ContractBasedAssetERCType ```ts type ContractBasedAssetERCType = "erc20" | "erc721" | "erc1155" | "unknown"; ``` Defined in: packages/sdk/src/channel-manager/types.ts:183 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/types](/sdk-reference/channel-manager/types/index.mdx) / ContractBasedAssetType ## Type Alias: ContractBasedAssetType ```ts type ContractBasedAssetType = { address: Hex; amount: bigint; type: ContractBasedAssetERCType; }; ``` Defined in: packages/sdk/src/channel-manager/types.ts:188 ### Properties #### address ```ts address: Hex; ``` Defined in: packages/sdk/src/channel-manager/types.ts:190 *** #### amount ```ts amount: bigint; ``` Defined in: packages/sdk/src/channel-manager/types.ts:191 *** #### type ```ts type: ContractBasedAssetERCType; ``` Defined in: packages/sdk/src/channel-manager/types.ts:189 [**@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>; getCommentCreationFee: (args) => Promise>; getHookTransactionFee: (args) => Promise>; ownerOf: (args) => Promise>; }; ``` Defined in: packages/sdk/src/channel-manager/types.ts:99 ### Properties #### channelExists() ```ts channelExists: (args) => Promise>; ``` Defined in: packages/sdk/src/channel-manager/types.ts:110 ##### 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:145 ##### 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:100 ##### 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:118 ##### 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:104 ##### 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"`>> *** #### getCommentCreationFee() ```ts getCommentCreationFee: (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), `"getCommentCreationFee"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"getCommentCreationFee"`>> *** #### getHookTransactionFee() ```ts getHookTransactionFee: (args) => Promise>; ``` Defined in: packages/sdk/src/channel-manager/types.ts:136 ##### 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:114 ##### 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; setCommentCreationFee: (args) => Promise; setHook: (args) => Promise; setHookTransactionFee: (args) => Promise; updateChannel: (args) => Promise; withdrawFees: (args) => Promise; }; ``` Defined in: packages/sdk/src/channel-manager/types.ts:31 ### Properties #### createChannel() ```ts createChannel: (args) => Promise; ``` Defined in: packages/sdk/src/channel-manager/types.ts:32 ##### 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:42 ##### 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:50 ##### 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)> *** #### setCommentCreationFee() ```ts setCommentCreationFee: (args) => Promise; ``` Defined in: packages/sdk/src/channel-manager/types.ts:58 ##### Parameters ##### args `ContractFunctionParameters`\<[`ChannelManagerABIType`](/sdk-reference/channel-manager/types/type-aliases/ChannelManagerABIType.mdx), `"nonpayable"`, `"setCommentCreationFee"`> ##### Returns `Promise`\<[`Hex`](/sdk-reference/core/type-aliases/Hex.mdx)> *** #### setHook() ```ts setHook: (args) => Promise; ``` Defined in: packages/sdk/src/channel-manager/types.ts:66 ##### 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:74 ##### 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:82 ##### 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:90 ##### 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) / [channel-manager/types](/sdk-reference/channel-manager/types/index.mdx) / HookContractReadFunctions ## Type Alias: HookContractReadFunctions ```ts type HookContractReadFunctions = { estimateAddCommentFee: (args) => Promise>; estimateEditCommentFee: (args) => Promise>; }; ``` Defined in: packages/sdk/src/channel-manager/types.ts:158 ### Properties #### estimateAddCommentFee() ```ts estimateAddCommentFee: (args) => Promise>; ``` Defined in: packages/sdk/src/channel-manager/types.ts:159 ##### Parameters ##### args `ReadContractParameters`\<[`BaseHookABIType`](/sdk-reference/channel-manager/types/type-aliases/BaseHookABIType.mdx), `"estimateAddCommentFee"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`BaseHookABIType`](/sdk-reference/channel-manager/types/type-aliases/BaseHookABIType.mdx), `"estimateAddCommentFee"`>> *** #### estimateEditCommentFee() ```ts estimateEditCommentFee: (args) => Promise>; ``` Defined in: packages/sdk/src/channel-manager/types.ts:165 ##### Parameters ##### args `ReadContractParameters`\<[`BaseHookABIType`](/sdk-reference/channel-manager/types/type-aliases/BaseHookABIType.mdx), `"estimateEditCommentFee"`> ##### Returns `Promise`\<`ReadContractReturnType`\<[`BaseHookABIType`](/sdk-reference/channel-manager/types/type-aliases/BaseHookABIType.mdx), `"estimateEditCommentFee"`>> [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/types](/sdk-reference/channel-manager/types/index.mdx) / HookFeeEstimation ## Type Alias: HookFeeEstimation ```ts type HookFeeEstimation = { amount: bigint; asset: Hex; description: string; hook: Hex; metadata: readonly MetadataEntry[]; }; ``` Defined in: packages/sdk/src/channel-manager/types.ts:175 HookFeeEstimation struct returned from hook fee estimator functions ### Properties #### amount ```ts amount: bigint; ``` Defined in: packages/sdk/src/channel-manager/types.ts:176 *** #### asset ```ts asset: Hex; ``` Defined in: packages/sdk/src/channel-manager/types.ts:177 *** #### description ```ts description: string; ``` Defined in: packages/sdk/src/channel-manager/types.ts:178 *** #### hook ```ts hook: Hex; ``` Defined in: packages/sdk/src/channel-manager/types.ts:180 *** #### metadata ```ts metadata: readonly MetadataEntry[]; ``` Defined in: packages/sdk/src/channel-manager/types.ts:179 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [channel-manager/types](/sdk-reference/channel-manager/types/index.mdx) / TotalFeeEstimation ## Type Alias: TotalFeeEstimation ```ts type TotalFeeEstimation = { baseToken: { amount: bigint; }; contractAsset?: ContractBasedAssetType; description: string; hook: Hex; metadata: readonly MetadataEntry[]; }; ``` Defined in: packages/sdk/src/channel-manager/types.ts:194 ### Properties #### baseToken ```ts baseToken: { amount: bigint; }; ``` Defined in: packages/sdk/src/channel-manager/types.ts:198 The amount of the base token to be paid ##### amount ```ts amount: bigint; ``` *** #### contractAsset? ```ts optional contractAsset: ContractBasedAssetType; ``` Defined in: packages/sdk/src/channel-manager/types.ts:204 The contract based asset to be paid, such as ERC20, ERC721, ERC1155 *** #### description ```ts description: string; ``` Defined in: packages/sdk/src/channel-manager/types.ts:208 The description of the fee *** #### hook ```ts hook: Hex; ``` Defined in: packages/sdk/src/channel-manager/types.ts:216 The hook address to be paid *** #### metadata ```ts metadata: readonly MetadataEntry[]; ``` Defined in: packages/sdk/src/channel-manager/types.ts:212 The metadata of the fee estimation [**@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`: `` `address[${string}]` ``]: `undefined`; \[`key`: `` `bool[${string}]` ``]: `undefined`; \[`key`: `` `string[${string}]` ``]: `undefined`; \[`key`: `` `bytes[${string}]` ``]: `undefined`; \[`key`: `` `int[${string}]` ``]: `undefined`; \[`key`: `` `uint[${string}]` ``]: `undefined`; \[`key`: `` `function[${string}]` ``]: `undefined`; \[`key`: `` `bytes32[${string}]` ``]: `undefined`; \[`key`: `` `uint256[${string}]` ``]: `undefined`; \[`key`: `` `uint8[${string}]` ``]: `undefined`; \[`key`: `` `uint88[${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`: `` `bytes22[${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`: `` `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`: `` `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`: `` `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`: `` `address[${string}]` ``]: `undefined`; \[`key`: `` `bool[${string}]` ``]: `undefined`; \[`key`: `` `string[${string}]` ``]: `undefined`; \[`key`: `` `bytes[${string}]` ``]: `undefined`; \[`key`: `` `int[${string}]` ``]: `undefined`; \[`key`: `` `uint[${string}]` ``]: `undefined`; \[`key`: `` `function[${string}]` ``]: `undefined`; \[`key`: `` `bytes32[${string}]` ``]: `undefined`; \[`key`: `` `uint256[${string}]` ``]: `undefined`; \[`key`: `` `uint8[${string}]` ``]: `undefined`; \[`key`: `` `uint88[${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`: `` `bytes22[${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`: `` `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`: `` `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`: `` `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 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / InvalidEventError ## Class: InvalidEventError Defined in: packages/sdk/src/indexer/webhooks/utils.ts:205 Thrown when the event is invalid. ### Extends * `Error` ### Constructors #### Constructor ```ts new InvalidEventError(details): InvalidEventError; ``` Defined in: packages/sdk/src/indexer/webhooks/utils.ts:208 ##### Parameters ##### details `ZodIssue`\[] ##### Returns `InvalidEventError` ##### Overrides ```ts Error.constructor ``` ### Properties #### cause? ```ts optional cause: unknown; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es2022.error.d.ts:26 ##### Inherited from ```ts Error.cause ``` *** #### details ```ts readonly details: ZodIssue[]; ``` Defined in: packages/sdk/src/indexer/webhooks/utils.ts:206 *** #### message ```ts message: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1077 ##### Inherited from ```ts Error.message ``` *** #### name ```ts name: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1076 ##### Inherited from ```ts Error.name ``` *** #### stack? ```ts optional stack: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1078 ##### Inherited from ```ts Error.stack ``` *** #### stackTraceLimit ```ts static stackTraceLimit: number; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:68 The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`). The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed. If set to a non-number value, or set to a negative number, stack traces will not capture any frames. ##### Inherited from ```ts Error.stackTraceLimit ``` ### Methods #### captureStackTrace() ```ts static captureStackTrace(targetObject, constructorOpt?): void; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:52 Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called. ```js const myObject = {}; Error.captureStackTrace(myObject); myObject.stack; // Similar to `new Error().stack` ``` The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`. The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace. The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance: ```js function a() { b(); } function b() { c(); } function c() { // Create an error without stack trace to avoid calculating the stack trace twice. const { stackTraceLimit } = Error; Error.stackTraceLimit = 0; const error = new Error(); Error.stackTraceLimit = stackTraceLimit; // Capture the stack trace above function b Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace throw error; } a(); ``` ##### Parameters ##### targetObject `object` ##### constructorOpt? `Function` ##### Returns `void` ##### Inherited from ```ts Error.captureStackTrace ``` *** #### prepareStackTrace() ```ts static prepareStackTrace(err, stackTraces): any; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:56 ##### Parameters ##### err `Error` ##### stackTraces `CallSite`\[] ##### Returns `any` ##### See [https://v8.dev/docs/stack-trace-api#customizing-stack-traces](https://v8.dev/docs/stack-trace-api#customizing-stack-traces) ##### Inherited from ```ts Error.prepareStackTrace ``` [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / InvalidEventSignatureError ## Class: InvalidEventSignatureError Defined in: packages/sdk/src/indexer/webhooks/utils.ts:179 Thrown when the event signature is invalid. ### Extends * `Error` ### Constructors #### Constructor ```ts new InvalidEventSignatureError(): InvalidEventSignatureError; ``` Defined in: packages/sdk/src/indexer/webhooks/utils.ts:180 ##### Returns `InvalidEventSignatureError` ##### Overrides ```ts Error.constructor ``` ### Properties #### cause? ```ts optional cause: unknown; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es2022.error.d.ts:26 ##### Inherited from ```ts Error.cause ``` *** #### message ```ts message: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1077 ##### Inherited from ```ts Error.message ``` *** #### name ```ts name: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1076 ##### Inherited from ```ts Error.name ``` *** #### stack? ```ts optional stack: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1078 ##### Inherited from ```ts Error.stack ``` *** #### stackTraceLimit ```ts static stackTraceLimit: number; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:68 The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`). The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed. If set to a non-number value, or set to a negative number, stack traces will not capture any frames. ##### Inherited from ```ts Error.stackTraceLimit ``` ### Methods #### captureStackTrace() ```ts static captureStackTrace(targetObject, constructorOpt?): void; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:52 Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called. ```js const myObject = {}; Error.captureStackTrace(myObject); myObject.stack; // Similar to `new Error().stack` ``` The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`. The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace. The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance: ```js function a() { b(); } function b() { c(); } function c() { // Create an error without stack trace to avoid calculating the stack trace twice. const { stackTraceLimit } = Error; Error.stackTraceLimit = 0; const error = new Error(); Error.stackTraceLimit = stackTraceLimit; // Capture the stack trace above function b Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace throw error; } a(); ``` ##### Parameters ##### targetObject `object` ##### constructorOpt? `Function` ##### Returns `void` ##### Inherited from ```ts Error.captureStackTrace ``` *** #### prepareStackTrace() ```ts static prepareStackTrace(err, stackTraces): any; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:56 ##### Parameters ##### err `Error` ##### stackTraces `CallSite`\[] ##### Returns `any` ##### See [https://v8.dev/docs/stack-trace-api#customizing-stack-traces](https://v8.dev/docs/stack-trace-api#customizing-stack-traces) ##### Inherited from ```ts Error.prepareStackTrace ``` [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / InvalidRequestBodyError ## Class: InvalidRequestBodyError Defined in: packages/sdk/src/indexer/webhooks/utils.ts:188 Thrown when the request body is not valid JSON object. ### Extends * `Error` ### Constructors #### Constructor ```ts new InvalidRequestBodyError(details): InvalidRequestBodyError; ``` Defined in: packages/sdk/src/indexer/webhooks/utils.ts:191 ##### Parameters ##### details `ZodIssue`\[] ##### Returns `InvalidRequestBodyError` ##### Overrides ```ts Error.constructor ``` ### Properties #### cause? ```ts optional cause: unknown; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es2022.error.d.ts:26 ##### Inherited from ```ts Error.cause ``` *** #### details ```ts readonly details: ZodIssue[]; ``` Defined in: packages/sdk/src/indexer/webhooks/utils.ts:189 *** #### message ```ts message: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1077 ##### Inherited from ```ts Error.message ``` *** #### name ```ts name: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1076 ##### Inherited from ```ts Error.name ``` *** #### stack? ```ts optional stack: string; ``` Defined in: node\_modules/.pnpm/typescript\@5.8.3/node\_modules/typescript/lib/lib.es5.d.ts:1078 ##### Inherited from ```ts Error.stack ``` *** #### stackTraceLimit ```ts static stackTraceLimit: number; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:68 The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`). The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed. If set to a non-number value, or set to a negative number, stack traces will not capture any frames. ##### Inherited from ```ts Error.stackTraceLimit ``` ### Methods #### captureStackTrace() ```ts static captureStackTrace(targetObject, constructorOpt?): void; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:52 Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called. ```js const myObject = {}; Error.captureStackTrace(myObject); myObject.stack; // Similar to `new Error().stack` ``` The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`. The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace. The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance: ```js function a() { b(); } function b() { c(); } function c() { // Create an error without stack trace to avoid calculating the stack trace twice. const { stackTraceLimit } = Error; Error.stackTraceLimit = 0; const error = new Error(); Error.stackTraceLimit = stackTraceLimit; // Capture the stack trace above function b Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace throw error; } a(); ``` ##### Parameters ##### targetObject `object` ##### constructorOpt? `Function` ##### Returns `void` ##### Inherited from ```ts Error.captureStackTrace ``` *** #### prepareStackTrace() ```ts static prepareStackTrace(err, stackTraces): any; ``` Defined in: node\_modules/.pnpm/@types+node\@22.19.1/node\_modules/@types/node/globals.d.ts:56 ##### Parameters ##### err `Error` ##### stackTraces `CallSite`\[] ##### Returns `any` ##### See [https://v8.dev/docs/stack-trace-api#customizing-stack-traces](https://v8.dev/docs/stack-trace-api#customizing-stack-traces) ##### Inherited from ```ts Error.prepareStackTrace ``` [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / constructEvent ## Function: constructEvent() ```ts function constructEvent(options): | { blockNumber: bigint; chainId: number; data: { comment: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: Date; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: Date; }; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; event: "comment:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { comment: { hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; updatedAt: Date; }; hookMetadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; event: "comment:hook:metadata:set"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { comment: { deletedAt: Date; id: `0x${string}`; updatedAt: Date; }; }; event: "comment:deleted"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { comment: { content: string; id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; updatedAt: Date; }; }; event: "comment:edited"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { data: { comment: { id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; }; }; event: "comment:moderation:status:updated"; uid: string; version: 1; } | { data: { comment: { id: `0x${string}`; reactionCounts: Record; }; }; event: "comment:reactions:updated"; uid: string; version: 1; } | { data: { comment: { id: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; referencesResolutionStatus: "pending" | "partial" | "success" | "failed"; referencesResolutionStatusChangedAt: Date; }; }; event: "comment:references:updated"; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { channel: { 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; }; }; event: "channel:created"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { channel: { description: string; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; updatedAt: Date; }; }; event: "channel:updated"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { channel: { hook: null | `0x${string}`; id: bigint; updatedAt: Date; }; hook: { address: `0x${string}`; enabled: boolean; }; }; event: "channel:hook:status:updated"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { channel: { id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; updatedAt: Date; }; metadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; event: "channel:metadata:set"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { channel: { id: bigint; owner: `0x${string}`; updatedAt: Date; }; from: `0x${string}`; to: `0x${string}`; }; event: "channel:transferred"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 2; } | { blockNumber: bigint; chainId: number; data: { approval: { id: string; }; }; event: "approval:removed"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; event: "approval:expired"; uid: string; version: 1; } | { appId: string; data: { message: string; }; event: "test"; uid: string; version: 1; webhookId: string; }; ``` Defined in: packages/sdk/src/indexer/webhooks/utils.ts:70 Constructs an event from the request body, signature, and timestamp. ### Parameters #### options The options for constructing the event. ##### appSecret `string` = `...` The app secret key. ##### requestBody `string` = `...` The request body. ##### requestSignature `string` = `...` The signature from X-ECP-Webhook-Signature header. ##### requestTimestamp `string` | `number` = `...` The timestamp from X-ECP-Webhook-Timestamp header. ### Returns ```ts { blockNumber: bigint; chainId: number; data: { comment: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: Date; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: Date; }; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; event: "comment:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { comment: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: Date; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: Date; }; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; ``` Data of the event ##### data.comment ```ts comment: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: Date; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: Date; }; ``` Comment data ##### Type declaration ```ts { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: Date; } ``` ```ts { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: Date; } ``` ##### data.zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` ZeroEx swap data #### event ```ts event: "comment:added"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { comment: { hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; updatedAt: Date; }; hookMetadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; event: "comment:hook:metadata:set"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { comment: { hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; updatedAt: Date; }; hookMetadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; ``` Data of the event ##### data.comment ```ts comment: { hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; updatedAt: Date; }; ``` Updated comment data ##### data.comment.hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = MetadataArraySchema; ``` Hook metadata. On wire it is a ISO 8601 date and time string. ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ID of the comment ##### data.comment.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string. ##### data.hookMetadataOperation ```ts hookMetadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; } = MetadataSetOperationSchema; ``` Hook metadata operation #### event ```ts event: "comment:hook:metadata:set"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { comment: { deletedAt: Date; id: `0x${string}`; updatedAt: Date; }; }; event: "comment:deleted"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { comment: { deletedAt: Date; id: `0x${string}`; updatedAt: Date; }; }; ``` Data of the event ##### data.comment ```ts comment: { deletedAt: Date; id: `0x${string}`; updatedAt: Date; }; ``` Updated comment data ##### data.comment.deletedAt ```ts deletedAt: Date = ISO8601DateSchema; ``` Deleted at date. On wire it is a ISO 8601 date and time string ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ID of the comment ##### data.comment.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string #### event ```ts event: "comment:deleted"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { comment: { content: string; id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; updatedAt: Date; }; }; event: "comment:edited"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { comment: { content: string; id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; updatedAt: Date; }; }; ``` Data of the event ##### data.comment ```ts comment: { content: string; id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; updatedAt: Date; }; ``` Updated comment data ##### data.comment.content ```ts content: string; ``` Content of the comment ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ID of the comment ##### data.comment.moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = CommentModerationStatusSchema; ``` Moderation status of the comment ##### data.comment.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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[] = IndexerAPICommentReferencesSchema; ``` References of the comment ##### data.comment.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string #### event ```ts event: "comment:edited"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { data: { comment: { id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; }; }; event: "comment:moderation:status:updated"; uid: string; version: 1; } ``` #### data ```ts data: { comment: { id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; }; }; ``` Data of the event ##### data.comment ```ts comment: { id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; }; ``` Updated comment data ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ID of the comment ##### data.comment.moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = CommentModerationStatusSchema; ``` Moderation status of the comment ##### data.comment.moderationStatusChangedAt ```ts moderationStatusChangedAt: Date = ISO8601DateSchema; ``` Moderation status changed at date. On wire it is a ISO 8601 date and time string #### event ```ts event: "comment:moderation:status:updated"; ``` Event type #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { data: { comment: { id: `0x${string}`; reactionCounts: Record; }; }; event: "comment:reactions:updated"; uid: string; version: 1; } ``` #### data ```ts data: { comment: { id: `0x${string}`; reactionCounts: Record; }; }; ``` Data of the event ##### data.comment ```ts comment: { id: `0x${string}`; reactionCounts: Record; }; ``` Updated comment data ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ID of the comment ##### data.comment.reactionCounts ```ts reactionCounts: Record; ``` Reaction counts #### event ```ts event: "comment:reactions:updated"; ``` Event type #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { data: { comment: { id: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; referencesResolutionStatus: "pending" | "partial" | "success" | "failed"; referencesResolutionStatusChangedAt: Date; }; }; event: "comment:references:updated"; uid: string; version: 1; } ``` #### data ```ts data: { comment: { id: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; referencesResolutionStatus: "pending" | "partial" | "success" | "failed"; referencesResolutionStatusChangedAt: Date; }; }; ``` ##### data.comment ```ts comment: { id: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; referencesResolutionStatus: "pending" | "partial" | "success" | "failed"; referencesResolutionStatusChangedAt: Date; }; ``` ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ##### data.comment.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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[] = IndexerAPICommentReferencesSchema; ``` ##### data.comment.referencesResolutionStatus ```ts referencesResolutionStatus: "pending" | "partial" | "success" | "failed"; ``` ##### data.comment.referencesResolutionStatusChangedAt ```ts referencesResolutionStatusChangedAt: Date = ISO8601DateSchema; ``` #### event ```ts event: "comment:references:updated"; ``` #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { channel: { 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; }; }; event: "channel:created"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { channel: { 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; }; }; ``` Data of the event ##### data.channel ```ts channel: { 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; }; ``` ##### data.channel.chainId ```ts chainId: number; ``` Chain ID where the channel was created ##### data.channel.createdAt ```ts createdAt: Date = ISO8601DateSchema; ``` Created at date. On wire it is a ISO 8601 date and time string. ##### data.channel.description ```ts description: string; ``` Description of the channel ##### data.channel.hook ```ts hook: null | `0x${string}`; ``` Hook address ##### data.channel.id ```ts id: bigint = StringBigintSchema; ``` ID of the channel. On wire it is a stringified bigint. ##### data.channel.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = MetadataArraySchema; ``` Metadata of the channel ##### data.channel.name ```ts name: string; ``` Name of the channel ##### data.channel.owner ```ts owner: `0x${string}` = HexSchema; ``` Owner address ##### data.channel.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string. #### event ```ts event: "channel:created"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { channel: { description: string; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; updatedAt: Date; }; }; event: "channel:updated"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { channel: { description: string; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; updatedAt: Date; }; }; ``` Data of the event ##### data.channel ```ts channel: { description: string; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; updatedAt: Date; }; ``` Updated channel data ##### data.channel.description ```ts description: string; ``` Description of the channel ##### data.channel.id ```ts id: bigint = StringBigintSchema; ``` ID of the channel ##### data.channel.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = MetadataArraySchema; ``` Metadata of the channel ##### data.channel.name ```ts name: string; ``` Name of the channel ##### data.channel.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date #### event ```ts event: "channel:updated"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { channel: { hook: null | `0x${string}`; id: bigint; updatedAt: Date; }; hook: { address: `0x${string}`; enabled: boolean; }; }; event: "channel:hook:status:updated"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { channel: { hook: null | `0x${string}`; id: bigint; updatedAt: Date; }; hook: { address: `0x${string}`; enabled: boolean; }; }; ``` Data of the event ##### data.channel ```ts channel: { hook: null | `0x${string}`; id: bigint; updatedAt: Date; }; ``` Updated channel data ##### data.channel.hook ```ts hook: null | `0x${string}`; ``` Hook address ##### data.channel.id ```ts id: bigint = StringBigintSchema; ``` ID of the channel ##### data.channel.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date ##### data.hook ```ts hook: { address: `0x${string}`; enabled: boolean; }; ``` Updated hook data ##### data.hook.address ```ts address: `0x${string}` = HexSchema; ``` Address of the hook ##### data.hook.enabled ```ts enabled: boolean; ``` Enabled status #### event ```ts event: "channel:hook:status:updated"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { channel: { id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; updatedAt: Date; }; metadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; event: "channel:metadata:set"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { channel: { id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; updatedAt: Date; }; metadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; ``` Data of the event ##### data.channel ```ts channel: { id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; updatedAt: Date; }; ``` Updated channel data ##### data.channel.id ```ts id: bigint = StringBigintSchema; ``` ID of the channel ##### data.channel.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = MetadataArraySchema; ``` Metadata of the channel ##### data.channel.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date ##### data.metadataOperation ```ts metadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; } = MetadataSetOperationSchema; ``` Metadata operation #### event ```ts event: "channel:metadata:set"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { channel: { id: bigint; owner: `0x${string}`; updatedAt: Date; }; from: `0x${string}`; to: `0x${string}`; }; event: "channel:transferred"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { channel: { id: bigint; owner: `0x${string}`; updatedAt: Date; }; from: `0x${string}`; to: `0x${string}`; }; ``` Data of the event ##### data.channel ```ts channel: { id: bigint; owner: `0x${string}`; updatedAt: Date; }; ``` Updated channel data ##### data.channel.id ```ts id: bigint = StringBigintSchema; ``` ID of the channel ##### data.channel.owner ```ts owner: `0x${string}` = HexSchema; ``` Owner address ##### data.channel.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date ##### data.from ```ts from: `0x${string}` = HexSchema; ``` From address ##### data.to ```ts to: `0x${string}` = HexSchema; ``` To address #### event ```ts event: "channel:transferred"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }; }; ``` Data of the event ##### data.approval ```ts approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }; ``` Approval data ##### data.approval.app ```ts app: `0x${string}` = HexSchema; ``` App address ##### data.approval.author ```ts author: `0x${string}` = HexSchema; ``` Author address ##### data.approval.createdAt ```ts createdAt: Date = ISO8601DateSchema; ``` Created at date. On wire it is a ISO 8601 date and time string. ##### data.approval.id ```ts id: string; ``` ID of the approval ##### data.approval.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string. #### event ```ts event: "approval:added"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 2; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; ``` Data of the event ##### data.approval ```ts approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; ``` Approval data ##### data.approval.app ```ts app: `0x${string}` = HexSchema; ``` App address ##### data.approval.author ```ts author: `0x${string}` = HexSchema; ``` Author address ##### data.approval.createdAt ```ts createdAt: Date = ISO8601DateSchema; ``` Created at date. On wire it is a ISO 8601 date and time string. ##### data.approval.expiresAt ```ts expiresAt: Date = ISO8601DateSchema; ``` Expires at date. On wire it is a ISO 8601 date and time string. ##### data.approval.id ```ts id: string; ``` ID of the approval ##### data.approval.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string. #### event ```ts event: "approval:added"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 2; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { approval: { id: string; }; }; event: "approval:removed"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { approval: { id: string; }; }; ``` Data of the event ##### data.approval ```ts approval: { id: string; }; ``` Approval data ##### data.approval.id ```ts id: string; ``` ID of the approval that was removed #### event ```ts event: "approval:removed"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; event: "approval:expired"; uid: string; version: 1; } ``` #### chainId ```ts chainId: number; ``` Chain ID where the approval exists #### data ```ts data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; ``` Data of the event ##### data.approval ```ts approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; ``` Approval data ##### data.approval.app ```ts app: `0x${string}` = HexSchema; ``` App address ##### data.approval.author ```ts author: `0x${string}` = HexSchema; ``` Author address of the approval ##### data.approval.createdAt ```ts createdAt: Date = ISO8601DateSchema; ``` Created at date. On wire it is a ISO 8601 date and time string. ##### data.approval.expiresAt ```ts expiresAt: Date = ISO8601DateSchema; ``` Expires at date. On wire it is a ISO 8601 date and time string. ##### data.approval.id ```ts id: string; ``` ID of the approval that expired ##### data.approval.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string. #### event ```ts event: "approval:expired"; ``` Event type #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { appId: string; data: { message: string; }; event: "test"; uid: string; version: 1; webhookId: string; } ``` #### appId ```ts appId: string; ``` App ID #### data ```ts data: { message: string; }; ``` Data of the event ##### data.message ```ts message: string; ``` Message #### event ```ts event: "test"; ``` Event type #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event #### webhookId ```ts webhookId: string; ``` Webhook ID The event. ### Example ```json import { constructEvent } from "@ecp.eth/sdk/indexer/webhooks"; export async function POST(request: Request) { const event = constructEvent({ appSecret: process.env.APP_SECRET, requestBody: await request.text(), requestSignature: request.headers.get("x-ecp-webhook-signature"), requestTimestamp: request.headers.get("x-ecp-webhook-timestamp"), }); // ... } ``` ### Throws If the event signature is invalid. ### Throws If the request body is not valid JSON object. ### Throws If the event is invalid. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / constructEventFromRequest ## Function: constructEventFromRequest() ```ts function constructEventFromRequest(options): Promise< | { blockNumber: bigint; chainId: number; data: { comment: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: Date; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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; mediaType: 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; } | { dimension?: { height: ...; width: ...; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: ...[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: Date; }; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; event: "comment:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { comment: { hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; updatedAt: Date; }; hookMetadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; event: "comment:hook:metadata:set"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { comment: { deletedAt: Date; id: `0x${string}`; updatedAt: Date; }; }; event: "comment:deleted"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { comment: { content: string; id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; updatedAt: Date; }; }; event: "comment:edited"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { data: { comment: { id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; }; }; event: "comment:moderation:status:updated"; uid: string; version: 1; } | { data: { comment: { id: `0x${string}`; reactionCounts: Record; }; }; event: "comment:reactions:updated"; uid: string; version: 1; } | { data: { comment: { id: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; referencesResolutionStatus: "pending" | "partial" | "success" | "failed"; referencesResolutionStatusChangedAt: Date; }; }; event: "comment:references:updated"; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { channel: { 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; }; }; event: "channel:created"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { channel: { description: string; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; updatedAt: Date; }; }; event: "channel:updated"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { channel: { hook: null | `0x${string}`; id: bigint; updatedAt: Date; }; hook: { address: `0x${string}`; enabled: boolean; }; }; event: "channel:hook:status:updated"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { channel: { id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; updatedAt: Date; }; metadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; event: "channel:metadata:set"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { channel: { id: bigint; owner: `0x${string}`; updatedAt: Date; }; from: `0x${string}`; to: `0x${string}`; }; event: "channel:transferred"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 2; } | { blockNumber: bigint; chainId: number; data: { approval: { id: string; }; }; event: "approval:removed"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; event: "approval:expired"; uid: string; version: 1; } | { appId: string; data: { message: string; }; event: "test"; uid: string; version: 1; webhookId: string; }>; ``` Defined in: packages/sdk/src/indexer/webhooks/utils.ts:152 Constructs an event from a request. ### Parameters #### options ##### appSecret `string` = `...` The app secret key. ##### request `Request` = `...` The request to construct the event from. ### Returns `Promise`\< \| \{ `blockNumber`: `bigint`; `chainId`: `number`; `data`: \{ `comment`: | \{ `app`: `` `0x${string}` ``; `author`: `` `0x${string}` ``; `channelId`: `bigint`; `commentType`: `number`; `content`: `string`; `createdAt`: `Date`; `id`: `` `0x${string}` ``; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `moderationStatus`: `"approved"` | `"pending"` | `"rejected"`; `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`; `mediaType`: `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`; } \| \{ `dimension?`: \{ `height`: ...; `width`: ...; }; `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"video"`; `url`: `string`; `videoTracks?`: ...\[]; } \| \{ `chainId`: `number`; `id`: `` `0x${string}` ``; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"quoted_comment"`; })\[]; `targetUri`: `string`; `type`: `"root"`; `updatedAt`: `Date`; } \| \{ `app`: `` `0x${string}` ``; `author`: `` `0x${string}` ``; `channelId`: `bigint`; `commentType`: `number`; `content`: `string`; `createdAt`: `Date`; `id`: `` `0x${string}` ``; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `moderationStatus`: `"approved"` | `"pending"` | `"rejected"`; `parentId`: `` `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`; `mediaType`: `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`; } \| \{ `dimension?`: \{ `height`: ...; `width`: ...; }; `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"video"`; `url`: `string`; `videoTracks?`: ...\[]; } \| \{ `chainId`: `number`; `id`: `` `0x${string}` ``; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"quoted_comment"`; })\[]; `type`: `"reply"`; `updatedAt`: `Date`; }; `zeroExSwap`: | `null` \| \{ `from`: \{ `address`: `` `0x${string}` ``; `amount`: `string`; `symbol`: `string`; }; `to`: \{ `address`: `""` | `` `0x${string}` ``; `amount`: `string`; `symbol`: `string`; }; }; }; `event`: `"comment:added"`; `logIndex`: `number`; `txHash`: `` `0x${string}` ``; `uid`: `string`; `version`: `1`; } \| \{ `blockNumber`: `bigint`; `chainId`: `number`; `data`: \{ `comment`: \{ `hookMetadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `id`: `` `0x${string}` ``; `updatedAt`: `Date`; }; `hookMetadataOperation`: | \{ `key`: `` `0x${string}` ``; `type`: `"delete"`; } \| \{ `key`: `` `0x${string}` ``; `type`: `"create"`; `value`: `` `0x${string}` ``; } \| \{ `key`: `` `0x${string}` ``; `type`: `"update"`; `value`: `` `0x${string}` ``; }; }; `event`: `"comment:hook:metadata:set"`; `logIndex`: `number`; `txHash`: `` `0x${string}` ``; `uid`: `string`; `version`: `1`; } \| \{ `blockNumber`: `bigint`; `chainId`: `number`; `data`: \{ `comment`: \{ `deletedAt`: `Date`; `id`: `` `0x${string}` ``; `updatedAt`: `Date`; }; }; `event`: `"comment:deleted"`; `logIndex`: `number`; `txHash`: `` `0x${string}` ``; `uid`: `string`; `version`: `1`; } \| \{ `blockNumber`: `bigint`; `chainId`: `number`; `data`: \{ `comment`: \{ `content`: `string`; `id`: `` `0x${string}` ``; `moderationStatus`: `"approved"` | `"pending"` | `"rejected"`; `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`; `mediaType`: `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`; } \| \{ `dimension?`: \{ `height`: `number`; `width`: `number`; }; `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"video"`; `url`: `string`; `videoTracks?`: \{ `codec?`: ...; `dimension`: ...; }\[]; } \| \{ `chainId`: `number`; `id`: `` `0x${string}` ``; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"quoted_comment"`; })\[]; `updatedAt`: `Date`; }; }; `event`: `"comment:edited"`; `logIndex`: `number`; `txHash`: `` `0x${string}` ``; `uid`: `string`; `version`: `1`; } \| \{ `data`: \{ `comment`: \{ `id`: `` `0x${string}` ``; `moderationStatus`: `"approved"` | `"pending"` | `"rejected"`; `moderationStatusChangedAt`: `Date`; }; }; `event`: `"comment:moderation:status:updated"`; `uid`: `string`; `version`: `1`; } \| \{ `data`: \{ `comment`: \{ `id`: `` `0x${string}` ``; `reactionCounts`: `Record`\<`string`, `number`>; }; }; `event`: `"comment:reactions:updated"`; `uid`: `string`; `version`: `1`; } \| \{ `data`: \{ `comment`: \{ `id`: `` `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`; `mediaType`: `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`; } \| \{ `dimension?`: \{ `height`: `number`; `width`: `number`; }; `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"image"`; `url`: `string`; } \| \{ `mediaType`: `string`; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"video"`; `url`: `string`; `videoTracks?`: \{ `codec?`: ...; `dimension`: ...; }\[]; } \| \{ `chainId`: `number`; `id`: `` `0x${string}` ``; `position`: \{ `end`: `number`; `start`: `number`; }; `type`: `"quoted_comment"`; })\[]; `referencesResolutionStatus`: `"pending"` | `"partial"` | `"success"` | `"failed"`; `referencesResolutionStatusChangedAt`: `Date`; }; }; `event`: `"comment:references:updated"`; `uid`: `string`; `version`: `1`; } \| \{ `blockNumber`: `bigint`; `chainId`: `number`; `data`: \{ `channel`: \{ `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`; }; }; `event`: `"channel:created"`; `logIndex`: `number`; `txHash`: `` `0x${string}` ``; `uid`: `string`; `version`: `1`; } \| \{ `blockNumber`: `bigint`; `chainId`: `number`; `data`: \{ `channel`: \{ `description`: `string`; `id`: `bigint`; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `name`: `string`; `updatedAt`: `Date`; }; }; `event`: `"channel:updated"`; `logIndex`: `number`; `txHash`: `` `0x${string}` ``; `uid`: `string`; `version`: `1`; } \| \{ `blockNumber`: `bigint`; `chainId`: `number`; `data`: \{ `channel`: \{ `hook`: `null` | `` `0x${string}` ``; `id`: `bigint`; `updatedAt`: `Date`; }; `hook`: \{ `address`: `` `0x${string}` ``; `enabled`: `boolean`; }; }; `event`: `"channel:hook:status:updated"`; `logIndex`: `number`; `txHash`: `` `0x${string}` ``; `uid`: `string`; `version`: `1`; } \| \{ `blockNumber`: `bigint`; `chainId`: `number`; `data`: \{ `channel`: \{ `id`: `bigint`; `metadata`: \{ `key`: `` `0x${string}` ``; `value`: `` `0x${string}` ``; }\[]; `updatedAt`: `Date`; }; `metadataOperation`: | \{ `key`: `` `0x${string}` ``; `type`: `"delete"`; } \| \{ `key`: `` `0x${string}` ``; `type`: `"create"`; `value`: `` `0x${string}` ``; } \| \{ `key`: `` `0x${string}` ``; `type`: `"update"`; `value`: `` `0x${string}` ``; }; }; `event`: `"channel:metadata:set"`; `logIndex`: `number`; `txHash`: `` `0x${string}` ``; `uid`: `string`; `version`: `1`; } \| \{ `blockNumber`: `bigint`; `chainId`: `number`; `data`: \{ `channel`: \{ `id`: `bigint`; `owner`: `` `0x${string}` ``; `updatedAt`: `Date`; }; `from`: `` `0x${string}` ``; `to`: `` `0x${string}` ``; }; `event`: `"channel:transferred"`; `logIndex`: `number`; `txHash`: `` `0x${string}` ``; `uid`: `string`; `version`: `1`; } \| \{ `blockNumber`: `bigint`; `chainId`: `number`; `data`: \{ `approval`: \{ `app`: `` `0x${string}` ``; `author`: `` `0x${string}` ``; `createdAt`: `Date`; `id`: `string`; `updatedAt`: `Date`; }; }; `event`: `"approval:added"`; `logIndex`: `number`; `txHash`: `` `0x${string}` ``; `uid`: `string`; `version`: `1`; } \| \{ `blockNumber`: `bigint`; `chainId`: `number`; `data`: \{ `approval`: \{ `app`: `` `0x${string}` ``; `author`: `` `0x${string}` ``; `createdAt`: `Date`; `expiresAt`: `Date`; `id`: `string`; `updatedAt`: `Date`; }; }; `event`: `"approval:added"`; `logIndex`: `number`; `txHash`: `` `0x${string}` ``; `uid`: `string`; `version`: `2`; } \| \{ `blockNumber`: `bigint`; `chainId`: `number`; `data`: \{ `approval`: \{ `id`: `string`; }; }; `event`: `"approval:removed"`; `logIndex`: `number`; `txHash`: `` `0x${string}` ``; `uid`: `string`; `version`: `1`; } \| \{ `chainId`: `number`; `data`: \{ `approval`: \{ `app`: `` `0x${string}` ``; `author`: `` `0x${string}` ``; `createdAt`: `Date`; `expiresAt`: `Date`; `id`: `string`; `updatedAt`: `Date`; }; }; `event`: `"approval:expired"`; `uid`: `string`; `version`: `1`; } \| \{ `appId`: `string`; `data`: \{ `message`: `string`; }; `event`: `"test"`; `uid`: `string`; `version`: `1`; `webhookId`: `string`; }> The event. ### Example ```json import { constructEventFromRequest } from "@ecp.eth/sdk/indexer/webhooks"; export async function POST(request: Request) { const event = await constructEventFromRequest(request); console.log(event); // ... } ``` ### Throws If the event signature is invalid. ### Throws If the request body is not valid JSON object. ### Throws If the event is invalid. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ApprovalAddedEvent ## Type Alias: ApprovalAddedEvent ```ts type ApprovalAddedEvent = | { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 2; }; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/approval.ts:123 An event sent to webhook when an approval is added ### Type declaration ```ts { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }; }; ``` Data of the event ##### data.approval ```ts approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }; ``` Approval data ##### data.approval.app ```ts app: `0x${string}` = HexSchema; ``` App address ##### data.approval.author ```ts author: `0x${string}` = HexSchema; ``` Author address ##### data.approval.createdAt ```ts createdAt: Date = ISO8601DateSchema; ``` Created at date. On wire it is a ISO 8601 date and time string. ##### data.approval.id ```ts id: string; ``` ID of the approval ##### data.approval.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string. #### event ```ts event: "approval:added"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 2; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; ``` Data of the event ##### data.approval ```ts approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; ``` Approval data ##### data.approval.app ```ts app: `0x${string}` = HexSchema; ``` App address ##### data.approval.author ```ts author: `0x${string}` = HexSchema; ``` Author address ##### data.approval.createdAt ```ts createdAt: Date = ISO8601DateSchema; ``` Created at date. On wire it is a ISO 8601 date and time string. ##### data.approval.expiresAt ```ts expiresAt: Date = ISO8601DateSchema; ``` Expires at date. On wire it is a ISO 8601 date and time string. ##### data.approval.id ```ts id: string; ``` ID of the approval ##### data.approval.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string. #### event ```ts event: "approval:added"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 2; ``` Version of the event [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ApprovalExpiredEvent ## Type Alias: ApprovalExpiredEvent ```ts type ApprovalExpiredEvent = { chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; event: "approval:expired"; uid: string; version: 1; }; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/approval.ts:204 An event sent to webhook when an approval expires ### Type declaration #### chainId ```ts chainId: number; ``` Chain ID where the approval exists #### data ```ts data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; ``` Data of the event ##### data.approval ```ts approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; ``` Approval data ##### data.approval.app ```ts app: `0x${string}` = HexSchema; ``` App address ##### data.approval.author ```ts author: `0x${string}` = HexSchema; ``` Author address of the approval ##### data.approval.createdAt ```ts createdAt: Date = ISO8601DateSchema; ``` Created at date. On wire it is a ISO 8601 date and time string. ##### data.approval.expiresAt ```ts expiresAt: Date = ISO8601DateSchema; ``` Expires at date. On wire it is a ISO 8601 date and time string. ##### data.approval.id ```ts id: string; ``` ID of the approval that expired ##### data.approval.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string. #### event ```ts event: "approval:expired"; ``` Event type #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ApprovalRemovedEvent ## Type Alias: ApprovalRemovedEvent ```ts type ApprovalRemovedEvent = { blockNumber: bigint; chainId: number; data: { approval: { id: string; }; }; event: "approval:removed"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/approval.ts:152 An event sent to webhook when an approval is removed ### Type declaration #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { approval: { id: string; }; }; ``` Data of the event ##### data.approval ```ts approval: { id: string; }; ``` Approval data ##### data.approval.id ```ts id: string; ``` ID of the approval that was removed #### event ```ts event: "approval:removed"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ChannelCreatedEvent ## Type Alias: ChannelCreatedEvent ```ts type ChannelCreatedEvent = { blockNumber: bigint; chainId: number; data: { channel: { 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; }; }; event: "channel:created"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:86 An event sent to webhook when a channel is created. ### Type declaration #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { channel: { 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; }; }; ``` Data of the event ##### data.channel ```ts channel: { 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; }; ``` ##### data.channel.chainId ```ts chainId: number; ``` Chain ID where the channel was created ##### data.channel.createdAt ```ts createdAt: Date = ISO8601DateSchema; ``` Created at date. On wire it is a ISO 8601 date and time string. ##### data.channel.description ```ts description: string; ``` Description of the channel ##### data.channel.hook ```ts hook: null | `0x${string}`; ``` Hook address ##### data.channel.id ```ts id: bigint = StringBigintSchema; ``` ID of the channel. On wire it is a stringified bigint. ##### data.channel.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = MetadataArraySchema; ``` Metadata of the channel ##### data.channel.name ```ts name: string; ``` Name of the channel ##### data.channel.owner ```ts owner: `0x${string}` = HexSchema; ``` Owner address ##### data.channel.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string. #### event ```ts event: "channel:created"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ChannelHookStatusUpdatedEvent ## Type Alias: ChannelHookStatusUpdatedEvent ```ts type ChannelHookStatusUpdatedEvent = { blockNumber: bigint; chainId: number; data: { channel: { hook: null | `0x${string}`; id: bigint; updatedAt: Date; }; hook: { address: `0x${string}`; enabled: boolean; }; }; event: "channel:hook:status:updated"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:181 An event sent to webhook when a channel hook status is updated. ### Type declaration #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { channel: { hook: null | `0x${string}`; id: bigint; updatedAt: Date; }; hook: { address: `0x${string}`; enabled: boolean; }; }; ``` Data of the event ##### data.channel ```ts channel: { hook: null | `0x${string}`; id: bigint; updatedAt: Date; }; ``` Updated channel data ##### data.channel.hook ```ts hook: null | `0x${string}`; ``` Hook address ##### data.channel.id ```ts id: bigint = StringBigintSchema; ``` ID of the channel ##### data.channel.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date ##### data.hook ```ts hook: { address: `0x${string}`; enabled: boolean; }; ``` Updated hook data ##### data.hook.address ```ts address: `0x${string}` = HexSchema; ``` Address of the hook ##### data.hook.enabled ```ts enabled: boolean; ``` Enabled status #### event ```ts event: "channel:hook:status:updated"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ChannelMetadataSetEvent ## Type Alias: ChannelMetadataSetEvent ```ts type ChannelMetadataSetEvent = { blockNumber: bigint; chainId: number; data: { channel: { id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; updatedAt: Date; }; metadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; event: "channel:metadata:set"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:224 An event sent to webhook when a channel metadata is set. ### Type declaration #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { channel: { id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; updatedAt: Date; }; metadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; ``` Data of the event ##### data.channel ```ts channel: { id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; updatedAt: Date; }; ``` Updated channel data ##### data.channel.id ```ts id: bigint = StringBigintSchema; ``` ID of the channel ##### data.channel.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = MetadataArraySchema; ``` Metadata of the channel ##### data.channel.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date ##### data.metadataOperation ```ts metadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; } = MetadataSetOperationSchema; ``` Metadata operation #### event ```ts event: "channel:metadata:set"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ChannelTransferredEvent ## Type Alias: ChannelTransferredEvent ```ts type ChannelTransferredEvent = { blockNumber: bigint; chainId: number; data: { channel: { id: bigint; owner: `0x${string}`; updatedAt: Date; }; from: `0x${string}`; to: `0x${string}`; }; event: "channel:transferred"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:271 An event sent to webhook when a channel is transferred. ### Type declaration #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { channel: { id: bigint; owner: `0x${string}`; updatedAt: Date; }; from: `0x${string}`; to: `0x${string}`; }; ``` Data of the event ##### data.channel ```ts channel: { id: bigint; owner: `0x${string}`; updatedAt: Date; }; ``` Updated channel data ##### data.channel.id ```ts id: bigint = StringBigintSchema; ``` ID of the channel ##### data.channel.owner ```ts owner: `0x${string}` = HexSchema; ``` Owner address ##### data.channel.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date ##### data.from ```ts from: `0x${string}` = HexSchema; ``` From address ##### data.to ```ts to: `0x${string}` = HexSchema; ``` To address #### event ```ts event: "channel:transferred"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ChannelUpdatedEvent ## Type Alias: ChannelUpdatedEvent ```ts type ChannelUpdatedEvent = { blockNumber: bigint; chainId: number; data: { channel: { description: string; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; updatedAt: Date; }; }; event: "channel:updated"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:131 An event sent to webhook when a channel is updated. ### Type declaration #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { channel: { description: string; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; updatedAt: Date; }; }; ``` Data of the event ##### data.channel ```ts channel: { description: string; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; updatedAt: Date; }; ``` Updated channel data ##### data.channel.description ```ts description: string; ``` Description of the channel ##### data.channel.id ```ts id: bigint = StringBigintSchema; ``` ID of the channel ##### data.channel.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = MetadataArraySchema; ``` Metadata of the channel ##### data.channel.name ```ts name: string; ``` Name of the channel ##### data.channel.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date #### event ```ts event: "channel:updated"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentAddedEvent ## Type Alias: CommentAddedEvent ```ts type CommentAddedEvent = { blockNumber: bigint; chainId: number; data: { comment: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: Date; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: Date; }; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; event: "comment:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:122 An event sent to webhook when a comment is added. ### Type declaration #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { comment: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: Date; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: Date; }; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; ``` Data of the event ##### data.comment ```ts comment: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: Date; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: Date; }; ``` Comment data ##### Type declaration ```ts { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: Date; } ``` ```ts { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: Date; } ``` ##### data.zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` ZeroEx swap data #### event ```ts event: "comment:added"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentDeletedEvent ## Type Alias: CommentDeletedEvent ```ts type CommentDeletedEvent = { blockNumber: bigint; chainId: number; data: { comment: { deletedAt: Date; id: `0x${string}`; updatedAt: Date; }; }; event: "comment:deleted"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:202 An event sent to webhook when a comment is deleted. ### Type declaration #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { comment: { deletedAt: Date; id: `0x${string}`; updatedAt: Date; }; }; ``` Data of the event ##### data.comment ```ts comment: { deletedAt: Date; id: `0x${string}`; updatedAt: Date; }; ``` Updated comment data ##### data.comment.deletedAt ```ts deletedAt: Date = ISO8601DateSchema; ``` Deleted at date. On wire it is a ISO 8601 date and time string ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ID of the comment ##### data.comment.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string #### event ```ts event: "comment:deleted"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentEditedEvent ## Type Alias: CommentEditedEvent ```ts type CommentEditedEvent = { blockNumber: bigint; chainId: number; data: { comment: { content: string; id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; updatedAt: Date; }; }; event: "comment:edited"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:247 An event sent to webhook when a comment is edited. ### Type declaration #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { comment: { content: string; id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; updatedAt: Date; }; }; ``` Data of the event ##### data.comment ```ts comment: { content: string; id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; updatedAt: Date; }; ``` Updated comment data ##### data.comment.content ```ts content: string; ``` Content of the comment ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ID of the comment ##### data.comment.moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = CommentModerationStatusSchema; ``` Moderation status of the comment ##### data.comment.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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[] = IndexerAPICommentReferencesSchema; ``` References of the comment ##### data.comment.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string #### event ```ts event: "comment:edited"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentHookMetadataSetEvent ## Type Alias: CommentHookMetadataSetEvent ```ts type CommentHookMetadataSetEvent = { blockNumber: bigint; chainId: number; data: { comment: { hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; updatedAt: Date; }; hookMetadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; event: "comment:hook:metadata:set"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:163 An event sent to webhook when a comment hook metadata is set. ### Type declaration #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { comment: { hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; updatedAt: Date; }; hookMetadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; ``` Data of the event ##### data.comment ```ts comment: { hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; updatedAt: Date; }; ``` Updated comment data ##### data.comment.hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = MetadataArraySchema; ``` Hook metadata. On wire it is a ISO 8601 date and time string. ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ID of the comment ##### data.comment.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string. ##### data.hookMetadataOperation ```ts hookMetadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; } = MetadataSetOperationSchema; ``` Hook metadata operation #### event ```ts event: "comment:hook:metadata:set"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentModerationStatus ## Type Alias: CommentModerationStatus ```ts type CommentModerationStatus = "approved" | "pending" | "rejected"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:50 Comment moderation status schema. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentModerationStatusUpdatedEvent ## Type Alias: CommentModerationStatusUpdatedEvent ```ts type CommentModerationStatusUpdatedEvent = { data: { comment: { id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; }; }; event: "comment:moderation:status:updated"; uid: string; version: 1; }; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:283 An event sent to webhook when a comment moderation status is updated. ### Type declaration #### data ```ts data: { comment: { id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; }; }; ``` Data of the event ##### data.comment ```ts comment: { id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; }; ``` Updated comment data ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ID of the comment ##### data.comment.moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = CommentModerationStatusSchema; ``` Moderation status of the comment ##### data.comment.moderationStatusChangedAt ```ts moderationStatusChangedAt: Date = ISO8601DateSchema; ``` Moderation status changed at date. On wire it is a ISO 8601 date and time string #### event ```ts event: "comment:moderation:status:updated"; ``` Event type #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentReactionsUpdatedEvent ## Type Alias: CommentReactionsUpdatedEvent ```ts type CommentReactionsUpdatedEvent = { data: { comment: { id: `0x${string}`; reactionCounts: Record; }; }; event: "comment:reactions:updated"; uid: string; version: 1; }; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:317 An event sent to webhook when a comment reactions are updated. ### Type declaration #### data ```ts data: { comment: { id: `0x${string}`; reactionCounts: Record; }; }; ``` Data of the event ##### data.comment ```ts comment: { id: `0x${string}`; reactionCounts: Record; }; ``` Updated comment data ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ID of the comment ##### data.comment.reactionCounts ```ts reactionCounts: Record; ``` Reaction counts #### event ```ts event: "comment:reactions:updated"; ``` Event type #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentReferencesUpdatedEvent ## Type Alias: CommentReferencesUpdatedEvent ```ts type CommentReferencesUpdatedEvent = { data: { comment: { id: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; referencesResolutionStatus: "pending" | "partial" | "success" | "failed"; referencesResolutionStatusChangedAt: Date; }; }; event: "comment:references:updated"; uid: string; version: 1; }; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:340 ### Type declaration #### data ```ts data: { comment: { id: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; referencesResolutionStatus: "pending" | "partial" | "success" | "failed"; referencesResolutionStatusChangedAt: Date; }; }; ``` ##### data.comment ```ts comment: { id: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; referencesResolutionStatus: "pending" | "partial" | "success" | "failed"; referencesResolutionStatusChangedAt: Date; }; ``` ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ##### data.comment.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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: string; dimension: { height: number; width: number; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[] = IndexerAPICommentReferencesSchema; ``` ##### data.comment.referencesResolutionStatus ```ts referencesResolutionStatus: "pending" | "partial" | "success" | "failed"; ``` ##### data.comment.referencesResolutionStatusChangedAt ```ts referencesResolutionStatusChangedAt: Date = ISO8601DateSchema; ``` #### event ```ts event: "comment:references:updated"; ``` #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ConstructEventResult ## Type Alias: ConstructEventResult ```ts type ConstructEventResult = | { blockNumber: bigint; chainId: number; data: { comment: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: Date; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: Date; }; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; event: "comment:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { comment: { hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; updatedAt: Date; }; hookMetadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; event: "comment:hook:metadata:set"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { comment: { deletedAt: Date; id: `0x${string}`; updatedAt: Date; }; }; event: "comment:deleted"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { comment: { content: string; id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; updatedAt: Date; }; }; event: "comment:edited"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { data: { comment: { id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; }; }; event: "comment:moderation:status:updated"; uid: string; version: 1; } | { data: { comment: { id: `0x${string}`; reactionCounts: Record; }; }; event: "comment:reactions:updated"; uid: string; version: 1; } | { data: { comment: { id: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; referencesResolutionStatus: "pending" | "partial" | "success" | "failed"; referencesResolutionStatusChangedAt: Date; }; }; event: "comment:references:updated"; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { channel: { 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; }; }; event: "channel:created"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { channel: { description: string; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; updatedAt: Date; }; }; event: "channel:updated"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { channel: { hook: null | `0x${string}`; id: bigint; updatedAt: Date; }; hook: { address: `0x${string}`; enabled: boolean; }; }; event: "channel:hook:status:updated"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { channel: { id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; updatedAt: Date; }; metadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; event: "channel:metadata:set"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { channel: { id: bigint; owner: `0x${string}`; updatedAt: Date; }; from: `0x${string}`; to: `0x${string}`; }; event: "channel:transferred"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 2; } | { blockNumber: bigint; chainId: number; data: { approval: { id: string; }; }; event: "approval:removed"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } | { chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; event: "approval:expired"; uid: string; version: 1; } | { appId: string; data: { message: string; }; event: "test"; uid: string; version: 1; webhookId: string; }; ``` Defined in: packages/sdk/src/indexer/webhooks/utils.ts:5 All events schema. ### Type declaration ```ts { blockNumber: bigint; chainId: number; data: { comment: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: Date; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: Date; }; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; event: "comment:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { comment: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: Date; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: Date; }; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; ``` Data of the event ##### data.comment ```ts comment: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: Date; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: Date; }; ``` Comment data ##### Type declaration ```ts { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: Date; } ``` ```ts { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ...; dimension: ...; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: Date; } ``` ##### data.zeroExSwap ```ts zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; ``` ZeroEx swap data #### event ```ts event: "comment:added"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { comment: { hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; updatedAt: Date; }; hookMetadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; event: "comment:hook:metadata:set"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { comment: { hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; updatedAt: Date; }; hookMetadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; ``` Data of the event ##### data.comment ```ts comment: { hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; updatedAt: Date; }; ``` Updated comment data ##### data.comment.hookMetadata ```ts hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[] = MetadataArraySchema; ``` Hook metadata. On wire it is a ISO 8601 date and time string. ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ID of the comment ##### data.comment.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string. ##### data.hookMetadataOperation ```ts hookMetadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; } = MetadataSetOperationSchema; ``` Hook metadata operation #### event ```ts event: "comment:hook:metadata:set"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { comment: { deletedAt: Date; id: `0x${string}`; updatedAt: Date; }; }; event: "comment:deleted"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { comment: { deletedAt: Date; id: `0x${string}`; updatedAt: Date; }; }; ``` Data of the event ##### data.comment ```ts comment: { deletedAt: Date; id: `0x${string}`; updatedAt: Date; }; ``` Updated comment data ##### data.comment.deletedAt ```ts deletedAt: Date = ISO8601DateSchema; ``` Deleted at date. On wire it is a ISO 8601 date and time string ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ID of the comment ##### data.comment.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string #### event ```ts event: "comment:deleted"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { comment: { content: string; id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; updatedAt: Date; }; }; event: "comment:edited"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { comment: { content: string; id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; updatedAt: Date; }; }; ``` Data of the event ##### data.comment ```ts comment: { content: string; id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; 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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; updatedAt: Date; }; ``` Updated comment data ##### data.comment.content ```ts content: string; ``` Content of the comment ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ID of the comment ##### data.comment.moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = CommentModerationStatusSchema; ``` Moderation status of the comment ##### data.comment.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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[] = IndexerAPICommentReferencesSchema; ``` References of the comment ##### data.comment.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string #### event ```ts event: "comment:edited"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { data: { comment: { id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; }; }; event: "comment:moderation:status:updated"; uid: string; version: 1; } ``` #### data ```ts data: { comment: { id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; }; }; ``` Data of the event ##### data.comment ```ts comment: { id: `0x${string}`; moderationStatus: "approved" | "pending" | "rejected"; moderationStatusChangedAt: Date; }; ``` Updated comment data ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ID of the comment ##### data.comment.moderationStatus ```ts moderationStatus: "approved" | "pending" | "rejected" = CommentModerationStatusSchema; ``` Moderation status of the comment ##### data.comment.moderationStatusChangedAt ```ts moderationStatusChangedAt: Date = ISO8601DateSchema; ``` Moderation status changed at date. On wire it is a ISO 8601 date and time string #### event ```ts event: "comment:moderation:status:updated"; ``` Event type #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { data: { comment: { id: `0x${string}`; reactionCounts: Record; }; }; event: "comment:reactions:updated"; uid: string; version: 1; } ``` #### data ```ts data: { comment: { id: `0x${string}`; reactionCounts: Record; }; }; ``` Data of the event ##### data.comment ```ts comment: { id: `0x${string}`; reactionCounts: Record; }; ``` Updated comment data ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ID of the comment ##### data.comment.reactionCounts ```ts reactionCounts: Record; ``` Reaction counts #### event ```ts event: "comment:reactions:updated"; ``` Event type #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { data: { comment: { id: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; referencesResolutionStatus: "pending" | "partial" | "success" | "failed"; referencesResolutionStatusChangedAt: Date; }; }; event: "comment:references:updated"; uid: string; version: 1; } ``` #### data ```ts data: { comment: { id: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; referencesResolutionStatus: "pending" | "partial" | "success" | "failed"; referencesResolutionStatusChangedAt: Date; }; }; ``` ##### data.comment ```ts comment: { id: `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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[]; referencesResolutionStatus: "pending" | "partial" | "success" | "failed"; referencesResolutionStatusChangedAt: Date; }; ``` ##### data.comment.id ```ts id: `0x${string}` = HexSchema; ``` ##### data.comment.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; mediaType: 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; } | { dimension?: { height: number; width: number; }; mediaType: string; position: { end: number; start: number; }; type: "image"; url: string; } | { mediaType: string; position: { end: number; start: number; }; type: "video"; url: string; videoTracks?: { codec?: ... | ...; dimension: { height: ...; width: ...; }; }[]; } | { chainId: number; id: `0x${string}`; position: { end: number; start: number; }; type: "quoted_comment"; })[] = IndexerAPICommentReferencesSchema; ``` ##### data.comment.referencesResolutionStatus ```ts referencesResolutionStatus: "pending" | "partial" | "success" | "failed"; ``` ##### data.comment.referencesResolutionStatusChangedAt ```ts referencesResolutionStatusChangedAt: Date = ISO8601DateSchema; ``` #### event ```ts event: "comment:references:updated"; ``` #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { channel: { 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; }; }; event: "channel:created"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { channel: { 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; }; }; ``` Data of the event ##### data.channel ```ts channel: { 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; }; ``` ##### data.channel.chainId ```ts chainId: number; ``` Chain ID where the channel was created ##### data.channel.createdAt ```ts createdAt: Date = ISO8601DateSchema; ``` Created at date. On wire it is a ISO 8601 date and time string. ##### data.channel.description ```ts description: string; ``` Description of the channel ##### data.channel.hook ```ts hook: null | `0x${string}`; ``` Hook address ##### data.channel.id ```ts id: bigint = StringBigintSchema; ``` ID of the channel. On wire it is a stringified bigint. ##### data.channel.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = MetadataArraySchema; ``` Metadata of the channel ##### data.channel.name ```ts name: string; ``` Name of the channel ##### data.channel.owner ```ts owner: `0x${string}` = HexSchema; ``` Owner address ##### data.channel.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string. #### event ```ts event: "channel:created"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { channel: { description: string; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; updatedAt: Date; }; }; event: "channel:updated"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { channel: { description: string; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; updatedAt: Date; }; }; ``` Data of the event ##### data.channel ```ts channel: { description: string; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; updatedAt: Date; }; ``` Updated channel data ##### data.channel.description ```ts description: string; ``` Description of the channel ##### data.channel.id ```ts id: bigint = StringBigintSchema; ``` ID of the channel ##### data.channel.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = MetadataArraySchema; ``` Metadata of the channel ##### data.channel.name ```ts name: string; ``` Name of the channel ##### data.channel.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date #### event ```ts event: "channel:updated"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { channel: { hook: null | `0x${string}`; id: bigint; updatedAt: Date; }; hook: { address: `0x${string}`; enabled: boolean; }; }; event: "channel:hook:status:updated"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { channel: { hook: null | `0x${string}`; id: bigint; updatedAt: Date; }; hook: { address: `0x${string}`; enabled: boolean; }; }; ``` Data of the event ##### data.channel ```ts channel: { hook: null | `0x${string}`; id: bigint; updatedAt: Date; }; ``` Updated channel data ##### data.channel.hook ```ts hook: null | `0x${string}`; ``` Hook address ##### data.channel.id ```ts id: bigint = StringBigintSchema; ``` ID of the channel ##### data.channel.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date ##### data.hook ```ts hook: { address: `0x${string}`; enabled: boolean; }; ``` Updated hook data ##### data.hook.address ```ts address: `0x${string}` = HexSchema; ``` Address of the hook ##### data.hook.enabled ```ts enabled: boolean; ``` Enabled status #### event ```ts event: "channel:hook:status:updated"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { channel: { id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; updatedAt: Date; }; metadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; event: "channel:metadata:set"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { channel: { id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; updatedAt: Date; }; metadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; ``` Data of the event ##### data.channel ```ts channel: { id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; updatedAt: Date; }; ``` Updated channel data ##### data.channel.id ```ts id: bigint = StringBigintSchema; ``` ID of the channel ##### data.channel.metadata ```ts metadata: { key: `0x${string}`; value: `0x${string}`; }[] = MetadataArraySchema; ``` Metadata of the channel ##### data.channel.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date ##### data.metadataOperation ```ts metadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; } = MetadataSetOperationSchema; ``` Metadata operation #### event ```ts event: "channel:metadata:set"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { channel: { id: bigint; owner: `0x${string}`; updatedAt: Date; }; from: `0x${string}`; to: `0x${string}`; }; event: "channel:transferred"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { channel: { id: bigint; owner: `0x${string}`; updatedAt: Date; }; from: `0x${string}`; to: `0x${string}`; }; ``` Data of the event ##### data.channel ```ts channel: { id: bigint; owner: `0x${string}`; updatedAt: Date; }; ``` Updated channel data ##### data.channel.id ```ts id: bigint = StringBigintSchema; ``` ID of the channel ##### data.channel.owner ```ts owner: `0x${string}` = HexSchema; ``` Owner address ##### data.channel.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date ##### data.from ```ts from: `0x${string}` = HexSchema; ``` From address ##### data.to ```ts to: `0x${string}` = HexSchema; ``` To address #### event ```ts event: "channel:transferred"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }; }; ``` Data of the event ##### data.approval ```ts approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }; ``` Approval data ##### data.approval.app ```ts app: `0x${string}` = HexSchema; ``` App address ##### data.approval.author ```ts author: `0x${string}` = HexSchema; ``` Author address ##### data.approval.createdAt ```ts createdAt: Date = ISO8601DateSchema; ``` Created at date. On wire it is a ISO 8601 date and time string. ##### data.approval.id ```ts id: string; ``` ID of the approval ##### data.approval.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string. #### event ```ts event: "approval:added"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 2; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; ``` Data of the event ##### data.approval ```ts approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; ``` Approval data ##### data.approval.app ```ts app: `0x${string}` = HexSchema; ``` App address ##### data.approval.author ```ts author: `0x${string}` = HexSchema; ``` Author address ##### data.approval.createdAt ```ts createdAt: Date = ISO8601DateSchema; ``` Created at date. On wire it is a ISO 8601 date and time string. ##### data.approval.expiresAt ```ts expiresAt: Date = ISO8601DateSchema; ``` Expires at date. On wire it is a ISO 8601 date and time string. ##### data.approval.id ```ts id: string; ``` ID of the approval ##### data.approval.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string. #### event ```ts event: "approval:added"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 2; ``` Version of the event ```ts { blockNumber: bigint; chainId: number; data: { approval: { id: string; }; }; event: "approval:removed"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; } ``` #### blockNumber ```ts blockNumber: bigint = StringBigintSchema; ``` Block number. On wire it is a stringified bigint. #### chainId ```ts chainId: number; ``` Chain ID #### data ```ts data: { approval: { id: string; }; }; ``` Data of the event ##### data.approval ```ts approval: { id: string; }; ``` Approval data ##### data.approval.id ```ts id: string; ``` ID of the approval that was removed #### event ```ts event: "approval:removed"; ``` Event type #### logIndex ```ts logIndex: number; ``` Log index #### txHash ```ts txHash: `0x${string}` = HexSchema; ``` Transaction hash #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; event: "approval:expired"; uid: string; version: 1; } ``` #### chainId ```ts chainId: number; ``` Chain ID where the approval exists #### data ```ts data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; ``` Data of the event ##### data.approval ```ts approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; ``` Approval data ##### data.approval.app ```ts app: `0x${string}` = HexSchema; ``` App address ##### data.approval.author ```ts author: `0x${string}` = HexSchema; ``` Author address of the approval ##### data.approval.createdAt ```ts createdAt: Date = ISO8601DateSchema; ``` Created at date. On wire it is a ISO 8601 date and time string. ##### data.approval.expiresAt ```ts expiresAt: Date = ISO8601DateSchema; ``` Expires at date. On wire it is a ISO 8601 date and time string. ##### data.approval.id ```ts id: string; ``` ID of the approval that expired ##### data.approval.updatedAt ```ts updatedAt: Date = ISO8601DateSchema; ``` Updated at date. On wire it is a ISO 8601 date and time string. #### event ```ts event: "approval:expired"; ``` Event type #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event ```ts { appId: string; data: { message: string; }; event: "test"; uid: string; version: 1; webhookId: string; } ``` #### appId ```ts appId: string; ``` App ID #### data ```ts data: { message: string; }; ``` Data of the event ##### data.message ```ts message: string; ``` Message #### event ```ts event: "test"; ``` Event type #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event #### webhookId ```ts webhookId: string; ``` Webhook ID [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / TestEvent ## Type Alias: TestEvent ```ts type TestEvent = { appId: string; data: { message: string; }; event: "test"; uid: string; version: 1; webhookId: string; }; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/test.ts:40 An event sent to webhook when a test event is triggered. ### Type declaration #### appId ```ts appId: string; ``` App ID #### data ```ts data: { message: string; }; ``` Data of the event ##### data.message ```ts message: string; ``` Message #### event ```ts event: "test"; ``` Event type #### uid ```ts uid: string; ``` Unique identifier for the event. You can use it to deduplicate events. In case of retry attempts the id is the same. #### version ```ts version: 1; ``` Version of the event #### webhookId ```ts webhookId: string; ``` Webhook ID [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / AllEvents ## Variable: AllEvents ```ts const AllEvents: readonly ["approval:added", "approval:removed", "approval:expired", "channel:created", "channel:updated", "channel:hook:status:updated", "channel:metadata:set", "channel:transferred", "comment:added", "comment:hook:metadata:set", "comment:deleted", "comment:edited", "comment:moderation:status:updated", "comment:reactions:updated", "comment:references:updated", "test"]; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/all.ts:53 All events. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / AllEventsSchema ## Variable: AllEventsSchema ```ts const AllEventsSchema: ZodUnion; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/all.ts:31 All events schema. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ApprovalAddedEventSchema ## Variable: ApprovalAddedEventSchema ```ts const ApprovalAddedEventSchema: ZodDiscriminatedUnion; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/approval.ts:118 An event sent to webhook when an approval is added [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ApprovalAddedEventV1Schema ## Variable: ApprovalAddedEventV1Schema ```ts const ApprovalAddedEventV1Schema: ZodObject<{ blockNumber: ZodEffects; chainId: ZodNumber; data: ZodObject<{ approval: ZodObject<{ app: ZodEffects; author: ZodEffects; createdAt: ZodEffects; id: ZodString; updatedAt: ZodEffects; }, "strip", ZodTypeAny, { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }, { app: `0x${string}`; author: `0x${string}`; createdAt: string; id: string; updatedAt: string; }>; }, "strip", ZodTypeAny, { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }; }, { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: string; id: string; updatedAt: string; }; }>; event: ZodLiteral<"approval:added">; logIndex: ZodNumber; txHash: ZodEffects; } & { uid: ZodString; version: ZodLiteral<1>; }, "strip", ZodTypeAny, { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }, { blockNumber: string; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: string; id: string; updatedAt: string; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }>; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/approval.ts:23 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ApprovalAddedEventV2Schema ## Variable: ApprovalAddedEventV2Schema ```ts const ApprovalAddedEventV2Schema: ZodObject<{ data: ZodObject<{ approval: ZodObject<{ app: ZodEffects; author: ZodEffects; createdAt: ZodEffects; expiresAt: ZodEffects; id: ZodString; updatedAt: ZodEffects; }, "strip", ZodTypeAny, { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }, { app: `0x${string}`; author: `0x${string}`; createdAt: string; expiresAt: string; id: string; updatedAt: string; }>; }, "strip", ZodTypeAny, { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }, { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: string; expiresAt: string; id: string; updatedAt: string; }; }>; event: ZodLiteral<"approval:added">; version: ZodLiteral<2>; } & { blockNumber: ZodEffects; chainId: ZodNumber; logIndex: ZodNumber; txHash: ZodEffects; } & { uid: ZodString; }, "strip", ZodTypeAny, { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 2; }, { blockNumber: string; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: string; expiresAt: string; id: string; updatedAt: string; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 2; }>; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/approval.ts:67 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ApprovalEvents ## Variable: ApprovalEvents ```ts const ApprovalEvents: readonly ["approval:added", "approval:removed", "approval:expired"]; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/approval.ts:17 Approval events. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ApprovalEventsSchema ## Variable: ApprovalEventsSchema ```ts const ApprovalEventsSchema: ZodUnion<[ZodDiscriminatedUnion<"version", [ZodObject<{ blockNumber: ZodEffects; chainId: ZodNumber; data: ZodObject<{ approval: ZodObject<{ app: ...; author: ...; createdAt: ...; id: ...; updatedAt: ...; }, "strip", ZodTypeAny, { app: ...; author: ...; createdAt: ...; id: ...; updatedAt: ...; }, { app: ...; author: ...; createdAt: ...; id: ...; updatedAt: ...; }>; }, "strip", ZodTypeAny, { approval: { app: `0x${(...)}`; author: `0x${(...)}`; createdAt: Date; id: string; updatedAt: Date; }; }, { approval: { app: `0x${(...)}`; author: `0x${(...)}`; createdAt: string; id: string; updatedAt: string; }; }>; event: ZodLiteral<"approval:added">; logIndex: ZodNumber; txHash: ZodEffects; } & { uid: ZodString; version: ZodLiteral<1>; }, "strip", ZodTypeAny, { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }, { blockNumber: string; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: string; id: string; updatedAt: string; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }>, ZodObject<{ data: ZodObject<{ approval: ZodObject<{ app: ...; author: ...; createdAt: ...; expiresAt: ...; id: ...; updatedAt: ...; }, "strip", ZodTypeAny, { app: ...; author: ...; createdAt: ...; expiresAt: ...; id: ...; updatedAt: ...; }, { app: ...; author: ...; createdAt: ...; expiresAt: ...; id: ...; updatedAt: ...; }>; }, "strip", ZodTypeAny, { approval: { app: `0x${(...)}`; author: `0x${(...)}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }, { approval: { app: `0x${(...)}`; author: `0x${(...)}`; createdAt: string; expiresAt: string; id: string; updatedAt: string; }; }>; event: ZodLiteral<"approval:added">; version: ZodLiteral<2>; } & { blockNumber: ZodEffects; chainId: ZodNumber; logIndex: ZodNumber; txHash: ZodEffects; } & { uid: ZodString; }, "strip", ZodTypeAny, { blockNumber: bigint; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 2; }, { blockNumber: string; chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: string; expiresAt: string; id: string; updatedAt: string; }; }; event: "approval:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 2; }>]>, ZodObject<{ data: ZodObject<{ approval: ZodObject<{ id: ZodString; }, "strip", ZodTypeAny, { id: string; }, { id: string; }>; }, "strip", ZodTypeAny, { approval: { id: string; }; }, { approval: { id: string; }; }>; event: ZodLiteral<"approval:removed">; } & { blockNumber: ZodEffects; chainId: ZodNumber; logIndex: ZodNumber; txHash: ZodEffects; } & { uid: ZodString; } & { version: ZodLiteral<1>; }, "strip", ZodTypeAny, { blockNumber: bigint; chainId: number; data: { approval: { id: string; }; }; event: "approval:removed"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }, { blockNumber: string; chainId: number; data: { approval: { id: string; }; }; event: "approval:removed"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }>, ZodObject<{ chainId: ZodNumber; data: ZodObject<{ approval: ZodObject<{ app: ZodEffects; author: ZodEffects; createdAt: ZodEffects; expiresAt: ZodEffects; id: ZodString; updatedAt: ZodEffects; }, "strip", ZodTypeAny, { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }, { app: `0x${string}`; author: `0x${string}`; createdAt: string; expiresAt: string; id: string; updatedAt: string; }>; }, "strip", ZodTypeAny, { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }, { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: string; expiresAt: string; id: string; updatedAt: string; }; }>; event: ZodLiteral<"approval:expired">; } & { uid: ZodString; } & { version: ZodLiteral<1>; }, "strip", ZodTypeAny, { chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: Date; expiresAt: Date; id: string; updatedAt: Date; }; }; event: "approval:expired"; uid: string; version: 1; }, { chainId: number; data: { approval: { app: `0x${string}`; author: `0x${string}`; createdAt: string; expiresAt: string; id: string; updatedAt: string; }; }; event: "approval:expired"; uid: string; version: 1; }>]>; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/approval.ts:209 Approval events schema. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ApprovalExpiredEventSchema ## Variable: ApprovalExpiredEventSchema ```ts const ApprovalExpiredEventSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/approval.ts:157 An event sent to webhook when an approval expires [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ApprovalRemovedEventSchema ## Variable: ApprovalRemovedEventSchema ```ts const ApprovalRemovedEventSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/approval.ts:128 An event sent to webhook when an approval is removed [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ChannelCreatedEventSchema ## Variable: ChannelCreatedEventSchema ```ts const ChannelCreatedEventSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:33 An event sent to webhook when a channel is created. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ChannelEvents ## Variable: ChannelEvents ```ts const ChannelEvents: readonly ["channel:created", "channel:updated", "channel:hook:status:updated", "channel:metadata:set", "channel:transferred"]; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:22 Channel events. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ChannelEventsSchema ## Variable: ChannelEventsSchema ```ts const ChannelEventsSchema: ZodDiscriminatedUnion<"event", [ZodObject<{ data: ZodObject<{ channel: ZodObject<{ chainId: ZodNumber; createdAt: ZodEffects; description: ZodString; hook: ZodNullable>; id: ZodEffects; metadata: ZodArray, "many">; name: ZodString; owner: ZodEffects; updatedAt: ZodEffects; }, "strip", ZodTypeAny, { chainId: number; createdAt: Date; description: string; hook: null | `0x${(...)}`; id: bigint; metadata: { key: ...; value: ...; }[]; name: string; owner: `0x${string}`; updatedAt: Date; }, { chainId: number; createdAt: string; description: string; hook: null | `0x${(...)}`; id: string; metadata: { key: ...; value: ...; }[]; name: string; owner: `0x${string}`; updatedAt: string; }>; }, "strip", ZodTypeAny, { channel: { chainId: number; createdAt: Date; description: string; hook: null | `0x${string}`; id: bigint; metadata: { key: `0x${(...)}`; value: `0x${(...)}`; }[]; name: string; owner: `0x${string}`; updatedAt: Date; }; }, { channel: { chainId: number; createdAt: string; description: string; hook: null | `0x${string}`; id: string; metadata: { key: `0x${(...)}`; value: `0x${(...)}`; }[]; name: string; owner: `0x${string}`; updatedAt: string; }; }>; event: ZodLiteral<"channel:created">; } & { blockNumber: ZodEffects; chainId: ZodNumber; logIndex: ZodNumber; txHash: ZodEffects; } & { uid: ZodString; } & { version: ZodLiteral<1>; }, "strip", ZodTypeAny, { blockNumber: bigint; chainId: number; data: { channel: { 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; }; }; event: "channel:created"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }, { blockNumber: string; chainId: number; data: { channel: { 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; }; }; event: "channel:created"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }>, ZodObject<{ data: ZodObject<{ channel: ZodObject<{ description: ZodString; id: ZodEffects; metadata: ZodArray, "many">; name: ZodString; updatedAt: ZodEffects; }, "strip", ZodTypeAny, { description: string; id: bigint; metadata: { key: ...; value: ...; }[]; name: string; updatedAt: Date; }, { description: string; id: string; metadata: { key: ...; value: ...; }[]; name: string; updatedAt: string; }>; }, "strip", ZodTypeAny, { channel: { description: string; id: bigint; metadata: { key: `0x${(...)}`; value: `0x${(...)}`; }[]; name: string; updatedAt: Date; }; }, { channel: { description: string; id: string; metadata: { key: `0x${(...)}`; value: `0x${(...)}`; }[]; name: string; updatedAt: string; }; }>; event: ZodLiteral<"channel:updated">; } & { blockNumber: ZodEffects; chainId: ZodNumber; logIndex: ZodNumber; txHash: ZodEffects; } & { uid: ZodString; } & { version: ZodLiteral<1>; }, "strip", ZodTypeAny, { blockNumber: bigint; chainId: number; data: { channel: { description: string; id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; updatedAt: Date; }; }; event: "channel:updated"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }, { blockNumber: string; chainId: number; data: { channel: { description: string; id: string; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; name: string; updatedAt: string; }; }; event: "channel:updated"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }>, ZodObject<{ data: ZodObject<{ channel: ZodObject<{ hook: ZodNullable>; id: ZodEffects; updatedAt: ZodEffects; }, "strip", ZodTypeAny, { hook: null | `0x${(...)}`; id: bigint; updatedAt: Date; }, { hook: null | `0x${(...)}`; id: string; updatedAt: string; }>; hook: ZodObject<{ address: ZodEffects; enabled: ZodBoolean; }, "strip", ZodTypeAny, { address: `0x${string}`; enabled: boolean; }, { address: `0x${string}`; enabled: boolean; }>; }, "strip", ZodTypeAny, { channel: { hook: null | `0x${string}`; id: bigint; updatedAt: Date; }; hook: { address: `0x${string}`; enabled: boolean; }; }, { channel: { hook: null | `0x${string}`; id: string; updatedAt: string; }; hook: { address: `0x${string}`; enabled: boolean; }; }>; event: ZodLiteral<"channel:hook:status:updated">; } & { blockNumber: ZodEffects; chainId: ZodNumber; logIndex: ZodNumber; txHash: ZodEffects; } & { uid: ZodString; } & { version: ZodLiteral<1>; }, "strip", ZodTypeAny, { blockNumber: bigint; chainId: number; data: { channel: { hook: null | `0x${string}`; id: bigint; updatedAt: Date; }; hook: { address: `0x${string}`; enabled: boolean; }; }; event: "channel:hook:status:updated"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }, { blockNumber: string; chainId: number; data: { channel: { hook: null | `0x${string}`; id: string; updatedAt: string; }; hook: { address: `0x${string}`; enabled: boolean; }; }; event: "channel:hook:status:updated"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }>, ZodObject<{ data: ZodObject<{ channel: ZodObject<{ id: ZodEffects; metadata: ZodArray, "many">; updatedAt: ZodEffects; }, "strip", ZodTypeAny, { id: bigint; metadata: { key: ...; value: ...; }[]; updatedAt: Date; }, { id: string; metadata: { key: ...; value: ...; }[]; updatedAt: string; }>; metadataOperation: ZodDiscriminatedUnion<"type", [ZodObject<{ key: ...; type: ...; }, "strip", ZodTypeAny, { key: ...; type: ...; }, { key: ...; type: ...; }>, ZodObject<{ key: ...; type: ...; value: ...; }, "strip", ZodTypeAny, { key: ...; type: ...; value: ...; }, { key: ...; type: ...; value: ...; }>, ZodObject<{ key: ...; type: ...; value: ...; }, "strip", ZodTypeAny, { key: ...; type: ...; value: ...; }, { key: ...; type: ...; value: ...; }>]>; }, "strip", ZodTypeAny, { channel: { id: bigint; metadata: { key: `0x${(...)}`; value: `0x${(...)}`; }[]; updatedAt: Date; }; metadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }, { channel: { id: string; metadata: { key: `0x${(...)}`; value: `0x${(...)}`; }[]; updatedAt: string; }; metadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }>; event: ZodLiteral<"channel:metadata:set">; } & { blockNumber: ZodEffects; chainId: ZodNumber; logIndex: ZodNumber; txHash: ZodEffects; } & { uid: ZodString; } & { version: ZodLiteral<1>; }, "strip", ZodTypeAny, { blockNumber: bigint; chainId: number; data: { channel: { id: bigint; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; updatedAt: Date; }; metadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; event: "channel:metadata:set"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }, { blockNumber: string; chainId: number; data: { channel: { id: string; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; updatedAt: string; }; metadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; event: "channel:metadata:set"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }>, ZodObject<{ data: ZodObject<{ channel: ZodObject<{ id: ZodEffects; owner: ZodEffects; updatedAt: ZodEffects; }, "strip", ZodTypeAny, { id: bigint; owner: `0x${string}`; updatedAt: Date; }, { id: string; owner: `0x${string}`; updatedAt: string; }>; from: ZodEffects; to: ZodEffects; }, "strip", ZodTypeAny, { channel: { id: bigint; owner: `0x${string}`; updatedAt: Date; }; from: `0x${string}`; to: `0x${string}`; }, { channel: { id: string; owner: `0x${string}`; updatedAt: string; }; from: `0x${string}`; to: `0x${string}`; }>; event: ZodLiteral<"channel:transferred">; } & { blockNumber: ZodEffects; chainId: ZodNumber; logIndex: ZodNumber; txHash: ZodEffects; } & { uid: ZodString; } & { version: ZodLiteral<1>; }, "strip", ZodTypeAny, { blockNumber: bigint; chainId: number; data: { channel: { id: bigint; owner: `0x${string}`; updatedAt: Date; }; from: `0x${string}`; to: `0x${string}`; }; event: "channel:transferred"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }, { blockNumber: string; chainId: number; data: { channel: { id: string; owner: `0x${string}`; updatedAt: string; }; from: `0x${string}`; to: `0x${string}`; }; event: "channel:transferred"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }>]>; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:278 Channel events schema. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ChannelHookStatusUpdatedEventSchema ## Variable: ChannelHookStatusUpdatedEventSchema ```ts const ChannelHookStatusUpdatedEventSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:136 An event sent to webhook when a channel hook status is updated. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ChannelMetadataSetEventSchema ## Variable: ChannelMetadataSetEventSchema ```ts const ChannelMetadataSetEventSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:188 An event sent to webhook when a channel metadata is set. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ChannelTransferredEventSchema ## Variable: ChannelTransferredEventSchema ```ts const ChannelTransferredEventSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:231 An event sent to webhook when a channel is transferred. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ChannelUpdatedEventSchema ## Variable: ChannelUpdatedEventSchema ```ts const ChannelUpdatedEventSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:91 An event sent to webhook when a channel is updated. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentAddedEventSchema ## Variable: CommentAddedEventSchema ```ts const CommentAddedEventSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:96 An event sent to webhook when a comment is added. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentDeletedEventSchema ## Variable: CommentDeletedEventSchema ```ts const CommentDeletedEventSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:170 An event sent to webhook when a comment is deleted. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentEditedEventSchema ## Variable: CommentEditedEventSchema ```ts const CommentEditedEventSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:207 An event sent to webhook when a comment is edited. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentEvents ## Variable: CommentEvents ```ts const CommentEvents: readonly ["comment:added", "comment:hook:metadata:set", "comment:deleted", "comment:edited", "comment:moderation:status:updated", "comment:reactions:updated", "comment:references:updated"]; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:31 Comment events. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentEventsSchema ## Variable: CommentEventsSchema ```ts const CommentEventsSchema: ZodDiscriminatedUnion<"event", [ZodObject<{ data: ZodObject<{ comment: ZodDiscriminatedUnion<"type", [ZodObject<... & ..., "strip", ZodTypeAny, { app: ...; author: ...; channelId: ...; commentType: ...; content: ...; createdAt: ...; id: ...; metadata: ...; moderationStatus: ...; references: ...; targetUri: ...; type: ...; updatedAt: ...; }, { app: ...; author: ...; channelId: ...; commentType: ...; content: ...; createdAt: ...; id: ...; metadata: ...; moderationStatus: ...; references: ...; targetUri: ...; type: ...; updatedAt: ...; }>, ZodObject<... & ..., "strip", ZodTypeAny, { app: ...; author: ...; channelId: ...; commentType: ...; content: ...; createdAt: ...; id: ...; metadata: ...; moderationStatus: ...; parentId: ...; references: ...; type: ...; updatedAt: ...; }, { app: ...; author: ...; channelId: ...; commentType: ...; content: ...; createdAt: ...; id: ...; metadata: ...; moderationStatus: ...; parentId: ...; references: ...; type: ...; updatedAt: ...; }>]>; zeroExSwap: ZodNullable; to: ZodObject<..., ..., ..., ..., ...>; }, "strip", ZodTypeAny, { from: { address: ...; amount: ...; symbol: ...; }; to: { address: ...; amount: ...; symbol: ...; }; }, { from: { address: ...; amount: ...; symbol: ...; }; to: { address: ...; amount: ...; symbol: ...; }; }>>; }, "strip", ZodTypeAny, { comment: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: ...; value: ...; }[]; moderationStatus: "approved" | "pending" | "rejected"; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; targetUri: string; type: "root"; updatedAt: Date; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: ...; value: ...; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `0x${string}`; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; type: "reply"; updatedAt: Date; }; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }, { comment: | { app: `0x${string}`; author: `0x${string}`; channelId: string; commentType: number; content: string; createdAt: string; id: `0x${string}`; metadata: { key: ...; value: ...; }[]; moderationStatus: "approved" | "pending" | "rejected"; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; targetUri: string; type: "root"; updatedAt: string; } | { app: `0x${string}`; author: `0x${string}`; channelId: string; commentType: number; content: string; createdAt: string; id: `0x${string}`; metadata: { key: ...; value: ...; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `0x${string}`; references: (... | ... | ... | ... | ... | ... | ... | ...)[]; type: "reply"; updatedAt: string; }; zeroExSwap: | null | { from: { address: `0x${(...)}`; amount: string; symbol: string; }; to: { address: ... | ...; amount: string; symbol: string; }; }; }>; event: ZodLiteral<"comment:added">; } & { uid: ZodString; } & { version: ZodLiteral<1>; } & { blockNumber: ZodEffects; chainId: ZodNumber; logIndex: ZodNumber; txHash: ZodEffects; }, "strip", ZodTypeAny, { blockNumber: bigint; chainId: number; data: { comment: | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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: ... | ...; mediaType: string; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { dimension?: ... | ...; mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; videoTracks?: ... | ...; } | { chainId: number; id: `0x${(...)}`; position: { end: ...; start: ...; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: Date; } | { app: `0x${string}`; author: `0x${string}`; channelId: bigint; commentType: number; content: string; createdAt: Date; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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: ... | ...; mediaType: string; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { dimension?: ... | ...; mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; videoTracks?: ... | ...; } | { chainId: number; id: `0x${(...)}`; position: { end: ...; start: ...; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: Date; }; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; event: "comment:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }, { blockNumber: string; chainId: number; data: { comment: | { app: `0x${string}`; author: `0x${string}`; channelId: string; commentType: number; content: string; createdAt: string; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; 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: ... | ...; mediaType: string; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { dimension?: ... | ...; mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; videoTracks?: ... | ...; } | { chainId: number; id: `0x${(...)}`; position: { end: ...; start: ...; }; type: "quoted_comment"; })[]; targetUri: string; type: "root"; updatedAt: string; } | { app: `0x${string}`; author: `0x${string}`; channelId: string; commentType: number; content: string; createdAt: string; id: `0x${string}`; metadata: { key: `0x${string}`; value: `0x${string}`; }[]; moderationStatus: "approved" | "pending" | "rejected"; parentId: `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: ... | ...; mediaType: string; opengraph: ... | ...; position: { end: ...; start: ...; }; title: string; type: "webpage"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "file"; url: string; } | { dimension?: ... | ...; mediaType: string; position: { end: ...; start: ...; }; type: "image"; url: string; } | { mediaType: string; position: { end: ...; start: ...; }; type: "video"; url: string; videoTracks?: ... | ...; } | { chainId: number; id: `0x${(...)}`; position: { end: ...; start: ...; }; type: "quoted_comment"; })[]; type: "reply"; updatedAt: string; }; zeroExSwap: | null | { from: { address: `0x${string}`; amount: string; symbol: string; }; to: { address: "" | `0x${string}`; amount: string; symbol: string; }; }; }; event: "comment:added"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }>, ZodObject<{ data: ZodObject<{ comment: ZodObject<{ hookMetadata: ZodArray, "many">; id: ZodEffects; updatedAt: ZodEffects; }, "strip", ZodTypeAny, { hookMetadata: { key: ...; value: ...; }[]; id: `0x${string}`; updatedAt: Date; }, { hookMetadata: { key: ...; value: ...; }[]; id: `0x${string}`; updatedAt: string; }>; hookMetadataOperation: ZodDiscriminatedUnion<"type", [ZodObject<{ key: ...; type: ...; }, "strip", ZodTypeAny, { key: ...; type: ...; }, { key: ...; type: ...; }>, ZodObject<{ key: ...; type: ...; value: ...; }, "strip", ZodTypeAny, { key: ...; type: ...; value: ...; }, { key: ...; type: ...; value: ...; }>, ZodObject<{ key: ...; type: ...; value: ...; }, "strip", ZodTypeAny, { key: ...; type: ...; value: ...; }, { key: ...; type: ...; value: ...; }>]>; }, "strip", ZodTypeAny, { comment: { hookMetadata: { key: `0x${(...)}`; value: `0x${(...)}`; }[]; id: `0x${string}`; updatedAt: Date; }; hookMetadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }, { comment: { hookMetadata: { key: `0x${(...)}`; value: `0x${(...)}`; }[]; id: `0x${string}`; updatedAt: string; }; hookMetadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }>; event: ZodLiteral<"comment:hook:metadata:set">; } & { uid: ZodString; } & { version: ZodLiteral<1>; } & { blockNumber: ZodEffects; chainId: ZodNumber; logIndex: ZodNumber; txHash: ZodEffects; }, "strip", ZodTypeAny, { blockNumber: bigint; chainId: number; data: { comment: { hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; updatedAt: Date; }; hookMetadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; event: "comment:hook:metadata:set"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }, { blockNumber: string; chainId: number; data: { comment: { hookMetadata: { key: `0x${string}`; value: `0x${string}`; }[]; id: `0x${string}`; updatedAt: string; }; hookMetadataOperation: | { key: `0x${string}`; type: "delete"; } | { key: `0x${string}`; type: "create"; value: `0x${string}`; } | { key: `0x${string}`; type: "update"; value: `0x${string}`; }; }; event: "comment:hook:metadata:set"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }>, ZodObject<{ data: ZodObject<{ comment: ZodObject<{ deletedAt: ZodEffects; id: ZodEffects; updatedAt: ZodEffects; }, "strip", ZodTypeAny, { deletedAt: Date; id: `0x${string}`; updatedAt: Date; }, { deletedAt: string; id: `0x${string}`; updatedAt: string; }>; }, "strip", ZodTypeAny, { comment: { deletedAt: Date; id: `0x${string}`; updatedAt: Date; }; }, { comment: { deletedAt: string; id: `0x${string}`; updatedAt: string; }; }>; event: ZodLiteral<"comment:deleted">; } & { uid: ZodString; } & { version: ZodLiteral<1>; } & { blockNumber: ZodEffects; chainId: ZodNumber; logIndex: ZodNumber; txHash: ZodEffects; }, "strip", ZodTypeAny, { blockNumber: bigint; chainId: number; data: { comment: { deletedAt: Date; id: `0x${string}`; updatedAt: Date; }; }; event: "comment:deleted"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }, { blockNumber: string; chainId: number; data: { comment: { deletedAt: string; id: `0x${string}`; updatedAt: string; }; }; event: "comment:deleted"; logIndex: number; txHash: `0x${string}`; uid: string; version: 1; }>]>; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:347 Comment events schema. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentHookMetadataSetEventSchema ## Variable: CommentHookMetadataSetEventSchema ```ts const CommentHookMetadataSetEventSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:127 An event sent to webhook when a comment hook metadata is set. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentModerationStatusSchema ## Variable: CommentModerationStatusSchema ```ts const CommentModerationStatusSchema: ZodEnum; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:44 Comment moderation status schema. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentModerationStatusUpdatedEventSchema ## Variable: CommentModerationStatusUpdatedEventSchema ```ts const CommentModerationStatusUpdatedEventSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:252 An event sent to webhook when a comment moderation status is updated. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentReactionsUpdatedEventSchema ## Variable: CommentReactionsUpdatedEventSchema ```ts const CommentReactionsUpdatedEventSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:290 An event sent to webhook when a comment reactions are updated. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / CommentReferencesUpdatedEventSchema ## Variable: CommentReferencesUpdatedEventSchema ```ts const CommentReferencesUpdatedEventSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:321 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EVENT\_APPROVAL\_ADDED ## Variable: EVENT\_APPROVAL\_ADDED ```ts const EVENT_APPROVAL_ADDED: "approval:added"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/approval.ts:10 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EVENT\_APPROVAL\_EXPIRED ## Variable: EVENT\_APPROVAL\_EXPIRED ```ts const EVENT_APPROVAL_EXPIRED: "approval:expired"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/approval.ts:12 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EVENT\_APPROVAL\_REMOVED ## Variable: EVENT\_APPROVAL\_REMOVED ```ts const EVENT_APPROVAL_REMOVED: "approval:removed"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/approval.ts:11 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EVENT\_CHANNEL\_CREATED ## Variable: EVENT\_CHANNEL\_CREATED ```ts const EVENT_CHANNEL_CREATED: "channel:created"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:12 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EVENT\_CHANNEL\_HOOK\_STATUS\_UPDATED ## Variable: EVENT\_CHANNEL\_HOOK\_STATUS\_UPDATED ```ts const EVENT_CHANNEL_HOOK_STATUS_UPDATED: "channel:hook:status:updated"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:14 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EVENT\_CHANNEL\_METADATA\_SET ## Variable: EVENT\_CHANNEL\_METADATA\_SET ```ts const EVENT_CHANNEL_METADATA_SET: "channel:metadata:set"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:16 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EVENT\_CHANNEL\_TRANSFERRED ## Variable: EVENT\_CHANNEL\_TRANSFERRED ```ts const EVENT_CHANNEL_TRANSFERRED: "channel:transferred"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:17 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EVENT\_CHANNEL\_UPDATED ## Variable: EVENT\_CHANNEL\_UPDATED ```ts const EVENT_CHANNEL_UPDATED: "channel:updated"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/channel.ts:13 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EVENT\_COMMENT\_ADDED ## Variable: EVENT\_COMMENT\_ADDED ```ts const EVENT_COMMENT_ADDED: "comment:added"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:16 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EVENT\_COMMENT\_DELETED ## Variable: EVENT\_COMMENT\_DELETED ```ts const EVENT_COMMENT_DELETED: "comment:deleted"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:19 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EVENT\_COMMENT\_EDITED ## Variable: EVENT\_COMMENT\_EDITED ```ts const EVENT_COMMENT_EDITED: "comment:edited"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:20 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EVENT\_COMMENT\_HOOK\_METADATA\_SET ## Variable: EVENT\_COMMENT\_HOOK\_METADATA\_SET ```ts const EVENT_COMMENT_HOOK_METADATA_SET: "comment:hook:metadata:set"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:17 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EVENT\_COMMENT\_MODERATION\_STATUS\_UPDATED ## Variable: EVENT\_COMMENT\_MODERATION\_STATUS\_UPDATED ```ts const EVENT_COMMENT_MODERATION_STATUS_UPDATED: "comment:moderation:status:updated"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:21 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EVENT\_COMMENT\_REACTIONS\_UPDATED ## Variable: EVENT\_COMMENT\_REACTIONS\_UPDATED ```ts const EVENT_COMMENT_REACTIONS_UPDATED: "comment:reactions:updated"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:23 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EVENT\_COMMENT\_REFERENCES\_UPDATED ## Variable: EVENT\_COMMENT\_REFERENCES\_UPDATED ```ts const EVENT_COMMENT_REFERENCES_UPDATED: "comment:references:updated"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/comment.ts:25 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EVENT\_TEST ## Variable: EVENT\_TEST ```ts const EVENT_TEST: "test"; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/test.ts:4 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EventBaseSchema ## Variable: EventBaseSchema ```ts const EventBaseSchema: ZodObject<{ uid: ZodString; }, "strip", ZodTypeAny, { uid: string; }, { uid: string; }>; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/shared.ts:40 [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EventFromChainSchema ## Variable: EventFromChainSchema ```ts const EventFromChainSchema: ZodObject<{ blockNumber: ZodEffects; chainId: ZodNumber; logIndex: ZodNumber; txHash: ZodEffects; }, "strip", ZodTypeAny, { blockNumber: bigint; chainId: number; logIndex: number; txHash: `0x${string}`; }, { blockNumber: string; chainId: number; logIndex: number; txHash: `0x${string}`; }>; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/shared.ts:63 Common schema for all events coming from a chain. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / EventV1Schema ## Variable: EventV1Schema ```ts const EventV1Schema: ZodObject<{ uid: ZodString; } & { version: ZodLiteral<1>; }, "strip", ZodTypeAny, { uid: string; version: 1; }, { uid: string; version: 1; }>; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/shared.ts:51 Common schema for all v1 events. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / ISO8601DateSchema ## Variable: ISO8601DateSchema ```ts const ISO8601DateSchema: ZodEffects; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/shared.ts:25 ISO 8601 date schema. Used to convert the ISO 8601 date from JSON to date. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / MetadataSetOperationSchema ## Variable: MetadataSetOperationSchema ```ts const MetadataSetOperationSchema: ZodDiscriminatedUnion<"type", [ZodObject<{ key: ZodEffects; type: ZodLiteral<"delete">; }, "strip", ZodTypeAny, { key: `0x${string}`; type: "delete"; }, { key: `0x${string}`; type: "delete"; }>, ZodObject<{ key: ZodEffects; type: ZodLiteral<"create">; value: ZodEffects; }, "strip", ZodTypeAny, { key: `0x${string}`; type: "create"; value: `0x${string}`; }, { key: `0x${string}`; type: "create"; value: `0x${string}`; }>, ZodObject<{ key: ZodEffects; type: ZodLiteral<"update">; value: ZodEffects; }, "strip", ZodTypeAny, { key: `0x${string}`; type: "update"; value: `0x${string}`; }, { key: `0x${string}`; type: "update"; value: `0x${string}`; }>]>; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/shared.ts:85 Common schema for all metadata set operations. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / StringBigintSchema ## Variable: StringBigintSchema ```ts const StringBigintSchema: ZodEffects; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/shared.ts:7 Stringified bigint schema. Used to convert the stringified bigint from JSON to bigint. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / TestEventSchema ## Variable: TestEventSchema ```ts const TestEventSchema: ZodObject; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/test.ts:14 An event sent to webhook when a test event is triggered. [**@ecp.eth/sdk**](../../../index.mdx) *** [@ecp.eth/sdk](/sdk-reference/index.mdx) / [indexer/webhooks](/sdk-reference/indexer/webhooks/index.mdx) / TestEvents ## Variable: TestEvents ```ts const TestEvents: readonly ["test"]; ``` Defined in: packages/sdk/src/indexer/webhooks/schemas/test.ts:9 Test events.