123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import { WsProvider } from '@polkadot/api'
- import { ApiFactory } from './Api'
- import { QueryNodeApi } from './QueryNodeApi'
- import { config } from 'dotenv'
- import { ApolloClient, InMemoryCache, HttpLink } from '@apollo/client/core'
- import { extendDebug, Debugger } from './Debugger'
- import { Flow } from './Flow'
- import { Job } from './Job'
- import { JobManager } from './JobManager'
- import { ResourceManager } from './Resources'
- import fetch from 'cross-fetch'
- export type ScenarioProps = {
- env: NodeJS.ProcessEnv
- debug: Debugger.Debugger
- job: (label: string, flows: Flow[] | Flow) => Job
- }
- export async function scenario(scene: (props: ScenarioProps) => Promise<void>): Promise<void> {
- // Load env variables
- config()
- const env = process.env
- // Connect api to the chain
- const nodeUrl: string = env.NODE_URL || 'ws://127.0.0.1:9944'
- const provider = new WsProvider(nodeUrl)
- const apiFactory = await ApiFactory.create(
- provider,
- env.TREASURY_ACCOUNT_URI || '//Alice',
- env.SUDO_ACCOUNT_URI || '//Alice'
- )
- const queryNodeUrl: string = env.QUERY_NODE_URL || 'http://127.0.0.1:8081/graphql'
- const queryNodeProvider = new ApolloClient({
- link: new HttpLink({ uri: queryNodeUrl, fetch }),
- // uri: queryNodeUrl,
- cache: new InMemoryCache(),
- defaultOptions: { query: { fetchPolicy: 'no-cache', errorPolicy: 'all' } },
- })
- const query = new QueryNodeApi(queryNodeProvider)
- const debug = extendDebug('scenario')
- const jobs = new JobManager({ apiFactory, query, env })
- await scene({ env, debug, job: jobs.createJob.bind(jobs) })
- const resources = new ResourceManager()
- try {
- await jobs.run(resources)
- } catch (err) {
- console.error(err)
- process.exit(-1)
- }
- // Note: disconnecting and then reconnecting to the chain in the same process
- // doesn't seem to work!
- apiFactory.close()
- }
|