@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.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', 'United Kingdom of Great Britain and Northern Ireland'],
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 response = await fetchImpl(getURL(`/query-history?threadId=${threadId}`), {
779
+ const currency = (await storeAPI.getSiteCurrency()).currency;
780
+ const response = await fetchImpl(getURL(`/query-history?threadId=${threadId}&currency=${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
- if (!this.siteCurrency) {
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
- this.shopGPTAPI.sendEvent('queryInteractions', this.getSiteCurrency().currency, undefined, {
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
- this.shopGPTAPI.sendEvent(e.detail.action, this.getSiteCurrency().currency, e.detail.actionData, e.detail.clickData);
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
- this.shopGPTAPI.sendEvent('productRecommendationClicked', this.getSiteCurrency().currency, {
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: this.getSiteCurrency().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.quickPrompts}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blotoutio/providers-shop-gpt-sdk",
3
- "version": "1.22.2",
3
+ "version": "1.22.4",
4
4
  "description": "Shop GPT SDK for EdgeTag",
5
5
  "author": "Blotout",
6
6
  "license": "MIT",
@@ -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: ((_b = (_a = window.Shopify) === null || _a === void 0 ? void 0 : _a.currency) === null || _b === void 0 ? void 0 : _b.active) || 'USD',
32
- rate: parseFloat(((_d = (_c = window.Shopify) === null || _c === void 0 ? void 0 : _c.currency) === null || _d === void 0 ? void 0 : _d.rate) || '1'),
139
+ currency: 'USD',
140
+ rate: 1,
33
141
  };
34
142
  },
35
143
  getCurrentProductHandle() {