@hsuite/native-connect-angular 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/README.md +48 -0
  2. package/USAGE_EXAMPLES.md +476 -0
  3. package/assets/wallets/extension.svg +7 -0
  4. package/assets/wallets/hashpack.svg +6 -0
  5. package/assets/wallets/hsuite.svg +11 -0
  6. package/assets/wallets/kabila.svg +11 -0
  7. package/assets/wallets/walletconnect.svg +13 -0
  8. package/coverage/base.css +224 -0
  9. package/coverage/block-navigation.js +87 -0
  10. package/coverage/coverage-summary.json +50 -0
  11. package/coverage/favicon.png +0 -0
  12. package/coverage/index.html +476 -0
  13. package/coverage/lcov-report/base.css +224 -0
  14. package/coverage/lcov-report/block-navigation.js +87 -0
  15. package/coverage/lcov-report/favicon.png +0 -0
  16. package/coverage/lcov-report/index.html +476 -0
  17. package/coverage/lcov-report/lib/components/account-selector/account-actions/account-actions.component.ts.html +868 -0
  18. package/coverage/lcov-report/lib/components/account-selector/account-actions/index.html +116 -0
  19. package/coverage/lcov-report/lib/components/account-selector/account-filter/account-filter.component.ts.html +1288 -0
  20. package/coverage/lcov-report/lib/components/account-selector/account-filter/index.html +116 -0
  21. package/coverage/lcov-report/lib/components/account-selector/account-formatting.service.ts.html +685 -0
  22. package/coverage/lcov-report/lib/components/account-selector/account-grouping.service.ts.html +766 -0
  23. package/coverage/lcov-report/lib/components/account-selector/account-list/account-list.component.ts.html +1495 -0
  24. package/coverage/lcov-report/lib/components/account-selector/account-list/index.html +116 -0
  25. package/coverage/lcov-report/lib/components/account-selector/account-selector.component.ts.html +1495 -0
  26. package/coverage/lcov-report/lib/components/account-selector/account-selector.service.ts.html +1588 -0
  27. package/coverage/lcov-report/lib/components/account-selector/index.html +161 -0
  28. package/coverage/lcov-report/lib/components/wallet-account-display/index.html +116 -0
  29. package/coverage/lcov-report/lib/components/wallet-account-display/wallet-account-display.component.ts.html +505 -0
  30. package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +116 -0
  31. package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +805 -0
  32. package/coverage/lcov-report/lib/components/wallet-connect-prompt/index.html +116 -0
  33. package/coverage/lcov-report/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +409 -0
  34. package/coverage/lcov-report/lib/components/wallet-connected-guard/index.html +116 -0
  35. package/coverage/lcov-report/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +304 -0
  36. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +436 -0
  37. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +116 -0
  38. package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +116 -0
  39. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +116 -0
  40. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +2287 -0
  41. package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +2275 -0
  42. package/coverage/lcov-report/lib/components/wallet-session-display/index.html +116 -0
  43. package/coverage/lcov-report/lib/components/wallet-session-display/wallet-session-display.component.ts.html +676 -0
  44. package/coverage/lcov-report/lib/components/wallet-transaction-status/index.html +116 -0
  45. package/coverage/lcov-report/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +703 -0
  46. package/coverage/lcov-report/lib/directives/index.html +146 -0
  47. package/coverage/lcov-report/lib/directives/wallet-connected.directive.ts.html +670 -0
  48. package/coverage/lcov-report/lib/directives/wallet-context.directive.ts.html +547 -0
  49. package/coverage/lcov-report/lib/directives/wallet-events.directive.ts.html +781 -0
  50. package/coverage/lcov-report/lib/hsuite-wallet.module.ts.html +715 -0
  51. package/coverage/lcov-report/lib/index.html +116 -0
  52. package/coverage/lcov-report/lib/models/connection-config.model.ts.html +280 -0
  53. package/coverage/lcov-report/lib/models/index.html +131 -0
  54. package/coverage/lcov-report/lib/models/provider-types.ts.html +577 -0
  55. package/coverage/lcov-report/lib/providers/base-wallet-provider.ts.html +1138 -0
  56. package/coverage/lcov-report/lib/providers/hsuite-native/channel-client.service.ts.html +2671 -0
  57. package/coverage/lcov-report/lib/providers/hsuite-native/index.html +116 -0
  58. package/coverage/lcov-report/lib/providers/hsuite-native-provider.ts.html +2347 -0
  59. package/coverage/lcov-report/lib/providers/index.html +146 -0
  60. package/coverage/lcov-report/lib/providers/p2p-native/index.html +131 -0
  61. package/coverage/lcov-report/lib/providers/p2p-native/p2p-native.provider.ts.html +2254 -0
  62. package/coverage/lcov-report/lib/providers/p2p-native/p2p-session-manager.ts.html +2170 -0
  63. package/coverage/lcov-report/lib/providers/wallet-error-handler.ts.html +1132 -0
  64. package/coverage/lcov-report/lib/providers/walletconnect/core/index.html +176 -0
  65. package/coverage/lcov-report/lib/providers/walletconnect/core/session-health.ts.html +673 -0
  66. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +1177 -0
  67. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-provider.ts.html +2563 -0
  68. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +904 -0
  69. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +982 -0
  70. package/coverage/lcov-report/lib/providers/walletconnect/signers/hedera-signer.ts.html +1915 -0
  71. package/coverage/lcov-report/lib/providers/walletconnect/signers/index.html +146 -0
  72. package/coverage/lcov-report/lib/providers/walletconnect/signers/signer-factory.ts.html +445 -0
  73. package/coverage/lcov-report/lib/providers/walletconnect/signers/xrpl-signer.ts.html +1519 -0
  74. package/coverage/lcov-report/lib/services/index.html +191 -0
  75. package/coverage/lcov-report/lib/services/logger.service.ts.html +463 -0
  76. package/coverage/lcov-report/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1840 -0
  77. package/coverage/lcov-report/lib/services/transaction-builders/hedera-amount-utils.ts.html +337 -0
  78. package/coverage/lcov-report/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +3940 -0
  79. package/coverage/lcov-report/lib/services/transaction-builders/index.html +161 -0
  80. package/coverage/lcov-report/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +2581 -0
  81. package/coverage/lcov-report/lib/services/transaction.service.ts.html +1123 -0
  82. package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +2641 -0
  83. package/coverage/lcov-report/lib/services/wallet-context.service.ts.html +637 -0
  84. package/coverage/lcov-report/lib/services/wallet-event-bus.service.ts.html +643 -0
  85. package/coverage/lcov-report/lib/services/wallet-providers.service.ts.html +496 -0
  86. package/coverage/lcov-report/lib/transports/chrome-extension-transport.ts.html +823 -0
  87. package/coverage/lcov-report/lib/transports/index.html +116 -0
  88. package/coverage/lcov-report/lib/utils/index.html +116 -0
  89. package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +319 -0
  90. package/coverage/lcov-report/prettify.css +1 -0
  91. package/coverage/lcov-report/prettify.js +2 -0
  92. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  93. package/coverage/lcov-report/sorter.js +210 -0
  94. package/coverage/lcov.info +19252 -0
  95. package/coverage/lib/components/account-selector/account-actions/account-actions.component.ts.html +868 -0
  96. package/coverage/lib/components/account-selector/account-actions/index.html +116 -0
  97. package/coverage/lib/components/account-selector/account-filter/account-filter.component.ts.html +1288 -0
  98. package/coverage/lib/components/account-selector/account-filter/index.html +116 -0
  99. package/coverage/lib/components/account-selector/account-formatting.service.ts.html +685 -0
  100. package/coverage/lib/components/account-selector/account-grouping.service.ts.html +766 -0
  101. package/coverage/lib/components/account-selector/account-list/account-list.component.ts.html +1495 -0
  102. package/coverage/lib/components/account-selector/account-list/index.html +116 -0
  103. package/coverage/lib/components/account-selector/account-selector.component.ts.html +1495 -0
  104. package/coverage/lib/components/account-selector/account-selector.service.ts.html +1588 -0
  105. package/coverage/lib/components/account-selector/index.html +161 -0
  106. package/coverage/lib/components/wallet-account-display/index.html +116 -0
  107. package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +505 -0
  108. package/coverage/lib/components/wallet-connect-button/index.html +116 -0
  109. package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +805 -0
  110. package/coverage/lib/components/wallet-connect-prompt/index.html +116 -0
  111. package/coverage/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +409 -0
  112. package/coverage/lib/components/wallet-connected-guard/index.html +116 -0
  113. package/coverage/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +304 -0
  114. package/coverage/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +436 -0
  115. package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +116 -0
  116. package/coverage/lib/components/wallet-connection-modal/index.html +116 -0
  117. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +116 -0
  118. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +2287 -0
  119. package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +2275 -0
  120. package/coverage/lib/components/wallet-session-display/index.html +116 -0
  121. package/coverage/lib/components/wallet-session-display/wallet-session-display.component.ts.html +676 -0
  122. package/coverage/lib/components/wallet-transaction-status/index.html +116 -0
  123. package/coverage/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +703 -0
  124. package/coverage/lib/directives/index.html +146 -0
  125. package/coverage/lib/directives/wallet-connected.directive.ts.html +670 -0
  126. package/coverage/lib/directives/wallet-context.directive.ts.html +547 -0
  127. package/coverage/lib/directives/wallet-events.directive.ts.html +781 -0
  128. package/coverage/lib/hsuite-wallet.module.ts.html +715 -0
  129. package/coverage/lib/index.html +116 -0
  130. package/coverage/lib/models/connection-config.model.ts.html +280 -0
  131. package/coverage/lib/models/index.html +131 -0
  132. package/coverage/lib/models/provider-types.ts.html +577 -0
  133. package/coverage/lib/providers/base-wallet-provider.ts.html +1138 -0
  134. package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +2671 -0
  135. package/coverage/lib/providers/hsuite-native/index.html +116 -0
  136. package/coverage/lib/providers/hsuite-native-provider.ts.html +2347 -0
  137. package/coverage/lib/providers/index.html +146 -0
  138. package/coverage/lib/providers/p2p-native/index.html +131 -0
  139. package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +2254 -0
  140. package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +2170 -0
  141. package/coverage/lib/providers/wallet-error-handler.ts.html +1132 -0
  142. package/coverage/lib/providers/walletconnect/core/index.html +176 -0
  143. package/coverage/lib/providers/walletconnect/core/session-health.ts.html +673 -0
  144. package/coverage/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +1177 -0
  145. package/coverage/lib/providers/walletconnect/core/walletconnect-provider.ts.html +2563 -0
  146. package/coverage/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +904 -0
  147. package/coverage/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +982 -0
  148. package/coverage/lib/providers/walletconnect/signers/hedera-signer.ts.html +1915 -0
  149. package/coverage/lib/providers/walletconnect/signers/index.html +146 -0
  150. package/coverage/lib/providers/walletconnect/signers/signer-factory.ts.html +445 -0
  151. package/coverage/lib/providers/walletconnect/signers/xrpl-signer.ts.html +1519 -0
  152. package/coverage/lib/services/index.html +191 -0
  153. package/coverage/lib/services/logger.service.ts.html +463 -0
  154. package/coverage/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1840 -0
  155. package/coverage/lib/services/transaction-builders/hedera-amount-utils.ts.html +337 -0
  156. package/coverage/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +3940 -0
  157. package/coverage/lib/services/transaction-builders/index.html +161 -0
  158. package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +2581 -0
  159. package/coverage/lib/services/transaction.service.ts.html +1123 -0
  160. package/coverage/lib/services/unified-wallet.service.ts.html +2641 -0
  161. package/coverage/lib/services/wallet-context.service.ts.html +637 -0
  162. package/coverage/lib/services/wallet-event-bus.service.ts.html +643 -0
  163. package/coverage/lib/services/wallet-providers.service.ts.html +496 -0
  164. package/coverage/lib/transports/chrome-extension-transport.ts.html +823 -0
  165. package/coverage/lib/transports/index.html +116 -0
  166. package/coverage/lib/utils/index.html +116 -0
  167. package/coverage/lib/utils/ledger-icons.util.ts.html +319 -0
  168. package/coverage/prettify.css +1 -0
  169. package/coverage/prettify.js +2 -0
  170. package/coverage/sort-arrow-sprite.png +0 -0
  171. package/coverage/sorter.js +210 -0
  172. package/dist/README.md +48 -0
  173. package/dist/fesm2022/hsuite-native-connect-angular.mjs +14592 -0
  174. package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -0
  175. package/dist/index.d.ts +6949 -0
  176. package/examples/minimal-connect.ts +178 -0
  177. package/examples/multi-protocol.ts +495 -0
  178. package/examples/transaction-signing.ts +361 -0
  179. package/jest.config.json +45 -0
  180. package/karma.conf.js +42 -0
  181. package/ng-package.json +20 -0
  182. package/package.json +60 -0
  183. package/src/index.ts +203 -0
  184. package/src/lib/components/account-selector/account-actions/account-actions.component.ts +261 -0
  185. package/src/lib/components/account-selector/account-filter/account-filter.component.ts +401 -0
  186. package/src/lib/components/account-selector/account-formatting.service.ts +200 -0
  187. package/src/lib/components/account-selector/account-grouping.service.ts +227 -0
  188. package/src/lib/components/account-selector/account-list/account-list.component.ts +470 -0
  189. package/src/lib/components/account-selector/account-selector.component.html +135 -0
  190. package/src/lib/components/account-selector/account-selector.component.scss +2039 -0
  191. package/src/lib/components/account-selector/account-selector.component.ts +470 -0
  192. package/src/lib/components/account-selector/account-selector.service.ts +501 -0
  193. package/src/lib/components/wallet-account-display/wallet-account-display.component.html +34 -0
  194. package/src/lib/components/wallet-account-display/wallet-account-display.component.scss +99 -0
  195. package/src/lib/components/wallet-account-display/wallet-account-display.component.ts +140 -0
  196. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.html +14 -0
  197. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.scss +272 -0
  198. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.ts +240 -0
  199. package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.html +24 -0
  200. package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.scss +50 -0
  201. package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts +108 -0
  202. package/src/lib/components/wallet-connected-guard/wallet-connected-guard.component.html +24 -0
  203. package/src/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts +73 -0
  204. package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.html +56 -0
  205. package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.scss +218 -0
  206. package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts +117 -0
  207. package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.html +94 -0
  208. package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.scss +272 -0
  209. package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts +734 -0
  210. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.html +197 -0
  211. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.scss +678 -0
  212. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +730 -0
  213. package/src/lib/components/wallet-session-display/wallet-session-display.component.html +110 -0
  214. package/src/lib/components/wallet-session-display/wallet-session-display.component.scss +179 -0
  215. package/src/lib/components/wallet-session-display/wallet-session-display.component.ts +197 -0
  216. package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.html +65 -0
  217. package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.scss +254 -0
  218. package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts +206 -0
  219. package/src/lib/directives/wallet-connected.directive.ts +195 -0
  220. package/src/lib/directives/wallet-context.directive.ts +154 -0
  221. package/src/lib/directives/wallet-events.directive.ts +232 -0
  222. package/src/lib/hsuite-wallet.module.ts +210 -0
  223. package/src/lib/models/connection-config.model.ts +65 -0
  224. package/src/lib/models/provider-types.ts +164 -0
  225. package/src/lib/models/unified-account.model.ts +76 -0
  226. package/src/lib/models/wallet-context.model.ts +121 -0
  227. package/src/lib/models/wallet-events.model.ts +158 -0
  228. package/src/lib/providers/base-wallet-provider.ts +351 -0
  229. package/src/lib/providers/hsuite-native/channel-client.service.spec.ts +73 -0
  230. package/src/lib/providers/hsuite-native/channel-client.service.ts +862 -0
  231. package/src/lib/providers/hsuite-native/index.ts +8 -0
  232. package/src/lib/providers/hsuite-native-provider.ts +754 -0
  233. package/src/lib/providers/mobile-native/mobile-native.provider.spec.ts +19 -0
  234. package/src/lib/providers/p2p-native/index.ts +30 -0
  235. package/src/lib/providers/p2p-native/p2p-native.provider.spec.ts +523 -0
  236. package/src/lib/providers/p2p-native/p2p-native.provider.ts +723 -0
  237. package/src/lib/providers/p2p-native/p2p-session-manager.ts +695 -0
  238. package/src/lib/providers/wallet-error-handler.ts +349 -0
  239. package/src/lib/providers/walletconnect/core/base-signer.interface.ts +122 -0
  240. package/src/lib/providers/walletconnect/core/session-health.ts +196 -0
  241. package/src/lib/providers/walletconnect/core/walletconnect-client-manager.ts +364 -0
  242. package/src/lib/providers/walletconnect/core/walletconnect-provider.integration.spec.ts +348 -0
  243. package/src/lib/providers/walletconnect/core/walletconnect-provider.ts +826 -0
  244. package/src/lib/providers/walletconnect/core/walletconnect-session-store.ts +273 -0
  245. package/src/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts +299 -0
  246. package/src/lib/providers/walletconnect/core/walletconnect-types.ts +48 -0
  247. package/src/lib/providers/walletconnect/index.ts +33 -0
  248. package/src/lib/providers/walletconnect/signers/hedera-signer.spec.ts +367 -0
  249. package/src/lib/providers/walletconnect/signers/hedera-signer.ts +610 -0
  250. package/src/lib/providers/walletconnect/signers/signer-factory.spec.ts +62 -0
  251. package/src/lib/providers/walletconnect/signers/signer-factory.ts +120 -0
  252. package/src/lib/providers/walletconnect/signers/xrpl-signer.spec.ts +296 -0
  253. package/src/lib/providers/walletconnect/signers/xrpl-signer.ts +478 -0
  254. package/src/lib/services/logger.service.ts +126 -0
  255. package/src/lib/services/transaction-builders/base-transaction-builder.service.ts +585 -0
  256. package/src/lib/services/transaction-builders/hedera-amount-utils.ts +84 -0
  257. package/src/lib/services/transaction-builders/hedera-transaction-builder.service.spec.ts +741 -0
  258. package/src/lib/services/transaction-builders/hedera-transaction-builder.service.ts +1285 -0
  259. package/src/lib/services/transaction-builders/index.ts +54 -0
  260. package/src/lib/services/transaction-builders/xrpl-transaction-builder.service.spec.ts +937 -0
  261. package/src/lib/services/transaction-builders/xrpl-transaction-builder.service.ts +832 -0
  262. package/src/lib/services/transaction.service.ts +346 -0
  263. package/src/lib/services/unified-wallet.service.spec.ts +1382 -0
  264. package/src/lib/services/unified-wallet.service.ts +852 -0
  265. package/src/lib/services/wallet-context.service.ts +184 -0
  266. package/src/lib/services/wallet-event-bus.service.ts +186 -0
  267. package/src/lib/services/wallet-providers.service.ts +137 -0
  268. package/src/lib/transports/chrome-extension-transport.ts +246 -0
  269. package/src/lib/utils/index.ts +14 -0
  270. package/src/lib/utils/ledger-icons.util.ts +78 -0
  271. package/test/test-setup.ts +21 -0
  272. package/test-setup.ts +63 -0
  273. package/tsconfig.build.json +11 -0
  274. package/tsconfig.json +29 -0
  275. package/tsconfig.spec.json +15 -0
  276. package/vitest.config.ts +48 -0
