@sentio/sdk-bundle 2.44.0-rc.2 → 2.44.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { createRequire as createRequireSdkShim } from 'module'; const require = createRequireSdkShim(import.meta.url);
2
- import{a as ot}from"./chunk-7H2MCYRO.js";import{D as w,Mc as $,Rb as z,Sb as B,Tb as R,Ub as q,Vb as N,W,Wb as U,gd as tt,ld as et,oc as M,pc as Q,qc as X,rc as P,sc as Y,uc as Z}from"./chunk-U5TG5VF6.js";import{g as h,l as O}from"./chunk-5ZKQRZMR.js";import{e as A,g as K}from"./chunk-LLHU72AA.js";import{errorString as st,GLOBAL_CONFIG as nt,mergeProcessResults as at,Plugin as mt,PluginManager as ht,USER_PROCESSOR as Ct}from"@sentio/runtime";var m=A($(),1);import{ListStateStorage as ut}from"@sentio/runtime";var V=class extends ut{},g=V;K(g,"INSTANCE",new V);process.stdout.write("");var j=A(ot(),1),ft={MAIN_NET:j.FuelChainId.FUEL_MAINNET,TEST_NET:j.FuelChainId.FUEL_TESTNET};function y(a){switch(a){case ft.TEST_NET:return"https://testnet.fuel.network/v1/graphql"}return"https://testnet.fuel.network/v1/graphql"}process.stdout.write("");var L=class{constructor(t,e,r,n,s){this.args=n;this.logs=s}},C=class extends tt{constructor(e,r,n,s,o,i){super({});this.chainId=e;this.contractAddress=r;this.contractName=n;this.timestamp=s;this.transaction=o;this.block=i}logIndex=-1;getChainId(){return this.chainId}setLogIndex(e){this.logIndex=e}getMetaDataInternal(e,r){return{address:this.contractAddress,contractName:this.contractName,blockNumber:BigInt(this.block?.height?.toString()??(this.transaction?.blockNumber||0)),transactionIndex:0,transactionHash:this.transaction?.id||"",chainId:this.getChainId(),name:e,logIndex:this.logIndex,labels:Z(r)}}},b=class extends C{constructor(e,r,n,s,o,i,l){super(e,n,s,o,i,l);this.chainId=e;this.contract=r;this.contractAddress=n;this.contractName=s;this.timestamp=o;this.transaction=i;this.block=l}get provider(){return this.contract.provider}};process.stdout.write("");var v={includeFailed:!1};function rt(a,t){for(let e of a||[])if(e.type==R.Coin&&e.assetId==t)return e.owner}function E(a,t){let e=O(a.rawPayload),r=a?.status.receipts?.map(M)||[],[n]=new U().decode(e,0),{gasCosts:s,feeParameters:o,txParameters:i,baseAssetId:l}=t.getChain().consensusParameters,f=a.status?.block?.header?.height,{gasPriceFactor:c,gasPerByte:d}=o,{maxInputs:p,maxGasPerTx:F}=i,u={type:a.status?.__typename,...a.status};return{...Q({id:a.id,receipts:r,transaction:n,transactionBytes:e,gqlTransactionStatus:u,gasPerByte:h(d),gasPriceFactor:h(c),maxInputs:p,gasCosts:s,gasPrice:h(a.gasPrice),maxGasPerTx:F,baseAssetId:l}),blockNumber:f,sender:rt(n.inputs,l)}}async function _(a,t,e){let r=O(a.rawPayload),[n]=new U().decode(r,0),s=a?.status.receipts?.map(M)||[],o={type:a.status?.__typename,...a.status},i=o?.block?.header?.height,l=Object.values(t)[0],f=[];s.forEach((p,F)=>{if(p.type===N.LogData||p.type===N.Log){let u=new B(l),k=p.type===N.Log?new z("u64").encode(p.val0):p.data,H=p.val1.toString(),[G]=u.decodeLog(k,H);f.push({logId:H,data:G,receiptIndex:F})}});let c=new X(a.status.transactionId,e,{main:Object.values(t)[0],otherContractsAbis:{}});return c.gqlTransaction={...a,status:o},{...await c.getTransactionSummary(),blockNumber:i,logs:f,sender:rt(n.inputs,e.getChain().consensusParameters.baseAssetId)}}process.stdout.write("");var x=class{constructor(t){this.config=t}callHandlers=[];blockHandlers=[];provider;static bind(t){let e=new x(t);return g.INSTANCE.addValue(e),e}async configure(){let t=y(this.config.chainId);this.provider=await P.create(t)}onTransfer(t,e){let r=[],n=J(t.assetId),s=J(t.from),o=J(t.to);for(let l of n)for(let f of s)for(let c of o)r.push({assetId:l,fromAddress:f,toAddress:c});let i={handler:async l=>{let f=l.transaction,c=E(f,this.provider),d={from:[],to:[]};for(let u of c.transaction.inputs||[])u.type==R.Coin&&d.from.push({address:u.owner,assetId:u.assetId});for(let u of c.transaction.outputs||[])if(u.type==q.Coin){let k=u.amount.toString(10);d.to.push({address:u.to,amount:BigInt(k),assetId:u.assetId})}let p=d.from[0].assetId||"",F=new C(this.config.chainId,p,this.config.name??"",l.timestamp||new Date(0),c,null);return await e(d,F),F.stopAndGetResult()},assetConfig:{filters:r}};return this.callHandlers.push(i),this}};function J(a){return a?Array.isArray(a)?a.length>0?a:[void 0]:[a]:[void 0]}process.stdout.write("");var S=A($(),1);import{mergeProcessResults as pt}from"@sentio/runtime";var I=class{constructor(t){this.config=t}callHandlers=[];blockHandlers=[];provider;contract;static bind(t){let e=new I(t);return g.INSTANCE.addValue(e),e}latestGasPrice;async configure(){let t=y(this.config.chainId);this.provider=await P.create(t),this.provider.getLatestGasPrice=async()=>{if(this.latestGasPrice)return h(this.latestGasPrice);let{latestGasPrice:e}=await this.provider.operations.getLatestGasPrice();return this.latestGasPrice=e?.gasPrice,h(e.gasPrice)},this.contract=new Y(this.config.address,this.config.abi,this.provider)}onTransaction(t,e=v){let r={handler:async n=>{let s=this.config.abi?{[this.config.address]:this.config.abi}:{},o=await _(n.transaction,s,this.provider),i=new b(this.config.chainId,this.contract,this.config.address,this.config.name??this.config.address,n.timestamp||new Date(0),o,null);return await t(o,i),i.stopAndGetResult()},fetchConfig:{filters:[],...e}};return this.callHandlers.push(r),this}onCall(t,e,r=v){let n=new Set(Array.isArray(t)?t:[t]);if(!this.config.abi)throw new Error("ABI must be provided to use onCall");let s=this.config.abi,o={},i=new B(s);for(let f of n)try{let c=i.functions[f],d=h(c.selector,"hex").toString();o[c.name]={function:d,includeFailed:!!r.includeFailed}}catch(c){console.error(c)}let l={handler:async f=>{try{let c=f.transaction,d=await _(c,{[this.config.address]:s},this.provider),p=new C(this.config.chainId,this.config.address,this.config.name??this.config.address,f.timestamp||new Date(0),d,null);for(let F of d.operations)for(let u of F.calls||[])if(n.has(u.functionName)){let k=this.contract.functions[u.functionName],H=Object.values(u.argumentsProvided||{}),G=k(...H),dt=new L(G,d,!1,u.argumentsProvided,d.logs);await e(dt,p)}return p.stopAndGetResult()}catch(c){return console.error(c),{gauges:[],counters:[],events:[],exports:[],states:{configUpdated:!1}}}},fetchConfig:{filters:Object.values(o)}};return this.callHandlers.push(l),this}onLog(t,e){let r=new Set(Array.isArray(t)?t:[t]),n={handler:async s=>{try{let o=s.transaction,i=await _(o,{[this.config.address]:this.config.abi},this.provider),l=[],f=(i.logs||[]).filter(c=>r.has(c.logId));for(let c of f){let d=new b(this.config.chainId,this.contract,this.config.address,this.config.name??this.config.address,s.timestamp||new Date(0),i,null);d.setLogIndex(c.receiptIndex),await e(c,d),l.push(d.stopAndGetResult())}return pt(l)}catch(o){return console.error(o),{gauges:[],counters:[],events:[],exports:[],states:{configUpdated:!1}}}},logConfig:{logIds:Array.from(r)}};return this.callHandlers.push(n),this}onInterval(t,e,r){e&&e.backfillInterval<e.recentInterval&&(e.backfillInterval=e.recentInterval);let n=this;return this.blockHandlers.push({blockInterval:r,timeIntervalInMinutes:e,handler:async function(s){let o=s.block;if(!o)throw new S.ServerError(S.Status.INVALID_ARGUMENT,"Block is empty");let i={id:o.id,height:h(o.height),time:o.time,header:{applicationHash:o.applicationHash,daHeight:h(o.daHeight),eventInboxRoot:o.eventInboxRoot,messageOutboxRoot:o.messageOutboxRoot,prevRoot:o.prevRoot,stateTransitionBytecodeVersion:o.stateTransitionBytecodeVersion,transactionsCount:o.transactionsCount,transactionsRoot:o.transactionsRoot}},l=new b(n.config.chainId,n.contract,n.config.address,n.config.name??n.config.address,s.timestamp||new Date(0),null,i);return await t(i,l),l.stopAndGetResult()}}),this}onBlockInterval(t,e=250,r=1e3){return this.onInterval(t,void 0,{recentInterval:e,backfillInterval:r})}onTimeInterval(t,e=60,r=240){return this.onInterval(t,{recentInterval:e,backfillInterval:r},void 0)}};process.stdout.write("");import{mergeProcessResults as gt}from"@sentio/runtime";var T=class{constructor(t){this.config=t}callHandlers=[];blockHandlers=[];provider;static bind(t){let e=new T(t);return g.INSTANCE.addValue(e),e}async configure(){let t=y(this.config.chainId);this.provider=await P.create(t)}onTransaction(t,e=v){let r={handler:async n=>{let s;try{s=E(n.transaction,this.provider)}catch(i){return console.error("error decoding transaction",i),gt([])}let o=new C(this.config.chainId,"*",this.config.name??"*",n.timestamp||new Date(0),s,null);return await t(s,o),o.stopAndGetResult()},fetchConfig:{filters:[],...e}};return this.callHandlers.push(r),this}};process.stdout.write("");var D=class extends mt{name="FuelPlugin";handlers={callHandlers:[],blockHandlers:[]};async configure(t){let e={callHandlers:[],blockHandlers:[]};for(let r of g.INSTANCE.getValues()){await r.configure();let n=W.fromPartial({processorType:Ct,contract:{name:r.config.name,chainId:r.config.chainId.toString(),address:r.config.address||"*",abi:""},startBlock:r.config.startBlock,endBlock:r.config.endBlock});for(let s of r.callHandlers){let o=e.callHandlers.push(s.handler)-1;if(r instanceof I)if(s.logConfig?.logIds?.length)n.fuelLogConfigs.push({logIds:s.logConfig.logIds,handlerId:o});else{let i={handlerId:o,filters:s.fetchConfig?.filters||[]};n.fuelCallConfigs.push(i)}else if(r instanceof x){let i=s.assetConfig;n.assetConfigs.push({filters:i?.filters||[],handlerId:o})}else if(r instanceof T){let i={handlerId:o,filters:[]};n.fuelCallConfigs.push(i),n.contract.address="*"}}for(let s of r.blockHandlers){let o=e.blockHandlers.push(s.handler)-1;n.intervalConfigs.push({slot:0,slotInterval:s.blockInterval,minutes:0,minutesInterval:s.timeIntervalInMinutes,handlerId:o,fetchConfig:void 0})}t.contractConfigs.push(n)}this.handlers=e}supportedHandlers=[w.FUEL_CALL,w.FUEL_BLOCK];processBinding(t){switch(t.handlerType){case w.FUEL_CALL:return this.processTransaction(t);case w.FUEL_BLOCK:return this.processBlock(t);default:throw new m.ServerError(m.Status.INVALID_ARGUMENT,"No handle type registered "+t.handlerType)}}async start(t){}stateDiff(t){return et.INSTANCE.getValues().length!==t.templateInstances.length}async processTransaction(t){if(!t.data?.fuelCall?.transaction)throw new m.ServerError(m.Status.INVALID_ARGUMENT,"transaction can't be null");let e=t.data.fuelCall,r=[];for(let n of t.handlerIds){let s=this.handlers.callHandlers[n](e).catch(o=>{throw new m.ServerError(m.Status.INTERNAL,"error processing transaction: "+JSON.stringify(e.transaction)+`
3
- `+st(o))});nt.execution.sequential&&await s,r.push(s)}return at(await Promise.all(r))}async processBlock(t){if(!t.data?.fuelBlock?.block)throw new m.ServerError(m.Status.INVALID_ARGUMENT,"Block can't be empty");let e=t.data.fuelBlock,r=[];for(let n of t.handlerIds){let s=this.handlers.blockHandlers[n](e).catch(o=>{throw console.error("error processing block: ",o),new m.ServerError(m.Status.INTERNAL,"error processing block: "+e.block?.height+`
4
- `+st(o))});nt.execution.sequential&&await s,r.push(s)}return at(await Promise.all(r))}};ht.INSTANCE.register(new D);process.stdout.write("");var lt=A(ot(),1);var it=class extends I{constructor(t,e){e||(e={chainId:lt.FuelChainId.FUEL_MAINNET,address:"*"}),super({...e,abi:t}),g.INSTANCE.addValue(this)}},ct=class{args;returnValue;argsObject;logs};process.stdout.write("");process.stdout.write("");export{g as a,ft as b,y as c,L as d,C as e,b as f,v as g,E as h,_ as i,x as j,I as k,T as l,D as m,it as n,ct as o};
5
- //# sourceMappingURL=chunk-4M6V2KTG.js.map
2
+ import{a as ot}from"./chunk-7H2MCYRO.js";import{D as w,Mc as $,Rb as z,Sb as B,Tb as R,Ub as q,Vb as N,W,Wb as U,gd as tt,ld as et,oc as V,pc as Q,qc as X,rc as P,sc as Y,uc as Z}from"./chunk-U5TG5VF6.js";import{g as h,l as G}from"./chunk-5ZKQRZMR.js";import{e as A,g as K}from"./chunk-LLHU72AA.js";import{errorString as st,GLOBAL_CONFIG as nt,mergeProcessResults as at,Plugin as mt,PluginManager as ht,USER_PROCESSOR as Ct}from"@sentio/runtime";var m=A($(),1);import{ListStateStorage as ut}from"@sentio/runtime";var M=class extends ut{},g=M;K(g,"INSTANCE",new M);process.stdout.write("");var j=A(ot(),1),ft={MAIN_NET:j.FuelChainId.FUEL_MAINNET,TEST_NET:j.FuelChainId.FUEL_TESTNET};function y(s){switch(s){case ft.TEST_NET:return"https://testnet.fuel.network/v1/graphql"}return"https://testnet.fuel.network/v1/graphql"}process.stdout.write("");var L=class{constructor(t,e,r,a,n){this.args=a;this.logs=n}},C=class extends tt{constructor(e,r,a,n,o,i){super({});this.chainId=e;this.contractAddress=r;this.contractName=a;this.timestamp=n;this.transaction=o;this.block=i}logIndex=-1;getChainId(){return this.chainId}setLogIndex(e){this.logIndex=e}getMetaDataInternal(e,r){return{address:this.contractAddress,contractName:this.contractName,blockNumber:BigInt(this.block?.height?.toString()??(this.transaction?.blockNumber||0)),transactionIndex:0,transactionHash:this.transaction?.id||"",chainId:this.getChainId(),name:e,logIndex:this.logIndex,labels:Z(r)}}},b=class extends C{constructor(e,r,a,n,o,i,l){super(e,a,n,o,i,l);this.chainId=e;this.contract=r;this.contractAddress=a;this.contractName=n;this.timestamp=o;this.transaction=i;this.block=l}get provider(){return this.contract.provider}};process.stdout.write("");var v={includeFailed:!1};function rt(s,t){for(let e of s||[])if(e.type==R.Coin&&e.assetId==t)return e.owner}function E(s,t){let e=G(s.rawPayload),r=s?.status.receipts?.map(V)||[],[a]=new U().decode(e,0),{gasCosts:n,feeParameters:o,txParameters:i,baseAssetId:l}=t.getChain().consensusParameters,f=s.status?.block?.header?.height,{gasPriceFactor:c,gasPerByte:d}=o,{maxInputs:p,maxGasPerTx:F}=i,u={type:s.status?.__typename,...s.status};return{...Q({id:s.id,receipts:r,transaction:a,transactionBytes:e,gqlTransactionStatus:u,gasPerByte:h(d),gasPriceFactor:h(c),maxInputs:p,gasCosts:n,gasPrice:h(s.gasPrice),maxGasPerTx:F,baseAssetId:l}),blockNumber:f,sender:rt(a.inputs,l)}}async function S(s,t,e){let r=G(s.rawPayload),[a]=new U().decode(r,0),n=s?.status.receipts?.map(V)||[],o={type:s.status?.__typename,...s.status},i=o?.block?.header?.height,l=Object.values(t)[0],f=[];n.forEach((p,F)=>{if(p.type===N.LogData||p.type===N.Log){let u=new B(l),k=p.type===N.Log?new z("u64").encode(p.val0):p.data,H=p.val1.toString(),[O]=u.decodeLog(k,H);f.push({logId:H,data:O,receiptIndex:F})}});let c=new X(s.status.transactionId,e,{main:Object.values(t)[0],otherContractsAbis:{}});return c.gqlTransaction={...s,status:o},{...await c.getTransactionSummary(),blockNumber:i,logs:f,sender:rt(a.inputs,e.getChain().consensusParameters.baseAssetId)}}process.stdout.write("");var x=class{constructor(t){this.config=t}callHandlers=[];blockHandlers=[];provider;static bind(t){let e=new x(t);return g.INSTANCE.addValue(e),e}async configure(){let t=y(this.config.chainId);this.provider=await P.create(t)}onTransfer(t,e){let r=[],a=J(t.assetId),n=J(t.from),o=J(t.to);for(let l of a)for(let f of n)for(let c of o)r.push({assetId:l,fromAddress:f,toAddress:c});let i={handler:async l=>{let f=l.transaction,c=E(f,this.provider),d={from:[],to:[]};for(let u of c.transaction.inputs||[])u.type==R.Coin&&d.from.push({address:u.owner,assetId:u.assetId});for(let u of c.transaction.outputs||[])if(u.type==q.Coin){let k=u.amount.toString(10);d.to.push({address:u.to,amount:BigInt(k),assetId:u.assetId})}let p=d.from[0].assetId||"",F=new C(this.config.chainId,p,this.config.name??"",l.timestamp||new Date(0),c,null);return await e(d,F),F.stopAndGetResult()},assetConfig:{filters:r}};return this.callHandlers.push(i),this}};function J(s){return s?Array.isArray(s)?s.length>0?s:[void 0]:[s]:[void 0]}process.stdout.write("");var _=A($(),1);import{mergeProcessResults as pt}from"@sentio/runtime";var I=class{constructor(t){this.config=t}callHandlers=[];blockHandlers=[];provider;contract;static bind(t){let e=new I(t);return g.INSTANCE.addValue(e),e}latestGasPrice;async configure(){let t=y(this.config.chainId);this.provider=await P.create(t),this.provider.getLatestGasPrice=async()=>{if(this.latestGasPrice)return h(this.latestGasPrice);let{latestGasPrice:e}=await this.provider.operations.getLatestGasPrice();return this.latestGasPrice=e?.gasPrice,h(e.gasPrice)},this.contract=new Y(this.config.address,this.config.abi,this.provider)}onTransaction(t,e=v){let r={handler:async a=>{let n=this.config.abi?{[this.config.address]:this.config.abi}:{},o=await S(a.transaction,n,this.provider),i=new b(this.config.chainId,this.contract,this.config.address,this.config.name??this.config.address,a.timestamp||new Date(0),o,null);return await t(o,i),i.stopAndGetResult()},fetchConfig:{filters:[],...e}};return this.callHandlers.push(r),this}onCall(t,e,r=v){let a=new Set(Array.isArray(t)?t:[t]);if(!this.config.abi)throw new Error("ABI must be provided to use onCall");let n=this.config.abi,o={},i=new B(n);for(let f of a)try{let c=i.functions[f],d=h(c.selector,"hex").toString();o[c.name]={function:d,includeFailed:!!r.includeFailed}}catch(c){console.error(c)}let l={handler:async f=>{try{let c=f.transaction,d=await S(c,{[this.config.address]:n},this.provider),p=new C(this.config.chainId,this.config.address,this.config.name??this.config.address,f.timestamp||new Date(0),d,null);for(let F of d.operations)for(let u of F.calls||[])if(a.has(u.functionName)){let k=this.contract.functions[u.functionName],H=Object.values(u.argumentsProvided||{}),O=k(...H),dt=new L(O,d,!1,u.argumentsProvided,d.logs);await e(dt,p)}return p.stopAndGetResult()}catch(c){return console.error(c),{gauges:[],counters:[],events:[],exports:[],states:{configUpdated:!1}}}},fetchConfig:{filters:Object.values(o)}};return this.callHandlers.push(l),this}onLog(t,e){let r=new Set(Array.isArray(t)?t:[t]),a={handler:async n=>{try{let o=n.transaction,i=await S(o,{[this.config.address]:this.config.abi},this.provider),l=[],f=(i.logs||[]).filter(c=>r.has(c.logId));for(let c of f){let d=new b(this.config.chainId,this.contract,this.config.address,this.config.name??this.config.address,n.timestamp||new Date(0),i,null);d.setLogIndex(c.receiptIndex),await e(c,d),l.push(d.stopAndGetResult())}return pt(l)}catch(o){return console.error(o),{gauges:[],counters:[],events:[],exports:[],states:{configUpdated:!1}}}},logConfig:{logIds:Array.from(r)}};return this.callHandlers.push(a),this}onInterval(t,e,r){e&&e.backfillInterval<e.recentInterval&&(e.backfillInterval=e.recentInterval);let a=this;return this.blockHandlers.push({blockInterval:r,timeIntervalInMinutes:e,handler:async function(n){let o=n.block;if(!o)throw new _.ServerError(_.Status.INVALID_ARGUMENT,"Block is empty");let i={id:o.id,height:h(o.height),time:o.time,header:{applicationHash:o.applicationHash,daHeight:h(o.daHeight),eventInboxRoot:o.eventInboxRoot,messageOutboxRoot:o.messageOutboxRoot,prevRoot:o.prevRoot,stateTransitionBytecodeVersion:o.stateTransitionBytecodeVersion,transactionsCount:o.transactionsCount,transactionsRoot:o.transactionsRoot}},l=new b(a.config.chainId,a.contract,a.config.address,a.config.name??a.config.address,n.timestamp||new Date(0),null,i);return await t(i,l),l.stopAndGetResult()}}),this}onBlockInterval(t,e=250,r=1e3){return this.onInterval(t,void 0,{recentInterval:e,backfillInterval:r})}onTimeInterval(t,e=60,r=240){return this.onInterval(t,{recentInterval:e,backfillInterval:r},void 0)}};function te(s){let t=[s.address];return s.chainId&&t.push(s.chainId),s.name&&t.push(s.name),s.startBlock&&t.push(s.startBlock.toString()),s.endBlock&&t.push(s.endBlock.toString()),t.join("_")}process.stdout.write("");import{mergeProcessResults as gt}from"@sentio/runtime";var T=class{constructor(t){this.config=t}callHandlers=[];blockHandlers=[];provider;static bind(t){let e=new T(t);return g.INSTANCE.addValue(e),e}async configure(){let t=y(this.config.chainId);this.provider=await P.create(t)}onTransaction(t,e=v){let r={handler:async a=>{let n;try{n=E(a.transaction,this.provider)}catch(i){return console.error("error decoding transaction",i),gt([])}let o=new C(this.config.chainId,"*",this.config.name??"*",a.timestamp||new Date(0),n,null);return await t(n,o),o.stopAndGetResult()},fetchConfig:{filters:[],...e}};return this.callHandlers.push(r),this}};process.stdout.write("");var D=class extends mt{name="FuelPlugin";handlers={callHandlers:[],blockHandlers:[]};async configure(t){let e={callHandlers:[],blockHandlers:[]};for(let r of g.INSTANCE.getValues()){await r.configure();let a=W.fromPartial({processorType:Ct,contract:{name:r.config.name,chainId:r.config.chainId.toString(),address:r.config.address||"*",abi:""},startBlock:r.config.startBlock,endBlock:r.config.endBlock});for(let n of r.callHandlers){let o=e.callHandlers.push(n.handler)-1;if(r instanceof I)if(n.logConfig?.logIds?.length)a.fuelLogConfigs.push({logIds:n.logConfig.logIds,handlerId:o});else{let i={handlerId:o,filters:n.fetchConfig?.filters||[]};a.fuelCallConfigs.push(i)}else if(r instanceof x){let i=n.assetConfig;a.assetConfigs.push({filters:i?.filters||[],handlerId:o})}else if(r instanceof T){let i={handlerId:o,filters:[]};a.fuelCallConfigs.push(i),a.contract.address="*"}}for(let n of r.blockHandlers){let o=e.blockHandlers.push(n.handler)-1;a.intervalConfigs.push({slot:0,slotInterval:n.blockInterval,minutes:0,minutesInterval:n.timeIntervalInMinutes,handlerId:o,fetchConfig:void 0})}t.contractConfigs.push(a)}this.handlers=e}supportedHandlers=[w.FUEL_CALL,w.FUEL_BLOCK];processBinding(t){switch(t.handlerType){case w.FUEL_CALL:return this.processTransaction(t);case w.FUEL_BLOCK:return this.processBlock(t);default:throw new m.ServerError(m.Status.INVALID_ARGUMENT,"No handle type registered "+t.handlerType)}}async start(t){}stateDiff(t){return et.INSTANCE.getValues().length!==t.templateInstances.length}async processTransaction(t){if(!t.data?.fuelCall?.transaction)throw new m.ServerError(m.Status.INVALID_ARGUMENT,"transaction can't be null");let e=t.data.fuelCall,r=[];for(let a of t.handlerIds){let n=this.handlers.callHandlers[a](e).catch(o=>{throw new m.ServerError(m.Status.INTERNAL,"error processing transaction: "+JSON.stringify(e.transaction)+`
3
+ `+st(o))});nt.execution.sequential&&await n,r.push(n)}return at(await Promise.all(r))}async processBlock(t){if(!t.data?.fuelBlock?.block)throw new m.ServerError(m.Status.INVALID_ARGUMENT,"Block can't be empty");let e=t.data.fuelBlock,r=[];for(let a of t.handlerIds){let n=this.handlers.blockHandlers[a](e).catch(o=>{throw console.error("error processing block: ",o),new m.ServerError(m.Status.INTERNAL,"error processing block: "+e.block?.height+`
4
+ `+st(o))});nt.execution.sequential&&await n,r.push(n)}return at(await Promise.all(r))}};ht.INSTANCE.register(new D);process.stdout.write("");var lt=A(ot(),1);var it=class extends I{constructor(t,e){e||(e={chainId:lt.FuelChainId.FUEL_MAINNET,address:"*"}),super({...e,abi:t}),g.INSTANCE.addValue(this)}},ct=class{args;returnValue;argsObject;logs};process.stdout.write("");process.stdout.write("");export{g as a,ft as b,y as c,L as d,C as e,b as f,v as g,E as h,S as i,x as j,I as k,te as l,T as m,D as n,it as o,ct as p};
5
+ //# sourceMappingURL=chunk-RY7UEG2S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/fuel/fuel-plugin.ts","../src/fuel/types.ts","../src/fuel/network.ts","../src/fuel/context.ts","../src/fuel/transaction.ts","../src/fuel/asset-processor.ts","../src/fuel/fuel-processor.ts","../src/fuel/global-processor.ts","../src/fuel/base-processor.ts","../src/fuel/index.ts"],"sourcesContent":["import { errorString, GLOBAL_CONFIG, mergeProcessResults, Plugin, PluginManager, USER_PROCESSOR } from '@sentio/runtime'\nimport {\n ContractConfig,\n Data_FuelBlock,\n Data_FuelCall,\n DataBinding,\n HandlerType,\n ProcessConfigResponse,\n ProcessResult,\n StartRequest\n} from '@sentio/protos'\n\nimport { ServerError, Status } from 'nice-grpc'\nimport { TemplateInstanceState } from '../core/template.js'\nimport { FuelAssetProcessor } from './asset-processor.js'\nimport { FuelProcessorState } from './types.js'\nimport { FuelProcessor } from './fuel-processor.js'\nimport { FuelGlobalProcessor } from './global-processor.js'\n\ninterface Handlers {\n callHandlers: ((trace: Data_FuelCall) => Promise<ProcessResult>)[]\n blockHandlers: ((block: Data_FuelBlock) => Promise<ProcessResult>)[]\n}\n\nexport class FuelPlugin extends Plugin {\n name: string = 'FuelPlugin'\n handlers: Handlers = {\n callHandlers: [],\n blockHandlers: []\n }\n\n async configure(config: ProcessConfigResponse) {\n const handlers: Handlers = {\n callHandlers: [],\n blockHandlers: []\n }\n\n for (const processor of FuelProcessorState.INSTANCE.getValues()) {\n await processor.configure()\n const contractConfig = ContractConfig.fromPartial({\n processorType: USER_PROCESSOR,\n contract: {\n name: processor.config.name,\n chainId: processor.config.chainId.toString(),\n address: processor.config.address || '*',\n abi: ''\n },\n startBlock: processor.config.startBlock,\n endBlock: processor.config.endBlock\n })\n for (const callHandler of processor.callHandlers) {\n const handlerId = handlers.callHandlers.push(callHandler.handler) - 1\n if (processor instanceof FuelProcessor) {\n if (callHandler.logConfig?.logIds?.length) {\n contractConfig.fuelLogConfigs.push({\n logIds: callHandler.logConfig.logIds,\n handlerId\n })\n } else {\n const fetchConfig = {\n handlerId,\n filters: callHandler.fetchConfig?.filters || []\n }\n contractConfig.fuelCallConfigs.push(fetchConfig)\n }\n } else if (processor instanceof FuelAssetProcessor) {\n const assetConfig = callHandler.assetConfig\n contractConfig.assetConfigs.push({\n filters: assetConfig?.filters || [],\n handlerId\n })\n } else if (processor instanceof FuelGlobalProcessor) {\n const fetchConfig = {\n handlerId,\n filters: []\n }\n contractConfig.fuelCallConfigs.push(fetchConfig)\n contractConfig.contract!.address = '*'\n }\n }\n\n for (const blockHandler of processor.blockHandlers) {\n const handlerId = handlers.blockHandlers.push(blockHandler.handler) - 1\n contractConfig.intervalConfigs.push({\n slot: 0,\n slotInterval: blockHandler.blockInterval,\n minutes: 0,\n minutesInterval: blockHandler.timeIntervalInMinutes,\n handlerId: handlerId,\n fetchConfig: undefined\n // fetchConfig: blockHandler.fetchConfig\n })\n }\n\n // Finish up a contract\n config.contractConfigs.push(contractConfig)\n }\n\n this.handlers = handlers\n }\n\n supportedHandlers = [HandlerType.FUEL_CALL, HandlerType.FUEL_BLOCK]\n\n processBinding(request: DataBinding): Promise<ProcessResult> {\n switch (request.handlerType) {\n case HandlerType.FUEL_CALL:\n return this.processTransaction(request)\n case HandlerType.FUEL_BLOCK:\n return this.processBlock(request)\n default:\n throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType)\n }\n }\n\n async start(request: StartRequest) {}\n\n stateDiff(config: ProcessConfigResponse): boolean {\n return TemplateInstanceState.INSTANCE.getValues().length !== config.templateInstances.length\n }\n\n async processTransaction(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data?.fuelCall?.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"transaction can't be null\")\n }\n const fuelTransaction = binding.data.fuelCall\n\n const promises: Promise<ProcessResult>[] = []\n\n for (const handlerId of binding.handlerIds) {\n const promise = this.handlers.callHandlers[handlerId](fuelTransaction).catch((e) => {\n throw new ServerError(\n Status.INTERNAL,\n 'error processing transaction: ' + JSON.stringify(fuelTransaction.transaction) + '\\n' + errorString(e)\n )\n })\n if (GLOBAL_CONFIG.execution.sequential) {\n await promise\n }\n promises.push(promise)\n }\n return mergeProcessResults(await Promise.all(promises))\n }\n\n async processBlock(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data?.fuelBlock?.block) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Block can't be empty\")\n }\n const ethBlock = binding.data.fuelBlock\n\n const promises: Promise<ProcessResult>[] = []\n for (const handlerId of binding.handlerIds) {\n const promise = this.handlers.blockHandlers[handlerId](ethBlock).catch((e) => {\n console.error('error processing block: ', e)\n throw new ServerError(\n Status.INTERNAL,\n 'error processing block: ' + ethBlock.block?.height + '\\n' + errorString(e)\n )\n })\n if (GLOBAL_CONFIG.execution.sequential) {\n await promise\n }\n promises.push(promise)\n }\n return mergeProcessResults(await Promise.all(promises))\n }\n}\n\nPluginManager.INSTANCE.register(new FuelPlugin())\n;process.stdout.write(\"\");","import { ListStateStorage } from '@sentio/runtime'\nimport {\n Data_FuelBlock,\n Data_FuelCall,\n FuelAssetHandlerConfig,\n FuelCallHandlerConfig,\n HandleInterval,\n OnIntervalConfig,\n ProcessResult\n} from '@sentio/protos'\nimport { Block, TransactionSummary } from 'fuels'\n\nexport interface FuelBaseProcessor<T> {\n configure(): Promise<void>\n config: T\n callHandlers: CallHandler<Data_FuelCall>[]\n blockHandlers: BlockHandler[]\n}\n\nexport class FuelProcessorState extends ListStateStorage<FuelBaseProcessor<any>> {\n static INSTANCE = new FuelProcessorState()\n}\n\nexport type CallHandler<T> = {\n handler: (call: T) => Promise<ProcessResult>\n fetchConfig?: Partial<FuelCallHandlerConfig>\n assetConfig?: Partial<FuelAssetHandlerConfig>\n logConfig?: {\n logIds: string[]\n }\n}\n\nexport type BlockHandler = {\n blockInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handler: (block: Data_FuelBlock) => Promise<ProcessResult>\n fetchConfig?: Partial<OnIntervalConfig>\n}\n\nexport interface FuelLog<T> {\n logId: string\n data: T\n receiptIndex: number\n}\n\nexport type FuelTransaction = TransactionSummary & {\n blockNumber?: string\n logs?: FuelLog<any>[]\n sender?: string\n}\n\nexport type FuelBlock = Omit<Block, 'transactionIds'>\n;process.stdout.write(\"\");","import { FuelChainId } from '@sentio/chain'\n\nexport type FuelNetwork = FuelChainId\nexport const FuelNetwork = <const>{\n MAIN_NET: FuelChainId.FUEL_MAINNET,\n TEST_NET: FuelChainId.FUEL_TESTNET\n}\n\nexport function getRpcEndpoint(network: FuelNetwork): string {\n switch (network) {\n case FuelNetwork.TEST_NET:\n return 'https://testnet.fuel.network/v1/graphql'\n }\n return 'https://testnet.fuel.network/v1/graphql'\n}\n;process.stdout.write(\"\");","import { BaseContext, Labels, normalizeLabels } from '../core/index.js'\nimport { FuelChainId } from '@sentio/chain'\nimport { RecordMetaData } from '@sentio/protos'\nimport type { CallResult, Contract } from 'fuels'\nimport { InvocationScopeLike } from 'fuels'\nimport { FuelBlock, FuelLog, FuelTransaction } from './types.js'\n\nexport class FuelCall {\n constructor(\n funcScopes: InvocationScopeLike | Array<InvocationScopeLike>,\n callResult: CallResult,\n isMultiCall: boolean,\n readonly args?: Record<string, any>,\n readonly logs?: FuelLog<unknown>[]\n ) {\n // super(funcScopes, callResult, isMultiCall)\n }\n}\n\nexport class FuelContext extends BaseContext {\n private logIndex: number = -1\n constructor(\n readonly chainId: FuelChainId,\n readonly contractAddress: string,\n readonly contractName: string,\n readonly timestamp: Date,\n readonly transaction: FuelTransaction | null,\n readonly block: FuelBlock | null\n ) {\n super({})\n }\n\n getChainId(): FuelChainId {\n return this.chainId\n }\n\n setLogIndex(logIndex: number): void {\n this.logIndex = logIndex\n }\n\n protected getMetaDataInternal(name: string, labels: Labels): RecordMetaData {\n return {\n address: this.contractAddress,\n contractName: this.contractName,\n blockNumber: BigInt(this.block?.height?.toString() ?? (this.transaction?.blockNumber || 0)),\n transactionIndex: 0,\n transactionHash: this.transaction?.id || '', // TODO\n chainId: this.getChainId(),\n name: name,\n logIndex: this.logIndex,\n labels: normalizeLabels(labels)\n }\n }\n}\n\nexport class FuelContractContext<TContract extends Contract> extends FuelContext {\n constructor(\n readonly chainId: FuelChainId,\n readonly contract: TContract,\n readonly contractAddress: string,\n readonly contractName: string,\n readonly timestamp: Date,\n readonly transaction: FuelTransaction | null,\n readonly block: FuelBlock | null\n ) {\n super(chainId, contractAddress, contractName, timestamp, transaction, block)\n }\n\n get provider() {\n return this.contract.provider\n }\n}\n;process.stdout.write(\"\");","import {\n AbiMap,\n arrayify,\n assembleTransactionSummary,\n BigNumberCoder,\n bn,\n Input,\n InputType,\n Interface,\n processGqlReceipt,\n Provider,\n ReceiptType,\n TransactionCoder,\n TransactionResponse\n} from 'fuels'\nimport { FuelLog, FuelTransaction } from './types.js'\n\nexport type FuelFetchConfig = {\n includeFailed?: boolean\n}\n\nexport const DEFAULT_FUEL_FETCH_CONFIG: FuelFetchConfig = {\n includeFailed: false\n}\n\nfunction findSenderFromInputs(inputs: Input[] | undefined, baseAssetId: string): string | undefined {\n for (const input of inputs || []) {\n if (input.type == InputType.Coin && input.assetId == baseAssetId) {\n return input.owner\n }\n }\n return undefined\n}\n\nexport function decodeFuelTransaction(gqlTransaction: any, provider: Provider): FuelTransaction {\n const rawPayload = arrayify(gqlTransaction.rawPayload)\n const receipts = gqlTransaction?.status.receipts?.map(processGqlReceipt) || []\n\n const [decodedTransaction] = new TransactionCoder().decode(rawPayload, 0)\n const { gasCosts, feeParameters, txParameters, baseAssetId } = provider.getChain().consensusParameters\n const blockNumber = gqlTransaction.status?.block?.header?.height\n const { gasPriceFactor, gasPerByte } = feeParameters\n const { maxInputs, maxGasPerTx } = txParameters\n const gqlTransactionStatus = {\n type: gqlTransaction.status?.__typename,\n ...gqlTransaction.status\n }\n return {\n ...assembleTransactionSummary({\n id: gqlTransaction.id,\n receipts,\n transaction: decodedTransaction,\n transactionBytes: rawPayload,\n gqlTransactionStatus,\n gasPerByte: bn(gasPerByte),\n gasPriceFactor: bn(gasPriceFactor),\n maxInputs,\n gasCosts,\n gasPrice: bn(gqlTransaction.gasPrice),\n maxGasPerTx,\n baseAssetId\n }),\n blockNumber,\n sender: findSenderFromInputs(decodedTransaction.inputs, baseAssetId)\n }\n}\n\nexport async function decodeFuelTransactionWithAbi(\n gqlTransaction: any,\n abiMap: AbiMap,\n provider: Provider\n): Promise<FuelTransaction> {\n const rawPayload = arrayify(gqlTransaction.rawPayload)\n const [decodedTransaction] = new TransactionCoder().decode(rawPayload, 0)\n\n const receipts = gqlTransaction?.status.receipts?.map(processGqlReceipt) || []\n\n // const {\n // consensusParameters: {\n // feeParameters: { gasPerByte, gasPriceFactor },\n // txParameters: { maxInputs, maxGasPerTx },\n // gasCosts\n // }\n // } = provider.getChain()\n //\n const gqlTransactionStatus = {\n type: gqlTransaction.status?.__typename,\n ...gqlTransaction.status\n }\n\n const blockNumber = gqlTransactionStatus?.block?.header?.height\n const abi = Object.values(abiMap)[0]\n const logs = [] as FuelLog<any>[]\n ;(receipts as any[]).forEach((receipt, idx) => {\n if (receipt.type === ReceiptType.LogData || receipt.type === ReceiptType.Log) {\n const interfaceToUse = new Interface(abi)\n const data = receipt.type === ReceiptType.Log ? new BigNumberCoder('u64').encode(receipt.val0) : receipt.data\n const logId = receipt.val1.toString()\n const [decodedLog] = interfaceToUse.decodeLog(data, logId)\n logs.push({ logId, data: decodedLog, receiptIndex: idx })\n }\n })\n\n const txResponse = new TransactionResponse(gqlTransaction.status.transactionId, provider, {\n main: Object.values(abiMap)[0],\n otherContractsAbis: {}\n })\n\n // @ts-ignore - hack\n txResponse.gqlTransaction = {\n ...gqlTransaction,\n status: gqlTransactionStatus\n }\n const summary = await txResponse.getTransactionSummary()\n\n return {\n /*...assembleTransactionSummary({\n id: gqlTransaction.id,\n receipts,\n transaction: decodedTransaction,\n transactionBytes: rawPayload,\n gqlTransactionStatus,\n gasPerByte: bn(gasPerByte),\n gasPriceFactor: bn(gasPriceFactor),\n abiMap,\n maxInputs,\n gasCosts,\n maxGasPerTx,\n gasPrice: bn(gqlTransaction.gasPrice)\n }),*/\n ...summary,\n blockNumber,\n logs,\n sender: findSenderFromInputs(decodedTransaction.inputs, provider.getChain().consensusParameters.baseAssetId)\n }\n}\n;process.stdout.write(\"\");","import { CallHandler, FuelBaseProcessor, FuelProcessorState } from './types.js'\nimport { Data_FuelCall, FuelAssetHandlerConfig_AssetFilter } from '@sentio/protos'\nimport { FuelNetwork, getRpcEndpoint } from './network.js'\nimport { FuelContext } from './context.js'\nimport { decodeFuelTransaction } from './transaction.js'\nimport { Provider, InputType, OutputType } from 'fuels'\n\nexport class FuelAssetProcessor implements FuelBaseProcessor<FuelAssetProcessorConfig> {\n callHandlers: CallHandler<Data_FuelCall>[] = []\n blockHandlers = []\n private provider: Provider\n\n static bind(config: FuelAssetProcessorConfig): FuelAssetProcessor {\n const processor = new FuelAssetProcessor(config)\n FuelProcessorState.INSTANCE.addValue(processor)\n return processor\n }\n\n constructor(readonly config: FuelAssetProcessorConfig) {}\n\n async configure(): Promise<void> {\n const url = getRpcEndpoint(this.config.chainId)\n this.provider = await Provider.create(url)\n }\n\n onTransfer(filter: TransferFilter, handler: (transfers: FuelTransfer, ctx: FuelContext) => void | Promise<void>) {\n const filters: FuelAssetHandlerConfig_AssetFilter[] = []\n\n const assetIds = arrayify(filter.assetId)\n const froms = arrayify(filter.from)\n const tos = arrayify(filter.to)\n\n for (const assetId of assetIds) {\n for (const from of froms) {\n for (const to of tos) {\n filters.push({\n assetId: assetId,\n fromAddress: from,\n toAddress: to\n })\n }\n }\n }\n\n const callHandler = {\n handler: async (call: Data_FuelCall) => {\n const gqlTransaction = call.transaction\n const tx = decodeFuelTransaction(gqlTransaction, this.provider)\n\n const transfer: FuelTransfer = {\n from: [],\n to: []\n }\n for (const input of tx.transaction.inputs || []) {\n if (input.type == InputType.Coin) {\n transfer.from.push({\n address: input.owner,\n assetId: input.assetId\n })\n }\n }\n\n for (const output of tx.transaction.outputs || []) {\n if (output.type == OutputType.Coin) {\n const value = output.amount.toString(10)\n transfer.to.push({\n address: output.to,\n amount: BigInt(value),\n assetId: output.assetId\n })\n }\n }\n\n const assetId = transfer.from[0].assetId || ''\n\n const ctx = new FuelContext(\n this.config.chainId,\n assetId,\n this.config.name ?? '',\n call.timestamp || new Date(0),\n tx,\n null\n )\n await handler(transfer, ctx)\n return ctx.stopAndGetResult()\n },\n assetConfig: {\n filters\n }\n }\n this.callHandlers.push(callHandler)\n return this\n }\n}\n\nexport type FuelAssetProcessorConfig = {\n name?: string\n chainId: FuelNetwork\n startBlock?: bigint\n endBlock?: bigint\n}\n\nexport type TransferFilter = {\n from?: string | string[]\n to?: string | string[]\n assetId?: string | string[]\n}\n\nexport type FuelTransfer = {\n from: {\n assetId: string\n address: string\n }[]\n to: {\n address: string\n amount: bigint\n assetId: string\n }[]\n}\n\nfunction arrayify(value?: string | string[]): Array<string | undefined> {\n if (value) {\n if (Array.isArray(value)) {\n return value.length > 0 ? value : [undefined]\n }\n return [value]\n }\n return [undefined]\n}\n;process.stdout.write(\"\");","import { Data_FuelBlock, Data_FuelCall, FuelCallFilter, HandleInterval, ProcessResult } from '@sentio/protos'\nimport { FuelCall, FuelContext, FuelContractContext } from './context.js'\nimport { bn, Contract, Interface, JsonAbi, Provider } from 'fuels'\nimport { FuelNetwork, getRpcEndpoint } from './network.js'\nimport { decodeFuelTransactionWithAbi, DEFAULT_FUEL_FETCH_CONFIG, FuelFetchConfig } from './transaction.js'\nimport {\n BlockHandler,\n CallHandler,\n FuelBaseProcessor,\n FuelBlock,\n FuelLog,\n FuelProcessorState,\n FuelTransaction\n} from './types.js'\nimport { mergeProcessResults } from '@sentio/runtime'\nimport { PromiseOrVoid } from '../core/index.js'\nimport { ServerError, Status } from 'nice-grpc'\n\nexport class FuelProcessor<TContract extends Contract> implements FuelBaseProcessor<FuelProcessorConfig> {\n callHandlers: CallHandler<Data_FuelCall>[] = []\n blockHandlers: BlockHandler[] = []\n\n private provider: Provider\n private contract: TContract\n\n static bind(config: FuelProcessorConfig): FuelProcessor<any> {\n const processor = new FuelProcessor(config)\n FuelProcessorState.INSTANCE.addValue(processor)\n return processor\n }\n\n constructor(readonly config: FuelProcessorConfig) {}\n\n latestGasPrice: string | undefined\n async configure() {\n const url = getRpcEndpoint(this.config.chainId)\n this.provider = await Provider.create(url)\n this.provider.getLatestGasPrice = async () => {\n // avoid flood the endpoint, cache the latest gas price\n if (this.latestGasPrice) {\n return bn(this.latestGasPrice)\n }\n const { latestGasPrice } = await this.provider.operations.getLatestGasPrice()\n this.latestGasPrice = latestGasPrice?.gasPrice\n return bn(latestGasPrice.gasPrice)\n }\n\n this.contract = new Contract(this.config.address, this.config.abi!, this.provider) as TContract\n }\n\n public onTransaction(\n handler: (transaction: FuelTransaction, ctx: FuelContractContext<TContract>) => PromiseOrVoid,\n config: FuelFetchConfig = DEFAULT_FUEL_FETCH_CONFIG\n ) {\n const callHandler = {\n handler: async (call: Data_FuelCall) => {\n const abiMap = this.config.abi\n ? {\n [this.config.address]: this.config.abi\n }\n : {}\n const tx = await decodeFuelTransactionWithAbi(call.transaction, abiMap, this.provider)\n\n const ctx = new FuelContractContext(\n this.config.chainId,\n this.contract,\n this.config.address,\n this.config.name ?? this.config.address,\n call.timestamp || new Date(0),\n tx,\n null\n )\n await handler(tx, ctx)\n return ctx.stopAndGetResult()\n },\n fetchConfig: {\n filters: [],\n ...config\n }\n }\n this.callHandlers.push(callHandler)\n return this\n }\n\n // hide onCall for now\n private onCall(\n nameFilter: string | string[],\n handler: (call: FuelCall, ctx: FuelContext) => void | Promise<void>,\n config: FuelFetchConfig = DEFAULT_FUEL_FETCH_CONFIG\n ) {\n const names = new Set(Array.isArray(nameFilter) ? nameFilter : [nameFilter])\n\n if (!this.config.abi) {\n throw new Error('ABI must be provided to use onCall')\n }\n const abi = this.config.abi\n\n const filters: Record<string, FuelCallFilter> = {}\n const abiInterface = new Interface(abi)\n for (const name of names) {\n try {\n const func = abiInterface.functions[name]\n const filter = bn(func.selector, 'hex').toString()\n filters[func.name] = {\n function: filter,\n includeFailed: !!config.includeFailed\n }\n } catch (e) {\n console.error(e)\n }\n }\n\n const callHandler = {\n handler: async (call: Data_FuelCall) => {\n try {\n // const contract = new Contract(this.config.address, abi, this.provider)\n const gqlTransaction = call.transaction\n const tx = await decodeFuelTransactionWithAbi(gqlTransaction, { [this.config.address]: abi }, this.provider)\n\n const ctx = new FuelContext(\n this.config.chainId,\n this.config.address,\n this.config.name ?? this.config.address,\n call.timestamp || new Date(0),\n tx,\n null\n )\n for (const op of tx.operations) {\n for (const call of op.calls || []) {\n if (names.has(call.functionName)) {\n const fn = this.contract.functions[call.functionName]\n const args = Object.values(call.argumentsProvided || {})\n const scope = fn(...args)\n const invocationResult = new FuelCall(scope, tx, false, call.argumentsProvided, tx.logs)\n await handler(invocationResult, ctx)\n }\n }\n }\n\n return ctx.stopAndGetResult()\n } catch (e) {\n console.error(e)\n return {\n gauges: [],\n counters: [],\n events: [],\n exports: [],\n states: {\n configUpdated: false\n }\n }\n }\n },\n fetchConfig: {\n filters: Object.values(filters)\n }\n }\n this.callHandlers.push(callHandler)\n return this\n }\n\n public onLog<T>(\n logIdFilter: string | string[],\n handler: (logs: FuelLog<T>, ctx: FuelContractContext<TContract>) => PromiseOrVoid\n ) {\n const logIds = new Set(Array.isArray(logIdFilter) ? logIdFilter : [logIdFilter])\n\n const callHandler = {\n handler: async (call: Data_FuelCall) => {\n try {\n const gqlTransaction = call.transaction\n const tx = await decodeFuelTransactionWithAbi(\n gqlTransaction,\n { [this.config.address]: this.config.abi! },\n this.provider\n )\n\n const results: ProcessResult[] = []\n const logs = (tx.logs || []).filter((log) => logIds.has(log.logId))\n for (const log of logs) {\n const ctx = new FuelContractContext(\n this.config.chainId,\n this.contract,\n this.config.address,\n this.config.name ?? this.config.address,\n call.timestamp || new Date(0),\n tx,\n null\n )\n ctx.setLogIndex(log.receiptIndex)\n await handler(log, ctx)\n results.push(ctx.stopAndGetResult())\n }\n return mergeProcessResults(results)\n } catch (e) {\n console.error(e)\n return {\n gauges: [],\n counters: [],\n events: [],\n exports: [],\n states: {\n configUpdated: false\n }\n }\n }\n },\n logConfig: {\n logIds: Array.from(logIds)\n }\n }\n this.callHandlers.push(callHandler)\n return this\n }\n\n public onInterval(\n handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n blockInterval: HandleInterval | undefined\n // fetchConfig: Partial<FuelFetchConfig> | undefined\n ): this {\n if (timeInterval) {\n if (timeInterval.backfillInterval < timeInterval.recentInterval) {\n timeInterval.backfillInterval = timeInterval.recentInterval\n }\n }\n\n const processor = this\n\n this.blockHandlers.push({\n blockInterval,\n timeIntervalInMinutes: timeInterval,\n handler: async function (data: Data_FuelBlock) {\n const header = data.block\n if (!header) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Block is empty')\n }\n\n const block: FuelBlock = {\n id: header.id,\n height: bn(header.height),\n time: header.time,\n header: {\n applicationHash: header.applicationHash,\n daHeight: bn(header.daHeight),\n eventInboxRoot: header.eventInboxRoot,\n messageOutboxRoot: header.messageOutboxRoot,\n prevRoot: header.prevRoot,\n stateTransitionBytecodeVersion: header.stateTransitionBytecodeVersion,\n transactionsCount: header.transactionsCount,\n transactionsRoot: header.transactionsRoot\n }\n }\n\n const ctx = new FuelContractContext(\n processor.config.chainId,\n processor.contract,\n processor.config.address,\n processor.config.name ?? processor.config.address,\n data.timestamp || new Date(0),\n null,\n block\n )\n await handler(block, ctx)\n return ctx.stopAndGetResult()\n }\n })\n return this\n }\n\n public onBlockInterval(\n handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid,\n blockInterval = 250,\n backfillBlockInterval = 1000\n // fetchConfig?: Partial<FuelFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n undefined,\n {\n recentInterval: blockInterval,\n backfillInterval: backfillBlockInterval\n }\n // fetchConfig,\n )\n }\n\n public onTimeInterval(\n handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240\n // fetchConfig?: Partial<FuelFetchConfig>,\n ): this {\n return this.onInterval(\n handler,\n { recentInterval: timeIntervalInMinutes, backfillInterval: backfillTimeIntervalInMinutes },\n undefined\n // fetchConfig\n )\n }\n}\n\nexport type FuelProcessorConfig = {\n address: string\n name?: string\n chainId: FuelNetwork\n startBlock?: bigint\n endBlock?: bigint\n abi: JsonAbi\n}\n\nexport function getOptionsSignature(opts: Omit<FuelProcessorConfig, 'abi'>): string {\n const sig = [opts.address]\n if (opts.chainId) {\n sig.push(opts.chainId)\n }\n if (opts.name) {\n sig.push(opts.name)\n }\n if (opts.startBlock) {\n sig.push(opts.startBlock.toString())\n }\n if (opts.endBlock) {\n sig.push(opts.endBlock.toString())\n }\n return sig.join('_')\n}\n;process.stdout.write(\"\");","import { CallHandler, FuelBaseProcessor, FuelProcessorState, FuelTransaction } from './types.js'\nimport { Data_FuelCall } from '@sentio/protos'\nimport { Provider } from 'fuels'\nimport { getRpcEndpoint } from './network.js'\nimport { decodeFuelTransaction, DEFAULT_FUEL_FETCH_CONFIG, FuelFetchConfig } from './transaction.js'\nimport { FuelContext } from './context.js'\nimport { FuelProcessorConfig } from './fuel-processor.js'\nimport { mergeProcessResults } from '@sentio/runtime'\n\ntype GlobalFuelProcessorConfig = Omit<FuelProcessorConfig, 'address' | 'abi'>\n\nexport class FuelGlobalProcessor implements FuelBaseProcessor<GlobalFuelProcessorConfig> {\n callHandlers: CallHandler<Data_FuelCall>[] = []\n blockHandlers = []\n\n private provider: Provider\n\n static bind(config: GlobalFuelProcessorConfig): FuelGlobalProcessor {\n const processor = new FuelGlobalProcessor(config)\n FuelProcessorState.INSTANCE.addValue(processor)\n return processor\n }\n\n constructor(readonly config: GlobalFuelProcessorConfig) {}\n\n async configure() {\n const url = getRpcEndpoint(this.config.chainId)\n this.provider = await Provider.create(url)\n }\n\n public onTransaction(\n handler: (transaction: FuelTransaction, ctx: FuelContext) => void | Promise<void>,\n config: FuelFetchConfig = DEFAULT_FUEL_FETCH_CONFIG\n ) {\n const callHandler = {\n handler: async (call: Data_FuelCall) => {\n let tx: FuelTransaction\n try {\n tx = decodeFuelTransaction(call.transaction, this.provider)\n } catch (e) {\n console.error('error decoding transaction', e)\n return mergeProcessResults([])\n }\n const ctx = new FuelContext(\n this.config.chainId,\n '*',\n this.config.name ?? '*',\n call.timestamp || new Date(0),\n tx,\n null\n )\n await handler(tx, ctx)\n return ctx.stopAndGetResult()\n },\n fetchConfig: {\n filters: [],\n ...config\n }\n }\n this.callHandlers.push(callHandler)\n return this\n }\n}\n;process.stdout.write(\"\");","import { FuelProcessor, FuelProcessorConfig } from './fuel-processor.js'\nimport { Contract, JsonAbi } from 'fuels'\n// import { FuelCall } from './context.js'\nimport { FuelChainId } from '@sentio/chain'\nimport { FuelLog, FuelProcessorState } from './types.js'\n\nexport abstract class FuelAbstractProcessor<TContract extends Contract> extends FuelProcessor<TContract> {\n protected constructor(abi: JsonAbi, config?: Omit<FuelProcessorConfig, 'abi'>) {\n if (!config) {\n config = {\n chainId: FuelChainId.FUEL_MAINNET,\n address: '*'\n }\n }\n super({\n ...config,\n abi\n })\n FuelProcessorState.INSTANCE.addValue(this)\n }\n}\n\nexport class TypedCall<T extends Array<any>, R> {\n args: T\n returnValue: R\n argsObject?: Record<string, any>\n logs?: FuelLog<unknown>[]\n\n // constructor(call: FuelCall) {\n // this.args = call.args as T\n // this.returnValue = call.value as R\n // this.argsObject = call.args\n // this.logs = call.logs\n // }\n}\n;process.stdout.write(\"\");","export { FuelPlugin } from './fuel-plugin.js'\nexport * from './context.js'\nexport * from './fuel-processor.js'\nexport * from './network.js'\nexport * from './transaction.js'\nexport * from './base-processor.js'\nexport * from './asset-processor.js'\nexport * from './types.js'\nexport * from './global-processor.js'\n;process.stdout.write(\"\");"],"mappings":"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","names":["errorString","GLOBAL_CONFIG","mergeProcessResults","Plugin","PluginManager","USER_PROCESSOR","import_nice_grpc","ListStateStorage","_FuelProcessorState","ListStateStorage","FuelProcessorState","__publicField","import_chain","FuelNetwork","getRpcEndpoint","network","FuelCall","funcScopes","callResult","isMultiCall","args","logs","FuelContext","BaseContext","chainId","contractAddress","contractName","timestamp","transaction","block","logIndex","name","labels","normalizeLabels","FuelContractContext","contract","DEFAULT_FUEL_FETCH_CONFIG","findSenderFromInputs","inputs","baseAssetId","input","InputType","decodeFuelTransaction","gqlTransaction","provider","rawPayload","arrayify","receipts","processGqlReceipt","decodedTransaction","TransactionCoder","gasCosts","feeParameters","txParameters","blockNumber","gasPriceFactor","gasPerByte","maxInputs","maxGasPerTx","gqlTransactionStatus","assembleTransactionSummary","bn","decodeFuelTransactionWithAbi","abiMap","abi","logs","receipt","idx","ReceiptType","interfaceToUse","Interface","data","BigNumberCoder","logId","decodedLog","txResponse","TransactionResponse","FuelAssetProcessor","config","processor","FuelProcessorState","url","getRpcEndpoint","Provider","filter","handler","filters","assetIds","arrayify","froms","tos","assetId","from","to","callHandler","call","gqlTransaction","tx","decodeFuelTransaction","transfer","input","InputType","output","OutputType","value","ctx","FuelContext","import_nice_grpc","mergeProcessResults","FuelProcessor","config","processor","FuelProcessorState","url","getRpcEndpoint","Provider","bn","latestGasPrice","Contract","handler","DEFAULT_FUEL_FETCH_CONFIG","callHandler","call","abiMap","tx","decodeFuelTransactionWithAbi","ctx","FuelContractContext","nameFilter","names","abi","filters","abiInterface","Interface","name","func","filter","e","gqlTransaction","FuelContext","op","fn","args","scope","invocationResult","FuelCall","logIdFilter","logIds","results","logs","log","timeInterval","blockInterval","data","header","block","backfillBlockInterval","timeIntervalInMinutes","backfillTimeIntervalInMinutes","getOptionsSignature","opts","sig","mergeProcessResults","FuelGlobalProcessor","config","processor","FuelProcessorState","url","getRpcEndpoint","Provider","handler","DEFAULT_FUEL_FETCH_CONFIG","callHandler","call","tx","decodeFuelTransaction","e","ctx","FuelContext","FuelPlugin","Plugin","config","handlers","processor","FuelProcessorState","contractConfig","ContractConfig","USER_PROCESSOR","callHandler","handlerId","FuelProcessor","fetchConfig","FuelAssetProcessor","assetConfig","FuelGlobalProcessor","blockHandler","HandlerType","request","TemplateInstanceState","binding","fuelTransaction","promises","promise","e","errorString","GLOBAL_CONFIG","mergeProcessResults","ethBlock","PluginManager","import_chain","FuelAbstractProcessor","FuelProcessor","abi","config","FuelProcessorState","TypedCall"]}
@@ -1,5 +1,5 @@
1
1
  import { BaseContext, Labels } from '../core/index.js';
