{"version":3,"file":"TransactionPayPublishHook.mjs","sourceRoot":"","sources":["../../src/helpers/TransactionPayPublishHook.ts"],"names":[],"mappings":";;;;;;;;;;;;AAIA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;AAErD,OAAO,EAAE,aAAa,EAAE,sBAAkB;AAK1C,OAAO,EAAE,WAAW,EAAE,8BAA0B;AAEhD,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;AAElE,MAAM,YAAY,GAAG;IACnB,eAAe,EAAE,SAAS;CAC3B,CAAC;AAEF,MAAM,OAAO,yBAAyB;IAKpC,YAAY,EACV,kBAAkB,EAClB,SAAS,GAIV;;QAVQ,gEAA+C;QAE/C,uDAA8C;QASrD,uBAAA,IAAI,iDAAuB,kBAAkB,MAAA,CAAC;QAC9C,uBAAA,IAAI,wCAAc,SAAS,MAAA,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,OAAO,uBAAA,IAAI,oFAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CA0CF;oNAxCC,KAAK,iDACH,eAAgC,EAChC,SAAiB;IAEjB,IAAI;QACF,OAAO,MAAM,uBAAA,IAAI,oFAAa,MAAjB,IAAI,EAAc,eAAe,EAAE,SAAS,CAAC,CAAC;KAC5D;IAAC,OAAO,KAAK,EAAE;QACd,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACpB,MAAM,KAAK,CAAC;KACb;AACH,CAAC,2CAED,KAAK,iDACH,eAAgC,EAChC,SAAiB;IAEjB,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,eAAe,CAAC;IAE9C,MAAM,eAAe,GAAG,uBAAA,IAAI,4CAAW,CAAC,IAAI,CAC1C,mCAAmC,CACpC,CAAC;IAEF,MAAM,MAAM,GACT,eAAe,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC;QAC/C,EAAE,MAAyC,IAAI,EAAE,CAAC;IAEtD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE;QACnB,GAAG,CAAC,6BAA6B,CAAC,CAAC;QACnC,OAAO,YAAY,CAAC;KACrB;IAED,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,uBAAA,IAAI,4CAAW,EAAE,eAAe,CAAC,CAAC;IAErE,OAAO,MAAM,QAAQ,CAAC,OAAO,CAAC;QAC5B,kBAAkB,EAAE,uBAAA,IAAI,qDAAoB;QAC5C,MAAM;QACN,SAAS,EAAE,uBAAA,IAAI,4CAAW;QAC1B,WAAW,EAAE,eAAe;KAC7B,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { PublishHook } from '@metamask/transaction-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { PublishHookResult } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\nimport type {\n  TransactionPayControllerMessenger,\n  TransactionPayQuote,\n} from '../types';\nimport { getStrategy } from '../utils/strategy';\n\nconst log = createModuleLogger(projectLogger, 'pay-publish-hook');\n\nconst EMPTY_RESULT = {\n  transactionHash: undefined,\n};\n\nexport class TransactionPayPublishHook {\n  readonly #isSmartTransaction: (chainId: Hex) => boolean;\n\n  readonly #messenger: TransactionPayControllerMessenger;\n\n  constructor({\n    isSmartTransaction,\n    messenger,\n  }: {\n    isSmartTransaction: (chainId: Hex) => boolean;\n    messenger: TransactionPayControllerMessenger;\n  }) {\n    this.#isSmartTransaction = isSmartTransaction;\n    this.#messenger = messenger;\n  }\n\n  getHook(): PublishHook {\n    return this.#hookWrapper.bind(this);\n  }\n\n  async #hookWrapper(\n    transactionMeta: TransactionMeta,\n    _signedTx: string,\n  ): Promise<PublishHookResult> {\n    try {\n      return await this.#publishHook(transactionMeta, _signedTx);\n    } catch (error) {\n      log('Error', error);\n      throw error;\n    }\n  }\n\n  async #publishHook(\n    transactionMeta: TransactionMeta,\n    _signedTx: string,\n  ): Promise<PublishHookResult> {\n    const { id: transactionId } = transactionMeta;\n\n    const controllerState = this.#messenger.call(\n      'TransactionPayController:getState',\n    );\n\n    const quotes =\n      (controllerState.transactionData?.[transactionId]\n        ?.quotes as TransactionPayQuote<unknown>[]) ?? [];\n\n    if (!quotes?.length) {\n      log('Skipping as no quotes found');\n      return EMPTY_RESULT;\n    }\n\n    const strategy = await getStrategy(this.#messenger, transactionMeta);\n\n    return await strategy.execute({\n      isSmartTransaction: this.#isSmartTransaction,\n      quotes,\n      messenger: this.#messenger,\n      transaction: transactionMeta,\n    });\n  }\n}\n"]}