@fungies/fungies-js 0.0.2 → 0.0.3

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.
@@ -0,0 +1,5 @@
1
+ ---
2
+ "@fungies/fungies-js": patch
3
+ ---
4
+
5
+ Auto open embed checkout
package/.gitlab-ci.yml ADDED
@@ -0,0 +1,73 @@
1
+ .fungies-js-rules:
2
+ rules:
3
+ - &fungies-js-changes-on-master
4
+ if: $CI_COMMIT_BRANCH == "master"
5
+ changes:
6
+ paths:
7
+ - "packages/fungies-js/**/*"
8
+ - &fungies-js-changes-on-mr
9
+ if: $CI_COMMIT_BRANCH != "master" && $CI_PIPELINE_SOURCE == "merge_request_event"
10
+ changes:
11
+ compare_to: "refs/heads/master"
12
+ paths:
13
+ - "packages/fungies-js/**/*"
14
+
15
+ fungies-js-build:
16
+ stage: build
17
+ extends: .use-monorepo
18
+ script:
19
+ - pnpm --filter @fungies/fungies-js install --frozen-lockfile
20
+ - pnpm --filter @fungies/fungies-js biome lint
21
+ - if [ "$CI_PIPELINE_SOURCE" = "merge_request_event" ]; then echo "$CI_MERGE_REQUEST_TITLE"; fi
22
+ - pnpm --filter @fungies/fungies-js build
23
+ rules:
24
+ - *fungies-js-changes-on-master
25
+ - *fungies-js-changes-on-mr
26
+ tags:
27
+ - dedicated
28
+
29
+ fungies-js-publish:
30
+ stage: publish
31
+ extends: .use-monorepo
32
+ script:
33
+ - |
34
+ echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc
35
+
36
+ cd packages/fungies-js
37
+ pnpm install --frozen-lockfile
38
+
39
+ # Check for changes
40
+ npx @changesets/cli status --output=release.json || true
41
+
42
+ if [ ! -f "release.json" ]; then
43
+ echo "No changes to publish"
44
+ exit 0
45
+ fi
46
+
47
+ CHANGED_PACKAGES=$(jq -r '.releases | map(.name + "@" + .newVersion) | join(", ")' release.json)
48
+ echo "CHANGED_PACKAGES=$CHANGED_PACKAGES" >> variables.env
49
+
50
+ # Create commit with release info
51
+ git config --global user.name "GitLab CI"
52
+ git config --global user.email "gitlab-ci@example.com"
53
+
54
+ # Run the release process
55
+ pnpm run release
56
+
57
+ # Commit and push changes
58
+ git add .
59
+ git commit -m "chore(release): $CHANGED_PACKAGES"
60
+ git push origin $CI_COMMIT_BRANCH
61
+ rules:
62
+ - if: $CI_COMMIT_BRANCH == "master"
63
+ when: manual
64
+ needs:
65
+ - job: fungies-js-build
66
+ optional: true
67
+ variables:
68
+ GIT_STRATEGY: clone
69
+ artifacts:
70
+ reports:
71
+ dotenv: packages/fungies-js/variables.env
72
+ tags:
73
+ - dedicated
package/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # Changelog
2
+
3
+ ## [0.0.3] - 2025-04-01
4
+
5
+ -Allow to open embed checkout automatically.
package/dist/index.js CHANGED
@@ -24,16 +24,6 @@ __export(index_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(index_exports);
26
26
 
27
- // src/constants/checkout.ts
28
- var CHECKOUT_FRAME_CLOSED = "Checkout frame/window has been closed.";
29
- var CHECKOUT_EVENTS = {
30
- CHECKOUT_CLOSE: "closeWindow"
31
- };
32
- var CHECKOUT_MODE = {
33
- EMBED: "embed",
34
- OVERLAY: "overlay"
35
- };
36
-
37
27
  // src/lib/logger.ts
38
28
  var createLoggerConfig = () => ({
39
29
  isEnabled: true
@@ -52,20 +42,6 @@ var log = (message, type = "log" /* LOG */, alwaysShow = false, config = createL
52
42
  }
53
43
  };
54
44
 
55
- // src/utils/device.ts
56
- function isMobile() {
57
- let check = false;
58
- ((a) => {
59
- if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(
60
- a
61
- ) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(
62
- a.substr(0, 4)
63
- ))
64
- check = true;
65
- })(navigator.userAgent || navigator.vendor);
66
- return check;
67
- }
68
-
69
45
  // src/utils/html.ts
70
46
  function each(className, callback) {
71
47
  const elements = document.getElementsByClassName(className);
@@ -79,20 +55,6 @@ function each(className, callback) {
79
55
  }
80
56
  }
81
57
 
82
- // src/utils/url.ts
83
- var encodeForTransport = (jsonString) => {
84
- return encodeURIComponent(encodeURIComponent(jsonString));
85
- };
86
- var getCheckoutFrontEndURL = (checkoutInputAttributes, checkoutUrl, mode) => {
87
- const url = new URL(checkoutUrl);
88
- url.searchParams.append("fngs-checkout-payload", encodeForTransport(JSON.stringify(checkoutInputAttributes)));
89
- url.searchParams.append("fngs-display-mode", mode);
90
- return url.toString();
91
- };
92
- var getCheckoutUrl = ({ checkoutUrl, ...restProps }, mode) => {
93
- return getCheckoutFrontEndURL(restProps, checkoutUrl, mode);
94
- };
95
-
96
58
  // src/helpers/checkout.ts
97
59
  function showLoading() {
98
60
  hideLoading();
@@ -135,6 +97,97 @@ function hideLoading() {
135
97
  loader?.parentNode?.removeChild(loader);
136
98
  });
137
99
  }
