{"version":3,"file":"index.cjs","sources":["../../../../packages/sdk/extrinsics/src/tx-utils.ts","../../../../packages/sdk/extrinsics/src/submittable-utils.ts","../../../../packages/sdk/extrinsics/src/submitter.ts","../../../../packages/sdk/extrinsics/src/sdk-extrinsics.ts","../../../../packages/sdk/extrinsics/src/mutation-method.ts","../../../../packages/sdk/extrinsics/src/public-api.ts"],"sourcesContent":["import { ApiPromise } from '@polkadot/api';\nimport {\n  SignerPayloadRaw,\n  SignerPayloadJSON,\n} from '@polkadot/types/types/extrinsic';\nimport { HexString } from '@polkadot/util/types';\nimport { hexToU8a, u8aToHex } from '@polkadot/util';\nimport { signatureVerify } from '@polkadot/util-crypto';\nimport { SignerPayload } from '@polkadot/types/interfaces';\nimport { BadSignatureError, BadPayloadError } from '@unique-nft/sdk/errors';\nimport { SubmitTxArguments, UnsignedTxPayload } from '@unique-nft/sdk/types';\n\nconst getSignerPayloadHex = (\n  api: ApiPromise,\n  signerPayloadRaw: SignerPayloadRaw,\n): HexString => {\n  const rawPayloadDataU8a = hexToU8a(signerPayloadRaw.data);\n\n  if (rawPayloadDataU8a.length > 256) {\n    const payloadHash = api.registry.hash(rawPayloadDataU8a);\n\n    return u8aToHex(payloadHash);\n  }\n\n  return signerPayloadRaw.data as HexString;\n};\n\nconst getSignerPayloadRaw = (\n  api: ApiPromise,\n  signerPayloadJSON: SignerPayloadJSON,\n): SignerPayloadRaw => {\n  const rawPayloadDataU8a = api.registry\n    .createType('ExtrinsicPayload', signerPayloadJSON, {\n      version: signerPayloadJSON.version,\n    })\n    .toU8a({ method: true });\n\n  return {\n    address: signerPayloadJSON.address,\n    data: u8aToHex(rawPayloadDataU8a),\n    type: 'payload',\n  };\n};\n\n/*\n  todo - check that function fails on signed <wrapBytes> payload with understandable error message\n  https://github.com/polkadot-js/extension/pull/743\n */\nexport const verifyTxSignatureOrThrow = (\n  api: ApiPromise,\n  signerPayloadJSON: SignerPayloadJSON,\n  signature: HexString,\n): void => {\n  let signerPayloadHex = '';\n\n  try {\n    const signerPayloadRaw = getSignerPayloadRaw(api, signerPayloadJSON);\n    signerPayloadHex = getSignerPayloadHex(api, signerPayloadRaw);\n  } catch (error) {\n    throw BadPayloadError.wrapError(error);\n  }\n\n  try {\n    const verifyResult = signatureVerify(\n      signerPayloadHex,\n      signature,\n      signerPayloadJSON.address,\n    );\n\n    if (verifyResult.isValid) return;\n  } catch (error) {\n    throw BadSignatureError.wrapError(error);\n  }\n\n  throw new BadSignatureError();\n};\n\nexport const signerPayloadToUnsignedTxPayload = (\n  api: ApiPromise,\n  signerPayload: SignerPayload,\n): UnsignedTxPayload => {\n  const signerPayloadJSON = signerPayload.toPayload();\n  const signerPayloadRaw = signerPayload.toRaw();\n  const signerPayloadHex = getSignerPayloadHex(api, signerPayloadRaw);\n\n  return {\n    signerPayloadJSON,\n    signerPayloadRaw,\n    signerPayloadHex,\n  };\n};\n\nexport const isUnsignedTxPayload = (args: unknown): args is UnsignedTxPayload =>\n  typeof args === 'object' && !!args && 'signerPayloadJSON' in args;\n\nexport const isSubmitTxArguments = (args: unknown): args is SubmitTxArguments =>\n  isUnsignedTxPayload(args) && 'signature' in args;\n","import {\n  SubmitTxArguments,\n  TxBuildArguments,\n  UnsignedTxPayload,\n} from '@unique-nft/sdk/types';\nimport { SubmittableExtrinsic } from '@polkadot/api/promise/types';\nimport { BuildExtrinsicError } from '@unique-nft/sdk/errors';\nimport { ApiPromise } from '@polkadot/api';\nimport {\n  isSubmitTxArguments,\n  verifyTxSignatureOrThrow,\n  isUnsignedTxPayload,\n} from './tx-utils';\n\nexport const buildSubmittableFromArgs = (\n  api: ApiPromise,\n  buildArgs: TxBuildArguments,\n): SubmittableExtrinsic => {\n  const { section, method, args } = buildArgs;\n\n  try {\n    return api.tx[section][method](...args);\n  } catch (error) {\n    throw BuildExtrinsicError.wrapError(error, { section, method, args });\n  }\n};\n\nexport const buildUnsignedSubmittable = (\n  api: ApiPromise,\n  unsignedTxPayload: UnsignedTxPayload,\n): SubmittableExtrinsic => {\n  const { signerPayloadJSON } = unsignedTxPayload;\n\n  try {\n    const extrinsic = api.registry.createType('Extrinsic', signerPayloadJSON);\n\n    return api.tx(extrinsic);\n  } catch (error) {\n    throw BuildExtrinsicError.wrapError(error, signerPayloadJSON);\n  }\n};\n\nexport const buildSignedSubmittable = (\n  api: ApiPromise,\n  args: SubmitTxArguments,\n): SubmittableExtrinsic => {\n  const { signerPayloadJSON, signature } = args;\n  const { method, version, address } = signerPayloadJSON;\n\n  verifyTxSignatureOrThrow(api, signerPayloadJSON, signature);\n\n  // todo 'Extrinsic' -> enum ExtrinsicTypes {} ?\n  const extrinsic = api.registry.createType('Extrinsic', {\n    method,\n    version,\n  });\n\n  const submittable = api.tx(extrinsic);\n\n  submittable.addSignature(address, signature, signerPayloadJSON);\n\n  return submittable;\n};\n\nexport const buildSubmittable = (\n  api: ApiPromise,\n  arg: TxBuildArguments | UnsignedTxPayload | SubmitTxArguments,\n): SubmittableExtrinsic => {\n  if (isSubmitTxArguments(arg)) {\n    return buildSignedSubmittable(api, arg);\n  }\n\n  if (isUnsignedTxPayload(arg)) {\n    return buildUnsignedSubmittable(api, arg);\n  }\n\n  return buildSubmittableFromArgs(api, arg);\n};\n\nexport const getAddress = (\n  arg: TxBuildArguments | UnsignedTxPayload | SubmitTxArguments,\n): string => {\n  if (isSubmitTxArguments(arg)) {\n    return arg.signerPayloadJSON.address;\n  }\n\n  if (isUnsignedTxPayload(arg)) {\n    return arg.signerPayloadJSON.address;\n  }\n\n  return arg.address;\n};\n","import { ApiPromise } from '@polkadot/api';\nimport { SubmitResult, SubmitTxArguments } from '@unique-nft/sdk/types';\nimport { Observable, EMPTY, TeardownLogic } from 'rxjs';\nimport { ISubmittableResult } from '@polkadot/types/types/extrinsic';\nimport { SubmitExtrinsicError } from '@unique-nft/sdk/errors';\nimport { SubmittableExtrinsic } from '@polkadot/api/promise/types';\nimport { buildSignedSubmittable } from './submittable-utils';\n\nexport class Submitter {\n  constructor(readonly api: ApiPromise) {}\n\n  async submit(\n    args: SubmitTxArguments,\n    isObservable?: boolean,\n  ): Promise<SubmitResult> {\n    const submittable = buildSignedSubmittable(this.api, args);\n\n    try {\n      const hash = submittable.hash.toHex();\n\n      if (!isObservable) {\n        await submittable.send();\n\n        return { hash, result$: EMPTY };\n      }\n\n      const result$ = Submitter.buildObservable(submittable);\n\n      return { hash, result$ };\n    } catch (error) {\n      throw SubmitExtrinsicError.wrapError(error);\n    }\n  }\n\n  private static buildObservable(\n    submittable: SubmittableExtrinsic,\n  ): Observable<ISubmittableResult> {\n    return new Observable<ISubmittableResult>((subscriber): TeardownLogic => {\n      const stopWatching = submittable\n        .send((nextTxResult: ISubmittableResult) => {\n          if (nextTxResult.isError || nextTxResult.dispatchError) {\n            subscriber.error(nextTxResult);\n          } else {\n            subscriber.next(nextTxResult);\n          }\n\n          subscriber.next(nextTxResult);\n\n          if (nextTxResult.isCompleted) {\n            subscriber.complete();\n          }\n        })\n        .catch((error) => subscriber.error(error));\n\n      return () => stopWatching.then();\n    });\n  }\n}\n","import { lastValueFrom } from 'rxjs';\nimport { ExtrinsicEra, SignerPayload } from '@polkadot/types/interfaces';\nimport {\n  ISubmittableResult,\n  SignatureOptions,\n} from '@polkadot/types/types/extrinsic';\nimport { HexString } from '@polkadot/util/types';\nimport { objectSpread } from '@polkadot/util';\nimport { Sdk } from '@unique-nft/sdk';\nimport { InvalidSignerError } from '@unique-nft/sdk/errors';\nimport {\n  ISdkExtrinsics,\n  SubmitResult,\n  SubmitTxArguments,\n  TxBuildArguments,\n  UnsignedTxPayload,\n  SignTxResult,\n  SdkSigner,\n  SignatureType,\n  Fee,\n} from '@unique-nft/sdk/types';\nimport { formatBalance } from '@unique-nft/sdk/utils';\nimport { Submitter } from './submitter';\nimport {\n  signerPayloadToUnsignedTxPayload,\n  verifyTxSignatureOrThrow,\n} from './tx-utils';\n\nimport {\n  buildSubmittableFromArgs,\n  buildSubmittable,\n  getAddress,\n} from './submittable-utils';\n\nexport class SdkExtrinsics implements ISdkExtrinsics {\n  private submitter: Submitter;\n\n  constructor(readonly sdk: Sdk) {\n    this.submitter = new Submitter(sdk.api);\n  }\n\n  async build(buildArgs: TxBuildArguments): Promise<UnsignedTxPayload> {\n    const { address } = buildArgs;\n\n    const signingInfo = await this.sdk.api.derive.tx.signingInfo(\n      address,\n      -1,\n      buildArgs.isImmortal ? 0 : undefined,\n    );\n\n    const { nonce, header, mortalLength } = signingInfo;\n\n    // todo 'ExtrinsicEra' -> enum ExtrinsicTypes {} ?\n    const era = !buildArgs.isImmortal\n      ? this.sdk.api.registry.createTypeUnsafe<ExtrinsicEra>('ExtrinsicEra', [\n          {\n            current: header?.number || 0,\n            period: buildArgs.era || mortalLength,\n          },\n        ])\n      : undefined;\n\n    const blockHash = buildArgs.isImmortal\n      ? this.sdk.api.genesisHash\n      : header?.hash || this.sdk.api.genesisHash;\n\n    const {\n      genesisHash,\n      runtimeVersion,\n      registry: { signedExtensions },\n    } = this.sdk.api;\n\n    const signatureOptions: SignatureOptions = {\n      nonce,\n      blockHash,\n      era,\n      genesisHash,\n      runtimeVersion,\n      signedExtensions,\n    };\n\n    const { method, version } = buildSubmittableFromArgs(\n      this.sdk.api,\n      buildArgs,\n    );\n\n    const signerPayload = this.sdk.api.registry.createTypeUnsafe<SignerPayload>(\n      'SignerPayload',\n      [\n        objectSpread({}, signatureOptions, {\n          address,\n          blockNumber: header?.number || 0,\n          method,\n          version,\n        }),\n      ],\n    );\n\n    return signerPayloadToUnsignedTxPayload(this.sdk.api, signerPayload);\n  }\n\n  async getFee(\n    buildArgs: TxBuildArguments | UnsignedTxPayload | SubmitTxArguments,\n  ): Promise<Fee> {\n    const submittable = buildSubmittable(this.sdk.api, buildArgs);\n    const address = getAddress(buildArgs);\n\n    const { partialFee } = await submittable.paymentInfo(address);\n\n    return formatBalance(this.sdk.api, partialFee);\n  }\n\n  async sign(\n    args: UnsignedTxPayload,\n    signer: SdkSigner | undefined = this.sdk.signer,\n  ): Promise<SignTxResult> {\n    if (!signer) throw new InvalidSignerError(`No signer provided`);\n\n    return signer.sign(args);\n  }\n\n  verifySignOrThrow(args: SubmitTxArguments): void {\n    verifyTxSignatureOrThrow(\n      this.sdk.api,\n      args.signerPayloadJSON,\n      args.signature,\n    );\n  }\n\n  packSignatureType(\n    signature: HexString | Uint8Array,\n    signatureType: SignatureType | `${SignatureType}`,\n  ): HexString {\n    return this.sdk.api.registry\n      .createType('ExtrinsicSignature', { [signatureType]: signature })\n      .toHex();\n  }\n\n  async submit(\n    args: SubmitTxArguments,\n    isObservable = false,\n  ): Promise<SubmitResult> {\n    return this.submitter.submit(args, isObservable);\n  }\n\n  async submitWaitCompleted(\n    args: SubmitTxArguments,\n  ): Promise<ISubmittableResult> {\n    const { result$ } = await this.submitter.submit(args, true);\n\n    return lastValueFrom(result$);\n  }\n}\n","import { Sdk } from '@unique-nft/sdk';\nimport {\n  Balance,\n  SdkSigner,\n  SubmitResult,\n  SubmittableResultCompleted,\n  SubmittableResultInProcess,\n  SubmitTxArguments,\n  TxBuildArguments,\n  UnsignedTxPayload,\n} from '@unique-nft/sdk/types';\nimport { ISubmittableResult } from '@polkadot/types/types/extrinsic';\nimport {\n  lastValueFrom,\n  Observable,\n  switchMap,\n  from,\n  mergeMap,\n  identity,\n} from 'rxjs';\nimport { SubmitExtrinsicError } from '@unique-nft/sdk/errors';\nimport { isSubmitTxArguments, isUnsignedTxPayload } from './tx-utils';\n\nexport interface MutationOptions {\n  signer?: SdkSigner;\n}\n\nexport type MutationMethod<A, R> = (\n  args: A | UnsignedTxPayload | SubmitTxArguments,\n  options?: MutationOptions,\n) => Promise<SubmittableResultCompleted<R>>;\n\nexport interface MutationMethodWrap<A, R> {\n  build(args: A): Promise<UnsignedTxPayload>;\n\n  getFee(args: A | UnsignedTxPayload | SubmitTxArguments): Promise<Balance>;\n\n  sign(\n    args: A | UnsignedTxPayload,\n    options?: MutationOptions,\n  ): Promise<SubmitTxArguments>;\n\n  submit(\n    args: A | UnsignedTxPayload | SubmitTxArguments,\n    options?: MutationOptions,\n  ): Promise<Omit<SubmitResult, 'result$'>>;\n\n  submitWatch(\n    args: A | UnsignedTxPayload | SubmitTxArguments,\n    options?: MutationOptions,\n  ): Observable<SubmittableResultInProcess<R>>;\n\n  submitWaitResult: MutationMethod<A, R>;\n\n  expose(): MutationMethod<A, R>;\n}\n\nexport abstract class MutationMethodBase<A, R>\n  implements MutationMethodWrap<A, R>\n{\n  constructor(readonly sdk: Sdk) {}\n\n  abstract transformArgs(args: A): Promise<TxBuildArguments>;\n\n  abstract transformResult(result: ISubmittableResult): Promise<R | undefined>;\n\n  async build(args: A): Promise<UnsignedTxPayload> {\n    const transformedArgs = await this.transformArgs(args);\n\n    return this.sdk.extrinsics.build(transformedArgs);\n  }\n\n  async getFee(\n    args: A | UnsignedTxPayload | SubmitTxArguments,\n  ): Promise<Balance> {\n    const payload =\n      isSubmitTxArguments(args) || isUnsignedTxPayload(args)\n        ? args\n        : await this.build(args);\n\n    return this.sdk.extrinsics.getFee(payload);\n  }\n\n  async sign(\n    args: UnsignedTxPayload | A,\n    options?: MutationOptions,\n  ): Promise<SubmitTxArguments> {\n    const unsigned = isUnsignedTxPayload(args) ? args : await this.build(args);\n\n    const { signerPayloadJSON } = unsigned;\n    const { signature } = await this.sdk.extrinsics.sign(\n      unsigned,\n      options?.signer,\n    );\n\n    return { signature, signerPayloadJSON };\n  }\n\n  async submit(\n    args: UnsignedTxPayload | SubmitTxArguments | A,\n    options?: MutationOptions,\n  ): Promise<Omit<SubmitResult, 'result$'>> {\n    const submitTxArguments = isSubmitTxArguments(args)\n      ? args\n      : await this.sign(args, options);\n\n    return this.sdk.extrinsics.submit(submitTxArguments, false);\n  }\n\n  // todo - hide async inside Observable and return just Observable<SubmittableResultInProcess<R>\n  submitWatch(\n    args: UnsignedTxPayload | SubmitTxArguments | A,\n    options?: MutationOptions,\n  ): Observable<SubmittableResultInProcess<R>> {\n    const getSubmittableResult$ = async () => {\n      const submitTxArguments = isSubmitTxArguments(args)\n        ? args\n        : await this.sign(args, options);\n\n      const { result$ } = await this.sdk.extrinsics.submit(\n        submitTxArguments,\n        true,\n      );\n\n      return result$;\n    };\n\n    const tryParse = async (submittableResult: ISubmittableResult) => {\n      const parsed = await this.transformResult(submittableResult);\n\n      return { submittableResult, parsed };\n    };\n\n    return from(getSubmittableResult$()).pipe(\n      mergeMap(identity),\n      switchMap(tryParse),\n    );\n  }\n\n  async submitWaitResult(\n    args: UnsignedTxPayload | SubmitTxArguments | A,\n    options?: MutationOptions,\n  ): Promise<SubmittableResultCompleted<R>> {\n    const submitted$ = await this.submitWatch(args, options);\n\n    const completed = await lastValueFrom(submitted$);\n\n    if (completed.parsed === undefined) throw new SubmitExtrinsicError();\n\n    return {\n      ...completed,\n      isCompleted: true,\n      parsed: completed.parsed,\n    };\n  }\n\n  expose() {\n    return this.submitWaitResult.bind(this);\n  }\n}\n","import { addFeature } from '@unique-nft/sdk';\n\nimport { SdkExtrinsics } from './sdk-extrinsics';\n\nimport './augment-sdk';\n\nexport * from './tx-utils';\nexport * from './sdk-extrinsics';\nexport * from './mutation-method';\nexport * from './query-method';\n\naddFeature('extrinsics', SdkExtrinsics);\n"],"names":["hexToU8a","u8aToHex","BadPayloadError","signatureVerify","BadSignatureError","BuildExtrinsicError","EMPTY","SubmitExtrinsicError","Observable","objectSpread","formatBalance","InvalidSignerError","lastValueFrom","from","mergeMap","identity","switchMap","addFeature"],"mappings":"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"}