2
- import { ChainId } from '@sentio/chain';
2
+ import { FuelChainId } from '@sentio/chain';
3
3
  import { RecordMetaData } from '@sentio/protos';
4
4
  import type { CallResult, Contract } from 'fuels';
5
5
  import { InvocationScopeLike } from 'fuels';
@@ -10,27 +10,27 @@ export declare class FuelCall {
10
10
  constructor(funcScopes: InvocationScopeLike | Array<InvocationScopeLike>, callResult: CallResult, isMultiCall: boolean, args?: Record<string, any> | undefined, logs?: FuelLog<unknown>[] | undefined);
11
11
  }
12
12
  export declare class FuelContext extends BaseContext {
13
- readonly chainId: ChainId;
13
+ readonly chainId: FuelChainId;
14
14
  readonly contractAddress: string;
15
15
  readonly contractName: string;
16
16
  readonly timestamp: Date;
17
17
  readonly transaction: FuelTransaction | null;
18
18
  readonly block: FuelBlock | null;
19
19
  private logIndex;
20
- constructor(chainId: ChainId, contractAddress: string, contractName: string, timestamp: Date, transaction: FuelTransaction | null, block: FuelBlock | null);
21
- getChainId(): ChainId;
20
+ constructor(chainId: FuelChainId, contractAddress: string, contractName: string, timestamp: Date, transaction: FuelTransaction | null, block: FuelBlock | null);
21
+ getChainId(): FuelChainId;
22
22
  setLogIndex(logIndex: number): void;
23
23
  protected getMetaDataInternal(name: string, labels: Labels): RecordMetaData;
24
24
  }
