@neosianexus/super-tebex 3.4.2 → 3.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { TebexProvider, useTebexConfig, useTebexContext } from './provider';
1
+ export { TebexProvider, useTebexConfig, useTebexContext, useTebexHydrated } from './provider';
2
2
  export { useBasket, useCategories, useCategory, useCheckout, useCoupons, useCreatorCodes, useGiftCards, useGiftPackage, usePackage, usePackages, useUser, useWebstore, } from './hooks';
3
3
  export { useBasketStore, useUserStore, type BasketStore, type UserStore } from './stores';
4
4
  export { tebexKeys, type TebexQueryKey } from './queries';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5E,OAAO,EACL,SAAS,EACT,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,eAAe,EACf,YAAY,EACZ,cAAc,EACd,UAAU,EACV,WAAW,EACX,OAAO,EACP,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1F,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEtD,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,MAAM,EACN,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,mBAAmB,EACnB,MAAM,EACN,WAAW,EACX,SAAS,EACT,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,QAAQ,EACR,YAAY,GACb,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,GAAG,EACH,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,wBAAwB,EACxB,EAAE,GACH,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9F,OAAO,EACL,SAAS,EACT,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,eAAe,EACf,YAAY,EACZ,cAAc,EACd,UAAU,EACV,WAAW,EACX,OAAO,EACP,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1F,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEtD,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,MAAM,EACN,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,mBAAmB,EACnB,MAAM,EACN,WAAW,EACX,SAAS,EACT,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,QAAQ,EACR,YAAY,GACb,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,GAAG,EACH,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,wBAAwB,EACxB,EAAE,GACH,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  'use client';
