Joystream Stats před 3 roky
rodič
revize
c140882abb
1 změnil soubory, kde provedl 159 přidání a 162 odebrání
  1. 159 162
      api.ts

+ 159 - 162
api.ts

@@ -1,10 +1,10 @@
-import { ApiPromise } from '@polkadot/api'
-import moment from 'moment'
+import { ApiPromise } from "@polkadot/api";
+import moment from "moment";
 
 // types
-import { AccountBalance, ElectionInfo, Round, ProposalDetail } from './types'
-import { Option, u32, u64, Vec } from '@polkadot/types'
-import type { Codec, Observable } from '@polkadot/types/types'
+import { AccountBalance, ElectionInfo, Round, ProposalDetail } from "./types";
+import { Option, u32, u64, Vec } from "@polkadot/types";
+import type { Codec, Observable } from "@polkadot/types/types";
 import {
   AccountId,
   AccountInfo,
@@ -15,21 +15,21 @@ import {
   EventRecord,
   Hash,
   Moment,
-} from '@polkadot/types/interfaces'
-import { SignedBlock } from '@polkadot/types/interfaces/runtime'
+} from "@polkadot/types/interfaces";
+import { SignedBlock } from "@polkadot/types/interfaces/runtime";
 
-import { PostId, ThreadId } from '@joystream/types/common'
-import { CategoryId, Category, Thread, Post } from '@joystream/types/forum'
+import { PostId, ThreadId } from "@joystream/types/common";
+import { CategoryId, Category, Thread, Post } from "@joystream/types/forum";
 import {
   ElectionStage,
   ElectionStake,
   SealedVote,
   Seats,
-} from '@joystream/types/council'
-import { Entity, EntityId } from '@joystream/types/content-directory'
-import { ContentId, DataObject } from '@joystream/types/media'
-import { MemberId, Membership } from '@joystream/types/members'
-import { Mint, MintId } from '@joystream/types/mint'
+} from "@joystream/types/council";
+import { Entity, EntityId } from "@joystream/types/content-directory";
+import { ContentId, DataObject } from "@joystream/types/media";
+import { MemberId, Membership } from "@joystream/types/members";
+import { Mint, MintId } from "@joystream/types/mint";
 import {
   Proposal,
   ProposalId,
@@ -37,60 +37,60 @@ import {
   DiscussionPost,
   SpendingParams,
   VoteKind,
-} from '@joystream/types/proposals'
-import { Stake, StakeId } from '@joystream/types/stake'
+} from "@joystream/types/proposals";
+import { Stake, StakeId } from "@joystream/types/stake";
 import {
   RewardRelationship,
   RewardRelationshipId,
-} from '@joystream/types/recurring-rewards'
-import { WorkerId, Worker } from '@joystream/types/working-group'
+} from "@joystream/types/recurring-rewards";
+import { WorkerId, Worker } from "@joystream/types/working-group";
 
 // blocks
 export const getBlock = (api: ApiPromise, hash: Hash): Promise<SignedBlock> =>
-  api.rpc.chain.getBlock(hash)
+  api.rpc.chain.getBlock(hash);
 
 export const getBlockHash = (
   api: ApiPromise,
   block: BlockNumber | number
 ): Promise<Hash> => {
   try {
-    return api.rpc.chain.getBlockHash(block)
+    return api.rpc.chain.getBlockHash(block);
   } catch (e) {
-    console.error(`BlockHash: ${block}`)
+    console.error(`BlockHash: ${block}`);
     //const head =
     //return api.query.system.blockHash(head)
     //return api.query.system.parentHash()
-    return api.rpc.chain.getFinalizedHead()
+    return api.rpc.chain.getFinalizedHead();
   }
-}
+};
 
 export const getTimestamp = async (
   api: ApiPromise,
   hash: Hash
 ): Promise<number> =>
-  moment.utc((await api.query.timestamp.now.at(hash)).toNumber()).valueOf()
+  moment.utc((await api.query.timestamp.now.at(hash)).toNumber()).valueOf();
 
 export const getIssuance = (api: ApiPromise, hash: Hash): Promise<Balance> =>
-  api.query.balances.totalIssuance.at(hash)
+  api.query.balances.totalIssuance.at(hash);
 
 export const getEvents = (
   api: ApiPromise,
   hash: Hash
-): Promise<Vec<EventRecord>> => api.query.system.events.at(hash)
+): Promise<Vec<EventRecord>> => api.query.system.events.at(hash);
 
 export const getEra = async (api: ApiPromise, hash: Hash): Promise<number> =>
