@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.
Files changed (82) hide show
  1. package/CapawesomeCapacitorSquareMobilePayments.podspec +17 -0
  2. package/Package.swift +30 -0
  3. package/README.md +1183 -0
  4. package/android/build.gradle +63 -0
  5. package/android/src/main/AndroidManifest.xml +7 -0
  6. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/SquareMobilePayments.java +774 -0
  7. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/SquareMobilePaymentsPlugin.java +460 -0
  8. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/CustomException.java +20 -0
  9. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/CustomExceptions.java +41 -0
  10. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/events/AvailableCardInputMethodsDidChangeEvent.java +27 -0
  11. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/events/PaymentDidCancelEvent.java +24 -0
  12. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/events/PaymentDidFailEvent.java +34 -0
  13. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/events/PaymentDidFinishEvent.java +22 -0
  14. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/events/ReaderDidChangeEvent.java +27 -0
  15. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/events/ReaderPairingDidFailEvent.java +28 -0
  16. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/events/ReaderWasAddedEvent.java +22 -0
  17. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/events/ReaderWasRemovedEvent.java +22 -0
  18. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/options/AuthorizeOptions.java +29 -0
  19. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/options/ForgetReaderOptions.java +29 -0
  20. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/options/InitializeOptions.java +29 -0
  21. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/options/Money.java +29 -0
  22. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/options/PaymentParameters.java +126 -0
  23. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/options/PromptParameters.java +47 -0
  24. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/options/RetryConnectionOptions.java +29 -0
  25. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/options/StartPaymentOptions.java +39 -0
  26. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/Card.java +51 -0
  27. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/CardPaymentDetails.java +30 -0
  28. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/GetAvailableCardInputMethodsResult.java +29 -0
  29. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/GetReadersResult.java +29 -0
  30. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/GetSettingsResult.java +28 -0
  31. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/IsAuthorizedResult.java +22 -0
  32. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/IsPairingInProgressResult.java +22 -0
  33. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/MoneyResult.java +27 -0
  34. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/Payment.java +87 -0
  35. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/ReaderInfo.java +82 -0
  36. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/classes/results/UnavailableReasonInfo.java +30 -0
  37. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/interfaces/Callback.java +5 -0
  38. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/interfaces/EmptyCallback.java +5 -0
  39. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/interfaces/NonEmptyCallback.java +7 -0
  40. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/interfaces/NonEmptyResultCallback.java +7 -0
  41. package/android/src/main/java/io/capawesome/capacitorjs/plugins/squaremobilepayments/interfaces/Result.java +7 -0
  42. package/android/src/main/res/.gitkeep +0 -0
  43. package/dist/docs.json +2999 -0
  44. package/dist/esm/definitions.d.ts +1468 -0
  45. package/dist/esm/definitions.js +519 -0
  46. package/dist/esm/definitions.js.map +1 -0
  47. package/dist/esm/index.d.ts +4 -0
  48. package/dist/esm/index.js +7 -0
  49. package/dist/esm/index.js.map +1 -0
  50. package/dist/esm/web.d.ts +21 -0
  51. package/dist/esm/web.js +55 -0
  52. package/dist/esm/web.js.map +1 -0
  53. package/dist/plugin.cjs.js +588 -0
  54. package/dist/plugin.cjs.js.map +1 -0
  55. package/dist/plugin.js +591 -0
  56. package/dist/plugin.js.map +1 -0
  57. package/ios/Plugin/Classes/Options/AuthorizeOptions.swift +17 -0
  58. package/ios/Plugin/Classes/Options/ForgetReaderOptions.swift +17 -0
  59. package/ios/Plugin/Classes/Options/InitializeOptions.swift +17 -0
  60. package/ios/Plugin/Classes/Options/Money.swift +12 -0
  61. package/ios/Plugin/Classes/Options/PaymentParameters.swift +49 -0
  62. package/ios/Plugin/Classes/Options/PromptParameters.swift +17 -0
  63. package/ios/Plugin/Classes/Options/RetryConnectionOptions.swift +17 -0
  64. package/ios/Plugin/Classes/Options/StartPaymentOptions.swift +19 -0
  65. package/ios/Plugin/Classes/Results/Card.swift +34 -0
  66. package/ios/Plugin/Classes/Results/CardPaymentDetails.swift +34 -0
  67. package/ios/Plugin/Classes/Results/GetAvailableCardInputMethodsResult.swift +16 -0
  68. package/ios/Plugin/Classes/Results/GetReadersResult.swift +16 -0
  69. package/ios/Plugin/Classes/Results/GetSettingsResult.swift +19 -0
  70. package/ios/Plugin/Classes/Results/IsAuthorizedResult.swift +16 -0
  71. package/ios/Plugin/Classes/Results/IsPairingInProgressResult.swift +16 -0
  72. package/ios/Plugin/Classes/Results/MoneyResult.swift +19 -0
  73. package/ios/Plugin/Classes/Results/Payment.swift +58 -0
  74. package/ios/Plugin/Classes/Results/ReaderInfo.swift +46 -0
  75. package/ios/Plugin/Classes/Results/UnavailableReasonInfo.swift +19 -0
  76. package/ios/Plugin/Enums/CustomError.swift +81 -0
  77. package/ios/Plugin/Info.plist +24 -0
  78. package/ios/Plugin/Protocols/Result.swift +6 -0
  79. package/ios/Plugin/SquareMobilePayments.swift +632 -0
  80. package/ios/Plugin/SquareMobilePaymentsHelper.swift +212 -0
  81. package/ios/Plugin/SquareMobilePaymentsPlugin.swift +347 -0
  82. 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
+ }