/** * @file Hive type definitions related to comments and posting. * @author Johan Nordberg * @license * Copyright (c) 2017 Johan Nordberg. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * 1. Redistribution of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * 2. Redistribution in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of the copyright holder nor the names of its contributors * may be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * * You acknowledge that this software is not designed, licensed or intended for use * in the design, construction, operation or maintenance of any military facility. */ import { Asset } from "./asset.js"; /** * Core Hive comment object. * * @remarks * Hive uses the same object for top-level posts and replies. A top-level post * has an empty `parent_author`; replies point at a parent author and permlink. * Payout, vote, and beneficiary fields are included because condenser combines * social and reward state in this shape. * * @example * ```ts * const posts = await client.database.getDiscussions('trending', { * tag: 'hive-139531', * limit: 5 * }) * * console.log(posts[0].author, posts[0].permlink) * ``` */ export interface Comment { id: number; category: string; parent_author: string; parent_permlink: string; author: string; permlink: string; title: string; body: string; json_metadata: string; last_update: string; created: string; active: string; last_payout: string; depth: number; children: number; net_rshares: string; abs_rshares: string; vote_rshares: string; children_abs_rshares: string; cashout_time: string; max_cashout_time: string; total_vote_weight: number; reward_weight: number; total_payout_value: Asset | string; curator_payout_value: Asset | string; author_rewards: string; net_votes: number; root_comment: number; max_accepted_payout: string; percent_hbd: number; allow_replies: boolean; allow_votes: boolean; allow_curation_rewards: boolean; beneficiaries: BeneficiaryRoute[]; } export interface VoteState { voter: string; weight: number | string; rshares: number | string; percent: number; reputation: number | string; time: string; } /** * Hivemind/condenser discussion record for posts and enriched comments. * * @remarks * `Discussion` extends the base comment object with URL, root title, active * votes, reblog data, pending payout values, and reputation fields used by Hive * front ends. * * @example * ```ts * const [post] = await client.hivemind.getRankedPosts({ * sort: 'hot', * tag: 'hive-139531', * limit: 1 * }) * * console.log(post.url, post.pending_payout_value) * ``` */ export interface Discussion extends Comment { url: string; root_title: string; pending_payout_value: Asset | string; total_pending_payout_value: Asset | string; active_votes: VoteState[]; replies: string[]; author_reputation: number; promoted: Asset | string; body_length: string; reblogged_by: string[]; first_reblogged_by?: string; first_reblogged_on?: string; } /** * Beneficiary payout route attached to comment options. * * @remarks * Weights are expressed in hundredths of a percent: `10000` means 100%. * * @example * ```ts * const beneficiary: BeneficiaryRoute = { * account: 'srbde', * weight: 500 * } * ``` */ export interface BeneficiaryRoute { account: string; weight: number; }