diff --git a/.github/workflows/build-ios-release-pullrequest.yml b/.github/workflows/build-ios-release-pullrequest.yml index 5d6ef2b4e..074c95153 100644 --- a/.github/workflows/build-ios-release-pullrequest.yml +++ b/.github/workflows/build-ios-release-pullrequest.yml @@ -19,16 +19,16 @@ jobs: project_version: ${{ steps.determine_marketing_version.outputs.project_version }} latest_commit_message: ${{ steps.get_latest_commit_message.outputs.commit_message }} env: - APPLE_ID: ${{ secrets.APPLE_ID }} # Setting the environment variable + APPLE_ID: ${{ secrets.APPLE_ID }} steps: - name: Checkout project - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 # Fetches all history - name: Specify node version uses: actions/setup-node@v4 with: - node-version: 18 + node-version: 20 - uses: maxim-lobanov/setup-xcode@v1 with: xcode-version: 15.4 @@ -38,17 +38,12 @@ jobs: ruby-version: 3.1.6 bundler-cache: true - name: Install dependencies with Bundler - run: bundle install --quiet - - name: Install Fastlane - run: gem install fastlane - - name: Clear Derived Data - run: bundle exec fastlane ios clear_derived_data_lane - working-directory: ./ios + run: bundle install - name: Install node_modules run: npm install - name: Install CocoaPods Dependencies run: | - sudo gem install cocoapods # Ensure CocoaPods is installed + gem install cocoapods bundle exec pod install working-directory: ./ios - name: Cache CocoaPods Pods @@ -110,7 +105,7 @@ jobs: uses: actions/upload-artifact@v2 with: name: BlueWallet.${{env.PROJECT_VERSION}}(${{env.NEW_BUILD_NUMBER}}).ipa - path: ./ios/build/BlueWallet.${{env.PROJECT_VERSION}}(${{ env.NEW_BUILD_NUMBER }}).ipa + path: ./ios/build/BlueWallet.${{env.PROJECT_VERSION}}(${{env.NEW_BUILD_NUMBER}}).ipa testflight-upload: needs: build @@ -123,7 +118,12 @@ jobs: LATEST_COMMIT_MESSAGE: ${{ needs.build.outputs.latest_commit_message }} steps: - name: Checkout project - uses: actions/checkout@v3 + uses: actions/checkout@v4 + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 3.1.6 + bundler-cache: true - name: Cache Ruby Gems uses: actions/cache@v2 with: @@ -138,7 +138,7 @@ jobs: - name: Download IPA from Artifact uses: actions/download-artifact@v2 with: - name: BlueWallet.${{needs.build.outputs.project_version}}(${{needs.build.outputs.new_build_number}}).ipa + name: BlueWallet.${{ needs.build.outputs.project_version }}(${{ needs.build.outputs.new_build_number }}).ipa path: ./ios/build - name: Create App Store Connect API Key JSON run: echo '${{ secrets.APP_STORE_CONNECT_API_KEY_CONTENT }}' > ./ios/appstore_api_key.json diff --git a/.github/workflows/build-release-apk.yml b/.github/workflows/build-release-apk.yml index c76870bfc..7a076d3e3 100644 --- a/.github/workflows/build-release-apk.yml +++ b/.github/workflows/build-release-apk.yml @@ -20,7 +20,7 @@ jobs: - name: Specify node version uses: actions/setup-node@v4 with: - node-version: 18 + node-version: 20 - name: Use npm caches uses: actions/cache@v2 diff --git a/Gemfile b/Gemfile index 7e60e0385..7e4d042ad 100644 --- a/Gemfile +++ b/Gemfile @@ -2,6 +2,7 @@ source "https://rubygems.org" # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version ruby "3.1.6" -gem "cocoapods", ">= 1.13", "< 1.15" +gem 'rubyzip', '2.3.0' +gem "cocoapods", "1.15.2" gem "activesupport", ">= 6.1.7.3", "< 7.1.0" gem "fastlane" \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 60e491824..2436e3220 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -24,7 +24,7 @@ GEM aws-partitions (~> 1, >= 1.651.0) aws-sigv4 (~> 1.8) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.84.0) + aws-sdk-kms (1.85.0) aws-sdk-core (~> 3, >= 3.197.0) aws-sigv4 (~> 1.1) aws-sdk-s3 (1.152.3) @@ -36,10 +36,10 @@ GEM babosa (1.0.4) base64 (0.2.0) claide (1.1.0) - cocoapods (1.14.3) + cocoapods (1.15.2) addressable (~> 2.8) claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.14.3) + cocoapods-core (= 1.15.2) cocoapods-deintegrate (>= 1.0.3, < 2.0) cocoapods-downloader (>= 2.1, < 3.0) cocoapods-plugins (>= 1.0.0, < 2.0) @@ -54,7 +54,7 @@ GEM nap (~> 1.0) ruby-macho (>= 2.3.0, < 3.0) xcodeproj (>= 1.23.0, < 2.0) - cocoapods-core (1.14.3) + cocoapods-core (1.15.2) activesupport (>= 5.0, < 8) addressable (~> 2.8) algoliasearch (~> 1.0) @@ -117,7 +117,7 @@ GEM faraday_middleware (1.2.0) faraday (~> 1.0) fastimage (2.3.1) - fastlane (2.220.0) + fastlane (2.221.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -206,7 +206,7 @@ GEM concurrent-ruby (~> 1.0) jmespath (1.6.2) json (2.7.2) - jwt (2.8.1) + jwt (2.8.2) base64 mini_magick (4.13.1) mini_mime (1.1.5) @@ -234,7 +234,7 @@ GEM rouge (2.0.7) ruby-macho (2.5.1) ruby2_keywords (0.0.5) - rubyzip (2.3.2) + rubyzip (2.3.0) security (0.1.5) signet (0.19.0) addressable (~> 2.8) @@ -277,8 +277,9 @@ PLATFORMS DEPENDENCIES activesupport (>= 6.1.7.3, < 7.1.0) - cocoapods (>= 1.13, < 1.15) + cocoapods (= 1.15.2) fastlane + rubyzip (= 2.3.0) RUBY VERSION ruby 3.1.6p260 diff --git a/ios/BlueWallet.xcodeproj/project.pbxproj b/ios/BlueWallet.xcodeproj/project.pbxproj index bf820ea2f..581c2dc47 100644 --- a/ios/BlueWallet.xcodeproj/project.pbxproj +++ b/ios/BlueWallet.xcodeproj/project.pbxproj @@ -571,7 +571,6 @@ 13B07FAE1A68108700A75B9A /* BlueWallet */ = { isa = PBXGroup; children = ( - B4AB21052B61D8890080440C /* SplashScreen */, B461B850299599F800E431AA /* AppDelegate.h */, B461B851299599F800E431AA /* AppDelegate.mm */, 32C7944323B8879D00BE2AFA /* BlueWalletRelease.entitlements */, @@ -911,13 +910,6 @@ path = BlueWalletUITests; sourceTree = ""; }; - B4AB21052B61D8890080440C /* SplashScreen */ = { - isa = PBXGroup; - children = ( - ); - name = SplashScreen; - sourceTree = ""; - }; FAA856B639C61E61D2CF90A8 /* Pods */ = { isa = PBXGroup; children = ( @@ -2737,4 +2729,4 @@ /* End XCSwiftPackageProductDependency section */ }; rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; -} \ No newline at end of file +} diff --git a/ios/Podfile.lock b/ios/Podfile.lock index e245ee325..b7f22a984 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -464,7 +464,7 @@ PODS: - React-perflogger (= 0.72.14) - ReactNativeCameraKit (13.0.0): - React-Core - - RealmJS (12.10.0): + - RealmJS (12.11.0): - React - rn-ldk (0.8.4): - React-Core @@ -480,7 +480,7 @@ PODS: - React-Core - RNFS (2.20.0): - React-Core - - RNGestureHandler (2.16.2): + - RNGestureHandler (2.17.0): - RCT-Folly (= 2021.07.22.00) - React-Core - RNHandoff (0.0.3): @@ -503,7 +503,7 @@ PODS: - RCT-Folly (= 2021.07.22.00) - React-Core - ReactCommon/turbomodule/core - - RNScreens (3.31.1): + - RNScreens (3.32.0): - RCT-Folly (= 2021.07.22.00) - React-Core - React-RCTImage @@ -830,7 +830,7 @@ SPEC CHECKSUMS: React-utils: 22a77b05da25ce49c744faa82e73856dcae1734e ReactCommon: ff94462e007c568d8cdebc32e3c97af86ec93bb5 ReactNativeCameraKit: 9d46a5d7dd544ca64aa9c03c150d2348faf437eb - RealmJS: f86da4f2c5b089d976db335f370449903ddc8fbb + RealmJS: 5f96d3e02420b5f579296c465a437f6e20026da9 rn-ldk: 0d8749d98cc5ce67302a32831818c116b67f7643 RNCAsyncStorage: 826b603ae9c0f88b5ac4e956801f755109fa4d5c RNCClipboard: 0a720adef5ec193aa0e3de24c3977222c7e52a37 @@ -838,7 +838,7 @@ SPEC CHECKSUMS: RNDefaultPreference: 08bdb06cfa9188d5da97d4642dac745218d7fb31 RNDeviceInfo: b899ce37a403a4dea52b7cb85e16e49c04a5b88e RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 - RNGestureHandler: 982741f345785f2927e7b28f67dc83679cf3bfc8 + RNGestureHandler: 2d351f93c68bf410fc0fe8d9ace7bdddb0c2e566 RNHandoff: d3b0754cca3a6bcd9b25f544f733f7f033ccf5fa RNKeychain: bfe3d12bf4620fe488771c414530bf16e88f3678 RNLocalize: b77875884750cb6a58cd6865863fe2ba2729b72b @@ -848,7 +848,7 @@ SPEC CHECKSUMS: RNRate: ef3bcff84f39bb1d1e41c5593d3eea4aab2bd73a RNReactNativeHapticFeedback: ec56a5f81c3941206fd85625fa669ffc7b4545f9 RNReanimated: d4f25b2a931c4f0b2bb12173a3096f02ea4cfb05 - RNScreens: b8d370282cdeae9df85dd5eab20c88eb5181243b + RNScreens: ad1c105ac9107cf1a613bf80889485458eb20bd7 RNShare: 0fad69ae2d71de9d1f7b9a43acf876886a6cb99c RNSVG: af3907ac5d4fa26a862b75a16d8f15bc74f2ceda RNVectorIcons: 32462e7c7e58fe457474fc79c4d7de3f0ef08d70 @@ -858,4 +858,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: f19eea438501edfe85fb2fa51d40ba1b57540758 -COCOAPODS: 1.14.3 +COCOAPODS: 1.15.2 diff --git a/metro.config.js b/metro.config.js index e91aba937..72fcb3cbf 100644 --- a/metro.config.js +++ b/metro.config.js @@ -1,17 +1,11 @@ -/** - * Metro configuration for React Native - * https://github.com/facebook/react-native - * - * @format - */ +const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config'); -module.exports = { - transformer: { - getTransformOptions: async () => ({ - transform: { - experimentalImportSupport: false, - inlineRequires: true, - }, - }), - }, -}; +/** + * Metro configuration + * https://reactnative.dev/docs/metro + * + * @type {import('metro-config').MetroConfig} + */ +const config = {}; + +module.exports = mergeConfig(getDefaultConfig(__dirname), config); diff --git a/package-lock.json b/package-lock.json index 40d82ff3f..c44e2b33c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ "coinselect": "3.1.13", "crypto-js": "4.2.0", "dayjs": "1.11.11", - "detox": "20.22.2", + "detox": "20.23.0", "ecpair": "2.0.1", "ecurve": "1.0.6", "electrum-client": "github:BlueWallet/rn-electrum-client#1bfe3cc", @@ -70,7 +70,7 @@ "react-native-document-picker": "https://github.com/BlueWallet/react-native-document-picker#6033c4e1b0dd0a6760b5f5a5a2c3b2e5d07f2ae4", "react-native-draggable-flatlist": "github:BlueWallet/react-native-draggable-flatlist#ebfddc4", "react-native-fs": "2.20.0", - "react-native-gesture-handler": "2.16.2", + "react-native-gesture-handler": "2.17.0", "react-native-handoff": "https://github.com/BlueWallet/react-native-handoff#31d005f93d31099d0e564590a3bbd052b8a02b39", "react-native-haptic-feedback": "2.2.0", "react-native-idle-timer": "https://github.com/BlueWallet/react-native-idle-timer#7300b637c465c86e8db874c442e687950111da40", @@ -91,7 +91,7 @@ "react-native-rate": "1.2.12", "react-native-reanimated": "3.11.0", "react-native-safe-area-context": "4.10.5", - "react-native-screens": "3.31.1", + "react-native-screens": "3.32.0", "react-native-secure-key-store": "https://github.com/BlueWallet/react-native-secure-key-store#2076b48", "react-native-share": "10.2.1", "react-native-svg": "13.14.1", @@ -99,7 +99,7 @@ "react-native-vector-icons": "10.1.0", "react-native-watch-connectivity": "1.1.0", "readable-stream": "3.6.2", - "realm": "12.10.0", + "realm": "12.11.0", "rn-ldk": "github:BlueWallet/rn-ldk#v0.8.4", "rn-nodeify": "10.3.0", "scryptsy": "2.1.0", @@ -9627,9 +9627,9 @@ } }, "node_modules/detox": { - "version": "20.22.2", - "resolved": "https://registry.npmjs.org/detox/-/detox-20.22.2.tgz", - "integrity": "sha512-NTgLI4PQ7mgTTy+/w+jrD/8FhVdfQDwjUsYXEEreWS+tEG+borNNskTRnEO2JMvmBC3eM5lcnbfhCUbzClfURQ==", + "version": "20.23.0", + "resolved": "https://registry.npmjs.org/detox/-/detox-20.23.0.tgz", + "integrity": "sha512-jIZzO/gWEWDgq+lKcbwSiBJG2C9m6I8eDsuIxeyUbK4Di9UXZRhBCnVnp8hke6mUXkAe5TjzwnTCx7hD55f9pQ==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -9753,6 +9753,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -19696,14 +19697,14 @@ } }, "node_modules/react-native-gesture-handler": { - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.16.2.tgz", - "integrity": "sha512-vGFlrDKlmyI+BT+FemqVxmvO7nqxU33cgXVsn6IKAFishvlG3oV2Ds67D5nPkHMea8T+s1IcuMm0bF8ntZtAyg==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.17.0.tgz", + "integrity": "sha512-FzEOlLTo83OEBnCKwgwQTnsnlVHMVHu6xRNrxHpPRllfSBlpfyHCn2ezzDA6/k7ec2ooltU+3IIQSRiamHwHNA==", + "license": "MIT", "dependencies": { "@egjs/hammerjs": "^2.0.17", "hoist-non-react-statics": "^3.3.0", "invariant": "^2.2.4", - "lodash": "^4.17.21", "prop-types": "^15.7.2" }, "peerDependencies": { @@ -19928,9 +19929,10 @@ } }, "node_modules/react-native-screens": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.31.1.tgz", - "integrity": "sha512-8fRW362pfZ9y4rS8KY5P3DFScrmwo/vu1RrRMMx0PNHbeC9TLq0Kw1ubD83591yz64gLNHFLTVkTJmWeWCXKtQ==", + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.32.0.tgz", + "integrity": "sha512-wybqZAHX7v8ipOXhh90CqGLkBHw5JYqKNRBX7R/b0c2WQisTOgu0M0yGwBMM6LyXRBT+4k3NTGHdDbpJVpq0yQ==", + "license": "MIT", "dependencies": { "react-freeze": "^1.0.0", "warn-once": "^0.1.0" @@ -20302,9 +20304,9 @@ "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" }, "node_modules/realm": { - "version": "12.10.0", - "resolved": "https://registry.npmjs.org/realm/-/realm-12.10.0.tgz", - "integrity": "sha512-F3TpZ6upARxo+ZO6m/qbqaBc8AtPawxayckYGmEDfZ2TX3fqfq9v9NdtUDpjYoDXAyGiPxuSTu+DrrGzHCeYTw==", + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/realm/-/realm-12.11.0.tgz", + "integrity": "sha512-7KR3BSCurJcQR8IJJiWoLb6VkN3q34HObgtTlleKjXAAqr/7xEUu/kkVWyH78LCdU92qq16lBKS/59Ol2lJnlA==", "hasInstallScript": true, "license": "apache-2.0", "dependencies": { @@ -29916,9 +29918,9 @@ "dev": true }, "detox": { - "version": "20.22.2", - "resolved": "https://registry.npmjs.org/detox/-/detox-20.22.2.tgz", - "integrity": "sha512-NTgLI4PQ7mgTTy+/w+jrD/8FhVdfQDwjUsYXEEreWS+tEG+borNNskTRnEO2JMvmBC3eM5lcnbfhCUbzClfURQ==", + "version": "20.23.0", + "resolved": "https://registry.npmjs.org/detox/-/detox-20.23.0.tgz", + "integrity": "sha512-jIZzO/gWEWDgq+lKcbwSiBJG2C9m6I8eDsuIxeyUbK4Di9UXZRhBCnVnp8hke6mUXkAe5TjzwnTCx7hD55f9pQ==", "requires": { "ajv": "^8.6.3", "bunyan": "^1.8.12", @@ -37480,14 +37482,13 @@ } }, "react-native-gesture-handler": { - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.16.2.tgz", - "integrity": "sha512-vGFlrDKlmyI+BT+FemqVxmvO7nqxU33cgXVsn6IKAFishvlG3oV2Ds67D5nPkHMea8T+s1IcuMm0bF8ntZtAyg==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.17.0.tgz", + "integrity": "sha512-FzEOlLTo83OEBnCKwgwQTnsnlVHMVHu6xRNrxHpPRllfSBlpfyHCn2ezzDA6/k7ec2ooltU+3IIQSRiamHwHNA==", "requires": { "@egjs/hammerjs": "^2.0.17", "hoist-non-react-statics": "^3.3.0", "invariant": "^2.2.4", - "lodash": "^4.17.21", "prop-types": "^15.7.2" } }, @@ -37633,9 +37634,9 @@ "integrity": "sha512-Wyb0Nqw2XJ6oZxW/cK8k5q7/UAhg/wbEG6UVf89rQqecDZTDA5ic//P9J6VvJRVZerzGmxWQpVuM7f+PRYUM4g==" }, "react-native-screens": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.31.1.tgz", - "integrity": "sha512-8fRW362pfZ9y4rS8KY5P3DFScrmwo/vu1RrRMMx0PNHbeC9TLq0Kw1ubD83591yz64gLNHFLTVkTJmWeWCXKtQ==", + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.32.0.tgz", + "integrity": "sha512-wybqZAHX7v8ipOXhh90CqGLkBHw5JYqKNRBX7R/b0c2WQisTOgu0M0yGwBMM6LyXRBT+4k3NTGHdDbpJVpq0yQ==", "requires": { "react-freeze": "^1.0.0", "warn-once": "^0.1.0" @@ -37820,9 +37821,9 @@ "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" }, "realm": { - "version": "12.10.0", - "resolved": "https://registry.npmjs.org/realm/-/realm-12.10.0.tgz", - "integrity": "sha512-F3TpZ6upARxo+ZO6m/qbqaBc8AtPawxayckYGmEDfZ2TX3fqfq9v9NdtUDpjYoDXAyGiPxuSTu+DrrGzHCeYTw==", + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/realm/-/realm-12.11.0.tgz", + "integrity": "sha512-7KR3BSCurJcQR8IJJiWoLb6VkN3q34HObgtTlleKjXAAqr/7xEUu/kkVWyH78LCdU92qq16lBKS/59Ol2lJnlA==", "requires": { "@realm/fetch": "^0.1.1", "bson": "^4.7.2", diff --git a/package.json b/package.json index c308abc18..91a63721f 100644 --- a/package.json +++ b/package.json @@ -129,7 +129,7 @@ "coinselect": "3.1.13", "crypto-js": "4.2.0", "dayjs": "1.11.11", - "detox": "20.22.2", + "detox": "20.23.0", "ecpair": "2.0.1", "ecurve": "1.0.6", "electrum-client": "github:BlueWallet/rn-electrum-client#1bfe3cc", @@ -155,7 +155,7 @@ "react-native-document-picker": "https://github.com/BlueWallet/react-native-document-picker#6033c4e1b0dd0a6760b5f5a5a2c3b2e5d07f2ae4", "react-native-draggable-flatlist": "github:BlueWallet/react-native-draggable-flatlist#ebfddc4", "react-native-fs": "2.20.0", - "react-native-gesture-handler": "2.16.2", + "react-native-gesture-handler": "2.17.0", "react-native-handoff": "https://github.com/BlueWallet/react-native-handoff#31d005f93d31099d0e564590a3bbd052b8a02b39", "react-native-haptic-feedback": "2.2.0", "react-native-idle-timer": "https://github.com/BlueWallet/react-native-idle-timer#7300b637c465c86e8db874c442e687950111da40", @@ -176,7 +176,7 @@ "react-native-rate": "1.2.12", "react-native-reanimated": "3.11.0", "react-native-safe-area-context": "4.10.5", - "react-native-screens": "3.31.1", + "react-native-screens": "3.32.0", "react-native-secure-key-store": "https://github.com/BlueWallet/react-native-secure-key-store#2076b48", "react-native-share": "10.2.1", "react-native-svg": "13.14.1", @@ -184,7 +184,7 @@ "react-native-vector-icons": "10.1.0", "react-native-watch-connectivity": "1.1.0", "readable-stream": "3.6.2", - "realm": "12.10.0", + "realm": "12.11.0", "rn-ldk": "github:BlueWallet/rn-ldk#v0.8.4", "rn-nodeify": "10.3.0", "scryptsy": "2.1.0",