2
- import {QueryClient,QueryClientProvider,useQueryClient,useQuery,useMutation}from'@tanstack/react-query';import {createContext,useContext,useMemo,useState,useEffect,useRef,useCallback}from'react';import {TebexHeadless}from'tebex_headless';import {create}from'zustand';import {subscribeWithSelector,persist}from'zustand/middleware';import {jsx}from'react/jsx-runtime';var V=(g=>(g.PROVIDER_NOT_FOUND="PROVIDER_NOT_FOUND",g.INVALID_CONFIG="INVALID_CONFIG",g.NOT_AUTHENTICATED="NOT_AUTHENTICATED",g.INVALID_USERNAME="INVALID_USERNAME",g.BASKET_NOT_FOUND="BASKET_NOT_FOUND",g.BASKET_CREATION_FAILED="BASKET_CREATION_FAILED",g.BASKET_EXPIRED="BASKET_EXPIRED",g.BASKET_EMPTY="BASKET_EMPTY",g.PACKAGE_NOT_FOUND="PACKAGE_NOT_FOUND",g.PACKAGE_OUT_OF_STOCK="PACKAGE_OUT_OF_STOCK",g.PACKAGE_ALREADY_OWNED="PACKAGE_ALREADY_OWNED",g.INVALID_QUANTITY="INVALID_QUANTITY",g.CATEGORY_NOT_FOUND="CATEGORY_NOT_FOUND",g.COUPON_INVALID="COUPON_INVALID",g.COUPON_EXPIRED="COUPON_EXPIRED",g.COUPON_ALREADY_USED="COUPON_ALREADY_USED",g.GIFTCARD_INVALID="GIFTCARD_INVALID",g.GIFTCARD_INSUFFICIENT_BALANCE="GIFTCARD_INSUFFICIENT_BALANCE",g.CREATOR_CODE_INVALID="CREATOR_CODE_INVALID",g.CHECKOUT_FAILED="CHECKOUT_FAILED",g.CHECKOUT_CANCELLED="CHECKOUT_CANCELLED",g.TEBEX_JS_NOT_LOADED="TEBEX_JS_NOT_LOADED",g.NETWORK_ERROR="NETWORK_ERROR",g.TIMEOUT="TIMEOUT",g.RATE_LIMITED="RATE_LIMITED",g.SERVER_ERROR="SERVER_ERROR",g.FORBIDDEN="FORBIDDEN",g.VALIDATION_ERROR="VALIDATION_ERROR",g.NOT_FOUND="NOT_FOUND",g.BASKET_LOCKED="BASKET_LOCKED",g.PACKAGE_DISABLED="PACKAGE_DISABLED",g.UNKNOWN="UNKNOWN",g))(V||{});var u=class e extends Error{code;cause;constructor(t,o,r){super(o??t),Object.setPrototypeOf(this,e.prototype),this.name="TebexError",this.code=t,this.cause=r,typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,e);}static extractStatusCode(t){if(typeof t=="object"&&t!==null){if("response"in t){let o=t.response;if(o&&typeof o.status=="number")return o.status}if("status"in t&&typeof t.status=="number")return t.status}return null}static fromUnknown(t){if(t instanceof e)return t;let o=t instanceof Error?t.message:String(t),r=e.extractStatusCode(t);if(r!==null)switch(r){case 401:case 403:return new e("FORBIDDEN",o,t);case 404:{let l=o.toLowerCase();return l.includes("basket")?new e("BASKET_NOT_FOUND",o,t):l.includes("package")?new e("PACKAGE_NOT_FOUND",o,t):new e("NOT_FOUND",o,t)}case 410:return new e("BASKET_EXPIRED",o,t);case 422:return new e("VALIDATION_ERROR",o,t);case 429:return new e("RATE_LIMITED",o,t);case 500:case 502:case 503:return new e("SERVER_ERROR",o,t)}if(t instanceof Error){let l=o.toLowerCase();return l.includes("network")||l.includes("fetch")?new e("NETWORK_ERROR",o,t):l.includes("timeout")?new e("TIMEOUT",o,t):l.includes("rate limit")||l.includes("429")?new e("RATE_LIMITED",o,t):l.includes("basket")&&l.includes("not found")?new e("BASKET_NOT_FOUND",o,t):l.includes("package")&&l.includes("not found")?new e("PACKAGE_NOT_FOUND",o,t):l.includes("coupon")&&l.includes("invalid")?new e("COUPON_INVALID",o,t):l.includes("coupon")&&l.includes("expired")?new e("COUPON_EXPIRED",o,t):l.includes("gift")&&l.includes("invalid")?new e("GIFTCARD_INVALID",o,t):new e("UNKNOWN",o,t)}return new e("UNKNOWN",o)}static fromJSON(t){return new e(t.code,t.message??t.code)}toJSON(){return {name:this.name,code:this.code,message:this.message,...this.cause instanceof Error?{cause:this.cause.message}:{}}}};var v=null;function W(e){v=new TebexHeadless(e);}function C(){if(v===null)throw new u("PROVIDER_NOT_FOUND","Tebex client not initialized. Ensure TebexProvider wraps your component tree.");return v}function j(){return v!==null}var U=create()(subscribeWithSelector(persist(e=>({basketIdent:null,setBasketIdent:t=>{e({basketIdent:t});},clearBasketIdent:()=>{e({basketIdent:null});}}),{name:"tebex-basket-store",skipHydration:true,version:1,partialize:e=>({basketIdent:e.basketIdent}),migrate:e=>e,onRehydrateStorage:()=>(e,t)=>{t!==void 0&&console.warn("[tebex] Failed to rehydrate basket store:",t);}})));var P=create()(subscribeWithSelector(persist(e=>({username:null,setUsername:t=>{e({username:t});},clearUsername:()=>{e({username:null}),U.getState().clearBasketIdent();}}),{name:"tebex-user-store",skipHydration:true,version:1,partialize:e=>({username:e.username}),migrate:e=>e,onRehydrateStorage:()=>(e,t)=>{t!==void 0&&console.warn("[tebex] Failed to rehydrate user store:",t);}})));var H=createContext(null);function K(){let e=useContext(H);if(e===null)throw new u("PROVIDER_NOT_FOUND","useTebexContext must be used within TebexProvider or TebexMockProvider");return e}function B(){let{config:e}=K();return e}var Le={defaultOptions:{queries:{staleTime:60*1e3,gcTime:300*1e3,retry:3,retryDelay:e=>Math.min(1e3*2**e,3e4),refetchOnWindowFocus:false,refetchOnReconnect:true},mutations:{retry:2,retryDelay:e=>Math.min(500*2**e,5e3)}}};function qe(e){let t=e.baseUrl.replace(/\/$/,""),o=e.urls?.complete??"/shop/complete",r=e.urls?.cancel??"/shop/cancel";return {publicKey:e.publicKey,baseUrl:t,completeUrl:`${t}${o}`,cancelUrl:`${t}${r}`,onError:e.onError}}function ee({children:e,config:t,queryClient:o}){let r=useMemo(()=>qe(t),[t]),[l]=useState(()=>o??new QueryClient(Le));useState(()=>{W(r.publicKey);}),useEffect(()=>{U.persist.rehydrate(),P.persist.rehydrate();},[]),useEffect(()=>{let f=x=>{(x.key==="tebex-basket-store"||x.key==="tebex-user-store")&&(U.persist.rehydrate(),P.persist.rehydrate());};return window.addEventListener("storage",f),()=>{window.removeEventListener("storage",f);}},[]);let k=useMemo(()=>({config:r,queryClient:l}),[r,l]);return jsx(H.Provider,{value:k,children:jsx(QueryClientProvider,{client:l,children:e})})}var i={all:["tebex"],categories:()=>[...i.all,"categories"],categoriesList:e=>[...i.categories(),"list",{includePackages:e}],category:e=>[...i.categories(),"detail",e],packages:()=>[...i.all,"packages"],packagesList:e=>[...i.packages(),"list",{categoryId:e}],package:e=>[...i.packages(),"detail",e],baskets:()=>[...i.all,"baskets"],basket:e=>[...i.baskets(),e],webstore:()=>[...i.all,"webstore"]};function te(e){return e instanceof u?true:typeof e=="object"&&e!==null&&"name"in e&&"code"in e&&e.name==="TebexError"}function re(e){return e.success}function ne(e){return !e.success}function se(e){return e!=null}function oe(e){return typeof e=="string"&&e.length>0}function ae(e){return typeof e=="number"&&e>0&&Number.isFinite(e)}function R(e){return typeof e=="number"&&Number.isInteger(e)&&e>0}function N(e){return typeof e!="string"?false:/^[a-zA-Z0-9_]{3,16}$/.test(e)}var S=null;function _(){let e=B(),t=useQueryClient(),o=U(c=>c.basketIdent),r=U(c=>c.setBasketIdent),l=U(c=>c.clearBasketIdent),k=P(c=>c.username),f=useRef(o);f.current=o;let x=useQuery({queryKey:i.basket(o),queryFn:async()=>o===null?null:C().getBasket(o),enabled:o!==null,retry:(c,p)=>{let d=u.fromUnknown(p);return d.code==="BASKET_NOT_FOUND"||d.code==="BASKET_EXPIRED"?false:c<3}});useEffect(()=>{if(x.error!==null){let c=u.fromUnknown(x.error);(c.code==="BASKET_NOT_FOUND"||c.code==="BASKET_EXPIRED")&&l();}},[x.error,l]);let E=useCallback(async()=>{let c=U.getState().basketIdent;return c!==null?c:(S!==null||(S=(async()=>{if(k===null||k.length===0)throw new u("NOT_AUTHENTICATED","Username is required to create a basket");let T=await C().createMinecraftBasket(k,e.completeUrl,e.cancelUrl);return r(T.ident),T.ident})().finally(()=>{S=null;})),S)},[k,e.completeUrl,e.cancelUrl,r]),m=useMutation({scope:{id:"basket-mutations"},mutationFn:async c=>{let p=c.quantity??1;if(!R(p))throw new u("INVALID_QUANTITY","Quantity must be a positive integer");let d=await E(),T=C();return await T.addPackageToBasket(d,c.packageId,p,c.type,c.variableData),T.getBasket(d)},onMutate:async c=>{let p=f.current;if(p===null)return {previousBasket:void 0,ident:p};await t.cancelQueries({queryKey:i.basket(p)});let d=t.getQueryData(i.basket(p));if(d!=null){let T={id:c.packageId,name:"Loading...",description:"",image:null,in_basket:{quantity:c.quantity??1,price:0,gift_username_id:null,gift_username:null}},G=d.packages.findIndex(A=>A.id===c.packageId),Oe=G>=0?d.packages.map((A,Re)=>Re===G?{...A,in_basket:{...A.in_basket,quantity:A.in_basket.quantity+(c.quantity??1)}}:A):[...d.packages,T];t.setQueryData(i.basket(p),{...d,packages:Oe});}return {previousBasket:d,ident:p}},onError:(c,p,d)=>{d?.previousBasket!==void 0&&d.ident!==null&&t.setQueryData(i.basket(d.ident),d.previousBasket),e.onError?.(u.fromUnknown(c));},onSuccess:(c,p,d)=>{let T=d.ident??f.current;T!==null&&t.setQueryData(i.basket(T),c);}}),y=useMutation({scope:{id:"basket-mutations"},mutationFn:async c=>{if(o===null)throw new u("BASKET_NOT_FOUND");let p=C();return await p.removePackage(o,c),p.getBasket(o)},onMutate:async c=>{let p=f.current;if(p===null)return {previousBasket:void 0,ident:p};await t.cancelQueries({queryKey:i.basket(p)});let d=t.getQueryData(i.basket(p));return d!=null&&t.setQueryData(i.basket(p),{...d,packages:d.packages.filter(T=>T.id!==c)}),{previousBasket:d,ident:p}},onError:(c,p,d)=>{d?.previousBasket!==void 0&&d.ident!==null&&t.setQueryData(i.basket(d.ident),d.previousBasket),e.onError?.(u.fromUnknown(c));},onSuccess:(c,p,d)=>{let T=d.ident??f.current;T!==null&&t.setQueryData(i.basket(T),c);}}),n=useMutation({scope:{id:"basket-mutations"},mutationFn:async c=>{if(!R(c.quantity))throw new u("INVALID_QUANTITY","Quantity must be a positive integer");if(o===null)throw new u("BASKET_NOT_FOUND");let p=C();return await p.updateQuantity(o,c.packageId,c.quantity),p.getBasket(o)},onMutate:async c=>{let p=f.current;if(p===null)return {previousBasket:void 0,ident:p};await t.cancelQueries({queryKey:i.basket(p)});let d=t.getQueryData(i.basket(p));return d!=null&&t.setQueryData(i.basket(p),{...d,packages:d.packages.map(T=>T.id===c.packageId?{...T,in_basket:{...T.in_basket,quantity:c.quantity}}:T)}),{previousBasket:d,ident:p}},onError:(c,p,d)=>{d?.previousBasket!==void 0&&d.ident!==null&&t.setQueryData(i.basket(d.ident),d.previousBasket),e.onError?.(u.fromUnknown(c));},onSuccess:(c,p,d)=>{let T=d.ident??f.current;T!==null&&t.setQueryData(i.basket(T),c);}}),a=useCallback(()=>{l(),t.removeQueries({queryKey:i.baskets()});},[l,t]),s=x.data??null,b=useMemo(()=>s?.packages??[],[s?.packages]),M=useMemo(()=>b.reduce((c,p)=>c+p.in_basket.quantity,0),[b]),L=useMemo(()=>s?.total_price??0,[s?.total_price]),I=x.error??m.error??y.error??n.error,w=useMemo(()=>I!==null?u.fromUnknown(I):null,[I]),O=useCallback(async c=>{await m.mutateAsync(c);},[m]),q=useCallback(async c=>{await y.mutateAsync(c);},[y]),D=useCallback(async c=>{await n.mutateAsync(c);},[n]);return {basket:s,data:s,basketIdent:o,packages:b,isLoading:x.isLoading,isFetching:x.isFetching,isAddingPackage:m.isPending,isRemovingPackage:y.isPending,isUpdatingQuantity:n.isPending,error:w,errorCode:w?.code??null,addPackage:O,removePackage:q,updateQuantity:D,clearBasket:a,refetch:x.refetch,itemCount:M,total:L,isEmpty:b.length===0}}function ie(e={}){let{includePackages:t=true,enabled:o=true}=e,r=useQuery({queryKey:i.categoriesList(t),queryFn:async()=>C().getCategories(t),enabled:o,staleTime:300*1e3}),l=useMemo(()=>r.error!==null?u.fromUnknown(r.error):null,[r.error]),k=useRef(r.data);k.current=r.data;let f=useCallback(m=>k.current?.find(y=>y.name.toLowerCase()===m.toLowerCase()),[]),x=useCallback(m=>k.current?.find(y=>y.id===m),[]),E=useCallback(m=>k.current?.find(y=>y.slug===m),[]);return {categories:r.data??null,data:r.data??null,isLoading:r.isLoading,isFetching:r.isFetching,error:l,errorCode:l?.code??null,refetch:r.refetch,getByName:f,getById:x,getBySlug:E}}function ue(e){let{id:t,enabled:o=true}=e,r=useQuery({queryKey:i.category(t),queryFn:async()=>C().getCategory(t),enabled:o&&t>0&&Number.isInteger(t),staleTime:300*1e3}),l=useMemo(()=>r.error!==null?u.fromUnknown(r.error):null,[r.error]);return {category:r.data??null,data:r.data??null,isLoading:r.isLoading,isFetching:r.isFetching,error:l,errorCode:l?.code??null,refetch:r.refetch}}var tt=1800*1e3,F=0;function ce(e={}){let{basket:t,basketIdent:o,clearBasket:r,isEmpty:l}=_(),k=B(),f=useMutation({mutationFn:async()=>{if(o===null||t===null)throw new u("BASKET_NOT_FOUND");if(l)throw new u("BASKET_EMPTY","Basket is empty");if(typeof window>"u")throw new u("TEBEX_JS_NOT_LOADED","Cannot checkout on server side.");let m=window.Tebex;if(m===void 0)throw new u("TEBEX_JS_NOT_LOADED",'Tebex.js not loaded. Add <script src="https://js.tebex.io/v/1.9.0.js"></script> to your page.');return new Promise((y,n)=>{let a=m.checkout,s=false,b=++F,M=()=>{b!==F||s||(s=true,D(),r(),e.onSuccess?.(),y());},L=d=>{if(b!==F||s)return;s=true,D();let T=new u("CHECKOUT_FAILED",String(d));e.onError?.(T),k.onError?.(T),n(T);},I=()=>{b!==F||s||(s=true,D(),e.onClose?.(),y());},w=null,O=null,q=setTimeout(()=>{s||(s=true,D(),n(new u("TIMEOUT","Checkout session timed out")));},tt),D=()=>{clearTimeout(q),w!==null&&(w.disconnect(),w=null),O!==null&&(clearTimeout(O),O=null);},c=()=>document.querySelector('iframe[src*="tebex"]')??document.querySelector('[class*="tebex-js"]')??document.querySelector("tebex-checkout[open]"),p=()=>{let d=false,T=()=>{if(s)return;c()!==null?d=true:d&&I();};w=new MutationObserver(()=>{s||(O!==null&&clearTimeout(O),O=setTimeout(T,50));}),w.observe(document.body,{childList:true,subtree:true}),c()!==null&&(d=true);};a.init({ident:o}),a.on("payment:complete",M),a.on("payment:error",L),a.on("close",I),a.launch(),p();})}}),x=useCallback(async()=>{await f.mutateAsync();},[f]),E=useMemo(()=>f.error!==null?u.fromUnknown(f.error):null,[f.error]);return {launch:x,isLaunching:f.isPending,error:E,errorCode:E?.code??null,canCheckout:t!==null&&!l,checkoutUrl:t?.links.checkout??null}}function de(){let{basket:e}=_(),t=U(n=>n.basketIdent),o=useRef(t);o.current=t;let r=useQueryClient(),l=B(),k=useMutation({scope:{id:"basket-mutations"},mutationFn:async n=>{let a=o.current;if(a===null)throw new u("BASKET_NOT_FOUND");let s=C();return await s.apply(a,"coupons",{coupon_code:n}),s.getBasket(a)},onMutate:async n=>{let a=o.current;if(a===null)return;await r.cancelQueries({queryKey:i.basket(a)});let s=r.getQueryData(i.basket(a));return s!==void 0&&r.setQueryData(i.basket(a),{...s,coupons:[...s.coupons,{code:n}]}),{previousBasket:s,ident:a}},onError:(n,a,s)=>{s?.previousBasket!==void 0&&r.setQueryData(i.basket(s.ident),s.previousBasket),l.onError?.(u.fromUnknown(n));},onSuccess:(n,a,s)=>{let b=s?.ident??o.current;b!==null&&r.setQueryData(i.basket(b),n);}}),f=useMutation({scope:{id:"basket-mutations"},mutationFn:async n=>{let a=o.current;if(a===null)throw new u("BASKET_NOT_FOUND");let s=C();return await s.remove(a,"coupons",{coupon_code:n}),s.getBasket(a)},onMutate:async n=>{let a=o.current;if(a===null)return;await r.cancelQueries({queryKey:i.basket(a)});let s=r.getQueryData(i.basket(a));return s!==void 0&&r.setQueryData(i.basket(a),{...s,coupons:s.coupons.filter(b=>b.code!==n)}),{previousBasket:s,ident:a}},onError:(n,a,s)=>{s?.previousBasket!==void 0&&r.setQueryData(i.basket(s.ident),s.previousBasket),l.onError?.(u.fromUnknown(n));},onSuccess:(n,a,s)=>{let b=s?.ident??o.current;b!==null&&r.setQueryData(i.basket(b),n);}}),x=useCallback(async n=>{await k.mutateAsync(n);},[k]),E=useCallback(async n=>{await f.mutateAsync(n);},[f]),m=k.error??f.error,y=useMemo(()=>m!==null?u.fromUnknown(m):null,[m]);return {coupons:e?.coupons??[],apply:x,remove:E,isApplying:k.isPending,isRemoving:f.isPending,error:y,errorCode:y?.code??null}}function ke(){let{basket:e}=_(),t=U(n=>n.basketIdent),o=useRef(t);o.current=t;let r=useQueryClient(),l=B(),k=useMutation({scope:{id:"basket-mutations"},mutationFn:async n=>{let a=o.current;if(a===null)throw new u("BASKET_NOT_FOUND");let s=C();return await s.apply(a,"creator-codes",{creator_code:n}),s.getBasket(a)},onMutate:async n=>{let a=o.current;if(a===null)return;await r.cancelQueries({queryKey:i.basket(a)});let s=r.getQueryData(i.basket(a));return s!==void 0&&r.setQueryData(i.basket(a),{...s,creator_code:n}),{previousBasket:s,ident:a}},onError:(n,a,s)=>{s?.previousBasket!==void 0&&r.setQueryData(i.basket(s.ident),s.previousBasket),l.onError?.(u.fromUnknown(n));},onSuccess:(n,a,s)=>{let b=s?.ident??o.current;b!==null&&r.setQueryData(i.basket(b),n);}}),f=useMutation({scope:{id:"basket-mutations"},mutationFn:async()=>{let n=o.current;if(n===null)throw new u("BASKET_NOT_FOUND");let a=C();return await a.remove(n,"creator-codes",{creator_code:""}),a.getBasket(n)},onMutate:async()=>{let n=o.current;if(n===null)return;await r.cancelQueries({queryKey:i.basket(n)});let a=r.getQueryData(i.basket(n));return a!==void 0&&r.setQueryData(i.basket(n),{...a,creator_code:""}),{previousBasket:a,ident:n}},onError:(n,a,s)=>{s?.previousBasket!==void 0&&r.setQueryData(i.basket(s.ident),s.previousBasket),l.onError?.(u.fromUnknown(n));},onSuccess:(n,a,s)=>{let b=s?.ident??o.current;b!==null&&r.setQueryData(i.basket(b),n);}}),x=useCallback(async n=>{await k.mutateAsync(n);},[k]),E=useCallback(async()=>{await f.mutateAsync();},[f]),m=k.error??f.error,y=useMemo(()=>m!==null?u.fromUnknown(m):null,[m]);return {creatorCode:e?.creator_code??null,apply:x,remove:E,isApplying:k.isPending,isRemoving:f.isPending,error:y,errorCode:y?.code??null}}function be(){let{basket:e}=_(),t=U(n=>n.basketIdent),o=useRef(t);o.current=t;let r=useQueryClient(),l=B(),k=useMutation({scope:{id:"basket-mutations"},mutationFn:async n=>{let a=o.current;if(a===null)throw new u("BASKET_NOT_FOUND");let s=C();return await s.apply(a,"giftcards",{card_number:n}),s.getBasket(a)},onMutate:async n=>{let a=o.current;if(a===null)return;await r.cancelQueries({queryKey:i.basket(a)});let s=r.getQueryData(i.basket(a));return s!==void 0&&r.setQueryData(i.basket(a),{...s,giftcards:[...s.giftcards,{card_number:n}]}),{previousBasket:s,ident:a}},onError:(n,a,s)=>{s?.previousBasket!==void 0&&r.setQueryData(i.basket(s.ident),s.previousBasket),l.onError?.(u.fromUnknown(n));},onSuccess:(n,a,s)=>{let b=s?.ident??o.current;b!==null&&r.setQueryData(i.basket(b),n);}}),f=useMutation({scope:{id:"basket-mutations"},mutationFn:async n=>{let a=o.current;if(a===null)throw new u("BASKET_NOT_FOUND");let s=C();return await s.remove(a,"giftcards",{card_number:n}),s.getBasket(a)},onMutate:async n=>{let a=o.current;if(a===null)return;await r.cancelQueries({queryKey:i.basket(a)});let s=r.getQueryData(i.basket(a));return s!==void 0&&r.setQueryData(i.basket(a),{...s,giftcards:s.giftcards.filter(b=>b.card_number!==n)}),{previousBasket:s,ident:a}},onError:(n,a,s)=>{s?.previousBasket!==void 0&&r.setQueryData(i.basket(s.ident),s.previousBasket),l.onError?.(u.fromUnknown(n));},onSuccess:(n,a,s)=>{let b=s?.ident??o.current;b!==null&&r.setQueryData(i.basket(b),n);}}),x=useCallback(async n=>{await k.mutateAsync(n);},[k]),E=useCallback(async n=>{await f.mutateAsync(n);},[f]),m=k.error??f.error,y=useMemo(()=>m!==null?u.fromUnknown(m):null,[m]);return {giftCards:e?.giftcards??[],apply:x,remove:E,isApplying:k.isPending,isRemoving:f.isPending,error:y,errorCode:y?.code??null}}function Te(){let e=U(m=>m.basketIdent),t=useRef(e);t.current=e;let o=U(m=>m.setBasketIdent),r=P(m=>m.username),l=useQueryClient(),k=B(),f=useMutation({scope:{id:"basket-mutations"},mutationFn:async m=>{if(r===null||r.length===0)throw new u("NOT_AUTHENTICATED","Username is required to gift a package");if(!N(m.targetUsername))throw new u("INVALID_USERNAME","Target username must be 3-16 alphanumeric characters");let y=m.quantity??1;if(!R(y))throw new u("INVALID_QUANTITY","Quantity must be a positive integer");let n=C(),a=U.getState().basketIdent;return a===null&&(a=(await n.createMinecraftBasket(r,k.completeUrl,k.cancelUrl)).ident,o(a)),await n.addPackageToBasket(a,m.packageId,y,"single",{gift_username:m.targetUsername}),n.getBasket(a)},onMutate:async m=>{let y=t.current;if(y===null)return;await l.cancelQueries({queryKey:i.basket(y)});let n=l.getQueryData(i.basket(y));if(n!==void 0){let a={id:m.packageId,name:"Loading...",description:"",image:null,in_basket:{quantity:m.quantity??1,price:0,gift_username_id:null,gift_username:m.targetUsername}};l.setQueryData(i.basket(y),{...n,packages:[...n.packages,a]});}return {previousBasket:n,ident:y}},onError:(m,y,n)=>{n?.previousBasket!==void 0&&l.setQueryData(i.basket(n.ident),n.previousBasket),k.onError?.(u.fromUnknown(m));},onSuccess:(m,y,n)=>{let a=n?.ident??t.current;a!==null&&l.setQueryData(i.basket(a),m);}}),x=useCallback(async m=>{await f.mutateAsync(m);},[f]),E=useMemo(()=>f.error!==null?u.fromUnknown(f.error):null,[f.error]);return {gift:x,isGifting:f.isPending,error:E,errorCode:E?.code??null}}function Ce(e){let{id:t,enabled:o=true}=e,r=useQuery({queryKey:i.package(t),queryFn:async()=>C().getPackage(t),enabled:o&&t>0&&Number.isInteger(t),staleTime:300*1e3}),l=useMemo(()=>r.error!==null?u.fromUnknown(r.error):null,[r.error]);return {package:r.data??null,data:r.data??null,isLoading:r.isLoading,isFetching:r.isFetching,error:l,errorCode:l?.code??null,refetch:r.refetch}}function Ee(e={}){let{categoryId:t,enabled:o=true}=e,r=useQuery({queryKey:i.packagesList(t),queryFn:async()=>{let E=C();if(t!==void 0)return (await E.getCategory(t)).packages;let m=await E.getCategories(true),y=[];for(let n of m)y.push(...n.packages);return y},enabled:o,staleTime:300*1e3}),l=useMemo(()=>r.error!==null?u.fromUnknown(r.error):null,[r.error]),k=useRef(r.data);k.current=r.data;let f=useCallback(E=>k.current?.find(m=>m.id===E),[]),x=useCallback(E=>k.current?.find(m=>m.name.toLowerCase()===E.toLowerCase()),[]);return {packages:r.data??null,data:r.data??null,isLoading:r.isLoading,isFetching:r.isFetching,error:l,errorCode:l?.code??null,refetch:r.refetch,getById:f,getByName:x}}function Be(){let e=P(f=>f.username),t=P(f=>f.setUsername),o=P(f=>f.clearUsername),r=useCallback(f=>{let x=f.trim();return N(x)?(t(x),true):false},[t]),l=useCallback(()=>{o();},[o]),k=e!==null&&e.length>0;return {username:e,setUsername:r,clearUsername:l,isAuthenticated:k}}function Ut(e){return typeof e=="object"&&e!==null&&"iso_4217"in e&&typeof e.iso_4217=="string"}function Bt(e){let t=e.currency,o;return Ut(t)?o=t.iso_4217:typeof t=="string"?o=t:o="USD",{id:e.id,name:e.name,description:e.description,currency:o,domain:e.webstore_url,logo:e.logo.length>0?e.logo:null}}function Pe(){let e=useQuery({queryKey:i.webstore(),queryFn:async()=>{let r=await C().getWebstore();return Bt(r)},staleTime:3e5}),t=useMemo(()=>e.error!==null?u.fromUnknown(e.error):null,[e.error]);return {webstore:e.data??null,data:e.data??null,name:e.data?.name??null,currency:e.data?.currency??null,domain:e.data?.domain??null,isLoading:e.isLoading,isFetching:e.isFetching,error:t,errorCode:t?.code??null,refetch:e.refetch}}function _e(e){return {success:true,data:e}}function we(e){return {success:false,error:e}}
3
- export{u as TebexError,V as TebexErrorCode,ee as TebexProvider,we as err,C as getTebexClient,se as isDefined,ne as isError,oe as isNonEmptyString,R as isPositiveInteger,ae as isPositiveNumber,re as isSuccess,j as isTebexClientInitialized,te as isTebexError,N as isValidMinecraftUsername,_e as ok,i as tebexKeys,_ as useBasket,U as useBasketStore,ie as useCategories,ue as useCategory,ce as useCheckout,de as useCoupons,ke as useCreatorCodes,be as useGiftCards,Te as useGiftPackage,Ce as usePackage,Ee as usePackages,B as useTebexConfig,K as useTebexContext,Be as useUser,P as useUserStore,Pe as useWebstore};//# sourceMappingURL=index.js.map
2
+ import {QueryClient,QueryClientProvider,useQueryClient,useQuery,useMutation}from'@tanstack/react-query';import {createContext,useContext,useMemo,useState,useCallback,useEffect,useRef}from'react';import {TebexHeadless}from'tebex_headless';import {create}from'zustand';import {subscribeWithSelector,persist,createJSONStorage}from'zustand/middleware';import {jsx}from'react/jsx-runtime';var S=(b=>(b.PROVIDER_NOT_FOUND="PROVIDER_NOT_FOUND",b.INVALID_CONFIG="INVALID_CONFIG",b.NOT_AUTHENTICATED="NOT_AUTHENTICATED",b.INVALID_USERNAME="INVALID_USERNAME",b.BASKET_NOT_FOUND="BASKET_NOT_FOUND",b.BASKET_CREATION_FAILED="BASKET_CREATION_FAILED",b.BASKET_EXPIRED="BASKET_EXPIRED",b.BASKET_EMPTY="BASKET_EMPTY",b.PACKAGE_NOT_FOUND="PACKAGE_NOT_FOUND",b.PACKAGE_OUT_OF_STOCK="PACKAGE_OUT_OF_STOCK",b.PACKAGE_ALREADY_OWNED="PACKAGE_ALREADY_OWNED",b.INVALID_QUANTITY="INVALID_QUANTITY",b.CATEGORY_NOT_FOUND="CATEGORY_NOT_FOUND",b.COUPON_INVALID="COUPON_INVALID",b.COUPON_EXPIRED="COUPON_EXPIRED",b.COUPON_ALREADY_USED="COUPON_ALREADY_USED",b.GIFTCARD_INVALID="GIFTCARD_INVALID",b.GIFTCARD_INSUFFICIENT_BALANCE="GIFTCARD_INSUFFICIENT_BALANCE",b.CREATOR_CODE_INVALID="CREATOR_CODE_INVALID",b.CHECKOUT_FAILED="CHECKOUT_FAILED",b.CHECKOUT_CANCELLED="CHECKOUT_CANCELLED",b.TEBEX_JS_NOT_LOADED="TEBEX_JS_NOT_LOADED",b.NETWORK_ERROR="NETWORK_ERROR",b.TIMEOUT="TIMEOUT",b.RATE_LIMITED="RATE_LIMITED",b.SERVER_ERROR="SERVER_ERROR",b.FORBIDDEN="FORBIDDEN",b.VALIDATION_ERROR="VALIDATION_ERROR",b.NOT_FOUND="NOT_FOUND",b.BASKET_LOCKED="BASKET_LOCKED",b.PACKAGE_DISABLED="PACKAGE_DISABLED",b.UNKNOWN="UNKNOWN",b))(S||{});var c=class e extends Error{code;cause;constructor(t,n,r){super(n??t),Object.setPrototypeOf(this,e.prototype),this.name="TebexError",this.code=t,this.cause=r,typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,e);}static extractStatusCode(t){if(typeof t=="object"&&t!==null){if("response"in t){let n=t.response;if(n&&typeof n.status=="number")return n.status}if("status"in t&&typeof t.status=="number")return t.status}return null}static fromUnknown(t){if(t instanceof e)return t;let n=t instanceof Error?t.message:String(t),r=e.extractStatusCode(t);if(r!==null)switch(r){case 400:return new e("VALIDATION_ERROR",n,t);case 401:case 403:return new e("FORBIDDEN",n,t);case 404:{let i=n.toLowerCase();return i.includes("basket")?new e("BASKET_NOT_FOUND",n,t):i.includes("package")?new e("PACKAGE_NOT_FOUND",n,t):i.includes("category")?new e("CATEGORY_NOT_FOUND",n,t):new e("NOT_FOUND",n,t)}case 408:return new e("TIMEOUT",n,t);case 409:return new e("BASKET_LOCKED",n,t);case 410:return new e("BASKET_EXPIRED",n,t);case 422:{let i=n.toLowerCase();return i.includes("coupon")&&i.includes("already")?new e("COUPON_ALREADY_USED",n,t):i.includes("coupon")&&i.includes("invalid")?new e("COUPON_INVALID",n,t):i.includes("coupon")&&i.includes("expired")?new e("COUPON_EXPIRED",n,t):i.includes("gift")&&i.includes("invalid")?new e("GIFTCARD_INVALID",n,t):i.includes("gift")&&i.includes("balance")?new e("GIFTCARD_INSUFFICIENT_BALANCE",n,t):i.includes("creator")&&i.includes("invalid")?new e("CREATOR_CODE_INVALID",n,t):i.includes("locked")||i.includes("lock")?new e("BASKET_LOCKED",n,t):i.includes("disabled")?new e("PACKAGE_DISABLED",n,t):i.includes("out of stock")||i.includes("stock")?new e("PACKAGE_OUT_OF_STOCK",n,t):i.includes("already own")?new e("PACKAGE_ALREADY_OWNED",n,t):new e("VALIDATION_ERROR",n,t)}case 423:return new e("BASKET_LOCKED",n,t);case 429:return new e("RATE_LIMITED",n,t);case 500:case 502:case 503:return new e("SERVER_ERROR",n,t);case 504:return new e("TIMEOUT",n,t)}if(t instanceof Error){if(t.name==="AbortError")return new e("TIMEOUT",n,t);if("code"in t){let m=t.code;if(typeof m=="string"){if(m==="ERR_NETWORK"||m==="ERR_FR_TOO_MANY_REDIRECTS")return new e("NETWORK_ERROR",n,t);if(m==="ECONNABORTED"||m==="ERR_CANCELED")return new e("TIMEOUT",n,t)}}let i=n.toLowerCase();return i.includes("network")||i.includes("fetch")||i.includes("load failed")||i.includes("enotfound")||i.includes("econnreset")||i.includes("econnrefused")||i.includes("econnaborted")||i.includes("err_network")?new e("NETWORK_ERROR",n,t):i.includes("timeout")||i.includes("etimedout")?new e("TIMEOUT",n,t):i.includes("rate limit")||i.includes("429")?new e("RATE_LIMITED",n,t):i.includes("basket")&&i.includes("not found")?new e("BASKET_NOT_FOUND",n,t):i.includes("package")&&i.includes("not found")?new e("PACKAGE_NOT_FOUND",n,t):i.includes("coupon")&&i.includes("invalid")?new e("COUPON_INVALID",n,t):i.includes("coupon")&&i.includes("expired")?new e("COUPON_EXPIRED",n,t):i.includes("gift")&&i.includes("invalid")?new e("GIFTCARD_INVALID",n,t):new e("UNKNOWN",n,t)}return new e("UNKNOWN",n)}static fromJSON(t){let r=Object.values(S).includes(t.code)?t.code:"UNKNOWN";return new e(r,t.message??t.code)}toJSON(){return {name:this.name,code:this.code,message:this.message,...this.cause instanceof Error?{cause:this.cause.message}:{}}}};var M=null;function H(e){let t=e.trim();if(t.length===0)throw new c("INVALID_CONFIG","publicKey must be a non-empty string");M=new TebexHeadless(t);}function T(){if(M===null)throw new c("PROVIDER_NOT_FOUND","Tebex client not initialized. Ensure TebexProvider wraps your component tree.");return M}function $(){return M!==null}var U=create()(subscribeWithSelector(persist(e=>({basketIdent:null,setBasketIdent:t=>{e({basketIdent:t});},clearBasketIdent:()=>{e({basketIdent:null});}}),{name:"tebex-basket-store",storage:createJSONStorage(()=>typeof window<"u"?window.localStorage:{getItem:()=>null,setItem:()=>{},removeItem:()=>{}}),skipHydration:true,version:1,partialize:e=>({basketIdent:e.basketIdent}),migrate:e=>{if(typeof e=="object"&&e!==null&&"basketIdent"in e){let t=e;return {basketIdent:typeof t.basketIdent=="string"?t.basketIdent:null}}return {basketIdent:null}},onRehydrateStorage:()=>(e,t)=>{t!==void 0&&console.warn("[tebex] Failed to rehydrate basket store:",t);}})));var O=create()(subscribeWithSelector(persist(e=>({username:null,setUsername:t=>{e({username:t});},clearUsername:()=>{e({username:null}),U.getState().clearBasketIdent();}}),{name:"tebex-user-store",storage:createJSONStorage(()=>typeof window<"u"?window.localStorage:{getItem:()=>null,setItem:()=>{},removeItem:()=>{}}),skipHydration:true,version:1,partialize:e=>({username:e.username}),migrate:e=>{if(typeof e=="object"&&e!==null&&"username"in e){let t=e;return {username:typeof t.username=="string"?t.username:null}}return {username:null}},onRehydrateStorage:()=>(e,t)=>{t!==void 0&&console.warn("[tebex] Failed to rehydrate user store:",t);}})));var Y=createContext(null);function F(){let e=useContext(Y);if(e===null)throw new c("PROVIDER_NOT_FOUND","useTebexContext must be used within TebexProvider or TebexMockProvider");return e}function I(){let{config:e}=F();return e}function X(){let{isHydrated:e}=F();return e}var Ve={defaultOptions:{queries:{staleTime:60*1e3,gcTime:300*1e3,retry:3,retryDelay:e=>Math.min(1e3*2**e,3e4),refetchOnWindowFocus:false,refetchOnReconnect:true},mutations:{retry:false}}};function We(e){if(typeof e.publicKey!="string"||e.publicKey.trim().length===0)throw new c("INVALID_CONFIG","publicKey must be a non-empty string");if(typeof e.baseUrl!="string"||e.baseUrl.trim().length===0)throw new c("INVALID_CONFIG","baseUrl must be a non-empty string");let t=e.baseUrl.replace(/\/$/,""),n=e.urls?.complete??"/shop/complete",r=e.urls?.cancel??"/shop/cancel";return {publicKey:e.publicKey,baseUrl:t,completeUrl:`${t}${n}`,cancelUrl:`${t}${r}`,onError:e.onError}}function ne({children:e,config:t,queryClient:n}){let r=useMemo(()=>We(t),[t]),[i]=useState(()=>n??new QueryClient(Ve));useState(()=>{H(r.publicKey);});let[m,p]=useState(()=>U.persist.hasHydrated()&&O.persist.hasHydrated()),x=useCallback(()=>{U.persist.hasHydrated()&&O.persist.hasHydrated()&&p(true);},[]);useEffect(()=>{if(m)return;let f=U.persist.onFinishHydration(x),g=O.persist.onFinishHydration(x);return U.persist.rehydrate(),O.persist.rehydrate(),x(),()=>{f(),g();}},[m,x]),useEffect(()=>{let f=g=>{(g.key==="tebex-basket-store"||g.key==="tebex-user-store")&&(U.persist.rehydrate(),O.persist.rehydrate());};return window.addEventListener("storage",f),()=>{window.removeEventListener("storage",f);}},[]);let y=useMemo(()=>({config:r,queryClient:i,isHydrated:m}),[r,i,m]);return jsx(Y.Provider,{value:y,children:jsx(QueryClientProvider,{client:i,children:e})})}var u={all:["tebex"],categories:()=>[...u.all,"categories"],categoriesList:e=>[...u.categories(),"list",{includePackages:e}],category:e=>[...u.categories(),"detail",e],packages:()=>[...u.all,"packages"],packagesList:e=>[...u.packages(),"list",{categoryId:e}],package:e=>[...u.packages(),"detail",e],baskets:()=>[...u.all,"baskets"],basket:e=>[...u.baskets(),e],webstore:()=>[...u.all,"webstore"]};function re(e){if(e instanceof c)return true;if(typeof e=="object"&&e!==null&&"name"in e&&"code"in e&&e.name==="TebexError"){let t=e.code;return typeof t=="string"&&Object.values(S).includes(t)}return false}function se(e){return e.success}function oe(e){return !e.success}function ae(e){return e!=null}function B(e){return typeof e=="string"&&e.length>0}function ie(e){return typeof e=="number"&&e>0&&Number.isFinite(e)}function N(e){return typeof e=="number"&&Number.isInteger(e)&&e>0}function h(e){return typeof e!="string"?false:/^[a-zA-Z0-9_]{3,16}$/.test(e)}var Q=null;function _(){let e=I(),t=useQueryClient(),n=U(l=>l.basketIdent),r=U(l=>l.setBasketIdent),i=U(l=>l.clearBasketIdent),m=useRef(n);m.current=n;let p=useQuery({queryKey:u.basket(n),queryFn:async()=>n===null?null:T().getBasket(n),enabled:n!==null,retry:(l,k)=>{let d=c.fromUnknown(k);return d.code==="BASKET_NOT_FOUND"||d.code==="BASKET_EXPIRED"?false:l<3}});useEffect(()=>{if(p.error!==null){let l=c.fromUnknown(p.error);(l.code==="BASKET_NOT_FOUND"||l.code==="BASKET_EXPIRED")&&(i(),t.removeQueries({queryKey:u.baskets()}));}},[p.error,i,t]);let x=useCallback(async()=>{let l=U.getState().basketIdent;return l!==null?l:(Q!==null||(Q=(async()=>{let d=O.getState().username;if(d===null||d.length===0)throw new c("NOT_AUTHENTICATED","Username is required to create a basket");let w=await T().createMinecraftBasket(d,e.completeUrl,e.cancelUrl);return r(w.ident),w.ident})().finally(()=>{Q=null;})),Q)},[e.completeUrl,e.cancelUrl,r]),y=useMutation({scope:{id:"basket-mutations"},mutationFn:async l=>{let k=l.quantity??1;if(!N(k))throw new c("INVALID_QUANTITY","Quantity must be a positive integer");let d=async w=>{let A=T();return await A.addPackageToBasket(w,l.packageId,k,l.type,l.variableData),A.getBasket(w)},C=await x();try{return await d(C)}catch(w){let A=c.fromUnknown(w);if(A.code==="BASKET_NOT_FOUND"||A.code==="BASKET_EXPIRED"){i();let P=await x();return d(P)}throw w}},onMutate:async l=>{let k=m.current;if(k===null)return {previousBasket:void 0,ident:k};await t.cancelQueries({queryKey:u.basket(k)});let d=t.getQueryData(u.basket(k));if(d!=null){let C={id:l.packageId,name:"Loading...",description:"",image:null,in_basket:{quantity:l.quantity??1,price:0,gift_username_id:null,gift_username:null}},w=d.packages.findIndex(P=>P.id===l.packageId),A=w>=0?d.packages.map((P,Re)=>Re===w?{...P,in_basket:{...P.in_basket,quantity:P.in_basket.quantity+(l.quantity??1)}}:P):[...d.packages,C];t.setQueryData(u.basket(k),{...d,packages:A});}return {previousBasket:d,ident:k}},onError:(l,k,d)=>{d?.previousBasket!==void 0&&d.ident!==null&&t.setQueryData(u.basket(d.ident),d.previousBasket),e.onError?.(c.fromUnknown(l));},onSuccess:(l,k,d)=>{let C=d.ident??m.current;C!==null&&t.setQueryData(u.basket(C),l);}}),f=useMutation({scope:{id:"basket-mutations"},mutationFn:async l=>{let k=U.getState().basketIdent;if(k===null)throw new c("BASKET_NOT_FOUND");let d=T();return await d.removePackage(k,l),d.getBasket(k)},onMutate:async l=>{let k=m.current;if(k===null)return {previousBasket:void 0,ident:k};await t.cancelQueries({queryKey:u.basket(k)});let d=t.getQueryData(u.basket(k));return d!=null&&t.setQueryData(u.basket(k),{...d,packages:d.packages.filter(C=>C.id!==l)}),{previousBasket:d,ident:k}},onError:(l,k,d)=>{d?.previousBasket!==void 0&&d.ident!==null&&t.setQueryData(u.basket(d.ident),d.previousBasket),e.onError?.(c.fromUnknown(l));},onSuccess:(l,k,d)=>{let C=d.ident??m.current;C!==null&&t.setQueryData(u.basket(C),l);}}),g=useMutation({scope:{id:"basket-mutations"},mutationFn:async l=>{if(!N(l.quantity))throw new c("INVALID_QUANTITY","Quantity must be a positive integer");let k=U.getState().basketIdent;if(k===null)throw new c("BASKET_NOT_FOUND");let d=T();return await d.updateQuantity(k,l.packageId,l.quantity),d.getBasket(k)},onMutate:async l=>{let k=m.current;if(k===null)return {previousBasket:void 0,ident:k};await t.cancelQueries({queryKey:u.basket(k)});let d=t.getQueryData(u.basket(k));return d!=null&&t.setQueryData(u.basket(k),{...d,packages:d.packages.map(C=>C.id===l.packageId?{...C,in_basket:{...C.in_basket,quantity:l.quantity}}:C)}),{previousBasket:d,ident:k}},onError:(l,k,d)=>{d?.previousBasket!==void 0&&d.ident!==null&&t.setQueryData(u.basket(d.ident),d.previousBasket),e.onError?.(c.fromUnknown(l));},onSuccess:(l,k,d)=>{let C=d.ident??m.current;C!==null&&t.setQueryData(u.basket(C),l);}}),s=useCallback(()=>{i(),t.removeQueries({queryKey:u.baskets()});},[i,t]),a=p.data??null,o=useMemo(()=>a?.packages??[],[a?.packages]),E=useMemo(()=>o.reduce((l,k)=>l+k.in_basket.quantity,0),[o]),V=useMemo(()=>a?.total_price??0,[a?.total_price]),v=p.error??y.error??f.error??g.error,K=useMemo(()=>v!==null?c.fromUnknown(v):null,[v]),D=useCallback(async l=>{await y.mutateAsync(l);},[y]),R=useCallback(async l=>{await f.mutateAsync(l);},[f]),W=useCallback(async l=>{await g.mutateAsync(l);},[g]);return {basket:a,data:a,basketIdent:n,packages:o,isLoading:p.isLoading,isFetching:p.isFetching,isAddingPackage:y.isPending,isRemovingPackage:f.isPending,isUpdatingQuantity:g.isPending,error:K,errorCode:K?.code??null,addPackage:D,removePackage:R,updateQuantity:W,clearBasket:s,refetch:p.refetch,itemCount:E,total:V,isEmpty:o.length===0}}function ue(e={}){let{includePackages:t=true,enabled:n=true}=e,r=useQuery({queryKey:u.categoriesList(t),queryFn:async()=>T().getCategories(t),enabled:n,staleTime:300*1e3}),i=useMemo(()=>r.error!==null?c.fromUnknown(r.error):null,[r.error]),m=useRef(r.data);m.current=r.data;let p=useCallback(f=>m.current?.find(g=>g.name.toLowerCase()===f.toLowerCase()),[]),x=useCallback(f=>m.current?.find(g=>g.id===f),[]),y=useCallback(f=>m.current?.find(g=>g.slug===f),[]);return {categories:r.data??null,data:r.data??null,isLoading:r.isLoading,isFetching:r.isFetching,error:i,errorCode:i?.code??null,refetch:r.refetch,getByName:p,getById:x,getBySlug:y}}function ce(e){let{id:t,enabled:n=true}=e,r=useQuery({queryKey:u.category(t),queryFn:async()=>T().getCategory(t),enabled:n&&t>0&&Number.isInteger(t),staleTime:300*1e3}),i=useMemo(()=>r.error!==null?c.fromUnknown(r.error):null,[r.error]);return {category:r.data??null,data:r.data??null,isLoading:r.isLoading,isFetching:r.isFetching,error:i,errorCode:i?.code??null,refetch:r.refetch}}var st=1800*1e3,G=0;function le(e={}){let{basket:t,basketIdent:n,clearBasket:r,isEmpty:i}=_(),m=I(),p=useMutation({scope:{id:"basket-mutations"},retry:false,mutationFn:async()=>{if(n===null||t===null)throw new c("BASKET_NOT_FOUND");if(i)throw new c("BASKET_EMPTY","Basket is empty");if(typeof window>"u")throw new c("TEBEX_JS_NOT_LOADED","Cannot checkout on server side.");let f=window.Tebex;if(f===void 0)throw new c("TEBEX_JS_NOT_LOADED",'Tebex.js not loaded. Add <script src="https://js.tebex.io/v/1.9.0.js"></script> to your page.');return new Promise((g,s)=>{let a=f.checkout,o=false,E=++G,V=()=>{E!==G||o||(o=true,l(),r(),e.onSuccess?.(),g());},v=C=>{if(E!==G||o)return;o=true,l();let w=new c("CHECKOUT_FAILED",String(C));e.onError?.(w),m.onError?.(w),s(w);},K=()=>{E!==G||o||(o=true,l(),e.onClose?.(),g());},D=null,R=null,W=setTimeout(()=>{if(!o){o=true,l();let C=new c("TIMEOUT","Checkout session timed out");e.onError?.(C),m.onError?.(C),s(C);}},st),l=()=>{clearTimeout(W),D!==null&&(D.disconnect(),D=null),R!==null&&(clearTimeout(R),R=null);},k=()=>document.querySelector('iframe[src*="tebex"]')??document.querySelector('[class*="tebex-js"]')??document.querySelector("tebex-checkout[open]"),d=()=>{let C=false,w=()=>{if(o)return;k()!==null?C=true:C&&K();};D=new MutationObserver(()=>{o||(R!==null&&clearTimeout(R),R=setTimeout(w,50));}),D.observe(document.body,{childList:true,subtree:true,attributes:true,attributeFilter:["open","style","class"]}),k()!==null&&(C=true);};a.init({ident:n}),a.on("payment:complete",V),a.on("payment:error",v),a.on("close",K),a.launch(),d();})}}),x=useCallback(async()=>{await p.mutateAsync();},[p]),y=useMemo(()=>p.error!==null?c.fromUnknown(p.error):null,[p.error]);return {launch:x,isLaunching:p.isPending,error:y,errorCode:y?.code??null,canCheckout:t!==null&&!i&&!p.isPending,checkoutUrl:t?.links.checkout??null}}function fe(){let{basket:e}=_(),t=U(s=>s.basketIdent),n=useRef(t);n.current=t;let r=useQueryClient(),i=I(),m=useMutation({scope:{id:"basket-mutations"},mutationFn:async s=>{if(!B(s.trim()))throw new c("COUPON_INVALID","Coupon code must be a non-empty string");let a=n.current;if(a===null)throw new c("BASKET_NOT_FOUND");let o=T();return await o.apply(a,"coupons",{coupon_code:s}),o.getBasket(a)},onMutate:async s=>{let a=n.current;if(a===null)return;await r.cancelQueries({queryKey:u.basket(a)});let o=r.getQueryData(u.basket(a));return o!==void 0&&r.setQueryData(u.basket(a),{...o,coupons:[...o.coupons,{code:s}]}),{previousBasket:o,ident:a}},onError:(s,a,o)=>{o?.previousBasket!==void 0&&r.setQueryData(u.basket(o.ident),o.previousBasket),i.onError?.(c.fromUnknown(s));},onSuccess:(s,a,o)=>{let E=o?.ident??n.current;E!==null&&r.setQueryData(u.basket(E),s);}}),p=useMutation({scope:{id:"basket-mutations"},mutationFn:async s=>{if(!B(s.trim()))throw new c("COUPON_INVALID","Coupon code must be a non-empty string");let a=n.current;if(a===null)throw new c("BASKET_NOT_FOUND");let o=T();return await o.remove(a,"coupons",{coupon_code:s}),o.getBasket(a)},onMutate:async s=>{let a=n.current;if(a===null)return;await r.cancelQueries({queryKey:u.basket(a)});let o=r.getQueryData(u.basket(a));return o!==void 0&&r.setQueryData(u.basket(a),{...o,coupons:o.coupons.filter(E=>E.code!==s)}),{previousBasket:o,ident:a}},onError:(s,a,o)=>{o?.previousBasket!==void 0&&r.setQueryData(u.basket(o.ident),o.previousBasket),i.onError?.(c.fromUnknown(s));},onSuccess:(s,a,o)=>{let E=o?.ident??n.current;E!==null&&r.setQueryData(u.basket(E),s);}}),x=useCallback(async s=>{await m.mutateAsync(s);},[m]),y=useCallback(async s=>{await p.mutateAsync(s);},[p]),f=m.error??p.error,g=useMemo(()=>f!==null?c.fromUnknown(f):null,[f]);return {coupons:e?.coupons??[],apply:x,remove:y,isApplying:m.isPending,isRemoving:p.isPending,error:g,errorCode:g?.code??null}}function ye(){let{basket:e}=_(),t=U(s=>s.basketIdent),n=useRef(t);n.current=t;let r=useQueryClient(),i=I(),m=useMutation({scope:{id:"basket-mutations"},mutationFn:async s=>{if(!B(s.trim()))throw new c("CREATOR_CODE_INVALID","Creator code must be a non-empty string");let a=n.current;if(a===null)throw new c("BASKET_NOT_FOUND");let o=T();return await o.apply(a,"creator-codes",{creator_code:s}),o.getBasket(a)},onMutate:async s=>{let a=n.current;if(a===null)return;await r.cancelQueries({queryKey:u.basket(a)});let o=r.getQueryData(u.basket(a));return o!==void 0&&r.setQueryData(u.basket(a),{...o,creator_code:s}),{previousBasket:o,ident:a}},onError:(s,a,o)=>{o?.previousBasket!==void 0&&r.setQueryData(u.basket(o.ident),o.previousBasket),i.onError?.(c.fromUnknown(s));},onSuccess:(s,a,o)=>{let E=o?.ident??n.current;E!==null&&r.setQueryData(u.basket(E),s);}}),p=useMutation({scope:{id:"basket-mutations"},mutationFn:async()=>{let s=n.current;if(s===null)throw new c("BASKET_NOT_FOUND");let a=T();return await a.remove(s,"creator-codes",{creator_code:""}),a.getBasket(s)},onMutate:async()=>{let s=n.current;if(s===null)return;await r.cancelQueries({queryKey:u.basket(s)});let a=r.getQueryData(u.basket(s));return a!==void 0&&r.setQueryData(u.basket(s),{...a,creator_code:""}),{previousBasket:a,ident:s}},onError:(s,a,o)=>{o?.previousBasket!==void 0&&r.setQueryData(u.basket(o.ident),o.previousBasket),i.onError?.(c.fromUnknown(s));},onSuccess:(s,a,o)=>{let E=o?.ident??n.current;E!==null&&r.setQueryData(u.basket(E),s);}}),x=useCallback(async s=>{await m.mutateAsync(s);},[m]),y=useCallback(async()=>{await p.mutateAsync();},[p]),f=m.error??p.error,g=useMemo(()=>f!==null?c.fromUnknown(f):null,[f]);return {creatorCode:e?.creator_code??null,apply:x,remove:y,isApplying:m.isPending,isRemoving:p.isPending,error:g,errorCode:g?.code??null}}function Ce(){let{basket:e}=_(),t=U(s=>s.basketIdent),n=useRef(t);n.current=t;let r=useQueryClient(),i=I(),m=useMutation({scope:{id:"basket-mutations"},mutationFn:async s=>{if(!B(s.trim()))throw new c("GIFTCARD_INVALID","Gift card number must be a non-empty string");let a=n.current;if(a===null)throw new c("BASKET_NOT_FOUND");let o=T();return await o.apply(a,"giftcards",{card_number:s}),o.getBasket(a)},onMutate:async s=>{let a=n.current;if(a===null)return;await r.cancelQueries({queryKey:u.basket(a)});let o=r.getQueryData(u.basket(a));return o!==void 0&&r.setQueryData(u.basket(a),{...o,giftcards:[...o.giftcards,{card_number:s}]}),{previousBasket:o,ident:a}},onError:(s,a,o)=>{o?.previousBasket!==void 0&&r.setQueryData(u.basket(o.ident),o.previousBasket),i.onError?.(c.fromUnknown(s));},onSuccess:(s,a,o)=>{let E=o?.ident??n.current;E!==null&&r.setQueryData(u.basket(E),s);}}),p=useMutation({scope:{id:"basket-mutations"},mutationFn:async s=>{if(!B(s.trim()))throw new c("GIFTCARD_INVALID","Gift card number must be a non-empty string");let a=n.current;if(a===null)throw new c("BASKET_NOT_FOUND");let o=T();return await o.remove(a,"giftcards",{card_number:s}),o.getBasket(a)},onMutate:async s=>{let a=n.current;if(a===null)return;await r.cancelQueries({queryKey:u.basket(a)});let o=r.getQueryData(u.basket(a));return o!==void 0&&r.setQueryData(u.basket(a),{...o,giftcards:o.giftcards.filter(E=>E.card_number!==s)}),{previousBasket:o,ident:a}},onError:(s,a,o)=>{o?.previousBasket!==void 0&&r.setQueryData(u.basket(o.ident),o.previousBasket),i.onError?.(c.fromUnknown(s));},onSuccess:(s,a,o)=>{let E=o?.ident??n.current;E!==null&&r.setQueryData(u.basket(E),s);}}),x=useCallback(async s=>{await m.mutateAsync(s);},[m]),y=useCallback(async s=>{await p.mutateAsync(s);},[p]),f=m.error??p.error,g=useMemo(()=>f!==null?c.fromUnknown(f):null,[f]);return {giftCards:e?.giftcards??[],apply:x,remove:y,isApplying:m.isPending,isRemoving:p.isPending,error:g,errorCode:g?.code??null}}function Te(){let e=U(y=>y.basketIdent),t=useRef(e);t.current=e;let n=U(y=>y.setBasketIdent),r=useQueryClient(),i=I(),m=useMutation({scope:{id:"basket-mutations"},mutationFn:async y=>{let f=O.getState().username;if(f===null||f.length===0)throw new c("NOT_AUTHENTICATED","Username is required to gift a package");if(!h(y.targetUsername))throw new c("INVALID_USERNAME","Target username must be 3-16 alphanumeric characters");let g=y.quantity??1;if(!N(g))throw new c("INVALID_QUANTITY","Quantity must be a positive integer");if(!N(y.packageId))throw new c("PACKAGE_NOT_FOUND","Package ID must be a positive integer");let s=T(),a=U.getState().basketIdent;return a===null&&(a=(await s.createMinecraftBasket(f,i.completeUrl,i.cancelUrl)).ident,n(a)),await s.addPackageToBasket(a,y.packageId,g,"single",{gift_username:y.targetUsername}),s.getBasket(a)},onMutate:async y=>{let f=t.current;if(f===null)return;await r.cancelQueries({queryKey:u.basket(f)});let g=r.getQueryData(u.basket(f));if(g!==void 0){let s={id:y.packageId,name:"Loading...",description:"",image:null,in_basket:{quantity:y.quantity??1,price:0,gift_username_id:null,gift_username:y.targetUsername}};r.setQueryData(u.basket(f),{...g,packages:[...g.packages,s]});}return {previousBasket:g,ident:f}},onError:(y,f,g)=>{g?.previousBasket!==void 0&&r.setQueryData(u.basket(g.ident),g.previousBasket),i.onError?.(c.fromUnknown(y));},onSuccess:(y,f,g)=>{let s=g?.ident??t.current;s!==null&&r.setQueryData(u.basket(s),y);}}),p=useCallback(async y=>{await m.mutateAsync(y);},[m]),x=useMemo(()=>m.error!==null?c.fromUnknown(m.error):null,[m.error]);return {gift:p,isGifting:m.isPending,error:x,errorCode:x?.code??null}}function Ee(e){let{id:t,enabled:n=true}=e,r=useQuery({queryKey:u.package(t),queryFn:async()=>T().getPackage(t),enabled:n&&t>0&&Number.isInteger(t),staleTime:300*1e3}),i=useMemo(()=>r.error!==null?c.fromUnknown(r.error):null,[r.error]);return {package:r.data??null,data:r.data??null,isLoading:r.isLoading,isFetching:r.isFetching,error:i,errorCode:i?.code??null,refetch:r.refetch}}function xe(e={}){let{categoryId:t,enabled:n=true}=e,r=useQuery({queryKey:u.packagesList(t),queryFn:async()=>{let y=T();if(t!==void 0)return (await y.getCategory(t)).packages;let f=await y.getCategories(true),g=[];for(let s of f)g.push(...s.packages);return g},enabled:n,staleTime:300*1e3}),i=useMemo(()=>r.error!==null?c.fromUnknown(r.error):null,[r.error]),m=useRef(r.data);m.current=r.data;let p=useCallback(y=>m.current?.find(f=>f.id===y),[]),x=useCallback(y=>m.current?.find(f=>f.name.toLowerCase()===y.toLowerCase()),[]);return {packages:r.data??null,data:r.data??null,isLoading:r.isLoading,isFetching:r.isFetching,error:i,errorCode:i?.code??null,refetch:r.refetch,getById:p,getByName:x}}function Oe(){let e=O(p=>p.username),t=O(p=>p.setUsername),n=O(p=>p.clearUsername),r=useCallback(p=>{let x=p.trim();return h(x)?(t(x),true):false},[t]),i=useCallback(()=>{n();},[n]),m=e!==null&&e.length>0;return {username:e,setUsername:r,clearUsername:i,isAuthenticated:m}}function It(e){return typeof e=="object"&&e!==null&&"iso_4217"in e&&typeof e.iso_4217=="string"}function Bt(e){let t=e.currency,n;return It(t)?n=t.iso_4217:typeof t=="string"?n=t:n="USD",{id:e.id,name:e.name,description:e.description,currency:n,domain:e.webstore_url,logo:typeof e.logo=="string"&&e.logo.length>0?e.logo:null}}function Ie(){let e=useQuery({queryKey:u.webstore(),queryFn:async()=>{let r=await T().getWebstore();return Bt(r)},staleTime:3e5}),t=useMemo(()=>e.error!==null?c.fromUnknown(e.error):null,[e.error]);return {webstore:e.data??null,data:e.data??null,name:e.data?.name??null,currency:e.data?.currency??null,domain:e.data?.domain??null,isLoading:e.isLoading,isFetching:e.isFetching,error:t,errorCode:t?.code??null,refetch:e.refetch}}function Be(e){return {success:true,data:e}}function _e(e){return {success:false,error:e}}
3
+ export{c as TebexError,S as TebexErrorCode,ne as TebexProvider,_e as err,T as getTebexClient,ae as isDefined,oe as isError,B as isNonEmptyString,N as isPositiveInteger,ie as isPositiveNumber,se as isSuccess,$ as isTebexClientInitialized,re as isTebexError,h as isValidMinecraftUsername,Be as ok,u as tebexKeys,_ as useBasket,U as useBasketStore,ue as useCategories,ce as useCategory,le as useCheckout,fe as useCoupons,ye as useCreatorCodes,Ce as useGiftCards,Te as useGiftPackage,Ee as usePackage,xe as usePackages,I as useTebexConfig,F as useTebexContext,X as useTebexHydrated,Oe as useUser,O as useUserStore,Ie as useWebstore};//# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map