Page MenuHomePhabricator

[Cashtab, cashtab-connect] Support tx approval and rejection in cashtab extension and cashtab-connect
ClosedPublic

Authored by bytesofman on Jul 9 2025, 13:58.

Details

Summary

Users should have a clear option to reject a tx opened by the browser extension or a URL. We should pass this info to the requesting app so it can be handled appropriately.

This is a typical API used by Phantom and metamask. It's useful for the webpage to know if the user completed or rejected the tx, as there may be some app functionality that depends on this.

Note that one consequence of this diff is users who directly navigate to a url-params-populated tx will get a "Reject" button that does not work. This is acceptable behavior. It's worth the tradeoff for the reject button working for tabs that are opened by a link, which is the expected use case.

Test Plan

npm test, run npm start in cashtab-connect/demo and try accepting / rejecting txs

Diff Detail

Repository
rABC Bitcoin ABC
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

Tail of the build log:

  run `npm fund` for details

3 moderate severity vulnerabilities

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.
CI not configured to test build.

> cashtab-connect@1.0.0 test
> mocha -r ts-node/register test/test.ts --exit --reporter mocha-junit-reporter --reporter-options mochaFile=test_results/junit_results_cashtab-connect.xml --reporter-options testsuitesTitle=Cashtab Connect Unit Tests --reporter-options rootSuiteTitle=Cashtab Connect


✖ ERROR: TypeError: Could not load reporter "mocha-junit-reporter":

 Error: Cannot find module '/work/modules/cashtab-connect/mocha-junit-reporter'
Require stack:
- /work/modules/cashtab-connect/node_modules/mocha/lib/cli/run-helpers.js
- /work/modules/cashtab-connect/node_modules/mocha/lib/cli/options.js
- /work/modules/cashtab-connect/node_modules/mocha/bin/mocha
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:1212:15)
    at Function.Module._resolveFilename.sharedData.moduleResolveFilenameHook.installedValue [as _resolveFilename] (/work/modules/cashtab-connect/node_modules/@cspotcode/source-map-support/source-map-support.js:811:30)
    at Function.Module._load (node:internal/modules/cjs/loader:1043:27)
    at Module.require (node:internal/modules/cjs/loader:1298:19)
    at require (node:internal/modules/helpers:182:18)
    at exports.validateLegacyPlugin (/work/modules/cashtab-connect/node_modules/mocha/lib/cli/run-helpers.js:237:25)
    at /work/modules/cashtab-connect/node_modules/mocha/lib/cli/run.js:354:9 {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/work/modules/cashtab-connect/node_modules/mocha/lib/cli/run-helpers.js',
    '/work/modules/cashtab-connect/node_modules/mocha/lib/cli/options.js',
    '/work/modules/cashtab-connect/node_modules/mocha/bin/mocha'
  ]
}
    at createInvalidReporterError (/work/modules/cashtab-connect/node_modules/mocha/lib/errors.js:207:13)
    at createInvalidLegacyPluginError (/work/modules/cashtab-connect/node_modules/mocha/lib/errors.js:341:14)
    at createUnknownError (/work/modules/cashtab-connect/node_modules/mocha/lib/cli/run-helpers.js:220:5)
    at exports.validateLegacyPlugin (/work/modules/cashtab-connect/node_modules/mocha/lib/cli/run-helpers.js:239:15)
    at /work/modules/cashtab-connect/node_modules/mocha/lib/cli/run.js:354:9 {
  code: 'ERR_MOCHA_INVALID_REPORTER',
  reporter: 'mocha-junit-reporter'
}
----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |       0 |        0 |       0 |       0 |                   
----------|---------|----------|---------|---------|-------------------

##teamcity[blockOpened name='Code Coverage Summary']
##teamcity[buildStatisticValue key='CodeCoverageAbsBCovered' value='0']
##teamcity[buildStatisticValue key='CodeCoverageAbsBTotal' value='0']
##teamcity[buildStatisticValue key='CodeCoverageAbsRCovered' value='0']
##teamcity[buildStatisticValue key='CodeCoverageAbsRTotal' value='0']
##teamcity[buildStatisticValue key='CodeCoverageAbsMCovered' value='0']
##teamcity[buildStatisticValue key='CodeCoverageAbsMTotal' value='0']
##teamcity[buildStatisticValue key='CodeCoverageAbsLCovered' value='0']
##teamcity[buildStatisticValue key='CodeCoverageAbsLTotal' value='0']
##teamcity[blockClosed name='Code Coverage Summary']
Build cashtab-connect-tests failed with exit code 1

Tail of the build log:

  run `npm fund` for details

3 moderate severity vulnerabilities

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.
CI not configured to test build.

> cashtab-connect@1.0.0 test
> mocha -r ts-node/register test/test.ts --exit --reporter mocha-junit-reporter --reporter-options mochaFile=test_results/junit_results_cashtab-connect.xml --reporter-options testsuitesTitle=Cashtab Connect Unit Tests --reporter-options rootSuiteTitle=Cashtab Connect


✖ ERROR: TypeError: Could not load reporter "mocha-junit-reporter":

 Error: Cannot find module '/work/modules/cashtab-connect/mocha-junit-reporter'
Require stack:
- /work/modules/cashtab-connect/node_modules/mocha/lib/cli/run-helpers.js
- /work/modules/cashtab-connect/node_modules/mocha/lib/cli/options.js
- /work/modules/cashtab-connect/node_modules/mocha/bin/mocha
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:1212:15)
    at Function.Module._resolveFilename.sharedData.moduleResolveFilenameHook.installedValue [as _resolveFilename] (/work/modules/cashtab-connect/node_modules/@cspotcode/source-map-support/source-map-support.js:811:30)
    at Function.Module._load (node:internal/modules/cjs/loader:1043:27)
    at Module.require (node:internal/modules/cjs/loader:1298:19)
    at require (node:internal/modules/helpers:182:18)
    at exports.validateLegacyPlugin (/work/modules/cashtab-connect/node_modules/mocha/lib/cli/run-helpers.js:237:25)
    at /work/modules/cashtab-connect/node_modules/mocha/lib/cli/run.js:354:9 {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/work/modules/cashtab-connect/node_modules/mocha/lib/cli/run-helpers.js',
    '/work/modules/cashtab-connect/node_modules/mocha/lib/cli/options.js',
    '/work/modules/cashtab-connect/node_modules/mocha/bin/mocha'
  ]
}
    at createInvalidReporterError (/work/modules/cashtab-connect/node_modules/mocha/lib/errors.js:207:13)
    at createInvalidLegacyPluginError (/work/modules/cashtab-connect/node_modules/mocha/lib/errors.js:341:14)
    at createUnknownError (/work/modules/cashtab-connect/node_modules/mocha/lib/cli/run-helpers.js:220:5)
    at exports.validateLegacyPlugin (/work/modules/cashtab-connect/node_modules/mocha/lib/cli/run-helpers.js:239:15)
    at /work/modules/cashtab-connect/node_modules/mocha/lib/cli/run.js:354:9 {
  code: 'ERR_MOCHA_INVALID_REPORTER',
  reporter: 'mocha-junit-reporter'
}
----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |       0 |        0 |       0 |       0 |                   
----------|---------|----------|---------|---------|-------------------

