@capawesome/capacitor-square-mobile-payments 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CapawesomeCapacitorSquareMobilePayments.podspec +17 -0
- package/Package.swift +30 -0
- package/README.md +1183 -0
- package/android/build.gradle +63 -0
- package/android/src/main/AndroidManifest.xml +7 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/SquareMobilePayments.java +774 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/SquareMobilePaymentsPlugin.java +460 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/CustomException.java +20 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/CustomExceptions.java +41 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/events/AvailableCardInputMethodsDidChangeEvent.java +27 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/events/PaymentDidCancelEvent.java +24 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/events/PaymentDidFailEvent.java +34 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/events/PaymentDidFinishEvent.java +22 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/events/ReaderDidChangeEvent.java +27 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/events/ReaderPairingDidFailEvent.java +28 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/events/ReaderWasAddedEvent.java +22 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/events/ReaderWasRemovedEvent.java +22 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/options/AuthorizeOptions.java +29 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/options/ForgetReaderOptions.java +29 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/options/InitializeOptions.java +29 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/options/Money.java +29 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/options/PaymentParameters.java +126 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/options/PromptParameters.java +47 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/options/RetryConnectionOptions.java +29 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/options/StartPaymentOptions.java +39 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/Card.java +51 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/CardPaymentDetails.java +30 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/GetAvailableCardInputMethodsResult.java +29 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/GetReadersResult.java +29 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/GetSettingsResult.java +28 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/IsAuthorizedResult.java +22 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/IsPairingInProgressResult.java +22 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/MoneyResult.java +27 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/Payment.java +87 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/ReaderInfo.java +82 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/UnavailableReasonInfo.java +30 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/interfaces/Callback.java +5 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/interfaces/EmptyCallback.java +5 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/interfaces/NonEmptyCallback.java +7 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/interfaces/NonEmptyResultCallback.java +7 -0
- package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/interfaces/Result.java +7 -0
- package/android/src/main/res/.gitkeep +0 -0
- package/dist/docs.json +2999 -0
- package/dist/esm/definitions.d.ts +1468 -0
- package/dist/esm/definitions.js +519 -0
- package/dist/esm/definitions.js.map +1 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/web.d.ts +21 -0
- package/dist/esm/web.js +55 -0
- package/dist/esm/web.js.map +1 -0
- package/dist/plugin.cjs.js +588 -0
- package/dist/plugin.cjs.js.map +1 -0
- package/dist/plugin.js +591 -0
- package/dist/plugin.js.map +1 -0
- package/ios/Plugin/Classes/Options/AuthorizeOptions.swift +17 -0
- package/ios/Plugin/Classes/Options/ForgetReaderOptions.swift +17 -0
- package/ios/Plugin/Classes/Options/InitializeOptions.swift +17 -0
- package/ios/Plugin/Classes/Options/Money.swift +12 -0
- package/ios/Plugin/Classes/Options/PaymentParameters.swift +49 -0
- package/ios/Plugin/Classes/Options/PromptParameters.swift +17 -0
- package/ios/Plugin/Classes/Options/RetryConnectionOptions.swift +17 -0
- package/ios/Plugin/Classes/Options/StartPaymentOptions.swift +19 -0
- package/ios/Plugin/Classes/Results/Card.swift +34 -0
- package/ios/Plugin/Classes/Results/CardPaymentDetails.swift +34 -0
- package/ios/Plugin/Classes/Results/GetAvailableCardInputMethodsResult.swift +16 -0
- package/ios/Plugin/Classes/Results/GetReadersResult.swift +16 -0
- package/ios/Plugin/Classes/Results/GetSettingsResult.swift +19 -0
- package/ios/Plugin/Classes/Results/IsAuthorizedResult.swift +16 -0
- package/ios/Plugin/Classes/Results/IsPairingInProgressResult.swift +16 -0
- package/ios/Plugin/Classes/Results/MoneyResult.swift +19 -0
- package/ios/Plugin/Classes/Results/Payment.swift +58 -0
- package/ios/Plugin/Classes/Results/ReaderInfo.swift +46 -0
- package/ios/Plugin/Classes/Results/UnavailableReasonInfo.swift +19 -0
- package/ios/Plugin/Enums/CustomError.swift +81 -0
- package/ios/Plugin/Info.plist +24 -0
- package/ios/Plugin/Protocols/Result.swift +6 -0
- package/ios/Plugin/SquareMobilePayments.swift +632 -0
- package/ios/Plugin/SquareMobilePaymentsHelper.swift +212 -0
- package/ios/Plugin/SquareMobilePaymentsPlugin.swift +347 -0
- package/package.json +93 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import Capacitor
|
|
3
|
+
import SquareMobilePaymentsSDK
|
|
4
|
+
|
|
5
|
+
public class SquareMobilePaymentsHelper {
|
|
6
|
+
|
|
7
|
+
// MARK: - Currency Conversion
|
|
8
|
+
|
|
9
|
+
public static func convertToCurrency(_ code: String) -> SquareMobilePaymentsSDK.Currency {
|
|
10
|
+
switch code.uppercased() {
|
|
11
|
+
case "USD": return .USD
|
|
12
|
+
case "CAD": return .CAD
|
|
13
|
+
case "AUD": return .AUD
|
|
14
|
+
case "GBP": return .GBP
|
|
15
|
+
case "EUR": return .EUR
|
|
16
|
+
case "JPY": return .JPY
|
|
17
|
+
default: return .USD
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// MARK: - ProcessingMode Conversion
|
|
22
|
+
|
|
23
|
+
public static func convertToProcessingMode(_ mode: String?) -> SquareMobilePaymentsSDK.ProcessingMode {
|
|
24
|
+
guard let mode = mode else {
|
|
25
|
+
return .autoDetect
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
switch mode.uppercased() {
|
|
29
|
+
case "AUTO_DETECT": return .autoDetect
|
|
30
|
+
case "ONLINE_ONLY": return .onlineOnly
|
|
31
|
+
case "OFFLINE_ONLY": return .offlineOnly
|
|
32
|
+
default: return .autoDetect
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// MARK: - PromptMode Conversion
|
|
37
|
+
|
|
38
|
+
public static func convertToPromptMode(_ mode: String?) -> SquareMobilePaymentsSDK.PromptMode {
|
|
39
|
+
guard let mode = mode else {
|
|
40
|
+
return .default
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
switch mode.uppercased() {
|
|
44
|
+
case "DEFAULT": return .default
|
|
45
|
+
case "CUSTOM": return .custom
|
|
46
|
+
default: return .default
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// MARK: - AdditionalMethods Conversion
|
|
51
|
+
|
|
52
|
+
public static func convertToAdditionalMethods(_ methods: [String]?) -> SquareMobilePaymentsSDK.AdditionalPaymentMethods {
|
|
53
|
+
guard let methods = methods, !methods.isEmpty else {
|
|
54
|
+
return AdditionalPaymentMethods()
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
var methodsArray: [AdditionalPaymentMethods] = []
|
|
58
|
+
|
|
59
|
+
for method in methods {
|
|
60
|
+
switch method.uppercased() {
|
|
61
|
+
case "KEYED": methodsArray.append(.keyed)
|
|
62
|
+
case "CASH": methodsArray.append(.cash)
|
|
63
|
+
default: break
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return AdditionalPaymentMethods(methodsArray)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// MARK: - DelayAction Conversion
|
|
71
|
+
|
|
72
|
+
public static func convertToDelayAction(_ action: String?) -> SquareMobilePaymentsSDK.DelayAction? {
|
|
73
|
+
guard let action = action else {
|
|
74
|
+
return nil
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
switch action.uppercased() {
|
|
78
|
+
case "COMPLETE": return .complete
|
|
79
|
+
case "CANCEL": return .cancel
|
|
80
|
+
default: return nil
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// MARK: - Reader Model Conversion
|
|
85
|
+
|
|
86
|
+
public static func convertReaderModel(_ model: SquareMobilePaymentsSDK.ReaderModel) -> String {
|
|
87
|
+
switch model {
|
|
88
|
+
case .contactlessAndChip: return "CONTACTLESS_AND_CHIP"
|
|
89
|
+
case .magstripe: return "MAGSTRIPE"
|
|
90
|
+
case .stand: return "STAND"
|
|
91
|
+
@unknown default: return "UNKNOWN"
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// MARK: - Reader Status Conversion
|
|
96
|
+
|
|
97
|
+
public static func convertReaderStatus(_ status: SquareMobilePaymentsSDK.ReaderStatus) -> String {
|
|
98
|
+
switch status {
|
|
99
|
+
case .ready: return "READY"
|
|
100
|
+
case .connectingToSquare: return "CONNECTING_TO_SQUARE"
|
|
101
|
+
case .connectingToDevice: return "CONNECTING_TO_DEVICE"
|
|
102
|
+
case .faulty: return "FAULTY"
|
|
103
|
+
case .readerUnavailable: return "READER_UNAVAILABLE"
|
|
104
|
+
@unknown default: return "READER_UNAVAILABLE"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// MARK: - Reader Change Conversion
|
|
109
|
+
|
|
110
|
+
public static func convertReaderChange(_ change: SquareMobilePaymentsSDK.ReaderChange) -> String {
|
|
111
|
+
switch change {
|
|
112
|
+
case .batteryDidBeginCharging: return "BATTERY_DID_BEGIN_CHARGING"
|
|
113
|
+
case .batteryDidEndCharging: return "BATTERY_DID_END_CHARGING"
|
|
114
|
+
case .batteryLevelDidChange: return "BATTERY_LEVEL_DID_CHANGE"
|
|
115
|
+
case .readerStatusDidChange: return "STATUS_DID_CHANGE"
|
|
116
|
+
@unknown default: return "STATUS_DID_CHANGE"
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// MARK: - Unavailable Reason Conversion
|
|
121
|
+
|
|
122
|
+
public static func convertUnavailableReason(_ reason: SquareMobilePaymentsSDK.ReaderUnavailableReason) -> String {
|
|
123
|
+
switch reason {
|
|
124
|
+
case .bluetoothFailure: return "BLUETOOTH_ERROR"
|
|
125
|
+
case .blockingFirmwareUpdate: return "FIRMWARE_UPDATE"
|
|
126
|
+
case .internalError: return "UNKNOWN"
|
|
127
|
+
@unknown default: return "UNKNOWN"
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// MARK: - Card Input Method Conversion
|
|
132
|
+
|
|
133
|
+
public static func convertCardInputMethods(_ methods: SquareMobilePaymentsSDK.CardInputMethods) -> [String] {
|
|
134
|
+
var result: [String] = []
|
|
135
|
+
|
|
136
|
+
if methods.contains(.contactless) { result.append("TAP") }
|
|
137
|
+
if methods.contains(.chip) { result.append("DIP") }
|
|
138
|
+
if methods.contains(.swipe) { result.append("SWIPE") }
|
|
139
|
+
|
|
140
|
+
return result
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
public static func convertCardInputMethodFromString(_ methodString: String?) -> String {
|
|
144
|
+
guard let methodString = methodString else {
|
|
145
|
+
return "TAP"
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
let upperMethod = methodString.uppercased()
|
|
149
|
+
if upperMethod.contains("CONTACTLESS") || upperMethod.contains("TAP") {
|
|
150
|
+
return "TAP"
|
|
151
|
+
} else if upperMethod.contains("CHIP") || upperMethod.contains("DIP") || upperMethod.contains("EMV") {
|
|
152
|
+
return "DIP"
|
|
153
|
+
} else if upperMethod.contains("SWIPE") || upperMethod.contains("MAG") {
|
|
154
|
+
return "SWIPE"
|
|
155
|
+
} else if upperMethod.contains("KEYED") || upperMethod.contains("MANUAL") {
|
|
156
|
+
return "KEYED"
|
|
157
|
+
}
|
|
158
|
+
return "TAP"
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// MARK: - Card Brand Conversion
|
|
162
|
+
|
|
163
|
+
public static func convertCardBrand(_ brand: SquareMobilePaymentsSDK.CardBrand) -> String {
|
|
164
|
+
switch brand {
|
|
165
|
+
case .visa: return "VISA"
|
|
166
|
+
case .mastercard: return "MASTERCARD"
|
|
167
|
+
case .americanExpress: return "AMERICAN_EXPRESS"
|
|
168
|
+
case .discover: return "DISCOVER"
|
|
169
|
+
case .discoverDiners: return "DISCOVER_DINERS"
|
|
170
|
+
case .jcb: return "JCB"
|
|
171
|
+
case .chinaUnionPay: return "UNION_PAY"
|
|
172
|
+
case .interac: return "INTERAC"
|
|
173
|
+
case .eftpos: return "EFTPOS"
|
|
174
|
+
case .unknown: return "OTHER"
|
|
175
|
+
@unknown default: return "OTHER"
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// MARK: - Payment Type Conversion
|
|
180
|
+
|
|
181
|
+
public static func convertPaymentType(_ payment: SquareMobilePaymentsSDK.Payment) -> String {
|
|
182
|
+
if payment is SquareMobilePaymentsSDK.OnlinePayment {
|
|
183
|
+
return "ONLINE"
|
|
184
|
+
} else if payment is SquareMobilePaymentsSDK.OfflinePayment {
|
|
185
|
+
return "OFFLINE"
|
|
186
|
+
}
|
|
187
|
+
return "ONLINE"
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// MARK: - Payment Status Conversion
|
|
191
|
+
|
|
192
|
+
public static func convertPaymentStatus(_ status: SquareMobilePaymentsSDK.PaymentStatus) -> String {
|
|
193
|
+
switch status {
|
|
194
|
+
case .completed: return "COMPLETED"
|
|
195
|
+
case .approved: return "APPROVED"
|
|
196
|
+
case .canceled: return "CANCELED"
|
|
197
|
+
case .failed: return "FAILED"
|
|
198
|
+
case .pending: return "PENDING"
|
|
199
|
+
@unknown default: return "PENDING"
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// MARK: - Environment Conversion
|
|
204
|
+
|
|
205
|
+
public static func convertEnvironment(_ environment: SquareMobilePaymentsSDK.Environment) -> String {
|
|
206
|
+
switch environment {
|
|
207
|
+
case .production: return "production"
|
|
208
|
+
case .sandbox: return "sandbox"
|
|
209
|
+
@unknown default: return "production"
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import Capacitor
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Please read the Capacitor iOS Plugin Development Guide
|
|
6
|
+
* here: https://capacitorjs.com/docs/plugins/ios
|
|
7
|
+
*/
|
|
8
|
+
@objc(SquareMobilePaymentsPlugin)
|
|
9
|
+
public class SquareMobilePaymentsPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
10
|
+
public static let tag = "SquareMobilePayments"
|
|
11
|
+
|
|
12
|
+
public let identifier = "SquareMobilePaymentsPlugin"
|
|
13
|
+
public let jsName = "SquareMobilePayments"
|
|
14
|
+
public let pluginMethods: [CAPPluginMethod] = [
|
|
15
|
+
CAPPluginMethod(name: "initialize", returnType: CAPPluginReturnPromise),
|
|
16
|
+
CAPPluginMethod(name: "authorize", returnType: CAPPluginReturnPromise),
|
|
17
|
+
CAPPluginMethod(name: "isAuthorized", returnType: CAPPluginReturnPromise),
|
|
18
|
+
CAPPluginMethod(name: "deauthorize", returnType: CAPPluginReturnPromise),
|
|
19
|
+
CAPPluginMethod(name: "showSettings", returnType: CAPPluginReturnPromise),
|
|
20
|
+
CAPPluginMethod(name: "getSettings", returnType: CAPPluginReturnPromise),
|
|
21
|
+
CAPPluginMethod(name: "startPairing", returnType: CAPPluginReturnPromise),
|
|
22
|
+
CAPPluginMethod(name: "stopPairing", returnType: CAPPluginReturnPromise),
|
|
23
|
+
CAPPluginMethod(name: "isPairingInProgress", returnType: CAPPluginReturnPromise),
|
|
24
|
+
CAPPluginMethod(name: "getReaders", returnType: CAPPluginReturnPromise),
|
|
25
|
+
CAPPluginMethod(name: "forgetReader", returnType: CAPPluginReturnPromise),
|
|
26
|
+
CAPPluginMethod(name: "retryConnection", returnType: CAPPluginReturnPromise),
|
|
27
|
+
CAPPluginMethod(name: "startPayment", returnType: CAPPluginReturnPromise),
|
|
28
|
+
CAPPluginMethod(name: "cancelPayment", returnType: CAPPluginReturnPromise),
|
|
29
|
+
CAPPluginMethod(name: "getAvailableCardInputMethods", returnType: CAPPluginReturnPromise),
|
|
30
|
+
CAPPluginMethod(name: "checkPermissions", returnType: CAPPluginReturnPromise),
|
|
31
|
+
CAPPluginMethod(name: "requestPermissions", returnType: CAPPluginReturnPromise)
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
public static let permissionLocation = "location"
|
|
35
|
+
public static let permissionBluetooth = "bluetooth"
|
|
36
|
+
|
|
37
|
+
private var implementation: SquareMobilePayments?
|
|
38
|
+
|
|
39
|
+
override public func load() {
|
|
40
|
+
self.implementation = SquareMobilePayments(plugin: self)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@objc func initialize(_ call: CAPPluginCall) {
|
|
44
|
+
do {
|
|
45
|
+
let options = try InitializeOptions(call)
|
|
46
|
+
|
|
47
|
+
try implementation?.initialize(options, completion: { error in
|
|
48
|
+
if let error = error {
|
|
49
|
+
self.rejectCall(call, error)
|
|
50
|
+
} else {
|
|
51
|
+
self.resolveCall(call)
|
|
52
|
+
}
|
|
53
|
+
})
|
|
54
|
+
} catch {
|
|
55
|
+
rejectCall(call, error)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@objc func authorize(_ call: CAPPluginCall) {
|
|
60
|
+
do {
|
|
61
|
+
let options = try AuthorizeOptions(call)
|
|
62
|
+
|
|
63
|
+
try implementation?.authorize(options, completion: { error in
|
|
64
|
+
if let error = error {
|
|
65
|
+
self.rejectCall(call, error)
|
|
66
|
+
} else {
|
|
67
|
+
self.resolveCall(call)
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
} catch {
|
|
71
|
+
rejectCall(call, error)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@objc func isAuthorized(_ call: CAPPluginCall) {
|
|
76
|
+
do {
|
|
77
|
+
try implementation?.isAuthorized(completion: { result, error in
|
|
78
|
+
if let error = error {
|
|
79
|
+
self.rejectCall(call, error)
|
|
80
|
+
} else {
|
|
81
|
+
self.resolveCall(call, result)
|
|
82
|
+
}
|
|
83
|
+
})
|
|
84
|
+
} catch {
|
|
85
|
+
rejectCall(call, error)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@objc func deauthorize(_ call: CAPPluginCall) {
|
|
90
|
+
do {
|
|
91
|
+
try implementation?.deauthorize(completion: { error in
|
|
92
|
+
if let error = error {
|
|
93
|
+
self.rejectCall(call, error)
|
|
94
|
+
} else {
|
|
95
|
+
self.resolveCall(call)
|
|
96
|
+
}
|
|
97
|
+
})
|
|
98
|
+
} catch {
|
|
99
|
+
rejectCall(call, error)
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@objc func showSettings(_ call: CAPPluginCall) {
|
|
104
|
+
do {
|
|
105
|
+
try implementation?.showSettings(completion: { error in
|
|
106
|
+
if let error = error {
|
|
107
|
+
self.rejectCall(call, error)
|
|
108
|
+
} else {
|
|
109
|
+
self.resolveCall(call)
|
|
110
|
+
}
|
|
111
|
+
})
|
|
112
|
+
} catch {
|
|
113
|
+
rejectCall(call, error)
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
@objc func getSettings(_ call: CAPPluginCall) {
|
|
118
|
+
do {
|
|
119
|
+
try implementation?.getSettings(completion: { result, error in
|
|
120
|
+
if let error = error {
|
|
121
|
+
self.rejectCall(call, error)
|
|
122
|
+
} else {
|
|
123
|
+
self.resolveCall(call, result)
|
|
124
|
+
}
|
|
125
|
+
})
|
|
126
|
+
} catch {
|
|
127
|
+
rejectCall(call, error)
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
@objc func startPairing(_ call: CAPPluginCall) {
|
|
132
|
+
do {
|
|
133
|
+
try implementation?.startPairing(completion: { error in
|
|
134
|
+
if let error = error {
|
|
135
|
+
self.rejectCall(call, error)
|
|
136
|
+
} else {
|
|
137
|
+
self.resolveCall(call)
|
|
138
|
+
}
|
|
139
|
+
})
|
|
140
|
+
} catch {
|
|
141
|
+
rejectCall(call, error)
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@objc func stopPairing(_ call: CAPPluginCall) {
|
|
146
|
+
do {
|
|
147
|
+
try implementation?.stopPairing(completion: { error in
|
|
148
|
+
if let error = error {
|
|
149
|
+
self.rejectCall(call, error)
|
|
150
|
+
} else {
|
|
151
|
+
self.resolveCall(call)
|
|
152
|
+
}
|
|
153
|
+
})
|
|
154
|
+
} catch {
|
|
155
|
+
rejectCall(call, error)
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
@objc func isPairingInProgress(_ call: CAPPluginCall) {
|
|
160
|
+
do {
|
|
161
|
+
try implementation?.isPairingInProgress(completion: { result, error in
|
|
162
|
+
if let error = error {
|
|
163
|
+
self.rejectCall(call, error)
|
|
164
|
+
} else {
|
|
165
|
+
self.resolveCall(call, result)
|
|
166
|
+
}
|
|
167
|
+
})
|
|
168
|
+
} catch {
|
|
169
|
+
rejectCall(call, error)
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
@objc func getReaders(_ call: CAPPluginCall) {
|
|
174
|
+
do {
|
|
175
|
+
try implementation?.getReaders(completion: { result, error in
|
|
176
|
+
if let error = error {
|
|
177
|
+
self.rejectCall(call, error)
|
|
178
|
+
} else {
|
|
179
|
+
self.resolveCall(call, result)
|
|
180
|
+
}
|
|
181
|
+
})
|
|
182
|
+
} catch {
|
|
183
|
+
rejectCall(call, error)
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
@objc func forgetReader(_ call: CAPPluginCall) {
|
|
188
|
+
do {
|
|
189
|
+
let options = try ForgetReaderOptions(call)
|
|
190
|
+
|
|
191
|
+
try implementation?.forgetReader(options, completion: { error in
|
|
192
|
+
if let error = error {
|
|
193
|
+
self.rejectCall(call, error)
|
|
194
|
+
} else {
|
|
195
|
+
self.resolveCall(call)
|
|
196
|
+
}
|
|
197
|
+
})
|
|
198
|
+
} catch {
|
|
199
|
+
rejectCall(call, error)
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
@objc func retryConnection(_ call: CAPPluginCall) {
|
|
204
|
+
do {
|
|
205
|
+
let options = try RetryConnectionOptions(call)
|
|
206
|
+
|
|
207
|
+
try implementation?.retryConnection(options, completion: { error in
|
|
208
|
+
if let error = error {
|
|
209
|
+
self.rejectCall(call, error)
|
|
210
|
+
} else {
|
|
211
|
+
self.resolveCall(call)
|
|
212
|
+
}
|
|
213
|
+
})
|
|
214
|
+
} catch {
|
|
215
|
+
rejectCall(call, error)
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
@objc func startPayment(_ call: CAPPluginCall) {
|
|
220
|
+
do {
|
|
221
|
+
let options = try StartPaymentOptions(call)
|
|
222
|
+
|
|
223
|
+
try implementation?.startPayment(options, completion: { error in
|
|
224
|
+
if let error = error {
|
|
225
|
+
self.rejectCall(call, error)
|
|
226
|
+
} else {
|
|
227
|
+
self.resolveCall(call)
|
|
228
|
+
}
|
|
229
|
+
})
|
|
230
|
+
} catch {
|
|
231
|
+
rejectCall(call, error)
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
@objc func cancelPayment(_ call: CAPPluginCall) {
|
|
236
|
+
do {
|
|
237
|
+
try implementation?.cancelPayment(completion: { error in
|
|
238
|
+
if let error = error {
|
|
239
|
+
self.rejectCall(call, error)
|
|
240
|
+
} else {
|
|
241
|
+
self.resolveCall(call)
|
|
242
|
+
}
|
|
243
|
+
})
|
|
244
|
+
} catch {
|
|
245
|
+
rejectCall(call, error)
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
@objc func getAvailableCardInputMethods(_ call: CAPPluginCall) {
|
|
250
|
+
do {
|
|
251
|
+
try implementation?.getAvailableCardInputMethods(completion: { result, error in
|
|
252
|
+
if let error = error {
|
|
253
|
+
self.rejectCall(call, error)
|
|
254
|
+
} else {
|
|
255
|
+
self.resolveCall(call, result)
|
|
256
|
+
}
|
|
257
|
+
})
|
|
258
|
+
} catch {
|
|
259
|
+
rejectCall(call, error)
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
@objc override public func checkPermissions(_ call: CAPPluginCall) {
|
|
264
|
+
var locationResult: String
|
|
265
|
+
switch implementation?.checkLocationPermission() {
|
|
266
|
+
case .notDetermined:
|
|
267
|
+
locationResult = "prompt"
|
|
268
|
+
case .none, .restricted, .denied:
|
|
269
|
+
locationResult = "denied"
|
|
270
|
+
case .authorizedAlways, .authorizedWhenInUse:
|
|
271
|
+
locationResult = "granted"
|
|
272
|
+
@unknown default:
|
|
273
|
+
locationResult = "prompt"
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
var bluetoothResult: String
|
|
277
|
+
switch implementation?.checkBluetoothPermission() {
|
|
278
|
+
case .notDetermined:
|
|
279
|
+
bluetoothResult = "prompt"
|
|
280
|
+
case .none, .restricted, .denied:
|
|
281
|
+
bluetoothResult = "denied"
|
|
282
|
+
case .allowedAlways:
|
|
283
|
+
bluetoothResult = "granted"
|
|
284
|
+
@unknown default:
|
|
285
|
+
bluetoothResult = "prompt"
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
var result = JSObject()
|
|
289
|
+
result[SquareMobilePaymentsPlugin.permissionLocation] = locationResult
|
|
290
|
+
result[SquareMobilePaymentsPlugin.permissionBluetooth] = bluetoothResult
|
|
291
|
+
call.resolve(result)
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
@objc override public func requestPermissions(_ call: CAPPluginCall) {
|
|
295
|
+
if !hasUsageDescription(forKey: "NSLocationWhenInUseUsageDescription") {
|
|
296
|
+
rejectCall(call, CustomError.privacyDescriptionsMissing)
|
|
297
|
+
return
|
|
298
|
+
}
|
|
299
|
+
if !hasUsageDescription(forKey: "NSBluetoothAlwaysUsageDescription") {
|
|
300
|
+
rejectCall(call, CustomError.privacyDescriptionsMissing)
|
|
301
|
+
return
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
let group = DispatchGroup()
|
|
305
|
+
|
|
306
|
+
if implementation?.checkLocationPermission() == .notDetermined {
|
|
307
|
+
group.enter()
|
|
308
|
+
implementation?.requestLocationPermission { _ in
|
|
309
|
+
group.leave()
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
if implementation?.checkBluetoothPermission() == .notDetermined {
|
|
314
|
+
group.enter()
|
|
315
|
+
implementation?.requestBluetoothPermission {
|
|
316
|
+
group.leave()
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
group.notify(queue: DispatchQueue.main) {
|
|
321
|
+
self.checkPermissions(call)
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
// MARK: - Helper Methods
|
|
326
|
+
|
|
327
|
+
private func hasUsageDescription(forKey key: String) -> Bool {
|
|
328
|
+
return Bundle.main.object(forInfoDictionaryKey: key) is String
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
private func rejectCall(_ call: CAPPluginCall, _ error: Error) {
|
|
332
|
+
CAPLog.print("[", SquareMobilePaymentsPlugin.tag, "] ", error)
|
|
333
|
+
call.reject(error.localizedDescription)
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
private func resolveCall(_ call: CAPPluginCall) {
|
|
337
|
+
call.resolve()
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
private func resolveCall<T: Result>(_ call: CAPPluginCall, _ result: T?) {
|
|
341
|
+
if let result = result?.toJSObject() as? JSObject {
|
|
342
|
+
call.resolve(result)
|
|
343
|
+
} else {
|
|
344
|
+
call.resolve()
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@capawesome/capacitor-square-mobile-payments",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Unofficial Capacitor plugin for Square Mobile Payments SDK.",
|
|
5
|
+
"main": "dist/plugin.cjs.js",
|
|
6
|
+
"module": "dist/esm/index.js",
|
|
7
|
+
"types": "dist/esm/index.d.ts",
|
|
8
|
+
"unpkg": "dist/plugin.js",
|
|
9
|
+
"files": [
|
|
10
|
+
"android/src/main/",
|
|
11
|
+
"android/build.gradle",
|
|
12
|
+
"dist/",
|
|
13
|
+
"ios/Plugin/",
|
|
14
|
+
"CapawesomeCapacitorSquareMobilePayments.podspec",
|
|
15
|
+
"Package.swift"
|
|
16
|
+
],
|
|
17
|
+
"author": "Robin Genz <mail@robingenz.dev>",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+https://github.com/capawesome-team/capacitor-plugins.git"
|
|
22
|
+
},
|
|
23
|
+
"bugs": {
|
|
24
|
+
"url": "https://github.com/capawesome-team/capacitor-plugins/issues"
|
|
25
|
+
},
|
|
26
|
+
"funding": [
|
|
27
|
+
{
|
|
28
|
+
"type": "github",
|
|
29
|
+
"url": "https://github.com/sponsors/capawesome-team/"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"type": "opencollective",
|
|
33
|
+
"url": "https://opencollective.com/capawesome"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"keywords": [
|
|
37
|
+
"capacitor",
|
|
38
|
+
"plugin",
|
|
39
|
+
"native"
|
|
40
|
+
],
|
|
41
|
+
"scripts": {
|
|
42
|
+
"verify": "npm run verify:ios && npm run verify:android && npm run verify:web",
|
|
43
|
+
"verify:ios": "cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin -destination generic/platform=iOS && cd ..",
|
|
44
|
+
"verify:android": "cd android && ./gradlew clean build test && cd ..",
|
|
45
|
+
"verify:web": "npm run build",
|
|
46
|
+
"lint": "npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint",
|
|
47
|
+
"fmt": "npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format",
|
|
48
|
+
"eslint": "eslint . --ext ts",
|
|
49
|
+
"prettier": "prettier \"**/*.{css,html,ts,js,java}\"",
|
|
50
|
+
"swiftlint": "node-swiftlint",
|
|
51
|
+
"docgen": "docgen --api SquareMobilePaymentsPlugin --output-readme README.md --output-json dist/docs.json",
|
|
52
|
+
"build": "npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs",
|
|
53
|
+
"clean": "rimraf ./dist",
|
|
54
|
+
"watch": "tsc --watch",
|
|
55
|
+
"ios:pod:install": "cd ios && pod install --repo-update && cd ..",
|
|
56
|
+
"ios:spm:install": "cd ios && swift package resolve && cd ..",
|
|
57
|
+
"prepublishOnly": "npm run build"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@capacitor/android": "8.0.0",
|
|
61
|
+
"@capacitor/cli": "8.0.0",
|
|
62
|
+
"@capacitor/core": "8.0.0",
|
|
63
|
+
"@capacitor/docgen": "0.3.1",
|
|
64
|
+
"@capacitor/ios": "8.0.0",
|
|
65
|
+
"@ionic/eslint-config": "0.4.0",
|
|
66
|
+
"@ionic/swiftlint-config": "2.0.0",
|
|
67
|
+
"eslint": "8.57.0",
|
|
68
|
+
"prettier": "3.4.2",
|
|
69
|
+
"prettier-plugin-java": "2.6.7",
|
|
70
|
+
"rimraf": "6.1.2",
|
|
71
|
+
"rollup": "4.53.3",
|
|
72
|
+
"swiftlint": "2.0.0",
|
|
73
|
+
"typescript": "5.9.3"
|
|
74
|
+
},
|
|
75
|
+
"peerDependencies": {
|
|
76
|
+
"@capacitor/core": ">=8.0.0"
|
|
77
|
+
},
|
|
78
|
+
"swiftlint": "@ionic/swiftlint-config",
|
|
79
|
+
"eslintConfig": {
|
|
80
|
+
"extends": "@ionic/eslint-config/recommended"
|
|
81
|
+
},
|
|
82
|
+
"capacitor": {
|
|
83
|
+
"ios": {
|
|
84
|
+
"src": "ios"
|
|
85
|
+
},
|
|
86
|
+
"android": {
|
|
87
|
+
"src": "android"
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"publishConfig": {
|
|
91
|
+
"access": "public"
|
|
92
|
+
}
|
|
93
|
+
}
|