@expensify/react-native-wallet 0.1.40 → 0.2.0
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/README.md +60 -8
- package/android/src/main/java/com/expensify/wallet/Utils.kt +6 -1
- package/android/src/main/java/com/expensify/wallet/WalletModule.kt +273 -50
- package/android/src/main/java/com/expensify/wallet/model/CardData.kt +3 -1
- package/android/src/paper/java/com/expensify/wallet/NativeWalletSpec.java +8 -0
- package/ios/RNWallet.mm +30 -0
- package/ios/WalletManager.swift +57 -17
- package/lib/commonjs/NativeWallet.js.map +1 -1
- package/lib/commonjs/index.js +46 -3
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/NativeWallet.js.map +1 -1
- package/lib/module/index.js +46 -4
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/NativeWallet.d.ts +18 -2
- package/lib/typescript/src/NativeWallet.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +13 -4
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/NativeWallet.ts +21 -1
- package/src/index.tsx +68 -4
package/ios/RNWallet.mm
CHANGED
|
@@ -135,6 +135,36 @@ RCT_REMAP_METHOD(getCardStatusByIdentifier,
|
|
|
135
135
|
// no-op
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
+
- (void)hasEligibleTokenizationTarget:(NSString *)last4Digits
|
|
139
|
+
network:(NSString *)network
|
|
140
|
+
issuerName:(NSString *)issuerName
|
|
141
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
142
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
143
|
+
{
|
|
144
|
+
// no-op
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
- (void)AndroidProvidePaymentCredentials:(NSString *)requestId
|
|
148
|
+
responseData:
|
|
149
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
150
|
+
(JS::NativeWallet::AndroidPaymentCredentialsResponse &)responseData
|
|
151
|
+
#else
|
|
152
|
+
(NSDictionary *)responseData
|
|
153
|
+
#endif
|
|
154
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
155
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
156
|
+
{
|
|
157
|
+
// no-op
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
- (void)AndroidRejectPaymentCredentials:(NSString *)requestId
|
|
161
|
+
errorMessage:(NSString *)errorMessage
|
|
162
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
163
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
164
|
+
{
|
|
165
|
+
// no-op
|
|
166
|
+
}
|
|
167
|
+
|
|
138
168
|
- (void)getSecureWalletInfo:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
|
|
139
169
|
// no-op
|
|
140
170
|
}
|
package/ios/WalletManager.swift
CHANGED
|
@@ -120,16 +120,37 @@ open class WalletManager: UIViewController {
|
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
DispatchQueue.main.async {
|
|
123
|
-
if self.addPassViewController
|
|
124
|
-
self.presentAddPaymentPassCompletionHandler = completion
|
|
125
|
-
self.addPassViewController = enrollViewController
|
|
126
|
-
RCTPresentedViewController()?.present(enrollViewController, animated: true, completion: nil)
|
|
127
|
-
} else {
|
|
123
|
+
if let enrollVC = self.addPassViewController, enrollVC.isBeingPresented || enrollVC.presentingViewController != nil {
|
|
128
124
|
self.logInfo(message: "EnrollViewController is already presented.")
|
|
129
125
|
completion(.error, [
|
|
130
126
|
"errorMessage": "EnrollViewController is already presented."
|
|
131
127
|
])
|
|
128
|
+
return
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
let presentPassHandler = self.presentAddPaymentPassCompletionHandler
|
|
132
|
+
let addPaymentPassHandler = self.addPaymentPassCompletionHandler
|
|
133
|
+
self.addPassViewController = nil
|
|
134
|
+
self.presentAddPaymentPassCompletionHandler = nil
|
|
135
|
+
self.addPaymentPassCompletionHandler = nil
|
|
136
|
+
self.addPassHandler = nil
|
|
137
|
+
|
|
138
|
+
let errorResponse: NSDictionary = [
|
|
139
|
+
"errorMessage": "EnrollViewController is no longer presented."
|
|
140
|
+
]
|
|
141
|
+
presentPassHandler?(.error, errorResponse)
|
|
142
|
+
addPaymentPassHandler?(.error, errorResponse)
|
|
143
|
+
|
|
144
|
+
guard let presentingViewController = RCTPresentedViewController() else {
|
|
145
|
+
completion(.error, [
|
|
146
|
+
"errorMessage": "Presenting view controller is unavailable."
|
|
147
|
+
])
|
|
148
|
+
return
|
|
132
149
|
}
|
|
150
|
+
|
|
151
|
+
self.presentAddPaymentPassCompletionHandler = completion
|
|
152
|
+
self.addPassViewController = enrollViewController
|
|
153
|
+
presentingViewController.present(enrollViewController, animated: true, completion: nil)
|
|
133
154
|
}
|
|
134
155
|
}
|
|
135
156
|
|
|
@@ -197,12 +218,23 @@ open class WalletManager: UIViewController {
|
|
|
197
218
|
}
|
|
198
219
|
|
|
199
220
|
private func hideModal() {
|
|
221
|
+
guard let enrollVC = addPassViewController else {
|
|
222
|
+
return
|
|
223
|
+
}
|
|
224
|
+
|
|
200
225
|
DispatchQueue.main.async {
|
|
201
|
-
|
|
226
|
+
guard self.addPassViewController === enrollVC else {
|
|
227
|
+
return
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
if enrollVC.isBeingPresented || enrollVC.presentingViewController != nil {
|
|
202
231
|
enrollVC.dismiss(animated: true, completion: {
|
|
203
|
-
self.addPassViewController
|
|
232
|
+
if self.addPassViewController === enrollVC {
|
|
233
|
+
self.addPassViewController = nil
|
|
234
|
+
}
|
|
204
235
|
})
|
|
205
236
|
} else {
|
|
237
|
+
self.addPassViewController = nil
|
|
206
238
|
self.logInfo(message: "EnrollViewController is not presented currently.")
|
|
207
239
|
}
|
|
208
240
|
}
|
|
@@ -220,6 +252,10 @@ extension WalletManager: PKAddPaymentPassViewControllerDelegate {
|
|
|
220
252
|
generateRequestWithCertificateChain certificates: [Data],
|
|
221
253
|
nonce: Data, nonceSignature: Data,
|
|
222
254
|
completionHandler handler: @escaping (PKAddPaymentPassRequest) -> Void) {
|
|
255
|
+
guard controller === addPassViewController else {
|
|
256
|
+
return
|
|
257
|
+
}
|
|
258
|
+
|
|
223
259
|
let stringNonce = nonce.base64EncodedString() as NSString
|
|
224
260
|
let stringNonceSignature = nonceSignature.base64EncodedString() as NSString
|
|
225
261
|
let stringCertificates = certificates.map {
|
|
@@ -230,15 +266,16 @@ extension WalletManager: PKAddPaymentPassViewControllerDelegate {
|
|
|
230
266
|
|
|
231
267
|
// Retry the JS issuer callback if the user tries again to add a payment pass
|
|
232
268
|
if let addPaymentPassHandler = addPaymentPassCompletionHandler {
|
|
233
|
-
|
|
269
|
+
// The callback can synchronously register the next completion.
|
|
234
270
|
addPaymentPassCompletionHandler = nil
|
|
271
|
+
addPaymentPassHandler(.retry, reqestCardData.toNSDictionary())
|
|
235
272
|
return
|
|
236
273
|
}
|
|
237
274
|
|
|
238
275
|
// Finish IOSPresentAddPaymentPassView function
|
|
239
276
|
if let presentPassHandler = presentAddPaymentPassCompletionHandler {
|
|
240
|
-
presentPassHandler(.completed, reqestCardData.toNSDictionary())
|
|
241
277
|
presentAddPaymentPassCompletionHandler = nil
|
|
278
|
+
presentPassHandler(.completed, reqestCardData.toNSDictionary())
|
|
242
279
|
}
|
|
243
280
|
}
|
|
244
281
|
|
|
@@ -247,10 +284,16 @@ extension WalletManager: PKAddPaymentPassViewControllerDelegate {
|
|
|
247
284
|
_ controller: PKAddPaymentPassViewController,
|
|
248
285
|
didFinishAdding pass: PKPaymentPass?,
|
|
249
286
|
error: Error?) {
|
|
250
|
-
|
|
287
|
+
guard controller === addPassViewController else {
|
|
251
288
|
return
|
|
252
289
|
}
|
|
253
|
-
|
|
290
|
+
|
|
291
|
+
let presentPassHandler = presentAddPaymentPassCompletionHandler
|
|
292
|
+
let addPaymentPassHandler = addPaymentPassCompletionHandler
|
|
293
|
+
presentAddPaymentPassCompletionHandler = nil
|
|
294
|
+
addPaymentPassCompletionHandler = nil
|
|
295
|
+
addPassHandler = nil
|
|
296
|
+
|
|
254
297
|
let errorMessage = error?.localizedDescription ?? ""
|
|
255
298
|
|
|
256
299
|
if error != nil {
|
|
@@ -261,13 +304,13 @@ extension WalletManager: PKAddPaymentPassViewControllerDelegate {
|
|
|
261
304
|
}
|
|
262
305
|
|
|
263
306
|
// Cancel the IOSPresentAddPaymentPassView function when the user cancelled the modal
|
|
264
|
-
if let handler =
|
|
307
|
+
if let handler = presentPassHandler {
|
|
265
308
|
let response = AddPassResponse(status: .canceled, nonce: nil, nonceSignature: nil, certificates: nil)
|
|
266
309
|
handler(.canceled, response.toNSDictionary())
|
|
267
310
|
}
|
|
268
311
|
|
|
269
312
|
// If the pass is returned complete the IOSHandleAddPaymentPassResponse function
|
|
270
|
-
if let addPaymentPassHandler =
|
|
313
|
+
if let addPaymentPassHandler = addPaymentPassHandler {
|
|
271
314
|
if pass != nil {
|
|
272
315
|
addPaymentPassHandler(.completed, nil)
|
|
273
316
|
} else {
|
|
@@ -276,11 +319,8 @@ extension WalletManager: PKAddPaymentPassViewControllerDelegate {
|
|
|
276
319
|
])
|
|
277
320
|
}
|
|
278
321
|
}
|
|
279
|
-
|
|
280
|
-
addPassHandler = nil
|
|
322
|
+
|
|
281
323
|
hideModal()
|
|
282
|
-
addPaymentPassCompletionHandler = nil
|
|
283
|
-
presentAddPaymentPassCompletionHandler = nil
|
|
284
324
|
}
|
|
285
325
|
}
|
|
286
326
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","PACKAGE_NAME","exports","Wallet","TurboModuleRegistry","getEnforcing","error","Error","console","warn","message","_default","default"],"sourceRoot":"../../src","sources":["NativeWallet.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;
|
|
1
|
+
{"version":3,"names":["_reactNative","require","PACKAGE_NAME","exports","Wallet","TurboModuleRegistry","getEnforcing","error","Error","console","warn","message","_default","default"],"sourceRoot":"../../src","sources":["NativeWallet.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAuGA,MAAMC,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG,gCAAgC;AACrD;AACA;AACA;AACA,IAAIE,MAAwB;AAC5B,IAAI;EACFA,MAAM,GAAGC,gCAAmB,CAACC,YAAY,CAAO,UAAU,CAAC;AAC7D,CAAC,CAAC,OAAOC,KAAK,EAAE;EACd,IAAIA,KAAK,YAAYC,KAAK,EAAE;IAC1B;IACAC,OAAO,CAACC,IAAI,CAAC,IAAIR,YAAY,mCAAmCK,KAAK,CAACI,OAAO,EAAE,CAAC;EAClF;AACF;AAAC,IAAAC,QAAA,GAAAT,OAAA,CAAAU,OAAA,GACcT,MAAM","ignoreList":[]}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -16,6 +16,7 @@ exports.checkWalletAvailability = checkWalletAvailability;
|
|
|
16
16
|
exports.getCardStatusByIdentifier = getCardStatusByIdentifier;
|
|
17
17
|
exports.getCardStatusBySuffix = getCardStatusBySuffix;
|
|
18
18
|
exports.getSecureWalletInfo = getSecureWalletInfo;
|
|
19
|
+
exports.hasEligibleTokenizationTarget = hasEligibleTokenizationTarget;
|
|
19
20
|
exports.listTokens = listTokens;
|
|
20
21
|
exports.removeListener = removeListener;
|
|
21
22
|
exports.resumeAddCardToGoogleWallet = resumeAddCardToGoogleWallet;
|
|
@@ -25,12 +26,31 @@ var _utils = require("./utils");
|
|
|
25
26
|
var _AddToWalletButton = _interopRequireDefault(require("./AddToWalletButton"));
|
|
26
27
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
27
28
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
29
|
+
/* eslint-disable no-console */
|
|
28
30
|
/* eslint-disable @lwc/lwc/no-async-await */
|
|
29
31
|
|
|
30
32
|
function getModuleLinkingRejection() {
|
|
31
33
|
return Promise.reject(new Error(`Failed to load Wallet module, make sure to link ${_NativeWallet.PACKAGE_NAME} correctly`));
|
|
32
34
|
}
|
|
33
35
|
let eventEmitter;
|
|
36
|
+
let paymentCredentialsHandler = null;
|
|
37
|
+
if (_reactNative.Platform.OS === 'android' && _NativeWallet.default) {
|
|
38
|
+
eventEmitter ??= new _reactNative.NativeEventEmitter(_NativeWallet.default);
|
|
39
|
+
eventEmitter.addListener('onPaymentCredentialsRequest', async data => {
|
|
40
|
+
if (!paymentCredentialsHandler) {
|
|
41
|
+
console.warn(`[${_NativeWallet.PACKAGE_NAME}] Received payment credentials request but no handler is set`);
|
|
42
|
+
await (_NativeWallet.default === null || _NativeWallet.default === void 0 ? void 0 : _NativeWallet.default.AndroidRejectPaymentCredentials(data.requestId, 'No payment credentials handler is set').catch(() => undefined));
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const responseData = await paymentCredentialsHandler(data);
|
|
47
|
+
await (_NativeWallet.default === null || _NativeWallet.default === void 0 ? void 0 : _NativeWallet.default.AndroidProvidePaymentCredentials(data.requestId, responseData));
|
|
48
|
+
} catch (error) {
|
|
49
|
+
console.error(`[${_NativeWallet.PACKAGE_NAME}] Error handling payment credentials request:`, error);
|
|
50
|
+
await (_NativeWallet.default === null || _NativeWallet.default === void 0 ? void 0 : _NativeWallet.default.AndroidRejectPaymentCredentials(data.requestId, error instanceof Error ? error.message : String(error)).catch(() => undefined));
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
34
54
|
function addListener(event, callback) {
|
|
35
55
|
if (!_NativeWallet.default) {
|
|
36
56
|
// eslint-disable-next-line no-console
|
|
@@ -85,7 +105,25 @@ async function getCardStatusByIdentifier(identifier, tsp) {
|
|
|
85
105
|
const tokenState = await _NativeWallet.default.getCardStatusByIdentifier(identifier, tsp.toUpperCase());
|
|
86
106
|
return (0, _utils.getCardState)(tokenState);
|
|
87
107
|
}
|
|
88
|
-
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Checks whether the card can still be added to a Google Wallet target: the phone or a paired wearable.
|
|
111
|
+
* Use it to decide whether to show the "Add to Google Wallet" button when wearables are supported.
|
|
112
|
+
* @param last4Digits - The last 4 digits of the card number (FPAN, not the token)
|
|
113
|
+
* @param network - The card network, e.g. `VISA`, `MASTERCARD`
|
|
114
|
+
* @param issuerName - The issuer name used for matching, as in the token metadata (not the card display name)
|
|
115
|
+
* @returns `true` if at least one target can still receive the card
|
|
116
|
+
*/
|
|
117
|
+
async function hasEligibleTokenizationTarget(last4Digits, network, issuerName) {
|
|
118
|
+
if (_reactNative.Platform.OS === 'ios') {
|
|
119
|
+
throw new Error('hasEligibleTokenizationTarget is not available on iOS');
|
|
120
|
+
}
|
|
121
|
+
if (!_NativeWallet.default) {
|
|
122
|
+
return getModuleLinkingRejection();
|
|
123
|
+
}
|
|
124
|
+
return _NativeWallet.default.hasEligibleTokenizationTarget(last4Digits, network.toUpperCase(), issuerName);
|
|
125
|
+
}
|
|
126
|
+
async function addCardToGoogleWallet(cardData, handlePaymentCredentialsGeneration) {
|
|
89
127
|
if (_reactNative.Platform.OS === 'ios') {
|
|
90
128
|
throw new Error('addCardToGoogleWallet is not available on iOS');
|
|
91
129
|
}
|
|
@@ -96,8 +134,13 @@ async function addCardToGoogleWallet(cardData) {
|
|
|
96
134
|
if (!isWalletInitialized) {
|
|
97
135
|
throw new Error('Wallet could not be initialized');
|
|
98
136
|
}
|
|
99
|
-
|
|
100
|
-
|
|
137
|
+
paymentCredentialsHandler = handlePaymentCredentialsGeneration;
|
|
138
|
+
try {
|
|
139
|
+
const tokenizationStatus = await _NativeWallet.default.addCardToGoogleWallet(cardData);
|
|
140
|
+
return (0, _utils.getTokenizationStatus)(tokenizationStatus);
|
|
141
|
+
} finally {
|
|
142
|
+
paymentCredentialsHandler = null;
|
|
143
|
+
}
|
|
101
144
|
}
|
|
102
145
|
async function resumeAddCardToGoogleWallet(cardData) {
|
|
103
146
|
if (_reactNative.Platform.OS === 'ios') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_NativeWallet","_interopRequireWildcard","_utils","_AddToWalletButton","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","getModuleLinkingRejection","Promise","reject","Error","PACKAGE_NAME","eventEmitter","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_NativeWallet","_interopRequireWildcard","_utils","_AddToWalletButton","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","getModuleLinkingRejection","Promise","reject","Error","PACKAGE_NAME","eventEmitter","paymentCredentialsHandler","Platform","OS","Wallet","NativeEventEmitter","addListener","data","console","warn","AndroidRejectPaymentCredentials","requestId","catch","undefined","responseData","AndroidProvidePaymentCredentials","error","message","String","event","callback","remove","removeListener","subscription","checkWalletAvailability","getSecureWalletInfo","isWalletInitialized","ensureGoogleWalletInitialized","getCardStatusBySuffix","last4Digits","cardState","getCardState","getCardStatusByIdentifier","identifier","tsp","tokenState","toUpperCase","hasEligibleTokenizationTarget","network","issuerName","addCardToGoogleWallet","cardData","handlePaymentCredentialsGeneration","tokenizationStatus","getTokenizationStatus","resumeAddCardToGoogleWallet","listTokens","resolve","addCardToAppleWallet","issuerEncryptPayloadCallback","wallet","passData","IOSPresentAddPaymentPassView","status","addPaymentPassToWallet","paymentPassData","nonce","nonceSignature","certificates","response","IOSHandleAddPaymentPassResponse"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TurboModuleRegistry","PACKAGE_NAME","Wallet","getEnforcing","error","Error","console","warn","message"],"sourceRoot":"../../src","sources":["NativeWallet.ts"],"mappings":"AACA,SAAQA,mBAAmB,QAAO,cAAc;
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","PACKAGE_NAME","Wallet","getEnforcing","error","Error","console","warn","message"],"sourceRoot":"../../src","sources":["NativeWallet.ts"],"mappings":"AACA,SAAQA,mBAAmB,QAAO,cAAc;AAuGhD,MAAMC,YAAY,GAAG,gCAAgC;AACrD;AACA;AACA;AACA,IAAIC,MAAwB;AAC5B,IAAI;EACFA,MAAM,GAAGF,mBAAmB,CAACG,YAAY,CAAO,UAAU,CAAC;AAC7D,CAAC,CAAC,OAAOC,KAAK,EAAE;EACd,IAAIA,KAAK,YAAYC,KAAK,EAAE;IAC1B;IACAC,OAAO,CAACC,IAAI,CAAC,IAAIN,YAAY,mCAAmCG,KAAK,CAACI,OAAO,EAAE,CAAC;EAClF;AACF;AACA,eAAeN,MAAM;AACrB,SAAQD,YAAY","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
1
2
|
/* eslint-disable @lwc/lwc/no-async-await */
|
|
2
3
|
import { NativeEventEmitter, Platform } from 'react-native';
|
|
3
4
|
import Wallet, { PACKAGE_NAME } from './NativeWallet';
|
|
@@ -7,6 +8,24 @@ function getModuleLinkingRejection() {
|
|
|
7
8
|
return Promise.reject(new Error(`Failed to load Wallet module, make sure to link ${PACKAGE_NAME} correctly`));
|
|
8
9
|
}
|
|
9
10
|
let eventEmitter;
|
|
11
|
+
let paymentCredentialsHandler = null;
|
|
12
|
+
if (Platform.OS === 'android' && Wallet) {
|
|
13
|
+
eventEmitter ??= new NativeEventEmitter(Wallet);
|
|
14
|
+
eventEmitter.addListener('onPaymentCredentialsRequest', async data => {
|
|
15
|
+
if (!paymentCredentialsHandler) {
|
|
16
|
+
console.warn(`[${PACKAGE_NAME}] Received payment credentials request but no handler is set`);
|
|
17
|
+
await (Wallet === null || Wallet === void 0 ? void 0 : Wallet.AndroidRejectPaymentCredentials(data.requestId, 'No payment credentials handler is set').catch(() => undefined));
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
const responseData = await paymentCredentialsHandler(data);
|
|
22
|
+
await (Wallet === null || Wallet === void 0 ? void 0 : Wallet.AndroidProvidePaymentCredentials(data.requestId, responseData));
|
|
23
|
+
} catch (error) {
|
|
24
|
+
console.error(`[${PACKAGE_NAME}] Error handling payment credentials request:`, error);
|
|
25
|
+
await (Wallet === null || Wallet === void 0 ? void 0 : Wallet.AndroidRejectPaymentCredentials(data.requestId, error instanceof Error ? error.message : String(error)).catch(() => undefined));
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
10
29
|
function addListener(event, callback) {
|
|
11
30
|
if (!Wallet) {
|
|
12
31
|
// eslint-disable-next-line no-console
|
|
@@ -61,7 +80,25 @@ async function getCardStatusByIdentifier(identifier, tsp) {
|
|
|
61
80
|
const tokenState = await Wallet.getCardStatusByIdentifier(identifier, tsp.toUpperCase());
|
|
62
81
|
return getCardState(tokenState);
|
|
63
82
|
}
|
|
64
|
-
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Checks whether the card can still be added to a Google Wallet target: the phone or a paired wearable.
|
|
86
|
+
* Use it to decide whether to show the "Add to Google Wallet" button when wearables are supported.
|
|
87
|
+
* @param last4Digits - The last 4 digits of the card number (FPAN, not the token)
|
|
88
|
+
* @param network - The card network, e.g. `VISA`, `MASTERCARD`
|
|
89
|
+
* @param issuerName - The issuer name used for matching, as in the token metadata (not the card display name)
|
|
90
|
+
* @returns `true` if at least one target can still receive the card
|
|
91
|
+
*/
|
|
92
|
+
async function hasEligibleTokenizationTarget(last4Digits, network, issuerName) {
|
|
93
|
+
if (Platform.OS === 'ios') {
|
|
94
|
+
throw new Error('hasEligibleTokenizationTarget is not available on iOS');
|
|
95
|
+
}
|
|
96
|
+
if (!Wallet) {
|
|
97
|
+
return getModuleLinkingRejection();
|
|
98
|
+
}
|
|
99
|
+
return Wallet.hasEligibleTokenizationTarget(last4Digits, network.toUpperCase(), issuerName);
|
|
100
|
+
}
|
|
101
|
+
async function addCardToGoogleWallet(cardData, handlePaymentCredentialsGeneration) {
|
|
65
102
|
if (Platform.OS === 'ios') {
|
|
66
103
|
throw new Error('addCardToGoogleWallet is not available on iOS');
|
|
67
104
|
}
|
|
@@ -72,8 +109,13 @@ async function addCardToGoogleWallet(cardData) {
|
|
|
72
109
|
if (!isWalletInitialized) {
|
|
73
110
|
throw new Error('Wallet could not be initialized');
|
|
74
111
|
}
|
|
75
|
-
|
|
76
|
-
|
|
112
|
+
paymentCredentialsHandler = handlePaymentCredentialsGeneration;
|
|
113
|
+
try {
|
|
114
|
+
const tokenizationStatus = await Wallet.addCardToGoogleWallet(cardData);
|
|
115
|
+
return getTokenizationStatus(tokenizationStatus);
|
|
116
|
+
} finally {
|
|
117
|
+
paymentCredentialsHandler = null;
|
|
118
|
+
}
|
|
77
119
|
}
|
|
78
120
|
async function resumeAddCardToGoogleWallet(cardData) {
|
|
79
121
|
if (Platform.OS === 'ios') {
|
|
@@ -127,5 +169,5 @@ async function addCardToAppleWallet(cardData, issuerEncryptPayloadCallback) {
|
|
|
127
169
|
const status = await addPaymentPassToWallet(passData);
|
|
128
170
|
return getTokenizationStatus(status);
|
|
129
171
|
}
|
|
130
|
-
export { AddToWalletButton, checkWalletAvailability, getSecureWalletInfo, getCardStatusBySuffix, getCardStatusByIdentifier, addCardToGoogleWallet, resumeAddCardToGoogleWallet, listTokens, addCardToAppleWallet, addListener, removeListener };
|
|
172
|
+
export { AddToWalletButton, checkWalletAvailability, getSecureWalletInfo, getCardStatusBySuffix, getCardStatusByIdentifier, hasEligibleTokenizationTarget, addCardToGoogleWallet, resumeAddCardToGoogleWallet, listTokens, addCardToAppleWallet, addListener, removeListener };
|
|
131
173
|
//# sourceMappingURL=index.js.map
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeEventEmitter","Platform","Wallet","PACKAGE_NAME","getCardState","getTokenizationStatus","AddToWalletButton","getModuleLinkingRejection","Promise","reject","Error","eventEmitter","
|
|
1
|
+
{"version":3,"names":["NativeEventEmitter","Platform","Wallet","PACKAGE_NAME","getCardState","getTokenizationStatus","AddToWalletButton","getModuleLinkingRejection","Promise","reject","Error","eventEmitter","paymentCredentialsHandler","OS","addListener","data","console","warn","AndroidRejectPaymentCredentials","requestId","catch","undefined","responseData","AndroidProvidePaymentCredentials","error","message","String","event","callback","remove","removeListener","subscription","checkWalletAvailability","getSecureWalletInfo","isWalletInitialized","ensureGoogleWalletInitialized","getCardStatusBySuffix","last4Digits","cardState","getCardStatusByIdentifier","identifier","tsp","tokenState","toUpperCase","hasEligibleTokenizationTarget","network","issuerName","addCardToGoogleWallet","cardData","handlePaymentCredentialsGeneration","tokenizationStatus","resumeAddCardToGoogleWallet","listTokens","resolve","addCardToAppleWallet","issuerEncryptPayloadCallback","wallet","passData","IOSPresentAddPaymentPassView","status","addPaymentPassToWallet","paymentPassData","nonce","nonceSignature","certificates","response","IOSHandleAddPaymentPassResponse"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -21,6 +21,8 @@ type AndroidCardData = {
|
|
|
21
21
|
cardHolderName: string;
|
|
22
22
|
lastDigits: string;
|
|
23
23
|
userAddress: UserAddress;
|
|
24
|
+
isVirtualCard?: boolean;
|
|
25
|
+
isBounceProvisioned?: boolean;
|
|
24
26
|
};
|
|
25
27
|
type AndroidResumeCardData = {
|
|
26
28
|
network: string;
|
|
@@ -35,9 +37,16 @@ type IOSCardData = {
|
|
|
35
37
|
cardDescription: string;
|
|
36
38
|
};
|
|
37
39
|
type onCardActivatedPayload = {
|
|
38
|
-
tokenId
|
|
40
|
+
tokenId?: string | null;
|
|
39
41
|
status: 'activated' | 'canceled';
|
|
40
42
|
};
|
|
43
|
+
type onPaymentCredentialsRequestPayload = {
|
|
44
|
+
requestId: string;
|
|
45
|
+
serverSessionId: string;
|
|
46
|
+
walletId: string;
|
|
47
|
+
tokenRequestorId: string | null;
|
|
48
|
+
opaquePaymentCard: string;
|
|
49
|
+
};
|
|
41
50
|
type IOSAddPaymentPassData = {
|
|
42
51
|
status: number;
|
|
43
52
|
nonce: string;
|
|
@@ -55,13 +64,20 @@ type TokenInfo = {
|
|
|
55
64
|
lastDigits: string;
|
|
56
65
|
tokenState: number;
|
|
57
66
|
};
|
|
67
|
+
type AndroidPaymentCredentialsResponse = {
|
|
68
|
+
opaquePaymentCard: string;
|
|
69
|
+
googleOpaquePaymentCard: string;
|
|
70
|
+
};
|
|
58
71
|
export interface Spec extends TurboModule {
|
|
59
72
|
checkWalletAvailability(): Promise<boolean>;
|
|
60
73
|
ensureGoogleWalletInitialized(): Promise<boolean>;
|
|
61
74
|
getSecureWalletInfo(): Promise<AndroidWalletData>;
|
|
62
75
|
getCardStatusBySuffix(last4Digits: string): Promise<number>;
|
|
63
76
|
getCardStatusByIdentifier(identifier: string, tsp: string): Promise<number>;
|
|
77
|
+
hasEligibleTokenizationTarget(last4Digits: string, network: string, issuerName: string): Promise<boolean>;
|
|
64
78
|
addCardToGoogleWallet(cardData: AndroidCardData): Promise<number>;
|
|
79
|
+
AndroidProvidePaymentCredentials(requestId: string, responseData: AndroidPaymentCredentialsResponse): Promise<boolean>;
|
|
80
|
+
AndroidRejectPaymentCredentials(requestId: string, errorMessage: string): Promise<boolean>;
|
|
65
81
|
resumeAddCardToGoogleWallet(cardData: AndroidResumeCardData): Promise<number>;
|
|
66
82
|
listTokens(): Promise<TokenInfo[]>;
|
|
67
83
|
IOSPresentAddPaymentPassView(cardData: IOSCardData): Promise<IOSAddPaymentPassData>;
|
|
@@ -73,5 +89,5 @@ declare const PACKAGE_NAME = "@expensify/react-native-wallet";
|
|
|
73
89
|
declare let Wallet: Spec | undefined;
|
|
74
90
|
export default Wallet;
|
|
75
91
|
export { PACKAGE_NAME };
|
|
76
|
-
export type { AndroidCardData, AndroidResumeCardData, IOSCardData, AndroidWalletData, CardStatus, UserAddress, onCardActivatedPayload, Platform, IOSAddPaymentPassData, IOSEncryptPayload, TokenizationStatus, TokenInfo, };
|
|
92
|
+
export type { AndroidCardData, AndroidResumeCardData, IOSCardData, AndroidWalletData, CardStatus, UserAddress, onCardActivatedPayload, onPaymentCredentialsRequestPayload, Platform, IOSAddPaymentPassData, IOSEncryptPayload, TokenizationStatus, TokenInfo, AndroidPaymentCredentialsResponse, };
|
|
77
93
|
//# sourceMappingURL=NativeWallet.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeWallet.d.ts","sourceRoot":"","sources":["../../../src/NativeWallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AAG9C,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,KAAK,UAAU,GAAG,WAAW,GAAG,mBAAmB,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;AAEzG,KAAK,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC;AAElC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"NativeWallet.d.ts","sourceRoot":"","sources":["../../../src/NativeWallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { EmitterSubscription } from 'react-native';
|
|
2
|
-
import type { TokenizationStatus, AndroidCardData, AndroidResumeCardData, CardStatus, IOSCardData, IOSEncryptPayload, AndroidWalletData, onCardActivatedPayload, IOSAddPaymentPassData, TokenInfo } from './NativeWallet';
|
|
2
|
+
import type { TokenizationStatus, AndroidCardData, AndroidResumeCardData, CardStatus, IOSCardData, IOSEncryptPayload, AndroidWalletData, onCardActivatedPayload, onPaymentCredentialsRequestPayload, IOSAddPaymentPassData, TokenInfo, AndroidPaymentCredentialsResponse } from './NativeWallet';
|
|
3
3
|
import AddToWalletButton from './AddToWalletButton';
|
|
4
4
|
declare function addListener(event: string, callback: (data: onCardActivatedPayload) => void): EmitterSubscription;
|
|
5
5
|
declare function removeListener(subscription: EmitterSubscription): void;
|
|
@@ -13,10 +13,19 @@ declare function getCardStatusBySuffix(last4Digits: string): Promise<CardStatus>
|
|
|
13
13
|
* @returns CardStatus - The card status
|
|
14
14
|
*/
|
|
15
15
|
declare function getCardStatusByIdentifier(identifier: string, tsp: string): Promise<CardStatus>;
|
|
16
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Checks whether the card can still be added to a Google Wallet target: the phone or a paired wearable.
|
|
18
|
+
* Use it to decide whether to show the "Add to Google Wallet" button when wearables are supported.
|
|
19
|
+
* @param last4Digits - The last 4 digits of the card number (FPAN, not the token)
|
|
20
|
+
* @param network - The card network, e.g. `VISA`, `MASTERCARD`
|
|
21
|
+
* @param issuerName - The issuer name used for matching, as in the token metadata (not the card display name)
|
|
22
|
+
* @returns `true` if at least one target can still receive the card
|
|
23
|
+
*/
|
|
24
|
+
declare function hasEligibleTokenizationTarget(last4Digits: string, network: string, issuerName: string): Promise<boolean>;
|
|
25
|
+
declare function addCardToGoogleWallet(cardData: AndroidCardData, handlePaymentCredentialsGeneration: (data: onPaymentCredentialsRequestPayload) => Promise<AndroidPaymentCredentialsResponse>): Promise<TokenizationStatus>;
|
|
17
26
|
declare function resumeAddCardToGoogleWallet(cardData: AndroidResumeCardData): Promise<TokenizationStatus>;
|
|
18
27
|
declare function listTokens(): Promise<TokenInfo[]>;
|
|
19
28
|
declare function addCardToAppleWallet(cardData: IOSCardData, issuerEncryptPayloadCallback: (nonce: string, nonceSignature: string, certificate: string[]) => Promise<IOSEncryptPayload>): Promise<TokenizationStatus>;
|
|
20
|
-
export type { AndroidCardData, AndroidWalletData, CardStatus, IOSEncryptPayload, IOSCardData, IOSAddPaymentPassData, onCardActivatedPayload, TokenizationStatus, TokenInfo };
|
|
21
|
-
export { AddToWalletButton, checkWalletAvailability, getSecureWalletInfo, getCardStatusBySuffix, getCardStatusByIdentifier, addCardToGoogleWallet, resumeAddCardToGoogleWallet, listTokens, addCardToAppleWallet, addListener, removeListener, };
|
|
29
|
+
export type { AndroidCardData, AndroidWalletData, CardStatus, IOSEncryptPayload, IOSCardData, IOSAddPaymentPassData, onCardActivatedPayload, onPaymentCredentialsRequestPayload, TokenizationStatus, TokenInfo, AndroidPaymentCredentialsResponse, };
|
|
30
|
+
export { AddToWalletButton, checkWalletAvailability, getSecureWalletInfo, getCardStatusBySuffix, getCardStatusByIdentifier, hasEligibleTokenizationTarget, addCardToGoogleWallet, resumeAddCardToGoogleWallet, listTokens, addCardToAppleWallet, addListener, removeListener, };
|
|
22
31
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,cAAc,CAAC;AAEtD,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,kCAAkC,EAClC,qBAAqB,EACrB,SAAS,EACT,iCAAiC,EAClC,MAAM,gBAAgB,CAAC;AAExB,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AA2BpD,iBAAS,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,GAAG,mBAAmB,CAQzG;AAED,iBAAS,cAAc,CAAC,YAAY,EAAE,mBAAmB,GAAG,IAAI,CAE/D;AAED,iBAAS,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC,CAKnD;AAED,iBAAe,mBAAmB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAc/D;AAED,iBAAe,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAO7E;AAED;;;;;GAKG;AACH,iBAAe,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAO7F;AAED;;;;;;;GAOG;AACH,iBAAe,6BAA6B,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUvH;AAED,iBAAe,qBAAqB,CAClC,QAAQ,EAAE,eAAe,EACzB,kCAAkC,EAAE,CAAC,IAAI,EAAE,kCAAkC,KAAK,OAAO,CAAC,iCAAiC,CAAC,GAC3H,OAAO,CAAC,kBAAkB,CAAC,CAoB7B;AAED,iBAAe,2BAA2B,CAAC,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAcvG;AAED,iBAAe,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAahD;AAED,iBAAe,oBAAoB,CACjC,QAAQ,EAAE,WAAW,EACrB,4BAA4B,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,iBAAiB,CAAC,GACzH,OAAO,CAAC,kBAAkB,CAAC,CA4B7B;AAED,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,kCAAkC,EAClC,kBAAkB,EAClB,SAAS,EACT,iCAAiC,GAClC,CAAC;AACF,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,6BAA6B,EAC7B,qBAAqB,EACrB,2BAA2B,EAC3B,UAAU,EACV,oBAAoB,EACpB,WAAW,EACX,cAAc,GACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expensify/react-native-wallet",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "A React Native module designed for seamless integration of Card Push Provisioning into Apple Wallet and Google Wallet, enabling easy and secure addition of payment cards directly from your application.",
|
|
5
5
|
"source": "./src/index.tsx",
|
|
6
6
|
"main": "lib/commonjs/index",
|
package/src/NativeWallet.ts
CHANGED
|
@@ -27,6 +27,8 @@ type AndroidCardData = {
|
|
|
27
27
|
cardHolderName: string;
|
|
28
28
|
lastDigits: string;
|
|
29
29
|
userAddress: UserAddress;
|
|
30
|
+
isVirtualCard?: boolean;
|
|
31
|
+
isBounceProvisioned?: boolean;
|
|
30
32
|
};
|
|
31
33
|
|
|
32
34
|
type AndroidResumeCardData = {
|
|
@@ -44,10 +46,18 @@ type IOSCardData = {
|
|
|
44
46
|
};
|
|
45
47
|
|
|
46
48
|
type onCardActivatedPayload = {
|
|
47
|
-
tokenId
|
|
49
|
+
tokenId?: string | null;
|
|
48
50
|
status: 'activated' | 'canceled';
|
|
49
51
|
};
|
|
50
52
|
|
|
53
|
+
type onPaymentCredentialsRequestPayload = {
|
|
54
|
+
requestId: string;
|
|
55
|
+
serverSessionId: string;
|
|
56
|
+
walletId: string;
|
|
57
|
+
tokenRequestorId: string | null;
|
|
58
|
+
opaquePaymentCard: string;
|
|
59
|
+
};
|
|
60
|
+
|
|
51
61
|
type IOSAddPaymentPassData = {
|
|
52
62
|
status: number;
|
|
53
63
|
nonce: string;
|
|
@@ -69,13 +79,21 @@ type TokenInfo = {
|
|
|
69
79
|
tokenState: number;
|
|
70
80
|
};
|
|
71
81
|
|
|
82
|
+
type AndroidPaymentCredentialsResponse = {
|
|
83
|
+
opaquePaymentCard: string;
|
|
84
|
+
googleOpaquePaymentCard: string;
|
|
85
|
+
};
|
|
86
|
+
|
|
72
87
|
export interface Spec extends TurboModule {
|
|
73
88
|
checkWalletAvailability(): Promise<boolean>;
|
|
74
89
|
ensureGoogleWalletInitialized(): Promise<boolean>;
|
|
75
90
|
getSecureWalletInfo(): Promise<AndroidWalletData>;
|
|
76
91
|
getCardStatusBySuffix(last4Digits: string): Promise<number>;
|
|
77
92
|
getCardStatusByIdentifier(identifier: string, tsp: string): Promise<number>;
|
|
93
|
+
hasEligibleTokenizationTarget(last4Digits: string, network: string, issuerName: string): Promise<boolean>;
|
|
78
94
|
addCardToGoogleWallet(cardData: AndroidCardData): Promise<number>;
|
|
95
|
+
AndroidProvidePaymentCredentials(requestId: string, responseData: AndroidPaymentCredentialsResponse): Promise<boolean>;
|
|
96
|
+
AndroidRejectPaymentCredentials(requestId: string, errorMessage: string): Promise<boolean>;
|
|
79
97
|
resumeAddCardToGoogleWallet(cardData: AndroidResumeCardData): Promise<number>;
|
|
80
98
|
listTokens(): Promise<TokenInfo[]>;
|
|
81
99
|
IOSPresentAddPaymentPassView(cardData: IOSCardData): Promise<IOSAddPaymentPassData>;
|
|
@@ -107,9 +125,11 @@ export type {
|
|
|
107
125
|
CardStatus,
|
|
108
126
|
UserAddress,
|
|
109
127
|
onCardActivatedPayload,
|
|
128
|
+
onPaymentCredentialsRequestPayload,
|
|
110
129
|
Platform,
|
|
111
130
|
IOSAddPaymentPassData,
|
|
112
131
|
IOSEncryptPayload,
|
|
113
132
|
TokenizationStatus,
|
|
114
133
|
TokenInfo,
|
|
134
|
+
AndroidPaymentCredentialsResponse,
|
|
115
135
|
};
|