100
+ function getCheckoutOptions(element) {
101
+ const checkoutUrl = element.getAttribute("data-fungies-checkout-url");
102
+ if (!checkoutUrl) {
103
+ log(
104
+ "Element has data-fungies-checkout-url attribute but no value",
105
+ "warning" /* WARNING */
106
+ );
107
+ }
108
+ const modeAttr = element.getAttribute("data-fungies-mode");
109
+ const mode = modeAttr === "embed" || modeAttr === "overlay" ? modeAttr : "overlay";
110
+ const frameTarget = element.getAttribute("data-fungies-frame-target") || void 0;
111
+ const discountCode = element.getAttribute("data-fungies-discount-code") || void 0;
112
+ const customerEmail = element.getAttribute("data-fungies-customer-email") || void 0;
113
+ const quantityAttr = element.getAttribute("data-fungies-quantity");
114
+ const quantity = quantityAttr ? Number.parseInt(quantityAttr, 10) : void 0;
115
+ let items = void 0;
116
+ const itemsAttr = element.getAttribute("data-fungies-items");
117
+ if (itemsAttr) {
118
+ try {
119
+ items = JSON.parse(itemsAttr);
120
+ } catch (_error) {
121
+ log(
122
+ `Invalid JSON in data-fungies-items: ${itemsAttr}`,
123
+ "warning" /* WARNING */
124
+ );
125
+ }
126
+ }
127
+ let customFields = void 0;
128
+ const customFieldsAttr = element.getAttribute("data-fungies-custom-fields");
129
+ if (customFieldsAttr) {
130
+ try {
131
+ customFields = JSON.parse(customFieldsAttr);
132
+ } catch (_error) {
133
+ log(
134
+ `Invalid JSON in data-fungies-custom-fields: ${customFieldsAttr}`,
135
+ "warning" /* WARNING */
136
+ );
137
+ }
138
+ }
139
+ const checkoutOptions = {
140
+ checkoutUrl,
141
+ settings: {
142
+ mode,
143
+ ...frameTarget && { frameTarget }
144
+ },
145
+ ...discountCode && { discountCode },
146
+ ...customerEmail && { customerEmail },
147
+ ...quantity && { quantity },
148
+ ...items && { items },
149
+ ...customFields && { customFields }
150
+ };
151
+ return checkoutOptions;
152
+ }
153
+
154
+ // src/constants/checkout.ts
155
+ var CHECKOUT_FRAME_CLOSED = "Checkout frame/window has been closed.";
156
+ var CHECKOUT_EVENTS = {
157
+ CHECKOUT_CLOSE: "closeWindow"
158
+ };
159
+ var CHECKOUT_MODE = {
160
+ EMBED: "embed",
161
+ OVERLAY: "overlay"
162
+ };
163
+
164
+ // src/utils/device.ts
165
+ function isMobile() {
166
+ let check = false;
167
+ ((a) => {
168
+ if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(
169
+ a
170
+ ) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(
171
+ a.substr(0, 4)
172
+ ))
173
+ check = true;
174
+ })(navigator.userAgent || navigator.vendor);
175
+ return check;
176
+ }
177
+
178
+ // src/utils/url.ts
179
+ var encodeForTransport = (jsonString) => {
180
+ return encodeURIComponent(encodeURIComponent(jsonString));
181
+ };
182
+ var getCheckoutFrontEndURL = (checkoutInputAttributes, checkoutUrl, mode) => {
183
+ const url = new URL(checkoutUrl);
184
+ url.searchParams.append("fngs-checkout-payload", encodeForTransport(JSON.stringify(checkoutInputAttributes)));
185
+ url.searchParams.append("fngs-display-mode", mode);
186
+ return url.toString();
187
+ };
188
+ var getCheckoutUrl = ({ checkoutUrl, ...restProps }, mode) => {
189
+ return getCheckoutFrontEndURL(restProps, checkoutUrl, mode);
190
+ };
138
191
 
