@wallfree-dev/angular-core 0.0.59-beta.1

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 (623) hide show
  1. package/README.md +60 -0
  2. package/esm2022/lib/airgap-angular-core.module.mjs +63 -0
  3. package/esm2022/lib/base/base.component.mjs +38 -0
  4. package/esm2022/lib/base/base.facade.mjs +37 -0
  5. package/esm2022/lib/capacitor-plugins/definitions.mjs +15 -0
  6. package/esm2022/lib/capacitor-plugins/injection-tokens.mjs +11 -0
  7. package/esm2022/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin-wrapper.mjs +67 -0
  8. package/esm2022/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin.mjs +247 -0
  9. package/esm2022/lib/components/account-item/account-item.component.mjs +30 -0
  10. package/esm2022/lib/components/account-selection/account-selection.component.mjs +61 -0
  11. package/esm2022/lib/components/components.module.mjs +97 -0
  12. package/esm2022/lib/components/currency-symbol/currency-symbol.component.mjs +45 -0
  13. package/esm2022/lib/components/currency-symbol/currency-symbol.facade.mjs +8 -0
  14. package/esm2022/lib/components/currency-symbol/currency-symbol.types.mjs +2 -0
  15. package/esm2022/lib/components/from-to/from-to.component.mjs +100 -0
  16. package/esm2022/lib/components/iac-qr/iac-qr.component.mjs +192 -0
  17. package/esm2022/lib/components/identicon/identicon.component.mjs +51 -0
  18. package/esm2022/lib/components/isolated-modules-badges/isolated-modules-badges.component.mjs +16 -0
  19. package/esm2022/lib/components/isolated-modules-details/isolated-modules-details.component.mjs +43 -0
  20. package/esm2022/lib/components/isolated-modules-details/isolated-modules-details.facade.mjs +7 -0
  21. package/esm2022/lib/components/isolated-modules-list/isolated-modules-list.component.mjs +50 -0
  22. package/esm2022/lib/components/isolated-modules-list/isolated-modules-list.facade.mjs +7 -0
  23. package/esm2022/lib/components/isolated-modules-onboarding/isolated-modules-onboarding.component.mjs +12 -0
  24. package/esm2022/lib/components/network-badge/network-badge.component.mjs +19 -0
  25. package/esm2022/lib/components/qr/qr.component.mjs +36 -0
  26. package/esm2022/lib/components/qr-settings/qr-settings.component.mjs +30 -0
  27. package/esm2022/lib/components/titled-address/titled-address.component.mjs +31 -0
  28. package/esm2022/lib/components/titled-text/titled-text.component.mjs +28 -0
  29. package/esm2022/lib/config/app-config.mjs +3 -0
  30. package/esm2022/lib/pages/isolated-modules-list/isolated-modules-list.facade.mjs +7 -0
  31. package/esm2022/lib/pipes/amount-converter/amount-converter.pipe.mjs +82 -0
  32. package/esm2022/lib/pipes/fee-converter/fee-converter.pipe.mjs +36 -0
  33. package/esm2022/lib/pipes/pipes.module.mjs +19 -0
  34. package/esm2022/lib/pipes/wallet-filter/wallet-filter.pipe.mjs +36 -0
  35. package/esm2022/lib/protocol/adapter/protocol-v0-adapter.mjs +880 -0
  36. package/esm2022/lib/protocol/isolated/base-isolated.mjs +27 -0
  37. package/esm2022/lib/protocol/isolated/block-explorer-isolated.mjs +32 -0
  38. package/esm2022/lib/protocol/isolated/protocol-offline-isolated.mjs +37 -0
  39. package/esm2022/lib/protocol/isolated/protocol-online-isolated.mjs +52 -0
  40. package/esm2022/lib/protocol/isolated/v3-serializer-companion-isolated.mjs +35 -0
  41. package/esm2022/lib/services/address/address.service.mjs +78 -0
  42. package/esm2022/lib/services/clipboard/clipboard.service.mjs +48 -0
  43. package/esm2022/lib/services/deeplink/deeplink.service.mjs +73 -0
  44. package/esm2022/lib/services/environment/base-environment.service.mjs +6 -0
  45. package/esm2022/lib/services/filesystem/filesystem.service.mjs +291 -0
  46. package/esm2022/lib/services/iac/base.iac.service.mjs +155 -0
  47. package/esm2022/lib/services/iac/message-handler-single.mjs +48 -0
  48. package/esm2022/lib/services/iac/message-handler.mjs +22 -0
  49. package/esm2022/lib/services/iac/qr-generator.mjs +17 -0
  50. package/esm2022/lib/services/image/fetcher/image-direct.fetcher.mjs +16 -0
  51. package/esm2022/lib/services/image/fetcher/image-proxy.fetcher.mjs +45 -0
  52. package/esm2022/lib/services/image/image.service.mjs +39 -0
  53. package/esm2022/lib/services/key-pair/key-pair.service.mjs +57 -0
  54. package/esm2022/lib/services/language/language.service.mjs +47 -0
  55. package/esm2022/lib/services/modules/base-modules.service.mjs +157 -0
  56. package/esm2022/lib/services/modules/controller/base-modules.controller.mjs +2 -0
  57. package/esm2022/lib/services/modules/controller/integral/integral-modules.controller.mjs +91 -0
  58. package/esm2022/lib/services/modules/controller/isolated/isolated-modules.controller.mjs +190 -0
  59. package/esm2022/lib/services/modules/controller/modules.controller.mjs +85 -0
  60. package/esm2022/lib/services/permissions/permissions.service.mjs +140 -0
  61. package/esm2022/lib/services/protocol/defaults.mjs +55 -0
  62. package/esm2022/lib/services/protocol/protocol.service.mjs +230 -0
  63. package/esm2022/lib/services/protocol/store/base-protocol-store.service.mjs +63 -0
  64. package/esm2022/lib/services/protocol/store/main/main-protocol-store.service.mjs +91 -0
  65. package/esm2022/lib/services/protocol/store/sub/sub-protocol-store.service.mjs +174 -0
  66. package/esm2022/lib/services/qr/qr-generators/bc-ur-generator.mjs +127 -0
  67. package/esm2022/lib/services/qr/qr-generators/metamask-generator.mjs +117 -0
  68. package/esm2022/lib/services/qr/qr-generators/output-descriptor-generator.mjs +49 -0
  69. package/esm2022/lib/services/qr/qr-generators/serializer-v2-generator.mjs +30 -0
  70. package/esm2022/lib/services/qr/qr-generators/serializer-v3-generator.mjs +45 -0
  71. package/esm2022/lib/services/qr/qr-generators/xpub-generator.mjs +38 -0
  72. package/esm2022/lib/services/qr/qr-handler/serializer-v2-handler.mjs +114 -0
  73. package/esm2022/lib/services/qr/qr-handler/serializer-v3-handler.mjs +274 -0
  74. package/esm2022/lib/services/qr-scanner/qr-scanner.service.mjs +61 -0
  75. package/esm2022/lib/services/serializer/serializer.service.mjs +181 -0
  76. package/esm2022/lib/services/storage/base.storage.mjs +30 -0
  77. package/esm2022/lib/services/storage/storage.service.mjs +33 -0
  78. package/esm2022/lib/services/token/token.service.mjs +52 -0
  79. package/esm2022/lib/services/transaction/transaction.service.mjs +67 -0
  80. package/esm2022/lib/services/ui-event/ui-event.service.mjs +198 -0
  81. package/esm2022/lib/services/ui-event-elements/ui-event-elements.service.mjs +122 -0
  82. package/esm2022/lib/services/uri/uri.service.mjs +51 -0
  83. package/esm2022/lib/translation/AirGapTranslateLoader.mjs +26 -0
  84. package/esm2022/lib/types/Either.mjs +2 -0
  85. package/esm2022/lib/types/ExternalAliasResolver.mjs +2 -0
  86. package/esm2022/lib/types/RuntimeMode.mjs +6 -0
  87. package/esm2022/lib/types/SupportedLanguage.mjs +2 -0
  88. package/esm2022/lib/types/Token.mjs +2 -0
  89. package/esm2022/lib/types/isolated-modules/IsolatedModule.mjs +2 -0
  90. package/esm2022/lib/types/isolated-modules/IsolatedModuleManifest.mjs +2 -0
  91. package/esm2022/lib/types/isolated-modules/IsolatedModuleMetadata.mjs +2 -0
  92. package/esm2022/lib/types/ui/UIAction.mjs +6 -0
  93. package/esm2022/lib/types/ui/UIResource.mjs +8 -0
  94. package/esm2022/lib/utils/ExposedPromise.mjs +103 -0
  95. package/esm2022/lib/utils/airgap-transaction.mjs +23 -0
  96. package/esm2022/lib/utils/array.mjs +32 -0
  97. package/esm2022/lib/utils/modules/isolated/isolated-modules-metadata.mjs +10 -0
  98. package/esm2022/lib/utils/modules/load-protocol.mjs +19 -0
  99. package/esm2022/lib/utils/not-initialized.mjs +7 -0
  100. package/esm2022/lib/utils/protocol/delegation.mjs +33 -0
  101. package/esm2022/lib/utils/protocol/protocol-identifier.mjs +4 -0
  102. package/esm2022/lib/utils/protocol/protocol-network-identifier.mjs +18 -0
  103. package/esm2022/lib/utils/protocol/protocol-options.mjs +114 -0
  104. package/esm2022/lib/utils/protocol/protocol-v0-adapter.mjs +390 -0
  105. package/esm2022/lib/utils/utils.mjs +80 -0
  106. package/esm2022/lib/utils/worker.mjs +28 -0
  107. package/esm2022/public-api.mjs +102 -0
  108. package/esm2022/wallfree-dev-angular-core.mjs +5 -0
  109. package/fesm2022/wallfree-dev-angular-core.mjs +6933 -0
  110. package/fesm2022/wallfree-dev-angular-core.mjs.map +1 -0
  111. package/index.d.ts +6 -0
  112. package/lib/airgap-angular-core.module.d.ts +25 -0
  113. package/lib/airgap-angular-core.module.d.ts.map +1 -0
  114. package/lib/base/base.component.d.ts +18 -0
  115. package/lib/base/base.component.d.ts.map +1 -0
  116. package/lib/base/base.facade.d.ts +16 -0
  117. package/lib/base/base.facade.d.ts.map +1 -0
  118. package/lib/capacitor-plugins/definitions.d.ts +122 -0
  119. package/lib/capacitor-plugins/definitions.d.ts.map +1 -0
  120. package/lib/capacitor-plugins/injection-tokens.d.ts +18 -0
  121. package/lib/capacitor-plugins/injection-tokens.d.ts.map +1 -0
  122. package/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin-wrapper.d.ts +20 -0
  123. package/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin-wrapper.d.ts.map +1 -0
  124. package/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin.d.ts +38 -0
  125. package/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin.d.ts.map +1 -0
  126. package/lib/components/account-item/account-item.component.d.ts +15 -0
  127. package/lib/components/account-item/account-item.component.d.ts.map +1 -0
  128. package/lib/components/account-selection/account-selection.component.d.ts +23 -0
  129. package/lib/components/account-selection/account-selection.component.d.ts.map +1 -0
  130. package/lib/components/components.module.d.ts +28 -0
  131. package/lib/components/components.module.d.ts.map +1 -0
  132. package/lib/components/currency-symbol/currency-symbol.component.d.ts +20 -0
  133. package/lib/components/currency-symbol/currency-symbol.component.d.ts.map +1 -0
  134. package/lib/components/currency-symbol/currency-symbol.facade.d.ts +16 -0
  135. package/lib/components/currency-symbol/currency-symbol.facade.d.ts.map +1 -0
  136. package/lib/components/currency-symbol/currency-symbol.types.d.ts +35 -0
  137. package/lib/components/currency-symbol/currency-symbol.types.d.ts.map +1 -0
  138. package/lib/components/from-to/from-to.component.d.ts +33 -0
  139. package/lib/components/from-to/from-to.component.d.ts.map +1 -0
  140. package/lib/components/iac-qr/iac-qr.component.d.ts +45 -0
  141. package/lib/components/iac-qr/iac-qr.component.d.ts.map +1 -0
  142. package/lib/components/identicon/identicon.component.d.ts +14 -0
  143. package/lib/components/identicon/identicon.component.d.ts.map +1 -0
  144. package/lib/components/isolated-modules-badges/isolated-modules-badges.component.d.ts +8 -0
  145. package/lib/components/isolated-modules-badges/isolated-modules-badges.component.d.ts.map +1 -0
  146. package/lib/components/isolated-modules-details/isolated-modules-details.component.d.ts +17 -0
  147. package/lib/components/isolated-modules-details/isolated-modules-details.component.d.ts.map +1 -0
  148. package/lib/components/isolated-modules-details/isolated-modules-details.facade.d.ts +17 -0
  149. package/lib/components/isolated-modules-details/isolated-modules-details.facade.d.ts.map +1 -0
  150. package/lib/components/isolated-modules-list/isolated-modules-list.component.d.ts +20 -0
  151. package/lib/components/isolated-modules-list/isolated-modules-list.component.d.ts.map +1 -0
  152. package/lib/components/isolated-modules-list/isolated-modules-list.facade.d.ts +15 -0
  153. package/lib/components/isolated-modules-list/isolated-modules-list.facade.d.ts.map +1 -0
  154. package/lib/components/isolated-modules-onboarding/isolated-modules-onboarding.component.d.ts +6 -0
  155. package/lib/components/isolated-modules-onboarding/isolated-modules-onboarding.component.d.ts.map +1 -0
  156. package/lib/components/network-badge/network-badge.component.d.ts +9 -0
  157. package/lib/components/network-badge/network-badge.component.d.ts.map +1 -0
  158. package/lib/components/qr/qr.component.d.ts +16 -0
  159. package/lib/components/qr/qr.component.d.ts.map +1 -0
  160. package/lib/components/qr-settings/qr-settings.component.d.ts +12 -0
  161. package/lib/components/qr-settings/qr-settings.component.d.ts.map +1 -0
  162. package/lib/components/titled-address/titled-address.component.d.ts +13 -0
  163. package/lib/components/titled-address/titled-address.component.d.ts.map +1 -0
  164. package/lib/components/titled-text/titled-text.component.d.ts +11 -0
  165. package/lib/components/titled-text/titled-text.component.d.ts.map +1 -0
  166. package/lib/config/app-config.d.ts +15 -0
  167. package/lib/config/app-config.d.ts.map +1 -0
  168. package/lib/pages/isolated-modules-list/isolated-modules-list.facade.d.ts +16 -0
  169. package/lib/pages/isolated-modules-list/isolated-modules-list.facade.d.ts.map +1 -0
  170. package/lib/pipes/amount-converter/amount-converter.pipe.d.ts +29 -0
  171. package/lib/pipes/amount-converter/amount-converter.pipe.d.ts.map +1 -0
  172. package/lib/pipes/fee-converter/fee-converter.pipe.d.ts +20 -0
  173. package/lib/pipes/fee-converter/fee-converter.pipe.d.ts.map +1 -0
  174. package/lib/pipes/pipes.module.d.ts +10 -0
  175. package/lib/pipes/pipes.module.d.ts.map +1 -0
  176. package/lib/pipes/wallet-filter/wallet-filter.pipe.d.ts +15 -0
  177. package/lib/pipes/wallet-filter/wallet-filter.pipe.d.ts.map +1 -0
  178. package/lib/protocol/adapter/protocol-v0-adapter.d.ts +231 -0
  179. package/lib/protocol/adapter/protocol-v0-adapter.d.ts.map +1 -0
  180. package/lib/protocol/isolated/base-isolated.d.ts +11 -0
  181. package/lib/protocol/isolated/base-isolated.d.ts.map +1 -0
  182. package/lib/protocol/isolated/block-explorer-isolated.d.ts +14 -0
  183. package/lib/protocol/isolated/block-explorer-isolated.d.ts.map +1 -0
  184. package/lib/protocol/isolated/protocol-offline-isolated.d.ts +17 -0
  185. package/lib/protocol/isolated/protocol-offline-isolated.d.ts.map +1 -0
  186. package/lib/protocol/isolated/protocol-online-isolated.d.ts +21 -0
  187. package/lib/protocol/isolated/protocol-online-isolated.d.ts.map +1 -0
  188. package/lib/protocol/isolated/v3-serializer-companion-isolated.d.ts +17 -0
  189. package/lib/protocol/isolated/v3-serializer-companion-isolated.d.ts.map +1 -0
  190. package/lib/services/address/address.service.d.ts +26 -0
  191. package/lib/services/address/address.service.d.ts.map +1 -0
  192. package/lib/services/clipboard/clipboard.service.d.ts +14 -0
  193. package/lib/services/clipboard/clipboard.service.d.ts.map +1 -0
  194. package/lib/services/deeplink/deeplink.service.d.ts +18 -0
  195. package/lib/services/deeplink/deeplink.service.d.ts.map +1 -0
  196. package/lib/services/environment/base-environment.service.d.ts +6 -0
  197. package/lib/services/environment/base-environment.service.d.ts.map +1 -0
  198. package/lib/services/filesystem/filesystem.service.d.ts +42 -0
  199. package/lib/services/filesystem/filesystem.service.d.ts.map +1 -0
  200. package/lib/services/iac/base.iac.service.d.ts +41 -0
  201. package/lib/services/iac/base.iac.service.d.ts.map +1 -0
  202. package/lib/services/iac/message-handler-single.d.ts +20 -0
  203. package/lib/services/iac/message-handler-single.d.ts.map +1 -0
  204. package/lib/services/iac/message-handler.d.ts +34 -0
  205. package/lib/services/iac/message-handler.d.ts.map +1 -0
  206. package/lib/services/iac/qr-generator.d.ts +13 -0
  207. package/lib/services/iac/qr-generator.d.ts.map +1 -0
  208. package/lib/services/image/fetcher/image-direct.fetcher.d.ts +9 -0
  209. package/lib/services/image/fetcher/image-direct.fetcher.d.ts.map +1 -0
  210. package/lib/services/image/fetcher/image-proxy.fetcher.d.ts +9 -0
  211. package/lib/services/image/fetcher/image-proxy.fetcher.d.ts.map +1 -0
  212. package/lib/services/image/image.service.d.ts +20 -0
  213. package/lib/services/image/image.service.d.ts.map +1 -0
  214. package/lib/services/key-pair/key-pair.service.d.ts +14 -0
  215. package/lib/services/key-pair/key-pair.service.d.ts.map +1 -0
  216. package/lib/services/language/language.service.d.ts +21 -0
  217. package/lib/services/language/language.service.d.ts.map +1 -0
  218. package/lib/services/modules/base-modules.service.d.ts +34 -0
  219. package/lib/services/modules/base-modules.service.d.ts.map +1 -0
  220. package/lib/services/modules/controller/base-modules.controller.d.ts +19 -0
  221. package/lib/services/modules/controller/base-modules.controller.d.ts.map +1 -0
  222. package/lib/services/modules/controller/integral/integral-modules.controller.d.ts +22 -0
  223. package/lib/services/modules/controller/integral/integral-modules.controller.d.ts.map +1 -0
  224. package/lib/services/modules/controller/isolated/isolated-modules.controller.d.ts +32 -0
  225. package/lib/services/modules/controller/isolated/isolated-modules.controller.d.ts.map +1 -0
  226. package/lib/services/modules/controller/modules.controller.d.ts +27 -0
  227. package/lib/services/modules/controller/modules.controller.d.ts.map +1 -0
  228. package/lib/services/permissions/permissions.service.d.ts +39 -0
  229. package/lib/services/permissions/permissions.service.d.ts.map +1 -0
  230. package/lib/services/protocol/defaults.d.ts +6 -0
  231. package/lib/services/protocol/defaults.d.ts.map +1 -0
  232. package/lib/services/protocol/protocol.service.d.ts +47 -0
  233. package/lib/services/protocol/protocol.service.d.ts.map +1 -0
  234. package/lib/services/protocol/store/base-protocol-store.service.d.ts +36 -0
  235. package/lib/services/protocol/store/base-protocol-store.service.d.ts.map +1 -0
  236. package/lib/services/protocol/store/main/main-protocol-store.service.d.ts +21 -0
  237. package/lib/services/protocol/store/main/main-protocol-store.service.d.ts.map +1 -0
  238. package/lib/services/protocol/store/sub/sub-protocol-store.service.d.ts +31 -0
  239. package/lib/services/protocol/store/sub/sub-protocol-store.service.d.ts.map +1 -0
  240. package/lib/services/qr/qr-generators/bc-ur-generator.d.ts +16 -0
  241. package/lib/services/qr/qr-generators/bc-ur-generator.d.ts.map +1 -0
  242. package/lib/services/qr/qr-generators/metamask-generator.d.ts +16 -0
  243. package/lib/services/qr/qr-generators/metamask-generator.d.ts.map +1 -0
  244. package/lib/services/qr/qr-generators/output-descriptor-generator.d.ts +13 -0
  245. package/lib/services/qr/qr-generators/output-descriptor-generator.d.ts.map +1 -0
  246. package/lib/services/qr/qr-generators/serializer-v2-generator.d.ts +13 -0
  247. package/lib/services/qr/qr-generators/serializer-v2-generator.d.ts.map +1 -0
  248. package/lib/services/qr/qr-generators/serializer-v3-generator.d.ts +12 -0
  249. package/lib/services/qr/qr-generators/serializer-v3-generator.d.ts.map +1 -0
  250. package/lib/services/qr/qr-generators/xpub-generator.d.ts +12 -0
  251. package/lib/services/qr/qr-generators/xpub-generator.d.ts.map +1 -0
  252. package/lib/services/qr/qr-handler/serializer-v2-handler.d.ts +20 -0
  253. package/lib/services/qr/qr-handler/serializer-v2-handler.d.ts.map +1 -0
  254. package/lib/services/qr/qr-handler/serializer-v3-handler.d.ts +23 -0
  255. package/lib/services/qr/qr-handler/serializer-v3-handler.d.ts.map +1 -0
  256. package/lib/services/qr-scanner/qr-scanner.service.d.ts +23 -0
  257. package/lib/services/qr-scanner/qr-scanner.service.d.ts.map +1 -0
  258. package/lib/services/serializer/serializer.service.d.ts +34 -0
  259. package/lib/services/serializer/serializer.service.d.ts.map +1 -0
  260. package/lib/services/storage/base.storage.d.ts +15 -0
  261. package/lib/services/storage/base.storage.d.ts.map +1 -0
  262. package/lib/services/storage/storage.service.d.ts +28 -0
  263. package/lib/services/storage/storage.service.d.ts.map +1 -0
  264. package/lib/services/token/token.service.d.ts +11 -0
  265. package/lib/services/token/token.service.d.ts.map +1 -0
  266. package/lib/services/transaction/transaction.service.d.ts +21 -0
  267. package/lib/services/transaction/transaction.service.d.ts.map +1 -0
  268. package/lib/services/ui-event/ui-event.service.d.ts +58 -0
  269. package/lib/services/ui-event/ui-event.service.d.ts.map +1 -0
  270. package/lib/services/ui-event-elements/ui-event-elements.service.d.ts +16 -0
  271. package/lib/services/ui-event-elements/ui-event-elements.service.d.ts.map +1 -0
  272. package/lib/services/uri/uri.service.d.ts +15 -0
  273. package/lib/services/uri/uri.service.d.ts.map +1 -0
  274. package/lib/translation/AirGapTranslateLoader.d.ts +15 -0
  275. package/lib/translation/AirGapTranslateLoader.d.ts.map +1 -0
  276. package/lib/types/Either.d.ts +2 -0
  277. package/lib/types/Either.d.ts.map +1 -0
  278. package/lib/types/ExternalAliasResolver.d.ts +6 -0
  279. package/lib/types/ExternalAliasResolver.d.ts.map +1 -0
  280. package/lib/types/RuntimeMode.d.ts +5 -0
  281. package/lib/types/RuntimeMode.d.ts.map +1 -0
  282. package/lib/types/SupportedLanguage.d.ts +2 -0
  283. package/lib/types/SupportedLanguage.d.ts.map +1 -0
  284. package/lib/types/Token.d.ts +9 -0
  285. package/lib/types/Token.d.ts.map +1 -0
  286. package/lib/types/isolated-modules/IsolatedModule.d.ts +28 -0
  287. package/lib/types/isolated-modules/IsolatedModule.d.ts.map +1 -0
  288. package/lib/types/isolated-modules/IsolatedModuleManifest.d.ts +24 -0
  289. package/lib/types/isolated-modules/IsolatedModuleManifest.d.ts.map +1 -0
  290. package/lib/types/isolated-modules/IsolatedModuleMetadata.d.ts +21 -0
  291. package/lib/types/isolated-modules/IsolatedModuleMetadata.d.ts.map +1 -0
  292. package/lib/types/ui/UIAction.d.ts +10 -0
  293. package/lib/types/ui/UIAction.d.ts.map +1 -0
  294. package/lib/types/ui/UIResource.d.ts +11 -0
  295. package/lib/types/ui/UIResource.d.ts.map +1 -0
  296. package/lib/utils/ExposedPromise.d.ts +40 -0
  297. package/lib/utils/ExposedPromise.d.ts.map +1 -0
  298. package/lib/utils/airgap-transaction.d.ts +4 -0
  299. package/lib/utils/airgap-transaction.d.ts.map +1 -0
  300. package/lib/utils/array.d.ts +6 -0
  301. package/lib/utils/array.d.ts.map +1 -0
  302. package/lib/utils/modules/isolated/isolated-modules-metadata.d.ts +3 -0
  303. package/lib/utils/modules/isolated/isolated-modules-metadata.d.ts.map +1 -0
  304. package/lib/utils/modules/load-protocol.d.ts +4 -0
  305. package/lib/utils/modules/load-protocol.d.ts.map +1 -0
  306. package/lib/utils/not-initialized.d.ts +2 -0
  307. package/lib/utils/not-initialized.d.ts.map +1 -0
  308. package/lib/utils/protocol/delegation.d.ts +6 -0
  309. package/lib/utils/protocol/delegation.d.ts.map +1 -0
  310. package/lib/utils/protocol/protocol-identifier.d.ts +3 -0
  311. package/lib/utils/protocol/protocol-identifier.d.ts.map +1 -0
  312. package/lib/utils/protocol/protocol-network-identifier.d.ts +8 -0
  313. package/lib/utils/protocol/protocol-network-identifier.d.ts.map +1 -0
  314. package/lib/utils/protocol/protocol-options.d.ts +6 -0
  315. package/lib/utils/protocol/protocol-options.d.ts.map +1 -0
  316. package/lib/utils/protocol/protocol-v0-adapter.d.ts +75 -0
  317. package/lib/utils/protocol/protocol-v0-adapter.d.ts.map +1 -0
  318. package/lib/utils/utils.d.ts +9 -0
  319. package/lib/utils/utils.d.ts.map +1 -0
  320. package/lib/utils/worker.d.ts +11 -0
  321. package/lib/utils/worker.d.ts.map +1 -0
  322. package/package.json +88 -0
  323. package/public-api.d.ts +87 -0
  324. package/public-api.d.ts.map +1 -0
  325. package/src/assets/i18n-common/de.json +112 -0
  326. package/src/assets/i18n-common/en.json +112 -0
  327. package/src/assets/i18n-common/es.json +112 -0
  328. package/src/assets/i18n-common/fr.json +112 -0
  329. package/src/assets/i18n-common/pt_BR.json +112 -0
  330. package/src/assets/i18n-common/ru.json +112 -0
  331. package/src/assets/i18n-common/zh_CN.json +112 -0
  332. package/src/assets/img/identicon_placeholder.png +0 -0
  333. package/src/assets/native/isolated_modules/isolated-modules.js-engine-android.js +34 -0
  334. package/src/assets/native/isolated_modules/isolated-modules.script.js +304 -0
  335. package/src/assets/symbols/abt.svg +1 -0
  336. package/src/assets/symbols/adx.svg +1 -0
  337. package/src/assets/symbols/ae.svg +17 -0
  338. package/src/assets/symbols/agi.svg +1 -0
  339. package/src/assets/symbols/aion.svg +1 -0
  340. package/src/assets/symbols/amb.svg +1 -0
  341. package/src/assets/symbols/ampl.svg +7 -0
  342. package/src/assets/symbols/ant.svg +1 -0
  343. package/src/assets/symbols/aoa.svg +7 -0
  344. package/src/assets/symbols/appc.svg +1 -0
  345. package/src/assets/symbols/aqua.svg +5 -0
  346. package/src/assets/symbols/arn.svg +1 -0
  347. package/src/assets/symbols/ary.svg +1 -0
  348. package/src/assets/symbols/ast.svg +1 -0
  349. package/src/assets/symbols/astr.png +0 -0
  350. package/src/assets/symbols/atm.svg +1 -0
  351. package/src/assets/symbols/atom.svg +1 -0
  352. package/src/assets/symbols/auto.svg +1 -0
  353. package/src/assets/symbols/bal.svg +7 -0
  354. package/src/assets/symbols/band.svg +7 -0
  355. package/src/assets/symbols/bat.svg +1 -0
  356. package/src/assets/symbols/bcbc.svg +1 -0
  357. package/src/assets/symbols/bcpt.svg +1 -0
  358. package/src/assets/symbols/bix.svg +1 -0
  359. package/src/assets/symbols/blz.svg +1 -0
  360. package/src/assets/symbols/bnb.svg +1 -0
  361. package/src/assets/symbols/bnt.svg +1 -0
  362. package/src/assets/symbols/bnty.svg +1 -0
  363. package/src/assets/symbols/bpt.svg +1 -0
  364. package/src/assets/symbols/brc.svg +7 -0
  365. package/src/assets/symbols/brd.svg +1 -0
  366. package/src/assets/symbols/btc.svg +1 -0
  367. package/src/assets/symbols/btctz.png +0 -0
  368. package/src/assets/symbols/btm.svg +1 -0
  369. package/src/assets/symbols/busd.svg +7 -0
  370. package/src/assets/symbols/bytom.svg +7 -0
  371. package/src/assets/symbols/cacu.svg +1 -0
  372. package/src/assets/symbols/cdt.svg +1 -0
  373. package/src/assets/symbols/cel.svg +7 -0
  374. package/src/assets/symbols/cennz.svg +7 -0
  375. package/src/assets/symbols/cfx.svg +1 -0
  376. package/src/assets/symbols/chsb.svg +7 -0
  377. package/src/assets/symbols/chz.svg +7 -0
  378. package/src/assets/symbols/ckbtc.png +0 -0
  379. package/src/assets/symbols/cmt.svg +1 -0
  380. package/src/assets/symbols/cnd.svg +1 -0
  381. package/src/assets/symbols/cob.svg +1 -0
  382. package/src/assets/symbols/comp.svg +7 -0
  383. package/src/assets/symbols/coreum.png +0 -0
  384. package/src/assets/symbols/cred.svg +1 -0
  385. package/src/assets/symbols/cro.svg +7 -0
  386. package/src/assets/symbols/crpt.svg +1 -0
  387. package/src/assets/symbols/crv.svg +7 -0
  388. package/src/assets/symbols/cs.svg +1 -0
  389. package/src/assets/symbols/ctez.svg +1 -0
  390. package/src/assets/symbols/ctr.svg +1 -0
  391. package/src/assets/symbols/ctxc.svg +1 -0
  392. package/src/assets/symbols/cusdc.svg +7 -0
  393. package/src/assets/symbols/cvc.svg +1 -0
  394. package/src/assets/symbols/cvt.svg +7 -0
  395. package/src/assets/symbols/czrx.svg +7 -0
  396. package/src/assets/symbols/dai.svg +7 -0
  397. package/src/assets/symbols/dat.svg +1 -0
  398. package/src/assets/symbols/data.svg +1 -0
  399. package/src/assets/symbols/dcn.svg +1 -0
  400. package/src/assets/symbols/deez.svg +1 -0
  401. package/src/assets/symbols/dent.svg +1 -0
  402. package/src/assets/symbols/dew.svg +1 -0
  403. package/src/assets/symbols/dgd.svg +1 -0
  404. package/src/assets/symbols/dia.svg +7 -0
  405. package/src/assets/symbols/divx.svg +7 -0
  406. package/src/assets/symbols/dlt.svg +1 -0
  407. package/src/assets/symbols/dnt.svg +1 -0
  408. package/src/assets/symbols/dock.svg +1 -0
  409. package/src/assets/symbols/doga.png +0 -0
  410. package/src/assets/symbols/dot.svg +14 -0
  411. package/src/assets/symbols/drgn.svg +1 -0
  412. package/src/assets/symbols/drop.svg +1 -0
  413. package/src/assets/symbols/dth.svg +1 -0
  414. package/src/assets/symbols/dtr.svg +1 -0
  415. package/src/assets/symbols/dx.svg +7 -0
  416. package/src/assets/symbols/edg.svg +1 -0
  417. package/src/assets/symbols/edo.svg +1 -0
  418. package/src/assets/symbols/elf.svg +1 -0
  419. package/src/assets/symbols/elix.svg +1 -0
  420. package/src/assets/symbols/eng.svg +1 -0
  421. package/src/assets/symbols/enj.svg +1 -0
  422. package/src/assets/symbols/entrp.svg +1 -0
  423. package/src/assets/symbols/eos.svg +1 -0
  424. package/src/assets/symbols/eth.svg +1 -0
  425. package/src/assets/symbols/ethtz.png +0 -0
  426. package/src/assets/symbols/eurc.svg +8 -0
  427. package/src/assets/symbols/evx.svg +1 -0
  428. package/src/assets/symbols/fet.svg +7 -0
  429. package/src/assets/symbols/frax.svg +26 -0
  430. package/src/assets/symbols/fsn.svg +1 -0
  431. package/src/assets/symbols/ftc.svg +1 -0
  432. package/src/assets/symbols/ftm.svg +7 -0
  433. package/src/assets/symbols/fuel.svg +1 -0
  434. package/src/assets/symbols/fun.svg +1 -0
  435. package/src/assets/symbols/gbx.svg +1 -0
  436. package/src/assets/symbols/generic-coin.svg +1 -0
  437. package/src/assets/symbols/glmr.svg +1 -0
  438. package/src/assets/symbols/gno.svg +1 -0
  439. package/src/assets/symbols/gnt.svg +1 -0
  440. package/src/assets/symbols/grs.svg +1 -0
  441. package/src/assets/symbols/gsc.svg +1 -0
  442. package/src/assets/symbols/gto.svg +1 -0
  443. package/src/assets/symbols/gup.svg +1 -0
  444. package/src/assets/symbols/gusd.svg +1 -0
  445. package/src/assets/symbols/gvt.svg +1 -0
  446. package/src/assets/symbols/gzr.svg +1 -0
  447. package/src/assets/symbols/hedg.svg +7 -0
  448. package/src/assets/symbols/hodl.svg +1 -0
  449. package/src/assets/symbols/hot.svg +7 -0
  450. package/src/assets/symbols/hpb.svg +1 -0
  451. package/src/assets/symbols/ht.svg +1 -0
  452. package/src/assets/symbols/husd.svg +7 -0
  453. package/src/assets/symbols/icn.svg +1 -0
  454. package/src/assets/symbols/icp.svg +16 -0
  455. package/src/assets/symbols/icx.svg +1 -0
  456. package/src/assets/symbols/inb.svg +7 -0
  457. package/src/assets/symbols/ino.svg +7 -0
  458. package/src/assets/symbols/ins.svg +1 -0
  459. package/src/assets/symbols/iost.svg +1 -0
  460. package/src/assets/symbols/iotx.svg +1 -0
  461. package/src/assets/symbols/itc.svg +1 -0
  462. package/src/assets/symbols/jnt.svg +1 -0
  463. package/src/assets/symbols/kcs.svg +7 -0
  464. package/src/assets/symbols/kin.svg +1 -0
  465. package/src/assets/symbols/knc.svg +1 -0
  466. package/src/assets/symbols/ksm.svg +1 -0
  467. package/src/assets/symbols/kusd.svg +1 -0
  468. package/src/assets/symbols/ldo.svg +97 -0
  469. package/src/assets/symbols/lend.svg +1 -0
  470. package/src/assets/symbols/leo.svg +7 -0
  471. package/src/assets/symbols/link.svg +7 -0
  472. package/src/assets/symbols/loom.svg +1 -0
  473. package/src/assets/symbols/lpt.svg +1 -0
  474. package/src/assets/symbols/lrc.svg +1 -0
  475. package/src/assets/symbols/lun.svg +1 -0
  476. package/src/assets/symbols/mana.svg +1 -0
  477. package/src/assets/symbols/matic.svg +7 -0
  478. package/src/assets/symbols/mcap.svg +1 -0
  479. package/src/assets/symbols/mco.svg +1 -0
  480. package/src/assets/symbols/mda.svg +1 -0
  481. package/src/assets/symbols/mds.svg +1 -0
  482. package/src/assets/symbols/mkr.svg +1 -0
  483. package/src/assets/symbols/mln.svg +7 -0
  484. package/src/assets/symbols/mnw.svg +1 -0
  485. package/src/assets/symbols/mod.svg +1 -0
  486. package/src/assets/symbols/movr.svg +10 -0
  487. package/src/assets/symbols/mth.svg +1 -0
  488. package/src/assets/symbols/mtl.svg +1 -0
  489. package/src/assets/symbols/mxc.svg +7 -0
  490. package/src/assets/symbols/nas.svg +1 -0
  491. package/src/assets/symbols/ncash.svg +1 -0
  492. package/src/assets/symbols/neu.svg +1 -0
  493. package/src/assets/symbols/nexo.svg +1 -0
  494. package/src/assets/symbols/ngc.svg +1 -0
  495. package/src/assets/symbols/nio.svg +1 -0
  496. package/src/assets/symbols/nmr.svg +7 -0
  497. package/src/assets/symbols/noah.svg +7 -0
  498. package/src/assets/symbols/npxs.svg +1 -0
  499. package/src/assets/symbols/nuls.svg +1 -0
  500. package/src/assets/symbols/nxm.svg +7 -0
  501. package/src/assets/symbols/oax.svg +1 -0
  502. package/src/assets/symbols/ocean.svg +7 -0
  503. package/src/assets/symbols/okb.svg +7 -0
  504. package/src/assets/symbols/omg.svg +1 -0
  505. package/src/assets/symbols/ong.svg +1 -0
  506. package/src/assets/symbols/op.svg +21 -0
  507. package/src/assets/symbols/ost.svg +1 -0
  508. package/src/assets/symbols/pax.svg +1 -0
  509. package/src/assets/symbols/paxg.svg +7 -0
  510. package/src/assets/symbols/pay.svg +1 -0
  511. package/src/assets/symbols/plenty.svg +1 -0
  512. package/src/assets/symbols/plr.svg +1 -0
  513. package/src/assets/symbols/pnk.svg +7 -0
  514. package/src/assets/symbols/poe.svg +1 -0
  515. package/src/assets/symbols/poly.svg +1 -0
  516. package/src/assets/symbols/powr.svg +1 -0
  517. package/src/assets/symbols/ppp.svg +1 -0
  518. package/src/assets/symbols/ppt.svg +1 -0
  519. package/src/assets/symbols/prl.svg +1 -0
  520. package/src/assets/symbols/qash.svg +1 -0
  521. package/src/assets/symbols/qnt.svg +7 -0
  522. package/src/assets/symbols/qrl.svg +1 -0
  523. package/src/assets/symbols/qsp.svg +1 -0
  524. package/src/assets/symbols/qtum.svg +1 -0
  525. package/src/assets/symbols/quipu.png +0 -0
  526. package/src/assets/symbols/r.svg +1 -0
  527. package/src/assets/symbols/rcn.svg +1 -0
  528. package/src/assets/symbols/rdn.svg +1 -0
  529. package/src/assets/symbols/ren.svg +7 -0
  530. package/src/assets/symbols/rep.svg +1 -0
  531. package/src/assets/symbols/repv2.svg +7 -0
  532. package/src/assets/symbols/req.svg +1 -0
  533. package/src/assets/symbols/rev.svg +7 -0
  534. package/src/assets/symbols/rhoc.svg +1 -0
  535. package/src/assets/symbols/rlc.svg +1 -0
  536. package/src/assets/symbols/rsr.svg +7 -0
  537. package/src/assets/symbols/sai.svg +7 -0
  538. package/src/assets/symbols/salt.svg +1 -0
  539. package/src/assets/symbols/san.svg +1 -0
  540. package/src/assets/symbols/sdn.svg +1 -0
  541. package/src/assets/symbols/shx.svg +32 -0
  542. package/src/assets/symbols/sirs.svg +1 -0
  543. package/src/assets/symbols/smart.svg +1 -0
  544. package/src/assets/symbols/sngls.svg +1 -0
  545. package/src/assets/symbols/snm.svg +1 -0
  546. package/src/assets/symbols/snt.svg +1 -0
  547. package/src/assets/symbols/snx.svg +7 -0
  548. package/src/assets/symbols/soc.svg +1 -0
  549. package/src/assets/symbols/sol.svg +1 -0
  550. package/src/assets/symbols/spank.svg +1 -0
  551. package/src/assets/symbols/sphtx.svg +1 -0
  552. package/src/assets/symbols/srm.svg +7 -0
  553. package/src/assets/symbols/srn.svg +1 -0
  554. package/src/assets/symbols/stake.svg +7 -0
  555. package/src/assets/symbols/stellar.png +0 -0
  556. package/src/assets/symbols/storj.svg +1 -0
  557. package/src/assets/symbols/storm.svg +1 -0
  558. package/src/assets/symbols/stq.svg +1 -0
  559. package/src/assets/symbols/stxtz.svg +18 -0
  560. package/src/assets/symbols/sub.svg +1 -0
  561. package/src/assets/symbols/sushi.svg +7 -0
  562. package/src/assets/symbols/sxp.svg +7 -0
  563. package/src/assets/symbols/sxtz.svg +6 -0
  564. package/src/assets/symbols/taas.svg +1 -0
  565. package/src/assets/symbols/tau.svg +1 -0
  566. package/src/assets/symbols/tbx.svg +1 -0
  567. package/src/assets/symbols/tel.svg +1 -0
  568. package/src/assets/symbols/ten.svg +1 -0
  569. package/src/assets/symbols/theta.svg +1 -0
  570. package/src/assets/symbols/tix.svg +1 -0
  571. package/src/assets/symbols/tkn.svg +1 -0
  572. package/src/assets/symbols/tnt.svg +1 -0
  573. package/src/assets/symbols/tomo.svg +1 -0
  574. package/src/assets/symbols/trac.svg +7 -0
  575. package/src/assets/symbols/trb.svg +7 -0
  576. package/src/assets/symbols/trx.svg +1 -0
  577. package/src/assets/symbols/tusd.svg +1 -0
  578. package/src/assets/symbols/tzbtc.svg +1 -0
  579. package/src/assets/symbols/ubt.svg +7 -0
  580. package/src/assets/symbols/ubtc.svg +1 -0
  581. package/src/assets/symbols/udefi.svg +1 -0
  582. package/src/assets/symbols/uma.svg +7 -0
  583. package/src/assets/symbols/usdc.svg +1 -0
  584. package/src/assets/symbols/usdt.png +0 -0
  585. package/src/assets/symbols/usdt.svg +1 -0
  586. package/src/assets/symbols/usdtz.svg +17 -0
  587. package/src/assets/symbols/ust.svg +1 -0
  588. package/src/assets/symbols/utk.svg +1 -0
  589. package/src/assets/symbols/uusd.svg +1 -0
  590. package/src/assets/symbols/uxtz.svg +1 -0
  591. package/src/assets/symbols/velo.svg +5 -0
  592. package/src/assets/symbols/ven.svg +7 -0
  593. package/src/assets/symbols/veri.svg +1 -0
  594. package/src/assets/symbols/verse.svg +1 -0
  595. package/src/assets/symbols/vest.svg +7 -0
  596. package/src/assets/symbols/vib.svg +1 -0
  597. package/src/assets/symbols/vibe.svg +1 -0
  598. package/src/assets/symbols/wabi.svg +1 -0
  599. package/src/assets/symbols/wax.svg +1 -0
  600. package/src/assets/symbols/wbtc.svg +7 -0
  601. package/src/assets/symbols/weth.svg +18 -0
  602. package/src/assets/symbols/wic.svg +7 -0
  603. package/src/assets/symbols/wings.svg +1 -0
  604. package/src/assets/symbols/wnxm.svg +7 -0
  605. package/src/assets/symbols/wpr.svg +1 -0
  606. package/src/assets/symbols/wrap.png +0 -0
  607. package/src/assets/symbols/wtc.svg +1 -0
  608. package/src/assets/symbols/wusdc.png +0 -0
  609. package/src/assets/symbols/xchf.svg +1 -0
  610. package/src/assets/symbols/xdce.svg +7 -0
  611. package/src/assets/symbols/xin.svg +7 -0
  612. package/src/assets/symbols/xpa.svg +1 -0
  613. package/src/assets/symbols/xpl.svg +1 -0
  614. package/src/assets/symbols/xtz.svg +5 -0
  615. package/src/assets/symbols/yfi.svg +7 -0
  616. package/src/assets/symbols/you.svg +1 -0
  617. package/src/assets/symbols/yoyow.svg +1 -0
  618. package/src/assets/symbols/ytez.svg +1 -0
  619. package/src/assets/symbols/zb.svg +7 -0
  620. package/src/assets/symbols/zil.svg +1 -0
  621. package/src/assets/symbols/zrx.svg +1 -0
  622. package/src/assets/workers/airgap-coin-lib.js +119 -0
  623. package/wallfree-dev-angular-core.d.ts.map +1 -0