25
25
  export declare class FuelContractContext<TContract extends Contract> extends FuelContext {
26
- readonly chainId: ChainId;
26
+ readonly chainId: FuelChainId;
27
27
  readonly contract: TContract;
28
28
  readonly contractAddress: string;
29
29
  readonly contractName: string;
30
30
  readonly timestamp: Date;
31
31
  readonly transaction: FuelTransaction | null;
32
32
  readonly block: FuelBlock | null;
33
- constructor(chainId: ChainId, contract: TContract, contractAddress: string, contractName: string, timestamp: Date, transaction: FuelTransaction | null, block: FuelBlock | null);
33
+ constructor(chainId: FuelChainId, contract: TContract, contractAddress: string, contractName: string, timestamp: Date, transaction: FuelTransaction | null, block: FuelBlock | null);
34
34
  get provider(): import("fuels").Provider;
35
35
  }
36
36
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/fuel/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAmB,MAAM,kBAAkB,CAAA;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEhE,qBAAa,QAAQ;IAKjB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;gBAJlC,UAAU,EAAE,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC,EAC5D,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,OAAO,EACX,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YAAA,EAC1B,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,YAAA;CAIrC;AAED,qBAAa,WAAY,SAAQ,WAAW;IAGxC,QAAQ,CAAC,OAAO,EAAE,OAAO;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM;IAC7B,QAAQ,CAAC,SAAS,EAAE,IAAI;IACxB,QAAQ,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAPlC,OAAO,CAAC,QAAQ,CAAa;gBAElB,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,IAAI,EACf,WAAW,EAAE,eAAe,GAAG,IAAI,EACnC,KAAK,EAAE,SAAS,GAAG,IAAI;IAKlC,UAAU,IAAI,OAAO;IAIrB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc;CAa5E;AAED,qBAAa,mBAAmB,CAAC,SAAS,SAAS,QAAQ,CAAE,SAAQ,WAAW;IAE5E,QAAQ,CAAC,OAAO,EAAE,OAAO;IACzB,QAAQ,CAAC,QAAQ,EAAE,SAAS;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM;IAC7B,QAAQ,CAAC,SAAS,EAAE,IAAI;IACxB,QAAQ,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;gBANvB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,SAAS,EACnB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,IAAI,EACf,WAAW,EAAE,eAAe,GAAG,IAAI,EACnC,KAAK,EAAE,SAAS,GAAG,IAAI;IAKlC,IAAI,QAAQ,6BAEX;CACF"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/fuel/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAmB,MAAM,kBAAkB,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEhE,qBAAa,QAAQ;IAKjB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;gBAJlC,UAAU,EAAE,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC,EAC5D,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,OAAO,EACX,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YAAA,EAC1B,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,YAAA;CAIrC;AAED,qBAAa,WAAY,SAAQ,WAAW;IAGxC,QAAQ,CAAC,OAAO,EAAE,WAAW;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM;IAC7B,QAAQ,CAAC,SAAS,EAAE,IAAI;IACxB,QAAQ,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAPlC,OAAO,CAAC,QAAQ,CAAa;gBAElB,OAAO,EAAE,WAAW,EACpB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,IAAI,EACf,WAAW,EAAE,eAAe,GAAG,IAAI,EACnC,KAAK,EAAE,SAAS,GAAG,IAAI;IAKlC,UAAU,IAAI,WAAW;IAIzB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc;CAa5E;AAED,qBAAa,mBAAmB,CAAC,SAAS,SAAS,QAAQ,CAAE,SAAQ,WAAW;IAE5E,QAAQ,CAAC,OAAO,EAAE,WAAW;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM;IAC7B,QAAQ,CAAC,SAAS,EAAE,IAAI;IACxB,QAAQ,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;IAC5C,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;gBANvB,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,SAAS,EACnB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,IAAI,EACf,WAAW,EAAE,eAAe,GAAG,IAAI,EACnC,KAAK,EAAE,SAAS,GAAG,IAAI;IAKlC,IAAI,QAAQ,6BAEX;CACF"}
@@ -0,0 +1,42 @@
1
+ import { FuelContext, FuelContractContext } from './context.js';
2
+ import { HandleInterval } from '@sentio/protos';
3
+ import { PromiseOrVoid } from '../core/promises.js';
4
+ import { ListStateStorage } from '@sentio/runtime';
5
+ import { Contract } from 'fuels';
6
+ import { FuelBlock, FuelLog, FuelTransaction } from './types.js';
7
+ import { FuelFetchConfig } from './transaction.js';
8
+ import { FuelProcessor, FuelProcessorConfig } from './fuel-processor.js';
9
+ export declare class FuelProcessorTemplateProcessorState extends ListStateStorage<FuelBaseProcessorTemplate<Contract>> {
10
+ static INSTANCE: FuelProcessorTemplateProcessorState;
11
+ }
12
+ export declare abstract class FuelBaseProcessorTemplate<TContract extends Contract> {
13
+ id: number;
14
+ binds: Set<string>;
15
+ blockHandlers: {
16
+ handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid;
17
+ blockInterval?: HandleInterval;
18
+ timeIntervalInMinutes?: HandleInterval;
19
+ }[];
20
+ logHandlers: {
21
+ logIdFilter: string | string[];
22
+ handler: (logs: FuelLog<any>, ctx: FuelContractContext<TContract>) => PromiseOrVoid;
23
+ }[];
24
+ transactionHandlers: {
25
+ handler: (transaction: FuelTransaction, ctx: FuelContractContext<TContract>) => PromiseOrVoid;
26
+ fetchConfig: FuelFetchConfig;
27
+ }[];
28
+ constructor();
29
+ /**
30
+ * Bind template using {@param options}, using {@param ctx}'s network value if not provided in the option
31
+ * @param options
32
+ * @param ctx
33
+ */
34
+ bind(options: Omit<Omit<FuelProcessorConfig, 'chainId'>, 'abi'>, ctx: FuelContext): void;
35
+ protected onLog(logIdFilter: string | string[], handler: (logs: FuelLog<any>, ctx: FuelContractContext<TContract>) => PromiseOrVoid): this;
36
+ onBlockInterval(handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid, blockInterval?: number, backfillBlockInterval?: number): this;
37
+ onTimeInterval(handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid, timeIntervalInMinutes?: number, backfillBlockInterval?: number): this;
38
+ onInterval(handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid, timeInterval: HandleInterval | undefined, blockInterval: HandleInterval | undefined): this;
39
+ protected onTransaction(handler: (transaction: FuelTransaction, ctx: FuelContractContext<TContract>) => PromiseOrVoid, config?: FuelFetchConfig): this;
40
+ protected abstract bindInternal(options: Omit<FuelProcessorConfig, 'abi'>): FuelProcessor<TContract>;
41
+ }
42
+ //# sourceMappingURL=fuel-processor-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuel-processor-template.d.ts","sourceRoot":"","sources":["../../src/fuel/fuel-processor-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAoB,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAChE,OAAO,EAA6B,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAuB,MAAM,qBAAqB,CAAA;AAE7F,qBAAa,mCAAoC,SAAQ,gBAAgB,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAC5G,MAAM,CAAC,QAAQ,sCAA4C;CAC5D;AAED,8BAAsB,yBAAyB,CAAC,SAAS,SAAS,QAAQ;IACxE,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,cAAoB;IACzB,aAAa,EAAE;QACb,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,aAAa,CAAA;QACjF,aAAa,CAAC,EAAE,cAAc,CAAA;QAC9B,qBAAqB,CAAC,EAAE,cAAc,CAAA;KAEvC,EAAE,CAAK;IAER,WAAW,EAAE;QACX,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;QAC9B,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,aAAa,CAAA;KAEpF,EAAE,CAAK;IAER,mBAAmB,EAAE;QACnB,OAAO,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,aAAa,CAAA;QAC7F,WAAW,EAAE,eAAe,CAAA;KAC7B,EAAE,CAAK;;IAOR;;;;OAIG;IACI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI;IA4C/F,SAAS,CAAC,KAAK,CACb,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,EAC9B,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,aAAa;IAW9E,eAAe,CACpB,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,aAAa,EACjF,aAAa,SAAO,EACpB,qBAAqB,SAAO;IAcvB,cAAc,CACnB,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,aAAa,EACjF,qBAAqB,SAAK,EAC1B,qBAAqB,SAAM;IAWtB,UAAU,CACf,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,aAAa,EACjF,YAAY,EAAE,cAAc,GAAG,SAAS,EACxC,aAAa,EAAE,cAAc,GAAG,SAAS;IAY3C,SAAS,CAAC,aAAa,CACrB,OAAO,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,aAAa,EAC7F,MAAM,GAAE,eAA2C;IASrD,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC;CACrG"}
@@ -15,9 +15,9 @@ export declare class FuelProcessor<TContract extends Contract> implements FuelBa
15
15
  constructor(config: FuelProcessorConfig);
