@justifi/webcomponents 0.0.11 → 0.0.13

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 (35) hide show
  1. package/dist/cjs/{index-68222998.js → index-4f753ffd.js} +32 -1
  2. package/dist/cjs/justifi-bank-account-form_4.cjs.entry.js +74 -60
  3. package/dist/cjs/loader.cjs.js +4 -3
  4. package/dist/cjs/webcomponents.cjs.js +7 -3
  5. package/dist/collection/collection-manifest.json +2 -2
  6. package/dist/collection/components/bank-account-form/bank-account-form.js +43 -45
  7. package/dist/collection/components/card-form/card-form.js +43 -55
  8. package/dist/collection/components/payment-method-form/message-event-types.js +14 -0
  9. package/dist/collection/components/payment-method-form/payment-method-form.js +76 -72
  10. package/dist/components/index.d.ts +9 -0
  11. package/dist/components/index.js +1 -1
  12. package/dist/components/justifi-bank-account-form.js +16 -13
  13. package/dist/components/justifi-card-form.js +16 -16
  14. package/dist/components/payment-method-form.js +54 -38
  15. package/dist/esm/{index-e279d85e.js → index-3d88d85c.js} +32 -2
  16. package/dist/esm/justifi-bank-account-form_4.entry.js +74 -60
  17. package/dist/esm/loader.js +4 -3
  18. package/dist/esm/polyfills/css-shim.js +1 -1
  19. package/dist/esm/webcomponents.js +4 -3
  20. package/dist/types/api/Api.d.ts +1 -1
  21. package/dist/types/api/Payment.d.ts +1 -1
  22. package/dist/types/components/bank-account-form/bank-account-form.d.ts +10 -5
  23. package/dist/types/components/card-form/card-form.d.ts +10 -5
  24. package/dist/types/components/payment-method-form/message-event-types.d.ts +14 -0
  25. package/dist/types/components/payment-method-form/payment-method-form.d.ts +6 -4
  26. package/dist/types/components.d.ts +13 -12
  27. package/dist/types/stencil-public-runtime.d.ts +48 -3
  28. package/dist/webcomponents/p-338453e1.entry.js +1 -0
  29. package/dist/webcomponents/p-de108437.js +2 -0
  30. package/dist/webcomponents/webcomponents.esm.js +1 -1
  31. package/loader/index.d.ts +9 -0
  32. package/package.json +1 -1
  33. package/dist/collection/components/card-form/card-form.css +0 -3
  34. package/dist/webcomponents/p-146348d6.js +0 -2
  35. package/dist/webcomponents/p-a967d55b.entry.js +0 -1
@@ -1,52 +1,45 @@
1
1
  import { h } from '@stencil/core';
2
2
  export class CardForm {
3
3
  constructor() {
4
- this.iframeOrigin = undefined;
4
+ this.validationStrategy = undefined;
5
5
  }
6
6
  readyHandler(event) {
7
7
  this.cardFormReady.emit(event);
8
8
  }
9
- changeHandler(event) {
10
- this.cardFormChange.emit(event);
11
- }
12
- blurHandler(event) {
13
- this.cardFormBlur.emit(event);
14
- }
15
9
  tokenizeHandler(event) {
16
10
  this.cardFormTokenize.emit(event);
17
11
  }
12
+ validateHandler(event) {
13
+ this.cardFormValidate.emit(event);
14
+ }
18
15
  async tokenize(...args) {
19
16
  if (!this.childRef) {
20
17
  throw new Error('Cannot call tokenize');
21
18
  }
22
19
  return this.childRef.tokenize(...args);
23
20
  }
21
+ async validate() {
22
+ if (!this.childRef) {
23
+ throw new Error('Cannot call validate');
24
+ }
25
+ return this.childRef.validate();
26
+ }
24
27
  render() {
25
28
  return (h("justifi-payment-method-form", { ref: el => {
26
29
  if (el) {
27
30
  this.childRef = el;
28
31
  }
29
- }, "iframe-origin": this.iframeOrigin || 'https://js.justifi.ai/card', "payment-method-form-ready": this.cardFormReady, "payment-method-form-change": this.cardFormChange, "payment-method-form-blur": this.cardFormBlur, "payment-method-form-tokenize": this.cardFormTokenize }));
32
+ }, "payment-method-form-type": "card", "payment-method-form-ready": this.cardFormReady, "payment-method-form-tokenize": this.cardFormTokenize, "payment-method-form-validation-strategy": this.validationStrategy || 'onSubmit' }));
30
33
  }