-  Number(api.query.staking.currentEra.at(hash))
+  Number(api.query.staking.currentEra.at(hash));
 
 export const getEraStake = async (
   api: ApiPromise,
   hash: Hash,
   era: EraIndex | number
 ): Promise<number> =>
-  (await api.query.staking.erasTotalStake.at(hash, era)).toNumber()
+  (await api.query.staking.erasTotalStake.at(hash, era)).toNumber();
 
 // council
 export const getCouncil = (api: ApiPromise, hash: Hash): Promise<Seats> =>
-  api.query.council.activeCouncil.at(hash)
+  api.query.council.activeCouncil.at(hash);
 
 export const getCouncils = async (
   api: ApiPromise,
@@ -107,118 +107,118 @@ export const getCouncils = async (
   const d: number[] = await getCouncilElectionDurations(
     api,
     await getBlockHash(api, 1)
-  )
-  const electionDuration = d[0] + d[1] + d[2]
+  );
+  const electionDuration = d[0] + d[1] + d[2];
 
-  const starts: number[] = []
-  let lastEnd = 1
+  const starts: number[] = [];
+  let lastEnd = 1;
   for (let block = lastEnd; block < head; block += electionDuration) {
-    const hash = await getBlockHash(api, block)
-    const end = Number(await api.query.council.termEndsAt.at(hash))
-    if (end === lastEnd) continue
-    lastEnd = end
-    starts.push(end - d[3] + 1)
+    const hash = await getBlockHash(api, block);
+    const end = Number(await api.query.council.termEndsAt.at(hash));
+    if (end === lastEnd) continue;
+    lastEnd = end;
+    starts.push(end - d[3] + 1);
   }
 
   // index by round: each start is the end of the previous term
-  const rounds: { [key: number]: Round } = {}
+  const rounds: { [key: number]: Round } = {};
   await Promise.all(
     starts.map(async (start: number, index: number) => {
-      const hash = await getBlockHash(api, start)
-      const round = await getCouncilRound(api, hash)
-      const isLast = index === starts.length - 1
-      const end = isLast ? start + d[4] : starts[index + 1] - 1
-      rounds[round] = { start, round, end }
+      const hash = await getBlockHash(api, start);
+      const round = await getCouncilRound(api, hash);
+      const isLast = index === starts.length - 1;
+      const end = isLast ? start + d[4] : starts[index + 1] - 1;
+      rounds[round] = { start, round, end };
     })
-  )
-  return Object.values(rounds)
-}
+  );
+  return Object.values(rounds);
+};
 
 export const getCouncilRound = async (
   api: ApiPromise,
   hash: Hash
 ): Promise<number> =>
-  ((await api.query.councilElection.round.at(hash)) as u32).toNumber()
+  ((await api.query.councilElection.round.at(hash)) as u32).toNumber();
 
 export const getCouncilElectionStage = async (
   api: ApiPromise,
   hash: Hash
 ): Promise<ElectionStage> =>
-  (await api.query.councilElection.stage.at(hash)) as ElectionStage
+  (await api.query.councilElection.stage.at(hash)) as ElectionStage;
 
 export const getCouncilTermEnd = async (
   api: ApiPromise,
   hash: Hash
 ): Promise<number> =>
-  ((await api.query.council.termEndsAt.at(hash)) as BlockNumber).toNumber()
+  ((await api.query.council.termEndsAt.at(hash)) as BlockNumber).toNumber();
 
 export const getCouncilElectionStatus = async (
   api: ApiPromise,
   hash: Hash
 ): Promise<ElectionInfo> => {
-  const durations = await getCouncilElectionDurations(api, hash)
-  const round = await getCouncilRound(api, hash)
-  const stage: ElectionStage = await getCouncilElectionStage(api, hash)
-  const stageEndsAt: number = Number(stage.value as BlockNumber)
-  const termEndsAt: number = await getCouncilTermEnd(api, hash)
-  return { round, stageEndsAt, termEndsAt, stage, durations }
-}
+  const durations = await getCouncilElectionDurations(api, hash);
+  const round = await getCouncilRound(api, hash);
+  const stage: ElectionStage = await getCouncilElectionStage(api, hash);
+  const stageEndsAt: number = Number(stage.value as BlockNumber);
+  const termEndsAt: number = await getCouncilTermEnd(api, hash);
+  return { round, stageEndsAt, termEndsAt, stage, durations };
+};
 
 export const getCouncilSize = async (
   api: ApiPromise,
   hash: Hash
 ): Promise<number> =>
