12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import { ApiPromise, WsProvider } from '@polkadot/api'
- import { types as joyTypes } from '@joystream/types'
- import { Keyring } from '@polkadot/keyring'
- // Import input parser and channel entity from @joystream/cd-schemas (we use it as library here)
- import { InputParser } from '@joystream/cd-schemas'
- import { ChannelEntity } from '@joystream/cd-schemas/types/entities'
- async function main() {
- // Initialize the api
- const provider = new WsProvider('ws://127.0.0.1:9944')
- const api = await ApiPromise.create({ provider, types: joyTypes })
- // Get Alice keypair
- const keyring = new Keyring()
- keyring.addFromUri('//Alice', undefined, 'sr25519')
- const [ALICE] = keyring.getPairs()
- const channel: ChannelEntity = {
- handle: 'Example channel',
- description: 'This is an example channel',
- // We can use "existing" syntax to reference either an on-chain entity or other entity that's part of the same batch.
- // Here we reference language that we assume was added by initialization script (initialize:dev), as it is part of
- // input/entityBatches/LanguageBatch.json
- language: { existing: { code: 'EN' } },
- coverPhotoUrl: '',
- avatarPhotoUrl: '',
- isPublic: true,
- }
- // Create the parser with known entity schemas (the ones in content-directory-schemas/inputs)
- const parser = InputParser.createWithKnownSchemas(
- api,
- // The second argument is an array of entity batches, following standard entity batch syntax ({ className, entries }):
- [
- {
- className: 'Channel',
- entries: [channel], // We could specify multiple entries here, but in this case we only need one
- },
- ]
- )
- // We parse the input into CreateEntity and AddSchemaSupportToEntity operations
- const operations = await parser.getEntityBatchOperations()
- await api.tx.contentDirectory
- .transaction(
- { Member: 0 }, // We use member with id 0 as actor (in this case we assume this is Alice)
- operations // We provide parsed operations as second argument
- )
- .signAndSend(ALICE)
- }
- main()
- .then(() => process.exit())
- .catch(console.error)
|