31
34
  static get is() { return "justifi-card-form"; }
32
- static get originalStyleUrls() {
33
- return {
34
- "$": ["card-form.css"]
35
- };
36
- }
37
- static get styleUrls() {
38
- return {
39
- "$": ["card-form.css"]
40
- };
41
- }
42
35
  static get properties() {
43
36
  return {
44
- "iframeOrigin": {
37
+ "validationStrategy": {
45
38
  "type": "string",
46
39
  "mutable": false,
47
40
  "complexType": {
48
- "original": "string",
49
- "resolved": "string",
41
+ "original": "'onChange' | 'onBlur' | 'onSubmit' | 'onTouched' | 'all'",
42
+ "resolved": "\"all\" | \"onBlur\" | \"onChange\" | \"onSubmit\" | \"onTouched\"",
50
43
  "references": {}
51
44
  },
52
45
  "required": false,
@@ -55,7 +48,7 @@ export class CardForm {
55
48
  "tags": [],
56
49
  "text": ""
57
50
  },
58
- "attribute": "iframe-origin",
51
+ "attribute": "validation-strategy",
59
52
  "reflect": false
60
53
  }
61
54
  };
@@ -77,23 +70,8 @@ export class CardForm {
77
70
  "references": {}
78
71
  }
79
72
  }, {
80
- "method": "cardFormChange",
81
- "name": "cardFormChange",
82
- "bubbles": true,
83
- "cancelable": true,
84
- "composed": true,
85
- "docs": {
86
- "tags": [],
87
- "text": ""
88
- },
89
- "complexType": {
90
- "original": "any",
91
- "resolved": "any",
92
- "references": {}
93
- }
94
- }, {
95
- "method": "cardFormBlur",
96
- "name": "cardFormBlur",
73
+ "method": "cardFormTokenize",
74
+ "name": "cardFormTokenize",
97
75
  "bubbles": true,
98
76
  "cancelable": true,
99
77
  "composed": true,
@@ -102,13 +80,13 @@ export class CardForm {
102
80
  "text": ""
103
81
  },
104
82
  "complexType": {
105
- "original": "any",
106
- "resolved": "any",
83
+ "original": "{ data: any }",
84
+ "resolved": "{ data: any; }",
107
85
  "references": {}
108
86
  }
109
87
  }, {
110
- "method": "cardFormTokenize",
111
- "name": "cardFormTokenize",
88
+ "method": "cardFormValidate",
89
+ "name": "cardFormValidate",
112
90
  "bubbles": true,
113
91
  "cancelable": true,
114
92
  "composed": true,
@@ -117,8 +95,8 @@ export class CardForm {
117
95
  "text": ""
118
96
  },
119
97
  "complexType": {
120
- "original": "{ data: any }",
121
- "resolved": "{ data: any; }",
98
+ "original": "{ data: { isValid: boolean } }",
99
+ "resolved": "{ data: { isValid: boolean; }; }",
122
100
  "references": {}
123
101
  }
124
102
  }];
@@ -149,6 +127,22 @@ export class CardForm {
149
127
  "text": "",
150
128
  "tags": []
151
129
  }
130
+ },
131
+ "validate": {
132
+ "complexType": {
133
+ "signature": "() => Promise<any>",
134
+ "parameters": [],
135
+ "references": {
136
+ "Promise": {
137
+ "location": "global"
138
+ }
139
+ },
140
+ "return": "Promise<any>"
141
+ },
142
+ "docs": {
143
+ "text": "",
144
+ "tags": []
145
+ }
152
146
  }
153
147
  };
154
148
  }
