@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.
- package/README.md +60 -0
- package/esm2022/lib/airgap-angular-core.module.mjs +63 -0
- package/esm2022/lib/base/base.component.mjs +38 -0
- package/esm2022/lib/base/base.facade.mjs +37 -0
- package/esm2022/lib/capacitor-plugins/definitions.mjs +15 -0
- package/esm2022/lib/capacitor-plugins/injection-tokens.mjs +11 -0
- package/esm2022/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin-wrapper.mjs +67 -0
- package/esm2022/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin.mjs +247 -0
- package/esm2022/lib/components/account-item/account-item.component.mjs +30 -0
- package/esm2022/lib/components/account-selection/account-selection.component.mjs +61 -0
- package/esm2022/lib/components/components.module.mjs +97 -0
- package/esm2022/lib/components/currency-symbol/currency-symbol.component.mjs +45 -0
- package/esm2022/lib/components/currency-symbol/currency-symbol.facade.mjs +8 -0
- package/esm2022/lib/components/currency-symbol/currency-symbol.types.mjs +2 -0
- package/esm2022/lib/components/from-to/from-to.component.mjs +100 -0
- package/esm2022/lib/components/iac-qr/iac-qr.component.mjs +192 -0
- package/esm2022/lib/components/identicon/identicon.component.mjs +51 -0
- package/esm2022/lib/components/isolated-modules-badges/isolated-modules-badges.component.mjs +16 -0
- package/esm2022/lib/components/isolated-modules-details/isolated-modules-details.component.mjs +43 -0
- package/esm2022/lib/components/isolated-modules-details/isolated-modules-details.facade.mjs +7 -0
- package/esm2022/lib/components/isolated-modules-list/isolated-modules-list.component.mjs +50 -0
- package/esm2022/lib/components/isolated-modules-list/isolated-modules-list.facade.mjs +7 -0
- package/esm2022/lib/components/isolated-modules-onboarding/isolated-modules-onboarding.component.mjs +12 -0
- package/esm2022/lib/components/network-badge/network-badge.component.mjs +19 -0
- package/esm2022/lib/components/qr/qr.component.mjs +36 -0
- package/esm2022/lib/components/qr-settings/qr-settings.component.mjs +30 -0
- package/esm2022/lib/components/titled-address/titled-address.component.mjs +31 -0
- package/esm2022/lib/components/titled-text/titled-text.component.mjs +28 -0
- package/esm2022/lib/config/app-config.mjs +3 -0
- package/esm2022/lib/pages/isolated-modules-list/isolated-modules-list.facade.mjs +7 -0
- package/esm2022/lib/pipes/amount-converter/amount-converter.pipe.mjs +82 -0
- package/esm2022/lib/pipes/fee-converter/fee-converter.pipe.mjs +36 -0
- package/esm2022/lib/pipes/pipes.module.mjs +19 -0
- package/esm2022/lib/pipes/wallet-filter/wallet-filter.pipe.mjs +36 -0
- package/esm2022/lib/protocol/adapter/protocol-v0-adapter.mjs +880 -0
- package/esm2022/lib/protocol/isolated/base-isolated.mjs +27 -0
- package/esm2022/lib/protocol/isolated/block-explorer-isolated.mjs +32 -0
- package/esm2022/lib/protocol/isolated/protocol-offline-isolated.mjs +37 -0
- package/esm2022/lib/protocol/isolated/protocol-online-isolated.mjs +52 -0
- package/esm2022/lib/protocol/isolated/v3-serializer-companion-isolated.mjs +35 -0
- package/esm2022/lib/services/address/address.service.mjs +78 -0
- package/esm2022/lib/services/clipboard/clipboard.service.mjs +48 -0
- package/esm2022/lib/services/deeplink/deeplink.service.mjs +73 -0
- package/esm2022/lib/services/environment/base-environment.service.mjs +6 -0
- package/esm2022/lib/services/filesystem/filesystem.service.mjs +291 -0
- package/esm2022/lib/services/iac/base.iac.service.mjs +155 -0
- package/esm2022/lib/services/iac/message-handler-single.mjs +48 -0
- package/esm2022/lib/services/iac/message-handler.mjs +22 -0
- package/esm2022/lib/services/iac/qr-generator.mjs +17 -0
- package/esm2022/lib/services/image/fetcher/image-direct.fetcher.mjs +16 -0
- package/esm2022/lib/services/image/fetcher/image-proxy.fetcher.mjs +45 -0
- package/esm2022/lib/services/image/image.service.mjs +39 -0
- package/esm2022/lib/services/key-pair/key-pair.service.mjs +57 -0
- package/esm2022/lib/services/language/language.service.mjs +47 -0
- package/esm2022/lib/services/modules/base-modules.service.mjs +157 -0
- package/esm2022/lib/services/modules/controller/base-modules.controller.mjs +2 -0
- package/esm2022/lib/services/modules/controller/integral/integral-modules.controller.mjs +91 -0
- package/esm2022/lib/services/modules/controller/isolated/isolated-modules.controller.mjs +190 -0
- package/esm2022/lib/services/modules/controller/modules.controller.mjs +85 -0
- package/esm2022/lib/services/permissions/permissions.service.mjs +140 -0
- package/esm2022/lib/services/protocol/defaults.mjs +55 -0
- package/esm2022/lib/services/protocol/protocol.service.mjs +230 -0
- package/esm2022/lib/services/protocol/store/base-protocol-store.service.mjs +63 -0
- package/esm2022/lib/services/protocol/store/main/main-protocol-store.service.mjs +91 -0
- package/esm2022/lib/services/protocol/store/sub/sub-protocol-store.service.mjs +174 -0
- package/esm2022/lib/services/qr/qr-generators/bc-ur-generator.mjs +127 -0
- package/esm2022/lib/services/qr/qr-generators/metamask-generator.mjs +117 -0
- package/esm2022/lib/services/qr/qr-generators/output-descriptor-generator.mjs +49 -0
- package/esm2022/lib/services/qr/qr-generators/serializer-v2-generator.mjs +30 -0
- package/esm2022/lib/services/qr/qr-generators/serializer-v3-generator.mjs +45 -0
- package/esm2022/lib/services/qr/qr-generators/xpub-generator.mjs +38 -0
- package/esm2022/lib/services/qr/qr-handler/serializer-v2-handler.mjs +114 -0
- package/esm2022/lib/services/qr/qr-handler/serializer-v3-handler.mjs +274 -0
- package/esm2022/lib/services/qr-scanner/qr-scanner.service.mjs +61 -0
- package/esm2022/lib/services/serializer/serializer.service.mjs +181 -0
- package/esm2022/lib/services/storage/base.storage.mjs +30 -0
- package/esm2022/lib/services/storage/storage.service.mjs +33 -0
- package/esm2022/lib/services/token/token.service.mjs +52 -0
- package/esm2022/lib/services/transaction/transaction.service.mjs +67 -0
- package/esm2022/lib/services/ui-event/ui-event.service.mjs +198 -0
- package/esm2022/lib/services/ui-event-elements/ui-event-elements.service.mjs +122 -0
- package/esm2022/lib/services/uri/uri.service.mjs +51 -0
- package/esm2022/lib/translation/AirGapTranslateLoader.mjs +26 -0
- package/esm2022/lib/types/Either.mjs +2 -0
- package/esm2022/lib/types/ExternalAliasResolver.mjs +2 -0
- package/esm2022/lib/types/RuntimeMode.mjs +6 -0
- package/esm2022/lib/types/SupportedLanguage.mjs +2 -0
- package/esm2022/lib/types/Token.mjs +2 -0
- package/esm2022/lib/types/isolated-modules/IsolatedModule.mjs +2 -0
- package/esm2022/lib/types/isolated-modules/IsolatedModuleManifest.mjs +2 -0
- package/esm2022/lib/types/isolated-modules/IsolatedModuleMetadata.mjs +2 -0
- package/esm2022/lib/types/ui/UIAction.mjs +6 -0
- package/esm2022/lib/types/ui/UIResource.mjs +8 -0
- package/esm2022/lib/utils/ExposedPromise.mjs +103 -0
- package/esm2022/lib/utils/airgap-transaction.mjs +23 -0
- package/esm2022/lib/utils/array.mjs +32 -0
- package/esm2022/lib/utils/modules/isolated/isolated-modules-metadata.mjs +10 -0
- package/esm2022/lib/utils/modules/load-protocol.mjs +19 -0
- package/esm2022/lib/utils/not-initialized.mjs +7 -0
- package/esm2022/lib/utils/protocol/delegation.mjs +33 -0
- package/esm2022/lib/utils/protocol/protocol-identifier.mjs +4 -0
- package/esm2022/lib/utils/protocol/protocol-network-identifier.mjs +18 -0
- package/esm2022/lib/utils/protocol/protocol-options.mjs +114 -0
- package/esm2022/lib/utils/protocol/protocol-v0-adapter.mjs +390 -0
- package/esm2022/lib/utils/utils.mjs +80 -0
- package/esm2022/lib/utils/worker.mjs +28 -0
- package/esm2022/public-api.mjs +102 -0
- package/esm2022/wallfree-dev-angular-core.mjs +5 -0
- package/fesm2022/wallfree-dev-angular-core.mjs +6933 -0
- package/fesm2022/wallfree-dev-angular-core.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/airgap-angular-core.module.d.ts +25 -0
- package/lib/airgap-angular-core.module.d.ts.map +1 -0
- package/lib/base/base.component.d.ts +18 -0
- package/lib/base/base.component.d.ts.map +1 -0
- package/lib/base/base.facade.d.ts +16 -0
- package/lib/base/base.facade.d.ts.map +1 -0
- package/lib/capacitor-plugins/definitions.d.ts +122 -0
- package/lib/capacitor-plugins/definitions.d.ts.map +1 -0
- package/lib/capacitor-plugins/injection-tokens.d.ts +18 -0
- package/lib/capacitor-plugins/injection-tokens.d.ts.map +1 -0
- package/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin-wrapper.d.ts +20 -0
- package/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin-wrapper.d.ts.map +1 -0
- package/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin.d.ts +38 -0
- package/lib/capacitor-plugins/isolated-modules/isolated-modules.plugin.d.ts.map +1 -0
- package/lib/components/account-item/account-item.component.d.ts +15 -0
- package/lib/components/account-item/account-item.component.d.ts.map +1 -0
- package/lib/components/account-selection/account-selection.component.d.ts +23 -0
- package/lib/components/account-selection/account-selection.component.d.ts.map +1 -0
- package/lib/components/components.module.d.ts +28 -0
- package/lib/components/components.module.d.ts.map +1 -0
- package/lib/components/currency-symbol/currency-symbol.component.d.ts +20 -0
- package/lib/components/currency-symbol/currency-symbol.component.d.ts.map +1 -0
- package/lib/components/currency-symbol/currency-symbol.facade.d.ts +16 -0
- package/lib/components/currency-symbol/currency-symbol.facade.d.ts.map +1 -0
- package/lib/components/currency-symbol/currency-symbol.types.d.ts +35 -0
- package/lib/components/currency-symbol/currency-symbol.types.d.ts.map +1 -0
- package/lib/components/from-to/from-to.component.d.ts +33 -0
- package/lib/components/from-to/from-to.component.d.ts.map +1 -0
- package/lib/components/iac-qr/iac-qr.component.d.ts +45 -0
- package/lib/components/iac-qr/iac-qr.component.d.ts.map +1 -0
- package/lib/components/identicon/identicon.component.d.ts +14 -0
- package/lib/components/identicon/identicon.component.d.ts.map +1 -0
- package/lib/components/isolated-modules-badges/isolated-modules-badges.component.d.ts +8 -0
- package/lib/components/isolated-modules-badges/isolated-modules-badges.component.d.ts.map +1 -0
- package/lib/components/isolated-modules-details/isolated-modules-details.component.d.ts +17 -0
- package/lib/components/isolated-modules-details/isolated-modules-details.component.d.ts.map +1 -0
- package/lib/components/isolated-modules-details/isolated-modules-details.facade.d.ts +17 -0
- package/lib/components/isolated-modules-details/isolated-modules-details.facade.d.ts.map +1 -0
- package/lib/components/isolated-modules-list/isolated-modules-list.component.d.ts +20 -0
- package/lib/components/isolated-modules-list/isolated-modules-list.component.d.ts.map +1 -0
- package/lib/components/isolated-modules-list/isolated-modules-list.facade.d.ts +15 -0
- package/lib/components/isolated-modules-list/isolated-modules-list.facade.d.ts.map +1 -0
- package/lib/components/isolated-modules-onboarding/isolated-modules-onboarding.component.d.ts +6 -0
- package/lib/components/isolated-modules-onboarding/isolated-modules-onboarding.component.d.ts.map +1 -0
- package/lib/components/network-badge/network-badge.component.d.ts +9 -0
- package/lib/components/network-badge/network-badge.component.d.ts.map +1 -0
- package/lib/components/qr/qr.component.d.ts +16 -0
- package/lib/components/qr/qr.component.d.ts.map +1 -0
- package/lib/components/qr-settings/qr-settings.component.d.ts +12 -0
- package/lib/components/qr-settings/qr-settings.component.d.ts.map +1 -0
- package/lib/components/titled-address/titled-address.component.d.ts +13 -0
- package/lib/components/titled-address/titled-address.component.d.ts.map +1 -0
- package/lib/components/titled-text/titled-text.component.d.ts +11 -0
- package/lib/components/titled-text/titled-text.component.d.ts.map +1 -0
- package/lib/config/app-config.d.ts +15 -0
- package/lib/config/app-config.d.ts.map +1 -0
- package/lib/pages/isolated-modules-list/isolated-modules-list.facade.d.ts +16 -0
- package/lib/pages/isolated-modules-list/isolated-modules-list.facade.d.ts.map +1 -0
- package/lib/pipes/amount-converter/amount-converter.pipe.d.ts +29 -0
- package/lib/pipes/amount-converter/amount-converter.pipe.d.ts.map +1 -0
- package/lib/pipes/fee-converter/fee-converter.pipe.d.ts +20 -0
- package/lib/pipes/fee-converter/fee-converter.pipe.d.ts.map +1 -0
- package/lib/pipes/pipes.module.d.ts +10 -0
- package/lib/pipes/pipes.module.d.ts.map +1 -0
- package/lib/pipes/wallet-filter/wallet-filter.pipe.d.ts +15 -0
- package/lib/pipes/wallet-filter/wallet-filter.pipe.d.ts.map +1 -0
- package/lib/protocol/adapter/protocol-v0-adapter.d.ts +231 -0
- package/lib/protocol/adapter/protocol-v0-adapter.d.ts.map +1 -0
- package/lib/protocol/isolated/base-isolated.d.ts +11 -0
- package/lib/protocol/isolated/base-isolated.d.ts.map +1 -0
- package/lib/protocol/isolated/block-explorer-isolated.d.ts +14 -0
- package/lib/protocol/isolated/block-explorer-isolated.d.ts.map +1 -0
- package/lib/protocol/isolated/protocol-offline-isolated.d.ts +17 -0
- package/lib/protocol/isolated/protocol-offline-isolated.d.ts.map +1 -0
- package/lib/protocol/isolated/protocol-online-isolated.d.ts +21 -0
- package/lib/protocol/isolated/protocol-online-isolated.d.ts.map +1 -0
- package/lib/protocol/isolated/v3-serializer-companion-isolated.d.ts +17 -0
- package/lib/protocol/isolated/v3-serializer-companion-isolated.d.ts.map +1 -0
- package/lib/services/address/address.service.d.ts +26 -0
- package/lib/services/address/address.service.d.ts.map +1 -0
- package/lib/services/clipboard/clipboard.service.d.ts +14 -0
- package/lib/services/clipboard/clipboard.service.d.ts.map +1 -0
- package/lib/services/deeplink/deeplink.service.d.ts +18 -0
- package/lib/services/deeplink/deeplink.service.d.ts.map +1 -0
- package/lib/services/environment/base-environment.service.d.ts +6 -0
- package/lib/services/environment/base-environment.service.d.ts.map +1 -0
- package/lib/services/filesystem/filesystem.service.d.ts +42 -0
- package/lib/services/filesystem/filesystem.service.d.ts.map +1 -0
- package/lib/services/iac/base.iac.service.d.ts +41 -0
- package/lib/services/iac/base.iac.service.d.ts.map +1 -0
- package/lib/services/iac/message-handler-single.d.ts +20 -0
- package/lib/services/iac/message-handler-single.d.ts.map +1 -0
- package/lib/services/iac/message-handler.d.ts +34 -0
- package/lib/services/iac/message-handler.d.ts.map +1 -0
- package/lib/services/iac/qr-generator.d.ts +13 -0
- package/lib/services/iac/qr-generator.d.ts.map +1 -0
- package/lib/services/image/fetcher/image-direct.fetcher.d.ts +9 -0
- package/lib/services/image/fetcher/image-direct.fetcher.d.ts.map +1 -0
- package/lib/services/image/fetcher/image-proxy.fetcher.d.ts +9 -0
- package/lib/services/image/fetcher/image-proxy.fetcher.d.ts.map +1 -0
- package/lib/services/image/image.service.d.ts +20 -0
- package/lib/services/image/image.service.d.ts.map +1 -0
- package/lib/services/key-pair/key-pair.service.d.ts +14 -0
- package/lib/services/key-pair/key-pair.service.d.ts.map +1 -0
- package/lib/services/language/language.service.d.ts +21 -0
- package/lib/services/language/language.service.d.ts.map +1 -0
- package/lib/services/modules/base-modules.service.d.ts +34 -0
- package/lib/services/modules/base-modules.service.d.ts.map +1 -0
- package/lib/services/modules/controller/base-modules.controller.d.ts +19 -0
- package/lib/services/modules/controller/base-modules.controller.d.ts.map +1 -0
- package/lib/services/modules/controller/integral/integral-modules.controller.d.ts +22 -0
- package/lib/services/modules/controller/integral/integral-modules.controller.d.ts.map +1 -0
- package/lib/services/modules/controller/isolated/isolated-modules.controller.d.ts +32 -0
- package/lib/services/modules/controller/isolated/isolated-modules.controller.d.ts.map +1 -0
- package/lib/services/modules/controller/modules.controller.d.ts +27 -0
- package/lib/services/modules/controller/modules.controller.d.ts.map +1 -0
- package/lib/services/permissions/permissions.service.d.ts +39 -0
- package/lib/services/permissions/permissions.service.d.ts.map +1 -0
- package/lib/services/protocol/defaults.d.ts +6 -0
- package/lib/services/protocol/defaults.d.ts.map +1 -0
- package/lib/services/protocol/protocol.service.d.ts +47 -0
- package/lib/services/protocol/protocol.service.d.ts.map +1 -0
- package/lib/services/protocol/store/base-protocol-store.service.d.ts +36 -0
- package/lib/services/protocol/store/base-protocol-store.service.d.ts.map +1 -0
- package/lib/services/protocol/store/main/main-protocol-store.service.d.ts +21 -0
- package/lib/services/protocol/store/main/main-protocol-store.service.d.ts.map +1 -0
- package/lib/services/protocol/store/sub/sub-protocol-store.service.d.ts +31 -0
- package/lib/services/protocol/store/sub/sub-protocol-store.service.d.ts.map +1 -0
- package/lib/services/qr/qr-generators/bc-ur-generator.d.ts +16 -0
- package/lib/services/qr/qr-generators/bc-ur-generator.d.ts.map +1 -0
- package/lib/services/qr/qr-generators/metamask-generator.d.ts +16 -0
- package/lib/services/qr/qr-generators/metamask-generator.d.ts.map +1 -0
- package/lib/services/qr/qr-generators/output-descriptor-generator.d.ts +13 -0
- package/lib/services/qr/qr-generators/output-descriptor-generator.d.ts.map +1 -0
- package/lib/services/qr/qr-generators/serializer-v2-generator.d.ts +13 -0
- package/lib/services/qr/qr-generators/serializer-v2-generator.d.ts.map +1 -0
- package/lib/services/qr/qr-generators/serializer-v3-generator.d.ts +12 -0
- package/lib/services/qr/qr-generators/serializer-v3-generator.d.ts.map +1 -0
- package/lib/services/qr/qr-generators/xpub-generator.d.ts +12 -0
- package/lib/services/qr/qr-generators/xpub-generator.d.ts.map +1 -0
- package/lib/services/qr/qr-handler/serializer-v2-handler.d.ts +20 -0
- package/lib/services/qr/qr-handler/serializer-v2-handler.d.ts.map +1 -0
- package/lib/services/qr/qr-handler/serializer-v3-handler.d.ts +23 -0
- package/lib/services/qr/qr-handler/serializer-v3-handler.d.ts.map +1 -0
- package/lib/services/qr-scanner/qr-scanner.service.d.ts +23 -0
- package/lib/services/qr-scanner/qr-scanner.service.d.ts.map +1 -0
- package/lib/services/serializer/serializer.service.d.ts +34 -0
- package/lib/services/serializer/serializer.service.d.ts.map +1 -0
- package/lib/services/storage/base.storage.d.ts +15 -0
- package/lib/services/storage/base.storage.d.ts.map +1 -0
- package/lib/services/storage/storage.service.d.ts +28 -0
- package/lib/services/storage/storage.service.d.ts.map +1 -0
- package/lib/services/token/token.service.d.ts +11 -0
- package/lib/services/token/token.service.d.ts.map +1 -0
- package/lib/services/transaction/transaction.service.d.ts +21 -0
- package/lib/services/transaction/transaction.service.d.ts.map +1 -0
- package/lib/services/ui-event/ui-event.service.d.ts +58 -0
- package/lib/services/ui-event/ui-event.service.d.ts.map +1 -0
- package/lib/services/ui-event-elements/ui-event-elements.service.d.ts +16 -0
- package/lib/services/ui-event-elements/ui-event-elements.service.d.ts.map +1 -0
- package/lib/services/uri/uri.service.d.ts +15 -0
- package/lib/services/uri/uri.service.d.ts.map +1 -0
- package/lib/translation/AirGapTranslateLoader.d.ts +15 -0
- package/lib/translation/AirGapTranslateLoader.d.ts.map +1 -0
- package/lib/types/Either.d.ts +2 -0
- package/lib/types/Either.d.ts.map +1 -0
- package/lib/types/ExternalAliasResolver.d.ts +6 -0
- package/lib/types/ExternalAliasResolver.d.ts.map +1 -0
- package/lib/types/RuntimeMode.d.ts +5 -0
- package/lib/types/RuntimeMode.d.ts.map +1 -0
- package/lib/types/SupportedLanguage.d.ts +2 -0
- package/lib/types/SupportedLanguage.d.ts.map +1 -0
- package/lib/types/Token.d.ts +9 -0
- package/lib/types/Token.d.ts.map +1 -0
- package/lib/types/isolated-modules/IsolatedModule.d.ts +28 -0
- package/lib/types/isolated-modules/IsolatedModule.d.ts.map +1 -0
- package/lib/types/isolated-modules/IsolatedModuleManifest.d.ts +24 -0
- package/lib/types/isolated-modules/IsolatedModuleManifest.d.ts.map +1 -0
- package/lib/types/isolated-modules/IsolatedModuleMetadata.d.ts +21 -0
- package/lib/types/isolated-modules/IsolatedModuleMetadata.d.ts.map +1 -0
- package/lib/types/ui/UIAction.d.ts +10 -0
- package/lib/types/ui/UIAction.d.ts.map +1 -0
- package/lib/types/ui/UIResource.d.ts +11 -0
- package/lib/types/ui/UIResource.d.ts.map +1 -0
- package/lib/utils/ExposedPromise.d.ts +40 -0
- package/lib/utils/ExposedPromise.d.ts.map +1 -0
- package/lib/utils/airgap-transaction.d.ts +4 -0
- package/lib/utils/airgap-transaction.d.ts.map +1 -0
- package/lib/utils/array.d.ts +6 -0
- package/lib/utils/array.d.ts.map +1 -0
- package/lib/utils/modules/isolated/isolated-modules-metadata.d.ts +3 -0
- package/lib/utils/modules/isolated/isolated-modules-metadata.d.ts.map +1 -0
- package/lib/utils/modules/load-protocol.d.ts +4 -0
- package/lib/utils/modules/load-protocol.d.ts.map +1 -0
- package/lib/utils/not-initialized.d.ts +2 -0
- package/lib/utils/not-initialized.d.ts.map +1 -0
- package/lib/utils/protocol/delegation.d.ts +6 -0
- package/lib/utils/protocol/delegation.d.ts.map +1 -0
- package/lib/utils/protocol/protocol-identifier.d.ts +3 -0
- package/lib/utils/protocol/protocol-identifier.d.ts.map +1 -0
- package/lib/utils/protocol/protocol-network-identifier.d.ts +8 -0
- package/lib/utils/protocol/protocol-network-identifier.d.ts.map +1 -0
- package/lib/utils/protocol/protocol-options.d.ts +6 -0
- package/lib/utils/protocol/protocol-options.d.ts.map +1 -0
- package/lib/utils/protocol/protocol-v0-adapter.d.ts +75 -0
- package/lib/utils/protocol/protocol-v0-adapter.d.ts.map +1 -0
- package/lib/utils/utils.d.ts +9 -0
- package/lib/utils/utils.d.ts.map +1 -0
- package/lib/utils/worker.d.ts +11 -0
- package/lib/utils/worker.d.ts.map +1 -0
- package/package.json +88 -0
- package/public-api.d.ts +87 -0
- package/public-api.d.ts.map +1 -0
- package/src/assets/i18n-common/de.json +112 -0
- package/src/assets/i18n-common/en.json +112 -0
- package/src/assets/i18n-common/es.json +112 -0
- package/src/assets/i18n-common/fr.json +112 -0
- package/src/assets/i18n-common/pt_BR.json +112 -0
- package/src/assets/i18n-common/ru.json +112 -0
- package/src/assets/i18n-common/zh_CN.json +112 -0
- package/src/assets/img/identicon_placeholder.png +0 -0
- package/src/assets/native/isolated_modules/isolated-modules.js-engine-android.js +34 -0
- package/src/assets/native/isolated_modules/isolated-modules.script.js +304 -0
- package/src/assets/symbols/abt.svg +1 -0
- package/src/assets/symbols/adx.svg +1 -0
- package/src/assets/symbols/ae.svg +17 -0
- package/src/assets/symbols/agi.svg +1 -0
- package/src/assets/symbols/aion.svg +1 -0
- package/src/assets/symbols/amb.svg +1 -0
- package/src/assets/symbols/ampl.svg +7 -0
- package/src/assets/symbols/ant.svg +1 -0
- package/src/assets/symbols/aoa.svg +7 -0
- package/src/assets/symbols/appc.svg +1 -0
- package/src/assets/symbols/aqua.svg +5 -0
- package/src/assets/symbols/arn.svg +1 -0
- package/src/assets/symbols/ary.svg +1 -0
- package/src/assets/symbols/ast.svg +1 -0
- package/src/assets/symbols/astr.png +0 -0
- package/src/assets/symbols/atm.svg +1 -0
- package/src/assets/symbols/atom.svg +1 -0
- package/src/assets/symbols/auto.svg +1 -0
- package/src/assets/symbols/bal.svg +7 -0
- package/src/assets/symbols/band.svg +7 -0
- package/src/assets/symbols/bat.svg +1 -0
- package/src/assets/symbols/bcbc.svg +1 -0
- package/src/assets/symbols/bcpt.svg +1 -0
- package/src/assets/symbols/bix.svg +1 -0
- package/src/assets/symbols/blz.svg +1 -0
- package/src/assets/symbols/bnb.svg +1 -0
- package/src/assets/symbols/bnt.svg +1 -0
- package/src/assets/symbols/bnty.svg +1 -0
- package/src/assets/symbols/bpt.svg +1 -0
- package/src/assets/symbols/brc.svg +7 -0
- package/src/assets/symbols/brd.svg +1 -0
- package/src/assets/symbols/btc.svg +1 -0
- package/src/assets/symbols/btctz.png +0 -0
- package/src/assets/symbols/btm.svg +1 -0
- package/src/assets/symbols/busd.svg +7 -0
- package/src/assets/symbols/bytom.svg +7 -0
- package/src/assets/symbols/cacu.svg +1 -0
- package/src/assets/symbols/cdt.svg +1 -0
- package/src/assets/symbols/cel.svg +7 -0
- package/src/assets/symbols/cennz.svg +7 -0
- package/src/assets/symbols/cfx.svg +1 -0
- package/src/assets/symbols/chsb.svg +7 -0
- package/src/assets/symbols/chz.svg +7 -0
- package/src/assets/symbols/ckbtc.png +0 -0
- package/src/assets/symbols/cmt.svg +1 -0
- package/src/assets/symbols/cnd.svg +1 -0
- package/src/assets/symbols/cob.svg +1 -0
- package/src/assets/symbols/comp.svg +7 -0
- package/src/assets/symbols/coreum.png +0 -0
- package/src/assets/symbols/cred.svg +1 -0
- package/src/assets/symbols/cro.svg +7 -0
- package/src/assets/symbols/crpt.svg +1 -0
- package/src/assets/symbols/crv.svg +7 -0
- package/src/assets/symbols/cs.svg +1 -0
- package/src/assets/symbols/ctez.svg +1 -0
- package/src/assets/symbols/ctr.svg +1 -0
- package/src/assets/symbols/ctxc.svg +1 -0
- package/src/assets/symbols/cusdc.svg +7 -0
- package/src/assets/symbols/cvc.svg +1 -0
- package/src/assets/symbols/cvt.svg +7 -0
- package/src/assets/symbols/czrx.svg +7 -0
- package/src/assets/symbols/dai.svg +7 -0
- package/src/assets/symbols/dat.svg +1 -0
- package/src/assets/symbols/data.svg +1 -0
- package/src/assets/symbols/dcn.svg +1 -0
- package/src/assets/symbols/deez.svg +1 -0
- package/src/assets/symbols/dent.svg +1 -0
- package/src/assets/symbols/dew.svg +1 -0
- package/src/assets/symbols/dgd.svg +1 -0
- package/src/assets/symbols/dia.svg +7 -0
- package/src/assets/symbols/divx.svg +7 -0
- package/src/assets/symbols/dlt.svg +1 -0
- package/src/assets/symbols/dnt.svg +1 -0
- package/src/assets/symbols/dock.svg +1 -0
- package/src/assets/symbols/doga.png +0 -0
- package/src/assets/symbols/dot.svg +14 -0
- package/src/assets/symbols/drgn.svg +1 -0
- package/src/assets/symbols/drop.svg +1 -0
- package/src/assets/symbols/dth.svg +1 -0
- package/src/assets/symbols/dtr.svg +1 -0
- package/src/assets/symbols/dx.svg +7 -0
- package/src/assets/symbols/edg.svg +1 -0
- package/src/assets/symbols/edo.svg +1 -0
- package/src/assets/symbols/elf.svg +1 -0
- package/src/assets/symbols/elix.svg +1 -0
- package/src/assets/symbols/eng.svg +1 -0
- package/src/assets/symbols/enj.svg +1 -0
- package/src/assets/symbols/entrp.svg +1 -0
- package/src/assets/symbols/eos.svg +1 -0
- package/src/assets/symbols/eth.svg +1 -0
- package/src/assets/symbols/ethtz.png +0 -0
- package/src/assets/symbols/eurc.svg +8 -0
- package/src/assets/symbols/evx.svg +1 -0
- package/src/assets/symbols/fet.svg +7 -0
- package/src/assets/symbols/frax.svg +26 -0
- package/src/assets/symbols/fsn.svg +1 -0
- package/src/assets/symbols/ftc.svg +1 -0
- package/src/assets/symbols/ftm.svg +7 -0
- package/src/assets/symbols/fuel.svg +1 -0
- package/src/assets/symbols/fun.svg +1 -0
- package/src/assets/symbols/gbx.svg +1 -0
- package/src/assets/symbols/generic-coin.svg +1 -0
- package/src/assets/symbols/glmr.svg +1 -0
- package/src/assets/symbols/gno.svg +1 -0
- package/src/assets/symbols/gnt.svg +1 -0
- package/src/assets/symbols/grs.svg +1 -0
- package/src/assets/symbols/gsc.svg +1 -0
- package/src/assets/symbols/gto.svg +1 -0
- package/src/assets/symbols/gup.svg +1 -0
- package/src/assets/symbols/gusd.svg +1 -0
- package/src/assets/symbols/gvt.svg +1 -0
- package/src/assets/symbols/gzr.svg +1 -0
- package/src/assets/symbols/hedg.svg +7 -0
- package/src/assets/symbols/hodl.svg +1 -0
- package/src/assets/symbols/hot.svg +7 -0
- package/src/assets/symbols/hpb.svg +1 -0
- package/src/assets/symbols/ht.svg +1 -0
- package/src/assets/symbols/husd.svg +7 -0
- package/src/assets/symbols/icn.svg +1 -0
- package/src/assets/symbols/icp.svg +16 -0
- package/src/assets/symbols/icx.svg +1 -0
- package/src/assets/symbols/inb.svg +7 -0
- package/src/assets/symbols/ino.svg +7 -0
- package/src/assets/symbols/ins.svg +1 -0
- package/src/assets/symbols/iost.svg +1 -0
- package/src/assets/symbols/iotx.svg +1 -0
- package/src/assets/symbols/itc.svg +1 -0
- package/src/assets/symbols/jnt.svg +1 -0
- package/src/assets/symbols/kcs.svg +7 -0
- package/src/assets/symbols/kin.svg +1 -0
- package/src/assets/symbols/knc.svg +1 -0
- package/src/assets/symbols/ksm.svg +1 -0
- package/src/assets/symbols/kusd.svg +1 -0
- package/src/assets/symbols/ldo.svg +97 -0
- package/src/assets/symbols/lend.svg +1 -0
- package/src/assets/symbols/leo.svg +7 -0
- package/src/assets/symbols/link.svg +7 -0
- package/src/assets/symbols/loom.svg +1 -0
- package/src/assets/symbols/lpt.svg +1 -0
- package/src/assets/symbols/lrc.svg +1 -0
- package/src/assets/symbols/lun.svg +1 -0
- package/src/assets/symbols/mana.svg +1 -0
- package/src/assets/symbols/matic.svg +7 -0
- package/src/assets/symbols/mcap.svg +1 -0
- package/src/assets/symbols/mco.svg +1 -0
- package/src/assets/symbols/mda.svg +1 -0
- package/src/assets/symbols/mds.svg +1 -0
- package/src/assets/symbols/mkr.svg +1 -0
- package/src/assets/symbols/mln.svg +7 -0
- package/src/assets/symbols/mnw.svg +1 -0
- package/src/assets/symbols/mod.svg +1 -0
- package/src/assets/symbols/movr.svg +10 -0
- package/src/assets/symbols/mth.svg +1 -0
- package/src/assets/symbols/mtl.svg +1 -0
- package/src/assets/symbols/mxc.svg +7 -0
- package/src/assets/symbols/nas.svg +1 -0
- package/src/assets/symbols/ncash.svg +1 -0
- package/src/assets/symbols/neu.svg +1 -0
- package/src/assets/symbols/nexo.svg +1 -0
- package/src/assets/symbols/ngc.svg +1 -0
- package/src/assets/symbols/nio.svg +1 -0
- package/src/assets/symbols/nmr.svg +7 -0
- package/src/assets/symbols/noah.svg +7 -0
- package/src/assets/symbols/npxs.svg +1 -0
- package/src/assets/symbols/nuls.svg +1 -0
- package/src/assets/symbols/nxm.svg +7 -0
- package/src/assets/symbols/oax.svg +1 -0
- package/src/assets/symbols/ocean.svg +7 -0
- package/src/assets/symbols/okb.svg +7 -0
- package/src/assets/symbols/omg.svg +1 -0
- package/src/assets/symbols/ong.svg +1 -0
- package/src/assets/symbols/op.svg +21 -0
- package/src/assets/symbols/ost.svg +1 -0
- package/src/assets/symbols/pax.svg +1 -0
- package/src/assets/symbols/paxg.svg +7 -0
- package/src/assets/symbols/pay.svg +1 -0
- package/src/assets/symbols/plenty.svg +1 -0
- package/src/assets/symbols/plr.svg +1 -0
- package/src/assets/symbols/pnk.svg +7 -0
- package/src/assets/symbols/poe.svg +1 -0
- package/src/assets/symbols/poly.svg +1 -0
- package/src/assets/symbols/powr.svg +1 -0
- package/src/assets/symbols/ppp.svg +1 -0
- package/src/assets/symbols/ppt.svg +1 -0
- package/src/assets/symbols/prl.svg +1 -0
- package/src/assets/symbols/qash.svg +1 -0
- package/src/assets/symbols/qnt.svg +7 -0
- package/src/assets/symbols/qrl.svg +1 -0
- package/src/assets/symbols/qsp.svg +1 -0
- package/src/assets/symbols/qtum.svg +1 -0
- package/src/assets/symbols/quipu.png +0 -0
- package/src/assets/symbols/r.svg +1 -0
- package/src/assets/symbols/rcn.svg +1 -0
- package/src/assets/symbols/rdn.svg +1 -0
- package/src/assets/symbols/ren.svg +7 -0
- package/src/assets/symbols/rep.svg +1 -0
- package/src/assets/symbols/repv2.svg +7 -0
- package/src/assets/symbols/req.svg +1 -0
- package/src/assets/symbols/rev.svg +7 -0
- package/src/assets/symbols/rhoc.svg +1 -0
- package/src/assets/symbols/rlc.svg +1 -0
- package/src/assets/symbols/rsr.svg +7 -0
- package/src/assets/symbols/sai.svg +7 -0
- package/src/assets/symbols/salt.svg +1 -0
- package/src/assets/symbols/san.svg +1 -0
- package/src/assets/symbols/sdn.svg +1 -0
- package/src/assets/symbols/shx.svg +32 -0
- package/src/assets/symbols/sirs.svg +1 -0
- package/src/assets/symbols/smart.svg +1 -0
- package/src/assets/symbols/sngls.svg +1 -0
- package/src/assets/symbols/snm.svg +1 -0
- package/src/assets/symbols/snt.svg +1 -0
- package/src/assets/symbols/snx.svg +7 -0
- package/src/assets/symbols/soc.svg +1 -0
- package/src/assets/symbols/sol.svg +1 -0
- package/src/assets/symbols/spank.svg +1 -0
- package/src/assets/symbols/sphtx.svg +1 -0
- package/src/assets/symbols/srm.svg +7 -0
- package/src/assets/symbols/srn.svg +1 -0
- package/src/assets/symbols/stake.svg +7 -0
- package/src/assets/symbols/stellar.png +0 -0
- package/src/assets/symbols/storj.svg +1 -0
- package/src/assets/symbols/storm.svg +1 -0
- package/src/assets/symbols/stq.svg +1 -0
- package/src/assets/symbols/stxtz.svg +18 -0
- package/src/assets/symbols/sub.svg +1 -0
- package/src/assets/symbols/sushi.svg +7 -0
- package/src/assets/symbols/sxp.svg +7 -0
- package/src/assets/symbols/sxtz.svg +6 -0
- package/src/assets/symbols/taas.svg +1 -0
- package/src/assets/symbols/tau.svg +1 -0
- package/src/assets/symbols/tbx.svg +1 -0
- package/src/assets/symbols/tel.svg +1 -0
- package/src/assets/symbols/ten.svg +1 -0
- package/src/assets/symbols/theta.svg +1 -0
- package/src/assets/symbols/tix.svg +1 -0
- package/src/assets/symbols/tkn.svg +1 -0
- package/src/assets/symbols/tnt.svg +1 -0
- package/src/assets/symbols/tomo.svg +1 -0
- package/src/assets/symbols/trac.svg +7 -0
- package/src/assets/symbols/trb.svg +7 -0
- package/src/assets/symbols/trx.svg +1 -0
- package/src/assets/symbols/tusd.svg +1 -0
- package/src/assets/symbols/tzbtc.svg +1 -0
- package/src/assets/symbols/ubt.svg +7 -0
- package/src/assets/symbols/ubtc.svg +1 -0
- package/src/assets/symbols/udefi.svg +1 -0
- package/src/assets/symbols/uma.svg +7 -0
- package/src/assets/symbols/usdc.svg +1 -0
- package/src/assets/symbols/usdt.png +0 -0
- package/src/assets/symbols/usdt.svg +1 -0
- package/src/assets/symbols/usdtz.svg +17 -0
- package/src/assets/symbols/ust.svg +1 -0
- package/src/assets/symbols/utk.svg +1 -0
- package/src/assets/symbols/uusd.svg +1 -0
- package/src/assets/symbols/uxtz.svg +1 -0
- package/src/assets/symbols/velo.svg +5 -0
- package/src/assets/symbols/ven.svg +7 -0
- package/src/assets/symbols/veri.svg +1 -0
- package/src/assets/symbols/verse.svg +1 -0
- package/src/assets/symbols/vest.svg +7 -0
- package/src/assets/symbols/vib.svg +1 -0
- package/src/assets/symbols/vibe.svg +1 -0
- package/src/assets/symbols/wabi.svg +1 -0
- package/src/assets/symbols/wax.svg +1 -0
- package/src/assets/symbols/wbtc.svg +7 -0
- package/src/assets/symbols/weth.svg +18 -0
- package/src/assets/symbols/wic.svg +7 -0
- package/src/assets/symbols/wings.svg +1 -0
- package/src/assets/symbols/wnxm.svg +7 -0
- package/src/assets/symbols/wpr.svg +1 -0
- package/src/assets/symbols/wrap.png +0 -0
- package/src/assets/symbols/wtc.svg +1 -0
- package/src/assets/symbols/wusdc.png +0 -0
- package/src/assets/symbols/xchf.svg +1 -0
- package/src/assets/symbols/xdce.svg +7 -0
- package/src/assets/symbols/xin.svg +7 -0
- package/src/assets/symbols/xpa.svg +1 -0
- package/src/assets/symbols/xpl.svg +1 -0
- package/src/assets/symbols/xtz.svg +5 -0
- package/src/assets/symbols/yfi.svg +7 -0
- package/src/assets/symbols/you.svg +1 -0
- package/src/assets/symbols/yoyow.svg +1 -0
- package/src/assets/symbols/ytez.svg +1 -0
- package/src/assets/symbols/zb.svg +7 -0
- package/src/assets/symbols/zil.svg +1 -0
- package/src/assets/symbols/zrx.svg +1 -0
- package/src/assets/workers/airgap-coin-lib.js +119 -0
- package/wallfree-dev-angular-core.d.ts.map +1 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { Directory, Encoding } from '@capacitor/filesystem';
|
|
3
|
+
import { FILESYSTEM_PLUGIN, ZIP_PLUGIN } from '../../capacitor-plugins/injection-tokens';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../uri/uri.service";
|
|
6
|
+
import * as i2 from "../image/image.service";
|
|
7
|
+
const MANIFEST_FILENAME = 'manifest.json';
|
|
8
|
+
const SIGNATURE_FILENAME = 'module.sig';
|
|
9
|
+
const ISOLATED_MODULES_PATH = '__airgap_protocol_modules__';
|
|
10
|
+
const ISOLATED_SYMBOLS_PATH = '__symbols__';
|
|
11
|
+
export class FilesystemService {
|
|
12
|
+
constructor(uriService, imageService, filesystem, zip) {
|
|
13
|
+
this.uriService = uriService;
|
|
14
|
+
this.imageService = imageService;
|
|
15
|
+
this.filesystem = filesystem;
|
|
16
|
+
this.zip = zip;
|
|
17
|
+
}
|
|
18
|
+
async readLazyImage(path) {
|
|
19
|
+
try {
|
|
20
|
+
const { dir, filename } = this.splitPath(path);
|
|
21
|
+
const filesInDir = await this.filesInDir(dir);
|
|
22
|
+
if (filesInDir.has(filename)) {
|
|
23
|
+
const data = await this.readDataFile({ path }).then((result) => result.data);
|
|
24
|
+
const metadata = filesInDir.has(this.getMetadataFilePath(filename))
|
|
25
|
+
? await this.readImageMetadata(path)
|
|
26
|
+
: undefined;
|
|
27
|
+
return this.uriService.data(data, metadata.mediaType, metadata.isBinary);
|
|
28
|
+
}
|
|
29
|
+
else if (filesInDir.has(this.getLinkFilePath(filename))) {
|
|
30
|
+
return this.downloadRemoteImage(path);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async writeLazyImage(path, uri) {
|
|
41
|
+
const dataEntry = this.createLazyDataEntry(path, uri);
|
|
42
|
+
await this.saveImageData(dataEntry.path, dataEntry.data, dataEntry.encoding, dataEntry.metadata);
|
|
43
|
+
}
|
|
44
|
+
async downloadRemoteImage(path) {
|
|
45
|
+
const uri = await this.readDataFile({
|
|
46
|
+
path: this.getLinkFilePath(path),
|
|
47
|
+
encoding: Encoding.UTF8
|
|
48
|
+
}).then((result) => result.data);
|
|
49
|
+
const base64 = await this.imageService.fetch(uri);
|
|
50
|
+
if (!base64) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
const splitData = this.uriService.splitDataUri(base64);
|
|
54
|
+
await this.saveImageData(path, splitData.data, Encoding.UTF8, { mediaType: splitData.mediaType, isBinary: splitData.isBinary });
|
|
55
|
+
return base64;
|
|
56
|
+
}
|
|
57
|
+
createLazyDataEntry(path, uri) {
|
|
58
|
+
const uriType = this.uriService.resolveUriType(uri);
|
|
59
|
+
// eslint-disable-next-line default-case
|
|
60
|
+
switch (uriType) {
|
|
61
|
+
case 'remote':
|
|
62
|
+
case 'unsupported':
|
|
63
|
+
return {
|
|
64
|
+
path: this.getLinkFilePath(path),
|
|
65
|
+
data: uri,
|
|
66
|
+
encoding: Encoding.UTF8
|
|
67
|
+
};
|
|
68
|
+
case 'data':
|
|
69
|
+
const splitData = this.uriService.splitDataUri(uri);
|
|
70
|
+
return {
|
|
71
|
+
path,
|
|
72
|
+
data: splitData.data,
|
|
73
|
+
encoding: Encoding.UTF8,
|
|
74
|
+
metadata: splitData.mediaType ? { mediaType: splitData.mediaType, isBinary: splitData.isBinary } : undefined
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async readIsolatedSymbol(name) {
|
|
79
|
+
try {
|
|
80
|
+
const dir = `${ISOLATED_MODULES_PATH}/${ISOLATED_SYMBOLS_PATH}`;
|
|
81
|
+
const path = `${dir}/${name.toLowerCase()}`;
|
|
82
|
+
const { data } = await this.readDataFile({ path });
|
|
83
|
+
const metadata = await this.readImageMetadata(path);
|
|
84
|
+
return this.uriService.data(data, metadata.mediaType, metadata.isBinary);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async createTempProtocolModule(name, path) {
|
|
91
|
+
const tempDir = await this.createTempProtocolModuleDir(name);
|
|
92
|
+
try {
|
|
93
|
+
await this.zip.unzip({
|
|
94
|
+
from: path,
|
|
95
|
+
to: tempDir.path,
|
|
96
|
+
toDirectory: tempDir.directory
|
|
97
|
+
});
|
|
98
|
+
return {
|
|
99
|
+
path: tempDir.path,
|
|
100
|
+
directory: tempDir.directory
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
await this.removeTempProtocolModule(tempDir.path, tempDir.directory).catch(() => {
|
|
105
|
+
/* no action */
|
|
106
|
+
});
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
async removeTempProtocolModule(path, directory) {
|
|
111
|
+
return this.filesystem.rmdir({
|
|
112
|
+
path,
|
|
113
|
+
directory,
|
|
114
|
+
recursive: true
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
async findProtocolModuleRoot(path, directory) {
|
|
118
|
+
const { type } = await this.filesystem.stat({ path, directory });
|
|
119
|
+
if (type === 'directory') {
|
|
120
|
+
const root = await this.findProtocolModuleRootInDir(path, directory);
|
|
121
|
+
return root?.replace(`${path}/`, '');
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
return undefined;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async findProtocolModuleRootInDir(path, directory) {
|
|
128
|
+
const { files } = await this.filesystem.readdir({ path, directory });
|
|
129
|
+
const hasManifest = files.find((file) => file.type === 'file' && file.name === MANIFEST_FILENAME);
|
|
130
|
+
if (hasManifest) {
|
|
131
|
+
return path;
|
|
132
|
+
}
|
|
133
|
+
for (const file of files) {
|
|
134
|
+
if (file.type === 'directory') {
|
|
135
|
+
const root = await this.findProtocolModuleRootInDir(`${path}/${file.name}`, directory);
|
|
136
|
+
if (root !== undefined) {
|
|
137
|
+
return root;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
async installProtocolModule(identifier, files, symbols, currentLocation) {
|
|
144
|
+
const newPath = `${ISOLATED_MODULES_PATH}/${identifier}`;
|
|
145
|
+
const newDirectory = Directory.Data;
|
|
146
|
+
try {
|
|
147
|
+
for (const file of [MANIFEST_FILENAME, SIGNATURE_FILENAME, ...files]) {
|
|
148
|
+
const lastSegmentIndex = file.lastIndexOf('/');
|
|
149
|
+
const parent = file.substring(0, lastSegmentIndex).replace(/^\/+/, '');
|
|
150
|
+
await this.filesystem
|
|
151
|
+
.mkdir({
|
|
152
|
+
path: `${newPath}/${parent}`,
|
|
153
|
+
directory: newDirectory,
|
|
154
|
+
recursive: true
|
|
155
|
+
})
|
|
156
|
+
.catch(() => {
|
|
157
|
+
/* no action */
|
|
158
|
+
});
|
|
159
|
+
await this.filesystem.copy({
|
|
160
|
+
from: `${currentLocation.path}/${currentLocation.root}/${file}`,
|
|
161
|
+
directory: currentLocation.directory,
|
|
162
|
+
to: `${newPath}/${file}`,
|
|
163
|
+
toDirectory: newDirectory
|
|
164
|
+
});
|
|
165
|
+
const symbolsDir = `${ISOLATED_MODULES_PATH}/${ISOLATED_SYMBOLS_PATH}`;
|
|
166
|
+
await this.filesystem
|
|
167
|
+
.mkdir({
|
|
168
|
+
path: symbolsDir,
|
|
169
|
+
directory: newDirectory,
|
|
170
|
+
recursive: true
|
|
171
|
+
})
|
|
172
|
+
.catch(() => {
|
|
173
|
+
/* no action */
|
|
174
|
+
});
|
|
175
|
+
await Promise.all(Object.entries(symbols).map(async ([symbol, uri]) => {
|
|
176
|
+
const path = `${symbolsDir}/${symbol.toLowerCase()}`;
|
|
177
|
+
if (uri.startsWith('file://')) {
|
|
178
|
+
const resPath = uri.replace(/^file:\/\//, '');
|
|
179
|
+
const extension = uri.split('.').slice(-1)[0].toLocaleLowerCase();
|
|
180
|
+
await this.filesystem.copy({
|
|
181
|
+
from: `${currentLocation.path}/${currentLocation.root}/${resPath}`,
|
|
182
|
+
directory: currentLocation.directory,
|
|
183
|
+
to: path,
|
|
184
|
+
toDirectory: newDirectory
|
|
185
|
+
});
|
|
186
|
+
await this.saveImageMetadata(path, {
|
|
187
|
+
mediaType: `image/${extension === 'svg' ? 'svg+xml' : extension}`,
|
|
188
|
+
isBinary: true
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
else if (uri.startsWith('data:image')) {
|
|
192
|
+
const splitData = this.uriService.splitDataUri(uri);
|
|
193
|
+
await this.saveImageData(path, splitData.data, Encoding.UTF8, {
|
|
194
|
+
mediaType: splitData.mediaType,
|
|
195
|
+
isBinary: splitData.isBinary
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
await this.removeTempProtocolModule(newPath, newDirectory).catch(() => {
|
|
203
|
+
/* no action */
|
|
204
|
+
});
|
|
205
|
+
throw error;
|
|
206
|
+
}
|
|
207
|
+
finally {
|
|
208
|
+
await this.removeTempProtocolModule(currentLocation.path, currentLocation.directory).catch(() => {
|
|
209
|
+
/* no action */
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
async saveImageData(path, data, encoding, metadata) {
|
|
214
|
+
await this.writeDataFile({
|
|
215
|
+
path,
|
|
216
|
+
data,
|
|
217
|
+
encoding
|
|
218
|
+
});
|
|
219
|
+
if (metadata) {
|
|
220
|
+
await this.saveImageMetadata(path, metadata);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
async saveImageMetadata(path, metadata) {
|
|
224
|
+
await this.writeDataFile({
|
|
225
|
+
path: this.getMetadataFilePath(path),
|
|
226
|
+
data: JSON.stringify(metadata),
|
|
227
|
+
encoding: Encoding.UTF8
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
async readImageMetadata(path) {
|
|
231
|
+
return this.readDataFile({
|
|
232
|
+
path: this.getMetadataFilePath(path),
|
|
233
|
+
encoding: Encoding.UTF8
|
|
234
|
+
}).then((result) => JSON.parse(result.data));
|
|
235
|
+
}
|
|
236
|
+
async readDataFile(options) {
|
|
237
|
+
return this.filesystem.readFile({
|
|
238
|
+
directory: Directory.Data,
|
|
239
|
+
...options
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
async writeDataFile(options) {
|
|
243
|
+
return this.filesystem.writeFile({
|
|
244
|
+
directory: Directory.Data,
|
|
245
|
+
...options,
|
|
246
|
+
recursive: true
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
async filesInDir(path, directory = Directory.Data) {
|
|
250
|
+
return this.filesystem
|
|
251
|
+
.readdir({
|
|
252
|
+
path,
|
|
253
|
+
directory
|
|
254
|
+
})
|
|
255
|
+
.then((result) => new Set(result.files.map((fileInfo) => fileInfo.uri)));
|
|
256
|
+
}
|
|
257
|
+
getLinkFilePath(path) {
|
|
258
|
+
return `${path}.link`;
|
|
259
|
+
}
|
|
260
|
+
getMetadataFilePath(path) {
|
|
261
|
+
return `${path}.metadata`;
|
|
262
|
+
}
|
|
263
|
+
splitPath(path) {
|
|
264
|
+
const dirEnd = path.lastIndexOf('/');
|
|
265
|
+
return dirEnd !== -1 ? { dir: path.slice(0, dirEnd), filename: path.slice(dirEnd + 1) } : { dir: '/', filename: path };
|
|
266
|
+
}
|
|
267
|
+
async createTempProtocolModuleDir(moduleName) {
|
|
268
|
+
const tempDir = `protocolmodule_${moduleName.replace(/\.zip$/, '')}_${Date.now()}`;
|
|
269
|
+
const directory = Directory.Cache;
|
|
270
|
+
await this.filesystem.mkdir({
|
|
271
|
+
path: tempDir,
|
|
272
|
+
directory
|
|
273
|
+
});
|
|
274
|
+
return { path: tempDir, directory };
|
|
275
|
+
}
|
|
276
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilesystemService, deps: [{ token: i1.UriService }, { token: i2.ImageService }, { token: FILESYSTEM_PLUGIN }, { token: ZIP_PLUGIN }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
277
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilesystemService, providedIn: 'root' }); }
|
|
278
|
+
}
|
|
279
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FilesystemService, decorators: [{
|
|
280
|
+
type: Injectable,
|
|
281
|
+
args: [{
|
|
282
|
+
providedIn: 'root'
|
|
283
|
+
}]
|
|
284
|
+
}], ctorParameters: () => [{ type: i1.UriService }, { type: i2.ImageService }, { type: undefined, decorators: [{
|
|
285
|
+
type: Inject,
|
|
286
|
+
args: [FILESYSTEM_PLUGIN]
|
|
287
|
+
}] }, { type: undefined, decorators: [{
|
|
288
|
+
type: Inject,
|
|
289
|
+
args: [ZIP_PLUGIN]
|
|
290
|
+
}] }] });
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXN5c3RlbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9maWxlc3lzdGVtL2ZpbGVzeXN0ZW0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFRVCxNQUFNLHVCQUF1QixDQUFBO0FBRzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQTs7OztBQVN4RixNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQTtBQUN6QyxNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQTtBQUV2QyxNQUFNLHFCQUFxQixHQUFHLDZCQUE2QixDQUFBO0FBQzNELE1BQU0scUJBQXFCLEdBQUcsYUFBYSxDQUFBO0FBSzNDLE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFDbUIsVUFBc0IsRUFDdEIsWUFBMEIsRUFDQyxVQUE0QixFQUNuQyxHQUFjO1FBSGxDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDQyxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUNuQyxRQUFHLEdBQUgsR0FBRyxDQUFXO0lBQ2xELENBQUM7SUFFRyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQVk7UUFDckMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzlDLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUU3QyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxJQUFJLEdB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VTttSEFMVCxpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBS0ksTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUN4QixNQUFNOzJCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgRGlyZWN0b3J5LFxuICBFbmNvZGluZyxcbiAgRmlsZUluZm8sXG4gIEZpbGVzeXN0ZW1QbHVnaW4sXG4gIFJlYWRkaXJSZXN1bHQsXG4gIFJlYWRGaWxlT3B0aW9ucyxcbiAgUmVhZEZpbGVSZXN1bHQsXG4gIFdyaXRlRmlsZU9wdGlvbnMsXG4gIFdyaXRlRmlsZVJlc3VsdFxufSBmcm9tICdAY2FwYWNpdG9yL2ZpbGVzeXN0ZW0nXG5pbXBvcnQgeyBaaXBQbHVnaW4gfSBmcm9tICcuLi8uLi9jYXBhY2l0b3ItcGx1Z2lucy9kZWZpbml0aW9ucydcblxuaW1wb3J0IHsgRklMRVNZU1RFTV9QTFVHSU4sIFpJUF9QTFVHSU4gfSBmcm9tICcuLi8uLi9jYXBhY2l0b3ItcGx1Z2lucy9pbmplY3Rpb24tdG9rZW5zJ1xuaW1wb3J0IHsgSW1hZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vaW1hZ2UvaW1hZ2Uuc2VydmljZSdcbmltcG9ydCB7IFVyaVNlcnZpY2UgfSBmcm9tICcuLi91cmkvdXJpLnNlcnZpY2UnXG5cbmludGVyZmFjZSBNZXRhZGF0YSB7XG4gIG1lZGlhVHlwZT86IHN0cmluZ1xuICBpc0JpbmFyeT86IGJvb2xlYW5cbn1cblxuY29uc3QgTUFOSUZFU1RfRklMRU5BTUUgPSAnbWFuaWZlc3QuanNvbidcbmNvbnN0IFNJR05BVFVSRV9GSUxFTkFNRSA9ICdtb2R1bGUuc2lnJ1xuXG5jb25zdCBJU09MQVRFRF9NT0RVTEVTX1BBVEggPSAnX19haXJnYXBfcHJvdG9jb2xfbW9kdWxlc19fJ1xuY29uc3QgSVNPTEFURURfU1lNQk9MU19QQVRIID0gJ19fc3ltYm9sc19fJ1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBGaWxlc3lzdGVtU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXJpU2VydmljZTogVXJpU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGltYWdlU2VydmljZTogSW1hZ2VTZXJ2aWNlLFxuICAgIEBJbmplY3QoRklMRVNZU1RFTV9QTFVHSU4pIHByaXZhdGUgcmVhZG9ubHkgZmlsZXN5c3RlbTogRmlsZXN5c3RlbVBsdWdpbixcbiAgICBASW5qZWN0KFpJUF9QTFVHSU4pIHByaXZhdGUgcmVhZG9ubHkgemlwOiBaaXBQbHVnaW5cbiAgKSB7fVxuXG4gIHB1YmxpYyBhc3luYyByZWFkTGF6eUltYWdlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGlyLCBmaWxlbmFtZSB9ID0gdGhpcy5zcGxpdFBhdGgocGF0aClcbiAgICAgIGNvbnN0IGZpbGVzSW5EaXIgPSBhd2FpdCB0aGlzLmZpbGVzSW5EaXIoZGlyKVxuXG4gICAgICBpZiAoZmlsZXNJbkRpci5oYXMoZmlsZW5hbWUpKSB7XG4gICAgICAgIGNvbnN0IGRhdGE6IHN0cmluZyA9IGF3YWl0IHRoaXMucmVhZERhdGFGaWxlKHsgcGF0aCB9KS50aGVuKChyZXN1bHQ6IFJlYWRGaWxlUmVzdWx0KSA9PiByZXN1bHQuZGF0YSBhcyBzdHJpbmcpXG5cbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IE1ldGFkYXRhIHwgdW5kZWZpbmVkID0gZmlsZXNJbkRpci5oYXModGhpcy5nZXRNZXRhZGF0YUZpbGVQYXRoKGZpbGVuYW1lKSlcbiAgICAgICAgICA/IGF3YWl0IHRoaXMucmVhZEltYWdlTWV0YWRhdGEocGF0aClcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICAgIHJldHVybiB0aGlzLnVyaVNlcnZpY2UuZGF0YShkYXRhLCBtZXRhZGF0YS5tZWRpYVR5cGUsIG1ldGFkYXRhLmlzQmluYXJ5KVxuICAgICAgfSBlbHNlIGlmIChmaWxlc0luRGlyLmhhcyh0aGlzLmdldExpbmtGaWxlUGF0aChmaWxlbmFtZSkpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvd25sb2FkUmVtb3RlSW1hZ2UocGF0aClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB3cml0ZUxhenlJbWFnZShwYXRoOiBzdHJpbmcsIHVyaTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGF0YUVudHJ5ID0gdGhpcy5jcmVhdGVMYXp5RGF0YUVudHJ5KHBhdGgsIHVyaSlcbiAgICBhd2FpdCB0aGlzLnNhdmVJbWFnZURhdGEoZGF0YUVudHJ5LnBhdGgsIGRhdGFFbnRyeS5kYXRhLCBkYXRhRW50cnkuZW5jb2RpbmcsIGRhdGFFbnRyeS5tZXRhZGF0YSlcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZG93bmxvYWRSZW1vdGVJbWFnZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHVyaTogc3RyaW5nID0gYXdhaXQgdGhpcy5yZWFkRGF0YUZpbGUoe1xuICAgICAgcGF0aDogdGhpcy5nZXRMaW5rRmlsZVBhdGgocGF0aCksXG4gICAgICBlbmNvZGluZzogRW5jb2RpbmcuVVRGOFxuICAgIH0pLnRoZW4oKHJlc3VsdDogUmVhZEZpbGVSZXN1bHQpID0+IHJlc3VsdC5kYXRhIGFzIHN0cmluZylcblxuICAgIGNvbnN0IGJhc2U2NCA9IGF3YWl0IHRoaXMuaW1hZ2VTZXJ2aWNlLmZldGNoKHVyaSlcbiAgICBpZiAoIWJhc2U2NCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHNwbGl0RGF0YSA9IHRoaXMudXJpU2VydmljZS5zcGxpdERhdGFVcmkoYmFzZTY0KVxuXG4gICAgYXdhaXQgdGhpcy5zYXZlSW1hZ2VEYXRhKHBhdGgsIHNwbGl0RGF0YS5kYXRhLCBFbmNvZGluZy5VVEY4LCB7IG1lZGlhVHlwZTogc3BsaXREYXRhLm1lZGlhVHlwZSwgaXNCaW5hcnk6IHNwbGl0RGF0YS5pc0JpbmFyeSB9KVxuXG4gICAgcmV0dXJuIGJhc2U2NFxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVMYXp5RGF0YUVudHJ5KHBhdGg6IHN0cmluZywgdXJpOiBzdHJpbmcpOiB7IHBhdGg6IHN0cmluZzsgZGF0YTogc3RyaW5nOyBlbmNvZGluZz86IEVuY29kaW5nOyBtZXRhZGF0YT86IE1ldGFkYXRhIH0ge1xuICAgIGNvbnN0IHVyaVR5cGUgPSB0aGlzLnVyaVNlcnZpY2UucmVzb2x2ZVVyaVR5cGUodXJpKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2VcbiAgICBzd2l0Y2ggKHVyaVR5cGUpIHtcbiAgICAgIGNhc2UgJ3JlbW90ZSc6XG4gICAgICBjYXNlICd1bnN1cHBvcnRlZCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGF0aDogdGhpcy5nZXRMaW5rRmlsZVBhdGgocGF0aCksXG4gICAgICAgICAgZGF0YTogdXJpLFxuICAgICAgICAgIGVuY29kaW5nOiBFbmNvZGluZy5VVEY4XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2RhdGEnOlxuICAgICAgICBjb25zdCBzcGxpdERhdGEgPSB0aGlzLnVyaVNlcnZpY2Uuc3BsaXREYXRhVXJpKHVyaSlcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgZGF0YTogc3BsaXREYXRhLmRhdGEsXG4gICAgICAgICAgZW5jb2Rpbmc6IEVuY29kaW5nLlVURjgsXG4gICAgICAgICAgbWV0YWRhdGE6IHNwbGl0RGF0YS5tZWRpYVR5cGUgPyB7IG1lZGlhVHlwZTogc3BsaXREYXRhLm1lZGlhVHlwZSwgaXNCaW5hcnk6IHNwbGl0RGF0YS5pc0JpbmFyeSB9IDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVhZElzb2xhdGVkU3ltYm9sKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRpcjogc3RyaW5nID0gYCR7SVNPTEFURURfTU9EVUxFU19QQVRIfS8ke0lTT0xBVEVEX1NZTUJPTFNfUEFUSH1gXG4gICAgICBjb25zdCBwYXRoOiBzdHJpbmcgPSBgJHtkaXJ9LyR7bmFtZS50b0xvd2VyQ2FzZSgpfWBcblxuICAgICAgY29uc3QgeyBkYXRhIH06IFJlYWRGaWxlUmVzdWx0ID0gYXdhaXQgdGhpcy5yZWFkRGF0YUZpbGUoeyBwYXRoIH0pXG5cbiAgICAgIGNvbnN0IG1ldGFkYXRhOiBNZXRhZGF0YSA9IGF3YWl0IHRoaXMucmVhZEltYWdlTWV0YWRhdGEocGF0aClcblxuICAgICAgcmV0dXJuIHRoaXMudXJpU2VydmljZS5kYXRhKGRhdGEgYXMgc3RyaW5nLCBtZXRhZGF0YS5tZWRpYVR5cGUsIG1ldGFkYXRhLmlzQmluYXJ5KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZVRlbXBQcm90b2NvbE1vZHVsZShuYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8eyBwYXRoOiBzdHJpbmc7IGRpcmVjdG9yeTogRGlyZWN0b3J5IH0+IHtcbiAgICBjb25zdCB0ZW1wRGlyID0gYXdhaXQgdGhpcy5jcmVhdGVUZW1wUHJvdG9jb2xNb2R1bGVEaXIobmFtZSlcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnppcC51bnppcCh7XG4gICAgICAgIGZyb206IHBhdGgsXG4gICAgICAgIHRvOiB0ZW1wRGlyLnBhdGgsXG4gICAgICAgIHRvRGlyZWN0b3J5OiB0ZW1wRGlyLmRpcmVjdG9yeVxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogdGVtcERpci5wYXRoLFxuICAgICAgICBkaXJlY3Rvcnk6IHRlbXBEaXIuZGlyZWN0b3J5XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVtb3ZlVGVtcFByb3RvY29sTW9kdWxlKHRlbXBEaXIucGF0aCwgdGVtcERpci5kaXJlY3RvcnkpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgLyogbm8gYWN0aW9uICovXG4gICAgICB9KVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVtb3ZlVGVtcFByb3RvY29sTW9kdWxlKHBhdGg6IHN0cmluZywgZGlyZWN0b3J5OiBEaXJlY3RvcnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5maWxlc3lzdGVtLnJtZGlyKHtcbiAgICAgIHBhdGgsXG4gICAgICBkaXJlY3RvcnksXG4gICAgICByZWN1cnNpdmU6IHRydWVcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGZpbmRQcm90b2NvbE1vZHVsZVJvb3QocGF0aDogc3RyaW5nLCBkaXJlY3Rvcnk6IERpcmVjdG9yeSk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgeyB0eXBlIH0gPSBhd2FpdCB0aGlzLmZpbGVzeXN0ZW0uc3RhdCh7IHBhdGgsIGRpcmVjdG9yeSB9KVxuICAgIGlmICh0eXBlID09PSAnZGlyZWN0b3J5Jykge1xuICAgICAgY29uc3Qgcm9vdCA9IGF3YWl0IHRoaXMuZmluZFByb3RvY29sTW9kdWxlUm9vdEluRGlyKHBhdGgsIGRpcmVjdG9yeSlcblxuICAgICAgcmV0dXJuIHJvb3Q/LnJlcGxhY2UoYCR7cGF0aH0vYCwgJycpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmRQcm90b2NvbE1vZHVsZVJvb3RJbkRpcihwYXRoOiBzdHJpbmcsIGRpcmVjdG9yeTogRGlyZWN0b3J5KTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCB7IGZpbGVzIH06IFJlYWRkaXJSZXN1bHQgPSBhd2FpdCB0aGlzLmZpbGVzeXN0ZW0ucmVhZGRpcih7IHBhdGgsIGRpcmVjdG9yeSB9KVxuICAgIGNvbnN0IGhhc01hbmlmZXN0ID0gZmlsZXMuZmluZCgoZmlsZTogRmlsZUluZm8pID0+IGZpbGUudHlwZSA9PT0gJ2ZpbGUnICYmIGZpbGUubmFtZSA9PT0gTUFOSUZFU1RfRklMRU5BTUUpXG4gICAgaWYgKGhhc01hbmlmZXN0KSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgaWYgKGZpbGUudHlwZSA9PT0gJ2RpcmVjdG9yeScpIHtcbiAgICAgICAgY29uc3Qgcm9vdDogc3RyaW5nIHwgdW5kZWZpbmVkID0gYXdhaXQgdGhpcy5maW5kUHJvdG9jb2xNb2R1bGVSb290SW5EaXIoYCR7cGF0aH0vJHtmaWxlLm5hbWV9YCwgZGlyZWN0b3J5KVxuICAgICAgICBpZiAocm9vdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJvb3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbnN0YWxsUHJvdG9jb2xNb2R1bGUoXG4gICAgaWRlbnRpZmllcjogc3RyaW5nLFxuICAgIGZpbGVzOiBzdHJpbmdbXSxcbiAgICBzeW1ib2xzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIGN1cnJlbnRMb2NhdGlvbjoge1xuICAgICAgcGF0aDogc3RyaW5nXG4gICAgICByb290OiBzdHJpbmdcbiAgICAgIGRpcmVjdG9yeTogRGlyZWN0b3J5XG4gICAgfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBuZXdQYXRoOiBzdHJpbmcgPSBgJHtJU09MQVRFRF9NT0RVTEVTX1BBVEh9LyR7aWRlbnRpZmllcn1gXG4gICAgY29uc3QgbmV3RGlyZWN0b3J5OiBEaXJlY3RvcnkgPSBEaXJlY3RvcnkuRGF0YVxuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBbTUFOSUZFU1RfRklMRU5BTUUsIFNJR05BVFVSRV9GSUxFTkFNRSwgLi4uZmlsZXNdKSB7XG4gICAgICAgIGNvbnN0IGxhc3RTZWdtZW50SW5kZXg6IG51bWJlciA9IGZpbGUubGFzdEluZGV4T2YoJy8nKVxuICAgICAgICBjb25zdCBwYXJlbnQgPSBmaWxlLnN1YnN0cmluZygwLCBsYXN0U2VnbWVudEluZGV4KS5yZXBsYWNlKC9eXFwvKy8sICcnKVxuXG4gICAgICAgIGF3YWl0IHRoaXMuZmlsZXN5c3RlbVxuICAgICAgICAgIC5ta2Rpcih7XG4gICAgICAgICAgICBwYXRoOiBgJHtuZXdQYXRofS8ke3BhcmVudH1gLFxuICAgICAgICAgICAgZGlyZWN0b3J5OiBuZXdEaXJlY3RvcnksXG4gICAgICAgICAgICByZWN1cnNpdmU6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAvKiBubyBhY3Rpb24gKi9cbiAgICAgICAgICB9KVxuXG4gICAgICAgIGF3YWl0IHRoaXMuZmlsZXN5c3RlbS5jb3B5KHtcbiAgICAgICAgICBmcm9tOiBgJHtjdXJyZW50TG9jYXRpb24ucGF0aH0vJHtjdXJyZW50TG9jYXRpb24ucm9vdH0vJHtmaWxlfWAsXG4gICAgICAgICAgZGlyZWN0b3J5OiBjdXJyZW50TG9jYXRpb24uZGlyZWN0b3J5LFxuICAgICAgICAgIHRvOiBgJHtuZXdQYXRofS8ke2ZpbGV9YCxcbiAgICAgICAgICB0b0RpcmVjdG9yeTogbmV3RGlyZWN0b3J5XG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3Qgc3ltYm9sc0Rpcjogc3RyaW5nID0gYCR7SVNPTEFURURfTU9EVUxFU19QQVRIfS8ke0lTT0xBVEVEX1NZTUJPTFNfUEFUSH1gXG4gICAgICAgIGF3YWl0IHRoaXMuZmlsZXN5c3RlbVxuICAgICAgICAgIC5ta2Rpcih7XG4gICAgICAgICAgICBwYXRoOiBzeW1ib2xzRGlyLFxuICAgICAgICAgICAgZGlyZWN0b3J5OiBuZXdEaXJlY3RvcnksXG4gICAgICAgICAgICByZWN1cnNpdmU6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAvKiBubyBhY3Rpb24gKi9cbiAgICAgICAgICB9KVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHN5bWJvbHMpLm1hcChhc3luYyAoW3N5bWJvbCwgdXJpXTogW3N0cmluZywgc3RyaW5nXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aDogc3RyaW5nID0gYCR7c3ltYm9sc0Rpcn0vJHtzeW1ib2wudG9Mb3dlckNhc2UoKX1gXG5cbiAgICAgICAgICAgIGlmICh1cmkuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc1BhdGg6IHN0cmluZyA9IHVyaS5yZXBsYWNlKC9eZmlsZTpcXC9cXC8vLCAnJylcbiAgICAgICAgICAgICAgY29uc3QgZXh0ZW5zaW9uOiBzdHJpbmcgPSB1cmkuc3BsaXQoJy4nKS5zbGljZSgtMSlbMF0udG9Mb2NhbGVMb3dlckNhc2UoKVxuXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuZmlsZXN5c3RlbS5jb3B5KHtcbiAgICAgICAgICAgICAgICBmcm9tOiBgJHtjdXJyZW50TG9jYXRpb24ucGF0aH0vJHtjdXJyZW50TG9jYXRpb24ucm9vdH0vJHtyZXNQYXRofWAsXG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiBjdXJyZW50TG9jYXRpb24uZGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgIHRvOiBwYXRoLFxuICAgICAgICAgICAgICAgIHRvRGlyZWN0b3J5OiBuZXdEaXJlY3RvcnlcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNhdmVJbWFnZU1ldGFkYXRhKHBhdGgsIHtcbiAgICAgICAgICAgICAgICBtZWRpYVR5cGU6IGBpbWFnZS8ke2V4dGVuc2lvbiA9PT0gJ3N2ZycgPyAnc3ZnK3htbCcgOiBleHRlbnNpb259YCxcbiAgICAgICAgICAgICAgICBpc0JpbmFyeTogdHJ1ZVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmICh1cmkuc3RhcnRzV2l0aCgnZGF0YTppbWFnZScpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNwbGl0RGF0YSA9IHRoaXMudXJpU2VydmljZS5zcGxpdERhdGFVcmkodXJpKVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNhdmVJbWFnZURhdGEocGF0aCwgc3BsaXREYXRhLmRhdGEsIEVuY29kaW5nLlVURjgsIHtcbiAgICAgICAgICAgICAgICBtZWRpYVR5cGU6IHNwbGl0RGF0YS5tZWRpYVR5cGUsXG4gICAgICAgICAgICAgICAgaXNCaW5hcnk6IHNwbGl0RGF0YS5pc0JpbmFyeVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdmVUZW1wUHJvdG9jb2xNb2R1bGUobmV3UGF0aCwgbmV3RGlyZWN0b3J5KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIC8qIG5vIGFjdGlvbiAqL1xuICAgICAgfSlcbiAgICAgIHRocm93IGVycm9yXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMucmVtb3ZlVGVtcFByb3RvY29sTW9kdWxlKGN1cnJlbnRMb2NhdGlvbi5wYXRoLCBjdXJyZW50TG9jYXRpb24uZGlyZWN0b3J5KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIC8qIG5vIGFjdGlvbiAqL1xuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmVJbWFnZURhdGEocGF0aDogc3RyaW5nLCBkYXRhOiBzdHJpbmcsIGVuY29kaW5nPzogRW5jb2RpbmcsIG1ldGFkYXRhPzogTWV0YWRhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLndyaXRlRGF0YUZpbGUoe1xuICAgICAgcGF0aCxcbiAgICAgIGRhdGEsXG4gICAgICBlbmNvZGluZ1xuICAgIH0pXG5cbiAgICBpZiAobWV0YWRhdGEpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZUltYWdlTWV0YWRhdGEocGF0aCwgbWV0YWRhdGEpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzYXZlSW1hZ2VNZXRhZGF0YShwYXRoOiBzdHJpbmcsIG1ldGFkYXRhOiBNZXRhZGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMud3JpdGVEYXRhRmlsZSh7XG4gICAgICBwYXRoOiB0aGlzLmdldE1ldGFkYXRhRmlsZVBhdGgocGF0aCksXG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShtZXRhZGF0YSksXG4gICAgICBlbmNvZGluZzogRW5jb2RpbmcuVVRGOFxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWRJbWFnZU1ldGFkYXRhKHBhdGg6IHN0cmluZyk6IFByb21pc2U8TWV0YWRhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5yZWFkRGF0YUZpbGUoe1xuICAgICAgcGF0aDogdGhpcy5nZXRNZXRhZGF0YUZpbGVQYXRoKHBhdGgpLFxuICAgICAgZW5jb2Rpbmc6IEVuY29kaW5nLlVURjhcbiAgICB9KS50aGVuKChyZXN1bHQ6IFJlYWRGaWxlUmVzdWx0KSA9PiBKU09OLnBhcnNlKHJlc3VsdC5kYXRhIGFzIHN0cmluZykpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWREYXRhRmlsZShvcHRpb25zOiBSZWFkRmlsZU9wdGlvbnMpOiBQcm9taXNlPFJlYWRGaWxlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZXN5c3RlbS5yZWFkRmlsZSh7XG4gICAgICBkaXJlY3Rvcnk6IERpcmVjdG9yeS5EYXRhLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdyaXRlRGF0YUZpbGUob3B0aW9uczogV3JpdGVGaWxlT3B0aW9ucyk6IFByb21pc2U8V3JpdGVGaWxlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZXN5c3RlbS53cml0ZUZpbGUoe1xuICAgICAgZGlyZWN0b3J5OiBEaXJlY3RvcnkuRGF0YSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICByZWN1cnNpdmU6IHRydWVcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaWxlc0luRGlyKHBhdGg6IHN0cmluZywgZGlyZWN0b3J5OiBEaXJlY3RvcnkgPSBEaXJlY3RvcnkuRGF0YSk6IFByb21pc2U8U2V0PHN0cmluZz4+IHtcbiAgICByZXR1cm4gdGhpcy5maWxlc3lzdGVtXG4gICAgICAucmVhZGRpcih7XG4gICAgICAgIHBhdGgsXG4gICAgICAgIGRpcmVjdG9yeVxuICAgICAgfSlcbiAgICAgIC50aGVuKChyZXN1bHQ6IFJlYWRkaXJSZXN1bHQpID0+IG5ldyBTZXQocmVzdWx0LmZpbGVzLm1hcCgoZmlsZUluZm86IEZpbGVJbmZvKSA9PiBmaWxlSW5mby51cmkpKSlcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGlua0ZpbGVQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3BhdGh9LmxpbmtgXG4gIH1cblxuICBwcml2YXRlIGdldE1ldGFkYXRhRmlsZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7cGF0aH0ubWV0YWRhdGFgXG4gIH1cblxuICBwcml2YXRlIHNwbGl0UGF0aChwYXRoOiBzdHJpbmcpOiB7IGRpcjogc3RyaW5nOyBmaWxlbmFtZTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IGRpckVuZCA9IHBhdGgubGFzdEluZGV4T2YoJy8nKVxuXG4gICAgcmV0dXJuIGRpckVuZCAhPT0gLTEgPyB7IGRpcjogcGF0aC5zbGljZSgwLCBkaXJFbmQpLCBmaWxlbmFtZTogcGF0aC5zbGljZShkaXJFbmQgKyAxKSB9IDogeyBkaXI6ICcvJywgZmlsZW5hbWU6IHBhdGggfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVUZW1wUHJvdG9jb2xNb2R1bGVEaXIobW9kdWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx7IHBhdGg6IHN0cmluZzsgZGlyZWN0b3J5OiBEaXJlY3RvcnkgfT4ge1xuICAgIGNvbnN0IHRlbXBEaXI6IHN0cmluZyA9IGBwcm90b2NvbG1vZHVsZV8ke21vZHVsZU5hbWUucmVwbGFjZSgvXFwuemlwJC8sICcnKX1fJHtEYXRlLm5vdygpfWBcbiAgICBjb25zdCBkaXJlY3Rvcnk6IERpcmVjdG9yeSA9IERpcmVjdG9yeS5DYWNoZVxuXG4gICAgYXdhaXQgdGhpcy5maWxlc3lzdGVtLm1rZGlyKHtcbiAgICAgIHBhdGg6IHRlbXBEaXIsXG4gICAgICBkaXJlY3RvcnlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHsgcGF0aDogdGVtcERpciwgZGlyZWN0b3J5IH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { IACMessageType } from '@wallfree-dev/serializer';
|
|
2
|
+
import { Inject, Injectable } from '@angular/core';
|
|
3
|
+
import { SerializerV3Generator } from '../qr/qr-generators/serializer-v3-generator';
|
|
4
|
+
import { SerializerV3Handler } from '../qr/qr-handler/serializer-v3-handler';
|
|
5
|
+
import { SerializerV2Handler } from '../qr/qr-handler/serializer-v2-handler';
|
|
6
|
+
import { APP_CONFIG } from '../../config/app-config';
|
|
7
|
+
import { IACHandlerStatus } from './message-handler';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "../ui-event-elements/ui-event-elements.service";
|
|
10
|
+
import * as i2 from "../clipboard/clipboard.service";
|
|
11
|
+
import * as i3 from "../deeplink/deeplink.service";
|
|
12
|
+
export class BaseIACService {
|
|
13
|
+
constructor(uiEventElementService, clipboard, isReady, customHandlers, deeplinkService, appConfig) {
|
|
14
|
+
this.uiEventElementService = uiEventElementService;
|
|
15
|
+
this.clipboard = clipboard;
|
|
16
|
+
this.isReady = isReady;
|
|
17
|
+
this.customHandlers = customHandlers;
|
|
18
|
+
this.deeplinkService = deeplinkService;
|
|
19
|
+
this.appConfig = appConfig;
|
|
20
|
+
this.transport = undefined;
|
|
21
|
+
this.scanAgainCallback = undefined;
|
|
22
|
+
this.serializerMessageHandlers = {
|
|
23
|
+
[IACMessageType.AccountShareRequest]: this.syncTypeNotSupportedAlert.bind(this),
|
|
24
|
+
[IACMessageType.AccountShareResponse]: this.syncTypeNotSupportedAlert.bind(this),
|
|
25
|
+
[IACMessageType.TransactionSignRequest]: this.syncTypeNotSupportedAlert.bind(this),
|
|
26
|
+
[IACMessageType.TransactionSignResponse]: this.syncTypeNotSupportedAlert.bind(this),
|
|
27
|
+
[IACMessageType.MessageSignRequest]: this.syncTypeNotSupportedAlert.bind(this),
|
|
28
|
+
[IACMessageType.MessageSignResponse]: this.syncTypeNotSupportedAlert.bind(this)
|
|
29
|
+
};
|
|
30
|
+
this.handlers = [
|
|
31
|
+
new SerializerV3Handler((deserializedSync) => this.deserialize(deserializedSync)),
|
|
32
|
+
new SerializerV2Handler((deserializedSync) => this.deserialize(deserializedSync))
|
|
33
|
+
];
|
|
34
|
+
this.handlers.push(...customHandlers);
|
|
35
|
+
}
|
|
36
|
+
async storeResult(message, status, transport) {
|
|
37
|
+
console.debug('STORE_RESULT', message, status, transport);
|
|
38
|
+
return status;
|
|
39
|
+
}
|
|
40
|
+
// check if we already have part, scanning same QR advances progress bar
|
|
41
|
+
async handleRequest(data, transport, scanAgainCallback = () => undefined) {
|
|
42
|
+
this.transport = transport;
|
|
43
|
+
this.scanAgainCallback = scanAgainCallback;
|
|
44
|
+
await this.isReady;
|
|
45
|
+
for (let i = 0; i < this.handlers.length; i++) {
|
|
46
|
+
const handler = this.handlers[i];
|
|
47
|
+
try {
|
|
48
|
+
const canHandle = await handler.canHandle(data);
|
|
49
|
+
if (canHandle) {
|
|
50
|
+
const handlerStatus = await handler.receive(data);
|
|
51
|
+
if (handlerStatus === IACHandlerStatus.SUCCESS) {
|
|
52
|
+
try {
|
|
53
|
+
const result = await handler.getResult();
|
|
54
|
+
const status = IACHandlerStatus.SUCCESS;
|
|
55
|
+
await handler.handleComplete();
|
|
56
|
+
await this.resetHandlers();
|
|
57
|
+
return this.storeResult(result, status, transport);
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
console.error('Error while handling result', e);
|
|
61
|
+
const dataSingle = (await handler.getDataSingle()) ?? data;
|
|
62
|
+
await this.messageUnknownAlert(dataSingle, this.scanAgainCallback);
|
|
63
|
+
await this.resetHandlers();
|
|
64
|
+
return this.storeResult({ result: undefined, data: dataSingle }, IACHandlerStatus.UNSUPPORTED, transport);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else if (handlerStatus === IACHandlerStatus.PARTIAL) {
|
|
68
|
+
scanAgainCallback(await handler.getProgress());
|
|
69
|
+
return this.storeResult({ result: data, data: await handler.getDataSingle() }, IACHandlerStatus.PARTIAL, transport);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (handlerError) {
|
|
74
|
+
console.log(`Error while handling message in ${handler.name}`, handlerError);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
await this.resetHandlers();
|
|
78
|
+
await this.messageUnknownAlert(data, this.scanAgainCallback);
|
|
79
|
+
return this.storeResult({ result: undefined, data }, IACHandlerStatus.UNSUPPORTED, this.transport);
|
|
80
|
+
}
|
|
81
|
+
async resetHandlers() {
|
|
82
|
+
await Promise.all(this.handlers.map((handler) => {
|
|
83
|
+
handler.reset();
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
async deserialize(deserializedSync) {
|
|
87
|
+
const data = deserializedSync.result;
|
|
88
|
+
if (data && data.length > 0) {
|
|
89
|
+
const groupedByType = data.reduce((grouped, message) => Object.assign(grouped, { [message.type]: (grouped[message.type] || []).concat(message) }), {});
|
|
90
|
+
for (const type in groupedByType) {
|
|
91
|
+
if (type in IACMessageType) {
|
|
92
|
+
// TODO: Improve types
|
|
93
|
+
const typedType = parseInt(type, 10);
|
|
94
|
+
// eslint-disable-next-line no-console
|
|
95
|
+
this.serializerMessageHandlers[typedType]({ result: groupedByType[typedType] ?? [], data: deserializedSync.data, context: deserializedSync.context }, this.transport, this.scanAgainCallback).catch(console.error);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
// TODO: Improve types
|
|
99
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, no-console
|
|
100
|
+
this.syncTypeNotSupportedAlert(deserializedSync, this.transport, this.scanAgainCallback).catch(console.error);
|
|
101
|
+
return IACHandlerStatus.UNSUPPORTED;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return IACHandlerStatus.SUCCESS;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
throw new Error('Empty message received!');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
async messageUnknownAlert(data, scanAgainCallback) {
|
|
111
|
+
const relayHandler = () => {
|
|
112
|
+
// eslint-disable-next-line no-console
|
|
113
|
+
this.relay(data).catch(console.error);
|
|
114
|
+
};
|
|
115
|
+
const copyHandler = () => {
|
|
116
|
+
// eslint-disable-next-line no-console
|
|
117
|
+
this.clipboard.copyAndShowToast(data).catch(console.error);
|
|
118
|
+
};
|
|
119
|
+
const cancelHandler = () => {
|
|
120
|
+
scanAgainCallback();
|
|
121
|
+
};
|
|
122
|
+
// eslint-disable-next-line no-console
|
|
123
|
+
this.uiEventElementService.showIACMessageUnknownAlert(relayHandler, copyHandler, cancelHandler).catch(console.error);
|
|
124
|
+
}
|
|
125
|
+
async syncTypeNotSupportedAlert(messageWrapper, _transport, scanAgainCallback) {
|
|
126
|
+
const relayHandler = () => {
|
|
127
|
+
// eslint-disable-next-line no-console
|
|
128
|
+
this.relay(messageWrapper.data).catch(console.error);
|
|
129
|
+
};
|
|
130
|
+
const copyHandler = () => {
|
|
131
|
+
// eslint-disable-next-line no-console
|
|
132
|
+
this.clipboard.copyAndShowToast(messageWrapper.data).catch(console.error);
|
|
133
|
+
};
|
|
134
|
+
const cancelHandler = () => {
|
|
135
|
+
scanAgainCallback();
|
|
136
|
+
};
|
|
137
|
+
// eslint-disable-next-line no-console
|
|
138
|
+
this.uiEventElementService.showIACMessageNotSupportedAlert(relayHandler, copyHandler, cancelHandler).catch(console.error);
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
async serialize(messageDefinitionObject, prefix) {
|
|
142
|
+
const generator = new SerializerV3Generator();
|
|
143
|
+
await generator.create(messageDefinitionObject, 100, 100);
|
|
144
|
+
return generator.getSingle(prefix);
|
|
145
|
+
}
|
|
146
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BaseIACService, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
147
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BaseIACService }); }
|
|
148
|
+
}
|
|
149
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BaseIACService, decorators: [{
|
|
150
|
+
type: Injectable
|
|
151
|
+
}], ctorParameters: () => [{ type: i1.UiEventElementsService }, { type: i2.ClipboardService }, { type: Promise }, { type: undefined }, { type: i3.DeeplinkService }, { type: undefined, decorators: [{
|
|
152
|
+
type: Inject,
|
|
153
|
+
args: [APP_CONFIG]
|
|
154
|
+
}] }] });
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5pYWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvaWFjL2Jhc2UuaWFjLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQyxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUN2RixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUdsRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQTtBQUNuRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUU1RSxPQUFPLEVBQWEsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDL0QsT0FBTyxFQUEwQyxnQkFBZ0IsRUFBcUIsTUFBTSxtQkFBbUIsQ0FBQTs7Ozs7QUFPL0csTUFBTSxPQUFnQixjQUFjO0lBYWxDLFlBQ3FCLHFCQUE2QyxFQUM3QyxTQUEyQixFQUMzQixPQUFzQixFQUN0QixjQUE0QyxFQUM1QyxlQUFnQyxFQUNaLFNBQW9CO1FBTHhDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBd0I7UUFDN0MsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBZTtRQUN0QixtQkFBYyxHQUFkLGNBQWMsQ0FBOEI7UUFDNUMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ1osY0FBUyxHQUFULFNBQVMsQ0FBVztRQWpCckQsY0FBUyxHQUFvQyxTQUFTLENBQUE7UUFDdEQsc0JBQWlCLEdBQWtDLFNBQVMsQ0FBQTtRQWtCbEUsSUFBSSxDQUFDLHlCQUF5QixHQUFHO1lBQy9CLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJ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QUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQUNNZXNzYWdlRGVmaW5pdGlvbk9iamVjdFYzLCBJQUNNZXNzYWdlVHlwZSB9IGZyb20gJ0B3YWxsZnJlZS1kZXYvc2VyaWFsaXplcidcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBVaUV2ZW50RWxlbWVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vdWktZXZlbnQtZWxlbWVudHMvdWktZXZlbnQtZWxlbWVudHMuc2VydmljZSdcbmltcG9ydCB7IENsaXBib2FyZFNlcnZpY2UgfSBmcm9tICcuLi9jbGlwYm9hcmQvY2xpcGJvYXJkLnNlcnZpY2UnXG5pbXBvcnQgeyBTZXJpYWxpemVyVjNHZW5lcmF0b3IgfSBmcm9tICcuLi9xci9xci1nZW5lcmF0b3JzL3NlcmlhbGl6ZXItdjMtZ2VuZXJhdG9yJ1xuaW1wb3J0IHsgU2VyaWFsaXplclYzSGFuZGxlciB9IGZyb20gJy4uL3FyL3FyLWhhbmRsZXIvc2VyaWFsaXplci12My1oYW5kbGVyJ1xuaW1wb3J0IHsgU2VyaWFsaXplclYySGFuZGxlciB9IGZyb20gJy4uL3FyL3FyLWhhbmRsZXIvc2VyaWFsaXplci12Mi1oYW5kbGVyJ1xuaW1wb3J0IHsgRGVlcGxpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vZGVlcGxpbmsvZGVlcGxpbmsuc2VydmljZSdcbmltcG9ydCB7IEFwcENvbmZpZywgQVBQX0NPTkZJRyB9IGZyb20gJy4uLy4uL2NvbmZpZy9hcHAtY29uZmlnJ1xuaW1wb3J0IHsgSUFDTWVzc2FnZUhhbmRsZXIsIElBQ01lc3NhZ2VUcmFuc3BvcnQsIElBQ0hhbmRsZXJTdGF0dXMsIElBQ01lc3NhZ2VXcmFwcGVyIH0gZnJvbSAnLi9tZXNzYWdlLWhhbmRsZXInXG5cbmV4cG9ydCB0eXBlIFNjYW5BZ2FpbkNhbGxiYWNrID0gKHByb2dyZXNzPzogbnVtYmVyKSA9PiB2b2lkXG5cbmV4cG9ydCB0eXBlIFJlbGF5TWVzc2FnZSA9IHN0cmluZ1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUlBQ1NlcnZpY2Uge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaGFuZGxlcnM6IElBQ01lc3NhZ2VIYW5kbGVyPHVua25vd24+W11cbiAgcHJpdmF0ZSB0cmFuc3BvcnQ6IElBQ01lc3NhZ2VUcmFuc3BvcnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgcHJpdmF0ZSBzY2FuQWdhaW5DYWxsYmFjazogU2NhbkFnYWluQ2FsbGJhY2sgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VyaWFsaXplck1lc3NhZ2VIYW5kbGVyczoge1xuICAgIFtrZXkgaW4gSUFDTWVzc2FnZVR5cGVdOiAoXG4gICAgICBkZXNlcmlhbGl6ZWRTeW5jOiBJQUNNZXNzYWdlV3JhcHBlcjxJQUNNZXNzYWdlRGVmaW5pdGlvbk9iamVjdFYzW10+LFxuICAgICAgdHJhbnNwb3J0OiBJQUNNZXNzYWdlVHJhbnNwb3J0LFxuICAgICAgc2NhbkFnYWluQ2FsbGJhY2s6IFNjYW5BZ2FpbkNhbGxiYWNrXG4gICAgKSA9PiBQcm9taXNlPGJvb2xlYW4+XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdWlFdmVudEVsZW1lbnRTZXJ2aWNlOiBVaUV2ZW50RWxlbWVudHNTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBjbGlwYm9hcmQ6IENsaXBib2FyZFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzUmVhZHk6IFByb21pc2U8dm9pZD4sXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGN1c3RvbUhhbmRsZXJzOiBJQUNNZXNzYWdlSGFuZGxlcjx1bmtub3duPltdLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBkZWVwbGlua1NlcnZpY2U6IERlZXBsaW5rU2VydmljZSxcbiAgICBASW5qZWN0KEFQUF9DT05GSUcpIHByb3RlY3RlZCByZWFkb25seSBhcHBDb25maWc6IEFwcENvbmZpZ1xuICApIHtcbiAgICB0aGlzLnNlcmlhbGl6ZXJNZXNzYWdlSGFuZGxlcnMgPSB7XG4gICAgICBbSUFDTWVzc2FnZVR5cGUuQWNjb3VudFNoYXJlUmVxdWVzdF06IHRoaXMuc3luY1R5cGVOb3RTdXBwb3J0ZWRBbGVydC5iaW5kKHRoaXMpLFxuICAgICAgW0lBQ01lc3NhZ2VUeXBlLkFjY291bnRTaGFyZVJlc3BvbnNlXTogdGhpcy5zeW5jVHlwZU5vdFN1cHBvcnRlZEFsZXJ0LmJpbmQodGhpcyksXG4gICAgICBbSUFDTWVzc2FnZVR5cGUuVHJhbnNhY3Rpb25TaWduUmVxdWVzdF06IHRoaXMuc3luY1R5cGVOb3RTdXBwb3J0ZWRBbGVydC5iaW5kKHRoaXMpLFxuICAgICAgW0lBQ01lc3NhZ2VUeXBlLlRyYW5zYWN0aW9uU2lnblJlc3BvbnNlXTogdGhpcy5zeW5jVHlwZU5vdFN1cHBvcnRlZEFsZXJ0LmJpbmQodGhpcyksXG4gICAgICBbSUFDTWVzc2FnZVR5cGUuTWVzc2FnZVNpZ25SZXF1ZXN0XTogdGhpcy5zeW5jVHlwZU5vdFN1cHBvcnRlZEFsZXJ0LmJpbmQodGhpcyksXG4gICAgICBbSUFDTWVzc2FnZVR5cGUuTWVzc2FnZVNpZ25SZXNwb25zZV06IHRoaXMuc3luY1R5cGVOb3RTdXBwb3J0ZWRBbGVydC5iaW5kKHRoaXMpXG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVycyA9IFtcbiAgICAgIG5ldyBTZXJpYWxpemVyVjNIYW5kbGVyKChkZXNlcmlhbGl6ZWRTeW5jOiBJQUNNZXNzYWdlV3JhcHBlcjxJQUNNZXNzYWdlRGVmaW5pdGlvbk9iamVjdFYzW10+KSA9PiB0aGlzLmRlc2VyaWFsaXplKGRlc2VyaWFsaXplZFN5bmMpKSxcbiAgICAgIG5ldyBTZXJpYWxpemVyVjJIYW5kbGVyKChkZXNlcmlhbGl6ZWRTeW5jOiBJQUNNZXNzYWdlV3JhcHBlcjxJQUNNZXNzYWdlRGVmaW5pdGlvbk9iamVjdFYzW10+KSA9PiB0aGlzLmRlc2VyaWFsaXplKGRlc2VyaWFsaXplZFN5bmMpKVxuICAgIF1cblxuICAgIHRoaXMuaGFuZGxlcnMucHVzaCguLi5jdXN0b21IYW5kbGVycylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdG9yZVJlc3VsdChcbiAgICBtZXNzYWdlOiBJQUNNZXNzYWdlV3JhcHBlcjx1bmtub3duPixcbiAgICBzdGF0dXM6IElBQ0hhbmRsZXJTdGF0dXMsXG4gICAgdHJhbnNwb3J0OiBJQUNNZXNzYWdlVHJhbnNwb3J0XG4gICk6IFByb21pc2U8SUFDSGFuZGxlclN0YXR1cz4ge1xuICAgIGNvbnNvbGUuZGVidWcoJ1NUT1JFX1JFU1VMVCcsIG1lc3NhZ2UsIHN0YXR1cywgdHJhbnNwb3J0KVxuXG4gICAgcmV0dXJuIHN0YXR1c1xuICB9XG5cbiAgLy8gY2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIHBhcnQsIHNjYW5uaW5nIHNhbWUgUVIgYWR2YW5jZXMgcHJvZ3Jlc3MgYmFyXG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZVJlcXVlc3QoXG4gICAgZGF0YTogc3RyaW5nLFxuICAgIHRyYW5zcG9ydDogSUFDTWVzc2FnZVRyYW5zcG9ydCxcbiAgICBzY2FuQWdhaW5DYWxsYmFjazogU2NhbkFnYWluQ2FsbGJhY2sgPSAoKTogdm9pZCA9PiB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxJQUNIYW5kbGVyU3RhdHVzPiB7XG4gICAgdGhpcy50cmFuc3BvcnQgPSB0cmFuc3BvcnRcbiAgICB0aGlzLnNjYW5BZ2FpbkNhbGxiYWNrID0gc2NhbkFnYWluQ2FsbGJhY2tcbiAgICBhd2FpdCB0aGlzLmlzUmVhZHlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaGFuZGxlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmhhbmRsZXJzW2ldXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjYW5IYW5kbGUgPSBhd2FpdCBoYW5kbGVyLmNhbkhhbmRsZShkYXRhKVxuICAgICAgICBpZiAoY2FuSGFuZGxlKSB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlclN0YXR1czogSUFDSGFuZGxlclN0YXR1cyA9IGF3YWl0IGhhbmRsZXIucmVjZWl2ZShkYXRhKVxuICAgICAgICAgIGlmIChoYW5kbGVyU3RhdHVzID09PSBJQUNIYW5kbGVyU3RhdHVzLlNVQ0NFU1MpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogSUFDTWVzc2FnZVdyYXBwZXI8dW5rbm93bj4gPSBhd2FpdCBoYW5kbGVyLmdldFJlc3VsdCgpXG4gICAgICAgICAgICAgIGNvbnN0IHN0YXR1czogSUFDSGFuZGxlclN0YXR1cyA9IElBQ0hhbmRsZXJTdGF0dXMuU1VDQ0VTU1xuICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyLmhhbmRsZUNvbXBsZXRlKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNldEhhbmRsZXJzKClcblxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVJlc3VsdChyZXN1bHQsIHN0YXR1cywgdHJhbnNwb3J0KVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBoYW5kbGluZyByZXN1bHQnLCBlKVxuICAgICAgICAgICAgICBjb25zdCBkYXRhU2luZ2xlOiBzdHJpbmcgPSAoYXdhaXQgaGFuZGxlci5nZXREYXRhU2luZ2xlKCkpID8/IGRhdGFcblxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1lc3NhZ2VVbmtub3duQWxlcnQoZGF0YVNpbmdsZSwgdGhpcy5zY2FuQWdhaW5DYWxsYmFjaylcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNldEhhbmRsZXJzKClcblxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVJlc3VsdCh7IHJlc3VsdDogdW5kZWZpbmVkLCBkYXRhOiBkYXRhU2luZ2xlIH0sIElBQ0hhbmRsZXJTdGF0dXMuVU5TVVBQT1JURUQsIHRyYW5zcG9ydClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZXJTdGF0dXMgPT09IElBQ0hhbmRsZXJTdGF0dXMuUEFSVElBTCkge1xuICAgICAgICAgICAgc2NhbkFnYWluQ2FsbGJhY2soYXdhaXQgaGFuZGxlci5nZXRQcm9ncmVzcygpKVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVJlc3VsdCh7IHJlc3VsdDogZGF0YSwgZGF0YTogYXdhaXQgaGFuZGxlci5nZXREYXRhU2luZ2xlKCkgfSwgSUFDSGFuZGxlclN0YXR1cy5QQVJUSUFMLCB0cmFuc3BvcnQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChoYW5kbGVyRXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5sb2coYEVycm9yIHdoaWxlIGhhbmRsaW5nIG1lc3NhZ2UgaW4gJHtoYW5kbGVyLm5hbWV9YCwgaGFuZGxlckVycm9yKVxuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJlc2V0SGFuZGxlcnMoKVxuXG4gICAgYXdhaXQgdGhpcy5tZXNzYWdlVW5rbm93bkFsZXJ0KGRhdGEsIHRoaXMuc2NhbkFnYWluQ2FsbGJhY2spXG5cbiAgICByZXR1cm4gdGhpcy5zdG9yZVJlc3VsdCh7IHJlc3VsdDogdW5kZWZpbmVkLCBkYXRhIH0sIElBQ0hhbmRsZXJTdGF0dXMuVU5TVVBQT1JURUQsIHRoaXMudHJhbnNwb3J0KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlc2V0SGFuZGxlcnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0aGlzLmhhbmRsZXJzLm1hcCgoaGFuZGxlcikgPT4ge1xuICAgICAgICBoYW5kbGVyLnJlc2V0KClcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZXNlcmlhbGl6ZShkZXNlcmlhbGl6ZWRTeW5jOiBJQUNNZXNzYWdlV3JhcHBlcjxJQUNNZXNzYWdlRGVmaW5pdGlvbk9iamVjdFYzW10+KTogUHJvbWlzZTxJQUNIYW5kbGVyU3RhdHVzPiB7XG4gICAgY29uc3QgZGF0YSA9IGRlc2VyaWFsaXplZFN5bmMucmVzdWx0XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBncm91cGVkQnlUeXBlOiB7IFtrZXkgaW4gSUFDTWVzc2FnZVR5cGVdPzogSUFDTWVzc2FnZURlZmluaXRpb25PYmplY3RWM1tdIH0gPSBkYXRhLnJlZHVjZShcbiAgICAgICAgKGdyb3VwZWQsIG1lc3NhZ2UpID0+IE9iamVjdC5hc3NpZ24oZ3JvdXBlZCwgeyBbbWVzc2FnZS50eXBlXTogKGdyb3VwZWRbbWVzc2FnZS50eXBlXSB8fCBbXSkuY29uY2F0KG1lc3NhZ2UpIH0pLFxuICAgICAgICB7fSBhcyB7IFtrZXkgaW4gSUFDTWVzc2FnZVR5cGVdPzogSUFDTWVzc2FnZURlZmluaXRpb25PYmplY3RWM1tdIH1cbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCB0eXBlIGluIGdyb3VwZWRCeVR5cGUpIHtcbiAgICAgICAgaWYgKHR5cGUgaW4gSUFDTWVzc2FnZVR5cGUpIHtcbiAgICAgICAgICAvLyBUT0RPOiBJbXByb3ZlIHR5cGVzXG4gICAgICAgICAgY29uc3QgdHlwZWRUeXBlOiBJQUNNZXNzYWdlVHlwZSA9IHBhcnNlSW50KHR5cGUsIDEwKVxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgdGhpcy5zZXJpYWxpemVyTWVzc2FnZUhhbmRsZXJzW3R5cGVkVHlwZV0oXG4gICAgICAgICAgICB7IHJlc3VsdDogZ3JvdXBlZEJ5VHlwZVt0eXBlZFR5cGVdID8/IFtdLCBkYXRhOiBkZXNlcmlhbGl6ZWRTeW5jLmRhdGEsIGNvbnRleHQ6IGRlc2VyaWFsaXplZFN5bmMuY29udGV4dCB9LFxuICAgICAgICAgICAgdGhpcy50cmFuc3BvcnQsXG4gICAgICAgICAgICB0aGlzLnNjYW5BZ2FpbkNhbGxiYWNrXG4gICAgICAgICAgKS5jYXRjaChjb25zb2xlLmVycm9yKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRPRE86IEltcHJvdmUgdHlwZXNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgbm8tY29uc29sZVxuICAgICAgICAgIHRoaXMuc3luY1R5cGVOb3RTdXBwb3J0ZWRBbGVydChkZXNlcmlhbGl6ZWRTeW5jLCB0aGlzLnRyYW5zcG9ydCwgdGhpcy5zY2FuQWdhaW5DYWxsYmFjaykuY2F0Y2goY29uc29sZS5lcnJvcilcblxuICAgICAgICAgIHJldHVybiBJQUNIYW5kbGVyU3RhdHVzLlVOU1VQUE9SVEVEXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIElBQ0hhbmRsZXJTdGF0dXMuU1VDQ0VTU1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IG1lc3NhZ2UgcmVjZWl2ZWQhJylcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbWVzc2FnZVVua25vd25BbGVydChkYXRhOiBzdHJpbmcsIHNjYW5BZ2FpbkNhbGxiYWNrOiBTY2FuQWdhaW5DYWxsYmFjayk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlbGF5SGFuZGxlciA9ICgpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICB0aGlzLnJlbGF5KGRhdGEpLmNhdGNoKGNvbnNvbGUuZXJyb3IpXG4gICAgfVxuXG4gICAgY29uc3QgY29weUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgdGhpcy5jbGlwYm9hcmQuY29weUFuZFNob3dUb2FzdChkYXRhKS5jYXRjaChjb25zb2xlLmVycm9yKVxuICAgIH1cblxuICAgIGNvbnN0IGNhbmNlbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBzY2FuQWdhaW5DYWxsYmFjaygpXG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICB0aGlzLnVpRXZlbnRFbGVtZW50U2VydmljZS5zaG93SUFDTWVzc2FnZVVua25vd25BbGVydChyZWxheUhhbmRsZXIsIGNvcHlIYW5kbGVyLCBjYW5jZWxIYW5kbGVyKS5jYXRjaChjb25zb2xlLmVycm9yKVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHN5bmNUeXBlTm90U3VwcG9ydGVkQWxlcnQoXG4gICAgbWVzc2FnZVdyYXBwZXI6IElBQ01lc3NhZ2VXcmFwcGVyPElBQ01lc3NhZ2VEZWZpbml0aW9uT2JqZWN0VjNbXT4sXG4gICAgX3RyYW5zcG9ydDogSUFDTWVzc2FnZVRyYW5zcG9ydCxcbiAgICBzY2FuQWdhaW5DYWxsYmFjazogU2NhbkFnYWluQ2FsbGJhY2tcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVsYXlIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIHRoaXMucmVsYXkobWVzc2FnZVdyYXBwZXIuZGF0YSkuY2F0Y2goY29uc29sZS5lcnJvcilcbiAgICB9XG5cbiAgICBjb25zdCBjb3B5SGFuZGxlciA9ICgpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICB0aGlzLmNsaXBib2FyZC5jb3B5QW5kU2hvd1RvYXN0KG1lc3NhZ2VXcmFwcGVyLmRhdGEpLmNhdGNoKGNvbnNvbGUuZXJyb3IpXG4gICAgfVxuXG4gICAgY29uc3QgY2FuY2VsSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIHNjYW5BZ2FpbkNhbGxiYWNrKClcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIHRoaXMudWlFdmVudEVsZW1lbnRTZXJ2aWNlLnNob3dJQUNNZXNzYWdlTm90U3VwcG9ydGVkQWxlcnQocmVsYXlIYW5kbGVyLCBjb3B5SGFuZGxlciwgY2FuY2VsSGFuZGxlcikuY2F0Y2goY29uc29sZS5lcnJvcilcblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXJpYWxpemUobWVzc2FnZURlZmluaXRpb25PYmplY3Q6IElBQ01lc3NhZ2VEZWZpbml0aW9uT2JqZWN0VjNbXSwgcHJlZml4OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBTZXJpYWxpemVyVjNHZW5lcmF0b3IoKVxuICAgIGF3YWl0IGdlbmVyYXRvci5jcmVhdGUobWVzc2FnZURlZmluaXRpb25PYmplY3QsIDEwMCwgMTAwKVxuXG4gICAgcmV0dXJuIGdlbmVyYXRvci5nZXRTaW5nbGUocHJlZml4KVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNob3VsZCByZWxheSB0aGUgbWVzc2FnZSB0byB0aGUgb3RoZXIgYXBwLiBUaGUgYXBwIGlzIHJlc3BvbnNpYmVcbiAgICogZm9yIG5hdmlnYXRpbmcgYXdheSBmcm9tIHRoZSBzY2FubmVyIGJlY2F1c2Ugc2Nhbm5pbmcgd2lsbCBub3QgYmUgcmVzdW1lZC5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgdGhhdCB3aWxsIGJlIHJlbGF5ZWRcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWxheShkYXRhOiBSZWxheU1lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+XG59XG4iXX0=
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { IACHandlerStatus, IACMessageHandler } from './message-handler';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Handles requests that can only be in a single QR
|
|
6
|
+
*/
|
|
7
|
+
export class IACSinglePartHandler extends IACMessageHandler {
|
|
8
|
+
constructor() {
|
|
9
|
+
super();
|
|
10
|
+
}
|
|
11
|
+
async canHandle(data) {
|
|
12
|
+
const processed = await this.processData(data);
|
|
13
|
+
if (processed) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async receive(data) {
|
|
21
|
+
const processed = await this.processData(data);
|
|
22
|
+
if (!processed) {
|
|
23
|
+
return IACHandlerStatus.UNSUPPORTED;
|
|
24
|
+
}
|
|
25
|
+
this.rawData = data;
|
|
26
|
+
this.payload = processed;
|
|
27
|
+
return IACHandlerStatus.SUCCESS;
|
|
28
|
+
}
|
|
29
|
+
async getProgress() {
|
|
30
|
+
return 1;
|
|
31
|
+
}
|
|
32
|
+
async getResult() {
|
|
33
|
+
return { result: this.payload, data: await this.getDataSingle() };
|
|
34
|
+
}
|
|
35
|
+
async getDataSingle() {
|
|
36
|
+
return this.rawData;
|
|
37
|
+
}
|
|
38
|
+
async reset() {
|
|
39
|
+
this.payload = undefined;
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IACSinglePartHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
43
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IACSinglePartHandler }); }
|
|
44
|
+
}
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IACSinglePartHandler, decorators: [{
|
|
46
|
+
type: Injectable
|
|
47
|
+
}], ctorParameters: () => [] });
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1oYW5kbGVyLXNpbmdsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvaWFjL21lc3NhZ2UtaGFuZGxlci1zaW5nbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQXFCLE1BQU0sbUJBQW1CLENBQUE7O0FBRTFGOztHQUVHO0FBRUgsTUFBTSxPQUFnQixvQkFBd0IsU0FBUSxpQkFBb0I7SUFJeEU7UUFDRSxLQUFLLEVBQUUsQ0FBQTtJQUNULENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQVk7UUFDakMsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzlDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBWTtRQUMvQixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFOUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUE7UUFDckMsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFBO1FBRXhCLE9BQU8sZ0JBQWdCLENBQUMsT0FBTyxDQUFBO0lBQ2pDLENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVztRQUN0QixPQUFPLENBQUMsQ0FBQTtJQUNWLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUztRQUNwQixPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUE7SUFDbkUsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUNyQixDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUE7UUFFeEIsT0FBTTtJQUNSLENBQUM7K0dBOUNtQixvQkFBb0I7bUhBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFEekMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgSUFDSGFuZGxlclN0YXR1cywgSUFDTWVzc2FnZUhhbmRsZXIsIElBQ01lc3NhZ2VXcmFwcGVyIH0gZnJvbSAnLi9tZXNzYWdlLWhhbmRsZXInXG5cbi8qKlxuICogSGFuZGxlcyByZXF1ZXN0cyB0aGF0IGNhbiBvbmx5IGJlIGluIGEgc2luZ2xlIFFSXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJQUNTaW5nbGVQYXJ0SGFuZGxlcjxUPiBleHRlbmRzIElBQ01lc3NhZ2VIYW5kbGVyPFQ+IHtcbiAgcHJvdGVjdGVkIHBheWxvYWQ6IFQgfCB1bmRlZmluZWRcbiAgcHJvdGVjdGVkIHJhd0RhdGE6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjYW5IYW5kbGUoZGF0YTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcHJvY2Vzc2VkID0gYXdhaXQgdGhpcy5wcm9jZXNzRGF0YShkYXRhKVxuICAgIGlmIChwcm9jZXNzZWQpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWNlaXZlKGRhdGE6IHN0cmluZyk6IFByb21pc2U8SUFDSGFuZGxlclN0YXR1cz4ge1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IGF3YWl0IHRoaXMucHJvY2Vzc0RhdGEoZGF0YSlcblxuICAgIGlmICghcHJvY2Vzc2VkKSB7XG4gICAgICByZXR1cm4gSUFDSGFuZGxlclN0YXR1cy5VTlNVUFBPUlRFRFxuICAgIH1cblxuICAgIHRoaXMucmF3RGF0YSA9IGRhdGFcbiAgICB0aGlzLnBheWxvYWQgPSBwcm9jZXNzZWRcblxuICAgIHJldHVybiBJQUNIYW5kbGVyU3RhdHVzLlNVQ0NFU1NcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQcm9ncmVzcygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UmVzdWx0KCk6IFByb21pc2U8SUFDTWVzc2FnZVdyYXBwZXI8VD4gfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4geyByZXN1bHQ6IHRoaXMucGF5bG9hZCwgZGF0YTogYXdhaXQgdGhpcy5nZXREYXRhU2luZ2xlKCkgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERhdGFTaW5nbGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5yYXdEYXRhXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVzZXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wYXlsb2FkID0gdW5kZWZpbmVkXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGFic3RyYWN0IHByb2Nlc3NEYXRhKGRhdGE6IHN0cmluZyk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export var IACMessageTransport;
|
|
4
|
+
(function (IACMessageTransport) {
|
|
5
|
+
IACMessageTransport["QR_SCANNER"] = "QR_SCANNER";
|
|
6
|
+
IACMessageTransport["DEEPLINK"] = "DEEPLINK";
|
|
7
|
+
IACMessageTransport["PASTE"] = "CLIPBOARD";
|
|
8
|
+
})(IACMessageTransport || (IACMessageTransport = {}));
|
|
9
|
+
export var IACHandlerStatus;
|
|
10
|
+
(function (IACHandlerStatus) {
|
|
11
|
+
IACHandlerStatus[IACHandlerStatus["SUCCESS"] = 0] = "SUCCESS";
|
|
12
|
+
IACHandlerStatus[IACHandlerStatus["PARTIAL"] = 1] = "PARTIAL";
|
|
13
|
+
IACHandlerStatus[IACHandlerStatus["UNSUPPORTED"] = 2] = "UNSUPPORTED";
|
|
14
|
+
})(IACHandlerStatus || (IACHandlerStatus = {}));
|
|
15
|
+
export class IACMessageHandler {
|
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IACMessageHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
17
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IACMessageHandler }); }
|
|
18
|
+
}
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IACMessageHandler, decorators: [{
|
|
20
|
+
type: Injectable
|
|
21
|
+
}] });
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9pYWMvbWVzc2FnZS1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7O0FBRTFDLE1BQU0sQ0FBTixJQUFZLG1CQUlYO0FBSkQsV0FBWSxtQkFBbUI7SUFDN0IsZ0RBQXlCLENBQUE7SUFDekIsNENBQXFCLENBQUE7SUFDckIsMENBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUpXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFJOUI7QUFDRCxNQUFNLENBQU4sSUFBWSxnQkFJWDtBQUpELFdBQVksZ0JBQWdCO0lBQzFCLDZEQUFXLENBQUE7SUFDWCw2REFBVyxDQUFBO0lBQ1gscUVBQWUsQ0FBQTtBQUNqQixDQUFDLEVBSlcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQUkzQjtBQWdCRCxNQUFNLE9BQWdCLGlCQUFpQjsrR0FBakIsaUJBQWlCO21IQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRHRDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuZXhwb3J0IGVudW0gSUFDTWVzc2FnZVRyYW5zcG9ydCB7XG4gIFFSX1NDQU5ORVIgPSAnUVJfU0NBTk5FUicsXG4gIERFRVBMSU5LID0gJ0RFRVBMSU5LJyxcbiAgUEFTVEUgPSAnQ0xJUEJPQVJEJ1xufVxuZXhwb3J0IGVudW0gSUFDSGFuZGxlclN0YXR1cyB7XG4gIFNVQ0NFU1MgPSAwLFxuICBQQVJUSUFMID0gMSxcbiAgVU5TVVBQT1JURUQgPSAyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFDQ29udGV4dCB7XG4gIHJlcXVlc3RJZD86IHN0cmluZ1xuICBkZXJpdmF0aW9uUGF0aD86IHN0cmluZ1xuICBzb3VyY2VGaW5nZXJwcmludD86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBQ01lc3NhZ2VXcmFwcGVyPFQ+IHtcbiAgcmVzdWx0OiBUXG4gIGRhdGE6IHN0cmluZ1xuICAvLyBUT0RPOiBJbnN0ZWFkIG9mIHRoaXMsIGNyZWF0ZSBhbiBpbnRlcm5hbCBtZXNzYWdlIGZvciBldmVyeSBwcm90b2NvbC9tZXNzYWdlIHRoYXQgY2FuIGNvbnRhaW4gYWRkaXRpb25hbCBkYXRhLCB3aGljaCBpcyBub3QgaW4gdGhlIHNlcmlhbGl6ZXIgbWVzc2FnZXMuXG4gIGNvbnRleHQ/OiBJQUNDb250ZXh0XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJQUNNZXNzYWdlSGFuZGxlcjxUPiB7XG4gIGFic3RyYWN0IG5hbWU6IHN0cmluZ1xuXG4gIGFic3RyYWN0IGNhbkhhbmRsZShkYXRhOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+XG5cbiAgYWJzdHJhY3QgcmVjZWl2ZShkYXRhOiBzdHJpbmcpOiBQcm9taXNlPElBQ0hhbmRsZXJTdGF0dXM+IC8vIGludGVybmFsbHkgc3RvcmVcblxuICBhYnN0cmFjdCBoYW5kbGVDb21wbGV0ZSgpOiBQcm9taXNlPElBQ01lc3NhZ2VXcmFwcGVyPFQ+PiAvLyBoYW5kbGUgY29tcGxldGVcblxuICBhYnN0cmFjdCBnZXRQcm9ncmVzcygpOiBQcm9taXNlPG51bWJlcj5cblxuICBhYnN0cmFjdCBnZXRSZXN1bHQoKTogUHJvbWlzZTxJQUNNZXNzYWdlV3JhcHBlcjxUPiB8IHVuZGVmaW5lZD5cblxuICBhYnN0cmFjdCBnZXREYXRhU2luZ2xlKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPlxuXG4gIGFic3RyYWN0IHJlc2V0KCk6IFByb21pc2U8dm9pZD5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { serializedDataToUrlString } from '../../utils/utils';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class IACQrGenerator {
|
|
5
|
+
async prefixSingle(data, prefix, parameter) {
|
|
6
|
+
return serializedDataToUrlString(data, `${prefix}://`, parameter);
|
|
7
|
+
}
|
|
8
|
+
static async canHandle(_data) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IACQrGenerator, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
12
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IACQrGenerator }); }
|
|
13
|
+
}
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IACQrGenerator, decorators: [{
|
|
15
|
+
type: Injectable
|
|
16
|
+
}] });
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXItZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9pYWMvcXItZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbUJBQW1CLENBQUE7O0FBRzdELE1BQU0sT0FBZ0IsY0FBYztJQU14QixLQUFLLENBQUMsWUFBWSxDQUFDLElBQVksRUFBRSxNQUFjLEVBQUUsU0FBaUI7UUFDMUUsT0FBTyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUNuRSxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBcUM7UUFDakUsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDOytHQVptQixjQUFjO21IQUFkLGNBQWM7OzRGQUFkLGNBQWM7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQUNNZXNzYWdlRGVmaW5pdGlvbk9iamVjdFYzIH0gZnJvbSAnQHdhbGxmcmVlLWRldi9zZXJpYWxpemVyJ1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBzZXJpYWxpemVkRGF0YVRvVXJsU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJQUNRckdlbmVyYXRvciB7XG4gIGFic3RyYWN0IGNyZWF0ZShkYXRhOiBJQUNNZXNzYWdlRGVmaW5pdGlvbk9iamVjdFYzW10sIG11bHRpRnJhZ21lbnRMZW5ndGg/OiBudW1iZXIsIHNpbmdsZUZyYWdtZW50TGVuZ3RoPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPlxuICBhYnN0cmFjdCBuZXh0UGFydCgpOiBQcm9taXNlPHN0cmluZz4gLy8gaGFuZGxlIGNvbXBsZXRlXG4gIGFic3RyYWN0IGdldFNpbmdsZShwcmVmaXg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPlxuICBhYnN0cmFjdCBnZXROdW1iZXJPZlBhcnRzKCk6IFByb21pc2U8bnVtYmVyPlxuXG4gIHByb3RlY3RlZCBhc3luYyBwcmVmaXhTaW5nbGUoZGF0YTogc3RyaW5nLCBwcmVmaXg6IHN0cmluZywgcGFyYW1ldGVyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBzZXJpYWxpemVkRGF0YVRvVXJsU3RyaW5nKGRhdGEsIGAke3ByZWZpeH06Ly9gLCBwYXJhbWV0ZXIpXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFzeW5jIGNhbkhhbmRsZShfZGF0YTogSUFDTWVzc2FnZURlZmluaXRpb25PYmplY3RWM1tdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuIl19
|