16
16
  latestGasPrice: string | undefined;
17
17
  configure(): Promise<void>;
18
- onTransaction(handler: (transaction: FuelTransaction, ctx: FuelContractContext<TContract>) => void | Promise<void>, config?: FuelFetchConfig): this;
18
+ onTransaction(handler: (transaction: FuelTransaction, ctx: FuelContractContext<TContract>) => PromiseOrVoid, config?: FuelFetchConfig): this;
19
19
  private onCall;
20
- onLog<T>(logIdFilter: string | string[], handler: (logs: FuelLog<T>, ctx: FuelContractContext<TContract>) => void | Promise<void>): this;
20
+ onLog<T>(logIdFilter: string | string[], handler: (logs: FuelLog<T>, ctx: FuelContractContext<TContract>) => PromiseOrVoid): this;
21
21
  onInterval(handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid, timeInterval: HandleInterval | undefined, blockInterval: HandleInterval | undefined): this;
22
22
  onBlockInterval(handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid, blockInterval?: number, backfillBlockInterval?: number): this;
23
23
  onTimeInterval(handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid, timeIntervalInMinutes?: number, backfillTimeIntervalInMinutes?: number): this;
@@ -30,4 +30,5 @@ export type FuelProcessorConfig = {
30
30
  endBlock?: bigint;
31
31
  abi: JsonAbi;
32
32
  };
33
+ export declare function getOptionsSignature(opts: Omit<FuelProcessorConfig, 'abi'>): string;
33
34
  //# sourceMappingURL=fuel-processor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fuel-processor.d.ts","sourceRoot":"","sources":["../../src/fuel/fuel-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,aAAa,EAAkB,cAAc,EAAiB,MAAM,gBAAgB,CAAA;AAC7G,OAAO,EAAyB,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EAAM,QAAQ,EAAa,OAAO,EAAY,MAAM,OAAO,CAAA;AAClE,OAAO,EAAE,WAAW,EAAkB,MAAM,cAAc,CAAA;AAC1D,OAAO,EAA2D,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC3G,OAAO,EACL,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,OAAO,EAEP,eAAe,EAChB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAGhD,qBAAa,aAAa,CAAC,SAAS,SAAS,QAAQ,CAAE,YAAW,iBAAiB,CAAC,mBAAmB,CAAC;IAa1F,QAAQ,CAAC,MAAM,EAAE,mBAAmB;IAZhD,YAAY,EAAE,WAAW,CAAC,aAAa,CAAC,EAAE,CAAK;IAC/C,aAAa,EAAE,YAAY,EAAE,CAAK;IAElC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,QAAQ,CAAW;IAE3B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAAC,GAAG,CAAC;gBAMvC,MAAM,EAAE,mBAAmB;IAEhD,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,SAAS;IAgBR,aAAa,CAClB,OAAO,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACpG,MAAM,GAAE,eAA2C;IAiCrD,OAAO,CAAC,MAAM;IA4EP,KAAK,CAAC,CAAC,EACZ,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,EAC9B,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAoDnF,UAAU,CACf,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,aAAa,EACjF,YAAY,EAAE,cAAc,GAAG,SAAS,EACxC,aAAa,EAAE,cAAc,GAAG,SAAS,GAExC,IAAI;IAkDA,eAAe,CACpB,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,aAAa,EACjF,aAAa,SAAM,EACnB,qBAAqB,SAAO,GAE3B,IAAI;IAYA,cAAc,CACnB,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,aAAa,EACjF,qBAAqB,SAAK,EAC1B,6BAA6B,SAAM,GAElC,IAAI;CAQR;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,WAAW,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,OAAO,CAAA;CACb,CAAA"}
