@capacitor-community/stripe-terminal 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 (35) hide show
  1. package/CapacitorCommunityStripeTerminal.podspec +18 -0
  2. package/README.md +263 -0
  3. package/android/build.gradle +70 -0
  4. package/android/src/main/AndroidManifest.xml +2 -0
  5. package/android/src/main/java/com/getcapacitor/community/stripe/terminal/StripeTerminal.java +227 -0
  6. package/android/src/main/java/com/getcapacitor/community/stripe/terminal/StripeTerminalPlugin.java +93 -0
  7. package/android/src/main/java/com/getcapacitor/community/stripe/terminal/TerminalEvent.kt +10 -0
  8. package/android/src/main/java/com/getcapacitor/community/stripe/terminal/TokenProvider.java +67 -0
  9. package/android/src/main/java/com/getcapacitor/community/stripe/terminal/helper/MetaData.java +28 -0
  10. package/android/src/main/java/com/getcapacitor/community/stripe/terminal/models/Executor.java +36 -0
  11. package/android/src/main/res/.gitkeep +0 -0
  12. package/dist/docs.json +337 -0
  13. package/dist/esm/definitions.d.ts +40 -0
  14. package/dist/esm/definitions.js +10 -0
  15. package/dist/esm/definitions.js.map +1 -0
  16. package/dist/esm/events.enum.d.ts +9 -0
  17. package/dist/esm/events.enum.js +10 -0
  18. package/dist/esm/events.enum.js.map +1 -0
  19. package/dist/esm/index.d.ts +4 -0
  20. package/dist/esm/index.js +7 -0
  21. package/dist/esm/index.js.map +1 -0
  22. package/dist/esm/web.d.ts +20 -0
  23. package/dist/esm/web.js +26 -0
  24. package/dist/esm/web.js.map +1 -0
  25. package/dist/plugin.cjs.js +60 -0
  26. package/dist/plugin.cjs.js.map +1 -0
  27. package/dist/plugin.js +63 -0
  28. package/dist/plugin.js.map +1 -0
  29. package/ios/Plugin/Info.plist +24 -0
  30. package/ios/Plugin/StripeTerminal.swift +155 -0
  31. package/ios/Plugin/StripeTerminalPlugin.h +10 -0
  32. package/ios/Plugin/StripeTerminalPlugin.m +11 -0
  33. package/ios/Plugin/StripeTerminalPlugin.swift +35 -0
  34. package/ios/Plugin/TerminalEvents.swift +8 -0
  35. package/package.json +78 -0