-  ((await api.query.councilElection.councilSize.at(hash)) as u32).toNumber()
+  ((await api.query.councilElection.councilSize.at(hash)) as u32).toNumber();
 
 export const getCouncilApplicants = (
   api: ApiPromise,
   hash: Hash
-): Promise<Vec<AccountId>> => api.query.councilElection.applicants.at(hash)
+): Promise<Vec<AccountId>> => api.query.councilElection.applicants.at(hash);
 
 export const getCouncilApplicantStakes = (
   api: ApiPromise,
   hash: Hash,
   applicant: AccountId
 ): Promise<ElectionStake> =>
-  api.query.councilElection.applicantStakes.at(hash, applicant)
+  api.query.councilElection.applicantStakes.at(hash, applicant);
 
 export const getCouncilCommitments = (
   api: ApiPromise,
   hash: Hash
-): Promise<Vec<Hash>> => api.query.councilElection.commitments.at(hash)
+): Promise<Vec<Hash>> => api.query.councilElection.commitments.at(hash);
 
 export const getCouncilPayoutInterval = (
   api: ApiPromise,
   hash: Hash
-): Promise<Option<BlockNumber>> => api.query.council.payoutInterval.at(hash)
+): Promise<Option<BlockNumber>> => api.query.council.payoutInterval.at(hash);
 
 export const getCouncilPayout = (
   api: ApiPromise,
   hash: Hash
-): Promise<Balance> => api.query.council.amountPerPayout.at(hash)
+): Promise<Balance> => api.query.council.amountPerPayout.at(hash);
 
 const getCouncilElectionPeriod = (
   api: ApiPromise,
   hash: Hash,
   period: string
-): Promise<BlockNumber> => api.query.councilElection[period].at(hash)
+): Promise<BlockNumber> => api.query.councilElection[period].at(hash);
 
 export const getCouncilElectionDurations = async (
   api: ApiPromise,
   hash: Hash
 ): Promise<number[]> => {
   const periods = [
-    'announcingPeriod',
-    'votingPeriod',
-    'revealingPeriod',
-    'newTermDuration',
-  ]
+    "announcingPeriod",
+    "votingPeriod",
+    "revealingPeriod",
+    "newTermDuration",
+  ];
   let durations = await Promise.all(
     periods.map((period: string) => getCouncilElectionPeriod(api, hash, period))
-  ).then((d) => d.map((block: BlockNumber) => block.toNumber()))
-  durations.push(durations[0] + durations[1] + durations[2] + durations[3])
-  return durations
-}
+  ).then((d) => d.map((block: BlockNumber) => block.toNumber()));
+  durations.push(durations[0] + durations[1] + durations[2] + durations[3]);
+  return durations;
+};
 
 // working groups
 export const getNextWorker = async (
@@ -226,79 +226,79 @@ export const getNextWorker = async (
   group: string,
   hash: Hash
 ): Promise<number> =>
-  ((await api.query[group].nextWorkerId.at(hash)) as WorkerId).toNumber()
+  ((await api.query[group].nextWorkerId.at(hash)) as WorkerId).toNumber();
 
 export const getWorker = (
   api: ApiPromise,
   group: string,
   hash: Hash,
   id: number
-): Promise<Worker> => api.query[group].workerById.at(hash, id)
+): Promise<Worker> => api.query[group].workerById.at(hash, id);
 
 export const getWorkers = (
   api: ApiPromise,
   group: string,
   hash: Hash
-): Promise<number> => api.query[group].activeWorkerCount.at(hash)
+): Promise<number> => api.query[group].activeWorkerCount.at(hash);
 
 export const getStake = async (
   api: ApiPromise,
   id: StakeId | number
-): Promise<Stake> => (await api.query.stake.stakes(id)) as Stake
+): Promise<Stake> => (await api.query.stake.stakes(id)) as Stake;
 
 export const getWorkerReward = (
   api: ApiPromise,
   hash: Hash,
   id: RewardRelationshipId | number
 ): Promise<RewardRelationship> =>
