1import { WsProvider, ApiPromise } from "@polkadot/api";2import type { AccountId, Address, ApplyExtrinsicResult, DispatchError, DispatchInfo, EventRecord, Extrinsic, ExtrinsicStatus, Hash, RuntimeDispatchInfo } from '@polkadot/types/interfaces';3import { IKeyringPair } from "@polkadot/types/types";45import config from "../config";6import promisifySubstrate from "./promisify-substrate";7import { ApiOptions, SubmittableExtrinsic, ApiTypes } from "@polkadot/api/types";8import rtt from "../../../runtime_types.json";910function defaultApiOptions(): ApiOptions {11 const wsProvider = new WsProvider(config.substrateUrl);12 return { provider: wsProvider, types: rtt };13}1415export default async function usingApi(action: (api: ApiPromise) => Promise<void>, settings: ApiOptions | undefined = undefined): Promise<void> {16 settings = settings || defaultApiOptions();17 let api: ApiPromise = new ApiPromise(settings);1819 try {20 await promisifySubstrate(api, async () => {21 if(api) {22 await api.isReadyOrError;23 await action(api);24 }25 })();26 } finally {27 await api.disconnect();28 }29}3031export function submitTransactionAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {32 return new Promise(async function(resolve, reject) {33 try {34 await transaction.signAndSend(sender, ({ events = [], status }) => {35 if (status.isReady) {36 37 38 } else if (status.isBroadcast) {39 40 41 } else if (status.isInBlock || status.isFinalized) {42 resolve(events);43 } else {44 console.log(`Something went wrong with transaction. Status: ${status}`);45 reject("Transaction failed");46 }47 });48 } catch (e) {49 console.log("Error: ", e);50 reject(e);51 }52 });53}