@buddy-technology/offer-component 1.5.0 → 1.6.0

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/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [@buddy-technology/offer-component-v1.6.0](https://github.com/Buddy-Technology/ion-to-react/compare/@buddy-technology/offer-component-v1.5.0...@buddy-technology/offer-component-v1.6.0) (2026-01-28)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * bot callouts ([0075772](https://github.com/Buddy-Technology/ion-to-react/commit/00757729b761f6eb6371dcb9676f36ece5714971))
7
+ * eslint ts config ([15deb9e](https://github.com/Buddy-Technology/ion-to-react/commit/15deb9e4b15d89389dbf90a83fac1650f02bd67f))
8
+ * update interface ([d642cde](https://github.com/Buddy-Technology/ion-to-react/commit/d642cde171b6f6777aeeffad8e174ac36fdb5a79))
9
+
10
+
11
+ ### Features
12
+
13
+ * update loader script to handle config scripts ([fcdb2e4](https://github.com/Buddy-Technology/ion-to-react/commit/fcdb2e4ea5aeeba5f4fefef4b4022116ace9c4ec))
14
+
1
15
  # [@buddy-technology/offer-component-v1.5.0](https://github.com/Buddy-Technology/ion-to-react/compare/@buddy-technology/offer-component-v1.4.0...@buddy-technology/offer-component-v1.5.0) (2025-03-20)
2
16
 
3
17
 
package/README.md CHANGED
@@ -2,6 +2,25 @@
2
2
  ---
3
3
  React component for adding [Buddy's](https://buddy.insure) Insurance Gateway
4
4
 
5
+ ## Table of Contents
6
+ - [Requirements](#requirements)
7
+ - [Installation](#installation)
8
+ - [Basic Usage](#basic-usage)
9
+ - [Props](#props)
10
+ - [Configuration Files](#configuration-files)
11
+ - [Version 2 configuration files (Recommended)](#version-2-configuration-files-recommended)
12
+ - [Version 1 configuration files](#version-1-configuration-files)
13
+ - [View Types](#view-types)
14
+ - [Checkout](#checkout)
15
+ - [For client-side only apps](#for-client-side-only-apps)
16
+ - [For full stack apps](#for-full-stack-apps)
17
+ - [Pre-filling Data](#pre-filling-data)
18
+ - [Styling](#styling)
19
+ - [Color Palettes](#color-palettes)
20
+ - [Overrides](#overrides)
21
+ - [Classes and Components](#classes-and-components)
22
+ - [Capturing Data](#capturing-data)
23
+
5
24
  ## Requirements
6
25
  Contact [Buddy](mailto:partners@buddy.insure) to obtain a `partnerID` and compatible `ions` for your specific use case.
7
26
 
@@ -29,18 +48,95 @@ function App() {
29
48
  }
30
49
  export default App;
31
50
  ```
51
+ ---
52
+ ## Props
53
+
54
+ | Option Name | Type | Default | Description
55
+ | --- | --- | --- | --- |
56
+ | *partnerID | string | | The partnerID assigned to you from Buddy |
57
+ | *ion | string | | The ion ID for the product to be presented |
58
+ | stage | enum | "STAGING" | One of: `"STAGING"`, `"PRODUCTION"`. Set to `"STAGING"` (default) for testing and development. |
59
+ | configSrc | string | | The URL for pairing a configuration file with the offer element. |
60
+ | viewType | enum | `"paginated"` | Sets how the offer element is displayed. One of: `"paginated"`, `"single-form"`, `"offer-only"`. _See [View types](#view-types) for details._|
61
+ | data | object | | Customer or policy data to pre-load the offer with. Refer to specific ION documentation for the data structure. |
62
+ | theme | object | |The [theme](#styling) object for passing in styles and color palettes |
63
+ | onUserEvent | function | | A callback for tracking user behavioral data. See [Capturing Data](#capturing-data) for details. |
64
+ | includeCheckout | boolean | `true` | Toggles whether to render the secure checkout. |
65
+ | onOptIn | function | | The callback fired when a user opts into an offer. See Buddy's Partner API docs for details on how to complete the transaction.|
66
+ | onOptOut | function | | The callback fired when a user opts out of the offer. |
67
+
68
+ _*required_
69
+
70
+ ## Configuration Files
71
+
72
+ ### Version 2 configuration files (Recommended)
73
+ For version 2 configuration files (that utilize `Buddy.embedOptions`), simply pass in the URL of the file to the `configSrc` prop. Properties defined in a configuration file will be merged with any props defined in this implementation.
74
+
75
+ **EXAMPLE**
76
+ ```javascript
77
+ // config.js
78
+
79
+ const configTheme = {
80
+ baseTheme: 'base',
81
+ palette: 'base',
82
+ overrides: {
83
+ styles: {
84
+ h1: { color: 'blue' }
85
+ h2: { color: 'blue' }
86
+ }
87
+ },
88
+ };
89
+
90
+ window.Buddy.embedOptions.theme = configTheme // attach our theme to embedOptions.
91
+
92
+ ```
93
+ ```javascript
94
+ // React implementation
95
+
96
+ import React from 'react';
97
+ import BuddyOfferElement from '@buddy-technology/offer-component';
98
+
99
+ function App() {
100
+ const overrideConfigTheme = {
101
+ overrides: {
102
+ styles: {
103
+ h2: { color: 'red' }
104
+ }
105
+ }
106
+ };
107
+
108
+ return (
109
+ <div id="app">
110
+ <h1>My App</h1>
111
+ <BuddyOfferElement
112
+ ion="MY_ION"
113
+ partnerID="my-partner-id"
114
+ stage="staging"
115
+ configSrc="https://js.buddy.insure/config.js" // URL of our config file
116
+ theme={overrideConfigTheme} // deep merges our theme, h2's will now be red, but h1's are still blue.
117
+ />
118
+ </div>
119
+ );
120
+ }
121
+ export default App;
122
+ ```
123
+
124
+
125
+ ### Version 1 configuration files
126
+ NOTE: This feature is useful pairing configuration files utilizing the `config` variable pattern. For information on how to implement newer configs see: [Version 2 Configuration Files](#version-2-configuration-files-recommended).
127
+
128
+ For configuration files utilizing the `config` variable pattern, we need to first pre-load our script using the `useConfig` hook, then pass our options to the implementation.
32
129
 
33
- ## Combined with useConfig hook
34
130
  ```javascript
35
131
  import React from 'react';
36
132
  import BuddyOfferElement, { useConfig } from '@buddy-technology/offer-component';
37
133
 
38
134
  function App() {
39
- const { config, isLoading } = useConfig('https://config-domain.com/config.js');
135
+ const { config, isLoading } = useConfig('https://config-domain.com/config.js');
40
136
 
41
- if (isLoading || !config) {
42
- return null;
43
- }
137
+ if (isLoading || !config) {
138
+ return null;
139
+ }
44
140
 
45
141
  // grab relevant properties from config
46
142
  const theme = config.themeBase;
@@ -63,23 +159,6 @@ function App() {
63
159
  }
64
160
  export default App;
65
161
  ```
66
- ---
67
- ## Props
68
-
69
- | Option Name | Type | Default | Description
70
- | --- | --- | --- | --- |
71
- | *partnerID | string | | The partnerID assigned to you from Buddy |
72
- | *ion | string | | The ion ID for the product to be presented |
73
- | stage | enum | "STAGING" | One of: `"STAGING"`, `"PRODUCTION"`. Set to `"STAGING"` (default) for testing and development. |
74
- | viewType | enum | `"paginated"` | Sets how the offer element is displayed. One of: `"paginated"`, `"single-form"`, `"offer-only"`. _See [View types](#view-types) for details._|
75
- | data | object | | Customer or policy data to pre-load the offer with. Refer to specific ION documentation for the data structure. |
76
- | theme | object | |The [theme](#styling) object for passing in styles and color palettes |
77
- | onUserEvent | function | | A callback for tracking user behavioral data. See [Capturing Data](#capturing-data) for details. |
78
- | includeCheckout | boolean | `true` | Toggles whether to render the secure checkout. |
79
- | onOptIn | function | | The callback fired when a user opts into an offer. See Buddy's Partner API docs for details on how to complete the transaction.|
80
- | onOptOut | function | | The callback fired when a user opts out of the offer. |
81
- _*required_
82
-
83
162
  ---
84
163
  ## View Types
85
164
 
@@ -292,15 +371,15 @@ __Base__:
292
371
 
293
372
  __Buddy__:
294
373
 
295
- primary: '#DC5648',
296
- secondary: '#0A242D99',
297
- tertiary: '#46460E33',
298
- negative: '#D62719',
299
- positive: '#A3D9B1',
300
- textPrimary: '#0A242D',
301
- textSecondary: '#0A242D99',
302
- backgroundPrimary: 'linear-gradient(#D6F1F2, #F8F6D2)',
303
- backgroundSecondary: '#FBF9EF',
374
+ primary: '#DC5648',
375
+ secondary: '#0A242D99',
376
+ tertiary: '#46460E33',
377
+ negative: '#D62719',
378
+ positive: '#A3D9B1',
379
+ textPrimary: '#0A242D',
380
+ textSecondary: '#0A242D99',
381
+ backgroundPrimary: 'linear-gradient(#D6F1F2, #F8F6D2)',
382
+ backgroundSecondary: '#FBF9EF',
304
383
 
305
384
  ### Overrides
306
385
 
@@ -471,7 +550,7 @@ _data returned_
471
550
  | `error` | string | if unsuccessful, a message explaining the type of error encountered |
472
551
  | `timestamp` | number | the timestamp when the event occurred in milliseconds |
473
552
 
474
-
553
+
475
554
  #### `onFocus`
476
555
 
477
556
  Triggers when an input is focused
package/dist/index.js CHANGED
@@ -25,6 +25,17 @@ const SCRIPTS = {
25
25
  };
26
26
  const STAGES = Object.keys(SCRIPTS);
27
27
 
28
+ function _catch$1(body, recover) {
29
+ try {
30
+ var result = body();
31
+ } catch (e) {
32
+ return recover(e);
33
+ }
34
+ if (result && result.then) {
35
+ return result.then(void 0, recover);
36
+ }
37
+ return result;
38
+ }
28
39
  const defaultOptions = {
29
40
  stage: 'STAGING'
30
41
  };
@@ -84,80 +95,114 @@ const createOffer = options => {
84
95
  }
85
96
  }
86
97
  };
87
- const injectScript = options => {
88
- const finalOptions = {
89
- ...defaultOptions,
90
- ...options
91
- };
92
- const script = document.createElement('script');
93
- script.src = `${SCRIPTS[finalOptions.stage].URL}`;
94
- script.onload = () => createOffer(finalOptions);
95
- document.body.appendChild(script);
96
- return script;
97
- };
98
- let scriptPromise = null;
99
- const loadScript = options => {
100
- // Ensure that we only attempt to script once
101
- if (scriptPromise !== null) {
102
- return scriptPromise;
98
+ const asyncLoadScript = src => new Promise((resolve, reject) => {
99
+ const existingScript = findScript(src);
100
+ if (existingScript) {
101
+ // eslint-disable-next-line no-console
102
+ console.warn(`Script with src [${src}] is already loaded!`);
103
+ resolve(existingScript);
103
104
  }
104
- scriptPromise = new Promise((resolve, reject) => {
105
+ const script = document.createElement('script');
106
+ script.src = src;
107
+ script.onload = resolve;
108
+ script.onerror = () => {
109
+ // bad script, so let's remove it in case folks want to retry.
110
+ document.head.removeChild(script);
111
+ reject(new Error(`Failed to load script with src: [${src}].`));
112
+ };
113
+ document.head.appendChild(script);
114
+ });
115
+ const createScriptPromise = function (options) {
116
+ try {
117
+ let _exit;
105
118
  if (typeof window === 'undefined') {
106
119
  // Resolve to null when imported server side. This makes the module
107
120
  // safe to import in an isomorphic code base.
108
- resolve(null);
109
- return;
110
- }
111
- if (window.Buddy?.createOffer) {
112
- // eslint-disable-next-line no-console
113
- console.warn(EXISTING_SCRIPT_MESSAGE);
114
- window.Buddy?.createOffer(options);
115
- resolve(window.Buddy);
116
- return;
121
+ return Promise.resolve(null);
117
122
  }
118
- try {
119
- const requiredProps = ['ion', 'partnerID'];
120
- const missingRequiredProps = validatePropertiesOfObject(requiredProps, options);
121
- if (missingRequiredProps) {
122
- reject(new Error(missingRequiredProps));
123
- return;
124
- }
125
- if (!options?.stage) {
126
- // eslint-disable-next-line no-console
127
- console.warn(`No stage passed to BuddyOfferElement. Using default stage: ${defaultOptions.stage}`);
128
- }
129
- // If stage is passed, ensure it is one of the prescribed options.
130
- if (options?.stage && !STAGES.includes(options.stage)) {
131
- const msg = `The stage prop must be one of: [${STAGES.join(' , ')}], but received "${options.stage}."`;
132
- reject(new Error(msg));
133
- return;
134
- }
135
- let script = findOfferScript(options?.stage);
136
- if (script) {
137
- // eslint-disable-next-line no-console
138
- console.warn(EXISTING_SCRIPT_MESSAGE);
139
- if (window.Buddy?.createOffer) {
140
- resolve(window.Buddy);
141
- } else {
142
- reject(new Error('Buddy Offer Element not available'));
123
+ const finalOptions = {
124
+ ...defaultOptions,
125
+ ...options
126
+ };
127
+ return Promise.resolve(_catch$1(function () {
128
+ function _temp4(_result) {
129
+ if (_exit) return _result;
130
+ const requiredProps = ['ion', 'partnerID'];
131
+ const missingRequiredProps = validatePropertiesOfObject(requiredProps, options);
132
+ if (missingRequiredProps) {
133
+ throw new Error(missingRequiredProps);
134
+ }
135
+ if (!options?.stage) {
136
+ // eslint-disable-next-line no-console
137
+ console.warn(`No stage passed to BuddyOfferElement. Using default stage: ${defaultOptions.stage}`);
143
138
  }
144
- } else if (!script) {
145
- script = injectScript(options);
139
+ // If stage is passed, ensure it is one of the prescribed options.
140
+ // No existing loader script, so time to inject ours.
141
+ // if we have a config src, let's load that up too.
142
+ // Error out if any scripts fail to load. If someone meant to include a config, we treat that as a fatal issue.
143
+ if (options?.stage && !STAGES.includes(options.stage)) {
144
+ const msg = `The stage prop must be one of: [${STAGES.join(' , ')}], but received "${options.stage}."`;
145
+ throw new Error(msg);
146
+ }
147
+ const script = findOfferScript(options?.stage);
148
+ if (script) {
149
+ // eslint-disable-next-line no-console
150
+ console.warn(EXISTING_SCRIPT_MESSAGE);
151
+ if (window.Buddy?.createOffer) {
152
+ // createOffer will prevent any duplicate frames from mounting.
153
+ createOffer(finalOptions);
154
+ return window.Buddy;
155
+ }
156
+ // if we have a script loaded, but Buddy's not in the window, throw.
157
+ throw new Error('Buddy Offer Element not available');
158
+ }
159
+ const loaderSrc = `${SCRIPTS[finalOptions.stage].URL}`;
160
+ const scriptPromises = [asyncLoadScript(loaderSrc)];
161
+ if (finalOptions.configSrc) {
162
+ scriptPromises.push(asyncLoadScript(finalOptions.configSrc));
163
+ }
164
+ return Promise.resolve(Promise.all(scriptPromises)).then(function () {
165
+ createOffer(finalOptions);
166
+ return window.Buddy;
167
+ });
146
168
  }
147
- script.addEventListener('load', () => {
169
+ const _temp3 = function () {
148
170
  if (window.Buddy?.createOffer) {
149
- resolve(window.Buddy);
150
- } else {
151
- reject(new Error('Buddy Offer Element not available'));
171
+ function _temp2() {
172
+ // Instantiate the offer. createOffer will bail if frame is already mounted.
173
+ createOffer(finalOptions);
174
+ const _window$Buddy = window.Buddy;
175
+ _exit = 1;
176
+ return _window$Buddy;
177
+ }
178
+ // eslint-disable-next-line no-console
179
+ console.warn(EXISTING_SCRIPT_MESSAGE);
180
+ // Any config scripts might not actually be loaded though, so try and load.
181
+ const _temp = function () {
182
+ if (finalOptions.configSrc) {
183
+ // This helper function already checks if the script is loaded or not.
184
+ return Promise.resolve(asyncLoadScript(finalOptions.configSrc)).then(function () {});
185
+ }
186
+ }();
187
+ return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
152
188
  }
153
- });
154
- script.addEventListener('error', () => {
155
- reject(new Error('Failed to load Buddy Offer Element'));
156
- });
157
- } catch (error) {
158
- reject(error);
159
- }
160
- });
189
+ }();
190
+ // if our createOffer method is available, then we're already instantiated.
191
+ return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
192
+ }, function (error) {
193
+ return Promise.reject(error);
194
+ }));
195
+ } catch (e) {
196
+ return Promise.reject(e);
197
+ }
198
+ };
199
+ let scriptPromise = null;
200
+ const loadScript = options => {
201
+ // Ensure that we only attempt to script once
202
+ if (scriptPromise !== null) {
203
+ return scriptPromise;
204
+ }
205
+ scriptPromise = createScriptPromise(options);
161
206
  return scriptPromise;
162
207
  };
163
208
  // This is used to clear our reference to the script promise when the component is unmounted.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/util/dictionary.ts","../src/util/index.ts","../src/hooks/useConfig.tsx","../src/hooks/useUpdateEffect.tsx","../src/components/BuddyOfferElement.tsx"],"sourcesContent":["const EXISTING_SCRIPT_MESSAGE = 'Buddy Offer Script is already loaded.';\n\nconst SCRIPTS = {\n\tLOCAL: {\n\t\tURL: 'http://localhost:8008/index.js',\n\t},\n\t// TODO: Delete this in favor of \"testing\", once we're sure nothing is using it.\n\tDEVELOPMENT: {\n\t\tURL: 'https://js.buddy.insure/v2/dev/index.js',\n\t},\n\tTESTING: {\n\t\tURL: 'https://js.buddy.insure/v2/testing/index.js',\n\t},\n\tSTAGING: {\n\t\tURL: 'https://js.buddy.insure/v2/staging/index.js',\n\t},\n\tPRODUCTION: {\n\t\tURL: 'https://js.buddy.insure/v2/index.js',\n\t},\n} as const;\n\nconst STAGES = Object.keys(SCRIPTS);\n\nexport {\n\tEXISTING_SCRIPT_MESSAGE,\n\tSCRIPTS,\n\tSTAGES,\n};\n","import { EXISTING_SCRIPT_MESSAGE, SCRIPTS, STAGES } from './dictionary';\nimport type { BuddyObject, IWindow } from '../interface';\n\ntype IStages = keyof typeof SCRIPTS;\n\nconst defaultOptions = {\n\tstage: 'STAGING',\n} as const;\n\nconst isEmptyOrNil = (value: any) => {\n\tconst isNil = (val: any) => [undefined, null].includes(val);\n\tconst isEmptyStr = (str: any) => typeof str === 'string' && str.trim().length === 0;\n\tconst isEmptyObjOrArr = (obj: any) => (typeof obj === 'object' && obj.length === undefined &&\n\t\tObject.keys(obj).length === 0) || (Array.isArray(obj) && obj.length === 0);\n\treturn (isNil(value) || isEmptyStr(value) || isEmptyObjOrArr(value));\n};\n\nconst validatePropertiesOfObject = (propsToCheck: string[], obj: Record<string, any>) => {\n\tconst emptyProps = propsToCheck.filter((prop) => isEmptyOrNil(obj[prop]));\n\tif (emptyProps.length) {\n\t\tconst displayMissingProps = emptyProps.reduce((prev, current, i) => {\n\t\t\tconst isLastEl = i === emptyProps.length - 1;\n\t\t\treturn isLastEl ? `${prev}${current}.` : `${prev}${current}, `;\n\t\t}, '');\n\t\treturn `The following props are required: ${displayMissingProps}`;\n\t}\n\treturn null;\n};\n\nexport const findScript = (url: string) => {\n\tconst scripts = Array.from(document.querySelectorAll('script'));\n\treturn scripts.find(({ src }) => src.startsWith(url));\n};\n\nexport const findOfferScript = (stage: IStages = defaultOptions.stage) => {\n\tconst { URL } = SCRIPTS[stage];\n\tconst matchedScript = findScript(URL);\n\treturn matchedScript;\n};\n\nexport const updateOffer = (options: Record<string, any>) => {\n\tif ((window as IWindow).Buddy) {\n\t\ttry {\n\t\t\t(window as IWindow).Buddy!.updateOffer(options);\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n};\n\nconst createOffer = (options: Record<string, any>) => {\n\tif ((window as IWindow).Buddy) {\n\t\ttry {\n\t\t\t(window as IWindow).Buddy!.createOffer(options);\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n};\n\nconst injectScript = (options: Record<string, any>) => {\n\tconst finalOptions = { ...defaultOptions, ...options };\n\tconst script = document.createElement('script');\n\tscript.src = `${SCRIPTS[finalOptions.stage].URL}`;\n\tscript.onload = () => createOffer(finalOptions);\n\tdocument.body.appendChild(script);\n\treturn script;\n};\n\nlet scriptPromise: Promise<BuddyObject | null> | null = null;\n\nexport const loadScript = (options: Record<string, any>) => {\n\t// Ensure that we only attempt to script once\n\tif (scriptPromise !== null) {\n\t\treturn scriptPromise;\n\t}\n\n\tscriptPromise = new Promise((resolve, reject) => {\n\t\tif (typeof window === 'undefined') {\n\t\t\t// Resolve to null when imported server side. This makes the module\n\t\t\t// safe to import in an isomorphic code base.\n\t\t\tresolve(null);\n\t\t\treturn;\n\t\t}\n\n\t\tif ((window as IWindow).Buddy?.createOffer) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(EXISTING_SCRIPT_MESSAGE);\n\t\t\t(window as IWindow).Buddy?.createOffer(options);\n\t\t\tresolve((window as IWindow).Buddy!);\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst requiredProps = ['ion', 'partnerID'];\n\t\t\tconst missingRequiredProps = validatePropertiesOfObject(requiredProps, options);\n\n\t\t\tif (missingRequiredProps) {\n\t\t\t\treject(new Error(missingRequiredProps));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!options?.stage) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(`No stage passed to BuddyOfferElement. Using default stage: ${defaultOptions.stage}`);\n\t\t\t}\n\n\t\t\t// If stage is passed, ensure it is one of the prescribed options.\n\t\t\tif (options?.stage && !STAGES.includes(options.stage)) {\n\t\t\t\tconst msg = `The stage prop must be one of: [${STAGES.join(' , ')}], but received \"${options.stage}.\"`;\n\t\t\t\treject(new Error(msg));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet script = findOfferScript(options?.stage);\n\n\t\t\tif (script) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(EXISTING_SCRIPT_MESSAGE);\n\t\t\t\tif ((window as IWindow).Buddy?.createOffer) {\n\t\t\t\t\tresolve((window as IWindow).Buddy!);\n\t\t\t\t} else {\n\t\t\t\t\treject(new Error('Buddy Offer Element not available'));\n\t\t\t\t}\n\t\t\t} else if (!script) {\n\t\t\t\tscript = injectScript(options);\n\t\t\t}\n\n\t\t\tscript.addEventListener('load', () => {\n\t\t\t\tif ((window as IWindow).Buddy?.createOffer) {\n\t\t\t\t\tresolve((window as IWindow).Buddy!);\n\t\t\t\t} else {\n\t\t\t\t\treject(new Error('Buddy Offer Element not available'));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tscript.addEventListener('error', () => {\n\t\t\t\treject(new Error('Failed to load Buddy Offer Element'));\n\t\t\t});\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\t});\n\n\treturn scriptPromise;\n};\n\n// This is used to clear our reference to the script promise when the component is unmounted.\nexport const clearScriptPromise = () => {\n\tscriptPromise = null;\n};\n","import { useEffect, useState } from 'react';\nimport { findScript } from '../util';\nimport type { IWindow, ConfigObject } from '../interface';\n\nfunction useConfig(src: string) {\n\tconst [config, setConfig] = useState<ConfigObject | null>(null);\n\tconst [isLoading, setIsLoading] = useState(true);\n\n\tconst hasConfig = typeof window !== 'undefined';\n\n\tuseEffect(() => {\n\t\tlet script = findScript(src);\n\n\t\tif (!script) {\n\t\t\tscript = document.createElement('script');\n\t\t\tscript.src = src;\n\n\t\t\tscript.onload = () => {\n\t\t\t\t// Assuming the script sets a global variable named 'config'\n\t\t\t\tif (hasConfig) {\n\t\t\t\t\tsetConfig((window as IWindow).Buddy!.config!);\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdocument.body.appendChild(script);\n\t\t} else {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('Config script is already loaded.');\n\t\t\tif (hasConfig) {\n\t\t\t\tsetConfig((window as IWindow).Buddy!.config!);\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (script) {\n\t\t\t\tdocument.body.removeChild(script);\n\t\t\t}\n\t\t};\n\t}, [src]);\n\n\treturn { config, isLoading };\n}\n\nexport default useConfig;\n","import { useEffect, useRef } from 'react';\n\nconst useUpdateEffect: typeof useEffect = (effect, deps) => {\n\tconst isFirstMount = useRef<boolean>(true);\n\t// need to return only in the else condition in case a cleanup func is passed in effect.\n\t// eslint-disable-next-line consistent-return\n\tuseEffect(() => {\n\t\tif (isFirstMount.current) {\n\t\t\tisFirstMount.current = false;\n\t\t} else {\n\t\t\treturn effect();\n\t\t}\n\t}, deps);\n};\n\nexport default useUpdateEffect;\n","import React, { useEffect } from 'react';\nimport { useUpdateEffect } from '../hooks';\nimport { loadScript, clearScriptPromise, updateOffer } from '../util';\nimport type { BuddyOfferElementProps } from '../interface';\n\nfunction BuddyOfferElement(options: BuddyOfferElementProps) {\n\tuseEffect(() => {\n\t\tconst getScript = async () => {\n\t\t\ttry {\n\t\t\t\tawait loadScript(options);\n\t\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t};\n\t\tgetScript();\n\t\treturn () => {\n\t\t\tclearScriptPromise();\n\t\t};\n\t}, []);\n\n\tuseUpdateEffect(() => {\n\t\tupdateOffer(options);\n\t}, [options]);\n\n\treturn (\n\t\t<div id=\"buddy_offer\" />\n\t);\n}\n\nexport default BuddyOfferElement;\n"],"names":["EXISTING_SCRIPT_MESSAGE","SCRIPTS","LOCAL","URL","DEVELOPMENT","TESTING","STAGING","PRODUCTION","STAGES","Object","keys","defaultOptions","stage","isEmptyOrNil","value","isNil","val","undefined","includes","isEmptyStr","str","trim","length","isEmptyObjOrArr","obj","Array","isArray","validatePropertiesOfObject","propsToCheck","emptyProps","filter","prop","displayMissingProps","reduce","prev","current","i","isLastEl","findScript","url","scripts","from","document","querySelectorAll","find","_ref","src","startsWith","findOfferScript","matchedScript","updateOffer","options","window","Buddy","error","console","createOffer","injectScript","finalOptions","script","createElement","onload","body","appendChild","scriptPromise","loadScript","Promise","resolve","reject","warn","requiredProps","missingRequiredProps","Error","msg","join","addEventListener","clearScriptPromise","useConfig","config","setConfig","useState","isLoading","setIsLoading","hasConfig","useEffect","removeChild","useUpdateEffect","effect","deps","isFirstMount","useRef","BuddyOfferElement","getScript","_temp","_catch","then","e","React","id"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/util/dictionary.ts","../src/util/index.ts","../src/hooks/useConfig.tsx","../src/hooks/useUpdateEffect.tsx","../src/components/BuddyOfferElement.tsx"],"sourcesContent":["const EXISTING_SCRIPT_MESSAGE = 'Buddy Offer Script is already loaded.';\n\nconst SCRIPTS = {\n\tLOCAL: {\n\t\tURL: 'http://localhost:8008/index.js',\n\t},\n\t// TODO: Delete this in favor of \"testing\", once we're sure nothing is using it.\n\tDEVELOPMENT: {\n\t\tURL: 'https://js.buddy.insure/v2/dev/index.js',\n\t},\n\tTESTING: {\n\t\tURL: 'https://js.buddy.insure/v2/testing/index.js',\n\t},\n\tSTAGING: {\n\t\tURL: 'https://js.buddy.insure/v2/staging/index.js',\n\t},\n\tPRODUCTION: {\n\t\tURL: 'https://js.buddy.insure/v2/index.js',\n\t},\n} as const;\n\nconst STAGES = Object.keys(SCRIPTS);\n\nexport {\n\tEXISTING_SCRIPT_MESSAGE,\n\tSCRIPTS,\n\tSTAGES,\n};\n","import { EXISTING_SCRIPT_MESSAGE, SCRIPTS, STAGES } from './dictionary';\nimport type { BuddyObject, IWindow, BuddyOfferElementProps } from '../interface';\n\ntype IStages = keyof typeof SCRIPTS;\n\nconst defaultOptions: Partial<BuddyOfferElementProps> = {\n\tstage: 'STAGING',\n} as const;\n\nconst isEmptyOrNil = (value: any) => {\n\tconst isNil = (val: any) => [undefined, null].includes(val);\n\tconst isEmptyStr = (str: any) => typeof str === 'string' && str.trim().length === 0;\n\tconst isEmptyObjOrArr = (obj: any) => (typeof obj === 'object' && obj.length === undefined &&\n\t\tObject.keys(obj).length === 0) || (Array.isArray(obj) && obj.length === 0);\n\treturn (isNil(value) || isEmptyStr(value) || isEmptyObjOrArr(value));\n};\n\nconst validatePropertiesOfObject = (propsToCheck: string[], obj: Record<string, any>) => {\n\tconst emptyProps = propsToCheck.filter((prop) => isEmptyOrNil(obj[prop]));\n\tif (emptyProps.length) {\n\t\tconst displayMissingProps = emptyProps.reduce((prev, current, i) => {\n\t\t\tconst isLastEl = i === emptyProps.length - 1;\n\t\t\treturn isLastEl ? `${prev}${current}.` : `${prev}${current}, `;\n\t\t}, '');\n\t\treturn `The following props are required: ${displayMissingProps}`;\n\t}\n\treturn null;\n};\n\nexport const findScript = (url: string) => {\n\tconst scripts = Array.from(document.querySelectorAll('script'));\n\treturn scripts.find(({ src }) => src.startsWith(url));\n};\n\nexport const findOfferScript = (stage: IStages = defaultOptions.stage!) => {\n\tconst { URL } = SCRIPTS[stage];\n\tconst matchedScript = findScript(URL);\n\treturn matchedScript;\n};\n\nexport const updateOffer = (options: Record<string, any>) => {\n\tif ((window as IWindow).Buddy) {\n\t\ttry {\n\t\t\t(window as IWindow).Buddy!.updateOffer(options);\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n};\n\nconst createOffer = (options: Record<string, any>) => {\n\tif ((window as IWindow).Buddy) {\n\t\ttry {\n\t\t\t(window as IWindow).Buddy!.createOffer(options);\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n};\n\nconst asyncLoadScript = (src: string) => new Promise((resolve, reject) => {\n\tconst existingScript = findScript(src);\n\n\tif (existingScript) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(`Script with src [${src}] is already loaded!`);\n\t\tresolve(existingScript);\n\t}\n\n\tconst script = document.createElement('script');\n\tscript.src = src;\n\tscript.onload = resolve;\n\tscript.onerror = () => {\n\t\t// bad script, so let's remove it in case folks want to retry.\n\t\tdocument.head.removeChild(script);\n\t\treject(new Error(`Failed to load script with src: [${src}].`));\n\t};\n\tdocument.head.appendChild(script);\n});\n\nconst createScriptPromise = async (options: Record<string, any>) => {\n\tif (typeof window === 'undefined') {\n\t\t// Resolve to null when imported server side. This makes the module\n\t\t// safe to import in an isomorphic code base.\n\t\treturn null;\n\t}\n\n\tconst finalOptions = { ...defaultOptions, ...options };\n\n\ttry {\n\t// if our createOffer method is available, then we're already instantiated.\n\t\tif ((window as IWindow).Buddy?.createOffer) {\n\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(EXISTING_SCRIPT_MESSAGE);\n\n\t\t\t// Any config scripts might not actually be loaded though, so try and load.\n\t\t\tif (finalOptions.configSrc) {\n\t\t\t\t// This helper function already checks if the script is loaded or not.\n\t\t\t\tawait asyncLoadScript(finalOptions.configSrc);\n\t\t\t}\n\t\t\t// Instantiate the offer. createOffer will bail if frame is already mounted.\n\t\t\tcreateOffer(finalOptions);\n\t\t\treturn (window as IWindow).Buddy!;\n\t\t}\n\n\t\tconst requiredProps = ['ion', 'partnerID'];\n\t\tconst missingRequiredProps = validatePropertiesOfObject(requiredProps, options);\n\n\t\tif (missingRequiredProps) {\n\t\t\tthrow new Error(missingRequiredProps);\n\t\t}\n\n\t\tif (!options?.stage) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(`No stage passed to BuddyOfferElement. Using default stage: ${defaultOptions.stage}`);\n\t\t}\n\n\t\t// If stage is passed, ensure it is one of the prescribed options.\n\t\tif (options?.stage && !STAGES.includes(options.stage)) {\n\t\t\tconst msg = `The stage prop must be one of: [${STAGES.join(' , ')}], but received \"${options.stage}.\"`;\n\t\t\tthrow new Error(msg);\n\t\t}\n\n\t\tconst script = findOfferScript(options?.stage);\n\n\t\tif (script) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(EXISTING_SCRIPT_MESSAGE);\n\t\t\tif ((window as IWindow).Buddy?.createOffer) {\n\t\t\t\t// createOffer will prevent any duplicate frames from mounting.\n\t\t\t\tcreateOffer(finalOptions);\n\t\t\t\treturn (window as IWindow).Buddy!;\n\t\t\t}\n\t\t\t// if we have a script loaded, but Buddy's not in the window, throw.\n\t\t\tthrow new Error('Buddy Offer Element not available');\n\t\t}\n\n\t\t// No existing loader script, so time to inject ours.\n\t\tconst loaderSrc = `${SCRIPTS[finalOptions.stage!].URL}`;\n\n\t\tconst scriptPromises = [asyncLoadScript(loaderSrc)];\n\n\t\t// if we have a config src, let's load that up too.\n\t\tif (finalOptions.configSrc) {\n\t\t\tscriptPromises.push(asyncLoadScript(finalOptions.configSrc));\n\t\t}\n\n\t\t// Error out if any scripts fail to load. If someone meant to include a config, we treat that as a fatal issue.\n\t\tawait Promise.all(scriptPromises);\n\t\tcreateOffer(finalOptions);\n\n\t\treturn (window as IWindow).Buddy!;\n\t} catch (error) {\n\t\treturn Promise.reject(error);\n\t}\n};\n\nlet scriptPromise: Promise<BuddyObject | null> | null = null;\n\nexport const loadScript = (options: Record<string, any>) => {\n\t// Ensure that we only attempt to script once\n\tif (scriptPromise !== null) {\n\t\treturn scriptPromise;\n\t}\n\n\tscriptPromise = createScriptPromise(options);\n\n\treturn scriptPromise;\n};\n\n// This is used to clear our reference to the script promise when the component is unmounted.\nexport const clearScriptPromise = () => {\n\tscriptPromise = null;\n};\n","import { useEffect, useState } from 'react';\nimport { findScript } from '../util';\nimport type { IWindow, ConfigObject } from '../interface';\n\nfunction useConfig(src: string) {\n\tconst [config, setConfig] = useState<ConfigObject | null>(null);\n\tconst [isLoading, setIsLoading] = useState(true);\n\n\tconst hasConfig = typeof window !== 'undefined';\n\n\tuseEffect(() => {\n\t\tlet script = findScript(src);\n\n\t\tif (!script) {\n\t\t\tscript = document.createElement('script');\n\t\t\tscript.src = src;\n\n\t\t\tscript.onload = () => {\n\t\t\t\t// Assuming the script sets a global variable named 'config'\n\t\t\t\tif (hasConfig) {\n\t\t\t\t\tsetConfig((window as IWindow).Buddy!.config!);\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdocument.body.appendChild(script);\n\t\t} else {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('Config script is already loaded.');\n\t\t\tif (hasConfig) {\n\t\t\t\tsetConfig((window as IWindow).Buddy!.config!);\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (script) {\n\t\t\t\tdocument.body.removeChild(script);\n\t\t\t}\n\t\t};\n\t}, [src]);\n\n\treturn { config, isLoading };\n}\n\nexport default useConfig;\n","import { useEffect, useRef } from 'react';\n\nconst useUpdateEffect: typeof useEffect = (effect, deps) => {\n\tconst isFirstMount = useRef<boolean>(true);\n\t// need to return only in the else condition in case a cleanup func is passed in effect.\n\t// eslint-disable-next-line consistent-return\n\tuseEffect(() => {\n\t\tif (isFirstMount.current) {\n\t\t\tisFirstMount.current = false;\n\t\t} else {\n\t\t\treturn effect();\n\t\t}\n\t}, deps);\n};\n\nexport default useUpdateEffect;\n","import React, { useEffect } from 'react';\nimport { useUpdateEffect } from '../hooks';\nimport { loadScript, clearScriptPromise, updateOffer } from '../util';\nimport type { BuddyOfferElementProps } from '../interface';\n\nfunction BuddyOfferElement(options: BuddyOfferElementProps) {\n\tuseEffect(() => {\n\t\tconst getScript = async () => {\n\t\t\ttry {\n\t\t\t\tawait loadScript(options);\n\t\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t};\n\t\tgetScript();\n\t\treturn () => {\n\t\t\tclearScriptPromise();\n\t\t};\n\t}, []);\n\n\tuseUpdateEffect(() => {\n\t\tupdateOffer(options);\n\t}, [options]);\n\n\treturn (\n\t\t<div id=\"buddy_offer\" />\n\t);\n}\n\nexport default BuddyOfferElement;\n"],"names":["EXISTING_SCRIPT_MESSAGE","SCRIPTS","LOCAL","URL","DEVELOPMENT","TESTING","STAGING","PRODUCTION","STAGES","Object","keys","defaultOptions","stage","isEmptyOrNil","value","isNil","val","undefined","includes","isEmptyStr","str","trim","length","isEmptyObjOrArr","obj","Array","isArray","validatePropertiesOfObject","propsToCheck","emptyProps","filter","prop","displayMissingProps","reduce","prev","current","i","isLastEl","findScript","url","scripts","from","document","querySelectorAll","find","_ref","src","startsWith","findOfferScript","matchedScript","updateOffer","options","window","Buddy","error","console","createOffer","asyncLoadScript","Promise","resolve","reject","existingScript","warn","script","createElement","onload","onerror","head","removeChild","Error","appendChild","createScriptPromise","_exit","finalOptions","_catch","_temp4","_result","requiredProps","missingRequiredProps","msg","join","loaderSrc","scriptPromises","configSrc","push","all","then","_temp3","_temp2","_window$Buddy","_temp","e","scriptPromise","loadScript","clearScriptPromise","useConfig","config","setConfig","useState","isLoading","setIsLoading","hasConfig","useEffect","body","useUpdateEffect","effect","deps","isFirstMount","useRef","BuddyOfferElement","getScript","React","id"],"mappings":"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"}
@@ -84,81 +84,94 @@ const createOffer = options => {
84
84
  }
85
85
  }
86
86
  };
87
- const injectScript = options => {
88
- const finalOptions = _extends({}, defaultOptions, options);
87
+ const asyncLoadScript = src => new Promise((resolve, reject) => {
88
+ const existingScript = findScript(src);
89
+ if (existingScript) {
90
+ // eslint-disable-next-line no-console
91
+ console.warn(`Script with src [${src}] is already loaded!`);
92
+ resolve(existingScript);
93
+ }
89
94
  const script = document.createElement('script');
90
- script.src = `${SCRIPTS[finalOptions.stage].URL}`;
91
- script.onload = () => createOffer(finalOptions);
92
- document.body.appendChild(script);
93
- return script;
94
- };
95
- let scriptPromise = null;
96
- const loadScript = options => {
97
- // Ensure that we only attempt to script once
98
- if (scriptPromise !== null) {
99
- return scriptPromise;
95
+ script.src = src;
96
+ script.onload = resolve;
97
+ script.onerror = () => {
98
+ // bad script, so let's remove it in case folks want to retry.
99
+ document.head.removeChild(script);
100
+ reject(new Error(`Failed to load script with src: [${src}].`));
101
+ };
102
+ document.head.appendChild(script);
103
+ });
104
+ const createScriptPromise = async options => {
105
+ if (typeof window === 'undefined') {
106
+ // Resolve to null when imported server side. This makes the module
107
+ // safe to import in an isomorphic code base.
108
+ return null;
100
109
  }
101
- scriptPromise = new Promise((resolve, reject) => {
110
+ const finalOptions = _extends({}, defaultOptions, options);
111
+ try {
102
112
  var _window$Buddy;
103
- if (typeof window === 'undefined') {
104
- // Resolve to null when imported server side. This makes the module
105
- // safe to import in an isomorphic code base.
106
- resolve(null);
107
- return;
108
- }
113
+ // if our createOffer method is available, then we're already instantiated.
109
114
  if ((_window$Buddy = window.Buddy) != null && _window$Buddy.createOffer) {
110
- var _window$Buddy2;
111
115
  // eslint-disable-next-line no-console
112
116
  console.warn(EXISTING_SCRIPT_MESSAGE);
113
- (_window$Buddy2 = window.Buddy) == null || _window$Buddy2.createOffer(options);
114
- resolve(window.Buddy);
115
- return;
116
- }
117
- try {
118
- const requiredProps = ['ion', 'partnerID'];
119
- const missingRequiredProps = validatePropertiesOfObject(requiredProps, options);
120
- if (missingRequiredProps) {
121
- reject(new Error(missingRequiredProps));
122
- return;
123
- }
124
- if (!(options != null && options.stage)) {
125
- // eslint-disable-next-line no-console
126
- console.warn(`No stage passed to BuddyOfferElement. Using default stage: ${defaultOptions.stage}`);
127
- }
128
- // If stage is passed, ensure it is one of the prescribed options.
129
- if (options != null && options.stage && !STAGES.includes(options.stage)) {
130
- const msg = `The stage prop must be one of: [${STAGES.join(' , ')}], but received "${options.stage}."`;
131
- reject(new Error(msg));
132
- return;
117
+ // Any config scripts might not actually be loaded though, so try and load.
118
+ if (finalOptions.configSrc) {
119
+ // This helper function already checks if the script is loaded or not.
120
+ await asyncLoadScript(finalOptions.configSrc);
133
121
  }
134
- let script = findOfferScript(options == null ? void 0 : options.stage);
135
- if (script) {
136
- var _window$Buddy3;
137
- // eslint-disable-next-line no-console
138
- console.warn(EXISTING_SCRIPT_MESSAGE);
139
- if ((_window$Buddy3 = window.Buddy) != null && _window$Buddy3.createOffer) {
140
- resolve(window.Buddy);
141
- } else {
142
- reject(new Error('Buddy Offer Element not available'));
143
- }
144
- } else if (!script) {
145
- script = injectScript(options);
122
+ // Instantiate the offer. createOffer will bail if frame is already mounted.
123
+ createOffer(finalOptions);
124
+ return window.Buddy;
125
+ }
126
+ const requiredProps = ['ion', 'partnerID'];
127
+ const missingRequiredProps = validatePropertiesOfObject(requiredProps, options);
128
+ if (missingRequiredProps) {
129
+ throw new Error(missingRequiredProps);
130
+ }
131
+ if (!(options != null && options.stage)) {
132
+ // eslint-disable-next-line no-console
133
+ console.warn(`No stage passed to BuddyOfferElement. Using default stage: ${defaultOptions.stage}`);
134
+ }
135
+ // If stage is passed, ensure it is one of the prescribed options.
136
+ if (options != null && options.stage && !STAGES.includes(options.stage)) {
137
+ const msg = `The stage prop must be one of: [${STAGES.join(' , ')}], but received "${options.stage}."`;
138
+ throw new Error(msg);
139
+ }
140
+ const script = findOfferScript(options == null ? void 0 : options.stage);
141
+ if (script) {
142
+ var _window$Buddy2;
143
+ // eslint-disable-next-line no-console
144
+ console.warn(EXISTING_SCRIPT_MESSAGE);
145
+ if ((_window$Buddy2 = window.Buddy) != null && _window$Buddy2.createOffer) {
146
+ // createOffer will prevent any duplicate frames from mounting.
147
+ createOffer(finalOptions);
148
+ return window.Buddy;
146
149
  }
147
- script.addEventListener('load', () => {
148
- var _window$Buddy4;
149
- if ((_window$Buddy4 = window.Buddy) != null && _window$Buddy4.createOffer) {
150
- resolve(window.Buddy);
151
- } else {
152
- reject(new Error('Buddy Offer Element not available'));
153
- }
154
- });
155
- script.addEventListener('error', () => {
156
- reject(new Error('Failed to load Buddy Offer Element'));
157
- });
158
- } catch (error) {
159
- reject(error);
150
+ // if we have a script loaded, but Buddy's not in the window, throw.
151
+ throw new Error('Buddy Offer Element not available');
160
152
  }
161
- });
153
+ // No existing loader script, so time to inject ours.
154
+ const loaderSrc = `${SCRIPTS[finalOptions.stage].URL}`;
155
+ const scriptPromises = [asyncLoadScript(loaderSrc)];
156
+ // if we have a config src, let's load that up too.
157
+ if (finalOptions.configSrc) {
158
+ scriptPromises.push(asyncLoadScript(finalOptions.configSrc));
159
+ }
160
+ // Error out if any scripts fail to load. If someone meant to include a config, we treat that as a fatal issue.
161
+ await Promise.all(scriptPromises);
162
+ createOffer(finalOptions);
163
+ return window.Buddy;
164
+ } catch (error) {
165
+ return Promise.reject(error);
166
+ }
167
+ };
168
+ let scriptPromise = null;
169
+ const loadScript = options => {
170
+ // Ensure that we only attempt to script once
171
+ if (scriptPromise !== null) {
172
+ return scriptPromise;
173
+ }
174
+ scriptPromise = createScriptPromise(options);
162
175
  return scriptPromise;
163
176
  };
164
177
  // This is used to clear our reference to the script promise when the component is unmounted.
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.mjs","sources":["../src/util/dictionary.ts","../src/util/index.ts","../src/hooks/useConfig.tsx","../src/hooks/useUpdateEffect.tsx","../src/components/BuddyOfferElement.tsx"],"sourcesContent":["const EXISTING_SCRIPT_MESSAGE = 'Buddy Offer Script is already loaded.';\n\nconst SCRIPTS = {\n\tLOCAL: {\n\t\tURL: 'http://localhost:8008/index.js',\n\t},\n\t// TODO: Delete this in favor of \"testing\", once we're sure nothing is using it.\n\tDEVELOPMENT: {\n\t\tURL: 'https://js.buddy.insure/v2/dev/index.js',\n\t},\n\tTESTING: {\n\t\tURL: 'https://js.buddy.insure/v2/testing/index.js',\n\t},\n\tSTAGING: {\n\t\tURL: 'https://js.buddy.insure/v2/staging/index.js',\n\t},\n\tPRODUCTION: {\n\t\tURL: 'https://js.buddy.insure/v2/index.js',\n\t},\n} as const;\n\nconst STAGES = Object.keys(SCRIPTS);\n\nexport {\n\tEXISTING_SCRIPT_MESSAGE,\n\tSCRIPTS,\n\tSTAGES,\n};\n","import { EXISTING_SCRIPT_MESSAGE, SCRIPTS, STAGES } from './dictionary';\nimport type { BuddyObject, IWindow } from '../interface';\n\ntype IStages = keyof typeof SCRIPTS;\n\nconst defaultOptions = {\n\tstage: 'STAGING',\n} as const;\n\nconst isEmptyOrNil = (value: any) => {\n\tconst isNil = (val: any) => [undefined, null].includes(val);\n\tconst isEmptyStr = (str: any) => typeof str === 'string' && str.trim().length === 0;\n\tconst isEmptyObjOrArr = (obj: any) => (typeof obj === 'object' && obj.length === undefined &&\n\t\tObject.keys(obj).length === 0) || (Array.isArray(obj) && obj.length === 0);\n\treturn (isNil(value) || isEmptyStr(value) || isEmptyObjOrArr(value));\n};\n\nconst validatePropertiesOfObject = (propsToCheck: string[], obj: Record<string, any>) => {\n\tconst emptyProps = propsToCheck.filter((prop) => isEmptyOrNil(obj[prop]));\n\tif (emptyProps.length) {\n\t\tconst displayMissingProps = emptyProps.reduce((prev, current, i) => {\n\t\t\tconst isLastEl = i === emptyProps.length - 1;\n\t\t\treturn isLastEl ? `${prev}${current}.` : `${prev}${current}, `;\n\t\t}, '');\n\t\treturn `The following props are required: ${displayMissingProps}`;\n\t}\n\treturn null;\n};\n\nexport const findScript = (url: string) => {\n\tconst scripts = Array.from(document.querySelectorAll('script'));\n\treturn scripts.find(({ src }) => src.startsWith(url));\n};\n\nexport const findOfferScript = (stage: IStages = defaultOptions.stage) => {\n\tconst { URL } = SCRIPTS[stage];\n\tconst matchedScript = findScript(URL);\n\treturn matchedScript;\n};\n\nexport const updateOffer = (options: Record<string, any>) => {\n\tif ((window as IWindow).Buddy) {\n\t\ttry {\n\t\t\t(window as IWindow).Buddy!.updateOffer(options);\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n};\n\nconst createOffer = (options: Record<string, any>) => {\n\tif ((window as IWindow).Buddy) {\n\t\ttry {\n\t\t\t(window as IWindow).Buddy!.createOffer(options);\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n};\n\nconst injectScript = (options: Record<string, any>) => {\n\tconst finalOptions = { ...defaultOptions, ...options };\n\tconst script = document.createElement('script');\n\tscript.src = `${SCRIPTS[finalOptions.stage].URL}`;\n\tscript.onload = () => createOffer(finalOptions);\n\tdocument.body.appendChild(script);\n\treturn script;\n};\n\nlet scriptPromise: Promise<BuddyObject | null> | null = null;\n\nexport const loadScript = (options: Record<string, any>) => {\n\t// Ensure that we only attempt to script once\n\tif (scriptPromise !== null) {\n\t\treturn scriptPromise;\n\t}\n\n\tscriptPromise = new Promise((resolve, reject) => {\n\t\tif (typeof window === 'undefined') {\n\t\t\t// Resolve to null when imported server side. This makes the module\n\t\t\t// safe to import in an isomorphic code base.\n\t\t\tresolve(null);\n\t\t\treturn;\n\t\t}\n\n\t\tif ((window as IWindow).Buddy?.createOffer) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(EXISTING_SCRIPT_MESSAGE);\n\t\t\t(window as IWindow).Buddy?.createOffer(options);\n\t\t\tresolve((window as IWindow).Buddy!);\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst requiredProps = ['ion', 'partnerID'];\n\t\t\tconst missingRequiredProps = validatePropertiesOfObject(requiredProps, options);\n\n\t\t\tif (missingRequiredProps) {\n\t\t\t\treject(new Error(missingRequiredProps));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!options?.stage) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(`No stage passed to BuddyOfferElement. Using default stage: ${defaultOptions.stage}`);\n\t\t\t}\n\n\t\t\t// If stage is passed, ensure it is one of the prescribed options.\n\t\t\tif (options?.stage && !STAGES.includes(options.stage)) {\n\t\t\t\tconst msg = `The stage prop must be one of: [${STAGES.join(' , ')}], but received \"${options.stage}.\"`;\n\t\t\t\treject(new Error(msg));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet script = findOfferScript(options?.stage);\n\n\t\t\tif (script) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(EXISTING_SCRIPT_MESSAGE);\n\t\t\t\tif ((window as IWindow).Buddy?.createOffer) {\n\t\t\t\t\tresolve((window as IWindow).Buddy!);\n\t\t\t\t} else {\n\t\t\t\t\treject(new Error('Buddy Offer Element not available'));\n\t\t\t\t}\n\t\t\t} else if (!script) {\n\t\t\t\tscript = injectScript(options);\n\t\t\t}\n\n\t\t\tscript.addEventListener('load', () => {\n\t\t\t\tif ((window as IWindow).Buddy?.createOffer) {\n\t\t\t\t\tresolve((window as IWindow).Buddy!);\n\t\t\t\t} else {\n\t\t\t\t\treject(new Error('Buddy Offer Element not available'));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tscript.addEventListener('error', () => {\n\t\t\t\treject(new Error('Failed to load Buddy Offer Element'));\n\t\t\t});\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\t});\n\n\treturn scriptPromise;\n};\n\n// This is used to clear our reference to the script promise when the component is unmounted.\nexport const clearScriptPromise = () => {\n\tscriptPromise = null;\n};\n","import { useEffect, useState } from 'react';\nimport { findScript } from '../util';\nimport type { IWindow, ConfigObject } from '../interface';\n\nfunction useConfig(src: string) {\n\tconst [config, setConfig] = useState<ConfigObject | null>(null);\n\tconst [isLoading, setIsLoading] = useState(true);\n\n\tconst hasConfig = typeof window !== 'undefined';\n\n\tuseEffect(() => {\n\t\tlet script = findScript(src);\n\n\t\tif (!script) {\n\t\t\tscript = document.createElement('script');\n\t\t\tscript.src = src;\n\n\t\t\tscript.onload = () => {\n\t\t\t\t// Assuming the script sets a global variable named 'config'\n\t\t\t\tif (hasConfig) {\n\t\t\t\t\tsetConfig((window as IWindow).Buddy!.config!);\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdocument.body.appendChild(script);\n\t\t} else {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('Config script is already loaded.');\n\t\t\tif (hasConfig) {\n\t\t\t\tsetConfig((window as IWindow).Buddy!.config!);\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (script) {\n\t\t\t\tdocument.body.removeChild(script);\n\t\t\t}\n\t\t};\n\t}, [src]);\n\n\treturn { config, isLoading };\n}\n\nexport default useConfig;\n","import { useEffect, useRef } from 'react';\n\nconst useUpdateEffect: typeof useEffect = (effect, deps) => {\n\tconst isFirstMount = useRef<boolean>(true);\n\t// need to return only in the else condition in case a cleanup func is passed in effect.\n\t// eslint-disable-next-line consistent-return\n\tuseEffect(() => {\n\t\tif (isFirstMount.current) {\n\t\t\tisFirstMount.current = false;\n\t\t} else {\n\t\t\treturn effect();\n\t\t}\n\t}, deps);\n};\n\nexport default useUpdateEffect;\n","import React, { useEffect } from 'react';\nimport { useUpdateEffect } from '../hooks';\nimport { loadScript, clearScriptPromise, updateOffer } from '../util';\nimport type { BuddyOfferElementProps } from '../interface';\n\nfunction BuddyOfferElement(options: BuddyOfferElementProps) {\n\tuseEffect(() => {\n\t\tconst getScript = async () => {\n\t\t\ttry {\n\t\t\t\tawait loadScript(options);\n\t\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t};\n\t\tgetScript();\n\t\treturn () => {\n\t\t\tclearScriptPromise();\n\t\t};\n\t}, []);\n\n\tuseUpdateEffect(() => {\n\t\tupdateOffer(options);\n\t}, [options]);\n\n\treturn (\n\t\t<div id=\"buddy_offer\" />\n\t);\n}\n\nexport default BuddyOfferElement;\n"],"names":["EXISTING_SCRIPT_MESSAGE","SCRIPTS","LOCAL","URL","DEVELOPMENT","TESTING","STAGING","PRODUCTION","STAGES","Object","keys","defaultOptions","stage","isEmptyOrNil","value","isNil","val","undefined","includes","isEmptyStr","str","trim","length","isEmptyObjOrArr","obj","Array","isArray","validatePropertiesOfObject","propsToCheck","emptyProps","filter","prop","displayMissingProps","reduce","prev","current","i","isLastEl","findScript","url","scripts","from","document","querySelectorAll","find","src","startsWith","findOfferScript","matchedScript","updateOffer","options","window","Buddy","error","console","createOffer","injectScript","finalOptions","_extends","script","createElement","onload","body","appendChild","scriptPromise","loadScript","Promise","resolve","reject","_window$Buddy","_window$Buddy2","warn","requiredProps","missingRequiredProps","Error","msg","join","_window$Buddy3","addEventListener","_window$Buddy4","clearScriptPromise","useConfig","config","setConfig","useState","isLoading","setIsLoading","hasConfig","useEffect","removeChild","useUpdateEffect","effect","deps","isFirstMount","useRef","BuddyOfferElement","getScript","React","id"],"mappings":"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"}
1
+ {"version":3,"file":"index.modern.mjs","sources":["../src/util/dictionary.ts","../src/util/index.ts","../src/hooks/useConfig.tsx","../src/hooks/useUpdateEffect.tsx","../src/components/BuddyOfferElement.tsx"],"sourcesContent":["const EXISTING_SCRIPT_MESSAGE = 'Buddy Offer Script is already loaded.';\n\nconst SCRIPTS = {\n\tLOCAL: {\n\t\tURL: 'http://localhost:8008/index.js',\n\t},\n\t// TODO: Delete this in favor of \"testing\", once we're sure nothing is using it.\n\tDEVELOPMENT: {\n\t\tURL: 'https://js.buddy.insure/v2/dev/index.js',\n\t},\n\tTESTING: {\n\t\tURL: 'https://js.buddy.insure/v2/testing/index.js',\n\t},\n\tSTAGING: {\n\t\tURL: 'https://js.buddy.insure/v2/staging/index.js',\n\t},\n\tPRODUCTION: {\n\t\tURL: 'https://js.buddy.insure/v2/index.js',\n\t},\n} as const;\n\nconst STAGES = Object.keys(SCRIPTS);\n\nexport {\n\tEXISTING_SCRIPT_MESSAGE,\n\tSCRIPTS,\n\tSTAGES,\n};\n","import { EXISTING_SCRIPT_MESSAGE, SCRIPTS, STAGES } from './dictionary';\nimport type { BuddyObject, IWindow, BuddyOfferElementProps } from '../interface';\n\ntype IStages = keyof typeof SCRIPTS;\n\nconst defaultOptions: Partial<BuddyOfferElementProps> = {\n\tstage: 'STAGING',\n} as const;\n\nconst isEmptyOrNil = (value: any) => {\n\tconst isNil = (val: any) => [undefined, null].includes(val);\n\tconst isEmptyStr = (str: any) => typeof str === 'string' && str.trim().length === 0;\n\tconst isEmptyObjOrArr = (obj: any) => (typeof obj === 'object' && obj.length === undefined &&\n\t\tObject.keys(obj).length === 0) || (Array.isArray(obj) && obj.length === 0);\n\treturn (isNil(value) || isEmptyStr(value) || isEmptyObjOrArr(value));\n};\n\nconst validatePropertiesOfObject = (propsToCheck: string[], obj: Record<string, any>) => {\n\tconst emptyProps = propsToCheck.filter((prop) => isEmptyOrNil(obj[prop]));\n\tif (emptyProps.length) {\n\t\tconst displayMissingProps = emptyProps.reduce((prev, current, i) => {\n\t\t\tconst isLastEl = i === emptyProps.length - 1;\n\t\t\treturn isLastEl ? `${prev}${current}.` : `${prev}${current}, `;\n\t\t}, '');\n\t\treturn `The following props are required: ${displayMissingProps}`;\n\t}\n\treturn null;\n};\n\nexport const findScript = (url: string) => {\n\tconst scripts = Array.from(document.querySelectorAll('script'));\n\treturn scripts.find(({ src }) => src.startsWith(url));\n};\n\nexport const findOfferScript = (stage: IStages = defaultOptions.stage!) => {\n\tconst { URL } = SCRIPTS[stage];\n\tconst matchedScript = findScript(URL);\n\treturn matchedScript;\n};\n\nexport const updateOffer = (options: Record<string, any>) => {\n\tif ((window as IWindow).Buddy) {\n\t\ttry {\n\t\t\t(window as IWindow).Buddy!.updateOffer(options);\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n};\n\nconst createOffer = (options: Record<string, any>) => {\n\tif ((window as IWindow).Buddy) {\n\t\ttry {\n\t\t\t(window as IWindow).Buddy!.createOffer(options);\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n};\n\nconst asyncLoadScript = (src: string) => new Promise((resolve, reject) => {\n\tconst existingScript = findScript(src);\n\n\tif (existingScript) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.warn(`Script with src [${src}] is already loaded!`);\n\t\tresolve(existingScript);\n\t}\n\n\tconst script = document.createElement('script');\n\tscript.src = src;\n\tscript.onload = resolve;\n\tscript.onerror = () => {\n\t\t// bad script, so let's remove it in case folks want to retry.\n\t\tdocument.head.removeChild(script);\n\t\treject(new Error(`Failed to load script with src: [${src}].`));\n\t};\n\tdocument.head.appendChild(script);\n});\n\nconst createScriptPromise = async (options: Record<string, any>) => {\n\tif (typeof window === 'undefined') {\n\t\t// Resolve to null when imported server side. This makes the module\n\t\t// safe to import in an isomorphic code base.\n\t\treturn null;\n\t}\n\n\tconst finalOptions = { ...defaultOptions, ...options };\n\n\ttry {\n\t// if our createOffer method is available, then we're already instantiated.\n\t\tif ((window as IWindow).Buddy?.createOffer) {\n\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(EXISTING_SCRIPT_MESSAGE);\n\n\t\t\t// Any config scripts might not actually be loaded though, so try and load.\n\t\t\tif (finalOptions.configSrc) {\n\t\t\t\t// This helper function already checks if the script is loaded or not.\n\t\t\t\tawait asyncLoadScript(finalOptions.configSrc);\n\t\t\t}\n\t\t\t// Instantiate the offer. createOffer will bail if frame is already mounted.\n\t\t\tcreateOffer(finalOptions);\n\t\t\treturn (window as IWindow).Buddy!;\n\t\t}\n\n\t\tconst requiredProps = ['ion', 'partnerID'];\n\t\tconst missingRequiredProps = validatePropertiesOfObject(requiredProps, options);\n\n\t\tif (missingRequiredProps) {\n\t\t\tthrow new Error(missingRequiredProps);\n\t\t}\n\n\t\tif (!options?.stage) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(`No stage passed to BuddyOfferElement. Using default stage: ${defaultOptions.stage}`);\n\t\t}\n\n\t\t// If stage is passed, ensure it is one of the prescribed options.\n\t\tif (options?.stage && !STAGES.includes(options.stage)) {\n\t\t\tconst msg = `The stage prop must be one of: [${STAGES.join(' , ')}], but received \"${options.stage}.\"`;\n\t\t\tthrow new Error(msg);\n\t\t}\n\n\t\tconst script = findOfferScript(options?.stage);\n\n\t\tif (script) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(EXISTING_SCRIPT_MESSAGE);\n\t\t\tif ((window as IWindow).Buddy?.createOffer) {\n\t\t\t\t// createOffer will prevent any duplicate frames from mounting.\n\t\t\t\tcreateOffer(finalOptions);\n\t\t\t\treturn (window as IWindow).Buddy!;\n\t\t\t}\n\t\t\t// if we have a script loaded, but Buddy's not in the window, throw.\n\t\t\tthrow new Error('Buddy Offer Element not available');\n\t\t}\n\n\t\t// No existing loader script, so time to inject ours.\n\t\tconst loaderSrc = `${SCRIPTS[finalOptions.stage!].URL}`;\n\n\t\tconst scriptPromises = [asyncLoadScript(loaderSrc)];\n\n\t\t// if we have a config src, let's load that up too.\n\t\tif (finalOptions.configSrc) {\n\t\t\tscriptPromises.push(asyncLoadScript(finalOptions.configSrc));\n\t\t}\n\n\t\t// Error out if any scripts fail to load. If someone meant to include a config, we treat that as a fatal issue.\n\t\tawait Promise.all(scriptPromises);\n\t\tcreateOffer(finalOptions);\n\n\t\treturn (window as IWindow).Buddy!;\n\t} catch (error) {\n\t\treturn Promise.reject(error);\n\t}\n};\n\nlet scriptPromise: Promise<BuddyObject | null> | null = null;\n\nexport const loadScript = (options: Record<string, any>) => {\n\t// Ensure that we only attempt to script once\n\tif (scriptPromise !== null) {\n\t\treturn scriptPromise;\n\t}\n\n\tscriptPromise = createScriptPromise(options);\n\n\treturn scriptPromise;\n};\n\n// This is used to clear our reference to the script promise when the component is unmounted.\nexport const clearScriptPromise = () => {\n\tscriptPromise = null;\n};\n","import { useEffect, useState } from 'react';\nimport { findScript } from '../util';\nimport type { IWindow, ConfigObject } from '../interface';\n\nfunction useConfig(src: string) {\n\tconst [config, setConfig] = useState<ConfigObject | null>(null);\n\tconst [isLoading, setIsLoading] = useState(true);\n\n\tconst hasConfig = typeof window !== 'undefined';\n\n\tuseEffect(() => {\n\t\tlet script = findScript(src);\n\n\t\tif (!script) {\n\t\t\tscript = document.createElement('script');\n\t\t\tscript.src = src;\n\n\t\t\tscript.onload = () => {\n\t\t\t\t// Assuming the script sets a global variable named 'config'\n\t\t\t\tif (hasConfig) {\n\t\t\t\t\tsetConfig((window as IWindow).Buddy!.config!);\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdocument.body.appendChild(script);\n\t\t} else {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('Config script is already loaded.');\n\t\t\tif (hasConfig) {\n\t\t\t\tsetConfig((window as IWindow).Buddy!.config!);\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (script) {\n\t\t\t\tdocument.body.removeChild(script);\n\t\t\t}\n\t\t};\n\t}, [src]);\n\n\treturn { config, isLoading };\n}\n\nexport default useConfig;\n","import { useEffect, useRef } from 'react';\n\nconst useUpdateEffect: typeof useEffect = (effect, deps) => {\n\tconst isFirstMount = useRef<boolean>(true);\n\t// need to return only in the else condition in case a cleanup func is passed in effect.\n\t// eslint-disable-next-line consistent-return\n\tuseEffect(() => {\n\t\tif (isFirstMount.current) {\n\t\t\tisFirstMount.current = false;\n\t\t} else {\n\t\t\treturn effect();\n\t\t}\n\t}, deps);\n};\n\nexport default useUpdateEffect;\n","import React, { useEffect } from 'react';\nimport { useUpdateEffect } from '../hooks';\nimport { loadScript, clearScriptPromise, updateOffer } from '../util';\nimport type { BuddyOfferElementProps } from '../interface';\n\nfunction BuddyOfferElement(options: BuddyOfferElementProps) {\n\tuseEffect(() => {\n\t\tconst getScript = async () => {\n\t\t\ttry {\n\t\t\t\tawait loadScript(options);\n\t\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t};\n\t\tgetScript();\n\t\treturn () => {\n\t\t\tclearScriptPromise();\n\t\t};\n\t}, []);\n\n\tuseUpdateEffect(() => {\n\t\tupdateOffer(options);\n\t}, [options]);\n\n\treturn (\n\t\t<div id=\"buddy_offer\" />\n\t);\n}\n\nexport default BuddyOfferElement;\n"],"names":["EXISTING_SCRIPT_MESSAGE","SCRIPTS","LOCAL","URL","DEVELOPMENT","TESTING","STAGING","PRODUCTION","STAGES","Object","keys","defaultOptions","stage","isEmptyOrNil","value","isNil","val","undefined","includes","isEmptyStr","str","trim","length","isEmptyObjOrArr","obj","Array","isArray","validatePropertiesOfObject","propsToCheck","emptyProps","filter","prop","displayMissingProps","reduce","prev","current","i","isLastEl","findScript","url","scripts","from","document","querySelectorAll","find","src","startsWith","findOfferScript","matchedScript","updateOffer","options","window","Buddy","error","console","createOffer","asyncLoadScript","Promise","resolve","reject","existingScript","warn","script","createElement","onload","onerror","head","removeChild","Error","appendChild","createScriptPromise","finalOptions","_extends","_window$Buddy","configSrc","requiredProps","missingRequiredProps","msg","join","_window$Buddy2","loaderSrc","scriptPromises","push","all","scriptPromise","loadScript","clearScriptPromise","useConfig","config","setConfig","useState","isLoading","setIsLoading","hasConfig","useEffect","body","useUpdateEffect","effect","deps","isFirstMount","useRef","BuddyOfferElement","getScript","React","id"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  type ConfigObject = Record<string, any>;
2
2
  interface BuddyObject {
3
3
  createOffer: (options: any) => void;
4
+ embedOptions: Partial<BuddyOfferElementProps>;
4
5
  updateOffer: (options: any) => void;
5
6
  config?: ConfigObject;
6
7
  }
@@ -65,6 +66,7 @@ interface IEndorsementError {
65
66
  interface BuddyOfferElementProps {
66
67
  ion: string;
67
68
  partnerID: string;
69
+ configSrc?: string;
68
70
  data?: DataObject;
69
71
  debug?: boolean;
70
72
  includeCheckout?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interface/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interface/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,OAAO,EAAU,MAAM,cAAc,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAW,MAAM,cAAc,CAAC;AAEzD,KAAK,OAAO,GAAG,MAAM,OAAO,OAAO,CAAC;AA0BpC,eAAO,MAAM,UAAU,QAAS,MAAM,kCAGrC,CAAC;AAEF,eAAO,MAAM,eAAe,WAAW,OAAO,kCAI7C,CAAC;AAEF,eAAO,MAAM,WAAW,YAAa,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,SASvD,CAAC;AAwBF,eAAO,MAAM,UAAU,YAAa,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,gCA0EtD,CAAC;AAGF,eAAO,MAAM,kBAAkB,YAE9B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,OAAO,EAAU,MAAM,cAAc,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAmC,MAAM,cAAc,CAAC;AAEjF,KAAK,OAAO,GAAG,MAAM,OAAO,OAAO,CAAC;AA0BpC,eAAO,MAAM,UAAU,QAAS,MAAM,kCAGrC,CAAC;AAEF,eAAO,MAAM,eAAe,WAAW,OAAO,kCAI7C,CAAC;AAEF,eAAO,MAAM,WAAW,YAAa,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,SASvD,CAAC;AAgHF,eAAO,MAAM,UAAU,YAAa,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,gCAStD,CAAC;AAGF,eAAO,MAAM,kBAAkB,YAE9B,CAAC"}
package/package.json CHANGED
@@ -1,12 +1,11 @@
1
1
  {
2
2
  "name": "@buddy-technology/offer-component",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "author": "Buddy Technology",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.modern.mjs",
7
7
  "types": "./lib/index.d.ts",
8
8
  "license": "UNLICENSED",
9
- "private": false,
10
9
  "repository": {
11
10
  "type": "git",
12
11
  "url": "git://github.com/Buddy-Technology/ion-to-react.git",