@@ -0,0 +1,174 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { SubProtocolSymbols, MainProtocolSymbols, isNetworkEqual } from '@wallfree-dev/coinlib-core';
3
+ import { erc20Tokens } from '@wallfree-dev/ethereum';
4
+ import { getMainIdentifier } from '../../../../utils/protocol/protocol-identifier';
5
+ import { splitProtocolNetworkIdentifier } from '../../../../utils/protocol/protocol-network-identifier';
6
+ import { BaseProtocolStoreService } from '../base-protocol-store.service';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../../environment/base-environment.service";
9
+ import * as i2 from "../../../modules/controller/modules.controller";
10
+ export class SubProtocolStoreService extends BaseProtocolStoreService {
11
+ constructor(environment, modulesController) {
12
+ super('SubProtocolService', environment, modulesController);
13
+ }
14
+ get ethTokenIdentifiers() {
15
+ if (this._ethTokenIdentifers === undefined) {
16
+ this._ethTokenIdentifers = new Set(Object.values(erc20Tokens).map((token) => token.identifier));
17
+ }
18
+ return this._ethTokenIdentifers;
19
+ }
20
+ async removeProtocols(identifiers) {
21
+ const identifiersSet = new Set(identifiers);
22
+ const mainIdentifiersSet = new Set(identifiers.map(getMainIdentifier));
23
+ const protocolKeys = Object.keys(await this.supportedProtocols)
24
+ .map((key) => {
25
+ const { protocol: protocolIdentifier } = splitProtocolNetworkIdentifier(key);
26
+ return identifiersSet.has(protocolIdentifier)
27
+ ? [key, 'fully']
28
+ : mainIdentifiersSet.has(protocolIdentifier)
29
+ ? [key, 'partially']
30
+ : undefined;
31
+ })
32
+ .filter((key) => key !== undefined);
33
+ protocolKeys.forEach(([key, mode]) => {
34
+ if (mode === 'fully') {
35
+ delete this._activeProtocols[key];
36
+ delete this._passiveProtocols[key];
37
+ }
38
+ else {
39
+ identifiers.forEach((identifier) => {
40
+ // eslint-disable-next-line no-unused-expressions
41
+ this._activeProtocols[key] && delete this._activeProtocols[key][identifier];
42
+ // eslint-disable-next-line no-unused-expressions
43
+ this._passiveProtocols[key] && delete this._passiveProtocols[key][identifier];
44
+ });
45
+ }
46
+ });
47
+ // reset supported protocols
48
+ this._supportedProtocols = undefined;
49
+ }
50
+ isIdentifierValid(identifier) {
51
+ const mainIdentifier = getMainIdentifier(identifier);
52
+ return (Object.values(SubProtocolSymbols).includes(identifier) ||
53
+ this.ethTokenIdentifiers.has(identifier) ||
54
+ (Object.values(MainProtocolSymbols).includes(mainIdentifier) && identifier !== mainIdentifier) ||
55
+ identifier.includes('-'));
56
+ }
57
+ async getProtocolByIdentifier(identifier, network, activeOnly = true, retry = true) {
58
+ try {
59
+ const mainIdentifier = getMainIdentifier(identifier);
60
+ const targetNetwork = await this.getTargetNetwork(mainIdentifier, network);
61
+ const protocolAndNetworkIdentifier = await this.getProtocolAndNetworkIdentifier(mainIdentifier, targetNetwork);
62
+ const subProtocolsMap = activeOnly ? this.activeProtocols : await this.supportedProtocols;
63
+ const found = (subProtocolsMap[protocolAndNetworkIdentifier] ?? {})[identifier];
64
+ if (!found && retry) {
65
+ const mainnetProtocol = await this.getProtocolByIdentifier(identifier, undefined, activeOnly, false);
66
+ if (mainnetProtocol === undefined) {
67
+ const protocols = Object.values(subProtocolsMap).map((values) => values[identifier]);
68
+ const filtered = await Promise.all(protocols.map(async (protocol) => {
69
+ return protocol && (await protocol.getIdentifier()) === identifier ? protocol : undefined;
70
+ }));
71
+ return filtered.find((protocol) => protocol !== undefined);
72
+ }
73
+ return mainnetProtocol;
74
+ }
75
+ return found;
76
+ }
77
+ catch (error) {
78
+ // eslint-disable-next-line no-console
79
+ console.warn('[SubProtocolStore:getProtocolByIdentifer]', error);
80
+ return undefined;
81
+ }
82
+ }
83
+ async getNetworksForProtocol(identifier, activeOnly = true) {
84
+ const subProtocolsMap = activeOnly ? this.activeProtocols : await this.supportedProtocols;
85
+ const networks = await Promise.all(Object.values(subProtocolsMap).map(async (entry) => {
86
+ const protocol = entry[identifier];
87
+ return protocol ? (await protocol.getOptions()).network : undefined;
88
+ }));
89
+ return networks.filter((network) => network !== undefined);
90
+ }
91
+ async transformConfig(config) {
92
+ const [passiveProtocols, activeProtocols] = await Promise.all([
93
+ this.createSubProtocolMap(config.passiveSubProtocols),
94
+ this.createSubProtocolMap(config.activeSubProtocols)
95
+ ]);
96
+ return { ...config, passiveProtocols, activeProtocols };
97
+ }
98
+ async mergeProtocols(protocols1, protocols2) {
99
+ return this.mergeSubProtocolMaps(protocols1, protocols2);
100
+ }
101
+ async removeProtocolDuplicates() {
102
+ // if a sub protocol has been set as passive and active, it's considered active
103
+ const passiveEntries = Object.entries(this.passiveProtocols)
104
+ .map(([protocolAndNetworkIdentifier, subProtocols]) => Object.keys(subProtocols).map((subProtocol) => [protocolAndNetworkIdentifier, subProtocol]))
105
+ .reduce((flatten, toFlatten) => flatten.concat(toFlatten), []);
106
+ const filtered = {};
107
+ passiveEntries.forEach(([protocolAndNetworkIdentifier, subProtocolIdentifier]) => {
108
+ if (this.activeProtocols[protocolAndNetworkIdentifier] === undefined ||
109
+ this.activeProtocols[protocolAndNetworkIdentifier][subProtocolIdentifier] === undefined) {
110
+ if (filtered[protocolAndNetworkIdentifier] === undefined) {
111
+ filtered[protocolAndNetworkIdentifier] = {};
112
+ }
113
+ filtered[protocolAndNetworkIdentifier][subProtocolIdentifier] =
114
+ this.passiveProtocols[protocolAndNetworkIdentifier][subProtocolIdentifier];
115
+ }
116
+ });
117
+ this._passiveProtocols = filtered;
118
+ }
119
+ async createSubProtocolMap(protocols) {
120
+ const subProtocolMap = {};
121
+ for (const [protocol, subProtocol] of protocols) {
122
+ const [protocolIdentifier, protocolOptions, subProtocolIdentifier, subProtocolName, subProtocolOptions] = await Promise.all([
123
+ protocol.getIdentifier(),
124
+ protocol.getOptions(),
125
+ subProtocol.getIdentifier(),
126
+ subProtocol.getName(),
127
+ subProtocol.getOptions()
128
+ ]);
129
+ if (!subProtocolIdentifier.startsWith(protocolIdentifier)) {
130
+ throw new Error(`Sub protocol ${subProtocolName} is not supported for protocol ${protocolIdentifier}.`);
131
+ }
132
+ if (!isNetworkEqual(protocolOptions.network, subProtocolOptions.network)) {
133
+ throw new Error(`Sub protocol ${subProtocolName} must have the same network as the main protocol.`);
134
+ }
135
+ const protocolAndNetworkIdentifier = await this.getProtocolAndNetworkIdentifier(protocol);
136
+ if (subProtocolMap[protocolAndNetworkIdentifier] === undefined) {
137
+ subProtocolMap[protocolAndNetworkIdentifier] = {};
138
+ }
139
+ subProtocolMap[protocolAndNetworkIdentifier][subProtocolIdentifier] = subProtocol;
140
+ }
141
+ return subProtocolMap;
142
+ }
143
+ async mergeSubProtocolMaps(first, second) {
144
+ if (Array.isArray(first) && Array.isArray(second)) {
145
+ return this.createSubProtocolMap(first.concat(second));
146
+ }
147
+ const firstMap = Array.isArray(first) ? await this.createSubProtocolMap(first) : first;
148
+ const secondMap = Array.isArray(second) ? await this.createSubProtocolMap(second) : second;
149
+ const mergedMap = {};
150
+ Object.entries(firstMap)
151
+ .concat(Object.entries(secondMap))
152
+ .forEach(([protocolAndNetworkIdentifier, subProtocols]) => {
153
+ if (mergedMap[protocolAndNetworkIdentifier] === undefined) {
154
+ mergedMap[protocolAndNetworkIdentifier] = subProtocols;
155
+ }
156
+ else {
157
+ mergedMap[protocolAndNetworkIdentifier] = {
158
+ ...mergedMap[protocolAndNetworkIdentifier],
159
+ ...subProtocols
160
+ };
161
+ }
162
+ });
163
+ return mergedMap;
164
+ }
165
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SubProtocolStoreService, deps: [{ token: i1.BaseEnvironmentService }, { token: i2.ModulesController }], target: i0.ɵɵFactoryTarget.Injectable }); }
166
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SubProtocolStoreService, providedIn: 'root' }); }
167
+ }
168
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SubProtocolStoreService, decorators: [{
169
+ type: Injectable,
170
+ args: [{
171
+ providedIn: 'root'
172
+ }]
173
+ }], ctorParameters: () => [{ type: i1.BaseEnvironmentService }, { type: i2.ModulesController }] });
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLXByb3RvY29sLXN0b3JlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3Byb3RvY29sL3N0b3JlL3N1Yi9zdWItcHJvdG9jb2wtc3RvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzFDLE9BQU8sRUFJTCxrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZixNQUFNLDRCQUE0QixDQUFBO0FBQ25DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQTtBQUNsRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQTtBQUV2RyxPQUFPLEVBQUUsd0JBQXdCLEVBQTJCLE1BQU0sZ0NBQWdDLENBQUE7Ozs7QUFrQmxHLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSx3QkFLNUM7SUFHQyxZQUFZLFdBQW1DLEVBQUUsaUJBQW9DO1FBQ25GLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtJQUM3RCxDQUFDO0lBRUQsSUFBWSxtQkFBbUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBWSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQUN4RyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUE7SUFDakMsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQUMsV0FBaUM7UUFDNUQsTUFBTSxjQUFjLEdBQWdCLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3hELE1BQU0sa0JBQWtCLEdBQWdCLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFBO1FBQ25GLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUM7YUFDNUQsR0FBRyxDQUFDLENBQUMsR0FBVyxFQUErQyxFQUFFO1lBQ2hFLE1BQU0sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUU1RSxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7Z0JBQzNDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7b0JBQzVDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUM7b0JBQ3BCLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFDZixDQUFDLENBQUM7YUFDRCxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQTtRQUVyQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNuQyxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ2pDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ3BDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBOEIsRUFBRSxFQUFFO29CQUNyRCxpREFBaUQ7b0JBQ2pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtvQkFDM0UsaURBQWlEO29CQUNqRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUE7Z0JBQy9FLENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUE7SUFDdEMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLFVBQWtCO1FBQ3pDLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLFVBQWdDLENBQUMsQ0FBQTtRQUUxRSxPQUFPLENBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFnQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQ3hDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxVQUFVLEtBQUssY0FBYyxDQUFDO1lBQzlGLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQ3pCLENBQUE7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLHVCQUF1QixDQUNsQyxVQUE4QixFQUM5QixPQUFrQyxFQUNsQyxhQUFzQixJQUFJLEVBQzFCLFFBQWlCLElBQUk7UUFFckIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxjQUFjLEdBQXdCLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ3pFLE1BQU0sYUFBYSxHQUF5QyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDaEgsTUFBTSw0QkFBNEIsR0FBVyxNQUFNLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUE7WUFFdEgsTUFBTSxlQUFlLEdBQW9CLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUE7WUFDMUcsTUFBTSxLQUFLLEdBQUcsQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUUvRSxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNwQixNQUFNLGVBQWUsR0FBaUMsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUE7Z0JBQ2xJLElBQUksZUFBZSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNsQyxNQUFNLFNBQVMsR0FBcUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO29CQUN0SCxNQUFNLFFBQVEsR0FBcUMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNsRSxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFzQyxFQUFFLEVBQUU7d0JBQzdELE9BQU8sUUFBUSxJQUFJLENBQUMsTUFBTSxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO29CQUMzRixDQUFDLENBQUMsQ0FDSCxDQUFBO29CQUVELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQXNDLEVBQUUsRUFBRSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQTtnQkFDMUYsQ0FBQztnQkFFRCxPQUFPLGVBQWUsQ0FBQTtZQUN4QixDQUFDO1lBRUQsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBRWhFLE9BQU8sU0FBUyxDQUFBO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLHNCQUFzQixDQUFDLFVBQThCLEVBQUUsYUFBc0IsSUFBSTtRQUM1RixNQUFNLGVBQWUsR0FBb0IsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQTtRQUMxRyxNQUFNLFFBQVEsR0FBb0MsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNqRSxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDakQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBRWxDLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFDckUsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtRQUVELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQW9DLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQTtJQUN6RixDQUFDO0lBRVMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUE4QjtRQUM1RCxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEdBQXNCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUMvRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDO1lBQ3JELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUM7U0FDckQsQ0FBQyxDQUFBO1FBRUYsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxDQUFBO0lBQ3pELENBQUM7SUFFUyxLQUFLLENBQUMsY0FBYyxDQUFDLFVBQTJCLEVBQUUsVUFBMkI7UUFDckYsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQzFELENBQUM7SUFFUyxLQUFLLENBQUMsd0JBQXdCO1FBQ3RDLCtFQUErRTtRQUMvRSxNQUFNLGNBQWMsR0FBbUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7YUFDekYsR0FBRyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsRUFBRSxZQUFZLENBQWlGLEVBQUUsRUFBRSxDQUNwSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsNEJBQTRCLEVBQUUsV0FBVyxDQUFpQyxDQUFDLENBQ3BJO2FBQ0EsTUFBTSxDQUFDLENBQUMsT0FBdUMsRUFBRSxTQUF5QyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWhJLE1BQU0sUUFBUSxHQUFvQixFQUFFLENBQUE7UUFFcEMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsNEJBQTRCLEVBQUUscUJBQXFCLENBQStCLEVBQUUsRUFBRTtZQUM3RyxJQUNFLElBQUksQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQUMsS0FBSyxTQUFTO2dCQUNoRSxJQUFJLENBQUMsZUFBZSxDQUFDLDRCQUE0QixDQUFDLENBQUMscUJBQXFCLENBQUMsS0FBSyxTQUFTLEVBQ3ZGLENBQUM7Z0JBQ0QsSUFBSSxRQUFRLENBQUMsNEJBQTRCLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDekQsUUFBUSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsRUFBRSxDQUFBO2dCQUM3QyxDQUFDO2dCQUVELFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO29CQUMzRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO1lBQzlFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUE7SUFDbkMsQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxTQUE4QztRQUMvRSxNQUFNLGNBQWMsR0FBb0IsRUFBRSxDQUFBO1FBRTFDLEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNoRCxNQUFNLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDMUgsUUFBUSxDQUFDLGFBQWEsRUFBRTtnQkFDeEIsUUFBUSxDQUFDLFVBQVUsRUFBRTtnQkFDckIsV0FBVyxDQUFDLGFBQWEsRUFBRTtnQkFDM0IsV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFDckIsV0FBVyxDQUFDLFVBQVUsRUFBRTthQUN6QixDQUFDLENBQUE7WUFFRixJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztnQkFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsZUFBZSxrQ0FBa0Msa0JBQWtCLEdBQUcsQ0FBQyxDQUFBO1lBQ3pHLENBQUM7WUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDekUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsZUFBZSxtREFBbUQsQ0FBQyxDQUFBO1lBQ3JHLENBQUM7WUFFRCxNQUFNLDRCQUE0QixHQUFXLE1BQU0sSUFBSSxDQUFDLCtCQUErQixDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBRWpHLElBQUksY0FBYyxDQUFDLDRCQUE0QixDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQy9ELGNBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtZQUNuRCxDQUFDO1lBRUQsY0FBYyxDQUFDLDRCQUE0QixDQUFDLENBQUMscUJBQTJDLENBQUMsR0FBRyxXQUFXLENBQUE7UUFDekcsQ0FBQztRQUVELE9BQU8sY0FBYyxDQUFBO0lBQ3ZCLENBQUM7SUFFTyxLQUFLLENBQUMsb0JBQW9CLENBQ2hDLEtBQTRELEVBQzVELE1BQTZEO1FBRTdELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ3hELENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBb0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtRQUN2RyxNQUFNLFNBQVMsR0FBb0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtRQUUzRyxNQUFNLFNBQVMsR0FBb0IsRUFBRSxDQUFBO1FBRXJDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO2FBQ3JCLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ2pDLE9BQU8sQ0FDTixDQUFDLENBQUMsNEJBQTRCLEVBQUUsWUFBWSxDQUFpRixFQUFFLEVBQUU7WUFDL0gsSUFBSSxTQUFTLENBQUMsNEJBQTRCLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDMUQsU0FBUyxDQUFDLDRCQUE0QixDQUFDLEdBQUcsWUFBWSxDQUFBO1lBQ3hELENBQUM7aUJBQU0sQ0FBQztnQkFDTixTQUFTLENBQUMsNEJBQTRCLENBQUMsR0FBRztvQkFDeEMsR0FBRyxTQUFTLENBQUMsNEJBQTRCLENBQUM7b0JBQzFDLEdBQUcsWUFBWTtpQkFDaEIsQ0FBQTtZQUNILENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FBQTtRQUVILE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7K0dBek5VLHVCQUF1QjttSEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIElDb2luUHJvdG9jb2wsXG4gIElDb2luU3ViUHJvdG9jb2wsXG4gIFByb3RvY29sTmV0d29yayxcbiAgU3ViUHJvdG9jb2xTeW1ib2xzLFxuICBNYWluUHJvdG9jb2xTeW1ib2xzLFxuICBpc05ldHdvcmtFcXVhbFxufSBmcm9tICdAd2FsbGZyZWUtZGV2L2NvaW5saWItY29yZSdcbmltcG9ydCB7IGVyYzIwVG9rZW5zIH0gZnJvbSAnQHdhbGxmcmVlLWRldi9ldGhlcmV1bSdcbmltcG9ydCB7IGdldE1haW5JZGVudGlmaWVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvcHJvdG9jb2wvcHJvdG9jb2wtaWRlbnRpZmllcidcbmltcG9ydCB7IHNwbGl0UHJvdG9jb2xOZXR3b3JrSWRlbnRpZmllciB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL3Byb3RvY29sL3Byb3RvY29sLW5ldHdvcmstaWRlbnRpZmllcidcbmltcG9ydCB7IFRva2VuIH0gZnJvbSAnLi4vLi4vLi4vLi4vdHlwZXMvVG9rZW4nXG5pbXBvcnQgeyBCYXNlUHJvdG9jb2xTdG9yZVNlcnZpY2UsIEJhc2VQcm90b2NvbFN0b3JlQ29uZmlnIH0gZnJvbSAnLi4vYmFzZS1wcm90b2NvbC1zdG9yZS5zZXJ2aWNlJ1xuaW1wb3J0IHsgTW9kdWxlc0NvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi8uLi9tb2R1bGVzL2NvbnRyb2xsZXIvbW9kdWxlcy5jb250cm9sbGVyJ1xuaW1wb3J0IHsgQmFzZUVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50L2Jhc2UtZW52aXJvbm1lbnQuc2VydmljZSdcblxuZXhwb3J0IGludGVyZmFjZSBTdWJQcm90b2NvbHNNYXAge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgW3N1YlByb3RvY29sSWRlbnRpZmllciBpbiBTdWJQcm90b2NvbFN5bWJvbHNdPzogSUNvaW5TdWJQcm90b2NvbFxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViUHJvdG9jb2xTdG9yZUNvbmZpZyB7XG4gIHBhc3NpdmVTdWJQcm90b2NvbHM6IFtJQ29pblByb3RvY29sLCBJQ29pblN1YlByb3RvY29sXVtdXG4gIGFjdGl2ZVN1YlByb3RvY29sczogW0lDb2luUHJvdG9jb2wsIElDb2luU3ViUHJvdG9jb2xdW11cbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU3ViUHJvdG9jb2xTdG9yZVNlcnZpY2UgZXh0ZW5kcyBCYXNlUHJvdG9jb2xTdG9yZVNlcnZpY2U8XG4gIElDb2luU3ViUHJvdG9jb2wsXG4gIFN1YlByb3RvY29sU3ltYm9scyxcbiAgU3ViUHJvdG9jb2xzTWFwLFxuICBTdWJQcm90b2NvbFN0b3JlQ29uZmlnXG4+IHtcbiAgcHJpdmF0ZSBfZXRoVG9rZW5JZGVudGlmZXJzOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZFxuXG4gIGNvbnN0cnVjdG9yKGVudmlyb25tZW50OiBCYXNlRW52aXJvbm1lbnRTZXJ2aWNlLCBtb2R1bGVzQ29udHJvbGxlcjogTW9kdWxlc0NvbnRyb2xsZXIpIHtcbiAgICBzdXBlcignU3ViUHJvdG9jb2xTZXJ2aWNlJywgZW52aXJvbm1lbnQsIG1vZHVsZXNDb250cm9sbGVyKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZXRoVG9rZW5JZGVudGlmaWVycygpOiBTZXQ8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuX2V0aFRva2VuSWRlbnRpZmVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9ldGhUb2tlbklkZW50aWZlcnMgPSBuZXcgU2V0KE9iamVjdC52YWx1ZXMoZXJjMjBUb2tlbnMpLm1hcCgodG9rZW46IFRva2VuKSA9PiB0b2tlbi5pZGVudGlmaWVyKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZXRoVG9rZW5JZGVudGlmZXJzXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVtb3ZlUHJvdG9jb2xzKGlkZW50aWZpZXJzOiBTdWJQcm90b2NvbFN5bWJvbHNbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlkZW50aWZpZXJzU2V0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoaWRlbnRpZmllcnMpXG4gICAgY29uc3QgbWFpbklkZW50aWZpZXJzU2V0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoaWRlbnRpZmllcnMubWFwKGdldE1haW5JZGVudGlmaWVyKSlcbiAgICBjb25zdCBwcm90b2NvbEtleXMgPSBPYmplY3Qua2V5cyhhd2FpdCB0aGlzLnN1cHBvcnRlZFByb3RvY29scylcbiAgICAgIC5tYXAoKGtleTogc3RyaW5nKTogW3N0cmluZywgJ2Z1bGx5JyB8ICdwYXJ0aWFsbHknXSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgIGNvbnN0IHsgcHJvdG9jb2w6IHByb3RvY29sSWRlbnRpZmllciB9ID0gc3BsaXRQcm90b2NvbE5ldHdvcmtJZGVudGlmaWVyKGtleSlcblxuICAgICAgICByZXR1cm4gaWRlbnRpZmllcnNTZXQuaGFzKHByb3RvY29sSWRlbnRpZmllcilcbiAgICAgICAgICA/IFtrZXksICdmdWxseSddXG4gICAgICAgICAgOiBtYWluSWRlbnRpZmllcnNTZXQuaGFzKHByb3RvY29sSWRlbnRpZmllcilcbiAgICAgICAgICA/IFtrZXksICdwYXJ0aWFsbHknXVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09IHVuZGVmaW5lZClcblxuICAgIHByb3RvY29sS2V5cy5mb3JFYWNoKChba2V5LCBtb2RlXSkgPT4ge1xuICAgICAgaWYgKG1vZGUgPT09ICdmdWxseScpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2FjdGl2ZVByb3RvY29sc1trZXldXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9wYXNzaXZlUHJvdG9jb2xzW2tleV1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlkZW50aWZpZXJzLmZvckVhY2goKGlkZW50aWZpZXI6IFN1YlByb3RvY29sU3ltYm9scykgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgICAgICB0aGlzLl9hY3RpdmVQcm90b2NvbHNba2V5XSAmJiBkZWxldGUgdGhpcy5fYWN0aXZlUHJvdG9jb2xzW2tleV1baWRlbnRpZmllcl1cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gICAgICAgICAgdGhpcy5fcGFzc2l2ZVByb3RvY29sc1trZXldICYmIGRlbGV0ZSB0aGlzLl9wYXNzaXZlUHJvdG9jb2xzW2tleV1baWRlbnRpZmllcl1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gcmVzZXQgc3VwcG9ydGVkIHByb3RvY29sc1xuICAgIHRoaXMuX3N1cHBvcnRlZFByb3RvY29scyA9IHVuZGVmaW5lZFxuICB9XG5cbiAgcHVibGljIGlzSWRlbnRpZmllclZhbGlkKGlkZW50aWZpZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1haW5JZGVudGlmaWVyID0gZ2V0TWFpbklkZW50aWZpZXIoaWRlbnRpZmllciBhcyBTdWJQcm90b2NvbFN5bWJvbHMpXG5cbiAgICByZXR1cm4gKFxuICAgICAgT2JqZWN0LnZhbHVlcyhTdWJQcm90b2NvbFN5bWJvbHMpLmluY2x1ZGVzKGlkZW50aWZpZXIgYXMgU3ViUHJvdG9jb2xTeW1ib2xzKSB8fFxuICAgICAgdGhpcy5ldGhUb2tlbklkZW50aWZpZXJzLmhhcyhpZGVudGlmaWVyKSB8fFxuICAgICAgKE9iamVjdC52YWx1ZXMoTWFpblByb3RvY29sU3ltYm9scykuaW5jbHVkZXMobWFpbklkZW50aWZpZXIpICYmIGlkZW50aWZpZXIgIT09IG1haW5JZGVudGlmaWVyKSB8fFxuICAgICAgaWRlbnRpZmllci5pbmNsdWRlcygnLScpXG4gICAgKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFByb3RvY29sQnlJZGVudGlmaWVyKFxuICAgIGlkZW50aWZpZXI6IFN1YlByb3RvY29sU3ltYm9scyxcbiAgICBuZXR3b3JrPzogUHJvdG9jb2xOZXR3b3JrIHwgc3RyaW5nLFxuICAgIGFjdGl2ZU9ubHk6IGJvb2xlYW4gPSB0cnVlLFxuICAgIHJldHJ5OiBib29sZWFuID0gdHJ1ZVxuICApOiBQcm9taXNlPElDb2luU3ViUHJvdG9jb2wgfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWFpbklkZW50aWZpZXI6IE1haW5Qcm90b2NvbFN5bWJvbHMgPSBnZXRNYWluSWRlbnRpZmllcihpZGVudGlmaWVyKVxuICAgICAgY29uc3QgdGFyZ2V0TmV0d29yazogUHJvdG9jb2xOZXR3b3JrIHwgc3RyaW5nIHwgdW5kZWZpbmVkID0gYXdhaXQgdGhpcy5nZXRUYXJnZXROZXR3b3JrKG1haW5JZGVudGlmaWVyLCBuZXR3b3JrKVxuICAgICAgY29uc3QgcHJvdG9jb2xBbmROZXR3b3JrSWRlbnRpZmllcjogc3RyaW5nID0gYXdhaXQgdGhpcy5nZXRQcm90b2NvbEFuZE5ldHdvcmtJZGVudGlmaWVyKG1haW5JZGVudGlmaWVyLCB0YXJnZXROZXR3b3JrKVxuXG4gICAgICBjb25zdCBzdWJQcm90b2NvbHNNYXA6IFN1YlByb3RvY29sc01hcCA9IGFjdGl2ZU9ubHkgPyB0aGlzLmFjdGl2ZVByb3RvY29scyA6IGF3YWl0IHRoaXMuc3VwcG9ydGVkUHJvdG9jb2xzXG4gICAgICBjb25zdCBmb3VuZCA9IChzdWJQcm90b2NvbHNNYXBbcHJvdG9jb2xBbmROZXR3b3JrSWRlbnRpZmllcl0gPz8ge30pW2lkZW50aWZpZXJdXG5cbiAgICAgIGlmICghZm91bmQgJiYgcmV0cnkpIHtcbiAgICAgICAgY29uc3QgbWFpbm5ldFByb3RvY29sOiBJQ29pblN1YlByb3RvY29sIHwgdW5kZWZpbmVkID0gYXdhaXQgdGhpcy5nZXRQcm90b2NvbEJ5SWRlbnRpZmllcihpZGVudGlmaWVyLCB1bmRlZmluZWQsIGFjdGl2ZU9ubHksIGZhbHNlKVxuICAgICAgICBpZiAobWFpbm5ldFByb3RvY29sID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBwcm90b2NvbHM6IChJQ29pblN1YlByb3RvY29sIHwgdW5kZWZpbmVkKVtdID0gT2JqZWN0LnZhbHVlcyhzdWJQcm90b2NvbHNNYXApLm1hcCgodmFsdWVzKSA9PiB2YWx1ZXNbaWRlbnRpZmllcl0pXG4gICAgICAgICAgY29uc3QgZmlsdGVyZWQ6IChJQ29pblN1YlByb3RvY29sIHwgdW5kZWZpbmVkKVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBwcm90b2NvbHMubWFwKGFzeW5jIChwcm90b2NvbDogSUNvaW5TdWJQcm90b2NvbCB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gcHJvdG9jb2wgJiYgKGF3YWl0IHByb3RvY29sLmdldElkZW50aWZpZXIoKSkgPT09IGlkZW50aWZpZXIgPyBwcm90b2NvbCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG5cbiAgICAgICAgICByZXR1cm4gZmlsdGVyZWQuZmluZCgocHJvdG9jb2w6IElDb2luU3ViUHJvdG9jb2wgfCB1bmRlZmluZWQpID0+IHByb3RvY29sICE9PSB1bmRlZmluZWQpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWFpbm5ldFByb3RvY29sXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3VuZFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKCdbU3ViUHJvdG9jb2xTdG9yZTpnZXRQcm90b2NvbEJ5SWRlbnRpZmVyXScsIGVycm9yKVxuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE5ldHdvcmtzRm9yUHJvdG9jb2woaWRlbnRpZmllcjogU3ViUHJvdG9jb2xTeW1ib2xzLCBhY3RpdmVPbmx5OiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8UHJvdG9jb2xOZXR3b3JrW10+IHtcbiAgICBjb25zdCBzdWJQcm90b2NvbHNNYXA6IFN1YlByb3RvY29sc01hcCA9IGFjdGl2ZU9ubHkgPyB0aGlzLmFjdGl2ZVByb3RvY29scyA6IGF3YWl0IHRoaXMuc3VwcG9ydGVkUHJvdG9jb2xzXG4gICAgY29uc3QgbmV0d29ya3M6IChQcm90b2NvbE5ldHdvcmsgfCB1bmRlZmluZWQpW10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC52YWx1ZXMoc3ViUHJvdG9jb2xzTWFwKS5tYXAoYXN5bmMgKGVudHJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gZW50cnlbaWRlbnRpZmllcl1cblxuICAgICAgICByZXR1cm4gcHJvdG9jb2wgPyAoYXdhaXQgcHJvdG9jb2wuZ2V0T3B0aW9ucygpKS5uZXR3b3JrIDogdW5kZWZpbmVkXG4gICAgICB9KVxuICAgIClcblxuICAgIHJldHVybiBuZXR3b3Jrcy5maWx0ZXIoKG5ldHdvcms6IFByb3RvY29sTmV0d29yayB8IHVuZGVmaW5lZCkgPT4gbmV0d29yayAhPT0gdW5kZWZpbmVkKVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHRyYW5zZm9ybUNvbmZpZyhjb25maWc6IFN1YlByb3RvY29sU3RvcmVDb25maWcpOiBQcm9taXNlPEJhc2VQcm90b2NvbFN0b3JlQ29uZmlnPFN1YlByb3RvY29sc01hcD4+IHtcbiAgICBjb25zdCBbcGFzc2l2ZVByb3RvY29scywgYWN0aXZlUHJvdG9jb2xzXTogU3ViUHJvdG9jb2xzTWFwW10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmNyZWF0ZVN1YlByb3RvY29sTWFwKGNvbmZpZy5wYXNzaXZlU3ViUHJvdG9jb2xzKSxcbiAgICAgIHRoaXMuY3JlYXRlU3ViUHJvdG9jb2xNYXAoY29uZmlnLmFjdGl2ZVN1YlByb3RvY29scylcbiAgICBdKVxuXG4gICAgcmV0dXJuIHsgLi4uY29uZmlnLCBwYXNzaXZlUHJvdG9jb2xzLCBhY3RpdmVQcm90b2NvbHMgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG1lcmdlUHJvdG9jb2xzKHByb3RvY29sczE6IFN1YlByb3RvY29sc01hcCwgcHJvdG9jb2xzMjogU3ViUHJvdG9jb2xzTWFwKTogUHJvbWlzZTxTdWJQcm90b2NvbHNNYXA+IHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZVN1YlByb3RvY29sTWFwcyhwcm90b2NvbHMxLCBwcm90b2NvbHMyKVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlbW92ZVByb3RvY29sRHVwbGljYXRlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBpZiBhIHN1YiBwcm90b2NvbCBoYXMgYmVlbiBzZXQgYXMgcGFzc2l2ZSBhbmQgYWN0aXZlLCBpdCdzIGNvbnNpZGVyZWQgYWN0aXZlXG4gICAgY29uc3QgcGFzc2l2ZUVudHJpZXM6IFtzdHJpbmcsIFN1YlByb3RvY29sU3ltYm9sc11bXSA9IE9iamVjdC5lbnRyaWVzKHRoaXMucGFzc2l2ZVByb3RvY29scylcbiAgICAgIC5tYXAoKFtwcm90b2NvbEFuZE5ldHdvcmtJZGVudGlmaWVyLCBzdWJQcm90b2NvbHNdOiBbc3RyaW5nLCB7IFtzdWJQcm90b2NvbElkZW50aWZpZXIgaW4gU3ViUHJvdG9jb2xTeW1ib2xzXT86IElDb2luU3ViUHJvdG9jb2wgfV0pID0+XG4gICAgICAgIE9iamVjdC5rZXlzKHN1YlByb3RvY29scykubWFwKChzdWJQcm90b2NvbDogc3RyaW5nKSA9PiBbcHJvdG9jb2xBbmROZXR3b3JrSWRlbnRpZmllciwgc3ViUHJvdG9jb2xdIGFzIFtzdHJpbmcsIFN1YlByb3RvY29sU3ltYm9sc10pXG4gICAgICApXG4gICAgICAucmVkdWNlKChmbGF0dGVuOiBbc3RyaW5nLCBTdWJQcm90b2NvbFN5bWJvbHNdW10sIHRvRmxhdHRlbjogW3N0cmluZywgU3ViUHJvdG9jb2xTeW1ib2xzXVtdKSA9PiBmbGF0dGVuLmNvbmNhdCh0b0ZsYXR0ZW4pLCBbXSlcblxuICAgIGNvbnN0IGZpbHRlcmVkOiBTdWJQcm90b2NvbHNNYXAgPSB7fVxuXG4gICAgcGFzc2l2ZUVudHJpZXMuZm9yRWFjaCgoW3Byb3RvY29sQW5kTmV0d29ya0lkZW50aWZpZXIsIHN1YlByb3RvY29sSWRlbnRpZmllcl06IFtzdHJpbmcsIFN1YlByb3RvY29sU3ltYm9sc10pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5hY3RpdmVQcm90b2NvbHNbcHJvdG9jb2xBbmROZXR3b3JrSWRlbnRpZmllcl0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB0aGlzLmFjdGl2ZVByb3RvY29sc1twcm90b2NvbEFuZE5ldHdvcmtJZGVudGlmaWVyXVtzdWJQcm90b2NvbElkZW50aWZpZXJdID09PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICBpZiAoZmlsdGVyZWRbcHJvdG9jb2xBbmROZXR3b3JrSWRlbnRpZmllcl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZpbHRlcmVkW3Byb3RvY29sQW5kTmV0d29ya0lkZW50aWZpZXJdID0ge31cbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlcmVkW3Byb3RvY29sQW5kTmV0d29ya0lkZW50aWZpZXJdW3N1YlByb3RvY29sSWRlbnRpZmllcl0gPVxuICAgICAgICAgIHRoaXMucGFzc2l2ZVByb3RvY29sc1twcm90b2NvbEFuZE5ldHdvcmtJZGVudGlmaWVyXVtzdWJQcm90b2NvbElkZW50aWZpZXJdXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuX3Bhc3NpdmVQcm90b2NvbHMgPSBmaWx0ZXJlZFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVTdWJQcm90b2NvbE1hcChwcm90b2NvbHM6IFtJQ29pblByb3RvY29sLCBJQ29pblN1YlByb3RvY29sXVtdKTogUHJvbWlzZTxTdWJQcm90b2NvbHNNYXA+IHtcbiAgICBjb25zdCBzdWJQcm90b2NvbE1hcDogU3ViUHJvdG9jb2xzTWFwID0ge31cblxuICAgIGZvciAoY29uc3QgW3Byb3RvY29sLCBzdWJQcm90b2NvbF0gb2YgcHJvdG9jb2xzKSB7XG4gICAgICBjb25zdCBbcHJvdG9jb2xJZGVudGlmaWVyLCBwcm90b2NvbE9wdGlvbnMsIHN1YlByb3RvY29sSWRlbnRpZmllciwgc3ViUHJvdG9jb2xOYW1lLCBzdWJQcm90b2NvbE9wdGlvbnNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBwcm90b2NvbC5nZXRJZGVudGlmaWVyKCksXG4gICAgICAgIHByb3RvY29sLmdldE9wdGlvbnMoKSxcbiAgICAgICAgc3ViUHJvdG9jb2wuZ2V0SWRlbnRpZmllcigpLFxuICAgICAgICBzdWJQcm90b2NvbC5nZXROYW1lKCksXG4gICAgICAgIHN1YlByb3RvY29sLmdldE9wdGlvbnMoKVxuICAgICAgXSlcblxuICAgICAgaWYgKCFzdWJQcm90b2NvbElkZW50aWZpZXIuc3RhcnRzV2l0aChwcm90b2NvbElkZW50aWZpZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU3ViIHByb3RvY29sICR7c3ViUHJvdG9jb2xOYW1lfSBpcyBub3Qgc3VwcG9ydGVkIGZvciBwcm90b2NvbCAke3Byb3RvY29sSWRlbnRpZmllcn0uYClcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05ldHdvcmtFcXVhbChwcm90b2NvbE9wdGlvbnMubmV0d29yaywgc3ViUHJvdG9jb2xPcHRpb25zLm5ldHdvcmspKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU3ViIHByb3RvY29sICR7c3ViUHJvdG9jb2xOYW1lfSBtdXN0IGhhdmUgdGhlIHNhbWUgbmV0d29yayBhcyB0aGUgbWFpbiBwcm90b2NvbC5gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm90b2NvbEFuZE5ldHdvcmtJZGVudGlmaWVyOiBzdHJpbmcgPSBhd2FpdCB0aGlzLmdldFByb3RvY29sQW5kTmV0d29ya0lkZW50aWZpZXIocHJvdG9jb2wpXG5cbiAgICAgIGlmIChzdWJQcm90b2NvbE1hcFtwcm90b2NvbEFuZE5ldHdvcmtJZGVudGlmaWVyXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHN1YlByb3RvY29sTWFwW3Byb3RvY29sQW5kTmV0d29ya0lkZW50aWZpZXJdID0ge31cbiAgICAgIH1cblxuICAgICAgc3ViUHJvdG9jb2xNYXBbcHJvdG9jb2xBbmROZXR3b3JrSWRlbnRpZmllcl1bc3ViUHJvdG9jb2xJZGVudGlmaWVyIGFzIFN1YlByb3RvY29sU3ltYm9sc10gPSBzdWJQcm90b2NvbFxuICAgIH1cblxuICAgIHJldHVybiBzdWJQcm90b2NvbE1hcFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtZXJnZVN1YlByb3RvY29sTWFwcyhcbiAgICBmaXJzdDogW0lDb2luUHJvdG9jb2wsIElDb2luU3ViUHJvdG9jb2xdW10gfCBTdWJQcm90b2NvbHNNYXAsXG4gICAgc2Vjb25kOiBbSUNvaW5Qcm90b2NvbCwgSUNvaW5TdWJQcm90b2NvbF1bXSB8IFN1YlByb3RvY29sc01hcFxuICApOiBQcm9taXNlPFN1YlByb3RvY29sc01hcD4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpcnN0KSAmJiBBcnJheS5pc0FycmF5KHNlY29uZCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVN1YlByb3RvY29sTWFwKGZpcnN0LmNvbmNhdChzZWNvbmQpKVxuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0TWFwOiBTdWJQcm90b2NvbHNNYXAgPSBBcnJheS5pc0FycmF5KGZpcnN0KSA/IGF3YWl0IHRoaXMuY3JlYXRlU3ViUHJvdG9jb2xNYXAoZmlyc3QpIDogZmlyc3RcbiAgICBjb25zdCBzZWNvbmRNYXA6IFN1YlByb3RvY29sc01hcCA9IEFycmF5LmlzQXJyYXkoc2Vjb25kKSA/IGF3YWl0IHRoaXMuY3JlYXRlU3ViUHJvdG9jb2xNYXAoc2Vjb25kKSA6IHNlY29uZFxuXG4gICAgY29uc3QgbWVyZ2VkTWFwOiBTdWJQcm90b2NvbHNNYXAgPSB7fVxuXG4gICAgT2JqZWN0LmVudHJpZXMoZmlyc3RNYXApXG4gICAgICAuY29uY2F0KE9iamVjdC5lbnRyaWVzKHNlY29uZE1hcCkpXG4gICAgICAuZm9yRWFjaChcbiAgICAgICAgKFtwcm90b2NvbEFuZE5ldHdvcmtJZGVudGlmaWVyLCBzdWJQcm90b2NvbHNdOiBbc3RyaW5nLCB7IFtzdWJQcm90b2NvbElkZW50aWZpZXIgaW4gU3ViUHJvdG9jb2xTeW1ib2xzXT86IElDb2luU3ViUHJvdG9jb2wgfV0pID0+IHtcbiAgICAgICAgICBpZiAobWVyZ2VkTWFwW3Byb3RvY29sQW5kTmV0d29ya0lkZW50aWZpZXJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG1lcmdlZE1hcFtwcm90b2NvbEFuZE5ldHdvcmtJZGVudGlmaWVyXSA9IHN1YlByb3RvY29sc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXJnZWRNYXBbcHJvdG9jb2xBbmROZXR3b3JrSWRlbnRpZmllcl0gPSB7XG4gICAgICAgICAgICAgIC4uLm1lcmdlZE1hcFtwcm90b2NvbEFuZE5ldHdvcmtJZGVudGlmaWVyXSxcbiAgICAgICAgICAgICAgLi4uc3ViUHJvdG9jb2xzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG5cbiAgICByZXR1cm4gbWVyZ2VkTWFwXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,127 @@
1
+ import * as bs58check from 'bs58check';
2
+ // import * as ecc from 'tiny-secp256k1'
3
+ import * as ecc from '@bitcoinerlab/secp256k1';
4
+ import { BIP32Factory } from 'bip32';
5
+ // import ecc from 'tiny-secp256k1'
6
+ import { CryptoKeypath, CryptoHDKey, CryptoOutput, ScriptExpressions, CryptoAccount, PathComponent, CryptoPSBT, patchTags } from '@keystonehq/bc-ur-registry';
7
+ import { bufferFrom, MainProtocolSymbols } from '@wallfree-dev/coinlib-core';
8
+ import { IACMessageType } from '@wallfree-dev/serializer';
9
+ import { IACQrGenerator } from '../../iac/qr-generator';
10
+ import { ScriptExpression } from '@keystonehq/bc-ur-registry/dist/ScriptExpression';
11
+ class ExtendedPublicKey {
12
+ constructor(extendedPublicKey) {
13
+ this.rawKey = bs58check.decode(extendedPublicKey).slice(4);
14
+ }
15
+ toXpub() {
16
+ return this.addPrefix('0488b21e');
17
+ }
18
+ toYPub() {
19
+ return this.addPrefix('049d7cb2');
20
+ }
21
+ toZPub() {
22
+ return this.addPrefix('04b24746');
23
+ }
24
+ getRawKey() {
25
+ return this.rawKey;
26
+ }
27
+ addPrefix(prefix) {
28
+ const data = Buffer.concat([bufferFrom(prefix, 'hex'), this.rawKey]);
29
+ return bs58check.encode(data);
30
+ }
31
+ }
32
+ export class BCURTypesGenerator extends IACQrGenerator {
33
+ constructor() {
34
+ super();
35
+ this.bip32 = BIP32Factory(ecc);
36
+ }
37
+ async create(data, multiFragmentLength, singleFragmentLength) {
38
+ if (!(await BCURTypesGenerator.canHandle(data))) {
39
+ return;
40
+ }
41
+ const element = data[0];
42
+ if (element.type === IACMessageType.AccountShareResponse) {
43
+ this.data = await this.generateCryptoAccountMessage(element);
44
+ }
45
+ else if (element.type === IACMessageType.TransactionSignResponse) {
46
+ this.data = await this.generatePSBTMessage(element);
47
+ }
48
+ else {
49
+ throw new Error('Not Supported');
50
+ }
51
+ // We first try to create a larger "single chunk" fragment
52
+ this.encoder = this.data.toUREncoder(singleFragmentLength);
53
+ // If this is not possible, we use the multiFragmentLength
54
+ if (this.encoder.fragmentsLength !== 1) {
55
+ this.encoder = this.data.toUREncoder(multiFragmentLength);
56
+ }
57
+ }
58
+ static async canHandle(data) {
59
+ if (data.length === 1) {
60
+ const element = data[0];
61
+ return ((element.protocol === MainProtocolSymbols.BTC_SEGWIT || element.protocol === MainProtocolSymbols.BTC_TAPROOT) &&
62
+ [IACMessageType.AccountShareResponse, IACMessageType.TransactionSignResponse].includes(element.type));
63
+ }
64
+ return false;
65
+ }
66
+ async nextPart() {
67
+ if (this.encoder) {
68
+ return this.encoder.nextPart().toUpperCase();
69
+ }
70
+ else {
71
+ return '';
72
+ }
73
+ }
74
+ async getSingle() {
75
+ if (this.data) {
76
+ return this.data.toUREncoder(Number.MAX_SAFE_INTEGER).nextPart();
77
+ }
78
+ else {
79
+ return '';
80
+ }
81
+ }
82
+ async getNumberOfParts() {
83
+ return this.encoder?.fragmentsLength ?? 0;
84
+ }
85
+ async generateCryptoAccountMessage(data) {
86
+ const account = data.payload;
87
+ const extendedPublicKey = this.bip32.fromBase58(new ExtendedPublicKey(account.publicKey).toXpub());
88
+ const cryptoKeyPathComponents = [];
89
+ for (const component of account.derivationPath.split('/')) {
90
+ if (component === 'm')
91
+ continue;
92
+ const index = parseInt(component, 10);
93
+ const hardened = component.endsWith('h') || component.endsWith("'");
94
+ cryptoKeyPathComponents.push(new PathComponent({ index, hardened }));
95
+ }
96
+ const parentFingerprint = Buffer.alloc(4);
97
+ parentFingerprint.writeUInt32BE(extendedPublicKey.parentFingerprint, 0);
98
+ const isTaproot = data.protocol === MainProtocolSymbols.BTC_TAPROOT;
99
+ let scriptExpressions = [];
100
+ if (isTaproot) {
101
+ const TR = new ScriptExpression(409, 'tr');
102
+ patchTags([409]);
103
+ scriptExpressions = [TR];
104
+ }
105
+ else {
106
+ scriptExpressions = [ScriptExpressions.WITNESS_PUBLIC_KEY_HASH];
107
+ }
108
+ const cryptoAccount = new CryptoAccount(bufferFrom(account.masterFingerprint, 'hex'), [
109
+ new CryptoOutput(scriptExpressions, new CryptoHDKey({
110
+ isMaster: false,
111
+ key: Buffer.from(extendedPublicKey.publicKey),
112
+ chainCode: Buffer.from(extendedPublicKey.chainCode),
113
+ origin: new CryptoKeypath(cryptoKeyPathComponents, Buffer.from(extendedPublicKey.fingerprint), extendedPublicKey.depth),
114
+ parentFingerprint,
115
+ name: account.groupLabel
116
+ }))
117
+ ]);
118
+ return cryptoAccount;
119
+ }
120
+ async generatePSBTMessage(data) {
121
+ const transaction = data.payload;
122
+ const psbt = bufferFrom(transaction.transaction, 'hex');
123
+ const cryptoPSBT = new CryptoPSBT(psbt);
124
+ return cryptoPSBT;
125
+ }
126
+ }
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmMtdXItZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9xci9xci1nZW5lcmF0b3JzL2JjLXVyLWdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssU0FBUyxNQUFNLFdBQVcsQ0FBQTtBQUN0Qyx3Q0FBd0M7QUFDeEMsT0FBTyxLQUFLLEdBQUcsTUFBTSx5QkFBeUIsQ0FBQTtBQUU5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBQ3BDLG1DQUFtQztBQUVuQyxPQUFPLEVBQ0wsYUFBYSxFQUNiLFdBQVcsRUFDWCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixhQUFhLEVBQ2IsVUFBVSxFQUNWLFNBQVMsRUFDVixNQUFNLDRCQUE0QixDQUFBO0FBRW5DLE9BQU8sRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUM1RSxPQUFPLEVBQXNELGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBRTdHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQTtBQUVuRixNQUFNLGlCQUFpQjtJQUdyQixZQUFZLGlCQUF5QjtRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUVNLE1BQU07UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUVNLE1BQU07UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUVNLE1BQU07UUFDWCxPQUFPLElBQUks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QUcsSUFBSSxDQUFDLE9BQStDLENBQUE7UUFFeEUsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFFdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFdkMsT0FBTyxVQUFVLENBQUE7SUFDbkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbmltcG9ydCB7IFVSRW5jb2RlciB9IGZyb20gJ0BuZ3JhdmVpby9iYy11cidcbmltcG9ydCAqIGFzIGJzNThjaGVjayBmcm9tICdiczU4Y2hlY2snXG4vLyBpbXBvcnQgKiBhcyBlY2MgZnJvbSAndGlueS1zZWNwMjU2azEnXG5pbXBvcnQgKiBhcyBlY2MgZnJvbSAnQGJpdGNvaW5lcmxhYi9zZWNwMjU2azEnXG5cbmltcG9ydCB7IEJJUDMyRmFjdG9yeSB9IGZyb20gJ2JpcDMyJ1xuLy8gaW1wb3J0IGVjYyBmcm9tICd0aW55LXNlY3AyNTZrMSdcblxuaW1wb3J0IHtcbiAgQ3J5cHRvS2V5cGF0aCxcbiAgQ3J5cHRvSERLZXksXG4gIENyeXB0b091dHB1dCxcbiAgU2NyaXB0RXhwcmVzc2lvbnMsXG4gIENyeXB0b0FjY291bnQsXG4gIFBhdGhDb21wb25lbnQsXG4gIENyeXB0b1BTQlQsXG4gIHBhdGNoVGFnc1xufSBmcm9tICdAa2V5c3RvbmVocS9iYy11ci1yZWdpc3RyeSdcbmltcG9ydCB7IEJpdGNvaW5TZWd3aXRUcmFuc2FjdGlvblNpZ25SZXNwb25zZSB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvYml0Y29pbidcbmltcG9ydCB7IGJ1ZmZlckZyb20sIE1haW5Qcm90b2NvbFN5bWJvbHMgfSBmcm9tICdAd2FsbGZyZWUtZGV2L2NvaW5saWItY29yZSdcbmltcG9ydCB7IEFjY291bnRTaGFyZVJlc3BvbnNlLCBJQUNNZXNzYWdlRGVmaW5pdGlvbk9iamVjdFYzLCBJQUNNZXNzYWdlVHlwZSB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvc2VyaWFsaXplcidcblxuaW1wb3J0IHsgSUFDUXJHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9pYWMvcXItZ2VuZXJhdG9yJ1xuaW1wb3J0IHsgU2NyaXB0RXhwcmVzc2lvbiB9IGZyb20gJ0BrZXlzdG9uZWhxL2JjLXVyLXJlZ2lzdHJ5L2Rpc3QvU2NyaXB0RXhwcmVzc2lvbidcblxuY2xhc3MgRXh0ZW5kZWRQdWJsaWNLZXkge1xuICBwcml2YXRlIHJlYWRvbmx5IHJhd0tleTogQnVmZmVyXG5cbiAgY29uc3RydWN0b3IoZXh0ZW5kZWRQdWJsaWNLZXk6IHN0cmluZykge1xuICAgIHRoaXMucmF3S2V5ID0gYnM1OGNoZWNrLmRlY29kZShleHRlbmRlZFB1YmxpY0tleSkuc2xpY2UoNClcbiAgfVxuXG4gIHB1YmxpYyB0b1hwdWIoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkUHJlZml4KCcwNDg4YjIxZScpXG4gIH1cblxuICBwdWJsaWMgdG9ZUHViKCkge1xuICAgIHJldHVybiB0aGlzLmFkZFByZWZpeCgnMDQ5ZDdjYjInKVxuICB9XG5cbiAgcHVibGljIHRvWlB1YigpIHtcbiAgICByZXR1cm4gdGhpcy5hZGRQcmVmaXgoJzA0YjI0NzQ2JylcbiAgfVxuXG4gIHB1YmxpYyBnZXRSYXdLZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMucmF3S2V5XG4gIH1cblxuICBwcml2YXRlIGFkZFByZWZpeChwcmVmaXg6IHN0cmluZykge1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuY29uY2F0KFtidWZmZXJGcm9tKHByZWZpeCwgJ2hleCcpLCB0aGlzLnJhd0tleV0pXG5cbiAgICByZXR1cm4gYnM1OGNoZWNrLmVuY29kZShkYXRhKVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCQ1VSVHlwZXNHZW5lcmF0b3IgZXh0ZW5kcyBJQUNRckdlbmVyYXRvciB7XG4gIHByaXZhdGUgZW5jb2RlcjogVVJFbmNvZGVyIHwgdW5kZWZpbmVkXG5cbiAgcHJpdmF0ZSBkYXRhOiBDcnlwdG9BY2NvdW50IHwgQ3J5cHRvUFNCVCB8IHVuZGVmaW5lZFxuICBwcml2YXRlIHJlYWRvbmx5IGJpcDMyID0gQklQMzJGYWN0b3J5KGVjYylcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlKGRhdGE6IElBQ01lc3NhZ2VEZWZpbml0aW9uT2JqZWN0VjNbXSwgbXVsdGlGcmFnbWVudExlbmd0aDogbnVtYmVyLCBzaW5nbGVGcmFnbWVudExlbmd0aDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCEoYXdhaXQgQkNVUlR5cGVzR2VuZXJhdG9yLmNhbkhhbmRsZShkYXRhKSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBkYXRhWzBdXG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBJQUNNZXNzYWdlVHlwZS5BY2NvdW50U2hhcmVSZXNwb25zZSkge1xuICAgICAgdGhpcy5kYXRhID0gYXdhaXQgdGhpcy5nZW5lcmF0ZUNyeXB0b0FjY291bnRNZXNzYWdlKGVsZW1lbnQpXG4gICAgfSBlbHNlIGlmIChlbGVtZW50LnR5cGUgPT09IElBQ01lc3NhZ2VUeXBlLlRyYW5zYWN0aW9uU2lnblJlc3BvbnNlKSB7XG4gICAgICB0aGlzLmRhdGEgPSBhd2FpdCB0aGlzLmdlbmVyYXRlUFNCVE1lc3NhZ2UoZWxlbWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgU3VwcG9ydGVkJylcbiAgICB9XG5cbiAgICAvLyBXZSBmaXJzdCB0cnkgdG8gY3JlYXRlIGEgbGFyZ2VyIFwic2luZ2xlIGNodW5rXCIgZnJhZ21lbnRcbiAgICB0aGlzLmVuY29kZXIgPSB0aGlzLmRhdGEudG9VUkVuY29kZXIoc2luZ2xlRnJhZ21lbnRMZW5ndGgpXG5cbiAgICAvLyBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgd2UgdXNlIHRoZSBtdWx0aUZyYWdtZW50TGVuZ3RoXG4gICAgaWYgKHRoaXMuZW5jb2Rlci5mcmFnbWVudHNMZW5ndGggIT09IDEpIHtcbiAgICAgIHRoaXMuZW5jb2RlciA9IHRoaXMuZGF0YS50b1VSRW5jb2RlcihtdWx0aUZyYWdtZW50TGVuZ3RoKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgY2FuSGFuZGxlKGRhdGE6IElBQ01lc3NhZ2VEZWZpbml0aW9uT2JqZWN0VjNbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGRhdGFbMF1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGVsZW1lbnQucHJvdG9jb2wgPT09IE1haW5Qcm90b2NvbFN5bWJvbHMuQlRDX1NFR1dJVCB8fCBlbGVtZW50LnByb3RvY29sID09PSBNYWluUHJvdG9jb2xTeW1ib2xzLkJUQ19UQVBST09UKSAmJlxuICAgICAgICBbSUFDTWVzc2FnZVR5cGUuQWNjb3VudFNoYXJlUmVzcG9uc2UsIElBQ01lc3NhZ2VUeXBlLlRyYW5zYWN0aW9uU2lnblJlc3BvbnNlXS5pbmNsdWRlcyhlbGVtZW50LnR5cGUpXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbmV4dFBhcnQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAodGhpcy5lbmNvZGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmNvZGVyLm5leHRQYXJ0KCkudG9VcHBlckNhc2UoKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2luZ2xlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS50b1VSRW5jb2RlcihOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikubmV4dFBhcnQoKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TnVtYmVyT2ZQYXJ0cygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmVuY29kZXI/LmZyYWdtZW50c0xlbmd0aCA/PyAwXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlQ3J5cHRvQWNjb3VudE1lc3NhZ2UoZGF0YTogSUFDTWVzc2FnZURlZmluaXRpb25PYmplY3RWMykge1xuICAgIGNvbnN0IGFjY291bnQgPSBkYXRhLnBheWxvYWQgYXMgQWNjb3VudFNoYXJlUmVzcG9uc2VcblxuICAgIGNvbnN0IGV4dGVuZGVkUHVibGljS2V5ID0gdGhpcy5iaXAzMi5mcm9tQmFzZTU4KG5ldyBFeHRlbmRlZFB1YmxpY0tleShhY2NvdW50LnB1YmxpY0tleSkudG9YcHViKCkpXG5cbiAgICBjb25zdCBjcnlwdG9LZXlQYXRoQ29tcG9uZW50cyA9IFtdXG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgYWNjb3VudC5kZXJpdmF0aW9uUGF0aC5zcGxpdCgnLycpKSB7XG4gICAgICBpZiAoY29tcG9uZW50ID09PSAnbScpIGNvbnRpbnVlXG4gICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KGNvbXBvbmVudCwgMTApXG4gICAgICBjb25zdCBoYXJkZW5lZCA9IGNvbXBvbmVudC5lbmRzV2l0aCgnaCcpIHx8IGNvbXBvbmVudC5lbmRzV2l0aChcIidcIilcbiAgICAgIGNyeXB0b0tleVBhdGhDb21wb25lbnRzLnB1c2gobmV3IFBhdGhDb21wb25lbnQoeyBpbmRleCwgaGFyZGVuZWQgfSkpXG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50RmluZ2VycHJpbnQgPSBCdWZmZXIuYWxsb2MoNClcbiAgICBwYXJlbnRGaW5nZXJwcmludC53cml0ZVVJbnQzMkJFKGV4dGVuZGVkUHVibGljS2V5LnBhcmVudEZpbmdlcnByaW50LCAwKVxuXG4gICAgY29uc3QgaXNUYXByb290ID0gZGF0YS5wcm90b2NvbCA9PT0gTWFpblByb3RvY29sU3ltYm9scy5CVENfVEFQUk9PVFxuXG4gICAgbGV0IHNjcmlwdEV4cHJlc3Npb25zOiBTY3JpcHRFeHByZXNzaW9uW10gPSBbXVxuXG4gICAgaWYgKGlzVGFwcm9vdCkge1xuICAgICAgY29uc3QgVFIgPSBuZXcgU2NyaXB0RXhwcmVzc2lvbig0MDksICd0cicpXG4gICAgICBwYXRjaFRhZ3MoWzQwOV0pXG4gICAgICBzY3JpcHRFeHByZXNzaW9ucyA9IFtUUl1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NyaXB0RXhwcmVzc2lvbnMgPSBbU2NyaXB0RXhwcmVzc2lvbnMuV0lUTkVTU19QVUJMSUNfS0VZX0hBU0hdXG4gICAgfVxuXG4gICAgY29uc3QgY3J5cHRvQWNjb3VudCA9IG5ldyBDcnlwdG9BY2NvdW50KGJ1ZmZlckZyb20oYWNjb3VudC5tYXN0ZXJGaW5nZXJwcmludCwgJ2hleCcpLCBbXG4gICAgICBuZXcgQ3J5cHRvT3V0cHV0KFxuICAgICAgICBzY3JpcHRFeHByZXNzaW9ucyxcbiAgICAgICAgbmV3IENyeXB0b0hES2V5KHtcbiAgICAgICAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgICAgICAga2V5OiBCdWZmZXIuZnJvbShleHRlbmRlZFB1YmxpY0tleS5wdWJsaWNLZXkpLFxuICAgICAgICAgIGNoYWluQ29kZTogQnVmZmVyLmZyb20oZXh0ZW5kZWRQdWJsaWNLZXkuY2hhaW5Db2RlKSxcbiAgICAgICAgICBvcmlnaW46IG5ldyBDcnlwdG9LZXlwYXRoKGNyeXB0b0tleVBhdGhDb21wb25lbnRzLCBCdWZmZXIuZnJvbShleHRlbmRlZFB1YmxpY0tleS5maW5nZXJwcmludCksIGV4dGVuZGVkUHVibGljS2V5LmRlcHRoKSxcbiAgICAgICAgICBwYXJlbnRGaW5nZXJwcmludCxcbiAgICAgICAgICBuYW1lOiBhY2NvdW50Lmdyb3VwTGFiZWxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICBdKVxuXG4gICAgcmV0dXJuIGNyeXB0b0FjY291bnRcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVQU0JUTWVzc2FnZShkYXRhOiBJQUNNZXNzYWdlRGVmaW5pdGlvbk9iamVjdFYzKTogUHJvbWlzZTxDcnlwdG9QU0JUPiB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYXRhLnBheWxvYWQgYXMgQml0Y29pblNlZ3dpdFRyYW5zYWN0aW9uU2lnblJlc3BvbnNlXG5cbiAgICBjb25zdCBwc2J0ID0gYnVmZmVyRnJvbSh0cmFuc2FjdGlvbi50cmFuc2FjdGlvbiwgJ2hleCcpXG5cbiAgICBjb25zdCBjcnlwdG9QU0JUID0gbmV3IENyeXB0b1BTQlQocHNidClcblxuICAgIHJldHVybiBjcnlwdG9QU0JUXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,117 @@
1
+ import * as uuid from 'uuid';
2
+ import { CryptoKeypath, PathComponent, CryptoHDKey } from '@keystonehq/bc-ur-registry';
3
+ import { ETHSignature } from '@keystonehq/bc-ur-registry-eth';
4
+ import { TransactionFactory } from '@ethereumjs/tx';
5
+ import { MainProtocolSymbols } from '@wallfree-dev/coinlib-core';
6
+ import { IACMessageType } from '@wallfree-dev/serializer';
7
+ // import * as ecc from 'tiny-secp256k1'
8
+ import * as ecc from '@bitcoinerlab/secp256k1';
9
+ import { BIP32Factory } from 'bip32';
10
+ import { IACQrGenerator } from '../../iac/qr-generator';
11
+ import { TEMP_MM_REQUEST_IDS } from '../../../utils/utils';
12
+ export class MetamaskGenerator extends IACQrGenerator {
13
+ constructor() {
14
+ super();
15
+ this.bip32 = BIP32Factory(ecc);
16
+ }
17
+ async create(data, multiFragmentLength, singleFragmentLength) {
18
+ if (!(await MetamaskGenerator.canHandle(data))) {
19
+ return;
20
+ }
21
+ const element = data[0];
22
+ if (element.type === IACMessageType.AccountShareResponse) {
23
+ this.data = await this.generateCryptoAccountMessage(element);
24
+ }
25
+ else if (element.type === IACMessageType.TransactionSignResponse) {
26
+ this.data = await this.generateMessage(element);
27
+ }
28
+ else if (element.type === IACMessageType.MessageSignResponse) {
29
+ this.data = await this.generateMessage(element);
30
+ }
31
+ else {
32
+ throw new Error('Not Supported');
33
+ }
34
+ // We first try to create a larger "single chunk" fragment
35
+ this.encoder = this.data.toUREncoder(singleFragmentLength);
36
+ // If this is not possible, we use the multiFragmentLength
37
+ if (this.encoder.fragmentsLength !== 1) {
38
+ this.encoder = this.data.toUREncoder(multiFragmentLength);
39
+ }
40
+ }
41
+ static async canHandle(data) {
42
+ if (data.length === 1) {
43
+ const element = data[0];
44
+ return ((element.protocol === MainProtocolSymbols.ETH || element.protocol === MainProtocolSymbols.OPTIMISM) &&
45
+ [IACMessageType.AccountShareResponse, IACMessageType.TransactionSignResponse, IACMessageType.MessageSignResponse].includes(element.type));
46
+ }
47
+ return false;
48
+ }
49
+ async nextPart() {
50
+ if (this.encoder) {
51
+ return this.encoder.nextPart().toUpperCase();
52
+ }
53
+ else {
54
+ return '';
55
+ }
56
+ }
57
+ async getSingle() {
58
+ if (this.data) {
59
+ return this.data.toUREncoder(Number.MAX_SAFE_INTEGER).nextPart();
60
+ }
61
+ else {
62
+ return '';
63
+ }
64
+ }
65
+ async getNumberOfParts() {
66
+ return this.encoder?.fragmentsLength ?? 0;
67
+ }
68
+ async generateCryptoAccountMessage(data) {
69
+ const account = data.payload;
70
+ const extendedPublicKey = this.bip32.fromBase58(account.publicKey);
71
+ const cryptoKeyPathComponents = [];
72
+ for (const component of account.derivationPath.split('/')) {
73
+ if (component === 'm')
74
+ continue;
75
+ const index = parseInt(component, 10);
76
+ const hardened = component.endsWith('h') || component.endsWith("'");
77
+ cryptoKeyPathComponents.push(new PathComponent({ index, hardened }));
78
+ }
79
+ const cryptoHDKey = new CryptoHDKey({
80
+ isMaster: false,
81
+ key: Buffer.from(extendedPublicKey.publicKey),
82
+ chainCode: Buffer.from(extendedPublicKey.chainCode),
83
+ origin: new CryptoKeypath(cryptoKeyPathComponents, Buffer.from(extendedPublicKey.fingerprint)), // TODO: Define which FP we use
84
+ parentFingerprint: Buffer.from(account.masterFingerprint),
85
+ name: `AirGap - ${account.groupLabel}`
86
+ });
87
+ return cryptoHDKey;
88
+ }
89
+ async generateMessage(data) {
90
+ let rlpSignatureData;
91
+ if (data.payload.transaction) {
92
+ const transaction = data.payload;
93
+ const tx = TransactionFactory.fromSerializedData(Buffer.from(transaction.transaction, 'hex'));
94
+ const r = Buffer.from(tx.r?.toString(16, 32), 'hex');
95
+ const s = Buffer.from(tx.s?.toString(16, 32), 'hex');
96
+ const v = Buffer.from(tx.v?.toString(16, 2), 'hex');
97
+ rlpSignatureData = Buffer.concat([r, s, v]);
98
+ }
99
+ else {
100
+ const transaction = data.payload;
101
+ rlpSignatureData = Buffer.from(transaction.signature.slice(2), 'hex');
102
+ }
103
+ if (!rlpSignatureData) {
104
+ throw new Error('Empty signature');
105
+ }
106
+ // TODO: This should be moved to a higher level, probably the "iac.service", and properly store context for any kind of request.
107
+ const IDs = JSON.parse(localStorage.getItem(TEMP_MM_REQUEST_IDS) ?? '{}');
108
+ const id = IDs[data.id];
109
+ // TODO: We cannot immediately delete the ID because this method might be called multiple times
110
+ // delete IDs[data.id]
111
+ // localStorage.setItem('TEMP-MM-REQUEST-IDS', JSON.stringify(IDs))
112
+ const idBuffer = id ? Buffer.from(id, 'hex') : uuid.parse(uuid.v4());
113
+ const ethSignature = new ETHSignature(rlpSignatureData, Buffer.from(idBuffer));
114
+ return ethSignature;
115
+ }
116
+ }
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YW1hc2stZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9xci9xci1nZW5lcmF0b3JzL21ldGFtYXNrLWdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUU1QixPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFaEUsT0FBTyxFQUFzRCxjQUFjLEVBQXVCLE1BQU0sMEJBQTBCLENBQUE7QUFFbEksd0NBQXdDO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0seUJBQXlCLENBQUE7QUFFOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUVwQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFFdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFMUQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGNBQWM7SUFNbkQ7UUFDRSxLQUFLLEVBQUUsQ0FBQTtRQUhRLFVBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUE7SUFJMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBb0MsRUFBRSxtQkFBMkIsRUFBRSxvQkFBNEI7UUFDakgsSUFBSSxDQUFDLENBQUMsTUFBTSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQy9DLE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxPQUFP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TUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUV2QiwrRkFBK0Y7UUFDL0Ysc0JBQXNCO1FBQ3RCLG1FQUFtRTtRQUVuRSxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBZ0IsQ0FBQTtRQUVwRixNQUFNLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7UUFFOUUsT0FBTyxZQUFZLENBQUE7SUFDckIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVVJFbmNvZGVyIH0gZnJvbSAnQG5ncmF2ZWlvL2JjLXVyJ1xuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJ1xuXG5pbXBvcnQgeyBDcnlwdG9LZXlwYXRoLCBQYXRoQ29tcG9uZW50LCBDcnlwdG9IREtleSB9IGZyb20gJ0BrZXlzdG9uZWhxL2JjLXVyLXJlZ2lzdHJ5J1xuaW1wb3J0IHsgRVRIU2lnbmF0dXJlIH0gZnJvbSAnQGtleXN0b25laHEvYmMtdXItcmVnaXN0cnktZXRoJ1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25GYWN0b3J5IH0gZnJvbSAnQGV0aGVyZXVtanMvdHgnXG5pbXBvcnQgeyBNYWluUHJvdG9jb2xTeW1ib2xzIH0gZnJvbSAnQHdhbGxmcmVlLWRldi9jb2lubGliLWNvcmUnXG5pbXBvcnQgeyBFdGhlcmV1bVRyYW5zYWN0aW9uU2lnblJlc3BvbnNlIH0gZnJvbSAnQHdhbGxmcmVlLWRldi9ldGhlcmV1bSdcbmltcG9ydCB7IEFjY291bnRTaGFyZVJlc3BvbnNlLCBJQUNNZXNzYWdlRGVmaW5pdGlvbk9iamVjdFYzLCBJQUNNZXNzYWdlVHlwZSwgTWVzc2FnZVNpZ25SZXNwb25zZSB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvc2VyaWFsaXplcidcblxuLy8gaW1wb3J0ICogYXMgZWNjIGZyb20gJ3Rpbnktc2VjcDI1NmsxJ1xuaW1wb3J0ICogYXMgZWNjIGZyb20gJ0BiaXRjb2luZXJsYWIvc2VjcDI1NmsxJ1xuXG5pbXBvcnQgeyBCSVAzMkZhY3RvcnkgfSBmcm9tICdiaXAzMidcblxuaW1wb3J0IHsgSUFDUXJHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9pYWMvcXItZ2VuZXJhdG9yJ1xuXG5pbXBvcnQgeyBURU1QX01NX1JFUVVFU1RfSURTIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbHMnXG5cbmV4cG9ydCBjbGFzcyBNZXRhbWFza0dlbmVyYXRvciBleHRlbmRzIElBQ1FyR2VuZXJhdG9yIHtcbiAgcHJpdmF0ZSBlbmNvZGVyOiBVUkVuY29kZXIgfCB1bmRlZmluZWRcblxuICBwcml2YXRlIGRhdGE6IENyeXB0b0hES2V5IHwgRVRIU2lnbmF0dXJlIHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgcmVhZG9ubHkgYmlwMzIgPSBCSVAzMkZhY3RvcnkoZWNjKVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGUoZGF0YTogSUFDTWVzc2FnZURlZmluaXRpb25PYmplY3RWM1tdLCBtdWx0aUZyYWdtZW50TGVuZ3RoOiBudW1iZXIsIHNpbmdsZUZyYWdtZW50TGVuZ3RoOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIShhd2FpdCBNZXRhbWFza0dlbmVyYXRvci5jYW5IYW5kbGUoZGF0YSkpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZGF0YVswXVxuXG4gICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gSUFDTWVzc2FnZVR5cGUuQWNjb3VudFNoYXJlUmVzcG9uc2UpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGF3YWl0IHRoaXMuZ2VuZXJhdGVDcnlwdG9BY2NvdW50TWVzc2FnZShlbGVtZW50KVxuICAgIH0gZWxzZSBpZiAoZWxlbWVudC50eXBlID09PSBJQUNNZXNzYWdlVHlwZS5UcmFuc2FjdGlvblNpZ25SZXNwb25zZSkge1xuICAgICAgdGhpcy5kYXRhID0gYXdhaXQgdGhpcy5nZW5lcmF0ZU1lc3NhZ2UoZWxlbWVudClcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQudHlwZSA9PT0gSUFDTWVzc2FnZVR5cGUuTWVzc2FnZVNpZ25SZXNwb25zZSkge1xuICAgICAgdGhpcy5kYXRhID0gYXdhaXQgdGhpcy5nZW5lcmF0ZU1lc3NhZ2UoZWxlbWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgU3VwcG9ydGVkJylcbiAgICB9XG5cbiAgICAvLyBXZSBmaXJzdCB0cnkgdG8gY3JlYXRlIGEgbGFyZ2VyIFwic2luZ2xlIGNodW5rXCIgZnJhZ21lbnRcbiAgICB0aGlzLmVuY29kZXIgPSB0aGlzLmRhdGEudG9VUkVuY29kZXIoc2luZ2xlRnJhZ21lbnRMZW5ndGgpXG5cbiAgICAvLyBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgd2UgdXNlIHRoZSBtdWx0aUZyYWdtZW50TGVuZ3RoXG4gICAgaWYgKHRoaXMuZW5jb2Rlci5mcmFnbWVudHNMZW5ndGggIT09IDEpIHtcbiAgICAgIHRoaXMuZW5jb2RlciA9IHRoaXMuZGF0YS50b1VSRW5jb2RlcihtdWx0aUZyYWdtZW50TGVuZ3RoKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgY2FuSGFuZGxlKGRhdGE6IElBQ01lc3NhZ2VEZWZpbml0aW9uT2JqZWN0VjNbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGRhdGFbMF1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGVsZW1lbnQucHJvdG9jb2wgPT09IE1haW5Qcm90b2NvbFN5bWJvbHMuRVRIIHx8IGVsZW1lbnQucHJvdG9jb2wgPT09IE1haW5Qcm90b2NvbFN5bWJvbHMuT1BUSU1JU00pICYmXG4gICAgICAgIFtJQUNNZXNzYWdlVHlwZS5BY2NvdW50U2hhcmVSZXNwb25zZSwgSUFDTWVzc2FnZVR5cGUuVHJhbnNhY3Rpb25TaWduUmVzcG9uc2UsIElBQ01lc3NhZ2VUeXBlLk1lc3NhZ2VTaWduUmVzcG9uc2VdLmluY2x1ZGVzKFxuICAgICAgICAgIGVsZW1lbnQudHlwZVxuICAgICAgICApXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbmV4dFBhcnQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAodGhpcy5lbmNvZGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmNvZGVyLm5leHRQYXJ0KCkudG9VcHBlckNhc2UoKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2luZ2xlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS50b1VSRW5jb2RlcihOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikubmV4dFBhcnQoKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TnVtYmVyT2ZQYXJ0cygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmVuY29kZXI/LmZyYWdtZW50c0xlbmd0aCA/PyAwXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlQ3J5cHRvQWNjb3VudE1lc3NhZ2UoZGF0YTogSUFDTWVzc2FnZURlZmluaXRpb25PYmplY3RWMyk6IFByb21pc2U8Q3J5cHRvSERLZXk+IHtcbiAgICBjb25zdCBhY2NvdW50ID0gZGF0YS5wYXlsb2FkIGFzIEFjY291bnRTaGFyZVJlc3BvbnNlXG4gICAgY29uc3QgZXh0ZW5kZWRQdWJsaWNLZXkgPSB0aGlzLmJpcDMyLmZyb21CYXNlNTgoYWNjb3VudC5wdWJsaWNLZXkpXG5cbiAgICBjb25zdCBjcnlwdG9LZXlQYXRoQ29tcG9uZW50cyA9IFtdXG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgYWNjb3VudC5kZXJpdmF0aW9uUGF0aC5zcGxpdCgnLycpKSB7XG4gICAgICBpZiAoY29tcG9uZW50ID09PSAnbScpIGNvbnRpbnVlXG4gICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KGNvbXBvbmVudCwgMTApXG4gICAgICBjb25zdCBoYXJkZW5lZCA9IGNvbXBvbmVudC5lbmRzV2l0aCgnaCcpIHx8IGNvbXBvbmVudC5lbmRzV2l0aChcIidcIilcbiAgICAgIGNyeXB0b0tleVBhdGhDb21wb25lbnRzLnB1c2gobmV3IFBhdGhDb21wb25lbnQoeyBpbmRleCwgaGFyZGVuZWQgfSkpXG4gICAgfVxuXG4gICAgY29uc3QgY3J5cHRvSERLZXkgPSBuZXcgQ3J5cHRvSERLZXkoe1xuICAgICAgaXNNYXN0ZXI6IGZhbHNlLFxuICAgICAga2V5OiBCdWZmZXIuZnJvbShleHRlbmRlZFB1YmxpY0tleS5wdWJsaWNLZXkpLFxuICAgICAgY2hhaW5Db2RlOiBCdWZmZXIuZnJvbShleHRlbmRlZFB1YmxpY0tleS5jaGFpbkNvZGUpLFxuICAgICAgb3JpZ2luOiBuZXcgQ3J5cHRvS2V5cGF0aChjcnlwdG9LZXlQYXRoQ29tcG9uZW50cywgQnVmZmVyLmZyb20oZXh0ZW5kZWRQdWJsaWNLZXkuZmluZ2VycHJpbnQpKSwgLy8gVE9ETzogRGVmaW5lIHdoaWNoIEZQIHdlIHVzZVxuICAgICAgcGFyZW50RmluZ2VycHJpbnQ6IEJ1ZmZlci5mcm9tKGFjY291bnQubWFzdGVyRmluZ2VycHJpbnQpLFxuICAgICAgbmFtZTogYEFpckdhcCAtICR7YWNjb3VudC5ncm91cExhYmVsfWBcbiAgICB9KVxuXG4gICAgcmV0dXJuIGNyeXB0b0hES2V5XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlTWVzc2FnZShkYXRhOiBJQUNNZXNzYWdlRGVmaW5pdGlvbk9iamVjdFYzKTogUHJvbWlzZTxFVEhTaWduYXR1cmU+IHtcbiAgICBsZXQgcmxwU2lnbmF0dXJlRGF0YTogQnVmZmVyIHwgdW5kZWZpbmVkXG5cbiAgICBpZiAoKGRhdGEucGF5bG9hZCBhcyBhbnkpLnRyYW5zYWN0aW9uKSB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGRhdGEucGF5bG9hZCBhcyBFdGhlcmV1bVRyYW5zYWN0aW9uU2lnblJlc3BvbnNlXG5cbiAgICAgIGNvbnN0IHR4ID0gVHJhbnNhY3Rpb25GYWN0b3J5LmZyb21TZXJpYWxpemVkRGF0YShCdWZmZXIuZnJvbSh0cmFuc2FjdGlvbi50cmFuc2FjdGlvbiwgJ2hleCcpKVxuXG4gICAgICBjb25zdCByID0gQnVmZmVyLmZyb20odHgucj8udG9TdHJpbmcoMTYsIDMyKSwgJ2hleCcpXG4gICAgICBjb25zdCBzID0gQnVmZmVyLmZyb20odHgucz8udG9TdHJpbmcoMTYsIDMyKSwgJ2hleCcpXG4gICAgICBjb25zdCB2ID0gQnVmZmVyLmZyb20odHgudj8udG9TdHJpbmcoMTYsIDIpLCAnaGV4JylcblxuICAgICAgcmxwU2lnbmF0dXJlRGF0YSA9IEJ1ZmZlci5jb25jYXQoW3IsIHMsIHZdKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGRhdGEucGF5bG9hZCBhcyBNZXNzYWdlU2lnblJlc3BvbnNlXG5cbiAgICAgIHJscFNpZ25hdHVyZURhdGEgPSBCdWZmZXIuZnJvbSh0cmFuc2FjdGlvbi5zaWduYXR1cmUuc2xpY2UoMiksICdoZXgnKVxuICAgIH1cblxuICAgIGlmICghcmxwU2lnbmF0dXJlRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbXB0eSBzaWduYXR1cmUnKVxuICAgIH1cblxuICAgIC8vIFRPRE86IFRoaXMgc2hvdWxkIGJlIG1vdmVkIHRvIGEgaGlnaGVyIGxldmVsLCBwcm9iYWJseSB0aGUgXCJpYWMuc2VydmljZVwiLCBhbmQgcHJvcGVybHkgc3RvcmUgY29udGV4dCBmb3IgYW55IGtpbmQgb2YgcmVxdWVzdC5cbiAgICBjb25zdCBJRHMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFRFTVBfTU1fUkVRVUVTVF9JRFMpID8/ICd7fScpXG4gICAgY29uc3QgaWQgPSBJRHNbZGF0YS5pZF1cblxuICAgIC8vIFRPRE86IFdlIGNhbm5vdCBpbW1lZGlhdGVseSBkZWxldGUgdGhlIElEIGJlY2F1c2UgdGhpcyBtZXRob2QgbWlnaHQgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzXG4gICAgLy8gZGVsZXRlIElEc1tkYXRhLmlkXVxuICAgIC8vIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdURU1QLU1NLVJFUVVFU1QtSURTJywgSlNPTi5zdHJpbmdpZnkoSURzKSlcblxuICAgIGNvbnN0IGlkQnVmZmVyID0gaWQgPyBCdWZmZXIuZnJvbShpZCwgJ2hleCcpIDogKHV1aWQucGFyc2UodXVpZC52NCgpKSBhcyBVaW50OEFycmF5KVxuXG4gICAgY29uc3QgZXRoU2lnbmF0dXJlID0gbmV3IEVUSFNpZ25hdHVyZShybHBTaWduYXR1cmVEYXRhLCBCdWZmZXIuZnJvbShpZEJ1ZmZlcikpXG5cbiAgICByZXR1cm4gZXRoU2lnbmF0dXJlXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,49 @@
1
+ import { MainProtocolSymbols } from '@wallfree-dev/coinlib-core';
2
+ import { IACMessageType } from '@wallfree-dev/serializer';
3
+ import { IACQrGenerator } from '../../iac/qr-generator';
4
+ export class OutputDescriptorGenerator extends IACQrGenerator {
5
+ constructor() {
6
+ super();
7
+ }
8
+ async create(data, _multiFragmentLength, _singleFragmentLength) {
9
+ if (!(await OutputDescriptorGenerator.canHandle(data))) {
10
+ return;
11
+ }
12
+ const element = data[0];
13
+ if (element.type === IACMessageType.AccountShareResponse) {
14
+ this.data = await this.generateOutputDescriptor(element);
15
+ }
16
+ else {
17
+ throw new Error('Not Supported');
18
+ }
19
+ }
20
+ static async canHandle(data) {
21
+ if (data.length === 1) {
22
+ const element = data[0];
23
+ return ((element.protocol === MainProtocolSymbols.BTC_SEGWIT || element.protocol === MainProtocolSymbols.BTC_TAPROOT) &&
24
+ [IACMessageType.AccountShareResponse].includes(element.type));
25
+ }
26
+ return false;
27
+ }
28
+ async nextPart() {
29
+ return this.data ?? '';
30
+ }
31
+ async getSingle() {
32
+ return this.data ?? '';
33
+ }
34
+ async getNumberOfParts() {
35
+ return this.data ? 1 : 0;
36
+ }
37
+ async generateOutputDescriptor(data) {
38
+ // EXAMPLE: DESC="wpkh([0f056943/84h/1h/0h]tpubDC7jGaaSE66Pn4dgtbAAstde4bCyhSUs4r3P8WhMVvPByvcRrzrwqSvpF9Ghx83Z1LfVugGRrSBko5UEKELCz9HoMv5qKmGq3fqnnbS5E9r/0/*)#erexmnep"
39
+ const account = data.payload;
40
+ const dpWithoutPrefix = account.derivationPath.slice(1);
41
+ const dpWithoutUnhardened = dpWithoutPrefix.slice(0, dpWithoutPrefix.lastIndexOf("'") + 1);
42
+ if (data.protocol === MainProtocolSymbols.BTC_TAPROOT) {
43
+ return `tr([${account.masterFingerprint}${dpWithoutUnhardened}]${account.publicKey}/0/*)`;
44
+ }
45
+ // Default to SegWit
46
+ return `wpkh([${account.masterFingerprint}${dpWithoutUnhardened}]${account.publicKey}/0/*)`;
47
+ }
48
+ }
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LWRlc2NyaXB0b3ItZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9xci9xci1nZW5lcmF0b3JzL291dHB1dC1kZXNjcmlwdG9yLWdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUNoRSxPQUFPLEVBQXNELGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBRTdHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUV2RCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsY0FBYztJQUczRDtRQUNFLEtBQUssRUFBRSxDQUFBO0lBQ1QsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBb0MsRUFBRSxvQkFBNEIsRUFBRSxxQkFBNkI7UUFDbkgsSUFBSSxDQUFDLENBQUMsTUFBTSx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZELE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXZCLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUN6RCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzFELENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQW9DO1FBQ2hFLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFFdkIsT0FBTyxDQUNMLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxtQkFBbUIsQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7Z0JBQzdHLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FDN0QsQ0FBQTtRQUNILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUTtRQUNuQixPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFBO0lBQ3hCLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUztRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFBO0lBQ3hCLENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDMUIsQ0FBQztJQUVPLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxJQUFrQztRQUN2RSx5S0FBeUs7UUFFekssTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQStCLENBQUE7UUFFcEQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkQsTUFBTSxtQkFBbUIsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBRTFGLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0RCxPQUFPLE9BQU8sT0FBTyxDQUFDLGlCQUFpQixHQUFHLG1CQUFtQixJQUFJLE9BQU8sQ0FBQyxTQUFTLE9BQU8sQ0FBQTtRQUMzRixDQUFDO1FBQ0Qsb0JBQW9CO1FBRXBCLE9BQU8sU0FBUyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsbUJBQW1CLElBQUksT0FBTyxDQUFDLFNBQVMsT0FBTyxDQUFBO0lBQzdGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1haW5Qcm90b2NvbFN5bWJvbHMgfSBmcm9tICdAd2FsbGZyZWUtZGV2L2NvaW5saWItY29yZSdcbmltcG9ydCB7IEFjY291bnRTaGFyZVJlc3BvbnNlLCBJQUNNZXNzYWdlRGVmaW5pdGlvbk9iamVjdFYzLCBJQUNNZXNzYWdlVHlwZSB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvc2VyaWFsaXplcidcblxuaW1wb3J0IHsgSUFDUXJHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9pYWMvcXItZ2VuZXJhdG9yJ1xuXG5leHBvcnQgY2xhc3MgT3V0cHV0RGVzY3JpcHRvckdlbmVyYXRvciBleHRlbmRzIElBQ1FyR2VuZXJhdG9yIHtcbiAgcHJpdmF0ZSBkYXRhOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlKGRhdGE6IElBQ01lc3NhZ2VEZWZpbml0aW9uT2JqZWN0VjNbXSwgX211bHRpRnJhZ21lbnRMZW5ndGg6IG51bWJlciwgX3NpbmdsZUZyYWdtZW50TGVuZ3RoOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIShhd2FpdCBPdXRwdXREZXNjcmlwdG9yR2VuZXJhdG9yLmNhbkhhbmRsZShkYXRhKSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBkYXRhWzBdXG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBJQUNNZXNzYWdlVHlwZS5BY2NvdW50U2hhcmVSZXNwb25zZSkge1xuICAgICAgdGhpcy5kYXRhID0gYXdhaXQgdGhpcy5nZW5lcmF0ZU91dHB1dERlc2NyaXB0b3IoZWxlbWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgU3VwcG9ydGVkJylcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFzeW5jIGNhbkhhbmRsZShkYXRhOiBJQUNNZXNzYWdlRGVmaW5pdGlvbk9iamVjdFYzW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkYXRhWzBdXG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIChlbGVtZW50LnByb3RvY29sID09PSBNYWluUHJvdG9jb2xTeW1ib2xzLkJUQ19TRUdXSVQgfHwgZWxlbWVudC5wcm90b2NvbCA9PT0gTWFpblByb3RvY29sU3ltYm9scy5CVENfVEFQUk9PVCkgJiZcbiAgICAgICAgW0lBQ01lc3NhZ2VUeXBlLkFjY291bnRTaGFyZVJlc3BvbnNlXS5pbmNsdWRlcyhlbGVtZW50LnR5cGUpXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbmV4dFBhcnQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8/ICcnXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2luZ2xlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/PyAnJ1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE51bWJlck9mUGFydHMoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gMSA6IDBcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVPdXRwdXREZXNjcmlwdG9yKGRhdGE6IElBQ01lc3NhZ2VEZWZpbml0aW9uT2JqZWN0VjMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIC8vIEVYQU1QTEU6IERFU0M9XCJ3cGtoKFswZjA1Njk0My84NGgvMWgvMGhddHB1YkRDN2pHYWFTRTY2UG40ZGd0YkFBc3RkZTRiQ3loU1VzNHIzUDhXaE1WdlBCeXZjUnJ6cndxU3ZwRjlHaHg4M1oxTGZWdWdHUnJTQmtvNVVFS0VMQ3o5SG9NdjVxS21HcTNmcW5uYlM1RTlyLzAvKikjZXJleG1uZXBcIlxuXG4gICAgY29uc3QgYWNjb3VudCA9IGRhdGEucGF5bG9hZCBhcyBBY2NvdW50U2hhcmVSZXNwb25zZVxuXG4gICAgY29uc3QgZHBXaXRob3V0UHJlZml4ID0gYWNjb3VudC5kZXJpdmF0aW9uUGF0aC5zbGljZSgxKVxuICAgIGNvbnN0IGRwV2l0aG91dFVuaGFyZGVuZWQgPSBkcFdpdGhvdXRQcmVmaXguc2xpY2UoMCwgZHBXaXRob3V0UHJlZml4Lmxhc3RJbmRleE9mKFwiJ1wiKSArIDEpXG5cbiAgICBpZiAoZGF0YS5wcm90b2NvbCA9PT0gTWFpblByb3RvY29sU3ltYm9scy5CVENfVEFQUk9PVCkge1xuICAgICAgcmV0dXJuIGB0cihbJHthY2NvdW50Lm1hc3RlckZpbmdlcnByaW50fSR7ZHBXaXRob3V0VW5oYXJkZW5lZH1dJHthY2NvdW50LnB1YmxpY0tleX0vMC8qKWBcbiAgICB9XG4gICAgLy8gRGVmYXVsdCB0byBTZWdXaXRcblxuICAgIHJldHVybiBgd3BraChbJHthY2NvdW50Lm1hc3RlckZpbmdlcnByaW50fSR7ZHBXaXRob3V0VW5oYXJkZW5lZH1dJHthY2NvdW50LnB1YmxpY0tleX0vMC8qKWBcbiAgfVxufVxuIl19
@@ -0,0 +1,30 @@
1
+ import { Serializer } from '@wallfree-dev/serializer';
2
+ import { IACQrGenerator } from '../../iac/qr-generator';
3
+ import { convertV3ToV2 } from '../../serializer/serializer.service';
4
+ const serializer = Serializer.getInstance();
5
+ export class SerializerV2Generator extends IACQrGenerator {
6
+ constructor() {
7
+ super();
8
+ this.counter = 0;
9
+ this.parts = [];
10
+ this.data = [];
11
+ }
12
+ async create(data, multiFragmentLength, singleFragmentLength) {
13
+ this.counter = 0;
14
+ this.data = await convertV3ToV2(data);
15
+ this.parts = await serializer.serialize(this.data, singleFragmentLength, multiFragmentLength);
16
+ }
17
+ async nextPart() {
18
+ const next = this.parts[this.counter % this.parts.length];
19
+ this.counter += 1;
20
+ return next;
21
+ }
22
+ async getSingle(prefix) {
23
+ const part = this.parts.length === 1 ? this.parts[0] : (await serializer.serialize(this.data))[0];
24
+ return this.prefixSingle(part, prefix, 'd');
25
+ }
26
+ async getNumberOfParts() {
27
+ return this.parts.length;
28
+ }
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci12Mi1nZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3FyL3FyLWdlbmVyYXRvcnMvc2VyaWFsaXplci12Mi1nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0RCxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUUvRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBRW5FLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtBQUMzQyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsY0FBYztJQU12RDtRQUNFLEtBQUssRUFBRSxDQUFBO1FBTkQsWUFBTyxHQUFXLENBQUMsQ0FBQTtRQUNuQixVQUFLLEdBQWEsRUFBRSxDQUFBO1FBRXBCLFNBQUksR0FBaUMsRUFBRSxDQUFBO0lBSS9DLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQW9DLEVBQUUsbUJBQTJCLEVBQUUsb0JBQTRCO1FBQ2pILElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFBO1FBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFckMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO0lBQy9GLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUTtRQUNuQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN6RCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQTtRQUVqQixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQWM7UUFDbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUVqRyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBRU0sS0FBSyxDQUFDLGdCQUFnQjtRQUMzQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFBO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElBQ01lc3NhZ2VEZWZpbml0aW9uT2JqZWN0LCBJQUNNZXNzYWdlRGVmaW5pdGlvbk9iamVjdFYzLCBTZXJpYWxpemVyIH0gZnJvbSAnQHdhbGxmcmVlLWRldi9zZXJpYWxpemVyJ1xuXG5pbXBvcnQgeyBJQUNRckdlbmVyYXRvciB9IGZyb20gJy4uLy4uL2lhYy9xci1nZW5lcmF0b3InXG5pbXBvcnQgeyBjb252ZXJ0VjNUb1YyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXplci9zZXJpYWxpemVyLnNlcnZpY2UnXG5cbmNvbnN0IHNlcmlhbGl6ZXIgPSBTZXJpYWxpemVyLmdldEluc3RhbmNlKClcbmV4cG9ydCBjbGFzcyBTZXJpYWxpemVyVjJHZW5lcmF0b3IgZXh0ZW5kcyBJQUNRckdlbmVyYXRvciB7XG4gIHByaXZhdGUgY291bnRlcjogbnVtYmVyID0gMFxuICBwcml2YXRlIHBhcnRzOiBzdHJpbmdbXSA9IFtdXG5cbiAgcHJpdmF0ZSBkYXRhOiBJQUNNZXNzYWdlRGVmaW5pdGlvbk9iamVjdFtdID0gW11cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlKGRhdGE6IElBQ01lc3NhZ2VEZWZpbml0aW9uT2JqZWN0VjNbXSwgbXVsdGlGcmFnbWVudExlbmd0aDogbnVtYmVyLCBzaW5nbGVGcmFnbWVudExlbmd0aDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jb3VudGVyID0gMFxuICAgIHRoaXMuZGF0YSA9IGF3YWl0IGNvbnZlcnRWM1RvVjIoZGF0YSlcblxuICAgIHRoaXMucGFydHMgPSBhd2FpdCBzZXJpYWxpemVyLnNlcmlhbGl6ZSh0aGlzLmRhdGEsIHNpbmdsZUZyYWdtZW50TGVuZ3RoLCBtdWx0aUZyYWdtZW50TGVuZ3RoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIG5leHRQYXJ0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMucGFydHNbdGhpcy5jb3VudGVyICUgdGhpcy5wYXJ0cy5sZW5ndGhdXG4gICAgdGhpcy5jb3VudGVyICs9IDFcblxuICAgIHJldHVybiBuZXh0XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2luZ2xlKHByZWZpeDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5wYXJ0cy5sZW5ndGggPT09IDEgPyB0aGlzLnBhcnRzWzBdIDogKGF3YWl0IHNlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMuZGF0YSkpWzBdXG5cbiAgICByZXR1cm4gdGhpcy5wcmVmaXhTaW5nbGUocGFydCwgcHJlZml4LCAnZCcpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TnVtYmVyT2ZQYXJ0cygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnBhcnRzLmxlbmd0aFxuICB9XG59XG4iXX0=