-  api.query.recurringRewards.rewardRelationships.at(hash, id)
+  api.query.recurringRewards.rewardRelationships.at(hash, id);
 
 // mints
 export const getCouncilMint = (api: ApiPromise, hash: Hash): Promise<MintId> =>
-  api.query.council.councilMint.at(hash)
+  api.query.council.councilMint.at(hash);
 
 export const getGroupMint = (
   api: ApiPromise,
   group: string,
   hash: Hash
-): Promise<MintId> => api.query[group].mint.at(hash)
+): Promise<MintId> => api.query[group].mint.at(hash);
 
 export const getMintsCreated = async (
   api: ApiPromise,
   hash: Hash
-): Promise<number> => parseInt(await api.query.minting.mintsCreated.at(hash))
+): Promise<number> => parseInt(await api.query.minting.mintsCreated.at(hash));
 
 export const getMint = (
   api: ApiPromise,
   hash: Hash,
   id: MintId | number
-): Promise<Mint> => api.query.minting.mints.at(hash, id)
+): Promise<Mint> => api.query.minting.mints.at(hash, id);
 
 // members
 export const getAccounts = async (
   api: ApiPromise
 ): Promise<AccountBalance[]> => {
-  let accounts: AccountBalance[] = []
-  const entries = await api.query.system.account.entries()
+  let accounts: AccountBalance[] = [];
+  const entries = await api.query.system.account.entries();
   for (const account of entries) {
-    const accountId = String(account[0].toHuman())
-    const balance = account[1].data.toJSON() as unknown as AccountData
-    accounts.push({ accountId, balance })
+    const accountId = String(account[0].toHuman());
+    const balance = (account[1].data.toJSON() as unknown) as AccountData;
+    accounts.push({ accountId, balance });
   }
-  return accounts
-}
+  return accounts;
+};
 
 export const getAccount = (
   api: ApiPromise,
   hash: Hash,
   account: AccountId | string
-): Promise<AccountInfo> => api.query.system.account.at(hash, account)
+): Promise<AccountInfo> => api.query.system.account.at(hash, account);
 
 export const getNextMember = async (
   api: ApiPromise,
   hash: Hash
 ): Promise<number> =>
-  ((await api.query.members.nextMemberId.at(hash)) as MemberId).toNumber()
+  ((await api.query.members.nextMemberId.at(hash)) as MemberId).toNumber();
 
 export const getMember = async (
   api: ApiPromise,
@@ -307,7 +307,7 @@ export const getMember = async (
 ): Promise<Membership> =>
   (await (hash
     ? api.query.members.membershipById.at(hash, id)
-    : api.query.members.membershipById(id))) as Membership
+    : api.query.members.membershipById(id))) as Membership;
 
 export const getMemberIdByAccount = async (
   api: ApiPromise,
@@ -315,56 +315,54 @@ export const getMemberIdByAccount = async (
 ): Promise<MemberId> => {
   const ids = (await api.query.members.memberIdsByRootAccountId(
     accountId
-  )) as Vec<MemberId>
-  return ids[0]
-}
+  )) as Vec<MemberId>;
+  return ids[0];
+};
 
 // forum
 export const getNextPost = async (
   api: ApiPromise,
   hash: Hash
 ): Promise<number> =>
-  ((await api.query.forum.nextPostId.at(hash)) as PostId).toNumber()
+  ((await api.query.forum.nextPostId.at(hash)) as PostId).toNumber();
 
 export const getNextThread = async (
   api: ApiPromise,
   hash: Hash
 ): Promise<number> =>
-  ((await api.query.forum.nextThreadId.at(hash)) as ThreadId).toNumber()
+  ((await api.query.forum.nextThreadId.at(hash)) as ThreadId).toNumber();
 
 export const getNextCategory = async (
   api: ApiPromise,
   hash: Hash
 ): Promise<number> =>
-  ((await api.query.forum.nextCategoryId.at(hash)) as CategoryId).toNumber()
+  ((await api.query.forum.nextCategoryId.at(hash)) as CategoryId).toNumber();
 
 export const getCategory = async (
   api: ApiPromise,
   id: number
-): Promise<Category> => (await api.query.forum.categoryById(id)) as Category
+): Promise<Category> => (await api.query.forum.categoryById(id)) as Category;
 
 export const getThread = async (api: ApiPromise, id: number): Promise<Thread> =>