@@ -0,0 +1,60 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var core = require('@capacitor/core');
6
+
7
+ exports.TerminalEventsEnum = void 0;
8
+ (function (TerminalEventsEnum) {
9
+ TerminalEventsEnum["Loaded"] = "terminalLoaded";
10
+ TerminalEventsEnum["DiscoveredReaders"] = "terminalDiscoveredReaders";
11
+ TerminalEventsEnum["ConnectedReader"] = "terminalConnectedReader";
12
+ TerminalEventsEnum["Completed"] = "terminalCompleted";
13
+ TerminalEventsEnum["Canceled"] = "terminalCanceled";
14
+ TerminalEventsEnum["Failed"] = "terminalFailed";
15
+ })(exports.TerminalEventsEnum || (exports.TerminalEventsEnum = {}));
16
+
17
+ exports.TerminalConnectType = void 0;
18
+ (function (TerminalConnectType) {
19
+ TerminalConnectType["Simulated"] = "simulated";
20
+ TerminalConnectType["Internet"] = "internet";
21
+ TerminalConnectType["Bluetooth"] = "bluetooth";
22
+ TerminalConnectType["Usb"] = "usb";
23
+ TerminalConnectType["TapToPay"] = "tap-to-pay";
24
+ })(exports.TerminalConnectType || (exports.TerminalConnectType = {}));
25
+
26
+ const StripeTerminal = core.registerPlugin('StripeTerminal', {
27
+ web: () => Promise.resolve().then(function () { return web; }).then(m => new m.StripeTerminalWeb()),
28
+ });
29
+
30
+ class StripeTerminalWeb extends core.WebPlugin {
31
+ async initialize(options) {
32
+ console.log('initialize', options);
33
+ this.notifyListeners(exports.TerminalEventsEnum.Loaded, null);
34
+ }
35
+ async discoverReaders(options) {
36
+ console.log('discoverReaders', options);
37
+ this.notifyListeners(exports.TerminalEventsEnum.DiscoveredReaders, {
38
+ readers: [],
39
+ });
40
+ return {
41
+ readers: [],
42
+ };
43
+ }
44
+ async connectReader(options) {
45
+ console.log('connectReader', options);
46
+ this.notifyListeners(exports.TerminalEventsEnum.ConnectedReader, null);
47
+ }
48
+ async collect(options) {
49
+ console.log('collect', options);
50
+ this.notifyListeners(exports.TerminalEventsEnum.Completed, null);
51
+ }
52
+ }
53
+
54
+ var web = /*#__PURE__*/Object.freeze({
55
+ __proto__: null,
56
+ StripeTerminalWeb: StripeTerminalWeb
57
+ });
58
+
59
+ exports.StripeTerminal = StripeTerminal;
60
+ //# sourceMappingURL=plugin.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.cjs.js","sources":["esm/events.enum.js","esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var TerminalEventsEnum;\n(function (TerminalEventsEnum) {\n TerminalEventsEnum[\"Loaded\"] = \"terminalLoaded\";\n TerminalEventsEnum[\"DiscoveredReaders\"] = \"terminalDiscoveredReaders\";\n TerminalEventsEnum[\"ConnectedReader\"] = \"terminalConnectedReader\";\n TerminalEventsEnum[\"Completed\"] = \"terminalCompleted\";\n TerminalEventsEnum[\"Canceled\"] = \"terminalCanceled\";\n TerminalEventsEnum[\"Failed\"] = \"terminalFailed\";\n})(TerminalEventsEnum || (TerminalEventsEnum = {}));\n//# sourceMappingURL=events.enum.js.map","export var TerminalConnectType;\n(function (TerminalConnectType) {\n TerminalConnectType[\"Simulated\"] = \"simulated\";\n TerminalConnectType[\"Internet\"] = \"internet\";\n TerminalConnectType[\"Bluetooth\"] = \"bluetooth\";\n TerminalConnectType[\"Usb\"] = \"usb\";\n TerminalConnectType[\"TapToPay\"] = \"tap-to-pay\";\n})(TerminalConnectType || (TerminalConnectType = {}));\nexport * from './events.enum';\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst StripeTerminal = registerPlugin('StripeTerminal', {\n web: () => import('./web').then(m => new m.StripeTerminalWeb()),\n});\nexport * from './definitions';\nexport { StripeTerminal };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { TerminalEventsEnum } from './events.enum';\nexport class StripeTerminalWeb extends WebPlugin {\n async initialize(options) {\n console.log('initialize', options);\n this.notifyListeners(TerminalEventsEnum.Loaded, null);\n }\n async discoverReaders(options) {\n console.log('discoverReaders', options);\n this.notifyListeners(TerminalEventsEnum.DiscoveredReaders, {\n readers: [],\n });\n return {\n readers: [],\n };\n }\n async connectReader(options) {\n console.log('connectReader', options);\n this.notifyListeners(TerminalEventsEnum.ConnectedReader, null);\n }\n async collect(options) {\n console.log('collect', options);\n this.notifyListeners(TerminalEventsEnum.Completed, null);\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["TerminalEventsEnum","TerminalConnectType","registerPlugin","WebPlugin"],"mappings":";;;;;;AAAWA,oCAAmB;AAC9B,CAAC,UAAU,kBAAkB,EAAE;AAC/B,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,gBAAgB,CAAC;AACpD,IAAI,kBAAkB,CAAC,mBAAmB,CAAC,GAAG,2BAA2B,CAAC;AAC1E,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,GAAG,yBAAyB,CAAC;AACtE,IAAI,kBAAkB,CAAC,WAAW,CAAC,GAAG,mBAAmB,CAAC;AAC1D,IAAI,kBAAkB,CAAC,UAAU,CAAC,GAAG,kBAAkB,CAAC;AACxD,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,gBAAgB,CAAC;AACpD,CAAC,EAAEA,0BAAkB,KAAKA,0BAAkB,GAAG,EAAE,CAAC,CAAC;;ACRxCC,qCAAoB;AAC/B,CAAC,UAAU,mBAAmB,EAAE;AAChC,IAAI,mBAAmB,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;AACnD,IAAI,mBAAmB,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;AACjD,IAAI,mBAAmB,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;AACnD,IAAI,mBAAmB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AACvC,IAAI,mBAAmB,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC;AACnD,CAAC,EAAEA,2BAAmB,KAAKA,2BAAmB,GAAG,EAAE,CAAC,CAAC;;ACNhD,MAAC,cAAc,GAAGC,mBAAc,CAAC,gBAAgB,EAAE;AACxD,IAAI,GAAG,EAAE,MAAM,mDAAe,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC;AACnE,CAAC;;ACDM,MAAM,iBAAiB,SAASC,cAAS,CAAC;AACjD,IAAI,MAAM,UAAU,CAAC,OAAO,EAAE;AAC9B,QAAQ,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAC3C,QAAQ,IAAI,CAAC,eAAe,CAACH,0BAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9D,KAAK;AACL,IAAI,MAAM,eAAe,CAAC,OAAO,EAAE;AACnC,QAAQ,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;AAChD,QAAQ,IAAI,CAAC,eAAe,CAACA,0BAAkB,CAAC,iBAAiB,EAAE;AACnE,YAAY,OAAO,EAAE,EAAE;AACvB,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO;AACf,YAAY,OAAO,EAAE,EAAE;AACvB,SAAS,CAAC;AACV,KAAK;AACL,IAAI,MAAM,aAAa,CAAC,OAAO,EAAE;AACjC,QAAQ,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAC9C,QAAQ,IAAI,CAAC,eAAe,CAACA,0BAAkB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AACvE,KAAK;AACL,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE;AAC3B,QAAQ,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACxC,QAAQ,IAAI,CAAC,eAAe,CAACA,0BAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACjE,KAAK;AACL;;;;;;;;;"}
package/dist/plugin.js ADDED
@@ -0,0 +1,63 @@
1
+ var capacitorStripeTerminal = (function (exports, core) {
2
+ 'use strict';
3
+
4
+ exports.TerminalEventsEnum = void 0;
5
+ (function (TerminalEventsEnum) {
6
+ TerminalEventsEnum["Loaded"] = "terminalLoaded";
7
+ TerminalEventsEnum["DiscoveredReaders"] = "terminalDiscoveredReaders";
8
+ TerminalEventsEnum["ConnectedReader"] = "terminalConnectedReader";
9
+ TerminalEventsEnum["Completed"] = "terminalCompleted";
10
+ TerminalEventsEnum["Canceled"] = "terminalCanceled";
11
+ TerminalEventsEnum["Failed"] = "terminalFailed";
12
+ })(exports.TerminalEventsEnum || (exports.TerminalEventsEnum = {}));
13
+
14
+ exports.TerminalConnectType = void 0;
15
+ (function (TerminalConnectType) {
16
+ TerminalConnectType["Simulated"] = "simulated";
17
+ TerminalConnectType["Internet"] = "internet";
18
+ TerminalConnectType["Bluetooth"] = "bluetooth";
19
+ TerminalConnectType["Usb"] = "usb";
20
+ TerminalConnectType["TapToPay"] = "tap-to-pay";
21
+ })(exports.TerminalConnectType || (exports.TerminalConnectType = {}));
22
+
23
+ const StripeTerminal = core.registerPlugin('StripeTerminal', {
24
+ web: () => Promise.resolve().then(function () { return web; }).then(m => new m.StripeTerminalWeb()),
25
+ });
26
+
27
+ class StripeTerminalWeb extends core.WebPlugin {
28
+ async initialize(options) {
29
+ console.log('initialize', options);
30
+ this.notifyListeners(exports.TerminalEventsEnum.Loaded, null);
31
+ }
32
+ async discoverReaders(options) {
33
+ console.log('discoverReaders', options);
34
+ this.notifyListeners(exports.TerminalEventsEnum.DiscoveredReaders, {
35
+ readers: [],
36
+ });
37
+ return {
38
+ readers: [],
39
+ };
40
+ }
41
+ async connectReader(options) {
42
+ console.log('connectReader', options);
43
+ this.notifyListeners(exports.TerminalEventsEnum.ConnectedReader, null);
44
+ }
45
+ async collect(options) {
46
+ console.log('collect', options);
47
+ this.notifyListeners(exports.TerminalEventsEnum.Completed, null);
48
+ }
49
+ }
50
+
51
+ var web = /*#__PURE__*/Object.freeze({
52
+ __proto__: null,
53
+ StripeTerminalWeb: StripeTerminalWeb
54
+ });
55
+
56
+ exports.StripeTerminal = StripeTerminal;
57
+
58
+ Object.defineProperty(exports, '__esModule', { value: true });
59
+
60
+ return exports;
61
+
62
+ })({}, capacitorExports);
63
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sources":["esm/events.enum.js","esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var TerminalEventsEnum;\n(function (TerminalEventsEnum) {\n TerminalEventsEnum[\"Loaded\"] = \"terminalLoaded\";\n TerminalEventsEnum[\"DiscoveredReaders\"] = \"terminalDiscoveredReaders\";\n TerminalEventsEnum[\"ConnectedReader\"] = \"terminalConnectedReader\";\n TerminalEventsEnum[\"Completed\"] = \"terminalCompleted\";\n TerminalEventsEnum[\"Canceled\"] = \"terminalCanceled\";\n TerminalEventsEnum[\"Failed\"] = \"terminalFailed\";\n})(TerminalEventsEnum || (TerminalEventsEnum = {}));\n//# sourceMappingURL=events.enum.js.map","export var TerminalConnectType;\n(function (TerminalConnectType) {\n TerminalConnectType[\"Simulated\"] = \"simulated\";\n TerminalConnectType[\"Internet\"] = \"internet\";\n TerminalConnectType[\"Bluetooth\"] = \"bluetooth\";\n TerminalConnectType[\"Usb\"] = \"usb\";\n TerminalConnectType[\"TapToPay\"] = \"tap-to-pay\";\n})(TerminalConnectType || (TerminalConnectType = {}));\nexport * from './events.enum';\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst StripeTerminal = registerPlugin('StripeTerminal', {\n web: () => import('./web').then(m => new m.StripeTerminalWeb()),\n});\nexport * from './definitions';\nexport { StripeTerminal };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { TerminalEventsEnum } from './events.enum';\nexport class StripeTerminalWeb extends WebPlugin {\n async initialize(options) {\n console.log('initialize', options);\n this.notifyListeners(TerminalEventsEnum.Loaded, null);\n }\n async discoverReaders(options) {\n console.log('discoverReaders', options);\n this.notifyListeners(TerminalEventsEnum.DiscoveredReaders, {\n readers: [],\n });\n return {\n readers: [],\n };\n }\n async connectReader(options) {\n console.log('connectReader', options);\n this.notifyListeners(TerminalEventsEnum.ConnectedReader, null);\n }\n async collect(options) {\n console.log('collect', options);\n this.notifyListeners(TerminalEventsEnum.Completed, null);\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["TerminalEventsEnum","TerminalConnectType","registerPlugin","WebPlugin"],"mappings":";;;AAAWA,wCAAmB;IAC9B,CAAC,UAAU,kBAAkB,EAAE;IAC/B,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,gBAAgB,CAAC;IACpD,IAAI,kBAAkB,CAAC,mBAAmB,CAAC,GAAG,2BAA2B,CAAC;IAC1E,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,GAAG,yBAAyB,CAAC;IACtE,IAAI,kBAAkB,CAAC,WAAW,CAAC,GAAG,mBAAmB,CAAC;IAC1D,IAAI,kBAAkB,CAAC,UAAU,CAAC,GAAG,kBAAkB,CAAC;IACxD,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,gBAAgB,CAAC;IACpD,CAAC,EAAEA,0BAAkB,KAAKA,0BAAkB,GAAG,EAAE,CAAC,CAAC;;ACRxCC,yCAAoB;IAC/B,CAAC,UAAU,mBAAmB,EAAE;IAChC,IAAI,mBAAmB,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;IACnD,IAAI,mBAAmB,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;IACjD,IAAI,mBAAmB,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;IACnD,IAAI,mBAAmB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IACvC,IAAI,mBAAmB,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC;IACnD,CAAC,EAAEA,2BAAmB,KAAKA,2BAAmB,GAAG,EAAE,CAAC,CAAC;;ACNhD,UAAC,cAAc,GAAGC,mBAAc,CAAC,gBAAgB,EAAE;IACxD,IAAI,GAAG,EAAE,MAAM,mDAAe,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC;IACnE,CAAC;;ICDM,MAAM,iBAAiB,SAASC,cAAS,CAAC;IACjD,IAAI,MAAM,UAAU,CAAC,OAAO,EAAE;IAC9B,QAAQ,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC3C,QAAQ,IAAI,CAAC,eAAe,CAACH,0BAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9D,KAAK;IACL,IAAI,MAAM,eAAe,CAAC,OAAO,EAAE;IACnC,QAAQ,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAChD,QAAQ,IAAI,CAAC,eAAe,CAACA,0BAAkB,CAAC,iBAAiB,EAAE;IACnE,YAAY,OAAO,EAAE,EAAE;IACvB,SAAS,CAAC,CAAC;IACX,QAAQ,OAAO;IACf,YAAY,OAAO,EAAE,EAAE;IACvB,SAAS,CAAC;IACV,KAAK;IACL,IAAI,MAAM,aAAa,CAAC,OAAO,EAAE;IACjC,QAAQ,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC9C,QAAQ,IAAI,CAAC,eAAe,CAACA,0BAAkB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IACvE,KAAK;IACL,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE;IAC3B,QAAQ,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,IAAI,CAAC,eAAe,CAACA,0BAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACjE,KAAK;IACL;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>CFBundleDevelopmentRegion</key>
6
+ <string>$(DEVELOPMENT_LANGUAGE)</string>
7
+ <key>CFBundleExecutable</key>
8
+ <string>$(EXECUTABLE_NAME)</string>
9
+ <key>CFBundleIdentifier</key>
10
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11
+ <key>CFBundleInfoDictionaryVersion</key>
12
+ <string>6.0</string>
13
+ <key>CFBundleName</key>
14
+ <string>$(PRODUCT_NAME)</string>
15
+ <key>CFBundlePackageType</key>
16
+ <string>FMWK</string>
17
+ <key>CFBundleShortVersionString</key>
18
+ <string>1.0</string>
19
+ <key>CFBundleVersion</key>
20
+ <string>$(CURRENT_PROJECT_VERSION)</string>
21
+ <key>NSPrincipalClass</key>
22
+ <string></string>
23
+ </dict>
24
+ </plist>
@@ -0,0 +1,155 @@
1
+ import Foundation
2
+ import Capacitor
3
+ import StripeTerminal
4
+
5
+ public class StripeTerminal: NSObject, DiscoveryDelegate, LocalMobileReaderDelegate {
6
+
7
+ weak var plugin: StripeTerminalPlugin?
8
+ var discoverCancelable: Cancelable?
9
+ var discoverCall: CAPPluginCall?
10
+ var locationId: String?
11
+ var isTest: Bool?
12
+ var collectCancelable: Cancelable?
13
+
14
+ var readers: [Reader]?
15
+
16
+ @objc public func initialize(_ call: CAPPluginCall) {
17
+ self.isTest = call.getBool("isTest", true)
18
+ Terminal.setTokenProvider(APIClient(tokenProviderEndpoint: call.getString("tokenProviderEndpoint", "")))
19
+ self.plugin?.notifyListeners(TerminalEvents.Loaded.rawValue, data: [:])
20
+ call.resolve()
21
+ }
22
+
23
+ func discoverReaders(_ call: CAPPluginCall) {
24
+ let config = DiscoveryConfiguration(
25
+ discoveryMethod: .localMobile,
26
+ simulated: self.isTest
27
+ )
28
+ self.discoverCall = call
29
+ self.locationId = call.getString("locationId")
30
+
31
+ self.discoverCancelable = Terminal.shared.discoverReaders(config, delegate: self) { error in
32
+ if let error = error {
33
+ print("discoverReaders failed: \(error)")
34
+ call.reject(error.localizedDescription)
35
+ self.discoverCall = nil
36
+ } else {
37
+ }
38
+ }
39
+ }
40
+
41
+ public func terminal(_ terminal: Terminal, didUpdateDiscoveredReaders readers: [Reader]) {
42
+ var readersJSObject: JSArray = []
43
+ var i = 0
44
+ for reader in readers {
45
+ readersJSObject.append([
46
+ "index": i,
47
+ "serialNumber": reader.serialNumber
48
+ ])
49
+ i += 1
50
+ }
51
+ self.readers = readers
52
+
53
+ self.plugin?.notifyListeners(TerminalEvents.DiscoveredReaders.rawValue, data: ["readers": readersJSObject])
54
+ self.discoverCall?.resolve([
55
+ "readers": readersJSObject
56
+ ])
57
+ }
58
+
59
+ public func connectReader(_ call: CAPPluginCall) {
60
+ let connectionConfig = LocalMobileConnectionConfiguration(locationId: self.locationId!)
61
+ let reader: JSObject = call.getObject("reader")!
62
+ let index: Int = reader["index"] as! Int
63
+
64
+ Terminal.shared.connectLocalMobileReader(self.readers![index], delegate: self, connectionConfig: connectionConfig) { reader, error in
65
+ if let reader = reader {
66
+ self.plugin?.notifyListeners(TerminalEvents.ConnectedReader.rawValue, data: [:])
67
+ call.resolve()
68
+ } else if let error = error {
69
+ call.reject(error.localizedDescription)
70
+ }
71
+ }
72
+ }
73
+
74
+ public func collect(_ call: CAPPluginCall) {
75
+ Terminal.shared.retrievePaymentIntent(clientSecret: call.getString("paymentIntent")!) { retrieveResult, retrieveError in
76
+ if let error = retrieveError {
77
+ print("retrievePaymentIntent failed: \(error)")
78
+ } else if let paymentIntent = retrieveResult {
79
+ self.collectCancelable = Terminal.shared.collectPaymentMethod(paymentIntent) { collectResult, collectError in
80
+ if let error = collectError {
81
+ self.plugin?.notifyListeners(TerminalEvents.Failed.rawValue, data: [:])
82
+ call.reject(error.localizedDescription)
83
+ } else if let paymentIntent = collectResult {
84
+ self.plugin?.notifyListeners(TerminalEvents.Completed.rawValue, data: [:])
85
+ call.resolve()
86
+ }
87
+ }
88
+ }
89
+ }
90
+
91
+ }
92
+
93
+ public func localMobileReader(_ reader: Reader, didStartInstallingUpdate update: ReaderSoftwareUpdate, cancelable: Cancelable?) {
94
+ // TODO
95
+ }
96
+
97
+ public func localMobileReader(_ reader: Reader, didReportReaderSoftwareUpdateProgress progress: Float) {
98
+ // TODO
99
+ }
100
+
101
+ public func localMobileReader(_ reader: Reader, didFinishInstallingUpdate update: ReaderSoftwareUpdate?, error: Error?) {
102
+ // TODO
103
+ }
104
+
105
+ public func localMobileReader(_ reader: Reader, didRequestReaderInput inputOptions: ReaderInputOptions = []) {
106
+ // TODO
107
+ }
108
+
109
+ public func localMobileReader(_ reader: Reader, didRequestReaderDisplayMessage displayMessage: ReaderDisplayMessage) {
110
+ // TODO
111
+ }
112
+ }
113
+
114
+ class APIClient: ConnectionTokenProvider {
115
+ var tokenProviderEndpoint: String = ""
116
+
117
+ init(tokenProviderEndpoint: String) {
118
+ self.tokenProviderEndpoint = tokenProviderEndpoint
119
+ }
120
+
121
+ // Fetches a ConnectionToken from your backend
122
+ func fetchConnectionToken(_ completion: @escaping ConnectionTokenCompletionBlock) {
123
+ let config = URLSessionConfiguration.default
124
+ let session = URLSession(configuration: config)
125
+ guard let url = URL(string: tokenProviderEndpoint) else {
126
+ fatalError("Invalid backend URL")
127
+ }
128
+ var request = URLRequest(url: url)
129
+ request.httpMethod = "POST"
130
+ let task = session.dataTask(with: request) { (data, _, error) in
131
+ if let data = data {
132
+ do {
133
+ // Warning: casting using `as? [String: String]` looks simpler, but isn't safe:
134
+ let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
135
+ if let secret = json?["secret"] as? String {
136
+ completion(secret, nil)
137
+ } else {
138
+ let error = NSError(domain: "com.getcapacitor.community.stripe.terminal",
139
+ code: 2000,
140
+ userInfo: [NSLocalizedDescriptionKey: "Missing `secret` in ConnectionToken JSON response"])
141
+ completion(nil, error)
142
+ }
143
+ } catch {
144
+ completion(nil, error)
145
+ }
146
+ } else {
147
+ let error = NSError(domain: "com.getcapacitor.community.stripe.terminal",
148
+ code: 1000,
149
+ userInfo: [NSLocalizedDescriptionKey: "No data in response from ConnectionToken endpoint"])
150
+ completion(nil, error)
151
+ }
152
+ }
153
+ task.resume()
154
+ }
155
+ }
@@ -0,0 +1,10 @@
1
+ #import <UIKit/UIKit.h>
2
+
3
+ //! Project version number for Plugin.
4
+ FOUNDATION_EXPORT double PluginVersionNumber;
5
+
6
+ //! Project version string for Plugin.
7
+ FOUNDATION_EXPORT const unsigned char PluginVersionString[];
8
+
9
+ // In this header, you should import all the public headers of your framework using statements like #import <Plugin/PublicHeader.h>
10
+
@@ -0,0 +1,11 @@
1
+ #import <Foundation/Foundation.h>
2
+ #import <Capacitor/Capacitor.h>
3
+
4
+ // Define the plugin using the CAP_PLUGIN Macro, and
5
+ // each method the plugin supports using the CAP_PLUGIN_METHOD macro.
6
+ CAP_PLUGIN(StripeTerminalPlugin, "StripeTerminal",
7
+ CAP_PLUGIN_METHOD(initialize, CAPPluginReturnPromise);
8
+ CAP_PLUGIN_METHOD(discoverReaders, CAPPluginReturnPromise);
9
+ CAP_PLUGIN_METHOD(connectReader, CAPPluginReturnPromise);
10
+ CAP_PLUGIN_METHOD(collect, CAPPluginReturnPromise);
11
+ )
@@ -0,0 +1,35 @@
1
+ import Foundation
2
+ import StripeTerminal
3
+ import Capacitor
4
+ import PassKit
5
+
6
+ /**
7
+ * Please read the Capacitor iOS Plugin Development Guide
8
+ * here: https://capacitorjs.com/docs/plugins/ios
9
+ */
10
+ @objc(StripeTerminalPlugin)
11
+ public class StripeTerminalPlugin: CAPPlugin {
12
+ private let implementation = StripeTerminal()
13
+
14
+ override public func load() {
15
+ super.load()
16
+ self.implementation.plugin = self
17
+ // TODO: add STPAPIClient.shared.appInfo
18
+ }
19
+
20
+ @objc func initialize(_ call: CAPPluginCall) {
21
+ self.implementation.initialize(call)
22
+ }
23
+
24
+ @objc func discoverReaders(_ call: CAPPluginCall) {
25
+ self.implementation.discoverReaders(call)
26
+ }
27
+
28
+ @objc func connectReader(_ call: CAPPluginCall) {
29
+ self.implementation.connectReader(call)
30
+ }
31
+
32
+ @objc func collect(_ call: CAPPluginCall) {
33
+ self.implementation.collect(call)
34
+ }
35
+ }
@@ -0,0 +1,8 @@
1
+ public enum TerminalEvents: String {
2
+ case Loaded = "terminalLoaded"
3
+ case DiscoveredReaders = "terminalDiscoveredReaders"
4
+ case ConnectedReader = "terminalConnectedReader"
5
+ case Completed = "terminalCompleted"
6
+ case Canceled = "terminalCanceled"
7
+ case Failed = "terminalFailed"
8
+ }
package/package.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "@capacitor-community/stripe-terminal",
3
+ "version": "0.0.1",
4
+ "description": "Stripe SDK bindings for Capacitor Applications",
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
+ "CapacitorCommunityStripeTerminal.podspec"
15
+ ],
16
+ "author": "Masahiko Sakakibara",
17
+ "license": "MIT",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/capacitor-community/stripe.git"
21
+ },
22
+ "bugs": {
23
+ "url": "https://github.com/capacitor-community/stripe/issues"
24
+ },
25
+ "keywords": [
26
+ "capacitor",
27
+ "plugin",
28
+ "native"
29
+ ],
30
+ "scripts": {
31
+ "verify": "npm run verify:ios && npm run verify:android && npm run verify:web",
32
+ "verify:ios": "cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin -destination generic/platform=iOS && cd ..",
33
+ "verify:android": "cd android && ./gradlew clean build test && cd ..",
34
+ "verify:web": "npm run build",
35
+ "lint": "npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint",
36
+ "fmt": "npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format",
37
+ "eslint": "eslint . --ext ts",
38
+ "prettier": "prettier \"**/*.{css,html,ts,js,java}\"",
39
+ "swiftlint": "node-swiftlint",
40
+ "docgen": "docgen --api StripeTerminalPlugin --output-readme README.md --output-json dist/docs.json",
41
+ "build": "npm run clean && npm run docgen && tsc && rollup -c rollup.config.js",
42
+ "clean": "rimraf ./dist",
43
+ "watch": "tsc --watch",
44
+ "prepublishOnly": "npm run build"
45
+ },
46
+ "devDependencies": {
47
+ "@capacitor/android": "^5.0.0",
48
+ "@capacitor/core": "^5.0.0",
49
+ "@capacitor/docgen": "^0.0.18",
50
+ "@capacitor/ios": "^5.0.0",
51
+ "@ionic/eslint-config": "^0.3.0",
52
+ "@ionic/prettier-config": "^1.0.1",
53
+ "@ionic/swiftlint-config": "^1.1.2",
54
+ "eslint": "^7.11.0",
55
+ "prettier": "~2.3.0",
56
+ "prettier-plugin-java": "~1.0.2",
57
+ "rimraf": "^3.0.2",
58
+ "rollup": "^2.32.0",
59
+ "swiftlint": "^1.0.1",
60
+ "typescript": "~4.1.5"
61
+ },
62
+ "peerDependencies": {
63
+ "@capacitor/core": "^5.0.0"
64
+ },
65
+ "prettier": "@ionic/prettier-config",
66
+ "swiftlint": "@ionic/swiftlint-config",
67
+ "eslintConfig": {
68
+ "extends": "@ionic/eslint-config/recommended"
69
+ },
70
+ "capacitor": {
71
+ "ios": {
72
+ "src": "ios"
73
+ },
74
+ "android": {
75
+ "src": "android"
76
+ }
77
+ }
78
+ }