From e7dc6d7a5a95bf48d58b7dea2260576332951792 Mon Sep 17 00:00:00 2001 From: Jaco Date: Tue, 13 Apr 2021 21:33:59 +0300 Subject: [PATCH] Expose internalError on submittables (#3399) --- packages/api/src/submittable/Result.ts | 6 +++++- packages/api/src/submittable/createClass.ts | 5 ++++- packages/api/src/submittable/types.ts | 1 + packages/types/src/types/extrinsic.ts | 1 + 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/api/src/submittable/Result.ts b/packages/api/src/submittable/Result.ts index 110244ac92..9f716fddce 100644 --- a/packages/api/src/submittable/Result.ts +++ b/packages/api/src/submittable/Result.ts @@ -32,14 +32,17 @@ export class SubmittableResult implements ISubmittableResult { public readonly dispatchInfo?: DispatchInfo; + public readonly internalError?: Error; + public readonly events: EventRecord[]; public readonly status: ExtrinsicStatus; - constructor ({ dispatchError, dispatchInfo, events, status }: SubmittableResultValue) { + constructor ({ dispatchError, dispatchInfo, events, internalError, status }: SubmittableResultValue) { this.dispatchError = dispatchError || extractError(events); this.dispatchInfo = dispatchInfo || extractInfo(events); this.events = events || []; + this.internalError = internalError; this.status = status; } @@ -85,6 +88,7 @@ export class SubmittableResult implements ISubmittableResult { dispatchError: this.dispatchError?.toHuman(), dispatchInfo: this.dispatchInfo?.toHuman(), events: this.events.map((event) => event.toHuman(isExtended)), + internalError: this.internalError?.message.toString(), status: this.status.toHuman(isExtended) }; } diff --git a/packages/api/src/submittable/createClass.ts b/packages/api/src/submittable/createClass.ts index c412c284f6..4125be6bbf 100644 --- a/packages/api/src/submittable/createClass.ts +++ b/packages/api/src/submittable/createClass.ts @@ -11,7 +11,7 @@ import type { AddressOrPair, SignerOptions, SubmittableDryRunResult, Submittable import { assert, isBn, isFunction, isNumber, isString, isU8a } from '@polkadot/util'; import { of } from '@polkadot/x-rxjs'; -import { first, map, mapTo, mergeMap, switchMap, tap } from '@polkadot/x-rxjs/operators'; +import { catchError, first, map, mapTo, mergeMap, switchMap, tap } from '@polkadot/x-rxjs/operators'; import { ApiBase } from '../base'; import { filterEvents, isKeyringPair } from '../util'; @@ -242,6 +242,9 @@ export function createClass ({ api, apiType, decorate events: filterEvents(hash, block, events, status), status })) + ), + catchError((internalError: Error) => + of(this.#transformResult(new SubmittableResult({ internalError, status }))) ) ); } diff --git a/packages/api/src/submittable/types.ts b/packages/api/src/submittable/types.ts index dfa176c308..034f0fd53b 100644 --- a/packages/api/src/submittable/types.ts +++ b/packages/api/src/submittable/types.ts @@ -10,6 +10,7 @@ export interface SubmittableResultValue { dispatchError?: DispatchError; dispatchInfo?: DispatchInfo; events?: EventRecord[]; + internalError?: Error; status: ExtrinsicStatus; } diff --git a/packages/types/src/types/extrinsic.ts b/packages/types/src/types/extrinsic.ts index 8e55559884..511d052787 100644 --- a/packages/types/src/types/extrinsic.ts +++ b/packages/types/src/types/extrinsic.ts @@ -12,6 +12,7 @@ export interface ISubmittableResult { readonly dispatchError?: DispatchError; readonly dispatchInfo?: DispatchInfo; readonly events: EventRecord[]; + readonly internalError?: Error; readonly status: ExtrinsicStatus; readonly isCompleted: boolean; readonly isError: boolean;