##teamcity[blockOpened name='Code Coverage Summary']
##teamcity[buildStatisticValue key='CodeCoverageAbsBCovered' value='0']
##teamcity[buildStatisticValue key='CodeCoverageAbsBTotal' value='0']
##teamcity[buildStatisticValue key='CodeCoverageAbsRCovered' value='0']
##teamcity[buildStatisticValue key='CodeCoverageAbsRTotal' value='0']
##teamcity[buildStatisticValue key='CodeCoverageAbsMCovered' value='0']
##teamcity[buildStatisticValue key='CodeCoverageAbsMTotal' value='0']
##teamcity[buildStatisticValue key='CodeCoverageAbsLCovered' value='0']
##teamcity[buildStatisticValue key='CodeCoverageAbsLTotal' value='0']
##teamcity[blockClosed name='Code Coverage Summary']
Build cashtab-connect-tests failed with exit code 1

add missing test dep for cashtab-connect needed for CI tests, also support ability of webapp to reject txs

Failed tests logs:

====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. ======
Error: Unable to find role="button" and name "Send"

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="sc-epGmkI gEcelO"
    >
      <section
        aria-atomic="false"
        aria-label="Notifications Alt+T"
        aria-live="polite"
        aria-relevant="additions text"
        class="Toastify"
      />
      <div
        class="sc-dphlzf kWTBLl"
      >
        <div
          class="sc-fCPvlr jjqlGS"
        >
          <div
            class="sc-cmIlrE erdidG"
            title="Wallet Info"
          >
            <div
              class="sc-gleUXh eqThuU"
            >
              <img
                alt="cashtab"
                src="test-file-stub"
              />
              <div
                class="sc-bNQFlB iWAswN"
                title="Price in Local Currency mobile"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
            </div>
            <div
              class="sc-doWzTn cwxplc"
            >
              <div
                class="sc-dBaXSw YgqsB"
                title="Price in Local Currency"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
              <div
                class="sc-dRCTWM fkOZJx"
              >
                <label
                  class="sc-iHhHRJ bRRQBm"
                >
                  <input
                    checked=""
                    class="sc-kqlzXE dGZbFO"
                    type="checkbox"
                  />
                  <div
                    class="sc-OxbzP cikFVU"
                  >
                    <img
                      alt="toggle icon"
                      src="test-file-stub"
                    />
                  </div>
                </label>
                <button
                  aria-label="Copy ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g"
                  class="sc-dNLxif cAFGSA"
                >
                  <svg
                    title="copy-paste"
                  />
                </button>
                <select
                  class="sc-cgHJcJ hQnlum"
                  data-testid="wallet-select"
                  id="wallets"
                  name="wallets"
                >
                  <option
                    class="sc-hizQCF bqpbnS"
                    value="Transaction Fixtures"
                  >
                    Transaction Fixtures
                  </option>
                </select>
              </div>
            </div>
            <div
              class="sc-hARARD eVwYut"
            >
              <div
                class="sc-ccLTTT bPnMjq"
              >
                <div
                  class="sc-hlILIN ldlUir"
                >
                  <img
                    alt="eCash"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hcFRXF"
                  >
                    eCash
                  </div>
                  <div
                    class="sc-TuwoP gKAyt"
                    title="Balance XEC"
                  >
                    9,513.12
                     
                    XEC
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XEC Fiat"
                  >
                    $
                    0.29
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN cHZcbF"
                >
                  <img
                    alt="eCash Staking"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hjJCEK"
                  >
                    Staking
                  </div>
                  <div
                    class="sc-TuwoP eUItcw"
                    title="Balance XECX"
                  >
                    0.00
                     
                    <a
                      href="#/token/c67bf5c2b6d91cfb46a5c1772582eff80d88686887be10aa63b0945479cf4ed4"
                    >
                      XECX
                    </a>
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XECX Fiat"
                  >
                    $
                    0.00
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN jZIzbe"
                ...
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:86:33
    at Object.findByRole (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:128:26)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at listOnTimeout (node:internal/timers:545:9)
    at processTimers (node:internal/timers:519:7)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. Invalid bip21 string is ignored. ======
Error: Unable to find role="button" and name "Send"

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="sc-epGmkI gEcelO"
    >
      <section
        aria-atomic="false"
        aria-label="Notifications Alt+T"
        aria-live="polite"
        aria-relevant="additions text"
        class="Toastify"
      />
      <div
        class="sc-dphlzf kWTBLl"
      >
        <div
          class="sc-fCPvlr jjqlGS"
        >
          <div
            class="sc-cmIlrE erdidG"
            title="Wallet Info"
          >
            <div
              class="sc-gleUXh eqThuU"
            >
              <img
                alt="cashtab"
                src="test-file-stub"
              />
              <div
                class="sc-bNQFlB iWAswN"
                title="Price in Local Currency mobile"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
            </div>
            <div
              class="sc-doWzTn cwxplc"
            >
              <div
                class="sc-dBaXSw YgqsB"
                title="Price in Local Currency"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
              <div
                class="sc-dRCTWM fkOZJx"
              >
                <label
                  class="sc-dXfzlN hsbqSw"
                >
                  <input
                    checked=""
                    class="sc-aewfc hZddoP"
                    type="checkbox"
                  />
                  <div
                    class="sc-iIHjhz jwwPKp"
                  >
                    <img
                      alt="toggle icon"
                      src="test-file-stub"
                    />
                  </div>
                </label>
                <button
                  aria-label="Copy ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g"
                  class="sc-dNLxif cAFGSA"
                >
                  <svg
                    title="copy-paste"
                  />
                </button>
                <select
                  class="sc-cgHJcJ hQnlum"
                  data-testid="wallet-select"
                  id="wallets"
                  name="wallets"
                >
                  <option
                    class="sc-hizQCF bqpbnS"
                    value="Transaction Fixtures"
                  >
                    Transaction Fixtures
                  </option>
                </select>
              </div>
            </div>
            <div
              class="sc-hARARD eVwYut"
            >
              <div
                class="sc-ccLTTT bPnMjq"
              >
                <div
                  class="sc-hlILIN ldlUir"
                >
                  <img
                    alt="eCash"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hcFRXF"
                  >
                    eCash
                  </div>
                  <div
                    class="sc-TuwoP gKAyt"
                    title="Balance XEC"
                  >
                    9,513.12
                     
                    XEC
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XEC Fiat"
                  >
                    $
                    0.29
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN cHZcbF"
                >
                  <img
                    alt="eCash Staking"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hjJCEK"
                  >
                    Staking
                  </div>
                  <div
                    class="sc-TuwoP eUItcw"
                    title="Balance XECX"
                  >
                    0.00
                     
                    <a
                      href="#/token/c67bf5c2b6d91cfb46a5c1772582eff80d88686887be10aa63b0945479cf4ed4"
                    >
                      XECX
                    </a>
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XECX Fiat"
                  >
                    $
                    0.00
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN jZIzbe"
                ...
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:86:33
    at Object.findByRole (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:186:26)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at listOnTimeout (node:internal/timers:545:9)
    at processTimers (node:internal/timers:519:7)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address field is populated + disabled while value field is empty + enabled if legacy url params have address defined and value present as undefined ======