-  (await api.query.forum.threadById(id)) as Thread
+  (await api.query.forum.threadById(id)) as Thread;
 
 export const getPost = async (api: ApiPromise, id: number): Promise<Post> =>
-  (await api.query.forum.postById(id)) as Post
+  (await api.query.forum.postById(id)) as Post;
 
 // proposals
 export const getProposalCount = async (
   api: ApiPromise,
   hash?: Hash
 ): Promise<number> =>
-  (
-    (await (hash
-      ? api.query.proposalsEngine.proposalCount.at(hash)
-      : api.query.proposalsEngine.proposalCount())) as u32
-  ).toNumber()
+  ((await (hash
+    ? api.query.proposalsEngine.proposalCount.at(hash)
+    : api.query.proposalsEngine.proposalCount())) as u32).toNumber();
 
 export const getProposalInfo = async (
   api: ApiPromise,
   id: ProposalId
 ): Promise<Proposal> =>
-  (await api.query.proposalsEngine.proposals(id)) as Proposal
+  (await api.query.proposalsEngine.proposals(id)) as Proposal;
 
 export const getProposalDetails = async (
   api: ApiPromise,
@@ -372,43 +370,43 @@ export const getProposalDetails = async (
 ): Promise<ProposalDetails> =>
   (await api.query.proposalsCodex.proposalDetailsByProposalId(
     id
-  )) as ProposalDetails
+  )) as ProposalDetails;
 
 export const getProposalType = async (
   api: ApiPromise,
   id: ProposalId
 ): Promise<string> => {
-  const details = (await getProposalDetails(api, id)) as ProposalDetails
-  const [type]: string[] = Object.getOwnPropertyNames(details.toJSON())
-  return type
-}
+  const details = (await getProposalDetails(api, id)) as ProposalDetails;
+  const [type]: string[] = Object.getOwnPropertyNames(details.toJSON());
+  return type;
+};
 
 export const getProposal = async (
   api: ApiPromise,
   id: ProposalId
 ): Promise<ProposalDetail> => {
-  const proposal = await getProposalInfo(api, id)
-  const status: { [key: string]: any } = proposal.status
-  const stage: string = status.isActive ? 'Active' : 'Finalized'
-  const { finalizedAt, proposalStatus } = status[`as${stage}`]
+  const proposal = await getProposalInfo(api, id);
+  const status: { [key: string]: any } = proposal.status;
+  const stage: string = status.isActive ? "Active" : "Finalized";
+  const { finalizedAt, proposalStatus } = status[`as${stage}`];
   const result: string = proposalStatus
-    ? (proposalStatus.isApproved && 'Approved') ||
-      (proposalStatus.isCanceled && 'Canceled') ||
-      (proposalStatus.isExpired && 'Expired') ||
-      (proposalStatus.isRejected && 'Rejected') ||
-      (proposalStatus.isSlashed && 'Slashed') ||
-      (proposalStatus.isVetoed && 'Vetoed')
-    : 'Pending'
-  const exec = proposalStatus ? proposalStatus['Approved'] : null
-
-  const { description, parameters, proposerId, votingResults } = proposal
-  const member = await getMember(api, proposerId)
-  const author = String(member ? member.handle : proposerId)
-  const title = proposal.title.toString()
-  const type = await getProposalType(api, id)
-  const args: string[] = [String(id), title, type, stage, result, author]
-  const message: string = `` //formatProposalMessage(args)
-  const created: number = Number(proposal.createdAt)
+    ? (proposalStatus.isApproved && "Approved") ||
+      (proposalStatus.isCanceled && "Canceled") ||
+      (proposalStatus.isExpired && "Expired") ||
+      (proposalStatus.isRejected && "Rejected") ||
+      (proposalStatus.isSlashed && "Slashed") ||
+      (proposalStatus.isVetoed && "Vetoed")
+    : "Pending";
+  const exec = proposalStatus ? proposalStatus["Approved"] : null;
+
+  const { description, parameters, proposerId, votingResults } = proposal;
+  const member = await getMember(api, proposerId);
+  const author = String(member ? member.handle : proposerId);
+  const title = proposal.title.toString();
+  const type = await getProposalType(api, id);
+  const args: string[] = [String(id), title, type, stage, result, author];
+  const message: string = ``; //formatProposalMessage(args)
+  const created: number = Number(proposal.createdAt);
 
   return {
     id: Number(id),
@@ -425,23 +423,24 @@ export const getProposal = async (
     type,
     author,
     authorId: Number(proposerId),
-  }
-}
+  };
+};
 
 export const getProposalVotes = async (
   api: ApiPromise,
   id: ProposalId | number
 ): Promise<{ memberId: number; vote: string }[]> => {
-  let votes: { memberId: number; vote: string }[] = []
-  const entries =
-    await api.query.proposalsEngine.voteExistsByProposalByVoter.entries(id)
+  let votes: { memberId: number; vote: string }[] = [];
+  const entries = await api.query.proposalsEngine.voteExistsByProposalByVoter.entries(
+    id
+  );
   entries.forEach((entry: any) => {
-    const memberId = entry[0].args[1].toJSON()
-    const vote = entry[1].toString()
-    votes.push({ memberId, vote })
-  })
-  return votes
-}
+    const memberId = entry[0].args[1].toJSON();
+    const vote = entry[1].toString();
+    votes.push({ memberId, vote });
+  });
+  return votes;
+};
 
 export const getProposalPost = async (
   api: ApiPromise,
@@ -451,68 +450,66 @@ export const getProposalPost = async (
   (await api.query.proposalsDiscussion.postThreadIdByPostId(
     threadId,
     postId
-  )) as DiscussionPost
+  )) as DiscussionPost;
 
 export const getProposalPostCount = async (api: ApiPromise): Promise<number> =>