@@ -160,20 +154,14 @@ export class CardForm {
160
154
  "capture": false,
161
155
  "passive": false
162
156
  }, {
163
- "name": "paymentMethodFormChange",
164
- "method": "changeHandler",
165
- "target": undefined,
166
- "capture": false,
167
- "passive": false
168
- }, {
169
- "name": "paymentMethodFormBlur",
170
- "method": "blurHandler",
157
+ "name": "paymentMethodFormTokenize",
158
+ "method": "tokenizeHandler",
171
159
  "target": undefined,
172
160
  "capture": false,
173
161
  "passive": false
174
162
  }, {
175
- "name": "paymentMethodFormTokenize",
176
- "method": "tokenizeHandler",
163
+ "name": "paymentMethodFormValidate",
164
+ "method": "validateHandler",
177
165
  "target": undefined,
178
166
  "capture": false,
179
167
  "passive": false
@@ -0,0 +1,14 @@
1
+ export const MessageEventType = {
2
+ card: {
3
+ ready: 'justifi.card.ready',
4
+ tokenize: 'justifi.card.tokenize',
5
+ validate: 'justifi.card.validate',
6
+ resize: 'justifi.card.resize',
7
+ },
8
+ bankAccount: {
9
+ ready: 'justifi.bankAccount.ready',
10
+ tokenize: 'justifi.bankAccount.tokenize',
11
+ validate: 'justifi.bankAccount.validate',
12
+ resize: 'justifi.bankAccount.resize',
13
+ }
14
+ };
@@ -1,14 +1,10 @@
1
1
  import { Host, h } from '@stencil/core';
2
- var DispatchedEventTypes;
3
- (function (DispatchedEventTypes) {
4
- DispatchedEventTypes["blur"] = "blur";
5
- DispatchedEventTypes["change"] = "change";
6
- DispatchedEventTypes["ready"] = "ready";
7
- DispatchedEventTypes["tokenize"] = "tokenize";
8
- })(DispatchedEventTypes || (DispatchedEventTypes = {}));
2
+ import { MessageEventType } from './message-event-types';
9
3
  export class PaymentMethodForm {
10
4
  constructor() {
11
- this.iframeOrigin = undefined;
5
+ this.paymentMethodFormType = undefined;
6
+ this.paymentMethodFormValidationStrategy = undefined;
7
+ this.height = 55;
12
8
  }
13
9
  connectedCallback() {
14
10
  window.addEventListener('message', this.dispatchMessageEvent.bind(this));
@@ -20,45 +16,48 @@ export class PaymentMethodForm {
20
16
  const messagePayload = messageEvent.data;
21
17
  const messageType = messagePayload.eventType;
22
18
  const messageData = messagePayload.data;
23
- switch (messageType) {
24
- case DispatchedEventTypes.ready:
25
- this.paymentMethodFormReady.emit(messageData);
26
- break;
27
- case DispatchedEventTypes.change:
28
- this.paymentMethodFormChange.emit(messageData);
29
- break;
30
- case DispatchedEventTypes.blur:
31
- this.paymentMethodFormBlur.emit(messageData);
32
- break;
33
- default:
34
- break;
19
+ if (messageType === MessageEventType[this.paymentMethodFormType].ready) {
20
+ this.paymentMethodFormReady.emit(messageData);
35
21
  }
36
- }
37
- triggerTokenization(clientKey, paymentMethodMetadata, account) {
38
- if (this.iframeElement && this.iframeElement.contentWindow) {
39
- this.iframeElement.contentWindow.postMessage({
40
- eventType: DispatchedEventTypes.tokenize,
41
- clientKey: clientKey,
42
- paymentMethodMetadata: paymentMethodMetadata,
43
- account: account
44
- }, '*');
22
+ if (messageType === MessageEventType[this.paymentMethodFormType].resize) {
23
+ this.height = messageData.height;
45
24
  }
46
25
  }
47
- async tokenize(clientKey, paymentMethodMetadata, account) {
26
+ async postMessageWithResponseListener(eventType, payload) {
48
27
  return new Promise((resolve) => {
49
- const tokenizeEventListener = (event) => {
50
- if (event.data.eventType !== DispatchedEventTypes.tokenize)
28
+ const responseListener = (event) => {
29
+ if (event.data.eventType !== eventType)
51
30
  return;
52
- window.removeEventListener('message', tokenizeEventListener);
31
+ window.removeEventListener('message', responseListener);
53
32
  resolve(event.data.data);
54
33
  };
55
- window.addEventListener('message', tokenizeEventListener);
56
- this.triggerTokenization(clientKey, paymentMethodMetadata, account);
34
+ window.addEventListener('message', responseListener);
35
+ this.iframeElement.contentWindow.postMessage(Object.assign({ eventType: eventType }, payload), '*');
57
36
  });
58
37
  }
38
+ async tokenize(clientKey, paymentMethodMetadata, account) {
39
+ const eventType = MessageEventType[this.paymentMethodFormType].tokenize;
40
+ const payload = {
41
+ clientKey: clientKey,
42
+ paymentMethodMetadata: paymentMethodMetadata,
43
+ account: account
44
+ };
45
+ return this.postMessageWithResponseListener(eventType, payload);
46
+ }
47
+ ;
48
+ async validate() {
49
+ return this.postMessageWithResponseListener(MessageEventType[this.paymentMethodFormType].validate);
50
+ }
59
51
  ;
52
+ getIframeSrc() {
53
+ let iframeSrc = `https://js.justifi.ai/v2/${this.paymentMethodFormType}`;
54
+ if (this.paymentMethodFormValidationStrategy) {
55
+ iframeSrc += `?validationStrategy=${this.paymentMethodFormValidationStrategy}`;
56
+ }
57
+ return iframeSrc;
58
+ }
60
59
  render() {
61
- return (h(Host, null, h("iframe", { id: "justifi-payment-method-form", src: this.iframeOrigin, ref: (el) => this.iframeElement = el })));
60
+ return (h(Host, null, h("iframe", { id: `justifi-payment-method-form-${this.paymentMethodFormType}`, src: this.getIframeSrc(), ref: (el) => this.iframeElement = el, height: this.height })));
62
61
  }
63
62
  static get is() { return "justifi-payment-method-form"; }
64
63
  static get originalStyleUrls() {
@@ -73,12 +72,12 @@ export class PaymentMethodForm {
73
72
  }
74
73
  static get properties() {
75
74
  return {
76
- "iframeOrigin": {
75
+ "paymentMethodFormType": {
77
76
  "type": "string",
78
77
  "mutable": false,
79
78
  "complexType": {
80
- "original": "string",
81
- "resolved": "string",
79
+ "original": "'card' | 'bankAccount'",
80
+ "resolved": "\"bankAccount\" | \"card\"",
82
81
  "references": {}
83
82
  },
84
83
  "required": false,
@@ -87,11 +86,33 @@ export class PaymentMethodForm {
87
86
  "tags": [],
88
87
  "text": ""
89
88
  },
90
- "attribute": "iframe-origin",
89
+ "attribute": "payment-method-form-type",
90
+ "reflect": false
91
+ },
92
+ "paymentMethodFormValidationStrategy": {
93
+ "type": "string",
94
+ "mutable": false,
95
+ "complexType": {
96
+ "original": "'onChange' | 'onBlur' | 'onSubmit' | 'onTouched' | 'all'",
97
+ "resolved": "\"all\" | \"onBlur\" | \"onChange\" | \"onSubmit\" | \"onTouched\"",
98
+ "references": {}
99
+ },
100
+ "required": false,
101
+ "optional": false,
102
+ "docs": {
103
+ "tags": [],
104
+ "text": ""
105
+ },
106
+ "attribute": "payment-method-form-validation-strategy",
91
107
  "reflect": false
92
108
  }
93
109
  };
94
110
  }
111
+ static get states() {
112
+ return {
113
+ "height": {}
114
+ };
115
+ }
95
116
  static get events() {
96
117
  return [{
97
118
  "method": "paymentMethodFormReady",
@@ -108,36 +129,6 @@ export class PaymentMethodForm {
108
129
  "resolved": "any",
109
130
  "references": {}
110
131
  }
111
- }, {
112
- "method": "paymentMethodFormChange",
113
- "name": "paymentMethodFormChange",
114
- "bubbles": true,
115
- "cancelable": true,
116
- "composed": true,
117
- "docs": {
118
- "tags": [],
119
- "text": ""
120
- },
121
- "complexType": {
122
- "original": "any",
123
- "resolved": "any",
124
- "references": {}
125
- }
126
- }, {
127
- "method": "paymentMethodFormBlur",
128
- "name": "paymentMethodFormBlur",
129
- "bubbles": true,
130
- "cancelable": true,
131
- "composed": true,
132
- "docs": {
133
- "tags": [],
134
- "text": ""
135
- },
136
- "complexType": {
137
- "original": "any",
138
- "resolved": "any",
139
- "references": {}
140
- }
141
132
  }, {
142
133
  "method": "paymentMethodFormTokenize",
143
134
  "name": "paymentMethodFormTokenize",
@@ -173,8 +164,21 @@ export class PaymentMethodForm {
173
164
  "references": {
174
165
  "Promise": {
175
166
  "location": "global"
176
- },
177
- "MessageEvent": {
167
+ }
168
+ },
169
+ "return": "Promise<any>"
170
+ },
171
+ "docs": {
172
+ "text": "",
173
+ "tags": []
174
+ }
175
+ },
176
+ "validate": {
177
+ "complexType": {
178
+ "signature": "() => Promise<any>",
179
+ "parameters": [],
180
+ "references": {
181
+ "Promise": {
178
182
  "location": "global"
179
183
  }
180
184
  },
@@ -16,6 +16,15 @@ export { PaymentsList as JustifiPaymentsList } from '../types/components/payment
16
16
  */
17
17
  export declare const setAssetPath: (path: string) => void;
18
18
 
19
+ /**
20
+ * Used to specify a nonce value that corresponds with an application's CSP.
21
+ * When set, the nonce will be added to all dynamically created script and style tags at runtime.
22
+ * Alternatively, the nonce value can be set on a meta tag in the DOM head
23
+ * (<meta name="csp-nonce" content="{ nonce value here }" />) which
24
+ * will result in the same behavior.
25
+ */
26
+ export declare const setNonce: (nonce: string) => void
27
+
19
28
  export interface SetPlatformOptions {
20
29
  raf?: (c: FrameRequestCallback) => number;
21
30
  ael?: (el: EventTarget, eventName: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions) => void;
@@ -1,4 +1,4 @@
1
- export { setAssetPath, setPlatformOptions } from '@stencil/core/internal/client';
1
+ export { setAssetPath, setNonce, setPlatformOptions } from '@stencil/core/internal/client';
2
2
  export { JustifiBankAccountForm, defineCustomElement as defineCustomElementJustifiBankAccountForm } from './justifi-bank-account-form.js';
3
3
  export { JustifiCardForm, defineCustomElement as defineCustomElementJustifiCardForm } from './justifi-card-form.js';
4
4
  export { JustifiPaymentMethodForm, defineCustomElement as defineCustomElementJustifiPaymentMethodForm } from './justifi-payment-method-form.js';
@@ -6,40 +6,43 @@ const BankAccountForm = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
6
6
  super();
7
7
  this.__registerHost();
8
8
  this.bankAccountFormReady = createEvent(this, "bankAccountFormReady", 7);
9
- this.bankAccountFormChange = createEvent(this, "bankAccountFormChange", 7);
10
- this.bankAccountFormBlur = createEvent(this, "bankAccountFormBlur", 7);
11
9
  this.bankAccountFormTokenize = createEvent(this, "bankAccountFormTokenize", 7);
12
- this.iframeOrigin = undefined;
10
+ this.bankAccountFormValidate = createEvent(this, "bankAccountFormValidate", 7);
11
+ this.validationStrategy = undefined;
13
12
  }
14
13
  readyHandler(event) {
15
14
  this.bankAccountFormReady.emit(event);
16
15
  }
17
- changeHandler(event) {
18
- this.bankAccountFormChange.emit(event);
19
- }
20
- blurHandler(event) {
21
- this.bankAccountFormBlur.emit(event);
22
- }
23
16
  tokenizeHandler(event) {
24
17
  this.bankAccountFormTokenize.emit(event);
25
18
  }
19
+ validateHandler(event) {
20
+ this.bankAccountFormValidate.emit(event);
21
+ }
26
22
  async tokenize(...args) {
27
23
  if (!this.childRef) {
28
24
  throw new Error('Cannot call tokenize');
29
25
  }
30
26
  return this.childRef.tokenize(...args);
31
27
  }
28
+ async validate() {
29
+ if (!this.childRef) {
30
+ throw new Error('Cannot call validate');
31
+ }
32
+ return this.childRef.validate();
33
+ }
32
34
  render() {
33
35
  return (h("justifi-payment-method-form", { ref: el => {
34
36
  if (el) {
35
37
  this.childRef = el;
36
38
  }
37
- }, "iframe-origin": this.iframeOrigin || 'https://js.justifi.ai/bank-account', "payment-method-form-ready": this.bankAccountFormReady, "payment-method-form-change": this.bankAccountFormChange, "payment-method-form-blur": this.bankAccountFormBlur, "payment-method-form-tokenize": this.bankAccountFormTokenize }));
39
+ }, "payment-method-form-type": "bankAccount", "payment-method-form-ready": this.bankAccountFormReady, "payment-method-form-tokenize": this.bankAccountFormTokenize, "payment-method-form-validation-strategy": this.validationStrategy || 'onSubmit' }));
38
40
  }
39
41
  }, [0, "justifi-bank-account-form", {
40
- "iframeOrigin": [1, "iframe-origin"],
41
- "tokenize": [64]
42
- }, [[0, "paymentMethodFormReady", "readyHandler"], [0, "paymentMethodFormChange", "changeHandler"], [0, "paymentMethodFormBlur", "blurHandler"], [0, "paymentMethodFormTokenize", "tokenizeHandler"]]]);
42
+ "validationStrategy": [1, "validation-strategy"],
43
+ "tokenize": [64],
44
+ "validate": [64]
45
+ }, [[0, "paymentMethodFormReady", "readyHandler"], [0, "paymentMethodFormTokenize", "tokenizeHandler"], [0, "paymentMethodFormValidate", "validateHandler"]]]);
43
46
  function defineCustomElement$1() {
44
47
  if (typeof customElements === "undefined") {
45
48
  return;
@@ -1,48 +1,48 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
2
  import { d as defineCustomElement$2 } from './payment-method-form.js';
3
3
 
4
- const cardFormCss = "justifi-card-form iframe{height:55px}";
5
-
6
4
  const CardForm = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
7
5
  constructor() {
8
6
  super();
9
7
  this.__registerHost();
10
8
  this.cardFormReady = createEvent(this, "cardFormReady", 7);
11
- this.cardFormChange = createEvent(this, "cardFormChange", 7);
12
- this.cardFormBlur = createEvent(this, "cardFormBlur", 7);
13
9
  this.cardFormTokenize = createEvent(this, "cardFormTokenize", 7);
14
- this.iframeOrigin = undefined;
10
+ this.cardFormValidate = createEvent(this, "cardFormValidate", 7);
11
+ this.validationStrategy = undefined;
15
12
  }
16
13
  readyHandler(event) {
17
14
  this.cardFormReady.emit(event);
18
15
  }
19
- changeHandler(event) {
20
- this.cardFormChange.emit(event);
21
- }
22
- blurHandler(event) {
23
- this.cardFormBlur.emit(event);
24
- }
25
16
  tokenizeHandler(event) {
26
17
  this.cardFormTokenize.emit(event);
27
18
  }
19
+ validateHandler(event) {
20
+ this.cardFormValidate.emit(event);
21
+ }
28
22
  async tokenize(...args) {
29
23
  if (!this.childRef) {
30
24
  throw new Error('Cannot call tokenize');
31
25
  }
32
26
  return this.childRef.tokenize(...args);
33
27
  }
28
+ async validate() {
29
+ if (!this.childRef) {
30
+ throw new Error('Cannot call validate');
31
+ }
32
+ return this.childRef.validate();
33
+ }
34
34
  render() {
35
35
  return (h("justifi-payment-method-form", { ref: el => {
36
36
  if (el) {
37
37
  this.childRef = el;
38
38
  }
39
- }, "iframe-origin": this.iframeOrigin || 'https://js.justifi.ai/card', "payment-method-form-ready": this.cardFormReady, "payment-method-form-change": this.cardFormChange, "payment-method-form-blur": this.cardFormBlur, "payment-method-form-tokenize": this.cardFormTokenize }));
39
+ }, "payment-method-form-type": "card", "payment-method-form-ready": this.cardFormReady, "payment-method-form-tokenize": this.cardFormTokenize, "payment-method-form-validation-strategy": this.validationStrategy || 'onSubmit' }));
40
40
  }
41
- static get style() { return cardFormCss; }
42
41
  }, [0, "justifi-card-form", {
43
- "iframeOrigin": [1, "iframe-origin"],
44
- "tokenize": [64]
45
- }, [[0, "paymentMethodFormReady", "readyHandler"], [0, "paymentMethodFormChange", "changeHandler"], [0, "paymentMethodFormBlur", "blurHandler"], [0, "paymentMethodFormTokenize", "tokenizeHandler"]]]);
42
+ "validationStrategy": [1, "validation-strategy"],
43
+ "tokenize": [64],
44
+ "validate": [64]
45
+ }, [[0, "paymentMethodFormReady", "readyHandler"], [0, "paymentMethodFormTokenize", "tokenizeHandler"], [0, "paymentMethodFormValidate", "validateHandler"]]]);
46
46
  function defineCustomElement$1() {
47
47
  if (typeof customElements === "undefined") {
48
48
  return;
@@ -1,23 +1,31 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
2
 
3
+ const MessageEventType = {
4
+ card: {
5
+ ready: 'justifi.card.ready',
6
+ tokenize: 'justifi.card.tokenize',
7
+ validate: 'justifi.card.validate',
8
+ resize: 'justifi.card.resize',
9
+ },
10
+ bankAccount: {
11
+ ready: 'justifi.bankAccount.ready',
12
+ tokenize: 'justifi.bankAccount.tokenize',
13
+ validate: 'justifi.bankAccount.validate',
14
+ resize: 'justifi.bankAccount.resize',
15
+ }
16
+ };
17
+
3
18
  const paymentMethodFormCss = ":host{display:block}justifi-payment-method-form iframe{border:none;width:100%}";
4
19
 
5
- var DispatchedEventTypes;
6
- (function (DispatchedEventTypes) {
7
- DispatchedEventTypes["blur"] = "blur";
8
- DispatchedEventTypes["change"] = "change";
9
- DispatchedEventTypes["ready"] = "ready";
10
- DispatchedEventTypes["tokenize"] = "tokenize";
11
- })(DispatchedEventTypes || (DispatchedEventTypes = {}));
12
20
  const PaymentMethodForm = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
13
21
  constructor() {
14
22
  super();
15
23
  this.__registerHost();
16
24
  this.paymentMethodFormReady = createEvent(this, "paymentMethodFormReady", 7);
17
- this.paymentMethodFormChange = createEvent(this, "paymentMethodFormChange", 7);
18
- this.paymentMethodFormBlur = createEvent(this, "paymentMethodFormBlur", 7);
19
25
  this.paymentMethodFormTokenize = createEvent(this, "paymentMethodFormTokenize", 7);
20
- this.iframeOrigin = undefined;
26
+ this.paymentMethodFormType = undefined;
27
+ this.paymentMethodFormValidationStrategy = undefined;
28
+ this.height = 55;
21
29
  }
22
30
  connectedCallback() {
23
31
  window.addEventListener('message', this.dispatchMessageEvent.bind(this));
@@ -29,48 +37,56 @@ const PaymentMethodForm = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
29
37
  const messagePayload = messageEvent.data;
30
38
  const messageType = messagePayload.eventType;
31
39
  const messageData = messagePayload.data;
32
- switch (messageType) {
33
- case DispatchedEventTypes.ready:
34
- this.paymentMethodFormReady.emit(messageData);
35
- break;
36
- case DispatchedEventTypes.change:
37
- this.paymentMethodFormChange.emit(messageData);
38
- break;
39
- case DispatchedEventTypes.blur:
40
- this.paymentMethodFormBlur.emit(messageData);
41
- break;
40
+ if (messageType === MessageEventType[this.paymentMethodFormType].ready) {
41
+ this.paymentMethodFormReady.emit(messageData);
42
42
  }
43
- }
44
- triggerTokenization(clientKey, paymentMethodMetadata, account) {
45
- if (this.iframeElement && this.iframeElement.contentWindow) {
46
- this.iframeElement.contentWindow.postMessage({
47
- eventType: DispatchedEventTypes.tokenize,
48
- clientKey: clientKey,
49
- paymentMethodMetadata: paymentMethodMetadata,
50
- account: account
51
- }, '*');
43
+ if (messageType === MessageEventType[this.paymentMethodFormType].resize) {
44
+ this.height = messageData.height;
52
45
  }
53
46
  }
54
- async tokenize(clientKey, paymentMethodMetadata, account) {
47
+ async postMessageWithResponseListener(eventType, payload) {
55
48
  return new Promise((resolve) => {
56
- const tokenizeEventListener = (event) => {
57
- if (event.data.eventType !== DispatchedEventTypes.tokenize)
49
+ const responseListener = (event) => {
50
+ if (event.data.eventType !== eventType)
58
51
  return;
59
- window.removeEventListener('message', tokenizeEventListener);
52
+ window.removeEventListener('message', responseListener);
60
53
  resolve(event.data.data);
61
54
  };
62
- window.addEventListener('message', tokenizeEventListener);
63
- this.triggerTokenization(clientKey, paymentMethodMetadata, account);
55
+ window.addEventListener('message', responseListener);
56
+ this.iframeElement.contentWindow.postMessage(Object.assign({ eventType: eventType }, payload), '*');
64
57
  });
65
58
  }
59
+ async tokenize(clientKey, paymentMethodMetadata, account) {
60
+ const eventType = MessageEventType[this.paymentMethodFormType].tokenize;
61
+ const payload = {
62
+ clientKey: clientKey,
63
+ paymentMethodMetadata: paymentMethodMetadata,
64
+ account: account
65
+ };
66
+ return this.postMessageWithResponseListener(eventType, payload);
67
+ }
68
+ ;
69
+ async validate() {
70
+ return this.postMessageWithResponseListener(MessageEventType[this.paymentMethodFormType].validate);
71
+ }
66
72
  ;
73
+ getIframeSrc() {
74
+ let iframeSrc = `https://js.justifi.ai/v2/${this.paymentMethodFormType}`;
75
+ if (this.paymentMethodFormValidationStrategy) {
76
+ iframeSrc += `?validationStrategy=${this.paymentMethodFormValidationStrategy}`;
77
+ }
78
+ return iframeSrc;
79
+ }
67
80
  render() {
68
- return (h(Host, null, h("iframe", { id: "justifi-payment-method-form", src: this.iframeOrigin, ref: (el) => this.iframeElement = el })));
81
+ return (h(Host, null, h("iframe", { id: `justifi-payment-method-form-${this.paymentMethodFormType}`, src: this.getIframeSrc(), ref: (el) => this.iframeElement = el, height: this.height })));
69
82
  }
70
83
  static get style() { return paymentMethodFormCss; }
71
84
  }, [0, "justifi-payment-method-form", {
72
- "iframeOrigin": [1, "iframe-origin"],
73
- "tokenize": [64]
85
+ "paymentMethodFormType": [1, "payment-method-form-type"],
86
+ "paymentMethodFormValidationStrategy": [1, "payment-method-form-validation-strategy"],
87
+ "height": [32],
88
+ "tokenize": [64],
89
+ "validate": [64]
74
90
  }]);
75
91
  function defineCustomElement() {
76
92
  if (typeof customElements === "undefined") {