@eshal-bot/chat-widget 0.1.83 → 0.1.85
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/README.md +99 -99
- package/dist/chat-widget-MarkdownRenderer-BoJD0A_k.esm.js +31 -0
- package/dist/chat-widget-index-BdOGBqbs.esm.js +1 -0
- package/dist/chat-widget-index-BgHHb8hr.esm.js +20 -0
- package/dist/chat-widget-markdown-chunk.js +90868 -0
- package/dist/chat-widget-markdown-chunk.min.js +61 -0
- package/dist/chat-widget-webfontloader-BK8fca15.esm.js +1 -0
- package/dist/chat-widget.esm.js +1 -50
- package/dist/chat-widget.js +9574 -92078
- package/dist/chat-widget.min.js +6 -16
- package/dist/chat-widget.umd.js +8 -8
- package/index.d.ts +75 -75
- package/package.json +97 -94
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e,t){return t.forEach(function(t){t&&"string"!=typeof t&&!Array.isArray(t)&&Object.keys(t).forEach(function(o){if("default"!==o&&!(o in e)){var i=Object.getOwnPropertyDescriptor(t,o);Object.defineProperty(e,o,i.get?i:{enumerable:!0,get:function(){return t[o]}})}})}),Object.freeze(e)}var t={exports:{}};function o(e){try{const t=window[e];return t.setItem("__ft__","1"),t.removeItem("__ft__"),"1"}catch{return"0"}}function i(){try{return Array.from(navigator.plugins||[]).map(e=>`${e.name}::${e.filename}`).sort().join("|")}catch{return""}}function r(){try{return Array.from(navigator.mimeTypes||[]).map(e=>e.type).sort().join("|")}catch{return""}}function n(){try{const e=document.createElement("canvas");e.width=240,e.height=60;const t=e.getContext("2d");return t.textBaseline="alphabetic",t.fillStyle="#f60",t.fillRect(125,1,62,20),t.fillStyle="#069",t.font="11pt no-real-font-abc",t.fillText("user-trace:canvas,🔍<canvas>",2,15),t.fillStyle="rgba(102,204,0,0.7)",t.font="18pt Arial",t.fillText("user-trace:canvas,🔍<canvas>",4,45),e.toDataURL().slice(-50)}catch{return"nocanvas"}}function a(){try{const e=document.createElement("canvas"),t=e.getContext("webgl")||e.getContext("experimental-webgl");if(!t)return"nowebgl";const o=t.getExtension("WEBGL_debug_renderer_info"),i=o?t.getParameter(o.UNMASKED_VENDOR_WEBGL):t.getParameter(t.VENDOR);return`${i}::${o?t.getParameter(o.UNMASKED_RENDERER_WEBGL):t.getParameter(t.RENDERER)}`}catch{return"nowebgl"}}function s(){const e=["Arial","Courier New","Georgia","Times New Roman","Verdana","Helvetica","Comic Sans MS","Impact","Tahoma","Trebuchet MS","Palatino Linotype","Lucida Console","Lucida Sans Unicode","MS Sans Serif","MS Serif","Symbol","Wingdings","Franklin Gothic Medium","Book Antiqua","Garamond","Calibri","Cambria","Consolas","Candara","Optima","Segoe UI","Gill Sans","Century Gothic","Futura"];try{const t=document.createElement("canvas").getContext("2d"),o="monospace",i="mmmmmmmmmmlli",r="72px";t.font=`${r} ${o}`;const n=t.measureText(i).width;return e.filter(e=>(t.font=`${r} '${e}', ${o}`,t.measureText(i).width!==n)).join(",")}catch{return""}}function c(){try{return window.OfflineAudioContext||window.webkitOfflineAudioContext?"audio-supported":"noaudio"}catch{return"noaudio"}}var u={generateFingerprint:function(){const e=function(){const e=navigator||{},t=screen||{};return{userAgent:e.userAgent||"",language:e.language||"",languages:(e.languages||[]).join(","),platform:e.platform||"",hardwareConcurrency:e.hardwareConcurrency||0,deviceMemory:e.deviceMemory||0,maxTouchPoints:e.maxTouchPoints||0,cookieEnabled:e.cookieEnabled?"1":"0",doNotTrack:e.doNotTrack||"unknown",screenWidth:t.width||0,screenHeight:t.height||0,colorDepth:t.colorDepth||0,pixelDepth:t.pixelDepth||0,devicePixelRatio:"undefined"!=typeof devicePixelRatio?devicePixelRatio:1,timezoneOffset:(new Date).getTimezoneOffset(),timezone:Intl.DateTimeFormat().resolvedOptions().timeZone||"",sessionStorage:o("sessionStorage"),localStorage:o("localStorage"),indexedDB:"undefined"!=typeof indexedDB?"1":"0",cpuClass:e.cpuClass||"unknown",oscpu:e.oscpu||"unknown",vendor:e.vendor||"",vendorSub:e.vendorSub||"",productSub:e.productSub||"",plugins:i(),mimeTypes:r(),canvas:n(),webgl:a(),fonts:s(),audioContext:c()}}(),t=function(e){let t=5381;for(let o=0;o<e.length;o++)t=(t<<5)+t^e.charCodeAt(o),t&=t;return(t>>>0).toString(16).padStart(8,"0")}(Object.values(e).join("|||")),u=["nocanvas"!==e.canvas,"nowebgl"!==e.webgl&&""!==e.webgl,""!==e.fonts,""!==e.plugins,e.hardwareConcurrency>0,""!==e.timezone];return{id:t,signals:e,confidence:Math.round(u.filter(Boolean).length/u.length*100)}}};const l=[{url:"https://api.ipify.org?format=json",parse:e=>e.ip},{url:"https://api64.ipify.org?format=json",parse:e=>e.ip},{url:"https://api.my-ip.io/v2/ip.json",parse:e=>e.ip},{url:"https://ipapi.co/json/",parse:e=>e.ip}];async function p(e,t=4e3){const o=new AbortController,i=setTimeout(()=>o.abort(),t);try{const t=await fetch(e,{signal:o.signal});if(!t.ok)throw new Error(`HTTP ${t.status}`);return await t.json()}finally{clearTimeout(i)}}function d(e){return/^(\d{1,3}\.){3}\d{1,3}$/.test(e)||/^[0-9a-f:]{2,39}$/i.test(e)}var g={detectIP:async function(){for(const e of l)try{const t=await p(e.url),o=e.parse(t);if(o&&d(o))return{ip:o,source:new URL(e.url).hostname}}catch{}return null},getIPVersion:function(e){return e?/^(\d{1,3}\.){3}\d{1,3}$/.test(e)?"v4":/^[0-9a-f:]{2,39}$/i.test(e)?"v6":"unknown":"unknown"}};let m={apiKeys:{},preferredProvider:null,timeoutMs:5e3};function y(e={}){const t=[e.ipinfo&&{name:"ipinfo.io",tier:"free-with-key",freeLimit:"50,000 req/month",signup:"https://ipinfo.io/signup",buildUrl:t=>`https://ipinfo.io/${t}/json?token=${e.ipinfo}`,parse:e=>{if(e.error)throw new Error(e.error.message||"Failed");const[t,o]=(e.loc||"0,0").split(",").map(Number);return{ip:e.ip||"",country:e.country||"",countryCode:e.country||"",region:e.region||"",regionCode:"",city:e.city||"",zip:e.postal||"",latitude:t,longitude:o,timezone:e.timezone||"",isp:e.org||"",org:e.org||"",proxy:!1,hosting:!1}}},e.ipgeolocation&&{name:"ipgeolocation.io",tier:"free-with-key",freeLimit:"1,000 req/day",signup:"https://ipgeolocation.io/signup.html",buildUrl:t=>`https://api.ipgeolocation.io/ipgeo?apiKey=${e.ipgeolocation}&ip=${t}`,parse:e=>{if(e.message)throw new Error(e.message);return{ip:e.ip||"",country:e.country_name||"",countryCode:e.country_code2||"",region:e.state_prov||"",regionCode:e.state_code||"",city:e.city||"",zip:e.zipcode||"",latitude:parseFloat(e.latitude)||0,longitude:parseFloat(e.longitude)||0,timezone:e.time_zone?.name||"",isp:e.isp||"",org:e.organization||"",proxy:e.security?.is_proxy||!1,hosting:e.security?.is_hosting||!1}}},e.abstractapi&&{name:"abstractapi.com",tier:"free-with-key",freeLimit:"20,000 req/month",signup:"https://app.abstractapi.com/users/signup?target=/api/ip-geolocation",buildUrl:t=>`https://ipgeolocation.abstractapi.com/v1/?api_key=${e.abstractapi}&ip_address=${t}`,parse:e=>{if(e.error)throw new Error(e.error.message||"Failed");return{ip:e.ip_address||"",country:e.country||"",countryCode:e.country_code||"",region:e.region||"",regionCode:e.region_iso_code||"",city:e.city||"",zip:e.postal_code||"",latitude:e.latitude||0,longitude:e.longitude||0,timezone:e.timezone?.name||"",isp:e.connection?.isp_name||"",org:e.connection?.org_name||"",proxy:e.security?.is_vpn||!1,hosting:e.security?.is_hosting||!1}}},e.ip2location&&{name:"ip2location.io",tier:"free-with-key",freeLimit:"30,000 req/month",signup:"https://www.ip2location.io/sign-up",buildUrl:t=>`https://api.ip2location.io/?key=${e.ip2location}&ip=${t}&format=json`,parse:e=>{if(e.error)throw new Error(e.error.error_message||"Failed");return{ip:e.ip||"",country:e.country_name||"",countryCode:e.country_code||"",region:e.region_name||"",regionCode:"",city:e.city_name||"",zip:e.zip_code||"",latitude:e.latitude||0,longitude:e.longitude||0,timezone:e.time_zone||"",isp:e.isp||"",org:e.domain||"",proxy:e.is_proxy||!1,hosting:!1}}},e.ipstack&&{name:"ipstack.com",tier:"free-with-key",freeLimit:"100 req/month",signup:"https://ipstack.com/product",buildUrl:t=>`https://api.ipstack.com/${t}?access_key=${e.ipstack}`,parse:e=>{if(e.error)throw new Error(e.error.info||"Failed");return{ip:e.ip||"",country:e.country_name||"",countryCode:e.country_code||"",region:e.region_name||"",regionCode:e.region_code||"",city:e.city||"",zip:e.zip||"",latitude:e.latitude||0,longitude:e.longitude||0,timezone:e.time_zone?.id||"",isp:e.connection?.isp||"",org:"",proxy:!1,hosting:!1}}}].filter(Boolean),o=[{name:"ip-api.com",tier:"free",freeLimit:"45 req/min (no key needed)",buildUrl:e=>`https://ip-api.com/json/${e}?fields=status,message,country,countryCode,region,regionName,city,zip,lat,lon,timezone,isp,org,proxy,hosting,query`,parse:e=>{if("success"!==e.status)throw new Error(e.message||"Failed");return{ip:e.query||"",country:e.country||"",countryCode:e.countryCode||"",region:e.regionName||"",regionCode:e.region||"",city:e.city||"",zip:e.zip||"",latitude:e.lat||0,longitude:e.lon||0,timezone:e.timezone||"",isp:e.isp||"",org:e.org||"",proxy:e.proxy||!1,hosting:e.hosting||!1}}},{name:"ipwho.is",tier:"free",freeLimit:"unlimited (fair use, no key needed)",buildUrl:e=>`https://ipwho.is/${e}`,parse:e=>{if(!e.success)throw new Error(e.message||"Failed");return{ip:e.ip||"",country:e.country||"",countryCode:e.country_code||"",region:e.region||"",regionCode:e.region_code||"",city:e.city||"",zip:e.postal||"",latitude:e.latitude||0,longitude:e.longitude||0,timezone:e.timezone?.id||"",isp:e.connection?.isp||"",org:e.connection?.org||"",proxy:!1,hosting:!1}}},{name:"ipapi.co",tier:"free",freeLimit:"1,000 req/day (no key needed)",buildUrl:e=>`https://ipapi.co/${e}/json/`,parse:e=>{if(e.error)throw new Error(e.reason||"Failed");return{ip:e.ip||"",country:e.country_name||"",countryCode:e.country_code||"",region:e.region||"",regionCode:e.region_code||"",city:e.city||"",zip:e.postal||"",latitude:e.latitude||0,longitude:e.longitude||0,timezone:e.timezone||"",isp:e.org||"",org:e.org||"",proxy:!1,hosting:!1}}},{name:"freeipapi.com",tier:"free",freeLimit:"unlimited (fair use, no key needed)",buildUrl:e=>`https://freeipapi.com/api/json/${e}`,parse:e=>({ip:e.ipAddress||"",country:e.countryName||"",countryCode:e.countryCode||"",region:e.regionName||"",regionCode:e.regionCode||"",city:e.cityName||"",zip:e.zipCode||"",latitude:e.latitude||0,longitude:e.longitude||0,timezone:e.timeZone||"",isp:"",org:"",proxy:!1,hosting:!1})}],i=["freeipapi.com","ipwho.is","ipapi.co","ip-api.com"];return o.sort((e,t)=>i.indexOf(e.name)-i.indexOf(t.name)),[...t,...o]}async function f(e,t=5e3){const o=new AbortController,i=setTimeout(()=>o.abort(),t);try{const t=await fetch(e,{signal:o.signal});if(!t.ok)throw new Error(`HTTP ${t.status}`);return await t.json()}finally{clearTimeout(i)}}const h={enableHighAccuracy:!0,timeout:8e3,maximumAge:3e5};function w(e={}){return new Promise(t=>"undefined"!=typeof navigator&&navigator.geolocation?"undefined"!=typeof window&&!1===window.isSecureContext?t(null):void navigator.geolocation.getCurrentPosition(e=>t({latitude:e.coords.latitude,longitude:e.coords.longitude,accuracy:e.coords.accuracy}),()=>t(null),{...h,...e}):t(null))}async function _(e,t,o={}){if("number"!=typeof e||"number"!=typeof t)return null;const i=o.timeoutMs||m.timeoutMs||5e3,r=`https://api.bigdatacloud.net/data/reverse-geocode-client?latitude=${e}&longitude=${t}&localityLanguage=${o.localityLanguage||"en"}`;try{const o=await f(r,i),n=o.city||o.locality||"";return n||o.countryName?{city:n,region:o.principalSubdivision||"",regionCode:(o.principalSubdivisionCode||"").split("-").pop()||"",country:o.countryName||"",countryCode:o.countryCode||"",latitude:e,longitude:t}:null}catch{return null}}var v={configureGeo:function(e={}){e.apiKeys&&(m.apiKeys={...m.apiKeys,...e.apiKeys}),void 0!==e.preferredProvider&&(m.preferredProvider=e.preferredProvider),void 0!==e.timeoutMs&&(m.timeoutMs=e.timeoutMs)},resolveLocation:async function(e,t={}){const o={apiKeys:{...m.apiKeys,...t.apiKeys||{}},preferredProvider:t.preferredProvider||m.preferredProvider,timeoutMs:t.timeoutMs||m.timeoutMs};let i=y(o.apiKeys);if(o.preferredProvider){const e=i.findIndex(e=>e.name===o.preferredProvider);if(e>0){const[t]=i.splice(e,1);i.unshift(t)}}for(const t of i)try{const i=await f(t.buildUrl(e),o.timeoutMs);return{...t.parse(i),source:t.name,tier:t.tier}}catch{}return null},listProviders:function(e={}){return y({...m.apiKeys,...e}).map(({name:e,tier:t,freeLimit:o,signup:i})=>({name:e,tier:t,freeLimit:o,signup:i||"—"}))},getBrowserGeolocation:w,getGeolocationPermission:async function(){try{if("undefined"==typeof navigator||!navigator.permissions||!navigator.permissions.query)return"unsupported";return(await navigator.permissions.query({name:"geolocation"})).state}catch{return"unsupported"}},reverseGeocode:_,getBrowserLocation:async function(e={}){const t=await w(e);if(!t)return null;const o=await _(t.latitude,t.longitude,e),i=!(!o||!o.city&&!o.country);return{...i?o:{},latitude:t.latitude,longitude:t.longitude,accuracy:t.accuracy,...i?{source:"gps"}:{}}},toMapsUrl:function(e,t){return`https://www.google.com/maps?q=${e},${t}`}};const x="__ut_sid__",b="__ut_uid__",C="__ut_meta__";function S(){const e=new Uint8Array(16);crypto.getRandomValues(e),e[6]=15&e[6]|64,e[8]=63&e[8]|128;const t=Array.from(e).map(e=>e.toString(16).padStart(2,"0")).join("");return[t.slice(0,8),t.slice(8,12),t.slice(12,16),t.slice(16,20),t.slice(20)].join("-")}function k(e,t){try{return e.getItem(t)}catch{return null}}function z(e,t,o){try{return e.setItem(t,o),!0}catch{return!1}}var P={getOrCreateUserID:function(){let e=k(localStorage,b),t=!1;return e||(e=S(),t=!0,z(localStorage,b,e)),{uid:e,isNew:t}},getOrCreateSessionID:function(){let e=k(sessionStorage,x),t=!1;return e||(e=S(),t=!0,z(sessionStorage,x,e)),{sid:e,isNew:t}},saveSessionMeta:function(e){try{const t=JSON.stringify({...e,savedAt:(new Date).toISOString()});z(localStorage,C,t)}catch{}},loadSessionMeta:function(){try{const e=k(localStorage,C);return e?JSON.parse(e):null}catch{return null}},clearSession:function(){try{localStorage.removeItem(b)}catch{}try{localStorage.removeItem(C)}catch{}try{sessionStorage.removeItem(x)}catch{}},getBrowserContext:function(){return{userAgent:navigator.userAgent,platform:navigator.platform||"unknown",language:navigator.language||"unknown",timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,screenRes:`${screen.width}x${screen.height}`,viewportRes:`${window.innerWidth}x${window.innerHeight}`,colorDepth:screen.colorDepth,touchSupport:navigator.maxTouchPoints>0,cookieEnabled:navigator.cookieEnabled,referrer:document.referrer||null,currentUrl:window.location.href,loadedAt:(new Date).toISOString()}}};const{generateFingerprint:A}=u,{detectIP:$,getIPVersion:E}=g,{configureGeo:O,resolveLocation:I,listProviders:D,getBrowserGeolocation:L,getGeolocationPermission:U,reverseGeocode:T,getBrowserLocation:M,toMapsUrl:B}=v,{getOrCreateUserID:N,getOrCreateSessionID:G,saveSessionMeta:R,loadSessionMeta:j,clearSession:F,getBrowserContext:K}=P;t.exports=class{constructor(e={}){this._options={onReady:e.onReady||null,onError:e.onError||null,geoFromBrowser:void 0===e.geoFromBrowser||e.geoFromBrowser,geoApiKeys:e.geoApiKeys||null,geoOptions:e.geoOptions||null,cache:!1!==e.cache,maxAgeMs:e.maxAgeMs||3e5,autoInit:e.autoInit||!1,webhookUrl:e.webhookUrl||null},this.profile=null,this._ready=!1,this._options.autoInit&&this.init().catch(()=>{})}async init(){if(this._options.cache){const e=j();if(e&&e.savedAt){if(Date.now()-new Date(e.savedAt).getTime()<this._options.maxAgeMs)return this.profile=e,this._ready=!0,this._options.onReady&&this._options.onReady(this.profile),this.profile}}try{const{uid:e,isNew:t}=N(),{sid:o,isNew:i}=G(),{id:r,signals:n,confidence:a}=A(),s=this._options.geoApiKeys?{apiKeys:this._options.geoApiKeys}:{},[c,u]=await Promise.all([(async()=>{const e=await $(),t=e?.ip||"unknown",o="unknown"!==t?await I(t,s):null;return{ip:t,ipVersion:e?E(t):"unknown",geo:o}})(),this._collectBrowserLocation()]),{ip:l,ipVersion:p}=c;let d=c.geo,g=null;u&&(g={latitude:u.latitude,longitude:u.longitude,accuracy:u.accuracy},"gps"===u.source&&(d={...d||{},...u}));const m=K();return this.profile={uid:e,sid:o,isNewUser:t,isNewSession:i,fingerprintId:r,fingerprintConfidence:a,ip:l,ipVersion:p,geo:d||null,browserGeo:g||null,browser:m,raw:n,createdAt:(new Date).toISOString(),...d?{mapsUrl:B(d.latitude,d.longitude)}:{}},R(this.profile),this._options.webhookUrl&&this._sendToWebhook(this.profile),this._ready=!0,this._options.onReady&&this._options.onReady(this.profile),this.profile}catch(e){throw this._options.onError&&this._options.onError(e),e}}async _collectBrowserLocation(){const e=this._options.geoFromBrowser;if(!e)return null;if("auto"===e){if("granted"!==await U())return null}return M(this._options.geoOptions||{})}async captureBrowserLocation(e={}){const t=await M({...this._options.geoOptions||{},...e});return t&&this.profile?(this.profile.browserGeo={latitude:t.latitude,longitude:t.longitude,accuracy:t.accuracy},this.profile.mapsUrl=B(t.latitude,t.longitude),"gps"===t.source&&(this.profile.geo={...this.profile.geo||{},...t}),R(this.profile),this._options.onReady&&this._options.onReady(this.profile),this.profile):this.profile}getProfile(){return this.profile}isKnownUser(e){return this.profile?.uid===e}async refresh(){return F(),this.profile=null,this._ready=!1,this.init()}clear(){F(),this.profile=null,this._ready=!1}getSummary(){if(!this.profile)return null;const{uid:e,sid:t,fingerprintId:o,ip:i,geo:r,browser:n,createdAt:a}=this.profile;return{uid:e,sid:t,fingerprintId:o,ip:i,country:r?.country||"unknown",city:r?.city||"unknown",isp:r?.isp||"unknown",proxy:r?.proxy||!1,timezone:r?.timezone||n.timezone,userAgent:n.userAgent,language:n.language,createdAt:a}}async _sendToWebhook(e){try{await fetch(this._options.webhookUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}catch{}}};var q=t.exports.generateFingerprint=A,V=t.exports.detectIP=$,W=t.exports.configureGeo=O,H=t.exports.resolveLocation=I,J=t.exports.listProviders=D,Z=t.exports.getBrowserGeolocation=L,Q=t.exports.getGeolocationPermission=U,X=t.exports.reverseGeocode=T,Y=t.exports.getBrowserLocation=M,ee=t.exports.getOrCreateUserID=N,te=t.exports.getOrCreateSessionID=G,oe=t.exports.clearSession=F,ie=t.exports.getBrowserContext=K,re=t.exports,ne=e({__proto__:null,clearSession:oe,configureGeo:W,default:re,detectIP:V,generateFingerprint:q,getBrowserContext:ie,getBrowserGeolocation:Z,getBrowserLocation:Y,getGeolocationPermission:Q,getOrCreateSessionID:te,getOrCreateUserID:ee,listProviders:J,resolveLocation:H,reverseGeocode:X},[re]);export{ne as i};
|