@rebilly/instruments 1.0.2-beta.1 → 1.0.2-beta.10

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.
Files changed (261) hide show
  1. package/.babelrc +13 -4
  2. package/.eslintrc.js +27 -0
  3. package/.prettierrc.js +11 -0
  4. package/CONTRIBUTING.md +4 -0
  5. package/README.md +350 -0
  6. package/dist/events/base-event.js +40 -11
  7. package/dist/events/events.spec.js +18 -0
  8. package/dist/events/index.js +10 -7
  9. package/dist/functions/destroy.js +27 -5
  10. package/dist/functions/destroy.spec.js +69 -0
  11. package/dist/functions/initialize.js +24 -20
  12. package/dist/functions/initialize.spec.js +4 -4
  13. package/dist/functions/mount/fetch-summary-data.js +26 -11
  14. package/dist/functions/mount/fetch-summary-data.spec.js +15 -16
  15. package/dist/functions/mount/index.js +168 -106
  16. package/dist/functions/mount/mount.spec.js +14 -36
  17. package/dist/functions/on.js +25 -17
  18. package/dist/functions/on.spec.js +36 -18
  19. package/dist/functions/purchase.js +33 -74
  20. package/dist/functions/purchase.spec.js +17 -14
  21. package/dist/functions/show.js +31 -8
  22. package/dist/functions/show.spec.js +42 -17
  23. package/dist/functions/update.js +60 -4
  24. package/dist/functions/update.spec.js +100 -0
  25. package/dist/i18n/en.json +19 -0
  26. package/dist/i18n/es.json +19 -0
  27. package/dist/i18n/index.js +5 -0
  28. package/dist/index.js +67 -55
  29. package/dist/index.spec.js +6 -10
  30. package/dist/loader/index.js +24 -4
  31. package/dist/loader/loader.spec.js +4 -4
  32. package/dist/storefront/models/ready-to-pay-model.js +7 -1
  33. package/dist/storefront/plans.js +9 -10
  34. package/dist/storefront/plans.spec.js +20 -20
  35. package/dist/storefront/products.js +9 -10
  36. package/dist/storefront/products.spec.js +20 -20
  37. package/dist/storefront/purchase.js +9 -8
  38. package/dist/storefront/purchase.spec.js +7 -4
  39. package/dist/storefront/ready-to-pay.js +12 -11
  40. package/dist/storefront/ready-to-pay.spec.js +24 -19
  41. package/dist/storefront/storefront.spec.js +1 -1
  42. package/dist/storefront/summary.js +11 -12
  43. package/dist/storefront/summary.spec.js +25 -24
  44. package/dist/style/base/__snapshots__/theme.spec.js.snap +52 -0
  45. package/dist/style/base/index.js +72 -0
  46. package/dist/style/base/theme.js +73 -0
  47. package/dist/style/base/theme.spec.js +30 -0
  48. package/dist/style/browserslist.js +8 -0
  49. package/dist/style/components/address.js +64 -0
  50. package/dist/style/components/button.js +61 -0
  51. package/dist/style/components/divider.js +48 -0
  52. package/dist/style/components/forms/checkbox.js +83 -0
  53. package/dist/style/components/forms/field.js +53 -0
  54. package/dist/style/components/forms/form.js +28 -0
  55. package/dist/style/components/forms/input.js +45 -0
  56. package/dist/style/components/forms/label.js +43 -0
  57. package/dist/style/components/forms/select.js +63 -0
  58. package/dist/style/components/forms/validation.js +34 -0
  59. package/dist/style/components/icons.js +22 -0
  60. package/dist/style/components/index.js +57 -0
  61. package/dist/style/components/loader.js +48 -0
  62. package/dist/style/components/methods.js +104 -0
  63. package/dist/style/components/overlay.js +33 -0
  64. package/dist/style/helpers/index.js +59 -0
  65. package/dist/style/index.js +48 -0
  66. package/dist/style/payment-instruments/content.js +17 -0
  67. package/dist/style/payment-instruments/index.js +20 -0
  68. package/dist/{styles → style/payment-instruments}/payment-card.js +14 -6
  69. package/dist/{styles/shade-tint-values-helper.js → style/utils/color-values.js} +5 -9
  70. package/dist/style/vendor/framepay.js +34 -0
  71. package/dist/style/vendor/postmate.js +17 -0
  72. package/dist/style/views/confirmation.js +85 -0
  73. package/dist/style/views/index.js +29 -0
  74. package/dist/style/views/method-selector.js +20 -0
  75. package/dist/style/views/modal.js +93 -0
  76. package/dist/style/views/result.js +61 -0
  77. package/dist/style/views/summary.js +123 -0
  78. package/dist/utils/format-currency.js +1 -0
  79. package/dist/utils/has-valid-css-selector.js +1 -1
  80. package/dist/utils/index.js +3 -19
  81. package/dist/utils/process-property-as-dom-element.js +0 -2
  82. package/dist/utils/sleep.js +10 -0
  83. package/{src/components → dist/views}/__snapshots__/summary.spec.js.snap +7 -3
  84. package/dist/views/common/iframe/base-iframe.js +57 -0
  85. package/dist/views/common/iframe/event-listeners.js +50 -0
  86. package/dist/views/common/iframe/index.js +19 -0
  87. package/dist/views/common/iframe/method-iframe.js +33 -0
  88. package/dist/views/common/iframe/modal-iframe.js +38 -0
  89. package/dist/views/common/iframe/view-iframe.js +31 -0
  90. package/dist/views/common/render-utilities.js +11 -0
  91. package/dist/views/confirmation.js +82 -0
  92. package/dist/views/method-selector/__snapshots__/method-selector.spec.js.snap +3 -0
  93. package/dist/views/method-selector/express-methods/apple-pay.js +92 -0
  94. package/dist/views/method-selector/express-methods/google-pay.js +32 -0
  95. package/dist/views/method-selector/express-methods/paypal.js +19 -0
  96. package/dist/views/method-selector/generate-digital-wallet.js +59 -0
  97. package/dist/views/method-selector/generate-digital-wallet.spec.js +132 -0
  98. package/dist/views/method-selector/get-method-data.js +25 -0
  99. package/dist/{components/form → views/method-selector}/get-payment-methods.js +22 -6
  100. package/dist/views/method-selector/get-payment-methods.spec.js +44 -0
  101. package/dist/views/method-selector/index.js +133 -0
  102. package/dist/views/method-selector/method-selector.spec.js +139 -0
  103. package/dist/views/method-selector/mount-express-methods.js +69 -0
  104. package/dist/views/method-selector/mount-methods.js +78 -0
  105. package/dist/views/modal.js +83 -0
  106. package/dist/views/result.js +42 -0
  107. package/dist/{components → views}/summary.js +36 -25
  108. package/dist/{components → views}/summary.spec.js +49 -22
  109. package/package.json +11 -5
  110. package/src/events/base-event.js +35 -12
  111. package/src/events/events.spec.js +11 -0
  112. package/src/events/index.js +12 -6
  113. package/src/functions/destroy.js +22 -3
  114. package/src/functions/destroy.spec.js +63 -0
  115. package/src/functions/initialize.js +23 -18
  116. package/src/functions/initialize.spec.js +9 -7
  117. package/src/functions/mount/fetch-summary-data.js +16 -13
  118. package/src/functions/mount/fetch-summary-data.spec.js +22 -27
  119. package/src/functions/mount/index.js +194 -133
  120. package/src/functions/mount/mount.spec.js +83 -84
  121. package/src/functions/on.js +17 -14
  122. package/src/functions/on.spec.js +39 -29
  123. package/src/functions/purchase.js +24 -64
  124. package/src/functions/purchase.spec.js +19 -17
  125. package/src/functions/show.js +26 -6
  126. package/src/functions/show.spec.js +41 -19
  127. package/src/functions/update.js +49 -3
  128. package/src/functions/update.spec.js +107 -0
  129. package/src/i18n/i18n.spec.js +6 -4
  130. package/src/i18n/index.js +19 -11
  131. package/src/index.js +42 -51
  132. package/src/index.spec.js +11 -20
  133. package/src/loader/index.js +55 -39
  134. package/src/loader/loader.spec.js +30 -23
  135. package/src/storefront/index.js +9 -7
  136. package/src/storefront/models/plan-model.js +1 -1
  137. package/src/storefront/models/product-model.js +1 -1
  138. package/src/storefront/models/ready-to-pay-model.js +10 -4
  139. package/src/storefront/models/summary-model.js +8 -15
  140. package/src/storefront/plans.js +16 -12
  141. package/src/storefront/plans.spec.js +29 -37
  142. package/src/storefront/products.js +16 -12
  143. package/src/storefront/products.spec.js +28 -39
  144. package/src/storefront/purchase.js +8 -6
  145. package/src/storefront/purchase.spec.js +18 -17
  146. package/src/storefront/ready-to-pay.js +19 -13
  147. package/src/storefront/ready-to-pay.spec.js +41 -41
  148. package/src/storefront/storefront.spec.js +1 -1
  149. package/src/storefront/summary.js +14 -12
  150. package/src/storefront/summary.spec.js +37 -50
  151. package/src/style/base/__snapshots__/theme.spec.js.snap +52 -0
  152. package/src/style/base/index.js +63 -0
  153. package/src/style/base/theme.js +61 -0
  154. package/src/style/base/theme.spec.js +32 -0
  155. package/src/style/browserslist.js +1 -0
  156. package/src/style/components/address.js +55 -0
  157. package/src/style/components/button.js +54 -0
  158. package/src/style/components/divider.js +39 -0
  159. package/src/style/components/forms/checkbox.js +76 -0
  160. package/src/style/components/forms/field.js +44 -0
  161. package/src/style/components/forms/form.js +19 -0
  162. package/src/style/components/forms/input.js +36 -0
  163. package/src/style/components/forms/label.js +34 -0
  164. package/src/style/components/forms/select.js +54 -0
  165. package/src/style/components/forms/validation.js +25 -0
  166. package/src/style/components/icons.js +13 -0
  167. package/src/style/components/index.js +35 -0
  168. package/src/style/components/loader.js +41 -0
  169. package/src/style/components/methods.js +93 -0
  170. package/src/style/components/overlay.js +24 -0
  171. package/src/style/helpers/index.js +51 -0
  172. package/src/style/index.js +30 -0
  173. package/src/style/payment-instruments/content.js +8 -0
  174. package/src/style/payment-instruments/index.js +10 -0
  175. package/src/style/payment-instruments/payment-card.js +26 -0
  176. package/src/style/utils/color-values.js +9 -0
  177. package/src/style/vendor/framepay.js +25 -0
  178. package/src/style/vendor/postmate.js +8 -0
  179. package/src/style/views/confirmation.js +76 -0
  180. package/src/style/views/index.js +16 -0
  181. package/src/style/views/method-selector.js +11 -0
  182. package/src/style/views/modal.js +84 -0
  183. package/src/style/views/result.js +52 -0
  184. package/src/style/views/summary.js +114 -0
  185. package/src/utils/add-dom-element.js +12 -13
  186. package/src/utils/format-currency.js +4 -1
  187. package/src/utils/has-valid-css-selector.js +2 -2
  188. package/src/utils/index.js +2 -6
  189. package/src/utils/is-dom-element.js +1 -1
  190. package/src/utils/process-property-as-dom-element.js +27 -24
  191. package/src/utils/sleep.js +3 -0
  192. package/src/views/__snapshots__/summary.spec.js.snap +292 -0
  193. package/src/views/common/iframe/base-iframe.js +46 -0
  194. package/src/views/common/iframe/event-listeners.js +27 -0
  195. package/src/views/common/iframe/index.js +7 -0
  196. package/src/views/common/iframe/method-iframe.js +21 -0
  197. package/src/views/common/iframe/modal-iframe.js +27 -0
  198. package/src/views/common/iframe/view-iframe.js +18 -0
  199. package/src/views/common/render-utilities.js +4 -0
  200. package/src/views/confirmation.js +57 -0
  201. package/src/views/method-selector/__snapshots__/method-selector.spec.js.snap +3 -0
  202. package/src/views/method-selector/express-methods/apple-pay.js +78 -0
  203. package/src/views/method-selector/express-methods/google-pay.js +25 -0
  204. package/src/views/method-selector/express-methods/paypal.js +7 -0
  205. package/src/views/method-selector/generate-digital-wallet.js +44 -0
  206. package/src/views/method-selector/generate-digital-wallet.spec.js +131 -0
  207. package/src/{components/form → views/method-selector}/get-method-data.js +9 -5
  208. package/src/views/method-selector/get-payment-methods.js +40 -0
  209. package/src/views/method-selector/get-payment-methods.spec.js +40 -0
  210. package/src/views/method-selector/index.js +110 -0
  211. package/src/views/method-selector/method-selector.spec.js +146 -0
  212. package/src/views/method-selector/mount-express-methods.js +53 -0
  213. package/src/views/method-selector/mount-methods.js +71 -0
  214. package/src/views/modal.js +84 -0
  215. package/src/views/result.js +30 -0
  216. package/src/{components → views}/summary.js +65 -33
  217. package/src/views/summary.spec.js +170 -0
  218. package/tests/async-utilities.js +22 -0
  219. package/tests/mocks/rebilly-instruments-mock.js +105 -7
  220. package/dist/components/confirmation.js +0 -113
  221. package/dist/components/form/form.js +0 -143
  222. package/dist/components/form/form.spec.js +0 -111
  223. package/dist/components/form/get-method-data.js +0 -21
  224. package/dist/components/form/method-selector.js +0 -60
  225. package/dist/components/form/mount-express-payment-methods.js +0 -102
  226. package/dist/components/form/process-digital-wallet-options.js +0 -24
  227. package/dist/components/form/zoid-helpers.js +0 -131
  228. package/dist/components/result.js +0 -68
  229. package/dist/events/instrument-ready.js +0 -24
  230. package/dist/events/purchase-complete.js +0 -24
  231. package/dist/styles/base-styles.js +0 -793
  232. package/dist/styles/flat-theme-object.js +0 -23
  233. package/dist/styles/framepay.js +0 -38
  234. package/dist/styles/main.js +0 -29
  235. package/dist/styles/style-variables.js +0 -44
  236. package/dist/utils/camel-case.js +0 -10
  237. package/dist/utils/kebab-case.js +0 -10
  238. package/dist/utils/un-kebab-case.js +0 -10
  239. package/src/components/confirmation.js +0 -81
  240. package/src/components/form/__snapshots__/form.spec.js.snap +0 -43
  241. package/src/components/form/form.js +0 -117
  242. package/src/components/form/form.spec.js +0 -109
  243. package/src/components/form/get-payment-methods.js +0 -32
  244. package/src/components/form/method-selector.js +0 -47
  245. package/src/components/form/mount-express-payment-methods.js +0 -84
  246. package/src/components/form/process-digital-wallet-options.js +0 -11
  247. package/src/components/form/zoid-helpers.js +0 -117
  248. package/src/components/result.js +0 -50
  249. package/src/components/summary.spec.js +0 -106
  250. package/src/events/instrument-ready.js +0 -11
  251. package/src/events/purchase-complete.js +0 -11
  252. package/src/styles/base-styles.js +0 -784
  253. package/src/styles/flat-theme-object.js +0 -12
  254. package/src/styles/framepay.js +0 -30
  255. package/src/styles/main.js +0 -17
  256. package/src/styles/payment-card.js +0 -18
  257. package/src/styles/shade-tint-values-helper.js +0 -13
  258. package/src/styles/style-variables.js +0 -34
  259. package/src/utils/camel-case.js +0 -3
  260. package/src/utils/kebab-case.js +0 -3
  261. package/src/utils/un-kebab-case.js +0 -3
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.Initialize = Initialize;
6
+ exports.initialize = initialize;
7
7
 
