UNPKG

@dojoengine/sdk

Version:

Dojo SDK: Build onchain and provable apps faster

2 lines 18.9 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 U,CairoOption as m,CairoOptionVariant as C}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 I(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=>I(r,t))};throw new Error(`Unsupported primitive type: ${typeof e}`)}function Re(e,t,r="VariableLen"){return new b().keys(e,t,r)}function Me(e){return new b().hashed_keys(e)}function Oe(e,t,r,n){return new b().where(e,t,r,n)}function De(e){return new b().compose().and(e)}function Qe(e){return new b().compose().or(e)}var b=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=>I(d,G.encodeShortString))}:I(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()",B="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 m}function le(e,t){return t instanceof m&&t.isSome()?new m(C.Some,t.unwrap()):e instanceof m?e.isSome()?new m(C.Some,e.unwrap()):new m(C.None):e}function P(e){return e instanceof U}function pe(e,t){if(!P(e)||!P(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 U(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 U(c)}return e}function ge(e,t){if(N(e)&&N(t))return le(e,t);if(P(e)&&P(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 k={limit:1e3,cursor:void 0,direction:"Forward",order_by:[]},T=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 y(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[o,a]=s.split("-");if(!o||!a){t?.logging&&console.warn(`Invalid modelName format: ${s}`);continue}c.models[o]||(c.models[o]={}),c.models[o][a]=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 S(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,S(e.value.value)):e.value.option==="None"?new F(K.None):he(e);case"tuple":case"array":return e.value.map(S);default:return e.value}}function he(e){return e.value.value.type==="tuple"?e.value.option:new ye({[e.value.option]:S(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,S(n)]))}function E(e){return t=>{try{if(e){let r=y([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 A={balance:"0x0000000000000000000000000000000000000000000000000000000000000000",account_address:"0x0",contract_address:"0x0",token_id:"0x0000000000000000000000000000000000000000000000000000000000000000"},w={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??k}}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,A))}async function Ve(e,t){let{contractAddresses:r,accountAddresses:n,tokenIds:i}=l(t);return await e.onTokenTransferUpdated(r??[],n??[],i??[],g(t.callback,w))}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,A));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,w));return[c,s]}var v={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,v))}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,v));return[d,c]}function h(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:h(e?.worldAddresses),namespaces:e?.namespaces??[],hidden:e?.hidden,pagination:e?.pagination??k}}function Q(e){return{world_addresses:h(e?.worldAddresses),namespaces:e?.namespaces??[],player_addresses:h(e?.playerAddresses),pagination:e?.pagination??k}}function Z(e){return{worldAddresses:h(e.worldAddresses),namespaces:e.namespaces??[],playerAddresses:h(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:o})=>{let a=s.build(),u=await d.getEntities(a),p=y(u.items);return[T.fromQuery(s,u.next_cursor).withItems(p),await c.onEntityUpdated(a.clause,a.world_addresses,E(o))]},subscribeEventQuery:async({query:s,callback:o})=>{let a=s.build(),u=await c.getEventMessages(a),p=y(u.items);return[T.fromQuery(s,u.next_cursor).withItems(p),await c.onEventMessageUpdated(a.clause,a.world_addresses,E(o))]},subscribeTokenBalance:async s=>{if(i){let{contractAddresses:o,accountAddresses:a,tokenIds:u,pagination:p}=l(s),f=await i.getTokenBalances({contract_addresses:o,account_addresses:a,token_ids:u,pagination:p}),_=await i.onTokenBalanceUpdated(o??[],a??[],u??[],g(s.callback,A));return[f,_]}return await Y(e,s)},subscribeTokenTransfer:async s=>{if(i){let{contractAddresses:o,accountAddresses:a,tokenIds:u,pagination:p}=l(s),f=await i.getTokenTransfers({contract_addresses:o,account_addresses:a,token_ids:u,pagination:p}),_=await i.onTokenTransferUpdated(o??[],a??[],u??[],g(s.callback,w));return[f,_]}return await z(e,s)},getEntities:async({query:s})=>{let o=s.build(),a=await d.getEntities(o);return T.fromQuery(s,a.next_cursor).withItems(y(a.items))},getEventMessages:async({query:s})=>{let o=s.build(),a=await d.getEventMessages(o);return T.fromQuery(s,a.next_cursor).withItems(y(a.items))},generateTypedData:(s,o,a,u)=>L(s,o,t.domain,a,u),sendMessage:r,sendMessageBatch:n,sendSignedMessageBatch:async s=>{try{return _e(await d.publishMessageBatch(s))}catch(o){throw console.error("Failed to send signed message batch:",o),o}},getTokens:async s=>{if(i){let{contractAddresses:o,tokenIds:a,pagination:u}=l(s);return await i.getTokens({contract_addresses:o,token_ids:a,pagination:u})}return await x(e,s)},getTokenContracts:async s=>{if(i){let{contractAddresses:o,contractTypes:a,pagination:u}=l(s);return await i.getTokenContracts({contract_addresses:o,contract_types:a,pagination:u})}return await $(e,s)},getTokenBalances:async s=>{if(i){let{contractAddresses:o,accountAddresses:a,tokenIds:u,pagination:p}=l(s);return await i.getTokenBalances({contract_addresses:o,account_addresses:a,token_ids:u,pagination:p})}return await R(e,s)},getTokenTransfers:async s=>{if(i){let{contractAddresses:o,accountAddresses:a,tokenIds:u,pagination:p}=l(s);return await i.getTokenTransfers({contract_addresses:o,account_addresses:a,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:o,accountAddresses:a,tokenIds:u}=l(s);return await c.onTokenBalanceUpdated(o??[],a??[],u??[],g(s.callback,A))},onTokenUpdated:async s=>{let{contractAddresses:o,tokenIds:a}=l(s);return await c.onTokenUpdated(o??[],a??[],g(s.callback,v))},onTokenTransferUpdated:async s=>{let{contractAddresses:o,accountAddresses:a,tokenIds:u}=l(s);return await c.onTokenTransferUpdated(o??[],a??[],u??[],g(s.callback,w))},updateTokenBalanceSubscription:async s=>{if(i){let{contractAddresses:o,accountAddresses:a,tokenIds:u}=l(s);return await i.updateTokenBalanceSubscription(s.subscription,o??[],a??[],u??[])}return await W(e,s)},updateTokenTransferSubscription:async s=>{if(i){let{contractAddresses:o,accountAddresses:a,tokenIds:u}=l(s);return await i.updateTokenTransferSubscription(s.subscription,o??[],a??[],u??[])}return await J(e,s)},onAchievementProgressionUpdated:async s=>{let{callback:o,...a}=s,u=g(o,O);return i?await c.onAchievementProgressionUpdated(a.worldAddresses??null,a.namespaces??null,a.playerAddresses??null,a.achievementIds??null,p=>u(p)):await se(e,s)},updateAchievementProgressionSubscription:async s=>{if(i){let{subscription:o,...a}=s;await c.updateAchievementProgressionSubscription(o,a.worldAddresses??[],a.namespaces??[],a.playerAddresses??[],a.achievementIds??[]);return}await re(e,s)},updateEntitySubscription:async(s,o)=>await d.updateEntitySubscription(s,o),updateEventMessageSubscription:async(s,o,a)=>await c.updateEventMessageSubscription(s,o),getControllers:async(s,o,a=k)=>await d.getControllers({contract_addresses:s,usernames:o,pagination:a}),subscribeToken:async s=>{if(i){let{contractAddresses:o,tokenIds:a,pagination:u}=l(s),p=await i.getTokens({contract_addresses:o,token_ids:a,pagination:u}),f=await i.onTokenUpdated(o??[],a??[],g(s.callback,v));return[p,f]}return await X(e,s)},getAggregations:async s=>await c.getAggregations(s),onAggregationUpdated:async(s,o,a)=>await c.onAggregationUpdated(s,o,a),updateAggregationSubscription:async(s,o,a)=>await c.updateAggregationSubscription(s,o,a),getActivities:async s=>await c.getActivities(s),onActivityUpdated:async(s,o,a,u)=>await c.onActivityUpdated(s,o,a,u),updateActivitySubscription:async(s,o,a,u)=>await c.updateActivitySubscription(s,o,a,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(B);try{let c=await d.signMessage(i),s=JSON.stringify(i),o=e.grpcClient||t;return ce(await o.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(B);try{let c=[];for(let o of i){let a=await d.signMessage(o),u=JSON.stringify(o);c.push({message:u,signature:Array.isArray(a)?a:[a.r.toString(),a.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{I as a,Re as b,Me as c,Oe as d,De as e,Qe as f,b as g,qe as h,Ge as i,B as j,ue as k,L as l,N as m,le as n,P as o,pe as p,ge as q,Fe as r,Ke as s,k as t,T as u,y as v,E as w,g as x,A as y,w 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,v 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,lt as Y,Ee as Z,pt as _}; //# sourceMappingURL=chunk-W7BJBH43.js.map