UNPKG

@dojoengine/sdk

Version:

Dojo SDK: Build onchain and provable apps faster

2 lines 19.1 kB
import*as q from"@dojoengine/torii-wasm";import{err as oe,ok as ce}from"neverthrow";import{shortString as G}from"starknet";import{CairoCustomEnum as B,CairoOption as f,CairoOptionVariant as I}from"starknet";import{CairoCustomEnum as ye,CairoOption as F,CairoOptionVariant as K,addAddressPadding as fe}from"starknet";import{addAddressPadding as j}from"starknet";import{addAddressPadding as Te}from"starknet";import{err as ve,ok as Pe}from"neverthrow";function U(e,t){if(Object.hasOwn(e,"type")&&Object.hasOwn(e,"value"))return{Primitive:{[e.type]:e.value}};if(typeof e=="number")return{Primitive:{U32:e}};if(typeof e=="boolean")return{Primitive:{Bool:e}};if(typeof e=="bigint")return{Primitive:{Felt252:t(e.toString())}};if(typeof e=="string")return{String:e};if(Array.isArray(e))return{List:e.map(r=>U(r,t))};throw new Error(`Unsupported primitive type: ${typeof e}`)}function Re(e,t,r="VariableLen"){return new k().keys(e,t,r)}function Me(e){return new k().hashed_keys(e)}function Oe(e,t,r,n){return new k().where(e,t,r,n)}function De(e){return new k().compose().and(e)}function Qe(e){return new k().compose().or(e)}var k=class{clause;constructor(){this.clause={}}keys(e,t,r="VariableLen"){return this.clause={Keys:{keys:t.length===0?[void 0]:t,pattern_matching:r,models:e}},this}hashed_keys(e){let t=e.map((r,n)=>{try{return`0x${BigInt(r).toString(16)}`}catch{throw new Error(`Invalid key value at index ${n}: ${r}. Expected a valid BigNumberish value.`)}});return this.clause={HashedKeys:t},this}where(e,t,r,n){let i=Array.isArray(n)?{List:n.map(d=>U(d,G.encodeShortString))}:U(n,G.encodeShortString);return this.clause={Member:{model:e,member:t,operator:r,value:i}},this}compose(){return new de}build(){if(Object.keys(this.clause).length===0)throw new Error("You cannot build an empty Clause");return this.clause}},de=class{orClauses=[];andClauses=[];or(e){return this.orClauses=e.map(t=>t.build()),this}and(e){return this.andClauses=e.map(t=>t.build()),this}build(){if(this.orClauses.length===0&&this.andClauses.length===0)throw new Error("ComposeClause is empty. Add .or([clause]) or .and([clause])");if(this.orClauses&&this.andClauses.length===0)return{Composite:{operator:"Or",clauses:this.orClauses}};if(this.andClauses&&this.orClauses.length===0)return{Composite:{operator:"And",clauses:this.andClauses}};if(this.andClauses&&this.orClauses)return{Composite:{operator:"And",clauses:[...this.andClauses,{Composite:{operator:"Or",clauses:this.orClauses}}]}};throw new Error("CompositeClause is not properly build")}},qe="No signer configured in sdk.init()",Ge="No identity configured in sdk.init()",E="Account is undefined",ue="Clause has not been defined yet. Use `.withClause()` to do so";function L(e,t,r,n,i){return{types:{StarknetDomain:[{name:"name",type:"shortstring"},{name:"version",type:"shortstring"},{name:"chainId",type:"shortstring"},{name:"revision",type:"shortstring"}],...i,[e]:n!==void 0?n:Object.keys(t).map(d=>({name:d,type:typeof t[d]=="bigint"||typeof t[d]=="number"?"felt":"string"}))},primaryType:e,domain:r,message:t}}function N(e){return e instanceof f}function le(e,t){return t instanceof f&&t.isSome()?new f(I.Some,t.unwrap()):e instanceof f?e.isSome()?new f(I.Some,e.unwrap()):new f(I.None):e}function S(e){return e instanceof B}function pe(e,t){if(!S(e)||!S(t))return e;let r=t.activeVariant(),n=t.unwrap();if(r&&n!==void 0){let c={};for(let s in e.variant)c[s]=void 0;return c[r]=n,new B(c)}let i=e.activeVariant(),d=e.unwrap();if(i&&d!==void 0){let c={};for(let s in e.variant)c[s]=void 0;return c[i]=d,new B(c)}return e}function ge(e,t){if(N(e)&&N(t))return le(e,t);if(S(e)&&S(t))return pe(e,t);let r={...e};for(let n in t)Object.hasOwn(t,n)&&(t[n]!==null&&typeof t[n]=="object"&&!Array.isArray(t[n])&&n in e&&typeof e[n]=="object"&&!Array.isArray(e[n])?r[n]=ge(e[n],t[n]):r[n]=t[n]);return r}function Fe(e,t,r){let[n,i]=t.split("-");for(let d of r)if(d.entityId===e)return d.models?.[n]?.[i]}function Ke(e,t){let[r,n]=e.split("-");for(let i of t)return i.models?.[r]?.[n]}var T={limit:1e3,cursor:void 0,direction:"Forward",order_by:[]},y=class H{constructor(t,r,n){this.limit=t,this.cursor=r,this.direction=n,this.items=[],n||(this.direction="Forward")}items;static fromQuery(t,r){let n=t.getPagination();return new H(n.limit??1e3,r,n.direction)}withItems(t){return this.items=t,this}getItems(){return this.items}getNextQuery(t){let r=t.withLimit(this.limit);return this.cursor&&r.withCursor(this.cursor),r.getPagination().direction!==this.direction&&r.withDirection(this.direction),r}getPreviousQuery(t){let r=t.withLimit(this.limit);return this.cursor&&r.withCursor(this.cursor),r.getPagination().direction===this.direction&&r.withDirection(me(this.direction)),r}};function me(e){return e==="Forward"?"Backward":"Forward"}function h(e,t){let r=[];for(let n of e){let i=fe(n.hashed_keys),d=n.models,c={entityId:i,models:{}};for(let s in n.models){let[a,o]=s.split("-");if(!a||!o){t?.logging&&console.warn(`Invalid modelName format: ${s}`);continue}c.models[a]||(c.models[a]={}),c.models[a][o]=V(d[s])}r.push(c),t?.logging&&console.log("Parsed entity:",c)}return t?.logging&&console.log("Parsed result:",r),Object.values(r)}function _(e){switch(e.type){case"primitive":return be(e);case"struct":return V(e.value);case"enum":return e.value.option==="Some"?new F(K.Some,_(e.value.value)):e.value.option==="None"?new F(K.None):he(e);case"tuple":case"array":return e.value.map(_);default:return e.value}}function he(e){return e.value.value.type==="tuple"?e.value.option:new ye({[e.value.option]:_(e.value.value)})}function be(e){switch(e.type_name){case"u64":case"i64":return Number(e.value);case"u128":case"i128":return BigInt(e.value);case"u256":return BigInt(e.value);case"u8":case"u16":case"u32":case"i8":case"i16":case"i32":case"bool":case"ContractAddress":case"ClassHash":case"felt252":case"EthAddress":default:return e.value}}function V(e){let t=e instanceof Map?Array.from(e.entries()):Object.entries(e);return Object.fromEntries(t.map(([r,n])=>[r,_(n)]))}function A(e){return t=>{try{if(e){let r=h([t]);e({data:r,error:void 0})}}catch(r){e&&e({data:void 0,error:r instanceof Error?r:new Error(String(r))})}}}function g(e,t){return r=>{if(r!==t)try{e({data:r,error:void 0})}catch(n){e({data:void 0,error:n})}}}var w={balance:"0x0000000000000000000000000000000000000000000000000000000000000000",account_address:"0x0",contract_address:"0x0",token_id:"0x0000000000000000000000000000000000000000000000000000000000000000"},v={id:"",contract_address:"0x0",from_address:"0x0",to_address:"0x0",amount:"0x0000000000000000000000000000000000000000000000000000000000000000",token_id:void 0,executed_at:0,event_id:void 0};function l(e){return e.contractAddresses&&(e.contractAddresses=e.contractAddresses.map(t=>j(t))),e.accountAddresses&&(e.accountAddresses=e.accountAddresses.map(t=>j(t))),{contractAddresses:e.contractAddresses??[],accountAddresses:e.accountAddresses??[],attributesFilter:e.attributesFilter??[],contractTypes:e.contractTypes??[],tokenIds:e.tokenIds??[],pagination:e.pagination??T}}function ke(e){return e.map(t=>({trait_name:t.name,trait_value:t.value}))}async function x(e,t){let{contractAddresses:r,tokenIds:n,pagination:i,attributesFilter:d}=l(t);return await e.getTokens({contract_addresses:r,token_ids:n,attribute_filters:ke(d),pagination:i})}async function $(e,t){let{contractAddresses:r,contractTypes:n,pagination:i}=l(t);return await e.getTokenContracts({contract_addresses:r,contract_types:n,pagination:i})}async function R(e,t){let{contractAddresses:r,accountAddresses:n,tokenIds:i,pagination:d}=l(t);return await e.getTokenBalances({contract_addresses:r,account_addresses:n,token_ids:i,pagination:d})}async function M(e,t){let{contractAddresses:r,accountAddresses:n,tokenIds:i,pagination:d}=l(t);return await e.getTokenTransfers({contract_addresses:r,account_addresses:n,token_ids:i,pagination:d})}async function He(e,t){let{contractAddresses:r,accountAddresses:n,tokenIds:i}=l(t);return await e.onTokenBalanceUpdated(r??[],n??[],i??[],g(t.callback,w))}async function Ve(e,t){let{contractAddresses:r,accountAddresses:n,tokenIds:i}=l(t);return await e.onTokenTransferUpdated(r??[],n??[],i??[],g(t.callback,v))}async function W(e,t){let{subscription:r,contractAddresses:n,accountAddresses:i,tokenIds:d}=t;return await e.updateTokenBalanceSubscription(r,n??[],i??[],d??[])}async function J(e,t){let{subscription:r,contractAddresses:n,accountAddresses:i,tokenIds:d}=t;return await e.updateTokenTransferSubscription(r,n??[],i??[],d??[])}async function Y(e,t){let{contractAddresses:r,accountAddresses:n,tokenIds:i,callback:d}=t,c=await R(e,{contractAddresses:r??[],accountAddresses:n??[],tokenIds:i??[]}),s=await e.onTokenBalanceUpdated(r??[],n??[],i??[],g(d,w));return[c,s]}async function z(e,t){let{contractAddresses:r,accountAddresses:n,tokenIds:i,callback:d}=t,c=await M(e,{contractAddresses:r??[],accountAddresses:n??[],tokenIds:i??[]}),s=await e.onTokenTransferUpdated(r??[],n??[],i??[],g(d,v));return[c,s]}var P={contract_address:"0x0",token_id:"0x0000000000000000000000000000000000000000000000000000000000000000",name:"",symbol:"",decimals:0,metadata:"",total_supply:""};async function $e(e,t){let{contractAddresses:r,tokenIds:n,callback:i}=l(t);return await e.onTokenUpdated(r??[],n??[],g(i,P))}async function X(e,t){let{contractAddresses:r,tokenIds:n,callback:i}=t,d=await x(e,{contractAddresses:r??[],tokenIds:n??[]}),c=await e.onTokenUpdated(r??[],n??[],g(i,P));return[d,c]}function b(e){return(e??[]).map(t=>Te(t))}var O={id:"",achievement_id:"",task_id:"",world_address:"0x0",namespace:"",player_id:"0x0",count:0,completed:!1,completed_at:void 0,created_at:0,updated_at:0};function Ae(e){return{items:e.items,nextCursor:e.next_cursor||void 0,next_cursor:e.next_cursor||void 0}}function we(e){return{items:e.items,nextCursor:e.next_cursor||void 0,next_cursor:e.next_cursor||void 0}}function D(e){return{world_addresses:b(e?.worldAddresses),namespaces:e?.namespaces??[],hidden:e?.hidden,pagination:e?.pagination??T}}function Q(e){return{world_addresses:b(e?.worldAddresses),namespaces:e?.namespaces??[],player_addresses:b(e?.playerAddresses),pagination:e?.pagination??T}}function Z(e){return{worldAddresses:b(e.worldAddresses),namespaces:e.namespaces??[],playerAddresses:b(e.playerAddresses),achievementIds:e.achievementIds??[]}}async function ee(e,t){let r=await e.getAchievements(D(t));return Ae(r)}async function te(e,t){let r=await e.getPlayerAchievements(Q(t));return we(r)}async function se(e,t){let{worldAddresses:r,namespaces:n,playerAddresses:i,achievementIds:d}=Z(t);return e.onAchievementProgressionUpdated(r.length?r:void 0,n.length?n:void 0,i.length?i:void 0,d.length?d:void 0,g(t.callback,O))}async function re(e,t){let{subscription:r,...n}=t,{worldAddresses:i,namespaces:d,playerAddresses:c,achievementIds:s}=Z(n);await e.updateAchievementProgressionSubscription(r,i,d,c,s)}var ne=()=>({pagination:{limit:100,cursor:void 0,direction:"Forward",order_by:[]},clause:void 0,no_hashed_keys:!0,models:[],historical:!1,world_addresses:[]}),Se=class ie{query;constructor(t){this.query={...ne(),...t}}withLimit(t){return this.query.pagination.limit=t,this}withOffset(){return this}withCursor(t){return this.query.pagination.cursor=t,this}withDirection(t){return this.query.pagination.direction=t,this}withClause(t){return this.query.clause=t,this}includeHashedKeys(){return this.query.no_hashed_keys=!1,this}addOrderBy(t,r){return this.query.pagination.order_by.push({field:t,direction:r}),this}withOrderBy(t){return this.query.pagination.order_by=t,this}addEntityModel(t){return this.query.models.push(t),this}withEntityModels(t){return this.query.models=t,this}build(){return this.query}static withPagination(t,r,n){return new ie().withLimit(r).withCursor(t).withDirection(n)}getClause(){return this.query.clause?Pe(this.query.clause):ve(ue)}getPagination(){return this.query.pagination}isHistorical(){return this.query.historical}},Ye=class extends Se{constructor(e){super({...ne(),...e,historical:!0})}};import{ok as _e}from"neverthrow";import{addAddressPadding as Ce}from"starknet";import{ToriiGrpcClient as Ie}from"@dojoengine/grpc";function ae({client:e,config:t,sendMessage:r,sendMessageBatch:n,grpcClient:i}){let d=i??e;if(!d)throw new Error("Either client or grpcClient must be provided");let c=i??new Ie({toriiUrl:t.client.toriiUrl??"http://localhost:8080",worldAddress:Ce(t.client.worldAddress)});return{client:e,subscribeEntityQuery:async({query:s,callback:a,fetchInitialData:o=!0})=>{let u=s.build();if(o){let p=await d.getEntities(u),m=h(p.items);return[y.fromQuery(s,p.next_cursor).withItems(m),await c.onEntityUpdated(u.clause,u.world_addresses,A(a))]}return[y.fromQuery(s,void 0).withItems([]),await c.onEntityUpdated(u.clause,u.world_addresses,A(a))]},subscribeEventQuery:async({query:s,callback:a,fetchInitialData:o=!0})=>{let u=s.build();if(o){let p=await c.getEventMessages(u),m=h(p.items);return[y.fromQuery(s,p.next_cursor).withItems(m),await c.onEventMessageUpdated(u.clause,u.world_addresses,A(a))]}return[y.fromQuery(s,void 0).withItems([]),await c.onEventMessageUpdated(u.clause,u.world_addresses,A(a))]},subscribeTokenBalance:async s=>{if(i){let{contractAddresses:a,accountAddresses:o,tokenIds:u,pagination:p}=l(s),m=await i.getTokenBalances({contract_addresses:a,account_addresses:o,token_ids:u,pagination:p}),C=await i.onTokenBalanceUpdated(a??[],o??[],u??[],g(s.callback,w));return[m,C]}return await Y(e,s)},subscribeTokenTransfer:async s=>{if(i){let{contractAddresses:a,accountAddresses:o,tokenIds:u,pagination:p}=l(s),m=await i.getTokenTransfers({contract_addresses:a,account_addresses:o,token_ids:u,pagination:p}),C=await i.onTokenTransferUpdated(a??[],o??[],u??[],g(s.callback,v));return[m,C]}return await z(e,s)},getEntities:async({query:s})=>{let a=s.build(),o=await d.getEntities(a);return y.fromQuery(s,o.next_cursor).withItems(h(o.items))},getEventMessages:async({query:s})=>{let a=s.build(),o=await d.getEventMessages(a);return y.fromQuery(s,o.next_cursor).withItems(h(o.items))},generateTypedData:(s,a,o,u)=>L(s,a,t.domain,o,u),sendMessage:r,sendMessageBatch:n,sendSignedMessageBatch:async s=>{try{return _e(await d.publishMessageBatch(s))}catch(a){throw console.error("Failed to send signed message batch:",a),a}},getTokens:async s=>{if(i){let{contractAddresses:a,tokenIds:o,pagination:u}=l(s);return await i.getTokens({contract_addresses:a,token_ids:o,pagination:u})}return await x(e,s)},getTokenContracts:async s=>{if(i){let{contractAddresses:a,contractTypes:o,pagination:u}=l(s);return await i.getTokenContracts({contract_addresses:a,contract_types:o,pagination:u})}return await $(e,s)},getTokenBalances:async s=>{if(i){let{contractAddresses:a,accountAddresses:o,tokenIds:u,pagination:p}=l(s);return await i.getTokenBalances({contract_addresses:a,account_addresses:o,token_ids:u,pagination:p})}return await R(e,s)},getTokenTransfers:async s=>{if(i){let{contractAddresses:a,accountAddresses:o,tokenIds:u,pagination:p}=l(s);return await i.getTokenTransfers({contract_addresses:a,account_addresses:o,token_ids:u,pagination:p})}return await M(e,s)},getAchievements:async s=>i?await c.getAchievements(D(s)):await ee(e,s),getPlayerAchievements:async s=>i?await c.getPlayerAchievements(Q(s)):await te(e,s),onTokenBalanceUpdated:async s=>{let{contractAddresses:a,accountAddresses:o,tokenIds:u}=l(s);return await c.onTokenBalanceUpdated(a??[],o??[],u??[],g(s.callback,w))},onTokenUpdated:async s=>{let{contractAddresses:a,tokenIds:o}=l(s);return await c.onTokenUpdated(a??[],o??[],g(s.callback,P))},onTokenTransferUpdated:async s=>{let{contractAddresses:a,accountAddresses:o,tokenIds:u}=l(s);return await c.onTokenTransferUpdated(a??[],o??[],u??[],g(s.callback,v))},updateTokenBalanceSubscription:async s=>{if(i){let{contractAddresses:a,accountAddresses:o,tokenIds:u}=l(s);return await i.updateTokenBalanceSubscription(s.subscription,a??[],o??[],u??[])}return await W(e,s)},updateTokenTransferSubscription:async s=>{if(i){let{contractAddresses:a,accountAddresses:o,tokenIds:u}=l(s);return await i.updateTokenTransferSubscription(s.subscription,a??[],o??[],u??[])}return await J(e,s)},onAchievementProgressionUpdated:async s=>{let{callback:a,...o}=s,u=g(a,O);return i?await c.onAchievementProgressionUpdated(o.worldAddresses??null,o.namespaces??null,o.playerAddresses??null,o.achievementIds??null,p=>u(p)):await se(e,s)},updateAchievementProgressionSubscription:async s=>{if(i){let{subscription:a,...o}=s;await c.updateAchievementProgressionSubscription(a,o.worldAddresses??[],o.namespaces??[],o.playerAddresses??[],o.achievementIds??[]);return}await re(e,s)},updateEntitySubscription:async(s,a)=>await d.updateEntitySubscription(s,a),updateEventMessageSubscription:async(s,a,o)=>await c.updateEventMessageSubscription(s,a),getControllers:async(s,a,o=T)=>await d.getControllers({contract_addresses:s,usernames:a,pagination:o}),subscribeToken:async s=>{if(i){let{contractAddresses:a,tokenIds:o,pagination:u}=l(s),p=await i.getTokens({contract_addresses:a,token_ids:o,pagination:u}),m=await i.onTokenUpdated(a??[],o??[],g(s.callback,P));return[p,m]}return await X(e,s)},getAggregations:async s=>await c.getAggregations(s),onAggregationUpdated:async(s,a,o)=>await c.onAggregationUpdated(s,a,o),updateAggregationSubscription:async(s,a,o)=>await c.updateAggregationSubscription(s,a,o),getActivities:async s=>await c.getActivities(s),onActivityUpdated:async(s,a,o,u)=>await c.onActivityUpdated(s,a,o,u),updateActivitySubscription:async(s,a,o,u)=>await c.updateActivitySubscription(s,a,o,u),executeSql:async s=>await c.executeSql(s),getWorlds:async s=>await c.getWorlds(s)}}import{ToriiGrpcClient as Ue}from"@dojoengine/grpc";function Be(e){return new Ue({toriiUrl:e.toriiUrl??"http://localhost:8080",worldAddress:e.worldAddress})}async function lt(e){return await new q.ToriiClient(e)}var Ee={toriiUrl:"http://localhost:8080"};async function pt(e){let t;if(!e.grpcClient){let i={...Ee,...e.client};t=await new q.ToriiClient(i)}return ae({client:t,config:e,sendMessage:async(i,d)=>{if(!d)return oe(E);try{let c=await d.signMessage(i),s=JSON.stringify(i),a=e.grpcClient||t;return ce(await a.publishMessage({message:s,signature:Array.isArray(c)?c:[c.r.toString(),c.s.toString()],world_address:e.client.worldAddress}))}catch(c){throw console.error("Failed to send message:",c),c}},sendMessageBatch:async(i,d)=>{if(!d)return oe(E);try{let c=[];for(let a of i){let o=await d.signMessage(a),u=JSON.stringify(a);c.push({message:u,signature:Array.isArray(o)?o:[o.r.toString(),o.s.toString()],world_address:e.client.worldAddress})}let s=e.grpcClient||t;return ce(await s.publishMessageBatch(c))}catch(c){throw console.error("Failed to send message batch:",c),c}},grpcClient:e.grpcClient})}export{U as a,Re as b,Me as c,Oe as d,De as e,Qe as f,k as g,qe as h,Ge as i,E as j,ue as k,L as l,N as m,le as n,S as o,pe as p,ge as q,Fe as r,Ke as s,T as t,y as u,h as v,A as w,g as x,w as y,v as z,l as A,x as B,$ as C,R as D,M as E,He as F,Ve as G,W as H,J as I,Y as J,z as K,P as L,$e as M,X as N,O,D as P,Q,ee as R,te as S,se as T,re as U,Se as V,Ye as W,Be as X,q as Y,lt as Z,Ee as _,pt as $}; //# sourceMappingURL=chunk-5GXKDRLR.js.map