Skip to content

Commit 01ffa12

Browse files
committed
feat(payment): CHECKOUT-3031 Add Braintree & VisaCheckout types for VisaCheckout
1 parent ab0b61b commit 01ffa12

File tree

2 files changed

+145
-0
lines changed

2 files changed

+145
-0
lines changed

src/payment/strategies/braintree/braintree.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1+
2+
import { VisaCheckoutInitOptions, VisaCheckoutPaymentSuccessPayload, VisaCheckoutTokenizedPayload } from './visacheckout';
3+
14
export interface BraintreeSDK {
25
client?: BraintreeClientCreator;
36
dataCollector?: BraintreeDataCollectorCreator;
47
paypal?: BraintreePaypalCreator;
58
threeDSecure?: BraintreeThreeDSecureCreator;
9+
visaCheckout?: BraintreeVisaCheckoutCreator;
610
}
711

812
export interface BraintreeModuleCreator<T> {
@@ -19,6 +23,7 @@ export interface BraintreeClientCreator extends BraintreeModuleCreator<Braintree
1923
export interface BraintreeDataCollectorCreator extends BraintreeModuleCreator<BraintreeDataCollector> {}
2024
export interface BraintreeThreeDSecureCreator extends BraintreeModuleCreator<BraintreeThreeDSecure> {}
2125
export interface BraintreePaypalCreator extends BraintreeModuleCreator<BraintreePaypal> {}
26+
export interface BraintreeVisaCheckoutCreator extends BraintreeModuleCreator<BraintreeVisaCheckout> {}
2227

2328
export interface BraintreeModule {
2429
teardown(): Promise<void>;
@@ -52,6 +57,11 @@ export interface BraintreePaypal {
5257
tokenize(options: BraintreePaypalRequest): Promise<BraintreeTokenizePayload>;
5358
}
5459

60+
export interface BraintreeVisaCheckout extends BraintreeModule {
61+
tokenize(payment: VisaCheckoutPaymentSuccessPayload): Promise<VisaCheckoutTokenizedPayload>;
62+
createInitOptions(options: Partial<VisaCheckoutInitOptions>): VisaCheckoutInitOptions;
63+
}
64+
5565
export interface BraintreeTokenizeReturn {
5666
close(): void;
5767
focus(): void;
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
export interface VisaCheckoutAddress {
2+
countryCode?: string;
3+
extendedAddress?: string;
4+
firstName?: string;
5+
lastName?: string;
6+
locality?: string;
7+
postalCode?: string;
8+
region?: string;
9+
streetAddress?: string;
10+
phoneNumber?: string;
11+
}
12+
13+
export interface VisaCheckoutUserData {
14+
userEmail: string;
15+
userFirstName: string;
16+
userLastName: string;
17+
userFullName: string;
18+
userName: string;
19+
}
20+
21+
export interface VisaCheckoutTokenizedPayload {
22+
nonce: string;
23+
details: {
24+
cardType: string;
25+
lastFour: string;
26+
lastTwo: string;
27+
};
28+
description: string;
29+
type: string;
30+
billingAddress: VisaCheckoutAddress;
31+
shippingAddress?: VisaCheckoutAddress;
32+
userData: VisaCheckoutUserData;
33+
binData: {
34+
commercial: string;
35+
countryOfIssuance: string;
36+
debit: string;
37+
durbinRegulated: string;
38+
healthcare: string;
39+
issuingBank: string;
40+
payroll: string;
41+
prepaid: string;
42+
productId: string;
43+
};
44+
}
45+
46+
interface EventMap {
47+
'payment.success'(payment: VisaCheckoutPaymentSuccessPayload): void;
48+
'payment.error'(payment: VisaCheckoutPaymentSuccessPayload, Error: Error): void;
49+
}
50+
51+
export interface VisaCheckoutSDK {
52+
init(options: VisaCheckoutInitOptions): {};
53+
on<EventType extends keyof EventMap>(eventType: EventType, callback: EventMap[EventType]): {};
54+
}
55+
56+
export type CardType = 'VISA' | 'MASTERCARD' | 'AMEX' | 'DISCOVER' | 'ELECTRON' | 'ELO';
57+
58+
export interface VisaCheckoutInitOptions {
59+
apikey: string;
60+
referenceCallID?: string;
61+
externalProfileId?: string;
62+
externalClientId?: string;
63+
settings?: {
64+
locale?: string;
65+
countryCode?: string;
66+
displayName?: string;
67+
websiteUrl?: string;
68+
customerSupportUrl?: string;
69+
shipping?: {
70+
acceptedRegions?: string;
71+
collectShipping?: boolean;
72+
};
73+
review?: {
74+
message?: string;
75+
buttonAction?: 'Continue' | 'Pay';
76+
};
77+
payment?: {
78+
cardBrands?: CardType[];
79+
acceptCanadianVisaDebit?: boolean;
80+
billingCountries?: string;
81+
};
82+
threeDSSetup?: {
83+
threeDSActive?: false;
84+
threeDSSuppressChallenge?: boolean;
85+
};
86+
dataLevel?: 'SUMMARY' | 'FULL' | 'NONE';
87+
currencyFormat?: string;
88+
enableUserDataPrefill?: boolean;
89+
};
90+
paymentRequest: {
91+
merchantRequestId?: string;
92+
currencyCode?: string;
93+
subtotal: string;
94+
shippingHandling?: string;
95+
tax?: string;
96+
discount?: string;
97+
giftWrap?: string;
98+
misc?: string;
99+
total?: string;
100+
orderId?: string;
101+
description?: string;
102+
promoCode?: string;
103+
customData?: {
104+
[key: string]: any;
105+
}
106+
};
107+
}
108+
109+
export interface VisaCheckoutPaymentSuccessPayload {
110+
callid: string;
111+
responseStatus: VisaCheckoutResponseStatus;
112+
encKey: string;
113+
encPaymentData: string;
114+
partialShippingAddress: {
115+
countryCode: string;
116+
postalCode: string;
117+
};
118+
paymentMethodType: 'PAN' | 'TOKEN';
119+
120+
}
121+
122+
export interface VisaCheckoutPaymentCancelledPayload {
123+
callid: string;
124+
}
125+
126+
export interface VisaCheckoutResponseStatus {
127+
status: number;
128+
code: number;
129+
severity?: 'ERROR' | 'WARNING';
130+
message: string;
131+
}
132+
133+
export interface VisaCheckoutHostWindow extends Window {
134+
V?: VisaCheckoutSDK;
135+
}

0 commit comments

Comments
 (0)