@blotoutio/providers-shop-gpt-sdk 1.22.2 → 1.22.4
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/index.cjs.js +66 -48
- package/index.d.ts +1 -1
- package/index.js +66 -48
- package/index.mjs +66 -48
- package/package.json +1 -1
- package/stores/shopify/index.cjs.js +111 -3
- package/stores/shopify/index.js +111 -3
- package/stores/shopify/index.mjs +111 -3
package/index.mjs
CHANGED
@@ -122,7 +122,7 @@ const isoCountries = new Map([
|
|
122
122
|
['FO', 'Faroe Islands'],
|
123
123
|
['FR', 'France'],
|
124
124
|
['GA', 'Gabon'],
|
125
|
-
['GB', '
|
125
|
+
['GB', 'Great Britain'],
|
126
126
|
['GD', 'Grenada'],
|
127
127
|
['GE', 'Georgia'],
|
128
128
|
['GF', 'French Guiana'],
|
@@ -277,7 +277,7 @@ const isoCountries = new Map([
|
|
277
277
|
['TZ', 'Tanzania, United Republic of'],
|
278
278
|
['UA', 'Ukraine'],
|
279
279
|
['UG', 'Uganda'],
|
280
|
-
['UK', 'United Kingdom'],
|
280
|
+
['UK', 'United Kingdom of Great Britain and Northern Ireland'],
|
281
281
|
['UM', 'United States Minor Outlying Islands'],
|
282
282
|
['US', 'United States of America'],
|
283
283
|
['UY', 'Uruguay'],
|
@@ -463,6 +463,7 @@ const packageName = 'shopGPT';
|
|
463
463
|
const DEFAULT_MAX_THREAD_AGE = 14; // in days
|
464
464
|
const DEFAULT_NUDGE_TIMEOUT = 10; // in seconds
|
465
465
|
const previewKeyName = 'previewShopGPT';
|
466
|
+
const nudgeOverrideKeyName = 'showShopGPTNudge';
|
466
467
|
|
467
468
|
const keyPrefix = `_worker`;
|
468
469
|
|
@@ -606,6 +607,15 @@ const hasPreviewKey = () => {
|
|
606
607
|
return false;
|
607
608
|
}
|
608
609
|
};
|
610
|
+
const hasNudgeOverride = () => {
|
611
|
+
var _a;
|
612
|
+
try {
|
613
|
+
return ((_a = sessionStorage.getItem(nudgeOverrideKeyName)) !== null && _a !== void 0 ? _a : '0') == '1';
|
614
|
+
}
|
615
|
+
catch {
|
616
|
+
return false;
|
617
|
+
}
|
618
|
+
};
|
609
619
|
const isUserInteracted = (destination) => {
|
610
620
|
var _a;
|
611
621
|
const session = getSessionData(destination);
|
@@ -741,6 +751,7 @@ const createShopGPTAPI = ({ fetch: fetchImpl = window.fetch, baseURL, userId, st
|
|
741
751
|
return url;
|
742
752
|
};
|
743
753
|
const processQuery = async (query, threadId, productHandle) => {
|
754
|
+
const siteCurrency = await storeAPI.getSiteCurrency();
|
744
755
|
const response = await fetchImpl(getURL('/query'), {
|
745
756
|
method: 'POST',
|
746
757
|
headers: getHeaders(),
|
@@ -751,6 +762,8 @@ const createShopGPTAPI = ({ fetch: fetchImpl = window.fetch, baseURL, userId, st
|
|
751
762
|
threadId,
|
752
763
|
pageUrl: window.location.href,
|
753
764
|
customerId: storeAPI.getCustomerId(),
|
765
|
+
currencyFormat: siteCurrency.currency,
|
766
|
+
conversionRate: siteCurrency.rate,
|
754
767
|
}),
|
755
768
|
credentials: 'include',
|
756
769
|
});
|
@@ -763,7 +776,8 @@ const createShopGPTAPI = ({ fetch: fetchImpl = window.fetch, baseURL, userId, st
|
|
763
776
|
if (!threadId) {
|
764
777
|
return [];
|
765
778
|
}
|
766
|
-
const
|
779
|
+
const currency = (await storeAPI.getSiteCurrency()).currency;
|
780
|
+
const response = await fetchImpl(getURL(`/query-history?threadId=${threadId}¤cy=${currency}`), {
|
767
781
|
method: 'GET',
|
768
782
|
headers: getHeaders(),
|
769
783
|
credentials: 'include',
|
@@ -5898,21 +5912,17 @@ class ProductItem extends TWLitElement$3 {
|
|
5898
5912
|
this.isStylesheetInjected = true;
|
5899
5913
|
}
|
5900
5914
|
}
|
5901
|
-
getLocalPrice(price) {
|
5902
|
-
|
5903
|
-
return price;
|
5904
|
-
}
|
5905
|
-
const localPrice = parseFloat(price) * this.siteCurrency.rate;
|
5906
|
-
return formatMoney(localPrice, this.siteCurrency.currency);
|
5915
|
+
getLocalPrice(price, currencyCode) {
|
5916
|
+
return formatMoney(parseFloat(price), currencyCode);
|
5907
5917
|
}
|
5908
|
-
getComparedAtPrice(comparedAtPrice, price) {
|
5918
|
+
getComparedAtPrice(comparedAtPrice, price, currencyCode) {
|
5909
5919
|
if (!comparedAtPrice ||
|
5910
5920
|
comparedAtPrice === price ||
|
5911
5921
|
parseFloat(comparedAtPrice) <= parseFloat(price)) {
|
5912
5922
|
return E;
|
5913
5923
|
}
|
5914
5924
|
return x `<p class="price-compared text-xs leading-xs font-semibold">
|
5915
|
-
${this.getLocalPrice(comparedAtPrice)}
|
5925
|
+
${this.getLocalPrice(comparedAtPrice, currencyCode)}
|
5916
5926
|
</p>`;
|
5917
5927
|
}
|
5918
5928
|
getProductUrl(url) {
|
@@ -5984,9 +5994,9 @@ class ProductItem extends TWLitElement$3 {
|
|
5984
5994
|
${this.renderVariantTitles()}
|
5985
5995
|
</div>
|
5986
5996
|
<div class="prices">
|
5987
|
-
${this.getComparedAtPrice(this.product.variants[0].comparedAtPrice, this.product.variants[0].price)}
|
5997
|
+
${this.getComparedAtPrice(this.product.variants[0].comparedAtPrice, this.product.variants[0].price, this.product.variants[0].currencyCode)}
|
5988
5998
|
<p class="text-xs leading-xs font-semibold">
|
5989
|
-
${this.getLocalPrice(this.product.variants[0].price)}
|
5999
|
+
${this.getLocalPrice(this.product.variants[0].price, this.product.variants[0].currencyCode)}
|
5990
6000
|
</p>
|
5991
6001
|
</div>
|
5992
6002
|
<div>
|
@@ -6019,10 +6029,6 @@ __decorate([
|
|
6019
6029
|
n$1({ type: Object }),
|
6020
6030
|
__metadata("design:type", Object)
|
6021
6031
|
], ProductItem.prototype, "product", void 0);
|
6022
|
-
__decorate([
|
6023
|
-
n$1({ type: Object }),
|
6024
|
-
__metadata("design:type", Object)
|
6025
|
-
], ProductItem.prototype, "siteCurrency", void 0);
|
6026
6032
|
__decorate([
|
6027
6033
|
n$1({ type: String }),
|
6028
6034
|
__metadata("design:type", Object)
|
@@ -6218,7 +6224,6 @@ class ProductsList extends i$1 {
|
|
6218
6224
|
.query=${this.query}
|
6219
6225
|
.response=${this.response}
|
6220
6226
|
.product=${product}
|
6221
|
-
.siteCurrency=${this.siteCurrency}
|
6222
6227
|
.rank=${index + 1}
|
6223
6228
|
.userId=${this.userId}
|
6224
6229
|
.viewType=${this.viewType}
|
@@ -6343,7 +6348,6 @@ class ProductsSection extends i$1 {
|
|
6343
6348
|
.query=${query === null || query === void 0 ? void 0 : query.message}
|
6344
6349
|
.response=${response === null || response === void 0 ? void 0 : response.message}
|
6345
6350
|
.product=${topResult}
|
6346
|
-
.siteCurrency=${this.siteCurrency}
|
6347
6351
|
.rank=${1}
|
6348
6352
|
.userId=${this.userId}
|
6349
6353
|
.metafieldDisplayName=${this.metafieldDisplayName}
|
@@ -6357,7 +6361,6 @@ class ProductsSection extends i$1 {
|
|
6357
6361
|
.query=${query === null || query === void 0 ? void 0 : query.message}
|
6358
6362
|
.response=${response === null || response === void 0 ? void 0 : response.message}
|
6359
6363
|
.products=${others}
|
6360
|
-
.siteCurrency=${this.siteCurrency}
|
6361
6364
|
.viewType=${'overlay'}
|
6362
6365
|
.userId=${this.userId}
|
6363
6366
|
.metafieldDisplayName=${this.metafieldDisplayName}
|
@@ -6380,10 +6383,6 @@ __decorate([
|
|
6380
6383
|
n$1({ type: Boolean }),
|
6381
6384
|
__metadata("design:type", Boolean)
|
6382
6385
|
], ProductsSection.prototype, "isLoadingHistory", void 0);
|
6383
|
-
__decorate([
|
6384
|
-
n$1({ type: Object }),
|
6385
|
-
__metadata("design:type", Object)
|
6386
|
-
], ProductsSection.prototype, "siteCurrency", void 0);
|
6387
6386
|
__decorate([
|
6388
6387
|
n$1({ type: Boolean }),
|
6389
6388
|
__metadata("design:type", Boolean)
|
@@ -7975,7 +7974,6 @@ class ChatSection extends i$1 {
|
|
7975
7974
|
.query=${queryMessage === null || queryMessage === void 0 ? void 0 : queryMessage.message}
|
7976
7975
|
.response=${message.message}
|
7977
7976
|
.product=${message.products[0]}
|
7978
|
-
.siteCurrency=${this.siteCurrency}
|
7979
7977
|
.rank=${1}
|
7980
7978
|
.userId=${this.userId}
|
7981
7979
|
.metafieldDisplayName=${this.metafieldDisplayName}
|
@@ -8357,10 +8355,6 @@ __decorate([
|
|
8357
8355
|
n$1({ type: Object }),
|
8358
8356
|
__metadata("design:type", Object)
|
8359
8357
|
], ChatSection.prototype, "thread", void 0);
|
8360
|
-
__decorate([
|
8361
|
-
n$1({ type: Object }),
|
8362
|
-
__metadata("design:type", Object)
|
8363
|
-
], ChatSection.prototype, "siteCurrency", void 0);
|
8364
8358
|
__decorate([
|
8365
8359
|
n$1({ type: String }),
|
8366
8360
|
__metadata("design:type", Object)
|
@@ -9392,7 +9386,6 @@ class PopupView extends TWLitElement$1 {
|
|
9392
9386
|
.query=${queryMessage === null || queryMessage === void 0 ? void 0 : queryMessage.message}
|
9393
9387
|
.response=${message.message}
|
9394
9388
|
.products=${message.products}
|
9395
|
-
.siteCurrency=${this.siteCurrency}
|
9396
9389
|
.viewType=${this.viewType}
|
9397
9390
|
.userId=${this.userId}
|
9398
9391
|
.metafieldDisplayName=${this.metafieldDisplayName}
|
@@ -9871,10 +9864,6 @@ __decorate([
|
|
9871
9864
|
n$1({ type: Object }),
|
9872
9865
|
__metadata("design:type", Object)
|
9873
9866
|
], PopupView.prototype, "thread", void 0);
|
9874
|
-
__decorate([
|
9875
|
-
n$1({ type: Object }),
|
9876
|
-
__metadata("design:type", Object)
|
9877
|
-
], PopupView.prototype, "siteCurrency", void 0);
|
9878
9867
|
__decorate([
|
9879
9868
|
n$1({ type: Boolean }),
|
9880
9869
|
__metadata("design:type", Object)
|
@@ -10085,6 +10074,7 @@ const parseMessage = (message, parseDataAsJSON) => {
|
|
10085
10074
|
const soothingWaterDropSound = 'data:audio/mpeg;base64,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iBeym4zYFAAkYAVmuxNNv+v7c+5J93kKUxDKOKWyMt3ZVsrLlNp3Ib///////7s611TkOqXWZl3uhSiSOQewv1FYTZFKdhJVZBMgiKlDgeGlFFOoqUzGFzKYeAg0RO4QCQcFYedRiB5hURMHA6HQkKGqCXYGAAAAABGgApJl0h7bdv/r82S1SFSqqfmOjO4Wm5alsNMFG/////b9dVlyWpEKmqe9aHhMak+HhGsqBxxQOCxAeEChIKHAKEuwM4PIAACtABSTNSHt//uURO6CIqCNR2qAE/pZMgjtUAJ+DWJBF6oE2cG0yCL1QBX4t2rX16KCd9t30sqUWzrubZLKdC9a3az71olrf//////////T/t0Pp3IzIqdpblOje9GO7Vq6MhpGbRjEdEe4dgUA6KIBGwAq9dj2r///////////6W/eDhP1ZcjzJWbcDYTA0WE///////8uT5Zf9azM11Vxps81NTe63cJduNWlkq5ShrwPgRqhhppVlmu6EHCxk5tqaLA4HSCrD1D0gaM2QTGwJB4jiiCRsAKvXY9q7///////////8pPXQrb9l97FaKqad0uiKqLfVOqE////////W6JfMjW2K+v6bfFIfEspmm2OPb5lv/Z7llsUapI0XhNl30zkDXTZIq0aKBUSy9ImIjqwkOIZGymx8KTVFCDEAFAAbQAPquiW9Xb9v/+r///////X5cpV5I9ZjVCEsMyBIJ7LqqX//////Mv6JSLfFev2nda4Zrx8Km2io+FM1XRobWl0v4DX//uURNmGYkU6SHqAE/hREakPUAKbTLI/F6oFGcGhR6L1QRs5Ao+prOmkimTgXyZNBA1DB6wUnLlJJGijDhQCSMBRQIpycHiihiCAABxoAH1XRJfOdv2/f///////+1/PekqIdq7KiLDq7sOxJjr1q3O6Pf62///////6n2mfT7/m5GN2p2XnmlemqGhc2+zu+2KlsjnPBMFsfHHG0IcposI7mkSiMo6zJ8/UDkOe8jSY4aefp5AUQQCgVsAKrXRNN+3+n/////////5eAyMgGMzOqlnUebFkm5rRSdiUSHX///////8iM+fHvc/b/P3drfb+G3XZJqmV+sqzaxiSUGkD7zYktN+kcKPZZh0lEDTiybgbECfnAeO5Rjl7FbZAYQACi1sAKrXNS5v/+tvr6vIhqleWdHN22tT3b60XZ6ZE0VU///////3m9JJvsdKUs7I5M52kR2Z0UjRyHGGq4kwgOFmOwmUwDB9WExESOivUVYouLEMg0sTcOiAycKIY//ukRNOCI22QRWqBNnBvcgitUEbODTpBF6oE2cGUyCL1QBagWGgRQ4oYSjAAAACIgBTjQPba9f2lZF1qSU6EWjIc5mlMxtmV6HUrOdSMV3QtdVb////////+1eV3dWkZbkZjyDllIlWOplzrGMNynsyIVHMdDHOchzKQIoxhRBkXQxVYy3Rx9g8JEHEoAAAAAtgAU4zQq7a/99PZkdndankap3PkTmIJyUR56VnXRrV////////5fvyt+1L6OVKmWplIUtxJXj0UeR2PNO4kgmiJOQWOGjRyWMZWKxROY4aYzlcTDg8wmEhW4IABGwAq9cwapt9///////////oajVpKYiofa790LnJKO52cjGujXoxZVQs////////V8tJN9m7bt1nzMqHX3110dv6NVi+nmouWVGAqokJTckosMtmIQWSVPNCTjj5KUXBZBXVJpaBR9O5YJCRoNQrbEAAjQAVeuYNU2+///////////w1LsmB8PUySiIApz5pXEueQvL///////+oZBr5PMj9q25R7EantpRahl50b2unDPb6YZbjNWMWmIMZ1EM0nTgjkuZbkTRp+r50BQQsyY+HVGSFGu2nN6TTdEYYAAAAegD6rmDVd///////////9/Zn7//ukRNuCIw6QRuqAK/heEgjdUAV+Di5BFaoI2cG2SCK1QKc4vopluyIyIRjgjuRhyPT9+yZ/X//////b0Mnc5SF9bTxuv8x3b7TIIPb5VoVq3MQU6kDlEkkjzET0LWxJcL0GYEzSXsUes8UFGFkwoIBQesLIkmSOocchqWBgaRIjYgAAADoAfVcoNU3of//////////9k/KWWv/OGYSAzsXxKU4D6//z////+mdish1u/JQb2GVsH6rn8emS9X1iGEWpNqLZNE5A7uVblEsvWWTwSVznj0WXIJv16ZFiw20bUP2VXUExBHBlKqK8TtpicSjACyABTzsmZ7b////t7f/////skbIyzcvmO7kAxOZmFMONiogsDGSEkAZf///////5aMv8+cO5F5+Z1Vgd96JswiPNgwOh1CzUOochYq4d+I5M4A+B6sDGIXhhQCQwtFVKqCglEgowAAB6gFPO1e3oN907XqtPzOxGYqWndnVEqjmc7ohp6LJVZ7Vndf////////6+Wr6qrElOixGNY6TGQUdxIYxDVI5o4ysVqUZCniJhlo8PTDI8OCwmhzECDh1jxIimK4fEih/BQBuAALGAFOMfNEwq1f+hvTSX/VdkMWhU3m3NYhFFlW9Fot7L//ukROoEA5+QROKCNnBvkgicUCnODNZBGaoEecGPyCMxQBW8uZ1Wv//////+/6p96rRtKKiLSpVVplPIdXdlaYOB5GO7tlmF1FB0hiIZhylQxIi4Fh5Rx1FRYeOINMLDAcRUoiHCjXCgAAAAREAKSZZ1Vav7PVbNTNa9lqpKEVltRD6rZL+6J2RFT/////////p6du62ewPOqKxW3BsppGvO6IiCxRJpgamFsFSIAzIZArhGCqziTlKOrIRWLBuPKAABIiAFLMnHtV/95tGN6mfRCNOY102HIRndHoU6GVW3ya3ejU2b/////////6ptU+2l6UUWZCLVTVFHQqJdTEQyEbIOiysw0ggc4rkBCHKJOriaIg8SOPFJhpBASMDBUuAaMAGREmsMr/////7IdIDxh8owNTpM0LLMi8okxrBdE8//////+xt+1G4j9SgKi9i3JNykqKJFCIbC1RpAKAAAAI2AFTMn3U1fpVf//////////czlKQXntGnKNVMSoFpSEWiwjZFZf/////8PO5/3H3XGku1vWkaJLrzB++pZDtxRYrXSmvFb2IJUuzsSqoKixOKwaUo44sYzjAiYPaMH04c0SMQsaosgFAAAAEbACpmX6mr96v////////////uURPEEY0GQRmqALUBZEgjtUAJ/DAo9G6oArej0AaS9JIgEm7zzpZa8tDqh0YspmrZ0ZWVGop1cYm47B//////9PXdNzrfZvfkfXfS21te9i87xtU7m7Mmpi2PSIpnGF5Zvl0BAtJ7SoYdBygCieKTWmPqVFngcmoxCRM6SUiExSRg0kAAwCnmTle9//st2////////+/+EOfloy9FCeOQKHjY+dGzn///////+fj/f8l893LMZjUcjid21C9hvv5FPY7U8S1hS7g+Opw2XggyK4x0key5VXMk+C023IGFSFV+snynTukZQWugUABTzLlNrqS/V//////////yc1xk3S95nOjMHxSvQ0eJ2nP///////+cyq/+/zPjxr7H+ed+vpMrcb7h55+SReJ2SRMhLHaYUkWlqGlGn1BRx0iC2hSRg9iSZGL3ZIHEwSFkUMJoZ0AAAAACRgBTjJ1TWf////////////d3QjynB4DJKFkxsUTZW1Z6sxAn///////ukRO+DM2GQRWqBRnB10gitUEbODN5BFooFOcGfyCLRQJs4///qfmvuN/65eld5y/ypx6Xklc7ZpsozrhhtaqjXMy7NJxAFf52kCZepE9womyXLQWZ6OeG24aUolMe/AAAAARogBSTJ1SNB1f/3o0vS6EWzd70uhpmUYjFOjEdnorGZ2fZ2WitVf/////////1SRcp7MptCZSs9GWxmZ21VSzidBcg48YUP3LONGSEYhBKg5iDHJQWqOF2OwM5IZ2XAASQAKWZXd6VVeyuv75ddq6nI61cznMRrVnchZ1RZVViaM3///////sn/ptuqujo59KzjXkGsY5pRMpR67OPO4TEhw7ElDkzCphcaJoJKLCwsEVVRYTOQoSixBJQ4BzCrEFiCIztFAAsYAUszd3pVe3prWh08YzNszSIpmrQm7WTZz9e8jV////////tp0Oaq6tvdSIsjKs7HUqOQgo0hjpMRXJOIKJEOrRpFEiiruICjuODzud3ZCua4iNQcx2EzDXCFMgAAAOgCpmfXt///////////8/MiS5NKXgCdWeVyTrzQDo5SHB/////L/8srH5V7hDYX4+qncnZ9Y7pT1TXosbl5uxXqJWj8ZKzLZiBYdYmzkmjESxxDnYIM//uURPUCI0KQReqBNnBhkejdUAVvTNZBGaoAr8F9SCM1QBX4lJMsqjp6RM4e0gBGYVZRkSBCRRbEDkgAAAfAFTLn17V2r///////////0XR9LV7HWd1Ocp56OPkV7tVmTZkozp/T////+3VE1cpiu/2N7L+svbyZXZVJROcspHq9k93SklZKcgd+T5qclemWmUVUYWmoRzSH2JEeIh5kPQJkRwyK7ttRGIiZpCVvny6WEQskAAdAoACpEniCmxqkip1f/6yfUpa///zEYy////2W4doWS8C4DszAA2zMZnMDs5w6ep5////+8qRQwAfUPZSu/7pPJfMTYaMblJ1APmE0aBKaZCmsgbYRKLulJRa2B0uvbaFpZGVNK+KLzXKsNlSpGolJkeLqiojiPLoyxowJxdY0UQkwscAAlAoDZAAVIk8QU2NUlqdX/6k1l9Wr//+6nJ////Qmzre50qpjud6oFM5MjupkSb3SitRetX9P+n///rtuq3azK3xm19h8//u0RNsBA3KQRMqBTnB58gicUEnOELJBEaoFOcIjyCI1QSc4jN05t1bVPjsimzhHwlpZ2Et5FWc8iKlSza6OBE2oefFEQomyXzXJgqVZQCptpokVONECKbMyeCAtAo5cTEAmSWVRAAAQhlIAHYHhywnUgyKX//czJs4////Ohjf/6a5L07HLsmTuLJeqkspbSMzyN1Vn92S7o1VtJ3PT///W3ojVkndw4IqoJmC/as1+V0F0NhyExr8dXVEZ0scrQoLGRWeFds7ZZSKfPnWSebHrjhTHhe2VCQOCLGTx5IK0p6g2JooHlWiVoR0ifLLK8Okg/lI9XefLTuxZJBfClxgAAQAQBIAAegqF1QuEixql//1pk2c///85DG////+1HXLux8azIrh3Ei3IjGKRXmdWctF0tbv7M2j+/v/T9ur3dOplKbfcpB/t5r0MLPwu3on23Rw1Mmr3Pbtrjy7CWb38nHaxxtsO0kLB2fOqkQteq6+4pKy+wgvuJqxIRqhFYyEsKTgHiwPiozOyeJI+tHJ7TUIhWIAABgBeDtjyVkf//RUkv//+Yn////////wi3IXxOKH5Cfk/mv//////zCTCs8pSl/5S///tZFqsYxjnlqrKzUlorCpqiJq40RNUia9qylsalKSLLoiehQsrQFR0SiI1AVE0VASPuRTQodQs1vtDCMgAAIBgAAAUghyMUkf//qS///zEL///////81//f+zD5CNC4TRfn////kzXxM/E8lt/uPpEinGrqKFl//u0RO2DBNSQQuKCZnCVsghtUEzODe5BDIgFOcHeyCFw0Kc4ZFJbfGviyLVYYIg1NmSxoQvQpItuMcKkqSLbQoUKwqXFLpWhhGmvIqCJLhUMnGyUs24VHB4KmUSwWBIVKkxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sUZOGP8AAAf4AAAAgAAA/wAAABAAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq';
|
10086
10075
|
|
10087
10076
|
const DIALOG_DELAY = 1000;
|
10077
|
+
const SUPPORT_PROMPTS = 'Where is my order,Tracking link for my order,Return my order,Cancel my order';
|
10088
10078
|
const normalizePath = (path) => path.replace(/\/$/, '');
|
10089
10079
|
class ShopGPT extends i$1 {
|
10090
10080
|
constructor() {
|
@@ -10106,6 +10096,7 @@ class ShopGPT extends i$1 {
|
|
10106
10096
|
this.hasUserInteracted = false;
|
10107
10097
|
this.showNudge = false;
|
10108
10098
|
this.shouldAskUserEmail = false;
|
10099
|
+
this.supportRequested = false;
|
10109
10100
|
this.loadData = async () => {
|
10110
10101
|
if (!this.shopGPTAPI) {
|
10111
10102
|
return;
|
@@ -10333,6 +10324,9 @@ class ShopGPT extends i$1 {
|
|
10333
10324
|
this.isFailed = false;
|
10334
10325
|
const currentThreadId = this.selectedThreadId;
|
10335
10326
|
this.selectedThreadId = threadId;
|
10327
|
+
if (!threadId) {
|
10328
|
+
this.supportRequested = false;
|
10329
|
+
}
|
10336
10330
|
if (threadId && !silent) {
|
10337
10331
|
this.shopGPTAPI.sendEvent('switchThread', undefined, undefined, {
|
10338
10332
|
previousThread: currentThreadId,
|
@@ -10531,7 +10525,8 @@ class ShopGPT extends i$1 {
|
|
10531
10525
|
try {
|
10532
10526
|
this.isPreviousMessagePrompt = isPrompt;
|
10533
10527
|
if (!isPrompt) {
|
10534
|
-
|
10528
|
+
const siteCurrency = await this.getSiteCurrency();
|
10529
|
+
this.shopGPTAPI.sendEvent('queryInteractions', siteCurrency.currency, undefined, {
|
10535
10530
|
query: message,
|
10536
10531
|
threadId: this.selectedThreadId,
|
10537
10532
|
});
|
@@ -10564,9 +10559,10 @@ class ShopGPT extends i$1 {
|
|
10564
10559
|
})
|
10565
10560
|
.catch(logger.error);
|
10566
10561
|
}
|
10567
|
-
sendEvent(e) {
|
10562
|
+
async sendEvent(e) {
|
10568
10563
|
e.stopPropagation();
|
10569
|
-
|
10564
|
+
const siteCurrency = await this.getSiteCurrency();
|
10565
|
+
this.shopGPTAPI.sendEvent(e.detail.action, siteCurrency.currency, e.detail.actionData, e.detail.clickData);
|
10570
10566
|
}
|
10571
10567
|
closeNudge(e) {
|
10572
10568
|
e.stopPropagation();
|
@@ -10575,12 +10571,15 @@ class ShopGPT extends i$1 {
|
|
10575
10571
|
}
|
10576
10572
|
async handleNudgePromptClick(e) {
|
10577
10573
|
e.stopPropagation();
|
10578
|
-
this.openModal();
|
10579
10574
|
await this.setSelectedThreadId('');
|
10580
10575
|
await this.createChatThread({ title: '' }, false);
|
10581
10576
|
if (e.detail.id === 'query') {
|
10582
10577
|
this.sendMessageToServer(e, e.detail.message, true);
|
10583
10578
|
}
|
10579
|
+
if (e.detail.id === 'support') {
|
10580
|
+
this.supportRequested = true;
|
10581
|
+
}
|
10582
|
+
this.openModal();
|
10584
10583
|
}
|
10585
10584
|
submitUserData(e) {
|
10586
10585
|
e.stopPropagation();
|
@@ -10591,11 +10590,12 @@ class ShopGPT extends i$1 {
|
|
10591
10590
|
});
|
10592
10591
|
this.shouldAskUserEmail = false;
|
10593
10592
|
}
|
10594
|
-
productClicked(e) {
|
10593
|
+
async productClicked(e) {
|
10595
10594
|
var _a, _b;
|
10596
10595
|
e.stopPropagation();
|
10597
10596
|
setProductAction(this.destination, this.sessionId, e.detail.id, 'clicked', true);
|
10598
|
-
|
10597
|
+
const siteCurrency = await this.getSiteCurrency();
|
10598
|
+
this.shopGPTAPI.sendEvent('productRecommendationClicked', siteCurrency.currency, {
|
10599
10599
|
productId: e.detail.id,
|
10600
10600
|
value: e.detail.value,
|
10601
10601
|
isPrompt: this.isPreviousMessagePrompt,
|
@@ -10603,15 +10603,15 @@ class ShopGPT extends i$1 {
|
|
10603
10603
|
threadId: this.selectedThreadId,
|
10604
10604
|
query: (_a = e.detail.query) !== null && _a !== void 0 ? _a : '',
|
10605
10605
|
response: (_b = e.detail.response) !== null && _b !== void 0 ? _b : '',
|
10606
|
-
currency:
|
10606
|
+
currency: siteCurrency.currency,
|
10607
10607
|
variantId: e.detail.variantId,
|
10608
10608
|
url: e.detail.url,
|
10609
10609
|
title: e.detail.title,
|
10610
10610
|
rank: e.detail.rank,
|
10611
10611
|
}, true);
|
10612
10612
|
}
|
10613
|
-
getSiteCurrency() {
|
10614
|
-
return this.storeAPI.getSiteCurrency();
|
10613
|
+
async getSiteCurrency() {
|
10614
|
+
return await this.storeAPI.getSiteCurrency();
|
10615
10615
|
}
|
10616
10616
|
overlayMode() {
|
10617
10617
|
const thread = this.chatThreads.get(this.selectedThreadId);
|
@@ -10642,7 +10642,6 @@ class ShopGPT extends i$1 {
|
|
10642
10642
|
.merchantImage=${this.merchantImage}
|
10643
10643
|
.products=${this.products}
|
10644
10644
|
.isLoadingHistory=${this.isLoadingHistory}
|
10645
|
-
.siteCurrency=${this.getSiteCurrency()}
|
10646
10645
|
.isLoadingThreads=${this.isLoadingThreads}
|
10647
10646
|
.css=${this.css}
|
10648
10647
|
.userId=${this.userId}
|
@@ -10656,7 +10655,6 @@ class ShopGPT extends i$1 {
|
|
10656
10655
|
.isTyping=${this.isTyping}
|
10657
10656
|
.isStreaming=${this.isStreaming}
|
10658
10657
|
.messages=${this.messages}
|
10659
|
-
.siteCurrency=${this.getSiteCurrency()}
|
10660
10658
|
.sendMessageToServer=${this.sendMessageToServer.bind(this)}
|
10661
10659
|
.thread=${thread}
|
10662
10660
|
.createChatThread=${this.createChatThread.bind(this)}
|
@@ -10681,6 +10679,7 @@ class ShopGPT extends i$1 {
|
|
10681
10679
|
const thread = this.chatThreads.get(this.selectedThreadId);
|
10682
10680
|
const closeModal = () => {
|
10683
10681
|
this.modalState = 'close';
|
10682
|
+
this.supportRequested = false;
|
10684
10683
|
this.shopGPTAPI.sendEvent('chatbotClosed');
|
10685
10684
|
};
|
10686
10685
|
return x `
|
@@ -10696,14 +10695,15 @@ class ShopGPT extends i$1 {
|
|
10696
10695
|
@submit-user-data=${this.submitUserData}
|
10697
10696
|
>
|
10698
10697
|
<popup-view
|
10699
|
-
.prompts=${this.
|
10698
|
+
.prompts=${this.supportRequested
|
10699
|
+
? SUPPORT_PROMPTS
|
10700
|
+
: this.quickPrompts}
|
10700
10701
|
.brandName=${this.brandName}
|
10701
10702
|
.isFailed=${this.isFailed}
|
10702
10703
|
.isLoadingHistory=${this.isLoadingHistory}
|
10703
10704
|
.isTyping=${this.isTyping}
|
10704
10705
|
.isStreaming=${this.isStreaming}
|
10705
10706
|
.messages=${this.messages}
|
10706
|
-
.siteCurrency=${this.getSiteCurrency()}
|
10707
10707
|
.sendMessageToServer=${this.sendMessageToServer.bind(this)}
|
10708
10708
|
.thread=${thread}
|
10709
10709
|
.createChatThread=${this.createChatThread.bind(this)}
|
@@ -10736,7 +10736,7 @@ class ShopGPT extends i$1 {
|
|
10736
10736
|
>
|
10737
10737
|
<chatbot-icon .css=${this.css}></chatbot-icon>
|
10738
10738
|
</button>
|
10739
|
-
${((_a = this.nudge) === null || _a === void 0 ? void 0 : _a.show) && this.showNudge
|
10739
|
+
${(hasNudgeOverride() || ((_a = this.nudge) === null || _a === void 0 ? void 0 : _a.show)) && this.showNudge
|
10740
10740
|
? x ` <div class="nudge">
|
10741
10741
|
<chat-nudge
|
10742
10742
|
.brandName=${this.brandName}
|
@@ -10761,6 +10761,13 @@ class ShopGPT extends i$1 {
|
|
10761
10761
|
}
|
10762
10762
|
startNudgeTimer() {
|
10763
10763
|
var _a, _b;
|
10764
|
+
if (hasNudgeOverride()) {
|
10765
|
+
this.nudgeTimer = window.setTimeout(() => {
|
10766
|
+
this.playNudgeSound();
|
10767
|
+
this.showNudge = true;
|
10768
|
+
}, 2000);
|
10769
|
+
return;
|
10770
|
+
}
|
10764
10771
|
if (this.view !== 'modal' || !((_a = this.nudge) === null || _a === void 0 ? void 0 : _a.show)) {
|
10765
10772
|
return;
|
10766
10773
|
}
|
@@ -10777,6 +10784,13 @@ class ShopGPT extends i$1 {
|
|
10777
10784
|
}
|
10778
10785
|
playNudgeSound() {
|
10779
10786
|
var _a;
|
10787
|
+
if (hasNudgeOverride()) {
|
10788
|
+
const audio = new Audio(soothingWaterDropSound);
|
10789
|
+
audio
|
10790
|
+
.play()
|
10791
|
+
.catch((error) => logger.error('Error playing nudge sound', error));
|
10792
|
+
return;
|
10793
|
+
}
|
10780
10794
|
if (!((_a = this.nudge) === null || _a === void 0 ? void 0 : _a.sound) || !navigator.userActivation.hasBeenActive) {
|
10781
10795
|
return;
|
10782
10796
|
}
|
@@ -10867,6 +10881,10 @@ __decorate([
|
|
10867
10881
|
r$1(),
|
10868
10882
|
__metadata("design:type", Object)
|
10869
10883
|
], ShopGPT.prototype, "shouldAskUserEmail", void 0);
|
10884
|
+
__decorate([
|
10885
|
+
r$1(),
|
10886
|
+
__metadata("design:type", Object)
|
10887
|
+
], ShopGPT.prototype, "supportRequested", void 0);
|
10870
10888
|
if (!customElements.get('shop-gpt')) {
|
10871
10889
|
customElements.define('shop-gpt', ShopGPT);
|
10872
10890
|
}
|
package/package.json
CHANGED
@@ -6,6 +6,92 @@ if (typeof window != 'undefined') {
|
|
6
6
|
(_a$1 = window[registryKey]) !== null && _a$1 !== void 0 ? _a$1 : (window[registryKey] = {});
|
7
7
|
}
|
8
8
|
|
9
|
+
const CACHE_KEY = 'shop_gpt_currency_rates';
|
10
|
+
const CACHE_DURATION = 14400000; // 4 hours
|
11
|
+
let ratesCache = null;
|
12
|
+
let ratesPromise = null;
|
13
|
+
const getCachedRatesFromStorage = () => {
|
14
|
+
try {
|
15
|
+
const cached = localStorage.getItem(CACHE_KEY);
|
16
|
+
if (!cached) {
|
17
|
+
return null;
|
18
|
+
}
|
19
|
+
const data = JSON.parse(cached);
|
20
|
+
if (Date.now() > data.expiresAt) {
|
21
|
+
localStorage.removeItem(CACHE_KEY);
|
22
|
+
return null;
|
23
|
+
}
|
24
|
+
return data.rates;
|
25
|
+
}
|
26
|
+
catch (error) {
|
27
|
+
return null;
|
28
|
+
}
|
29
|
+
};
|
30
|
+
const setCachedRatesToStorage = (rates) => {
|
31
|
+
try {
|
32
|
+
const data = {
|
33
|
+
rates,
|
34
|
+
timestamp: Date.now(),
|
35
|
+
expiresAt: Date.now() + CACHE_DURATION,
|
36
|
+
};
|
37
|
+
localStorage.setItem(CACHE_KEY, JSON.stringify(data));
|
38
|
+
}
|
39
|
+
catch (error) {
|
40
|
+
// Storage might be full or disabled
|
41
|
+
}
|
42
|
+
};
|
43
|
+
const fetchRatesFromShopify = async () => {
|
44
|
+
try {
|
45
|
+
const response = await fetch('https://cdn.shopify.com/s/javascripts/currencies.js');
|
46
|
+
if (!response.ok) {
|
47
|
+
throw new Error(`HTTP error! status: ${response.status} ${response.statusText}`);
|
48
|
+
}
|
49
|
+
const text = await response.text();
|
50
|
+
const ratesMatch = text.match(/rates:\{([^}]+)\}/);
|
51
|
+
if (!ratesMatch) {
|
52
|
+
throw new Error('Could not parse currency rates from response');
|
53
|
+
}
|
54
|
+
const ratesString = ratesMatch[1];
|
55
|
+
const rates = {};
|
56
|
+
const ratePairs = ratesString.split(',');
|
57
|
+
for (const pair of ratePairs) {
|
58
|
+
const [currency, rate] = pair.split(':');
|
59
|
+
if (currency && rate) {
|
60
|
+
const rawRate = parseFloat(rate.trim());
|
61
|
+
rates[currency.trim()] = 1 / rawRate;
|
62
|
+
}
|
63
|
+
}
|
64
|
+
setCachedRatesToStorage(rates);
|
65
|
+
return rates;
|
66
|
+
}
|
67
|
+
catch (error) {
|
68
|
+
return {};
|
69
|
+
}
|
70
|
+
};
|
71
|
+
const getRatesLazy = async () => {
|
72
|
+
if (ratesCache) {
|
73
|
+
return ratesCache;
|
74
|
+
}
|
75
|
+
const storedRates = getCachedRatesFromStorage();
|
76
|
+
if (storedRates) {
|
77
|
+
ratesCache = storedRates;
|
78
|
+
return storedRates;
|
79
|
+
}
|
80
|
+
if (ratesPromise) {
|
81
|
+
return ratesPromise;
|
82
|
+
}
|
83
|
+
ratesPromise = fetchRatesFromShopify();
|
84
|
+
ratesCache = await ratesPromise;
|
85
|
+
return ratesCache;
|
86
|
+
};
|
87
|
+
const ensureRatesLoaded = async () => {
|
88
|
+
const rates = await getRatesLazy();
|
89
|
+
return rates;
|
90
|
+
};
|
91
|
+
if (typeof window !== 'undefined') {
|
92
|
+
getRatesLazy();
|
93
|
+
}
|
94
|
+
|
9
95
|
var _a, _b;
|
10
96
|
var _c;
|
11
97
|
const addItemToCart = (fetchOverride, itemsToAdd) => fetchOverride(`${window.Shopify.routes.root}cart/add.js`, {
|
@@ -25,11 +111,33 @@ const createShopApi = (fetchOverride = window.fetch) => ({
|
|
25
111
|
throw new Error(`Could not add items`, { cause: await response.text() });
|
26
112
|
}
|
27
113
|
},
|
28
|
-
getSiteCurrency() {
|
114
|
+
async getSiteCurrency() {
|
29
115
|
var _a, _b, _c, _d;
|
116
|
+
const currency = ((_b = (_a = window.Shopify) === null || _a === void 0 ? void 0 : _a.currency) === null || _b === void 0 ? void 0 : _b.active) || 'USD';
|
117
|
+
const shopifyRate = (_d = (_c = window.Shopify) === null || _c === void 0 ? void 0 : _c.currency) === null || _d === void 0 ? void 0 : _d.rate;
|
118
|
+
if (currency === 'USD') {
|
119
|
+
return {
|
120
|
+
currency: 'USD',
|
121
|
+
rate: 1,
|
122
|
+
};
|
123
|
+
}
|
124
|
+
if (shopifyRate) {
|
125
|
+
return {
|
126
|
+
currency,
|
127
|
+
rate: parseFloat(shopifyRate),
|
128
|
+
};
|
129
|
+
}
|
130
|
+
const rates = await ensureRatesLoaded();
|
131
|
+
if (rates === null || rates === void 0 ? void 0 : rates[currency]) {
|
132
|
+
const rate = rates[currency];
|
133
|
+
return {
|
134
|
+
currency,
|
135
|
+
rate,
|
136
|
+
};
|
137
|
+
}
|
30
138
|
return {
|
31
|
-
currency:
|
32
|
-
rate:
|
139
|
+
currency: 'USD',
|
140
|
+
rate: 1,
|
33
141
|
};
|
34
142
|
},
|
35
143
|
getCurrentProductHandle() {
|