Error: Unable to find role="button" and name "Send"

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="sc-epGmkI gEcelO"
    >
      <section
        aria-atomic="false"
        aria-label="Notifications Alt+T"
        aria-live="polite"
        aria-relevant="additions text"
        class="Toastify"
      />
      <div
        class="sc-dphlzf kWTBLl"
      >
        <div
          class="sc-fCPvlr jjqlGS"
        >
          <div
            class="sc-cmIlrE erdidG"
            title="Wallet Info"
          >
            <div
              class="sc-gleUXh eqThuU"
            >
              <img
                alt="cashtab"
                src="test-file-stub"
              />
              <div
                class="sc-bNQFlB iWAswN"
                title="Price in Local Currency mobile"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
            </div>
            <div
              class="sc-doWzTn cwxplc"
            >
              <div
                class="sc-dBaXSw YgqsB"
                title="Price in Local Currency"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
              <div
                class="sc-dRCTWM fkOZJx"
              >
                <label
                  class="sc-fgrSAo jhxsUK"
                >
                  <input
                    checked=""
                    class="sc-jHXLhC hvQnAI"
                    type="checkbox"
                  />
                  <div
                    class="sc-bOCYYb fwwQPh"
                  >
                    <img
                      alt="toggle icon"
                      src="test-file-stub"
                    />
                  </div>
                </label>
                <button
                  aria-label="Copy ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g"
                  class="sc-dNLxif cAFGSA"
                >
                  <svg
                    title="copy-paste"
                  />
                </button>
                <select
                  class="sc-cgHJcJ hQnlum"
                  data-testid="wallet-select"
                  id="wallets"
                  name="wallets"
                >
                  <option
                    class="sc-hizQCF bqpbnS"
                    value="Transaction Fixtures"
                  >
                    Transaction Fixtures
                  </option>
                </select>
              </div>
            </div>
            <div
              class="sc-hARARD eVwYut"
            >
              <div
                class="sc-ccLTTT bPnMjq"
              >
                <div
                  class="sc-hlILIN ldlUir"
                >
                  <img
                    alt="eCash"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hcFRXF"
                  >
                    eCash
                  </div>
                  <div
                    class="sc-TuwoP gKAyt"
                    title="Balance XEC"
                  >
                    9,513.12
                     
                    XEC
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XEC Fiat"
                  >
                    $
                    0.29
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN cHZcbF"
                >
                  <img
                    alt="eCash Staking"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hjJCEK"
                  >
                    Staking
                  </div>
                  <div
                    class="sc-TuwoP eUItcw"
                    title="Balance XECX"
                  >
                    0.00
                     
                    <a
                      href="#/token/c67bf5c2b6d91cfb46a5c1772582eff80d88686887be10aa63b0945479cf4ed4"
                    >
                      XECX
                    </a>
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XECX Fiat"
                  >
                    $
                    0.00
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN jZIzbe"
               ...
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:86:33
    at Object.findByRole (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:250:29)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at listOnTimeout (node:internal/timers:545:9)
    at processTimers (node:internal/timers:519:7)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address field is populated + disabled while value field is empty + enabled if legacy url params have address defined and no value key present ======
Error: Unable to find role="button" and name "Send"

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="sc-epGmkI gEcelO"
    >
      <section
        aria-atomic="false"
        aria-label="Notifications Alt+T"
        aria-live="polite"
        aria-relevant="additions text"
        class="Toastify"
      />
      <div
        class="sc-dphlzf kWTBLl"
      >
        <div
          class="sc-fCPvlr jjqlGS"
        >
          <div
            class="sc-cmIlrE erdidG"
            title="Wallet Info"
          >
            <div
              class="sc-gleUXh eqThuU"
            >
              <img
                alt="cashtab"
                src="test-file-stub"
              />
              <div
                class="sc-bNQFlB iWAswN"
                title="Price in Local Currency mobile"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
            </div>
            <div
              class="sc-doWzTn cwxplc"
            >
              <div
                class="sc-dBaXSw YgqsB"
                title="Price in Local Currency"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
              <div
                class="sc-dRCTWM fkOZJx"
              >
                <label
                  class="sc-jotlie hmgNph"
                >
                  <input
                    checked=""
                    class="sc-fdQOMr cnCyXP"
                    type="checkbox"
                  />
                  <div
                    class="sc-fAJaQT jBPLLf"
                  >
                    <img
                      alt="toggle icon"
                      src="test-file-stub"
                    />
                  </div>
                </label>
                <button
                  aria-label="Copy ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g"
                  class="sc-dNLxif cAFGSA"
                >
                  <svg
                    title="copy-paste"
                  />
                </button>
                <select
                  class="sc-cgHJcJ hQnlum"
                  data-testid="wallet-select"
                  id="wallets"
                  name="wallets"
                >
                  <option
                    class="sc-hizQCF bqpbnS"
                    value="Transaction Fixtures"
                  >
                    Transaction Fixtures
                  </option>
                </select>
              </div>
            </div>
            <div
              class="sc-hARARD eVwYut"
            >
              <div
                class="sc-ccLTTT bPnMjq"
              >
                <div
                  class="sc-hlILIN ldlUir"
                >
                  <img
                    alt="eCash"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hcFRXF"
                  >
                    eCash
                  </div>
                  <div
                    class="sc-TuwoP gKAyt"
                    title="Balance XEC"
                  >
                    9,513.12
                     
                    XEC
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XEC Fiat"
                  >
                    $
                    0.29
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN cHZcbF"
                >
                  <img
                    alt="eCash Staking"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hjJCEK"
                  >
                    Staking
                  </div>
                  <div
                    class="sc-TuwoP eUItcw"
                    title="Balance XECX"
                  >
                    0.00
                     
                    <a
                      href="#/token/c67bf5c2b6d91cfb46a5c1772582eff80d88686887be10aa63b0945479cf4ed4"
                    >
                      XECX
                    </a>
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XECX Fiat"
                  >
                    $
                    0.00
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN jZIzbe"
               ...
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:86:33
    at Object.findByRole (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:315:29)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at listOnTimeout (node:internal/timers:545:9)
    at processTimers (node:internal/timers:519:7)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params are not parsed as bip21 even if the bip21 param appears in the string ======
