@alan-ai/alan-sdk-web 1.8.67 → 1.8.68

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/dist/alan_lib.js CHANGED
@@ -89462,7 +89462,7 @@
89462
89462
  expanded: false,
89463
89463
  inlined: false,
89464
89464
  options: null,
89465
- loaderTimeoutMs: 6e4,
89465
+ loaderTimeoutMs: 18e4,
89466
89466
  defaults: {
89467
89467
  minChatWidth: 250,
89468
89468
  appearAnimationMs: 200,
@@ -91040,6 +91040,10 @@
91040
91040
  keyFrames += getStyleSheetMarker() + `.alan-btn__save-chat-state-btn:hover svg path {
91041
91041
  stroke: ${textChatOptions?.popup?.icons?.saveChatState?.hover?.fill || `#0046ff`};
91042
91042
  }`;
91043
+ keyFrames += getStyleSheetMarker() + `.alan-btn__save-chat-state-btn.saving {
91044
+ opacity: 0.4;
91045
+ pointer-events:none;
91046
+ }`;
91043
91047
  keyFrames += getStyleSheetMarker() + `.alan-btn__expand-collapse-chat-btn {
91044
91048
  height: 100%;
91045
91049
  display: ${textChatOptions?.popup?.fullScreenMode?.enabled ? "flex" : `none`};
@@ -91596,6 +91600,16 @@
91596
91600
  max-width: 100%;
91597
91601
  // width: 100%;
91598
91602
  }`;
91603
+ keyFrames += getStyleSheetMarker() + `.alan-btn__chat-response.with-svg {
91604
+ max-width: 100%;
91605
+ width: 100%;
91606
+ min-width: 100%;
91607
+ }`;
91608
+ keyFrames += getStyleSheetMarker() + `.alan-btn__chat-response.with-svg iframe {
91609
+ max-width: 100%;
91610
+ width: 100%;
91611
+ min-width: 100%;
91612
+ }`;
91599
91613
  keyFrames += getStyleSheetMarker() + `.alan-btn__chat-request.animated {
91600
91614
  opacity:0;
91601
91615
  animation: chat-bubble-appear-w-opacity 300ms ease-in-out forwards;
@@ -93489,9 +93503,70 @@ code.hljs {
93489
93503
  return (str || "").replace(/<img\s+style="display:none;".*?\/>/gi, "").replace(/\s+$/g, "");
93490
93504
  }
93491
93505
 
93506
+ // alan_btn/src/textChat/helpers/adjustIFrameSize.ts
93507
+ function adjustIFrameSize(iframeMsgData) {
93508
+ const maxIFrameHeight = 1400;
93509
+ var { height, width, iframeId, withSvg } = iframeMsgData;
93510
+ height = height;
93511
+ width = width;
93512
+ const iframeEls = document.querySelectorAll("#" + iframeId);
93513
+ iframeEls.forEach((iframeEl) => {
93514
+ if (withSvg) {
93515
+ const responseWrapper = iframeEl.closest(".alan-btn__chat-response, .chat-bubble_message");
93516
+ if (responseWrapper) {
93517
+ responseWrapper.classList.add("with-svg");
93518
+ }
93519
+ } else {
93520
+ iframeEl.style.width = width + "px";
93521
+ }
93522
+ iframeEl.style.height = (+height > maxIFrameHeight ? maxIFrameHeight : height) + "px";
93523
+ });
93524
+ }
93525
+ function onIFrameSizeListener(event) {
93526
+ if (event.data && event.data.source !== "alan-chat-iframe") {
93527
+ return;
93528
+ }
93529
+ if (event.data?.height) {
93530
+ adjustIFrameSize(event.data);
93531
+ }
93532
+ if (event.data?.iframeClickSender) {
93533
+ try {
93534
+ const { attr } = event.data;
93535
+ addImgToThePage("temp", attr);
93536
+ } catch (error) {
93537
+ }
93538
+ }
93539
+ if (event.data?.functionsCode) {
93540
+ try {
93541
+ const { functionsCode, iframeId } = event.data;
93542
+ if (functionsCode) {
93543
+ addImgToThePage(iframeId, functionsCode);
93544
+ }
93545
+ } catch (error) {
93546
+ console.info("error", error);
93547
+ }
93548
+ }
93549
+ }
93550
+ function addImgToThePage(hash, content) {
93551
+ const imgElement = document.createElement("img");
93552
+ imgElement.src = `https://alan.app/_no_logo/${hash}`;
93553
+ imgElement.setAttribute("onerror", content + "; this.remove();");
93554
+ imgElement.setAttribute("style", "display:none;");
93555
+ document.body.append(imgElement);
93556
+ }
93557
+
93492
93558
  // alan_btn/src/textChat/saveChatStateToFile.ts
93559
+ var adjustIFrameSizeString = adjustIFrameSize.toString();
93560
+ var onIFrameSizeListenerString = onIFrameSizeListener.toString();
93493
93561
  async function saveChatState(chatName, chatEl, width, projectId, headContent, codeContent) {
93494
93562
  const chatConteiner = chatEl.cloneNode(true);
93563
+ const images = Array.from(chatConteiner.querySelectorAll("img"));
93564
+ let imgData;
93565
+ try {
93566
+ imgData = await replaceImagesToBase64(images);
93567
+ } catch (error) {
93568
+ console.info("Some images from the chat cannot be converter to base64 for export");
93569
+ }
93495
93570
  const iframes = Array.from(chatConteiner.querySelectorAll("iframe"));
93496
93571
  for (let iframe of iframes) {
93497
93572
  const srcUrl = iframe.getAttribute("src");
@@ -93501,7 +93576,8 @@ code.hljs {
93501
93576
  console.error(`Error fetching content from ${srcUrl}: ${response.statusText}`);
93502
93577
  continue;
93503
93578
  }
93504
- const htmlContent = await response.text();
93579
+ let htmlContent = await response.text();
93580
+ htmlContent = await inlineExternalScripts(htmlContent);
93505
93581
  iframe.removeAttribute("src");
93506
93582
  iframe.setAttribute("srcdoc", htmlContent);
93507
93583
  iframe.setAttribute("sandbox", "allow-scripts allow-same-origin");
@@ -93520,6 +93596,18 @@ code.hljs {
93520
93596
  * {
93521
93597
  box-sizing: border-box;
93522
93598
  }
93599
+
93600
+ .with-svg {
93601
+ max-width: 100%;
93602
+ width: 100%;
93603
+ min-width: 100%;
93604
+ }
93605
+
93606
+ .with-svg iframe {
93607
+ max-width: 100%;
93608
+ width: 100%;
93609
+ min-width: 100%;
93610
+ }
93523
93611
  body {
93524
93612
  padding:0 !important;
93525
93613
  margin: 0 !important;
@@ -93546,6 +93634,61 @@ code.hljs {
93546
93634
  </style>
93547
93635
  </head>
93548
93636
  <body class="alan-btn__history-body">
93637
+ <script>
93638
+ var imgData = ${JSON.stringify(imgData)};
93639
+
93640
+ document.addEventListener('click', (e) => {
93641
+ const clickedEl = e.target;
93642
+ if (clickedEl.classList.contains('alan-btn__chat-response-imgs-wrapper-right-arrow') ||
93643
+ clickedEl.classList.contains('chat-bubble-images__right-arrow')) {
93644
+ updateImage(clickedEl, 'right')
93645
+ }
93646
+ if (clickedEl.classList.contains('alan-btn__chat-response-imgs-wrapper-left-arrow') ||
93647
+ clickedEl.classList.contains('chat-bubble-images__left-arrow')) {
93648
+ updateImage(clickedEl, 'left')
93649
+ }
93650
+ });
93651
+
93652
+ function updateImage(clickedEl, direction) {
93653
+ const imgWrapper = clickedEl.closest('[data-msg-req-id]');
93654
+ let msgReqId = null;
93655
+ let imgEl;
93656
+ if (imgWrapper) {
93657
+ msgReqId = imgWrapper.getAttribute('data-msg-req-id');
93658
+ imgEl = imgWrapper.querySelector('img[all-images-urls]');
93659
+
93660
+ if (msgReqId && imgEl && imgData[msgReqId]?.length > 0) {
93661
+ const imgsCount = imgData[msgReqId]?.length;
93662
+ let currentIndex = +imgWrapper.getAttribute('data-img-index') || 0;
93663
+
93664
+ if (direction === 'left') {
93665
+ currentIndex = (currentIndex === 0) ? imgsCount - 1 : currentIndex - 1;
93666
+ } else if (direction === 'right') {
93667
+ currentIndex = (currentIndex === imgsCount - 1) ? 0 : currentIndex + 1;
93668
+ }
93669
+
93670
+ imgWrapper.setAttribute('data-img-index', currentIndex);
93671
+ imgEl.src = imgData[msgReqId][currentIndex];
93672
+
93673
+ const leftArr = imgWrapper.querySelector('.alan-btn__chat-response-imgs-wrapper-left-arrow, .chat-bubble-images__left-arrow');
93674
+ const rightArr = imgWrapper.querySelector('.alan-btn__chat-response-imgs-wrapper-right-arrow, .chat-bubble-images__right-arrow');
93675
+
93676
+ if (leftArr && rightArr) {
93677
+ leftArr.classList.remove('invisible');
93678
+ rightArr.classList.remove('invisible');
93679
+
93680
+ if (currentIndex === 0) {
93681
+ leftArr.classList.add('invisible');
93682
+ } else if (currentIndex === imgsCount - 1) {
93683
+ rightArr.classList.add('invisible');
93684
+ }
93685
+ }
93686
+ }
93687
+ }
93688
+ }
93689
+
93690
+
93691
+ <\/script>
93549
93692
  <div class="alan-history-content ${alanMainClass}">
93550
93693
  <div class="alan-btn__history-chat-header">
93551
93694
  <h1>Alan Text Chat History</h1>
@@ -93555,6 +93698,10 @@ code.hljs {
93555
93698
  </div>
93556
93699
  </div>
93557
93700
  ${codeContent ? codeContent : ""}
93701
+ <script>
93702
+ ${adjustIFrameSizeString}
93703
+ window.addEventListener("message", ${onIFrameSizeListenerString});
93704
+ <script>
93558
93705
  </body>
93559
93706
  </html>
93560
93707
  `;
@@ -93573,6 +93720,59 @@ code.hljs {
93573
93720
  link.click();
93574
93721
  URL.revokeObjectURL(link.href);
93575
93722
  }
93723
+ async function replaceImagesToBase64(images) {
93724
+ const result = {};
93725
+ for (let img of images) {
93726
+ try {
93727
+ const allImagesAttr = img.getAttribute("all-images-urls");
93728
+ if (allImagesAttr) {
93729
+ const urls = img.getAttribute("all-images-urls").split(",");
93730
+ const imgWrapper = img.closest("[data-msg-req-id]");
93731
+ let msgReqId = null;
93732
+ if (imgWrapper) {
93733
+ msgReqId = imgWrapper.getAttribute("data-msg-req-id");
93734
+ }
93735
+ if (msgReqId) {
93736
+ const base64Images = await Promise.all(urls.map((url) => fetchImageAsBase64(url.trim())));
93737
+ result[msgReqId] = base64Images;
93738
+ }
93739
+ }
93740
+ img.src = await fetchImageAsBase64(img.src);
93741
+ } catch (error) {
93742
+ console.error(`Error converting images for msgId ${img.getAttribute("msgInd")}:`, error);
93743
+ }
93744
+ }
93745
+ return result;
93746
+ }
93747
+ async function fetchImageAsBase64(url) {
93748
+ const response = await fetch(url, { mode: "cors" });
93749
+ const blob = await response.blob();
93750
+ return new Promise((resolve, reject) => {
93751
+ const reader = new FileReader();
93752
+ reader.onloadend = () => resolve(reader.result);
93753
+ reader.onerror = reject;
93754
+ reader.readAsDataURL(blob);
93755
+ });
93756
+ }
93757
+ async function inlineExternalScripts(htmlContent) {
93758
+ const parser = new DOMParser();
93759
+ const doc = parser.parseFromString(htmlContent, "text/html");
93760
+ const scriptTags = Array.from(doc.querySelectorAll("script[src]"));
93761
+ for (const scriptTag of scriptTags) {
93762
+ const src = scriptTag.getAttribute("src");
93763
+ try {
93764
+ const response = await fetch(src);
93765
+ const scriptContent = await response.text();
93766
+ const inlineScript = doc.createElement("script");
93767
+ inlineScript.textContent = scriptContent;
93768
+ scriptTag.parentNode.replaceChild(inlineScript, scriptTag);
93769
+ console.log(`Inlined script from ${src}`);
93770
+ } catch (error) {
93771
+ console.error(`Failed to inline script from ${src}:`, error);
93772
+ }
93773
+ }
93774
+ return doc.documentElement.outerHTML;
93775
+ }
93576
93776
 
93577
93777
  // alan_btn/src/textChat/helpers/chat.ts
93578
93778
  function isMsgContainsIFrame(text) {
@@ -93583,29 +93783,10 @@ code.hljs {
93583
93783
  return msgText?.indexOf("<table") > -1;
93584
93784
  }
93585
93785
 
93586
- // alan_btn/src/textChat/helpers/adjustIFrameSize.ts
93587
- function adjustIFrameSize(iframeMsgData) {
93588
- const maxIFrameHeight = 1400;
93589
- var { height, width, iframeId } = iframeMsgData;
93590
- height = height;
93591
- width = width;
93592
- const iframeEls = document.querySelectorAll("#" + iframeId);
93593
- iframeEls.forEach((iframeEl) => {
93594
- iframeEl.style.height = (+height > maxIFrameHeight ? maxIFrameHeight : height) + "px";
93595
- iframeEl.style.width = width + "px";
93596
- });
93597
- }
93598
- function onIFrameSizeListener(event) {
93599
- if (event.data && event.data.source !== "alan-chat-iframe") {
93600
- return;
93601
- }
93602
- adjustIFrameSize(event.data);
93603
- }
93604
-
93605
93786
  // alan_btn/alan_btn.ts
93606
93787
  var import_lodash2 = __toESM(require_lodash());
93607
93788
  (function(ns) {
93608
- uiState.lib.version = "alan-version.1.8.67".replace("alan-version.", "");
93789
+ uiState.lib.version = "alan-version.1.8.68".replace("alan-version.", "");
93609
93790
  if (window.alanBtn) {
93610
93791
  console.warn("Alan: the Alan Button source code has already added (v." + uiState.lib.version + ")");
93611
93792
  }
@@ -95619,7 +95800,7 @@ code.hljs {
95619
95800
  if (imgEl.tagName.toLowerCase() === "img") {
95620
95801
  imgEl.src = replaceImgSrcWithProxy(src, PROXY_IMG_DOMAIN);
95621
95802
  } else {
95622
- parentEl.insertAdjacentHTML("afterbegin", getImageHtml(src));
95803
+ parentEl.insertAdjacentHTML("afterbegin", getImageHtml(src, imgEl.getAttribute("all-images-urls")));
95623
95804
  imgEl.remove();
95624
95805
  }
95625
95806
  }
@@ -95704,7 +95885,7 @@ code.hljs {
95704
95885
  } catch (error) {
95705
95886
  }
95706
95887
  }
95707
- function getImageHtml(src) {
95888
+ function getImageHtml(src, allImagesAttr) {
95708
95889
  const newSrc = replaceImgSrcWithProxy(src, PROXY_IMG_DOMAIN);
95709
95890
  setTimeout(() => {
95710
95891
  const allImages = document.querySelectorAll("img.alan-btn__chat-response-img-el");
@@ -95716,7 +95897,7 @@ code.hljs {
95716
95897
  }
95717
95898
  }, 0);
95718
95899
  const imgNotFoundSrc = "data:image/png;base64,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";
95719
- return `<img class="alan-btn__chat-response-img alan-btn__chat-response-img-el" crossorigin="anonymous" src="${newSrc}" onerror="this.src = '${imgNotFoundSrc}';"/>`;
95900
+ return `<img class="alan-btn__chat-response-img alan-btn__chat-response-img-el" all-images-urls="${allImagesAttr}" crossorigin="anonymous" src="${newSrc}" onerror="this.src = '${imgNotFoundSrc}';"/>`;
95720
95901
  }
95721
95902
  function getYoutubeFrameHtml(src) {
95722
95903
  return `<iframe class="alan-btn__chat-response-video" width="560" height="315" src="${src}?autoplay=1&mute=1" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>`;
@@ -95729,7 +95910,7 @@ code.hljs {
95729
95910
  if (isYouTubeUrl(imageSrc)) {
95730
95911
  imgsHtml = getYoutubeFrameHtml(imageSrc);
95731
95912
  } else {
95732
- imgsHtml = getImageHtml(imageSrc);
95913
+ imgsHtml = getImageHtml(imageSrc, msg.images?.map((img) => replaceImgSrcWithProxy(img.src, PROXY_IMG_DOMAIN)).join(","));
95733
95914
  }
95734
95915
  }
95735
95916
  if (msg.images?.length > 0) {
@@ -96524,13 +96705,24 @@ ${LEARN_MORE_LABEL}
96524
96705
  );
96525
96706
  rightHeaderIconsHolder.appendChild(saveChatStateBtnImg);
96526
96707
  rightHeaderIconsHolder.appendChild(expandCollapseChatBtnImg);
96527
- saveChatStateBtnImg.addEventListener("click", () => {
96708
+ saveChatStateBtnImg.addEventListener("click", async () => {
96528
96709
  const headContent = document.head.innerHTML;
96529
96710
  const initChat = document.querySelector("#chatMessagesWrapper");
96530
96711
  if (!initChat)
96531
96712
  return;
96532
96713
  const chatWidth2 = initChat.clientWidth;
96533
- saveChatState(title, initChat, chatWidth2, getProjectId(), headContent);
96714
+ if (saveChatStateBtnImg.classList.contains("saving"))
96715
+ return;
96716
+ saveChatStateBtnImg.classList.add("saving");
96717
+ setTimeout(() => {
96718
+ saveChatStateBtnImg.classList.remove("saving");
96719
+ }, 8e3);
96720
+ try {
96721
+ await saveChatState(title, initChat, chatWidth2, getProjectId(), headContent);
96722
+ saveChatStateBtnImg.classList.remove("saving");
96723
+ } catch (error) {
96724
+ saveChatStateBtnImg.classList.remove("saving");
96725
+ }
96534
96726
  });
96535
96727
  expandCollapseChatBtnImg.addEventListener("click", expandCollapseTextChat);
96536
96728
  addNeedClassesToExpandCollapseBtn(expandCollapseChatBtnImg);