frames-react-native 1.1.9 → 1.2.2
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/.github/workflows/cd.yml +6 -6
- package/.github/workflows/ci.yml +3 -3
- package/__mocks__/fileTransformer.js +9 -0
- package/__tests__/Integration.test.tsx +109 -373
- package/dist/Frames.d.ts +1 -1
- package/dist/Frames.js +5 -5
- package/dist/Frames.js.map +1 -1
- package/dist/components/CardNumber.js +17 -16
- package/dist/components/CardNumber.js.map +1 -1
- package/dist/components/Cvv.d.ts +1 -1
- package/dist/components/Cvv.js +9 -8
- package/dist/components/Cvv.js.map +1 -1
- package/dist/components/ExpiryDate.d.ts +1 -1
- package/dist/components/ExpiryDate.js +9 -8
- package/dist/components/ExpiryDate.js.map +1 -1
- package/dist/components/SubmitButton.js +11 -11
- package/dist/components/SubmitButton.js.map +1 -1
- package/dist/types/types.d.ts +13 -13
- package/dist/types/types.js +1 -0
- package/dist/utils/card.d.ts +5 -4
- package/dist/utils/card.js +14 -10
- package/dist/utils/card.js.map +1 -1
- package/dist/utils/date.js.map +1 -1
- package/dist/utils/http.d.ts +1 -1
- package/dist/utils/http.js +5 -6
- package/dist/utils/http.js.map +1 -1
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/reducer.d.ts +5 -28
- package/dist/utils/reducer.js +7 -7
- package/dist/utils/reducer.js.map +1 -1
- package/package.json +18 -15
package/.github/workflows/cd.yml
CHANGED
|
@@ -13,10 +13,10 @@ jobs:
|
|
|
13
13
|
runs-on: ubuntu-latest
|
|
14
14
|
steps:
|
|
15
15
|
- uses: actions/checkout@master
|
|
16
|
-
- uses: actions/checkout@
|
|
17
|
-
- uses: actions/setup-node@
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
- uses: actions/setup-node@v4
|
|
18
18
|
with:
|
|
19
|
-
node-version:
|
|
19
|
+
node-version: 21
|
|
20
20
|
- run: npm ci
|
|
21
21
|
- run: npm test
|
|
22
22
|
- name: Upload coverage to Codecov
|
|
@@ -29,10 +29,10 @@ jobs:
|
|
|
29
29
|
needs: test-and-coverage
|
|
30
30
|
runs-on: ubuntu-latest
|
|
31
31
|
steps:
|
|
32
|
-
- uses: actions/checkout@
|
|
33
|
-
- uses: actions/setup-node@
|
|
32
|
+
- uses: actions/checkout@v4
|
|
33
|
+
- uses: actions/setup-node@v4
|
|
34
34
|
with:
|
|
35
|
-
node-version:
|
|
35
|
+
node-version: 21
|
|
36
36
|
registry-url: https://registry.npmjs.org/
|
|
37
37
|
- run: npm ci
|
|
38
38
|
- run: npm run build
|
package/.github/workflows/ci.yml
CHANGED
|
@@ -7,9 +7,9 @@ jobs:
|
|
|
7
7
|
runs-on: ubuntu-latest
|
|
8
8
|
steps:
|
|
9
9
|
- uses: actions/checkout@master
|
|
10
|
-
- uses: actions/checkout@
|
|
11
|
-
- uses: actions/setup-node@
|
|
10
|
+
- uses: actions/checkout@v4
|
|
11
|
+
- uses: actions/setup-node@v4
|
|
12
12
|
with:
|
|
13
|
-
node-version:
|
|
13
|
+
node-version: 21
|
|
14
14
|
- run: npm ci
|
|
15
15
|
- run: npm test
|
|
@@ -2,400 +2,136 @@ import React from "react";
|
|
|
2
2
|
import { render, fireEvent, waitFor } from "@testing-library/react-native";
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
|
-
CardNumber,
|
|
6
5
|
Frames,
|
|
6
|
+
CardNumber,
|
|
7
7
|
ExpiryDate,
|
|
8
8
|
Cvv,
|
|
9
9
|
SubmitButton,
|
|
10
10
|
} from "../src/index";
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
config={{
|
|
21
|
-
publicKey: PK,
|
|
22
|
-
debug: true,
|
|
23
|
-
}}
|
|
24
|
-
cardTokenized={tokenized}
|
|
25
|
-
>
|
|
26
|
-
<CardNumber placeholder="card-number" />
|
|
27
|
-
<ExpiryDate placeholder="expiry-date" />
|
|
28
|
-
<Cvv placeholder="cvv" />
|
|
29
|
-
<SubmitButton
|
|
30
|
-
title="Pay Now"
|
|
31
|
-
testID={"submit-button"}
|
|
32
|
-
onPress={() => {}}
|
|
33
|
-
/>
|
|
34
|
-
</Frames>
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
let cardNumber = getByPlaceholderText("card-number");
|
|
38
|
-
let expiryDate = getByPlaceholderText("expiry-date");
|
|
39
|
-
let cvv = getByPlaceholderText("cvv");
|
|
40
|
-
let pay = getByTestId("submit-button");
|
|
41
|
-
fireEvent.changeText(cardNumber, "4242424242424242");
|
|
42
|
-
fireEvent.changeText(expiryDate, "1128");
|
|
43
|
-
fireEvent.changeText(cvv, "100");
|
|
44
|
-
fireEvent.press(pay);
|
|
45
|
-
await waitFor(() => {
|
|
46
|
-
expect(tokenized).toHaveBeenCalledTimes(1);
|
|
47
|
-
});
|
|
48
|
-
expect(tokenized.mock.calls[0][0].last4).toEqual("4242");
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
it("shared the card bin", async () => {
|
|
52
|
-
const binChange = jest.fn();
|
|
53
|
-
|
|
54
|
-
const { getByPlaceholderText, getByTestId } = render(
|
|
55
|
-
<Frames
|
|
56
|
-
config={{
|
|
57
|
-
publicKey: PK,
|
|
58
|
-
debug: true,
|
|
59
|
-
}}
|
|
60
|
-
cardTokenized={() => {}}
|
|
61
|
-
cardBinChanged={binChange}
|
|
62
|
-
>
|
|
63
|
-
<CardNumber placeholder="card-number" />
|
|
64
|
-
<ExpiryDate placeholder="expiry-date" />
|
|
65
|
-
<Cvv placeholder="cvv" />
|
|
66
|
-
<SubmitButton
|
|
67
|
-
title="Pay Now"
|
|
68
|
-
testID={"submit-button"}
|
|
69
|
-
onPress={() => {}}
|
|
70
|
-
/>
|
|
71
|
-
</Frames>
|
|
72
|
-
);
|
|
73
|
-
|
|
74
|
-
let cardNumber = getByPlaceholderText("card-number");
|
|
75
|
-
let expiryDate = getByPlaceholderText("expiry-date");
|
|
76
|
-
let cvv = getByPlaceholderText("cvv");
|
|
77
|
-
let pay = getByTestId("submit-button");
|
|
78
|
-
fireEvent.changeText(cardNumber, "42424242");
|
|
79
|
-
expect(binChange).toHaveBeenCalledTimes(1);
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it("fails the card tokenization when the card number is invalid", async () => {
|
|
83
|
-
const failed = jest.fn();
|
|
84
|
-
|
|
85
|
-
const { getByPlaceholderText, getByTestId } = render(
|
|
86
|
-
<Frames
|
|
87
|
-
config={{
|
|
88
|
-
publicKey: PK,
|
|
89
|
-
}}
|
|
90
|
-
cardTokenized={() => {}}
|
|
91
|
-
cardTokenizationFailed={failed}
|
|
92
|
-
>
|
|
93
|
-
<CardNumber placeholder="card-number" />
|
|
94
|
-
<ExpiryDate placeholder="expiry-date" />
|
|
95
|
-
<Cvv placeholder="cvv" />
|
|
96
|
-
<SubmitButton
|
|
97
|
-
title="Pay Now"
|
|
98
|
-
testID={"submit-button"}
|
|
99
|
-
onPress={() => {}}
|
|
100
|
-
/>
|
|
101
|
-
</Frames>
|
|
102
|
-
);
|
|
103
|
-
|
|
104
|
-
let cardNumber = getByPlaceholderText("card-number");
|
|
105
|
-
let expiryDate = getByPlaceholderText("expiry-date");
|
|
106
|
-
let cvv = getByPlaceholderText("cvv");
|
|
107
|
-
let pay = getByTestId("submit-button");
|
|
108
|
-
fireEvent.changeText(cardNumber, "12345");
|
|
109
|
-
fireEvent.changeText(expiryDate, "1128");
|
|
110
|
-
fireEvent.changeText(cvv, "100");
|
|
111
|
-
fireEvent.press(pay);
|
|
112
|
-
await waitFor(() => {
|
|
113
|
-
expect(failed).toHaveBeenCalledTimes(1);
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
it("throws when the pay button is outside of context", async () => {
|
|
118
|
-
expect(() => {
|
|
119
|
-
render(
|
|
120
|
-
<SubmitButton
|
|
121
|
-
title="Pay Now"
|
|
122
|
-
testID={"submit-button"}
|
|
123
|
-
onPress={() => {}}
|
|
124
|
-
/>
|
|
125
|
-
);
|
|
126
|
-
}).toThrow(
|
|
127
|
-
"It looks like you are trying to render the SubmitButton outside of the Frames Component."
|
|
128
|
-
);
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
it("throws allow then use of the onPress handler", async () => {
|
|
132
|
-
const press = jest.fn();
|
|
133
|
-
|
|
134
|
-
const { getByPlaceholderText, getByTestId } = render(
|
|
135
|
-
<Frames
|
|
136
|
-
config={{
|
|
137
|
-
publicKey: PK,
|
|
138
|
-
debug: true,
|
|
139
|
-
cardholder: {
|
|
140
|
-
name: "John Smith",
|
|
141
|
-
billingAddress: {
|
|
142
|
-
addressLine1: "Wall Street",
|
|
143
|
-
addressLine2: "Dollar Avenue",
|
|
144
|
-
city: "London",
|
|
145
|
-
state: "London",
|
|
146
|
-
zip: "W1W 8GY",
|
|
147
|
-
country: "GB",
|
|
148
|
-
},
|
|
149
|
-
phone: "07123456789",
|
|
150
|
-
},
|
|
151
|
-
}}
|
|
152
|
-
cardTokenized={() => {}}
|
|
153
|
-
>
|
|
154
|
-
<CardNumber placeholder="card-number" />
|
|
155
|
-
<ExpiryDate placeholder="expiry-date" />
|
|
156
|
-
<Cvv placeholder="cvv" />
|
|
157
|
-
<SubmitButton
|
|
158
|
-
title="Pay Now"
|
|
159
|
-
testID={"submit-button"}
|
|
160
|
-
onPress={press}
|
|
161
|
-
/>
|
|
162
|
-
</Frames>
|
|
163
|
-
);
|
|
164
|
-
let cardNumber = getByPlaceholderText("card-number");
|
|
165
|
-
let expiryDate = getByPlaceholderText("expiry-date");
|
|
166
|
-
let cvv = getByPlaceholderText("cvv");
|
|
167
|
-
let pay = getByTestId("submit-button");
|
|
168
|
-
fireEvent.changeText(cardNumber, "4242424242424242");
|
|
169
|
-
fireEvent.changeText(expiryDate, "1128");
|
|
170
|
-
fireEvent.changeText(cvv, "100");
|
|
171
|
-
fireEvent.press(pay);
|
|
172
|
-
|
|
173
|
-
fireEvent.press(pay);
|
|
174
|
-
expect(press).toHaveBeenCalled();
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
it("fails tokenization", async () => {
|
|
178
|
-
const failed = jest.fn();
|
|
179
|
-
|
|
180
|
-
const { getByPlaceholderText, getByTestId } = render(
|
|
181
|
-
<Frames
|
|
182
|
-
config={{
|
|
183
|
-
publicKey: "pk_test_baabd05f-1cdb-43d9-851e-635a79f6e7ad", // this account does not have Visa enabled
|
|
184
|
-
debug: true,
|
|
185
|
-
}}
|
|
186
|
-
cardTokenized={() => {}}
|
|
187
|
-
frameValidationChanged={(e) => {}}
|
|
188
|
-
paymentMethodChanged={(e) => {}}
|
|
189
|
-
cardValidationChanged={(e) => {}}
|
|
190
|
-
cardTokenizationFailed={failed}
|
|
191
|
-
>
|
|
192
|
-
<CardNumber placeholder="card-number" />
|
|
193
|
-
<ExpiryDate placeholder="expiry-date" />
|
|
194
|
-
<Cvv placeholder="cvv" />
|
|
195
|
-
<SubmitButton
|
|
196
|
-
title="Pay Now"
|
|
197
|
-
testID={"submit-button"}
|
|
198
|
-
onPress={() => {}}
|
|
199
|
-
/>
|
|
200
|
-
</Frames>
|
|
201
|
-
);
|
|
202
|
-
|
|
203
|
-
let cardNumber = getByPlaceholderText("card-number");
|
|
204
|
-
let expiryDate = getByPlaceholderText("expiry-date");
|
|
205
|
-
let cvv = getByPlaceholderText("cvv");
|
|
206
|
-
let pay = getByTestId("submit-button");
|
|
207
|
-
fireEvent.changeText(cardNumber, "4242424242424242");
|
|
208
|
-
fireEvent.changeText(expiryDate, "0628");
|
|
209
|
-
fireEvent.changeText(cvv, "100");
|
|
210
|
-
fireEvent.press(pay);
|
|
211
|
-
await waitFor(() => {
|
|
212
|
-
expect(failed).toHaveBeenCalledTimes(1);
|
|
213
|
-
});
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
it("triggers the card tokenization with billing details", async () => {
|
|
217
|
-
const tokenized = jest.fn();
|
|
218
|
-
|
|
219
|
-
const { getByPlaceholderText, getByTestId } = render(
|
|
220
|
-
<Frames
|
|
221
|
-
config={{
|
|
222
|
-
publicKey: PK,
|
|
223
|
-
debug: true,
|
|
224
|
-
cardholder: {
|
|
225
|
-
name: "John Smith",
|
|
226
|
-
billingAddress: {
|
|
227
|
-
addressLine1: "Wall Street",
|
|
228
|
-
addressLine2: "Dollar Avenue",
|
|
229
|
-
city: "London",
|
|
230
|
-
state: "London",
|
|
231
|
-
zip: "W1W 8GY",
|
|
232
|
-
country: "GB",
|
|
233
|
-
},
|
|
234
|
-
phone: "07123456789",
|
|
235
|
-
},
|
|
236
|
-
}}
|
|
237
|
-
cardTokenized={tokenized}
|
|
238
|
-
>
|
|
239
|
-
<CardNumber placeholder="card-number" />
|
|
240
|
-
<ExpiryDate placeholder="expiry-date" />
|
|
241
|
-
<Cvv placeholder="cvv" />
|
|
242
|
-
<SubmitButton
|
|
243
|
-
title="Pay Now"
|
|
244
|
-
testID={"submit-button"}
|
|
245
|
-
onPress={() => {}}
|
|
246
|
-
/>
|
|
247
|
-
</Frames>
|
|
248
|
-
);
|
|
249
|
-
|
|
250
|
-
let cardNumber = getByPlaceholderText("card-number");
|
|
251
|
-
let expiryDate = getByPlaceholderText("expiry-date");
|
|
252
|
-
let cvv = getByPlaceholderText("cvv");
|
|
253
|
-
let pay = getByTestId("submit-button");
|
|
254
|
-
fireEvent.changeText(cardNumber, "4242424242424242");
|
|
255
|
-
fireEvent.changeText(expiryDate, "1128");
|
|
256
|
-
fireEvent.changeText(cvv, "100");
|
|
257
|
-
fireEvent.press(pay);
|
|
258
|
-
await waitFor(() => {
|
|
259
|
-
expect(tokenized).toHaveBeenCalledTimes(1);
|
|
260
|
-
});
|
|
261
|
-
expect(tokenized.mock.calls[0][0].billing_address.address_line1).toEqual(
|
|
262
|
-
"Wall Street"
|
|
263
|
-
);
|
|
264
|
-
});
|
|
12
|
+
// Mock network-dependent modules to avoid real HTTP requests
|
|
13
|
+
jest.mock("../src/utils/http", () => {
|
|
14
|
+
const actual = jest.requireActual("../src/utils/http");
|
|
15
|
+
return {
|
|
16
|
+
...actual,
|
|
17
|
+
tokenize: jest.fn(),
|
|
18
|
+
};
|
|
19
|
+
});
|
|
265
20
|
|
|
266
|
-
|
|
267
|
-
|
|
21
|
+
jest.mock("../src/utils/logger", () => {
|
|
22
|
+
const actual = jest.requireActual("../src/utils/logger");
|
|
23
|
+
return {
|
|
24
|
+
...actual,
|
|
25
|
+
log: jest.fn(),
|
|
26
|
+
};
|
|
27
|
+
});
|
|
268
28
|
|
|
269
|
-
|
|
29
|
+
describe("Frames integration", () => {
|
|
30
|
+
const validVisa = "4242 4242 4242 4242"; // Visa test number
|
|
31
|
+
const validExpiry = "12/30"; // future year
|
|
32
|
+
const validCvv = "123";
|
|
33
|
+
|
|
34
|
+
const config = {
|
|
35
|
+
publicKey: "pk_test_4296fd52-efba-4a38-b6ce-cf0d93639d8a",
|
|
36
|
+
debug: true,
|
|
37
|
+
cardholder: {
|
|
38
|
+
name: "John Doe",
|
|
39
|
+
phone: "+1234567890",
|
|
40
|
+
billingAddress: {
|
|
41
|
+
addressLine1: "123 Test St",
|
|
42
|
+
city: "Test City",
|
|
43
|
+
state: "TS",
|
|
44
|
+
zip: "12345",
|
|
45
|
+
country: "US",
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
it("emits validation and bin events, and tokenizes on submit", async () => {
|
|
51
|
+
const { tokenize } = require("../src/utils/http");
|
|
52
|
+
|
|
53
|
+
const mockTokenResponse = {
|
|
54
|
+
type: "card",
|
|
55
|
+
token: "tok_test_123",
|
|
56
|
+
expires_on: "2030-12-31T23:59:59Z",
|
|
57
|
+
expiry_month: "12",
|
|
58
|
+
expiry_year: "2030",
|
|
59
|
+
scheme: "Visa",
|
|
60
|
+
last4: "4242",
|
|
61
|
+
bin: "424242",
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
tokenize.mockResolvedValueOnce(mockTokenResponse);
|
|
65
|
+
|
|
66
|
+
const frameValidationChanged = jest.fn();
|
|
67
|
+
const paymentMethodChanged = jest.fn();
|
|
68
|
+
const cardValidationChanged = jest.fn();
|
|
69
|
+
const cardTokenized = jest.fn();
|
|
70
|
+
const cardTokenizationFailed = jest.fn();
|
|
71
|
+
const cardBinChanged = jest.fn();
|
|
72
|
+
|
|
73
|
+
const screen = render(
|
|
270
74
|
<Frames
|
|
271
|
-
config={
|
|
272
|
-
|
|
273
|
-
}
|
|
274
|
-
|
|
75
|
+
config={config}
|
|
76
|
+
frameValidationChanged={frameValidationChanged}
|
|
77
|
+
paymentMethodChanged={paymentMethodChanged}
|
|
78
|
+
cardValidationChanged={cardValidationChanged}
|
|
79
|
+
cardTokenized={cardTokenized}
|
|
80
|
+
cardTokenizationFailed={cardTokenizationFailed}
|
|
81
|
+
cardBinChanged={cardBinChanged}
|
|
275
82
|
>
|
|
276
|
-
<CardNumber
|
|
277
|
-
<ExpiryDate
|
|
278
|
-
<Cvv
|
|
279
|
-
<SubmitButton
|
|
280
|
-
title="Pay Now"
|
|
281
|
-
testID={"submit-button"}
|
|
282
|
-
onPress={() => {}}
|
|
283
|
-
/>
|
|
83
|
+
<CardNumber />
|
|
84
|
+
<ExpiryDate />
|
|
85
|
+
<Cvv />
|
|
86
|
+
<SubmitButton title="Pay" />
|
|
284
87
|
</Frames>
|
|
285
88
|
);
|
|
286
89
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
let pay = getByTestId("submit-button");
|
|
291
|
-
fireEvent.changeText(cardNumber, "378282246310005");
|
|
292
|
-
fireEvent.changeText(expiryDate, "1128");
|
|
293
|
-
fireEvent.changeText(cvv, "1000");
|
|
294
|
-
fireEvent.press(pay);
|
|
295
|
-
await waitFor(() => {
|
|
296
|
-
expect(tokenized).toHaveBeenCalledTimes(1);
|
|
297
|
-
});
|
|
298
|
-
});
|
|
90
|
+
const cardNumberInput = screen.getByPlaceholderText("•••• •••• •••• ••••");
|
|
91
|
+
const expiryInput = screen.getByPlaceholderText("MM/YY");
|
|
92
|
+
const cvvInput = screen.getByPlaceholderText("•••");
|
|
299
93
|
|
|
300
|
-
|
|
301
|
-
|
|
94
|
+
// Enter card number -> should emit bin and payment method changes
|
|
95
|
+
fireEvent.changeText(cardNumberInput, validVisa);
|
|
302
96
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
publicKey: PK,
|
|
307
|
-
debug: true,
|
|
308
|
-
cardholder: {
|
|
309
|
-
name: "John Smith",
|
|
310
|
-
billingAddress: {
|
|
311
|
-
addressLine1: "Wall Street",
|
|
312
|
-
addressLine2: "Dollar Avenue",
|
|
313
|
-
},
|
|
314
|
-
},
|
|
315
|
-
}}
|
|
316
|
-
cardTokenized={tokenized}
|
|
317
|
-
cardTokenizationFailed={(e) => {
|
|
318
|
-
console.log(e);
|
|
319
|
-
}}
|
|
320
|
-
>
|
|
321
|
-
<CardNumber placeholder="card-number" />
|
|
322
|
-
<ExpiryDate placeholder="expiry-date" />
|
|
323
|
-
<Cvv placeholder="cvv" />
|
|
324
|
-
<SubmitButton
|
|
325
|
-
title="Pay Now"
|
|
326
|
-
testID={"submit-button"}
|
|
327
|
-
onPress={() => {}}
|
|
328
|
-
/>
|
|
329
|
-
</Frames>
|
|
97
|
+
await waitFor(() => expect(paymentMethodChanged).toHaveBeenCalled());
|
|
98
|
+
expect(paymentMethodChanged).toHaveBeenCalledWith(
|
|
99
|
+
expect.objectContaining({ paymentMethod: "Visa", isValid: false })
|
|
330
100
|
);
|
|
331
101
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
fireEvent.changeText(cvv, "100");
|
|
339
|
-
fireEvent.press(pay);
|
|
340
|
-
await waitFor(() => {
|
|
341
|
-
expect(tokenized).toHaveBeenCalledTimes(1);
|
|
342
|
-
});
|
|
343
|
-
expect(tokenized.mock.calls[0][0].billing_address.address_line1).toEqual(
|
|
344
|
-
"Wall Street"
|
|
102
|
+
await waitFor(() => expect(cardBinChanged).toHaveBeenCalled());
|
|
103
|
+
expect(cardBinChanged).toHaveBeenCalledWith(
|
|
104
|
+
expect.objectContaining({
|
|
105
|
+
bin: expect.stringMatching(/^42424242/),
|
|
106
|
+
scheme: "Visa",
|
|
107
|
+
})
|
|
345
108
|
);
|
|
346
|
-
});
|
|
347
|
-
|
|
348
|
-
it("triggers throws if you render the card number outside of context", async () => {
|
|
349
|
-
let exception;
|
|
350
|
-
try {
|
|
351
|
-
render(<CardNumber placeholder="card-number" />);
|
|
352
|
-
} catch (e) {
|
|
353
|
-
exception = e;
|
|
354
|
-
}
|
|
355
|
-
expect(exception).toEqual(
|
|
356
|
-
"It looks like you are trying to render the CardNumber outside of the Frames Component."
|
|
357
|
-
);
|
|
358
|
-
});
|
|
359
109
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
expect(
|
|
368
|
-
|
|
110
|
+
// Enter expiry date
|
|
111
|
+
fireEvent.changeText(expiryInput, validExpiry);
|
|
112
|
+
|
|
113
|
+
// Enter cvv
|
|
114
|
+
fireEvent.changeText(cvvInput, validCvv);
|
|
115
|
+
|
|
116
|
+
// After all fields valid, cardValidationChanged should report isValid: true
|
|
117
|
+
await waitFor(() => expect(cardValidationChanged).toHaveBeenCalled());
|
|
118
|
+
expect(cardValidationChanged).toHaveBeenLastCalledWith(
|
|
119
|
+
expect.objectContaining({
|
|
120
|
+
isValid: true,
|
|
121
|
+
isElementValid: expect.objectContaining({
|
|
122
|
+
cardNumber: true,
|
|
123
|
+
expiryDate: true,
|
|
124
|
+
cvv: true,
|
|
125
|
+
}),
|
|
126
|
+
})
|
|
369
127
|
);
|
|
370
|
-
});
|
|
371
128
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
render(<Cvv placeholder="cvv" />);
|
|
376
|
-
} catch (e) {
|
|
377
|
-
exception = e;
|
|
378
|
-
}
|
|
379
|
-
expect(exception).toEqual(
|
|
380
|
-
"It looks like you are trying to render the Cvv outside of the Frames Component."
|
|
381
|
-
);
|
|
382
|
-
});
|
|
129
|
+
// Submit and expect tokenization to be called and success event emitted
|
|
130
|
+
const payButton = screen.getByText("Pay");
|
|
131
|
+
fireEvent.press(payButton);
|
|
383
132
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
render(
|
|
388
|
-
<SubmitButton
|
|
389
|
-
title="Pay Now"
|
|
390
|
-
testID={"submit-button"}
|
|
391
|
-
onPress={() => {}}
|
|
392
|
-
/>
|
|
393
|
-
);
|
|
394
|
-
} catch (e) {
|
|
395
|
-
exception = e;
|
|
396
|
-
}
|
|
397
|
-
expect(exception).toEqual(
|
|
398
|
-
"It looks like you are trying to render the SubmitButton outside of the Frames Component."
|
|
399
|
-
);
|
|
133
|
+
await waitFor(() => expect(tokenize).toHaveBeenCalledTimes(1));
|
|
134
|
+
expect(cardTokenized).toHaveBeenCalledWith(mockTokenResponse);
|
|
135
|
+
expect(cardTokenizationFailed).not.toHaveBeenCalled();
|
|
400
136
|
});
|
|
401
137
|
});
|
package/dist/Frames.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { FramesContextType, FramesProps } from "./types/types";
|
|
3
3
|
export declare const FramesContext: React.Context<FramesContextType>;
|
|
4
|
-
declare const Frames: (props: FramesProps) => JSX.Element;
|
|
4
|
+
declare const Frames: (props: FramesProps) => React.JSX.Element;
|
|
5
5
|
export default Frames;
|
|
6
6
|
export declare const FramesConsumer: React.Consumer<FramesContextType>;
|
|
7
7
|
export declare const FramesProvider: React.Provider<FramesContextType>;
|
package/dist/Frames.js
CHANGED
|
@@ -13,7 +13,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
13
13
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
14
|
function step(op) {
|
|
15
15
|
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
-
while (_) try {
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
17
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
18
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
19
|
switch (op[0]) {
|
|
@@ -41,8 +41,7 @@ import { log } from "./utils/logger";
|
|
|
41
41
|
import { tokenize, formatDataForTokenization } from "./utils/http";
|
|
42
42
|
export var FramesContext = React.createContext({});
|
|
43
43
|
var Frames = function (props) {
|
|
44
|
-
|
|
45
|
-
var _a = React.useReducer(framesReducer, {
|
|
44
|
+
var initialState = {
|
|
46
45
|
cardNumber: null,
|
|
47
46
|
cardBin: {
|
|
48
47
|
bin: null,
|
|
@@ -59,7 +58,8 @@ var Frames = function (props) {
|
|
|
59
58
|
cvv: false,
|
|
60
59
|
card: false,
|
|
61
60
|
},
|
|
62
|
-
}
|
|
61
|
+
};
|
|
62
|
+
var _a = React.useReducer(framesReducer, initialState), state = _a[0], dispatch = _a[1];
|
|
63
63
|
var submitCard = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
64
64
|
var response, error_1;
|
|
65
65
|
return __generator(this, function (_a) {
|
|
@@ -82,7 +82,7 @@ var Frames = function (props) {
|
|
|
82
82
|
console.info("Emitting \"cardTokenizationFailed\"", error_1);
|
|
83
83
|
if (props.cardTokenizationFailed)
|
|
84
84
|
props.cardTokenizationFailed(error_1);
|
|
85
|
-
log("error", "com.checkout.frames-mobile-sdk.exception", props.config, error_1);
|
|
85
|
+
log("error", "com.checkout.frames-mobile-sdk.exception", props.config, error_1 || {});
|
|
86
86
|
return [3 /*break*/, 3];
|
|
87
87
|
case 3: return [2 /*return*/];
|
|
88
88
|
}
|
package/dist/Frames.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Frames.js","sourceRoot":"","sources":["../src/Frames.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"Frames.js","sourceRoot":"","sources":["../src/Frames.tsx"],"names":[],"mappings":"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"}
|
|
@@ -6,27 +6,28 @@ import { DEFAULT_CARD_NUMBER_PLACEHOLDER } from "../utils/constants";
|
|
|
6
6
|
var CardNumber = function (props) {
|
|
7
7
|
return (<FramesConsumer>
|
|
8
8
|
{function (_a) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return (<View style={styles.wrapper}>
|
|
14
|
-
<TextInput autoCompleteType="cc-number" keyboardType="number-pad" returnKeyType="done" placeholder={DEFAULT_CARD_NUMBER_PLACEHOLDER} {...props} value={state.cardNumber} style={[styles.cardNumber, props.style]} onChangeText={function (val) {
|
|
15
|
-
dispatch({ type: CARD_CHANGE, payload: val });
|
|
16
|
-
if (val.replace(/[^0-9]/g, "").length >= 8 &&
|
|
17
|
-
val.replace(/[^0-9]/g, "").substring(0, 8) !==
|
|
18
|
-
state.cardBin.bin) {
|
|
19
|
-
dispatch({
|
|
20
|
-
type: BIN_CHANGE,
|
|
21
|
-
payload: val.replace(/[^0-9]/g, "").substring(0, 8),
|
|
22
|
-
});
|
|
9
|
+
var _b;
|
|
10
|
+
var state = _a.state, dispatch = _a.dispatch;
|
|
11
|
+
if ((state === null || state === void 0 ? void 0 : state.cardNumber) === undefined) {
|
|
12
|
+
throw "It looks like you are trying to render the CardNumber outside of the Frames Component.";
|
|
23
13
|
}
|
|
24
|
-
|
|
14
|
+
return (<View style={styles.wrapper}>
|
|
15
|
+
<TextInput autoComplete="cc-number" keyboardType="number-pad" returnKeyType="done" placeholder={DEFAULT_CARD_NUMBER_PLACEHOLDER} {...props} value={(_b = state.cardNumber) !== null && _b !== void 0 ? _b : ""} style={[styles.cardNumber, props.style]} onChangeText={function (val) {
|
|
16
|
+
dispatch({ type: CARD_CHANGE, payload: val });
|
|
17
|
+
if (val.replace(/[^0-9]/g, "").length >= 8 &&
|
|
18
|
+
val.replace(/[^0-9]/g, "").substring(0, 8) !==
|
|
19
|
+
state.cardBin.bin) {
|
|
20
|
+
dispatch({
|
|
21
|
+
type: BIN_CHANGE,
|
|
22
|
+
payload: val.replace(/[^0-9]/g, "").substring(0, 8),
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}}/>
|
|
25
26
|
{props.showIcon === undefined || props.showIcon ? (<View style={styles.schemeIconContainer}>
|
|
26
27
|
{state.cardIcon ? (<Image style={styles.scheme} source={state.cardIcon}/>) : undefined}
|
|
27
28
|
</View>) : undefined}
|
|
28
29
|
</View>);
|
|
29
|
-
|
|
30
|
+
}}
|
|
30
31
|
</FramesConsumer>);
|
|
31
32
|
};
|
|
32
33
|
var styles = StyleSheet.create({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardNumber.js","sourceRoot":"","sources":["../../src/components/CardNumber.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAErE,IAAM,UAAU,GAAmC,UAAC,KAAK;IACvD,OAAO,CACL,CAAC,cAAc,CACb;MAAA,CAAC,UAAC,EAAmB
|
|
1
|
+
{"version":3,"file":"CardNumber.js","sourceRoot":"","sources":["../../src/components/CardNumber.tsx"],"names":[],"mappings":"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"}
|
package/dist/components/Cvv.d.ts
CHANGED
package/dist/components/Cvv.js
CHANGED
|
@@ -6,14 +6,15 @@ import { CVV_CHANGE } from "../utils/actions";
|
|
|
6
6
|
var Cvv = function (props) {
|
|
7
7
|
return (<FramesConsumer>
|
|
8
8
|
{function (_a) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
var _b;
|
|
10
|
+
var state = _a.state, dispatch = _a.dispatch;
|
|
11
|
+
if ((state === null || state === void 0 ? void 0 : state.cvv) === undefined) {
|
|
12
|
+
throw "It looks like you are trying to render the Cvv outside of the Frames Component.";
|
|
13
|
+
}
|
|
14
|
+
return (<TextInput autoComplete="cc-csc" keyboardType="number-pad" returnKeyType="done" secureTextEntry={true} placeholder={DEFAULT_CVV_PLACEHOLDER} {...props} style={[styles.cvv, props.style]} value={(_b = state.cvv) !== null && _b !== void 0 ? _b : ""} maxLength={state.cvvLength} onChangeText={function (val) {
|
|
15
|
+
return dispatch({ type: CVV_CHANGE, payload: val });
|
|
16
|
+
}}/>);
|
|
17
|
+
}}
|
|
17
18
|
</FramesConsumer>);
|
|
18
19
|
};
|
|
19
20
|
var styles = StyleSheet.create({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cvv.js","sourceRoot":"","sources":["../../src/components/Cvv.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,IAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"Cvv.js","sourceRoot":"","sources":["../../src/components/Cvv.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,IAAM,GAAG,GAA+B,UAAC,KAAK;IAC5C,OAAO,CACL,CAAC,cAAc,CACb;MAAA,CAAC,UAAC,EAAmB;;gBAAjB,KAAK,WAAA,EAAE,QAAQ,cAAA;YACjB,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,GAAG,MAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,iFAAiF,CAAC;YAC1F,CAAC;YACD,OAAO,CACL,CAAC,SAAS,CACR,YAAY,CAAC,QAAQ,CACrB,YAAY,CAAC,YAAY,CACzB,aAAa,CAAC,MAAM,CACpB,eAAe,CAAC,CAAC,IAAI,CAAC,CACtB,WAAW,CAAC,CAAC,uBAAuB,CAAC,CACrC,IAAI,KAAK,CAAC,CACV,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CACjC,KAAK,CAAC,CAAC,MAAA,KAAK,CAAC,GAAG,mCAAI,EAAE,CAAC,CACvB,SAAS,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAC3B,YAAY,CAAC,CAAC,UAAC,GAAW;oBACxB,OAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;gBAA5C,CACF,CAAC,EACD,CACH,CAAC;QACJ,CAAC,CACH;IAAA,EAAE,cAAc,CAAC,CAClB,CAAC;AACJ,CAAC,CAAC;AAEF,IAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,GAAG,EAAE;QACH,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,QAAQ;QACxB,SAAS,EAAE,EAAE;KACd;CACF,CAAC,CAAC;AAEH,eAAe,GAAG,CAAC"}
|
|
@@ -6,14 +6,15 @@ import { DATE_CHANGE } from "../utils/actions";
|
|
|
6
6
|
var ExpiryDate = function (props) {
|
|
7
7
|
return (<FramesConsumer>
|
|
8
8
|
{function (_a) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
var _b;
|
|
10
|
+
var state = _a.state, dispatch = _a.dispatch;
|
|
11
|
+
if ((state === null || state === void 0 ? void 0 : state.expiryDate) === undefined) {
|
|
12
|
+
throw "It looks like you are trying to render the ExpiryDate outside of the Frames Component.";
|
|
13
|
+
}
|
|
14
|
+
return (<TextInput autoComplete="cc-exp" keyboardType="number-pad" maxLength={5} returnKeyType="done" placeholder={DEFAULT_CARD_EXPIRY_DATE_PLACEHOLDER} {...props} style={[styles.expiryDate, props.style]} value={(_b = state.expiryDate) !== null && _b !== void 0 ? _b : ""} onChangeText={function (val) {
|
|
15
|
+
return dispatch({ type: DATE_CHANGE, payload: val });
|
|
16
|
+
}}/>);
|
|
17
|
+
}}
|
|
17
18
|
</FramesConsumer>);
|
|
18
19
|
};
|
|
19
20
|
var styles = StyleSheet.create({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpiryDate.js","sourceRoot":"","sources":["../../src/components/ExpiryDate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,oCAAoC,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,IAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"ExpiryDate.js","sourceRoot":"","sources":["../../src/components/ExpiryDate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,oCAAoC,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,IAAM,UAAU,GAA+B,UAAC,KAAK;IACnD,OAAO,CACL,CAAC,cAAc,CACb;MAAA,CAAC,UAAC,EAAmB;;gBAAjB,KAAK,WAAA,EAAE,QAAQ,cAAA;YACjB,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,MAAK,SAAS,EAAE,CAAC;gBACpC,MAAM,wFAAwF,CAAC;YACjG,CAAC;YACD,OAAO,CACL,CAAC,SAAS,CACR,YAAY,CAAC,QAAQ,CACrB,YAAY,CAAC,YAAY,CACzB,SAAS,CAAC,CAAC,CAAC,CAAC,CACb,aAAa,CAAC,MAAM,CACpB,WAAW,CAAC,CAAC,oCAAoC,CAAC,CAClD,IAAI,KAAK,CAAC,CACV,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CACxC,KAAK,CAAC,CAAC,MAAA,KAAK,CAAC,UAAU,mCAAI,EAAE,CAAC,CAC9B,YAAY,CAAC,CAAC,UAAC,GAAW;oBACxB,OAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;gBAA7C,CACF,CAAC,EACD,CACH,CAAC;QACJ,CAAC,CACH;IAAA,EAAE,cAAc,CAAC,CAClB,CAAC;AACJ,CAAC,CAAC;AAEF,IAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,UAAU,EAAE;QACV,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,QAAQ;QACxB,SAAS,EAAE,EAAE;KACd;CACF,CAAC,CAAC;AAEH,eAAe,UAAU,CAAC"}
|
|
@@ -15,19 +15,19 @@ import { FramesConsumer } from "../Frames";
|
|
|
15
15
|
var SubmitButton = function (props) {
|
|
16
16
|
return (<FramesConsumer>
|
|
17
17
|
{function (_a) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
var submitCard = _a.submitCard;
|
|
19
|
+
if (!submitCard) {
|
|
20
|
+
throw "It looks like you are trying to render the SubmitButton outside of the Frames Component.";
|
|
21
|
+
}
|
|
22
|
+
var textStyle = props.textStyle, title = props.title, touchableProps = __rest(props, ["textStyle", "title"]);
|
|
23
|
+
return (<TouchableOpacity {...touchableProps} style={[styles.buttonContainer, touchableProps.style]} onPress={function (e) {
|
|
24
|
+
submitCard();
|
|
25
|
+
if (props.onPress)
|
|
26
|
+
props.onPress(e);
|
|
27
|
+
}}>
|
|
28
28
|
<Text style={[styles.buttonText, textStyle]}>{title}</Text>
|
|
29
29
|
</TouchableOpacity>);
|
|
30
|
-
|
|
30
|
+
}}
|
|
31
31
|
</FramesConsumer>);
|
|
32
32
|
};
|
|
33
33
|
var styles = StyleSheet.create({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubmitButton.js","sourceRoot":"","sources":["../../src/components/SubmitButton.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,IAAM,YAAY,GAA+C,UAAC,KAAK;IACrE,OAAO,CACL,CAAC,cAAc,CACb;MAAA,CAAC,UAAC,EAAc;
|
|
1
|
+
{"version":3,"file":"SubmitButton.js","sourceRoot":"","sources":["../../src/components/SubmitButton.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,IAAM,YAAY,GAA+C,UAAC,KAAK;IACrE,OAAO,CACL,CAAC,cAAc,CACb;MAAA,CAAC,UAAC,EAAc;gBAAZ,UAAU,gBAAA;YACZ,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,0FAA0F,CAAC;YACnG,CAAC;YAEO,IAAW,SAAS,GAAsC,KAAK,UAA3C,EAAS,KAAK,GAAwB,KAAK,MAA7B,EAAK,cAAc,UAAK,KAAK,EAAjE,sBAAyD,CAAF,CAAW;YAExE,OAAO,CACL,CAAC,gBAAgB,CACf,IAAI,cAAc,CAAC,CACnB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CACtD,OAAO,CAAC,CAAC,UAAC,CAAC;oBACT,UAAU,EAAE,CAAC;oBACb,IAAI,KAAK,CAAC,OAAO;wBAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACtC,CAAC,CAAC,CAEF;YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAC5D;UAAA,EAAE,gBAAgB,CAAC,CACpB,CAAC;QACJ,CAAC,CACH;IAAA,EAAE,cAAc,CAAC,CAClB,CAAC;AACJ,CAAC,CAAC;AAEF,IAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,UAAU,EAAE;QACV,SAAS,EAAE,QAAQ;KACpB;IACD,eAAe,EAAE;QACf,cAAc,EAAE,QAAQ;KACzB;CACF,CAAC,CAAC;AAEH,eAAe,YAAY,CAAC"}
|
package/dist/types/types.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export interface CardNumberState {
|
|
|
14
14
|
icon: any;
|
|
15
15
|
valid: boolean;
|
|
16
16
|
}
|
|
17
|
-
export
|
|
17
|
+
export type FramesFieldProps = Omit<TextInputProps, "value" | "onChangeText">;
|
|
18
18
|
export interface FramesCardFieldProps extends FramesFieldProps {
|
|
19
19
|
showIcon?: boolean;
|
|
20
20
|
}
|
|
@@ -25,16 +25,16 @@ interface Validation {
|
|
|
25
25
|
card: boolean;
|
|
26
26
|
}
|
|
27
27
|
export interface FramesState {
|
|
28
|
-
cardNumber: string;
|
|
28
|
+
cardNumber: string | null;
|
|
29
29
|
cardBin: CardBinChangedEvent;
|
|
30
|
-
cardIcon: ImageSourcePropType;
|
|
31
|
-
cardType: string;
|
|
32
|
-
expiryDate: string;
|
|
33
|
-
cvv: string;
|
|
30
|
+
cardIcon: ImageSourcePropType | undefined;
|
|
31
|
+
cardType: string | null;
|
|
32
|
+
expiryDate: string | null;
|
|
33
|
+
cvv: string | null;
|
|
34
34
|
cvvLength: number;
|
|
35
35
|
validation: Validation;
|
|
36
36
|
}
|
|
37
|
-
export
|
|
37
|
+
export type FramesDispatch = ({ type, payload, }: {
|
|
38
38
|
type: string;
|
|
39
39
|
payload: any;
|
|
40
40
|
}) => void;
|
|
@@ -85,7 +85,7 @@ interface ValidationChange {
|
|
|
85
85
|
expiryDate: boolean;
|
|
86
86
|
cvv: boolean;
|
|
87
87
|
}
|
|
88
|
-
export
|
|
88
|
+
export type FramesContextType = {
|
|
89
89
|
state: FramesState;
|
|
90
90
|
dispatch: FramesDispatch;
|
|
91
91
|
submitCard: () => void;
|
|
@@ -107,9 +107,9 @@ export interface TokenizationBody {
|
|
|
107
107
|
export interface Phone {
|
|
108
108
|
number?: string;
|
|
109
109
|
}
|
|
110
|
-
export
|
|
111
|
-
export
|
|
112
|
-
export
|
|
110
|
+
export type Scheme = "Visa" | "Mastercard" | "AMERICAN EXPRESS" | "Diners Club International" | "Maestro" | "Discover" | "Mada";
|
|
111
|
+
export type CardType = "Credit" | "Debit" | "Prepaid" | "Charge";
|
|
112
|
+
export type CardCategory = "Consumer" | "Commercial";
|
|
113
113
|
export interface GatewayBillingAddress {
|
|
114
114
|
address_line1?: string;
|
|
115
115
|
address_line2?: string;
|
|
@@ -146,8 +146,8 @@ export interface FrameCardTokenizationFailedEvent {
|
|
|
146
146
|
request_id: string;
|
|
147
147
|
}
|
|
148
148
|
export interface CardBinChangedEvent {
|
|
149
|
-
bin: string;
|
|
150
|
-
scheme: string;
|
|
149
|
+
bin: string | null;
|
|
150
|
+
scheme: string | null;
|
|
151
151
|
}
|
|
152
152
|
export interface SubmitButtonProps extends TouchableOpacityProps {
|
|
153
153
|
title: string;
|
package/dist/types/types.js
CHANGED
package/dist/utils/card.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ImageSourcePropType } from "react-native";
|
|
1
2
|
export declare const Icons: {
|
|
2
3
|
Visa: any;
|
|
3
4
|
Mastercard: any;
|
|
@@ -9,10 +10,10 @@ export declare const Icons: {
|
|
|
9
10
|
Mada: any;
|
|
10
11
|
};
|
|
11
12
|
export declare const formatCard: (text: string) => string;
|
|
12
|
-
export declare const getCardType: (text: string) => "
|
|
13
|
+
export declare const getCardType: (text: string) => "Visa" | "Mastercard" | "American Express" | "Discover" | "JCB" | "Diners Club" | "Maestro" | "Mada";
|
|
13
14
|
export declare const isValidCard: (text: string) => any;
|
|
14
|
-
export declare const cvvLength: (text: string) =>
|
|
15
|
+
export declare const cvvLength: (text: string) => 3 | 4;
|
|
15
16
|
export declare const isValidCvv: (text: string, type: string) => any;
|
|
16
17
|
export declare const isValidDate: (text: string) => boolean;
|
|
17
|
-
export declare const getIcon: (cardType:
|
|
18
|
-
export
|
|
18
|
+
export declare const getIcon: (cardType: IconKey) => ImageSourcePropType | undefined;
|
|
19
|
+
export type IconKey = keyof typeof Icons;
|
package/dist/utils/card.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
var
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
2
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
3
|
+
if (ar || !(i in from)) {
|
|
4
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
5
|
+
ar[i] = from[i];
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
7
9
|
};
|
|
8
10
|
var Card = require("creditcards/card");
|
|
9
11
|
var Cvc = require("creditcards/cvc");
|
|
@@ -11,10 +13,12 @@ var expiration = require("creditcards/expiration");
|
|
|
11
13
|
import { EXPIRY_DATE_DELIMITER } from "./constants";
|
|
12
14
|
import creditcardsTypes from "creditcards-types";
|
|
13
15
|
import mada from "creditcards-types/types/mada";
|
|
14
|
-
var types =
|
|
16
|
+
var types = __spreadArray([mada], creditcardsTypes, true);
|
|
15
17
|
var cards = new Card(types);
|
|
16
18
|
var cvc = new Cvc(types);
|
|
17
|
-
var extendedCardTypeMapWhitelist = {
|
|
19
|
+
var extendedCardTypeMapWhitelist = {
|
|
20
|
+
"6011111111111117": "Discover",
|
|
21
|
+
};
|
|
18
22
|
export var Icons = {
|
|
19
23
|
Visa: require("../icons/visa.png"),
|
|
20
24
|
Mastercard: require("../icons/mastercard.png"),
|
|
@@ -30,8 +34,8 @@ export var formatCard = function (text) {
|
|
|
30
34
|
};
|
|
31
35
|
export var getCardType = function (text) {
|
|
32
36
|
var sanitizedValue = cards.parse(text);
|
|
33
|
-
var
|
|
34
|
-
|
|
37
|
+
var key = String(sanitizedValue);
|
|
38
|
+
var cardType = extendedCardTypeMapWhitelist[key] || cards.type(sanitizedValue, true);
|
|
35
39
|
return cardType;
|
|
36
40
|
};
|
|
37
41
|
export var isValidCard = function (text) {
|
package/dist/utils/card.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card.js","sourceRoot":"","sources":["../../src/utils/card.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"card.js","sourceRoot":"","sources":["../../src/utils/card.tsx"],"names":[],"mappings":"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"}
|
package/dist/utils/date.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/utils/date.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,CAAC,IAAM,gBAAgB,GAAG,UAAC,GAAW;IAC1C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/utils/date.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,CAAC,IAAM,gBAAgB,GAAG,UAAC,GAAW;IAC1C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO,GAAG,CAAC;IACb,CAAC;SAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,GAAG,GAAG,GAAG,GAAG,qBAAqB,CAAC;IAC3C,CAAC;SAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,aAAa,GAAG,UAAC,GAAW;IACvC,IAAI,OAAO,GAAkB,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACxD,OAAO,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC7C,CAAC,CAAC"}
|
package/dist/utils/http.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { TokenizationParams, FramesState, FramesConfig } from "../types/types";
|
|
2
2
|
export declare const tokenize: (e: TokenizationParams) => Promise<any>;
|
|
3
3
|
export declare const formatDataForTokenization: (state: FramesState, config: FramesConfig) => TokenizationParams;
|
|
4
|
-
export declare const getEnvironment: (key: string) =>
|
|
4
|
+
export declare const getEnvironment: (key: string) => "https://api.checkout.com/tokens" | "https://api.sandbox.checkout.com/tokens";
|
package/dist/utils/http.js
CHANGED
|
@@ -13,7 +13,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
13
13
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
14
|
function step(op) {
|
|
15
15
|
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
-
while (_) try {
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
17
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
18
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
19
|
switch (op[0]) {
|
|
@@ -34,7 +34,6 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
34
34
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
|
-
import fetch from "node-fetch";
|
|
38
37
|
import { EXPIRY_DATE_DELIMITER, MBC_LIVE_PUBLIC_KEY_REGEX, NAS_LIVE_PUBLIC_KEY_REGEX, SANDBOX_BASE_URL, LIVE_BASE_URL, } from "../utils/constants";
|
|
39
38
|
export var tokenize = function (e) { return __awaiter(void 0, void 0, void 0, function () {
|
|
40
39
|
var pjson, response, json, error_1;
|
|
@@ -48,7 +47,7 @@ export var tokenize = function (e) { return __awaiter(void 0, void 0, void 0, fu
|
|
|
48
47
|
headers: {
|
|
49
48
|
Accept: "application/json",
|
|
50
49
|
"Content-Type": "application/json",
|
|
51
|
-
"User-Agent": "frames-react-native/"
|
|
50
|
+
"User-Agent": "frames-react-native/".concat(pjson.version),
|
|
52
51
|
Authorization: e.key,
|
|
53
52
|
},
|
|
54
53
|
body: JSON.stringify(e.body),
|
|
@@ -76,7 +75,7 @@ export var formatDataForTokenization = function (state, config) {
|
|
|
76
75
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
77
76
|
var number = state.cardNumber.replace(/[^A-Z0-9]+/gi, "");
|
|
78
77
|
var expiry_month = state.expiryDate.split(EXPIRY_DATE_DELIMITER)[0];
|
|
79
|
-
var expiry_year = ""
|
|
78
|
+
var expiry_year = "".concat(new Date().getFullYear().toString().substring(0, 2)).concat(state.expiryDate.split(EXPIRY_DATE_DELIMITER)[1]);
|
|
80
79
|
var billing_address = {
|
|
81
80
|
address_line1: "",
|
|
82
81
|
address_line2: "",
|
|
@@ -121,7 +120,7 @@ export var formatDataForTokenization = function (state, config) {
|
|
|
121
120
|
};
|
|
122
121
|
export var getEnvironment = function (key) {
|
|
123
122
|
return MBC_LIVE_PUBLIC_KEY_REGEX.test(key) || NAS_LIVE_PUBLIC_KEY_REGEX.test(key)
|
|
124
|
-
? LIVE_BASE_URL
|
|
125
|
-
: SANDBOX_BASE_URL
|
|
123
|
+
? "".concat(LIVE_BASE_URL, "/tokens")
|
|
124
|
+
: "".concat(SANDBOX_BASE_URL, "/tokens");
|
|
126
125
|
};
|
|
127
126
|
//# sourceMappingURL=http.js.map
|
package/dist/utils/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/utils/http.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/utils/http.tsx"],"names":[],"mappings":"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"}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { FramesConfig } from "../types/types";
|
|
2
|
-
export declare const log: (loglevel: string, type: string, config: FramesConfig, extra?: object
|
|
2
|
+
export declare const log: (loglevel: string, type: string, config: FramesConfig, extra?: object) => Promise<void>;
|
|
3
3
|
export declare const getEnvironment: (key: string) => "https://cloudevents.integration.checkout.com/logging" | "https://cloudevents.integration.sandbox.checkout.com/logging";
|
package/dist/utils/logger.js
CHANGED
|
@@ -24,7 +24,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
24
24
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
25
|
function step(op) {
|
|
26
26
|
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
-
while (_) try {
|
|
27
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
28
28
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
29
29
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
30
|
switch (op[0]) {
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EACL,WAAW,EACX,cAAc,EACd,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAGrB,MAAM,CAAC,IAAM,GAAG,GAAG,UACjB,QAAgB,EAChB,IAAY,EACZ,MAAoB,EACpB,KAAc;;;;;;gBAGN,KAAK,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;gBACtC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,qBAAM,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;wBAC5C,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE;4BACP,MAAM,EAAE,kBAAkB;4BAC1B,cAAc,EAAE,8BAA8B;yBAC/C;wBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,WAAW,EAAE,KAAK;4BAClB,EAAE,EAAE,YAAY,EAAE;4BAClB,IAAI,MAAA;4BACJ,MAAM,EAAE,yBAAyB;4BACjC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;4BACxB,IAAI,wBACC,KAAK,KACR,EAAE,EAAE,QAAQ,CAAC,EAAE,EACf,SAAS,EAAE,QAAQ,CAAC,OAAO,EAC3B,UAAU,EAAE,KAAK,CAAC,OAAO,EACzB,WAAW,EACT,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;oCAChD,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;oCAC9C,CAAC,CAAC,YAAY;oCACd,CAAC,CAAC,SAAS,GAChB;4BACD,GAAG,EAAE;gCACH,MAAM,EAAE,gCAAgC;gCACxC,QAAQ,UAAA;6BACT;yBACF,CAAC;qBACH,CAAC,EAAA;;gBA5BF,SA4BE,CAAC;;;;gBAEH,MAAM,OAAK,CAAC;;;;KAEf,CAAC;AAEF,IAAM,YAAY,GAAG;IACnB,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW;IACzC,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;QACxE,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,gCAAgC;QAC5D,IAAI,CAAC,GAAG,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EACL,WAAW,EACX,cAAc,EACd,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAGrB,MAAM,CAAC,IAAM,GAAG,GAAG,UACjB,QAAgB,EAChB,IAAY,EACZ,MAAoB,EACpB,KAAc;;;;;;gBAGN,KAAK,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;gBACtC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBACxB,qBAAM,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;wBAC5C,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE;4BACP,MAAM,EAAE,kBAAkB;4BAC1B,cAAc,EAAE,8BAA8B;yBAC/C;wBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,WAAW,EAAE,KAAK;4BAClB,EAAE,EAAE,YAAY,EAAE;4BAClB,IAAI,MAAA;4BACJ,MAAM,EAAE,yBAAyB;4BACjC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;4BACxB,IAAI,wBACC,KAAK,KACR,EAAE,EAAE,QAAQ,CAAC,EAAE,EACf,SAAS,EAAE,QAAQ,CAAC,OAAO,EAC3B,UAAU,EAAE,KAAK,CAAC,OAAO,EACzB,WAAW,EACT,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;oCAChD,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;oCAC9C,CAAC,CAAC,YAAY;oCACd,CAAC,CAAC,SAAS,GAChB;4BACD,GAAG,EAAE;gCACH,MAAM,EAAE,gCAAgC;gCACxC,QAAQ,UAAA;6BACT;yBACF,CAAC;qBACH,CAAC,EAAA;;gBA5BF,SA4BE,CAAC;;;;gBAEH,MAAM,OAAK,CAAC;;;;KAEf,CAAC;AAEF,IAAM,YAAY,GAAG;IACnB,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW;IACzC,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;QACxE,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,gCAAgC;QAC5D,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,8BAA8B;YAC9B,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACrB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,+CAA+C;YAC/C,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACtB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,cAAc,GAAG,UAAC,GAAW;IACxC,OAAA,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC;QACxE,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,cAAc;AAFlB,CAEkB,CAAC"}
|
package/dist/utils/reducer.d.ts
CHANGED
|
@@ -1,30 +1,7 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
1
2
|
import { FramesState } from "../types/types";
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
cardType: "Discover" | "Visa" | "Mastercard" | "American Express" | "JCB" | "Diners Club" | "Maestro" | "Mada";
|
|
6
|
-
validation: {
|
|
7
|
-
cardNumber: any;
|
|
8
|
-
card: boolean;
|
|
9
|
-
expiryDate: boolean;
|
|
10
|
-
cvv: boolean;
|
|
11
|
-
};
|
|
12
|
-
cvvLength: number;
|
|
13
|
-
cardBin: import("../types/types").CardBinChangedEvent;
|
|
14
|
-
expiryDate: string;
|
|
15
|
-
cvv: string;
|
|
16
|
-
} | {
|
|
17
|
-
cvv: any;
|
|
18
|
-
validation: {
|
|
19
|
-
cvv: any;
|
|
20
|
-
card: boolean;
|
|
21
|
-
cardNumber: boolean;
|
|
22
|
-
expiryDate: boolean;
|
|
23
|
-
};
|
|
24
|
-
cardNumber: string;
|
|
25
|
-
cardBin: import("../types/types").CardBinChangedEvent;
|
|
26
|
-
cardIcon: import("react-native").ImageSourcePropType;
|
|
27
|
-
cardType: string;
|
|
28
|
-
expiryDate: string;
|
|
29
|
-
cvvLength: number;
|
|
3
|
+
export type FramesAction = {
|
|
4
|
+
type: string;
|
|
5
|
+
payload: any;
|
|
30
6
|
};
|
|
7
|
+
export declare const framesReducer: React.Reducer<FramesState, FramesAction>;
|
package/dist/utils/reducer.js
CHANGED
|
@@ -12,22 +12,22 @@ var __assign = (this && this.__assign) || function () {
|
|
|
12
12
|
import { formatCard, getCardType, getIcon, isValidCard, cvvLength, isValidCvv, isValidDate, } from "./card";
|
|
13
13
|
import { getFormattedDate } from "./date";
|
|
14
14
|
import { CARD_CHANGE, DATE_CHANGE, CVV_CHANGE, BIN_CHANGE } from "./actions";
|
|
15
|
-
export var framesReducer = function (prevState,
|
|
16
|
-
switch (
|
|
15
|
+
export var framesReducer = function (prevState, action) {
|
|
16
|
+
switch (action.type) {
|
|
17
17
|
case CARD_CHANGE:
|
|
18
|
-
return __assign(__assign({}, prevState), { cardNumber: formatCard(
|
|
18
|
+
return __assign(__assign({}, prevState), { cardNumber: formatCard(action.payload), cardIcon: getIcon(getCardType(action.payload)), cardType: getCardType(action.payload), validation: __assign(__assign({}, prevState.validation), { cardNumber: isValidCard(formatCard(action.payload)), card: isValidCard(formatCard(action.payload)) &&
|
|
19
19
|
prevState.validation.expiryDate &&
|
|
20
|
-
prevState.validation.cvv }), cvvLength: cvvLength(
|
|
20
|
+
prevState.validation.cvv }), cvvLength: cvvLength(action.payload) });
|
|
21
21
|
case DATE_CHANGE:
|
|
22
|
-
return __assign(__assign({}, prevState), { expiryDate: getFormattedDate(
|
|
22
|
+
return __assign(__assign({}, prevState), { expiryDate: getFormattedDate(action.payload), validation: __assign(__assign({}, prevState.validation), { expiryDate: isValidDate(getFormattedDate(action.payload)), card: isValidDate(getFormattedDate(action.payload)) &&
|
|
23
23
|
prevState.validation.cardNumber &&
|
|
24
24
|
prevState.validation.cvv }) });
|
|
25
25
|
case CVV_CHANGE:
|
|
26
|
-
return __assign(__assign({}, prevState), { cvv:
|
|
26
|
+
return __assign(__assign({}, prevState), { cvv: action.payload, validation: __assign(__assign({}, prevState.validation), { cvv: isValidCvv(action.payload, prevState.cardNumber || ""), card: isValidCvv(action.payload, prevState.cardNumber || "") &&
|
|
27
27
|
prevState.validation.cardNumber &&
|
|
28
28
|
prevState.validation.expiryDate }) });
|
|
29
29
|
case BIN_CHANGE:
|
|
30
|
-
return __assign(__assign({}, prevState), { cardBin: __assign(__assign({}, prevState.cardBin), { bin:
|
|
30
|
+
return __assign(__assign({}, prevState), { cardBin: __assign(__assign({}, prevState.cardBin), { bin: action.payload + "", scheme: getCardType(action.payload) }) });
|
|
31
31
|
default:
|
|
32
32
|
return prevState;
|
|
33
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reducer.js","sourceRoot":"","sources":["../../src/utils/reducer.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,OAAO,EACP,WAAW,EACX,SAAS,EACT,UAAU,EACV,WAAW,GACZ,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"reducer.js","sourceRoot":"","sources":["../../src/utils/reducer.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,OAAO,EACP,WAAW,EACX,SAAS,EACT,UAAU,EACV,WAAW,GACZ,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAI7E,MAAM,CAAC,IAAM,aAAa,GAA6C,UACrE,SAAS,EACT,MAAM;IAEN,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,WAAW;YACd,6BACK,SAAS,KACZ,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EACtC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAC9C,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,EACrC,UAAU,wBACL,SAAS,CAAC,UAAU,KACvB,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EACnD,IAAI,EACF,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;wBACvC,SAAS,CAAC,UAAU,CAAC,UAAU;wBAC/B,SAAS,CAAC,UAAU,CAAC,GAAG,KAE5B,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IACpC;QAEJ,KAAK,WAAW;YACd,6BACK,SAAS,KACZ,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,EAC5C,UAAU,wBACL,SAAS,CAAC,UAAU,KACvB,UAAU,EAAE,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EACzD,IAAI,EACF,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;wBAC7C,SAAS,CAAC,UAAU,CAAC,UAAU;wBAC/B,SAAS,CAAC,UAAU,CAAC,GAAG,OAE5B;QACJ,KAAK,UAAU;YACb,6BACK,SAAS,KACZ,GAAG,EAAE,MAAM,CAAC,OAAO,EACnB,UAAU,wBACL,SAAS,CAAC,UAAU,KACvB,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,EAC3D,IAAI,EACF,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC;wBACtD,SAAS,CAAC,UAAU,CAAC,UAAU;wBAC/B,SAAS,CAAC,UAAU,CAAC,UAAU,OAEnC;QACJ,KAAK,UAAU;YACb,6BACK,SAAS,KACZ,OAAO,wBACF,SAAS,CAAC,OAAO,KACpB,GAAG,EAAE,MAAM,CAAC,OAAO,GAAG,EAAE,EACxB,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAErC;QACJ;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "frames-react-native",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.2",
|
|
4
4
|
"description": "Frames React Native",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"creditcards": "^4.2.0",
|
|
13
13
|
"creditcards-types": "^3.2.0",
|
|
14
|
+
"expo": "^53.0.0",
|
|
14
15
|
"node-fetch": "^2.6.7"
|
|
15
16
|
},
|
|
16
17
|
"keywords": [],
|
|
@@ -18,25 +19,24 @@
|
|
|
18
19
|
"license": "MIT",
|
|
19
20
|
"devDependencies": {
|
|
20
21
|
"@babel/cli": "^7.0.0",
|
|
21
|
-
"@babel/core": "
|
|
22
|
+
"@babel/core": ">=7.23.2",
|
|
22
23
|
"@babel/preset-react": "^7.12.13",
|
|
23
24
|
"@testing-library/jest-dom": "^5.11.9",
|
|
24
25
|
"@testing-library/jest-native": "^3.3.0",
|
|
25
26
|
"@testing-library/react-native": "^7.1.0",
|
|
26
27
|
"@types/jest": "^26.0.20",
|
|
27
28
|
"@types/node-fetch": "^2.5.8",
|
|
28
|
-
"@types/react": "^
|
|
29
|
-
"@types/react-
|
|
30
|
-
"@types/
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"jest": "^
|
|
34
|
-
"
|
|
35
|
-
"react": "~
|
|
36
|
-
"react-native": "
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"typescript": "~3.8.3"
|
|
29
|
+
"@types/react": "^18.2.75",
|
|
30
|
+
"@types/react-test-renderer": "^18.0.7",
|
|
31
|
+
"@types/uuid": "^9.0.1",
|
|
32
|
+
"babel-preset-expo": "^11.0.0",
|
|
33
|
+
"jest": ">=29.7.0",
|
|
34
|
+
"jest-expo": "^53.0.0",
|
|
35
|
+
"react": "~18.2.0",
|
|
36
|
+
"react-native": "~0.73.6",
|
|
37
|
+
"react-native-typescript-transformer": "^1.2.10",
|
|
38
|
+
"ts-jest": "^29.1.2",
|
|
39
|
+
"typescript": "~5.4.4"
|
|
40
40
|
},
|
|
41
41
|
"jest": {
|
|
42
42
|
"preset": "react-native",
|
|
@@ -47,6 +47,9 @@
|
|
|
47
47
|
],
|
|
48
48
|
"coverageReporters": [
|
|
49
49
|
"lcov"
|
|
50
|
-
]
|
|
50
|
+
],
|
|
51
|
+
"transform": {
|
|
52
|
+
"\\.png$": "<rootDir>/__mocks__/fileTransformer.js"
|
|
53
|
+
}
|
|
51
54
|
}
|
|
52
55
|
}
|