Error: Unable to find role="button" and name "Send"

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="sc-epGmkI gEcelO"
    >
      <section
        aria-atomic="false"
        aria-label="Notifications Alt+T"
        aria-live="polite"
        aria-relevant="additions text"
        class="Toastify"
      />
      <div
        class="sc-dphlzf kWTBLl"
      >
        <div
          class="sc-fCPvlr jjqlGS"
        >
          <div
            class="sc-cmIlrE erdidG"
            title="Wallet Info"
          >
            <div
              class="sc-gleUXh eqThuU"
            >
              <img
                alt="cashtab"
                src="test-file-stub"
              />
              <div
                class="sc-bNQFlB iWAswN"
                title="Price in Local Currency mobile"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
            </div>
            <div
              class="sc-doWzTn cwxplc"
            >
              <div
                class="sc-dBaXSw YgqsB"
                title="Price in Local Currency"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
              <div
                class="sc-dRCTWM fkOZJx"
              >
                <label
                  class="sc-blIhvV ctRthE"
                >
                  <input
                    checked=""
                    class="sc-bYTsla GTIeF"
                    type="checkbox"
                  />
                  <div
                    class="sc-dlyikq ASZWk"
                  >
                    <img
                      alt="toggle icon"
                      src="test-file-stub"
                    />
                  </div>
                </label>
                <button
                  aria-label="Copy ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g"
                  class="sc-dNLxif cAFGSA"
                >
                  <svg
                    title="copy-paste"
                  />
                </button>
                <select
                  class="sc-cgHJcJ hQnlum"
                  data-testid="wallet-select"
                  id="wallets"
                  name="wallets"
                >
                  <option
                    class="sc-hizQCF bqpbnS"
                    value="Transaction Fixtures"
                  >
                    Transaction Fixtures
                  </option>
                </select>
              </div>
            </div>
            <div
              class="sc-hARARD eVwYut"
            >
              <div
                class="sc-ccLTTT bPnMjq"
              >
                <div
                  class="sc-hlILIN ldlUir"
                >
                  <img
                    alt="eCash"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hcFRXF"
                  >
                    eCash
                  </div>
                  <div
                    class="sc-TuwoP gKAyt"
                    title="Balance XEC"
                  >
                    9,513.12
                     
                    XEC
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XEC Fiat"
                  >
                    $
                    0.29
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN cHZcbF"
                >
                  <img
                    alt="eCash Staking"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hjJCEK"
                  >
                    Staking
                  </div>
                  <div
                    class="sc-TuwoP eUItcw"
                    title="Balance XECX"
                  >
                    0.00
                     
                    <a
                      href="#/token/c67bf5c2b6d91cfb46a5c1772582eff80d88686887be10aa63b0945479cf4ed4"
                    >
                      XECX
                    </a>
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XECX Fiat"
                  >
                    $
                    0.00
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN jZIzbe"
                ...
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:86:33
    at Object.findByRole (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:496:26)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - valid bip21 param with amount and op_return_raw is parsed as expected ======
Error: Unable to find role="button" and name "Send"

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="sc-epGmkI gEcelO"
    >
      <section
        aria-atomic="false"
        aria-label="Notifications Alt+T"
        aria-live="polite"
        aria-relevant="additions text"
        class="Toastify"
      />
      <div
        class="sc-dphlzf kWTBLl"
      >
        <div
          class="sc-fCPvlr jjqlGS"
        >
          <div
            class="sc-cmIlrE erdidG"
            title="Wallet Info"
          >
            <div
              class="sc-gleUXh eqThuU"
            >
              <img
                alt="cashtab"
                src="test-file-stub"
              />
              <div
                class="sc-bNQFlB iWAswN"
                title="Price in Local Currency mobile"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
            </div>
            <div
              class="sc-doWzTn cwxplc"
            >
              <div
                class="sc-dBaXSw YgqsB"
                title="Price in Local Currency"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
              <div
                class="sc-dRCTWM fkOZJx"
              >
                <label
                  class="sc-MYvYT eYDDkT"
                >
                  <input
                    checked=""
                    class="sc-RmnOB bbwDqL"
                    type="checkbox"
                  />
                  <div
                    class="sc-jPPmml jsQnNM"
                  >
                    <img
                      alt="toggle icon"
                      src="test-file-stub"
                    />
                  </div>
                </label>
                <button
                  aria-label="Copy ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g"
                  class="sc-dNLxif cAFGSA"
                >
                  <svg
                    title="copy-paste"
                  />
                </button>
                <select
                  class="sc-cgHJcJ hQnlum"
                  data-testid="wallet-select"
                  id="wallets"
                  name="wallets"
                >
                  <option
                    class="sc-hizQCF bqpbnS"
                    value="Transaction Fixtures"
                  >
                    Transaction Fixtures
                  </option>
                </select>
              </div>
            </div>
            <div
              class="sc-hARARD eVwYut"
            >
              <div
                class="sc-ccLTTT bPnMjq"
              >
                <div
                  class="sc-hlILIN ldlUir"
                >
                  <img
                    alt="eCash"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hcFRXF"
                  >
                    eCash
                  </div>
                  <div
                    class="sc-TuwoP gKAyt"
                    title="Balance XEC"
                  >
                    9,513.12
                     
                    XEC
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XEC Fiat"
                  >
                    $
                    0.29
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN cHZcbF"
                >
                  <img
                    alt="eCash Staking"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hjJCEK"
                  >
                    Staking
                  </div>
                  <div
                    class="sc-TuwoP eUItcw"
                    title="Balance XECX"
                  >
                    0.00
                     
                    <a
                      href="#/token/c67bf5c2b6d91cfb46a5c1772582eff80d88686887be10aa63b0945479cf4ed4"
                    >
                      XECX
                    </a>
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XECX Fiat"
                  >
                    $
                    0.00
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN jZIzbe"
                ...
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:86:33
    at Object.findByRole (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:609:26)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at listOnTimeout (node:internal/timers:545:9)
    at processTimers (node:internal/timers:519:7)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - an invalid bip21 param shows validation errors but cannot be changed ======
Error: Unable to find role="button" and name "Send"

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="sc-epGmkI gEcelO"
    >
      <section
        aria-atomic="false"
        aria-label="Notifications Alt+T"
        aria-live="polite"
        aria-relevant="additions text"
        class="Toastify"
      />
      <div
        class="sc-dphlzf kWTBLl"
      >
        <div
          class="sc-fCPvlr jjqlGS"
        >
          <div
            class="sc-cmIlrE erdidG"
            title="Wallet Info"
          >
            <div
              class="sc-gleUXh eqThuU"
            >
              <img
                alt="cashtab"
                src="test-file-stub"
              />
              <div
                class="sc-bNQFlB iWAswN"
                title="Price in Local Currency mobile"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
            </div>
            <div
              class="sc-doWzTn cwxplc"
            >
              <div
                class="sc-dBaXSw YgqsB"
                title="Price in Local Currency"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
              <div
                class="sc-dRCTWM fkOZJx"
              >
                <label
                  class="sc-dXLFzO jpcmJe"
                >
                  <input
                    checked=""
                    class="sc-eQGPmX gLRjxW"
                    type="checkbox"
                  />
                  <div
                    class="sc-dAOnuy ckaQjL"
                  >
                    <img
                      alt="toggle icon"
                      src="test-file-stub"
                    />
                  </div>
                </label>
                <button
                  aria-label="Copy ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g"
                  class="sc-dNLxif cAFGSA"
                >
                  <svg
                    title="copy-paste"
                  />
                </button>
                <select
                  class="sc-cgHJcJ hQnlum"
                  data-testid="wallet-select"
                  id="wallets"
                  name="wallets"
                >
                  <option
                    class="sc-hizQCF bqpbnS"
                    value="Transaction Fixtures"
                  >
                    Transaction Fixtures
                  </option>
                </select>
              </div>
            </div>
            <div
              class="sc-hARARD eVwYut"
            >
              <div
                class="sc-ccLTTT bPnMjq"
              >
                <div
                  class="sc-hlILIN ldlUir"
                >
                  <img
                    alt="eCash"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hcFRXF"
                  >
                    eCash
                  </div>
                  <div
                    class="sc-TuwoP gKAyt"
                    title="Balance XEC"
                  >
                    9,513.12
                     
                    XEC
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XEC Fiat"
                  >
                    $
                    0.29
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN cHZcbF"
                >
                  <img
                    alt="eCash Staking"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hjJCEK"
                  >
                    Staking
                  </div>
                  <div
                    class="sc-TuwoP eUItcw"
                    title="Balance XECX"
                  >
                    0.00
                     
                    <a
                      href="#/token/c67bf5c2b6d91cfb46a5c1772582eff80d88686887be10aa63b0945479cf4ed4"
                    >
                      XECX
                    </a>
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XECX Fiat"
                  >
                    $
                    0.00
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN jZIzbe"
               ...
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:86:33
    at Object.findByRole (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:690:29)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at listOnTimeout (node:internal/timers:545:9)
    at processTimers (node:internal/timers:519:7)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - valid bip21 param with amount, op_return_raw, and additional output with amount is parsed as expected ======
