diff --git a/FlowCrypt.xcodeproj/project.pbxproj b/FlowCrypt.xcodeproj/project.pbxproj index 661e0168a..0e38cb4fb 100644 --- a/FlowCrypt.xcodeproj/project.pbxproj +++ b/FlowCrypt.xcodeproj/project.pbxproj @@ -92,6 +92,7 @@ 5133B6722716321F00C95463 /* ContactKeyDetailDecorator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5133B6712716321F00C95463 /* ContactKeyDetailDecorator.swift */; }; 5133B6742716E5EA00C95463 /* LabelCellNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5133B6732716E5EA00C95463 /* LabelCellNode.swift */; }; 5137CB1427F8E0A900AEF895 /* EnterpriseServerApiHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5137CB1327F8E0A900AEF895 /* EnterpriseServerApiHelper.swift */; }; + 513DC088284F161400FAD5F2 /* EmailKeyManagerApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 513DC087284F161400FAD5F2 /* EmailKeyManagerApi.swift */; }; 514C34DB276CE19C00FCAB79 /* ComposeMessageContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 514C34DA276CE19C00FCAB79 /* ComposeMessageContext.swift */; }; 514C34DD276CE1C000FCAB79 /* ComposeMessageRecipient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 514C34DC276CE1C000FCAB79 /* ComposeMessageRecipient.swift */; }; 514C34DF276CE20700FCAB79 /* ComposeMessageService+State.swift in Sources */ = {isa = PBXBuildFile; fileRef = 514C34DE276CE20700FCAB79 /* ComposeMessageService+State.swift */; }; @@ -549,6 +550,7 @@ 5133B6712716321F00C95463 /* ContactKeyDetailDecorator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactKeyDetailDecorator.swift; sourceTree = ""; }; 5133B6732716E5EA00C95463 /* LabelCellNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelCellNode.swift; sourceTree = ""; }; 5137CB1327F8E0A900AEF895 /* EnterpriseServerApiHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnterpriseServerApiHelper.swift; sourceTree = ""; }; + 513DC087284F161400FAD5F2 /* EmailKeyManagerApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmailKeyManagerApi.swift; sourceTree = ""; }; 514C34DA276CE19C00FCAB79 /* ComposeMessageContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeMessageContext.swift; sourceTree = ""; }; 514C34DC276CE1C000FCAB79 /* ComposeMessageRecipient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeMessageRecipient.swift; sourceTree = ""; }; 514C34DE276CE20700FCAB79 /* ComposeMessageService+State.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ComposeMessageService+State.swift"; sourceTree = ""; }; @@ -1127,6 +1129,14 @@ path = ObjcException; sourceTree = ""; }; + 513DC086284F15F600FAD5F2 /* Remote Private Key Apis */ = { + isa = PBXGroup; + children = ( + 513DC087284F161400FAD5F2 /* EmailKeyManagerApi.swift */, + ); + path = "Remote Private Key Apis"; + sourceTree = ""; + }; 5161D87D27A488BD00130518 /* Contact Models */ = { isa = PBXGroup; children = ( @@ -1266,6 +1276,7 @@ isa = PBXGroup; children = ( 2C03CC14275BB51000887EEB /* Account Server Apis */, + 513DC086284F15F600FAD5F2 /* Remote Private Key Apis */, ); path = Apis; sourceTree = ""; @@ -2654,6 +2665,7 @@ A36108E9273C7A2E00A90E34 /* MockError.swift in Sources */, 2C03CC16275BB53400887EEB /* EnterpriseServerApiTests.swift in Sources */, 51B7421B27F318D300E702C8 /* XCTestCaseExtension.swift in Sources */, + 513DC088284F161400FAD5F2 /* EmailKeyManagerApi.swift in Sources */, 9F5F504326FA6C7500294FA2 /* EnterpriseServerApiMock.swift in Sources */, 51DA5BDA2722C82E001C4359 /* RecipientTests.swift in Sources */, 9FC41171268118A7004C0A69 /* PassPhraseStorageTests.swift in Sources */, diff --git a/FlowCrypt.xcworkspace/xcshareddata/swiftpm/Package.resolved b/FlowCrypt.xcworkspace/xcshareddata/swiftpm/Package.resolved index 567e72ff4..a8a117a08 100644 --- a/FlowCrypt.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/FlowCrypt.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -32,8 +32,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/google/GoogleSignIn-iOS", "state" : { - "revision" : "21b8c78b6a10613cbaad3ca14052254a32af1c85", - "version" : "6.2.1" + "revision" : "9450e779619fc184d360c9f7ce61023587f7e1f4", + "version" : "6.2.2" } }, { @@ -86,8 +86,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/realm/realm-cocoa", "state" : { - "revision" : "7f123e48ec12926bb5080e449df360127ee0352d", - "version" : "10.26.0" + "revision" : "c54cc0bda9fb1aa94667022a46c3d079121476fc", + "version" : "10.28.0" } }, { @@ -95,8 +95,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/realm/realm-core", "state" : { - "revision" : "d97eed3ae7dff2f2e2ffbda83fa8f3b8c445c6ba", - "version" : "11.17.0" + "revision" : "fd48276f88f3d55dbdcdc9e8cbf32541811d5865", + "version" : "12.1.0" } }, { diff --git a/FlowCrypt/Core/Models/DecryptedPrivateKey.swift b/FlowCrypt/Core/Models/DecryptedPrivateKey.swift index 9aeeede87..7ca37f5b7 100644 --- a/FlowCrypt/Core/Models/DecryptedPrivateKey.swift +++ b/FlowCrypt/Core/Models/DecryptedPrivateKey.swift @@ -9,13 +9,9 @@ import Foundation struct DecryptedPrivateKeysResponse: Decodable { - let privateKeys: [DecryptedPrivateKey] - static let empty = DecryptedPrivateKeysResponse(privateKeys: []) -} - -struct DecryptedPrivateKey: Decodable { - - let decryptedPrivateKey: String + struct DecryptedPrivateKey: Decodable { + let decryptedPrivateKey: String + } } diff --git a/FlowCrypt/Functionality/Api/Remote Private Key Apis/EmailKeyManagerApi.swift b/FlowCrypt/Functionality/Api/Remote Private Key Apis/EmailKeyManagerApi.swift index 60ec718ae..803a8eadb 100644 --- a/FlowCrypt/Functionality/Api/Remote Private Key Apis/EmailKeyManagerApi.swift +++ b/FlowCrypt/Functionality/Api/Remote Private Key Apis/EmailKeyManagerApi.swift @@ -70,6 +70,11 @@ actor EmailKeyManagerApi: EmailKeyManagerApiType { let response = try await ApiCall.call(request) let decryptedPrivateKeysResponse = try JSONDecoder().decode(DecryptedPrivateKeysResponse.self, from: response.data) + let validKeys = try await validate(decryptedPrivateKeysResponse: decryptedPrivateKeysResponse) + return validKeys + } + + func validate(decryptedPrivateKeysResponse: DecryptedPrivateKeysResponse) async throws -> [KeyDetails] { var keys: [KeyDetails] = [] for privateKey in decryptedPrivateKeysResponse.privateKeys { let parsedPrivateKey = try await core.parseKeys(armoredOrBinary: privateKey.decryptedPrivateKey.data()) @@ -84,7 +89,6 @@ actor EmailKeyManagerApi: EmailKeyManagerApiType { } keys.append(contentsOf: parsedPrivateKey.keyDetails) } - return keys } diff --git a/FlowCrypt/Functionality/Services/EKMVcHelper.swift b/FlowCrypt/Functionality/Services/EKMVcHelper.swift index 3a5b86f2e..a229e10cb 100644 --- a/FlowCrypt/Functionality/Services/EKMVcHelper.swift +++ b/FlowCrypt/Functionality/Services/EKMVcHelper.swift @@ -50,7 +50,6 @@ final class EKMVcHelper: EKMVcHelperType { for keyDetail in keysToUpdate { try await saveKeyToLocal( - in: viewController, context: appContext, keyDetail: keyDetail, passPhrase: passPhrase, @@ -116,7 +115,6 @@ final class EKMVcHelper: EKMVcHelperType { } private func saveKeyToLocal( - in viewController: UIViewController, context: AppContextWithUser, keyDetail: KeyDetails, passPhrase: String, diff --git a/FlowCryptAppTests/Functionality/Apis/Remote Private Key Apis/EmailKeyManagerApi.swift b/FlowCryptAppTests/Functionality/Apis/Remote Private Key Apis/EmailKeyManagerApi.swift new file mode 100644 index 000000000..faeb0d551 --- /dev/null +++ b/FlowCryptAppTests/Functionality/Apis/Remote Private Key Apis/EmailKeyManagerApi.swift @@ -0,0 +1,48 @@ +// +// EmailKeyManagerApi.swift +// FlowCryptAppTests +// +// Created by Roma Sosnovsky on 07/06/22 +// Copyright © 2017-present FlowCrypt a. s. All rights reserved. +// + +@testable import FlowCrypt +import XCTest + +final class EmailKeyManagerApiTests: XCTestCase { + let core: Core! = .shared + + override func setUp() { + let expectation = XCTestExpectation() + Task { + await core.startIfNotAlreadyRunning() + expectation.fulfill() + } + wait(for: [expectation], timeout: 20) + } + + func testValidKeyParsing() async throws { + let service = EmailKeyManagerApi(clientConfiguration: .init(raw: .empty)) + let privateKey = DecryptedPrivateKeysResponse.DecryptedPrivateKey( + decryptedPrivateKey: TestData.decryptedPrivateKey + ) + let response = DecryptedPrivateKeysResponse(privateKeys: [privateKey]) + let validKeys = try await service.validate(decryptedPrivateKeysResponse: response) + XCTAssertEqual(validKeys.count, 1) + } + + func testInvalidKeyParsing() async throws { + let service = EmailKeyManagerApi(clientConfiguration: .init(raw: .empty)) + let privateKey = DecryptedPrivateKeysResponse.DecryptedPrivateKey( + decryptedPrivateKey: String(TestData.decryptedPrivateKey.prefix(200)) + ) + let response = DecryptedPrivateKeysResponse(privateKeys: [privateKey]) + + do { + _ = try await service.validate(decryptedPrivateKeysResponse: response) + XCTFail("Invalid key parsing should throw") + } catch { + XCTAssertEqual(error as! EmailKeyManagerApiError, EmailKeyManagerApiError.keysAreInvalid) + } + } +} diff --git a/FlowCryptAppTests/TestData.swift b/FlowCryptAppTests/TestData.swift index 8c63e5a67..c58e4c5f8 100644 --- a/FlowCryptAppTests/TestData.swift +++ b/FlowCryptAppTests/TestData.swift @@ -54,6 +54,8 @@ struct TestData { isRevoked: false ) + static let decryptedPrivateKey = "-----BEGIN PGP PRIVATE KEY BLOCK-----\nVersion: FlowCrypt iOS 0.2 Gmail Encryption\nComment: Seamlessly send and receive encrypted email\n\nxcLYBGJhte0BCAC+OTWjmuirrl0TKR7eAb77HU5eN/8s3+8lCe8xaAnlRtOX\nIMB3BLEt0sBnvYnYMohdU3TqIbdLUCkgeK/4TKh3bkNyAL6p/p7Otv72/2jm\nI6s1XNC/ClL2rr9xJKFfPPwb6EhnXZgcJOIH19xjM/OrlwJDyLtAKgoBMugE\nsLofJO91Iw72Y7JtmJMLUpxnXp9RM40fTaq53LOlJF0SRdNvSRlalZeI8Vu1\nU7McT2EcSOvUDlrhFwjZiVbloJNh63ELmCdmPdzswRBODOYDsrQ3i3gg9FQ4\nLGh7mYr7OBCi2xR2pHXbhZJim+hQh8WGb497ymyaPcwgdB8+C4MEv1sdABEB\nAAEAB/4rSyJ/4KUVU9snnfuCPCP/C5m3PGflivbm92aa2EquRcso8YGUZPs9\nSmLTiZIapE+ga/rnQbKxn6Yol4c3TB0oh24uv2glkQeMVR5c0V8Kx/HytHPn\nEv60WavFILjgj+TyJhD6g5T3zNYrwk+MvXl3I2iWzFP/w8GgqbkgPieyKAUV\nyLoBD+1awd0Aku/zHlmxISnrOc2ZeeJJf83V/1+PZJ0HeXGXjowLHzWsW0lZ\nJwIfTDaL7Sam9yupPVvAaRyYLcAY9Mqwf5NtTJAEcVOSMZtKi5pr3ch4fgok\nfPSjaWhCrZPD2zsP67X4Tecas2uGYMBb4vxiM5w5SLFFajChBADGFjeRc7rV\nKbNFieLPoAsnt6fB4oxPXvXTnLugjM6auYN6Aa/Ma4A+ddWVLNu2SENbAZoO\n86C77kJ9OZb7ZWliO3phLdMMJFqnLFEeDIi1u1IVRQarExD9h01VFlYFVLU/\nC5ppAqtlPDOJMqhfs30n/Nlt5sMbNarTuvHX/sBS/QQA9dZ2wDAwH6LLjtiy\n9n8tCtZ5H7qMVaXaboJ/PXHztnwpQWDCP2CqzUhK/ve/HwcKmkcpYwOI4v/d\n7Q4RevNOg0bLAUVJgy3oDINwUXnTKV8BWnJTaZuY7yBqSVbfxJQbosbrlADJ\nVz5//WPSqhEeo2Ga3vJx03V4+jZlSrg48qED/jf9hJbbvNLbSgYT/T0uZG+H\n8qDpHQRecLVhK10JVowXJoDX+di+htPTqUdMxdN8TllFYZlzMjcMpPslhhZo\nPBgWBClvfCY86Nvadc0BbFFT/oW8V5bYCikVDZ5r/ZKqxIopcwZX6203Aoqp\nZHFWFMi/E5ElVFxak7KJ+eDEqOVUPWDNGVRlc3QxIDx0ZXN0MUBleGFtcGxl\nLm5ldD7CwKsEEwEIAD4WIQTlg7RCGwswxMmb2A66kGcmgucQxwUCYmG17QIb\nAwUJB4YfbwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAhCRC6kGcmgucQxxYh\nBOWDtEIbCzDEyZvYDrqQZyaC5xDH6nIIALwOV7B5cUfSVJLZnPOr4xfzcmju\nQhDphSyp6OYnOvmsZkhVMn0e2kmWzpv51IkarWGzfLUMDUOFtQzft5cTgLo1\n0LoaTKnxEu1RPGLj2XYCMX6KwFrHdjOYVGoSR/FNGYRuh5xrauSwimotnfWD\nM9d9xR9Sab3ec2pgEnMb1jdsKD1GHt+UeHkopyu5RdkcrW60EgwhEHhWcYju\nDy8NMBKp0Z6hRW/C/9SylIWGeBSgeghMYDs1U0NC9ZnFQnnaWgYzlbAJT9DY\nbXjSbLT2IcSNlkLu0aN6GtXw25rRRTlPhUrtPJ++VOvuk1xTyCV7x+DF5w6p\ntNg7F6R8pwqkHWTHwtgEYmG17QEIAOKxKpX0Wrmd9usXRiU9twscaPmf7VKb\ncKRnN0RFkhOKKARhHX2qwp5bqDMe7k1032h1hHvmlD/a7wLw/da95EpOmUt7\n6mLw8vY/ZDxpbuO5MWBT/nK0y+KIhnouKQOL9z3RJNz4Pi3IZi+53yaFNrTj\nIYMp4uB9mzLdCXUHcvbGyE+IzAqO1Xs8mwMrIDQXf2YI3+QhmgdpfWIi89U+\n/juoVPseU7boosV/fFnNL2TNv0rP175+qZDP6JmBTJgoiSxyo18KwijZ/QQK\nFqzX7eNzT9mStCaWnBrIG2GKejf5MPXP/qhvKgwrbu0qpGX48PS2lnIpqIX2\nbDuAp/ELKLsAEQEAAQAH+wTcARhEGYpYgM47BcbGBVR4gEsAb32j1ahQiq1R\naHdcefH7zT5SYefqjDcOm4pGF2B7S0d0p1PBYNWt4NDVV4aYQCmPgHQsyzrM\nrjf1Tg7wxH1WtCsQvIYgoMzGQ2Wqo0i580ihVjq9ldoK6a8aj++nAjUvAq0r\njUPZktqcOfuFXHCeZpRICoUmPWdL6PYRpDZkETRbS+dsQbjwHSzS+uyubuP7\nVxdZvFT0QN6DTrfHlOjszs2dyoONuo/vrCmdCy/T6kEG9CABjNhZc8eWYWIj\nZ2YZQ3G194rGytEar6V36kqAxTeuwoyOgNvZ0DkyzuXQDA+vHn9Pb6BfVxC1\n+uEEAOtmpY85Ci7fm6lAiUmrEalmG/LNh9u7DxG0U/Cj9yKZseCcpgMyNOQh\nz3crXqK1UlFWXIN1xE+2Errmr5Zsm89IJZHwevwXwbGQXmZshC14H05+4Bia\nEJtd9P4j8v/lXD4Nmr3/uBRc5X37QUwF2pj6DqYSRhpCy/nzdnUuXsEDBAD2\nh20lUTkQSipzEXp7h98nKXlQJDPBB9wCFUpHsb88K1+L05KRUQ9U4BRhWgeM\n52WKf3YjXtng0gACBow9aDFqcGnYP/PJlqWZJme4mbE9BMY26jjpn70Dxy01\nGtnuZdpFt5hHFaNCEFZlWSL3gfsGzUrEUzr9mgVqCcBD7q9/6QP/UVSqKTgx\npd8bzVyj8ogzNo/OMqgstwlh7nIz3orCw2IArYTnO3qvObqqFNn/99hpZZPA\nIJc6vxjcSlWm/QJ9TOqgeaJH6aGqYY2oAoIUBBsWqzc0ANFlYBKXUidMEUP/\njiki2qrCbQAib/2tqXy6Om56mf0UcRpveqil+A0fR6c5jcLAkwQYAQgAJhYh\nBOWDtEIbCzDEyZvYDrqQZyaC5xDHBQJiYbXtAhsMBQkHhh9vACEJELqQZyaC\n5xDHFiEE5YO0QhsLMMTJm9gOupBnJoLnEMc5VQf+LFTcDfnygCyr8TKRPuLn\n9rUw5RTSxKLmiRIpTOkylzo+X3N5XetEor8PErYBvArM8PvNHpLYyMqVfJ1O\nmnjZ4UYQ8ikroG9ghi9KPVJ5xlhyI1XM4OnKk6+dtN6tXK4k435EsqfRdqT9\n4sbwvikcsU+YHtFH2nQelJXYPXNsg5KHrEN2k2pH9Bg8RAt1+hpRJQdmS0Jj\njshVSKKo8JORoT4WGM8wHYCuQrqX9TYhhvQzvb0rCB7MRRr6xRE1z3z9W2/e\nYnzBaHMdL3VhdPAPQtBZ63AoeCHwnMARe9Yv65diMmm7SKHrlDqRKqPZNARL\nqAcyYcY1rZf88Hcs0ubVCg==\n=p0Yj\n-----END PGP PRIVATE KEY BLOCK-----" + static let matchingEncryptedMsg = "-----BEGIN PGP MESSAGE-----\r\nVersion: FlowCrypt 6.9.2 Gmail Encryption\r\nComment: Seamlessly send and receive encrypted email\r\n\r\nwV4DCv5+q0kWfdoSAQdA59SzeKU0efRDXSuzoFGHMDdQMujqEQHEaD0AdD21\r\nF3MwAHBc7I5rQmf+h5YvPcG4AaLIIWuC05lUt2NSpk6WPixleHTlo87wNspC\r\n6mCcPBtmwV4D1pPs8ZqVF5kSAQdA5Fmry/eWkZ5BORCTa/HQE5FXple74KpE\r\n6iQBuG7ODzEwdOc33533LE9OehrvhpAsmrGVR7tQfct5UAWYq7Qj3SL/jgMq\r\nfBYJbvHCQFOoRR4VwcBMAwurnAGLJl0iAQf/Rst9i88egj3Ax1gMv+K06F9J\r\nzOw+McaGcc0ob0DO30IOa5OjOaAzjRxQqMLkbG9xQfhhDU0jUsYSP/AX6utf\r\nBDFjndvUcPnoTiP4vvxDuFot3w3K0p1wWqXOR9oUJCb2HpcmBMKUbiJ+qM2D\r\nf5a1McbZeWZJCngXwS7ty76X6xpfVFi/DzeHVe7ryohZPfGB7gCS3scD46Pj\r\nifjgwJhyDjYkCh16voLjWJMOuZdKDIURi7pdnD1C1MexR3gpF9lYuNjkbPvA\r\nmWzT4cBKOTpnmclX8+3wXZ0qPegWAJ1jN0nGHsQAm4MBR3hsM8qZO0FungZF\r\nr3K4WuWx+GK5uFL988HBTAMpGvuIPzZ0jgEP/2Fvg/dg9PbeFaqB3anxRecF\r\nBeaMx0837yqPFxMNz3A8VPR3N+KkjqyBXospe/mKqJcpVIz2KWuqQchgN7xd\r\ny6BzsJ5Nfimvht8nLInQhzp944pfSYeCSYKUAG9z2ZnTNYlzW/c8Ko719nx8\r\nzzukZPmHGJGy8tu3eTHRPyLCBzGJNmQpPw4q/D/SQuWndc/pGv25gWmJi0xn\r\n3+ZQXUPqCRNwc76kEdlLmA23GyHwZGwwoUs2Q9j7fmPx6WLusII4HeGwNKRb\r\nf3B8mFTESwObYnqxXaShPFVFmabUtcWAEmT7Mjw2S1JeOMkHzi7vNcxRY9ld\r\noSTrwL/JeN7N1OOhZr1ow8CByumsPZErB3LHVbNXN4nui8587KibqiNMMOMw\r\nmd28+x0NN8PyIyCwhaz2B+Ekbp3gwLESbqXWa65+HsRiUCE8DBVUrewJMI8y\r\niUcfFyuS+i45nbAeVDf9r4nhcGYoOgXn+ho63ayWVdv4hZtDjg7RO2+M2B2Y\r\norRXlqOtUwutTEXl7mHnfWd0Yi5TOgZOoHkkYhX7GSd9OlFcK91s15OsFWCM\r\nH0SPj5mPEFB73xIGO8oWFE3ZLddIOB98Y38lyHy6ygJ760mX7E0BKNY8zzlS\r\nM1q1NhXdgdUzAhYgvy9jERtdl+REQemvXmeq5u2wSUFwM6N81mlLEsi8T3bY\r\n0kkBas9hguq98M52EU2F887pCB8pcIKvvWmDfxdRda3J5Fs9VvBQN3rU0Mgv\r\nWGGc0+GRUZW/uq603ywgnzIiz2R2N9TS6xviZnhF\r\n=wtE6\r\n-----END PGP MESSAGE-----\r\n" static let mismatchEncryptedMsg = "-----BEGIN PGP MESSAGE-----\nVersion: FlowCrypt 6.9.1 Gmail Encryption\nComment: Seamlessly send and receive encrypted email\n\nwcFMAzBfgamu0SA1AQ//SmjzUxGcRf5+wlfm1HMldnoFZZUtNua4vdBhTa6X\nTdeHLbPL4cN9Jx9HvrqcH+L4j/2zjM7LiJuFeWdUbfmDQDcTx8UPPnC2i5vW\nizQIDvgJtRtybIpJgxgfFkXYo1P0Dqar3EVRMn3tfxHPax/ZXhr2yCEwg76D\nMZiUKRiWmBlmUw+mEM09YOgjOOhELtxyrrRDbZbv1dcb6KydEGrrsh0X091L\nKiAZdQfksg4NvvbbNdH8tUnpROHiBxD9RUqhsEsZOM0OzOPU+TpIgUgqFO52\nAuCVTurBdW7ZCPH+B0rrxDFBwcO+Pjl0wYOpm9+4LjvA6nlPa0tN/7/c5/z0\n/gV66q8GIxCYkDw+MIMcLWDLsMU6J9vzjC8fGQBnibzIMYeC/eJ5zmeHMo0U\nloA11IMVXnCR9NDS9b/5bJTUBIDABFQEKDjFPhRhD8c0khL9lbGvDzmpM9GZ\nMlz8IMbfQcpNkK65vjXYZuW8rPp0qZOOjkFg1CpUoYEk4VLsvECOLKGeCPz0\nRKWB3ar+l7xF5zxyF7QvMlnusHg2O4V7Z0Cbik06qCesTNNF1CBV77vSrSwN\nnpkXalTBCaJTAbhGrorBPrZf5N0AeVN8XpCgZHEeLkYKfBU8GAa1gOPuLOEn\nFoO3Pu6gvkvnke0/kMsSHYfDw6uzjsePm97fOM3MfkDBwUwDS1ov/OYtlQEB\nD/9NGt+sLI3adjz3SApw6r0so1Ewc6WRdHdjv1BWDPwncE6UCnSnqOonRqnb\n9p6kUC010C4ptw5hP/EL5dR1PEe1uomGcd2VtsRBDe8lreG652td4BebCH0Q\naKwLek+g3QazYpQ5ZDvPfWGB/ny9VrqGdFcpNKTdnvSrMeswSyvFdimWmDew\nLLmBOORaewlRaHAtYUJOfx75zGqCjN/MlPT8Z8MIDg7LnWh9/XANzT3gfkNH\n3UsdTqY7wm4AKxW5ukL1t1przXp1KjNjzQ/fZ8S/gbpYBBNxZ2uQF1ztyacX\nin+UTsUXbP7m94VOPMNDSoN82KUMI1NkOmWlHIyAT55Pt7FcQKp4HH8FBEpO\np/J+6TuIbHTP1Te+NQiwb4XGq5VGF+406bFqELPkcIYHBa4tbE5VLy+UT9Se\n84Lx+Jtf50b4Mw3otSEWoF6c37/4BnB75QgRRYnke5NcM/oS6DMIkETRWTJW\nHULwqRu7W3+4/SF3YhOvaFt+thejPaxHJEicTi6mLPaAIlCtHcH8dXbxy1th\nXVuvm0wlvBBf2JBmgN4e/nU6UxGUbfe4FbeU3RClcYISMFs55povkdMJfQKb\nqCGyfc1TPXfkq/DWiaWWHG+Vvi3oVgWV+DViQNY3OXiNlczZvjW4V01VVzoC\n0wPMSieBveFhGgrW+TZ6GSS4ZdJ5AaeVc8bQ2g3zsd2K1vWzYehIIlhSpMt3\nk4JCeFcP43qmKqZ5lTa5bPkGxCx30OkjBdjkTSNpiiGMlENZBCcp7X3hN3bj\neaDM/LDOwT+fgxgu6UMZBnO6Y6QYR0x3zJy5YAUaF/FBaaxaSrZoaQOnqeHq\nM1TcHBqYcA==\n=+4Oj\n-----END PGP MESSAGE-----" } diff --git a/appium/tests/specs/mock/setup/CheckRefreshKeyFromInvalidKey.spec.ts b/appium/tests/specs/mock/setup/CheckRefreshKeyFromInvalidKey.spec.ts deleted file mode 100644 index d3a27998a..000000000 --- a/appium/tests/specs/mock/setup/CheckRefreshKeyFromInvalidKey.spec.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { MockApi } from 'api-mocks/mock'; -import { - KeysScreen, - SetupKeyScreen, - SplashScreen, -} from '../../../screenobjects/all-screens'; -import { ekmKeySamples } from "../../../../api-mocks/apis/ekm/ekm-endpoints"; -import { CommonData } from "../../../data"; -import BaseScreen from "../../../screenobjects/base.screen"; -import AppiumHelper from "../../../helpers/AppiumHelper"; - -describe('SETUP: ', () => { - - it('EKM invalid key update error handled gracefully', async () => { - - const mockApi = new MockApi(); - const processArgs = CommonData.mockProcessArgs; - - mockApi.fesConfig = { - clientConfiguration: { - flags: ["NO_PRV_CREATE", "NO_PRV_BACKUP", "NO_ATTESTER_SUBMIT", "PRV_AUTOIMPORT_OR_AUTOGEN"], - key_manager_url: CommonData.keyManagerURL.mockServer, - } - }; - mockApi.ekmConfig = { - returnKeys: [ekmKeySamples.key0.prv] - } - - await mockApi.withMockedApis(async () => { - // stage 1 - setup - await SplashScreen.login(); - await SetupKeyScreen.setPassPhrase(); - await KeysScreen.openScreenFromSideMenu(); - await KeysScreen.checkKeysScreen([ekmKeySamples.key0]); - - // stage 2 - error shown to user - mockApi.ekmConfig = { - returnKeys: [ekmKeySamples.key0.prv.substring(0, 300)] - } - await AppiumHelper.restartApp(processArgs); - await BaseScreen.checkModalMessage(CommonData.refreshingKeysFromEkm.errorMessage); - await BaseScreen.clickOkButtonOnError(); - await KeysScreen.openScreenFromSideMenu(); - await KeysScreen.checkKeysScreen([ekmKeySamples.key0]); - }); - }); -}); diff --git a/package-lock.json b/package-lock.json index 6d897f9fc..9ad546950 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "ISC", "devDependencies": { "husky": "^8.0.1", - "lint-staged": "^12.4.3" + "lint-staged": "^13.0.0" } }, "node_modules/aggregate-error": { @@ -200,28 +200,55 @@ "dev": true }, "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", "dev": true, "dependencies": { "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/execa/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -247,12 +274,12 @@ } }, "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", "dev": true, "engines": { - "node": ">=10.17.0" + "node": ">=12.20.0" } }, "node_modules/husky": { @@ -301,12 +328,12 @@ } }, "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -328,16 +355,16 @@ } }, "node_modules/lint-staged": { - "version": "12.4.3", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.4.3.tgz", - "integrity": "sha512-eH6SKOmdm/ZwCRMTZAmM3q3dPkpq6vco/BfrOw8iGun4Xs/thYegPD/MLIwKO+iPkzibkLJuQcRhRLXKvaKreg==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.0.tgz", + "integrity": "sha512-vWban5utFt78VZohbosUxNIa46KKJ+KOQTDWTQ8oSl1DLEEVl9zhUtaQbiiydAmx+h2wKJK2d0+iMaRmknuWRQ==", "dev": true, "dependencies": { "cli-truncate": "^3.1.0", "colorette": "^2.0.16", "commander": "^9.3.0", "debug": "^4.3.4", - "execa": "^5.1.1", + "execa": "^6.1.0", "lilconfig": "2.0.5", "listr2": "^4.0.5", "micromatch": "^4.0.5", @@ -345,14 +372,13 @@ "object-inspect": "^1.12.2", "pidtree": "^0.5.0", "string-argv": "^0.3.1", - "supports-color": "^9.2.2", - "yaml": "^1.10.2" + "yaml": "^2.1.1" }, "bin": { "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^14.13.1 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/lint-staged" @@ -638,15 +664,30 @@ } }, "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, "dependencies": { - "path-key": "^3.0.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/object-inspect": { @@ -834,24 +875,15 @@ } }, "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-color": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", - "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/through": { @@ -988,12 +1020,12 @@ } }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", + "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 14" } } }, @@ -1129,20 +1161,37 @@ "dev": true }, "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", "dev": true, "requires": { "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + } } }, "fill-range": { @@ -1161,9 +1210,9 @@ "dev": true }, "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", "dev": true }, "husky": { @@ -1191,9 +1240,9 @@ "dev": true }, "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true }, "isexe": { @@ -1209,16 +1258,16 @@ "dev": true }, "lint-staged": { - "version": "12.4.3", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.4.3.tgz", - "integrity": "sha512-eH6SKOmdm/ZwCRMTZAmM3q3dPkpq6vco/BfrOw8iGun4Xs/thYegPD/MLIwKO+iPkzibkLJuQcRhRLXKvaKreg==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.0.tgz", + "integrity": "sha512-vWban5utFt78VZohbosUxNIa46KKJ+KOQTDWTQ8oSl1DLEEVl9zhUtaQbiiydAmx+h2wKJK2d0+iMaRmknuWRQ==", "dev": true, "requires": { "cli-truncate": "^3.1.0", "colorette": "^2.0.16", "commander": "^9.3.0", "debug": "^4.3.4", - "execa": "^5.1.1", + "execa": "^6.1.0", "lilconfig": "2.0.5", "listr2": "^4.0.5", "micromatch": "^4.0.5", @@ -1226,8 +1275,7 @@ "object-inspect": "^1.12.2", "pidtree": "^0.5.0", "string-argv": "^0.3.1", - "supports-color": "^9.2.2", - "yaml": "^1.10.2" + "yaml": "^2.1.1" } }, "listr2": { @@ -1434,12 +1482,20 @@ "dev": true }, "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, "requires": { - "path-key": "^3.0.0" + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + } } }, "object-inspect": { @@ -1567,15 +1623,9 @@ } }, "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "supports-color": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", - "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true }, "through": { @@ -1675,9 +1725,9 @@ } }, "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", + "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", "dev": true } } diff --git a/package.json b/package.json index e03a002ed..8a37d035e 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "homepage": "https://github.com/FlowCrypt/flowcrypt-ios#readme", "devDependencies": { "husky": "^8.0.1", - "lint-staged": "^12.4.3" + "lint-staged": "^13.0.0" }, "lint-staged": { "*.ts": [