diff --git a/app/App/Assets.xcassets/SVG/Fun.imageset/Contents.json b/app/App/Assets.xcassets/SVG/Fun.imageset/Contents.json
new file mode 100644
index 00000000..453696b4
--- /dev/null
+++ b/app/App/Assets.xcassets/SVG/Fun.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "Fun.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/app/App/Assets.xcassets/SVG/Fun.imageset/Fun.svg b/app/App/Assets.xcassets/SVG/Fun.imageset/Fun.svg
new file mode 100644
index 00000000..a7718671
--- /dev/null
+++ b/app/App/Assets.xcassets/SVG/Fun.imageset/Fun.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/App/Components/Line.swift b/app/App/Components/Line.swift
new file mode 100644
index 00000000..246a9ae8
--- /dev/null
+++ b/app/App/Components/Line.swift
@@ -0,0 +1,17 @@
+//
+// Line.swift
+// Vault
+//
+// Created by Charles Lanier on 03/07/2024.
+//
+
+import SwiftUI
+
+struct Line: Shape {
+ func path(in rect: CGRect) -> Path {
+ var path = Path()
+ path.move(to: CGPoint(x: 0, y: 0))
+ path.addLine(to: CGPoint(x: rect.width, y: 0))
+ return path
+ }
+}
diff --git a/app/App/Models/Model.swift b/app/App/Models/Model.swift
index 9037ff45..d28aaeb1 100644
--- a/app/App/Models/Model.swift
+++ b/app/App/Models/Model.swift
@@ -44,6 +44,8 @@ class Model: ObservableObject {
}
@Published var onRampQuoteId: String?
@Published var onRampTotalUsd: String?
+ @Published var estSubtotalUsd: Double = 0
+ @Published var stripeRedirectUrl: URL? = nil
// Sending USDC
@Published var recipient: Recipient?
@@ -108,10 +110,8 @@ class Model: ObservableObject {
private var currentTask: Task? {
willSet {
- print("Setting new task")
if let task = currentTask {
if task.isCancelled { return }
- print("Cancelling currnet task")
task.cancel()
// Setting a new task cancelling the current task
}
@@ -475,13 +475,10 @@ extension Model {
self.currentTask = Task {
let response = try! await withCheckedThrowingContinuation { (continuation: CheckedContinuation) in
VaultService.shared.send(GetFunkitStripeCheckoutQuote(address: self.address, amount: self.amount)) { result in
-
DispatchQueue.main.async {
-
switch result {
case .success(let response):
continuation.resume(returning: response)
- print(response.quoteId)
case .failure(let error):
// TODO: Handle error
@@ -492,15 +489,36 @@ extension Model {
}
// task has been cancelled
- if Task.isCancelled {
- print("Task has been cancelled, do nothing")
- return
- }
+ if Task.isCancelled { return }
self.isLoading = false
self.onRampQuoteId = response.quoteId
self.onRampTotalUsd = response.totalUsd
+ self.estSubtotalUsd = response.estSubtotalUsd
+ }
+ }
+
+ public func createOnrampCheckout() {
+ guard let quoteId = self.onRampQuoteId else { return }
+
+ VaultService.shared.send(
+ CreateFunkitStripeCheckout(
+ quoteId: quoteId,
+ parsedAmount: self.parsedAmount,
+ estSubtotalUsd: self.estSubtotalUsd
+ )
+ ) { result in
+ DispatchQueue.main.async {
+ switch result {
+ case .success(let response):
+ self.stripeRedirectUrl = URL(string: response.stripeRedirectUrl)
+
+ case .failure(let error):
+ // TODO: Handle error
+ print(error)
+ }
+ }
}
}
}
@@ -587,5 +605,8 @@ extension Model {
private func initiateOnramp() {
self.amount = "0"
self.onRampQuoteId = nil
+ self.onRampTotalUsd = nil
+ self.estSubtotalUsd = 0
+ self.stripeRedirectUrl = nil
}
}
diff --git a/app/App/Navigation/Core/Onramp/AskBirthDateView.swift b/app/App/Navigation/Core/Onramp/AskBirthDateView.swift
deleted file mode 100644
index 910501f2..00000000
--- a/app/App/Navigation/Core/Onramp/AskBirthDateView.swift
+++ /dev/null
@@ -1,75 +0,0 @@
-//
-// AskBirthDateView.swift
-// Vault
-//
-// Created by Charles Lanier on 01/07/2024.
-//
-
-import SwiftUI
-
-struct AskBirthDateView: View {
-
- @Environment(\.dismiss) var dismiss
-
- @AppStorage("birthDate") var birthDateTimestamp: TimeInterval = 0
-
- @State private var birthDate = Calendar.current.date(byAdding: .year, value: -20, to: Date())!
- @State private var presentingNextView = false
-
- private var maxAge = Calendar.current.date(byAdding: .year, value: -18, to: Date())!
-
- var body: some View {
- VStack {
- VStack(alignment: .center, spacing: 64) {
- VStack(alignment: .center, spacing: 24) {
- Text("Verify Your Age")
- .textTheme(.headlineLarge)
- .multilineTextAlignment(.center)
- .fixedSize(horizontal: false, vertical: true)
-
- Text("Enter your age to complete your profile.")
- .textTheme(.headlineSubtitle)
- .multilineTextAlignment(.center)
- .fixedSize(horizontal: false, vertical: true)
- }
-
- DatePicker(
- "",
- selection: self.$birthDate,
- in: ...maxAge,
- displayedComponents: .date
- )
- .datePickerStyle(.graphical)
-
- PrimaryButton("Next") {
- self.birthDateTimestamp = self.birthDate.timeIntervalSince1970
- self.presentingNextView = true
- }
- }
-
- Spacer()
- }
- .padding(EdgeInsets(top: 64, leading: 16, bottom: 32, trailing: 16))
- .defaultBackground()
- .navigationBarItems(
- leading: IconButton {
- self.dismiss()
- } icon: {
- Image(systemName: "chevron.left")
- .iconify()
- .fontWeight(.bold)
- }
- )
- .removeNavigationBarBorder()
- .navigationBarBackButtonHidden(true)
- .navigationDestination(isPresented: $presentingNextView) {
- AskHomeAddressView()
- }
- }
-}
-
-#Preview {
- NavigationStack {
- AskBirthDateView()
- }
-}
diff --git a/app/App/Navigation/Core/Onramp/AskEmailView.swift b/app/App/Navigation/Core/Onramp/AskEmailView.swift
deleted file mode 100644
index dbb7f123..00000000
--- a/app/App/Navigation/Core/Onramp/AskEmailView.swift
+++ /dev/null
@@ -1,69 +0,0 @@
-//
-// AskEmailView.swift
-// Vault
-//
-// Created by Charles Lanier on 01/07/2024.
-//
-
-import SwiftUI
-
-struct AskEmailView: View {
-
- @Environment(\.dismiss) var dismiss
-
- @AppStorage("email") var email: String = ""
-
- @State private var presentingNextView = false
-
- var body: some View {
- VStack {
- VStack(alignment: .center, spacing: 64) {
- VStack(alignment: .center, spacing: 24) {
- Text("Keep in the loop !")
- .textTheme(.headlineLarge)
- .multilineTextAlignment(.center)
- .fixedSize(horizontal: false, vertical: true)
-
- Text("Enter your email to receive important updates and confirmations.")
- .textTheme(.headlineSubtitle)
- .multilineTextAlignment(.center)
- .fixedSize(horizontal: false, vertical: true)
- }
-
- VStack(alignment: .center, spacing: 32) {
- TextInput("example@domain.com", text: self.$email, shouldFocusOnAppear: true)
- .keyboardType(.emailAddress)
-
- PrimaryButton("Next", disabled: !self.email.isValidEmail) {
- self.presentingNextView = true
- }
- }
- }
-
- Spacer()
- }
- .padding(EdgeInsets(top: 64, leading: 16, bottom: 32, trailing: 16))
- .defaultBackground()
- .navigationBarItems(
- leading: IconButton {
- self.dismiss()
- } icon: {
- Image(systemName: "chevron.left")
- .iconify()
- .fontWeight(.bold)
- }
- )
- .removeNavigationBarBorder()
- .navigationBarBackButtonHidden(true)
- .navigationBarTitleDisplayMode(.inline)
- .navigationDestination(isPresented: $presentingNextView) {
- AskFullNameView()
- }
- }
-}
-
-#Preview {
- NavigationStack {
- AskEmailView()
- }
-}
diff --git a/app/App/Navigation/Core/Onramp/AskFullNameView.swift b/app/App/Navigation/Core/Onramp/AskFullNameView.swift
deleted file mode 100644
index fa65d242..00000000
--- a/app/App/Navigation/Core/Onramp/AskFullNameView.swift
+++ /dev/null
@@ -1,67 +0,0 @@
-//
-// AskFullNameView.swift
-// Vault
-//
-// Created by Charles Lanier on 01/07/2024.
-//
-
-import SwiftUI
-
-struct AskFullNameView: View {
-
- @Environment(\.dismiss) var dismiss
-
- @AppStorage("firsName") var firstName: String = ""
- @AppStorage("lastName") var lastName: String = ""
-
- @State private var presentingNextView = false
-
- var body: some View {
- VStack {
- VStack(alignment: .center, spacing: 64) {
- VStack(alignment: .center, spacing: 24) {
- Text("Confirm your full name")
- .textTheme(.headlineLarge)
- .multilineTextAlignment(.center)
- .fixedSize(horizontal: false, vertical: true)
-
- Text("Please input your full name exactly as it is on your ID. This helps us keep your account secure.")
- .textTheme(.headlineSubtitle)
- .multilineTextAlignment(.center)
- .fixedSize(horizontal: false, vertical: true)
- }
-
- VStack(alignment: .center, spacing: 32) {
- VStack(alignment: .center, spacing: 16) {
- TextInput("John", text: self.$firstName, shouldFocusOnAppear: true)
-
- TextInput("Doe", text: self.$lastName)
- }
-
- PrimaryButton("Next", disabled: self.firstName.isEmpty || self.lastName.isEmpty) {
- self.presentingNextView = true
- }
- }
- }
-
- Spacer()
- }
- .padding(EdgeInsets(top: 64, leading: 16, bottom: 32, trailing: 16))
- .defaultBackground()
- .navigationBarItems(
- leading: IconButton {
- self.dismiss()
- } icon: {
- Image(systemName: "chevron.left")
- .iconify()
- .fontWeight(.bold)
- }
- )
- .removeNavigationBarBorder()
- .navigationBarBackButtonHidden(true)
- .navigationBarTitleDisplayMode(.inline)
- .navigationDestination(isPresented: $presentingNextView) {
- AskBirthDateView()
- }
- }
-}
diff --git a/app/App/Navigation/Core/Onramp/AskHomeAddress.swift b/app/App/Navigation/Core/Onramp/AskHomeAddress.swift
deleted file mode 100644
index 8c6765b4..00000000
--- a/app/App/Navigation/Core/Onramp/AskHomeAddress.swift
+++ /dev/null
@@ -1,69 +0,0 @@
-//
-// AskHomeAddress.swift
-// Vault
-//
-// Created by Charles Lanier on 02/07/2024.
-//
-
-import SwiftUI
-
-struct AskHomeAddressView: View {
-
- @Environment(\.dismiss) var dismiss
-
- @AppStorage("homeAddress") var homeAddress: String = ""
-
- @State private var presentingWebView = false
-
- private var maxAge = Calendar.current.date(byAdding: .year, value: -18, to: Date())!
-
- var body: some View {
- VStack {
- VStack(alignment: .center, spacing: 64) {
- VStack(alignment: .center, spacing: 24) {
- Text("Almost Finished !")
- .textTheme(.headlineLarge)
- .multilineTextAlignment(.center)
- .fixedSize(horizontal: false, vertical: true)
-
- Text("Enter your home address to complete your setup. We’ll take care of the rest.")
- .textTheme(.headlineSubtitle)
- .multilineTextAlignment(.center)
- .fixedSize(horizontal: false, vertical: true)
- }
-
- VStack(alignment: .center, spacing: 32) {
- TextInput("Address", text: self.$homeAddress, shouldFocusOnAppear: true)
-
- PrimaryButton("Next", disabled: self.homeAddress.isEmpty) {
- self.presentingWebView = true
- }
- }
- }
-
- Spacer()
- }
- .padding(EdgeInsets(top: 64, leading: 16, bottom: 32, trailing: 16))
- .defaultBackground()
- .navigationBarItems(
- leading: IconButton {
- self.dismiss()
- } icon: {
- Image(systemName: "chevron.left")
- .iconify()
- .fontWeight(.bold)
- }
- )
- .removeNavigationBarBorder()
- .navigationBarBackButtonHidden(true)
- .sheet(isPresented: self.$presentingWebView) {
- WebView(url: URL(string: "https://google.com")!)
- }
- }
-}
-
-#Preview {
- NavigationStack {
- AskHomeAddressView()
- }
-}
diff --git a/app/App/Navigation/Core/Onramp/OnrampAmountView.swift b/app/App/Navigation/Core/Onramp/OnrampAmountView.swift
index 30f48670..6160081c 100644
--- a/app/App/Navigation/Core/Onramp/OnrampAmountView.swift
+++ b/app/App/Navigation/Core/Onramp/OnrampAmountView.swift
@@ -66,7 +66,7 @@ struct OnrampAmountView: View {
.navigationBarTitleDisplayMode(.inline)
.navigationTitle("Select Amount")
.navigationDestination(isPresented: $presentingNextView) {
- AskEmailView()
+ OnrampStripeView()
}
.onChange(of: self.model.amount) {
self.model.getOnrampQuote()
diff --git a/app/App/Navigation/Core/Onramp/OnrampStripeView.swift b/app/App/Navigation/Core/Onramp/OnrampStripeView.swift
new file mode 100644
index 00000000..3caf13f4
--- /dev/null
+++ b/app/App/Navigation/Core/Onramp/OnrampStripeView.swift
@@ -0,0 +1,127 @@
+//
+// OnrampStripeView.swift
+// Vault
+//
+// Created by Charles Lanier on 01/07/2024.
+//
+
+import SwiftUI
+
+struct OnrampStripeView: View {
+
+ @Environment(\.dismiss) var dismiss
+
+ @EnvironmentObject private var model: Model
+
+ @State private var presentingNextView = false
+
+ var body: some View {
+ ZStack {
+ if let stripeRedirectUrl = self.model.stripeRedirectUrl {
+ WebView(url: stripeRedirectUrl)
+ } else {
+ VStack {
+ Spacer()
+
+ Spacer().frame(height: 32)
+
+ HStack {
+ Spacer(minLength: 24)
+
+ HStack {
+ Image(.logo)
+ .iconify()
+ .frame(width: 64)
+ .foregroundStyle(.background1)
+ .padding(.top, 8)
+ }
+ .frame(width: 100, height: 100)
+ .background(.neutral1)
+ .clipShape(Circle())
+
+ Line()
+ .stroke(style: StrokeStyle(lineWidth: 1, dash: [5]))
+ .frame(height: 1)
+
+ HStack {
+ Image(.fun)
+ .iconify()
+ .frame(width: 64)
+ .foregroundStyle(.background1)
+ .padding(.bottom, 8)
+ }
+ .frame(width: 100, height: 100)
+ .background(.neutral1)
+ .clipShape(Circle())
+
+ Spacer(minLength: 24)
+ }
+
+ Spacer().frame(height: 64)
+
+ VStack(spacing: 16) {
+ Text("Vault x Fun").textTheme(.headlineLarge)
+
+ Text("Please wait a few moments on this screen")
+ .textTheme(.headlineSubtitle)
+ .multilineTextAlignment(.center)
+ }
+
+ Spacer()
+
+ HStack(alignment: .center, spacing: 4) {
+ ZStack {
+ Image(systemName: "shield.fill").foregroundStyle(.accent)
+ .font(.system(size: 22))
+
+ Image(systemName: "lock.fill")
+ .padding(.bottom, 2)
+ .font(.system(size: 12))
+ .fontWeight(.bold)
+ .foregroundStyle(.neutral1)
+ }
+
+ Text("Payment secured by").textTheme(.bodyPrimary)
+
+ Text("Stripe")
+ .textTheme(.headlineMedium)
+ .padding(.top, 4)
+
+ Spacer().frame(width: 12)
+ }
+ }
+ .padding(EdgeInsets(top: 0, leading: 16, bottom: 8, trailing: 16))
+ }
+ }
+ .frame(maxWidth: .infinity, maxHeight: .infinity)
+ .onAppear {
+ self.model.createOnrampCheckout()
+ }
+ .navigationBarItems(
+ leading: IconButton {
+ self.dismiss()
+ } icon: {
+ Image(systemName: "chevron.left")
+ .iconify()
+ .fontWeight(.bold)
+ }
+ )
+ .defaultBackground()
+ .removeNavigationBarBorder()
+ .navigationBarBackButtonHidden(true)
+ .navigationBarTitleDisplayMode(.inline)
+ .navigationTitle("Checkout")
+ }
+}
+
+#if DEBUG
+struct OnrampStripeViewPreviews : PreviewProvider {
+
+ @StateObject static var model = Model()
+
+ static var previews: some View {
+ OnrampStripeView()
+ .environmentObject(self.model)
+ }
+}
+#endif
diff --git a/app/App/Services/VaultAPI/Models/FunkitStripeCheckout.swift b/app/App/Services/VaultAPI/Models/FunkitStripeCheckout.swift
new file mode 100644
index 00000000..34b31d4a
--- /dev/null
+++ b/app/App/Services/VaultAPI/Models/FunkitStripeCheckout.swift
@@ -0,0 +1,20 @@
+//
+// FunkitStripeCheckout.swift
+// Vault
+//
+// Created by Charles Lanier on 03/07/2024.
+//
+
+import Foundation
+
+
+public struct FunkitStripeCheckout: Decodable {
+ public let stripeCheckoutId: String
+ public let stripeRedirectUrl: String
+ public let funkitDepositAddress: String
+}
+
+
+//"stripeCheckoutId": "cos_1PVjoJCLFtXbeHljSqENG8EX",
+//"stripeRedirectUrl": "https://crypto.link.com?session_hash=CCwQARoXChVhY2N0XzFQMUM1aENMRnRYYmVIbGoo_8PtswYyBvLEArs-lzotpIVcOo5xRizqxo51f_a6heze3V8sZAGkN1KRsvkFrKnhSf084RfpQ4-Iws7u",
+//"funkitDepositAddress": "0
diff --git a/app/App/Services/VaultAPI/Requests/CreateFunkitStripeCheckout.swift b/app/App/Services/VaultAPI/Requests/CreateFunkitStripeCheckout.swift
new file mode 100644
index 00000000..aae76fb9
--- /dev/null
+++ b/app/App/Services/VaultAPI/Requests/CreateFunkitStripeCheckout.swift
@@ -0,0 +1,39 @@
+//
+// CreateFunkitStripeCheckout.swift
+// Vault
+//
+// Created by Charles Lanier on 03/07/2024.
+//
+
+import Foundation
+
+public struct CreateFunkitStripeCheckout: APIRequest {
+
+ public typealias Response = FunkitStripeCheckout
+
+ // Notice how we create a composed resourceName
+ public var resourceName: String {
+ return "create_funkit_stripe_checkout"
+ }
+
+ public var httpMethod: HTTPMethod {
+ return .POST
+ }
+
+ public var headers: [String : String] {
+ return ["Content-Type": "application/json"]
+ }
+
+ // Parameters
+ public let quoteId: String
+ public let paymentTokenAmount: Double
+ public let estSubtotalUsd: Double
+ public let isNy: Bool
+
+ public init(quoteId: String, parsedAmount: Double, estSubtotalUsd: Double) {
+ self.quoteId = quoteId
+ self.paymentTokenAmount = parsedAmount
+ self.estSubtotalUsd = estSubtotalUsd
+ self.isNy = false
+ }
+}
diff --git a/app/Vault.xcodeproj/project.pbxproj b/app/Vault.xcodeproj/project.pbxproj
index b199da35..125815d5 100644
--- a/app/Vault.xcodeproj/project.pbxproj
+++ b/app/Vault.xcodeproj/project.pbxproj
@@ -22,6 +22,9 @@
9C286B562C32E84200D27A9D /* OnrampAmountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C286B552C32E84200D27A9D /* OnrampAmountView.swift */; };
9C286B582C32EB9B00D27A9D /* OnrampView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C286B572C32EB9B00D27A9D /* OnrampView.swift */; };
9C2D8D522C35887E008D6174 /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C2D8D512C35887E008D6174 /* Placeholder.swift */; };
+ 9C2D8D542C35A582008D6174 /* CreateFunkitStripeCheckout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C2D8D532C35A582008D6174 /* CreateFunkitStripeCheckout.swift */; };
+ 9C2D8D562C35CA13008D6174 /* FunkitStripeCheckout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C2D8D552C35CA13008D6174 /* FunkitStripeCheckout.swift */; };
+ 9C2D8D582C360036008D6174 /* Line.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C2D8D572C360036008D6174 /* Line.swift */; };
9C2E73C32BF39635004FFFD1 /* BalanceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C2E73C22BF39635004FFFD1 /* BalanceView.swift */; };
9C2E73C52BF3CB86004FFFD1 /* Background.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C2E73C42BF3CB86004FFFD1 /* Background.swift */; };
9C4F45192BDE949D00D44CBE /* SecureEnclaveManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C4F45182BDE949D00D44CBE /* SecureEnclaveManager.swift */; };
@@ -100,11 +103,8 @@
9CD778D02BC43F7400BA4677 /* PhoneNumberKit in Frameworks */ = {isa = PBXBuildFile; productRef = 9CD778CF2BC43F7400BA4677 /* PhoneNumberKit */; };
9CD778D22BC4423C00BA4677 /* PhoneInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CD778D12BC4423C00BA4677 /* PhoneInput.swift */; };
9CD778D42BC4426D00BA4677 /* View+placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CD778D32BC4426D00BA4677 /* View+placeholder.swift */; };
- 9CDAF8362C32F98600BCFEDF /* AskEmailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAF8352C32F98600BCFEDF /* AskEmailView.swift */; };
- 9CDAF8382C32FAFD00BCFEDF /* AskFullNameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAF8372C32FAFD00BCFEDF /* AskFullNameView.swift */; };
- 9CDAF83A2C32FE1E00BCFEDF /* AskBirthDateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAF8392C32FE1E00BCFEDF /* AskBirthDateView.swift */; };
+ 9CDAF8362C32F98600BCFEDF /* OnrampStripeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAF8352C32F98600BCFEDF /* OnrampStripeView.swift */; };
9CDAF83C2C346D7C00BCFEDF /* String+Email.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAF83B2C346D7C00BCFEDF /* String+Email.swift */; };
- 9CDAF83E2C34AF8F00BCFEDF /* AskHomeAddress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAF83D2C34AF8F00BCFEDF /* AskHomeAddress.swift */; };
9CDAF8402C355CA100BCFEDF /* GetFunkitStripeCheckoutQuote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAF83F2C355CA100BCFEDF /* GetFunkitStripeCheckoutQuote.swift */; };
9CDAF8422C355E4100BCFEDF /* FunkitStripeCheckoutQuote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDAF8412C355E4100BCFEDF /* FunkitStripeCheckoutQuote.swift */; };
9CDD91B92C24129E00EA20CC /* VaultPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDD91B82C24129E00EA20CC /* VaultPage.swift */; };
@@ -161,6 +161,9 @@
9C286B552C32E84200D27A9D /* OnrampAmountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnrampAmountView.swift; sourceTree = ""; };
9C286B572C32EB9B00D27A9D /* OnrampView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnrampView.swift; sourceTree = ""; };
9C2D8D512C35887E008D6174 /* Placeholder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Placeholder.swift; sourceTree = ""; };
+ 9C2D8D532C35A582008D6174 /* CreateFunkitStripeCheckout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateFunkitStripeCheckout.swift; sourceTree = ""; };
+ 9C2D8D552C35CA13008D6174 /* FunkitStripeCheckout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FunkitStripeCheckout.swift; sourceTree = ""; };
+ 9C2D8D572C360036008D6174 /* Line.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Line.swift; sourceTree = ""; };
9C2E73C22BF39635004FFFD1 /* BalanceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalanceView.swift; sourceTree = ""; };
9C2E73C42BF3CB86004FFFD1 /* Background.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Background.swift; sourceTree = ""; };
9C4F45182BDE949D00D44CBE /* SecureEnclaveManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureEnclaveManager.swift; sourceTree = ""; };
@@ -239,11 +242,8 @@
9CD778CC2BC3115E00BA4677 /* PhoneValidationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhoneValidationView.swift; sourceTree = ""; };
9CD778D12BC4423C00BA4677 /* PhoneInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhoneInput.swift; sourceTree = ""; };
9CD778D32BC4426D00BA4677 /* View+placeholder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+placeholder.swift"; sourceTree = ""; };
- 9CDAF8352C32F98600BCFEDF /* AskEmailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AskEmailView.swift; sourceTree = ""; };
- 9CDAF8372C32FAFD00BCFEDF /* AskFullNameView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AskFullNameView.swift; sourceTree = ""; };
- 9CDAF8392C32FE1E00BCFEDF /* AskBirthDateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AskBirthDateView.swift; sourceTree = ""; };
+ 9CDAF8352C32F98600BCFEDF /* OnrampStripeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnrampStripeView.swift; sourceTree = ""; };
9CDAF83B2C346D7C00BCFEDF /* String+Email.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Email.swift"; sourceTree = ""; };
- 9CDAF83D2C34AF8F00BCFEDF /* AskHomeAddress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AskHomeAddress.swift; sourceTree = ""; };
9CDAF83F2C355CA100BCFEDF /* GetFunkitStripeCheckoutQuote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetFunkitStripeCheckoutQuote.swift; sourceTree = ""; };
9CDAF8412C355E4100BCFEDF /* FunkitStripeCheckoutQuote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FunkitStripeCheckoutQuote.swift; sourceTree = ""; };
9CDD91B82C24129E00EA20CC /* VaultPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VaultPage.swift; sourceTree = ""; };
@@ -360,10 +360,7 @@
children = (
9C286B552C32E84200D27A9D /* OnrampAmountView.swift */,
9C286B572C32EB9B00D27A9D /* OnrampView.swift */,
- 9CDAF8352C32F98600BCFEDF /* AskEmailView.swift */,
- 9CDAF8372C32FAFD00BCFEDF /* AskFullNameView.swift */,
- 9CDAF8392C32FE1E00BCFEDF /* AskBirthDateView.swift */,
- 9CDAF83D2C34AF8F00BCFEDF /* AskHomeAddress.swift */,
+ 9CDAF8352C32F98600BCFEDF /* OnrampStripeView.swift */,
);
path = Onramp;
sourceTree = "";
@@ -452,6 +449,7 @@
9CD0988B2C22E33800FDDD8F /* Transaction.swift */,
9C59C9452C30B35D0074F23B /* User.swift */,
9CDAF8412C355E4100BCFEDF /* FunkitStripeCheckoutQuote.swift */,
+ 9C2D8D552C35CA13008D6174 /* FunkitStripeCheckout.swift */,
);
path = Models;
sourceTree = "";
@@ -465,6 +463,7 @@
9CD098892C22E32300FDDD8F /* GetTransactionsHistory.swift */,
9C59C9432C30B2790074F23B /* GetUser.swift */,
9CDAF83F2C355CA100BCFEDF /* GetFunkitStripeCheckoutQuote.swift */,
+ 9C2D8D532C35A582008D6174 /* CreateFunkitStripeCheckout.swift */,
);
path = Requests;
sourceTree = "";
@@ -646,6 +645,7 @@
9CDFD4372BAB8934000466B9 /* Buttons.swift */,
9CD778AD2BBC1A7300BA4677 /* GraphView.swift */,
9C9098782C2AED57002A5833 /* ActivityView.swift */,
+ 9C2D8D572C360036008D6174 /* Line.swift */,
);
path = Components;
sourceTree = "";
@@ -823,7 +823,6 @@
9C62590A2BF79F8C0039DE9C /* NumPad.swift in Sources */,
9CE7A75B2BE12CBC008509FE /* Data+Hex.swift in Sources */,
9CD778BC2BBED06700BA4677 /* CustomTabBar.swift in Sources */,
- 9CDAF83E2C34AF8F00BCFEDF /* AskHomeAddress.swift in Sources */,
9C637CE02BB0C0E5005816B4 /* Input.swift in Sources */,
9CD778B02BBC1A9C00BA4677 /* View+if.swift in Sources */,
9C1C9D862C0D0F320028C8FD /* Uint256.swift in Sources */,
@@ -832,7 +831,6 @@
9CD7789F2BB185C200BA4677 /* CelebrationView.swift in Sources */,
9CDAF8402C355CA100BCFEDF /* GetFunkitStripeCheckoutQuote.swift in Sources */,
9CD390FB2BEAB6C600238FE9 /* WebView.swift in Sources */,
- 9CDAF83A2C32FE1E00BCFEDF /* AskBirthDateView.swift in Sources */,
9CDAF83C2C346D7C00BCFEDF /* String+Email.swift in Sources */,
9C09176F2C2573580068FAF5 /* Transactions.swift in Sources */,
9C1C9D962C105E3D0028C8FD /* Amount.swift in Sources */,
@@ -846,16 +844,19 @@
9C9F9EF12C22368200620AC6 /* Deployment.swift in Sources */,
9CD0988E2C22EBE500FDDD8F /* History.swift in Sources */,
9C9F9EF02C22368200620AC6 /* Balance.swift in Sources */,
+ 9C2D8D582C360036008D6174 /* Line.swift in Sources */,
9C1C9D8C2C0DEBAE0028C8FD /* CountryData.swift in Sources */,
9C09177B2C25D2810068FAF5 /* RequestingView.swift in Sources */,
9C286B562C32E84200D27A9D /* OnrampAmountView.swift in Sources */,
9CDFD4382BAB8934000466B9 /* Buttons.swift in Sources */,
+ 9C2D8D562C35CA13008D6174 /* FunkitStripeCheckout.swift in Sources */,
9C1C9D902C0F5DE40028C8FD /* Popover.swift in Sources */,
9C1C9D942C0FBA900028C8FD /* Avatar.swift in Sources */,
9C62591B2BFCF0650039DE9C /* SendingView.swift in Sources */,
9CDFD4432BADA297000466B9 /* BiometricAuthManager.swift in Sources */,
9CD778B62BBCB0DE00BA4677 /* Constants.swift in Sources */,
9CE7A75D2BE15C21008509FE /* SpinnerView.swift in Sources */,
+ 9C2D8D542C35A582008D6174 /* CreateFunkitStripeCheckout.swift in Sources */,
9C637CD92BB09710005816B4 /* NotificationsManager.swift in Sources */,
9C9F9EF92C22368200620AC6 /* VerifyOTP.swift in Sources */,
9C59C9462C30B35D0074F23B /* User.swift in Sources */,
@@ -896,7 +897,6 @@
9C637CDB2BB09C4D005816B4 /* Notification.swift in Sources */,
9CDFD4402BAD83E7000466B9 /* ThemedText.swift in Sources */,
9CD1BE8A2BCD4F5B0077A60B /* OTPInput.swift in Sources */,
- 9CDAF8382C32FAFD00BCFEDF /* AskFullNameView.swift in Sources */,
9CD778AE2BBC1A7300BA4677 /* GraphView.swift in Sources */,
9CD778C02BBF1E5C00BA4677 /* EdgeBorder.swift in Sources */,
9CDFD43C2BAC8BE6000466B9 /* FaceIDView.swift in Sources */,
@@ -915,7 +915,7 @@
9C6259082BF79F140039DE9C /* FancyAmount.swift in Sources */,
9C62591F2BFE56000039DE9C /* ContactRow.swift in Sources */,
9C5CFDAE2BC828C9001776E1 /* Model.swift in Sources */,
- 9CDAF8362C32F98600BCFEDF /* AskEmailView.swift in Sources */,
+ 9CDAF8362C32F98600BCFEDF /* OnrampStripeView.swift in Sources */,
9CD0988A2C22E32300FDDD8F /* GetTransactionsHistory.swift in Sources */,
9C9098792C2AED57002A5833 /* ActivityView.swift in Sources */,
9CD1BE982BD7C51A0077A60B /* PhoneNumber+Parse.swift in Sources */,