1
+ {"version":3,"file":"fuel-processor.d.ts","sourceRoot":"","sources":["../../src/fuel/fuel-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,aAAa,EAAkB,cAAc,EAAiB,MAAM,gBAAgB,CAAA;AAC7G,OAAO,EAAyB,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EAAM,QAAQ,EAAa,OAAO,EAAY,MAAM,OAAO,CAAA;AAClE,OAAO,EAAE,WAAW,EAAkB,MAAM,cAAc,CAAA;AAC1D,OAAO,EAA2D,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC3G,OAAO,EACL,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,OAAO,EAEP,eAAe,EAChB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAGhD,qBAAa,aAAa,CAAC,SAAS,SAAS,QAAQ,CAAE,YAAW,iBAAiB,CAAC,mBAAmB,CAAC;IAa1F,QAAQ,CAAC,MAAM,EAAE,mBAAmB;IAZhD,YAAY,EAAE,WAAW,CAAC,aAAa,CAAC,EAAE,CAAK;IAC/C,aAAa,EAAE,YAAY,EAAE,CAAK;IAElC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,QAAQ,CAAW;IAE3B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAAC,GAAG,CAAC;gBAMvC,MAAM,EAAE,mBAAmB;IAEhD,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,SAAS;IAgBR,aAAa,CAClB,OAAO,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,aAAa,EAC7F,MAAM,GAAE,eAA2C;IAiCrD,OAAO,CAAC,MAAM;IA4EP,KAAK,CAAC,CAAC,EACZ,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,EAC9B,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,aAAa;IAoD5E,UAAU,CACf,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,aAAa,EACjF,YAAY,EAAE,cAAc,GAAG,SAAS,EACxC,aAAa,EAAE,cAAc,GAAG,SAAS,GAExC,IAAI;IAkDA,eAAe,CACpB,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,aAAa,EACjF,aAAa,SAAM,EACnB,qBAAqB,SAAO,GAE3B,IAAI;IAYA,cAAc,CACnB,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,CAAC,KAAK,aAAa,EACjF,qBAAqB,SAAK,EAC1B,6BAA6B,SAAM,GAElC,IAAI;CAQR;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,WAAW,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,OAAO,CAAA;CACb,CAAA;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,GAAG,MAAM,CAelF"}
package/lib/fuel/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { createRequire as createRequireSdkShim } from 'module'; const require = createRequireSdkShim(import.meta.url);
2
- import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o}from"../chunk-4M6V2KTG.js";import"../chunk-7H2MCYRO.js";import"../chunk-U5TG5VF6.js";import"../chunk-5ZKQRZMR.js";import"../chunk-PLLN42GP.js";import"../chunk-NMFPLO65.js";import"../chunk-K6FJLTBX.js";import"../chunk-GQE2JYJW.js";import"../chunk-DJQ5RDDN.js";import"../chunk-FC546GTB.js";import"../chunk-LLHU72AA.js";export{g as DEFAULT_FUEL_FETCH_CONFIG,n as FuelAbstractProcessor,j as FuelAssetProcessor,d as FuelCall,e as FuelContext,f as FuelContractContext,l as FuelGlobalProcessor,b as FuelNetwork,m as FuelPlugin,k as FuelProcessor,a as FuelProcessorState,o as TypedCall,h as decodeFuelTransaction,i as decodeFuelTransactionWithAbi,c as getRpcEndpoint};
2
+ import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p}from"../chunk-RY7UEG2S.js";import"../chunk-7H2MCYRO.js";import"../chunk-U5TG5VF6.js";import"../chunk-5ZKQRZMR.js";import"../chunk-PLLN42GP.js";import"../chunk-NMFPLO65.js";import"../chunk-K6FJLTBX.js";import"../chunk-GQE2JYJW.js";import"../chunk-DJQ5RDDN.js";import"../chunk-FC546GTB.js";import"../chunk-LLHU72AA.js";export{g as DEFAULT_FUEL_FETCH_CONFIG,o as FuelAbstractProcessor,j as FuelAssetProcessor,d as FuelCall,e as FuelContext,f as FuelContractContext,m as FuelGlobalProcessor,b as FuelNetwork,n as FuelPlugin,k as FuelProcessor,a as FuelProcessorState,p as TypedCall,h as decodeFuelTransaction,i as decodeFuelTransactionWithAbi,l as getOptionsSignature,c as getRpcEndpoint};
3
3
  //# sourceMappingURL=index.js.map
@@ -1,3 +1,3 @@
1
1
  import { createRequire as createRequireSdkShim } from 'module'; const require = createRequireSdkShim(import.meta.url);