Error: Unable to find role="button" and name "Send"

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="sc-epGmkI gEcelO"
    >
      <section
        aria-atomic="false"
        aria-label="Notifications Alt+T"
        aria-live="polite"
        aria-relevant="additions text"
        class="Toastify"
      />
      <div
        class="sc-dphlzf kWTBLl"
      >
        <div
          class="sc-fCPvlr jjqlGS"
        >
          <div
            class="sc-cmIlrE erdidG"
            title="Wallet Info"
          >
            <div
              class="sc-gleUXh eqThuU"
            >
              <img
                alt="cashtab"
                src="test-file-stub"
              />
              <div
                class="sc-bNQFlB iWAswN"
                title="Price in Local Currency mobile"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
            </div>
            <div
              class="sc-doWzTn cwxplc"
            >
              <div
                class="sc-dBaXSw YgqsB"
                title="Price in Local Currency"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
              <div
                class="sc-dRCTWM fkOZJx"
              >
                <label
                  class="sc-AUpyg eCLhkT"
                >
                  <input
                    checked=""
                    class="sc-ijnzTp beYVtF"
                    type="checkbox"
                  />
                  <div
                    class="sc-fUdGnz gpPTeH"
                  >
                    <img
                      alt="toggle icon"
                      src="test-file-stub"
                    />
                  </div>
                </label>
                <button
                  aria-label="Copy ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g"
                  class="sc-dNLxif cAFGSA"
                >
                  <svg
                    title="copy-paste"
                  />
                </button>
                <select
                  class="sc-cgHJcJ hQnlum"
                  data-testid="wallet-select"
                  id="wallets"
                  name="wallets"
                >
                  <option
                    class="sc-hizQCF bqpbnS"
                    value="Transaction Fixtures"
                  >
                    Transaction Fixtures
                  </option>
                </select>
              </div>
            </div>
            <div
              class="sc-hARARD eVwYut"
            >
              <div
                class="sc-ccLTTT bPnMjq"
              >
                <div
                  class="sc-hlILIN ldlUir"
                >
                  <img
                    alt="eCash"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hcFRXF"
                  >
                    eCash
                  </div>
                  <div
                    class="sc-TuwoP gKAyt"
                    title="Balance XEC"
                  >
                    9,513.12
                     
                    XEC
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XEC Fiat"
                  >
                    $
                    0.29
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN cHZcbF"
                >
                  <img
                    alt="eCash Staking"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hjJCEK"
                  >
                    Staking
                  </div>
                  <div
                    class="sc-TuwoP eUItcw"
                    title="Balance XECX"
                  >
                    0.00
                     
                    <a
                      href="#/token/c67bf5c2b6d91cfb46a5c1772582eff80d88686887be10aa63b0945479cf4ed4"
                    >
                      XECX
                    </a>
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XECX Fiat"
                  >
                    $
                    0.00
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN jZIzbe"
                ...
    at waitForWrapper (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:163:27)
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:86:33
    at Object.findByRole (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:858:26)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - valid bip21 token send ======
TestingLibraryElementError: Unable to find an accessible element with the role "button" and name "Send"

Here are the accessible roles:

  region:

  Name "Notifications Alt+T":
  <section
    aria-atomic="false"
    aria-label="Notifications Alt+T"
    aria-live="polite"
    aria-relevant="additions text"
    class="Toastify"
  />

  --------------------------------------------------
  img:

  Name "toggle icon":
  <img
    alt="toggle icon"
    src="test-file-stub"
  />

  Name "eCash":
  <img
    alt="eCash"
    class="sc-jQMNup kNOJiJ"
    src="test-file-stub"
  />

  Name "eCash Staking":
  <img
    alt="eCash Staking"
    class="sc-jQMNup kNOJiJ"
    src="test-file-stub"
  />

  Name "Savings":
  <img
    alt="Savings"
    class="sc-jQMNup kNOJiJ"
    src="test-file-stub"
  />

  Name "icon for 3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109":
  <img
    alt="icon for 3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109"
    height="64"
    src="https://icons.etokens.cash/64/3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109.png"
    width="64"
  />

  Name "cashtab":
  <img
    alt="cashtab"
    class="sc-gJqsIT dsezft"
    src="test-file-stub"
  />

  --------------------------------------------------
  button:

  Name "Copy ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g":
  <button
    aria-label="Copy ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g"
    class="sc-dNLxif cAFGSA"
  />

  Name "Scan QR Code":
  <button
    class="sc-hwwEjo AucFL"
    title="Scan QR Code"
  />

  Name "Accept":
  <button
    class="sc-ksYbfQ sc-frDJqD bdgGFy"
  />

  Name "Reject":
  <button
    class="sc-ksYbfQ sc-hqyNC fYTjZk"
    style="margin-left: 10px;"
  />

  Name "Transactions":
  <button
    class="sc-kAdXeD cdydlx"
  />

  Name "Send Screen":
  <button
    aria-label="Send Screen"
    class="sc-kAdXeD foDtmt"
  />

  Name "Tokens":
  <button
    aria-label="Tokens"
    class="sc-kAdXeD cdydlx"
  />

  Name "Receive":
  <button
    aria-label="Receive"
    class="sc-kAdXeD cdydlx"
  />

  Name "Wallet Backup":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Wallets":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Listed NFTs":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Agora":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Contacts":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Airdrop":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Rewards":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Sign & Verify":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Settings":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  --------------------------------------------------
  combobox:

  Name "":
  <select
    class="sc-cgHJcJ hQnlum"
    data-testid="wallet-select"
    disabled=""
    id="wallets"
    name="wallets"
  />

  --------------------------------------------------
  option:

  Name "Transaction Fixtures":
  <option
    class="sc-hizQCF bqpbnS"
    value="Transaction Fixtures"
  />

  --------------------------------------------------
  link:

  Name "XECX":
  <a
    href="#/token/c67bf5c2b6d91cfb46a5c1772582eff80d88686887be10aa63b0945479cf4ed4"
  />

  Name "FIRMA":
  <a
    href="#/token/0387947fd575db4fb19a3e322f635dec37fd192b5941625b66bc4b2c3008cbf0"
  />

  --------------------------------------------------
  textbox:

  Name "":
  <input
    class="sc-kIPQKe sc-RefOD fFVIPw"
    disabled=""
    name="address"
    placeholder="Address"
    value="ecash:qr6lws9uwmjkkaau4w956lugs9nlg9hudqs26lyxkv?token_id=3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109&token_decimalized_qty=1"
  />

  Name "":
  <input
    class="sc-kIPQKe ehbGm"
    disabled=""
    name="amount"
    placeholder="Bip21-entered token amount"
    value="1"
  />

  Name "":
  <textarea
    class="sc-ibxdXY gfQPLQ"
    height="142"
    name="multiAddressInput"
    placeholder="One address & amount per line, separated by comma 
  e.g. 
  ecash:qpatql05s9jfavnu0tv6lkjjk25n6tmj9gkpyrlwu8,500 
  ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed,700"
  />

  --------------------------------------------------
  paragraph:

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  --------------------------------------------------

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="sc-kAzzGY bFOoJn"
      title="Loading..."
    >
      <div
        class="sc-cSHVUG kakYiA"
        title="Loading"
      >
        <div />
        <div />
        <div />
        <div />
      </div>
    </div>
    <div
      class="sc-epGmkI gEcelO"
    >
      <section
        aria-atomic="false"
        aria-label="Notifications Alt+T"
        aria-live="polite"
        aria-relevant="additions text"
        class="Toastify"
      />
      <div
        class="sc-dphlzf kWTBLl"
      >
        <div
          class="sc-fCPvlr jjqlGS"
        >
          <div
            class="sc-cmIlrE erdidG"
            title="Wallet Info"
          >
            <div
              class="sc-gleUXh eqThuU"
            >
              <img
                alt="cashtab"
                src="test-file-stub"
              />
              <div
                class="sc-bNQFlB iWAswN"
                title="Price in Local Currency mobile"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
            </div>
            <div
              class="sc-doWzTn cwxplc"
            >
              <div
                class="sc-dBaXSw YgqsB"
                title="Price in Local Currency"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
              <div
                class="sc-dRCTWM fkOZJx"
              >
                <label
                  class="sc-jOVcOr fqGoba"
                >
                  <input
                    checked=""
                    class="sc-hkaZBZ cztgVZ"
                    type="checkbox"
                  />
                  <div
                    class="sc-gLdKKF jfpTAQ"
                  >
                    <img
                      alt="toggle icon"
                      src="test-file-stub"
                    />
                  </div>
                </label>
                <button
                  aria-label="Copy ecash:qqa9lv3kjd8vq7952p7rq0f6lkpqvlu0cydvxtd70g"
                  class="sc-dNLxif cAFGSA"
                >
                  <svg
                    title="copy-paste"
                  />
                </button>
                <select
                  class="sc-cgHJcJ hQnlum"
                  data-testid="wallet-select"
                  disabled=""
                  id="wallets"
                  name="wallets"
                >
                  <option
                    class="sc-hizQCF bqpbnS"
                    value="Transaction Fixtures"
                  >
                    Transaction Fixtures
                  </option>
                </select>
              </div>
            </div>
            <div
              class="sc-hARARD eVwYut"
            >
              <div
                class="sc-ccLTTT bPnMjq"
              >
                <div
                  class="sc-hlILIN ldlUir"
                >
                  <img
                    alt="eCash"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hcFRXF"
                  >
                    eCash
                  </div>
                  <div
                    class="sc-TuwoP gKAyt"
                    title="Balance XEC"
                  >
                    9,513.12
                     
                    XEC
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XEC Fiat"
                  >
                    $
                    0.29
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN cHZcbF"
                >
                  <img
                    alt="eCash Staking"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hjJCEK"
                  >
                    Staking
                  </div>
                  <div
                    class="sc-TuwoP eUItcw"
                    title="Balance XECX"
                  >
                    0.00
                     
                    <a
                      href="#/token/c67bf5c2b6d91cfb46a5c1772582eff80d88686887be10aa63b0945479cf4ed4"
                    >
                      XECX
                    </a>
                  </div>
                  <div...
    at Object.getElementError (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:37:19)
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:76:38
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:52:17
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:95:19
    at Object.getByRole (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:963:23)
    at runNextTicks (node:internal/process/task_queues:60:5)
    at listOnTimeout (node:internal/timers:545:9)
    at processTimers (node:internal/timers:519:7)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 - ALP token send with firma param ======
