Browse Source

Merge branch 'iznik' into joy-members-upgrage

Leszek Wiesner 4 years ago
parent
commit
ae844aadd2
31 changed files with 724 additions and 133 deletions
  1. 2 1
      package.json
  2. 3 11
      pioneer/packages/joy-proposals/src/Proposal/ProposalDetails.tsx
  3. 2 2
      pioneer/packages/joy-proposals/src/Proposal/ProposalFromId.tsx
  4. 53 36
      pioneer/packages/joy-proposals/src/Proposal/Votes.tsx
  5. 1 1
      pioneer/packages/joy-roles/src/transport.substrate.ts
  6. 27 26
      pioneer/packages/joy-utils-old/src/react/hooks/proposals/useProposalSubscription.tsx
  7. 23 0
      types/src/common.ts
  8. 9 18
      types/src/content-working-group/index.ts
  9. 125 8
      types/src/definitions/augment-types.ts
  10. 11 0
      types/src/hiring/index.ts
  11. 4 0
      types/src/mint/index.ts
  12. 6 1
      types/src/proposals.ts
  13. 2 0
      types/src/scripts/updateAugmentTypes.ts
  14. 6 0
      types/src/stake/index.ts
  15. 25 1
      types/src/versioned-store/permissions/index.ts
  16. 5 25
      types/src/working-group/index.ts
  17. 2 2
      types/tsconfig-scripts.json
  18. 46 0
      utils/api-examples/README.md
  19. 25 0
      utils/api-examples/package.json
  20. 32 0
      utils/api-examples/scripts/example.js
  21. 49 0
      utils/api-examples/scripts/export-data-directory.js
  22. 9 0
      utils/api-examples/scripts/index.js
  23. 15 0
      utils/api-examples/scripts/inject-data-objects.js
  24. 33 0
      utils/api-examples/scripts/list-data-directory.js
  25. 31 0
      utils/api-examples/scripts/transfer.js
  26. 20 0
      utils/api-examples/src/get-code.ts
  27. 52 0
      utils/api-examples/src/script.ts
  28. 56 0
      utils/api-examples/src/status.ts
  29. 30 0
      utils/api-examples/src/tohex.ts
  30. 19 0
      utils/api-examples/tsconfig.json
  31. 1 1
      yarn.lock

+ 2 - 1
package.json

@@ -25,7 +25,8 @@
     "pioneer/packages/react*",
     "pioneer/packages/react*",
     "pioneer/packages/joy-utils",
     "pioneer/packages/joy-utils",
     "pioneer/packages/joy-members",
     "pioneer/packages/joy-members",
-    "pioneer/packages/joy-pages"
+    "pioneer/packages/joy-pages",
+    "utils/api-examples"
   ],
   ],
   "resolutions": {
   "resolutions": {
     "@polkadot/api": "1.26.1",
     "@polkadot/api": "1.26.1",

+ 3 - 11
pioneer/packages/joy-proposals/src/Proposal/ProposalDetails.tsx

@@ -5,7 +5,7 @@ import Body from './Body';
 import VotingSection from './VotingSection';
 import VotingSection from './VotingSection';
 import Votes from './Votes';
 import Votes from './Votes';
 import { MyAccountProps, withMyAccount } from '@polkadot/joy-utils/MyAccount';
 import { MyAccountProps, withMyAccount } from '@polkadot/joy-utils/MyAccount';
-import { ParsedProposal, ProposalVotes } from '@polkadot/joy-utils/types/proposals';
+import { ParsedProposal } from '@polkadot/joy-utils/types/proposals';
 import { withCalls } from '@polkadot/react-api';
 import { withCalls } from '@polkadot/react-api';
 import { withMulti } from '@polkadot/react-api/with';
 import { withMulti } from '@polkadot/react-api/with';
 
 
@@ -14,7 +14,6 @@ import { ProposalId, ProposalDecisionStatuses, ApprovedProposalStatuses, Executi
 import { BlockNumber } from '@polkadot/types/interfaces';
 import { BlockNumber } from '@polkadot/types/interfaces';
 import { MemberId } from '@joystream/types/members';
 import { MemberId } from '@joystream/types/members';
 import { Seat } from '@joystream/types/council';
 import { Seat } from '@joystream/types/council';
-import { PromiseComponent } from '@polkadot/joy-utils/react/components';
 import ProposalDiscussion from './discussion/ProposalDiscussion';
 import ProposalDiscussion from './discussion/ProposalDiscussion';
 
 
 import styled from 'styled-components';
 import styled from 'styled-components';
@@ -115,7 +114,6 @@ export function getExtendedStatus (proposal: ParsedProposal, bestNumber: BlockNu
 type ProposalDetailsProps = MyAccountProps & {
 type ProposalDetailsProps = MyAccountProps & {
   proposal: ParsedProposal;
   proposal: ParsedProposal;
   proposalId: ProposalId;
   proposalId: ProposalId;
-  votesListState: { data: ProposalVotes | null; error: any; loading: boolean };
   bestNumber?: BlockNumber;
   bestNumber?: BlockNumber;
   council?: Seat[];
   council?: Seat[];
 };
 };
@@ -127,8 +125,7 @@ function ProposalDetails ({
   myMemberId,
   myMemberId,
   iAmMember,
   iAmMember,
   council,
   council,
-  bestNumber,
-  votesListState
+  bestNumber
 }: ProposalDetailsProps) {
 }: ProposalDetailsProps) {
   const iAmCouncilMember = Boolean(iAmMember && council && council.some(seat => seat.member.toString() === myAddress));
   const iAmCouncilMember = Boolean(iAmMember && council && council.some(seat => seat.member.toString() === myAddress));
   const iAmProposer = Boolean(iAmMember && myMemberId !== undefined && proposal.proposerId === myMemberId.toNumber());
   const iAmProposer = Boolean(iAmMember && myMemberId !== undefined && proposal.proposerId === myMemberId.toNumber());
@@ -156,12 +153,7 @@ function ProposalDetails ({
               memberId={ myMemberId as MemberId }
               memberId={ myMemberId as MemberId }
               isVotingPeriod={ isVotingPeriod }/>
               isVotingPeriod={ isVotingPeriod }/>
           ) }
           ) }
-          <PromiseComponent
-            error={votesListState.error}
-            loading={votesListState.loading}
-            message="Fetching the votes...">
-            <Votes votes={votesListState.data as ProposalVotes} />
-          </PromiseComponent>
+          <Votes proposal={proposal}/>
         </ProposalDetailsVoting>
         </ProposalDetailsVoting>
       </ProposalDetailsMain>
       </ProposalDetailsMain>
       <ProposalDetailsDiscussion>
       <ProposalDetailsDiscussion>

+ 2 - 2
pioneer/packages/joy-proposals/src/Proposal/ProposalFromId.tsx

@@ -12,14 +12,14 @@ export default function ProposalFromId (props: RouteComponentProps<any>) {
     }
     }
   } = props;
   } = props;
 
 
-  const { proposal: proposalState, votes: votesState } = useProposalSubscription(new ProposalId(id));
+  const proposalState = useProposalSubscription(new ProposalId(id));
 
 
   return (
   return (
     <PromiseComponent
     <PromiseComponent
       error={proposalState.error}
       error={proposalState.error}
       loading={proposalState.loading}
       loading={proposalState.loading}
       message={'Fetching proposal...'}>
       message={'Fetching proposal...'}>
-      <ProposalDetails proposal={ proposalState.data } proposalId={ id } votesListState={ votesState }/>
+      <ProposalDetails proposal={ proposalState.data } proposalId={ id }/>
     </PromiseComponent>
     </PromiseComponent>
   );
   );
 }
 }

+ 53 - 36
pioneer/packages/joy-proposals/src/Proposal/Votes.tsx

@@ -1,50 +1,67 @@
 import React from 'react';
 import React from 'react';
 import { Header, Divider, Table, Icon } from 'semantic-ui-react';
 import { Header, Divider, Table, Icon } from 'semantic-ui-react';
 import useVoteStyles from './useVoteStyles';
 import useVoteStyles from './useVoteStyles';
-import { ProposalVotes } from '@polkadot/joy-utils/types/proposals';
 import { VoteKind } from '@joystream/types/proposals';
 import { VoteKind } from '@joystream/types/proposals';
 import { VoteKindStr } from './VotingSection';
 import { VoteKindStr } from './VotingSection';
 import ProfilePreview from '@polkadot/joy-utils/MemberProfilePreview';
 import ProfilePreview from '@polkadot/joy-utils/MemberProfilePreview';
+import { useTransport, usePromise } from '@polkadot/joy-utils/react/hooks';
+import { ParsedProposal, ProposalVotes } from '@polkadot/joy-utils/types/proposals';
+import { PromiseComponent } from '@polkadot/joy-utils/react/components';
 
 
 type VotesProps = {
 type VotesProps = {
-  votes: ProposalVotes;
+  proposal: ParsedProposal;
 };
 };
 
 
