@ecency/sdk 2.0.3 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/node/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/modules/core/mutations/use-broadcast-mutation.ts","../../src/modules/core/errors/chain-errors.ts","../../src/modules/core/config.ts","../../src/modules/core/mutations/broadcast-json.ts","../../src/modules/core/queries-manager.ts","../../src/modules/core/utils/decoder-encoder.ts","../../src/modules/core/utils/parse-asset.ts","../../src/modules/core/utils/get-bound-fetch.ts","../../src/modules/core/utils/is-community.ts","../../src/modules/core/utils/pagination-helpers.ts","../../src/modules/core/utils/vests-to-hp.ts","../../src/modules/core/utils/is-empty-date.ts","../../src/modules/core/queries/get-dynamic-props-query-options.ts","../../src/modules/core/queries/get-reward-fund-query-options.ts","../../src/modules/core/query-keys.ts","../../src/modules/accounts/queries/get-account-full-query-options.ts","../../src/modules/accounts/utils/profile-metadata.ts","../../src/modules/accounts/utils/parse-accounts.ts","../../src/modules/accounts/queries/get-accounts-query-options.ts","../../src/modules/accounts/queries/get-follow-count-query-options.ts","../../src/modules/accounts/queries/get-followers-query-options.ts","../../src/modules/accounts/queries/get-following-query-options.ts","../../src/modules/accounts/queries/get-muted-users-query-options.ts","../../src/modules/accounts/queries/lookup-accounts-query-options.ts","../../src/modules/accounts/queries/search-accounts-by-username-query-options.ts","../../src/modules/accounts/queries/check-username-wallets-pending-query-options.ts","../../src/modules/accounts/queries/get-relationship-between-accounts-query-options.ts","../../src/modules/accounts/queries/get-account-subscriptions-query-options.ts","../../src/modules/accounts/queries/get-bookmarks-query-options.ts","../../src/modules/accounts/queries/get-favourites-query-options.ts","../../src/modules/accounts/queries/check-favourite-query-options.ts","../../src/modules/accounts/queries/get-account-recoveries-query-options.ts","../../src/modules/accounts/queries/get-account-pending-recovery-query-options.ts","../../src/modules/accounts/queries/get-account-reputations-query-options.ts","../../src/modules/accounts/queries/get-transactions-infinite-query-options.ts","../../src/modules/accounts/queries/get-bots-query-options.ts","../../src/modules/accounts/queries/get-referrals-infinite-query-options.ts","../../src/modules/accounts/queries/get-referrals-stats-query-options.ts","../../src/modules/accounts/queries/get-friends-infinite-query-options.ts","../../src/modules/accounts/queries/get-search-friends-query-options.ts","../../src/modules/posts/queries/get-trending-tags-query-options.ts","../../src/modules/posts/queries/get-trending-tags-with-stats-query-options.ts","../../src/modules/posts/queries/get-fragments-query-options.ts","../../src/modules/posts/queries/get-promoted-posts-query-options.ts","../../src/modules/posts/queries/get-entry-active-votes-query-options.ts","../../src/modules/posts/queries/get-user-post-vote-query-options.ts","../../src/modules/posts/queries/get-content-query-options.ts","../../src/modules/posts/queries/get-content-replies-query-options.ts","../../src/modules/posts/queries/get-post-header-query-options.ts","../../src/modules/posts/utils/filter-dmca-entries.ts","../../src/modules/posts/queries/get-post-query-options.ts","../../src/modules/bridge/requests.ts","../../src/modules/posts/queries/get-discussions-query-options.ts","../../src/modules/posts/queries/get-account-posts-query-options.ts","../../src/modules/posts/queries/get-posts-ranked-query-options.ts","../../src/modules/posts/queries/get-reblogs-query-options.ts","../../src/modules/posts/queries/get-reblogged-by-query-options.ts","../../src/modules/posts/queries/get-schedules-query-options.ts","../../src/modules/posts/queries/get-drafts-query-options.ts","../../src/modules/posts/queries/get-images-query-options.ts","../../src/modules/posts/queries/get-comment-history-query-options.ts","../../src/modules/posts/queries/get-deleted-entry-query-options.ts","../../src/modules/posts/queries/get-post-tips-query-options.ts","../../src/modules/posts/utils/waves-helpers.ts","../../src/modules/posts/queries/get-waves-by-host-query-options.ts","../../src/modules/posts/queries/get-waves-by-tag-query-options.ts","../../src/modules/posts/queries/get-waves-following-query-options.ts","../../src/modules/posts/queries/get-waves-trending-tags-query-options.ts","../../src/modules/posts/queries/get-normalize-post-query-options.ts","../../src/modules/accounts/queries/get-account-vote-history-infinite-query-options.ts","../../src/modules/accounts/queries/get-profiles-query-options.ts","../../src/modules/accounts/mutations/use-account-update.ts","../../src/modules/accounts/mutations/use-account-relations-update.ts","../../src/modules/operations/builders/content.ts","../../src/modules/operations/builders/wallet.ts","../../src/modules/operations/builders/social.ts","../../src/modules/operations/builders/governance.ts","../../src/modules/operations/builders/community.ts","../../src/modules/operations/builders/market.ts","../../src/modules/operations/builders/account.ts","../../src/modules/operations/builders/ecency.ts","../../src/modules/accounts/mutations/use-follow.ts","../../src/modules/accounts/mutations/use-unfollow.ts","../../src/modules/accounts/mutations/bookmarks/use-account-bookmark-add.ts","../../src/modules/accounts/mutations/bookmarks/use-account-bookmark-delete.ts","../../src/modules/accounts/mutations/favourites/use-account-favourite-add.ts","../../src/modules/accounts/mutations/favourites/use-account-favourite-delete.ts","../../src/modules/accounts/mutations/use-account-update-key-auths.ts","../../src/modules/accounts/mutations/use-account-update-password.ts","../../src/modules/accounts/mutations/use-account-revoke-posting.ts","../../src/modules/accounts/mutations/use-account-update-recovery.ts","../../src/modules/accounts/mutations/use-account-revoke-key.ts","../../src/modules/accounts/mutations/use-claim-account.ts","../../src/modules/accounts/mutations/use-grant-posting-permission.ts","../../src/modules/accounts/mutations/use-create-account.ts","../../src/modules/accounts/utils/account-power.ts","../../src/modules/operations/authority-map.ts","../../src/modules/operations/mutations/sign-operation-by-key.ts","../../src/modules/operations/mutations/sign-operation-by-keychain.ts","../../src/modules/operations/mutations/sign-operation-by-hivesigner.ts","../../src/modules/operations/queries/get-chain-properties-query-options.ts","../../src/modules/posts/mutations/add-fragment.ts","../../src/modules/posts/mutations/edit-fragment.ts","../../src/modules/posts/mutations/remove-fragment.ts","../../src/modules/private-api/requests.ts","../../src/modules/posts/mutations/use-add-draft.ts","../../src/modules/posts/mutations/use-update-draft.ts","../../src/modules/posts/mutations/use-delete-draft.ts","../../src/modules/posts/mutations/use-add-schedule.ts","../../src/modules/posts/mutations/use-delete-schedule.ts","../../src/modules/posts/mutations/use-move-schedule.ts","../../src/modules/posts/mutations/use-add-image.ts","../../src/modules/posts/mutations/use-delete-image.ts","../../src/modules/posts/mutations/use-upload-image.ts","../../src/modules/posts/cache/entries-cache-management.ts","../../src/modules/posts/mutations/use-vote.ts","../../src/modules/posts/mutations/use-reblog.ts","../../src/modules/posts/mutations/use-comment.ts","../../src/modules/posts/cache/discussions-cache-utils.ts","../../src/modules/posts/mutations/use-delete-comment.ts","../../src/modules/posts/mutations/use-cross-post.ts","../../src/modules/posts/mutations/use-update-reply.ts","../../src/modules/posts/mutations/use-promote.ts","../../src/modules/posts/utils/validate-post-creating.ts","../../src/modules/analytics/mutations/index.ts","../../src/modules/analytics/mutations/use-record-activity.ts","../../src/modules/analytics/queries/get-discover-leaderboard-query-options.ts","../../src/modules/analytics/queries/get-discover-curation-query-options.ts","../../src/modules/analytics/queries/get-page-stats-query-options.ts","../../src/modules/integrations/3speak/queries/index.ts","../../src/modules/integrations/hivesigner/queries/index.ts","../../src/modules/integrations/hivesigner/queries/get-decode-memo-query-options.ts","../../src/modules/integrations/hivesigner/index.ts","../../src/modules/integrations/3speak/queries/get-account-token-query-options.ts","../../src/modules/integrations/3speak/queries/get-account-videos-query-options.ts","../../src/modules/integrations/3speak/index.ts","../../src/modules/integrations/hiveposh/queries/get-hiveposh-links-query-options.ts","../../src/modules/integrations/plausible/queries/get-stats-query-options.ts","../../src/modules/resource-credits/queries/get-rc-stats-query-options.ts","../../src/modules/resource-credits/queries/get-account-rc-query-options.ts","../../src/modules/games/queries/game-status-check-query-options.ts","../../src/modules/games/mutations/game-claim.ts","../../src/modules/communities/mutations/use-subscribe-community.ts","../../src/modules/communities/mutations/use-unsubscribe-community.ts","../../src/modules/communities/mutations/use-mute-post.ts","../../src/modules/communities/mutations/use-set-community-role.ts","../../src/modules/communities/mutations/use-update-community.ts","../../src/modules/communities/mutations/use-register-community-rewards.ts","../../src/modules/communities/mutations/use-pin-post.ts","../../src/modules/communities/queries/get-communities-query-options.ts","../../src/modules/communities/queries/get-community-context-query-options.ts","../../src/modules/communities/queries/get-community-query-options.ts","../../src/modules/communities/queries/get-community-subscribers-query-options.ts","../../src/modules/communities/queries/get-account-notifications-infinite-query-options.ts","../../src/modules/communities/queries/get-rewarded-communities-query-options.ts","../../src/modules/communities/types/community.ts","../../src/modules/communities/utils/index.ts","../../src/modules/notifications/queries/get-notifications-unread-count-query-options.ts","../../src/modules/notifications/queries/get-notifications-infinite-query-options.ts","../../src/modules/notifications/enums/notification-filter.ts","../../src/modules/notifications/enums/notify-types.ts","../../src/modules/notifications/queries/get-notifications-settings-query-options.ts","../../src/modules/notifications/queries/get-announcements-query-options.ts","../../src/modules/notifications/mutations/use-mark-notifications-read.ts","../../src/modules/notifications/mutations/use-set-last-read.ts","../../src/modules/proposals/queries/get-proposal-query-options.ts","../../src/modules/proposals/queries/get-proposals-query-options.ts","../../src/modules/proposals/queries/get-proposal-votes-query-options.ts","../../src/modules/proposals/queries/get-user-proposal-votes-query-options.ts","../../src/modules/proposals/mutations/use-proposal-vote.ts","../../src/modules/proposals/mutations/use-proposal-create.ts","../../src/modules/wallet/queries/get-vesting-delegations-query-options.ts","../../src/modules/wallet/queries/get-conversion-requests-query-options.ts","../../src/modules/wallet/queries/get-collateralized-conversion-requests-query-options.ts","../../src/modules/wallet/queries/get-savings-withdraw-from-query-options.ts","../../src/modules/wallet/queries/get-withdraw-routes-query-options.ts","../../src/modules/wallet/queries/get-open-orders-query-options.ts","../../src/modules/wallet/queries/get-outgoing-rc-delegations-infinite-query-options.ts","../../src/modules/wallet/queries/get-incoming-rc-query-options.ts","../../src/modules/wallet/queries/get-received-vesting-shares-query-options.ts","../../src/modules/wallet/queries/get-recurrent-transfers-query-options.ts","../../src/modules/wallet/queries/get-portfolio-query-options.ts","../../src/modules/wallet/queries/get-hive-asset-general-info-query-options.ts","../../src/modules/wallet/queries/get-hbd-asset-general-info-query-options.ts","../../src/modules/wallet/queries/get-hive-power-asset-general-info-query-options.ts","../../src/modules/wallet/consts/hive-account-operation-groups.ts","../../src/modules/wallet/consts/hive-operation-list.ts","../../src/modules/wallet/consts/hive-operation-orders.ts","../../src/modules/wallet/queries/get-hive-asset-transactions-query-options.ts","../../src/modules/wallet/queries/get-hbd-asset-transactions-query-options.ts","../../src/modules/wallet/queries/get-hive-power-asset-transactions-query-options.ts","../../src/modules/wallet/queries/get-hive-asset-metric-query-options.ts","../../src/modules/wallet/queries/get-hive-asset-withdrawal-routes-query-options.ts","../../src/modules/wallet/queries/get-hive-power-delegates-query-options.ts","../../src/modules/wallet/queries/get-hive-power-delegatings-query-options.ts","../../src/modules/market/queries/get-order-book-query-options.ts","../../src/modules/market/queries/get-market-statistics-query-options.ts","../../src/modules/market/queries/get-market-history-query-options.ts","../../src/modules/market/queries/get-hive-hbd-stats-query-options.ts","../../src/modules/market/queries/get-market-data-query-options.ts","../../src/modules/market/queries/get-trade-history-query-options.ts","../../src/modules/market/queries/get-feed-history-query-options.ts","../../src/modules/market/queries/get-current-median-history-price-query-options.ts","../../src/modules/market/mutations/use-limit-order-create.ts","../../src/modules/market/mutations/use-limit-order-cancel.ts","../../src/modules/market/requests.ts","../../src/modules/hive-engine/requests.ts","../../src/modules/hive-engine/queries/get-hive-engine-tokens-balances-query-options.ts","../../src/modules/hive-engine/queries/get-hive-engine-tokens-market-query-options.ts","../../src/modules/hive-engine/queries/get-hive-engine-tokens-metadata-query-options.ts","../../src/modules/hive-engine/queries/get-hive-engine-token-transactions-query-options.ts","../../src/modules/hive-engine/queries/get-hive-engine-token-metrics-query-options.ts","../../src/modules/hive-engine/queries/get-hive-engine-unclaimed-rewards-query-options.ts","../../src/modules/hive-engine/queries/get-all-hive-engine-tokens-query-options.ts","../../src/modules/hive-engine/utils/formatted-number.ts","../../src/modules/hive-engine/utils/hive-engine-token.ts","../../src/modules/hive-engine/queries/get-hive-engine-balances-with-usd-query-options.ts","../../src/modules/hive-engine/queries/get-hive-engine-token-general-info-query-options.ts","../../src/modules/spk/requests.ts","../../src/modules/spk/queries/get-spk-wallet-query-options.ts","../../src/modules/spk/queries/get-spk-markets-query-options.ts","../../src/modules/spk/utils/reward-spk.ts","../../src/modules/spk/queries/get-spk-asset-general-info-query-options.ts","../../src/modules/spk/queries/get-larynx-asset-general-info-query-options.ts","../../src/modules/spk/queries/get-larynx-power-asset-general-info-query-options.ts","../../src/modules/points/queries/get-points-query-options.ts","../../src/modules/points/queries/get-points-asset-general-info-query-options.ts","../../src/modules/points/queries/get-points-asset-transactions-query-options.ts","../../src/modules/wallet/queries/get-account-wallet-asset-info-query-options.ts","../../src/modules/wallet/types/asset-operation.ts","../../src/modules/wallet/mutations/use-transfer.ts","../../src/modules/wallet/mutations/use-transfer-point.ts","../../src/modules/wallet/mutations/use-delegate-vesting-shares.ts","../../src/modules/wallet/mutations/use-set-withdraw-vesting-route.ts","../../src/modules/wallet/mutations/use-transfer-spk.ts","../../src/modules/wallet/mutations/use-transfer-larynx.ts","../../src/modules/wallet/mutations/use-transfer-engine-token.ts","../../src/modules/wallet/mutations/use-transfer-to-savings.ts","../../src/modules/wallet/mutations/use-transfer-from-savings.ts","../../src/modules/wallet/mutations/use-transfer-to-vesting.ts","../../src/modules/wallet/mutations/use-withdraw-vesting.ts","../../src/modules/wallet/mutations/use-convert.ts","../../src/modules/wallet/mutations/use-claim-interest.ts","../../src/modules/wallet/mutations/use-claim-rewards.ts","../../src/modules/wallet/mutations/use-lock-larynx.ts","../../src/modules/wallet/mutations/use-power-larynx.ts","../../src/modules/wallet/mutations/use-delegate-engine-token.ts","../../src/modules/wallet/mutations/use-undelegate-engine-token.ts","../../src/modules/wallet/mutations/use-stake-engine-token.ts","../../src/modules/wallet/mutations/use-unstake-engine-token.ts","../../src/modules/wallet/mutations/use-claim-engine-rewards.ts","../../src/modules/wallet/mutations/use-engine-market-order.ts","../../src/modules/wallet/mutations/use-wallet-operation.ts","../../src/modules/wallet/mutations/use-delegate-rc.ts","../../src/modules/witnesses/mutations/use-witness-vote.ts","../../src/modules/witnesses/mutations/use-witness-proxy.ts","../../src/modules/witnesses/queries/get-witnesses-query-options.ts","../../src/modules/points/types/point-transaction-type.ts","../../src/modules/points/mutations/use-claim-points.ts","../../src/modules/search/queries/get-search-query-options.ts","../../src/modules/search/queries/get-similar-entries-query-options.ts","../../src/modules/search/queries/get-search-account-query-options.ts","../../src/modules/search/queries/get-search-topics-query-options.ts","../../src/modules/search/queries/get-search-api-infinite-query-options.ts","../../src/modules/search/queries/get-search-path-query-options.ts","../../src/modules/search/requests.ts","../../src/modules/promotions/queries/get-boost-plus-prices-query-options.ts","../../src/modules/promotions/queries/get-promote-price-query-options.ts","../../src/modules/promotions/queries/get-boost-plus-account-prices-query-options.ts","../../src/modules/promotions/mutations/use-boost-plus.ts","../../src/modules/auth/requests.ts"],"names":["ErrorType","parseChainError","error","errorDescription","errorMessage","errorString","testPattern","pattern","message","formatError","parsed","shouldTriggerAuthFallback","type","isResourceCreditsError","isInfoError","isNetworkError","broadcastWithMethod","method","username","ops","auth","authority","fetchedKey","fetchedToken","adapter","key","privateKey","PrivateKey","CONFIG","token","hs","broadcastWithFallback","loginType","hasPostingAuth","operationName","selectedMethod","hsError","chain","errors","shouldSkip","skipReason","prefetchedKey","prefetchedToken","skipReasons","errorMessages","useBroadcastMutation","mutationKey","operations","onSuccess","options","useMutation","payload","postingKey","accessToken","isDevelopment","getHeliusApiKey","Client","QueryClient","ConfigManager","setQueryClient","client","setPrivateApiHost","host","getValidatedBaseUrl","setImageHost","analyzeRedosRisk","unboundedRange","match","min","max","testRegexPerformance","regex","adversarialInputs","maxExecutionTime","input","start","duration","err","safeCompileRegex","maxLength","staticAnalysis","compileErr","runtimeTest","setDmcaLists","lists","coerceList","value","item","resolved","r","rejectedTagCount","broadcastJson","id","jjson","makeQueryClient","getQueryClient","EcencyQueriesManager","getQueryData","queryKey","getInfiniteQueryData","prefetchQuery","prefetchInfiniteQuery","generateClientServerQuery","useQuery","generateClientServerInfiniteQuery","useInfiniteQuery","encodeObj","o","decodeObj","dataToParse","Symbol","NaiMap","parseAsset","sval","sp","cachedFetch","getBoundFetch","isCommunity","isWrappedResponse","response","normalizeToWrappedResponse","limit","vestsToHp","vests","hivePerMVests","isEmptyDate","s","getDynamicPropsQueryOptions","queryOptions","QueryKeys","rawGlobalDynamic","rawFeedHistory","rawChainProps","rawRewardFund","totalVestingSharesAmount","totalVestingFundAmount","base","quote","fundRecentClaims","fundRewardBalance","hbdPrintRate","hbdInterestRate","headBlock","totalVestingFund","totalVestingShares","virtualSupply","vestingRewardPercent","accountCreationFee","getRewardFundQueryOptions","fundName","entryPath","author","permlink","filter","observer","startAuthor","startPermlink","activeUsername","sort","tag","order","onlyMeta","hours","usernames","following","mode","followType","query","code","follower","startFollowing","startFollower","excludeList","accounts","group","targetUsername","reference","target","name","communityName","account","proposalId","voter","q","hideLow","since","scrollId","votes","what","user","onlyEnabled","currency","filterKey","bucketSeconds","asset","seconds","startDate","endDate","coin","vsCurrency","fromTs","toTs","end","url","dimensions","metrics","dateRange","gameType","getAccountFullQueryOptions","profile","parseProfileMetadata","follow_stats","reputationValue","sanitizeTokens","tokens","meta","rest","safeMeta","postingJsonMetadata","extractAccountProfile","data","buildProfileMetadata","existingProfile","profileTokens","_ignoredVersion","profileRest","metadata","xe","nextTokens","parseAccounts","rawAccounts","x","jsonMetadata","getAccountsQueryOptions","getFollowCountQueryOptions","getFollowersQueryOptions","getFollowingQueryOptions","getMutedUsersQueryOptions","lookupAccountsQueryOptions","getSearchAccountsByUsernameQueryOptions","RESERVED_META_KEYS","checkUsernameWalletsPendingQueryOptions","wallets","walletItem","symbol","sanitizedMeta","address","showFlag","baseCandidate","metaTokenCandidates","metaSymbol","metaValue","getRelationshipBetweenAccountsQueryOptions","getAccountSubscriptionsQueryOptions","getBookmarksQueryOptions","getBookmarksInfiniteQueryOptions","infiniteQueryOptions","pageParam","json","lastPage","getFavouritesQueryOptions","getFavouritesInfiniteQueryOptions","checkFavouriteQueryOptions","result","getAccountRecoveriesQueryOptions","getAccountPendingRecoveryQueryOptions","getAccountReputationsQueryOptions","utils","ACCOUNT_OPERATION_GROUPS","ALL_ACCOUNT_OPERATIONS","acc","val","getTransactionsInfiniteQueryOptions","filters","num","operation","b","getBotsQueryOptions","getReferralsInfiniteQueryOptions","maxId","baseUrl","nextMaxId","getReferralsStatsQueryOptions","getFriendsInfiniteQueryOptions","enabled","accountNames","e","a","SEARCH_LIMIT","getSearchFriendsQueryOptions","getTrendingTagsQueryOptions","afterTag","tags","getTrendingTagsWithStatsQueryOptions","getFragmentsQueryOptions","getFragmentsInfiniteQueryOptions","getPromotedPostsQuery","getEntryActiveVotesQueryOptions","entry","getUserPostVoteQueryOptions","getContentQueryOptions","getContentRepliesQueryOptions","getPostHeaderQueryOptions","filterDmcaEntry","entryOrEntries","applyFilter","getPostQueryOptions","cleanPermlink","bridgeApiCall","endpoint","params","resolvePost","post","resp","getPost","resolvePosts","posts","validatedPosts","validateEntry","p","getPostsRanked","start_author","start_permlink","getAccountPosts","newEntry","requiredStringProps","prop","validatedEntry","getPostHeader","getDiscussion","validatedResp","getCommunity","getCommunities","last","normalizePost","getSubscriptions","getSubscribers","community","getRelationshipBetweenAccounts","getProfiles","SortOrder","sortDiscussions","discussion","allPayout","c","absNegative","isPinned","sortOrders","_a","_b","keyA","keyB","sorted","pinnedIndex","i","pinned","getDiscussionsQueryOptions","results","oldData","newData","optimisticEntries","fetchedPermlinks","missingOptimistic","opt","getDiscussionQueryOptions","getAccountPostsInfiniteQueryOptions","rpcParams","hasNextPage","getAccountPostsQueryOptions","getPostsRankedInfiniteQueryOptions","_options","sanitizedTag","pinnedEntry","nonPinnedEntries","combined","getPostsRankedQueryOptions","getReblogsQueryOptions","getRebloggedByQueryOptions","getSchedulesQueryOptions","getSchedulesInfiniteQueryOptions","getDraftsQueryOptions","getDraftsInfiniteQueryOptions","fetchUserImages","getImagesQueryOptions","getGalleryImagesQueryOptions","getImagesInfiniteQueryOptions","getCommentHistoryQueryOptions","signal","makeEntryPath","cleanAuthor","normalizedAuthor","normalizedPermlink","getDeletedEntryQueryOptions","isValid","history","body","title","getPostTipsQueryOptions","isEnabled","normalizeContainer","normalizeParent","normalizeWaveEntryFromApi","containerSource","container","parent","toEntryArray","getVisibleFirstLevelThreadItems","discussionItemsRaw","discussionItems","firstLevelItems","parent_author","parent_permlink","mapThreadItemsToWaveEntries","items","THREAD_CONTAINER_BATCH_SIZE","MAX_CONTAINERS_TO_SCAN","getThreads","scannedContainers","skipContainerId","containers","normalizedContainers","visibleItems","lastContainer","getWavesByHostQueryOptions","DEFAULT_TAG_FEED_LIMIT","getWavesByTagQueryOptions","getWavesFollowingQueryOptions","normalizedUsername","flattened","getWavesTrendingTagsQueryOptions","getNormalizePostQueryOptions","isEntry","getDays","createdDate","past","getAccountVoteHistoryInfiniteQueryOptions","dayLimit","historyObj","filtered","entries","obj","firstHistory","getProfilesQueryOptions","useAccountUpdate","queryClient","useQueryClient","_data","variables","Ue","useAccountRelationsUpdate","onError","kind","relationsQuery","actualRelation","buildVoteOp","weight","buildCommentOp","parentAuthor","parentPermlink","buildCommentOptionsOp","maxAcceptedPayout","percentHbd","allowVotes","allowCurationRewards","extensions","buildDeleteCommentOp","buildReblogOp","deleteReblog","buildTransferOp","from","to","amount","memo","buildMultiTransferOps","destinations","dest","buildRecurrentTransferOp","recurrence","executions","buildTransferToSavingsOp","buildTransferFromSavingsOp","requestId","buildCancelTransferFromSavingsOp","buildClaimInterestOps","buildTransferToVestingOp","buildWithdrawVestingOp","vestingShares","buildDelegateVestingSharesOp","delegator","delegatee","buildSetWithdrawVestingRouteOp","fromAccount","toAccount","percent","autoVest","buildConvertOp","owner","buildCollateralizedConvertOp","buildSpkCustomJsonOp","buildEngineOp","contractAction","contractPayload","contractName","buildEngineClaimOp","buildDelegateRcOp","delegatees","maxRc","delegateeArray","d","buildFollowOp","buildUnfollowOp","buildIgnoreOp","buildUnignoreOp","buildSetLastReadOps","date","lastReadDate","notifyOp","ecencyNotifyOp","buildWitnessVoteOp","witness","approve","buildWitnessProxyOp","proxy","buildProposalCreateOp","creator","buildProposalVoteOp","proposalIds","buildRemoveProposalOp","proposalOwner","buildUpdateProposalOp","dailyPay","subject","buildSubscribeOp","buildUnsubscribeOp","buildSetRoleOp","role","buildUpdateCommunityOp","props","buildPinPostOp","pin","buildMutePostOp","notes","mute","buildMuteUserOp","buildFlagPostOp","BuySellTransactionType","OrderIdPrefix","buildLimitOrderCreateOp","amountToSell","minToReceive","fillOrKill","expiration","orderId","formatNumber","decimals","buildLimitOrderCreateOpWithType","orderType","idPrefix","expirationStr","formattedAmountToSell","formattedMinToReceive","buildLimitOrderCancelOp","buildClaimRewardBalanceOp","rewardHive","rewardHbd","rewardVests","buildAccountUpdateOp","active","posting","memoKey","buildAccountUpdate2Op","buildAccountCreateOp","newAccountName","keys","fee","buildCreateClaimedAccountOp","buildClaimAccountOp","buildGrantPostingPermissionOp","currentPosting","grantedAccount","weightThreshold","existingIndex","newAccountAuths","newPosting","buildRevokePostingPermissionOp","revokedAccount","buildChangeRecoveryAccountOp","accountToRecover","newRecoveryAccount","buildRequestAccountRecoveryOp","recoveryAccount","newOwnerAuthority","buildRecoverAccountOp","recentOwnerAuthority","buildBoostOp","buildBoostOpWithPoints","points","buildBoostPlusOp","buildPromoteOp","buildPointTransferOp","sender","receiver","buildMultiPointTransferOps","destArray","buildCommunityRegistrationOp","buildActiveCustomJsonOp","operationId","buildPostingCustomJsonOp","useFollow","_result","useUnfollow","useBookmarkAdd","useBookmarkDelete","bookmarkId","useAccountFavouriteAdd","useAccountFavouriteDelete","dedupeAndSortKeyAuths","existing","additions","merged","useAccountUpdateKeyAuths","accountData","keepCurrent","currentKey","keysToRevoke","keysToRevokeByAuthority","prepareAuth","keyName","Xe","allKeysToRevoke","existingKeys","values","useAccountUpdatePassword","updateKeys","newPassword","currentPassword","useAccountRevokePosting","accountName","operationBody","ctx","useAccountUpdateRecovery","email","useAccountRevokeKey","revokingKey","tr","useClaimAccount","useGrantPostingPermission","useCreateAccount","HIVE_VOTING_MANA_REGENERATION_SECONDS","vestsToRshares","votingPowerValue","votePerc","toDhiveAccountForVotingMana","votingPower","powerRechargeTime","power","downVotingPower","totalShares","elapsed","maxMana","currentMana","currentManaPerc","rcPower","votingValue","dynamicProps","totalVests","vesting","received","delegated","rShares","OPERATION_AUTHORITY_MAP","getCustomJsonAuthority","customJsonOp","opType","customJson","getProposalAuthority","proposalOp","getOperationAuthority","op","getRequiredAuthority","highestAuthority","useSignOperationByKey","keyOrSeed","cryptoUtils","useSignOperationByKeychain","keyType","useSignOperationByHivesigner","callbackUri","getChainPropertiesQueryOptions","useAddFragment","page","index","useEditFragment","fragmentId","fragment","useRemoveFragment","parseJsonResponse","errorData","text","signUp","referral","subscribeEmail","usrActivity","ty","bl","tx","getNotifications","saveNotificationSetting","system","allows_notify","notify_types","getNotificationSetting","markNotifications","addImage","uploadImage","file","fetchApi","formData","deleteImage","imageId","addDraft","updateDraft","draftId","deleteDraft","addSchedule","schedule","reblog","deleteSchedule","moveSchedule","getPromotedPost","onboardEmail","friend","dataBody","useAddDraft","qc","useUpdateDraft","useDeleteDraft","prev","useAddSchedule","useDeleteSchedule","useMoveSchedule","useAddImage","useDeleteImage","img","useUploadImage","getEntryFromCache","setEntryInCache","mutateEntry","updater","path","updated","EntriesCacheManagement","updateVotes","payout","updateReblogsCount","count","updateRepliesCount","addReply","reply","updateEntries","invalidateEntry","getEntry","useVote","newVotes","v","newPayout","useReblog","newCount","useComment","beneficiaries","sortedBeneficiaries","isPost","activityType","queriesToInvalidate","discussionsAuthor","discussionsPermlink","addOptimisticDiscussionEntry","rootAuthor","rootPermlink","queries","removeOptimisticDiscussionEntry","snapshots","restoreDiscussionSnapshots","updateEntryInCache","updates","previous","restoreEntryInCache","useDeleteComment","_error","_variables","context","useCrossPost","useUpdateReply","usePromote","DEFAULT_VALIDATE_POST_DELAYS","delay","ms","resolve","getContent","validatePostCreating","attempts","delays","waitMs","mutations_exports","__export","useRecordActivity","getLocationInfo","locationInfo","domain","getDiscoverLeaderboardQueryOptions","getDiscoverCurationQueryOptions","accountsResponse","element","curator","receivedVestingShares","delegatedVestingShares","vestingWithdrawRate","effectiveVest","getPageStatsQueryOptions","sortedDimensions","sortedMetrics","queries_exports","getAccountTokenQueryOptions","getAccountVideosQueryOptions","getDecodeMemoQueryOptions","HiveSignerIntegration","memoQueryOptions","memoDecoded","tokenQueryOptions","ThreeSpeakIntegration","getHivePoshLinksQueryOptions","getStatsQueryOptions","getRcStatsQueryOptions","getAccountRcQueryOptions","RCAPI","getGameStatusCheckQueryOptions","useGameClaim","recordActivity","useSubscribeCommunity","useUnsubscribeCommunity","useMutePost","useSetCommunityRole","team","idx","useUpdateCommunity","useRegisterCommunityRewards","usePinPost","getCommunitiesQueryOptions","getCommunityContextQueryOptions","getCommunityQueryOptions","getCommunitySubscribersQueryOptions","getAccountNotificationsInfiniteQueryOptions","getRewardedCommunitiesQueryOptions","ROLES","roleMap","getCommunityType","type_id","getCommunityPermissions","communityType","userRole","subscribed","canPost","canComment","isModerator","getNotificationsUnreadCountQueryOptions","getNotificationsInfiniteQueryOptions","NotificationFilter","NotifyTypes","ALL_NOTIFY_TYPES","NotificationViewType","getNotificationsSettingsQueryOptions","initialMuted","getAnnouncementsQueryOptions","useMarkNotificationsRead","previousNotifications","updatedData","unreadCount","useSetLastRead","getProposalQueryOptions","proposal","getProposalsQueryOptions","proposals","expired","getProposalVotesInfiniteQueryOptions","startParam","list","l","getUserProposalVotesQueryOptions","vote","useProposalVote","useProposalCreate","getVestingDelegationsQueryOptions","fetchLimit","getConversionRequestsQueryOptions","getCollateralizedConversionRequestsQueryOptions","getSavingsWithdrawFromQueryOptions","getWithdrawRoutesQueryOptions","getOpenOrdersQueryOptions","getOutgoingRcDelegationsInfiniteQueryOptions","delegations","delegation","getIncomingRcQueryOptions","getReceivedVestingSharesQueryOptions","getRecurrentTransfersQueryOptions","normalizeString","trimmed","normalizeNumber","direct","parseToken","rawToken","extractTokens","record","resolveUsername","getPortfolioQueryOptions","getHiveAssetGeneralInfoQueryOptions","marketTicker","marketPrice","liquidBalance","savingsBalance","getHbdAssetGeneralInfoQueryOptions","price","getAPR","currentInflationRate","totalVestingFunds","getHivePowerAssetGeneralInfoQueryOptions","delegatedVests","receivedVests","withdrawRateVests","remainingToWithdrawVests","nextWithdrawalVests","hpBalance","outgoingDelegationsHp","incomingDelegationsHp","pendingPowerDownHp","nextPowerDownHp","totalBalance","availableHp","HIVE_ACCOUNT_OPERATION_GROUPS","HIVE_OPERATION_LIST","operationOrders","HIVE_OPERATION_ORDERS","HIVE_OPERATION_NAME_BY_ID","isHiveOperationName","resolveHiveOperationFilters","rawValues","hasAll","uniqueValues","operationIds","filterArgs","makeBitMaskFilter","allowedOperations","low","high","getHiveAssetTransactionsQueryOptions","__","pages","pageParams","getHbdAssetTransactionsQueryOptions","getHivePowerAssetTransactionsQueryOptions","userSelectedOperations","hasAllFilter","formatDate","pad","n","subtractSeconds","getHiveAssetMetricQueryOptions","hive","non_hive","open","_","prevStartDate","getHiveAssetWithdrawalRoutesQueryOptions","getHivePowerDelegatesInfiniteQueryOptions","getHivePowerDelegatingsQueryOptions","getOrderBookQueryOptions","getMarketStatisticsQueryOptions","getMarketHistoryQueryOptions","getHiveHbdStatsQueryOptions","stats","now","oneDayAgo","dayChange","getMarketDataQueryOptions","getTradeHistoryQueryOptions","getFeedHistoryQueryOptions","getCurrentMedianHistoryPriceQueryOptions","useLimitOrderCreate","useLimitOrderCancel","getMarketData","getCurrencyRate","cur","getCurrencyTokenRate","getCurrencyRates","getHivePrice","ENGINE_RPC_HEADERS","engineRpc","engineRpcSafe","fallback","getHiveEngineOrderBook","baseParams","buy","sell","sortByPriceDesc","left","sortByPriceAsc","right","getHiveEngineTradeHistory","getHiveEngineOpenOrders","buyRaw","sellRaw","formatTotal","quantity","getHiveEngineMetrics","getHiveEngineTokensMarket","getHiveEngineTokensBalances","getHiveEngineTokensMetadata","getHiveEngineTokenTransactions","offset","getHiveEngineTokenMetrics","interval","getHiveEngineUnclaimedRewards","getHiveEngineTokensBalancesQueryOptions","getHiveEngineTokensMarketQueryOptions","getHiveEngineTokensMetadataQueryOptions","getHiveEngineTokenTransactionsQueryOptions","getHiveEngineTokensMetricsQueryOptions","getHiveEngineUnclaimedRewardsQueryOptions","pending_token","getAllHiveEngineTokensQueryOptions","formattedNumber","opts","fractionDigits","prefix","suffix","out","av","HiveEngineToken","getHiveEngineBalancesWithUsdQueryOptions","allTokens","balances","t","pricePerHive","balance","tokenMetadata","metric","m","lastPrice","balanceAmount","usdValue","getHiveEngineTokenGeneralInfoQueryOptions","hiveQuery","hiveData","metadataList","balanceList","marketList","stakedBalance","unstakingBalance","parts","getSpkWallet","getSpkMarkets","getSpkWalletQueryOptions","getSpkMarketsQueryOptions","node","rewardSpk","sstats","diff","simpleInterest","format","getSpkAssetGeneralInfoQueryOptions","wallet","market","hiveAsset","accountBalance","getLarynxAssetGeneralInfoQueryOptions","getLarynxPowerAssetGeneralInfoQueryOptions","getPointsQueryOptions","pointsResponse","transactionsResponse","transactions","getPointsAssetGeneralInfoQueryOptions","getPointsAssetTransactionsQueryOptions","created","getAccountWalletAssetInfoQueryOptions","fetchQuery","qo","convertPriceToUserCurrency","assetInfo","conversionRate","portfolioQuery","getPortfolioAssetInfo","assetItem","extraItem","dataKey","numValue","portfolioAssetInfo","AssetOperation","useTransfer","useTransferPoint","useDelegateVestingShares","useSetWithdrawVestingRoute","useTransferSpk","useTransferLarynx","useTransferEngineToken","useTransferToSavings","useTransferFromSavings","useTransferToVesting","useWithdrawVesting","useConvert","useClaimInterest","useClaimRewards","keysToInvalidate","useLockLarynx","usePowerLarynx","useDelegateEngineToken","useUndelegateEngineToken","useStakeEngineToken","useUnstakeEngineToken","useClaimEngineRewards","useEngineMarketOrder","buildHiveOperations","numAmount","parsedAmount","buildEngineOperations","getWalletOperationAuthority","useWalletOperation","hiveOps","engineOps","useDelegateRc","useWitnessVote","useWitnessProxy","getWitnessesInfiniteQueryOptions","PointTransactionType","useClaimPoints","searchQueryOptions","scroll_id","getControversialRisingInfiniteQueryOptions","sinceDate","buildQuery","retry","json_metadata","_tag","ind","part","getSimilarEntriesQueryOptions","rawEntries","y","getSearchAccountQueryOptions","random","getSearchTopicsQueryOptions","getSearchApiInfiniteQueryOptions","getSearchPathQueryOptions","search","searchAccount","searchTag","searchPath","getBoostPlusPricesQueryOptions","getPromotePriceQueryOptions","getBoostPlusAccountPricesQueryOptions","responseData","useBoostPlus","hsTokenRenew"],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n useMutation,\n type MutationKey,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { Operation, PrivateKey, TransactionConfirmation } from \"@hiveio/dhive\";\nimport { CONFIG } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { shouldTriggerAuthFallback } from \"@/modules/core/errors\";\nimport type { AuthorityLevel } from \"@/modules/operations/authority-map\";\nimport hs from \"hivesigner\";\n\n/**\n * Broadcasts operations using a specific auth method.\n *\n * @param method - Auth method to use ('key', 'hiveauth', 'hivesigner', 'keychain', 'custom')\n * @param username - Hive username to broadcast for\n * @param ops - Operations to broadcast\n * @param auth - AuthContextV2 with adapter and configuration\n * @param authority - Key authority to use (posting, active, owner, or memo)\n * @param fetchedKey - Optional pre-fetched key to avoid duplicate fetches\n * @param fetchedToken - Optional pre-fetched access token to avoid duplicate fetches\n * @returns Transaction confirmation from the blockchain\n * @throws Error if method is not available or broadcast fails\n */\nasync function broadcastWithMethod(\n method: string,\n username: string,\n ops: Operation[],\n auth?: AuthContextV2,\n authority: AuthorityLevel = 'posting',\n fetchedKey?: string | null,\n fetchedToken?: string | null\n): Promise<TransactionConfirmation> {\n const adapter = auth?.adapter;\n\n switch (method) {\n case 'key': {\n if (!adapter) {\n throw new Error('No adapter provided for key-based auth');\n }\n\n // Use pre-fetched key if provided, otherwise fetch it\n let key: string | null | undefined = fetchedKey;\n\n if (key === undefined) {\n // Key not pre-fetched, fetch it now based on authority\n switch (authority) {\n case 'owner':\n if (adapter.getOwnerKey) {\n key = await adapter.getOwnerKey(username);\n } else {\n throw new Error(\n `Owner key not supported by adapter. Owner operations (like account recovery) ` +\n `require master password login or manual key entry.`\n );\n }\n break;\n\n case 'active':\n if (adapter.getActiveKey) {\n key = await adapter.getActiveKey(username);\n }\n break;\n\n case 'memo':\n if (adapter.getMemoKey) {\n key = await adapter.getMemoKey(username);\n } else {\n throw new Error(\n `Memo key not supported by adapter. Use memo encryption methods instead.`\n );\n }\n break;\n\n case 'posting':\n default:\n key = await adapter.getPostingKey(username);\n break;\n }\n }\n\n if (!key) {\n throw new Error(`No ${authority} key available for ${username}`);\n }\n\n // Attempt broadcast with key\n const privateKey = PrivateKey.fromString(key);\n return await CONFIG.hiveClient.broadcast.sendOperations(ops, privateKey);\n }\n\n case 'hiveauth': {\n if (!adapter?.broadcastWithHiveAuth) {\n throw new Error('HiveAuth not supported by adapter');\n }\n return await adapter.broadcastWithHiveAuth(username, ops, authority);\n }\n\n case 'hivesigner': {\n if (!adapter) {\n throw new Error('No adapter provided for HiveSigner auth');\n }\n\n // Use pre-fetched token if provided, otherwise fetch it\n const token = fetchedToken !== undefined\n ? fetchedToken\n : await adapter.getAccessToken(username);\n\n if (!token) {\n throw new Error(`No access token available for ${username}`);\n }\n\n const client = new hs.Client({ accessToken: token });\n const response = await client.broadcast(ops);\n return response.result;\n }\n\n case 'keychain': {\n if (!adapter?.broadcastWithKeychain) {\n throw new Error('Keychain not supported by adapter');\n }\n return await adapter.broadcastWithKeychain(username, ops, authority);\n }\n\n case 'custom': {\n if (!auth?.broadcast) {\n throw new Error('No custom broadcast function provided');\n }\n return (await auth.broadcast(ops, authority)) as TransactionConfirmation;\n }\n\n default:\n throw new Error(`Unknown auth method: ${method}`);\n }\n}\n\n/**\n * Attempts to broadcast operations using multiple auth methods in fallback chain.\n * Implements sophisticated fallback pattern from mobile app.\n *\n * @param username - Hive username to broadcast for\n * @param ops - Operations to broadcast\n * @param auth - AuthContextV2 with adapter and fallback configuration\n * @param authority - Key authority to use ('posting' | 'active' | 'owner' | 'memo'), defaults to 'posting'\n * @returns Transaction confirmation from the blockchain\n * @throws Error if all auth methods fail or if a non-auth error occurs\n *\n * @remarks\n * **Preferred Behavior (when adapter.getLoginType exists):**\n * - Calls adapter.getLoginType() to determine user's actual auth method\n * - Uses ONLY that method (no fallbacks) - more predictable and faster\n * - If it fails, throws the error immediately\n *\n * **Fallback Behavior (for backward compatibility):**\n * - Tries each auth method in the fallback chain order\n * - Only continues to next method if error is auth-related (missing authority, token expired)\n * - Stops immediately for non-auth errors (RC exhaustion, network errors, validation errors)\n * - Collects all errors and provides detailed failure message\n *\n * @example\n * ```typescript\n * // Preferred: Adapter with getLoginType (single method, no fallbacks)\n * const auth: AuthContextV2 = {\n * adapter: myAdapter, // includes getLoginType()\n * };\n *\n * // Legacy: Explicit fallback chain (tries multiple methods)\n * const auth: AuthContextV2 = {\n * adapter: myAdapter,\n * fallbackChain: ['key', 'hiveauth', 'hivesigner'],\n * };\n * ```\n */\nasync function broadcastWithFallback(\n username: string,\n ops: Operation[],\n auth?: AuthContextV2,\n authority: AuthorityLevel = 'posting'\n): Promise<TransactionConfirmation> {\n const adapter = auth?.adapter;\n\n // PREFERRED APPROACH: If adapter provides getLoginType, use smart auth strategy\n // This avoids unnecessary fallback attempts and is more predictable\n if (adapter?.getLoginType) {\n const loginType = await adapter.getLoginType(username);\n\n if (loginType) {\n // SMART AUTH STRATEGY: Optimize based on login type + authority + credentials\n\n // Check if user has granted ecency.app posting authority\n const hasPostingAuth = adapter.hasPostingAuthorization\n ? await adapter.hasPostingAuthorization(username)\n : false;\n\n // OPTIMIZATION: Use HiveSigner token for posting ops when posting auth is granted\n // This is faster than direct key signing or HiveAuth for key-based logins\n if (\n authority === 'posting' &&\n hasPostingAuth &&\n loginType === 'key'\n ) {\n try {\n // Try HiveSigner API first (faster)\n return await broadcastWithMethod('hivesigner', username, ops, auth, authority);\n } catch (error) {\n // Only fallback if this is an auth-related error\n // Otherwise, rethrow the original error (e.g., network errors, validation errors)\n if (!shouldTriggerAuthFallback(error)) {\n throw error;\n }\n // Fallback to direct key signing if token auth method fails\n console.warn('[SDK] HiveSigner token auth failed, falling back to key:', error);\n }\n }\n\n // OPTIMIZATION: Use HiveSigner token for HiveAuth users with posting auth (faster)\n if (\n authority === 'posting' &&\n hasPostingAuth &&\n loginType === 'hiveauth'\n ) {\n try {\n // Try HiveSigner API first (faster)\n return await broadcastWithMethod('hivesigner', username, ops, auth, authority);\n } catch (error) {\n // Only fallback if this is an auth-related error\n // Otherwise, rethrow the original error (e.g., network errors, validation errors)\n if (!shouldTriggerAuthFallback(error)) {\n throw error;\n }\n // Fallback to HiveAuth if token auth method fails\n console.warn('[SDK] HiveSigner token auth failed, falling back to HiveAuth:', error);\n }\n }\n\n // Use user's actual login method\n try {\n return await broadcastWithMethod(loginType, username, ops, auth, authority);\n } catch (error) {\n // Check if error is due to missing authority (e.g., posting key trying active op)\n if (shouldTriggerAuthFallback(error)) {\n // Show auth upgrade UI if available (only for posting/active operations)\n if (\n adapter.showAuthUpgradeUI &&\n (authority === 'posting' || authority === 'active')\n ) {\n // Guard against empty operations array\n const operationName = ops.length > 0 ? ops[0][0] : 'unknown';\n const selectedMethod = await adapter.showAuthUpgradeUI(authority, operationName);\n if (!selectedMethod) {\n throw new Error(`Operation requires ${authority} authority. User declined alternate auth.`);\n }\n\n // User selected a specific method - delegate to broadcastWithMethod\n // This handles all auth methods (hiveauth, hivesigner, key, keychain, custom, etc.)\n // broadcastWithMethod already contains all necessary validation and method-specific logic\n return await broadcastWithMethod(selectedMethod, username, ops, auth, authority);\n }\n }\n\n // Not an auth error, or no upgrade UI available - throw original error\n throw error;\n }\n }\n\n // loginType is null — user's auth method is unknown (e.g., incomplete login data)\n if (authority === 'posting') {\n // For posting ops, try HiveSigner — access token is usually available for all logins\n try {\n return await broadcastWithMethod('hivesigner', username, ops, auth, authority);\n } catch (hsError) {\n if (shouldTriggerAuthFallback(hsError) && adapter.showAuthUpgradeUI) {\n const operationName = ops.length > 0 ? ops[0][0] : 'unknown';\n const selectedMethod = await adapter.showAuthUpgradeUI(authority, operationName);\n if (!selectedMethod) {\n throw new Error(`No login type available for ${username}. Please log in again.`);\n }\n return await broadcastWithMethod(selectedMethod, username, ops, auth, authority);\n }\n throw hsError;\n }\n } else if (authority === 'active' && adapter.showAuthUpgradeUI) {\n // For active ops, show auth upgrade dialog — no silent fallback possible\n const operationName = ops.length > 0 ? ops[0][0] : 'unknown';\n const selectedMethod = await adapter.showAuthUpgradeUI(authority, operationName);\n if (!selectedMethod) {\n throw new Error(`Operation requires ${authority} authority. User declined alternate auth.`);\n }\n return await broadcastWithMethod(selectedMethod, username, ops, auth, authority);\n }\n }\n\n // FALLBACK APPROACH: For backward compatibility, use fallback chain\n // This is only used if adapter doesn't provide getLoginType\n const chain = auth?.fallbackChain ?? ['key', 'hiveauth', 'hivesigner', 'keychain', 'custom'];\n const errors: Map<string, Error> = new Map();\n\n for (const method of chain) {\n try {\n // Check if method is available before attempting\n let shouldSkip = false;\n let skipReason = '';\n let prefetchedKey: string | null | undefined;\n let prefetchedToken: string | null | undefined;\n\n switch (method) {\n case 'key':\n if (!adapter) {\n shouldSkip = true;\n skipReason = 'No adapter provided';\n } else {\n // Pre-fetch key to check availability (will be reused in broadcast)\n let key: string | null | undefined;\n\n switch (authority) {\n case 'owner':\n if (adapter.getOwnerKey) {\n key = await adapter.getOwnerKey(username);\n }\n break;\n case 'active':\n if (adapter.getActiveKey) {\n key = await adapter.getActiveKey(username);\n }\n break;\n case 'memo':\n if (adapter.getMemoKey) {\n key = await adapter.getMemoKey(username);\n }\n break;\n case 'posting':\n default:\n key = await adapter.getPostingKey(username);\n break;\n }\n\n if (!key) {\n shouldSkip = true;\n skipReason = `No ${authority} key available`;\n } else {\n prefetchedKey = key; // Store for reuse\n }\n }\n break;\n case 'hiveauth':\n if (!adapter?.broadcastWithHiveAuth) {\n shouldSkip = true;\n skipReason = 'HiveAuth not supported by adapter';\n }\n break;\n case 'hivesigner':\n if (!adapter) {\n shouldSkip = true;\n skipReason = 'No adapter provided';\n } else {\n // Pre-fetch token to check availability (will be reused in broadcast)\n const token = await adapter.getAccessToken(username);\n if (!token) {\n shouldSkip = true;\n skipReason = 'No access token available';\n } else {\n prefetchedToken = token; // Store for reuse\n }\n }\n break;\n case 'keychain':\n if (!adapter?.broadcastWithKeychain) {\n shouldSkip = true;\n skipReason = 'Keychain not supported by adapter';\n }\n break;\n case 'custom':\n if (!auth?.broadcast) {\n shouldSkip = true;\n skipReason = 'No custom broadcast function provided';\n }\n break;\n }\n\n if (shouldSkip) {\n errors.set(method, new Error(`Skipped: ${skipReason}`));\n continue;\n }\n\n // Method is available, attempt broadcast with pre-fetched credentials\n return await broadcastWithMethod(method, username, ops, auth, authority, prefetchedKey, prefetchedToken);\n } catch (error) {\n // Record actual error from failed broadcast attempt\n errors.set(method, error as Error);\n\n // Only continue fallback if error suggests trying another method\n if (!shouldTriggerAuthFallback(error)) {\n // If it's not an auth error, throw immediately (e.g., RC error, network error)\n throw error;\n }\n }\n }\n\n // FIX #2: Improved error message distinguishes between skips and real failures\n const hasRealAttempts = Array.from(errors.values()).some(\n error => !error.message.startsWith('Skipped:')\n );\n\n if (!hasRealAttempts) {\n // All methods were skipped (none attempted)\n const skipReasons = Array.from(errors.entries())\n .map(([method, error]) => `${method}: ${error.message}`)\n .join(', ');\n throw new Error(\n `[SDK][Broadcast] No auth methods attempted for ${username}. ${skipReasons}`\n );\n }\n\n // At least one method was attempted but all failed\n const errorMessages = Array.from(errors.entries())\n .map(([method, error]) => `${method}: ${error.message}`)\n .join(', ');\n\n throw new Error(\n `[SDK][Broadcast] All auth methods failed for ${username}. Errors: ${errorMessages}`\n );\n}\n\n/**\n * React Query mutation hook for broadcasting Hive operations.\n * Supports multiple authentication methods with automatic fallback.\n *\n * @template T - Type of the mutation payload\n * @param mutationKey - React Query mutation key for cache management\n * @param username - Hive username (required for broadcast)\n * @param operations - Function that converts payload to Hive operations\n * @param onSuccess - Success callback after broadcast completes\n * @param auth - Authentication context (supports both legacy AuthContext and new AuthContextV2)\n * @param authority - Key authority to use ('posting' | 'active' | 'owner' | 'memo'), defaults to 'posting'\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Authentication Flow:**\n *\n * 1. **With AuthContextV2 + adapter + enableFallback** (recommended for new code):\n * - Tries auth methods in fallbackChain order\n * - Smart fallback: only retries on auth errors, not RC/network errors\n * - Uses platform adapter for storage, UI, and broadcasting\n *\n * 2. **With legacy AuthContext** (backward compatible):\n * - Tries auth.broadcast() first (custom implementation)\n * - Falls back to postingKey if available\n * - Falls back to accessToken (HiveSigner) if available\n * - Throws if no auth method available\n *\n * **Backward Compatibility:**\n * - All existing code using AuthContext will continue to work\n * - AuthContextV2 extends AuthContext, so it's a drop-in replacement\n * - enableFallback defaults to false if no adapter provided\n *\n * @example\n * ```typescript\n * // New pattern with platform adapter and fallback\n * const mutation = useBroadcastMutation(\n * ['vote'],\n * username,\n * (payload) => [voteOperation(payload)],\n * () => console.log('Success!'),\n * {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * },\n * 'posting'\n * );\n *\n * // Legacy pattern (still works)\n * const mutation = useBroadcastMutation(\n * ['vote'],\n * username,\n * (payload) => [voteOperation(payload)],\n * () => console.log('Success!'),\n * { postingKey: 'wif-key' }\n * );\n * ```\n */\nexport function useBroadcastMutation<T>(\n mutationKey: MutationKey = [],\n username: string | undefined,\n operations: (payload: T) => Operation[],\n onSuccess: UseMutationOptions<unknown, Error, T>[\"onSuccess\"] = () => {},\n auth?: AuthContextV2,\n authority: AuthorityLevel = 'posting',\n options?: {\n onMutate?: UseMutationOptions<unknown, Error, T>[\"onMutate\"];\n onError?: UseMutationOptions<unknown, Error, T>[\"onError\"];\n onSettled?: UseMutationOptions<unknown, Error, T>[\"onSettled\"];\n }\n) {\n return useMutation({\n onSuccess,\n onMutate: options?.onMutate,\n onError: options?.onError,\n onSettled: options?.onSettled,\n mutationKey: [...mutationKey, username],\n mutationFn: async (payload: T) => {\n if (!username) {\n throw new Error(\n \"[Core][Broadcast] Attempted to call broadcast API with anon user\"\n );\n }\n\n const ops = operations(payload);\n\n // New: Try auth methods in fallback chain (if enabled)\n if (auth?.enableFallback !== false && auth?.adapter) {\n return broadcastWithFallback(username, ops, auth, authority);\n }\n\n // Legacy behavior: try methods in fixed order (backward compatible)\n if (auth?.broadcast) {\n return auth.broadcast(ops, authority);\n }\n\n const postingKey = auth?.postingKey;\n if (postingKey) {\n // Legacy auth only supports posting authority\n if (authority !== 'posting') {\n throw new Error(\n `[SDK][Broadcast] Legacy auth only supports posting authority, but '${authority}' was requested. ` +\n `Use AuthContextV2 with an adapter for ${authority} operations.`\n );\n }\n\n const privateKey = PrivateKey.fromString(postingKey);\n\n return CONFIG.hiveClient.broadcast.sendOperations(\n ops,\n privateKey\n );\n }\n\n const accessToken = auth?.accessToken;\n if (accessToken) {\n const client = new hs.Client({ accessToken });\n const response = await client.broadcast(ops);\n return response.result;\n }\n\n throw new Error(\n \"[SDK][Broadcast] – cannot broadcast w/o posting key or token\"\n );\n },\n });\n}\n","/**\n * Chain error handling utilities\n * Extracted from web's operations.ts and mobile's dhive.ts error handling patterns\n */\n\nexport enum ErrorType {\n COMMON = \"common\",\n INFO = \"info\",\n INSUFFICIENT_RESOURCE_CREDITS = \"insufficient_resource_credits\",\n MISSING_AUTHORITY = \"missing_authority\",\n TOKEN_EXPIRED = \"token_expired\",\n NETWORK = \"network\",\n TIMEOUT = \"timeout\",\n VALIDATION = \"validation\",\n}\n\nexport interface ParsedChainError {\n message: string;\n type: ErrorType;\n originalError?: any;\n}\n\n/**\n * Parses Hive blockchain errors into standardized format.\n * Extracted from web's operations.ts and mobile's dhive.ts error handling.\n *\n * @param error - The error object or string from a blockchain operation\n * @returns Parsed error with user-friendly message and categorized type\n *\n * @example\n * ```typescript\n * try {\n * await vote(...);\n * } catch (error) {\n * const parsed = parseChainError(error);\n * console.log(parsed.message); // \"Insufficient Resource Credits. Please wait or power up.\"\n * console.log(parsed.type); // ErrorType.INSUFFICIENT_RESOURCE_CREDITS\n * }\n * ```\n */\nexport function parseChainError(error: any): ParsedChainError {\n // Extract error strings from various error formats\n // Check both error_description and message independently for pattern matching\n const errorDescription = error?.error_description ? String(error.error_description) : '';\n const errorMessage = error?.message ? String(error.message) : '';\n const errorString = errorDescription || errorMessage || String(error || '');\n\n // Helper function to test patterns against both fields and fallback errorString\n const testPattern = (pattern: RegExp): boolean => {\n // Check error_description first (priority)\n if (errorDescription && pattern.test(errorDescription)) return true;\n // Then check message\n if (errorMessage && pattern.test(errorMessage)) return true;\n // Finally check fallback errorString (handles plain string inputs)\n if (errorString && pattern.test(errorString)) return true;\n return false;\n };\n\n // Resource credits (from both web and mobile patterns)\n if (\n testPattern(/please wait to transact/i) ||\n testPattern(/insufficient rc/i) ||\n testPattern(/rc mana|rc account|resource credits/i)\n ) {\n return {\n message: \"Insufficient Resource Credits. Please wait or power up.\",\n type: ErrorType.INSUFFICIENT_RESOURCE_CREDITS,\n originalError: error,\n };\n }\n\n // Min comment interval (from web operations.ts line 29)\n if (testPattern(/you may only post once every/i)) {\n return {\n message: \"Please wait before posting again (minimum 3 second interval between comments).\",\n type: ErrorType.COMMON,\n originalError: error,\n };\n }\n\n // Identical vote (from web operations.ts line 31)\n if (testPattern(/your current vote on this comment is identical/i)) {\n return {\n message: \"You have already voted with the same weight.\",\n type: ErrorType.INFO,\n originalError: error,\n };\n }\n\n // Must claim something (from web operations.ts line 33)\n if (testPattern(/must claim something/i)) {\n return {\n message: \"You must claim rewards before performing this action.\",\n type: ErrorType.INFO,\n originalError: error,\n };\n }\n\n // Cannot claim that much VESTS (from web operations.ts line 35)\n if (testPattern(/cannot claim that much vests/i)) {\n return {\n message: \"Cannot claim that amount. Please check your pending rewards.\",\n type: ErrorType.INFO,\n originalError: error,\n };\n }\n\n // Cannot delete comment with positive votes (from web operations.ts line 42)\n if (testPattern(/cannot delete a comment with net positive/i)) {\n return {\n message: \"Cannot delete a comment with positive votes.\",\n type: ErrorType.INFO,\n originalError: error,\n };\n }\n\n // Comment has children (from web operations.ts line 44)\n if (testPattern(/children == 0/i)) {\n return {\n message: \"Cannot delete a comment with replies.\",\n type: ErrorType.COMMON,\n originalError: error,\n };\n }\n\n // Comment already paid out (from web operations.ts line 46)\n if (testPattern(/comment_cashout/i)) {\n return {\n message: \"Cannot modify a comment that has already been paid out.\",\n type: ErrorType.COMMON,\n originalError: error,\n };\n }\n\n // Voting on paid out post (from web operations.ts line 48)\n if (testPattern(/votes evaluating for comment that is paid out is forbidden/i)) {\n return {\n message: \"Cannot vote on posts that have already been paid out.\",\n type: ErrorType.COMMON,\n originalError: error,\n };\n }\n\n // No key available (SDK internal - from broadcastWithMethod when key not stored)\n if (testPattern(/no (active|owner|posting|memo) key available/i)) {\n return {\n message: \"Key not available. Please provide your key to sign this operation.\",\n type: ErrorType.MISSING_AUTHORITY,\n originalError: error,\n };\n }\n\n // Missing active authority (from web operations.ts line 50)\n if (testPattern(/missing active authority/i)) {\n return {\n message: \"Missing active authority. This operation requires your active key.\",\n type: ErrorType.MISSING_AUTHORITY,\n originalError: error,\n };\n }\n\n // Missing owner authority (from web operations.ts line 52)\n if (testPattern(/missing owner authority/i)) {\n return {\n message: \"Missing owner authority. This operation requires your owner key.\",\n type: ErrorType.MISSING_AUTHORITY,\n originalError: error,\n };\n }\n\n // Missing posting authority (general pattern)\n if (testPattern(/missing (required )?posting authority/i)) {\n return {\n message: \"Missing posting authority. Please check your login method.\",\n type: ErrorType.MISSING_AUTHORITY,\n originalError: error,\n };\n }\n\n // Token expired (general pattern)\n if (testPattern(/token expired/i) || testPattern(/invalid token/i)) {\n return {\n message: \"Authentication token expired. Please log in again.\",\n type: ErrorType.TOKEN_EXPIRED,\n originalError: error,\n };\n }\n\n // Already reblogged\n if (testPattern(/has already reblogged/i) || testPattern(/already reblogged this post/i)) {\n return {\n message: \"You have already reblogged this post.\",\n type: ErrorType.INFO,\n originalError: error,\n };\n }\n\n // Duplicate transaction\n if (testPattern(/duplicate transaction/i)) {\n return {\n message: \"This transaction has already been processed.\",\n type: ErrorType.INFO,\n originalError: error,\n };\n }\n\n // Network errors (more specific patterns to avoid false positives)\n if (\n testPattern(/econnrefused/i) ||\n testPattern(/connection refused/i) ||\n testPattern(/failed to fetch/i) ||\n testPattern(/\\bnetwork[-\\s]?(request|error|timeout|unreachable|down|failed)\\b/i)\n ) {\n return {\n message: \"Network error. Please check your connection and try again.\",\n type: ErrorType.NETWORK,\n originalError: error,\n };\n }\n\n // Timeout errors\n if (testPattern(/timeout/i) || testPattern(/timed out/i)) {\n return {\n message: \"Request timed out. Please try again.\",\n type: ErrorType.TIMEOUT,\n originalError: error,\n };\n }\n\n // Account doesn't exist\n if (testPattern(/account.*does not exist/i) || testPattern(/account not found/i)) {\n return {\n message: \"Account not found. Please check the username.\",\n type: ErrorType.VALIDATION,\n originalError: error,\n };\n }\n\n // Invalid memo key\n if (testPattern(/invalid memo key/i)) {\n return {\n message: \"Invalid memo key. Cannot encrypt message.\",\n type: ErrorType.VALIDATION,\n originalError: error,\n };\n }\n\n // Insufficient funds (require both words in same string to avoid cross-field false positives)\n if (testPattern(/(?:insufficient.*(?:funds|balance)|(?:funds|balance).*insufficient)/i)) {\n return {\n message: \"Insufficient funds for this transaction.\",\n type: ErrorType.VALIDATION,\n originalError: error,\n };\n }\n\n // Generic validation errors (use word boundaries to be more specific)\n if (testPattern(/\\b(invalid|validation)\\b/i)) {\n // Truncate to 150 chars like other branches\n const message = (error?.message || errorString).substring(0, 150) || \"Validation error occurred\";\n return {\n message,\n type: ErrorType.VALIDATION,\n originalError: error,\n };\n }\n\n // Default: return original error message\n // Check for error_description first (from web operations.ts line 65-72)\n if (error?.error_description && typeof error.error_description === \"string\") {\n return {\n message: error.error_description.substring(0, 150),\n type: ErrorType.COMMON,\n originalError: error,\n };\n }\n\n // Then check message field\n if (error?.message && typeof error.message === \"string\") {\n return {\n message: error.message.substring(0, 150),\n type: ErrorType.COMMON,\n originalError: error,\n };\n }\n\n // Handle plain objects without message property (avoid \"[object Object]\")\n let message: string;\n if (typeof error === 'object' && error !== null) {\n // Check for common error properties\n if (error.error_description) {\n message = String(error.error_description);\n } else if (error.code) {\n message = `Error code: ${error.code}`;\n } else if (errorString && errorString !== '[object Object]') {\n message = errorString.substring(0, 150);\n } else {\n message = \"Unknown error occurred\";\n }\n } else {\n message = errorString.substring(0, 150) || \"Unknown error occurred\";\n }\n\n return {\n message,\n type: ErrorType.COMMON,\n originalError: error,\n };\n}\n\n/**\n * Formats error for display to user.\n * Returns tuple of [message, type] for backward compatibility with existing code.\n *\n * This function maintains compatibility with the old formatError signature from\n * web's operations.ts (line 59-84) and mobile's dhive.ts error handling.\n *\n * @param error - The error object or string\n * @returns Tuple of [user-friendly message, error type]\n *\n * @example\n * ```typescript\n * try {\n * await transfer(...);\n * } catch (error) {\n * const [message, type] = formatError(error);\n * showToast(message, type);\n * }\n * ```\n */\nexport function formatError(error: any): [string, ErrorType] {\n const parsed = parseChainError(error);\n return [parsed.message, parsed.type];\n}\n\n/**\n * Checks if error indicates missing authority and should trigger auth fallback.\n * Used by the SDK's useBroadcastMutation to determine if it should retry with\n * an alternate authentication method.\n *\n * @param error - The error object or string\n * @returns true if auth fallback should be attempted\n *\n * @example\n * ```typescript\n * try {\n * await broadcast(operations);\n * } catch (error) {\n * if (shouldTriggerAuthFallback(error)) {\n * // Try with alternate auth method\n * await broadcastWithHiveAuth(operations);\n * }\n * }\n * ```\n */\nexport function shouldTriggerAuthFallback(error: any): boolean {\n const { type } = parseChainError(error);\n return type === ErrorType.MISSING_AUTHORITY || type === ErrorType.TOKEN_EXPIRED;\n}\n\n/**\n * Checks if error is a resource credits (RC) error.\n * Useful for showing specific UI feedback about RC issues.\n *\n * @param error - The error object or string\n * @returns true if the error is related to insufficient RC\n *\n * @example\n * ```typescript\n * try {\n * await vote(...);\n * } catch (error) {\n * if (isResourceCreditsError(error)) {\n * showRCWarning(); // Show specific RC education/power up UI\n * }\n * }\n * ```\n */\nexport function isResourceCreditsError(error: any): boolean {\n const { type } = parseChainError(error);\n return type === ErrorType.INSUFFICIENT_RESOURCE_CREDITS;\n}\n\n/**\n * Checks if error is informational (not critical).\n * Informational errors typically don't need retry logic.\n *\n * @param error - The error object or string\n * @returns true if the error is informational\n */\nexport function isInfoError(error: any): boolean {\n const { type } = parseChainError(error);\n return type === ErrorType.INFO;\n}\n\n/**\n * Checks if error is network-related and should be retried.\n *\n * @param error - The error object or string\n * @returns true if the error is network-related\n */\nexport function isNetworkError(error: any): boolean {\n const { type } = parseChainError(error);\n return type === ErrorType.NETWORK || type === ErrorType.TIMEOUT;\n}\n","import { Client } from \"@hiveio/dhive\";\nimport { QueryClient } from \"@tanstack/react-query\";\n\n// Safe environment variable access for browser builds\n// In browser builds, tsup will replace process.env.* with literal values at compile time\nconst isDevelopment = (() => {\n try {\n return process.env?.NODE_ENV === 'development';\n } catch {\n return false;\n }\n})();\n\nconst getHeliusApiKey = () => {\n try {\n return process.env?.VITE_HELIUS_API_KEY;\n } catch {\n return undefined;\n }\n};\n\nexport const CONFIG = {\n privateApiHost: \"https://ecency.com\",\n imageHost: \"https://images.ecency.com\",\n hiveClient: new Client(\n [\n \"https://api.hive.blog\",\n \"https://api.deathwing.me\",\n \"https://rpc.mahdiyari.info\",\n \"https://api.openhive.network\",\n \"https://techcoderx.com\",\n \"https://hive-api.arcange.eu\",\n \"https://api.syncad.com\",\n \"https://anyx.io\",\n \"https://api.c0ff33a.uk\",\n \"https://hiveapi.actifit.io\",\n \"https://hive-api.3speak.tv\",\n ],\n {\n timeout: 2000,\n failoverThreshold: 2,\n consoleOnFailover: true,\n }\n ),\n heliusApiKey: getHeliusApiKey(),\n queryClient: new QueryClient(),\n plausibleHost: \"https://pl.ecency.com\",\n spkNode: \"https://spk.good-karma.xyz\",\n // DMCA filtering - can be configured by the app\n dmcaAccounts: [] as string[],\n dmcaTags: [] as string[],\n dmcaPatterns: [] as string[],\n // Pre-compiled regex patterns for performance and security\n dmcaTagRegexes: [] as RegExp[],\n dmcaPatternRegexes: [] as RegExp[],\n // Track if DMCA has been initialized to avoid duplicate logs\n _dmcaInitialized: false,\n};\n\ntype DmcaListsInput = {\n accounts?: string[];\n tags?: string[];\n posts?: string[];\n};\n\nexport namespace ConfigManager {\n export function setQueryClient(client: QueryClient) {\n CONFIG.queryClient = client;\n }\n\n /**\n * Set the private API host\n * @param host - The private API host URL (e.g., \"https://ecency.com\" or \"\" for relative URLs)\n */\n export function setPrivateApiHost(host: string) {\n CONFIG.privateApiHost = host;\n }\n\n /**\n * Get a validated base URL for API requests\n * Returns a valid base URL that can be used with new URL(path, baseUrl)\n *\n * Priority:\n * 1. CONFIG.privateApiHost if set (dev/staging or explicit config)\n * 2. window.location.origin if in browser (production with relative URLs)\n * 3. 'https://ecency.com' as fallback for SSR (production default)\n *\n * @returns A valid base URL string\n * @throws Never throws - always returns a valid URL\n */\n export function getValidatedBaseUrl(): string {\n if (CONFIG.privateApiHost) {\n return CONFIG.privateApiHost;\n }\n\n if (typeof window !== 'undefined' && window.location?.origin) {\n return window.location.origin;\n }\n\n // Fallback for SSR when privateApiHost is empty (production case)\n return 'https://ecency.com';\n }\n\n /**\n * Set the image host\n * @param host - The image host URL (e.g., \"https://images.ecency.com\")\n */\n export function setImageHost(host: string) {\n CONFIG.imageHost = host;\n }\n\n /**\n * Static analysis: Check for known ReDoS-vulnerable patterns\n * @param pattern - Raw regex pattern string\n * @returns Object with risk level and reason\n */\n function analyzeRedosRisk(pattern: string): { safe: boolean; reason?: string } {\n // Check 1: Nested quantifiers (e.g., (a+)+, (a*)+, (a{1,})+)\n if (/(\\([^)]*[*+{][^)]*\\))[*+{]/.test(pattern)) {\n return { safe: false, reason: \"nested quantifiers detected\" };\n }\n\n // Check 2: Alternation with overlapping terms (e.g., (a|a)+, (ab|a)+)\n if (/\\([^|)]*\\|[^)]*\\)[*+{]/.test(pattern)) {\n return { safe: false, reason: \"alternation with quantifier (potential overlap)\" };\n }\n\n // Check 3: Catastrophic backtracking patterns (e.g., (a*)*b, (a+)+b)\n if (/\\([^)]*[*+][^)]*\\)[*+]/.test(pattern)) {\n return { safe: false, reason: \"repeated quantifiers (catastrophic backtracking risk)\" };\n }\n\n // Check 4: Greedy quantifiers followed by optional patterns (e.g., .*.*x, .+.+x)\n if (/\\.\\*\\.\\*/.test(pattern) || /\\.\\+\\.\\+/.test(pattern)) {\n return { safe: false, reason: \"multiple greedy quantifiers on wildcards\" };\n }\n\n // Check 5: Unbounded ranges with wildcards (e.g., .{1,999999})\n const unboundedRange = /\\.?\\{(\\d+),(\\d+)\\}/g;\n let match;\n while ((match = unboundedRange.exec(pattern)) !== null) {\n const [, min, max] = match;\n const range = parseInt(max, 10) - parseInt(min, 10);\n if (range > 1000) {\n return { safe: false, reason: `excessive range: {${min},${max}}` };\n }\n }\n\n return { safe: true };\n }\n\n /**\n * Runtime test: Execute regex against adversarial inputs with timeout\n * @param regex - Compiled regex\n * @returns Object indicating if regex passed runtime test\n */\n function testRegexPerformance(regex: RegExp): { safe: boolean; reason?: string } {\n // Test inputs designed to trigger ReDoS in vulnerable patterns\n const adversarialInputs = [\n // Nested quantifier attack\n \"a\".repeat(50) + \"x\",\n // Alternation attack\n \"ab\".repeat(50) + \"x\",\n // Wildcard attack\n \"x\".repeat(100),\n // Mixed attack\n \"aaa\".repeat(30) + \"bbb\".repeat(30) + \"x\",\n ];\n\n const maxExecutionTime = 5; // 5ms hard limit per test\n\n for (const input of adversarialInputs) {\n const start = Date.now();\n try {\n regex.test(input);\n const duration = Date.now() - start;\n\n if (duration > maxExecutionTime) {\n return {\n safe: false,\n reason: `runtime test exceeded ${maxExecutionTime}ms (took ${duration}ms on input length ${input.length})`\n };\n }\n } catch (err) {\n return { safe: false, reason: `runtime test threw error: ${err}` };\n }\n }\n\n return { safe: true };\n }\n\n /**\n * Safely compile a regex pattern with defense-in-depth validation\n * @param pattern - Raw regex pattern string\n * @param maxLength - Maximum allowed pattern length (default 200)\n * @returns Compiled RegExp or null if invalid/unsafe\n */\n function safeCompileRegex(pattern: string, maxLength = 200): RegExp | null {\n // Use the module-level isDevelopment constant\n\n try {\n // Layer 1: Basic validation\n if (!pattern) {\n if (isDevelopment) {\n console.warn(`[SDK] DMCA pattern rejected: empty pattern`);\n }\n return null;\n }\n\n if (pattern.length > maxLength) {\n if (isDevelopment) {\n console.warn(`[SDK] DMCA pattern rejected: length ${pattern.length} exceeds max ${maxLength} - pattern: ${pattern.substring(0, 50)}...`);\n }\n return null;\n }\n\n // Layer 2: Static ReDoS analysis\n const staticAnalysis = analyzeRedosRisk(pattern);\n if (!staticAnalysis.safe) {\n if (isDevelopment) {\n console.warn(`[SDK] DMCA pattern rejected: static analysis failed (${staticAnalysis.reason}) - pattern: ${pattern.substring(0, 50)}...`);\n }\n return null;\n }\n\n // Layer 3: Compilation attempt\n let regex: RegExp;\n try {\n regex = new RegExp(pattern);\n } catch (compileErr) {\n if (isDevelopment) {\n console.warn(`[SDK] DMCA pattern rejected: compilation failed - pattern: ${pattern.substring(0, 50)}...`, compileErr);\n }\n return null;\n }\n\n // Layer 4: Runtime performance testing\n const runtimeTest = testRegexPerformance(regex);\n if (!runtimeTest.safe) {\n if (isDevelopment) {\n console.warn(`[SDK] DMCA pattern rejected: runtime test failed (${runtimeTest.reason}) - pattern: ${pattern.substring(0, 50)}...`);\n }\n return null;\n }\n\n return regex;\n } catch (err) {\n if (isDevelopment) {\n console.warn(`[SDK] DMCA pattern rejected: unexpected error - pattern: ${pattern.substring(0, 50)}...`, err);\n }\n return null;\n }\n }\n\n /**\n * Set DMCA filtering lists\n * @param lists - DMCA lists object containing accounts/tags/posts arrays\n */\n export function setDmcaLists(\n lists: DmcaListsInput = {}\n ) {\n const coerceList = (value: unknown): string[] =>\n Array.isArray(value) ? value.filter((item): item is string => typeof item === \"string\") : [];\n\n // Ensure we have a valid object to work with\n const input = lists || {};\n\n const resolved = {\n accounts: coerceList(input.accounts),\n tags: coerceList(input.tags),\n patterns: coerceList(input.posts),\n };\n\n CONFIG.dmcaAccounts = resolved.accounts;\n CONFIG.dmcaTags = resolved.tags;\n CONFIG.dmcaPatterns = resolved.patterns;\n\n // Pre-compile tag regex patterns (tags can be regex)\n CONFIG.dmcaTagRegexes = resolved.tags\n .map((pattern) => safeCompileRegex(pattern))\n .filter((r): r is RegExp => r !== null);\n\n // Post patterns are plain strings for exact matching, not regex\n // No compilation needed - they will be used with simple string comparison\n CONFIG.dmcaPatternRegexes = [];\n\n const rejectedTagCount = resolved.tags.length - CONFIG.dmcaTagRegexes.length;\n\n // Only log once to avoid noise during builds/hot reloads\n // Only show in development mode to avoid cluttering production console\n // Use the module-level isDevelopment constant\n\n if (!CONFIG._dmcaInitialized && isDevelopment) {\n console.log(`[SDK] DMCA configuration loaded:`);\n console.log(` - Accounts: ${resolved.accounts.length}`);\n console.log(` - Tag patterns: ${CONFIG.dmcaTagRegexes.length}/${resolved.tags.length} compiled (${rejectedTagCount} rejected)`);\n console.log(` - Post patterns: ${resolved.patterns.length} (using exact string matching)`);\n\n if (rejectedTagCount > 0) {\n console.warn(`[SDK] ${rejectedTagCount} DMCA tag patterns were rejected due to security validation. Check warnings above for details.`);\n }\n }\n\n CONFIG._dmcaInitialized = true;\n }\n}\n","import { CONFIG } from \"@/modules/core/config\";\nimport { PrivateKey } from \"@hiveio/dhive\";\nimport hs from \"hivesigner\";\nimport type { AuthContext } from \"@/modules/core/types\";\n\nexport async function broadcastJson<T>(\n username: string | undefined,\n id: string,\n payload: T,\n auth?: AuthContext\n) {\n if (!username) {\n throw new Error(\n \"[Core][Broadcast] Attempted to call broadcast API with anon user\"\n );\n }\n const jjson = {\n id,\n required_auths: [],\n required_posting_auths: [username],\n json: JSON.stringify(payload),\n };\n\n if (auth?.broadcast) {\n return auth.broadcast([[\"custom_json\", jjson]], \"posting\");\n }\n\n const postingKey = auth?.postingKey;\n if (postingKey) {\n const privateKey = PrivateKey.fromString(postingKey);\n\n return CONFIG.hiveClient.broadcast.json(\n jjson,\n privateKey\n );\n }\n\n // With hivesigner access token\n const accessToken = auth?.accessToken;\n if (accessToken) {\n const response = await new hs.Client({\n accessToken,\n }).customJson([], [username], id, JSON.stringify(payload));\n return response.result;\n }\n\n throw new Error(\n \"[SDK][Broadcast] – cannot broadcast w/o posting key or token\"\n );\n}\n","import {\n InfiniteData,\n QueryClient,\n QueryKey,\n useInfiniteQuery,\n UseInfiniteQueryOptions,\n useQuery,\n UseQueryOptions,\n} from \"@tanstack/react-query\";\nimport { CONFIG } from \"./config\";\n\nexport function makeQueryClient() {\n // Cache creates one single instance per request in a server side\n return new QueryClient({\n defaultOptions: {\n queries: {\n // With SSR, we usually want to set some default staleTime\n // above 0 to avoid refetching immediately on the client\n // staleTime: 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n },\n },\n });\n}\nexport const getQueryClient = () => CONFIG.queryClient;\n\nexport namespace EcencyQueriesManager {\n export function getQueryData<T>(queryKey: QueryKey) {\n const queryClient = getQueryClient();\n return queryClient.getQueryData<T>(queryKey);\n }\n\n export function getInfiniteQueryData<T>(queryKey: QueryKey) {\n const queryClient = getQueryClient();\n return queryClient.getQueryData<InfiniteData<T>>(queryKey);\n }\n\n export async function prefetchQuery<T>(options: UseQueryOptions<T>) {\n const queryClient = getQueryClient();\n await queryClient.prefetchQuery(options);\n return getQueryData<T>(options.queryKey);\n }\n\n export async function prefetchInfiniteQuery<T, P>(\n options: UseInfiniteQueryOptions<\n T,\n Error,\n InfiniteData<T>,\n QueryKey,\n P\n >\n ) {\n const queryClient = getQueryClient();\n await queryClient.prefetchInfiniteQuery(options);\n return getInfiniteQueryData<T>(options.queryKey);\n }\n\n export function generateClientServerQuery<T>(options: UseQueryOptions<T>) {\n return {\n prefetch: () => prefetchQuery(options),\n getData: () => getQueryData<T>(options.queryKey),\n useClientQuery: () => useQuery(options),\n fetchAndGet: () => getQueryClient().fetchQuery(options),\n };\n }\n\n export function generateClientServerInfiniteQuery<T, P>(\n options: UseInfiniteQueryOptions<\n T,\n Error,\n InfiniteData<T>,\n QueryKey,\n P\n >\n ) {\n return {\n prefetch: () => prefetchInfiniteQuery(options),\n getData: () => getInfiniteQueryData<T>(options.queryKey),\n useClientQuery: () => useInfiniteQuery(options),\n fetchAndGet: () => getQueryClient().fetchInfiniteQuery(options),\n };\n }\n}\n","export function encodeObj(o: any): string {\n return btoa(JSON.stringify(o));\n}\n\nexport function decodeObj(o: any): any {\n let dataToParse = atob(o);\n if (dataToParse[0] !== \"{\") {\n return undefined;\n }\n return JSON.parse(dataToParse);\n}\n","import { SMTAsset } from \"@hiveio/dhive\";\n\nexport enum Symbol {\n HIVE = \"HIVE\",\n HBD = \"HBD\",\n VESTS = \"VESTS\",\n SPK = \"SPK\",\n}\n\nexport enum NaiMap {\n \"@@000000021\" = \"HIVE\",\n \"@@000000013\" = \"HBD\",\n \"@@000000037\" = \"VESTS\",\n}\n\nexport interface Asset {\n amount: number;\n symbol: Symbol;\n}\n\nexport function parseAsset(sval: string | SMTAsset): Asset {\n if (typeof sval === \"string\") {\n const sp = sval.split(\" \");\n return {\n amount: parseFloat(sp[0]),\n // @ts-ignore\n symbol: Symbol[sp[1]],\n };\n } else {\n return {\n amount: parseFloat(sval.amount.toString()) / Math.pow(10, sval.precision),\n // @ts-ignore\n symbol: NaiMap[sval.nai],\n };\n }\n}\n","let cachedFetch: typeof globalThis.fetch | undefined;\n\nexport function getBoundFetch() {\n if (!cachedFetch) {\n if (typeof globalThis.fetch !== \"function\") {\n throw new Error(\"[Ecency][SDK] - global fetch is not available\");\n }\n\n cachedFetch = globalThis.fetch.bind(globalThis);\n }\n\n return cachedFetch;\n}\n","export function isCommunity(value: unknown) {\n return typeof value === \"string\" ? /^hive-\\d+$/.test(value) : false;\n}\n","import { WrappedResponse } from \"../types/pagination\";\n\n/**\n * Type guard to check if response is wrapped with pagination metadata\n */\nexport function isWrappedResponse<T>(response: any): response is WrappedResponse<T> {\n return (\n response &&\n typeof response === \"object\" &&\n \"data\" in response &&\n \"pagination\" in response &&\n Array.isArray(response.data)\n );\n}\n\n/**\n * Normalize response to wrapped format for backwards compatibility\n * If the backend returns old format (array), convert it to wrapped format\n */\nexport function normalizeToWrappedResponse<T>(\n response: T[] | WrappedResponse<T>,\n limit: number\n): WrappedResponse<T> {\n if (isWrappedResponse<T>(response)) {\n return response;\n }\n\n // Old format - just an array\n // Since we don't have pagination metadata, assume no more pages\n return {\n data: Array.isArray(response) ? response : [],\n pagination: {\n total: Array.isArray(response) ? response.length : 0,\n limit,\n offset: 0,\n has_next: false,\n },\n };\n}\n","export function vestsToHp(vests: number, hivePerMVests: number): number {\n return (vests / 1e6) * hivePerMVests;\n}\n","export function isEmptyDate(s: string | undefined): boolean {\n if (s === undefined) {\n return true;\n }\n\n return parseInt(s.split(\"-\")[0], 10) < 1980;\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { DynamicProps } from \"../types\";\nimport { CONFIG } from \"../config\";\nimport { parseAsset } from \"../utils\";\nimport { QueryKeys } from \"@/modules/core\";\n\nexport function getDynamicPropsQueryOptions() {\n return queryOptions({\n queryKey: QueryKeys.core.dynamicProps(),\n refetchInterval: 60000,\n staleTime: 60000,\n refetchOnMount: true,\n queryFn: async (): Promise<DynamicProps> => {\n // Get raw blockchain data without transformation\n const rawGlobalDynamic: any = await CONFIG.hiveClient.database.getDynamicGlobalProperties();\n const rawFeedHistory: any = await CONFIG.hiveClient.database.call(\"get_feed_history\");\n const rawChainProps: any = await CONFIG.hiveClient.database.call(\"get_chain_properties\");\n const rawRewardFund: any = await CONFIG.hiveClient.database.call(\"get_reward_fund\", [\"post\"]);\n\n // Calculate derived values for backward compatibility\n // parseAsset handles both string format (\"200905388484 HIVE\") and NAI format ({ amount, nai, precision })\n const totalVestingSharesAmount = parseAsset(rawGlobalDynamic.total_vesting_shares).amount;\n const totalVestingFundAmount = parseAsset(rawGlobalDynamic.total_vesting_fund_hive).amount;\n\n // Guard against division by zero/NaN/Infinity\n let hivePerMVests = 0;\n if (\n Number.isFinite(totalVestingSharesAmount) &&\n totalVestingSharesAmount !== 0 &&\n Number.isFinite(totalVestingFundAmount)\n ) {\n hivePerMVests = (totalVestingFundAmount / totalVestingSharesAmount) * 1e6;\n }\n const base = parseAsset(rawFeedHistory.current_median_history.base).amount;\n const quote = parseAsset(rawFeedHistory.current_median_history.quote).amount;\n const fundRecentClaims = parseFloat(rawRewardFund.recent_claims);\n const fundRewardBalance = parseAsset(rawRewardFund.reward_balance).amount;\n const hbdPrintRate = rawGlobalDynamic.hbd_print_rate;\n const hbdInterestRate = rawGlobalDynamic.hbd_interest_rate;\n const headBlock = rawGlobalDynamic.head_block_number;\n const totalVestingFund = totalVestingFundAmount;\n const totalVestingShares = totalVestingSharesAmount;\n const virtualSupply = parseAsset(rawGlobalDynamic.virtual_supply).amount;\n const vestingRewardPercent = rawGlobalDynamic.vesting_reward_percent || 0;\n const accountCreationFee = rawChainProps.account_creation_fee;\n\n return {\n // Backward compatible transformed fields (camelCase, parsed)\n hivePerMVests,\n base,\n quote,\n fundRecentClaims,\n fundRewardBalance,\n hbdPrintRate,\n hbdInterestRate,\n headBlock,\n totalVestingFund,\n totalVestingShares,\n virtualSupply,\n vestingRewardPercent,\n accountCreationFee,\n\n // Raw blockchain data (snake_case, unparsed) for direct use\n // Includes ALL fields from the blockchain responses\n raw: {\n globalDynamic: rawGlobalDynamic,\n feedHistory: rawFeedHistory,\n chainProps: rawChainProps,\n rewardFund: rawRewardFund,\n },\n } as DynamicProps;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"../config\";\nimport { QueryKeys } from \"@/modules/core\";\n\nexport interface RewardFund {\n id: number;\n name: string;\n reward_balance: string;\n recent_claims: string;\n last_update: string;\n content_constant: string;\n percent_curation_rewards: number;\n percent_content_rewards: number;\n author_reward_curve: string;\n curation_reward_curve: string;\n}\n\n/**\n * Get reward fund information from the blockchain\n * @param fundName - Name of the reward fund (default: 'post')\n */\nexport function getRewardFundQueryOptions(fundName = \"post\") {\n return queryOptions({\n queryKey: QueryKeys.core.rewardFund(fundName),\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_reward_fund\", [\n fundName,\n ]) as Promise<RewardFund>,\n });\n}\n","/**\n * Centralized query key definitions for all SDK queries.\n *\n * These key builders are the single source of truth for React Query cache keys.\n * Both SDK query options and web app consumers should reference these\n * instead of using inline string arrays.\n *\n * @example\n * ```typescript\n * import { QueryKeys } from \"@ecency/sdk\";\n *\n * // In query options\n * queryKey: QueryKeys.posts.entry(`/@${author}/${permlink}`)\n *\n * // In cache invalidation\n * queryClient.invalidateQueries({ queryKey: QueryKeys.posts.drafts(username) })\n * ```\n */\nexport const QueryKeys = {\n // ===========================================================================\n // Posts\n // ===========================================================================\n posts: {\n entry: (entryPath: string) => [\"posts\", \"entry\", entryPath],\n postHeader: (author: string, permlink?: string) =>\n [\"posts\", \"post-header\", author, permlink],\n content: (author: string, permlink: string) =>\n [\"posts\", \"content\", author, permlink],\n contentReplies: (author: string, permlink: string) =>\n [\"posts\", \"content-replies\", author, permlink],\n accountPosts: (\n username: string,\n filter: string,\n limit: number,\n observer: string\n ) => [\"posts\", \"account-posts\", username, filter, limit, observer],\n accountPostsPage: (\n username: string,\n filter: string,\n startAuthor: string,\n startPermlink: string,\n limit: number,\n observer: string\n ) =>\n [\n \"posts\",\n \"account-posts-page\",\n username,\n filter,\n startAuthor,\n startPermlink,\n limit,\n observer,\n ],\n userPostVote: (username: string, author: string, permlink: string) =>\n [\"posts\", \"user-vote\", username, author, permlink],\n reblogs: (username: string, limit: number) =>\n [\"posts\", \"reblogs\", username, limit],\n entryActiveVotes: (author?: string, permlink?: string) =>\n [\"posts\", \"entry-active-votes\", author, permlink],\n rebloggedBy: (author: string, permlink: string) =>\n [\"posts\", \"reblogged-by\", author, permlink],\n tips: (author: string, permlink: string) =>\n [\"posts\", \"tips\", author, permlink],\n normalize: (author: string, permlink: string) =>\n [\"posts\", \"normalize\", author, permlink],\n drafts: (activeUsername?: string) =>\n [\"posts\", \"drafts\", activeUsername],\n draftsInfinite: (activeUsername?: string, limit?: number) =>\n [\"posts\", \"drafts\", \"infinite\", activeUsername, limit],\n schedules: (activeUsername?: string) =>\n [\"posts\", \"schedules\", activeUsername],\n schedulesInfinite: (activeUsername?: string, limit?: number) =>\n [\"posts\", \"schedules\", \"infinite\", activeUsername, limit],\n fragments: (username?: string) =>\n [\"posts\", \"fragments\", username],\n fragmentsInfinite: (username?: string, limit?: number) =>\n [\"posts\", \"fragments\", \"infinite\", username, limit],\n images: (username?: string) => [\"posts\", \"images\", username],\n galleryImages: (activeUsername?: string) =>\n [\"posts\", \"gallery-images\", activeUsername],\n imagesInfinite: (username?: string, limit?: number) =>\n [\"posts\", \"images\", \"infinite\", username, limit],\n promoted: (type: string) => [\"posts\", \"promoted\", type],\n postsRanked: (\n sort: string,\n tag: string,\n limit: number,\n observer: string\n ) => [\"posts\", \"posts-ranked\", sort, tag, limit, observer],\n postsRankedPage: (\n sort: string,\n startAuthor: string,\n startPermlink: string,\n limit: number,\n tag: string,\n observer: string\n ) =>\n [\n \"posts\",\n \"posts-ranked-page\",\n sort,\n startAuthor,\n startPermlink,\n limit,\n tag,\n observer,\n ],\n discussions: (\n author: string,\n permlink: string,\n order: string,\n observer: string\n ) => [\"posts\", \"discussions\", author, permlink, order, observer],\n discussion: (author: string, permlink: string, observer: string) =>\n [\"posts\", \"discussion\", author, permlink, observer],\n deletedEntry: (entryPath: string) =>\n [\"posts\", \"deleted-entry\", entryPath],\n commentHistory: (\n author: string,\n permlink: string,\n onlyMeta: boolean\n ) => [\"posts\", \"comment-history\", author, permlink, onlyMeta],\n trendingTags: () => [\"posts\", \"trending-tags\"],\n trendingTagsWithStats: (limit: number) =>\n [\"posts\", \"trending-tags\", \"stats\", limit],\n wavesByHost: (host: string) =>\n [\"posts\", \"waves\", \"by-host\", host],\n wavesByTag: (host: string, tag: string) =>\n [\"posts\", \"waves\", \"by-tag\", host, tag],\n wavesFollowing: (host: string, username: string) =>\n [\"posts\", \"waves\", \"following\", host, username],\n wavesTrendingTags: (host: string, hours: number) =>\n [\"posts\", \"waves\", \"trending-tags\", host, hours],\n _prefix: [\"posts\"],\n },\n\n // ===========================================================================\n // Accounts\n // ===========================================================================\n accounts: {\n full: (username?: string) => [\"get-account-full\", username],\n list: (...usernames: string[]) =>\n [\"accounts\", \"list\", ...usernames],\n friends: (\n following: string,\n mode: string,\n followType: string,\n limit: number\n ) => [\"accounts\", \"friends\", following, mode, followType, limit],\n searchFriends: (username: string, mode: string, query: string) =>\n [\"accounts\", \"friends\", \"search\", username, mode, query],\n subscriptions: (username: string) =>\n [\"accounts\", \"subscriptions\", username],\n followCount: (username: string) =>\n [\"accounts\", \"follow-count\", username],\n recoveries: (username: string) =>\n [\"accounts\", \"recoveries\", username],\n pendingRecovery: (username: string) =>\n [\"accounts\", \"recoveries\", username, \"pending-request\"],\n checkWalletPending: (username: string, code: string | null) =>\n [\"accounts\", \"check-wallet-pending\", username, code],\n mutedUsers: (username: string) =>\n [\"accounts\", \"muted-users\", username],\n following: (\n follower: string,\n startFollowing: string,\n followType: string,\n limit: number\n ) =>\n [\n \"accounts\",\n \"following\",\n follower,\n startFollowing,\n followType,\n limit,\n ],\n followers: (\n following: string,\n startFollower: string,\n followType: string,\n limit: number\n ) =>\n [\n \"accounts\",\n \"followers\",\n following,\n startFollower,\n followType,\n limit,\n ],\n search: (query: string, excludeList?: string[]) =>\n [\"accounts\", \"search\", query, excludeList],\n profiles: (accounts: string[], observer: string) =>\n [\"accounts\", \"profiles\", accounts, observer],\n lookup: (query: string, limit: number) =>\n [\"accounts\", \"lookup\", query, limit],\n transactions: (username: string, group: string, limit: number) =>\n [\"accounts\", \"transactions\", username, group, limit],\n favourites: (activeUsername?: string) =>\n [\"accounts\", \"favourites\", activeUsername],\n favouritesInfinite: (activeUsername?: string, limit?: number) =>\n [\"accounts\", \"favourites\", \"infinite\", activeUsername, limit],\n checkFavourite: (activeUsername: string, targetUsername: string) =>\n [\n \"accounts\",\n \"favourites\",\n \"check\",\n activeUsername,\n targetUsername,\n ],\n relations: (reference: string, target: string) =>\n [\"accounts\", \"relations\", reference, target],\n bots: () => [\"accounts\", \"bots\"],\n voteHistory: (username: string, limit: number) =>\n [\"accounts\", \"vote-history\", username, limit],\n reputations: (query: string, limit: number) =>\n [\"accounts\", \"reputations\", query, limit],\n bookmarks: (activeUsername?: string) =>\n [\"accounts\", \"bookmarks\", activeUsername],\n bookmarksInfinite: (activeUsername?: string, limit?: number) =>\n [\"accounts\", \"bookmarks\", \"infinite\", activeUsername, limit],\n referrals: (username: string) =>\n [\"accounts\", \"referrals\", username],\n referralsStats: (username: string) =>\n [\"accounts\", \"referrals-stats\", username],\n _prefix: [\"accounts\"],\n },\n\n // ===========================================================================\n // Notifications\n // ===========================================================================\n notifications: {\n announcements: () => [\"notifications\", \"announcements\"],\n list: (activeUsername?: string, filter?: string) =>\n [\"notifications\", activeUsername, filter],\n unreadCount: (activeUsername?: string) =>\n [\"notifications\", \"unread\", activeUsername],\n settings: (activeUsername?: string) =>\n [\"notifications\", \"settings\", activeUsername],\n _prefix: [\"notifications\"],\n },\n\n // ===========================================================================\n // Core\n // ===========================================================================\n core: {\n rewardFund: (fundName: string) =>\n [\"core\", \"reward-fund\", fundName],\n dynamicProps: () => [\"core\", \"dynamic-props\"],\n chainProperties: () => [\"core\", \"chain-properties\"],\n _prefix: [\"core\"],\n },\n\n // ===========================================================================\n // Communities\n // ===========================================================================\n communities: {\n single: (name?: string, observer?: string) =>\n [\"community\", \"single\", name, observer],\n /** Prefix key for matching all observer variants of a community */\n singlePrefix: (name: string) =>\n [\"community\", \"single\", name] as const,\n context: (username: string, communityName: string) =>\n [\"community\", \"context\", username, communityName],\n rewarded: () => [\"communities\", \"rewarded\"],\n list: (sort: string, query: string, limit: number) =>\n [\"communities\", \"list\", sort, query, limit],\n subscribers: (communityName: string) =>\n [\"communities\", \"subscribers\", communityName],\n accountNotifications: (account: string, limit: number) =>\n [\"communities\", \"account-notifications\", account, limit],\n },\n\n // ===========================================================================\n // Proposals\n // ===========================================================================\n proposals: {\n list: () => [\"proposals\", \"list\"],\n proposal: (id: number) => [\"proposals\", \"proposal\", id],\n votes: (proposalId: number, voter: string, limit: number) =>\n [\"proposals\", \"votes\", proposalId, voter, limit],\n votesByUser: (voter: string) =>\n [\"proposals\", \"votes\", \"by-user\", voter],\n },\n\n // ===========================================================================\n // Search\n // ===========================================================================\n search: {\n topics: (q: string) => [\"search\", \"topics\", q],\n path: (q: string) => [\"search\", \"path\", q],\n account: (q: string, limit: number) =>\n [\"search\", \"account\", q, limit],\n results: (\n q: string,\n sort: string,\n hideLow: boolean,\n since?: string,\n scrollId?: string,\n votes?: number\n ) => [\"search\", q, sort, hideLow, since, scrollId, votes],\n controversialRising: (what: string, tag: string) =>\n [\"search\", \"controversial-rising\", what, tag],\n similarEntries: (author: string, permlink: string, query: string) =>\n [\"search\", \"similar-entries\", author, permlink, query],\n api: (\n q: string,\n sort: string,\n hideLow: boolean,\n since?: string,\n votes?: number\n ) => [\"search\", \"api\", q, sort, hideLow, since, votes],\n },\n\n // ===========================================================================\n // Witnesses\n // ===========================================================================\n witnesses: {\n list: (limit: number) => [\"witnesses\", \"list\", limit],\n votes: (username: string | undefined) => [\"witnesses\", \"votes\", username],\n proxy: () => [\"witnesses\", \"proxy\"],\n },\n\n // ===========================================================================\n // Wallet\n // ===========================================================================\n wallet: {\n outgoingRcDelegations: (username: string, limit: number) =>\n [\"wallet\", \"outgoing-rc-delegations\", username, limit],\n vestingDelegations: (username: string, limit: number) =>\n [\"wallet\", \"vesting-delegations\", username, limit],\n withdrawRoutes: (account: string) =>\n [\"wallet\", \"withdraw-routes\", account],\n incomingRc: (username: string) =>\n [\"wallet\", \"incoming-rc\", username],\n conversionRequests: (account: string) =>\n [\"wallet\", \"conversion-requests\", account],\n receivedVestingShares: (username: string) =>\n [\"wallet\", \"received-vesting-shares\", username],\n savingsWithdraw: (account: string) =>\n [\"wallet\", \"savings-withdraw\", account],\n openOrders: (user: string) =>\n [\"wallet\", \"open-orders\", user],\n collateralizedConversionRequests: (account: string) =>\n [\"wallet\", \"collateralized-conversion-requests\", account],\n recurrentTransfers: (username: string) =>\n [\"wallet\", \"recurrent-transfers\", username],\n portfolio: (\n username: string,\n onlyEnabled: string,\n currency: string\n ) =>\n [\"wallet\", \"portfolio\", \"v2\", username, onlyEnabled, currency],\n },\n\n // ===========================================================================\n // Assets\n // ===========================================================================\n assets: {\n hiveGeneralInfo: (username: string) =>\n [\"assets\", \"hive\", \"general-info\", username],\n hiveTransactions: (username: string, limit: number, filterKey: string) =>\n [\"assets\", \"hive\", \"transactions\", username, limit, filterKey],\n hiveWithdrawalRoutes: (username: string) =>\n [\"assets\", \"hive\", \"withdrawal-routes\", username],\n hiveMetrics: (bucketSeconds: number) =>\n [\"assets\", \"hive\", \"metrics\", bucketSeconds],\n hbdGeneralInfo: (username: string) =>\n [\"assets\", \"hbd\", \"general-info\", username],\n hbdTransactions: (\n username: string,\n limit: number,\n filterKey: string\n ) => [\"assets\", \"hbd\", \"transactions\", username, limit, filterKey],\n hivePowerGeneralInfo: (username: string) =>\n [\"assets\", \"hive-power\", \"general-info\", username],\n hivePowerDelegates: (username: string) =>\n [\"assets\", \"hive-power\", \"delegates\", username],\n hivePowerDelegatings: (username: string) =>\n [\"assets\", \"hive-power\", \"delegatings\", username],\n hivePowerTransactions: (\n username: string,\n limit: number,\n filterKey: string\n ) =>\n [\n \"assets\",\n \"hive-power\",\n \"transactions\",\n username,\n limit,\n filterKey,\n ],\n pointsGeneralInfo: (username: string) =>\n [\"assets\", \"points\", \"general-info\", username],\n pointsTransactions: (username: string, type: string) =>\n [\"assets\", \"points\", \"transactions\", username, type],\n ecencyAssetInfo: (username: string, asset: string, currency: string) =>\n [\"ecency-wallets\", \"asset-info\", username, asset, currency],\n },\n\n // ===========================================================================\n // Market\n // ===========================================================================\n market: {\n statistics: () => [\"market\", \"statistics\"],\n orderBook: (limit: number) => [\"market\", \"order-book\", limit],\n history: (seconds: number, startDate: number, endDate: number) =>\n [\"market\", \"history\", seconds, startDate, endDate],\n feedHistory: () => [\"market\", \"feed-history\"],\n hiveHbdStats: () => [\"market\", \"hive-hbd-stats\"],\n data: (\n coin: string,\n vsCurrency: string,\n fromTs: number,\n toTs: number\n ) => [\"market\", \"data\", coin, vsCurrency, fromTs, toTs],\n tradeHistory: (limit: number, start: number, end: number) =>\n [\"market\", \"trade-history\", limit, start, end],\n currentMedianHistoryPrice: () =>\n [\"market\", \"current-median-history-price\"],\n },\n\n // ===========================================================================\n // Analytics\n // ===========================================================================\n analytics: {\n discoverCuration: (duration: string) =>\n [\"analytics\", \"discover-curation\", duration],\n pageStats: (\n url: string,\n dimensions: string,\n metrics: string,\n dateRange: string\n ) =>\n [\"analytics\", \"page-stats\", url, dimensions, metrics, dateRange],\n discoverLeaderboard: (duration: string) =>\n [\"analytics\", \"discover-leaderboard\", duration],\n },\n\n // ===========================================================================\n // Promotions\n // ===========================================================================\n promotions: {\n promotePrice: () => [\"promotions\", \"promote-price\"],\n boostPlusPrices: () => [\"promotions\", \"boost-plus-prices\"],\n boostPlusAccounts: (account: string) =>\n [\"promotions\", \"boost-plus-accounts\", account],\n },\n\n // ===========================================================================\n // Resource Credits\n // ===========================================================================\n resourceCredits: {\n account: (username: string) =>\n [\"resource-credits\", \"account\", username],\n stats: () => [\"resource-credits\", \"stats\"],\n },\n\n // ===========================================================================\n // Points\n // ===========================================================================\n points: {\n points: (username: string, filter: number) =>\n [\"points\", username, filter],\n },\n\n // ===========================================================================\n // Operations\n // ===========================================================================\n operations: {\n chainProperties: () => [\"operations\", \"chain-properties\"],\n },\n\n // ===========================================================================\n // Games\n // ===========================================================================\n games: {\n statusCheck: (gameType: string, username: string) =>\n [\"games\", \"status-check\", gameType, username],\n },\n} as const;\n","import { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport {\n AccountFollowStats,\n AccountReputation,\n FullAccount,\n} from \"../types\";\nimport { parseProfileMetadata } from \"@/modules/accounts\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport function getAccountFullQueryOptions(username: string | undefined) {\n return queryOptions({\n queryKey: QueryKeys.accounts.full(username),\n queryFn: async () => {\n if (!username) {\n throw new Error(\"[SDK] Username is empty\");\n }\n\n const response = (await CONFIG.hiveClient.database.getAccounts([\n username,\n ])) as any[];\n if (!response[0]) {\n throw new Error(\"[SDK] No account with given username\");\n }\n\n const profile = parseProfileMetadata(response[0].posting_json_metadata);\n\n let follow_stats: AccountFollowStats | undefined;\n try {\n follow_stats = await CONFIG.hiveClient.database.call(\n \"get_follow_count\",\n [username]\n );\n } catch (e) {}\n\n let reputationValue = 0;\n try {\n const reputation = (await CONFIG.hiveClient.call(\n \"condenser_api\",\n \"get_account_reputations\",\n [username, 1]\n )) as AccountReputation[];\n reputationValue = reputation[0]?.reputation ?? 0;\n } catch (e) {}\n\n return {\n name: response[0].name,\n owner: response[0].owner,\n active: response[0].active,\n posting: response[0].posting,\n memo_key: response[0].memo_key,\n post_count: response[0].post_count,\n created: response[0].created,\n posting_json_metadata: response[0].posting_json_metadata,\n last_vote_time: response[0].last_vote_time,\n last_post: response[0].last_post,\n json_metadata: response[0].json_metadata,\n reward_hive_balance: response[0].reward_hive_balance,\n reward_hbd_balance: response[0].reward_hbd_balance,\n reward_vesting_hive: response[0].reward_vesting_hive,\n reward_vesting_balance: response[0].reward_vesting_balance,\n balance: response[0].balance,\n hbd_balance: response[0].hbd_balance,\n savings_balance: response[0].savings_balance,\n savings_hbd_balance: response[0].savings_hbd_balance,\n savings_hbd_last_interest_payment:\n response[0].savings_hbd_last_interest_payment,\n savings_hbd_seconds_last_update:\n response[0].savings_hbd_seconds_last_update,\n savings_hbd_seconds: response[0].savings_hbd_seconds,\n next_vesting_withdrawal: response[0].next_vesting_withdrawal,\n pending_claimed_accounts: response[0].pending_claimed_accounts,\n vesting_shares: response[0].vesting_shares,\n delegated_vesting_shares: response[0].delegated_vesting_shares,\n received_vesting_shares: response[0].received_vesting_shares,\n vesting_withdraw_rate: response[0].vesting_withdraw_rate,\n to_withdraw: response[0].to_withdraw,\n withdrawn: response[0].withdrawn,\n witness_votes: response[0].witness_votes,\n proxy: response[0].proxy,\n recovery_account: response[0].recovery_account,\n proxied_vsf_votes: response[0].proxied_vsf_votes,\n voting_manabar: response[0].voting_manabar,\n voting_power: response[0].voting_power,\n downvote_manabar: response[0].downvote_manabar,\n follow_stats,\n reputation: reputationValue,\n profile,\n } satisfies FullAccount;\n },\n enabled: !!username,\n staleTime: 60000,\n });\n}\n","import * as R from \"remeda\";\n\nimport { AccountProfile, FullAccount } from \"../types\";\n\nexport type ProfileTokens = AccountProfile[\"tokens\"];\n\nexport interface BuildProfileMetadataArgs {\n existingProfile?: AccountProfile;\n profile?: Partial<AccountProfile> | null;\n tokens?: ProfileTokens | null;\n}\n\nfunction sanitizeTokens(\n tokens?: ProfileTokens | null\n): ProfileTokens | undefined {\n return tokens?.map(({ meta, ...rest }) => {\n if (!meta || typeof meta !== \"object\") {\n return { ...rest, meta };\n }\n\n const { privateKey, username, ...safeMeta } = meta;\n return { ...rest, meta: safeMeta };\n });\n}\n\nexport function parseProfileMetadata(\n postingJsonMetadata?: string | null\n): AccountProfile {\n if (!postingJsonMetadata) {\n return {} as AccountProfile;\n }\n\n try {\n const parsed = JSON.parse(postingJsonMetadata);\n if (\n parsed &&\n typeof parsed === \"object\" &&\n parsed.profile &&\n typeof parsed.profile === \"object\"\n ) {\n return parsed.profile as AccountProfile;\n }\n } catch (err) {}\n\n return {} as AccountProfile;\n}\n\nexport function extractAccountProfile(\n data?: Pick<FullAccount, \"posting_json_metadata\"> | null\n): AccountProfile {\n return parseProfileMetadata(data?.posting_json_metadata);\n}\n\nexport function buildProfileMetadata({\n existingProfile,\n profile,\n tokens,\n}: BuildProfileMetadataArgs): AccountProfile {\n const { tokens: profileTokens, version: _ignoredVersion, ...profileRest } =\n profile ?? {};\n\n const metadata = R.mergeDeep(\n existingProfile ?? ({} as AccountProfile),\n profileRest\n );\n\n const nextTokens = tokens ?? profileTokens;\n\n if (nextTokens && nextTokens.length > 0) {\n metadata.tokens = nextTokens;\n }\n\n metadata.tokens = sanitizeTokens(metadata.tokens);\n metadata.version = 2;\n\n return metadata;\n}\n","import { FullAccount, AccountProfile } from \"../types\";\nimport { parseProfileMetadata } from \"./profile-metadata\";\n\n/**\n * Parses raw account data from Hive API into FullAccount type\n * Handles profile metadata extraction from posting_json_metadata or json_metadata\n */\nexport function parseAccounts(rawAccounts: any[]): FullAccount[] {\n return rawAccounts.map((x) => {\n const account: FullAccount = {\n name: x.name,\n owner: x.owner,\n active: x.active,\n posting: x.posting,\n memo_key: x.memo_key,\n post_count: x.post_count,\n created: x.created,\n reputation: x.reputation,\n posting_json_metadata: x.posting_json_metadata,\n last_vote_time: x.last_vote_time,\n last_post: x.last_post,\n json_metadata: x.json_metadata,\n reward_hive_balance: x.reward_hive_balance,\n reward_hbd_balance: x.reward_hbd_balance,\n reward_vesting_hive: x.reward_vesting_hive,\n reward_vesting_balance: x.reward_vesting_balance,\n balance: x.balance,\n hbd_balance: x.hbd_balance,\n savings_balance: x.savings_balance,\n savings_hbd_balance: x.savings_hbd_balance,\n savings_hbd_last_interest_payment: x.savings_hbd_last_interest_payment,\n savings_hbd_seconds_last_update: x.savings_hbd_seconds_last_update,\n savings_hbd_seconds: x.savings_hbd_seconds,\n next_vesting_withdrawal: x.next_vesting_withdrawal,\n pending_claimed_accounts: x.pending_claimed_accounts,\n vesting_shares: x.vesting_shares,\n delegated_vesting_shares: x.delegated_vesting_shares,\n received_vesting_shares: x.received_vesting_shares,\n vesting_withdraw_rate: x.vesting_withdraw_rate,\n to_withdraw: x.to_withdraw,\n withdrawn: x.withdrawn,\n witness_votes: x.witness_votes,\n proxy: x.proxy,\n recovery_account: x.recovery_account,\n proxied_vsf_votes: x.proxied_vsf_votes,\n voting_manabar: x.voting_manabar,\n voting_power: x.voting_power,\n downvote_manabar: x.downvote_manabar,\n };\n\n // Try to parse profile from posting_json_metadata first\n let profile: AccountProfile | undefined = parseProfileMetadata(\n x.posting_json_metadata\n );\n\n // Fallback to json_metadata if posting_json_metadata didn't have a profile\n if (!profile || Object.keys(profile).length === 0) {\n try {\n const jsonMetadata = JSON.parse(x.json_metadata || \"{}\");\n if (jsonMetadata.profile) {\n profile = jsonMetadata.profile;\n }\n } catch (e) {\n // Ignore parsing errors\n }\n }\n\n // Ensure we always have a profile object\n if (!profile || Object.keys(profile).length === 0) {\n profile = {\n about: \"\",\n cover_image: \"\",\n location: \"\",\n name: \"\",\n profile_image: \"\",\n website: \"\",\n };\n }\n\n return { ...account, profile };\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { parseAccounts } from \"../utils/parse-accounts\";\nimport { FullAccount } from \"../types\";\n\nexport function getAccountsQueryOptions(usernames: string[]) {\n return queryOptions({\n queryKey: QueryKeys.accounts.list(...usernames),\n enabled: usernames.length > 0,\n queryFn: async (): Promise<FullAccount[]> => {\n const response = (await CONFIG.hiveClient.database.getAccounts(\n usernames\n )) as any[];\n return parseAccounts(response);\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { AccountFollowStats } from \"../types\";\n\n/**\n * Get follow count (followers and following) for an account\n */\nexport function getFollowCountQueryOptions(username: string) {\n return queryOptions({\n queryKey: QueryKeys.accounts.followCount(username),\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_follow_count\", [\n username,\n ]) as Promise<AccountFollowStats>,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Follow } from \"../types\";\n\n/**\n * Get list of accounts following a user\n *\n * @param following - The account being followed\n * @param startFollower - Pagination start point (account name)\n * @param followType - Type of follow relationship (default: \"blog\")\n * @param limit - Maximum number of results (default: 100)\n */\nexport function getFollowersQueryOptions(\n following: string | undefined,\n startFollower: string,\n followType = \"blog\",\n limit = 100\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.followers(following!, startFollower, followType, limit),\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_followers\", [\n following,\n startFollower,\n followType,\n limit,\n ]) as Promise<Follow[]>,\n enabled: !!following,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Follow } from \"../types\";\n\n/**\n * Get list of accounts that a user is following\n *\n * @param follower - The account doing the following\n * @param startFollowing - Pagination start point (account name)\n * @param followType - Type of follow relationship (default: \"blog\")\n * @param limit - Maximum number of results (default: 100)\n */\nexport function getFollowingQueryOptions(\n follower: string,\n startFollowing: string,\n followType = \"blog\",\n limit = 100\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.following(follower, startFollowing, followType, limit),\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_following\", [\n follower,\n startFollowing,\n followType,\n limit,\n ]) as Promise<Follow[]>,\n enabled: !!follower,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Follow } from \"../types\";\n\n/**\n * Get list of users that an account has muted\n *\n * @param username - The account username\n * @param limit - Maximum number of results (default: 100)\n */\nexport function getMutedUsersQueryOptions(username: string | undefined, limit = 100) {\n return queryOptions({\n queryKey: QueryKeys.accounts.mutedUsers(username!),\n queryFn: async () => {\n const response = (await CONFIG.hiveClient.database.call(\"get_following\", [\n username,\n \"\",\n \"ignore\",\n limit,\n ])) as Follow[];\n\n return response.map((user) => user.following);\n },\n enabled: !!username,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\n\n/**\n * Lookup accounts by username prefix\n *\n * @param query - Username prefix to search for\n * @param limit - Maximum number of results (default: 50)\n */\nexport function lookupAccountsQueryOptions(query: string, limit = 50) {\n return queryOptions({\n queryKey: QueryKeys.accounts.lookup(query, limit),\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"lookup_accounts\", [\n query,\n limit,\n ]) as Promise<string[]>,\n enabled: !!query,\n staleTime: Infinity,\n });\n}\n","import { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport function getSearchAccountsByUsernameQueryOptions(\n query: string,\n limit = 5,\n excludeList: string[] = []\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.search(query, excludeList),\n enabled: !!query,\n queryFn: async () => {\n const response = (await CONFIG.hiveClient.database.call(\n \"lookup_accounts\",\n [query, limit]\n )) as string[];\n return response.filter((item) =>\n excludeList.length > 0 ? !excludeList.includes(item) : true\n );\n },\n });\n}\n","import { CONFIG, getBoundFetch, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { AccountProfile } from \"../types\";\n\ntype AccountProfileToken = NonNullable<AccountProfile[\"tokens\"]>[number];\n\nexport type WalletMetadataCandidate = Partial<AccountProfileToken> & {\n currency?: string;\n show?: boolean;\n address?: string;\n publicKey?: string;\n privateKey?: string;\n username?: string;\n};\n\nexport interface CheckUsernameWalletsPendingResponse {\n exist: boolean;\n tokens?: WalletMetadataCandidate[];\n wallets?: WalletMetadataCandidate[];\n}\n\nconst RESERVED_META_KEYS = new Set([\n \"ownerPublicKey\",\n \"activePublicKey\",\n \"postingPublicKey\",\n \"memoPublicKey\",\n]);\n\ninterface WalletsEndpointResponseItem {\n token?: unknown;\n address?: unknown;\n status?: unknown;\n meta?: unknown;\n username?: unknown;\n}\n\nexport function checkUsernameWalletsPendingQueryOptions(\n username: string,\n code: string | undefined\n) {\n return queryOptions<CheckUsernameWalletsPendingResponse>({\n queryKey: QueryKeys.accounts.checkWalletPending(username, code ?? null),\n queryFn: async () => {\n if (!username || !code) {\n return { exist: false } satisfies CheckUsernameWalletsPendingResponse;\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/wallets\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n username,\n code,\n }),\n }\n );\n\n if (!response.ok) {\n return { exist: false } satisfies CheckUsernameWalletsPendingResponse;\n }\n\n const payload = (await response.json()) as unknown;\n\n const wallets: WalletMetadataCandidate[] = Array.isArray(payload)\n ? payload.flatMap((item) => {\n if (!item || typeof item !== \"object\") {\n return [];\n }\n\n const walletItem = item as WalletsEndpointResponseItem;\n\n const symbol =\n typeof walletItem.token === \"string\"\n ? walletItem.token\n : undefined;\n\n if (!symbol) {\n return [];\n }\n\n const meta: Record<string, unknown> =\n walletItem.meta && typeof walletItem.meta === \"object\"\n ? { ...(walletItem.meta as Record<string, unknown>) }\n : {};\n\n const sanitizedMeta: Record<string, unknown> = {};\n\n const address =\n typeof walletItem.address === \"string\" && walletItem.address\n ? walletItem.address\n : undefined;\n\n const statusShow =\n typeof walletItem.status === \"number\"\n ? walletItem.status === 3\n : undefined;\n\n const showFlag = statusShow ?? false;\n\n if (address) {\n sanitizedMeta.address = address;\n }\n\n sanitizedMeta.show = showFlag;\n\n const baseCandidate = {\n symbol,\n currency: symbol,\n address,\n show: showFlag,\n type: \"CHAIN\",\n meta: sanitizedMeta,\n } satisfies WalletMetadataCandidate;\n\n const metaTokenCandidates: WalletMetadataCandidate[] = [];\n\n for (const [metaSymbol, metaValue] of Object.entries(meta)) {\n if (typeof metaSymbol !== \"string\") {\n continue;\n }\n\n if (RESERVED_META_KEYS.has(metaSymbol)) {\n continue;\n }\n\n if (typeof metaValue !== \"string\" || !metaValue) {\n continue;\n }\n\n if (!/^[A-Z0-9]{2,10}$/.test(metaSymbol)) {\n continue;\n }\n\n metaTokenCandidates.push({\n symbol: metaSymbol,\n currency: metaSymbol,\n address: metaValue,\n show: showFlag,\n type: \"CHAIN\",\n meta: { address: metaValue, show: showFlag },\n });\n }\n\n return [baseCandidate, ...metaTokenCandidates];\n })\n : [];\n\n return {\n exist: wallets.length > 0,\n tokens: wallets.length ? wallets : undefined,\n wallets: wallets.length ? wallets : undefined,\n } satisfies CheckUsernameWalletsPendingResponse;\n },\n refetchOnMount: true,\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { AccountRelationship } from \"../types\";\n\nexport function getRelationshipBetweenAccountsQueryOptions(\n reference: string,\n target: string\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.relations(reference, target),\n enabled: !!reference && !!target,\n refetchOnMount: false,\n refetchInterval: 3_600_000,\n queryFn: async () => {\n return (await CONFIG.hiveClient.call(\n \"bridge\",\n \"get_relationship_between_accounts\",\n [reference, target]\n )) as AccountRelationship;\n },\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\ntype Subscriptions = string[];\n\nexport function getAccountSubscriptionsQueryOptions(\n username: string | undefined\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.subscriptions(username!),\n enabled: !!username,\n queryFn: async () => {\n const response = await CONFIG.hiveClient.call(\n \"bridge\",\n \"list_all_subscriptions\",\n {\n account: username,\n }\n );\n return (response ?? []) as Subscriptions;\n },\n });\n}\n","import { CONFIG, getBoundFetch, normalizeToWrappedResponse, QueryKeys } from \"@/modules/core\";\nimport { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { AccountBookmark } from \"../types\";\n\nexport function getBookmarksQueryOptions(\n activeUsername: string | undefined,\n code: string | undefined\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.bookmarks(activeUsername),\n enabled: !!activeUsername && !!code,\n queryFn: async () => {\n if (!activeUsername || !code) {\n throw new Error(\"[SDK][Accounts][Bookmarks] – missing auth\");\n }\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/bookmarks\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code }),\n }\n );\n return (await response.json()) as AccountBookmark[];\n },\n });\n}\n\nexport function getBookmarksInfiniteQueryOptions(\n activeUsername: string | undefined,\n code: string | undefined,\n limit: number = 10\n) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.accounts.bookmarksInfinite(activeUsername, limit),\n queryFn: async ({ pageParam = 0 }) => {\n if (!activeUsername || !code) {\n return {\n data: [],\n pagination: {\n total: 0,\n limit,\n offset: 0,\n has_next: false,\n },\n };\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `${CONFIG.privateApiHost}/private-api/bookmarks?format=wrapped&offset=${pageParam}&limit=${limit}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code }),\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch bookmarks: ${response.status}`);\n }\n\n const json = await response.json();\n return normalizeToWrappedResponse<AccountBookmark>(json, limit);\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage) => {\n if (lastPage.pagination.has_next) {\n return lastPage.pagination.offset + lastPage.pagination.limit;\n }\n return undefined;\n },\n enabled: !!activeUsername && !!code,\n });\n}\n","import { CONFIG, getBoundFetch, normalizeToWrappedResponse, QueryKeys } from \"@/modules/core\";\nimport { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { AccountFavorite } from \"../types\";\n\nexport function getFavouritesQueryOptions(\n activeUsername: string | undefined,\n code: string | undefined\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.favourites(activeUsername),\n enabled: !!activeUsername && !!code,\n queryFn: async () => {\n if (!activeUsername || !code) {\n throw new Error(\"[SDK][Accounts][Favourites] – missing auth\");\n }\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/favorites\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code }),\n }\n );\n return (await response.json()) as AccountFavorite[];\n },\n });\n}\n\nexport function getFavouritesInfiniteQueryOptions(\n activeUsername: string | undefined,\n code: string | undefined,\n limit: number = 10\n) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.accounts.favouritesInfinite(activeUsername, limit),\n queryFn: async ({ pageParam = 0 }) => {\n if (!activeUsername || !code) {\n return {\n data: [],\n pagination: {\n total: 0,\n limit,\n offset: 0,\n has_next: false,\n },\n };\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `${CONFIG.privateApiHost}/private-api/favorites?format=wrapped&offset=${pageParam}&limit=${limit}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code }),\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch favorites: ${response.status}`);\n }\n\n const json = await response.json();\n return normalizeToWrappedResponse<AccountFavorite>(json, limit);\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage) => {\n if (lastPage.pagination.has_next) {\n return lastPage.pagination.offset + lastPage.pagination.limit;\n }\n return undefined;\n },\n enabled: !!activeUsername && !!code,\n });\n}\n","import { CONFIG, getBoundFetch, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\n/**\n * Query options to check if a specific account is in the active user's favourites\n * @param activeUsername - The logged-in user's username\n * @param code - Access token for authentication\n * @param targetUsername - The username to check if favorited\n * @returns Query options for checking if target is favorited\n */\nexport function checkFavouriteQueryOptions(\n activeUsername: string | undefined,\n code: string | undefined,\n targetUsername: string | undefined\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.checkFavourite(activeUsername!, targetUsername!),\n enabled: !!activeUsername && !!code && !!targetUsername,\n queryFn: async () => {\n if (!activeUsername || !code) {\n throw new Error(\"[SDK][Accounts][Favourites] – missing auth\");\n }\n if (!targetUsername) {\n throw new Error(\"[SDK][Accounts][Favourites] – no target username\");\n }\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/favorites-check\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n account: targetUsername,\n }),\n }\n );\n\n // Validate HTTP response\n if (!response.ok) {\n throw new Error(\n `[SDK][Accounts][Favourites] – favorites-check failed with status ${response.status}: ${response.statusText}`\n );\n }\n\n // Parse and validate JSON payload\n const result = await response.json();\n if (typeof result !== \"boolean\") {\n throw new Error(\n `[SDK][Accounts][Favourites] – favorites-check returned invalid type: expected boolean, got ${typeof result}`\n );\n }\n\n return result;\n },\n });\n}\n","import { CONFIG, getBoundFetch, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { GetRecoveriesEmailResponse } from \"../types\";\n\nexport function getAccountRecoveriesQueryOptions(\n username: string | undefined,\n code: string | undefined\n) {\n return queryOptions({\n enabled: !!username && !!code,\n queryKey: QueryKeys.accounts.recoveries(username!),\n queryFn: async () => {\n if (!username || !code) {\n throw new Error(\"[SDK][Accounts] Missing username or access token\");\n }\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/recoveries\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code }),\n }\n );\n\n return response.json() as Promise<GetRecoveriesEmailResponse[]>;\n },\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport function getAccountPendingRecoveryQueryOptions(\n username: string | undefined\n) {\n return queryOptions({\n enabled: !!username,\n queryKey: QueryKeys.accounts.pendingRecovery(username!),\n queryFn: () =>\n CONFIG.hiveClient.call(\n \"database_api\",\n \"find_change_recovery_account_requests\",\n { accounts: [username] }\n ),\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { AccountReputation } from \"../types\";\n\nexport function getAccountReputationsQueryOptions(query: string, limit = 50) {\n return queryOptions({\n queryKey: QueryKeys.accounts.reputations(query, limit),\n enabled: !!query,\n queryFn: async (): Promise<AccountReputation[]> => {\n if (!query) {\n return [];\n }\n\n return CONFIG.hiveClient.call(\n \"condenser_api\",\n \"get_account_reputations\",\n [query, limit]\n ) as Promise<AccountReputation[]>;\n },\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { utils } from \"@hiveio/dhive\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Transaction, OperationGroup } from \"../types/transaction\";\n\nconst ops = utils.operationOrders;\n\nexport const ACCOUNT_OPERATION_GROUPS: Record<OperationGroup, number[]> = {\n transfers: [\n ops.transfer,\n ops.transfer_to_savings,\n ops.transfer_from_savings,\n ops.cancel_transfer_from_savings,\n ops.recurrent_transfer,\n ops.fill_recurrent_transfer,\n ops.escrow_transfer,\n ops.fill_recurrent_transfer,\n ],\n \"market-orders\": [\n ops.fill_convert_request,\n ops.fill_order,\n ops.fill_collateralized_convert_request,\n ops.limit_order_create2,\n ops.limit_order_create,\n ops.limit_order_cancel,\n ],\n interests: [ops.interest],\n \"stake-operations\": [\n ops.return_vesting_delegation,\n ops.withdraw_vesting,\n ops.transfer_to_vesting,\n ops.set_withdraw_vesting_route,\n ops.update_proposal_votes,\n ops.fill_vesting_withdraw,\n ops.account_witness_proxy,\n ops.delegate_vesting_shares,\n ],\n rewards: [\n ops.author_reward,\n ops.curation_reward,\n ops.producer_reward,\n ops.claim_reward_balance,\n ops.comment_benefactor_reward,\n ops.liquidity_reward,\n ops.proposal_pay,\n ],\n};\n\nexport const ALL_ACCOUNT_OPERATIONS = [...Object.values(ACCOUNT_OPERATION_GROUPS)].reduce(\n (acc, val) => acc.concat(val),\n []\n);\n\ntype TxPage = Transaction[];\ntype TxCursor = number;\n\ninterface AccountHistoryOperation {\n timestamp: string;\n trx_id: string;\n op: [Transaction[\"type\"], any];\n}\n\ntype AccountHistoryRecord = [number, AccountHistoryOperation];\n\n/**\n * Get account transaction history with pagination and filtering\n *\n * @param username - Account name to get transactions for\n * @param limit - Number of transactions per page\n * @param group - Filter by operation group (transfers, market-orders, etc.)\n */\nexport function getTransactionsInfiniteQueryOptions(\n username?: string,\n limit = 20,\n group: OperationGroup | \"\" = \"\"\n) {\n return infiniteQueryOptions<TxPage, Error, TxPage, (string | number)[], TxCursor>({\n queryKey: QueryKeys.accounts.transactions(username ?? \"\", group, limit),\n initialPageParam: -1 as TxCursor,\n\n queryFn: async ({ pageParam }: { pageParam: TxCursor }) => {\n if (!username) {\n return [];\n }\n\n let filters: number[] | undefined;\n try {\n // Create bitmask filters (requires BigInt support in browser)\n switch (group) {\n case \"transfers\":\n filters = utils.makeBitMaskFilter(ACCOUNT_OPERATION_GROUPS[\"transfers\"]);\n break;\n case \"market-orders\":\n filters = utils.makeBitMaskFilter(ACCOUNT_OPERATION_GROUPS[\"market-orders\"]);\n break;\n case \"interests\":\n filters = utils.makeBitMaskFilter(ACCOUNT_OPERATION_GROUPS[\"interests\"]);\n break;\n case \"stake-operations\":\n filters = utils.makeBitMaskFilter(ACCOUNT_OPERATION_GROUPS[\"stake-operations\"]);\n break;\n case \"rewards\":\n filters = utils.makeBitMaskFilter(ACCOUNT_OPERATION_GROUPS[\"rewards\"]);\n break;\n default:\n filters = utils.makeBitMaskFilter(ALL_ACCOUNT_OPERATIONS);\n }\n } catch (error) {\n // Fallback for browsers without BigInt support (Safari < 14)\n // Using undefined means no server-side filtering - will get all operations\n // and filter on client side (less efficient but still works)\n console.warn(\"BigInt not supported, using client-side filtering\", error);\n filters = undefined;\n }\n\n const response = (await (filters\n ? CONFIG.hiveClient.call(\"condenser_api\", \"get_account_history\", [\n username,\n pageParam,\n limit,\n ...filters,\n ])\n : CONFIG.hiveClient.call(\"condenser_api\", \"get_account_history\", [\n username,\n pageParam,\n limit,\n ]))) as AccountHistoryRecord[];\n\n const mapped: Transaction[] = response\n .map(([num, operation]) => {\n const base = {\n num,\n type: operation.op[0],\n timestamp: operation.timestamp,\n trx_id: operation.trx_id,\n } as const;\n\n const payload = operation.op[1] as Record<string, unknown>;\n return { ...base, ...payload } as Transaction;\n })\n .filter(Boolean)\n .sort((a, b) => b.num - a.num);\n\n return mapped;\n },\n\n getNextPageParam: (lastPage: TxPage | undefined): TxCursor =>\n lastPage?.length ? (lastPage[lastPage.length - 1]?.num ?? 0) - 1 : -1,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\n\nexport function getBotsQueryOptions() {\n return queryOptions({\n queryKey: QueryKeys.accounts.bots(),\n queryFn: async () => {\n const response = await fetch(CONFIG.privateApiHost + \"/private-api/public/bots\", {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch bots: ${response.status}`);\n }\n\n return response.json() as Promise<string[]>;\n },\n refetchOnMount: true,\n staleTime: Infinity,\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { ConfigManager, QueryKeys } from \"@/modules/core\";\nimport { ReferralItem } from \"../types/referral\";\n\ntype PageParam = { maxId?: number };\n\nexport function getReferralsInfiniteQueryOptions(username: string) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.accounts.referrals(username),\n initialPageParam: { maxId: undefined } as PageParam,\n queryFn: async ({ pageParam }: { pageParam: PageParam }) => {\n const { maxId } = pageParam ?? {};\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const url = new URL(`/private-api/referrals/${username}`, baseUrl);\n\n if (maxId !== undefined) {\n url.searchParams.set(\"max_id\", maxId.toString());\n }\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch referrals: ${response.status}`);\n }\n\n return response.json() as Promise<ReferralItem[]>;\n },\n getNextPageParam: (lastPage: ReferralItem[]) => {\n const nextMaxId = lastPage?.[lastPage.length - 1]?.id;\n return typeof nextMaxId === \"number\" ? ({ maxId: nextMaxId } as PageParam) : undefined;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { ReferralStat } from \"../types/referral\";\n\ninterface ReferralStatsResponse {\n total?: number;\n rewarded?: number;\n}\n\nexport function getReferralsStatsQueryOptions(username: string) {\n return queryOptions({\n queryKey: QueryKeys.accounts.referralsStats(username),\n queryFn: async () => {\n const response = await fetch(\n CONFIG.privateApiHost + `/private-api/referrals/${username}/stats`,\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch referral stats: ${response.status}`);\n }\n\n const data = await response.json() as ReferralStatsResponse;\n\n if (!data) {\n throw new Error(\"No Referrals for this user!\");\n }\n\n return {\n total: data.total ?? 0,\n rewarded: data.rewarded ?? 0,\n } as ReferralStat;\n },\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Follow, Profile, FriendsRow } from \"../types\";\n\nexport interface FriendsPageParam {\n startFollowing: string;\n}\n\ntype FriendsPage = FriendsRow[];\n\n/**\n * Get list of friends (following/followers) with profile information\n *\n * @param following - The account whose friends to get\n * @param mode - \"following\" or \"followers\"\n * @param followType - Type of follow relationship (default: \"blog\")\n * @param limit - Number of results per page (default: 100)\n * @param enabled - Whether query is enabled (default: true)\n */\nexport function getFriendsInfiniteQueryOptions(\n following: string,\n mode: \"following\" | \"followers\",\n options?: {\n followType?: string;\n limit?: number;\n enabled?: boolean;\n }\n) {\n const { followType = \"blog\", limit = 100, enabled = true } = options ?? {};\n\n return infiniteQueryOptions<FriendsPage, Error, FriendsPage, (string | number)[], FriendsPageParam>({\n queryKey: QueryKeys.accounts.friends(following, mode, followType, limit),\n initialPageParam: { startFollowing: \"\" } as FriendsPageParam,\n enabled,\n refetchOnMount: true,\n\n queryFn: async ({ pageParam }: { pageParam: FriendsPageParam }) => {\n const { startFollowing } = pageParam;\n\n const response = (await CONFIG.hiveClient.database.call(\n mode === \"following\" ? \"get_following\" : \"get_followers\",\n [following, startFollowing === \"\" ? null : startFollowing, followType, limit]\n )) as Follow[];\n\n const accountNames = response.map((e) =>\n mode === \"following\" ? e.following : e.follower\n );\n\n // Get profiles via bridge API\n const accounts = (await CONFIG.hiveClient.call(\"bridge\", \"get_profiles\", {\n accounts: accountNames,\n observer: undefined,\n })) as Profile[];\n\n const rows: FriendsPage = (accounts ?? []).map((a) => ({\n name: a.name,\n reputation: a.reputation,\n active: a.active, // Return raw timestamp\n }));\n\n return rows;\n },\n\n getNextPageParam: (lastPage: FriendsPage): FriendsPageParam | undefined =>\n lastPage && lastPage.length === limit\n ? { startFollowing: lastPage[lastPage.length - 1].name }\n : undefined,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Follow, Profile, FriendSearchResult } from \"../types\";\n\nconst SEARCH_LIMIT = 30;\n\n/**\n * Search friends (following/followers) by query string\n *\n * @param username - The account whose friends to search\n * @param mode - \"following\" or \"followers\"\n * @param query - Search query string\n */\nexport function getSearchFriendsQueryOptions(\n username: string,\n mode: \"following\" | \"followers\",\n query: string\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.searchFriends(username, mode, query),\n refetchOnMount: false,\n enabled: false, // Manual query via refetch\n queryFn: async (): Promise<FriendSearchResult[]> => {\n if (!query) return [];\n\n const start = query.slice(0, -1);\n const response = (await CONFIG.hiveClient.database.call(\n mode === \"following\" ? \"get_following\" : \"get_followers\",\n [username, start, \"blog\", 1000]\n )) as Follow[];\n\n const accountNames = response\n .map((e) => (mode === \"following\" ? e.following : e.follower))\n .filter((name) => name.toLowerCase().includes(query.toLowerCase()))\n .slice(0, SEARCH_LIMIT);\n\n // Get profiles via bridge API\n const accounts = (await CONFIG.hiveClient.call(\"bridge\", \"get_profiles\", {\n accounts: accountNames,\n observer: undefined,\n })) as Profile[];\n\n return (\n accounts?.map((a) => ({\n name: a.name,\n full_name: a.metadata.profile?.name || \"\",\n reputation: a.reputation,\n active: a.active, // Return raw timestamp\n })) ?? []\n );\n },\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { TrendingTag } from \"../types\";\n\nexport function getTrendingTagsQueryOptions(limit = 20) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.posts.trendingTags(),\n queryFn: async ({ pageParam: { afterTag } }) =>\n CONFIG.hiveClient.database\n .call(\"get_trending_tags\", [afterTag, limit])\n .then((tags: TrendingTag[]) =>\n tags\n .filter((x) => x.name !== \"\")\n .filter((x) => !x.name.startsWith(\"hive-\"))\n .map((x) => x.name)\n ),\n initialPageParam: { afterTag: \"\" },\n getNextPageParam: (lastPage) => ({\n afterTag: lastPage?.[lastPage?.length - 1],\n }),\n staleTime: Infinity,\n refetchOnMount: true,\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { isCommunity } from \"@/modules/core/utils\";\nimport { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { TrendingTag } from \"../types\";\n\nexport function getTrendingTagsWithStatsQueryOptions(limit = 250) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.posts.trendingTagsWithStats(limit),\n queryFn: async ({ pageParam: { afterTag } }) =>\n CONFIG.hiveClient.database\n .call(\"get_trending_tags\", [afterTag, limit])\n .then((tags: TrendingTag[]) =>\n tags.filter((tag) => tag.name !== \"\").filter((tag) => !isCommunity(tag.name))\n ),\n initialPageParam: { afterTag: \"\" },\n getNextPageParam: (lastPage) =>\n lastPage?.length ? { afterTag: lastPage[lastPage.length - 1].name } : undefined,\n staleTime: Infinity,\n refetchOnMount: true\n });\n}\n","import { CONFIG, getBoundFetch, normalizeToWrappedResponse, QueryKeys } from \"@/modules/core\";\nimport { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { Fragment } from \"../types\";\n\nexport function getFragmentsQueryOptions(username: string, code?: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.fragments(username),\n queryFn: async () => {\n if (!code) {\n return [];\n }\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/fragments\",\n {\n method: \"POST\",\n body: JSON.stringify({\n code,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n return response.json() as Promise<Fragment[]>;\n },\n enabled: !!username && !!code,\n });\n}\n\nexport function getFragmentsInfiniteQueryOptions(\n username: string | undefined,\n code?: string,\n limit: number = 10\n) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.posts.fragmentsInfinite(username, limit),\n queryFn: async ({ pageParam = 0 }) => {\n if (!username || !code) {\n return {\n data: [],\n pagination: {\n total: 0,\n limit,\n offset: 0,\n has_next: false,\n },\n };\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `${CONFIG.privateApiHost}/private-api/fragments?format=wrapped&offset=${pageParam}&limit=${limit}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n }),\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch fragments: ${response.status}`);\n }\n\n const json = await response.json();\n return normalizeToWrappedResponse<Fragment>(json, limit);\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage) => {\n if (lastPage.pagination.has_next) {\n return lastPage.pagination.offset + lastPage.pagination.limit;\n }\n return undefined;\n },\n enabled: !!username && !!code,\n });\n}\n","import { ConfigManager, getBoundFetch, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\n// TODO: replace any with Entry\nexport function getPromotedPostsQuery<T extends any>(\n type: \"feed\" | \"waves\" = \"feed\"\n) {\n return queryOptions({\n queryKey: QueryKeys.posts.promoted(type),\n queryFn: async () => {\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const url = new URL(\"/private-api/promoted-entries\", baseUrl);\n if (type === \"waves\") {\n url.searchParams.append(\"short_content\", \"1\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n const data = await response.json();\n return data as T[];\n },\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { Entry, Vote } from \"../types\";\n\nexport function getEntryActiveVotesQueryOptions(entry?: Entry) {\n return queryOptions({\n queryKey: QueryKeys.posts.entryActiveVotes(entry?.author, entry?.permlink),\n queryFn: async () => {\n return CONFIG.hiveClient.database.call(\"get_active_votes\", [\n entry?.author,\n entry?.permlink,\n ]) as Promise<Vote[]>;\n },\n enabled: !!entry,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { Vote } from \"../types\";\n\n/**\n * Get a specific user's vote on a post\n * Useful when post has >1000 votes to efficiently get one user's vote\n *\n * @param username - The voter's username\n * @param author - The post author\n * @param permlink - The post permlink\n */\nexport function getUserPostVoteQueryOptions(\n username: string | undefined,\n author: string | undefined,\n permlink: string | undefined\n) {\n return queryOptions({\n queryKey: QueryKeys.posts.userPostVote(username!, author!, permlink!),\n queryFn: async () => {\n const result = await CONFIG.hiveClient.call(\"database_api\", \"list_votes\", {\n start: [username, author, permlink],\n limit: 1,\n order: \"by_voter_comment\"\n });\n\n // Return first vote if found, otherwise null\n return (result?.votes?.[0] || null) as Vote | null;\n },\n enabled: !!username && !!author && !!permlink,\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { Entry } from \"../types\";\n\nexport function getContentQueryOptions(author: string, permlink: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.content(author, permlink),\n enabled: !!author && !!permlink,\n queryFn: async (): Promise<Entry> =>\n CONFIG.hiveClient.call(\"condenser_api\", \"get_content\", [\n author,\n permlink,\n ]) as Promise<Entry>,\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { Entry } from \"../types\";\n\nexport function getContentRepliesQueryOptions(author: string, permlink: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.contentReplies(author, permlink),\n enabled: !!author && !!permlink,\n queryFn: async (): Promise<Entry[]> =>\n CONFIG.hiveClient.call(\"condenser_api\", \"get_content_replies\", {\n author,\n permlink,\n }) as Promise<Entry[]>,\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { Entry } from \"../types\";\n\nexport function getPostHeaderQueryOptions(author: string, permlink: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.postHeader(author, permlink),\n queryFn: async () => {\n return CONFIG.hiveClient.call(\"bridge\", \"get_post_header\", {\n author,\n permlink,\n }) as Promise<Entry | null>;\n },\n initialData: null,\n });\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { Entry } from \"../types\";\n\n/**\n * Filters and censors entries that match DMCA patterns\n * @param entry - Single entry or array of entries to filter\n * @returns Filtered entry/entries with DMCA content censored.\n * Note: Can return null/undefined if input is falsy - callers should guard against this.\n */\nexport function filterDmcaEntry(entry: Entry): Entry | null | undefined;\nexport function filterDmcaEntry(entries: Entry[]): Entry[];\nexport function filterDmcaEntry(entryOrEntries: Entry | Entry[] | null | undefined): Entry | Entry[] | null | undefined {\n if (Array.isArray(entryOrEntries)) {\n return entryOrEntries.map((entry) => applyFilter(entry));\n }\n return applyFilter(entryOrEntries);\n}\n\nfunction applyFilter(entry: Entry | null | undefined): Entry | null | undefined {\n if (!entry) return entry;\n\n const entryPath = `@${entry.author}/${entry.permlink}`;\n const isDmca =\n CONFIG.dmcaPatterns.includes(entryPath) ||\n CONFIG.dmcaPatternRegexes.some((regex) => regex.test(entryPath));\n\n if (isDmca) {\n return {\n ...entry,\n body: \"This post is not available due to a copyright/fraudulent claim.\",\n title: \"\",\n };\n }\n\n return entry;\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { Entry } from \"../types\";\nimport { filterDmcaEntry } from \"../utils/filter-dmca-entries\";\n\nexport function getPostQueryOptions(\n author: string,\n permlink?: string,\n observer = \"\",\n num?: number\n) {\n const cleanPermlink = permlink?.trim();\n const entryPath = `/@${author}/${cleanPermlink ?? \"\"}`;\n\n return queryOptions({\n queryKey: QueryKeys.posts.entry(entryPath),\n queryFn: async () => {\n if (!cleanPermlink || cleanPermlink === \"undefined\") {\n return null;\n }\n\n const response = await CONFIG.hiveClient.call(\"bridge\", \"get_post\", {\n author,\n permlink: cleanPermlink,\n observer,\n });\n\n if (!response) {\n return null;\n }\n\n const entry = num !== undefined ? { ...response, num } as Entry : response as Entry;\n return filterDmcaEntry(entry);\n },\n enabled:\n !!author &&\n !!permlink &&\n permlink.trim() !== \"\" &&\n permlink.trim() !== \"undefined\",\n });\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { AccountRelationship, Profile } from \"@/modules/accounts/types\";\nimport { Community } from \"@/modules/communities/types/community\";\nimport { Subscription } from \"@/modules/communities/types/subscription\";\nimport { Entry } from \"@/modules/posts/types\";\nimport { filterDmcaEntry } from \"@/modules/posts/utils/filter-dmca-entries\";\n\ntype BridgeParams = Record<string, unknown> | unknown[];\n\nexport function bridgeApiCall<T>(endpoint: string, params: BridgeParams): Promise<T> {\n return CONFIG.hiveClient.call(\"bridge\", endpoint, params) as Promise<T>;\n}\n\nexport async function resolvePost(\n post: Entry,\n observer: string,\n num?: number\n): Promise<Entry> {\n const { json_metadata: json } = post;\n\n if (json?.original_author && json?.original_permlink && json.tags?.[0] === \"cross-post\") {\n try {\n const resp = await getPost(\n json.original_author,\n json.original_permlink,\n observer,\n num\n );\n if (resp) {\n return {\n ...post,\n original_entry: resp,\n num,\n };\n }\n return post;\n } catch {\n return post;\n }\n }\n\n return { ...post, num };\n}\n\nasync function resolvePosts(posts: Entry[], observer: string): Promise<Entry[]> {\n const validatedPosts = posts.map(validateEntry);\n const resolved = await Promise.all(validatedPosts.map((p) => resolvePost(p, observer)));\n return filterDmcaEntry(resolved) as Entry[];\n}\n\nexport async function getPostsRanked(\n sort: string,\n start_author: string = \"\",\n start_permlink: string = \"\",\n limit: number = 20,\n tag: string = \"\",\n observer: string = \"\"\n): Promise<Entry[] | null> {\n const resp = await bridgeApiCall<Entry[] | null>(\"get_ranked_posts\", {\n sort,\n start_author,\n start_permlink,\n limit,\n tag,\n observer,\n });\n\n if (resp) {\n return resolvePosts(resp, observer);\n }\n\n return resp;\n}\n\nexport async function getAccountPosts(\n sort: string,\n account: string,\n start_author: string = \"\",\n start_permlink: string = \"\",\n limit: number = 20,\n observer: string = \"\"\n): Promise<Entry[] | null> {\n if (CONFIG.dmcaAccounts.includes(account)) {\n return [];\n }\n\n const resp = await bridgeApiCall<Entry[] | null>(\"get_account_posts\", {\n sort,\n account,\n start_author,\n start_permlink,\n limit,\n observer,\n });\n\n if (resp) {\n return resolvePosts(resp, observer);\n }\n\n return resp;\n}\n\n/**\n * Validates that an Entry object has required properties with non-null values.\n */\nfunction validateEntry(entry: Entry): Entry {\n const newEntry: Entry = {\n ...entry,\n active_votes: Array.isArray(entry.active_votes) ? [...entry.active_votes] : [],\n beneficiaries: Array.isArray(entry.beneficiaries) ? [...entry.beneficiaries] : [],\n blacklists: Array.isArray(entry.blacklists) ? [...entry.blacklists] : [],\n replies: Array.isArray(entry.replies) ? [...entry.replies] : [],\n stats: entry.stats ? { ...entry.stats } : null,\n };\n\n const requiredStringProps: (keyof Entry)[] = [\n \"author\",\n \"title\",\n \"body\",\n \"created\",\n \"category\",\n \"permlink\",\n \"url\",\n \"updated\",\n ];\n\n for (const prop of requiredStringProps) {\n if (newEntry[prop] == null) {\n (newEntry as any)[prop] = \"\";\n }\n }\n\n if (newEntry.author_reputation == null) {\n newEntry.author_reputation = 0;\n }\n if (newEntry.children == null) {\n newEntry.children = 0;\n }\n if (newEntry.depth == null) {\n newEntry.depth = 0;\n }\n if (newEntry.net_rshares == null) {\n newEntry.net_rshares = 0;\n }\n if (newEntry.payout == null) {\n newEntry.payout = 0;\n }\n if (newEntry.percent_hbd == null) {\n newEntry.percent_hbd = 0;\n }\n\n if (!newEntry.stats) {\n newEntry.stats = {\n flag_weight: 0,\n gray: false,\n hide: false,\n total_votes: 0,\n };\n }\n\n if (newEntry.author_payout_value == null) {\n newEntry.author_payout_value = \"0.000 HBD\";\n }\n if (newEntry.curator_payout_value == null) {\n newEntry.curator_payout_value = \"0.000 HBD\";\n }\n if (newEntry.max_accepted_payout == null) {\n newEntry.max_accepted_payout = \"1000000.000 HBD\";\n }\n if (newEntry.payout_at == null) {\n newEntry.payout_at = \"\";\n }\n if (newEntry.pending_payout_value == null) {\n newEntry.pending_payout_value = \"0.000 HBD\";\n }\n if (newEntry.promoted == null) {\n newEntry.promoted = \"0.000 HBD\";\n }\n\n if (newEntry.is_paidout == null) {\n newEntry.is_paidout = false;\n }\n\n return newEntry;\n}\n\nexport async function getPost(\n author: string = \"\",\n permlink: string = \"\",\n observer: string = \"\",\n num?: number\n): Promise<Entry | undefined> {\n const resp = await bridgeApiCall<Entry | null>(\"get_post\", {\n author,\n permlink,\n observer,\n });\n\n if (resp) {\n const validatedEntry = validateEntry(resp);\n const post = await resolvePost(validatedEntry, observer, num);\n return filterDmcaEntry(post) as Entry;\n }\n\n return undefined;\n}\n\nexport async function getPostHeader(\n author: string = \"\",\n permlink: string = \"\"\n): Promise<Entry | null> {\n const resp = await bridgeApiCall<Entry | null>(\"get_post_header\", {\n author,\n permlink,\n });\n return resp ? validateEntry(resp) : resp;\n}\n\nexport async function getDiscussion(\n author: string,\n permlink: string,\n observer?: string\n): Promise<Record<string, Entry> | null> {\n const resp = await bridgeApiCall<Record<string, Entry> | null>(\"get_discussion\", {\n author,\n permlink,\n observer: observer || author,\n });\n\n if (resp) {\n const validatedResp: Record<string, Entry> = {};\n for (const [key, entry] of Object.entries(resp)) {\n validatedResp[key] = validateEntry(entry);\n }\n return validatedResp;\n }\n return resp;\n}\n\nexport async function getCommunity(\n name: string,\n observer: string | undefined = \"\"\n): Promise<Community | null> {\n return bridgeApiCall<Community | null>(\"get_community\", { name, observer });\n}\n\nexport async function getCommunities(\n last: string = \"\",\n limit: number = 100,\n query?: string | null,\n sort: string = \"rank\",\n observer: string = \"\"\n): Promise<Community[] | null> {\n return bridgeApiCall<Community[] | null>(\"list_communities\", {\n last,\n limit,\n query,\n sort,\n observer,\n });\n}\n\nexport async function normalizePost(post: unknown): Promise<Entry | null> {\n const resp = await bridgeApiCall<Entry | null>(\"normalize_post\", { post });\n return resp ? validateEntry(resp) : resp;\n}\n\nexport async function getSubscriptions(account: string): Promise<Subscription[] | null> {\n return bridgeApiCall<Subscription[] | null>(\"list_all_subscriptions\", { account });\n}\n\nexport async function getSubscribers(community: string): Promise<Subscription[] | null> {\n return bridgeApiCall<Subscription[] | null>(\"list_subscribers\", { community });\n}\n\nexport async function getRelationshipBetweenAccounts(\n follower: string,\n following: string\n): Promise<AccountRelationship | null> {\n return bridgeApiCall<AccountRelationship | null>(\"get_relationship_between_accounts\", [\n follower,\n following,\n ]);\n}\n\nexport async function getProfiles(\n accounts: string[],\n observer?: string\n): Promise<Profile[]> {\n return bridgeApiCall<Profile[]>(\"get_profiles\", { accounts, observer });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { Entry } from \"../types\";\nimport { filterDmcaEntry } from \"../utils/filter-dmca-entries\";\nimport { getDiscussion } from \"@/modules/bridge\";\n\nexport enum SortOrder {\n trending = \"trending\",\n author_reputation = \"author_reputation\",\n votes = \"votes\",\n created = \"created\",\n}\n\nfunction parseAsset(value: string): { amount: number; symbol: string } {\n const match = value.match(/^(\\d+\\.?\\d*)\\s*([A-Z]+)$/);\n if (!match) return { amount: 0, symbol: \"\" };\n return {\n amount: parseFloat(match[1]),\n symbol: match[2],\n };\n}\n\nexport function sortDiscussions(\n entry: Entry,\n discussion: Entry[],\n order: SortOrder\n) {\n const allPayout = (c: Entry) =>\n parseAsset(c.pending_payout_value).amount +\n parseAsset(c.author_payout_value).amount +\n parseAsset(c.curator_payout_value).amount;\n\n const absNegative = (a: Entry) => a.net_rshares < 0;\n const isPinned = (a: Entry) =>\n entry.json_metadata?.pinned_reply === `${a.author}/${a.permlink}`;\n\n const sortOrders = {\n trending: (a: Entry, b: Entry) => {\n if (absNegative(a)) {\n return 1;\n }\n\n if (absNegative(b)) {\n return -1;\n }\n\n const _a = allPayout(a);\n const _b = allPayout(b);\n if (_a !== _b) {\n return _b - _a;\n }\n\n return 0;\n },\n author_reputation: (a: Entry, b: Entry) => {\n const keyA = a.author_reputation;\n const keyB = b.author_reputation;\n\n if (keyA > keyB) return -1;\n if (keyA < keyB) return 1;\n\n return 0;\n },\n votes: (a: Entry, b: Entry) => {\n const keyA = a.children;\n const keyB = b.children;\n\n if (keyA > keyB) return -1;\n if (keyA < keyB) return 1;\n\n return 0;\n },\n created: (a: Entry, b: Entry) => {\n if (absNegative(a)) {\n return 1;\n }\n\n if (absNegative(b)) {\n return -1;\n }\n\n const keyA = Date.parse(a.created);\n const keyB = Date.parse(b.created);\n\n if (keyA > keyB) return -1;\n if (keyA < keyB) return 1;\n\n return 0;\n },\n };\n\n const sorted = discussion.sort(sortOrders[order]);\n const pinnedIndex = sorted.findIndex((i) => isPinned(i));\n const pinned = sorted[pinnedIndex];\n if (pinnedIndex >= 0) {\n sorted.splice(pinnedIndex, 1);\n sorted.unshift(pinned);\n }\n return sorted;\n}\n\nexport function getDiscussionsQueryOptions(\n entry: Entry,\n order: SortOrder = SortOrder.created,\n enabled: boolean = true,\n observer?: string\n) {\n return queryOptions({\n queryKey: QueryKeys.posts.discussions(entry?.author, entry?.permlink, order, observer || entry?.author),\n queryFn: async () => {\n if (!entry) {\n return [];\n }\n\n const response = await CONFIG.hiveClient.call(\"bridge\", \"get_discussion\", {\n author: entry.author,\n permlink: entry.permlink,\n observer: observer || entry.author,\n });\n\n const results = response\n ? Array.from(Object.values(response as Record<string, Entry>))\n : [];\n return filterDmcaEntry(results);\n },\n enabled: enabled && !!entry,\n select: (data: Entry[]) => sortDiscussions(entry, data, order),\n // Preserve optimistic entries during refetch by using structural sharing\n // This ensures newly added comments (is_optimistic: true) aren't wiped out\n // when blockchain hasn't indexed them yet\n structuralSharing: (oldData, newData) => {\n if (!oldData || !newData) return newData;\n\n // Find optimistic entries in old data that aren't in new data yet\n const optimisticEntries = (oldData as Entry[]).filter(\n (entry: Entry) => entry.is_optimistic === true\n );\n\n const fetchedPermlinks = new Set(\n (newData as Entry[]).map((e: Entry) => `${e.author}/${e.permlink}`)\n );\n\n const missingOptimistic = optimisticEntries.filter(\n (opt: Entry) => !fetchedPermlinks.has(`${opt.author}/${opt.permlink}`)\n );\n\n // If there are optimistic entries missing from new data, preserve them\n if (missingOptimistic.length > 0) {\n return [...(newData as Entry[]), ...missingOptimistic];\n }\n\n return newData;\n },\n });\n}\n\nexport function getDiscussionQueryOptions(\n author: string,\n permlink: string,\n observer?: string,\n enabled = true\n) {\n return queryOptions({\n queryKey: QueryKeys.posts.discussion(author, permlink, observer || author),\n enabled: enabled && !!author && !!permlink,\n queryFn: async () =>\n getDiscussion(author, permlink, observer) as Promise<Record<string, Entry> | null>,\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { Entry } from \"../types\";\nimport { filterDmcaEntry } from \"../utils/filter-dmca-entries\";\nimport { getAccountPosts } from \"@/modules/bridge\";\n\ntype PageParam = {\n author: string | undefined;\n permlink: string | undefined;\n hasNextPage: boolean;\n};\ntype Page = Entry[];\n\nexport function getAccountPostsInfiniteQueryOptions(\n username: string | undefined,\n filter = \"posts\",\n limit = 20,\n observer = \"\",\n enabled = true\n) {\n return infiniteQueryOptions<Page, Error, Page, (string | number)[], PageParam>({\n queryKey: QueryKeys.posts.accountPosts(username ?? \"\", filter, limit, observer),\n enabled: !!username && enabled,\n initialPageParam: {\n author: undefined,\n permlink: undefined,\n hasNextPage: true,\n } as PageParam,\n\n queryFn: async ({ pageParam }) => {\n if (!pageParam?.hasNextPage || !username) return [];\n\n interface AccountPostsParams {\n sort: string;\n account: string;\n limit: number;\n observer?: string;\n start_author?: string;\n start_permlink?: string;\n }\n\n const rpcParams: AccountPostsParams = {\n sort: filter,\n account: username,\n limit,\n ...(observer && observer.length > 0 ? { observer } : {}),\n ...(pageParam.author ? { start_author: pageParam.author } : {}),\n ...(pageParam.permlink ? { start_permlink: pageParam.permlink } : {}),\n };\n\n try {\n if (CONFIG.dmcaAccounts && CONFIG.dmcaAccounts.includes(username)) return [];\n\n const resp = await CONFIG.hiveClient.call(\n \"bridge\",\n \"get_account_posts\",\n rpcParams\n );\n\n if (resp && Array.isArray(resp)) {\n return filterDmcaEntry(resp as Entry[]);\n }\n return [];\n } catch (err) {\n console.error(\"[SDK] get_account_posts error:\", err);\n return [];\n }\n },\n\n getNextPageParam: (lastPage: Page): PageParam | undefined => {\n const last = lastPage?.[lastPage.length - 1];\n // Only consider there's a next page if we got a full page of results\n // A partial page means we've reached the end\n const hasNextPage = (lastPage?.length ?? 0) === limit;\n\n if (!hasNextPage) {\n return undefined;\n }\n\n return {\n author: last?.author,\n permlink: last?.permlink,\n hasNextPage,\n };\n },\n });\n}\n\nexport function getAccountPostsQueryOptions(\n username: string | undefined,\n filter = \"posts\",\n start_author: string = \"\",\n start_permlink: string = \"\",\n limit = 20,\n observer = \"\",\n enabled = true\n) {\n return queryOptions({\n queryKey: QueryKeys.posts.accountPostsPage(username ?? \"\", filter, start_author, start_permlink, limit, observer),\n enabled: !!username && enabled,\n queryFn: async () => {\n if (!username) {\n return [];\n }\n\n const response = await getAccountPosts(\n filter,\n username,\n start_author,\n start_permlink,\n limit,\n observer\n );\n\n return filterDmcaEntry(response ?? []) as Entry[];\n },\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { Entry } from \"../types\";\nimport { filterDmcaEntry } from \"../utils/filter-dmca-entries\";\nimport { getPostsRanked } from \"@/modules/bridge\";\n\ntype PageParam = {\n author: string | undefined;\n permlink: string | undefined;\n hasNextPage: boolean;\n};\n\ninterface GetPostsRankedOptions {\n resolvePosts?: boolean;\n}\n\nexport function getPostsRankedInfiniteQueryOptions(\n sort: string,\n tag: string,\n limit = 20,\n observer = \"\",\n enabled = true,\n _options: GetPostsRankedOptions = {}\n) {\n return infiniteQueryOptions<Entry[], Error, Entry[], (string | number)[], PageParam>({\n queryKey: QueryKeys.posts.postsRanked(sort, tag, limit, observer),\n queryFn: async ({ pageParam }: { pageParam: PageParam }) => {\n if (!pageParam.hasNextPage) {\n return [];\n }\n\n let sanitizedTag = tag;\n if (CONFIG.dmcaTagRegexes.some((regex) => regex.test(tag))) {\n sanitizedTag = \"\";\n }\n\n const response = await CONFIG.hiveClient.call(\"bridge\", \"get_ranked_posts\", {\n sort,\n start_author: pageParam.author,\n start_permlink: pageParam.permlink,\n limit,\n tag: sanitizedTag,\n observer,\n });\n\n if (response && Array.isArray(response)) {\n const data = response as Entry[];\n\n // Sort by created date unless it's \"hot\"\n const sorted =\n sort === \"hot\"\n ? data\n : data.sort(\n (a, b) =>\n new Date(b.created).getTime() - new Date(a.created).getTime()\n );\n\n // Handle pinned entries\n const pinnedEntry = sorted.find((s) => s.stats?.is_pinned);\n const nonPinnedEntries = sorted.filter((s) => !s.stats?.is_pinned);\n\n const combined = [pinnedEntry, ...nonPinnedEntries].filter((s) => !!s) as Entry[];\n return filterDmcaEntry(combined);\n }\n\n return [];\n },\n enabled,\n initialPageParam: {\n author: undefined,\n permlink: undefined,\n hasNextPage: true,\n } as PageParam,\n getNextPageParam: (lastPage: Entry[]) => {\n const last = lastPage?.[lastPage.length - 1];\n return {\n author: last?.author,\n permlink: last?.permlink,\n hasNextPage: (lastPage?.length ?? 0) > 0,\n };\n },\n });\n}\n\nexport function getPostsRankedQueryOptions(\n sort: string,\n start_author: string = \"\",\n start_permlink: string = \"\",\n limit: number = 20,\n tag: string = \"\",\n observer: string = \"\",\n enabled = true\n) {\n return queryOptions({\n queryKey: QueryKeys.posts.postsRankedPage(sort, start_author, start_permlink, limit, tag, observer),\n enabled,\n queryFn: async () => {\n let sanitizedTag = tag;\n if (CONFIG.dmcaTagRegexes.some((regex) => regex.test(tag))) {\n sanitizedTag = \"\";\n }\n\n const response = await getPostsRanked(\n sort,\n start_author,\n start_permlink,\n limit,\n sanitizedTag,\n observer\n );\n\n return filterDmcaEntry(response ?? []) as Entry[];\n },\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport interface BlogEntry {\n author: string;\n permlink: string;\n blog: string;\n reblog_on: string;\n reblogged_on: string;\n entry_id: number;\n}\n\nexport interface Reblog {\n author: string;\n permlink: string;\n}\n\nexport function getReblogsQueryOptions(\n username?: string,\n activeUsername?: string,\n limit = 200\n) {\n return queryOptions({\n queryKey: QueryKeys.posts.reblogs(username ?? \"\", limit),\n queryFn: async () => {\n const response = (await CONFIG.hiveClient.call(\"condenser_api\", \"get_blog_entries\", [\n username ?? activeUsername,\n 0,\n limit,\n ])) as BlogEntry[];\n\n return response\n .filter(\n (i) =>\n i.author !== activeUsername &&\n !i.reblogged_on.startsWith(\"1970-\")\n )\n .map((i) => ({ author: i.author, permlink: i.permlink })) as Reblog[];\n },\n enabled: !!username,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\n\n/**\n * Get list of usernames who reblogged a specific post\n */\nexport function getRebloggedByQueryOptions(author?: string, permlink?: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.rebloggedBy(author ?? \"\", permlink ?? \"\"),\n queryFn: async () => {\n if (!author || !permlink) {\n return [];\n }\n\n const response = (await CONFIG.hiveClient.call(\n \"condenser_api\",\n \"get_reblogged_by\",\n [author, permlink]\n )) as string[];\n\n return Array.isArray(response) ? response : [];\n },\n enabled: !!author && !!permlink,\n });\n}\n","import { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, getBoundFetch, normalizeToWrappedResponse, QueryKeys } from \"@/modules/core\";\nimport { Schedule } from \"../types/schedule\";\n\nexport function getSchedulesQueryOptions(activeUsername: string | undefined, code?: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.schedules(activeUsername),\n queryFn: async () => {\n if (!activeUsername || !code) {\n return [];\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/schedules\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch schedules: ${response.status}`);\n }\n\n return response.json() as Promise<Schedule[]>;\n },\n enabled: !!activeUsername && !!code,\n });\n}\n\nexport function getSchedulesInfiniteQueryOptions(\n activeUsername: string | undefined,\n code?: string,\n limit: number = 10\n) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.posts.schedulesInfinite(activeUsername, limit),\n queryFn: async ({ pageParam = 0 }) => {\n if (!activeUsername || !code) {\n return {\n data: [],\n pagination: {\n total: 0,\n limit,\n offset: 0,\n has_next: false,\n },\n };\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `${CONFIG.privateApiHost}/private-api/schedules?format=wrapped&offset=${pageParam}&limit=${limit}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n }),\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch schedules: ${response.status}`);\n }\n\n const json = await response.json();\n return normalizeToWrappedResponse<Schedule>(json, limit);\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage) => {\n if (lastPage.pagination.has_next) {\n return lastPage.pagination.offset + lastPage.pagination.limit;\n }\n return undefined;\n },\n enabled: !!activeUsername && !!code,\n });\n}\n","import { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, getBoundFetch, normalizeToWrappedResponse, QueryKeys } from \"@/modules/core\";\nimport { Draft } from \"../types/draft\";\n\nexport function getDraftsQueryOptions(activeUsername: string | undefined, code?: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.drafts(activeUsername),\n queryFn: async () => {\n if (!activeUsername || !code) {\n return [];\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/drafts\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch drafts: ${response.status}`);\n }\n\n return response.json() as Promise<Draft[]>;\n },\n enabled: !!activeUsername && !!code,\n });\n}\n\nexport function getDraftsInfiniteQueryOptions(\n activeUsername: string | undefined,\n code?: string,\n limit: number = 10\n) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.posts.draftsInfinite(activeUsername, limit),\n queryFn: async ({ pageParam = 0 }) => {\n if (!activeUsername || !code) {\n return {\n data: [],\n pagination: {\n total: 0,\n limit,\n offset: 0,\n has_next: false,\n },\n };\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `${CONFIG.privateApiHost}/private-api/drafts?format=wrapped&offset=${pageParam}&limit=${limit}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n }),\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch drafts: ${response.status}`);\n }\n\n const json = await response.json();\n // Normalize response for backwards compatibility\n // If backend doesn't support wrapped format yet, it returns Draft[]\n return normalizeToWrappedResponse<Draft>(json, limit);\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage) => {\n if (lastPage.pagination.has_next) {\n return lastPage.pagination.offset + lastPage.pagination.limit;\n }\n return undefined;\n },\n enabled: !!activeUsername && !!code,\n });\n}\n","import { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, getBoundFetch, normalizeToWrappedResponse, QueryKeys } from \"@/modules/core\";\nimport { UserImage } from \"../types/user-image\";\n\nasync function fetchUserImages(code: string | undefined): Promise<UserImage[]> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/images\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch images: ${response.status}`);\n }\n\n return response.json() as Promise<UserImage[]>;\n}\n\nexport function getImagesQueryOptions(username?: string, code?: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.images(username),\n queryFn: async () => {\n if (!username || !code) {\n return [];\n }\n return fetchUserImages(code);\n },\n enabled: !!username && !!code,\n });\n}\n\nexport function getGalleryImagesQueryOptions(activeUsername: string | undefined, code?: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.galleryImages(activeUsername),\n queryFn: async () => {\n if (!activeUsername || !code) {\n return [];\n }\n return fetchUserImages(code);\n },\n enabled: !!activeUsername && !!code,\n });\n}\n\nexport function getImagesInfiniteQueryOptions(\n username: string | undefined,\n code?: string,\n limit: number = 10\n) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.posts.imagesInfinite(username, limit),\n queryFn: async ({ pageParam = 0 }) => {\n if (!username || !code) {\n return {\n data: [],\n pagination: {\n total: 0,\n limit,\n offset: 0,\n has_next: false,\n },\n };\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `${CONFIG.privateApiHost}/private-api/images?format=wrapped&offset=${pageParam}&limit=${limit}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n }),\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch images: ${response.status}`);\n }\n\n const json = await response.json();\n return normalizeToWrappedResponse<UserImage>(json, limit);\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage) => {\n if (lastPage.pagination.has_next) {\n return lastPage.pagination.offset + lastPage.pagination.limit;\n }\n return undefined;\n },\n enabled: !!username && !!code,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { CommentHistory } from \"../types/comment-history\";\n\nexport function getCommentHistoryQueryOptions(author: string, permlink: string, onlyMeta = false) {\n return queryOptions({\n queryKey: QueryKeys.posts.commentHistory(author, permlink, onlyMeta),\n queryFn: async ({ signal }) => {\n const response = await fetch(CONFIG.privateApiHost + \"/private-api/comment-history\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n author,\n permlink,\n onlyMeta: onlyMeta ? \"1\" : \"\",\n }),\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch comment history: ${response.status}`);\n }\n\n return response.json() as Promise<CommentHistory>;\n },\n enabled: !!author && !!permlink,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { CommentHistory } from \"../types/comment-history\";\n\nfunction makeEntryPath(author: string, permlink: string): string {\n const cleanAuthor = author?.trim();\n const cleanPermlink = permlink?.trim();\n\n if (!cleanAuthor || !cleanPermlink) {\n throw new Error(\"Invalid entry path: author and permlink are required\");\n }\n\n // Normalize by removing any leading @ or / characters\n const normalizedAuthor = cleanAuthor.replace(/^@+/, \"\");\n const normalizedPermlink = cleanPermlink.replace(/^\\/+/, \"\");\n\n if (!normalizedAuthor || !normalizedPermlink) {\n throw new Error(\"Invalid entry path: author and permlink cannot be empty after normalization\");\n }\n\n return `@${normalizedAuthor}/${normalizedPermlink}`;\n}\n\nexport interface DeletedEntry {\n body: string;\n title: string;\n tags: string[];\n}\n\nexport function getDeletedEntryQueryOptions(author: string, permlink: string) {\n const cleanPermlink = permlink?.trim();\n const cleanAuthor = author?.trim();\n const isValid =\n !!cleanAuthor && !!cleanPermlink && cleanPermlink !== \"undefined\";\n\n const entryPath = isValid ? makeEntryPath(cleanAuthor, cleanPermlink) : \"\";\n\n return queryOptions({\n queryKey: QueryKeys.posts.deletedEntry(entryPath),\n queryFn: async ({ signal }) => {\n const response = await fetch(CONFIG.privateApiHost + \"/private-api/comment-history\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n author,\n permlink: cleanPermlink || \"\",\n }),\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch comment history: ${response.status}`);\n }\n\n return response.json() as Promise<CommentHistory>;\n },\n select: (history): DeletedEntry | null => {\n if (!history?.list?.[0]) {\n return null;\n }\n const { body, title, tags } = history.list[0];\n return {\n body,\n title,\n tags,\n };\n },\n enabled: isValid,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { PostTipsResponse } from \"../types/post-tip\";\n\nexport function getPostTipsQueryOptions(author: string, permlink: string, isEnabled = true) {\n return queryOptions({\n queryKey: QueryKeys.posts.tips(author, permlink),\n queryFn: async () => {\n const response = await fetch(CONFIG.privateApiHost + \"/private-api/post-tips\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n author,\n permlink,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch post tips: ${response.status}`);\n }\n\n return response.json() as Promise<PostTipsResponse>;\n },\n enabled: !!author && !!permlink && isEnabled,\n });\n}\n","import { Entry, WaveEntry } from \"../types\";\nimport { getDiscussionsQueryOptions, SortOrder } from \"../queries/get-discussions-query-options\";\nimport { CONFIG } from \"@/modules/core\";\n\ntype EntryWithPostId = Entry & { post_id: number };\n\nfunction normalizeContainer(entry: EntryWithPostId, host: string): WaveEntry {\n return {\n ...entry,\n id: entry.id ?? entry.post_id,\n host\n } as WaveEntry;\n}\n\nfunction normalizeParent(entry: EntryWithPostId): Entry {\n return {\n ...entry,\n id: entry.id ?? entry.post_id\n } as Entry;\n}\n\nexport function normalizeWaveEntryFromApi(\n entry:\n | (Entry & { post_id: number; container?: EntryWithPostId | null; parent?: EntryWithPostId | null })\n | null\n | undefined,\n host: string\n): WaveEntry | null {\n if (!entry) {\n return null;\n }\n\n const containerSource = entry.container ?? entry;\n const container = normalizeContainer(containerSource, host);\n\n const parent = entry.parent ? normalizeParent(entry.parent) : undefined;\n\n return {\n ...entry,\n id: entry.id ?? entry.post_id,\n host,\n container,\n parent\n } as WaveEntry;\n}\n\nexport function toEntryArray(x: unknown): Entry[] {\n return Array.isArray(x) ? (x as Entry[]) : [];\n}\n\nexport async function getVisibleFirstLevelThreadItems(\n container: WaveEntry\n): Promise<Entry[]> {\n const queryOptions = getDiscussionsQueryOptions(container, SortOrder.created, true);\n const discussionItemsRaw = await CONFIG.queryClient.fetchQuery(queryOptions);\n const discussionItems = toEntryArray(discussionItemsRaw);\n\n if (discussionItems.length <= 1) {\n return [];\n }\n\n const firstLevelItems = discussionItems.filter(\n ({ parent_author, parent_permlink }) =>\n parent_author === container.author && parent_permlink === container.permlink\n );\n\n if (firstLevelItems.length === 0) {\n return [];\n }\n\n const visibleItems = firstLevelItems.filter((item) => !item.stats?.gray);\n\n return visibleItems;\n}\n\nexport function mapThreadItemsToWaveEntries(\n items: Entry[],\n container: WaveEntry,\n host: string\n): WaveEntry[] {\n if (items.length === 0) {\n return [];\n }\n\n return items\n .map((item) => {\n const parent = items.find(\n (i) =>\n i.author === item.parent_author &&\n i.permlink === item.parent_permlink &&\n i.author !== host\n );\n\n return {\n ...item,\n id: item.post_id,\n host,\n container,\n parent\n } as WaveEntry;\n })\n .filter((entry) => entry.container.post_id !== entry.post_id)\n .sort(\n (a, b) => new Date(b.created).getTime() - new Date(a.created).getTime()\n );\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { WaveEntry } from \"../types\";\nimport {\n getVisibleFirstLevelThreadItems,\n mapThreadItemsToWaveEntries\n} from \"../utils/waves-helpers\";\n\nconst THREAD_CONTAINER_BATCH_SIZE = 5;\nconst MAX_CONTAINERS_TO_SCAN = 50;\n\ninterface ThreadsResult {\n entries: WaveEntry[];\n}\n\nasync function getThreads(\n host: string,\n pageParam?: WaveEntry\n): Promise<ThreadsResult | null> {\n let startAuthor = pageParam?.author;\n let startPermlink = pageParam?.permlink;\n let scannedContainers = 0;\n let skipContainerId = pageParam?.post_id;\n\n while (scannedContainers < MAX_CONTAINERS_TO_SCAN) {\n interface AccountPostsParams {\n sort: string;\n account: string;\n limit: number;\n start_author?: string;\n start_permlink?: string;\n }\n\n const rpcParams: AccountPostsParams = {\n sort: \"posts\", // ProfileFilter.posts\n account: host,\n limit: THREAD_CONTAINER_BATCH_SIZE,\n ...(startAuthor ? { start_author: startAuthor } : {}),\n ...(startPermlink ? { start_permlink: startPermlink } : {})\n };\n\n const containers = (await CONFIG.hiveClient.call(\n \"bridge\",\n \"get_account_posts\",\n rpcParams\n )) as WaveEntry[]; // API shape is known\n\n if (!containers || containers.length === 0) {\n return null;\n }\n\n const normalizedContainers = containers.map((container) => {\n container.id = container.post_id;\n container.host = host;\n return container;\n });\n\n for (const container of normalizedContainers) {\n if (skipContainerId && container.post_id === skipContainerId) {\n skipContainerId = undefined;\n continue;\n }\n\n scannedContainers += 1;\n\n if (container.stats?.gray) {\n startAuthor = container.author;\n startPermlink = container.permlink;\n continue;\n }\n\n const visibleItems = await getVisibleFirstLevelThreadItems(container);\n\n if (visibleItems.length === 0) {\n startAuthor = container.author;\n startPermlink = container.permlink;\n continue;\n }\n\n return {\n entries: mapThreadItemsToWaveEntries(visibleItems, container, host)\n };\n }\n\n const lastContainer = normalizedContainers[normalizedContainers.length - 1];\n\n if (!lastContainer) {\n return null;\n }\n\n startAuthor = lastContainer.author;\n startPermlink = lastContainer.permlink;\n }\n\n return null;\n}\n\n// Page = array of WaveEntry; Cursor = WaveEntry (container) or undefined\ntype WavesPage = WaveEntry[];\ntype WavesCursor = WaveEntry | undefined;\n\nexport function getWavesByHostQueryOptions(host: string) {\n return infiniteQueryOptions<WavesPage, Error, WavesPage, string[], WavesCursor>({\n queryKey: QueryKeys.posts.wavesByHost(host),\n initialPageParam: undefined as WavesCursor,\n\n queryFn: async ({ pageParam }: { pageParam: WavesCursor }) => {\n const result = await getThreads(host, pageParam);\n if (!result) return []; // no items to show for this page\n\n return result.entries;\n },\n\n getNextPageParam: (lastPage: WavesPage): WavesCursor => lastPage?.[0]?.container\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { ConfigManager, QueryKeys } from \"@/modules/core\";\nimport { Entry, WaveEntry } from \"../types\";\nimport { normalizeWaveEntryFromApi } from \"../utils/waves-helpers\";\n\ntype WavesTagEntryResponse = Entry & {\n post_id: number;\n container?: (Entry & { post_id: number }) | null;\n parent?: (Entry & { post_id: number }) | null;\n};\n\nconst DEFAULT_TAG_FEED_LIMIT = 40;\n\nexport function getWavesByTagQueryOptions(host: string, tag: string, limit = DEFAULT_TAG_FEED_LIMIT) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.posts.wavesByTag(host, tag),\n initialPageParam: undefined,\n\n queryFn: async ({ signal }) => {\n try {\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const url = new URL(\"/private-api/waves/tags\", baseUrl);\n url.searchParams.set(\"container\", host);\n url.searchParams.set(\"tag\", tag);\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch waves by tag: ${response.status}`);\n }\n\n const data = await response.json() as WavesTagEntryResponse[];\n\n const result = data\n .slice(0, limit)\n .map((entry) => normalizeWaveEntryFromApi(entry, host))\n .filter((entry): entry is WaveEntry => Boolean(entry));\n\n return result.sort(\n (a, b) => new Date(b.created).getTime() - new Date(a.created).getTime()\n );\n } catch (error) {\n console.error(\"[SDK] Failed to fetch waves by tag\", error);\n return [];\n }\n },\n\n getNextPageParam: () => undefined\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { ConfigManager, QueryKeys } from \"@/modules/core\";\nimport { Entry, WaveEntry } from \"../types\";\nimport { normalizeWaveEntryFromApi } from \"../utils/waves-helpers\";\n\ntype WavesFollowingEntry = Entry & {\n post_id: number;\n container?: (Entry & { post_id: number }) | null;\n parent?: (Entry & { post_id: number }) | null;\n};\n\nexport function getWavesFollowingQueryOptions(host: string, username?: string) {\n const normalizedUsername = username?.trim().toLowerCase();\n\n return infiniteQueryOptions({\n queryKey: QueryKeys.posts.wavesFollowing(host, normalizedUsername ?? \"\"),\n enabled: Boolean(normalizedUsername),\n initialPageParam: undefined,\n\n queryFn: async ({ signal }) => {\n if (!normalizedUsername) {\n return [];\n }\n\n try {\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const url = new URL(\"/private-api/waves/following\", baseUrl);\n url.searchParams.set(\"container\", host);\n url.searchParams.set(\"username\", normalizedUsername);\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch waves following feed: ${response.status}`);\n }\n\n const data = await response.json() as WavesFollowingEntry[];\n\n if (!Array.isArray(data) || data.length === 0) {\n return [];\n }\n\n const flattened = data\n .map((entry) => normalizeWaveEntryFromApi(entry, host))\n .filter((entry): entry is WaveEntry => Boolean(entry));\n\n if (flattened.length === 0) {\n return [];\n }\n\n return flattened.sort(\n (a, b) => new Date(b.created).getTime() - new Date(a.created).getTime()\n );\n } catch (error) {\n console.error(\"[SDK] Failed to fetch waves following feed\", error);\n return [];\n }\n },\n\n getNextPageParam: () => undefined\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { ConfigManager, QueryKeys } from \"@/modules/core\";\nimport { WaveTrendingTag } from \"../types\";\n\ninterface WavesTrendingTagResponse {\n tag: string;\n posts: number;\n}\n\nexport function getWavesTrendingTagsQueryOptions(host: string, hours = 24) {\n return queryOptions({\n queryKey: QueryKeys.posts.wavesTrendingTags(host, hours),\n queryFn: async ({ signal }): Promise<WaveTrendingTag[]> => {\n try {\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const url = new URL(\"/private-api/waves/trending/tags\", baseUrl);\n url.searchParams.set(\"container\", host);\n url.searchParams.set(\"hours\", hours.toString());\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch waves trending tags: ${response.status}`);\n }\n\n const data = await response.json() as WavesTrendingTagResponse[];\n\n return data.map(({ tag, posts }) => ({ tag, posts }));\n } catch (error) {\n console.error(\"[SDK] Failed to fetch waves trending tags\", error);\n return [];\n }\n }\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Entry } from \"../types\";\nimport { normalizePost } from \"@/modules/bridge\";\n\nexport function getNormalizePostQueryOptions(\n post: { author?: string; permlink?: string } | undefined,\n enabled = true\n) {\n return queryOptions({\n queryKey: QueryKeys.posts.normalize(post?.author ?? \"\", post?.permlink ?? \"\"),\n enabled: enabled && !!post,\n queryFn: async () => normalizePost(post) as Promise<Entry | null>,\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Entry } from \"@/modules/posts/types\";\nimport { getPostQueryOptions } from \"@/modules/posts/queries\";\n\ninterface VoteOperationDetails {\n voter: string;\n author: string;\n permlink: string;\n weight: number;\n}\n\ninterface AccountVoteHistoryItem {\n timestamp: string;\n op: [string, VoteOperationDetails];\n}\n\ntype AccountVoteHistoryRecord = [number, AccountVoteHistoryItem];\n\ninterface VoteHistoryResult extends VoteOperationDetails {\n num: number;\n timestamp: string;\n}\n\nexport interface VoteHistoryPageParam {\n start: number;\n}\n\nexport interface VoteHistoryPage {\n lastDate: number;\n lastItemFetched: number;\n entries: Entry[];\n}\n\nfunction isEntry(x: unknown): x is Entry {\n return (\n !!x &&\n typeof x === \"object\" &&\n \"author\" in x &&\n \"permlink\" in x &&\n \"active_votes\" in x\n );\n}\n\n/**\n * Calculate days since a date\n */\nfunction getDays(createdDate: string): number {\n const past = new Date(createdDate);\n const now = new Date();\n const diffMs = now.getTime() - past.getTime();\n return diffMs / (1000 * 60 * 60 * 24);\n}\n\n/**\n * Get account vote history with entries\n *\n * @param username - Account name to get vote history for\n * @param limit - Number of history items per page (default: 20)\n * @param filters - Additional filters to pass to get_account_history\n * @param dayLimit - Only include votes from last N days (default: 7)\n */\nexport function getAccountVoteHistoryInfiniteQueryOptions<F>(\n username: string,\n options?: {\n limit?: number;\n filters?: F[];\n dayLimit?: number;\n }\n) {\n const { limit = 20, filters = [], dayLimit = 7.0 } = options ?? {};\n\n return infiniteQueryOptions<\n VoteHistoryPage,\n Error,\n VoteHistoryPage,\n (string | number)[],\n VoteHistoryPageParam\n >({\n queryKey: QueryKeys.accounts.voteHistory(username, limit),\n initialPageParam: { start: -1 },\n\n queryFn: async ({ pageParam }: { pageParam: VoteHistoryPageParam }) => {\n const { start } = pageParam;\n\n const response = (await CONFIG.hiveClient.call(\n \"condenser_api\",\n \"get_account_history\",\n [username, start, limit, ...filters]\n )) as AccountVoteHistoryRecord[];\n\n const mappedResults: VoteHistoryResult[] = response.map(([num, historyObj]) => ({\n ...historyObj.op[1],\n num,\n timestamp: historyObj.timestamp,\n }));\n\n const result = mappedResults.filter(\n (filtered) =>\n filtered.voter === username &&\n filtered.weight !== 0 &&\n getDays(filtered.timestamp) <= dayLimit\n );\n\n const entries: Entry[] = [];\n for (const obj of result) {\n const post = await CONFIG.queryClient.fetchQuery(\n getPostQueryOptions(obj.author, obj.permlink)\n );\n if (isEntry(post)) entries.push(post);\n }\n\n const [firstHistory] = response;\n\n return {\n lastDate: firstHistory ? getDays(firstHistory[1].timestamp) : 0,\n lastItemFetched: firstHistory ? firstHistory[0] : start,\n entries,\n };\n },\n\n getNextPageParam: (lastPage: VoteHistoryPage): VoteHistoryPageParam => ({\n start: lastPage.lastItemFetched,\n }),\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Profile } from \"../types\";\nimport { getProfiles } from \"@/modules/bridge\";\n\nexport function getProfilesQueryOptions(\n accounts: string[],\n observer?: string,\n enabled = true\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.profiles(accounts, observer ?? \"\"),\n enabled: enabled && accounts.length > 0,\n queryFn: async () => getProfiles(accounts, observer) as Promise<Profile[]>,\n });\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport * as R from \"remeda\";\nimport { getAccountFullQueryOptions } from \"../queries\";\nimport { AccountProfile, FullAccount } from \"../types\";\nimport {\n buildProfileMetadata,\n extractAccountProfile,\n} from \"../utils/profile-metadata\";\n\ninterface Payload {\n profile: Partial<AccountProfile>;\n tokens: AccountProfile[\"tokens\"];\n}\n\n/**\n * React Query mutation hook for updating account profile metadata.\n *\n * This mutation broadcasts an account_update2 operation to update the user's\n * profile information (name, about, location, avatar, cover image, etc.).\n *\n * @param username - The username to update (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Profile Fields:**\n * - name: Display name\n * - about: Bio/description\n * - location: Location\n * - website: Website URL\n * - profile_image: Avatar URL\n * - cover_image: Cover/banner URL\n * - tokens: Social tokens (Twitter, Facebook, etc.)\n * - version: Profile metadata version (auto-set to 2)\n *\n * **Authentication:**\n * - Uses posting authority (account_update2 operation)\n * - Supports all auth methods via platform adapter\n *\n * **Post-Broadcast Actions:**\n * - Optimistically updates account cache with new profile data\n * - Invalidates account cache to refetch from blockchain\n *\n * @example\n * ```typescript\n * const updateProfile = useAccountUpdate(username, {\n * adapter: myAdapter,\n * });\n *\n * // Update profile\n * updateProfile.mutate({\n * profile: {\n * name: \"John Doe\",\n * about: \"Hive enthusiast\",\n * profile_image: \"https://...\",\n * }\n * });\n * ```\n */\nexport function useAccountUpdate(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n const queryClient = useQueryClient();\n\n const { data } = useQuery(getAccountFullQueryOptions(username));\n\n return useBroadcastMutation(\n [\"accounts\", \"update\"],\n username,\n (payload: Partial<Payload>) => {\n if (!data) {\n throw new Error(\"[SDK][Accounts] – cannot update not existing account\");\n }\n\n const profile = buildProfileMetadata({\n existingProfile: extractAccountProfile(data),\n profile: payload.profile,\n tokens: payload.tokens,\n });\n\n return [\n [\n \"account_update2\",\n {\n account: username,\n json_metadata: \"\",\n extensions: [],\n posting_json_metadata: JSON.stringify({\n profile,\n }),\n },\n ],\n ];\n },\n async (_data: unknown, variables: Partial<Payload>) => {\n // Optimistic cache update\n queryClient.setQueryData<FullAccount>(\n getAccountFullQueryOptions(username).queryKey,\n (data) => {\n if (!data) {\n return data;\n }\n\n const obj = R.clone(data);\n obj.profile = buildProfileMetadata({\n existingProfile: extractAccountProfile(data),\n profile: variables.profile,\n tokens: variables.tokens,\n });\n\n return obj;\n }\n );\n\n // Invalidate cache to refetch from blockchain\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username)\n ]);\n }\n },\n auth\n );\n}\n","import { broadcastJson, getQueryClient } from \"@/modules/core\";\nimport type { AuthContext } from \"@/modules/core/types\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { getRelationshipBetweenAccountsQueryOptions, getAccountFullQueryOptions } from \"../queries\";\nimport { AccountRelationship } from \"../types\";\n\ntype Kind = \"toggle-ignore\" | \"toggle-follow\";\n\nexport function useAccountRelationsUpdate(\n reference: string | undefined,\n target: string | undefined,\n auth: AuthContext | undefined,\n onSuccess: (data: Partial<AccountRelationship> | undefined) => void,\n onError: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"accounts\", \"relation\", \"update\", reference, target],\n mutationFn: async (kind: Kind) => {\n const relationsQuery = getRelationshipBetweenAccountsQueryOptions(\n reference!,\n target!\n );\n await getQueryClient().prefetchQuery(relationsQuery);\n const actualRelation = getQueryClient().getQueryData(\n relationsQuery.queryKey\n );\n\n await broadcastJson(\n reference,\n \"follow\",\n [\n \"follow\",\n {\n follower: reference,\n following: target,\n what: [\n ...(kind === \"toggle-ignore\" && !actualRelation?.ignores\n ? [\"ignore\"]\n : []),\n ...(kind === \"toggle-follow\" && !actualRelation?.follows\n ? [\"blog\"]\n : []),\n ],\n },\n ],\n auth\n );\n\n return {\n ...actualRelation,\n ignores:\n kind === \"toggle-ignore\"\n ? !actualRelation?.ignores\n : actualRelation?.ignores,\n follows:\n kind === \"toggle-follow\"\n ? !actualRelation?.follows\n : actualRelation?.follows,\n } satisfies Partial<AccountRelationship>;\n },\n onError,\n onSuccess(data) {\n onSuccess(data);\n\n getQueryClient().setQueryData(\n [\"accounts\", \"relations\", reference, target],\n data\n );\n\n // Invalidate account query to refetch follow stats (follower_count, following_count)\n // This is needed because profile pages use staleTime: Infinity for performance\n if (target) {\n getQueryClient().invalidateQueries(\n getAccountFullQueryOptions(target)\n );\n }\n },\n });\n}\n","import { Operation } from \"@hiveio/dhive\";\n\n/**\n * Content Operations\n * Operations for creating, voting, and managing content on Hive blockchain\n */\n\n/**\n * Builds a vote operation.\n * @param voter - Account casting the vote\n * @param author - Author of the post/comment\n * @param permlink - Permlink of the post/comment\n * @param weight - Vote weight (-10000 to 10000, where 10000 = 100% upvote, -10000 = 100% downvote)\n * @returns Vote operation\n */\nexport function buildVoteOp(\n voter: string,\n author: string,\n permlink: string,\n weight: number\n): Operation {\n if (!voter || !author || !permlink) {\n throw new Error(\"[SDK][buildVoteOp] Missing required parameters\");\n }\n if (weight < -10000 || weight > 10000) {\n throw new Error(\"[SDK][buildVoteOp] Weight must be between -10000 and 10000\");\n }\n\n return [\n \"vote\",\n {\n voter,\n author,\n permlink,\n weight,\n },\n ];\n}\n\n/**\n * Builds a comment operation (for posts or replies).\n * @param author - Author of the comment/post\n * @param permlink - Permlink of the comment/post\n * @param parentAuthor - Parent author (empty string for top-level posts)\n * @param parentPermlink - Parent permlink (category/tag for top-level posts)\n * @param title - Title of the post (empty for comments)\n * @param body - Content body (required - cannot be empty)\n * @param jsonMetadata - JSON metadata object\n * @returns Comment operation\n */\nexport function buildCommentOp(\n author: string,\n permlink: string,\n parentAuthor: string,\n parentPermlink: string,\n title: string,\n body: string,\n jsonMetadata: Record<string, any>\n): Operation {\n // Validate all required parameters including body\n if (!author || !permlink || parentPermlink === undefined || !body) {\n throw new Error(\"[SDK][buildCommentOp] Missing required parameters\");\n }\n\n return [\n \"comment\",\n {\n parent_author: parentAuthor,\n parent_permlink: parentPermlink,\n author,\n permlink,\n title,\n body,\n json_metadata: JSON.stringify(jsonMetadata),\n },\n ];\n}\n\n/**\n * Builds a comment options operation (for setting beneficiaries, rewards, etc.).\n * @param author - Author of the comment/post\n * @param permlink - Permlink of the comment/post\n * @param maxAcceptedPayout - Maximum accepted payout (e.g., \"1000000.000 HBD\")\n * @param percentHbd - Percent of payout in HBD (10000 = 100%)\n * @param allowVotes - Allow votes on this content\n * @param allowCurationRewards - Allow curation rewards\n * @param extensions - Extensions array (for beneficiaries, etc.)\n * @returns Comment options operation\n */\nexport function buildCommentOptionsOp(\n author: string,\n permlink: string,\n maxAcceptedPayout: string,\n percentHbd: number,\n allowVotes: boolean,\n allowCurationRewards: boolean,\n extensions: any[]\n): Operation {\n if (!author || !permlink) {\n throw new Error(\"[SDK][buildCommentOptionsOp] Missing required parameters\");\n }\n\n return [\n \"comment_options\",\n {\n author,\n permlink,\n max_accepted_payout: maxAcceptedPayout,\n percent_hbd: percentHbd,\n allow_votes: allowVotes,\n allow_curation_rewards: allowCurationRewards,\n extensions,\n },\n ];\n}\n\n/**\n * Builds a delete comment operation.\n * @param author - Author of the comment/post to delete\n * @param permlink - Permlink of the comment/post to delete\n * @returns Delete comment operation\n */\nexport function buildDeleteCommentOp(author: string, permlink: string): Operation {\n if (!author || !permlink) {\n throw new Error(\"[SDK][buildDeleteCommentOp] Missing required parameters\");\n }\n\n return [\n \"delete_comment\",\n {\n author,\n permlink,\n },\n ];\n}\n\n/**\n * Builds a reblog operation (custom_json).\n * @param account - Account performing the reblog\n * @param author - Original post author\n * @param permlink - Original post permlink\n * @param deleteReblog - If true, removes the reblog\n * @returns Custom JSON operation for reblog\n */\nexport function buildReblogOp(\n account: string,\n author: string,\n permlink: string,\n deleteReblog: boolean = false\n): Operation {\n if (!account || !author || !permlink) {\n throw new Error(\"[SDK][buildReblogOp] Missing required parameters\");\n }\n\n const json: any = {\n account,\n author,\n permlink,\n };\n\n if (deleteReblog) {\n json.delete = \"delete\";\n }\n\n return [\n \"custom_json\",\n {\n id: \"follow\",\n json: JSON.stringify([\"reblog\", json]),\n required_auths: [],\n required_posting_auths: [account],\n },\n ];\n}\n","import { Operation } from \"@hiveio/dhive\";\n\n/**\n * Wallet Operations\n * Operations for managing tokens, savings, vesting, and conversions\n */\n\n/**\n * Builds a transfer operation.\n * @param from - Sender account\n * @param to - Receiver account\n * @param amount - Amount with asset symbol (e.g., \"1.000 HIVE\")\n * @param memo - Transfer memo\n * @returns Transfer operation\n */\nexport function buildTransferOp(\n from: string,\n to: string,\n amount: string,\n memo: string\n): Operation {\n if (!from || !to || !amount) {\n throw new Error(\"[SDK][buildTransferOp] Missing required parameters\");\n }\n\n return [\n \"transfer\",\n {\n from,\n to,\n amount,\n memo: memo || \"\",\n },\n ];\n}\n\n/**\n * Builds multiple transfer operations for multiple recipients.\n * @param from - Sender account\n * @param destinations - Comma or space separated list of recipient accounts\n * @param amount - Amount with asset symbol (e.g., \"1.000 HIVE\")\n * @param memo - Transfer memo\n * @returns Array of transfer operations\n */\nexport function buildMultiTransferOps(\n from: string,\n destinations: string,\n amount: string,\n memo: string\n): Operation[] {\n if (!from || !destinations || !amount) {\n throw new Error(\"[SDK][buildMultiTransferOps] Missing required parameters\");\n }\n\n // Split the destination input into an array of usernames\n const destArray = destinations\n .trim()\n .split(/[\\s,]+/)\n .filter(Boolean);\n\n // Create a transfer operation for each destination username\n return destArray.map((dest) =>\n buildTransferOp(from, dest.trim(), amount, memo)\n );\n}\n\n/**\n * Builds a recurrent transfer operation.\n * @param from - Sender account\n * @param to - Receiver account\n * @param amount - Amount with asset symbol (e.g., \"1.000 HIVE\")\n * @param memo - Transfer memo\n * @param recurrence - Recurrence in hours\n * @param executions - Number of executions (2 = executes twice)\n * @returns Recurrent transfer operation\n */\nexport function buildRecurrentTransferOp(\n from: string,\n to: string,\n amount: string,\n memo: string,\n recurrence: number,\n executions: number\n): Operation {\n if (!from || !to || !amount) {\n throw new Error(\"[SDK][buildRecurrentTransferOp] Missing required parameters\");\n }\n if (recurrence < 24) {\n throw new Error(\"[SDK][buildRecurrentTransferOp] Recurrence must be at least 24 hours\");\n }\n\n return [\n \"recurrent_transfer\",\n {\n from,\n to,\n amount,\n memo: memo || \"\",\n recurrence,\n executions,\n extensions: [],\n },\n ];\n}\n\n/**\n * Builds a transfer to savings operation.\n * @param from - Sender account\n * @param to - Receiver account\n * @param amount - Amount with asset symbol (e.g., \"1.000 HIVE\")\n * @param memo - Transfer memo\n * @returns Transfer to savings operation\n */\nexport function buildTransferToSavingsOp(\n from: string,\n to: string,\n amount: string,\n memo: string\n): Operation {\n if (!from || !to || !amount) {\n throw new Error(\"[SDK][buildTransferToSavingsOp] Missing required parameters\");\n }\n\n return [\n \"transfer_to_savings\",\n {\n from,\n to,\n amount,\n memo: memo || \"\",\n },\n ];\n}\n\n/**\n * Builds a transfer from savings operation.\n * @param from - Sender account\n * @param to - Receiver account\n * @param amount - Amount with asset symbol (e.g., \"1.000 HIVE\")\n * @param memo - Transfer memo\n * @param requestId - Unique request ID (use timestamp)\n * @returns Transfer from savings operation\n */\nexport function buildTransferFromSavingsOp(\n from: string,\n to: string,\n amount: string,\n memo: string,\n requestId: number\n): Operation {\n if (!from || !to || !amount || requestId === undefined) {\n throw new Error(\"[SDK][buildTransferFromSavingsOp] Missing required parameters\");\n }\n\n return [\n \"transfer_from_savings\",\n {\n from,\n to,\n amount,\n memo: memo || \"\",\n request_id: requestId,\n },\n ];\n}\n\n/**\n * Builds a cancel transfer from savings operation.\n * @param from - Account that initiated the savings withdrawal\n * @param requestId - Request ID to cancel\n * @returns Cancel transfer from savings operation\n */\nexport function buildCancelTransferFromSavingsOp(\n from: string,\n requestId: number\n): Operation {\n if (!from || requestId === undefined) {\n throw new Error(\"[SDK][buildCancelTransferFromSavingsOp] Missing required parameters\");\n }\n\n return [\n \"cancel_transfer_from_savings\",\n {\n from,\n request_id: requestId,\n },\n ];\n}\n\n/**\n * Builds operations to claim savings interest.\n * Creates a transfer_from_savings and immediately cancels it to claim interest.\n * @param from - Account claiming interest\n * @param to - Receiver account\n * @param amount - Amount with asset symbol (e.g., \"0.001 HIVE\")\n * @param memo - Transfer memo\n * @param requestId - Unique request ID\n * @returns Array of operations [transfer_from_savings, cancel_transfer_from_savings]\n */\nexport function buildClaimInterestOps(\n from: string,\n to: string,\n amount: string,\n memo: string,\n requestId: number\n): Operation[] {\n if (!from || !to || !amount || requestId === undefined) {\n throw new Error(\"[SDK][buildClaimInterestOps] Missing required parameters\");\n }\n\n return [\n buildTransferFromSavingsOp(from, to, amount, memo, requestId),\n buildCancelTransferFromSavingsOp(from, requestId),\n ];\n}\n\n/**\n * Builds a transfer to vesting operation (power up).\n * @param from - Account sending HIVE\n * @param to - Account receiving Hive Power\n * @param amount - Amount with HIVE symbol (e.g., \"1.000 HIVE\")\n * @returns Transfer to vesting operation\n */\nexport function buildTransferToVestingOp(\n from: string,\n to: string,\n amount: string\n): Operation {\n if (!from || !to || !amount) {\n throw new Error(\"[SDK][buildTransferToVestingOp] Missing required parameters\");\n }\n\n return [\n \"transfer_to_vesting\",\n {\n from,\n to,\n amount,\n },\n ];\n}\n\n/**\n * Builds a withdraw vesting operation (power down).\n * @param account - Account withdrawing vesting\n * @param vestingShares - Amount of VESTS to withdraw (e.g., \"1.000000 VESTS\")\n * @returns Withdraw vesting operation\n */\nexport function buildWithdrawVestingOp(\n account: string,\n vestingShares: string\n): Operation {\n if (!account || !vestingShares) {\n throw new Error(\"[SDK][buildWithdrawVestingOp] Missing required parameters\");\n }\n\n return [\n \"withdraw_vesting\",\n {\n account,\n vesting_shares: vestingShares,\n },\n ];\n}\n\n/**\n * Builds a delegate vesting shares operation (HP delegation).\n * @param delegator - Account delegating HP\n * @param delegatee - Account receiving HP delegation\n * @param vestingShares - Amount of VESTS to delegate (e.g., \"1000.000000 VESTS\")\n * @returns Delegate vesting shares operation\n */\nexport function buildDelegateVestingSharesOp(\n delegator: string,\n delegatee: string,\n vestingShares: string\n): Operation {\n if (!delegator || !delegatee || !vestingShares) {\n throw new Error(\"[SDK][buildDelegateVestingSharesOp] Missing required parameters\");\n }\n\n return [\n \"delegate_vesting_shares\",\n {\n delegator,\n delegatee,\n vesting_shares: vestingShares,\n },\n ];\n}\n\n/**\n * Builds a set withdraw vesting route operation.\n * @param fromAccount - Account withdrawing vesting\n * @param toAccount - Account receiving withdrawn vesting\n * @param percent - Percentage to route (0-10000, where 10000 = 100%)\n * @param autoVest - Auto convert to vesting\n * @returns Set withdraw vesting route operation\n */\nexport function buildSetWithdrawVestingRouteOp(\n fromAccount: string,\n toAccount: string,\n percent: number,\n autoVest: boolean\n): Operation {\n if (!fromAccount || !toAccount || percent === undefined) {\n throw new Error(\"[SDK][buildSetWithdrawVestingRouteOp] Missing required parameters\");\n }\n if (percent < 0 || percent > 10000) {\n throw new Error(\"[SDK][buildSetWithdrawVestingRouteOp] Percent must be between 0 and 10000\");\n }\n\n return [\n \"set_withdraw_vesting_route\",\n {\n from_account: fromAccount,\n to_account: toAccount,\n percent,\n auto_vest: autoVest,\n },\n ];\n}\n\n/**\n * Builds a convert operation (HBD to HIVE).\n * @param owner - Account converting HBD\n * @param amount - Amount of HBD to convert (e.g., \"1.000 HBD\")\n * @param requestId - Unique request ID (use timestamp)\n * @returns Convert operation\n */\nexport function buildConvertOp(\n owner: string,\n amount: string,\n requestId: number\n): Operation {\n if (!owner || !amount || requestId === undefined) {\n throw new Error(\"[SDK][buildConvertOp] Missing required parameters\");\n }\n\n return [\n \"convert\",\n {\n owner,\n amount,\n requestid: requestId,\n },\n ];\n}\n\n/**\n * Builds a collateralized convert operation (HIVE to HBD via collateral).\n * @param owner - Account converting HIVE\n * @param amount - Amount of HIVE to convert (e.g., \"1.000 HIVE\")\n * @param requestId - Unique request ID (use timestamp)\n * @returns Collateralized convert operation\n */\nexport function buildCollateralizedConvertOp(\n owner: string,\n amount: string,\n requestId: number\n): Operation {\n if (!owner || !amount || requestId === undefined) {\n throw new Error(\"[SDK][buildCollateralizedConvertOp] Missing required parameters\");\n }\n\n return [\n \"collateralized_convert\",\n {\n owner,\n amount,\n requestid: requestId,\n },\n ];\n}\n\n/**\n * Builds a delegate RC operation (custom_json).\n * @param from - Account delegating RC\n * @param delegatees - Single delegatee or comma-separated list\n * @param maxRc - Maximum RC to delegate (in mana units)\n * @returns Custom JSON operation for RC delegation\n */\n/**\n * Builds a SPK Network custom_json operation.\n * @param from - Account performing the operation\n * @param id - SPK operation ID (e.g., \"spkcc_spk_send\", \"spkcc_gov_up\")\n * @param amount - Amount (multiplied by 1000 internally)\n * @returns Custom JSON operation\n */\nexport function buildSpkCustomJsonOp(\n from: string,\n id: string,\n amount: number\n): Operation {\n return [\"custom_json\", {\n id,\n required_auths: [from],\n required_posting_auths: [],\n json: JSON.stringify({ amount: amount * 1000 }),\n }];\n}\n\n/**\n * Builds a Hive Engine custom_json operation.\n * @param from - Account performing the operation\n * @param contractAction - Engine contract action (e.g., \"transfer\", \"stake\")\n * @param contractPayload - Payload for the contract action\n * @param contractName - Engine contract name (defaults to \"tokens\")\n * @returns Custom JSON operation\n */\nexport function buildEngineOp(\n from: string,\n contractAction: string,\n contractPayload: Record<string, string>,\n contractName = \"tokens\"\n): Operation {\n return [\"custom_json\", {\n id: \"ssc-mainnet-hive\",\n required_auths: [from],\n required_posting_auths: [],\n json: JSON.stringify({ contractName, contractAction, contractPayload }),\n }];\n}\n\n/**\n * Builds a scot_claim_token operation (posting authority).\n * @param account - Account claiming rewards\n * @param tokens - Array of token symbols to claim\n * @returns Custom JSON operation\n */\nexport function buildEngineClaimOp(\n account: string,\n tokens: string[]\n): Operation {\n return [\"custom_json\", {\n id: \"scot_claim_token\",\n required_auths: [],\n required_posting_auths: [account],\n json: JSON.stringify(tokens.map((symbol) => ({ symbol }))),\n }];\n}\n\nexport function buildDelegateRcOp(\n from: string,\n delegatees: string,\n maxRc: string | number\n): Operation {\n if (!from || !delegatees || maxRc === undefined) {\n throw new Error(\"[SDK][buildDelegateRcOp] Missing required parameters\");\n }\n\n const delegateeArray = delegatees.includes(\",\")\n ? delegatees.split(\",\").map((d) => d.trim())\n : [delegatees];\n\n return [\n \"custom_json\",\n {\n id: \"rc\",\n json: JSON.stringify([\n \"delegate_rc\",\n {\n from,\n delegatees: delegateeArray,\n max_rc: maxRc,\n },\n ]),\n required_auths: [],\n required_posting_auths: [from],\n },\n ];\n}\n","import { Operation } from \"@hiveio/dhive\";\n\n/**\n * Social Operations\n * Operations for following, muting, and managing social relationships\n */\n\n/**\n * Builds a follow operation (custom_json).\n * @param follower - Account following\n * @param following - Account to follow\n * @returns Custom JSON operation for follow\n */\nexport function buildFollowOp(follower: string, following: string): Operation {\n if (!follower || !following) {\n throw new Error(\"[SDK][buildFollowOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"follow\",\n json: JSON.stringify([\n \"follow\",\n {\n follower,\n following,\n what: [\"blog\"],\n },\n ]),\n required_auths: [],\n required_posting_auths: [follower],\n },\n ];\n}\n\n/**\n * Builds an unfollow operation (custom_json).\n * @param follower - Account unfollowing\n * @param following - Account to unfollow\n * @returns Custom JSON operation for unfollow\n */\nexport function buildUnfollowOp(follower: string, following: string): Operation {\n if (!follower || !following) {\n throw new Error(\"[SDK][buildUnfollowOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"follow\",\n json: JSON.stringify([\n \"follow\",\n {\n follower,\n following,\n what: [],\n },\n ]),\n required_auths: [],\n required_posting_auths: [follower],\n },\n ];\n}\n\n/**\n * Builds an ignore/mute operation (custom_json).\n * @param follower - Account ignoring\n * @param following - Account to ignore\n * @returns Custom JSON operation for ignore\n */\nexport function buildIgnoreOp(follower: string, following: string): Operation {\n if (!follower || !following) {\n throw new Error(\"[SDK][buildIgnoreOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"follow\",\n json: JSON.stringify([\n \"follow\",\n {\n follower,\n following,\n what: [\"ignore\"],\n },\n ]),\n required_auths: [],\n required_posting_auths: [follower],\n },\n ];\n}\n\n/**\n * Builds an unignore/unmute operation (custom_json).\n * @param follower - Account unignoring\n * @param following - Account to unignore\n * @returns Custom JSON operation for unignore\n */\nexport function buildUnignoreOp(follower: string, following: string): Operation {\n if (!follower || !following) {\n throw new Error(\"[SDK][buildUnignoreOp] Missing required parameters\");\n }\n\n return buildUnfollowOp(follower, following);\n}\n\n/**\n * Builds a Hive Notify set last read operation (custom_json).\n * @param username - Account setting last read\n * @param date - ISO date string (defaults to now)\n * @returns Array of custom JSON operations for setting last read\n */\nexport function buildSetLastReadOps(username: string, date?: string): Operation[] {\n if (!username) {\n throw new Error(\"[SDK][buildSetLastReadOps] Missing required parameters\");\n }\n\n const lastReadDate = date || new Date().toISOString().split(\".\")[0];\n\n const notifyOp: Operation = [\n \"custom_json\",\n {\n id: \"notify\",\n json: JSON.stringify([\"setLastRead\", { date: lastReadDate }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n\n const ecencyNotifyOp: Operation = [\n \"custom_json\",\n {\n id: \"ecency_notify\",\n json: JSON.stringify([\"setLastRead\", { date: lastReadDate }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n\n return [notifyOp, ecencyNotifyOp];\n}\n","import { Operation } from \"@hiveio/dhive\";\n\n/**\n * Governance Operations\n * Operations for witness voting, proposals, and proxy management\n */\n\n/**\n * Builds an account witness vote operation.\n * @param account - Account voting\n * @param witness - Witness account name\n * @param approve - True to approve, false to disapprove\n * @returns Account witness vote operation\n */\nexport function buildWitnessVoteOp(\n account: string,\n witness: string,\n approve: boolean\n): Operation {\n if (!account || !witness || approve === undefined) {\n throw new Error(\"[SDK][buildWitnessVoteOp] Missing required parameters\");\n }\n\n return [\n \"account_witness_vote\",\n {\n account,\n witness,\n approve,\n },\n ];\n}\n\n/**\n * Builds an account witness proxy operation.\n * @param account - Account setting proxy\n * @param proxy - Proxy account name (empty string to remove proxy)\n * @returns Account witness proxy operation\n */\nexport function buildWitnessProxyOp(account: string, proxy: string): Operation {\n if (!account || proxy === undefined) {\n throw new Error(\"[SDK][buildWitnessProxyOp] Missing required parameters\");\n }\n\n return [\n \"account_witness_proxy\",\n {\n account,\n proxy,\n },\n ];\n}\n\n/**\n * Payload for proposal creation\n */\nexport interface ProposalCreatePayload {\n receiver: string;\n subject: string;\n permlink: string;\n start: string;\n end: string;\n dailyPay: string;\n}\n\n/**\n * Builds a create proposal operation.\n * @param creator - Account creating the proposal\n * @param payload - Proposal details (must include start, end, and dailyPay)\n * @returns Create proposal operation\n */\nexport function buildProposalCreateOp(\n creator: string,\n payload: ProposalCreatePayload\n): Operation {\n // Validate required fields including start, end, and dailyPay\n if (\n !creator ||\n !payload.receiver ||\n !payload.subject ||\n !payload.permlink ||\n !payload.start ||\n !payload.end ||\n !payload.dailyPay\n ) {\n throw new Error(\"[SDK][buildProposalCreateOp] Missing required parameters\");\n }\n\n // Validate date format by attempting to parse them\n const startDate = new Date(payload.start);\n const endDate = new Date(payload.end);\n if (startDate.toString() === 'Invalid Date' || endDate.toString() === 'Invalid Date') {\n throw new Error(\n \"[SDK][buildProposalCreateOp] Invalid date format: start and end must be valid ISO date strings\"\n );\n }\n\n return [\n \"create_proposal\",\n {\n creator,\n receiver: payload.receiver,\n start_date: payload.start,\n end_date: payload.end,\n daily_pay: payload.dailyPay,\n subject: payload.subject,\n permlink: payload.permlink,\n extensions: [],\n },\n ];\n}\n\n/**\n * Builds an update proposal votes operation.\n * @param voter - Account voting\n * @param proposalIds - Array of proposal IDs\n * @param approve - True to approve, false to disapprove\n * @returns Update proposal votes operation\n */\nexport function buildProposalVoteOp(\n voter: string,\n proposalIds: number[],\n approve: boolean\n): Operation {\n if (!voter || !proposalIds || proposalIds.length === 0 || approve === undefined) {\n throw new Error(\"[SDK][buildProposalVoteOp] Missing required parameters\");\n }\n\n return [\n \"update_proposal_votes\",\n {\n voter,\n proposal_ids: proposalIds,\n approve,\n extensions: [],\n },\n ];\n}\n\n/**\n * Builds a remove proposal operation.\n * @param proposalOwner - Owner of the proposal\n * @param proposalIds - Array of proposal IDs to remove\n * @returns Remove proposal operation\n */\nexport function buildRemoveProposalOp(\n proposalOwner: string,\n proposalIds: number[]\n): Operation {\n if (!proposalOwner || !proposalIds || proposalIds.length === 0) {\n throw new Error(\"[SDK][buildRemoveProposalOp] Missing required parameters\");\n }\n\n return [\n \"remove_proposal\",\n {\n proposal_owner: proposalOwner,\n proposal_ids: proposalIds,\n extensions: [],\n },\n ];\n}\n\n/**\n * Builds an update proposal operation.\n * @param proposalId - Proposal ID to update (must be a valid number, including 0)\n * @param creator - Account that created the proposal\n * @param dailyPay - New daily pay amount\n * @param subject - New subject\n * @param permlink - New permlink\n * @returns Update proposal operation\n */\nexport function buildUpdateProposalOp(\n proposalId: number,\n creator: string,\n dailyPay: string,\n subject: string,\n permlink: string\n): Operation {\n // Validate proposalId properly - check for undefined/null instead of falsy\n // This allows proposalId of 0 which is a valid proposal ID\n if (\n proposalId === undefined ||\n proposalId === null ||\n typeof proposalId !== 'number' ||\n !creator ||\n !dailyPay ||\n !subject ||\n !permlink\n ) {\n throw new Error(\"[SDK][buildUpdateProposalOp] Missing required parameters\");\n }\n\n return [\n \"update_proposal\",\n {\n proposal_id: proposalId,\n creator,\n daily_pay: dailyPay,\n subject,\n permlink,\n extensions: [],\n },\n ];\n}\n","import { Operation } from \"@hiveio/dhive\";\n\n/**\n * Community Operations\n * Operations for managing Hive communities\n */\n\n/**\n * Builds a subscribe to community operation (custom_json).\n * @param username - Account subscribing\n * @param community - Community name (e.g., \"hive-123456\")\n * @returns Custom JSON operation for subscribe\n */\nexport function buildSubscribeOp(username: string, community: string): Operation {\n if (!username || !community) {\n throw new Error(\"[SDK][buildSubscribeOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"community\",\n json: JSON.stringify([\"subscribe\", { community }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n\n/**\n * Builds an unsubscribe from community operation (custom_json).\n * @param username - Account unsubscribing\n * @param community - Community name (e.g., \"hive-123456\")\n * @returns Custom JSON operation for unsubscribe\n */\nexport function buildUnsubscribeOp(username: string, community: string): Operation {\n if (!username || !community) {\n throw new Error(\"[SDK][buildUnsubscribeOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"community\",\n json: JSON.stringify([\"unsubscribe\", { community }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n\n/**\n * Builds a set user role in community operation (custom_json).\n * @param username - Account setting the role (must have permission)\n * @param community - Community name (e.g., \"hive-123456\")\n * @param account - Account to set role for\n * @param role - Role name (e.g., \"admin\", \"mod\", \"member\", \"guest\")\n * @returns Custom JSON operation for setRole\n */\nexport function buildSetRoleOp(\n username: string,\n community: string,\n account: string,\n role: string\n): Operation {\n if (!username || !community || !account || !role) {\n throw new Error(\"[SDK][buildSetRoleOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"community\",\n json: JSON.stringify([\"setRole\", { community, account, role }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n\n/**\n * Community properties for update\n */\nexport interface CommunityProps {\n title: string;\n about: string;\n lang: string;\n description: string;\n flag_text: string;\n is_nsfw: boolean;\n}\n\n/**\n * Builds an update community properties operation (custom_json).\n * @param username - Account updating (must be community admin)\n * @param community - Community name (e.g., \"hive-123456\")\n * @param props - Properties to update\n * @returns Custom JSON operation for updateProps\n */\nexport function buildUpdateCommunityOp(\n username: string,\n community: string,\n props: CommunityProps\n): Operation {\n if (!username || !community || !props) {\n throw new Error(\"[SDK][buildUpdateCommunityOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"community\",\n json: JSON.stringify([\"updateProps\", { community, props }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n\n/**\n * Builds a pin/unpin post in community operation (custom_json).\n * @param username - Account pinning (must have permission)\n * @param community - Community name (e.g., \"hive-123456\")\n * @param account - Post author\n * @param permlink - Post permlink\n * @param pin - True to pin, false to unpin\n * @returns Custom JSON operation for pinPost/unpinPost\n */\nexport function buildPinPostOp(\n username: string,\n community: string,\n account: string,\n permlink: string,\n pin: boolean\n): Operation {\n if (!username || !community || !account || !permlink || pin === undefined) {\n throw new Error(\"[SDK][buildPinPostOp] Missing required parameters\");\n }\n\n const action = pin ? \"pinPost\" : \"unpinPost\";\n\n return [\n \"custom_json\",\n {\n id: \"community\",\n json: JSON.stringify([action, { community, account, permlink }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n\n/**\n * Builds a mute/unmute post in community operation (custom_json).\n * @param username - Account muting (must have permission)\n * @param community - Community name (e.g., \"hive-123456\")\n * @param account - Post author\n * @param permlink - Post permlink\n * @param notes - Mute reason/notes\n * @param mute - True to mute, false to unmute\n * @returns Custom JSON operation for mutePost/unmutePost\n */\nexport function buildMutePostOp(\n username: string,\n community: string,\n account: string,\n permlink: string,\n notes: string,\n mute: boolean\n): Operation {\n if (\n !username ||\n !community ||\n !account ||\n !permlink ||\n mute === undefined\n ) {\n throw new Error(\"[SDK][buildMutePostOp] Missing required parameters\");\n }\n\n const action = mute ? \"mutePost\" : \"unmutePost\";\n\n return [\n \"custom_json\",\n {\n id: \"community\",\n json: JSON.stringify([action, { community, account, permlink, notes }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n\n/**\n * Builds a mute/unmute user in community operation (custom_json).\n * @param username - Account performing mute (must have permission)\n * @param community - Community name (e.g., \"hive-123456\")\n * @param account - Account to mute/unmute\n * @param notes - Mute reason/notes\n * @param mute - True to mute, false to unmute\n * @returns Custom JSON operation for muteUser/unmuteUser\n */\nexport function buildMuteUserOp(\n username: string,\n community: string,\n account: string,\n notes: string,\n mute: boolean\n): Operation {\n if (!username || !community || !account || mute === undefined) {\n throw new Error(\"[SDK][buildMuteUserOp] Missing required parameters\");\n }\n\n const action = mute ? \"muteUser\" : \"unmuteUser\";\n\n return [\n \"custom_json\",\n {\n id: \"community\",\n json: JSON.stringify([action, { community, account, notes }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n\n/**\n * Builds a flag post in community operation (custom_json).\n * @param username - Account flagging\n * @param community - Community name (e.g., \"hive-123456\")\n * @param account - Post author\n * @param permlink - Post permlink\n * @param notes - Flag reason/notes\n * @returns Custom JSON operation for flagPost\n */\nexport function buildFlagPostOp(\n username: string,\n community: string,\n account: string,\n permlink: string,\n notes: string\n): Operation {\n if (!username || !community || !account || !permlink) {\n throw new Error(\"[SDK][buildFlagPostOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"community\",\n json: JSON.stringify([\"flagPost\", { community, account, permlink, notes }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n","import { Operation } from \"@hiveio/dhive\";\n\n/**\n * Market Operations\n * Operations for trading on the internal Hive market\n */\n\n/**\n * Transaction type for buy/sell operations\n */\nexport enum BuySellTransactionType {\n Buy = \"buy\",\n Sell = \"sell\",\n}\n\n/**\n * Order ID prefix for different order types\n */\nexport enum OrderIdPrefix {\n EMPTY = \"\",\n SWAP = \"9\",\n}\n\n/**\n * Builds a limit order create operation.\n * @param owner - Account creating the order\n * @param amountToSell - Amount and asset to sell\n * @param minToReceive - Minimum amount and asset to receive\n * @param fillOrKill - If true, order must be filled immediately or cancelled\n * @param expiration - Expiration date (ISO string)\n * @param orderId - Unique order ID\n * @returns Limit order create operation\n */\nexport function buildLimitOrderCreateOp(\n owner: string,\n amountToSell: string,\n minToReceive: string,\n fillOrKill: boolean,\n expiration: string,\n orderId: number\n): Operation {\n if (!owner || !amountToSell || !minToReceive || !expiration || orderId === undefined) {\n throw new Error(\"[SDK][buildLimitOrderCreateOp] Missing required parameters\");\n }\n\n return [\n \"limit_order_create\",\n {\n owner,\n orderid: orderId,\n amount_to_sell: amountToSell,\n min_to_receive: minToReceive,\n fill_or_kill: fillOrKill,\n expiration,\n },\n ];\n}\n\n/**\n * Helper to format number to 3 decimal places\n */\nfunction formatNumber(value: number, decimals: number = 3): string {\n return value.toFixed(decimals);\n}\n\n/**\n * Builds a limit order create operation with automatic formatting.\n * This is a convenience method that handles buy/sell logic and formatting.\n *\n * For Buy orders: You're buying HIVE with HBD\n * - amountToSell: HBD amount you're spending\n * - minToReceive: HIVE amount you want to receive\n *\n * For Sell orders: You're selling HIVE for HBD\n * - amountToSell: HIVE amount you're selling\n * - minToReceive: HBD amount you want to receive\n *\n * @param owner - Account creating the order\n * @param amountToSell - Amount to sell (number)\n * @param minToReceive - Minimum to receive (number)\n * @param orderType - Buy or Sell\n * @param idPrefix - Order ID prefix\n * @returns Limit order create operation\n */\nexport function buildLimitOrderCreateOpWithType(\n owner: string,\n amountToSell: number,\n minToReceive: number,\n orderType: BuySellTransactionType,\n idPrefix: OrderIdPrefix = OrderIdPrefix.EMPTY\n): Operation {\n // Validate numeric inputs\n if (\n !owner ||\n orderType === undefined ||\n !Number.isFinite(amountToSell) ||\n amountToSell <= 0 ||\n !Number.isFinite(minToReceive) ||\n minToReceive <= 0\n ) {\n throw new Error(\"[SDK][buildLimitOrderCreateOpWithType] Missing or invalid parameters\");\n }\n\n // Calculate expiration (27 days from now)\n const expiration = new Date(Date.now());\n expiration.setDate(expiration.getDate() + 27);\n const expirationStr = expiration.toISOString().split(\".\")[0];\n\n // Generate order ID\n const orderId = Number(\n `${idPrefix}${Math.floor(Date.now() / 1000)\n .toString()\n .slice(2)}`\n );\n\n // Format amounts based on order type\n // Buy: Sell HBD to buy HIVE\n // Sell: Sell HIVE to buy HBD\n const formattedAmountToSell =\n orderType === BuySellTransactionType.Buy\n ? `${formatNumber(amountToSell, 3)} HBD`\n : `${formatNumber(amountToSell, 3)} HIVE`;\n\n const formattedMinToReceive =\n orderType === BuySellTransactionType.Buy\n ? `${formatNumber(minToReceive, 3)} HIVE`\n : `${formatNumber(minToReceive, 3)} HBD`;\n\n return buildLimitOrderCreateOp(\n owner,\n formattedAmountToSell,\n formattedMinToReceive,\n false,\n expirationStr,\n orderId\n );\n}\n\n/**\n * Builds a limit order cancel operation.\n * @param owner - Account cancelling the order\n * @param orderId - Order ID to cancel\n * @returns Limit order cancel operation\n */\nexport function buildLimitOrderCancelOp(owner: string, orderId: number): Operation {\n if (!owner || orderId === undefined) {\n throw new Error(\"[SDK][buildLimitOrderCancelOp] Missing required parameters\");\n }\n\n return [\n \"limit_order_cancel\",\n {\n owner,\n orderid: orderId,\n },\n ];\n}\n\n/**\n * Builds a claim reward balance operation.\n * @param account - Account claiming rewards\n * @param rewardHive - HIVE reward to claim (e.g., \"0.000 HIVE\")\n * @param rewardHbd - HBD reward to claim (e.g., \"0.000 HBD\")\n * @param rewardVests - VESTS reward to claim (e.g., \"0.000000 VESTS\")\n * @returns Claim reward balance operation\n */\nexport function buildClaimRewardBalanceOp(\n account: string,\n rewardHive: string,\n rewardHbd: string,\n rewardVests: string\n): Operation {\n if (!account || !rewardHive || !rewardHbd || !rewardVests) {\n throw new Error(\"[SDK][buildClaimRewardBalanceOp] Missing required parameters\");\n }\n\n return [\n \"claim_reward_balance\",\n {\n account,\n reward_hive: rewardHive,\n reward_hbd: rewardHbd,\n reward_vests: rewardVests,\n },\n ];\n}\n","import { Operation } from \"@hiveio/dhive\";\n\n/**\n * Account Operations\n * Operations for managing accounts, keys, and permissions\n */\n\n/**\n * Authority structure for account operations\n */\nexport interface Authority {\n weight_threshold: number;\n account_auths: [string, number][];\n key_auths: [string, number][];\n}\n\n/**\n * Builds an account update operation.\n * @param account - Account name\n * @param owner - Owner authority (optional)\n * @param active - Active authority (optional)\n * @param posting - Posting authority (optional)\n * @param memoKey - Memo public key\n * @param jsonMetadata - Account JSON metadata\n * @returns Account update operation\n */\nexport function buildAccountUpdateOp(\n account: string,\n owner: Authority | undefined,\n active: Authority | undefined,\n posting: Authority | undefined,\n memoKey: string,\n jsonMetadata: string\n): Operation {\n if (!account || !memoKey) {\n throw new Error(\"[SDK][buildAccountUpdateOp] Missing required parameters\");\n }\n\n return [\n \"account_update\",\n {\n account,\n owner,\n active,\n posting,\n memo_key: memoKey,\n json_metadata: jsonMetadata,\n },\n ];\n}\n\n/**\n * Builds an account update2 operation (for posting_json_metadata).\n * @param account - Account name\n * @param jsonMetadata - Account JSON metadata (legacy, usually empty)\n * @param postingJsonMetadata - Posting JSON metadata string\n * @param extensions - Extensions array\n * @returns Account update2 operation\n */\nexport function buildAccountUpdate2Op(\n account: string,\n jsonMetadata: string,\n postingJsonMetadata: string,\n extensions: any[]\n): Operation {\n if (!account || postingJsonMetadata === undefined) {\n throw new Error(\"[SDK][buildAccountUpdate2Op] Missing required parameters\");\n }\n\n return [\n \"account_update2\",\n {\n account,\n json_metadata: jsonMetadata || \"\",\n posting_json_metadata: postingJsonMetadata,\n extensions: extensions || [],\n },\n ];\n}\n\n/**\n * Public keys for account creation\n */\nexport interface AccountKeys {\n ownerPublicKey: string;\n activePublicKey: string;\n postingPublicKey: string;\n memoPublicKey: string;\n}\n\n/**\n * Builds an account create operation.\n * @param creator - Creator account name\n * @param newAccountName - New account name\n * @param keys - Public keys for the new account\n * @param fee - Creation fee (e.g., \"3.000 HIVE\")\n * @returns Account create operation\n */\nexport function buildAccountCreateOp(\n creator: string,\n newAccountName: string,\n keys: AccountKeys,\n fee: string\n): Operation {\n if (!creator || !newAccountName || !keys || !fee) {\n throw new Error(\"[SDK][buildAccountCreateOp] Missing required parameters\");\n }\n\n const owner: Authority = {\n weight_threshold: 1,\n account_auths: [],\n key_auths: [[keys.ownerPublicKey, 1]],\n };\n\n const active: Authority = {\n weight_threshold: 1,\n account_auths: [],\n key_auths: [[keys.activePublicKey, 1]],\n };\n\n const posting: Authority = {\n weight_threshold: 1,\n account_auths: [[\"ecency.app\", 1]],\n key_auths: [[keys.postingPublicKey, 1]],\n };\n\n return [\n \"account_create\",\n {\n creator,\n new_account_name: newAccountName,\n owner,\n active,\n posting,\n memo_key: keys.memoPublicKey,\n json_metadata: \"\",\n extensions: [],\n fee,\n },\n ];\n}\n\n/**\n * Builds a create claimed account operation (using account creation tokens).\n * @param creator - Creator account name\n * @param newAccountName - New account name\n * @param keys - Public keys for the new account\n * @returns Create claimed account operation\n */\nexport function buildCreateClaimedAccountOp(\n creator: string,\n newAccountName: string,\n keys: AccountKeys\n): Operation {\n if (!creator || !newAccountName || !keys) {\n throw new Error(\"[SDK][buildCreateClaimedAccountOp] Missing required parameters\");\n }\n\n const owner: Authority = {\n weight_threshold: 1,\n account_auths: [],\n key_auths: [[keys.ownerPublicKey, 1]],\n };\n\n const active: Authority = {\n weight_threshold: 1,\n account_auths: [],\n key_auths: [[keys.activePublicKey, 1]],\n };\n\n const posting: Authority = {\n weight_threshold: 1,\n account_auths: [[\"ecency.app\", 1]],\n key_auths: [[keys.postingPublicKey, 1]],\n };\n\n return [\n \"create_claimed_account\",\n {\n creator,\n new_account_name: newAccountName,\n owner,\n active,\n posting,\n memo_key: keys.memoPublicKey,\n json_metadata: \"\",\n extensions: [],\n },\n ];\n}\n\n/**\n * Builds a claim account operation.\n * @param creator - Account claiming the token\n * @param fee - Fee for claiming (usually \"0.000 HIVE\" for RC-based claims)\n * @returns Claim account operation\n */\nexport function buildClaimAccountOp(creator: string, fee: string): Operation {\n if (!creator || !fee) {\n throw new Error(\"[SDK][buildClaimAccountOp] Missing required parameters\");\n }\n\n return [\n \"claim_account\",\n {\n creator,\n fee,\n extensions: [],\n },\n ];\n}\n\n/**\n * Builds an operation to grant posting permission to another account.\n * Helper that modifies posting authority to add an account.\n * @param account - Account granting permission\n * @param currentPosting - Current posting authority\n * @param grantedAccount - Account to grant permission to\n * @param weightThreshold - Weight threshold of the granted account\n * @param memoKey - Memo public key (required by Hive blockchain)\n * @param jsonMetadata - Account JSON metadata (required by Hive blockchain)\n * @returns Account update operation with modified posting authority\n */\nexport function buildGrantPostingPermissionOp(\n account: string,\n currentPosting: Authority,\n grantedAccount: string,\n weightThreshold: number,\n memoKey: string,\n jsonMetadata: string\n): Operation {\n if (!account || !currentPosting || !grantedAccount || !memoKey) {\n throw new Error(\"[SDK][buildGrantPostingPermissionOp] Missing required parameters\");\n }\n\n // Find existing account or create new entry to prevent duplicates\n const existingIndex = currentPosting.account_auths.findIndex(\n ([acc]) => acc === grantedAccount\n );\n\n const newAccountAuths = [...currentPosting.account_auths];\n if (existingIndex >= 0) {\n // Update existing entry with new weight\n newAccountAuths[existingIndex] = [grantedAccount, weightThreshold];\n } else {\n // Add new entry\n newAccountAuths.push([grantedAccount, weightThreshold]);\n }\n\n const newPosting: Authority = {\n ...currentPosting,\n account_auths: newAccountAuths,\n };\n\n // Sort account_auths alphabetically for consistency\n newPosting.account_auths.sort((a, b) => (a[0] > b[0] ? 1 : -1));\n\n return [\n \"account_update\",\n {\n account,\n posting: newPosting,\n memo_key: memoKey,\n json_metadata: jsonMetadata,\n },\n ];\n}\n\n/**\n * Builds an operation to revoke posting permission from an account.\n * Helper that modifies posting authority to remove an account.\n * @param account - Account revoking permission\n * @param currentPosting - Current posting authority\n * @param revokedAccount - Account to revoke permission from\n * @param memoKey - Memo public key (required by Hive blockchain)\n * @param jsonMetadata - Account JSON metadata (required by Hive blockchain)\n * @returns Account update operation with modified posting authority\n */\nexport function buildRevokePostingPermissionOp(\n account: string,\n currentPosting: Authority,\n revokedAccount: string,\n memoKey: string,\n jsonMetadata: string\n): Operation {\n if (!account || !currentPosting || !revokedAccount || !memoKey) {\n throw new Error(\"[SDK][buildRevokePostingPermissionOp] Missing required parameters\");\n }\n\n const newPosting: Authority = {\n ...currentPosting,\n account_auths: currentPosting.account_auths.filter(\n ([acc]) => acc !== revokedAccount\n ),\n };\n\n return [\n \"account_update\",\n {\n account,\n posting: newPosting,\n memo_key: memoKey,\n json_metadata: jsonMetadata,\n },\n ];\n}\n\n/**\n * Builds a change recovery account operation.\n * @param accountToRecover - Account to change recovery account for\n * @param newRecoveryAccount - New recovery account name\n * @param extensions - Extensions array\n * @returns Change recovery account operation\n */\nexport function buildChangeRecoveryAccountOp(\n accountToRecover: string,\n newRecoveryAccount: string,\n extensions: any[] = []\n): Operation {\n if (!accountToRecover || !newRecoveryAccount) {\n throw new Error(\"[SDK][buildChangeRecoveryAccountOp] Missing required parameters\");\n }\n\n return [\n \"change_recovery_account\",\n {\n account_to_recover: accountToRecover,\n new_recovery_account: newRecoveryAccount,\n extensions,\n },\n ];\n}\n\n/**\n * Builds a request account recovery operation.\n * @param recoveryAccount - Recovery account performing the recovery\n * @param accountToRecover - Account to recover\n * @param newOwnerAuthority - New owner authority\n * @param extensions - Extensions array\n * @returns Request account recovery operation\n */\nexport function buildRequestAccountRecoveryOp(\n recoveryAccount: string,\n accountToRecover: string,\n newOwnerAuthority: Authority,\n extensions: any[] = []\n): Operation {\n if (!recoveryAccount || !accountToRecover || !newOwnerAuthority) {\n throw new Error(\"[SDK][buildRequestAccountRecoveryOp] Missing required parameters\");\n }\n\n return [\n \"request_account_recovery\",\n {\n recovery_account: recoveryAccount,\n account_to_recover: accountToRecover,\n new_owner_authority: newOwnerAuthority,\n extensions,\n },\n ];\n}\n\n/**\n * Builds a recover account operation.\n * @param accountToRecover - Account to recover\n * @param newOwnerAuthority - New owner authority\n * @param recentOwnerAuthority - Recent owner authority (for proof)\n * @param extensions - Extensions array\n * @returns Recover account operation\n */\nexport function buildRecoverAccountOp(\n accountToRecover: string,\n newOwnerAuthority: Authority,\n recentOwnerAuthority: Authority,\n extensions: any[] = []\n): Operation {\n if (!accountToRecover || !newOwnerAuthority || !recentOwnerAuthority) {\n throw new Error(\"[SDK][buildRecoverAccountOp] Missing required parameters\");\n }\n\n return [\n \"recover_account\",\n {\n account_to_recover: accountToRecover,\n new_owner_authority: newOwnerAuthority,\n recent_owner_authority: recentOwnerAuthority,\n extensions,\n },\n ];\n}\n","import { Operation } from \"@hiveio/dhive\";\n\n/**\n * Ecency-Specific Operations\n * Custom operations for Ecency platform features (Points, Boost, Promote, etc.)\n */\n\n/**\n * Builds an Ecency boost operation (custom_json with active authority).\n * @param user - User account\n * @param author - Post author\n * @param permlink - Post permlink\n * @param amount - Amount to boost (e.g., \"1.000 POINT\")\n * @returns Custom JSON operation for boost\n */\nexport function buildBoostOp(\n user: string,\n author: string,\n permlink: string,\n amount: string\n): Operation {\n if (!user || !author || !permlink || !amount) {\n throw new Error(\"[SDK][buildBoostOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"ecency_boost\",\n json: JSON.stringify({\n user,\n author,\n permlink,\n amount,\n }),\n required_auths: [user],\n required_posting_auths: [],\n },\n ];\n}\n\n/**\n * Builds an Ecency boost operation with numeric point value.\n * @param user - User account\n * @param author - Post author\n * @param permlink - Post permlink\n * @param points - Points to spend (will be formatted as \"X.XXX POINT\", must be a valid finite number)\n * @returns Custom JSON operation for boost\n */\nexport function buildBoostOpWithPoints(\n user: string,\n author: string,\n permlink: string,\n points: number\n): Operation {\n // Validate required parameters and ensure points is a finite number (reject NaN, Infinity)\n if (!user || !author || !permlink || !Number.isFinite(points)) {\n throw new Error(\"[SDK][buildBoostOpWithPoints] Missing required parameters\");\n }\n\n return buildBoostOp(user, author, permlink, `${points.toFixed(3)} POINT`);\n}\n\n/**\n * Builds an Ecency Boost Plus subscription operation (custom_json).\n * @param user - User account\n * @param account - Account to subscribe\n * @param duration - Subscription duration in days (must be a valid finite number)\n * @returns Custom JSON operation for boost plus\n */\nexport function buildBoostPlusOp(\n user: string,\n account: string,\n duration: number\n): Operation {\n // Validate required parameters and ensure duration is a finite number (reject NaN, Infinity)\n if (!user || !account || !Number.isFinite(duration)) {\n throw new Error(\"[SDK][buildBoostPlusOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"ecency_boost_plus\",\n json: JSON.stringify({\n user,\n account,\n duration,\n }),\n required_auths: [user],\n required_posting_auths: [],\n },\n ];\n}\n\n/**\n * Builds an Ecency promote operation (custom_json).\n * @param user - User account\n * @param author - Post author\n * @param permlink - Post permlink\n * @param duration - Promotion duration in days (must be a valid finite number)\n * @returns Custom JSON operation for promote\n */\nexport function buildPromoteOp(\n user: string,\n author: string,\n permlink: string,\n duration: number\n): Operation {\n // Validate required parameters and ensure duration is a finite number (reject NaN, Infinity)\n if (!user || !author || !permlink || !Number.isFinite(duration)) {\n throw new Error(\"[SDK][buildPromoteOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"ecency_promote\",\n json: JSON.stringify({\n user,\n author,\n permlink,\n duration,\n }),\n required_auths: [user],\n required_posting_auths: [],\n },\n ];\n}\n\n/**\n * Builds an Ecency point transfer operation (custom_json).\n * @param sender - Sender account\n * @param receiver - Receiver account\n * @param amount - Amount to transfer\n * @param memo - Transfer memo\n * @returns Custom JSON operation for point transfer\n */\nexport function buildPointTransferOp(\n sender: string,\n receiver: string,\n amount: string,\n memo: string\n): Operation {\n if (!sender || !receiver || !amount) {\n throw new Error(\"[SDK][buildPointTransferOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"ecency_point_transfer\",\n json: JSON.stringify({\n sender,\n receiver,\n amount,\n memo: memo || \"\",\n }),\n required_auths: [sender],\n required_posting_auths: [],\n },\n ];\n}\n\n/**\n * Builds multiple Ecency point transfer operations for multiple recipients.\n * @param sender - Sender account\n * @param destinations - Comma or space separated list of recipients\n * @param amount - Amount to transfer\n * @param memo - Transfer memo\n * @returns Array of custom JSON operations for point transfers\n */\nexport function buildMultiPointTransferOps(\n sender: string,\n destinations: string,\n amount: string,\n memo: string\n): Operation[] {\n if (!sender || !destinations || !amount) {\n throw new Error(\"[SDK][buildMultiPointTransferOps] Missing required parameters\");\n }\n\n // Split the destination input into an array of usernames\n const destArray = destinations\n .trim()\n .split(/[\\s,]+/)\n .filter(Boolean);\n\n // Validate parsed destinations\n if (destArray.length === 0) {\n throw new Error(\"[SDK][buildMultiPointTransferOps] Missing valid destinations\");\n }\n\n // Create a point transfer operation for each destination\n return destArray.map((dest) =>\n buildPointTransferOp(sender, dest.trim(), amount, memo)\n );\n}\n\n/**\n * Builds an Ecency community rewards registration operation (custom_json).\n * @param name - Account name to register\n * @returns Custom JSON operation for community registration\n */\nexport function buildCommunityRegistrationOp(name: string): Operation {\n if (!name) {\n throw new Error(\"[SDK][buildCommunityRegistrationOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"ecency_registration\",\n json: JSON.stringify({\n name,\n }),\n required_auths: [name],\n required_posting_auths: [],\n },\n ];\n}\n\n/**\n * Builds a generic active authority custom_json operation.\n * Used for various Ecency operations that require active authority.\n * @param username - Account performing the operation\n * @param operationId - Custom JSON operation ID\n * @param json - JSON payload\n * @returns Custom JSON operation with active authority\n */\nexport function buildActiveCustomJsonOp(\n username: string,\n operationId: string,\n json: Record<string, any>\n): Operation {\n if (!username || !operationId || !json) {\n throw new Error(\"[SDK][buildActiveCustomJsonOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: operationId,\n json: JSON.stringify(json),\n required_auths: [username],\n required_posting_auths: [],\n },\n ];\n}\n\n/**\n * Builds a generic posting authority custom_json operation.\n * Used for various operations that require posting authority.\n * @param username - Account performing the operation\n * @param operationId - Custom JSON operation ID\n * @param json - JSON payload\n * @returns Custom JSON operation with posting authority\n */\nexport function buildPostingCustomJsonOp(\n username: string,\n operationId: string,\n json: Record<string, any> | any[]\n): Operation {\n if (!username || !operationId || !json) {\n throw new Error(\"[SDK][buildPostingCustomJsonOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: operationId,\n json: JSON.stringify(json),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildFollowOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for following an account.\n */\nexport interface FollowPayload {\n /** Account to follow */\n following: string;\n}\n\n/**\n * React Query mutation hook for following an account.\n *\n * This mutation broadcasts a follow operation to the Hive blockchain,\n * adding the target account to the follower's \"blog\" follow list.\n *\n * @param username - The username of the follower (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates relationship cache to show updated follow status\n * - Invalidates account cache to refetch updated follower/following counts\n *\n * @example\n * ```typescript\n * const followMutation = useFollow(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Follow an account\n * followMutation.mutate({\n * following: 'alice'\n * });\n * ```\n */\nexport function useFollow(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<FollowPayload>(\n [\"accounts\", \"follow\"],\n username,\n ({ following }) => [\n buildFollowOp(username!, following)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.relations(username!, variables.following),\n QueryKeys.accounts.full(variables.following)\n ]);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildUnfollowOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for unfollowing an account.\n */\nexport interface UnfollowPayload {\n /** Account to unfollow */\n following: string;\n}\n\n/**\n * React Query mutation hook for unfollowing an account.\n *\n * This mutation broadcasts an unfollow operation to the Hive blockchain,\n * removing the target account from the follower's follow list.\n *\n * @param username - The username of the follower (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates relationship cache to show updated follow status\n * - Invalidates account cache to refetch updated follower/following counts\n *\n * @example\n * ```typescript\n * const unfollowMutation = useUnfollow(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Unfollow an account\n * unfollowMutation.mutate({\n * following: 'alice'\n * });\n * ```\n */\nexport function useUnfollow(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<UnfollowPayload>(\n [\"accounts\", \"unfollow\"],\n username,\n ({ following }) => [\n buildUnfollowOp(username!, following)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.relations(username!, variables.following),\n QueryKeys.accounts.full(variables.following)\n ]);\n }\n },\n auth\n );\n}\n","import { CONFIG, getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { useMutation } from \"@tanstack/react-query\";\n\ninterface Payload {\n author: string;\n permlink: string;\n}\n\nexport function useBookmarkAdd(\n username: string | undefined,\n code: string | undefined,\n onSuccess: () => void,\n onError: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"accounts\", \"bookmarks\", \"add\", username],\n mutationFn: async ({ author, permlink }: Payload) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Account][Bookmarks] – missing auth\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/bookmarks-add\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n author,\n permlink,\n code,\n }),\n }\n );\n return response.json();\n },\n onSuccess: () => {\n onSuccess();\n getQueryClient().invalidateQueries({\n queryKey: [\"accounts\", \"bookmarks\", username],\n });\n },\n onError,\n });\n}\n","import { CONFIG, getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { useMutation } from \"@tanstack/react-query\";\n\nexport function useBookmarkDelete(\n username: string | undefined,\n code: string | undefined,\n onSuccess: () => void,\n onError: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"accounts\", \"bookmarks\", \"delete\", username],\n mutationFn: async (bookmarkId: string) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Account][Bookmarks] – missing auth\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/bookmarks-delete\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n id: bookmarkId,\n code,\n }),\n }\n );\n return response.json();\n },\n onSuccess: () => {\n onSuccess();\n getQueryClient().invalidateQueries({\n queryKey: [\"accounts\", \"bookmarks\", username],\n });\n },\n onError,\n });\n}\n","import { CONFIG, getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { useMutation } from \"@tanstack/react-query\";\n\nexport function useAccountFavouriteAdd(\n username: string | undefined,\n code: string | undefined,\n onSuccess: () => void,\n onError: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"accounts\", \"favourites\", \"add\", username],\n mutationFn: async (account: string) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Account][Bookmarks] – missing auth\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/favorites-add\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n account,\n code,\n }),\n }\n );\n return response.json();\n },\n onSuccess: () => {\n onSuccess();\n getQueryClient().invalidateQueries({\n queryKey: [\"accounts\", \"favourites\", username],\n });\n },\n onError,\n });\n}\n","import { CONFIG, getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { useMutation } from \"@tanstack/react-query\";\n\nexport function useAccountFavouriteDelete(\n username: string | undefined,\n code: string | undefined,\n onSuccess: () => void,\n onError: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"accounts\", \"favourites\", \"add\", username],\n mutationFn: async (account: string) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Account][Bookmarks] – missing auth\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/favorites-delete\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n account,\n code,\n }),\n }\n );\n return response.json();\n },\n onSuccess: () => {\n onSuccess();\n getQueryClient().invalidateQueries({\n queryKey: [\"accounts\", \"favourites\", username],\n });\n },\n onError,\n });\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { AuthorityType, PrivateKey } from \"@hiveio/dhive\";\nimport {\n useMutation,\n useQuery,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport * as R from \"remeda\";\nimport { getAccountFullQueryOptions } from \"../queries\";\n\nexport interface Keys {\n owner: PrivateKey;\n active: PrivateKey;\n posting: PrivateKey;\n memo_key: PrivateKey;\n}\n\ninterface Payload {\n keepCurrent?: boolean;\n currentKey: PrivateKey;\n keys: Keys[];\n keysToRevoke?: string[]; // Deprecated: will be treated as revoking from all authorities\n keysToRevokeByAuthority?: Partial<Record<keyof Keys, string[]>>; // Authority-specific revocation\n}\n\nexport function dedupeAndSortKeyAuths(\n existing: AuthorityType[\"key_auths\"],\n additions: [string, number][]\n): AuthorityType[\"key_auths\"] {\n const merged = new Map<string, number>();\n\n existing.forEach(([key, weight]) => {\n merged.set(key.toString(), weight);\n });\n\n additions.forEach(([key, weight]) => {\n merged.set(key.toString(), weight);\n });\n\n return Array.from(merged.entries())\n .sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n .map(([key, weight]) => [key, weight] as [string, number]);\n}\n\ntype UpdateKeyAuthsOptions = Pick<\n UseMutationOptions<unknown, Error, Payload>,\n \"onSuccess\" | \"onError\"\n>;\n\nexport function useAccountUpdateKeyAuths(\n username: string,\n options?: UpdateKeyAuthsOptions\n) {\n const { data: accountData } = useQuery(getAccountFullQueryOptions(username));\n\n return useMutation({\n mutationKey: [\"accounts\", \"keys-update\", username],\n mutationFn: async ({\n keys,\n keepCurrent = false,\n currentKey,\n keysToRevoke = [],\n keysToRevokeByAuthority = {}\n }: Payload) => {\n if (keys.length === 0) {\n throw new Error(\n \"[SDK][Update password] – no new keys provided\"\n );\n }\n\n if (!accountData) {\n throw new Error(\n \"[SDK][Update password] – cannot update keys for anon user\"\n );\n }\n\n const prepareAuth = (keyName: keyof Keys) => {\n const auth: AuthorityType = R.clone(accountData[keyName]);\n\n // Get keys to revoke for this specific authority\n const keysToRevokeForAuthority = keysToRevokeByAuthority[keyName] || [];\n // Fallback to global keysToRevoke for backwards compatibility\n const allKeysToRevoke = [\n ...keysToRevokeForAuthority,\n ...(keysToRevokeByAuthority[keyName] === undefined ? keysToRevoke : [])\n ];\n\n // Filter out keys to revoke from existing keys (authority-specific)\n const existingKeys = keepCurrent\n ? auth.key_auths.filter(([key]) => !allKeysToRevoke.includes(key.toString()))\n : [];\n\n auth.key_auths = dedupeAndSortKeyAuths(\n existingKeys,\n keys.map(\n (values, i) =>\n [values[keyName].createPublic().toString(), i + 1] as [\n string,\n number,\n ]\n )\n );\n\n return auth;\n };\n\n return CONFIG.hiveClient.broadcast.updateAccount(\n {\n account: username,\n json_metadata: accountData.json_metadata,\n owner: prepareAuth(\"owner\"),\n active: prepareAuth(\"active\"),\n posting: prepareAuth(\"posting\"),\n // Always use new memo key when adding new keys\n memo_key: keys[0].memo_key.createPublic().toString(),\n },\n currentKey\n );\n },\n ...options,\n });\n}\n","import { PrivateKey } from \"@hiveio/dhive\";\nimport {\n useMutation,\n useQuery,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { getAccountFullQueryOptions } from \"../queries\";\nimport { useAccountUpdateKeyAuths } from \"./use-account-update-key-auths\";\n\ninterface Payload {\n newPassword: string;\n currentPassword: string;\n keepCurrent?: boolean;\n}\n\n/**\n * Only native Hive and custom passwords could be updated here\n * Seed based password cannot be updated here, it will be in an account always for now\n */\ntype UpdatePasswordOptions = Pick<\n UseMutationOptions<unknown, Error, Payload>,\n \"onSuccess\" | \"onError\"\n>;\n\nexport function useAccountUpdatePassword(\n username: string,\n options?: UpdatePasswordOptions\n) {\n const { data: accountData } = useQuery(getAccountFullQueryOptions(username));\n\n const { mutateAsync: updateKeys } = useAccountUpdateKeyAuths(username);\n\n return useMutation({\n mutationKey: [\"accounts\", \"password-update\", username],\n mutationFn: async ({\n newPassword,\n currentPassword,\n keepCurrent,\n }: Payload) => {\n if (!accountData) {\n throw new Error(\n \"[SDK][Update password] – cannot update password for anon user\"\n );\n }\n const currentKey = PrivateKey.fromLogin(\n username,\n currentPassword,\n \"owner\"\n );\n\n return updateKeys({\n currentKey,\n keepCurrent,\n keys: [\n {\n owner: PrivateKey.fromLogin(username, newPassword, \"owner\"),\n active: PrivateKey.fromLogin(username, newPassword, \"active\"),\n posting: PrivateKey.fromLogin(username, newPassword, \"posting\"),\n memo_key: PrivateKey.fromLogin(username, newPassword, \"memo\"),\n },\n ],\n });\n },\n ...options,\n });\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { PrivateKey } from \"@hiveio/dhive\";\nimport {\n useMutation,\n useQuery,\n useQueryClient,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { getAccountFullQueryOptions } from \"../queries\";\nimport * as R from \"remeda\";\nimport { FullAccount } from \"../types\";\nimport hs from \"hivesigner\";\nimport type { AuthContext } from \"@/modules/core/types\";\n\ntype SignType = \"key\" | \"keychain\" | \"hivesigner\";\n\ninterface CommonPayload {\n accountName: string;\n type: SignType;\n key?: PrivateKey;\n}\n\ntype RevokePostingOptions = Pick<\n UseMutationOptions<unknown, Error, CommonPayload>,\n \"onSuccess\" | \"onError\"\n>;\n\nexport function useAccountRevokePosting(\n username: string | undefined,\n options: RevokePostingOptions,\n auth?: AuthContext\n) {\n const queryClient = useQueryClient();\n\n const { data } = useQuery(getAccountFullQueryOptions(username));\n\n return useMutation({\n mutationKey: [\"accounts\", \"revoke-posting\", data?.name],\n mutationFn: async ({ accountName, type, key }: CommonPayload) => {\n if (!data) {\n throw new Error(\n \"[SDK][Accounts] – cannot revoke posting for anonymous user\"\n );\n }\n\n const posting = R.pipe(\n {},\n R.mergeDeep(data.posting)\n ) as FullAccount[\"posting\"];\n\n posting.account_auths = posting.account_auths.filter(\n ([account]) => account !== accountName\n );\n\n const operationBody = {\n account: data.name,\n posting,\n memo_key: data.memo_key,\n json_metadata: data.json_metadata,\n };\n\n if (type === \"key\" && key) {\n return CONFIG.hiveClient.broadcast.updateAccount(operationBody, key);\n } else if (type === \"keychain\") {\n if (!auth?.broadcast) {\n throw new Error(\"[SDK][Accounts] – missing keychain broadcaster\");\n }\n return auth.broadcast([[\"account_update\", operationBody]], \"active\");\n } else {\n const params = {\n callback: `https://ecency.com/@${data.name}/permissions`,\n };\n return hs.sendOperation(\n [\"account_update\", operationBody],\n params,\n () => {}\n );\n }\n },\n onError: options.onError,\n onSuccess: (resp, payload, ctx) => {\n (options.onSuccess as\n | ((data: unknown, variables: CommonPayload, context: unknown) => unknown)\n | undefined)?.(resp, payload, ctx);\n queryClient.setQueryData<FullAccount>(\n getAccountFullQueryOptions(username).queryKey,\n (data) =>\n ({\n ...data,\n posting: {\n ...data?.posting,\n account_auths:\n data?.posting?.account_auths?.filter(\n ([account]) => account !== payload.accountName\n ) ?? [],\n },\n }) as FullAccount\n );\n },\n });\n}\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { PrivateKey } from \"@hiveio/dhive\";\nimport {\n useMutation,\n useQuery,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport hs from \"hivesigner\";\nimport { getAccountFullQueryOptions } from \"../queries\";\nimport type { AuthContext } from \"@/modules/core/types\";\n\ntype SignType = \"key\" | \"keychain\" | \"hivesigner\" | \"ecency\";\n\ninterface CommonPayload {\n accountName: string;\n type: SignType;\n key?: PrivateKey;\n email?: string;\n}\n\ntype UpdateRecoveryOptions = Pick<\n UseMutationOptions<unknown, Error, CommonPayload>,\n \"onSuccess\" | \"onError\"\n>;\n\nexport function useAccountUpdateRecovery(\n username: string | undefined,\n code: string | undefined,\n options: UpdateRecoveryOptions,\n auth?: AuthContext\n) {\n const { data } = useQuery(getAccountFullQueryOptions(username));\n\n return useMutation({\n mutationKey: [\"accounts\", \"recovery\", data?.name],\n mutationFn: async ({ accountName, type, key, email }: CommonPayload) => {\n if (!data) {\n throw new Error(\n \"[SDK][Accounts] – cannot change recovery for anonymous user\"\n );\n }\n\n const operationBody = {\n account_to_recover: data.name,\n new_recovery_account: accountName,\n extensions: [],\n };\n\n if (type === \"ecency\") {\n if (!code) {\n throw new Error(\"[SDK][Accounts] – missing access token\");\n }\n const fetchApi = getBoundFetch();\n\n return fetchApi(CONFIG.privateApiHost + \"/private-api/recoveries-add\", {\n method: \"POST\",\n body: JSON.stringify({\n code,\n email,\n publicKeys: [\n ...data.owner.key_auths,\n ...data.active.key_auths,\n ...data.posting.key_auths,\n data.memo_key,\n ],\n }),\n });\n } else if (type === \"key\" && key) {\n return CONFIG.hiveClient.broadcast.sendOperations(\n [[\"change_recovery_account\", operationBody]],\n key\n );\n } else if (type === \"keychain\") {\n if (!auth?.broadcast) {\n throw new Error(\"[SDK][Accounts] – missing keychain broadcaster\");\n }\n return auth.broadcast([[\"change_recovery_account\", operationBody]], \"owner\");\n } else {\n const params = {\n callback: `https://ecency.com/@${data.name}/permissions`,\n };\n return hs.sendOperation(\n [\"change_recovery_account\", operationBody],\n params,\n () => {}\n );\n }\n },\n onError: options.onError,\n onSuccess: options.onSuccess,\n });\n}\n","import { AuthorityType, PrivateKey, PublicKey } from \"@hiveio/dhive\";\nimport {\n useMutation,\n useQuery,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { getAccountFullQueryOptions } from \"../queries\";\nimport * as R from \"remeda\";\nimport { CONFIG } from \"@/modules/core\";\nimport { Keys } from \"./use-account-update-key-auths\";\n\ninterface Payload {\n currentKey: PrivateKey;\n revokingKey: PublicKey;\n}\n\n/**\n * This hook provides functionality to revoke a key from an account on the Hive blockchain.\n * It leverages React Query's `useMutation` for managing the mutation state and executing\n * the operation efficiently.\n *\n * @param username The username of the Hive account from which the key should be revoked.\n * Pass `undefined` if the username is unknown or not set yet.\n *\n * @returns The mutation object from `useMutation`, including methods to trigger the key\n * revocation and access its state (e.g., loading, success, error).\n */\ntype RevokeKeyOptions = Pick<\n UseMutationOptions<unknown, Error, Payload>,\n \"onSuccess\" | \"onError\"\n>;\n\nexport function useAccountRevokeKey(\n username: string | undefined,\n options?: RevokeKeyOptions\n) {\n const { data: accountData } = useQuery(getAccountFullQueryOptions(username));\n\n return useMutation({\n mutationKey: [\"accounts\", \"revoke-key\", accountData?.name],\n mutationFn: async ({ currentKey, revokingKey }: Payload) => {\n if (!accountData) {\n throw new Error(\n \"[SDK][Update password] – cannot update keys for anon user\"\n );\n }\n\n const prepareAuth = (keyName: keyof Keys) => {\n const auth: AuthorityType = R.clone(accountData[keyName]);\n\n auth.key_auths = auth.key_auths.filter(\n ([key]) => key !== revokingKey.toString()\n );\n\n return auth;\n };\n\n return CONFIG.hiveClient.broadcast.updateAccount(\n {\n account: accountData.name,\n json_metadata: accountData.json_metadata,\n owner: prepareAuth(\"owner\"),\n active: prepareAuth(\"active\"),\n posting: prepareAuth(\"posting\"),\n memo_key: accountData.memo_key,\n },\n currentKey\n );\n },\n ...options,\n });\n}\n","import { useBroadcastMutation } from \"@/modules/core\";\nimport { buildClaimAccountOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for claiming account creation tokens.\n */\nexport interface ClaimAccountPayload {\n /** Creator account claiming the token */\n creator: string;\n /** Fee for claiming (usually \"0.000 HIVE\" for RC-based claims) */\n fee?: string;\n}\n\n/**\n * React Query mutation hook for claiming account creation tokens.\n *\n * This mutation broadcasts a claim_account operation to claim an account\n * creation token using Resource Credits (RC). The claimed token can later\n * be used to create a new account for free using the create_claimed_account\n * operation.\n *\n * @param username - The username claiming the account token (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates account cache to update pending_claimed_accounts count\n * - Updates account query data to set pending_claimed_accounts = 0 optimistically\n *\n * **Operation Details:**\n * - Uses native claim_account operation\n * - Fee: \"0.000 HIVE\" (uses RC instead of HIVE)\n * - Authority: Active key (required for claiming)\n *\n * **RC Requirements:**\n * - Requires sufficient Resource Credits (RC)\n * - RC amount varies based on network conditions\n * - Claiming without sufficient RC will fail\n *\n * **Use Case:**\n * - Claim tokens in advance when RC is available\n * - Create accounts later without paying HIVE fee\n * - Useful for onboarding services and apps\n *\n * @example\n * ```typescript\n * const claimMutation = useClaimAccount(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Claim account token using RC\n * claimMutation.mutate({\n * creator: 'alice',\n * fee: '0.000 HIVE'\n * });\n * ```\n */\nexport function useClaimAccount(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<ClaimAccountPayload>(\n [\"accounts\", \"claimAccount\"],\n username,\n ({ creator, fee = \"0.000 HIVE\" }) => [\n buildClaimAccountOp(creator, fee)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n [\"accounts\", variables.creator],\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildGrantPostingPermissionOp, type Authority } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface GrantPostingPermissionPayload {\n currentPosting: Authority;\n grantedAccount: string;\n weightThreshold: number;\n memoKey: string;\n jsonMetadata: string;\n}\n\nexport function useGrantPostingPermission(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<GrantPostingPermissionPayload>(\n [\"accounts\", \"grant-posting-permission\"],\n username,\n (payload) => [\n buildGrantPostingPermissionOp(\n username!,\n payload.currentPosting,\n payload.grantedAccount,\n payload.weightThreshold,\n payload.memoKey,\n payload.jsonMetadata\n )\n ],\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildAccountCreateOp, buildCreateClaimedAccountOp, type AccountKeys } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface CreateAccountPayload {\n newAccountName: string;\n keys: AccountKeys;\n fee: string;\n /** If true, uses a claimed account token instead of paying the fee */\n useClaimed?: boolean;\n}\n\nexport function useCreateAccount(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<CreateAccountPayload>(\n [\"accounts\", \"create\"],\n username,\n (payload) => [\n payload.useClaimed\n ? buildCreateClaimedAccountOp(username!, payload.newAccountName, payload.keys)\n : buildAccountCreateOp(username!, payload.newAccountName, payload.keys, payload.fee)\n ],\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { parseAsset } from \"@/modules/core/utils\";\nimport { DynamicProps } from \"@/modules/core/types\";\nimport { FullAccount } from \"../types\";\nimport type { Account as DhiveAccount } from \"@hiveio/dhive\";\nimport type { RCAccount } from \"@hiveio/dhive/lib/chain/rc\";\n\nconst HIVE_VOTING_MANA_REGENERATION_SECONDS = 5 * 60 * 60 * 24; // 5 days\n\nfunction vestsToRshares(vests: number, votingPowerValue: number, votePerc: number): number {\n const vestingShares = vests * 1e6;\n const power = (votingPowerValue * votePerc) / 1e4 / 50 + 1;\n return (power * vestingShares) / 1e4;\n}\n\nfunction toDhiveAccountForVotingMana(account: FullAccount): DhiveAccount {\n return {\n id: 0,\n name: account.name,\n owner: account.owner,\n active: account.active,\n posting: account.posting,\n memo_key: account.memo_key,\n json_metadata: account.json_metadata,\n posting_json_metadata: account.posting_json_metadata,\n proxy: account.proxy ?? \"\",\n last_owner_update: \"\",\n last_account_update: \"\",\n created: account.created,\n mined: false,\n owner_challenged: false,\n active_challenged: false,\n last_owner_proved: \"\",\n last_active_proved: \"\",\n recovery_account: account.recovery_account ?? \"\",\n reset_account: \"\",\n last_account_recovery: \"\",\n comment_count: 0,\n lifetime_vote_count: 0,\n post_count: account.post_count,\n can_vote: true,\n voting_power: account.voting_power,\n last_vote_time: account.last_vote_time,\n voting_manabar: account.voting_manabar,\n balance: account.balance,\n savings_balance: account.savings_balance,\n hbd_balance: account.hbd_balance,\n hbd_seconds: \"0\",\n hbd_seconds_last_update: \"\",\n hbd_last_interest_payment: \"\",\n savings_hbd_balance: account.savings_hbd_balance,\n savings_hbd_seconds: account.savings_hbd_seconds,\n savings_hbd_seconds_last_update: account.savings_hbd_seconds_last_update,\n savings_hbd_last_interest_payment: account.savings_hbd_last_interest_payment,\n savings_withdraw_requests: 0,\n reward_hbd_balance: account.reward_hbd_balance,\n reward_hive_balance: account.reward_hive_balance,\n reward_vesting_balance: account.reward_vesting_balance,\n reward_vesting_hive: account.reward_vesting_hive,\n curation_rewards: 0,\n posting_rewards: 0,\n vesting_shares: account.vesting_shares,\n delegated_vesting_shares: account.delegated_vesting_shares,\n received_vesting_shares: account.received_vesting_shares,\n vesting_withdraw_rate: account.vesting_withdraw_rate,\n next_vesting_withdrawal: account.next_vesting_withdrawal,\n withdrawn: account.withdrawn,\n to_withdraw: account.to_withdraw,\n withdraw_routes: 0,\n proxied_vsf_votes: (account.proxied_vsf_votes as number[]) ?? [],\n witnesses_voted_for: 0,\n average_bandwidth: 0,\n lifetime_bandwidth: 0,\n last_bandwidth_update: \"\",\n average_market_bandwidth: 0,\n lifetime_market_bandwidth: 0,\n last_market_bandwidth_update: \"\",\n last_post: account.last_post,\n last_root_post: \"\",\n };\n}\n\nexport function votingPower(account: FullAccount): number {\n const calc = CONFIG.hiveClient.rc.calculateVPMana(\n toDhiveAccountForVotingMana(account)\n );\n return calc.percentage / 100;\n}\n\nexport function powerRechargeTime(power: number) {\n if (!Number.isFinite(power)) {\n throw new TypeError(\"Voting power must be a finite number\");\n }\n if (power < 0 || power > 100) {\n throw new RangeError(\"Voting power must be between 0 and 100\");\n }\n const missingPower = 100 - power;\n return (\n (missingPower * 100 * HIVE_VOTING_MANA_REGENERATION_SECONDS) / 10000\n );\n}\n\nexport function downVotingPower(account: FullAccount): number {\n const totalShares =\n parseFloat(account.vesting_shares) +\n parseFloat(account.received_vesting_shares) -\n parseFloat(account.delegated_vesting_shares);\n const elapsed = Math.floor(Date.now() / 1000) - account.downvote_manabar.last_update_time;\n const maxMana = (totalShares * 1000000) / 4;\n\n if (maxMana <= 0) {\n return 0;\n }\n\n let currentMana =\n parseFloat(account.downvote_manabar.current_mana.toString()) +\n (elapsed * maxMana) / HIVE_VOTING_MANA_REGENERATION_SECONDS;\n\n if (currentMana > maxMana) {\n currentMana = maxMana;\n }\n const currentManaPerc = (currentMana * 100) / maxMana;\n\n if (isNaN(currentManaPerc)) {\n return 0;\n }\n\n if (currentManaPerc > 100) {\n return 100;\n }\n return currentManaPerc;\n}\n\nexport function rcPower(account: RCAccount): number {\n const calc = CONFIG.hiveClient.rc.calculateRCMana(account);\n return calc.percentage / 100;\n}\n\nexport function votingValue(\n account: FullAccount,\n dynamicProps: DynamicProps,\n votingPowerValue: number,\n weight: number = 10000\n): number {\n if (!Number.isFinite(votingPowerValue) || !Number.isFinite(weight)) {\n return 0;\n }\n const { fundRecentClaims, fundRewardBalance, base, quote } = dynamicProps;\n\n if (\n !Number.isFinite(fundRecentClaims) ||\n !Number.isFinite(fundRewardBalance) ||\n !Number.isFinite(base) ||\n !Number.isFinite(quote)\n ) {\n return 0;\n }\n\n if (fundRecentClaims === 0 || quote === 0) {\n return 0;\n }\n\n let totalVests = 0;\n try {\n const vesting = parseAsset(account.vesting_shares).amount;\n const received = parseAsset(account.received_vesting_shares).amount;\n const delegated = parseAsset(account.delegated_vesting_shares).amount;\n if (![vesting, received, delegated].every(Number.isFinite)) {\n return 0;\n }\n totalVests = vesting + received - delegated;\n } catch {\n return 0;\n }\n\n if (!Number.isFinite(totalVests)) {\n return 0;\n }\n\n const rShares = vestsToRshares(totalVests, votingPowerValue, weight);\n if (!Number.isFinite(rShares)) {\n return 0;\n }\n\n return (rShares / fundRecentClaims) * fundRewardBalance * (base / quote);\n}\n","import type { Operation } from \"@hiveio/dhive\";\n\n/**\n * Authority levels for Hive blockchain operations.\n * - posting: Social operations (voting, commenting, reblogging)\n * - active: Financial and account management operations\n * - owner: Critical security operations (key changes, account recovery)\n * - memo: Memo encryption/decryption (rarely used for signing)\n */\nexport type AuthorityLevel = 'posting' | 'active' | 'owner' | 'memo';\n\n/**\n * Maps operation types to their required authority level.\n *\n * This mapping is used to determine which key is needed to sign a transaction,\n * enabling smart auth fallback and auth upgrade UI.\n *\n * @remarks\n * - Most social operations (vote, comment, reblog) require posting authority\n * - Financial operations (transfer, withdraw) require active authority\n * - Account management operations require active authority\n * - Security operations (password change, account recovery) require owner authority\n * - custom_json requires dynamic detection based on required_auths vs required_posting_auths\n */\nexport const OPERATION_AUTHORITY_MAP: Record<string, AuthorityLevel> = {\n // Posting authority operations\n vote: 'posting',\n comment: 'posting',\n delete_comment: 'posting',\n comment_options: 'posting',\n claim_reward_balance: 'posting',\n\n // Active authority operations - Financial\n cancel_transfer_from_savings: 'active',\n collateralized_convert: 'active',\n convert: 'active',\n delegate_vesting_shares: 'active',\n recurrent_transfer: 'active',\n set_withdraw_vesting_route: 'active',\n transfer: 'active',\n transfer_from_savings: 'active',\n transfer_to_savings: 'active',\n transfer_to_vesting: 'active',\n withdraw_vesting: 'active',\n\n // Active authority operations - Market\n limit_order_create: 'active',\n limit_order_cancel: 'active',\n\n // Active authority operations - Account Management\n account_update: 'active',\n account_update2: 'active',\n claim_account: 'active',\n create_claimed_account: 'active',\n\n // Active authority operations - Governance\n account_witness_proxy: 'active',\n account_witness_vote: 'active',\n remove_proposal: 'active',\n update_proposal_votes: 'active',\n\n // Owner authority operations - Security & Account Recovery\n change_recovery_account: 'owner',\n request_account_recovery: 'owner',\n recover_account: 'owner',\n reset_account: 'owner',\n set_reset_account: 'owner',\n\n // Note: Some operations are handled separately via content inspection:\n // - custom_json: via getCustomJsonAuthority() - posting or active based on required_auths\n // - create_proposal/update_proposal: via getProposalAuthority() - typically active\n};\n\n/**\n * Determines authority required for a custom_json operation.\n *\n * Custom JSON operations can require either posting or active authority\n * depending on which field is populated:\n * - required_auths (active authority)\n * - required_posting_auths (posting authority)\n *\n * @param customJsonOp - The custom_json operation to inspect\n * @returns 'active' if requires active authority, 'posting' if requires posting authority\n *\n * @example\n * ```typescript\n * // Reblog operation (posting authority)\n * const reblogOp: Operation = ['custom_json', {\n * required_auths: [],\n * required_posting_auths: ['alice'],\n * id: 'reblog',\n * json: '...'\n * }];\n * getCustomJsonAuthority(reblogOp); // Returns 'posting'\n *\n * // Some active authority custom_json\n * const activeOp: Operation = ['custom_json', {\n * required_auths: ['alice'],\n * required_posting_auths: [],\n * id: 'some_active_op',\n * json: '...'\n * }];\n * getCustomJsonAuthority(activeOp); // Returns 'active'\n * ```\n */\nexport function getCustomJsonAuthority(customJsonOp: Operation): AuthorityLevel {\n const opType = customJsonOp[0];\n const payload = customJsonOp[1];\n\n if (opType !== 'custom_json') {\n throw new Error('Operation is not a custom_json operation');\n }\n\n // Type assertion for custom_json payload\n const customJson = payload as {\n required_auths?: string[];\n required_posting_auths?: string[];\n id: string;\n json: string;\n };\n\n // If required_auths is set and non-empty, needs active authority\n if (customJson.required_auths && customJson.required_auths.length > 0) {\n return 'active';\n }\n\n // If only required_posting_auths is set, needs posting authority\n if (customJson.required_posting_auths && customJson.required_posting_auths.length > 0) {\n return 'posting';\n }\n\n // Default to posting for custom_json (most common case)\n return 'posting';\n}\n\n/**\n * Determines authority required for a proposal operation.\n *\n * Proposal operations (create_proposal, update_proposal) typically require\n * active authority as they involve financial commitments and funding allocations.\n *\n * @param proposalOp - The proposal operation to inspect\n * @returns 'active' authority requirement\n *\n * @remarks\n * Unlike custom_json, proposal operations don't have explicit required_auths fields.\n * They always use the creator's authority, which defaults to active for financial\n * operations involving the DAO treasury.\n *\n * @example\n * ```typescript\n * const proposalOp: Operation = ['create_proposal', {\n * creator: 'alice',\n * receiver: 'bob',\n * subject: 'My Proposal',\n * permlink: 'my-proposal',\n * start: '2026-03-01T00:00:00',\n * end: '2026-04-01T00:00:00',\n * daily_pay: '100.000 HBD',\n * extensions: []\n * }];\n * getProposalAuthority(proposalOp); // Returns 'active'\n * ```\n */\nexport function getProposalAuthority(proposalOp: Operation): AuthorityLevel {\n const opType = proposalOp[0];\n\n if (opType !== 'create_proposal' && opType !== 'update_proposal') {\n throw new Error('Operation is not a proposal operation');\n }\n\n // Proposal operations require active authority for financial operations\n return 'active';\n}\n\n/**\n * Determines the required authority level for any operation.\n *\n * Uses the OPERATION_AUTHORITY_MAP for standard operations, and dynamic\n * detection for custom_json operations.\n *\n * @param op - The operation to check\n * @returns 'posting' or 'active' authority requirement\n *\n * @example\n * ```typescript\n * const voteOp: Operation = ['vote', { voter: 'alice', author: 'bob', permlink: 'post', weight: 10000 }];\n * getOperationAuthority(voteOp); // Returns 'posting'\n *\n * const transferOp: Operation = ['transfer', { from: 'alice', to: 'bob', amount: '1.000 HIVE', memo: '' }];\n * getOperationAuthority(transferOp); // Returns 'active'\n * ```\n */\nexport function getOperationAuthority(op: Operation): AuthorityLevel {\n const opType = op[0];\n\n // Special handling for custom_json - requires content inspection\n if (opType === 'custom_json') {\n return getCustomJsonAuthority(op);\n }\n\n // Special handling for proposal operations - requires content inspection\n if (opType === 'create_proposal' || opType === 'update_proposal') {\n return getProposalAuthority(op);\n }\n\n // Use mapping for standard operations, default to posting if unknown\n return OPERATION_AUTHORITY_MAP[opType] ?? 'posting';\n}\n\n/**\n * Determines the highest authority level required for a list of operations.\n *\n * Useful when broadcasting multiple operations together - the highest authority\n * level required by any operation determines what key is needed for the batch.\n *\n * Authority hierarchy: owner > active > posting > memo\n *\n * @param ops - Array of operations\n * @returns Highest authority level required ('owner', 'active', or 'posting')\n *\n * @example\n * ```typescript\n * const ops: Operation[] = [\n * ['vote', { ... }], // posting\n * ['comment', { ... }], // posting\n * ];\n * getRequiredAuthority(ops); // Returns 'posting'\n *\n * const mixedOps: Operation[] = [\n * ['comment', { ... }], // posting\n * ['transfer', { ... }], // active\n * ];\n * getRequiredAuthority(mixedOps); // Returns 'active'\n *\n * const securityOps: Operation[] = [\n * ['transfer', { ... }], // active\n * ['change_recovery_account', { ... }], // owner\n * ];\n * getRequiredAuthority(securityOps); // Returns 'owner'\n * ```\n */\nexport function getRequiredAuthority(ops: Operation[]): AuthorityLevel {\n let highestAuthority: AuthorityLevel = 'posting';\n\n for (const op of ops) {\n const authority = getOperationAuthority(op);\n\n // Owner is highest - return immediately\n if (authority === 'owner') {\n return 'owner';\n }\n\n // Active is higher than posting\n if (authority === 'active' && highestAuthority === 'posting') {\n highestAuthority = 'active';\n }\n\n // Memo is lowest (same level as posting)\n // If we see memo but only have posting, stick with posting\n }\n\n return highestAuthority;\n}\n","import { CONFIG } from \"@/modules/core/config\";\nimport { cryptoUtils, Operation, PrivateKey } from \"@hiveio/dhive\";\nimport { useMutation } from \"@tanstack/react-query\";\n\nexport function useSignOperationByKey(username: string | undefined) {\n return useMutation({\n mutationKey: [\"operations\", \"sign\", username],\n mutationFn: ({\n operation,\n keyOrSeed,\n }: {\n operation: Operation;\n keyOrSeed: string;\n }) => {\n if (!username) {\n throw new Error(\"[Operations][Sign] – cannot sign op with anon user\");\n }\n\n let privateKey: PrivateKey;\n if (keyOrSeed.split(\" \").length === 12) {\n privateKey = PrivateKey.fromLogin(username, keyOrSeed, \"active\");\n } else if (cryptoUtils.isWif(keyOrSeed)) {\n privateKey = PrivateKey.fromString(keyOrSeed);\n } else {\n privateKey = PrivateKey.from(keyOrSeed);\n }\n\n return CONFIG.hiveClient.broadcast.sendOperations(\n [operation],\n privateKey\n );\n },\n });\n}\n","import { Operation } from \"@hiveio/dhive\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { AuthContext } from \"@/modules/core/types\";\n\nexport function useSignOperationByKeychain(\n username: string | undefined,\n auth?: AuthContext,\n keyType: \"owner\" | \"active\" | \"posting\" | \"memo\" = \"active\"\n) {\n return useMutation({\n mutationKey: [\"operations\", \"sign-keychain\", username],\n mutationFn: ({ operation }: { operation: Operation }) => {\n if (!username) {\n throw new Error(\n \"[SDK][Keychain] – cannot sign operation with anon user\"\n );\n }\n if (!auth?.broadcast) {\n throw new Error(\"[SDK][Keychain] – missing keychain broadcaster\");\n }\n\n return auth.broadcast([operation], keyType);\n },\n });\n}\n","import { Operation } from \"@hiveio/dhive\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport hs from \"hivesigner\";\n\nexport function useSignOperationByHivesigner(callbackUri = \"/\") {\n return useMutation({\n mutationKey: [\"operations\", \"sign-hivesigner\", callbackUri],\n mutationFn: async ({ operation }: { operation: Operation }) => {\n return hs.sendOperation(operation, { callback: callbackUri }, () => {});\n },\n });\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport function getChainPropertiesQueryOptions() {\n return queryOptions({\n queryKey: [\"operations\", \"chain-properties\"],\n queryFn: async () => {\n return await CONFIG.hiveClient.database.getChainProperties();\n },\n });\n}\n","import { CONFIG, getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { InfiniteData, useMutation } from \"@tanstack/react-query\";\nimport { Fragment } from \"../types\";\nimport { getFragmentsQueryOptions } from \"../queries\";\nimport { WrappedResponse } from \"@/modules/core/types\";\n\nexport function useAddFragment(username: string, code: string | undefined) {\n return useMutation({\n mutationKey: [\"posts\", \"add-fragment\", username],\n mutationFn: async ({ title, body }: { title: string; body: string }) => {\n if (!code) {\n throw new Error(\"[SDK][Posts] Missing access token\");\n }\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/fragments-add\",\n {\n method: \"POST\",\n body: JSON.stringify({\n code,\n title,\n body,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n return response.json() as Promise<Fragment>;\n },\n onSuccess(response) {\n const queryClient = getQueryClient();\n\n // Update regular query cache\n queryClient.setQueryData<Fragment[]>(\n getFragmentsQueryOptions(username, code).queryKey,\n (data) => [response, ...(data ?? [])]\n );\n\n // Update infinite query cache - add new fragment to first page\n queryClient.setQueriesData<InfiniteData<WrappedResponse<Fragment>>>(\n { queryKey: [\"posts\", \"fragments\", \"infinite\", username] },\n (oldData) => {\n if (!oldData) return oldData;\n\n return {\n ...oldData,\n pages: oldData.pages.map((page, index) =>\n index === 0\n ? { ...page, data: [response, ...page.data] }\n : page\n ),\n };\n }\n );\n },\n });\n}\n","import { CONFIG, getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { InfiniteData, useMutation } from \"@tanstack/react-query\";\nimport { Fragment } from \"../types\";\nimport { getFragmentsQueryOptions } from \"../queries\";\nimport { WrappedResponse } from \"@/modules/core/types\";\n\nexport function useEditFragment(\n username: string,\n code: string | undefined\n) {\n return useMutation({\n mutationKey: [\"posts\", \"edit-fragment\", username],\n mutationFn: async ({\n fragmentId,\n title,\n body\n }: {\n fragmentId: string;\n title: string;\n body: string;\n }) => {\n if (!code) {\n throw new Error(\"[SDK][Posts] Missing access token\");\n }\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/fragments-update\",\n {\n method: \"POST\",\n body: JSON.stringify({\n code,\n id: fragmentId,\n title,\n body,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n return response.json() as Promise<Fragment>;\n },\n onSuccess(response, variables) {\n const queryClient = getQueryClient();\n\n // Update regular query cache\n queryClient.setQueryData<Fragment[]>(\n getFragmentsQueryOptions(username, code).queryKey,\n (data) => {\n if (!data) {\n return [];\n }\n\n const index = data.findIndex(({ id }) => id === variables.fragmentId);\n if (index >= 0) {\n data[index] = response;\n }\n\n return [...data];\n }\n );\n\n // Update infinite query cache - update fragment in all pages\n queryClient.setQueriesData<InfiniteData<WrappedResponse<Fragment>>>(\n { queryKey: [\"posts\", \"fragments\", \"infinite\", username] },\n (oldData) => {\n if (!oldData) return oldData;\n\n return {\n ...oldData,\n pages: oldData.pages.map((page) => ({\n ...page,\n data: page.data.map((fragment) =>\n fragment.id === variables.fragmentId ? response : fragment\n ),\n })),\n };\n }\n );\n },\n });\n}\n","import { CONFIG, getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { InfiniteData, useMutation } from \"@tanstack/react-query\";\nimport { Fragment } from \"../types\";\nimport { getFragmentsQueryOptions } from \"../queries\";\nimport { WrappedResponse } from \"@/modules/core/types\";\n\nexport function useRemoveFragment(\n username: string,\n code: string | undefined\n) {\n return useMutation({\n mutationKey: [\"posts\", \"remove-fragment\", username],\n mutationFn: async ({ fragmentId }: { fragmentId: string }) => {\n if (!code) {\n throw new Error(\"[SDK][Posts] Missing access token\");\n }\n const fetchApi = getBoundFetch();\n\n return fetchApi(CONFIG.privateApiHost + \"/private-api/fragments-delete\", {\n method: \"POST\",\n body: JSON.stringify({\n code,\n id: fragmentId,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n },\n onSuccess(_data, variables) {\n const queryClient = getQueryClient();\n\n // Update regular query cache\n queryClient.setQueryData<Fragment[]>(\n getFragmentsQueryOptions(username, code).queryKey,\n (data) => [...(data ?? [])].filter(({ id }) => id !== variables.fragmentId)\n );\n\n // Update infinite query cache - remove fragment from all pages\n queryClient.setQueriesData<InfiniteData<WrappedResponse<Fragment>>>(\n { queryKey: [\"posts\", \"fragments\", \"infinite\", username] },\n (oldData) => {\n if (!oldData) return oldData;\n\n return {\n ...oldData,\n pages: oldData.pages.map((page) => ({\n ...page,\n data: page.data.filter((fragment) => fragment.id !== variables.fragmentId),\n })),\n };\n }\n );\n },\n });\n}\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { ApiNotification, ApiNotificationSetting } from \"@/modules/notifications\";\nimport { Draft, DraftMetadata } from \"@/modules/posts/types/draft\";\nimport { Schedule } from \"@/modules/posts/types/schedule\";\nimport { ApiResponse } from \"./types\";\n\ntype RequestError = Error & { status?: number; data?: unknown };\n\nasync function parseJsonResponse<T>(response: Response): Promise<T> {\n if (!response.ok) {\n let errorData: unknown = undefined;\n try {\n errorData = await response.json();\n } catch {\n errorData = undefined;\n }\n const error = new Error(`Request failed with status ${response.status}`) as RequestError;\n error.status = response.status;\n error.data = errorData;\n throw error;\n }\n\n // Handle empty responses gracefully (e.g., 204 No Content or empty body)\n const text = await response.text();\n if (!text || text.trim() === \"\") {\n return \"\" as T;\n }\n\n try {\n return JSON.parse(text) as T;\n } catch (e) {\n // If JSON parsing fails, return empty string as fallback\n console.warn(\"[SDK] Failed to parse JSON response:\", e, \"Response:\", text);\n return \"\" as T;\n }\n}\n\nexport async function signUp(\n username: string,\n email: string,\n referral: string\n): Promise<ApiResponse<Record<string, unknown>>> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/account-create\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ username, email, referral }),\n });\n\n const data = await parseJsonResponse<Record<string, unknown>>(response);\n return { status: response.status, data };\n}\n\nexport async function subscribeEmail(\n email: string\n): Promise<ApiResponse<Record<string, unknown>>> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/subscribe\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ email }),\n });\n\n const data = await parseJsonResponse<Record<string, unknown>>(response);\n return { status: response.status, data };\n}\n\nexport async function usrActivity(\n code: string | undefined,\n ty: number,\n bl: string | number = \"\",\n tx: string | number = \"\"\n): Promise<void> {\n const params: {\n code: string | undefined;\n ty: number;\n bl?: string | number;\n tx?: string | number;\n } = { code, ty };\n\n if (bl) {\n params.bl = bl;\n }\n if (tx) {\n params.tx = tx;\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/usr-activity\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(params),\n });\n\n await parseJsonResponse(response);\n}\n\nexport async function getNotifications(\n code: string | undefined,\n filter: string | null,\n since: string | null = null,\n user: string | null = null\n): Promise<ApiNotification[]> {\n const data: { code: string | undefined; filter?: string; since?: string; user?: string } = {\n code,\n };\n\n if (filter) {\n data.filter = filter;\n }\n\n if (since) {\n data.since = since;\n }\n\n if (user) {\n data.user = user;\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/notifications\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<ApiNotification[]>(response);\n}\n\nexport async function saveNotificationSetting(\n code: string | undefined,\n username: string,\n system: string,\n allows_notify: number,\n notify_types: number[],\n token: string\n): Promise<ApiNotificationSetting> {\n const data = {\n code,\n username,\n token,\n system,\n allows_notify,\n notify_types,\n };\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/register-device\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<ApiNotificationSetting>(response);\n}\n\nexport async function getNotificationSetting(\n code: string | undefined,\n username: string,\n token: string\n): Promise<ApiNotificationSetting> {\n const data = { code, username, token };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/detail-device\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<ApiNotificationSetting>(response);\n}\n\nexport async function markNotifications(\n code: string | undefined,\n id?: string\n): Promise<Record<string, unknown>> {\n const data: { code: string | undefined; id?: string } = {\n code,\n };\n if (id) {\n data.id = id;\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/notifications/mark\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<Record<string, unknown>>(response);\n}\n\nexport async function addImage(code: string | undefined, url: string): Promise<Record<string, unknown>> {\n const data = { code, url };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/images-add\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<Record<string, unknown>>(response);\n}\n\nexport async function uploadImage(\n file: File,\n token: string,\n signal?: AbortSignal\n): Promise<{ url: string }> {\n const fetchApi = getBoundFetch();\n const formData = new FormData();\n formData.append(\"file\", file);\n\n const response = await fetchApi(`${CONFIG.imageHost}/hs/${token}`, {\n method: \"POST\",\n body: formData,\n signal,\n });\n\n return parseJsonResponse<{ url: string }>(response);\n}\n\nexport async function deleteImage(\n code: string | undefined,\n imageId: string\n): Promise<Record<string, unknown>> {\n const data = { code, id: imageId };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/images-delete\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<Record<string, unknown>>(response);\n}\n\nexport async function addDraft(\n code: string | undefined,\n title: string,\n body: string,\n tags: string,\n meta: DraftMetadata\n): Promise<{ drafts: Draft[] }> {\n const data = { code, title, body, tags, meta };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/drafts-add\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<{ drafts: Draft[] }>(response);\n}\n\nexport async function updateDraft(\n code: string | undefined,\n draftId: string,\n title: string,\n body: string,\n tags: string,\n meta: DraftMetadata\n): Promise<{ drafts: Draft[] }> {\n const data = { code, id: draftId, title, body, tags, meta };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/drafts-update\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<{ drafts: Draft[] }>(response);\n}\n\nexport async function deleteDraft(\n code: string | undefined,\n draftId: string\n): Promise<Record<string, unknown>> {\n const data = { code, id: draftId };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/drafts-delete\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<Record<string, unknown>>(response);\n}\n\nexport async function addSchedule(\n code: string | undefined,\n permlink: string,\n title: string,\n body: string,\n meta: Record<string, unknown>,\n options: Record<string, unknown> | null,\n schedule: string,\n reblog: boolean\n): Promise<Record<string, unknown>> {\n const data: Record<string, unknown> = {\n code,\n permlink,\n title,\n body,\n meta,\n schedule,\n reblog,\n };\n\n if (options) {\n data.options = options;\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/schedules-add\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<Record<string, unknown>>(response);\n}\n\nexport async function deleteSchedule(\n code: string | undefined,\n id: string\n): Promise<Record<string, unknown>> {\n const data = { code, id };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/schedules-delete\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<Record<string, unknown>>(response);\n}\n\nexport async function moveSchedule(code: string | undefined, id: string): Promise<Schedule[]> {\n const data = { code, id };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/schedules-move\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<Schedule[]>(response);\n}\n\nexport async function getPromotedPost(\n code: string | undefined,\n author: string,\n permlink: string\n): Promise<{ author: string; permlink: string } | \"\"> {\n const data = { code, author, permlink };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/promoted-post\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<{ author: string; permlink: string } | \"\">(response);\n}\n\nexport async function onboardEmail(\n username: string,\n email: string,\n friend: string\n): Promise<Record<string, unknown>> {\n const dataBody = {\n username,\n email,\n friend,\n };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/account-create-friend\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(dataBody),\n }\n );\n\n return parseJsonResponse<Record<string, unknown>>(response);\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { getQueryClient, QueryKeys } from \"@/modules/core\";\nimport { addDraft } from \"@/modules/private-api/requests\";\nimport { DraftMetadata } from \"../types\";\n\nexport function useAddDraft(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: () => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"drafts\", \"add\", username],\n mutationFn: async ({\n title,\n body,\n tags,\n meta,\n }: {\n title: string;\n body: string;\n tags: string;\n meta: DraftMetadata;\n }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Posts] – missing auth for addDraft\");\n }\n return addDraft(code, title, body, tags, meta);\n },\n onSuccess: (data) => {\n onSuccess?.();\n const qc = getQueryClient();\n // Set the full drafts list from the response (API returns complete list)\n if (data?.drafts) {\n qc.setQueryData(QueryKeys.posts.drafts(username), data.drafts);\n } else {\n qc.invalidateQueries({ queryKey: QueryKeys.posts.drafts(username) });\n }\n },\n onError,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { getQueryClient, QueryKeys } from \"@/modules/core\";\nimport { updateDraft } from \"@/modules/private-api/requests\";\nimport { DraftMetadata } from \"../types\";\n\nexport function useUpdateDraft(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: () => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"drafts\", \"update\", username],\n mutationFn: async ({\n draftId,\n title,\n body,\n tags,\n meta,\n }: {\n draftId: string;\n title: string;\n body: string;\n tags: string;\n meta: DraftMetadata;\n }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Posts] – missing auth for updateDraft\");\n }\n return updateDraft(code, draftId, title, body, tags, meta);\n },\n onSuccess: () => {\n onSuccess?.();\n getQueryClient().invalidateQueries({\n queryKey: QueryKeys.posts.drafts(username),\n });\n },\n onError,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { getQueryClient } from \"@/modules/core\";\nimport { deleteDraft } from \"@/modules/private-api/requests\";\nimport type { Draft } from \"../types\";\n\nexport function useDeleteDraft(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: () => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"drafts\", \"delete\", username],\n mutationFn: async ({ draftId }: { draftId: string }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Posts] – missing auth for deleteDraft\");\n }\n return deleteDraft(code, draftId);\n },\n onSuccess: (_data, variables) => {\n onSuccess?.();\n const qc = getQueryClient();\n // Optimistic removal from drafts cache\n qc.setQueryData<Draft[]>(\n [\"posts\", \"drafts\", username],\n (prev) => prev?.filter((d) => d._id !== variables.draftId)\n );\n },\n onError,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { getQueryClient, QueryKeys } from \"@/modules/core\";\nimport { addSchedule } from \"@/modules/private-api/requests\";\n\nexport function useAddSchedule(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: () => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"schedules\", \"add\", username],\n mutationFn: async ({\n permlink,\n title,\n body,\n meta,\n options,\n schedule,\n reblog,\n }: {\n permlink: string;\n title: string;\n body: string;\n meta: Record<string, unknown>;\n options: Record<string, unknown> | null;\n schedule: string;\n reblog: boolean;\n }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Posts] – missing auth for addSchedule\");\n }\n return addSchedule(code, permlink, title, body, meta, options, schedule, reblog);\n },\n onSuccess: () => {\n onSuccess?.();\n getQueryClient().invalidateQueries({\n queryKey: QueryKeys.posts.schedules(username),\n });\n },\n onError,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { getQueryClient, QueryKeys } from \"@/modules/core\";\nimport { deleteSchedule } from \"@/modules/private-api/requests\";\n\nexport function useDeleteSchedule(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: () => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"schedules\", \"delete\", username],\n mutationFn: async ({ id }: { id: string }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Posts] – missing auth for deleteSchedule\");\n }\n return deleteSchedule(code, id);\n },\n onSuccess: (data) => {\n onSuccess?.();\n const qc = getQueryClient();\n // Set the full schedules list from the response (API returns complete list)\n if (data) {\n qc.setQueryData(QueryKeys.posts.schedules(username), data);\n } else {\n qc.invalidateQueries({ queryKey: QueryKeys.posts.schedules(username) });\n }\n },\n onError,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { getQueryClient, QueryKeys } from \"@/modules/core\";\nimport { moveSchedule } from \"@/modules/private-api/requests\";\n\nexport function useMoveSchedule(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: () => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"schedules\", \"move\", username],\n mutationFn: async ({ id }: { id: string }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Posts] – missing auth for moveSchedule\");\n }\n return moveSchedule(code, id);\n },\n onSuccess: (data) => {\n onSuccess?.();\n const qc = getQueryClient();\n // Set the full schedules list from the response (API returns complete list)\n if (data) {\n qc.setQueryData(QueryKeys.posts.schedules(username), data);\n } else {\n qc.invalidateQueries({ queryKey: QueryKeys.posts.schedules(username) });\n }\n // Also invalidate drafts since moving a schedule creates a draft\n qc.invalidateQueries({ queryKey: QueryKeys.posts.drafts(username) });\n },\n onError,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { getQueryClient, QueryKeys } from \"@/modules/core\";\nimport { addImage } from \"@/modules/private-api/requests\";\n\n/**\n * Hook to add an image URL to the user's Ecency gallery\n *\n * @param username - Current user's username\n * @param code - Access token for authentication\n * @param onSuccess - Optional callback on successful addition\n * @param onError - Optional callback on error\n *\n * @example\n * const addImageMutation = useAddImage(username, code);\n * addImageMutation.mutate({ url: 'https://...' });\n */\nexport function useAddImage(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: () => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"images\", \"add\", username],\n mutationFn: async ({ url }: { url: string }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Posts] – missing auth for addImage\");\n }\n return addImage(code, url);\n },\n onSuccess: () => {\n onSuccess?.();\n getQueryClient().invalidateQueries({\n queryKey: QueryKeys.posts.images(username),\n });\n },\n onError,\n });\n}\n","import { useMutation, type InfiniteData } from \"@tanstack/react-query\";\nimport { getQueryClient } from \"@/modules/core\";\nimport { deleteImage } from \"@/modules/private-api/requests\";\nimport type { UserImage } from \"../types\";\nimport type { WrappedResponse } from \"@/modules/core/types\";\n\n/**\n * Hook to delete an image from the user's Ecency gallery\n *\n * @param username - Current user's username\n * @param code - Access token for authentication\n * @param onSuccess - Optional callback on successful deletion\n * @param onError - Optional callback on error\n *\n * @example\n * const deleteImageMutation = useDeleteImage(username, code);\n * deleteImageMutation.mutate({ imageId: '123' });\n */\nexport function useDeleteImage(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: () => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"images\", \"delete\", username],\n mutationFn: async ({ imageId }: { imageId: string }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Posts] – missing auth for deleteImage\");\n }\n return deleteImage(code, imageId);\n },\n onSuccess: (_data, variables) => {\n onSuccess?.();\n const qc = getQueryClient();\n const { imageId } = variables;\n\n // Optimistic removal from regular cache\n qc.setQueryData<UserImage[]>(\n [\"posts\", \"images\", username],\n (prev) => prev?.filter((img) => img._id !== imageId)\n );\n\n // Optimistic removal from infinite cache pages\n qc.setQueriesData<InfiniteData<WrappedResponse<UserImage>>>(\n { queryKey: [\"posts\", \"images\", \"infinite\", username] },\n (oldData) => {\n if (!oldData) return oldData;\n return {\n ...oldData,\n pages: oldData.pages.map((page) => ({\n ...page,\n data: page.data.filter((img) => img._id !== imageId),\n })),\n };\n }\n );\n },\n onError,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { uploadImage } from \"@/modules/private-api/requests\";\n\n/**\n * Hook to upload an image file to Ecency image hosting\n *\n * @param onSuccess - Optional callback on successful upload, receives { url: string }\n * @param onError - Optional callback on error\n *\n * Note: This hook uploads to Ecency's image server and requires a signature token.\n * The token should be generated using the user's posting key signature.\n *\n * @example\n * const uploadMutation = useUploadImage(\n * (data) => console.log('Uploaded:', data.url)\n * );\n * uploadMutation.mutate({ file, token });\n */\nexport function useUploadImage(\n onSuccess?: (data: { url: string }) => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"images\", \"upload\"],\n mutationFn: async ({\n file,\n token,\n signal,\n }: {\n file: File;\n token: string;\n signal?: AbortSignal;\n }) => {\n return uploadImage(file, token, signal);\n },\n onSuccess,\n onError,\n });\n}\n","import { getQueryClient, QueryKeys } from \"@/modules/core\";\nimport type { Entry, EntryVote } from \"../types\";\nimport type { QueryClient } from \"@tanstack/react-query\";\n\nfunction makeEntryPath(author: string, permlink: string) {\n return `/@${author}/${permlink}`;\n}\n\nfunction getEntryFromCache(\n author: string,\n permlink: string,\n qc?: QueryClient\n): Entry | undefined {\n const queryClient = qc ?? getQueryClient();\n return queryClient.getQueryData<Entry>(\n QueryKeys.posts.entry(makeEntryPath(author, permlink))\n );\n}\n\nfunction setEntryInCache(entry: Entry, qc?: QueryClient) {\n const queryClient = qc ?? getQueryClient();\n queryClient.setQueryData<Entry>(\n QueryKeys.posts.entry(makeEntryPath(entry.author, entry.permlink)),\n entry\n );\n}\n\nfunction mutateEntry(\n author: string,\n permlink: string,\n updater: (entry: Entry) => Entry,\n qc?: QueryClient\n): Entry | undefined {\n const queryClient = qc ?? getQueryClient();\n const path = makeEntryPath(author, permlink);\n const existing = queryClient.getQueryData<Entry>(QueryKeys.posts.entry(path));\n if (!existing) return undefined;\n\n const updated = updater(existing);\n queryClient.setQueryData<Entry>(QueryKeys.posts.entry(path), updated);\n return existing;\n}\n\n/**\n * SDK-level entry cache utilities. These operate on SDK cache keys\n * ([\"posts\", \"entry\", \"/@author/permlink\"]).\n *\n * Web layer can bridge these to its own QueryIdentifiers.ENTRY keys\n * during the migration period.\n */\nexport namespace EntriesCacheManagement {\n export function updateVotes(\n author: string,\n permlink: string,\n votes: EntryVote[],\n payout: number,\n qc?: QueryClient\n ) {\n mutateEntry(\n author,\n permlink,\n (entry) => ({\n ...entry,\n active_votes: votes,\n stats: {\n ...(entry.stats || {\n gray: false,\n hide: false,\n flag_weight: 0,\n total_votes: 0,\n }),\n total_votes: votes.length,\n flag_weight: entry.stats?.flag_weight || 0,\n },\n total_votes: votes.length,\n payout,\n pending_payout_value: String(payout),\n }),\n qc\n );\n }\n\n export function updateReblogsCount(\n author: string,\n permlink: string,\n count: number,\n qc?: QueryClient\n ) {\n mutateEntry(\n author,\n permlink,\n (entry) => ({\n ...entry,\n reblogs: count,\n }),\n qc\n );\n }\n\n export function updateRepliesCount(\n author: string,\n permlink: string,\n count: number,\n qc?: QueryClient\n ) {\n mutateEntry(\n author,\n permlink,\n (entry) => ({\n ...entry,\n children: count,\n }),\n qc\n );\n }\n\n export function addReply(\n reply: Entry,\n parentAuthor: string,\n parentPermlink: string,\n qc?: QueryClient\n ) {\n mutateEntry(\n parentAuthor,\n parentPermlink,\n (entry) => ({\n ...entry,\n children: entry.children + 1,\n replies: [reply, ...entry.replies],\n }),\n qc\n );\n }\n\n export function updateEntries(entries: Entry[], qc?: QueryClient) {\n entries.forEach((entry) => setEntryInCache(entry, qc));\n }\n\n export function invalidateEntry(\n author: string,\n permlink: string,\n qc?: QueryClient\n ) {\n const queryClient = qc ?? getQueryClient();\n queryClient.invalidateQueries({\n queryKey: QueryKeys.posts.entry(makeEntryPath(author, permlink)),\n });\n }\n\n export function getEntry(\n author: string,\n permlink: string,\n qc?: QueryClient\n ): Entry | undefined {\n return getEntryFromCache(author, permlink, qc);\n }\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildVoteOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { EntriesCacheManagement } from \"../cache/entries-cache-management\";\n\n/**\n * Payload for voting on a post or comment.\n */\nexport interface VotePayload {\n /** Author of the post/comment to vote on */\n author: string;\n /** Permlink of the post/comment to vote on */\n permlink: string;\n /** Vote weight (-10000 to 10000, where 10000 = 100% upvote, -10000 = 100% downvote) */\n weight: number;\n /** Optional estimated payout change for optimistic UI */\n estimated?: number;\n}\n\n/**\n * React Query mutation hook for voting on posts and comments.\n *\n * This mutation broadcasts a vote operation to the Hive blockchain,\n * supporting upvotes (positive weight) and downvotes (negative weight).\n *\n * @param username - The username of the voter (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Records activity (type 120) if adapter.recordActivity is available\n * - Invalidates post cache to refetch updated vote data\n * - Invalidates voting power cache to show updated VP\n *\n * **Vote Weight:**\n * - 10000 = 100% upvote\n * - 0 = remove vote\n * - -10000 = 100% downvote\n *\n * @example\n * ```typescript\n * const voteMutation = useVote(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Upvote a post\n * voteMutation.mutate({\n * author: 'alice',\n * permlink: 'my-awesome-post',\n * weight: 10000\n * });\n *\n * // Remove vote\n * voteMutation.mutate({\n * author: 'alice',\n * permlink: 'my-awesome-post',\n * weight: 0\n * });\n *\n * // Downvote\n * voteMutation.mutate({\n * author: 'alice',\n * permlink: 'my-awesome-post',\n * weight: -10000\n * });\n * ```\n */\nexport function useVote(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<VotePayload>(\n [\"posts\", \"vote\"],\n username,\n ({ author, permlink, weight }) => [\n buildVoteOp(username!, author, permlink, weight)\n ],\n async (result: any, variables) => {\n // Optimistic vote list + payout update\n const entry = EntriesCacheManagement.getEntry(variables.author, variables.permlink);\n if (entry?.active_votes) {\n const newVotes = [\n ...entry.active_votes.filter((v) => v.voter !== username),\n ...(variables.weight !== 0 ? [{ rshares: variables.weight, voter: username! }] : [])\n ];\n const newPayout = entry.payout + (variables.estimated ?? 0);\n EntriesCacheManagement.updateVotes(\n variables.author,\n variables.permlink,\n newVotes,\n newPayout\n );\n }\n\n // Activity tracking\n if (auth?.adapter?.recordActivity && result?.block_num && result?.id) {\n await auth.adapter.recordActivity(120, result.block_num, result.id);\n }\n\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.posts.entry(`/@${variables.author}/${variables.permlink}`),\n QueryKeys.accounts.full(username)\n ]);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, QueryKeys, getQueryClient } from \"@/modules/core\";\nimport { buildReblogOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { EntriesCacheManagement } from \"../cache/entries-cache-management\";\n\n/**\n * Payload for reblogging a post.\n */\nexport interface ReblogPayload {\n /** Original post author */\n author: string;\n /** Original post permlink */\n permlink: string;\n /** If true, removes the reblog instead of creating it */\n deleteReblog?: boolean;\n}\n\n/**\n * React Query mutation hook for reblogging posts.\n *\n * This mutation broadcasts a custom_json operation to reblog (or un-reblog)\n * a post to the user's blog feed.\n *\n * @param username - The username performing the reblog (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Records activity (type 130) if adapter.recordActivity is available\n * - Invalidates blog feed cache to show the reblogged post\n * - Invalidates post cache to update reblog status\n *\n * **Reblog vs Delete:**\n * - deleteReblog: false (default) - Creates a reblog\n * - deleteReblog: true - Removes an existing reblog\n *\n * @example\n * ```typescript\n * const reblogMutation = useReblog(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Reblog a post\n * reblogMutation.mutate({\n * author: 'alice',\n * permlink: 'my-awesome-post'\n * });\n *\n * // Remove a reblog\n * reblogMutation.mutate({\n * author: 'alice',\n * permlink: 'my-awesome-post',\n * deleteReblog: true\n * });\n * ```\n */\nexport function useReblog(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<ReblogPayload>(\n [\"posts\", \"reblog\"],\n username,\n ({ author, permlink, deleteReblog }) => [\n buildReblogOp(username!, author, permlink, deleteReblog ?? false)\n ],\n async (result: any, variables) => {\n // Optimistic reblog count update\n const entry = EntriesCacheManagement.getEntry(variables.author, variables.permlink);\n if (entry) {\n const newCount = Math.max(0, (entry.reblogs ?? 0) + (variables.deleteReblog ? -1 : 1));\n EntriesCacheManagement.updateReblogsCount(variables.author, variables.permlink, newCount);\n }\n\n // Activity tracking\n if (auth?.adapter?.recordActivity && result?.block_num && result?.id) {\n await auth.adapter.recordActivity(130, result.block_num, result.id);\n }\n\n // Invalidate user's blog feed so reblogged post appears/disappears\n const qc = getQueryClient();\n qc.invalidateQueries({\n predicate: (query) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key[0] === \"posts\" &&\n key[1] === \"account-posts\" &&\n key[2] === username &&\n key[3] === \"blog\"\n );\n }\n });\n\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.posts.entry(`/@${variables.author}/${variables.permlink}`),\n QueryKeys.posts.rebloggedBy(variables.author, variables.permlink),\n ]);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildCommentOp, buildCommentOptionsOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\n/**\n * Beneficiary account and weight.\n */\nexport interface Beneficiary {\n /** Beneficiary account name */\n account: string;\n /** Beneficiary weight (10000 = 100%) */\n weight: number;\n}\n\n/**\n * Payload for creating a comment or post.\n */\nexport interface CommentPayload {\n /** Author of the comment/post */\n author: string;\n /** Permlink of the comment/post */\n permlink: string;\n /** Parent author (empty string for top-level posts) */\n parentAuthor: string;\n /** Parent permlink (category/tag for top-level posts) */\n parentPermlink: string;\n /** Title of the post (empty for comments) */\n title: string;\n /** Content body */\n body: string;\n /** JSON metadata object */\n jsonMetadata: Record<string, any>;\n /** Optional: Root post author (for nested replies, used for discussions cache invalidation) */\n rootAuthor?: string;\n /** Optional: Root post permlink (for nested replies, used for discussions cache invalidation) */\n rootPermlink?: string;\n /** Optional: Comment options (beneficiaries, rewards) */\n options?: {\n /** Maximum accepted payout (e.g., \"1000000.000 HBD\") */\n maxAcceptedPayout?: string;\n /** Percent of payout in HBD (10000 = 100%) */\n percentHbd?: number;\n /** Allow votes on this content */\n allowVotes?: boolean;\n /** Allow curation rewards */\n allowCurationRewards?: boolean;\n /** Beneficiaries array */\n beneficiaries?: Beneficiary[];\n };\n}\n\n/**\n * React Query mutation hook for creating posts and comments.\n *\n * This mutation broadcasts a comment operation (and optionally comment_options)\n * to create a new post or reply on the Hive blockchain.\n *\n * @param username - The username creating the comment/post (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Records activity (type 100 for posts, 110 for comments) if adapter.recordActivity is available\n * - Invalidates feed caches to show the new content\n * - Invalidates parent post cache if this is a reply\n *\n * **Operations:**\n * - Always includes a comment operation\n * - Optionally includes comment_options operation for beneficiaries/rewards\n *\n * **Post vs Comment:**\n * - Post: parentAuthor = \"\", parentPermlink = category/tag\n * - Comment: parentAuthor = parent author, parentPermlink = parent permlink\n *\n * @example\n * ```typescript\n * const commentMutation = useComment(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Create a post\n * commentMutation.mutate({\n * author: 'alice',\n * permlink: 'my-awesome-post-20260209',\n * parentAuthor: '',\n * parentPermlink: 'technology',\n * title: 'My Awesome Post',\n * body: 'This is the post content...',\n * jsonMetadata: {\n * tags: ['technology', 'hive'],\n * app: 'ecency/3.0.0'\n * },\n * options: {\n * beneficiaries: [\n * { account: 'ecency', weight: 500 }\n * ]\n * }\n * });\n *\n * // Create a comment\n * commentMutation.mutate({\n * author: 'bob',\n * permlink: 're-alice-my-awesome-post-20260209',\n * parentAuthor: 'alice',\n * parentPermlink: 'my-awesome-post-20260209',\n * title: '',\n * body: 'Great post!',\n * jsonMetadata: { app: 'ecency/3.0.0' }\n * });\n * ```\n */\nexport function useComment(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<CommentPayload>(\n [\"posts\", \"comment\"],\n username,\n (payload) => {\n const operations: Operation[] = [];\n\n // Main comment operation\n operations.push(\n buildCommentOp(\n payload.author,\n payload.permlink,\n payload.parentAuthor,\n payload.parentPermlink,\n payload.title,\n payload.body,\n payload.jsonMetadata\n )\n );\n\n // Optional comment options operation\n if (payload.options) {\n const {\n maxAcceptedPayout = \"1000000.000 HBD\",\n percentHbd = 10000,\n allowVotes = true,\n allowCurationRewards = true,\n beneficiaries = []\n } = payload.options;\n\n const extensions: any[] = [];\n\n // Add beneficiaries extension if provided\n if (beneficiaries.length > 0) {\n // Sort beneficiaries alphabetically by account name (required by blockchain)\n const sortedBeneficiaries = [...beneficiaries].sort((a, b) =>\n a.account.localeCompare(b.account)\n );\n\n extensions.push([\n 0,\n {\n beneficiaries: sortedBeneficiaries.map(b => ({\n account: b.account,\n weight: b.weight\n }))\n }\n ]);\n }\n\n operations.push(\n buildCommentOptionsOp(\n payload.author,\n payload.permlink,\n maxAcceptedPayout,\n percentHbd,\n allowVotes,\n allowCurationRewards,\n extensions\n )\n );\n }\n\n return operations;\n },\n async (result: any, variables) => {\n // Determine if this is a post or comment\n const isPost = !variables.parentAuthor;\n const activityType = isPost ? 100 : 110;\n\n // Activity tracking (wrapped in try/catch to prevent failures from blocking cache invalidation)\n if (auth?.adapter?.recordActivity && result?.block_num && result?.id) {\n try {\n await auth.adapter.recordActivity(activityType, result.block_num, result.id);\n } catch (err) {\n // Log error but don't rethrow - activity tracking is non-critical\n console.warn('[useComment] Failed to record activity:', err);\n }\n }\n\n // Cache invalidation (always runs regardless of recordActivity outcome)\n if (auth?.adapter?.invalidateQueries) {\n const queriesToInvalidate: any[] = [\n QueryKeys.accounts.full(username),\n QueryKeys.resourceCredits.account(username!)\n ];\n\n // If this is a reply, invalidate parent post and discussions\n if (!isPost) {\n // Invalidate parent entry\n queriesToInvalidate.push(\n QueryKeys.posts.entry(`/@${variables.parentAuthor}/${variables.parentPermlink}`)\n );\n\n // Invalidate discussions (matches all sort orders)\n // Use partial key to match all sort order variants\n // For nested replies, use rootAuthor/rootPermlink to match the root post's discussions\n // Fall back to parentAuthor/parentPermlink for direct replies to posts\n const discussionsAuthor = variables.rootAuthor || variables.parentAuthor;\n const discussionsPermlink = variables.rootPermlink || variables.parentPermlink;\n\n queriesToInvalidate.push({\n predicate: (query: any) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key[0] === \"posts\" &&\n key[1] === \"discussions\" &&\n key[2] === discussionsAuthor &&\n key[3] === discussionsPermlink\n );\n }\n });\n }\n\n await auth.adapter.invalidateQueries(queriesToInvalidate);\n }\n },\n auth\n );\n}\n","import { getQueryClient, QueryKeys } from \"@/modules/core\";\nimport type { Entry } from \"../types\";\nimport type { QueryClient } from \"@tanstack/react-query\";\n\n/**\n * Adds an optimistic entry to all discussions caches for the given root post.\n * Uses predicate matching to find all sort order variants.\n */\nexport function addOptimisticDiscussionEntry(\n entry: Entry,\n rootAuthor: string,\n rootPermlink: string,\n qc?: QueryClient\n) {\n const queryClient = qc ?? getQueryClient();\n const queries = queryClient.getQueriesData<Entry[]>({\n predicate: (query) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key[0] === \"posts\" &&\n key[1] === \"discussions\" &&\n key[2] === rootAuthor &&\n key[3] === rootPermlink\n );\n },\n });\n\n for (const [queryKey, data] of queries) {\n if (data) {\n queryClient.setQueryData<Entry[]>(queryKey, [entry, ...data]);\n }\n }\n}\n\n/**\n * Removes an entry from all discussions caches for the given root post.\n * Returns the previous state for rollback.\n */\nexport function removeOptimisticDiscussionEntry(\n author: string,\n permlink: string,\n rootAuthor: string,\n rootPermlink: string,\n qc?: QueryClient\n): Map<readonly unknown[], Entry[]> {\n const queryClient = qc ?? getQueryClient();\n const snapshots = new Map<readonly unknown[], Entry[]>();\n\n const queries = queryClient.getQueriesData<Entry[]>({\n predicate: (query) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key[0] === \"posts\" &&\n key[1] === \"discussions\" &&\n key[2] === rootAuthor &&\n key[3] === rootPermlink\n );\n },\n });\n\n for (const [queryKey, data] of queries) {\n if (data) {\n snapshots.set(queryKey, data);\n queryClient.setQueryData<Entry[]>(\n queryKey,\n data.filter(\n (e) => e.author !== author || e.permlink !== permlink\n )\n );\n }\n }\n\n return snapshots;\n}\n\n/**\n * Restores discussion cache snapshots (for rollback on error).\n */\nexport function restoreDiscussionSnapshots(\n snapshots: Map<readonly unknown[], Entry[]>,\n qc?: QueryClient\n) {\n const queryClient = qc ?? getQueryClient();\n for (const [queryKey, data] of snapshots) {\n queryClient.setQueryData<Entry[]>(queryKey, data);\n }\n}\n\n/**\n * Updates a specific entry in the SDK entry cache.\n * Returns the previous entry for rollback.\n */\nexport function updateEntryInCache(\n author: string,\n permlink: string,\n updates: Partial<Entry>,\n qc?: QueryClient\n): Entry | undefined {\n const queryClient = qc ?? getQueryClient();\n const path = `/@${author}/${permlink}`;\n const previous = queryClient.getQueryData<Entry>(QueryKeys.posts.entry(path));\n\n if (previous) {\n queryClient.setQueryData<Entry>(QueryKeys.posts.entry(path), {\n ...previous,\n ...updates,\n });\n }\n\n return previous;\n}\n\n/**\n * Restores an entry in cache (for rollback on error).\n */\nexport function restoreEntryInCache(\n author: string,\n permlink: string,\n entry: Entry,\n qc?: QueryClient\n) {\n const queryClient = qc ?? getQueryClient();\n const path = `/@${author}/${permlink}`;\n queryClient.setQueryData<Entry>(QueryKeys.posts.entry(path), entry);\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildDeleteCommentOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport {\n removeOptimisticDiscussionEntry,\n restoreDiscussionSnapshots,\n} from \"../cache/discussions-cache-utils\";\nimport type { Entry } from \"../types\";\n\n/**\n * Payload for deleting a comment or post.\n */\nexport interface DeleteCommentPayload {\n /** Author of the comment/post to delete */\n author: string;\n /** Permlink of the comment/post to delete */\n permlink: string;\n /** Optional: Parent author (for cache invalidation of discussions) */\n parentAuthor?: string;\n /** Optional: Parent permlink (for cache invalidation of discussions) */\n parentPermlink?: string;\n /** Optional: Root post author (for nested replies, used for discussions cache invalidation) */\n rootAuthor?: string;\n /** Optional: Root post permlink (for nested replies, used for discussions cache invalidation) */\n rootPermlink?: string;\n}\n\n/**\n * React Query mutation hook for deleting posts and comments.\n *\n * This mutation broadcasts a delete_comment operation to the Hive blockchain.\n * Includes optimistic removal from discussions cache with rollback on error.\n *\n * @param username - The username deleting the comment/post (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n */\nexport function useDeleteComment(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<DeleteCommentPayload>(\n [\"posts\", \"deleteComment\"],\n username,\n ({ author, permlink }) => [\n buildDeleteCommentOp(author, permlink)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n const queriesToInvalidate: any[] = [\n QueryKeys.accounts.full(username)\n ];\n\n // If this is a reply, invalidate parent post and discussions\n if (variables.parentAuthor && variables.parentPermlink) {\n queriesToInvalidate.push(\n QueryKeys.posts.entry(`/@${variables.parentAuthor}/${variables.parentPermlink}`)\n );\n\n const discussionsAuthor = variables.rootAuthor || variables.parentAuthor;\n const discussionsPermlink = variables.rootPermlink || variables.parentPermlink;\n\n queriesToInvalidate.push({\n predicate: (query: any) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key[0] === \"posts\" &&\n key[1] === \"discussions\" &&\n key[2] === discussionsAuthor &&\n key[3] === discussionsPermlink\n );\n }\n });\n }\n\n await auth.adapter.invalidateQueries(queriesToInvalidate);\n }\n },\n auth,\n 'posting',\n {\n // Optimistic removal: remove from discussions cache before broadcast\n onMutate: async (variables) => {\n const rootAuthor = variables.rootAuthor || variables.parentAuthor;\n const rootPermlink = variables.rootPermlink || variables.parentPermlink;\n\n if (rootAuthor && rootPermlink) {\n const snapshots = removeOptimisticDiscussionEntry(\n variables.author,\n variables.permlink,\n rootAuthor,\n rootPermlink\n );\n return { snapshots };\n }\n return {};\n },\n // Rollback on error: restore discussions cache\n onError: (_error, _variables, context) => {\n const { snapshots } = (context as { snapshots?: Map<readonly unknown[], Entry[]> }) ?? {};\n if (snapshots) {\n restoreDiscussionSnapshots(snapshots);\n }\n },\n }\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildCommentOp, buildCommentOptionsOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\n/**\n * Payload for creating a cross-post.\n */\nexport interface CrossPostPayload {\n /** Author of the cross-post (current user) */\n author: string;\n /** Permlink of the cross-post (usually: original-permlink-community-id) */\n permlink: string;\n /** Community ID to cross-post to (used as parent_permlink) */\n parentPermlink: string;\n /** Title of the cross-post (same as original) */\n title: string;\n /** Body of the cross-post (includes reference to original) */\n body: string;\n /** JSON metadata (must include original_author, original_permlink, tags, app) */\n jsonMetadata: Record<string, any>;\n /** Optional: Comment options (beneficiaries, rewards) */\n options?: {\n /** Maximum accepted payout (e.g., \"0.000 HBD\" for declined payout) */\n maxAcceptedPayout?: string;\n /** Percent of payout in HBD (10000 = 100%) */\n percentHbd?: number;\n /** Allow votes on this content */\n allowVotes?: boolean;\n /** Allow curation rewards */\n allowCurationRewards?: boolean;\n };\n}\n\n/**\n * React Query mutation hook for creating cross-posts.\n *\n * A cross-post is a special type of post that references an original post\n * and publishes it to a different community.\n *\n * @param username - The username creating the cross-post (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates feed/blog caches to show the new cross-post\n *\n * **Operations:**\n * - Always includes a comment operation (with empty parent_author for top-level post)\n * - Optionally includes comment_options operation for rewards/beneficiaries\n *\n * **Metadata Requirements:**\n * The jsonMetadata must include:\n * - `original_author`: Author of the original post\n * - `original_permlink`: Permlink of the original post\n * - `tags`: Tags for the cross-post (typically [\"cross-post\"])\n * - `app`: Application identifier (e.g., \"ecency/3.0.0-vision\")\n *\n * @example\n * ```typescript\n * const crossPostMutation = useCrossPost(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Create a cross-post\n * crossPostMutation.mutate({\n * author: 'alice',\n * permlink: 'great-post-hive-123456',\n * parentPermlink: 'hive-123456', // community ID\n * title: 'Great Post',\n * body: 'This is a cross post of [@bob/great-post](/technology/@bob/great-post) by @alice.<br><br>Check this out!',\n * jsonMetadata: {\n * app: 'ecency/3.0.0-vision',\n * tags: ['cross-post'],\n * original_author: 'bob',\n * original_permlink: 'great-post'\n * },\n * options: {\n * maxAcceptedPayout: '0.000 HBD',\n * allowCurationRewards: false\n * }\n * });\n * ```\n */\nexport function useCrossPost(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<CrossPostPayload>(\n [\"posts\", \"cross-post\"],\n username,\n (payload) => {\n const operations: Operation[] = [];\n\n // Main comment operation (empty parent_author for top-level post)\n operations.push(\n buildCommentOp(\n payload.author,\n payload.permlink,\n \"\", // empty parent_author for top-level post\n payload.parentPermlink, // community ID\n payload.title,\n payload.body,\n payload.jsonMetadata\n )\n );\n\n // Optional comment options operation\n if (payload.options) {\n const {\n maxAcceptedPayout = \"1000000.000 HBD\",\n percentHbd = 10000,\n allowVotes = true,\n allowCurationRewards = true,\n } = payload.options;\n\n operations.push(\n buildCommentOptionsOp(\n payload.author,\n payload.permlink,\n maxAcceptedPayout,\n percentHbd,\n allowVotes,\n allowCurationRewards,\n [] // No beneficiaries for cross-posts\n )\n );\n }\n\n return operations;\n },\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n const queriesToInvalidate: any[] = [\n QueryKeys.accounts.full(username),\n // Invalidate target community feed so cross-post appears\n {\n predicate: (query: any) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key[0] === \"posts\" &&\n key[1] === \"posts-ranked\" &&\n key[3] === variables.parentPermlink\n );\n }\n }\n ];\n await auth.adapter.invalidateQueries(queriesToInvalidate);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildCommentOp, buildCommentOptionsOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\nimport type { Beneficiary } from \"./use-comment\";\n\n/**\n * Payload for updating a reply/comment.\n */\nexport interface UpdateReplyPayload {\n /** Author of the comment/post */\n author: string;\n /** Permlink of the comment/post being updated */\n permlink: string;\n /** Parent author */\n parentAuthor: string;\n /** Parent permlink */\n parentPermlink: string;\n /** Title (empty for comments) */\n title: string;\n /** Updated content body */\n body: string;\n /** Updated JSON metadata object */\n jsonMetadata: Record<string, any>;\n /** Optional: Root post author (for nested replies, used for discussions cache invalidation) */\n rootAuthor?: string;\n /** Optional: Root post permlink (for nested replies, used for discussions cache invalidation) */\n rootPermlink?: string;\n /** Optional: Comment options (beneficiaries, rewards) */\n options?: {\n /** Maximum accepted payout (e.g., \"1000000.000 HBD\") */\n maxAcceptedPayout?: string;\n /** Percent of payout in HBD (10000 = 100%) */\n percentHbd?: number;\n /** Allow votes on this content */\n allowVotes?: boolean;\n /** Allow curation rewards */\n allowCurationRewards?: boolean;\n /** Beneficiaries array */\n beneficiaries?: Beneficiary[];\n };\n}\n\n/**\n * React Query mutation hook for updating existing replies/comments.\n *\n * This mutation broadcasts a comment operation (and optionally comment_options)\n * to update an existing reply/comment on the Hive blockchain.\n *\n * @param username - The username updating the comment (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates parent post cache to reflect the updated comment\n * - Invalidates discussions cache (all sort orders)\n * - Invalidates RC cache (RC decreases after updating)\n *\n * **Operations:**\n * - Always includes a comment operation\n * - Optionally includes comment_options operation for beneficiaries/rewards\n *\n * **Important:**\n * - Updates use the same comment operation as creating new comments\n * - The blockchain identifies this as an update based on matching author/permlink\n * - Only the author can update their own content\n * - Content can only be updated before payout (within 7 days)\n *\n * @example\n * ```typescript\n * const updateReplyMutation = useUpdateReply(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Update a reply\n * updateReplyMutation.mutate({\n * author: 'alice',\n * permlink: 're-bob-my-post-20260209',\n * parentAuthor: 'bob',\n * parentPermlink: 'my-post-20260209',\n * title: '',\n * body: 'Updated comment content!',\n * jsonMetadata: {\n * tags: ['comment'],\n * app: 'ecency/3.0.0-vision'\n * },\n * rootAuthor: 'bob',\n * rootPermlink: 'my-post-20260209'\n * });\n * ```\n */\nexport function useUpdateReply(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<UpdateReplyPayload>(\n [\"posts\", \"update-reply\"],\n username,\n (payload) => {\n const operations: Operation[] = [];\n\n // Main comment operation (same operation for create and update)\n operations.push(\n buildCommentOp(\n payload.author,\n payload.permlink,\n payload.parentAuthor,\n payload.parentPermlink,\n payload.title,\n payload.body,\n payload.jsonMetadata\n )\n );\n\n // Optional comment options operation\n if (payload.options) {\n const {\n maxAcceptedPayout = \"1000000.000 HBD\",\n percentHbd = 10000,\n allowVotes = true,\n allowCurationRewards = true,\n beneficiaries = []\n } = payload.options;\n\n const extensions: any[] = [];\n\n // Add beneficiaries extension if provided\n if (beneficiaries.length > 0) {\n // Sort beneficiaries alphabetically by account name (required by blockchain)\n const sortedBeneficiaries = [...beneficiaries].sort((a, b) =>\n a.account.localeCompare(b.account)\n );\n\n extensions.push([\n 0,\n {\n beneficiaries: sortedBeneficiaries.map(b => ({\n account: b.account,\n weight: b.weight\n }))\n }\n ]);\n }\n\n operations.push(\n buildCommentOptionsOp(\n payload.author,\n payload.permlink,\n maxAcceptedPayout,\n percentHbd,\n allowVotes,\n allowCurationRewards,\n extensions\n )\n );\n }\n\n return operations;\n },\n async (_result: any, variables) => {\n // Activity tracking (comment update = type 110)\n if (auth?.adapter?.recordActivity && _result?.block_num && _result?.id) {\n try {\n await auth.adapter.recordActivity(110, _result.block_num, _result.id);\n } catch (err) {\n console.warn('[useUpdateReply] Failed to record activity:', err);\n }\n }\n\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n const queriesToInvalidate: any[] = [\n QueryKeys.resourceCredits.account(username!)\n ];\n\n // Invalidate parent entry\n queriesToInvalidate.push(\n QueryKeys.posts.entry(`/@${variables.parentAuthor}/${variables.parentPermlink}`)\n );\n\n // Invalidate discussions (matches all sort orders)\n // Use partial key to match all sort order variants\n // For nested replies, use rootAuthor/rootPermlink to match the root post's discussions\n // Fall back to parentAuthor/parentPermlink for direct replies to posts\n const discussionsAuthor = variables.rootAuthor || variables.parentAuthor;\n const discussionsPermlink = variables.rootPermlink || variables.parentPermlink;\n\n queriesToInvalidate.push({\n predicate: (query: any) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key[0] === \"posts\" &&\n key[1] === \"discussions\" &&\n key[2] === discussionsAuthor &&\n key[3] === discussionsPermlink\n );\n }\n });\n\n await auth.adapter.invalidateQueries(queriesToInvalidate);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildPromoteOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for promoting a post using Ecency Points.\n */\nexport interface PromotePayload {\n /** Post author */\n author: string;\n /** Post permlink */\n permlink: string;\n /** Promotion duration in days */\n duration: number;\n}\n\n/**\n * React Query mutation hook for promoting posts.\n *\n * This mutation broadcasts a custom_json operation to promote a post\n * using Ecency Points. The post will appear in promoted feeds for the\n * specified duration.\n *\n * @param username - The username promoting the post (required for broadcast, deducts points from this user)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates promoted posts cache to show newly promoted content\n * - Invalidates user points balance\n * - Invalidates post cache to update promotion status\n *\n * **Operation Details:**\n * - Uses custom_json operation with id \"ecency_promote\"\n * - JSON: {\"user\": \"username\", \"author\": \"postauthor\", \"permlink\": \"postpermlink\", \"duration\": 7}\n * - Authority: Active key (required for point spending)\n *\n * **Cost:**\n * - Costs Ecency Points based on duration\n * - User must have sufficient points balance\n *\n * @example\n * ```typescript\n * const promoteMutation = usePromote(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Promote a post for 7 days\n * promoteMutation.mutate({\n * author: 'alice',\n * permlink: 'my-great-post',\n * duration: 7\n * });\n * ```\n */\nexport function usePromote(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<PromotePayload>(\n [\"ecency\", \"promote\"],\n username,\n ({ author, permlink, duration }) => [\n buildPromoteOp(username!, author, permlink, duration)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n // Invalidate promoted posts feed\n [\"posts\", \"promoted\"],\n // Invalidate user points balance\n [\"points\", username],\n // Invalidate specific post cache to update promotion status\n QueryKeys.posts.entry(`/@${variables.author}/${variables.permlink}`),\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { Entry } from \"../types\";\n\nexport type ValidatePostCreatingOptions = {\n delays?: number[];\n};\n\nconst DEFAULT_VALIDATE_POST_DELAYS = [3000, 3000, 3000];\n\nconst delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nasync function getContent(author: string, permlink: string): Promise<Entry> {\n return CONFIG.hiveClient.call(\"condenser_api\", \"get_content\", [\n author,\n permlink,\n ]) as Promise<Entry>;\n}\n\nexport async function validatePostCreating(\n author: string,\n permlink: string,\n attempts = 0,\n options?: ValidatePostCreatingOptions\n) {\n const delays = options?.delays ?? DEFAULT_VALIDATE_POST_DELAYS;\n\n let response: Entry | undefined;\n try {\n response = await getContent(author, permlink);\n } catch (e) {\n response = undefined;\n }\n\n if (response || attempts >= delays.length) {\n return;\n }\n\n const waitMs = delays[attempts];\n if (waitMs > 0) {\n await delay(waitMs);\n }\n\n return validatePostCreating(author, permlink, attempts + 1, options);\n}\n","export * from \"./use-record-activity\";\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { useMutation } from \"@tanstack/react-query\";\n\ntype ActivityType =\n // Editor related\n | \"post-created\"\n | \"post-updated\"\n | \"post-scheduled\"\n | \"draft-created\"\n | \"video-published\"\n\n // Legacy editor related\n | \"legacy-post-created\"\n | \"legacy-post-updated\"\n | \"legacy-post-scheduled\"\n | \"legacy-draft-created\"\n | \"legacy-video-published\"\n\n // Perks related\n | \"perks-points-by-qr\"\n | \"perks-account-boost\"\n | \"perks-promote\"\n | \"perks-boost-plus\"\n | \"points-claimed\"\n | \"spin-rolled\"\n\n // Signup related\n | \"signed-up-with-wallets\"\n | \"signed-up-with-email\";\n\nexport interface RecordActivityOptions {\n url?: string;\n domain?: string;\n}\n\n/**\n * Get current location info safely (works in browser and Node.js)\n * Returns empty strings in non-browser environments\n */\nfunction getLocationInfo(): { url: string; domain: string } {\n if (typeof window !== \"undefined\" && window.location) {\n return {\n url: window.location.href,\n domain: window.location.host,\n };\n }\n return { url: \"\", domain: \"\" };\n}\n\nexport function useRecordActivity(\n username: string | undefined,\n activityType: ActivityType,\n options?: RecordActivityOptions\n) {\n return useMutation({\n mutationKey: [\"analytics\", activityType],\n mutationFn: async () => {\n if (!activityType) {\n throw new Error(\"[SDK][Analytics] – no activity type provided\");\n }\n const fetchApi = getBoundFetch();\n\n // Use provided values or auto-detect from browser environment\n // Falls back to empty strings in non-browser environments (Node.js, React Native, etc.)\n const locationInfo = getLocationInfo();\n const url = options?.url ?? locationInfo.url;\n const domain = options?.domain ?? locationInfo.domain;\n\n await fetchApi(CONFIG.plausibleHost + \"/api/event\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n name: activityType,\n url,\n domain,\n props: {\n username,\n },\n }),\n });\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { LeaderBoardDuration, LeaderBoardItem } from \"../types\";\n\nexport function getDiscoverLeaderboardQueryOptions(duration: LeaderBoardDuration) {\n return queryOptions({\n queryKey: [\"analytics\", \"discover-leaderboard\", duration],\n queryFn: async ({ signal }) => {\n const response = await fetch(\n CONFIG.privateApiHost + `/private-api/leaderboard/${duration}`,\n { signal }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch leaderboard: ${response.status}`);\n }\n\n return response.json() as Promise<LeaderBoardItem[]>;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { CurationDuration, CurationItem } from \"../types\";\n\nexport function getDiscoverCurationQueryOptions(duration: CurationDuration) {\n return queryOptions({\n queryKey: [\"analytics\", \"discover-curation\", duration],\n queryFn: async ({ signal }) => {\n const response = await fetch(\n CONFIG.privateApiHost + `/private-api/curation/${duration}`,\n { signal }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch curation data: ${response.status}`);\n }\n\n const data = (await response.json()) as CurationItem[];\n\n // Fetch account data for efficiency calculation\n const accounts = data.map((item) => item.account);\n const accountsResponse = await CONFIG.hiveClient.database.getAccounts(accounts);\n\n // Calculate efficiency for each curator\n for (let index = 0; index < accountsResponse.length; index++) {\n const element = accountsResponse[index];\n const curator = data[index];\n\n // Convert Asset to string if needed\n const vestingShares = typeof element.vesting_shares === 'string'\n ? element.vesting_shares\n : element.vesting_shares.toString();\n const receivedVestingShares = typeof element.received_vesting_shares === 'string'\n ? element.received_vesting_shares\n : element.received_vesting_shares.toString();\n const delegatedVestingShares = typeof element.delegated_vesting_shares === 'string'\n ? element.delegated_vesting_shares\n : element.delegated_vesting_shares.toString();\n const vestingWithdrawRate = typeof element.vesting_withdraw_rate === 'string'\n ? element.vesting_withdraw_rate\n : element.vesting_withdraw_rate.toString();\n\n const effectiveVest: number =\n parseFloat(vestingShares) +\n parseFloat(receivedVestingShares) -\n parseFloat(delegatedVestingShares) -\n parseFloat(vestingWithdrawRate);\n curator.efficiency = curator.vests / effectiveVest;\n }\n\n // Sort by efficiency descending\n data.sort((a: CurationItem, b: CurationItem) => b.efficiency - a.efficiency);\n\n return data;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { PageStatsResponse } from \"../types\";\n\n/**\n * Get page statistics from the private analytics API\n *\n * @param url - URL to get stats for\n * @param dimensions - Dimensions to query (default: [])\n * @param metrics - Metrics to query (default: [\"visitors\", \"pageviews\", \"visit_duration\"])\n * @param dateRange - Date range for the query (e.g. \"day\", \"7d\", \"30d\", \"all\")\n */\nexport function getPageStatsQueryOptions(\n url: string,\n dimensions: string[] = [],\n metrics: string[] = [\"visitors\", \"pageviews\", \"visit_duration\"],\n dateRange?: string\n) {\n // Sort arrays to ensure stable query keys regardless of input order\n const sortedDimensions = [...dimensions].sort();\n const sortedMetrics = [...metrics].sort();\n\n return queryOptions({\n queryKey: [\"analytics\", \"page-stats\", url, sortedDimensions, sortedMetrics, dateRange],\n queryFn: async ({ signal }) => {\n const response = await fetch(CONFIG.privateApiHost + \"/api/stats\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n metrics,\n url: encodeURIComponent(url),\n dimensions,\n date_range: dateRange,\n }),\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch page stats: ${response.status}`);\n }\n\n return response.json() as Promise<PageStatsResponse>;\n },\n enabled: !!url,\n // Analytics data should always be fresh - users expect current stats when changing range\n staleTime: 0,\n });\n}\n","export * from \"./get-account-token-query-options\";\nexport * from \"./get-account-videos-query-options\";\n","export * from \"./get-decode-memo-query-options\";\n","import { queryOptions } from \"@tanstack/react-query\";\nimport hs from \"hivesigner\";\n\nexport function getDecodeMemoQueryOptions(\n username: string,\n memo: string,\n accessToken: string | undefined\n) {\n return queryOptions({\n queryKey: [\"integrations\", \"hivesigner\", \"decode-memo\", username],\n queryFn: async () => {\n if (accessToken) {\n const hsClient = new hs.Client({\n accessToken,\n });\n return hsClient.decode(memo);\n }\n },\n });\n}\n","import * as queries from \"./queries\";\n\nconst HiveSignerIntegration = {\n queries,\n};\n\nexport { HiveSignerIntegration };\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { HiveSignerIntegration } from \"../../hivesigner\";\nimport { getBoundFetch, getQueryClient } from \"@/modules/core\";\n\nexport function getAccountTokenQueryOptions(\n username: string | undefined,\n accessToken: string | undefined\n) {\n return queryOptions({\n queryKey: [\"integrations\", \"3speak\", \"authenticate\", username],\n enabled: !!username && !!accessToken,\n queryFn: async () => {\n if (!username || !accessToken) {\n throw new Error(\"[SDK][Integrations][3Speak] – anon user\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `https://studio.3speak.tv/mobile/login?username=${username}&hivesigner=true`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n const memoQueryOptions =\n HiveSignerIntegration.queries.getDecodeMemoQueryOptions(\n username,\n (await response.json()).memo,\n accessToken\n );\n await getQueryClient().prefetchQuery(memoQueryOptions);\n const { memoDecoded } = getQueryClient().getQueryData(\n memoQueryOptions.queryKey\n );\n\n return memoDecoded.replace(\"#\", \"\");\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { ThreeSpeakVideo } from \"../types\";\nimport { getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { getAccountTokenQueryOptions } from \"./get-account-token-query-options\";\n\nexport function getAccountVideosQueryOptions(\n username: string | undefined,\n accessToken: string | undefined\n) {\n return queryOptions({\n queryKey: [\"integrations\", \"3speak\", \"videos\", username],\n enabled: !!username && !!accessToken,\n queryFn: async () => {\n if (!username || !accessToken) {\n throw new Error(\"[SDK][Integrations][3Speak] – anon user\");\n }\n\n const tokenQueryOptions = getAccountTokenQueryOptions(\n username,\n accessToken\n );\n\n await getQueryClient().prefetchQuery(tokenQueryOptions);\n const token = getQueryClient().getQueryData(tokenQueryOptions.queryKey);\n if (!token) {\n throw new Error(\"[SDK][Integrations][3Speak] – missing account token\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `https://studio.3speak.tv/mobile/api/my-videos`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n }\n );\n return (await response.json()) as ThreeSpeakVideo[];\n },\n });\n}\n","export * from \"./types\";\nimport * as queries from \"./queries\";\n\nconst ThreeSpeakIntegration = {\n queries,\n};\n\nexport { ThreeSpeakIntegration };\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getBoundFetch } from \"@/modules/core\";\n\nexport function getHivePoshLinksQueryOptions(username: string | undefined) {\n return queryOptions({\n queryKey: [\"integrations\", \"hiveposh\", \"links\", username],\n retry: false, // Don't retry on user not found errors\n queryFn: async () => {\n try {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `https://hiveposh.com/api/v0/linked-accounts/${username}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n // Handle 400 error when user is not registered on HivePosh\n if (response.status === 400) {\n const errorData = await response.json().catch(() => ({}));\n // Silently return null for \"User Not Connected\" errors\n if (errorData?.message === \"User Not Connected\") {\n return null;\n }\n }\n\n if (!response.ok) {\n return null;\n }\n\n const data = await response.json();\n\n return {\n twitter: {\n username: data.twitter_username,\n profile: data.twitter_profile,\n },\n reddit: {\n username: data.reddit_username,\n profile: data.reddit_profile,\n },\n } satisfies Record<\n \"twitter\" | \"reddit\",\n { username: string; profile: string }\n >;\n } catch (err) {\n // Silently handle all HivePosh API errors\n return null;\n }\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, getBoundFetch } from \"@/modules/core\";\n\nexport interface StatsResponse {\n results: [\n {\n metrics: number[];\n dimensions: string[];\n },\n ];\n query: {\n site_id: string;\n metrics: string[];\n date_range: string[];\n filters: string[];\n };\n}\ninterface UseStatsQueryOptions {\n url: string;\n dimensions?: string[];\n metrics?: string[];\n enabled?: boolean;\n}\n\nexport function getStatsQueryOptions({\n url,\n dimensions = [],\n metrics = [\"visitors\", \"pageviews\", \"visit_duration\"],\n enabled = true,\n}: UseStatsQueryOptions) {\n return queryOptions({\n queryKey: [\"integrations\", \"plausible\", url, dimensions, metrics],\n queryFn: async () => {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(`${CONFIG.privateApiHost}/api/stats`, {\n method: \"POST\",\n body: JSON.stringify({\n metrics,\n url: encodeURIComponent(url),\n dimensions,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n\n return (await response.json()) as StatsResponse;\n },\n enabled: !!url && enabled,\n });\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport function getRcStatsQueryOptions() {\n return queryOptions({\n queryKey: [\"resource-credits\", \"stats\"],\n queryFn: async () => {\n const response = await CONFIG.hiveClient.call(\n \"rc_api\",\n \"get_rc_stats\",\n {}\n );\n return response.rc_stats;\n },\n });\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { RCAPI } from \"@hiveio/dhive\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport function getAccountRcQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"resource-credits\", \"account\", username],\n queryFn: async () => {\n const rcClient = new RCAPI(CONFIG.hiveClient);\n return rcClient.findRCAccounts([username]);\n },\n enabled: !!username,\n });\n}\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { GetGameStatus } from \"../types\";\n\nexport function getGameStatusCheckQueryOptions(\n username: string | undefined,\n code: string | undefined,\n gameType: \"spin\"\n) {\n return queryOptions({\n queryKey: [\"games\", \"status-check\", gameType, username],\n enabled: !!username && !!code,\n queryFn: async () => {\n if (!username || !code) {\n throw new Error(\"[SDK][Games] – missing auth\");\n }\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/get-game\",\n {\n method: \"POST\",\n body: JSON.stringify({\n game_type: gameType,\n code,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n return (await response.json()) as GetGameStatus;\n },\n });\n}\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { GameClaim } from \"../types\";\nimport { useRecordActivity } from \"@/modules/analytics/mutations\";\n\nexport function useGameClaim(\n username: string | undefined,\n code: string | undefined,\n gameType: \"spin\",\n key: string\n) {\n const { mutateAsync: recordActivity } = useRecordActivity(\n username,\n \"spin-rolled\"\n );\n\n return useMutation({\n mutationKey: [\"games\", \"post\", gameType, username],\n mutationFn: async () => {\n if (!username || !code) {\n throw new Error(\"[SDK][Games] – missing auth\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/post-game\",\n {\n method: \"POST\",\n body: JSON.stringify({\n game_type: gameType,\n code,\n key,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n return (await response.json()) as GameClaim;\n },\n onSuccess() {\n recordActivity();\n },\n });\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildSubscribeOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for subscribing to a community.\n */\nexport interface SubscribeCommunityPayload {\n /** Community name (e.g., \"hive-123456\") */\n community: string;\n}\n\n/**\n * React Query mutation hook for subscribing to a community.\n *\n * This mutation broadcasts a subscribe operation to the Hive blockchain,\n * adding the community to the user's subscription list.\n *\n * @param username - The username subscribing (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates subscriptions cache to show updated subscription list\n * - Invalidates community cache to refetch updated subscriber count\n *\n * **Operation Details:**\n * - Uses custom_json operation with id \"community\"\n * - Action: [\"subscribe\", {\"community\": \"hive-123456\"}]\n * - Authority: Posting key\n *\n * @example\n * ```typescript\n * const subscribeMutation = useSubscribeCommunity(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Subscribe to a community\n * subscribeMutation.mutate({\n * community: 'hive-123456'\n * });\n * ```\n */\nexport function useSubscribeCommunity(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<SubscribeCommunityPayload>(\n [\"communities\", \"subscribe\"],\n username,\n ({ community }) => [\n buildSubscribeOp(username!, community)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.subscriptions(username!),\n [...QueryKeys.communities.singlePrefix(variables.community)],\n QueryKeys.communities.context(username!, variables.community)\n ]);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildUnsubscribeOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for unsubscribing from a community.\n */\nexport interface UnsubscribeCommunityPayload {\n /** Community name (e.g., \"hive-123456\") */\n community: string;\n}\n\n/**\n * React Query mutation hook for unsubscribing from a community.\n *\n * This mutation broadcasts an unsubscribe operation to the Hive blockchain,\n * removing the community from the user's subscription list.\n *\n * @param username - The username unsubscribing (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates subscriptions cache to show updated subscription list\n * - Invalidates community cache to refetch updated subscriber count\n *\n * **Operation Details:**\n * - Uses custom_json operation with id \"community\"\n * - Action: [\"unsubscribe\", {\"community\": \"hive-123456\"}]\n * - Authority: Posting key\n *\n * @example\n * ```typescript\n * const unsubscribeMutation = useUnsubscribeCommunity(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Unsubscribe from a community\n * unsubscribeMutation.mutate({\n * community: 'hive-123456'\n * });\n * ```\n */\nexport function useUnsubscribeCommunity(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<UnsubscribeCommunityPayload>(\n [\"communities\", \"unsubscribe\"],\n username,\n ({ community }) => [\n buildUnsubscribeOp(username!, community)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.subscriptions(username!),\n [...QueryKeys.communities.singlePrefix(variables.community)],\n QueryKeys.communities.context(username!, variables.community)\n ]);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildMutePostOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for muting/unmuting a post in a community.\n */\nexport interface MutePostPayload {\n /** Community name (e.g., \"hive-123456\") */\n community: string;\n /** Post author */\n author: string;\n /** Post permlink */\n permlink: string;\n /** Mute reason/notes (required even for unmute) */\n notes: string;\n /** True to mute, false to unmute */\n mute: boolean;\n}\n\n/**\n * React Query mutation hook for muting/unmuting posts in a community.\n *\n * This mutation broadcasts a custom_json operation to mute (or unmute)\n * a post within a community. Only community moderators/admins can mute posts.\n *\n * @param username - The username performing the mute (required for broadcast, must have permission)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates community posts cache to hide muted content\n * - Invalidates post cache to update mute status\n * - Invalidates feed cache to remove muted posts from feeds\n *\n * **Operation Details:**\n * - Uses custom_json operation with id \"community\"\n * - Action: [\"mutePost\", {\"community\": \"hive-123456\", \"account\": \"author\", \"permlink\": \"post\", \"notes\": \"reason\"}]\n * - Action (unmute): [\"unmutePost\", {\"community\": \"hive-123456\", \"account\": \"author\", \"permlink\": \"post\", \"notes\": \"reason\"}]\n * - Authority: Posting key\n *\n * **Mute vs Unmute:**\n * - mute: true - Mutes the post (hides from community feed)\n * - mute: false - Unmutes the post (restores to community feed)\n *\n * **Permission:**\n * - Only community moderators and admins can mute/unmute posts\n * - Attempting to mute without permission will fail with an error\n *\n * @example\n * ```typescript\n * const mutePostMutation = useMutePost(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Mute a post\n * mutePostMutation.mutate({\n * community: 'hive-123456',\n * author: 'alice',\n * permlink: 'my-post',\n * notes: 'Violates community guidelines',\n * mute: true\n * });\n *\n * // Unmute a post\n * mutePostMutation.mutate({\n * community: 'hive-123456',\n * author: 'alice',\n * permlink: 'my-post',\n * notes: 'Resolved after editing',\n * mute: false\n * });\n * ```\n */\nexport function useMutePost(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<MutePostPayload>(\n [\"communities\", \"mutePost\"],\n username,\n ({ community, author, permlink, notes, mute }) => [\n buildMutePostOp(username!, community, author, permlink, notes, mute)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n const queriesToInvalidate: any[] = [\n // Invalidate specific post cache to update mute status\n QueryKeys.posts.entry(`/@${variables.author}/${variables.permlink}`),\n // Invalidate community data\n [\"community\", \"single\", variables.community],\n // Invalidate community feed/posts (matches all sort orders, limits, observers)\n {\n predicate: (query: any) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key[0] === \"posts\" &&\n key[1] === \"posts-ranked\" &&\n key[3] === variables.community\n );\n }\n }\n ];\n await auth.adapter.invalidateQueries(queriesToInvalidate);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, getQueryClient, QueryKeys } from \"@/modules/core\";\nimport { buildSetRoleOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Community, CommunityTeam } from \"../types\";\n\n/**\n * Payload for setting a user's role in a community.\n */\nexport interface SetCommunityRolePayload {\n /** Account to set role for */\n account: string;\n /** Role name (e.g., \"admin\", \"mod\", \"member\", \"guest\") */\n role: string;\n}\n\n/**\n * React Query mutation hook for setting a user's role in a community.\n *\n * This mutation broadcasts a setRole operation to the Hive blockchain,\n * updating the role of a community member. Only users with appropriate\n * permissions (community owner/admin) can set roles.\n *\n * @param community - Community name (e.g., \"hive-123456\")\n * @param username - The username setting the role (required for broadcast, must have permission)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates community cache to refetch updated team member list\n *\n * **Operation Details:**\n * - Uses custom_json operation with id \"community\"\n * - Action: [\"setRole\", {\"community\": \"hive-123456\", \"account\": \"user\", \"role\": \"mod\"}]\n * - Authority: Posting key\n *\n * **Role Types:**\n * - \"owner\" - Community owner (full permissions)\n * - \"admin\" - Administrator (can manage settings and team)\n * - \"mod\" - Moderator (can mute posts/users)\n * - \"member\" - Regular member (no special permissions)\n * - \"guest\" - Remove user from team (empty string also works)\n *\n * @example\n * ```typescript\n * const setRoleMutation = useSetCommunityRole('hive-123456', username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Set a user as moderator\n * setRoleMutation.mutate({\n * account: 'alice',\n * role: 'mod'\n * });\n *\n * // Remove a user from the team\n * setRoleMutation.mutate({\n * account: 'bob',\n * role: 'guest'\n * });\n * ```\n */\nexport function useSetCommunityRole(\n community: string,\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<SetCommunityRolePayload>(\n [\"communities\", \"set-role\", community],\n username,\n ({ account, role }) => [\n buildSetRoleOp(username!, community, account, role)\n ],\n async (_result: any, variables) => {\n // Optimistic team update in community cache\n // Query key is [\"community\",\"single\",name,observer] — observer varies, so use predicate\n const qc = getQueryClient();\n qc.setQueriesData<Community>(\n { queryKey: QueryKeys.communities.singlePrefix(community) },\n (prev) => {\n if (!prev) return prev;\n const team: CommunityTeam = [...(prev.team ?? [])];\n const idx = team.findIndex(([name]) => name === variables.account);\n if (idx >= 0) {\n team[idx] = [team[idx][0], variables.role, team[idx][2] ?? \"\"];\n } else {\n team.push([variables.account, variables.role, \"\"]);\n }\n return { ...prev, team };\n }\n );\n\n // Cache invalidation — prefix-match all community single queries + context for affected user\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n [...QueryKeys.communities.singlePrefix(community)],\n QueryKeys.communities.context(variables.account, community)\n ]);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, getQueryClient, QueryKeys } from \"@/modules/core\";\nimport { buildUpdateCommunityOp, type CommunityProps } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Community } from \"../types\";\n\n/**\n * Payload for updating community properties.\n * Matches the CommunityProps interface from builders.\n */\nexport type UpdateCommunityPayload = CommunityProps;\n\n/**\n * React Query mutation hook for updating community properties.\n *\n * This mutation broadcasts an updateProps operation to the Hive blockchain,\n * modifying the community's metadata and settings. Only community admins\n * can update community properties.\n *\n * @param community - Community name (e.g., \"hive-123456\")\n * @param username - The username updating the community (required for broadcast, must be admin)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates community cache to refetch updated properties\n *\n * **Operation Details:**\n * - Uses custom_json operation with id \"community\"\n * - Action: [\"updateProps\", {\"community\": \"hive-123456\", \"props\": {...}}]\n * - Authority: Posting key\n *\n * **Properties:**\n * - title - Community display title\n * - about - Short description/tagline\n * - lang - Primary language code (e.g., \"en\")\n * - description - Full community description (markdown supported)\n * - flag_text - Custom text shown when flagging posts\n * - is_nsfw - Whether community contains NSFW content\n *\n * @example\n * ```typescript\n * const updateMutation = useUpdateCommunity('hive-123456', username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Update community properties\n * updateMutation.mutate({\n * title: 'My Awesome Community',\n * about: 'A place for awesome people',\n * lang: 'en',\n * description: '# Welcome\\nThis is our community description',\n * flag_text: 'Please explain why this content violates our rules',\n * is_nsfw: false\n * });\n * ```\n */\nexport function useUpdateCommunity(\n community: string,\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<UpdateCommunityPayload>(\n [\"communities\", \"update\", community],\n username,\n (props) => [\n buildUpdateCommunityOp(username!, community, props)\n ],\n async (_result: any, variables) => {\n // Optimistic property merge in community cache\n // Query key is [\"community\",\"single\",name,observer] — observer varies, so use predicate\n const qc = getQueryClient();\n qc.setQueriesData<Community>(\n { queryKey: QueryKeys.communities.singlePrefix(community) },\n (prev) => {\n if (!prev) return prev;\n return { ...prev, ...(variables as unknown as Partial<Community>) };\n }\n );\n\n // Cache invalidation — prefix-match all community single queries\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n [...QueryKeys.communities.singlePrefix(community)]\n ]);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildCommunityRegistrationOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for community rewards registration.\n */\nexport interface CommunityRewardsRegisterPayload {\n /** Community account name (usually the community creator's account) */\n name: string;\n}\n\n/**\n * React Query mutation hook for registering to receive community rewards.\n *\n * This mutation broadcasts a custom_json operation to register a community\n * account to receive Ecency Points rewards for community activity.\n *\n * @param username - The username registering for community rewards (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates community cache to update registration status\n * - Invalidates points balance to reflect potential initial rewards\n *\n * **Operation Details:**\n * - Uses custom_json operation with id \"ecency_registration\"\n * - JSON: {\"name\": \"communityname\"}\n * - Authority: Active key (required for registration)\n *\n * **Purpose:**\n * - Enables communities to receive Ecency Points for activity\n * - One-time registration per community\n * - Can only be done by the community owner/creator\n *\n * @example\n * ```typescript\n * const registerMutation = useRegisterCommunityRewards(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Register community for rewards\n * registerMutation.mutate({\n * name: 'hive-123456'\n * });\n * ```\n */\nexport function useRegisterCommunityRewards(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<CommunityRewardsRegisterPayload>(\n [\"communities\", \"registerRewards\"],\n username,\n ({ name }) => [\n buildCommunityRegistrationOp(name)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n // Invalidate community cache to update registration status\n [...QueryKeys.communities.singlePrefix(variables.name)],\n // Invalidate points balance\n [\"points\", username],\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildPinPostOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface PinPostPayload {\n community: string;\n account: string;\n permlink: string;\n pin: boolean;\n}\n\nexport function usePinPost(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<PinPostPayload>(\n [\"communities\", \"pin-post\"],\n username,\n ({ community, account, permlink, pin }) => [\n buildPinPostOp(username!, community, account, permlink, pin)\n ],\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.posts.entry(`/@${variables.account}/${variables.permlink}`),\n [...QueryKeys.communities.singlePrefix(variables.community)],\n ]);\n }\n },\n auth\n );\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { Communities } from \"../types\";\n\nexport function getCommunitiesQueryOptions(\n sort: string,\n query?: string,\n limit = 100,\n observer: string | undefined = undefined,\n enabled = true\n) {\n return queryOptions({\n queryKey: QueryKeys.communities.list(sort, query ?? \"\", limit),\n enabled,\n queryFn: async () => {\n const response = await CONFIG.hiveClient.call(\n \"bridge\",\n \"list_communities\",\n {\n last: \"\",\n limit,\n sort: sort === \"hot\" ? \"rank\" : sort,\n query: query ? query : null,\n observer,\n }\n );\n return (\n response\n ? sort === \"hot\"\n ? response.sort(() => Math.random() - 0.5)\n : response\n : []\n ) as Communities;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { CommunityRole } from \"../types\";\n\nexport function getCommunityContextQueryOptions(\n username: string | undefined,\n communityName: string | undefined\n) {\n return queryOptions({\n queryKey: QueryKeys.communities.context(username!, communityName!),\n enabled: !!username && !!communityName,\n queryFn: async () => {\n const response = await CONFIG.hiveClient.call(\n \"bridge\",\n \"get_community_context\",\n {\n account: username,\n name: communityName,\n }\n );\n\n return {\n role: response?.role ?? \"guest\",\n subscribed: response?.subscribed ?? false,\n } satisfies {\n role: CommunityRole;\n subscribed: boolean;\n };\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { Community } from \"../types/community\";\nimport { getCommunity } from \"@/modules/bridge\";\nimport { QueryKeys } from \"@/modules/core\";\n\nexport function getCommunityQueryOptions(\n name: string | undefined,\n observer: string | undefined = \"\",\n enabled = true\n) {\n return queryOptions({\n queryKey: QueryKeys.communities.single(name, observer),\n enabled: enabled && !!name,\n queryFn: async () => getCommunity(name ?? \"\", observer) as Promise<Community | null>,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Subscription } from \"../types\";\n\n/**\n * Get list of subscribers for a community\n *\n * @param communityName - The community name (e.g., \"hive-123456\")\n */\nexport function getCommunitySubscribersQueryOptions(communityName: string) {\n return queryOptions({\n queryKey: QueryKeys.communities.subscribers(communityName),\n queryFn: async () => {\n const response = await CONFIG.hiveClient.call(\"bridge\", \"list_subscribers\", {\n community: communityName,\n });\n return (response as Subscription[] | null) ?? [];\n },\n staleTime: 60000,\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { AccountNotification } from \"../types\";\n\ntype NotifPage = AccountNotification[];\ntype NotifCursor = number | null;\n\n/**\n * Get account notifications for a community (bridge API)\n *\n * @param account - The account/community name\n * @param limit - Number of notifications per page\n */\nexport function getAccountNotificationsInfiniteQueryOptions(\n account: string,\n limit: number\n) {\n return infiniteQueryOptions<NotifPage, Error, NotifPage, (string | number)[], NotifCursor>({\n queryKey: QueryKeys.communities.accountNotifications(account, limit),\n initialPageParam: null as NotifCursor,\n\n queryFn: async ({ pageParam }: { pageParam: NotifCursor }) => {\n try {\n const response = await CONFIG.hiveClient.call(\"bridge\", \"account_notifications\", {\n account,\n limit,\n last_id: pageParam ?? undefined,\n });\n return (response as AccountNotification[] | null) ?? [];\n } catch {\n return [];\n }\n },\n\n getNextPageParam: (lastPage: NotifPage): NotifCursor =>\n lastPage?.length > 0 ? lastPage[lastPage.length - 1].id : null,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { RewardedCommunity } from \"../types/rewarded-community\";\n\nexport function getRewardedCommunitiesQueryOptions() {\n return queryOptions({\n queryKey: QueryKeys.communities.rewarded(),\n queryFn: async () => {\n const response = await fetch(\n CONFIG.privateApiHost + \"/private-api/rewarded-communities\",\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch rewarded communities: ${response.status}`);\n }\n\n return response.json() as Promise<RewardedCommunity[]>;\n },\n });\n}\n","export enum ROLES {\n OWNER = \"owner\",\n ADMIN = \"admin\",\n MOD = \"mod\",\n MEMBER = \"member\",\n GUEST = \"guest\",\n MUTED = \"muted\",\n}\n\nexport const roleMap: Record<string, string[]> = {\n [ROLES.OWNER]: [\n ROLES.ADMIN,\n ROLES.MOD,\n ROLES.MEMBER,\n ROLES.GUEST,\n ROLES.MUTED,\n ],\n [ROLES.ADMIN]: [ROLES.MOD, ROLES.MEMBER, ROLES.GUEST, ROLES.MUTED],\n [ROLES.MOD]: [ROLES.MEMBER, ROLES.GUEST, ROLES.MUTED],\n};\n\nexport type CommunityTeam = Array<Array<string>>;\nexport type CommunityRole = (typeof ROLES)[keyof typeof ROLES]; // \"owner\" | \"member\" | ...\nexport type CommunityType = \"Topic\" | \"Journal\" | \"Council\";\n\nexport interface Community {\n about: string;\n admins?: string[];\n avatar_url: string;\n created_at: string;\n description: string;\n flag_text: string;\n id: number;\n is_nsfw: boolean;\n lang: string;\n name: string;\n num_authors: number;\n num_pending: number;\n subscribers: number;\n sum_pending: number;\n settings?: any;\n team: CommunityTeam;\n title: string;\n type_id: number;\n}\n\nexport type Communities = Community[];\n","import { CommunityRole, CommunityType, ROLES } from \"../types\";\n\nexport function getCommunityType(name: string, type_id: number): CommunityType {\n if (name.startsWith(\"hive-3\") || type_id === 3) return \"Council\";\n if (name.startsWith(\"hive-2\") || type_id === 2) return \"Journal\";\n return \"Topic\";\n}\n\nexport function getCommunityPermissions({\n communityType,\n userRole,\n subscribed,\n}: {\n communityType: CommunityType;\n userRole: CommunityRole;\n subscribed: boolean;\n}) {\n const canPost = (() => {\n if (userRole === ROLES.MUTED) return false;\n\n if (communityType === \"Topic\") return true;\n\n // Journal & Council\n return [ROLES.OWNER, ROLES.ADMIN, ROLES.MOD, ROLES.MEMBER].includes(\n userRole\n );\n })();\n\n const canComment = (() => {\n if (userRole === ROLES.MUTED) return false;\n\n switch (communityType) {\n case \"Topic\":\n return true;\n case \"Journal\":\n return userRole !== ROLES.GUEST || subscribed;\n case \"Council\":\n return canPost;\n }\n })();\n\n const isModerator = [ROLES.OWNER, ROLES.ADMIN, ROLES.MOD].includes(userRole);\n\n return {\n canPost,\n canComment,\n isModerator,\n };\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport function getNotificationsUnreadCountQueryOptions(\n activeUsername: string | undefined,\n code: string | undefined\n) {\n return queryOptions({\n queryKey: QueryKeys.notifications.unreadCount(activeUsername),\n queryFn: async () => {\n if (!code) {\n return 0;\n }\n const response = await fetch(\n `${CONFIG.privateApiHost}/private-api/notifications/unread`,\n {\n method: \"POST\",\n body: JSON.stringify({ code }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n const data = (await response.json()) as { count: number };\n return data.count;\n },\n enabled: !!activeUsername && !!code,\n initialData: 0,\n refetchInterval: 60000,\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { NotificationFilter } from \"../enums\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { ApiNotification } from \"../types\";\n\nexport function getNotificationsInfiniteQueryOptions(\n activeUsername: string | undefined,\n code: string | undefined,\n filter: NotificationFilter | undefined = undefined\n) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.notifications.list(activeUsername, filter),\n queryFn: async ({ pageParam }) => {\n if (!code) {\n return [];\n }\n const data = {\n code,\n filter,\n since: pageParam,\n user: undefined,\n };\n\n const response = await fetch(\n CONFIG.privateApiHost + \"/private-api/notifications\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n }\n );\n\n return response.json() as Promise<ApiNotification[]>;\n },\n enabled: !!activeUsername && !!code,\n initialData: { pages: [], pageParams: [] },\n initialPageParam: \"\",\n getNextPageParam: (lastPage) => lastPage?.[lastPage.length - 1]?.id ?? \"\",\n refetchOnMount: true,\n });\n}\n","export enum NotificationFilter {\n VOTES = \"rvotes\",\n MENTIONS = \"mentions\",\n FAVORITES = \"nfavorites\",\n BOOKMARKS = \"nbookmarks\",\n FOLLOWS = \"follows\",\n REPLIES = \"replies\",\n REBLOGS = \"reblogs\",\n TRANSFERS = \"transfers\",\n DELEGATIONS = \"delegations\",\n}\n","export enum NotifyTypes {\n VOTE = 1,\n MENTION = 2,\n FOLLOW = 3,\n COMMENT = 4,\n RE_BLOG = 5,\n TRANSFERS = 6,\n FAVORITES = 13,\n BOOKMARKS = 15,\n ALLOW_NOTIFY = \"ALLOW_NOTIFY\",\n}\n\nexport const ALL_NOTIFY_TYPES = [\n NotifyTypes.VOTE,\n NotifyTypes.MENTION,\n NotifyTypes.FOLLOW,\n NotifyTypes.COMMENT,\n NotifyTypes.RE_BLOG,\n NotifyTypes.TRANSFERS,\n NotifyTypes.FAVORITES,\n NotifyTypes.BOOKMARKS,\n] as const;\n\nexport enum NotificationViewType {\n ALL = \"All\",\n UNREAD = \"Unread\",\n READ = \"Read\",\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { ApiNotificationSetting } from \"../types\";\nimport { NotifyTypes } from \"../enums\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\n\nexport function getNotificationsSettingsQueryOptions(\n activeUsername: string | undefined,\n code: string | undefined,\n initialMuted?: boolean\n) {\n return queryOptions({\n queryKey: QueryKeys.notifications.settings(activeUsername),\n queryFn: async () => {\n let token = activeUsername + \"-web\";\n if (!code) {\n throw new Error(\"Missing access token\");\n }\n const response = await fetch(\n CONFIG.privateApiHost + \"/private-api/detail-device\",\n {\n body: JSON.stringify({\n code,\n username: activeUsername,\n token,\n }),\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n if (!response.ok) {\n throw new Error(`Failed to fetch notification settings: ${response.status}`);\n }\n return response.json() as Promise<ApiNotificationSetting>;\n },\n enabled: !!activeUsername && !!code,\n refetchOnMount: false,\n initialData: () => {\n return {\n status: 0,\n system: \"web\",\n allows_notify: 0,\n notify_types: initialMuted\n ? []\n : ([\n NotifyTypes.COMMENT,\n NotifyTypes.FOLLOW,\n NotifyTypes.MENTION,\n NotifyTypes.FAVORITES,\n NotifyTypes.BOOKMARKS,\n NotifyTypes.VOTE,\n NotifyTypes.RE_BLOG,\n NotifyTypes.TRANSFERS,\n ] as number[]),\n } as ApiNotificationSetting;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { Announcement } from \"../types/announcement\";\n\nexport function getAnnouncementsQueryOptions() {\n return queryOptions({\n queryKey: QueryKeys.notifications.announcements(),\n queryFn: async () => {\n const response = await fetch(CONFIG.privateApiHost + \"/private-api/announcements\", {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch announcements: ${response.status}`);\n }\n\n const data = await response.json() as Announcement[];\n return data || [];\n },\n staleTime: 3_600_000,\n });\n}\n","import { useMutation, QueryKey } from \"@tanstack/react-query\";\nimport { getQueryClient } from \"@/modules/core\";\nimport { markNotifications } from \"@/modules/private-api/requests\";\nimport { ApiNotification } from \"../types\";\n\n/**\n * Hook to mark notifications as read with optimistic updates\n *\n * @param username - Current user's username\n * @param code - Access token for authentication\n * @param onSuccess - Optional callback on successful mutation, receives unread count\n * @param onError - Optional callback on error\n *\n * @returns Mutation hook that accepts { id?: string }\n *\n * @example\n * ```typescript\n * const markAsRead = useMarkNotificationsRead(username, code);\n *\n * // Mark specific notification\n * markAsRead.mutate({ id: \"notification-id\" });\n *\n * // Mark all notifications (omit id)\n * markAsRead.mutate({});\n * ```\n */\nexport function useMarkNotificationsRead(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: (unreadCount?: number) => void,\n onError?: (e: Error) => void\n) {\n const queryClient = getQueryClient();\n\n return useMutation({\n mutationKey: [\"notifications\", \"mark-read\", username],\n\n mutationFn: async ({ id }: { id?: string }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Notifications] – missing auth for markNotifications\");\n }\n return markNotifications(code, id);\n },\n\n // Optimistic update: Immediately mark notifications as read in cache\n onMutate: async ({ id }: { id?: string }) => {\n // Cancel any outgoing refetches to prevent overwriting optimistic update\n await queryClient.cancelQueries({ queryKey: [\"notifications\"] });\n\n // Snapshot current state for rollback\n const previousNotifications: Array<[QueryKey, ApiNotification[] | undefined]> = [];\n\n // Get all notification queries from cache\n const queriesData = queryClient.getQueriesData<ApiNotification[]>({\n queryKey: [\"notifications\"],\n });\n\n // Update each cached notification query\n queriesData.forEach(([queryKey, data]) => {\n if (data) {\n // Save previous state\n previousNotifications.push([queryKey, data]);\n\n // Optimistically update: mark as read\n const updatedData = data.map((item) => ({\n ...item,\n // If specific ID provided: mark only that notification\n // If no ID (mark all): mark ALL notifications\n read: (!id || id === item.id ? 1 : item.read) as 0 | 1,\n }));\n\n queryClient.setQueryData(queryKey, updatedData);\n }\n });\n\n // Return context for rollback\n return { previousNotifications };\n },\n\n onSuccess: (response, variables) => {\n // Extract unread count from response if available\n const unreadCount = typeof response === \"object\" && response !== null\n ? (response as { unread?: number }).unread\n : undefined;\n\n onSuccess?.(unreadCount);\n\n // If marking all notifications, invalidate to ensure fresh data\n if (!variables.id) {\n queryClient.invalidateQueries({\n queryKey: [\"notifications\"],\n });\n }\n },\n\n // Rollback optimistic update on error\n onError: (error, _variables, context) => {\n // Restore previous state\n if (context?.previousNotifications) {\n context.previousNotifications.forEach(([queryKey, data]) => {\n queryClient.setQueryData(queryKey, data);\n });\n }\n\n onError?.(error as Error);\n },\n\n // Always refetch after mutation settles\n onSettled: () => {\n queryClient.invalidateQueries({\n queryKey: [\"notifications\"],\n });\n },\n });\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildSetLastReadOps } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface SetLastReadPayload {\n date?: string;\n}\n\nexport function useSetLastRead(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<SetLastReadPayload>(\n [\"notifications\", \"set-last-read\"],\n username,\n ({ date }) => buildSetLastReadOps(username!, date),\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.notifications.unreadCount(username),\n ]);\n }\n },\n auth\n );\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { Proposal } from \"../types\";\n\n/**\n * Get a single proposal by ID\n */\nexport function getProposalQueryOptions(id: number) {\n return queryOptions({\n queryKey: [\"proposals\", \"proposal\", id],\n queryFn: async () => {\n const r = await CONFIG.hiveClient.call(\"condenser_api\", \"find_proposals\", [[id]]);\n const proposal = r[0];\n\n // Determine proposal status based on dates\n if (new Date(proposal.start_date) < new Date() && new Date(proposal.end_date) >= new Date()) {\n proposal.status = \"active\";\n } else if (new Date(proposal.end_date) < new Date()) {\n proposal.status = \"expired\";\n } else {\n proposal.status = \"inactive\";\n }\n\n return proposal as Proposal;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { Proposal } from \"../types\";\n\n/**\n * Get all proposals, sorted with expired proposals at the end\n */\nexport function getProposalsQueryOptions() {\n return queryOptions({\n queryKey: [\"proposals\", \"list\"],\n queryFn: async () => {\n const response = (await CONFIG.hiveClient.call(\"database_api\", \"list_proposals\", {\n start: [-1],\n limit: 500,\n order: \"by_total_votes\",\n order_direction: \"descending\",\n status: \"all\",\n })) as { proposals: Proposal[] };\n\n const proposals = response.proposals;\n const expired = proposals.filter((x) => x.status === \"expired\");\n const others = proposals.filter((x) => x.status !== \"expired\");\n\n return [...others, ...expired];\n },\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { ProposalVote } from \"../types\";\nimport { FullAccount } from \"@/modules/accounts\";\nimport { parseAccounts } from \"@/modules/accounts/utils\";\n\n// One page = array of enriched vote rows\nexport type ProposalVoteRow = {\n id: number;\n voter: string;\n voterAccount: FullAccount;\n};\n\ntype Cursor = string; // we paginate by last voter name\n\n/**\n * Get proposal votes with pagination and enriched voter account data\n *\n * @param proposalId - The proposal ID\n * @param voter - Starting voter for pagination\n * @param limit - Number of votes per page\n */\nexport function getProposalVotesInfiniteQueryOptions(\n proposalId: number,\n voter: string,\n limit: number\n) {\n return infiniteQueryOptions<ProposalVoteRow[], Error, ProposalVoteRow[], (string | number)[], Cursor>({\n queryKey: [\"proposals\", \"votes\", proposalId, voter, limit],\n initialPageParam: voter as Cursor,\n refetchOnMount: true,\n staleTime: 0, // Always refetch on mount\n\n queryFn: async ({ pageParam }: { pageParam: Cursor }) => {\n const startParam = pageParam ?? voter;\n\n const response = (await CONFIG.hiveClient.call(\"condenser_api\", \"list_proposal_votes\", [\n [proposalId, startParam],\n limit,\n \"by_proposal_voter\",\n ])) as ProposalVote[];\n\n const list = response\n .filter((x) => x.proposal?.proposal_id === proposalId)\n .map((x) => ({ id: x.id, voter: x.voter }));\n\n const rawAccounts = await CONFIG.hiveClient.database.getAccounts(list.map((l) => l.voter));\n const accounts = parseAccounts(rawAccounts);\n\n const page: ProposalVoteRow[] = list.map((i) => ({\n ...i,\n voterAccount: accounts.find((a) => i.voter === a.name)!,\n }));\n\n return page;\n },\n\n getNextPageParam: (lastPage: ProposalVoteRow[]): Cursor | undefined => {\n const last = lastPage?.[lastPage.length - 1];\n return last?.voter ?? undefined;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { ProposalVote } from \"../types\";\n\n/**\n * Fetches ALL proposal votes for a specific user in a single query.\n * Much more efficient than querying each proposal individually.\n * Uses \"by_voter_proposal\" order to get all votes by a user.\n */\nexport function getUserProposalVotesQueryOptions(voter: string) {\n return queryOptions({\n queryKey: [\"proposals\", \"votes\", \"by-user\", voter],\n enabled: !!voter && voter !== \"\",\n staleTime: 60 * 1000, // Cache for 1 minute\n queryFn: async () => {\n if (!voter || voter === \"\") {\n return [];\n }\n\n const response = (await CONFIG.hiveClient.call(\"database_api\", \"list_proposal_votes\", {\n start: [voter],\n limit: 1000,\n order: \"by_voter_proposal\",\n order_direction: \"ascending\",\n status: \"votable\",\n })) as { proposal_votes: ProposalVote[] };\n\n // Filter to only this user's votes (API might return votes after this user alphabetically)\n const userVotes = (response.proposal_votes || []).filter((vote) => vote.voter === voter);\n\n return userVotes;\n },\n });\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildProposalVoteOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for voting on proposals.\n */\nexport interface ProposalVotePayload {\n /** Array of proposal IDs to vote on */\n proposalIds: number[];\n /** True to approve, false to disapprove */\n approve: boolean;\n}\n\n/**\n * React Query mutation hook for voting on Hive proposals.\n *\n * This mutation broadcasts an update_proposal_votes operation to vote on\n * one or more proposals in the Hive Decentralized Fund (HDF).\n *\n * @param username - The username voting on proposals (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Records activity (type 150) if adapter.recordActivity is available\n * - Invalidates proposal list cache to show updated vote status\n * - Invalidates voter's proposal votes cache\n *\n * **Multiple Proposals:**\n * - You can vote on multiple proposals in a single transaction\n * - All proposals receive the same vote (approve or disapprove)\n * - Proposal IDs are integers, not strings\n *\n * **Vote Types:**\n * - approve: true - Vote in favor of the proposal(s)\n * - approve: false - Remove your vote from the proposal(s)\n *\n * @example\n * ```typescript\n * const proposalVoteMutation = useProposalVote(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Approve a single proposal\n * proposalVoteMutation.mutate({\n * proposalIds: [123],\n * approve: true\n * });\n *\n * // Approve multiple proposals\n * proposalVoteMutation.mutate({\n * proposalIds: [123, 124, 125],\n * approve: true\n * });\n *\n * // Remove vote from a proposal\n * proposalVoteMutation.mutate({\n * proposalIds: [123],\n * approve: false\n * });\n * ```\n */\nexport function useProposalVote(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<ProposalVotePayload>(\n [\"proposals\", \"vote\"],\n username,\n ({ proposalIds, approve }) => [\n buildProposalVoteOp(username!, proposalIds, approve)\n ],\n async (result: any) => {\n // Wrap post-broadcast side-effects in try-catch to prevent propagating errors\n try {\n // Activity tracking\n if (auth?.adapter?.recordActivity && result?.block_num && result?.id) {\n await auth.adapter.recordActivity(150, result.block_num, result.id);\n }\n\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.proposals.list(),\n QueryKeys.proposals.votesByUser(username!)\n ]);\n }\n } catch (error) {\n // Log but don't rethrow - don't fail mutation due to side-effect errors\n console.warn('[useProposalVote] Post-broadcast side-effect failed:', error);\n }\n },\n auth,\n 'active' // Use active authority for proposal votes (required by blockchain)\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildProposalCreateOp, type ProposalCreatePayload } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport { type ProposalCreatePayload };\n\nexport function useProposalCreate(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<ProposalCreatePayload>(\n [\"proposals\", \"create\"],\n username,\n (payload) => [\n buildProposalCreateOp(username!, payload)\n ],\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.proposals.list(),\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { DelegatedVestingShare } from \"../types\";\n\n/**\n * Get vesting delegations for an account with infinite scroll support\n *\n * @param username - The account username\n * @param limit - Maximum number of results per page (default: 50)\n */\nexport function getVestingDelegationsQueryOptions(\n username?: string,\n limit = 50\n) {\n return infiniteQueryOptions({\n queryKey: [\"wallet\", \"vesting-delegations\", username, limit],\n initialPageParam: \"\" as string,\n queryFn: async ({ pageParam }: { pageParam: string }) => {\n // Request one extra item on subsequent pages to handle inclusive cursor\n const fetchLimit = pageParam ? limit + 1 : limit;\n\n const result = await CONFIG.hiveClient.database.call(\"get_vesting_delegations\", [\n username,\n pageParam || \"\",\n fetchLimit,\n ]) as DelegatedVestingShare[];\n\n // Filter out duplicate first item on subsequent pages\n // Hive API is inclusive of the 'from' cursor\n if (pageParam && result.length > 0 && result[0]?.delegatee === pageParam) {\n // Return at most limit items after removing the duplicate\n return result.slice(1, limit + 1);\n }\n\n return result;\n },\n getNextPageParam: (lastPage: DelegatedVestingShare[]) => {\n // If we got fewer results than limit, we've reached the end\n if (!lastPage || lastPage.length < limit) {\n return undefined;\n }\n\n // Return the last delegatee as cursor for next page\n const lastDelegation = lastPage[lastPage.length - 1];\n return lastDelegation?.delegatee;\n },\n enabled: !!username,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { ConversionRequest } from \"../types\";\n\n/**\n * Get HBD to HIVE conversion requests for an account\n *\n * @param account - The account username\n */\nexport function getConversionRequestsQueryOptions(account: string) {\n return queryOptions({\n queryKey: [\"wallet\", \"conversion-requests\", account],\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_conversion_requests\", [\n account,\n ]) as Promise<ConversionRequest[]>,\n select: (data) => data.sort((a, b) => a.requestid - b.requestid),\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { CollateralizedConversionRequest } from \"../types\";\n\n/**\n * Get collateralized HIVE to HBD conversion requests for an account\n *\n * @param account - The account username\n */\nexport function getCollateralizedConversionRequestsQueryOptions(account: string) {\n return queryOptions({\n queryKey: [\"wallet\", \"collateralized-conversion-requests\", account],\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_collateralized_conversion_requests\", [\n account,\n ]) as Promise<CollateralizedConversionRequest[]>,\n select: (data) => data.sort((a, b) => a.requestid - b.requestid),\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { SavingsWithdrawRequest } from \"../types\";\n\n/**\n * Get pending savings withdrawal requests for an account\n *\n * @param account - The account username\n */\nexport function getSavingsWithdrawFromQueryOptions(account: string) {\n return queryOptions({\n queryKey: [\"wallet\", \"savings-withdraw\", account],\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_savings_withdraw_from\", [\n account,\n ]) as Promise<SavingsWithdrawRequest[]>,\n select: (data) => data.sort((a, b) => a.request_id - b.request_id),\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { WithdrawRoute } from \"../types\";\n\n/**\n * Get power down (vesting withdrawal) routes for an account\n *\n * @param account - The account username\n */\nexport function getWithdrawRoutesQueryOptions(account: string) {\n return queryOptions({\n queryKey: [\"wallet\", \"withdraw-routes\", account],\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_withdraw_routes\", [\n account,\n \"outgoing\",\n ]) as Promise<WithdrawRoute[]>,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { OpenOrdersData } from \"../types\";\n\n/**\n * Get open market orders for an account\n *\n * @param user - The account username\n */\nexport function getOpenOrdersQueryOptions(user: string) {\n return queryOptions({\n queryKey: [\"wallet\", \"open-orders\", user],\n queryFn: () =>\n CONFIG.hiveClient.call(\"condenser_api\", \"get_open_orders\", [\n user,\n ]) as Promise<OpenOrdersData[]>,\n select: (data) => data.sort((a, b) => a.orderid - b.orderid),\n enabled: !!user,\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { RcDirectDelegation, RcDirectDelegationsResponse } from \"../types/rc-direct-delegation\";\n\ntype RcPage = RcDirectDelegation[];\ntype RcCursor = string | null;\n\n/**\n * Get outgoing RC delegations for an account\n *\n * @param username - Account name to get delegations for\n * @param limit - Number of delegations per page\n */\nexport function getOutgoingRcDelegationsInfiniteQueryOptions(username: string, limit = 100) {\n return infiniteQueryOptions<RcPage, Error, RcPage, (string | number)[], RcCursor>({\n queryKey: [\"wallet\", \"outgoing-rc-delegations\", username, limit],\n initialPageParam: null as RcCursor,\n\n queryFn: async ({ pageParam }: { pageParam: RcCursor }) => {\n const response = await CONFIG.hiveClient\n .call(\"rc_api\", \"list_rc_direct_delegations\", {\n start: [username, pageParam ?? \"\"],\n limit,\n })\n .then((r: any) => r as RcDirectDelegationsResponse);\n\n let delegations: RcDirectDelegation[] = response.rc_direct_delegations || [];\n\n // Filter out the starting delegation when paginating\n if (pageParam) {\n delegations = delegations.filter((delegation) => delegation.to !== pageParam);\n }\n\n return delegations;\n },\n\n getNextPageParam: (lastPage: RcPage): RcCursor =>\n lastPage.length === limit ? lastPage[lastPage.length - 1].to : null,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { IncomingRcResponse } from \"../types\";\n\nexport function getIncomingRcQueryOptions(username: string | undefined) {\n return queryOptions({\n queryKey: [\"wallet\", \"incoming-rc\", username],\n enabled: !!username,\n queryFn: async (): Promise<IncomingRcResponse> => {\n if (!username) {\n throw new Error(\"[SDK][Wallet] - Missing username for incoming RC\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `${CONFIG.privateApiHost}/private-api/received-rc/${username}`\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch incoming RC: ${response.status}`);\n }\n\n return response.json() as Promise<IncomingRcResponse>;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { ReceivedVestingShare } from \"../types/received-vesting-share\";\n\nexport function getReceivedVestingSharesQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"wallet\", \"received-vesting-shares\", username],\n queryFn: async () => {\n const response = await fetch(\n CONFIG.privateApiHost + `/private-api/received-vesting/${username}`\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch received vesting shares: ${response.status}`);\n }\n\n const data = (await response.json()) as { list: ReceivedVestingShare[] };\n return data.list;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { RecurrentTransfer } from \"../types\";\n\n/**\n * Get recurrent transfers for an account\n *\n * @param username - The account username\n */\nexport function getRecurrentTransfersQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"wallet\", \"recurrent-transfers\", username],\n queryFn: () =>\n CONFIG.hiveClient.call(\"condenser_api\", \"find_recurrent_transfers\", [\n username,\n ]) as Promise<RecurrentTransfer[]>,\n enabled: !!username,\n });\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\ntype PortfolioLayer = \"points\" | \"hive\" | \"chain\" | \"spk\" | \"engine\";\n\ninterface TokenAction {\n id: string;\n [key: string]: unknown;\n}\n\nexport interface PortfolioWalletItem {\n name: string;\n symbol: string;\n layer: PortfolioLayer;\n balance: number;\n fiatRate: number;\n currency: string;\n precision: number;\n address?: string;\n error?: string;\n pendingRewards?: number;\n pendingRewardsFiat?: number;\n liquid?: number;\n liquidFiat?: number;\n savings?: number;\n savingsFiat?: number;\n staked?: number;\n stakedFiat?: number;\n iconUrl?: string;\n actions?: TokenAction[];\n extraData?: Array<{ dataKey: string; value: any }>;\n apr?: number;\n}\n\nexport interface PortfolioResponse {\n username: string;\n currency?: string;\n wallets: PortfolioWalletItem[];\n}\n\nfunction normalizeString(value: unknown): string | undefined {\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n\n return undefined;\n}\n\nfunction normalizeNumber(value: unknown): number | undefined {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) {\n return undefined;\n }\n\n const direct = Number.parseFloat(trimmed);\n if (Number.isFinite(direct)) {\n return direct;\n }\n\n const sanitized = trimmed.replace(/,/g, \"\");\n const match = sanitized.match(/[-+]?\\d+(?:\\.\\d+)?/);\n if (match) {\n const parsed = Number.parseFloat(match[0]);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n }\n\n return undefined;\n}\n\nfunction parseToken(rawToken: unknown): PortfolioWalletItem | undefined {\n if (!rawToken || typeof rawToken !== \"object\") {\n return undefined;\n }\n\n const token = rawToken as Record<string, unknown>;\n\n // Portfolio v2 returns well-defined PortfolioItem structure\n return {\n name: normalizeString(token.name) ?? \"\",\n symbol: normalizeString(token.symbol) ?? \"\",\n layer: (normalizeString(token.layer) ?? \"hive\") as PortfolioLayer,\n balance: normalizeNumber(token.balance) ?? 0,\n fiatRate: normalizeNumber(token.fiatRate) ?? 0,\n currency: normalizeString(token.currency) ?? \"usd\",\n precision: normalizeNumber(token.precision) ?? 3,\n address: normalizeString(token.address),\n error: normalizeString(token.error),\n pendingRewards: normalizeNumber(token.pendingRewards),\n pendingRewardsFiat: normalizeNumber(token.pendingRewardsFiat),\n liquid: normalizeNumber(token.liquid),\n liquidFiat: normalizeNumber(token.liquidFiat),\n savings: normalizeNumber(token.savings),\n savingsFiat: normalizeNumber(token.savingsFiat),\n staked: normalizeNumber(token.staked),\n stakedFiat: normalizeNumber(token.stakedFiat),\n iconUrl: normalizeString(token.iconUrl),\n actions: (token.actions ?? []) as TokenAction[],\n extraData: (token.extraData ?? []) as Array<{ dataKey: string; value: any }>,\n apr: normalizeNumber(token.apr),\n };\n}\n\nfunction extractTokens(payload: unknown): unknown[] {\n if (!payload || typeof payload !== \"object\") {\n return [];\n }\n\n const containers = [payload];\n const record = payload as Record<string, unknown>;\n if (record.data && typeof record.data === \"object\") {\n containers.push(record.data as Record<string, unknown>);\n }\n if (record.result && typeof record.result === \"object\") {\n containers.push(record.result as Record<string, unknown>);\n }\n if (record.portfolio && typeof record.portfolio === \"object\") {\n containers.push(record.portfolio as Record<string, unknown>);\n }\n\n for (const container of containers) {\n if (Array.isArray(container)) {\n return container;\n }\n\n if (container && typeof container === \"object\") {\n for (const key of [\n \"wallets\",\n \"tokens\",\n \"assets\",\n \"items\",\n \"portfolio\",\n \"balances\",\n ]) {\n const value = (container as Record<string, unknown>)[key];\n if (Array.isArray(value)) {\n return value;\n }\n }\n }\n }\n\n return [];\n}\n\nfunction resolveUsername(payload: unknown): string | undefined {\n if (!payload || typeof payload !== \"object\") {\n return undefined;\n }\n\n const record = payload as Record<string, unknown>;\n return (\n normalizeString(record.username) ??\n normalizeString(record.name) ??\n normalizeString(record.account)\n );\n}\n\n/**\n * Get portfolio query options for fetching user's wallet balances across all layers\n * @param username - Hive username\n * @param currency - Fiat currency code (default: \"usd\")\n * @param onlyEnabled - Only return enabled tokens (default: true)\n * @returns TanStack Query options for portfolio data\n */\nexport function getPortfolioQueryOptions(\n username: string,\n currency: string = \"usd\",\n onlyEnabled: boolean = true\n) {\n return queryOptions({\n queryKey: [\n \"wallet\",\n \"portfolio\",\n \"v2\",\n username,\n onlyEnabled ? \"only-enabled\" : \"all\",\n currency,\n ],\n enabled: Boolean(username),\n staleTime: 60000,\n refetchInterval: 120000,\n queryFn: async (): Promise<PortfolioResponse> => {\n if (!username) {\n throw new Error(\"[SDK][Wallet] – username is required\");\n }\n\n if (CONFIG.privateApiHost === undefined || CONFIG.privateApiHost === null) {\n throw new Error(\n \"[SDK][Wallet] – privateApiHost isn't configured for portfolio\"\n );\n }\n\n const endpoint = `${CONFIG.privateApiHost}/wallet-api/portfolio-v2`;\n const response = await fetch(endpoint, {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ username, onlyEnabled, currency }),\n });\n\n if (!response.ok) {\n throw new Error(\n `[SDK][Wallet] – Portfolio request failed (${response.status})`\n );\n }\n\n const payload = (await response.json()) as unknown;\n const tokens = extractTokens(payload)\n .map((item) => parseToken(item))\n .filter((item): item is PortfolioWalletItem => Boolean(item));\n\n if (!tokens.length) {\n throw new Error(\n \"[SDK][Wallet] – Portfolio payload contained no tokens\"\n );\n }\n\n return {\n username: resolveUsername(payload) ?? username,\n currency: normalizeString(\n (payload as Record<string, unknown> | undefined)?.fiatCurrency ??\n (payload as Record<string, unknown> | undefined)?.currency\n )?.toUpperCase(),\n wallets: tokens,\n };\n },\n });\n}\n","import { CONFIG } from \"@/modules/core/config\";\nimport type { DynamicProps } from \"@/modules/core\";\nimport { getAccountFullQueryOptions } from \"@/modules/accounts\";\nimport { getDynamicPropsQueryOptions, getQueryClient } from \"@/modules/core\";\nimport type { FullAccount } from \"@/modules/accounts\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { GeneralAssetInfo } from \"../types\";\nimport { parseAsset } from \"@/modules/core/utils\";\n\nexport function getHiveAssetGeneralInfoQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"hive\", \"general-info\", username],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n await getQueryClient().prefetchQuery(getDynamicPropsQueryOptions());\n await getQueryClient().prefetchQuery(\n getAccountFullQueryOptions(username)\n );\n\n const dynamicProps = getQueryClient().getQueryData<DynamicProps>(\n getDynamicPropsQueryOptions().queryKey\n );\n const accountData = getQueryClient().getQueryData<FullAccount>(\n getAccountFullQueryOptions(username).queryKey\n );\n\n const marketTicker = (await CONFIG.hiveClient\n .call(\"condenser_api\", \"get_ticker\", [])\n .catch(() => undefined)) as { latest?: string } | undefined;\n\n const marketPrice = Number.parseFloat(marketTicker?.latest ?? \"\");\n\n if (!accountData) {\n return {\n name: \"HIVE\",\n title: \"Hive\",\n price: Number.isFinite(marketPrice)\n ? marketPrice\n : dynamicProps\n ? dynamicProps.base / dynamicProps.quote\n : 0,\n accountBalance: 0,\n } satisfies GeneralAssetInfo;\n }\n\n const liquidBalance = parseAsset(accountData.balance).amount;\n const savingsBalance = parseAsset(accountData.savings_balance).amount;\n\n return {\n name: \"HIVE\",\n title: \"Hive\",\n price: Number.isFinite(marketPrice)\n ? marketPrice\n : dynamicProps\n ? dynamicProps.base / dynamicProps.quote\n : 0,\n accountBalance: liquidBalance + savingsBalance,\n parts: [\n {\n name: \"current\",\n balance: liquidBalance,\n },\n {\n name: \"savings\",\n balance: savingsBalance,\n },\n ],\n } satisfies GeneralAssetInfo;\n },\n });\n}\n","import type { DynamicProps } from \"@/modules/core\";\nimport { getAccountFullQueryOptions } from \"@/modules/accounts\";\nimport { getDynamicPropsQueryOptions, getQueryClient } from \"@/modules/core\";\nimport type { FullAccount } from \"@/modules/accounts\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { GeneralAssetInfo } from \"../types\";\nimport { parseAsset } from \"@/modules/core/utils\";\n\nexport function getHbdAssetGeneralInfoQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"hbd\", \"general-info\", username],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n await getQueryClient().prefetchQuery(getDynamicPropsQueryOptions());\n await getQueryClient().prefetchQuery(\n getAccountFullQueryOptions(username)\n );\n\n const accountData = getQueryClient().getQueryData<FullAccount>(\n getAccountFullQueryOptions(username).queryKey\n );\n const dynamicProps = getQueryClient().getQueryData<DynamicProps>(\n getDynamicPropsQueryOptions().queryKey\n );\n\n const price = 1;\n\n if (!accountData) {\n return {\n name: \"HBD\",\n title: \"Hive Dollar\",\n price,\n accountBalance: 0,\n };\n }\n\n return {\n name: \"HBD\",\n title: \"Hive Dollar\",\n price,\n accountBalance:\n parseAsset(accountData.hbd_balance).amount +\n parseAsset(accountData?.savings_hbd_balance).amount,\n apr: ((dynamicProps?.hbdInterestRate ?? 0) / 100).toFixed(3),\n parts: [\n {\n name: \"current\",\n balance: parseAsset(accountData.hbd_balance).amount,\n },\n {\n name: \"savings\",\n balance: parseAsset(accountData.savings_hbd_balance).amount,\n },\n ],\n } satisfies GeneralAssetInfo;\n },\n });\n}\n","import { CONFIG } from \"@/modules/core/config\";\nimport type { DynamicProps } from \"@/modules/core\";\nimport { getAccountFullQueryOptions } from \"@/modules/accounts\";\nimport { getDynamicPropsQueryOptions, getQueryClient } from \"@/modules/core\";\nimport type { FullAccount } from \"@/modules/accounts\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { GeneralAssetInfo } from \"../types\";\nimport { isEmptyDate, parseAsset, vestsToHp } from \"@/modules/core/utils\";\n\nfunction getAPR(dynamicProps: DynamicProps) {\n const initialInflationRate = 9.5;\n const initialBlock = 7000000;\n const decreaseRate = 250000;\n const decreasePercentPerIncrement = 0.01;\n\n const headBlock = dynamicProps.headBlock;\n const deltaBlocks = headBlock - initialBlock;\n const decreaseIncrements = deltaBlocks / decreaseRate;\n\n let currentInflationRate =\n initialInflationRate - decreaseIncrements * decreasePercentPerIncrement;\n\n if (currentInflationRate < 0.95) {\n currentInflationRate = 0.95;\n }\n\n const vestingRewardPercent = dynamicProps.vestingRewardPercent / 10000;\n const virtualSupply = dynamicProps.virtualSupply;\n const totalVestingFunds = dynamicProps.totalVestingFund;\n\n return (\n (virtualSupply * currentInflationRate * vestingRewardPercent) /\n totalVestingFunds\n ).toFixed(3);\n}\n\nexport function getHivePowerAssetGeneralInfoQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-power\", \"general-info\", username],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n await getQueryClient().prefetchQuery(getDynamicPropsQueryOptions());\n await getQueryClient().prefetchQuery(\n getAccountFullQueryOptions(username)\n );\n\n const dynamicProps = getQueryClient().getQueryData<DynamicProps>(\n getDynamicPropsQueryOptions().queryKey\n );\n const accountData = getQueryClient().getQueryData<FullAccount>(\n getAccountFullQueryOptions(username).queryKey\n );\n\n if (!dynamicProps || !accountData) {\n return {\n name: \"HP\",\n title: \"Hive Power\",\n price: 0,\n accountBalance: 0,\n };\n }\n\n const marketTicker = (await CONFIG.hiveClient\n .call(\"condenser_api\", \"get_ticker\", [])\n .catch(() => undefined)) as { latest?: string } | undefined;\n\n const marketPrice = Number.parseFloat(marketTicker?.latest ?? \"\");\n const price = Number.isFinite(marketPrice)\n ? marketPrice\n : dynamicProps.base / dynamicProps.quote;\n\n const vestingShares = parseAsset(accountData.vesting_shares).amount;\n const delegatedVests = parseAsset(\n accountData.delegated_vesting_shares\n ).amount;\n const receivedVests = parseAsset(\n accountData.received_vesting_shares\n ).amount;\n const withdrawRateVests = parseAsset(\n accountData.vesting_withdraw_rate\n ).amount;\n const remainingToWithdrawVests = Math.max(\n (Number(accountData.to_withdraw) - Number(accountData.withdrawn)) /\n 1e6,\n 0\n );\n const nextWithdrawalVests = !isEmptyDate(\n accountData.next_vesting_withdrawal\n )\n ? Math.min(withdrawRateVests, remainingToWithdrawVests)\n : 0;\n\n const hpBalance = +vestsToHp(\n vestingShares,\n dynamicProps.hivePerMVests\n ).toFixed(3);\n const outgoingDelegationsHp = +vestsToHp(\n delegatedVests,\n dynamicProps.hivePerMVests\n ).toFixed(3);\n const incomingDelegationsHp = +vestsToHp(\n receivedVests,\n dynamicProps.hivePerMVests\n ).toFixed(3);\n const pendingPowerDownHp = +vestsToHp(\n remainingToWithdrawVests,\n dynamicProps.hivePerMVests\n ).toFixed(3);\n const nextPowerDownHp = +vestsToHp(\n nextWithdrawalVests,\n dynamicProps.hivePerMVests\n ).toFixed(3);\n const totalBalance = Math.max(hpBalance - pendingPowerDownHp, 0);\n const availableHp = Math.max(hpBalance - outgoingDelegationsHp, 0);\n\n return {\n name: \"HP\",\n title: \"Hive Power\",\n price,\n accountBalance: +totalBalance.toFixed(3),\n apr: getAPR(dynamicProps),\n parts: [\n {\n name: \"hp_balance\",\n balance: hpBalance,\n },\n {\n name: \"available\",\n balance: +availableHp.toFixed(3),\n },\n {\n name: \"outgoing_delegations\",\n balance: outgoingDelegationsHp,\n },\n {\n name: \"incoming_delegations\",\n balance: incomingDelegationsHp,\n },\n ...(pendingPowerDownHp > 0\n ? [\n {\n name: \"pending_power_down\",\n balance: +pendingPowerDownHp.toFixed(3),\n },\n ]\n : []),\n ...(nextPowerDownHp > 0 && nextPowerDownHp !== pendingPowerDownHp\n ? [\n {\n name: \"next_power_down\",\n balance: +nextPowerDownHp.toFixed(3),\n },\n ]\n : []),\n ],\n } satisfies GeneralAssetInfo;\n },\n });\n}\n","import { utils } from \"@hiveio/dhive\";\nimport { HiveOperationGroup } from \"../types\";\nconst ops = utils.operationOrders;\n\nexport const HIVE_ACCOUNT_OPERATION_GROUPS: Record<\n HiveOperationGroup,\n number[]\n> = {\n transfers: [\n ops.transfer,\n ops.transfer_to_savings,\n ops.transfer_from_savings,\n ops.cancel_transfer_from_savings,\n ops.recurrent_transfer,\n ops.fill_recurrent_transfer,\n ops.escrow_transfer,\n ops.fill_recurrent_transfer,\n ],\n \"market-orders\": [\n ops.fill_convert_request,\n ops.fill_order,\n ops.fill_collateralized_convert_request,\n ops.limit_order_create2,\n ops.limit_order_create,\n ops.limit_order_cancel,\n ],\n interests: [ops.interest],\n \"stake-operations\": [\n ops.return_vesting_delegation,\n ops.withdraw_vesting,\n ops.transfer_to_vesting,\n ops.set_withdraw_vesting_route,\n ops.update_proposal_votes,\n ops.fill_vesting_withdraw,\n ops.account_witness_proxy,\n ops.delegate_vesting_shares,\n ],\n rewards: [\n ops.author_reward,\n ops.curation_reward,\n ops.producer_reward,\n ops.claim_reward_balance,\n ops.comment_benefactor_reward,\n ops.liquidity_reward,\n ops.proposal_pay,\n ],\n \"\": [],\n};\n","import { utils } from \"@hiveio/dhive\";\nimport type { HiveOperationName } from \"../types\";\n\nexport const HIVE_OPERATION_LIST = Object.keys(\n utils.operationOrders\n) as HiveOperationName[];\n","import { utils } from \"@hiveio/dhive\";\nimport type { HiveOperationName } from \"../types\";\n\nconst operationOrders = utils.operationOrders as Record<\n HiveOperationName,\n number\n>;\n\nexport const HIVE_OPERATION_ORDERS = operationOrders;\n\nexport const HIVE_OPERATION_NAME_BY_ID: Record<number, HiveOperationName> =\n Object.entries(operationOrders).reduce((acc, [name, id]) => {\n acc[id] = name as HiveOperationName;\n return acc;\n }, {} as Record<number, HiveOperationName>);\n","import { CONFIG } from \"@/modules/core/config\";\nimport { utils } from \"@hiveio/dhive\";\nimport { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { HIVE_ACCOUNT_OPERATION_GROUPS } from \"../consts\";\nimport type {\n AuthorReward,\n ClaimRewardBalance,\n HiveOperationFilter,\n HiveOperationFilterKey,\n HiveOperationFilterValue,\n HiveOperationGroup,\n HiveOperationName,\n} from \"../types\";\nimport type { HiveTransaction } from \"../types\";\nimport { parseAsset } from \"@/modules/core/utils\";\n\nconst operationOrders = utils.operationOrders;\n\nfunction isHiveOperationName(value: string): value is HiveOperationName {\n return Object.prototype.hasOwnProperty.call(operationOrders, value);\n}\n\nexport function resolveHiveOperationFilters(filters: HiveOperationFilter): {\n filterKey: HiveOperationFilterKey;\n filterArgs: any[];\n} {\n const rawValues: HiveOperationFilterValue[] = Array.isArray(filters)\n ? filters\n : [filters];\n\n const hasAll = rawValues.includes(\"\" as HiveOperationGroup);\n\n const uniqueValues = Array.from(\n new Set(\n rawValues.filter(\n (value): value is HiveOperationFilterValue =>\n value !== undefined &&\n value !== null &&\n value !== (\"\" as HiveOperationGroup)\n )\n )\n );\n\n const filterKey: HiveOperationFilterKey =\n hasAll || uniqueValues.length === 0\n ? \"all\"\n : uniqueValues\n .map((value) => value.toString())\n .sort()\n .join(\"|\");\n\n const operationIds = new Set<number>();\n\n if (!hasAll) {\n uniqueValues.forEach((value) => {\n if (value in HIVE_ACCOUNT_OPERATION_GROUPS) {\n HIVE_ACCOUNT_OPERATION_GROUPS[value as HiveOperationGroup].forEach(\n (id) => operationIds.add(id)\n );\n return;\n }\n\n if (isHiveOperationName(value)) {\n operationIds.add(operationOrders[value]);\n }\n });\n }\n\n const filterArgs = makeBitMaskFilter(Array.from(operationIds));\n\n return {\n filterKey,\n filterArgs,\n };\n}\n\nfunction makeBitMaskFilter(allowedOperations: number[]) {\n let low = 0n;\n let high = 0n;\n\n allowedOperations.forEach((operation) => {\n if (operation < 64) {\n low |= 1n << BigInt(operation);\n } else {\n high |= 1n << BigInt(operation - 64);\n }\n });\n\n return [\n low !== 0n ? low.toString() : null,\n high !== 0n ? high.toString() : null,\n ];\n}\n\nexport function getHiveAssetTransactionsQueryOptions(\n username: string | undefined,\n limit = 20,\n filters: HiveOperationFilter = []\n) {\n const { filterArgs, filterKey } = resolveHiveOperationFilters(filters);\n\n return infiniteQueryOptions<HiveTransaction[]>({\n queryKey: [\"assets\", \"hive\", \"transactions\", username, limit, filterKey],\n initialData: { pages: [], pageParams: [] },\n initialPageParam: -1,\n getNextPageParam: (lastPage, __) =>\n lastPage ? +(lastPage[lastPage.length - 1]?.num ?? 0) - 1 : -1,\n\n queryFn: async ({ pageParam }) => {\n const response = await CONFIG.hiveClient.call(\n \"condenser_api\",\n \"get_account_history\",\n [username, pageParam, limit, ...filterArgs]\n );\n\n return response.map(\n (x: any) =>\n ({\n num: x[0],\n type: x[1].op[0],\n timestamp: x[1].timestamp,\n trx_id: x[1].trx_id,\n ...x[1].op[1],\n }) satisfies HiveTransaction\n );\n },\n select: ({ pages, pageParams }) => ({\n pageParams,\n pages: pages.map((page) =>\n page.filter((item) => {\n switch (item.type) {\n case \"author_reward\":\n case \"comment_benefactor_reward\":\n const hivePayout = parseAsset(\n (item as AuthorReward).hive_payout\n );\n return hivePayout.amount > 0;\n case \"transfer\":\n case \"transfer_to_savings\":\n case \"transfer_to_vesting\":\n case \"recurrent_transfer\":\n return parseAsset(item.amount).symbol === \"HIVE\";\n\n case \"transfer_from_savings\" as HiveOperationName:\n return parseAsset((item as any).amount).symbol === \"HIVE\";\n\n case \"fill_recurrent_transfer\":\n const asset = parseAsset(item.amount);\n return [\"HIVE\"].includes(asset.symbol);\n\n case \"claim_reward_balance\":\n const rewardHive = parseAsset(\n (item as ClaimRewardBalance).reward_hive\n );\n return rewardHive.amount > 0;\n\n case \"curation_reward\":\n case \"cancel_transfer_from_savings\":\n case \"fill_order\":\n case \"limit_order_create\":\n case \"limit_order_cancel\":\n case \"fill_convert_request\":\n case \"fill_collateralized_convert_request\":\n return true;\n\n case \"limit_order_create2\" as HiveOperationName:\n return true;\n default:\n return false;\n }\n })\n ),\n }),\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { parseAsset } from \"@/modules/core/utils\";\nimport type {\n AuthorReward,\n ClaimRewardBalance,\n HiveOperationFilter,\n HiveOperationName,\n} from \"../types\";\nimport type { HiveTransaction } from \"../types\";\nimport {\n getHiveAssetTransactionsQueryOptions,\n resolveHiveOperationFilters,\n} from \"./get-hive-asset-transactions-query-options\";\n\nexport function getHbdAssetTransactionsQueryOptions(\n username: string | undefined,\n limit = 20,\n filters: HiveOperationFilter = []\n) {\n const { filterKey } = resolveHiveOperationFilters(filters);\n\n return infiniteQueryOptions<HiveTransaction[]>({\n ...getHiveAssetTransactionsQueryOptions(username, limit, filters),\n queryKey: [\"assets\", \"hbd\", \"transactions\", username, limit, filterKey],\n select: ({ pages, pageParams }) => ({\n pageParams,\n pages: pages.map((page) =>\n page.filter((item) => {\n switch (item.type) {\n case \"author_reward\":\n case \"comment_benefactor_reward\":\n const hbdPayout = parseAsset(\n (item as AuthorReward).hbd_payout\n );\n return hbdPayout.amount > 0;\n\n case \"claim_reward_balance\":\n const rewardHbd = parseAsset(\n (item as ClaimRewardBalance).reward_hbd\n );\n return rewardHbd.amount > 0;\n\n case \"transfer\":\n case \"transfer_to_savings\":\n case \"transfer_to_vesting\":\n case \"recurrent_transfer\":\n return parseAsset(item.amount).symbol === \"HBD\";\n\n case \"transfer_from_savings\" as HiveOperationName:\n return parseAsset((item as any).amount).symbol === \"HBD\";\n\n case \"fill_recurrent_transfer\":\n const asset = parseAsset(item.amount);\n return [\"HBD\"].includes(asset.symbol);\n\n case \"cancel_transfer_from_savings\":\n case \"fill_order\":\n case \"limit_order_create\":\n case \"limit_order_cancel\":\n case \"fill_convert_request\":\n case \"fill_collateralized_convert_request\":\n case \"proposal_pay\":\n case \"interest\":\n return true;\n\n case \"limit_order_create2\" as HiveOperationName:\n return true;\n default:\n return false;\n }\n })\n ),\n }),\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { parseAsset } from \"@/modules/core/utils\";\nimport type {\n AuthorReward,\n ClaimRewardBalance,\n HiveOperationFilter,\n} from \"../types\";\nimport type { HiveTransaction } from \"../types\";\nimport {\n getHiveAssetTransactionsQueryOptions,\n resolveHiveOperationFilters,\n} from \"./get-hive-asset-transactions-query-options\";\n\nexport function getHivePowerAssetTransactionsQueryOptions(\n username: string | undefined,\n limit = 20,\n filters: HiveOperationFilter = []\n) {\n const { filterKey } = resolveHiveOperationFilters(filters);\n\n const userSelectedOperations = new Set<string>(\n Array.isArray(filters) ? filters : [filters]\n );\n const hasAllFilter =\n userSelectedOperations.has(\"\" as any) || userSelectedOperations.size === 0;\n\n return infiniteQueryOptions<HiveTransaction[]>({\n ...getHiveAssetTransactionsQueryOptions(username, limit, filters),\n queryKey: [\n \"assets\",\n \"hive-power\",\n \"transactions\",\n username,\n limit,\n filterKey,\n ],\n select: ({ pages, pageParams }) => ({\n pageParams,\n pages: pages.map((page) =>\n page.filter((item) => {\n switch (item.type) {\n case \"author_reward\":\n case \"comment_benefactor_reward\":\n const vestingPayout = parseAsset(\n (item as AuthorReward).vesting_payout\n );\n return vestingPayout.amount > 0;\n\n case \"claim_reward_balance\":\n const rewardVests = parseAsset(\n (item as ClaimRewardBalance).reward_vests\n );\n return rewardVests.amount > 0;\n\n case \"transfer_to_vesting\":\n return true;\n case \"transfer\":\n case \"transfer_to_savings\":\n case \"recurrent_transfer\":\n return [\"VESTS\", \"HP\"].includes(parseAsset(item.amount).symbol);\n\n case \"fill_recurrent_transfer\":\n const asset = parseAsset(item.amount);\n return [\"VESTS\", \"HP\"].includes(asset.symbol);\n\n case \"curation_reward\":\n case \"withdraw_vesting\":\n case \"delegate_vesting_shares\":\n case \"fill_vesting_withdraw\":\n case \"return_vesting_delegation\":\n case \"producer_reward\":\n case \"set_withdraw_vesting_route\":\n return true;\n default:\n return hasAllFilter || userSelectedOperations.has(item.type);\n }\n })\n ),\n }),\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport type { HiveMarketMetric } from \"../types\";\nimport { CONFIG } from \"@/modules/core/config\";\n\nfunction formatDate(date: Date): string {\n const pad = (n: number) => n.toString().padStart(2, \"0\");\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;\n}\n\nfunction subtractSeconds(date: Date, seconds: number): Date {\n return new Date(date.getTime() - seconds * 1000);\n}\n\nexport function getHiveAssetMetricQueryOptions(bucketSeconds = 86_400) {\n return infiniteQueryOptions({\n queryKey: [\"assets\", \"hive\", \"metrics\", bucketSeconds],\n queryFn: async ({ pageParam: [startDate, endDate] }) => {\n const apiData: HiveMarketMetric[] = await CONFIG.hiveClient.call(\n \"condenser_api\",\n \"get_market_history\",\n [bucketSeconds, formatDate(startDate), formatDate(endDate)]\n );\n\n return apiData.map(({ hive, non_hive, open }) => ({\n close: non_hive.close / hive.close,\n open: non_hive.open / hive.open,\n low: non_hive.low / hive.low,\n high: non_hive.high / hive.high,\n volume: hive.volume,\n time: new Date(open),\n }));\n },\n initialPageParam: [\n subtractSeconds(new Date(), Math.max(100 * bucketSeconds, 28_800)),\n new Date(),\n ],\n getNextPageParam: (_, __, [prevStartDate]) => [\n subtractSeconds(prevStartDate, Math.max(100 * bucketSeconds, 28_800)),\n subtractSeconds(prevStartDate, bucketSeconds),\n ],\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport type { WithdrawRoute } from \"../types\";\n\nexport function getHiveAssetWithdrawalRoutesQueryOptions(\n username: string | undefined\n) {\n return queryOptions({\n queryKey: [\"assets\", \"hive\", \"withdrawal-routes\", username],\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_withdraw_routes\", [\n username,\n \"outgoing\",\n ]) as Promise<WithdrawRoute[]>,\n enabled: !!username,\n });\n}\n","import { CONFIG } from \"@/modules/core/config\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { DelegatedVestingShare } from \"../types\";\n\nexport function getHivePowerDelegatesInfiniteQueryOptions(\n username: string,\n limit = 50\n) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-power\", \"delegates\", username],\n enabled: !!username,\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_vesting_delegations\", [\n username,\n \"\",\n limit,\n ]) as Promise<DelegatedVestingShare[]>,\n });\n}\n","import { CONFIG } from \"@/modules/core/config\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { ReceivedVestingShare } from \"../types\";\nimport { parseAsset } from \"@/modules/core/utils\";\n\nexport function getHivePowerDelegatingsQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-power\", \"delegatings\", username],\n queryFn: async () => {\n const response = await fetch(\n CONFIG.privateApiHost + `/private-api/received-vesting/${username}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n return (await response.json()).list as ReceivedVestingShare[];\n },\n select: (data) =>\n data.sort(\n (a, b) =>\n parseAsset(b.vesting_shares).amount -\n parseAsset(a.vesting_shares).amount\n ),\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { OrdersData } from \"../types\";\n\n/**\n * Get the internal HIVE/HBD market order book\n *\n * @param limit - Maximum number of orders to fetch (default: 500)\n */\nexport function getOrderBookQueryOptions(limit = 500) {\n return queryOptions({\n queryKey: [\"market\", \"order-book\", limit],\n queryFn: () =>\n CONFIG.hiveClient.call(\"condenser_api\", \"get_order_book\", [\n limit,\n ]) as Promise<OrdersData>,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { MarketStatistics } from \"../types\";\n\n/**\n * Get HIVE/HBD market statistics from the blockchain\n */\nexport function getMarketStatisticsQueryOptions() {\n return queryOptions({\n queryKey: [\"market\", \"statistics\"],\n queryFn: () =>\n CONFIG.hiveClient.call(\"condenser_api\", \"get_ticker\", []) as Promise<MarketStatistics>,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { MarketCandlestickDataItem } from \"../types\";\n\n/**\n * Get HIVE/HBD market history (candlestick data)\n *\n * @param seconds - Bucket size in seconds\n * @param startDate - Start date for the data\n * @param endDate - End date for the data\n */\nexport function getMarketHistoryQueryOptions(\n seconds: number,\n startDate: Date,\n endDate: Date\n) {\n const formatDate = (date: Date) => {\n return date.toISOString().replace(/\\.\\d{3}Z$/, \"\");\n };\n\n return queryOptions({\n queryKey: [\"market\", \"history\", seconds, startDate.getTime(), endDate.getTime()],\n queryFn: () =>\n CONFIG.hiveClient.call(\"condenser_api\", \"get_market_history\", [\n seconds,\n formatDate(startDate),\n formatDate(endDate),\n ]) as Promise<MarketCandlestickDataItem[]>,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { HiveHbdStats, MarketCandlestickDataItem, MarketStatistics } from \"../types\";\n\n/**\n * Get combined HIVE/HBD statistics including price, 24h change, and volume\n */\nexport function getHiveHbdStatsQueryOptions() {\n return queryOptions({\n queryKey: [\"market\", \"hive-hbd-stats\"],\n queryFn: async () => {\n // Get current market statistics\n const stats = (await CONFIG.hiveClient.call(\n \"condenser_api\",\n \"get_ticker\",\n []\n )) as MarketStatistics;\n\n // Get 24h market history\n const now = new Date();\n const oneDayAgo = new Date(now.getTime() - 86400000); // 24 hours ago\n\n const formatDate = (date: Date) => {\n return date.toISOString().replace(/\\.\\d{3}Z$/, \"\");\n };\n\n const dayChange = (await CONFIG.hiveClient.call(\n \"condenser_api\",\n \"get_market_history\",\n [86400, formatDate(oneDayAgo), formatDate(now)]\n )) as MarketCandlestickDataItem[];\n\n // Calculate stats\n const result: HiveHbdStats = {\n price: +stats.latest,\n close: dayChange[0] ? dayChange[0].non_hive.open / dayChange[0].hive.open : 0,\n high: dayChange[0] ? dayChange[0].non_hive.high / dayChange[0].hive.high : 0,\n low: dayChange[0] ? dayChange[0].non_hive.low / dayChange[0].hive.low : 0,\n percent: dayChange[0]\n ? 100 - ((dayChange[0].non_hive.open / dayChange[0].hive.open) * 100) / +stats.latest\n : 0,\n totalFromAsset: stats.hive_volume.split(\" \")[0],\n totalToAsset: stats.hbd_volume.split(\" \")[0],\n };\n\n return result;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { MarketData } from \"../types\";\nimport { getBoundFetch } from \"@/modules/core\";\n\n/**\n * Get market chart data from CoinGecko API\n *\n * @param coin - Coin ID (e.g., \"hive\", \"bitcoin\")\n * @param vsCurrency - Currency to compare against (e.g., \"usd\", \"eur\")\n * @param fromTs - From timestamp (Unix timestamp in seconds)\n * @param toTs - To timestamp (Unix timestamp in seconds)\n */\nexport function getMarketDataQueryOptions(\n coin: string,\n vsCurrency: string,\n fromTs: string,\n toTs: string\n) {\n return queryOptions({\n queryKey: [\"market\", \"data\", coin, vsCurrency, fromTs, toTs],\n queryFn: async ({ signal }) => {\n const fetchApi = getBoundFetch();\n const url = `https://api.coingecko.com/api/v3/coins/${coin}/market_chart/range?vs_currency=${vsCurrency}&from=${fromTs}&to=${toTs}`;\n\n const response = await fetchApi(url, { signal });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch market data: ${response.status}`);\n }\n\n return response.json() as Promise<MarketData>;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { OrdersDataItem } from \"../types\";\n\nfunction formatDate(date: Date) {\n return date.toISOString().replace(/\\.\\d{3}Z$/, \"\");\n}\n\nexport function getTradeHistoryQueryOptions(\n limit = 1000,\n startDate?: Date,\n endDate?: Date\n) {\n const end = endDate ?? new Date();\n const start =\n startDate ?? new Date(end.getTime() - 10 * 60 * 60 * 1000);\n\n return queryOptions({\n queryKey: [\"market\", \"trade-history\", limit, start.getTime(), end.getTime()],\n queryFn: () =>\n CONFIG.hiveClient.call(\"condenser_api\", \"get_trade_history\", [\n formatDate(start),\n formatDate(end),\n limit,\n ]) as Promise<OrdersDataItem[]>,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\n\nexport interface FeedHistoryItem {\n id: number;\n current_median_history: {\n base: string;\n quote: string;\n };\n market_median_history: {\n base: string;\n quote: string;\n };\n current_min_history: {\n base: string;\n quote: string;\n };\n current_max_history: {\n base: string;\n quote: string;\n };\n price_history: Array<{\n base: string;\n quote: string;\n }>;\n}\n\n/**\n * Get feed history from the blockchain\n * Returns price feed history including median prices\n */\nexport function getFeedHistoryQueryOptions() {\n return queryOptions({\n queryKey: [\"market\", \"feed-history\"],\n queryFn: async () => {\n try {\n const feedHistory = await CONFIG.hiveClient.database.call(\"get_feed_history\");\n return feedHistory as FeedHistoryItem;\n } catch (error) {\n throw error;\n }\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\n\nexport interface MedianHistoryPrice {\n base: string;\n quote: string;\n}\n\n/**\n * Get current median history price from the blockchain\n * Returns the current median price for HIVE/HBD conversion\n */\nexport function getCurrentMedianHistoryPriceQueryOptions() {\n return queryOptions({\n queryKey: [\"market\", \"current-median-history-price\"],\n queryFn: async () => {\n try {\n const price = await CONFIG.hiveClient.database.call(\n \"get_current_median_history_price\"\n );\n return price as MedianHistoryPrice;\n } catch (error) {\n throw error;\n }\n },\n });\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildLimitOrderCreateOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface LimitOrderCreatePayload {\n amountToSell: string;\n minToReceive: string;\n fillOrKill: boolean;\n expiration: string;\n orderId: number;\n}\n\nexport function useLimitOrderCreate(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<LimitOrderCreatePayload>(\n [\"market\", \"limit-order-create\"],\n username,\n (payload) => [\n buildLimitOrderCreateOp(\n username!,\n payload.amountToSell,\n payload.minToReceive,\n payload.fillOrKill,\n payload.expiration,\n payload.orderId\n )\n ],\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.wallet.openOrders(username!),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username],\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildLimitOrderCancelOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface LimitOrderCancelPayload {\n orderId: number;\n}\n\nexport function useLimitOrderCancel(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<LimitOrderCancelPayload>(\n [\"market\", \"limit-order-cancel\"],\n username,\n ({ orderId }) => [\n buildLimitOrderCancelOp(username!, orderId)\n ],\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.wallet.openOrders(username!),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username],\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { MarketData } from \"./types\";\nimport { CurrencyRates } from \"@/modules/private-api/types\";\n\ntype RequestError = Error & { status?: number; data?: unknown };\n\nasync function parseJsonResponse<T>(response: Response): Promise<T> {\n const data = (await response.json()) as T;\n if (!response.ok) {\n const error = new Error(`Request failed with status ${response.status}`) as RequestError;\n error.status = response.status;\n error.data = data;\n throw error;\n }\n\n return data;\n}\n\nexport async function getMarketData(\n coin: string,\n vsCurrency: string,\n fromTs: string,\n toTs: string\n): Promise<MarketData> {\n const fetchApi = getBoundFetch();\n const url = `https://api.coingecko.com/api/v3/coins/${coin}/market_chart/range?vs_currency=${vsCurrency}&from=${fromTs}&to=${toTs}`;\n const response = await fetchApi(url);\n return parseJsonResponse<MarketData>(response);\n}\n\nexport async function getCurrencyRate(cur: string): Promise<number> {\n if (cur === \"hbd\") {\n return 1;\n }\n\n const fetchApi = getBoundFetch();\n const url = `https://api.coingecko.com/api/v3/simple/price?ids=hive_dollar&vs_currencies=${cur}`;\n const response = await fetchApi(url);\n const data = await parseJsonResponse<{ hive_dollar: Record<string, number> }>(response);\n return data.hive_dollar[cur];\n}\n\nexport async function getCurrencyTokenRate(currency: string, token: string): Promise<number> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost +\n `/private-api/market-data/${currency === \"hbd\" ? \"usd\" : currency}/${token}`\n );\n\n return parseJsonResponse<number>(response);\n}\n\nexport async function getCurrencyRates(): Promise<CurrencyRates> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/market-data/latest\");\n return parseJsonResponse<CurrencyRates>(response);\n}\n\nexport async function getHivePrice(): Promise<{ hive: { usd: number } }> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n \"https://api.coingecko.com/api/v3/simple/price?ids=hive&vs_currencies=usd\"\n );\n return parseJsonResponse<{ hive: { usd: number } }>(response);\n}\n","import { ConfigManager, getBoundFetch } from \"@/modules/core\";\nimport type { HiveEngineOpenOrder } from \"./types\";\n\ntype EngineOrderBookEntry = {\n txId: string;\n timestamp: number;\n account: string;\n symbol: string;\n quantity: string;\n price: string;\n tokensLocked?: string;\n};\n\nconst ENGINE_RPC_HEADERS = { \"Content-type\": \"application/json\" };\n\nasync function engineRpc<T>(payload: Record<string, unknown>): Promise<T> {\n const fetchApi = getBoundFetch();\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const response = await fetchApi(`${baseUrl}/private-api/engine-api`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n headers: ENGINE_RPC_HEADERS,\n });\n\n if (!response.ok) {\n throw new Error(\n `[SDK][HiveEngine] – request failed with ${response.status}`\n );\n }\n\n const data = (await response.json()) as { result: T };\n return data.result;\n}\n\nasync function engineRpcSafe<T>(\n payload: Record<string, unknown>,\n fallback: T\n): Promise<T> {\n try {\n return await engineRpc<T>(payload);\n } catch (e) {\n return fallback;\n }\n}\n\nexport async function getHiveEngineOrderBook<T = EngineOrderBookEntry>(\n symbol: string,\n limit: number = 50\n): Promise<{ buy: T[]; sell: T[] }> {\n const baseParams = {\n jsonrpc: \"2.0\",\n method: \"find\",\n params: {\n contract: \"market\",\n query: { symbol },\n limit,\n offset: 0,\n },\n id: 1,\n };\n\n const [buy, sell] = await Promise.all([\n engineRpcSafe<T[]>(\n {\n ...baseParams,\n params: {\n ...baseParams.params,\n table: \"buyBook\",\n indexes: [{ index: \"price\", descending: true }],\n },\n },\n []\n ),\n engineRpcSafe<T[]>(\n {\n ...baseParams,\n params: {\n ...baseParams.params,\n table: \"sellBook\",\n indexes: [{ index: \"price\", descending: false }],\n },\n },\n []\n ),\n ]);\n\n const sortByPriceDesc = (items: T[]) =>\n items.sort((a, b) => {\n const left = Number((a as EngineOrderBookEntry).price ?? 0);\n const right = Number((b as EngineOrderBookEntry).price ?? 0);\n return right - left;\n });\n const sortByPriceAsc = (items: T[]) =>\n items.sort((a, b) => {\n const left = Number((a as EngineOrderBookEntry).price ?? 0);\n const right = Number((b as EngineOrderBookEntry).price ?? 0);\n return left - right;\n });\n\n return {\n buy: sortByPriceDesc(buy),\n sell: sortByPriceAsc(sell),\n };\n}\n\nexport async function getHiveEngineTradeHistory<T = Record<string, unknown>>(\n symbol: string,\n limit: number = 50\n): Promise<T[]> {\n return engineRpcSafe<T[]>(\n {\n jsonrpc: \"2.0\",\n method: \"find\",\n params: {\n contract: \"market\",\n table: \"tradesHistory\",\n query: { symbol },\n limit,\n offset: 0,\n indexes: [{ index: \"timestamp\", descending: true }],\n },\n id: 1,\n },\n []\n );\n}\n\nexport async function getHiveEngineOpenOrders<T = HiveEngineOpenOrder>(\n account: string,\n symbol: string,\n limit: number = 100\n): Promise<T[]> {\n const baseParams = {\n jsonrpc: \"2.0\",\n method: \"find\",\n params: {\n contract: \"market\",\n query: { symbol, account },\n limit,\n offset: 0,\n },\n id: 1,\n };\n\n const [buyRaw, sellRaw] = await Promise.all([\n engineRpcSafe<EngineOrderBookEntry[]>(\n {\n ...baseParams,\n params: {\n ...baseParams.params,\n table: \"buyBook\",\n indexes: [{ index: \"timestamp\", descending: true }],\n },\n },\n []\n ),\n engineRpcSafe<EngineOrderBookEntry[]>(\n {\n ...baseParams,\n params: {\n ...baseParams.params,\n table: \"sellBook\",\n indexes: [{ index: \"timestamp\", descending: true }],\n },\n },\n []\n ),\n ]);\n\n const formatTotal = (quantity: string, price: string) =>\n (Number(quantity || 0) * Number(price || 0)).toFixed(8);\n\n const buy: HiveEngineOpenOrder[] = buyRaw.map((order) => ({\n id: order.txId,\n type: \"buy\",\n account: order.account,\n symbol: order.symbol,\n quantity: order.quantity,\n price: order.price,\n total: order.tokensLocked ?? formatTotal(order.quantity, order.price),\n timestamp: Number(order.timestamp ?? 0),\n }));\n\n const sell: HiveEngineOpenOrder[] = sellRaw.map((order) => ({\n id: order.txId,\n type: \"sell\",\n account: order.account,\n symbol: order.symbol,\n quantity: order.quantity,\n price: order.price,\n total: formatTotal(order.quantity, order.price),\n timestamp: Number(order.timestamp ?? 0),\n }));\n\n return [...buy, ...sell].sort((a, b) => b.timestamp - a.timestamp) as T[];\n}\n\nexport async function getHiveEngineMetrics<T = Record<string, unknown>>(\n symbol?: string,\n account?: string\n): Promise<T[]> {\n return engineRpcSafe<T[]>(\n {\n jsonrpc: \"2.0\",\n method: \"find\",\n params: {\n contract: \"market\",\n table: \"metrics\",\n query: {\n ...(symbol ? { symbol } : {}),\n ...(account ? { account } : {}),\n },\n },\n id: 1,\n },\n []\n );\n}\n\nexport async function getHiveEngineTokensMarket<T = Record<string, unknown>>(\n account?: string,\n symbol?: string\n): Promise<T[]> {\n return getHiveEngineMetrics<T>(symbol, account);\n}\n\nexport async function getHiveEngineTokensBalances<T = Record<string, unknown>>(\n username: string\n): Promise<T[]> {\n return engineRpcSafe<T[]>(\n {\n jsonrpc: \"2.0\",\n method: \"find\",\n params: {\n contract: \"tokens\",\n table: \"balances\",\n query: {\n account: username,\n },\n },\n id: 1,\n },\n []\n );\n}\n\nexport async function getHiveEngineTokensMetadata<T = Record<string, unknown>>(\n tokens: string[]\n): Promise<T[]> {\n return engineRpcSafe<T[]>(\n {\n jsonrpc: \"2.0\",\n method: \"find\",\n params: {\n contract: \"tokens\",\n table: \"tokens\",\n query: {\n symbol: { $in: tokens },\n },\n },\n id: 2,\n },\n []\n );\n}\n\nexport async function getHiveEngineTokenTransactions<T = Record<string, unknown>>(\n username: string,\n symbol: string,\n limit: number,\n offset: number\n): Promise<T[]> {\n const fetchApi = getBoundFetch();\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const url = new URL(\"/private-api/engine-account-history\", baseUrl);\n url.searchParams.set(\"account\", username);\n url.searchParams.set(\"symbol\", symbol);\n url.searchParams.set(\"limit\", limit.toString());\n url.searchParams.set(\"offset\", offset.toString());\n\n const response = await fetchApi(url.toString(), {\n method: \"GET\",\n headers: { \"Content-type\": \"application/json\" },\n });\n\n if (!response.ok) {\n throw new Error(\n `[SDK][HiveEngine] – account history failed with ${response.status}`\n );\n }\n\n return (await response.json()) as T[];\n}\n\nexport async function getHiveEngineTokenMetrics<T = Record<string, unknown>>(\n symbol: string,\n interval = \"daily\"\n): Promise<T[]> {\n const fetchApi = getBoundFetch();\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const url = new URL(\"/private-api/engine-chart-api\", baseUrl);\n url.searchParams.set(\"symbol\", symbol);\n url.searchParams.set(\"interval\", interval);\n\n const response = await fetchApi(url.toString(), {\n headers: { \"Content-type\": \"application/json\" },\n });\n\n if (!response.ok) {\n throw new Error(\n `[SDK][HiveEngine] – chart failed with ${response.status}`\n );\n }\n\n return (await response.json()) as T[];\n}\n\nexport async function getHiveEngineUnclaimedRewards<T = Record<string, unknown>>(\n username: string\n): Promise<Record<string, T>> {\n const fetchApi = getBoundFetch();\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const response = await fetchApi(\n `${baseUrl}/private-api/engine-reward-api/${username}?hive=1`\n );\n\n if (!response.ok) {\n throw new Error(\n `[SDK][HiveEngine] – rewards failed with ${response.status}`\n );\n }\n\n return (await response.json()) as Record<string, T>;\n}\n","import { getHiveEngineTokensBalances } from \"../requests\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { HiveEngineTokenBalance } from \"../types\";\n\nexport function getHiveEngineTokensBalancesQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-engine\", \"balances\", username] as const,\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n return getHiveEngineTokensBalances<HiveEngineTokenBalance>(username);\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport type { HiveEngineMarketResponse } from \"../types\";\nimport { getHiveEngineTokensMarket } from \"../requests\";\n\nexport function getHiveEngineTokensMarketQueryOptions() {\n return queryOptions({\n queryKey: [\"assets\", \"hive-engine\", \"markets\"],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n return getHiveEngineTokensMarket<HiveEngineMarketResponse>();\n },\n });\n}\n","import { getHiveEngineTokensMetadata } from \"../requests\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { HiveEngineTokenMetadataResponse } from \"../types\";\n\nexport function getHiveEngineTokensMetadataQueryOptions(tokens: string[]) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-engine\", \"metadata-list\", tokens] as const,\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n return getHiveEngineTokensMetadata<HiveEngineTokenMetadataResponse>(tokens);\n },\n });\n}\n","import { getHiveEngineTokenTransactions } from \"../requests\";\nimport { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport type { HiveEngineTransaction } from \"../types\";\n\nexport function getHiveEngineTokenTransactionsQueryOptions(\n username: string | undefined,\n symbol: string,\n limit = 20\n) {\n return infiniteQueryOptions<HiveEngineTransaction[]>({\n queryKey: [\"assets\", \"hive-engine\", symbol, \"transactions\", username],\n enabled: !!symbol && !!username,\n initialPageParam: 0,\n getNextPageParam: (lastPage) => (lastPage?.length ?? 0) + limit,\n queryFn: async ({ pageParam }) => {\n if (!symbol || !username) {\n throw new Error(\n \"[SDK][HiveEngine] – token or username missed\"\n );\n }\n return getHiveEngineTokenTransactions<HiveEngineTransaction>(\n username,\n symbol,\n limit,\n pageParam as number\n );\n },\n });\n}\n","import { getHiveEngineTokenMetrics } from \"../requests\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { HiveEngineMetric } from \"../types\";\n\nexport function getHiveEngineTokensMetricsQueryOptions(\n symbol: string,\n interval = \"daily\"\n) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-engine\", symbol],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n return getHiveEngineTokenMetrics<HiveEngineMetric>(symbol, interval);\n },\n });\n}\n","import { getHiveEngineUnclaimedRewards } from \"../requests\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { HiveEngineTokenStatus } from \"../types\";\n\nexport function getHiveEngineUnclaimedRewardsQueryOptions(\n username: string | undefined\n) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-engine\", \"unclaimed\", username],\n staleTime: 60000,\n refetchInterval: 90000,\n enabled: !!username,\n queryFn: async () => {\n try {\n const data = await getHiveEngineUnclaimedRewards<HiveEngineTokenStatus>(\n username as string\n );\n return Object.values(data).filter(\n ({ pending_token }) => pending_token > 0\n );\n } catch (e) {\n return [];\n }\n },\n });\n}\n","import { getHiveEngineTokensMarket } from \"../requests\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { HiveEngineTokenInfo } from \"../types\";\n\nexport function getAllHiveEngineTokensQueryOptions(\n account?: string,\n symbol?: string\n) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-engine\", \"all-tokens\", account, symbol] as const,\n queryFn: async () => {\n return getHiveEngineTokensMarket<HiveEngineTokenInfo>(account, symbol);\n },\n });\n}\n","interface Options {\n fractionDigits?: number;\n prefix?: string;\n suffix?: string;\n}\n\nexport function formattedNumber(\n value: number | string,\n options: Options | undefined = undefined\n) {\n let opts: Options = {\n fractionDigits: 3,\n prefix: \"\",\n suffix: \"\",\n };\n\n if (options) {\n opts = { ...opts, ...options };\n }\n\n const { fractionDigits, prefix, suffix } = opts;\n\n let out = \"\";\n\n if (prefix) out += prefix + \" \";\n // turn too small values to zero. Bug: https://github.com/adamwdraper/Numeral-js/issues/563\n const av = Math.abs(parseFloat(value.toString())) < 0.0001 ? 0 : value;\n const num = typeof av === \"string\" ? parseFloat(av) : av;\n out += num.toLocaleString(\"en-US\", {\n minimumFractionDigits: fractionDigits,\n maximumFractionDigits: fractionDigits,\n useGrouping: true,\n });\n if (suffix) out += \" \" + suffix;\n\n return out;\n}\n","import { formattedNumber } from \"./formatted-number\";\n\ninterface HiveEngineTokenProps {\n symbol: string;\n name: string;\n icon: string;\n precision: number;\n stakingEnabled: boolean;\n delegationEnabled: boolean;\n balance: string;\n stake: string;\n delegationsIn: string;\n delegationsOut: string;\n usdValue: number;\n}\n\nexport class HiveEngineToken {\n symbol: string;\n name?: string;\n icon?: string;\n\n precision?: number;\n stakingEnabled?: boolean;\n delegationEnabled?: boolean;\n balance: number;\n stake: number;\n stakedBalance: number;\n delegationsIn: number;\n delegationsOut: number;\n usdValue: number;\n\n constructor(props: HiveEngineTokenProps) {\n this.symbol = props.symbol;\n this.name = props.name || \"\";\n this.icon = props.icon || \"\";\n\n this.precision = props.precision || 0;\n this.stakingEnabled = props.stakingEnabled || false;\n this.delegationEnabled = props.delegationEnabled || false;\n this.balance = parseFloat(props.balance) || 0;\n this.stake = parseFloat(props.stake) || 0;\n this.delegationsIn = parseFloat(props.delegationsIn) || 0;\n this.delegationsOut = parseFloat(props.delegationsOut) || 0;\n this.stakedBalance =\n this.stake + this.delegationsIn - this.delegationsOut;\n this.usdValue = props.usdValue;\n }\n\n hasDelegations = (): boolean => {\n if (!this.delegationEnabled) {\n return false;\n }\n\n return this.delegationsIn > 0 && this.delegationsOut > 0;\n };\n\n delegations = (): string => {\n if (!this.hasDelegations()) {\n return \"\";\n }\n\n return `(${formattedNumber(this.stake, {\n fractionDigits: this.precision,\n })} + ${formattedNumber(this.delegationsIn, {\n fractionDigits: this.precision,\n })} - ${formattedNumber(this.delegationsOut, {\n fractionDigits: this.precision,\n })})`;\n };\n\n staked = (): string => {\n if (!this.stakingEnabled) {\n return \"-\";\n }\n\n if (this.stakedBalance < 0.0001) {\n return this.stakedBalance.toString();\n }\n\n return formattedNumber(this.stakedBalance, {\n fractionDigits: this.precision,\n });\n };\n\n balanced = (): string => {\n if (this.balance < 0.0001) {\n return this.balance.toString();\n }\n\n return formattedNumber(this.balance, { fractionDigits: this.precision });\n };\n}\n","import { getHiveEngineTokensBalances, getHiveEngineTokensMetadata } from \"../requests\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type {\n HiveEngineTokenBalance,\n Token,\n TokenMetadata,\n HiveEngineTokenInfo,\n} from \"../types\";\nimport { HiveEngineToken } from \"../utils\";\n\ninterface DynamicProps {\n base: number;\n quote: number;\n}\n\nexport function getHiveEngineBalancesWithUsdQueryOptions(\n account: string,\n dynamicProps?: DynamicProps,\n allTokens?: HiveEngineTokenInfo[]\n) {\n return queryOptions({\n queryKey: [\n \"assets\",\n \"hive-engine\",\n \"balances-with-usd\",\n account,\n dynamicProps,\n allTokens,\n ] as const,\n queryFn: async () => {\n if (!account) {\n throw new Error(\"[HiveEngine] No account in a balances query\");\n }\n\n const balances = await getHiveEngineTokensBalances<HiveEngineTokenBalance>(account);\n\n const tokens = await getHiveEngineTokensMetadata<Token>(\n balances.map((t) => t.symbol)\n );\n\n const pricePerHive = dynamicProps\n ? dynamicProps.base / dynamicProps.quote\n : 0;\n const metrics: ReadonlyArray<HiveEngineTokenInfo> = Array.isArray(\n allTokens\n )\n ? allTokens\n : [];\n\n return balances.map((balance) => {\n const token = tokens.find((t) => t.symbol === balance.symbol);\n let tokenMetadata: TokenMetadata | undefined;\n\n if (token?.metadata) {\n try {\n tokenMetadata = JSON.parse(token.metadata) as TokenMetadata;\n } catch {\n tokenMetadata = undefined;\n }\n }\n\n const metric = metrics.find((m) => m.symbol === balance.symbol);\n const lastPrice = Number(metric?.lastPrice ?? \"0\");\n const balanceAmount = Number(balance.balance);\n\n const usdValue =\n balance.symbol === \"SWAP.HIVE\"\n ? pricePerHive * balanceAmount\n : lastPrice === 0\n ? 0\n : Number(\n (lastPrice * pricePerHive * balanceAmount).toFixed(10)\n );\n\n return new HiveEngineToken({\n symbol: balance.symbol,\n name: token?.name ?? balance.symbol,\n icon: tokenMetadata?.icon ?? \"\",\n precision: token?.precision ?? 0,\n stakingEnabled: token?.stakingEnabled ?? false,\n delegationEnabled: token?.delegationEnabled ?? false,\n balance: balance.balance,\n stake: balance.stake,\n delegationsIn: balance.delegationsIn,\n delegationsOut: balance.delegationsOut,\n usdValue,\n });\n });\n },\n enabled: !!account,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getQueryClient } from \"@/modules/core\";\nimport type { GeneralAssetInfo } from \"@/modules/wallet/types\";\nimport { getHiveEngineTokensMetadataQueryOptions } from \"./get-hive-engine-tokens-metadata-query-options\";\nimport { getHiveEngineTokensBalancesQueryOptions } from \"./get-hive-engine-tokens-balances-query-options\";\nimport { getHiveEngineTokensMarketQueryOptions } from \"./get-hive-engine-tokens-market-query-options\";\nimport { getHiveAssetGeneralInfoQueryOptions } from \"@/modules/wallet/queries/get-hive-asset-general-info-query-options\";\n\nexport function getHiveEngineTokenGeneralInfoQueryOptions(\n username?: string,\n symbol?: string\n) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-engine\", symbol, \"general-info\", username],\n enabled: !!symbol && !!username,\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n if (!symbol || !username) {\n throw new Error(\n \"[SDK][HiveEngine] – token or username missed\"\n );\n }\n const queryClient = getQueryClient();\n const hiveQuery = getHiveAssetGeneralInfoQueryOptions(username);\n await queryClient.prefetchQuery(hiveQuery);\n const hiveData = queryClient.getQueryData<GeneralAssetInfo>(\n hiveQuery.queryKey\n );\n\n const metadataList = await queryClient.ensureQueryData(\n getHiveEngineTokensMetadataQueryOptions([symbol])\n );\n\n const balanceList = await queryClient.ensureQueryData(\n getHiveEngineTokensBalancesQueryOptions(username)\n );\n\n const marketList = await queryClient.ensureQueryData(\n getHiveEngineTokensMarketQueryOptions()\n );\n\n const metadata = metadataList?.find((i) => i.symbol === symbol);\n const balance = balanceList?.find((i) => i.symbol === symbol);\n const market = marketList?.find((i) => i.symbol === symbol);\n\n const lastPrice = +(market?.lastPrice ?? \"0\");\n\n const liquidBalance = parseFloat(balance?.balance ?? \"0\");\n const stakedBalance = parseFloat(balance?.stake ?? \"0\");\n const unstakingBalance = parseFloat(balance?.pendingUnstake ?? \"0\");\n\n const parts: GeneralAssetInfo[\"parts\"] = [\n { name: \"liquid\", balance: liquidBalance },\n { name: \"staked\", balance: stakedBalance },\n ];\n\n if (unstakingBalance > 0) {\n parts.push({ name: \"unstaking\", balance: unstakingBalance });\n }\n\n return {\n name: symbol,\n title: metadata?.name ?? \"\",\n price: lastPrice === 0 ? 0 : Number(lastPrice * (hiveData?.price ?? 0)),\n accountBalance: liquidBalance + stakedBalance,\n layer: \"ENGINE\",\n parts,\n } satisfies GeneralAssetInfo;\n },\n });\n}\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\n\nexport async function getSpkWallet<T = Record<string, unknown>>(\n username: string\n): Promise<T> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(`${CONFIG.spkNode}/@${username}`);\n\n if (!response.ok) {\n throw new Error(`[SDK][SPK] – wallet failed with ${response.status}`);\n }\n\n return (await response.json()) as T;\n}\n\nexport async function getSpkMarkets<T = Record<string, unknown>>(): Promise<T> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(`${CONFIG.spkNode}/markets`);\n\n if (!response.ok) {\n throw new Error(`[SDK][SPK] – markets failed with ${response.status}`);\n }\n\n return (await response.json()) as T;\n}\n","import { getSpkWallet } from \"../requests\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { SpkApiWallet } from \"../types\";\n\nexport function getSpkWalletQueryOptions(username?: string) {\n return queryOptions({\n queryKey: [\"assets\", \"spk\", \"wallet\", username],\n queryFn: async () => {\n if (!username) {\n throw new Error(\"[SDK][SPK] – username wasn't provided\");\n }\n return getSpkWallet<SpkApiWallet>(username);\n },\n enabled: !!username,\n staleTime: 60000,\n refetchInterval: 90000,\n });\n}\n","import { getSpkMarkets } from \"../requests\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { SpkMarkets, TransformedSpkMarkets } from \"../types\";\n\nexport function getSpkMarketsQueryOptions() {\n return queryOptions({\n queryKey: [\"assets\", \"spk\", \"markets\"],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n const data = await getSpkMarkets<SpkMarkets>();\n\n return {\n list: Object.entries(data.markets.node).map(([name, node]) => ({\n name,\n status:\n node.lastGood >= data.head_block - 1200\n ? \"🟩\"\n : node.lastGood > data.head_block - 28800\n ? \"🟨\"\n : \"🟥\",\n })),\n raw: data,\n } satisfies TransformedSpkMarkets;\n },\n });\n}\n","import { SpkApiWallet } from \"../types\";\n\nexport function rewardSpk(data: SpkApiWallet, sstats: any) {\n let a = 0,\n b = 0,\n c = 0,\n t = 0,\n diff = data.head_block - data.spk_block;\n if (!data.spk_block) {\n return 0;\n } else if (diff < 28800) {\n return 0;\n } else {\n t = diff / 28800;\n a = data.gov ? simpleInterest(data.gov, t, sstats.spk_rate_lgov) : 0;\n b = data.pow ? simpleInterest(data.pow, t, sstats.spk_rate_lpow) : 0;\n c = simpleInterest(\n (data.granted.t > 0 ? data.granted.t : 0) +\n (data.granting.t && data.granting.t > 0 ? data.granting.t : 0),\n t,\n sstats.spk_rate_ldel\n );\n const i = a + b + c;\n if (i) {\n return i;\n } else {\n return 0;\n }\n }\n function simpleInterest(p: number, t: number, r: number) {\n const amount = p * (1 + r / 365);\n const interest = amount - p;\n return interest * t;\n }\n}\n","import { getQueryClient } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { getHiveAssetGeneralInfoQueryOptions } from \"@/modules/wallet/queries/get-hive-asset-general-info-query-options\";\nimport type { GeneralAssetInfo } from \"@/modules/wallet/types\";\nimport type { SpkApiWallet, TransformedSpkMarkets } from \"../types\";\nimport { rewardSpk } from \"../utils\";\nimport { getSpkMarketsQueryOptions } from \"./get-spk-markets-query-options\";\nimport { getSpkWalletQueryOptions } from \"./get-spk-wallet-query-options\";\n\nfunction format(value: number) {\n return value.toFixed(3);\n}\n\nexport function getSpkAssetGeneralInfoQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"spk\", \"general-info\", username],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n await getQueryClient().prefetchQuery(getSpkWalletQueryOptions(username));\n await getQueryClient().prefetchQuery(getSpkMarketsQueryOptions());\n await getQueryClient().prefetchQuery(\n getHiveAssetGeneralInfoQueryOptions(username)\n );\n\n const wallet = getQueryClient().getQueryData<SpkApiWallet>(\n getSpkWalletQueryOptions(username).queryKey\n );\n const market = getQueryClient().getQueryData<TransformedSpkMarkets>(\n getSpkMarketsQueryOptions().queryKey\n );\n const hiveAsset = getQueryClient().getQueryData<GeneralAssetInfo>(\n getHiveAssetGeneralInfoQueryOptions(username).queryKey\n );\n\n if (!wallet || !market) {\n return {\n name: \"SPK\",\n layer: \"SPK\",\n title: \"SPK Network\",\n price: 1,\n accountBalance: 0,\n };\n }\n\n const price = +format(\n ((wallet.gov + wallet.spk) / 1000) *\n +wallet.tick *\n (hiveAsset?.price ?? 0)\n );\n const accountBalance = +format(\n (wallet.spk +\n rewardSpk(\n wallet,\n market.raw.stats || {\n spk_rate_lgov: \"0.001\",\n spk_rate_lpow: format(\n parseFloat(market.raw.stats.spk_rate_lpow) * 100\n ),\n spk_rate_ldel: format(\n parseFloat(market.raw.stats.spk_rate_ldel) * 100\n ),\n }\n )) /\n 1000\n );\n\n return {\n name: \"SPK\",\n layer: \"SPK\",\n title: \"SPK Network\",\n price: price / accountBalance,\n accountBalance,\n } satisfies GeneralAssetInfo;\n },\n });\n}\n","import { getQueryClient } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { getHiveAssetGeneralInfoQueryOptions } from \"@/modules/wallet/queries/get-hive-asset-general-info-query-options\";\nimport type { GeneralAssetInfo } from \"@/modules/wallet/types\";\nimport type { SpkApiWallet, TransformedSpkMarkets } from \"../types\";\nimport { getSpkMarketsQueryOptions } from \"./get-spk-markets-query-options\";\nimport { getSpkWalletQueryOptions } from \"./get-spk-wallet-query-options\";\n\nfunction format(value: number) {\n return value.toFixed(3);\n}\n\nexport function getLarynxAssetGeneralInfoQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"larynx\", \"general-info\", username],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n await getQueryClient().prefetchQuery(getSpkWalletQueryOptions(username));\n await getQueryClient().prefetchQuery(getSpkMarketsQueryOptions());\n await getQueryClient().prefetchQuery(\n getHiveAssetGeneralInfoQueryOptions(username)\n );\n\n const wallet = getQueryClient().getQueryData<SpkApiWallet>(\n getSpkWalletQueryOptions(username).queryKey\n );\n const market = getQueryClient().getQueryData<TransformedSpkMarkets>(\n getSpkMarketsQueryOptions().queryKey\n );\n const hiveAsset = getQueryClient().getQueryData<GeneralAssetInfo>(\n getHiveAssetGeneralInfoQueryOptions(username).queryKey\n );\n\n if (!wallet || !market) {\n return {\n name: \"LARYNX\",\n title: \"SPK Network / LARYNX\",\n price: 1,\n accountBalance: 0,\n };\n }\n\n const price = +format(\n (wallet.balance / 1000) * +wallet.tick * (hiveAsset?.price ?? 0)\n );\n const accountBalance = +format(wallet.balance / 1000);\n\n return {\n name: \"LARYNX\",\n layer: \"SPK\",\n title: \"LARYNX\",\n price: price / accountBalance,\n accountBalance,\n } satisfies GeneralAssetInfo;\n },\n });\n}\n","import { getQueryClient } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { getHiveAssetGeneralInfoQueryOptions } from \"@/modules/wallet/queries/get-hive-asset-general-info-query-options\";\nimport type { GeneralAssetInfo } from \"@/modules/wallet/types\";\nimport type { SpkApiWallet, TransformedSpkMarkets } from \"../types\";\nimport { getSpkMarketsQueryOptions } from \"./get-spk-markets-query-options\";\nimport { getSpkWalletQueryOptions } from \"./get-spk-wallet-query-options\";\n\nfunction format(value: number) {\n return value.toFixed(3);\n}\n\nexport function getLarynxPowerAssetGeneralInfoQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"larynx-power\", \"general-info\", username],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n await getQueryClient().prefetchQuery(getSpkWalletQueryOptions(username));\n await getQueryClient().prefetchQuery(getSpkMarketsQueryOptions());\n await getQueryClient().prefetchQuery(\n getHiveAssetGeneralInfoQueryOptions(username)\n );\n\n const wallet = getQueryClient().getQueryData<SpkApiWallet>(\n getSpkWalletQueryOptions(username).queryKey\n );\n const market = getQueryClient().getQueryData<TransformedSpkMarkets>(\n getSpkMarketsQueryOptions().queryKey\n );\n const hiveAsset = getQueryClient().getQueryData<GeneralAssetInfo>(\n getHiveAssetGeneralInfoQueryOptions(username).queryKey\n );\n\n if (!wallet || !market) {\n return {\n name: \"LP\",\n title: \"SPK Network / LARYNX Power\",\n price: 1,\n accountBalance: 0,\n };\n }\n\n const price = +format(\n (wallet.poweredUp / 1000) * +wallet.tick * (hiveAsset?.price ?? 0)\n );\n const accountBalance = +format(wallet.poweredUp / 1000);\n\n return {\n name: \"LP\",\n title: \"LARYNX Power\",\n layer: \"SPK\",\n price: price / accountBalance,\n accountBalance,\n parts: [\n {\n name: \"delegating\",\n balance: wallet.granting?.t ? +format(wallet.granting.t / 1000) : 0,\n },\n {\n name: \"recieved\",\n balance: wallet.granted?.t ? +format(wallet.granted.t / 1000) : 0,\n },\n ],\n } satisfies GeneralAssetInfo;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { PointTransaction } from \"../types/point-transaction\";\n\ninterface PointsResponse {\n points: string;\n unclaimed_points: string;\n}\n\nexport function getPointsQueryOptions(username?: string, filter = 0) {\n return queryOptions({\n queryKey: [\"points\", username, filter],\n queryFn: async () => {\n if (!username) {\n throw new Error(\"Get points query – username wasn't provided\");\n }\n\n const name = username.replace(\"@\", \"\");\n\n // Get points\n const pointsResponse = await fetch(CONFIG.privateApiHost + \"/private-api/points\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ username: name }),\n });\n\n if (!pointsResponse.ok) {\n throw new Error(`Failed to fetch points: ${pointsResponse.status}`);\n }\n\n const points = (await pointsResponse.json()) as PointsResponse;\n\n // Get transactions\n const transactionsResponse = await fetch(\n CONFIG.privateApiHost + \"/private-api/point-list\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ username: name, type: filter }),\n }\n );\n\n if (!transactionsResponse.ok) {\n throw new Error(`Failed to fetch point transactions: ${transactionsResponse.status}`);\n }\n\n const transactions = (await transactionsResponse.json()) as PointTransaction[];\n\n return {\n points: points.points,\n uPoints: points.unclaimed_points,\n transactions,\n } as const;\n },\n staleTime: 30000,\n refetchOnMount: true,\n enabled: !!username,\n });\n}\n","import { getQueryClient } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { GeneralAssetInfo } from \"@/modules/wallet/types\";\nimport { getPointsQueryOptions } from \"./get-points-query-options\";\n\nexport function getPointsAssetGeneralInfoQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"points\", \"general-info\", username],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n await getQueryClient().prefetchQuery(getPointsQueryOptions(username));\n const data = getQueryClient().getQueryData(\n getPointsQueryOptions(username).queryKey\n );\n return {\n name: \"POINTS\",\n title: \"Ecency Points\",\n price: 0.002,\n accountBalance: +(data?.points ?? 0),\n } satisfies GeneralAssetInfo;\n },\n });\n}\n","import { CONFIG } from \"@/modules/core/config\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { PointTransaction } from \"../types\";\nimport { PointTransactionType } from \"../types\";\nimport type { GeneralAssetTransaction } from \"@/modules/wallet/types\";\n\nexport function getPointsAssetTransactionsQueryOptions(\n username: string | undefined,\n type?: PointTransactionType\n) {\n return queryOptions({\n queryKey: [\"assets\", \"points\", \"transactions\", username, type],\n queryFn: async () => {\n const response = await fetch(\n `${CONFIG.privateApiHost}/private-api/point-list`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n username,\n type: type ?? 0,\n }),\n }\n );\n const data = (await response.json()) as PointTransaction[];\n return data.map(({ created, type, amount, id, sender, receiver, memo }) => ({\n created: new Date(created),\n type,\n results: [\n {\n amount: parseFloat(amount),\n asset: \"POINTS\",\n },\n ],\n id,\n from: sender ?? undefined,\n to: receiver ?? undefined,\n memo: memo ?? undefined,\n })) satisfies GeneralAssetTransaction[];\n },\n });\n}\n","import { getQueryClient } from \"@/modules/core\";\nimport { getCurrencyRate } from \"@/modules/market\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { GeneralAssetInfo } from \"../types\";\nimport { getHiveAssetGeneralInfoQueryOptions } from \"./get-hive-asset-general-info-query-options\";\nimport { getHbdAssetGeneralInfoQueryOptions } from \"./get-hbd-asset-general-info-query-options\";\nimport { getHivePowerAssetGeneralInfoQueryOptions } from \"./get-hive-power-asset-general-info-query-options\";\nimport { getHiveEngineTokensBalancesQueryOptions } from \"@/modules/hive-engine/queries\";\nimport { getHiveEngineTokenGeneralInfoQueryOptions } from \"@/modules/hive-engine/queries\";\nimport { getSpkAssetGeneralInfoQueryOptions } from \"@/modules/spk/queries\";\nimport { getLarynxAssetGeneralInfoQueryOptions } from \"@/modules/spk/queries\";\nimport { getLarynxPowerAssetGeneralInfoQueryOptions } from \"@/modules/spk/queries\";\nimport { getPointsAssetGeneralInfoQueryOptions } from \"@/modules/points/queries\";\nimport {\n getPortfolioQueryOptions,\n type PortfolioResponse,\n type PortfolioWalletItem,\n} from \"./get-portfolio-query-options\";\n\ninterface Options {\n refetch?: boolean;\n currency?: string;\n}\n\nexport function getAccountWalletAssetInfoQueryOptions(\n username: string,\n asset: string,\n options: Options = { refetch: false }\n) {\n const queryClient = getQueryClient();\n const currency = options.currency ?? \"usd\";\n\n const fetchQuery = async (qo: any) => {\n if (options.refetch) {\n await queryClient.fetchQuery(qo);\n } else {\n await queryClient.prefetchQuery(qo);\n }\n return queryClient.getQueryData<GeneralAssetInfo>(qo.queryKey);\n };\n\n const convertPriceToUserCurrency = async (\n assetInfo: GeneralAssetInfo | undefined\n ): Promise<GeneralAssetInfo | undefined> => {\n if (!assetInfo || currency === \"usd\") {\n return assetInfo;\n }\n\n try {\n const conversionRate = await getCurrencyRate(currency);\n return {\n ...assetInfo,\n price: assetInfo.price * conversionRate,\n };\n } catch (error) {\n console.warn(`Failed to convert price from USD to ${currency}:`, error);\n return assetInfo;\n }\n };\n\n const portfolioQuery = getPortfolioQueryOptions(username, currency, true);\n\n const getPortfolioAssetInfo = async () => {\n try {\n const portfolio: PortfolioResponse = await queryClient.fetchQuery(portfolioQuery);\n const assetItem = portfolio.wallets.find(\n (item: PortfolioWalletItem) =>\n item.symbol.toUpperCase() === asset.toUpperCase()\n );\n\n if (!assetItem) return undefined;\n\n const parts: Array<{ name: string; balance: number }> = [];\n\n if (assetItem.liquid !== undefined && assetItem.liquid !== null) {\n parts.push({ name: \"liquid\", balance: assetItem.liquid });\n }\n\n if (assetItem.staked !== undefined && assetItem.staked !== null && assetItem.staked > 0) {\n parts.push({ name: \"staked\", balance: assetItem.staked });\n }\n\n if (assetItem.savings !== undefined && assetItem.savings !== null && assetItem.savings > 0) {\n parts.push({ name: \"savings\", balance: assetItem.savings });\n }\n\n if (assetItem.extraData && Array.isArray(assetItem.extraData)) {\n for (const extraItem of assetItem.extraData) {\n if (!extraItem || typeof extraItem !== \"object\") continue;\n\n const dataKey = extraItem.dataKey;\n const value = extraItem.value;\n\n if (typeof value === \"string\") {\n const cleanValue = value.replace(/,/g, \"\");\n const match = cleanValue.match(/[+-]?\\s*(\\d+(?:\\.\\d+)?)/);\n if (match) {\n const numValue = Math.abs(Number.parseFloat(match[1]));\n\n if (dataKey === \"delegated_hive_power\") {\n parts.push({ name: \"outgoing_delegations\", balance: numValue });\n } else if (dataKey === \"received_hive_power\") {\n parts.push({ name: \"incoming_delegations\", balance: numValue });\n } else if (dataKey === \"powering_down_hive_power\") {\n parts.push({ name: \"pending_power_down\", balance: numValue });\n }\n }\n }\n }\n }\n\n return {\n name: assetItem.symbol,\n title: assetItem.name,\n price: assetItem.fiatRate,\n accountBalance: assetItem.balance,\n apr: assetItem.apr?.toString(),\n layer: assetItem.layer,\n pendingRewards: assetItem.pendingRewards,\n parts,\n } as GeneralAssetInfo;\n } catch {\n return undefined;\n }\n };\n\n return queryOptions({\n queryKey: [\"ecency-wallets\", \"asset-info\", username, asset, currency],\n queryFn: async () => {\n const portfolioAssetInfo = await getPortfolioAssetInfo();\n\n if (portfolioAssetInfo && portfolioAssetInfo.price > 0) {\n return portfolioAssetInfo;\n }\n\n let assetInfo: GeneralAssetInfo | undefined;\n\n if (asset === \"HIVE\") {\n assetInfo = await fetchQuery(getHiveAssetGeneralInfoQueryOptions(username));\n } else if (asset === \"HP\") {\n assetInfo = await fetchQuery(getHivePowerAssetGeneralInfoQueryOptions(username));\n } else if (asset === \"HBD\") {\n assetInfo = await fetchQuery(getHbdAssetGeneralInfoQueryOptions(username));\n } else if (asset === \"SPK\") {\n assetInfo = await fetchQuery(getSpkAssetGeneralInfoQueryOptions(username));\n } else if (asset === \"LARYNX\") {\n assetInfo = await fetchQuery(getLarynxAssetGeneralInfoQueryOptions(username));\n } else if (asset === \"LP\") {\n assetInfo = await fetchQuery(getLarynxPowerAssetGeneralInfoQueryOptions(username));\n } else if (asset === \"POINTS\") {\n assetInfo = await fetchQuery(getPointsAssetGeneralInfoQueryOptions(username));\n } else {\n // Check if it's a Hive Engine token\n const balances = await queryClient.ensureQueryData(\n getHiveEngineTokensBalancesQueryOptions(username)\n );\n\n if (balances.some((balance) => balance.symbol === asset)) {\n assetInfo = await fetchQuery(\n getHiveEngineTokenGeneralInfoQueryOptions(username, asset)\n );\n } else {\n throw new Error(\n `[SDK][Wallet] – unrecognized asset \"${asset}\"`\n );\n }\n }\n\n return await convertPriceToUserCurrency(assetInfo);\n },\n });\n}\n","export enum AssetOperation {\n // Common\n Transfer = \"transfer\",\n\n // APR\n TransferToSavings = \"transfer-saving\",\n WithdrawFromSavings = \"withdraw-saving\",\n Delegate = \"delegate\",\n PowerUp = \"power-up\",\n PowerDown = \"power-down\",\n WithdrawRoutes = \"withdraw-routes\",\n ClaimInterest = \"claim-interest\",\n Swap = \"swap\",\n Convert = \"convert\",\n\n // Points\n Gift = \"gift\",\n Promote = \"promote\",\n Claim = \"claim\",\n Buy = \"buy\",\n\n // SPK\n LockLiquidity = \"lock\",\n\n // Layer 2\n Stake = \"stake\",\n Unstake = \"unstake\",\n Undelegate = \"undelegate\",\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildTransferOp } from \"@/modules/operations/builders\";\n\n/**\n * Payload for transferring tokens.\n */\nexport interface TransferPayload {\n /** Recipient account */\n to: string;\n /** Amount with asset symbol (e.g., \"1.000 HIVE\", \"5.000 HBD\") */\n amount: string;\n /** Transfer memo */\n memo: string;\n}\n\n/**\n * React Query mutation hook for transferring tokens.\n *\n * This mutation broadcasts a transfer operation to send HIVE or HBD\n * to another account. **Requires ACTIVE authority**.\n *\n * Uses `useBroadcastMutation` with the smart auth strategy:\n * - Adapter determines login type and dispatches to appropriate method\n * - If active key not available (common on web), triggers `showAuthUpgradeUI`\n * - Supports keychain, hivesigner, hiveauth, and direct key signing\n *\n * @param username - The username sending the transfer (required for broadcast)\n * @param auth - Authentication context with platform adapter\n *\n * @returns React Query mutation result\n */\nexport function useTransfer(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<TransferPayload>(\n [\"wallet\", \"transfer\"],\n username,\n (payload) => [\n buildTransferOp(username!, payload.to, payload.amount, payload.memo)\n ],\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildPointTransferOp } from \"@/modules/operations/builders\";\n\nexport interface TransferPointPayload {\n to: string;\n amount: string;\n memo: string;\n}\n\n/**\n * React Query mutation hook for transferring Ecency points.\n *\n * Uses `ecency_point_transfer` custom_json operation with ACTIVE authority.\n */\nexport function useTransferPoint(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<TransferPointPayload>(\n [\"wallet\", \"transfer-point\"],\n username,\n (payload) => [\n buildPointTransferOp(username!, payload.to, payload.amount, payload.memo)\n ],\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildDelegateVestingSharesOp } from \"@/modules/operations/builders\";\n\n/**\n * Payload for delegating Hive Power (vesting shares).\n */\nexport interface DelegateVestingSharesPayload {\n /** Account receiving HP delegation */\n delegatee: string;\n /** Amount of VESTS to delegate (e.g., \"1000.000000 VESTS\"). Use \"0.000000 VESTS\" to remove delegation. */\n vestingShares: string;\n}\n\n/**\n * React Query mutation hook for delegating Hive Power (HP).\n *\n * This mutation broadcasts a delegate_vesting_shares operation to delegate HP\n * to another account. **Requires ACTIVE authority**, not posting.\n *\n * @param username - The username delegating HP (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **IMPORTANT: Active Authority Required**\n * - Delegation operations require ACTIVE key, not posting key\n * - Make sure your auth adapter provides getActiveKey() method\n * - Keychain/HiveAuth will prompt for Active authority\n *\n * **Delegation Mechanics:**\n * - Delegated HP can be used by the delegatee for resource credits\n * - Delegatee CANNOT power down or transfer the delegated HP\n * - Delegation can be removed by setting vestingShares to \"0.000000 VESTS\"\n * - Removing delegation has a 5-day cooldown before HP returns to delegator\n *\n * **Post-Broadcast Actions:**\n * - Invalidates delegations list cache to show updated delegation\n * - Invalidates account data for both delegator and delegatee\n *\n * @example\n * ```typescript\n * const delegateMutation = useDelegateVestingShares(username, {\n * adapter: {\n * ...myAdapter,\n * getActiveKey: async (username) => getActiveKeyFromStorage(username)\n * },\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Delegate HP\n * delegateMutation.mutate({\n * delegatee: 'alice',\n * vestingShares: '1000.000000 VESTS'\n * });\n *\n * // Remove delegation\n * delegateMutation.mutate({\n * delegatee: 'alice',\n * vestingShares: '0.000000 VESTS'\n * });\n * ```\n */\nexport function useDelegateVestingShares(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<DelegateVestingSharesPayload>(\n [\"wallet\", \"delegate-vesting-shares\"],\n username,\n (payload) => [\n buildDelegateVestingSharesOp(\n username!,\n payload.delegatee,\n payload.vestingShares\n )\n ],\n async (_result, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.delegatee),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active' // IMPORTANT: Active authority required\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildSetWithdrawVestingRouteOp } from \"@/modules/operations/builders\";\n\n/**\n * Payload for setting withdraw vesting route.\n */\nexport interface SetWithdrawVestingRoutePayload {\n /** Account receiving withdrawn vesting */\n toAccount: string;\n /** Percentage to route (0-10000, where 10000 = 100%). Already scaled. */\n percent: number;\n /** Auto convert to vesting (power up) */\n autoVest: boolean;\n}\n\n/**\n * React Query mutation hook for setting withdraw vesting route.\n *\n * This mutation broadcasts a set_withdraw_vesting_route operation to configure\n * where withdrawn VESTS (power down) are sent. **Requires ACTIVE authority**, not posting.\n *\n * @param username - The username setting withdraw route (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **IMPORTANT: Active Authority Required**\n * - Withdraw route operations require ACTIVE key, not posting key\n * - Make sure your auth adapter provides getActiveKey() method\n * - Keychain/HiveAuth will prompt for Active authority\n *\n * **Withdraw Route Mechanics:**\n * - Routes a percentage of power down (withdraw_vesting) to another account\n * - Percent must be between 0-10000 (where 10000 = 100%)\n * - Multiple routes can be set, total cannot exceed 100%\n * - autoVest=true converts withdrawn VESTS to HP in destination account\n * - autoVest=false converts withdrawn VESTS to liquid HIVE\n *\n * **Post-Broadcast Actions:**\n * - Invalidates withdraw routes cache to show updated routes\n * - Invalidates account data for both accounts\n *\n * @example\n * ```typescript\n * const setRouteMutation = useSetWithdrawVestingRoute(username, {\n * adapter: {\n * ...myAdapter,\n * getActiveKey: async (username) => getActiveKeyFromStorage(username)\n * },\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Route 50% of power down to another account (auto vest)\n * setRouteMutation.mutate({\n * toAccount: 'alice',\n * percent: 5000, // 50% (already scaled)\n * autoVest: true\n * });\n *\n * // Route 100% of power down to another account (liquid HIVE)\n * setRouteMutation.mutate({\n * toAccount: 'bob',\n * percent: 10000, // 100% (already scaled)\n * autoVest: false\n * });\n * ```\n */\nexport function useSetWithdrawVestingRoute(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<SetWithdrawVestingRoutePayload>(\n [\"wallet\", \"set-withdraw-vesting-route\"],\n username,\n (payload) => [\n buildSetWithdrawVestingRouteOp(\n username!,\n payload.toAccount,\n payload.percent,\n payload.autoVest\n )\n ],\n async (_result, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.wallet.withdrawRoutes(username!),\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.toAccount)\n ]);\n }\n },\n auth,\n 'active' // IMPORTANT: Active authority required\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface TransferSpkPayload {\n to: string;\n amount: number;\n memo?: string;\n}\n\nexport function useTransferSpk(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<TransferSpkPayload>(\n [\"wallet\", \"transfer-spk\"],\n username,\n (payload) => {\n const json = JSON.stringify({\n to: payload.to,\n amount: payload.amount,\n ...(typeof payload.memo === \"string\" ? { memo: payload.memo } : {}),\n });\n return [[\"custom_json\", {\n required_auths: [username!],\n required_posting_auths: [],\n id: \"spkcc_spk_send\",\n json,\n }] as Operation];\n },\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface TransferLarynxPayload {\n to: string;\n amount: number;\n memo?: string;\n}\n\nexport function useTransferLarynx(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<TransferLarynxPayload>(\n [\"wallet\", \"transfer-larynx\"],\n username,\n (payload) => {\n const json = JSON.stringify({\n to: payload.to,\n amount: payload.amount,\n ...(typeof payload.memo === \"string\" ? { memo: payload.memo } : {}),\n });\n return [[\"custom_json\", {\n required_auths: [username!],\n required_posting_auths: [],\n id: \"spkcc_send\",\n json,\n }] as Operation];\n },\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface TransferEngineTokenPayload {\n to: string;\n symbol: string;\n quantity: string;\n memo: string;\n}\n\nexport function useTransferEngineToken(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<TransferEngineTokenPayload>(\n [\"wallet\", \"transfer-engine-token\"],\n username,\n (payload) => {\n const json = JSON.stringify({\n contractName: \"tokens\",\n contractAction: \"transfer\",\n contractPayload: {\n symbol: payload.symbol,\n to: payload.to,\n quantity: payload.quantity,\n memo: payload.memo\n }\n });\n return [[\"custom_json\", {\n required_auths: [username!],\n required_posting_auths: [],\n id: \"ssc-mainnet-hive\",\n json,\n }] as Operation];\n },\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildTransferToSavingsOp } from \"@/modules/operations/builders\";\n\nexport interface TransferToSavingsPayload {\n to: string;\n amount: string;\n memo: string;\n}\n\nexport function useTransferToSavings(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<TransferToSavingsPayload>(\n [\"wallet\", \"transfer-to-savings\"],\n username,\n (payload) => [\n buildTransferToSavingsOp(username!, payload.to, payload.amount, payload.memo)\n ],\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildTransferFromSavingsOp } from \"@/modules/operations/builders\";\n\nexport interface TransferFromSavingsPayload {\n to: string;\n amount: string;\n memo: string;\n requestId: number;\n}\n\nexport function useTransferFromSavings(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<TransferFromSavingsPayload>(\n [\"wallet\", \"transfer-from-savings\"],\n username,\n (payload) => [\n buildTransferFromSavingsOp(username!, payload.to, payload.amount, payload.memo, payload.requestId)\n ],\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildTransferToVestingOp } from \"@/modules/operations/builders\";\n\nexport interface TransferToVestingPayload {\n to: string;\n amount: string;\n}\n\nexport function useTransferToVesting(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<TransferToVestingPayload>(\n [\"wallet\", \"transfer-to-vesting\"],\n username,\n (payload) => [\n buildTransferToVestingOp(username!, payload.to, payload.amount)\n ],\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildWithdrawVestingOp } from \"@/modules/operations/builders\";\n\nexport interface WithdrawVestingPayload {\n vestingShares: string;\n}\n\nexport function useWithdrawVesting(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<WithdrawVestingPayload>(\n [\"wallet\", \"withdraw-vesting\"],\n username,\n (payload) => [\n buildWithdrawVestingOp(username!, payload.vestingShares)\n ],\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildConvertOp, buildCollateralizedConvertOp } from \"@/modules/operations/builders\";\n\nexport interface ConvertPayload {\n amount: string;\n requestId: number;\n collateralized?: boolean;\n}\n\nexport function useConvert(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<ConvertPayload>(\n [\"wallet\", \"convert\"],\n username,\n (payload) => [\n payload.collateralized\n ? buildCollateralizedConvertOp(username!, payload.amount, payload.requestId)\n : buildConvertOp(username!, payload.amount, payload.requestId)\n ],\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildClaimInterestOps } from \"@/modules/operations/builders\";\n\nexport interface ClaimInterestPayload {\n to: string;\n amount: string;\n memo: string;\n requestId: number;\n}\n\nexport function useClaimInterest(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<ClaimInterestPayload>(\n [\"wallet\", \"claim-interest\"],\n username,\n (payload) => buildClaimInterestOps(username!, payload.to, payload.amount, payload.memo, payload.requestId),\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys, getQueryClient } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildClaimRewardBalanceOp } from \"@/modules/operations/builders\";\n\nexport interface ClaimRewardsPayload {\n rewardHive: string;\n rewardHbd: string;\n rewardVests: string;\n}\n\nexport function useClaimRewards(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<ClaimRewardsPayload>(\n [\"wallet\", \"claim-rewards\"],\n username,\n (payload) => [\n buildClaimRewardBalanceOp(username!, payload.rewardHive, payload.rewardHbd, payload.rewardVests)\n ],\n async () => {\n const keysToInvalidate = [\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username],\n QueryKeys.assets.hiveGeneralInfo(username!),\n QueryKeys.assets.hbdGeneralInfo(username!),\n QueryKeys.assets.hivePowerGeneralInfo(username!),\n ];\n\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries(keysToInvalidate);\n }\n\n // Delayed re-invalidation for blockchain propagation\n setTimeout(() => {\n const qc = getQueryClient();\n keysToInvalidate.forEach((key) => {\n qc.invalidateQueries({ queryKey: key });\n });\n }, 5000);\n },\n auth,\n 'posting'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface LockLarynxPayload {\n mode: \"lock\" | \"unlock\";\n amount: number;\n}\n\nexport function useLockLarynx(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<LockLarynxPayload>(\n [\"wallet\", \"lock-larynx\"],\n username,\n (payload) => {\n const json = JSON.stringify({ amount: payload.amount * 1000 });\n return [[\"custom_json\", {\n id: payload.mode === \"lock\" ? \"spkcc_gov_up\" : \"spkcc_gov_down\",\n required_auths: [username!],\n required_posting_auths: [],\n json,\n }] as Operation];\n },\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface PowerLarynxPayload {\n mode: \"up\" | \"down\";\n amount: number;\n}\n\nexport function usePowerLarynx(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<PowerLarynxPayload>(\n [\"wallet\", \"power-larynx\"],\n username,\n (payload) => {\n const json = JSON.stringify({ amount: payload.amount * 1000 });\n return [[\"custom_json\", {\n id: `spkcc_power_${payload.mode}`,\n required_auths: [username!],\n required_posting_auths: [],\n json,\n }] as Operation];\n },\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface DelegateEngineTokenPayload {\n to: string;\n symbol: string;\n quantity: string;\n}\n\nexport function useDelegateEngineToken(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<DelegateEngineTokenPayload>(\n [\"wallet\", \"delegate-engine-token\"],\n username,\n (payload) => {\n const json = JSON.stringify({\n contractName: \"tokens\",\n contractAction: \"delegate\",\n contractPayload: {\n symbol: payload.symbol,\n to: payload.to,\n quantity: payload.quantity,\n }\n });\n return [[\"custom_json\", {\n id: \"ssc-mainnet-hive\",\n required_auths: [username!],\n required_posting_auths: [],\n json,\n }] as Operation];\n },\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface UndelegateEngineTokenPayload {\n from: string;\n symbol: string;\n quantity: string;\n}\n\nexport function useUndelegateEngineToken(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<UndelegateEngineTokenPayload>(\n [\"wallet\", \"undelegate-engine-token\"],\n username,\n (payload) => {\n const json = JSON.stringify({\n contractName: \"tokens\",\n contractAction: \"undelegate\",\n contractPayload: {\n symbol: payload.symbol,\n from: payload.from,\n quantity: payload.quantity,\n }\n });\n return [[\"custom_json\", {\n id: \"ssc-mainnet-hive\",\n required_auths: [username!],\n required_posting_auths: [],\n json,\n }] as Operation];\n },\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface StakeEngineTokenPayload {\n to: string;\n symbol: string;\n quantity: string;\n}\n\nexport function useStakeEngineToken(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<StakeEngineTokenPayload>(\n [\"wallet\", \"stake-engine-token\"],\n username,\n (payload) => {\n const json = JSON.stringify({\n contractName: \"tokens\",\n contractAction: \"stake\",\n contractPayload: {\n symbol: payload.symbol,\n to: payload.to,\n quantity: payload.quantity,\n }\n });\n return [[\"custom_json\", {\n id: \"ssc-mainnet-hive\",\n required_auths: [username!],\n required_posting_auths: [],\n json,\n }] as Operation];\n },\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface UnstakeEngineTokenPayload {\n to: string;\n symbol: string;\n quantity: string;\n}\n\nexport function useUnstakeEngineToken(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<UnstakeEngineTokenPayload>(\n [\"wallet\", \"unstake-engine-token\"],\n username,\n (payload) => {\n const json = JSON.stringify({\n contractName: \"tokens\",\n contractAction: \"unstake\",\n contractPayload: {\n symbol: payload.symbol,\n to: payload.to,\n quantity: payload.quantity,\n }\n });\n return [[\"custom_json\", {\n id: \"ssc-mainnet-hive\",\n required_auths: [username!],\n required_posting_auths: [],\n json,\n }] as Operation];\n },\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface ClaimEngineRewardsPayload {\n tokens: string[];\n}\n\nexport function useClaimEngineRewards(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<ClaimEngineRewardsPayload>(\n [\"wallet\", \"claim-engine-rewards\"],\n username,\n (payload) => {\n const json = JSON.stringify(payload.tokens.map((symbol) => ({ symbol })));\n return [[\"custom_json\", {\n id: \"scot_claim_token\",\n required_auths: [],\n required_posting_auths: [username!],\n json,\n }] as Operation];\n },\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'posting'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface EngineMarketOrderPayload {\n action: \"buy\" | \"sell\" | \"cancel\";\n symbol: string;\n quantity?: string;\n price?: string;\n orderId?: string;\n orderType?: \"buy\" | \"sell\";\n}\n\nexport function useEngineMarketOrder(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<EngineMarketOrderPayload>(\n [\"wallet\", \"engine-market-order\"],\n username,\n (payload) => {\n let contractPayload: Record<string, string>;\n let contractAction: string;\n\n if (payload.action === \"cancel\") {\n contractAction = \"cancel\";\n contractPayload = {\n type: payload.orderType!,\n id: payload.orderId!,\n };\n } else {\n contractAction = payload.action;\n contractPayload = {\n symbol: payload.symbol,\n quantity: payload.quantity!,\n price: payload.price!,\n };\n }\n\n const json = JSON.stringify({\n contractName: \"market\",\n contractAction,\n contractPayload,\n });\n return [[\"custom_json\", {\n id: \"ssc-mainnet-hive\",\n required_auths: [username!],\n required_posting_auths: [],\n json,\n }] as Operation];\n },\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { EcencyAnalytics } from \"@/modules/analytics\";\nimport { getQueryClient } from \"@/modules/core\";\nimport type { AuthorityLevel } from \"@/modules/operations/authority-map\";\nimport { AssetOperation } from \"../types\";\nimport {\n buildTransferOp,\n buildTransferToSavingsOp,\n buildTransferFromSavingsOp,\n buildTransferToVestingOp,\n buildWithdrawVestingOp,\n buildDelegateVestingSharesOp,\n buildSetWithdrawVestingRouteOp,\n buildConvertOp,\n buildClaimInterestOps,\n buildPointTransferOp,\n buildSpkCustomJsonOp,\n buildEngineOp,\n buildEngineClaimOp,\n} from \"@/modules/operations/builders\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface WalletOperationPayload {\n from: string;\n to?: string;\n amount?: string;\n memo?: string;\n request_id?: number;\n from_account?: string;\n to_account?: string;\n percent?: number;\n auto_vest?: boolean;\n mode?: string;\n [key: string]: unknown;\n}\n\nfunction buildHiveOperations(\n asset: string,\n operation: AssetOperation,\n payload: WalletOperationPayload\n): Operation[] | null {\n const { from, to = \"\", amount = \"\", memo = \"\" } = payload;\n const requestId = payload.request_id ?? (Date.now() >>> 0);\n\n switch (asset) {\n case \"HIVE\":\n switch (operation) {\n case AssetOperation.Transfer:\n return [buildTransferOp(from, to, amount, memo)];\n case AssetOperation.TransferToSavings:\n return [buildTransferToSavingsOp(from, to, amount, memo)];\n case AssetOperation.WithdrawFromSavings:\n return [buildTransferFromSavingsOp(from, to, amount, memo, requestId)];\n case AssetOperation.PowerUp:\n return [buildTransferToVestingOp(from, to, amount)];\n }\n break;\n\n case \"HBD\":\n switch (operation) {\n case AssetOperation.Transfer:\n return [buildTransferOp(from, to, amount, memo)];\n case AssetOperation.TransferToSavings:\n return [buildTransferToSavingsOp(from, to, amount, memo)];\n case AssetOperation.WithdrawFromSavings:\n return [buildTransferFromSavingsOp(from, to, amount, memo, requestId)];\n case AssetOperation.ClaimInterest:\n return buildClaimInterestOps(from, to, amount, memo, requestId);\n case AssetOperation.Convert:\n return [buildConvertOp(from, amount, Math.floor(Date.now() / 1000))];\n }\n break;\n\n case \"HP\":\n switch (operation) {\n case AssetOperation.PowerDown:\n return [buildWithdrawVestingOp(from, amount)];\n case AssetOperation.Delegate:\n return [buildDelegateVestingSharesOp(from, to, amount)];\n case AssetOperation.WithdrawRoutes:\n return [buildSetWithdrawVestingRouteOp(\n payload.from_account ?? from,\n payload.to_account ?? to,\n payload.percent ?? 0,\n payload.auto_vest ?? false\n )];\n }\n break;\n\n case \"POINTS\":\n if (operation === AssetOperation.Transfer || operation === AssetOperation.Gift) {\n return [buildPointTransferOp(from, to, amount, memo)];\n }\n break;\n\n case \"SPK\":\n if (operation === AssetOperation.Transfer) {\n const numAmount = typeof amount === \"number\" ? amount : parseFloat(amount) * 1000;\n return [[\"custom_json\", {\n id: \"spkcc_spk_send\",\n required_auths: [from],\n required_posting_auths: [],\n json: JSON.stringify({ to, amount: numAmount, ...(typeof memo === \"string\" && memo ? { memo } : {}) }),\n }]];\n }\n break;\n\n case \"LARYNX\":\n switch (operation) {\n case AssetOperation.Transfer: {\n const numAmount = typeof amount === \"number\" ? amount : parseFloat(amount) * 1000;\n return [[\"custom_json\", {\n id: \"spkcc_send\",\n required_auths: [from],\n required_posting_auths: [],\n json: JSON.stringify({ to, amount: numAmount, ...(typeof memo === \"string\" && memo ? { memo } : {}) }),\n }]];\n }\n case AssetOperation.LockLiquidity: {\n const parsedAmount = typeof payload.amount === \"string\"\n ? parseFloat(payload.amount)\n : Number(payload.amount ?? 0);\n const id = payload.mode === \"lock\" ? \"spkcc_gov_up\" : \"spkcc_gov_down\";\n return [buildSpkCustomJsonOp(from, id, parsedAmount)];\n }\n case AssetOperation.PowerUp: {\n const parsedAmount = typeof payload.amount === \"string\"\n ? parseFloat(payload.amount)\n : Number(payload.amount ?? 0);\n const id = `spkcc_power_${payload.mode ?? \"up\"}`;\n return [buildSpkCustomJsonOp(from, id, parsedAmount)];\n }\n }\n break;\n }\n\n return null;\n}\n\nfunction buildEngineOperations(\n asset: string,\n operation: AssetOperation,\n payload: WalletOperationPayload\n): Operation[] | null {\n const { from, to = \"\", amount = \"\" } = payload;\n const quantity = typeof amount === \"string\" && amount.includes(\" \")\n ? amount.split(\" \")[0]\n : String(amount);\n\n switch (operation) {\n case AssetOperation.Transfer:\n return [buildEngineOp(from, \"transfer\", {\n symbol: asset, to, quantity, memo: payload.memo ?? \"\"\n })];\n case AssetOperation.Stake:\n return [buildEngineOp(from, \"stake\", { symbol: asset, to, quantity })];\n case AssetOperation.Unstake:\n return [buildEngineOp(from, \"unstake\", { symbol: asset, to, quantity })];\n case AssetOperation.Delegate:\n return [buildEngineOp(from, \"delegate\", { symbol: asset, to, quantity })];\n case AssetOperation.Undelegate:\n return [buildEngineOp(from, \"undelegate\", { symbol: asset, from: to, quantity })];\n case AssetOperation.Claim:\n return [buildEngineClaimOp(from, [asset])];\n }\n\n return null;\n}\n\n/**\n * Determines authority level for a wallet operation.\n * Engine token claims use posting authority; everything else uses active.\n */\nfunction getWalletOperationAuthority(operation: AssetOperation): AuthorityLevel {\n if (operation === AssetOperation.Claim) {\n return 'posting';\n }\n return 'active';\n}\n\n/**\n * Meta-mutation hook that dispatches wallet operations based on asset and operation type.\n *\n * Supports HIVE, HBD, HP, POINTS, SPK, LARYNX, and Hive Engine tokens.\n * Uses `useBroadcastMutation` for unified auth handling via `AuthContextV2`.\n *\n * @param username - The Hive account performing the operation\n * @param asset - The asset symbol (e.g., \"HIVE\", \"HBD\", \"HP\", \"POINTS\", \"SPK\", \"LARYNX\", or engine token)\n * @param operation - The operation type from AssetOperation enum\n * @param auth - Auth context for broadcasting\n */\nexport function useWalletOperation(\n username: string | undefined,\n asset: string,\n operation: AssetOperation,\n auth?: AuthContextV2\n) {\n const { mutateAsync: recordActivity } = EcencyAnalytics.useRecordActivity(\n username,\n operation as any\n );\n\n return useBroadcastMutation<WalletOperationPayload>(\n [\"ecency-wallets\", asset, operation],\n username,\n (payload) => {\n // Try native Hive + SPK + LARYNX + POINTS operations\n const hiveOps = buildHiveOperations(asset, operation, payload);\n if (hiveOps) return hiveOps;\n\n // Try engine token operations\n const engineOps = buildEngineOperations(asset, operation, payload);\n if (engineOps) return engineOps;\n\n throw new Error(`[SDK][Wallet] – no operation builder for asset=\"${asset}\" operation=\"${operation}\"`);\n },\n () => {\n recordActivity();\n\n const keysToInvalidate: (string | undefined)[][] = [];\n\n // Invalidate asset-specific queries (prefix-matches all currency variants)\n keysToInvalidate.push([\"ecency-wallets\", \"asset-info\", username, asset]);\n\n if (asset === \"HIVE\") {\n keysToInvalidate.push([\"ecency-wallets\", \"asset-info\", username, \"HP\"]);\n }\n if (asset === \"LARYNX\" && operation === AssetOperation.PowerUp) {\n keysToInvalidate.push([\"ecency-wallets\", \"asset-info\", username, \"LP\"]);\n keysToInvalidate.push([\"ecency-wallets\", \"asset-info\", username, \"LARYNX\"]);\n }\n\n // Invalidate portfolio (prefix-matches all currency/filter variants)\n keysToInvalidate.push([\"wallet\", \"portfolio\", \"v2\", username]);\n\n // Delay invalidation to allow blockchain to process\n setTimeout(() => {\n keysToInvalidate.forEach((key) => {\n getQueryClient().invalidateQueries({ queryKey: key });\n });\n }, 5000);\n },\n auth,\n getWalletOperationAuthority(operation)\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildDelegateRcOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface DelegateRcPayload {\n to: string;\n maxRc: string | number;\n}\n\nexport function useDelegateRc(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<DelegateRcPayload>(\n [\"wallet\", \"delegate-rc\"],\n username,\n ({ to, maxRc }) => [\n buildDelegateRcOp(username!, to, maxRc)\n ],\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n QueryKeys.resourceCredits.account(username!),\n QueryKeys.resourceCredits.account(variables.to),\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildWitnessVoteOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for voting for a witness.\n */\nexport interface WitnessVotePayload {\n /** Witness account name to vote for/against */\n witness: string;\n /** True to approve, false to disapprove */\n approve: boolean;\n}\n\n/**\n * React Query mutation hook for voting for a Hive witness.\n *\n * This mutation broadcasts an account_witness_vote operation to vote for\n * or remove a vote from a witness.\n *\n * @param username - The username voting for the witness (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates account data cache to show updated witness votes\n * - Invalidates witness votes cache\n *\n * **Vote Types:**\n * - approve: true - Vote for the witness\n * - approve: false - Remove your vote from the witness\n *\n * **Authority Required:**\n * - Active authority is required for witness voting\n *\n * @example\n * ```typescript\n * const witnessVoteMutation = useWitnessVote(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Vote for a witness\n * witnessVoteMutation.mutate({\n * witness: 'good-karma',\n * approve: true\n * });\n *\n * // Remove vote from a witness\n * witnessVoteMutation.mutate({\n * witness: 'good-karma',\n * approve: false\n * });\n * ```\n */\nexport function useWitnessVote(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<WitnessVotePayload>(\n [\"witnesses\", \"vote\"],\n username,\n ({ witness, approve }) => [\n buildWitnessVoteOp(username!, witness, approve)\n ],\n async () => {\n // Wrap post-broadcast side-effects in try-catch to prevent propagating errors\n try {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.witnesses.votes(username)\n ]);\n }\n } catch (error) {\n // Log but don't rethrow - don't fail mutation due to side-effect errors\n console.warn('[useWitnessVote] Post-broadcast side-effect failed:', error);\n }\n },\n auth,\n 'active' // Use active authority for witness votes (required by blockchain)\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildWitnessProxyOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface WitnessProxyPayload {\n proxy: string;\n}\n\nexport function useWitnessProxy(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<WitnessProxyPayload>(\n [\"witnesses\", \"proxy\"],\n username,\n ({ proxy }) => [\n buildWitnessProxyOp(username!, proxy)\n ],\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.witnesses.proxy(),\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { Witness } from \"../types\";\n\ntype WitnessPage = Witness[];\ntype WitnessCursor = string;\n\n/**\n * Get witnesses ordered by vote count (infinite scroll)\n *\n * @param limit - Number of witnesses per page\n */\nexport function getWitnessesInfiniteQueryOptions(limit: number) {\n return infiniteQueryOptions<WitnessPage, Error, WitnessPage, (string | number)[], WitnessCursor>({\n queryKey: [\"witnesses\", \"list\", limit],\n initialPageParam: \"\" as WitnessCursor,\n\n queryFn: async ({ pageParam }: { pageParam: WitnessCursor }) =>\n CONFIG.hiveClient.call(\"condenser_api\", \"get_witnesses_by_vote\", [\n pageParam,\n limit,\n ]) as Promise<Witness[]>,\n\n getNextPageParam: (lastPage: WitnessPage): WitnessCursor | undefined => {\n const last = lastPage?.[lastPage.length - 1];\n return last ? last.owner : undefined;\n },\n });\n}\n","export enum PointTransactionType {\n CHECKIN = 10,\n LOGIN = 20,\n CHECKIN_EXTRA = 30,\n POST = 100,\n COMMENT = 110,\n VOTE = 120,\n REBLOG = 130,\n DELEGATION = 150,\n REFERRAL = 160,\n COMMUNITY = 170,\n TRANSFER_SENT = 998,\n TRANSFER_INCOMING = 999,\n MINTED = 991,\n}\n","import { CONFIG, getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { EcencyAnalytics } from \"@/modules/analytics\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { getPointsQueryOptions } from \"../queries\";\nimport type { Points } from \"../types\";\n\nexport function useClaimPoints(\n username: string | undefined,\n accessToken: string | undefined,\n onSuccess?: () => void,\n onError?: Parameters<typeof useMutation>[\"0\"][\"onError\"]\n) {\n const { mutateAsync: recordActivity } = EcencyAnalytics.useRecordActivity(\n username,\n \"points-claimed\"\n );\n\n return useMutation({\n mutationFn: async () => {\n if (!username) {\n throw new Error(\n \"[SDK][Points][Claim] – username wasn't provided\"\n );\n }\n\n if (!accessToken) {\n throw new Error(\n \"[SDK][Points][Claim] – access token wasn't found\"\n );\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/points-claim\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code: accessToken }),\n }\n );\n\n if (!response.ok) {\n const body = await response.text();\n if (response.status === 406) {\n try {\n return JSON.parse(body);\n } catch {\n return { message: body, code: response.status };\n }\n }\n throw new Error(\n `[SDK][Points][Claim] – failed with status ${response.status}${body ? `: ${body}` : \"\"}`\n );\n }\n\n return response.json();\n },\n onError,\n onSuccess: () => {\n recordActivity();\n\n getQueryClient().setQueryData<Points>(\n getPointsQueryOptions(username).queryKey,\n (data) => {\n if (!data) {\n return data;\n }\n\n return {\n ...data,\n points: (\n parseFloat(data.points) + parseFloat(data.uPoints)\n ).toFixed(3),\n uPoints: \"0\",\n };\n }\n );\n\n onSuccess?.();\n },\n });\n}\n","import { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { SearchResponse } from \"../types/search-response\";\n\nexport function searchQueryOptions(\n q: string,\n sort: string,\n hideLow: string,\n since?: string,\n scroll_id?: string,\n votes?: number\n) {\n return queryOptions({\n queryKey: [\"search\", q, sort, hideLow, since, scroll_id, votes],\n queryFn: async () => {\n const data: {\n q: string;\n sort: string;\n hide_low: string;\n since?: string;\n scroll_id?: string;\n votes?: number;\n } = { q, sort, hide_low: hideLow };\n\n if (since) data.since = since;\n if (scroll_id) data.scroll_id = scroll_id;\n if (votes) data.votes = votes;\n\n const response = await fetch(CONFIG.privateApiHost + \"/search-api/search\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`Search failed: ${response.status}`);\n }\n\n return response.json() as Promise<SearchResponse>;\n },\n });\n}\n\ntype PageParam = {\n sid: string | undefined;\n hasNextPage: boolean;\n};\n\nexport function getControversialRisingInfiniteQueryOptions(\n what: string,\n tag: string,\n enabled = true\n) {\n return infiniteQueryOptions<SearchResponse, Error, SearchResponse, (string | number)[], PageParam>({\n queryKey: [\"search\", \"controversial-rising\", what, tag],\n initialPageParam: { sid: undefined, hasNextPage: true } as PageParam,\n\n queryFn: async ({ pageParam }: { pageParam: PageParam }) => {\n if (!pageParam.hasNextPage) {\n return {\n hits: 0,\n took: 0,\n results: [],\n };\n }\n\n let sinceDate: Date | undefined;\n const now = new Date();\n\n switch (tag) {\n case \"today\":\n sinceDate = new Date(now.getTime() - 24 * 60 * 60 * 1000);\n break;\n case \"week\":\n sinceDate = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);\n break;\n case \"month\":\n sinceDate = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);\n break;\n case \"year\":\n sinceDate = new Date(now.getTime() - 365 * 24 * 60 * 60 * 1000);\n break;\n default:\n sinceDate = undefined;\n }\n\n const q = \"* type:post\";\n const sort = what === \"rising\" ? \"children\" : what;\n const since = sinceDate ? sinceDate.toISOString().split(\".\")[0] : undefined;\n const hideLow = \"0\";\n const votes = tag === \"today\" ? 50 : 200;\n\n const data: {\n q: string;\n sort: string;\n hide_low: string;\n since?: string;\n scroll_id?: string;\n votes?: number;\n } = { q, sort, hide_low: hideLow };\n\n if (since) data.since = since;\n if (pageParam.sid) data.scroll_id = pageParam.sid;\n if (votes) data.votes = votes;\n\n const response = await fetch(CONFIG.privateApiHost + \"/search-api/search\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`Search failed: ${response.status}`);\n }\n\n return response.json() as Promise<SearchResponse>;\n },\n\n getNextPageParam: (resp: SearchResponse): PageParam => {\n return {\n sid: resp?.scroll_id,\n hasNextPage: resp.results.length > 0,\n };\n },\n\n enabled,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { SearchResponse } from \"../types/search-response\";\n\ninterface Entry {\n author: string;\n permlink: string;\n json_metadata?: {\n tags?: string[];\n };\n}\n\nfunction buildQuery(entry: Entry, retry = 3) {\n const { json_metadata, permlink } = entry;\n\n let q = \"*\";\n q += ` -dporn type:post`;\n let tags;\n\n // 3 tags and decrease until there is enough relevant posts\n if (json_metadata && json_metadata.tags && Array.isArray(json_metadata.tags)) {\n tags = json_metadata.tags\n .filter((tag) => tag && tag !== \"\" && typeof tag === \"string\")\n .filter((tag) => !tag.startsWith(\"hive-\")) // filter out communities\n .filter((_tag, ind) => ind < +retry)\n .join(\",\");\n }\n\n // check to make sure tags are not empty\n if (tags && tags.length > 0) {\n q += ` tag:${tags}`;\n } else {\n // no tags in post, try with permlink\n const fperm = permlink.split(\"-\");\n tags = fperm\n .filter((part: string) => part !== \"\")\n .filter((part: string) => !/^-?\\d+$/.test(part))\n .filter((part: string) => part.length > 2)\n .join(\",\");\n q += ` tag:${tags}`;\n }\n\n return q;\n}\n\nexport function getSimilarEntriesQueryOptions(entry: Entry) {\n const query = buildQuery(entry);\n\n return queryOptions({\n queryKey: [\"search\", \"similar-entries\", entry.author, entry.permlink, query],\n queryFn: async () => {\n const data = {\n q: query,\n sort: \"newest\",\n hide_low: \"0\",\n };\n\n const response = await fetch(CONFIG.privateApiHost + \"/search-api/search\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`Search failed: ${response.status}`);\n }\n\n const searchResponse = (await response.json()) as SearchResponse;\n\n const rawEntries = searchResponse.results.filter(\n (r) => r.permlink !== entry.permlink && r.tags.indexOf(\"nsfw\") === -1\n );\n\n const entries = [];\n for (const result of rawEntries) {\n if (entries.find((y) => y.author === result.author) === undefined) {\n entries.push(result);\n }\n }\n\n return entries.slice(0, 3);\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { AccountSearchResult } from \"../types/account-search-result\";\n\nexport function getSearchAccountQueryOptions(q: string, limit = 5, random = false) {\n return queryOptions({\n queryKey: [\"search\", \"account\", q, limit],\n queryFn: async () => {\n const data = { q, limit, random: +random };\n\n const response = await fetch(CONFIG.privateApiHost + \"/search-api/search-account\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to search accounts: ${response.status}`);\n }\n\n return response.json() as Promise<AccountSearchResult[]>;\n },\n enabled: !!q,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { TagSearchResult } from \"../types/tag-search-result\";\n\nexport function getSearchTopicsQueryOptions(q: string, limit = 20, random = false) {\n return queryOptions({\n queryKey: [\"search\", \"topics\", q],\n queryFn: async () => {\n const data = { q, limit, random: +random };\n\n const response = await fetch(CONFIG.privateApiHost + \"/search-api/search-tag\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to search topics: ${response.status}`);\n }\n\n return response.json() as Promise<TagSearchResult[]>;\n },\n enabled: !!q,\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { SearchResponse } from \"../types/search-response\";\n\nexport function getSearchApiInfiniteQueryOptions(\n q: string,\n sort: string,\n hideLow: boolean,\n since?: string,\n votes?: number\n) {\n return infiniteQueryOptions({\n queryKey: [\"search\", \"api\", q, sort, hideLow, since, votes],\n queryFn: async ({ pageParam }: { pageParam: string | undefined }) => {\n interface SearchApiPayload {\n q: string;\n sort: string;\n hide_low: boolean;\n since?: string;\n scroll_id?: string;\n votes?: number;\n }\n\n const payload: SearchApiPayload = { q, sort, hide_low: hideLow };\n\n if (since) {\n payload.since = since;\n }\n if (pageParam) {\n payload.scroll_id = pageParam;\n }\n if (votes !== undefined) {\n payload.votes = votes;\n }\n\n const response = await fetch(CONFIG.privateApiHost + \"/search-api/search\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(`Search failed: ${response.status}`);\n }\n\n return response.json() as Promise<SearchResponse>;\n },\n initialPageParam: undefined as string | undefined,\n getNextPageParam: (lastPage: SearchResponse) => lastPage?.scroll_id,\n enabled: !!q,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\n\nexport function getSearchPathQueryOptions(q: string) {\n return queryOptions({\n queryKey: [\"search\", \"path\", q],\n queryFn: async () => {\n const response = await fetch(CONFIG.privateApiHost + \"/search-api/search-path\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ q }),\n });\n\n if (!response.ok) {\n throw new Error(`Search path failed: ${response.status}`);\n }\n\n const data = await response.json();\n\n if (data?.length > 0) {\n return data as string[];\n }\n\n return [q];\n },\n });\n}\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { AccountSearchResult } from \"./types/account-search-result\";\nimport { SearchResponse } from \"./types/search-response\";\nimport { TagSearchResult } from \"./types/tag-search-result\";\n\ntype RequestError = Error & { status?: number; data?: unknown };\n\nasync function parseJsonResponse<T>(response: Response): Promise<T> {\n const parseBody = async (): Promise<unknown> => {\n try {\n return await response.json();\n } catch {\n try {\n return await response.text();\n } catch {\n return undefined;\n }\n }\n };\n\n const data = await parseBody();\n if (!response.ok) {\n const error = new Error(`Request failed with status ${response.status}`) as RequestError;\n error.status = response.status;\n error.data = data;\n throw error;\n }\n\n if (data === undefined) {\n throw new Error(\"Response body was empty or invalid JSON\");\n }\n\n return data as T;\n}\n\nexport async function search(\n q: string,\n sort: string,\n hideLow: string,\n since?: string,\n scroll_id?: string,\n votes?: number\n): Promise<SearchResponse> {\n const data: {\n q: string;\n sort: string;\n hide_low: string;\n since?: string;\n scroll_id?: string;\n votes?: number;\n } = { q, sort, hide_low: hideLow };\n\n if (since) {\n data.since = since;\n }\n if (scroll_id) {\n data.scroll_id = scroll_id;\n }\n if (votes) {\n data.votes = votes;\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/search-api/search\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<SearchResponse>(response);\n}\n\nexport async function searchAccount(\n q: string = \"\",\n limit: number = 20,\n random: number = 1\n): Promise<AccountSearchResult[]> {\n const data = { q, limit, random };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/search-api/search-account\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<AccountSearchResult[]>(response);\n}\n\nexport async function searchTag(\n q: string = \"\",\n limit: number = 20,\n random: number = 0\n): Promise<TagSearchResult[]> {\n const data = { q, limit, random };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/search-api/search-tag\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<TagSearchResult[]>(response);\n}\n\nexport async function searchPath(q: string): Promise<string[]> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/search-api/search-path\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ q }),\n });\n\n const data = await parseJsonResponse<string[]>(response);\n return data?.length > 0 ? data : [q];\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"../../core\";\nimport type { PromotePrice } from \"../types\";\n\nexport function getBoostPlusPricesQueryOptions(accessToken: string) {\n return queryOptions({\n queryKey: [\"promotions\", \"boost-plus-prices\"],\n queryFn: async () => {\n if (!accessToken) {\n return [];\n }\n\n const response = await fetch(CONFIG.privateApiHost + \"/private-api/boost-plus-price\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code: accessToken }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch boost plus prices: ${response.status}`);\n }\n\n return await response.json() as PromotePrice[];\n },\n staleTime: Infinity,\n refetchOnMount: true,\n enabled: !!accessToken\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"../../core\";\nimport type { PromotePrice } from \"../types\";\n\nexport function getPromotePriceQueryOptions(accessToken: string) {\n return queryOptions({\n queryKey: [\"promotions\", \"promote-price\"],\n queryFn: async () => {\n const response = await fetch(CONFIG.privateApiHost + \"/private-api/promote-price\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code: accessToken }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch promote prices: ${response.status}`);\n }\n\n return await response.json() as PromotePrice[];\n },\n enabled: !!accessToken\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"../../core\";\n\nexport interface BoostPlusAccountPrice {\n account: string;\n expires: Date;\n}\n\nexport function getBoostPlusAccountPricesQueryOptions(account: string, accessToken: string) {\n return queryOptions({\n queryKey: [\"promotions\", \"boost-plus-accounts\", account],\n queryFn: async (): Promise<BoostPlusAccountPrice | null> => {\n if (!accessToken || !account) {\n return null;\n }\n\n const response = await fetch(CONFIG.privateApiHost + \"/private-api/boosted-plus-account\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code: accessToken, account }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch boost plus account prices: ${response.status}`);\n }\n\n const responseData = await response.json() as {\n expires: string;\n account: string;\n };\n\n return responseData\n ? {\n account: responseData.account,\n expires: new Date(responseData.expires)\n }\n : null;\n },\n enabled: !!account && !!accessToken\n });\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildBoostPlusOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface BoostPlusPayload {\n account: string;\n duration: number;\n}\n\nexport function useBoostPlus(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<BoostPlusPayload>(\n [\"promotions\", \"boost-plus\"],\n username,\n ({ account, duration }) => [\n buildBoostPlusOp(username!, account, duration)\n ],\n async (_data, { account }) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.promotions.boostPlusAccounts(account),\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { HsTokenRenewResponse } from \"./types\";\n\ntype RequestError = Error & { status?: number; data?: unknown };\n\nexport async function hsTokenRenew(code: string): Promise<HsTokenRenewResponse> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/auth-api/hs-token-refresh\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code }),\n });\n\n if (!response.ok) {\n let data: unknown = undefined;\n try {\n data = await response.json();\n } catch {\n data = undefined;\n }\n const error = new Error(`Failed to refresh token: ${response.status}`) as RequestError;\n error.status = response.status;\n error.data = data;\n throw error;\n }\n\n const data = (await response.json()) as HsTokenRenewResponse;\n return data;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/modules/core/mutations/use-broadcast-mutation.ts","../../src/modules/core/errors/chain-errors.ts","../../src/modules/core/config.ts","../../src/modules/core/mutations/broadcast-json.ts","../../src/modules/core/queries-manager.ts","../../src/modules/core/utils/decoder-encoder.ts","../../src/modules/core/utils/parse-asset.ts","../../src/modules/core/utils/get-bound-fetch.ts","../../src/modules/core/utils/is-community.ts","../../src/modules/core/utils/pagination-helpers.ts","../../src/modules/core/utils/vests-to-hp.ts","../../src/modules/core/utils/is-empty-date.ts","../../src/modules/core/queries/get-dynamic-props-query-options.ts","../../src/modules/core/queries/get-reward-fund-query-options.ts","../../src/modules/core/query-keys.ts","../../src/modules/accounts/queries/get-account-full-query-options.ts","../../src/modules/accounts/utils/profile-metadata.ts","../../src/modules/accounts/utils/parse-accounts.ts","../../src/modules/accounts/queries/get-accounts-query-options.ts","../../src/modules/accounts/queries/get-follow-count-query-options.ts","../../src/modules/accounts/queries/get-followers-query-options.ts","../../src/modules/accounts/queries/get-following-query-options.ts","../../src/modules/accounts/queries/get-muted-users-query-options.ts","../../src/modules/accounts/queries/lookup-accounts-query-options.ts","../../src/modules/accounts/queries/search-accounts-by-username-query-options.ts","../../src/modules/accounts/queries/check-username-wallets-pending-query-options.ts","../../src/modules/accounts/queries/get-relationship-between-accounts-query-options.ts","../../src/modules/accounts/queries/get-account-subscriptions-query-options.ts","../../src/modules/accounts/queries/get-bookmarks-query-options.ts","../../src/modules/accounts/queries/get-favourites-query-options.ts","../../src/modules/accounts/queries/check-favourite-query-options.ts","../../src/modules/accounts/queries/get-account-recoveries-query-options.ts","../../src/modules/accounts/queries/get-account-pending-recovery-query-options.ts","../../src/modules/accounts/queries/get-account-reputations-query-options.ts","../../src/modules/accounts/queries/get-transactions-infinite-query-options.ts","../../src/modules/accounts/queries/get-bots-query-options.ts","../../src/modules/accounts/queries/get-referrals-infinite-query-options.ts","../../src/modules/accounts/queries/get-referrals-stats-query-options.ts","../../src/modules/accounts/queries/get-friends-infinite-query-options.ts","../../src/modules/accounts/queries/get-search-friends-query-options.ts","../../src/modules/posts/queries/get-trending-tags-query-options.ts","../../src/modules/posts/queries/get-trending-tags-with-stats-query-options.ts","../../src/modules/posts/queries/get-fragments-query-options.ts","../../src/modules/posts/queries/get-promoted-posts-query-options.ts","../../src/modules/posts/queries/get-entry-active-votes-query-options.ts","../../src/modules/posts/queries/get-user-post-vote-query-options.ts","../../src/modules/posts/queries/get-content-query-options.ts","../../src/modules/posts/queries/get-content-replies-query-options.ts","../../src/modules/posts/queries/get-post-header-query-options.ts","../../src/modules/posts/utils/filter-dmca-entries.ts","../../src/modules/posts/queries/get-post-query-options.ts","../../src/modules/bridge/requests.ts","../../src/modules/posts/queries/get-discussions-query-options.ts","../../src/modules/posts/queries/get-account-posts-query-options.ts","../../src/modules/posts/queries/get-posts-ranked-query-options.ts","../../src/modules/posts/queries/get-reblogs-query-options.ts","../../src/modules/posts/queries/get-reblogged-by-query-options.ts","../../src/modules/posts/queries/get-schedules-query-options.ts","../../src/modules/posts/queries/get-drafts-query-options.ts","../../src/modules/posts/queries/get-images-query-options.ts","../../src/modules/posts/queries/get-comment-history-query-options.ts","../../src/modules/posts/queries/get-deleted-entry-query-options.ts","../../src/modules/posts/queries/get-post-tips-query-options.ts","../../src/modules/posts/utils/waves-helpers.ts","../../src/modules/posts/queries/get-waves-by-host-query-options.ts","../../src/modules/posts/queries/get-waves-by-tag-query-options.ts","../../src/modules/posts/queries/get-waves-following-query-options.ts","../../src/modules/posts/queries/get-waves-trending-tags-query-options.ts","../../src/modules/posts/queries/get-normalize-post-query-options.ts","../../src/modules/accounts/queries/get-account-vote-history-infinite-query-options.ts","../../src/modules/accounts/queries/get-profiles-query-options.ts","../../src/modules/accounts/mutations/use-account-update.ts","../../src/modules/accounts/mutations/use-account-relations-update.ts","../../src/modules/operations/builders/content.ts","../../src/modules/operations/builders/wallet.ts","../../src/modules/operations/builders/social.ts","../../src/modules/operations/builders/governance.ts","../../src/modules/operations/builders/community.ts","../../src/modules/operations/builders/market.ts","../../src/modules/operations/builders/account.ts","../../src/modules/operations/builders/ecency.ts","../../src/modules/accounts/mutations/use-follow.ts","../../src/modules/accounts/mutations/use-unfollow.ts","../../src/modules/accounts/mutations/bookmarks/use-account-bookmark-add.ts","../../src/modules/accounts/mutations/bookmarks/use-account-bookmark-delete.ts","../../src/modules/accounts/mutations/favourites/use-account-favourite-add.ts","../../src/modules/accounts/mutations/favourites/use-account-favourite-delete.ts","../../src/modules/accounts/mutations/use-account-update-key-auths.ts","../../src/modules/accounts/mutations/use-account-update-password.ts","../../src/modules/accounts/mutations/use-account-revoke-posting.ts","../../src/modules/accounts/mutations/use-account-update-recovery.ts","../../src/modules/accounts/mutations/use-account-revoke-key.ts","../../src/modules/accounts/mutations/use-claim-account.ts","../../src/modules/accounts/mutations/use-grant-posting-permission.ts","../../src/modules/accounts/mutations/use-create-account.ts","../../src/modules/accounts/utils/account-power.ts","../../src/modules/operations/authority-map.ts","../../src/modules/operations/mutations/sign-operation-by-key.ts","../../src/modules/operations/mutations/sign-operation-by-keychain.ts","../../src/modules/operations/mutations/sign-operation-by-hivesigner.ts","../../src/modules/operations/queries/get-chain-properties-query-options.ts","../../src/modules/posts/mutations/add-fragment.ts","../../src/modules/posts/mutations/edit-fragment.ts","../../src/modules/posts/mutations/remove-fragment.ts","../../src/modules/private-api/requests.ts","../../src/modules/posts/mutations/use-add-draft.ts","../../src/modules/posts/mutations/use-update-draft.ts","../../src/modules/posts/mutations/use-delete-draft.ts","../../src/modules/posts/mutations/use-add-schedule.ts","../../src/modules/posts/mutations/use-delete-schedule.ts","../../src/modules/posts/mutations/use-move-schedule.ts","../../src/modules/posts/mutations/use-add-image.ts","../../src/modules/posts/mutations/use-delete-image.ts","../../src/modules/posts/mutations/use-upload-image.ts","../../src/modules/posts/cache/entries-cache-management.ts","../../src/modules/posts/mutations/use-vote.ts","../../src/modules/posts/mutations/use-reblog.ts","../../src/modules/posts/mutations/use-comment.ts","../../src/modules/posts/cache/discussions-cache-utils.ts","../../src/modules/posts/mutations/use-delete-comment.ts","../../src/modules/posts/mutations/use-cross-post.ts","../../src/modules/posts/mutations/use-update-reply.ts","../../src/modules/posts/mutations/use-promote.ts","../../src/modules/posts/utils/validate-post-creating.ts","../../src/modules/analytics/mutations/index.ts","../../src/modules/analytics/mutations/use-record-activity.ts","../../src/modules/analytics/queries/get-discover-leaderboard-query-options.ts","../../src/modules/analytics/queries/get-discover-curation-query-options.ts","../../src/modules/analytics/queries/get-page-stats-query-options.ts","../../src/modules/integrations/3speak/queries/index.ts","../../src/modules/integrations/hivesigner/queries/index.ts","../../src/modules/integrations/hivesigner/queries/get-decode-memo-query-options.ts","../../src/modules/integrations/hivesigner/index.ts","../../src/modules/integrations/3speak/queries/get-account-token-query-options.ts","../../src/modules/integrations/3speak/queries/get-account-videos-query-options.ts","../../src/modules/integrations/3speak/index.ts","../../src/modules/integrations/hiveposh/queries/get-hiveposh-links-query-options.ts","../../src/modules/integrations/plausible/queries/get-stats-query-options.ts","../../src/modules/resource-credits/queries/get-rc-stats-query-options.ts","../../src/modules/resource-credits/queries/get-account-rc-query-options.ts","../../src/modules/games/queries/game-status-check-query-options.ts","../../src/modules/games/mutations/game-claim.ts","../../src/modules/communities/mutations/use-subscribe-community.ts","../../src/modules/communities/mutations/use-unsubscribe-community.ts","../../src/modules/communities/mutations/use-mute-post.ts","../../src/modules/communities/mutations/use-set-community-role.ts","../../src/modules/communities/mutations/use-update-community.ts","../../src/modules/communities/mutations/use-register-community-rewards.ts","../../src/modules/communities/mutations/use-pin-post.ts","../../src/modules/communities/queries/get-communities-query-options.ts","../../src/modules/communities/queries/get-community-context-query-options.ts","../../src/modules/communities/queries/get-community-query-options.ts","../../src/modules/communities/queries/get-community-subscribers-query-options.ts","../../src/modules/communities/queries/get-account-notifications-infinite-query-options.ts","../../src/modules/communities/queries/get-rewarded-communities-query-options.ts","../../src/modules/communities/types/community.ts","../../src/modules/communities/utils/index.ts","../../src/modules/notifications/queries/get-notifications-unread-count-query-options.ts","../../src/modules/notifications/queries/get-notifications-infinite-query-options.ts","../../src/modules/notifications/enums/notification-filter.ts","../../src/modules/notifications/enums/notify-types.ts","../../src/modules/notifications/queries/get-notifications-settings-query-options.ts","../../src/modules/notifications/queries/get-announcements-query-options.ts","../../src/modules/notifications/mutations/use-mark-notifications-read.ts","../../src/modules/notifications/mutations/use-set-last-read.ts","../../src/modules/proposals/queries/get-proposal-query-options.ts","../../src/modules/proposals/queries/get-proposals-query-options.ts","../../src/modules/proposals/queries/get-proposal-votes-query-options.ts","../../src/modules/proposals/queries/get-user-proposal-votes-query-options.ts","../../src/modules/proposals/mutations/use-proposal-vote.ts","../../src/modules/proposals/mutations/use-proposal-create.ts","../../src/modules/wallet/queries/get-vesting-delegations-query-options.ts","../../src/modules/wallet/queries/get-conversion-requests-query-options.ts","../../src/modules/wallet/queries/get-collateralized-conversion-requests-query-options.ts","../../src/modules/wallet/queries/get-savings-withdraw-from-query-options.ts","../../src/modules/wallet/queries/get-withdraw-routes-query-options.ts","../../src/modules/wallet/queries/get-open-orders-query-options.ts","../../src/modules/wallet/queries/get-outgoing-rc-delegations-infinite-query-options.ts","../../src/modules/wallet/queries/get-incoming-rc-query-options.ts","../../src/modules/wallet/queries/get-received-vesting-shares-query-options.ts","../../src/modules/wallet/queries/get-recurrent-transfers-query-options.ts","../../src/modules/wallet/queries/get-portfolio-query-options.ts","../../src/modules/wallet/queries/get-hive-asset-general-info-query-options.ts","../../src/modules/wallet/queries/get-hbd-asset-general-info-query-options.ts","../../src/modules/wallet/queries/get-hive-power-asset-general-info-query-options.ts","../../src/modules/wallet/consts/hive-account-operation-groups.ts","../../src/modules/wallet/consts/hive-operation-list.ts","../../src/modules/wallet/consts/hive-operation-orders.ts","../../src/modules/wallet/queries/get-hive-asset-transactions-query-options.ts","../../src/modules/wallet/queries/get-hbd-asset-transactions-query-options.ts","../../src/modules/wallet/queries/get-hive-power-asset-transactions-query-options.ts","../../src/modules/wallet/queries/get-hive-asset-metric-query-options.ts","../../src/modules/wallet/queries/get-hive-asset-withdrawal-routes-query-options.ts","../../src/modules/wallet/queries/get-hive-power-delegates-query-options.ts","../../src/modules/wallet/queries/get-hive-power-delegatings-query-options.ts","../../src/modules/market/queries/get-order-book-query-options.ts","../../src/modules/market/queries/get-market-statistics-query-options.ts","../../src/modules/market/queries/get-market-history-query-options.ts","../../src/modules/market/queries/get-hive-hbd-stats-query-options.ts","../../src/modules/market/queries/get-market-data-query-options.ts","../../src/modules/market/queries/get-trade-history-query-options.ts","../../src/modules/market/queries/get-feed-history-query-options.ts","../../src/modules/market/queries/get-current-median-history-price-query-options.ts","../../src/modules/market/mutations/use-limit-order-create.ts","../../src/modules/market/mutations/use-limit-order-cancel.ts","../../src/modules/market/requests.ts","../../src/modules/hive-engine/requests.ts","../../src/modules/hive-engine/queries/get-hive-engine-tokens-balances-query-options.ts","../../src/modules/hive-engine/queries/get-hive-engine-tokens-market-query-options.ts","../../src/modules/hive-engine/queries/get-hive-engine-tokens-metadata-query-options.ts","../../src/modules/hive-engine/queries/get-hive-engine-token-transactions-query-options.ts","../../src/modules/hive-engine/queries/get-hive-engine-token-metrics-query-options.ts","../../src/modules/hive-engine/queries/get-hive-engine-unclaimed-rewards-query-options.ts","../../src/modules/hive-engine/queries/get-all-hive-engine-tokens-query-options.ts","../../src/modules/hive-engine/utils/formatted-number.ts","../../src/modules/hive-engine/utils/hive-engine-token.ts","../../src/modules/hive-engine/queries/get-hive-engine-balances-with-usd-query-options.ts","../../src/modules/hive-engine/queries/get-hive-engine-token-general-info-query-options.ts","../../src/modules/spk/requests.ts","../../src/modules/spk/queries/get-spk-wallet-query-options.ts","../../src/modules/spk/queries/get-spk-markets-query-options.ts","../../src/modules/spk/utils/reward-spk.ts","../../src/modules/spk/queries/get-spk-asset-general-info-query-options.ts","../../src/modules/spk/queries/get-larynx-asset-general-info-query-options.ts","../../src/modules/spk/queries/get-larynx-power-asset-general-info-query-options.ts","../../src/modules/points/queries/get-points-query-options.ts","../../src/modules/points/queries/get-points-asset-general-info-query-options.ts","../../src/modules/points/queries/get-points-asset-transactions-query-options.ts","../../src/modules/wallet/queries/get-account-wallet-asset-info-query-options.ts","../../src/modules/wallet/types/asset-operation.ts","../../src/modules/wallet/mutations/use-transfer.ts","../../src/modules/wallet/mutations/use-transfer-point.ts","../../src/modules/wallet/mutations/use-delegate-vesting-shares.ts","../../src/modules/wallet/mutations/use-set-withdraw-vesting-route.ts","../../src/modules/wallet/mutations/use-transfer-spk.ts","../../src/modules/wallet/mutations/use-transfer-larynx.ts","../../src/modules/wallet/mutations/use-transfer-engine-token.ts","../../src/modules/wallet/mutations/use-transfer-to-savings.ts","../../src/modules/wallet/mutations/use-transfer-from-savings.ts","../../src/modules/wallet/mutations/use-transfer-to-vesting.ts","../../src/modules/wallet/mutations/use-withdraw-vesting.ts","../../src/modules/wallet/mutations/use-convert.ts","../../src/modules/wallet/mutations/use-claim-interest.ts","../../src/modules/wallet/mutations/use-claim-rewards.ts","../../src/modules/wallet/mutations/use-lock-larynx.ts","../../src/modules/wallet/mutations/use-power-larynx.ts","../../src/modules/wallet/mutations/use-delegate-engine-token.ts","../../src/modules/wallet/mutations/use-undelegate-engine-token.ts","../../src/modules/wallet/mutations/use-stake-engine-token.ts","../../src/modules/wallet/mutations/use-unstake-engine-token.ts","../../src/modules/wallet/mutations/use-claim-engine-rewards.ts","../../src/modules/wallet/mutations/use-engine-market-order.ts","../../src/modules/wallet/mutations/use-wallet-operation.ts","../../src/modules/wallet/mutations/use-delegate-rc.ts","../../src/modules/witnesses/mutations/use-witness-vote.ts","../../src/modules/witnesses/mutations/use-witness-proxy.ts","../../src/modules/witnesses/queries/get-witnesses-query-options.ts","../../src/modules/points/types/point-transaction-type.ts","../../src/modules/points/mutations/use-claim-points.ts","../../src/modules/search/queries/get-search-query-options.ts","../../src/modules/search/queries/get-similar-entries-query-options.ts","../../src/modules/search/queries/get-search-account-query-options.ts","../../src/modules/search/queries/get-search-topics-query-options.ts","../../src/modules/search/queries/get-search-api-infinite-query-options.ts","../../src/modules/search/queries/get-search-path-query-options.ts","../../src/modules/search/requests.ts","../../src/modules/promotions/queries/get-boost-plus-prices-query-options.ts","../../src/modules/promotions/queries/get-promote-price-query-options.ts","../../src/modules/promotions/queries/get-boost-plus-account-prices-query-options.ts","../../src/modules/promotions/mutations/use-boost-plus.ts","../../src/modules/auth/requests.ts"],"names":["ErrorType","parseChainError","error","errorDescription","errorMessage","errorString","testPattern","pattern","message","formatError","parsed","shouldTriggerAuthFallback","type","isResourceCreditsError","isInfoError","isNetworkError","broadcastWithMethod","method","username","ops","auth","authority","fetchedKey","fetchedToken","adapter","key","privateKey","PrivateKey","CONFIG","token","hs","broadcastWithFallback","loginType","hasPostingAuth","operationName","selectedMethod","hsError","chain","errors","shouldSkip","skipReason","prefetchedKey","prefetchedToken","skipReasons","errorMessages","useBroadcastMutation","mutationKey","operations","onSuccess","options","useMutation","payload","postingKey","accessToken","isDevelopment","getHeliusApiKey","Client","QueryClient","ConfigManager","setQueryClient","client","setPrivateApiHost","host","getValidatedBaseUrl","setImageHost","analyzeRedosRisk","unboundedRange","match","min","max","testRegexPerformance","regex","adversarialInputs","maxExecutionTime","input","start","duration","err","safeCompileRegex","maxLength","staticAnalysis","compileErr","runtimeTest","setDmcaLists","lists","coerceList","value","item","resolved","r","rejectedTagCount","broadcastJson","id","jjson","makeQueryClient","getQueryClient","EcencyQueriesManager","getQueryData","queryKey","getInfiniteQueryData","prefetchQuery","prefetchInfiniteQuery","generateClientServerQuery","useQuery","generateClientServerInfiniteQuery","useInfiniteQuery","encodeObj","o","decodeObj","dataToParse","Symbol","NaiMap","parseAsset","sval","sp","cachedFetch","getBoundFetch","isCommunity","isWrappedResponse","response","normalizeToWrappedResponse","limit","vestsToHp","vests","hivePerMVests","isEmptyDate","s","getDynamicPropsQueryOptions","queryOptions","QueryKeys","rawGlobalDynamic","rawFeedHistory","rawChainProps","rawRewardFund","totalVestingSharesAmount","totalVestingFundAmount","base","quote","fundRecentClaims","fundRewardBalance","hbdPrintRate","hbdInterestRate","headBlock","totalVestingFund","totalVestingShares","virtualSupply","vestingRewardPercent","accountCreationFee","getRewardFundQueryOptions","fundName","entryPath","author","permlink","filter","observer","startAuthor","startPermlink","activeUsername","sort","tag","order","onlyMeta","hours","usernames","following","mode","followType","query","code","follower","startFollowing","startFollower","excludeList","accounts","group","targetUsername","reference","target","name","communityName","account","proposalId","voter","q","hideLow","since","scrollId","votes","what","user","onlyEnabled","currency","filterKey","bucketSeconds","asset","seconds","startDate","endDate","coin","vsCurrency","fromTs","toTs","end","url","dimensions","metrics","dateRange","gameType","getAccountFullQueryOptions","profile","parseProfileMetadata","follow_stats","reputationValue","sanitizeTokens","tokens","meta","rest","safeMeta","postingJsonMetadata","extractAccountProfile","data","buildProfileMetadata","existingProfile","profileTokens","_ignoredVersion","profileRest","metadata","xe","nextTokens","parseAccounts","rawAccounts","x","jsonMetadata","getAccountsQueryOptions","getFollowCountQueryOptions","getFollowersQueryOptions","getFollowingQueryOptions","getMutedUsersQueryOptions","lookupAccountsQueryOptions","getSearchAccountsByUsernameQueryOptions","RESERVED_META_KEYS","checkUsernameWalletsPendingQueryOptions","wallets","walletItem","symbol","sanitizedMeta","address","showFlag","baseCandidate","metaTokenCandidates","metaSymbol","metaValue","getRelationshipBetweenAccountsQueryOptions","getAccountSubscriptionsQueryOptions","getBookmarksQueryOptions","getBookmarksInfiniteQueryOptions","infiniteQueryOptions","pageParam","json","lastPage","getFavouritesQueryOptions","getFavouritesInfiniteQueryOptions","checkFavouriteQueryOptions","result","getAccountRecoveriesQueryOptions","getAccountPendingRecoveryQueryOptions","getAccountReputationsQueryOptions","utils","ACCOUNT_OPERATION_GROUPS","ALL_ACCOUNT_OPERATIONS","acc","val","getTransactionsInfiniteQueryOptions","filters","num","operation","b","getBotsQueryOptions","getReferralsInfiniteQueryOptions","maxId","baseUrl","nextMaxId","getReferralsStatsQueryOptions","getFriendsInfiniteQueryOptions","enabled","accountNames","e","a","SEARCH_LIMIT","getSearchFriendsQueryOptions","getTrendingTagsQueryOptions","afterTag","tags","getTrendingTagsWithStatsQueryOptions","getFragmentsQueryOptions","getFragmentsInfiniteQueryOptions","getPromotedPostsQuery","getEntryActiveVotesQueryOptions","entry","getUserPostVoteQueryOptions","getContentQueryOptions","getContentRepliesQueryOptions","getPostHeaderQueryOptions","filterDmcaEntry","entryOrEntries","applyFilter","getPostQueryOptions","cleanPermlink","bridgeApiCall","endpoint","params","resolvePost","post","resp","getPost","resolvePosts","posts","validatedPosts","validateEntry","p","getPostsRanked","start_author","start_permlink","getAccountPosts","newEntry","requiredStringProps","prop","validatedEntry","getPostHeader","getDiscussion","validatedResp","getCommunity","getCommunities","last","normalizePost","getSubscriptions","getSubscribers","community","getRelationshipBetweenAccounts","getProfiles","SortOrder","sortDiscussions","discussion","allPayout","c","absNegative","isPinned","sortOrders","_a","_b","keyA","keyB","sorted","pinnedIndex","i","pinned","getDiscussionsQueryOptions","results","oldData","newData","optimisticEntries","fetchedPermlinks","missingOptimistic","opt","getDiscussionQueryOptions","getAccountPostsInfiniteQueryOptions","rpcParams","hasNextPage","getAccountPostsQueryOptions","getPostsRankedInfiniteQueryOptions","_options","sanitizedTag","pinnedEntry","nonPinnedEntries","combined","getPostsRankedQueryOptions","getReblogsQueryOptions","getRebloggedByQueryOptions","getSchedulesQueryOptions","getSchedulesInfiniteQueryOptions","getDraftsQueryOptions","getDraftsInfiniteQueryOptions","fetchUserImages","getImagesQueryOptions","getGalleryImagesQueryOptions","getImagesInfiniteQueryOptions","getCommentHistoryQueryOptions","signal","makeEntryPath","cleanAuthor","normalizedAuthor","normalizedPermlink","getDeletedEntryQueryOptions","isValid","history","body","title","getPostTipsQueryOptions","isEnabled","normalizeContainer","normalizeParent","normalizeWaveEntryFromApi","containerSource","container","parent","toEntryArray","getVisibleFirstLevelThreadItems","discussionItemsRaw","discussionItems","firstLevelItems","parent_author","parent_permlink","mapThreadItemsToWaveEntries","items","THREAD_CONTAINER_BATCH_SIZE","MAX_CONTAINERS_TO_SCAN","getThreads","scannedContainers","skipContainerId","containers","normalizedContainers","visibleItems","lastContainer","getWavesByHostQueryOptions","DEFAULT_TAG_FEED_LIMIT","getWavesByTagQueryOptions","getWavesFollowingQueryOptions","normalizedUsername","flattened","getWavesTrendingTagsQueryOptions","getNormalizePostQueryOptions","isEntry","getDays","createdDate","past","getAccountVoteHistoryInfiniteQueryOptions","dayLimit","historyObj","filtered","entries","obj","firstHistory","getProfilesQueryOptions","useAccountUpdate","queryClient","useQueryClient","_data","variables","Ue","useAccountRelationsUpdate","onError","kind","relationsQuery","actualRelation","buildVoteOp","weight","buildCommentOp","parentAuthor","parentPermlink","buildCommentOptionsOp","maxAcceptedPayout","percentHbd","allowVotes","allowCurationRewards","extensions","buildDeleteCommentOp","buildReblogOp","deleteReblog","buildTransferOp","from","to","amount","memo","buildMultiTransferOps","destinations","dest","buildRecurrentTransferOp","recurrence","executions","buildTransferToSavingsOp","buildTransferFromSavingsOp","requestId","buildCancelTransferFromSavingsOp","buildClaimInterestOps","buildTransferToVestingOp","buildWithdrawVestingOp","vestingShares","buildDelegateVestingSharesOp","delegator","delegatee","buildSetWithdrawVestingRouteOp","fromAccount","toAccount","percent","autoVest","buildConvertOp","owner","buildCollateralizedConvertOp","buildSpkCustomJsonOp","buildEngineOp","contractAction","contractPayload","contractName","buildEngineClaimOp","buildDelegateRcOp","delegatees","maxRc","delegateeArray","d","buildFollowOp","buildUnfollowOp","buildIgnoreOp","buildUnignoreOp","buildSetLastReadOps","date","lastReadDate","notifyOp","ecencyNotifyOp","buildWitnessVoteOp","witness","approve","buildWitnessProxyOp","proxy","buildProposalCreateOp","creator","buildProposalVoteOp","proposalIds","buildRemoveProposalOp","proposalOwner","buildUpdateProposalOp","dailyPay","subject","buildSubscribeOp","buildUnsubscribeOp","buildSetRoleOp","role","buildUpdateCommunityOp","props","buildPinPostOp","pin","buildMutePostOp","notes","mute","buildMuteUserOp","buildFlagPostOp","BuySellTransactionType","OrderIdPrefix","buildLimitOrderCreateOp","amountToSell","minToReceive","fillOrKill","expiration","orderId","formatNumber","decimals","buildLimitOrderCreateOpWithType","orderType","idPrefix","expirationStr","formattedAmountToSell","formattedMinToReceive","buildLimitOrderCancelOp","buildClaimRewardBalanceOp","rewardHive","rewardHbd","rewardVests","buildAccountUpdateOp","active","posting","memoKey","buildAccountUpdate2Op","buildAccountCreateOp","newAccountName","keys","fee","buildCreateClaimedAccountOp","buildClaimAccountOp","buildGrantPostingPermissionOp","currentPosting","grantedAccount","weightThreshold","existingIndex","newAccountAuths","newPosting","buildRevokePostingPermissionOp","revokedAccount","buildChangeRecoveryAccountOp","accountToRecover","newRecoveryAccount","buildRequestAccountRecoveryOp","recoveryAccount","newOwnerAuthority","buildRecoverAccountOp","recentOwnerAuthority","buildBoostOp","buildBoostOpWithPoints","points","buildBoostPlusOp","buildPromoteOp","buildPointTransferOp","sender","receiver","buildMultiPointTransferOps","destArray","buildCommunityRegistrationOp","buildActiveCustomJsonOp","operationId","buildPostingCustomJsonOp","useFollow","_result","useUnfollow","useBookmarkAdd","useBookmarkDelete","bookmarkId","useAccountFavouriteAdd","useAccountFavouriteDelete","dedupeAndSortKeyAuths","existing","additions","merged","useAccountUpdateKeyAuths","accountData","keepCurrent","currentKey","keysToRevoke","keysToRevokeByAuthority","prepareAuth","keyName","Xe","allKeysToRevoke","existingKeys","values","useAccountUpdatePassword","updateKeys","newPassword","currentPassword","useAccountRevokePosting","accountName","operationBody","ctx","useAccountUpdateRecovery","email","useAccountRevokeKey","revokingKey","tr","useClaimAccount","useGrantPostingPermission","useCreateAccount","HIVE_VOTING_MANA_REGENERATION_SECONDS","vestsToRshares","votingPowerValue","votePerc","toDhiveAccountForVotingMana","votingPower","powerRechargeTime","power","downVotingPower","totalShares","elapsed","maxMana","currentMana","currentManaPerc","rcPower","votingValue","dynamicProps","totalVests","vesting","received","delegated","rShares","OPERATION_AUTHORITY_MAP","getCustomJsonAuthority","customJsonOp","opType","customJson","getProposalAuthority","proposalOp","getOperationAuthority","op","getRequiredAuthority","highestAuthority","useSignOperationByKey","keyOrSeed","cryptoUtils","useSignOperationByKeychain","keyType","useSignOperationByHivesigner","callbackUri","getChainPropertiesQueryOptions","useAddFragment","page","index","useEditFragment","fragmentId","fragment","useRemoveFragment","parseJsonResponse","errorData","text","signUp","referral","subscribeEmail","usrActivity","ty","bl","tx","getNotifications","saveNotificationSetting","system","allows_notify","notify_types","getNotificationSetting","markNotifications","addImage","uploadImage","file","fetchApi","formData","deleteImage","imageId","addDraft","updateDraft","draftId","deleteDraft","addSchedule","schedule","reblog","deleteSchedule","moveSchedule","getPromotedPost","onboardEmail","friend","dataBody","useAddDraft","qc","useUpdateDraft","useDeleteDraft","prev","useAddSchedule","useDeleteSchedule","useMoveSchedule","useAddImage","useDeleteImage","img","useUploadImage","getEntryFromCache","setEntryInCache","mutateEntry","updater","path","updated","EntriesCacheManagement","updateVotes","payout","updateReblogsCount","count","updateRepliesCount","addReply","reply","updateEntries","invalidateEntry","getEntry","useVote","newVotes","v","newPayout","useReblog","newCount","useComment","beneficiaries","sortedBeneficiaries","isPost","activityType","queriesToInvalidate","discussionsAuthor","discussionsPermlink","addOptimisticDiscussionEntry","rootAuthor","rootPermlink","queries","removeOptimisticDiscussionEntry","snapshots","restoreDiscussionSnapshots","updateEntryInCache","updates","previous","restoreEntryInCache","useDeleteComment","_error","_variables","context","useCrossPost","useUpdateReply","usePromote","DEFAULT_VALIDATE_POST_DELAYS","delay","ms","resolve","getContent","validatePostCreating","attempts","delays","waitMs","mutations_exports","__export","useRecordActivity","getLocationInfo","locationInfo","domain","getDiscoverLeaderboardQueryOptions","getDiscoverCurationQueryOptions","accountsResponse","element","curator","receivedVestingShares","delegatedVestingShares","vestingWithdrawRate","effectiveVest","getPageStatsQueryOptions","sortedDimensions","sortedMetrics","queries_exports","getAccountTokenQueryOptions","getAccountVideosQueryOptions","getDecodeMemoQueryOptions","HiveSignerIntegration","memoQueryOptions","memoDecoded","tokenQueryOptions","ThreeSpeakIntegration","getHivePoshLinksQueryOptions","getStatsQueryOptions","getRcStatsQueryOptions","getAccountRcQueryOptions","RCAPI","getGameStatusCheckQueryOptions","useGameClaim","recordActivity","useSubscribeCommunity","useUnsubscribeCommunity","useMutePost","useSetCommunityRole","team","idx","useUpdateCommunity","useRegisterCommunityRewards","usePinPost","getCommunitiesQueryOptions","getCommunityContextQueryOptions","getCommunityQueryOptions","getCommunitySubscribersQueryOptions","getAccountNotificationsInfiniteQueryOptions","getRewardedCommunitiesQueryOptions","ROLES","roleMap","getCommunityType","type_id","getCommunityPermissions","communityType","userRole","subscribed","canPost","canComment","isModerator","getNotificationsUnreadCountQueryOptions","getNotificationsInfiniteQueryOptions","NotificationFilter","NotifyTypes","ALL_NOTIFY_TYPES","NotificationViewType","getNotificationsSettingsQueryOptions","initialMuted","getAnnouncementsQueryOptions","useMarkNotificationsRead","previousNotifications","updatedData","unreadCount","useSetLastRead","getProposalQueryOptions","proposal","getProposalsQueryOptions","proposals","expired","getProposalVotesInfiniteQueryOptions","startParam","list","l","getUserProposalVotesQueryOptions","vote","useProposalVote","useProposalCreate","getVestingDelegationsQueryOptions","fetchLimit","getConversionRequestsQueryOptions","getCollateralizedConversionRequestsQueryOptions","getSavingsWithdrawFromQueryOptions","getWithdrawRoutesQueryOptions","getOpenOrdersQueryOptions","getOutgoingRcDelegationsInfiniteQueryOptions","delegations","delegation","getIncomingRcQueryOptions","getReceivedVestingSharesQueryOptions","getRecurrentTransfersQueryOptions","normalizeString","trimmed","normalizeNumber","direct","parseToken","rawToken","extractTokens","record","resolveUsername","getPortfolioQueryOptions","getHiveAssetGeneralInfoQueryOptions","marketTicker","marketPrice","liquidBalance","savingsBalance","getHbdAssetGeneralInfoQueryOptions","price","getAPR","currentInflationRate","totalVestingFunds","getHivePowerAssetGeneralInfoQueryOptions","delegatedVests","receivedVests","withdrawRateVests","remainingToWithdrawVests","nextWithdrawalVests","hpBalance","outgoingDelegationsHp","incomingDelegationsHp","pendingPowerDownHp","nextPowerDownHp","totalBalance","availableHp","HIVE_ACCOUNT_OPERATION_GROUPS","HIVE_OPERATION_LIST","operationOrders","HIVE_OPERATION_ORDERS","HIVE_OPERATION_NAME_BY_ID","isHiveOperationName","resolveHiveOperationFilters","rawValues","hasAll","uniqueValues","operationIds","filterArgs","makeBitMaskFilter","allowedOperations","low","high","getHiveAssetTransactionsQueryOptions","__","pages","pageParams","getHbdAssetTransactionsQueryOptions","getHivePowerAssetTransactionsQueryOptions","userSelectedOperations","hasAllFilter","formatDate","pad","n","subtractSeconds","getHiveAssetMetricQueryOptions","hive","non_hive","open","_","prevStartDate","getHiveAssetWithdrawalRoutesQueryOptions","getHivePowerDelegatesInfiniteQueryOptions","getHivePowerDelegatingsQueryOptions","getOrderBookQueryOptions","getMarketStatisticsQueryOptions","getMarketHistoryQueryOptions","getHiveHbdStatsQueryOptions","stats","now","oneDayAgo","dayChange","getMarketDataQueryOptions","getTradeHistoryQueryOptions","getFeedHistoryQueryOptions","getCurrentMedianHistoryPriceQueryOptions","useLimitOrderCreate","useLimitOrderCancel","getMarketData","getCurrencyRate","cur","getCurrencyTokenRate","getCurrencyRates","getHivePrice","ENGINE_RPC_HEADERS","engineRpc","engineRpcSafe","fallback","getHiveEngineOrderBook","baseParams","buy","sell","sortByPriceDesc","left","sortByPriceAsc","right","getHiveEngineTradeHistory","getHiveEngineOpenOrders","buyRaw","sellRaw","formatTotal","quantity","getHiveEngineMetrics","getHiveEngineTokensMarket","getHiveEngineTokensBalances","getHiveEngineTokensMetadata","getHiveEngineTokenTransactions","offset","getHiveEngineTokenMetrics","interval","getHiveEngineUnclaimedRewards","getHiveEngineTokensBalancesQueryOptions","getHiveEngineTokensMarketQueryOptions","getHiveEngineTokensMetadataQueryOptions","getHiveEngineTokenTransactionsQueryOptions","getHiveEngineTokensMetricsQueryOptions","getHiveEngineUnclaimedRewardsQueryOptions","pending_token","getAllHiveEngineTokensQueryOptions","formattedNumber","opts","fractionDigits","prefix","suffix","out","av","HiveEngineToken","getHiveEngineBalancesWithUsdQueryOptions","allTokens","balances","t","pricePerHive","balance","tokenMetadata","metric","m","lastPrice","balanceAmount","usdValue","getHiveEngineTokenGeneralInfoQueryOptions","hiveQuery","hiveData","metadataList","balanceList","marketList","stakedBalance","unstakingBalance","parts","getSpkWallet","getSpkMarkets","getSpkWalletQueryOptions","getSpkMarketsQueryOptions","node","rewardSpk","sstats","diff","simpleInterest","format","getSpkAssetGeneralInfoQueryOptions","wallet","market","hiveAsset","accountBalance","getLarynxAssetGeneralInfoQueryOptions","getLarynxPowerAssetGeneralInfoQueryOptions","getPointsQueryOptions","pointsResponse","transactionsResponse","transactions","getPointsAssetGeneralInfoQueryOptions","getPointsAssetTransactionsQueryOptions","created","getAccountWalletAssetInfoQueryOptions","fetchQuery","qo","convertPriceToUserCurrency","assetInfo","conversionRate","portfolioQuery","getPortfolioAssetInfo","assetItem","extraItem","dataKey","numValue","portfolioAssetInfo","AssetOperation","useTransfer","useTransferPoint","useDelegateVestingShares","useSetWithdrawVestingRoute","useTransferSpk","useTransferLarynx","useTransferEngineToken","useTransferToSavings","useTransferFromSavings","useTransferToVesting","useWithdrawVesting","useConvert","useClaimInterest","useClaimRewards","keysToInvalidate","useLockLarynx","usePowerLarynx","useDelegateEngineToken","useUndelegateEngineToken","useStakeEngineToken","useUnstakeEngineToken","useClaimEngineRewards","useEngineMarketOrder","buildHiveOperations","numAmount","parsedAmount","buildEngineOperations","getWalletOperationAuthority","useWalletOperation","hiveOps","engineOps","useDelegateRc","useWitnessVote","useWitnessProxy","getWitnessesInfiniteQueryOptions","PointTransactionType","useClaimPoints","searchQueryOptions","scroll_id","getControversialRisingInfiniteQueryOptions","sinceDate","buildQuery","retry","json_metadata","_tag","ind","part","getSimilarEntriesQueryOptions","rawEntries","y","getSearchAccountQueryOptions","random","getSearchTopicsQueryOptions","getSearchApiInfiniteQueryOptions","getSearchPathQueryOptions","search","searchAccount","searchTag","searchPath","getBoostPlusPricesQueryOptions","getPromotePriceQueryOptions","getBoostPlusAccountPricesQueryOptions","responseData","useBoostPlus","hsTokenRenew"],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n useMutation,\n type MutationKey,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { Operation, PrivateKey, TransactionConfirmation } from \"@hiveio/dhive\";\nimport { CONFIG } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { shouldTriggerAuthFallback } from \"@/modules/core/errors\";\nimport type { AuthorityLevel } from \"@/modules/operations/authority-map\";\nimport hs from \"hivesigner\";\n\n/**\n * Broadcasts operations using a specific auth method.\n *\n * @param method - Auth method to use ('key', 'hiveauth', 'hivesigner', 'keychain', 'custom')\n * @param username - Hive username to broadcast for\n * @param ops - Operations to broadcast\n * @param auth - AuthContextV2 with adapter and configuration\n * @param authority - Key authority to use (posting, active, owner, or memo)\n * @param fetchedKey - Optional pre-fetched key to avoid duplicate fetches\n * @param fetchedToken - Optional pre-fetched access token to avoid duplicate fetches\n * @returns Transaction confirmation from the blockchain\n * @throws Error if method is not available or broadcast fails\n */\nasync function broadcastWithMethod(\n method: string,\n username: string,\n ops: Operation[],\n auth?: AuthContextV2,\n authority: AuthorityLevel = 'posting',\n fetchedKey?: string | null,\n fetchedToken?: string | null\n): Promise<TransactionConfirmation> {\n const adapter = auth?.adapter;\n\n switch (method) {\n case 'key': {\n if (!adapter) {\n throw new Error('No adapter provided for key-based auth');\n }\n\n // Use pre-fetched key if provided, otherwise fetch it\n let key: string | null | undefined = fetchedKey;\n\n if (key === undefined) {\n // Key not pre-fetched, fetch it now based on authority\n switch (authority) {\n case 'owner':\n if (adapter.getOwnerKey) {\n key = await adapter.getOwnerKey(username);\n } else {\n throw new Error(\n `Owner key not supported by adapter. Owner operations (like account recovery) ` +\n `require master password login or manual key entry.`\n );\n }\n break;\n\n case 'active':\n if (adapter.getActiveKey) {\n key = await adapter.getActiveKey(username);\n }\n break;\n\n case 'memo':\n if (adapter.getMemoKey) {\n key = await adapter.getMemoKey(username);\n } else {\n throw new Error(\n `Memo key not supported by adapter. Use memo encryption methods instead.`\n );\n }\n break;\n\n case 'posting':\n default:\n key = await adapter.getPostingKey(username);\n break;\n }\n }\n\n if (!key) {\n throw new Error(`No ${authority} key available for ${username}`);\n }\n\n // Attempt broadcast with key\n const privateKey = PrivateKey.fromString(key);\n return await CONFIG.hiveClient.broadcast.sendOperations(ops, privateKey);\n }\n\n case 'hiveauth': {\n if (!adapter?.broadcastWithHiveAuth) {\n throw new Error('HiveAuth not supported by adapter');\n }\n return await adapter.broadcastWithHiveAuth(username, ops, authority);\n }\n\n case 'hivesigner': {\n if (!adapter) {\n throw new Error('No adapter provided for HiveSigner auth');\n }\n\n // Use pre-fetched token if provided, otherwise fetch it\n const token = fetchedToken !== undefined\n ? fetchedToken\n : await adapter.getAccessToken(username);\n\n if (!token) {\n throw new Error(`No access token available for ${username}`);\n }\n\n const client = new hs.Client({ accessToken: token });\n const response = await client.broadcast(ops);\n return response.result;\n }\n\n case 'keychain': {\n if (!adapter?.broadcastWithKeychain) {\n throw new Error('Keychain not supported by adapter');\n }\n return await adapter.broadcastWithKeychain(username, ops, authority);\n }\n\n case 'custom': {\n if (!auth?.broadcast) {\n throw new Error('No custom broadcast function provided');\n }\n return (await auth.broadcast(ops, authority)) as TransactionConfirmation;\n }\n\n default:\n throw new Error(`Unknown auth method: ${method}`);\n }\n}\n\n/**\n * Attempts to broadcast operations using multiple auth methods in fallback chain.\n * Implements sophisticated fallback pattern from mobile app.\n *\n * @param username - Hive username to broadcast for\n * @param ops - Operations to broadcast\n * @param auth - AuthContextV2 with adapter and fallback configuration\n * @param authority - Key authority to use ('posting' | 'active' | 'owner' | 'memo'), defaults to 'posting'\n * @returns Transaction confirmation from the blockchain\n * @throws Error if all auth methods fail or if a non-auth error occurs\n *\n * @remarks\n * **Preferred Behavior (when adapter.getLoginType exists):**\n * - Calls adapter.getLoginType() to determine user's actual auth method\n * - Uses ONLY that method (no fallbacks) - more predictable and faster\n * - If it fails, throws the error immediately\n *\n * **Fallback Behavior (for backward compatibility):**\n * - Tries each auth method in the fallback chain order\n * - Only continues to next method if error is auth-related (missing authority, token expired)\n * - Stops immediately for non-auth errors (RC exhaustion, network errors, validation errors)\n * - Collects all errors and provides detailed failure message\n *\n * @example\n * ```typescript\n * // Preferred: Adapter with getLoginType (single method, no fallbacks)\n * const auth: AuthContextV2 = {\n * adapter: myAdapter, // includes getLoginType()\n * };\n *\n * // Legacy: Explicit fallback chain (tries multiple methods)\n * const auth: AuthContextV2 = {\n * adapter: myAdapter,\n * fallbackChain: ['key', 'hiveauth', 'hivesigner'],\n * };\n * ```\n */\nasync function broadcastWithFallback(\n username: string,\n ops: Operation[],\n auth?: AuthContextV2,\n authority: AuthorityLevel = 'posting'\n): Promise<TransactionConfirmation> {\n const adapter = auth?.adapter;\n\n // PREFERRED APPROACH: If adapter provides getLoginType, use smart auth strategy\n // This avoids unnecessary fallback attempts and is more predictable\n if (adapter?.getLoginType) {\n const loginType = await adapter.getLoginType(username);\n\n if (loginType) {\n // SMART AUTH STRATEGY: Optimize based on login type + authority + credentials\n\n // Check if user has granted ecency.app posting authority\n const hasPostingAuth = adapter.hasPostingAuthorization\n ? await adapter.hasPostingAuthorization(username)\n : false;\n\n // OPTIMIZATION: Use HiveSigner token for posting ops when posting auth is granted\n // This is faster than direct key signing or HiveAuth for key-based logins\n if (\n authority === 'posting' &&\n hasPostingAuth &&\n loginType === 'key'\n ) {\n try {\n // Try HiveSigner API first (faster)\n return await broadcastWithMethod('hivesigner', username, ops, auth, authority);\n } catch (error) {\n // Only fallback if this is an auth-related error\n // Otherwise, rethrow the original error (e.g., network errors, validation errors)\n if (!shouldTriggerAuthFallback(error)) {\n throw error;\n }\n // Fallback to direct key signing if token auth method fails\n console.warn('[SDK] HiveSigner token auth failed, falling back to key:', error);\n }\n }\n\n // OPTIMIZATION: Use HiveSigner token for HiveAuth users with posting auth (faster)\n if (\n authority === 'posting' &&\n hasPostingAuth &&\n loginType === 'hiveauth'\n ) {\n try {\n // Try HiveSigner API first (faster)\n return await broadcastWithMethod('hivesigner', username, ops, auth, authority);\n } catch (error) {\n // Only fallback if this is an auth-related error\n // Otherwise, rethrow the original error (e.g., network errors, validation errors)\n if (!shouldTriggerAuthFallback(error)) {\n throw error;\n }\n // Fallback to HiveAuth if token auth method fails\n console.warn('[SDK] HiveSigner token auth failed, falling back to HiveAuth:', error);\n }\n }\n\n // Use user's actual login method\n try {\n return await broadcastWithMethod(loginType, username, ops, auth, authority);\n } catch (error) {\n // Check if error is due to missing authority (e.g., posting key trying active op)\n if (shouldTriggerAuthFallback(error)) {\n // Show auth upgrade UI if available (only for posting/active operations)\n if (\n adapter.showAuthUpgradeUI &&\n (authority === 'posting' || authority === 'active')\n ) {\n // Guard against empty operations array\n const operationName = ops.length > 0 ? ops[0][0] : 'unknown';\n const selectedMethod = await adapter.showAuthUpgradeUI(authority, operationName);\n if (!selectedMethod) {\n throw new Error(`Operation requires ${authority} authority. User declined alternate auth.`);\n }\n\n // User selected a specific method - delegate to broadcastWithMethod\n // This handles all auth methods (hiveauth, hivesigner, key, keychain, custom, etc.)\n // broadcastWithMethod already contains all necessary validation and method-specific logic\n return await broadcastWithMethod(selectedMethod, username, ops, auth, authority);\n }\n }\n\n // Not an auth error, or no upgrade UI available - throw original error\n throw error;\n }\n }\n\n // loginType is null — user's auth method is unknown (e.g., incomplete login data)\n if (authority === 'posting') {\n // For posting ops, try HiveSigner — access token is usually available for all logins\n try {\n return await broadcastWithMethod('hivesigner', username, ops, auth, authority);\n } catch (hsError) {\n if (shouldTriggerAuthFallback(hsError) && adapter.showAuthUpgradeUI) {\n const operationName = ops.length > 0 ? ops[0][0] : 'unknown';\n const selectedMethod = await adapter.showAuthUpgradeUI(authority, operationName);\n if (!selectedMethod) {\n throw new Error(`No login type available for ${username}. Please log in again.`);\n }\n return await broadcastWithMethod(selectedMethod, username, ops, auth, authority);\n }\n throw hsError;\n }\n } else if (authority === 'active' && adapter.showAuthUpgradeUI) {\n // For active ops, show auth upgrade dialog — no silent fallback possible\n const operationName = ops.length > 0 ? ops[0][0] : 'unknown';\n const selectedMethod = await adapter.showAuthUpgradeUI(authority, operationName);\n if (!selectedMethod) {\n throw new Error(`Operation requires ${authority} authority. User declined alternate auth.`);\n }\n return await broadcastWithMethod(selectedMethod, username, ops, auth, authority);\n }\n }\n\n // FALLBACK APPROACH: For backward compatibility, use fallback chain\n // This is only used if adapter doesn't provide getLoginType\n const chain = auth?.fallbackChain ?? ['key', 'hiveauth', 'hivesigner', 'keychain', 'custom'];\n const errors: Map<string, Error> = new Map();\n\n for (const method of chain) {\n try {\n // Check if method is available before attempting\n let shouldSkip = false;\n let skipReason = '';\n let prefetchedKey: string | null | undefined;\n let prefetchedToken: string | null | undefined;\n\n switch (method) {\n case 'key':\n if (!adapter) {\n shouldSkip = true;\n skipReason = 'No adapter provided';\n } else {\n // Pre-fetch key to check availability (will be reused in broadcast)\n let key: string | null | undefined;\n\n switch (authority) {\n case 'owner':\n if (adapter.getOwnerKey) {\n key = await adapter.getOwnerKey(username);\n }\n break;\n case 'active':\n if (adapter.getActiveKey) {\n key = await adapter.getActiveKey(username);\n }\n break;\n case 'memo':\n if (adapter.getMemoKey) {\n key = await adapter.getMemoKey(username);\n }\n break;\n case 'posting':\n default:\n key = await adapter.getPostingKey(username);\n break;\n }\n\n if (!key) {\n shouldSkip = true;\n skipReason = `No ${authority} key available`;\n } else {\n prefetchedKey = key; // Store for reuse\n }\n }\n break;\n case 'hiveauth':\n if (!adapter?.broadcastWithHiveAuth) {\n shouldSkip = true;\n skipReason = 'HiveAuth not supported by adapter';\n }\n break;\n case 'hivesigner':\n if (!adapter) {\n shouldSkip = true;\n skipReason = 'No adapter provided';\n } else {\n // Pre-fetch token to check availability (will be reused in broadcast)\n const token = await adapter.getAccessToken(username);\n if (!token) {\n shouldSkip = true;\n skipReason = 'No access token available';\n } else {\n prefetchedToken = token; // Store for reuse\n }\n }\n break;\n case 'keychain':\n if (!adapter?.broadcastWithKeychain) {\n shouldSkip = true;\n skipReason = 'Keychain not supported by adapter';\n }\n break;\n case 'custom':\n if (!auth?.broadcast) {\n shouldSkip = true;\n skipReason = 'No custom broadcast function provided';\n }\n break;\n }\n\n if (shouldSkip) {\n errors.set(method, new Error(`Skipped: ${skipReason}`));\n continue;\n }\n\n // Method is available, attempt broadcast with pre-fetched credentials\n return await broadcastWithMethod(method, username, ops, auth, authority, prefetchedKey, prefetchedToken);\n } catch (error) {\n // Record actual error from failed broadcast attempt\n errors.set(method, error as Error);\n\n // Only continue fallback if error suggests trying another method\n if (!shouldTriggerAuthFallback(error)) {\n // If it's not an auth error, throw immediately (e.g., RC error, network error)\n throw error;\n }\n }\n }\n\n // FIX #2: Improved error message distinguishes between skips and real failures\n const hasRealAttempts = Array.from(errors.values()).some(\n error => !error.message.startsWith('Skipped:')\n );\n\n if (!hasRealAttempts) {\n // All methods were skipped (none attempted)\n const skipReasons = Array.from(errors.entries())\n .map(([method, error]) => `${method}: ${error.message}`)\n .join(', ');\n throw new Error(\n `[SDK][Broadcast] No auth methods attempted for ${username}. ${skipReasons}`\n );\n }\n\n // At least one method was attempted but all failed\n const errorMessages = Array.from(errors.entries())\n .map(([method, error]) => `${method}: ${error.message}`)\n .join(', ');\n\n throw new Error(\n `[SDK][Broadcast] All auth methods failed for ${username}. Errors: ${errorMessages}`\n );\n}\n\n/**\n * React Query mutation hook for broadcasting Hive operations.\n * Supports multiple authentication methods with automatic fallback.\n *\n * @template T - Type of the mutation payload\n * @param mutationKey - React Query mutation key for cache management\n * @param username - Hive username (required for broadcast)\n * @param operations - Function that converts payload to Hive operations\n * @param onSuccess - Success callback after broadcast completes\n * @param auth - Authentication context (supports both legacy AuthContext and new AuthContextV2)\n * @param authority - Key authority to use ('posting' | 'active' | 'owner' | 'memo'), defaults to 'posting'\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Authentication Flow:**\n *\n * 1. **With AuthContextV2 + adapter + enableFallback** (recommended for new code):\n * - Tries auth methods in fallbackChain order\n * - Smart fallback: only retries on auth errors, not RC/network errors\n * - Uses platform adapter for storage, UI, and broadcasting\n *\n * 2. **With legacy AuthContext** (backward compatible):\n * - Tries auth.broadcast() first (custom implementation)\n * - Falls back to postingKey if available\n * - Falls back to accessToken (HiveSigner) if available\n * - Throws if no auth method available\n *\n * **Backward Compatibility:**\n * - All existing code using AuthContext will continue to work\n * - AuthContextV2 extends AuthContext, so it's a drop-in replacement\n * - enableFallback defaults to false if no adapter provided\n *\n * @example\n * ```typescript\n * // New pattern with platform adapter and fallback\n * const mutation = useBroadcastMutation(\n * ['vote'],\n * username,\n * (payload) => [voteOperation(payload)],\n * () => console.log('Success!'),\n * {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * },\n * 'posting'\n * );\n *\n * // Legacy pattern (still works)\n * const mutation = useBroadcastMutation(\n * ['vote'],\n * username,\n * (payload) => [voteOperation(payload)],\n * () => console.log('Success!'),\n * { postingKey: 'wif-key' }\n * );\n * ```\n */\nexport function useBroadcastMutation<T>(\n mutationKey: MutationKey = [],\n username: string | undefined,\n operations: (payload: T) => Operation[],\n onSuccess: UseMutationOptions<unknown, Error, T>[\"onSuccess\"] = () => {},\n auth?: AuthContextV2,\n authority: AuthorityLevel = 'posting',\n options?: {\n onMutate?: UseMutationOptions<unknown, Error, T>[\"onMutate\"];\n onError?: UseMutationOptions<unknown, Error, T>[\"onError\"];\n onSettled?: UseMutationOptions<unknown, Error, T>[\"onSettled\"];\n }\n) {\n return useMutation({\n onSuccess,\n onMutate: options?.onMutate,\n onError: options?.onError,\n onSettled: options?.onSettled,\n mutationKey: [...mutationKey, username],\n mutationFn: async (payload: T) => {\n if (!username) {\n throw new Error(\n \"[Core][Broadcast] Attempted to call broadcast API with anon user\"\n );\n }\n\n const ops = operations(payload);\n\n // New: Try auth methods in fallback chain (if enabled)\n if (auth?.enableFallback !== false && auth?.adapter) {\n return broadcastWithFallback(username, ops, auth, authority);\n }\n\n // Legacy behavior: try methods in fixed order (backward compatible)\n if (auth?.broadcast) {\n return auth.broadcast(ops, authority);\n }\n\n const postingKey = auth?.postingKey;\n if (postingKey) {\n // Legacy auth only supports posting authority\n if (authority !== 'posting') {\n throw new Error(\n `[SDK][Broadcast] Legacy auth only supports posting authority, but '${authority}' was requested. ` +\n `Use AuthContextV2 with an adapter for ${authority} operations.`\n );\n }\n\n const privateKey = PrivateKey.fromString(postingKey);\n\n return CONFIG.hiveClient.broadcast.sendOperations(\n ops,\n privateKey\n );\n }\n\n const accessToken = auth?.accessToken;\n if (accessToken) {\n const client = new hs.Client({ accessToken });\n const response = await client.broadcast(ops);\n return response.result;\n }\n\n throw new Error(\n \"[SDK][Broadcast] – cannot broadcast w/o posting key or token\"\n );\n },\n });\n}\n","/**\n * Chain error handling utilities\n * Extracted from web's operations.ts and mobile's dhive.ts error handling patterns\n */\n\nexport enum ErrorType {\n COMMON = \"common\",\n INFO = \"info\",\n INSUFFICIENT_RESOURCE_CREDITS = \"insufficient_resource_credits\",\n MISSING_AUTHORITY = \"missing_authority\",\n TOKEN_EXPIRED = \"token_expired\",\n NETWORK = \"network\",\n TIMEOUT = \"timeout\",\n VALIDATION = \"validation\",\n}\n\nexport interface ParsedChainError {\n message: string;\n type: ErrorType;\n originalError?: any;\n}\n\n/**\n * Parses Hive blockchain errors into standardized format.\n * Extracted from web's operations.ts and mobile's dhive.ts error handling.\n *\n * @param error - The error object or string from a blockchain operation\n * @returns Parsed error with user-friendly message and categorized type\n *\n * @example\n * ```typescript\n * try {\n * await vote(...);\n * } catch (error) {\n * const parsed = parseChainError(error);\n * console.log(parsed.message); // \"Insufficient Resource Credits. Please wait or power up.\"\n * console.log(parsed.type); // ErrorType.INSUFFICIENT_RESOURCE_CREDITS\n * }\n * ```\n */\nexport function parseChainError(error: any): ParsedChainError {\n // Extract error strings from various error formats\n // Check both error_description and message independently for pattern matching\n const errorDescription = error?.error_description ? String(error.error_description) : '';\n const errorMessage = error?.message ? String(error.message) : '';\n const errorString = errorDescription || errorMessage || String(error || '');\n\n // Helper function to test patterns against both fields and fallback errorString\n const testPattern = (pattern: RegExp): boolean => {\n // Check error_description first (priority)\n if (errorDescription && pattern.test(errorDescription)) return true;\n // Then check message\n if (errorMessage && pattern.test(errorMessage)) return true;\n // Finally check fallback errorString (handles plain string inputs)\n if (errorString && pattern.test(errorString)) return true;\n return false;\n };\n\n // Resource credits (from both web and mobile patterns)\n if (\n testPattern(/please wait to transact/i) ||\n testPattern(/insufficient rc/i) ||\n testPattern(/rc mana|rc account|resource credits/i)\n ) {\n return {\n message: \"Insufficient Resource Credits. Please wait or power up.\",\n type: ErrorType.INSUFFICIENT_RESOURCE_CREDITS,\n originalError: error,\n };\n }\n\n // Min comment interval (from web operations.ts line 29)\n if (testPattern(/you may only post once every/i)) {\n return {\n message: \"Please wait before posting again (minimum 3 second interval between comments).\",\n type: ErrorType.COMMON,\n originalError: error,\n };\n }\n\n // Identical vote (from web operations.ts line 31)\n if (testPattern(/your current vote on this comment is identical/i)) {\n return {\n message: \"You have already voted with the same weight.\",\n type: ErrorType.INFO,\n originalError: error,\n };\n }\n\n // Must claim something (from web operations.ts line 33)\n if (testPattern(/must claim something/i)) {\n return {\n message: \"You must claim rewards before performing this action.\",\n type: ErrorType.INFO,\n originalError: error,\n };\n }\n\n // Cannot claim that much VESTS (from web operations.ts line 35)\n if (testPattern(/cannot claim that much vests/i)) {\n return {\n message: \"Cannot claim that amount. Please check your pending rewards.\",\n type: ErrorType.INFO,\n originalError: error,\n };\n }\n\n // Cannot delete comment with positive votes (from web operations.ts line 42)\n if (testPattern(/cannot delete a comment with net positive/i)) {\n return {\n message: \"Cannot delete a comment with positive votes.\",\n type: ErrorType.INFO,\n originalError: error,\n };\n }\n\n // Comment has children (from web operations.ts line 44)\n if (testPattern(/children == 0/i)) {\n return {\n message: \"Cannot delete a comment with replies.\",\n type: ErrorType.COMMON,\n originalError: error,\n };\n }\n\n // Comment already paid out (from web operations.ts line 46)\n if (testPattern(/comment_cashout/i)) {\n return {\n message: \"Cannot modify a comment that has already been paid out.\",\n type: ErrorType.COMMON,\n originalError: error,\n };\n }\n\n // Voting on paid out post (from web operations.ts line 48)\n if (testPattern(/votes evaluating for comment that is paid out is forbidden/i)) {\n return {\n message: \"Cannot vote on posts that have already been paid out.\",\n type: ErrorType.COMMON,\n originalError: error,\n };\n }\n\n // No key available (SDK internal - from broadcastWithMethod when key not stored)\n if (testPattern(/no (active|owner|posting|memo) key available/i)) {\n return {\n message: \"Key not available. Please provide your key to sign this operation.\",\n type: ErrorType.MISSING_AUTHORITY,\n originalError: error,\n };\n }\n\n // Missing active authority (from web operations.ts line 50)\n if (testPattern(/missing active authority/i)) {\n return {\n message: \"Missing active authority. This operation requires your active key.\",\n type: ErrorType.MISSING_AUTHORITY,\n originalError: error,\n };\n }\n\n // Missing owner authority (from web operations.ts line 52)\n if (testPattern(/missing owner authority/i)) {\n return {\n message: \"Missing owner authority. This operation requires your owner key.\",\n type: ErrorType.MISSING_AUTHORITY,\n originalError: error,\n };\n }\n\n // Missing posting authority (general pattern)\n if (testPattern(/missing (required )?posting authority/i)) {\n return {\n message: \"Missing posting authority. Please check your login method.\",\n type: ErrorType.MISSING_AUTHORITY,\n originalError: error,\n };\n }\n\n // Token expired (general pattern)\n if (testPattern(/token expired/i) || testPattern(/invalid token/i)) {\n return {\n message: \"Authentication token expired. Please log in again.\",\n type: ErrorType.TOKEN_EXPIRED,\n originalError: error,\n };\n }\n\n // Already reblogged\n if (testPattern(/has already reblogged/i) || testPattern(/already reblogged this post/i)) {\n return {\n message: \"You have already reblogged this post.\",\n type: ErrorType.INFO,\n originalError: error,\n };\n }\n\n // Duplicate transaction\n if (testPattern(/duplicate transaction/i)) {\n return {\n message: \"This transaction has already been processed.\",\n type: ErrorType.INFO,\n originalError: error,\n };\n }\n\n // Network errors (more specific patterns to avoid false positives)\n if (\n testPattern(/econnrefused/i) ||\n testPattern(/connection refused/i) ||\n testPattern(/failed to fetch/i) ||\n testPattern(/\\bnetwork[-\\s]?(request|error|timeout|unreachable|down|failed)\\b/i)\n ) {\n return {\n message: \"Network error. Please check your connection and try again.\",\n type: ErrorType.NETWORK,\n originalError: error,\n };\n }\n\n // Timeout errors\n if (testPattern(/timeout/i) || testPattern(/timed out/i)) {\n return {\n message: \"Request timed out. Please try again.\",\n type: ErrorType.TIMEOUT,\n originalError: error,\n };\n }\n\n // Account doesn't exist\n if (testPattern(/account.*does not exist/i) || testPattern(/account not found/i)) {\n return {\n message: \"Account not found. Please check the username.\",\n type: ErrorType.VALIDATION,\n originalError: error,\n };\n }\n\n // Invalid memo key\n if (testPattern(/invalid memo key/i)) {\n return {\n message: \"Invalid memo key. Cannot encrypt message.\",\n type: ErrorType.VALIDATION,\n originalError: error,\n };\n }\n\n // Insufficient funds (require both words in same string to avoid cross-field false positives)\n if (testPattern(/(?:insufficient.*(?:funds|balance)|(?:funds|balance).*insufficient)/i)) {\n return {\n message: \"Insufficient funds for this transaction.\",\n type: ErrorType.VALIDATION,\n originalError: error,\n };\n }\n\n // Generic validation errors (use word boundaries to be more specific)\n if (testPattern(/\\b(invalid|validation)\\b/i)) {\n // Truncate to 150 chars like other branches\n const message = (error?.message || errorString).substring(0, 150) || \"Validation error occurred\";\n return {\n message,\n type: ErrorType.VALIDATION,\n originalError: error,\n };\n }\n\n // Default: return original error message\n // Check for error_description first (from web operations.ts line 65-72)\n if (error?.error_description && typeof error.error_description === \"string\") {\n return {\n message: error.error_description.substring(0, 150),\n type: ErrorType.COMMON,\n originalError: error,\n };\n }\n\n // Then check message field\n if (error?.message && typeof error.message === \"string\") {\n return {\n message: error.message.substring(0, 150),\n type: ErrorType.COMMON,\n originalError: error,\n };\n }\n\n // Handle plain objects without message property (avoid \"[object Object]\")\n let message: string;\n if (typeof error === 'object' && error !== null) {\n // Check for common error properties\n if (error.error_description) {\n message = String(error.error_description);\n } else if (error.code) {\n message = `Error code: ${error.code}`;\n } else if (errorString && errorString !== '[object Object]') {\n message = errorString.substring(0, 150);\n } else {\n message = \"Unknown error occurred\";\n }\n } else {\n message = errorString.substring(0, 150) || \"Unknown error occurred\";\n }\n\n return {\n message,\n type: ErrorType.COMMON,\n originalError: error,\n };\n}\n\n/**\n * Formats error for display to user.\n * Returns tuple of [message, type] for backward compatibility with existing code.\n *\n * This function maintains compatibility with the old formatError signature from\n * web's operations.ts (line 59-84) and mobile's dhive.ts error handling.\n *\n * @param error - The error object or string\n * @returns Tuple of [user-friendly message, error type]\n *\n * @example\n * ```typescript\n * try {\n * await transfer(...);\n * } catch (error) {\n * const [message, type] = formatError(error);\n * showToast(message, type);\n * }\n * ```\n */\nexport function formatError(error: any): [string, ErrorType] {\n const parsed = parseChainError(error);\n return [parsed.message, parsed.type];\n}\n\n/**\n * Checks if error indicates missing authority and should trigger auth fallback.\n * Used by the SDK's useBroadcastMutation to determine if it should retry with\n * an alternate authentication method.\n *\n * @param error - The error object or string\n * @returns true if auth fallback should be attempted\n *\n * @example\n * ```typescript\n * try {\n * await broadcast(operations);\n * } catch (error) {\n * if (shouldTriggerAuthFallback(error)) {\n * // Try with alternate auth method\n * await broadcastWithHiveAuth(operations);\n * }\n * }\n * ```\n */\nexport function shouldTriggerAuthFallback(error: any): boolean {\n const { type } = parseChainError(error);\n return type === ErrorType.MISSING_AUTHORITY || type === ErrorType.TOKEN_EXPIRED;\n}\n\n/**\n * Checks if error is a resource credits (RC) error.\n * Useful for showing specific UI feedback about RC issues.\n *\n * @param error - The error object or string\n * @returns true if the error is related to insufficient RC\n *\n * @example\n * ```typescript\n * try {\n * await vote(...);\n * } catch (error) {\n * if (isResourceCreditsError(error)) {\n * showRCWarning(); // Show specific RC education/power up UI\n * }\n * }\n * ```\n */\nexport function isResourceCreditsError(error: any): boolean {\n const { type } = parseChainError(error);\n return type === ErrorType.INSUFFICIENT_RESOURCE_CREDITS;\n}\n\n/**\n * Checks if error is informational (not critical).\n * Informational errors typically don't need retry logic.\n *\n * @param error - The error object or string\n * @returns true if the error is informational\n */\nexport function isInfoError(error: any): boolean {\n const { type } = parseChainError(error);\n return type === ErrorType.INFO;\n}\n\n/**\n * Checks if error is network-related and should be retried.\n *\n * @param error - The error object or string\n * @returns true if the error is network-related\n */\nexport function isNetworkError(error: any): boolean {\n const { type } = parseChainError(error);\n return type === ErrorType.NETWORK || type === ErrorType.TIMEOUT;\n}\n","import { Client } from \"@hiveio/dhive\";\nimport { QueryClient } from \"@tanstack/react-query\";\n\n// Safe environment variable access for browser builds\n// In browser builds, tsup will replace process.env.* with literal values at compile time\nconst isDevelopment = (() => {\n try {\n return process.env?.NODE_ENV === 'development';\n } catch {\n return false;\n }\n})();\n\nconst getHeliusApiKey = () => {\n try {\n return process.env?.VITE_HELIUS_API_KEY;\n } catch {\n return undefined;\n }\n};\n\nexport const CONFIG = {\n privateApiHost: \"https://ecency.com\",\n imageHost: \"https://images.ecency.com\",\n hiveClient: new Client(\n [\n \"https://api.hive.blog\",\n \"https://api.deathwing.me\",\n \"https://rpc.mahdiyari.info\",\n \"https://api.openhive.network\",\n \"https://techcoderx.com\",\n \"https://hive-api.arcange.eu\",\n \"https://api.syncad.com\",\n \"https://anyx.io\",\n \"https://api.c0ff33a.uk\",\n \"https://hiveapi.actifit.io\",\n \"https://hive-api.3speak.tv\",\n ],\n {\n timeout: 2000,\n failoverThreshold: 2,\n consoleOnFailover: true,\n }\n ),\n heliusApiKey: getHeliusApiKey(),\n queryClient: new QueryClient(),\n plausibleHost: \"https://pl.ecency.com\",\n spkNode: \"https://spk.good-karma.xyz\",\n // DMCA filtering - can be configured by the app\n dmcaAccounts: [] as string[],\n dmcaTags: [] as string[],\n dmcaPatterns: [] as string[],\n // Pre-compiled regex patterns for performance and security\n dmcaTagRegexes: [] as RegExp[],\n dmcaPatternRegexes: [] as RegExp[],\n // Track if DMCA has been initialized to avoid duplicate logs\n _dmcaInitialized: false,\n};\n\ntype DmcaListsInput = {\n accounts?: string[];\n tags?: string[];\n posts?: string[];\n};\n\nexport namespace ConfigManager {\n export function setQueryClient(client: QueryClient) {\n CONFIG.queryClient = client;\n }\n\n /**\n * Set the private API host\n * @param host - The private API host URL (e.g., \"https://ecency.com\" or \"\" for relative URLs)\n */\n export function setPrivateApiHost(host: string) {\n CONFIG.privateApiHost = host;\n }\n\n /**\n * Get a validated base URL for API requests\n * Returns a valid base URL that can be used with new URL(path, baseUrl)\n *\n * Priority:\n * 1. CONFIG.privateApiHost if set (dev/staging or explicit config)\n * 2. window.location.origin if in browser (production with relative URLs)\n * 3. 'https://ecency.com' as fallback for SSR (production default)\n *\n * @returns A valid base URL string\n * @throws Never throws - always returns a valid URL\n */\n export function getValidatedBaseUrl(): string {\n if (CONFIG.privateApiHost) {\n return CONFIG.privateApiHost;\n }\n\n if (typeof window !== 'undefined' && window.location?.origin) {\n return window.location.origin;\n }\n\n // Fallback for SSR when privateApiHost is empty (production case)\n return 'https://ecency.com';\n }\n\n /**\n * Set the image host\n * @param host - The image host URL (e.g., \"https://images.ecency.com\")\n */\n export function setImageHost(host: string) {\n CONFIG.imageHost = host;\n }\n\n /**\n * Static analysis: Check for known ReDoS-vulnerable patterns\n * @param pattern - Raw regex pattern string\n * @returns Object with risk level and reason\n */\n function analyzeRedosRisk(pattern: string): { safe: boolean; reason?: string } {\n // Check 1: Nested quantifiers (e.g., (a+)+, (a*)+, (a{1,})+)\n if (/(\\([^)]*[*+{][^)]*\\))[*+{]/.test(pattern)) {\n return { safe: false, reason: \"nested quantifiers detected\" };\n }\n\n // Check 2: Alternation with overlapping terms (e.g., (a|a)+, (ab|a)+)\n if (/\\([^|)]*\\|[^)]*\\)[*+{]/.test(pattern)) {\n return { safe: false, reason: \"alternation with quantifier (potential overlap)\" };\n }\n\n // Check 3: Catastrophic backtracking patterns (e.g., (a*)*b, (a+)+b)\n if (/\\([^)]*[*+][^)]*\\)[*+]/.test(pattern)) {\n return { safe: false, reason: \"repeated quantifiers (catastrophic backtracking risk)\" };\n }\n\n // Check 4: Greedy quantifiers followed by optional patterns (e.g., .*.*x, .+.+x)\n if (/\\.\\*\\.\\*/.test(pattern) || /\\.\\+\\.\\+/.test(pattern)) {\n return { safe: false, reason: \"multiple greedy quantifiers on wildcards\" };\n }\n\n // Check 5: Unbounded ranges with wildcards (e.g., .{1,999999})\n const unboundedRange = /\\.?\\{(\\d+),(\\d+)\\}/g;\n let match;\n while ((match = unboundedRange.exec(pattern)) !== null) {\n const [, min, max] = match;\n const range = parseInt(max, 10) - parseInt(min, 10);\n if (range > 1000) {\n return { safe: false, reason: `excessive range: {${min},${max}}` };\n }\n }\n\n return { safe: true };\n }\n\n /**\n * Runtime test: Execute regex against adversarial inputs with timeout\n * @param regex - Compiled regex\n * @returns Object indicating if regex passed runtime test\n */\n function testRegexPerformance(regex: RegExp): { safe: boolean; reason?: string } {\n // Test inputs designed to trigger ReDoS in vulnerable patterns\n const adversarialInputs = [\n // Nested quantifier attack\n \"a\".repeat(50) + \"x\",\n // Alternation attack\n \"ab\".repeat(50) + \"x\",\n // Wildcard attack\n \"x\".repeat(100),\n // Mixed attack\n \"aaa\".repeat(30) + \"bbb\".repeat(30) + \"x\",\n ];\n\n const maxExecutionTime = 5; // 5ms hard limit per test\n\n for (const input of adversarialInputs) {\n const start = Date.now();\n try {\n regex.test(input);\n const duration = Date.now() - start;\n\n if (duration > maxExecutionTime) {\n return {\n safe: false,\n reason: `runtime test exceeded ${maxExecutionTime}ms (took ${duration}ms on input length ${input.length})`\n };\n }\n } catch (err) {\n return { safe: false, reason: `runtime test threw error: ${err}` };\n }\n }\n\n return { safe: true };\n }\n\n /**\n * Safely compile a regex pattern with defense-in-depth validation\n * @param pattern - Raw regex pattern string\n * @param maxLength - Maximum allowed pattern length (default 200)\n * @returns Compiled RegExp or null if invalid/unsafe\n */\n function safeCompileRegex(pattern: string, maxLength = 200): RegExp | null {\n // Use the module-level isDevelopment constant\n\n try {\n // Layer 1: Basic validation\n if (!pattern) {\n if (isDevelopment) {\n console.warn(`[SDK] DMCA pattern rejected: empty pattern`);\n }\n return null;\n }\n\n if (pattern.length > maxLength) {\n if (isDevelopment) {\n console.warn(`[SDK] DMCA pattern rejected: length ${pattern.length} exceeds max ${maxLength} - pattern: ${pattern.substring(0, 50)}...`);\n }\n return null;\n }\n\n // Layer 2: Static ReDoS analysis\n const staticAnalysis = analyzeRedosRisk(pattern);\n if (!staticAnalysis.safe) {\n if (isDevelopment) {\n console.warn(`[SDK] DMCA pattern rejected: static analysis failed (${staticAnalysis.reason}) - pattern: ${pattern.substring(0, 50)}...`);\n }\n return null;\n }\n\n // Layer 3: Compilation attempt\n let regex: RegExp;\n try {\n regex = new RegExp(pattern);\n } catch (compileErr) {\n if (isDevelopment) {\n console.warn(`[SDK] DMCA pattern rejected: compilation failed - pattern: ${pattern.substring(0, 50)}...`, compileErr);\n }\n return null;\n }\n\n // Layer 4: Runtime performance testing\n const runtimeTest = testRegexPerformance(regex);\n if (!runtimeTest.safe) {\n if (isDevelopment) {\n console.warn(`[SDK] DMCA pattern rejected: runtime test failed (${runtimeTest.reason}) - pattern: ${pattern.substring(0, 50)}...`);\n }\n return null;\n }\n\n return regex;\n } catch (err) {\n if (isDevelopment) {\n console.warn(`[SDK] DMCA pattern rejected: unexpected error - pattern: ${pattern.substring(0, 50)}...`, err);\n }\n return null;\n }\n }\n\n /**\n * Set DMCA filtering lists\n * @param lists - DMCA lists object containing accounts/tags/posts arrays\n */\n export function setDmcaLists(\n lists: DmcaListsInput = {}\n ) {\n const coerceList = (value: unknown): string[] =>\n Array.isArray(value) ? value.filter((item): item is string => typeof item === \"string\") : [];\n\n // Ensure we have a valid object to work with\n const input = lists || {};\n\n const resolved = {\n accounts: coerceList(input.accounts),\n tags: coerceList(input.tags),\n patterns: coerceList(input.posts),\n };\n\n CONFIG.dmcaAccounts = resolved.accounts;\n CONFIG.dmcaTags = resolved.tags;\n CONFIG.dmcaPatterns = resolved.patterns;\n\n // Pre-compile tag regex patterns (tags can be regex)\n CONFIG.dmcaTagRegexes = resolved.tags\n .map((pattern) => safeCompileRegex(pattern))\n .filter((r): r is RegExp => r !== null);\n\n // Post patterns are plain strings for exact matching, not regex\n // No compilation needed - they will be used with simple string comparison\n CONFIG.dmcaPatternRegexes = [];\n\n const rejectedTagCount = resolved.tags.length - CONFIG.dmcaTagRegexes.length;\n\n // Only log once to avoid noise during builds/hot reloads\n // Only show in development mode to avoid cluttering production console\n // Use the module-level isDevelopment constant\n\n if (!CONFIG._dmcaInitialized && isDevelopment) {\n console.log(`[SDK] DMCA configuration loaded:`);\n console.log(` - Accounts: ${resolved.accounts.length}`);\n console.log(` - Tag patterns: ${CONFIG.dmcaTagRegexes.length}/${resolved.tags.length} compiled (${rejectedTagCount} rejected)`);\n console.log(` - Post patterns: ${resolved.patterns.length} (using exact string matching)`);\n\n if (rejectedTagCount > 0) {\n console.warn(`[SDK] ${rejectedTagCount} DMCA tag patterns were rejected due to security validation. Check warnings above for details.`);\n }\n }\n\n CONFIG._dmcaInitialized = true;\n }\n}\n","import { CONFIG } from \"@/modules/core/config\";\nimport { PrivateKey } from \"@hiveio/dhive\";\nimport hs from \"hivesigner\";\nimport type { AuthContext } from \"@/modules/core/types\";\n\nexport async function broadcastJson<T>(\n username: string | undefined,\n id: string,\n payload: T,\n auth?: AuthContext\n) {\n if (!username) {\n throw new Error(\n \"[Core][Broadcast] Attempted to call broadcast API with anon user\"\n );\n }\n const jjson = {\n id,\n required_auths: [],\n required_posting_auths: [username],\n json: JSON.stringify(payload),\n };\n\n if (auth?.broadcast) {\n return auth.broadcast([[\"custom_json\", jjson]], \"posting\");\n }\n\n const postingKey = auth?.postingKey;\n if (postingKey) {\n const privateKey = PrivateKey.fromString(postingKey);\n\n return CONFIG.hiveClient.broadcast.json(\n jjson,\n privateKey\n );\n }\n\n // With hivesigner access token\n const accessToken = auth?.accessToken;\n if (accessToken) {\n const response = await new hs.Client({\n accessToken,\n }).customJson([], [username], id, JSON.stringify(payload));\n return response.result;\n }\n\n throw new Error(\n \"[SDK][Broadcast] – cannot broadcast w/o posting key or token\"\n );\n}\n","import {\n InfiniteData,\n QueryClient,\n QueryKey,\n useInfiniteQuery,\n UseInfiniteQueryOptions,\n useQuery,\n UseQueryOptions,\n} from \"@tanstack/react-query\";\nimport { CONFIG } from \"./config\";\n\nexport function makeQueryClient() {\n // Cache creates one single instance per request in a server side\n return new QueryClient({\n defaultOptions: {\n queries: {\n // With SSR, we usually want to set some default staleTime\n // above 0 to avoid refetching immediately on the client\n // staleTime: 60 * 1000,\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n },\n },\n });\n}\nexport const getQueryClient = () => CONFIG.queryClient;\n\nexport namespace EcencyQueriesManager {\n export function getQueryData<T>(queryKey: QueryKey) {\n const queryClient = getQueryClient();\n return queryClient.getQueryData<T>(queryKey);\n }\n\n export function getInfiniteQueryData<T>(queryKey: QueryKey) {\n const queryClient = getQueryClient();\n return queryClient.getQueryData<InfiniteData<T>>(queryKey);\n }\n\n export async function prefetchQuery<T>(options: UseQueryOptions<T>) {\n const queryClient = getQueryClient();\n await queryClient.prefetchQuery(options);\n return getQueryData<T>(options.queryKey);\n }\n\n export async function prefetchInfiniteQuery<T, P>(\n options: UseInfiniteQueryOptions<\n T,\n Error,\n InfiniteData<T>,\n QueryKey,\n P\n >\n ) {\n const queryClient = getQueryClient();\n await queryClient.prefetchInfiniteQuery(options);\n return getInfiniteQueryData<T>(options.queryKey);\n }\n\n export function generateClientServerQuery<T>(options: UseQueryOptions<T>) {\n return {\n prefetch: () => prefetchQuery(options),\n getData: () => getQueryData<T>(options.queryKey),\n useClientQuery: () => useQuery(options),\n fetchAndGet: () => getQueryClient().fetchQuery(options),\n };\n }\n\n export function generateClientServerInfiniteQuery<T, P>(\n options: UseInfiniteQueryOptions<\n T,\n Error,\n InfiniteData<T>,\n QueryKey,\n P\n >\n ) {\n return {\n prefetch: () => prefetchInfiniteQuery(options),\n getData: () => getInfiniteQueryData<T>(options.queryKey),\n useClientQuery: () => useInfiniteQuery(options),\n fetchAndGet: () => getQueryClient().fetchInfiniteQuery(options),\n };\n }\n}\n","export function encodeObj(o: any): string {\n return btoa(JSON.stringify(o));\n}\n\nexport function decodeObj(o: any): any {\n let dataToParse = atob(o);\n if (dataToParse[0] !== \"{\") {\n return undefined;\n }\n return JSON.parse(dataToParse);\n}\n","import { SMTAsset } from \"@hiveio/dhive\";\n\nexport enum Symbol {\n HIVE = \"HIVE\",\n HBD = \"HBD\",\n VESTS = \"VESTS\",\n SPK = \"SPK\",\n}\n\nexport enum NaiMap {\n \"@@000000021\" = \"HIVE\",\n \"@@000000013\" = \"HBD\",\n \"@@000000037\" = \"VESTS\",\n}\n\nexport interface Asset {\n amount: number;\n symbol: Symbol;\n}\n\nexport function parseAsset(sval: string | SMTAsset): Asset {\n if (typeof sval === \"string\") {\n const sp = sval.split(\" \");\n return {\n amount: parseFloat(sp[0]),\n // @ts-ignore\n symbol: Symbol[sp[1]],\n };\n } else {\n return {\n amount: parseFloat(sval.amount.toString()) / Math.pow(10, sval.precision),\n // @ts-ignore\n symbol: NaiMap[sval.nai],\n };\n }\n}\n","let cachedFetch: typeof globalThis.fetch | undefined;\n\nexport function getBoundFetch() {\n if (!cachedFetch) {\n if (typeof globalThis.fetch !== \"function\") {\n throw new Error(\"[Ecency][SDK] - global fetch is not available\");\n }\n\n cachedFetch = globalThis.fetch.bind(globalThis);\n }\n\n return cachedFetch;\n}\n","export function isCommunity(value: unknown) {\n return typeof value === \"string\" ? /^hive-\\d+$/.test(value) : false;\n}\n","import { WrappedResponse } from \"../types/pagination\";\n\n/**\n * Type guard to check if response is wrapped with pagination metadata\n */\nexport function isWrappedResponse<T>(response: any): response is WrappedResponse<T> {\n return (\n response &&\n typeof response === \"object\" &&\n \"data\" in response &&\n \"pagination\" in response &&\n Array.isArray(response.data)\n );\n}\n\n/**\n * Normalize response to wrapped format for backwards compatibility\n * If the backend returns old format (array), convert it to wrapped format\n */\nexport function normalizeToWrappedResponse<T>(\n response: T[] | WrappedResponse<T>,\n limit: number\n): WrappedResponse<T> {\n if (isWrappedResponse<T>(response)) {\n return response;\n }\n\n // Old format - just an array\n // Since we don't have pagination metadata, assume no more pages\n return {\n data: Array.isArray(response) ? response : [],\n pagination: {\n total: Array.isArray(response) ? response.length : 0,\n limit,\n offset: 0,\n has_next: false,\n },\n };\n}\n","export function vestsToHp(vests: number, hivePerMVests: number): number {\n return (vests / 1e6) * hivePerMVests;\n}\n","export function isEmptyDate(s: string | undefined): boolean {\n if (s === undefined) {\n return true;\n }\n\n return parseInt(s.split(\"-\")[0], 10) < 1980;\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { DynamicProps } from \"../types\";\nimport { CONFIG } from \"../config\";\nimport { parseAsset } from \"../utils\";\nimport { QueryKeys } from \"@/modules/core\";\n\nexport function getDynamicPropsQueryOptions() {\n return queryOptions({\n queryKey: QueryKeys.core.dynamicProps(),\n refetchInterval: 60000,\n staleTime: 60000,\n refetchOnMount: true,\n queryFn: async (): Promise<DynamicProps> => {\n // Get raw blockchain data without transformation\n const rawGlobalDynamic: any = await CONFIG.hiveClient.database.getDynamicGlobalProperties();\n const rawFeedHistory: any = await CONFIG.hiveClient.database.call(\"get_feed_history\");\n const rawChainProps: any = await CONFIG.hiveClient.database.call(\"get_chain_properties\");\n const rawRewardFund: any = await CONFIG.hiveClient.database.call(\"get_reward_fund\", [\"post\"]);\n\n // Calculate derived values for backward compatibility\n // parseAsset handles both string format (\"200905388484 HIVE\") and NAI format ({ amount, nai, precision })\n const totalVestingSharesAmount = parseAsset(rawGlobalDynamic.total_vesting_shares).amount;\n const totalVestingFundAmount = parseAsset(rawGlobalDynamic.total_vesting_fund_hive).amount;\n\n // Guard against division by zero/NaN/Infinity\n let hivePerMVests = 0;\n if (\n Number.isFinite(totalVestingSharesAmount) &&\n totalVestingSharesAmount !== 0 &&\n Number.isFinite(totalVestingFundAmount)\n ) {\n hivePerMVests = (totalVestingFundAmount / totalVestingSharesAmount) * 1e6;\n }\n const base = parseAsset(rawFeedHistory.current_median_history.base).amount;\n const quote = parseAsset(rawFeedHistory.current_median_history.quote).amount;\n const fundRecentClaims = parseFloat(rawRewardFund.recent_claims);\n const fundRewardBalance = parseAsset(rawRewardFund.reward_balance).amount;\n const hbdPrintRate = rawGlobalDynamic.hbd_print_rate;\n const hbdInterestRate = rawGlobalDynamic.hbd_interest_rate;\n const headBlock = rawGlobalDynamic.head_block_number;\n const totalVestingFund = totalVestingFundAmount;\n const totalVestingShares = totalVestingSharesAmount;\n const virtualSupply = parseAsset(rawGlobalDynamic.virtual_supply).amount;\n const vestingRewardPercent = rawGlobalDynamic.vesting_reward_percent || 0;\n const accountCreationFee = rawChainProps.account_creation_fee;\n\n return {\n // Backward compatible transformed fields (camelCase, parsed)\n hivePerMVests,\n base,\n quote,\n fundRecentClaims,\n fundRewardBalance,\n hbdPrintRate,\n hbdInterestRate,\n headBlock,\n totalVestingFund,\n totalVestingShares,\n virtualSupply,\n vestingRewardPercent,\n accountCreationFee,\n\n // Raw blockchain data (snake_case, unparsed) for direct use\n // Includes ALL fields from the blockchain responses\n raw: {\n globalDynamic: rawGlobalDynamic,\n feedHistory: rawFeedHistory,\n chainProps: rawChainProps,\n rewardFund: rawRewardFund,\n },\n } as DynamicProps;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"../config\";\nimport { QueryKeys } from \"@/modules/core\";\n\nexport interface RewardFund {\n id: number;\n name: string;\n reward_balance: string;\n recent_claims: string;\n last_update: string;\n content_constant: string;\n percent_curation_rewards: number;\n percent_content_rewards: number;\n author_reward_curve: string;\n curation_reward_curve: string;\n}\n\n/**\n * Get reward fund information from the blockchain\n * @param fundName - Name of the reward fund (default: 'post')\n */\nexport function getRewardFundQueryOptions(fundName = \"post\") {\n return queryOptions({\n queryKey: QueryKeys.core.rewardFund(fundName),\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_reward_fund\", [\n fundName,\n ]) as Promise<RewardFund>,\n });\n}\n","/**\n * Centralized query key definitions for all SDK queries.\n *\n * These key builders are the single source of truth for React Query cache keys.\n * Both SDK query options and web app consumers should reference these\n * instead of using inline string arrays.\n *\n * @example\n * ```typescript\n * import { QueryKeys } from \"@ecency/sdk\";\n *\n * // In query options\n * queryKey: QueryKeys.posts.entry(`/@${author}/${permlink}`)\n *\n * // In cache invalidation\n * queryClient.invalidateQueries({ queryKey: QueryKeys.posts.drafts(username) })\n * ```\n */\nexport const QueryKeys = {\n // ===========================================================================\n // Posts\n // ===========================================================================\n posts: {\n entry: (entryPath: string) => [\"posts\", \"entry\", entryPath],\n postHeader: (author: string, permlink?: string) =>\n [\"posts\", \"post-header\", author, permlink],\n content: (author: string, permlink: string) =>\n [\"posts\", \"content\", author, permlink],\n contentReplies: (author: string, permlink: string) =>\n [\"posts\", \"content-replies\", author, permlink],\n accountPosts: (\n username: string,\n filter: string,\n limit: number,\n observer: string\n ) => [\"posts\", \"account-posts\", username, filter, limit, observer],\n accountPostsPage: (\n username: string,\n filter: string,\n startAuthor: string,\n startPermlink: string,\n limit: number,\n observer: string\n ) =>\n [\n \"posts\",\n \"account-posts-page\",\n username,\n filter,\n startAuthor,\n startPermlink,\n limit,\n observer,\n ],\n userPostVote: (username: string, author: string, permlink: string) =>\n [\"posts\", \"user-vote\", username, author, permlink],\n reblogs: (username: string, limit: number) =>\n [\"posts\", \"reblogs\", username, limit],\n entryActiveVotes: (author?: string, permlink?: string) =>\n [\"posts\", \"entry-active-votes\", author, permlink],\n rebloggedBy: (author: string, permlink: string) =>\n [\"posts\", \"reblogged-by\", author, permlink],\n tips: (author: string, permlink: string) =>\n [\"posts\", \"tips\", author, permlink],\n normalize: (author: string, permlink: string) =>\n [\"posts\", \"normalize\", author, permlink],\n drafts: (activeUsername?: string) =>\n [\"posts\", \"drafts\", activeUsername],\n draftsInfinite: (activeUsername?: string, limit?: number) =>\n [\"posts\", \"drafts\", \"infinite\", activeUsername, limit],\n schedules: (activeUsername?: string) =>\n [\"posts\", \"schedules\", activeUsername],\n schedulesInfinite: (activeUsername?: string, limit?: number) =>\n [\"posts\", \"schedules\", \"infinite\", activeUsername, limit],\n fragments: (username?: string) =>\n [\"posts\", \"fragments\", username],\n fragmentsInfinite: (username?: string, limit?: number) =>\n [\"posts\", \"fragments\", \"infinite\", username, limit],\n images: (username?: string) => [\"posts\", \"images\", username],\n galleryImages: (activeUsername?: string) =>\n [\"posts\", \"gallery-images\", activeUsername],\n imagesInfinite: (username?: string, limit?: number) =>\n [\"posts\", \"images\", \"infinite\", username, limit],\n promoted: (type: string) => [\"posts\", \"promoted\", type],\n postsRanked: (\n sort: string,\n tag: string,\n limit: number,\n observer: string\n ) => [\"posts\", \"posts-ranked\", sort, tag, limit, observer],\n postsRankedPage: (\n sort: string,\n startAuthor: string,\n startPermlink: string,\n limit: number,\n tag: string,\n observer: string\n ) =>\n [\n \"posts\",\n \"posts-ranked-page\",\n sort,\n startAuthor,\n startPermlink,\n limit,\n tag,\n observer,\n ],\n discussions: (\n author: string,\n permlink: string,\n order: string,\n observer: string\n ) => [\"posts\", \"discussions\", author, permlink, order, observer],\n discussion: (author: string, permlink: string, observer: string) =>\n [\"posts\", \"discussion\", author, permlink, observer],\n deletedEntry: (entryPath: string) =>\n [\"posts\", \"deleted-entry\", entryPath],\n commentHistory: (\n author: string,\n permlink: string,\n onlyMeta: boolean\n ) => [\"posts\", \"comment-history\", author, permlink, onlyMeta],\n trendingTags: () => [\"posts\", \"trending-tags\"],\n trendingTagsWithStats: (limit: number) =>\n [\"posts\", \"trending-tags\", \"stats\", limit],\n wavesByHost: (host: string) =>\n [\"posts\", \"waves\", \"by-host\", host],\n wavesByTag: (host: string, tag: string) =>\n [\"posts\", \"waves\", \"by-tag\", host, tag],\n wavesFollowing: (host: string, username: string) =>\n [\"posts\", \"waves\", \"following\", host, username],\n wavesTrendingTags: (host: string, hours: number) =>\n [\"posts\", \"waves\", \"trending-tags\", host, hours],\n _prefix: [\"posts\"],\n },\n\n // ===========================================================================\n // Accounts\n // ===========================================================================\n accounts: {\n full: (username?: string) => [\"get-account-full\", username],\n list: (...usernames: string[]) =>\n [\"accounts\", \"list\", ...usernames],\n friends: (\n following: string,\n mode: string,\n followType: string,\n limit: number\n ) => [\"accounts\", \"friends\", following, mode, followType, limit],\n searchFriends: (username: string, mode: string, query: string) =>\n [\"accounts\", \"friends\", \"search\", username, mode, query],\n subscriptions: (username: string) =>\n [\"accounts\", \"subscriptions\", username],\n followCount: (username: string) =>\n [\"accounts\", \"follow-count\", username],\n recoveries: (username: string) =>\n [\"accounts\", \"recoveries\", username],\n pendingRecovery: (username: string) =>\n [\"accounts\", \"recoveries\", username, \"pending-request\"],\n checkWalletPending: (username: string, code: string | null) =>\n [\"accounts\", \"check-wallet-pending\", username, code],\n mutedUsers: (username: string) =>\n [\"accounts\", \"muted-users\", username],\n following: (\n follower: string,\n startFollowing: string,\n followType: string,\n limit: number\n ) =>\n [\n \"accounts\",\n \"following\",\n follower,\n startFollowing,\n followType,\n limit,\n ],\n followers: (\n following: string,\n startFollower: string,\n followType: string,\n limit: number\n ) =>\n [\n \"accounts\",\n \"followers\",\n following,\n startFollower,\n followType,\n limit,\n ],\n search: (query: string, excludeList?: string[]) =>\n [\"accounts\", \"search\", query, excludeList],\n profiles: (accounts: string[], observer: string) =>\n [\"accounts\", \"profiles\", accounts, observer],\n lookup: (query: string, limit: number) =>\n [\"accounts\", \"lookup\", query, limit],\n transactions: (username: string, group: string, limit: number) =>\n [\"accounts\", \"transactions\", username, group, limit],\n favourites: (activeUsername?: string) =>\n [\"accounts\", \"favourites\", activeUsername],\n favouritesInfinite: (activeUsername?: string, limit?: number) =>\n [\"accounts\", \"favourites\", \"infinite\", activeUsername, limit],\n checkFavourite: (activeUsername: string, targetUsername: string) =>\n [\n \"accounts\",\n \"favourites\",\n \"check\",\n activeUsername,\n targetUsername,\n ],\n relations: (reference: string, target: string) =>\n [\"accounts\", \"relations\", reference, target],\n bots: () => [\"accounts\", \"bots\"],\n voteHistory: (username: string, limit: number) =>\n [\"accounts\", \"vote-history\", username, limit],\n reputations: (query: string, limit: number) =>\n [\"accounts\", \"reputations\", query, limit],\n bookmarks: (activeUsername?: string) =>\n [\"accounts\", \"bookmarks\", activeUsername],\n bookmarksInfinite: (activeUsername?: string, limit?: number) =>\n [\"accounts\", \"bookmarks\", \"infinite\", activeUsername, limit],\n referrals: (username: string) =>\n [\"accounts\", \"referrals\", username],\n referralsStats: (username: string) =>\n [\"accounts\", \"referrals-stats\", username],\n _prefix: [\"accounts\"],\n },\n\n // ===========================================================================\n // Notifications\n // ===========================================================================\n notifications: {\n announcements: () => [\"notifications\", \"announcements\"],\n list: (activeUsername?: string, filter?: string) =>\n [\"notifications\", activeUsername, filter],\n unreadCount: (activeUsername?: string) =>\n [\"notifications\", \"unread\", activeUsername],\n settings: (activeUsername?: string) =>\n [\"notifications\", \"settings\", activeUsername],\n _prefix: [\"notifications\"],\n },\n\n // ===========================================================================\n // Core\n // ===========================================================================\n core: {\n rewardFund: (fundName: string) =>\n [\"core\", \"reward-fund\", fundName],\n dynamicProps: () => [\"core\", \"dynamic-props\"],\n chainProperties: () => [\"core\", \"chain-properties\"],\n _prefix: [\"core\"],\n },\n\n // ===========================================================================\n // Communities\n // ===========================================================================\n communities: {\n single: (name?: string, observer?: string) =>\n [\"community\", \"single\", name, observer],\n /** Prefix key for matching all observer variants of a community */\n singlePrefix: (name: string) =>\n [\"community\", \"single\", name] as const,\n context: (username: string, communityName: string) =>\n [\"community\", \"context\", username, communityName],\n rewarded: () => [\"communities\", \"rewarded\"],\n list: (sort: string, query: string, limit: number) =>\n [\"communities\", \"list\", sort, query, limit],\n subscribers: (communityName: string) =>\n [\"communities\", \"subscribers\", communityName],\n accountNotifications: (account: string, limit: number) =>\n [\"communities\", \"account-notifications\", account, limit],\n },\n\n // ===========================================================================\n // Proposals\n // ===========================================================================\n proposals: {\n list: () => [\"proposals\", \"list\"],\n proposal: (id: number) => [\"proposals\", \"proposal\", id],\n votes: (proposalId: number, voter: string, limit: number) =>\n [\"proposals\", \"votes\", proposalId, voter, limit],\n votesByUser: (voter: string) =>\n [\"proposals\", \"votes\", \"by-user\", voter],\n },\n\n // ===========================================================================\n // Search\n // ===========================================================================\n search: {\n topics: (q: string) => [\"search\", \"topics\", q],\n path: (q: string) => [\"search\", \"path\", q],\n account: (q: string, limit: number) =>\n [\"search\", \"account\", q, limit],\n results: (\n q: string,\n sort: string,\n hideLow: boolean,\n since?: string,\n scrollId?: string,\n votes?: number\n ) => [\"search\", q, sort, hideLow, since, scrollId, votes],\n controversialRising: (what: string, tag: string) =>\n [\"search\", \"controversial-rising\", what, tag],\n similarEntries: (author: string, permlink: string, query: string) =>\n [\"search\", \"similar-entries\", author, permlink, query],\n api: (\n q: string,\n sort: string,\n hideLow: boolean,\n since?: string,\n votes?: number\n ) => [\"search\", \"api\", q, sort, hideLow, since, votes],\n },\n\n // ===========================================================================\n // Witnesses\n // ===========================================================================\n witnesses: {\n list: (limit: number) => [\"witnesses\", \"list\", limit],\n votes: (username: string | undefined) => [\"witnesses\", \"votes\", username],\n proxy: () => [\"witnesses\", \"proxy\"],\n },\n\n // ===========================================================================\n // Wallet\n // ===========================================================================\n wallet: {\n outgoingRcDelegations: (username: string, limit: number) =>\n [\"wallet\", \"outgoing-rc-delegations\", username, limit],\n vestingDelegations: (username: string, limit: number) =>\n [\"wallet\", \"vesting-delegations\", username, limit],\n withdrawRoutes: (account: string) =>\n [\"wallet\", \"withdraw-routes\", account],\n incomingRc: (username: string) =>\n [\"wallet\", \"incoming-rc\", username],\n conversionRequests: (account: string) =>\n [\"wallet\", \"conversion-requests\", account],\n receivedVestingShares: (username: string) =>\n [\"wallet\", \"received-vesting-shares\", username],\n savingsWithdraw: (account: string) =>\n [\"wallet\", \"savings-withdraw\", account],\n openOrders: (user: string) =>\n [\"wallet\", \"open-orders\", user],\n collateralizedConversionRequests: (account: string) =>\n [\"wallet\", \"collateralized-conversion-requests\", account],\n recurrentTransfers: (username: string) =>\n [\"wallet\", \"recurrent-transfers\", username],\n portfolio: (\n username: string,\n onlyEnabled: string,\n currency: string\n ) =>\n [\"wallet\", \"portfolio\", \"v2\", username, onlyEnabled, currency],\n },\n\n // ===========================================================================\n // Assets\n // ===========================================================================\n assets: {\n hiveGeneralInfo: (username: string) =>\n [\"assets\", \"hive\", \"general-info\", username],\n hiveTransactions: (username: string, limit: number, filterKey: string) =>\n [\"assets\", \"hive\", \"transactions\", username, limit, filterKey],\n hiveWithdrawalRoutes: (username: string) =>\n [\"assets\", \"hive\", \"withdrawal-routes\", username],\n hiveMetrics: (bucketSeconds: number) =>\n [\"assets\", \"hive\", \"metrics\", bucketSeconds],\n hbdGeneralInfo: (username: string) =>\n [\"assets\", \"hbd\", \"general-info\", username],\n hbdTransactions: (\n username: string,\n limit: number,\n filterKey: string\n ) => [\"assets\", \"hbd\", \"transactions\", username, limit, filterKey],\n hivePowerGeneralInfo: (username: string) =>\n [\"assets\", \"hive-power\", \"general-info\", username],\n hivePowerDelegates: (username: string) =>\n [\"assets\", \"hive-power\", \"delegates\", username],\n hivePowerDelegatings: (username: string) =>\n [\"assets\", \"hive-power\", \"delegatings\", username],\n hivePowerTransactions: (\n username: string,\n limit: number,\n filterKey: string\n ) =>\n [\n \"assets\",\n \"hive-power\",\n \"transactions\",\n username,\n limit,\n filterKey,\n ],\n pointsGeneralInfo: (username: string) =>\n [\"assets\", \"points\", \"general-info\", username],\n pointsTransactions: (username: string, type: string) =>\n [\"assets\", \"points\", \"transactions\", username, type],\n ecencyAssetInfo: (username: string, asset: string, currency: string) =>\n [\"ecency-wallets\", \"asset-info\", username, asset, currency],\n },\n\n // ===========================================================================\n // Market\n // ===========================================================================\n market: {\n statistics: () => [\"market\", \"statistics\"],\n orderBook: (limit: number) => [\"market\", \"order-book\", limit],\n history: (seconds: number, startDate: number, endDate: number) =>\n [\"market\", \"history\", seconds, startDate, endDate],\n feedHistory: () => [\"market\", \"feed-history\"],\n hiveHbdStats: () => [\"market\", \"hive-hbd-stats\"],\n data: (\n coin: string,\n vsCurrency: string,\n fromTs: number,\n toTs: number\n ) => [\"market\", \"data\", coin, vsCurrency, fromTs, toTs],\n tradeHistory: (limit: number, start: number, end: number) =>\n [\"market\", \"trade-history\", limit, start, end],\n currentMedianHistoryPrice: () =>\n [\"market\", \"current-median-history-price\"],\n },\n\n // ===========================================================================\n // Analytics\n // ===========================================================================\n analytics: {\n discoverCuration: (duration: string) =>\n [\"analytics\", \"discover-curation\", duration],\n pageStats: (\n url: string,\n dimensions: string,\n metrics: string,\n dateRange: string\n ) =>\n [\"analytics\", \"page-stats\", url, dimensions, metrics, dateRange],\n discoverLeaderboard: (duration: string) =>\n [\"analytics\", \"discover-leaderboard\", duration],\n },\n\n // ===========================================================================\n // Promotions\n // ===========================================================================\n promotions: {\n promotePrice: () => [\"promotions\", \"promote-price\"],\n boostPlusPrices: () => [\"promotions\", \"boost-plus-prices\"],\n boostPlusAccounts: (account: string) =>\n [\"promotions\", \"boost-plus-accounts\", account],\n },\n\n // ===========================================================================\n // Resource Credits\n // ===========================================================================\n resourceCredits: {\n account: (username: string) =>\n [\"resource-credits\", \"account\", username],\n stats: () => [\"resource-credits\", \"stats\"],\n },\n\n // ===========================================================================\n // Points\n // ===========================================================================\n points: {\n points: (username: string, filter: number) =>\n [\"points\", username, filter],\n },\n\n // ===========================================================================\n // Operations\n // ===========================================================================\n operations: {\n chainProperties: () => [\"operations\", \"chain-properties\"],\n },\n\n // ===========================================================================\n // Games\n // ===========================================================================\n games: {\n statusCheck: (gameType: string, username: string) =>\n [\"games\", \"status-check\", gameType, username],\n },\n} as const;\n","import { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport {\n AccountFollowStats,\n AccountReputation,\n FullAccount,\n} from \"../types\";\nimport { parseProfileMetadata } from \"@/modules/accounts\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport function getAccountFullQueryOptions(username: string | undefined) {\n return queryOptions({\n queryKey: QueryKeys.accounts.full(username),\n queryFn: async () => {\n if (!username) {\n throw new Error(\"[SDK] Username is empty\");\n }\n\n const response = (await CONFIG.hiveClient.database.getAccounts([\n username,\n ])) as any[];\n if (!response[0]) {\n throw new Error(\"[SDK] No account with given username\");\n }\n\n const profile = parseProfileMetadata(response[0].posting_json_metadata);\n\n let follow_stats: AccountFollowStats | undefined;\n try {\n follow_stats = await CONFIG.hiveClient.database.call(\n \"get_follow_count\",\n [username]\n );\n } catch (e) {}\n\n let reputationValue = 0;\n try {\n const reputation = (await CONFIG.hiveClient.call(\n \"condenser_api\",\n \"get_account_reputations\",\n [username, 1]\n )) as AccountReputation[];\n reputationValue = reputation[0]?.reputation ?? 0;\n } catch (e) {}\n\n return {\n name: response[0].name,\n owner: response[0].owner,\n active: response[0].active,\n posting: response[0].posting,\n memo_key: response[0].memo_key,\n post_count: response[0].post_count,\n created: response[0].created,\n posting_json_metadata: response[0].posting_json_metadata,\n last_vote_time: response[0].last_vote_time,\n last_post: response[0].last_post,\n json_metadata: response[0].json_metadata,\n reward_hive_balance: response[0].reward_hive_balance,\n reward_hbd_balance: response[0].reward_hbd_balance,\n reward_vesting_hive: response[0].reward_vesting_hive,\n reward_vesting_balance: response[0].reward_vesting_balance,\n balance: response[0].balance,\n hbd_balance: response[0].hbd_balance,\n savings_balance: response[0].savings_balance,\n savings_hbd_balance: response[0].savings_hbd_balance,\n savings_hbd_last_interest_payment:\n response[0].savings_hbd_last_interest_payment,\n savings_hbd_seconds_last_update:\n response[0].savings_hbd_seconds_last_update,\n savings_hbd_seconds: response[0].savings_hbd_seconds,\n next_vesting_withdrawal: response[0].next_vesting_withdrawal,\n pending_claimed_accounts: response[0].pending_claimed_accounts,\n vesting_shares: response[0].vesting_shares,\n delegated_vesting_shares: response[0].delegated_vesting_shares,\n received_vesting_shares: response[0].received_vesting_shares,\n vesting_withdraw_rate: response[0].vesting_withdraw_rate,\n to_withdraw: response[0].to_withdraw,\n withdrawn: response[0].withdrawn,\n witness_votes: response[0].witness_votes,\n proxy: response[0].proxy,\n recovery_account: response[0].recovery_account,\n proxied_vsf_votes: response[0].proxied_vsf_votes,\n voting_manabar: response[0].voting_manabar,\n voting_power: response[0].voting_power,\n downvote_manabar: response[0].downvote_manabar,\n follow_stats,\n reputation: reputationValue,\n profile,\n } satisfies FullAccount;\n },\n enabled: !!username,\n staleTime: 60000,\n });\n}\n","import * as R from \"remeda\";\n\nimport { AccountProfile, FullAccount } from \"../types\";\n\nexport type ProfileTokens = AccountProfile[\"tokens\"];\n\nexport interface BuildProfileMetadataArgs {\n existingProfile?: AccountProfile;\n profile?: Partial<AccountProfile> | null;\n tokens?: ProfileTokens | null;\n}\n\nfunction sanitizeTokens(\n tokens?: ProfileTokens | null\n): ProfileTokens | undefined {\n // Guard against corrupted data from blockchain where tokens is not an array\n if (!tokens || !Array.isArray(tokens)) {\n return undefined;\n }\n\n return tokens.map(({ meta, ...rest }) => {\n if (!meta || typeof meta !== \"object\") {\n return { ...rest, meta };\n }\n\n const { privateKey, username, ...safeMeta } = meta;\n return { ...rest, meta: safeMeta };\n });\n}\n\nexport function parseProfileMetadata(\n postingJsonMetadata?: string | null\n): AccountProfile {\n if (!postingJsonMetadata) {\n return {} as AccountProfile;\n }\n\n try {\n const parsed = JSON.parse(postingJsonMetadata);\n if (\n parsed &&\n typeof parsed === \"object\" &&\n parsed.profile &&\n typeof parsed.profile === \"object\"\n ) {\n return parsed.profile as AccountProfile;\n }\n } catch (err) {}\n\n return {} as AccountProfile;\n}\n\nexport function extractAccountProfile(\n data?: Pick<FullAccount, \"posting_json_metadata\"> | null\n): AccountProfile {\n return parseProfileMetadata(data?.posting_json_metadata);\n}\n\nexport function buildProfileMetadata({\n existingProfile,\n profile,\n tokens,\n}: BuildProfileMetadataArgs): AccountProfile {\n const { tokens: profileTokens, version: _ignoredVersion, ...profileRest } =\n profile ?? {};\n\n const metadata = R.mergeDeep(\n existingProfile ?? ({} as AccountProfile),\n profileRest\n );\n\n // Clean up corrupted tokens data from blockchain before processing\n if (metadata.tokens && !Array.isArray(metadata.tokens)) {\n metadata.tokens = undefined;\n }\n\n const nextTokens = tokens ?? profileTokens;\n\n if (nextTokens && nextTokens.length > 0) {\n metadata.tokens = nextTokens;\n }\n\n metadata.tokens = sanitizeTokens(metadata.tokens);\n metadata.version = 2;\n\n return metadata;\n}\n","import { FullAccount, AccountProfile } from \"../types\";\nimport { parseProfileMetadata } from \"./profile-metadata\";\n\n/**\n * Parses raw account data from Hive API into FullAccount type\n * Handles profile metadata extraction from posting_json_metadata or json_metadata\n */\nexport function parseAccounts(rawAccounts: any[]): FullAccount[] {\n return rawAccounts.map((x) => {\n const account: FullAccount = {\n name: x.name,\n owner: x.owner,\n active: x.active,\n posting: x.posting,\n memo_key: x.memo_key,\n post_count: x.post_count,\n created: x.created,\n reputation: x.reputation,\n posting_json_metadata: x.posting_json_metadata,\n last_vote_time: x.last_vote_time,\n last_post: x.last_post,\n json_metadata: x.json_metadata,\n reward_hive_balance: x.reward_hive_balance,\n reward_hbd_balance: x.reward_hbd_balance,\n reward_vesting_hive: x.reward_vesting_hive,\n reward_vesting_balance: x.reward_vesting_balance,\n balance: x.balance,\n hbd_balance: x.hbd_balance,\n savings_balance: x.savings_balance,\n savings_hbd_balance: x.savings_hbd_balance,\n savings_hbd_last_interest_payment: x.savings_hbd_last_interest_payment,\n savings_hbd_seconds_last_update: x.savings_hbd_seconds_last_update,\n savings_hbd_seconds: x.savings_hbd_seconds,\n next_vesting_withdrawal: x.next_vesting_withdrawal,\n pending_claimed_accounts: x.pending_claimed_accounts,\n vesting_shares: x.vesting_shares,\n delegated_vesting_shares: x.delegated_vesting_shares,\n received_vesting_shares: x.received_vesting_shares,\n vesting_withdraw_rate: x.vesting_withdraw_rate,\n to_withdraw: x.to_withdraw,\n withdrawn: x.withdrawn,\n witness_votes: x.witness_votes,\n proxy: x.proxy,\n recovery_account: x.recovery_account,\n proxied_vsf_votes: x.proxied_vsf_votes,\n voting_manabar: x.voting_manabar,\n voting_power: x.voting_power,\n downvote_manabar: x.downvote_manabar,\n };\n\n // Try to parse profile from posting_json_metadata first\n let profile: AccountProfile | undefined = parseProfileMetadata(\n x.posting_json_metadata\n );\n\n // Fallback to json_metadata if posting_json_metadata didn't have a profile\n if (!profile || Object.keys(profile).length === 0) {\n try {\n const jsonMetadata = JSON.parse(x.json_metadata || \"{}\");\n if (jsonMetadata.profile) {\n profile = jsonMetadata.profile;\n }\n } catch (e) {\n // Ignore parsing errors\n }\n }\n\n // Ensure we always have a profile object\n if (!profile || Object.keys(profile).length === 0) {\n profile = {\n about: \"\",\n cover_image: \"\",\n location: \"\",\n name: \"\",\n profile_image: \"\",\n website: \"\",\n };\n }\n\n return { ...account, profile };\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { parseAccounts } from \"../utils/parse-accounts\";\nimport { FullAccount } from \"../types\";\n\nexport function getAccountsQueryOptions(usernames: string[]) {\n return queryOptions({\n queryKey: QueryKeys.accounts.list(...usernames),\n enabled: usernames.length > 0,\n queryFn: async (): Promise<FullAccount[]> => {\n const response = (await CONFIG.hiveClient.database.getAccounts(\n usernames\n )) as any[];\n return parseAccounts(response);\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { AccountFollowStats } from \"../types\";\n\n/**\n * Get follow count (followers and following) for an account\n */\nexport function getFollowCountQueryOptions(username: string) {\n return queryOptions({\n queryKey: QueryKeys.accounts.followCount(username),\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_follow_count\", [\n username,\n ]) as Promise<AccountFollowStats>,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Follow } from \"../types\";\n\n/**\n * Get list of accounts following a user\n *\n * @param following - The account being followed\n * @param startFollower - Pagination start point (account name)\n * @param followType - Type of follow relationship (default: \"blog\")\n * @param limit - Maximum number of results (default: 100)\n */\nexport function getFollowersQueryOptions(\n following: string | undefined,\n startFollower: string,\n followType = \"blog\",\n limit = 100\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.followers(following!, startFollower, followType, limit),\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_followers\", [\n following,\n startFollower,\n followType,\n limit,\n ]) as Promise<Follow[]>,\n enabled: !!following,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Follow } from \"../types\";\n\n/**\n * Get list of accounts that a user is following\n *\n * @param follower - The account doing the following\n * @param startFollowing - Pagination start point (account name)\n * @param followType - Type of follow relationship (default: \"blog\")\n * @param limit - Maximum number of results (default: 100)\n */\nexport function getFollowingQueryOptions(\n follower: string,\n startFollowing: string,\n followType = \"blog\",\n limit = 100\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.following(follower, startFollowing, followType, limit),\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_following\", [\n follower,\n startFollowing,\n followType,\n limit,\n ]) as Promise<Follow[]>,\n enabled: !!follower,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Follow } from \"../types\";\n\n/**\n * Get list of users that an account has muted\n *\n * @param username - The account username\n * @param limit - Maximum number of results (default: 100)\n */\nexport function getMutedUsersQueryOptions(username: string | undefined, limit = 100) {\n return queryOptions({\n queryKey: QueryKeys.accounts.mutedUsers(username!),\n queryFn: async () => {\n const response = (await CONFIG.hiveClient.database.call(\"get_following\", [\n username,\n \"\",\n \"ignore\",\n limit,\n ])) as Follow[];\n\n return response.map((user) => user.following);\n },\n enabled: !!username,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\n\n/**\n * Lookup accounts by username prefix\n *\n * @param query - Username prefix to search for\n * @param limit - Maximum number of results (default: 50)\n */\nexport function lookupAccountsQueryOptions(query: string, limit = 50) {\n return queryOptions({\n queryKey: QueryKeys.accounts.lookup(query, limit),\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"lookup_accounts\", [\n query,\n limit,\n ]) as Promise<string[]>,\n enabled: !!query,\n staleTime: Infinity,\n });\n}\n","import { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport function getSearchAccountsByUsernameQueryOptions(\n query: string,\n limit = 5,\n excludeList: string[] = []\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.search(query, excludeList),\n enabled: !!query,\n queryFn: async () => {\n const response = (await CONFIG.hiveClient.database.call(\n \"lookup_accounts\",\n [query, limit]\n )) as string[];\n return response.filter((item) =>\n excludeList.length > 0 ? !excludeList.includes(item) : true\n );\n },\n });\n}\n","import { CONFIG, getBoundFetch, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { AccountProfile } from \"../types\";\n\ntype AccountProfileToken = NonNullable<AccountProfile[\"tokens\"]>[number];\n\nexport type WalletMetadataCandidate = Partial<AccountProfileToken> & {\n currency?: string;\n show?: boolean;\n address?: string;\n publicKey?: string;\n privateKey?: string;\n username?: string;\n};\n\nexport interface CheckUsernameWalletsPendingResponse {\n exist: boolean;\n tokens?: WalletMetadataCandidate[];\n wallets?: WalletMetadataCandidate[];\n}\n\nconst RESERVED_META_KEYS = new Set([\n \"ownerPublicKey\",\n \"activePublicKey\",\n \"postingPublicKey\",\n \"memoPublicKey\",\n]);\n\ninterface WalletsEndpointResponseItem {\n token?: unknown;\n address?: unknown;\n status?: unknown;\n meta?: unknown;\n username?: unknown;\n}\n\nexport function checkUsernameWalletsPendingQueryOptions(\n username: string,\n code: string | undefined\n) {\n return queryOptions<CheckUsernameWalletsPendingResponse>({\n queryKey: QueryKeys.accounts.checkWalletPending(username, code ?? null),\n queryFn: async () => {\n if (!username || !code) {\n return { exist: false } satisfies CheckUsernameWalletsPendingResponse;\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/wallets\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n username,\n code,\n }),\n }\n );\n\n if (!response.ok) {\n return { exist: false } satisfies CheckUsernameWalletsPendingResponse;\n }\n\n const payload = (await response.json()) as unknown;\n\n const wallets: WalletMetadataCandidate[] = Array.isArray(payload)\n ? payload.flatMap((item) => {\n if (!item || typeof item !== \"object\") {\n return [];\n }\n\n const walletItem = item as WalletsEndpointResponseItem;\n\n const symbol =\n typeof walletItem.token === \"string\"\n ? walletItem.token\n : undefined;\n\n if (!symbol) {\n return [];\n }\n\n const meta: Record<string, unknown> =\n walletItem.meta && typeof walletItem.meta === \"object\"\n ? { ...(walletItem.meta as Record<string, unknown>) }\n : {};\n\n const sanitizedMeta: Record<string, unknown> = {};\n\n const address =\n typeof walletItem.address === \"string\" && walletItem.address\n ? walletItem.address\n : undefined;\n\n const statusShow =\n typeof walletItem.status === \"number\"\n ? walletItem.status === 3\n : undefined;\n\n const showFlag = statusShow ?? false;\n\n if (address) {\n sanitizedMeta.address = address;\n }\n\n sanitizedMeta.show = showFlag;\n\n const baseCandidate = {\n symbol,\n currency: symbol,\n address,\n show: showFlag,\n type: \"CHAIN\",\n meta: sanitizedMeta,\n } satisfies WalletMetadataCandidate;\n\n const metaTokenCandidates: WalletMetadataCandidate[] = [];\n\n for (const [metaSymbol, metaValue] of Object.entries(meta)) {\n if (typeof metaSymbol !== \"string\") {\n continue;\n }\n\n if (RESERVED_META_KEYS.has(metaSymbol)) {\n continue;\n }\n\n if (typeof metaValue !== \"string\" || !metaValue) {\n continue;\n }\n\n if (!/^[A-Z0-9]{2,10}$/.test(metaSymbol)) {\n continue;\n }\n\n metaTokenCandidates.push({\n symbol: metaSymbol,\n currency: metaSymbol,\n address: metaValue,\n show: showFlag,\n type: \"CHAIN\",\n meta: { address: metaValue, show: showFlag },\n });\n }\n\n return [baseCandidate, ...metaTokenCandidates];\n })\n : [];\n\n return {\n exist: wallets.length > 0,\n tokens: wallets.length ? wallets : undefined,\n wallets: wallets.length ? wallets : undefined,\n } satisfies CheckUsernameWalletsPendingResponse;\n },\n refetchOnMount: true,\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { AccountRelationship } from \"../types\";\n\nexport function getRelationshipBetweenAccountsQueryOptions(\n reference: string,\n target: string\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.relations(reference, target),\n enabled: !!reference && !!target,\n refetchOnMount: false,\n refetchInterval: 3_600_000,\n queryFn: async () => {\n return (await CONFIG.hiveClient.call(\n \"bridge\",\n \"get_relationship_between_accounts\",\n [reference, target]\n )) as AccountRelationship;\n },\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\ntype Subscriptions = string[];\n\nexport function getAccountSubscriptionsQueryOptions(\n username: string | undefined\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.subscriptions(username!),\n enabled: !!username,\n queryFn: async () => {\n const response = await CONFIG.hiveClient.call(\n \"bridge\",\n \"list_all_subscriptions\",\n {\n account: username,\n }\n );\n return (response ?? []) as Subscriptions;\n },\n });\n}\n","import { CONFIG, getBoundFetch, normalizeToWrappedResponse, QueryKeys } from \"@/modules/core\";\nimport { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { AccountBookmark } from \"../types\";\n\nexport function getBookmarksQueryOptions(\n activeUsername: string | undefined,\n code: string | undefined\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.bookmarks(activeUsername),\n enabled: !!activeUsername && !!code,\n queryFn: async () => {\n if (!activeUsername || !code) {\n throw new Error(\"[SDK][Accounts][Bookmarks] – missing auth\");\n }\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/bookmarks\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code }),\n }\n );\n return (await response.json()) as AccountBookmark[];\n },\n });\n}\n\nexport function getBookmarksInfiniteQueryOptions(\n activeUsername: string | undefined,\n code: string | undefined,\n limit: number = 10\n) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.accounts.bookmarksInfinite(activeUsername, limit),\n queryFn: async ({ pageParam = 0 }) => {\n if (!activeUsername || !code) {\n return {\n data: [],\n pagination: {\n total: 0,\n limit,\n offset: 0,\n has_next: false,\n },\n };\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `${CONFIG.privateApiHost}/private-api/bookmarks?format=wrapped&offset=${pageParam}&limit=${limit}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code }),\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch bookmarks: ${response.status}`);\n }\n\n const json = await response.json();\n return normalizeToWrappedResponse<AccountBookmark>(json, limit);\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage) => {\n if (lastPage.pagination.has_next) {\n return lastPage.pagination.offset + lastPage.pagination.limit;\n }\n return undefined;\n },\n enabled: !!activeUsername && !!code,\n });\n}\n","import { CONFIG, getBoundFetch, normalizeToWrappedResponse, QueryKeys } from \"@/modules/core\";\nimport { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { AccountFavorite } from \"../types\";\n\nexport function getFavouritesQueryOptions(\n activeUsername: string | undefined,\n code: string | undefined\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.favourites(activeUsername),\n enabled: !!activeUsername && !!code,\n queryFn: async () => {\n if (!activeUsername || !code) {\n throw new Error(\"[SDK][Accounts][Favourites] – missing auth\");\n }\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/favorites\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code }),\n }\n );\n return (await response.json()) as AccountFavorite[];\n },\n });\n}\n\nexport function getFavouritesInfiniteQueryOptions(\n activeUsername: string | undefined,\n code: string | undefined,\n limit: number = 10\n) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.accounts.favouritesInfinite(activeUsername, limit),\n queryFn: async ({ pageParam = 0 }) => {\n if (!activeUsername || !code) {\n return {\n data: [],\n pagination: {\n total: 0,\n limit,\n offset: 0,\n has_next: false,\n },\n };\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `${CONFIG.privateApiHost}/private-api/favorites?format=wrapped&offset=${pageParam}&limit=${limit}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code }),\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch favorites: ${response.status}`);\n }\n\n const json = await response.json();\n return normalizeToWrappedResponse<AccountFavorite>(json, limit);\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage) => {\n if (lastPage.pagination.has_next) {\n return lastPage.pagination.offset + lastPage.pagination.limit;\n }\n return undefined;\n },\n enabled: !!activeUsername && !!code,\n });\n}\n","import { CONFIG, getBoundFetch, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\n/**\n * Query options to check if a specific account is in the active user's favourites\n * @param activeUsername - The logged-in user's username\n * @param code - Access token for authentication\n * @param targetUsername - The username to check if favorited\n * @returns Query options for checking if target is favorited\n */\nexport function checkFavouriteQueryOptions(\n activeUsername: string | undefined,\n code: string | undefined,\n targetUsername: string | undefined\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.checkFavourite(activeUsername!, targetUsername!),\n enabled: !!activeUsername && !!code && !!targetUsername,\n queryFn: async () => {\n if (!activeUsername || !code) {\n throw new Error(\"[SDK][Accounts][Favourites] – missing auth\");\n }\n if (!targetUsername) {\n throw new Error(\"[SDK][Accounts][Favourites] – no target username\");\n }\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/favorites-check\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n account: targetUsername,\n }),\n }\n );\n\n // Validate HTTP response\n if (!response.ok) {\n throw new Error(\n `[SDK][Accounts][Favourites] – favorites-check failed with status ${response.status}: ${response.statusText}`\n );\n }\n\n // Parse and validate JSON payload\n const result = await response.json();\n if (typeof result !== \"boolean\") {\n throw new Error(\n `[SDK][Accounts][Favourites] – favorites-check returned invalid type: expected boolean, got ${typeof result}`\n );\n }\n\n return result;\n },\n });\n}\n","import { CONFIG, getBoundFetch, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { GetRecoveriesEmailResponse } from \"../types\";\n\nexport function getAccountRecoveriesQueryOptions(\n username: string | undefined,\n code: string | undefined\n) {\n return queryOptions({\n enabled: !!username && !!code,\n queryKey: QueryKeys.accounts.recoveries(username!),\n queryFn: async () => {\n if (!username || !code) {\n throw new Error(\"[SDK][Accounts] Missing username or access token\");\n }\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/recoveries\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code }),\n }\n );\n\n return response.json() as Promise<GetRecoveriesEmailResponse[]>;\n },\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport function getAccountPendingRecoveryQueryOptions(\n username: string | undefined\n) {\n return queryOptions({\n enabled: !!username,\n queryKey: QueryKeys.accounts.pendingRecovery(username!),\n queryFn: () =>\n CONFIG.hiveClient.call(\n \"database_api\",\n \"find_change_recovery_account_requests\",\n { accounts: [username] }\n ),\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { AccountReputation } from \"../types\";\n\nexport function getAccountReputationsQueryOptions(query: string, limit = 50) {\n return queryOptions({\n queryKey: QueryKeys.accounts.reputations(query, limit),\n enabled: !!query,\n queryFn: async (): Promise<AccountReputation[]> => {\n if (!query) {\n return [];\n }\n\n return CONFIG.hiveClient.call(\n \"condenser_api\",\n \"get_account_reputations\",\n [query, limit]\n ) as Promise<AccountReputation[]>;\n },\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { utils } from \"@hiveio/dhive\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Transaction, OperationGroup } from \"../types/transaction\";\n\nconst ops = utils.operationOrders;\n\nexport const ACCOUNT_OPERATION_GROUPS: Record<OperationGroup, number[]> = {\n transfers: [\n ops.transfer,\n ops.transfer_to_savings,\n ops.transfer_from_savings,\n ops.cancel_transfer_from_savings,\n ops.recurrent_transfer,\n ops.fill_recurrent_transfer,\n ops.escrow_transfer,\n ops.fill_recurrent_transfer,\n ],\n \"market-orders\": [\n ops.fill_convert_request,\n ops.fill_order,\n ops.fill_collateralized_convert_request,\n ops.limit_order_create2,\n ops.limit_order_create,\n ops.limit_order_cancel,\n ],\n interests: [ops.interest],\n \"stake-operations\": [\n ops.return_vesting_delegation,\n ops.withdraw_vesting,\n ops.transfer_to_vesting,\n ops.set_withdraw_vesting_route,\n ops.update_proposal_votes,\n ops.fill_vesting_withdraw,\n ops.account_witness_proxy,\n ops.delegate_vesting_shares,\n ],\n rewards: [\n ops.author_reward,\n ops.curation_reward,\n ops.producer_reward,\n ops.claim_reward_balance,\n ops.comment_benefactor_reward,\n ops.liquidity_reward,\n ops.proposal_pay,\n ],\n};\n\nexport const ALL_ACCOUNT_OPERATIONS = [...Object.values(ACCOUNT_OPERATION_GROUPS)].reduce(\n (acc, val) => acc.concat(val),\n []\n);\n\ntype TxPage = Transaction[];\ntype TxCursor = number;\n\ninterface AccountHistoryOperation {\n timestamp: string;\n trx_id: string;\n op: [Transaction[\"type\"], any];\n}\n\ntype AccountHistoryRecord = [number, AccountHistoryOperation];\n\n/**\n * Get account transaction history with pagination and filtering\n *\n * @param username - Account name to get transactions for\n * @param limit - Number of transactions per page\n * @param group - Filter by operation group (transfers, market-orders, etc.)\n */\nexport function getTransactionsInfiniteQueryOptions(\n username?: string,\n limit = 20,\n group: OperationGroup | \"\" = \"\"\n) {\n return infiniteQueryOptions<TxPage, Error, TxPage, (string | number)[], TxCursor>({\n queryKey: QueryKeys.accounts.transactions(username ?? \"\", group, limit),\n initialPageParam: -1 as TxCursor,\n\n queryFn: async ({ pageParam }: { pageParam: TxCursor }) => {\n if (!username) {\n return [];\n }\n\n let filters: number[] | undefined;\n try {\n // Create bitmask filters (requires BigInt support in browser)\n switch (group) {\n case \"transfers\":\n filters = utils.makeBitMaskFilter(ACCOUNT_OPERATION_GROUPS[\"transfers\"]);\n break;\n case \"market-orders\":\n filters = utils.makeBitMaskFilter(ACCOUNT_OPERATION_GROUPS[\"market-orders\"]);\n break;\n case \"interests\":\n filters = utils.makeBitMaskFilter(ACCOUNT_OPERATION_GROUPS[\"interests\"]);\n break;\n case \"stake-operations\":\n filters = utils.makeBitMaskFilter(ACCOUNT_OPERATION_GROUPS[\"stake-operations\"]);\n break;\n case \"rewards\":\n filters = utils.makeBitMaskFilter(ACCOUNT_OPERATION_GROUPS[\"rewards\"]);\n break;\n default:\n filters = utils.makeBitMaskFilter(ALL_ACCOUNT_OPERATIONS);\n }\n } catch (error) {\n // Fallback for browsers without BigInt support (Safari < 14)\n // Using undefined means no server-side filtering - will get all operations\n // and filter on client side (less efficient but still works)\n console.warn(\"BigInt not supported, using client-side filtering\", error);\n filters = undefined;\n }\n\n const response = (await (filters\n ? CONFIG.hiveClient.call(\"condenser_api\", \"get_account_history\", [\n username,\n pageParam,\n limit,\n ...filters,\n ])\n : CONFIG.hiveClient.call(\"condenser_api\", \"get_account_history\", [\n username,\n pageParam,\n limit,\n ]))) as AccountHistoryRecord[];\n\n const mapped: Transaction[] = response\n .map(([num, operation]) => {\n const base = {\n num,\n type: operation.op[0],\n timestamp: operation.timestamp,\n trx_id: operation.trx_id,\n } as const;\n\n const payload = operation.op[1] as Record<string, unknown>;\n return { ...base, ...payload } as Transaction;\n })\n .filter(Boolean)\n .sort((a, b) => b.num - a.num);\n\n return mapped;\n },\n\n getNextPageParam: (lastPage: TxPage | undefined): TxCursor =>\n lastPage?.length ? (lastPage[lastPage.length - 1]?.num ?? 0) - 1 : -1,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\n\nexport function getBotsQueryOptions() {\n return queryOptions({\n queryKey: QueryKeys.accounts.bots(),\n queryFn: async () => {\n const response = await fetch(CONFIG.privateApiHost + \"/private-api/public/bots\", {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch bots: ${response.status}`);\n }\n\n return response.json() as Promise<string[]>;\n },\n refetchOnMount: true,\n staleTime: Infinity,\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { ConfigManager, QueryKeys } from \"@/modules/core\";\nimport { ReferralItem } from \"../types/referral\";\n\ntype PageParam = { maxId?: number };\n\nexport function getReferralsInfiniteQueryOptions(username: string) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.accounts.referrals(username),\n initialPageParam: { maxId: undefined } as PageParam,\n queryFn: async ({ pageParam }: { pageParam: PageParam }) => {\n const { maxId } = pageParam ?? {};\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const url = new URL(`/private-api/referrals/${username}`, baseUrl);\n\n if (maxId !== undefined) {\n url.searchParams.set(\"max_id\", maxId.toString());\n }\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch referrals: ${response.status}`);\n }\n\n return response.json() as Promise<ReferralItem[]>;\n },\n getNextPageParam: (lastPage: ReferralItem[]) => {\n const nextMaxId = lastPage?.[lastPage.length - 1]?.id;\n return typeof nextMaxId === \"number\" ? ({ maxId: nextMaxId } as PageParam) : undefined;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { ReferralStat } from \"../types/referral\";\n\ninterface ReferralStatsResponse {\n total?: number;\n rewarded?: number;\n}\n\nexport function getReferralsStatsQueryOptions(username: string) {\n return queryOptions({\n queryKey: QueryKeys.accounts.referralsStats(username),\n queryFn: async () => {\n const response = await fetch(\n CONFIG.privateApiHost + `/private-api/referrals/${username}/stats`,\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch referral stats: ${response.status}`);\n }\n\n const data = await response.json() as ReferralStatsResponse;\n\n if (!data) {\n throw new Error(\"No Referrals for this user!\");\n }\n\n return {\n total: data.total ?? 0,\n rewarded: data.rewarded ?? 0,\n } as ReferralStat;\n },\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Follow, Profile, FriendsRow } from \"../types\";\n\nexport interface FriendsPageParam {\n startFollowing: string;\n}\n\ntype FriendsPage = FriendsRow[];\n\n/**\n * Get list of friends (following/followers) with profile information\n *\n * @param following - The account whose friends to get\n * @param mode - \"following\" or \"followers\"\n * @param followType - Type of follow relationship (default: \"blog\")\n * @param limit - Number of results per page (default: 100)\n * @param enabled - Whether query is enabled (default: true)\n */\nexport function getFriendsInfiniteQueryOptions(\n following: string,\n mode: \"following\" | \"followers\",\n options?: {\n followType?: string;\n limit?: number;\n enabled?: boolean;\n }\n) {\n const { followType = \"blog\", limit = 100, enabled = true } = options ?? {};\n\n return infiniteQueryOptions<FriendsPage, Error, FriendsPage, (string | number)[], FriendsPageParam>({\n queryKey: QueryKeys.accounts.friends(following, mode, followType, limit),\n initialPageParam: { startFollowing: \"\" } as FriendsPageParam,\n enabled,\n refetchOnMount: true,\n\n queryFn: async ({ pageParam }: { pageParam: FriendsPageParam }) => {\n const { startFollowing } = pageParam;\n\n const response = (await CONFIG.hiveClient.database.call(\n mode === \"following\" ? \"get_following\" : \"get_followers\",\n [following, startFollowing === \"\" ? null : startFollowing, followType, limit]\n )) as Follow[];\n\n const accountNames = response.map((e) =>\n mode === \"following\" ? e.following : e.follower\n );\n\n // Get profiles via bridge API\n const accounts = (await CONFIG.hiveClient.call(\"bridge\", \"get_profiles\", {\n accounts: accountNames,\n observer: undefined,\n })) as Profile[];\n\n const rows: FriendsPage = (accounts ?? []).map((a) => ({\n name: a.name,\n reputation: a.reputation,\n active: a.active, // Return raw timestamp\n }));\n\n return rows;\n },\n\n getNextPageParam: (lastPage: FriendsPage): FriendsPageParam | undefined =>\n lastPage && lastPage.length === limit\n ? { startFollowing: lastPage[lastPage.length - 1].name }\n : undefined,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Follow, Profile, FriendSearchResult } from \"../types\";\n\nconst SEARCH_LIMIT = 30;\n\n/**\n * Search friends (following/followers) by query string\n *\n * @param username - The account whose friends to search\n * @param mode - \"following\" or \"followers\"\n * @param query - Search query string\n */\nexport function getSearchFriendsQueryOptions(\n username: string,\n mode: \"following\" | \"followers\",\n query: string\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.searchFriends(username, mode, query),\n refetchOnMount: false,\n enabled: false, // Manual query via refetch\n queryFn: async (): Promise<FriendSearchResult[]> => {\n if (!query) return [];\n\n const start = query.slice(0, -1);\n const response = (await CONFIG.hiveClient.database.call(\n mode === \"following\" ? \"get_following\" : \"get_followers\",\n [username, start, \"blog\", 1000]\n )) as Follow[];\n\n const accountNames = response\n .map((e) => (mode === \"following\" ? e.following : e.follower))\n .filter((name) => name.toLowerCase().includes(query.toLowerCase()))\n .slice(0, SEARCH_LIMIT);\n\n // Get profiles via bridge API\n const accounts = (await CONFIG.hiveClient.call(\"bridge\", \"get_profiles\", {\n accounts: accountNames,\n observer: undefined,\n })) as Profile[];\n\n return (\n accounts?.map((a) => ({\n name: a.name,\n full_name: a.metadata.profile?.name || \"\",\n reputation: a.reputation,\n active: a.active, // Return raw timestamp\n })) ?? []\n );\n },\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { TrendingTag } from \"../types\";\n\nexport function getTrendingTagsQueryOptions(limit = 20) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.posts.trendingTags(),\n queryFn: async ({ pageParam: { afterTag } }) =>\n CONFIG.hiveClient.database\n .call(\"get_trending_tags\", [afterTag, limit])\n .then((tags: TrendingTag[]) =>\n tags\n .filter((x) => x.name !== \"\")\n .filter((x) => !x.name.startsWith(\"hive-\"))\n .map((x) => x.name)\n ),\n initialPageParam: { afterTag: \"\" },\n getNextPageParam: (lastPage) => ({\n afterTag: lastPage?.[lastPage?.length - 1],\n }),\n staleTime: Infinity,\n refetchOnMount: true,\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { isCommunity } from \"@/modules/core/utils\";\nimport { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { TrendingTag } from \"../types\";\n\nexport function getTrendingTagsWithStatsQueryOptions(limit = 250) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.posts.trendingTagsWithStats(limit),\n queryFn: async ({ pageParam: { afterTag } }) =>\n CONFIG.hiveClient.database\n .call(\"get_trending_tags\", [afterTag, limit])\n .then((tags: TrendingTag[]) =>\n tags.filter((tag) => tag.name !== \"\").filter((tag) => !isCommunity(tag.name))\n ),\n initialPageParam: { afterTag: \"\" },\n getNextPageParam: (lastPage) =>\n lastPage?.length ? { afterTag: lastPage[lastPage.length - 1].name } : undefined,\n staleTime: Infinity,\n refetchOnMount: true\n });\n}\n","import { CONFIG, getBoundFetch, normalizeToWrappedResponse, QueryKeys } from \"@/modules/core\";\nimport { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { Fragment } from \"../types\";\n\nexport function getFragmentsQueryOptions(username: string, code?: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.fragments(username),\n queryFn: async () => {\n if (!code) {\n return [];\n }\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/fragments\",\n {\n method: \"POST\",\n body: JSON.stringify({\n code,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n return response.json() as Promise<Fragment[]>;\n },\n enabled: !!username && !!code,\n });\n}\n\nexport function getFragmentsInfiniteQueryOptions(\n username: string | undefined,\n code?: string,\n limit: number = 10\n) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.posts.fragmentsInfinite(username, limit),\n queryFn: async ({ pageParam = 0 }) => {\n if (!username || !code) {\n return {\n data: [],\n pagination: {\n total: 0,\n limit,\n offset: 0,\n has_next: false,\n },\n };\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `${CONFIG.privateApiHost}/private-api/fragments?format=wrapped&offset=${pageParam}&limit=${limit}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n }),\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch fragments: ${response.status}`);\n }\n\n const json = await response.json();\n return normalizeToWrappedResponse<Fragment>(json, limit);\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage) => {\n if (lastPage.pagination.has_next) {\n return lastPage.pagination.offset + lastPage.pagination.limit;\n }\n return undefined;\n },\n enabled: !!username && !!code,\n });\n}\n","import { ConfigManager, getBoundFetch, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\n// TODO: replace any with Entry\nexport function getPromotedPostsQuery<T extends any>(\n type: \"feed\" | \"waves\" = \"feed\"\n) {\n return queryOptions({\n queryKey: QueryKeys.posts.promoted(type),\n queryFn: async () => {\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const url = new URL(\"/private-api/promoted-entries\", baseUrl);\n if (type === \"waves\") {\n url.searchParams.append(\"short_content\", \"1\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n const data = await response.json();\n return data as T[];\n },\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { Entry, Vote } from \"../types\";\n\nexport function getEntryActiveVotesQueryOptions(entry?: Entry) {\n return queryOptions({\n queryKey: QueryKeys.posts.entryActiveVotes(entry?.author, entry?.permlink),\n queryFn: async () => {\n return CONFIG.hiveClient.database.call(\"get_active_votes\", [\n entry?.author,\n entry?.permlink,\n ]) as Promise<Vote[]>;\n },\n enabled: !!entry,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { Vote } from \"../types\";\n\n/**\n * Get a specific user's vote on a post\n * Useful when post has >1000 votes to efficiently get one user's vote\n *\n * @param username - The voter's username\n * @param author - The post author\n * @param permlink - The post permlink\n */\nexport function getUserPostVoteQueryOptions(\n username: string | undefined,\n author: string | undefined,\n permlink: string | undefined\n) {\n return queryOptions({\n queryKey: QueryKeys.posts.userPostVote(username!, author!, permlink!),\n queryFn: async () => {\n const result = await CONFIG.hiveClient.call(\"database_api\", \"list_votes\", {\n start: [username, author, permlink],\n limit: 1,\n order: \"by_voter_comment\"\n });\n\n // Return first vote if found, otherwise null\n return (result?.votes?.[0] || null) as Vote | null;\n },\n enabled: !!username && !!author && !!permlink,\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { Entry } from \"../types\";\n\nexport function getContentQueryOptions(author: string, permlink: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.content(author, permlink),\n enabled: !!author && !!permlink,\n queryFn: async (): Promise<Entry> =>\n CONFIG.hiveClient.call(\"condenser_api\", \"get_content\", [\n author,\n permlink,\n ]) as Promise<Entry>,\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { Entry } from \"../types\";\n\nexport function getContentRepliesQueryOptions(author: string, permlink: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.contentReplies(author, permlink),\n enabled: !!author && !!permlink,\n queryFn: async (): Promise<Entry[]> =>\n CONFIG.hiveClient.call(\"condenser_api\", \"get_content_replies\", {\n author,\n permlink,\n }) as Promise<Entry[]>,\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { Entry } from \"../types\";\n\nexport function getPostHeaderQueryOptions(author: string, permlink: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.postHeader(author, permlink),\n queryFn: async () => {\n return CONFIG.hiveClient.call(\"bridge\", \"get_post_header\", {\n author,\n permlink,\n }) as Promise<Entry | null>;\n },\n initialData: null,\n });\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { Entry } from \"../types\";\n\n/**\n * Filters and censors entries that match DMCA patterns\n * @param entry - Single entry or array of entries to filter\n * @returns Filtered entry/entries with DMCA content censored.\n * Note: Can return null/undefined if input is falsy - callers should guard against this.\n */\nexport function filterDmcaEntry(entry: Entry): Entry | null | undefined;\nexport function filterDmcaEntry(entries: Entry[]): Entry[];\nexport function filterDmcaEntry(entryOrEntries: Entry | Entry[] | null | undefined): Entry | Entry[] | null | undefined {\n if (Array.isArray(entryOrEntries)) {\n return entryOrEntries.map((entry) => applyFilter(entry));\n }\n return applyFilter(entryOrEntries);\n}\n\nfunction applyFilter(entry: Entry | null | undefined): Entry | null | undefined {\n if (!entry) return entry;\n\n const entryPath = `@${entry.author}/${entry.permlink}`;\n const isDmca =\n CONFIG.dmcaPatterns.includes(entryPath) ||\n CONFIG.dmcaPatternRegexes.some((regex) => regex.test(entryPath));\n\n if (isDmca) {\n return {\n ...entry,\n body: \"This post is not available due to a copyright/fraudulent claim.\",\n title: \"\",\n };\n }\n\n return entry;\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { Entry } from \"../types\";\nimport { filterDmcaEntry } from \"../utils/filter-dmca-entries\";\n\nexport function getPostQueryOptions(\n author: string,\n permlink?: string,\n observer = \"\",\n num?: number\n) {\n const cleanPermlink = permlink?.trim();\n const entryPath = `/@${author}/${cleanPermlink ?? \"\"}`;\n\n return queryOptions({\n queryKey: QueryKeys.posts.entry(entryPath),\n queryFn: async () => {\n if (!cleanPermlink || cleanPermlink === \"undefined\") {\n return null;\n }\n\n const response = await CONFIG.hiveClient.call(\"bridge\", \"get_post\", {\n author,\n permlink: cleanPermlink,\n observer,\n });\n\n if (!response) {\n return null;\n }\n\n const entry = num !== undefined ? { ...response, num } as Entry : response as Entry;\n return filterDmcaEntry(entry);\n },\n enabled:\n !!author &&\n !!permlink &&\n permlink.trim() !== \"\" &&\n permlink.trim() !== \"undefined\",\n });\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { AccountRelationship, Profile } from \"@/modules/accounts/types\";\nimport { Community } from \"@/modules/communities/types/community\";\nimport { Subscription } from \"@/modules/communities/types/subscription\";\nimport { Entry } from \"@/modules/posts/types\";\nimport { filterDmcaEntry } from \"@/modules/posts/utils/filter-dmca-entries\";\n\ntype BridgeParams = Record<string, unknown> | unknown[];\n\nexport function bridgeApiCall<T>(endpoint: string, params: BridgeParams): Promise<T> {\n return CONFIG.hiveClient.call(\"bridge\", endpoint, params) as Promise<T>;\n}\n\nexport async function resolvePost(\n post: Entry,\n observer: string,\n num?: number\n): Promise<Entry> {\n const { json_metadata: json } = post;\n\n if (json?.original_author && json?.original_permlink && json.tags?.[0] === \"cross-post\") {\n try {\n const resp = await getPost(\n json.original_author,\n json.original_permlink,\n observer,\n num\n );\n if (resp) {\n return {\n ...post,\n original_entry: resp,\n num,\n };\n }\n return post;\n } catch {\n return post;\n }\n }\n\n return { ...post, num };\n}\n\nasync function resolvePosts(posts: Entry[], observer: string): Promise<Entry[]> {\n const validatedPosts = posts.map(validateEntry);\n const resolved = await Promise.all(validatedPosts.map((p) => resolvePost(p, observer)));\n return filterDmcaEntry(resolved) as Entry[];\n}\n\nexport async function getPostsRanked(\n sort: string,\n start_author: string = \"\",\n start_permlink: string = \"\",\n limit: number = 20,\n tag: string = \"\",\n observer: string = \"\"\n): Promise<Entry[] | null> {\n const resp = await bridgeApiCall<Entry[] | null>(\"get_ranked_posts\", {\n sort,\n start_author,\n start_permlink,\n limit,\n tag,\n observer,\n });\n\n if (resp) {\n return resolvePosts(resp, observer);\n }\n\n return resp;\n}\n\nexport async function getAccountPosts(\n sort: string,\n account: string,\n start_author: string = \"\",\n start_permlink: string = \"\",\n limit: number = 20,\n observer: string = \"\"\n): Promise<Entry[] | null> {\n if (CONFIG.dmcaAccounts.includes(account)) {\n return [];\n }\n\n const resp = await bridgeApiCall<Entry[] | null>(\"get_account_posts\", {\n sort,\n account,\n start_author,\n start_permlink,\n limit,\n observer,\n });\n\n if (resp) {\n return resolvePosts(resp, observer);\n }\n\n return resp;\n}\n\n/**\n * Validates that an Entry object has required properties with non-null values.\n */\nfunction validateEntry(entry: Entry): Entry {\n const newEntry: Entry = {\n ...entry,\n active_votes: Array.isArray(entry.active_votes) ? [...entry.active_votes] : [],\n beneficiaries: Array.isArray(entry.beneficiaries) ? [...entry.beneficiaries] : [],\n blacklists: Array.isArray(entry.blacklists) ? [...entry.blacklists] : [],\n replies: Array.isArray(entry.replies) ? [...entry.replies] : [],\n stats: entry.stats ? { ...entry.stats } : null,\n };\n\n const requiredStringProps: (keyof Entry)[] = [\n \"author\",\n \"title\",\n \"body\",\n \"created\",\n \"category\",\n \"permlink\",\n \"url\",\n \"updated\",\n ];\n\n for (const prop of requiredStringProps) {\n if (newEntry[prop] == null) {\n (newEntry as any)[prop] = \"\";\n }\n }\n\n if (newEntry.author_reputation == null) {\n newEntry.author_reputation = 0;\n }\n if (newEntry.children == null) {\n newEntry.children = 0;\n }\n if (newEntry.depth == null) {\n newEntry.depth = 0;\n }\n if (newEntry.net_rshares == null) {\n newEntry.net_rshares = 0;\n }\n if (newEntry.payout == null) {\n newEntry.payout = 0;\n }\n if (newEntry.percent_hbd == null) {\n newEntry.percent_hbd = 0;\n }\n\n if (!newEntry.stats) {\n newEntry.stats = {\n flag_weight: 0,\n gray: false,\n hide: false,\n total_votes: 0,\n };\n }\n\n if (newEntry.author_payout_value == null) {\n newEntry.author_payout_value = \"0.000 HBD\";\n }\n if (newEntry.curator_payout_value == null) {\n newEntry.curator_payout_value = \"0.000 HBD\";\n }\n if (newEntry.max_accepted_payout == null) {\n newEntry.max_accepted_payout = \"1000000.000 HBD\";\n }\n if (newEntry.payout_at == null) {\n newEntry.payout_at = \"\";\n }\n if (newEntry.pending_payout_value == null) {\n newEntry.pending_payout_value = \"0.000 HBD\";\n }\n if (newEntry.promoted == null) {\n newEntry.promoted = \"0.000 HBD\";\n }\n\n if (newEntry.is_paidout == null) {\n newEntry.is_paidout = false;\n }\n\n return newEntry;\n}\n\nexport async function getPost(\n author: string = \"\",\n permlink: string = \"\",\n observer: string = \"\",\n num?: number\n): Promise<Entry | undefined> {\n const resp = await bridgeApiCall<Entry | null>(\"get_post\", {\n author,\n permlink,\n observer,\n });\n\n if (resp) {\n const validatedEntry = validateEntry(resp);\n const post = await resolvePost(validatedEntry, observer, num);\n return filterDmcaEntry(post) as Entry;\n }\n\n return undefined;\n}\n\nexport async function getPostHeader(\n author: string = \"\",\n permlink: string = \"\"\n): Promise<Entry | null> {\n const resp = await bridgeApiCall<Entry | null>(\"get_post_header\", {\n author,\n permlink,\n });\n return resp ? validateEntry(resp) : resp;\n}\n\nexport async function getDiscussion(\n author: string,\n permlink: string,\n observer?: string\n): Promise<Record<string, Entry> | null> {\n const resp = await bridgeApiCall<Record<string, Entry> | null>(\"get_discussion\", {\n author,\n permlink,\n observer: observer || author,\n });\n\n if (resp) {\n const validatedResp: Record<string, Entry> = {};\n for (const [key, entry] of Object.entries(resp)) {\n validatedResp[key] = validateEntry(entry);\n }\n return validatedResp;\n }\n return resp;\n}\n\nexport async function getCommunity(\n name: string,\n observer: string | undefined = \"\"\n): Promise<Community | null> {\n return bridgeApiCall<Community | null>(\"get_community\", { name, observer });\n}\n\nexport async function getCommunities(\n last: string = \"\",\n limit: number = 100,\n query?: string | null,\n sort: string = \"rank\",\n observer: string = \"\"\n): Promise<Community[] | null> {\n return bridgeApiCall<Community[] | null>(\"list_communities\", {\n last,\n limit,\n query,\n sort,\n observer,\n });\n}\n\nexport async function normalizePost(post: unknown): Promise<Entry | null> {\n const resp = await bridgeApiCall<Entry | null>(\"normalize_post\", { post });\n return resp ? validateEntry(resp) : resp;\n}\n\nexport async function getSubscriptions(account: string): Promise<Subscription[] | null> {\n return bridgeApiCall<Subscription[] | null>(\"list_all_subscriptions\", { account });\n}\n\nexport async function getSubscribers(community: string): Promise<Subscription[] | null> {\n return bridgeApiCall<Subscription[] | null>(\"list_subscribers\", { community });\n}\n\nexport async function getRelationshipBetweenAccounts(\n follower: string,\n following: string\n): Promise<AccountRelationship | null> {\n return bridgeApiCall<AccountRelationship | null>(\"get_relationship_between_accounts\", [\n follower,\n following,\n ]);\n}\n\nexport async function getProfiles(\n accounts: string[],\n observer?: string\n): Promise<Profile[]> {\n return bridgeApiCall<Profile[]>(\"get_profiles\", { accounts, observer });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { Entry } from \"../types\";\nimport { filterDmcaEntry } from \"../utils/filter-dmca-entries\";\nimport { getDiscussion } from \"@/modules/bridge\";\n\nexport enum SortOrder {\n trending = \"trending\",\n author_reputation = \"author_reputation\",\n votes = \"votes\",\n created = \"created\",\n}\n\nfunction parseAsset(value: string): { amount: number; symbol: string } {\n const match = value.match(/^(\\d+\\.?\\d*)\\s*([A-Z]+)$/);\n if (!match) return { amount: 0, symbol: \"\" };\n return {\n amount: parseFloat(match[1]),\n symbol: match[2],\n };\n}\n\nexport function sortDiscussions(\n entry: Entry,\n discussion: Entry[],\n order: SortOrder\n) {\n const allPayout = (c: Entry) =>\n parseAsset(c.pending_payout_value).amount +\n parseAsset(c.author_payout_value).amount +\n parseAsset(c.curator_payout_value).amount;\n\n const absNegative = (a: Entry) => a.net_rshares < 0;\n const isPinned = (a: Entry) =>\n entry.json_metadata?.pinned_reply === `${a.author}/${a.permlink}`;\n\n const sortOrders = {\n trending: (a: Entry, b: Entry) => {\n if (absNegative(a)) {\n return 1;\n }\n\n if (absNegative(b)) {\n return -1;\n }\n\n const _a = allPayout(a);\n const _b = allPayout(b);\n if (_a !== _b) {\n return _b - _a;\n }\n\n return 0;\n },\n author_reputation: (a: Entry, b: Entry) => {\n const keyA = a.author_reputation;\n const keyB = b.author_reputation;\n\n if (keyA > keyB) return -1;\n if (keyA < keyB) return 1;\n\n return 0;\n },\n votes: (a: Entry, b: Entry) => {\n const keyA = a.children;\n const keyB = b.children;\n\n if (keyA > keyB) return -1;\n if (keyA < keyB) return 1;\n\n return 0;\n },\n created: (a: Entry, b: Entry) => {\n if (absNegative(a)) {\n return 1;\n }\n\n if (absNegative(b)) {\n return -1;\n }\n\n const keyA = Date.parse(a.created);\n const keyB = Date.parse(b.created);\n\n if (keyA > keyB) return -1;\n if (keyA < keyB) return 1;\n\n return 0;\n },\n };\n\n const sorted = discussion.sort(sortOrders[order]);\n const pinnedIndex = sorted.findIndex((i) => isPinned(i));\n const pinned = sorted[pinnedIndex];\n if (pinnedIndex >= 0) {\n sorted.splice(pinnedIndex, 1);\n sorted.unshift(pinned);\n }\n return sorted;\n}\n\nexport function getDiscussionsQueryOptions(\n entry: Entry,\n order: SortOrder = SortOrder.created,\n enabled: boolean = true,\n observer?: string\n) {\n return queryOptions({\n queryKey: QueryKeys.posts.discussions(entry?.author, entry?.permlink, order, observer || entry?.author),\n queryFn: async () => {\n if (!entry) {\n return [];\n }\n\n const response = await CONFIG.hiveClient.call(\"bridge\", \"get_discussion\", {\n author: entry.author,\n permlink: entry.permlink,\n observer: observer || entry.author,\n });\n\n const results = response\n ? Array.from(Object.values(response as Record<string, Entry>))\n : [];\n return filterDmcaEntry(results);\n },\n enabled: enabled && !!entry,\n select: (data: Entry[]) => sortDiscussions(entry, data, order),\n // Preserve optimistic entries during refetch by using structural sharing\n // This ensures newly added comments (is_optimistic: true) aren't wiped out\n // when blockchain hasn't indexed them yet\n structuralSharing: (oldData, newData) => {\n if (!oldData || !newData) return newData;\n\n // Find optimistic entries in old data that aren't in new data yet\n const optimisticEntries = (oldData as Entry[]).filter(\n (entry: Entry) => entry.is_optimistic === true\n );\n\n const fetchedPermlinks = new Set(\n (newData as Entry[]).map((e: Entry) => `${e.author}/${e.permlink}`)\n );\n\n const missingOptimistic = optimisticEntries.filter(\n (opt: Entry) => !fetchedPermlinks.has(`${opt.author}/${opt.permlink}`)\n );\n\n // If there are optimistic entries missing from new data, preserve them\n if (missingOptimistic.length > 0) {\n return [...(newData as Entry[]), ...missingOptimistic];\n }\n\n return newData;\n },\n });\n}\n\nexport function getDiscussionQueryOptions(\n author: string,\n permlink: string,\n observer?: string,\n enabled = true\n) {\n return queryOptions({\n queryKey: QueryKeys.posts.discussion(author, permlink, observer || author),\n enabled: enabled && !!author && !!permlink,\n queryFn: async () =>\n getDiscussion(author, permlink, observer) as Promise<Record<string, Entry> | null>,\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { Entry } from \"../types\";\nimport { filterDmcaEntry } from \"../utils/filter-dmca-entries\";\nimport { getAccountPosts } from \"@/modules/bridge\";\n\ntype PageParam = {\n author: string | undefined;\n permlink: string | undefined;\n hasNextPage: boolean;\n};\ntype Page = Entry[];\n\nexport function getAccountPostsInfiniteQueryOptions(\n username: string | undefined,\n filter = \"posts\",\n limit = 20,\n observer = \"\",\n enabled = true\n) {\n return infiniteQueryOptions<Page, Error, Page, (string | number)[], PageParam>({\n queryKey: QueryKeys.posts.accountPosts(username ?? \"\", filter, limit, observer),\n enabled: !!username && enabled,\n initialPageParam: {\n author: undefined,\n permlink: undefined,\n hasNextPage: true,\n } as PageParam,\n\n queryFn: async ({ pageParam }) => {\n if (!pageParam?.hasNextPage || !username) return [];\n\n interface AccountPostsParams {\n sort: string;\n account: string;\n limit: number;\n observer?: string;\n start_author?: string;\n start_permlink?: string;\n }\n\n const rpcParams: AccountPostsParams = {\n sort: filter,\n account: username,\n limit,\n ...(observer && observer.length > 0 ? { observer } : {}),\n ...(pageParam.author ? { start_author: pageParam.author } : {}),\n ...(pageParam.permlink ? { start_permlink: pageParam.permlink } : {}),\n };\n\n try {\n if (CONFIG.dmcaAccounts && CONFIG.dmcaAccounts.includes(username)) return [];\n\n const resp = await CONFIG.hiveClient.call(\n \"bridge\",\n \"get_account_posts\",\n rpcParams\n );\n\n if (resp && Array.isArray(resp)) {\n return filterDmcaEntry(resp as Entry[]);\n }\n return [];\n } catch (err) {\n console.error(\"[SDK] get_account_posts error:\", err);\n return [];\n }\n },\n\n getNextPageParam: (lastPage: Page): PageParam | undefined => {\n const last = lastPage?.[lastPage.length - 1];\n // Only consider there's a next page if we got a full page of results\n // A partial page means we've reached the end\n const hasNextPage = (lastPage?.length ?? 0) === limit;\n\n if (!hasNextPage) {\n return undefined;\n }\n\n return {\n author: last?.author,\n permlink: last?.permlink,\n hasNextPage,\n };\n },\n });\n}\n\nexport function getAccountPostsQueryOptions(\n username: string | undefined,\n filter = \"posts\",\n start_author: string = \"\",\n start_permlink: string = \"\",\n limit = 20,\n observer = \"\",\n enabled = true\n) {\n return queryOptions({\n queryKey: QueryKeys.posts.accountPostsPage(username ?? \"\", filter, start_author, start_permlink, limit, observer),\n enabled: !!username && enabled,\n queryFn: async () => {\n if (!username) {\n return [];\n }\n\n const response = await getAccountPosts(\n filter,\n username,\n start_author,\n start_permlink,\n limit,\n observer\n );\n\n return filterDmcaEntry(response ?? []) as Entry[];\n },\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { Entry } from \"../types\";\nimport { filterDmcaEntry } from \"../utils/filter-dmca-entries\";\nimport { getPostsRanked } from \"@/modules/bridge\";\n\ntype PageParam = {\n author: string | undefined;\n permlink: string | undefined;\n hasNextPage: boolean;\n};\n\ninterface GetPostsRankedOptions {\n resolvePosts?: boolean;\n}\n\nexport function getPostsRankedInfiniteQueryOptions(\n sort: string,\n tag: string,\n limit = 20,\n observer = \"\",\n enabled = true,\n _options: GetPostsRankedOptions = {}\n) {\n return infiniteQueryOptions<Entry[], Error, Entry[], (string | number)[], PageParam>({\n queryKey: QueryKeys.posts.postsRanked(sort, tag, limit, observer),\n queryFn: async ({ pageParam }: { pageParam: PageParam }) => {\n if (!pageParam.hasNextPage) {\n return [];\n }\n\n let sanitizedTag = tag;\n if (CONFIG.dmcaTagRegexes.some((regex) => regex.test(tag))) {\n sanitizedTag = \"\";\n }\n\n const response = await CONFIG.hiveClient.call(\"bridge\", \"get_ranked_posts\", {\n sort,\n start_author: pageParam.author,\n start_permlink: pageParam.permlink,\n limit,\n tag: sanitizedTag,\n observer,\n });\n\n if (response && Array.isArray(response)) {\n const data = response as Entry[];\n\n // Sort by created date unless it's \"hot\"\n const sorted =\n sort === \"hot\"\n ? data\n : data.sort(\n (a, b) =>\n new Date(b.created).getTime() - new Date(a.created).getTime()\n );\n\n // Handle pinned entries\n const pinnedEntry = sorted.find((s) => s.stats?.is_pinned);\n const nonPinnedEntries = sorted.filter((s) => !s.stats?.is_pinned);\n\n const combined = [pinnedEntry, ...nonPinnedEntries].filter((s) => !!s) as Entry[];\n return filterDmcaEntry(combined);\n }\n\n return [];\n },\n enabled,\n initialPageParam: {\n author: undefined,\n permlink: undefined,\n hasNextPage: true,\n } as PageParam,\n getNextPageParam: (lastPage: Entry[]) => {\n const last = lastPage?.[lastPage.length - 1];\n return {\n author: last?.author,\n permlink: last?.permlink,\n hasNextPage: (lastPage?.length ?? 0) > 0,\n };\n },\n });\n}\n\nexport function getPostsRankedQueryOptions(\n sort: string,\n start_author: string = \"\",\n start_permlink: string = \"\",\n limit: number = 20,\n tag: string = \"\",\n observer: string = \"\",\n enabled = true\n) {\n return queryOptions({\n queryKey: QueryKeys.posts.postsRankedPage(sort, start_author, start_permlink, limit, tag, observer),\n enabled,\n queryFn: async () => {\n let sanitizedTag = tag;\n if (CONFIG.dmcaTagRegexes.some((regex) => regex.test(tag))) {\n sanitizedTag = \"\";\n }\n\n const response = await getPostsRanked(\n sort,\n start_author,\n start_permlink,\n limit,\n sanitizedTag,\n observer\n );\n\n return filterDmcaEntry(response ?? []) as Entry[];\n },\n });\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport interface BlogEntry {\n author: string;\n permlink: string;\n blog: string;\n reblog_on: string;\n reblogged_on: string;\n entry_id: number;\n}\n\nexport interface Reblog {\n author: string;\n permlink: string;\n}\n\nexport function getReblogsQueryOptions(\n username?: string,\n activeUsername?: string,\n limit = 200\n) {\n return queryOptions({\n queryKey: QueryKeys.posts.reblogs(username ?? \"\", limit),\n queryFn: async () => {\n const response = (await CONFIG.hiveClient.call(\"condenser_api\", \"get_blog_entries\", [\n username ?? activeUsername,\n 0,\n limit,\n ])) as BlogEntry[];\n\n return response\n .filter(\n (i) =>\n i.author !== activeUsername &&\n !i.reblogged_on.startsWith(\"1970-\")\n )\n .map((i) => ({ author: i.author, permlink: i.permlink })) as Reblog[];\n },\n enabled: !!username,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\n\n/**\n * Get list of usernames who reblogged a specific post\n */\nexport function getRebloggedByQueryOptions(author?: string, permlink?: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.rebloggedBy(author ?? \"\", permlink ?? \"\"),\n queryFn: async () => {\n if (!author || !permlink) {\n return [];\n }\n\n const response = (await CONFIG.hiveClient.call(\n \"condenser_api\",\n \"get_reblogged_by\",\n [author, permlink]\n )) as string[];\n\n return Array.isArray(response) ? response : [];\n },\n enabled: !!author && !!permlink,\n });\n}\n","import { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, getBoundFetch, normalizeToWrappedResponse, QueryKeys } from \"@/modules/core\";\nimport { Schedule } from \"../types/schedule\";\n\nexport function getSchedulesQueryOptions(activeUsername: string | undefined, code?: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.schedules(activeUsername),\n queryFn: async () => {\n if (!activeUsername || !code) {\n return [];\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/schedules\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch schedules: ${response.status}`);\n }\n\n return response.json() as Promise<Schedule[]>;\n },\n enabled: !!activeUsername && !!code,\n });\n}\n\nexport function getSchedulesInfiniteQueryOptions(\n activeUsername: string | undefined,\n code?: string,\n limit: number = 10\n) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.posts.schedulesInfinite(activeUsername, limit),\n queryFn: async ({ pageParam = 0 }) => {\n if (!activeUsername || !code) {\n return {\n data: [],\n pagination: {\n total: 0,\n limit,\n offset: 0,\n has_next: false,\n },\n };\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `${CONFIG.privateApiHost}/private-api/schedules?format=wrapped&offset=${pageParam}&limit=${limit}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n }),\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch schedules: ${response.status}`);\n }\n\n const json = await response.json();\n return normalizeToWrappedResponse<Schedule>(json, limit);\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage) => {\n if (lastPage.pagination.has_next) {\n return lastPage.pagination.offset + lastPage.pagination.limit;\n }\n return undefined;\n },\n enabled: !!activeUsername && !!code,\n });\n}\n","import { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, getBoundFetch, normalizeToWrappedResponse, QueryKeys } from \"@/modules/core\";\nimport { Draft } from \"../types/draft\";\n\nexport function getDraftsQueryOptions(activeUsername: string | undefined, code?: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.drafts(activeUsername),\n queryFn: async () => {\n if (!activeUsername || !code) {\n return [];\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/drafts\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch drafts: ${response.status}`);\n }\n\n return response.json() as Promise<Draft[]>;\n },\n enabled: !!activeUsername && !!code,\n });\n}\n\nexport function getDraftsInfiniteQueryOptions(\n activeUsername: string | undefined,\n code?: string,\n limit: number = 10\n) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.posts.draftsInfinite(activeUsername, limit),\n queryFn: async ({ pageParam = 0 }) => {\n if (!activeUsername || !code) {\n return {\n data: [],\n pagination: {\n total: 0,\n limit,\n offset: 0,\n has_next: false,\n },\n };\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `${CONFIG.privateApiHost}/private-api/drafts?format=wrapped&offset=${pageParam}&limit=${limit}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n }),\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch drafts: ${response.status}`);\n }\n\n const json = await response.json();\n // Normalize response for backwards compatibility\n // If backend doesn't support wrapped format yet, it returns Draft[]\n return normalizeToWrappedResponse<Draft>(json, limit);\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage) => {\n if (lastPage.pagination.has_next) {\n return lastPage.pagination.offset + lastPage.pagination.limit;\n }\n return undefined;\n },\n enabled: !!activeUsername && !!code,\n });\n}\n","import { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, getBoundFetch, normalizeToWrappedResponse, QueryKeys } from \"@/modules/core\";\nimport { UserImage } from \"../types/user-image\";\n\nasync function fetchUserImages(code: string | undefined): Promise<UserImage[]> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/images\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch images: ${response.status}`);\n }\n\n return response.json() as Promise<UserImage[]>;\n}\n\nexport function getImagesQueryOptions(username?: string, code?: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.images(username),\n queryFn: async () => {\n if (!username || !code) {\n return [];\n }\n return fetchUserImages(code);\n },\n enabled: !!username && !!code,\n });\n}\n\nexport function getGalleryImagesQueryOptions(activeUsername: string | undefined, code?: string) {\n return queryOptions({\n queryKey: QueryKeys.posts.galleryImages(activeUsername),\n queryFn: async () => {\n if (!activeUsername || !code) {\n return [];\n }\n return fetchUserImages(code);\n },\n enabled: !!activeUsername && !!code,\n });\n}\n\nexport function getImagesInfiniteQueryOptions(\n username: string | undefined,\n code?: string,\n limit: number = 10\n) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.posts.imagesInfinite(username, limit),\n queryFn: async ({ pageParam = 0 }) => {\n if (!username || !code) {\n return {\n data: [],\n pagination: {\n total: 0,\n limit,\n offset: 0,\n has_next: false,\n },\n };\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `${CONFIG.privateApiHost}/private-api/images?format=wrapped&offset=${pageParam}&limit=${limit}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n }),\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch images: ${response.status}`);\n }\n\n const json = await response.json();\n return normalizeToWrappedResponse<UserImage>(json, limit);\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage) => {\n if (lastPage.pagination.has_next) {\n return lastPage.pagination.offset + lastPage.pagination.limit;\n }\n return undefined;\n },\n enabled: !!username && !!code,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { CommentHistory } from \"../types/comment-history\";\n\nexport function getCommentHistoryQueryOptions(author: string, permlink: string, onlyMeta = false) {\n return queryOptions({\n queryKey: QueryKeys.posts.commentHistory(author, permlink, onlyMeta),\n queryFn: async ({ signal }) => {\n const response = await fetch(CONFIG.privateApiHost + \"/private-api/comment-history\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n author,\n permlink,\n onlyMeta: onlyMeta ? \"1\" : \"\",\n }),\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch comment history: ${response.status}`);\n }\n\n return response.json() as Promise<CommentHistory>;\n },\n enabled: !!author && !!permlink,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { CommentHistory } from \"../types/comment-history\";\n\nfunction makeEntryPath(author: string, permlink: string): string {\n const cleanAuthor = author?.trim();\n const cleanPermlink = permlink?.trim();\n\n if (!cleanAuthor || !cleanPermlink) {\n throw new Error(\"Invalid entry path: author and permlink are required\");\n }\n\n // Normalize by removing any leading @ or / characters\n const normalizedAuthor = cleanAuthor.replace(/^@+/, \"\");\n const normalizedPermlink = cleanPermlink.replace(/^\\/+/, \"\");\n\n if (!normalizedAuthor || !normalizedPermlink) {\n throw new Error(\"Invalid entry path: author and permlink cannot be empty after normalization\");\n }\n\n return `@${normalizedAuthor}/${normalizedPermlink}`;\n}\n\nexport interface DeletedEntry {\n body: string;\n title: string;\n tags: string[];\n}\n\nexport function getDeletedEntryQueryOptions(author: string, permlink: string) {\n const cleanPermlink = permlink?.trim();\n const cleanAuthor = author?.trim();\n const isValid =\n !!cleanAuthor && !!cleanPermlink && cleanPermlink !== \"undefined\";\n\n const entryPath = isValid ? makeEntryPath(cleanAuthor, cleanPermlink) : \"\";\n\n return queryOptions({\n queryKey: QueryKeys.posts.deletedEntry(entryPath),\n queryFn: async ({ signal }) => {\n const response = await fetch(CONFIG.privateApiHost + \"/private-api/comment-history\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n author,\n permlink: cleanPermlink || \"\",\n }),\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch comment history: ${response.status}`);\n }\n\n return response.json() as Promise<CommentHistory>;\n },\n select: (history): DeletedEntry | null => {\n if (!history?.list?.[0]) {\n return null;\n }\n const { body, title, tags } = history.list[0];\n return {\n body,\n title,\n tags,\n };\n },\n enabled: isValid,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { PostTipsResponse } from \"../types/post-tip\";\n\nexport function getPostTipsQueryOptions(author: string, permlink: string, isEnabled = true) {\n return queryOptions({\n queryKey: QueryKeys.posts.tips(author, permlink),\n queryFn: async () => {\n const response = await fetch(CONFIG.privateApiHost + \"/private-api/post-tips\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n author,\n permlink,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch post tips: ${response.status}`);\n }\n\n return response.json() as Promise<PostTipsResponse>;\n },\n enabled: !!author && !!permlink && isEnabled,\n });\n}\n","import { Entry, WaveEntry } from \"../types\";\nimport { getDiscussionsQueryOptions, SortOrder } from \"../queries/get-discussions-query-options\";\nimport { CONFIG } from \"@/modules/core\";\n\ntype EntryWithPostId = Entry & { post_id: number };\n\nfunction normalizeContainer(entry: EntryWithPostId, host: string): WaveEntry {\n return {\n ...entry,\n id: entry.id ?? entry.post_id,\n host\n } as WaveEntry;\n}\n\nfunction normalizeParent(entry: EntryWithPostId): Entry {\n return {\n ...entry,\n id: entry.id ?? entry.post_id\n } as Entry;\n}\n\nexport function normalizeWaveEntryFromApi(\n entry:\n | (Entry & { post_id: number; container?: EntryWithPostId | null; parent?: EntryWithPostId | null })\n | null\n | undefined,\n host: string\n): WaveEntry | null {\n if (!entry) {\n return null;\n }\n\n const containerSource = entry.container ?? entry;\n const container = normalizeContainer(containerSource, host);\n\n const parent = entry.parent ? normalizeParent(entry.parent) : undefined;\n\n return {\n ...entry,\n id: entry.id ?? entry.post_id,\n host,\n container,\n parent\n } as WaveEntry;\n}\n\nexport function toEntryArray(x: unknown): Entry[] {\n return Array.isArray(x) ? (x as Entry[]) : [];\n}\n\nexport async function getVisibleFirstLevelThreadItems(\n container: WaveEntry\n): Promise<Entry[]> {\n const queryOptions = getDiscussionsQueryOptions(container, SortOrder.created, true);\n const discussionItemsRaw = await CONFIG.queryClient.fetchQuery(queryOptions);\n const discussionItems = toEntryArray(discussionItemsRaw);\n\n if (discussionItems.length <= 1) {\n return [];\n }\n\n const firstLevelItems = discussionItems.filter(\n ({ parent_author, parent_permlink }) =>\n parent_author === container.author && parent_permlink === container.permlink\n );\n\n if (firstLevelItems.length === 0) {\n return [];\n }\n\n const visibleItems = firstLevelItems.filter((item) => !item.stats?.gray);\n\n return visibleItems;\n}\n\nexport function mapThreadItemsToWaveEntries(\n items: Entry[],\n container: WaveEntry,\n host: string\n): WaveEntry[] {\n if (items.length === 0) {\n return [];\n }\n\n return items\n .map((item) => {\n const parent = items.find(\n (i) =>\n i.author === item.parent_author &&\n i.permlink === item.parent_permlink &&\n i.author !== host\n );\n\n return {\n ...item,\n id: item.post_id,\n host,\n container,\n parent\n } as WaveEntry;\n })\n .filter((entry) => entry.container.post_id !== entry.post_id)\n .sort(\n (a, b) => new Date(b.created).getTime() - new Date(a.created).getTime()\n );\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { WaveEntry } from \"../types\";\nimport {\n getVisibleFirstLevelThreadItems,\n mapThreadItemsToWaveEntries\n} from \"../utils/waves-helpers\";\n\nconst THREAD_CONTAINER_BATCH_SIZE = 5;\nconst MAX_CONTAINERS_TO_SCAN = 50;\n\ninterface ThreadsResult {\n entries: WaveEntry[];\n}\n\nasync function getThreads(\n host: string,\n pageParam?: WaveEntry\n): Promise<ThreadsResult | null> {\n let startAuthor = pageParam?.author;\n let startPermlink = pageParam?.permlink;\n let scannedContainers = 0;\n let skipContainerId = pageParam?.post_id;\n\n while (scannedContainers < MAX_CONTAINERS_TO_SCAN) {\n interface AccountPostsParams {\n sort: string;\n account: string;\n limit: number;\n start_author?: string;\n start_permlink?: string;\n }\n\n const rpcParams: AccountPostsParams = {\n sort: \"posts\", // ProfileFilter.posts\n account: host,\n limit: THREAD_CONTAINER_BATCH_SIZE,\n ...(startAuthor ? { start_author: startAuthor } : {}),\n ...(startPermlink ? { start_permlink: startPermlink } : {})\n };\n\n const containers = (await CONFIG.hiveClient.call(\n \"bridge\",\n \"get_account_posts\",\n rpcParams\n )) as WaveEntry[]; // API shape is known\n\n if (!containers || containers.length === 0) {\n return null;\n }\n\n const normalizedContainers = containers.map((container) => {\n container.id = container.post_id;\n container.host = host;\n return container;\n });\n\n for (const container of normalizedContainers) {\n if (skipContainerId && container.post_id === skipContainerId) {\n skipContainerId = undefined;\n continue;\n }\n\n scannedContainers += 1;\n\n if (container.stats?.gray) {\n startAuthor = container.author;\n startPermlink = container.permlink;\n continue;\n }\n\n const visibleItems = await getVisibleFirstLevelThreadItems(container);\n\n if (visibleItems.length === 0) {\n startAuthor = container.author;\n startPermlink = container.permlink;\n continue;\n }\n\n return {\n entries: mapThreadItemsToWaveEntries(visibleItems, container, host)\n };\n }\n\n const lastContainer = normalizedContainers[normalizedContainers.length - 1];\n\n if (!lastContainer) {\n return null;\n }\n\n startAuthor = lastContainer.author;\n startPermlink = lastContainer.permlink;\n }\n\n return null;\n}\n\n// Page = array of WaveEntry; Cursor = WaveEntry (container) or undefined\ntype WavesPage = WaveEntry[];\ntype WavesCursor = WaveEntry | undefined;\n\nexport function getWavesByHostQueryOptions(host: string) {\n return infiniteQueryOptions<WavesPage, Error, WavesPage, string[], WavesCursor>({\n queryKey: QueryKeys.posts.wavesByHost(host),\n initialPageParam: undefined as WavesCursor,\n\n queryFn: async ({ pageParam }: { pageParam: WavesCursor }) => {\n const result = await getThreads(host, pageParam);\n if (!result) return []; // no items to show for this page\n\n return result.entries;\n },\n\n getNextPageParam: (lastPage: WavesPage): WavesCursor => lastPage?.[0]?.container\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { ConfigManager, QueryKeys } from \"@/modules/core\";\nimport { Entry, WaveEntry } from \"../types\";\nimport { normalizeWaveEntryFromApi } from \"../utils/waves-helpers\";\n\ntype WavesTagEntryResponse = Entry & {\n post_id: number;\n container?: (Entry & { post_id: number }) | null;\n parent?: (Entry & { post_id: number }) | null;\n};\n\nconst DEFAULT_TAG_FEED_LIMIT = 40;\n\nexport function getWavesByTagQueryOptions(host: string, tag: string, limit = DEFAULT_TAG_FEED_LIMIT) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.posts.wavesByTag(host, tag),\n initialPageParam: undefined,\n\n queryFn: async ({ signal }) => {\n try {\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const url = new URL(\"/private-api/waves/tags\", baseUrl);\n url.searchParams.set(\"container\", host);\n url.searchParams.set(\"tag\", tag);\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch waves by tag: ${response.status}`);\n }\n\n const data = await response.json() as WavesTagEntryResponse[];\n\n const result = data\n .slice(0, limit)\n .map((entry) => normalizeWaveEntryFromApi(entry, host))\n .filter((entry): entry is WaveEntry => Boolean(entry));\n\n return result.sort(\n (a, b) => new Date(b.created).getTime() - new Date(a.created).getTime()\n );\n } catch (error) {\n console.error(\"[SDK] Failed to fetch waves by tag\", error);\n return [];\n }\n },\n\n getNextPageParam: () => undefined\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { ConfigManager, QueryKeys } from \"@/modules/core\";\nimport { Entry, WaveEntry } from \"../types\";\nimport { normalizeWaveEntryFromApi } from \"../utils/waves-helpers\";\n\ntype WavesFollowingEntry = Entry & {\n post_id: number;\n container?: (Entry & { post_id: number }) | null;\n parent?: (Entry & { post_id: number }) | null;\n};\n\nexport function getWavesFollowingQueryOptions(host: string, username?: string) {\n const normalizedUsername = username?.trim().toLowerCase();\n\n return infiniteQueryOptions({\n queryKey: QueryKeys.posts.wavesFollowing(host, normalizedUsername ?? \"\"),\n enabled: Boolean(normalizedUsername),\n initialPageParam: undefined,\n\n queryFn: async ({ signal }) => {\n if (!normalizedUsername) {\n return [];\n }\n\n try {\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const url = new URL(\"/private-api/waves/following\", baseUrl);\n url.searchParams.set(\"container\", host);\n url.searchParams.set(\"username\", normalizedUsername);\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch waves following feed: ${response.status}`);\n }\n\n const data = await response.json() as WavesFollowingEntry[];\n\n if (!Array.isArray(data) || data.length === 0) {\n return [];\n }\n\n const flattened = data\n .map((entry) => normalizeWaveEntryFromApi(entry, host))\n .filter((entry): entry is WaveEntry => Boolean(entry));\n\n if (flattened.length === 0) {\n return [];\n }\n\n return flattened.sort(\n (a, b) => new Date(b.created).getTime() - new Date(a.created).getTime()\n );\n } catch (error) {\n console.error(\"[SDK] Failed to fetch waves following feed\", error);\n return [];\n }\n },\n\n getNextPageParam: () => undefined\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { ConfigManager, QueryKeys } from \"@/modules/core\";\nimport { WaveTrendingTag } from \"../types\";\n\ninterface WavesTrendingTagResponse {\n tag: string;\n posts: number;\n}\n\nexport function getWavesTrendingTagsQueryOptions(host: string, hours = 24) {\n return queryOptions({\n queryKey: QueryKeys.posts.wavesTrendingTags(host, hours),\n queryFn: async ({ signal }): Promise<WaveTrendingTag[]> => {\n try {\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const url = new URL(\"/private-api/waves/trending/tags\", baseUrl);\n url.searchParams.set(\"container\", host);\n url.searchParams.set(\"hours\", hours.toString());\n\n const response = await fetch(url.toString(), {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch waves trending tags: ${response.status}`);\n }\n\n const data = await response.json() as WavesTrendingTagResponse[];\n\n return data.map(({ tag, posts }) => ({ tag, posts }));\n } catch (error) {\n console.error(\"[SDK] Failed to fetch waves trending tags\", error);\n return [];\n }\n }\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Entry } from \"../types\";\nimport { normalizePost } from \"@/modules/bridge\";\n\nexport function getNormalizePostQueryOptions(\n post: { author?: string; permlink?: string } | undefined,\n enabled = true\n) {\n return queryOptions({\n queryKey: QueryKeys.posts.normalize(post?.author ?? \"\", post?.permlink ?? \"\"),\n enabled: enabled && !!post,\n queryFn: async () => normalizePost(post) as Promise<Entry | null>,\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Entry } from \"@/modules/posts/types\";\nimport { getPostQueryOptions } from \"@/modules/posts/queries\";\n\ninterface VoteOperationDetails {\n voter: string;\n author: string;\n permlink: string;\n weight: number;\n}\n\ninterface AccountVoteHistoryItem {\n timestamp: string;\n op: [string, VoteOperationDetails];\n}\n\ntype AccountVoteHistoryRecord = [number, AccountVoteHistoryItem];\n\ninterface VoteHistoryResult extends VoteOperationDetails {\n num: number;\n timestamp: string;\n}\n\nexport interface VoteHistoryPageParam {\n start: number;\n}\n\nexport interface VoteHistoryPage {\n lastDate: number;\n lastItemFetched: number;\n entries: Entry[];\n}\n\nfunction isEntry(x: unknown): x is Entry {\n return (\n !!x &&\n typeof x === \"object\" &&\n \"author\" in x &&\n \"permlink\" in x &&\n \"active_votes\" in x\n );\n}\n\n/**\n * Calculate days since a date\n */\nfunction getDays(createdDate: string): number {\n const past = new Date(createdDate);\n const now = new Date();\n const diffMs = now.getTime() - past.getTime();\n return diffMs / (1000 * 60 * 60 * 24);\n}\n\n/**\n * Get account vote history with entries\n *\n * @param username - Account name to get vote history for\n * @param limit - Number of history items per page (default: 20)\n * @param filters - Additional filters to pass to get_account_history\n * @param dayLimit - Only include votes from last N days (default: 7)\n */\nexport function getAccountVoteHistoryInfiniteQueryOptions<F>(\n username: string,\n options?: {\n limit?: number;\n filters?: F[];\n dayLimit?: number;\n }\n) {\n const { limit = 20, filters = [], dayLimit = 7.0 } = options ?? {};\n\n return infiniteQueryOptions<\n VoteHistoryPage,\n Error,\n VoteHistoryPage,\n (string | number)[],\n VoteHistoryPageParam\n >({\n queryKey: QueryKeys.accounts.voteHistory(username, limit),\n initialPageParam: { start: -1 },\n\n queryFn: async ({ pageParam }: { pageParam: VoteHistoryPageParam }) => {\n const { start } = pageParam;\n\n const response = (await CONFIG.hiveClient.call(\n \"condenser_api\",\n \"get_account_history\",\n [username, start, limit, ...filters]\n )) as AccountVoteHistoryRecord[];\n\n const mappedResults: VoteHistoryResult[] = response.map(([num, historyObj]) => ({\n ...historyObj.op[1],\n num,\n timestamp: historyObj.timestamp,\n }));\n\n const result = mappedResults.filter(\n (filtered) =>\n filtered.voter === username &&\n filtered.weight !== 0 &&\n getDays(filtered.timestamp) <= dayLimit\n );\n\n const entries: Entry[] = [];\n for (const obj of result) {\n const post = await CONFIG.queryClient.fetchQuery(\n getPostQueryOptions(obj.author, obj.permlink)\n );\n if (isEntry(post)) entries.push(post);\n }\n\n const [firstHistory] = response;\n\n return {\n lastDate: firstHistory ? getDays(firstHistory[1].timestamp) : 0,\n lastItemFetched: firstHistory ? firstHistory[0] : start,\n entries,\n };\n },\n\n getNextPageParam: (lastPage: VoteHistoryPage): VoteHistoryPageParam => ({\n start: lastPage.lastItemFetched,\n }),\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Profile } from \"../types\";\nimport { getProfiles } from \"@/modules/bridge\";\n\nexport function getProfilesQueryOptions(\n accounts: string[],\n observer?: string,\n enabled = true\n) {\n return queryOptions({\n queryKey: QueryKeys.accounts.profiles(accounts, observer ?? \"\"),\n enabled: enabled && accounts.length > 0,\n queryFn: async () => getProfiles(accounts, observer) as Promise<Profile[]>,\n });\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport * as R from \"remeda\";\nimport { getAccountFullQueryOptions } from \"../queries\";\nimport { AccountProfile, FullAccount } from \"../types\";\nimport {\n buildProfileMetadata,\n extractAccountProfile,\n} from \"../utils/profile-metadata\";\n\ninterface Payload {\n profile: Partial<AccountProfile>;\n tokens: AccountProfile[\"tokens\"];\n}\n\n/**\n * React Query mutation hook for updating account profile metadata.\n *\n * This mutation broadcasts an account_update2 operation to update the user's\n * profile information (name, about, location, avatar, cover image, etc.).\n *\n * @param username - The username to update (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Profile Fields:**\n * - name: Display name\n * - about: Bio/description\n * - location: Location\n * - website: Website URL\n * - profile_image: Avatar URL\n * - cover_image: Cover/banner URL\n * - tokens: Social tokens (Twitter, Facebook, etc.)\n * - version: Profile metadata version (auto-set to 2)\n *\n * **Authentication:**\n * - Uses posting authority (account_update2 operation)\n * - Supports all auth methods via platform adapter\n *\n * **Post-Broadcast Actions:**\n * - Optimistically updates account cache with new profile data\n * - Invalidates account cache to refetch from blockchain\n *\n * @example\n * ```typescript\n * const updateProfile = useAccountUpdate(username, {\n * adapter: myAdapter,\n * });\n *\n * // Update profile\n * updateProfile.mutate({\n * profile: {\n * name: \"John Doe\",\n * about: \"Hive enthusiast\",\n * profile_image: \"https://...\",\n * }\n * });\n * ```\n */\nexport function useAccountUpdate(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n const queryClient = useQueryClient();\n\n const { data } = useQuery(getAccountFullQueryOptions(username));\n\n return useBroadcastMutation(\n [\"accounts\", \"update\"],\n username,\n (payload: Partial<Payload>) => {\n if (!data) {\n throw new Error(\"[SDK][Accounts] – cannot update not existing account\");\n }\n\n const profile = buildProfileMetadata({\n existingProfile: extractAccountProfile(data),\n profile: payload.profile,\n tokens: payload.tokens,\n });\n\n return [\n [\n \"account_update2\",\n {\n account: username,\n json_metadata: \"\",\n extensions: [],\n posting_json_metadata: JSON.stringify({\n profile,\n }),\n },\n ],\n ];\n },\n async (_data: unknown, variables: Partial<Payload>) => {\n // Optimistic cache update\n queryClient.setQueryData<FullAccount>(\n getAccountFullQueryOptions(username).queryKey,\n (data) => {\n if (!data) {\n return data;\n }\n\n const obj = R.clone(data);\n obj.profile = buildProfileMetadata({\n existingProfile: extractAccountProfile(data),\n profile: variables.profile,\n tokens: variables.tokens,\n });\n\n return obj;\n }\n );\n\n // Invalidate cache to refetch from blockchain\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username)\n ]);\n }\n },\n auth\n );\n}\n","import { broadcastJson, getQueryClient } from \"@/modules/core\";\nimport type { AuthContext } from \"@/modules/core/types\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { getRelationshipBetweenAccountsQueryOptions, getAccountFullQueryOptions } from \"../queries\";\nimport { AccountRelationship } from \"../types\";\n\ntype Kind = \"toggle-ignore\" | \"toggle-follow\";\n\nexport function useAccountRelationsUpdate(\n reference: string | undefined,\n target: string | undefined,\n auth: AuthContext | undefined,\n onSuccess: (data: Partial<AccountRelationship> | undefined) => void,\n onError: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"accounts\", \"relation\", \"update\", reference, target],\n mutationFn: async (kind: Kind) => {\n const relationsQuery = getRelationshipBetweenAccountsQueryOptions(\n reference!,\n target!\n );\n await getQueryClient().prefetchQuery(relationsQuery);\n const actualRelation = getQueryClient().getQueryData(\n relationsQuery.queryKey\n );\n\n await broadcastJson(\n reference,\n \"follow\",\n [\n \"follow\",\n {\n follower: reference,\n following: target,\n what: [\n ...(kind === \"toggle-ignore\" && !actualRelation?.ignores\n ? [\"ignore\"]\n : []),\n ...(kind === \"toggle-follow\" && !actualRelation?.follows\n ? [\"blog\"]\n : []),\n ],\n },\n ],\n auth\n );\n\n return {\n ...actualRelation,\n ignores:\n kind === \"toggle-ignore\"\n ? !actualRelation?.ignores\n : actualRelation?.ignores,\n follows:\n kind === \"toggle-follow\"\n ? !actualRelation?.follows\n : actualRelation?.follows,\n } satisfies Partial<AccountRelationship>;\n },\n onError,\n onSuccess(data) {\n onSuccess(data);\n\n getQueryClient().setQueryData(\n [\"accounts\", \"relations\", reference, target],\n data\n );\n\n // Invalidate account query to refetch follow stats (follower_count, following_count)\n // This is needed because profile pages use staleTime: Infinity for performance\n if (target) {\n getQueryClient().invalidateQueries(\n getAccountFullQueryOptions(target)\n );\n }\n },\n });\n}\n","import { Operation } from \"@hiveio/dhive\";\n\n/**\n * Content Operations\n * Operations for creating, voting, and managing content on Hive blockchain\n */\n\n/**\n * Builds a vote operation.\n * @param voter - Account casting the vote\n * @param author - Author of the post/comment\n * @param permlink - Permlink of the post/comment\n * @param weight - Vote weight (-10000 to 10000, where 10000 = 100% upvote, -10000 = 100% downvote)\n * @returns Vote operation\n */\nexport function buildVoteOp(\n voter: string,\n author: string,\n permlink: string,\n weight: number\n): Operation {\n if (!voter || !author || !permlink) {\n throw new Error(\"[SDK][buildVoteOp] Missing required parameters\");\n }\n if (weight < -10000 || weight > 10000) {\n throw new Error(\"[SDK][buildVoteOp] Weight must be between -10000 and 10000\");\n }\n\n return [\n \"vote\",\n {\n voter,\n author,\n permlink,\n weight,\n },\n ];\n}\n\n/**\n * Builds a comment operation (for posts or replies).\n * @param author - Author of the comment/post\n * @param permlink - Permlink of the comment/post\n * @param parentAuthor - Parent author (empty string for top-level posts)\n * @param parentPermlink - Parent permlink (category/tag for top-level posts)\n * @param title - Title of the post (empty for comments)\n * @param body - Content body (required - cannot be empty)\n * @param jsonMetadata - JSON metadata object\n * @returns Comment operation\n */\nexport function buildCommentOp(\n author: string,\n permlink: string,\n parentAuthor: string,\n parentPermlink: string,\n title: string,\n body: string,\n jsonMetadata: Record<string, any>\n): Operation {\n // Validate all required parameters including body\n if (!author || !permlink || parentPermlink === undefined || !body) {\n throw new Error(\"[SDK][buildCommentOp] Missing required parameters\");\n }\n\n return [\n \"comment\",\n {\n parent_author: parentAuthor,\n parent_permlink: parentPermlink,\n author,\n permlink,\n title,\n body,\n json_metadata: JSON.stringify(jsonMetadata),\n },\n ];\n}\n\n/**\n * Builds a comment options operation (for setting beneficiaries, rewards, etc.).\n * @param author - Author of the comment/post\n * @param permlink - Permlink of the comment/post\n * @param maxAcceptedPayout - Maximum accepted payout (e.g., \"1000000.000 HBD\")\n * @param percentHbd - Percent of payout in HBD (10000 = 100%)\n * @param allowVotes - Allow votes on this content\n * @param allowCurationRewards - Allow curation rewards\n * @param extensions - Extensions array (for beneficiaries, etc.)\n * @returns Comment options operation\n */\nexport function buildCommentOptionsOp(\n author: string,\n permlink: string,\n maxAcceptedPayout: string,\n percentHbd: number,\n allowVotes: boolean,\n allowCurationRewards: boolean,\n extensions: any[]\n): Operation {\n if (!author || !permlink) {\n throw new Error(\"[SDK][buildCommentOptionsOp] Missing required parameters\");\n }\n\n return [\n \"comment_options\",\n {\n author,\n permlink,\n max_accepted_payout: maxAcceptedPayout,\n percent_hbd: percentHbd,\n allow_votes: allowVotes,\n allow_curation_rewards: allowCurationRewards,\n extensions,\n },\n ];\n}\n\n/**\n * Builds a delete comment operation.\n * @param author - Author of the comment/post to delete\n * @param permlink - Permlink of the comment/post to delete\n * @returns Delete comment operation\n */\nexport function buildDeleteCommentOp(author: string, permlink: string): Operation {\n if (!author || !permlink) {\n throw new Error(\"[SDK][buildDeleteCommentOp] Missing required parameters\");\n }\n\n return [\n \"delete_comment\",\n {\n author,\n permlink,\n },\n ];\n}\n\n/**\n * Builds a reblog operation (custom_json).\n * @param account - Account performing the reblog\n * @param author - Original post author\n * @param permlink - Original post permlink\n * @param deleteReblog - If true, removes the reblog\n * @returns Custom JSON operation for reblog\n */\nexport function buildReblogOp(\n account: string,\n author: string,\n permlink: string,\n deleteReblog: boolean = false\n): Operation {\n if (!account || !author || !permlink) {\n throw new Error(\"[SDK][buildReblogOp] Missing required parameters\");\n }\n\n const json: any = {\n account,\n author,\n permlink,\n };\n\n if (deleteReblog) {\n json.delete = \"delete\";\n }\n\n return [\n \"custom_json\",\n {\n id: \"follow\",\n json: JSON.stringify([\"reblog\", json]),\n required_auths: [],\n required_posting_auths: [account],\n },\n ];\n}\n","import { Operation } from \"@hiveio/dhive\";\n\n/**\n * Wallet Operations\n * Operations for managing tokens, savings, vesting, and conversions\n */\n\n/**\n * Builds a transfer operation.\n * @param from - Sender account\n * @param to - Receiver account\n * @param amount - Amount with asset symbol (e.g., \"1.000 HIVE\")\n * @param memo - Transfer memo\n * @returns Transfer operation\n */\nexport function buildTransferOp(\n from: string,\n to: string,\n amount: string,\n memo: string\n): Operation {\n if (!from || !to || !amount) {\n throw new Error(\"[SDK][buildTransferOp] Missing required parameters\");\n }\n\n return [\n \"transfer\",\n {\n from,\n to,\n amount,\n memo: memo || \"\",\n },\n ];\n}\n\n/**\n * Builds multiple transfer operations for multiple recipients.\n * @param from - Sender account\n * @param destinations - Comma or space separated list of recipient accounts\n * @param amount - Amount with asset symbol (e.g., \"1.000 HIVE\")\n * @param memo - Transfer memo\n * @returns Array of transfer operations\n */\nexport function buildMultiTransferOps(\n from: string,\n destinations: string,\n amount: string,\n memo: string\n): Operation[] {\n if (!from || !destinations || !amount) {\n throw new Error(\"[SDK][buildMultiTransferOps] Missing required parameters\");\n }\n\n // Split the destination input into an array of usernames\n const destArray = destinations\n .trim()\n .split(/[\\s,]+/)\n .filter(Boolean);\n\n // Create a transfer operation for each destination username\n return destArray.map((dest) =>\n buildTransferOp(from, dest.trim(), amount, memo)\n );\n}\n\n/**\n * Builds a recurrent transfer operation.\n * @param from - Sender account\n * @param to - Receiver account\n * @param amount - Amount with asset symbol (e.g., \"1.000 HIVE\")\n * @param memo - Transfer memo\n * @param recurrence - Recurrence in hours\n * @param executions - Number of executions (2 = executes twice)\n * @returns Recurrent transfer operation\n */\nexport function buildRecurrentTransferOp(\n from: string,\n to: string,\n amount: string,\n memo: string,\n recurrence: number,\n executions: number\n): Operation {\n if (!from || !to || !amount) {\n throw new Error(\"[SDK][buildRecurrentTransferOp] Missing required parameters\");\n }\n if (recurrence < 24) {\n throw new Error(\"[SDK][buildRecurrentTransferOp] Recurrence must be at least 24 hours\");\n }\n\n return [\n \"recurrent_transfer\",\n {\n from,\n to,\n amount,\n memo: memo || \"\",\n recurrence,\n executions,\n extensions: [],\n },\n ];\n}\n\n/**\n * Builds a transfer to savings operation.\n * @param from - Sender account\n * @param to - Receiver account\n * @param amount - Amount with asset symbol (e.g., \"1.000 HIVE\")\n * @param memo - Transfer memo\n * @returns Transfer to savings operation\n */\nexport function buildTransferToSavingsOp(\n from: string,\n to: string,\n amount: string,\n memo: string\n): Operation {\n if (!from || !to || !amount) {\n throw new Error(\"[SDK][buildTransferToSavingsOp] Missing required parameters\");\n }\n\n return [\n \"transfer_to_savings\",\n {\n from,\n to,\n amount,\n memo: memo || \"\",\n },\n ];\n}\n\n/**\n * Builds a transfer from savings operation.\n * @param from - Sender account\n * @param to - Receiver account\n * @param amount - Amount with asset symbol (e.g., \"1.000 HIVE\")\n * @param memo - Transfer memo\n * @param requestId - Unique request ID (use timestamp)\n * @returns Transfer from savings operation\n */\nexport function buildTransferFromSavingsOp(\n from: string,\n to: string,\n amount: string,\n memo: string,\n requestId: number\n): Operation {\n if (!from || !to || !amount || requestId === undefined) {\n throw new Error(\"[SDK][buildTransferFromSavingsOp] Missing required parameters\");\n }\n\n return [\n \"transfer_from_savings\",\n {\n from,\n to,\n amount,\n memo: memo || \"\",\n request_id: requestId,\n },\n ];\n}\n\n/**\n * Builds a cancel transfer from savings operation.\n * @param from - Account that initiated the savings withdrawal\n * @param requestId - Request ID to cancel\n * @returns Cancel transfer from savings operation\n */\nexport function buildCancelTransferFromSavingsOp(\n from: string,\n requestId: number\n): Operation {\n if (!from || requestId === undefined) {\n throw new Error(\"[SDK][buildCancelTransferFromSavingsOp] Missing required parameters\");\n }\n\n return [\n \"cancel_transfer_from_savings\",\n {\n from,\n request_id: requestId,\n },\n ];\n}\n\n/**\n * Builds operations to claim savings interest.\n * Creates a transfer_from_savings and immediately cancels it to claim interest.\n * @param from - Account claiming interest\n * @param to - Receiver account\n * @param amount - Amount with asset symbol (e.g., \"0.001 HIVE\")\n * @param memo - Transfer memo\n * @param requestId - Unique request ID\n * @returns Array of operations [transfer_from_savings, cancel_transfer_from_savings]\n */\nexport function buildClaimInterestOps(\n from: string,\n to: string,\n amount: string,\n memo: string,\n requestId: number\n): Operation[] {\n if (!from || !to || !amount || requestId === undefined) {\n throw new Error(\"[SDK][buildClaimInterestOps] Missing required parameters\");\n }\n\n return [\n buildTransferFromSavingsOp(from, to, amount, memo, requestId),\n buildCancelTransferFromSavingsOp(from, requestId),\n ];\n}\n\n/**\n * Builds a transfer to vesting operation (power up).\n * @param from - Account sending HIVE\n * @param to - Account receiving Hive Power\n * @param amount - Amount with HIVE symbol (e.g., \"1.000 HIVE\")\n * @returns Transfer to vesting operation\n */\nexport function buildTransferToVestingOp(\n from: string,\n to: string,\n amount: string\n): Operation {\n if (!from || !to || !amount) {\n throw new Error(\"[SDK][buildTransferToVestingOp] Missing required parameters\");\n }\n\n return [\n \"transfer_to_vesting\",\n {\n from,\n to,\n amount,\n },\n ];\n}\n\n/**\n * Builds a withdraw vesting operation (power down).\n * @param account - Account withdrawing vesting\n * @param vestingShares - Amount of VESTS to withdraw (e.g., \"1.000000 VESTS\")\n * @returns Withdraw vesting operation\n */\nexport function buildWithdrawVestingOp(\n account: string,\n vestingShares: string\n): Operation {\n if (!account || !vestingShares) {\n throw new Error(\"[SDK][buildWithdrawVestingOp] Missing required parameters\");\n }\n\n return [\n \"withdraw_vesting\",\n {\n account,\n vesting_shares: vestingShares,\n },\n ];\n}\n\n/**\n * Builds a delegate vesting shares operation (HP delegation).\n * @param delegator - Account delegating HP\n * @param delegatee - Account receiving HP delegation\n * @param vestingShares - Amount of VESTS to delegate (e.g., \"1000.000000 VESTS\")\n * @returns Delegate vesting shares operation\n */\nexport function buildDelegateVestingSharesOp(\n delegator: string,\n delegatee: string,\n vestingShares: string\n): Operation {\n if (!delegator || !delegatee || !vestingShares) {\n throw new Error(\"[SDK][buildDelegateVestingSharesOp] Missing required parameters\");\n }\n\n return [\n \"delegate_vesting_shares\",\n {\n delegator,\n delegatee,\n vesting_shares: vestingShares,\n },\n ];\n}\n\n/**\n * Builds a set withdraw vesting route operation.\n * @param fromAccount - Account withdrawing vesting\n * @param toAccount - Account receiving withdrawn vesting\n * @param percent - Percentage to route (0-10000, where 10000 = 100%)\n * @param autoVest - Auto convert to vesting\n * @returns Set withdraw vesting route operation\n */\nexport function buildSetWithdrawVestingRouteOp(\n fromAccount: string,\n toAccount: string,\n percent: number,\n autoVest: boolean\n): Operation {\n if (!fromAccount || !toAccount || percent === undefined) {\n throw new Error(\"[SDK][buildSetWithdrawVestingRouteOp] Missing required parameters\");\n }\n if (percent < 0 || percent > 10000) {\n throw new Error(\"[SDK][buildSetWithdrawVestingRouteOp] Percent must be between 0 and 10000\");\n }\n\n return [\n \"set_withdraw_vesting_route\",\n {\n from_account: fromAccount,\n to_account: toAccount,\n percent,\n auto_vest: autoVest,\n },\n ];\n}\n\n/**\n * Builds a convert operation (HBD to HIVE).\n * @param owner - Account converting HBD\n * @param amount - Amount of HBD to convert (e.g., \"1.000 HBD\")\n * @param requestId - Unique request ID (use timestamp)\n * @returns Convert operation\n */\nexport function buildConvertOp(\n owner: string,\n amount: string,\n requestId: number\n): Operation {\n if (!owner || !amount || requestId === undefined) {\n throw new Error(\"[SDK][buildConvertOp] Missing required parameters\");\n }\n\n return [\n \"convert\",\n {\n owner,\n amount,\n requestid: requestId,\n },\n ];\n}\n\n/**\n * Builds a collateralized convert operation (HIVE to HBD via collateral).\n * @param owner - Account converting HIVE\n * @param amount - Amount of HIVE to convert (e.g., \"1.000 HIVE\")\n * @param requestId - Unique request ID (use timestamp)\n * @returns Collateralized convert operation\n */\nexport function buildCollateralizedConvertOp(\n owner: string,\n amount: string,\n requestId: number\n): Operation {\n if (!owner || !amount || requestId === undefined) {\n throw new Error(\"[SDK][buildCollateralizedConvertOp] Missing required parameters\");\n }\n\n return [\n \"collateralized_convert\",\n {\n owner,\n amount,\n requestid: requestId,\n },\n ];\n}\n\n/**\n * Builds a delegate RC operation (custom_json).\n * @param from - Account delegating RC\n * @param delegatees - Single delegatee or comma-separated list\n * @param maxRc - Maximum RC to delegate (in mana units)\n * @returns Custom JSON operation for RC delegation\n */\n/**\n * Builds a SPK Network custom_json operation.\n * @param from - Account performing the operation\n * @param id - SPK operation ID (e.g., \"spkcc_spk_send\", \"spkcc_gov_up\")\n * @param amount - Amount (multiplied by 1000 internally)\n * @returns Custom JSON operation\n */\nexport function buildSpkCustomJsonOp(\n from: string,\n id: string,\n amount: number\n): Operation {\n return [\"custom_json\", {\n id,\n required_auths: [from],\n required_posting_auths: [],\n json: JSON.stringify({ amount: amount * 1000 }),\n }];\n}\n\n/**\n * Builds a Hive Engine custom_json operation.\n * @param from - Account performing the operation\n * @param contractAction - Engine contract action (e.g., \"transfer\", \"stake\")\n * @param contractPayload - Payload for the contract action\n * @param contractName - Engine contract name (defaults to \"tokens\")\n * @returns Custom JSON operation\n */\nexport function buildEngineOp(\n from: string,\n contractAction: string,\n contractPayload: Record<string, string>,\n contractName = \"tokens\"\n): Operation {\n return [\"custom_json\", {\n id: \"ssc-mainnet-hive\",\n required_auths: [from],\n required_posting_auths: [],\n json: JSON.stringify({ contractName, contractAction, contractPayload }),\n }];\n}\n\n/**\n * Builds a scot_claim_token operation (posting authority).\n * @param account - Account claiming rewards\n * @param tokens - Array of token symbols to claim\n * @returns Custom JSON operation\n */\nexport function buildEngineClaimOp(\n account: string,\n tokens: string[]\n): Operation {\n return [\"custom_json\", {\n id: \"scot_claim_token\",\n required_auths: [],\n required_posting_auths: [account],\n json: JSON.stringify(tokens.map((symbol) => ({ symbol }))),\n }];\n}\n\nexport function buildDelegateRcOp(\n from: string,\n delegatees: string,\n maxRc: string | number\n): Operation {\n if (!from || !delegatees || maxRc === undefined) {\n throw new Error(\"[SDK][buildDelegateRcOp] Missing required parameters\");\n }\n\n const delegateeArray = delegatees.includes(\",\")\n ? delegatees.split(\",\").map((d) => d.trim())\n : [delegatees];\n\n return [\n \"custom_json\",\n {\n id: \"rc\",\n json: JSON.stringify([\n \"delegate_rc\",\n {\n from,\n delegatees: delegateeArray,\n max_rc: maxRc,\n },\n ]),\n required_auths: [],\n required_posting_auths: [from],\n },\n ];\n}\n","import { Operation } from \"@hiveio/dhive\";\n\n/**\n * Social Operations\n * Operations for following, muting, and managing social relationships\n */\n\n/**\n * Builds a follow operation (custom_json).\n * @param follower - Account following\n * @param following - Account to follow\n * @returns Custom JSON operation for follow\n */\nexport function buildFollowOp(follower: string, following: string): Operation {\n if (!follower || !following) {\n throw new Error(\"[SDK][buildFollowOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"follow\",\n json: JSON.stringify([\n \"follow\",\n {\n follower,\n following,\n what: [\"blog\"],\n },\n ]),\n required_auths: [],\n required_posting_auths: [follower],\n },\n ];\n}\n\n/**\n * Builds an unfollow operation (custom_json).\n * @param follower - Account unfollowing\n * @param following - Account to unfollow\n * @returns Custom JSON operation for unfollow\n */\nexport function buildUnfollowOp(follower: string, following: string): Operation {\n if (!follower || !following) {\n throw new Error(\"[SDK][buildUnfollowOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"follow\",\n json: JSON.stringify([\n \"follow\",\n {\n follower,\n following,\n what: [],\n },\n ]),\n required_auths: [],\n required_posting_auths: [follower],\n },\n ];\n}\n\n/**\n * Builds an ignore/mute operation (custom_json).\n * @param follower - Account ignoring\n * @param following - Account to ignore\n * @returns Custom JSON operation for ignore\n */\nexport function buildIgnoreOp(follower: string, following: string): Operation {\n if (!follower || !following) {\n throw new Error(\"[SDK][buildIgnoreOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"follow\",\n json: JSON.stringify([\n \"follow\",\n {\n follower,\n following,\n what: [\"ignore\"],\n },\n ]),\n required_auths: [],\n required_posting_auths: [follower],\n },\n ];\n}\n\n/**\n * Builds an unignore/unmute operation (custom_json).\n * @param follower - Account unignoring\n * @param following - Account to unignore\n * @returns Custom JSON operation for unignore\n */\nexport function buildUnignoreOp(follower: string, following: string): Operation {\n if (!follower || !following) {\n throw new Error(\"[SDK][buildUnignoreOp] Missing required parameters\");\n }\n\n return buildUnfollowOp(follower, following);\n}\n\n/**\n * Builds a Hive Notify set last read operation (custom_json).\n * @param username - Account setting last read\n * @param date - ISO date string (defaults to now)\n * @returns Array of custom JSON operations for setting last read\n */\nexport function buildSetLastReadOps(username: string, date?: string): Operation[] {\n if (!username) {\n throw new Error(\"[SDK][buildSetLastReadOps] Missing required parameters\");\n }\n\n const lastReadDate = date || new Date().toISOString().split(\".\")[0];\n\n const notifyOp: Operation = [\n \"custom_json\",\n {\n id: \"notify\",\n json: JSON.stringify([\"setLastRead\", { date: lastReadDate }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n\n const ecencyNotifyOp: Operation = [\n \"custom_json\",\n {\n id: \"ecency_notify\",\n json: JSON.stringify([\"setLastRead\", { date: lastReadDate }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n\n return [notifyOp, ecencyNotifyOp];\n}\n","import { Operation } from \"@hiveio/dhive\";\n\n/**\n * Governance Operations\n * Operations for witness voting, proposals, and proxy management\n */\n\n/**\n * Builds an account witness vote operation.\n * @param account - Account voting\n * @param witness - Witness account name\n * @param approve - True to approve, false to disapprove\n * @returns Account witness vote operation\n */\nexport function buildWitnessVoteOp(\n account: string,\n witness: string,\n approve: boolean\n): Operation {\n if (!account || !witness || approve === undefined) {\n throw new Error(\"[SDK][buildWitnessVoteOp] Missing required parameters\");\n }\n\n return [\n \"account_witness_vote\",\n {\n account,\n witness,\n approve,\n },\n ];\n}\n\n/**\n * Builds an account witness proxy operation.\n * @param account - Account setting proxy\n * @param proxy - Proxy account name (empty string to remove proxy)\n * @returns Account witness proxy operation\n */\nexport function buildWitnessProxyOp(account: string, proxy: string): Operation {\n if (!account || proxy === undefined) {\n throw new Error(\"[SDK][buildWitnessProxyOp] Missing required parameters\");\n }\n\n return [\n \"account_witness_proxy\",\n {\n account,\n proxy,\n },\n ];\n}\n\n/**\n * Payload for proposal creation\n */\nexport interface ProposalCreatePayload {\n receiver: string;\n subject: string;\n permlink: string;\n start: string;\n end: string;\n dailyPay: string;\n}\n\n/**\n * Builds a create proposal operation.\n * @param creator - Account creating the proposal\n * @param payload - Proposal details (must include start, end, and dailyPay)\n * @returns Create proposal operation\n */\nexport function buildProposalCreateOp(\n creator: string,\n payload: ProposalCreatePayload\n): Operation {\n // Validate required fields including start, end, and dailyPay\n if (\n !creator ||\n !payload.receiver ||\n !payload.subject ||\n !payload.permlink ||\n !payload.start ||\n !payload.end ||\n !payload.dailyPay\n ) {\n throw new Error(\"[SDK][buildProposalCreateOp] Missing required parameters\");\n }\n\n // Validate date format by attempting to parse them\n const startDate = new Date(payload.start);\n const endDate = new Date(payload.end);\n if (startDate.toString() === 'Invalid Date' || endDate.toString() === 'Invalid Date') {\n throw new Error(\n \"[SDK][buildProposalCreateOp] Invalid date format: start and end must be valid ISO date strings\"\n );\n }\n\n return [\n \"create_proposal\",\n {\n creator,\n receiver: payload.receiver,\n start_date: payload.start,\n end_date: payload.end,\n daily_pay: payload.dailyPay,\n subject: payload.subject,\n permlink: payload.permlink,\n extensions: [],\n },\n ];\n}\n\n/**\n * Builds an update proposal votes operation.\n * @param voter - Account voting\n * @param proposalIds - Array of proposal IDs\n * @param approve - True to approve, false to disapprove\n * @returns Update proposal votes operation\n */\nexport function buildProposalVoteOp(\n voter: string,\n proposalIds: number[],\n approve: boolean\n): Operation {\n if (!voter || !proposalIds || proposalIds.length === 0 || approve === undefined) {\n throw new Error(\"[SDK][buildProposalVoteOp] Missing required parameters\");\n }\n\n return [\n \"update_proposal_votes\",\n {\n voter,\n proposal_ids: proposalIds,\n approve,\n extensions: [],\n },\n ];\n}\n\n/**\n * Builds a remove proposal operation.\n * @param proposalOwner - Owner of the proposal\n * @param proposalIds - Array of proposal IDs to remove\n * @returns Remove proposal operation\n */\nexport function buildRemoveProposalOp(\n proposalOwner: string,\n proposalIds: number[]\n): Operation {\n if (!proposalOwner || !proposalIds || proposalIds.length === 0) {\n throw new Error(\"[SDK][buildRemoveProposalOp] Missing required parameters\");\n }\n\n return [\n \"remove_proposal\",\n {\n proposal_owner: proposalOwner,\n proposal_ids: proposalIds,\n extensions: [],\n },\n ];\n}\n\n/**\n * Builds an update proposal operation.\n * @param proposalId - Proposal ID to update (must be a valid number, including 0)\n * @param creator - Account that created the proposal\n * @param dailyPay - New daily pay amount\n * @param subject - New subject\n * @param permlink - New permlink\n * @returns Update proposal operation\n */\nexport function buildUpdateProposalOp(\n proposalId: number,\n creator: string,\n dailyPay: string,\n subject: string,\n permlink: string\n): Operation {\n // Validate proposalId properly - check for undefined/null instead of falsy\n // This allows proposalId of 0 which is a valid proposal ID\n if (\n proposalId === undefined ||\n proposalId === null ||\n typeof proposalId !== 'number' ||\n !creator ||\n !dailyPay ||\n !subject ||\n !permlink\n ) {\n throw new Error(\"[SDK][buildUpdateProposalOp] Missing required parameters\");\n }\n\n return [\n \"update_proposal\",\n {\n proposal_id: proposalId,\n creator,\n daily_pay: dailyPay,\n subject,\n permlink,\n extensions: [],\n },\n ];\n}\n","import { Operation } from \"@hiveio/dhive\";\n\n/**\n * Community Operations\n * Operations for managing Hive communities\n */\n\n/**\n * Builds a subscribe to community operation (custom_json).\n * @param username - Account subscribing\n * @param community - Community name (e.g., \"hive-123456\")\n * @returns Custom JSON operation for subscribe\n */\nexport function buildSubscribeOp(username: string, community: string): Operation {\n if (!username || !community) {\n throw new Error(\"[SDK][buildSubscribeOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"community\",\n json: JSON.stringify([\"subscribe\", { community }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n\n/**\n * Builds an unsubscribe from community operation (custom_json).\n * @param username - Account unsubscribing\n * @param community - Community name (e.g., \"hive-123456\")\n * @returns Custom JSON operation for unsubscribe\n */\nexport function buildUnsubscribeOp(username: string, community: string): Operation {\n if (!username || !community) {\n throw new Error(\"[SDK][buildUnsubscribeOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"community\",\n json: JSON.stringify([\"unsubscribe\", { community }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n\n/**\n * Builds a set user role in community operation (custom_json).\n * @param username - Account setting the role (must have permission)\n * @param community - Community name (e.g., \"hive-123456\")\n * @param account - Account to set role for\n * @param role - Role name (e.g., \"admin\", \"mod\", \"member\", \"guest\")\n * @returns Custom JSON operation for setRole\n */\nexport function buildSetRoleOp(\n username: string,\n community: string,\n account: string,\n role: string\n): Operation {\n if (!username || !community || !account || !role) {\n throw new Error(\"[SDK][buildSetRoleOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"community\",\n json: JSON.stringify([\"setRole\", { community, account, role }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n\n/**\n * Community properties for update\n */\nexport interface CommunityProps {\n title: string;\n about: string;\n lang: string;\n description: string;\n flag_text: string;\n is_nsfw: boolean;\n}\n\n/**\n * Builds an update community properties operation (custom_json).\n * @param username - Account updating (must be community admin)\n * @param community - Community name (e.g., \"hive-123456\")\n * @param props - Properties to update\n * @returns Custom JSON operation for updateProps\n */\nexport function buildUpdateCommunityOp(\n username: string,\n community: string,\n props: CommunityProps\n): Operation {\n if (!username || !community || !props) {\n throw new Error(\"[SDK][buildUpdateCommunityOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"community\",\n json: JSON.stringify([\"updateProps\", { community, props }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n\n/**\n * Builds a pin/unpin post in community operation (custom_json).\n * @param username - Account pinning (must have permission)\n * @param community - Community name (e.g., \"hive-123456\")\n * @param account - Post author\n * @param permlink - Post permlink\n * @param pin - True to pin, false to unpin\n * @returns Custom JSON operation for pinPost/unpinPost\n */\nexport function buildPinPostOp(\n username: string,\n community: string,\n account: string,\n permlink: string,\n pin: boolean\n): Operation {\n if (!username || !community || !account || !permlink || pin === undefined) {\n throw new Error(\"[SDK][buildPinPostOp] Missing required parameters\");\n }\n\n const action = pin ? \"pinPost\" : \"unpinPost\";\n\n return [\n \"custom_json\",\n {\n id: \"community\",\n json: JSON.stringify([action, { community, account, permlink }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n\n/**\n * Builds a mute/unmute post in community operation (custom_json).\n * @param username - Account muting (must have permission)\n * @param community - Community name (e.g., \"hive-123456\")\n * @param account - Post author\n * @param permlink - Post permlink\n * @param notes - Mute reason/notes\n * @param mute - True to mute, false to unmute\n * @returns Custom JSON operation for mutePost/unmutePost\n */\nexport function buildMutePostOp(\n username: string,\n community: string,\n account: string,\n permlink: string,\n notes: string,\n mute: boolean\n): Operation {\n if (\n !username ||\n !community ||\n !account ||\n !permlink ||\n mute === undefined\n ) {\n throw new Error(\"[SDK][buildMutePostOp] Missing required parameters\");\n }\n\n const action = mute ? \"mutePost\" : \"unmutePost\";\n\n return [\n \"custom_json\",\n {\n id: \"community\",\n json: JSON.stringify([action, { community, account, permlink, notes }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n\n/**\n * Builds a mute/unmute user in community operation (custom_json).\n * @param username - Account performing mute (must have permission)\n * @param community - Community name (e.g., \"hive-123456\")\n * @param account - Account to mute/unmute\n * @param notes - Mute reason/notes\n * @param mute - True to mute, false to unmute\n * @returns Custom JSON operation for muteUser/unmuteUser\n */\nexport function buildMuteUserOp(\n username: string,\n community: string,\n account: string,\n notes: string,\n mute: boolean\n): Operation {\n if (!username || !community || !account || mute === undefined) {\n throw new Error(\"[SDK][buildMuteUserOp] Missing required parameters\");\n }\n\n const action = mute ? \"muteUser\" : \"unmuteUser\";\n\n return [\n \"custom_json\",\n {\n id: \"community\",\n json: JSON.stringify([action, { community, account, notes }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n\n/**\n * Builds a flag post in community operation (custom_json).\n * @param username - Account flagging\n * @param community - Community name (e.g., \"hive-123456\")\n * @param account - Post author\n * @param permlink - Post permlink\n * @param notes - Flag reason/notes\n * @returns Custom JSON operation for flagPost\n */\nexport function buildFlagPostOp(\n username: string,\n community: string,\n account: string,\n permlink: string,\n notes: string\n): Operation {\n if (!username || !community || !account || !permlink) {\n throw new Error(\"[SDK][buildFlagPostOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"community\",\n json: JSON.stringify([\"flagPost\", { community, account, permlink, notes }]),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n","import { Operation } from \"@hiveio/dhive\";\n\n/**\n * Market Operations\n * Operations for trading on the internal Hive market\n */\n\n/**\n * Transaction type for buy/sell operations\n */\nexport enum BuySellTransactionType {\n Buy = \"buy\",\n Sell = \"sell\",\n}\n\n/**\n * Order ID prefix for different order types\n */\nexport enum OrderIdPrefix {\n EMPTY = \"\",\n SWAP = \"9\",\n}\n\n/**\n * Builds a limit order create operation.\n * @param owner - Account creating the order\n * @param amountToSell - Amount and asset to sell\n * @param minToReceive - Minimum amount and asset to receive\n * @param fillOrKill - If true, order must be filled immediately or cancelled\n * @param expiration - Expiration date (ISO string)\n * @param orderId - Unique order ID\n * @returns Limit order create operation\n */\nexport function buildLimitOrderCreateOp(\n owner: string,\n amountToSell: string,\n minToReceive: string,\n fillOrKill: boolean,\n expiration: string,\n orderId: number\n): Operation {\n if (!owner || !amountToSell || !minToReceive || !expiration || orderId === undefined) {\n throw new Error(\"[SDK][buildLimitOrderCreateOp] Missing required parameters\");\n }\n\n return [\n \"limit_order_create\",\n {\n owner,\n orderid: orderId,\n amount_to_sell: amountToSell,\n min_to_receive: minToReceive,\n fill_or_kill: fillOrKill,\n expiration,\n },\n ];\n}\n\n/**\n * Helper to format number to 3 decimal places\n */\nfunction formatNumber(value: number, decimals: number = 3): string {\n return value.toFixed(decimals);\n}\n\n/**\n * Builds a limit order create operation with automatic formatting.\n * This is a convenience method that handles buy/sell logic and formatting.\n *\n * For Buy orders: You're buying HIVE with HBD\n * - amountToSell: HBD amount you're spending\n * - minToReceive: HIVE amount you want to receive\n *\n * For Sell orders: You're selling HIVE for HBD\n * - amountToSell: HIVE amount you're selling\n * - minToReceive: HBD amount you want to receive\n *\n * @param owner - Account creating the order\n * @param amountToSell - Amount to sell (number)\n * @param minToReceive - Minimum to receive (number)\n * @param orderType - Buy or Sell\n * @param idPrefix - Order ID prefix\n * @returns Limit order create operation\n */\nexport function buildLimitOrderCreateOpWithType(\n owner: string,\n amountToSell: number,\n minToReceive: number,\n orderType: BuySellTransactionType,\n idPrefix: OrderIdPrefix = OrderIdPrefix.EMPTY\n): Operation {\n // Validate numeric inputs\n if (\n !owner ||\n orderType === undefined ||\n !Number.isFinite(amountToSell) ||\n amountToSell <= 0 ||\n !Number.isFinite(minToReceive) ||\n minToReceive <= 0\n ) {\n throw new Error(\"[SDK][buildLimitOrderCreateOpWithType] Missing or invalid parameters\");\n }\n\n // Calculate expiration (27 days from now)\n const expiration = new Date(Date.now());\n expiration.setDate(expiration.getDate() + 27);\n const expirationStr = expiration.toISOString().split(\".\")[0];\n\n // Generate order ID\n const orderId = Number(\n `${idPrefix}${Math.floor(Date.now() / 1000)\n .toString()\n .slice(2)}`\n );\n\n // Format amounts based on order type\n // Buy: Sell HBD to buy HIVE\n // Sell: Sell HIVE to buy HBD\n const formattedAmountToSell =\n orderType === BuySellTransactionType.Buy\n ? `${formatNumber(amountToSell, 3)} HBD`\n : `${formatNumber(amountToSell, 3)} HIVE`;\n\n const formattedMinToReceive =\n orderType === BuySellTransactionType.Buy\n ? `${formatNumber(minToReceive, 3)} HIVE`\n : `${formatNumber(minToReceive, 3)} HBD`;\n\n return buildLimitOrderCreateOp(\n owner,\n formattedAmountToSell,\n formattedMinToReceive,\n false,\n expirationStr,\n orderId\n );\n}\n\n/**\n * Builds a limit order cancel operation.\n * @param owner - Account cancelling the order\n * @param orderId - Order ID to cancel\n * @returns Limit order cancel operation\n */\nexport function buildLimitOrderCancelOp(owner: string, orderId: number): Operation {\n if (!owner || orderId === undefined) {\n throw new Error(\"[SDK][buildLimitOrderCancelOp] Missing required parameters\");\n }\n\n return [\n \"limit_order_cancel\",\n {\n owner,\n orderid: orderId,\n },\n ];\n}\n\n/**\n * Builds a claim reward balance operation.\n * @param account - Account claiming rewards\n * @param rewardHive - HIVE reward to claim (e.g., \"0.000 HIVE\")\n * @param rewardHbd - HBD reward to claim (e.g., \"0.000 HBD\")\n * @param rewardVests - VESTS reward to claim (e.g., \"0.000000 VESTS\")\n * @returns Claim reward balance operation\n */\nexport function buildClaimRewardBalanceOp(\n account: string,\n rewardHive: string,\n rewardHbd: string,\n rewardVests: string\n): Operation {\n if (!account || !rewardHive || !rewardHbd || !rewardVests) {\n throw new Error(\"[SDK][buildClaimRewardBalanceOp] Missing required parameters\");\n }\n\n return [\n \"claim_reward_balance\",\n {\n account,\n reward_hive: rewardHive,\n reward_hbd: rewardHbd,\n reward_vests: rewardVests,\n },\n ];\n}\n","import { Operation } from \"@hiveio/dhive\";\n\n/**\n * Account Operations\n * Operations for managing accounts, keys, and permissions\n */\n\n/**\n * Authority structure for account operations\n */\nexport interface Authority {\n weight_threshold: number;\n account_auths: [string, number][];\n key_auths: [string, number][];\n}\n\n/**\n * Builds an account update operation.\n * @param account - Account name\n * @param owner - Owner authority (optional)\n * @param active - Active authority (optional)\n * @param posting - Posting authority (optional)\n * @param memoKey - Memo public key\n * @param jsonMetadata - Account JSON metadata\n * @returns Account update operation\n */\nexport function buildAccountUpdateOp(\n account: string,\n owner: Authority | undefined,\n active: Authority | undefined,\n posting: Authority | undefined,\n memoKey: string,\n jsonMetadata: string\n): Operation {\n if (!account || !memoKey) {\n throw new Error(\"[SDK][buildAccountUpdateOp] Missing required parameters\");\n }\n\n return [\n \"account_update\",\n {\n account,\n owner,\n active,\n posting,\n memo_key: memoKey,\n json_metadata: jsonMetadata,\n },\n ];\n}\n\n/**\n * Builds an account update2 operation (for posting_json_metadata).\n * @param account - Account name\n * @param jsonMetadata - Account JSON metadata (legacy, usually empty)\n * @param postingJsonMetadata - Posting JSON metadata string\n * @param extensions - Extensions array\n * @returns Account update2 operation\n */\nexport function buildAccountUpdate2Op(\n account: string,\n jsonMetadata: string,\n postingJsonMetadata: string,\n extensions: any[]\n): Operation {\n if (!account || postingJsonMetadata === undefined) {\n throw new Error(\"[SDK][buildAccountUpdate2Op] Missing required parameters\");\n }\n\n return [\n \"account_update2\",\n {\n account,\n json_metadata: jsonMetadata || \"\",\n posting_json_metadata: postingJsonMetadata,\n extensions: extensions || [],\n },\n ];\n}\n\n/**\n * Public keys for account creation\n */\nexport interface AccountKeys {\n ownerPublicKey: string;\n activePublicKey: string;\n postingPublicKey: string;\n memoPublicKey: string;\n}\n\n/**\n * Builds an account create operation.\n * @param creator - Creator account name\n * @param newAccountName - New account name\n * @param keys - Public keys for the new account\n * @param fee - Creation fee (e.g., \"3.000 HIVE\")\n * @returns Account create operation\n */\nexport function buildAccountCreateOp(\n creator: string,\n newAccountName: string,\n keys: AccountKeys,\n fee: string\n): Operation {\n if (!creator || !newAccountName || !keys || !fee) {\n throw new Error(\"[SDK][buildAccountCreateOp] Missing required parameters\");\n }\n\n const owner: Authority = {\n weight_threshold: 1,\n account_auths: [],\n key_auths: [[keys.ownerPublicKey, 1]],\n };\n\n const active: Authority = {\n weight_threshold: 1,\n account_auths: [],\n key_auths: [[keys.activePublicKey, 1]],\n };\n\n const posting: Authority = {\n weight_threshold: 1,\n account_auths: [[\"ecency.app\", 1]],\n key_auths: [[keys.postingPublicKey, 1]],\n };\n\n return [\n \"account_create\",\n {\n creator,\n new_account_name: newAccountName,\n owner,\n active,\n posting,\n memo_key: keys.memoPublicKey,\n json_metadata: \"\",\n extensions: [],\n fee,\n },\n ];\n}\n\n/**\n * Builds a create claimed account operation (using account creation tokens).\n * @param creator - Creator account name\n * @param newAccountName - New account name\n * @param keys - Public keys for the new account\n * @returns Create claimed account operation\n */\nexport function buildCreateClaimedAccountOp(\n creator: string,\n newAccountName: string,\n keys: AccountKeys\n): Operation {\n if (!creator || !newAccountName || !keys) {\n throw new Error(\"[SDK][buildCreateClaimedAccountOp] Missing required parameters\");\n }\n\n const owner: Authority = {\n weight_threshold: 1,\n account_auths: [],\n key_auths: [[keys.ownerPublicKey, 1]],\n };\n\n const active: Authority = {\n weight_threshold: 1,\n account_auths: [],\n key_auths: [[keys.activePublicKey, 1]],\n };\n\n const posting: Authority = {\n weight_threshold: 1,\n account_auths: [[\"ecency.app\", 1]],\n key_auths: [[keys.postingPublicKey, 1]],\n };\n\n return [\n \"create_claimed_account\",\n {\n creator,\n new_account_name: newAccountName,\n owner,\n active,\n posting,\n memo_key: keys.memoPublicKey,\n json_metadata: \"\",\n extensions: [],\n },\n ];\n}\n\n/**\n * Builds a claim account operation.\n * @param creator - Account claiming the token\n * @param fee - Fee for claiming (usually \"0.000 HIVE\" for RC-based claims)\n * @returns Claim account operation\n */\nexport function buildClaimAccountOp(creator: string, fee: string): Operation {\n if (!creator || !fee) {\n throw new Error(\"[SDK][buildClaimAccountOp] Missing required parameters\");\n }\n\n return [\n \"claim_account\",\n {\n creator,\n fee,\n extensions: [],\n },\n ];\n}\n\n/**\n * Builds an operation to grant posting permission to another account.\n * Helper that modifies posting authority to add an account.\n * @param account - Account granting permission\n * @param currentPosting - Current posting authority\n * @param grantedAccount - Account to grant permission to\n * @param weightThreshold - Weight threshold of the granted account\n * @param memoKey - Memo public key (required by Hive blockchain)\n * @param jsonMetadata - Account JSON metadata (required by Hive blockchain)\n * @returns Account update operation with modified posting authority\n */\nexport function buildGrantPostingPermissionOp(\n account: string,\n currentPosting: Authority,\n grantedAccount: string,\n weightThreshold: number,\n memoKey: string,\n jsonMetadata: string\n): Operation {\n if (!account || !currentPosting || !grantedAccount || !memoKey) {\n throw new Error(\"[SDK][buildGrantPostingPermissionOp] Missing required parameters\");\n }\n\n // Find existing account or create new entry to prevent duplicates\n const existingIndex = currentPosting.account_auths.findIndex(\n ([acc]) => acc === grantedAccount\n );\n\n const newAccountAuths = [...currentPosting.account_auths];\n if (existingIndex >= 0) {\n // Update existing entry with new weight\n newAccountAuths[existingIndex] = [grantedAccount, weightThreshold];\n } else {\n // Add new entry\n newAccountAuths.push([grantedAccount, weightThreshold]);\n }\n\n const newPosting: Authority = {\n ...currentPosting,\n account_auths: newAccountAuths,\n };\n\n // Sort account_auths alphabetically for consistency\n newPosting.account_auths.sort((a, b) => (a[0] > b[0] ? 1 : -1));\n\n return [\n \"account_update\",\n {\n account,\n posting: newPosting,\n memo_key: memoKey,\n json_metadata: jsonMetadata,\n },\n ];\n}\n\n/**\n * Builds an operation to revoke posting permission from an account.\n * Helper that modifies posting authority to remove an account.\n * @param account - Account revoking permission\n * @param currentPosting - Current posting authority\n * @param revokedAccount - Account to revoke permission from\n * @param memoKey - Memo public key (required by Hive blockchain)\n * @param jsonMetadata - Account JSON metadata (required by Hive blockchain)\n * @returns Account update operation with modified posting authority\n */\nexport function buildRevokePostingPermissionOp(\n account: string,\n currentPosting: Authority,\n revokedAccount: string,\n memoKey: string,\n jsonMetadata: string\n): Operation {\n if (!account || !currentPosting || !revokedAccount || !memoKey) {\n throw new Error(\"[SDK][buildRevokePostingPermissionOp] Missing required parameters\");\n }\n\n const newPosting: Authority = {\n ...currentPosting,\n account_auths: currentPosting.account_auths.filter(\n ([acc]) => acc !== revokedAccount\n ),\n };\n\n return [\n \"account_update\",\n {\n account,\n posting: newPosting,\n memo_key: memoKey,\n json_metadata: jsonMetadata,\n },\n ];\n}\n\n/**\n * Builds a change recovery account operation.\n * @param accountToRecover - Account to change recovery account for\n * @param newRecoveryAccount - New recovery account name\n * @param extensions - Extensions array\n * @returns Change recovery account operation\n */\nexport function buildChangeRecoveryAccountOp(\n accountToRecover: string,\n newRecoveryAccount: string,\n extensions: any[] = []\n): Operation {\n if (!accountToRecover || !newRecoveryAccount) {\n throw new Error(\"[SDK][buildChangeRecoveryAccountOp] Missing required parameters\");\n }\n\n return [\n \"change_recovery_account\",\n {\n account_to_recover: accountToRecover,\n new_recovery_account: newRecoveryAccount,\n extensions,\n },\n ];\n}\n\n/**\n * Builds a request account recovery operation.\n * @param recoveryAccount - Recovery account performing the recovery\n * @param accountToRecover - Account to recover\n * @param newOwnerAuthority - New owner authority\n * @param extensions - Extensions array\n * @returns Request account recovery operation\n */\nexport function buildRequestAccountRecoveryOp(\n recoveryAccount: string,\n accountToRecover: string,\n newOwnerAuthority: Authority,\n extensions: any[] = []\n): Operation {\n if (!recoveryAccount || !accountToRecover || !newOwnerAuthority) {\n throw new Error(\"[SDK][buildRequestAccountRecoveryOp] Missing required parameters\");\n }\n\n return [\n \"request_account_recovery\",\n {\n recovery_account: recoveryAccount,\n account_to_recover: accountToRecover,\n new_owner_authority: newOwnerAuthority,\n extensions,\n },\n ];\n}\n\n/**\n * Builds a recover account operation.\n * @param accountToRecover - Account to recover\n * @param newOwnerAuthority - New owner authority\n * @param recentOwnerAuthority - Recent owner authority (for proof)\n * @param extensions - Extensions array\n * @returns Recover account operation\n */\nexport function buildRecoverAccountOp(\n accountToRecover: string,\n newOwnerAuthority: Authority,\n recentOwnerAuthority: Authority,\n extensions: any[] = []\n): Operation {\n if (!accountToRecover || !newOwnerAuthority || !recentOwnerAuthority) {\n throw new Error(\"[SDK][buildRecoverAccountOp] Missing required parameters\");\n }\n\n return [\n \"recover_account\",\n {\n account_to_recover: accountToRecover,\n new_owner_authority: newOwnerAuthority,\n recent_owner_authority: recentOwnerAuthority,\n extensions,\n },\n ];\n}\n","import { Operation } from \"@hiveio/dhive\";\n\n/**\n * Ecency-Specific Operations\n * Custom operations for Ecency platform features (Points, Boost, Promote, etc.)\n */\n\n/**\n * Builds an Ecency boost operation (custom_json with active authority).\n * @param user - User account\n * @param author - Post author\n * @param permlink - Post permlink\n * @param amount - Amount to boost (e.g., \"1.000 POINT\")\n * @returns Custom JSON operation for boost\n */\nexport function buildBoostOp(\n user: string,\n author: string,\n permlink: string,\n amount: string\n): Operation {\n if (!user || !author || !permlink || !amount) {\n throw new Error(\"[SDK][buildBoostOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"ecency_boost\",\n json: JSON.stringify({\n user,\n author,\n permlink,\n amount,\n }),\n required_auths: [user],\n required_posting_auths: [],\n },\n ];\n}\n\n/**\n * Builds an Ecency boost operation with numeric point value.\n * @param user - User account\n * @param author - Post author\n * @param permlink - Post permlink\n * @param points - Points to spend (will be formatted as \"X.XXX POINT\", must be a valid finite number)\n * @returns Custom JSON operation for boost\n */\nexport function buildBoostOpWithPoints(\n user: string,\n author: string,\n permlink: string,\n points: number\n): Operation {\n // Validate required parameters and ensure points is a finite number (reject NaN, Infinity)\n if (!user || !author || !permlink || !Number.isFinite(points)) {\n throw new Error(\"[SDK][buildBoostOpWithPoints] Missing required parameters\");\n }\n\n return buildBoostOp(user, author, permlink, `${points.toFixed(3)} POINT`);\n}\n\n/**\n * Builds an Ecency Boost Plus subscription operation (custom_json).\n * @param user - User account\n * @param account - Account to subscribe\n * @param duration - Subscription duration in days (must be a valid finite number)\n * @returns Custom JSON operation for boost plus\n */\nexport function buildBoostPlusOp(\n user: string,\n account: string,\n duration: number\n): Operation {\n // Validate required parameters and ensure duration is a finite number (reject NaN, Infinity)\n if (!user || !account || !Number.isFinite(duration)) {\n throw new Error(\"[SDK][buildBoostPlusOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"ecency_boost_plus\",\n json: JSON.stringify({\n user,\n account,\n duration,\n }),\n required_auths: [user],\n required_posting_auths: [],\n },\n ];\n}\n\n/**\n * Builds an Ecency promote operation (custom_json).\n * @param user - User account\n * @param author - Post author\n * @param permlink - Post permlink\n * @param duration - Promotion duration in days (must be a valid finite number)\n * @returns Custom JSON operation for promote\n */\nexport function buildPromoteOp(\n user: string,\n author: string,\n permlink: string,\n duration: number\n): Operation {\n // Validate required parameters and ensure duration is a finite number (reject NaN, Infinity)\n if (!user || !author || !permlink || !Number.isFinite(duration)) {\n throw new Error(\"[SDK][buildPromoteOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"ecency_promote\",\n json: JSON.stringify({\n user,\n author,\n permlink,\n duration,\n }),\n required_auths: [user],\n required_posting_auths: [],\n },\n ];\n}\n\n/**\n * Builds an Ecency point transfer operation (custom_json).\n * @param sender - Sender account\n * @param receiver - Receiver account\n * @param amount - Amount to transfer\n * @param memo - Transfer memo\n * @returns Custom JSON operation for point transfer\n */\nexport function buildPointTransferOp(\n sender: string,\n receiver: string,\n amount: string,\n memo: string\n): Operation {\n if (!sender || !receiver || !amount) {\n throw new Error(\"[SDK][buildPointTransferOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"ecency_point_transfer\",\n json: JSON.stringify({\n sender,\n receiver,\n amount,\n memo: memo || \"\",\n }),\n required_auths: [sender],\n required_posting_auths: [],\n },\n ];\n}\n\n/**\n * Builds multiple Ecency point transfer operations for multiple recipients.\n * @param sender - Sender account\n * @param destinations - Comma or space separated list of recipients\n * @param amount - Amount to transfer\n * @param memo - Transfer memo\n * @returns Array of custom JSON operations for point transfers\n */\nexport function buildMultiPointTransferOps(\n sender: string,\n destinations: string,\n amount: string,\n memo: string\n): Operation[] {\n if (!sender || !destinations || !amount) {\n throw new Error(\"[SDK][buildMultiPointTransferOps] Missing required parameters\");\n }\n\n // Split the destination input into an array of usernames\n const destArray = destinations\n .trim()\n .split(/[\\s,]+/)\n .filter(Boolean);\n\n // Validate parsed destinations\n if (destArray.length === 0) {\n throw new Error(\"[SDK][buildMultiPointTransferOps] Missing valid destinations\");\n }\n\n // Create a point transfer operation for each destination\n return destArray.map((dest) =>\n buildPointTransferOp(sender, dest.trim(), amount, memo)\n );\n}\n\n/**\n * Builds an Ecency community rewards registration operation (custom_json).\n * @param name - Account name to register\n * @returns Custom JSON operation for community registration\n */\nexport function buildCommunityRegistrationOp(name: string): Operation {\n if (!name) {\n throw new Error(\"[SDK][buildCommunityRegistrationOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: \"ecency_registration\",\n json: JSON.stringify({\n name,\n }),\n required_auths: [name],\n required_posting_auths: [],\n },\n ];\n}\n\n/**\n * Builds a generic active authority custom_json operation.\n * Used for various Ecency operations that require active authority.\n * @param username - Account performing the operation\n * @param operationId - Custom JSON operation ID\n * @param json - JSON payload\n * @returns Custom JSON operation with active authority\n */\nexport function buildActiveCustomJsonOp(\n username: string,\n operationId: string,\n json: Record<string, any>\n): Operation {\n if (!username || !operationId || !json) {\n throw new Error(\"[SDK][buildActiveCustomJsonOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: operationId,\n json: JSON.stringify(json),\n required_auths: [username],\n required_posting_auths: [],\n },\n ];\n}\n\n/**\n * Builds a generic posting authority custom_json operation.\n * Used for various operations that require posting authority.\n * @param username - Account performing the operation\n * @param operationId - Custom JSON operation ID\n * @param json - JSON payload\n * @returns Custom JSON operation with posting authority\n */\nexport function buildPostingCustomJsonOp(\n username: string,\n operationId: string,\n json: Record<string, any> | any[]\n): Operation {\n if (!username || !operationId || !json) {\n throw new Error(\"[SDK][buildPostingCustomJsonOp] Missing required parameters\");\n }\n\n return [\n \"custom_json\",\n {\n id: operationId,\n json: JSON.stringify(json),\n required_auths: [],\n required_posting_auths: [username],\n },\n ];\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildFollowOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for following an account.\n */\nexport interface FollowPayload {\n /** Account to follow */\n following: string;\n}\n\n/**\n * React Query mutation hook for following an account.\n *\n * This mutation broadcasts a follow operation to the Hive blockchain,\n * adding the target account to the follower's \"blog\" follow list.\n *\n * @param username - The username of the follower (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates relationship cache to show updated follow status\n * - Invalidates account cache to refetch updated follower/following counts\n *\n * @example\n * ```typescript\n * const followMutation = useFollow(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Follow an account\n * followMutation.mutate({\n * following: 'alice'\n * });\n * ```\n */\nexport function useFollow(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<FollowPayload>(\n [\"accounts\", \"follow\"],\n username,\n ({ following }) => [\n buildFollowOp(username!, following)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.relations(username!, variables.following),\n QueryKeys.accounts.full(variables.following)\n ]);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildUnfollowOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for unfollowing an account.\n */\nexport interface UnfollowPayload {\n /** Account to unfollow */\n following: string;\n}\n\n/**\n * React Query mutation hook for unfollowing an account.\n *\n * This mutation broadcasts an unfollow operation to the Hive blockchain,\n * removing the target account from the follower's follow list.\n *\n * @param username - The username of the follower (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates relationship cache to show updated follow status\n * - Invalidates account cache to refetch updated follower/following counts\n *\n * @example\n * ```typescript\n * const unfollowMutation = useUnfollow(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Unfollow an account\n * unfollowMutation.mutate({\n * following: 'alice'\n * });\n * ```\n */\nexport function useUnfollow(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<UnfollowPayload>(\n [\"accounts\", \"unfollow\"],\n username,\n ({ following }) => [\n buildUnfollowOp(username!, following)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.relations(username!, variables.following),\n QueryKeys.accounts.full(variables.following)\n ]);\n }\n },\n auth\n );\n}\n","import { CONFIG, getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { useMutation } from \"@tanstack/react-query\";\n\ninterface Payload {\n author: string;\n permlink: string;\n}\n\nexport function useBookmarkAdd(\n username: string | undefined,\n code: string | undefined,\n onSuccess: () => void,\n onError: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"accounts\", \"bookmarks\", \"add\", username],\n mutationFn: async ({ author, permlink }: Payload) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Account][Bookmarks] – missing auth\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/bookmarks-add\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n author,\n permlink,\n code,\n }),\n }\n );\n return response.json();\n },\n onSuccess: () => {\n onSuccess();\n getQueryClient().invalidateQueries({\n queryKey: [\"accounts\", \"bookmarks\", username],\n });\n },\n onError,\n });\n}\n","import { CONFIG, getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { useMutation } from \"@tanstack/react-query\";\n\nexport function useBookmarkDelete(\n username: string | undefined,\n code: string | undefined,\n onSuccess: () => void,\n onError: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"accounts\", \"bookmarks\", \"delete\", username],\n mutationFn: async (bookmarkId: string) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Account][Bookmarks] – missing auth\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/bookmarks-delete\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n id: bookmarkId,\n code,\n }),\n }\n );\n return response.json();\n },\n onSuccess: () => {\n onSuccess();\n getQueryClient().invalidateQueries({\n queryKey: [\"accounts\", \"bookmarks\", username],\n });\n },\n onError,\n });\n}\n","import { CONFIG, getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { useMutation } from \"@tanstack/react-query\";\n\nexport function useAccountFavouriteAdd(\n username: string | undefined,\n code: string | undefined,\n onSuccess: () => void,\n onError: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"accounts\", \"favourites\", \"add\", username],\n mutationFn: async (account: string) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Account][Bookmarks] – missing auth\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/favorites-add\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n account,\n code,\n }),\n }\n );\n return response.json();\n },\n onSuccess: () => {\n onSuccess();\n getQueryClient().invalidateQueries({\n queryKey: [\"accounts\", \"favourites\", username],\n });\n },\n onError,\n });\n}\n","import { CONFIG, getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { useMutation } from \"@tanstack/react-query\";\n\nexport function useAccountFavouriteDelete(\n username: string | undefined,\n code: string | undefined,\n onSuccess: () => void,\n onError: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"accounts\", \"favourites\", \"add\", username],\n mutationFn: async (account: string) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Account][Bookmarks] – missing auth\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/favorites-delete\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n account,\n code,\n }),\n }\n );\n return response.json();\n },\n onSuccess: () => {\n onSuccess();\n getQueryClient().invalidateQueries({\n queryKey: [\"accounts\", \"favourites\", username],\n });\n },\n onError,\n });\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { AuthorityType, PrivateKey } from \"@hiveio/dhive\";\nimport {\n useMutation,\n useQuery,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport * as R from \"remeda\";\nimport { getAccountFullQueryOptions } from \"../queries\";\n\nexport interface Keys {\n owner: PrivateKey;\n active: PrivateKey;\n posting: PrivateKey;\n memo_key: PrivateKey;\n}\n\ninterface Payload {\n keepCurrent?: boolean;\n currentKey: PrivateKey;\n keys: Keys[];\n keysToRevoke?: string[]; // Deprecated: will be treated as revoking from all authorities\n keysToRevokeByAuthority?: Partial<Record<keyof Keys, string[]>>; // Authority-specific revocation\n}\n\nexport function dedupeAndSortKeyAuths(\n existing: AuthorityType[\"key_auths\"],\n additions: [string, number][]\n): AuthorityType[\"key_auths\"] {\n const merged = new Map<string, number>();\n\n existing.forEach(([key, weight]) => {\n merged.set(key.toString(), weight);\n });\n\n additions.forEach(([key, weight]) => {\n merged.set(key.toString(), weight);\n });\n\n return Array.from(merged.entries())\n .sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n .map(([key, weight]) => [key, weight] as [string, number]);\n}\n\ntype UpdateKeyAuthsOptions = Pick<\n UseMutationOptions<unknown, Error, Payload>,\n \"onSuccess\" | \"onError\"\n>;\n\nexport function useAccountUpdateKeyAuths(\n username: string,\n options?: UpdateKeyAuthsOptions\n) {\n const { data: accountData } = useQuery(getAccountFullQueryOptions(username));\n\n return useMutation({\n mutationKey: [\"accounts\", \"keys-update\", username],\n mutationFn: async ({\n keys,\n keepCurrent = false,\n currentKey,\n keysToRevoke = [],\n keysToRevokeByAuthority = {}\n }: Payload) => {\n if (keys.length === 0) {\n throw new Error(\n \"[SDK][Update password] – no new keys provided\"\n );\n }\n\n if (!accountData) {\n throw new Error(\n \"[SDK][Update password] – cannot update keys for anon user\"\n );\n }\n\n const prepareAuth = (keyName: keyof Keys) => {\n const auth: AuthorityType = R.clone(accountData[keyName]);\n\n // Get keys to revoke for this specific authority\n const keysToRevokeForAuthority = keysToRevokeByAuthority[keyName] || [];\n // Fallback to global keysToRevoke for backwards compatibility\n const allKeysToRevoke = [\n ...keysToRevokeForAuthority,\n ...(keysToRevokeByAuthority[keyName] === undefined ? keysToRevoke : [])\n ];\n\n // Filter out keys to revoke from existing keys (authority-specific)\n const existingKeys = keepCurrent\n ? auth.key_auths.filter(([key]) => !allKeysToRevoke.includes(key.toString()))\n : [];\n\n auth.key_auths = dedupeAndSortKeyAuths(\n existingKeys,\n keys.map(\n (values, i) =>\n [values[keyName].createPublic().toString(), i + 1] as [\n string,\n number,\n ]\n )\n );\n\n return auth;\n };\n\n return CONFIG.hiveClient.broadcast.updateAccount(\n {\n account: username,\n json_metadata: accountData.json_metadata,\n owner: prepareAuth(\"owner\"),\n active: prepareAuth(\"active\"),\n posting: prepareAuth(\"posting\"),\n // Always use new memo key when adding new keys\n memo_key: keys[0].memo_key.createPublic().toString(),\n },\n currentKey\n );\n },\n ...options,\n });\n}\n","import { PrivateKey } from \"@hiveio/dhive\";\nimport {\n useMutation,\n useQuery,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { getAccountFullQueryOptions } from \"../queries\";\nimport { useAccountUpdateKeyAuths } from \"./use-account-update-key-auths\";\n\ninterface Payload {\n newPassword: string;\n currentPassword: string;\n keepCurrent?: boolean;\n}\n\n/**\n * Only native Hive and custom passwords could be updated here\n * Seed based password cannot be updated here, it will be in an account always for now\n */\ntype UpdatePasswordOptions = Pick<\n UseMutationOptions<unknown, Error, Payload>,\n \"onSuccess\" | \"onError\"\n>;\n\nexport function useAccountUpdatePassword(\n username: string,\n options?: UpdatePasswordOptions\n) {\n const { data: accountData } = useQuery(getAccountFullQueryOptions(username));\n\n const { mutateAsync: updateKeys } = useAccountUpdateKeyAuths(username);\n\n return useMutation({\n mutationKey: [\"accounts\", \"password-update\", username],\n mutationFn: async ({\n newPassword,\n currentPassword,\n keepCurrent,\n }: Payload) => {\n if (!accountData) {\n throw new Error(\n \"[SDK][Update password] – cannot update password for anon user\"\n );\n }\n const currentKey = PrivateKey.fromLogin(\n username,\n currentPassword,\n \"owner\"\n );\n\n return updateKeys({\n currentKey,\n keepCurrent,\n keys: [\n {\n owner: PrivateKey.fromLogin(username, newPassword, \"owner\"),\n active: PrivateKey.fromLogin(username, newPassword, \"active\"),\n posting: PrivateKey.fromLogin(username, newPassword, \"posting\"),\n memo_key: PrivateKey.fromLogin(username, newPassword, \"memo\"),\n },\n ],\n });\n },\n ...options,\n });\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { PrivateKey } from \"@hiveio/dhive\";\nimport {\n useMutation,\n useQuery,\n useQueryClient,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { getAccountFullQueryOptions } from \"../queries\";\nimport * as R from \"remeda\";\nimport { FullAccount } from \"../types\";\nimport hs from \"hivesigner\";\nimport type { AuthContext } from \"@/modules/core/types\";\n\ntype SignType = \"key\" | \"keychain\" | \"hivesigner\";\n\ninterface CommonPayload {\n accountName: string;\n type: SignType;\n key?: PrivateKey;\n}\n\ntype RevokePostingOptions = Pick<\n UseMutationOptions<unknown, Error, CommonPayload>,\n \"onSuccess\" | \"onError\"\n>;\n\nexport function useAccountRevokePosting(\n username: string | undefined,\n options: RevokePostingOptions,\n auth?: AuthContext\n) {\n const queryClient = useQueryClient();\n\n const { data } = useQuery(getAccountFullQueryOptions(username));\n\n return useMutation({\n mutationKey: [\"accounts\", \"revoke-posting\", data?.name],\n mutationFn: async ({ accountName, type, key }: CommonPayload) => {\n if (!data) {\n throw new Error(\n \"[SDK][Accounts] – cannot revoke posting for anonymous user\"\n );\n }\n\n const posting = R.pipe(\n {},\n R.mergeDeep(data.posting)\n ) as FullAccount[\"posting\"];\n\n posting.account_auths = posting.account_auths.filter(\n ([account]) => account !== accountName\n );\n\n const operationBody = {\n account: data.name,\n posting,\n memo_key: data.memo_key,\n json_metadata: data.json_metadata,\n };\n\n if (type === \"key\" && key) {\n return CONFIG.hiveClient.broadcast.updateAccount(operationBody, key);\n } else if (type === \"keychain\") {\n if (!auth?.broadcast) {\n throw new Error(\"[SDK][Accounts] – missing keychain broadcaster\");\n }\n return auth.broadcast([[\"account_update\", operationBody]], \"active\");\n } else {\n const params = {\n callback: `https://ecency.com/@${data.name}/permissions`,\n };\n return hs.sendOperation(\n [\"account_update\", operationBody],\n params,\n () => {}\n );\n }\n },\n onError: options.onError,\n onSuccess: (resp, payload, ctx) => {\n (options.onSuccess as\n | ((data: unknown, variables: CommonPayload, context: unknown) => unknown)\n | undefined)?.(resp, payload, ctx);\n queryClient.setQueryData<FullAccount>(\n getAccountFullQueryOptions(username).queryKey,\n (data) =>\n ({\n ...data,\n posting: {\n ...data?.posting,\n account_auths:\n data?.posting?.account_auths?.filter(\n ([account]) => account !== payload.accountName\n ) ?? [],\n },\n }) as FullAccount\n );\n },\n });\n}\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { PrivateKey } from \"@hiveio/dhive\";\nimport {\n useMutation,\n useQuery,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport hs from \"hivesigner\";\nimport { getAccountFullQueryOptions } from \"../queries\";\nimport type { AuthContext } from \"@/modules/core/types\";\n\ntype SignType = \"key\" | \"keychain\" | \"hivesigner\" | \"ecency\";\n\ninterface CommonPayload {\n accountName: string;\n type: SignType;\n key?: PrivateKey;\n email?: string;\n}\n\ntype UpdateRecoveryOptions = Pick<\n UseMutationOptions<unknown, Error, CommonPayload>,\n \"onSuccess\" | \"onError\"\n>;\n\nexport function useAccountUpdateRecovery(\n username: string | undefined,\n code: string | undefined,\n options: UpdateRecoveryOptions,\n auth?: AuthContext\n) {\n const { data } = useQuery(getAccountFullQueryOptions(username));\n\n return useMutation({\n mutationKey: [\"accounts\", \"recovery\", data?.name],\n mutationFn: async ({ accountName, type, key, email }: CommonPayload) => {\n if (!data) {\n throw new Error(\n \"[SDK][Accounts] – cannot change recovery for anonymous user\"\n );\n }\n\n const operationBody = {\n account_to_recover: data.name,\n new_recovery_account: accountName,\n extensions: [],\n };\n\n if (type === \"ecency\") {\n if (!code) {\n throw new Error(\"[SDK][Accounts] – missing access token\");\n }\n const fetchApi = getBoundFetch();\n\n return fetchApi(CONFIG.privateApiHost + \"/private-api/recoveries-add\", {\n method: \"POST\",\n body: JSON.stringify({\n code,\n email,\n publicKeys: [\n ...data.owner.key_auths,\n ...data.active.key_auths,\n ...data.posting.key_auths,\n data.memo_key,\n ],\n }),\n });\n } else if (type === \"key\" && key) {\n return CONFIG.hiveClient.broadcast.sendOperations(\n [[\"change_recovery_account\", operationBody]],\n key\n );\n } else if (type === \"keychain\") {\n if (!auth?.broadcast) {\n throw new Error(\"[SDK][Accounts] – missing keychain broadcaster\");\n }\n return auth.broadcast([[\"change_recovery_account\", operationBody]], \"owner\");\n } else {\n const params = {\n callback: `https://ecency.com/@${data.name}/permissions`,\n };\n return hs.sendOperation(\n [\"change_recovery_account\", operationBody],\n params,\n () => {}\n );\n }\n },\n onError: options.onError,\n onSuccess: options.onSuccess,\n });\n}\n","import { AuthorityType, PrivateKey, PublicKey } from \"@hiveio/dhive\";\nimport {\n useMutation,\n useQuery,\n type UseMutationOptions,\n} from \"@tanstack/react-query\";\nimport { getAccountFullQueryOptions } from \"../queries\";\nimport * as R from \"remeda\";\nimport { CONFIG } from \"@/modules/core\";\nimport { Keys } from \"./use-account-update-key-auths\";\n\ninterface Payload {\n currentKey: PrivateKey;\n revokingKey: PublicKey;\n}\n\n/**\n * This hook provides functionality to revoke a key from an account on the Hive blockchain.\n * It leverages React Query's `useMutation` for managing the mutation state and executing\n * the operation efficiently.\n *\n * @param username The username of the Hive account from which the key should be revoked.\n * Pass `undefined` if the username is unknown or not set yet.\n *\n * @returns The mutation object from `useMutation`, including methods to trigger the key\n * revocation and access its state (e.g., loading, success, error).\n */\ntype RevokeKeyOptions = Pick<\n UseMutationOptions<unknown, Error, Payload>,\n \"onSuccess\" | \"onError\"\n>;\n\nexport function useAccountRevokeKey(\n username: string | undefined,\n options?: RevokeKeyOptions\n) {\n const { data: accountData } = useQuery(getAccountFullQueryOptions(username));\n\n return useMutation({\n mutationKey: [\"accounts\", \"revoke-key\", accountData?.name],\n mutationFn: async ({ currentKey, revokingKey }: Payload) => {\n if (!accountData) {\n throw new Error(\n \"[SDK][Update password] – cannot update keys for anon user\"\n );\n }\n\n const prepareAuth = (keyName: keyof Keys) => {\n const auth: AuthorityType = R.clone(accountData[keyName]);\n\n auth.key_auths = auth.key_auths.filter(\n ([key]) => key !== revokingKey.toString()\n );\n\n return auth;\n };\n\n return CONFIG.hiveClient.broadcast.updateAccount(\n {\n account: accountData.name,\n json_metadata: accountData.json_metadata,\n owner: prepareAuth(\"owner\"),\n active: prepareAuth(\"active\"),\n posting: prepareAuth(\"posting\"),\n memo_key: accountData.memo_key,\n },\n currentKey\n );\n },\n ...options,\n });\n}\n","import { useBroadcastMutation } from \"@/modules/core\";\nimport { buildClaimAccountOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for claiming account creation tokens.\n */\nexport interface ClaimAccountPayload {\n /** Creator account claiming the token */\n creator: string;\n /** Fee for claiming (usually \"0.000 HIVE\" for RC-based claims) */\n fee?: string;\n}\n\n/**\n * React Query mutation hook for claiming account creation tokens.\n *\n * This mutation broadcasts a claim_account operation to claim an account\n * creation token using Resource Credits (RC). The claimed token can later\n * be used to create a new account for free using the create_claimed_account\n * operation.\n *\n * @param username - The username claiming the account token (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates account cache to update pending_claimed_accounts count\n * - Updates account query data to set pending_claimed_accounts = 0 optimistically\n *\n * **Operation Details:**\n * - Uses native claim_account operation\n * - Fee: \"0.000 HIVE\" (uses RC instead of HIVE)\n * - Authority: Active key (required for claiming)\n *\n * **RC Requirements:**\n * - Requires sufficient Resource Credits (RC)\n * - RC amount varies based on network conditions\n * - Claiming without sufficient RC will fail\n *\n * **Use Case:**\n * - Claim tokens in advance when RC is available\n * - Create accounts later without paying HIVE fee\n * - Useful for onboarding services and apps\n *\n * @example\n * ```typescript\n * const claimMutation = useClaimAccount(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Claim account token using RC\n * claimMutation.mutate({\n * creator: 'alice',\n * fee: '0.000 HIVE'\n * });\n * ```\n */\nexport function useClaimAccount(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<ClaimAccountPayload>(\n [\"accounts\", \"claimAccount\"],\n username,\n ({ creator, fee = \"0.000 HIVE\" }) => [\n buildClaimAccountOp(creator, fee)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n [\"accounts\", variables.creator],\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildGrantPostingPermissionOp, type Authority } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface GrantPostingPermissionPayload {\n currentPosting: Authority;\n grantedAccount: string;\n weightThreshold: number;\n memoKey: string;\n jsonMetadata: string;\n}\n\nexport function useGrantPostingPermission(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<GrantPostingPermissionPayload>(\n [\"accounts\", \"grant-posting-permission\"],\n username,\n (payload) => [\n buildGrantPostingPermissionOp(\n username!,\n payload.currentPosting,\n payload.grantedAccount,\n payload.weightThreshold,\n payload.memoKey,\n payload.jsonMetadata\n )\n ],\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildAccountCreateOp, buildCreateClaimedAccountOp, type AccountKeys } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface CreateAccountPayload {\n newAccountName: string;\n keys: AccountKeys;\n fee: string;\n /** If true, uses a claimed account token instead of paying the fee */\n useClaimed?: boolean;\n}\n\nexport function useCreateAccount(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<CreateAccountPayload>(\n [\"accounts\", \"create\"],\n username,\n (payload) => [\n payload.useClaimed\n ? buildCreateClaimedAccountOp(username!, payload.newAccountName, payload.keys)\n : buildAccountCreateOp(username!, payload.newAccountName, payload.keys, payload.fee)\n ],\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { parseAsset } from \"@/modules/core/utils\";\nimport { DynamicProps } from \"@/modules/core/types\";\nimport { FullAccount } from \"../types\";\nimport type { Account as DhiveAccount } from \"@hiveio/dhive\";\nimport type { RCAccount } from \"@hiveio/dhive/lib/chain/rc\";\n\nconst HIVE_VOTING_MANA_REGENERATION_SECONDS = 5 * 60 * 60 * 24; // 5 days\n\nfunction vestsToRshares(vests: number, votingPowerValue: number, votePerc: number): number {\n const vestingShares = vests * 1e6;\n const power = (votingPowerValue * votePerc) / 1e4 / 50 + 1;\n return (power * vestingShares) / 1e4;\n}\n\nfunction toDhiveAccountForVotingMana(account: FullAccount): DhiveAccount {\n return {\n id: 0,\n name: account.name,\n owner: account.owner,\n active: account.active,\n posting: account.posting,\n memo_key: account.memo_key,\n json_metadata: account.json_metadata,\n posting_json_metadata: account.posting_json_metadata,\n proxy: account.proxy ?? \"\",\n last_owner_update: \"\",\n last_account_update: \"\",\n created: account.created,\n mined: false,\n owner_challenged: false,\n active_challenged: false,\n last_owner_proved: \"\",\n last_active_proved: \"\",\n recovery_account: account.recovery_account ?? \"\",\n reset_account: \"\",\n last_account_recovery: \"\",\n comment_count: 0,\n lifetime_vote_count: 0,\n post_count: account.post_count,\n can_vote: true,\n voting_power: account.voting_power,\n last_vote_time: account.last_vote_time,\n voting_manabar: account.voting_manabar,\n balance: account.balance,\n savings_balance: account.savings_balance,\n hbd_balance: account.hbd_balance,\n hbd_seconds: \"0\",\n hbd_seconds_last_update: \"\",\n hbd_last_interest_payment: \"\",\n savings_hbd_balance: account.savings_hbd_balance,\n savings_hbd_seconds: account.savings_hbd_seconds,\n savings_hbd_seconds_last_update: account.savings_hbd_seconds_last_update,\n savings_hbd_last_interest_payment: account.savings_hbd_last_interest_payment,\n savings_withdraw_requests: 0,\n reward_hbd_balance: account.reward_hbd_balance,\n reward_hive_balance: account.reward_hive_balance,\n reward_vesting_balance: account.reward_vesting_balance,\n reward_vesting_hive: account.reward_vesting_hive,\n curation_rewards: 0,\n posting_rewards: 0,\n vesting_shares: account.vesting_shares,\n delegated_vesting_shares: account.delegated_vesting_shares,\n received_vesting_shares: account.received_vesting_shares,\n vesting_withdraw_rate: account.vesting_withdraw_rate,\n next_vesting_withdrawal: account.next_vesting_withdrawal,\n withdrawn: account.withdrawn,\n to_withdraw: account.to_withdraw,\n withdraw_routes: 0,\n proxied_vsf_votes: (account.proxied_vsf_votes as number[]) ?? [],\n witnesses_voted_for: 0,\n average_bandwidth: 0,\n lifetime_bandwidth: 0,\n last_bandwidth_update: \"\",\n average_market_bandwidth: 0,\n lifetime_market_bandwidth: 0,\n last_market_bandwidth_update: \"\",\n last_post: account.last_post,\n last_root_post: \"\",\n };\n}\n\nexport function votingPower(account: FullAccount): number {\n const calc = CONFIG.hiveClient.rc.calculateVPMana(\n toDhiveAccountForVotingMana(account)\n );\n return calc.percentage / 100;\n}\n\nexport function powerRechargeTime(power: number) {\n if (!Number.isFinite(power)) {\n throw new TypeError(\"Voting power must be a finite number\");\n }\n if (power < 0 || power > 100) {\n throw new RangeError(\"Voting power must be between 0 and 100\");\n }\n const missingPower = 100 - power;\n return (\n (missingPower * 100 * HIVE_VOTING_MANA_REGENERATION_SECONDS) / 10000\n );\n}\n\nexport function downVotingPower(account: FullAccount): number {\n const totalShares =\n parseFloat(account.vesting_shares) +\n parseFloat(account.received_vesting_shares) -\n parseFloat(account.delegated_vesting_shares);\n const elapsed = Math.floor(Date.now() / 1000) - account.downvote_manabar.last_update_time;\n const maxMana = (totalShares * 1000000) / 4;\n\n if (maxMana <= 0) {\n return 0;\n }\n\n let currentMana =\n parseFloat(account.downvote_manabar.current_mana.toString()) +\n (elapsed * maxMana) / HIVE_VOTING_MANA_REGENERATION_SECONDS;\n\n if (currentMana > maxMana) {\n currentMana = maxMana;\n }\n const currentManaPerc = (currentMana * 100) / maxMana;\n\n if (isNaN(currentManaPerc)) {\n return 0;\n }\n\n if (currentManaPerc > 100) {\n return 100;\n }\n return currentManaPerc;\n}\n\nexport function rcPower(account: RCAccount): number {\n const calc = CONFIG.hiveClient.rc.calculateRCMana(account);\n return calc.percentage / 100;\n}\n\nexport function votingValue(\n account: FullAccount,\n dynamicProps: DynamicProps,\n votingPowerValue: number,\n weight: number = 10000\n): number {\n if (!Number.isFinite(votingPowerValue) || !Number.isFinite(weight)) {\n return 0;\n }\n const { fundRecentClaims, fundRewardBalance, base, quote } = dynamicProps;\n\n if (\n !Number.isFinite(fundRecentClaims) ||\n !Number.isFinite(fundRewardBalance) ||\n !Number.isFinite(base) ||\n !Number.isFinite(quote)\n ) {\n return 0;\n }\n\n if (fundRecentClaims === 0 || quote === 0) {\n return 0;\n }\n\n let totalVests = 0;\n try {\n const vesting = parseAsset(account.vesting_shares).amount;\n const received = parseAsset(account.received_vesting_shares).amount;\n const delegated = parseAsset(account.delegated_vesting_shares).amount;\n if (![vesting, received, delegated].every(Number.isFinite)) {\n return 0;\n }\n totalVests = vesting + received - delegated;\n } catch {\n return 0;\n }\n\n if (!Number.isFinite(totalVests)) {\n return 0;\n }\n\n const rShares = vestsToRshares(totalVests, votingPowerValue, weight);\n if (!Number.isFinite(rShares)) {\n return 0;\n }\n\n return (rShares / fundRecentClaims) * fundRewardBalance * (base / quote);\n}\n","import type { Operation } from \"@hiveio/dhive\";\n\n/**\n * Authority levels for Hive blockchain operations.\n * - posting: Social operations (voting, commenting, reblogging)\n * - active: Financial and account management operations\n * - owner: Critical security operations (key changes, account recovery)\n * - memo: Memo encryption/decryption (rarely used for signing)\n */\nexport type AuthorityLevel = 'posting' | 'active' | 'owner' | 'memo';\n\n/**\n * Maps operation types to their required authority level.\n *\n * This mapping is used to determine which key is needed to sign a transaction,\n * enabling smart auth fallback and auth upgrade UI.\n *\n * @remarks\n * - Most social operations (vote, comment, reblog) require posting authority\n * - Financial operations (transfer, withdraw) require active authority\n * - Account management operations require active authority\n * - Security operations (password change, account recovery) require owner authority\n * - custom_json requires dynamic detection based on required_auths vs required_posting_auths\n */\nexport const OPERATION_AUTHORITY_MAP: Record<string, AuthorityLevel> = {\n // Posting authority operations\n vote: 'posting',\n comment: 'posting',\n delete_comment: 'posting',\n comment_options: 'posting',\n claim_reward_balance: 'posting',\n\n // Active authority operations - Financial\n cancel_transfer_from_savings: 'active',\n collateralized_convert: 'active',\n convert: 'active',\n delegate_vesting_shares: 'active',\n recurrent_transfer: 'active',\n set_withdraw_vesting_route: 'active',\n transfer: 'active',\n transfer_from_savings: 'active',\n transfer_to_savings: 'active',\n transfer_to_vesting: 'active',\n withdraw_vesting: 'active',\n\n // Active authority operations - Market\n limit_order_create: 'active',\n limit_order_cancel: 'active',\n\n // Active authority operations - Account Management\n account_update: 'active',\n account_update2: 'active',\n claim_account: 'active',\n create_claimed_account: 'active',\n\n // Active authority operations - Governance\n account_witness_proxy: 'active',\n account_witness_vote: 'active',\n remove_proposal: 'active',\n update_proposal_votes: 'active',\n\n // Owner authority operations - Security & Account Recovery\n change_recovery_account: 'owner',\n request_account_recovery: 'owner',\n recover_account: 'owner',\n reset_account: 'owner',\n set_reset_account: 'owner',\n\n // Note: Some operations are handled separately via content inspection:\n // - custom_json: via getCustomJsonAuthority() - posting or active based on required_auths\n // - create_proposal/update_proposal: via getProposalAuthority() - typically active\n};\n\n/**\n * Determines authority required for a custom_json operation.\n *\n * Custom JSON operations can require either posting or active authority\n * depending on which field is populated:\n * - required_auths (active authority)\n * - required_posting_auths (posting authority)\n *\n * @param customJsonOp - The custom_json operation to inspect\n * @returns 'active' if requires active authority, 'posting' if requires posting authority\n *\n * @example\n * ```typescript\n * // Reblog operation (posting authority)\n * const reblogOp: Operation = ['custom_json', {\n * required_auths: [],\n * required_posting_auths: ['alice'],\n * id: 'reblog',\n * json: '...'\n * }];\n * getCustomJsonAuthority(reblogOp); // Returns 'posting'\n *\n * // Some active authority custom_json\n * const activeOp: Operation = ['custom_json', {\n * required_auths: ['alice'],\n * required_posting_auths: [],\n * id: 'some_active_op',\n * json: '...'\n * }];\n * getCustomJsonAuthority(activeOp); // Returns 'active'\n * ```\n */\nexport function getCustomJsonAuthority(customJsonOp: Operation): AuthorityLevel {\n const opType = customJsonOp[0];\n const payload = customJsonOp[1];\n\n if (opType !== 'custom_json') {\n throw new Error('Operation is not a custom_json operation');\n }\n\n // Type assertion for custom_json payload\n const customJson = payload as {\n required_auths?: string[];\n required_posting_auths?: string[];\n id: string;\n json: string;\n };\n\n // If required_auths is set and non-empty, needs active authority\n if (customJson.required_auths && customJson.required_auths.length > 0) {\n return 'active';\n }\n\n // If only required_posting_auths is set, needs posting authority\n if (customJson.required_posting_auths && customJson.required_posting_auths.length > 0) {\n return 'posting';\n }\n\n // Default to posting for custom_json (most common case)\n return 'posting';\n}\n\n/**\n * Determines authority required for a proposal operation.\n *\n * Proposal operations (create_proposal, update_proposal) typically require\n * active authority as they involve financial commitments and funding allocations.\n *\n * @param proposalOp - The proposal operation to inspect\n * @returns 'active' authority requirement\n *\n * @remarks\n * Unlike custom_json, proposal operations don't have explicit required_auths fields.\n * They always use the creator's authority, which defaults to active for financial\n * operations involving the DAO treasury.\n *\n * @example\n * ```typescript\n * const proposalOp: Operation = ['create_proposal', {\n * creator: 'alice',\n * receiver: 'bob',\n * subject: 'My Proposal',\n * permlink: 'my-proposal',\n * start: '2026-03-01T00:00:00',\n * end: '2026-04-01T00:00:00',\n * daily_pay: '100.000 HBD',\n * extensions: []\n * }];\n * getProposalAuthority(proposalOp); // Returns 'active'\n * ```\n */\nexport function getProposalAuthority(proposalOp: Operation): AuthorityLevel {\n const opType = proposalOp[0];\n\n if (opType !== 'create_proposal' && opType !== 'update_proposal') {\n throw new Error('Operation is not a proposal operation');\n }\n\n // Proposal operations require active authority for financial operations\n return 'active';\n}\n\n/**\n * Determines the required authority level for any operation.\n *\n * Uses the OPERATION_AUTHORITY_MAP for standard operations, and dynamic\n * detection for custom_json operations.\n *\n * @param op - The operation to check\n * @returns 'posting' or 'active' authority requirement\n *\n * @example\n * ```typescript\n * const voteOp: Operation = ['vote', { voter: 'alice', author: 'bob', permlink: 'post', weight: 10000 }];\n * getOperationAuthority(voteOp); // Returns 'posting'\n *\n * const transferOp: Operation = ['transfer', { from: 'alice', to: 'bob', amount: '1.000 HIVE', memo: '' }];\n * getOperationAuthority(transferOp); // Returns 'active'\n * ```\n */\nexport function getOperationAuthority(op: Operation): AuthorityLevel {\n const opType = op[0];\n\n // Special handling for custom_json - requires content inspection\n if (opType === 'custom_json') {\n return getCustomJsonAuthority(op);\n }\n\n // Special handling for proposal operations - requires content inspection\n if (opType === 'create_proposal' || opType === 'update_proposal') {\n return getProposalAuthority(op);\n }\n\n // Use mapping for standard operations, default to posting if unknown\n return OPERATION_AUTHORITY_MAP[opType] ?? 'posting';\n}\n\n/**\n * Determines the highest authority level required for a list of operations.\n *\n * Useful when broadcasting multiple operations together - the highest authority\n * level required by any operation determines what key is needed for the batch.\n *\n * Authority hierarchy: owner > active > posting > memo\n *\n * @param ops - Array of operations\n * @returns Highest authority level required ('owner', 'active', or 'posting')\n *\n * @example\n * ```typescript\n * const ops: Operation[] = [\n * ['vote', { ... }], // posting\n * ['comment', { ... }], // posting\n * ];\n * getRequiredAuthority(ops); // Returns 'posting'\n *\n * const mixedOps: Operation[] = [\n * ['comment', { ... }], // posting\n * ['transfer', { ... }], // active\n * ];\n * getRequiredAuthority(mixedOps); // Returns 'active'\n *\n * const securityOps: Operation[] = [\n * ['transfer', { ... }], // active\n * ['change_recovery_account', { ... }], // owner\n * ];\n * getRequiredAuthority(securityOps); // Returns 'owner'\n * ```\n */\nexport function getRequiredAuthority(ops: Operation[]): AuthorityLevel {\n let highestAuthority: AuthorityLevel = 'posting';\n\n for (const op of ops) {\n const authority = getOperationAuthority(op);\n\n // Owner is highest - return immediately\n if (authority === 'owner') {\n return 'owner';\n }\n\n // Active is higher than posting\n if (authority === 'active' && highestAuthority === 'posting') {\n highestAuthority = 'active';\n }\n\n // Memo is lowest (same level as posting)\n // If we see memo but only have posting, stick with posting\n }\n\n return highestAuthority;\n}\n","import { CONFIG } from \"@/modules/core/config\";\nimport { cryptoUtils, Operation, PrivateKey } from \"@hiveio/dhive\";\nimport { useMutation } from \"@tanstack/react-query\";\n\nexport function useSignOperationByKey(username: string | undefined) {\n return useMutation({\n mutationKey: [\"operations\", \"sign\", username],\n mutationFn: ({\n operation,\n keyOrSeed,\n }: {\n operation: Operation;\n keyOrSeed: string;\n }) => {\n if (!username) {\n throw new Error(\"[Operations][Sign] – cannot sign op with anon user\");\n }\n\n let privateKey: PrivateKey;\n if (keyOrSeed.split(\" \").length === 12) {\n privateKey = PrivateKey.fromLogin(username, keyOrSeed, \"active\");\n } else if (cryptoUtils.isWif(keyOrSeed)) {\n privateKey = PrivateKey.fromString(keyOrSeed);\n } else {\n privateKey = PrivateKey.from(keyOrSeed);\n }\n\n return CONFIG.hiveClient.broadcast.sendOperations(\n [operation],\n privateKey\n );\n },\n });\n}\n","import { Operation } from \"@hiveio/dhive\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { AuthContext } from \"@/modules/core/types\";\n\nexport function useSignOperationByKeychain(\n username: string | undefined,\n auth?: AuthContext,\n keyType: \"owner\" | \"active\" | \"posting\" | \"memo\" = \"active\"\n) {\n return useMutation({\n mutationKey: [\"operations\", \"sign-keychain\", username],\n mutationFn: ({ operation }: { operation: Operation }) => {\n if (!username) {\n throw new Error(\n \"[SDK][Keychain] – cannot sign operation with anon user\"\n );\n }\n if (!auth?.broadcast) {\n throw new Error(\"[SDK][Keychain] – missing keychain broadcaster\");\n }\n\n return auth.broadcast([operation], keyType);\n },\n });\n}\n","import { Operation } from \"@hiveio/dhive\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport hs from \"hivesigner\";\n\nexport function useSignOperationByHivesigner(callbackUri = \"/\") {\n return useMutation({\n mutationKey: [\"operations\", \"sign-hivesigner\", callbackUri],\n mutationFn: async ({ operation }: { operation: Operation }) => {\n return hs.sendOperation(operation, { callback: callbackUri }, () => {});\n },\n });\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport function getChainPropertiesQueryOptions() {\n return queryOptions({\n queryKey: [\"operations\", \"chain-properties\"],\n queryFn: async () => {\n return await CONFIG.hiveClient.database.getChainProperties();\n },\n });\n}\n","import { CONFIG, getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { InfiniteData, useMutation } from \"@tanstack/react-query\";\nimport { Fragment } from \"../types\";\nimport { getFragmentsQueryOptions } from \"../queries\";\nimport { WrappedResponse } from \"@/modules/core/types\";\n\nexport function useAddFragment(username: string, code: string | undefined) {\n return useMutation({\n mutationKey: [\"posts\", \"add-fragment\", username],\n mutationFn: async ({ title, body }: { title: string; body: string }) => {\n if (!code) {\n throw new Error(\"[SDK][Posts] Missing access token\");\n }\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/fragments-add\",\n {\n method: \"POST\",\n body: JSON.stringify({\n code,\n title,\n body,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n return response.json() as Promise<Fragment>;\n },\n onSuccess(response) {\n const queryClient = getQueryClient();\n\n // Update regular query cache\n queryClient.setQueryData<Fragment[]>(\n getFragmentsQueryOptions(username, code).queryKey,\n (data) => [response, ...(data ?? [])]\n );\n\n // Update infinite query cache - add new fragment to first page\n queryClient.setQueriesData<InfiniteData<WrappedResponse<Fragment>>>(\n { queryKey: [\"posts\", \"fragments\", \"infinite\", username] },\n (oldData) => {\n if (!oldData) return oldData;\n\n return {\n ...oldData,\n pages: oldData.pages.map((page, index) =>\n index === 0\n ? { ...page, data: [response, ...page.data] }\n : page\n ),\n };\n }\n );\n },\n });\n}\n","import { CONFIG, getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { InfiniteData, useMutation } from \"@tanstack/react-query\";\nimport { Fragment } from \"../types\";\nimport { getFragmentsQueryOptions } from \"../queries\";\nimport { WrappedResponse } from \"@/modules/core/types\";\n\nexport function useEditFragment(\n username: string,\n code: string | undefined\n) {\n return useMutation({\n mutationKey: [\"posts\", \"edit-fragment\", username],\n mutationFn: async ({\n fragmentId,\n title,\n body\n }: {\n fragmentId: string;\n title: string;\n body: string;\n }) => {\n if (!code) {\n throw new Error(\"[SDK][Posts] Missing access token\");\n }\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/fragments-update\",\n {\n method: \"POST\",\n body: JSON.stringify({\n code,\n id: fragmentId,\n title,\n body,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n return response.json() as Promise<Fragment>;\n },\n onSuccess(response, variables) {\n const queryClient = getQueryClient();\n\n // Update regular query cache\n queryClient.setQueryData<Fragment[]>(\n getFragmentsQueryOptions(username, code).queryKey,\n (data) => {\n if (!data) {\n return [];\n }\n\n const index = data.findIndex(({ id }) => id === variables.fragmentId);\n if (index >= 0) {\n data[index] = response;\n }\n\n return [...data];\n }\n );\n\n // Update infinite query cache - update fragment in all pages\n queryClient.setQueriesData<InfiniteData<WrappedResponse<Fragment>>>(\n { queryKey: [\"posts\", \"fragments\", \"infinite\", username] },\n (oldData) => {\n if (!oldData) return oldData;\n\n return {\n ...oldData,\n pages: oldData.pages.map((page) => ({\n ...page,\n data: page.data.map((fragment) =>\n fragment.id === variables.fragmentId ? response : fragment\n ),\n })),\n };\n }\n );\n },\n });\n}\n","import { CONFIG, getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { InfiniteData, useMutation } from \"@tanstack/react-query\";\nimport { Fragment } from \"../types\";\nimport { getFragmentsQueryOptions } from \"../queries\";\nimport { WrappedResponse } from \"@/modules/core/types\";\n\nexport function useRemoveFragment(\n username: string,\n code: string | undefined\n) {\n return useMutation({\n mutationKey: [\"posts\", \"remove-fragment\", username],\n mutationFn: async ({ fragmentId }: { fragmentId: string }) => {\n if (!code) {\n throw new Error(\"[SDK][Posts] Missing access token\");\n }\n const fetchApi = getBoundFetch();\n\n return fetchApi(CONFIG.privateApiHost + \"/private-api/fragments-delete\", {\n method: \"POST\",\n body: JSON.stringify({\n code,\n id: fragmentId,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n },\n onSuccess(_data, variables) {\n const queryClient = getQueryClient();\n\n // Update regular query cache\n queryClient.setQueryData<Fragment[]>(\n getFragmentsQueryOptions(username, code).queryKey,\n (data) => [...(data ?? [])].filter(({ id }) => id !== variables.fragmentId)\n );\n\n // Update infinite query cache - remove fragment from all pages\n queryClient.setQueriesData<InfiniteData<WrappedResponse<Fragment>>>(\n { queryKey: [\"posts\", \"fragments\", \"infinite\", username] },\n (oldData) => {\n if (!oldData) return oldData;\n\n return {\n ...oldData,\n pages: oldData.pages.map((page) => ({\n ...page,\n data: page.data.filter((fragment) => fragment.id !== variables.fragmentId),\n })),\n };\n }\n );\n },\n });\n}\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { ApiNotification, ApiNotificationSetting } from \"@/modules/notifications\";\nimport { Draft, DraftMetadata } from \"@/modules/posts/types/draft\";\nimport { Schedule } from \"@/modules/posts/types/schedule\";\nimport { ApiResponse } from \"./types\";\n\ntype RequestError = Error & { status?: number; data?: unknown };\n\nasync function parseJsonResponse<T>(response: Response): Promise<T> {\n if (!response.ok) {\n let errorData: unknown = undefined;\n try {\n errorData = await response.json();\n } catch {\n errorData = undefined;\n }\n const error = new Error(`Request failed with status ${response.status}`) as RequestError;\n error.status = response.status;\n error.data = errorData;\n throw error;\n }\n\n // Handle empty responses gracefully (e.g., 204 No Content or empty body)\n const text = await response.text();\n if (!text || text.trim() === \"\") {\n return \"\" as T;\n }\n\n try {\n return JSON.parse(text) as T;\n } catch (e) {\n // If JSON parsing fails, return empty string as fallback\n console.warn(\"[SDK] Failed to parse JSON response:\", e, \"Response:\", text);\n return \"\" as T;\n }\n}\n\nexport async function signUp(\n username: string,\n email: string,\n referral: string\n): Promise<ApiResponse<Record<string, unknown>>> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/account-create\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ username, email, referral }),\n });\n\n const data = await parseJsonResponse<Record<string, unknown>>(response);\n return { status: response.status, data };\n}\n\nexport async function subscribeEmail(\n email: string\n): Promise<ApiResponse<Record<string, unknown>>> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/subscribe\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ email }),\n });\n\n const data = await parseJsonResponse<Record<string, unknown>>(response);\n return { status: response.status, data };\n}\n\nexport async function usrActivity(\n code: string | undefined,\n ty: number,\n bl: string | number = \"\",\n tx: string | number = \"\"\n): Promise<void> {\n const params: {\n code: string | undefined;\n ty: number;\n bl?: string | number;\n tx?: string | number;\n } = { code, ty };\n\n if (bl) {\n params.bl = bl;\n }\n if (tx) {\n params.tx = tx;\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/usr-activity\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(params),\n });\n\n await parseJsonResponse(response);\n}\n\nexport async function getNotifications(\n code: string | undefined,\n filter: string | null,\n since: string | null = null,\n user: string | null = null\n): Promise<ApiNotification[]> {\n const data: { code: string | undefined; filter?: string; since?: string; user?: string } = {\n code,\n };\n\n if (filter) {\n data.filter = filter;\n }\n\n if (since) {\n data.since = since;\n }\n\n if (user) {\n data.user = user;\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/notifications\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<ApiNotification[]>(response);\n}\n\nexport async function saveNotificationSetting(\n code: string | undefined,\n username: string,\n system: string,\n allows_notify: number,\n notify_types: number[],\n token: string\n): Promise<ApiNotificationSetting> {\n const data = {\n code,\n username,\n token,\n system,\n allows_notify,\n notify_types,\n };\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/register-device\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<ApiNotificationSetting>(response);\n}\n\nexport async function getNotificationSetting(\n code: string | undefined,\n username: string,\n token: string\n): Promise<ApiNotificationSetting> {\n const data = { code, username, token };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/detail-device\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<ApiNotificationSetting>(response);\n}\n\nexport async function markNotifications(\n code: string | undefined,\n id?: string\n): Promise<Record<string, unknown>> {\n const data: { code: string | undefined; id?: string } = {\n code,\n };\n if (id) {\n data.id = id;\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/notifications/mark\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<Record<string, unknown>>(response);\n}\n\nexport async function addImage(code: string | undefined, url: string): Promise<Record<string, unknown>> {\n const data = { code, url };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/images-add\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<Record<string, unknown>>(response);\n}\n\nexport async function uploadImage(\n file: File,\n token: string,\n signal?: AbortSignal\n): Promise<{ url: string }> {\n const fetchApi = getBoundFetch();\n const formData = new FormData();\n formData.append(\"file\", file);\n\n const response = await fetchApi(`${CONFIG.imageHost}/hs/${token}`, {\n method: \"POST\",\n body: formData,\n signal,\n });\n\n return parseJsonResponse<{ url: string }>(response);\n}\n\nexport async function deleteImage(\n code: string | undefined,\n imageId: string\n): Promise<Record<string, unknown>> {\n const data = { code, id: imageId };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/images-delete\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<Record<string, unknown>>(response);\n}\n\nexport async function addDraft(\n code: string | undefined,\n title: string,\n body: string,\n tags: string,\n meta: DraftMetadata\n): Promise<{ drafts: Draft[] }> {\n const data = { code, title, body, tags, meta };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/drafts-add\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<{ drafts: Draft[] }>(response);\n}\n\nexport async function updateDraft(\n code: string | undefined,\n draftId: string,\n title: string,\n body: string,\n tags: string,\n meta: DraftMetadata\n): Promise<{ drafts: Draft[] }> {\n const data = { code, id: draftId, title, body, tags, meta };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/drafts-update\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<{ drafts: Draft[] }>(response);\n}\n\nexport async function deleteDraft(\n code: string | undefined,\n draftId: string\n): Promise<Record<string, unknown>> {\n const data = { code, id: draftId };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/drafts-delete\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<Record<string, unknown>>(response);\n}\n\nexport async function addSchedule(\n code: string | undefined,\n permlink: string,\n title: string,\n body: string,\n meta: Record<string, unknown>,\n options: Record<string, unknown> | null,\n schedule: string,\n reblog: boolean\n): Promise<Record<string, unknown>> {\n const data: Record<string, unknown> = {\n code,\n permlink,\n title,\n body,\n meta,\n schedule,\n reblog,\n };\n\n if (options) {\n data.options = options;\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/schedules-add\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<Record<string, unknown>>(response);\n}\n\nexport async function deleteSchedule(\n code: string | undefined,\n id: string\n): Promise<Record<string, unknown>> {\n const data = { code, id };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/schedules-delete\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<Record<string, unknown>>(response);\n}\n\nexport async function moveSchedule(code: string | undefined, id: string): Promise<Schedule[]> {\n const data = { code, id };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/schedules-move\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<Schedule[]>(response);\n}\n\nexport async function getPromotedPost(\n code: string | undefined,\n author: string,\n permlink: string\n): Promise<{ author: string; permlink: string } | \"\"> {\n const data = { code, author, permlink };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/promoted-post\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<{ author: string; permlink: string } | \"\">(response);\n}\n\nexport async function onboardEmail(\n username: string,\n email: string,\n friend: string\n): Promise<Record<string, unknown>> {\n const dataBody = {\n username,\n email,\n friend,\n };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/account-create-friend\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(dataBody),\n }\n );\n\n return parseJsonResponse<Record<string, unknown>>(response);\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { getQueryClient, QueryKeys } from \"@/modules/core\";\nimport { addDraft } from \"@/modules/private-api/requests\";\nimport { DraftMetadata } from \"../types\";\n\nexport function useAddDraft(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: () => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"drafts\", \"add\", username],\n mutationFn: async ({\n title,\n body,\n tags,\n meta,\n }: {\n title: string;\n body: string;\n tags: string;\n meta: DraftMetadata;\n }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Posts] – missing auth for addDraft\");\n }\n return addDraft(code, title, body, tags, meta);\n },\n onSuccess: (data) => {\n onSuccess?.();\n const qc = getQueryClient();\n // Set the full drafts list from the response (API returns complete list)\n if (data?.drafts) {\n qc.setQueryData(QueryKeys.posts.drafts(username), data.drafts);\n } else {\n qc.invalidateQueries({ queryKey: QueryKeys.posts.drafts(username) });\n }\n },\n onError,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { getQueryClient, QueryKeys } from \"@/modules/core\";\nimport { updateDraft } from \"@/modules/private-api/requests\";\nimport { DraftMetadata } from \"../types\";\n\nexport function useUpdateDraft(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: () => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"drafts\", \"update\", username],\n mutationFn: async ({\n draftId,\n title,\n body,\n tags,\n meta,\n }: {\n draftId: string;\n title: string;\n body: string;\n tags: string;\n meta: DraftMetadata;\n }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Posts] – missing auth for updateDraft\");\n }\n return updateDraft(code, draftId, title, body, tags, meta);\n },\n onSuccess: () => {\n onSuccess?.();\n getQueryClient().invalidateQueries({\n queryKey: QueryKeys.posts.drafts(username),\n });\n },\n onError,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { getQueryClient } from \"@/modules/core\";\nimport { deleteDraft } from \"@/modules/private-api/requests\";\nimport type { Draft } from \"../types\";\n\nexport function useDeleteDraft(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: () => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"drafts\", \"delete\", username],\n mutationFn: async ({ draftId }: { draftId: string }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Posts] – missing auth for deleteDraft\");\n }\n return deleteDraft(code, draftId);\n },\n onSuccess: (_data, variables) => {\n onSuccess?.();\n const qc = getQueryClient();\n // Optimistic removal from drafts cache\n qc.setQueryData<Draft[]>(\n [\"posts\", \"drafts\", username],\n (prev) => prev?.filter((d) => d._id !== variables.draftId)\n );\n },\n onError,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { getQueryClient, QueryKeys } from \"@/modules/core\";\nimport { addSchedule } from \"@/modules/private-api/requests\";\n\nexport function useAddSchedule(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: () => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"schedules\", \"add\", username],\n mutationFn: async ({\n permlink,\n title,\n body,\n meta,\n options,\n schedule,\n reblog,\n }: {\n permlink: string;\n title: string;\n body: string;\n meta: Record<string, unknown>;\n options: Record<string, unknown> | null;\n schedule: string;\n reblog: boolean;\n }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Posts] – missing auth for addSchedule\");\n }\n return addSchedule(code, permlink, title, body, meta, options, schedule, reblog);\n },\n onSuccess: () => {\n onSuccess?.();\n getQueryClient().invalidateQueries({\n queryKey: QueryKeys.posts.schedules(username),\n });\n },\n onError,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { getQueryClient, QueryKeys } from \"@/modules/core\";\nimport { deleteSchedule } from \"@/modules/private-api/requests\";\n\nexport function useDeleteSchedule(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: () => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"schedules\", \"delete\", username],\n mutationFn: async ({ id }: { id: string }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Posts] – missing auth for deleteSchedule\");\n }\n return deleteSchedule(code, id);\n },\n onSuccess: (data) => {\n onSuccess?.();\n const qc = getQueryClient();\n // Set the full schedules list from the response (API returns complete list)\n if (data) {\n qc.setQueryData(QueryKeys.posts.schedules(username), data);\n } else {\n qc.invalidateQueries({ queryKey: QueryKeys.posts.schedules(username) });\n }\n },\n onError,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { getQueryClient, QueryKeys } from \"@/modules/core\";\nimport { moveSchedule } from \"@/modules/private-api/requests\";\n\nexport function useMoveSchedule(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: () => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"schedules\", \"move\", username],\n mutationFn: async ({ id }: { id: string }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Posts] – missing auth for moveSchedule\");\n }\n return moveSchedule(code, id);\n },\n onSuccess: (data) => {\n onSuccess?.();\n const qc = getQueryClient();\n // Set the full schedules list from the response (API returns complete list)\n if (data) {\n qc.setQueryData(QueryKeys.posts.schedules(username), data);\n } else {\n qc.invalidateQueries({ queryKey: QueryKeys.posts.schedules(username) });\n }\n // Also invalidate drafts since moving a schedule creates a draft\n qc.invalidateQueries({ queryKey: QueryKeys.posts.drafts(username) });\n },\n onError,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { getQueryClient, QueryKeys } from \"@/modules/core\";\nimport { addImage } from \"@/modules/private-api/requests\";\n\n/**\n * Hook to add an image URL to the user's Ecency gallery\n *\n * @param username - Current user's username\n * @param code - Access token for authentication\n * @param onSuccess - Optional callback on successful addition\n * @param onError - Optional callback on error\n *\n * @example\n * const addImageMutation = useAddImage(username, code);\n * addImageMutation.mutate({ url: 'https://...' });\n */\nexport function useAddImage(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: () => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"images\", \"add\", username],\n mutationFn: async ({ url }: { url: string }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Posts] – missing auth for addImage\");\n }\n return addImage(code, url);\n },\n onSuccess: () => {\n onSuccess?.();\n getQueryClient().invalidateQueries({\n queryKey: QueryKeys.posts.images(username),\n });\n },\n onError,\n });\n}\n","import { useMutation, type InfiniteData } from \"@tanstack/react-query\";\nimport { getQueryClient } from \"@/modules/core\";\nimport { deleteImage } from \"@/modules/private-api/requests\";\nimport type { UserImage } from \"../types\";\nimport type { WrappedResponse } from \"@/modules/core/types\";\n\n/**\n * Hook to delete an image from the user's Ecency gallery\n *\n * @param username - Current user's username\n * @param code - Access token for authentication\n * @param onSuccess - Optional callback on successful deletion\n * @param onError - Optional callback on error\n *\n * @example\n * const deleteImageMutation = useDeleteImage(username, code);\n * deleteImageMutation.mutate({ imageId: '123' });\n */\nexport function useDeleteImage(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: () => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"images\", \"delete\", username],\n mutationFn: async ({ imageId }: { imageId: string }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Posts] – missing auth for deleteImage\");\n }\n return deleteImage(code, imageId);\n },\n onSuccess: (_data, variables) => {\n onSuccess?.();\n const qc = getQueryClient();\n const { imageId } = variables;\n\n // Optimistic removal from regular cache\n qc.setQueryData<UserImage[]>(\n [\"posts\", \"images\", username],\n (prev) => prev?.filter((img) => img._id !== imageId)\n );\n\n // Optimistic removal from infinite cache pages\n qc.setQueriesData<InfiniteData<WrappedResponse<UserImage>>>(\n { queryKey: [\"posts\", \"images\", \"infinite\", username] },\n (oldData) => {\n if (!oldData) return oldData;\n return {\n ...oldData,\n pages: oldData.pages.map((page) => ({\n ...page,\n data: page.data.filter((img) => img._id !== imageId),\n })),\n };\n }\n );\n },\n onError,\n });\n}\n","import { useMutation } from \"@tanstack/react-query\";\nimport { uploadImage } from \"@/modules/private-api/requests\";\n\n/**\n * Hook to upload an image file to Ecency image hosting\n *\n * @param onSuccess - Optional callback on successful upload, receives { url: string }\n * @param onError - Optional callback on error\n *\n * Note: This hook uploads to Ecency's image server and requires a signature token.\n * The token should be generated using the user's posting key signature.\n *\n * @example\n * const uploadMutation = useUploadImage(\n * (data) => console.log('Uploaded:', data.url)\n * );\n * uploadMutation.mutate({ file, token });\n */\nexport function useUploadImage(\n onSuccess?: (data: { url: string }) => void,\n onError?: (e: Error) => void\n) {\n return useMutation({\n mutationKey: [\"posts\", \"images\", \"upload\"],\n mutationFn: async ({\n file,\n token,\n signal,\n }: {\n file: File;\n token: string;\n signal?: AbortSignal;\n }) => {\n return uploadImage(file, token, signal);\n },\n onSuccess,\n onError,\n });\n}\n","import { getQueryClient, QueryKeys } from \"@/modules/core\";\nimport type { Entry, EntryVote } from \"../types\";\nimport type { QueryClient } from \"@tanstack/react-query\";\n\nfunction makeEntryPath(author: string, permlink: string) {\n return `/@${author}/${permlink}`;\n}\n\nfunction getEntryFromCache(\n author: string,\n permlink: string,\n qc?: QueryClient\n): Entry | undefined {\n const queryClient = qc ?? getQueryClient();\n return queryClient.getQueryData<Entry>(\n QueryKeys.posts.entry(makeEntryPath(author, permlink))\n );\n}\n\nfunction setEntryInCache(entry: Entry, qc?: QueryClient) {\n const queryClient = qc ?? getQueryClient();\n queryClient.setQueryData<Entry>(\n QueryKeys.posts.entry(makeEntryPath(entry.author, entry.permlink)),\n entry\n );\n}\n\nfunction mutateEntry(\n author: string,\n permlink: string,\n updater: (entry: Entry) => Entry,\n qc?: QueryClient\n): Entry | undefined {\n const queryClient = qc ?? getQueryClient();\n const path = makeEntryPath(author, permlink);\n const existing = queryClient.getQueryData<Entry>(QueryKeys.posts.entry(path));\n if (!existing) return undefined;\n\n const updated = updater(existing);\n queryClient.setQueryData<Entry>(QueryKeys.posts.entry(path), updated);\n return existing;\n}\n\n/**\n * SDK-level entry cache utilities. These operate on SDK cache keys\n * ([\"posts\", \"entry\", \"/@author/permlink\"]).\n *\n * Web layer can bridge these to its own QueryIdentifiers.ENTRY keys\n * during the migration period.\n */\nexport namespace EntriesCacheManagement {\n export function updateVotes(\n author: string,\n permlink: string,\n votes: EntryVote[],\n payout: number,\n qc?: QueryClient\n ) {\n mutateEntry(\n author,\n permlink,\n (entry) => ({\n ...entry,\n active_votes: votes,\n stats: {\n ...(entry.stats || {\n gray: false,\n hide: false,\n flag_weight: 0,\n total_votes: 0,\n }),\n total_votes: votes.length,\n flag_weight: entry.stats?.flag_weight || 0,\n },\n total_votes: votes.length,\n payout,\n pending_payout_value: String(payout),\n }),\n qc\n );\n }\n\n export function updateReblogsCount(\n author: string,\n permlink: string,\n count: number,\n qc?: QueryClient\n ) {\n mutateEntry(\n author,\n permlink,\n (entry) => ({\n ...entry,\n reblogs: count,\n }),\n qc\n );\n }\n\n export function updateRepliesCount(\n author: string,\n permlink: string,\n count: number,\n qc?: QueryClient\n ) {\n mutateEntry(\n author,\n permlink,\n (entry) => ({\n ...entry,\n children: count,\n }),\n qc\n );\n }\n\n export function addReply(\n reply: Entry,\n parentAuthor: string,\n parentPermlink: string,\n qc?: QueryClient\n ) {\n mutateEntry(\n parentAuthor,\n parentPermlink,\n (entry) => ({\n ...entry,\n children: entry.children + 1,\n replies: [reply, ...entry.replies],\n }),\n qc\n );\n }\n\n export function updateEntries(entries: Entry[], qc?: QueryClient) {\n entries.forEach((entry) => setEntryInCache(entry, qc));\n }\n\n export function invalidateEntry(\n author: string,\n permlink: string,\n qc?: QueryClient\n ) {\n const queryClient = qc ?? getQueryClient();\n queryClient.invalidateQueries({\n queryKey: QueryKeys.posts.entry(makeEntryPath(author, permlink)),\n });\n }\n\n export function getEntry(\n author: string,\n permlink: string,\n qc?: QueryClient\n ): Entry | undefined {\n return getEntryFromCache(author, permlink, qc);\n }\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildVoteOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { EntriesCacheManagement } from \"../cache/entries-cache-management\";\n\n/**\n * Payload for voting on a post or comment.\n */\nexport interface VotePayload {\n /** Author of the post/comment to vote on */\n author: string;\n /** Permlink of the post/comment to vote on */\n permlink: string;\n /** Vote weight (-10000 to 10000, where 10000 = 100% upvote, -10000 = 100% downvote) */\n weight: number;\n /** Optional estimated payout change for optimistic UI */\n estimated?: number;\n}\n\n/**\n * React Query mutation hook for voting on posts and comments.\n *\n * This mutation broadcasts a vote operation to the Hive blockchain,\n * supporting upvotes (positive weight) and downvotes (negative weight).\n *\n * @param username - The username of the voter (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Records activity (type 120) if adapter.recordActivity is available\n * - Invalidates post cache to refetch updated vote data\n * - Invalidates voting power cache to show updated VP\n *\n * **Vote Weight:**\n * - 10000 = 100% upvote\n * - 0 = remove vote\n * - -10000 = 100% downvote\n *\n * @example\n * ```typescript\n * const voteMutation = useVote(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Upvote a post\n * voteMutation.mutate({\n * author: 'alice',\n * permlink: 'my-awesome-post',\n * weight: 10000\n * });\n *\n * // Remove vote\n * voteMutation.mutate({\n * author: 'alice',\n * permlink: 'my-awesome-post',\n * weight: 0\n * });\n *\n * // Downvote\n * voteMutation.mutate({\n * author: 'alice',\n * permlink: 'my-awesome-post',\n * weight: -10000\n * });\n * ```\n */\nexport function useVote(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<VotePayload>(\n [\"posts\", \"vote\"],\n username,\n ({ author, permlink, weight }) => [\n buildVoteOp(username!, author, permlink, weight)\n ],\n async (result: any, variables) => {\n // Optimistic vote list + payout update\n const entry = EntriesCacheManagement.getEntry(variables.author, variables.permlink);\n if (entry?.active_votes) {\n const newVotes = [\n ...entry.active_votes.filter((v) => v.voter !== username),\n ...(variables.weight !== 0 ? [{ rshares: variables.weight, voter: username! }] : [])\n ];\n const newPayout = entry.payout + (variables.estimated ?? 0);\n EntriesCacheManagement.updateVotes(\n variables.author,\n variables.permlink,\n newVotes,\n newPayout\n );\n }\n\n // Activity tracking\n if (auth?.adapter?.recordActivity && result?.block_num && result?.id) {\n await auth.adapter.recordActivity(120, result.block_num, result.id);\n }\n\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.posts.entry(`/@${variables.author}/${variables.permlink}`),\n QueryKeys.accounts.full(username)\n ]);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, QueryKeys, getQueryClient } from \"@/modules/core\";\nimport { buildReblogOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { EntriesCacheManagement } from \"../cache/entries-cache-management\";\n\n/**\n * Payload for reblogging a post.\n */\nexport interface ReblogPayload {\n /** Original post author */\n author: string;\n /** Original post permlink */\n permlink: string;\n /** If true, removes the reblog instead of creating it */\n deleteReblog?: boolean;\n}\n\n/**\n * React Query mutation hook for reblogging posts.\n *\n * This mutation broadcasts a custom_json operation to reblog (or un-reblog)\n * a post to the user's blog feed.\n *\n * @param username - The username performing the reblog (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Records activity (type 130) if adapter.recordActivity is available\n * - Invalidates blog feed cache to show the reblogged post\n * - Invalidates post cache to update reblog status\n *\n * **Reblog vs Delete:**\n * - deleteReblog: false (default) - Creates a reblog\n * - deleteReblog: true - Removes an existing reblog\n *\n * @example\n * ```typescript\n * const reblogMutation = useReblog(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Reblog a post\n * reblogMutation.mutate({\n * author: 'alice',\n * permlink: 'my-awesome-post'\n * });\n *\n * // Remove a reblog\n * reblogMutation.mutate({\n * author: 'alice',\n * permlink: 'my-awesome-post',\n * deleteReblog: true\n * });\n * ```\n */\nexport function useReblog(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<ReblogPayload>(\n [\"posts\", \"reblog\"],\n username,\n ({ author, permlink, deleteReblog }) => [\n buildReblogOp(username!, author, permlink, deleteReblog ?? false)\n ],\n async (result: any, variables) => {\n // Optimistic reblog count update\n const entry = EntriesCacheManagement.getEntry(variables.author, variables.permlink);\n if (entry) {\n const newCount = Math.max(0, (entry.reblogs ?? 0) + (variables.deleteReblog ? -1 : 1));\n EntriesCacheManagement.updateReblogsCount(variables.author, variables.permlink, newCount);\n }\n\n // Activity tracking\n if (auth?.adapter?.recordActivity && result?.block_num && result?.id) {\n await auth.adapter.recordActivity(130, result.block_num, result.id);\n }\n\n // Invalidate user's blog feed so reblogged post appears/disappears\n const qc = getQueryClient();\n qc.invalidateQueries({\n predicate: (query) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key[0] === \"posts\" &&\n key[1] === \"account-posts\" &&\n key[2] === username &&\n key[3] === \"blog\"\n );\n }\n });\n\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.posts.entry(`/@${variables.author}/${variables.permlink}`),\n QueryKeys.posts.rebloggedBy(variables.author, variables.permlink),\n ]);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildCommentOp, buildCommentOptionsOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\n/**\n * Beneficiary account and weight.\n */\nexport interface Beneficiary {\n /** Beneficiary account name */\n account: string;\n /** Beneficiary weight (10000 = 100%) */\n weight: number;\n}\n\n/**\n * Payload for creating a comment or post.\n */\nexport interface CommentPayload {\n /** Author of the comment/post */\n author: string;\n /** Permlink of the comment/post */\n permlink: string;\n /** Parent author (empty string for top-level posts) */\n parentAuthor: string;\n /** Parent permlink (category/tag for top-level posts) */\n parentPermlink: string;\n /** Title of the post (empty for comments) */\n title: string;\n /** Content body */\n body: string;\n /** JSON metadata object */\n jsonMetadata: Record<string, any>;\n /** Optional: Root post author (for nested replies, used for discussions cache invalidation) */\n rootAuthor?: string;\n /** Optional: Root post permlink (for nested replies, used for discussions cache invalidation) */\n rootPermlink?: string;\n /** Optional: Comment options (beneficiaries, rewards) */\n options?: {\n /** Maximum accepted payout (e.g., \"1000000.000 HBD\") */\n maxAcceptedPayout?: string;\n /** Percent of payout in HBD (10000 = 100%) */\n percentHbd?: number;\n /** Allow votes on this content */\n allowVotes?: boolean;\n /** Allow curation rewards */\n allowCurationRewards?: boolean;\n /** Beneficiaries array */\n beneficiaries?: Beneficiary[];\n };\n}\n\n/**\n * React Query mutation hook for creating posts and comments.\n *\n * This mutation broadcasts a comment operation (and optionally comment_options)\n * to create a new post or reply on the Hive blockchain.\n *\n * @param username - The username creating the comment/post (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Records activity (type 100 for posts, 110 for comments) if adapter.recordActivity is available\n * - Invalidates feed caches to show the new content\n * - Invalidates parent post cache if this is a reply\n *\n * **Operations:**\n * - Always includes a comment operation\n * - Optionally includes comment_options operation for beneficiaries/rewards\n *\n * **Post vs Comment:**\n * - Post: parentAuthor = \"\", parentPermlink = category/tag\n * - Comment: parentAuthor = parent author, parentPermlink = parent permlink\n *\n * @example\n * ```typescript\n * const commentMutation = useComment(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Create a post\n * commentMutation.mutate({\n * author: 'alice',\n * permlink: 'my-awesome-post-20260209',\n * parentAuthor: '',\n * parentPermlink: 'technology',\n * title: 'My Awesome Post',\n * body: 'This is the post content...',\n * jsonMetadata: {\n * tags: ['technology', 'hive'],\n * app: 'ecency/3.0.0'\n * },\n * options: {\n * beneficiaries: [\n * { account: 'ecency', weight: 500 }\n * ]\n * }\n * });\n *\n * // Create a comment\n * commentMutation.mutate({\n * author: 'bob',\n * permlink: 're-alice-my-awesome-post-20260209',\n * parentAuthor: 'alice',\n * parentPermlink: 'my-awesome-post-20260209',\n * title: '',\n * body: 'Great post!',\n * jsonMetadata: { app: 'ecency/3.0.0' }\n * });\n * ```\n */\nexport function useComment(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<CommentPayload>(\n [\"posts\", \"comment\"],\n username,\n (payload) => {\n const operations: Operation[] = [];\n\n // Main comment operation\n operations.push(\n buildCommentOp(\n payload.author,\n payload.permlink,\n payload.parentAuthor,\n payload.parentPermlink,\n payload.title,\n payload.body,\n payload.jsonMetadata\n )\n );\n\n // Optional comment options operation\n if (payload.options) {\n const {\n maxAcceptedPayout = \"1000000.000 HBD\",\n percentHbd = 10000,\n allowVotes = true,\n allowCurationRewards = true,\n beneficiaries = []\n } = payload.options;\n\n const extensions: any[] = [];\n\n // Add beneficiaries extension if provided\n if (beneficiaries.length > 0) {\n // Sort beneficiaries alphabetically by account name (required by blockchain)\n const sortedBeneficiaries = [...beneficiaries].sort((a, b) =>\n a.account.localeCompare(b.account)\n );\n\n extensions.push([\n 0,\n {\n beneficiaries: sortedBeneficiaries.map(b => ({\n account: b.account,\n weight: b.weight\n }))\n }\n ]);\n }\n\n operations.push(\n buildCommentOptionsOp(\n payload.author,\n payload.permlink,\n maxAcceptedPayout,\n percentHbd,\n allowVotes,\n allowCurationRewards,\n extensions\n )\n );\n }\n\n return operations;\n },\n async (result: any, variables) => {\n // Determine if this is a post or comment\n const isPost = !variables.parentAuthor;\n const activityType = isPost ? 100 : 110;\n\n // Activity tracking (wrapped in try/catch to prevent failures from blocking cache invalidation)\n if (auth?.adapter?.recordActivity && result?.block_num && result?.id) {\n try {\n await auth.adapter.recordActivity(activityType, result.block_num, result.id);\n } catch (err) {\n // Log error but don't rethrow - activity tracking is non-critical\n console.warn('[useComment] Failed to record activity:', err);\n }\n }\n\n // Cache invalidation (always runs regardless of recordActivity outcome)\n if (auth?.adapter?.invalidateQueries) {\n const queriesToInvalidate: any[] = [\n QueryKeys.accounts.full(username),\n QueryKeys.resourceCredits.account(username!)\n ];\n\n // If this is a reply, invalidate parent post and discussions\n if (!isPost) {\n // Invalidate parent entry\n queriesToInvalidate.push(\n QueryKeys.posts.entry(`/@${variables.parentAuthor}/${variables.parentPermlink}`)\n );\n\n // Invalidate discussions (matches all sort orders)\n // Use partial key to match all sort order variants\n // For nested replies, use rootAuthor/rootPermlink to match the root post's discussions\n // Fall back to parentAuthor/parentPermlink for direct replies to posts\n const discussionsAuthor = variables.rootAuthor || variables.parentAuthor;\n const discussionsPermlink = variables.rootPermlink || variables.parentPermlink;\n\n queriesToInvalidate.push({\n predicate: (query: any) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key[0] === \"posts\" &&\n key[1] === \"discussions\" &&\n key[2] === discussionsAuthor &&\n key[3] === discussionsPermlink\n );\n }\n });\n }\n\n await auth.adapter.invalidateQueries(queriesToInvalidate);\n }\n },\n auth\n );\n}\n","import { getQueryClient, QueryKeys } from \"@/modules/core\";\nimport type { Entry } from \"../types\";\nimport type { QueryClient } from \"@tanstack/react-query\";\n\n/**\n * Adds an optimistic entry to all discussions caches for the given root post.\n * Uses predicate matching to find all sort order variants.\n */\nexport function addOptimisticDiscussionEntry(\n entry: Entry,\n rootAuthor: string,\n rootPermlink: string,\n qc?: QueryClient\n) {\n const queryClient = qc ?? getQueryClient();\n const queries = queryClient.getQueriesData<Entry[]>({\n predicate: (query) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key[0] === \"posts\" &&\n key[1] === \"discussions\" &&\n key[2] === rootAuthor &&\n key[3] === rootPermlink\n );\n },\n });\n\n for (const [queryKey, data] of queries) {\n if (data) {\n queryClient.setQueryData<Entry[]>(queryKey, [entry, ...data]);\n }\n }\n}\n\n/**\n * Removes an entry from all discussions caches for the given root post.\n * Returns the previous state for rollback.\n */\nexport function removeOptimisticDiscussionEntry(\n author: string,\n permlink: string,\n rootAuthor: string,\n rootPermlink: string,\n qc?: QueryClient\n): Map<readonly unknown[], Entry[]> {\n const queryClient = qc ?? getQueryClient();\n const snapshots = new Map<readonly unknown[], Entry[]>();\n\n const queries = queryClient.getQueriesData<Entry[]>({\n predicate: (query) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key[0] === \"posts\" &&\n key[1] === \"discussions\" &&\n key[2] === rootAuthor &&\n key[3] === rootPermlink\n );\n },\n });\n\n for (const [queryKey, data] of queries) {\n if (data) {\n snapshots.set(queryKey, data);\n queryClient.setQueryData<Entry[]>(\n queryKey,\n data.filter(\n (e) => e.author !== author || e.permlink !== permlink\n )\n );\n }\n }\n\n return snapshots;\n}\n\n/**\n * Restores discussion cache snapshots (for rollback on error).\n */\nexport function restoreDiscussionSnapshots(\n snapshots: Map<readonly unknown[], Entry[]>,\n qc?: QueryClient\n) {\n const queryClient = qc ?? getQueryClient();\n for (const [queryKey, data] of snapshots) {\n queryClient.setQueryData<Entry[]>(queryKey, data);\n }\n}\n\n/**\n * Updates a specific entry in the SDK entry cache.\n * Returns the previous entry for rollback.\n */\nexport function updateEntryInCache(\n author: string,\n permlink: string,\n updates: Partial<Entry>,\n qc?: QueryClient\n): Entry | undefined {\n const queryClient = qc ?? getQueryClient();\n const path = `/@${author}/${permlink}`;\n const previous = queryClient.getQueryData<Entry>(QueryKeys.posts.entry(path));\n\n if (previous) {\n queryClient.setQueryData<Entry>(QueryKeys.posts.entry(path), {\n ...previous,\n ...updates,\n });\n }\n\n return previous;\n}\n\n/**\n * Restores an entry in cache (for rollback on error).\n */\nexport function restoreEntryInCache(\n author: string,\n permlink: string,\n entry: Entry,\n qc?: QueryClient\n) {\n const queryClient = qc ?? getQueryClient();\n const path = `/@${author}/${permlink}`;\n queryClient.setQueryData<Entry>(QueryKeys.posts.entry(path), entry);\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildDeleteCommentOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport {\n removeOptimisticDiscussionEntry,\n restoreDiscussionSnapshots,\n} from \"../cache/discussions-cache-utils\";\nimport type { Entry } from \"../types\";\n\n/**\n * Payload for deleting a comment or post.\n */\nexport interface DeleteCommentPayload {\n /** Author of the comment/post to delete */\n author: string;\n /** Permlink of the comment/post to delete */\n permlink: string;\n /** Optional: Parent author (for cache invalidation of discussions) */\n parentAuthor?: string;\n /** Optional: Parent permlink (for cache invalidation of discussions) */\n parentPermlink?: string;\n /** Optional: Root post author (for nested replies, used for discussions cache invalidation) */\n rootAuthor?: string;\n /** Optional: Root post permlink (for nested replies, used for discussions cache invalidation) */\n rootPermlink?: string;\n}\n\n/**\n * React Query mutation hook for deleting posts and comments.\n *\n * This mutation broadcasts a delete_comment operation to the Hive blockchain.\n * Includes optimistic removal from discussions cache with rollback on error.\n *\n * @param username - The username deleting the comment/post (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n */\nexport function useDeleteComment(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<DeleteCommentPayload>(\n [\"posts\", \"deleteComment\"],\n username,\n ({ author, permlink }) => [\n buildDeleteCommentOp(author, permlink)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n const queriesToInvalidate: any[] = [\n QueryKeys.accounts.full(username)\n ];\n\n // If this is a reply, invalidate parent post and discussions\n if (variables.parentAuthor && variables.parentPermlink) {\n queriesToInvalidate.push(\n QueryKeys.posts.entry(`/@${variables.parentAuthor}/${variables.parentPermlink}`)\n );\n\n const discussionsAuthor = variables.rootAuthor || variables.parentAuthor;\n const discussionsPermlink = variables.rootPermlink || variables.parentPermlink;\n\n queriesToInvalidate.push({\n predicate: (query: any) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key[0] === \"posts\" &&\n key[1] === \"discussions\" &&\n key[2] === discussionsAuthor &&\n key[3] === discussionsPermlink\n );\n }\n });\n }\n\n await auth.adapter.invalidateQueries(queriesToInvalidate);\n }\n },\n auth,\n 'posting',\n {\n // Optimistic removal: remove from discussions cache before broadcast\n onMutate: async (variables) => {\n const rootAuthor = variables.rootAuthor || variables.parentAuthor;\n const rootPermlink = variables.rootPermlink || variables.parentPermlink;\n\n if (rootAuthor && rootPermlink) {\n const snapshots = removeOptimisticDiscussionEntry(\n variables.author,\n variables.permlink,\n rootAuthor,\n rootPermlink\n );\n return { snapshots };\n }\n return {};\n },\n // Rollback on error: restore discussions cache\n onError: (_error, _variables, context) => {\n const { snapshots } = (context as { snapshots?: Map<readonly unknown[], Entry[]> }) ?? {};\n if (snapshots) {\n restoreDiscussionSnapshots(snapshots);\n }\n },\n }\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildCommentOp, buildCommentOptionsOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\n/**\n * Payload for creating a cross-post.\n */\nexport interface CrossPostPayload {\n /** Author of the cross-post (current user) */\n author: string;\n /** Permlink of the cross-post (usually: original-permlink-community-id) */\n permlink: string;\n /** Community ID to cross-post to (used as parent_permlink) */\n parentPermlink: string;\n /** Title of the cross-post (same as original) */\n title: string;\n /** Body of the cross-post (includes reference to original) */\n body: string;\n /** JSON metadata (must include original_author, original_permlink, tags, app) */\n jsonMetadata: Record<string, any>;\n /** Optional: Comment options (beneficiaries, rewards) */\n options?: {\n /** Maximum accepted payout (e.g., \"0.000 HBD\" for declined payout) */\n maxAcceptedPayout?: string;\n /** Percent of payout in HBD (10000 = 100%) */\n percentHbd?: number;\n /** Allow votes on this content */\n allowVotes?: boolean;\n /** Allow curation rewards */\n allowCurationRewards?: boolean;\n };\n}\n\n/**\n * React Query mutation hook for creating cross-posts.\n *\n * A cross-post is a special type of post that references an original post\n * and publishes it to a different community.\n *\n * @param username - The username creating the cross-post (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates feed/blog caches to show the new cross-post\n *\n * **Operations:**\n * - Always includes a comment operation (with empty parent_author for top-level post)\n * - Optionally includes comment_options operation for rewards/beneficiaries\n *\n * **Metadata Requirements:**\n * The jsonMetadata must include:\n * - `original_author`: Author of the original post\n * - `original_permlink`: Permlink of the original post\n * - `tags`: Tags for the cross-post (typically [\"cross-post\"])\n * - `app`: Application identifier (e.g., \"ecency/3.0.0-vision\")\n *\n * @example\n * ```typescript\n * const crossPostMutation = useCrossPost(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Create a cross-post\n * crossPostMutation.mutate({\n * author: 'alice',\n * permlink: 'great-post-hive-123456',\n * parentPermlink: 'hive-123456', // community ID\n * title: 'Great Post',\n * body: 'This is a cross post of [@bob/great-post](/technology/@bob/great-post) by @alice.<br><br>Check this out!',\n * jsonMetadata: {\n * app: 'ecency/3.0.0-vision',\n * tags: ['cross-post'],\n * original_author: 'bob',\n * original_permlink: 'great-post'\n * },\n * options: {\n * maxAcceptedPayout: '0.000 HBD',\n * allowCurationRewards: false\n * }\n * });\n * ```\n */\nexport function useCrossPost(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<CrossPostPayload>(\n [\"posts\", \"cross-post\"],\n username,\n (payload) => {\n const operations: Operation[] = [];\n\n // Main comment operation (empty parent_author for top-level post)\n operations.push(\n buildCommentOp(\n payload.author,\n payload.permlink,\n \"\", // empty parent_author for top-level post\n payload.parentPermlink, // community ID\n payload.title,\n payload.body,\n payload.jsonMetadata\n )\n );\n\n // Optional comment options operation\n if (payload.options) {\n const {\n maxAcceptedPayout = \"1000000.000 HBD\",\n percentHbd = 10000,\n allowVotes = true,\n allowCurationRewards = true,\n } = payload.options;\n\n operations.push(\n buildCommentOptionsOp(\n payload.author,\n payload.permlink,\n maxAcceptedPayout,\n percentHbd,\n allowVotes,\n allowCurationRewards,\n [] // No beneficiaries for cross-posts\n )\n );\n }\n\n return operations;\n },\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n const queriesToInvalidate: any[] = [\n QueryKeys.accounts.full(username),\n // Invalidate target community feed so cross-post appears\n {\n predicate: (query: any) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key[0] === \"posts\" &&\n key[1] === \"posts-ranked\" &&\n key[3] === variables.parentPermlink\n );\n }\n }\n ];\n await auth.adapter.invalidateQueries(queriesToInvalidate);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildCommentOp, buildCommentOptionsOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\nimport type { Beneficiary } from \"./use-comment\";\n\n/**\n * Payload for updating a reply/comment.\n */\nexport interface UpdateReplyPayload {\n /** Author of the comment/post */\n author: string;\n /** Permlink of the comment/post being updated */\n permlink: string;\n /** Parent author */\n parentAuthor: string;\n /** Parent permlink */\n parentPermlink: string;\n /** Title (empty for comments) */\n title: string;\n /** Updated content body */\n body: string;\n /** Updated JSON metadata object */\n jsonMetadata: Record<string, any>;\n /** Optional: Root post author (for nested replies, used for discussions cache invalidation) */\n rootAuthor?: string;\n /** Optional: Root post permlink (for nested replies, used for discussions cache invalidation) */\n rootPermlink?: string;\n /** Optional: Comment options (beneficiaries, rewards) */\n options?: {\n /** Maximum accepted payout (e.g., \"1000000.000 HBD\") */\n maxAcceptedPayout?: string;\n /** Percent of payout in HBD (10000 = 100%) */\n percentHbd?: number;\n /** Allow votes on this content */\n allowVotes?: boolean;\n /** Allow curation rewards */\n allowCurationRewards?: boolean;\n /** Beneficiaries array */\n beneficiaries?: Beneficiary[];\n };\n}\n\n/**\n * React Query mutation hook for updating existing replies/comments.\n *\n * This mutation broadcasts a comment operation (and optionally comment_options)\n * to update an existing reply/comment on the Hive blockchain.\n *\n * @param username - The username updating the comment (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates parent post cache to reflect the updated comment\n * - Invalidates discussions cache (all sort orders)\n * - Invalidates RC cache (RC decreases after updating)\n *\n * **Operations:**\n * - Always includes a comment operation\n * - Optionally includes comment_options operation for beneficiaries/rewards\n *\n * **Important:**\n * - Updates use the same comment operation as creating new comments\n * - The blockchain identifies this as an update based on matching author/permlink\n * - Only the author can update their own content\n * - Content can only be updated before payout (within 7 days)\n *\n * @example\n * ```typescript\n * const updateReplyMutation = useUpdateReply(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Update a reply\n * updateReplyMutation.mutate({\n * author: 'alice',\n * permlink: 're-bob-my-post-20260209',\n * parentAuthor: 'bob',\n * parentPermlink: 'my-post-20260209',\n * title: '',\n * body: 'Updated comment content!',\n * jsonMetadata: {\n * tags: ['comment'],\n * app: 'ecency/3.0.0-vision'\n * },\n * rootAuthor: 'bob',\n * rootPermlink: 'my-post-20260209'\n * });\n * ```\n */\nexport function useUpdateReply(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<UpdateReplyPayload>(\n [\"posts\", \"update-reply\"],\n username,\n (payload) => {\n const operations: Operation[] = [];\n\n // Main comment operation (same operation for create and update)\n operations.push(\n buildCommentOp(\n payload.author,\n payload.permlink,\n payload.parentAuthor,\n payload.parentPermlink,\n payload.title,\n payload.body,\n payload.jsonMetadata\n )\n );\n\n // Optional comment options operation\n if (payload.options) {\n const {\n maxAcceptedPayout = \"1000000.000 HBD\",\n percentHbd = 10000,\n allowVotes = true,\n allowCurationRewards = true,\n beneficiaries = []\n } = payload.options;\n\n const extensions: any[] = [];\n\n // Add beneficiaries extension if provided\n if (beneficiaries.length > 0) {\n // Sort beneficiaries alphabetically by account name (required by blockchain)\n const sortedBeneficiaries = [...beneficiaries].sort((a, b) =>\n a.account.localeCompare(b.account)\n );\n\n extensions.push([\n 0,\n {\n beneficiaries: sortedBeneficiaries.map(b => ({\n account: b.account,\n weight: b.weight\n }))\n }\n ]);\n }\n\n operations.push(\n buildCommentOptionsOp(\n payload.author,\n payload.permlink,\n maxAcceptedPayout,\n percentHbd,\n allowVotes,\n allowCurationRewards,\n extensions\n )\n );\n }\n\n return operations;\n },\n async (_result: any, variables) => {\n // Activity tracking (comment update = type 110)\n if (auth?.adapter?.recordActivity && _result?.block_num && _result?.id) {\n try {\n await auth.adapter.recordActivity(110, _result.block_num, _result.id);\n } catch (err) {\n console.warn('[useUpdateReply] Failed to record activity:', err);\n }\n }\n\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n const queriesToInvalidate: any[] = [\n QueryKeys.resourceCredits.account(username!)\n ];\n\n // Invalidate parent entry\n queriesToInvalidate.push(\n QueryKeys.posts.entry(`/@${variables.parentAuthor}/${variables.parentPermlink}`)\n );\n\n // Invalidate discussions (matches all sort orders)\n // Use partial key to match all sort order variants\n // For nested replies, use rootAuthor/rootPermlink to match the root post's discussions\n // Fall back to parentAuthor/parentPermlink for direct replies to posts\n const discussionsAuthor = variables.rootAuthor || variables.parentAuthor;\n const discussionsPermlink = variables.rootPermlink || variables.parentPermlink;\n\n queriesToInvalidate.push({\n predicate: (query: any) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key[0] === \"posts\" &&\n key[1] === \"discussions\" &&\n key[2] === discussionsAuthor &&\n key[3] === discussionsPermlink\n );\n }\n });\n\n await auth.adapter.invalidateQueries(queriesToInvalidate);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildPromoteOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for promoting a post using Ecency Points.\n */\nexport interface PromotePayload {\n /** Post author */\n author: string;\n /** Post permlink */\n permlink: string;\n /** Promotion duration in days */\n duration: number;\n}\n\n/**\n * React Query mutation hook for promoting posts.\n *\n * This mutation broadcasts a custom_json operation to promote a post\n * using Ecency Points. The post will appear in promoted feeds for the\n * specified duration.\n *\n * @param username - The username promoting the post (required for broadcast, deducts points from this user)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates promoted posts cache to show newly promoted content\n * - Invalidates user points balance\n * - Invalidates post cache to update promotion status\n *\n * **Operation Details:**\n * - Uses custom_json operation with id \"ecency_promote\"\n * - JSON: {\"user\": \"username\", \"author\": \"postauthor\", \"permlink\": \"postpermlink\", \"duration\": 7}\n * - Authority: Active key (required for point spending)\n *\n * **Cost:**\n * - Costs Ecency Points based on duration\n * - User must have sufficient points balance\n *\n * @example\n * ```typescript\n * const promoteMutation = usePromote(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Promote a post for 7 days\n * promoteMutation.mutate({\n * author: 'alice',\n * permlink: 'my-great-post',\n * duration: 7\n * });\n * ```\n */\nexport function usePromote(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<PromotePayload>(\n [\"ecency\", \"promote\"],\n username,\n ({ author, permlink, duration }) => [\n buildPromoteOp(username!, author, permlink, duration)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n // Invalidate promoted posts feed\n [\"posts\", \"promoted\"],\n // Invalidate user points balance\n [\"points\", username],\n // Invalidate specific post cache to update promotion status\n QueryKeys.posts.entry(`/@${variables.author}/${variables.permlink}`),\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { Entry } from \"../types\";\n\nexport type ValidatePostCreatingOptions = {\n delays?: number[];\n};\n\nconst DEFAULT_VALIDATE_POST_DELAYS = [3000, 3000, 3000];\n\nconst delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nasync function getContent(author: string, permlink: string): Promise<Entry> {\n return CONFIG.hiveClient.call(\"condenser_api\", \"get_content\", [\n author,\n permlink,\n ]) as Promise<Entry>;\n}\n\nexport async function validatePostCreating(\n author: string,\n permlink: string,\n attempts = 0,\n options?: ValidatePostCreatingOptions\n) {\n const delays = options?.delays ?? DEFAULT_VALIDATE_POST_DELAYS;\n\n let response: Entry | undefined;\n try {\n response = await getContent(author, permlink);\n } catch (e) {\n response = undefined;\n }\n\n if (response || attempts >= delays.length) {\n return;\n }\n\n const waitMs = delays[attempts];\n if (waitMs > 0) {\n await delay(waitMs);\n }\n\n return validatePostCreating(author, permlink, attempts + 1, options);\n}\n","export * from \"./use-record-activity\";\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { useMutation } from \"@tanstack/react-query\";\n\ntype ActivityType =\n // Editor related\n | \"post-created\"\n | \"post-updated\"\n | \"post-scheduled\"\n | \"draft-created\"\n | \"video-published\"\n\n // Legacy editor related\n | \"legacy-post-created\"\n | \"legacy-post-updated\"\n | \"legacy-post-scheduled\"\n | \"legacy-draft-created\"\n | \"legacy-video-published\"\n\n // Perks related\n | \"perks-points-by-qr\"\n | \"perks-account-boost\"\n | \"perks-promote\"\n | \"perks-boost-plus\"\n | \"points-claimed\"\n | \"spin-rolled\"\n\n // Signup related\n | \"signed-up-with-wallets\"\n | \"signed-up-with-email\";\n\nexport interface RecordActivityOptions {\n url?: string;\n domain?: string;\n}\n\n/**\n * Get current location info safely (works in browser and Node.js)\n * Returns empty strings in non-browser environments\n */\nfunction getLocationInfo(): { url: string; domain: string } {\n if (typeof window !== \"undefined\" && window.location) {\n return {\n url: window.location.href,\n domain: window.location.host,\n };\n }\n return { url: \"\", domain: \"\" };\n}\n\nexport function useRecordActivity(\n username: string | undefined,\n activityType: ActivityType,\n options?: RecordActivityOptions\n) {\n return useMutation({\n mutationKey: [\"analytics\", activityType],\n mutationFn: async () => {\n if (!activityType) {\n throw new Error(\"[SDK][Analytics] – no activity type provided\");\n }\n const fetchApi = getBoundFetch();\n\n // Use provided values or auto-detect from browser environment\n // Falls back to empty strings in non-browser environments (Node.js, React Native, etc.)\n const locationInfo = getLocationInfo();\n const url = options?.url ?? locationInfo.url;\n const domain = options?.domain ?? locationInfo.domain;\n\n await fetchApi(CONFIG.plausibleHost + \"/api/event\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n name: activityType,\n url,\n domain,\n props: {\n username,\n },\n }),\n });\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { LeaderBoardDuration, LeaderBoardItem } from \"../types\";\n\nexport function getDiscoverLeaderboardQueryOptions(duration: LeaderBoardDuration) {\n return queryOptions({\n queryKey: [\"analytics\", \"discover-leaderboard\", duration],\n queryFn: async ({ signal }) => {\n const response = await fetch(\n CONFIG.privateApiHost + `/private-api/leaderboard/${duration}`,\n { signal }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch leaderboard: ${response.status}`);\n }\n\n return response.json() as Promise<LeaderBoardItem[]>;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { CurationDuration, CurationItem } from \"../types\";\n\nexport function getDiscoverCurationQueryOptions(duration: CurationDuration) {\n return queryOptions({\n queryKey: [\"analytics\", \"discover-curation\", duration],\n queryFn: async ({ signal }) => {\n const response = await fetch(\n CONFIG.privateApiHost + `/private-api/curation/${duration}`,\n { signal }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch curation data: ${response.status}`);\n }\n\n const data = (await response.json()) as CurationItem[];\n\n // Fetch account data for efficiency calculation\n const accounts = data.map((item) => item.account);\n const accountsResponse = await CONFIG.hiveClient.database.getAccounts(accounts);\n\n // Calculate efficiency for each curator\n for (let index = 0; index < accountsResponse.length; index++) {\n const element = accountsResponse[index];\n const curator = data[index];\n\n // Convert Asset to string if needed\n const vestingShares = typeof element.vesting_shares === 'string'\n ? element.vesting_shares\n : element.vesting_shares.toString();\n const receivedVestingShares = typeof element.received_vesting_shares === 'string'\n ? element.received_vesting_shares\n : element.received_vesting_shares.toString();\n const delegatedVestingShares = typeof element.delegated_vesting_shares === 'string'\n ? element.delegated_vesting_shares\n : element.delegated_vesting_shares.toString();\n const vestingWithdrawRate = typeof element.vesting_withdraw_rate === 'string'\n ? element.vesting_withdraw_rate\n : element.vesting_withdraw_rate.toString();\n\n const effectiveVest: number =\n parseFloat(vestingShares) +\n parseFloat(receivedVestingShares) -\n parseFloat(delegatedVestingShares) -\n parseFloat(vestingWithdrawRate);\n curator.efficiency = curator.vests / effectiveVest;\n }\n\n // Sort by efficiency descending\n data.sort((a: CurationItem, b: CurationItem) => b.efficiency - a.efficiency);\n\n return data;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { PageStatsResponse } from \"../types\";\n\n/**\n * Get page statistics from the private analytics API\n *\n * @param url - URL to get stats for\n * @param dimensions - Dimensions to query (default: [])\n * @param metrics - Metrics to query (default: [\"visitors\", \"pageviews\", \"visit_duration\"])\n * @param dateRange - Date range for the query (e.g. \"day\", \"7d\", \"30d\", \"all\")\n */\nexport function getPageStatsQueryOptions(\n url: string,\n dimensions: string[] = [],\n metrics: string[] = [\"visitors\", \"pageviews\", \"visit_duration\"],\n dateRange?: string\n) {\n // Sort arrays to ensure stable query keys regardless of input order\n const sortedDimensions = [...dimensions].sort();\n const sortedMetrics = [...metrics].sort();\n\n return queryOptions({\n queryKey: [\"analytics\", \"page-stats\", url, sortedDimensions, sortedMetrics, dateRange],\n queryFn: async ({ signal }) => {\n const response = await fetch(CONFIG.privateApiHost + \"/api/stats\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n metrics,\n url: encodeURIComponent(url),\n dimensions,\n date_range: dateRange,\n }),\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch page stats: ${response.status}`);\n }\n\n return response.json() as Promise<PageStatsResponse>;\n },\n enabled: !!url,\n // Analytics data should always be fresh - users expect current stats when changing range\n staleTime: 0,\n });\n}\n","export * from \"./get-account-token-query-options\";\nexport * from \"./get-account-videos-query-options\";\n","export * from \"./get-decode-memo-query-options\";\n","import { queryOptions } from \"@tanstack/react-query\";\nimport hs from \"hivesigner\";\n\nexport function getDecodeMemoQueryOptions(\n username: string,\n memo: string,\n accessToken: string | undefined\n) {\n return queryOptions({\n queryKey: [\"integrations\", \"hivesigner\", \"decode-memo\", username],\n queryFn: async () => {\n if (accessToken) {\n const hsClient = new hs.Client({\n accessToken,\n });\n return hsClient.decode(memo);\n }\n },\n });\n}\n","import * as queries from \"./queries\";\n\nconst HiveSignerIntegration = {\n queries,\n};\n\nexport { HiveSignerIntegration };\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { HiveSignerIntegration } from \"../../hivesigner\";\nimport { getBoundFetch, getQueryClient } from \"@/modules/core\";\n\nexport function getAccountTokenQueryOptions(\n username: string | undefined,\n accessToken: string | undefined\n) {\n return queryOptions({\n queryKey: [\"integrations\", \"3speak\", \"authenticate\", username],\n enabled: !!username && !!accessToken,\n queryFn: async () => {\n if (!username || !accessToken) {\n throw new Error(\"[SDK][Integrations][3Speak] – anon user\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `https://studio.3speak.tv/mobile/login?username=${username}&hivesigner=true`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n const memoQueryOptions =\n HiveSignerIntegration.queries.getDecodeMemoQueryOptions(\n username,\n (await response.json()).memo,\n accessToken\n );\n await getQueryClient().prefetchQuery(memoQueryOptions);\n const { memoDecoded } = getQueryClient().getQueryData(\n memoQueryOptions.queryKey\n );\n\n return memoDecoded.replace(\"#\", \"\");\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { ThreeSpeakVideo } from \"../types\";\nimport { getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { getAccountTokenQueryOptions } from \"./get-account-token-query-options\";\n\nexport function getAccountVideosQueryOptions(\n username: string | undefined,\n accessToken: string | undefined\n) {\n return queryOptions({\n queryKey: [\"integrations\", \"3speak\", \"videos\", username],\n enabled: !!username && !!accessToken,\n queryFn: async () => {\n if (!username || !accessToken) {\n throw new Error(\"[SDK][Integrations][3Speak] – anon user\");\n }\n\n const tokenQueryOptions = getAccountTokenQueryOptions(\n username,\n accessToken\n );\n\n await getQueryClient().prefetchQuery(tokenQueryOptions);\n const token = getQueryClient().getQueryData(tokenQueryOptions.queryKey);\n if (!token) {\n throw new Error(\"[SDK][Integrations][3Speak] – missing account token\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `https://studio.3speak.tv/mobile/api/my-videos`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n }\n );\n return (await response.json()) as ThreeSpeakVideo[];\n },\n });\n}\n","export * from \"./types\";\nimport * as queries from \"./queries\";\n\nconst ThreeSpeakIntegration = {\n queries,\n};\n\nexport { ThreeSpeakIntegration };\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getBoundFetch } from \"@/modules/core\";\n\nexport function getHivePoshLinksQueryOptions(username: string | undefined) {\n return queryOptions({\n queryKey: [\"integrations\", \"hiveposh\", \"links\", username],\n retry: false, // Don't retry on user not found errors\n queryFn: async () => {\n try {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `https://hiveposh.com/api/v0/linked-accounts/${username}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n // Handle 400 error when user is not registered on HivePosh\n if (response.status === 400) {\n const errorData = await response.json().catch(() => ({}));\n // Silently return null for \"User Not Connected\" errors\n if (errorData?.message === \"User Not Connected\") {\n return null;\n }\n }\n\n if (!response.ok) {\n return null;\n }\n\n const data = await response.json();\n\n return {\n twitter: {\n username: data.twitter_username,\n profile: data.twitter_profile,\n },\n reddit: {\n username: data.reddit_username,\n profile: data.reddit_profile,\n },\n } satisfies Record<\n \"twitter\" | \"reddit\",\n { username: string; profile: string }\n >;\n } catch (err) {\n // Silently handle all HivePosh API errors\n return null;\n }\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, getBoundFetch } from \"@/modules/core\";\n\nexport interface StatsResponse {\n results: [\n {\n metrics: number[];\n dimensions: string[];\n },\n ];\n query: {\n site_id: string;\n metrics: string[];\n date_range: string[];\n filters: string[];\n };\n}\ninterface UseStatsQueryOptions {\n url: string;\n dimensions?: string[];\n metrics?: string[];\n enabled?: boolean;\n}\n\nexport function getStatsQueryOptions({\n url,\n dimensions = [],\n metrics = [\"visitors\", \"pageviews\", \"visit_duration\"],\n enabled = true,\n}: UseStatsQueryOptions) {\n return queryOptions({\n queryKey: [\"integrations\", \"plausible\", url, dimensions, metrics],\n queryFn: async () => {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(`${CONFIG.privateApiHost}/api/stats`, {\n method: \"POST\",\n body: JSON.stringify({\n metrics,\n url: encodeURIComponent(url),\n dimensions,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n\n return (await response.json()) as StatsResponse;\n },\n enabled: !!url && enabled,\n });\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport function getRcStatsQueryOptions() {\n return queryOptions({\n queryKey: [\"resource-credits\", \"stats\"],\n queryFn: async () => {\n const response = await CONFIG.hiveClient.call(\n \"rc_api\",\n \"get_rc_stats\",\n {}\n );\n return response.rc_stats;\n },\n });\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { RCAPI } from \"@hiveio/dhive\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport function getAccountRcQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"resource-credits\", \"account\", username],\n queryFn: async () => {\n const rcClient = new RCAPI(CONFIG.hiveClient);\n return rcClient.findRCAccounts([username]);\n },\n enabled: !!username,\n });\n}\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { GetGameStatus } from \"../types\";\n\nexport function getGameStatusCheckQueryOptions(\n username: string | undefined,\n code: string | undefined,\n gameType: \"spin\"\n) {\n return queryOptions({\n queryKey: [\"games\", \"status-check\", gameType, username],\n enabled: !!username && !!code,\n queryFn: async () => {\n if (!username || !code) {\n throw new Error(\"[SDK][Games] – missing auth\");\n }\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/get-game\",\n {\n method: \"POST\",\n body: JSON.stringify({\n game_type: gameType,\n code,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n return (await response.json()) as GetGameStatus;\n },\n });\n}\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { GameClaim } from \"../types\";\nimport { useRecordActivity } from \"@/modules/analytics/mutations\";\n\nexport function useGameClaim(\n username: string | undefined,\n code: string | undefined,\n gameType: \"spin\",\n key: string\n) {\n const { mutateAsync: recordActivity } = useRecordActivity(\n username,\n \"spin-rolled\"\n );\n\n return useMutation({\n mutationKey: [\"games\", \"post\", gameType, username],\n mutationFn: async () => {\n if (!username || !code) {\n throw new Error(\"[SDK][Games] – missing auth\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/post-game\",\n {\n method: \"POST\",\n body: JSON.stringify({\n game_type: gameType,\n code,\n key,\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n return (await response.json()) as GameClaim;\n },\n onSuccess() {\n recordActivity();\n },\n });\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildSubscribeOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for subscribing to a community.\n */\nexport interface SubscribeCommunityPayload {\n /** Community name (e.g., \"hive-123456\") */\n community: string;\n}\n\n/**\n * React Query mutation hook for subscribing to a community.\n *\n * This mutation broadcasts a subscribe operation to the Hive blockchain,\n * adding the community to the user's subscription list.\n *\n * @param username - The username subscribing (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates subscriptions cache to show updated subscription list\n * - Invalidates community cache to refetch updated subscriber count\n *\n * **Operation Details:**\n * - Uses custom_json operation with id \"community\"\n * - Action: [\"subscribe\", {\"community\": \"hive-123456\"}]\n * - Authority: Posting key\n *\n * @example\n * ```typescript\n * const subscribeMutation = useSubscribeCommunity(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Subscribe to a community\n * subscribeMutation.mutate({\n * community: 'hive-123456'\n * });\n * ```\n */\nexport function useSubscribeCommunity(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<SubscribeCommunityPayload>(\n [\"communities\", \"subscribe\"],\n username,\n ({ community }) => [\n buildSubscribeOp(username!, community)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.subscriptions(username!),\n [...QueryKeys.communities.singlePrefix(variables.community)],\n QueryKeys.communities.context(username!, variables.community)\n ]);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildUnsubscribeOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for unsubscribing from a community.\n */\nexport interface UnsubscribeCommunityPayload {\n /** Community name (e.g., \"hive-123456\") */\n community: string;\n}\n\n/**\n * React Query mutation hook for unsubscribing from a community.\n *\n * This mutation broadcasts an unsubscribe operation to the Hive blockchain,\n * removing the community from the user's subscription list.\n *\n * @param username - The username unsubscribing (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates subscriptions cache to show updated subscription list\n * - Invalidates community cache to refetch updated subscriber count\n *\n * **Operation Details:**\n * - Uses custom_json operation with id \"community\"\n * - Action: [\"unsubscribe\", {\"community\": \"hive-123456\"}]\n * - Authority: Posting key\n *\n * @example\n * ```typescript\n * const unsubscribeMutation = useUnsubscribeCommunity(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Unsubscribe from a community\n * unsubscribeMutation.mutate({\n * community: 'hive-123456'\n * });\n * ```\n */\nexport function useUnsubscribeCommunity(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<UnsubscribeCommunityPayload>(\n [\"communities\", \"unsubscribe\"],\n username,\n ({ community }) => [\n buildUnsubscribeOp(username!, community)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.subscriptions(username!),\n [...QueryKeys.communities.singlePrefix(variables.community)],\n QueryKeys.communities.context(username!, variables.community)\n ]);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildMutePostOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for muting/unmuting a post in a community.\n */\nexport interface MutePostPayload {\n /** Community name (e.g., \"hive-123456\") */\n community: string;\n /** Post author */\n author: string;\n /** Post permlink */\n permlink: string;\n /** Mute reason/notes (required even for unmute) */\n notes: string;\n /** True to mute, false to unmute */\n mute: boolean;\n}\n\n/**\n * React Query mutation hook for muting/unmuting posts in a community.\n *\n * This mutation broadcasts a custom_json operation to mute (or unmute)\n * a post within a community. Only community moderators/admins can mute posts.\n *\n * @param username - The username performing the mute (required for broadcast, must have permission)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates community posts cache to hide muted content\n * - Invalidates post cache to update mute status\n * - Invalidates feed cache to remove muted posts from feeds\n *\n * **Operation Details:**\n * - Uses custom_json operation with id \"community\"\n * - Action: [\"mutePost\", {\"community\": \"hive-123456\", \"account\": \"author\", \"permlink\": \"post\", \"notes\": \"reason\"}]\n * - Action (unmute): [\"unmutePost\", {\"community\": \"hive-123456\", \"account\": \"author\", \"permlink\": \"post\", \"notes\": \"reason\"}]\n * - Authority: Posting key\n *\n * **Mute vs Unmute:**\n * - mute: true - Mutes the post (hides from community feed)\n * - mute: false - Unmutes the post (restores to community feed)\n *\n * **Permission:**\n * - Only community moderators and admins can mute/unmute posts\n * - Attempting to mute without permission will fail with an error\n *\n * @example\n * ```typescript\n * const mutePostMutation = useMutePost(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Mute a post\n * mutePostMutation.mutate({\n * community: 'hive-123456',\n * author: 'alice',\n * permlink: 'my-post',\n * notes: 'Violates community guidelines',\n * mute: true\n * });\n *\n * // Unmute a post\n * mutePostMutation.mutate({\n * community: 'hive-123456',\n * author: 'alice',\n * permlink: 'my-post',\n * notes: 'Resolved after editing',\n * mute: false\n * });\n * ```\n */\nexport function useMutePost(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<MutePostPayload>(\n [\"communities\", \"mutePost\"],\n username,\n ({ community, author, permlink, notes, mute }) => [\n buildMutePostOp(username!, community, author, permlink, notes, mute)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n const queriesToInvalidate: any[] = [\n // Invalidate specific post cache to update mute status\n QueryKeys.posts.entry(`/@${variables.author}/${variables.permlink}`),\n // Invalidate community data\n [\"community\", \"single\", variables.community],\n // Invalidate community feed/posts (matches all sort orders, limits, observers)\n {\n predicate: (query: any) => {\n const key = query.queryKey;\n return (\n Array.isArray(key) &&\n key[0] === \"posts\" &&\n key[1] === \"posts-ranked\" &&\n key[3] === variables.community\n );\n }\n }\n ];\n await auth.adapter.invalidateQueries(queriesToInvalidate);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, getQueryClient, QueryKeys } from \"@/modules/core\";\nimport { buildSetRoleOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Community, CommunityTeam } from \"../types\";\n\n/**\n * Payload for setting a user's role in a community.\n */\nexport interface SetCommunityRolePayload {\n /** Account to set role for */\n account: string;\n /** Role name (e.g., \"admin\", \"mod\", \"member\", \"guest\") */\n role: string;\n}\n\n/**\n * React Query mutation hook for setting a user's role in a community.\n *\n * This mutation broadcasts a setRole operation to the Hive blockchain,\n * updating the role of a community member. Only users with appropriate\n * permissions (community owner/admin) can set roles.\n *\n * @param community - Community name (e.g., \"hive-123456\")\n * @param username - The username setting the role (required for broadcast, must have permission)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates community cache to refetch updated team member list\n *\n * **Operation Details:**\n * - Uses custom_json operation with id \"community\"\n * - Action: [\"setRole\", {\"community\": \"hive-123456\", \"account\": \"user\", \"role\": \"mod\"}]\n * - Authority: Posting key\n *\n * **Role Types:**\n * - \"owner\" - Community owner (full permissions)\n * - \"admin\" - Administrator (can manage settings and team)\n * - \"mod\" - Moderator (can mute posts/users)\n * - \"member\" - Regular member (no special permissions)\n * - \"guest\" - Remove user from team (empty string also works)\n *\n * @example\n * ```typescript\n * const setRoleMutation = useSetCommunityRole('hive-123456', username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Set a user as moderator\n * setRoleMutation.mutate({\n * account: 'alice',\n * role: 'mod'\n * });\n *\n * // Remove a user from the team\n * setRoleMutation.mutate({\n * account: 'bob',\n * role: 'guest'\n * });\n * ```\n */\nexport function useSetCommunityRole(\n community: string,\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<SetCommunityRolePayload>(\n [\"communities\", \"set-role\", community],\n username,\n ({ account, role }) => [\n buildSetRoleOp(username!, community, account, role)\n ],\n async (_result: any, variables) => {\n // Optimistic team update in community cache\n // Query key is [\"community\",\"single\",name,observer] — observer varies, so use predicate\n const qc = getQueryClient();\n qc.setQueriesData<Community>(\n { queryKey: QueryKeys.communities.singlePrefix(community) },\n (prev) => {\n if (!prev) return prev;\n const team: CommunityTeam = [...(prev.team ?? [])];\n const idx = team.findIndex(([name]) => name === variables.account);\n if (idx >= 0) {\n team[idx] = [team[idx][0], variables.role, team[idx][2] ?? \"\"];\n } else {\n team.push([variables.account, variables.role, \"\"]);\n }\n return { ...prev, team };\n }\n );\n\n // Cache invalidation — prefix-match all community single queries + context for affected user\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n [...QueryKeys.communities.singlePrefix(community)],\n QueryKeys.communities.context(variables.account, community)\n ]);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, getQueryClient, QueryKeys } from \"@/modules/core\";\nimport { buildUpdateCommunityOp, type CommunityProps } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Community } from \"../types\";\n\n/**\n * Payload for updating community properties.\n * Matches the CommunityProps interface from builders.\n */\nexport type UpdateCommunityPayload = CommunityProps;\n\n/**\n * React Query mutation hook for updating community properties.\n *\n * This mutation broadcasts an updateProps operation to the Hive blockchain,\n * modifying the community's metadata and settings. Only community admins\n * can update community properties.\n *\n * @param community - Community name (e.g., \"hive-123456\")\n * @param username - The username updating the community (required for broadcast, must be admin)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates community cache to refetch updated properties\n *\n * **Operation Details:**\n * - Uses custom_json operation with id \"community\"\n * - Action: [\"updateProps\", {\"community\": \"hive-123456\", \"props\": {...}}]\n * - Authority: Posting key\n *\n * **Properties:**\n * - title - Community display title\n * - about - Short description/tagline\n * - lang - Primary language code (e.g., \"en\")\n * - description - Full community description (markdown supported)\n * - flag_text - Custom text shown when flagging posts\n * - is_nsfw - Whether community contains NSFW content\n *\n * @example\n * ```typescript\n * const updateMutation = useUpdateCommunity('hive-123456', username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Update community properties\n * updateMutation.mutate({\n * title: 'My Awesome Community',\n * about: 'A place for awesome people',\n * lang: 'en',\n * description: '# Welcome\\nThis is our community description',\n * flag_text: 'Please explain why this content violates our rules',\n * is_nsfw: false\n * });\n * ```\n */\nexport function useUpdateCommunity(\n community: string,\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<UpdateCommunityPayload>(\n [\"communities\", \"update\", community],\n username,\n (props) => [\n buildUpdateCommunityOp(username!, community, props)\n ],\n async (_result: any, variables) => {\n // Optimistic property merge in community cache\n // Query key is [\"community\",\"single\",name,observer] — observer varies, so use predicate\n const qc = getQueryClient();\n qc.setQueriesData<Community>(\n { queryKey: QueryKeys.communities.singlePrefix(community) },\n (prev) => {\n if (!prev) return prev;\n return { ...prev, ...(variables as unknown as Partial<Community>) };\n }\n );\n\n // Cache invalidation — prefix-match all community single queries\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n [...QueryKeys.communities.singlePrefix(community)]\n ]);\n }\n },\n auth\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildCommunityRegistrationOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for community rewards registration.\n */\nexport interface CommunityRewardsRegisterPayload {\n /** Community account name (usually the community creator's account) */\n name: string;\n}\n\n/**\n * React Query mutation hook for registering to receive community rewards.\n *\n * This mutation broadcasts a custom_json operation to register a community\n * account to receive Ecency Points rewards for community activity.\n *\n * @param username - The username registering for community rewards (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates community cache to update registration status\n * - Invalidates points balance to reflect potential initial rewards\n *\n * **Operation Details:**\n * - Uses custom_json operation with id \"ecency_registration\"\n * - JSON: {\"name\": \"communityname\"}\n * - Authority: Active key (required for registration)\n *\n * **Purpose:**\n * - Enables communities to receive Ecency Points for activity\n * - One-time registration per community\n * - Can only be done by the community owner/creator\n *\n * @example\n * ```typescript\n * const registerMutation = useRegisterCommunityRewards(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Register community for rewards\n * registerMutation.mutate({\n * name: 'hive-123456'\n * });\n * ```\n */\nexport function useRegisterCommunityRewards(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<CommunityRewardsRegisterPayload>(\n [\"communities\", \"registerRewards\"],\n username,\n ({ name }) => [\n buildCommunityRegistrationOp(name)\n ],\n async (_result: any, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n // Invalidate community cache to update registration status\n [...QueryKeys.communities.singlePrefix(variables.name)],\n // Invalidate points balance\n [\"points\", username],\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildPinPostOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface PinPostPayload {\n community: string;\n account: string;\n permlink: string;\n pin: boolean;\n}\n\nexport function usePinPost(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<PinPostPayload>(\n [\"communities\", \"pin-post\"],\n username,\n ({ community, account, permlink, pin }) => [\n buildPinPostOp(username!, community, account, permlink, pin)\n ],\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.posts.entry(`/@${variables.account}/${variables.permlink}`),\n [...QueryKeys.communities.singlePrefix(variables.community)],\n ]);\n }\n },\n auth\n );\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { Communities } from \"../types\";\n\nexport function getCommunitiesQueryOptions(\n sort: string,\n query?: string,\n limit = 100,\n observer: string | undefined = undefined,\n enabled = true\n) {\n return queryOptions({\n queryKey: QueryKeys.communities.list(sort, query ?? \"\", limit),\n enabled,\n queryFn: async () => {\n const response = await CONFIG.hiveClient.call(\n \"bridge\",\n \"list_communities\",\n {\n last: \"\",\n limit,\n sort: sort === \"hot\" ? \"rank\" : sort,\n query: query ? query : null,\n observer,\n }\n );\n return (\n response\n ? sort === \"hot\"\n ? response.sort(() => Math.random() - 0.5)\n : response\n : []\n ) as Communities;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { CommunityRole } from \"../types\";\n\nexport function getCommunityContextQueryOptions(\n username: string | undefined,\n communityName: string | undefined\n) {\n return queryOptions({\n queryKey: QueryKeys.communities.context(username!, communityName!),\n enabled: !!username && !!communityName,\n queryFn: async () => {\n const response = await CONFIG.hiveClient.call(\n \"bridge\",\n \"get_community_context\",\n {\n account: username,\n name: communityName,\n }\n );\n\n return {\n role: response?.role ?? \"guest\",\n subscribed: response?.subscribed ?? false,\n } satisfies {\n role: CommunityRole;\n subscribed: boolean;\n };\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { Community } from \"../types/community\";\nimport { getCommunity } from \"@/modules/bridge\";\nimport { QueryKeys } from \"@/modules/core\";\n\nexport function getCommunityQueryOptions(\n name: string | undefined,\n observer: string | undefined = \"\",\n enabled = true\n) {\n return queryOptions({\n queryKey: QueryKeys.communities.single(name, observer),\n enabled: enabled && !!name,\n queryFn: async () => getCommunity(name ?? \"\", observer) as Promise<Community | null>,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { Subscription } from \"../types\";\n\n/**\n * Get list of subscribers for a community\n *\n * @param communityName - The community name (e.g., \"hive-123456\")\n */\nexport function getCommunitySubscribersQueryOptions(communityName: string) {\n return queryOptions({\n queryKey: QueryKeys.communities.subscribers(communityName),\n queryFn: async () => {\n const response = await CONFIG.hiveClient.call(\"bridge\", \"list_subscribers\", {\n community: communityName,\n });\n return (response as Subscription[] | null) ?? [];\n },\n staleTime: 60000,\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { QueryKeys } from \"@/modules/core\";\nimport { AccountNotification } from \"../types\";\n\ntype NotifPage = AccountNotification[];\ntype NotifCursor = number | null;\n\n/**\n * Get account notifications for a community (bridge API)\n *\n * @param account - The account/community name\n * @param limit - Number of notifications per page\n */\nexport function getAccountNotificationsInfiniteQueryOptions(\n account: string,\n limit: number\n) {\n return infiniteQueryOptions<NotifPage, Error, NotifPage, (string | number)[], NotifCursor>({\n queryKey: QueryKeys.communities.accountNotifications(account, limit),\n initialPageParam: null as NotifCursor,\n\n queryFn: async ({ pageParam }: { pageParam: NotifCursor }) => {\n try {\n const response = await CONFIG.hiveClient.call(\"bridge\", \"account_notifications\", {\n account,\n limit,\n last_id: pageParam ?? undefined,\n });\n return (response as AccountNotification[] | null) ?? [];\n } catch {\n return [];\n }\n },\n\n getNextPageParam: (lastPage: NotifPage): NotifCursor =>\n lastPage?.length > 0 ? lastPage[lastPage.length - 1].id : null,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { RewardedCommunity } from \"../types/rewarded-community\";\n\nexport function getRewardedCommunitiesQueryOptions() {\n return queryOptions({\n queryKey: QueryKeys.communities.rewarded(),\n queryFn: async () => {\n const response = await fetch(\n CONFIG.privateApiHost + \"/private-api/rewarded-communities\",\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch rewarded communities: ${response.status}`);\n }\n\n return response.json() as Promise<RewardedCommunity[]>;\n },\n });\n}\n","export enum ROLES {\n OWNER = \"owner\",\n ADMIN = \"admin\",\n MOD = \"mod\",\n MEMBER = \"member\",\n GUEST = \"guest\",\n MUTED = \"muted\",\n}\n\nexport const roleMap: Record<string, string[]> = {\n [ROLES.OWNER]: [\n ROLES.ADMIN,\n ROLES.MOD,\n ROLES.MEMBER,\n ROLES.GUEST,\n ROLES.MUTED,\n ],\n [ROLES.ADMIN]: [ROLES.MOD, ROLES.MEMBER, ROLES.GUEST, ROLES.MUTED],\n [ROLES.MOD]: [ROLES.MEMBER, ROLES.GUEST, ROLES.MUTED],\n};\n\nexport type CommunityTeam = Array<Array<string>>;\nexport type CommunityRole = (typeof ROLES)[keyof typeof ROLES]; // \"owner\" | \"member\" | ...\nexport type CommunityType = \"Topic\" | \"Journal\" | \"Council\";\n\nexport interface Community {\n about: string;\n admins?: string[];\n avatar_url: string;\n created_at: string;\n description: string;\n flag_text: string;\n id: number;\n is_nsfw: boolean;\n lang: string;\n name: string;\n num_authors: number;\n num_pending: number;\n subscribers: number;\n sum_pending: number;\n settings?: any;\n team: CommunityTeam;\n title: string;\n type_id: number;\n}\n\nexport type Communities = Community[];\n","import { CommunityRole, CommunityType, ROLES } from \"../types\";\n\nexport function getCommunityType(name: string, type_id: number): CommunityType {\n if (name.startsWith(\"hive-3\") || type_id === 3) return \"Council\";\n if (name.startsWith(\"hive-2\") || type_id === 2) return \"Journal\";\n return \"Topic\";\n}\n\nexport function getCommunityPermissions({\n communityType,\n userRole,\n subscribed,\n}: {\n communityType: CommunityType;\n userRole: CommunityRole;\n subscribed: boolean;\n}) {\n const canPost = (() => {\n if (userRole === ROLES.MUTED) return false;\n\n if (communityType === \"Topic\") return true;\n\n // Journal & Council\n return [ROLES.OWNER, ROLES.ADMIN, ROLES.MOD, ROLES.MEMBER].includes(\n userRole\n );\n })();\n\n const canComment = (() => {\n if (userRole === ROLES.MUTED) return false;\n\n switch (communityType) {\n case \"Topic\":\n return true;\n case \"Journal\":\n return userRole !== ROLES.GUEST || subscribed;\n case \"Council\":\n return canPost;\n }\n })();\n\n const isModerator = [ROLES.OWNER, ROLES.ADMIN, ROLES.MOD].includes(userRole);\n\n return {\n canPost,\n canComment,\n isModerator,\n };\n}\n","import { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\nexport function getNotificationsUnreadCountQueryOptions(\n activeUsername: string | undefined,\n code: string | undefined\n) {\n return queryOptions({\n queryKey: QueryKeys.notifications.unreadCount(activeUsername),\n queryFn: async () => {\n if (!code) {\n return 0;\n }\n const response = await fetch(\n `${CONFIG.privateApiHost}/private-api/notifications/unread`,\n {\n method: \"POST\",\n body: JSON.stringify({ code }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n const data = (await response.json()) as { count: number };\n return data.count;\n },\n enabled: !!activeUsername && !!code,\n initialData: 0,\n refetchInterval: 60000,\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { NotificationFilter } from \"../enums\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { ApiNotification } from \"../types\";\n\nexport function getNotificationsInfiniteQueryOptions(\n activeUsername: string | undefined,\n code: string | undefined,\n filter: NotificationFilter | undefined = undefined\n) {\n return infiniteQueryOptions({\n queryKey: QueryKeys.notifications.list(activeUsername, filter),\n queryFn: async ({ pageParam }) => {\n if (!code) {\n return [];\n }\n const data = {\n code,\n filter,\n since: pageParam,\n user: undefined,\n };\n\n const response = await fetch(\n CONFIG.privateApiHost + \"/private-api/notifications\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n }\n );\n\n return response.json() as Promise<ApiNotification[]>;\n },\n enabled: !!activeUsername && !!code,\n initialData: { pages: [], pageParams: [] },\n initialPageParam: \"\",\n getNextPageParam: (lastPage) => lastPage?.[lastPage.length - 1]?.id ?? \"\",\n refetchOnMount: true,\n });\n}\n","export enum NotificationFilter {\n VOTES = \"rvotes\",\n MENTIONS = \"mentions\",\n FAVORITES = \"nfavorites\",\n BOOKMARKS = \"nbookmarks\",\n FOLLOWS = \"follows\",\n REPLIES = \"replies\",\n REBLOGS = \"reblogs\",\n TRANSFERS = \"transfers\",\n DELEGATIONS = \"delegations\",\n}\n","export enum NotifyTypes {\n VOTE = 1,\n MENTION = 2,\n FOLLOW = 3,\n COMMENT = 4,\n RE_BLOG = 5,\n TRANSFERS = 6,\n FAVORITES = 13,\n BOOKMARKS = 15,\n ALLOW_NOTIFY = \"ALLOW_NOTIFY\",\n}\n\nexport const ALL_NOTIFY_TYPES = [\n NotifyTypes.VOTE,\n NotifyTypes.MENTION,\n NotifyTypes.FOLLOW,\n NotifyTypes.COMMENT,\n NotifyTypes.RE_BLOG,\n NotifyTypes.TRANSFERS,\n NotifyTypes.FAVORITES,\n NotifyTypes.BOOKMARKS,\n] as const;\n\nexport enum NotificationViewType {\n ALL = \"All\",\n UNREAD = \"Unread\",\n READ = \"Read\",\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { ApiNotificationSetting } from \"../types\";\nimport { NotifyTypes } from \"../enums\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\n\nexport function getNotificationsSettingsQueryOptions(\n activeUsername: string | undefined,\n code: string | undefined,\n initialMuted?: boolean\n) {\n return queryOptions({\n queryKey: QueryKeys.notifications.settings(activeUsername),\n queryFn: async () => {\n let token = activeUsername + \"-web\";\n if (!code) {\n throw new Error(\"Missing access token\");\n }\n const response = await fetch(\n CONFIG.privateApiHost + \"/private-api/detail-device\",\n {\n body: JSON.stringify({\n code,\n username: activeUsername,\n token,\n }),\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n if (!response.ok) {\n throw new Error(`Failed to fetch notification settings: ${response.status}`);\n }\n return response.json() as Promise<ApiNotificationSetting>;\n },\n enabled: !!activeUsername && !!code,\n refetchOnMount: false,\n initialData: () => {\n return {\n status: 0,\n system: \"web\",\n allows_notify: 0,\n notify_types: initialMuted\n ? []\n : ([\n NotifyTypes.COMMENT,\n NotifyTypes.FOLLOW,\n NotifyTypes.MENTION,\n NotifyTypes.FAVORITES,\n NotifyTypes.BOOKMARKS,\n NotifyTypes.VOTE,\n NotifyTypes.RE_BLOG,\n NotifyTypes.TRANSFERS,\n ] as number[]),\n } as ApiNotificationSetting;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, QueryKeys } from \"@/modules/core\";\nimport { Announcement } from \"../types/announcement\";\n\nexport function getAnnouncementsQueryOptions() {\n return queryOptions({\n queryKey: QueryKeys.notifications.announcements(),\n queryFn: async () => {\n const response = await fetch(CONFIG.privateApiHost + \"/private-api/announcements\", {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch announcements: ${response.status}`);\n }\n\n const data = await response.json() as Announcement[];\n return data || [];\n },\n staleTime: 3_600_000,\n });\n}\n","import { useMutation, QueryKey } from \"@tanstack/react-query\";\nimport { getQueryClient } from \"@/modules/core\";\nimport { markNotifications } from \"@/modules/private-api/requests\";\nimport { ApiNotification } from \"../types\";\n\n/**\n * Hook to mark notifications as read with optimistic updates\n *\n * @param username - Current user's username\n * @param code - Access token for authentication\n * @param onSuccess - Optional callback on successful mutation, receives unread count\n * @param onError - Optional callback on error\n *\n * @returns Mutation hook that accepts { id?: string }\n *\n * @example\n * ```typescript\n * const markAsRead = useMarkNotificationsRead(username, code);\n *\n * // Mark specific notification\n * markAsRead.mutate({ id: \"notification-id\" });\n *\n * // Mark all notifications (omit id)\n * markAsRead.mutate({});\n * ```\n */\nexport function useMarkNotificationsRead(\n username: string | undefined,\n code: string | undefined,\n onSuccess?: (unreadCount?: number) => void,\n onError?: (e: Error) => void\n) {\n const queryClient = getQueryClient();\n\n return useMutation({\n mutationKey: [\"notifications\", \"mark-read\", username],\n\n mutationFn: async ({ id }: { id?: string }) => {\n if (!username || !code) {\n throw new Error(\"[SDK][Notifications] – missing auth for markNotifications\");\n }\n return markNotifications(code, id);\n },\n\n // Optimistic update: Immediately mark notifications as read in cache\n onMutate: async ({ id }: { id?: string }) => {\n // Cancel any outgoing refetches to prevent overwriting optimistic update\n await queryClient.cancelQueries({ queryKey: [\"notifications\"] });\n\n // Snapshot current state for rollback\n const previousNotifications: Array<[QueryKey, ApiNotification[] | undefined]> = [];\n\n // Get all notification queries from cache\n const queriesData = queryClient.getQueriesData<ApiNotification[]>({\n queryKey: [\"notifications\"],\n });\n\n // Update each cached notification query\n queriesData.forEach(([queryKey, data]) => {\n if (data) {\n // Save previous state\n previousNotifications.push([queryKey, data]);\n\n // Optimistically update: mark as read\n const updatedData = data.map((item) => ({\n ...item,\n // If specific ID provided: mark only that notification\n // If no ID (mark all): mark ALL notifications\n read: (!id || id === item.id ? 1 : item.read) as 0 | 1,\n }));\n\n queryClient.setQueryData(queryKey, updatedData);\n }\n });\n\n // Return context for rollback\n return { previousNotifications };\n },\n\n onSuccess: (response, variables) => {\n // Extract unread count from response if available\n const unreadCount = typeof response === \"object\" && response !== null\n ? (response as { unread?: number }).unread\n : undefined;\n\n onSuccess?.(unreadCount);\n\n // If marking all notifications, invalidate to ensure fresh data\n if (!variables.id) {\n queryClient.invalidateQueries({\n queryKey: [\"notifications\"],\n });\n }\n },\n\n // Rollback optimistic update on error\n onError: (error, _variables, context) => {\n // Restore previous state\n if (context?.previousNotifications) {\n context.previousNotifications.forEach(([queryKey, data]) => {\n queryClient.setQueryData(queryKey, data);\n });\n }\n\n onError?.(error as Error);\n },\n\n // Always refetch after mutation settles\n onSettled: () => {\n queryClient.invalidateQueries({\n queryKey: [\"notifications\"],\n });\n },\n });\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildSetLastReadOps } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface SetLastReadPayload {\n date?: string;\n}\n\nexport function useSetLastRead(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<SetLastReadPayload>(\n [\"notifications\", \"set-last-read\"],\n username,\n ({ date }) => buildSetLastReadOps(username!, date),\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.notifications.unreadCount(username),\n ]);\n }\n },\n auth\n );\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { Proposal } from \"../types\";\n\n/**\n * Get a single proposal by ID\n */\nexport function getProposalQueryOptions(id: number) {\n return queryOptions({\n queryKey: [\"proposals\", \"proposal\", id],\n queryFn: async () => {\n const r = await CONFIG.hiveClient.call(\"condenser_api\", \"find_proposals\", [[id]]);\n const proposal = r[0];\n\n // Determine proposal status based on dates\n if (new Date(proposal.start_date) < new Date() && new Date(proposal.end_date) >= new Date()) {\n proposal.status = \"active\";\n } else if (new Date(proposal.end_date) < new Date()) {\n proposal.status = \"expired\";\n } else {\n proposal.status = \"inactive\";\n }\n\n return proposal as Proposal;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { Proposal } from \"../types\";\n\n/**\n * Get all proposals, sorted with expired proposals at the end\n */\nexport function getProposalsQueryOptions() {\n return queryOptions({\n queryKey: [\"proposals\", \"list\"],\n queryFn: async () => {\n const response = (await CONFIG.hiveClient.call(\"database_api\", \"list_proposals\", {\n start: [-1],\n limit: 500,\n order: \"by_total_votes\",\n order_direction: \"descending\",\n status: \"all\",\n })) as { proposals: Proposal[] };\n\n const proposals = response.proposals;\n const expired = proposals.filter((x) => x.status === \"expired\");\n const others = proposals.filter((x) => x.status !== \"expired\");\n\n return [...others, ...expired];\n },\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { ProposalVote } from \"../types\";\nimport { FullAccount } from \"@/modules/accounts\";\nimport { parseAccounts } from \"@/modules/accounts/utils\";\n\n// One page = array of enriched vote rows\nexport type ProposalVoteRow = {\n id: number;\n voter: string;\n voterAccount: FullAccount;\n};\n\ntype Cursor = string; // we paginate by last voter name\n\n/**\n * Get proposal votes with pagination and enriched voter account data\n *\n * @param proposalId - The proposal ID\n * @param voter - Starting voter for pagination\n * @param limit - Number of votes per page\n */\nexport function getProposalVotesInfiniteQueryOptions(\n proposalId: number,\n voter: string,\n limit: number\n) {\n return infiniteQueryOptions<ProposalVoteRow[], Error, ProposalVoteRow[], (string | number)[], Cursor>({\n queryKey: [\"proposals\", \"votes\", proposalId, voter, limit],\n initialPageParam: voter as Cursor,\n refetchOnMount: true,\n staleTime: 0, // Always refetch on mount\n\n queryFn: async ({ pageParam }: { pageParam: Cursor }) => {\n const startParam = pageParam ?? voter;\n\n const response = (await CONFIG.hiveClient.call(\"condenser_api\", \"list_proposal_votes\", [\n [proposalId, startParam],\n limit,\n \"by_proposal_voter\",\n ])) as ProposalVote[];\n\n const list = response\n .filter((x) => x.proposal?.proposal_id === proposalId)\n .map((x) => ({ id: x.id, voter: x.voter }));\n\n const rawAccounts = await CONFIG.hiveClient.database.getAccounts(list.map((l) => l.voter));\n const accounts = parseAccounts(rawAccounts);\n\n const page: ProposalVoteRow[] = list.map((i) => ({\n ...i,\n voterAccount: accounts.find((a) => i.voter === a.name)!,\n }));\n\n return page;\n },\n\n getNextPageParam: (lastPage: ProposalVoteRow[]): Cursor | undefined => {\n const last = lastPage?.[lastPage.length - 1];\n return last?.voter ?? undefined;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { ProposalVote } from \"../types\";\n\n/**\n * Fetches ALL proposal votes for a specific user in a single query.\n * Much more efficient than querying each proposal individually.\n * Uses \"by_voter_proposal\" order to get all votes by a user.\n */\nexport function getUserProposalVotesQueryOptions(voter: string) {\n return queryOptions({\n queryKey: [\"proposals\", \"votes\", \"by-user\", voter],\n enabled: !!voter && voter !== \"\",\n staleTime: 60 * 1000, // Cache for 1 minute\n queryFn: async () => {\n if (!voter || voter === \"\") {\n return [];\n }\n\n const response = (await CONFIG.hiveClient.call(\"database_api\", \"list_proposal_votes\", {\n start: [voter],\n limit: 1000,\n order: \"by_voter_proposal\",\n order_direction: \"ascending\",\n status: \"votable\",\n })) as { proposal_votes: ProposalVote[] };\n\n // Filter to only this user's votes (API might return votes after this user alphabetically)\n const userVotes = (response.proposal_votes || []).filter((vote) => vote.voter === voter);\n\n return userVotes;\n },\n });\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildProposalVoteOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for voting on proposals.\n */\nexport interface ProposalVotePayload {\n /** Array of proposal IDs to vote on */\n proposalIds: number[];\n /** True to approve, false to disapprove */\n approve: boolean;\n}\n\n/**\n * React Query mutation hook for voting on Hive proposals.\n *\n * This mutation broadcasts an update_proposal_votes operation to vote on\n * one or more proposals in the Hive Decentralized Fund (HDF).\n *\n * @param username - The username voting on proposals (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Records activity (type 150) if adapter.recordActivity is available\n * - Invalidates proposal list cache to show updated vote status\n * - Invalidates voter's proposal votes cache\n *\n * **Multiple Proposals:**\n * - You can vote on multiple proposals in a single transaction\n * - All proposals receive the same vote (approve or disapprove)\n * - Proposal IDs are integers, not strings\n *\n * **Vote Types:**\n * - approve: true - Vote in favor of the proposal(s)\n * - approve: false - Remove your vote from the proposal(s)\n *\n * @example\n * ```typescript\n * const proposalVoteMutation = useProposalVote(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Approve a single proposal\n * proposalVoteMutation.mutate({\n * proposalIds: [123],\n * approve: true\n * });\n *\n * // Approve multiple proposals\n * proposalVoteMutation.mutate({\n * proposalIds: [123, 124, 125],\n * approve: true\n * });\n *\n * // Remove vote from a proposal\n * proposalVoteMutation.mutate({\n * proposalIds: [123],\n * approve: false\n * });\n * ```\n */\nexport function useProposalVote(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<ProposalVotePayload>(\n [\"proposals\", \"vote\"],\n username,\n ({ proposalIds, approve }) => [\n buildProposalVoteOp(username!, proposalIds, approve)\n ],\n async (result: any) => {\n // Wrap post-broadcast side-effects in try-catch to prevent propagating errors\n try {\n // Activity tracking\n if (auth?.adapter?.recordActivity && result?.block_num && result?.id) {\n await auth.adapter.recordActivity(150, result.block_num, result.id);\n }\n\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.proposals.list(),\n QueryKeys.proposals.votesByUser(username!)\n ]);\n }\n } catch (error) {\n // Log but don't rethrow - don't fail mutation due to side-effect errors\n console.warn('[useProposalVote] Post-broadcast side-effect failed:', error);\n }\n },\n auth,\n 'active' // Use active authority for proposal votes (required by blockchain)\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildProposalCreateOp, type ProposalCreatePayload } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport { type ProposalCreatePayload };\n\nexport function useProposalCreate(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<ProposalCreatePayload>(\n [\"proposals\", \"create\"],\n username,\n (payload) => [\n buildProposalCreateOp(username!, payload)\n ],\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.proposals.list(),\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { DelegatedVestingShare } from \"../types\";\n\n/**\n * Get vesting delegations for an account with infinite scroll support\n *\n * @param username - The account username\n * @param limit - Maximum number of results per page (default: 50)\n */\nexport function getVestingDelegationsQueryOptions(\n username?: string,\n limit = 50\n) {\n return infiniteQueryOptions({\n queryKey: [\"wallet\", \"vesting-delegations\", username, limit],\n initialPageParam: \"\" as string,\n queryFn: async ({ pageParam }: { pageParam: string }) => {\n // Request one extra item on subsequent pages to handle inclusive cursor\n const fetchLimit = pageParam ? limit + 1 : limit;\n\n const result = await CONFIG.hiveClient.database.call(\"get_vesting_delegations\", [\n username,\n pageParam || \"\",\n fetchLimit,\n ]) as DelegatedVestingShare[];\n\n // Filter out duplicate first item on subsequent pages\n // Hive API is inclusive of the 'from' cursor\n if (pageParam && result.length > 0 && result[0]?.delegatee === pageParam) {\n // Return at most limit items after removing the duplicate\n return result.slice(1, limit + 1);\n }\n\n return result;\n },\n getNextPageParam: (lastPage: DelegatedVestingShare[]) => {\n // If we got fewer results than limit, we've reached the end\n if (!lastPage || lastPage.length < limit) {\n return undefined;\n }\n\n // Return the last delegatee as cursor for next page\n const lastDelegation = lastPage[lastPage.length - 1];\n return lastDelegation?.delegatee;\n },\n enabled: !!username,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { ConversionRequest } from \"../types\";\n\n/**\n * Get HBD to HIVE conversion requests for an account\n *\n * @param account - The account username\n */\nexport function getConversionRequestsQueryOptions(account: string) {\n return queryOptions({\n queryKey: [\"wallet\", \"conversion-requests\", account],\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_conversion_requests\", [\n account,\n ]) as Promise<ConversionRequest[]>,\n select: (data) => data.sort((a, b) => a.requestid - b.requestid),\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { CollateralizedConversionRequest } from \"../types\";\n\n/**\n * Get collateralized HIVE to HBD conversion requests for an account\n *\n * @param account - The account username\n */\nexport function getCollateralizedConversionRequestsQueryOptions(account: string) {\n return queryOptions({\n queryKey: [\"wallet\", \"collateralized-conversion-requests\", account],\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_collateralized_conversion_requests\", [\n account,\n ]) as Promise<CollateralizedConversionRequest[]>,\n select: (data) => data.sort((a, b) => a.requestid - b.requestid),\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { SavingsWithdrawRequest } from \"../types\";\n\n/**\n * Get pending savings withdrawal requests for an account\n *\n * @param account - The account username\n */\nexport function getSavingsWithdrawFromQueryOptions(account: string) {\n return queryOptions({\n queryKey: [\"wallet\", \"savings-withdraw\", account],\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_savings_withdraw_from\", [\n account,\n ]) as Promise<SavingsWithdrawRequest[]>,\n select: (data) => data.sort((a, b) => a.request_id - b.request_id),\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { WithdrawRoute } from \"../types\";\n\n/**\n * Get power down (vesting withdrawal) routes for an account\n *\n * @param account - The account username\n */\nexport function getWithdrawRoutesQueryOptions(account: string) {\n return queryOptions({\n queryKey: [\"wallet\", \"withdraw-routes\", account],\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_withdraw_routes\", [\n account,\n \"outgoing\",\n ]) as Promise<WithdrawRoute[]>,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { OpenOrdersData } from \"../types\";\n\n/**\n * Get open market orders for an account\n *\n * @param user - The account username\n */\nexport function getOpenOrdersQueryOptions(user: string) {\n return queryOptions({\n queryKey: [\"wallet\", \"open-orders\", user],\n queryFn: () =>\n CONFIG.hiveClient.call(\"condenser_api\", \"get_open_orders\", [\n user,\n ]) as Promise<OpenOrdersData[]>,\n select: (data) => data.sort((a, b) => a.orderid - b.orderid),\n enabled: !!user,\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { RcDirectDelegation, RcDirectDelegationsResponse } from \"../types/rc-direct-delegation\";\n\ntype RcPage = RcDirectDelegation[];\ntype RcCursor = string | null;\n\n/**\n * Get outgoing RC delegations for an account\n *\n * @param username - Account name to get delegations for\n * @param limit - Number of delegations per page\n */\nexport function getOutgoingRcDelegationsInfiniteQueryOptions(username: string, limit = 100) {\n return infiniteQueryOptions<RcPage, Error, RcPage, (string | number)[], RcCursor>({\n queryKey: [\"wallet\", \"outgoing-rc-delegations\", username, limit],\n initialPageParam: null as RcCursor,\n\n queryFn: async ({ pageParam }: { pageParam: RcCursor }) => {\n const response = await CONFIG.hiveClient\n .call(\"rc_api\", \"list_rc_direct_delegations\", {\n start: [username, pageParam ?? \"\"],\n limit,\n })\n .then((r: any) => r as RcDirectDelegationsResponse);\n\n let delegations: RcDirectDelegation[] = response.rc_direct_delegations || [];\n\n // Filter out the starting delegation when paginating\n if (pageParam) {\n delegations = delegations.filter((delegation) => delegation.to !== pageParam);\n }\n\n return delegations;\n },\n\n getNextPageParam: (lastPage: RcPage): RcCursor =>\n lastPage.length === limit ? lastPage[lastPage.length - 1].to : null,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { IncomingRcResponse } from \"../types\";\n\nexport function getIncomingRcQueryOptions(username: string | undefined) {\n return queryOptions({\n queryKey: [\"wallet\", \"incoming-rc\", username],\n enabled: !!username,\n queryFn: async (): Promise<IncomingRcResponse> => {\n if (!username) {\n throw new Error(\"[SDK][Wallet] - Missing username for incoming RC\");\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n `${CONFIG.privateApiHost}/private-api/received-rc/${username}`\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch incoming RC: ${response.status}`);\n }\n\n return response.json() as Promise<IncomingRcResponse>;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { ReceivedVestingShare } from \"../types/received-vesting-share\";\n\nexport function getReceivedVestingSharesQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"wallet\", \"received-vesting-shares\", username],\n queryFn: async () => {\n const response = await fetch(\n CONFIG.privateApiHost + `/private-api/received-vesting/${username}`\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch received vesting shares: ${response.status}`);\n }\n\n const data = (await response.json()) as { list: ReceivedVestingShare[] };\n return data.list;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { RecurrentTransfer } from \"../types\";\n\n/**\n * Get recurrent transfers for an account\n *\n * @param username - The account username\n */\nexport function getRecurrentTransfersQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"wallet\", \"recurrent-transfers\", username],\n queryFn: () =>\n CONFIG.hiveClient.call(\"condenser_api\", \"find_recurrent_transfers\", [\n username,\n ]) as Promise<RecurrentTransfer[]>,\n enabled: !!username,\n });\n}\n","import { CONFIG } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\n\ntype PortfolioLayer = \"points\" | \"hive\" | \"chain\" | \"spk\" | \"engine\";\n\ninterface TokenAction {\n id: string;\n [key: string]: unknown;\n}\n\nexport interface PortfolioWalletItem {\n name: string;\n symbol: string;\n layer: PortfolioLayer;\n balance: number;\n fiatRate: number;\n currency: string;\n precision: number;\n address?: string;\n error?: string;\n pendingRewards?: number;\n pendingRewardsFiat?: number;\n liquid?: number;\n liquidFiat?: number;\n savings?: number;\n savingsFiat?: number;\n staked?: number;\n stakedFiat?: number;\n iconUrl?: string;\n actions?: TokenAction[];\n extraData?: Array<{ dataKey: string; value: any }>;\n apr?: number;\n}\n\nexport interface PortfolioResponse {\n username: string;\n currency?: string;\n wallets: PortfolioWalletItem[];\n}\n\nfunction normalizeString(value: unknown): string | undefined {\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n\n return undefined;\n}\n\nfunction normalizeNumber(value: unknown): number | undefined {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) {\n return undefined;\n }\n\n const direct = Number.parseFloat(trimmed);\n if (Number.isFinite(direct)) {\n return direct;\n }\n\n const sanitized = trimmed.replace(/,/g, \"\");\n const match = sanitized.match(/[-+]?\\d+(?:\\.\\d+)?/);\n if (match) {\n const parsed = Number.parseFloat(match[0]);\n if (Number.isFinite(parsed)) {\n return parsed;\n }\n }\n }\n\n return undefined;\n}\n\nfunction parseToken(rawToken: unknown): PortfolioWalletItem | undefined {\n if (!rawToken || typeof rawToken !== \"object\") {\n return undefined;\n }\n\n const token = rawToken as Record<string, unknown>;\n\n // Portfolio v2 returns well-defined PortfolioItem structure\n return {\n name: normalizeString(token.name) ?? \"\",\n symbol: normalizeString(token.symbol) ?? \"\",\n layer: (normalizeString(token.layer) ?? \"hive\") as PortfolioLayer,\n balance: normalizeNumber(token.balance) ?? 0,\n fiatRate: normalizeNumber(token.fiatRate) ?? 0,\n currency: normalizeString(token.currency) ?? \"usd\",\n precision: normalizeNumber(token.precision) ?? 3,\n address: normalizeString(token.address),\n error: normalizeString(token.error),\n pendingRewards: normalizeNumber(token.pendingRewards),\n pendingRewardsFiat: normalizeNumber(token.pendingRewardsFiat),\n liquid: normalizeNumber(token.liquid),\n liquidFiat: normalizeNumber(token.liquidFiat),\n savings: normalizeNumber(token.savings),\n savingsFiat: normalizeNumber(token.savingsFiat),\n staked: normalizeNumber(token.staked),\n stakedFiat: normalizeNumber(token.stakedFiat),\n iconUrl: normalizeString(token.iconUrl),\n actions: (token.actions ?? []) as TokenAction[],\n extraData: (token.extraData ?? []) as Array<{ dataKey: string; value: any }>,\n apr: normalizeNumber(token.apr),\n };\n}\n\nfunction extractTokens(payload: unknown): unknown[] {\n if (!payload || typeof payload !== \"object\") {\n return [];\n }\n\n const containers = [payload];\n const record = payload as Record<string, unknown>;\n if (record.data && typeof record.data === \"object\") {\n containers.push(record.data as Record<string, unknown>);\n }\n if (record.result && typeof record.result === \"object\") {\n containers.push(record.result as Record<string, unknown>);\n }\n if (record.portfolio && typeof record.portfolio === \"object\") {\n containers.push(record.portfolio as Record<string, unknown>);\n }\n\n for (const container of containers) {\n if (Array.isArray(container)) {\n return container;\n }\n\n if (container && typeof container === \"object\") {\n for (const key of [\n \"wallets\",\n \"tokens\",\n \"assets\",\n \"items\",\n \"portfolio\",\n \"balances\",\n ]) {\n const value = (container as Record<string, unknown>)[key];\n if (Array.isArray(value)) {\n return value;\n }\n }\n }\n }\n\n return [];\n}\n\nfunction resolveUsername(payload: unknown): string | undefined {\n if (!payload || typeof payload !== \"object\") {\n return undefined;\n }\n\n const record = payload as Record<string, unknown>;\n return (\n normalizeString(record.username) ??\n normalizeString(record.name) ??\n normalizeString(record.account)\n );\n}\n\n/**\n * Get portfolio query options for fetching user's wallet balances across all layers\n * @param username - Hive username\n * @param currency - Fiat currency code (default: \"usd\")\n * @param onlyEnabled - Only return enabled tokens (default: true)\n * @returns TanStack Query options for portfolio data\n */\nexport function getPortfolioQueryOptions(\n username: string,\n currency: string = \"usd\",\n onlyEnabled: boolean = true\n) {\n return queryOptions({\n queryKey: [\n \"wallet\",\n \"portfolio\",\n \"v2\",\n username,\n onlyEnabled ? \"only-enabled\" : \"all\",\n currency,\n ],\n enabled: Boolean(username),\n staleTime: 60000,\n refetchInterval: 120000,\n queryFn: async (): Promise<PortfolioResponse> => {\n if (!username) {\n throw new Error(\"[SDK][Wallet] – username is required\");\n }\n\n if (CONFIG.privateApiHost === undefined || CONFIG.privateApiHost === null) {\n throw new Error(\n \"[SDK][Wallet] – privateApiHost isn't configured for portfolio\"\n );\n }\n\n const endpoint = `${CONFIG.privateApiHost}/wallet-api/portfolio-v2`;\n const response = await fetch(endpoint, {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ username, onlyEnabled, currency }),\n });\n\n if (!response.ok) {\n throw new Error(\n `[SDK][Wallet] – Portfolio request failed (${response.status})`\n );\n }\n\n const payload = (await response.json()) as unknown;\n const tokens = extractTokens(payload)\n .map((item) => parseToken(item))\n .filter((item): item is PortfolioWalletItem => Boolean(item));\n\n if (!tokens.length) {\n throw new Error(\n \"[SDK][Wallet] – Portfolio payload contained no tokens\"\n );\n }\n\n return {\n username: resolveUsername(payload) ?? username,\n currency: normalizeString(\n (payload as Record<string, unknown> | undefined)?.fiatCurrency ??\n (payload as Record<string, unknown> | undefined)?.currency\n )?.toUpperCase(),\n wallets: tokens,\n };\n },\n });\n}\n","import { CONFIG } from \"@/modules/core/config\";\nimport type { DynamicProps } from \"@/modules/core\";\nimport { getAccountFullQueryOptions } from \"@/modules/accounts\";\nimport { getDynamicPropsQueryOptions, getQueryClient } from \"@/modules/core\";\nimport type { FullAccount } from \"@/modules/accounts\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { GeneralAssetInfo } from \"../types\";\nimport { parseAsset } from \"@/modules/core/utils\";\n\nexport function getHiveAssetGeneralInfoQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"hive\", \"general-info\", username],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n await getQueryClient().prefetchQuery(getDynamicPropsQueryOptions());\n await getQueryClient().prefetchQuery(\n getAccountFullQueryOptions(username)\n );\n\n const dynamicProps = getQueryClient().getQueryData<DynamicProps>(\n getDynamicPropsQueryOptions().queryKey\n );\n const accountData = getQueryClient().getQueryData<FullAccount>(\n getAccountFullQueryOptions(username).queryKey\n );\n\n const marketTicker = (await CONFIG.hiveClient\n .call(\"condenser_api\", \"get_ticker\", [])\n .catch(() => undefined)) as { latest?: string } | undefined;\n\n const marketPrice = Number.parseFloat(marketTicker?.latest ?? \"\");\n\n if (!accountData) {\n return {\n name: \"HIVE\",\n title: \"Hive\",\n price: Number.isFinite(marketPrice)\n ? marketPrice\n : dynamicProps\n ? dynamicProps.base / dynamicProps.quote\n : 0,\n accountBalance: 0,\n } satisfies GeneralAssetInfo;\n }\n\n const liquidBalance = parseAsset(accountData.balance).amount;\n const savingsBalance = parseAsset(accountData.savings_balance).amount;\n\n return {\n name: \"HIVE\",\n title: \"Hive\",\n price: Number.isFinite(marketPrice)\n ? marketPrice\n : dynamicProps\n ? dynamicProps.base / dynamicProps.quote\n : 0,\n accountBalance: liquidBalance + savingsBalance,\n parts: [\n {\n name: \"current\",\n balance: liquidBalance,\n },\n {\n name: \"savings\",\n balance: savingsBalance,\n },\n ],\n } satisfies GeneralAssetInfo;\n },\n });\n}\n","import type { DynamicProps } from \"@/modules/core\";\nimport { getAccountFullQueryOptions } from \"@/modules/accounts\";\nimport { getDynamicPropsQueryOptions, getQueryClient } from \"@/modules/core\";\nimport type { FullAccount } from \"@/modules/accounts\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { GeneralAssetInfo } from \"../types\";\nimport { parseAsset } from \"@/modules/core/utils\";\n\nexport function getHbdAssetGeneralInfoQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"hbd\", \"general-info\", username],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n await getQueryClient().prefetchQuery(getDynamicPropsQueryOptions());\n await getQueryClient().prefetchQuery(\n getAccountFullQueryOptions(username)\n );\n\n const accountData = getQueryClient().getQueryData<FullAccount>(\n getAccountFullQueryOptions(username).queryKey\n );\n const dynamicProps = getQueryClient().getQueryData<DynamicProps>(\n getDynamicPropsQueryOptions().queryKey\n );\n\n const price = 1;\n\n if (!accountData) {\n return {\n name: \"HBD\",\n title: \"Hive Dollar\",\n price,\n accountBalance: 0,\n };\n }\n\n return {\n name: \"HBD\",\n title: \"Hive Dollar\",\n price,\n accountBalance:\n parseAsset(accountData.hbd_balance).amount +\n parseAsset(accountData?.savings_hbd_balance).amount,\n apr: ((dynamicProps?.hbdInterestRate ?? 0) / 100).toFixed(3),\n parts: [\n {\n name: \"current\",\n balance: parseAsset(accountData.hbd_balance).amount,\n },\n {\n name: \"savings\",\n balance: parseAsset(accountData.savings_hbd_balance).amount,\n },\n ],\n } satisfies GeneralAssetInfo;\n },\n });\n}\n","import { CONFIG } from \"@/modules/core/config\";\nimport type { DynamicProps } from \"@/modules/core\";\nimport { getAccountFullQueryOptions } from \"@/modules/accounts\";\nimport { getDynamicPropsQueryOptions, getQueryClient } from \"@/modules/core\";\nimport type { FullAccount } from \"@/modules/accounts\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { GeneralAssetInfo } from \"../types\";\nimport { isEmptyDate, parseAsset, vestsToHp } from \"@/modules/core/utils\";\n\nfunction getAPR(dynamicProps: DynamicProps) {\n const initialInflationRate = 9.5;\n const initialBlock = 7000000;\n const decreaseRate = 250000;\n const decreasePercentPerIncrement = 0.01;\n\n const headBlock = dynamicProps.headBlock;\n const deltaBlocks = headBlock - initialBlock;\n const decreaseIncrements = deltaBlocks / decreaseRate;\n\n let currentInflationRate =\n initialInflationRate - decreaseIncrements * decreasePercentPerIncrement;\n\n if (currentInflationRate < 0.95) {\n currentInflationRate = 0.95;\n }\n\n const vestingRewardPercent = dynamicProps.vestingRewardPercent / 10000;\n const virtualSupply = dynamicProps.virtualSupply;\n const totalVestingFunds = dynamicProps.totalVestingFund;\n\n return (\n (virtualSupply * currentInflationRate * vestingRewardPercent) /\n totalVestingFunds\n ).toFixed(3);\n}\n\nexport function getHivePowerAssetGeneralInfoQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-power\", \"general-info\", username],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n await getQueryClient().prefetchQuery(getDynamicPropsQueryOptions());\n await getQueryClient().prefetchQuery(\n getAccountFullQueryOptions(username)\n );\n\n const dynamicProps = getQueryClient().getQueryData<DynamicProps>(\n getDynamicPropsQueryOptions().queryKey\n );\n const accountData = getQueryClient().getQueryData<FullAccount>(\n getAccountFullQueryOptions(username).queryKey\n );\n\n if (!dynamicProps || !accountData) {\n return {\n name: \"HP\",\n title: \"Hive Power\",\n price: 0,\n accountBalance: 0,\n };\n }\n\n const marketTicker = (await CONFIG.hiveClient\n .call(\"condenser_api\", \"get_ticker\", [])\n .catch(() => undefined)) as { latest?: string } | undefined;\n\n const marketPrice = Number.parseFloat(marketTicker?.latest ?? \"\");\n const price = Number.isFinite(marketPrice)\n ? marketPrice\n : dynamicProps.base / dynamicProps.quote;\n\n const vestingShares = parseAsset(accountData.vesting_shares).amount;\n const delegatedVests = parseAsset(\n accountData.delegated_vesting_shares\n ).amount;\n const receivedVests = parseAsset(\n accountData.received_vesting_shares\n ).amount;\n const withdrawRateVests = parseAsset(\n accountData.vesting_withdraw_rate\n ).amount;\n const remainingToWithdrawVests = Math.max(\n (Number(accountData.to_withdraw) - Number(accountData.withdrawn)) /\n 1e6,\n 0\n );\n const nextWithdrawalVests = !isEmptyDate(\n accountData.next_vesting_withdrawal\n )\n ? Math.min(withdrawRateVests, remainingToWithdrawVests)\n : 0;\n\n const hpBalance = +vestsToHp(\n vestingShares,\n dynamicProps.hivePerMVests\n ).toFixed(3);\n const outgoingDelegationsHp = +vestsToHp(\n delegatedVests,\n dynamicProps.hivePerMVests\n ).toFixed(3);\n const incomingDelegationsHp = +vestsToHp(\n receivedVests,\n dynamicProps.hivePerMVests\n ).toFixed(3);\n const pendingPowerDownHp = +vestsToHp(\n remainingToWithdrawVests,\n dynamicProps.hivePerMVests\n ).toFixed(3);\n const nextPowerDownHp = +vestsToHp(\n nextWithdrawalVests,\n dynamicProps.hivePerMVests\n ).toFixed(3);\n const totalBalance = Math.max(hpBalance - pendingPowerDownHp, 0);\n const availableHp = Math.max(hpBalance - outgoingDelegationsHp, 0);\n\n return {\n name: \"HP\",\n title: \"Hive Power\",\n price,\n accountBalance: +totalBalance.toFixed(3),\n apr: getAPR(dynamicProps),\n parts: [\n {\n name: \"hp_balance\",\n balance: hpBalance,\n },\n {\n name: \"available\",\n balance: +availableHp.toFixed(3),\n },\n {\n name: \"outgoing_delegations\",\n balance: outgoingDelegationsHp,\n },\n {\n name: \"incoming_delegations\",\n balance: incomingDelegationsHp,\n },\n ...(pendingPowerDownHp > 0\n ? [\n {\n name: \"pending_power_down\",\n balance: +pendingPowerDownHp.toFixed(3),\n },\n ]\n : []),\n ...(nextPowerDownHp > 0 && nextPowerDownHp !== pendingPowerDownHp\n ? [\n {\n name: \"next_power_down\",\n balance: +nextPowerDownHp.toFixed(3),\n },\n ]\n : []),\n ],\n } satisfies GeneralAssetInfo;\n },\n });\n}\n","import { utils } from \"@hiveio/dhive\";\nimport { HiveOperationGroup } from \"../types\";\nconst ops = utils.operationOrders;\n\nexport const HIVE_ACCOUNT_OPERATION_GROUPS: Record<\n HiveOperationGroup,\n number[]\n> = {\n transfers: [\n ops.transfer,\n ops.transfer_to_savings,\n ops.transfer_from_savings,\n ops.cancel_transfer_from_savings,\n ops.recurrent_transfer,\n ops.fill_recurrent_transfer,\n ops.escrow_transfer,\n ops.fill_recurrent_transfer,\n ],\n \"market-orders\": [\n ops.fill_convert_request,\n ops.fill_order,\n ops.fill_collateralized_convert_request,\n ops.limit_order_create2,\n ops.limit_order_create,\n ops.limit_order_cancel,\n ],\n interests: [ops.interest],\n \"stake-operations\": [\n ops.return_vesting_delegation,\n ops.withdraw_vesting,\n ops.transfer_to_vesting,\n ops.set_withdraw_vesting_route,\n ops.update_proposal_votes,\n ops.fill_vesting_withdraw,\n ops.account_witness_proxy,\n ops.delegate_vesting_shares,\n ],\n rewards: [\n ops.author_reward,\n ops.curation_reward,\n ops.producer_reward,\n ops.claim_reward_balance,\n ops.comment_benefactor_reward,\n ops.liquidity_reward,\n ops.proposal_pay,\n ],\n \"\": [],\n};\n","import { utils } from \"@hiveio/dhive\";\nimport type { HiveOperationName } from \"../types\";\n\nexport const HIVE_OPERATION_LIST = Object.keys(\n utils.operationOrders\n) as HiveOperationName[];\n","import { utils } from \"@hiveio/dhive\";\nimport type { HiveOperationName } from \"../types\";\n\nconst operationOrders = utils.operationOrders as Record<\n HiveOperationName,\n number\n>;\n\nexport const HIVE_OPERATION_ORDERS = operationOrders;\n\nexport const HIVE_OPERATION_NAME_BY_ID: Record<number, HiveOperationName> =\n Object.entries(operationOrders).reduce((acc, [name, id]) => {\n acc[id] = name as HiveOperationName;\n return acc;\n }, {} as Record<number, HiveOperationName>);\n","import { CONFIG } from \"@/modules/core/config\";\nimport { utils } from \"@hiveio/dhive\";\nimport { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { HIVE_ACCOUNT_OPERATION_GROUPS } from \"../consts\";\nimport type {\n AuthorReward,\n ClaimRewardBalance,\n HiveOperationFilter,\n HiveOperationFilterKey,\n HiveOperationFilterValue,\n HiveOperationGroup,\n HiveOperationName,\n} from \"../types\";\nimport type { HiveTransaction } from \"../types\";\nimport { parseAsset } from \"@/modules/core/utils\";\n\nconst operationOrders = utils.operationOrders;\n\nfunction isHiveOperationName(value: string): value is HiveOperationName {\n return Object.prototype.hasOwnProperty.call(operationOrders, value);\n}\n\nexport function resolveHiveOperationFilters(filters: HiveOperationFilter): {\n filterKey: HiveOperationFilterKey;\n filterArgs: any[];\n} {\n const rawValues: HiveOperationFilterValue[] = Array.isArray(filters)\n ? filters\n : [filters];\n\n const hasAll = rawValues.includes(\"\" as HiveOperationGroup);\n\n const uniqueValues = Array.from(\n new Set(\n rawValues.filter(\n (value): value is HiveOperationFilterValue =>\n value !== undefined &&\n value !== null &&\n value !== (\"\" as HiveOperationGroup)\n )\n )\n );\n\n const filterKey: HiveOperationFilterKey =\n hasAll || uniqueValues.length === 0\n ? \"all\"\n : uniqueValues\n .map((value) => value.toString())\n .sort()\n .join(\"|\");\n\n const operationIds = new Set<number>();\n\n if (!hasAll) {\n uniqueValues.forEach((value) => {\n if (value in HIVE_ACCOUNT_OPERATION_GROUPS) {\n HIVE_ACCOUNT_OPERATION_GROUPS[value as HiveOperationGroup].forEach(\n (id) => operationIds.add(id)\n );\n return;\n }\n\n if (isHiveOperationName(value)) {\n operationIds.add(operationOrders[value]);\n }\n });\n }\n\n const filterArgs = makeBitMaskFilter(Array.from(operationIds));\n\n return {\n filterKey,\n filterArgs,\n };\n}\n\nfunction makeBitMaskFilter(allowedOperations: number[]) {\n let low = 0n;\n let high = 0n;\n\n allowedOperations.forEach((operation) => {\n if (operation < 64) {\n low |= 1n << BigInt(operation);\n } else {\n high |= 1n << BigInt(operation - 64);\n }\n });\n\n return [\n low !== 0n ? low.toString() : null,\n high !== 0n ? high.toString() : null,\n ];\n}\n\nexport function getHiveAssetTransactionsQueryOptions(\n username: string | undefined,\n limit = 20,\n filters: HiveOperationFilter = []\n) {\n const { filterArgs, filterKey } = resolveHiveOperationFilters(filters);\n\n return infiniteQueryOptions<HiveTransaction[]>({\n queryKey: [\"assets\", \"hive\", \"transactions\", username, limit, filterKey],\n initialData: { pages: [], pageParams: [] },\n initialPageParam: -1,\n getNextPageParam: (lastPage, __) =>\n lastPage ? +(lastPage[lastPage.length - 1]?.num ?? 0) - 1 : -1,\n\n queryFn: async ({ pageParam }) => {\n const response = await CONFIG.hiveClient.call(\n \"condenser_api\",\n \"get_account_history\",\n [username, pageParam, limit, ...filterArgs]\n );\n\n return response.map(\n (x: any) =>\n ({\n num: x[0],\n type: x[1].op[0],\n timestamp: x[1].timestamp,\n trx_id: x[1].trx_id,\n ...x[1].op[1],\n }) satisfies HiveTransaction\n );\n },\n select: ({ pages, pageParams }) => ({\n pageParams,\n pages: pages.map((page) =>\n page.filter((item) => {\n switch (item.type) {\n case \"author_reward\":\n case \"comment_benefactor_reward\":\n const hivePayout = parseAsset(\n (item as AuthorReward).hive_payout\n );\n return hivePayout.amount > 0;\n case \"transfer\":\n case \"transfer_to_savings\":\n case \"transfer_to_vesting\":\n case \"recurrent_transfer\":\n return parseAsset(item.amount).symbol === \"HIVE\";\n\n case \"transfer_from_savings\" as HiveOperationName:\n return parseAsset((item as any).amount).symbol === \"HIVE\";\n\n case \"fill_recurrent_transfer\":\n const asset = parseAsset(item.amount);\n return [\"HIVE\"].includes(asset.symbol);\n\n case \"claim_reward_balance\":\n const rewardHive = parseAsset(\n (item as ClaimRewardBalance).reward_hive\n );\n return rewardHive.amount > 0;\n\n case \"curation_reward\":\n case \"cancel_transfer_from_savings\":\n case \"fill_order\":\n case \"limit_order_create\":\n case \"limit_order_cancel\":\n case \"fill_convert_request\":\n case \"fill_collateralized_convert_request\":\n return true;\n\n case \"limit_order_create2\" as HiveOperationName:\n return true;\n default:\n return false;\n }\n })\n ),\n }),\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { parseAsset } from \"@/modules/core/utils\";\nimport type {\n AuthorReward,\n ClaimRewardBalance,\n HiveOperationFilter,\n HiveOperationName,\n} from \"../types\";\nimport type { HiveTransaction } from \"../types\";\nimport {\n getHiveAssetTransactionsQueryOptions,\n resolveHiveOperationFilters,\n} from \"./get-hive-asset-transactions-query-options\";\n\nexport function getHbdAssetTransactionsQueryOptions(\n username: string | undefined,\n limit = 20,\n filters: HiveOperationFilter = []\n) {\n const { filterKey } = resolveHiveOperationFilters(filters);\n\n return infiniteQueryOptions<HiveTransaction[]>({\n ...getHiveAssetTransactionsQueryOptions(username, limit, filters),\n queryKey: [\"assets\", \"hbd\", \"transactions\", username, limit, filterKey],\n select: ({ pages, pageParams }) => ({\n pageParams,\n pages: pages.map((page) =>\n page.filter((item) => {\n switch (item.type) {\n case \"author_reward\":\n case \"comment_benefactor_reward\":\n const hbdPayout = parseAsset(\n (item as AuthorReward).hbd_payout\n );\n return hbdPayout.amount > 0;\n\n case \"claim_reward_balance\":\n const rewardHbd = parseAsset(\n (item as ClaimRewardBalance).reward_hbd\n );\n return rewardHbd.amount > 0;\n\n case \"transfer\":\n case \"transfer_to_savings\":\n case \"transfer_to_vesting\":\n case \"recurrent_transfer\":\n return parseAsset(item.amount).symbol === \"HBD\";\n\n case \"transfer_from_savings\" as HiveOperationName:\n return parseAsset((item as any).amount).symbol === \"HBD\";\n\n case \"fill_recurrent_transfer\":\n const asset = parseAsset(item.amount);\n return [\"HBD\"].includes(asset.symbol);\n\n case \"cancel_transfer_from_savings\":\n case \"fill_order\":\n case \"limit_order_create\":\n case \"limit_order_cancel\":\n case \"fill_convert_request\":\n case \"fill_collateralized_convert_request\":\n case \"proposal_pay\":\n case \"interest\":\n return true;\n\n case \"limit_order_create2\" as HiveOperationName:\n return true;\n default:\n return false;\n }\n })\n ),\n }),\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { parseAsset } from \"@/modules/core/utils\";\nimport type {\n AuthorReward,\n ClaimRewardBalance,\n HiveOperationFilter,\n} from \"../types\";\nimport type { HiveTransaction } from \"../types\";\nimport {\n getHiveAssetTransactionsQueryOptions,\n resolveHiveOperationFilters,\n} from \"./get-hive-asset-transactions-query-options\";\n\nexport function getHivePowerAssetTransactionsQueryOptions(\n username: string | undefined,\n limit = 20,\n filters: HiveOperationFilter = []\n) {\n const { filterKey } = resolveHiveOperationFilters(filters);\n\n const userSelectedOperations = new Set<string>(\n Array.isArray(filters) ? filters : [filters]\n );\n const hasAllFilter =\n userSelectedOperations.has(\"\" as any) || userSelectedOperations.size === 0;\n\n return infiniteQueryOptions<HiveTransaction[]>({\n ...getHiveAssetTransactionsQueryOptions(username, limit, filters),\n queryKey: [\n \"assets\",\n \"hive-power\",\n \"transactions\",\n username,\n limit,\n filterKey,\n ],\n select: ({ pages, pageParams }) => ({\n pageParams,\n pages: pages.map((page) =>\n page.filter((item) => {\n switch (item.type) {\n case \"author_reward\":\n case \"comment_benefactor_reward\":\n const vestingPayout = parseAsset(\n (item as AuthorReward).vesting_payout\n );\n return vestingPayout.amount > 0;\n\n case \"claim_reward_balance\":\n const rewardVests = parseAsset(\n (item as ClaimRewardBalance).reward_vests\n );\n return rewardVests.amount > 0;\n\n case \"transfer_to_vesting\":\n return true;\n case \"transfer\":\n case \"transfer_to_savings\":\n case \"recurrent_transfer\":\n return [\"VESTS\", \"HP\"].includes(parseAsset(item.amount).symbol);\n\n case \"fill_recurrent_transfer\":\n const asset = parseAsset(item.amount);\n return [\"VESTS\", \"HP\"].includes(asset.symbol);\n\n case \"curation_reward\":\n case \"withdraw_vesting\":\n case \"delegate_vesting_shares\":\n case \"fill_vesting_withdraw\":\n case \"return_vesting_delegation\":\n case \"producer_reward\":\n case \"set_withdraw_vesting_route\":\n return true;\n default:\n return hasAllFilter || userSelectedOperations.has(item.type);\n }\n })\n ),\n }),\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport type { HiveMarketMetric } from \"../types\";\nimport { CONFIG } from \"@/modules/core/config\";\n\nfunction formatDate(date: Date): string {\n const pad = (n: number) => n.toString().padStart(2, \"0\");\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;\n}\n\nfunction subtractSeconds(date: Date, seconds: number): Date {\n return new Date(date.getTime() - seconds * 1000);\n}\n\nexport function getHiveAssetMetricQueryOptions(bucketSeconds = 86_400) {\n return infiniteQueryOptions({\n queryKey: [\"assets\", \"hive\", \"metrics\", bucketSeconds],\n queryFn: async ({ pageParam: [startDate, endDate] }) => {\n const apiData: HiveMarketMetric[] = await CONFIG.hiveClient.call(\n \"condenser_api\",\n \"get_market_history\",\n [bucketSeconds, formatDate(startDate), formatDate(endDate)]\n );\n\n return apiData.map(({ hive, non_hive, open }) => ({\n close: non_hive.close / hive.close,\n open: non_hive.open / hive.open,\n low: non_hive.low / hive.low,\n high: non_hive.high / hive.high,\n volume: hive.volume,\n time: new Date(open),\n }));\n },\n initialPageParam: [\n subtractSeconds(new Date(), Math.max(100 * bucketSeconds, 28_800)),\n new Date(),\n ],\n getNextPageParam: (_, __, [prevStartDate]) => [\n subtractSeconds(prevStartDate, Math.max(100 * bucketSeconds, 28_800)),\n subtractSeconds(prevStartDate, bucketSeconds),\n ],\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport type { WithdrawRoute } from \"../types\";\n\nexport function getHiveAssetWithdrawalRoutesQueryOptions(\n username: string | undefined\n) {\n return queryOptions({\n queryKey: [\"assets\", \"hive\", \"withdrawal-routes\", username],\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_withdraw_routes\", [\n username,\n \"outgoing\",\n ]) as Promise<WithdrawRoute[]>,\n enabled: !!username,\n });\n}\n","import { CONFIG } from \"@/modules/core/config\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { DelegatedVestingShare } from \"../types\";\n\nexport function getHivePowerDelegatesInfiniteQueryOptions(\n username: string,\n limit = 50\n) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-power\", \"delegates\", username],\n enabled: !!username,\n queryFn: () =>\n CONFIG.hiveClient.database.call(\"get_vesting_delegations\", [\n username,\n \"\",\n limit,\n ]) as Promise<DelegatedVestingShare[]>,\n });\n}\n","import { CONFIG } from \"@/modules/core/config\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { ReceivedVestingShare } from \"../types\";\nimport { parseAsset } from \"@/modules/core/utils\";\n\nexport function getHivePowerDelegatingsQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-power\", \"delegatings\", username],\n queryFn: async () => {\n const response = await fetch(\n CONFIG.privateApiHost + `/private-api/received-vesting/${username}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n return (await response.json()).list as ReceivedVestingShare[];\n },\n select: (data) =>\n data.sort(\n (a, b) =>\n parseAsset(b.vesting_shares).amount -\n parseAsset(a.vesting_shares).amount\n ),\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { OrdersData } from \"../types\";\n\n/**\n * Get the internal HIVE/HBD market order book\n *\n * @param limit - Maximum number of orders to fetch (default: 500)\n */\nexport function getOrderBookQueryOptions(limit = 500) {\n return queryOptions({\n queryKey: [\"market\", \"order-book\", limit],\n queryFn: () =>\n CONFIG.hiveClient.call(\"condenser_api\", \"get_order_book\", [\n limit,\n ]) as Promise<OrdersData>,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { MarketStatistics } from \"../types\";\n\n/**\n * Get HIVE/HBD market statistics from the blockchain\n */\nexport function getMarketStatisticsQueryOptions() {\n return queryOptions({\n queryKey: [\"market\", \"statistics\"],\n queryFn: () =>\n CONFIG.hiveClient.call(\"condenser_api\", \"get_ticker\", []) as Promise<MarketStatistics>,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { MarketCandlestickDataItem } from \"../types\";\n\n/**\n * Get HIVE/HBD market history (candlestick data)\n *\n * @param seconds - Bucket size in seconds\n * @param startDate - Start date for the data\n * @param endDate - End date for the data\n */\nexport function getMarketHistoryQueryOptions(\n seconds: number,\n startDate: Date,\n endDate: Date\n) {\n const formatDate = (date: Date) => {\n return date.toISOString().replace(/\\.\\d{3}Z$/, \"\");\n };\n\n return queryOptions({\n queryKey: [\"market\", \"history\", seconds, startDate.getTime(), endDate.getTime()],\n queryFn: () =>\n CONFIG.hiveClient.call(\"condenser_api\", \"get_market_history\", [\n seconds,\n formatDate(startDate),\n formatDate(endDate),\n ]) as Promise<MarketCandlestickDataItem[]>,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { HiveHbdStats, MarketCandlestickDataItem, MarketStatistics } from \"../types\";\n\n/**\n * Get combined HIVE/HBD statistics including price, 24h change, and volume\n */\nexport function getHiveHbdStatsQueryOptions() {\n return queryOptions({\n queryKey: [\"market\", \"hive-hbd-stats\"],\n queryFn: async () => {\n // Get current market statistics\n const stats = (await CONFIG.hiveClient.call(\n \"condenser_api\",\n \"get_ticker\",\n []\n )) as MarketStatistics;\n\n // Get 24h market history\n const now = new Date();\n const oneDayAgo = new Date(now.getTime() - 86400000); // 24 hours ago\n\n const formatDate = (date: Date) => {\n return date.toISOString().replace(/\\.\\d{3}Z$/, \"\");\n };\n\n const dayChange = (await CONFIG.hiveClient.call(\n \"condenser_api\",\n \"get_market_history\",\n [86400, formatDate(oneDayAgo), formatDate(now)]\n )) as MarketCandlestickDataItem[];\n\n // Calculate stats\n const result: HiveHbdStats = {\n price: +stats.latest,\n close: dayChange[0] ? dayChange[0].non_hive.open / dayChange[0].hive.open : 0,\n high: dayChange[0] ? dayChange[0].non_hive.high / dayChange[0].hive.high : 0,\n low: dayChange[0] ? dayChange[0].non_hive.low / dayChange[0].hive.low : 0,\n percent: dayChange[0]\n ? 100 - ((dayChange[0].non_hive.open / dayChange[0].hive.open) * 100) / +stats.latest\n : 0,\n totalFromAsset: stats.hive_volume.split(\" \")[0],\n totalToAsset: stats.hbd_volume.split(\" \")[0],\n };\n\n return result;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { MarketData } from \"../types\";\nimport { getBoundFetch } from \"@/modules/core\";\n\n/**\n * Get market chart data from CoinGecko API\n *\n * @param coin - Coin ID (e.g., \"hive\", \"bitcoin\")\n * @param vsCurrency - Currency to compare against (e.g., \"usd\", \"eur\")\n * @param fromTs - From timestamp (Unix timestamp in seconds)\n * @param toTs - To timestamp (Unix timestamp in seconds)\n */\nexport function getMarketDataQueryOptions(\n coin: string,\n vsCurrency: string,\n fromTs: string,\n toTs: string\n) {\n return queryOptions({\n queryKey: [\"market\", \"data\", coin, vsCurrency, fromTs, toTs],\n queryFn: async ({ signal }) => {\n const fetchApi = getBoundFetch();\n const url = `https://api.coingecko.com/api/v3/coins/${coin}/market_chart/range?vs_currency=${vsCurrency}&from=${fromTs}&to=${toTs}`;\n\n const response = await fetchApi(url, { signal });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch market data: ${response.status}`);\n }\n\n return response.json() as Promise<MarketData>;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { OrdersDataItem } from \"../types\";\n\nfunction formatDate(date: Date) {\n return date.toISOString().replace(/\\.\\d{3}Z$/, \"\");\n}\n\nexport function getTradeHistoryQueryOptions(\n limit = 1000,\n startDate?: Date,\n endDate?: Date\n) {\n const end = endDate ?? new Date();\n const start =\n startDate ?? new Date(end.getTime() - 10 * 60 * 60 * 1000);\n\n return queryOptions({\n queryKey: [\"market\", \"trade-history\", limit, start.getTime(), end.getTime()],\n queryFn: () =>\n CONFIG.hiveClient.call(\"condenser_api\", \"get_trade_history\", [\n formatDate(start),\n formatDate(end),\n limit,\n ]) as Promise<OrdersDataItem[]>,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\n\nexport interface FeedHistoryItem {\n id: number;\n current_median_history: {\n base: string;\n quote: string;\n };\n market_median_history: {\n base: string;\n quote: string;\n };\n current_min_history: {\n base: string;\n quote: string;\n };\n current_max_history: {\n base: string;\n quote: string;\n };\n price_history: Array<{\n base: string;\n quote: string;\n }>;\n}\n\n/**\n * Get feed history from the blockchain\n * Returns price feed history including median prices\n */\nexport function getFeedHistoryQueryOptions() {\n return queryOptions({\n queryKey: [\"market\", \"feed-history\"],\n queryFn: async () => {\n try {\n const feedHistory = await CONFIG.hiveClient.database.call(\"get_feed_history\");\n return feedHistory as FeedHistoryItem;\n } catch (error) {\n throw error;\n }\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\n\nexport interface MedianHistoryPrice {\n base: string;\n quote: string;\n}\n\n/**\n * Get current median history price from the blockchain\n * Returns the current median price for HIVE/HBD conversion\n */\nexport function getCurrentMedianHistoryPriceQueryOptions() {\n return queryOptions({\n queryKey: [\"market\", \"current-median-history-price\"],\n queryFn: async () => {\n try {\n const price = await CONFIG.hiveClient.database.call(\n \"get_current_median_history_price\"\n );\n return price as MedianHistoryPrice;\n } catch (error) {\n throw error;\n }\n },\n });\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildLimitOrderCreateOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface LimitOrderCreatePayload {\n amountToSell: string;\n minToReceive: string;\n fillOrKill: boolean;\n expiration: string;\n orderId: number;\n}\n\nexport function useLimitOrderCreate(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<LimitOrderCreatePayload>(\n [\"market\", \"limit-order-create\"],\n username,\n (payload) => [\n buildLimitOrderCreateOp(\n username!,\n payload.amountToSell,\n payload.minToReceive,\n payload.fillOrKill,\n payload.expiration,\n payload.orderId\n )\n ],\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.wallet.openOrders(username!),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username],\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildLimitOrderCancelOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface LimitOrderCancelPayload {\n orderId: number;\n}\n\nexport function useLimitOrderCancel(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<LimitOrderCancelPayload>(\n [\"market\", \"limit-order-cancel\"],\n username,\n ({ orderId }) => [\n buildLimitOrderCancelOp(username!, orderId)\n ],\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.wallet.openOrders(username!),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username],\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { MarketData } from \"./types\";\nimport { CurrencyRates } from \"@/modules/private-api/types\";\n\ntype RequestError = Error & { status?: number; data?: unknown };\n\nasync function parseJsonResponse<T>(response: Response): Promise<T> {\n const data = (await response.json()) as T;\n if (!response.ok) {\n const error = new Error(`Request failed with status ${response.status}`) as RequestError;\n error.status = response.status;\n error.data = data;\n throw error;\n }\n\n return data;\n}\n\nexport async function getMarketData(\n coin: string,\n vsCurrency: string,\n fromTs: string,\n toTs: string\n): Promise<MarketData> {\n const fetchApi = getBoundFetch();\n const url = `https://api.coingecko.com/api/v3/coins/${coin}/market_chart/range?vs_currency=${vsCurrency}&from=${fromTs}&to=${toTs}`;\n const response = await fetchApi(url);\n return parseJsonResponse<MarketData>(response);\n}\n\nexport async function getCurrencyRate(cur: string): Promise<number> {\n if (cur === \"hbd\") {\n return 1;\n }\n\n const fetchApi = getBoundFetch();\n const url = `https://api.coingecko.com/api/v3/simple/price?ids=hive_dollar&vs_currencies=${cur}`;\n const response = await fetchApi(url);\n const data = await parseJsonResponse<{ hive_dollar: Record<string, number> }>(response);\n return data.hive_dollar[cur];\n}\n\nexport async function getCurrencyTokenRate(currency: string, token: string): Promise<number> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost +\n `/private-api/market-data/${currency === \"hbd\" ? \"usd\" : currency}/${token}`\n );\n\n return parseJsonResponse<number>(response);\n}\n\nexport async function getCurrencyRates(): Promise<CurrencyRates> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/private-api/market-data/latest\");\n return parseJsonResponse<CurrencyRates>(response);\n}\n\nexport async function getHivePrice(): Promise<{ hive: { usd: number } }> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n \"https://api.coingecko.com/api/v3/simple/price?ids=hive&vs_currencies=usd\"\n );\n return parseJsonResponse<{ hive: { usd: number } }>(response);\n}\n","import { ConfigManager, getBoundFetch } from \"@/modules/core\";\nimport type { HiveEngineOpenOrder } from \"./types\";\n\ntype EngineOrderBookEntry = {\n txId: string;\n timestamp: number;\n account: string;\n symbol: string;\n quantity: string;\n price: string;\n tokensLocked?: string;\n};\n\nconst ENGINE_RPC_HEADERS = { \"Content-type\": \"application/json\" };\n\nasync function engineRpc<T>(payload: Record<string, unknown>): Promise<T> {\n const fetchApi = getBoundFetch();\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const response = await fetchApi(`${baseUrl}/private-api/engine-api`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n headers: ENGINE_RPC_HEADERS,\n });\n\n if (!response.ok) {\n throw new Error(\n `[SDK][HiveEngine] – request failed with ${response.status}`\n );\n }\n\n const data = (await response.json()) as { result: T };\n return data.result;\n}\n\nasync function engineRpcSafe<T>(\n payload: Record<string, unknown>,\n fallback: T\n): Promise<T> {\n try {\n return await engineRpc<T>(payload);\n } catch (e) {\n return fallback;\n }\n}\n\nexport async function getHiveEngineOrderBook<T = EngineOrderBookEntry>(\n symbol: string,\n limit: number = 50\n): Promise<{ buy: T[]; sell: T[] }> {\n const baseParams = {\n jsonrpc: \"2.0\",\n method: \"find\",\n params: {\n contract: \"market\",\n query: { symbol },\n limit,\n offset: 0,\n },\n id: 1,\n };\n\n const [buy, sell] = await Promise.all([\n engineRpcSafe<T[]>(\n {\n ...baseParams,\n params: {\n ...baseParams.params,\n table: \"buyBook\",\n indexes: [{ index: \"price\", descending: true }],\n },\n },\n []\n ),\n engineRpcSafe<T[]>(\n {\n ...baseParams,\n params: {\n ...baseParams.params,\n table: \"sellBook\",\n indexes: [{ index: \"price\", descending: false }],\n },\n },\n []\n ),\n ]);\n\n const sortByPriceDesc = (items: T[]) =>\n items.sort((a, b) => {\n const left = Number((a as EngineOrderBookEntry).price ?? 0);\n const right = Number((b as EngineOrderBookEntry).price ?? 0);\n return right - left;\n });\n const sortByPriceAsc = (items: T[]) =>\n items.sort((a, b) => {\n const left = Number((a as EngineOrderBookEntry).price ?? 0);\n const right = Number((b as EngineOrderBookEntry).price ?? 0);\n return left - right;\n });\n\n return {\n buy: sortByPriceDesc(buy),\n sell: sortByPriceAsc(sell),\n };\n}\n\nexport async function getHiveEngineTradeHistory<T = Record<string, unknown>>(\n symbol: string,\n limit: number = 50\n): Promise<T[]> {\n return engineRpcSafe<T[]>(\n {\n jsonrpc: \"2.0\",\n method: \"find\",\n params: {\n contract: \"market\",\n table: \"tradesHistory\",\n query: { symbol },\n limit,\n offset: 0,\n indexes: [{ index: \"timestamp\", descending: true }],\n },\n id: 1,\n },\n []\n );\n}\n\nexport async function getHiveEngineOpenOrders<T = HiveEngineOpenOrder>(\n account: string,\n symbol: string,\n limit: number = 100\n): Promise<T[]> {\n const baseParams = {\n jsonrpc: \"2.0\",\n method: \"find\",\n params: {\n contract: \"market\",\n query: { symbol, account },\n limit,\n offset: 0,\n },\n id: 1,\n };\n\n const [buyRaw, sellRaw] = await Promise.all([\n engineRpcSafe<EngineOrderBookEntry[]>(\n {\n ...baseParams,\n params: {\n ...baseParams.params,\n table: \"buyBook\",\n indexes: [{ index: \"timestamp\", descending: true }],\n },\n },\n []\n ),\n engineRpcSafe<EngineOrderBookEntry[]>(\n {\n ...baseParams,\n params: {\n ...baseParams.params,\n table: \"sellBook\",\n indexes: [{ index: \"timestamp\", descending: true }],\n },\n },\n []\n ),\n ]);\n\n const formatTotal = (quantity: string, price: string) =>\n (Number(quantity || 0) * Number(price || 0)).toFixed(8);\n\n const buy: HiveEngineOpenOrder[] = buyRaw.map((order) => ({\n id: order.txId,\n type: \"buy\",\n account: order.account,\n symbol: order.symbol,\n quantity: order.quantity,\n price: order.price,\n total: order.tokensLocked ?? formatTotal(order.quantity, order.price),\n timestamp: Number(order.timestamp ?? 0),\n }));\n\n const sell: HiveEngineOpenOrder[] = sellRaw.map((order) => ({\n id: order.txId,\n type: \"sell\",\n account: order.account,\n symbol: order.symbol,\n quantity: order.quantity,\n price: order.price,\n total: formatTotal(order.quantity, order.price),\n timestamp: Number(order.timestamp ?? 0),\n }));\n\n return [...buy, ...sell].sort((a, b) => b.timestamp - a.timestamp) as T[];\n}\n\nexport async function getHiveEngineMetrics<T = Record<string, unknown>>(\n symbol?: string,\n account?: string\n): Promise<T[]> {\n return engineRpcSafe<T[]>(\n {\n jsonrpc: \"2.0\",\n method: \"find\",\n params: {\n contract: \"market\",\n table: \"metrics\",\n query: {\n ...(symbol ? { symbol } : {}),\n ...(account ? { account } : {}),\n },\n },\n id: 1,\n },\n []\n );\n}\n\nexport async function getHiveEngineTokensMarket<T = Record<string, unknown>>(\n account?: string,\n symbol?: string\n): Promise<T[]> {\n return getHiveEngineMetrics<T>(symbol, account);\n}\n\nexport async function getHiveEngineTokensBalances<T = Record<string, unknown>>(\n username: string\n): Promise<T[]> {\n return engineRpcSafe<T[]>(\n {\n jsonrpc: \"2.0\",\n method: \"find\",\n params: {\n contract: \"tokens\",\n table: \"balances\",\n query: {\n account: username,\n },\n },\n id: 1,\n },\n []\n );\n}\n\nexport async function getHiveEngineTokensMetadata<T = Record<string, unknown>>(\n tokens: string[]\n): Promise<T[]> {\n return engineRpcSafe<T[]>(\n {\n jsonrpc: \"2.0\",\n method: \"find\",\n params: {\n contract: \"tokens\",\n table: \"tokens\",\n query: {\n symbol: { $in: tokens },\n },\n },\n id: 2,\n },\n []\n );\n}\n\nexport async function getHiveEngineTokenTransactions<T = Record<string, unknown>>(\n username: string,\n symbol: string,\n limit: number,\n offset: number\n): Promise<T[]> {\n const fetchApi = getBoundFetch();\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const url = new URL(\"/private-api/engine-account-history\", baseUrl);\n url.searchParams.set(\"account\", username);\n url.searchParams.set(\"symbol\", symbol);\n url.searchParams.set(\"limit\", limit.toString());\n url.searchParams.set(\"offset\", offset.toString());\n\n const response = await fetchApi(url.toString(), {\n method: \"GET\",\n headers: { \"Content-type\": \"application/json\" },\n });\n\n if (!response.ok) {\n throw new Error(\n `[SDK][HiveEngine] – account history failed with ${response.status}`\n );\n }\n\n return (await response.json()) as T[];\n}\n\nexport async function getHiveEngineTokenMetrics<T = Record<string, unknown>>(\n symbol: string,\n interval = \"daily\"\n): Promise<T[]> {\n const fetchApi = getBoundFetch();\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const url = new URL(\"/private-api/engine-chart-api\", baseUrl);\n url.searchParams.set(\"symbol\", symbol);\n url.searchParams.set(\"interval\", interval);\n\n const response = await fetchApi(url.toString(), {\n headers: { \"Content-type\": \"application/json\" },\n });\n\n if (!response.ok) {\n throw new Error(\n `[SDK][HiveEngine] – chart failed with ${response.status}`\n );\n }\n\n return (await response.json()) as T[];\n}\n\nexport async function getHiveEngineUnclaimedRewards<T = Record<string, unknown>>(\n username: string\n): Promise<Record<string, T>> {\n const fetchApi = getBoundFetch();\n const baseUrl = ConfigManager.getValidatedBaseUrl();\n const response = await fetchApi(\n `${baseUrl}/private-api/engine-reward-api/${username}?hive=1`\n );\n\n if (!response.ok) {\n throw new Error(\n `[SDK][HiveEngine] – rewards failed with ${response.status}`\n );\n }\n\n return (await response.json()) as Record<string, T>;\n}\n","import { getHiveEngineTokensBalances } from \"../requests\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { HiveEngineTokenBalance } from \"../types\";\n\nexport function getHiveEngineTokensBalancesQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-engine\", \"balances\", username] as const,\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n return getHiveEngineTokensBalances<HiveEngineTokenBalance>(username);\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport type { HiveEngineMarketResponse } from \"../types\";\nimport { getHiveEngineTokensMarket } from \"../requests\";\n\nexport function getHiveEngineTokensMarketQueryOptions() {\n return queryOptions({\n queryKey: [\"assets\", \"hive-engine\", \"markets\"],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n return getHiveEngineTokensMarket<HiveEngineMarketResponse>();\n },\n });\n}\n","import { getHiveEngineTokensMetadata } from \"../requests\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { HiveEngineTokenMetadataResponse } from \"../types\";\n\nexport function getHiveEngineTokensMetadataQueryOptions(tokens: string[]) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-engine\", \"metadata-list\", tokens] as const,\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n return getHiveEngineTokensMetadata<HiveEngineTokenMetadataResponse>(tokens);\n },\n });\n}\n","import { getHiveEngineTokenTransactions } from \"../requests\";\nimport { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport type { HiveEngineTransaction } from \"../types\";\n\nexport function getHiveEngineTokenTransactionsQueryOptions(\n username: string | undefined,\n symbol: string,\n limit = 20\n) {\n return infiniteQueryOptions<HiveEngineTransaction[]>({\n queryKey: [\"assets\", \"hive-engine\", symbol, \"transactions\", username],\n enabled: !!symbol && !!username,\n initialPageParam: 0,\n getNextPageParam: (lastPage) => (lastPage?.length ?? 0) + limit,\n queryFn: async ({ pageParam }) => {\n if (!symbol || !username) {\n throw new Error(\n \"[SDK][HiveEngine] – token or username missed\"\n );\n }\n return getHiveEngineTokenTransactions<HiveEngineTransaction>(\n username,\n symbol,\n limit,\n pageParam as number\n );\n },\n });\n}\n","import { getHiveEngineTokenMetrics } from \"../requests\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { HiveEngineMetric } from \"../types\";\n\nexport function getHiveEngineTokensMetricsQueryOptions(\n symbol: string,\n interval = \"daily\"\n) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-engine\", symbol],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n return getHiveEngineTokenMetrics<HiveEngineMetric>(symbol, interval);\n },\n });\n}\n","import { getHiveEngineUnclaimedRewards } from \"../requests\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { HiveEngineTokenStatus } from \"../types\";\n\nexport function getHiveEngineUnclaimedRewardsQueryOptions(\n username: string | undefined\n) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-engine\", \"unclaimed\", username],\n staleTime: 60000,\n refetchInterval: 90000,\n enabled: !!username,\n queryFn: async () => {\n try {\n const data = await getHiveEngineUnclaimedRewards<HiveEngineTokenStatus>(\n username as string\n );\n return Object.values(data).filter(\n ({ pending_token }) => pending_token > 0\n );\n } catch (e) {\n return [];\n }\n },\n });\n}\n","import { getHiveEngineTokensMarket } from \"../requests\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { HiveEngineTokenInfo } from \"../types\";\n\nexport function getAllHiveEngineTokensQueryOptions(\n account?: string,\n symbol?: string\n) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-engine\", \"all-tokens\", account, symbol] as const,\n queryFn: async () => {\n return getHiveEngineTokensMarket<HiveEngineTokenInfo>(account, symbol);\n },\n });\n}\n","interface Options {\n fractionDigits?: number;\n prefix?: string;\n suffix?: string;\n}\n\nexport function formattedNumber(\n value: number | string,\n options: Options | undefined = undefined\n) {\n let opts: Options = {\n fractionDigits: 3,\n prefix: \"\",\n suffix: \"\",\n };\n\n if (options) {\n opts = { ...opts, ...options };\n }\n\n const { fractionDigits, prefix, suffix } = opts;\n\n let out = \"\";\n\n if (prefix) out += prefix + \" \";\n // turn too small values to zero. Bug: https://github.com/adamwdraper/Numeral-js/issues/563\n const av = Math.abs(parseFloat(value.toString())) < 0.0001 ? 0 : value;\n const num = typeof av === \"string\" ? parseFloat(av) : av;\n out += num.toLocaleString(\"en-US\", {\n minimumFractionDigits: fractionDigits,\n maximumFractionDigits: fractionDigits,\n useGrouping: true,\n });\n if (suffix) out += \" \" + suffix;\n\n return out;\n}\n","import { formattedNumber } from \"./formatted-number\";\n\ninterface HiveEngineTokenProps {\n symbol: string;\n name: string;\n icon: string;\n precision: number;\n stakingEnabled: boolean;\n delegationEnabled: boolean;\n balance: string;\n stake: string;\n delegationsIn: string;\n delegationsOut: string;\n usdValue: number;\n}\n\nexport class HiveEngineToken {\n symbol: string;\n name?: string;\n icon?: string;\n\n precision?: number;\n stakingEnabled?: boolean;\n delegationEnabled?: boolean;\n balance: number;\n stake: number;\n stakedBalance: number;\n delegationsIn: number;\n delegationsOut: number;\n usdValue: number;\n\n constructor(props: HiveEngineTokenProps) {\n this.symbol = props.symbol;\n this.name = props.name || \"\";\n this.icon = props.icon || \"\";\n\n this.precision = props.precision || 0;\n this.stakingEnabled = props.stakingEnabled || false;\n this.delegationEnabled = props.delegationEnabled || false;\n this.balance = parseFloat(props.balance) || 0;\n this.stake = parseFloat(props.stake) || 0;\n this.delegationsIn = parseFloat(props.delegationsIn) || 0;\n this.delegationsOut = parseFloat(props.delegationsOut) || 0;\n this.stakedBalance =\n this.stake + this.delegationsIn - this.delegationsOut;\n this.usdValue = props.usdValue;\n }\n\n hasDelegations = (): boolean => {\n if (!this.delegationEnabled) {\n return false;\n }\n\n return this.delegationsIn > 0 && this.delegationsOut > 0;\n };\n\n delegations = (): string => {\n if (!this.hasDelegations()) {\n return \"\";\n }\n\n return `(${formattedNumber(this.stake, {\n fractionDigits: this.precision,\n })} + ${formattedNumber(this.delegationsIn, {\n fractionDigits: this.precision,\n })} - ${formattedNumber(this.delegationsOut, {\n fractionDigits: this.precision,\n })})`;\n };\n\n staked = (): string => {\n if (!this.stakingEnabled) {\n return \"-\";\n }\n\n if (this.stakedBalance < 0.0001) {\n return this.stakedBalance.toString();\n }\n\n return formattedNumber(this.stakedBalance, {\n fractionDigits: this.precision,\n });\n };\n\n balanced = (): string => {\n if (this.balance < 0.0001) {\n return this.balance.toString();\n }\n\n return formattedNumber(this.balance, { fractionDigits: this.precision });\n };\n}\n","import { getHiveEngineTokensBalances, getHiveEngineTokensMetadata } from \"../requests\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type {\n HiveEngineTokenBalance,\n Token,\n TokenMetadata,\n HiveEngineTokenInfo,\n} from \"../types\";\nimport { HiveEngineToken } from \"../utils\";\n\ninterface DynamicProps {\n base: number;\n quote: number;\n}\n\nexport function getHiveEngineBalancesWithUsdQueryOptions(\n account: string,\n dynamicProps?: DynamicProps,\n allTokens?: HiveEngineTokenInfo[]\n) {\n return queryOptions({\n queryKey: [\n \"assets\",\n \"hive-engine\",\n \"balances-with-usd\",\n account,\n dynamicProps,\n allTokens,\n ] as const,\n queryFn: async () => {\n if (!account) {\n throw new Error(\"[HiveEngine] No account in a balances query\");\n }\n\n const balances = await getHiveEngineTokensBalances<HiveEngineTokenBalance>(account);\n\n const tokens = await getHiveEngineTokensMetadata<Token>(\n balances.map((t) => t.symbol)\n );\n\n const pricePerHive = dynamicProps\n ? dynamicProps.base / dynamicProps.quote\n : 0;\n const metrics: ReadonlyArray<HiveEngineTokenInfo> = Array.isArray(\n allTokens\n )\n ? allTokens\n : [];\n\n return balances.map((balance) => {\n const token = tokens.find((t) => t.symbol === balance.symbol);\n let tokenMetadata: TokenMetadata | undefined;\n\n if (token?.metadata) {\n try {\n tokenMetadata = JSON.parse(token.metadata) as TokenMetadata;\n } catch {\n tokenMetadata = undefined;\n }\n }\n\n const metric = metrics.find((m) => m.symbol === balance.symbol);\n const lastPrice = Number(metric?.lastPrice ?? \"0\");\n const balanceAmount = Number(balance.balance);\n\n const usdValue =\n balance.symbol === \"SWAP.HIVE\"\n ? pricePerHive * balanceAmount\n : lastPrice === 0\n ? 0\n : Number(\n (lastPrice * pricePerHive * balanceAmount).toFixed(10)\n );\n\n return new HiveEngineToken({\n symbol: balance.symbol,\n name: token?.name ?? balance.symbol,\n icon: tokenMetadata?.icon ?? \"\",\n precision: token?.precision ?? 0,\n stakingEnabled: token?.stakingEnabled ?? false,\n delegationEnabled: token?.delegationEnabled ?? false,\n balance: balance.balance,\n stake: balance.stake,\n delegationsIn: balance.delegationsIn,\n delegationsOut: balance.delegationsOut,\n usdValue,\n });\n });\n },\n enabled: !!account,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { getQueryClient } from \"@/modules/core\";\nimport type { GeneralAssetInfo } from \"@/modules/wallet/types\";\nimport { getHiveEngineTokensMetadataQueryOptions } from \"./get-hive-engine-tokens-metadata-query-options\";\nimport { getHiveEngineTokensBalancesQueryOptions } from \"./get-hive-engine-tokens-balances-query-options\";\nimport { getHiveEngineTokensMarketQueryOptions } from \"./get-hive-engine-tokens-market-query-options\";\nimport { getHiveAssetGeneralInfoQueryOptions } from \"@/modules/wallet/queries/get-hive-asset-general-info-query-options\";\n\nexport function getHiveEngineTokenGeneralInfoQueryOptions(\n username?: string,\n symbol?: string\n) {\n return queryOptions({\n queryKey: [\"assets\", \"hive-engine\", symbol, \"general-info\", username],\n enabled: !!symbol && !!username,\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n if (!symbol || !username) {\n throw new Error(\n \"[SDK][HiveEngine] – token or username missed\"\n );\n }\n const queryClient = getQueryClient();\n const hiveQuery = getHiveAssetGeneralInfoQueryOptions(username);\n await queryClient.prefetchQuery(hiveQuery);\n const hiveData = queryClient.getQueryData<GeneralAssetInfo>(\n hiveQuery.queryKey\n );\n\n const metadataList = await queryClient.ensureQueryData(\n getHiveEngineTokensMetadataQueryOptions([symbol])\n );\n\n const balanceList = await queryClient.ensureQueryData(\n getHiveEngineTokensBalancesQueryOptions(username)\n );\n\n const marketList = await queryClient.ensureQueryData(\n getHiveEngineTokensMarketQueryOptions()\n );\n\n const metadata = metadataList?.find((i) => i.symbol === symbol);\n const balance = balanceList?.find((i) => i.symbol === symbol);\n const market = marketList?.find((i) => i.symbol === symbol);\n\n const lastPrice = +(market?.lastPrice ?? \"0\");\n\n const liquidBalance = parseFloat(balance?.balance ?? \"0\");\n const stakedBalance = parseFloat(balance?.stake ?? \"0\");\n const unstakingBalance = parseFloat(balance?.pendingUnstake ?? \"0\");\n\n const parts: GeneralAssetInfo[\"parts\"] = [\n { name: \"liquid\", balance: liquidBalance },\n { name: \"staked\", balance: stakedBalance },\n ];\n\n if (unstakingBalance > 0) {\n parts.push({ name: \"unstaking\", balance: unstakingBalance });\n }\n\n return {\n name: symbol,\n title: metadata?.name ?? \"\",\n price: lastPrice === 0 ? 0 : Number(lastPrice * (hiveData?.price ?? 0)),\n accountBalance: liquidBalance + stakedBalance,\n layer: \"ENGINE\",\n parts,\n } satisfies GeneralAssetInfo;\n },\n });\n}\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\n\nexport async function getSpkWallet<T = Record<string, unknown>>(\n username: string\n): Promise<T> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(`${CONFIG.spkNode}/@${username}`);\n\n if (!response.ok) {\n throw new Error(`[SDK][SPK] – wallet failed with ${response.status}`);\n }\n\n return (await response.json()) as T;\n}\n\nexport async function getSpkMarkets<T = Record<string, unknown>>(): Promise<T> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(`${CONFIG.spkNode}/markets`);\n\n if (!response.ok) {\n throw new Error(`[SDK][SPK] – markets failed with ${response.status}`);\n }\n\n return (await response.json()) as T;\n}\n","import { getSpkWallet } from \"../requests\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { SpkApiWallet } from \"../types\";\n\nexport function getSpkWalletQueryOptions(username?: string) {\n return queryOptions({\n queryKey: [\"assets\", \"spk\", \"wallet\", username],\n queryFn: async () => {\n if (!username) {\n throw new Error(\"[SDK][SPK] – username wasn't provided\");\n }\n return getSpkWallet<SpkApiWallet>(username);\n },\n enabled: !!username,\n staleTime: 60000,\n refetchInterval: 90000,\n });\n}\n","import { getSpkMarkets } from \"../requests\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { SpkMarkets, TransformedSpkMarkets } from \"../types\";\n\nexport function getSpkMarketsQueryOptions() {\n return queryOptions({\n queryKey: [\"assets\", \"spk\", \"markets\"],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n const data = await getSpkMarkets<SpkMarkets>();\n\n return {\n list: Object.entries(data.markets.node).map(([name, node]) => ({\n name,\n status:\n node.lastGood >= data.head_block - 1200\n ? \"🟩\"\n : node.lastGood > data.head_block - 28800\n ? \"🟨\"\n : \"🟥\",\n })),\n raw: data,\n } satisfies TransformedSpkMarkets;\n },\n });\n}\n","import { SpkApiWallet } from \"../types\";\n\nexport function rewardSpk(data: SpkApiWallet, sstats: any) {\n let a = 0,\n b = 0,\n c = 0,\n t = 0,\n diff = data.head_block - data.spk_block;\n if (!data.spk_block) {\n return 0;\n } else if (diff < 28800) {\n return 0;\n } else {\n t = diff / 28800;\n a = data.gov ? simpleInterest(data.gov, t, sstats.spk_rate_lgov) : 0;\n b = data.pow ? simpleInterest(data.pow, t, sstats.spk_rate_lpow) : 0;\n c = simpleInterest(\n (data.granted.t > 0 ? data.granted.t : 0) +\n (data.granting.t && data.granting.t > 0 ? data.granting.t : 0),\n t,\n sstats.spk_rate_ldel\n );\n const i = a + b + c;\n if (i) {\n return i;\n } else {\n return 0;\n }\n }\n function simpleInterest(p: number, t: number, r: number) {\n const amount = p * (1 + r / 365);\n const interest = amount - p;\n return interest * t;\n }\n}\n","import { getQueryClient } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { getHiveAssetGeneralInfoQueryOptions } from \"@/modules/wallet/queries/get-hive-asset-general-info-query-options\";\nimport type { GeneralAssetInfo } from \"@/modules/wallet/types\";\nimport type { SpkApiWallet, TransformedSpkMarkets } from \"../types\";\nimport { rewardSpk } from \"../utils\";\nimport { getSpkMarketsQueryOptions } from \"./get-spk-markets-query-options\";\nimport { getSpkWalletQueryOptions } from \"./get-spk-wallet-query-options\";\n\nfunction format(value: number) {\n return value.toFixed(3);\n}\n\nexport function getSpkAssetGeneralInfoQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"spk\", \"general-info\", username],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n await getQueryClient().prefetchQuery(getSpkWalletQueryOptions(username));\n await getQueryClient().prefetchQuery(getSpkMarketsQueryOptions());\n await getQueryClient().prefetchQuery(\n getHiveAssetGeneralInfoQueryOptions(username)\n );\n\n const wallet = getQueryClient().getQueryData<SpkApiWallet>(\n getSpkWalletQueryOptions(username).queryKey\n );\n const market = getQueryClient().getQueryData<TransformedSpkMarkets>(\n getSpkMarketsQueryOptions().queryKey\n );\n const hiveAsset = getQueryClient().getQueryData<GeneralAssetInfo>(\n getHiveAssetGeneralInfoQueryOptions(username).queryKey\n );\n\n if (!wallet || !market) {\n return {\n name: \"SPK\",\n layer: \"SPK\",\n title: \"SPK Network\",\n price: 1,\n accountBalance: 0,\n };\n }\n\n const price = +format(\n ((wallet.gov + wallet.spk) / 1000) *\n +wallet.tick *\n (hiveAsset?.price ?? 0)\n );\n const accountBalance = +format(\n (wallet.spk +\n rewardSpk(\n wallet,\n market.raw.stats || {\n spk_rate_lgov: \"0.001\",\n spk_rate_lpow: format(\n parseFloat(market.raw.stats.spk_rate_lpow) * 100\n ),\n spk_rate_ldel: format(\n parseFloat(market.raw.stats.spk_rate_ldel) * 100\n ),\n }\n )) /\n 1000\n );\n\n return {\n name: \"SPK\",\n layer: \"SPK\",\n title: \"SPK Network\",\n price: price / accountBalance,\n accountBalance,\n } satisfies GeneralAssetInfo;\n },\n });\n}\n","import { getQueryClient } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { getHiveAssetGeneralInfoQueryOptions } from \"@/modules/wallet/queries/get-hive-asset-general-info-query-options\";\nimport type { GeneralAssetInfo } from \"@/modules/wallet/types\";\nimport type { SpkApiWallet, TransformedSpkMarkets } from \"../types\";\nimport { getSpkMarketsQueryOptions } from \"./get-spk-markets-query-options\";\nimport { getSpkWalletQueryOptions } from \"./get-spk-wallet-query-options\";\n\nfunction format(value: number) {\n return value.toFixed(3);\n}\n\nexport function getLarynxAssetGeneralInfoQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"larynx\", \"general-info\", username],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n await getQueryClient().prefetchQuery(getSpkWalletQueryOptions(username));\n await getQueryClient().prefetchQuery(getSpkMarketsQueryOptions());\n await getQueryClient().prefetchQuery(\n getHiveAssetGeneralInfoQueryOptions(username)\n );\n\n const wallet = getQueryClient().getQueryData<SpkApiWallet>(\n getSpkWalletQueryOptions(username).queryKey\n );\n const market = getQueryClient().getQueryData<TransformedSpkMarkets>(\n getSpkMarketsQueryOptions().queryKey\n );\n const hiveAsset = getQueryClient().getQueryData<GeneralAssetInfo>(\n getHiveAssetGeneralInfoQueryOptions(username).queryKey\n );\n\n if (!wallet || !market) {\n return {\n name: \"LARYNX\",\n title: \"SPK Network / LARYNX\",\n price: 1,\n accountBalance: 0,\n };\n }\n\n const price = +format(\n (wallet.balance / 1000) * +wallet.tick * (hiveAsset?.price ?? 0)\n );\n const accountBalance = +format(wallet.balance / 1000);\n\n return {\n name: \"LARYNX\",\n layer: \"SPK\",\n title: \"LARYNX\",\n price: price / accountBalance,\n accountBalance,\n } satisfies GeneralAssetInfo;\n },\n });\n}\n","import { getQueryClient } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { getHiveAssetGeneralInfoQueryOptions } from \"@/modules/wallet/queries/get-hive-asset-general-info-query-options\";\nimport type { GeneralAssetInfo } from \"@/modules/wallet/types\";\nimport type { SpkApiWallet, TransformedSpkMarkets } from \"../types\";\nimport { getSpkMarketsQueryOptions } from \"./get-spk-markets-query-options\";\nimport { getSpkWalletQueryOptions } from \"./get-spk-wallet-query-options\";\n\nfunction format(value: number) {\n return value.toFixed(3);\n}\n\nexport function getLarynxPowerAssetGeneralInfoQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"larynx-power\", \"general-info\", username],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n await getQueryClient().prefetchQuery(getSpkWalletQueryOptions(username));\n await getQueryClient().prefetchQuery(getSpkMarketsQueryOptions());\n await getQueryClient().prefetchQuery(\n getHiveAssetGeneralInfoQueryOptions(username)\n );\n\n const wallet = getQueryClient().getQueryData<SpkApiWallet>(\n getSpkWalletQueryOptions(username).queryKey\n );\n const market = getQueryClient().getQueryData<TransformedSpkMarkets>(\n getSpkMarketsQueryOptions().queryKey\n );\n const hiveAsset = getQueryClient().getQueryData<GeneralAssetInfo>(\n getHiveAssetGeneralInfoQueryOptions(username).queryKey\n );\n\n if (!wallet || !market) {\n return {\n name: \"LP\",\n title: \"SPK Network / LARYNX Power\",\n price: 1,\n accountBalance: 0,\n };\n }\n\n const price = +format(\n (wallet.poweredUp / 1000) * +wallet.tick * (hiveAsset?.price ?? 0)\n );\n const accountBalance = +format(wallet.poweredUp / 1000);\n\n return {\n name: \"LP\",\n title: \"LARYNX Power\",\n layer: \"SPK\",\n price: price / accountBalance,\n accountBalance,\n parts: [\n {\n name: \"delegating\",\n balance: wallet.granting?.t ? +format(wallet.granting.t / 1000) : 0,\n },\n {\n name: \"recieved\",\n balance: wallet.granted?.t ? +format(wallet.granted.t / 1000) : 0,\n },\n ],\n } satisfies GeneralAssetInfo;\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { PointTransaction } from \"../types/point-transaction\";\n\ninterface PointsResponse {\n points: string;\n unclaimed_points: string;\n}\n\nexport function getPointsQueryOptions(username?: string, filter = 0) {\n return queryOptions({\n queryKey: [\"points\", username, filter],\n queryFn: async () => {\n if (!username) {\n throw new Error(\"Get points query – username wasn't provided\");\n }\n\n const name = username.replace(\"@\", \"\");\n\n // Get points\n const pointsResponse = await fetch(CONFIG.privateApiHost + \"/private-api/points\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ username: name }),\n });\n\n if (!pointsResponse.ok) {\n throw new Error(`Failed to fetch points: ${pointsResponse.status}`);\n }\n\n const points = (await pointsResponse.json()) as PointsResponse;\n\n // Get transactions\n const transactionsResponse = await fetch(\n CONFIG.privateApiHost + \"/private-api/point-list\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ username: name, type: filter }),\n }\n );\n\n if (!transactionsResponse.ok) {\n throw new Error(`Failed to fetch point transactions: ${transactionsResponse.status}`);\n }\n\n const transactions = (await transactionsResponse.json()) as PointTransaction[];\n\n return {\n points: points.points,\n uPoints: points.unclaimed_points,\n transactions,\n } as const;\n },\n staleTime: 30000,\n refetchOnMount: true,\n enabled: !!username,\n });\n}\n","import { getQueryClient } from \"@/modules/core\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { GeneralAssetInfo } from \"@/modules/wallet/types\";\nimport { getPointsQueryOptions } from \"./get-points-query-options\";\n\nexport function getPointsAssetGeneralInfoQueryOptions(username: string) {\n return queryOptions({\n queryKey: [\"assets\", \"points\", \"general-info\", username],\n staleTime: 60000,\n refetchInterval: 90000,\n queryFn: async () => {\n await getQueryClient().prefetchQuery(getPointsQueryOptions(username));\n const data = getQueryClient().getQueryData(\n getPointsQueryOptions(username).queryKey\n );\n return {\n name: \"POINTS\",\n title: \"Ecency Points\",\n price: 0.002,\n accountBalance: +(data?.points ?? 0),\n } satisfies GeneralAssetInfo;\n },\n });\n}\n","import { CONFIG } from \"@/modules/core/config\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { PointTransaction } from \"../types\";\nimport { PointTransactionType } from \"../types\";\nimport type { GeneralAssetTransaction } from \"@/modules/wallet/types\";\n\nexport function getPointsAssetTransactionsQueryOptions(\n username: string | undefined,\n type?: PointTransactionType\n) {\n return queryOptions({\n queryKey: [\"assets\", \"points\", \"transactions\", username, type],\n queryFn: async () => {\n const response = await fetch(\n `${CONFIG.privateApiHost}/private-api/point-list`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n username,\n type: type ?? 0,\n }),\n }\n );\n const data = (await response.json()) as PointTransaction[];\n return data.map(({ created, type, amount, id, sender, receiver, memo }) => ({\n created: new Date(created),\n type,\n results: [\n {\n amount: parseFloat(amount),\n asset: \"POINTS\",\n },\n ],\n id,\n from: sender ?? undefined,\n to: receiver ?? undefined,\n memo: memo ?? undefined,\n })) satisfies GeneralAssetTransaction[];\n },\n });\n}\n","import { getQueryClient } from \"@/modules/core\";\nimport { getCurrencyRate } from \"@/modules/market\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport type { GeneralAssetInfo } from \"../types\";\nimport { getHiveAssetGeneralInfoQueryOptions } from \"./get-hive-asset-general-info-query-options\";\nimport { getHbdAssetGeneralInfoQueryOptions } from \"./get-hbd-asset-general-info-query-options\";\nimport { getHivePowerAssetGeneralInfoQueryOptions } from \"./get-hive-power-asset-general-info-query-options\";\nimport { getHiveEngineTokensBalancesQueryOptions } from \"@/modules/hive-engine/queries\";\nimport { getHiveEngineTokenGeneralInfoQueryOptions } from \"@/modules/hive-engine/queries\";\nimport { getSpkAssetGeneralInfoQueryOptions } from \"@/modules/spk/queries\";\nimport { getLarynxAssetGeneralInfoQueryOptions } from \"@/modules/spk/queries\";\nimport { getLarynxPowerAssetGeneralInfoQueryOptions } from \"@/modules/spk/queries\";\nimport { getPointsAssetGeneralInfoQueryOptions } from \"@/modules/points/queries\";\nimport {\n getPortfolioQueryOptions,\n type PortfolioResponse,\n type PortfolioWalletItem,\n} from \"./get-portfolio-query-options\";\n\ninterface Options {\n refetch?: boolean;\n currency?: string;\n}\n\nexport function getAccountWalletAssetInfoQueryOptions(\n username: string,\n asset: string,\n options: Options = { refetch: false }\n) {\n const queryClient = getQueryClient();\n const currency = options.currency ?? \"usd\";\n\n const fetchQuery = async (qo: any) => {\n if (options.refetch) {\n await queryClient.fetchQuery(qo);\n } else {\n await queryClient.prefetchQuery(qo);\n }\n return queryClient.getQueryData<GeneralAssetInfo>(qo.queryKey);\n };\n\n const convertPriceToUserCurrency = async (\n assetInfo: GeneralAssetInfo | undefined\n ): Promise<GeneralAssetInfo | undefined> => {\n if (!assetInfo || currency === \"usd\") {\n return assetInfo;\n }\n\n try {\n const conversionRate = await getCurrencyRate(currency);\n return {\n ...assetInfo,\n price: assetInfo.price * conversionRate,\n };\n } catch (error) {\n console.warn(`Failed to convert price from USD to ${currency}:`, error);\n return assetInfo;\n }\n };\n\n const portfolioQuery = getPortfolioQueryOptions(username, currency, true);\n\n const getPortfolioAssetInfo = async () => {\n try {\n const portfolio: PortfolioResponse = await queryClient.fetchQuery(portfolioQuery);\n const assetItem = portfolio.wallets.find(\n (item: PortfolioWalletItem) =>\n item.symbol.toUpperCase() === asset.toUpperCase()\n );\n\n if (!assetItem) return undefined;\n\n const parts: Array<{ name: string; balance: number }> = [];\n\n if (assetItem.liquid !== undefined && assetItem.liquid !== null) {\n parts.push({ name: \"liquid\", balance: assetItem.liquid });\n }\n\n if (assetItem.staked !== undefined && assetItem.staked !== null && assetItem.staked > 0) {\n parts.push({ name: \"staked\", balance: assetItem.staked });\n }\n\n if (assetItem.savings !== undefined && assetItem.savings !== null && assetItem.savings > 0) {\n parts.push({ name: \"savings\", balance: assetItem.savings });\n }\n\n if (assetItem.extraData && Array.isArray(assetItem.extraData)) {\n for (const extraItem of assetItem.extraData) {\n if (!extraItem || typeof extraItem !== \"object\") continue;\n\n const dataKey = extraItem.dataKey;\n const value = extraItem.value;\n\n if (typeof value === \"string\") {\n const cleanValue = value.replace(/,/g, \"\");\n const match = cleanValue.match(/[+-]?\\s*(\\d+(?:\\.\\d+)?)/);\n if (match) {\n const numValue = Math.abs(Number.parseFloat(match[1]));\n\n if (dataKey === \"delegated_hive_power\") {\n parts.push({ name: \"outgoing_delegations\", balance: numValue });\n } else if (dataKey === \"received_hive_power\") {\n parts.push({ name: \"incoming_delegations\", balance: numValue });\n } else if (dataKey === \"powering_down_hive_power\") {\n parts.push({ name: \"pending_power_down\", balance: numValue });\n }\n }\n }\n }\n }\n\n return {\n name: assetItem.symbol,\n title: assetItem.name,\n price: assetItem.fiatRate,\n accountBalance: assetItem.balance,\n apr: assetItem.apr?.toString(),\n layer: assetItem.layer,\n pendingRewards: assetItem.pendingRewards,\n parts,\n } as GeneralAssetInfo;\n } catch {\n return undefined;\n }\n };\n\n return queryOptions({\n queryKey: [\"ecency-wallets\", \"asset-info\", username, asset, currency],\n queryFn: async () => {\n const portfolioAssetInfo = await getPortfolioAssetInfo();\n\n if (portfolioAssetInfo && portfolioAssetInfo.price > 0) {\n return portfolioAssetInfo;\n }\n\n let assetInfo: GeneralAssetInfo | undefined;\n\n if (asset === \"HIVE\") {\n assetInfo = await fetchQuery(getHiveAssetGeneralInfoQueryOptions(username));\n } else if (asset === \"HP\") {\n assetInfo = await fetchQuery(getHivePowerAssetGeneralInfoQueryOptions(username));\n } else if (asset === \"HBD\") {\n assetInfo = await fetchQuery(getHbdAssetGeneralInfoQueryOptions(username));\n } else if (asset === \"SPK\") {\n assetInfo = await fetchQuery(getSpkAssetGeneralInfoQueryOptions(username));\n } else if (asset === \"LARYNX\") {\n assetInfo = await fetchQuery(getLarynxAssetGeneralInfoQueryOptions(username));\n } else if (asset === \"LP\") {\n assetInfo = await fetchQuery(getLarynxPowerAssetGeneralInfoQueryOptions(username));\n } else if (asset === \"POINTS\") {\n assetInfo = await fetchQuery(getPointsAssetGeneralInfoQueryOptions(username));\n } else {\n // Check if it's a Hive Engine token\n const balances = await queryClient.ensureQueryData(\n getHiveEngineTokensBalancesQueryOptions(username)\n );\n\n if (balances.some((balance) => balance.symbol === asset)) {\n assetInfo = await fetchQuery(\n getHiveEngineTokenGeneralInfoQueryOptions(username, asset)\n );\n } else {\n throw new Error(\n `[SDK][Wallet] – unrecognized asset \"${asset}\"`\n );\n }\n }\n\n return await convertPriceToUserCurrency(assetInfo);\n },\n });\n}\n","export enum AssetOperation {\n // Common\n Transfer = \"transfer\",\n\n // APR\n TransferToSavings = \"transfer-saving\",\n WithdrawFromSavings = \"withdraw-saving\",\n Delegate = \"delegate\",\n PowerUp = \"power-up\",\n PowerDown = \"power-down\",\n WithdrawRoutes = \"withdraw-routes\",\n ClaimInterest = \"claim-interest\",\n Swap = \"swap\",\n Convert = \"convert\",\n\n // Points\n Gift = \"gift\",\n Promote = \"promote\",\n Claim = \"claim\",\n Buy = \"buy\",\n\n // SPK\n LockLiquidity = \"lock\",\n\n // Layer 2\n Stake = \"stake\",\n Unstake = \"unstake\",\n Undelegate = \"undelegate\",\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildTransferOp } from \"@/modules/operations/builders\";\n\n/**\n * Payload for transferring tokens.\n */\nexport interface TransferPayload {\n /** Recipient account */\n to: string;\n /** Amount with asset symbol (e.g., \"1.000 HIVE\", \"5.000 HBD\") */\n amount: string;\n /** Transfer memo */\n memo: string;\n}\n\n/**\n * React Query mutation hook for transferring tokens.\n *\n * This mutation broadcasts a transfer operation to send HIVE or HBD\n * to another account. **Requires ACTIVE authority**.\n *\n * Uses `useBroadcastMutation` with the smart auth strategy:\n * - Adapter determines login type and dispatches to appropriate method\n * - If active key not available (common on web), triggers `showAuthUpgradeUI`\n * - Supports keychain, hivesigner, hiveauth, and direct key signing\n *\n * @param username - The username sending the transfer (required for broadcast)\n * @param auth - Authentication context with platform adapter\n *\n * @returns React Query mutation result\n */\nexport function useTransfer(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<TransferPayload>(\n [\"wallet\", \"transfer\"],\n username,\n (payload) => [\n buildTransferOp(username!, payload.to, payload.amount, payload.memo)\n ],\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildPointTransferOp } from \"@/modules/operations/builders\";\n\nexport interface TransferPointPayload {\n to: string;\n amount: string;\n memo: string;\n}\n\n/**\n * React Query mutation hook for transferring Ecency points.\n *\n * Uses `ecency_point_transfer` custom_json operation with ACTIVE authority.\n */\nexport function useTransferPoint(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<TransferPointPayload>(\n [\"wallet\", \"transfer-point\"],\n username,\n (payload) => [\n buildPointTransferOp(username!, payload.to, payload.amount, payload.memo)\n ],\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildDelegateVestingSharesOp } from \"@/modules/operations/builders\";\n\n/**\n * Payload for delegating Hive Power (vesting shares).\n */\nexport interface DelegateVestingSharesPayload {\n /** Account receiving HP delegation */\n delegatee: string;\n /** Amount of VESTS to delegate (e.g., \"1000.000000 VESTS\"). Use \"0.000000 VESTS\" to remove delegation. */\n vestingShares: string;\n}\n\n/**\n * React Query mutation hook for delegating Hive Power (HP).\n *\n * This mutation broadcasts a delegate_vesting_shares operation to delegate HP\n * to another account. **Requires ACTIVE authority**, not posting.\n *\n * @param username - The username delegating HP (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **IMPORTANT: Active Authority Required**\n * - Delegation operations require ACTIVE key, not posting key\n * - Make sure your auth adapter provides getActiveKey() method\n * - Keychain/HiveAuth will prompt for Active authority\n *\n * **Delegation Mechanics:**\n * - Delegated HP can be used by the delegatee for resource credits\n * - Delegatee CANNOT power down or transfer the delegated HP\n * - Delegation can be removed by setting vestingShares to \"0.000000 VESTS\"\n * - Removing delegation has a 5-day cooldown before HP returns to delegator\n *\n * **Post-Broadcast Actions:**\n * - Invalidates delegations list cache to show updated delegation\n * - Invalidates account data for both delegator and delegatee\n *\n * @example\n * ```typescript\n * const delegateMutation = useDelegateVestingShares(username, {\n * adapter: {\n * ...myAdapter,\n * getActiveKey: async (username) => getActiveKeyFromStorage(username)\n * },\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Delegate HP\n * delegateMutation.mutate({\n * delegatee: 'alice',\n * vestingShares: '1000.000000 VESTS'\n * });\n *\n * // Remove delegation\n * delegateMutation.mutate({\n * delegatee: 'alice',\n * vestingShares: '0.000000 VESTS'\n * });\n * ```\n */\nexport function useDelegateVestingShares(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<DelegateVestingSharesPayload>(\n [\"wallet\", \"delegate-vesting-shares\"],\n username,\n (payload) => [\n buildDelegateVestingSharesOp(\n username!,\n payload.delegatee,\n payload.vestingShares\n )\n ],\n async (_result, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.delegatee),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active' // IMPORTANT: Active authority required\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildSetWithdrawVestingRouteOp } from \"@/modules/operations/builders\";\n\n/**\n * Payload for setting withdraw vesting route.\n */\nexport interface SetWithdrawVestingRoutePayload {\n /** Account receiving withdrawn vesting */\n toAccount: string;\n /** Percentage to route (0-10000, where 10000 = 100%). Already scaled. */\n percent: number;\n /** Auto convert to vesting (power up) */\n autoVest: boolean;\n}\n\n/**\n * React Query mutation hook for setting withdraw vesting route.\n *\n * This mutation broadcasts a set_withdraw_vesting_route operation to configure\n * where withdrawn VESTS (power down) are sent. **Requires ACTIVE authority**, not posting.\n *\n * @param username - The username setting withdraw route (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **IMPORTANT: Active Authority Required**\n * - Withdraw route operations require ACTIVE key, not posting key\n * - Make sure your auth adapter provides getActiveKey() method\n * - Keychain/HiveAuth will prompt for Active authority\n *\n * **Withdraw Route Mechanics:**\n * - Routes a percentage of power down (withdraw_vesting) to another account\n * - Percent must be between 0-10000 (where 10000 = 100%)\n * - Multiple routes can be set, total cannot exceed 100%\n * - autoVest=true converts withdrawn VESTS to HP in destination account\n * - autoVest=false converts withdrawn VESTS to liquid HIVE\n *\n * **Post-Broadcast Actions:**\n * - Invalidates withdraw routes cache to show updated routes\n * - Invalidates account data for both accounts\n *\n * @example\n * ```typescript\n * const setRouteMutation = useSetWithdrawVestingRoute(username, {\n * adapter: {\n * ...myAdapter,\n * getActiveKey: async (username) => getActiveKeyFromStorage(username)\n * },\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Route 50% of power down to another account (auto vest)\n * setRouteMutation.mutate({\n * toAccount: 'alice',\n * percent: 5000, // 50% (already scaled)\n * autoVest: true\n * });\n *\n * // Route 100% of power down to another account (liquid HIVE)\n * setRouteMutation.mutate({\n * toAccount: 'bob',\n * percent: 10000, // 100% (already scaled)\n * autoVest: false\n * });\n * ```\n */\nexport function useSetWithdrawVestingRoute(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<SetWithdrawVestingRoutePayload>(\n [\"wallet\", \"set-withdraw-vesting-route\"],\n username,\n (payload) => [\n buildSetWithdrawVestingRouteOp(\n username!,\n payload.toAccount,\n payload.percent,\n payload.autoVest\n )\n ],\n async (_result, variables) => {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.wallet.withdrawRoutes(username!),\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.toAccount)\n ]);\n }\n },\n auth,\n 'active' // IMPORTANT: Active authority required\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface TransferSpkPayload {\n to: string;\n amount: number;\n memo?: string;\n}\n\nexport function useTransferSpk(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<TransferSpkPayload>(\n [\"wallet\", \"transfer-spk\"],\n username,\n (payload) => {\n const json = JSON.stringify({\n to: payload.to,\n amount: payload.amount,\n ...(typeof payload.memo === \"string\" ? { memo: payload.memo } : {}),\n });\n return [[\"custom_json\", {\n required_auths: [username!],\n required_posting_auths: [],\n id: \"spkcc_spk_send\",\n json,\n }] as Operation];\n },\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface TransferLarynxPayload {\n to: string;\n amount: number;\n memo?: string;\n}\n\nexport function useTransferLarynx(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<TransferLarynxPayload>(\n [\"wallet\", \"transfer-larynx\"],\n username,\n (payload) => {\n const json = JSON.stringify({\n to: payload.to,\n amount: payload.amount,\n ...(typeof payload.memo === \"string\" ? { memo: payload.memo } : {}),\n });\n return [[\"custom_json\", {\n required_auths: [username!],\n required_posting_auths: [],\n id: \"spkcc_send\",\n json,\n }] as Operation];\n },\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface TransferEngineTokenPayload {\n to: string;\n symbol: string;\n quantity: string;\n memo: string;\n}\n\nexport function useTransferEngineToken(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<TransferEngineTokenPayload>(\n [\"wallet\", \"transfer-engine-token\"],\n username,\n (payload) => {\n const json = JSON.stringify({\n contractName: \"tokens\",\n contractAction: \"transfer\",\n contractPayload: {\n symbol: payload.symbol,\n to: payload.to,\n quantity: payload.quantity,\n memo: payload.memo\n }\n });\n return [[\"custom_json\", {\n required_auths: [username!],\n required_posting_auths: [],\n id: \"ssc-mainnet-hive\",\n json,\n }] as Operation];\n },\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildTransferToSavingsOp } from \"@/modules/operations/builders\";\n\nexport interface TransferToSavingsPayload {\n to: string;\n amount: string;\n memo: string;\n}\n\nexport function useTransferToSavings(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<TransferToSavingsPayload>(\n [\"wallet\", \"transfer-to-savings\"],\n username,\n (payload) => [\n buildTransferToSavingsOp(username!, payload.to, payload.amount, payload.memo)\n ],\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildTransferFromSavingsOp } from \"@/modules/operations/builders\";\n\nexport interface TransferFromSavingsPayload {\n to: string;\n amount: string;\n memo: string;\n requestId: number;\n}\n\nexport function useTransferFromSavings(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<TransferFromSavingsPayload>(\n [\"wallet\", \"transfer-from-savings\"],\n username,\n (payload) => [\n buildTransferFromSavingsOp(username!, payload.to, payload.amount, payload.memo, payload.requestId)\n ],\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildTransferToVestingOp } from \"@/modules/operations/builders\";\n\nexport interface TransferToVestingPayload {\n to: string;\n amount: string;\n}\n\nexport function useTransferToVesting(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<TransferToVestingPayload>(\n [\"wallet\", \"transfer-to-vesting\"],\n username,\n (payload) => [\n buildTransferToVestingOp(username!, payload.to, payload.amount)\n ],\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildWithdrawVestingOp } from \"@/modules/operations/builders\";\n\nexport interface WithdrawVestingPayload {\n vestingShares: string;\n}\n\nexport function useWithdrawVesting(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<WithdrawVestingPayload>(\n [\"wallet\", \"withdraw-vesting\"],\n username,\n (payload) => [\n buildWithdrawVestingOp(username!, payload.vestingShares)\n ],\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildConvertOp, buildCollateralizedConvertOp } from \"@/modules/operations/builders\";\n\nexport interface ConvertPayload {\n amount: string;\n requestId: number;\n collateralized?: boolean;\n}\n\nexport function useConvert(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<ConvertPayload>(\n [\"wallet\", \"convert\"],\n username,\n (payload) => [\n payload.collateralized\n ? buildCollateralizedConvertOp(username!, payload.amount, payload.requestId)\n : buildConvertOp(username!, payload.amount, payload.requestId)\n ],\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildClaimInterestOps } from \"@/modules/operations/builders\";\n\nexport interface ClaimInterestPayload {\n to: string;\n amount: string;\n memo: string;\n requestId: number;\n}\n\nexport function useClaimInterest(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<ClaimInterestPayload>(\n [\"wallet\", \"claim-interest\"],\n username,\n (payload) => buildClaimInterestOps(username!, payload.to, payload.amount, payload.memo, payload.requestId),\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys, getQueryClient } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { buildClaimRewardBalanceOp } from \"@/modules/operations/builders\";\n\nexport interface ClaimRewardsPayload {\n rewardHive: string;\n rewardHbd: string;\n rewardVests: string;\n}\n\nexport function useClaimRewards(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<ClaimRewardsPayload>(\n [\"wallet\", \"claim-rewards\"],\n username,\n (payload) => [\n buildClaimRewardBalanceOp(username!, payload.rewardHive, payload.rewardHbd, payload.rewardVests)\n ],\n async () => {\n const keysToInvalidate = [\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username],\n QueryKeys.assets.hiveGeneralInfo(username!),\n QueryKeys.assets.hbdGeneralInfo(username!),\n QueryKeys.assets.hivePowerGeneralInfo(username!),\n ];\n\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries(keysToInvalidate);\n }\n\n // Delayed re-invalidation for blockchain propagation\n setTimeout(() => {\n const qc = getQueryClient();\n keysToInvalidate.forEach((key) => {\n qc.invalidateQueries({ queryKey: key });\n });\n }, 5000);\n },\n auth,\n 'posting'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface LockLarynxPayload {\n mode: \"lock\" | \"unlock\";\n amount: number;\n}\n\nexport function useLockLarynx(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<LockLarynxPayload>(\n [\"wallet\", \"lock-larynx\"],\n username,\n (payload) => {\n const json = JSON.stringify({ amount: payload.amount * 1000 });\n return [[\"custom_json\", {\n id: payload.mode === \"lock\" ? \"spkcc_gov_up\" : \"spkcc_gov_down\",\n required_auths: [username!],\n required_posting_auths: [],\n json,\n }] as Operation];\n },\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface PowerLarynxPayload {\n mode: \"up\" | \"down\";\n amount: number;\n}\n\nexport function usePowerLarynx(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<PowerLarynxPayload>(\n [\"wallet\", \"power-larynx\"],\n username,\n (payload) => {\n const json = JSON.stringify({ amount: payload.amount * 1000 });\n return [[\"custom_json\", {\n id: `spkcc_power_${payload.mode}`,\n required_auths: [username!],\n required_posting_auths: [],\n json,\n }] as Operation];\n },\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface DelegateEngineTokenPayload {\n to: string;\n symbol: string;\n quantity: string;\n}\n\nexport function useDelegateEngineToken(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<DelegateEngineTokenPayload>(\n [\"wallet\", \"delegate-engine-token\"],\n username,\n (payload) => {\n const json = JSON.stringify({\n contractName: \"tokens\",\n contractAction: \"delegate\",\n contractPayload: {\n symbol: payload.symbol,\n to: payload.to,\n quantity: payload.quantity,\n }\n });\n return [[\"custom_json\", {\n id: \"ssc-mainnet-hive\",\n required_auths: [username!],\n required_posting_auths: [],\n json,\n }] as Operation];\n },\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface UndelegateEngineTokenPayload {\n from: string;\n symbol: string;\n quantity: string;\n}\n\nexport function useUndelegateEngineToken(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<UndelegateEngineTokenPayload>(\n [\"wallet\", \"undelegate-engine-token\"],\n username,\n (payload) => {\n const json = JSON.stringify({\n contractName: \"tokens\",\n contractAction: \"undelegate\",\n contractPayload: {\n symbol: payload.symbol,\n from: payload.from,\n quantity: payload.quantity,\n }\n });\n return [[\"custom_json\", {\n id: \"ssc-mainnet-hive\",\n required_auths: [username!],\n required_posting_auths: [],\n json,\n }] as Operation];\n },\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface StakeEngineTokenPayload {\n to: string;\n symbol: string;\n quantity: string;\n}\n\nexport function useStakeEngineToken(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<StakeEngineTokenPayload>(\n [\"wallet\", \"stake-engine-token\"],\n username,\n (payload) => {\n const json = JSON.stringify({\n contractName: \"tokens\",\n contractAction: \"stake\",\n contractPayload: {\n symbol: payload.symbol,\n to: payload.to,\n quantity: payload.quantity,\n }\n });\n return [[\"custom_json\", {\n id: \"ssc-mainnet-hive\",\n required_auths: [username!],\n required_posting_auths: [],\n json,\n }] as Operation];\n },\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface UnstakeEngineTokenPayload {\n to: string;\n symbol: string;\n quantity: string;\n}\n\nexport function useUnstakeEngineToken(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<UnstakeEngineTokenPayload>(\n [\"wallet\", \"unstake-engine-token\"],\n username,\n (payload) => {\n const json = JSON.stringify({\n contractName: \"tokens\",\n contractAction: \"unstake\",\n contractPayload: {\n symbol: payload.symbol,\n to: payload.to,\n quantity: payload.quantity,\n }\n });\n return [[\"custom_json\", {\n id: \"ssc-mainnet-hive\",\n required_auths: [username!],\n required_posting_auths: [],\n json,\n }] as Operation];\n },\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface ClaimEngineRewardsPayload {\n tokens: string[];\n}\n\nexport function useClaimEngineRewards(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<ClaimEngineRewardsPayload>(\n [\"wallet\", \"claim-engine-rewards\"],\n username,\n (payload) => {\n const json = JSON.stringify(payload.tokens.map((symbol) => ({ symbol })));\n return [[\"custom_json\", {\n id: \"scot_claim_token\",\n required_auths: [],\n required_posting_auths: [username!],\n json,\n }] as Operation];\n },\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'posting'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport { QueryKeys } from \"@/modules/core\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface EngineMarketOrderPayload {\n action: \"buy\" | \"sell\" | \"cancel\";\n symbol: string;\n quantity?: string;\n price?: string;\n orderId?: string;\n orderType?: \"buy\" | \"sell\";\n}\n\nexport function useEngineMarketOrder(username: string | undefined, auth?: AuthContextV2) {\n return useBroadcastMutation<EngineMarketOrderPayload>(\n [\"wallet\", \"engine-market-order\"],\n username,\n (payload) => {\n let contractPayload: Record<string, string>;\n let contractAction: string;\n\n if (payload.action === \"cancel\") {\n contractAction = \"cancel\";\n contractPayload = {\n type: payload.orderType!,\n id: payload.orderId!,\n };\n } else {\n contractAction = payload.action;\n contractPayload = {\n symbol: payload.symbol,\n quantity: payload.quantity!,\n price: payload.price!,\n };\n }\n\n const json = JSON.stringify({\n contractName: \"market\",\n contractAction,\n contractPayload,\n });\n return [[\"custom_json\", {\n id: \"ssc-mainnet-hive\",\n required_auths: [username!],\n required_posting_auths: [],\n json,\n }] as Operation];\n },\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n [\"ecency-wallets\", \"asset-info\", username],\n [\"wallet\", \"portfolio\", \"v2\", username]\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation } from \"@/modules/core/mutations\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\nimport { EcencyAnalytics } from \"@/modules/analytics\";\nimport { getQueryClient } from \"@/modules/core\";\nimport type { AuthorityLevel } from \"@/modules/operations/authority-map\";\nimport { AssetOperation } from \"../types\";\nimport {\n buildTransferOp,\n buildTransferToSavingsOp,\n buildTransferFromSavingsOp,\n buildTransferToVestingOp,\n buildWithdrawVestingOp,\n buildDelegateVestingSharesOp,\n buildSetWithdrawVestingRouteOp,\n buildConvertOp,\n buildClaimInterestOps,\n buildPointTransferOp,\n buildSpkCustomJsonOp,\n buildEngineOp,\n buildEngineClaimOp,\n} from \"@/modules/operations/builders\";\nimport type { Operation } from \"@hiveio/dhive\";\n\nexport interface WalletOperationPayload {\n from: string;\n to?: string;\n amount?: string;\n memo?: string;\n request_id?: number;\n from_account?: string;\n to_account?: string;\n percent?: number;\n auto_vest?: boolean;\n mode?: string;\n [key: string]: unknown;\n}\n\nfunction buildHiveOperations(\n asset: string,\n operation: AssetOperation,\n payload: WalletOperationPayload\n): Operation[] | null {\n const { from, to = \"\", amount = \"\", memo = \"\" } = payload;\n const requestId = payload.request_id ?? (Date.now() >>> 0);\n\n switch (asset) {\n case \"HIVE\":\n switch (operation) {\n case AssetOperation.Transfer:\n return [buildTransferOp(from, to, amount, memo)];\n case AssetOperation.TransferToSavings:\n return [buildTransferToSavingsOp(from, to, amount, memo)];\n case AssetOperation.WithdrawFromSavings:\n return [buildTransferFromSavingsOp(from, to, amount, memo, requestId)];\n case AssetOperation.PowerUp:\n return [buildTransferToVestingOp(from, to, amount)];\n }\n break;\n\n case \"HBD\":\n switch (operation) {\n case AssetOperation.Transfer:\n return [buildTransferOp(from, to, amount, memo)];\n case AssetOperation.TransferToSavings:\n return [buildTransferToSavingsOp(from, to, amount, memo)];\n case AssetOperation.WithdrawFromSavings:\n return [buildTransferFromSavingsOp(from, to, amount, memo, requestId)];\n case AssetOperation.ClaimInterest:\n return buildClaimInterestOps(from, to, amount, memo, requestId);\n case AssetOperation.Convert:\n return [buildConvertOp(from, amount, Math.floor(Date.now() / 1000))];\n }\n break;\n\n case \"HP\":\n switch (operation) {\n case AssetOperation.PowerDown:\n return [buildWithdrawVestingOp(from, amount)];\n case AssetOperation.Delegate:\n return [buildDelegateVestingSharesOp(from, to, amount)];\n case AssetOperation.WithdrawRoutes:\n return [buildSetWithdrawVestingRouteOp(\n payload.from_account ?? from,\n payload.to_account ?? to,\n payload.percent ?? 0,\n payload.auto_vest ?? false\n )];\n }\n break;\n\n case \"POINTS\":\n if (operation === AssetOperation.Transfer || operation === AssetOperation.Gift) {\n return [buildPointTransferOp(from, to, amount, memo)];\n }\n break;\n\n case \"SPK\":\n if (operation === AssetOperation.Transfer) {\n const numAmount = typeof amount === \"number\" ? amount : parseFloat(amount) * 1000;\n return [[\"custom_json\", {\n id: \"spkcc_spk_send\",\n required_auths: [from],\n required_posting_auths: [],\n json: JSON.stringify({ to, amount: numAmount, ...(typeof memo === \"string\" && memo ? { memo } : {}) }),\n }]];\n }\n break;\n\n case \"LARYNX\":\n switch (operation) {\n case AssetOperation.Transfer: {\n const numAmount = typeof amount === \"number\" ? amount : parseFloat(amount) * 1000;\n return [[\"custom_json\", {\n id: \"spkcc_send\",\n required_auths: [from],\n required_posting_auths: [],\n json: JSON.stringify({ to, amount: numAmount, ...(typeof memo === \"string\" && memo ? { memo } : {}) }),\n }]];\n }\n case AssetOperation.LockLiquidity: {\n const parsedAmount = typeof payload.amount === \"string\"\n ? parseFloat(payload.amount)\n : Number(payload.amount ?? 0);\n const id = payload.mode === \"lock\" ? \"spkcc_gov_up\" : \"spkcc_gov_down\";\n return [buildSpkCustomJsonOp(from, id, parsedAmount)];\n }\n case AssetOperation.PowerUp: {\n const parsedAmount = typeof payload.amount === \"string\"\n ? parseFloat(payload.amount)\n : Number(payload.amount ?? 0);\n const id = `spkcc_power_${payload.mode ?? \"up\"}`;\n return [buildSpkCustomJsonOp(from, id, parsedAmount)];\n }\n }\n break;\n }\n\n return null;\n}\n\nfunction buildEngineOperations(\n asset: string,\n operation: AssetOperation,\n payload: WalletOperationPayload\n): Operation[] | null {\n const { from, to = \"\", amount = \"\" } = payload;\n const quantity = typeof amount === \"string\" && amount.includes(\" \")\n ? amount.split(\" \")[0]\n : String(amount);\n\n switch (operation) {\n case AssetOperation.Transfer:\n return [buildEngineOp(from, \"transfer\", {\n symbol: asset, to, quantity, memo: payload.memo ?? \"\"\n })];\n case AssetOperation.Stake:\n return [buildEngineOp(from, \"stake\", { symbol: asset, to, quantity })];\n case AssetOperation.Unstake:\n return [buildEngineOp(from, \"unstake\", { symbol: asset, to, quantity })];\n case AssetOperation.Delegate:\n return [buildEngineOp(from, \"delegate\", { symbol: asset, to, quantity })];\n case AssetOperation.Undelegate:\n return [buildEngineOp(from, \"undelegate\", { symbol: asset, from: to, quantity })];\n case AssetOperation.Claim:\n return [buildEngineClaimOp(from, [asset])];\n }\n\n return null;\n}\n\n/**\n * Determines authority level for a wallet operation.\n * Engine token claims use posting authority; everything else uses active.\n */\nfunction getWalletOperationAuthority(operation: AssetOperation): AuthorityLevel {\n if (operation === AssetOperation.Claim) {\n return 'posting';\n }\n return 'active';\n}\n\n/**\n * Meta-mutation hook that dispatches wallet operations based on asset and operation type.\n *\n * Supports HIVE, HBD, HP, POINTS, SPK, LARYNX, and Hive Engine tokens.\n * Uses `useBroadcastMutation` for unified auth handling via `AuthContextV2`.\n *\n * @param username - The Hive account performing the operation\n * @param asset - The asset symbol (e.g., \"HIVE\", \"HBD\", \"HP\", \"POINTS\", \"SPK\", \"LARYNX\", or engine token)\n * @param operation - The operation type from AssetOperation enum\n * @param auth - Auth context for broadcasting\n */\nexport function useWalletOperation(\n username: string | undefined,\n asset: string,\n operation: AssetOperation,\n auth?: AuthContextV2\n) {\n const { mutateAsync: recordActivity } = EcencyAnalytics.useRecordActivity(\n username,\n operation as any\n );\n\n return useBroadcastMutation<WalletOperationPayload>(\n [\"ecency-wallets\", asset, operation],\n username,\n (payload) => {\n // Try native Hive + SPK + LARYNX + POINTS operations\n const hiveOps = buildHiveOperations(asset, operation, payload);\n if (hiveOps) return hiveOps;\n\n // Try engine token operations\n const engineOps = buildEngineOperations(asset, operation, payload);\n if (engineOps) return engineOps;\n\n throw new Error(`[SDK][Wallet] – no operation builder for asset=\"${asset}\" operation=\"${operation}\"`);\n },\n () => {\n recordActivity();\n\n const keysToInvalidate: (string | undefined)[][] = [];\n\n // Invalidate asset-specific queries (prefix-matches all currency variants)\n keysToInvalidate.push([\"ecency-wallets\", \"asset-info\", username, asset]);\n\n if (asset === \"HIVE\") {\n keysToInvalidate.push([\"ecency-wallets\", \"asset-info\", username, \"HP\"]);\n }\n if (asset === \"LARYNX\" && operation === AssetOperation.PowerUp) {\n keysToInvalidate.push([\"ecency-wallets\", \"asset-info\", username, \"LP\"]);\n keysToInvalidate.push([\"ecency-wallets\", \"asset-info\", username, \"LARYNX\"]);\n }\n\n // Invalidate portfolio (prefix-matches all currency/filter variants)\n keysToInvalidate.push([\"wallet\", \"portfolio\", \"v2\", username]);\n\n // Delay invalidation to allow blockchain to process\n setTimeout(() => {\n keysToInvalidate.forEach((key) => {\n getQueryClient().invalidateQueries({ queryKey: key });\n });\n }, 5000);\n },\n auth,\n getWalletOperationAuthority(operation)\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildDelegateRcOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface DelegateRcPayload {\n to: string;\n maxRc: string | number;\n}\n\nexport function useDelegateRc(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<DelegateRcPayload>(\n [\"wallet\", \"delegate-rc\"],\n username,\n ({ to, maxRc }) => [\n buildDelegateRcOp(username!, to, maxRc)\n ],\n async (_result, variables) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.accounts.full(variables.to),\n QueryKeys.resourceCredits.account(username!),\n QueryKeys.resourceCredits.account(variables.to),\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildWitnessVoteOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\n/**\n * Payload for voting for a witness.\n */\nexport interface WitnessVotePayload {\n /** Witness account name to vote for/against */\n witness: string;\n /** True to approve, false to disapprove */\n approve: boolean;\n}\n\n/**\n * React Query mutation hook for voting for a Hive witness.\n *\n * This mutation broadcasts an account_witness_vote operation to vote for\n * or remove a vote from a witness.\n *\n * @param username - The username voting for the witness (required for broadcast)\n * @param auth - Authentication context with platform adapter and fallback configuration\n *\n * @returns React Query mutation result\n *\n * @remarks\n * **Post-Broadcast Actions:**\n * - Invalidates account data cache to show updated witness votes\n * - Invalidates witness votes cache\n *\n * **Vote Types:**\n * - approve: true - Vote for the witness\n * - approve: false - Remove your vote from the witness\n *\n * **Authority Required:**\n * - Active authority is required for witness voting\n *\n * @example\n * ```typescript\n * const witnessVoteMutation = useWitnessVote(username, {\n * adapter: myAdapter,\n * enableFallback: true,\n * fallbackChain: ['keychain', 'key', 'hivesigner']\n * });\n *\n * // Vote for a witness\n * witnessVoteMutation.mutate({\n * witness: 'good-karma',\n * approve: true\n * });\n *\n * // Remove vote from a witness\n * witnessVoteMutation.mutate({\n * witness: 'good-karma',\n * approve: false\n * });\n * ```\n */\nexport function useWitnessVote(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<WitnessVotePayload>(\n [\"witnesses\", \"vote\"],\n username,\n ({ witness, approve }) => [\n buildWitnessVoteOp(username!, witness, approve)\n ],\n async () => {\n // Wrap post-broadcast side-effects in try-catch to prevent propagating errors\n try {\n // Cache invalidation\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.witnesses.votes(username)\n ]);\n }\n } catch (error) {\n // Log but don't rethrow - don't fail mutation due to side-effect errors\n console.warn('[useWitnessVote] Post-broadcast side-effect failed:', error);\n }\n },\n auth,\n 'active' // Use active authority for witness votes (required by blockchain)\n );\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildWitnessProxyOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface WitnessProxyPayload {\n proxy: string;\n}\n\nexport function useWitnessProxy(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<WitnessProxyPayload>(\n [\"witnesses\", \"proxy\"],\n username,\n ({ proxy }) => [\n buildWitnessProxyOp(username!, proxy)\n ],\n async () => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.witnesses.proxy(),\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core/config\";\nimport { Witness } from \"../types\";\n\ntype WitnessPage = Witness[];\ntype WitnessCursor = string;\n\n/**\n * Get witnesses ordered by vote count (infinite scroll)\n *\n * @param limit - Number of witnesses per page\n */\nexport function getWitnessesInfiniteQueryOptions(limit: number) {\n return infiniteQueryOptions<WitnessPage, Error, WitnessPage, (string | number)[], WitnessCursor>({\n queryKey: [\"witnesses\", \"list\", limit],\n initialPageParam: \"\" as WitnessCursor,\n\n queryFn: async ({ pageParam }: { pageParam: WitnessCursor }) =>\n CONFIG.hiveClient.call(\"condenser_api\", \"get_witnesses_by_vote\", [\n pageParam,\n limit,\n ]) as Promise<Witness[]>,\n\n getNextPageParam: (lastPage: WitnessPage): WitnessCursor | undefined => {\n const last = lastPage?.[lastPage.length - 1];\n return last ? last.owner : undefined;\n },\n });\n}\n","export enum PointTransactionType {\n CHECKIN = 10,\n LOGIN = 20,\n CHECKIN_EXTRA = 30,\n POST = 100,\n COMMENT = 110,\n VOTE = 120,\n REBLOG = 130,\n DELEGATION = 150,\n REFERRAL = 160,\n COMMUNITY = 170,\n TRANSFER_SENT = 998,\n TRANSFER_INCOMING = 999,\n MINTED = 991,\n}\n","import { CONFIG, getBoundFetch, getQueryClient } from \"@/modules/core\";\nimport { EcencyAnalytics } from \"@/modules/analytics\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { getPointsQueryOptions } from \"../queries\";\nimport type { Points } from \"../types\";\n\nexport function useClaimPoints(\n username: string | undefined,\n accessToken: string | undefined,\n onSuccess?: () => void,\n onError?: Parameters<typeof useMutation>[\"0\"][\"onError\"]\n) {\n const { mutateAsync: recordActivity } = EcencyAnalytics.useRecordActivity(\n username,\n \"points-claimed\"\n );\n\n return useMutation({\n mutationFn: async () => {\n if (!username) {\n throw new Error(\n \"[SDK][Points][Claim] – username wasn't provided\"\n );\n }\n\n if (!accessToken) {\n throw new Error(\n \"[SDK][Points][Claim] – access token wasn't found\"\n );\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(\n CONFIG.privateApiHost + \"/private-api/points-claim\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code: accessToken }),\n }\n );\n\n if (!response.ok) {\n const body = await response.text();\n if (response.status === 406) {\n try {\n return JSON.parse(body);\n } catch {\n return { message: body, code: response.status };\n }\n }\n throw new Error(\n `[SDK][Points][Claim] – failed with status ${response.status}${body ? `: ${body}` : \"\"}`\n );\n }\n\n return response.json();\n },\n onError,\n onSuccess: () => {\n recordActivity();\n\n getQueryClient().setQueryData<Points>(\n getPointsQueryOptions(username).queryKey,\n (data) => {\n if (!data) {\n return data;\n }\n\n return {\n ...data,\n points: (\n parseFloat(data.points) + parseFloat(data.uPoints)\n ).toFixed(3),\n uPoints: \"0\",\n };\n }\n );\n\n onSuccess?.();\n },\n });\n}\n","import { infiniteQueryOptions, queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { SearchResponse } from \"../types/search-response\";\n\nexport function searchQueryOptions(\n q: string,\n sort: string,\n hideLow: string,\n since?: string,\n scroll_id?: string,\n votes?: number\n) {\n return queryOptions({\n queryKey: [\"search\", q, sort, hideLow, since, scroll_id, votes],\n queryFn: async () => {\n const data: {\n q: string;\n sort: string;\n hide_low: string;\n since?: string;\n scroll_id?: string;\n votes?: number;\n } = { q, sort, hide_low: hideLow };\n\n if (since) data.since = since;\n if (scroll_id) data.scroll_id = scroll_id;\n if (votes) data.votes = votes;\n\n const response = await fetch(CONFIG.privateApiHost + \"/search-api/search\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`Search failed: ${response.status}`);\n }\n\n return response.json() as Promise<SearchResponse>;\n },\n });\n}\n\ntype PageParam = {\n sid: string | undefined;\n hasNextPage: boolean;\n};\n\nexport function getControversialRisingInfiniteQueryOptions(\n what: string,\n tag: string,\n enabled = true\n) {\n return infiniteQueryOptions<SearchResponse, Error, SearchResponse, (string | number)[], PageParam>({\n queryKey: [\"search\", \"controversial-rising\", what, tag],\n initialPageParam: { sid: undefined, hasNextPage: true } as PageParam,\n\n queryFn: async ({ pageParam }: { pageParam: PageParam }) => {\n if (!pageParam.hasNextPage) {\n return {\n hits: 0,\n took: 0,\n results: [],\n };\n }\n\n let sinceDate: Date | undefined;\n const now = new Date();\n\n switch (tag) {\n case \"today\":\n sinceDate = new Date(now.getTime() - 24 * 60 * 60 * 1000);\n break;\n case \"week\":\n sinceDate = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);\n break;\n case \"month\":\n sinceDate = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);\n break;\n case \"year\":\n sinceDate = new Date(now.getTime() - 365 * 24 * 60 * 60 * 1000);\n break;\n default:\n sinceDate = undefined;\n }\n\n const q = \"* type:post\";\n const sort = what === \"rising\" ? \"children\" : what;\n const since = sinceDate ? sinceDate.toISOString().split(\".\")[0] : undefined;\n const hideLow = \"0\";\n const votes = tag === \"today\" ? 50 : 200;\n\n const data: {\n q: string;\n sort: string;\n hide_low: string;\n since?: string;\n scroll_id?: string;\n votes?: number;\n } = { q, sort, hide_low: hideLow };\n\n if (since) data.since = since;\n if (pageParam.sid) data.scroll_id = pageParam.sid;\n if (votes) data.votes = votes;\n\n const response = await fetch(CONFIG.privateApiHost + \"/search-api/search\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`Search failed: ${response.status}`);\n }\n\n return response.json() as Promise<SearchResponse>;\n },\n\n getNextPageParam: (resp: SearchResponse): PageParam => {\n return {\n sid: resp?.scroll_id,\n hasNextPage: resp.results.length > 0,\n };\n },\n\n enabled,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { SearchResponse } from \"../types/search-response\";\n\ninterface Entry {\n author: string;\n permlink: string;\n json_metadata?: {\n tags?: string[];\n };\n}\n\nfunction buildQuery(entry: Entry, retry = 3) {\n const { json_metadata, permlink } = entry;\n\n let q = \"*\";\n q += ` -dporn type:post`;\n let tags;\n\n // 3 tags and decrease until there is enough relevant posts\n if (json_metadata && json_metadata.tags && Array.isArray(json_metadata.tags)) {\n tags = json_metadata.tags\n .filter((tag) => tag && tag !== \"\" && typeof tag === \"string\")\n .filter((tag) => !tag.startsWith(\"hive-\")) // filter out communities\n .filter((_tag, ind) => ind < +retry)\n .join(\",\");\n }\n\n // check to make sure tags are not empty\n if (tags && tags.length > 0) {\n q += ` tag:${tags}`;\n } else {\n // no tags in post, try with permlink\n const fperm = permlink.split(\"-\");\n tags = fperm\n .filter((part: string) => part !== \"\")\n .filter((part: string) => !/^-?\\d+$/.test(part))\n .filter((part: string) => part.length > 2)\n .join(\",\");\n q += ` tag:${tags}`;\n }\n\n return q;\n}\n\nexport function getSimilarEntriesQueryOptions(entry: Entry) {\n const query = buildQuery(entry);\n\n return queryOptions({\n queryKey: [\"search\", \"similar-entries\", entry.author, entry.permlink, query],\n queryFn: async () => {\n const data = {\n q: query,\n sort: \"newest\",\n hide_low: \"0\",\n };\n\n const response = await fetch(CONFIG.privateApiHost + \"/search-api/search\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`Search failed: ${response.status}`);\n }\n\n const searchResponse = (await response.json()) as SearchResponse;\n\n const rawEntries = searchResponse.results.filter(\n (r) => r.permlink !== entry.permlink && r.tags.indexOf(\"nsfw\") === -1\n );\n\n const entries = [];\n for (const result of rawEntries) {\n if (entries.find((y) => y.author === result.author) === undefined) {\n entries.push(result);\n }\n }\n\n return entries.slice(0, 3);\n },\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { AccountSearchResult } from \"../types/account-search-result\";\n\nexport function getSearchAccountQueryOptions(q: string, limit = 5, random = false) {\n return queryOptions({\n queryKey: [\"search\", \"account\", q, limit],\n queryFn: async () => {\n const data = { q, limit, random: +random };\n\n const response = await fetch(CONFIG.privateApiHost + \"/search-api/search-account\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to search accounts: ${response.status}`);\n }\n\n return response.json() as Promise<AccountSearchResult[]>;\n },\n enabled: !!q,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { TagSearchResult } from \"../types/tag-search-result\";\n\nexport function getSearchTopicsQueryOptions(q: string, limit = 20, random = false) {\n return queryOptions({\n queryKey: [\"search\", \"topics\", q],\n queryFn: async () => {\n const data = { q, limit, random: +random };\n\n const response = await fetch(CONFIG.privateApiHost + \"/search-api/search-tag\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to search topics: ${response.status}`);\n }\n\n return response.json() as Promise<TagSearchResult[]>;\n },\n enabled: !!q,\n });\n}\n","import { infiniteQueryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\nimport { SearchResponse } from \"../types/search-response\";\n\nexport function getSearchApiInfiniteQueryOptions(\n q: string,\n sort: string,\n hideLow: boolean,\n since?: string,\n votes?: number\n) {\n return infiniteQueryOptions({\n queryKey: [\"search\", \"api\", q, sort, hideLow, since, votes],\n queryFn: async ({ pageParam }: { pageParam: string | undefined }) => {\n interface SearchApiPayload {\n q: string;\n sort: string;\n hide_low: boolean;\n since?: string;\n scroll_id?: string;\n votes?: number;\n }\n\n const payload: SearchApiPayload = { q, sort, hide_low: hideLow };\n\n if (since) {\n payload.since = since;\n }\n if (pageParam) {\n payload.scroll_id = pageParam;\n }\n if (votes !== undefined) {\n payload.votes = votes;\n }\n\n const response = await fetch(CONFIG.privateApiHost + \"/search-api/search\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(`Search failed: ${response.status}`);\n }\n\n return response.json() as Promise<SearchResponse>;\n },\n initialPageParam: undefined as string | undefined,\n getNextPageParam: (lastPage: SearchResponse) => lastPage?.scroll_id,\n enabled: !!q,\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"@/modules/core\";\n\nexport function getSearchPathQueryOptions(q: string) {\n return queryOptions({\n queryKey: [\"search\", \"path\", q],\n queryFn: async () => {\n const response = await fetch(CONFIG.privateApiHost + \"/search-api/search-path\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ q }),\n });\n\n if (!response.ok) {\n throw new Error(`Search path failed: ${response.status}`);\n }\n\n const data = await response.json();\n\n if (data?.length > 0) {\n return data as string[];\n }\n\n return [q];\n },\n });\n}\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { AccountSearchResult } from \"./types/account-search-result\";\nimport { SearchResponse } from \"./types/search-response\";\nimport { TagSearchResult } from \"./types/tag-search-result\";\n\ntype RequestError = Error & { status?: number; data?: unknown };\n\nasync function parseJsonResponse<T>(response: Response): Promise<T> {\n const parseBody = async (): Promise<unknown> => {\n try {\n return await response.json();\n } catch {\n try {\n return await response.text();\n } catch {\n return undefined;\n }\n }\n };\n\n const data = await parseBody();\n if (!response.ok) {\n const error = new Error(`Request failed with status ${response.status}`) as RequestError;\n error.status = response.status;\n error.data = data;\n throw error;\n }\n\n if (data === undefined) {\n throw new Error(\"Response body was empty or invalid JSON\");\n }\n\n return data as T;\n}\n\nexport async function search(\n q: string,\n sort: string,\n hideLow: string,\n since?: string,\n scroll_id?: string,\n votes?: number\n): Promise<SearchResponse> {\n const data: {\n q: string;\n sort: string;\n hide_low: string;\n since?: string;\n scroll_id?: string;\n votes?: number;\n } = { q, sort, hide_low: hideLow };\n\n if (since) {\n data.since = since;\n }\n if (scroll_id) {\n data.scroll_id = scroll_id;\n }\n if (votes) {\n data.votes = votes;\n }\n\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/search-api/search\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<SearchResponse>(response);\n}\n\nexport async function searchAccount(\n q: string = \"\",\n limit: number = 20,\n random: number = 1\n): Promise<AccountSearchResult[]> {\n const data = { q, limit, random };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/search-api/search-account\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<AccountSearchResult[]>(response);\n}\n\nexport async function searchTag(\n q: string = \"\",\n limit: number = 20,\n random: number = 0\n): Promise<TagSearchResult[]> {\n const data = { q, limit, random };\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/search-api/search-tag\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n });\n\n return parseJsonResponse<TagSearchResult[]>(response);\n}\n\nexport async function searchPath(q: string): Promise<string[]> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/search-api/search-path\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ q }),\n });\n\n const data = await parseJsonResponse<string[]>(response);\n return data?.length > 0 ? data : [q];\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"../../core\";\nimport type { PromotePrice } from \"../types\";\n\nexport function getBoostPlusPricesQueryOptions(accessToken: string) {\n return queryOptions({\n queryKey: [\"promotions\", \"boost-plus-prices\"],\n queryFn: async () => {\n if (!accessToken) {\n return [];\n }\n\n const response = await fetch(CONFIG.privateApiHost + \"/private-api/boost-plus-price\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code: accessToken }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch boost plus prices: ${response.status}`);\n }\n\n return await response.json() as PromotePrice[];\n },\n staleTime: Infinity,\n refetchOnMount: true,\n enabled: !!accessToken\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"../../core\";\nimport type { PromotePrice } from \"../types\";\n\nexport function getPromotePriceQueryOptions(accessToken: string) {\n return queryOptions({\n queryKey: [\"promotions\", \"promote-price\"],\n queryFn: async () => {\n const response = await fetch(CONFIG.privateApiHost + \"/private-api/promote-price\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code: accessToken }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch promote prices: ${response.status}`);\n }\n\n return await response.json() as PromotePrice[];\n },\n enabled: !!accessToken\n });\n}\n","import { queryOptions } from \"@tanstack/react-query\";\nimport { CONFIG } from \"../../core\";\n\nexport interface BoostPlusAccountPrice {\n account: string;\n expires: Date;\n}\n\nexport function getBoostPlusAccountPricesQueryOptions(account: string, accessToken: string) {\n return queryOptions({\n queryKey: [\"promotions\", \"boost-plus-accounts\", account],\n queryFn: async (): Promise<BoostPlusAccountPrice | null> => {\n if (!accessToken || !account) {\n return null;\n }\n\n const response = await fetch(CONFIG.privateApiHost + \"/private-api/boosted-plus-account\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code: accessToken, account }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch boost plus account prices: ${response.status}`);\n }\n\n const responseData = await response.json() as {\n expires: string;\n account: string;\n };\n\n return responseData\n ? {\n account: responseData.account,\n expires: new Date(responseData.expires)\n }\n : null;\n },\n enabled: !!account && !!accessToken\n });\n}\n","import { useBroadcastMutation, QueryKeys } from \"@/modules/core\";\nimport { buildBoostPlusOp } from \"@/modules/operations/builders\";\nimport type { AuthContextV2 } from \"@/modules/core/types\";\n\nexport interface BoostPlusPayload {\n account: string;\n duration: number;\n}\n\nexport function useBoostPlus(\n username: string | undefined,\n auth?: AuthContextV2\n) {\n return useBroadcastMutation<BoostPlusPayload>(\n [\"promotions\", \"boost-plus\"],\n username,\n ({ account, duration }) => [\n buildBoostPlusOp(username!, account, duration)\n ],\n async (_data, { account }) => {\n if (auth?.adapter?.invalidateQueries) {\n await auth.adapter.invalidateQueries([\n QueryKeys.accounts.full(username),\n QueryKeys.promotions.boostPlusAccounts(account),\n ]);\n }\n },\n auth,\n 'active'\n );\n}\n","import { CONFIG, getBoundFetch } from \"@/modules/core\";\nimport { HsTokenRenewResponse } from \"./types\";\n\ntype RequestError = Error & { status?: number; data?: unknown };\n\nexport async function hsTokenRenew(code: string): Promise<HsTokenRenewResponse> {\n const fetchApi = getBoundFetch();\n const response = await fetchApi(CONFIG.privateApiHost + \"/auth-api/hs-token-refresh\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ code }),\n });\n\n if (!response.ok) {\n let data: unknown = undefined;\n try {\n data = await response.json();\n } catch {\n data = undefined;\n }\n const error = new Error(`Failed to refresh token: ${response.status}`) as RequestError;\n error.status = response.status;\n error.data = data;\n throw error;\n }\n\n const data = (await response.json()) as HsTokenRenewResponse;\n return data;\n}\n"]}
|