@@ -0,0 +1,1519 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for lib/providers/walletconnect/signers/xrpl-signer.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../../../prettify.css" />
9
+ <link rel="stylesheet" href="../../../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">lib/providers/walletconnect/signers</a> xrpl-signer.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">65.89% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>315/478</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">60.52% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>23/38</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">75% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>6/8</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">65.89% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>315/478</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line medium'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
545
+ <span class="cline-any cline-yes">1x</span>
546
+ <span class="cline-any cline-yes">1x</span>
547
+ <span class="cline-any cline-yes">1x</span>
548
+ <span class="cline-any cline-yes">1x</span>
549
+ <span class="cline-any cline-yes">1x</span>
550
+ <span class="cline-any cline-yes">1x</span>
551
+ <span class="cline-any cline-yes">1x</span>
552
+ <span class="cline-any cline-yes">1x</span>
553
+ <span class="cline-any cline-yes">1x</span>
554
+ <span class="cline-any cline-yes">1x</span>
555
+ <span class="cline-any cline-yes">1x</span>
556
+ <span class="cline-any cline-yes">1x</span>
557
+ <span class="cline-any cline-yes">1x</span>
558
+ <span class="cline-any cline-yes">1x</span>
559
+ <span class="cline-any cline-yes">1x</span>
560
+ <span class="cline-any cline-yes">1x</span>
561
+ <span class="cline-any cline-yes">1x</span>
562
+ <span class="cline-any cline-yes">1x</span>
563
+ <span class="cline-any cline-yes">1x</span>
564
+ <span class="cline-any cline-yes">1x</span>
565
+ <span class="cline-any cline-yes">1x</span>
566
+ <span class="cline-any cline-yes">1x</span>
567
+ <span class="cline-any cline-yes">1x</span>
568
+ <span class="cline-any cline-yes">1x</span>
569
+ <span class="cline-any cline-yes">1x</span>
570
+ <span class="cline-any cline-yes">1x</span>
571
+ <span class="cline-any cline-yes">1x</span>
572
+ <span class="cline-any cline-yes">1x</span>
573
+ <span class="cline-any cline-yes">1x</span>
574
+ <span class="cline-any cline-yes">1x</span>
575
+ <span class="cline-any cline-yes">1x</span>
576
+ <span class="cline-any cline-yes">1x</span>
577
+ <span class="cline-any cline-yes">1x</span>
578
+ <span class="cline-any cline-yes">1x</span>
579
+ <span class="cline-any cline-yes">1x</span>
580
+ <span class="cline-any cline-yes">1x</span>
581
+ <span class="cline-any cline-yes">1x</span>
582
+ <span class="cline-any cline-yes">1x</span>
583
+ <span class="cline-any cline-yes">1x</span>
584
+ <span class="cline-any cline-yes">1x</span>
585
+ <span class="cline-any cline-yes">2x</span>
586
+ <span class="cline-any cline-yes">2x</span>
587
+ <span class="cline-any cline-yes">2x</span>
588
+ <span class="cline-any cline-yes">2x</span>
589
+ <span class="cline-any cline-yes">2x</span>
590
+ <span class="cline-any cline-yes">2x</span>
591
+ <span class="cline-any cline-yes">2x</span>
592
+ <span class="cline-any cline-yes">2x</span>
593
+ <span class="cline-any cline-yes">2x</span>
594
+ <span class="cline-any cline-no">&nbsp;</span>
595
+ <span class="cline-any cline-yes">2x</span>
596
+ <span class="cline-any cline-yes">2x</span>
597
+ <span class="cline-any cline-yes">2x</span>
598
+ <span class="cline-any cline-yes">2x</span>
599
+ <span class="cline-any cline-yes">2x</span>
600
+ <span class="cline-any cline-yes">2x</span>
601
+ <span class="cline-any cline-no">&nbsp;</span>
602
+ <span class="cline-any cline-yes">2x</span>
603
+ <span class="cline-any cline-no">&nbsp;</span>
604
+ <span class="cline-any cline-no">&nbsp;</span>
605
+ <span class="cline-any cline-no">&nbsp;</span>
606
+ <span class="cline-any cline-no">&nbsp;</span>
607
+ <span class="cline-any cline-no">&nbsp;</span>
608
+ <span class="cline-any cline-no">&nbsp;</span>
609
+ <span class="cline-any cline-no">&nbsp;</span>
610
+ <span class="cline-any cline-no">&nbsp;</span>
611
+ <span class="cline-any cline-no">&nbsp;</span>
612
+ <span class="cline-any cline-no">&nbsp;</span>
613
+ <span class="cline-any cline-no">&nbsp;</span>
614
+ <span class="cline-any cline-no">&nbsp;</span>
615
+ <span class="cline-any cline-no">&nbsp;</span>
616
+ <span class="cline-any cline-no">&nbsp;</span>
617
+ <span class="cline-any cline-no">&nbsp;</span>
618
+ <span class="cline-any cline-no">&nbsp;</span>
619
+ <span class="cline-any cline-no">&nbsp;</span>
620
+ <span class="cline-any cline-no">&nbsp;</span>
621
+ <span class="cline-any cline-no">&nbsp;</span>
622
+ <span class="cline-any cline-no">&nbsp;</span>
623
+ <span class="cline-any cline-no">&nbsp;</span>
624
+ <span class="cline-any cline-no">&nbsp;</span>
625
+ <span class="cline-any cline-no">&nbsp;</span>
626
+ <span class="cline-any cline-no">&nbsp;</span>
627
+ <span class="cline-any cline-no">&nbsp;</span>
628
+ <span class="cline-any cline-no">&nbsp;</span>
629
+ <span class="cline-any cline-no">&nbsp;</span>
630
+ <span class="cline-any cline-no">&nbsp;</span>
631
+ <span class="cline-any cline-no">&nbsp;</span>
632
+ <span class="cline-any cline-no">&nbsp;</span>
633
+ <span class="cline-any cline-no">&nbsp;</span>
634
+ <span class="cline-any cline-no">&nbsp;</span>
635
+ <span class="cline-any cline-no">&nbsp;</span>
636
+ <span class="cline-any cline-no">&nbsp;</span>
637
+ <span class="cline-any cline-no">&nbsp;</span>
638
+ <span class="cline-any cline-no">&nbsp;</span>
639
+ <span class="cline-any cline-no">&nbsp;</span>
640
+ <span class="cline-any cline-no">&nbsp;</span>
641
+ <span class="cline-any cline-no">&nbsp;</span>
642
+ <span class="cline-any cline-no">&nbsp;</span>
643
+ <span class="cline-any cline-no">&nbsp;</span>
644
+ <span class="cline-any cline-no">&nbsp;</span>
645
+ <span class="cline-any cline-no">&nbsp;</span>
646
+ <span class="cline-any cline-no">&nbsp;</span>
647
+ <span class="cline-any cline-no">&nbsp;</span>
648
+ <span class="cline-any cline-no">&nbsp;</span>
649
+ <span class="cline-any cline-no">&nbsp;</span>
650
+ <span class="cline-any cline-no">&nbsp;</span>
651
+ <span class="cline-any cline-no">&nbsp;</span>
652
+ <span class="cline-any cline-no">&nbsp;</span>
653
+ <span class="cline-any cline-no">&nbsp;</span>
654
+ <span class="cline-any cline-no">&nbsp;</span>
655
+ <span class="cline-any cline-no">&nbsp;</span>
656
+ <span class="cline-any cline-no">&nbsp;</span>
657
+ <span class="cline-any cline-no">&nbsp;</span>
658
+ <span class="cline-any cline-no">&nbsp;</span>
659
+ <span class="cline-any cline-no">&nbsp;</span>
660
+ <span class="cline-any cline-no">&nbsp;</span>
661
+ <span class="cline-any cline-no">&nbsp;</span>
662
+ <span class="cline-any cline-no">&nbsp;</span>
663
+ <span class="cline-any cline-no">&nbsp;</span>
664
+ <span class="cline-any cline-no">&nbsp;</span>
665
+ <span class="cline-any cline-no">&nbsp;</span>
666
+ <span class="cline-any cline-no">&nbsp;</span>
667
+ <span class="cline-any cline-no">&nbsp;</span>
668
+ <span class="cline-any cline-no">&nbsp;</span>
669
+ <span class="cline-any cline-no">&nbsp;</span>
670
+ <span class="cline-any cline-no">&nbsp;</span>
671
+ <span class="cline-any cline-no">&nbsp;</span>
672
+ <span class="cline-any cline-no">&nbsp;</span>
673
+ <span class="cline-any cline-no">&nbsp;</span>
674
+ <span class="cline-any cline-no">&nbsp;</span>
675
+ <span class="cline-any cline-no">&nbsp;</span>
676
+ <span class="cline-any cline-no">&nbsp;</span>
677
+ <span class="cline-any cline-no">&nbsp;</span>
678
+ <span class="cline-any cline-no">&nbsp;</span>
679
+ <span class="cline-any cline-no">&nbsp;</span>
680
+ <span class="cline-any cline-no">&nbsp;</span>
681
+ <span class="cline-any cline-no">&nbsp;</span>
682
+ <span class="cline-any cline-no">&nbsp;</span>
683
+ <span class="cline-any cline-no">&nbsp;</span>
684
+ <span class="cline-any cline-no">&nbsp;</span>
685
+ <span class="cline-any cline-no">&nbsp;</span>
686
+ <span class="cline-any cline-no">&nbsp;</span>
687
+ <span class="cline-any cline-no">&nbsp;</span>
688
+ <span class="cline-any cline-no">&nbsp;</span>
689
+ <span class="cline-any cline-no">&nbsp;</span>
690
+ <span class="cline-any cline-no">&nbsp;</span>
691
+ <span class="cline-any cline-no">&nbsp;</span>
692
+ <span class="cline-any cline-no">&nbsp;</span>
693
+ <span class="cline-any cline-no">&nbsp;</span>
694
+ <span class="cline-any cline-no">&nbsp;</span>
695
+ <span class="cline-any cline-no">&nbsp;</span>
696
+ <span class="cline-any cline-no">&nbsp;</span>
697
+ <span class="cline-any cline-no">&nbsp;</span>
698
+ <span class="cline-any cline-yes">1x</span>
699
+ <span class="cline-any cline-yes">1x</span>
700
+ <span class="cline-any cline-yes">1x</span>
701
+ <span class="cline-any cline-yes">1x</span>
702
+ <span class="cline-any cline-yes">1x</span>
703
+ <span class="cline-any cline-yes">1x</span>
704
+ <span class="cline-any cline-yes">1x</span>
705
+ <span class="cline-any cline-yes">1x</span>
706
+ <span class="cline-any cline-yes">1x</span>
707
+ <span class="cline-any cline-yes">1x</span>
708
+ <span class="cline-any cline-yes">1x</span>
709
+ <span class="cline-any cline-yes">1x</span>
710
+ <span class="cline-any cline-yes">1x</span>
711
+ <span class="cline-any cline-yes">21x</span>
712
+ <span class="cline-any cline-yes">21x</span>
713
+ <span class="cline-any cline-yes">21x</span>
714
+ <span class="cline-any cline-yes">21x</span>
715
+ <span class="cline-any cline-yes">21x</span>
716
+ <span class="cline-any cline-yes">21x</span>
717
+ <span class="cline-any cline-yes">21x</span>
718
+ <span class="cline-any cline-yes">21x</span>
719
+ <span class="cline-any cline-yes">21x</span>
720
+ <span class="cline-any cline-yes">21x</span>
721
+ <span class="cline-any cline-yes">3x</span>
722
+ <span class="cline-any cline-yes">3x</span>
723
+ <span class="cline-any cline-yes">3x</span>
724
+ <span class="cline-any cline-yes">3x</span>
725
+ <span class="cline-any cline-yes">3x</span>
726
+ <span class="cline-any cline-yes">3x</span>
727
+ <span class="cline-any cline-yes">1x</span>
728
+ <span class="cline-any cline-yes">2x</span>
729
+ <span class="cline-any cline-no">&nbsp;</span>
730
+ <span class="cline-any cline-yes">2x</span>
731
+ <span class="cline-any cline-yes">3x</span>
732
+ <span class="cline-any cline-yes">3x</span>
733
+ <span class="cline-any cline-yes">3x</span>
734
+ <span class="cline-any cline-yes">3x</span>
735
+ <span class="cline-any cline-yes">3x</span>
736
+ <span class="cline-any cline-yes">3x</span>
737
+ <span class="cline-any cline-yes">3x</span>
738
+ <span class="cline-any cline-yes">21x</span>
739
+ <span class="cline-any cline-yes">21x</span>
740
+ <span class="cline-any cline-yes">21x</span>
741
+ <span class="cline-any cline-yes">21x</span>
742
+ <span class="cline-any cline-yes">21x</span>
743
+ <span class="cline-any cline-yes">21x</span>
744
+ <span class="cline-any cline-yes">21x</span>
745
+ <span class="cline-any cline-yes">21x</span>
746
+ <span class="cline-any cline-yes">21x</span>
747
+ <span class="cline-any cline-yes">4x</span>
748
+ <span class="cline-any cline-yes">4x</span>
749
+ <span class="cline-any cline-yes">4x</span>
750
+ <span class="cline-any cline-yes">4x</span>
751
+ <span class="cline-any cline-yes">4x</span>
752
+ <span class="cline-any cline-yes">4x</span>
753
+ <span class="cline-any cline-yes">4x</span>
754
+ <span class="cline-any cline-yes">4x</span>
755
+ <span class="cline-any cline-yes">4x</span>
756
+ <span class="cline-any cline-yes">4x</span>
757
+ <span class="cline-any cline-yes">4x</span>
758
+ <span class="cline-any cline-yes">4x</span>
759
+ <span class="cline-any cline-yes">4x</span>
760
+ <span class="cline-any cline-yes">4x</span>
761
+ <span class="cline-any cline-yes">4x</span>
762
+ <span class="cline-any cline-no">&nbsp;</span>
763
+ <span class="cline-any cline-no">&nbsp;</span>
764
+ <span class="cline-any cline-no">&nbsp;</span>
765
+ <span class="cline-any cline-no">&nbsp;</span>
766
+ <span class="cline-any cline-no">&nbsp;</span>
767
+ <span class="cline-any cline-yes">4x</span>
768
+ <span class="cline-any cline-yes">4x</span>
769
+ <span class="cline-any cline-yes">4x</span>
770
+ <span class="cline-any cline-yes">4x</span>
771
+ <span class="cline-any cline-yes">4x</span>
772
+ <span class="cline-any cline-yes">4x</span>
773
+ <span class="cline-any cline-yes">4x</span>
774
+ <span class="cline-any cline-yes">4x</span>
775
+ <span class="cline-any cline-yes">4x</span>
776
+ <span class="cline-any cline-yes">4x</span>
777
+ <span class="cline-any cline-yes">4x</span>
778
+ <span class="cline-any cline-yes">4x</span>
779
+ <span class="cline-any cline-yes">4x</span>
780
+ <span class="cline-any cline-yes">4x</span>
781
+ <span class="cline-any cline-yes">4x</span>
782
+ <span class="cline-any cline-yes">4x</span>
783
+ <span class="cline-any cline-yes">4x</span>
784
+ <span class="cline-any cline-yes">4x</span>
785
+ <span class="cline-any cline-yes">4x</span>
786
+ <span class="cline-any cline-yes">4x</span>
787
+ <span class="cline-any cline-yes">3x</span>
788
+ <span class="cline-any cline-yes">3x</span>
789
+ <span class="cline-any cline-yes">3x</span>
790
+ <span class="cline-any cline-yes">4x</span>
791
+ <span class="cline-any cline-yes">4x</span>
792
+ <span class="cline-any cline-yes">4x</span>
793
+ <span class="cline-any cline-yes">4x</span>
794
+ <span class="cline-any cline-yes">4x</span>
795
+ <span class="cline-any cline-yes">4x</span>
796
+ <span class="cline-any cline-yes">4x</span>
797
+ <span class="cline-any cline-yes">4x</span>
798
+ <span class="cline-any cline-yes">4x</span>
799
+ <span class="cline-any cline-yes">1x</span>
800
+ <span class="cline-any cline-yes">1x</span>
801
+ <span class="cline-any cline-yes">1x</span>
802
+ <span class="cline-any cline-yes">1x</span>
803
+ <span class="cline-any cline-yes">1x</span>
804
+ <span class="cline-any cline-yes">1x</span>
805
+ <span class="cline-any cline-yes">1x</span>
806
+ <span class="cline-any cline-yes">1x</span>
807
+ <span class="cline-any cline-no">&nbsp;</span>
808
+ <span class="cline-any cline-no">&nbsp;</span>
809
+ <span class="cline-any cline-no">&nbsp;</span>
810
+ <span class="cline-any cline-no">&nbsp;</span>
811
+ <span class="cline-any cline-no">&nbsp;</span>
812
+ <span class="cline-any cline-yes">1x</span>
813
+ <span class="cline-any cline-yes">1x</span>
814
+ <span class="cline-any cline-yes">1x</span>
815
+ <span class="cline-any cline-yes">1x</span>
816
+ <span class="cline-any cline-yes">1x</span>
817
+ <span class="cline-any cline-yes">4x</span>
818
+ <span class="cline-any cline-yes">21x</span>
819
+ <span class="cline-any cline-yes">21x</span>
820
+ <span class="cline-any cline-yes">21x</span>
821
+ <span class="cline-any cline-yes">21x</span>
822
+ <span class="cline-any cline-yes">21x</span>
823
+ <span class="cline-any cline-yes">21x</span>
824
+ <span class="cline-any cline-yes">21x</span>
825
+ <span class="cline-any cline-yes">21x</span>
826
+ <span class="cline-any cline-yes">21x</span>
827
+ <span class="cline-any cline-yes">4x</span>
828
+ <span class="cline-any cline-yes">4x</span>
829
+ <span class="cline-any cline-yes">4x</span>
830
+ <span class="cline-any cline-yes">4x</span>
831
+ <span class="cline-any cline-yes">4x</span>
832
+ <span class="cline-any cline-yes">4x</span>
833
+ <span class="cline-any cline-yes">4x</span>
834
+ <span class="cline-any cline-yes">4x</span>
835
+ <span class="cline-any cline-yes">4x</span>
836
+ <span class="cline-any cline-yes">4x</span>
837
+ <span class="cline-any cline-yes">4x</span>
838
+ <span class="cline-any cline-yes">4x</span>
839
+ <span class="cline-any cline-yes">4x</span>
840
+ <span class="cline-any cline-yes">4x</span>
841
+ <span class="cline-any cline-yes">4x</span>
842
+ <span class="cline-any cline-yes">4x</span>
843
+ <span class="cline-any cline-yes">4x</span>
844
+ <span class="cline-any cline-yes">4x</span>
845
+ <span class="cline-any cline-yes">4x</span>
846
+ <span class="cline-any cline-yes">4x</span>
847
+ <span class="cline-any cline-yes">4x</span>
848
+ <span class="cline-any cline-yes">4x</span>
849
+ <span class="cline-any cline-yes">3x</span>
850
+ <span class="cline-any cline-yes">3x</span>
851
+ <span class="cline-any cline-yes">3x</span>
852
+ <span class="cline-any cline-yes">4x</span>
853
+ <span class="cline-any cline-yes">4x</span>
854
+ <span class="cline-any cline-yes">4x</span>
855
+ <span class="cline-any cline-yes">4x</span>
856
+ <span class="cline-any cline-yes">4x</span>
857
+ <span class="cline-any cline-yes">4x</span>
858
+ <span class="cline-any cline-yes">1x</span>
859
+ <span class="cline-any cline-yes">1x</span>
860
+ <span class="cline-any cline-yes">4x</span>
861
+ <span class="cline-any cline-yes">4x</span>
862
+ <span class="cline-any cline-yes">4x</span>
863
+ <span class="cline-any cline-yes">4x</span>
864
+ <span class="cline-any cline-yes">1x</span>
865
+ <span class="cline-any cline-yes">1x</span>
866
+ <span class="cline-any cline-yes">1x</span>
867
+ <span class="cline-any cline-yes">1x</span>
868
+ <span class="cline-any cline-yes">1x</span>
869
+ <span class="cline-any cline-yes">1x</span>
870
+ <span class="cline-any cline-yes">1x</span>
871
+ <span class="cline-any cline-yes">1x</span>
872
+ <span class="cline-any cline-yes">1x</span>
873
+ <span class="cline-any cline-no">&nbsp;</span>
874
+ <span class="cline-any cline-no">&nbsp;</span>
875
+ <span class="cline-any cline-no">&nbsp;</span>
876
+ <span class="cline-any cline-no">&nbsp;</span>
877
+ <span class="cline-any cline-no">&nbsp;</span>
878
+ <span class="cline-any cline-no">&nbsp;</span>
879
+ <span class="cline-any cline-no">&nbsp;</span>
880
+ <span class="cline-any cline-no">&nbsp;</span>
881
+ <span class="cline-any cline-yes">1x</span>
882
+ <span class="cline-any cline-yes">1x</span>
883
+ <span class="cline-any cline-yes">1x</span>
884
+ <span class="cline-any cline-yes">1x</span>
885
+ <span class="cline-any cline-yes">1x</span>
886
+ <span class="cline-any cline-yes">4x</span>
887
+ <span class="cline-any cline-yes">21x</span>
888
+ <span class="cline-any cline-yes">21x</span>
889
+ <span class="cline-any cline-yes">21x</span>
890
+ <span class="cline-any cline-yes">21x</span>
891
+ <span class="cline-any cline-yes">21x</span>
892
+ <span class="cline-any cline-yes">21x</span>
893
+ <span class="cline-any cline-yes">21x</span>
894
+ <span class="cline-any cline-yes">21x</span>
895
+ <span class="cline-any cline-yes">21x</span>
896
+ <span class="cline-any cline-no">&nbsp;</span>
897
+ <span class="cline-any cline-no">&nbsp;</span>
898
+ <span class="cline-any cline-no">&nbsp;</span>
899
+ <span class="cline-any cline-no">&nbsp;</span>
900
+ <span class="cline-any cline-yes">21x</span>
901
+ <span class="cline-any cline-yes">21x</span>
902
+ <span class="cline-any cline-yes">21x</span>
903
+ <span class="cline-any cline-yes">21x</span>
904
+ <span class="cline-any cline-yes">21x</span>
905
+ <span class="cline-any cline-yes">21x</span>
906
+ <span class="cline-any cline-yes">21x</span>
907
+ <span class="cline-any cline-yes">21x</span>
908
+ <span class="cline-any cline-yes">21x</span>
909
+ <span class="cline-any cline-no">&nbsp;</span>
910
+ <span class="cline-any cline-no">&nbsp;</span>
911
+ <span class="cline-any cline-no">&nbsp;</span>
912
+ <span class="cline-any cline-no">&nbsp;</span>
913
+ <span class="cline-any cline-no">&nbsp;</span>
914
+ <span class="cline-any cline-no">&nbsp;</span>
915
+ <span class="cline-any cline-no">&nbsp;</span>
916
+ <span class="cline-any cline-no">&nbsp;</span>
917
+ <span class="cline-any cline-no">&nbsp;</span>
918
+ <span class="cline-any cline-no">&nbsp;</span>
919
+ <span class="cline-any cline-no">&nbsp;</span>
920
+ <span class="cline-any cline-no">&nbsp;</span>
921
+ <span class="cline-any cline-no">&nbsp;</span>
922
+ <span class="cline-any cline-no">&nbsp;</span>
923
+ <span class="cline-any cline-no">&nbsp;</span>
924
+ <span class="cline-any cline-no">&nbsp;</span>
925
+ <span class="cline-any cline-no">&nbsp;</span>
926
+ <span class="cline-any cline-no">&nbsp;</span>
927
+ <span class="cline-any cline-no">&nbsp;</span>
928
+ <span class="cline-any cline-no">&nbsp;</span>
929
+ <span class="cline-any cline-no">&nbsp;</span>
930
+ <span class="cline-any cline-no">&nbsp;</span>
931
+ <span class="cline-any cline-no">&nbsp;</span>
932
+ <span class="cline-any cline-no">&nbsp;</span>
933
+ <span class="cline-any cline-no">&nbsp;</span>
934
+ <span class="cline-any cline-no">&nbsp;</span>
935
+ <span class="cline-any cline-no">&nbsp;</span>
936
+ <span class="cline-any cline-no">&nbsp;</span>
937
+ <span class="cline-any cline-no">&nbsp;</span>
938
+ <span class="cline-any cline-no">&nbsp;</span>
939
+ <span class="cline-any cline-no">&nbsp;</span>
940
+ <span class="cline-any cline-no">&nbsp;</span>
941
+ <span class="cline-any cline-no">&nbsp;</span>
942
+ <span class="cline-any cline-no">&nbsp;</span>
943
+ <span class="cline-any cline-no">&nbsp;</span>
944
+ <span class="cline-any cline-no">&nbsp;</span>
945
+ <span class="cline-any cline-no">&nbsp;</span>
946
+ <span class="cline-any cline-no">&nbsp;</span>
947
+ <span class="cline-any cline-no">&nbsp;</span>
948
+ <span class="cline-any cline-no">&nbsp;</span>
949
+ <span class="cline-any cline-no">&nbsp;</span>
950
+ <span class="cline-any cline-yes">21x</span>
951
+ <span class="cline-any cline-yes">21x</span>
952
+ <span class="cline-any cline-yes">21x</span>
953
+ <span class="cline-any cline-yes">21x</span>
954
+ <span class="cline-any cline-yes">21x</span>
955
+ <span class="cline-any cline-yes">21x</span>
956
+ <span class="cline-any cline-yes">21x</span>
957
+ <span class="cline-any cline-yes">21x</span>
958
+ <span class="cline-any cline-yes">21x</span>
959
+ <span class="cline-any cline-yes">21x</span>
960
+ <span class="cline-any cline-yes">21x</span>
961
+ <span class="cline-any cline-yes">21x</span>
962
+ <span class="cline-any cline-yes">21x</span>
963
+ <span class="cline-any cline-yes">9x</span>
964
+ <span class="cline-any cline-yes">9x</span>
965
+ <span class="cline-any cline-yes">9x</span>
966
+ <span class="cline-any cline-yes">9x</span>
967
+ <span class="cline-any cline-yes">9x</span>
968
+ <span class="cline-any cline-yes">9x</span>
969
+ <span class="cline-any cline-yes">9x</span>
970
+ <span class="cline-any cline-no">&nbsp;</span>
971
+ <span class="cline-any cline-no">&nbsp;</span>
972
+ <span class="cline-any cline-yes">9x</span>
973
+ <span class="cline-any cline-yes">9x</span>
974
+ <span class="cline-any cline-yes">9x</span>
975
+ <span class="cline-any cline-yes">9x</span>
976
+ <span class="cline-any cline-yes">26x</span>
977
+ <span class="cline-any cline-yes">26x</span>
978
+ <span class="cline-any cline-yes">26x</span>
979
+ <span class="cline-any cline-yes">26x</span>
980
+ <span class="cline-any cline-yes">1x</span>
981
+ <span class="cline-any cline-yes">1x</span>
982
+ <span class="cline-any cline-yes">1x</span>
983
+ <span class="cline-any cline-yes">25x</span>
984
+ <span class="cline-any cline-yes">25x</span>
985
+ <span class="cline-any cline-yes">25x</span>
986
+ <span class="cline-any cline-yes">25x</span>
987
+ <span class="cline-any cline-yes">25x</span>
988
+ <span class="cline-any cline-yes">26x</span>
989
+ <span class="cline-any cline-yes">9x</span>
990
+ <span class="cline-any cline-yes">9x</span>
991
+ <span class="cline-any cline-yes">9x</span>
992
+ <span class="cline-any cline-yes">9x</span>
993
+ <span class="cline-any cline-yes">5x</span>
994
+ <span class="cline-any cline-yes">5x</span>
995
+ <span class="cline-any cline-yes">5x</span>
996
+ <span class="cline-any cline-yes">5x</span>
997
+ <span class="cline-any cline-yes">17x</span>
998
+ <span class="cline-any cline-yes">5x</span>
999
+ <span class="cline-any cline-yes">5x</span>
1000
+ <span class="cline-any cline-yes">5x</span>
1001
+ <span class="cline-any cline-yes">5x</span>
1002
+ <span class="cline-any cline-yes">5x</span>
1003
+ <span class="cline-any cline-yes">5x</span>
1004
+ <span class="cline-any cline-yes">5x</span>
1005
+ <span class="cline-any cline-yes">5x</span>
1006
+ <span class="cline-any cline-yes">5x</span>
1007
+ <span class="cline-any cline-yes">5x</span>
1008
+ <span class="cline-any cline-yes">5x</span>
1009
+ <span class="cline-any cline-yes">1x</span>
1010
+ <span class="cline-any cline-yes">1x</span>
1011
+ <span class="cline-any cline-yes">1x</span>
1012
+ <span class="cline-any cline-yes">1x</span>
1013
+ <span class="cline-any cline-yes">1x</span>
1014
+ <span class="cline-any cline-yes">5x</span>
1015
+ <span class="cline-any cline-yes">5x</span>
1016
+ <span class="cline-any cline-yes">5x</span>
1017
+ <span class="cline-any cline-yes">5x</span>
1018
+ <span class="cline-any cline-yes">4x</span>
1019
+ <span class="cline-any cline-yes">4x</span>
1020
+ <span class="cline-any cline-yes">9x</span>
1021
+ <span class="cline-any cline-yes">21x</span>
1022
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
1023
+ * HSuite Native Connect
1024
+ * Copyright 2024-2025 HSuite (https://hsuite.finance)
1025
+ *
1026
+ * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
1027
+ *
1028
+ * This file is part of HSuite Native Connect. For commercial licensing,
1029
+ * visit https://hsuite.finance/licensing
1030
+ */
1031
+ &nbsp;
1032
+ /**
1033
+ * @file xrpl-signer.ts
1034
+ * @description XRPL-specific WalletConnect signer implementation
1035
+ *
1036
+ * Implements the IWalletConnectSigner interface for XRPL ledger.
1037
+ * Handles XRPL-specific JSON-RPC methods and transaction formats.
1038
+ */
1039
+ &nbsp;
1040
+ import { XrplTransactionEncoder } from '@hsuite/native-connect-sdk';
1041
+ import { getLogger } from '@hsuite/native-connect-sdk';
1042
+ &nbsp;
1043
+ import type { SignResult, SubmitResult } from '../../base-wallet-provider';
1044
+ import type { IWalletConnectSigner, SignerOperationParams } from '../core/base-signer.interface';
1045
+ &nbsp;
1046
+ const logger = getLogger().scoped?.('XrplSigner'<span class="branch-0 cbranch-no" title="branch not covered" >) ?? getLogger();</span>
1047
+ &nbsp;
1048
+ /**
1049
+ * Extract a meaningful error message from various error shapes.
1050
+ * WalletConnect SDK throws errors that are not standard Error instances.
1051
+ *
1052
+ * Handles:
1053
+ * - Standard Error objects
1054
+ * - WalletConnect SDK errors: { code, message }
1055
+ * - Nested errors: { error: { message } }
1056
+ * - PIN_REQUIRED errors from wallet
1057
+ * - DOMException objects
1058
+ * - Objects that stringify to {} (enumerable property check)
1059
+ *
1060
+ * @param error - Error from WalletConnect SDK (can be Error, object, or string)
1061
+ * @returns Human-readable error message
1062
+ */
1063
+ function extractErrorMessage(error: unknown): string {
1064
+ // Log raw error for debugging
1065
+ logger.debug('Raw error object', {
1066
+ errorType: typeof error,
1067
+ isError: error instanceof Error,
1068
+ errorKeys: typeof error === 'object' &amp;&amp; error !== null ? Object.keys(error<span class="branch-0 cbranch-no" title="branch not covered" >) : [],</span>
1069
+ errorProto:
1070
+ typeof error === 'object' &amp;&amp; error !== null
1071
+ ? Object.getPrototypeOf(error)?.constructor?.<span class="branch-0 cbranch-no" title="branch not covered" >name</span>
1072
+ <span class="cstat-no" title="statement not covered" > : 'N/A',</span>
1073
+ rawError: error,
1074
+ });
1075
+ &nbsp;
1076
+ if (error instanceof Error) {
1077
+ return error.message;
1078
+ <span class="branch-0 cbranch-no" title="branch not covered" > }</span>
1079
+ <span class="cstat-no" title="statement not covered" ></span>
1080
+ if (typeof error === 'object' &amp;&amp; error !== null) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1081
+ <span class="cstat-no" title="statement not covered" > const errorObj = error as Record&lt;string, unknown&gt;;</span>
1082
+ <span class="cstat-no" title="statement not covered" ></span>
1083
+ <span class="cstat-no" title="statement not covered" > // Check for code property first (common in SDK errors like PIN_REQUIRED)</span>
1084
+ <span class="cstat-no" title="statement not covered" > if (typeof errorObj['code'] === 'string') {</span>
1085
+ <span class="cstat-no" title="statement not covered" > const codeMsg = errorObj['message']</span>
1086
+ <span class="cstat-no" title="statement not covered" > ? `${errorObj['code']}: ${errorObj['message']}`</span>
1087
+ <span class="cstat-no" title="statement not covered" > : errorObj['code'];</span>
1088
+ <span class="cstat-no" title="statement not covered" > return codeMsg as string;</span>
1089
+ <span class="cstat-no" title="statement not covered" > }</span>
1090
+ <span class="cstat-no" title="statement not covered" ></span>
1091
+ <span class="cstat-no" title="statement not covered" > // WalletConnect error format: { code, message }</span>
1092
+ <span class="cstat-no" title="statement not covered" > if ('message' in errorObj &amp;&amp; typeof errorObj['message'] === 'string') {</span>
1093
+ <span class="cstat-no" title="statement not covered" > return errorObj['message'];</span>
1094
+ <span class="cstat-no" title="statement not covered" > }</span>
1095
+ <span class="cstat-no" title="statement not covered" ></span>
1096
+ <span class="cstat-no" title="statement not covered" > // Nested error: { error: { message } }</span>
1097
+ <span class="cstat-no" title="statement not covered" > if (</span>
1098
+ <span class="cstat-no" title="statement not covered" > 'error' in errorObj &amp;&amp;</span>
1099
+ <span class="cstat-no" title="statement not covered" > typeof errorObj['error'] === 'object' &amp;&amp;</span>
1100
+ <span class="cstat-no" title="statement not covered" > errorObj['error'] !== null</span>
1101
+ <span class="cstat-no" title="statement not covered" > ) {</span>
1102
+ <span class="cstat-no" title="statement not covered" > const nested = errorObj['error'] as Record&lt;string, unknown&gt;;</span>
1103
+ <span class="cstat-no" title="statement not covered" > if ('message' in nested &amp;&amp; typeof nested['message'] === 'string') {</span>
1104
+ <span class="cstat-no" title="statement not covered" > return nested['message'];</span>
1105
+ <span class="cstat-no" title="statement not covered" > }</span>
1106
+ <span class="cstat-no" title="statement not covered" > if ('code' in nested &amp;&amp; typeof nested['code'] === 'string') {</span>
1107
+ <span class="cstat-no" title="statement not covered" > return nested['code'];</span>
1108
+ <span class="cstat-no" title="statement not covered" > }</span>
1109
+ <span class="cstat-no" title="statement not covered" > }</span>
1110
+ <span class="cstat-no" title="statement not covered" ></span>
1111
+ <span class="cstat-no" title="statement not covered" > // Check for 'context' property which WalletConnect sometimes uses</span>
1112
+ <span class="cstat-no" title="statement not covered" > if ('context' in errorObj &amp;&amp; typeof errorObj['context'] === 'string') {</span>
1113
+ <span class="cstat-no" title="statement not covered" > return errorObj['context'];</span>
1114
+ <span class="cstat-no" title="statement not covered" > }</span>
1115
+ <span class="cstat-no" title="statement not covered" ></span>
1116
+ <span class="cstat-no" title="statement not covered" > // Check for DOMException</span>
1117
+ <span class="cstat-no" title="statement not covered" > if (error instanceof DOMException) {</span>
1118
+ <span class="cstat-no" title="statement not covered" > return error.message || error.name;</span>
1119
+ <span class="cstat-no" title="statement not covered" > }</span>
1120
+ <span class="cstat-no" title="statement not covered" ></span>
1121
+ <span class="cstat-no" title="statement not covered" > // Check for reason/cause properties (common in rejected promises)</span>
1122
+ <span class="cstat-no" title="statement not covered" > if ('reason' in errorObj &amp;&amp; typeof errorObj['reason'] === 'string') {</span>
1123
+ <span class="cstat-no" title="statement not covered" > return errorObj['reason'];</span>
1124
+ <span class="cstat-no" title="statement not covered" > }</span>
1125
+ <span class="cstat-no" title="statement not covered" > if ('cause' in errorObj &amp;&amp; typeof errorObj['cause'] === 'string') {</span>
1126
+ <span class="cstat-no" title="statement not covered" > return errorObj['cause'];</span>
1127
+ <span class="cstat-no" title="statement not covered" > }</span>
1128
+ <span class="cstat-no" title="statement not covered" ></span>
1129
+ <span class="cstat-no" title="statement not covered" > // WalletConnect JSON-RPC error format: { code: number, message: string }</span>
1130
+ <span class="cstat-no" title="statement not covered" > if ('code' in errorObj &amp;&amp; 'message' in errorObj) {</span>
1131
+ <span class="cstat-no" title="statement not covered" > const code = errorObj['code'];</span>
1132
+ <span class="cstat-no" title="statement not covered" > const msg = errorObj['message'];</span>
1133
+ <span class="cstat-no" title="statement not covered" > if (typeof msg === 'string') {</span>
1134
+ <span class="cstat-no" title="statement not covered" > return typeof code === 'number' ? `[${code}] ${msg}` : msg;</span>
1135
+ <span class="cstat-no" title="statement not covered" > }</span>
1136
+ <span class="cstat-no" title="statement not covered" > }</span>
1137
+ <span class="cstat-no" title="statement not covered" ></span>
1138
+ <span class="cstat-no" title="statement not covered" > // Error with 'name' property (common for built-in errors)</span>
1139
+ <span class="cstat-no" title="statement not covered" > if ('name' in errorObj &amp;&amp; typeof errorObj['name'] === 'string') {</span>
1140
+ <span class="cstat-no" title="statement not covered" > const name = errorObj['name'];</span>
1141
+ <span class="cstat-no" title="statement not covered" > if (name &amp;&amp; name !== 'Error' &amp;&amp; name !== 'Object') {</span>
1142
+ <span class="cstat-no" title="statement not covered" > return name;</span>
1143
+ <span class="cstat-no" title="statement not covered" > }</span>
1144
+ <span class="cstat-no" title="statement not covered" > }</span>
1145
+ <span class="cstat-no" title="statement not covered" ></span>
1146
+ <span class="cstat-no" title="statement not covered" > // Try to stringify, but check if result is empty object</span>
1147
+ <span class="cstat-no" title="statement not covered" > try {</span>
1148
+ <span class="cstat-no" title="statement not covered" > const jsonStr = JSON.stringify(error);</span>
1149
+ <span class="cstat-no" title="statement not covered" > // Don't return empty objects as error messages</span>
1150
+ <span class="cstat-no" title="statement not covered" > if (jsonStr &amp;&amp; jsonStr !== '{}' &amp;&amp; jsonStr !== '[]') {</span>
1151
+ <span class="cstat-no" title="statement not covered" > return jsonStr;</span>
1152
+ <span class="cstat-no" title="statement not covered" > }</span>
1153
+ <span class="cstat-no" title="statement not covered" ></span>
1154
+ <span class="cstat-no" title="statement not covered" > // If stringify returned {}, try Object.keys to get property names</span>
1155
+ <span class="cstat-no" title="statement not covered" > const keys = Object.keys(errorObj);</span>
1156
+ <span class="cstat-no" title="statement not covered" > if (keys.length &gt; 0) {</span>
1157
+ <span class="cstat-no" title="statement not covered" > return `Error object with keys: ${keys.join(', ')}`;</span>
1158
+ <span class="cstat-no" title="statement not covered" > }</span>
1159
+ <span class="cstat-no" title="statement not covered" > } catch {</span>
1160
+ <span class="cstat-no" title="statement not covered" > // If stringify fails, try toString</span>
1161
+ <span class="cstat-no" title="statement not covered" > const str = String(error);</span>
1162
+ <span class="cstat-no" title="statement not covered" > if (str !== '[object Object]') {</span>
1163
+ <span class="cstat-no" title="statement not covered" > return str;</span>
1164
+ <span class="cstat-no" title="statement not covered" > }</span>
1165
+ <span class="cstat-no" title="statement not covered" > }</span>
1166
+ <span class="cstat-no" title="statement not covered" ></span>
1167
+ <span class="cstat-no" title="statement not covered" > return 'Unknown error object';</span>
1168
+ <span class="cstat-no" title="statement not covered" > }</span>
1169
+ <span class="cstat-no" title="statement not covered" ></span>
1170
+ <span class="cstat-no" title="statement not covered" > if (typeof error === 'string') {</span>
1171
+ <span class="cstat-no" title="statement not covered" > return error;</span>
1172
+ <span class="cstat-no" title="statement not covered" > }</span>
1173
+ <span class="cstat-no" title="statement not covered" ></span>
1174
+ <span class="cstat-no" title="statement not covered" > return 'Unknown error';</span>
1175
+ <span class="cstat-no" title="statement not covered" >}</span>
1176
+ &nbsp;
1177
+ /**
1178
+ * Signer implementation for XRPL ledger.
1179
+ *
1180
+ * Supports XRPL-specific WalletConnect methods:
1181
+ * - xrpl_signTransaction (sign-only, returns signed blob)
1182
+ * - xrpl_signAndSubmit (sign + submit, returns transaction hash)
1183
+ * - xrpl_submit (submit pre-signed transaction)
1184
+ * - xrpl_signMessage (arbitrary message signing)
1185
+ *
1186
+ * Uses XRPL address format: xrpl:&lt;network&gt;:rAddress...
1187
+ */
1188
+ export class XrplSigner implements IWalletConnectSigner {
1189
+ readonly ledgerId = 'xrpl';
1190
+ &nbsp;
1191
+ /**
1192
+ * Build XRPL namespace configuration for WalletConnect.
1193
+ * Defines the JSON-RPC methods and chains this signer supports.
1194
+ *
1195
+ * @param networkId - Network identifier (e.g., 'xrpl:testnet', 'xrpl:mainnet')
1196
+ * @returns Namespace configuration object
1197
+ */
1198
+ buildNamespace(networkId: string): {
1199
+ methods: string[];
1200
+ chains: string[];
1201
+ events: string[];
1202
+ } {
1203
+ // Extract network name (testnet, mainnet, devnet)
1204
+ const network = networkId.includes('mainnet')
1205
+ ? 'mainnet'
1206
+ : networkId.includes('devnet'<span class="branch-0 cbranch-no" title="branch not covered" >)</span>
1207
+ <span class="cstat-no" title="statement not covered" > ? 'devnet'</span>
1208
+ : 'testnet';
1209
+ &nbsp;
1210
+ return {
1211
+ methods: ['xrpl_signTransaction', 'xrpl_submit', 'xrpl_signAndSubmit', 'xrpl_signMessage'],
1212
+ chains: [`xrpl:${network}`],
1213
+ events: ['chainChanged', 'accountsChanged'],
1214
+ };
1215
+ }
1216
+ &nbsp;
1217
+ /**
1218
+ * Sign an XRPL transaction without submitting to network.
1219
+ * Uses xrpl_signTransaction method with JSON transaction object.
1220
+ *
1221
+ * @param params - Signing parameters
1222
+ * @returns Promise resolving to signed transaction blob (hex-encoded)
1223
+ */
1224
+ async signTransaction(params: SignerOperationParams): Promise&lt;SignResult&gt; {
1225
+ // Decode base64 payload to JSON transaction
1226
+ logger.debug('Decoding XRPL transaction payload', {
1227
+ payloadLength: params.payload?.length,
1228
+ networkId: params.networkId,
1229
+ topic: params.topic?.substring(0, 16) + '...',
1230
+ });
1231
+ &nbsp;
1232
+ let transaction: any;
1233
+ try {
1234
+ transaction = XrplTransactionEncoder.decodeTransaction(params.payload);
1235
+ logger.debug('Transaction decoded successfully', {
1236
+ transactionType: transaction?.TransactionType,
1237
+ account: transaction?.Account,
1238
+ });
1239
+ <span class="branch-0 cbranch-no" title="branch not covered" > } catch (decodeError) {</span>
1240
+ <span class="cstat-no" title="statement not covered" > logger.error('Failed to decode transaction payload', {</span>
1241
+ <span class="cstat-no" title="statement not covered" > error: decodeError instanceof Error ? decodeError.message : String(decodeError),</span>
1242
+ <span class="cstat-no" title="statement not covered" > });</span>
1243
+ <span class="cstat-no" title="statement not covered" > throw decodeError;</span>
1244
+ <span class="cstat-no" title="statement not covered" > }</span>
1245
+ &nbsp;
1246
+ try {
1247
+ logger.debug('Sending xrpl_signTransaction request to wallet', {
1248
+ method: 'xrpl_signTransaction',
1249
+ chainId: params.networkId,
1250
+ topic: params.topic?.substring(0, 16) + '...',
1251
+ });
1252
+ &nbsp;
1253
+ // Use 5-minute expiry to give users time to review and approve
1254
+ const result = await params.client.request({
1255
+ topic: params.topic,
1256
+ chainId: params.networkId,
1257
+ request: {
1258
+ method: 'xrpl_signTransaction',
1259
+ params: {
1260
+ transaction, // Native JSON object
1261
+ },
1262
+ },
1263
+ expiry: 300, // 5 minutes in seconds
1264
+ });
1265
+ &nbsp;
1266
+ logger.debug('Received response from wallet', {
1267
+ hasResult: !!result,
1268
+ resultKeys: result ? Object.keys(result as object<span class="branch-0 cbranch-no" title="branch not covered" >) : [],</span>
1269
+ });
1270
+ &nbsp;
1271
+ return {
1272
+ signedPayload:
1273
+ (result as { tx_blob?: string; tx_json?: any }).<span class="branch-0 cbranch-no" title="branch not covered" >tx_blob || JSON.stringify(result),</span>
1274
+ metadata: { result },
1275
+ };
1276
+ } catch (error) {
1277
+ // Check if this is an empty error object (WalletConnect SDK bug)
1278
+ const isEmptyError =
1279
+ typeof error === 'object' &amp;&amp;
1280
+ error !== null &amp;&amp;
1281
+ Object.keys(error).length === 0 &amp;&amp;
1282
+ !(error instanceof Error);
1283
+ &nbsp;
1284
+ if (isEmptyError) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1285
+ <span class="cstat-no" title="statement not covered" > logger.warn('WalletConnect SDK empty error - relay subscription may have been stale', {</span>
1286
+ <span class="cstat-no" title="statement not covered" > topic: params.topic?.substring(0, 16) + '...',</span>
1287
+ <span class="cstat-no" title="statement not covered" > });</span>
1288
+ <span class="cstat-no" title="statement not covered" > throw new Error('WalletConnect connection issue - please try again');</span>
1289
+ <span class="cstat-no" title="statement not covered" > }</span>
1290
+ &nbsp;
1291
+ const errorMsg = extractErrorMessage(error);
1292
+ logger.error('Sign failed', { error: errorMsg });
1293
+ throw new Error(`XRPL sign failed: ${errorMsg}`);
1294
+ }
1295
+ }
1296
+ &nbsp;
1297
+ /**
1298
+ * Sign and submit an XRPL transaction to the network.
1299
+ * Uses xrpl_signAndSubmit method with JSON transaction object.
1300
+ *
1301
+ * @param params - Submission parameters
1302
+ * @returns Promise resolving to transaction hash and metadata
1303
+ */
1304
+ async submitTransaction(params: SignerOperationParams): Promise&lt;SubmitResult&gt; {
1305
+ // Decode base64 payload to JSON transaction
1306
+ const transaction = XrplTransactionEncoder.decodeTransaction(params.payload);
1307
+ &nbsp;
1308
+ try {
1309
+ logger.debug('Sending xrpl_signAndSubmit request to wallet', {
1310
+ method: 'xrpl_signAndSubmit',
1311
+ chainId: params.networkId,
1312
+ topic: params.topic?.substring(0, 16) + '...',
1313
+ });
1314
+ &nbsp;
1315
+ // Use 5-minute expiry to give users time to review and approve
1316
+ const result = await params.client.request({
1317
+ topic: params.topic,
1318
+ chainId: params.networkId,
1319
+ request: {
1320
+ method: 'xrpl_signAndSubmit',
1321
+ params: {
1322
+ transaction, // Native JSON object
1323
+ },
1324
+ },
1325
+ expiry: 300, // 5 minutes in seconds
1326
+ });
1327
+ &nbsp;
1328
+ logger.debug('Received xrpl_signAndSubmit response', {
1329
+ hasResult: !!result,
1330
+ resultKeys: result ? Object.keys(result as object<span class="branch-0 cbranch-no" title="branch not covered" >) : [],</span>
1331
+ });
1332
+ &nbsp;
1333
+ return {
1334
+ transactionId:
1335
+ (result as { hash?: string }).hash ||
1336
+ (result as { tx_json?: { hash?: string } }).<span class="branch-0 cbranch-no" title="branch not covered" >tx_json?.hash ||</span>
1337
+ '',
1338
+ transactionHash: (result as { hash?: string }).hash,
1339
+ metadata: { result },
1340
+ };
1341
+ } catch (error) {
1342
+ // Check if this is an empty error object (WalletConnect SDK bug)
1343
+ // This typically happens when relay subscription is stale
1344
+ const isEmptyError =
1345
+ typeof error === 'object' &amp;&amp;
1346
+ error !== null &amp;&amp;
1347
+ Object.keys(error).length === 0 &amp;&amp;
1348
+ !(error instanceof Error);
1349
+ &nbsp;
1350
+ if (isEmptyError) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1351
+ <span class="cstat-no" title="statement not covered" > // Empty error object is a known WalletConnect SDK issue</span>
1352
+ <span class="cstat-no" title="statement not covered" > // It usually means the relay subscription was stale</span>
1353
+ <span class="cstat-no" title="statement not covered" > logger.warn('WalletConnect SDK empty error - relay subscription may have been stale', {</span>
1354
+ <span class="cstat-no" title="statement not covered" > topic: params.topic?.substring(0, 16) + '...',</span>
1355
+ <span class="cstat-no" title="statement not covered" > hint: 'This can happen when the relay WebSocket connection drops',</span>
1356
+ <span class="cstat-no" title="statement not covered" > });</span>
1357
+ <span class="cstat-no" title="statement not covered" > throw new Error('WalletConnect connection issue - please try again');</span>
1358
+ <span class="cstat-no" title="statement not covered" > }</span>
1359
+ &nbsp;
1360
+ const errorMsg = extractErrorMessage(error);
1361
+ logger.error('Submit failed', { error: errorMsg });
1362
+ throw new Error(`XRPL submit failed: ${errorMsg}`);
1363
+ }
1364
+ }
1365
+ &nbsp;
1366
+ /**
1367
+ * Sign and execute a transaction in one call (preferred method to avoid double prompts).
1368
+ * Uses xrpl_signAndSubmit method directly instead of sign-then-submit.
1369
+ *
1370
+ * @param params - Transaction parameters
1371
+ * @returns Promise resolving to transaction hash and metadata
1372
+ */
1373
+ <span class="fstat-no" title="function not covered" > async signAndExecuteTransaction(params: SignerOperationParams): Promise&lt;SubmitResult&gt; {</span>
1374
+ <span class="cstat-no" title="statement not covered" > // XRPL's xrpl_signAndSubmit method handles both signing and submission</span>
1375
+ <span class="cstat-no" title="statement not covered" > // This is the preferred method for XRPL transactions</span>
1376
+ <span class="cstat-no" title="statement not covered" > return this.submitTransaction(params);</span>
1377
+ <span class="cstat-no" title="statement not covered" > }</span>
1378
+ &nbsp;
1379
+ /**
1380
+ * Sign an arbitrary message using xrpl_signMessage method.
1381
+ * Used for DAO votes, authentication proofs, and other non-transaction signing.
1382
+ *
1383
+ * @param params - Signing parameters with message string
1384
+ * @returns Promise resolving to signature and metadata
1385
+ */
1386
+ <span class="fstat-no" title="function not covered" > async signMessage(</span>
1387
+ <span class="cstat-no" title="statement not covered" > params: SignerOperationParams &amp; { message: string; encoding?: 'utf-8' | 'base64' },</span>
1388
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;import('../../base-wallet-provider').SignMessageResult&gt; {</span>
1389
+ <span class="cstat-no" title="statement not covered" > try {</span>
1390
+ <span class="cstat-no" title="statement not covered" > // Use 5-minute expiry to give users time to review and approve</span>
1391
+ <span class="cstat-no" title="statement not covered" > const result = await params.client.request({</span>
1392
+ <span class="cstat-no" title="statement not covered" > topic: params.topic,</span>
1393
+ <span class="cstat-no" title="statement not covered" > chainId: params.networkId,</span>
1394
+ <span class="cstat-no" title="statement not covered" > request: {</span>
1395
+ <span class="cstat-no" title="statement not covered" > method: 'xrpl_signMessage',</span>
1396
+ <span class="cstat-no" title="statement not covered" > params: {</span>
1397
+ <span class="cstat-no" title="statement not covered" > message: params.message, // Can be base64 or utf-8</span>
1398
+ <span class="cstat-no" title="statement not covered" > },</span>
1399
+ <span class="cstat-no" title="statement not covered" > },</span>
1400
+ <span class="cstat-no" title="statement not covered" > expiry: 300, // 5 minutes in seconds</span>
1401
+ <span class="cstat-no" title="statement not covered" > });</span>
1402
+ <span class="cstat-no" title="statement not covered" ></span>
1403
+ <span class="cstat-no" title="statement not covered" > return {</span>
1404
+ <span class="cstat-no" title="statement not covered" > signature: (result as { signature?: string }).signature || JSON.stringify(result),</span>
1405
+ <span class="cstat-no" title="statement not covered" > publicKey: (result as { publicKey?: string }).publicKey,</span>
1406
+ <span class="cstat-no" title="statement not covered" > metadata: { result },</span>
1407
+ <span class="cstat-no" title="statement not covered" > };</span>
1408
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1409
+ <span class="cstat-no" title="statement not covered" > // Check if this is an empty error object (WalletConnect SDK bug)</span>
1410
+ <span class="cstat-no" title="statement not covered" > const isEmptyError =</span>
1411
+ <span class="cstat-no" title="statement not covered" > typeof error === 'object' &amp;&amp;</span>
1412
+ <span class="cstat-no" title="statement not covered" > error !== null &amp;&amp;</span>
1413
+ <span class="cstat-no" title="statement not covered" > Object.keys(error).length === 0 &amp;&amp;</span>
1414
+ <span class="cstat-no" title="statement not covered" > !(error instanceof Error);</span>
1415
+ <span class="cstat-no" title="statement not covered" ></span>
1416
+ <span class="cstat-no" title="statement not covered" > if (isEmptyError) {</span>
1417
+ <span class="cstat-no" title="statement not covered" > logger.warn('WalletConnect SDK empty error - relay subscription may have been stale', {</span>
1418
+ <span class="cstat-no" title="statement not covered" > topic: params.topic?.substring(0, 16) + '...',</span>
1419
+ <span class="cstat-no" title="statement not covered" > });</span>
1420
+ <span class="cstat-no" title="statement not covered" > throw new Error('WalletConnect connection issue - please try again');</span>
1421
+ <span class="cstat-no" title="statement not covered" > }</span>
1422
+ <span class="cstat-no" title="statement not covered" ></span>
1423
+ <span class="cstat-no" title="statement not covered" > const errorMsg = extractErrorMessage(error);</span>
1424
+ <span class="cstat-no" title="statement not covered" > logger.error('Sign message failed', { error: errorMsg });</span>
1425
+ <span class="cstat-no" title="statement not covered" > throw new Error(`XRPL sign message failed: ${errorMsg}`);</span>
1426
+ <span class="cstat-no" title="statement not covered" > }</span>
1427
+ <span class="cstat-no" title="statement not covered" > }</span>
1428
+ &nbsp;
1429
+ /**
1430
+ * Parse accounts from XRPL namespace in WalletConnect session.
1431
+ * Extracts addresses from XRPL format: xrpl:&lt;network&gt;:rAddress...
1432
+ *
1433
+ * Optionally filters accounts to only include those matching a target network.
1434
+ * This is important for respecting the user's network selection in the dApp.
1435
+ *
1436
+ * @param namespace - XRPL namespace object from session
1437
+ * @param targetNetworkId - Optional network ID to filter accounts (e.g., 'xrpl:mainnet')
1438
+ * @returns Array of parsed account objects, filtered by target network if specified
1439
+ */
1440
+ parseAccounts(
1441
+ namespace: any,
1442
+ targetNetworkId?: string,
1443
+ ): Array&lt;{ address: string; chainId: string }&gt; {
1444
+ if (
1445
+ !(namespace as { accounts?: string[] })?.accounts ||
1446
+ !Array.isArray((namespace as { accounts?: string[] }).accounts)
1447
+ ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1448
+ <span class="cstat-no" title="statement not covered" > return [];</span>
1449
+ <span class="cstat-no" title="statement not covered" > }</span>
1450
+ &nbsp;
1451
+ // Parse all accounts from namespace
1452
+ const allAccounts = ((namespace as { accounts?: string[] }).<span class="branch-0 cbranch-no" title="branch not covered" >accounts || []).m</span>ap(
1453
+ (account: string) =&gt; {
1454
+ // XRPL format: xrpl:testnet:rN7n7otQDd6FczFgLdlqtyMVrn3WnFBrDB
1455
+ const parts = account.split(':');
1456
+ &nbsp;
1457
+ if (parts.length &lt; 3) {
1458
+ logger.warn('Invalid account format', { account });
1459
+ return { address: account, chainId: 'xrpl:testnet' };
1460
+ }
1461
+ &nbsp;
1462
+ return {
1463
+ address: parts[parts.length - 1], // rAddress
1464
+ chainId: `${parts[0]}:${parts[1]}`, // xrpl:testnet
1465
+ };
1466
+ },
1467
+ );
1468
+ &nbsp;
1469
+ // If target network specified, filter accounts to only that network
1470
+ if (targetNetworkId) {
1471
+ const targetNetwork = targetNetworkId.split(':')[1]?.toLowerCase(); // e.g., 'mainnet'
1472
+ &nbsp;
1473
+ if (targetNetwork) {
1474
+ const filteredAccounts = allAccounts.filter((acc) =&gt;
1475
+ acc.chainId.toLowerCase().includes(targetNetwork),
1476
+ );
1477
+ &nbsp;
1478
+ logger.debug('Filtered accounts by target network', {
1479
+ targetNetworkId,
1480
+ targetNetwork,
1481
+ totalAccounts: allAccounts.length,
1482
+ filteredCount: filteredAccounts.length,
1483
+ });
1484
+ &nbsp;
1485
+ // If no accounts match the target network, log a warning
1486
+ if (filteredAccounts.length === 0 &amp;&amp; allAccounts.length &gt; 0) {
1487
+ logger.warn('No accounts found for target network', {
1488
+ targetNetwork,
1489
+ availableNetworks: [...new Set(allAccounts.map((a) =&gt; a.chainId))],
1490
+ });
1491
+ }
1492
+ &nbsp;
1493
+ return filteredAccounts;
1494
+ }
1495
+ }
1496
+ &nbsp;
1497
+ return allAccounts;
1498
+ }
1499
+ }
1500
+ &nbsp;</pre></td></tr></table></pre>
1501
+
1502
+ <div class='push'></div><!-- for sticky footer -->
1503
+ </div><!-- /wrapper -->
1504
+ <div class='footer quiet pad2 space-top1 center small'>
1505
+ Code coverage generated by
1506
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1507
+ at 2026-06-02T14:30:38.372Z
1508
+ </div>
1509
+ <script src="../../../../prettify.js"></script>
1510
+ <script>
1511
+ window.onload = function () {
1512
+ prettyPrint();
1513
+ };
1514
+ </script>
1515
+ <script src="../../../../sorter.js"></script>
1516
+ <script src="../../../../block-navigation.js"></script>
1517
+ </body>
1518
+ </html>
1519
+