TestingLibraryElementError: Unable to find an accessible element with the role "button" and name "Send"

Here are the accessible roles:

  region:

  Name "Notifications Alt+T":
  <section
    aria-atomic="false"
    aria-label="Notifications Alt+T"
    aria-live="polite"
    aria-relevant="additions text"
    class="Toastify"
  />

  --------------------------------------------------
  img:

  Name "toggle icon":
  <img
    alt="toggle icon"
    src="test-file-stub"
  />

  Name "eCash":
  <img
    alt="eCash"
    class="sc-jQMNup kNOJiJ"
    src="test-file-stub"
  />

  Name "eCash Staking":
  <img
    alt="eCash Staking"
    class="sc-jQMNup kNOJiJ"
    src="test-file-stub"
  />

  Name "Savings":
  <img
    alt="Savings"
    class="sc-jQMNup kNOJiJ"
    src="test-file-stub"
  />

  Name "icon for 0387947fd575db4fb19a3e322f635dec37fd192b5941625b66bc4b2c3008cbf0":
  <img
    alt="icon for 0387947fd575db4fb19a3e322f635dec37fd192b5941625b66bc4b2c3008cbf0"
    height="64"
    src="https://icons.etokens.cash/64/0387947fd575db4fb19a3e322f635dec37fd192b5941625b66bc4b2c3008cbf0.png"
    width="64"
  />

  Name "cashtab":
  <img
    alt="cashtab"
    class="sc-gJqsIT dsezft"
    src="test-file-stub"
  />

  --------------------------------------------------
  button:

  Name "Copy ecash:qqq9f9z3uhpzkxrgdjkd7dxuuey7tmpmugpmnw0kue":
  <button
    aria-label="Copy ecash:qqq9f9z3uhpzkxrgdjkd7dxuuey7tmpmugpmnw0kue"
    class="sc-dNLxif cAFGSA"
  />

  Name "Scan QR Code":
  <button
    class="sc-hwwEjo AucFL"
    title="Scan QR Code"
  />

  Name "Accept":
  <button
    class="sc-ksYbfQ sc-frDJqD bdgGFy"
  />

  Name "Reject":
  <button
    class="sc-ksYbfQ sc-hqyNC fYTjZk"
    style="margin-left: 10px;"
  />

  Name "Transactions":
  <button
    class="sc-kAdXeD cdydlx"
  />

  Name "Send Screen":
  <button
    aria-label="Send Screen"
    class="sc-kAdXeD foDtmt"
  />

  Name "Tokens":
  <button
    aria-label="Tokens"
    class="sc-kAdXeD cdydlx"
  />

  Name "Receive":
  <button
    aria-label="Receive"
    class="sc-kAdXeD cdydlx"
  />

  Name "Wallet Backup":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Wallets":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Listed NFTs":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Agora":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Contacts":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Airdrop":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Rewards":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Sign & Verify":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Settings":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  --------------------------------------------------
  combobox:

  Name "":
  <select
    class="sc-cgHJcJ hQnlum"
    data-testid="wallet-select"
    id="wallets"
    name="wallets"
  />

  --------------------------------------------------
  option:

  Name "Token Test":
  <option
    class="sc-hizQCF bqpbnS"
    value="Token Test"
  />

  --------------------------------------------------
  link:

  Name "XECX":
  <a
    href="#/token/c67bf5c2b6d91cfb46a5c1772582eff80d88686887be10aa63b0945479cf4ed4"
  />

  Name "FIRMA":
  <a
    href="#/token/0387947fd575db4fb19a3e322f635dec37fd192b5941625b66bc4b2c3008cbf0"
  />

  --------------------------------------------------
  textbox:

  Name "":
  <input
    class="sc-kIPQKe sc-RefOD fFVIPw"
    disabled=""
    name="address"
    placeholder="Address"
    value="ecash:qr6lws9uwmjkkaau4w956lugs9nlg9hudqs26lyxkv?token_id=0387947fd575db4fb19a3e322f635dec37fd192b5941625b66bc4b2c3008cbf0&token_decimalized_qty=5&firma=534f4c304ebabba2b443691c1a9180426004d5fd3419e9f9c64e5839b853cecdaacbf745"
  />

  Name "":
  <input
    class="sc-kIPQKe ehbGm"
    disabled=""
    name="amount"
    placeholder="Bip21-entered token amount"
    value="5"
  />

  Name "":
  <textarea
    class="sc-ibxdXY gfQPLQ"
    height="142"
    name="multiAddressInput"
    placeholder="One address & amount per line, separated by comma 
  e.g. 
  ecash:qpatql05s9jfavnu0tv6lkjjk25n6tmj9gkpyrlwu8,500 
  ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed,700"
  />

  --------------------------------------------------
  paragraph:

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  --------------------------------------------------

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="sc-epGmkI gEcelO"
    >
      <section
        aria-atomic="false"
        aria-label="Notifications Alt+T"
        aria-live="polite"
        aria-relevant="additions text"
        class="Toastify"
      />
      <div
        class="sc-dphlzf kWTBLl"
      >
        <div
          class="sc-fCPvlr jjqlGS"
        >
          <div
            class="sc-cmIlrE erdidG"
            title="Wallet Info"
          >
            <div
              class="sc-gleUXh eqThuU"
            >
              <img
                alt="cashtab"
                src="test-file-stub"
              />
              <div
                class="sc-bNQFlB iWAswN"
                title="Price in Local Currency mobile"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
            </div>
            <div
              class="sc-doWzTn cwxplc"
            >
              <div
                class="sc-dBaXSw YgqsB"
                title="Price in Local Currency"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
              <div
                class="sc-dRCTWM fkOZJx"
              >
                <label
                  class="sc-iWadT hoSeYh"
                >
                  <input
                    checked=""
                    class="sc-ZUflv bsTELw"
                    type="checkbox"
                  />
                  <div
                    class="sc-hPeUyl jssTso"
                  >
                    <img
                      alt="toggle icon"
                      src="test-file-stub"
                    />
                  </div>
                </label>
                <button
                  aria-label="Copy ecash:qqq9f9z3uhpzkxrgdjkd7dxuuey7tmpmugpmnw0kue"
                  class="sc-dNLxif cAFGSA"
                >
                  <svg
                    title="copy-paste"
                  />
                </button>
                <select
                  class="sc-cgHJcJ hQnlum"
                  data-testid="wallet-select"
                  id="wallets"
                  name="wallets"
                >
                  <option
                    class="sc-hizQCF bqpbnS"
                    value="Token Test"
                  >
                    Token Test
                  </option>
                </select>
              </div>
            </div>
            <div
              class="sc-hARARD eVwYut"
            >
              <div
                class="sc-ccLTTT bPnMjq"
              >
                <div
                  class="sc-hlILIN ldlUir"
                >
                  <img
                    alt="eCash"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hcFRXF"
                  >
                    eCash
                  </div>
                  <div
                    class="sc-TuwoP gKAyt"
                    title="Balance XEC"
                  >
                    9,970.81
                     
                    XEC
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XEC Fiat"
                  >
                    $
                    0.30
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN cHZcbF"
                >
                  <img
                    alt="eCash Staking"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hjJCEK"
                  >
                    Staking
                  </div>
                  <div
                    class="sc-TuwoP eUItcw"
                    title="Balance XECX"
                  >
                    1,000,000.00
                     
                    <a
                      href="#/token/c67bf5c2b6d91cfb46a5c1772582eff80d88686887be10aa63b0945479cf4ed4"
                    >
                      XECX
                    </a>
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XECX Fiat"
                  >
                    $
                    30.00
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN jZIzbe"
                >
