From 9b3c27bc6dfebcb9bd11c85464fa174686a4a6c3 Mon Sep 17 00:00:00 2001 From: Sandro Machado Date: Mon, 20 Nov 2017 17:07:42 +0000 Subject: [PATCH] Add verifications to User model --- Source/Model/User.swift | 8 +- Source/Model/User/VerificationParameter.swift | 44 ++++++++++ Source/Model/User/Verifications.swift | 80 +++++++++++++++++++ .../ClientTests/UpholdClientTest.swift | 50 ++++++++++++ .../ModelTests/UserTest.swift | 50 ++++++++++++ Tests/UtilTests/Fixtures.swift | 31 ++++++- UpholdSdk.xcodeproj/project.pbxproj | 16 +++- 7 files changed, 273 insertions(+), 6 deletions(-) create mode 100644 Source/Model/User/VerificationParameter.swift create mode 100644 Source/Model/User/Verifications.swift diff --git a/Source/Model/User.swift b/Source/Model/User.swift index 75b8508..f532c6b 100644 --- a/Source/Model/User.swift +++ b/Source/Model/User.swift @@ -39,6 +39,9 @@ open class User: BaseModel, Mappable { /// The user username. public private(set) final var username: String? + /// The user verifications. + public private(set) final var verifications: Verifications? + /** Constructor. @@ -53,8 +56,9 @@ open class User: BaseModel, Mappable { - parameter state: The user state. - parameter status: The user status. - parameter username: The user username. + - parameter verifications: The user verifications. */ - public init(country: String, currencies: [String], email: String, firstName: String, lastName: String, memberAt: String, name: String, settings: UserSettings, state: String, status: String, username: String) { + public init(country: String, currencies: [String], email: String, firstName: String, lastName: String, memberAt: String, name: String, settings: UserSettings, state: String, status: String, username: String, verifications: Verifications) { self.country = country self.currencies = currencies self.email = email @@ -66,6 +70,7 @@ open class User: BaseModel, Mappable { self.state = state self.status = status self.username = username + self.verifications = verifications } // MARK: Required by the ObjectMapper. @@ -95,6 +100,7 @@ open class User: BaseModel, Mappable { self.state <- map["state"] self.status <- map["status"] self.username <- map["username"] + self.verifications <- map["verifications"] } /** diff --git a/Source/Model/User/VerificationParameter.swift b/Source/Model/User/VerificationParameter.swift new file mode 100644 index 0000000..b50be93 --- /dev/null +++ b/Source/Model/User/VerificationParameter.swift @@ -0,0 +1,44 @@ +import Foundation +import ObjectMapper + +/// Verification parameter model. +open class VerificationParameter: Mappable { + + /// The reason of the verification. + public private(set) final var reason: String? + + /// The status of the verification. + public private(set) final var status: String? + + /** + Constructor. + + - parameter reason: The reason for the verification. + - parameter status: The status of the verification. + */ + public init(reason: String, status: String) { + self.reason = reason + self.status = status + } + + // MARK: Required by the ObjectMapper. + + /** + Constructor. + + - parameter map: Mapping data object. + */ + required public init?(map: Map) { + } + + /** + Maps the JSON to the Object. + + - parameter map: The object to map. + */ + open func mapping(map: Map) { + reason <- map["reason"] + status <- map["status"] + } + +} diff --git a/Source/Model/User/Verifications.swift b/Source/Model/User/Verifications.swift new file mode 100644 index 0000000..b0013ef --- /dev/null +++ b/Source/Model/User/Verifications.swift @@ -0,0 +1,80 @@ +import Foundation +import ObjectMapper + +/// Verifications model. +open class Verifications: Mappable { + + /// The address verification. + public private(set) final var address: VerificationParameter? + + /// The birthdate verification. + public private(set) final var birthdate: VerificationParameter? + + /// The documents verification. + public private(set) final var documents: VerificationParameter? + + /// The email verification. + public private(set) final var email: VerificationParameter? + + /// The identity verification. + public private(set) final var identity: VerificationParameter? + + /// The location verification. + public private(set) final var location: VerificationParameter? + + /// The phone verification. + public private(set) final var phone: VerificationParameter? + + /// The terms verification. + public private(set) final var terms: VerificationParameter? + + /** + Constructor. + + - parameter address: The address verification. + - parameter birthdate: The birthdate verification. + - parameter documents: The documents verification. + - parameter email: The email verification. + - parameter identity: The identity verification. + - parameter location: The location verification. + - parameter phone: The phone verification. + - parameter terms: The terms verification. + */ + public init(address: VerificationParameter?, birthdate: VerificationParameter?, documents: VerificationParameter?, email: VerificationParameter?, identity: VerificationParameter?, location: VerificationParameter?, phone: VerificationParameter?, terms: VerificationParameter?) { + self.address = address + self.birthdate = birthdate + self.documents = documents + self.email = email + self.identity = identity + self.location = location + self.phone = phone + self.terms = terms + } + + // MARK: Required by the ObjectMapper. + + /** + Constructor. + + - parameter map: Mapping data object. + */ + required public init?(map: Map) { + } + + /** + Maps the JSON to the Object. + + - parameter map: The object to map. + */ + open func mapping(map: Map) { + address <- map["address"] + birthdate <- map["birthdate"] + documents <- map["documents"] + email <- map["email"] + identity <- map["identity"] + location <- map["location"] + phone <- map["phone"] + terms <- map["terms"] + } + +} diff --git a/Tests/IntegrationTests/ClientTests/UpholdClientTest.swift b/Tests/IntegrationTests/ClientTests/UpholdClientTest.swift index ba09029..688b432 100644 --- a/Tests/IntegrationTests/ClientTests/UpholdClientTest.swift +++ b/Tests/IntegrationTests/ClientTests/UpholdClientTest.swift @@ -215,6 +215,40 @@ class UpholdClientTest: UpholdTestCase { "}" + "}" + "}" + + "}," + + "\"verifications\": {" + + "\"address\": {" + + "\"reason\": \"foo\"," + + "\"status\": \"bar\"" + + "}," + + "\"birthdate\": {" + + "\"reason\": \"fiz\"," + + "\"status\": \"biz\"" + + "}," + + "\"documents\": {" + + "\"reason\": \"fuz\"," + + "\"status\": \"buz\"" + + "}," + + "\"email\": {" + + "\"reason\": \"foobar\"," + + "\"status\": \"foobuz\"" + + "}," + + "\"identity\": {" + + "\"reason\": \"bar\"," + + "\"status\": \"biz\"" + + "}," + + "\"location\": {" + + "\"reason\": \"biz\"," + + "\"status\": \"buz\"" + + "}," + + "\"phone\": {" + + "\"reason\": \"fizbuz\"," + + "\"status\": \"fuzbuz\"" + + "}," + + "\"terms\": {" + + "\"reason\": \"foobar\"," + + "\"status\": \"fizbiz\"" + + "}" + "}" + "}" let client = MockUpholdClient(bearerToken: "foobar") @@ -242,6 +276,22 @@ class UpholdClientTest: UpholdTestCase { XCTAssertEqual(user.state, "FOO", "Failed: User name didn't match.") XCTAssertEqual(user.status, "ok", "Failed: User name didn't match.") XCTAssertEqual(user.username, "foobar", "Failed: User name didn't match.") + XCTAssertEqual(user.verifications!.address?.reason, "foo", "Failed: Address reason didn't match.") + XCTAssertEqual(user.verifications!.address?.status, "bar", "Failed: Address status didn't match.") + XCTAssertEqual(user.verifications!.birthdate?.reason, "fiz", "Failed: Birthdate reason didn't match.") + XCTAssertEqual(user.verifications!.birthdate?.status, "biz", "Failed: Birthdate status didn't match.") + XCTAssertEqual(user.verifications!.documents?.reason, "fuz", "Failed: Documents reason didn't match.") + XCTAssertEqual(user.verifications!.documents?.status, "buz", "Failed: Documents status didn't match.") + XCTAssertEqual(user.verifications!.email?.reason, "foobar", "Failed: Email reason didn't match.") + XCTAssertEqual(user.verifications!.email?.status, "foobuz", "Failed: Email status didn't match.") + XCTAssertEqual(user.verifications!.identity?.reason, "bar", "Failed: Identity reason didn't match.") + XCTAssertEqual(user.verifications!.identity?.status, "biz", "Failed: Identity status didn't match.") + XCTAssertEqual(user.verifications!.location?.reason, "biz", "Failed: Location reason didn't match.") + XCTAssertEqual(user.verifications!.location?.status, "buz", "Failed: Location status didn't match.") + XCTAssertEqual(user.verifications!.phone?.reason, "fizbuz", "Failed: Phone reason didn't match.") + XCTAssertEqual(user.verifications!.phone?.status, "fuzbuz", "Failed: Phone status didn't match.") + XCTAssertEqual(user.verifications!.terms?.reason, "foobar", "Failed: Terms reason didn't match.") + XCTAssertEqual(user.verifications!.terms?.status, "fizbiz", "Failed: Terms status didn't match.") testExpectation.fulfill() }.catch(execute: { (_: Error) in diff --git a/Tests/IntegrationTests/ModelTests/UserTest.swift b/Tests/IntegrationTests/ModelTests/UserTest.swift index b548ca1..bbb50db 100644 --- a/Tests/IntegrationTests/ModelTests/UserTest.swift +++ b/Tests/IntegrationTests/ModelTests/UserTest.swift @@ -727,6 +727,40 @@ class UserTest: UpholdTestCase { "}" + "}" + "}" + + "}," + + "\"verifications\": {" + + "\"address\": {" + + "\"reason\": \"foo\"," + + "\"status\": \"bar\"" + + "}," + + "\"birthdate\": {" + + "\"reason\": \"fiz\"," + + "\"status\": \"biz\"" + + "}," + + "\"documents\": {" + + "\"reason\": \"fuz\"," + + "\"status\": \"buz\"" + + "}," + + "\"email\": {" + + "\"reason\": \"foobar\"," + + "\"status\": \"foobuz\"" + + "}," + + "\"identity\": {" + + "\"reason\": \"bar\"," + + "\"status\": \"biz\"" + + "}," + + "\"location\": {" + + "\"reason\": \"biz\"," + + "\"status\": \"buz\"" + + "}," + + "\"phone\": {" + + "\"reason\": \"fizbuz\"," + + "\"status\": \"fuzbuz\"" + + "}," + + "\"terms\": {" + + "\"reason\": \"foobar\"," + + "\"status\": \"fizbiz\"" + + "}" + "}" + "}" let user = Mapper().map(JSONString: json) @@ -751,6 +785,22 @@ class UserTest: UpholdTestCase { XCTAssertEqual(user!.state!, "FOO", "Failed: User name didn't match.") XCTAssertEqual(user!.status!, "ok", "Failed: User name didn't match.") XCTAssertEqual(user!.username!, "foobar", "Failed: User name didn't match.") + XCTAssertEqual(user!.verifications!.address!.reason, "foo", "Failed: Address reason didn't match.") + XCTAssertEqual(user!.verifications!.address!.status, "bar", "Failed: Address status didn't match.") + XCTAssertEqual(user!.verifications!.birthdate!.reason, "fiz", "Failed: Birthdate reason didn't match.") + XCTAssertEqual(user!.verifications!.birthdate!.status, "biz", "Failed: Birthdate status didn't match.") + XCTAssertEqual(user!.verifications!.documents!.reason, "fuz", "Failed: Documents reason didn't match.") + XCTAssertEqual(user!.verifications!.documents!.status, "buz", "Failed: Documents status didn't match.") + XCTAssertEqual(user!.verifications!.email!.reason, "foobar", "Failed: Email reason didn't match.") + XCTAssertEqual(user!.verifications!.email!.status, "foobuz", "Failed: Email status didn't match.") + XCTAssertEqual(user!.verifications!.identity!.reason, "bar", "Failed: Identity reason didn't match.") + XCTAssertEqual(user!.verifications!.identity!.status, "biz", "Failed: Identity status didn't match.") + XCTAssertEqual(user!.verifications!.location!.reason, "biz", "Failed: Location reason didn't match.") + XCTAssertEqual(user!.verifications!.location!.status, "buz", "Failed: Location status didn't match.") + XCTAssertEqual(user!.verifications!.phone!.reason, "fizbuz", "Failed: Phone reason didn't match.") + XCTAssertEqual(user!.verifications!.phone!.status, "fuzbuz", "Failed: Phone status didn't match.") + XCTAssertEqual(user!.verifications!.terms!.reason, "foobar", "Failed: Terms reason didn't match.") + XCTAssertEqual(user!.verifications!.terms!.status, "fizbiz", "Failed: Terms status didn't match.") } } diff --git a/Tests/UtilTests/Fixtures.swift b/Tests/UtilTests/Fixtures.swift index fe1c18f..d746e33 100644 --- a/Tests/UtilTests/Fixtures.swift +++ b/Tests/UtilTests/Fixtures.swift @@ -245,7 +245,23 @@ public class Fixtures { "state": faker.address.stateAbbreviation(), "status": faker.lorem.characters(amount: 10), "theme": faker.lorem.characters(amount: 10), - "username": faker.lorem.characters(amount: 10) + "username": faker.lorem.characters(amount: 10), + "verificationsReasonAddress": faker.lorem.characters(amount: 10), + "verificationsReasonBirthdate": faker.lorem.characters(amount: 10), + "verificationsReasonDocuments": faker.lorem.characters(amount: 10), + "verificationsReasonEmail": faker.lorem.characters(amount: 10), + "verificationsReasonIdentity": faker.lorem.characters(amount: 10), + "verificationsReasonLocation": faker.lorem.characters(amount: 10), + "verificationsReasonPhone": faker.lorem.characters(amount: 10), + "verificationsReasonTerms": faker.lorem.characters(amount: 10), + "verificationsStatusAddress": faker.lorem.characters(amount: 10), + "verificationsStatusBirthdate": faker.lorem.characters(amount: 10), + "verificationsStatusDocuments": faker.lorem.characters(amount: 10), + "verificationsStatusEmail": faker.lorem.characters(amount: 10), + "verificationsStatusIdentity": faker.lorem.characters(amount: 10), + "verificationsStatusLocation": faker.lorem.characters(amount: 10), + "verificationsStatusPhone": faker.lorem.characters(amount: 10), + "verificationsStatusTerms": faker.lorem.characters(amount: 10) ] if let fields = fields { @@ -258,8 +274,17 @@ public class Fixtures { let internationalizationUserSettings = InternationalizationUserSettings(language: internationalizationUserSettingLanguage, dateTimeFormat: internationalizationUserSettingDateTimeFormat, numberFormat: internationalizationUserSettingNumberFormat) let otp = Otp(login: Login(enabled: NSString(string: fakerFields["settingsOTPLogin"]!).boolValue), transactions: Transactions(send: Send(enabled: NSString(string: fakerFields["settingsOTPTransactionsSend"]!).boolValue), transfer: Transfer(enabled: NSString(string: fakerFields["settingsOTPTransactionsTransfer"]!).boolValue), withdraw: Withdraw(crypto: Crypto(enabled: NSString(string: fakerFields["settingsOTPTransactionsWithdrawCrypto"]!).boolValue)))) let userSettings = UserSettings(currency: fakerFields["currency"]!, hasNewsSubscription: NSString(string: fakerFields["hasNewsSubscription"]!).boolValue, intl: internationalizationUserSettings, otp: otp, theme: fakerFields["theme"]!) - - return User(country: fakerFields["country"]!, currencies: fakerFields["currencies"]!.components(separatedBy: ","), email: fakerFields["email"]!, firstName: fakerFields["firstName"]!, lastName: fakerFields["lastName"]!, memberAt: fakerFields["memberAt"]!, name: fakerFields["name"]!, settings: userSettings, state: fakerFields["state"]!, status: fakerFields["status"]!, username: fakerFields["username"]!) + let addressVerifications = VerificationParameter(reason: fakerFields["verificationsReasonAddress"]!, status: fakerFields["verificationsStatusAddress"]!) + let birthdateVerifications = VerificationParameter(reason: fakerFields["verificationsReasonBirthdate"]!, status: fakerFields["verificationsStatusBirthdate"]!) + let documentsVerifications = VerificationParameter(reason: fakerFields["verificationsReasonDocuments"]!, status: fakerFields["verificationsStatusDocuments"]!) + let emailVerifications = VerificationParameter(reason: fakerFields["verificationsReasonEmail"]!, status: fakerFields["verificationsStatusEmail"]!) + let identityVerifications = VerificationParameter(reason: fakerFields["verificationsReasonIdentity"]!, status: fakerFields["verificationsStatusIdentity"]!) + let locationVerifications = VerificationParameter(reason: fakerFields["verificationsReasonLocation"]!, status: fakerFields["verificationsStatusLocation"]!) + let phoneVerifications = VerificationParameter(reason: fakerFields["verificationsReasonPhone"]!, status: fakerFields["verificationsStatusPhone"]!) + let termsVerifications = VerificationParameter(reason: fakerFields["verificationsReasonTerms"]!, status: fakerFields["verificationsStatusTerms"]!) + let verifications = Verifications(address: addressVerifications, birthdate: birthdateVerifications, documents: documentsVerifications, email: emailVerifications, identity: identityVerifications, location: locationVerifications, phone: phoneVerifications, terms: termsVerifications) + + return User(country: fakerFields["country"]!, currencies: fakerFields["currencies"]!.components(separatedBy: ","), email: fakerFields["email"]!, firstName: fakerFields["firstName"]!, lastName: fakerFields["lastName"]!, memberAt: fakerFields["memberAt"]!, name: fakerFields["name"]!, settings: userSettings, state: fakerFields["state"]!, status: fakerFields["status"]!, username: fakerFields["username"]!, verifications: verifications) } } diff --git a/UpholdSdk.xcodeproj/project.pbxproj b/UpholdSdk.xcodeproj/project.pbxproj index cc3e4d0..75be8c6 100644 --- a/UpholdSdk.xcodeproj/project.pbxproj +++ b/UpholdSdk.xcodeproj/project.pbxproj @@ -15,6 +15,10 @@ 2A6DB55D1D1ECB1A00D98D32 /* AddressRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A6DB55B1D1ECB1A00D98D32 /* AddressRequest.swift */; }; 2A75796E1E9B9C670071BBCA /* Document.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A75796D1E9B9C670071BBCA /* Document.swift */; }; 2A75796F1E9B9C670071BBCA /* Document.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A75796D1E9B9C670071BBCA /* Document.swift */; }; + 2ABB18FA1FC3282E0098A87D /* VerificationParameter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ABB18F91FC3282E0098A87D /* VerificationParameter.swift */; }; + 2ABB18FB1FC3282E0098A87D /* VerificationParameter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ABB18F91FC3282E0098A87D /* VerificationParameter.swift */; }; + 2ABB18FD1FC3294D0098A87D /* Verifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ABB18FC1FC3294D0098A87D /* Verifications.swift */; }; + 2ABB18FE1FC3294D0098A87D /* Verifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ABB18FC1FC3294D0098A87D /* Verifications.swift */; }; BC02EB191C10503C00FCA0D9 /* TransactionRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC02EB181C10503C00FCA0D9 /* TransactionRequest.swift */; }; BC02EB1B1C1051B500FCA0D9 /* TransactionDenominationRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC02EB1A1C1051B500FCA0D9 /* TransactionDenominationRequest.swift */; }; BC0C90231C4CF40400AD0F99 /* OAuth2ServiceTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC0C90221C4CF40400AD0F99 /* OAuth2ServiceTest.swift */; }; @@ -265,6 +269,8 @@ 2A6DB5581D1ECAC900D98D32 /* Address.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Address.swift; sourceTree = ""; }; 2A6DB55B1D1ECB1A00D98D32 /* AddressRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddressRequest.swift; sourceTree = ""; }; 2A75796D1E9B9C670071BBCA /* Document.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Document.swift; sourceTree = ""; }; + 2ABB18F91FC3282E0098A87D /* VerificationParameter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerificationParameter.swift; sourceTree = ""; }; + 2ABB18FC1FC3294D0098A87D /* Verifications.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Verifications.swift; sourceTree = ""; }; BC02EB181C10503C00FCA0D9 /* TransactionRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionRequest.swift; sourceTree = ""; }; BC02EB1A1C1051B500FCA0D9 /* TransactionDenominationRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionDenominationRequest.swift; sourceTree = ""; }; BC0C90221C4CF40400AD0F99 /* OAuth2ServiceTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OAuth2ServiceTest.swift; sourceTree = ""; }; @@ -547,13 +553,15 @@ BC2381581BB4626F0060CC80 /* User */ = { isa = PBXGroup; children = ( - BCF4D3811C62116900E4BDDA /* Settings */, BC41104E1C05E68E0063761C /* Contact.swift */, BC41104F1C05E68E0063761C /* ContactRequest.swift */, - BC4110501C05E68E0063761C /* Phone.swift */, BC2381591BB4626F0060CC80 /* InternationalizationUserSetting.swift */, BC23815A1BB4626F0060CC80 /* InternationalizationUserSettings.swift */, + BC4110501C05E68E0063761C /* Phone.swift */, + BCF4D3811C62116900E4BDDA /* Settings */, BC23815B1BB4626F0060CC80 /* UserSettings.swift */, + 2ABB18F91FC3282E0098A87D /* VerificationParameter.swift */, + 2ABB18FC1FC3294D0098A87D /* Verifications.swift */, ); path = User; sourceTree = ""; @@ -1154,6 +1162,7 @@ BC4110481C05E6350063761C /* Balance.swift in Sources */, BC41104D1C05E6400063761C /* UserBalance.swift in Sources */, BC2333631CFCA13A007928FE /* TransactionCardDepositRequest.swift in Sources */, + 2ABB18FD1FC3294D0098A87D /* Verifications.swift in Sources */, BC91E8A11BECD8270074C538 /* DepositMovement.swift in Sources */, BC202DCC1C4420AE0069A230 /* AuthenticationResponse.swift in Sources */, BC2333601CFC8FA0007928FE /* TransactionDepositRequest.swift in Sources */, @@ -1184,6 +1193,7 @@ BC2381681BB4626F0060CC80 /* Rate.swift in Sources */, BCE7757E1C565F6A005CE55A /* MalformedUrlError.swift in Sources */, BC2381751BB4626F0060CC80 /* UserCardService.swift in Sources */, + 2ABB18FA1FC3282E0098A87D /* VerificationParameter.swift in Sources */, BCF4D38E1C62116900E4BDDA /* Send.swift in Sources */, BC13CA7C1C9B274100207DAC /* CardRequest.swift in Sources */, BC202DCA1C4420920069A230 /* AuthenticationRequest.swift in Sources */, @@ -1315,6 +1325,7 @@ BC5236A31C5A41120088B62D /* ConfigurationMissingError.swift in Sources */, BCC9D6D51C56377E00671171 /* NormalizedCard.swift in Sources */, BC2333641CFCA13A007928FE /* TransactionCardDepositRequest.swift in Sources */, + 2ABB18FE1FC3294D0098A87D /* Verifications.swift in Sources */, BCC9D6D61C56377E00671171 /* InternationalizationUserSetting.swift in Sources */, BCC9D6D71C56377E00671171 /* BadRequestError.swift in Sources */, BC2333611CFC8FA0007928FE /* TransactionDepositRequest.swift in Sources */, @@ -1345,6 +1356,7 @@ BCC9D6EB1C56377E00671171 /* NotFoundError.swift in Sources */, BCC9D6EC1C56377E00671171 /* Value.swift in Sources */, BCC9D6ED1C56377E00671171 /* Card.swift in Sources */, + 2ABB18FB1FC3282E0098A87D /* VerificationParameter.swift in Sources */, BCF4D38F1C62116900E4BDDA /* Send.swift in Sources */, BC13CA7D1C9B274100207DAC /* CardRequest.swift in Sources */, BCC9D6EE1C56377E00671171 /* UnhandledError.swift in Sources */,