UNPKG

@dojoengine/sdk

Version:

Dojo SDK: Build onchain and provable apps faster

2 lines 19.9 kB
import*as de from"@dojoengine/torii-wasm/node";import{err as f,ok as ce}from"neverthrow";import{shortString as N}from"starknet";import{CairoCustomEnum as E,CairoOption as m,CairoOptionVariant as U}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 k().keys(e,t,r)}function De(e){return new k().hashed_keys(e)}function Oe(e,t,r,n){return new k().where(e,t,r,n)}function Qe(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=>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")}},x="No signer configured in sdk.init()",T="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 m}function pe(e,t){return t instanceof m&&t.isSome()?new m(U.Some,t.unwrap()):e instanceof m?e.isSome()?new m(U.Some,e.unwrap()):new m(U.None):e}function _(e){return e instanceof E}function ge(e,t){if(!_(e)||!_(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 E(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 E(c)}return e}function me(e,t){if(F(e)&&F(t))return pe(e,t);if(_(e)&&_(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 A={limit:1e3,cursor:void 0,direction:"Forward",order_by:[]},w=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 y(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[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]=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 C(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,C(e.value.value)):e.value.option==="None"?new K(j.None):be(e);case"tuple":case"array":return e.value.map(C);default:return e.value}}function be(e){return e.value.value.type==="tuple"?e.value.option:new fe({[e.value.option]:C(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,C(n)]))}function R(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 v={balance:"0x0000000000000000000000000000000000000000000000000000000000000000",account_address:"0x0",contract_address:"0x0",token_id:"0x0000000000000000000000000000000000000000000000000000000000000000"},P={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??A}}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,v))}async function Ve(e,t){let{contractAddresses:r,accountAddresses:n,tokenIds:i}=l(t);return await e.onTokenTransferUpdated(r??[],n??[],i??[],g(t.callback,P))}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,v));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,P));return[c,s]}var S={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,S))}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,S));return[d,c]}function b(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:b(e?.worldAddresses),namespaces:e?.namespaces??[],hidden:e?.hidden,pagination:e?.pagination??A}}function G(e){return{world_addresses:b(e?.worldAddresses),namespaces:e?.namespaces??[],player_addresses:b(e?.playerAddresses),pagination:e?.pagination??A}}function ee(e){return{worldAddresses:b(e.worldAddresses),namespaces:e.namespaces??[],playerAddresses:b(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:o})=>{let a=s.build(),u=await d.getEntities(a),p=y(u.items);return[w.fromQuery(s,u.next_cursor).withItems(p),await c.onEntityUpdated(a.clause,a.world_addresses,R(o))]},subscribeEventQuery:async({query:s,callback:o})=>{let a=s.build(),u=await c.getEventMessages(a),p=y(u.items);return[w.fromQuery(s,u.next_cursor).withItems(p),await c.onEventMessageUpdated(a.clause,a.world_addresses,R(o))]},subscribeTokenBalance:async s=>{if(i){let{contractAddresses:o,accountAddresses:a,tokenIds:u,pagination:p}=l(s),h=await i.getTokenBalances({contract_addresses:o,account_addresses:a,token_ids:u,pagination:p}),I=await i.onTokenBalanceUpdated(o??[],a??[],u??[],g(s.callback,v));return[h,I]}return await z(e,s)},subscribeTokenTransfer:async s=>{if(i){let{contractAddresses:o,accountAddresses:a,tokenIds:u,pagination:p}=l(s),h=await i.getTokenTransfers({contract_addresses:o,account_addresses:a,token_ids:u,pagination:p}),I=await i.onTokenTransferUpdated(o??[],a??[],u??[],g(s.callback,P));return[h,I]}return await X(e,s)},getEntities:async({query:s})=>{let o=s.build(),a=await d.getEntities(o);return w.fromQuery(s,a.next_cursor).withItems(y(a.items))},getEventMessages:async({query:s})=>{let o=s.build(),a=await d.getEventMessages(o);return w.fromQuery(s,a.next_cursor).withItems(y(a.items))},generateTypedData:(s,o,a,u)=>H(s,o,t.domain,a,u),sendMessage:r,sendMessageBatch:n,sendSignedMessageBatch:async s=>{try{return Ce(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 M(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 D(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 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:o,accountAddresses:a,tokenIds:u}=l(s);return await c.onTokenBalanceUpdated(o??[],a??[],u??[],g(s.callback,v))},onTokenUpdated:async s=>{let{contractAddresses:o,tokenIds:a}=l(s);return await c.onTokenUpdated(o??[],a??[],g(s.callback,S))},onTokenTransferUpdated:async s=>{let{contractAddresses:o,accountAddresses:a,tokenIds:u}=l(s);return await c.onTokenTransferUpdated(o??[],a??[],u??[],g(s.callback,P))},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 Y(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,Q);return i?await c.onAchievementProgressionUpdated(a.worldAddresses??null,a.namespaces??null,a.playerAddresses??null,a.achievementIds??null,p=>u(p)):await re(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 ne(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=A)=>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}),h=await i.onTokenUpdated(o??[],a??[],g(s.callback,S));return[p,h]}return await Z(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)}}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 Be}from"@dojoengine/grpc";function Ee(e){return new Be({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 f(x);if(!e.identity)return f(T);if(!d)return f(T);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(!e.signer)return f(x);if(!e.identity)return f(T);if(!d)return f(T);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{Qe as AndComposeClause,k as ClauseBuilder,De as HashedKeysClause,Je as HistoricalToriiQueryBuilder,Me as KeysClause,Oe as MemberClause,Ge as NO_ACCOUNT,T as NO_IDENTITY,x as NO_SIGNER,qe as OrComposeClause,w as Pagination,_e as ToriiQueryBuilder,le as UNDEFINED_CLAUSE,B as convertToPrimitive,at as createWorker,me as deepMerge,Q as defaultAchievementProgression,xe as defaultClientConfig,S as defaultToken,v as defaultTokenBalance,P as defaultTokenTransfer,A 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,Ee as initGrpc,_ as isCairoCustomEnum,F as isCairoOption,ge as mergeCairoCustomEnum,pe as mergeCairoOption,re as onAchievementProgressionUpdated,He as onTokenBalanceUpdated,Ve as onTokenTransferUpdated,We as onTokenUpdated,y as parseEntities,l as parseTokenRequest,g as safeCallback,R as subscribeQueryModelCallback,Z as subscribeToken,z as subscribeTokenBalance,X as subscribeTokenTransfer,q as toAchievementQuery,G as toPlayerAchievementQuery,ne as updateAchievementProgressionSubscription,Y as updateTokenBalanceSubscription,J as updateTokenTransferSubscription}; //# sourceMappingURL=index.js.map