@iheartjane/dm-sdk 2.24.1 → 2.25.0
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/chunk-TGCEYA6I.js +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +3 -232
- package/dist/index.d.ts +3 -232
- package/dist/index.js +1 -1
- package/dist/{smartSort-DJFM0D_n.d.cts → smartSort-Bzn30738.d.cts} +10 -76
- package/dist/{smartSort-DJFM0D_n.d.ts → smartSort-Bzn30738.d.ts} +10 -76
- package/dist/test-utils.cjs +1 -1
- package/dist/test-utils.d.cts +2 -15
- package/dist/test-utils.d.ts +2 -15
- package/dist/test-utils.js +1 -1
- package/package.json +9 -6
- package/dist/chunk-VEW5EGZ2.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var Q=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var Z=(u,i,c,t)=>{for(var o=t>1?void 0:t?U(i,c):i,a=u.length-1,p;a>=0;a--)(p=u[a])&&(o=(t?p(i,c,o):p(o))||o);return t&&o&&Q(i,c,o),o};var m=(t=>(t.All="all",t.Default="default",t.Off="off",t))(m||{}),d=(s=>(s.Bloom="bloom",s.Default="default",s.Embedded="embedded",s.FramelessEmbed="framelessEmbed",s.Headless="headless",s.Kiosk="kiosk",s.OperatorEmbed="operatorEmbed",s.WhiteLabel="whiteLabel",s))(d||{}),l=(t=>(t.Desktop="desktop",t.Kiosk="kiosk",t.Mobile="mobile",t))(l||{}),g=(i=>(i.UserOptOut="user-opt-out",i))(g||{});var _=(c=>(c.Featured="featured",c.Midgrid="midgrid",c))(_||{}),P=(r=>(r.BestSelling="best_selling",r.BrandSpecials="brand_specials",r.BuyAgainRow="buy_again_row",r.CartToppers="cart_toppers",r.CustomImageRow="custom_image_row",r.FeaturedRow="featured_row",r.MenuDynamicRow="menu_dynamic_row",r.MenuInline="menu_inline",r.MenuInlineTable="menu_inline_table",r.MenuTopRow="menu_top_row",r.PdpRow="pdp_row",r.Sale="sale",r.Specials="specials",r))(P||{}),R=(n=>(n.Edible="edible",n.Extract="extract",n.Flower="flower",n.Gear="gear",n.Grow="grow",n.Merch="merch",n.PreRoll="pre-roll",n.Tincture="tincture",n.Topical="topical",n.Vape="vape",n))(R||{}),b=(t=>(t.Rating="rating",t.Recent="recent",t.Upvote="upvote",t))(b||{}),x=(e=>(e.BestSellerRank="best-seller-rank",e.CategoryAndNameAsc="category-and-name-asc",e.Default="default",e.PriceAsc="price-asc",e.PriceDesc="price-desc",e.PriceEighthOunceAsc="price-eighth-ounce-asc",e.PriceEighthOunceDesc="price-eighth-ounce-desc",e.PriceGramAsc="price-gram-asc",e.PriceGramDesc="price-gram-desc",e.PriceHalfGramAsc="price-half-gram-asc",e.PriceHalfGramDesc="price-half-gram-desc",e.PriceHalfOunceAsc="price-half-ounce-asc",e.PriceHalfOunceDesc="price-half-ounce-desc",e.PriceOunceAsc="price-ounce-asc",e.PriceOunceDesc="price-ounce-desc",e.PriceQuarterOunceAsc="price-quarter-ounce-asc",e.PriceQuarterOunceDesc="price-quarter-ounce-desc",e.PriceTwoGramAsc="price-two-gram-asc",e.PriceTwoGramDesc="price-two-gram-desc",e.Rating="rating",e.Recommendation="recommendation",e.ThcPotencyAsc="thc-potency-asc",e.ThcPotencyDesc="thc-potency-desc",e))(x||{});var z=50;var f="best-seller-rank",w="category-and-name-asc",v="default",y="price-asc",h="price-desc",C="price-eighth-ounce-asc",I="price-eighth-ounce-desc",q="price-gram-asc",D="price-gram-desc",S="price-half-gram-asc",A="price-half-gram-desc",O="price-half-ounce-asc",M="price-half-ounce-desc",T="price-ounce-asc",F="price-ounce-desc",k="price-quarter-ounce-asc",B="price-quarter-ounce-desc",G="price-two-gram-asc",E="price-two-gram-desc",j="rating",H="recommendation",N="thc-potency-asc",V="thc-potency-desc",J=[f,w,v,y,h,C,I,q,D,S,A,O,M,T,F,k,B,G,E,j,H,N,V];var L={click:"/v2/event/2",externalCheckout:"/v2/event/3e",facets:"/v2/facets",fingerprint:"/fp/token",impression:"/v2/event/1",multi:"/v2/multi",page:"/v2/smartpage",product:"/v2/product",productReviews:"/v2/product/reviews",sessionEvent:"/v2/event/session",smart:"/v2/smart"};export{Z as a,L as b,m as c,d,l as e,g as f,_ as g,P as h,R as i,b as j,x as k,z as l,f as m,w as n,v as o,y as p,h as q,C as r,I as s,q as t,D as u,S as v,A as w,O as x,M as y,T as z,F as A,k as B,B as C,G as D,E,j as F,H as G,N as H,V as I,J};
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var et=Object.create;var ae=Object.defineProperty;var Ae=Object.getOwnPropertyDescriptor;var tt=Object.getOwnPropertyNames;var rt=Object.getPrototypeOf,st=Object.prototype.hasOwnProperty;var it=(r,e)=>{for(var t in e)ae(r,t,{get:e[t],enumerable:!0})},Me=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of tt(e))!st.call(r,i)&&i!==t&&ae(r,i,{get:()=>e[i],enumerable:!(s=Ae(e,i))||s.enumerable});return r};var nt=(r,e,t)=>(t=r!=null?et(rt(r)):{},Me(e||!r||!r.__esModule?ae(t,"default",{value:r,enumerable:!0}):t,r)),ot=r=>Me(ae({},"__esModule",{value:!0}),r),S=(r,e,t,s)=>{for(var i=s>1?void 0:s?Ae(e,t):e,a=r.length-1,o;a>=0;a--)(o=r[a])&&(i=(s?o(e,t,i):o(i))||i);return s&&i&&ae(e,t,i),i};var Tt={};it(Tt,{AdMode:()=>M,AppMode:()=>ce,BrandSpecials:()=>me,DEFAULT_PAGE_SIZE:()=>pe,IntendedDisplay:()=>ge,JaneDM:()=>R,JaneDeviceIdSentinel:()=>de,PageContextEnum:()=>he,Placement:()=>I,ProductKindEnum:()=>fe,ReviewSortEnum:()=>Re,SearchSortEnum:()=>ue,SmartSort:()=>A,SmartSortProduct:()=>k,Specials:()=>le,VirtualBudtenderProduct:()=>Pe,bestSellerRank:()=>O,categoryAndNameAsc:()=>B,defaultOrder:()=>E,priceAsc:()=>j,priceDesc:()=>U,priceEighthOunceAsc:()=>V,priceEighthOunceDesc:()=>N,priceGramAsc:()=>G,priceGramDesc:()=>Q,priceHalfGramAsc:()=>z,priceHalfGramDesc:()=>J,priceHalfOunceAsc:()=>L,priceHalfOunceDesc:()=>H,priceOunceAsc:()=>K,priceOunceDesc:()=>$,priceQuarterOunceAsc:()=>W,priceQuarterOunceDesc:()=>Z,priceTwoGramAsc:()=>X,priceTwoGramDesc:()=>Y,rating:()=>ee,recommendation:()=>te,searchSorts:()=>Ie,thcPotencyAsc:()=>re,thcPotencyDesc:()=>se});module.exports=ot(Tt);var P={click:"/v2/event/2",externalCheckout:"/v2/event/3e",facets:"/v2/facets",fingerprint:"/fp/token",impression:"/v2/event/1",multi:"/v2/multi",page:"/v2/smartpage",product:"/v2/product",productReviews:"/v2/product/reviews",sessionEvent:"/v2/event/session",smart:"/v2/smart",virtualBudtenderQueries:"/v2/virtual-budtender/queries",virtualBudtenderSearch:"/v2/virtual-budtender"};var M=(s=>(s.All="all",s.Default="default",s.Off="off",s))(M||{}),ce=(c=>(c.Bloom="bloom",c.Default="default",c.Embedded="embedded",c.FramelessEmbed="framelessEmbed",c.Headless="headless",c.Kiosk="kiosk",c.OperatorEmbed="operatorEmbed",c.WhiteLabel="whiteLabel",c))(ce||{}),ge=(s=>(s.Desktop="desktop",s.Kiosk="kiosk",s.Mobile="mobile",s))(ge||{}),de=(e=>(e.UserOptOut="user-opt-out",e))(de||{});var he=(t=>(t.Featured="featured",t.Midgrid="midgrid",t))(he||{}),I=(u=>(u.BestSelling="best_selling",u.BrandSpecials="brand_specials",u.BuyAgainRow="buy_again_row",u.CartToppers="cart_toppers",u.CustomImageRow="custom_image_row",u.FeaturedRow="featured_row",u.MenuDynamicRow="menu_dynamic_row",u.MenuInline="menu_inline",u.MenuInlineTable="menu_inline_table",u.MenuTopRow="menu_top_row",u.PdpRow="pdp_row",u.Sale="sale",u.Specials="specials",u.VirtualBudtenderSearch="virtual_budtender_search",u))(I||{}),fe=(d=>(d.Edible="edible",d.Extract="extract",d.Flower="flower",d.Gear="gear",d.Grow="grow",d.Merch="merch",d.PreRoll="pre-roll",d.Tincture="tincture",d.Topical="topical",d.Vape="vape",d))(fe||{}),Re=(s=>(s.Rating="rating",s.Recent="recent",s.Upvote="upvote",s))(Re||{}),ue=(h=>(h.BestSellerRank="best-seller-rank",h.CategoryAndNameAsc="category-and-name-asc",h.Default="default",h.PriceAsc="price-asc",h.PriceDesc="price-desc",h.PriceEighthOunceAsc="price-eighth-ounce-asc",h.PriceEighthOunceDesc="price-eighth-ounce-desc",h.PriceGramAsc="price-gram-asc",h.PriceGramDesc="price-gram-desc",h.PriceHalfGramAsc="price-half-gram-asc",h.PriceHalfGramDesc="price-half-gram-desc",h.PriceHalfOunceAsc="price-half-ounce-asc",h.PriceHalfOunceDesc="price-half-ounce-desc",h.PriceOunceAsc="price-ounce-asc",h.PriceOunceDesc="price-ounce-desc",h.PriceQuarterOunceAsc="price-quarter-ounce-asc",h.PriceQuarterOunceDesc="price-quarter-ounce-desc",h.PriceTwoGramAsc="price-two-gram-asc",h.PriceTwoGramDesc="price-two-gram-desc",h.Rating="rating",h.Recommendation="recommendation",h.ThcPotencyAsc="thc-potency-asc",h.ThcPotencyDesc="thc-potency-desc",h))(ue||{});var pe=50;var O="best-seller-rank",B="category-and-name-asc",E="default",j="price-asc",U="price-desc",V="price-eighth-ounce-asc",N="price-eighth-ounce-desc",G="price-gram-asc",Q="price-gram-desc",z="price-half-gram-asc",J="price-half-gram-desc",L="price-half-ounce-asc",H="price-half-ounce-desc",K="price-ounce-asc",$="price-ounce-desc",W="price-quarter-ounce-asc",Z="price-quarter-ounce-desc",X="price-two-gram-asc",Y="price-two-gram-desc",ee="rating",te="recommendation",re="thc-potency-asc",se="thc-potency-desc",Ie=[O,B,E,j,U,V,N,G,Q,z,J,L,H,K,$,W,Z,X,Y,ee,te,re,se];var Be="2.24.1";var ve=(r,e)=>{let{apiKey:t,source:s}=e,i=new URL(r);return i.searchParams.set("jdm_source",s),i.searchParams.set("jdm_version",Be),t&&i.searchParams.set("jdm_api_key",t),i.searchParams.sort(),i.toString()},f=(r,e,t)=>{let s=new URL(r+e);return ve(s.toString(),t)},v=(r,e)=>{let t=new URL(r+P.click),s=new URL(r+P.impression);return{clickEndpoint:ve(t.toString(),e),impressionEndpoint:ve(s.toString(),e)}},xe=class extends Error{response;constructor(e,t){super(e),this.response=t}},Ee=async r=>{if(r.ok){if(r.status===204)return null}else throw new xe("Api Request Failed",r);try{return await r.json()}catch{}},at=async(r,e)=>{let t=await fetch(r,{body:JSON.stringify(e),headers:{Accept:"application/json","Content-Type":"text/plain"},method:"POST"});return Ee(t)},ct=async(r,e={})=>{let{headers:t,...s}=e,i=await fetch(r,{...s,headers:{Accept:"application/json",...t},method:"GET"});return Ee(i)},g={get:ct,post:at};var ke=require("nanoid");var x=()=>typeof window<"u"&&typeof document<"u";var dt=(...r)=>{console.error("[JaneDmSDK]",...r)},ut=(...r)=>{console.info("[JaneDmSDK]",...r)},pt=(...r)=>{console.log("[JaneDmSDK]",...r)},C={error:dt,info:ut,log:pt};var mt=r=>{let e=localStorage.getItem(r);return e!==null?gt(e):e},lt=(r,e)=>localStorage.setItem(r,ht(e)),Pt=r=>localStorage.removeItem(r),q={get:mt,remove:Pt,set:lt},gt=r=>je(r)?r.substring(1,r.length-1):r,ht=r=>je(r)?r:`"${r}"`,je=r=>{let t=r.length-1;return r[0]==='"'&&r[t]==='"'};var De="j_fp_last_run",ft=1440*60*1e3,Rt=20,Ce=new Set,St=(r,e)=>`${r}:${e.apiKey}:${e.source}`;var _t=r=>typeof r=="object"&&r!==null&&typeof r.token=="string"&&typeof r.endpoint=="string"&&typeof r.scriptUrlPattern=="string",yt=async(r,e)=>{try{let t=f(r,P.fingerprint,e),s=await g.get(t);return _t(s)?s:null}catch(t){return C.error("Failed to fetch fingerprint token:",t),null}},bt=async(r,e,t,s)=>{try{let i=await import("@fingerprintjs/fingerprintjs-pro"),o=await i.load({apiKey:r,endpoint:[e,i.defaultEndpoint],region:"us",scriptUrlPattern:[t,i.defaultScriptUrlPattern],storageKey:"eyeD"}),n={tag:{isDmSdk:!0}};s?.linkedId&&(n.linkedId=s.linkedId);let c=await o.get(n);return!c||!c.visitorId?(C.error("Fingerprint JS did not return a valid visitorId"),null):{visitorId:c.visitorId}}catch(i){return C.error("Failed to run Fingerprint JS:",i),null}},Ue=async(r,e,t)=>{if(!x())return(0,ke.nanoid)();let s=q.get("jdid");if(!s)return await Ge(r,e,t)??(0,ke.nanoid)();if(s.length!==Rt)return await Fe(r,e,{linkedId:s}),s;let i=await Ne(r,e,t);if(i)return i;if(Ve()==="error")try{q.set(De,Date.now().toString())}catch{}return s},Ve=()=>{try{let r=q.get(De);if(!r)return"missing";let e=parseInt(r,10);return Number.isNaN(e)?"missing":Date.now()-e>=ft?"expired":"valid"}catch{return"error"}},Ne=async(r,e,t)=>{let s=Ve();return s==="valid"||s==="error"?null:Ge(r,e,t)},Ge=async(r,e,t)=>{let s=St(r,e);if(Ce.has(s))return null;Ce.add(s);try{let i=await yt(r,e);if(!i)return null;let a=await bt(i.token,i.endpoint,i.scriptUrlPattern,t);if(!a)return null;try{q.set(De,Date.now().toString())}catch{}return a.visitorId}catch(i){return C.error("Failed to run fingerprint:",i),null}finally{Ce.delete(s)}},Fe=async(r,e,t)=>{if(x()&&t?.linkedId!=="user-opt-out")try{await Ne(r,e,t)}catch(s){C.error("Failed to run SSR fingerprint:",s)}};var w=class r extends Error{constructor(e){super(`[Jane DM SDK]: ${e}`),this.name="SdkError",Object.setPrototypeOf(this,r.prototype)}};var Te=r=>{switch(r){case O:return"best-seller-rank";case B:return"category-and-name-asc";case j:return"price-asc";case U:return"price-desc";case V:return"price-eighth-ounce-asc";case N:return"price-eighth-ounce-desc";case G:return"price-gram-asc";case Q:return"price-gram-desc";case z:return"price-half-gram-asc";case J:return"price-half-gram-desc";case L:return"price-half-ounce-asc";case H:return"price-half-ounce-desc";case K:return"price-ounce-asc";case $:return"price-ounce-desc";case W:return"price-quarter-ounce-asc";case Z:return"price-quarter-ounce-desc";case X:return"price-two-gram-asc";case Y:return"price-two-gram-desc";case ee:return"rating";case te:return"recommendation";case re:return"thc-potency-asc";case se:return"thc-potency-desc";case E:default:return"default"}};var ie=r=>JSON.parse(r);var qe=class r{isSponsored;objectId;clickPayload;clickUrl;impressPayload;impressUrl;constructor(e){this.objectId=e.objectId,this.impressUrl=e.impressUrl,this.impressPayload=e.impressPayload,this.clickPayload=e.clickPayload,this.clickUrl=e.clickUrl,this.isSponsored=e.isSponsored}static fromJSON(e){return new r(ie(e))}serialize(){return{clickPayload:this.clickPayload,clickUrl:this.clickUrl,impressPayload:this.impressPayload,impressUrl:this.impressUrl,isSponsored:this.isSponsored,objectId:this.objectId}}toJSON(){return JSON.stringify(this.serialize())}},k=class r{attributes;isSponsored;objectId;clickPayload;clickUrl;hasBeenImpressed;impressPayload;impressPromise;impressUrl;constructor(e){this.objectId=e.objectId,this.attributes=e.attributes,this.impressUrl=e.impressUrl,this.impressPayload=e.impressPayload,this.clickPayload=e.clickPayload,this.clickUrl=e.clickUrl,this.isSponsored=e.isSponsored,this.hasBeenImpressed=e.hasBeenImpressed??!1}static fromJSON(e){return new r(ie(e))}click(e={isAddToCart:!1}){let{isAddToCart:t=!1}=e,s={...this.clickPayload,isAddToCart:t};return g.post(this.clickUrl,s)}impress(){return this.hasBeenImpressed?Promise.resolve():(this.impressPromise??=g.post(this.impressUrl,this.impressPayload).then(()=>{this.hasBeenImpressed=!0}).finally(()=>{this.impressPromise=void 0}),this.impressPromise)}serialize(){return{attributes:this.attributes,clickPayload:this.clickPayload,clickUrl:this.clickUrl,hasBeenImpressed:this.hasBeenImpressed,impressPayload:this.impressPayload,impressUrl:this.impressUrl,isSponsored:this.isSponsored,objectId:this.objectId}}toJSON(){return JSON.stringify(this.serialize())}},A=class r{customImages;placement;products;rowId;searchFacets;title;totalProducts;creativeIds;cachedProducts;config;loadPromise;nextPageProps;nextPageUrl;constructor(e){this.rowId=e.rowId,this.searchFacets=e.searchFacets,this.nextPageUrl=e.nextPageUrl,this.nextPageProps=e.nextPageProps,this.products=e.products.map(t=>new k(t)),this.cachedProducts=e.cachedProducts.map(t=>new qe(t)),this.totalProducts=e.totalProducts,this.title=e.title,this.creativeIds=e.creativeIds,this.config=e.config,this.customImages=e.customImages??[],this.placement=e.placement,x()&&!this.config.skipAutoSmartSortOnLoad&&this.onLoad().catch(t=>C.error("Failed to run onLoad:",t))}static fromJSON(e){return new r(ie(e))}hasNextPage(){return this.cachedProducts.length>0}async nextPage(){if(!this.hasNextPage())return;let e=this.cachedProducts.slice(0,this.nextPageProps.pageSize),t={app_mode:this.config.appMode,jane_device_id:this.config.identifier.jdid,object_ids:e.map(a=>a.objectId),search_attributes:this.nextPageProps.searchAttributes},s=await g.post(this.nextPageUrl,t),i=new Map(s.products?.map(a=>[a.object_id,a.search_attributes]));e.forEach(a=>{let o=i.get(a.objectId);o!==void 0&&this.products.push(new k({...a.serialize(),attributes:o}))}),this.cachedProducts=this.cachedProducts.slice(this.nextPageProps.pageSize)}async onLoad(){return this.loadPromise?this.loadPromise:(this.loadPromise=(async()=>{if(!x())return;let e={apiKey:this.config.apiKey,source:this.config.source};await Fe(this.config.eventsEndpoint,e,{linkedId:this.config.identifier.jdid})})(),this.loadPromise)}serialize(){return{cachedProducts:this.cachedProducts.map(e=>e.serialize()),config:this.config,creativeIds:this.creativeIds,customImages:this.customImages,nextPageProps:this.nextPageProps,nextPageUrl:this.nextPageUrl,placement:this.placement,products:this.products.map(e=>e.serialize()),rowId:this.rowId,searchFacets:this.searchFacets,title:this.title,totalProducts:this.totalProducts}}toJSON(){return JSON.stringify(this.serialize())}},ne=class{async createSmartSort(e){let t={apiKey:e.config.apiKey,source:e.config.source},s=f(e.config.endpoint,P.smart,t),i=f(e.config.pageEndpoint,P.page,t),a=this.buildSmartRequest(e),o=await g.post(s,a),{clickEndpoint:n,impressionEndpoint:c}=v(e.config.eventsEndpoint,t),{creative_ids:m,custom_images:d,products:l,row_id:p,search_facets:b,title:u}=o,{cachedProducts:D,products:F}=this.generateProducts({clickUrl:n,identifier:e.config.identifier,impressUrl:c,products:l}),T=(d??[]).map(oe=>this.massageCustomImageData(oe)).filter(oe=>oe!==void 0);return new A({cachedProducts:D,config:e.config,creativeIds:m,customImages:T,nextPageProps:{pageSize:"page_size"in a?a.page_size??60:60,searchAttributes:a.search_attributes??e.searchAttributes},nextPageUrl:i,placement:e.placement,products:F,rowId:p,searchFacets:b,title:u,totalProducts:o.nb_hits??0})}generateProducts(e){let{clickUrl:t,identifier:s,impressUrl:i,products:a}=e,o={cachedProducts:[],products:[]};return a?.forEach(n=>{let c={clickPayload:{adToken:n.ad_token,distinctId:s.mixpanelDistinctId??s.jdid,isAddToCart:!1,janeDeviceId:s.jdid,kevelToken:n.kevel_token,myHighD:n.my_high_d,productId:n.product_id,storeId:n.store_id},clickUrl:t,impressPayload:{distinctId:s.mixpanelDistinctId??s.jdid,engagements:[{adToken:n.ad_token,kevelToken:n.kevel_token,myHighD:n.my_high_d,productId:n.product_id}],janeDeviceId:s.jdid},impressUrl:i,isSponsored:!!n.flight_id,objectId:n.object_id};n.search_attributes!==void 0?o.products.push({...c,attributes:n.search_attributes}):o.cachedProducts.push(c)}),o}massageCustomImageData(e){if(e)return{headline:e.headline,imageUrl:e.image_url,intendedDisplay:e.intended_display,logoUrl:e.logo_url,overlayColor:e.overlay_color,positionX:e.position_x,positionY:e.position_y,scaleNumber:e.scale_number,textColor:e.text_color}}buildSmartRequest(e){let{config:t,searchAttributes:s,...i}=e,a={app_mode:t.appMode,distinct_id:t.identifier.mixpanelDistinctId,jane_device_id:t.identifier.jdid,pos_user_id:t.identifier.posUserId,search_attributes:s,user_id:t.identifier.userId};switch(i.placement){case"cart_toppers":{let{cartProductIds:o,posCartProductIds:n,storeId:c}=i;return{...a,cart_pos_product_ids:n,cart_product_ids:o,placement:"cart_toppers",store_id:c}}case"custom_image_row":{let{searchFilter:o,storeId:n}=i;return{...a,placement:"custom_image_row",search_filter:o,store_id:n}}case"menu_dynamic_row":{let{adMode:o,filterContext:n,pageContext:c,storeId:m}=i;return{...a,ad_mode:o??"default",filter_context:n,page_context:c,placement:"menu_dynamic_row",store_id:m}}case"menu_inline":{let{adMode:o,distinctByProduct:n,metadata:c,numColumns:m,searchFilter:d,searchQuery:l,searchSort:p,storeId:b,storeIds:u}=i;return{...a,ad_mode:o??"default",distinct_by_product:n,metadata:c,num_columns:m,placement:"menu_inline",search_filter:d,search_query:l,search_sort:Te(p),store_ids:u||[b]}}case"menu_inline_table":{let{disableAds:o,distinctByProduct:n,maxProducts:c,metadata:m,numColumns:d,pageSize:l,searchFacets:p,searchFilter:b,searchQuery:u,searchSort:D,storeId:F,storeIds:T}=i;return{...a,disable_ads:o,distinct_by_product:n,max_products:c,metadata:m,num_columns:d,page_size:l,placement:"menu_inline_table",search_attributes:s,search_facets:p,search_filter:b,search_query:u,search_sort:Te(D),store_ids:T||[F]}}case"menu_top_row":{let{searchFilter:o,storeId:n}=i,c=this.extractValidCreativeIds(e);return{...a,exclude_creative_ids:c,placement:"menu_top_row",search_filter:o,store_id:n}}case"pdp_row":{let{posProductId:o,productId:n,storeId:c}=i;return{...a,placement:"pdp_row",pos_product_id:o,product_id:n,store_id:c}}default:throw new w(`Invalid Smart Sort Placement: ${i.placement}`)}}extractValidCreativeIds(e){if(e.placement==="menu_top_row"&&"excludeCreativeIds"in e&&Array.isArray(e.excludeCreativeIds))return e.excludeCreativeIds.filter(t=>typeof t=="number")}};var wt=r=>r.placement==="specials",It=r=>r.placement==="brand_specials",me=class{placement;title;constructor(e){this.title=e,this.placement="brand_specials"}},le=class{placement;title;constructor(e){this.title=e,this.placement="specials"}},Se=class extends ne{async createMultiPlacement(e){let t={apiKey:e.config.apiKey,source:e.config.source},s=f(e.config.endpoint,P.multi,t),i=f(e.config.pageEndpoint,P.page,t),a=this.buildMultiRequest(e),o=await g.post(s,a),{clickEndpoint:n,impressionEndpoint:c}=v(e.config.eventsEndpoint,t),m=[];for(let[d,l]of(o.placements||[]).entries())if(wt(l))m.push(new le(l.title));else if(It(l))m.push(new me(l.title));else{let{creative_ids:p,custom_images:b,placement:u,products:D,row_id:F,search_facets:T,title:oe}=l,{cachedProducts:Ze,products:Xe}=this.generateProducts({clickUrl:n,identifier:e.config.identifier,impressUrl:c,products:D}),Ye=(b??[]).map(we=>this.massageCustomImageData(we)).filter(we=>we!==void 0);m.push(new A({cachedProducts:Ze,config:{...e.config,skipAutoSmartSortOnLoad:d===0?e.config.skipAutoSmartSortOnLoad:!0},creativeIds:p,customImages:Ye,nextPageProps:{pageSize:60,searchAttributes:a.search_attributes||[]},nextPageUrl:i,placement:u,products:Xe,rowId:F,searchFacets:T,title:oe,totalProducts:l.nb_hits??0}))}return m}buildMultiRequest(e){let{config:t,numColumns:s,searchAttributes:i,storeId:a,...o}=e,n={app_mode:t.appMode,distinct_id:t.identifier.mixpanelDistinctId,jane_device_id:t.identifier.jdid,num_columns:s,pos_user_id:t.identifier.posUserId,search_attributes:i,store_id:a,user_id:t.identifier.userId};switch(o.multiRequestType){case"custom":return{...n,placements:this.massageCustomPlacements(o.placements),type:"custom"};case"featured":return{...n,exclude_menu_top_row:o.excludeMenuTopRow??!1,type:"featured"};default:throw new w(`Invalid Multi Type: ${o.multiRequestType}`)}}massageCustomPlacements(e){let t=[];for(let s of e)switch(s.placement){case"best_selling":t.push({placement:"best_selling",title:s.title});break;case"brand_specials":t.push({placement:"brand_specials",title:s.title});break;case"buy_again_row":t.push({placement:"buy_again_row",title:s.title});break;case"custom_image_row":t.push({placement:"custom_image_row",search_filter:s.searchFilter});break;case"featured_row":t.push({placement:"featured_row",row_id:s.rowId});break;case"menu_dynamic_row":t.push({ad_mode:s.adMode??"default",filter_context:s.filterContext,page_context:s.pageContext,placement:"menu_dynamic_row"});break;case"menu_inline":t.push({ad_mode:s.adMode??"default",metadata:s.metadata,placement:"menu_inline",search_filter:s.searchFilter,search_query:s.searchQuery,search_sort:s.searchSort,title:s.title});break;case"menu_inline_table":t.push({disable_ads:s.disableAds,max_products:s.maxProducts,metadata:s.metadata,page_size:s.pageSize,placement:"menu_inline_table",search_facets:s.searchFacets,search_filter:s.searchFilter,search_query:s.searchQuery,search_sort:s.searchSort,title:s.title});break;case"menu_top_row":t.push({placement:"menu_top_row",search_filter:s.searchFilter});break;case"sale":t.push({placement:"sale",title:s.title});break;case"specials":t.push({placement:"specials",title:s.title});break;default:throw new w(`Invalid Custom Placement: ${s.placement}`)}return t}};var We=require("nanoid");var Qe=async r=>{let{apiKey:e,appMode:t,endpoint:s,identifier:i,searchFacets:a,searchFilter:o,searchQuery:n,source:c,storeId:m}=r,{jdid:d}=i||{},l=f(s,P.facets,{apiKey:e,source:c}),p={appMode:t,janeDeviceId:d,searchFacets:a,searchFilter:o,searchQuery:n,storeId:m};return(await g.post(l,p)).searchFacets??{}};var ze=async r=>{let{apiKey:e,endpoint:t,identifier:s,source:i,storeId:a,...o}=r,n=f(t,P.externalCheckout,{apiKey:e,source:i}),c={janeDeviceId:s.jdid,posOrderId:o.posOrderId,posUserId:o.posUserId||s.posUserId,products:o.products,storeId:a};return await g.post(n,c)};var _e=class{async create(e){let{config:t,searchAttributes:s,storeId:i,...a}=e,o={apiKey:t.apiKey,source:t.source},n=f(t.endpoint,P.product,o),{clickEndpoint:c,impressionEndpoint:m}=v(t.eventsEndpoint,o),d={app_mode:t.appMode,distinct_id:t.identifier.mixpanelDistinctId,jane_device_id:t.identifier.jdid,pos_user_id:t.identifier.posUserId,search_attributes:s,store_id:i,user_id:t.identifier.userId},l=a.productId!==void 0?{...d,product_id:a.productId}:{...d,pos_product_id:a.posProductId},p=await g.post(n,l);return new k({attributes:p.search_attributes,clickPayload:{adToken:p.ad_token,distinctId:t.identifier.mixpanelDistinctId,isAddToCart:!1,janeDeviceId:t.identifier.jdid,kevelToken:p.kevel_token,myHighD:p.my_high_d,productId:p.product_id,storeId:i},clickUrl:c,impressPayload:{distinctId:t.identifier.mixpanelDistinctId??t.identifier.jdid,engagements:[{adToken:p.ad_token,kevelToken:p.kevel_token,myHighD:p.my_high_d,productId:p.product_id}],janeDeviceId:t.identifier.jdid},impressUrl:m,isSponsored:!!p.flight_id,objectId:p.object_id})}};var vt=r=>({activities:r.activities,avatar:r.avatar,comment:r.comment,createdAt:r.created_at,feelings:r.feelings,hasComment:r.has_comment,id:r.id,nickname:r.nickname,productId:r.product_id,rating:r.rating,storeId:r.store_id,storeName:r.store_name,updatedAt:r.updated_at,upvoteCount:r.upvote_count}),xt=r=>({activitiesDistribution:r.activities_distribution,averageRating:r.average_rating,distribution:r.distribution,feelingsDistribution:r.feelings_distribution,reviewCount:r.review_count}),Ct=(r,e,t)=>{let s=r.total_count,i=Math.max(1,Math.ceil(s/t));return{aggregate:xt(r.aggregate),items:r.reviews.map(vt),pagination:{currentPage:e,hasNextPage:e<i,hasPreviousPage:e>1,pageSize:t,totalCount:s,totalPages:i},productId:r.product_id}},Je=async r=>{let{activities:e,config:t,feelings:s,hasComment:i,page:a,pageSize:o,productId:n,ratings:c,sort:m}=r,d=a??1,l=o??50,p=f(t.endpoint,P.productReviews,{apiKey:t.apiKey,source:t.source}),b={activities:e,feelings:s,has_comment:i||void 0,page:a,page_size:o,product_id:n,ratings:c,sort:m},u=await g.post(p,b);return Ct(u,d,l)},Le=r=>{let e={[Symbol.asyncIterator]:async function*(){let t=1;for(;;){let s=await r(t);if(yield s,!s.pagination.hasNextPage)return;t+=1}}};return{pages:e,[Symbol.asyncIterator]:async function*(){for await(let t of e)yield*t.items}}};var He=async r=>{let{apiKey:e,eventsEndpoint:t,identifier:s,source:i,...a}=r,o=f(t,P.sessionEvent,{apiKey:e,source:i}),n={distinctId:s.mixpanelDistinctId,events:a.events,janeDeviceId:s.jdid};return await g.post(o,n)};function _(r,e,t){let s=t.value;if(!s)throw new Error("Decorator applied to invalid method descriptor");return t.value=async function(...i){return await this.init(),s.apply(this,i)},t}function y(r,e,t){let s=t.value;if(!s)throw new Error("Decorator applied to invalid method descriptor");return t.value=async function(...i){if(!this.rateLimiter)throw new Error("throttle decorator can only be used on JaneDM class methods");return this.rateLimiter.schedule(async()=>s.apply(this,i))},t}var ye=class{burst;intervalMs;rate;tat=0;toleranceMs;constructor(e,t=1){if(e<=0)throw new w("rate must be > 0");if(t<1)throw new w("burst must be >= 1");this.rate=e,this.burst=Math.floor(t),this.intervalMs=1e3/this.rate,this.toleranceMs=(this.burst-1)*this.intervalMs}async schedule(e){let t=Date.now(),s=Math.max(0,this.tat-this.toleranceMs-t);this.tat=Math.max(this.tat,t)+this.intervalMs;let i=async()=>e();return s>0?new Promise((a,o)=>setTimeout(()=>i().then(a).catch(o),s)):i()}};var kt=/^https?:\/\//,Dt=/^(https?:\/\/)?(([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}|localhost)(:\d+)?(\/.*)?$/,be=(r,e)=>{let s=kt.test(r??e)?r??e:`https://${r}`,i=new URL(s);return Dt.test(i.toString())?i.protocol+"//"+i.host:e};var Ke=async r=>{let{apiKey:e,appMode:t,endpoint:s,identifier:i,source:a,storeId:o}=r,{jdid:n}=i;if(!n)throw new w("Jane Device ID (jdid) is required to fetch virtual budtender queries");let c=f(s,P.virtualBudtenderQueries,{apiKey:e,source:a}),m={appMode:t,janeDeviceId:n,storeId:o};return(await g.post(c,m)).queries??[]},$e=async r=>{let{apiKey:e,appMode:t,endpoint:s,eventsEndpoint:i,identifier:a,query:o,searchAttributes:n,source:c,storeId:m}=r,{jdid:d}=a;if(!d)throw new w("Jane Device ID (jdid) is required to perform virtual budtender search");let l={apiKey:e,source:c},p=f(s,P.virtualBudtenderSearch,l),b={app_mode:t,jane_device_id:d,placement:"virtual_budtender_search",query:o,search_attributes:n,store_id:m},u=await g.post(p,b),{clickEndpoint:D,impressionEndpoint:F}=v(i,l),T=Ft({clickUrl:D,identifier:a,impressUrl:F,products:u.products??[],storeId:m});return{htmlResponse:u.htmlResponse,markdownResponse:u.markdownResponse,products:T,query:u.query,totalResults:u.totalResults??0,unformattedResponse:u.unformattedResponse}},Pe=class r{attributes;isSponsored;objectId;reasoning;score;clickPayload;clickUrl;hasBeenImpressed;impressPayload;impressPromise;impressUrl;constructor(e){this.objectId=e.objectId,this.attributes=e.attributes,this.impressUrl=e.impressUrl,this.impressPayload=e.impressPayload,this.clickPayload=e.clickPayload,this.clickUrl=e.clickUrl,this.isSponsored=e.isSponsored,this.hasBeenImpressed=e.hasBeenImpressed??!1,this.score=e.score,this.reasoning=e.reasoning}static fromJSON(e){return new r(ie(e))}click(e={isAddToCart:!1}){let{isAddToCart:t=!1}=e,s={...this.clickPayload,isAddToCart:t};return g.post(this.clickUrl,s)}impress(){return this.hasBeenImpressed?Promise.resolve():(this.impressPromise??=g.post(this.impressUrl,this.impressPayload).then(()=>{this.hasBeenImpressed=!0}).finally(()=>{this.impressPromise=void 0}),this.impressPromise)}serialize(){return{attributes:this.attributes,clickPayload:this.clickPayload,clickUrl:this.clickUrl,hasBeenImpressed:this.hasBeenImpressed,impressPayload:this.impressPayload,impressUrl:this.impressUrl,isSponsored:this.isSponsored,objectId:this.objectId,reasoning:this.reasoning,score:this.score}}toJSON(){return JSON.stringify(this.serialize())}},Ft=r=>{let{clickUrl:e,identifier:t,impressUrl:s,products:i,storeId:a}=r,o=[];return i?.forEach(n=>{let c={attributes:n.search_attributes,clickPayload:{adToken:n.ad_token,distinctId:t.mixpanelDistinctId??t.jdid,isAddToCart:!1,janeDeviceId:t.jdid,kevelToken:n.kevel_token,myHighD:n.my_high_d,productId:n.product_id,storeId:a},clickUrl:e,impressPayload:{distinctId:t.mixpanelDistinctId??t.jdid,engagements:[{adToken:n.ad_token,kevelToken:n.kevel_token,myHighD:n.my_high_d,productId:n.product_id}],janeDeviceId:t.jdid},impressUrl:s,isSponsored:!!n.flight_id,objectId:n.object_id,reasoning:n.reasoning,score:n.score};o.push(new Pe(c))}),o};var R=class{config;rateLimiter;initialized=!1;multiClient;productClient;smartSortClient;userProvidedJdid=!1;constructor(e,t){let{apiKey:s,endpoint:i,identifier:a}=e,{appMode:o="headless",eventsEndpoint:n,pageEndpoint:c,skipAutoSmartSortOnLoad:m=!1,source:d="sdk"}=t??{},l=be(i,"https://dmerch.iheartjane.com"),p=be(n,l),b=be(c,l);this.userProvidedJdid=!!a?.jdid,this.config={apiKey:s,appMode:o,endpoint:l,eventsEndpoint:p,identifier:a??{jdid:""},pageEndpoint:b,skipAutoSmartSortOnLoad:m,source:d},this.smartSortClient=new ne,this.multiClient=new Se,this.productClient=new _e,this.rateLimiter=new ye(10,20)}static generateJaneDeviceId(){return(0,We.nanoid)()}async fetchCartTopperRow(e){return await this.smartSortClient.createSmartSort({...e,config:this.config,placement:"cart_toppers"})}async fetchCustomImageRow(e){return this.smartSortClient.createSmartSort({...e,config:this.config,placement:"custom_image_row"})}async fetchCustomPlacements(e){return await this.multiClient.createMultiPlacement({config:this.config,multiRequestType:"custom",...e})}async fetchFacets(e){return Qe({...e,...this.config})}async fetchFeaturedPlacements(e){return await this.multiClient.createMultiPlacement({config:this.config,multiRequestType:"featured",...e})}async fetchMenuRow(e){return this.smartSortClient.createSmartSort({...e,config:this.config,placement:"menu_inline"})}async fetchMenuTopRow(e){return this.smartSortClient.createSmartSort({...e,config:this.config,placement:"menu_top_row"})}async fetchProduct(e){return this.productClient.create({config:this.config,...e})}async fetchProductReviews(e){return Je({config:this.config,...e})}async fetchRecommendedPDPRow(e){return await this.smartSortClient.createSmartSort({...e,config:this.config,placement:"pdp_row"})}async fetchRecommendedRow(e){return await this.smartSortClient.createSmartSort({...e,config:this.config,placement:"menu_dynamic_row"})}async fetchRecommendedSort(e){return await this.smartSortClient.createSmartSort({...e,config:this.config,placement:"menu_inline_table"})}async fetchVirtualBudtenderQueries(e){return Ke({...e,...this.config})}async fetchVirtualBudtenderSearch(e){return $e({...e,...this.config})}getJaneDeviceId(){return this.config.identifier.jdid}async init(){this.initialized||(x()&&!this.userProvidedJdid&&await this.initializeClientSideJdid(),this.initialized=!0)}iterateProductReviews(e){return Le(t=>this.fetchProductReviews({...e,page:t}))}async sendPosCheckout(e){return ze({...e,...this.config})}async sendSessionEvent(e){return He({...e,...this.config})}async initializeClientSideJdid(){let e={apiKey:this.config.apiKey,source:this.config.source},t=await Ue(this.config.eventsEndpoint,e);q.set("jdid",t),this.config.identifier.jdid=t}};S([_,y],R.prototype,"fetchCartTopperRow",1),S([_,y],R.prototype,"fetchCustomImageRow",1),S([_,y],R.prototype,"fetchCustomPlacements",1),S([_,y],R.prototype,"fetchFacets",1),S([_,y],R.prototype,"fetchFeaturedPlacements",1),S([_,y],R.prototype,"fetchMenuRow",1),S([_,y],R.prototype,"fetchMenuTopRow",1),S([_,y],R.prototype,"fetchProduct",1),S([_,y],R.prototype,"fetchProductReviews",1),S([_,y],R.prototype,"fetchRecommendedPDPRow",1),S([_,y],R.prototype,"fetchRecommendedRow",1),S([_,y],R.prototype,"fetchRecommendedSort",1),S([_,y],R.prototype,"fetchVirtualBudtenderQueries",1),S([_,y],R.prototype,"fetchVirtualBudtenderSearch",1);0&&(module.exports={AdMode,AppMode,BrandSpecials,DEFAULT_PAGE_SIZE,IntendedDisplay,JaneDM,JaneDeviceIdSentinel,PageContextEnum,Placement,ProductKindEnum,ReviewSortEnum,SearchSortEnum,SmartSort,SmartSortProduct,Specials,VirtualBudtenderProduct,bestSellerRank,categoryAndNameAsc,defaultOrder,priceAsc,priceDesc,priceEighthOunceAsc,priceEighthOunceDesc,priceGramAsc,priceGramDesc,priceHalfGramAsc,priceHalfGramDesc,priceHalfOunceAsc,priceHalfOunceDesc,priceOunceAsc,priceOunceDesc,priceQuarterOunceAsc,priceQuarterOunceDesc,priceTwoGramAsc,priceTwoGramDesc,rating,recommendation,searchSorts,thcPotencyAsc,thcPotencyDesc});
|
|
1
|
+
"use strict";var Xe=Object.create;var ne=Object.defineProperty;var Ae=Object.getOwnPropertyDescriptor;var We=Object.getOwnPropertyNames;var Ye=Object.getPrototypeOf,et=Object.prototype.hasOwnProperty;var tt=(t,e)=>{for(var r in e)ne(t,r,{get:e[r],enumerable:!0})},Me=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of We(e))!et.call(t,o)&&o!==r&&ne(t,o,{get:()=>e[o],enumerable:!(s=Ae(e,o))||s.enumerable});return t};var rt=(t,e,r)=>(r=t!=null?Xe(Ye(t)):{},Me(e||!t||!t.__esModule?ne(r,"default",{value:t,enumerable:!0}):r,t)),st=t=>Me(ne({},"__esModule",{value:!0}),t),_=(t,e,r,s)=>{for(var o=s>1?void 0:s?Ae(e,r):e,n=t.length-1,i;n>=0;n--)(i=t[n])&&(o=(s?i(e,r,o):i(o))||o);return s&&o&&ne(e,r,o),o};var Ct={};tt(Ct,{AdMode:()=>F,AppMode:()=>ae,BrandSpecials:()=>ue,DEFAULT_PAGE_SIZE:()=>de,IntendedDisplay:()=>le,JaneDM:()=>R,JaneDeviceIdSentinel:()=>ce,PageContextEnum:()=>Pe,Placement:()=>C,ProductKindEnum:()=>ge,ReviewSortEnum:()=>he,SearchSortEnum:()=>pe,SmartSort:()=>D,SmartSortProduct:()=>x,Specials:()=>me,bestSellerRank:()=>T,categoryAndNameAsc:()=>A,defaultOrder:()=>M,priceAsc:()=>O,priceDesc:()=>q,priceEighthOunceAsc:()=>E,priceEighthOunceDesc:()=>j,priceGramAsc:()=>U,priceGramDesc:()=>N,priceHalfGramAsc:()=>G,priceHalfGramDesc:()=>B,priceHalfOunceAsc:()=>z,priceHalfOunceDesc:()=>L,priceOunceAsc:()=>J,priceOunceDesc:()=>H,priceQuarterOunceAsc:()=>K,priceQuarterOunceDesc:()=>Q,priceTwoGramAsc:()=>V,priceTwoGramDesc:()=>$,rating:()=>Z,recommendation:()=>X,searchSorts:()=>we,thcPotencyAsc:()=>W,thcPotencyDesc:()=>Y});module.exports=st(Ct);var P={click:"/v2/event/2",externalCheckout:"/v2/event/3e",facets:"/v2/facets",fingerprint:"/fp/token",impression:"/v2/event/1",multi:"/v2/multi",page:"/v2/smartpage",product:"/v2/product",productReviews:"/v2/product/reviews",sessionEvent:"/v2/event/session",smart:"/v2/smart"};var F=(s=>(s.All="all",s.Default="default",s.Off="off",s))(F||{}),ae=(c=>(c.Bloom="bloom",c.Default="default",c.Embedded="embedded",c.FramelessEmbed="framelessEmbed",c.Headless="headless",c.Kiosk="kiosk",c.OperatorEmbed="operatorEmbed",c.WhiteLabel="whiteLabel",c))(ae||{}),le=(s=>(s.Desktop="desktop",s.Kiosk="kiosk",s.Mobile="mobile",s))(le||{}),ce=(e=>(e.UserOptOut="user-opt-out",e))(ce||{});var Pe=(r=>(r.Featured="featured",r.Midgrid="midgrid",r))(Pe||{}),C=(d=>(d.BestSelling="best_selling",d.BrandSpecials="brand_specials",d.BuyAgainRow="buy_again_row",d.CartToppers="cart_toppers",d.CustomImageRow="custom_image_row",d.FeaturedRow="featured_row",d.MenuDynamicRow="menu_dynamic_row",d.MenuInline="menu_inline",d.MenuInlineTable="menu_inline_table",d.MenuTopRow="menu_top_row",d.PdpRow="pdp_row",d.Sale="sale",d.Specials="specials",d))(C||{}),ge=(p=>(p.Edible="edible",p.Extract="extract",p.Flower="flower",p.Gear="gear",p.Grow="grow",p.Merch="merch",p.PreRoll="pre-roll",p.Tincture="tincture",p.Topical="topical",p.Vape="vape",p))(ge||{}),he=(s=>(s.Rating="rating",s.Recent="recent",s.Upvote="upvote",s))(he||{}),pe=(m=>(m.BestSellerRank="best-seller-rank",m.CategoryAndNameAsc="category-and-name-asc",m.Default="default",m.PriceAsc="price-asc",m.PriceDesc="price-desc",m.PriceEighthOunceAsc="price-eighth-ounce-asc",m.PriceEighthOunceDesc="price-eighth-ounce-desc",m.PriceGramAsc="price-gram-asc",m.PriceGramDesc="price-gram-desc",m.PriceHalfGramAsc="price-half-gram-asc",m.PriceHalfGramDesc="price-half-gram-desc",m.PriceHalfOunceAsc="price-half-ounce-asc",m.PriceHalfOunceDesc="price-half-ounce-desc",m.PriceOunceAsc="price-ounce-asc",m.PriceOunceDesc="price-ounce-desc",m.PriceQuarterOunceAsc="price-quarter-ounce-asc",m.PriceQuarterOunceDesc="price-quarter-ounce-desc",m.PriceTwoGramAsc="price-two-gram-asc",m.PriceTwoGramDesc="price-two-gram-desc",m.Rating="rating",m.Recommendation="recommendation",m.ThcPotencyAsc="thc-potency-asc",m.ThcPotencyDesc="thc-potency-desc",m))(pe||{});var de=50;var T="best-seller-rank",A="category-and-name-asc",M="default",O="price-asc",q="price-desc",E="price-eighth-ounce-asc",j="price-eighth-ounce-desc",U="price-gram-asc",N="price-gram-desc",G="price-half-gram-asc",B="price-half-gram-desc",z="price-half-ounce-asc",L="price-half-ounce-desc",J="price-ounce-asc",H="price-ounce-desc",K="price-quarter-ounce-asc",Q="price-quarter-ounce-desc",V="price-two-gram-asc",$="price-two-gram-desc",Z="rating",X="recommendation",W="thc-potency-asc",Y="thc-potency-desc",we=[T,A,M,O,q,E,j,U,N,G,B,z,L,J,H,K,Q,V,$,Z,X,W,Y];var qe="2.25.0";var Ie=(t,e)=>{let{apiKey:r,source:s}=e,o=new URL(t);return o.searchParams.set("jdm_source",s),o.searchParams.set("jdm_version",qe),r&&o.searchParams.set("jdm_api_key",r),o.searchParams.sort(),o.toString()},f=(t,e,r)=>{let s=new URL(t+e);return Ie(s.toString(),r)},ee=(t,e)=>{let r=new URL(t+P.click),s=new URL(t+P.impression);return{clickEndpoint:Ie(r.toString(),e),impressionEndpoint:Ie(s.toString(),e)}},ve=class extends Error{response;constructor(e,r){super(e),this.response=r}},Ee=async t=>{if(t.ok){if(t.status===204)return null}else throw new ve("Api Request Failed",t);try{return await t.json()}catch{}},ot=async(t,e)=>{let r=await fetch(t,{body:JSON.stringify(e),headers:{Accept:"application/json","Content-Type":"text/plain"},method:"POST"});return Ee(r)},it=async(t,e={})=>{let{headers:r,...s}=e,o=await fetch(t,{...s,headers:{Accept:"application/json",...r},method:"GET"});return Ee(o)},h={get:it,post:ot};var Ce=require("nanoid");var I=()=>typeof window<"u"&&typeof document<"u";var nt=(...t)=>{console.error("[JaneDmSDK]",...t)},at=(...t)=>{console.info("[JaneDmSDK]",...t)},ct=(...t)=>{console.log("[JaneDmSDK]",...t)},v={error:nt,info:at,log:ct};var pt=t=>{let e=localStorage.getItem(t);return e!==null?mt(e):e},dt=(t,e)=>localStorage.setItem(t,lt(e)),ut=t=>localStorage.removeItem(t),k={get:pt,remove:ut,set:dt},mt=t=>je(t)?t.substring(1,t.length-1):t,lt=t=>je(t)?t:`"${t}"`,je=t=>{let r=t.length-1;return t[0]==='"'&&t[r]==='"'};var ke="j_fp_last_run",Pt=1440*60*1e3,gt=20,xe=new Set,ht=(t,e)=>`${t}:${e.apiKey}:${e.source}`;var ft=t=>typeof t=="object"&&t!==null&&typeof t.token=="string"&&typeof t.endpoint=="string"&&typeof t.scriptUrlPattern=="string",Rt=async(t,e)=>{try{let r=f(t,P.fingerprint,e),s=await h.get(r);return ft(s)?s:null}catch(r){return v.error("Failed to fetch fingerprint token:",r),null}},_t=async(t,e,r,s)=>{try{let o=await import("@fingerprintjs/fingerprintjs-pro"),i=await o.load({apiKey:t,endpoint:[e,o.defaultEndpoint],region:"us",scriptUrlPattern:[r,o.defaultScriptUrlPattern],storageKey:"eyeD"}),a={tag:{isDmSdk:!0}};s?.linkedId&&(a.linkedId=s.linkedId);let c=await i.get(a);return!c||!c.visitorId?(v.error("Fingerprint JS did not return a valid visitorId"),null):{visitorId:c.visitorId}}catch(o){return v.error("Failed to run Fingerprint JS:",o),null}},Ue=async(t,e,r)=>{if(!I())return(0,Ce.nanoid)();let s=k.get("jdid");if(!s)return await Be(t,e,r)??(0,Ce.nanoid)();if(s.length!==gt)return await De(t,e,{linkedId:s}),s;let o=await Ge(t,e,r);if(o)return o;if(Ne()==="error")try{k.set(ke,Date.now().toString())}catch{}return s},Ne=()=>{try{let t=k.get(ke);if(!t)return"missing";let e=parseInt(t,10);return Number.isNaN(e)?"missing":Date.now()-e>=Pt?"expired":"valid"}catch{return"error"}},Ge=async(t,e,r)=>{let s=Ne();return s==="valid"||s==="error"?null:Be(t,e,r)},Be=async(t,e,r)=>{let s=ht(t,e);if(xe.has(s))return null;xe.add(s);try{let o=await Rt(t,e);if(!o)return null;let n=await _t(o.token,o.endpoint,o.scriptUrlPattern,r);if(!n)return null;try{k.set(ke,Date.now().toString())}catch{}return n.visitorId}catch(o){return v.error("Failed to run fingerprint:",o),null}finally{xe.delete(s)}},De=async(t,e,r)=>{if(I()&&r?.linkedId!=="user-opt-out")try{await Ge(t,e,r)}catch(s){v.error("Failed to run SSR fingerprint:",s)}};var b=class t extends Error{constructor(e){super(`[Jane DM SDK]: ${e}`),this.name="SdkError",Object.setPrototypeOf(this,t.prototype)}};var Fe=t=>{switch(t){case T:return"best-seller-rank";case A:return"category-and-name-asc";case O:return"price-asc";case q:return"price-desc";case E:return"price-eighth-ounce-asc";case j:return"price-eighth-ounce-desc";case U:return"price-gram-asc";case N:return"price-gram-desc";case G:return"price-half-gram-asc";case B:return"price-half-gram-desc";case z:return"price-half-ounce-asc";case L:return"price-half-ounce-desc";case J:return"price-ounce-asc";case H:return"price-ounce-desc";case K:return"price-quarter-ounce-asc";case Q:return"price-quarter-ounce-desc";case V:return"price-two-gram-asc";case $:return"price-two-gram-desc";case Z:return"rating";case X:return"recommendation";case W:return"thc-potency-asc";case Y:return"thc-potency-desc";case M:default:return"default"}};var fe=t=>JSON.parse(t);var Te=class t{isSponsored;objectId;clickPayload;clickUrl;impressPayload;impressUrl;constructor(e){this.objectId=e.objectId,this.impressUrl=e.impressUrl,this.impressPayload=e.impressPayload,this.clickPayload=e.clickPayload,this.clickUrl=e.clickUrl,this.isSponsored=e.isSponsored}static fromJSON(e){return new t(fe(e))}serialize(){return{clickPayload:this.clickPayload,clickUrl:this.clickUrl,impressPayload:this.impressPayload,impressUrl:this.impressUrl,isSponsored:this.isSponsored,objectId:this.objectId}}toJSON(){return JSON.stringify(this.serialize())}},x=class t{attributes;isSponsored;objectId;clickPayload;clickUrl;hasBeenImpressed;impressPayload;impressPromise;impressUrl;constructor(e){this.objectId=e.objectId,this.attributes=e.attributes,this.impressUrl=e.impressUrl,this.impressPayload=e.impressPayload,this.clickPayload=e.clickPayload,this.clickUrl=e.clickUrl,this.isSponsored=e.isSponsored,this.hasBeenImpressed=e.hasBeenImpressed??!1}static fromJSON(e){return new t(fe(e))}click(e={isAddToCart:!1}){let{isAddToCart:r=!1}=e,s={...this.clickPayload,isAddToCart:r};return h.post(this.clickUrl,s)}impress(){return this.hasBeenImpressed?Promise.resolve():(this.impressPromise??=h.post(this.impressUrl,this.impressPayload).then(()=>{this.hasBeenImpressed=!0}).finally(()=>{this.impressPromise=void 0}),this.impressPromise)}serialize(){return{attributes:this.attributes,clickPayload:this.clickPayload,clickUrl:this.clickUrl,hasBeenImpressed:this.hasBeenImpressed,impressPayload:this.impressPayload,impressUrl:this.impressUrl,isSponsored:this.isSponsored,objectId:this.objectId}}toJSON(){return JSON.stringify(this.serialize())}},D=class t{customImages;placement;products;rowId;searchFacets;title;totalProducts;creativeIds;cachedProducts;config;loadPromise;nextPageProps;nextPageUrl;constructor(e){this.rowId=e.rowId,this.searchFacets=e.searchFacets,this.nextPageUrl=e.nextPageUrl,this.nextPageProps=e.nextPageProps,this.products=e.products.map(r=>new x(r)),this.cachedProducts=e.cachedProducts.map(r=>new Te(r)),this.totalProducts=e.totalProducts,this.title=e.title,this.creativeIds=e.creativeIds,this.config=e.config,this.customImages=e.customImages??[],this.placement=e.placement,I()&&!this.config.skipAutoSmartSortOnLoad&&this.onLoad().catch(r=>v.error("Failed to run onLoad:",r))}static fromJSON(e){return new t(fe(e))}hasNextPage(){return this.cachedProducts.length>0}async nextPage(){if(!this.hasNextPage())return;let e=this.cachedProducts.slice(0,this.nextPageProps.pageSize),r={app_mode:this.config.appMode,jane_device_id:this.config.identifier.jdid,object_ids:e.map(n=>n.objectId),search_attributes:this.nextPageProps.searchAttributes},s=await h.post(this.nextPageUrl,r),o=new Map(s.products?.map(n=>[n.object_id,n.search_attributes]));e.forEach(n=>{let i=o.get(n.objectId);i!==void 0&&this.products.push(new x({...n.serialize(),attributes:i}))}),this.cachedProducts=this.cachedProducts.slice(this.nextPageProps.pageSize)}async onLoad(){return this.loadPromise?this.loadPromise:(this.loadPromise=(async()=>{if(!I())return;let e={apiKey:this.config.apiKey,source:this.config.source};await De(this.config.eventsEndpoint,e,{linkedId:this.config.identifier.jdid})})(),this.loadPromise)}serialize(){return{cachedProducts:this.cachedProducts.map(e=>e.serialize()),config:this.config,creativeIds:this.creativeIds,customImages:this.customImages,nextPageProps:this.nextPageProps,nextPageUrl:this.nextPageUrl,placement:this.placement,products:this.products.map(e=>e.serialize()),rowId:this.rowId,searchFacets:this.searchFacets,title:this.title,totalProducts:this.totalProducts}}toJSON(){return JSON.stringify(this.serialize())}},te=class{async createSmartSort(e){let r={apiKey:e.config.apiKey,source:e.config.source},s=f(e.config.endpoint,P.smart,r),o=f(e.config.pageEndpoint,P.page,r),n=this.buildSmartRequest(e),i=await h.post(s,n),{clickEndpoint:a,impressionEndpoint:c}=ee(e.config.eventsEndpoint,r),{creative_ids:g,custom_images:p,products:l,row_id:u,search_facets:d,title:w}=i,{cachedProducts:re,products:se}=this.generateProducts({clickUrl:a,identifier:e.config.identifier,impressUrl:c,products:l}),oe=(p??[]).map(ie=>this.massageCustomImageData(ie)).filter(ie=>ie!==void 0);return new D({cachedProducts:re,config:e.config,creativeIds:g,customImages:oe,nextPageProps:{pageSize:"page_size"in n?n.page_size??60:60,searchAttributes:n.search_attributes??e.searchAttributes},nextPageUrl:o,placement:e.placement,products:se,rowId:u,searchFacets:d,title:w,totalProducts:i.nb_hits??0})}generateProducts(e){let{clickUrl:r,identifier:s,impressUrl:o,products:n}=e,i={cachedProducts:[],products:[]};return n?.forEach(a=>{let c={clickPayload:{adToken:a.ad_token,distinctId:s.mixpanelDistinctId??s.jdid,isAddToCart:!1,janeDeviceId:s.jdid,kevelToken:a.kevel_token,myHighD:a.my_high_d,productId:a.product_id,storeId:a.store_id},clickUrl:r,impressPayload:{distinctId:s.mixpanelDistinctId??s.jdid,engagements:[{adToken:a.ad_token,kevelToken:a.kevel_token,myHighD:a.my_high_d,productId:a.product_id}],janeDeviceId:s.jdid},impressUrl:o,isSponsored:!!a.flight_id,objectId:a.object_id};a.search_attributes!==void 0?i.products.push({...c,attributes:a.search_attributes}):i.cachedProducts.push(c)}),i}massageCustomImageData(e){if(e)return{headline:e.headline,imageUrl:e.image_url,intendedDisplay:e.intended_display,logoUrl:e.logo_url,overlayColor:e.overlay_color,positionX:e.position_x,positionY:e.position_y,scaleNumber:e.scale_number,textColor:e.text_color}}buildSmartRequest(e){let{config:r,searchAttributes:s,...o}=e,n={app_mode:r.appMode,distinct_id:r.identifier.mixpanelDistinctId,jane_device_id:r.identifier.jdid,pos_user_id:r.identifier.posUserId,search_attributes:s,user_id:r.identifier.userId};switch(o.placement){case"cart_toppers":{let{cartProductIds:i,posCartProductIds:a,storeId:c}=o;return{...n,cart_pos_product_ids:a,cart_product_ids:i,placement:"cart_toppers",store_id:c}}case"custom_image_row":{let{searchFilter:i,storeId:a}=o;return{...n,placement:"custom_image_row",search_filter:i,store_id:a}}case"menu_dynamic_row":{let{adMode:i,filterContext:a,pageContext:c,storeId:g}=o;return{...n,ad_mode:i??"default",filter_context:a,page_context:c,placement:"menu_dynamic_row",store_id:g}}case"menu_inline":{let{adMode:i,distinctByProduct:a,metadata:c,numColumns:g,searchFilter:p,searchQuery:l,searchSort:u,storeId:d,storeIds:w}=o;return{...n,ad_mode:i??"default",distinct_by_product:a,metadata:c,num_columns:g,placement:"menu_inline",search_filter:p,search_query:l,search_sort:Fe(u),store_ids:w||[d]}}case"menu_inline_table":{let{disableAds:i,distinctByProduct:a,maxProducts:c,metadata:g,numColumns:p,pageSize:l,searchFacets:u,searchFilter:d,searchQuery:w,searchSort:re,storeId:se,storeIds:oe}=o;return{...n,disable_ads:i,distinct_by_product:a,max_products:c,metadata:g,num_columns:p,page_size:l,placement:"menu_inline_table",search_attributes:s,search_facets:u,search_filter:d,search_query:w,search_sort:Fe(re),store_ids:oe||[se]}}case"menu_top_row":{let{searchFilter:i,storeId:a}=o,c=this.extractValidCreativeIds(e);return{...n,exclude_creative_ids:c,placement:"menu_top_row",search_filter:i,store_id:a}}case"pdp_row":{let{posProductId:i,productId:a,storeId:c}=o;return{...n,placement:"pdp_row",pos_product_id:i,product_id:a,store_id:c}}default:throw new b(`Invalid Smart Sort Placement: ${o.placement}`)}}extractValidCreativeIds(e){if(e.placement==="menu_top_row"&&"excludeCreativeIds"in e&&Array.isArray(e.excludeCreativeIds))return e.excludeCreativeIds.filter(r=>typeof r=="number")}};var St=t=>t.placement==="specials",yt=t=>t.placement==="brand_specials",ue=class{placement;title;constructor(e){this.title=e,this.placement="brand_specials"}},me=class{placement;title;constructor(e){this.title=e,this.placement="specials"}},Re=class extends te{async createMultiPlacement(e){let r={apiKey:e.config.apiKey,source:e.config.source},s=f(e.config.endpoint,P.multi,r),o=f(e.config.pageEndpoint,P.page,r),n=this.buildMultiRequest(e),i=await h.post(s,n),{clickEndpoint:a,impressionEndpoint:c}=ee(e.config.eventsEndpoint,r),g=[];for(let[p,l]of(i.placements||[]).entries())if(St(l))g.push(new me(l.title));else if(yt(l))g.push(new ue(l.title));else{let{creative_ids:u,custom_images:d,placement:w,products:re,row_id:se,search_facets:oe,title:ie}=l,{cachedProducts:Ve,products:$e}=this.generateProducts({clickUrl:a,identifier:e.config.identifier,impressUrl:c,products:re}),Ze=(d??[]).map(be=>this.massageCustomImageData(be)).filter(be=>be!==void 0);g.push(new D({cachedProducts:Ve,config:{...e.config,skipAutoSmartSortOnLoad:p===0?e.config.skipAutoSmartSortOnLoad:!0},creativeIds:u,customImages:Ze,nextPageProps:{pageSize:60,searchAttributes:n.search_attributes||[]},nextPageUrl:o,placement:w,products:$e,rowId:se,searchFacets:oe,title:ie,totalProducts:l.nb_hits??0}))}return g}buildMultiRequest(e){let{config:r,numColumns:s,searchAttributes:o,storeId:n,...i}=e,a={app_mode:r.appMode,distinct_id:r.identifier.mixpanelDistinctId,jane_device_id:r.identifier.jdid,num_columns:s,pos_user_id:r.identifier.posUserId,search_attributes:o,store_id:n,user_id:r.identifier.userId};switch(i.multiRequestType){case"custom":return{...a,placements:this.massageCustomPlacements(i.placements),type:"custom"};case"featured":return{...a,exclude_menu_top_row:i.excludeMenuTopRow??!1,type:"featured"};default:throw new b(`Invalid Multi Type: ${i.multiRequestType}`)}}massageCustomPlacements(e){let r=[];for(let s of e)switch(s.placement){case"best_selling":r.push({placement:"best_selling",title:s.title});break;case"brand_specials":r.push({placement:"brand_specials",title:s.title});break;case"buy_again_row":r.push({placement:"buy_again_row",title:s.title});break;case"custom_image_row":r.push({placement:"custom_image_row",search_filter:s.searchFilter});break;case"featured_row":r.push({placement:"featured_row",row_id:s.rowId});break;case"menu_dynamic_row":r.push({ad_mode:s.adMode??"default",filter_context:s.filterContext,page_context:s.pageContext,placement:"menu_dynamic_row"});break;case"menu_inline":r.push({ad_mode:s.adMode??"default",metadata:s.metadata,placement:"menu_inline",search_filter:s.searchFilter,search_query:s.searchQuery,search_sort:s.searchSort,title:s.title});break;case"menu_inline_table":r.push({disable_ads:s.disableAds,max_products:s.maxProducts,metadata:s.metadata,page_size:s.pageSize,placement:"menu_inline_table",search_facets:s.searchFacets,search_filter:s.searchFilter,search_query:s.searchQuery,search_sort:s.searchSort,title:s.title});break;case"menu_top_row":r.push({placement:"menu_top_row",search_filter:s.searchFilter});break;case"sale":r.push({placement:"sale",title:s.title});break;case"specials":r.push({placement:"specials",title:s.title});break;default:throw new b(`Invalid Custom Placement: ${s.placement}`)}return r}};var Qe=require("nanoid");var ze=async t=>{let{apiKey:e,appMode:r,endpoint:s,identifier:o,searchFacets:n,searchFilter:i,searchQuery:a,source:c,storeId:g}=t,{jdid:p}=o||{},l=f(s,P.facets,{apiKey:e,source:c}),u={appMode:r,janeDeviceId:p,searchFacets:n,searchFilter:i,searchQuery:a,storeId:g};return(await h.post(l,u)).searchFacets??{}};var Le=async t=>{let{apiKey:e,endpoint:r,identifier:s,source:o,storeId:n,...i}=t,a=f(r,P.externalCheckout,{apiKey:e,source:o}),c={janeDeviceId:s.jdid,posOrderId:i.posOrderId,posUserId:i.posUserId||s.posUserId,products:i.products,storeId:n};return await h.post(a,c)};var _e=class{async create(e){let{config:r,searchAttributes:s,storeId:o,...n}=e,i={apiKey:r.apiKey,source:r.source},a=f(r.endpoint,P.product,i),{clickEndpoint:c,impressionEndpoint:g}=ee(r.eventsEndpoint,i),p={app_mode:r.appMode,distinct_id:r.identifier.mixpanelDistinctId,jane_device_id:r.identifier.jdid,pos_user_id:r.identifier.posUserId,search_attributes:s,store_id:o,user_id:r.identifier.userId},l=n.productId!==void 0?{...p,product_id:n.productId}:{...p,pos_product_id:n.posProductId},u=await h.post(a,l);return new x({attributes:u.search_attributes,clickPayload:{adToken:u.ad_token,distinctId:r.identifier.mixpanelDistinctId,isAddToCart:!1,janeDeviceId:r.identifier.jdid,kevelToken:u.kevel_token,myHighD:u.my_high_d,productId:u.product_id,storeId:o},clickUrl:c,impressPayload:{distinctId:r.identifier.mixpanelDistinctId??r.identifier.jdid,engagements:[{adToken:u.ad_token,kevelToken:u.kevel_token,myHighD:u.my_high_d,productId:u.product_id}],janeDeviceId:r.identifier.jdid},impressUrl:g,isSponsored:!!u.flight_id,objectId:u.object_id})}};var bt=t=>({activities:t.activities,avatar:t.avatar,comment:t.comment,createdAt:t.created_at,feelings:t.feelings,hasComment:t.has_comment,id:t.id,nickname:t.nickname,productId:t.product_id,rating:t.rating,storeId:t.store_id,storeName:t.store_name,updatedAt:t.updated_at,upvoteCount:t.upvote_count}),wt=t=>({activitiesDistribution:t.activities_distribution,averageRating:t.average_rating,distribution:t.distribution,feelingsDistribution:t.feelings_distribution,reviewCount:t.review_count}),It=(t,e,r)=>{let s=t.total_count,o=Math.max(1,Math.ceil(s/r));return{aggregate:wt(t.aggregate),aiSummary:t.ai_summary,items:t.reviews.map(bt),pagination:{currentPage:e,hasNextPage:e<o,hasPreviousPage:e>1,pageSize:r,totalCount:s,totalPages:o},productId:t.product_id}},Je=async t=>{let{activities:e,config:r,feelings:s,hasComment:o,page:n,pageSize:i,productId:a,ratings:c,sort:g}=t,p=n??1,l=i??50,u=f(r.endpoint,P.productReviews,{apiKey:r.apiKey,source:r.source}),d={activities:e,feelings:s,has_comment:o||void 0,page:n,page_size:i,product_id:a,ratings:c,sort:g},w=await h.post(u,d);return It(w,p,l)},He=t=>{let e={[Symbol.asyncIterator]:async function*(){let r=1;for(;;){let s=await t(r);if(yield s,!s.pagination.hasNextPage)return;r+=1}}};return{pages:e,[Symbol.asyncIterator]:async function*(){for await(let r of e)yield*r.items}}};var Ke=async t=>{let{apiKey:e,eventsEndpoint:r,identifier:s,source:o,...n}=t,i=f(r,P.sessionEvent,{apiKey:e,source:o}),a={distinctId:s.mixpanelDistinctId,events:n.events,janeDeviceId:s.jdid};return await h.post(i,a)};function S(t,e,r){let s=r.value;if(!s)throw new Error("Decorator applied to invalid method descriptor");return r.value=async function(...o){return await this.init(),s.apply(this,o)},r}function y(t,e,r){let s=r.value;if(!s)throw new Error("Decorator applied to invalid method descriptor");return r.value=async function(...o){if(!this.rateLimiter)throw new Error("throttle decorator can only be used on JaneDM class methods");return this.rateLimiter.schedule(async()=>s.apply(this,o))},r}var Se=class{burst;intervalMs;rate;tat=0;toleranceMs;constructor(e,r=1){if(e<=0)throw new b("rate must be > 0");if(r<1)throw new b("burst must be >= 1");this.rate=e,this.burst=Math.floor(r),this.intervalMs=1e3/this.rate,this.toleranceMs=(this.burst-1)*this.intervalMs}async schedule(e){let r=Date.now(),s=Math.max(0,this.tat-this.toleranceMs-r);this.tat=Math.max(this.tat,r)+this.intervalMs;let o=async()=>e();return s>0?new Promise((n,i)=>setTimeout(()=>o().then(n).catch(i),s)):o()}};var vt=/^https?:\/\//,xt=/^(https?:\/\/)?(([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}|localhost)(:\d+)?(\/.*)?$/,ye=(t,e)=>{let s=vt.test(t??e)?t??e:`https://${t}`,o=new URL(s);return xt.test(o.toString())?o.protocol+"//"+o.host:e};var R=class{config;rateLimiter;initialized=!1;multiClient;productClient;smartSortClient;userProvidedJdid=!1;constructor(e,r){let{apiKey:s,endpoint:o,identifier:n}=e,{appMode:i="headless",eventsEndpoint:a,pageEndpoint:c,skipAutoSmartSortOnLoad:g=!1,source:p="sdk"}=r??{},l=ye(o,"https://dmerch.iheartjane.com"),u=ye(a,l),d=ye(c,l);this.userProvidedJdid=!!n?.jdid,this.config={apiKey:s,appMode:i,endpoint:l,eventsEndpoint:u,identifier:n??{jdid:""},pageEndpoint:d,skipAutoSmartSortOnLoad:g,source:p},this.smartSortClient=new te,this.multiClient=new Re,this.productClient=new _e,this.rateLimiter=new Se(10,20)}static generateJaneDeviceId(){return(0,Qe.nanoid)()}async fetchCartTopperRow(e){return await this.smartSortClient.createSmartSort({...e,config:this.config,placement:"cart_toppers"})}async fetchCustomImageRow(e){return this.smartSortClient.createSmartSort({...e,config:this.config,placement:"custom_image_row"})}async fetchCustomPlacements(e){return await this.multiClient.createMultiPlacement({config:this.config,multiRequestType:"custom",...e})}async fetchFacets(e){return ze({...e,...this.config})}async fetchFeaturedPlacements(e){return await this.multiClient.createMultiPlacement({config:this.config,multiRequestType:"featured",...e})}async fetchMenuRow(e){return this.smartSortClient.createSmartSort({...e,config:this.config,placement:"menu_inline"})}async fetchMenuTopRow(e){return this.smartSortClient.createSmartSort({...e,config:this.config,placement:"menu_top_row"})}async fetchProduct(e){return this.productClient.create({config:this.config,...e})}async fetchProductReviews(e){return Je({config:this.config,...e})}async fetchRecommendedPDPRow(e){return await this.smartSortClient.createSmartSort({...e,config:this.config,placement:"pdp_row"})}async fetchRecommendedRow(e){return await this.smartSortClient.createSmartSort({...e,config:this.config,placement:"menu_dynamic_row"})}async fetchRecommendedSort(e){return await this.smartSortClient.createSmartSort({...e,config:this.config,placement:"menu_inline_table"})}getJaneDeviceId(){return this.config.identifier.jdid}async init(){this.initialized||(I()&&!this.userProvidedJdid&&await this.initializeClientSideJdid(),this.initialized=!0)}iterateProductReviews(e){return He(r=>this.fetchProductReviews({...e,page:r}))}async sendPosCheckout(e){return Le({...e,...this.config})}async sendSessionEvent(e){return Ke({...e,...this.config})}async initializeClientSideJdid(){let e={apiKey:this.config.apiKey,source:this.config.source},r=await Ue(this.config.eventsEndpoint,e);k.set("jdid",r),this.config.identifier.jdid=r}};_([S,y],R.prototype,"fetchCartTopperRow",1),_([S,y],R.prototype,"fetchCustomImageRow",1),_([S,y],R.prototype,"fetchCustomPlacements",1),_([S,y],R.prototype,"fetchFacets",1),_([S,y],R.prototype,"fetchFeaturedPlacements",1),_([S,y],R.prototype,"fetchMenuRow",1),_([S,y],R.prototype,"fetchMenuTopRow",1),_([S,y],R.prototype,"fetchProduct",1),_([S,y],R.prototype,"fetchProductReviews",1),_([S,y],R.prototype,"fetchRecommendedPDPRow",1),_([S,y],R.prototype,"fetchRecommendedRow",1),_([S,y],R.prototype,"fetchRecommendedSort",1);0&&(module.exports={AdMode,AppMode,BrandSpecials,DEFAULT_PAGE_SIZE,IntendedDisplay,JaneDM,JaneDeviceIdSentinel,PageContextEnum,Placement,ProductKindEnum,ReviewSortEnum,SearchSortEnum,SmartSort,SmartSortProduct,Specials,bestSellerRank,categoryAndNameAsc,defaultOrder,priceAsc,priceDesc,priceEighthOunceAsc,priceEighthOunceDesc,priceGramAsc,priceGramDesc,priceHalfGramAsc,priceHalfGramDesc,priceHalfOunceAsc,priceHalfOunceDesc,priceOunceAsc,priceOunceDesc,priceQuarterOunceAsc,priceQuarterOunceDesc,priceTwoGramAsc,priceTwoGramDesc,rating,recommendation,searchSorts,thcPotencyAsc,thcPotencyDesc});
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { P as Placement, A as AdMode, F as FilterContext, a as PageContextEnum, S as SearchSortEnum, C as
|
|
2
|
-
export {
|
|
1
|
+
import { P as Placement, A as AdMode, F as FilterContext, a as PageContextEnum, S as SearchSortEnum, C as CustomImageData, b as SmartSortProductProps, c as SmartSortClickIntent, d as SmartSortProps, e as ConversionExternalProduct, f as SessionEvent, R as RequiredConfig, J as JaneDMPublicConfig, g as JaneDMInternalConfig, h as FetchCartTopperRowProps, i as FetchCustomImageRowProps, j as Facets, k as FetchMenuRowProps, l as FetchMenuTopRowProps, m as FetchProductReviewsProps, n as ProductReviewsResponse, o as FetchRecommendedPDPRowProps, p as FetchRecommendedRowProps, q as FetchRecommendedSortProps, I as IterateProductReviewsProps, r as ProductReviewsIterable } from './smartSort-Bzn30738.cjs';
|
|
2
|
+
export { s as AppMode, D as DEFAULT_PAGE_SIZE, t as FetchCartTopperRowByPosProductId, u as FetchCartTopperRowByProductProps, v as FetchRecommendedPDPRowByPosProductId, w as FetchRecommendedPDPRowByProductId, x as IntendedDisplay, y as JaneDMConfig, z as JaneDMIdentifiers, B as JaneDeviceIdSentinel, E as PaginationInfo, G as ProductKindEnum, H as ProductReview, K as ProductReviewsAggregate, L as ReviewSortEnum, M as SearchSort, N as SmartSortNextPageProps, O as bestSellerRank, Q as categoryAndNameAsc, T as defaultOrder, U as priceAsc, V as priceDesc, W as priceEighthOunceAsc, X as priceEighthOunceDesc, Y as priceGramAsc, Z as priceGramDesc, _ as priceHalfGramAsc, $ as priceHalfGramDesc, a0 as priceHalfOunceAsc, a1 as priceHalfOunceDesc, a2 as priceOunceAsc, a3 as priceOunceDesc, a4 as priceQuarterOunceAsc, a5 as priceQuarterOunceDesc, a6 as priceTwoGramAsc, a7 as priceTwoGramDesc, a8 as rating, a9 as recommendation, aa as searchSorts, ab as thcPotencyAsc, ac as thcPotencyDesc } from './smartSort-Bzn30738.cjs';
|
|
3
3
|
|
|
4
4
|
interface CustomBestSellingProps {
|
|
5
5
|
placement: Placement.BestSelling;
|
|
@@ -98,92 +98,6 @@ interface ProductByPosProductId {
|
|
|
98
98
|
productId?: never;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
/**
|
|
102
|
-
* The VirtualBudtenderClickIntent is used to determine if the click
|
|
103
|
-
* event should be treated as an "add to cart" event.
|
|
104
|
-
*/
|
|
105
|
-
interface VirtualBudtenderClickIntent {
|
|
106
|
-
/**
|
|
107
|
-
* When set to true, the click event will be treated as an "add to cart" event.
|
|
108
|
-
* @default false
|
|
109
|
-
*/
|
|
110
|
-
isAddToCart?: boolean;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Properties to create a `VirtualBudtenderProduct` instance.
|
|
114
|
-
* @internal
|
|
115
|
-
*/
|
|
116
|
-
interface VirtualBudtenderProductProps<ProductAttributes extends object = Record<string, unknown>> {
|
|
117
|
-
/**
|
|
118
|
-
* The raw Virtual Budtender product data
|
|
119
|
-
*/
|
|
120
|
-
attributes: ProductAttributes;
|
|
121
|
-
/**
|
|
122
|
-
* Click tracking payload
|
|
123
|
-
*/
|
|
124
|
-
clickPayload: Click;
|
|
125
|
-
/**
|
|
126
|
-
* Click tracking URL
|
|
127
|
-
*/
|
|
128
|
-
clickUrl: string;
|
|
129
|
-
/**
|
|
130
|
-
* Whether this product has been impressed yet
|
|
131
|
-
*/
|
|
132
|
-
hasBeenImpressed?: boolean;
|
|
133
|
-
/**
|
|
134
|
-
* Impression tracking payload
|
|
135
|
-
*/
|
|
136
|
-
impressPayload: Impression;
|
|
137
|
-
/**
|
|
138
|
-
* Impression tracking URL
|
|
139
|
-
*/
|
|
140
|
-
impressUrl: string;
|
|
141
|
-
/**
|
|
142
|
-
* Boolean that indicates if a product is sponsored or not
|
|
143
|
-
*/
|
|
144
|
-
isSponsored: boolean;
|
|
145
|
-
/**
|
|
146
|
-
* The primary identifier for this product
|
|
147
|
-
*/
|
|
148
|
-
objectId: string;
|
|
149
|
-
/**
|
|
150
|
-
* The reasoning for the product
|
|
151
|
-
*/
|
|
152
|
-
reasoning?: string;
|
|
153
|
-
/**
|
|
154
|
-
* The score of the product
|
|
155
|
-
*/
|
|
156
|
-
score?: number;
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Parameters for fetching virtual budtender query suggestions.
|
|
160
|
-
* @internal
|
|
161
|
-
*/
|
|
162
|
-
interface VirtualBudtenderQueriesParams {
|
|
163
|
-
/**
|
|
164
|
-
* The store ID to get queries for
|
|
165
|
-
*/
|
|
166
|
-
storeId: number;
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Parameters for virtual budtender search.
|
|
170
|
-
* @internal
|
|
171
|
-
*/
|
|
172
|
-
interface VirtualBudtenderSearchParams {
|
|
173
|
-
/**
|
|
174
|
-
* Natural language query for product search
|
|
175
|
-
*/
|
|
176
|
-
query: string;
|
|
177
|
-
/**
|
|
178
|
-
* Optional search attributes to include in the results
|
|
179
|
-
*/
|
|
180
|
-
searchAttributes?: string[];
|
|
181
|
-
/**
|
|
182
|
-
* Store ID to search products in
|
|
183
|
-
*/
|
|
184
|
-
storeId: number;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
101
|
/**
|
|
188
102
|
* Parameters for fetching facets.
|
|
189
103
|
*/
|
|
@@ -514,112 +428,6 @@ interface SessionEventParams {
|
|
|
514
428
|
events: SessionEvent[];
|
|
515
429
|
}
|
|
516
430
|
|
|
517
|
-
interface VirtualBudtenderSearchWithProductsResponse<ProductShape extends object = Record<string, unknown>> {
|
|
518
|
-
htmlResponse: string;
|
|
519
|
-
markdownResponse: string;
|
|
520
|
-
products: VirtualBudtenderProduct<ProductShape>[];
|
|
521
|
-
query: string;
|
|
522
|
-
totalResults: number;
|
|
523
|
-
unformattedResponse: string;
|
|
524
|
-
}
|
|
525
|
-
/**
|
|
526
|
-
* Represents a product returned from Virtual Budtender search.
|
|
527
|
-
* Provides tracking methods for click and impression events.
|
|
528
|
-
*
|
|
529
|
-
* @internal
|
|
530
|
-
*/
|
|
531
|
-
declare class VirtualBudtenderProduct<ProductShape extends object = Record<string, unknown>> {
|
|
532
|
-
/**
|
|
533
|
-
* The raw Virtual Budtender product data including search attributes and reasoning.
|
|
534
|
-
*/
|
|
535
|
-
attributes: ProductShape;
|
|
536
|
-
/**
|
|
537
|
-
* Boolean that indicates if a product is sponsored or not
|
|
538
|
-
*/
|
|
539
|
-
isSponsored: boolean;
|
|
540
|
-
/**
|
|
541
|
-
* The primary identifier for this product.
|
|
542
|
-
*/
|
|
543
|
-
objectId: string;
|
|
544
|
-
/**
|
|
545
|
-
* The reasoning for the product
|
|
546
|
-
*/
|
|
547
|
-
reasoning?: string;
|
|
548
|
-
/**
|
|
549
|
-
* The score of the product
|
|
550
|
-
*/
|
|
551
|
-
score?: number;
|
|
552
|
-
private clickPayload;
|
|
553
|
-
private clickUrl;
|
|
554
|
-
private hasBeenImpressed;
|
|
555
|
-
private impressPayload;
|
|
556
|
-
private impressPromise?;
|
|
557
|
-
private impressUrl;
|
|
558
|
-
/**
|
|
559
|
-
* Builds a new VirtualBudtenderProduct instance based on the provided properties.
|
|
560
|
-
* This method should be used in conjunction with `serialize()` to recreate the instance.
|
|
561
|
-
*/
|
|
562
|
-
constructor(props: VirtualBudtenderProductProps<ProductShape>);
|
|
563
|
-
/**
|
|
564
|
-
* Converts the previously-serialized object back to an instance of this class.
|
|
565
|
-
* This method should be used in conjunction with `toJSON()` to recreate the instance.
|
|
566
|
-
*/
|
|
567
|
-
static fromJSON<ProductShape extends object = Record<string, unknown>>(serialized: string): VirtualBudtenderProduct<ProductShape>;
|
|
568
|
-
/**
|
|
569
|
-
* Records attribution data for this product. This method
|
|
570
|
-
* should be called when the product is clicked by the user.
|
|
571
|
-
* If the click is associated with an add to cart action,
|
|
572
|
-
* that intent should be passed to the click method.
|
|
573
|
-
* @example
|
|
574
|
-
* ```jsx
|
|
575
|
-
* results.products.map((product) => {
|
|
576
|
-
* return (<ProductCard
|
|
577
|
-
* product={product}
|
|
578
|
-
* onClick={() => product.click()}
|
|
579
|
-
* key={product.objectId}
|
|
580
|
-
* >
|
|
581
|
-
* <Button
|
|
582
|
-
* title="Add to Cart"
|
|
583
|
-
* onClick={() => product.click({isAddToCart: true})}
|
|
584
|
-
* />
|
|
585
|
-
* </ProductCard>);
|
|
586
|
-
* });
|
|
587
|
-
* ```
|
|
588
|
-
*/
|
|
589
|
-
click(props?: VirtualBudtenderClickIntent): Promise<void>;
|
|
590
|
-
/**
|
|
591
|
-
* Records attribution data for this product. This method
|
|
592
|
-
* should be called when the product is visible by the user in
|
|
593
|
-
* the viewport, as a visible DOM element.
|
|
594
|
-
* See {@link https://www.npmjs.com/package/react-intersection-observer react-intersection-observer} for a React component that can be used to detect when an element is in the viewport.
|
|
595
|
-
* @example
|
|
596
|
-
* ```jsx
|
|
597
|
-
* import { InView } from "react-intersection-observer";
|
|
598
|
-
*
|
|
599
|
-
* const Component = () => (
|
|
600
|
-
* <InView onChange={(inView) => {
|
|
601
|
-
* if(inView) {
|
|
602
|
-
* product.impress();
|
|
603
|
-
* }
|
|
604
|
-
* }}>
|
|
605
|
-
* <ProductCard />
|
|
606
|
-
* </InView>
|
|
607
|
-
* );
|
|
608
|
-
* ```
|
|
609
|
-
*/
|
|
610
|
-
impress(): Promise<void>;
|
|
611
|
-
/**
|
|
612
|
-
* Serializes the instance to a plain object for storage or transport.
|
|
613
|
-
* This method should be used in conjunction with `fromJSON()` to recreate the instance.
|
|
614
|
-
*/
|
|
615
|
-
serialize(): VirtualBudtenderProductProps<ProductShape>;
|
|
616
|
-
/**
|
|
617
|
-
* Converts the instance to a JSON string for storage or transport.
|
|
618
|
-
* This method should be used in conjunction with `fromJSON()` to recreate the instance.
|
|
619
|
-
*/
|
|
620
|
-
toJSON(): string;
|
|
621
|
-
}
|
|
622
|
-
|
|
623
431
|
type Func<T> = () => Promise<T>;
|
|
624
432
|
/**
|
|
625
433
|
* Generic Cell Rate Algorithm (GCRA) rate limiter implementation.
|
|
@@ -1035,43 +843,6 @@ declare class JaneDM {
|
|
|
1035
843
|
* ```
|
|
1036
844
|
*/
|
|
1037
845
|
fetchRecommendedSort<ProductShape extends object = Record<string, unknown>>(props: FetchRecommendedSortProps): Promise<SmartSort<ProductShape>>;
|
|
1038
|
-
/**
|
|
1039
|
-
* Fetches virtual budtender query suggestions from the Jane DM API.
|
|
1040
|
-
* Returns curated queries optimized for natural language product search.
|
|
1041
|
-
* @internal
|
|
1042
|
-
* @example
|
|
1043
|
-
* ```jsx
|
|
1044
|
-
* const queries = await client.fetchVirtualBudtenderQueries({
|
|
1045
|
-
* storeId: 420,
|
|
1046
|
-
* });
|
|
1047
|
-
*
|
|
1048
|
-
* console.log(queries); // [{ query: "help me sleep", displayText: "Help me sleep" }, ...]
|
|
1049
|
-
* ```
|
|
1050
|
-
*/
|
|
1051
|
-
fetchVirtualBudtenderQueries(props: VirtualBudtenderQueriesParams): Promise<VirtualBudtenderQuery[]>;
|
|
1052
|
-
/**
|
|
1053
|
-
* Performs natural language product search using Virtual Budtender AI.
|
|
1054
|
-
* Returns personalized product recommendations with AI-generated explanations
|
|
1055
|
-
* and integrates sponsored products when relevant to the query.
|
|
1056
|
-
* @internal
|
|
1057
|
-
* @example
|
|
1058
|
-
* ```jsx
|
|
1059
|
-
* const result = await client.fetchVirtualBudtenderSearch({
|
|
1060
|
-
* query: "help me sleep",
|
|
1061
|
-
* storeId: 420,
|
|
1062
|
-
* });
|
|
1063
|
-
*
|
|
1064
|
-
* console.log(result.markdownResponse); // AI-generated response
|
|
1065
|
-
* console.log(result.products); // Array of VirtualBudtenderProduct instances
|
|
1066
|
-
*
|
|
1067
|
-
* // Each product has click and impression tracking
|
|
1068
|
-
* result.products.forEach(product => {
|
|
1069
|
-
* console.log(product.attributes.reasoning); // AI reasoning
|
|
1070
|
-
* console.log(product.isSponsored); // Sponsored status
|
|
1071
|
-
* });
|
|
1072
|
-
* ```
|
|
1073
|
-
*/
|
|
1074
|
-
fetchVirtualBudtenderSearch<ProductShape extends object = Record<string, unknown>>(props: VirtualBudtenderSearchParams): Promise<VirtualBudtenderSearchWithProductsResponse<ProductShape>>;
|
|
1075
846
|
/**
|
|
1076
847
|
* Retrieves the configured JDID for the client.
|
|
1077
848
|
*/
|
|
@@ -1178,4 +949,4 @@ declare class JaneDM {
|
|
|
1178
949
|
private initializeClientSideJdid;
|
|
1179
950
|
}
|
|
1180
951
|
|
|
1181
|
-
export { AdMode, BrandSpecials, ConversionExternalProduct, CustomImageData, Facets, FetchCartTopperRowProps, FetchCustomImageRowProps, type FetchCustomPlacementsProps, type FetchFacetsParams, type FetchFeaturedPlacementProps, FetchMenuRowProps, FetchMenuTopRowProps, FetchProductReviewsProps, FetchRecommendedPDPRowProps, FetchRecommendedRowProps, FetchRecommendedSortProps, IterateProductReviewsProps, JaneDM, type MultiPlacementResponse, PageContextEnum, Placement, type PosCheckoutParams, ProductReviewsIterable, ProductReviewsResponse, SearchSortEnum, type SessionEventParams, SmartSort, SmartSortClickIntent, SmartSortProduct, SmartSortProductProps, SmartSortProps, Specials
|
|
952
|
+
export { AdMode, BrandSpecials, ConversionExternalProduct, CustomImageData, Facets, FetchCartTopperRowProps, FetchCustomImageRowProps, type FetchCustomPlacementsProps, type FetchFacetsParams, type FetchFeaturedPlacementProps, FetchMenuRowProps, FetchMenuTopRowProps, FetchProductReviewsProps, FetchRecommendedPDPRowProps, FetchRecommendedRowProps, FetchRecommendedSortProps, IterateProductReviewsProps, JaneDM, type MultiPlacementResponse, PageContextEnum, Placement, type PosCheckoutParams, ProductReviewsIterable, ProductReviewsResponse, SearchSortEnum, type SessionEventParams, SmartSort, SmartSortClickIntent, SmartSortProduct, SmartSortProductProps, SmartSortProps, Specials };
|