@tap-payments/apple-pay-button 0.0.27-test → 0.0.29-test

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 CHANGED
@@ -26,75 +26,87 @@ yarn add @tap-payments/apple-pay-button
26
26
  import React from 'react'
27
27
  import {
28
28
  ApplePayButton,
29
- ButtonStyle,
29
+ ThemeMode,
30
30
  SupportedNetworks,
31
31
  Scope,
32
32
  Environment,
33
+ Locale,
33
34
  ButtonType,
34
- Locale
35
+ Edges
35
36
  } from '@tap-payments/apple-pay-button'
36
37
 
37
38
  const App = () => {
38
39
  return (
39
40
  <ApplePayButton
40
- // required (The public Key provided by Tap)
41
+ // The public Key provided by Tap
41
42
  publicKey={'pk_test_xxxxxxxxxxxxxxxzh'}
42
- // optional (The environment of the SDK and it can be one of these Environment)
43
+ //The environment of the SDK and it can be one of these environments
43
44
  environment={Environment.Development}
44
- // optional (to enable the debug mode)
45
+ //to enable the debug mode
45
46
  debug
46
- // required (The merchant identifier provided by Tap)
47
- merchantIdentifier='merchant.tap.applepay.test'
48
- // required
49
47
  merchant={{
50
- // required (The merchant domain name)
48
+ // The merchant domain name
51
49
  domain: 'example.com',
52
- // optional (The merchant identifier provided by Tap)
50
+ // The merchant identifier provided by Tap
53
51
  id: '1xxxxx8'
54
52
  }}
55
- // required
56
53
  transaction={{
57
- // required (The amount to be charged)
54
+ // The amount to be charged
58
55
  amount: '12',
59
- // required (The currency of the amount)
56
+ // The currency of the amount
60
57
  currency: 'KWD'
61
58
  }}
62
- // optional (The scope of the SDK and it can be one of these scopes:
59
+ // The scope of the SDK and it can be one of these scopes:
63
60
  // [TapToken,AppleToken], by default it is TapToken)
64
61
  scope={Scope.TapToken}
65
- // optional (The supported networks for the Apple Pay button and it
66
- // can be one of these networks: [Mada,Visa,MasterCard], by default
67
- // we bring all the supported networks from tap merchant configuration)
68
- supportedNetworks={[SupportedNetworks.Mada, SupportedNetworks.Visa, SupportedNetworks.MasterCard]}
69
- // optional (The style of the Apple Pay button and it can be one of
70
- // these styles: [White,WhiteOutline,Black], by default it is WhiteOutline)
71
- buttonStyle={ButtonStyle.WhiteOutline}
72
- // optional (The locale of the Apple Pay button and it can be one of these locales)
73
- locale={Locale.EN}
74
- // optional (The type of the Apple Pay button and it can be one of these types)
75
- type={ButtonType.PLAIN}
76
- // optional (The billing contact information)
77
- billingContact={{
78
- // required
79
- email: {
80
- // required
81
- address: 'test@gmail.com'
82
- },
83
- // required
84
- name: {
85
- // required
86
- first: 'test',
87
- // required
88
- last: 'tester',
89
- // optional
90
- middle: 'test'
91
- },
92
- // required
93
- phone: {
94
- number: '10XXXXXX56',
95
- code: '+20'
62
+ acceptance={{
63
+ // The supported networks for the Apple Pay button and it
64
+ // can be one of these networks: [Mada,Visa,MasterCard], by default
65
+ // we bring all the supported networks from tap merchant configuration
66
+ supportedBrands: [SupportedNetworks.Mada, SupportedNetworks.Visa, SupportedNetworks.MasterCard]
67
+ supportedCards : ["DEBIT","CREDIT"],
68
+ supportedCardsWithAuthentications : ["3DS","EMV"]
69
+ }}
70
+ // The billing contact information
71
+ customer={{
72
+ id: 'cus_xxx',
73
+ name: [
74
+ {
75
+ //"en or ar",
76
+ lang: Locale.EN,
77
+ // "First name of the customer.",
78
+ first: 'test',
79
+ //"Last name of the customer.",
80
+ last: 'tester',
81
+ // "Middle name of the customer.",
82
+ middle: 'test'
83
+ }
84
+ ],
85
+ // Defines the contact details for the customer & to be used in creating the billing contact info in Apple pay request
86
+ contact: {
87
+ //"The customer's email",
88
+ email: 'test@gmail.com',
89
+ //"The customer's phone number"
90
+ phone: {
91
+ //"The customer's country code",
92
+ countryCode: '+20',
93
+ //"The customer's phone number
94
+ number: '10XXXXXX56'
95
+ }
96
96
  }
97
97
  }}
98
+ //for styling button
99
+ interface={{
100
+ //The locale of the Apple Pay button and it can be one of these locales:[EN,AR]
101
+ locale: Locale.EN,
102
+ // The theme of the Apple Pay button and it can be one of
103
+ // these values : [light,Dark], by default it is detected from user device
104
+ theme: ThemeMode.DARK,
105
+ // The type of the Apple Pay
106
+ type: ButtonType.BUY,
107
+ // The border of the Apple Pay button and it can be one of these values:[curved,straight]
108
+ edges: Edges.CURVED
109
+ }}
98
110
  // optional (A callback function that will be called when you cancel
99
111
  // the payment process)
100
112
  onCancel={() => console.log('cancelled')}
@@ -106,6 +118,14 @@ const App = () => {
106
118
  // do your stuff here...
107
119
  console.log(token)
108
120
  }}
121
+ // optional (A callback function that will be called when you button is clickable)
122
+ onReady={() => {
123
+ console.log('Ready')
124
+ }}
125
+ // optional (A callback function that will be called when the button clicked)
126
+ onClick={() => {
127
+ console.log('Clicked')
128
+ }}
109
129
  />
110
130
  )
111
131
  }
@@ -121,65 +141,68 @@ const App = () => {
121
141
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
122
142
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
123
143
  <title>apple pay button</title>
124
- <link rel="stylesheet" href="https://apple-pay-button.b-cdn.net/build-0.0.21-test/main.css" />
125
- <script src="https://apple-pay-button.b-cdn.net/build-0.0.21-test/main.js"></script>
144
+ <link rel="stylesheet" href="https://tap-sdks.b-cdn.net/apple-pay/build-1.0.29-test/main.css" />
145
+ <script src="https://tap-sdks.b-cdn.net/apple-pay/build-1.0.29-test/main.js"></script>
126
146
  </head>
147
+
127
148
  <body>
128
149
  <div id="apple-pay-button"></div>
129
150
  <script type="text/javascript">
130
151
  const { renderApplePayButton, ButtonStyle, Scope, SupportedNetworks, Locale, ButtonType } = window.TapSDKs
131
152
  renderApplePayButton(
132
- {
133
- publicKey: 'pk_test_7xxxxxxxxx',
134
- merchantIdentifier: 'merchant.com.xxxxx',
135
- environment: Environment.Sandbox,
136
- merchant: {
137
- domain: 'tp-txxxxxxxx',
138
-
139
- id: 'merchant_xxxxxxxxxx"
140
- },
141
-
142
- transaction: {
143
-
144
- currency: 'SAR',
145
-
146
- amount: '3'
147
- },
148
-
149
- scope: Scope.TapToken,
150
- buttonStyle: ButtonStyle.Black,
151
- type: ButtonType.PLAIN,
152
- locale: Locale.EN,
153
- supportedNetworks: [SupportedNetworks.Visa, SupportedNetworks.MasterCard, SupportedNetworks.Mada],
154
- billingContact: {
155
- email: {
156
-
157
- address: 'test`@gmail.com'
158
- },
159
- name: {
160
- first: 'test',
161
- last: 'test',
162
- middle: '123'
163
- },
164
- phone: {
165
- number: '555555555',
166
- code: '966'
167
- }
168
- },
169
- onCancel: async () => {
170
- console.log('onCancel')
171
- },
172
- onError: async (error) => {
173
- console.log('onError', error)
174
- },
175
- onSuccess: async (data) => {
176
- console.log('onSuccess', data)
177
- },
178
- onReady: async () => {
179
- console.log('onReady')
180
- }
181
- },
182
- 'apple-pay-button'
153
+ {
154
+ publicKey: 'pk_test_7xxxxxxxxx',
155
+ environment: Environment.Sandbox,
156
+ scope: Scope.TapToken,
157
+ merchant: {
158
+ domain: 'tp-txxxxxxxx',
159
+ id: 'merchant_xxxxxxxxxx'
160
+ },
161
+ transaction: {
162
+ currency: 'SAR',
163
+ amount: '3'
164
+ },
165
+ acceptance: {
166
+ supportedBrands: [SupportedNetworks.Mada, SupportedNetworks.Visa, SupportedNetworks.MasterCard]
167
+ supportedCards : ["DEBIT","CREDIT"],
168
+ supportedCardsWithAuthentications : ["3DS","EMV"]
169
+ },
170
+
171
+ customer: {
172
+ name: [{
173
+ locale: 'en'
174
+ first: 'test',
175
+ last: 'tester',
176
+ middle: 'test'
177
+ }],
178
+ contact: {
179
+ email: 'test@gmail.com',
180
+ phone:{
181
+ number: '10XXXXXX56',
182
+ countryCode: '+20',
183
+ }
184
+ }
185
+ },
186
+ interface: {
187
+ locale: Locale.EN,
188
+ theme: ThemeMode.DARK,
189
+ type: ButtonType.BUY,
190
+ edges: Edges.CURVED
191
+ },
192
+ onCancel: async () => {
193
+ console.log('onCancel')
194
+ },
195
+ onError: async (error) => {
196
+ console.log('onError', error)
197
+ },
198
+ onSuccess: async (data) => {
199
+ console.log('onSuccess', data)
200
+ },
201
+ onReady: async () => {
202
+ console.log('onReady')
203
+ }
204
+ },
205
+ 'apple-pay-button'
183
206
  )
184
207
  </script>
185
208
  </body>
@@ -188,22 +211,26 @@ const App = () => {
188
211
 
189
212
  ## Configurations
190
213
 
191
- | Name | Type | R/O | Description |
192
- | -------------------- | --------------------- | ---------- | -------------------------------------------------------------------------------- |
193
- | publicKey | `string` | `required` | The public Key provided by Tap |
194
- | environment | `Environment` | `optional` | The environment of the SDK and it can be one of these environments `Environment` |
195
- | debug | `boolean` | `optional` | To enable the debug mode |
196
- | merchantIdentifier | `string` | `required` | The merchant identifier provided by Tap |
197
- | merchant.id | `string` | `optional` | The merchant identifier provided by Tap |
198
- | merchant.domain | `string` | `required` | The merchant domain name |
199
- | transaction.amount | `string` | `required` | The amount to be charged |
200
- | transaction.currency | `string` | `required` | The currency of the amount |
201
- | scope | `Scope` | `optional` | The scope of the SDK |
202
- | supportedNetworks | `SupportedNetworks[]` | `optional` | The supported networks for the Apple Pay button |
203
- | buttonStyle | `ButtonStyle` | `optional` | The style of the Apple Pay button |
204
- | locale | `Locale` | `optional` | The locale of the Apple Pay button |
205
- | type | `ButtonType` | `optional` | The type of the Apple Pay button |
206
- | billingContact | `BillingContact` | `optional` | The billing contact information |
207
- | onCancel | `function` | `optional` | A callback function that will be called when you cancel the process |
208
- | onError | `function` | `optional` | A callback function that will be called when you have an error |
209
- | onSuccess | `function` | `optional` | A async function that will be called after creating the token successfully |
214
+ | Name | Type | R/O | Description |
215
+ | -------------------------------------------- | ------------ | ---------- | -------------------------------------------------------------------------------- |
216
+ | publicKey | `string` | `required` | The public Key provided by Tap |
217
+ | environment | `enum` | `optional` | The environment of the SDK and it can be one of these environments `Environment` |
218
+ | debug | `boolean` | `optional` | To enable the debug mode |
219
+ | merchant.id | `string` | `required` | The merchant identifier provided by Tap |
220
+ | merchant.domain | `string` | `required` | The merchant domain name |
221
+ | transaction.amount | `string` | `required` | The amount to be charged |
222
+ | transaction.currency | `string` | `required` | The currency of the amount |
223
+ | scope | `enum` | `optional` | The scope of the SDK |
224
+ | acceptance.supportedBrands | `array` | `optional` | The supported networks for the Apple Pay button |
225
+ | acceptance.supportedCards | `array` | `optional` | The supported cards for the Apple Pay button |
226
+ | acceptance.supportedCardsWithAuthentications | `array` | `optional` | The supported cards with authentications for the Apple Pay button |
227
+ | interface.theme | `enum` | `optional` | The theme of the Apple Pay button |
228
+ | interface.locale | `Locale` | `optional` | The locale of the Apple Pay button |
229
+ | interface.type | `ButtonType` | `optional` | The type of the Apple Pay button |
230
+ | interface.edges | `ButtonType` | `optional` | The border of the Apple Pay button |
231
+ | customer | `object` | `optional` | The Customer details information |
232
+ | onCancel | `function` | `optional` | A callback function that will be called when you cancel the process |
233
+ | onError | `function` | `optional` | A callback function that will be called when you have an error |
234
+ | onSuccess | `function` | `optional` | A async function that will be called after creating the token successfully |
235
+ | onClick | `function` | `optional` | A callback function that will be called when the button clicked |
236
+ | onReady | `function` | `optional` | A callback function that will be called when you button is clickable |
@@ -1,12 +1,12 @@
1
- import { Scope, ButtonStyle, MerchantCapabilities, SupportedNetworks, ButtonType, Locale, Environment } from '../constants';
1
+ import { Scope, MerchantCapabilities, SupportedNetworks, ButtonType, Locale, Environment, ThemeMode, Edges } from '../constants';
2
2
  export interface ApplePayRequestData {
3
3
  countryCode: string;
4
4
  currencyCode: string;
5
5
  merchantCapabilities: Array<typeof MerchantCapabilities[keyof typeof MerchantCapabilities]>;
6
6
  supportedNetworks: Array<typeof SupportedNetworks[keyof typeof SupportedNetworks]>;
7
7
  billingContact?: {
8
- phoneNumber: string;
9
- emailAddress: string;
8
+ phoneNumber?: string;
9
+ emailAddress?: string;
10
10
  givenName: string;
11
11
  familyName: string;
12
12
  };
@@ -15,31 +15,44 @@ export interface ApplePayRequestData {
15
15
  amount: number;
16
16
  };
17
17
  }
18
+ export interface Interface {
19
+ locale?: typeof Locale[keyof typeof Locale];
20
+ theme?: typeof ThemeMode[keyof typeof ThemeMode];
21
+ edges?: typeof Edges[keyof typeof Edges];
22
+ type?: typeof ButtonType[keyof typeof ButtonType];
23
+ }
24
+ export interface Customer {
25
+ id?: string;
26
+ name?: {
27
+ lang: typeof Locale[keyof typeof Locale];
28
+ first: string;
29
+ last: string;
30
+ middle?: string;
31
+ }[];
32
+ contact?: {
33
+ email?: string;
34
+ phone?: {
35
+ countryCode: string;
36
+ number: string;
37
+ };
38
+ };
39
+ }
40
+ export interface Acceptance {
41
+ supportedBrands?: Array<typeof SupportedNetworks[keyof typeof SupportedNetworks]>;
42
+ supportedCards?: Array<string>;
43
+ supportedCardsWithAuthentications?: Array<string>;
44
+ }
18
45
  export interface ApplePayButtonProps {
46
+ scope?: typeof Scope[keyof typeof Scope];
19
47
  publicKey: string;
20
48
  environment: typeof Environment[keyof typeof Environment];
21
- merchantIdentifier: string;
22
49
  merchant: {
23
- id?: string;
50
+ id: string;
24
51
  domain: string;
25
52
  };
26
- scope?: typeof Scope[keyof typeof Scope];
27
- supportedNetworks?: Array<typeof SupportedNetworks[keyof typeof SupportedNetworks]>;
28
- buttonStyle?: typeof ButtonStyle[keyof typeof ButtonStyle];
29
- billingContact?: {
30
- name: {
31
- first: string;
32
- middle?: string;
33
- last: string;
34
- };
35
- email: {
36
- address: string;
37
- };
38
- phone: {
39
- code: string;
40
- number: string;
41
- };
42
- };
53
+ interface?: Interface;
54
+ customer?: Customer;
55
+ acceptance: Acceptance;
43
56
  transaction: {
44
57
  amount: string;
45
58
  currency: string;
@@ -50,8 +63,6 @@ export interface ApplePayButtonProps {
50
63
  onClick?: () => void;
51
64
  onReady?: () => void;
52
65
  metaData?: MetaData;
53
- type?: typeof ButtonType[keyof typeof ButtonType];
54
- locale?: typeof Locale[keyof typeof Locale];
55
66
  debug?: boolean;
56
67
  }
57
68
  export interface MerchantResponse {
@@ -88,11 +99,11 @@ export interface CheckoutProfileRequest {
88
99
  amount: number;
89
100
  currency: string;
90
101
  customer?: {
91
- id: string;
92
- email: string;
93
- first_name: string;
94
- last_name: string;
95
- phone: {
102
+ id?: string;
103
+ email?: string;
104
+ first_name?: string;
105
+ last_name?: string;
106
+ phone?: {
96
107
  country_code: string;
97
108
  number: string;
98
109
  };
@@ -1,5 +1,5 @@
1
1
  export declare const MW_BASE_LIVE_URL = "https://mw-sdk.tap.company/v2/checkout";
2
- export declare const MW_BASE_STAGING_URL = "https://mw-sdk.staing.tap.company/v2/checkout";
2
+ export declare const MW_BASE_STAGING_URL = "https://mw-sdk.staging.tap.company/v2/checkout";
3
3
  export declare const MW_BASE_DEV_URL = "https://mw-sdk.dev.tap.company/v2/checkout";
4
4
  export declare const MW_BASE_BETA_URL = "https://mw-sdk.beta.tap.company/v2/checkout";
5
5
  export declare const MW_BASE_SANDBOX_URL = "https://mw-sdk.sandbox.tap.company/v2/checkout";
@@ -11,7 +11,7 @@ var __assign = (this && this.__assign) || function () {
11
11
  };
12
12
  import axios from 'axios';
13
13
  export var MW_BASE_LIVE_URL = 'https://mw-sdk.tap.company/v2/checkout';
14
- export var MW_BASE_STAGING_URL = 'https://mw-sdk.staing.tap.company/v2/checkout';
14
+ export var MW_BASE_STAGING_URL = 'https://mw-sdk.staging.tap.company/v2/checkout';
15
15
  export var MW_BASE_DEV_URL = 'https://mw-sdk.dev.tap.company/v2/checkout';
16
16
  export var MW_BASE_BETA_URL = 'https://mw-sdk.beta.tap.company/v2/checkout';
17
17
  export var MW_BASE_SANDBOX_URL = 'https://mw-sdk.sandbox.tap.company/v2/checkout';
@@ -20,6 +20,14 @@ export declare const ButtonType: {
20
20
  readonly PLAIN: "plain";
21
21
  readonly SUBSCRIBE: "subscribe";
22
22
  };
23
+ export declare const ThemeMode: {
24
+ readonly DARK: "dark";
25
+ readonly LIGHT: "light";
26
+ };
27
+ export declare const Edges: {
28
+ readonly STRAIGHT: "straight";
29
+ readonly CURVED: "curved";
30
+ };
23
31
  export declare const MerchantCapabilities: {
24
32
  readonly Supports3DS: "supports3DS";
25
33
  readonly SupportsCredit: "supportsCredit";
@@ -36,7 +44,7 @@ export declare const SupportedNetworks: {
36
44
  readonly Jcb: "jcb";
37
45
  readonly Maestro: "maestro";
38
46
  };
39
- export declare const ApplePayVersion = 1;
47
+ export declare const ApplePayVersion = 5;
40
48
  export declare const Environment: {
41
49
  readonly Production: "production";
42
50
  readonly Sandbox: "sandbox";
@@ -20,6 +20,14 @@ export var ButtonType = {
20
20
  PLAIN: 'plain',
21
21
  SUBSCRIBE: 'subscribe'
22
22
  };
23
+ export var ThemeMode = {
24
+ DARK: 'dark',
25
+ LIGHT: 'light'
26
+ };
27
+ export var Edges = {
28
+ STRAIGHT: 'straight',
29
+ CURVED: 'curved'
30
+ };
23
31
  export var MerchantCapabilities = {
24
32
  Supports3DS: 'supports3DS',
25
33
  SupportsCredit: 'supportsCredit',
@@ -36,7 +44,7 @@ export var SupportedNetworks = {
36
44
  Jcb: 'jcb',
37
45
  Maestro: 'maestro'
38
46
  };
39
- export var ApplePayVersion = 1;
47
+ export var ApplePayVersion = 5;
40
48
  export var Environment = {
41
49
  Production: 'production',
42
50
  Sandbox: 'sandbox',
@@ -14,51 +14,26 @@ import * as React from 'react';
14
14
  import { createRoot } from 'react-dom/client';
15
15
  import { findOrCreateElementAndInject } from '../../utils';
16
16
  import { useApplePay } from '../../hooks/useApplePay';
17
- import { ButtonStyle, ButtonType, Locale, Scope } from '../../constants';
18
17
  import './ApplePayButton.css';
19
- var ApplePay = React.memo(function (_a) {
20
- var publicKey = _a.publicKey, merchant = _a.merchant, transaction = _a.transaction, billingContact = _a.billingContact, supportedNetworks = _a.supportedNetworks, onCancel = _a.onCancel, onError = _a.onError, onSuccess = _a.onSuccess, onClick = _a.onClick, metaData = _a.metaData, _b = _a.scope, scope = _b === void 0 ? Scope.TapToken : _b, _c = _a.buttonStyle, buttonStyle = _c === void 0 ? ButtonStyle.WhiteOutline : _c, _d = _a.type, type = _d === void 0 ? ButtonType.PLAIN : _d, _e = _a.locale, locale = _e === void 0 ? Locale.EN : _e, debug = _a.debug, merchantIdentifier = _a.merchantIdentifier, environment = _a.environment, onReady = _a.onReady;
21
- var _f = useApplePay({
22
- publicKey: publicKey,
23
- merchant: merchant,
24
- transaction: transaction,
25
- billingContact: billingContact,
26
- supportedNetworks: supportedNetworks,
27
- onError: onError,
28
- onSuccess: onSuccess,
29
- onCancel: onCancel,
30
- scope: scope,
31
- metaData: metaData,
32
- debug: debug,
33
- merchantIdentifier: merchantIdentifier,
34
- environment: environment,
35
- locale: locale,
36
- onReady: onReady
37
- }), loading = _f.loading, onApplePayButtonClicked = _f.onApplePayButtonClicked, disabled = _f.disabled;
18
+ import { getDefaultValues } from '../../utils/defaultValues';
19
+ import { ButtonStyle, Edges, ThemeMode } from '../../constants';
20
+ var ApplePay = React.memo(function (props) {
21
+ var mappedProps = getDefaultValues(props);
22
+ var _a = useApplePay(mappedProps), loading = _a.loading, onApplePayButtonClicked = _a.onApplePayButtonClicked, disabled = _a.disabled;
38
23
  React.useEffect(function () {
39
- if (debug) {
40
- console.log('ApplePayButtonProps', {
41
- publicKey: publicKey,
42
- merchant: merchant,
43
- transaction: transaction,
44
- billingContact: billingContact,
45
- supportedNetworks: supportedNetworks,
46
- metaData: metaData,
47
- scope: scope,
48
- buttonStyle: buttonStyle,
49
- type: type,
50
- locale: locale,
51
- debug: debug
52
- });
24
+ if (props.debug) {
25
+ console.log('ApplePayButtonProps', props);
53
26
  }
54
27
  }, []);
55
28
  return (_jsx("button", { className: 'button-applepay-tap', style: {
56
- ApplePayButtonType: type,
57
- ApplePayButtonStyle: buttonStyle
29
+ ApplePayButtonType: mappedProps.interface.type,
30
+ ApplePayButtonStyle: mappedProps.interface.theme === ThemeMode.DARK ? ButtonStyle.Black : ButtonStyle.White,
31
+ borderRadius: mappedProps.interface.edges === Edges.STRAIGHT ? '0' : '10px'
58
32
  }, onClick: function () {
33
+ var _a;
59
34
  onApplePayButtonClicked();
60
- onClick === null || onClick === void 0 ? void 0 : onClick();
61
- }, lang: locale, disabled: loading || disabled }));
35
+ (_a = props.onClick) === null || _a === void 0 ? void 0 : _a.call(props);
36
+ }, lang: mappedProps.interface.locale, disabled: loading || disabled }));
62
37
  });
63
38
  export function ApplePayButton(props) {
64
39
  return _jsx(ApplePay, __assign({}, props));
@@ -5,5 +5,5 @@ interface UseApplePayReturnProps {
5
5
  onApplePayButtonClicked: () => Promise<void>;
6
6
  disabled: boolean;
7
7
  }
8
- export declare const useApplePay: ({ publicKey, merchant, transaction, billingContact, onCancel, onError, onSuccess, scope, supportedNetworks, metaData, debug, merchantIdentifier, environment, locale, onReady }: UseApplePayProps) => UseApplePayReturnProps;
8
+ export declare const useApplePay: ({ publicKey, merchant, transaction, interface: interfaceObj, customer, onCancel, onError, onSuccess, scope, acceptance, metaData, debug, environment, onReady }: UseApplePayProps) => UseApplePayReturnProps;
9
9
  export {};
@@ -50,49 +50,54 @@ import appService from '../api/app.service';
50
50
  import { ApplePayVersion } from '../constants';
51
51
  import { setAxiosGlobalHeaders } from '../api/httpClient';
52
52
  import { getApplePayPaymentMethod, getApplePayRequest, validateCurrency, validateSupportedNetworks } from '../utils/config';
53
+ import { getMerchantCapaplities } from '../utils/defaultValues';
53
54
  export var useApplePay = function (_a) {
54
- var publicKey = _a.publicKey, merchant = _a.merchant, transaction = _a.transaction, billingContact = _a.billingContact, onCancel = _a.onCancel, onError = _a.onError, onSuccess = _a.onSuccess, scope = _a.scope, supportedNetworks = _a.supportedNetworks, metaData = _a.metaData, debug = _a.debug, merchantIdentifier = _a.merchantIdentifier, environment = _a.environment, locale = _a.locale, onReady = _a.onReady;
55
+ var publicKey = _a.publicKey, merchant = _a.merchant, transaction = _a.transaction, interfaceObj = _a.interface, customer = _a.customer, onCancel = _a.onCancel, onError = _a.onError, onSuccess = _a.onSuccess, scope = _a.scope, acceptance = _a.acceptance, metaData = _a.metaData, debug = _a.debug, environment = _a.environment, onReady = _a.onReady;
55
56
  var _b = useState(false), loading = _b[0], setLoading = _b[1];
56
57
  var _c = useState(null), profileData = _c[0], setProfile = _c[1];
57
58
  var _d = useState(false), disabled = _d[0], setDisabled = _d[1];
58
59
  var initialize = useCallback(function (metaData) { return __awaiter(void 0, void 0, void 0, function () {
59
60
  var merchantProfile, payment_options, headers, data, err_1;
60
- var _a, _b;
61
- return __generator(this, function (_c) {
62
- switch (_c.label) {
61
+ var _a, _b, _c, _d, _e, _f, _g;
62
+ return __generator(this, function (_h) {
63
+ switch (_h.label) {
63
64
  case 0:
64
65
  setLoading(true);
65
66
  appService.setEnv(environment);
66
67
  appService.setBaseUrl();
67
- _c.label = 1;
68
+ _h.label = 1;
68
69
  case 1:
69
- _c.trys.push([1, 4, 5, 6]);
70
+ _h.trys.push([1, 4, 5, 6]);
70
71
  if (metaData) {
71
72
  merchantProfile = metaData.merchant, payment_options = metaData.payment_options, headers = metaData.headers;
72
73
  setAxiosGlobalHeaders(__assign({}, headers));
73
74
  setProfile({ merchant: merchantProfile, payment_options: payment_options });
74
75
  return [2];
75
76
  }
76
- return [4, appService.setBrowserHeaders({ locale: locale, domain: merchant.domain, pk: publicKey })];
77
+ return [4, appService.setBrowserHeaders({
78
+ locale: interfaceObj === null || interfaceObj === void 0 ? void 0 : interfaceObj.locale,
79
+ domain: merchant.domain,
80
+ pk: publicKey
81
+ })];
77
82
  case 2:
78
- _c.sent();
83
+ _h.sent();
79
84
  return [4, appService.checkoutProfile({
80
85
  currency: transaction.currency,
81
- merchant_id: (_a = merchant.id) !== null && _a !== void 0 ? _a : '',
86
+ merchant_id: merchant.id,
82
87
  total_amount: Number(transaction.amount),
83
- order: __assign(__assign({ amount: Number(transaction.amount), currency: transaction.currency }, (billingContact && {
88
+ order: __assign(__assign({ amount: Number(transaction.amount), currency: transaction.currency }, (customer && {
84
89
  customer: {
85
90
  id: '',
86
- email: billingContact.email.address,
87
- first_name: billingContact.name.first,
88
- last_name: billingContact.name.last,
91
+ email: (_a = customer.contact) === null || _a === void 0 ? void 0 : _a.email,
92
+ first_name: ((_b = customer.name) === null || _b === void 0 ? void 0 : _b.length) ? customer.name[0].first : '',
93
+ last_name: ((_c = customer.name) === null || _c === void 0 ? void 0 : _c.length) ? customer.name[0].last : '',
89
94
  phone: {
90
- country_code: billingContact.phone.code,
91
- number: billingContact.phone.number
95
+ country_code: ((_e = (_d = customer.contact) === null || _d === void 0 ? void 0 : _d.phone) === null || _e === void 0 ? void 0 : _e.countryCode) || '',
96
+ number: ((_g = (_f = customer.contact) === null || _f === void 0 ? void 0 : _f.phone) === null || _g === void 0 ? void 0 : _g.number) || ''
92
97
  }
93
98
  }
94
99
  })), { merchant: {
95
- id: (_b = merchant.id) !== null && _b !== void 0 ? _b : ''
100
+ id: merchant.id
96
101
  }, items: [
97
102
  {
98
103
  amount: Number(transaction.amount),
@@ -104,13 +109,13 @@ export var useApplePay = function (_a) {
104
109
  ] })
105
110
  })];
106
111
  case 3:
107
- data = _c.sent();
112
+ data = _h.sent();
108
113
  if (debug)
109
114
  console.log('merchant configuration: ', data);
110
115
  setProfile(data);
111
116
  return [3, 6];
112
117
  case 4:
113
- err_1 = _c.sent();
118
+ err_1 = _h.sent();
114
119
  onError && onError(err_1.errors || err_1);
115
120
  return [3, 6];
116
121
  case 5:
@@ -120,7 +125,7 @@ export var useApplePay = function (_a) {
120
125
  case 6: return [2];
121
126
  }
122
127
  });
123
- }); }, [environment, locale, merchant.domain, publicKey, debug, onError]);
128
+ }); }, [environment, interfaceObj === null || interfaceObj === void 0 ? void 0 : interfaceObj.locale, merchant.domain, publicKey, debug, onError]);
124
129
  useEffect(function () {
125
130
  initialize(metaData);
126
131
  }, [initialize, metaData]);
@@ -142,12 +147,13 @@ export var useApplePay = function (_a) {
142
147
  try {
143
148
  paymentMethod = getApplePayPaymentMethod(profileData.payment_options.payment_methods || []);
144
149
  currency = validateCurrency(transaction.currency, paymentMethod.supported_currencies);
145
- cardBrands = validateSupportedNetworks(paymentMethod.supported_card_brands, supportedNetworks);
150
+ cardBrands = validateSupportedNetworks(paymentMethod.supported_card_brands, acceptance.supportedBrands);
146
151
  request = getApplePayRequest({
147
152
  countryCode: profileData.merchant.country_code,
148
153
  transaction: __assign(__assign({}, transaction), { currency: currency }),
149
- billingContact: billingContact,
154
+ customer: customer,
150
155
  supportedNetworks: cardBrands,
156
+ merchantCapabilities: getMerchantCapaplities(acceptance === null || acceptance === void 0 ? void 0 : acceptance.supportedCards),
151
157
  name: profileData.merchant.name
152
158
  });
153
159
  if (debug) {
@@ -170,7 +176,7 @@ export var useApplePay = function (_a) {
170
176
  if (debug) {
171
177
  console.info("creating merchant session for merchantData: ".concat(JSON.stringify(profileData.merchant), " and validationURL: ").concat(event.validationURL, " and merchant.domain: ").concat(merchant.domain));
172
178
  }
173
- return [4, appService.appleSession(profileData.merchant, event.validationURL, merchant.domain, merchantIdentifier)];
179
+ return [4, appService.appleSession(__assign(__assign({}, profileData.merchant), { id: merchant.id }), event.validationURL, merchant.domain, merchant.id)];
174
180
  case 2:
175
181
  merchantSession = _a.sent();
176
182
  if (debug)
package/build/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import { ApplePayButtonProps, ApplePayButton } from './features/ApplePayButton';
2
- import { ButtonStyle, Scope, SupportedNetworks, Environment, Locale, ButtonType } from './constants';
2
+ import { ThemeMode, Scope, SupportedNetworks, Environment, Locale, ButtonType, Edges, MerchantCapabilities } from './constants';
3
3
  export type { ApplePayButtonProps };
4
- export { ApplePayButton, ButtonStyle, Scope, SupportedNetworks, Environment, Locale, ButtonType };
4
+ export { ApplePayButton, ThemeMode, Scope, SupportedNetworks, Environment, Locale, ButtonType, Edges, MerchantCapabilities };
package/build/index.js CHANGED
@@ -1,12 +1,14 @@
1
1
  import { ApplePayButton, renderApplePayButton } from './features/ApplePayButton';
2
- import { ButtonStyle, Scope, SupportedNetworks, Environment, Locale, ButtonType } from './constants';
3
- export { ApplePayButton, ButtonStyle, Scope, SupportedNetworks, Environment, Locale, ButtonType };
2
+ import { ThemeMode, Scope, SupportedNetworks, Environment, Locale, ButtonType, Edges, MerchantCapabilities } from './constants';
3
+ export { ApplePayButton, ThemeMode, Scope, SupportedNetworks, Environment, Locale, ButtonType, Edges, MerchantCapabilities };
4
4
  window['TapSDKs'] = {
5
5
  renderApplePayButton: renderApplePayButton,
6
- ButtonStyle: ButtonStyle,
7
6
  Scope: Scope,
8
7
  SupportedNetworks: SupportedNetworks,
9
8
  Environment: Environment,
10
9
  Locale: Locale,
11
- ButtonType: ButtonType
10
+ ButtonType: ButtonType,
11
+ ThemeMode: ThemeMode,
12
+ Edges: Edges,
13
+ MerchantCapabilities: MerchantCapabilities
12
14
  };
@@ -1,8 +1,10 @@
1
- import { ApplePayButtonProps, ApplePayRequestData, PaymentMethod } from '../@types';
1
+ import { Acceptance, ApplePayButtonProps, ApplePayRequestData, PaymentMethod } from '../@types';
2
2
  import { SupportedNetworks } from '../constants';
3
- export declare const validateSupportedNetworks: (supportedNetworksConfig: Array<(typeof SupportedNetworks)[keyof typeof SupportedNetworks]>, supportedNetworks: ApplePayButtonProps['supportedNetworks']) => ("amex" | "mada" | "masterCard" | "visa" | "chinaUnionPay" | "discover" | "electron" | "jcb" | "maestro")[];
3
+ export declare const validateSupportedNetworks: (supportedNetworksConfig: Array<(typeof SupportedNetworks)[keyof typeof SupportedNetworks]>, supportedNetworks: Acceptance['supportedBrands']) => ("amex" | "mada" | "masterCard" | "visa" | "chinaUnionPay" | "discover" | "electron" | "jcb" | "maestro")[];
4
4
  export declare const validateCurrency: (currency: string, currencies: string[]) => string;
5
- export declare const getApplePayRequest: ({ transaction, billingContact, supportedNetworks, countryCode, name }: Pick<ApplePayButtonProps, "supportedNetworks" | "transaction" | "billingContact"> & {
5
+ export declare const getApplePayRequest: ({ transaction, customer, supportedNetworks, merchantCapabilities, countryCode, name }: Pick<ApplePayButtonProps, "transaction" | "customer"> & {
6
+ supportedNetworks: Acceptance['supportedBrands'];
7
+ merchantCapabilities: ApplePayRequestData['merchantCapabilities'];
6
8
  countryCode: string;
7
9
  name: string;
8
10
  }) => ApplePayRequestData;
@@ -1,4 +1,3 @@
1
- import { MerchantCapabilities } from '../constants';
2
1
  import { JSEncrypt } from 'jsencrypt';
3
2
  export var validateSupportedNetworks = function (supportedNetworksConfig, supportedNetworks) {
4
3
  var toLowerCase = function (item) { return item.toLowerCase(); };
@@ -25,17 +24,18 @@ export var validateCurrency = function (currency, currencies) {
25
24
  return currency;
26
25
  };
27
26
  export var getApplePayRequest = function (_a) {
28
- var transaction = _a.transaction, billingContact = _a.billingContact, supportedNetworks = _a.supportedNetworks, countryCode = _a.countryCode, name = _a.name;
27
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k;
28
+ var transaction = _a.transaction, customer = _a.customer, supportedNetworks = _a.supportedNetworks, merchantCapabilities = _a.merchantCapabilities, countryCode = _a.countryCode, name = _a.name;
29
29
  return {
30
30
  countryCode: countryCode,
31
31
  currencyCode: transaction.currency,
32
- merchantCapabilities: [MerchantCapabilities.Supports3DS],
32
+ merchantCapabilities: merchantCapabilities,
33
33
  supportedNetworks: supportedNetworks,
34
- billingContact: billingContact && {
35
- phoneNumber: billingContact.phone.code + billingContact.phone.number,
36
- emailAddress: billingContact.email.address,
37
- givenName: billingContact.name.first,
38
- familyName: billingContact.name.last
34
+ billingContact: customer && {
35
+ phoneNumber: ((_c = (_b = customer.contact) === null || _b === void 0 ? void 0 : _b.phone) === null || _c === void 0 ? void 0 : _c.countryCode) || '' + ((_e = (_d = customer.contact) === null || _d === void 0 ? void 0 : _d.phone) === null || _e === void 0 ? void 0 : _e.number),
36
+ emailAddress: (_f = customer.contact) === null || _f === void 0 ? void 0 : _f.email,
37
+ givenName: ((_g = customer.name) === null || _g === void 0 ? void 0 : _g.length) ? (_h = customer.name[0]) === null || _h === void 0 ? void 0 : _h.first : '',
38
+ familyName: ((_j = customer.name) === null || _j === void 0 ? void 0 : _j.length) ? (_k = customer.name[0]) === null || _k === void 0 ? void 0 : _k.last : ''
39
39
  },
40
40
  total: {
41
41
  amount: Number(transaction.amount),
@@ -0,0 +1,30 @@
1
+ import { ApplePayButtonProps } from '../@types';
2
+ export declare const getDefaultValues: (mainObject: ApplePayButtonProps) => {
3
+ interface: {
4
+ locale?: "en" | "ar" | "fr" | undefined;
5
+ theme?: "dark" | "light" | undefined;
6
+ edges?: "straight" | "curved" | undefined;
7
+ type?: "book" | "buy" | "check-out" | "pay" | "plain" | "subscribe" | undefined;
8
+ };
9
+ scope?: "AppleToken" | "TapToken" | undefined;
10
+ publicKey: string;
11
+ environment: "production" | "sandbox" | "beta" | "development" | "staging";
12
+ merchant: {
13
+ id: string;
14
+ domain: string;
15
+ };
16
+ customer?: import("../@types").Customer | undefined;
17
+ acceptance: import("../@types").Acceptance;
18
+ transaction: {
19
+ amount: string;
20
+ currency: string;
21
+ };
22
+ onCancel?: (() => void) | undefined;
23
+ onError?: ((error: any) => void) | undefined;
24
+ onSuccess?: ((data: Record<string, any>) => Promise<void>) | undefined;
25
+ onClick?: (() => void) | undefined;
26
+ onReady?: (() => void) | undefined;
27
+ metaData?: import("../@types").MetaData | undefined;
28
+ debug?: boolean | undefined;
29
+ };
30
+ export declare const getMerchantCapaplities: (supportedCards?: Array<string>) => ("supports3DS" | "supportsCredit" | "supportsDebit")[];
@@ -0,0 +1,48 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
13
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
14
+ if (ar || !(i in from)) {
15
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
16
+ ar[i] = from[i];
17
+ }
18
+ }
19
+ return to.concat(ar || Array.prototype.slice.call(from));
20
+ };
21
+ import { ThemeMode, Locale, ButtonType, Edges, MerchantCapabilities } from '../constants';
22
+ export var getDefaultValues = function (mainObject) {
23
+ var userThemeMode = window.matchMedia('(prefers-color-scheme: light)').matches ? ThemeMode.LIGHT : ThemeMode.DARK;
24
+ var userLang = navigator.language.toLowerCase().includes(Locale.AR) ? Locale.AR : Locale.EN;
25
+ var defaultInterface = {
26
+ locale: userLang,
27
+ theme: userThemeMode,
28
+ type: ButtonType.PLAIN,
29
+ edges: Edges.CURVED
30
+ };
31
+ return __assign(__assign({}, mainObject), { interface: __assign(__assign({}, defaultInterface), mainObject.interface) });
32
+ };
33
+ export var getMerchantCapaplities = function (supportedCards) {
34
+ var merchantCapaplities = [MerchantCapabilities.Supports3DS];
35
+ if (!supportedCards) {
36
+ merchantCapaplities = __spreadArray(__spreadArray([], merchantCapaplities, true), [
37
+ MerchantCapabilities.SupportsCredit,
38
+ MerchantCapabilities.SupportsDebit
39
+ ], false);
40
+ }
41
+ else if (supportedCards.includes('CREDIT')) {
42
+ merchantCapaplities.push(MerchantCapabilities.SupportsCredit);
43
+ }
44
+ else if (supportedCards.includes('DEBIT')) {
45
+ merchantCapaplities.push(MerchantCapabilities.SupportsDebit);
46
+ }
47
+ return merchantCapaplities;
48
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tap-payments/apple-pay-button",
3
- "version": "0.0.27-test",
3
+ "version": "0.0.29-test",
4
4
  "description": "Apple Pay Button React Component",
5
5
  "main": "build/index.js",
6
6
  "module": "build/index.js",
@@ -20,7 +20,7 @@
20
20
  "copy:files": "copyfiles -u 1 src/**/*.css build/",
21
21
  "tsc:alias": "tsc-alias -p tsconfig.json",
22
22
  "ts:build": "rm -rf build && tsc && yarn tsc:alias && yarn copy:files",
23
- "push": "npm publish --access public --tag test"
23
+ "push": "npm publish --access public"
24
24
  },
25
25
  "keywords": [],
26
26
  "author": {