2
- import{b as F}from"../chunk-4M6V2KTG.js";import"../chunk-UKHI5KXJ.js";import{g as _}from"../chunk-MFKD5U62.js";import"../chunk-TVIDHPKC.js";import"../chunk-ZGALPNQV.js";import{f as g}from"../chunk-FOJS2TDD.js";import"../chunk-ONBTHUMS.js";import{c as T}from"../chunk-DAAASLPS.js";import"../chunk-3FX7DHPT.js";import"../chunk-SSMP6EWG.js";import"../chunk-F2HFFA4Z.js";import"../chunk-NHARQGR7.js";import"../chunk-TWQHG3K7.js";import{d as M}from"../chunk-TBM76U52.js";import"../chunk-PNA6LFOX.js";import"../chunk-JGHAGB27.js";import{a as D,d as u,n as E}from"../chunk-4TVQXTHY.js";import"../chunk-RGTZWQOC.js";import"../chunk-3NWJLTEI.js";import"../chunk-BU4FWAXE.js";import"../chunk-2GOCSOX5.js";import{a as m}from"../chunk-7H2MCYRO.js";import{D as a}from"../chunk-U5TG5VF6.js";import"../chunk-5ZKQRZMR.js";import"../chunk-PLLN42GP.js";import"../chunk-NMFPLO65.js";import"../chunk-K6FJLTBX.js";import"../chunk-GQE2JYJW.js";import"../chunk-DJQ5RDDN.js";import{a as L}from"../chunk-FC546GTB.js";import{e as h}from"../chunk-LLHU72AA.js";var U=h(m(),1);import{Endpoints as q,ProcessorServiceImpl as G,State as j}from"@sentio/runtime";var I=class{server;constructor(e){this.server=e}testEntryFunctionCall(e,t=T.MAIN_NET){return this.testEntryFunctionCalls([e],t)}testEntryFunctionCalls(e,t=T.MAIN_NET){let n=[];for(let r of e){let s=this.buildEntryFunctionCallBinding(r,t);if(!s)throw Error("Invalid test transaction: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildEntryFunctionCallBinding(e,t=T.MAIN_NET){let n=e.payload;for(let r of this.server.contractConfigs)if(r.contract?.chainId===t){for(let s of r.moveCallConfigs)for(let o of s.filters)if(u(r.contract.address)+"::"+o.function===n.function)return{data:{aptCall:{transaction:e}},handlerIds:[s.handlerId],handlerType:a.APT_CALL}}}testEvent(e,t=T.MAIN_NET){let n=this.buildEventBinding(e,t);if(!n)throw Error("Invalid test event: "+JSON.stringify(e));return this.server.processBinding(n)}buildEventBinding(e,t=T.MAIN_NET){for(let n of this.server.contractConfigs)if(n.contract?.chainId===t){for(let r of n.moveEventConfigs)for(let s of r.filters)for(let o of e.events)if(u(n.contract.address)+"::"+s.type===E(o.type).qname)return{data:{aptEvent:{transaction:e}},handlerIds:[r.handlerId],handlerType:a.APT_EVENT}}}};process.stdout.write("");var v=class{server;constructor(e){this.server=e}testInstructions(e){return this.server.processBindings({bindings:e.map(t=>({data:{raw:new Uint8Array,solInstruction:t},handlerIds:[],handlerType:a.SOL_INSTRUCTION}))})}};process.stdout.write("");var f=h(m(),1),B=class{server;constructor(e){this.server=e}testTrace(e,t=f.EthChainId.ETHEREUM){return this.testTraces([e],t)}testTraces(e,t=f.EthChainId.ETHEREUM){let n=[];for(let r of e){let s=this.buildTraceBinding(r,t);if(!s)throw Error("Invalid test trace: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildTraceBinding(e,t=f.EthChainId.ETHEREUM){if(e.type!=="call"||!e.action.input)throw Error("Invalid test trace: "+JSON.stringify(e));let n=e.action.input.slice(0,10);for(let r of this.server.contractConfigs)if(r.contract?.chainId===t&&!(e.action.to?.toLowerCase()!==r.contract?.address.toLowerCase()&&r.contract?.address!=="*")){for(let s of r.traceConfigs)if(s.signature==n)return{data:{ethTrace:{trace:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.ETH_TRACE}}}testLog(e,t=f.EthChainId.ETHEREUM){return this.testLogs([e],t)}testLogs(e,t=f.EthChainId.ETHEREUM){let n=[];for(let r of e){let s=this.buildLogBinding(r,t);if(!s)throw Error("Invalid test log: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildLogBinding(e,t=f.EthChainId.ETHEREUM){for(let n of this.server.contractConfigs)if(n.contract?.chainId===t&&!(e.address.toLowerCase()!==n.contract?.address.toLowerCase()&&n.contract?.address!=="*"))for(let r of n.logConfigs)for(let s of r.filters){let o=!0;for(let c in s.topics){let d=e.topics[c],l=s.topics[c].hashes;if(l.length!==0&&!l.find(p=>p.toLowerCase()===d.toLowerCase())){o=!1;break}}if(o)return{data:{ethLog:{log:e,timestamp:new Date}},handlerIds:[r.handlerId],handlerType:a.ETH_LOG}}}testAccountLog(e,t,n=f.EthChainId.ETHEREUM){return this.testAccountLogs(e,[t],n)}testAccountLogs(e,t,n=f.EthChainId.ETHEREUM){let r=[];for(let s of t){let o=this.buildAccountLogBinding(e,s,n);if(!o)throw Error("Invalid test log: "+JSON.stringify(s));r.push(o)}return this.server.processBindings({bindings:r})}buildAccountLogBinding(e,t,n=f.EthChainId.ETHEREUM){for(let r of this.server.accountConfigs)if(r.chainId===n&&e.toLowerCase()===r.address.toLowerCase())for(let s of r.logConfigs)for(let o of s.filters){let c=!0;for(let d in o.topics){let l=t.topics[d],p=o.topics[d].hashes;if(p.length!==0&&!p.find(w=>w.toLowerCase()===l.toLowerCase())){c=!1;break}}if(c)return{data:{ethLog:{log:t,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.ETH_LOG}}}testBlock(e,t=f.EthChainId.ETHEREUM){return this.testBlocks([e],t)}testBlocks(e,t=f.EthChainId.ETHEREUM){let n=[];for(let r of e){let s=this.buildBlockBinding(r,t);if(!s)throw Error("Invalid test block: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildBlockBinding(e,t=f.EthChainId.ETHEREUM){let n={data:{ethBlock:{block:e}},handlerType:a.ETH_BLOCK,handlerIds:[]};for(let r of this.server.contractConfigs){if(r.contract?.chainId!==t)continue;let s=e.number;if(!(s<r.startBlock)&&!(r.endBlock!==0n&&s>=r.endBlock))for(let o of r.intervalConfigs)n.handlerIds.push(o.handlerId)}return n}};process.stdout.write("");var S=class{server;constructor(e){this.server=e}testEntryFunctionCall(e,t=g.MAIN_NET){return this.testEntryFunctionCalls([e],t)}testEntryFunctionCalls(e,t=g.MAIN_NET){let n=[];for(let r of e){let s=this.buildEntryFunctionCallBinding(r,t);if(!s)throw Error("Invalid test transaction: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildEntryFunctionCallBinding(e,t=g.MAIN_NET){let n=_(e);for(let r of n){let s=[u(r.package),r.module,r.function].join(D);for(let o of this.server.contractConfigs)if(o.contract?.chainId===t){for(let c of o.moveCallConfigs)for(let d of c.filters)if(u(o.contract.address)+"::"+d.function===s)return{data:{suiCall:{transaction:e,timestamp:new Date,slot:10000n}},handlerIds:[c.handlerId],handlerType:a.SUI_CALL}}}}testEvent(e,t=g.MAIN_NET){let n=this.buildEventBinding(e,t);if(!n)throw Error("Invalid test event: "+JSON.stringify(e));return this.server.processBinding(n)}testGlobalTransaction(e,t=g.MAIN_NET){let n=[];for(let s of this.server.contractConfigs)if(s.contract?.address==="*")for(let o of s.moveCallConfigs)o.filters.length===1&&o.filters[0].function===""&&n.push(o.handlerId);if(n.length===0)throw Error("Invalid test global transaction: "+JSON.stringify(e));let r={handlerIds:n,handlerType:a.SUI_CALL,data:{suiCall:{transaction:e,timestamp:e.timestampMs?new Date(e.timestampMs):new Date,slot:BigInt(e.checkpoint||0)}}};return this.server.processBinding(r)}buildEventBinding(e,t=g.MAIN_NET){for(let n of this.server.contractConfigs)if(n.contract?.chainId===t){for(let r of n.moveEventConfigs)for(let s of r.filters)for(let o of e.events||[])if(u(n.contract.address)+"::"+s.type===E(o.type).qname)return{data:{suiEvent:{transaction:e,timestamp:new Date(e.timestampMs||0),slot:10000n}},handlerIds:[r.handlerId],handlerType:a.SUI_EVENT}}}};process.stdout.write("");var N=class{server;constructor(e){this.server=e}testOnTransaction(e,t=F.TEST_NET){let n=this.buildBinding(e,t);if(!n)throw Error("Invalid test transaction: "+JSON.stringify(e));return this.server.processBindings({bindings:n})}buildBinding(e,t){let n=[];for(let r of this.server.contractConfigs)if(r.contract?.chainId===t){for(let s of r.fuelCallConfigs){let o={data:{fuelCall:{transaction:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.FUEL_CALL},c=s.filters[0]?.function;if(c)for(let d of e.status.receipts||[])d.receiptType=="CALL"&&d.param1==c&&n.push(o);else n.push(o)}for(let s of r.fuelLogConfigs){let o={data:{fuelCall:{transaction:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.FUEL_CALL},c=s.logIds;for(let d of e.status.receipts||[])if((d.receiptType=="LOG"||d.receiptType=="LOG_DATA")&&c.includes(d.rb)){n.push(o);break}}for(let s of r.assetConfigs){let o={data:{fuelCall:{transaction:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.FUEL_CALL};n.push(o)}}return n}};process.stdout.write("");var R=h(m(),1),x={INJECTIVE_MAINNET:R.CosmosChainId.INJECTIVE_MAINNET,INJECTIVE_TESTNET:R.CosmosChainId.INJECTIVE_TESTNET};process.stdout.write("");var P=class{server;constructor(e){this.server=e}testOnTransaction(e,t=x.INJECTIVE_TESTNET){let n=this.buildBinding(e,t);if(!n)throw Error("Invalid test transaction: "+JSON.stringify(e));return this.server.processBindings({bindings:n})}buildBinding(e,t){let n=[];for(let r of this.server.contractConfigs)if(r.contract?.chainId===t)for(let s of r.cosmosLogConfigs){let o={data:{cosmosCall:{transaction:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.COSMOS_CALL},c=s.logFilters;for(let d of e.logs||[])if(d.events.find(l=>c.includes(l.type))){n.push(o);break}}return n}};process.stdout.write("");var O=h(m(),1),y=class{server;constructor(e){this.server=e}testOnEvents(e,t=O.StarknetChainId.STARKNET_SEPOLIA){let n=this.buildBinding(e,t);if(!n)throw Error("Invalid test : "+JSON.stringify(e));return this.server.processBindings({bindings:n})}buildBinding(e,t){let n=[],r=Array.isArray(e)?e:[e];for(let s of r)for(let o of this.server.contractConfigs)if(o.contract?.chainId===t)for(let c of o.starknetEventConfigs){let d={data:{starknetEvents:{result:s,timestamp:new Date}},handlerIds:[c.handlerId],handlerType:a.STARKNET_EVENT},l=c.filters,p=s.keys;for(let w of p)for(let J of l)if(J.keys.includes(w))return n.push(d),n}return n}};process.stdout.write("");var H=h(m(),1);var b=class{server;constructor(e){this.server=e}testOnTransactions(e,t=H.BTCChainId.BTC_TESTNET){let n=this.buildBinding(e,t);if(!n)throw Error("Invalid test : "+JSON.stringify(e));return this.server.processBindings({bindings:n})}buildBinding(e,t){let n=[];for(let r of this.server.contractConfigs)if(r.contract?.chainId===t)for(let s of r.btcTransactionConfigs){let o={data:{btcTransaction:e},handlerIds:[s.handlerId],handlerType:a.BTC_TRANSACTION};n.push(o)}return n}};process.stdout.write("");var C={};function K(){j.reset()}var k=class{service;contractConfigs;accountConfigs;aptos;eth;solana;sui;fuel;cosmos;starknet;btc;constructor(e,t={}){K(),this.service=new G(e),this.aptos=new I(this),this.solana=new v(this),this.eth=new B(this),this.sui=new S(this),this.fuel=new N(this),this.cosmos=new P(this),this.starknet=new y(this),this.btc=new b(this);for(let n in U.CHAIN_MAP){let r=t[n]||"";q.INSTANCE.chainServer.set(n,r)}}async start(e={templateInstances:[]},t=C){let n=await this.service.start(e,t),r=await this.getConfig({});return this.contractConfigs=r.contractConfigs,this.accountConfigs=r.accountConfigs,n}stop(e,t=C){return this.service.stop(e,t)}getConfig(e,t=C){return this.service.getConfig(e,t)}processBindings(e,t=C){return this.service.processBindings(e,t)}processBinding(e,t=C){return this.service.processBindings({bindings:[e]},t)}processBindingsStream(e,t){throw new Error("Method not implemented.")}preprocessBindingsStream(e,t){throw new Error("Method not implemented.")}};process.stdout.write("");function A(i){if(i!==void 0){if(i.doubleValue!==void 0)return i.doubleValue;if(i.bigInteger!==void 0){let e=M(i.bigInteger.data);return i.bigInteger.negative&&(e=-e),e}if(i.bigDecimal!==void 0)return new L(i.bigDecimal)}}function X(i,e){if(i){for(let t of i.counters)if(t.metadata?.name===e)return A(t.metricValue)}}function z(i,e){if(i){for(let t of i.gauges)if(t.metadata?.name===e)return A(t.metricValue)}}process.stdout.write("");var V=h(m(),1);import{Endpoints as Q}from"@sentio/runtime";function W(i){let e=[];Array.isArray(i)||(i=[i]);for(let t of Object.keys(V.CHAIN_MAP)){let n="TEST_ENDPOINT_"+t,r=process.env[n];r&&(e.push(t),Q.INSTANCE.chainServer.set(t,r))}for(let t of i)if(!e.includes(t))return!1;return!0}process.stdout.write("");process.stdout.write("");export{A as MetricValueToNumber,k as TestProcessorServer,X as firstCounterValue,z as firstGaugeValue,W as loadTestProvidersFromEnv};
2
+ import{b as F}from"../chunk-RY7UEG2S.js";import"../chunk-UKHI5KXJ.js";import{g as _}from"../chunk-MFKD5U62.js";import"../chunk-TVIDHPKC.js";import"../chunk-ZGALPNQV.js";import{f as g}from"../chunk-FOJS2TDD.js";import"../chunk-ONBTHUMS.js";import{c as T}from"../chunk-DAAASLPS.js";import"../chunk-3FX7DHPT.js";import"../chunk-SSMP6EWG.js";import"../chunk-F2HFFA4Z.js";import"../chunk-NHARQGR7.js";import"../chunk-TWQHG3K7.js";import{d as M}from"../chunk-TBM76U52.js";import"../chunk-PNA6LFOX.js";import"../chunk-JGHAGB27.js";import{a as D,d as u,n as E}from"../chunk-4TVQXTHY.js";import"../chunk-RGTZWQOC.js";import"../chunk-3NWJLTEI.js";import"../chunk-BU4FWAXE.js";import"../chunk-2GOCSOX5.js";import{a as m}from"../chunk-7H2MCYRO.js";import{D as a}from"../chunk-U5TG5VF6.js";import"../chunk-5ZKQRZMR.js";import"../chunk-PLLN42GP.js";import"../chunk-NMFPLO65.js";import"../chunk-K6FJLTBX.js";import"../chunk-GQE2JYJW.js";import"../chunk-DJQ5RDDN.js";import{a as L}from"../chunk-FC546GTB.js";import{e as h}from"../chunk-LLHU72AA.js";var U=h(m(),1);import{Endpoints as q,ProcessorServiceImpl as G,State as j}from"@sentio/runtime";var I=class{server;constructor(e){this.server=e}testEntryFunctionCall(e,t=T.MAIN_NET){return this.testEntryFunctionCalls([e],t)}testEntryFunctionCalls(e,t=T.MAIN_NET){let n=[];for(let r of e){let s=this.buildEntryFunctionCallBinding(r,t);if(!s)throw Error("Invalid test transaction: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildEntryFunctionCallBinding(e,t=T.MAIN_NET){let n=e.payload;for(let r of this.server.contractConfigs)if(r.contract?.chainId===t){for(let s of r.moveCallConfigs)for(let o of s.filters)if(u(r.contract.address)+"::"+o.function===n.function)return{data:{aptCall:{transaction:e}},handlerIds:[s.handlerId],handlerType:a.APT_CALL}}}testEvent(e,t=T.MAIN_NET){let n=this.buildEventBinding(e,t);if(!n)throw Error("Invalid test event: "+JSON.stringify(e));return this.server.processBinding(n)}buildEventBinding(e,t=T.MAIN_NET){for(let n of this.server.contractConfigs)if(n.contract?.chainId===t){for(let r of n.moveEventConfigs)for(let s of r.filters)for(let o of e.events)if(u(n.contract.address)+"::"+s.type===E(o.type).qname)return{data:{aptEvent:{transaction:e}},handlerIds:[r.handlerId],handlerType:a.APT_EVENT}}}};process.stdout.write("");var v=class{server;constructor(e){this.server=e}testInstructions(e){return this.server.processBindings({bindings:e.map(t=>({data:{raw:new Uint8Array,solInstruction:t},handlerIds:[],handlerType:a.SOL_INSTRUCTION}))})}};process.stdout.write("");var f=h(m(),1),B=class{server;constructor(e){this.server=e}testTrace(e,t=f.EthChainId.ETHEREUM){return this.testTraces([e],t)}testTraces(e,t=f.EthChainId.ETHEREUM){let n=[];for(let r of e){let s=this.buildTraceBinding(r,t);if(!s)throw Error("Invalid test trace: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildTraceBinding(e,t=f.EthChainId.ETHEREUM){if(e.type!=="call"||!e.action.input)throw Error("Invalid test trace: "+JSON.stringify(e));let n=e.action.input.slice(0,10);for(let r of this.server.contractConfigs)if(r.contract?.chainId===t&&!(e.action.to?.toLowerCase()!==r.contract?.address.toLowerCase()&&r.contract?.address!=="*")){for(let s of r.traceConfigs)if(s.signature==n)return{data:{ethTrace:{trace:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.ETH_TRACE}}}testLog(e,t=f.EthChainId.ETHEREUM){return this.testLogs([e],t)}testLogs(e,t=f.EthChainId.ETHEREUM){let n=[];for(let r of e){let s=this.buildLogBinding(r,t);if(!s)throw Error("Invalid test log: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildLogBinding(e,t=f.EthChainId.ETHEREUM){for(let n of this.server.contractConfigs)if(n.contract?.chainId===t&&!(e.address.toLowerCase()!==n.contract?.address.toLowerCase()&&n.contract?.address!=="*"))for(let r of n.logConfigs)for(let s of r.filters){let o=!0;for(let c in s.topics){let d=e.topics[c],l=s.topics[c].hashes;if(l.length!==0&&!l.find(p=>p.toLowerCase()===d.toLowerCase())){o=!1;break}}if(o)return{data:{ethLog:{log:e,timestamp:new Date}},handlerIds:[r.handlerId],handlerType:a.ETH_LOG}}}testAccountLog(e,t,n=f.EthChainId.ETHEREUM){return this.testAccountLogs(e,[t],n)}testAccountLogs(e,t,n=f.EthChainId.ETHEREUM){let r=[];for(let s of t){let o=this.buildAccountLogBinding(e,s,n);if(!o)throw Error("Invalid test log: "+JSON.stringify(s));r.push(o)}return this.server.processBindings({bindings:r})}buildAccountLogBinding(e,t,n=f.EthChainId.ETHEREUM){for(let r of this.server.accountConfigs)if(r.chainId===n&&e.toLowerCase()===r.address.toLowerCase())for(let s of r.logConfigs)for(let o of s.filters){let c=!0;for(let d in o.topics){let l=t.topics[d],p=o.topics[d].hashes;if(p.length!==0&&!p.find(w=>w.toLowerCase()===l.toLowerCase())){c=!1;break}}if(c)return{data:{ethLog:{log:t,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.ETH_LOG}}}testBlock(e,t=f.EthChainId.ETHEREUM){return this.testBlocks([e],t)}testBlocks(e,t=f.EthChainId.ETHEREUM){let n=[];for(let r of e){let s=this.buildBlockBinding(r,t);if(!s)throw Error("Invalid test block: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildBlockBinding(e,t=f.EthChainId.ETHEREUM){let n={data:{ethBlock:{block:e}},handlerType:a.ETH_BLOCK,handlerIds:[]};for(let r of this.server.contractConfigs){if(r.contract?.chainId!==t)continue;let s=e.number;if(!(s<r.startBlock)&&!(r.endBlock!==0n&&s>=r.endBlock))for(let o of r.intervalConfigs)n.handlerIds.push(o.handlerId)}return n}};process.stdout.write("");var S=class{server;constructor(e){this.server=e}testEntryFunctionCall(e,t=g.MAIN_NET){return this.testEntryFunctionCalls([e],t)}testEntryFunctionCalls(e,t=g.MAIN_NET){let n=[];for(let r of e){let s=this.buildEntryFunctionCallBinding(r,t);if(!s)throw Error("Invalid test transaction: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildEntryFunctionCallBinding(e,t=g.MAIN_NET){let n=_(e);for(let r of n){let s=[u(r.package),r.module,r.function].join(D);for(let o of this.server.contractConfigs)if(o.contract?.chainId===t){for(let c of o.moveCallConfigs)for(let d of c.filters)if(u(o.contract.address)+"::"+d.function===s)return{data:{suiCall:{transaction:e,timestamp:new Date,slot:10000n}},handlerIds:[c.handlerId],handlerType:a.SUI_CALL}}}}testEvent(e,t=g.MAIN_NET){let n=this.buildEventBinding(e,t);if(!n)throw Error("Invalid test event: "+JSON.stringify(e));return this.server.processBinding(n)}testGlobalTransaction(e,t=g.MAIN_NET){let n=[];for(let s of this.server.contractConfigs)if(s.contract?.address==="*")for(let o of s.moveCallConfigs)o.filters.length===1&&o.filters[0].function===""&&n.push(o.handlerId);if(n.length===0)throw Error("Invalid test global transaction: "+JSON.stringify(e));let r={handlerIds:n,handlerType:a.SUI_CALL,data:{suiCall:{transaction:e,timestamp:e.timestampMs?new Date(e.timestampMs):new Date,slot:BigInt(e.checkpoint||0)}}};return this.server.processBinding(r)}buildEventBinding(e,t=g.MAIN_NET){for(let n of this.server.contractConfigs)if(n.contract?.chainId===t){for(let r of n.moveEventConfigs)for(let s of r.filters)for(let o of e.events||[])if(u(n.contract.address)+"::"+s.type===E(o.type).qname)return{data:{suiEvent:{transaction:e,timestamp:new Date(e.timestampMs||0),slot:10000n}},handlerIds:[r.handlerId],handlerType:a.SUI_EVENT}}}};process.stdout.write("");var N=class{server;constructor(e){this.server=e}testOnTransaction(e,t=F.TEST_NET){let n=this.buildBinding(e,t);if(!n)throw Error("Invalid test transaction: "+JSON.stringify(e));return this.server.processBindings({bindings:n})}buildBinding(e,t){let n=[];for(let r of this.server.contractConfigs)if(r.contract?.chainId===t){for(let s of r.fuelCallConfigs){let o={data:{fuelCall:{transaction:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.FUEL_CALL},c=s.filters[0]?.function;if(c)for(let d of e.status.receipts||[])d.receiptType=="CALL"&&d.param1==c&&n.push(o);else n.push(o)}for(let s of r.fuelLogConfigs){let o={data:{fuelCall:{transaction:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.FUEL_CALL},c=s.logIds;for(let d of e.status.receipts||[])if((d.receiptType=="LOG"||d.receiptType=="LOG_DATA")&&c.includes(d.rb)){n.push(o);break}}for(let s of r.assetConfigs){let o={data:{fuelCall:{transaction:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.FUEL_CALL};n.push(o)}}return n}};process.stdout.write("");var R=h(m(),1),x={INJECTIVE_MAINNET:R.CosmosChainId.INJECTIVE_MAINNET,INJECTIVE_TESTNET:R.CosmosChainId.INJECTIVE_TESTNET};process.stdout.write("");var P=class{server;constructor(e){this.server=e}testOnTransaction(e,t=x.INJECTIVE_TESTNET){let n=this.buildBinding(e,t);if(!n)throw Error("Invalid test transaction: "+JSON.stringify(e));return this.server.processBindings({bindings:n})}buildBinding(e,t){let n=[];for(let r of this.server.contractConfigs)if(r.contract?.chainId===t)for(let s of r.cosmosLogConfigs){let o={data:{cosmosCall:{transaction:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.COSMOS_CALL},c=s.logFilters;for(let d of e.logs||[])if(d.events.find(l=>c.includes(l.type))){n.push(o);break}}return n}};process.stdout.write("");var O=h(m(),1),y=class{server;constructor(e){this.server=e}testOnEvents(e,t=O.StarknetChainId.STARKNET_SEPOLIA){let n=this.buildBinding(e,t);if(!n)throw Error("Invalid test : "+JSON.stringify(e));return this.server.processBindings({bindings:n})}buildBinding(e,t){let n=[],r=Array.isArray(e)?e:[e];for(let s of r)for(let o of this.server.contractConfigs)if(o.contract?.chainId===t)for(let c of o.starknetEventConfigs){let d={data:{starknetEvents:{result:s,timestamp:new Date}},handlerIds:[c.handlerId],handlerType:a.STARKNET_EVENT},l=c.filters,p=s.keys;for(let w of p)for(let J of l)if(J.keys.includes(w))return n.push(d),n}return n}};process.stdout.write("");var H=h(m(),1);var b=class{server;constructor(e){this.server=e}testOnTransactions(e,t=H.BTCChainId.BTC_TESTNET){let n=this.buildBinding(e,t);if(!n)throw Error("Invalid test : "+JSON.stringify(e));return this.server.processBindings({bindings:n})}buildBinding(e,t){let n=[];for(let r of this.server.contractConfigs)if(r.contract?.chainId===t)for(let s of r.btcTransactionConfigs){let o={data:{btcTransaction:e},handlerIds:[s.handlerId],handlerType:a.BTC_TRANSACTION};n.push(o)}return n}};process.stdout.write("");var C={};function K(){j.reset()}var k=class{service;contractConfigs;accountConfigs;aptos;eth;solana;sui;fuel;cosmos;starknet;btc;constructor(e,t={}){K(),this.service=new G(e),this.aptos=new I(this),this.solana=new v(this),this.eth=new B(this),this.sui=new S(this),this.fuel=new N(this),this.cosmos=new P(this),this.starknet=new y(this),this.btc=new b(this);for(let n in U.CHAIN_MAP){let r=t[n]||"";q.INSTANCE.chainServer.set(n,r)}}async start(e={templateInstances:[]},t=C){let n=await this.service.start(e,t),r=await this.getConfig({});return this.contractConfigs=r.contractConfigs,this.accountConfigs=r.accountConfigs,n}stop(e,t=C){return this.service.stop(e,t)}getConfig(e,t=C){return this.service.getConfig(e,t)}processBindings(e,t=C){return this.service.processBindings(e,t)}processBinding(e,t=C){return this.service.processBindings({bindings:[e]},t)}processBindingsStream(e,t){throw new Error("Method not implemented.")}preprocessBindingsStream(e,t){throw new Error("Method not implemented.")}};process.stdout.write("");function A(i){if(i!==void 0){if(i.doubleValue!==void 0)return i.doubleValue;if(i.bigInteger!==void 0){let e=M(i.bigInteger.data);return i.bigInteger.negative&&(e=-e),e}if(i.bigDecimal!==void 0)return new L(i.bigDecimal)}}function X(i,e){if(i){for(let t of i.counters)if(t.metadata?.name===e)return A(t.metricValue)}}function z(i,e){if(i){for(let t of i.gauges)if(t.metadata?.name===e)return A(t.metricValue)}}process.stdout.write("");var V=h(m(),1);import{Endpoints as Q}from"@sentio/runtime";function W(i){let e=[];Array.isArray(i)||(i=[i]);for(let t of Object.keys(V.CHAIN_MAP)){let n="TEST_ENDPOINT_"+t,r=process.env[n];r&&(e.push(t),Q.INSTANCE.chainServer.set(t,r))}for(let t of i)if(!e.includes(t))return!1;return!0}process.stdout.write("");process.stdout.write("");export{A as MetricValueToNumber,k as TestProcessorServer,X as firstCounterValue,z as firstGaugeValue,W as loadTestProvidersFromEnv};
3
3
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentio/sdk-bundle",
3
- "version": "2.44.0-rc.2",
3
+ "version": "2.44.0-rc.3",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -48,7 +48,7 @@
48
48
  "!{lib,src}/*/tests"
49
49
  ],
50
50
  "dependencies": {
51
- "@sentio/runtime": "^2.44.0-rc.2"
51
+ "@sentio/runtime": "^2.44.0-rc.3"
52
52
  },
53
53
  "peerDependencies": {},
54
54
  "devDependencies": {},
@@ -1,5 +1,5 @@
1
1
  import { BaseContext, Labels, normalizeLabels } from '../core/index.js'
2
- import { ChainId } from '@sentio/chain'
2
+ import { FuelChainId } from '@sentio/chain'
3
3
  import { RecordMetaData } from '@sentio/protos'
4
4
  import type { CallResult, Contract } from 'fuels'
5
5
  import { InvocationScopeLike } from 'fuels'
@@ -20,7 +20,7 @@ export class FuelCall {
20
20
  export class FuelContext extends BaseContext {
21
21
  private logIndex: number = -1
22
22
  constructor(
23
- readonly chainId: ChainId,
23
+ readonly chainId: FuelChainId,
24
24
  readonly contractAddress: string,
25
25
  readonly contractName: string,
26
26
  readonly timestamp: Date,
@@ -30,7 +30,7 @@ export class FuelContext extends BaseContext {
30
30
  super({})
31
31
  }
32
32
 
33
- getChainId(): ChainId {
33
+ getChainId(): FuelChainId {
34
34
  return this.chainId
35
35
  }
36
36
 
@@ -55,7 +55,7 @@ export class FuelContext extends BaseContext {
55
55
 
56
56
  export class FuelContractContext<TContract extends Contract> extends FuelContext {
57
57
  constructor(
58
- readonly chainId: ChainId,
58
+ readonly chainId: FuelChainId,
59
59
  readonly contract: TContract,
60
60
  readonly contractAddress: string,
61
61
  readonly contractName: string,
@@ -0,0 +1,161 @@
1
+ import { FuelContext, FuelContractContext } from './context.js'
2
+ import { HandleInterval, TemplateInstance } from '@sentio/protos'
3
+ import { PromiseOrVoid } from '../core/promises.js'
4
+ import { ListStateStorage } from '@sentio/runtime'
5
+ import { TemplateInstanceState } from '../core/template.js'
6
+ import { Contract } from 'fuels'
7
+ import { FuelBlock, FuelLog, FuelTransaction } from './types.js'
8
+ import { DEFAULT_FUEL_FETCH_CONFIG, FuelFetchConfig } from './transaction.js'
9
+ import { FuelProcessor, FuelProcessorConfig, getOptionsSignature } from './fuel-processor.js'
10
+
11
+ export class FuelProcessorTemplateProcessorState extends ListStateStorage<FuelBaseProcessorTemplate<Contract>> {
12
+ static INSTANCE = new FuelProcessorTemplateProcessorState()
13
+ }
14
+
15
+ export abstract class FuelBaseProcessorTemplate<TContract extends Contract> {
16
+ id: number
17
+ binds = new Set<string>()
18
+ blockHandlers: {
19
+ handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid
20
+ blockInterval?: HandleInterval
21
+ timeIntervalInMinutes?: HandleInterval
22
+ // fetchConfig?: FuelFetchConfig
23
+ }[] = []
24
+
25
+ logHandlers: {
26
+ logIdFilter: string | string[]
27
+ handler: (logs: FuelLog<any>, ctx: FuelContractContext<TContract>) => PromiseOrVoid
28
+ // fetchConfig?: FuelFetchConfig
29
+ }[] = []
30
+
31
+ transactionHandlers: {
32
+ handler: (transaction: FuelTransaction, ctx: FuelContractContext<TContract>) => PromiseOrVoid
33
+ fetchConfig: FuelFetchConfig
34
+ }[] = []
35
+
36
+ constructor() {
37
+ this.id = FuelProcessorTemplateProcessorState.INSTANCE.getValues().length
38
+ FuelProcessorTemplateProcessorState.INSTANCE.addValue(this)
39
+ }
40
+
41
+ /**
42
+ * Bind template using {@param options}, using {@param ctx}'s network value if not provided in the option
43
+ * @param options
44
+ * @param ctx
45
+ */
46
+ public bind(options: Omit<Omit<FuelProcessorConfig, 'chainId'>, 'abi'>, ctx: FuelContext): void {
47
+ const sig = getOptionsSignature({
48
+ address: options.address,
49
+ chainId: ctx.chainId
50
+ })
51
+ if (this.binds.has(sig)) {
52
+ console.log(`Same address can be bind to one template only once, ignore duplicate bind: ${sig}`)
53
+ return
54
+ }
55
+ this.binds.add(sig)
56
+
57
+ const processor = this.bindInternal({ ...options, chainId: ctx.chainId })
58
+
59
+ for (const eh of this.logHandlers) {
60
+ processor.onLog(eh.logIdFilter, eh.handler)
61
+ }
62
+ for (const bh of this.blockHandlers) {
63
+ processor.onInterval(bh.handler, bh.timeIntervalInMinutes, bh.blockInterval)
64
+ }
65
+ for (const th of this.transactionHandlers) {
66
+ processor.onTransaction(th.handler)
67
+ }
68
+
69
+ const instance: TemplateInstance = {
70
+ templateId: this.id,
71
+ contract: {
72
+ address: options.address,
73
+ name: options.name || '',
74
+ chainId: ctx.chainId,
75
+ abi: ''
76
+ },
77
+ startBlock: BigInt(options.startBlock || 0),
78
+ endBlock: BigInt(options.endBlock || 0),
79
+ baseLabels: {}
80
+ // baseLabels: options.baseLabels
81
+ }
82
+ TemplateInstanceState.INSTANCE.addValue(instance)
83
+ ctx.update({
84
+ states: {
85
+ configUpdated: true
86
+ }
87
+ })
88
+ }
89
+
90
+ protected onLog(
91
+ logIdFilter: string | string[],
92
+ handler: (logs: FuelLog<any>, ctx: FuelContractContext<TContract>) => PromiseOrVoid
93
+ // fetchConfig?: Partial<FuelFetchConfig>
94
+ ) {
95
+ this.logHandlers.push({
96
+ logIdFilter,
97
+ handler
98
+ // fetchConfig: { ...fetchConfig}
99
+ })
100
+ return this
101
+ }
102
+
103
+ public onBlockInterval(
104
+ handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid,
105
+ blockInterval = 1000,
106
+ backfillBlockInterval = 4000
107
+ // fetchConfig?: Partial<FuelFetchConfig>
108
+ ) {
109
+ return this.onInterval(
110
+ handler,
111
+ undefined,
112
+ {
113
+ recentInterval: blockInterval,
114
+ backfillInterval: backfillBlockInterval
115
+ }
116
+ // fetchConfig
117
+ )
118
+ }
119
+
120
+ public onTimeInterval(
121
+ handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid,
122
+ timeIntervalInMinutes = 60,
123
+ backfillBlockInterval = 240
124
+ // fetchConfig?: Partial<FuelFetchConfig>
125
+ ) {
126
+ return this.onInterval(
127
+ handler,
128
+ { recentInterval: timeIntervalInMinutes, backfillInterval: backfillBlockInterval },
129
+ undefined
130
+ // fetchConfig
131
+ )
132
+ }
133
+
134
+ public onInterval(
135
+ handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid,
136
+ timeInterval: HandleInterval | undefined,
137
+ blockInterval: HandleInterval | undefined
138
+ // fetchConfig?: FuelFetchConfig
139
+ ) {
140
+ this.blockHandlers.push({
141
+ handler,
142
+ timeIntervalInMinutes: timeInterval,
143
+ blockInterval
144
+ // fetchConfig: { ...fetchConfig }
145
+ })
146
+ return this
147
+ }
148
+
149
+ protected onTransaction(
150
+ handler: (transaction: FuelTransaction, ctx: FuelContractContext<TContract>) => PromiseOrVoid,
151
+ config: FuelFetchConfig = DEFAULT_FUEL_FETCH_CONFIG
152
+ ) {
153
+ this.transactionHandlers.push({
154
+ handler,
155
+ fetchConfig: config
156
+ })
157
+ return this
158
+ }
159
+
160
+ protected abstract bindInternal(options: Omit<FuelProcessorConfig, 'abi'>): FuelProcessor<TContract>
161
+ }
@@ -49,7 +49,7 @@ export class FuelProcessor<TContract extends Contract> implements FuelBaseProces
49
49
  }
50
50
 
51
51
  public onTransaction(
52
- handler: (transaction: FuelTransaction, ctx: FuelContractContext<TContract>) => void | Promise<void>,
52
+ handler: (transaction: FuelTransaction, ctx: FuelContractContext<TContract>) => PromiseOrVoid,
53
53
  config: FuelFetchConfig = DEFAULT_FUEL_FETCH_CONFIG
54
54
  ) {
55
55
  const callHandler = {
@@ -161,7 +161,7 @@ export class FuelProcessor<TContract extends Contract> implements FuelBaseProces
161
161
 
162
162
  public onLog<T>(
163
163
  logIdFilter: string | string[],
164
- handler: (logs: FuelLog<T>, ctx: FuelContractContext<TContract>) => void | Promise<void>
164
+ handler: (logs: FuelLog<T>, ctx: FuelContractContext<TContract>) => PromiseOrVoid
165
165
  ) {
166
166
  const logIds = new Set(Array.isArray(logIdFilter) ? logIdFilter : [logIdFilter])
167
167
 
@@ -308,3 +308,20 @@ export type FuelProcessorConfig = {
308
308
  endBlock?: bigint
309
309
  abi: JsonAbi
310
310
  }
311
+
312
+ export function getOptionsSignature(opts: Omit<FuelProcessorConfig, 'abi'>): string {
313
+ const sig = [opts.address]
314
+ if (opts.chainId) {
315
+ sig.push(opts.chainId)
316
+ }
317
+ if (opts.name) {
318
+ sig.push(opts.name)
319
+ }
320
+ if (opts.startBlock) {
321
+ sig.push(opts.startBlock.toString())
322
+ }
323
+ if (opts.endBlock) {
324
+ sig.push(opts.endBlock.toString())
325
+ }
326
+ return sig.join('_')
327
+ }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/fuel/fuel-plugin.ts","../src/fuel/types.ts","../src/fuel/network.ts","../src/fuel/context.ts","../src/fuel/transaction.ts","../src/fuel/asset-processor.ts","../src/fuel/fuel-processor.ts","../src/fuel/global-processor.ts","../src/fuel/base-processor.ts","../src/fuel/index.ts"],"sourcesContent":["import { errorString, GLOBAL_CONFIG, mergeProcessResults, Plugin, PluginManager, USER_PROCESSOR } from '@sentio/runtime'\nimport {\n ContractConfig,\n Data_FuelBlock,\n Data_FuelCall,\n DataBinding,\n HandlerType,\n ProcessConfigResponse,\n ProcessResult,\n StartRequest\n} from '@sentio/protos'\n\nimport { ServerError, Status } from 'nice-grpc'\nimport { TemplateInstanceState } from '../core/template.js'\nimport { FuelAssetProcessor } from './asset-processor.js'\nimport { FuelProcessorState } from './types.js'\nimport { FuelProcessor } from './fuel-processor.js'\nimport { FuelGlobalProcessor } from './global-processor.js'\n\ninterface Handlers {\n callHandlers: ((trace: Data_FuelCall) => Promise<ProcessResult>)[]\n blockHandlers: ((block: Data_FuelBlock) => Promise<ProcessResult>)[]\n}\n\nexport class FuelPlugin extends Plugin {\n name: string = 'FuelPlugin'\n handlers: Handlers = {\n callHandlers: [],\n blockHandlers: []\n }\n\n async configure(config: ProcessConfigResponse) {\n const handlers: Handlers = {\n callHandlers: [],\n blockHandlers: []\n }\n\n for (const processor of FuelProcessorState.INSTANCE.getValues()) {\n await processor.configure()\n const contractConfig = ContractConfig.fromPartial({\n processorType: USER_PROCESSOR,\n contract: {\n name: processor.config.name,\n chainId: processor.config.chainId.toString(),\n address: processor.config.address || '*',\n abi: ''\n },\n startBlock: processor.config.startBlock,\n endBlock: processor.config.endBlock\n })\n for (const callHandler of processor.callHandlers) {\n const handlerId = handlers.callHandlers.push(callHandler.handler) - 1\n if (processor instanceof FuelProcessor) {\n if (callHandler.logConfig?.logIds?.length) {\n contractConfig.fuelLogConfigs.push({\n logIds: callHandler.logConfig.logIds,\n handlerId\n })\n } else {\n const fetchConfig = {\n handlerId,\n filters: callHandler.fetchConfig?.filters || []\n }\n contractConfig.fuelCallConfigs.push(fetchConfig)\n }\n } else if (processor instanceof FuelAssetProcessor) {\n const assetConfig = callHandler.assetConfig\n contractConfig.assetConfigs.push({\n filters: assetConfig?.filters || [],\n handlerId\n })\n } else if (processor instanceof FuelGlobalProcessor) {\n const fetchConfig = {\n handlerId,\n filters: []\n }\n contractConfig.fuelCallConfigs.push(fetchConfig)\n contractConfig.contract!.address = '*'\n }\n }\n\n for (const blockHandler of processor.blockHandlers) {\n const handlerId = handlers.blockHandlers.push(blockHandler.handler) - 1\n contractConfig.intervalConfigs.push({\n slot: 0,\n slotInterval: blockHandler.blockInterval,\n minutes: 0,\n minutesInterval: blockHandler.timeIntervalInMinutes,\n handlerId: handlerId,\n fetchConfig: undefined\n // fetchConfig: blockHandler.fetchConfig\n })\n }\n\n // Finish up a contract\n config.contractConfigs.push(contractConfig)\n }\n\n this.handlers = handlers\n }\n\n supportedHandlers = [HandlerType.FUEL_CALL, HandlerType.FUEL_BLOCK]\n\n processBinding(request: DataBinding): Promise<ProcessResult> {\n switch (request.handlerType) {\n case HandlerType.FUEL_CALL:\n return this.processTransaction(request)\n case HandlerType.FUEL_BLOCK:\n return this.processBlock(request)\n default:\n throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType)\n }\n }\n\n async start(request: StartRequest) {}\n\n stateDiff(config: ProcessConfigResponse): boolean {\n return TemplateInstanceState.INSTANCE.getValues().length !== config.templateInstances.length\n }\n\n async processTransaction(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data?.fuelCall?.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"transaction can't be null\")\n }\n const fuelTransaction = binding.data.fuelCall\n\n const promises: Promise<ProcessResult>[] = []\n\n for (const handlerId of binding.handlerIds) {\n const promise = this.handlers.callHandlers[handlerId](fuelTransaction).catch((e) => {\n throw new ServerError(\n Status.INTERNAL,\n 'error processing transaction: ' + JSON.stringify(fuelTransaction.transaction) + '\\n' + errorString(e)\n )\n })\n if (GLOBAL_CONFIG.execution.sequential) {\n await promise\n }\n promises.push(promise)\n }\n return mergeProcessResults(await Promise.all(promises))\n }\n\n async processBlock(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data?.fuelBlock?.block) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Block can't be empty\")\n }\n const ethBlock = binding.data.fuelBlock\n\n const promises: Promise<ProcessResult>[] = []\n for (const handlerId of binding.handlerIds) {\n const promise = this.handlers.blockHandlers[handlerId](ethBlock).catch((e) => {\n console.error('error processing block: ', e)\n throw new ServerError(\n Status.INTERNAL,\n 'error processing block: ' + ethBlock.block?.height + '\\n' + errorString(e)\n )\n })\n if (GLOBAL_CONFIG.execution.sequential) {\n await promise\n }\n promises.push(promise)\n }\n return mergeProcessResults(await Promise.all(promises))\n }\n}\n\nPluginManager.INSTANCE.register(new FuelPlugin())\n;process.stdout.write(\"\");","import { ListStateStorage } from '@sentio/runtime'\nimport {\n Data_FuelBlock,\n Data_FuelCall,\n FuelAssetHandlerConfig,\n FuelCallHandlerConfig,\n HandleInterval,\n OnIntervalConfig,\n ProcessResult\n} from '@sentio/protos'\nimport { Block, TransactionSummary } from 'fuels'\n\nexport interface FuelBaseProcessor<T> {\n configure(): Promise<void>\n config: T\n callHandlers: CallHandler<Data_FuelCall>[]\n blockHandlers: BlockHandler[]\n}\n\nexport class FuelProcessorState extends ListStateStorage<FuelBaseProcessor<any>> {\n static INSTANCE = new FuelProcessorState()\n}\n\nexport type CallHandler<T> = {\n handler: (call: T) => Promise<ProcessResult>\n fetchConfig?: Partial<FuelCallHandlerConfig>\n assetConfig?: Partial<FuelAssetHandlerConfig>\n logConfig?: {\n logIds: string[]\n }\n}\n\nexport type BlockHandler = {\n blockInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handler: (block: Data_FuelBlock) => Promise<ProcessResult>\n fetchConfig?: Partial<OnIntervalConfig>\n}\n\nexport interface FuelLog<T> {\n logId: string\n data: T\n receiptIndex: number\n}\n\nexport type FuelTransaction = TransactionSummary & {\n blockNumber?: string\n logs?: FuelLog<any>[]\n sender?: string\n}\n\nexport type FuelBlock = Omit<Block, 'transactionIds'>\n;process.stdout.write(\"\");","import { FuelChainId } from '@sentio/chain'\n\nexport type FuelNetwork = FuelChainId\nexport const FuelNetwork = <const>{\n MAIN_NET: FuelChainId.FUEL_MAINNET,\n TEST_NET: FuelChainId.FUEL_TESTNET\n}\n\nexport function getRpcEndpoint(network: FuelNetwork): string {\n switch (network) {\n case FuelNetwork.TEST_NET:\n return 'https://testnet.fuel.network/v1/graphql'\n }\n return 'https://testnet.fuel.network/v1/graphql'\n}\n;process.stdout.write(\"\");","import { BaseContext, Labels, normalizeLabels } from '../core/index.js'\nimport { ChainId } from '@sentio/chain'\nimport { RecordMetaData } from '@sentio/protos'\nimport type { CallResult, Contract } from 'fuels'\nimport { InvocationScopeLike } from 'fuels'\nimport { FuelBlock, FuelLog, FuelTransaction } from './types.js'\n\nexport class FuelCall {\n constructor(\n funcScopes: InvocationScopeLike | Array<InvocationScopeLike>,\n callResult: CallResult,\n isMultiCall: boolean,\n readonly args?: Record<string, any>,\n readonly logs?: FuelLog<unknown>[]\n ) {\n // super(funcScopes, callResult, isMultiCall)\n }\n}\n\nexport class FuelContext extends BaseContext {\n private logIndex: number = -1\n constructor(\n readonly chainId: ChainId,\n readonly contractAddress: string,\n readonly contractName: string,\n readonly timestamp: Date,\n readonly transaction: FuelTransaction | null,\n readonly block: FuelBlock | null\n ) {\n super({})\n }\n\n getChainId(): ChainId {\n return this.chainId\n }\n\n setLogIndex(logIndex: number): void {\n this.logIndex = logIndex\n }\n\n protected getMetaDataInternal(name: string, labels: Labels): RecordMetaData {\n return {\n address: this.contractAddress,\n contractName: this.contractName,\n blockNumber: BigInt(this.block?.height?.toString() ?? (this.transaction?.blockNumber || 0)),\n transactionIndex: 0,\n transactionHash: this.transaction?.id || '', // TODO\n chainId: this.getChainId(),\n name: name,\n logIndex: this.logIndex,\n labels: normalizeLabels(labels)\n }\n }\n}\n\nexport class FuelContractContext<TContract extends Contract> extends FuelContext {\n constructor(\n readonly chainId: ChainId,\n readonly contract: TContract,\n readonly contractAddress: string,\n readonly contractName: string,\n readonly timestamp: Date,\n readonly transaction: FuelTransaction | null,\n readonly block: FuelBlock | null\n ) {\n super(chainId, contractAddress, contractName, timestamp, transaction, block)\n }\n\n get provider() {\n return this.contract.provider\n }\n}\n;process.stdout.write(\"\");","import {\n AbiMap,\n arrayify,\n assembleTransactionSummary,\n BigNumberCoder,\n bn,\n Input,\n InputType,\n Interface,\n processGqlReceipt,\n Provider,\n ReceiptType,\n TransactionCoder,\n TransactionResponse\n} from 'fuels'\nimport { FuelLog, FuelTransaction } from './types.js'\n\nexport type FuelFetchConfig = {\n includeFailed?: boolean\n}\n\nexport const DEFAULT_FUEL_FETCH_CONFIG: FuelFetchConfig = {\n includeFailed: false\n}\n\nfunction findSenderFromInputs(inputs: Input[] | undefined, baseAssetId: string): string | undefined {\n for (const input of inputs || []) {\n if (input.type == InputType.Coin && input.assetId == baseAssetId) {\n return input.owner\n }\n }\n return undefined\n}\n\nexport function decodeFuelTransaction(gqlTransaction: any, provider: Provider): FuelTransaction {\n const rawPayload = arrayify(gqlTransaction.rawPayload)\n const receipts = gqlTransaction?.status.receipts?.map(processGqlReceipt) || []\n\n const [decodedTransaction] = new TransactionCoder().decode(rawPayload, 0)\n const { gasCosts, feeParameters, txParameters, baseAssetId } = provider.getChain().consensusParameters\n const blockNumber = gqlTransaction.status?.block?.header?.height\n const { gasPriceFactor, gasPerByte } = feeParameters\n const { maxInputs, maxGasPerTx } = txParameters\n const gqlTransactionStatus = {\n type: gqlTransaction.status?.__typename,\n ...gqlTransaction.status\n }\n return {\n ...assembleTransactionSummary({\n id: gqlTransaction.id,\n receipts,\n transaction: decodedTransaction,\n transactionBytes: rawPayload,\n gqlTransactionStatus,\n gasPerByte: bn(gasPerByte),\n gasPriceFactor: bn(gasPriceFactor),\n maxInputs,\n gasCosts,\n gasPrice: bn(gqlTransaction.gasPrice),\n maxGasPerTx,\n baseAssetId\n }),\n blockNumber,\n sender: findSenderFromInputs(decodedTransaction.inputs, baseAssetId)\n }\n}\n\nexport async function decodeFuelTransactionWithAbi(\n gqlTransaction: any,\n abiMap: AbiMap,\n provider: Provider\n): Promise<FuelTransaction> {\n const rawPayload = arrayify(gqlTransaction.rawPayload)\n const [decodedTransaction] = new TransactionCoder().decode(rawPayload, 0)\n\n const receipts = gqlTransaction?.status.receipts?.map(processGqlReceipt) || []\n\n // const {\n // consensusParameters: {\n // feeParameters: { gasPerByte, gasPriceFactor },\n // txParameters: { maxInputs, maxGasPerTx },\n // gasCosts\n // }\n // } = provider.getChain()\n //\n const gqlTransactionStatus = {\n type: gqlTransaction.status?.__typename,\n ...gqlTransaction.status\n }\n\n const blockNumber = gqlTransactionStatus?.block?.header?.height\n const abi = Object.values(abiMap)[0]\n const logs = [] as FuelLog<any>[]\n ;(receipts as any[]).forEach((receipt, idx) => {\n if (receipt.type === ReceiptType.LogData || receipt.type === ReceiptType.Log) {\n const interfaceToUse = new Interface(abi)\n const data = receipt.type === ReceiptType.Log ? new BigNumberCoder('u64').encode(receipt.val0) : receipt.data\n const logId = receipt.val1.toString()\n const [decodedLog] = interfaceToUse.decodeLog(data, logId)\n logs.push({ logId, data: decodedLog, receiptIndex: idx })\n }\n })\n\n const txResponse = new TransactionResponse(gqlTransaction.status.transactionId, provider, {\n main: Object.values(abiMap)[0],\n otherContractsAbis: {}\n })\n\n // @ts-ignore - hack\n txResponse.gqlTransaction = {\n ...gqlTransaction,\n status: gqlTransactionStatus\n }\n const summary = await txResponse.getTransactionSummary()\n\n return {\n /*...assembleTransactionSummary({\n id: gqlTransaction.id,\n receipts,\n transaction: decodedTransaction,\n transactionBytes: rawPayload,\n gqlTransactionStatus,\n gasPerByte: bn(gasPerByte),\n gasPriceFactor: bn(gasPriceFactor),\n abiMap,\n maxInputs,\n gasCosts,\n maxGasPerTx,\n gasPrice: bn(gqlTransaction.gasPrice)\n }),*/\n ...summary,\n blockNumber,\n logs,\n sender: findSenderFromInputs(decodedTransaction.inputs, provider.getChain().consensusParameters.baseAssetId)\n }\n}\n;process.stdout.write(\"\");","import { CallHandler, FuelBaseProcessor, FuelProcessorState } from './types.js'\nimport { Data_FuelCall, FuelAssetHandlerConfig_AssetFilter } from '@sentio/protos'\nimport { FuelNetwork, getRpcEndpoint } from './network.js'\nimport { FuelContext } from './context.js'\nimport { decodeFuelTransaction } from './transaction.js'\nimport { Provider, InputType, OutputType } from 'fuels'\n\nexport class FuelAssetProcessor implements FuelBaseProcessor<FuelAssetProcessorConfig> {\n callHandlers: CallHandler<Data_FuelCall>[] = []\n blockHandlers = []\n private provider: Provider\n\n static bind(config: FuelAssetProcessorConfig): FuelAssetProcessor {\n const processor = new FuelAssetProcessor(config)\n FuelProcessorState.INSTANCE.addValue(processor)\n return processor\n }\n\n constructor(readonly config: FuelAssetProcessorConfig) {}\n\n async configure(): Promise<void> {\n const url = getRpcEndpoint(this.config.chainId)\n this.provider = await Provider.create(url)\n }\n\n onTransfer(filter: TransferFilter, handler: (transfers: FuelTransfer, ctx: FuelContext) => void | Promise<void>) {\n const filters: FuelAssetHandlerConfig_AssetFilter[] = []\n\n const assetIds = arrayify(filter.assetId)\n const froms = arrayify(filter.from)\n const tos = arrayify(filter.to)\n\n for (const assetId of assetIds) {\n for (const from of froms) {\n for (const to of tos) {\n filters.push({\n assetId: assetId,\n fromAddress: from,\n toAddress: to\n })\n }\n }\n }\n\n const callHandler = {\n handler: async (call: Data_FuelCall) => {\n const gqlTransaction = call.transaction\n const tx = decodeFuelTransaction(gqlTransaction, this.provider)\n\n const transfer: FuelTransfer = {\n from: [],\n to: []\n }\n for (const input of tx.transaction.inputs || []) {\n if (input.type == InputType.Coin) {\n transfer.from.push({\n address: input.owner,\n assetId: input.assetId\n })\n }\n }\n\n for (const output of tx.transaction.outputs || []) {\n if (output.type == OutputType.Coin) {\n const value = output.amount.toString(10)\n transfer.to.push({\n address: output.to,\n amount: BigInt(value),\n assetId: output.assetId\n })\n }\n }\n\n const assetId = transfer.from[0].assetId || ''\n\n const ctx = new FuelContext(\n this.config.chainId,\n assetId,\n this.config.name ?? '',\n call.timestamp || new Date(0),\n tx,\n null\n )\n await handler(transfer, ctx)\n return ctx.stopAndGetResult()\n },\n assetConfig: {\n filters\n }\n }\n this.callHandlers.push(callHandler)\n return this\n }\n}\n\nexport type FuelAssetProcessorConfig = {\n name?: string\n chainId: FuelNetwork\n startBlock?: bigint\n endBlock?: bigint\n}\n\nexport type TransferFilter = {\n from?: string | string[]\n to?: string | string[]\n assetId?: string | string[]\n}\n\nexport type FuelTransfer = {\n from: {\n assetId: string\n address: string\n }[]\n to: {\n address: string\n amount: bigint\n assetId: string\n }[]\n}\n\nfunction arrayify(value?: string | string[]): Array<string | undefined> {\n if (value) {\n if (Array.isArray(value)) {\n return value.length > 0 ? value : [undefined]\n }\n return [value]\n }\n return [undefined]\n}\n;process.stdout.write(\"\");","import { Data_FuelBlock, Data_FuelCall, FuelCallFilter, HandleInterval, ProcessResult } from '@sentio/protos'\nimport { FuelCall, FuelContext, FuelContractContext } from './context.js'\nimport { bn, Contract, Interface, JsonAbi, Provider } from 'fuels'\nimport { FuelNetwork, getRpcEndpoint } from './network.js'\nimport { decodeFuelTransactionWithAbi, DEFAULT_FUEL_FETCH_CONFIG, FuelFetchConfig } from './transaction.js'\nimport {\n BlockHandler,\n CallHandler,\n FuelBaseProcessor,\n FuelBlock,\n FuelLog,\n FuelProcessorState,\n FuelTransaction\n} from './types.js'\nimport { mergeProcessResults } from '@sentio/runtime'\nimport { PromiseOrVoid } from '../core/index.js'\nimport { ServerError, Status } from 'nice-grpc'\n\nexport class FuelProcessor<TContract extends Contract> implements FuelBaseProcessor<FuelProcessorConfig> {\n callHandlers: CallHandler<Data_FuelCall>[] = []\n blockHandlers: BlockHandler[] = []\n\n private provider: Provider\n private contract: TContract\n\n static bind(config: FuelProcessorConfig): FuelProcessor<any> {\n const processor = new FuelProcessor(config)\n FuelProcessorState.INSTANCE.addValue(processor)\n return processor\n }\n\n constructor(readonly config: FuelProcessorConfig) {}\n\n latestGasPrice: string | undefined\n async configure() {\n const url = getRpcEndpoint(this.config.chainId)\n this.provider = await Provider.create(url)\n this.provider.getLatestGasPrice = async () => {\n // avoid flood the endpoint, cache the latest gas price\n if (this.latestGasPrice) {\n return bn(this.latestGasPrice)\n }\n const { latestGasPrice } = await this.provider.operations.getLatestGasPrice()\n this.latestGasPrice = latestGasPrice?.gasPrice\n return bn(latestGasPrice.gasPrice)\n }\n\n this.contract = new Contract(this.config.address, this.config.abi!, this.provider) as TContract\n }\n\n public onTransaction(\n handler: (transaction: FuelTransaction, ctx: FuelContractContext<TContract>) => void | Promise<void>,\n config: FuelFetchConfig = DEFAULT_FUEL_FETCH_CONFIG\n ) {\n const callHandler = {\n handler: async (call: Data_FuelCall) => {\n const abiMap = this.config.abi\n ? {\n [this.config.address]: this.config.abi\n }\n : {}\n const tx = await decodeFuelTransactionWithAbi(call.transaction, abiMap, this.provider)\n\n const ctx = new FuelContractContext(\n this.config.chainId,\n this.contract,\n this.config.address,\n this.config.name ?? this.config.address,\n call.timestamp || new Date(0),\n tx,\n null\n )\n await handler(tx, ctx)\n return ctx.stopAndGetResult()\n },\n fetchConfig: {\n filters: [],\n ...config\n }\n }\n this.callHandlers.push(callHandler)\n return this\n }\n\n // hide onCall for now\n private onCall(\n nameFilter: string | string[],\n handler: (call: FuelCall, ctx: FuelContext) => void | Promise<void>,\n config: FuelFetchConfig = DEFAULT_FUEL_FETCH_CONFIG\n ) {\n const names = new Set(Array.isArray(nameFilter) ? nameFilter : [nameFilter])\n\n if (!this.config.abi) {\n throw new Error('ABI must be provided to use onCall')\n }\n const abi = this.config.abi\n\n const filters: Record<string, FuelCallFilter> = {}\n const abiInterface = new Interface(abi)\n for (const name of names) {\n try {\n const func = abiInterface.functions[name]\n const filter = bn(func.selector, 'hex').toString()\n filters[func.name] = {\n function: filter,\n includeFailed: !!config.includeFailed\n }\n } catch (e) {\n console.error(e)\n }\n }\n\n const callHandler = {\n handler: async (call: Data_FuelCall) => {\n try {\n // const contract = new Contract(this.config.address, abi, this.provider)\n const gqlTransaction = call.transaction\n const tx = await decodeFuelTransactionWithAbi(gqlTransaction, { [this.config.address]: abi }, this.provider)\n\n const ctx = new FuelContext(\n this.config.chainId,\n this.config.address,\n this.config.name ?? this.config.address,\n call.timestamp || new Date(0),\n tx,\n null\n )\n for (const op of tx.operations) {\n for (const call of op.calls || []) {\n if (names.has(call.functionName)) {\n const fn = this.contract.functions[call.functionName]\n const args = Object.values(call.argumentsProvided || {})\n const scope = fn(...args)\n const invocationResult = new FuelCall(scope, tx, false, call.argumentsProvided, tx.logs)\n await handler(invocationResult, ctx)\n }\n }\n }\n\n return ctx.stopAndGetResult()\n } catch (e) {\n console.error(e)\n return {\n gauges: [],\n counters: [],\n events: [],\n exports: [],\n states: {\n configUpdated: false\n }\n }\n }\n },\n fetchConfig: {\n filters: Object.values(filters)\n }\n }\n this.callHandlers.push(callHandler)\n return this\n }\n\n public onLog<T>(\n logIdFilter: string | string[],\n handler: (logs: FuelLog<T>, ctx: FuelContractContext<TContract>) => void | Promise<void>\n ) {\n const logIds = new Set(Array.isArray(logIdFilter) ? logIdFilter : [logIdFilter])\n\n const callHandler = {\n handler: async (call: Data_FuelCall) => {\n try {\n const gqlTransaction = call.transaction\n const tx = await decodeFuelTransactionWithAbi(\n gqlTransaction,\n { [this.config.address]: this.config.abi! },\n this.provider\n )\n\n const results: ProcessResult[] = []\n const logs = (tx.logs || []).filter((log) => logIds.has(log.logId))\n for (const log of logs) {\n const ctx = new FuelContractContext(\n this.config.chainId,\n this.contract,\n this.config.address,\n this.config.name ?? this.config.address,\n call.timestamp || new Date(0),\n tx,\n null\n )\n ctx.setLogIndex(log.receiptIndex)\n await handler(log, ctx)\n results.push(ctx.stopAndGetResult())\n }\n return mergeProcessResults(results)\n } catch (e) {\n console.error(e)\n return {\n gauges: [],\n counters: [],\n events: [],\n exports: [],\n states: {\n configUpdated: false\n }\n }\n }\n },\n logConfig: {\n logIds: Array.from(logIds)\n }\n }\n this.callHandlers.push(callHandler)\n return this\n }\n\n public onInterval(\n handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n blockInterval: HandleInterval | undefined\n // fetchConfig: Partial<FuelFetchConfig> | undefined\n ): this {\n if (timeInterval) {\n if (timeInterval.backfillInterval < timeInterval.recentInterval) {\n timeInterval.backfillInterval = timeInterval.recentInterval\n }\n }\n\n const processor = this\n\n this.blockHandlers.push({\n blockInterval,\n timeIntervalInMinutes: timeInterval,\n handler: async function (data: Data_FuelBlock) {\n const header = data.block\n if (!header) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Block is empty')\n }\n\n const block: FuelBlock = {\n id: header.id,\n height: bn(header.height),\n time: header.time,\n header: {\n applicationHash: header.applicationHash,\n daHeight: bn(header.daHeight),\n eventInboxRoot: header.eventInboxRoot,\n messageOutboxRoot: header.messageOutboxRoot,\n prevRoot: header.prevRoot,\n stateTransitionBytecodeVersion: header.stateTransitionBytecodeVersion,\n transactionsCount: header.transactionsCount,\n transactionsRoot: header.transactionsRoot\n }\n }\n\n const ctx = new FuelContractContext(\n processor.config.chainId,\n processor.contract,\n processor.config.address,\n processor.config.name ?? processor.config.address,\n data.timestamp || new Date(0),\n null,\n block\n )\n await handler(block, ctx)\n return ctx.stopAndGetResult()\n }\n })\n return this\n }\n\n public onBlockInterval(\n handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid,\n blockInterval = 250,\n backfillBlockInterval = 1000\n // fetchConfig?: Partial<FuelFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n undefined,\n {\n recentInterval: blockInterval,\n backfillInterval: backfillBlockInterval\n }\n // fetchConfig,\n )\n }\n\n public onTimeInterval(\n handler: (block: FuelBlock, ctx: FuelContractContext<TContract>) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240\n // fetchConfig?: Partial<FuelFetchConfig>,\n ): this {\n return this.onInterval(\n handler,\n { recentInterval: timeIntervalInMinutes, backfillInterval: backfillTimeIntervalInMinutes },\n undefined\n // fetchConfig\n )\n }\n}\n\nexport type FuelProcessorConfig = {\n address: string\n name?: string\n chainId: FuelNetwork\n startBlock?: bigint\n endBlock?: bigint\n abi: JsonAbi\n}\n;process.stdout.write(\"\");","import { CallHandler, FuelBaseProcessor, FuelProcessorState, FuelTransaction } from './types.js'\nimport { Data_FuelCall } from '@sentio/protos'\nimport { Provider } from 'fuels'\nimport { getRpcEndpoint } from './network.js'\nimport { decodeFuelTransaction, DEFAULT_FUEL_FETCH_CONFIG, FuelFetchConfig } from './transaction.js'\nimport { FuelContext } from './context.js'\nimport { FuelProcessorConfig } from './fuel-processor.js'\nimport { mergeProcessResults } from '@sentio/runtime'\n\ntype GlobalFuelProcessorConfig = Omit<FuelProcessorConfig, 'address' | 'abi'>\n\nexport class FuelGlobalProcessor implements FuelBaseProcessor<GlobalFuelProcessorConfig> {\n callHandlers: CallHandler<Data_FuelCall>[] = []\n blockHandlers = []\n\n private provider: Provider\n\n static bind(config: GlobalFuelProcessorConfig): FuelGlobalProcessor {\n const processor = new FuelGlobalProcessor(config)\n FuelProcessorState.INSTANCE.addValue(processor)\n return processor\n }\n\n constructor(readonly config: GlobalFuelProcessorConfig) {}\n\n async configure() {\n const url = getRpcEndpoint(this.config.chainId)\n this.provider = await Provider.create(url)\n }\n\n public onTransaction(\n handler: (transaction: FuelTransaction, ctx: FuelContext) => void | Promise<void>,\n config: FuelFetchConfig = DEFAULT_FUEL_FETCH_CONFIG\n ) {\n const callHandler = {\n handler: async (call: Data_FuelCall) => {\n let tx: FuelTransaction\n try {\n tx = decodeFuelTransaction(call.transaction, this.provider)\n } catch (e) {\n console.error('error decoding transaction', e)\n return mergeProcessResults([])\n }\n const ctx = new FuelContext(\n this.config.chainId,\n '*',\n this.config.name ?? '*',\n call.timestamp || new Date(0),\n tx,\n null\n )\n await handler(tx, ctx)\n return ctx.stopAndGetResult()\n },\n fetchConfig: {\n filters: [],\n ...config\n }\n }\n this.callHandlers.push(callHandler)\n return this\n }\n}\n;process.stdout.write(\"\");","import { FuelProcessor, FuelProcessorConfig } from './fuel-processor.js'\nimport { Contract, JsonAbi } from 'fuels'\n// import { FuelCall } from './context.js'\nimport { FuelChainId } from '@sentio/chain'\nimport { FuelLog, FuelProcessorState } from './types.js'\n\nexport abstract class FuelAbstractProcessor<TContract extends Contract> extends FuelProcessor<TContract> {\n protected constructor(abi: JsonAbi, config?: Omit<FuelProcessorConfig, 'abi'>) {\n if (!config) {\n config = {\n chainId: FuelChainId.FUEL_MAINNET,\n address: '*'\n }\n }\n super({\n ...config,\n abi\n })\n FuelProcessorState.INSTANCE.addValue(this)\n }\n}\n\nexport class TypedCall<T extends Array<any>, R> {\n args: T\n returnValue: R\n argsObject?: Record<string, any>\n logs?: FuelLog<unknown>[]\n\n // constructor(call: FuelCall) {\n // this.args = call.args as T\n // this.returnValue = call.value as R\n // this.argsObject = call.args\n // this.logs = call.logs\n // }\n}\n;process.stdout.write(\"\");","export { FuelPlugin } from './fuel-plugin.js'\nexport * from './context.js'\nexport * from './fuel-processor.js'\nexport * from './network.js'\nexport * from './transaction.js'\nexport * from './base-processor.js'\nexport * from './asset-processor.js'\nexport * from './types.js'\nexport * from './global-processor.js'\n;process.stdout.write(\"\");"],"mappings":"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","names":["errorString","GLOBAL_CONFIG","mergeProcessResults","Plugin","PluginManager","USER_PROCESSOR","import_nice_grpc","ListStateStorage","_FuelProcessorState","ListStateStorage","FuelProcessorState","__publicField","import_chain","FuelNetwork","getRpcEndpoint","network","FuelCall","funcScopes","callResult","isMultiCall","args","logs","FuelContext","BaseContext","chainId","contractAddress","contractName","timestamp","transaction","block","logIndex","name","labels","normalizeLabels","FuelContractContext","contract","DEFAULT_FUEL_FETCH_CONFIG","findSenderFromInputs","inputs","baseAssetId","input","InputType","decodeFuelTransaction","gqlTransaction","provider","rawPayload","arrayify","receipts","processGqlReceipt","decodedTransaction","TransactionCoder","gasCosts","feeParameters","txParameters","blockNumber","gasPriceFactor","gasPerByte","maxInputs","maxGasPerTx","gqlTransactionStatus","assembleTransactionSummary","bn","decodeFuelTransactionWithAbi","abiMap","abi","logs","receipt","idx","ReceiptType","interfaceToUse","Interface","data","BigNumberCoder","logId","decodedLog","txResponse","TransactionResponse","FuelAssetProcessor","config","processor","FuelProcessorState","url","getRpcEndpoint","Provider","filter","handler","filters","assetIds","arrayify","froms","tos","assetId","from","to","callHandler","call","gqlTransaction","tx","decodeFuelTransaction","transfer","input","InputType","output","OutputType","value","ctx","FuelContext","import_nice_grpc","mergeProcessResults","FuelProcessor","config","processor","FuelProcessorState","url","getRpcEndpoint","Provider","bn","latestGasPrice","Contract","handler","DEFAULT_FUEL_FETCH_CONFIG","callHandler","call","abiMap","tx","decodeFuelTransactionWithAbi","ctx","FuelContractContext","nameFilter","names","abi","filters","abiInterface","Interface","name","func","filter","e","gqlTransaction","FuelContext","op","fn","args","scope","invocationResult","FuelCall","logIdFilter","logIds","results","logs","log","timeInterval","blockInterval","data","header","block","backfillBlockInterval","timeIntervalInMinutes","backfillTimeIntervalInMinutes","mergeProcessResults","FuelGlobalProcessor","config","processor","FuelProcessorState","url","getRpcEndpoint","Provider","handler","DEFAULT_FUEL_FETCH_CONFIG","callHandler","call","tx","decodeFuelTransaction","e","ctx","FuelContext","FuelPlugin","Plugin","config","handlers","processor","FuelProcessorState","contractConfig","ContractConfig","USER_PROCESSOR","callHandler","handlerId","FuelProcessor","fetchConfig","FuelAssetProcessor","assetConfig","FuelGlobalProcessor","blockHandler","HandlerType","request","TemplateInstanceState","binding","fuelTransaction","promises","promise","e","errorString","GLOBAL_CONFIG","mergeProcessResults","ethBlock","PluginManager","import_chain","FuelAbstractProcessor","FuelProcessor","abi","config","FuelProcessorState","TypedCall"]}