initializeContentDir.ts 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { CreateClass } from '../types/extrinsics/CreateClass'
  2. import { AddClassSchema } from '../types/extrinsics/AddClassSchema'
  3. import { types } from '@joystream/types'
  4. import { ApiPromise, WsProvider } from '@polkadot/api'
  5. import { getInputs } from '../src/helpers/inputs'
  6. import fs from 'fs'
  7. import path from 'path'
  8. import { EntityBatch } from '../types/EntityBatch'
  9. import { InputParser } from '../src/helpers/InputParser'
  10. import { ExtrinsicsHelper, getAlicePair } from '../src/helpers/extrinsics'
  11. // Save entity operations output here for easier debugging
  12. const ENTITY_OPERATIONS_OUTPUT_PATH = path.join(__dirname, '../operations.json')
  13. const classInputs = getInputs<CreateClass>('classes').map(({ data }) => data)
  14. const schemaInputs = getInputs<AddClassSchema>('schemas').map(({ data }) => data)
  15. const entityBatchInputs = getInputs<EntityBatch>('entityBatches').map(({ data }) => data)
  16. async function main() {
  17. // Init api
  18. const WS_URI = process.env.WS_URI || 'ws://127.0.0.1:9944'
  19. console.log(`Initializing the api (${WS_URI})...`)
  20. const provider = new WsProvider(WS_URI)
  21. const api = await ApiPromise.create({ provider, types })
  22. const ALICE = getAlicePair()
  23. // Emptiness check
  24. if ((await api.query.contentDirectory.classById.keys()).length > 0) {
  25. console.log('Content directory is not empty! Skipping...')
  26. process.exit()
  27. }
  28. const txHelper = new ExtrinsicsHelper(api)
  29. const parser = new InputParser(api, classInputs, schemaInputs, entityBatchInputs)
  30. console.log(`Initializing classes (${classInputs.length} input files found)...\n`)
  31. const classExtrinsics = parser.getCreateClassExntrinsics()
  32. await txHelper.sendAndCheck(ALICE, classExtrinsics, 'Class initialization failed!')
  33. console.log(`Initializing schemas (${schemaInputs.length} input files found)...\n`)
  34. const schemaExtrinsics = await parser.getAddSchemaExtrinsics()
  35. await txHelper.sendAndCheck(ALICE, schemaExtrinsics, 'Schemas initialization failed!')
  36. console.log(`Initializing entities (${entityBatchInputs.length} input files found)`)
  37. const entityOperations = await parser.getEntityBatchOperations()
  38. // Save operations in operations.json (for reference in case of errors)
  39. console.log(`Saving entity batch operations in ${ENTITY_OPERATIONS_OUTPUT_PATH}...`)
  40. fs.writeFileSync(
  41. ENTITY_OPERATIONS_OUTPUT_PATH,
  42. JSON.stringify(
  43. entityOperations.map((o) => o.toJSON()),
  44. null,
  45. 4
  46. )
  47. )
  48. console.log(`Sending Transaction extrinsic (${entityOperations.length} operations)...`)
  49. await txHelper.sendAndCheck(
  50. ALICE,
  51. [api.tx.contentDirectory.transaction({ Lead: null }, entityOperations)],
  52. 'Entity initialization failed!'
  53. )
  54. }
  55. main()
  56. .then(() => process.exit())
  57. .catch((e) => console.error(e))