initializeContentDir.ts 2.5 KB

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