@dojoengine/sdk
Version:
Dojo SDK: Build onchain and provable apps faster
2 lines • 20.2 kB
JavaScript
import*as de from"@dojoengine/torii-wasm/node";import{err as b,ok as ce}from"neverthrow";import{shortString as N}from"starknet";import{CairoCustomEnum as x,CairoOption as f,CairoOptionVariant as E}from"starknet";import{CairoCustomEnum as fe,CairoOption as K,CairoOptionVariant as j,addAddressPadding as he}from"starknet";import{addAddressPadding as L}from"starknet";import{addAddressPadding as Ae}from"starknet";import{err as Pe,ok as Se}from"neverthrow";function B(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=>B(r,t))};throw new Error(`Unsupported primitive type: ${typeof e}`)}function Me(e,t,r="VariableLen"){return new T().keys(e,t,r)}function De(e){return new T().hashed_keys(e)}function Oe(e,t,r,n){return new T().where(e,t,r,n)}function Qe(e){return new T().compose().and(e)}function qe(e){return new T().compose().or(e)}var T=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=>B(d,N.encodeShortString))}:B(n,N.encodeShortString);return this.clause={Member:{model:e,member:t,operator:r,value:i}},this}compose(){return new ue}build(){if(Object.keys(this.clause).length===0)throw new Error("You cannot build an empty Clause");return this.clause}},ue=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")}},R="No signer configured in sdk.init()",A="No identity configured in sdk.init()",Ge="Account is undefined",le="Clause has not been defined yet. Use `.withClause()` to do so";function H(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 F(e){return e instanceof f}function pe(e,t){return t instanceof f&&t.isSome()?new f(E.Some,t.unwrap()):e instanceof f?e.isSome()?new f(E.Some,e.unwrap()):new f(E.None):e}function C(e){return e instanceof x}function ge(e,t){if(!C(e)||!C(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 x(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 x(c)}return e}function me(e,t){if(F(e)&&F(t))return pe(e,t);if(C(e)&&C(t))return ge(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]=me(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 w={limit:1e3,cursor:void 0,direction:"Forward",order_by:[]},y=class V{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 V(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(ye(this.direction)),r}};function ye(e){return e==="Forward"?"Backward":"Forward"}function h(e,t){let r=[];for(let n of e){let i=he(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]=W(d[s])}r.push(c),t?.logging&&console.log("Parsed entity:",c)}return t?.logging&&console.log("Parsed result:",r),Object.values(r)}function I(e){switch(e.type){case"primitive":return ke(e);case"struct":return W(e.value);case"enum":return e.value.option==="Some"?new K(j.Some,I(e.value.value)):e.value.option==="None"?new K(j.None):be(e);case"tuple":case"array":return e.value.map(I);default:return e.value}}function be(e){return e.value.value.type==="tuple"?e.value.option:new fe({[e.value.option]:I(e.value.value)})}function ke(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 W(e){let t=e instanceof Map?Array.from(e.entries()):Object.entries(e);return Object.fromEntries(t.map(([r,n])=>[r,I(n)]))}function v(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 P={balance:"0x0000000000000000000000000000000000000000000000000000000000000000",account_address:"0x0",contract_address:"0x0",token_id:"0x0000000000000000000000000000000000000000000000000000000000000000"},S={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=>L(t))),e.accountAddresses&&(e.accountAddresses=e.accountAddresses.map(t=>L(t))),{contractAddresses:e.contractAddresses??[],accountAddresses:e.accountAddresses??[],attributesFilter:e.attributesFilter??[],contractTypes:e.contractTypes??[],tokenIds:e.tokenIds??[],pagination:e.pagination??w}}function Te(e){return e.map(t=>({trait_name:t.name,trait_value:t.value}))}async function M(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:Te(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 D(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 O(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,P))}async function Ve(e,t){let{contractAddresses:r,accountAddresses:n,tokenIds:i}=l(t);return await e.onTokenTransferUpdated(r??[],n??[],i??[],g(t.callback,S))}async function Y(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 z(e,t){let{contractAddresses:r,accountAddresses:n,tokenIds:i,callback:d}=t,c=await D(e,{contractAddresses:r??[],accountAddresses:n??[],tokenIds:i??[]}),s=await e.onTokenBalanceUpdated(r??[],n??[],i??[],g(d,P));return[c,s]}async function X(e,t){let{contractAddresses:r,accountAddresses:n,tokenIds:i,callback:d}=t,c=await O(e,{contractAddresses:r??[],accountAddresses:n??[],tokenIds:i??[]}),s=await e.onTokenTransferUpdated(r??[],n??[],i??[],g(d,S));return[c,s]}var _={contract_address:"0x0",token_id:"0x0000000000000000000000000000000000000000000000000000000000000000",name:"",symbol:"",decimals:0,metadata:"",total_supply:""};async function We(e,t){let{contractAddresses:r,tokenIds:n,callback:i}=l(t);return await e.onTokenUpdated(r??[],n??[],g(i,_))}async function Z(e,t){let{contractAddresses:r,tokenIds:n,callback:i}=t,d=await M(e,{contractAddresses:r??[],tokenIds:n??[]}),c=await e.onTokenUpdated(r??[],n??[],g(i,_));return[d,c]}function k(e){return(e??[]).map(t=>Ae(t))}var Q={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 we(e){return{items:e.items,nextCursor:e.next_cursor||void 0,next_cursor:e.next_cursor||void 0}}function ve(e){return{items:e.items,nextCursor:e.next_cursor||void 0,next_cursor:e.next_cursor||void 0}}function q(e){return{world_addresses:k(e?.worldAddresses),namespaces:e?.namespaces??[],hidden:e?.hidden,pagination:e?.pagination??w}}function G(e){return{world_addresses:k(e?.worldAddresses),namespaces:e?.namespaces??[],player_addresses:k(e?.playerAddresses),pagination:e?.pagination??w}}function ee(e){return{worldAddresses:k(e.worldAddresses),namespaces:e.namespaces??[],playerAddresses:k(e.playerAddresses),achievementIds:e.achievementIds??[]}}async function te(e,t){let r=await e.getAchievements(q(t));return we(r)}async function se(e,t){let r=await e.getPlayerAchievements(G(t));return ve(r)}async function re(e,t){let{worldAddresses:r,namespaces:n,playerAddresses:i,achievementIds:d}=ee(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,Q))}async function ne(e,t){let{subscription:r,...n}=t,{worldAddresses:i,namespaces:d,playerAddresses:c,achievementIds:s}=ee(n);await e.updateAchievementProgressionSubscription(r,i,d,c,s)}var ie=()=>({pagination:{limit:100,cursor:void 0,direction:"Forward",order_by:[]},clause:void 0,no_hashed_keys:!0,models:[],historical:!1,world_addresses:[]}),_e=class ae{query;constructor(t){this.query={...ie(),...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 ae().withLimit(r).withCursor(t).withDirection(n)}getClause(){return this.query.clause?Se(this.query.clause):Pe(le)}getPagination(){return this.query.pagination}isHistorical(){return this.query.historical}},Je=class extends _e{constructor(e){super({...ie(),...e,historical:!0})}};import{ok as Ce}from"neverthrow";import{addAddressPadding as Ie}from"starknet";import{ToriiGrpcClient as Ue}from"@dojoengine/grpc";function oe({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 Ue({toriiUrl:t.client.toriiUrl??"http://localhost:8080",worldAddress:Ie(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,v(a))]}return[y.fromQuery(s,void 0).withItems([]),await c.onEntityUpdated(u.clause,u.world_addresses,v(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,v(a))]}return[y.fromQuery(s,void 0).withItems([]),await c.onEventMessageUpdated(u.clause,u.world_addresses,v(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}),U=await i.onTokenBalanceUpdated(a??[],o??[],u??[],g(s.callback,P));return[m,U]}return await z(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}),U=await i.onTokenTransferUpdated(a??[],o??[],u??[],g(s.callback,S));return[m,U]}return await X(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)=>H(s,a,t.domain,o,u),sendMessage:r,sendMessageBatch:n,sendSignedMessageBatch:async s=>{try{return Ce(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 M(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 D(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 O(e,s)},getAchievements:async s=>i?await c.getAchievements(q(s)):await te(e,s),getPlayerAchievements:async s=>i?await c.getPlayerAchievements(G(s)):await se(e,s),onTokenBalanceUpdated:async s=>{let{contractAddresses:a,accountAddresses:o,tokenIds:u}=l(s);return await c.onTokenBalanceUpdated(a??[],o??[],u??[],g(s.callback,P))},onTokenUpdated:async s=>{let{contractAddresses:a,tokenIds:o}=l(s);return await c.onTokenUpdated(a??[],o??[],g(s.callback,_))},onTokenTransferUpdated:async s=>{let{contractAddresses:a,accountAddresses:o,tokenIds:u}=l(s);return await c.onTokenTransferUpdated(a??[],o??[],u??[],g(s.callback,S))},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 Y(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,Q);return i?await c.onAchievementProgressionUpdated(o.worldAddresses??null,o.namespaces??null,o.playerAddresses??null,o.achievementIds??null,p=>u(p)):await re(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 ne(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=w)=>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,_));return[p,m]}return await Z(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)}}async function at(e){let t=await e();process.on("SIGTERM",()=>{for(let r of t)r.free();process.exit(0)}),process.on("SIGINT",()=>{for(let r of t)r.free();process.exit(0)})}import{ToriiGrpcClient as Ee}from"@dojoengine/grpc";function Be(e){return new Ee({toriiUrl:e.toriiUrl??"http://localhost:8080",worldAddress:e.worldAddress})}var xe={toriiUrl:"http://localhost:8080"};async function gt(e){let t;if(!e.grpcClient){let i={...xe,...e.client};t=await new de.ToriiClient(i)}return oe({client:t,config:e,sendMessage:async(i,d)=>{if(!e.signer)return b(R);if(!e.identity)return b(A);if(!d)return b(A);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(!e.signer)return b(R);if(!e.identity)return b(A);if(!d)return b(A);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{Qe as AndComposeClause,T as ClauseBuilder,De as HashedKeysClause,Je as HistoricalToriiQueryBuilder,Me as KeysClause,Oe as MemberClause,Ge as NO_ACCOUNT,A as NO_IDENTITY,R as NO_SIGNER,qe as OrComposeClause,y as Pagination,_e as ToriiQueryBuilder,le as UNDEFINED_CLAUSE,B as convertToPrimitive,at as createWorker,me as deepMerge,Q as defaultAchievementProgression,xe as defaultClientConfig,_ as defaultToken,P as defaultTokenBalance,S as defaultTokenTransfer,w as defaultToriiPagination,H as generateTypedData,te as getAchievements,Ke as getModel,Fe as getModelByEntityId,se as getPlayerAchievements,D as getTokenBalances,$ as getTokenContracts,O as getTokenTransfers,M as getTokens,gt as init,Be as initGrpc,C as isCairoCustomEnum,F as isCairoOption,ge as mergeCairoCustomEnum,pe as mergeCairoOption,re as onAchievementProgressionUpdated,He as onTokenBalanceUpdated,Ve as onTokenTransferUpdated,We as onTokenUpdated,h as parseEntities,l as parseTokenRequest,g as safeCallback,v as subscribeQueryModelCallback,Z as subscribeToken,z as subscribeTokenBalance,X as subscribeTokenTransfer,q as toAchievementQuery,G as toPlayerAchievementQuery,de as torii,ne as updateAchievementProgressionSubscription,Y as updateTokenBalanceSubscription,J as updateTokenTransferSubscription};
//# sourceMappingURL=index.js.map