139
192
  // src/helpers/iframe.ts
140
193
  var closeCheckoutIFrame = () => {
@@ -215,61 +268,27 @@ var closeCheckout = () => {
215
268
  // src/helpers/dom.ts
216
269
  var scanForCheckoutElements = () => {
217
270
  log("Scanning for checkout elements");
218
- const newFormatElements = document.querySelectorAll("[data-fungies-checkout-url]:not([data-fungies-initialized])");
271
+ const newFormatElements = document.querySelectorAll(
272
+ "[data-fungies-checkout-url]:not([data-fungies-initialized])"
273
+ );
219
274
  for (const element of newFormatElements) {
220
- const checkoutUrl = element.getAttribute("data-fungies-checkout-url");
221
- if (!checkoutUrl) {
222
- log("Element has data-fungies-checkout-url attribute but no value", "warning" /* WARNING */);
223
- continue;
224
- }
225
- const modeAttr = element.getAttribute("data-fungies-mode");
226
- const mode = modeAttr === "embed" || modeAttr === "overlay" ? modeAttr : "overlay";
227
- const frameTarget = element.getAttribute("data-fungies-frame-target") || void 0;
228
- const discountCode = element.getAttribute("data-fungies-discount-code") || void 0;
229
- const customerEmail = element.getAttribute("data-fungies-customer-email") || void 0;
230
- const quantityAttr = element.getAttribute("data-fungies-quantity");
231
- const quantity = quantityAttr ? Number.parseInt(quantityAttr, 10) : void 0;
232
- let items = void 0;
233
- const itemsAttr = element.getAttribute("data-fungies-items");
234
- if (itemsAttr) {
235
- try {
236
- items = JSON.parse(itemsAttr);
237
- } catch (_error) {
238
- log(`Invalid JSON in data-fungies-items: ${itemsAttr}`, "warning" /* WARNING */);
239
- }
240
- }
241
- let customFields = void 0;
242
- const customFieldsAttr = element.getAttribute("data-fungies-custom-fields");
243
- if (customFieldsAttr) {
244
- try {
245
- customFields = JSON.parse(customFieldsAttr);
246
- } catch (_error) {
247
- log(`Invalid JSON in data-fungies-custom-fields: ${customFieldsAttr}`, "warning" /* WARNING */);
248
- }
249
- }
250
- const checkoutOptions = {
251
- checkoutUrl,
252
- settings: {
253
- mode,
254
- ...frameTarget && { frameTarget }
255
- },
256
- ...discountCode && { discountCode },
257
- ...customerEmail && { customerEmail },
258
- ...quantity && { quantity },
259
- ...items && { items },
260
- ...customFields && { customFields }
261
- };
275
+ const checkoutOptions = getCheckoutOptions(element);
262
276
  element.addEventListener("click", (event) => {
263
277
  event.preventDefault();
264
278
  openCheckout(checkoutOptions);
265
279
  });
266
280
  element.setAttribute("data-fungies-initialized", "true");
267
281
  }
268
- const legacyFormatElements = document.querySelectorAll("[data-fungies-button]:not([data-fungies-initialized])");
282
+ const legacyFormatElements = document.querySelectorAll(
283
+ "[data-fungies-button]:not([data-fungies-initialized])"
284
+ );
269
285
  for (const element of legacyFormatElements) {
270
286
  const buttonUrl = element.getAttribute("data-fungies-button");
271
287
  if (!buttonUrl) {
272
- log("Element has data-fungies-button attribute but no value", "warning" /* WARNING */);
288
+ log(
289
+ "Element has data-fungies-button attribute but no value",
290
+ "warning" /* WARNING */
291
+ );
273
292
  continue;
274
293
  }
275
294
  try {
@@ -278,7 +297,10 @@ var scanForCheckoutElements = () => {
278
297
  const checkoutElementIndex = pathParts.indexOf("checkout-element");
279
298
  const overlayIndex = pathParts.indexOf("overlay");
280
299
  if (checkoutElementIndex === -1 && overlayIndex === -1) {
281
- log(`Invalid URL in data-fungies-button: ${buttonUrl}`, "warning" /* WARNING */);
300
+ log(
301
+ `Invalid URL in data-fungies-button: ${buttonUrl}`,
302
+ "warning" /* WARNING */
303
+ );
282
304
  continue;
283
305
  }
284
306
  const mode = "overlay";
@@ -393,6 +415,10 @@ if (typeof document !== "undefined") {
393
415
  Fungies.Initialize({
394
416
  enableDataAttributes: true
395
417
  });
418
+ if (currentScript?.hasAttribute("data-auto-display-checkout")) {
419
+ const checkoutOptions = getCheckoutOptions(currentScript);
420
+ Fungies.Checkout.open(checkoutOptions);
421
+ }
396
422
  });
397
423
  }
398
424
  }
package/dist/index.mjs CHANGED
@@ -1,13 +1,3 @@
1
- // src/constants/checkout.ts
2
- var CHECKOUT_FRAME_CLOSED = "Checkout frame/window has been closed.";
3
- var CHECKOUT_EVENTS = {
4
- CHECKOUT_CLOSE: "closeWindow"
5
- };
6
- var CHECKOUT_MODE = {
7
- EMBED: "embed",
8
- OVERLAY: "overlay"
9
- };
10
-
11
1
  // src/lib/logger.ts
12
2
  var createLoggerConfig = () => ({
13
3
  isEnabled: true
@@ -26,20 +16,6 @@ var log = (message, type = "log" /* LOG */, alwaysShow = false, config = createL
26
16
  }
27
17
  };
28
18
 
29
- // src/utils/device.ts
30
- function isMobile() {
31
- let check = false;
32
- ((a) => {
33
- if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(
34
- a
35
- ) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(
36
- a.substr(0, 4)
37
- ))
38
- check = true;
39
- })(navigator.userAgent || navigator.vendor);
40
- return check;
41
- }
42
-
43
19
  // src/utils/html.ts
44
20
  function each(className, callback) {
45
21
  const elements = document.getElementsByClassName(className);
@@ -53,20 +29,6 @@ function each(className, callback) {
53
29
  }
54
30
  }
55
31
 
56
- // src/utils/url.ts
57
- var encodeForTransport = (jsonString) => {
58
- return encodeURIComponent(encodeURIComponent(jsonString));
59
- };
60
- var getCheckoutFrontEndURL = (checkoutInputAttributes, checkoutUrl, mode) => {
61
- const url = new URL(checkoutUrl);
62
- url.searchParams.append("fngs-checkout-payload", encodeForTransport(JSON.stringify(checkoutInputAttributes)));
63
- url.searchParams.append("fngs-display-mode", mode);
64
- return url.toString();
65
- };
66
- var getCheckoutUrl = ({ checkoutUrl, ...restProps }, mode) => {
67
- return getCheckoutFrontEndURL(restProps, checkoutUrl, mode);
68
- };
69
-
70
32
  // src/helpers/checkout.ts
71
33
  function showLoading() {
72
34
  hideLoading();
@@ -109,6 +71,97 @@ function hideLoading() {
109
71
  loader?.parentNode?.removeChild(loader);
110
72
  });
111
73
  }
74
+ function getCheckoutOptions(element) {
75
+ const checkoutUrl = element.getAttribute("data-fungies-checkout-url");
76
+ if (!checkoutUrl) {
77
+ log(
78
+ "Element has data-fungies-checkout-url attribute but no value",
79
+ "warning" /* WARNING */
80
+ );
81
+ }
82
+ const modeAttr = element.getAttribute("data-fungies-mode");
83
+ const mode = modeAttr === "embed" || modeAttr === "overlay" ? modeAttr : "overlay";
84
+ const frameTarget = element.getAttribute("data-fungies-frame-target") || void 0;
85
+ const discountCode = element.getAttribute("data-fungies-discount-code") || void 0;
86
+ const customerEmail = element.getAttribute("data-fungies-customer-email") || void 0;
87
+ const quantityAttr = element.getAttribute("data-fungies-quantity");
88
+ const quantity = quantityAttr ? Number.parseInt(quantityAttr, 10) : void 0;
89
+ let items = void 0;
90
+ const itemsAttr = element.getAttribute("data-fungies-items");
91
+ if (itemsAttr) {
92
+ try {
93
+ items = JSON.parse(itemsAttr);
94
+ } catch (_error) {
95
+ log(
96
+ `Invalid JSON in data-fungies-items: ${itemsAttr}`,
97
+ "warning" /* WARNING */
98
+ );
99
+ }
100
+ }
101
+ let customFields = void 0;
102
+ const customFieldsAttr = element.getAttribute("data-fungies-custom-fields");
103
+ if (customFieldsAttr) {
104
+ try {
105
+ customFields = JSON.parse(customFieldsAttr);
106
+ } catch (_error) {
107
+ log(
108
+ `Invalid JSON in data-fungies-custom-fields: ${customFieldsAttr}`,
109
+ "warning" /* WARNING */
110
+ );
111
+ }
112
+ }
113
+ const checkoutOptions = {
114
+ checkoutUrl,
115
+ settings: {
116
+ mode,
117
+ ...frameTarget && { frameTarget }
118
+ },
119
+ ...discountCode && { discountCode },
120
+ ...customerEmail && { customerEmail },
121
+ ...quantity && { quantity },
122
+ ...items && { items },
123
+ ...customFields && { customFields }
124
+ };
125
+ return checkoutOptions;
126
+ }
127
+
128
+ // src/constants/checkout.ts
129
+ var CHECKOUT_FRAME_CLOSED = "Checkout frame/window has been closed.";
130
+ var CHECKOUT_EVENTS = {
131
+ CHECKOUT_CLOSE: "closeWindow"
132
+ };
133
+ var CHECKOUT_MODE = {
134
+ EMBED: "embed",
135
+ OVERLAY: "overlay"
136
+ };
137
+
138
+ // src/utils/device.ts
139
+ function isMobile() {
140
+ let check = false;
141
+ ((a) => {
142
+ if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(
143
+ a
144
+ ) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(
145
+ a.substr(0, 4)
146
+ ))
147
+ check = true;
148
+ })(navigator.userAgent || navigator.vendor);
149
+ return check;
150
+ }
151
+
152
+ // src/utils/url.ts
153
+ var encodeForTransport = (jsonString) => {
154
+ return encodeURIComponent(encodeURIComponent(jsonString));
155
+ };
156
+ var getCheckoutFrontEndURL = (checkoutInputAttributes, checkoutUrl, mode) => {
157
+ const url = new URL(checkoutUrl);
158
+ url.searchParams.append("fngs-checkout-payload", encodeForTransport(JSON.stringify(checkoutInputAttributes)));
159
+ url.searchParams.append("fngs-display-mode", mode);
160
+ return url.toString();
161
+ };
162
+ var getCheckoutUrl = ({ checkoutUrl, ...restProps }, mode) => {
163
+ return getCheckoutFrontEndURL(restProps, checkoutUrl, mode);
164
+ };
112
165
 
113
166
  // src/helpers/iframe.ts
114
167
  var closeCheckoutIFrame = () => {
@@ -189,61 +242,27 @@ var closeCheckout = () => {
189
242
  // src/helpers/dom.ts
190
243
  var scanForCheckoutElements = () => {
191
244
  log("Scanning for checkout elements");
192
- const newFormatElements = document.querySelectorAll("[data-fungies-checkout-url]:not([data-fungies-initialized])");
245
+ const newFormatElements = document.querySelectorAll(
246
+ "[data-fungies-checkout-url]:not([data-fungies-initialized])"
247
+ );
193
248
  for (const element of newFormatElements) {
194
- const checkoutUrl = element.getAttribute("data-fungies-checkout-url");
195
- if (!checkoutUrl) {
196
- log("Element has data-fungies-checkout-url attribute but no value", "warning" /* WARNING */);
197
- continue;
198
- }
199
- const modeAttr = element.getAttribute("data-fungies-mode");
200
- const mode = modeAttr === "embed" || modeAttr === "overlay" ? modeAttr : "overlay";
201
- const frameTarget = element.getAttribute("data-fungies-frame-target") || void 0;
202
- const discountCode = element.getAttribute("data-fungies-discount-code") || void 0;
203
- const customerEmail = element.getAttribute("data-fungies-customer-email") || void 0;
204
- const quantityAttr = element.getAttribute("data-fungies-quantity");
205
- const quantity = quantityAttr ? Number.parseInt(quantityAttr, 10) : void 0;
206
- let items = void 0;
207
- const itemsAttr = element.getAttribute("data-fungies-items");
208
- if (itemsAttr) {
209
- try {
210
- items = JSON.parse(itemsAttr);
211
- } catch (_error) {
212
- log(`Invalid JSON in data-fungies-items: ${itemsAttr}`, "warning" /* WARNING */);
213
- }
214
- }
215
- let customFields = void 0;
216
- const customFieldsAttr = element.getAttribute("data-fungies-custom-fields");
217
- if (customFieldsAttr) {
218
- try {
219
- customFields = JSON.parse(customFieldsAttr);
220
- } catch (_error) {
221
- log(`Invalid JSON in data-fungies-custom-fields: ${customFieldsAttr}`, "warning" /* WARNING */);
222
- }
223
- }
224
- const checkoutOptions = {
225
- checkoutUrl,
226
- settings: {
227
- mode,
228
- ...frameTarget && { frameTarget }
229
- },
230
- ...discountCode && { discountCode },
231
- ...customerEmail && { customerEmail },
232
- ...quantity && { quantity },
233
- ...items && { items },
234
- ...customFields && { customFields }
235
- };
249
+ const checkoutOptions = getCheckoutOptions(element);
236
250
  element.addEventListener("click", (event) => {
237
251
  event.preventDefault();
238
252
  openCheckout(checkoutOptions);
239
253
  });
240
254
  element.setAttribute("data-fungies-initialized", "true");
241
255
  }
242
- const legacyFormatElements = document.querySelectorAll("[data-fungies-button]:not([data-fungies-initialized])");
256
+ const legacyFormatElements = document.querySelectorAll(
257
+ "[data-fungies-button]:not([data-fungies-initialized])"
258
+ );
243
259
  for (const element of legacyFormatElements) {
244
260
  const buttonUrl = element.getAttribute("data-fungies-button");
245
261
  if (!buttonUrl) {
246
- log("Element has data-fungies-button attribute but no value", "warning" /* WARNING */);
262
+ log(
263
+ "Element has data-fungies-button attribute but no value",
264
+ "warning" /* WARNING */
265
+ );
247
266
  continue;
248
267
  }
249
268
  try {
@@ -252,7 +271,10 @@ var scanForCheckoutElements = () => {
252
271
  const checkoutElementIndex = pathParts.indexOf("checkout-element");
253
272
  const overlayIndex = pathParts.indexOf("overlay");
254
273
  if (checkoutElementIndex === -1 && overlayIndex === -1) {
255
- log(`Invalid URL in data-fungies-button: ${buttonUrl}`, "warning" /* WARNING */);
274
+ log(
275
+ `Invalid URL in data-fungies-button: ${buttonUrl}`,
276
+ "warning" /* WARNING */
277
+ );
256
278
  continue;
257
279
  }
258
280
  const mode = "overlay";
@@ -367,6 +389,10 @@ if (typeof document !== "undefined") {
367
389
  Fungies.Initialize({
368
390
  enableDataAttributes: true
369
391
  });
392
+ if (currentScript?.hasAttribute("data-auto-display-checkout")) {
393
+ const checkoutOptions = getCheckoutOptions(currentScript);
394
+ Fungies.Checkout.open(checkoutOptions);
395
+ }
370
396
  });
371
397
  }
372
398
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fungies/fungies-js",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",
@@ -13,8 +13,6 @@
13
13
  "devDependencies": {
14
14
  "@biomejs/biome": "1.9.4",
15
15
  "@changesets/cli": "^2.28.1",
16
- "@commitlint/cli": "^19.7.1",
17
- "@commitlint/config-conventional": "^19.7.1",
18
16
  "husky": "^9.1.7",
19
17
  "tsup": "^8.4.0",
20
18
  "typescript": "^5.7.3"