@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.
- package/.changeset/grumpy-groups-send.md +5 -0
- package/.gitlab-ci.yml +73 -0
- package/CHANGELOG.md +5 -0
- package/dist/index.js +110 -84
- package/dist/index.mjs +110 -84
- package/package.json +1 -3
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
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(
|
|
271
|
+
const newFormatElements = document.querySelectorAll(
|
|
272
|
+
"[data-fungies-checkout-url]:not([data-fungies-initialized])"
|
|
273
|
+
);
|
|
219
274
|
for (const element of newFormatElements) {
|
|
220
|
-
const
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
245
|
+
const newFormatElements = document.querySelectorAll(
|
|
246
|
+
"[data-fungies-checkout-url]:not([data-fungies-initialized])"
|
|
247
|
+
);
|
|
193
248
|
for (const element of newFormatElements) {
|
|
194
|
-
const
|
|
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(
|
|
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(
|
|
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(
|
|
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.
|
|
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"
|