@expensify/react-native-wallet 0.1.5
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/LICENSE +20 -0
- package/README.md +259 -0
- package/android/build.gradle +103 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifestNew.xml +2 -0
- package/android/src/main/java/com/expensify/wallet/Utils.kt +148 -0
- package/android/src/main/java/com/expensify/wallet/WalletModule.kt +301 -0
- package/android/src/main/java/com/expensify/wallet/WalletPackage.kt +43 -0
- package/android/src/main/java/com/expensify/wallet/error/InvalidNetworkError.kt +6 -0
- package/android/src/main/java/com/expensify/wallet/event/OnCardActivatedEvent.kt +18 -0
- package/android/src/main/java/com/expensify/wallet/model/CardData.kt +12 -0
- package/android/src/main/java/com/expensify/wallet/model/CardStatus.kt +15 -0
- package/android/src/main/java/com/expensify/wallet/model/TokenizationStatus.kt +7 -0
- package/android/src/main/java/com/expensify/wallet/model/WalletData.kt +7 -0
- package/android/src/paper/java/com/expensify/wallet/NativeWalletSpec.java +71 -0
- package/assets/buttons/android/af.svg +10 -0
- package/assets/buttons/android/am.svg +11 -0
- package/assets/buttons/android/ar.svg +16 -0
- package/assets/buttons/android/az.svg +16 -0
- package/assets/buttons/android/be.svg +16 -0
- package/assets/buttons/android/bg.svg +16 -0
- package/assets/buttons/android/bn.svg +10 -0
- package/assets/buttons/android/br.svg +16 -0
- package/assets/buttons/android/bs.svg +16 -0
- package/assets/buttons/android/ca.svg +16 -0
- package/assets/buttons/android/cs.svg +16 -0
- package/assets/buttons/android/da.svg +16 -0
- package/assets/buttons/android/de.svg +16 -0
- package/assets/buttons/android/el.svg +16 -0
- package/assets/buttons/android/en.svg +16 -0
- package/assets/buttons/android/es.svg +16 -0
- package/assets/buttons/android/et.svg +16 -0
- package/assets/buttons/android/fa.svg +11 -0
- package/assets/buttons/android/fi.svg +16 -0
- package/assets/buttons/android/fil.svg +16 -0
- package/assets/buttons/android/fr.svg +16 -0
- package/assets/buttons/android/he.svg +16 -0
- package/assets/buttons/android/hk.svg +16 -0
- package/assets/buttons/android/hr.svg +16 -0
- package/assets/buttons/android/hu.svg +16 -0
- package/assets/buttons/android/hy.svg +16 -0
- package/assets/buttons/android/id.svg +16 -0
- package/assets/buttons/android/is.svg +16 -0
- package/assets/buttons/android/it.svg +16 -0
- package/assets/buttons/android/ja.svg +16 -0
- package/assets/buttons/android/ka.svg +16 -0
- package/assets/buttons/android/kk.svg +16 -0
- package/assets/buttons/android/km.svg +10 -0
- package/assets/buttons/android/ky.svg +16 -0
- package/assets/buttons/android/lo.svg +10 -0
- package/assets/buttons/android/lt.svg +16 -0
- package/assets/buttons/android/lv.svg +16 -0
- package/assets/buttons/android/mk.svg +16 -0
- package/assets/buttons/android/mn.svg +10 -0
- package/assets/buttons/android/my.svg +10 -0
- package/assets/buttons/android/ne.svg +10 -0
- package/assets/buttons/android/nl.svg +16 -0
- package/assets/buttons/android/no.svg +16 -0
- package/assets/buttons/android/pl.svg +16 -0
- package/assets/buttons/android/pt.svg +16 -0
- package/assets/buttons/android/ro.svg +16 -0
- package/assets/buttons/android/ru.svg +16 -0
- package/assets/buttons/android/se.svg +16 -0
- package/assets/buttons/android/si.svg +10 -0
- package/assets/buttons/android/sk.svg +16 -0
- package/assets/buttons/android/sl.svg +16 -0
- package/assets/buttons/android/sq.svg +16 -0
- package/assets/buttons/android/sr.svg +16 -0
- package/assets/buttons/android/sw.svg +10 -0
- package/assets/buttons/android/th.svg +16 -0
- package/assets/buttons/android/tr.svg +16 -0
- package/assets/buttons/android/tw.svg +16 -0
- package/assets/buttons/android/uk.svg +16 -0
- package/assets/buttons/android/ur.svg +11 -0
- package/assets/buttons/android/uz.svg +16 -0
- package/assets/buttons/android/vi.svg +16 -0
- package/assets/buttons/apple/ar.svg +269 -0
- package/assets/buttons/apple/az.svg +275 -0
- package/assets/buttons/apple/bg.svg +275 -0
- package/assets/buttons/apple/cs.svg +288 -0
- package/assets/buttons/apple/da.svg +267 -0
- package/assets/buttons/apple/de.svg +282 -0
- package/assets/buttons/apple/el.svg +298 -0
- package/assets/buttons/apple/en.svg +259 -0
- package/assets/buttons/apple/es.svg +291 -0
- package/assets/buttons/apple/et.svg +279 -0
- package/assets/buttons/apple/fi.svg +287 -0
- package/assets/buttons/apple/fil.svg +292 -0
- package/assets/buttons/apple/fr.svg +295 -0
- package/assets/buttons/apple/he.svg +274 -0
- package/assets/buttons/apple/hi.svg +227 -0
- package/assets/buttons/apple/hk.svg +265 -0
- package/assets/buttons/apple/hr.svg +277 -0
- package/assets/buttons/apple/hu.svg +302 -0
- package/assets/buttons/apple/id.svg +284 -0
- package/assets/buttons/apple/it.svg +280 -0
- package/assets/buttons/apple/ja.svg +268 -0
- package/assets/buttons/apple/ko.svg +266 -0
- package/assets/buttons/apple/lt.svg +283 -0
- package/assets/buttons/apple/lv.svg +277 -0
- package/assets/buttons/apple/ms.svg +280 -0
- package/assets/buttons/apple/mt.svg +268 -0
- package/assets/buttons/apple/nl.svg +290 -0
- package/assets/buttons/apple/no.svg +284 -0
- package/assets/buttons/apple/pl.svg +280 -0
- package/assets/buttons/apple/pt.svg +290 -0
- package/assets/buttons/apple/ro.svg +290 -0
- package/assets/buttons/apple/ru.svg +279 -0
- package/assets/buttons/apple/sk.svg +288 -0
- package/assets/buttons/apple/sl.svg +269 -0
- package/assets/buttons/apple/sv.svg +287 -0
- package/assets/buttons/apple/th.svg +277 -0
- package/assets/buttons/apple/tr.svg +273 -0
- package/assets/buttons/apple/uk.svg +274 -0
- package/assets/buttons/apple/vi.svg +259 -0
- package/assets/buttons/apple/zh.svg +279 -0
- package/assets/hero-image.png +0 -0
- package/assets/signature-dark.png +0 -0
- package/assets/signature-light.png +0 -0
- package/ios/RNWallet.h +13 -0
- package/ios/RNWallet.mm +153 -0
- package/ios/WalletManager.swift +292 -0
- package/ios/stucts/AddPassResponse.swift +36 -0
- package/ios/stucts/CardInfo.swift +37 -0
- package/ios/stucts/WalletEncryptedPayload.swift +27 -0
- package/lib/commonjs/AddToWalletButton.js +47 -0
- package/lib/commonjs/AddToWalletButton.js.map +1 -0
- package/lib/commonjs/NativeWallet.js +22 -0
- package/lib/commonjs/NativeWallet.js.map +1 -0
- package/lib/commonjs/constants.js +195 -0
- package/lib/commonjs/constants.js.map +1 -0
- package/lib/commonjs/index.js +114 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/utils.js +38 -0
- package/lib/commonjs/utils.js.map +1 -0
- package/lib/module/AddToWalletButton.js +38 -0
- package/lib/module/AddToWalletButton.js.map +1 -0
- package/lib/module/NativeWallet.js +17 -0
- package/lib/module/NativeWallet.js.map +1 -0
- package/lib/module/constants.js +188 -0
- package/lib/module/constants.js.map +1 -0
- package/lib/module/index.js +92 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/utils.js +32 -0
- package/lib/module/utils.js.map +1 -0
- package/lib/typescript/src/AddToWalletButton.d.ts +10 -0
- package/lib/typescript/src/AddToWalletButton.d.ts.map +1 -0
- package/lib/typescript/src/NativeWallet.d.ts +64 -0
- package/lib/typescript/src/NativeWallet.d.ts.map +1 -0
- package/lib/typescript/src/constants.d.ts +4 -0
- package/lib/typescript/src/constants.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +20 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/utils.d.ts +5 -0
- package/lib/typescript/src/utils.d.ts.map +1 -0
- package/package.json +172 -0
- package/react-native-wallet.podspec +36 -0
- package/src/AddToWalletButton.tsx +49 -0
- package/src/NativeWallet.ts +87 -0
- package/src/constants.ts +191 -0
- package/src/index.tsx +124 -0
- package/src/utils.ts +35 -0
package/src/constants.ts
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import afAndroid from '../assets/buttons/android/af.svg';
|
|
2
|
+
import arAndroid from '../assets/buttons/android/ar.svg';
|
|
3
|
+
import azAndroid from '../assets/buttons/android/az.svg';
|
|
4
|
+
import bgAndroid from '../assets/buttons/android/bg.svg';
|
|
5
|
+
import bsAndroid from '../assets/buttons/android/bs.svg';
|
|
6
|
+
import caAndroid from '../assets/buttons/android/ca.svg';
|
|
7
|
+
import csAndroid from '../assets/buttons/android/cs.svg';
|
|
8
|
+
import daAndroid from '../assets/buttons/android/da.svg';
|
|
9
|
+
import deAndroid from '../assets/buttons/android/de.svg';
|
|
10
|
+
import elAndroid from '../assets/buttons/android/el.svg';
|
|
11
|
+
import enAndroid from '../assets/buttons/android/en.svg';
|
|
12
|
+
import esAndroid from '../assets/buttons/android/es.svg';
|
|
13
|
+
import etAndroid from '../assets/buttons/android/et.svg';
|
|
14
|
+
import fiAndroid from '../assets/buttons/android/fi.svg';
|
|
15
|
+
import frAndroid from '../assets/buttons/android/fr.svg';
|
|
16
|
+
import heAndroid from '../assets/buttons/android/he.svg';
|
|
17
|
+
import hkAndroid from '../assets/buttons/android/hk.svg';
|
|
18
|
+
import hrAndroid from '../assets/buttons/android/hr.svg';
|
|
19
|
+
import huAndroid from '../assets/buttons/android/hu.svg';
|
|
20
|
+
import hyAndroid from '../assets/buttons/android/hy.svg';
|
|
21
|
+
import idAndroid from '../assets/buttons/android/id.svg';
|
|
22
|
+
import isAndroid from '../assets/buttons/android/is.svg';
|
|
23
|
+
import itAndroid from '../assets/buttons/android/it.svg';
|
|
24
|
+
import jaAndroid from '../assets/buttons/android/ja.svg';
|
|
25
|
+
import kaAndroid from '../assets/buttons/android/ka.svg';
|
|
26
|
+
import kkAndroid from '../assets/buttons/android/kk.svg';
|
|
27
|
+
import kmAndroid from '../assets/buttons/android/km.svg';
|
|
28
|
+
import kyAndroid from '../assets/buttons/android/ky.svg';
|
|
29
|
+
import ltAndroid from '../assets/buttons/android/lt.svg';
|
|
30
|
+
import lvAndroid from '../assets/buttons/android/lv.svg';
|
|
31
|
+
import mkAndroid from '../assets/buttons/android/mk.svg';
|
|
32
|
+
import nlAndroid from '../assets/buttons/android/nl.svg';
|
|
33
|
+
import noAndroid from '../assets/buttons/android/no.svg';
|
|
34
|
+
import plAndroid from '../assets/buttons/android/pl.svg';
|
|
35
|
+
import ptAndroid from '../assets/buttons/android/pt.svg';
|
|
36
|
+
import roAndroid from '../assets/buttons/android/ro.svg';
|
|
37
|
+
import ruAndroid from '../assets/buttons/android/ru.svg';
|
|
38
|
+
import skAndroid from '../assets/buttons/android/sk.svg';
|
|
39
|
+
import slAndroid from '../assets/buttons/android/sl.svg';
|
|
40
|
+
import sqAndroid from '../assets/buttons/android/sq.svg';
|
|
41
|
+
import srAndroid from '../assets/buttons/android/sr.svg';
|
|
42
|
+
import swAndroid from '../assets/buttons/android/sw.svg';
|
|
43
|
+
import thAndroid from '../assets/buttons/android/th.svg';
|
|
44
|
+
import trAndroid from '../assets/buttons/android/tr.svg';
|
|
45
|
+
import twAndroid from '../assets/buttons/android/tw.svg';
|
|
46
|
+
import ukAndroid from '../assets/buttons/android/uk.svg';
|
|
47
|
+
import urAndroid from '../assets/buttons/android/ur.svg';
|
|
48
|
+
import uzAndroid from '../assets/buttons/android/uz.svg';
|
|
49
|
+
import enApple from '../assets/buttons/apple/en.svg';
|
|
50
|
+
import esApple from '../assets/buttons/apple/es.svg';
|
|
51
|
+
import arApple from '../assets/buttons/apple/ar.svg';
|
|
52
|
+
import azApple from '../assets/buttons/apple/az.svg';
|
|
53
|
+
import bgApple from '../assets/buttons/apple/bg.svg';
|
|
54
|
+
import csApple from '../assets/buttons/apple/cs.svg';
|
|
55
|
+
import daApple from '../assets/buttons/apple/da.svg';
|
|
56
|
+
import deApple from '../assets/buttons/apple/de.svg';
|
|
57
|
+
import elApple from '../assets/buttons/apple/el.svg';
|
|
58
|
+
import etApple from '../assets/buttons/apple/et.svg';
|
|
59
|
+
import fiApple from '../assets/buttons/apple/fi.svg';
|
|
60
|
+
import filApple from '../assets/buttons/apple/fil.svg';
|
|
61
|
+
import frApple from '../assets/buttons/apple/fr.svg';
|
|
62
|
+
import heApple from '../assets/buttons/apple/he.svg';
|
|
63
|
+
import hiApple from '../assets/buttons/apple/hi.svg';
|
|
64
|
+
import hkApple from '../assets/buttons/apple/hk.svg';
|
|
65
|
+
import hrApple from '../assets/buttons/apple/hr.svg';
|
|
66
|
+
import huApple from '../assets/buttons/apple/hu.svg';
|
|
67
|
+
import idApple from '../assets/buttons/apple/id.svg';
|
|
68
|
+
import itApple from '../assets/buttons/apple/it.svg';
|
|
69
|
+
import jaApple from '../assets/buttons/apple/ja.svg';
|
|
70
|
+
import koApple from '../assets/buttons/apple/ko.svg';
|
|
71
|
+
import ltApple from '../assets/buttons/apple/lt.svg';
|
|
72
|
+
import lvApple from '../assets/buttons/apple/lv.svg';
|
|
73
|
+
import msApple from '../assets/buttons/apple/ms.svg';
|
|
74
|
+
import mtApple from '../assets/buttons/apple/mt.svg';
|
|
75
|
+
import nlApple from '../assets/buttons/apple/nl.svg';
|
|
76
|
+
import noApple from '../assets/buttons/apple/no.svg';
|
|
77
|
+
import plApple from '../assets/buttons/apple/pl.svg';
|
|
78
|
+
import ptApple from '../assets/buttons/apple/pt.svg';
|
|
79
|
+
import roApple from '../assets/buttons/apple/ro.svg';
|
|
80
|
+
import ruApple from '../assets/buttons/apple/ru.svg';
|
|
81
|
+
import skApple from '../assets/buttons/apple/sk.svg';
|
|
82
|
+
import slApple from '../assets/buttons/apple/sl.svg';
|
|
83
|
+
import svApple from '../assets/buttons/apple/sv.svg';
|
|
84
|
+
import thApple from '../assets/buttons/apple/th.svg';
|
|
85
|
+
import trApple from '../assets/buttons/apple/tr.svg';
|
|
86
|
+
import ukApple from '../assets/buttons/apple/uk.svg';
|
|
87
|
+
import viApple from '../assets/buttons/apple/vi.svg';
|
|
88
|
+
import zhApple from '../assets/buttons/apple/zh.svg';
|
|
89
|
+
|
|
90
|
+
import type {Platform} from './NativeWallet';
|
|
91
|
+
|
|
92
|
+
// Here you can find the expansion of language abbreviations used in the map
|
|
93
|
+
// https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes (Set 1)
|
|
94
|
+
const LOCALIZED_BUTTONS: Record<Platform, Record<string, string>> = {
|
|
95
|
+
android: {
|
|
96
|
+
af: afAndroid,
|
|
97
|
+
ar: arAndroid,
|
|
98
|
+
az: azAndroid,
|
|
99
|
+
bg: bgAndroid,
|
|
100
|
+
bs: bsAndroid,
|
|
101
|
+
ca: caAndroid,
|
|
102
|
+
cs: csAndroid,
|
|
103
|
+
da: daAndroid,
|
|
104
|
+
de: deAndroid,
|
|
105
|
+
el: elAndroid,
|
|
106
|
+
en: enAndroid,
|
|
107
|
+
es: esAndroid,
|
|
108
|
+
et: etAndroid,
|
|
109
|
+
fi: fiAndroid,
|
|
110
|
+
fr: frAndroid,
|
|
111
|
+
he: heAndroid,
|
|
112
|
+
hk: hkAndroid,
|
|
113
|
+
hr: hrAndroid,
|
|
114
|
+
hu: huAndroid,
|
|
115
|
+
hy: hyAndroid,
|
|
116
|
+
id: idAndroid,
|
|
117
|
+
is: isAndroid,
|
|
118
|
+
it: itAndroid,
|
|
119
|
+
ja: jaAndroid,
|
|
120
|
+
ka: kaAndroid,
|
|
121
|
+
kk: kkAndroid,
|
|
122
|
+
km: kmAndroid,
|
|
123
|
+
ky: kyAndroid,
|
|
124
|
+
lt: ltAndroid,
|
|
125
|
+
lv: lvAndroid,
|
|
126
|
+
mk: mkAndroid,
|
|
127
|
+
nl: nlAndroid,
|
|
128
|
+
no: noAndroid,
|
|
129
|
+
pl: plAndroid,
|
|
130
|
+
pt: ptAndroid,
|
|
131
|
+
ro: roAndroid,
|
|
132
|
+
ru: ruAndroid,
|
|
133
|
+
sk: skAndroid,
|
|
134
|
+
sl: slAndroid,
|
|
135
|
+
sq: sqAndroid,
|
|
136
|
+
sr: srAndroid,
|
|
137
|
+
sw: swAndroid,
|
|
138
|
+
th: thAndroid,
|
|
139
|
+
tr: trAndroid,
|
|
140
|
+
tw: twAndroid,
|
|
141
|
+
uk: ukAndroid,
|
|
142
|
+
ur: urAndroid,
|
|
143
|
+
uz: uzAndroid,
|
|
144
|
+
default: enAndroid,
|
|
145
|
+
},
|
|
146
|
+
ios: {
|
|
147
|
+
ar: arApple,
|
|
148
|
+
az: azApple,
|
|
149
|
+
bg: bgApple,
|
|
150
|
+
cs: csApple,
|
|
151
|
+
da: daApple,
|
|
152
|
+
de: deApple,
|
|
153
|
+
el: elApple,
|
|
154
|
+
en: enApple,
|
|
155
|
+
es: esApple,
|
|
156
|
+
et: etApple,
|
|
157
|
+
fi: fiApple,
|
|
158
|
+
fil: filApple,
|
|
159
|
+
fr: frApple,
|
|
160
|
+
he: heApple,
|
|
161
|
+
hi: hiApple,
|
|
162
|
+
hk: hkApple,
|
|
163
|
+
hr: hrApple,
|
|
164
|
+
hu: huApple,
|
|
165
|
+
id: idApple,
|
|
166
|
+
it: itApple,
|
|
167
|
+
ja: jaApple,
|
|
168
|
+
ko: koApple,
|
|
169
|
+
lt: ltApple,
|
|
170
|
+
lv: lvApple,
|
|
171
|
+
ms: msApple,
|
|
172
|
+
mt: mtApple,
|
|
173
|
+
nl: nlApple,
|
|
174
|
+
no: noApple,
|
|
175
|
+
pl: plApple,
|
|
176
|
+
pt: ptApple,
|
|
177
|
+
ro: roApple,
|
|
178
|
+
ru: ruApple,
|
|
179
|
+
sk: skApple,
|
|
180
|
+
sl: slApple,
|
|
181
|
+
sv: svApple,
|
|
182
|
+
th: thApple,
|
|
183
|
+
tr: trApple,
|
|
184
|
+
uk: ukApple,
|
|
185
|
+
vi: viApple,
|
|
186
|
+
zh: zhApple,
|
|
187
|
+
default: enApple,
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
export default LOCALIZED_BUTTONS;
|
package/src/index.tsx
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/* eslint-disable @lwc/lwc/no-async-await */
|
|
2
|
+
import {NativeEventEmitter, Platform} from 'react-native';
|
|
3
|
+
import type {EmitterSubscription} from 'react-native';
|
|
4
|
+
import Wallet, {PACKAGE_NAME} from './NativeWallet';
|
|
5
|
+
import type {TokenizationStatus, AndroidCardData, CardStatus, IOSCardData, IOSEncryptPayload, AndroidWalletData, onCardActivatedPayload, IOSAddPaymentPassData} from './NativeWallet';
|
|
6
|
+
import {getCardState, getTokenizationStatus} from './utils';
|
|
7
|
+
import AddToWalletButton from './AddToWalletButton';
|
|
8
|
+
|
|
9
|
+
function getModuleLinkingRejection() {
|
|
10
|
+
return Promise.reject(new Error(`Failed to load Wallet module, make sure to link ${PACKAGE_NAME} correctly`));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const eventEmitter = new NativeEventEmitter(Wallet);
|
|
14
|
+
|
|
15
|
+
function addListener(event: string, callback: (data: onCardActivatedPayload) => void): EmitterSubscription {
|
|
16
|
+
return eventEmitter.addListener(event, callback);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function removeListener(subscription: EmitterSubscription): void {
|
|
20
|
+
subscription.remove();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function checkWalletAvailability(): Promise<boolean> {
|
|
24
|
+
if (!Wallet) {
|
|
25
|
+
return getModuleLinkingRejection();
|
|
26
|
+
}
|
|
27
|
+
return Wallet.checkWalletAvailability();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async function getSecureWalletInfo(): Promise<AndroidWalletData> {
|
|
31
|
+
if (Platform.OS === 'ios') {
|
|
32
|
+
throw new Error('getSecureWalletInfo is not available on iOS');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (!Wallet) {
|
|
36
|
+
return getModuleLinkingRejection();
|
|
37
|
+
}
|
|
38
|
+
const isWalletInitialized = await Wallet.ensureGoogleWalletInitialized();
|
|
39
|
+
if (!isWalletInitialized) {
|
|
40
|
+
throw new Error('Wallet could not be initialized');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return Wallet.getSecureWalletInfo();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async function getCardStatusBySuffix(last4Digits: string): Promise<CardStatus> {
|
|
47
|
+
if (!Wallet) {
|
|
48
|
+
return getModuleLinkingRejection();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const cardState = await Wallet.getCardStatusBySuffix(last4Digits);
|
|
52
|
+
return getCardState(cardState);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Returns the state of a card based on a platform-specific identifier.
|
|
57
|
+
* @param identifier - The card identifier. On Android, it's `Token Reference ID` and on iOS, it's `Primary Account Identifier`
|
|
58
|
+
* @param tsp - The Token Service Provider, e.g. `VISA`, `MASTERCARD`
|
|
59
|
+
* @returns CardStatus - The card status
|
|
60
|
+
*/
|
|
61
|
+
async function getCardStatusByIdentifier(identifier: string, tsp: string): Promise<CardStatus> {
|
|
62
|
+
if (!Wallet) {
|
|
63
|
+
return getModuleLinkingRejection();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const tokenState = await Wallet.getCardStatusByIdentifier(identifier, tsp.toUpperCase());
|
|
67
|
+
return getCardState(tokenState);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async function addCardToGoogleWallet(cardData: AndroidCardData): Promise<TokenizationStatus> {
|
|
71
|
+
if (Platform.OS === 'ios') {
|
|
72
|
+
throw new Error('addCardToGoogleWallet is not available on iOS');
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (!Wallet) {
|
|
76
|
+
return getModuleLinkingRejection();
|
|
77
|
+
}
|
|
78
|
+
const isWalletInitialized = await Wallet.ensureGoogleWalletInitialized();
|
|
79
|
+
if (!isWalletInitialized) {
|
|
80
|
+
throw new Error('Wallet could not be initialized');
|
|
81
|
+
}
|
|
82
|
+
const tokenizationStatus = await Wallet.addCardToGoogleWallet(cardData);
|
|
83
|
+
return getTokenizationStatus(tokenizationStatus);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async function addCardToAppleWallet(
|
|
87
|
+
cardData: IOSCardData,
|
|
88
|
+
issuerEncryptPayloadCallback: (nonce: string, nonceSignature: string, certificate: string[]) => Promise<IOSEncryptPayload>,
|
|
89
|
+
): Promise<TokenizationStatus> {
|
|
90
|
+
if (Platform.OS === 'android') {
|
|
91
|
+
throw new Error('addCardToAppleWallet is not available on Andorid');
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const passData = await Wallet?.IOSPresentAddPaymentPassView(cardData);
|
|
95
|
+
if (!passData || passData.status !== 0) {
|
|
96
|
+
return getTokenizationStatus(passData?.status || -1);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
async function addPaymentPassToWallet(paymentPassData: IOSAddPaymentPassData): Promise<number> {
|
|
100
|
+
const responseData = await issuerEncryptPayloadCallback(paymentPassData.nonce, paymentPassData.nonceSignature, paymentPassData.certificates);
|
|
101
|
+
const response = await Wallet?.IOSHandleAddPaymentPassResponse(responseData);
|
|
102
|
+
// Response is null when a pass is successfully added to the wallet or the user cancels the process
|
|
103
|
+
// In case the user presses the `Try again` option, new pass data is returned, and it should reenter the function
|
|
104
|
+
if (response) {
|
|
105
|
+
return addPaymentPassToWallet(response);
|
|
106
|
+
}
|
|
107
|
+
return 0;
|
|
108
|
+
}
|
|
109
|
+
const status = await addPaymentPassToWallet(passData);
|
|
110
|
+
return getTokenizationStatus(status);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export type {AndroidCardData, AndroidWalletData, CardStatus, IOSEncryptPayload, IOSCardData, IOSAddPaymentPassData, onCardActivatedPayload, TokenizationStatus};
|
|
114
|
+
export {
|
|
115
|
+
AddToWalletButton,
|
|
116
|
+
checkWalletAvailability,
|
|
117
|
+
getSecureWalletInfo,
|
|
118
|
+
getCardStatusBySuffix,
|
|
119
|
+
getCardStatusByIdentifier,
|
|
120
|
+
addCardToGoogleWallet,
|
|
121
|
+
addCardToAppleWallet,
|
|
122
|
+
addListener,
|
|
123
|
+
removeListener,
|
|
124
|
+
};
|
package/src/utils.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type {CardStatus, TokenizationStatus} from './NativeWallet';
|
|
2
|
+
|
|
3
|
+
function getCardState(stateId: number): CardStatus {
|
|
4
|
+
switch (stateId) {
|
|
5
|
+
case -1:
|
|
6
|
+
return 'not found';
|
|
7
|
+
case 0:
|
|
8
|
+
return 'active';
|
|
9
|
+
case 1:
|
|
10
|
+
return 'requireActivation';
|
|
11
|
+
case 2:
|
|
12
|
+
return 'pending';
|
|
13
|
+
case 3:
|
|
14
|
+
return 'suspended';
|
|
15
|
+
case 4:
|
|
16
|
+
return 'deactivated';
|
|
17
|
+
default:
|
|
18
|
+
throw new Error(`Unknown card state: ${stateId}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function getTokenizationStatus(stateId: number): TokenizationStatus {
|
|
23
|
+
switch (stateId) {
|
|
24
|
+
case -1:
|
|
25
|
+
return 'error';
|
|
26
|
+
case 0:
|
|
27
|
+
return 'success';
|
|
28
|
+
case 1:
|
|
29
|
+
return 'canceled';
|
|
30
|
+
default:
|
|
31
|
+
throw new Error(`Unknown tokenization status: ${stateId}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export {getCardState, getTokenizationStatus};
|