@dojoengine/sdk
Version:
Dojo SDK: Build onchain and provable apps faster
2 lines • 6.42 kB
JavaScript
import{useEffect as v,useMemo as B}from"react";import{useAccount as H,useProvider as I}from"@starknet-start/react";import{WalletAccountV5 as N}from"starknet";import{jsx as S}from"react/jsx-runtime";function X(e,o=()=>S("div",{children:"Please connect your wallet"})){return n=>{let{address:r,connector:s}=H(),{paymasterProvider:t,provider:a}=I(),i=B(()=>r&&s?new N({address:r,paymaster:t,provider:a,walletProvider:s}):void 0,[r,s,t,a]);if(v(()=>()=>i?.unsubscribeChange(),[i]),!r||!i)return o?S(o,{}):null;let c={...n,account:i,address:r};return S(e,{...c})}}import{getEntityIdFromKeys as W}from"@dojoengine/utils";import{useContext as F,useMemo as V}from"react";import{DojoProvider as w}from"@dojoengine/core";import{createContext as R,useContext as U}from"react";import{useContext as T}from"react";import{create as Q}from"zustand";import{createDojoStoreFactory as A}from"@dojoengine/state/zustand";function k(){return A(Q)}function ne(e,o){let[n,r]=o.split("-"),{useDojoStore:s}=T(u);return s(a=>a.entities[e.toString()]?.models?.[n]?.[r])}function se(e,o){let[n,r]=o.split("-"),{useDojoStore:s}=T(u);return s(a=>{let i=a.historical_entities[e.toString()];return i?i.filter(c=>c.models[n][r]!==void 0):[]})}function ie(e){let[o,n]=e.split("-"),{useDojoStore:r}=T(u);return r(t=>t.getEntitiesByModel(o,n).map(a=>({[a.entityId]:a.models?.[o]?.[n]})))}import{jsx as K}from"react/jsx-runtime";var u=R(void 0);function de({dojoConfig:e,sdk:o,clientFn:n,children:r}){if(U(u))throw new Error("DojoProvider can only be used once");let t=new w(e.manifest,e.rpcUrl);return K(u.Provider,{value:{config:e,client:n(t),sdk:o,provider:t,useDojoStore:k()},children:r})}import{useCallback as _,useEffect as G,useRef as b}from"react";function m(e,o){if(e===o)return!0;if(e===null||o===null||typeof e!="object"||typeof o!="object")return!1;if(Array.isArray(e)&&Array.isArray(o)){if(e.length!==o.length)return!1;for(let s=0;s<e.length;s++)if(!m(e[s],o[s]))return!1;return!0}if(e instanceof Date&&o instanceof Date)return e.getTime()===o.getTime();if(e instanceof RegExp&&o instanceof RegExp)return e.toString()===o.toString();let n=Object.keys(e),r=Object.keys(o);return n.length!==r.length?!1:n.every(s=>Object.hasOwn(o,s)&&m(e[s],o[s]))}function g(e){return new Promise(o=>setTimeout(o,e))}function l(e){return function(n){let r=b(null),s=b(null),t=b(!1),a=_(async()=>{for(;t.current;)await g(50);if(t.current=!0,r.current)return await e.updateSubscriptionMethod(r.current,e.queryToHashedKeysMethod(s.current,e.historical),e.historical),null;let[i,c]=await e.subscribeMethod({query:s.current,callback:({data:f,error:h})=>{f&&e.processUpdateData(f),h&&(console.error(`${e.getErrorPrefix()} - error subscribing with query: `,n.toString()),console.error(h))},historical:e.historical});return e.processInitialData(i.getItems()),c},[n]);G(()=>(m(n,s.current)||(s.current=n,a().then(i=>{i!==null&&(r.current=i)}).catch(i=>{console.error(`${e.getErrorPrefix()} - error fetching data for query: `,JSON.stringify(n)),console.error(i)}).finally(()=>{t.current=!1})),()=>{r.current}),[n,a])}}function xe(e){let{sdk:o,useDojoStore:n}=p(),r=n(t=>t);l({subscribeMethod:t=>o.subscribeEntityQuery(t),updateSubscriptionMethod:(t,a)=>o.updateEntitySubscription(t,a),queryToHashedKeysMethod:t=>t.getClause()._unsafeUnwrap(),processInitialData:t=>{r.mergeEntities(t)},processUpdateData:t=>{if(t){let i=t.filter(c=>Number.parseInt(c.entityId,16)!==0)[0];i&&r.updateEntity(i)}},getErrorPrefix:()=>"Dojo.js - useEntityQuery",historical:!1})(e)}function ke(e){if(!e.isHistorical())throw new Error("Query must be HistoricalToriiQueryBuilder");let{sdk:o,useDojoStore:n}=p(),r=n(t=>t);l({subscribeMethod:t=>o.subscribeEntityQuery(t),updateSubscriptionMethod:(t,a)=>o.updateEntitySubscription(t,a),queryToHashedKeysMethod:t=>t.getClause()._unsafeUnwrap(),processInitialData:t=>{r.setHistoricalEntities(t)},processUpdateData:t=>{if(t){let i=t.filter(c=>Number.parseInt(c.entityId,16)!==0)[0];i&&r.updateHistoricalEntity(i)}},getErrorPrefix:()=>"Dojo.js - useHistoricalEntityQuery",historical:!0})(e)}import{useState as $}from"react";function Ce(e){let{sdk:o,useDojoStore:n}=p(),r=n(t=>t);l({subscribeMethod:t=>o.subscribeEventQuery(t),updateSubscriptionMethod:(t,a)=>o.updateEventMessageSubscription(t,a,!1),queryToHashedKeysMethod:t=>t.getClause()._unsafeUnwrap(),processInitialData:t=>{r.mergeEntities(t)},processUpdateData:t=>{if(t){let i=t.filter(c=>Number.parseInt(c.entityId,16)!==0)[0];i&&r.updateEntity(i)}},getErrorPrefix:()=>"Dojo.js - useEventQuery",historical:!1})(e)}function Pe(e){let{sdk:o}=p(),[n,r]=$([]);return l({subscribeMethod:t=>o.subscribeEventQuery(t),updateSubscriptionMethod:(t,a)=>o.updateEventMessageSubscription(t,a,!0),queryToHashedKeysMethod:t=>t.getClause()._unsafeUnwrap(),processInitialData:t=>{r(t)},processUpdateData:t=>{if(t){let a=t.filter(i=>Number.parseInt(i.entityId,16)!==0);r(i=>[...a,...i])}},getErrorPrefix:()=>"Dojo.js - useHistoricalEventsQuery",historical:!0})(e),n}import{useCallback as D,useEffect as O,useRef as E,useState as j}from"react";function Ie(e){let{sdk:o}=p(),[n,r]=j([]),s=E(null),[t,a]=j([]),i=E(null),c=D(async()=>{let d=await o.getTokens({contractAddresses:e.contractAddresses??[],tokenIds:e.tokenIds??[]});r(d.items)},[o,e]),f=D(async()=>{let[d,y]=await o.subscribeTokenBalance({contractAddresses:e.contractAddresses??[],accountAddresses:e.accountAddresses??[],tokenIds:e.tokenIds??[],callback:({data:P,error:x})=>{if(x){console.error(x);return}a(M=>q(M,P))}});i.current=y,a(d.items)},[o,e]);O(()=>{m(e,s.current)||(s.current=e,c(),f())},[e]);function h(d){return t.find(y=>y.contract_address===d.contract_address)}function C(d,y){return Number.parseInt(y?.balance??"0",16)*10**-d.decimals}return{tokens:n,balances:t,getBalance:h,toDecimal:C}}function q(e,o){if(BigInt(o.account_address)===0n&&BigInt(o.contract_address)===0n)return e;let n=e.findIndex(r=>r.token_id===o.token_id&&r.contract_address===o.contract_address);return n===-1?[...e,o]:e.map((r,s)=>s===n?o:r)}function p(){return F(u)}function Re(...e){return V(()=>e.length>0?W(e.map(n=>BigInt(n))):BigInt(0),[e])}export{u as DojoContext,de as DojoSdkProvider,X as WithAccount,k as createDojoStore,p as useDojoSDK,Re as useEntityId,xe as useEntityQuery,Ce as useEventQuery,ke as useHistoricalEntityQuery,Pe as useHistoricalEventsQuery,se as useHistoricalModel,ne as useModel,ie as useModels,Ie as useTokens};
//# sourceMappingURL=react.js.map