├── .ruby-version ├── .eslintignore ├── .yarnrc ├── src ├── hardware │ ├── bitbox │ │ └── index.ts │ ├── ledger │ │ └── index.ts │ ├── trezor │ │ └── index.ts │ ├── HWErrorState.ts │ ├── signerSeeds.ts │ └── jade │ │ └── index.ts ├── services │ ├── channel │ │ └── index.ts │ └── qr │ │ ├── bbqr │ │ └── index.ts │ │ └── bc-ur-registry │ │ ├── errors │ │ └── index.ts │ │ ├── types.ts │ │ ├── lib │ │ ├── index.ts │ │ └── DataItem.ts │ │ ├── patchCBOR.ts │ │ └── utils.ts ├── models │ ├── enums │ │ ├── UnitAliases.ts │ │ ├── LoginMethod.ts │ │ ├── Notifications.ts │ │ ├── Hardware.ts │ │ ├── RecipientKind.ts │ │ ├── ThemeMode.ts │ │ ├── CurrencyKind.ts │ │ ├── BufferEncoding.ts │ │ ├── SubscriptionTier.ts │ │ ├── BitcoinUnit.ts │ │ └── ConciergeTag.ts │ ├── types │ │ ├── UnitAliases.ts │ │ └── TransactionFeeSnapshot.ts │ └── interfaces │ │ ├── HeathCheckTypes.ts │ │ └── KeeperApp.ts ├── assets │ ├── fonts │ │ ├── Inter-Bold.ttf │ │ ├── Inter-Italic.ttf │ │ ├── Inter-Light.ttf │ │ ├── Lora-Medium.ttf │ │ ├── Inter-Regular.ttf │ │ ├── Lora-SemiBold.ttf │ │ ├── Inter-BoldItalic.ttf │ │ ├── Inter-LightItalic.ttf │ │ ├── Lora-MediumItalic.ttf │ │ └── Lora-SemiBoldItalic.ttf │ ├── images │ │ ├── onboardingCall.png │ │ ├── keeper-new-logo.png │ │ ├── onboardingCallDark.png │ │ ├── person-placeholder-1.jpeg │ │ ├── person-placeholder-2.jpeg │ │ ├── dot-green.svg │ │ ├── dot-white.svg │ │ ├── dot-cream.svg │ │ ├── send-dark.svg │ │ ├── paper-plane-black.svg │ │ ├── paper-plane-dark.svg │ │ ├── paper-plane-light.svg │ │ ├── send-light.svg │ │ ├── acquire-buy-arrow.svg │ │ ├── checkbox_inactive.svg │ │ ├── acquire-buy-arrow-white.svg │ │ ├── checkbox_outline_inactive.svg │ │ ├── share-arrow-green.svg │ │ ├── share-arrow-white.svg │ │ ├── acquire-sell-arrow.svg │ │ ├── acquire-sell-arrow-white.svg │ │ ├── check-dark-icon.svg │ │ ├── profile-arrow.svg │ │ ├── add_white.svg │ │ ├── plus-green-icon.svg │ │ ├── signer.svg │ │ ├── tick_icon.svg │ │ ├── checkbox_active.svg │ │ ├── bin-dark.svg │ │ ├── bin-light.svg │ │ ├── download-icon.svg │ │ ├── checkbox_outline_active.svg │ │ ├── remove-green-icon.svg │ │ ├── remove-white-icon.svg │ │ ├── deleteNode.svg │ │ ├── icon_check.svg │ │ ├── deleteNodeWhite.svg │ │ ├── cloud.svg │ │ ├── cloud-white.svg │ │ ├── icon_arrow.svg │ │ ├── files.svg │ │ ├── tapsigner_light.svg │ │ ├── checkmark.svg │ │ ├── files-disable.svg │ │ ├── user-cosigner.svg │ │ ├── icon_arrow_black.svg │ │ ├── add-contact-light.svg │ │ ├── file.svg │ │ ├── white_icon_check.svg │ │ ├── specter_icon_light.svg │ │ ├── close.svg │ │ ├── nav-left.svg │ │ ├── time.svg │ │ ├── chip.svg │ │ ├── nav-left-white.svg │ │ ├── nav-right.svg │ │ ├── nav-right-white.svg │ │ ├── KruxIconDark.svg │ │ ├── flag-france.svg │ │ ├── mobile_key.svg │ │ ├── mobile_key_light.svg │ │ ├── confirm-square.svg │ │ ├── confirm-square-green.svg │ │ ├── Telegram.svg │ │ ├── copy_new.svg │ │ ├── Telegram-white.svg │ │ ├── back-white.svg │ │ ├── back_white.svg │ │ ├── dark-mode-icom.svg │ │ ├── jade-green-dark.svg │ │ ├── jade-green-light.svg │ │ ├── link_telegram.svg │ │ ├── vault-grey.svg │ │ ├── vault_green.svg │ │ ├── KruxIcon.svg │ │ ├── link_telegram_dark.svg │ │ ├── swap-price-arrow.svg │ │ ├── swap-price-arrow-white.svg │ │ ├── digonal-arrow-white.svg │ │ ├── Twitter.svg │ │ ├── Twitter-white.svg │ │ ├── rightarrow.svg │ │ ├── btc-down-white.svg │ │ ├── image.svg │ │ ├── selected.svg │ │ ├── tapsigner_icon.svg │ │ ├── vault-icon-small.svg │ │ ├── portalIcon.svg │ │ ├── btc.svg │ │ ├── btc_black.svg │ │ ├── btc_white.svg │ │ ├── link_email_dark.svg │ │ ├── arrow.svg │ │ ├── icon_dollar.svg │ │ ├── search-icon.svg │ │ ├── daily_wallet.svg │ │ ├── link_email.svg │ │ ├── btc_up.svg │ │ ├── specter_icon.svg │ │ ├── add-plain-green.svg │ │ ├── iconRefreshDark.svg │ │ ├── iconRefreshLight.svg │ │ ├── planCheckMark.svg │ │ ├── plan-white-check.svg │ │ ├── add-plus-white.svg │ │ ├── add-plus-green.svg │ │ ├── btc_down.svg │ │ ├── toast_error.svg │ │ ├── planCheckMarkSelected.svg │ │ ├── checked.svg │ │ ├── jade_icon_light.svg │ │ ├── jade_icon.svg │ │ ├── share-contact-light.svg │ │ ├── Edit-Icon.svg │ │ ├── MapPin.svg │ │ ├── icon_tick.svg │ │ ├── seedwords.svg │ │ ├── Map-pin-icon.svg │ │ ├── MapPinIcon.svg │ │ ├── seedwordsLight.svg │ │ ├── edit_brown.svg │ │ ├── collaborative-icon-small.svg │ │ ├── info_icon.svg │ │ ├── info-Dark-icon.svg │ │ ├── collaborative_vault_white.svg │ │ ├── skip.svg │ │ ├── deletelabel.svg │ │ ├── header-notification-simple-icon.svg │ │ ├── tapsigner-green-dark.svg │ │ ├── tapsigner-green-light.svg │ │ ├── swap-success.svg │ │ ├── usdt-wallet-logo.svg │ │ ├── import.svg │ │ ├── swap-confirmint.svg │ │ ├── swap-processing.svg │ │ ├── three-dots-grey.svg │ │ ├── learnMoreIcon.svg │ │ ├── icon_recieved_dark.svg │ │ ├── icon_recieved_red.svg │ │ ├── passport_icon.svg │ │ └── mobile-key-green-dark.svg │ └── privateImages │ │ ├── keeper-private-new-logo.png │ │ ├── acquire-buy-gold-arrow.svg │ │ ├── acquire-sell-gold-arrow.svg │ │ ├── plus-gold-icon.svg │ │ └── tick-icon.svg ├── store │ ├── sagaActions │ │ ├── network.ts │ │ ├── advisor.ts │ │ ├── notifications.ts │ │ ├── preferences.ts │ │ ├── upgrade.ts │ │ ├── account.ts │ │ └── concierge.ts │ ├── utilities.ts │ ├── hooks │ │ ├── index.ts │ │ └── state-selectors │ │ │ └── useCurrencyCode.ts │ └── reducers │ │ ├── notifications.ts │ │ ├── swap.ts │ │ └── advisor.ts ├── index.d.ts ├── components │ ├── Scale.tsx │ ├── SVGComponents │ │ └── InheritanceToolsIllustartion.tsx │ ├── DotView.tsx │ ├── ThemedColor │ │ └── ThemedColor.tsx │ ├── ThemedSvg.tsx │ │ └── ThemedSvg.tsx │ ├── KeeperGradient.tsx │ └── ContentWrapper.tsx ├── hooks │ ├── useExchangeRates.tsx │ ├── useOneDayInsight.tsx │ ├── useArchivedVaults.ts │ ├── useNfcModal.tsx │ ├── useAsync.ts │ ├── useSubscriptionLevel.ts │ ├── useKeyboard.tsx │ ├── useGetInUK.ts │ ├── useSignerFromKey.ts │ └── useTapsignerModal.tsx ├── screens │ ├── Recovery │ │ └── constants.ts │ └── ErrorHandler.tsx ├── providers │ └── index.tsx ├── storage │ └── realm │ │ ├── utils.ts │ │ └── schema │ │ ├── backup.ts │ │ ├── versionHistory.ts │ │ ├── backupHistory.ts │ │ ├── cloudBackupHistory.ts │ │ ├── swapHistory.ts │ │ ├── app.ts │ │ ├── nodeConnect.ts │ │ ├── uai.ts │ │ └── subscription.ts ├── utils │ ├── OpenLink.ts │ └── releaseTopic.ts ├── nativemodules │ ├── KeepScreenAwake.ts │ └── interface.ts ├── constants │ ├── Fonts.js │ └── responsive.tsx ├── navigation │ └── contants.ts └── context │ └── ThemeContext.tsx ├── update-config.sh ├── app.json ├── ios ├── Gemfile ├── hexa_keeper │ ├── Images.xcassets │ │ ├── Contents.json │ │ ├── AppIcon.appiconset │ │ │ ├── 114.png │ │ │ ├── 120.png │ │ │ ├── 180.png │ │ │ ├── 29.png │ │ │ ├── 40.png │ │ │ ├── 57.png │ │ │ ├── 58.png │ │ │ ├── 60.png │ │ │ ├── 80.png │ │ │ ├── 87.png │ │ │ ├── 1024.png │ │ │ └── 120 1.png │ │ ├── KpAppIcon.appiconset │ │ │ ├── 100.png │ │ │ ├── 1024.png │ │ │ ├── 114.png │ │ │ ├── 120.png │ │ │ ├── 144.png │ │ │ ├── 152.png │ │ │ ├── 167.png │ │ │ ├── 180.png │ │ │ ├── 20.png │ │ │ ├── 29.png │ │ │ ├── 40.png │ │ │ ├── 50.png │ │ │ ├── 57.png │ │ │ ├── 58.png │ │ │ ├── 60.png │ │ │ ├── 72.png │ │ │ ├── 76.png │ │ │ ├── 80.png │ │ │ └── 87.png │ │ ├── dev-AppIcon.appiconset │ │ │ ├── 29.png │ │ │ ├── 40.png │ │ │ ├── 57.png │ │ │ ├── 58.png │ │ │ ├── 60.png │ │ │ ├── 80.png │ │ │ ├── 87.png │ │ │ ├── 1024.png │ │ │ ├── 114.png │ │ │ ├── 120.png │ │ │ ├── 180.png │ │ │ ├── 120 1.png │ │ │ └── 120-1.png │ │ └── keeperbg.imageset │ │ │ ├── keeperbg.png │ │ │ ├── keeperbg 1.png │ │ │ ├── keeperbg 2.png │ │ │ └── Contents.json │ ├── AppDelegate.h │ ├── main.m │ └── hexa_keeperDebug.entitlements ├── FiraSansCondensed-MediumItalic.ttf ├── File.swift ├── hexa_keeper-Bridging-Header.h ├── cloudbackup │ └── cloudbackup.h ├── hexa_keeper.xcodeproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── whirlpool │ └── hexa_keeper-Bridging-Header.h ├── .gitignore ├── hexa_keeper.xcworkspace │ ├── xcshareddata │ │ ├── WorkspaceSettings.xcsettings │ │ └── IDEWorkspaceChecks.plist │ └── contents.xcworkspacedata ├── keepScreenAwake │ └── keepScreenAwake.h ├── fastlane │ └── Appfile ├── .xcode.env └── ci_scripts │ └── ci_post_clone.sh ├── .huskyrc.json ├── declare.d.ts ├── __mocks__ ├── svgMock.js ├── react-native-linear-gradient.js ├── realm.js ├── react-native-config.js ├── react-native-hce.js ├── react-native-clipboard.js ├── react-native-responsive-fontsize.js ├── react-native-nfc-manager.js ├── react-native-tor.js ├── react-native-community-netinfo.js ├── react-native-localize.js ├── react-native-responsive-screen.js ├── react-native-firebase-messaging.js ├── react-native-fs.js ├── redux-persist │ └── lib │ │ └── storage.js └── react-native-keychain.js ├── android ├── app │ ├── debug.keystore │ ├── src │ │ ├── main │ │ │ ├── res │ │ │ │ ├── playstore.png │ │ │ │ ├── drawable │ │ │ │ │ └── bgkeeper.png │ │ │ │ ├── ic_launcher-web.png │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_kp.png │ │ │ │ │ ├── ic_launcher_round.png │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── mipmap-ldpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_kp.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_kp.png │ │ │ │ │ ├── ic_launcher_round.png │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_kp.png │ │ │ │ │ ├── ic_launcher_round.png │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_kp.png │ │ │ │ │ ├── ic_launcher_round.png │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── values │ │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ │ ├── color.xml │ │ │ │ │ ├── strings.xml │ │ │ │ │ └── styles.xml │ │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ │ ├── ic_launcher.xml │ │ │ │ │ └── ic_launcher_round.xml │ │ │ │ ├── values-night │ │ │ │ │ └── styles.xml │ │ │ │ └── xml │ │ │ │ │ └── apduservice.xml │ │ │ ├── ic_launcher-playstore.png │ │ │ └── assets │ │ │ │ └── fonts │ │ │ │ ├── Inter-Bold.ttf │ │ │ │ ├── FontAwesome.ttf │ │ │ │ ├── Inter-Italic.ttf │ │ │ │ ├── Inter-Light.ttf │ │ │ │ ├── Inter-Regular.ttf │ │ │ │ ├── Lora-Medium.ttf │ │ │ │ ├── Lora-SemiBold.ttf │ │ │ │ ├── FontAwesome5_Solid.ttf │ │ │ │ ├── Inter-BoldItalic.ttf │ │ │ │ ├── Inter-LightItalic.ttf │ │ │ │ ├── Lora-MediumItalic.ttf │ │ │ │ ├── FontAwesome5_Brands.ttf │ │ │ │ ├── FontAwesome5_Regular.ttf │ │ │ │ ├── Lora-SemiBoldItalic.ttf │ │ │ │ ├── RobotoCondensed-Bold.ttf │ │ │ │ ├── FiraSansCondensed-Bold.ttf │ │ │ │ ├── FiraSansCondensed-Light.ttf │ │ │ │ ├── RobotoCondensed-Italic.ttf │ │ │ │ ├── RobotoCondensed-Light.ttf │ │ │ │ ├── RobotoCondensed-Regular.ttf │ │ │ │ ├── FiraSansCondensed-Italic.ttf │ │ │ │ ├── FiraSansCondensed-Medium.ttf │ │ │ │ ├── FiraSansCondensed-Regular.ttf │ │ │ │ ├── FiraSansCondensed-BoldItalic.ttf │ │ │ │ ├── FiraSansCondensed-SemiBold.ttf │ │ │ │ ├── RobotoCondensed-BoldItalic.ttf │ │ │ │ ├── RobotoCondensed-LightItalic.ttf │ │ │ │ ├── FiraSansCondensed-LightItalic.ttf │ │ │ │ └── FiraSansCondensed-MediumItalic.ttf │ │ └── development │ │ │ └── res │ │ │ ├── ic_launcher-web.png │ │ │ ├── playstore-icon.png │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_kp.png │ │ │ ├── ic_launcher_round.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── mipmap-ldpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_kp.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_kp.png │ │ │ ├── ic_launcher_round.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_kp.png │ │ │ ├── ic_launcher_round.png │ │ │ └── ic_launcher_foreground.png │ │ │ ├── values │ │ │ ├── ic_launcher_background.xml │ │ │ ├── strings.xml │ │ │ ├── color.xml │ │ │ └── styles.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ └── values-night │ │ │ └── styles.xml │ ├── proguard-rules.pro │ └── build_defs.bzl ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── fastlane │ ├── Pluginfile │ └── Appfile ├── Gemfile ├── .gitignore └── settings.gradle ├── flows ├── sanity.yaml ├── refreshwallet.yaml ├── keySetting.yaml ├── subscription.yaml ├── editwallet.yaml ├── newapp.yaml ├── walletSetting.yaml ├── buyBTC.yaml ├── copywalletaddress.yaml ├── receive.yaml ├── receivesats.yaml ├── versionhistory.yaml ├── healthCheckKey.yaml ├── addNewKey.yaml └── login.yaml ├── global.d.ts ├── firebase.json ├── react-native.config.js ├── .lintstagedrc.js ├── sonar-project.properties ├── .prettierrc.json ├── appcenter-pre-build.sh ├── .github ├── ISSUE_TEMPLATE │ ├── task--internal-.md │ └── feature-request.md └── workflows │ ├── test.yml │ └── build.yml ├── setup.sh ├── Gemfile ├── .vscode └── settings.json ├── patches ├── realm+12.14.2.patch ├── react-native-mmkv+2.11.0.patch └── react-native-modal+13.0.1.patch └── metro.config.js /.ruby-version: -------------------------------------------------------------------------------- 1 | 3.3.0 -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /.yarnrc: -------------------------------------------------------------------------------- 1 | network-concurrency 1 -------------------------------------------------------------------------------- /src/hardware/bitbox/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/hardware/ledger/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/hardware/trezor/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /update-config.sh: -------------------------------------------------------------------------------- 1 | cp .env.$1 .env -------------------------------------------------------------------------------- /src/services/channel/index.ts: -------------------------------------------------------------------------------- 1 | export { io } from 'socket.io-client'; 2 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hexa_keeper", 3 | "displayName": "hexa_keeper" 4 | } -------------------------------------------------------------------------------- /ios/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "fastlane", "~> 2.225.0" 4 | -------------------------------------------------------------------------------- /.huskyrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "hooks": { 3 | "pre-commit": "yarn lint" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /declare.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg'; 2 | declare module '*.png'; 3 | declare module '*.jpg'; 4 | -------------------------------------------------------------------------------- /src/services/qr/bbqr/index.ts: -------------------------------------------------------------------------------- 1 | import { joinQRs } from './join.js'; 2 | export { joinQRs }; 3 | -------------------------------------------------------------------------------- /__mocks__/svgMock.js: -------------------------------------------------------------------------------- 1 | module.exports = 'SvgMock'; 2 | module.exports.ReactComponent = 'SvgMock'; 3 | -------------------------------------------------------------------------------- /src/models/enums/UnitAliases.ts: -------------------------------------------------------------------------------- 1 | export type Satoshis = number; 2 | export type Milliseconds = number; 3 | -------------------------------------------------------------------------------- /src/models/types/UnitAliases.ts: -------------------------------------------------------------------------------- 1 | export type Satoshis = number; 2 | export type Milliseconds = number; 3 | -------------------------------------------------------------------------------- /__mocks__/react-native-linear-gradient.js: -------------------------------------------------------------------------------- 1 | import { View } from 'react-native'; 2 | 3 | export default View; 4 | -------------------------------------------------------------------------------- /__mocks__/realm.js: -------------------------------------------------------------------------------- 1 | export default { 2 | open: jest.fn(), 3 | close: jest.fn(), 4 | write: jest.fn(), 5 | }; 6 | -------------------------------------------------------------------------------- /android/app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/debug.keystore -------------------------------------------------------------------------------- /src/assets/fonts/Inter-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/src/assets/fonts/Inter-Bold.ttf -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/assets/fonts/Inter-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/src/assets/fonts/Inter-Italic.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Inter-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/src/assets/fonts/Inter-Light.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Lora-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/src/assets/fonts/Lora-Medium.ttf -------------------------------------------------------------------------------- /flows/sanity.yaml: -------------------------------------------------------------------------------- 1 | appId: ${APPID} 2 | --- 3 | - runFlow: newapp.yaml 4 | - runFlow: addwallet.yaml 5 | - runFlow: addNewKey.yaml 6 | 7 | -------------------------------------------------------------------------------- /ios/hexa_keeper/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | @interface AppDelegate : RCTAppDelegate 4 | @end -------------------------------------------------------------------------------- /src/assets/fonts/Inter-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/src/assets/fonts/Inter-Regular.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Lora-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/src/assets/fonts/Lora-SemiBold.ttf -------------------------------------------------------------------------------- /src/assets/images/onboardingCall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/src/assets/images/onboardingCall.png -------------------------------------------------------------------------------- /android/app/src/main/res/playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/playstore.png -------------------------------------------------------------------------------- /ios/FiraSansCondensed-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/FiraSansCondensed-MediumItalic.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Inter-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/src/assets/fonts/Inter-BoldItalic.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Inter-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/src/assets/fonts/Inter-LightItalic.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Lora-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/src/assets/fonts/Lora-MediumItalic.ttf -------------------------------------------------------------------------------- /src/assets/images/keeper-new-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/src/assets/images/keeper-new-logo.png -------------------------------------------------------------------------------- /src/models/enums/LoginMethod.ts: -------------------------------------------------------------------------------- 1 | enum LoginMethod { 2 | PIN = 'PIN', 3 | BIOMETRIC = 'BIOMETRIC', 4 | } 5 | export default LoginMethod; 6 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /ios/File.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // hexa_keeper 4 | // 5 | // Created by Praneeth G on 14/03/23. 6 | // 7 | 8 | import Foundation 9 | -------------------------------------------------------------------------------- /src/assets/fonts/Lora-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/src/assets/fonts/Lora-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /src/assets/images/onboardingCallDark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/src/assets/images/onboardingCallDark.png -------------------------------------------------------------------------------- /global.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.jpg' { 2 | export default '' as string; 3 | } 4 | declare module '*.png' { 5 | export default '' as string; 6 | } 7 | -------------------------------------------------------------------------------- /ios/hexa_keeper-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | -------------------------------------------------------------------------------- /src/assets/images/person-placeholder-1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/src/assets/images/person-placeholder-1.jpeg -------------------------------------------------------------------------------- /src/assets/images/person-placeholder-2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/src/assets/images/person-placeholder-2.jpeg -------------------------------------------------------------------------------- /__mocks__/react-native-config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | RELAY: '', 3 | SIGNING_SERVER: '', 4 | TESTNET_WRAPPER: '', 5 | MAINNET_WRAPPER: '', 6 | }; 7 | -------------------------------------------------------------------------------- /__mocks__/react-native-hce.js: -------------------------------------------------------------------------------- 1 | const mock = jest.fn().mockImplementation(() => ({ 2 | getConstants: jest.fn(), 3 | })); 4 | 5 | export default mock; 6 | -------------------------------------------------------------------------------- /android/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/bgkeeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/drawable/bgkeeper.png -------------------------------------------------------------------------------- /android/app/src/main/res/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/ic_launcher-web.png -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Inter-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/Inter-Bold.ttf -------------------------------------------------------------------------------- /flows/refreshwallet.yaml: -------------------------------------------------------------------------------- 1 | appId: ${APPID} 2 | --- 3 | - swipe: 4 | from: 5 | id: list_transactions 6 | direction: DOWN 7 | duration: 15000 8 | -------------------------------------------------------------------------------- /src/models/enums/Notifications.ts: -------------------------------------------------------------------------------- 1 | export enum notificationType { 2 | REMOTE_KEY_SHARE = 'REMOTE_KEY_SHARE', 3 | ZENDESK_TICKET = 'ZENDESK_TICKET', 4 | } 5 | -------------------------------------------------------------------------------- /__mocks__/react-native-clipboard.js: -------------------------------------------------------------------------------- 1 | export default { 2 | getString: jest.fn(() => Promise.resolve('mocked clipboard text')), 3 | setString: jest.fn(), 4 | }; 5 | -------------------------------------------------------------------------------- /android/app/src/development/res/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/development/res/ic_launcher-web.png -------------------------------------------------------------------------------- /android/app/src/development/res/playstore-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/development/res/playstore-icon.png -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/FontAwesome.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/FontAwesome.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Inter-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/Inter-Italic.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Inter-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/Inter-Light.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Inter-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/Inter-Regular.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Lora-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/Lora-Medium.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Lora-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/Lora-SemiBold.ttf -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/fastlane/Pluginfile: -------------------------------------------------------------------------------- 1 | # Autogenerated by fastlane 2 | # 3 | # Ensure this file is checked in to source control! 4 | 5 | gem 'fastlane-plugin-versioning_android' 6 | -------------------------------------------------------------------------------- /src/assets/privateImages/keeper-private-new-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/src/assets/privateImages/keeper-private-new-logo.png -------------------------------------------------------------------------------- /src/services/qr/bc-ur-registry/errors/index.ts: -------------------------------------------------------------------------------- 1 | export class UnknownURTypeError extends Error { 2 | constructor(message: string) { 3 | super(message); 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/store/sagaActions/network.ts: -------------------------------------------------------------------------------- 1 | export const CONNECT_TO_NODE = 'CONNECT_TO_NODE'; 2 | 3 | export const connectToNode = () => ({ 4 | type: CONNECT_TO_NODE, 5 | }); 6 | -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Inter-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/Inter-BoldItalic.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Inter-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/Inter-LightItalic.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Lora-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/Lora-MediumItalic.ttf -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_kp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_kp.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-ldpi/ic_launcher_kp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-ldpi/ic_launcher_kp.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_kp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_kp.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "react-native": { 3 | "analytics_auto_collection_enabled": false, 4 | "google_analytics_automatic_screen_reporting_enabled": false 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Lora-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/Lora-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/RobotoCondensed-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/RobotoCondensed-Bold.ttf -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_kp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_kp.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_kp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_kp.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/114.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/29.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/57.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /react-native.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | project: { 3 | ios: {}, 4 | android: {}, // grouped into "project" 5 | }, 6 | assets: ['./src/assets/fonts'], 7 | }; 8 | -------------------------------------------------------------------------------- /src/models/enums/Hardware.ts: -------------------------------------------------------------------------------- 1 | export enum HWErrorType { 2 | INVALID_SIG = 'INVALID_SIG', 3 | INCORRECT_HW = 'INCORRECT_HW', 4 | INCORRECT_NETWORK = 'INCORRECT_NETWORK', 5 | } 6 | -------------------------------------------------------------------------------- /src/models/enums/RecipientKind.ts: -------------------------------------------------------------------------------- 1 | enum RecipientKind { 2 | CONTACT = 'CONTACT', 3 | WALLET = 'WALLET', 4 | ADDRESS = 'ADDRESS', 5 | } 6 | 7 | export default RecipientKind; 8 | -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/development/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/development/res/mipmap-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/development/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/FiraSansCondensed-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/FiraSansCondensed-Bold.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/FiraSansCondensed-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/FiraSansCondensed-Light.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/RobotoCondensed-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/RobotoCondensed-Italic.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/RobotoCondensed-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/RobotoCondensed-Light.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/RobotoCondensed-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/RobotoCondensed-Regular.ttf -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/120 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/AppIcon.appiconset/120 1.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/100.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/114.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/120.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/144.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/152.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/167.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/180.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/20.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/29.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/40.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/50.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/57.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/58.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/60.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/72.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/76.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/80.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/KpAppIcon.appiconset/87.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/29.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/57.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /.lintstagedrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'src/**/*.js': ['yarn lint'], 3 | 'src/**/*.ts': ['yarn lint'], 4 | 'src/**/*.tsx': ['yarn lint'], 5 | 'src/**/*.jsx': ['yarn lint'], 6 | }; 7 | -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-hdpi/ic_launcher_kp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/development/res/mipmap-hdpi/ic_launcher_kp.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-ldpi/ic_launcher_kp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/development/res/mipmap-ldpi/ic_launcher_kp.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/development/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/FiraSansCondensed-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/FiraSansCondensed-Italic.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/FiraSansCondensed-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/FiraSansCondensed-Medium.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/FiraSansCondensed-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/FiraSansCondensed-Regular.ttf -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #2F4F4F 4 | -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/114.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/keeperbg.imageset/keeperbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/keeperbg.imageset/keeperbg.png -------------------------------------------------------------------------------- /src/assets/images/dot-green.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/dot-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/store/sagaActions/advisor.ts: -------------------------------------------------------------------------------- 1 | export const GET_ADVISORS = 'GET_ADVISORS'; 2 | 3 | export const getAdvisors = (callback = null) => ({ 4 | type: GET_ADVISORS, 5 | callback, 6 | }); 7 | -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/development/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxhdpi/ic_launcher_kp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/development/res/mipmap-xxhdpi/ic_launcher_kp.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_launcher_kp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/development/res/mipmap-xxxhdpi/ic_launcher_kp.png -------------------------------------------------------------------------------- /android/app/src/development/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #0a2e59 4 | -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/FiraSansCondensed-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/FiraSansCondensed-BoldItalic.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/FiraSansCondensed-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/FiraSansCondensed-SemiBold.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/RobotoCondensed-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/RobotoCondensed-BoldItalic.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/RobotoCondensed-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/RobotoCondensed-LightItalic.ttf -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/120 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/120 1.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/120-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/dev-AppIcon.appiconset/120-1.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/keeperbg.imageset/keeperbg 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/keeperbg.imageset/keeperbg 1.png -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/keeperbg.imageset/keeperbg 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/ios/hexa_keeper/Images.xcassets/keeperbg.imageset/keeperbg 2.png -------------------------------------------------------------------------------- /src/assets/images/dot-cream.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/models/enums/ThemeMode.ts: -------------------------------------------------------------------------------- 1 | enum UiMode { 2 | DARK = 'DARK', 3 | LIGHT = 'LIGHT', 4 | PRIVATE = 'PRIVATE', 5 | PRIVATE_LIGHT = 'PRIVATE_LIGHT', 6 | } 7 | 8 | export default UiMode; 9 | -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/development/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/development/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/FiraSansCondensed-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/FiraSansCondensed-LightItalic.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/FiraSansCondensed-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/main/assets/fonts/FiraSansCondensed-MediumItalic.ttf -------------------------------------------------------------------------------- /flows/keySetting.yaml: -------------------------------------------------------------------------------- 1 | appId: ${APPID} 2 | --- 3 | - tapOn: 4 | id: 'btn_Manage\nKeys' 5 | - tapOn: 6 | id: 'btn_Mobile Key' 7 | index: 0 8 | - tapOn: 9 | id: 'btn_Settings' 10 | -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/development/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /ios/cloudbackup/cloudbackup.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | 5 | @class CloudBackup; 6 | @interface CloudBackup:NSObject 7 | @end 8 | 9 | -------------------------------------------------------------------------------- /__mocks__/react-native-responsive-fontsize.js: -------------------------------------------------------------------------------- 1 | export const RFValue = jest.fn((value) => value); 2 | 3 | const mock = jest.fn().mockImplementation(() => ({ 4 | RFValue, 5 | })); 6 | 7 | export default mock; 8 | -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/development/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KeeperCommunity/bitcoin-keeper/HEAD/android/app/src/development/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /src/index.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | import React from 'react'; 3 | import { SvgProps } from 'react-native-svg'; 4 | 5 | const content: React.FC; 6 | export default content; 7 | } 8 | -------------------------------------------------------------------------------- /src/services/qr/bc-ur-registry/types.ts: -------------------------------------------------------------------------------- 1 | export interface ICryptoKey { 2 | isECKey: () => boolean; 3 | getOutputDescriptorContent: () => string; 4 | } 5 | 6 | export type DataItemMap = Record; 7 | -------------------------------------------------------------------------------- /android/fastlane/Appfile: -------------------------------------------------------------------------------- 1 | json_key_file("key.json") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one 2 | package_name(ENV["PACKAGE_NAME"]) # e.g. com.krausefx.app 3 | -------------------------------------------------------------------------------- /src/assets/images/send-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/paper-plane-black.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/paper-plane-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/paper-plane-light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /android/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "fastlane", "~> 2.225.0" 4 | plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') 5 | eval_gemfile(plugins_path) if File.exist?(plugins_path) 6 | -------------------------------------------------------------------------------- /src/assets/images/send-light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /__mocks__/react-native-nfc-manager.js: -------------------------------------------------------------------------------- 1 | export default { 2 | isSupported: jest.fn(() => Promise.resolve(true)), 3 | start: jest.fn(), 4 | stop: jest.fn(), 5 | getTag: jest.fn(), 6 | setEventListener: jest.fn(), 7 | }; 8 | -------------------------------------------------------------------------------- /ios/hexa_keeper.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/assets/images/acquire-buy-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/checkbox_inactive.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /ios/whirlpool/hexa_keeper-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import 6 | #import 7 | 8 | -------------------------------------------------------------------------------- /src/assets/images/acquire-buy-arrow-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/checkbox_outline_inactive.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/share-arrow-green.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/share-arrow-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/models/enums/CurrencyKind.ts: -------------------------------------------------------------------------------- 1 | enum CurrencyKind { 2 | /** 3 | * Sound Money 4 | */ 5 | BITCOIN = 'BITCOIN', 6 | 7 | /** 8 | * 💩 9 | */ 10 | FIAT = 'FIAT', 11 | } 12 | 13 | export default CurrencyKind; 14 | -------------------------------------------------------------------------------- /__mocks__/react-native-tor.js: -------------------------------------------------------------------------------- 1 | const mock = jest.fn().mockImplementation(() => ({ 2 | get: jest.fn(), 3 | post: jest.fn(), 4 | stopIfRunning: jest.fn(), 5 | startIfNotStarted: jest.fn(async () => 1234), 6 | })); 7 | 8 | export default mock; 9 | -------------------------------------------------------------------------------- /src/assets/images/acquire-sell-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /android/app/src/development/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Keeper 3 | keeperdev 4 | /app/dev 5 | 6 | -------------------------------------------------------------------------------- /flows/subscription.yaml: -------------------------------------------------------------------------------- 1 | appId: ${APPID} 2 | --- 3 | - assertVisible: 4 | id: 'btn_choosePlan' 5 | - tapOn: 6 | id: 'btn_choosePlan' 7 | - tapOn: 8 | id: 'btn_Mobile Key' 9 | index: 0 10 | - tapOn: 11 | id: 'btn_Settings' 12 | -------------------------------------------------------------------------------- /src/assets/images/acquire-sell-arrow-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/models/types/TransactionFeeSnapshot.ts: -------------------------------------------------------------------------------- 1 | import { Satoshis } from './UnitAliases'; 2 | 3 | type TransactionFeeSnapshot = { 4 | amount: Satoshis; 5 | estimatedBlocksBeforeConfirmation: number; 6 | }; 7 | 8 | export default TransactionFeeSnapshot; 9 | -------------------------------------------------------------------------------- /src/models/enums/BufferEncoding.ts: -------------------------------------------------------------------------------- 1 | export type BufferEncoding = 2 | | 'ascii' 3 | | 'utf8' 4 | | 'utf-8' 5 | | 'utf16le' 6 | | 'ucs2' 7 | | 'ucs-2' 8 | | 'base64' 9 | | 'base64url' 10 | | 'latin1' 11 | | 'binary' 12 | | 'hex'; 13 | -------------------------------------------------------------------------------- /src/services/qr/bc-ur-registry/lib/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | encodeDataItem, 3 | decodeToDataItem, 4 | addSemanticDecode, 5 | addSemanticEncode, 6 | addReader, 7 | addWriter, 8 | } from './cbor-sync'; 9 | export { DataItem } from './DataItem'; 10 | -------------------------------------------------------------------------------- /ios/hexa_keeper/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char *argv[]) 6 | { 7 | @autoreleasepool { 8 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /flows/editwallet.yaml: -------------------------------------------------------------------------------- 1 | appId: ${APPID} 2 | --- 3 | - runFlow: login.yaml 4 | - tapOn: 5 | id: 'btn_LinkedWallet' 6 | - tapOn: 7 | id: 'btn_walletSettings' 8 | - tapOn: 9 | id: 'btn_Wallet_Details' 10 | - assertVisible: 'Edit wallet name and description' 11 | -------------------------------------------------------------------------------- /src/components/Scale.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Box } from 'native-base'; 3 | 4 | function Scale({ scale, children }: { scale: number; children }) { 5 | return {children}; 6 | } 7 | 8 | export default Scale; 9 | -------------------------------------------------------------------------------- /__mocks__/react-native-community-netinfo.js: -------------------------------------------------------------------------------- 1 | export default { 2 | addEventListener: jest.fn(() => ({ 3 | remove: jest.fn(), 4 | })), 5 | fetch: jest.fn(() => Promise.resolve({ isConnected: true })), 6 | addListener: jest.fn(), 7 | removeListeners: jest.fn(), 8 | }; 9 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/color.xml: -------------------------------------------------------------------------------- 1 | 2 | #D35400 3 | #F6F2ED 4 | #272421 5 | -------------------------------------------------------------------------------- /android/app/src/development/res/values/color.xml: -------------------------------------------------------------------------------- 1 | 2 | #D35400 3 | #F6F2ED 4 | #272421 5 | -------------------------------------------------------------------------------- /src/assets/images/check-dark-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /__mocks__/react-native-localize.js: -------------------------------------------------------------------------------- 1 | const getLocales = () => [ 2 | { 3 | countryCode: 'US', 4 | languageTag: 'en-US', 5 | languageCode: 'en', 6 | isRTL: false, 7 | }, 8 | ]; 9 | const getCurrencies = () => ['USD']; 10 | 11 | export { getLocales, getCurrencies }; 12 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | # fastlane specific 2 | fastlane/report.xml 3 | 4 | # deliver temporary files 5 | fastlane/Preview.html 6 | 7 | # snapshot generated screenshots 8 | fastlane/screenshots 9 | 10 | # scan temporary files 11 | fastlane/test_output 12 | 13 | # Fastlane builds 14 | builds/* -------------------------------------------------------------------------------- /src/hooks/useExchangeRates.tsx: -------------------------------------------------------------------------------- 1 | import { useAppSelector } from 'src/store/hooks'; 2 | 3 | const useExchangeRates = () => { 4 | const exchangeRates = useAppSelector((state) => state.network.exchangeRates); 5 | return exchangeRates?.exchangeRates; 6 | }; 7 | 8 | export default useExchangeRates; 9 | -------------------------------------------------------------------------------- /src/screens/Recovery/constants.ts: -------------------------------------------------------------------------------- 1 | export type seedWordItem = { 2 | id: number; 3 | name: string; 4 | invalid: boolean; 5 | }; 6 | 7 | export const SEED_WORDS_12 = '12 Seed Words'; 8 | export const SEED_WORDS_18 = '18 Seed Words'; 9 | export const SEED_WORDS_24 = '24 Seed Words'; 10 | -------------------------------------------------------------------------------- /src/store/utilities.ts: -------------------------------------------------------------------------------- 1 | import { take, fork } from 'redux-saga/effects'; 2 | 3 | export const createWatcher = (worker: any, type: any) => 4 | function* (): any { 5 | while (true) { 6 | const action = yield take(type); 7 | yield fork(worker, action); 8 | } 9 | }; 10 | -------------------------------------------------------------------------------- /src/assets/images/profile-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/providers/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { NativeBaseProvider } from 'native-base'; 3 | 4 | import { customTheme } from '../navigation/themes'; 5 | 6 | function Provider() { 7 | return ; 8 | } 9 | 10 | export default Provider; 11 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | # fastlane specific 2 | fastlane/report.xml 3 | 4 | # deliver temporary files 5 | fastlane/Preview.html 6 | 7 | # snapshot generated screenshots 8 | fastlane/screenshots 9 | 10 | # scan temporary files 11 | fastlane/test_output 12 | 13 | # fastlane builds 14 | builds/* 15 | *.xcarchive -------------------------------------------------------------------------------- /sonar-project.properties: -------------------------------------------------------------------------------- 1 | sonar.projectKey=bithyve_bitcoin-keeper 2 | sonar.organization=bithyve 3 | 4 | sonar.coverage.exclusions=**/android/**/*.*,**/ios/**/*.* 5 | sonar.exclusions=**/android/**/*.*,**/ios/**/*.* 6 | 7 | sonar.javascript.file.suffixes=.js,.jsx 8 | sonar.typescript.file.suffixes=.ts,.tsx -------------------------------------------------------------------------------- /src/storage/realm/utils.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Converts Realm Object(immutable, outside write transaction) into a javascript object(mutable everywhere) 3 | * @param {any|Realm.Object} object 4 | */ 5 | export const getJSONFromRealmObject = (object: any | Realm.Object) => 6 | (object as Realm.Object).toJSON(); 7 | -------------------------------------------------------------------------------- /src/assets/images/add_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/models/enums/SubscriptionTier.ts: -------------------------------------------------------------------------------- 1 | export enum SubscriptionTier { 2 | L1 = 'Pleb', 3 | L2 = 'Hodler', 4 | L3 = 'Diamond Hands', 5 | L4 = 'Keeper Private', 6 | } 7 | 8 | export enum AppSubscriptionLevel { 9 | L1 = 1, // free tier (pleb) 10 | L2 = 2, 11 | L3 = 3, 12 | L4 = 4, 13 | } 14 | -------------------------------------------------------------------------------- /src/store/sagaActions/notifications.ts: -------------------------------------------------------------------------------- 1 | // types and action creators: dispatched by components and sagas 2 | export const UPDATE_FCM_TOKENS = 'UPDATE_FCM_TOKENS'; 3 | 4 | export const updateFCMTokens = (FCMs: string[]) => ({ 5 | type: UPDATE_FCM_TOKENS, 6 | payload: { 7 | FCMs, 8 | }, 9 | }); 10 | -------------------------------------------------------------------------------- /src/utils/OpenLink.ts: -------------------------------------------------------------------------------- 1 | import { Linking } from 'react-native'; 2 | import { captureError } from 'src/services/sentry'; 3 | 4 | export default async function openLink(urlPath: string) { 5 | try { 6 | await Linking.openURL(urlPath); 7 | } catch (error) { 8 | captureError(error); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/store/hooks/index.ts: -------------------------------------------------------------------------------- 1 | import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'; 2 | import type { RootState, AppDispatch } from '../store'; 3 | 4 | export const useAppDispatch = () => useDispatch(); 5 | export const useAppSelector: TypedUseSelectorHook = useSelector; 6 | -------------------------------------------------------------------------------- /ios/hexa_keeper.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/components/SVGComponents/InheritanceToolsIllustartion.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import ThemedSvg from '../ThemedSvg.tsx/ThemedSvg'; 3 | 4 | function InheritanceToolsIllustartion() { 5 | return ; 6 | } 7 | export default InheritanceToolsIllustartion; 8 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /ios/hexa_keeper.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/images/plus-green-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /ios/hexa_keeper.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/assets/images/signer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /__mocks__/react-native-responsive-screen.js: -------------------------------------------------------------------------------- 1 | export const widthPercentageToDP = jest.fn((width) => width); 2 | export const heightPercentageToDP = jest.fn((height) => height); 3 | 4 | const mock = jest.fn().mockImplementation(() => ({ 5 | widthPercentageToDP, 6 | heightPercentageToDP, 7 | })); 8 | 9 | export default mock; 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/images/tick_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/store/hooks/state-selectors/useCurrencyCode.ts: -------------------------------------------------------------------------------- 1 | import { CurrencyCodes } from 'src/services/wallets/interfaces'; 2 | import { useAppSelector } from '..'; 3 | 4 | export default function useCurrencyCode(defaultCode = CurrencyCodes.USD): string { 5 | return useAppSelector((state) => state.settings.currencyCode || defaultCode); 6 | } 7 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "always", 3 | "bracketSpacing": true, 4 | "jsxBracketSameLine": false, 5 | "jsxSingleQuote": false, 6 | "quoteProps": "as-needed", 7 | "singleQuote": true, 8 | "semi": true, 9 | "printWidth": 100, 10 | "useTabs": false, 11 | "tabWidth": 2, 12 | "trailingComma": "es5" 13 | } 14 | -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/images/checkbox_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/development/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /ios/hexa_keeper.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/assets/images/bin-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/bin-light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/storage/realm/schema/backup.ts: -------------------------------------------------------------------------------- 1 | import { ObjectSchema } from 'realm'; 2 | import { RealmSchema } from '../enum'; 3 | 4 | export const BackupSchema: ObjectSchema = { 5 | name: RealmSchema.Backup, 6 | embedded: true, 7 | properties: { 8 | method: 'string?', 9 | password: 'string?', 10 | hint: 'string?', 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /android/app/src/development/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /ios/keepScreenAwake/keepScreenAwake.h: -------------------------------------------------------------------------------- 1 | // 2 | // keepScreenAwake.h 3 | // hexa_keeper 4 | // 5 | // Created by Shashank Shinde on 05/05/23. 6 | // 7 | 8 | #import 9 | #import 10 | 11 | 12 | @class KeepScreenAwake; 13 | @interface KeepScreenAwake:NSObject 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /src/assets/images/download-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /__mocks__/react-native-firebase-messaging.js: -------------------------------------------------------------------------------- 1 | export default { 2 | hasPermission: jest.fn(() => Promise.resolve(true)), 3 | requestPermission: jest.fn(() => Promise.resolve(true)), 4 | getToken: jest.fn(() => Promise.resolve('mock-fcm-token')), 5 | onMessage: jest.fn(() => jest.fn()), // unsubscribe 6 | setBackgroundMessageHandler: jest.fn(), 7 | }; 8 | -------------------------------------------------------------------------------- /src/assets/images/checkbox_outline_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/nativemodules/KeepScreenAwake.ts: -------------------------------------------------------------------------------- 1 | import { NativeModules } from 'react-native'; 2 | 3 | const { KeepScreenAwake } = NativeModules; 4 | 5 | export default class KeepAwake { 6 | static activate = async (): Promise => KeepScreenAwake.keepAwake(true); 7 | 8 | static deactivate = async (): Promise => KeepScreenAwake.keepAwake(false); 9 | } 10 | -------------------------------------------------------------------------------- /appcenter-pre-build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Creates an .env from ENV variables for use with react-native-config 3 | ENV_WHITELIST=${ENV_WHITELIST:-"^RN_"} 4 | printf "Creating an .env file with the following whitelist:\n" 5 | printf "%s\n" $ENV_WHITELIST 6 | set | egrep -e $ENV_WHITELIST | sed 's/^RN_//g' > .env 7 | printf "\n.env created with contents:\n\n" 8 | cat .env -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Keeper 3 | keeper 4 | Backup with Keeper 5 | aiddescription 6 | /app/prod 7 | 8 | -------------------------------------------------------------------------------- /src/assets/images/remove-green-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/images/remove-white-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } 2 | plugins { id("com.facebook.react.settings") } 3 | extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand() } 4 | rootProject.name = 'hexa_keeper' 5 | include ':app' 6 | includeBuild('../node_modules/@react-native/gradle-plugin') -------------------------------------------------------------------------------- /src/assets/images/deleteNode.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/assets/images/icon_check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /ios/fastlane/Appfile: -------------------------------------------------------------------------------- 1 | app_identifier(ENV["BUNDLE_IDENTIFIER"]) # The bundle identifier of your app 2 | apple_id(ENV["FASTLANE_USER"]) # Your Apple Developer Portal username 3 | 4 | itc_team_id("119521567") # App Store Connect Team ID 5 | team_id("Y5TCB759QL") # Developer Portal Team ID 6 | 7 | # For more information about the Appfile, see: 8 | # https://docs.fastlane.tools/advanced/#appfile 9 | -------------------------------------------------------------------------------- /src/assets/images/deleteNodeWhite.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/assets/images/cloud.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/hooks/useOneDayInsight.tsx: -------------------------------------------------------------------------------- 1 | import { useAppSelector } from 'src/store/hooks'; 2 | 3 | 4 | export const oneDayInsightSelector = (state) => state.network.oneDayInsight || []; 5 | 6 | const useOneDayInsight = () => { 7 | const oneDayInsight = useAppSelector((state) => state.network.oneDayInsight); 8 | return oneDayInsight || []; 9 | }; 10 | 11 | export default useOneDayInsight; 12 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/task--internal-.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Task (Internal) 3 | about: 'Small chunk of the feature ' 4 | title: '' 5 | labels: "Status: to-do \U0001F4CB, Type: dev\U0001F9D1‍\U0001F4BB" 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Task Description** 11 | Description of the task 12 | 13 | **ETA** 14 | Estimated time 15 | 16 | **Dependencies** 17 | Any dependencies for the task 18 | -------------------------------------------------------------------------------- /src/assets/images/cloud-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /ios/hexa_keeper/hexa_keeperDebug.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.nfc.readersession.formats 6 | 7 | NDEF 8 | TAG 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/images/icon_arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/DotView.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Box } from 'native-base'; 3 | 4 | export interface Props { 5 | height?: number; 6 | width?: number; 7 | color?: string; 8 | } 9 | function DotView(props: Props) { 10 | return ( 11 | 12 | ); 13 | } 14 | export default DotView; 15 | -------------------------------------------------------------------------------- /src/storage/realm/schema/versionHistory.ts: -------------------------------------------------------------------------------- 1 | import { ObjectSchema } from 'realm'; 2 | import { RealmSchema } from '../enum'; 3 | 4 | export const VersionHistorySchema: ObjectSchema = { 5 | name: RealmSchema.VersionHistory, 6 | properties: { 7 | version: 'string', 8 | releaseNote: 'string?', 9 | date: 'string', 10 | title: 'string', 11 | }, 12 | primaryKey: 'version', 13 | }; 14 | -------------------------------------------------------------------------------- /src/assets/images/files.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/tapsigner_light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/checkmark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/files-disable.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/user-cosigner.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/images/icon_arrow_black.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/storage/realm/schema/backupHistory.ts: -------------------------------------------------------------------------------- 1 | import { ObjectSchema } from 'realm'; 2 | import { RealmSchema } from '../enum'; 3 | 4 | export const BackupHistorySchema: ObjectSchema = { 5 | name: RealmSchema.BackupHistory, 6 | properties: { 7 | title: 'string', 8 | date: 'int', 9 | confirmed: 'bool', 10 | subtitle: { 11 | optional: true, 12 | type: 'string', 13 | }, 14 | }, 15 | }; 16 | -------------------------------------------------------------------------------- /__mocks__/react-native-fs.js: -------------------------------------------------------------------------------- 1 | export default { 2 | readFile: jest.fn(() => Promise.resolve('mocked content')), 3 | writeFile: jest.fn(() => Promise.resolve()), 4 | unlink: jest.fn(() => Promise.resolve()), 5 | exists: jest.fn(() => Promise.resolve(true)), 6 | mkdir: jest.fn(() => Promise.resolve()), 7 | DocumentDirectoryPath: '/mocked/document/dir', 8 | ExternalDirectoryPath: '/mocked/external/dir', 9 | }; 10 | -------------------------------------------------------------------------------- /src/store/sagaActions/preferences.ts: -------------------------------------------------------------------------------- 1 | export const CURRENCY_CODE = 'CURRENCY_CODE'; 2 | export const FCM_TOKEN_VALUE = 'FCM_TOKEN_VALUE'; 3 | 4 | export const setCurrencyCode = (data) => ({ 5 | type: CURRENCY_CODE, 6 | payload: { 7 | currencyCode: data, 8 | }, 9 | }); 10 | 11 | export const setFCMToken = (data) => ({ 12 | type: FCM_TOKEN_VALUE, 13 | payload: { 14 | fcmTokenValue: data, 15 | }, 16 | }); 17 | -------------------------------------------------------------------------------- /src/assets/images/add-contact-light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/images/file.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/constants/Fonts.js: -------------------------------------------------------------------------------- 1 | export default { 2 | InterLight: 'Inter-Light', 3 | InterLightItalic: 'Inter-LightItalic', 4 | InterRegular: 'Inter-Regular', 5 | InterItalic: 'Inter-Italic', 6 | LoraMedium: 'Lora-Medium', 7 | LoraMediumItalic: 'Lora-MediumItalic', 8 | LoraSemiBold: 'Lora-SemiBold', 9 | LoraSemiBoldItalic: 'Lora-SemiBoldItalic', 10 | InterBold: 'Inter-Bold', 11 | InterBoldItalic: 'Inter-BoldItalic', 12 | }; 13 | -------------------------------------------------------------------------------- /setup.sh: -------------------------------------------------------------------------------- 1 | # enabling node core modules 2 | # adding node core modules support in react-native 3 | rn-nodeify --install buffer,events,process,stream,inherits,path,assert,crypto --hack --yarn 4 | 5 | # ios dependency installation 6 | cd ios && RCT_NEW_ARCH_ENABLED=0 pod install 7 | 8 | # android SDK location configuration 9 | cd ../android && touch local.properties && echo "sdk.dir = /Users/$(whoami)/Library/Android/sdk" >local.properties 10 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/images/white_icon_check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/constants/responsive.tsx: -------------------------------------------------------------------------------- 1 | import { Dimensions } from 'react-native'; 2 | 3 | export const windowHeight: number = Dimensions.get('screen').height; 4 | export const windowWidth: number = Dimensions.get('window').width; 5 | 6 | export const getTransactionPadding = () => windowHeight * 0.047; 7 | 8 | export const hp = (height: number) => (height / 812) * windowHeight; 9 | 10 | export const wp = (width: number) => (width / 375) * windowWidth; 11 | -------------------------------------------------------------------------------- /__mocks__/redux-persist/lib/storage.js: -------------------------------------------------------------------------------- 1 | const createMockStorage = () => { 2 | let store = {}; 3 | return { 4 | setItem: async (key, value) => { 5 | store[key] = value; 6 | }, 7 | getItem: async (key) => store[key] || null, 8 | removeItem: async (key) => { 9 | delete store[key]; 10 | }, 11 | clear: async () => { 12 | store = {}; 13 | }, 14 | }; 15 | }; 16 | 17 | export default createMockStorage(); 18 | -------------------------------------------------------------------------------- /src/assets/images/specter_icon_light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/models/enums/BitcoinUnit.ts: -------------------------------------------------------------------------------- 1 | enum BitcoinUnit { 2 | SATS = 'SATS', 3 | BTC = 'BTC', 4 | TSATS = 'TSATS', 5 | } 6 | 7 | export function displayNameForBitcoinUnit(unit: BitcoinUnit): string { 8 | switch (unit) { 9 | case BitcoinUnit.SATS: 10 | return 'sats'; 11 | case BitcoinUnit.BTC: 12 | return 'BTC'; 13 | case BitcoinUnit.TSATS: 14 | return 't-sats'; 15 | } 16 | } 17 | 18 | export default BitcoinUnit; 19 | -------------------------------------------------------------------------------- /src/assets/images/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /android/app/src/development/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/images/nav-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/time.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version 3 | ruby '>= 2.6.10' 4 | # Exclude problematic versions of cocoapods and activesupport that causes build failures. 5 | gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' 6 | gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' 7 | gem "fastlane", "~> 2.225.0" 8 | gem 'xcodeproj', '< 1.26.0' 9 | gem 'concurrent-ruby', '< 1.3.4' 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/xml/apduservice.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/assets/images/chip.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/nav-left-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/nav-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/storage/realm/schema/cloudBackupHistory.ts: -------------------------------------------------------------------------------- 1 | import { ObjectSchema } from 'realm'; 2 | import { RealmSchema } from '../enum'; 3 | 4 | export const CloudBackupHistorySchema: ObjectSchema = { 5 | name: RealmSchema.CloudBackupHistory, 6 | properties: { 7 | title: 'string', 8 | date: { type: 'int', default: Date.now() }, 9 | confirmed: 'bool', 10 | subtitle: { 11 | optional: true, 12 | type: 'string', 13 | }, 14 | }, 15 | }; 16 | -------------------------------------------------------------------------------- /src/assets/images/nav-right-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/KruxIconDark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/flag-france.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/services/qr/bc-ur-registry/patchCBOR.ts: -------------------------------------------------------------------------------- 1 | import { patchTags } from './utils'; 2 | import { RegistryTypes } from './RegistryType'; 3 | import { ScriptExpressions } from './ScriptExpression'; 4 | 5 | const registryTags = Object.values(RegistryTypes) 6 | .filter((r) => !!r.getTag()) 7 | .map((r) => r.getTag()); 8 | const scriptExpressionTags = Object.values(ScriptExpressions).map((se) => se.getTag()); 9 | patchTags(registryTags.concat(scriptExpressionTags) as number[]); 10 | -------------------------------------------------------------------------------- /src/store/sagaActions/upgrade.ts: -------------------------------------------------------------------------------- 1 | export const RESET_REDUX_STORE = 'RESET_REDUX_STORE'; 2 | export const UPDATE_VERSION_HISTORY = 'UPDATE_VERSION_HISTORY'; 3 | export const MIGRATE_LABELS_329 = 'MIGRATE_LABELS_329'; 4 | 5 | export const updateVersionHistory = (previousVersion, newVersion) => ({ 6 | type: UPDATE_VERSION_HISTORY, 7 | payload: { previousVersion, newVersion }, 8 | }); 9 | 10 | export const migrateLabelsToBip329 = () => ({ 11 | type: MIGRATE_LABELS_329, 12 | }); 13 | -------------------------------------------------------------------------------- /flows/newapp.yaml: -------------------------------------------------------------------------------- 1 | appId: ${APPID} 2 | --- 3 | - runFlow: setpin.yaml 4 | - extendedWaitUntil: 5 | visible: 'Welcome' 6 | timeout: 5000 7 | - assertVisible: 8 | id: 'view_startNewTile' 9 | - tapOn: 10 | id: 'view_startNewTile' 11 | - extendedWaitUntil: 12 | visible: 'Next' 13 | timeout: 30000 14 | - tapOn: 'Next' 15 | - waitForAnimationToEnd: 16 | timeout: 2000 17 | - extendedWaitUntil: 18 | notVisible: 19 | id: 'toast_message' 20 | timeout: 20000 21 | -------------------------------------------------------------------------------- /src/assets/images/mobile_key.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/utils/releaseTopic.ts: -------------------------------------------------------------------------------- 1 | import config from 'src/utils/service-utilities/config'; 2 | 3 | export const getReleaseTopic = (appVersion?) => { 4 | let releaseTopic; 5 | switch (config.ENVIRONMENT) { 6 | case 'PRODUCTION': 7 | releaseTopic = appVersion ? `release${appVersion}` : 'release'; 8 | break; 9 | case 'DEVELOPMENT': 10 | releaseTopic = appVersion ? `${'release' + '_dev'}${appVersion}` : 'release' + '_dev'; 11 | } 12 | return releaseTopic; 13 | }; 14 | -------------------------------------------------------------------------------- /src/assets/images/mobile_key_light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/services/qr/bc-ur-registry/lib/DataItem.ts: -------------------------------------------------------------------------------- 1 | export class DataItem { 2 | private tag?: number; 3 | 4 | private data: any; 5 | 6 | constructor(data: any, tag?: number) { 7 | this.data = data; 8 | this.tag = tag; 9 | } 10 | 11 | public setTag = (tag?: number) => { 12 | this.tag = tag; 13 | }; 14 | 15 | public clearTag = () => { 16 | this.tag = undefined; 17 | }; 18 | 19 | public getTag = () => this.tag; 20 | 21 | public getData = () => this.data; 22 | } 23 | -------------------------------------------------------------------------------- /src/store/sagaActions/account.ts: -------------------------------------------------------------------------------- 1 | export const LOAD_CONCIERGE_USER_ON_LOGIN = 'LOAD_CONCIERGE_USER_ON_LOGIN'; 2 | export const SAVE_BACKUP_METHOD_BY_APP_ID = 'SAVE_BACKUP_METHOD_BY_APP_ID'; 3 | 4 | export const loadConciergeUserOnLogin = ({ appId, conciergeUser = null }) => ({ 5 | type: LOAD_CONCIERGE_USER_ON_LOGIN, 6 | payload: { 7 | appId, 8 | conciergeUser, 9 | }, 10 | }); 11 | export const saveBackupMethodByAppId = () => ({ 12 | type: SAVE_BACKUP_METHOD_BY_APP_ID, 13 | }); 14 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature Request 3 | about: Feature of the app 4 | title: '' 5 | labels: "Type: feature \U0001F39B️" 6 | assignees: '' 7 | 8 | --- 9 | 10 | Feature Description 11 | A clear and concise description of the feature 12 | 13 | **Pre-requisites/ dependencies 14 | -Designs 15 | -Research 16 | -Discussion with a Senior 17 | 18 | **Task Break Down 19 | -TASK 1 20 | -TASK 2 21 | 22 | **Test Cases 23 | 24 | **Design 25 | 26 | **Flow 27 | 28 | **ERD 29 | -------------------------------------------------------------------------------- /src/assets/images/confirm-square.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /flows/walletSetting.yaml: -------------------------------------------------------------------------------- 1 | appId: ${APPID} 2 | --- 3 | - tapOn: 4 | id: 'view_wallet_0' 5 | index: 0 6 | - swipe: 7 | from: 8 | id: list_transactions 9 | direction: DOWN 10 | duration: 2000 11 | - waitForAnimationToEnd: 12 | timeout: 5000 13 | - repeat: 14 | while: 15 | visible: 16 | id: 'icon_unconfirmed_0' 17 | commands: 18 | - runFlow: refreshwallet.yaml 19 | - assertVisible: 20 | id: 'btn_Settings' 21 | - tapOn: 22 | id: 'btn_Settings' 23 | -------------------------------------------------------------------------------- /src/assets/images/confirm-square-green.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/images/Telegram.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/copy_new.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/components/ThemedColor/ThemedColor.tsx: -------------------------------------------------------------------------------- 1 | import { useSelector } from 'react-redux'; 2 | import themedColors from './ThemedColors'; 3 | 4 | const ThemedColor = ({ name }: { name: string }) => { 5 | const themeMode = useSelector((state: any) => state?.settings?.themeMode); 6 | const fallbackMode = 'LIGHT'; 7 | const color = themedColors[name]?.[themeMode] || themedColors[name]?.[fallbackMode]; 8 | 9 | if (!color) return null; 10 | 11 | return color; 12 | }; 13 | 14 | export default ThemedColor; 15 | -------------------------------------------------------------------------------- /src/navigation/contants.ts: -------------------------------------------------------------------------------- 1 | export const MANAGEWALLETS = 'ManageWallets'; 2 | export const VAULTSETTINGS = 'VaultSettings'; 3 | export const WALLETSETTINGS = 'WalletSettings'; 4 | export const SETUPCOLLABORATIVEWALLET = 'SetupCollaborativeWallet'; 5 | export const SIGNTRANSACTION = 'SignTransactionScreen'; 6 | export const PRIVACYANDDISPLAY = 'PrivacyAndDisplay'; 7 | export const VAULTDETAILS = 'VaultDetails'; 8 | export const ADDRESERVEKEY = 'AddReserveKey'; 9 | export const ADDEMERGENCYKEY = 'AddEmergencyKey'; 10 | -------------------------------------------------------------------------------- /src/assets/images/Telegram-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/back-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/images/back_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/images/dark-mode-icom.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /ios/.xcode.env: -------------------------------------------------------------------------------- 1 | # This `.xcode.env` file is versioned and is used to source the environment 2 | # used when running script phases inside Xcode. 3 | # To customize your local environment, you can create an `.xcode.env.local` 4 | # file that is not versioned. 5 | # NODE_BINARY variable contains the PATH to the node executable. 6 | # 7 | # Customize the NODE_BINARY variable here. 8 | # For example, to use nvm with brew, add the following line 9 | # . "$(brew --prefix nvm)/nvm.sh" --no-use 10 | export NODE_BINARY=$(command -v node) -------------------------------------------------------------------------------- /src/assets/images/jade-green-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/images/jade-green-light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/privateImages/acquire-buy-gold-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/models/interfaces/HeathCheckTypes.ts: -------------------------------------------------------------------------------- 1 | export enum hcStatusType { 2 | HEALTH_CHECK_SUCCESSFULL = 'HEALTH_CHECK_SUCCESSFULL', 3 | HEALTH_CHECK_FAILED = 'HEALTH_CHECK_FAILED', 4 | HEALTH_CHECK_SKIPPED = 'HEALTH_CHECK_SKIPPED', 5 | HEALTH_CHECK_MANAUAL = 'HEALTH_CHECK_MANAUAL', 6 | HEALTH_CHECK_SIGNING = 'HEALTH_CHECK_SIGNING', 7 | HEALTH_CHECK_SD_ADDITION = 'HEALTH_CHECK_ADDITION', 8 | HEALTH_CHECK_REGISTRATION = 'HEALTH_CHECK_REGISTRATION', 9 | HEALTH_CHECK_VERIFICATION = 'HEALTH_CHECK_VERIFICATION', 10 | } 11 | -------------------------------------------------------------------------------- /src/assets/images/link_telegram.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/vault-grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/vault_green.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/KruxIcon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/images/link_telegram_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/swap-price-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/privateImages/acquire-sell-gold-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/store/reducers/notifications.ts: -------------------------------------------------------------------------------- 1 | import { createSlice } from '@reduxjs/toolkit'; 2 | 3 | const initialState: { 4 | fcmToken: string; 5 | } = { 6 | fcmToken: '', 7 | }; 8 | 9 | const notificationsSlice = createSlice({ 10 | name: 'notifications', 11 | initialState, 12 | reducers: { 13 | setFcmToken: (state, action) => { 14 | state.fcmToken = action.payload; 15 | }, 16 | }, 17 | }); 18 | 19 | export const { setFcmToken } = notificationsSlice.actions; 20 | 21 | export default notificationsSlice.reducer; 22 | -------------------------------------------------------------------------------- /android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | -dontwarn com.polidea.reactnativeble.** 12 | -------------------------------------------------------------------------------- /ios/hexa_keeper/Images.xcassets/keeperbg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "keeperbg.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "keeperbg 1.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "keeperbg 2.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/assets/images/swap-price-arrow-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/digonal-arrow-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/components/ThemedSvg.tsx/ThemedSvg.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import { useSelector } from 'react-redux'; 4 | import themeIcons from './ThemedIcons'; 5 | 6 | const ThemedSvg = ({ name, ...props }) => { 7 | const themeMode = useSelector((state: any) => state?.settings?.themeMode); 8 | 9 | const IconComponent = themeIcons[name]?.[themeMode] || themeIcons[name]?.light; 10 | 11 | if (!IconComponent) { 12 | return null; 13 | } 14 | 15 | return ; 16 | }; 17 | 18 | export default ThemedSvg; 19 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.codeActionsOnSave": { 3 | "source.fixAll.eslint": "explicit" 4 | }, 5 | "editor.defaultFormatter": "esbenp.prettier-vscode", 6 | "editor.formatOnSave": true, 7 | "prettier.jsxSingleQuote": true, 8 | "prettier.singleQuote": true, 9 | "prettier.bracketSameLine": true, 10 | "prettier.arrowParens": "avoid", 11 | "javascript.updateImportsOnFileMove.enabled": "always", 12 | "typescript.updateImportsOnFileMove.enabled": "always", 13 | "java.configuration.updateBuildConfiguration": "disabled" 14 | } 15 | -------------------------------------------------------------------------------- /flows/buyBTC.yaml: -------------------------------------------------------------------------------- 1 | appId: ${APPID} 2 | --- 3 | - tapOn: 4 | id: 'view_wallet_0' 5 | index: 0 6 | - swipe: 7 | from: 8 | id: list_transactions 9 | direction: DOWN 10 | duration: 2000 11 | - waitForAnimationToEnd: 12 | timeout: 5000 13 | - repeat: 14 | while: 15 | visible: 16 | id: 'icon_unconfirmed_0' 17 | commands: 18 | - runFlow: refreshwallet.yaml 19 | - assertVisible: 20 | id: 'btn_Buy Bitcoin' 21 | - tapOn: 22 | id: 'btn_Buy Bitcoin' 23 | - tapOn: 24 | id: 'btn_primaryText' 25 | 26 | -------------------------------------------------------------------------------- /flows/copywalletaddress.yaml: -------------------------------------------------------------------------------- 1 | appId: ${APPID} 2 | --- 3 | # - runFlow: login.yaml 4 | - tapOn: 5 | id: 'view_wallet_0' 6 | index: 0 7 | - tapOn: 8 | id: 'btn_Receive' 9 | - tapOn: 10 | id: 'btn_copy_address' 11 | - repeat: 12 | while: 13 | visible: 'Address Copied Successfully' 14 | commands: 15 | - tapOn: 16 | id: 'btn_copy_address' 17 | - tapOn: 18 | id: 'btn_back' 19 | - waitForAnimationToEnd: 20 | timeout: 1000 21 | - tapOn: 22 | id: 'btn_back' 23 | - waitForAnimationToEnd: 24 | timeout: 1000 25 | -------------------------------------------------------------------------------- /src/assets/images/Twitter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /ios/ci_scripts/ci_post_clone.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export HOMEBREW_NO_INSTALL_CLEANUP=TRUE 4 | brew install cocoapods 5 | # have to add node yourself 6 | brew install node@16 7 | # link it to the path 8 | brew link node@16 9 | 10 | brew install yarn 11 | 12 | # Install dependencies you manage with CocoaPods. 13 | yarn 14 | pod install 15 | # the sed command from RN cant find the file... so we have to run it ourselves 16 | sed -i -e $'s/ && (__IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_10_0)//' /Volumes/workspace/repository/ios/Pods/RCT-Folly/folly/portability/Time.h -------------------------------------------------------------------------------- /src/assets/images/Twitter-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/hooks/useArchivedVaults.ts: -------------------------------------------------------------------------------- 1 | import { RealmSchema } from 'src/storage/realm/enum'; 2 | import { Vault } from 'src/services/wallets/interfaces/vault'; 3 | import { getJSONFromRealmObject } from 'src/storage/realm/utils'; 4 | import { useQuery } from '@realm/react'; 5 | 6 | const useArchivedVault = () => { 7 | const archivedVaults: Vault[] = useQuery(RealmSchema.Vault, (collection) => 8 | collection.filtered('archived == true') 9 | ).map(getJSONFromRealmObject); 10 | 11 | return { archivedVaults }; 12 | }; 13 | 14 | export default useArchivedVault; 15 | -------------------------------------------------------------------------------- /src/assets/images/rightarrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /flows/receive.yaml: -------------------------------------------------------------------------------- 1 | appId: ${APPID} 2 | --- 3 | - tapOn: 4 | id: 'view_wallet_0' 5 | index: 0 6 | - swipe: 7 | from: 8 | id: list_transactions 9 | direction: DOWN 10 | duration: 2000 11 | - waitForAnimationToEnd: 12 | timeout: 5000 13 | - repeat: 14 | while: 15 | visible: 16 | id: 'icon_unconfirmed_0' 17 | commands: 18 | - runFlow: refreshwallet.yaml 19 | - assertVisible: 20 | id: 'btn_Receive' 21 | - tapOn: 22 | id: 'btn_Receive' 23 | - tapOn: 24 | id: 'btn_back' 25 | - tapOn: 26 | id: 'btn_back' 27 | -------------------------------------------------------------------------------- /src/assets/images/btc-down-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /flows/receivesats.yaml: -------------------------------------------------------------------------------- 1 | appId: ${APPID} 2 | --- 3 | # - runFlow: login.yaml 4 | - tapOn: 5 | id: 'view_wallet_0' 6 | index: 0 7 | - tapOn: 8 | id: btn_Settings 9 | - assertVisible: 10 | id: 'view_Receive_Test_Sats' 11 | - tapOn: 12 | id: 'view_Receive_Test_Sats' 13 | - extendedWaitUntil: 14 | visible: '5000 Sats Received' 15 | timeout: 30000 16 | - repeat: 17 | while: 18 | notVisible: 19 | id: 'btn_transaction_0' 20 | commands: 21 | - swipe: 22 | from: 23 | id: list_transactions 24 | direction: DOWN 25 | -------------------------------------------------------------------------------- /src/assets/images/image.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/images/tapsigner_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/images/vault-icon-small.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /flows/versionhistory.yaml: -------------------------------------------------------------------------------- 1 | appId: ${APPID} 2 | --- 3 | - tapOn: 4 | id: 'view_Version_History' 5 | - waitForAnimationToEnd: 6 | timeout: 1000 7 | - assertVisible: 8 | id: 'btn_back' 9 | - assertTrue: ${output.text_header_title = "Version History"} 10 | - assertTrue: ${output.text_header_subtitle = "You can verify the history of your app upgrades here"} 11 | - assertVisible: 12 | id: 'view_VersionHistoryList' 13 | - assertVisible: 'Initially installed' 14 | - assertVisible: 15 | id: 'text_appid' 16 | - tapOn: 17 | id: 'btn_back' 18 | - waitForAnimationToEnd: 19 | timeout: 1000 20 | -------------------------------------------------------------------------------- /src/assets/images/portalIcon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/btc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/privateImages/plus-gold-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/hooks/useNfcModal.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | const useNfcModal = () => { 4 | const [nfcVisible, setNfcVisible] = useState(false); 5 | 6 | const withNfcModal = async (callback) => { 7 | try { 8 | setNfcVisible(true); 9 | const resp = await callback(); 10 | setNfcVisible(false); 11 | return resp; 12 | } catch (err) { 13 | closeNfc(); 14 | throw err; 15 | } 16 | }; 17 | 18 | const closeNfc = () => setNfcVisible(false); 19 | return { nfcVisible, withNfcModal, closeNfc }; 20 | }; 21 | 22 | export default useNfcModal; 23 | -------------------------------------------------------------------------------- /src/nativemodules/interface.ts: -------------------------------------------------------------------------------- 1 | export enum Network { 2 | /// Classic Bitcoin 3 | Bitcoin = 'bitcoin', 4 | /// Bitcoin's testnet 5 | Testnet = 'testnet', 6 | } 7 | 8 | export interface TorConfig { 9 | host: string; 10 | port: number; 11 | exit_into_clearnet: boolean; 12 | request_timeout: number; 13 | } 14 | 15 | export interface HistoricalInisightData { 16 | avgHeight: number; 17 | timestamp: number; 18 | avgFee_0: number; 19 | avgFee_10: number; 20 | avgFee_25: number; 21 | avgFee_50: number; 22 | avgFee_75: number; 23 | avgFee_90: number; 24 | avgFee_100: number; 25 | } 26 | -------------------------------------------------------------------------------- /src/assets/images/btc_black.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/btc_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/link_email_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/icon_dollar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/search-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/daily_wallet.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/link_email.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/hooks/useAsync.ts: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | const useAsync = () => { 4 | const [inProgress, setProgress] = useState(false); 5 | const [error, setError] = useState(); 6 | const [data, setData] = useState(); 7 | const start = async (callback) => { 8 | try { 9 | setProgress(true); 10 | const data = await callback(); 11 | setData(data); 12 | setProgress(false); 13 | } catch (err) { 14 | setError(err); 15 | setProgress(false); 16 | } 17 | }; 18 | return { inProgress, error, data, start }; 19 | }; 20 | 21 | export default useAsync; 22 | -------------------------------------------------------------------------------- /src/assets/images/btc_up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/specter_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/models/enums/ConciergeTag.ts: -------------------------------------------------------------------------------- 1 | export enum ConciergeTag { 2 | ONBOARD = 'onboarding', 3 | WALLET = 'wallet', 4 | VAULT = 'vault', 5 | COLLABORATIVE_Wallet = 'collaborative-wallet', 6 | INHERITANCE = 'inheritance', 7 | SUBSCRIPTION = 'subscription', 8 | BACKUP = 'backup', 9 | NODE = 'node', 10 | RECOVERY = 'recovery', 11 | KEYS = 'keys', 12 | SETTINGS = 'settings', 13 | KEEPER_CONCIERGE = 'keeper-concierge', 14 | ERROR_REPORT = 'error-report', 15 | } 16 | 17 | export enum ConciergeTicketStatus { 18 | 'SOLVED' = 'solved', 19 | 'NEW' = 'new', 20 | 'PENDING' = 'pending', 21 | 'OPEN' = 'open', 22 | } 23 | -------------------------------------------------------------------------------- /src/assets/images/add-plain-green.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/iconRefreshDark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/iconRefreshLight.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/planCheckMark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/plan-white-check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/services/qr/bc-ur-registry/utils.ts: -------------------------------------------------------------------------------- 1 | import { addSemanticDecode, addSemanticEncode, DataItem } from './lib'; 2 | 3 | const alreadyPatchedTag: number[] = []; 4 | export const patchTags = (tags: number[]): void => { 5 | tags.forEach((tag) => { 6 | if (alreadyPatchedTag.find((i) => i === tag)) return; 7 | addSemanticEncode(tag, (data: any) => { 8 | if (data instanceof DataItem) { 9 | if (data.getTag() === tag) { 10 | return data.getData(); 11 | } 12 | } 13 | }); 14 | addSemanticDecode(tag, (data: any) => new DataItem(data, tag)); 15 | alreadyPatchedTag.push(tag); 16 | }); 17 | }; 18 | -------------------------------------------------------------------------------- /src/assets/images/add-plus-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/store/reducers/swap.ts: -------------------------------------------------------------------------------- 1 | import { createSlice, PayloadAction } from '@reduxjs/toolkit'; 2 | 3 | export type CoinDetailsType = { 4 | btc: any; 5 | usdt: any; 6 | }; 7 | 8 | const initialState: { 9 | coinDetails: CoinDetailsType; 10 | } = { 11 | coinDetails: null, 12 | }; 13 | 14 | const swapSlice = createSlice({ 15 | name: 'swap', 16 | initialState, 17 | reducers: { 18 | setCoinDetails: (state, action: PayloadAction) => { 19 | state.coinDetails = action.payload; 20 | }, 21 | }, 22 | }); 23 | 24 | export const { setCoinDetails } = swapSlice.actions; 25 | 26 | export default swapSlice.reducer; 27 | -------------------------------------------------------------------------------- /src/assets/images/add-plus-green.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/btc_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/storage/realm/schema/swapHistory.ts: -------------------------------------------------------------------------------- 1 | import { ObjectSchema } from 'realm'; 2 | import { RealmSchema } from '../enum'; 3 | 4 | export const SwapHistorySchema: ObjectSchema = { 5 | name: RealmSchema.SwapHistory, 6 | properties: { 7 | coin_from: 'string', 8 | coin_from_name: 'string', 9 | coin_from_network: 'string', 10 | coin_to: 'string', 11 | coin_to_name: 'string', 12 | coin_to_network: 'string', 13 | created_at: 'int', 14 | deposit_amount: 'string', 15 | expired_at: 'int', 16 | is_float: 'bool', 17 | status: 'string', 18 | id: 'string', 19 | withdrawal_amount: 'string', 20 | }, 21 | }; 22 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Run Tests 2 | 3 | on: 4 | push: 5 | branches: 6 | - sprint 7 | - dev 8 | - main 9 | pull_request: 10 | branches: 11 | - sprint 12 | - dev 13 | - main 14 | 15 | jobs: 16 | test: 17 | runs-on: ubuntu-latest 18 | 19 | steps: 20 | - name: Checkout code 21 | uses: actions/checkout@v3 22 | 23 | - name: Set up Node.js 24 | uses: actions/setup-node@v3 25 | with: 26 | node-version: '18' 27 | 28 | - name: Install dependencies 29 | run: yarn install 30 | 31 | - name: Run tests 32 | run: npm run test 33 | -------------------------------------------------------------------------------- /flows/healthCheckKey.yaml: -------------------------------------------------------------------------------- 1 | appId: ${APPID} 2 | --- 3 | - tapOn: 4 | id: 'btn_Manage\nKeys' 5 | - tapOn: 6 | id: 'btn_Mobile Key' 7 | index: 0 8 | - tapOn: 9 | id: 'btn_Health Check' 10 | - assertVisible: 11 | id: 'modal_secondary_btn' 12 | - tapOn: 13 | id: 'modal_secondary_btn' 14 | - assertVisible: 15 | id: 'modal_secondary_btn' 16 | - tapOn: 17 | id: 'modal_secondary_btn' 18 | - assertVisible: 19 | id: 'btn_back' 20 | - tapOn: 21 | id: 'btn_back' 22 | - extendedWaitUntil: 23 | visible: "Manage Keys" 24 | timeout: 20000 25 | - assertVisible: 26 | id: 'btn_back' 27 | - tapOn: 28 | id: 'btn_back' 29 | 30 | -------------------------------------------------------------------------------- /src/assets/images/toast_error.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/storage/realm/schema/app.ts: -------------------------------------------------------------------------------- 1 | import { ObjectSchema } from 'realm'; 2 | import { RealmSchema } from '../enum'; 3 | 4 | export const KeeperAppSchema: ObjectSchema = { 5 | name: RealmSchema.KeeperApp, 6 | properties: { 7 | id: 'string', 8 | publicId: 'string', 9 | appName: 'string?', 10 | primaryMnemonic: 'string', 11 | primarySeed: 'string', 12 | imageEncryptionKey: 'string', 13 | networkType: 'string', 14 | version: 'string', 15 | subscription: RealmSchema.StoreSubscription, 16 | backup: RealmSchema.Backup, 17 | enableAnalytics: { type: 'bool', default: false }, 18 | }, 19 | primaryKey: 'id', 20 | }; 21 | -------------------------------------------------------------------------------- /src/models/interfaces/KeeperApp.ts: -------------------------------------------------------------------------------- 1 | import { NetworkType } from 'src/services/wallets/enums'; 2 | import SubScription from './Subscription'; 3 | import { BackupType } from '../enums/BHR'; 4 | 5 | export interface AppBackup { 6 | method?: BackupType; 7 | password?: string; 8 | hint?: string; 9 | } 10 | 11 | export interface KeeperApp { 12 | id: string; 13 | publicId: string; 14 | appName?: string; 15 | primaryMnemonic: string; 16 | primarySeed: string; 17 | imageEncryptionKey: string; 18 | version: string; 19 | networkType: NetworkType; 20 | backup: AppBackup; 21 | subscription: SubScription; 22 | enableAnalytics: boolean; 23 | } 24 | -------------------------------------------------------------------------------- /patches/realm+12.14.2.patch: -------------------------------------------------------------------------------- 1 | diff --git a/node_modules/realm/binding/android/CMakeLists.txt b/node_modules/realm/binding/android/CMakeLists.txt 2 | index 87af51f..ac12360 100644 3 | --- a/node_modules/realm/binding/android/CMakeLists.txt 4 | +++ b/node_modules/realm/binding/android/CMakeLists.txt 5 | @@ -28,6 +28,8 @@ set_target_properties(realm-js-android-binding PROPERTIES 6 | 7 | set(CMAKE_INTERPROCEDURAL_OPTIMIZATION OFF) 8 | set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -Oz") 9 | +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,max-page-size=16384") 10 | + 11 | 12 | target_link_options(realm-js-android-binding PUBLIC -fvisibility=hidden) 13 | 14 | -------------------------------------------------------------------------------- /src/hardware/HWErrorState.ts: -------------------------------------------------------------------------------- 1 | import { HWErrorType } from 'src/models/enums/Hardware'; 2 | 3 | const ErrorMessageMap = { 4 | [HWErrorType.INCORRECT_HW]: 'Fail to read hardware data, please try again', 5 | [HWErrorType.INVALID_SIG]: 'Please export the xPub from the instructed section of the hardware', 6 | [HWErrorType.INCORRECT_NETWORK]: 7 | 'Please check if the device is set to the right blockchain network', 8 | }; 9 | class HWError extends Error { 10 | type: HWErrorType; 11 | 12 | constructor(type) { 13 | super(ErrorMessageMap[type]); 14 | this.name = 'HWError'; 15 | this.type = type; 16 | } 17 | } 18 | 19 | export default HWError; 20 | -------------------------------------------------------------------------------- /src/storage/realm/schema/nodeConnect.ts: -------------------------------------------------------------------------------- 1 | import { ObjectSchema } from 'realm'; 2 | import { RealmSchema } from '../enum'; 3 | 4 | // hosts own/private/user-provided nodes 5 | 6 | const nodeProperties = { 7 | id: 'int', 8 | host: 'string', 9 | port: 'string', 10 | useKeeperNode: 'bool', 11 | isConnected: 'bool', 12 | useSSL: 'bool', 13 | networkType: 'string', 14 | }; 15 | 16 | export const NodeConnectSchema: ObjectSchema = { 17 | name: RealmSchema.NodeConnect, 18 | properties: nodeProperties, 19 | }; 20 | 21 | export const DefualtNodeConnectSchema: ObjectSchema = { 22 | name: RealmSchema.DefaultNodeConnect, 23 | properties: nodeProperties, 24 | }; 25 | -------------------------------------------------------------------------------- /src/assets/images/planCheckMarkSelected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | on: 3 | push: 4 | branches: 5 | - sprint 6 | pull_request: 7 | types: [opened, synchronize, reopened] 8 | jobs: 9 | sonarcloud: 10 | name: SonarCloud 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v3 14 | with: 15 | fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis 16 | - name: SonarCloud Scan 17 | uses: SonarSource/sonarcloud-github-action@master 18 | env: 19 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any 20 | SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} 21 | -------------------------------------------------------------------------------- /src/assets/images/checked.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/assets/images/jade_icon_light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/context/ThemeContext.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { NativeBaseProvider } from 'native-base'; 3 | import { useSelector } from 'react-redux'; 4 | import customTheme from 'src/navigation/themes'; 5 | import privateTheme from 'src/navigation/privateTheme'; 6 | 7 | const ThemeContextProvider = ({ children }: any) => { 8 | const themeMode = useSelector((state: any) => state?.settings?.themeMode); 9 | 10 | const selectedTheme = 11 | themeMode === 'PRIVATE' || themeMode === 'PRIVATE_LIGHT' ? privateTheme : customTheme; 12 | 13 | return {children}; 14 | }; 15 | 16 | export default ThemeContextProvider; 17 | -------------------------------------------------------------------------------- /src/assets/images/jade_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/images/share-contact-light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/screens/ErrorHandler.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { captureError } from 'src/services/sentry'; 3 | import { useQuery } from '@realm/react'; 4 | import { RealmSchema } from 'src/storage/realm/enum'; 5 | import { getJSONFromRealmObject } from 'src/storage/realm/utils'; 6 | import dbManager from 'src/storage/realm/dbManager'; 7 | 8 | export const errorBourndaryOptions = { 9 | onError: (error) => { 10 | captureError(error); 11 | }, 12 | beforeCapture: (scope) => { 13 | scope.addBreadcrumb({ 14 | level: 'debug', 15 | data: { 16 | versionHistory: dbManager.getCollection(RealmSchema.VersionHistory), 17 | }, 18 | }); 19 | }, 20 | }; 21 | -------------------------------------------------------------------------------- /metro.config.js: -------------------------------------------------------------------------------- 1 | const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config'); 2 | 3 | const defaultConfig = getDefaultConfig(__dirname); 4 | const { assetExts, sourceExts } = defaultConfig.resolver; 5 | 6 | /** 7 | * Metro configuration 8 | * https://reactnative.dev/docs/metro 9 | * 10 | * @type {import('metro-config').MetroConfig} 11 | */ 12 | const config = { 13 | transformer: { 14 | babelTransformerPath: require.resolve('react-native-svg-transformer'), 15 | }, 16 | resolver: { 17 | assetExts: assetExts.filter((ext) => ext !== 'svg'), 18 | sourceExts: [...sourceExts, 'svg'], 19 | }, 20 | }; 21 | 22 | module.exports = mergeConfig(defaultConfig, config); 23 | -------------------------------------------------------------------------------- /src/assets/images/Edit-Icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/MapPin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/images/icon_tick.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/assets/images/seedwords.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/hardware/signerSeeds.ts: -------------------------------------------------------------------------------- 1 | import { WalletType } from 'src/services/wallets/enums'; 2 | import { BIP85Config } from 'src/services/wallets/interfaces'; 3 | import BIP85 from 'src/services/wallets/operations/BIP85'; 4 | 5 | const generateMobileKeySeeds = async (mobileKeyInstanceNo: number, primaryMnemonic: string) => { 6 | let bip85Config: BIP85Config; 7 | bip85Config = BIP85.generateBIP85Configuration(WalletType.DEFAULT, mobileKeyInstanceNo); 8 | const entropy = await BIP85.bip39MnemonicToEntropy(bip85Config.derivationPath, primaryMnemonic); 9 | const mnemonic = BIP85.entropyToBIP39(entropy, bip85Config.words); 10 | return mnemonic; 11 | }; 12 | 13 | export { generateMobileKeySeeds }; 14 | -------------------------------------------------------------------------------- /src/hooks/useSubscriptionLevel.ts: -------------------------------------------------------------------------------- 1 | import { KeeperApp } from 'src/models/interfaces/KeeperApp'; 2 | import { RealmSchema } from 'src/storage/realm/enum'; 3 | import { getJSONFromRealmObject } from 'src/storage/realm/utils'; 4 | import { useQuery } from '@realm/react'; 5 | import { AppSubscriptionLevel } from 'src/models/enums/SubscriptionTier'; 6 | 7 | const useSubscriptionLevel = () => { 8 | const keeper: KeeperApp = useQuery(RealmSchema.KeeperApp).map(getJSONFromRealmObject)[0]; 9 | // const level: AppSubscriptionLevel = keeper.subscription.level; 10 | const level: AppSubscriptionLevel = AppSubscriptionLevel.L3; 11 | return { level }; 12 | }; 13 | 14 | export default useSubscriptionLevel; 15 | -------------------------------------------------------------------------------- /android/app/build_defs.bzl: -------------------------------------------------------------------------------- 1 | """Helper definitions to glob .aar and .jar targets""" 2 | 3 | def create_aar_targets(aarfiles): 4 | for aarfile in aarfiles: 5 | name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] 6 | lib_deps.append(":" + name) 7 | android_prebuilt_aar( 8 | name = name, 9 | aar = aarfile, 10 | ) 11 | 12 | def create_jar_targets(jarfiles): 13 | for jarfile in jarfiles: 14 | name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] 15 | lib_deps.append(":" + name) 16 | prebuilt_jar( 17 | name = name, 18 | binary_jar = jarfile, 19 | ) 20 | -------------------------------------------------------------------------------- /src/assets/images/Map-pin-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/images/MapPinIcon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/images/seedwordsLight.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/storage/realm/schema/uai.ts: -------------------------------------------------------------------------------- 1 | import { ObjectSchema } from 'realm'; 2 | import { RealmSchema } from '../enum'; 3 | 4 | export const UAISchema: ObjectSchema = { 5 | name: RealmSchema.UAI, 6 | properties: { 7 | id: 'string', 8 | uaiType: 'string', 9 | entityId: 'string?', 10 | lastActioned: 'date?', 11 | uaiDetails: `${RealmSchema.UAIDetails}?`, 12 | createdAt: 'date?', 13 | seenAt: 'date?', 14 | }, 15 | primaryKey: 'id', 16 | }; 17 | 18 | export const UAIDetailsSchema: ObjectSchema = { 19 | name: RealmSchema.UAIDetails, 20 | embedded: true, 21 | properties: { 22 | heading: 'string?', 23 | body: 'string?', 24 | networkType: 'string?', 25 | }, 26 | }; 27 | -------------------------------------------------------------------------------- /patches/react-native-mmkv+2.11.0.patch: -------------------------------------------------------------------------------- 1 | diff --git a/node_modules/react-native-mmkv/android/build.gradle b/node_modules/react-native-mmkv/android/build.gradle 2 | index ae992e2..600895c 100644 3 | --- a/node_modules/react-native-mmkv/android/build.gradle 4 | +++ b/node_modules/react-native-mmkv/android/build.gradle 5 | @@ -78,7 +78,7 @@ android { 6 | externalNativeBuild { 7 | cmake { 8 | cppFlags "-O2 -frtti -fexceptions -Wall -Wno-unused-variable -fstack-protector-all" 9 | - arguments "-DANDROID_STL=c++_shared" 10 | + arguments "-DANDROID_STL=c++_shared", "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON" 11 | abiFilters (*reactNativeArchitectures()) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/assets/images/edit_brown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /flows/addNewKey.yaml: -------------------------------------------------------------------------------- 1 | appId: ${APPID} 2 | --- 3 | - tapOn: 4 | id: 'btn_Manage\nKeys' 5 | - assertVisible: 6 | id: 'btn_Add Key' 7 | - tapOn: 8 | id: 'btn_Add Key' 9 | - waitForAnimationToEnd: 10 | timeout: 5000 11 | - scroll 12 | - tapOn: 13 | id: 'btn_KEEPER' 14 | - assertVisible: 15 | id: 'btn_Add a New Mobile Key' 16 | - tapOn: 17 | id: 'btn_Add a New Mobile Key' 18 | - assertVisible: Next 19 | - tapOn: 20 | id: 'modal_primary_btn' 21 | - waitForAnimationToEnd: 22 | timeout: 20000 23 | - extendedWaitUntil: 24 | visible: "Manage Keys" 25 | timeout: 20000 26 | - assertVisible: 27 | id: 'btn_back' 28 | - tapOn: 29 | id: 'btn_back' 30 | - runFlow: hidendeletekey.yaml 31 | -------------------------------------------------------------------------------- /src/assets/images/collaborative-icon-small.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/info_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/info-Dark-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/hooks/useKeyboard.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from 'react'; 2 | import { Keyboard } from 'react-native'; 3 | 4 | export function useKeyboard() { 5 | const [isKeyboardVisible, setKeyboardVisible] = useState(false); 6 | 7 | useEffect(() => { 8 | const keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', () => { 9 | setKeyboardVisible(true); 10 | }); 11 | 12 | const keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', () => { 13 | setKeyboardVisible(false); 14 | }); 15 | 16 | return () => { 17 | keyboardDidHideListener.remove(); 18 | keyboardDidShowListener.remove(); 19 | }; 20 | }, []); 21 | 22 | return isKeyboardVisible; 23 | } 24 | -------------------------------------------------------------------------------- /src/assets/images/collaborative_vault_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/skip.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/images/deletelabel.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/header-notification-simple-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/KeeperGradient.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Box, IBoxProps } from 'native-base'; 3 | 4 | interface IKeeperGradientProps extends IBoxProps { 5 | colors: Array; 6 | start?: Array; 7 | end?: Array; 8 | location?: Array; 9 | } 10 | 11 | function KeeperGradient(props: IKeeperGradientProps) { 12 | const { children, colors } = props; 13 | const updatedProps = { 14 | ...props, 15 | colors: undefined, 16 | start: undefined, 17 | end: undefined, 18 | location: undefined, 19 | }; 20 | return ( 21 | 22 | {children} 23 | 24 | ); 25 | } 26 | 27 | export default KeeperGradient; 28 | -------------------------------------------------------------------------------- /src/hardware/jade/index.ts: -------------------------------------------------------------------------------- 1 | import WalletUtilities from 'src/services/wallets/operations/utils'; 2 | import { DerivationPurpose } from 'src/services/wallets/enums'; 3 | 4 | export const getJadeDetails = (qrData) => { 5 | const { derivationPath, xPub: xpub, mfp } = qrData; 6 | const purpose = WalletUtilities.getSignerPurposeFromPath(derivationPath); 7 | let forMultiSig: boolean; 8 | let forSingleSig: boolean; 9 | if (purpose && DerivationPurpose.BIP48.toString() === purpose) { 10 | forMultiSig = true; 11 | forSingleSig = false; 12 | } else { 13 | forMultiSig = false; 14 | forSingleSig = true; 15 | } 16 | return { xpub, derivationPath, masterFingerprint: mfp?.toUpperCase(), forMultiSig, forSingleSig }; 17 | }; 18 | -------------------------------------------------------------------------------- /src/assets/images/tapsigner-green-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/images/tapsigner-green-light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/components/ContentWrapper.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Box } from 'native-base'; 3 | import { StyleSheet } from 'react-native'; 4 | import { hp } from 'src/constants/responsive'; 5 | 6 | type ContentWrapperProps = { 7 | backgroundColor?: string; 8 | children?: React.ReactNode; 9 | padding?: number; 10 | }; 11 | 12 | const ContentWrapper = ({ backgroundColor, children, padding = 0 }: ContentWrapperProps) => { 13 | return ( 14 | 15 | {children} 16 | 17 | ); 18 | }; 19 | 20 | export default ContentWrapper; 21 | const style = StyleSheet.create({ 22 | Container: { 23 | marginBottom: hp(10), 24 | }, 25 | }); 26 | -------------------------------------------------------------------------------- /src/assets/images/swap-success.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/usdt-wallet-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/privateImages/tick-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /__mocks__/react-native-keychain.js: -------------------------------------------------------------------------------- 1 | const keychainMock = { 2 | setGenericPassword: jest.fn().mockResolvedValue(), 3 | getGenericPassword: jest.fn().mockResolvedValue(), 4 | resetGenericPassword: jest.fn().mockResolvedValue(), 5 | ACCESSIBLE: { 6 | WHEN_UNLOCKED: 'AccessibleWhenUnlocked', 7 | AFTER_FIRST_UNLOCK: 'AccessibleAfterFirstUnlock', 8 | ALWAYS: 'AccessibleAlways', 9 | WHEN_PASSCODE_SET_THIS_DEVICE_ONLY: 'AccessibleWhenPasscodeSetThisDeviceOnly', 10 | WHEN_UNLOCKED_THIS_DEVICE_ONLY: 'AccessibleWhenUnlockedThisDeviceOnly', 11 | AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY: 'AccessibleAfterFirstUnlockThisDeviceOnly', 12 | ALWAYS_THIS_DEVICE_ONLY: 'AccessibleAlwaysThisDeviceOnly', 13 | }, 14 | }; 15 | export default keychainMock; 16 | -------------------------------------------------------------------------------- /src/assets/images/import.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/swap-confirmint.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/swap-processing.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/three-dots-grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/hooks/useGetInUK.ts: -------------------------------------------------------------------------------- 1 | import { useContext } from 'react'; 2 | import { getCountry } from 'react-native-localize'; 3 | import { LocalizationContext } from 'src/context/Localization/LocContext'; 4 | import { useAppSelector } from 'src/store/hooks'; 5 | 6 | export const useGetInUK = () => { 7 | const { translations } = useContext(LocalizationContext); 8 | const { buyBTC: buyBTCText } = translations; 9 | const { currencyCode } = useAppSelector((state) => state.settings); 10 | const isUK = currencyCode === 'GBP' || getCountry() === 'UK'; 11 | 12 | const sanitizeBuyText = (text) => { 13 | if (isUK) { 14 | return text.replace(buyBTCText.buy, buyBTCText.get); 15 | } 16 | return text; 17 | }; 18 | 19 | return { sanitizeBuyText }; 20 | }; 21 | -------------------------------------------------------------------------------- /patches/react-native-modal+13.0.1.patch: -------------------------------------------------------------------------------- 1 | diff --git a/node_modules/react-native-modal/dist/modal.js b/node_modules/react-native-modal/dist/modal.js 2 | index 80f4e75..dab55d7 100644 3 | --- a/node_modules/react-native-modal/dist/modal.js 4 | +++ b/node_modules/react-native-modal/dist/modal.js 5 | @@ -456,7 +456,7 @@ export class ReactNativeModal extends React.Component { 6 | BackHandler.addEventListener('hardwareBackPress', this.onBackButtonPress); 7 | } 8 | componentWillUnmount() { 9 | - BackHandler.removeEventListener('hardwareBackPress', this.onBackButtonPress); 10 | + this.backHandlerSubscription?.remove?.() 11 | if (this.didUpdateDimensionsEmitter) { 12 | this.didUpdateDimensionsEmitter.remove(); 13 | } 14 | -------------------------------------------------------------------------------- /src/hooks/useSignerFromKey.ts: -------------------------------------------------------------------------------- 1 | import { Signer, VaultSigner } from 'src/services/wallets/interfaces/vault'; 2 | import { useQuery } from '@realm/react'; 3 | import { RealmSchema } from 'src/storage/realm/enum'; 4 | import { getJSONFromRealmObject } from 'src/storage/realm/utils'; 5 | import { getKeyUID } from 'src/utils/utilities'; 6 | 7 | const useSignerFromKey = (key: VaultSigner) => { 8 | const signerQuery = useQuery(RealmSchema.Signer); 9 | if (!key) return { signer: null }; 10 | const signer: Signer = signerQuery 11 | .filtered(`masterFingerprint == "${key.masterFingerprint}"`) 12 | .map(getJSONFromRealmObject) 13 | .find((s) => getKeyUID(s as Signer) === getKeyUID(key)); 14 | return { signer }; 15 | }; 16 | 17 | export default useSignerFromKey; 18 | -------------------------------------------------------------------------------- /src/assets/images/learnMoreIcon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/icon_recieved_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/images/icon_recieved_red.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/images/passport_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/storage/realm/schema/subscription.ts: -------------------------------------------------------------------------------- 1 | import { ObjectSchema } from 'realm'; 2 | import { SubscriptionTier } from 'src/models/enums/SubscriptionTier'; 3 | import { RealmSchema } from '../enum'; 4 | 5 | export const StoreSubscriptionSchema: ObjectSchema = { 6 | name: RealmSchema.StoreSubscription, 7 | properties: { 8 | name: { 9 | type: 'string', 10 | default: SubscriptionTier.L1, 11 | }, 12 | productId: { 13 | type: 'string', 14 | default: SubscriptionTier.L1, 15 | }, 16 | receipt: { 17 | type: 'string', 18 | default: '', 19 | }, 20 | level: { 21 | type: 'int', 22 | default: 0, 23 | }, 24 | isDesktopPurchase: { 25 | type: 'bool', 26 | default: false, 27 | }, 28 | }, 29 | }; 30 | -------------------------------------------------------------------------------- /flows/login.yaml: -------------------------------------------------------------------------------- 1 | appId: ${APPID} 2 | --- 3 | - extendedWaitUntil: 4 | visible: 'Enter your passcode' 5 | timeout: 20000 6 | - assertNotVisible: 'Proceed' 7 | - tapOn: '1' 8 | - tapOn: '2' 9 | - tapOn: '3' 10 | - tapOn: '7' 11 | - assertVisible: 'Proceed' 12 | - tapOn: 'Proceed' 13 | - waitForAnimationToEnd: 14 | timeout: 5000 15 | - assertVisible: 'Incorrect password' 16 | - assertNotVisible: 'Proceed' 17 | - assertVisible: 'Retry' 18 | - tapOn: 'Retry' 19 | - tapOn: '1' 20 | - tapOn: '1' 21 | - tapOn: '1' 22 | - tapOn: '1' 23 | - assertVisible: 'Proceed' 24 | - tapOn: 'Proceed' 25 | - waitForAnimationToEnd: 26 | timeout: 5000 27 | - extendedWaitUntil: 28 | visible: 'Next' 29 | timeout: 30000 30 | - tapOn: 'Next' 31 | - waitForAnimationToEnd: 32 | timeout: 2000 33 | -------------------------------------------------------------------------------- /src/store/reducers/advisor.ts: -------------------------------------------------------------------------------- 1 | import { createSlice } from '@reduxjs/toolkit'; 2 | 3 | type Advisor = { 4 | duration: string; 5 | description: string; 6 | country: string; 7 | experience: string; 8 | expertise: string[]; 9 | image: string; 10 | languages: string[]; 11 | link: string; 12 | timezone: string; 13 | title: string; 14 | }; 15 | 16 | const initialState: { 17 | advisors: Advisor[]; 18 | } = { 19 | advisors: [], 20 | }; 21 | 22 | const advisorSlice = createSlice({ 23 | name: 'advisor', 24 | initialState, 25 | reducers: { 26 | setAdvisors: (state, action) => { 27 | state.advisors = action.payload; 28 | }, 29 | }, 30 | }); 31 | 32 | export const { setAdvisors } = advisorSlice.actions; 33 | 34 | export default advisorSlice.reducer; 35 | -------------------------------------------------------------------------------- /src/store/sagaActions/concierge.ts: -------------------------------------------------------------------------------- 1 | import { ConciergeTag } from 'src/models/enums/ConciergeTag'; 2 | 3 | export const LOAD_CONCIERGE_USER = 'LOAD_CONCIERGE_USER'; 4 | export const ADD_TICKET_STATUS_UAI = 'ADD_TICKET_STATUS_UAI'; 5 | export const SCHEDULE_ONBOARDING_CALL = 'SCHEDULE_ONBOARDING_CALL'; 6 | 7 | 8 | export const loadConciergeUser = () => ({ 9 | type: LOAD_CONCIERGE_USER, 10 | }); 11 | 12 | export const addTicketStatusUAI = (ticketId, title, body) => ({ 13 | type: ADD_TICKET_STATUS_UAI, 14 | payload: { 15 | ticketId, 16 | title, 17 | body, 18 | }, 19 | }); 20 | 21 | export const scheduleOnboardingCall = (onboardEmail: string) => ({ 22 | type: SCHEDULE_ONBOARDING_CALL, 23 | payload: onboardEmail, 24 | }); 25 | 26 | 27 | export { ConciergeTag }; 28 | -------------------------------------------------------------------------------- /src/assets/images/mobile-key-green-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/hooks/useTapsignerModal.tsx: -------------------------------------------------------------------------------- 1 | import { CKTapCard } from 'cktap-protocol-react-native'; 2 | import { Platform } from 'react-native'; 3 | import { useState } from 'react'; 4 | 5 | const useTapsignerModal = (card: CKTapCard) => { 6 | const [nfcVisible, setNfcVisible] = useState(false); 7 | 8 | const withModal = (callback) => 9 | Platform.select({ 10 | android: async () => { 11 | setNfcVisible(true); 12 | const resp = await card.nfcWrapper(callback); 13 | setNfcVisible(false); 14 | return resp; 15 | }, 16 | ios: async () => card.nfcWrapper(callback), 17 | }); 18 | 19 | const closeNfc = () => setNfcVisible(false); 20 | 21 | return { nfcVisible, withModal, closeNfc }; 22 | }; 23 | 24 | export default useTapsignerModal; 25 | --------------------------------------------------------------------------------