-export default function Votes ({ votes }: VotesProps) {
-  if (!votes.votes.length) {
-    return <Header as="h4">No votes have been submitted!</Header>;
-  }
+export default function Votes ({ proposal: { id, votingResults } }: VotesProps) {
+  const transport = useTransport();
+  const [votes, error, loading] = usePromise<ProposalVotes | null>(
+    () => transport.proposals.votes(id),
+    null,
+    [votingResults]
+  );
 
 
   return (
   return (
-    <>
-      <Header as="h3">
-        All Votes: ({votes.votes.length}/{votes.councilMembersLength})
-      </Header>
-      <Divider />
-      <Table basic="very">
-        <Table.Body>
-          {votes.votes.map((proposalVote, idx) => {
-            const { vote, member } = proposalVote;
-            const voteStr = (vote as VoteKind).type.toString() as VoteKindStr;
-            const { icon, textColor } = useVoteStyles(voteStr);
-            return (
-              <Table.Row key={`${member.handle}-${idx}`}>
-                <Table.Cell className={textColor}>
-                  <Icon name={icon} />
-                  {voteStr}
-                </Table.Cell>
-                <Table.Cell>
-                  <ProfilePreview
-                    handle={member.handle}
-                    avatar_uri={member.avatar_uri}
-                    root_account={member.root_account}
-                  />
-                </Table.Cell>
-              </Table.Row>
-            );
-          })}
-        </Table.Body>
-      </Table>
-    </>
+    <PromiseComponent
+      error={error}
+      loading={loading}
+      message="Fetching the votes...">
+      { (votes && votes.votes.length > 0)
+        ? (
+          <>
+            <Header as="h3">
+              All Votes: ({votes.votes.length}/{votes.councilMembersLength})
+            </Header>
+            <Divider />
+            <Table basic="very">
+              <Table.Body>
+                {votes.votes.map((proposalVote, idx) => {
+                  const { vote, member } = proposalVote;
+                  const voteStr = (vote as VoteKind).type.toString() as VoteKindStr;
+                  const { icon, textColor } = useVoteStyles(voteStr);
+                  return (
+                    <Table.Row key={`${member.handle}-${idx}`}>
+                      <Table.Cell className={textColor}>
+                        <Icon name={icon} />
+                        {voteStr}
+                      </Table.Cell>
+                      <Table.Cell>
+                        <ProfilePreview
+                          handle={member.handle}
+                          avatar_uri={member.avatar_uri}
+                          root_account={member.root_account}
+                        />
+                      </Table.Cell>
+                    </Table.Row>
+                  );
+                })}
+              </Table.Body>
+            </Table>
+          </>
+        )
+        : (
+          <Header as="h4">No votes have been submitted!</Header>
+        )
+      }
+    </PromiseComponent>
   );
   );
 }
 }

+ 1 - 1
pioneer/packages/joy-roles/src/transport.substrate.ts

@@ -548,7 +548,7 @@ export class Transport extends TransportBase implements ITransport {
   }
   }
 
 
   async blockHash (height: number): Promise<string> {
   async blockHash (height: number): Promise<string> {
-    const blockHash = await this.cachedApi.query.system.blockHash(height);
+    const blockHash = await this.api.rpc.chain.getBlockHash(height);
     return blockHash.toString();
     return blockHash.toString();
   }
   }
 
 

+ 27 - 26
pioneer/packages/joy-utils-old/src/react/hooks/proposals/useProposalSubscription.tsx

@@ -1,39 +1,41 @@
 import { useState, useEffect } from 'react';
 import { useState, useEffect } from 'react';
-import { ParsedProposal, ProposalVotes } from '../../../types/proposals';
-import { useTransport, usePromise } from '../';
+import { useTransport } from '../';
 import { ProposalId } from '@joystream/types/proposals';
 import { ProposalId } from '@joystream/types/proposals';
