difftreelog
Hide unneeded websocker errors
in: master
1 file changed
tests/src/substrate/substrate-api.tsdiffbeforeafterboth1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import { WsProvider, ApiPromise } from "@polkadot/api";7import { EventRecord } from '@polkadot/types/interfaces/system/types';8import { ExtrinsicStatus } from '@polkadot/types/interfaces/author/types';9import { IKeyringPair } from "@polkadot/types/types";1011import config from "../config";12import promisifySubstrate from "./promisify-substrate";13import { ApiOptions, SubmittableExtrinsic, ApiTypes } from "@polkadot/api/types";14import rtt from "../../../runtime_types.json";1516function defaultApiOptions(): ApiOptions {17 const wsProvider = new WsProvider(config.substrateUrl);18 return { provider: wsProvider, types: rtt };19}2021export default async function usingApi(action: (api: ApiPromise) => Promise<void>, settings: ApiOptions | undefined = undefined): Promise<void> {22 settings = settings || defaultApiOptions();23 let api: ApiPromise = new ApiPromise(settings);2425 try {26 await promisifySubstrate(api, async () => {27 if(api) {28 await api.isReadyOrError;29 await action(api);30 }31 })();32 } finally {33 await api.disconnect();34 }35}3637enum TransactionStatus {38 Success,39 Fail,40 NotReady41}4243function getTransactionStatus(events: EventRecord[], status: ExtrinsicStatus): TransactionStatus {44 if (status.isReady) {45 return TransactionStatus.NotReady;46 }47 if (status.isBroadcast) {48 return TransactionStatus.NotReady;49 } 50 if (status.isInBlock || status.isFinalized) {51 if(events.filter(e => e.event.data.method === 'ExtrinsicFailed').length > 0) {52 return TransactionStatus.Fail;53 }54 if(events.filter(e => e.event.data.method === 'ExtrinsicSuccess').length > 0) {55 return TransactionStatus.Success;56 }57 }5859 return TransactionStatus.Fail;60}6162export function63submitTransactionAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {64 return new Promise(async (resolve, reject) => {65 try {66 await transaction.signAndSend(sender, ({ events = [], status }) => {67 const transactionStatus = getTransactionStatus(events, status);6869 if (transactionStatus === TransactionStatus.Success) {70 resolve(events);71 } else if (transactionStatus === TransactionStatus.Fail) {72 console.log(`Something went wrong with transaction. Status: ${status}`);73 reject(events);74 }75 });76 } catch (e) {77 console.log('Error: ', e);78 reject(e);79 }80 });81}8283export function submitTransactionExpectFailAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {84 const consoleError = console.error;85 const consoleLog = console.log;86 console.error = () => {};87 console.log = () => {};8889 return new Promise<EventRecord[]>(async function(res, rej) {90 const resolve = (rec: EventRecord[]) => {91 setTimeout(() => {92 res(rec);93 console.error = consoleError;94 console.log = consoleLog;95 });96 };97 const reject = (errror: any) => {98 setTimeout(() => {99 rej(errror);100 console.error = consoleError;101 console.log = consoleLog;102 });103 };104 try {105 await transaction.signAndSend(sender, ({ events = [], status }) => {106 const transactionStatus = getTransactionStatus(events, status);107108 // console.log('transactionStatus', transactionStatus, 'events', events);109110 if (transactionStatus === TransactionStatus.Success) {111 resolve(events);112 } else if (transactionStatus === TransactionStatus.Fail) {113 reject(events);114 }115 });116 } catch (e) {117 reject(e);118 }119 });120}1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import { WsProvider, ApiPromise } from "@polkadot/api";7import { EventRecord } from '@polkadot/types/interfaces/system/types';8import { ExtrinsicStatus } from '@polkadot/types/interfaces/author/types';9import { IKeyringPair } from "@polkadot/types/types";1011import config from "../config";12import promisifySubstrate from "./promisify-substrate";13import { ApiOptions, SubmittableExtrinsic, ApiTypes } from "@polkadot/api/types";14import rtt from "../../../runtime_types.json";1516function defaultApiOptions(): ApiOptions {17 const wsProvider = new WsProvider(config.substrateUrl);18 return { provider: wsProvider, types: rtt };19}2021export default async function usingApi(action: (api: ApiPromise) => Promise<void>, settings: ApiOptions | undefined = undefined): Promise<void> {22 settings = settings || defaultApiOptions();23 let api: ApiPromise = new ApiPromise(settings);2425 // TODO: Remove, this is temporary: Filter unneeded API output 26 // (Jaco promised it will be removed in the next version)27 const consoleErr = console.error;28 console.error = (message: string) => {29 if (message.includes("StorageChangeSet:: WebSocket is not connected") || message.includes("2021-")) {}30 else consoleErr(message);31 };3233 try {34 await promisifySubstrate(api, async () => {35 if(api) {36 await api.isReadyOrError;37 await action(api);38 }39 })();40 } finally {41 await api.disconnect();42 console.error = consoleErr;43 }44}4546enum TransactionStatus {47 Success,48 Fail,49 NotReady50}5152function getTransactionStatus(events: EventRecord[], status: ExtrinsicStatus): TransactionStatus {53 if (status.isReady) {54 return TransactionStatus.NotReady;55 }56 if (status.isBroadcast) {57 return TransactionStatus.NotReady;58 } 59 if (status.isInBlock || status.isFinalized) {60 if(events.filter(e => e.event.data.method === 'ExtrinsicFailed').length > 0) {61 return TransactionStatus.Fail;62 }63 if(events.filter(e => e.event.data.method === 'ExtrinsicSuccess').length > 0) {64 return TransactionStatus.Success;65 }66 }6768 return TransactionStatus.Fail;69}7071export function72submitTransactionAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {73 return new Promise(async (resolve, reject) => {74 try {75 await transaction.signAndSend(sender, ({ events = [], status }) => {76 const transactionStatus = getTransactionStatus(events, status);7778 if (transactionStatus === TransactionStatus.Success) {79 resolve(events);80 } else if (transactionStatus === TransactionStatus.Fail) {81 console.log(`Something went wrong with transaction. Status: ${status}`);82 reject(events);83 }84 });85 } catch (e) {86 console.log('Error: ', e);87 reject(e);88 }89 });90}9192export function submitTransactionExpectFailAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {93 const consoleError = console.error;94 const consoleLog = console.log;95 console.error = () => {};96 console.log = () => {};9798 return new Promise<EventRecord[]>(async function(res, rej) {99 const resolve = (rec: EventRecord[]) => {100 setTimeout(() => {101 res(rec);102 console.error = consoleError;103 console.log = consoleLog;104 });105 };106 const reject = (errror: any) => {107 setTimeout(() => {108 rej(errror);109 console.error = consoleError;110 console.log = consoleLog;111 });112 };113 try {114 await transaction.signAndSend(sender, ({ events = [], status }) => {115 const transactionStatus = getTransactionStatus(events, status);116117 // console.log('transactionStatus', transactionStatus, 'events', events);118119 if (transactionStatus === TransactionStatus.Success) {120 resolve(events);121 } else if (transactionStatus === TransactionStatus.Fail) {122 reject(events);123 }124 });125 } catch (e) {126 reject(e);127 }128 });129}