git.delta.rocks / unique-network / refs/commits / 081791eb4c21

difftreelog

source

tests/src/.outdated/substrate/promisify-substrate.ts1.8 KiBsourcehistory
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617import {ApiPromise} from '@polkadot/api';1819type PromiseType<T> = T extends PromiseLike<infer TInner> ? TInner : T;2021export default function promisifySubstrate<T extends (...args: any[]) => any>(api: ApiPromise, action: T): (...args: Parameters<T>) => Promise<PromiseType<ReturnType<T>>> {22  return (...args: Parameters<T>) => {23    const promise = new Promise<PromiseType<ReturnType<T>>>((resolve: ((result: PromiseType<ReturnType<T>>) => void) | undefined, reject: ((error: any) => void) | undefined) => {24      const cleanup = () => {25        api.off('disconnected', fail);26        api.off('error', fail);27        resolve = undefined;28        reject = undefined;29      };3031      const success = (r: any) => {32        resolve && resolve(r);33        cleanup();34      };35      const fail = (error: any) => {36        reject && reject(error);37        cleanup();38      };3940      api.on('disconnected', fail);41      api.on('error', fail);4243      const result = action(...args);44      Promise.resolve(result)45        .then(success, fail);4647    });48    return promise as any;49  };50}