@tuwaio/pulsar-core 0.6.1 → 0.6.2
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.
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var immer=require('immer'),vanilla=require('zustand/vanilla'),orbitCore=require('@tuwaio/orbit-core'),D=require('dayjs'),middleware=require('zustand/middleware'),zustand=require('zustand');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var D__default=/*#__PURE__*/_interopDefault(D);function E({maxTransactions:
|
|
1
|
+
'use strict';var immer=require('immer'),vanilla=require('zustand/vanilla'),orbitCore=require('@tuwaio/orbit-core'),D=require('dayjs'),middleware=require('zustand/middleware'),zustand=require('zustand');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var D__default=/*#__PURE__*/_interopDefault(D);function E({maxTransactions:n,onRemoteCreate:e}){return (i,l)=>({transactionsPool:{},lastAddedTxKey:void 0,initialTx:void 0,addTxToPool:a=>{let t={...a,pending:true};i(o=>immer.produce(o,r=>{if(r.lastAddedTxKey=a.txKey,a.txKey){if(Object.keys(r.transactionsPool).length>=n){let T=Object.values(r.transactionsPool).sort((d,c)=>d.localTimestamp-c.localTimestamp);if(T.length>0){let d=T[0];delete r.transactionsPool[d.txKey];}}r.transactionsPool[a.txKey]=t;}})),e&&e(t).catch(o=>console.error("[Pulsar Sync] Create failed:",o));},updateTxParams:(a,t)=>{i(o=>immer.produce(o,r=>{let s=r.transactionsPool[a];s&&Object.assign(s,t);}));},removeTxFromPool:a=>{i(t=>immer.produce(t,o=>{delete o.transactionsPool[a];}));},closeTxTrackedModal:a=>{i(t=>immer.produce(t,o=>{if(a&&o.transactionsPool[a]){let r=o.transactionsPool[a];o.transactionsPool[a]={...r,isTrackedModalOpen:false};}o.initialTx=void 0;}));},getLastTxKey:()=>l().lastAddedTxKey})}var F=n=>Object.values(n).sort((e,i)=>Number(e.localTimestamp)-Number(i.localTimestamp)),Y=n=>F(n).filter(e=>e.pending),Z=(n,e)=>n[e],N=(n,e)=>F(n).filter(i=>i.from.toLowerCase()===e.toLowerCase()),ee=(n,e)=>N(n,e).filter(i=>i.pending);var j=(a=>(a.Ethereum="ethereum",a.Safe="safe",a.Gelato="gelato",a.Solana="solana",a))(j||{}),A=(l=>(l.Failed="Failed",l.Success="Success",l.Replaced="Replaced",l))(A||{});var M=n=>n==="Success"||n==="Replaced",O=(n,e)=>{let i=n[e.txKey];if(i){if(M(i.status))return false;if(i.pending){if(M(e.status))return n[e.txKey]={...i,...e},true;let l=typeof e.confirmations=="number"?e.confirmations:0,a=typeof i.confirmations=="number"?i.confirmations:0;return l>a?(n[e.txKey]={...i,...e},true):false}}return n[e.txKey]=e,true};function Te({localTransactionsPool:n,getHistory:e,onHistoryFetched:i}){immer.setAutoFreeze(false);let l=t=>({isLoading:t,isError:false}),a=t=>t?(i&&queueMicrotask(()=>i(t.docs)),o=>immer.produce(o,r=>{let s=r.transactionsPool;for(let T of t.docs)O(s,T);r.currentPage=t.page,r.hasMore=t.hasNextPage,r.isLoading=false;})):o=>o;return vanilla.createStore()((t,o)=>({transactionsPool:n,isLoading:false,isError:false,hasMore:false,currentPage:1,syncWithLocalPool:r=>{t(s=>immer.produce(s,T=>{let d=T.transactionsPool;for(let c of Object.values(r))O(d,c);}));},fetchInitial:async r=>{if(!(!e||!r)){t(l(true));try{let s=await e({page:1,walletAddress:r});t(a(s));}catch(s){console.error("[Pulsar] Failed to fetch initial transaction history:",s),t({isLoading:false,isError:true});}}},fetchNextPage:async r=>{let{hasMore:s,isLoading:T,currentPage:d}=o();if(!(!e||!s||T||!r)){t(l(true));try{let c=d+1,m=await e({page:c,walletAddress:r});t(a(m));}catch(c){console.error(`[Pulsar] Failed to fetch transaction history page ${d+1}:`,c),t({isLoading:false,isError:true});}}}}))}function Ae({adapter:n,maxTransactions:e=50,onRemoteCreate:i,gelatoApiKey:l,...a}){return vanilla.createStore()(middleware.persist((t,o)=>({...E({maxTransactions:e,onRemoteCreate:i})(t,o),getAdapter:()=>n,initializeTransactionsPool:async()=>{let r=Object.values(o().transactionsPool).filter(s=>s.pending);await Promise.all(r.map(s=>orbitCore.selectAdapterByKey({adapterKey:s.adapter,adapter:n})?.checkAndInitializeTrackerInStore({tx:s,gelatoApiKey:l,...o()})));},injectExternalPendingTxs:async r=>{let T=o().getAdapter(),d=[];t(c=>immer.produce(c,m=>{let g=m.transactionsPool;r.forEach(p=>{let x=g[p.txKey];p.pending&&!x&&(g[p.txKey]=p,d.push(p));let S=p.status==="Success"||p.status==="Failed"||p.status==="Replaced";x?.pending&&S&&(x.status=p.status,x.pending=false,p.txKey&&(x.txKey=p.txKey),p.finishedTimestamp&&(x.finishedTimestamp=p.finishedTimestamp));});})),d.length>0&&await Promise.all(d.map(c=>orbitCore.selectAdapterByKey({adapterKey:c.adapter,adapter:T})?.checkAndInitializeTrackerInStore({tx:c,gelatoApiKey:l,...o()})));},executeTxAction:async({defaultTracker:r,actionFunction:s,params:T,...d})=>{let{desiredChainID:c,tracker:m,...g}=T,{onSuccess:p,onError:x,onReplaced:S}=d,K=D__default.default().unix();t({initialTx:{...T,actionFunction:s,localTimestamp:K,isInitializing:true}});let f=orbitCore.selectAdapterByKey({adapterKey:g.adapter,adapter:n}),w=u=>{t(k=>immer.produce(k,P=>{P.initialTx&&(P.initialTx.isInitializing=false,P.initialTx.error=orbitCore.normalizeError(u));}));};if(!f){let u=new Error("No adapter found for this transaction.");throw w(u),u}try{let{connectorType:u,walletAddress:k}=f.getConnectorInfo();await f.checkChainForTx(c);let P=await s();if(!P){t({initialTx:void 0});return}let{tracker:R,txKey:h}=f.checkTransactionsTracker({actionTxKey:P,connectorType:u,tracker:m,gelatoApiKey:l}),z={...g,connectorType:u,from:k,tracker:R||r,chainId:orbitCore.setChainId(c),localTimestamp:K,txKey:h,hash:R==="ethereum"?P:void 0,pending:!1,isTrackedModalOpen:T.withTrackedModal};o().addTxToPool(z),t(B=>immer.produce(B,I=>{I.initialTx&&(I.initialTx.isInitializing=!1,I.initialTx.lastTxKey=h);}));let L=o().transactionsPool[h];await f.checkAndInitializeTrackerInStore({tx:L,onSuccess:p,onError:x,onReplaced:S,gelatoApiKey:l,...o()});}catch(u){throw w(u),u}}}),{...a}))}var we=(n=>e=>zustand.useStore(n,e));var V=5e3,X=10;function Ee(n){let{tx:e,fetcher:i,onInitialize:l,onSuccess:a,onFailure:t,onIntervalTick:o,onReplaced:r,removeTxFromPool:s,pollingInterval:T=V,maxRetries:d=X}=n;if(!e.pending)return;l?.();let c=d,m=true,g=x=>{m&&(m=false,s&&!x?.withoutRemoving&&s(e.txKey));};(async()=>{for(;m&&c>0;)try{if(await new Promise(x=>setTimeout(x,T)),!m)break;await i({tx:e,stopPolling:g,onSuccess:a,onFailure:t,onIntervalTick:o,onReplaced:r});}catch(x){console.error(`Polling fetcher for txKey ${e.txKey} threw an error:`,x),c--;}c<=0&&(console.warn(`Polling for txKey ${e.txKey} stopped after reaching the maximum number of retries.`),t(),g());})();}exports.TransactionStatus=A;exports.TransactionTracker=j;exports.createBoundedUseStore=we;exports.createPulsarStore=Ae;exports.createTxInMemoryStore=Te;exports.initializePollingTracker=Ee;exports.initializeTxTrackingStore=E;exports.selectAllTransactions=F;exports.selectAllTransactionsByActiveWallet=N;exports.selectPendingTransactions=Y;exports.selectPendingTransactionsByActiveWallet=ee;exports.selectTxByKey=Z;
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {produce,setAutoFreeze}from'immer';import {createStore}from'zustand/vanilla';import {selectAdapterByKey,setChainId,normalizeError}from'@tuwaio/orbit-core';import D from'dayjs';import {persist}from'zustand/middleware';import {useStore}from'zustand';function E({maxTransactions:
|
|
1
|
+
import {produce,setAutoFreeze}from'immer';import {createStore}from'zustand/vanilla';import {selectAdapterByKey,setChainId,normalizeError}from'@tuwaio/orbit-core';import D from'dayjs';import {persist}from'zustand/middleware';import {useStore}from'zustand';function E({maxTransactions:n,onRemoteCreate:e}){return (i,l)=>({transactionsPool:{},lastAddedTxKey:void 0,initialTx:void 0,addTxToPool:a=>{let t={...a,pending:true};i(o=>produce(o,r=>{if(r.lastAddedTxKey=a.txKey,a.txKey){if(Object.keys(r.transactionsPool).length>=n){let T=Object.values(r.transactionsPool).sort((d,c)=>d.localTimestamp-c.localTimestamp);if(T.length>0){let d=T[0];delete r.transactionsPool[d.txKey];}}r.transactionsPool[a.txKey]=t;}})),e&&e(t).catch(o=>console.error("[Pulsar Sync] Create failed:",o));},updateTxParams:(a,t)=>{i(o=>produce(o,r=>{let s=r.transactionsPool[a];s&&Object.assign(s,t);}));},removeTxFromPool:a=>{i(t=>produce(t,o=>{delete o.transactionsPool[a];}));},closeTxTrackedModal:a=>{i(t=>produce(t,o=>{if(a&&o.transactionsPool[a]){let r=o.transactionsPool[a];o.transactionsPool[a]={...r,isTrackedModalOpen:false};}o.initialTx=void 0;}));},getLastTxKey:()=>l().lastAddedTxKey})}var F=n=>Object.values(n).sort((e,i)=>Number(e.localTimestamp)-Number(i.localTimestamp)),Y=n=>F(n).filter(e=>e.pending),Z=(n,e)=>n[e],N=(n,e)=>F(n).filter(i=>i.from.toLowerCase()===e.toLowerCase()),ee=(n,e)=>N(n,e).filter(i=>i.pending);var j=(a=>(a.Ethereum="ethereum",a.Safe="safe",a.Gelato="gelato",a.Solana="solana",a))(j||{}),A=(l=>(l.Failed="Failed",l.Success="Success",l.Replaced="Replaced",l))(A||{});var M=n=>n==="Success"||n==="Replaced",O=(n,e)=>{let i=n[e.txKey];if(i){if(M(i.status))return false;if(i.pending){if(M(e.status))return n[e.txKey]={...i,...e},true;let l=typeof e.confirmations=="number"?e.confirmations:0,a=typeof i.confirmations=="number"?i.confirmations:0;return l>a?(n[e.txKey]={...i,...e},true):false}}return n[e.txKey]=e,true};function Te({localTransactionsPool:n,getHistory:e,onHistoryFetched:i}){setAutoFreeze(false);let l=t=>({isLoading:t,isError:false}),a=t=>t?(i&&queueMicrotask(()=>i(t.docs)),o=>produce(o,r=>{let s=r.transactionsPool;for(let T of t.docs)O(s,T);r.currentPage=t.page,r.hasMore=t.hasNextPage,r.isLoading=false;})):o=>o;return createStore()((t,o)=>({transactionsPool:n,isLoading:false,isError:false,hasMore:false,currentPage:1,syncWithLocalPool:r=>{t(s=>produce(s,T=>{let d=T.transactionsPool;for(let c of Object.values(r))O(d,c);}));},fetchInitial:async r=>{if(!(!e||!r)){t(l(true));try{let s=await e({page:1,walletAddress:r});t(a(s));}catch(s){console.error("[Pulsar] Failed to fetch initial transaction history:",s),t({isLoading:false,isError:true});}}},fetchNextPage:async r=>{let{hasMore:s,isLoading:T,currentPage:d}=o();if(!(!e||!s||T||!r)){t(l(true));try{let c=d+1,m=await e({page:c,walletAddress:r});t(a(m));}catch(c){console.error(`[Pulsar] Failed to fetch transaction history page ${d+1}:`,c),t({isLoading:false,isError:true});}}}}))}function Ae({adapter:n,maxTransactions:e=50,onRemoteCreate:i,gelatoApiKey:l,...a}){return createStore()(persist((t,o)=>({...E({maxTransactions:e,onRemoteCreate:i})(t,o),getAdapter:()=>n,initializeTransactionsPool:async()=>{let r=Object.values(o().transactionsPool).filter(s=>s.pending);await Promise.all(r.map(s=>selectAdapterByKey({adapterKey:s.adapter,adapter:n})?.checkAndInitializeTrackerInStore({tx:s,gelatoApiKey:l,...o()})));},injectExternalPendingTxs:async r=>{let T=o().getAdapter(),d=[];t(c=>produce(c,m=>{let g=m.transactionsPool;r.forEach(p=>{let x=g[p.txKey];p.pending&&!x&&(g[p.txKey]=p,d.push(p));let S=p.status==="Success"||p.status==="Failed"||p.status==="Replaced";x?.pending&&S&&(x.status=p.status,x.pending=false,p.txKey&&(x.txKey=p.txKey),p.finishedTimestamp&&(x.finishedTimestamp=p.finishedTimestamp));});})),d.length>0&&await Promise.all(d.map(c=>selectAdapterByKey({adapterKey:c.adapter,adapter:T})?.checkAndInitializeTrackerInStore({tx:c,gelatoApiKey:l,...o()})));},executeTxAction:async({defaultTracker:r,actionFunction:s,params:T,...d})=>{let{desiredChainID:c,tracker:m,...g}=T,{onSuccess:p,onError:x,onReplaced:S}=d,K=D().unix();t({initialTx:{...T,actionFunction:s,localTimestamp:K,isInitializing:true}});let f=selectAdapterByKey({adapterKey:g.adapter,adapter:n}),w=u=>{t(k=>produce(k,P=>{P.initialTx&&(P.initialTx.isInitializing=false,P.initialTx.error=normalizeError(u));}));};if(!f){let u=new Error("No adapter found for this transaction.");throw w(u),u}try{let{connectorType:u,walletAddress:k}=f.getConnectorInfo();await f.checkChainForTx(c);let P=await s();if(!P){t({initialTx:void 0});return}let{tracker:R,txKey:h}=f.checkTransactionsTracker({actionTxKey:P,connectorType:u,tracker:m,gelatoApiKey:l}),z={...g,connectorType:u,from:k,tracker:R||r,chainId:setChainId(c),localTimestamp:K,txKey:h,hash:R==="ethereum"?P:void 0,pending:!1,isTrackedModalOpen:T.withTrackedModal};o().addTxToPool(z),t(B=>produce(B,I=>{I.initialTx&&(I.initialTx.isInitializing=!1,I.initialTx.lastTxKey=h);}));let L=o().transactionsPool[h];await f.checkAndInitializeTrackerInStore({tx:L,onSuccess:p,onError:x,onReplaced:S,gelatoApiKey:l,...o()});}catch(u){throw w(u),u}}}),{...a}))}var we=(n=>e=>useStore(n,e));var V=5e3,X=10;function Ee(n){let{tx:e,fetcher:i,onInitialize:l,onSuccess:a,onFailure:t,onIntervalTick:o,onReplaced:r,removeTxFromPool:s,pollingInterval:T=V,maxRetries:d=X}=n;if(!e.pending)return;l?.();let c=d,m=true,g=x=>{m&&(m=false,s&&!x?.withoutRemoving&&s(e.txKey));};(async()=>{for(;m&&c>0;)try{if(await new Promise(x=>setTimeout(x,T)),!m)break;await i({tx:e,stopPolling:g,onSuccess:a,onFailure:t,onIntervalTick:o,onReplaced:r});}catch(x){console.error(`Polling fetcher for txKey ${e.txKey} threw an error:`,x),c--;}c<=0&&(console.warn(`Polling for txKey ${e.txKey} stopped after reaching the maximum number of retries.`),t(),g());})();}export{A as TransactionStatus,j as TransactionTracker,we as createBoundedUseStore,Ae as createPulsarStore,Te as createTxInMemoryStore,Ee as initializePollingTracker,E as initializeTxTrackingStore,F as selectAllTransactions,N as selectAllTransactionsByActiveWallet,Y as selectPendingTransactions,ee as selectPendingTransactionsByActiveWallet,Z as selectTxByKey};
|