-  Number((await api.query.proposalsDiscussion.postCount()) as u64)
+  Number((await api.query.proposalsDiscussion.postCount()) as u64);
 
 export const getProposalThreadCount = async (
   api: ApiPromise
 ): Promise<number> =>
-  Number((await api.query.proposalsDiscussion.threadCount()) as u64)
+  Number((await api.query.proposalsDiscussion.threadCount()) as u64);
 
 // validators
 export const getValidatorCount = async (
   api: ApiPromise,
   hash: Hash
 ): Promise<number> =>
-  ((await api.query.staking.validatorCount.at(hash)) as u32).toNumber()
+  ((await api.query.staking.validatorCount.at(hash)) as u32).toNumber();
 
 export const getValidators = async (
   api: ApiPromise,
   hash: Hash
 ): Promise<AccountId[]> =>
-  (
-    (await api.query.staking.snapshotValidators.at(hash)) as Option<
-      Vec<AccountId>
-    >
-  ).unwrap()
+  ((await api.query.staking.snapshotValidators.at(hash)) as Option<
+    Vec<AccountId>
+  >).unwrap();
 
 // media
 export const getNextEntity = async (
   api: ApiPromise,
   hash: Hash
 ): Promise<number> =>
-  (
-    (await api.query.contentDirectory.nextEntityId.at(hash)) as EntityId
-  ).toNumber()
+  ((await api.query.contentDirectory.nextEntityId.at(
+    hash
+  )) as EntityId).toNumber();
 
 export const getNextChannel = async (
   api: ApiPromise,
   hash: Hash
-): Promise<number> => api.query.content.nextChannelId.at(hash)
+): Promise<number> => api.query.content.nextChannelId.at(hash);
 
 export const getNextVideo = async (
   api: ApiPromise,
   hash: Hash
-): Promise<number> => api.query.content.nextVideoId.at(hash)
+): Promise<number> => api.query.content.nextVideoId.at(hash);
 
 export const getEntity = (
   api: ApiPromise,
   hash: Hash,
   id: number
-): Promise<Entity> => api.query.contentDirectory.entityById.at(hash, id)
+): Promise<Entity> => api.query.contentDirectory.entityById.at(hash, id);
 
 export const getDataObjects = async (
   api: ApiPromise
 ): Promise<Map<ContentId, DataObject>> =>
-  (await api.query.dataDirectory.dataByContentId.entries()) as unknown as Map<
+  ((await api.query.dataDirectory.dataByContentId.entries()) as unknown) as Map<
     ContentId,
     DataObject
-  >
+  >;
 
 export const getDataObject = async (
   api: ApiPromise,
   id: ContentId
 ): Promise<Option<DataObject>> =>
-  (await api.query.dataDirectory.dataByContentId(id)) as Option<DataObject>
+  (await api.query.dataDirectory.dataByContentId(id)) as Option<DataObject>;