+import { ParsedProposal } from '@polkadot/joy-utils/types/proposals';
 
 
 // Take advantage of polkadot api subscriptions to re-fetch proposal data and votes
 // Take advantage of polkadot api subscriptions to re-fetch proposal data and votes
 // each time there is some runtime change in the proposal
 // each time there is some runtime change in the proposal
 const useProposalSubscription = (id: ProposalId) => {
 const useProposalSubscription = (id: ProposalId) => {
   const transport = useTransport();
   const transport = useTransport();
-  // State holding an "unsubscribe method"
-  const [unsubscribeProposal, setUnsubscribeProposal] = useState<(() => void) | null>(null);
-
-  const [proposal, proposalError, proposalLoading, refreshProposal] = usePromise<ParsedProposal>(
-    () => transport.proposals.proposalById(id),
-    {} as ParsedProposal
-  );
-
-  const [votes, votesError, votesLoading, refreshVotes] = usePromise<ProposalVotes | null>(
-    () => transport.proposals.votes(id),
-    null
-  );
-
-  // Function to re-fetch the data using transport
-  const refreshProposalData = () => {
-    refreshProposal();
-    refreshVotes();
-  };
+  // State holding current proposal data
+  const [data, setData] = useState<ParsedProposal | null>(null);
+  const [error, setError] = useState<any>(null);
+  const [loading, setLoading] = useState<boolean>(true);
 
 
   useEffect(() => {
   useEffect(() => {
     // onMount...
     // onMount...
     let unmounted = false;
     let unmounted = false;
+    let unsubscribeProposal: (() => void) | undefined;
+    const refreshProposalData = () => {
+      transport.proposals.proposalById(id)
+        .then(newData => {
+          if (!unmounted) {
+            setData(newData);
+            setLoading(false);
+          }
+        })
+        .catch(error => {
+          if (!unmounted) {
+            setError(error);
+            setLoading(false);
+          }
+        });
+    };
     // Create the subscription
     // Create the subscription
     transport.proposals.subscribeProposal(id, refreshProposalData)
     transport.proposals.subscribeProposal(id, refreshProposalData)
       .then(unsubscribe => {
       .then(unsubscribe => {
         if (!unmounted) {
         if (!unmounted) {
-          setUnsubscribeProposal(() => unsubscribe);
+          unsubscribeProposal = unsubscribe;
         } else {
         } else {
           unsubscribe(); // If already unmounted - unsubscribe immedietally!
           unsubscribe(); // If already unmounted - unsubscribe immedietally!
         }
         }
@@ -42,14 +44,13 @@ const useProposalSubscription = (id: ProposalId) => {
       // onUnmount...
       // onUnmount...
       // Clean the subscription
       // Clean the subscription
       unmounted = true;
       unmounted = true;
-      if (unsubscribeProposal !== null) unsubscribeProposal();
+      if (unsubscribeProposal) {
+        unsubscribeProposal();
+      }
     };
     };
   }, []);
   }, []);
 
 
-  return {
-    proposal: { data: proposal, error: proposalError, loading: proposalLoading },
-    votes: { data: votes, error: votesError, loading: votesLoading }
-  };
+  return { data, error, loading };
 };
 };
 
 
 export default useProposalSubscription;
 export default useProposalSubscription;

+ 23 - 0
types/src/common.ts

@@ -71,6 +71,26 @@ export const WorkingGroupDef = {
 export type WorkingGroupKey = keyof typeof WorkingGroupDef
 export type WorkingGroupKey = keyof typeof WorkingGroupDef
 export class WorkingGroup extends JoyEnum(WorkingGroupDef) {}
 export class WorkingGroup extends JoyEnum(WorkingGroupDef) {}
 
 
+// Temporarly in "common", because used both by /working-group and /content-working-group:
+export type ISlashableTerms = {
+  max_count: u16
+  max_percent_pts_per_time: u16
+}
+
+export class SlashableTerms
+  extends JoyStructDecorated({
+    max_count: u16,
+    max_percent_pts_per_time: u16,
+  })
+  implements ISlashableTerms {}
+
+export class UnslashableTerms extends Null {}
+
+export class SlashingTerms extends JoyEnum({
+  Unslashable: UnslashableTerms,
+  Slashable: SlashableTerms,
+} as const) {}
+
 export const commonTypes: RegistryTypes = {
 export const commonTypes: RegistryTypes = {
   Credential,
   Credential,
   CredentialSet,
   CredentialSet,
@@ -79,6 +99,9 @@ export const commonTypes: RegistryTypes = {
   PostId,
   PostId,
   InputValidationLengthConstraint,
   InputValidationLengthConstraint,
   WorkingGroup,
   WorkingGroup,
+  // Expose in registry for api.createType purposes:
+  SlashingTerms,
+  SlashableTerms,
 }
 }
 
 
 export default commonTypes
 export default commonTypes

+ 9 - 18
types/src/content-working-group/index.ts

@@ -1,6 +1,6 @@
-import { BTreeMap, BTreeSet, bool, u32, Text, Null, Option, Vec, u16 } from '@polkadot/types'
+import { BTreeMap, BTreeSet, bool, u32, Text, Null, Option, Vec } from '@polkadot/types'
 import { BlockNumber } from '@polkadot/types/interfaces'
 import { BlockNumber } from '@polkadot/types/interfaces'
-import { OptionText, Credential, JoyEnum, JoyStructDecorated } from '../common'
+import { OptionText, Credential, JoyEnum, JoyStructDecorated, SlashingTerms } from '../common'
 import { ActorId, MemberId } from '../members'
 import { ActorId, MemberId } from '../members'
 import { StakeId } from '../stake'
 import { StakeId } from '../stake'
 import { OpeningId, ApplicationId, ApplicationRationingPolicy, StakingPolicy } from '../hiring/index'
 import { OpeningId, ApplicationId, ApplicationRationingPolicy, StakingPolicy } from '../hiring/index'
@@ -203,22 +203,6 @@ export class CuratorApplication
   }
   }
 }
 }
 
 
-export type ISlashableTerms = {
-  max_count: u16
-  max_percent_pts_per_time: u16
-}
-export class SlashableTerms
-  extends JoyStructDecorated({
-    max_count: u16,
-    max_percent_pts_per_time: u16,
-  })
-  implements ISlashableTerms {}
-
-export class SlashingTerms extends JoyEnum({
-  Unslashable: Null,
-  Slashable: SlashableTerms,
-} as const) {}
-
 export type IOpeningPolicyCommitment = {
 export type IOpeningPolicyCommitment = {
   application_rationing_policy: Option<ApplicationRationingPolicy>
   application_rationing_policy: Option<ApplicationRationingPolicy>
   max_review_period_length: BlockNumber
   max_review_period_length: BlockNumber
@@ -336,6 +320,13 @@ export const contentWorkingGroupTypes = {
   WorkingGroupUnstaker,
   WorkingGroupUnstaker,
   CuratorApplicationIdToCuratorIdMap,
   CuratorApplicationIdToCuratorIdMap,
   CuratorApplicationIdSet,
   CuratorApplicationIdSet,
+  // Expose in registry for api.createType purposes:
+  CuratorRoleStakeProfile,
+  CuratorRoleStage,
+  CuratorExitSummary,
+  CuratorExitInitiationOrigin,
+  ExitedLeadRole,
+  CuratorInduction,
 }
 }
 
 
 export default contentWorkingGroupTypes
 export default contentWorkingGroupTypes

+ 125 - 8
types/src/definitions/augment-types.ts

@@ -46,22 +46,22 @@ import { Multiplier } from '@polkadot/types/interfaces/txpayment';
 import { CallHash, Multisig, Timepoint } from '@polkadot/types/interfaces/utility';
 import { CallHash, Multisig, Timepoint } from '@polkadot/types/interfaces/utility';
 import { VestingInfo } from '@polkadot/types/interfaces/vesting';
 import { VestingInfo } from '@polkadot/types/interfaces/vesting';
 /** CUSTOMIMPORTS **/
 /** CUSTOMIMPORTS **/
-import { Credential as Credential, CredentialSet as CredentialSet, BlockAndTime as BlockAndTime, ThreadId as ThreadId, PostId as PostId, InputValidationLengthConstraint as InputValidationLengthConstraint, WorkingGroup as WorkingGroup } from '../common'
+import { Credential as Credential, CredentialSet as CredentialSet, BlockAndTime as BlockAndTime, ThreadId as ThreadId, PostId as PostId, InputValidationLengthConstraint as InputValidationLengthConstraint, WorkingGroup as WorkingGroup, SlashingTerms as SlashingTerms, SlashableTerms as SlashableTerms } from '../common'
 import { EntryMethod as EntryMethod, MemberId as MemberId, PaidTermId as PaidTermId, SubscriptionId as SubscriptionId, Membership as Membership, PaidMembershipTerms as PaidMembershipTerms, ActorId as ActorId } from '../members'
 import { EntryMethod as EntryMethod, MemberId as MemberId, PaidTermId as PaidTermId, SubscriptionId as SubscriptionId, Membership as Membership, PaidMembershipTerms as PaidMembershipTerms, ActorId as ActorId } from '../members'
 import { ElectionStage as ElectionStage, ElectionStake as ElectionStake, SealedVote as SealedVote, TransferableStake as TransferableStake, ElectionParameters as ElectionParameters, Seat as Seat, Seats as Seats, Backer as Backer, Backers as Backers } from '../council'
 import { ElectionStage as ElectionStage, ElectionStake as ElectionStake, SealedVote as SealedVote, TransferableStake as TransferableStake, ElectionParameters as ElectionParameters, Seat as Seat, Seats as Seats, Backer as Backer, Backers as Backers } from '../council'
 import { RoleParameters as RoleParameters } from '../roles'
 import { RoleParameters as RoleParameters } from '../roles'
 import { PostTextChange as PostTextChange, ModerationAction as ModerationAction, ChildPositionInParentCategory as ChildPositionInParentCategory, CategoryId as CategoryId, Category as Category, Thread as Thread, Post as Post, ReplyId as ReplyId, Reply as Reply } from '../forum'
 import { PostTextChange as PostTextChange, ModerationAction as ModerationAction, ChildPositionInParentCategory as ChildPositionInParentCategory, CategoryId as CategoryId, Category as Category, Thread as Thread, Post as Post, ReplyId as ReplyId, Reply as Reply } from '../forum'
-import { Stake as Stake } from '../stake'
-import { Mint as Mint } from '../mint'
+import { Stake as Stake, StakingStatus as StakingStatus, Staked as Staked, StakedStatus as StakedStatus, Unstaking as Unstaking, Slash as Slash } from '../stake'
+import { Mint as Mint, NextAdjustment as NextAdjustment, AdjustOnInterval as AdjustOnInterval, AdjustCapacityBy as AdjustCapacityBy } from '../mint'
 import { Recipient as Recipient, RewardRelationship as RewardRelationship } from '../recurring-rewards'
 import { Recipient as Recipient, RewardRelationship as RewardRelationship } from '../recurring-rewards'
-import { Application as Application, ApplicationStage as ApplicationStage, ActivateOpeningAt as ActivateOpeningAt, ApplicationRationingPolicy as ApplicationRationingPolicy, OpeningStage as OpeningStage, StakingPolicy as StakingPolicy, Opening as Opening } from '../hiring'
+import { Application as Application, ApplicationStage as ApplicationStage, ActivateOpeningAt as ActivateOpeningAt, ApplicationRationingPolicy as ApplicationRationingPolicy, OpeningStage as OpeningStage, StakingPolicy as StakingPolicy, Opening as Opening, WaitingToBeingOpeningStageVariant as WaitingToBeingOpeningStageVariant, ActiveOpeningStageVariant as ActiveOpeningStageVariant, ActiveOpeningStage as ActiveOpeningStage, AcceptingApplications as AcceptingApplications, ReviewPeriod as ReviewPeriod, Deactivated as Deactivated, OpeningDeactivationCause as OpeningDeactivationCause, InactiveApplicationStage as InactiveApplicationStage, UnstakingApplicationStage as UnstakingApplicationStage, ApplicationDeactivationCause as ApplicationDeactivationCause } from '../hiring'
 import { Class as Class, Entity as Entity, ClassSchema as ClassSchema, Property as Property, PropertyType as PropertyType, PropertyValue as PropertyValue, ClassPropertyValue as ClassPropertyValue } from '../versioned-store'
 import { Class as Class, Entity as Entity, ClassSchema as ClassSchema, Property as Property, PropertyType as PropertyType, PropertyValue as PropertyValue, ClassPropertyValue as ClassPropertyValue } from '../versioned-store'
-import { EntityPermissions as EntityPermissions, ReferenceConstraint as ReferenceConstraint, ClassPermissionsType as ClassPermissionsType, Operation as Operation } from '../versioned-store/permissions'
-import { OptionalText as OptionalText, Channel as Channel, ChannelContentType as ChannelContentType, ChannelCurationStatus as ChannelCurationStatus, ChannelPublicationStatus as ChannelPublicationStatus, CurationActor as CurationActor, Curator as Curator, CuratorApplication as CuratorApplication, CuratorOpening as CuratorOpening, Lead as Lead, OpeningPolicyCommitment as OpeningPolicyCommitment, Principal as Principal, WorkingGroupUnstaker as WorkingGroupUnstaker, CuratorApplicationIdToCuratorIdMap as CuratorApplicationIdToCuratorIdMap, CuratorApplicationIdSet as CuratorApplicationIdSet } from '../content-working-group'
-import { RationaleText as RationaleText, Application as ApplicationOf, ApplicationIdSet as ApplicationIdSet, ApplicationIdToWorkerIdMap as ApplicationIdToWorkerIdMap, WorkerId as WorkerId, Worker as WorkerOf, Opening as OpeningOf, StorageProviderId as StorageProviderId, OpeningType as OpeningType, ApplicationId as HiringApplicationId, RewardPolicy as RewardPolicy, OpeningId as working_group__OpeningId, WorkerId as working_group__WorkerId } from '../working-group'
+import { EntityPermissions as EntityPermissions, ReferenceConstraint as ReferenceConstraint, ClassPermissionsType as ClassPermissionsType, Operation as Operation, OperationType as OperationType, CreateEntity as CreateEntity, UpdatePropertyValues as UpdatePropertyValues, AddSchemaSupportToEntity as AddSchemaSupportToEntity, ParametrizedEntity as ParametrizedEntity, ParametrizedClassPropertyValue as ParametrizedClassPropertyValue, ParametrizedPropertyValue as ParametrizedPropertyValue } from '../versioned-store/permissions'
+import { OptionalText as OptionalText, Channel as Channel, ChannelContentType as ChannelContentType, ChannelCurationStatus as ChannelCurationStatus, ChannelPublicationStatus as ChannelPublicationStatus, CurationActor as CurationActor, Curator as Curator, CuratorApplication as CuratorApplication, CuratorOpening as CuratorOpening, Lead as Lead, OpeningPolicyCommitment as OpeningPolicyCommitment, Principal as Principal, WorkingGroupUnstaker as WorkingGroupUnstaker, CuratorApplicationIdToCuratorIdMap as CuratorApplicationIdToCuratorIdMap, CuratorApplicationIdSet as CuratorApplicationIdSet, CuratorRoleStakeProfile as CuratorRoleStakeProfile, CuratorRoleStage as CuratorRoleStage, CuratorExitSummary as CuratorExitSummary, CuratorExitInitiationOrigin as CuratorExitInitiationOrigin, ExitedLeadRole as ExitedLeadRole, CuratorInduction as CuratorInduction } from '../content-working-group'
+import { RationaleText as RationaleText, Application as ApplicationOf, ApplicationIdSet as ApplicationIdSet, ApplicationIdToWorkerIdMap as ApplicationIdToWorkerIdMap, WorkerId as WorkerId, Worker as WorkerOf, Opening as OpeningOf, StorageProviderId as StorageProviderId, OpeningType as OpeningType, ApplicationId as HiringApplicationId, RewardPolicy as RewardPolicy, OpeningId as working_group__OpeningId, WorkerId as working_group__WorkerId, WorkingGroupOpeningPolicyCommitment as WorkingGroupOpeningPolicyCommitment, RoleStakeProfile as RoleStakeProfile } from '../working-group'
 import { Url as Url, IPNSIdentity as IPNSIdentity, ServiceProviderRecord as ServiceProviderRecord } from '../discovery'
 import { Url as Url, IPNSIdentity as IPNSIdentity, ServiceProviderRecord as ServiceProviderRecord } from '../discovery'
 import { ContentId as ContentId, LiaisonJudgement as LiaisonJudgement, DataObject as DataObject, DataObjectStorageRelationshipId as DataObjectStorageRelationshipId, DataObjectStorageRelationship as DataObjectStorageRelationship, DataObjectTypeId as DataObjectTypeId, DataObjectType as DataObjectType, DataObjectsMap as DataObjectsMap } from '../media'
 import { ContentId as ContentId, LiaisonJudgement as LiaisonJudgement, DataObject as DataObject, DataObjectStorageRelationshipId as DataObjectStorageRelationshipId, DataObjectStorageRelationship as DataObjectStorageRelationship, DataObjectTypeId as DataObjectTypeId, DataObjectType as DataObjectType, DataObjectsMap as DataObjectsMap } from '../media'
-import { ProposalId as ProposalId, ProposalStatus as ProposalStatus, Proposal as ProposalOf, ProposalDetails as ProposalDetails, ProposalDetails as ProposalDetailsOf, VotingResults as VotingResults, ProposalParameters as ProposalParameters, VoteKind as VoteKind, ThreadCounter as ThreadCounter, DiscussionThread as DiscussionThread, DiscussionPost as DiscussionPost, AddOpeningParameters as AddOpeningParameters, FillOpeningParameters as FillOpeningParameters, TerminateRoleParameters as TerminateRoleParameters } from '../proposals'
+import { ProposalId as ProposalId, ProposalStatus as ProposalStatus, Proposal as ProposalOf, ProposalDetails as ProposalDetails, ProposalDetails as ProposalDetailsOf, VotingResults as VotingResults, ProposalParameters as ProposalParameters, VoteKind as VoteKind, ThreadCounter as ThreadCounter, DiscussionThread as DiscussionThread, DiscussionPost as DiscussionPost, AddOpeningParameters as AddOpeningParameters, FillOpeningParameters as FillOpeningParameters, TerminateRoleParameters as TerminateRoleParameters, ActiveStake as ActiveStake, FinalizationData as FinalizationData, ProposalDecisionStatus as ProposalDecisionStatus, ExecutionFailed as ExecutionFailed } from '../proposals'
 /** /CUSTOMIMPORTS **/
 /** /CUSTOMIMPORTS **/
 
 
 declare module '@polkadot/types/types/registry' {
 declare module '@polkadot/types/types/registry' {
@@ -1892,6 +1892,12 @@ declare module '@polkadot/types/types/registry' {
     "WorkingGroup": WorkingGroup;
     "WorkingGroup": WorkingGroup;
     "Option<WorkingGroup>": Option<WorkingGroup>;
     "Option<WorkingGroup>": Option<WorkingGroup>;
     "Vec<WorkingGroup>": Vec<WorkingGroup>;
     "Vec<WorkingGroup>": Vec<WorkingGroup>;
+    "SlashingTerms": SlashingTerms;
+    "Option<SlashingTerms>": Option<SlashingTerms>;
+    "Vec<SlashingTerms>": Vec<SlashingTerms>;
+    "SlashableTerms": SlashableTerms;
+    "Option<SlashableTerms>": Option<SlashableTerms>;
+    "Vec<SlashableTerms>": Vec<SlashableTerms>;
     "EntryMethod": EntryMethod;
     "EntryMethod": EntryMethod;
     "Option<EntryMethod>": Option<EntryMethod>;
     "Option<EntryMethod>": Option<EntryMethod>;
     "Vec<EntryMethod>": Vec<EntryMethod>;
     "Vec<EntryMethod>": Vec<EntryMethod>;
@@ -1976,6 +1982,21 @@ declare module '@polkadot/types/types/registry' {
     "Stake": Stake;
     "Stake": Stake;
     "Option<Stake>": Option<Stake>;
     "Option<Stake>": Option<Stake>;
     "Vec<Stake>": Vec<Stake>;
     "Vec<Stake>": Vec<Stake>;
+    "StakingStatus": StakingStatus;
+    "Option<StakingStatus>": Option<StakingStatus>;
+    "Vec<StakingStatus>": Vec<StakingStatus>;
+    "Staked": Staked;
+    "Option<Staked>": Option<Staked>;
+    "Vec<Staked>": Vec<Staked>;
+    "StakedStatus": StakedStatus;
+    "Option<StakedStatus>": Option<StakedStatus>;
+    "Vec<StakedStatus>": Vec<StakedStatus>;
+    "Unstaking": Unstaking;
+    "Option<Unstaking>": Option<Unstaking>;
+    "Vec<Unstaking>": Vec<Unstaking>;
+    "Slash": Slash;
+    "Option<Slash>": Option<Slash>;
+    "Vec<Slash>": Vec<Slash>;
     "MintId": u64;
     "MintId": u64;
     "Option<MintId>": Option<u64>;
     "Option<MintId>": Option<u64>;
     "Vec<MintId>": Vec<u64>;
     "Vec<MintId>": Vec<u64>;
@@ -1991,6 +2012,15 @@ declare module '@polkadot/types/types/registry' {
     "minting::BalanceOf": Balance;
     "minting::BalanceOf": Balance;
     "Option<minting::BalanceOf>": Option<Balance>;
     "Option<minting::BalanceOf>": Option<Balance>;
     "Vec<minting::BalanceOf>": Vec<Balance>;
     "Vec<minting::BalanceOf>": Vec<Balance>;
+    "NextAdjustment": NextAdjustment;
+    "Option<NextAdjustment>": Option<NextAdjustment>;
+    "Vec<NextAdjustment>": Vec<NextAdjustment>;
+    "AdjustOnInterval": AdjustOnInterval;
+    "Option<AdjustOnInterval>": Option<AdjustOnInterval>;
+    "Vec<AdjustOnInterval>": Vec<AdjustOnInterval>;
+    "AdjustCapacityBy": AdjustCapacityBy;
+    "Option<AdjustCapacityBy>": Option<AdjustCapacityBy>;
+    "Vec<AdjustCapacityBy>": Vec<AdjustCapacityBy>;
     "RecipientId": u64;
     "RecipientId": u64;
     "Option<RecipientId>": Option<u64>;
     "Option<RecipientId>": Option<u64>;
     "Vec<RecipientId>": Vec<u64>;
     "Vec<RecipientId>": Vec<u64>;
@@ -2030,6 +2060,36 @@ declare module '@polkadot/types/types/registry' {
     "Opening": Opening;
     "Opening": Opening;
     "Option<Opening>": Option<Opening>;
     "Option<Opening>": Option<Opening>;
     "Vec<Opening>": Vec<Opening>;
     "Vec<Opening>": Vec<Opening>;
+    "WaitingToBeingOpeningStageVariant": WaitingToBeingOpeningStageVariant;
+    "Option<WaitingToBeingOpeningStageVariant>": Option<WaitingToBeingOpeningStageVariant>;
+    "Vec<WaitingToBeingOpeningStageVariant>": Vec<WaitingToBeingOpeningStageVariant>;
+    "ActiveOpeningStageVariant": ActiveOpeningStageVariant;
+    "Option<ActiveOpeningStageVariant>": Option<ActiveOpeningStageVariant>;
+    "Vec<ActiveOpeningStageVariant>": Vec<ActiveOpeningStageVariant>;
+    "ActiveOpeningStage": ActiveOpeningStage;
+    "Option<ActiveOpeningStage>": Option<ActiveOpeningStage>;
+    "Vec<ActiveOpeningStage>": Vec<ActiveOpeningStage>;
+    "AcceptingApplications": AcceptingApplications;
+    "Option<AcceptingApplications>": Option<AcceptingApplications>;
+    "Vec<AcceptingApplications>": Vec<AcceptingApplications>;
+    "ReviewPeriod": ReviewPeriod;
+    "Option<ReviewPeriod>": Option<ReviewPeriod>;
+    "Vec<ReviewPeriod>": Vec<ReviewPeriod>;
+    "Deactivated": Deactivated;
+    "Option<Deactivated>": Option<Deactivated>;
+    "Vec<Deactivated>": Vec<Deactivated>;
+    "OpeningDeactivationCause": OpeningDeactivationCause;
+    "Option<OpeningDeactivationCause>": Option<OpeningDeactivationCause>;
+    "Vec<OpeningDeactivationCause>": Vec<OpeningDeactivationCause>;
+    "InactiveApplicationStage": InactiveApplicationStage;
+    "Option<InactiveApplicationStage>": Option<InactiveApplicationStage>;
+    "Vec<InactiveApplicationStage>": Vec<InactiveApplicationStage>;
+    "UnstakingApplicationStage": UnstakingApplicationStage;
+    "Option<UnstakingApplicationStage>": Option<UnstakingApplicationStage>;
+    "Vec<UnstakingApplicationStage>": Vec<UnstakingApplicationStage>;
+    "ApplicationDeactivationCause": ApplicationDeactivationCause;
+    "Option<ApplicationDeactivationCause>": Option<ApplicationDeactivationCause>;
+    "Vec<ApplicationDeactivationCause>": Vec<ApplicationDeactivationCause>;
     "ClassId": u64;
     "ClassId": u64;
     "Option<ClassId>": Option<u64>;
     "Option<ClassId>": Option<u64>;
     "Vec<ClassId>": Vec<u64>;
     "Vec<ClassId>": Vec<u64>;
@@ -2069,6 +2129,27 @@ declare module '@polkadot/types/types/registry' {
     "Operation": Operation;
     "Operation": Operation;
     "Option<Operation>": Option<Operation>;
     "Option<Operation>": Option<Operation>;
     "Vec<Operation>": Vec<Operation>;
     "Vec<Operation>": Vec<Operation>;
+    "OperationType": OperationType;
+    "Option<OperationType>": Option<OperationType>;
+    "Vec<OperationType>": Vec<OperationType>;
+    "CreateEntity": CreateEntity;
+    "Option<CreateEntity>": Option<CreateEntity>;
+    "Vec<CreateEntity>": Vec<CreateEntity>;
+    "UpdatePropertyValues": UpdatePropertyValues;
+    "Option<UpdatePropertyValues>": Option<UpdatePropertyValues>;
+    "Vec<UpdatePropertyValues>": Vec<UpdatePropertyValues>;
+    "AddSchemaSupportToEntity": AddSchemaSupportToEntity;
+    "Option<AddSchemaSupportToEntity>": Option<AddSchemaSupportToEntity>;
+    "Vec<AddSchemaSupportToEntity>": Vec<AddSchemaSupportToEntity>;
+    "ParametrizedEntity": ParametrizedEntity;
+    "Option<ParametrizedEntity>": Option<ParametrizedEntity>;
+    "Vec<ParametrizedEntity>": Vec<ParametrizedEntity>;
+    "ParametrizedClassPropertyValue": ParametrizedClassPropertyValue;
+    "Option<ParametrizedClassPropertyValue>": Option<ParametrizedClassPropertyValue>;
+    "Vec<ParametrizedClassPropertyValue>": Vec<ParametrizedClassPropertyValue>;
+    "ParametrizedPropertyValue": ParametrizedPropertyValue;
+    "Option<ParametrizedPropertyValue>": Option<ParametrizedPropertyValue>;
+    "Vec<ParametrizedPropertyValue>": Vec<ParametrizedPropertyValue>;
     "ChannelId": u64;
     "ChannelId": u64;
     "Option<ChannelId>": Option<u64>;
     "Option<ChannelId>": Option<u64>;
     "Vec<ChannelId>": Vec<u64>;
     "Vec<ChannelId>": Vec<u64>;
@@ -2132,6 +2213,24 @@ declare module '@polkadot/types/types/registry' {
     "CuratorApplicationIdSet": CuratorApplicationIdSet;
     "CuratorApplicationIdSet": CuratorApplicationIdSet;
     "Option<CuratorApplicationIdSet>": Option<CuratorApplicationIdSet>;
     "Option<CuratorApplicationIdSet>": Option<CuratorApplicationIdSet>;
     "Vec<CuratorApplicationIdSet>": Vec<CuratorApplicationIdSet>;
     "Vec<CuratorApplicationIdSet>": Vec<CuratorApplicationIdSet>;
+    "CuratorRoleStakeProfile": CuratorRoleStakeProfile;
+    "Option<CuratorRoleStakeProfile>": Option<CuratorRoleStakeProfile>;
+    "Vec<CuratorRoleStakeProfile>": Vec<CuratorRoleStakeProfile>;
+    "CuratorRoleStage": CuratorRoleStage;
+    "Option<CuratorRoleStage>": Option<CuratorRoleStage>;
+    "Vec<CuratorRoleStage>": Vec<CuratorRoleStage>;
+    "CuratorExitSummary": CuratorExitSummary;
+    "Option<CuratorExitSummary>": Option<CuratorExitSummary>;
+    "Vec<CuratorExitSummary>": Vec<CuratorExitSummary>;
+    "CuratorExitInitiationOrigin": CuratorExitInitiationOrigin;
+    "Option<CuratorExitInitiationOrigin>": Option<CuratorExitInitiationOrigin>;
+    "Vec<CuratorExitInitiationOrigin>": Vec<CuratorExitInitiationOrigin>;
+    "ExitedLeadRole": ExitedLeadRole;
+    "Option<ExitedLeadRole>": Option<ExitedLeadRole>;
+    "Vec<ExitedLeadRole>": Vec<ExitedLeadRole>;
+    "CuratorInduction": CuratorInduction;
+    "Option<CuratorInduction>": Option<CuratorInduction>;
+    "Vec<CuratorInduction>": Vec<CuratorInduction>;
     "RationaleText": RationaleText;
     "RationaleText": RationaleText;
     "Option<RationaleText>": Option<RationaleText>;
     "Option<RationaleText>": Option<RationaleText>;
     "Vec<RationaleText>": Vec<RationaleText>;
     "Vec<RationaleText>": Vec<RationaleText>;
@@ -2171,6 +2270,12 @@ declare module '@polkadot/types/types/registry' {
     "working_group::WorkerId": working_group__WorkerId;
     "working_group::WorkerId": working_group__WorkerId;
     "Option<working_group::WorkerId>": Option<working_group__WorkerId>;
     "Option<working_group::WorkerId>": Option<working_group__WorkerId>;
     "Vec<working_group::WorkerId>": Vec<working_group__WorkerId>;
     "Vec<working_group::WorkerId>": Vec<working_group__WorkerId>;
+    "WorkingGroupOpeningPolicyCommitment": WorkingGroupOpeningPolicyCommitment;
+    "Option<WorkingGroupOpeningPolicyCommitment>": Option<WorkingGroupOpeningPolicyCommitment>;
+    "Vec<WorkingGroupOpeningPolicyCommitment>": Vec<WorkingGroupOpeningPolicyCommitment>;
+    "RoleStakeProfile": RoleStakeProfile;
+    "Option<RoleStakeProfile>": Option<RoleStakeProfile>;
+    "Vec<RoleStakeProfile>": Vec<RoleStakeProfile>;
     "Url": Url;
     "Url": Url;
     "Option<Url>": Option<Url>;
     "Option<Url>": Option<Url>;
     "Vec<Url>": Vec<Url>;
     "Vec<Url>": Vec<Url>;
@@ -2246,6 +2351,18 @@ declare module '@polkadot/types/types/registry' {
     "TerminateRoleParameters": TerminateRoleParameters;
     "TerminateRoleParameters": TerminateRoleParameters;
     "Option<TerminateRoleParameters>": Option<TerminateRoleParameters>;
     "Option<TerminateRoleParameters>": Option<TerminateRoleParameters>;
     "Vec<TerminateRoleParameters>": Vec<TerminateRoleParameters>;
     "Vec<TerminateRoleParameters>": Vec<TerminateRoleParameters>;
+    "ActiveStake": ActiveStake;
+    "Option<ActiveStake>": Option<ActiveStake>;
+    "Vec<ActiveStake>": Vec<ActiveStake>;
+    "FinalizationData": FinalizationData;
+    "Option<FinalizationData>": Option<FinalizationData>;
+    "Vec<FinalizationData>": Vec<FinalizationData>;
+    "ProposalDecisionStatus": ProposalDecisionStatus;
+    "Option<ProposalDecisionStatus>": Option<ProposalDecisionStatus>;
+    "Vec<ProposalDecisionStatus>": Vec<ProposalDecisionStatus>;
+    "ExecutionFailed": ExecutionFailed;
+    "Option<ExecutionFailed>": Option<ExecutionFailed>;
+    "Vec<ExecutionFailed>": Vec<ExecutionFailed>;
     /** /CUSTOMTYPES **/
     /** /CUSTOMTYPES **/
   }
   }
 }
 }

+ 11 - 0
types/src/hiring/index.ts

@@ -344,6 +344,17 @@ export const hiringTypes: RegistryTypes = {
   OpeningStage,
   OpeningStage,
   StakingPolicy,
   StakingPolicy,
   Opening,
   Opening,
+  // Expose in registry for api.createType purposes:
+  WaitingToBeingOpeningStageVariant,
+  ActiveOpeningStageVariant,
+  ActiveOpeningStage,
+  AcceptingApplications,
+  ReviewPeriod,
+  Deactivated,
+  OpeningDeactivationCause,
+  InactiveApplicationStage,
+  UnstakingApplicationStage,
+  ApplicationDeactivationCause,
 }
 }
 
 
 export default hiringTypes
 export default hiringTypes

+ 4 - 0
types/src/mint/index.ts

@@ -54,5 +54,9 @@ export const mintTypes: RegistryTypes = {
   MintBalanceOf: 'Balance',
   MintBalanceOf: 'Balance',
   BalanceOfMint: 'Balance',
   BalanceOfMint: 'Balance',
   'minting::BalanceOf': 'Balance',
   'minting::BalanceOf': 'Balance',
+  // Expose in registry for api.createType purposes:
+  NextAdjustment,
+  AdjustOnInterval,
+  AdjustCapacityBy,
 }
 }
 export default mintTypes
 export default mintTypes

+ 6 - 1
types/src/proposals.ts

@@ -89,7 +89,7 @@ export class ExecutionFailedStatus extends JoyStructDecorated({
   error: Vec.with(u8),
   error: Vec.with(u8),
 }) {}
 }) {}
 
 
-class ExecutionFailed extends ExecutionFailedStatus {}
+export class ExecutionFailed extends ExecutionFailedStatus {}
 
 
 export const ApprovedProposalDef = {
 export const ApprovedProposalDef = {
   PendingExecution: Null,
   PendingExecution: Null,
@@ -285,6 +285,11 @@ export const proposalsTypes = {
   AddOpeningParameters,
   AddOpeningParameters,
   FillOpeningParameters,
   FillOpeningParameters,
   TerminateRoleParameters,
   TerminateRoleParameters,
+  // Expose in registry for api.createType purposes:
+  ActiveStake,
+  FinalizationData,
+  ProposalDecisionStatus,
+  ExecutionFailed,
 }
 }
 
 
 export default proposalsTypes
 export default proposalsTypes

+ 2 - 0
types/src/scripts/updateAugmentTypes.ts

@@ -88,6 +88,8 @@ const addAugmentTypes = (typeName: string, constructorName: string) => {
 }
 }
 
 
 Object.entries(typesByModule).forEach(([moduleName, types]) => {
 Object.entries(typesByModule).forEach(([moduleName, types]) => {
+  console.log('Module: ', moduleName)
+  console.log('Types found:', Object.keys(types))
   Object.entries(types).forEach(([typeName, codecOrName]) => {
   Object.entries(types).forEach(([typeName, codecOrName]) => {
     if (typeof codecOrName === 'function') {
     if (typeof codecOrName === 'function') {
       const constructorName = codecOrName.name
       const constructorName = codecOrName.name

+ 6 - 0
types/src/stake/index.ts

@@ -87,5 +87,11 @@ export class Stake
 export const stakeTypes: RegistryTypes = {
 export const stakeTypes: RegistryTypes = {
   StakeId: 'u64',
   StakeId: 'u64',
   Stake,
   Stake,
+  // Expose in registry for api.createType purposes:
+  StakingStatus,
+  Staked,
+  StakedStatus,
+  Unstaking,
+  Slash,
 }
 }
 export default stakeTypes
 export default stakeTypes

+ 25 - 1
types/src/versioned-store/permissions/index.ts

@@ -2,15 +2,39 @@ import EntityPermissions from './EntityPermissions'
 import { ReferenceConstraint } from './reference-constraint'
 import { ReferenceConstraint } from './reference-constraint'
 import ClassPermissionsType from './ClassPermissions'
 import ClassPermissionsType from './ClassPermissions'
 import { Operation } from './batching/'
 import { Operation } from './batching/'
+import { OperationType, CreateEntity, UpdatePropertyValues, AddSchemaSupportToEntity } from './batching/operation-types'
+import { ParametrizedEntity } from './batching/parametrized-entity'
 import { RegistryTypes } from '@polkadot/types/types'
 import { RegistryTypes } from '@polkadot/types/types'
+import ParametrizedClassPropertyValue from './batching/ParametrizedClassPropertyValue'
+import { ParametrizedPropertyValue } from './batching/parametrized-property-value'
 
 
-export { EntityPermissions, ReferenceConstraint, ClassPermissionsType, Operation }
+export {
+  EntityPermissions,
+  ReferenceConstraint,
+  ClassPermissionsType,
+  Operation,
+  OperationType,
+  CreateEntity,
+  UpdatePropertyValues,
+  AddSchemaSupportToEntity,
+  ParametrizedEntity,
+  ParametrizedClassPropertyValue,
+  ParametrizedPropertyValue,
+}
 
 
 export const versionedStorePermissionsTypes: RegistryTypes = {
 export const versionedStorePermissionsTypes: RegistryTypes = {
   EntityPermissions,
   EntityPermissions,
   ReferenceConstraint,
   ReferenceConstraint,
   ClassPermissionsType,
   ClassPermissionsType,
   Operation,
   Operation,
+  // Expose in registry for api.createType purposes:
+  OperationType,
+  CreateEntity,
+  UpdatePropertyValues,
+  AddSchemaSupportToEntity,
+  ParametrizedEntity,
+  ParametrizedClassPropertyValue,
+  ParametrizedPropertyValue,
 }
 }
 
 
 export default versionedStorePermissionsTypes
 export default versionedStorePermissionsTypes

+ 5 - 25
types/src/working-group/index.ts

@@ -1,12 +1,12 @@
 import { Bytes, BTreeMap, BTreeSet, Option } from '@polkadot/types'
 import { Bytes, BTreeMap, BTreeSet, Option } from '@polkadot/types'
-import { u16, Null, u32, u128 } from '@polkadot/types/primitive'
+import { Null, u32, u128 } from '@polkadot/types/primitive'
 import AccountId from '@polkadot/types/generic/AccountId'
 import AccountId from '@polkadot/types/generic/AccountId'
 import { BlockNumber, Balance } from '@polkadot/types/interfaces'
 import { BlockNumber, Balance } from '@polkadot/types/interfaces'
 import { MemberId, ActorId } from '../members'
 import { MemberId, ActorId } from '../members'
 import { RewardRelationshipId } from '../recurring-rewards'
 import { RewardRelationshipId } from '../recurring-rewards'
 import { StakeId } from '../stake'
 import { StakeId } from '../stake'
 import { ApplicationId, OpeningId, ApplicationRationingPolicy, StakingPolicy } from '../hiring'
 import { ApplicationId, OpeningId, ApplicationRationingPolicy, StakingPolicy } from '../hiring'
-import { JoyEnum, JoyStructDecorated } from '../common'
+import { JoyEnum, JoyStructDecorated, SlashingTerms } from '../common'
 import { RegistryTypes } from '@polkadot/types/types'
 import { RegistryTypes } from '@polkadot/types/types'
 
 
 export class RationaleText extends Bytes {}
 export class RationaleText extends Bytes {}
@@ -73,29 +73,6 @@ export class Worker
   }
   }
 }
 }
 
 
-export type ISlashableTerms = {
-  max_count: u16
-  max_percent_pts_per_time: u16
-}
-
-// This type is also defined in /content-working-group, but currently both those definitions are identical
-// (I added this defininition here too, because techinicaly those are 2 different types in the runtime.
-// Later the definition in /content-working-group will be removed and we can just register this type here)
-export class SlashableTerms
-  extends JoyStructDecorated({
-    max_count: u16,
-    max_percent_pts_per_time: u16,
-  })
-  implements ISlashableTerms {}
-
-export class UnslashableTerms extends Null {}
-
-// This type is also defined in /content-working-group (as above)
-export class SlashingTerms extends JoyEnum({
-  Unslashable: UnslashableTerms,
-  Slashable: SlashableTerms,
-} as const) {}
-
 export type IWorkingGroupOpeningPolicyCommitment = {
 export type IWorkingGroupOpeningPolicyCommitment = {
   application_rationing_policy: Option<ApplicationRationingPolicy>
   application_rationing_policy: Option<ApplicationRationingPolicy>
   max_review_period_length: BlockNumber
   max_review_period_length: BlockNumber
@@ -200,6 +177,9 @@ export const workingGroupTypes: RegistryTypes = {
   RewardPolicy,
   RewardPolicy,
   'working_group::OpeningId': OpeningId,
   'working_group::OpeningId': OpeningId,
   'working_group::WorkerId': WorkerId,
   'working_group::WorkerId': WorkerId,
+  // Expose in registry for api.createType purposes:
+  WorkingGroupOpeningPolicyCommitment,
+  RoleStakeProfile,
 }
 }
 
 
 export default workingGroupTypes
 export default workingGroupTypes

+ 2 - 2
types/tsconfig-scripts.json

@@ -1,6 +1,6 @@
 {
 {
   "extends": "./tsconfig-base.json",
   "extends": "./tsconfig-base.json",
   "include": [
   "include": [
-    "src/scripts/*.ts"
-  ]
+    "src/**/*.ts" // Include all files to make sure they're always up-to-date when running scripts
+  ],
 }
 }

+ 46 - 0
utils/api-examples/README.md

@@ -0,0 +1,46 @@
+# Joystream API Examples
+
+Repo with examples on how to use the @joystream/types package along with @polkadot/api to communicate with a joystream full node.
+
+## Examples
+
+```
+yarn
+yarn run status
+```
+
+## Example code
+
+```javascript
+import { types } from '@joystream/types'
+import { ApiPromise, WsProvider } from '@polkadot/api'
+
+async function main() {
+  // Initialise the provider to connect to the local node
+  const provider = new WsProvider('ws://127.0.0.1:9944')
+
+  // Create the API and wait until ready
+  const api = await ApiPromise.create({ provider, types })
+
+  await api.isReady
+
+  // Retrieve the chain & node information information via rpc calls
+  const [chain, nodeName, nodeVersion] = await Promise.all([
+    api.rpc.system.chain(),
+    api.rpc.system.name(),
+    api.rpc.system.version(),
+  ])
+
+  console.log(`Chain ${chain} using ${nodeName} v${nodeVersion}`)
+}
+
+main()
+```
+
+### Scripts
+
+You can run scripts that are found in the [./scripts/](./scripts) folder:
+
+```sh
+yarn script example
+```

+ 25 - 0
utils/api-examples/package.json

@@ -0,0 +1,25 @@
+{
+  "name": "api-examples",
+  "private": true,
+  "version": "0.1.0",
+  "license": "GPL-3.0-only",
+  "scripts": {
+    "status": "ts-node src/status",
+    "script": "ts-node src/script"
+  },
+  "dependencies": {
+    "@joystream/types": "^0.13.0",
+    "@polkadot/api": "^1.26.1",
+    "@polkadot/types": "^1.26.1",
+    "@polkadot/keyring": "^3.0.1",
+    "@polkadot/util": "^3.0.1",
+    "@polkadot/util-crypto": "^3.0.1",
+    "@types/bn.js": "^4.11.5",
+    "bn.js": "^4.11.8"
+  },
+  "devDependencies": {
+    "@polkadot/ts": "^0.1.56",
+    "typescript": "^3.9.7",
+    "ts-node": "^8.6.2"
+  }
+}

+ 32 - 0
utils/api-examples/scripts/example.js

@@ -0,0 +1,32 @@
+/* global api, hashing, keyring, types, util, joy */
+
+// run this script with:
+// yarn script example
+//
+// or copy and paste the code into the pioneer javascript toolbox at:
+// https://testnet.joystream.org/#/js
+//
+// Example works on nicaea release+
+
+const script = async ({ api, hashing, keyring, types, util, joy }) => {
+  // Retrieve the chain & node information information via rpc calls
+  const [chain, nodeName, nodeVersion, runtimeVersion] = await Promise.all([
+    api.rpc.system.chain(),
+    api.rpc.system.name(),
+    api.rpc.system.version(),
+    api.runtimeVersion,
+  ])
+
+  console.log(`Chain: ${chain}`)
+  console.log(`Software: ${nodeName} v${nodeVersion}`)
+  console.log(`Runtime specVersion: ${runtimeVersion.specVersion}`)
+}
+
+if (typeof module === 'undefined') {
+  // Pioneer js-toolbox
+  // Available globals [api, hashing, keyring, types, util]
+  script({ api, hashing, keyring, types, util, joy })
+} else {
+  // Node
+  module.exports = script
+}

+ 49 - 0
utils/api-examples/scripts/export-data-directory.js

@@ -0,0 +1,49 @@
+/* global api, hashing, keyring, types, util */
+
+// run this script with:
+// yarn script exportDataDirectory
+//
+// or copy and paste the code into the pioneer javascript toolbox at:
+// https://testnet.joystream.org/#/js
+
+const script = async ({ api }) => {
+  const ids = await api.query.dataDirectory.knownContentIds()
+
+  // When a BTreeMap is constructed for injection the node will fail to decode
+  // it if its not sorted.
+  ids.sort()
+
+  const transformed = await Promise.all(
+    ids.map(async (id) => {
+      let obj = await api.query.dataDirectory.dataObjectByContentId(id)
+      if (obj.isNone) {
+        return null
+      }
+      obj = obj.unwrap()
+
+      return [
+        id,
+        {
+          owner: obj.owner,
+          added_at: obj.added_at,
+          type_id: obj.type_id,
+          size: obj.size_in_bytes,
+          liaison: obj.liaison,
+          liaison_judgement: obj.liaison_judgement,
+          ipfs_content_id: obj.ipfs_content_id,
+        },
+      ]
+    })
+  )
+
+  console.log(JSON.stringify(transformed))
+  console.error(`Exported ${transformed.length} objects`)
+}
+
+if (typeof module === 'undefined') {
+  // Pioneer js-toolbox
+  script({ api, hashing, keyring, types, util })
+} else {
+  // Node
+  module.exports = script
+}

+ 9 - 0
utils/api-examples/scripts/index.js

@@ -0,0 +1,9 @@
+const exportedScripts = {}
+
+exportedScripts.example = require('./example.js')
+exportedScripts.exportDataDirectory = require('./export-data-directory.js')
+exportedScripts.injectDataObjects = require('./inject-data-objects.js')
+exportedScripts.listDataDirectory = require('./list-data-directory.js')
+exportedScripts.testTransfer = require('./transfer.js')
+
+module.exports = exportedScripts

File diff suppressed because it is too large
+ 15 - 0
utils/api-examples/scripts/inject-data-objects.js


+ 33 - 0
utils/api-examples/scripts/list-data-directory.js

@@ -0,0 +1,33 @@
+/* global api, hashing, keyring, types, util, joy */
+
+// run this script with:
+// yarn script listDataDirectory
+//
+// or copy and paste the code into the pioneer javascript toolbox at:
+// https://testnet.joystream.org/#/js
+// requires nicaea release+
+
+const script = async ({ api, joy }) => {
+  const ids = await api.query.dataDirectory.knownContentIds()
+
+  await Promise.all(
+    ids.map(async (id) => {
+      let obj = await api.query.dataDirectory.dataObjectByContentId(id)
+      if (obj.isNone) {
+        return
+      }
+      obj = obj.unwrap()
+      console.log(`contentId: ${api.createType('ContentId', id).encode()}, ipfs: ${obj.ipfs_content_id}`)
+    })
+  )
+
+  console.error(`Data Directory contains ${ids.length} objects`)
+}
+
+if (typeof module === 'undefined') {
+  // Pioneer js-toolbox
+  script({ api, hashing, keyring, types, util, joy })
+} else {
+  // Node
+  module.exports = script
+}

+ 31 - 0
utils/api-examples/scripts/transfer.js

@@ -0,0 +1,31 @@
+/* global api, hashing, keyring, types, util, window */
+
+// run this script with:
+// yarn script testTransfer
+//
+// or copy and paste the code into the pioneer javascript toolbox at:
+// https://testnet.joystream.org/#/js
+//
+
+const script = async ({ api, keyring }) => {
+  const sudoAddress = (await api.query.sudo.key()).toString()
+  let sudo
+  if (typeof window === 'undefined') {
+    // In node, get the keyPair if the keyring was provided
+    sudo = keyring.getPair(sudoAddress)
+  } else {
+    // Pioneer: let the UI Signer handle it
+    sudo = sudoAddress
+  }
+
+  const transfer = api.tx.balances.transfer(sudoAddress, 100)
+  await transfer.signAndSend(sudo)
+}
+
+if (typeof module === 'undefined') {
+  // Pioneer js-toolbox
+  script({ api, hashing, keyring, types, util })
+} else {
+  // Node
+  module.exports = script
+}

+ 20 - 0
utils/api-examples/src/get-code.ts

@@ -0,0 +1,20 @@
+import { ApiPromise, WsProvider } from '@polkadot/api'
+import { types } from '@joystream/types'
+
+async function main() {
+  const provider = new WsProvider('ws://127.0.0.1:9944')
+
+  const api = await ApiPromise.create({ provider, types })
+
+  const currentBlockHash = await api.rpc.chain.getBlockHash(1)
+
+  console.log('getting code as of block hash', currentBlockHash.toString())
+
+  const substrateWasm = await api.query.substrate.code.at(currentBlockHash)
+
+  console.log(substrateWasm.toHex())
+
+  api.disconnect()
+}
+
+main()

+ 52 - 0
utils/api-examples/src/script.ts

@@ -0,0 +1,52 @@
+// @ts-check
+
+import { ApiPromise, WsProvider } from '@polkadot/api'
+import * as types from '@polkadot/types'
+import * as util from '@polkadot/util'
+import joy, { types as joyTypes } from '@joystream/types'
+import * as hashing from '@polkadot/util-crypto'
+import { Keyring } from '@polkadot/keyring'
+
+// eslint-disable-next-line @typescript-eslint/no-var-requires
+const scripts = require('../scripts')
+
+async function main() {
+  const scriptArg = process.argv[2]
+  const script = scripts[scriptArg]
+
+  if (!scriptArg || !script) {
+    console.error('Please specify valid script name.')
+    console.error('Available scripts:', Object.keys(scripts))
+    return
+  }
+
+  const provider = new WsProvider('ws://127.0.0.1:9944')
+
+  const api = await ApiPromise.create({ provider, types: joyTypes })
+
+  // We don't pass a custom signer to the api so we must use a keyPair
+  // when calling signAndSend on transactions
+  const keyring = new Keyring()
+
+  // Optional last argument is a SURI for account to use for signing transactions
+  const suri = process.argv[3]
+  if (suri) {
+    keyring.addFromUri(suri, undefined, 'sr25519')
+  }
+
+  // Add development well known keys to keyring
+  if ((await api.rpc.system.chain()).toString() === 'Development') {
+    keyring.addFromUri('//Alice', undefined, 'sr25519')
+    keyring.addFromUri('//Bob', undefined, 'sr25519')
+  }
+
+  try {
+    await script({ api, types, util, hashing, keyring, joy })
+  } catch (err) {
+    console.error(err)
+  }
+
+  api.disconnect()
+}
+
+main()

+ 56 - 0
utils/api-examples/src/status.ts

@@ -0,0 +1,56 @@
+// @ts-check
+
+import { ApiPromise, WsProvider } from '@polkadot/api'
+import { types } from '@joystream/types'
+import { Seat } from '@joystream/types/council'
+import { ValidatorId } from '@polkadot/types/interfaces'
+
+import BN from 'bn.js'
+
+async function main() {
+  // Initialise the provider to connect to the local node
+  const provider = new WsProvider('ws://127.0.0.1:9944')
+
+  // Create the API and wait until ready
+  const api = await ApiPromise.create({ provider, types })
+
+  // Retrieve the chain & node information information via rpc calls
+  const [chain, nodeName, nodeVersion] = await Promise.all([
+    api.rpc.system.chain(),
+    api.rpc.system.name(),
+    api.rpc.system.version(),
+  ])
+
+  console.log(`Chain ${chain} using ${nodeName} v${nodeVersion}`)
+
+  const council = ((await api.query.council.activeCouncil()) as unknown) as Seat[]
+  const validators = ((await api.query.session.validators()) as unknown) as ValidatorId[]
+  const version = (await api.rpc.state.getRuntimeVersion()) as any
+
+  console.log(`Runtime Version: ${version.authoringVersion}.${version.specVersion}.${version.implVersion}`)
+
+  // let council: QueryableStorageFunction<Seat[], SubscriptionResult> = (await api.query.council.activeCouncil()) as unknown as Seat[]
+  // let council = (await api.query.council.activeCouncil()) as unknown as Seat[];
+
+  // number of council members
+  console.log('Council size:', council.length)
+
+  console.log('Validator count:', validators.length)
+
+  if (validators && validators.length > 0) {
+    // Retrieve the free balances for all validators
+    const validatorBalances = await Promise.all(
+      validators.map((authorityId) => api.query.balances.account(authorityId))
+    )
+
+    const totalValidatorBalances = validatorBalances.reduce((total, value) => total.add(value.free), new BN(0))
+
+    // TODO: to get the staked amounts we need to read the account lock information.
+
+    console.log('Total Validator Free Balance:', totalValidatorBalances.toString())
+  }
+
+  api.disconnect()
+}
+
+main()

+ 30 - 0
utils/api-examples/src/tohex.ts

@@ -0,0 +1,30 @@
+import { CuratorApplicationId } from '@joystream/types/content-working-group'
+import { BTreeSet, createType, TypeRegistry } from '@polkadot/types'
+import { types } from '@joystream/types'
+
+async function main() {
+  const wgId = [1, 2]
+
+  const registry = new TypeRegistry()
+  registry.register(types)
+
+  const set = new BTreeSet<CuratorApplicationId>(registry, CuratorApplicationId, [])
+
+  wgId.forEach((id) => {
+    set.add(createType(registry, 'CuratorApplicationId', id))
+  })
+
+  /*
+    Replace the integers inside the bracket in:
+    let wgId:number[] = [1, 2];
+    With the "WG ID"s of the curators you wish to hire, in ascending order.
+
+    To hire "WG ID" 18 21 and 16:
+    let wgId:number[] = [16, 18, 21];
+    */
+
+  console.log('copy/paste the output below to hire curator applicant(s) with WG IDs:', wgId)
+  console.log(set.toHex())
+}
+
+main()

+ 19 - 0
utils/api-examples/tsconfig.json

@@ -0,0 +1,19 @@
+{
+  "compilerOptions": {
+    "declaration": true,
+    "importHelpers": true,
+    "module": "commonjs",
+    "outDir": "lib",
+    "rootDir": "src",
+    "strict": true,
+    "target": "es2017",
+    "esModuleInterop": true,
+    "types": ["node"],
+    "noUnusedLocals": true,
+    "baseUrl": "./",
+    "paths": {
+      "@polkadot/types/augment": ["../../types/src/definitions/augment-types.ts"]
+    }
+  },
+  "include": ["src/**/*"]
+}

+ 1 - 1
yarn.lock

@@ -3390,7 +3390,7 @@
     "@polkadot/util" "^3.0.1"
     "@polkadot/util" "^3.0.1"
     bn.js "^5.1.2"
     bn.js "^5.1.2"
 
 
-"@polkadot/types@1.26.1", "@polkadot/types@^0.96.1":
+"@polkadot/types@1.26.1", "@polkadot/types@^0.96.1", "@polkadot/types@^1.26.1":
   version "1.26.1"
   version "1.26.1"
   resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-1.26.1.tgz#e58a823da22bd526b298f7d42384bf59b8994fad"
   resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-1.26.1.tgz#e58a823da22bd526b298f7d42384bf59b8994fad"
   integrity sha512-mrA3+qYyDvfOIOMkY8lg2ziCYpwOl3N1LUxKdiyBDtKM7Dl8ZWQ0nLUCDW5MhbzDlThmYjE4feBRA+2eBShfyA==
   integrity sha512-mrA3+qYyDvfOIOMkY8lg2ziCYpwOl3N1LUxKdiyBDtKM7Dl8ZWQ0nLUCDW5MhbzDlThmYjE4feBRA+2eBShfyA==

Some files were not shown because too many files changed in this diff