1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147//
// Transaction.swift
// AuthenticationSdk
//
// Created by Shivam Nan on 01/09/25.
//
import Foundation
import UIKit
public final class Transaction {
private let messageVersion: String
private let directoryServerId: String?
private let cardNetwork: String?
private let transactionProvider: ThreeDSTransactionProvider
init(messageVersion: String, directoryServerId: String? = nil, cardNetwork: String? = nil, transactionProvider: ThreeDSTransactionProvider) {
self.messageVersion = messageVersion
self.directoryServerId = directoryServerId
self.cardNetwork = cardNetwork
self.transactionProvider = transactionProvider
}
public func getAuthenticationRequestParameters() async throws -> AuthenticationRequestParameters {
return try await transactionProvider.getAuthenticationRequestParameters()
}
public func doChallenge(
viewController: UIViewController,
challengeParameters: ChallengeParameters,
challengeStatusReceiver: ChallengeStatusReceiver,
timeOut: Int
) throws {
try transactionProvider.doChallenge(
viewController: viewController,
challengeParameters: challengeParameters,
challengeStatusReceiver: challengeStatusReceiver,
timeOut: timeOut
)
}
public func getProgressView() throws -> ProgressDialog {
// Return a default ProgressDialog since getProgressView is not available in the provider protocol
// TODO: implementation
return ProgressDialog()
}
public func close() {
transactionProvider.close()
}
}
public class ProgressDialog {
public func start() {}
public func stop() {}
}
public class AuthenticationRequestParameters {
final public let sdkTransactionID: String?
final public let deviceData: String?
final public let sdkEphemeralPublicKey: String?
final public let sdkAppID: String?
final public let sdkReferenceNumber: String?
final public let messageVersion: String?
final public let sdkEncryptedData: String?
init(
sdkTransactionID: String?,
deviceData: String?,
sdkEphemeralPublicKey: String?,
sdkAppID: String?,
sdkReferenceNumber: String?,
messageVersion: String?,
sdkEncryptedData: String?
) {
self.deviceData = deviceData
self.sdkTransactionID = sdkTransactionID
self.sdkEphemeralPublicKey = sdkEphemeralPublicKey
self.sdkAppID = sdkAppID
self.sdkReferenceNumber = sdkReferenceNumber
self.messageVersion = messageVersion
self.sdkEncryptedData = sdkEncryptedData
}
}
public class ChallengeParameters {
public let threeDSServerTransactionID: String
public let acsTransactionID: String
public let acsRefNumber: String
public let acsSignedContent: String
public let threeDSRequestorAppURL: String?
public init(threeDSServerTransactionID: String, acsTransactionID: String, acsRefNumber: String, acsSignedContent: String, threeDSRequestorAppURL: String? = nil) {
self.threeDSServerTransactionID = threeDSServerTransactionID
self.acsTransactionID = acsTransactionID
self.acsRefNumber = acsRefNumber
self.acsSignedContent = acsSignedContent
self.threeDSRequestorAppURL = threeDSRequestorAppURL
}
}
public class CompletionEvent {
public init() {}
}
public class ProtocolErrorEvent {
private let errorMessage: String
public init(errorMessage: String) {
self.errorMessage = errorMessage
}
public func getErrorMessage() -> String {
return errorMessage
}
}
public class RuntimeErrorEvent {
private let errorMessage: String
private let errorCode: String?
public init(errorMessage: String, errorCode: String? = nil) {
self.errorMessage = errorMessage
self.errorCode = errorCode
}
public func getErrorMessage() -> String {
return errorMessage
}
public func getErrorCode() -> String? {
return errorCode
}
}
public protocol ChallengeStatusReceiver {
func completed(_ completionEvent: CompletionEvent)
func cancelled()
func timedout()
func protocolError(_ protocolErrorEvent: ProtocolErrorEvent)
func runtimeError(_ runtimeErrorEvent: RuntimeErrorEvent)
}