...
    at Object.getElementError (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:37:19)
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:76:38
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:52:17
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:95:19
    at Object.getByRole (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:1065:23)
====== CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 - valid FIRMA-USDT redeem tx ======
TestingLibraryElementError: Unable to find an accessible element with the role "button" and name "Send"

Here are the accessible roles:

  region:

  Name "Notifications Alt+T":
  <section
    aria-atomic="false"
    aria-label="Notifications Alt+T"
    aria-live="polite"
    aria-relevant="additions text"
    class="Toastify"
  />

  --------------------------------------------------
  img:

  Name "toggle icon":
  <img
    alt="toggle icon"
    src="test-file-stub"
  />

  Name "eCash":
  <img
    alt="eCash"
    class="sc-jQMNup kNOJiJ"
    src="test-file-stub"
  />

  Name "eCash Staking":
  <img
    alt="eCash Staking"
    class="sc-jQMNup kNOJiJ"
    src="test-file-stub"
  />

  Name "Savings":
  <img
    alt="Savings"
    class="sc-jQMNup kNOJiJ"
    src="test-file-stub"
  />

  Name "Firma reward":
  <img
    alt="Firma reward"
    src="test-file-stub"
  />

  Name "USDT Tether logo":
  <img
    alt="USDT Tether logo"
    src="test-file-stub"
  />

  Name "cashtab":
  <img
    alt="cashtab"
    class="sc-gJqsIT dsezft"
    src="test-file-stub"
  />

  --------------------------------------------------
  button:

  Name "Copy ecash:qqq9f9z3uhpzkxrgdjkd7dxuuey7tmpmugpmnw0kue":
  <button
    aria-label="Copy ecash:qqq9f9z3uhpzkxrgdjkd7dxuuey7tmpmugpmnw0kue"
    class="sc-dNLxif cAFGSA"
  />

  Name "Scan QR Code":
  <button
    class="sc-hwwEjo AucFL"
    title="Scan QR Code"
  />

  Name "Copy SOL addr":
  <button
    aria-label="Copy SOL addr"
    class="sc-dNLxif eXaqhu"
  />

  Name "Accept":
  <button
    class="sc-ksYbfQ sc-frDJqD bdgGFy"
  />

  Name "Reject":
  <button
    class="sc-ksYbfQ sc-hqyNC fYTjZk"
    style="margin-left: 10px;"
  />

  Name "Transactions":
  <button
    class="sc-kAdXeD cdydlx"
  />

  Name "Send Screen":
  <button
    aria-label="Send Screen"
    class="sc-kAdXeD foDtmt"
  />

  Name "Tokens":
  <button
    aria-label="Tokens"
    class="sc-kAdXeD cdydlx"
  />

  Name "Receive":
  <button
    aria-label="Receive"
    class="sc-kAdXeD cdydlx"
  />

  Name "Wallet Backup":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Wallets":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Listed NFTs":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Agora":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Contacts":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Airdrop":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Rewards":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Sign & Verify":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  Name "Settings":
  <button
    class="sc-hCaUpS jGbmUe"
  />

  --------------------------------------------------
  combobox:

  Name "":
  <select
    class="sc-cgHJcJ hQnlum"
    data-testid="wallet-select"
    id="wallets"
    name="wallets"
  />

  --------------------------------------------------
  option:

  Name "Token Test":
  <option
    class="sc-hizQCF bqpbnS"
    value="Token Test"
  />

  --------------------------------------------------
  link:

  Name "XECX":
  <a
    href="#/token/c67bf5c2b6d91cfb46a5c1772582eff80d88686887be10aa63b0945479cf4ed4"
  />

  Name "FIRMA":
  <a
    href="#/token/0387947fd575db4fb19a3e322f635dec37fd192b5941625b66bc4b2c3008cbf0"
  />

  --------------------------------------------------
  textbox:

  Name "":
  <input
    class="sc-kIPQKe sc-RefOD fFVIPw"
    disabled=""
    name="address"
    placeholder="Address"
    value="ecash:qr8hdk8rxjc5nj6f450eth3nnslxa8k4gysrtyfxc5?token_id=0387947fd575db4fb19a3e322f635dec37fd192b5941625b66bc4b2c3008cbf0&token_decimalized_qty=5&firma=534f4c304ebabba2b443691c1a9180426004d5fd3419e9f9c64e5839b853cecdaacbf745"
  />

  Name "":
  <input
    class="sc-kIPQKe ehbGm"
    disabled=""
    name="amount"
    placeholder="Bip21-entered token amount"
    value="5"
  />

  Name "":
  <textarea
    class="sc-ibxdXY gfQPLQ"
    height="142"
    name="multiAddressInput"
    placeholder="One address & amount per line, separated by comma 
  e.g. 
  ecash:qpatql05s9jfavnu0tv6lkjjk25n6tmj9gkpyrlwu8,500 
  ecash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed,700"
  />

  --------------------------------------------------
  paragraph:

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  Name "":
  <p />

  --------------------------------------------------