8
8
  var _storefront = _interopRequireDefault(require("../storefront"));
9
9
 
@@ -41,10 +41,19 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
41
41
  */
42
42
 
43
43
  /**
44
- * Initialize library with configurations.
44
+ * @typedef {Object} InitializeParams
45
+ * @param {Object} state - The global state.
45
46
  * @param {Configs} configs - The configurations that are to be passed to the library for use.
46
47
  */
47
- function Initialize(configs = {}) {
48
+
49
+ /**
50
+ * Initialize library with configurations.
51
+ * @param {InitializeParams} params
52
+ */
53
+ function initialize({
54
+ state,
55
+ configs
56
+ }) {
48
57
  const {
49
58
  organizationId,
50
59
  publishableKey,
@@ -53,33 +62,28 @@ function Initialize(configs = {}) {
53
62
  i18n,
54
63
  theme,
55
64
  css,
56
- _dev = {
57
- liveUrl: null,
58
- sandboxUrl: null
59
- }
65
+ _dev = null
60
66
  } = configs;
61
- this.configs = {
67
+ state.configs = {
62
68
  organizationId,
63
69
  publishableKey,
64
70
  websiteId,
65
71
  apiMode,
66
72
  i18n,
67
73
  theme,
68
- css,
69
- _dev
74
+ css
70
75
  };
71
76
  const storefront = {
72
- publishableKey: this.configs.publishableKey,
73
- orgnizationId: this.configs.orgnizationId,
74
- mode: this.configs.apiMode
77
+ publishableKey: state.configs.publishableKey,
78
+ orgnizationId: state.configs.orgnizationId,
79
+ mode: state.configs.apiMode || 'live'
75
80
  };
76
81
 
77
- if (_dev.liveUrl || _dev.sandboxUrl) {
78
- storefront.liveUrl = _dev.liveUrl;
79
- storefront.sandboxUrl = _dev.sandboxUrl;
82
+ if (_dev) {
83
+ state.configs._dev = _dev;
84
+ storefront.liveUrl = _dev.liveUrl || 'https://api.local.rebilly.dev';
85
+ storefront.sandboxUrl = _dev.sandboxUrl || 'https://api-sandbox.local.rebilly.dev';
80
86
  }
81
87
 
82
- this.storefront = (0, _storefront.default)(storefront);
83
- }
84
-
85
- ;
88
+ state.storefront = (0, _storefront.default)(storefront);
89
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _rebillyInstrumentsMock = require("tests/mocks/rebilly-instruments-mock");
3
+ var _rebillyInstrumentsMock = require("../../tests/mocks/rebilly-instruments-mock");
4
4
 
5
5
  describe('RebillyInstruments instance', () => {
6
6
  it('should should set configs', () => {
@@ -15,11 +15,11 @@ describe('RebillyInstruments instance', () => {
15
15
  }
16
16
  };
17
17
  const rebillyInstruments = (0, _rebillyInstrumentsMock.MockRebillyInstruments)(testConfigs);
18
- expect(rebillyInstruments.configs).toEqual(testConfigs);
18
+ expect(rebillyInstruments.state.configs).toEqual(testConfigs);
19
19
  });
20
20
  it('should setup api instance', () => {
21
21
  const rebillyInstruments = (0, _rebillyInstrumentsMock.MockRebillyInstruments)();
22
- expect(rebillyInstruments.storefront).toHaveProperty('setPublishableKey');
22
+ expect(rebillyInstruments.state.storefront).toHaveProperty('setPublishableKey');
23
23
  });
24
24
  it('should have the right developer settings', () => {
25
25
  const devOptions = {
@@ -29,6 +29,6 @@ describe('RebillyInstruments instance', () => {
29
29
  }
30
30
  };
31
31
  const rebillyInstruments = (0, _rebillyInstrumentsMock.MockRebillyInstruments)(devOptions);
32
- expect(rebillyInstruments.configs._dev).toEqual(devOptions._dev);
32
+ expect(rebillyInstruments.state.configs._dev).toEqual(devOptions._dev);
33
33
  });
34
34
  });
@@ -3,24 +3,39 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.FetchSummaryData = FetchSummaryData;
6
+ exports.fetchSummaryData = fetchSummaryData;
7
7
 
8
- async function FetchSummaryData({
9
- riskMetadata,
8
+ var _plans = require("../../storefront/plans");
9
+
10
+ var _products = require("../../storefront/products");
11
+
12
+ var _readyToPay = require("../../storefront/ready-to-pay");
13
+
14
+ var _summary = require("../../storefront/summary");
15
+
16
+ async function fetchSummaryData({
17
+ state = null,
18
+ riskMetadata = null,
10
19
  summaryPayload = null
11
- } = {}) {
20
+ }) {
12
21
  if (!riskMetadata) {
13
- throw new Error('riskMetadata required for FetchSummaryData');
22
+ throw new Error('riskMetadata is required for FetchSummaryData');
14
23
  }
15
24
 
16
- const [readyToPay, summary] = await Promise.all([this._fetchReadyToPay(riskMetadata), this._fetchSummary({
17
- data: summaryPayload
25
+ const [readyToPay, summary] = await Promise.all([(0, _readyToPay.fetchReadyToPay)({
26
+ riskMetadata,
27
+ state
28
+ }), (0, _summary.fetchSummary)({
29
+ data: summaryPayload,
30
+ state
18
31
  })]);
19
- const plans = await this._fetchPlans({
20
- data: summary
32
+ const plans = await (0, _plans.fetchPlans)({
33
+ data: summary,
34
+ state
21
35
  });
22
- const products = await this._fetchProducts({
23
- data: plans
36
+ const products = await (0, _products.fetchProducts)({
37
+ data: plans,
38
+ state
24
39
  });
25
40
  return {
26
41
  readyToPay,
@@ -2,31 +2,27 @@
2
2
 
3
3
  var _fetchSummaryData = require("./fetch-summary-data");
4
4
 
5
- describe('Fetch Summary Data function helper', () => {
5
+ describe.skip('Fetch Summary Data function helper', () => {
6
6
  class TestInstance {
7
7
  constructor() {
8
- this._fetchReadyToPay = jest.fn();
8
+ this.storefront = jest.fn();
9
+ this.configs = jest.fn();
10
+ this.options = jest.fn();
9
11
  this._fetchSummary = jest.fn(() => {
10
12
  return new Promise(resolve => resolve({}));
11
13
  });
12
- this._fetchPlans = jest.fn(() => {
13
- return new Promise(resolve => resolve([{}]));
14
- });
15
14
  this._fetchProducts = jest.fn();
16
15
  }
17
16
 
18
- FetchSummaryData() {
19
- return _fetchSummaryData.FetchSummaryData.apply(this, arguments);
20
- }
21
-
22
17
  }
23
18
 
24
- it('should fetch all the data', async () => {
19
+ it.skip('should fetch all the data', async () => {
25
20
  const instance = new TestInstance();
26
- await instance.FetchSummaryData({
27
- riskMetadata: {}
21
+ await (0, _fetchSummaryData.fetchSummaryData)({
22
+ riskMetadata: {},
23
+ state: instance
28
24
  });
29
- expect(instance._fetchReadyToPay).toBeCalledTimes(1);
25
+ expect(fetchReadyToPay).toBeCalledTimes(1);
30
26
  expect(instance._fetchSummary).toBeCalledTimes(1);
31
27
  expect(instance._fetchPlans).toBeCalledTimes(1);
32
28
  expect(instance._fetchProducts).toBeCalledTimes(1);
@@ -34,12 +30,15 @@ describe('Fetch Summary Data function helper', () => {
34
30
  it('should pass riskMetadata to ready to pay', async () => {
35
31
  const testRiskMetadata = {};
36
32
  const instance = new TestInstance();
37
- await instance.FetchSummaryData({
38
- riskMetadata: testRiskMetadata
33
+ await (0, _fetchSummaryData.fetchSummaryData)({
34
+ riskMetadata: testRiskMetadata,
35
+ state: instance
39
36
  });
40
37
  expect(instance._fetchReadyToPay).toBeCalledWith(testRiskMetadata);
41
38
  expect(async () => {
42
- await instance.fetchSummayData();
39
+ await (0, _fetchSummaryData.fetchSummaryData)({
40
+ state: instance
41
+ });
43
42
  }).rejects.toEqual(new Error('riskMetadata is required for FetchSummaryData'));
44
43
  });
45
44
  });
@@ -3,20 +3,30 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.Mount = Mount;
6
+ exports.mount = mount;
7
7
 
8
8
  var _riskDataCollector = require("@rebilly/risk-data-collector");
9
9
 
10
10
  var _lodash = _interopRequireDefault(require("lodash.merge"));
11
11
 
12
- var _main = require("../../styles/main");
12
+ var _summary = require("../../views/summary");
13
+
14
+ var _methodSelector = require("../../views/method-selector");
15
+
16
+ var _style = require("../../style");
13
17
 
14
18
  var _utils = require("../../utils");
15
19
 
16
20
  var _fetchSummaryData = require("./fetch-summary-data");
17
21
 
22
+ var _show = require("../show");
23
+
24
+ var _on = require("../on");
25
+
18
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
27
 
28
+ /* eslint-disable max-len */
29
+
20
30
  /**
21
31
  * @typedef {object} Item
22
32
  * @property {string} planId - The Rebilly id of the plan.
@@ -25,38 +35,42 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
25
35
  */
26
36
 
27
37
  /**
28
- * @typedef {object} Intent
29
- * @property {"purchase" | "vault"} mode - Which mode the mount is usings. Default "purchase".
30
- * @property {Array.<Item>} items - Which plans the customer is purchasing.
31
- * @property {string} customerId - Which customer is associated with the instrument.
32
- * @property {string} countryCode - The country code for the transaction
33
- */
38
+ * @typedef {object} Intent
39
+ * @property {"purchase" | "vault"} mode - Which mode the mount is usings. Default "purchase".
40
+ * @property {Array.<Item>} items - Which plans the customer is purchasing.
41
+ * @property {string} customerId - Which customer is associated with the instrument.
42
+ * @property {string} countryCode - The country code for the transaction
43
+ */
34
44
 
35
45
  /**
36
- * @typedef {GooglePayDisplayOptions} GooglePay
37
- * @param {"back" | "white"} buttonColor - default "black". Color of google pay button
38
- * @param {"short" | "long"} buttonType - default "short". The length of the button
39
- * @param {string} buttonHeight - The value and units of the button to match other payment buttons
40
- * <br>example: "44px", "1rem" etc.
41
- */
46
+ * @typedef {GooglePayDisplayOptions} GooglePay
47
+ * @param {"back" | "white"} buttonColor - default "black". Color of google pay button
48
+ * @param {"short" | "long"} buttonType - default "short". The length of the button
49
+ * @param {string} buttonHeight - The value and units of the button to match other payment buttons
50
+ * <br>example: "44px", "1rem" etc.
51
+ */
42
52
 
43
53
  /**
44
- * @typedef {GooglePayMerchantConfig} GooglePay
45
- * @param {string} merchantName - todo...
46
- * @param {string} merchantOrigin - todo...
47
- */
54
+ * @typedef {object} GooglePay
55
+ * @param {GooglePayDisplayOptions} displayOptions - display options for google pay instrument
56
+ */
48
57
 
49
58
  /**
50
- * @typedef {object} GooglePay
51
- * @param {GooglePayDisplayOptions} displayOptions - display options for google pay ionstrument
52
- * @param {GooglePayMerchantConfig} merchantConfig - merchant configurations for google pay ionstrument
53
- */
59
+ * @typedef {object} PaymentCard
60
+ * @param {boolean} popup - default: false. Show method as a button with a form popup
61
+ * <br>Otherwise the form will be mounted inline.
62
+ */
54
63
 
55
64
  /**
56
- * @typedef {object} PaymentCard
57
- * @param {boolean} popup - default: false. Show method as a button with a form popup
58
- * <br>Otherwise the form will be mounted inline.
59
- */
65
+ * @typedef {object} Address
66
+ * @param {string} name - default: default. One of default, combined, or stacked.
67
+ * @param {string} region - default: default. One of default, split, or stacked.
68
+ * @param {Array.<"organization" | "phoneNumber">} show. Show extra fields listed.
69
+ * @param {Array.<"address" | "address2" | "email | "country" | "region" | "postalCode"">} hide. Hide the listed fields.
70
+ * @param {Array.<"organization" | "address" | "address2" | "email" | "phoneNumber" | "country" | "region" | "postalCode">} require.
71
+ * <br>If the field name is included, enforce the data for those inputs to be included.
72
+ * <br>First name and last name are always required. Country is always required if the products require shipping.
73
+ */
60
74
 
61
75
  /**
62
76
  * @typedef {object} PaymentInstruments
@@ -64,17 +78,18 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
64
78
  * <br>inline pill buttons, or list of full width button.
65
79
  * @param {PaymentCard} paymentCard - settings for payment card instruments
66
80
  * @param {GooglePay} googlePay - settings for google pay instruments
81
+ * @param {Address} address - customization for address components for all payment instruments.
67
82
  */
68
83
 
69
84
  /**
70
- * @typedef {object} Features
71
- * @param {boolean} autoConfirmation - default: true. Will mount the confirmation screen after `instrument-ready`
72
- * <br>event is triggered. Will need to trigger purchase manually if set to false.
73
- * <vr>Can use RebillyInstruments.show('confirmation', options) to mount defautl component
74
- * @param {boolean} autoResult - default: true. Show results of transaction after `purchase-complete` event is triggered
75
- * <br>Will need to handle purchase result manually if set to false.
76
- * <br>Can use RebillyInstruments.show('result', options) to display default component
77
- */
85
+ * @typedef {object} Features
86
+ * @param {boolean} autoConfirmation - default: true. Will mount the confirmation screen after `instrument-ready`
87
+ * <br>event is triggered. Will need to trigger purchase manually if set to false.
88
+ * <br>Can use RebillyInstruments.show('confirmation', options) to mount defautl component
89
+ * @param {boolean} autoResult - default: true. Show results of transaction after `purchase-completed` event is triggered
90
+ * <br>Will need to handle purchase result manually if set to false.
91
+ * <br>Can use RebillyInstruments.show('result', options) to display default component
92
+ */
78
93
 
79
94
  /**
80
95
  * @typedef {object} Options
@@ -86,30 +101,37 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
86
101
 
87
102
  /**
88
103
  * Mount library with configurations.
89
- * @param {string | HTMLElement} form - The CSS class or HTML element were the form will be mounted.
90
- * @param {string | HTMLElement} summary - The CSS class or HTML element were the summary will be mounted.
91
- * @param {Options} options - The configurations that are to be passed to the library for use.
104
+ * @typedef {object} MountParams
105
+ * @property {Object} state - Global state
106
+ * @property {string | HTMLElement} form - The CSS class or HTML element were the form will be mounted.
107
+ * @property {string | HTMLElement} form - The CSS class or HTML element were the form will be mounted.
108
+ * @property {string | HTMLElement} summary - The CSS class or HTML element were the summary will be mounted.
109
+ * @property {Options} options - The configurations that are to be passed to the library for use.
110
+ */
111
+
112
+ /**
113
+ * Mount library with configurations.
114
+ * @param {MountParams} params
92
115
  */
93
- async function Mount({
116
+ async function mount({
117
+ state,
94
118
  form = '.rebilly-instruments',
95
119
  summary = '.rebilly-instruments-summary',
96
- _dev = {
97
- framePayScriptLink: null,
98
- framePayStyleLink: null,
99
- paymentMethodsUrl: null
100
- },
101
- options = {}
102
- } = {}) {
103
- var _this$configs, _this$configs3;
104
-
105
- this.form = form;
106
- this.summary = summary;
120
+ options = {},
121
+ _dev = null
122
+ }) {
123
+ var _state$configs, _state$configs3;
124
+
125
+ state.form = form;
126
+ state.summary = summary;
127
+ state.mainStyle = null;
128
+ state._dev = _dev;
107
129
  const framePayUrls = {
108
- script: _dev.framePayScriptLink || 'https://framepay.rebilly.com/rebilly.js',
109
- style: _dev.framePayStyleLink || 'https://framepay.rebilly.com/rebilly.css'
130
+ script: _dev ? _dev.framePayScriptLink || 'https://framepay.rebilly.com/rebilly.js' : 'https://framepay.rebilly.com/rebilly.js',
131
+ style: _dev ? _dev.framePayStyleLink || 'https://framepay.rebilly.com/rebilly.css' : 'https://framepay.rebilly.com/rebilly.css'
110
132
  };
111
133
  const _computed = {
112
- paymentMethodsUrl: _dev.paymentMethodsUrl || 'https://forms.secure-payments.app'
134
+ paymentMethodsUrl: _dev ? _dev.paymentMethodsUrl || 'https://forms.local.rebilly.dev:3000' : 'https://forms.secure-payments.app'
113
135
  };
114
136
  const OPTIONS_DEFAULTS = {
115
137
  intent: {
@@ -117,6 +139,13 @@ async function Mount({
117
139
  },
118
140
  locale: 'auto',
119
141
  paymentInstruments: {
142
+ address: {
143
+ name: 'default',
144
+ region: 'default',
145
+ hide: [],
146
+ show: [],
147
+ require: []
148
+ },
120
149
  compactExpressInstruments: true,
121
150
  googlePay: {
122
151
  displayOptions: {
@@ -125,6 +154,13 @@ async function Mount({
125
154
  buttonHeight: '44px'
126
155
  }
127
156
  },
157
+ applePay: {
158
+ displayOptions: {
159
+ buttonColor: 'black',
160
+ buttonType: 'plain',
161
+ buttonHeight: '44px'
162
+ }
163
+ },
128
164
  paymentCard: {
129
165
  popup: false
130
166
  }
@@ -133,67 +169,72 @@ async function Mount({
133
169
  autoConfirmation: true,
134
170
  autoResult: true
135
171
  }
136
- }; // TODO: Only add _dev in dev enviroment
137
-
138
- this.options = (0, _lodash.default)(OPTIONS_DEFAULTS, { ...options,
139
- _dev,
172
+ };
173
+ const combinedOptions = { ...options,
140
174
  _computed
141
- });
142
- this.form = (0, _utils.processPropertyAsDOMElement)({
143
- prop: this.form,
175
+ };
176
+
177
+ if (_dev) {
178
+ combinedOptions._dev = _dev;
179
+ }
180
+
181
+ state.options = (0, _lodash.default)(OPTIONS_DEFAULTS, combinedOptions);
182
+ state.form = (0, _utils.processPropertyAsDOMElement)({
183
+ prop: state.form,
144
184
  propName: 'form'
145
185
  });
146
- this.summary = (0, _utils.processPropertyAsDOMElement)({
147
- prop: this.summary,
186
+ state.summary = (0, _utils.processPropertyAsDOMElement)({
187
+ prop: state.summary,
148
188
  propName: 'summary',
149
189
  isRequired: false
150
190
  }); // Setup loader
151
191
 
152
- this.loader.addDOMElement({
153
- el: this.form
192
+ state.loader.addDOMElement({
193
+ el: state.form
154
194
  });
155
- this.loader.addDOMElement({
195
+ state.loader.addDOMElement({
156
196
  section: 'summary',
157
- el: this.summary
197
+ el: state.summary
158
198
  }); // Adds base stylesheet
159
199
 
200
+ state.mainStyle = await (0, _style.mainStyle)(((_state$configs = state.configs) === null || _state$configs === void 0 ? void 0 : _state$configs.theme) || {});
160
201
  (0, _utils.addDOMElement)({
161
202
  element: 'style',
162
203
  attributes: {
163
204
  type: 'text/css'
164
205
  },
165
- content: (0, _main.MAIN_STYLE)(((_this$configs = this.configs) === null || _this$configs === void 0 ? void 0 : _this$configs.theme) || {}),
206
+ content: state.mainStyle,
166
207
  target: 'head'
167
208
  }); // Adds configs CSS to override any styles
168
209
 
169
- if (this.configs.css) {
210
+ if (state.configs.css) {
170
211
  (0, _utils.addDOMElement)({
171
212
  element: 'style',
172
213
  attributes: {
173
214
  type: 'text/css'
174
215
  },
175
- content: this.configs.css,
216
+ content: state.configs.css,
176
217
  target: 'head'
177
218
  });
178
219
  } // Adds FramePay
179
220
 
180
221
 
181
- if (!document.querySelectorAll(`[framepay*="script"]`).length) {
222
+ if (!document.querySelectorAll('[framepay*="script"]').length) {
182
223
  (0, _utils.addDOMElement)({
183
224
  element: 'script',
184
225
  attributes: {
185
- 'framepay': 'script',
226
+ framepay: 'script',
186
227
  src: framePayUrls.script
187
228
  },
188
229
  target: 'head'
189
230
  });
190
231
  }
191
232
 
192
- if (!document.querySelectorAll(`[framepay*="stylesheet"]`).length) {
233
+ if (!document.querySelectorAll('[framepay*="stylesheet"]').length) {
193
234
  (0, _utils.addDOMElement)({
194
235
  element: 'link',
195
236
  attributes: {
196
- 'framepay': 'stylesheet',
237
+ framepay: 'stylesheet',
197
238
  href: framePayUrls.style,
198
239
  rel: 'stylesheet'
199
240
  },
@@ -202,83 +243,104 @@ async function Mount({
202
243
  }
203
244
 
204
245
  try {
205
- var _riskMetadata$browser, _this$configs2;
246
+ var _riskMetadata$browser, _state$configs2;
206
247
 
207
- this.loader.startLoading({
248
+ state.loader.startLoading({
208
249
  section: 'summary',
209
250
  id: 'initSummary'
210
251
  });
211
- this.loader.startLoading({
252
+ state.loader.startLoading({
212
253
  id: 'initForm'
213
254
  });
214
255
  const {
215
256
  riskMetadata
216
257
  } = await (0, _riskDataCollector.collectData)();
217
258
 
218
- if (this.options.locale === 'auto' && riskMetadata !== null && riskMetadata !== void 0 && (_riskMetadata$browser = riskMetadata.browserData) !== null && _riskMetadata$browser !== void 0 && _riskMetadata$browser.language) {
259
+ if (state.options.locale === 'auto' && riskMetadata !== null && riskMetadata !== void 0 && (_riskMetadata$browser = riskMetadata.browserData) !== null && _riskMetadata$browser !== void 0 && _riskMetadata$browser.language) {
219
260
  const {
220
261
  browserData: {
221
262
  language
222
263
  }
223
264
  } = riskMetadata;
224
- this.options.locale = language;
265
+ state.options.locale = language;
225
266
  }
226
267
 
227
- const i18n = ((_this$configs2 = this.configs) === null || _this$configs2 === void 0 ? void 0 : _this$configs2.i18n) || {};
228
- this.translate.init(this.options.locale, i18n);
268
+ const i18n = ((_state$configs2 = state.configs) === null || _state$configs2 === void 0 ? void 0 : _state$configs2.i18n) || {};
269
+ state.translate.init(state.options.locale, i18n);
229
270
  const {
230
271
  readyToPay,
231
272
  summary: summaryData,
232
273
  plans,
233
274
  products
234
- } = await _fetchSummaryData.FetchSummaryData.call(this, {
235
- riskMetadata
275
+ } = await (0, _fetchSummaryData.fetchSummaryData)({
276
+ riskMetadata,
277
+ state
236
278
  });
279
+ state.hasMounted = true;
237
280
 
238
- if (this.form) {
239
- this.formOptions = {
281
+ if (state.form) {
282
+ const formOptions = {
240
283
  summary: summaryData,
284
+ mainStyle: state.mainStyle,
241
285
  readyToPay,
242
286
  plans,
243
287
  products
244
288
  };
245
-
246
- this._mountForm(this.formOptions);
289
+ (0, _methodSelector.mountMethodSelector)({
290
+ state,
291
+ formOptions
292
+ });
247
293
  }
248
294
 
249
- if (this.summary) {
250
- this.summaryOptions = {
295
+ if (state.summary) {
296
+ const summaryOptions = {
251
297
  summary: summaryData,
252
298
  readyToPay,
253
299
  plans,
254
300
  products
255
301
  };
256
-
257
- this._mountSummary(this.summaryOptions);
302
+ (0, _summary.mountSummary)({
303
+ state,
304
+ summaryOptions
305
+ });
258
306
  }
259
307
  } catch (error) {
260
308
  throw error;
261
309
  }
262
310
 
263
- const i18n = ((_this$configs3 = this.configs) === null || _this$configs3 === void 0 ? void 0 : _this$configs3.i18n) || {};
264
- this.translate.init(this.options.locale, i18n);
265
- this.translate.translateItems();
266
-
267
- if (this.options.features.autoConfirmation) {
268
- this.on('instrument-ready', instrument => {
269
- this.show('confirmation', {
270
- instrument
271
- });
311
+ const i18n = ((_state$configs3 = state.configs) === null || _state$configs3 === void 0 ? void 0 : _state$configs3.i18n) || {};
312
+ state.translate.init(state.options.locale, i18n);
313
+ state.translate.translateItems();
314
+
315
+ if (state.options.features.autoConfirmation) {
316
+ (0, _on.on)({
317
+ eventName: 'instrument-ready',
318
+ callback: instrument => {
319
+ (0, _show.show)({
320
+ componentName: 'confirmation',
321
+ payload: {
322
+ instrument,
323
+ mainStyle: state.mainStyle
324
+ },
325
+ state
326
+ });
327
+ }
272
328
  });
273
329
  }
274
330
 
275
- if (this.options.features.autoResult) {
276
- this.on('purchase-complete', purchase => {
277
- this.show('result', {
278
- purchase
279
- });
331
+ if (state.options.features.autoResult) {
332
+ (0, _on.on)({
333
+ eventName: 'purchase-completed',
334
+ callback: purchase => {
335
+ (0, _show.show)({
336
+ componentName: 'result',
337
+ payload: {
338
+ purchase,
339
+ mainStyle: state.mainStyle
340
+ },
341
+ state
342
+ });
343
+ }
280
344
  });
281
345
  }
282
- }
283
-
284
- ;
346
+ }