Ignored nodes: comments, script, style
<body>
  <div>
    <div
      class="sc-epGmkI gEcelO"
    >
      <section
        aria-atomic="false"
        aria-label="Notifications Alt+T"
        aria-live="polite"
        aria-relevant="additions text"
        class="Toastify"
      />
      <div
        class="sc-dphlzf kWTBLl"
      >
        <div
          class="sc-fCPvlr jjqlGS"
        >
          <div
            class="sc-cmIlrE erdidG"
            title="Wallet Info"
          >
            <div
              class="sc-gleUXh eqThuU"
            >
              <img
                alt="cashtab"
                src="test-file-stub"
              />
              <div
                class="sc-bNQFlB iWAswN"
                title="Price in Local Currency mobile"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
            </div>
            <div
              class="sc-doWzTn cwxplc"
            >
              <div
                class="sc-dBaXSw YgqsB"
                title="Price in Local Currency"
              >
                1 
                XEC
                 = 
                0.00003000
                 
                USD
              </div>
              <div
                class="sc-dRCTWM fkOZJx"
              >
                <label
                  class="sc-ekHBYt JWgbH"
                >
                  <input
                    checked=""
                    class="sc-eTyWNx hddDQA"
                    type="checkbox"
                  />
                  <div
                    class="sc-ccXozh gwLiBn"
                  >
                    <img
                      alt="toggle icon"
                      src="test-file-stub"
                    />
                  </div>
                </label>
                <button
                  aria-label="Copy ecash:qqq9f9z3uhpzkxrgdjkd7dxuuey7tmpmugpmnw0kue"
                  class="sc-dNLxif cAFGSA"
                >
                  <svg
                    title="copy-paste"
                  />
                </button>
                <select
                  class="sc-cgHJcJ hQnlum"
                  data-testid="wallet-select"
                  id="wallets"
                  name="wallets"
                >
                  <option
                    class="sc-hizQCF bqpbnS"
                    value="Token Test"
                  >
                    Token Test
                  </option>
                </select>
              </div>
            </div>
            <div
              class="sc-hARARD eVwYut"
            >
              <div
                class="sc-ccLTTT bPnMjq"
              >
                <div
                  class="sc-hlILIN ldlUir"
                >
                  <img
                    alt="eCash"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hcFRXF"
                  >
                    eCash
                  </div>
                  <div
                    class="sc-TuwoP gKAyt"
                    title="Balance XEC"
                  >
                    9,970.81
                     
                    XEC
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XEC Fiat"
                  >
                    $
                    0.30
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN cHZcbF"
                >
                  <img
                    alt="eCash Staking"
                    class="sc-jQMNup kNOJiJ"
                    src="test-file-stub"
                  />
                  <div
                    class="sc-bJHhxl hjJCEK"
                  >
                    Staking
                  </div>
                  <div
                    class="sc-TuwoP eUItcw"
                    title="Balance XECX"
                  >
                    1,000,000.00
                     
                    <a
                      href="#/token/c67bf5c2b6d91cfb46a5c1772582eff80d88686887be10aa63b0945479cf4ed4"
                    >
                      XECX
                    </a>
                  </div>
                  <div
                    class="sc-fQkuQJ idpvOV"
                    title="Balance XECX Fiat"
                  >
                    $
                    30.00
                     
                    USD
                  </div>
                </div>
                <div
                  class="sc-hlILIN jZIzbe"
                >...
    at Object.getElementError (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:37:19)
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:76:38
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:52:17
    at /work/cashtab/node_modules/@testing-library/dom/dist/query-helpers.js:95:19
    at Object.getByRole (/work/cashtab/src/components/Send/__tests__/SendByUrlParams.test.js:1170:23)

Each failure log is accessible here:
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid.
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. Invalid bip21 string is ignored.
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address field is populated + disabled while value field is empty + enabled if legacy url params have address defined and value present as undefined
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params. Address field is populated + disabled while value field is empty + enabled if legacy url params have address defined and no value key present
CashTab Unit Tests: <SendXec /> rendered with params in URL Legacy params are not parsed as bip21 even if the bip21 param appears in the string
CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - valid bip21 param with amount and op_return_raw is parsed as expected
CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - an invalid bip21 param shows validation errors but cannot be changed
CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - valid bip21 param with amount, op_return_raw, and additional output with amount is parsed as expected
CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 param - valid bip21 token send
CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 - ALP token send with firma param
CashTab Unit Tests: <SendXec /> rendered with params in URL bip21 - valid FIRMA-USDT redeem tx

show the accept/reject buttons even for invalid params, update tests for correct button roles

Improve logging, remove debug logging

bytesofman published this revision for review.Jul 9 2025, 23:14

version bump and changelog fro cashtab-connect

Fabien added inline comments.
cashtab/extension/src/service_worker.ts
148 ↗(On Diff #54780)

style nit

cashtab/src/components/Send/SendXec.tsx
908 ↗(On Diff #54780)

Could this hang forever (user never take any action) ? Since I think so could it be use to exploit the website somehow ?

bytesofman added inline comments.
cashtab/src/components/Send/SendXec.tsx
908 ↗(On Diff #54780)

We have a couple things mitigating this

  1. There is a built-in timeout for extension transactions. It defaults to 30s but can be adjusted by an app developer using cashtab-connect, i.e. the dev making the webapp that will be opening the Cashtab extension. Right now, if the user takes no action for 30s, the window closes and cashtab-connect returns a timeout notice.
  1. This particular part of the code is reached only after the user approves a tx and it has successfully broadcast (returning the txid to Cashtab). So, we are saying "if we know this tx came from the extension, send a msg back to the extension saying the tx was a success"
bytesofman marked an inline comment as done.

rebase, consistent {} style for if block

This revision is now accepted and ready to land.Jul 11 2025, 11:30